telepathy-qt-0.9.3/0000755000175200001440000000000012000060453016406 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/doc/0000755000175200001440000000000012000060453017153 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/doc/html/0000755000175200001440000000000012000060453020117 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/doc/html/a00876.html0000644000175200001440000000545212000060453021640 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::HandledChannelNotifier Member List
This is the complete list of members for Tp::HandledChannelNotifier, including all inherited members.
channel() const Tp::HandledChannelNotifier
connectNotify(const char *)Tp::HandledChannelNotifier [protected]
handledAgain(const QDateTime &userActionTime, const Tp::ChannelRequestHints &requestHints)Tp::HandledChannelNotifier [signal]
~HandledChannelNotifier()Tp::HandledChannelNotifier


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00082.html0000644000175200001440000007562212000060453021633 0ustar00collabora-develusers00000000000000 Tp::Client::CallContentInterfaceDTMFInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Public Slots | Signals | Public Member Functions | Static Public Member Functions | Protected Member Functions
Tp::Client::CallContentInterfaceDTMFInterface Class Reference

#include <TelepathyQt/CallContent>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Call1.Content.Interface.DTMF".


Constructor & Destructor Documentation

Tp::Client::CallContentInterfaceDTMFInterface::CallContentInterfaceDTMFInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a CallContentInterfaceDTMFInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::CallContentInterfaceDTMFInterface::CallContentInterfaceDTMFInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a CallContentInterfaceDTMFInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a CallContentInterfaceDTMFInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a CallContentInterfaceDTMFInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a CallContentInterfaceDTMFInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

static QLatin1String Tp::Client::CallContentInterfaceDTMFInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Call1.Content.Interface.DTMF", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property CurrentlySendingTones of type bool.

Indicates whether there are DTMF tones currently being sent in the channel. If so, the client should wait for StoppedTones signal before trying to send more tones.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property DeferredTones of type QString.

The tones waiting for the user to continue, if any.

When this property is set to a non-empty value, TonesDeferred() is emitted. When any tones are played (i.e. whenever SendingTones() is emitted), this property is reset to the empty string.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::CallContentInterfaceDTMFInterface::StartTone ( uchar  event,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method StartTone on the remote object.

Start sending a DTMF tone to all eligible streams in the channel. Where possible, the tone will continue until StopTone is called. On certain protocols, it may only be possible to send events with a predetermined length. In this case, the implementation MAY emit a fixed-length tone, and the StopTone method call SHOULD return NotAvailable. The client may wish to control the exact duration and timing of the tones sent as a result of user's interaction with the dialpad, thus starting and stopping the tone sending explicitly. Tone overlaping or queueing is not supported, so this method can only be called if no DTMF tones are already being played.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
eventA numeric event code from the DTMF_Event enum.
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::CallContentInterfaceDTMFInterface::StopTone ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method StopTone on the remote object.

Stop sending any DTMF tones which have been started using the StartTone or MultipleTones methods. If there is no current tone, this method will do nothing. If MultipleTones was used, the client should not assume the sending has stopped immediately; instead, the client should wait for the StoppedTones signal. On some protocols it might be impossible to cancel queued tones immediately.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::CallContentInterfaceDTMFInterface::MultipleTones ( const QString &  tones,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method MultipleTones on the remote object.

Send multiple DTMF events to all eligible streams in the channel. Each tone will be played for an implementation-defined number of milliseconds (typically 250ms), followed by a gap before the next tone is played (typically 100ms). The duration and gap are defined by the protocol or connection manager. In cases where the client knows in advance the tone sequence it wants to send, it's easier to use this method than manually start and stop each tone in the sequence. The tone and gap lengths may need to vary for interoperability, according to the protocol and other implementations' ability to recognise tones. At the time of writing, GStreamer uses a minimum of 250ms tones and 100ms gaps when playing in-band DTMF in the normal audio stream, or 70ms tones and 50ms gaps when encoding DTMF as audio/telephone-event. Tone overlaping or queueing is not supported, so this method can only be called if no DTMF tones are already being played.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
tones

A string representation of one or more DTMF events. Implementations of this method MUST support all of the following characters in this string:

  • the digits 0-9, letters A-D and a-d, and symbols '*' and '#' correspond to the members of DTMF_Event
  • any of 'p', 'P', 'x', 'X' or ',' (comma) results in an implementation-defined pause, typically for 3 seconds
  • 'w' or 'W' waits for the user to continue, by stopping interpretation of the string, and if there is more to be played, emitting the TonesDeferred() signal with the rest of the string as its argument: see that signal for details
timeoutThe timeout in milliseconds.
void Tp::Client::CallContentInterfaceDTMFInterface::TonesDeferred ( const QString &  tones) [signal]

Represents the signal TonesDeferred on the remote object.

Emitted when 'w' or 'W', indicating "wait for the user to continue", is encountered while playing a DTMF string queued by MultipleTones() . Any queued DTMF events after the 'w', which have not yet been played, are placed in the DeferredTones property and copied into this signal's argument.

When the channel handler is ready to continue, it MAY pass the value of DeferredTones to MultipleTones() , to resume sending. Alternatively, it MAY ignore the deferred tones, or even play different tones instead. Any deferred tones are discarded the next time a tone is played.

This signal SHOULD NOT be emitted if there is nothing left to play, i.e. if the 'w' was the last character in the DTMF string.

Parameters:
tonesThe new non-empty value of DeferredTones.
void Tp::Client::CallContentInterfaceDTMFInterface::SendingTones ( const QString &  tones) [signal]

Represents the signal SendingTones on the remote object.

DTMF tone(s)are being sent to all eligible streams in the channel. The signal is provided to indicating the fact that the streams are currently being used to send one or more DTMF tones, so any other media input is not getting through to the audio stream. It also serves as a cue for the StopTone() method.

Parameters:
tonesDTMF string (one or more events) that is to be played.

Represents the signal StoppedTones on the remote object.

DTMF tones have finished playing on streams in this channel.

Parameters:
cancelledTrue if the DTMF tones were actively cancelled via StopTone.
void Tp::Client::CallContentInterfaceDTMFInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00660_source.html0000644000175200001440000001344712000060453023212 0ustar00collabora-develusers00000000000000 pending-string.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
pending-string.h
00001 
00023 #ifndef _TelepathyQt_pending_string_h_HEADER_GUARD_
00024 #define _TelepathyQt_pending_string_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/PendingOperation>
00031 
00032 #include <QString>
00033 
00034 namespace Tp
00035 {
00036 
00037 class TP_QT_EXPORT PendingString : public PendingOperation
00038 {
00039     Q_OBJECT
00040     Q_DISABLE_COPY(PendingString);
00041 
00042 public:
00043     PendingString(QDBusPendingCall call, const SharedPtr<RefCounted> &object);
00044     ~PendingString();
00045 
00046     QString result() const;
00047 
00048 protected:
00049     void setResult(const QString &result);
00050 
00051 private Q_SLOTS:
00052     TP_QT_NO_EXPORT void watcherFinished(QDBusPendingCallWatcher *watcher);
00053 
00054 private:
00055     friend class ProtocolInfo;
00056 
00057     TP_QT_NO_EXPORT PendingString(const QString &errorName, const QString &errorMessage);
00058 
00059     struct Private;
00060     friend struct Private;
00061     Private *mPriv;
00062 };
00063 
00064 } // Tp
00065 
00066 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_vars_0x75.html0000644000175200001440000000422612000060453024637 0ustar00collabora-develusers00000000000000 Class Members - Variables
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- u -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00565_source.html0000644000175200001440000001557212000060453023217 0ustar00collabora-develusers00000000000000 debug-receiver.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
debug-receiver.h
00001 
00021 #ifndef _TelepathyQt_debug_receiver_h_HEADER_GUARD_
00022 #define _TelepathyQt_debug_receiver_h_HEADER_GUARD_
00023 
00024 #ifndef IN_TP_QT_HEADER
00025 #error IN_TP_QT_HEADER
00026 #endif
00027 
00028 #include <TelepathyQt/_gen/cli-debug-receiver.h>
00029 
00030 #include <TelepathyQt/Global>
00031 #include <TelepathyQt/Types>
00032 #include <TelepathyQt/DBusProxy>
00033 
00034 namespace Tp
00035 {
00036 
00037 class PendingDebugMessageList;
00038 
00039 class TP_QT_EXPORT DebugReceiver : public StatefulDBusProxy
00040 {
00041     Q_OBJECT
00042     Q_DISABLE_COPY(DebugReceiver)
00043 
00044 public:
00045     static const Feature FeatureCore;
00046 
00047     static DebugReceiverPtr create(const QString &busName,
00048             const QDBusConnection &bus = QDBusConnection::sessionBus());
00049     virtual ~DebugReceiver();
00050 
00051     PendingDebugMessageList *fetchMessages();
00052     PendingOperation *setMonitoringEnabled(bool enabled);
00053 
00054 Q_SIGNALS:
00055     void newDebugMessage(const Tp::DebugMessage & message);
00056 
00057 protected:
00058     DebugReceiver(const QDBusConnection &bus, const QString &busName);
00059 
00060 private Q_SLOTS:
00061     TP_QT_NO_EXPORT void onRequestAllPropertiesFinished(Tp::PendingOperation *op);
00062     TP_QT_NO_EXPORT void onNewDebugMessage(double time, const QString &domain,
00063                                            uint level, const QString &message);
00064 
00065 private:
00066     struct Private;
00067     friend struct Private;
00068     Private *mPriv;
00069 };
00070 
00071 } // Tp
00072 
00073 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01091.html0000644000175200001440000002001612000060453021617 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelInterfaceHoldInterface Member List
This is the complete list of members for Tp::Client::ChannelInterfaceHoldInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ChannelInterfaceHoldInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfaceHoldInterface
ChannelInterfaceHoldInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfaceHoldInterface
ChannelInterfaceHoldInterface(Tp::DBusProxy *proxy)Tp::Client::ChannelInterfaceHoldInterface
ChannelInterfaceHoldInterface(const Tp::Client::ChannelInterface &mainInterface)Tp::Client::ChannelInterfaceHoldInterface [explicit]
ChannelInterfaceHoldInterface(const Tp::Client::ChannelInterface &mainInterface, QObject *parent)Tp::Client::ChannelInterfaceHoldInterface
GetHoldState(int timeout=-1)Tp::Client::ChannelInterfaceHoldInterface [inline, slot]
HoldStateChanged(uint holdState, uint reason)Tp::Client::ChannelInterfaceHoldInterface [signal]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ChannelInterfaceHoldInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ChannelInterfaceHoldInterface [inline]
RequestHold(bool hold, int timeout=-1)Tp::Client::ChannelInterfaceHoldInterface [inline, slot]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ChannelInterfaceHoldInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_0x71.html0000644000175200001440000000374112000060453023601 0ustar00collabora-develusers00000000000000 Class Members
   Home · All Classes · All Namespaces · Modules · Functions · Files
Here is a list of all class members with links to the classes they belong to:

- q -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00856.html0000644000175200001440000000624712000060453021641 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Filter< T > Member List
This is the complete list of members for Tp::Filter< T >, including all inherited members.
Filter()Tp::Filter< T > [inline, protected]
isValid() const Tp::Filter< T > [inline, virtual]
matches(const SharedPtr< T > &t) const Tp::Filter< T > [inline, virtual]
RefCounted()Tp::RefCounted [inline]
~Filter()Tp::Filter< T > [inline, virtual]
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00421_source.html0000644000175200001440000010714312000060453023202 0ustar00collabora-develusers00000000000000 abstract-client.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
abstract-client.h
00001 
00023 #ifndef _TelepathyQt_abstract_client_h_HEADER_GUARD_
00024 #define _TelepathyQt_abstract_client_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Constants>
00031 #include <TelepathyQt/SharedPtr>
00032 #include <TelepathyQt/Types>
00033 
00034 #include <QList>
00035 #include <QObject>
00036 #include <QSharedDataPointer>
00037 #include <QString>
00038 #include <QVariantMap>
00039 
00040 namespace Tp
00041 {
00042 
00043 class ClientRegistrar;
00044 class ChannelClassSpecList;
00045 
00046 class TP_QT_EXPORT AbstractClient : public RefCounted
00047 {
00048     Q_DISABLE_COPY(AbstractClient)
00049 
00050 public:
00051     AbstractClient();
00052     virtual ~AbstractClient();
00053 
00054     bool isRegistered() const;
00055 
00056 private:
00057     friend class ClientRegistrar;
00058 
00059     void setRegistered(bool registered);
00060 
00061     struct Private;
00062     friend struct Private;
00063     Private *mPriv;
00064 };
00065 
00066 class TP_QT_EXPORT AbstractClientObserver : public virtual AbstractClient
00067 {
00068     Q_DISABLE_COPY(AbstractClientObserver)
00069 
00070 public:
00071     class ObserverInfo
00072     {
00073     public:
00074         ObserverInfo(const QVariantMap &info = QVariantMap());
00075         ObserverInfo(const ObserverInfo &other);
00076         ~ObserverInfo();
00077 
00078         ObserverInfo &operator=(const ObserverInfo &other);
00079 
00080         bool isRecovering() const { return qdbus_cast<bool>(allInfo().value(QLatin1String("recovering"))); }
00081 
00082         QVariantMap allInfo() const;
00083 
00084     private:
00085         struct Private;
00086         QSharedDataPointer<Private> mPriv;
00087     };
00088 
00089     virtual ~AbstractClientObserver();
00090 
00091     ChannelClassSpecList observerFilter() const;
00092 
00093     bool shouldRecover() const;
00094 
00095     virtual void observeChannels(const MethodInvocationContextPtr<> &context,
00096             const AccountPtr &account,
00097             const ConnectionPtr &connection,
00098             const QList<ChannelPtr> &channels,
00099             const ChannelDispatchOperationPtr &dispatchOperation,
00100             const QList<ChannelRequestPtr> &requestsSatisfied,
00101             const ObserverInfo &observerInfo) = 0;
00102 
00103 protected:
00104     AbstractClientObserver(const ChannelClassSpecList &channelFilter, bool shouldRecover = false);
00105 
00106 private:
00107     struct Private;
00108     friend struct Private;
00109     Private *mPriv;
00110 };
00111 
00112 class TP_QT_EXPORT AbstractClientApprover : public virtual AbstractClient
00113 {
00114     Q_DISABLE_COPY(AbstractClientApprover)
00115 
00116 public:
00117     virtual ~AbstractClientApprover();
00118 
00119     ChannelClassSpecList approverFilter() const;
00120 
00121     virtual void addDispatchOperation(const MethodInvocationContextPtr<> &context,
00122             const ChannelDispatchOperationPtr &dispatchOperation) = 0;
00123 
00124 protected:
00125     AbstractClientApprover(const ChannelClassSpecList &channelFilter);
00126 
00127 private:
00128     struct Private;
00129     friend struct Private;
00130     Private *mPriv;
00131 };
00132 
00133 /*
00134  * TODO: use case specific subclasses:
00135  *  - StreamTubeHandler(QString(List) protocol(s))
00136  *    - handleTube(DBusTubeChannelPtr, userActionTime)
00137  *  - DBusTubeHandler(QString(List) serviceName(s))
00138  *    - handleTube(DBusTubeChannelPtr, userActionTime)
00139  */
00140 class TP_QT_EXPORT AbstractClientHandler : public virtual AbstractClient
00141 {
00142     Q_DISABLE_COPY(AbstractClientHandler)
00143 
00144 public:
00145     class Capabilities
00146     {
00147     public:
00148         Capabilities(const QStringList &tokens = QStringList());
00149         Capabilities(const Capabilities &other);
00150         ~Capabilities();
00151 
00152         Capabilities &operator=(const Capabilities &other);
00153 
00154         bool hasGTalkP2PNATTraversalToken() const
00155         {
00156             return hasToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING +
00157                 QLatin1String("/gtalk-p2p"));
00158         }
00159 
00160         void setGTalkP2PNATTraversalToken()
00161         {
00162             setToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING +
00163                 QLatin1String("/gtalk-p2p"));
00164         }
00165 
00166         void unsetGTalkP2PNATTraversalToken()
00167         {
00168             unsetToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING +
00169                 QLatin1String("/gtalk-p2p"));
00170         }
00171 
00172         bool hasICEUDPNATTraversalToken() const
00173         {
00174             return hasToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING +
00175                 QLatin1String("/ice-udp"));
00176         }
00177 
00178         void setICEUDPNATTraversalToken()
00179         {
00180             setToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING +
00181                 QLatin1String("/ice-udp"));
00182         }
00183 
00184         void unsetICEUDPNATTraversalToken()
00185         {
00186             unsetToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING +
00187                 QLatin1String("/ice-udp"));
00188         }
00189 
00190         bool hasWLM85NATTraversalToken() const
00191         {
00192             return hasToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING +
00193                 QLatin1String("/wlm-8.5"));
00194         }
00195 
00196         void setWLM85NATTraversalToken()
00197         {
00198             setToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING +
00199                 QLatin1String("/wlm-8.5"));
00200         }
00201 
00202         void unsetWLM85NATTraversalToken()
00203         {
00204             unsetToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING +
00205                 QLatin1String("/wlm-8.5"));
00206         }
00207 
00208         bool hasWLM2009NATTraversalToken() const
00209         {
00210             return hasToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING +
00211                 QLatin1String("/wlm-2009"));
00212         }
00213 
00214         void setWLM2009NATTraversalToken()
00215         {
00216             setToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING +
00217                 QLatin1String("/wlm-2009"));
00218         }
00219 
00220         void unsetWLM2009NATTraversalToken()
00221         {
00222             unsetToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING +
00223                 QLatin1String("/wlm-2009"));
00224         }
00225 
00226         bool hasAudioCodecToken(const QString &mimeSubType) const
00227         {
00228             return hasToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING +
00229                 QLatin1String("/audio/") + mimeSubType.toLower());
00230         }
00231 
00232         void setAudioCodecToken(const QString &mimeSubType)
00233         {
00234             setToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING +
00235                 QLatin1String("/audio/") + mimeSubType.toLower());
00236         }
00237 
00238         void unsetAudioCodecToken(const QString &mimeSubType)
00239         {
00240             unsetToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING +
00241                 QLatin1String("/audio/") + mimeSubType.toLower());
00242         }
00243 
00244         bool hasVideoCodecToken(const QString &mimeSubType) const
00245         {
00246             return hasToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING +
00247                 QLatin1String("/video/") + mimeSubType.toLower());
00248         }
00249 
00250         void setVideoCodecToken(const QString &mimeSubType)
00251         {
00252             setToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING +
00253                 QLatin1String("/video/") + mimeSubType.toLower());
00254         }
00255 
00256         void unsetVideoCodecToken(const QString &mimeSubType)
00257         {
00258             unsetToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING +
00259                 QLatin1String("/video/") + mimeSubType.toLower());
00260         }
00261 
00262         bool hasToken(const QString &token) const;
00263         void setToken(const QString &token);
00264         void unsetToken(const QString &token);
00265 
00266         QStringList allTokens() const;
00267 
00268     private:
00269         struct Private;
00270         QSharedDataPointer<Private> mPriv;
00271     };
00272 
00273     class HandlerInfo
00274     {
00275     public:
00276         HandlerInfo(const QVariantMap &info = QVariantMap());
00277         HandlerInfo(const HandlerInfo &other);
00278         ~HandlerInfo();
00279 
00280         HandlerInfo &operator=(const HandlerInfo &other);
00281 
00282         QVariantMap allInfo() const;
00283 
00284     private:
00285         struct Private;
00286         QSharedDataPointer<Private> mPriv;
00287     };
00288 
00289     virtual ~AbstractClientHandler();
00290 
00291     ChannelClassSpecList handlerFilter() const;
00292 
00293     Capabilities handlerCapabilities() const;
00294 
00295     virtual bool bypassApproval() const = 0;
00296 
00297     virtual void handleChannels(const MethodInvocationContextPtr<> &context,
00298             const AccountPtr &account,
00299             const ConnectionPtr &connection,
00300             const QList<ChannelPtr> &channels,
00301             const QList<ChannelRequestPtr> &requestsSatisfied,
00302             const QDateTime &userActionTime,
00303             const HandlerInfo &handlerInfo) = 0;
00304 
00305     bool wantsRequestNotification() const;
00306     virtual void addRequest(const ChannelRequestPtr &request);
00307     virtual void removeRequest(const ChannelRequestPtr &request,
00308             const QString &errorName, const QString &errorMessage);
00309 
00310 protected:
00311     AbstractClientHandler(const ChannelClassSpecList &channelFilter,
00312             const Capabilities &capabilities = Capabilities(),
00313             bool wantsRequestNotification = false);
00314 
00315 private:
00316     struct Private;
00317     friend struct Private;
00318     Private *mPriv;
00319 };
00320 
00321 } // Tp
00322 
00323 Q_DECLARE_METATYPE(Tp::AbstractClientObserver::ObserverInfo);
00324 Q_DECLARE_METATYPE(Tp::AbstractClientHandler::Capabilities);
00325 Q_DECLARE_METATYPE(Tp::AbstractClientHandler::HandlerInfo);
00326 
00327 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00320.html0000644000175200001440000005065712000060453021627 0ustar00collabora-develusers00000000000000 Tp::PendingOperation Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Signals | Public Member Functions | Protected Slots | Protected Member Functions
Tp::PendingOperation Class Reference

The PendingOperation class is a base class for pending asynchronous operations. More...

#include <TelepathyQt/PendingOperation>

Inherited by Tp::Farstream::PendingChannel, Tp::PendingAccount, Tp::PendingCallContent, Tp::PendingCaptchas, Tp::PendingChannel, Tp::PendingChannelRequest, Tp::PendingComposite, Tp::PendingConnection, Tp::PendingContactAttributes, Tp::PendingContactInfo, Tp::PendingContacts, Tp::PendingDBusTubeConnection, Tp::PendingDebugMessageList, Tp::PendingFailure, Tp::PendingHandles, Tp::PendingReady, Tp::PendingSendMessage, Tp::PendingStreamedMediaStreams, Tp::PendingStreamTubeConnection, Tp::PendingString, Tp::PendingStringList, Tp::PendingSuccess, Tp::PendingVariant, Tp::PendingVariantMap, and Tp::PendingVoid.

List of all members.

Signals

Public Member Functions

Protected Slots

Protected Member Functions


Detailed Description

The PendingOperation class is a base class for pending asynchronous operations.

This class represents an incomplete asynchronous operation, such as a D-Bus method call. When the operation has finished, it emits finished(). The slot or slots connected to the finished() signal may obtain additional information from the pending operation.

In simple cases, like a D-Bus method with no 'out' arguments or for which all 'out' arguments are to be ignored (so the possible results are success with no extra information, or failure with an error code), the trivial subclass PendingVoid can be used.

For pending operations that produce a result, another subclass of PendingOperation can be used, with additional methods that provide that result to the library user.

After finished() is emitted, the PendingOperation is automatically deleted using deleteLater(), so library users must not explicitly delete this object.

The design is loosely based on KDE's KJob.

See Asynchronous Object Model


Constructor & Destructor Documentation

Class destructor.

Tp::PendingOperation::PendingOperation ( const SharedPtr< RefCounted > &  object) [protected]

Construct a new PendingOperation object.

Parameters:
objectThe object on which this pending operation takes place.

Member Function Documentation

Return whether or not the request has finished processing.

The signal finished() is emitted when this changes from false to true.

Equivalent to (isValid() || isError()).

Returns:
true if the request has finished, false otherwise.
See also:
finished()

Return whether or not the request completed successfully. If the request has not yet finished processing (isFinished() returns false), this cannot yet be known, and false will be returned.

Equivalent to (isFinished() && !isError()).

Returns:
true if the request has finished processing and has completed successfully, false otherwise.

Return whether or not the request resulted in an error.

If the request has not yet finished processing (isFinished() returns false), this cannot yet be known, and false will be returned.

Equivalent to (isFinished() && !isValid()).

Returns:
true if the request has finished processing and has resulted in an error, false otherwise.

If isError() returns true, returns the D-Bus error with which the operation failed. If the operation succeeded or has not yet finished, returns an empty string.

Returns:
A D-Bus error name, or an empty string.

If isError() would return true, returns a debugging message associated with the error, which may be an empty string. Otherwise, return an empty string.

Returns:
A debugging message, or an empty string.
void Tp::PendingOperation::finished ( Tp::PendingOperation operation) [signal]

Emitted when the pending operation finishes, i.e. when isFinished() changes from false to true.

Parameters:
operationThis operation object, from which further information may be obtained.

Return the object on which this pending operation takes place.

Returns:
A pointer to a RefCounted object.
void Tp::PendingOperation::setFinished ( ) [protected, slot]

Record that this pending operation has finished successfully, and emit the finished() signal next time the event loop runs.

void Tp::PendingOperation::setFinishedWithError ( const QString &  name,
const QString &  message 
) [protected, slot]

Record that this pending operation has finished with an error, and emit the finished() signal next time the event loop runs.

Parameters:
nameThe D-Bus error name, which must be non-empty.
messageThe debugging message.
void Tp::PendingOperation::setFinishedWithError ( const QDBusError &  error) [protected, slot]

Record that this pending operation has finished with an error, and emit the finished() signal next time the event loop runs.

Parameters:
errorThe error.
See also:
finished()


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00136.html0000644000175200001440000001223412000060453021621 0ustar00collabora-develusers00000000000000 Tp::ChannelOriginatorMap Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Public Member Functions
Tp::ChannelOriginatorMap Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<uint, QDBusObjectPath>, but needed to have a discrete type in the Qt type system.

A mapping from members of a conference to the original 1-1 channel with that contact, if any. See OriginalChannels for details.

Constructor & Destructor Documentation

Tp::ChannelOriginatorMap::ChannelOriginatorMap ( const QMap< uint, QDBusObjectPath > &  a) [inline]

Member Function Documentation

ChannelOriginatorMap& Tp::ChannelOriginatorMap::operator= ( const QMap< uint, QDBusObjectPath > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00311.html0000644000175200001440000001631612000060453021621 0ustar00collabora-develusers00000000000000 Tp::PendingComposite Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Public Member Functions
Tp::PendingComposite Class Reference

The PendingComposite class is a PendingOperation that can be used to track multiple pending operations at once. More...

#include <TelepathyQt/PendingComposite>

Inherits Tp::PendingOperation.

List of all members.

Public Member Functions


Detailed Description

The PendingComposite class is a PendingOperation that can be used to track multiple pending operations at once.


Constructor & Destructor Documentation

Tp::PendingComposite::PendingComposite ( const QList< PendingOperation * > &  operations,
const SharedPtr< RefCounted > &  object 
)
Tp::PendingComposite::PendingComposite ( const QList< PendingOperation * > &  operations,
bool  failOnFirstError,
const SharedPtr< RefCounted > &  object 
)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00954.html0000644000175200001440000000503112000060453021626 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ByteArrayList Member List
This is the complete list of members for Tp::ByteArrayList, including all inherited members.
ByteArrayList()Tp::ByteArrayList [inline]
ByteArrayList(const QList< QByteArray > &a)Tp::ByteArrayList [inline]
operator=(const QList< QByteArray > &a)Tp::ByteArrayList [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01127.html0000644000175200001440000002021512000060453021620 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceBalanceInterface Member List
This is the complete list of members for Tp::Client::ConnectionInterfaceBalanceInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
BalanceChanged(const Tp::CurrencyAmount &balance)Tp::Client::ConnectionInterfaceBalanceInterface [signal]
ConnectionInterfaceBalanceInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceBalanceInterface
ConnectionInterfaceBalanceInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceBalanceInterface
ConnectionInterfaceBalanceInterface(Tp::DBusProxy *proxy)Tp::Client::ConnectionInterfaceBalanceInterface
ConnectionInterfaceBalanceInterface(const Tp::Client::ConnectionInterface &mainInterface)Tp::Client::ConnectionInterfaceBalanceInterface [explicit]
ConnectionInterfaceBalanceInterface(const Tp::Client::ConnectionInterface &mainInterface, QObject *parent)Tp::Client::ConnectionInterfaceBalanceInterface
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ConnectionInterfaceBalanceInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ConnectionInterfaceBalanceInterface [inline]
requestPropertyAccountBalance() const Tp::Client::ConnectionInterfaceBalanceInterface [inline]
requestPropertyManageCreditURI() const Tp::Client::ConnectionInterfaceBalanceInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ConnectionInterfaceBalanceInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00572_source.html0000644000175200001440000002446012000060453023211 0ustar00collabora-develusers00000000000000 file-transfer-channel-creation-properties.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
file-transfer-channel-creation-properties.h
00001 
00023 #ifndef _TelepathyQt_file_transfer_channel_creation_properties_h_HEADER_GUARD_
00024 #define _TelepathyQt_file_transfer_channel_creation_properties_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Constants>
00031 #include <TelepathyQt/Global>
00032 
00033 #include <QDateTime>
00034 #include <QMetaType>
00035 #include <QSharedDataPointer>
00036 #include <QString>
00037 
00038 namespace Tp
00039 {
00040 
00041 class TP_QT_EXPORT FileTransferChannelCreationProperties
00042 {
00043 public:
00044     FileTransferChannelCreationProperties();
00045     FileTransferChannelCreationProperties(const QString &suggestedFileName,
00046             const QString &contentType, qulonglong size);
00047     FileTransferChannelCreationProperties(const QString &path,
00048             const QString &contentType);
00049     FileTransferChannelCreationProperties(
00050             const FileTransferChannelCreationProperties &other);
00051     ~FileTransferChannelCreationProperties();
00052 
00053     bool isValid() const { return mPriv.constData() != 0; }
00054 
00055     FileTransferChannelCreationProperties &operator=(
00056             const FileTransferChannelCreationProperties &other);
00057     bool operator==(const FileTransferChannelCreationProperties &other) const;
00058 
00059     FileTransferChannelCreationProperties &setContentHash(
00060             FileHashType contentHashType, const QString &contentHash);
00061     FileTransferChannelCreationProperties &setDescription(
00062             const QString &description);
00063     FileTransferChannelCreationProperties &setLastModificationTime(
00064             const QDateTime &lastModificationTime);
00065     FileTransferChannelCreationProperties &setUri(const QString &uri);
00066 
00067     /* mandatory parameters */
00068     QString suggestedFileName() const;
00069     QString contentType() const;
00070     qulonglong size() const;
00071 
00072     /* optional parameters */
00073     bool hasContentHash() const;
00074     FileHashType contentHashType() const;
00075     QString contentHash() const;
00076 
00077     bool hasDescription() const;
00078     QString description() const;
00079 
00080     bool hasLastModificationTime() const;
00081     QDateTime lastModificationTime() const;
00082 
00083     bool hasUri() const;
00084     QString uri() const;
00085 
00086 private:
00087     struct Private;
00088     friend struct Private;
00089     QSharedDataPointer<Private> mPriv;
00090 };
00091 
00092 } // Tp
00093 
00094 Q_DECLARE_METATYPE(Tp::FileTransferChannelCreationProperties);
00095 
00096 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00143.html0000644000175200001440000006614012000060453021624 0ustar00collabora-develusers00000000000000 Tp::Client::ChannelTypeDBusTubeInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Public Slots | Signals | Public Member Functions | Static Public Member Functions | Protected Member Functions
Tp::Client::ChannelTypeDBusTubeInterface Class Reference

#include <TelepathyQt/Channel>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Channel.Type.DBusTube".


Constructor & Destructor Documentation

Tp::Client::ChannelTypeDBusTubeInterface::ChannelTypeDBusTubeInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelTypeDBusTubeInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ChannelTypeDBusTubeInterface::ChannelTypeDBusTubeInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelTypeDBusTubeInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ChannelTypeDBusTubeInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ChannelTypeDBusTubeInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ChannelTypeDBusTubeInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

static QLatin1String Tp::Client::ChannelTypeDBusTubeInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Channel.Type.DBusTube", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property ServiceName of type QString.

A string representing the service name that will be used over the tube. It SHOULD be a well-known D-Bus service name, of the form com.example.ServiceName.

When the tube is offered, the service name is transmitted to the other end.

When requesting a channel with ConnectionInterfaceRequestsInterface::CreateChannel() , this property MUST be included in the request.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property DBusNames of type Tp::DBusTubeParticipants.

For a multi-user (i.e. Handle_Type_Room) D-Bus tube, a mapping between contact handles and their unique bus names on this tube. For a peer-to-peer (i.e. Handle_Type_Contact) D-Bus tube, the empty dictionary. Change notification is via DBusNamesChanged.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property SupportedAccessControls of type Tp::UIntList.

A list of the access control types that are supported with this channel. Note that only Socket_Access_Control_Localhost and Socket_Access_Control_Credentials can be used with D-Bus tubes. Using Socket_Access_Control_Credentials is recommended.

Socket_Access_Control_Credentials is easy to implement for a D-Bus tube, because typical D-Bus library implementations like libdbus and GDBus already have to support it to be able to connect to the system or session bus, and usually enable it by default; so there's typically no good reason to relax access control to Localhost.

When requesting a channel with ConnectionInterfaceRequestsInterface::CreateChannel() , this property MUST NOT be included in the request.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply<QString> Tp::Client::ChannelTypeDBusTubeInterface::Offer ( const QVariantMap &  parameters,
uint  accesscontrol,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method Offer on the remote object.

Offers a D-Bus tube providing the service specified.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
parametersThe dictionary of arbitrary Parameters to send with the tube offer.
accesscontrolThe access control the connection manager applies to the D-Bus socket.
timeoutThe timeout in milliseconds.
Returns:

The string describing the address of the private bus. The client SHOULD NOT attempt to connect to the address until the tube is open.

QDBusPendingReply<QString> Tp::Client::ChannelTypeDBusTubeInterface::Accept ( uint  accesscontrol,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method Accept on the remote object.

Accept a D-Bus tube that's in the "local pending" state. The connection manager will attempt to open the tube. The tube remains in the "local pending" state until the TubeChannelStateChanged signal is emitted.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
accesscontrolThe access control the connection manager applies to the D-Bus socket.
timeoutThe timeout in milliseconds.
Returns:

The string describing the address of the private bus. The client SHOULD NOT attempt to connect to the address until the tube is open.

Represents the signal DBusNamesChanged on the remote object.

Emitted on a multi-user (i.e. Handle_Type_Room) D-Bus tube when a participant opens or closes the tube. This provides change notification for the DBusNames property.

Parameters:
addedArray of handles and D-Bus names of new participants.
removedArray of handles of former participants.
void Tp::Client::ChannelTypeDBusTubeInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00945.html0000644000175200001440000002155412000060453021636 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::StreamTubeServer Member List
This is the complete list of members for Tp::StreamTubeServer, including all inherited members.
clientName() const Tp::StreamTubeServer
create(const QStringList &p2pServices, const QStringList &roomServices=QStringList(), const QString &clientName=QString(), bool monitorConnections=false, const AccountFactoryConstPtr &accountFactory=AccountFactory::create(QDBusConnection::sessionBus()), const ConnectionFactoryConstPtr &connectionFactory=ConnectionFactory::create(QDBusConnection::sessionBus()), const ChannelFactoryConstPtr &channelFactory=ChannelFactory::create(QDBusConnection::sessionBus()), const ContactFactoryConstPtr &contactFactory=ContactFactory::create())Tp::StreamTubeServer [static]
create(const QDBusConnection &bus, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory, const QStringList &p2pServices, const QStringList &roomServices=QStringList(), const QString &clientName=QString(), bool monitorConnections=false)Tp::StreamTubeServer [static]
create(const AccountManagerPtr &accountManager, const QStringList &p2pServices, const QStringList &roomServices=QStringList(), const QString &clientName=QString(), bool monitorConnections=false)Tp::StreamTubeServer [static]
create(const ClientRegistrarPtr &registrar, const QStringList &p2pServices, const QStringList &roomServices=QStringList(), const QString &clientName=QString(), bool monitorConnections=false)Tp::StreamTubeServer [static]
exportedParameters() const Tp::StreamTubeServer
exportedTcpSocketAddress() const Tp::StreamTubeServer
exportTcpSocket(const QHostAddress &address, quint16 port, const QVariantMap &parameters=QVariantMap())Tp::StreamTubeServer
exportTcpSocket(const QTcpServer *server, const QVariantMap &parameters=QVariantMap())Tp::StreamTubeServer
exportTcpSocket(const QHostAddress &address, quint16 port, ParametersGenerator *generator)Tp::StreamTubeServer
exportTcpSocket(const QTcpServer *server, ParametersGenerator *generator)Tp::StreamTubeServer
isRegistered() const Tp::StreamTubeServer
monitorsConnections() const Tp::StreamTubeServer
newTcpConnection(const QHostAddress &sourceAddress, quint16 sourcePort, const Tp::AccountPtr &account, const Tp::ContactPtr &contact, const Tp::OutgoingStreamTubeChannelPtr &tube)Tp::StreamTubeServer [signal]
RefCounted()Tp::RefCounted [inline]
registrar() const Tp::StreamTubeServer
tcpConnectionClosed(const QHostAddress &sourceAddress, quint16 sourcePort, const Tp::AccountPtr &account, const Tp::ContactPtr &contact, const QString &error, const QString &message, const Tp::OutgoingStreamTubeChannelPtr &tube)Tp::StreamTubeServer [signal]
tcpConnections() const Tp::StreamTubeServer
tubeClosed(const Tp::AccountPtr &account, const Tp::OutgoingStreamTubeChannelPtr &tube, const QString &error, const QString &message)Tp::StreamTubeServer [signal]
tubeRequested(const Tp::AccountPtr &account, const Tp::OutgoingStreamTubeChannelPtr &tube, const QDateTime &userActionTime, const Tp::ChannelRequestHints &hints)Tp::StreamTubeServer [signal]
tubes() const Tp::StreamTubeServer
~RefCounted()Tp::RefCounted [inline, virtual]
~StreamTubeServer()Tp::StreamTubeServer [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00209.html0000644000175200001440000001200112000060453021612 0ustar00collabora-develusers00000000000000 Tp::ContactSSRCsMap Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Public Member Functions
Tp::ContactSSRCsMap Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<uint, UIntList>, but needed to have a discrete type in the Qt type system.


Constructor & Destructor Documentation

Tp::ContactSSRCsMap::ContactSSRCsMap ( const QMap< uint, UIntList > &  a) [inline]

Member Function Documentation

ContactSSRCsMap& Tp::ContactSSRCsMap::operator= ( const QMap< uint, UIntList > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01146.html0000644000175200001440000004037412000060453021631 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::MediaStreamHandlerInterface Member List
This is the complete list of members for Tp::Client::MediaStreamHandlerInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
AddRemoteCandidate(const QString &candidateID, const Tp::MediaStreamHandlerTransportList &transports)Tp::Client::MediaStreamHandlerInterface [signal]
Close()Tp::Client::MediaStreamHandlerInterface [signal]
CodecChoice(uint codecID, int timeout=-1)Tp::Client::MediaStreamHandlerInterface [inline, slot]
CodecsUpdated(const Tp::MediaStreamHandlerCodecList &codecs, int timeout=-1)Tp::Client::MediaStreamHandlerInterface [inline, slot]
Error(uint errorCode, const QString &message, int timeout=-1)Tp::Client::MediaStreamHandlerInterface [inline, slot]
HoldState(bool held, int timeout=-1)Tp::Client::MediaStreamHandlerInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::MediaStreamHandlerInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
MediaStreamHandlerInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::MediaStreamHandlerInterface
MediaStreamHandlerInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::MediaStreamHandlerInterface
MediaStreamHandlerInterface(Tp::DBusProxy *proxy)Tp::Client::MediaStreamHandlerInterface
NativeCandidatesPrepared(int timeout=-1)Tp::Client::MediaStreamHandlerInterface [inline, slot]
NewActiveCandidatePair(const QString &nativeCandidateID, const QString &remoteCandidateID, int timeout=-1)Tp::Client::MediaStreamHandlerInterface [inline, slot]
NewActiveTransportPair(const QString &nativeCandidateID, const Tp::MediaStreamHandlerTransport &nativeTransport, const QString &remoteCandidateID, const Tp::MediaStreamHandlerTransport &remoteTransport, int timeout=-1)Tp::Client::MediaStreamHandlerInterface [inline, slot]
NewNativeCandidate(const QString &candidateID, const Tp::MediaStreamHandlerTransportList &transports, int timeout=-1)Tp::Client::MediaStreamHandlerInterface [inline, slot]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
Ready(const Tp::MediaStreamHandlerCodecList &codecs, int timeout=-1)Tp::Client::MediaStreamHandlerInterface [inline, slot]
RemoveRemoteCandidate(const QString &candidateID)Tp::Client::MediaStreamHandlerInterface [signal]
requestAllProperties() const Tp::Client::MediaStreamHandlerInterface [inline]
requestPropertyCreatedLocally() const Tp::Client::MediaStreamHandlerInterface [inline]
requestPropertyNATTraversal() const Tp::Client::MediaStreamHandlerInterface [inline]
requestPropertyRelayInfo() const Tp::Client::MediaStreamHandlerInterface [inline]
requestPropertySTUNServers() const Tp::Client::MediaStreamHandlerInterface [inline]
SetActiveCandidatePair(const QString &nativeCandidateID, const QString &remoteCandidateID)Tp::Client::MediaStreamHandlerInterface [signal]
SetLocalCodecs(const Tp::MediaStreamHandlerCodecList &codecs, int timeout=-1)Tp::Client::MediaStreamHandlerInterface [inline, slot]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
SetRemoteCandidateList(const Tp::MediaStreamHandlerCandidateList &remoteCandidates)Tp::Client::MediaStreamHandlerInterface [signal]
SetRemoteCodecs(const Tp::MediaStreamHandlerCodecList &codecs)Tp::Client::MediaStreamHandlerInterface [signal]
SetRemoteFeedbackMessages(const Tp::RTCPFeedbackMessageMap &messages)Tp::Client::MediaStreamHandlerInterface [signal]
SetRemoteHeaderExtensions(const Tp::RTPHeaderExtensionsList &headerExtensions)Tp::Client::MediaStreamHandlerInterface [signal]
SetStreamHeld(bool held)Tp::Client::MediaStreamHandlerInterface [signal]
SetStreamPlaying(bool playing)Tp::Client::MediaStreamHandlerInterface [signal]
SetStreamSending(bool sending)Tp::Client::MediaStreamHandlerInterface [signal]
StartNamedTelephonyEvent(uchar event, uint codecID)Tp::Client::MediaStreamHandlerInterface [signal]
StartSoundTelephonyEvent(uchar event)Tp::Client::MediaStreamHandlerInterface [signal]
StartTelephonyEvent(uchar event)Tp::Client::MediaStreamHandlerInterface [signal]
staticInterfaceName()Tp::Client::MediaStreamHandlerInterface [inline, static]
StopTelephonyEvent()Tp::Client::MediaStreamHandlerInterface [signal]
StreamState(uint state, int timeout=-1)Tp::Client::MediaStreamHandlerInterface [inline, slot]
SupportedCodecs(const Tp::MediaStreamHandlerCodecList &codecs, int timeout=-1)Tp::Client::MediaStreamHandlerInterface [inline, slot]
SupportedFeedbackMessages(const Tp::RTCPFeedbackMessageMap &messages, int timeout=-1)Tp::Client::MediaStreamHandlerInterface [inline, slot]
SupportedHeaderExtensions(const Tp::RTPHeaderExtensionsList &headerExtensions, int timeout=-1)Tp::Client::MediaStreamHandlerInterface [inline, slot]
UnholdFailure(int timeout=-1)Tp::Client::MediaStreamHandlerInterface [inline, slot]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00174.html0000644000175200001440000006273612000060453021637 0ustar00collabora-develusers00000000000000 Tp::Client::ConnectionInterfaceContactCapabilitiesInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Public Slots | Signals | Public Member Functions | Static Public Member Functions | Protected Member Functions
Tp::Client::ConnectionInterfaceContactCapabilitiesInterface Class Reference

#include <TelepathyQt/Connection>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Connection.Interface.ContactCapabilities".


Constructor & Destructor Documentation

Tp::Client::ConnectionInterfaceContactCapabilitiesInterface::ConnectionInterfaceContactCapabilitiesInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceContactCapabilitiesInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ConnectionInterfaceContactCapabilitiesInterface::ConnectionInterfaceContactCapabilitiesInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceContactCapabilitiesInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ConnectionInterfaceContactCapabilitiesInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ConnectionInterfaceContactCapabilitiesInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ConnectionInterfaceContactCapabilitiesInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Connection.Interface.ContactCapabilities", which this class represents.

Returns:
The D-Bus interface name.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::ConnectionInterfaceContactCapabilitiesInterface::UpdateCapabilities ( const Tp::HandlerCapabilitiesList handlerCapabilities,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method UpdateCapabilities on the remote object.

Alter the connection's advertised capabilities to include the intersection of the given clients' capabilities with what the connection manager is able to implement.

On connections managed by the ChannelDispatcher, processes other than the ChannelDispatcher SHOULD NOT call this method, and the ChannelDispatcher SHOULD use this method to advertise the capabilities of all the registered ClientHandlerInterface implementations.On connections not managed by the ChannelDispatcher, clients MAY use this method directly, to indicate the channels they will handle and the extra capabilities they have.

Upon a successful invocation of this method, the connection manager will only emit the ContactCapabilitiesChanged() signal for the user's ConnectionInterface::SelfHandle if, in the underlying protocol, the new capabilities are distinct from the previous state.

The connection manager will essentially intersect the provided capabilities and the channel classes it implements. Therefore, certain properties which are never fixed for a channel class (such as the target handle, or the Parameters property of a tube channel) will almost certainly not be advertised.

This method MAY be called on a newly-created connection while it is still in the DISCONNECTED state, to request that when the connection connects, it will do so with the appropriate capabilities. Doing so MUST NOT fail.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
handlerCapabilitiesThe capabilities of one or more clients. For each client in the given list, any capabilities previously advertised for the same client name are discarded, then replaced by the capabilities indicated. As a result, if a client becomes unavailable, this method SHOULD be called with a Handler_Capabilities structure containing its name, an empty list of channel classes, and an empty list of capabilities. When this is done, the connection manager SHOULD free all memory associated with that client name. This method takes a list of clients so that when the channel dispatcher first calls it (with a list of all the Handlers that are initially available), the changes can be made atomically, with only one transmission of updated capabilities to the network. Afterwards, the channel dispatcher will call this method with a single-element list every time a Handler becomes available or unavailable. The connection manager MUST ignore any channel classes and client capabilities for which there is no representation in the protocol or no support in the connection manager.
timeoutThe timeout in milliseconds.
QDBusPendingReply<Tp::ContactCapabilitiesMap> Tp::Client::ConnectionInterfaceContactCapabilitiesInterface::GetContactCapabilities ( const Tp::UIntList handles,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method GetContactCapabilities on the remote object.

Returns an array of requestable channel classes for the given contact handles, representing the channel requests that are expected to succeed.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
handles

An array of contact handles for this connection.

The handle zero MUST NOT be included in the request.

timeoutThe timeout in milliseconds.
Returns:

A map from contact handles to lists of requestable channel classes, representing the channel requests that are expected to succeed for that contact.

Contacts listed among Handles whose capabilities are unknown SHOULD be omitted from this map; contacts known to have an empty set of capabilities SHOULD be included in the keys of this map, with an empty array as the corresponding value.

Represents the signal ContactCapabilitiesChanged on the remote object.

Announce that there has been a change of capabilities on the given handles. A single signal can be emitted for several contacts.

The underlying protocol can get several contacts' capabilities at the same time.

Parameters:
caps All the capabilities of the contacts
void Tp::Client::ConnectionInterfaceContactCapabilitiesInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00152.html0000644000175200001440000001151412000060453021617 0ustar00collabora-develusers00000000000000 Tp::ChatStateMap Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Public Member Functions
Tp::ChatStateMap Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<uint, uint>, but needed to have a discrete type in the Qt type system.

A map from contacts to their chat states.


Constructor & Destructor Documentation

Tp::ChatStateMap::ChatStateMap ( const QMap< uint, uint > &  a) [inline]

Member Function Documentation

ChatStateMap& Tp::ChatStateMap::operator= ( const QMap< uint, uint > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_vars_0x72.html0000644000175200001440000000370212000060453024632 0ustar00collabora-develusers00000000000000 Class Members - Variables
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- r -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_vars_0x76.html0000644000175200001440000000314112000060453024633 0ustar00collabora-develusers00000000000000 Class Members - Variables
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- v -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00736.html0000644000175200001440000001310712000060453021627 0ustar00collabora-develusers00000000000000 Client-side proxies
   Home · All Classes · All Namespaces · Modules · Functions · Files
Classes | Modules
Client-side proxies

Classes

Modules


Detailed Description

Proxy objects representing remote service objects accessed via D-Bus.

In addition to providing direct access to methods, signals and properties exported by the remote objects, some of these proxies offer features like automatic inspection of remote object capabilities, property tracking, backwards compatibility helpers for older services and other utilities.

This file is part of TelepathyQt

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

Proxy objects representing remote service objects accessed via D-Bus.

In addition to providing direct access to methods, signals and properties exported by the remote objects, some of these proxies offer features like automatic inspection of remote object capabilities, property tracking, backwards compatibility helpers for older services and other utilities.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_0x76.html0000644000175200001440000001152112000060453023601 0ustar00collabora-develusers00000000000000 Class Members
   Home · All Classes · All Namespaces · Modules · Functions · Files
Here is a list of all class members with links to the classes they belong to:

- v -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00899.html0000644000175200001440000001432712000060453021646 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingContactAttributes Member List
This is the complete list of members for Tp::PendingContactAttributes, including all inherited members.
attributes() const Tp::PendingContactAttributes
connection() const Tp::PendingContactAttributes
contactsRequested() const Tp::PendingContactAttributes
errorMessage() const Tp::PendingOperation
errorName() const Tp::PendingOperation
finished(Tp::PendingOperation *operation)Tp::PendingOperation [signal]
interfacesRequested() const Tp::PendingContactAttributes
invalidHandles() const Tp::PendingContactAttributes
isError() const Tp::PendingOperation
isFinished() const Tp::PendingOperation
isValid() const Tp::PendingOperation
object() const Tp::PendingOperation [protected]
PendingOperation(const SharedPtr< RefCounted > &object)Tp::PendingOperation [protected]
setFinished()Tp::PendingOperation [protected, slot]
setFinishedWithError(const QString &name, const QString &message)Tp::PendingOperation [protected, slot]
setFinishedWithError(const QDBusError &error)Tp::PendingOperation [protected, slot]
shouldReference() const Tp::PendingContactAttributes
validHandles() const Tp::PendingContactAttributes
~PendingContactAttributes()Tp::PendingContactAttributes
~PendingOperation()Tp::PendingOperation [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00050.html0000644000175200001440000005345312000060453021624 0ustar00collabora-develusers00000000000000 Tp::AccountSet Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Signals | Public Member Functions | Properties
Tp::AccountSet Class Reference

The AccountSet class represents a set of Telepathy accounts filtered by a given criteria. More...

#include <TelepathyQt/AccountSet>

Inherits Tp::Object.

List of all members.

Signals

Public Member Functions

Properties


Detailed Description

The AccountSet class represents a set of Telepathy accounts filtered by a given criteria.

AccountSet is automatically updated whenever accounts that match the given criteria are added, removed or updated.

Usage

Creating an AccountSet object

The easiest way to create AccountSet objects is through AccountManager. One can just use the AccountManager convenience methods such as AccountManager::validAccounts() to get a set of account objects representing valid accounts.

For example:

 class MyClass : public QObject
 {
     QOBJECT

 public:
     MyClass(QObject *parent = 0);
     ~MyClass() { }

 private Q_SLOTS:
     void onAccountManagerReady(Tp::PendingOperation *);
     void onValidAccountAdded(const Tp::AccountPtr &);
     void onValidAccountRemoved(const Tp::AccountPtr &);

 private:
     AccountManagerPtr am;
     AccountSetPtr validAccountsSet;
 };

 MyClass::MyClass(QObject *parent)
     : QObject(parent)
       am(AccountManager::create())
 {
     connect(am->becomeReady(),
             SIGNAL(finished(Tp::PendingOperation*)),
             SLOT(onAccountManagerReady(Tp::PendingOperation*)));
 }

 void MyClass::onAccountManagerReady(Tp::PendingOperation *op)
 {
     if (op->isError()) {
         qWarning() << "Account manager cannot become ready:" <<
             op->errorName() << "-" << op->errorMessage();
         return;
     }

     validAccountsSet = am->validAccounts();
     connect(validAccountsSet.data(),
             SIGNAL(accountAdded(const Tp::AccountPtr &)),
             SLOT(onValidAccountAdded(const Tp::AccountPtr &)));
     connect(validAccountsSet.data(),
             SIGNAL(accountRemoved(const Tp::AccountPtr &)),
             SLOT(onValidAccountRemoved(const Tp::AccountPtr &)));

     QList<AccountPtr> accounts = validAccountsSet->accounts();
     // do something with accounts
 }

 void MyClass::onValidAccountAdded(const Tp::AccountPtr &account)
 {
     // do something with account
 }

 void MyClass::onValidAccountRemoved(const Tp::AccountPtr &account)
 {
     // do something with account
 }

You can also define your own filter using AccountManager::filterAccounts:

 void MyClass::onAccountManagerReady(Tp::PendingOperation *op)
 {
     ...

     AccountPropertyFilterPtr filter = AccountPropertyFilter::create();
     filter->addProperty(QLatin1String("protocolName"), QLatin1String("jabber"));
     filter->addProperty(QLatin1String("enabled"), true);

     AccountSetPtr filteredAccountSet = am->filterAccounts(filter);
     // connect to AccountSet::accountAdded/accountRemoved signals
     QList<AccountPtr> accounts = filteredAccountSet->accounts();
     // do something with accounts

     ....
 }

Note that for AccountSet to property work with AccountCapabilityFilter objects, the feature Account::FeatureCapabilities need to be enabled in all accounts return by the AccountManager passed as param in the constructor. The easiest way to do this is to enable AccountManager feature AccountManager::FeatureFilterByCapabilities.

AccountSet can also be instantiated directly, but when doing it, the AccountManager object passed as param in the constructor must be ready for AccountSet properly work.


Constructor & Destructor Documentation

Tp::AccountSet::AccountSet ( const AccountManagerPtr &  accountManager,
const AccountFilterConstPtr &  filter 
)

Construct a new AccountSet object.

Parameters:
accountManagerAn account manager object used to filter accounts. The account manager object must be ready.
filterThe desired filter.
Tp::AccountSet::AccountSet ( const AccountManagerPtr &  accountManager,
const QVariantMap &  filter 
)

Construct a new AccountSet object.

The filter must contain Account property names and values as map items.

Parameters:
accountManagerAn account manager object used to filter accounts. The account manager object must be ready.
filterThe desired filter.

Class destructor.


Member Function Documentation

AccountManagerPtr Tp::AccountSet::accountManager ( ) const
AccountFilterConstPtr Tp::AccountSet::filter ( ) const
QList<AccountPtr> Tp::AccountSet::accounts ( ) const
void Tp::AccountSet::accountAdded ( const Tp::AccountPtr &  account) [signal]

Emitted whenever an account that matches filter is added to this set.

Parameters:
accountThe account that was added to this set.
See also:
accounts()
void Tp::AccountSet::accountRemoved ( const Tp::AccountPtr &  account) [signal]

Emitted whenever an account that matches filter is removed from this set.

Parameters:
accountThe account that was removed from this set.
See also:
accounts()

Property Documentation

AccountManagerPtr Tp::AccountSet::accountManager [read]

Return the account manager object used to filter accounts.

Returns:
A pointer to the AccountManager object.
AccountFilterConstPtr Tp::AccountSet::filter [read]

Return the filter used to filter accounts.

Returns:
A read-only pointer the AccountFilter object.
QList< AccountPtr > Tp::AccountSet::accounts [read]

Return a list of account objects that match filter.

Change notification is via the accountAdded() and accountRemoved() signals.

Returns:
A list of pointers to Account objects.
See also:
accountAdded(), accountRemoved()


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00844.html0000644000175200001440000001102312000060453021622 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::DBusProxyFactory Member List
This is the complete list of members for Tp::DBusProxyFactory, including all inherited members.
cachedProxy(const QString &busName, const QString &objectPath) const Tp::DBusProxyFactory [protected]
dbusConnection() const Tp::DBusProxyFactory
DBusProxyFactory(const QDBusConnection &bus)Tp::DBusProxyFactory [protected]
featuresFor(const DBusProxyPtr &proxy) const =0Tp::DBusProxyFactory [protected, pure virtual]
finalBusNameFrom(const QString &uniqueOrWellKnown) const =0Tp::DBusProxyFactory [protected, pure virtual]
initialPrepare(const DBusProxyPtr &proxy) const Tp::DBusProxyFactory [protected, virtual]
nowHaveProxy(const DBusProxyPtr &proxy) const Tp::DBusProxyFactory [protected]
readyPrepare(const DBusProxyPtr &proxy) const Tp::DBusProxyFactory [protected, virtual]
RefCounted()Tp::RefCounted [inline]
~DBusProxyFactory()Tp::DBusProxyFactory [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00895.html0000644000175200001440000001251712000060453021641 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingCaptchas Member List
This is the complete list of members for Tp::PendingCaptchas, including all inherited members.
captcha() const Tp::PendingCaptchas
captchaList() const Tp::PendingCaptchas
errorMessage() const Tp::PendingOperation
errorName() const Tp::PendingOperation
finished(Tp::PendingOperation *operation)Tp::PendingOperation [signal]
isError() const Tp::PendingOperation
isFinished() const Tp::PendingOperation
isValid() const Tp::PendingOperation
object() const Tp::PendingOperation [protected]
PendingOperation(const SharedPtr< RefCounted > &object)Tp::PendingOperation [protected]
requiresMultipleCaptchas() const Tp::PendingCaptchas
setFinished()Tp::PendingOperation [protected, slot]
setFinishedWithError(const QString &name, const QString &message)Tp::PendingOperation [protected, slot]
setFinishedWithError(const QDBusError &error)Tp::PendingOperation [protected, slot]
~PendingCaptchas()Tp::PendingCaptchas [virtual]
~PendingOperation()Tp::PendingOperation [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00334.html0000644000175200001440000007411612000060453021630 0ustar00collabora-develusers00000000000000 Tp::PresenceSpec Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Public Types | Public Member Functions | Static Public Member Functions
Tp::PresenceSpec Class Reference

The PresenceSpec class represents a Telepathy presence information supported by a protocol. More...

#include <TelepathyQt/PresenceSpec>

List of all members.

Public Types

Public Member Functions

Static Public Member Functions


Detailed Description

The PresenceSpec class represents a Telepathy presence information supported by a protocol.


Member Enumeration Documentation

Enumerator:
NoFlags 
MaySetOnSelf 
CanHaveStatusMessage 
AllFlags 

Constructor & Destructor Documentation

Tp::PresenceSpec::PresenceSpec ( const QString &  status,
const SimpleStatusSpec spec 
)

Member Function Documentation

Tp::PresenceSpec::Q_DECLARE_FLAGS ( SimpleStatusFlags  ,
SimpleStatusFlag   
)
PresenceSpec Tp::PresenceSpec::available ( SimpleStatusFlags  flags = AllFlags) [static]
PresenceSpec Tp::PresenceSpec::chat ( SimpleStatusFlags  flags = AllFlags) [static]
PresenceSpec Tp::PresenceSpec::pstn ( SimpleStatusFlags  flags = CanHaveStatusMessage) [static]
PresenceSpec Tp::PresenceSpec::away ( SimpleStatusFlags  flags = AllFlags) [static]
PresenceSpec Tp::PresenceSpec::brb ( SimpleStatusFlags  flags = AllFlags) [static]
PresenceSpec Tp::PresenceSpec::dnd ( SimpleStatusFlags  flags = AllFlags) [static]
PresenceSpec Tp::PresenceSpec::busy ( SimpleStatusFlags  flags = AllFlags) [static]
PresenceSpec Tp::PresenceSpec::xa ( SimpleStatusFlags  flags = AllFlags) [static]
PresenceSpec Tp::PresenceSpec::hidden ( SimpleStatusFlags  flags = AllFlags) [static]
PresenceSpec Tp::PresenceSpec::offline ( SimpleStatusFlags  flags = CanHaveStatusMessage) [static]
PresenceSpec Tp::PresenceSpec::unknown ( SimpleStatusFlags  flags = CanHaveStatusMessage) [static]
PresenceSpec Tp::PresenceSpec::error ( SimpleStatusFlags  flags = CanHaveStatusMessage) [static]
bool Tp::PresenceSpec::isValid ( ) const [inline]
PresenceSpec & Tp::PresenceSpec::operator= ( const PresenceSpec other)
bool Tp::PresenceSpec::operator== ( const PresenceSpec other) const
bool Tp::PresenceSpec::operator!= ( const PresenceSpec other) const
bool Tp::PresenceSpec::operator< ( const PresenceSpec other) const
Presence Tp::PresenceSpec::presence ( const QString &  statusMessage = QString()) const


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00084.html0000644000175200001440000006613312000060453021632 0ustar00collabora-develusers00000000000000 Tp::Client::CallContentInterfaceVideoControlInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Signals | Public Member Functions | Static Public Member Functions | Protected Member Functions
Tp::Client::CallContentInterfaceVideoControlInterface Class Reference

#include <TelepathyQt/CallContent>

Inherits Tp::AbstractInterface.

List of all members.

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Call1.Content.Interface.VideoControl".


Constructor & Destructor Documentation

Tp::Client::CallContentInterfaceVideoControlInterface::CallContentInterfaceVideoControlInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a CallContentInterfaceVideoControlInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::CallContentInterfaceVideoControlInterface::CallContentInterfaceVideoControlInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a CallContentInterfaceVideoControlInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a CallContentInterfaceVideoControlInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a CallContentInterfaceVideoControlInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a CallContentInterfaceVideoControlInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Call1.Content.Interface.VideoControl", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property VideoResolution of type Tp::VideoResolution.

The resolution at which the streaming engine should be sending. Change notification is via the VideoResolutionChanged signal.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Bitrate of type uint.

The bitrate the streaming engine should be sending at. Change notification is via the BitrateChanged signal.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Framerate of type uint.

The framerate the streaming engine should be sending at. Change notification is via the FramerateChanged signal.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property MTU of type uint.

The Maximum Transmission Unit Change notification is via the MTUChanged signal.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property ManualKeyFrames of type bool.

Only send key frames when manually requested

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.

Represents the signal KeyFrameRequested on the remote object.

Request that the video encoder produce a new key frame as soon as possible.

Represents the signal VideoResolutionChanged on the remote object.

The desired video resolution has changed.

Represents the signal BitrateChanged on the remote object.

The desired bitrate has changed

Represents the signal FramerateChanged on the remote object.

The desired framerate has changed

Represents the signal MTUChanged on the remote object.

The Maximum Transmission Unit has changed

void Tp::Client::CallContentInterfaceVideoControlInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01084.html0000644000175200001440000002346712000060453021636 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelInterfaceCaptchaAuthenticationInterface Member List
This is the complete list of members for Tp::Client::ChannelInterfaceCaptchaAuthenticationInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
AnswerCaptchas(const Tp::CaptchaAnswers &answers, int timeout=-1)Tp::Client::ChannelInterfaceCaptchaAuthenticationInterface [inline, slot]
CancelCaptcha(uint reason, const QString &debugMessage, int timeout=-1)Tp::Client::ChannelInterfaceCaptchaAuthenticationInterface [inline, slot]
ChannelInterfaceCaptchaAuthenticationInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfaceCaptchaAuthenticationInterface
ChannelInterfaceCaptchaAuthenticationInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfaceCaptchaAuthenticationInterface
ChannelInterfaceCaptchaAuthenticationInterface(Tp::DBusProxy *proxy)Tp::Client::ChannelInterfaceCaptchaAuthenticationInterface
ChannelInterfaceCaptchaAuthenticationInterface(const Tp::Client::ChannelInterface &mainInterface)Tp::Client::ChannelInterfaceCaptchaAuthenticationInterface [explicit]
ChannelInterfaceCaptchaAuthenticationInterface(const Tp::Client::ChannelInterface &mainInterface, QObject *parent)Tp::Client::ChannelInterfaceCaptchaAuthenticationInterface
GetCaptchaData(uint ID, const QString &mimeType, int timeout=-1)Tp::Client::ChannelInterfaceCaptchaAuthenticationInterface [inline, slot]
GetCaptchas(int timeout=-1)Tp::Client::ChannelInterfaceCaptchaAuthenticationInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ChannelInterfaceCaptchaAuthenticationInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ChannelInterfaceCaptchaAuthenticationInterface [inline]
requestPropertyCanRetryCaptcha() const Tp::Client::ChannelInterfaceCaptchaAuthenticationInterface [inline]
requestPropertyCaptchaError() const Tp::Client::ChannelInterfaceCaptchaAuthenticationInterface [inline]
requestPropertyCaptchaErrorDetails() const Tp::Client::ChannelInterfaceCaptchaAuthenticationInterface [inline]
requestPropertyCaptchaStatus() const Tp::Client::ChannelInterfaceCaptchaAuthenticationInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ChannelInterfaceCaptchaAuthenticationInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00167.html0000644000175200001440000006065312000060453021635 0ustar00collabora-develusers00000000000000 Tp::Client::ConnectionInterfaceAnonymityInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Signals | Public Member Functions | Static Public Member Functions | Protected Member Functions
Tp::Client::ConnectionInterfaceAnonymityInterface Class Reference

#include <TelepathyQt/Connection>

Inherits Tp::AbstractInterface.

List of all members.

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Connection.Interface.Anonymity".


Constructor & Destructor Documentation

Tp::Client::ConnectionInterfaceAnonymityInterface::ConnectionInterfaceAnonymityInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceAnonymityInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ConnectionInterfaceAnonymityInterface::ConnectionInterfaceAnonymityInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceAnonymityInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ConnectionInterfaceAnonymityInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ConnectionInterfaceAnonymityInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ConnectionInterfaceAnonymityInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Connection.Interface.Anonymity", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property SupportedAnonymityModes of type uint.

The anonymity modes supported by the CM for this connection. Once Connection.Status has moved to Connected, this property MUST NOT change.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property AnonymityMandatory of type bool.

This specifies whether or not the anonymity settings MUST be respected by the CM and any intermediaries between the local and remote contacts. If this is set to true but anonymity settings cannot be followed, then the session MUST be denied with a org.freedesktop.Telepathy.Error.WouldBreakAnonymity error. Any client that sets AnonymityModes SHOULD also set this property first (rather than accepting the CM's default value).

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous setter for the remote object property AnonymityMandatory of type bool.

This specifies whether or not the anonymity settings MUST be respected by the CM and any intermediaries between the local and remote contacts. If this is set to true but anonymity settings cannot be followed, then the session MUST be denied with a org.freedesktop.Telepathy.Error.WouldBreakAnonymity error. Any client that sets AnonymityModes SHOULD also set this property first (rather than accepting the CM's default value).

Returns:
A pending operation which will emit finished when the property has been set.

Asynchronous getter for the remote object property AnonymityModes of type uint.

The currently enabled anonymity modes for the connection. Setting has the effect of requesting new modes for the connection, and may raise an error if the unsupported modes are set. Successfully changing the modes will result in emission of AnonymityModesChanged signal.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous setter for the remote object property AnonymityModes of type uint.

The currently enabled anonymity modes for the connection. Setting has the effect of requesting new modes for the connection, and may raise an error if the unsupported modes are set. Successfully changing the modes will result in emission of AnonymityModesChanged signal.

Returns:
A pending operation which will emit finished when the property has been set.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.

Represents the signal AnonymityModesChanged on the remote object.

Emitted when the anonymity mode has changed.

Parameters:
modesThe new anonymity modes for this connection.
void Tp::Client::ConnectionInterfaceAnonymityInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00648_source.html0000644000175200001440000002207312000060453023213 0ustar00collabora-develusers00000000000000 pending-handles.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
pending-handles.h
00001 
00023 #ifndef _TelepathyQt_pending_handles_h_HEADER_GUARD_
00024 #define _TelepathyQt_pending_handles_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Constants>
00031 #include <TelepathyQt/PendingOperation>
00032 #include <TelepathyQt/Types>
00033 
00034 #include <QHash>
00035 #include <QString>
00036 #include <QStringList>
00037 
00038 #include <TelepathyQt/Types>
00039 
00040 namespace Tp
00041 {
00042 
00043 class PendingHandles;
00044 class ReferencedHandles;
00045 
00046 class TP_QT_EXPORT PendingHandles : public PendingOperation
00047 {
00048     Q_OBJECT
00049     Q_DISABLE_COPY(PendingHandles)
00050 
00051 public:
00052     ~PendingHandles();
00053 
00054     ConnectionPtr connection() const;
00055 
00056     HandleType handleType() const;
00057 
00058     bool isRequest() const;
00059 
00060     bool isReference() const;
00061 
00062     const QStringList &namesRequested() const;
00063 
00064     QStringList validNames() const;
00065 
00066     QHash<QString, QPair<QString, QString> > invalidNames() const;
00067 
00068     const UIntList &handlesToReference() const;
00069 
00070     ReferencedHandles handles() const;
00071 
00072     UIntList invalidHandles() const;
00073 
00074 private Q_SLOTS:
00075     TP_QT_NO_EXPORT void onRequestHandlesFinished(QDBusPendingCallWatcher *watcher);
00076     TP_QT_NO_EXPORT void onHoldHandlesFinished(QDBusPendingCallWatcher *watcher);
00077     TP_QT_NO_EXPORT void onRequestHandlesFallbackFinished(QDBusPendingCallWatcher *watcher);
00078     TP_QT_NO_EXPORT void onHoldHandlesFallbackFinished(QDBusPendingCallWatcher *watcher);
00079 
00080 private:
00081     friend class ConnectionLowlevel;
00082 
00083     TP_QT_NO_EXPORT PendingHandles(const ConnectionPtr &connection, HandleType handleType,
00084             const QStringList &names);
00085     TP_QT_NO_EXPORT PendingHandles(const ConnectionPtr &connection, HandleType handleType,
00086             const UIntList &handles, const UIntList &alreadyHeld, const UIntList &notYetHeld);
00087     TP_QT_NO_EXPORT PendingHandles(const QString &errorName, const QString &errorMessage);
00088 
00089     struct Private;
00090     friend struct Private;
00091     Private *mPriv;
00092 };
00093 
00094 } // Tp
00095 
00096 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00951.html0000644000175200001440000007660212000060453021637 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::StreamedMediaChannel Member List
This is the complete list of members for Tp::StreamedMediaChannel, including all inherited members.
acceptCall()Tp::StreamedMediaChannel
actualFeatures() const Tp::ReadyObject [virtual]
awaitingLocalAnswer() const Tp::StreamedMediaChannel
awaitingRemoteAnswer() const Tp::StreamedMediaChannel
baseInterface() const Tp::Channel [protected]
becomeReady(const Features &requestedFeatures=Features())Tp::ReadyObject [virtual]
busName() const Tp::DBusProxy
BypassInterfaceCheck enum valueTp::OptionalInterfaceFactory< Channel >
Channel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature)Tp::Channel [protected]
channelType() const Tp::Channel
CheckInterfaceSupported enum valueTp::OptionalInterfaceFactory< Channel >
conferenceChannelMerged(const Tp::ChannelPtr &channel)Tp::Channel [signal]
conferenceChannelRemoved(const Tp::ChannelPtr &channel, const Tp::Channel::GroupMemberChangeDetails &details)Tp::Channel [signal]
conferenceChannels() const Tp::Channel
conferenceInitialChannels() const Tp::Channel
conferenceInitialInviteeContacts() const Tp::Channel
conferenceMergeChannel(const ChannelPtr &channel)Tp::Channel
conferenceOriginalChannels() const Tp::Channel
conferenceSplitChannel()Tp::Channel
connection() const Tp::Channel
create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties)Tp::StreamedMediaChannel [static]
dbusConnection() const Tp::DBusProxy
DBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::DBusProxy
FeatureConferenceInitialInviteeContactsTp::Channel [static]
FeatureCoreTp::StreamedMediaChannel [static]
FeatureLocalHoldStateTp::StreamedMediaChannel [static]
FeatureStreamsTp::StreamedMediaChannel [static]
groupAddContacts(const QList< ContactPtr > &contacts, const QString &message=QString())Tp::Channel
groupAddSelfHandle()Tp::Channel [protected, slot]
groupAreHandleOwnersAvailable() const Tp::Channel
groupCanAcceptContactsWithMessage() const Tp::Channel
groupCanAddContacts() const Tp::Channel
groupCanAddContactsChanged(bool canAddContacts)Tp::Channel [signal]
groupCanAddContactsWithMessage() const Tp::Channel
groupCanDepartWithMessage() const Tp::Channel
groupCanRejectContactsWithMessage() const Tp::Channel
groupCanRemoveContacts() const Tp::Channel
groupCanRemoveContactsChanged(bool canRemoveContacts)Tp::Channel [signal]
groupCanRemoveContactsWithMessage() const Tp::Channel
groupCanRescindContacts() const Tp::Channel
groupCanRescindContactsChanged(bool canRescindContacts)Tp::Channel [signal]
groupCanRescindContactsWithMessage() const Tp::Channel
groupContacts(bool includeSelfContact=true) const Tp::Channel
groupFlags() const Tp::Channel
groupFlagsChanged(Tp::ChannelGroupFlags flags, Tp::ChannelGroupFlags added, Tp::ChannelGroupFlags removed)Tp::Channel [signal]
groupHandleOwners() const Tp::Channel
groupHandleOwnersChanged(const Tp::HandleOwnerMap &owners, const Tp::UIntList &added, const Tp::UIntList &removed)Tp::Channel [signal]
groupIsSelfContactTracked() const Tp::Channel
groupLocalPendingContactChangeInfo(const ContactPtr &contact) const Tp::Channel
groupLocalPendingContacts(bool includeSelfContact=true) const Tp::Channel
groupMembersChanged(const Tp::Contacts &groupMembersAdded, const Tp::Contacts &groupLocalPendingMembersAdded, const Tp::Contacts &groupRemotePendingMembersAdded, const Tp::Contacts &groupMembersRemoved, const Tp::Channel::GroupMemberChangeDetails &details)Tp::Channel [signal]
groupRemotePendingContacts(bool includeSelfContact=true) const Tp::Channel
groupRemoveContacts(const QList< ContactPtr > &contacts, const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone)Tp::Channel
groupSelfContact() const Tp::Channel
groupSelfContactChanged()Tp::Channel [signal]
groupSelfContactRemoveInfo() const Tp::Channel
groupSelfHandleIsLocalPending() const Tp::Channel [protected]
handlerStreamingRequired() const Tp::StreamedMediaChannel
hangupCall()Tp::StreamedMediaChannel
hasInterface(const QString &name) constTp::OptionalInterfaceFactory< Channel > [inline]
immutableProperties() const Tp::Channel
initiatorContact() const Tp::Channel
interface() constTp::OptionalInterfaceFactory< Channel > [inline]
interfaces() constTp::OptionalInterfaceFactory< Channel > [inline]
InterfaceSupportedChecking enum nameTp::OptionalInterfaceFactory< Channel >
invalidate(const QString &reason, const QString &message)Tp::DBusProxy [protected]
invalidate(const QDBusError &error)Tp::DBusProxy [protected]
invalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage)Tp::DBusProxy [signal]
invalidationMessage() const Tp::DBusProxy
invalidationReason() const Tp::DBusProxy
isConference() const Tp::Channel
isReady(const Features &features=Features()) const Tp::ReadyObject [virtual]
isRequested() const Tp::Channel
isValid() const Tp::DBusProxy
localHoldState() const Tp::StreamedMediaChannel
localHoldStateChanged(Tp::LocalHoldState state, Tp::LocalHoldStateReason reason)Tp::StreamedMediaChannel [signal]
localHoldStateReason() const Tp::StreamedMediaChannel
missingFeatures() const Tp::ReadyObject [virtual]
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
objectPath() const Tp::DBusProxy
optionalInterface(InterfaceSupportedChecking check=CheckInterfaceSupported) constTp::OptionalInterfaceFactory< Channel > [inline]
OptionalInterfaceFactory(Channel *this_)Tp::OptionalInterfaceFactory< Channel > [inline]
propertyChanged(const QString &propertyName)Tp::Object [signal]
readinessHelper() const Tp::ReadyObject [protected]
ReadyObject(RefCounted *object, const Feature &featureCore)Tp::ReadyObject
ReadyObject(DBusProxy *proxy, const Feature &featureCore)Tp::ReadyObject
RefCounted()Tp::RefCounted [inline]
removeStream(const StreamedMediaStreamPtr &stream)Tp::StreamedMediaChannel
removeStreams(const StreamedMediaStreams &streams)Tp::StreamedMediaChannel
requestClose()Tp::Channel
requestedFeatures() const Tp::ReadyObject [virtual]
requestHold(bool hold)Tp::StreamedMediaChannel
requestLeave(const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone)Tp::Channel
requestStream(const ContactPtr &contact, MediaStreamType type)Tp::StreamedMediaChannel
requestStreams(const ContactPtr &contact, QList< MediaStreamType > types)Tp::StreamedMediaChannel
setBusName(const QString &busName)Tp::DBusProxy [protected]
setInterfaces(const QStringList &interfaces)Tp::OptionalInterfaceFactory< Channel > [inline, protected]
StateChangeReason enum nameTp::StreamedMediaChannel
StateChangeReasonUnknown enum valueTp::StreamedMediaChannel
StateChangeReasonUserRequested enum valueTp::StreamedMediaChannel
StatefulDBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::StatefulDBusProxy
streamAdded(const Tp::StreamedMediaStreamPtr &stream)Tp::StreamedMediaChannel [signal]
streamDirectionChanged(const Tp::StreamedMediaStreamPtr &stream, Tp::MediaStreamDirection direction, Tp::MediaStreamPendingSend pendingSend)Tp::StreamedMediaChannel [signal]
StreamedMediaChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature=StreamedMediaChannel::FeatureCore)Tp::StreamedMediaChannel [protected]
streamError(const Tp::StreamedMediaStreamPtr &stream, Tp::MediaStreamError errorCode, const QString &errorMessage)Tp::StreamedMediaChannel [signal]
streamRemoved(const Tp::StreamedMediaStreamPtr &stream)Tp::StreamedMediaChannel [signal]
streams() const Tp::StreamedMediaChannel
streamsForType(MediaStreamType type) const Tp::StreamedMediaChannel
streamStateChanged(const Tp::StreamedMediaStreamPtr &stream, Tp::MediaStreamState state)Tp::StreamedMediaChannel [signal]
supportsConferenceMerging() const Tp::Channel
supportsConferenceSplitting() const Tp::Channel
targetContact() const Tp::Channel
targetHandle() const Tp::Channel
targetHandleType() const Tp::Channel
targetId() const Tp::Channel
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique)Tp::StatefulDBusProxy [static]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique, QString &error, QString &message)Tp::StatefulDBusProxy [static]
~Channel()Tp::Channel [virtual]
~DBusProxy()Tp::DBusProxy [virtual]
~Object()Tp::Object [virtual]
~OptionalInterfaceFactory()Tp::OptionalInterfaceFactory< Channel > [inline]
~ReadyObject()Tp::ReadyObject [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]
~StatefulDBusProxy()Tp::StatefulDBusProxy [virtual]
~StreamedMediaChannel()Tp::StreamedMediaChannel [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00288.html0000644000175200001440000001215212000060453021630 0ustar00collabora-develusers00000000000000 Tp::MultipleStatusMap Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Public Member Functions
Tp::MultipleStatusMap Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<QString, QVariantMap>, but needed to have a discrete type in the Qt type system.

Mapping used in Last_Activity_And_Statuses and passed to SetStatus, representing a collection of statuses. Use of this mapping with more than one member is deprecated.


Constructor & Destructor Documentation

Tp::MultipleStatusMap::MultipleStatusMap ( const QMap< QString, QVariantMap > &  a) [inline]

Member Function Documentation

MultipleStatusMap& Tp::MultipleStatusMap::operator= ( const QMap< QString, QVariantMap > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00938.html0000644000175200001440000001251712000060453021637 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingComposite Member List
This is the complete list of members for Tp::PendingComposite, including all inherited members.
errorMessage() const Tp::PendingOperation
errorName() const Tp::PendingOperation
finished(Tp::PendingOperation *operation)Tp::PendingOperation [signal]
isError() const Tp::PendingOperation
isFinished() const Tp::PendingOperation
isValid() const Tp::PendingOperation
object() const Tp::PendingOperation [protected]
PendingComposite(const QList< PendingOperation * > &operations, const SharedPtr< RefCounted > &object)Tp::PendingComposite
PendingComposite(const QList< PendingOperation * > &operations, bool failOnFirstError, const SharedPtr< RefCounted > &object)Tp::PendingComposite
PendingOperation(const SharedPtr< RefCounted > &object)Tp::PendingOperation [protected]
setFinished()Tp::PendingOperation [protected, slot]
setFinishedWithError(const QString &name, const QString &message)Tp::PendingOperation [protected, slot]
setFinishedWithError(const QDBusError &error)Tp::PendingOperation [protected, slot]
~PendingComposite()Tp::PendingComposite
~PendingOperation()Tp::PendingOperation [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00267.html0000644000175200001440000004425212000060453021633 0ustar00collabora-develusers00000000000000 Tp::Client::MediaSessionHandlerInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Public Slots | Signals | Public Member Functions | Static Public Member Functions | Protected Member Functions
Tp::Client::MediaSessionHandlerInterface Class Reference

#include <TelepathyQt/MediaSessionHandler>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Media.SessionHandler".


Constructor & Destructor Documentation

Tp::Client::MediaSessionHandlerInterface::MediaSessionHandlerInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a MediaSessionHandlerInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::MediaSessionHandlerInterface::MediaSessionHandlerInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a MediaSessionHandlerInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a MediaSessionHandlerInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Member Function Documentation

static QLatin1String Tp::Client::MediaSessionHandlerInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Media.SessionHandler", which this class represents.

Returns:
The D-Bus interface name.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::MediaSessionHandlerInterface::Error ( uint  errorCode,
const QString &  message,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method Error on the remote object.

Informs the connection manager that an error occured in this session. If used, the connection manager must terminate the session and all of the streams within it, and may also emit a StreamError signal on the channel for each stream within the session.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::MediaSessionHandlerInterface::Ready ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method Ready on the remote object.

Inform the connection manager that a client is ready to handle this session handler (i.e. that it has connected to the NewStreamHandler signal and done any other necessary setup).

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
void Tp::Client::MediaSessionHandlerInterface::NewStreamHandler ( const QDBusObjectPath &  streamHandler,
uint  ID,
uint  mediaType,
uint  direction 
) [signal]

Represents the signal NewStreamHandler on the remote object.

Emitted when a new stream handler has been created for this session.

Parameters:
streamHandlerThe path of a new object implementing the StreamHandler interface.
IDThe unique ID of the new stream
mediaTypeType of media that this stream should handle
directionDirection of this stream
void Tp::Client::MediaSessionHandlerInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00141.html0000644000175200001440000003672012000060453021623 0ustar00collabora-develusers00000000000000 Tp::Client::ChannelTypeContactListInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Public Member Functions | Static Public Member Functions | Protected Member Functions
Tp::Client::ChannelTypeContactListInterface Class Reference

#include <TelepathyQt/Channel>

Inherits Tp::AbstractInterface.

List of all members.

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Channel.Type.ContactList".


Constructor & Destructor Documentation

Tp::Client::ChannelTypeContactListInterface::ChannelTypeContactListInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelTypeContactListInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ChannelTypeContactListInterface::ChannelTypeContactListInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelTypeContactListInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ChannelTypeContactListInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ChannelTypeContactListInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ChannelTypeContactListInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

static QLatin1String Tp::Client::ChannelTypeContactListInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Channel.Type.ContactList", which this class represents.

Returns:
The D-Bus interface name.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
void Tp::Client::ChannelTypeContactListInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00272.html0000644000175200001440000001312212000060453021617 0ustar00collabora-develusers00000000000000 Tp::MediaStreamInfo Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Public Attributes
Tp::MediaStreamInfo Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.


Member Data Documentation


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00595_source.html0000644000175200001440000001724012000060453023214 0ustar00collabora-develusers00000000000000 incoming-stream-tube-channel.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
incoming-stream-tube-channel.h
00001 
00022 #ifndef _TelepathyQt_incoming_stream_tube_channel_h_HEADER_GUARD_
00023 #define _TelepathyQt_incoming_stream_tube_channel_h_HEADER_GUARD_
00024 
00025 #ifndef IN_TP_QT_HEADER
00026 #error IN_TP_QT_HEADER
00027 #endif
00028 
00029 #include <TelepathyQt/StreamTubeChannel>
00030 
00031 #include <QtNetwork/QHostAddress>
00032 
00033 class QIODevice;
00034 
00035 namespace Tp
00036 {
00037 
00038 class PendingStreamTubeConnection;
00039 
00040 class TP_QT_EXPORT IncomingStreamTubeChannel : public StreamTubeChannel
00041 {
00042     Q_OBJECT
00043     Q_DISABLE_COPY(IncomingStreamTubeChannel)
00044 
00045 public:
00046     static const Feature FeatureCore;
00047 
00048     static IncomingStreamTubeChannelPtr create(const ConnectionPtr &connection,
00049             const QString &objectPath, const QVariantMap &immutableProperties);
00050 
00051     virtual ~IncomingStreamTubeChannel();
00052 
00053     PendingStreamTubeConnection *acceptTubeAsTcpSocket();
00054     PendingStreamTubeConnection *acceptTubeAsTcpSocket(const QHostAddress &allowedAddress,
00055             quint16 allowedPort);
00056     PendingStreamTubeConnection *acceptTubeAsUnixSocket(bool requireCredentials = false);
00057 
00058 protected:
00059     IncomingStreamTubeChannel(const ConnectionPtr &connection,
00060             const QString &objectPath,
00061             const QVariantMap &immutableProperties,
00062             const Feature &coreFeature = IncomingStreamTubeChannel::FeatureCore);
00063 
00064 private Q_SLOTS:
00065     TP_QT_NO_EXPORT void onNewLocalConnection(uint connectionId);
00066 
00067 private:
00068     struct Private;
00069     friend class PendingStreamTubeConnection;
00070     friend struct Private;
00071     Private *mPriv;
00072 };
00073 
00074 }
00075 
00076 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00386.html0000644000175200001440000004133412000060453021633 0ustar00collabora-develusers00000000000000 Tp::SimpleStreamTubeHandler Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Classes | Signals | Public Member Functions | Static Public Member Functions
Tp::SimpleStreamTubeHandler Class Reference

#include </home/collabora-devel/kde/src/telepathy-qt4/TelepathyQt/simple-stream-tube-handler.h>

Inherits Tp::AbstractClientHandler.

List of all members.

Classes

Signals

Public Member Functions

Static Public Member Functions


Constructor & Destructor Documentation


Member Function Documentation

SharedPtr< SimpleStreamTubeHandler > Tp::SimpleStreamTubeHandler::create ( const QStringList &  p2pServices,
const QStringList &  roomServices,
bool  requested,
bool  monitorConnections,
bool  bypassApproval = false 
) [static]
bool Tp::SimpleStreamTubeHandler::bypassApproval ( ) const [inline, virtual]

Return whether channels destined for this handler are automatically handled, without invoking approvers.

Returns:
true if automatically handled, false otherwise.

Implements Tp::AbstractClientHandler.

void Tp::SimpleStreamTubeHandler::handleChannels ( const MethodInvocationContextPtr<> &  context,
const AccountPtr &  account,
const ConnectionPtr &  connection,
const QList< ChannelPtr > &  channels,
const QList< ChannelRequestPtr > &  requestsSatisfied,
const QDateTime &  userActionTime,
const HandlerInfo handlerInfo 
) [virtual]

Called by the channel dispatcher when this handler should handle these channels, or when this handler should present channels that it is already handling to the user (e.g. bring them into the foreground).

Clients are expected to know what channels they're already handling, and which channel object corresponds to which window or tab.

After handleChannels() replies successfully by calling MethodInvocationContext::setFinished(), the client process is considered to be responsible for the channel until it its unique name disappears from the bus.

If a process has multiple client bus names - some temporary and some long-lived - and drops one of the temporary bus names in order to reduce the set of channels that it will handle, any channels that it is already handling will remain unaffected.

The received context object should be stored until this method is finished processing and then MethodInvocationContext::setFinished() or MethodInvocationContext::setFinishedWithError() should be called on the received context object.

Specialized handlers must reimplement this method.

Parameters:
contextA MethodInvocationContextPtr object that must be used to indicate whether this method finished processing.
accountThe account with which the channels are associated.
connectionThe connection with which the channels are associated.
channelsThe channels to be handled.
dispatchOperationThe dispatch operation for these channels. The object will be invalid (DBusProxy::isValid() will be false) if there is no dispatch operation in place (because the channels were requested, not incoming).
requestsSatisfiedThe requests satisfied by these channels.
userActionTimeThe time at which user action occurred, or 0 if this channel is to be handled for some reason not involving user action. Handlers should use this for focus-stealing prevention, if applicable.
handlerInfoAdditional information about these channels.

Implements Tp::AbstractClientHandler.

void Tp::SimpleStreamTubeHandler::invokedForTube ( const Tp::AccountPtr &  account,
const Tp::StreamTubeChannelPtr &  tube,
const QDateTime &  userActionTime,
const Tp::ChannelRequestHints requestHints 
) [signal]
void Tp::SimpleStreamTubeHandler::tubeInvalidated ( const Tp::AccountPtr &  account,
const Tp::StreamTubeChannelPtr &  tube,
const QString &  errorName,
const QString &  errorMessage 
) [signal]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00294.html0000644000175200001440000001155012000060453021626 0ustar00collabora-develusers00000000000000 Tp::ObjectPathList Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Public Member Functions
Tp::ObjectPathList Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Generic list type with QDBusObjectPath elements. Convertible with QList<QDBusObjectPath>, but needed to have a discrete type in the Qt type system.


Constructor & Destructor Documentation

Tp::ObjectPathList::ObjectPathList ( const QList< QDBusObjectPath > &  a) [inline]

Member Function Documentation

ObjectPathList& Tp::ObjectPathList::operator= ( const QList< QDBusObjectPath > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00414.html0000644000175200001440000001124412000060453021620 0ustar00collabora-develusers00000000000000 Tp::UIntList Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Public Member Functions
Tp::UIntList Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Generic list type with uint elements. Convertible with QList<uint>, but needed to have a discrete type in the Qt type system.


Constructor & Destructor Documentation

Tp::UIntList::UIntList ( ) [inline]
Tp::UIntList::UIntList ( const QList< uint > &  a) [inline]

Member Function Documentation

UIntList& Tp::UIntList::operator= ( const QList< uint > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00940.html0000644000175200001440000001100412000060453021616 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::SimpleTextObserver Member List
This is the complete list of members for Tp::SimpleTextObserver, including all inherited members.
account() const Tp::SimpleTextObserver
contactIdentifier() const Tp::SimpleTextObserver
create(const AccountPtr &account)Tp::SimpleTextObserver [static]
create(const AccountPtr &account, const ContactPtr &contact)Tp::SimpleTextObserver [static]
create(const AccountPtr &account, const QString &contactIdentifier)Tp::SimpleTextObserver [static]
messageReceived(const Tp::ReceivedMessage &message, const Tp::TextChannelPtr &channel)Tp::SimpleTextObserver [signal]
messageSent(const Tp::Message &message, Tp::MessageSendingFlags flags, const QString &sentMessageToken, const Tp::TextChannelPtr &channel)Tp::SimpleTextObserver [signal]
RefCounted()Tp::RefCounted [inline]
textChats() const Tp::SimpleTextObserver
~RefCounted()Tp::RefCounted [inline, virtual]
~SimpleTextObserver()Tp::SimpleTextObserver [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00877.html0000644000175200001440000007223612000060453021645 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::IncomingDBusTubeChannel Member List
This is the complete list of members for Tp::IncomingDBusTubeChannel, including all inherited members.
acceptTube(bool allowOtherUsers=false)Tp::IncomingDBusTubeChannel
actualFeatures() const Tp::ReadyObject [virtual]
address() const Tp::DBusTubeChannel
baseInterface() const Tp::Channel [protected]
becomeReady(const Features &requestedFeatures=Features())Tp::ReadyObject [virtual]
busName() const Tp::DBusProxy
busNameAdded(const QString &busName, const Tp::ContactPtr &contact)Tp::DBusTubeChannel [signal]
busNameRemoved(const QString &busName, const Tp::ContactPtr &contact)Tp::DBusTubeChannel [signal]
BypassInterfaceCheck enum valueTp::OptionalInterfaceFactory< Channel >
Channel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature)Tp::Channel [protected]
channelType() const Tp::Channel
CheckInterfaceSupported enum valueTp::OptionalInterfaceFactory< Channel >
conferenceChannelMerged(const Tp::ChannelPtr &channel)Tp::Channel [signal]
conferenceChannelRemoved(const Tp::ChannelPtr &channel, const Tp::Channel::GroupMemberChangeDetails &details)Tp::Channel [signal]
conferenceChannels() const Tp::Channel
conferenceInitialChannels() const Tp::Channel
conferenceInitialInviteeContacts() const Tp::Channel
conferenceMergeChannel(const ChannelPtr &channel)Tp::Channel
conferenceOriginalChannels() const Tp::Channel
conferenceSplitChannel()Tp::Channel
connection() const Tp::Channel
contactsForBusNames() const Tp::DBusTubeChannel
create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties)Tp::IncomingDBusTubeChannel [static]
dbusConnection() const Tp::DBusProxy
DBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::DBusProxy
DBusTubeChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties)Tp::DBusTubeChannel [protected]
FeatureBusNameMonitoringTp::DBusTubeChannel [static]
FeatureConferenceInitialInviteeContactsTp::Channel [static]
FeatureCoreTp::DBusTubeChannel [static]
groupAddContacts(const QList< ContactPtr > &contacts, const QString &message=QString())Tp::Channel
groupAddSelfHandle()Tp::Channel [protected, slot]
groupAreHandleOwnersAvailable() const Tp::Channel
groupCanAcceptContactsWithMessage() const Tp::Channel
groupCanAddContacts() const Tp::Channel
groupCanAddContactsChanged(bool canAddContacts)Tp::Channel [signal]
groupCanAddContactsWithMessage() const Tp::Channel
groupCanDepartWithMessage() const Tp::Channel
groupCanRejectContactsWithMessage() const Tp::Channel
groupCanRemoveContacts() const Tp::Channel
groupCanRemoveContactsChanged(bool canRemoveContacts)Tp::Channel [signal]
groupCanRemoveContactsWithMessage() const Tp::Channel
groupCanRescindContacts() const Tp::Channel
groupCanRescindContactsChanged(bool canRescindContacts)Tp::Channel [signal]
groupCanRescindContactsWithMessage() const Tp::Channel
groupContacts(bool includeSelfContact=true) const Tp::Channel
groupFlags() const Tp::Channel
groupFlagsChanged(Tp::ChannelGroupFlags flags, Tp::ChannelGroupFlags added, Tp::ChannelGroupFlags removed)Tp::Channel [signal]
groupHandleOwners() const Tp::Channel
groupHandleOwnersChanged(const Tp::HandleOwnerMap &owners, const Tp::UIntList &added, const Tp::UIntList &removed)Tp::Channel [signal]
groupIsSelfContactTracked() const Tp::Channel
groupLocalPendingContactChangeInfo(const ContactPtr &contact) const Tp::Channel
groupLocalPendingContacts(bool includeSelfContact=true) const Tp::Channel
groupMembersChanged(const Tp::Contacts &groupMembersAdded, const Tp::Contacts &groupLocalPendingMembersAdded, const Tp::Contacts &groupRemotePendingMembersAdded, const Tp::Contacts &groupMembersRemoved, const Tp::Channel::GroupMemberChangeDetails &details)Tp::Channel [signal]
groupRemotePendingContacts(bool includeSelfContact=true) const Tp::Channel
groupRemoveContacts(const QList< ContactPtr > &contacts, const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone)Tp::Channel
groupSelfContact() const Tp::Channel
groupSelfContactChanged()Tp::Channel [signal]
groupSelfContactRemoveInfo() const Tp::Channel
groupSelfHandleIsLocalPending() const Tp::Channel [protected]
hasInterface(const QString &name) constTp::OptionalInterfaceFactory< Channel > [inline]
immutableProperties() const Tp::Channel
IncomingDBusTubeChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties)Tp::IncomingDBusTubeChannel [protected]
initiatorContact() const Tp::Channel
interface() constTp::OptionalInterfaceFactory< Channel > [inline]
interfaces() constTp::OptionalInterfaceFactory< Channel > [inline]
InterfaceSupportedChecking enum nameTp::OptionalInterfaceFactory< Channel >
invalidate(const QString &reason, const QString &message)Tp::DBusProxy [protected]
invalidate(const QDBusError &error)Tp::DBusProxy [protected]
invalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage)Tp::DBusProxy [signal]
invalidationMessage() const Tp::DBusProxy
invalidationReason() const Tp::DBusProxy
isConference() const Tp::Channel
isReady(const Features &features=Features()) const Tp::ReadyObject [virtual]
isRequested() const Tp::Channel
isValid() const Tp::DBusProxy
missingFeatures() const Tp::ReadyObject [virtual]
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
objectPath() const Tp::DBusProxy
optionalInterface(InterfaceSupportedChecking check=CheckInterfaceSupported) constTp::OptionalInterfaceFactory< Channel > [inline]
OptionalInterfaceFactory(Channel *this_)Tp::OptionalInterfaceFactory< Channel > [inline]
parameters() const Tp::TubeChannel
propertyChanged(const QString &propertyName)Tp::Object [signal]
readinessHelper() const Tp::ReadyObject [protected]
ReadyObject(RefCounted *object, const Feature &featureCore)Tp::ReadyObject
ReadyObject(DBusProxy *proxy, const Feature &featureCore)Tp::ReadyObject
RefCounted()Tp::RefCounted [inline]
requestClose()Tp::Channel
requestedFeatures() const Tp::ReadyObject [virtual]
requestLeave(const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone)Tp::Channel
serviceName() const Tp::DBusTubeChannel
setBusName(const QString &busName)Tp::DBusProxy [protected]
setInterfaces(const QStringList &interfaces)Tp::OptionalInterfaceFactory< Channel > [inline, protected]
setParameters(const QVariantMap &parameters)Tp::TubeChannel [protected]
state() const Tp::TubeChannel
stateChanged(Tp::TubeChannelState state)Tp::TubeChannel [signal]
StatefulDBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::StatefulDBusProxy
supportsConferenceMerging() const Tp::Channel
supportsConferenceSplitting() const Tp::Channel
supportsRestrictingToCurrentUser() const Tp::DBusTubeChannel
targetContact() const Tp::Channel
targetHandle() const Tp::Channel
targetHandleType() const Tp::Channel
targetId() const Tp::Channel
TubeChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature=TubeChannel::FeatureCore)Tp::TubeChannel [protected]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique)Tp::StatefulDBusProxy [static]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique, QString &error, QString &message)Tp::StatefulDBusProxy [static]
~Channel()Tp::Channel [virtual]
~DBusProxy()Tp::DBusProxy [virtual]
~DBusTubeChannel()Tp::DBusTubeChannel [virtual]
~IncomingDBusTubeChannel()Tp::IncomingDBusTubeChannel [virtual]
~Object()Tp::Object [virtual]
~OptionalInterfaceFactory()Tp::OptionalInterfaceFactory< Channel > [inline]
~ReadyObject()Tp::ReadyObject [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]
~StatefulDBusProxy()Tp::StatefulDBusProxy [virtual]
~TubeChannel()Tp::TubeChannel [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00466_source.html0000644000175200001440000000664112000060453023214 0ustar00collabora-develusers00000000000000 channel-class-features.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
channel-class-features.h
00001 
00023 #ifndef _TelepathyQt_channel_class_features_h_HEADER_GUARD_
00024 #define _TelepathyQt_channel_class_features_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/ChannelClassSpec>
00031 #include <TelepathyQt/Features>
00032 
00033 #include <QMetaType>
00034 #include <QPair>
00035 
00036 namespace Tp
00037 {
00038 
00039 typedef QPair<ChannelClassSpec, Features> ChannelClassFeatures;
00040 
00041 } // Tp
00042 
00043 Q_DECLARE_METATYPE(Tp::ChannelClassFeatures);
00044 
00045 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00178.html0000644000175200001440000005601312000060453021632 0ustar00collabora-develusers00000000000000 Tp::Client::ConnectionInterfaceContactsInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Public Slots | Public Member Functions | Static Public Member Functions | Protected Member Functions
Tp::Client::ConnectionInterfaceContactsInterface Class Reference

#include <TelepathyQt/Connection>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Connection.Interface.Contacts".


Constructor & Destructor Documentation

Tp::Client::ConnectionInterfaceContactsInterface::ConnectionInterfaceContactsInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceContactsInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ConnectionInterfaceContactsInterface::ConnectionInterfaceContactsInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceContactsInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ConnectionInterfaceContactsInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ConnectionInterfaceContactsInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ConnectionInterfaceContactsInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Connection.Interface.Contacts", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property ContactAttributeInterfaces of type QStringList.

A list of D-Bus interfaces for which GetContactAttributes is expected to work. This cannot change during the lifetime of the Connection.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply<Tp::ContactAttributesMap> Tp::Client::ConnectionInterfaceContactsInterface::GetContactAttributes ( const Tp::UIntList handles,
const QStringList &  interfaces,
bool  hold,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method GetContactAttributes on the remote object.

Return any number of contact attributes for the given handles.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
handlesAn array of handles representing contacts.
interfaces

A list of strings indicating which D-Bus interfaces the calling process is interested in. All supported attributes from these interfaces, whose values can be obtained without additional network activity, will be in the reply.

Connection managers SHOULD ignore interfaces requested which they do not support (i.e. those not mentioned in the ContactAttributeInterfaces property.)

This simplifies client-side code. Clients which care may distinguish between unsupported interfaces (e.g. this Connection does not support Avatars), and interfaces on which no information is known for these contacts (e.g. we don't know the avatar tokens of any of the contacts, so we omitted them all) by inspecting ContactAttributeInterfaces .

Attributes from the interface ConnectionInterface are always returned, and need not be requested explicitly.

As well as returning cached information immediately, the connection MAY start asynchronous requests to obtain better values for the contact attributes. If better values are later obtained by this process, they will be indicated with the usual signals (such as ConnectionInterfaceAliasingInterface::AliasesChanged() ).

For instance, an XMPP connection manager could download vCards in response to a request for ConnectionInterfaceAliasingInterface attributes.
hold

If true, all handles that appear as keys in the result have been held on behalf of the calling process, as if by a call to ConnectionInterface::HoldHandles() . (If ConnectionInterface::HasImmortalHandles is true, which SHOULD be the case in all new connection managers, this has no effect.)

For further round-trip avoidance.

timeoutThe timeout in milliseconds.
Returns:

A dictionary mapping the contact handles to contact attributes. If any of the requested handles are in fact invalid, they are simply omitted from this mapping. If contact attributes are not immediately known, the behaviour is defined by the interface; the attribute should either be omitted from the result or replaced with a default value.

Each contact's attributes will always include at least the identifier that would be obtained by inspecting the handle (org.freedesktop.Telepathy.Connection/contact-id).

void Tp::Client::ConnectionInterfaceContactsInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00014.html0000644000175200001440000000731312000060453021616 0ustar00collabora-develusers00000000000000 protocols/cm-wrapper.cpp
   Home · All Classes · All Namespaces · Modules · Functions · Files
protocols/cm-wrapper.cpp
#include "cm-wrapper.h"
#include "_gen/cm-wrapper.moc.hpp"

#include <TelepathyQt/Debug>
#include <TelepathyQt/ConnectionManager>
#include <TelepathyQt/PendingReady>

#include <QDebug>

CMWrapper::CMWrapper(const QString &cmName, QObject *parent)
    : QObject(parent),
      mCM(ConnectionManager::create(cmName))
{
    connect(mCM->becomeReady(),
            SIGNAL(finished(Tp::PendingOperation *)),
            SLOT(onCMReady(Tp::PendingOperation *)));
}

CMWrapper::~CMWrapper()
{
}

ConnectionManagerPtr CMWrapper::cm() const
{
    return mCM;
}

void CMWrapper::onCMReady(PendingOperation *op)
{
    if (op->isError()) {
        qWarning() << "CM" << mCM->name() << "cannot become ready -" <<
            op->errorName() << ": " << op->errorMessage();
        return;
    }

    qDebug() << "CM" << mCM->name() << "ready!";
    qDebug() << "Supported protocols:";
    foreach (const QString &protocol, mCM->supportedProtocols()) {
        qDebug() << "\t" << protocol;
    }

    emit finished();
}


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00332.html0000644000175200001440000006277112000060453021632 0ustar00collabora-develusers00000000000000 Tp::Presence Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Public Member Functions | Static Public Member Functions
Tp::Presence Class Reference

The Presence class represents a Telepathy simple presence. More...

#include <TelepathyQt/Presence>

List of all members.

Public Member Functions

Static Public Member Functions


Detailed Description

The Presence class represents a Telepathy simple presence.


Constructor & Destructor Documentation

Tp::Presence::Presence ( ConnectionPresenceType  type,
const QString &  status,
const QString &  statusMessage 
)
Tp::Presence::Presence ( const Presence other)

Member Function Documentation

Presence Tp::Presence::available ( const QString &  statusMessage = QString()) [static]
Presence Tp::Presence::chat ( const QString &  statusMessage = QString()) [static]
Presence Tp::Presence::away ( const QString &  statusMessage = QString()) [static]
Presence Tp::Presence::brb ( const QString &  statusMessage = QString()) [static]
Presence Tp::Presence::busy ( const QString &  statusMessage = QString()) [static]
Presence Tp::Presence::dnd ( const QString &  statusMessage = QString()) [static]
Presence Tp::Presence::xa ( const QString &  statusMessage = QString()) [static]
Presence Tp::Presence::hidden ( const QString &  statusMessage = QString()) [static]
Presence Tp::Presence::offline ( const QString &  statusMessage = QString()) [static]
bool Tp::Presence::isValid ( ) const [inline]
Presence & Tp::Presence::operator= ( const Presence other)
bool Tp::Presence::operator== ( const Presence other) const
bool Tp::Presence::operator!= ( const Presence other) const
QString Tp::Presence::status ( ) const
QString Tp::Presence::statusMessage ( ) const
void Tp::Presence::setStatus ( const SimplePresence value)
void Tp::Presence::setStatus ( ConnectionPresenceType  type,
const QString &  status,
const QString &  statusMessage 
)
void Tp::Presence::setStatusMessage ( const QString &  statusMessage)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01116.html0000644000175200001440000002061512000060453021622 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ClientObserverInterface Member List
This is the complete list of members for Tp::Client::ClientObserverInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ClientObserverInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ClientObserverInterface
ClientObserverInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ClientObserverInterface
ClientObserverInterface(Tp::DBusProxy *proxy)Tp::Client::ClientObserverInterface
ClientObserverInterface(const Tp::Client::ClientInterface &mainInterface)Tp::Client::ClientObserverInterface [explicit]
ClientObserverInterface(const Tp::Client::ClientInterface &mainInterface, QObject *parent)Tp::Client::ClientObserverInterface
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ClientObserverInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
ObserveChannels(const QDBusObjectPath &account, const QDBusObjectPath &connection, const Tp::ChannelDetailsList &channels, const QDBusObjectPath &dispatchOperation, const Tp::ObjectPathList &requestsSatisfied, const QVariantMap &observerInfo, int timeout=-1)Tp::Client::ClientObserverInterface [inline, slot]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ClientObserverInterface [inline]
requestPropertyDelayApprovers() const Tp::Client::ClientObserverInterface [inline]
requestPropertyObserverChannelFilter() const Tp::Client::ClientObserverInterface [inline]
requestPropertyRecover() const Tp::Client::ClientObserverInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ClientObserverInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01041.html0000644000175200001440000000554612000060453021625 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Codec Member List
This is the complete list of members for Tp::Codec, including all inherited members.
channelsTp::Codec
clockrateTp::Codec
identifierTp::Codec
nameTp::Codec
parametersTp::Codec
updatedTp::Codec


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00763.html0000644000175200001440000000635512000060453021636 0ustar00collabora-develusers00000000000000 Types and constants
   Home · All Classes · All Namespaces · Modules · Functions · Files
Modules
Types and constants

Modules


Detailed Description

This file is part of TelepathyQt

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

Enumerated, flag, structure, list and mapping types and utility constants.

Enumerated, flag, structure, list and mapping types and utility constants.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00285.html0000644000175200001440000001213312000060453021624 0ustar00collabora-develusers00000000000000 Tp::MessagePartContentMap Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Public Member Functions
Tp::MessagePartContentMap Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<uint, QDBusVariant>, but needed to have a discrete type in the Qt type system.

A mapping from message part indexes to their content, as returned by GetPendingMessageContent.


Constructor & Destructor Documentation

Tp::MessagePartContentMap::MessagePartContentMap ( const QMap< uint, QDBusVariant > &  a) [inline]

Member Function Documentation

MessagePartContentMap& Tp::MessagePartContentMap::operator= ( const QMap< uint, QDBusVariant > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_func_0x78.html0000644000175200001440000000313312000060453024616 0ustar00collabora-develusers00000000000000 Class Members - Functions
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- x -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00691_source.html0000644000175200001440000011123612000060453023211 0ustar00collabora-develusers00000000000000 shared-ptr.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
shared-ptr.h
00001 
00023 #ifndef _TelepathyQt_shared_ptr_h_HEADER_GUARD_
00024 #define _TelepathyQt_shared_ptr_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Global>
00031 
00032 #include <QHash>
00033 #include <QObject>
00034 
00035 namespace Tp
00036 {
00037 
00038 class RefCounted;
00039 template <class T> class SharedPtr;
00040 template <class T> class WeakPtr;
00041 
00042 class TP_QT_EXPORT RefCounted
00043 {
00044     Q_DISABLE_COPY(RefCounted)
00045 
00046     class SharedCount
00047     {
00048         Q_DISABLE_COPY(SharedCount)
00049 
00050     public:
00051         SharedCount(RefCounted *d)
00052             : d(d), strongref(0), weakref(0)
00053         {
00054         }
00055 
00056     private:
00057         template <class T> friend class SharedPtr;
00058         template <class T> friend class WeakPtr;
00059         friend class RefCounted;
00060 
00061         RefCounted *d;
00062         mutable QAtomicInt strongref;
00063         mutable QAtomicInt weakref;
00064     };
00065 
00066 public:
00067     inline RefCounted() : sc(new SharedCount(this))
00068     {
00069         sc->weakref.ref();
00070     }
00071 
00072     inline virtual ~RefCounted()
00073     {
00074         sc->d = 0;
00075         if (!sc->weakref.deref()) {
00076             delete sc;
00077         }
00078     }
00079 
00080 private:
00081     template <class T> friend class SharedPtr;
00082     template <class T> friend class WeakPtr;
00083     // TODO: Remove when Conn.I.ContactList, etc becomes mandatory. This is required to circumvent
00084     //       a reference cycle when using contact list channels, due to the fact that Channels hold
00085     //       strong references to their parent Connection, but not needed when using
00086     //       Conn.I.ContactList and friends.
00087     friend class ContactManager;
00088 
00089     inline void ref() const { sc->strongref.ref(); }
00090     inline bool deref() const { return sc->strongref.deref(); }
00091 
00092     SharedCount *sc;
00093 };
00094 
00095 template <class T>
00096 class SharedPtr
00097 {
00098     typedef bool (SharedPtr<T>::*UnspecifiedBoolType)() const;
00099 
00100 public:
00101     inline SharedPtr() : d(0) { }
00102     explicit inline SharedPtr(T *d) : d(d) { if (d) { d->ref(); } }
00103     template <typename Subclass>
00104         inline SharedPtr(const SharedPtr<Subclass> &o) : d(o.data()) { if (d) { d->ref(); } }
00105     inline SharedPtr(const SharedPtr<T> &o) : d(o.d) { if (d) { d->ref(); } }
00106     explicit inline SharedPtr(const WeakPtr<T> &o)
00107     {
00108         RefCounted::SharedCount *sc = o.sc;
00109         if (sc) {
00110             // increase the strongref, but never up from zero
00111             // or less (negative is used on untracked objects)
00112             register int tmp = sc->strongref.fetchAndAddOrdered(0);
00113             while (tmp > 0) {
00114                 // try to increment from "tmp" to "tmp + 1"
00115                 if (sc->strongref.testAndSetRelaxed(tmp, tmp + 1)) {
00116                     // succeeded
00117                     break;
00118                 }
00119                 // failed, try again
00120                 tmp = sc->strongref.fetchAndAddOrdered(0);
00121             }
00122 
00123             if (tmp > 0) {
00124                 d = dynamic_cast<T*>(sc->d);
00125                 Q_ASSERT(d != NULL);
00126             } else {
00127                 d = 0;
00128             }
00129         } else {
00130             d = 0;
00131         }
00132     }
00133 
00134     inline ~SharedPtr()
00135     {
00136         if (d && !d->deref()) {
00137             T *saved = d;
00138             d = 0;
00139             delete saved;
00140         }
00141     }
00142 
00143     inline void reset()
00144     {
00145         SharedPtr<T>().swap(*this);
00146     }
00147 
00148     inline T *data() const { return d; }
00149     inline const T *constData() const { return d; }
00150     inline T *operator->() { return d; }
00151     inline T *operator->() const { return d; }
00152 
00153     inline bool isNull() const { return !d; }
00154     inline bool operator!() const { return isNull(); }
00155     operator UnspecifiedBoolType() const { return !isNull() ? &SharedPtr<T>::operator! : 0; }
00156 
00157     inline bool operator==(const SharedPtr<T> &o) const { return d == o.d; }
00158     inline bool operator!=(const SharedPtr<T> &o) const { return d != o.d; }
00159     inline bool operator==(const T *ptr) const { return d == ptr; }
00160     inline bool operator!=(const T *ptr) const { return d != ptr; }
00161 
00162     inline SharedPtr<T> &operator=(const SharedPtr<T> &o)
00163     {
00164         SharedPtr<T>(o).swap(*this);
00165         return *this;
00166     }
00167 
00168     inline void swap(SharedPtr<T> &o)
00169     {
00170         T *tmp = d;
00171         d = o.d;
00172         o.d = tmp;
00173     }
00174 
00175     template <class X>
00176     static inline SharedPtr<T> staticCast(const SharedPtr<X> &src)
00177     {
00178         return SharedPtr<T>(static_cast<T*>(src.data()));
00179     }
00180 
00181     template <class X>
00182     static inline SharedPtr<T> dynamicCast(const SharedPtr<X> &src)
00183     {
00184         return SharedPtr<T>(dynamic_cast<T*>(src.data()));
00185     }
00186 
00187     template <class X>
00188     static inline SharedPtr<T> constCast(const SharedPtr<X> &src)
00189     {
00190         return SharedPtr<T>(const_cast<T*>(src.data()));
00191     }
00192 
00193     template <class X>
00194     static inline SharedPtr<T> qObjectCast(const SharedPtr<X> &src)
00195     {
00196         return SharedPtr<T>(qobject_cast<T*>(src.data()));
00197     }
00198 
00199 private:
00200     friend class WeakPtr<T>;
00201 
00202     T *d;
00203 };
00204 
00205 template<typename T>
00206 inline uint qHash(const SharedPtr<T> &ptr)
00207 {
00208     return QT_PREPEND_NAMESPACE(qHash<T>(ptr.data()));
00209 }
00210 
00211 template<typename T> inline uint qHash(const WeakPtr<T> &ptr);
00212 
00213 template <class T>
00214 class WeakPtr
00215 {
00216     typedef bool (WeakPtr<T>::*UnspecifiedBoolType)() const;
00217 
00218 public:
00219     inline WeakPtr() : sc(0) { }
00220     explicit inline WeakPtr(T *d)
00221     {
00222         if (d) {
00223             sc = d->sc;
00224             sc->weakref.ref();
00225         } else {
00226             sc = 0;
00227         }
00228     }
00229     inline WeakPtr(const WeakPtr<T> &o) : sc(o.sc) { if (sc) { sc->weakref.ref(); } }
00230     inline WeakPtr(const SharedPtr<T> &o)
00231     {
00232         if (o.d) {
00233             sc = o.d->sc;
00234             sc->weakref.ref();
00235         } else {
00236             sc = 0;
00237         }
00238     }
00239     inline ~WeakPtr()
00240     {
00241         if (sc && !sc->weakref.deref()) {
00242             delete sc;
00243         }
00244     }
00245 
00246     inline bool isNull() const { return !sc || sc->strongref.fetchAndAddOrdered(0) <= 0; }
00247     inline bool operator!() const { return isNull(); }
00248     operator UnspecifiedBoolType() const { return !isNull() ? &WeakPtr<T>::operator! : 0; }
00249 
00250     inline WeakPtr<T> &operator=(const WeakPtr<T> &o)
00251     {
00252         WeakPtr<T>(o).swap(*this);
00253         return *this;
00254     }
00255 
00256     inline WeakPtr<T> &operator=(const SharedPtr<T> &o)
00257     {
00258         WeakPtr<T>(o).swap(*this);
00259         return *this;
00260     }
00261 
00262     inline void swap(WeakPtr<T> &o)
00263     {
00264         RefCounted::SharedCount *tmp = sc;
00265         sc = o.sc;
00266         o.sc = tmp;
00267     }
00268 
00269     SharedPtr<T> toStrongRef() const { return SharedPtr<T>(*this); }
00270 
00271 private:
00272     friend class SharedPtr<T>;
00273     friend uint qHash<T>(const WeakPtr<T> &ptr);
00274 
00275     RefCounted::SharedCount *sc;
00276 };
00277 
00278 template<typename T>
00279 inline uint qHash(const WeakPtr<T> &ptr)
00280 {
00281     T *actualPtr = ptr.sc ? ptr.sc.d : 0;
00282     return QT_PREPEND_NAMESPACE(qHash<T>(actualPtr));
00283 }
00284 
00285 } // Tp
00286 
00287 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00843.html0000644000175200001440000000472312000060453021632 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::DBusObject Member List
This is the complete list of members for Tp::DBusObject, including all inherited members.
dbusConnection() const Tp::DBusObject
DBusObject(const QDBusConnection &dbusConnection, QObject *parent=0)Tp::DBusObject
~DBusObject()Tp::DBusObject [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00303.html0000644000175200001440000001174212000060453021620 0ustar00collabora-develusers00000000000000 Tp::ParamSpec Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Public Attributes
Tp::ParamSpec Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

A struct representing an allowed parameter, as returned by GetParameters on the ConnectionManager interface.


Member Data Documentation

A string parameter name

A bitwise OR of the parameter flags

A string containing the D-Bus type signature for this parameter

The default value (if the Has_Default flag is not present, there is no default and this takes some dummy value, which SHOULD be of the appropriate D-Bus type)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00557_source.html0000644000175200001440000003044712000060453023216 0ustar00collabora-develusers00000000000000 dbus-proxy.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
dbus-proxy.h
00001 
00023 #ifndef _TelepathyQt_dbus_proxy_h_HEADER_GUARD_
00024 #define _TelepathyQt_dbus_proxy_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Global>
00031 #include <TelepathyQt/Object>
00032 #include <TelepathyQt/ReadyObject>
00033 
00034 class QDBusConnection;
00035 class QDBusError;
00036 
00037 namespace Tp
00038 {
00039 
00040 class TestBackdoors;
00041 
00042 class TP_QT_EXPORT DBusProxy : public Object, public ReadyObject
00043 {
00044     Q_OBJECT
00045     Q_DISABLE_COPY(DBusProxy)
00046 
00047 public:
00048     DBusProxy(const QDBusConnection &dbusConnection, const QString &busName,
00049             const QString &objectPath, const Feature &featureCore);
00050     virtual ~DBusProxy();
00051 
00052     QDBusConnection dbusConnection() const;
00053     QString busName() const;
00054     QString objectPath() const;
00055 
00056     bool isValid() const;
00057     QString invalidationReason() const;
00058     QString invalidationMessage() const;
00059 
00060 Q_SIGNALS:
00061     void invalidated(Tp::DBusProxy *proxy,
00062             const QString &errorName, const QString &errorMessage);
00063 
00064 protected:
00065     void setBusName(const QString &busName);
00066     void invalidate(const QString &reason, const QString &message);
00067     void invalidate(const QDBusError &error);
00068 
00069 private Q_SLOTS:
00070     TP_QT_NO_EXPORT void emitInvalidated();
00071 
00072 private:
00073     friend class TestBackdoors;
00074 
00075     struct Private;
00076     friend struct Private;
00077     Private *mPriv;
00078 };
00079 
00080 class TP_QT_EXPORT StatelessDBusProxy : public DBusProxy
00081 {
00082     Q_OBJECT
00083     Q_DISABLE_COPY(StatelessDBusProxy)
00084 
00085 public:
00086     StatelessDBusProxy(const QDBusConnection &dbusConnection,
00087         const QString &busName, const QString &objectPath, const Feature &featureCore);
00088     virtual ~StatelessDBusProxy();
00089 
00090 private:
00091     struct Private;
00092     friend struct Private;
00093     Private *mPriv;
00094 };
00095 
00096 class TP_QT_EXPORT StatefulDBusProxy : public DBusProxy
00097 {
00098     Q_OBJECT
00099     Q_DISABLE_COPY(StatefulDBusProxy)
00100 
00101 public:
00102     StatefulDBusProxy(const QDBusConnection &dbusConnection,
00103         const QString &busName, const QString &objectPath, const Feature &featureCore);
00104     virtual ~StatefulDBusProxy();
00105 
00106     static QString uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique);
00107     static QString uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique,
00108             QString &error, QString &message);
00109 
00110 private Q_SLOTS:
00111     TP_QT_NO_EXPORT void onServiceOwnerChanged(const QString &name, const QString &oldOwner,
00112             const QString &newOwner);
00113 
00114 private:
00115     struct Private;
00116     friend struct Private;
00117     Private *mPriv;
00118 };
00119 
00120 } // Tp
00121 
00122 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00102.html0000644000175200001440000003016412000060453021614 0ustar00collabora-develusers00000000000000 Tp::Captcha Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Public Member Functions
Tp::Captcha Class Reference

The Captcha class represents a Captcha ready to be answered. More...

#include <TelepathyQt/Captcha>

List of all members.

Public Member Functions


Detailed Description

The Captcha class represents a Captcha ready to be answered.

It exposes all the parameters needed for a handler to present the user with a captcha.

Please note this class is meant to be read-only. It is usually created by PendingCaptchas once a Captcha request operation succeeds.

Please note that this class is implicitly shared.


Constructor & Destructor Documentation

Default constructor.

Tp::Captcha::Captcha ( const Captcha other)

Copy constructor.

Class destructor.


Member Function Documentation

bool Tp::Captcha::isValid ( ) const [inline]
Captcha & Tp::Captcha::operator= ( const Captcha rhs)
QString Tp::Captcha::mimeType ( ) const

Return the mimetype of the captcha.

Returns:
The captcha's mimetype.
See also:
data()
QString Tp::Captcha::label ( ) const

Return the label of the captcha. For some captcha types, such as CaptchaAuthentication::TextQuestionChallenge, the label is also the challenge the user has to answer

Returns:
The captcha's label.
See also:
data() type()
QByteArray Tp::Captcha::data ( ) const

Return the raw data of the captcha. The handler can check its type and metatype to know how to parse the blob.

Returns:
The captcha's data.
See also:
mimeType(), type()

Return the type of the captcha.

Returns:
The captcha's type.
See also:
data()
uint Tp::Captcha::id ( ) const

Return the id of the captcha. This parameter should be used to identify the captcha when answering its challenge.

Returns:
The captcha's id.
See also:
CaptchaAuthentication::answer()


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00259.html0000644000175200001440000001154012000060453021626 0ustar00collabora-develusers00000000000000 Tp::Location Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Public Member Functions
Tp::Location Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<QString, QDBusVariant>, but needed to have a discrete type in the Qt type system.

A user's location, represented as an extensible mapping.


Constructor & Destructor Documentation

Tp::Location::Location ( ) [inline]
Tp::Location::Location ( const QMap< QString, QDBusVariant > &  a) [inline]

Member Function Documentation

Location& Tp::Location::operator= ( const QMap< QString, QDBusVariant > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00952.html0000644000175200001440000007567012000060453021644 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::TextChannel Member List
This is the complete list of members for Tp::TextChannel, including all inherited members.
acknowledge(const QList< ReceivedMessage > &messages)Tp::TextChannel [slot]
actualFeatures() const Tp::ReadyObject [virtual]
baseInterface() const Tp::Channel [protected]
becomeReady(const Features &requestedFeatures=Features())Tp::ReadyObject [virtual]
busName() const Tp::DBusProxy
BypassInterfaceCheck enum valueTp::OptionalInterfaceFactory< Channel >
canInviteContacts() const Tp::TextChannel
Channel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature)Tp::Channel [protected]
channelType() const Tp::Channel
chatState(const ContactPtr &contact) const Tp::TextChannel
chatStateChanged(const Tp::ContactPtr &contact, Tp::ChannelChatState state)Tp::TextChannel [signal]
CheckInterfaceSupported enum valueTp::OptionalInterfaceFactory< Channel >
conferenceChannelMerged(const Tp::ChannelPtr &channel)Tp::Channel [signal]
conferenceChannelRemoved(const Tp::ChannelPtr &channel, const Tp::Channel::GroupMemberChangeDetails &details)Tp::Channel [signal]
conferenceChannels() const Tp::Channel
conferenceInitialChannels() const Tp::Channel
conferenceInitialInviteeContacts() const Tp::Channel
conferenceMergeChannel(const ChannelPtr &channel)Tp::Channel
conferenceOriginalChannels() const Tp::Channel
conferenceSplitChannel()Tp::Channel
connection() const Tp::Channel
create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties)Tp::TextChannel [static]
dbusConnection() const Tp::DBusProxy
DBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::DBusProxy
deliveryReportingSupport() const Tp::TextChannel
FeatureChatStateTp::TextChannel [static]
FeatureConferenceInitialInviteeContactsTp::Channel [static]
FeatureCoreTp::TextChannel [static]
FeatureMessageCapabilitiesTp::TextChannel [static]
FeatureMessageQueueTp::TextChannel [static]
FeatureMessageSentSignalTp::TextChannel [static]
forget(const QList< ReceivedMessage > &messages)Tp::TextChannel [slot]
groupAddContacts(const QList< ContactPtr > &contacts, const QString &message=QString())Tp::Channel
groupAddSelfHandle()Tp::Channel [protected, slot]
groupAreHandleOwnersAvailable() const Tp::Channel
groupCanAcceptContactsWithMessage() const Tp::Channel
groupCanAddContacts() const Tp::Channel
groupCanAddContactsChanged(bool canAddContacts)Tp::Channel [signal]
groupCanAddContactsWithMessage() const Tp::Channel
groupCanDepartWithMessage() const Tp::Channel
groupCanRejectContactsWithMessage() const Tp::Channel
groupCanRemoveContacts() const Tp::Channel
groupCanRemoveContactsChanged(bool canRemoveContacts)Tp::Channel [signal]
groupCanRemoveContactsWithMessage() const Tp::Channel
groupCanRescindContacts() const Tp::Channel
groupCanRescindContactsChanged(bool canRescindContacts)Tp::Channel [signal]
groupCanRescindContactsWithMessage() const Tp::Channel
groupContacts(bool includeSelfContact=true) const Tp::Channel
groupFlags() const Tp::Channel
groupFlagsChanged(Tp::ChannelGroupFlags flags, Tp::ChannelGroupFlags added, Tp::ChannelGroupFlags removed)Tp::Channel [signal]
groupHandleOwners() const Tp::Channel
groupHandleOwnersChanged(const Tp::HandleOwnerMap &owners, const Tp::UIntList &added, const Tp::UIntList &removed)Tp::Channel [signal]
groupIsSelfContactTracked() const Tp::Channel
groupLocalPendingContactChangeInfo(const ContactPtr &contact) const Tp::Channel
groupLocalPendingContacts(bool includeSelfContact=true) const Tp::Channel
groupMembersChanged(const Tp::Contacts &groupMembersAdded, const Tp::Contacts &groupLocalPendingMembersAdded, const Tp::Contacts &groupRemotePendingMembersAdded, const Tp::Contacts &groupMembersRemoved, const Tp::Channel::GroupMemberChangeDetails &details)Tp::Channel [signal]
groupRemotePendingContacts(bool includeSelfContact=true) const Tp::Channel
groupRemoveContacts(const QList< ContactPtr > &contacts, const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone)Tp::Channel
groupSelfContact() const Tp::Channel
groupSelfContactChanged()Tp::Channel [signal]
groupSelfContactRemoveInfo() const Tp::Channel
groupSelfHandleIsLocalPending() const Tp::Channel [protected]
hasChatStateInterface() const Tp::TextChannel
hasInterface(const QString &name) constTp::OptionalInterfaceFactory< Channel > [inline]
hasMessagesInterface() const Tp::TextChannel
immutableProperties() const Tp::Channel
initiatorContact() const Tp::Channel
interface() constTp::OptionalInterfaceFactory< Channel > [inline]
interfaces() constTp::OptionalInterfaceFactory< Channel > [inline]
InterfaceSupportedChecking enum nameTp::OptionalInterfaceFactory< Channel >
invalidate(const QString &reason, const QString &message)Tp::DBusProxy [protected]
invalidate(const QDBusError &error)Tp::DBusProxy [protected]
invalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage)Tp::DBusProxy [signal]
invalidationMessage() const Tp::DBusProxy
invalidationReason() const Tp::DBusProxy
inviteContacts(const QList< ContactPtr > &contacts, const QString &message=QString())Tp::TextChannel [inline, slot]
isConference() const Tp::Channel
isReady(const Features &features=Features()) const Tp::ReadyObject [virtual]
isRequested() const Tp::Channel
isValid() const Tp::DBusProxy
messagePartSupport() const Tp::TextChannel
messageQueue() const Tp::TextChannel
messageReceived(const Tp::ReceivedMessage &message)Tp::TextChannel [signal]
messageSent(const Tp::Message &message, Tp::MessageSendingFlags flags, const QString &sentMessageToken)Tp::TextChannel [signal]
missingFeatures() const Tp::ReadyObject [virtual]
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
objectPath() const Tp::DBusProxy
optionalInterface(InterfaceSupportedChecking check=CheckInterfaceSupported) constTp::OptionalInterfaceFactory< Channel > [inline]
OptionalInterfaceFactory(Channel *this_)Tp::OptionalInterfaceFactory< Channel > [inline]
pendingMessageRemoved(const Tp::ReceivedMessage &message)Tp::TextChannel [signal]
propertyChanged(const QString &propertyName)Tp::Object [signal]
readinessHelper() const Tp::ReadyObject [protected]
ReadyObject(RefCounted *object, const Feature &featureCore)Tp::ReadyObject
ReadyObject(DBusProxy *proxy, const Feature &featureCore)Tp::ReadyObject
RefCounted()Tp::RefCounted [inline]
requestChatState(ChannelChatState state)Tp::TextChannel [slot]
requestClose()Tp::Channel
requestedFeatures() const Tp::ReadyObject [virtual]
requestLeave(const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone)Tp::Channel
send(const QString &text, ChannelTextMessageType type=ChannelTextMessageTypeNormal, MessageSendingFlags flags=0)Tp::TextChannel [slot]
send(const MessagePartList &parts, MessageSendingFlags flags=0)Tp::TextChannel [slot]
setBusName(const QString &busName)Tp::DBusProxy [protected]
setInterfaces(const QStringList &interfaces)Tp::OptionalInterfaceFactory< Channel > [inline, protected]
StatefulDBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::StatefulDBusProxy
supportedContentTypes() const Tp::TextChannel
supportedMessageTypes() const Tp::TextChannel
supportsConferenceMerging() const Tp::Channel
supportsConferenceSplitting() const Tp::Channel
supportsMessageType(ChannelTextMessageType messageType) const Tp::TextChannel
targetContact() const Tp::Channel
targetHandle() const Tp::Channel
targetHandleType() const Tp::Channel
targetId() const Tp::Channel
TextChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature=TextChannel::FeatureCore)Tp::TextChannel [protected]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique)Tp::StatefulDBusProxy [static]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique, QString &error, QString &message)Tp::StatefulDBusProxy [static]
~Channel()Tp::Channel [virtual]
~DBusProxy()Tp::DBusProxy [virtual]
~Object()Tp::Object [virtual]
~OptionalInterfaceFactory()Tp::OptionalInterfaceFactory< Channel > [inline]
~ReadyObject()Tp::ReadyObject [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]
~StatefulDBusProxy()Tp::StatefulDBusProxy [virtual]
~TextChannel()Tp::TextChannel [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00112.html0000644000175200001440000014007012000060453021613 0ustar00collabora-develusers00000000000000 Tp::Client::ChannelDispatcherInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Public Slots | Public Member Functions | Static Public Member Functions | Protected Member Functions
Tp::Client::ChannelDispatcherInterface Class Reference

#include <TelepathyQt/ChannelDispatcher>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.ChannelDispatcher".


Constructor & Destructor Documentation

Tp::Client::ChannelDispatcherInterface::ChannelDispatcherInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelDispatcherInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ChannelDispatcherInterface::ChannelDispatcherInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelDispatcherInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ChannelDispatcherInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Member Function Documentation

static QLatin1String Tp::Client::ChannelDispatcherInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.ChannelDispatcher", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property Interfaces of type QStringList.

A list of the extra interfaces provided by this channel dispatcher.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property SupportsRequestHints of type bool.

If True, the channel dispatcher is new enough to support CreateChannelWithHints and EnsureChannelWithHints, in addition to the older CreateChannel and EnsureChannel methods, and also new enough to emit SucceededWithChannel before the older Succeeded signal. If False or missing, only the metadata-less variants are supported.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply<QDBusObjectPath> Tp::Client::ChannelDispatcherInterface::CreateChannel ( const QDBusObjectPath &  account,
const QVariantMap &  requestedProperties,
qlonglong  userActionTime,
const QString &  preferredHandler,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method CreateChannel on the remote object.

Equivalent to calling CreateChannelWithHints() with an empty Hints parameter.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
accountThe Account for which the new channel is to be created.
requestedProperties

A dictionary containing desirable properties.

This parameter is used in the same way as the corresponding parameter to CreateChannelWithHints() .

userActionTime

The time at which user action occurred, or 0 if this channel request is for some reason not involving user action.

This parameter is used in the same way as the corresponding parameter to CreateChannelWithHints() .

preferredHandler

Either the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable.

This parameter is used in the same way as the corresponding parameter to CreateChannelWithHints() .

timeoutThe timeout in milliseconds.
Returns:

A ChannelRequest object.

QDBusPendingReply<QDBusObjectPath> Tp::Client::ChannelDispatcherInterface::EnsureChannel ( const QDBusObjectPath &  account,
const QVariantMap &  requestedProperties,
qlonglong  userActionTime,
const QString &  preferredHandler,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method EnsureChannel on the remote object.

Equivalent to calling EnsureChannelWithHints() with an empty Hints parameter.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
accountThe Account for which the new channel is to be created.
requestedProperties

A dictionary containing desirable properties.

This parameter is used in the same way as the corresponding parameter to CreateChannelWithHints() .

userActionTime

The time at which user action occurred, or 0 if this channel request is for some reason not involving user action.

This parameter is used in the same way as the corresponding parameter to CreateChannelWithHints() .

preferredHandler

Either the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable. The behaviour and rationale are the same as for the corresponding parameter to EnsureChannelWithHints() .

timeoutThe timeout in milliseconds.
Returns:

A ChannelRequest object.

QDBusPendingReply<QDBusObjectPath> Tp::Client::ChannelDispatcherInterface::CreateChannelWithHints ( const QDBusObjectPath &  account,
const QVariantMap &  requestedProperties,
qlonglong  userActionTime,
const QString &  preferredHandler,
const QVariantMap &  hints,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method CreateChannelWithHints on the remote object.

Start a request to create a channel. This initially just creates a ChannelRequestInterface object, which can be used to continue the request and track its success or failure.

The request can take a long time - in the worst case, the channel dispatcher has to ask the account manager to put the account online, the account manager has to ask the operating system to obtain an Internet connection, and the operating system has to ask the user whether to activate an Internet connection using an on-demand mechanism like dialup.

This means that using a single D-Bus method call and response to represent the whole request will tend to lead to that call timing out, which is not the behaviour we want.

If this method is called for an Account that is disabled, invalid or otherwise unusable, no error is signalled until ChannelRequestInterface::Proceed() is called, at which point ChannelRequestInterface::Failed() is emitted with an appropriate error.

This means there's only one code path for errors, apart from InvalidArgument for "that request makes no sense".

It also means that the request will proceed if the account is enabled after calling CreateChannel, but before calling Proceed.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
accountThe Account for which the new channel is to be created.
requestedProperties

A dictionary containing desirable properties. This has the same semantics as the corresponding parameter to ConnectionInterfaceRequestsInterface::CreateChannel() .

Certain properties will not necessarily make sense in this dictionary: for instance, ChannelInterface::TargetHandle can only be given if the requester is able to interact with a ConnectionInterface to the desired account.

userActionTime

The time at which user action occurred, or 0 if this channel request is for some reason not involving user action. The ChannelRequestInterface::UserActionTime property will be set to this value, and it will eventually be passed as the User_Action_Time parameter of ClientHandlerInterface::HandleChannels() .

preferredHandler

Either the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable. The channel dispatcher SHOULD dispatch as many as possible of the resulting channels (ideally, all of them) to that handler—irrespective of whether that handler's ClientHandlerInterface::HandlerChannelFilter matches the channel—and SHOULD remember the preferred handler so it can try to dispatch subsequent channels in the same bundle to the same handler.

This must be the well-known bus name, not the unique name, to ensure that all handlers do indeed have the Client API, and the Client object on the handler can be located easily.

This is partly so the channel dispatcher can call ClientHandlerInterface::HandleChannels() on it, and partly so the channel dispatcher can recover state if it crashes and is restarted.

The filter should be disregarded for ease of use of this interface: clients will usually use this argument to request channels be sent to themself, and this should trump the filter not matching. This also allows a client to become the handler for a channel produced by one of its own requests, while not being a candidate to handle other channels of that type.

If this is a well-known bus name and the handler has the Requests interface, the channel dispatcher SHOULD call ClientInterfaceRequestsInterface::AddRequest() on that Handler after this method has returned.

This ordering allows a Handler which calls CreateChannel with itself as the preferred handler to associate the call to AddRequest with that call.

This is copied to the ChannelRequest that is returned, as the ChannelRequestInterface::PreferredHandler property.

hintsAdditional information about the channel request, which will be used as the value for the resulting request's Hints property. See the Hints property's documentation for rationale.
timeoutThe timeout in milliseconds.
Returns:

A ChannelRequest object.

QDBusPendingReply<QDBusObjectPath> Tp::Client::ChannelDispatcherInterface::EnsureChannelWithHints ( const QDBusObjectPath &  account,
const QVariantMap &  requestedProperties,
qlonglong  userActionTime,
const QString &  preferredHandler,
const QVariantMap &  hints,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method EnsureChannelWithHints on the remote object.

Start a request to ensure that a channel exists, creating it if necessary. This initially just creates a ChannelRequestInterface object, which can be used to continue the request and track its success or failure.

If this method is called for an Account that is disabled, invalid or otherwise unusable, no error is signalled until ChannelRequestInterface::Proceed() is called, at which point ChannelRequestInterface::Failed() is emitted with an appropriate error.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
accountThe Account for which the new channel is to be created.
requestedProperties

A dictionary containing desirable properties. This has the same semantics as the corresponding parameter to ConnectionInterfaceRequestsInterface::EnsureChannel() .

Certain properties will not necessarily make sense in this dictionary: for instance, ChannelInterface::TargetHandle can only be given if the requester is able to interact with a ConnectionInterface to the desired account.

userActionTime

The time at which user action occurred, or 0 if this channel request is for some reason not involving user action.

This parameter is used in the same way as the corresponding parameter to CreateChannelWithHints() .

preferredHandler

Either the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable. The behaviour and rationale are the same as for the corresponding parameter to CreateChannelWithHints() , except as noted here.

If any new channels are created in response to this request, the channel dispatcher SHOULD dispatch as many as possible of the resulting channels (ideally, all of them) to that handler, and SHOULD remember the preferred handler so it can try to dispatch subsequent channels in the same bundle to the same handler. If the requested channel already exists (that is, ConnectionInterfaceRequestsInterface::EnsureChannel() returns Yours=False) then the channel dispatcher SHOULD re-dispatch the channel to its existing handler, and MUST NOT dispatch it to this client (unless it is the existing handler); the request is still deemed to have succeeded in this case.

An address book application, for example, might call ChannelDispatcherInterface::EnsureChannel() to ensure that a text channel with a particular contact is displayed to the user; it does not care whether a new channel was made. An IM client might call ChannelDispatcherInterface::EnsureChannel() in response to the user double-clicking an entry in the contact list, with itself as the Preferred_Handler; if the user already has a conversation with that contact in another application, they would expect the existing window to be presented, rather than their double-click leading to an error message. So the request should succeed, even if its Preferred_Handler is not used.

hintsAdditional information about the channel request, which will be used as the value for the resulting request's Hints property.
timeoutThe timeout in milliseconds.
Returns:

A ChannelRequest object.

QDBusPendingReply<Tp::ObjectPathList, Tp::NotDelegatedMap> Tp::Client::ChannelDispatcherInterface::DelegateChannels ( const Tp::ObjectPathList channels,
qlonglong  userActionTime,
const QString &  preferredHandler,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method DelegateChannels on the remote object.

Called by a ClientHandlerInterface to redispatch a bunch of channels it is currently handling.

For each Channel in Channels, if another ClientHandlerInterface can be found, ClientHandlerInterface::HandleChannels() will be called on it until a ClientHandlerInterface accepts it.

This method returns once all the Channels have either been accepted or rejected by Handlers.

If this method fails, the original ClientHandlerInterface is still handling the channels.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
channels

The list of channels to redispatch. The caller has to be the current ClientHandlerInterface of all of these channels

userActionTime

The time at which user action occurred, or 0 if this channels delegation is for some reason not involving user action.

This parameter is used in the same way as the corresponding parameter to CreateChannelWithHints() .

preferredHandler

Either the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred new handler for these channels, or an empty string to indicate that any handler would be acceptable. The behaviour and rationale are the same as for the corresponding parameter to CreateChannelWithHints() .

timeoutThe timeout in milliseconds.
Returns:

The list of channels which have been delegated; the caller is no longer handling these channels.

The client should remove these channels from its ClientHandlerInterface::HandledChannels property.

Returns:

The list of channels which have NOT been delegated; the caller is still handling these channels.

QDBusPendingReply Tp::Client::ChannelDispatcherInterface::PresentChannel ( const QDBusObjectPath &  channel,
qlonglong  userActionTime,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method PresentChannel on the remote object.

Equivalent of calling ChannelDispatcherInterface::EnsureChannel() with a Requested_Properties which would result in ensuring Channel.

If Channel is handled, its handler will be asked to present it the user (e.g. bring it into the foreground).

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
channel

The channel to present.

userActionTime

The time at which user action occurred, or 0 if this channel request is for some reason not involving user action.

This parameter is used in the same way as the corresponding parameter to EnsureChannelWithHints() .

timeoutThe timeout in milliseconds.
void Tp::Client::ChannelDispatcherInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00019.html0000644000175200001440000000560612000060453021626 0ustar00collabora-develusers00000000000000 roster/main.cpp
   Home · All Classes · All Namespaces · Modules · Functions · Files
roster/main.cpp
#include <TelepathyQt/Debug>
#include <TelepathyQt/Types>

#include <QApplication>
#include <QDebug>
#include <QtGui>

#include "roster-window.h"

int main(int argc, char **argv)
{
    QApplication app(argc, argv);

    if (argc < 2) {
        qDebug() << "usage:" << argv[0] << "<account name, as in mc-tool list>";
        return 1;
    }

    Tp::registerTypes();
    Tp::enableDebug(true);
    Tp::enableWarnings(true);

    QString accountPath = QLatin1String(argv[1]);
    RosterWindow w(accountPath);
    w.show();

    return app.exec();
}


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00434_source.html0000644000175200001440000001470412000060453023206 0ustar00collabora-develusers00000000000000 account-set.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
account-set.h
00001 
00023 #ifndef _TelepathyQt_account_set_h_HEADER_GUARD_
00024 #define _TelepathyQt_account_set_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Filter>
00031 #include <TelepathyQt/Object>
00032 #include <TelepathyQt/Types>
00033 
00034 #include <QList>
00035 #include <QString>
00036 #include <QVariantMap>
00037 
00038 namespace Tp
00039 {
00040 
00041 class TP_QT_EXPORT AccountSet : public Object
00042 {
00043     Q_OBJECT
00044     Q_DISABLE_COPY(AccountSet)
00045     Q_PROPERTY(AccountManagerPtr accountManager READ accountManager)
00046     Q_PROPERTY(AccountFilterConstPtr filter READ filter)
00047     Q_PROPERTY(QList<AccountPtr> accounts READ accounts)
00048 
00049 public:
00050     AccountSet(const AccountManagerPtr &accountManager,
00051             const AccountFilterConstPtr &filter);
00052     AccountSet(const AccountManagerPtr &accountManager,
00053             const QVariantMap &filter);
00054     virtual ~AccountSet();
00055 
00056     AccountManagerPtr accountManager() const;
00057 
00058     AccountFilterConstPtr filter() const;
00059 
00060     QList<AccountPtr> accounts() const;
00061 
00062 Q_SIGNALS:
00063     void accountAdded(const Tp::AccountPtr &account);
00064     void accountRemoved(const Tp::AccountPtr &account);
00065 
00066 private Q_SLOTS:
00067     TP_QT_NO_EXPORT void onNewAccount(const Tp::AccountPtr &account);
00068     TP_QT_NO_EXPORT void onAccountRemoved(const Tp::AccountPtr &account);
00069     TP_QT_NO_EXPORT void onAccountChanged(const Tp::AccountPtr &account);
00070 
00071 private:
00072     struct Private;
00073     friend struct Private;
00074     Private *mPriv;
00075 };
00076 
00077 } // Tp
00078 
00079 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00055.html0000644000175200001440000006650012000060453021626 0ustar00collabora-develusers00000000000000 Tp::Client::AuthenticationTLSCertificateInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Public Slots | Signals | Public Member Functions | Static Public Member Functions | Protected Member Functions
Tp::Client::AuthenticationTLSCertificateInterface Class Reference

#include <TelepathyQt/TLSCertificate>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Authentication.TLSCertificate".


Constructor & Destructor Documentation

Tp::Client::AuthenticationTLSCertificateInterface::AuthenticationTLSCertificateInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a AuthenticationTLSCertificateInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::AuthenticationTLSCertificateInterface::AuthenticationTLSCertificateInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a AuthenticationTLSCertificateInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a AuthenticationTLSCertificateInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a AuthenticationTLSCertificateInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a AuthenticationTLSCertificateInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Authentication.TLSCertificate", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property State of type uint.

The current state of this certificate. State change notifications happen by means of the Accepted and Rejected signals.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Rejections of type Tp::TLSCertificateRejectionList.

If the State is Rejected, an array of TLS_Certificate_Rejection structures containing the reason why the certificate is rejected.

If the State is not Rejected, this property is not meaningful, and SHOULD be set to an empty array.

The first rejection in the list MAY be assumed to be the most important; if the array contains more than one element, the CM MAY either use the values after the first, or ignore them.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property CertificateType of type QString.

The type of this TLS certificate (e.g. 'x509' or 'pgp'). This property is immutable

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property CertificateChainData of type Tp::ByteArrayList.

One or more TLS certificates forming a trust chain, each encoded as specified by Certificate_Data.

The first certificate in the chain MUST be the server certificate, followed by the issuer's certificate, followed by the issuer's issuer and so on.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::AuthenticationTLSCertificateInterface::Accept ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method Accept on the remote object.

Accepts this certificate, i.e. marks it as verified.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::AuthenticationTLSCertificateInterface::Reject ( const Tp::TLSCertificateRejectionList rejections,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method Reject on the remote object.

Rejects this certificate.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
rejections

The new value of the Rejections property.

This MUST NOT be an empty array.

timeoutThe timeout in milliseconds.

Represents the signal Accepted on the remote object.

The State of this certificate has changed to Accepted.

Represents the signal Rejected on the remote object.

The State of this certificate has changed to Rejected.

Parameters:
rejectionsThe new value of the Rejections property.
void Tp::Client::AuthenticationTLSCertificateInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00187.html0000644000175200001440000010675112000060453021637 0ustar00collabora-develusers00000000000000 Tp::ConnectionManager Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Member Functions | Properties
Tp::ConnectionManager Class Reference

The ConnectionManager class represents a Telepathy connection manager. More...

#include <TelepathyQt/ConnectionManager>

Inherits Tp::StatelessDBusProxy, and Tp::OptionalInterfaceFactory< ConnectionManager >.

List of all members.

Public Member Functions

Static Public Member Functions

Static Public Attributes

Protected Member Functions

Properties


Detailed Description

The ConnectionManager class represents a Telepathy connection manager.

Connection managers allow connections to be made on one or more protocols.

Most client applications should use this functionality via the AccountManager, to allow connections to be shared between client applications.


Constructor & Destructor Documentation

Class destructor.

Tp::ConnectionManager::ConnectionManager ( const QDBusConnection &  bus,
const QString &  name,
const ConnectionFactoryConstPtr &  connectionFactory,
const ChannelFactoryConstPtr &  channelFactory,
const ContactFactoryConstPtr &  contactFactory 
) [protected]

Construct a new ConnectionManager object using the given bus.

Parameters:
busQDBusConnection to use.
nameName of the connection manager.

Member Function Documentation

ConnectionManagerPtr Tp::ConnectionManager::create ( const QDBusConnection &  bus,
const QString &  name 
) [static]

Create a new ConnectionManager object.

The instance will use a connection factory creating Tp::Connection objects with no features ready, and a channel factory creating stock Telepathy-Qt channel subclasses, as appropriate, with no features ready.

Parameters:
busQDBusConnection to use.
nameName of the connection manager.
Returns:
A ConnectionManagerPtr object pointing to the newly created ConnectionManager object.
ConnectionManagerPtr Tp::ConnectionManager::create ( const QString &  name,
const ConnectionFactoryConstPtr &  connectionFactory = ConnectionFactory::create(QDBusConnection::sessionBus()),
const ChannelFactoryConstPtr &  channelFactory = ChannelFactory::create(QDBusConnection::sessionBus()),
const ContactFactoryConstPtr &  contactFactory = ContactFactory::create() 
) [static]

Create a new ConnectionManager using QDBusConnection::sessionBus() and the given factories.

The channel factory is passed to any Connection objects created by this manager object. In fact, they're not used directly by ConnectionManager at all.

A warning is printed if the factories are for a bus different from QDBusConnection::sessionBus().

Parameters:
nameName of the connection manager.
connectionFactoryThe connection factory to use.
channelFactoryThe channel factory to use.
contactFactoryThe contact factory to use.
Returns:
A ConnectionManagerPtr object pointing to the newly created ConnectionManager object.
ConnectionManagerPtr Tp::ConnectionManager::create ( const QDBusConnection &  bus,
const QString &  name,
const ConnectionFactoryConstPtr &  connectionFactory,
const ChannelFactoryConstPtr &  channelFactory,
const ContactFactoryConstPtr &  contactFactory = ContactFactory::create() 
) [static]

Create a new ConnectionManager using the given bus and the given factories.

The channel factory is passed to any Connection objects created by this manager object. In fact, they're not used directly by ConnectionManager at all.

A warning is printed if the factories are for a bus different from QDBusConnection::sessionBus().

Parameters:
busQDBusConnection to use.
nameName of the connection manager.
connectionFactoryThe connection factory to use.
channelFactoryThe channel factory to use.
contactFactoryThe contact factory to use.
Returns:
A ConnectionManagerPtr object pointing to the newly created ConnectionManager object.
QString Tp::ConnectionManager::name ( ) const
ConnectionFactoryConstPtr Tp::ConnectionManager::connectionFactory ( ) const

Return the connection factory used by this manager.

Only read access is provided. This allows constructing object instances and examining the object construction settings, but not changing settings. Allowing changes would lead to tricky situations where objects constructed at different times by the manager would have unpredictably different construction settings (eg. subclass).

Returns:
A read-only pointer to the ConnectionFactory object.
ChannelFactoryConstPtr Tp::ConnectionManager::channelFactory ( ) const

Return the channel factory used by this manager.

Only read access is provided. This allows constructing object instances and examining the object construction settings, but not changing settings. Allowing changes would lead to tricky situations where objects constructed at different times by the manager would have unpredictably different construction settings (eg. subclass).

Returns:
A read-only pointer to the ChannelFactory object.
ContactFactoryConstPtr Tp::ConnectionManager::contactFactory ( ) const

Return the contact factory used by this manager.

Only read access is provided. This allows constructing object instances and examining the object construction settings, but not changing settings. Allowing changes would lead to tricky situations where objects constructed at different times by the manager would have unpredictably different construction settings (eg. subclass).

Returns:
A read-only pointer to the ContactFactory object.
bool Tp::ConnectionManager::hasProtocol ( const QString &  protocolName) const

Return whether this connection manager implements the protocol specified by protocolName.

This method requires ConnectionManager::FeatureCore to be ready.

Returns:
true if the protocol is supported, false otherwise.
See also:
protocol(), protocols()
ProtocolInfo Tp::ConnectionManager::protocol ( const QString &  protocolName) const

Return the ProtocolInfo object for the protocol specified by protocolName.

This method requires ConnectionManager::FeatureCore to be ready.

Parameters:
protocolNameThe name of the protocol.
Returns:
A ProtocolInfo object which will return for ProtocolInfo::isValid() if the protocol specified by protocolName is not supported.
See also:
hasProtocol()
PendingStringList * Tp::ConnectionManager::listNames ( const QDBusConnection &  bus = QDBusConnection::sessionBus()) [static]

Return a pending operation from which a list of all installed connection manager short names (such as "gabble" or "haze") can be retrieved if it succeeds.

Returns:
A PendingStringList which will emit PendingStringList::finished when this object has finished or failed getting the connection manager names.

Return the Client::ConnectionManagerInterface for this ConnectionManager. This method is protected since the convenience methods provided by this class should generally be used instead of calling D-Bus methods directly.

Returns:
A pointer to the existing Client::ConnectionManagerInterface for this ConnectionManager object.

Member Data Documentation

Feature representing the core that needs to become ready to make the ConnectionManager object usable.

Note that this feature must be enabled in order to use most ConnectionManager methods. See specific methods documentation for more details.

When calling isReady(), becomeReady(), this feature is implicitly added to the requested features.


Property Documentation

Return the short name of the connection manager (e.g. "gabble").

Returns:
The name of the connection manager.

Return a list of strings identifying the protocols supported by this connection manager, as described in the Telepathy specification (e.g. "jabber").

These identifiers are not intended to be displayed to users directly; user interfaces are responsible for mapping them to localized strings.

This method requires ConnectionManager::FeatureCore to be ready.

Returns:
A list of supported protocols.

Return a list of protocols info for this connection manager.

Note that the returned ProtocolInfoList contents should not be freed.

This method requires ConnectionManager::FeatureCore to be ready.

Returns:
A list of ṔrotocolInfo.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00235.html0000644000175200001440000001565012000060453021626 0ustar00collabora-develusers00000000000000 Tp::FunctorCaller1< Functor, R, Arg1 > Struct Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Public Types | Public Member Functions | Static Public Member Functions
Tp::FunctorCaller1< Functor, R, Arg1 > Struct Template Reference

#include </home/collabora-devel/kde/src/telepathy-qt4/TelepathyQt/callbacks.h>

Inherits Tp::BaseFunctorCaller< FunctorCaller1< Functor, R, Arg1 >, Functor >.

List of all members.

Public Types

Public Member Functions

Static Public Member Functions

template<class Functor, class R, class Arg1>
struct Tp::FunctorCaller1< Functor, R, Arg1 >


Member Typedef Documentation

template<class Functor , class R , class Arg1 >
typedef R Tp::FunctorCaller1< Functor, R, Arg1 >::ResultType
template<class Functor , class R , class Arg1 >
typedef R(* Tp::FunctorCaller1< Functor, R, Arg1 >::InvokeType)(AbstractFunctorCaller *, Arg1)

Constructor & Destructor Documentation

template<class Functor , class R , class Arg1 >
Tp::FunctorCaller1< Functor, R, Arg1 >::FunctorCaller1 ( const Functor &  functor) [inline, explicit]

Member Function Documentation

template<class Functor , class R , class Arg1 >
static ResultType Tp::FunctorCaller1< Functor, R, Arg1 >::invoke ( AbstractFunctorCaller call,
Arg1  a1 
) [inline, static]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00472_source.html0000644000175200001440000000467712000060453023220 0ustar00collabora-develusers00000000000000 channel-dispatcher.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
channel-dispatcher.h
00001 
00023 #ifndef _TelepathyQt_channel_dispatcher_h_HEADER_GUARD_
00024 #define _TelepathyQt_channel_dispatcher_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/_gen/cli-channel-dispatcher.h>
00031 
00032 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/nav_f.png0000644000175200001440000000023712000060453021720 0ustar00collabora-develusers00000000000000PNG  IHDR8fIDATxIB1 Q;uۿ@h; a !ЋVC |c3sFFPS{PSsVlNF.F.2_UH mIENDB`telepathy-qt-0.9.3/doc/html/a00116.html0000644000175200001440000001176112000060453021623 0ustar00collabora-develusers00000000000000 Tp::ChannelInfo Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Public Attributes
Tp::ChannelInfo Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

A struct representing a channel, as returned by ListChannels on the Connection interface.


Member Data Documentation

QDBusObjectPath Tp::ChannelInfo::channel

The object path of the channel, which is on the same bus name as the connection

The channel's type

The type of the handle that the channel communicates with, or Handle_Type_None if there is no associated handle

The handle that the channel communicates with, or 0 if there is no associated handle


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00909.html0000644000175200001440000001324612000060453021635 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingStringList Member List
This is the complete list of members for Tp::PendingStringList, including all inherited members.
errorMessage() const Tp::PendingOperation
errorName() const Tp::PendingOperation
finished(Tp::PendingOperation *operation)Tp::PendingOperation [signal]
isError() const Tp::PendingOperation
isFinished() const Tp::PendingOperation
isValid() const Tp::PendingOperation
object() const Tp::PendingOperation [protected]
PendingOperation(const SharedPtr< RefCounted > &object)Tp::PendingOperation [protected]
PendingStringList(const SharedPtr< RefCounted > &object)Tp::PendingStringList
PendingStringList(QDBusPendingCall call, const SharedPtr< RefCounted > &object)Tp::PendingStringList
result() const Tp::PendingStringList
setFinished()Tp::PendingOperation [protected, slot]
setFinishedWithError(const QString &name, const QString &message)Tp::PendingOperation [protected, slot]
setFinishedWithError(const QDBusError &error)Tp::PendingOperation [protected, slot]
setResult(const QStringList &result)Tp::PendingStringList [protected]
~PendingOperation()Tp::PendingOperation [virtual]
~PendingStringList()Tp::PendingStringList


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00362.html0000644000175200001440000001305512000060453021624 0ustar00collabora-develusers00000000000000 Tp::RefCounted Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Classes | Public Member Functions
Tp::RefCounted Class Reference

The RefCounted class is a base class for shared objects used by SharedPtr. More...

#include <TelepathyQt/RefCounted>

Inherited by Tp::Filter< Account >, Tp::MethodInvocationContext<>, Tp::AbstractClient, Tp::ConnectionLowlevel, Tp::ConnectionManagerLowlevel, Tp::ContactFactory, Tp::ContactMessenger, Tp::DBusProxyFactory, Tp::Filter< T >, Tp::MethodInvocationContext< T1, T2, T3, T4, T5, T6, T7, T8 >, Tp::Object, Tp::Profile, Tp::SimpleCallObserver, Tp::SimpleObserver, Tp::SimpleStreamTubeHandler::InvocationData, Tp::SimpleTextObserver, Tp::StreamTubeClient, and Tp::StreamTubeServer.

List of all members.

Classes

Public Member Functions


Detailed Description

The RefCounted class is a base class for shared objects used by SharedPtr.

See Shared Pointer Usage


Constructor & Destructor Documentation

virtual Tp::RefCounted::~RefCounted ( ) [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00583_source.html0000644000175200001440000001724112000060453023212 0ustar00collabora-develusers00000000000000 generic-property-filter.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
generic-property-filter.h
00001 
00023 #ifndef _TelepathyQt_generic_property_filter_h_HEADER_GUARD_
00024 #define _TelepathyQt_generic_property_filter_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Filter>
00031 #include <TelepathyQt/Types>
00032 
00033 namespace Tp
00034 {
00035 
00036 template <class T>
00037 class GenericPropertyFilter : public Filter<T>
00038 {
00039 public:
00040     inline virtual ~GenericPropertyFilter() { }
00041 
00042     inline virtual bool isValid() const { return true; }
00043 
00044     inline virtual bool matches(const SharedPtr<T> &t) const
00045     {
00046         for (QVariantMap::const_iterator i = mFilter.constBegin();
00047                 i != mFilter.constEnd(); ++i) {
00048             QString propertyName = i.key();
00049             QVariant propertyValue = i.value();
00050 
00051             if (t->property(propertyName.toLatin1().constData()) != propertyValue) {
00052                 return false;
00053             }
00054         }
00055 
00056         return true;
00057     }
00058 
00059     inline QVariantMap filter() const { return mFilter; }
00060 
00061     inline void addProperty(const QString &propertyName, const QVariant &propertyValue)
00062     {
00063         mFilter.insert(propertyName, propertyValue);
00064     }
00065 
00066     inline void setProperties(const QVariantMap &filter) { mFilter = filter; }
00067 
00068 protected:
00069     inline GenericPropertyFilter() : Filter<T>() { }
00070 
00071 private:
00072     QVariantMap mFilter;
00073 };
00074 
00075 } // Tp
00076 
00077 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00563_source.html0000644000175200001440000000457112000060453023212 0ustar00collabora-develusers00000000000000 dbus.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
dbus.h
00001 
00023 #ifndef _TelepathyQt_dbus_h_HEADER_GUARD_
00024 #define _TelepathyQt_dbus_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00052 #include <TelepathyQt/_gen/cli-dbus.h>
00053 
00054 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00599_source.html0000644000175200001440000002052312000060453023216 0ustar00collabora-develusers00000000000000 location-info.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
location-info.h
00001 
00023 #ifndef _TelepathyQt_location_info_h_HEADER_GUARD_
00024 #define _TelepathyQt_location_info_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Global>
00031 
00032 #include <QDateTime>
00033 #include <QSharedDataPointer>
00034 #include <QString>
00035 #include <QVariantMap>
00036 
00037 namespace Tp
00038 {
00039 
00040 class TP_QT_EXPORT LocationInfo
00041 {
00042 public:
00043     LocationInfo();
00044     LocationInfo(const QVariantMap &location);
00045     LocationInfo(const LocationInfo &other);
00046     virtual ~LocationInfo();
00047 
00048     bool isValid() const { return mPriv.constData() != 0; }
00049 
00050     LocationInfo &operator=(const LocationInfo &other);
00051 
00052     QString countryCode() const;
00053     QString country() const;
00054     QString region() const;
00055     QString locality() const;
00056     QString area() const;
00057     QString postalCode() const;
00058     QString street() const;
00059 
00060     QString building() const;
00061     QString floor() const;
00062     QString room() const;
00063     QString text() const;
00064     QString description() const;
00065     QString uri() const;
00066 
00067     QString language() const;
00068 
00069     double latitude() const;
00070     double longitude() const;
00071     double altitude() const;
00072     double accuracy() const;
00073 
00074     double speed() const;
00075     double bearing() const;
00076 
00077     QDateTime timestamp() const;
00078 
00079     QVariantMap allDetails() const;
00080 
00081 private:
00082     friend class Contact;
00083 
00084     TP_QT_NO_EXPORT void updateData(const QVariantMap &location);
00085 
00086     struct Private;
00087     friend struct Private;
00088     QSharedDataPointer<Private> mPriv;
00089 };
00090 
00091 } // Tp
00092 
00093 Q_DECLARE_METATYPE(Tp::LocationInfo);
00094 
00095 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00497_source.html0000644000175200001440000003605112000060453023216 0ustar00collabora-develusers00000000000000 cli-channel-dispatch-operation.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-channel-dispatch-operation.h
00001 /*
00002  * This file contains D-Bus client proxy classes generated by qt-client-gen.py.
00003  *
00004  * This file can be distributed under the same terms as the specification from
00005  * which it was generated.
00006  */
00007 
00008 #ifndef IN_TP_QT_HEADER
00009 #error IN_TP_QT_HEADER
00010 #endif
00011 
00012 #include <TelepathyQt/Types>
00013 
00014 #include <QtGlobal>
00015 
00016 #include <QString>
00017 #include <QObject>
00018 #include <QVariant>
00019 
00020 #include <QDBusPendingReply>
00021 
00022 #include <TelepathyQt/AbstractInterface>
00023 #include <TelepathyQt/DBusProxy>
00024 #include <TelepathyQt/Global>
00025 
00026 namespace Tp
00027 {
00028 class PendingVariant;
00029 class PendingOperation;
00030 }
00031 
00032 namespace Tp
00033 {
00034 namespace Client
00035 {
00036 
00044 class TP_QT_EXPORT ChannelDispatchOperationInterface : public Tp::AbstractInterface
00045 {
00046     Q_OBJECT
00047 
00048 public:
00055     static inline QLatin1String staticInterfaceName()
00056     {
00057         return QLatin1String("org.freedesktop.Telepathy.ChannelDispatchOperation");
00058     }
00059 
00067     ChannelDispatchOperationInterface(
00068         const QString& busName,
00069         const QString& objectPath,
00070         QObject* parent = 0
00071     );
00072 
00081     ChannelDispatchOperationInterface(
00082         const QDBusConnection& connection,
00083         const QString& busName,
00084         const QString& objectPath,
00085         QObject* parent = 0
00086     );
00087 
00094     ChannelDispatchOperationInterface(Tp::DBusProxy *proxy);
00095 
00106     inline Tp::PendingVariant *requestPropertyInterfaces() const
00107     {
00108         return internalRequestProperty(QLatin1String("Interfaces"));
00109     }
00110 
00123     inline Tp::PendingVariant *requestPropertyConnection() const
00124     {
00125         return internalRequestProperty(QLatin1String("Connection"));
00126     }
00127 
00138     inline Tp::PendingVariant *requestPropertyAccount() const
00139     {
00140         return internalRequestProperty(QLatin1String("Account"));
00141     }
00142 
00154     inline Tp::PendingVariant *requestPropertyChannels() const
00155     {
00156         return internalRequestProperty(QLatin1String("Channels"));
00157     }
00158 
00176     inline Tp::PendingVariant *requestPropertyPossibleHandlers() const
00177     {
00178         return internalRequestProperty(QLatin1String("PossibleHandlers"));
00179     }
00180 
00187     Tp::PendingVariantMap *requestAllProperties() const
00188     {
00189         return internalRequestAllProperties();
00190     }
00191 
00192 public Q_SLOTS:
00238     inline QDBusPendingReply<> HandleWith(const QString& handler, int timeout = -1)
00239     {
00240         if (!invalidationReason().isEmpty()) {
00241             return QDBusPendingReply<>(QDBusMessage::createError(
00242                 invalidationReason(),
00243                 invalidationMessage()
00244             ));
00245         }
00246 
00247         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00248                 this->staticInterfaceName(), QLatin1String("HandleWith"));
00249         callMessage << QVariant::fromValue(handler);
00250         return this->connection().asyncCall(callMessage, timeout);
00251     }
00252 
00306     inline QDBusPendingReply<> Claim(int timeout = -1)
00307     {
00308         if (!invalidationReason().isEmpty()) {
00309             return QDBusPendingReply<>(QDBusMessage::createError(
00310                 invalidationReason(),
00311                 invalidationMessage()
00312             ));
00313         }
00314 
00315         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00316                 this->staticInterfaceName(), QLatin1String("Claim"));
00317         return this->connection().asyncCall(callMessage, timeout);
00318     }
00319 
00350     inline QDBusPendingReply<> HandleWithTime(const QString& handler, qlonglong userActionTime, int timeout = -1)
00351     {
00352         if (!invalidationReason().isEmpty()) {
00353             return QDBusPendingReply<>(QDBusMessage::createError(
00354                 invalidationReason(),
00355                 invalidationMessage()
00356             ));
00357         }
00358 
00359         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00360                 this->staticInterfaceName(), QLatin1String("HandleWithTime"));
00361         callMessage << QVariant::fromValue(handler) << QVariant::fromValue(userActionTime);
00362         return this->connection().asyncCall(callMessage, timeout);
00363     }
00364 
00365 Q_SIGNALS:
00411     void ChannelLost(const QDBusObjectPath& channel, const QString& error, const QString& message);
00412 
00455     void Finished();
00456 
00457 protected:
00458     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
00459 };
00460 }
00461 }
00462 Q_DECLARE_METATYPE(Tp::Client::ChannelDispatchOperationInterface*)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00461_source.html0000644000175200001440000002261612000060453023207 0ustar00collabora-develusers00000000000000 capabilities-base.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
capabilities-base.h
00001 
00023 #ifndef _TelepathyQt_capabilities_base_h_HEADER_GUARD_
00024 #define _TelepathyQt_capabilities_base_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/RequestableChannelClassSpec>
00031 #include <TelepathyQt/Types>
00032 
00033 namespace Tp
00034 {
00035 
00036 class TP_QT_EXPORT CapabilitiesBase
00037 {
00038 public:
00039     CapabilitiesBase();
00040     CapabilitiesBase(const CapabilitiesBase &other);
00041     virtual ~CapabilitiesBase();
00042 
00043     CapabilitiesBase &operator=(const CapabilitiesBase &other);
00044 
00045     RequestableChannelClassSpecList allClassSpecs() const;
00046 
00047     bool isSpecificToContact() const;
00048 
00049     bool textChats() const;
00050 
00051     bool audioCalls() const;
00052     bool videoCalls() const;
00053     bool videoCallsWithAudio() const;
00054     bool upgradingCalls() const;
00055 
00056     TP_QT_DEPRECATED bool streamedMediaCalls() const;
00057     TP_QT_DEPRECATED bool streamedMediaAudioCalls() const;
00058     TP_QT_DEPRECATED bool streamedMediaVideoCalls() const;
00059     TP_QT_DEPRECATED bool streamedMediaVideoCallsWithAudio() const;
00060     TP_QT_DEPRECATED bool upgradingStreamedMediaCalls() const;
00061 
00062     bool fileTransfers() const;
00063 
00064     // later: FIXME TODO why not now?
00065     // QList<FileHashType> fileTransfersRequireHash() const;
00066 
00067 protected:
00068     CapabilitiesBase(bool specificToContact);
00069     CapabilitiesBase(const RequestableChannelClassList &rccs,
00070             bool specificToContact);
00071     CapabilitiesBase(const RequestableChannelClassSpecList &rccSpecs,
00072             bool specificToContact);
00073 
00074     virtual void updateRequestableChannelClasses(
00075             const RequestableChannelClassList &rccs);
00076 
00077 private:
00078     friend class Connection;
00079     friend class Contact;
00080 
00081     struct Private;
00082     friend struct Private;
00083     QSharedDataPointer<Private> mPriv;
00084 };
00085 
00086 } // Tp
00087 
00088 Q_DECLARE_METATYPE(Tp::CapabilitiesBase);
00089 
00090 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00923.html0000644000175200001440000000640112000060453021624 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ReadinessHelper::Introspectable Member List
This is the complete list of members for Tp::ReadinessHelper::Introspectable, including all inherited members.
Introspectable()Tp::ReadinessHelper::Introspectable
Introspectable(const QSet< uint > &makesSenseForStatuses, const Features &dependsOnFeatures, const QStringList &dependsOnInterfaces, IntrospectFunc introspectFunc, void *introspectFuncData, bool critical=false)Tp::ReadinessHelper::Introspectable
Introspectable(const Introspectable &other)Tp::ReadinessHelper::Introspectable
operator=(const Introspectable &other)Tp::ReadinessHelper::Introspectable
~Introspectable()Tp::ReadinessHelper::Introspectable


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/files.html0000644000175200001440000006073512000060453022122 0ustar00collabora-develusers00000000000000 File List
   Home · All Classes · All Namespaces · Modules · Functions · Files
File List
Here is a list of all files with brief descriptions:
abstract-adaptor.h [code]
abstract-client.h [code]
abstract-interface.h [code]
account-capability-filter.h [code]
account-factory.h [code]
account-filter.h [code]
account-manager.h [code]
account-property-filter.h [code]
account-set.h [code]
account.h [code]
and-filter.h [code]
avatar.h [code]
base-connection-manager.h [code]
base-connection.h [code]
base-protocol.h [code]
call-channel.h [code]
call-content-media-description.h [code]
call-content.h [code]
call-stream-endpoint.h [code]
call-stream.h [code]
callbacks.h [code]
capabilities-base.h [code]
captcha-authentication.h [code]
captcha.h [code]
channel-class-features.h [code]
channel-class-spec.h [code]
channel-dispatch-operation.h [code]
channel-dispatcher.h [code]
channel-factory.h [code]
channel-request.h [code]
channel.h [code]
Farsight/channel.h [code]
Farstream/channel.h [code]
cli-account-body.hpp [code]
cli-account-manager-body.hpp [code]
cli-account-manager.h [code]
cli-account.h [code]
cli-call-content-body.hpp [code]
cli-call-content-media-description-body.hpp [code]
cli-call-content-media-description.h [code]
cli-call-content.h [code]
cli-call-stream-body.hpp [code]
cli-call-stream-endpoint-body.hpp [code]
cli-call-stream-endpoint.h [code]
cli-call-stream.h [code]
cli-channel-body.hpp [code]
cli-channel-dispatch-operation-body.hpp [code]
cli-channel-dispatch-operation.h [code]
cli-channel-dispatcher-body.hpp [code]
cli-channel-dispatcher.h [code]
cli-channel-request-body.hpp [code]
cli-channel-request.h [code]
cli-channel.h [code]
cli-client-body.hpp [code]
cli-client.h [code]
cli-connection-body.hpp [code]
cli-connection-manager-body.hpp [code]
cli-connection-manager.h [code]
cli-connection.h [code]
cli-dbus-body.hpp [code]
cli-dbus.h [code]
cli-debug-receiver-body.hpp [code]
cli-debug-receiver.h [code]
cli-media-session-handler-body.hpp [code]
cli-media-session-handler.h [code]
cli-media-stream-handler-body.hpp [code]
cli-media-stream-handler.h [code]
cli-properties-body.hpp [code]
cli-properties.h [code]
cli-tls-certificate-body.hpp [code]
cli-tls-certificate.h [code]
client-registrar.h [code]
client.h [code]
connection-capabilities.h [code]
connection-factory.h [code]
connection-lowlevel.h [code]
connection-manager-lowlevel.h [code]
connection-manager.h [code]
connection.h [code]
src/telepathy-qt4/TelepathyQt/constants.h [code]
build/telepathy-qt4/TelepathyQt/_gen/constants.h [code]
contact-capabilities.h [code]
contact-factory.h [code]
contact-manager.h [code]
contact-messenger.h [code]
contact-search-channel.h [code]
contact.h [code]
dbus-error.h [code]
dbus-object.h [code]
dbus-proxy-factory.h [code]
dbus-proxy.h [code]
dbus-service.h [code]
dbus-tube-channel.h [code]
dbus.h [code]
debug-receiver.h [code]
debug.h [code]
feature.h [code]
file-transfer-channel-creation-properties.h [code]
file-transfer-channel.h [code]
filter.h [code]
fixed-feature-factory.h [code]
functors.h [code]
generic-capability-filter.h [code]
generic-property-filter.h [code]
Farsight/global.h [code]
Farstream/global.h [code]
global.h [code]
handled-channel-notifier.h [code]
incoming-dbus-tube-channel.h [code]
incoming-file-transfer-channel.h [code]
incoming-stream-tube-channel.h [code]
key-file.h [code]
location-info.h [code]
manager-file.h [code]
media-session-handler.h [code]
media-stream-handler.h [code]
message-content-part.h [code]
message.h [code]
method-invocation-context.h [code]
not-filter.h [code]
object.h [code]
optional-interface-factory.h [code]
or-filter.h [code]
outgoing-dbus-tube-channel.h [code]
outgoing-file-transfer-channel.h [code]
outgoing-stream-tube-channel.h [code]
pending-account.h [code]
pending-captchas.h [code]
pending-channel-request.h [code]
pending-channel.h [code]
pending-connection.h [code]
pending-contact-attributes.h [code]
pending-contact-info.h [code]
pending-contacts.h [code]
pending-dbus-tube-connection.h [code]
pending-debug-message-list.h [code]
pending-handles.h [code]
pending-operation.h [code]
pending-ready.h [code]
pending-send-message.h [code]
pending-stream-tube-connection.h [code]
pending-string-list.h [code]
pending-string.h [code]
pending-variant-map.h [code]
pending-variant.h [code]
presence.h [code]
profile-manager.h [code]
profile.h [code]
properties.h [code]
protocol-info.h [code]
protocol-parameter.h [code]
readiness-helper.h [code]
ready-object.h [code]
referenced-handles.h [code]
requestable-channel-class-spec.h [code]
room-list-channel.h [code]
server-authentication-channel.h [code]
service-types.h [code]
shared-ptr.h [code]
simple-call-observer.h [code]
simple-observer.h [code]
simple-pending-operations.h [code]
simple-stream-tube-handler.h [code]
simple-text-observer.h [code]
stream-tube-channel.h [code]
stream-tube-client.h [code]
stream-tube-server.h [code]
streamed-media-channel.h [code]
test-backdoors.h [code]
text-channel.h [code]
tls-certificate.h [code]
tube-channel.h [code]
types-body.hpp [code]
src/telepathy-qt4/TelepathyQt/types.h [code]
build/telepathy-qt4/TelepathyQt/_gen/types.h [code]
utils.h [code]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00387.html0000644000175200001440000004307712000060453021642 0ustar00collabora-develusers00000000000000 Tp::SimpleTextObserver Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Signals | Public Member Functions | Static Public Member Functions
Tp::SimpleTextObserver Class Reference

The SimpleTextObserver class provides an easy way to track sent/received text messages in an account and can be optionally filtered by a contact. More...

#include <TelepathyQt/SimpleTextObserver>

Inherits Tp::RefCounted.

List of all members.

Signals

Public Member Functions

Static Public Member Functions


Detailed Description

The SimpleTextObserver class provides an easy way to track sent/received text messages in an account and can be optionally filtered by a contact.


Constructor & Destructor Documentation

Class destructor.


Member Function Documentation

SimpleTextObserverPtr Tp::SimpleTextObserver::create ( const AccountPtr &  account) [static]

Create a new SimpleTextObserver object.

Events will be signalled for all messages sent/received by all contacts in account.

Parameters:
accountThe account used to listen to events.
Returns:
An SimpleTextObserverPtr object pointing to the newly created SimpleTextObserver object.
SimpleTextObserverPtr Tp::SimpleTextObserver::create ( const AccountPtr &  account,
const ContactPtr &  contact 
) [static]

Create a new SimpleTextObserver object.

If contact is not null, events will be signalled for all messages sent/received by contact, otherwise this method works the same as create(const Tp::AccountPtr &).

Parameters:
accountThe account used to listen to events.
contactThe contact used to filter events.
Returns:
An SimpleTextObserverPtr object pointing to the newly created SimpleTextObserver object.
SimpleTextObserverPtr Tp::SimpleTextObserver::create ( const AccountPtr &  account,
const QString &  contactIdentifier 
) [static]

Create a new SimpleTextObserver object.

If contactIdentifier is non-empty, events will be signalled for all messages sent/received by a contact identified by contactIdentifier, otherwise this method works the same as create(const Tp::AccountPtr &).

Parameters:
accountThe account used to listen to events.
contactIdentifierThe identifier of the contact used to filter events.
Returns:
An SimpleTextObserverPtr object pointing to the newly created SimpleTextObserver object.
AccountPtr Tp::SimpleTextObserver::account ( ) const

Return the account used to listen to events.

Returns:
A pointer to the Account object.

Return the identifier of the contact used to filter events, or an empty string if none was provided at construction.

Returns:
The identifier of the contact.
QList< TextChannelPtr > Tp::SimpleTextObserver::textChats ( ) const

Return the list of text chats currently being observed.

Returns:
A list of pointers to TextChannel objects.
void Tp::SimpleTextObserver::messageSent ( const Tp::Message message,
Tp::MessageSendingFlags  flags,
const QString &  sentMessageToken,
const Tp::TextChannelPtr &  channel 
) [signal]

Emitted whenever a text message on account() is sent. If contactIdentifier() is non-empty, only messages sent to the contact identified by it will be signalled.

Parameters:
messageThe message sent.
flagsThe message flags,
sentMessageTokenThe message token.
channelThe channel which received the message.
void Tp::SimpleTextObserver::messageReceived ( const Tp::ReceivedMessage message,
const Tp::TextChannelPtr &  channel 
) [signal]

Emitted whenever a text message on account() is received. If contactIdentifier() is non-empty, only messages received by the contact identified by it will be signalled.

Parameters:
messageThe message received.
channelThe channel which received the message.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00103.html0000644000175200001440000001160412000060453021613 0ustar00collabora-develusers00000000000000 Tp::CaptchaAnswers Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Public Member Functions
Tp::CaptchaAnswers Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<uint, QString>, but needed to have a discrete type in the Qt type system.

A mapping of captcha IDs to answer strings.

Constructor & Destructor Documentation

Tp::CaptchaAnswers::CaptchaAnswers ( const QMap< uint, QString > &  a) [inline]

Member Function Documentation

CaptchaAnswers& Tp::CaptchaAnswers::operator= ( const QMap< uint, QString > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00498_source.html0000644000175200001440000001221012000060453023206 0ustar00collabora-develusers00000000000000 cli-channel-dispatcher-body.hpp Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-channel-dispatcher-body.hpp
00001 #define IN_TP_QT_HEADER
00002 #include "TelepathyQt/channel-dispatcher.h"
00003 
00004 namespace Tp
00005 {
00006 namespace Client
00007 {
00008 
00009 ChannelDispatcherInterface::ChannelDispatcherInterface(const QString& busName, const QString& objectPath, QObject *parent)
00010     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00011 {
00012 }
00013 
00014 ChannelDispatcherInterface::ChannelDispatcherInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00015     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00016 {
00017 }
00018 
00019 ChannelDispatcherInterface::ChannelDispatcherInterface(Tp::DBusProxy *proxy)
00020     : Tp::AbstractInterface(proxy, staticInterfaceName())
00021 {
00022 }
00023 
00024 void ChannelDispatcherInterface::invalidate(Tp::DBusProxy *proxy,
00025         const QString &error, const QString &message)
00026 {
00027 
00028     Tp::AbstractInterface::invalidate(proxy, error, message);
00029 }
00030 }
00031 }


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/installdox0000755000175200001440000000471612000060453022236 0ustar00collabora-develusers00000000000000#! %subst = ( "", ""); $quiet = 0; while ( @ARGV ) { $_ = shift @ARGV; if ( s/^-// ) { if ( /^l(.*)/ ) { $v = ($1 eq "") ? shift @ARGV : $1; ($v =~ /\/$/) || ($v .= "/"); $_ = $v; if ( /(.+)\@(.+)/ ) { if ( exists $subst{$1} ) { $subst{$1} = $2; } else { print STDERR "Unknown tag file $1 given with option -l\n"; &usage(); } } else { print STDERR "Argument $_ is invalid for option -l\n"; &usage(); } } elsif ( /^q/ ) { $quiet = 1; } elsif ( /^\?|^h/ ) { &usage(); } else { print STDERR "Illegal option -$_\n"; &usage(); } } else { push (@files, $_ ); } } foreach $sub (keys %subst) { if ( $subst{$sub} eq "" ) { print STDERR "No substitute given for tag file `$sub'\n"; &usage(); } elsif ( ! $quiet && $sub ne "_doc" && $sub ne "_cgi" ) { print "Substituting $subst{$sub} for each occurrence of tag file $sub\n"; } } if ( ! @files ) { if (opendir(D,".")) { foreach $file ( readdir(D) ) { $match = ".html"; next if ( $file =~ /^\.\.?$/ ); ($file =~ /$match/) && (push @files, $file); ($file =~ /\.svg/) && (push @files, $file); ($file =~ "navtree.js") && (push @files, $file); } closedir(D); } } if ( ! @files ) { print STDERR "Warning: No input files given and none found!\n"; } foreach $f (@files) { if ( ! $quiet ) { print "Editing: $f...\n"; } $oldf = $f; $f .= ".bak"; unless (rename $oldf,$f) { print STDERR "Error: cannot rename file $oldf\n"; exit 1; } if (open(F,"<$f")) { unless (open(G,">$oldf")) { print STDERR "Error: opening file $oldf for writing\n"; exit 1; } if ($oldf ne "tree.js") { while () { s/doxygen\=\"([^ \"\:\t\>\<]*)\:([^ \"\t\>\<]*)\" (xlink:href|href|src)=\"\2/doxygen\=\"$1:$subst{$1}\" \3=\"$subst{$1}/g; print G "$_"; } } else { while () { s/\"([^ \"\:\t\>\<]*)\:([^ \"\t\>\<]*)\", \"\2/\"$1:$subst{$1}\" ,\"$subst{$1}/g; print G "$_"; } } } else { print STDERR "Warning file $f does not exist\n"; } unlink $f; } sub usage { print STDERR "Usage: installdox [options] [html-file [html-file ...]]\n"; print STDERR "Options:\n"; print STDERR " -l tagfile\@linkName tag file + URL or directory \n"; print STDERR " -q Quiet mode\n\n"; exit 1; } telepathy-qt-0.9.3/doc/html/a00381.html0000644000175200001440000001244512000060453021627 0ustar00collabora-develusers00000000000000 Tp::SimpleContactPresences Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::SimpleContactPresences Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<uint, SimplePresence>, but needed to have a discrete type in the Qt type system.

Mapping returned by GetPresences and signalled by PresencesChanged, indicating the presence of a number of contacts.


Constructor & Destructor Documentation


Member Function Documentation

SimpleContactPresences& Tp::SimpleContactPresences::operator= ( const QMap< uint, SimplePresence > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00391.html0000644000175200001440000000712012000060453021622 0ustar00collabora-develusers00000000000000 Tp::SocketAddressIPv6 Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::SocketAddressIPv6 Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

An IPv6 address and port.


Member Data Documentation

An IPv6 address literal as specified by RFC2373 section 2.2, e.g. "2001:DB8::8:800:200C:4171".

The TCP or UDP port number.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00530_source.html0000644000175200001440000001337412000060453023205 0ustar00collabora-develusers00000000000000 connection-manager-lowlevel.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
connection-manager-lowlevel.h
00001 
00023 #ifndef _TelepathyQt_connection_manager_lowlevel_h_HEADER_GUARD_
00024 #define _TelepathyQt_connection_manager_lowlevel_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Constants>
00031 #include <TelepathyQt/Types>
00032 
00033 namespace Tp
00034 {
00035 
00036 class PendingConnection;
00037 
00038 class TP_QT_EXPORT ConnectionManagerLowlevel : public QObject, public RefCounted
00039 {
00040     Q_OBJECT
00041     Q_DISABLE_COPY(ConnectionManagerLowlevel)
00042 
00043 public:
00044     ~ConnectionManagerLowlevel();
00045 
00046     bool isValid() const;
00047     ConnectionManagerPtr connectionManager() const;
00048 
00049     PendingConnection *requestConnection(const QString &protocolName,
00050             const QVariantMap &parameters);
00051 
00052 private:
00053     friend class ConnectionManager;
00054 
00055     TP_QT_NO_EXPORT ConnectionManagerLowlevel(ConnectionManager *parent);
00056 
00057     struct Private;
00058     friend struct Private;
00059     Private *mPriv;
00060 };
00061 
00062 } // Tp
00063 
00064 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00857.html0000644000175200001440000001322312000060453021632 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::FixedFeatureFactory Member List
This is the complete list of members for Tp::FixedFeatureFactory, including all inherited members.
addFeature(const Feature &feature)Tp::FixedFeatureFactory
addFeatures(const Features &features)Tp::FixedFeatureFactory
cachedProxy(const QString &busName, const QString &objectPath) const Tp::DBusProxyFactory [protected]
dbusConnection() const Tp::DBusProxyFactory
DBusProxyFactory(const QDBusConnection &bus)Tp::DBusProxyFactory [protected]
features() const Tp::FixedFeatureFactory
featuresFor(const DBusProxyPtr &proxy) const Tp::FixedFeatureFactory [protected, virtual]
finalBusNameFrom(const QString &uniqueOrWellKnown) const =0Tp::DBusProxyFactory [protected, pure virtual]
FixedFeatureFactory(const QDBusConnection &bus)Tp::FixedFeatureFactory [protected]
initialPrepare(const DBusProxyPtr &proxy) const Tp::DBusProxyFactory [protected, virtual]
nowHaveProxy(const DBusProxyPtr &proxy) const Tp::DBusProxyFactory [protected]
readyPrepare(const DBusProxyPtr &proxy) const Tp::DBusProxyFactory [protected, virtual]
RefCounted()Tp::RefCounted [inline]
~DBusProxyFactory()Tp::DBusProxyFactory [virtual]
~FixedFeatureFactory()Tp::FixedFeatureFactory [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00329.html0000644000175200001440000001407712000060453021634 0ustar00collabora-develusers00000000000000 Tp::PendingVariant Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingVariant Class Reference

The PendingVariant class is a generic subclass of PendingOperation representing a pending D-Bus method call that returns a variant. More...

#include <TelepathyQt/PendingVariant>

Inherits Tp::PendingOperation.

List of all members.

Public Member Functions


Detailed Description

The PendingVariant class is a generic subclass of PendingOperation representing a pending D-Bus method call that returns a variant.

See Asynchronous Object Model


Constructor & Destructor Documentation

Tp::PendingVariant::PendingVariant ( QDBusPendingCall  call,
const SharedPtr< RefCounted > &  object 
)

Class destructor.


Member Function Documentation

QVariant Tp::PendingVariant::result ( ) const


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00827.html0000644000175200001440000002411212000060453021626 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ConnectionCapabilities Member List
This is the complete list of members for Tp::ConnectionCapabilities, including all inherited members.
allClassSpecs() const Tp::CapabilitiesBase
audioCalls() const Tp::CapabilitiesBase
CapabilitiesBase()Tp::CapabilitiesBase
CapabilitiesBase(const CapabilitiesBase &other)Tp::CapabilitiesBase
CapabilitiesBase(bool specificToContact)Tp::CapabilitiesBase [protected]
CapabilitiesBase(const RequestableChannelClassList &rccs, bool specificToContact)Tp::CapabilitiesBase [protected]
CapabilitiesBase(const RequestableChannelClassSpecList &rccSpecs, bool specificToContact)Tp::CapabilitiesBase [protected]
conferenceStreamedMediaCalls() const Tp::ConnectionCapabilities
conferenceStreamedMediaCallsWithInvitees() const Tp::ConnectionCapabilities
conferenceTextChatrooms() const Tp::ConnectionCapabilities
conferenceTextChatroomsWithInvitees() const Tp::ConnectionCapabilities
conferenceTextChats() const Tp::ConnectionCapabilities
conferenceTextChatsWithInvitees() const Tp::ConnectionCapabilities
ConnectionCapabilities()Tp::ConnectionCapabilities
ConnectionCapabilities(const RequestableChannelClassList &rccs)Tp::ConnectionCapabilities [protected]
ConnectionCapabilities(const RequestableChannelClassSpecList &rccSpecs)Tp::ConnectionCapabilities [protected]
contactSearches() const Tp::ConnectionCapabilities
contactSearchesWithLimit() const Tp::ConnectionCapabilities
contactSearchesWithSpecificServer() const Tp::ConnectionCapabilities
dbusTubes() const Tp::ConnectionCapabilities
fileTransfers() const Tp::CapabilitiesBase
isSpecificToContact() const Tp::CapabilitiesBase
operator=(const CapabilitiesBase &other)Tp::CapabilitiesBase
streamedMediaAudioCalls() const Tp::CapabilitiesBase
streamedMediaCalls() const Tp::CapabilitiesBase
streamedMediaVideoCalls() const Tp::CapabilitiesBase
streamedMediaVideoCallsWithAudio() const Tp::CapabilitiesBase
streamTubes() const Tp::ConnectionCapabilities
textChatrooms() const Tp::ConnectionCapabilities
textChats() const Tp::CapabilitiesBase
updateRequestableChannelClasses(const RequestableChannelClassList &rccs)Tp::CapabilitiesBase [protected, virtual]
upgradingCalls() const Tp::CapabilitiesBase
upgradingStreamedMediaCalls() const Tp::CapabilitiesBase
videoCalls() const Tp::CapabilitiesBase
videoCallsWithAudio() const Tp::CapabilitiesBase
~CapabilitiesBase()Tp::CapabilitiesBase [virtual]
~ConnectionCapabilities()Tp::ConnectionCapabilities [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00034.html0000644000175200001440000005111412000060453021616 0ustar00collabora-develusers00000000000000 Tp::AbstractClientObserver Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AbstractClientObserver Class Reference

The AbstractClientObserver class represents a Telepathy observer. More...

#include <TelepathyQt/AbstractClientObserver>

Inherits Tp::AbstractClient.

List of all members.

Classes

Public Member Functions

Protected Member Functions


Detailed Description

The AbstractClientObserver class represents a Telepathy observer.

Observers are clients that monitor the creation of new channels. This functionality can be used for things like message logging.

Observers should not modify the state of a channel except via user interaction.

Observers must not carry out actions that exactly one process must take responsibility for (e.g. acknowledging text messages, or carrying out the actual file transfer), since arbitrarily many observers can be activated for each channel. The handler is responsible for such tasks.

Handlers may, of course, delegate responsibility for these tasks to other clients (including those run as observers), but this must be done explicitly via a request from the handler to the observer.

Whenever a collection of new channels is signalled, the channel dispatcher will notify all running or activatable observers whose filter indicates that they are interested in some of the channels.

Observers are activated for all channels in which they have registered an interest - incoming, outgoing or automatically created - although of course the filter property can be set to filter specific channels.

To become an observer one should inherit AbstractClientObserver and implement the pure virtual observeChannels() method. After that the object representing the observer must be registered using ClientRegistrar::registerClient().

When new channels in which the observer has registered an interest are announced, the method observeChannels() is invoked. All observers are notified simultaneously.

Usage

Implementing an observer

 class MyObserver : public AbstractClientObserver
 {
 public:
     MyObserver(const ChannelClassSpecList &channelFilter);
     ~MyObserver() { }

     void observeChannels(const MethodInvocationContextPtr<> &context,
             const AccountPtr &account,
             const ConnectionPtr &connection,
             const QList<ChannelPtr> &channels,
             const ChannelDispatchOperationPtr &dispatchOperation,
             const QList<ChannelRequestPtr> &requestsSatisfied,
             const AbstractClientObserver::ObserverInfo &observerInfo);
 };

 MyObserver::MyObserver(const ChannelClassSpecList &channelFilter)
     : AbstractClientObserver(channelFilter)
 {
 }

 void MyObserver::observeChannels(const MethodInvocationContextPtr<> &context,
         const AccountPtr &account,
         const ConnectionPtr &connection,
         const QList<ChannelPtr> &channels,
         const ChannelDispatchOperationPtr &dispatchOperation,
         const QList<ChannelRequestPtr> &requestsSatisfied,
         const AbstractClientObserver::ObserverInfo &observerInfo)
 {
     // do something, log messages, ...

     context->setFinished();
 }

Registering an observer

 ClientRegistrar registrar = ClientRegistrar::create();
 AbstractClientPtr observer = AbstractClientPtr::dynamicCast(
         SharedPtr<MyObserver>(new MyObserver(
             ChannelClassSpecList() << ChannelClassSpec::textChat())));
 registrar->registerClient(observer, "myobserver");
See also:
AbstractClient

Constructor & Destructor Documentation

Class destructor.

Tp::AbstractClientObserver::AbstractClientObserver ( const ChannelClassSpecList channelFilter,
bool  shouldRecover = false 
) [protected]

Construct a new AbstractClientObserver object.

Parameters:
channelFilterA specification of the channels in which this observer is interested.
shouldRecoverWhether upon the startup of this observer, observeChannels() will be called for every already existing channel matching its observerChannelFilter().

Member Function Documentation

Return the property containing a specification of the channels that this channel observer is interested. The observeChannels() method should be called by the channel dispatcher whenever any of the newly created channels match this description.

See the Telepathy specification for documentation about the allowed types and how to define filters.

This property never changes while the observer process owns its client bus name. If an observer wants to add extra channels to its list of interests at runtime, it can register an additional client bus name using ClientRegistrar::registerClient(). To remove those filters, it can release the bus name using ClientRegistrar::unregisterClient().

The same principle is applied to approvers and handlers.

Returns:
A specification of the channels that this channel observer is interested as a list of ChannelClassSpec objects.
See also:
observeChannels()

Return whether upon the startup of this observer, observeChannels() will be called for every already existing channel matching its observerChannelFilter().

Parameters:
\ctrue if this observer observerChannels() will be called for every already existing channel matching its observerChannelFilter(), false otherwise.
void Tp::AbstractClientObserver::observeChannels ( const MethodInvocationContextPtr<> &  context,
const AccountPtr &  account,
const ConnectionPtr &  connection,
const QList< ChannelPtr > &  channels,
const ChannelDispatchOperationPtr &  dispatchOperation,
const QList< ChannelRequestPtr > &  requestsSatisfied,
const ObserverInfo observerInfo 
) [pure virtual]

Called by the channel dispatcher when channels in which the observer has registered an interest are announced.

If the announced channels contains channels that match the observerChannelFilter(), and some that do not, then only a subset of the channels (those that do match the filter) are passed to this method.

If the channel dispatcher will split up the channels from a single announcement and dispatch them separately (for instance because no installed handler can handle all of them), it will call this method several times.

The observer must not call MethodInvocationContext::setFinished() until it is ready for a handler for the channel to run (which may change the channel's state). For instance the received context object should be stored until this method is finished processing and then MethodInvocationContext::setFinished() or MethodInvocationContext::setFinishedWithError() should be called on the received context object.

Specialized observers must reimplement this method.

Parameters:
contextA MethodInvocationContextPtr object that must be used to indicate whether this method finished processing.
accountThe account with which the channels are associated.
connectionThe connection with which the channels are associated.
channelsThe channels to be observed.
dispatchOperationThe dispatch operation for these channels. The object will be invalid (DBusProxy::isValid() will be false) if there is no dispatch operation in place (because the channels were requested, not incoming). If the Observer calls ChannelDispatchOperation::claim() or ChannelDispatchOperation::handleWith() on this object, it must be careful to avoid deadlock, since these methods cannot return until the observer has returned from observeChannels().
requestsSatisfiedThe requests satisfied by these channels.
observerInfoAdditional information about these channels.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00967.html0000644000175200001440000000576012000060453021643 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::CapabilityChange Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00906.html0000644000175200001440000001212012000060453021620 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingReady Member List
This is the complete list of members for Tp::PendingReady, including all inherited members.
errorMessage() const Tp::PendingOperation
errorName() const Tp::PendingOperation
finished(Tp::PendingOperation *operation)Tp::PendingOperation [signal]
isError() const Tp::PendingOperation
isFinished() const Tp::PendingOperation
isValid() const Tp::PendingOperation
object() const Tp::PendingOperation [protected]
PendingOperation(const SharedPtr< RefCounted > &object)Tp::PendingOperation [protected]
proxy() const Tp::PendingReady
requestedFeatures() const Tp::PendingReady
setFinished()Tp::PendingOperation [protected, slot]
setFinishedWithError(const QString &name, const QString &message)Tp::PendingOperation [protected, slot]
setFinishedWithError(const QDBusError &error)Tp::PendingOperation [protected, slot]
~PendingOperation()Tp::PendingOperation [virtual]
~PendingReady()Tp::PendingReady


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00839.html0000644000175200001440000000773012000060453021640 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactSearchChannel::SearchStateChangeDetails Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00536_source.html0000644000175200001440000070505612000060453023220 0ustar00collabora-develusers00000000000000 constants.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
constants.h
00001 /* Generated from Telepathy D-Bus Interface Specification, TelepathyQt copy, version 0.17.7
00002  */
00003  
00004 #ifndef IN_TP_QT_HEADER
00005 #error IN_TP_QT_HEADER
00006 #endif
00007 
00008 #include <QFlags>
00009 
00046 namespace Tp
00047 {
00053 enum ConnMgrParamFlag
00054 {
00058     ConnMgrParamFlagRequired = 1,
00059 
00063     ConnMgrParamFlagRegister = 2,
00064 
00069     ConnMgrParamFlagHasDefault = 4,
00070 
00083     ConnMgrParamFlagSecret = 8,
00084 
00116     ConnMgrParamFlagDBusProperty = 16,
00117 
00118     _ConnMgrParamFlagPadding = 0xffffffffU
00119 };
00120 
00127 typedef QFlags<ConnMgrParamFlag> ConnMgrParamFlags;
00128 Q_DECLARE_OPERATORS_FOR_FLAGS(ConnMgrParamFlags)
00129 
00130 
00135 enum ConnectionAliasFlag
00136 {
00153     ConnectionAliasFlagUserSet = 1,
00154 
00155     _ConnectionAliasFlagPadding = 0xffffffffU
00156 };
00157 
00164 typedef QFlags<ConnectionAliasFlag> ConnectionAliasFlags;
00165 Q_DECLARE_OPERATORS_FOR_FLAGS(ConnectionAliasFlags)
00166 
00167 
00172 enum AnonymityMode
00173 {
00186     AnonymityModeClientInfo = 1,
00187 
00199     AnonymityModeShowClientInfo = 2,
00200 
00212     AnonymityModeNetworkInfo = 4,
00213 
00214     _AnonymityModePadding = 0xffffffffU
00215 };
00216 
00230 typedef QFlags<AnonymityMode> AnonymityModeFlags;
00231 Q_DECLARE_OPERATORS_FOR_FLAGS(AnonymityModeFlags)
00232 
00233 
00238 enum ConnectionCapabilityFlag
00239 {
00244     ConnectionCapabilityFlagCreate = 1,
00245 
00249     ConnectionCapabilityFlagInvite = 2,
00250 
00251     _ConnectionCapabilityFlagPadding = 0xffffffffU
00252 };
00253 
00260 typedef QFlags<ConnectionCapabilityFlag> ConnectionCapabilityFlags;
00261 Q_DECLARE_OPERATORS_FOR_FLAGS(ConnectionCapabilityFlags)
00262 
00263 
00268 enum ContactBlockingCapability
00269 {
00277     ContactBlockingCapabilityCanReportAbusive = 1,
00278 
00279     _ContactBlockingCapabilityPadding = 0xffffffffU
00280 };
00281 
00288 typedef QFlags<ContactBlockingCapability> ContactBlockingCapabilities;
00289 Q_DECLARE_OPERATORS_FOR_FLAGS(ContactBlockingCapabilities)
00290 
00291 
00296 enum ContactInfoFlag
00297 {
00301     ContactInfoFlagCanSet = 1,
00302 
00308     ContactInfoFlagPush = 2,
00309 
00310     _ContactInfoFlagPadding = 0xffffffffU
00311 };
00312 
00324 typedef QFlags<ContactInfoFlag> ContactInfoFlags;
00325 Q_DECLARE_OPERATORS_FOR_FLAGS(ContactInfoFlags)
00326 
00327 
00332 enum ContactInfoFieldFlag
00333 {
00348     ContactInfoFieldFlagParametersExact = 1,
00349 
00377     ContactInfoFieldFlagOverwrittenByNickname = 2,
00378 
00379     _ContactInfoFieldFlagPadding = 0xffffffffU
00380 };
00381 
00392 typedef QFlags<ContactInfoFieldFlag> ContactInfoFieldFlags;
00393 Q_DECLARE_OPERATORS_FOR_FLAGS(ContactInfoFieldFlags)
00394 
00395 
00400 enum LocationFeature
00401 {
00406     LocationFeatureCanSet = 1,
00407 
00408     _LocationFeaturePadding = 0xffffffffU
00409 };
00410 
00422 typedef QFlags<LocationFeature> LocationFeatures;
00423 Q_DECLARE_OPERATORS_FOR_FLAGS(LocationFeatures)
00424 
00425 
00430 enum MailNotificationFlag
00431 {
00438     MailNotificationFlagSupportsUnreadMailCount = 1,
00439 
00446     MailNotificationFlagSupportsUnreadMails = 2,
00447 
00454     MailNotificationFlagEmitsMailsReceived = 4,
00455 
00461     MailNotificationFlagSupportsRequestInboxURL = 8,
00462 
00475     MailNotificationFlagSupportsRequestMailURL = 16,
00476 
00488     MailNotificationFlagThreadBased = 32,
00489 
00490     _MailNotificationFlagPadding = 0xffffffffU
00491 };
00492 
00505 typedef QFlags<MailNotificationFlag> MailNotificationFlags;
00506 Q_DECLARE_OPERATORS_FOR_FLAGS(MailNotificationFlags)
00507 
00508 
00513 enum CallFlag
00514 {
00526     CallFlagLocallyHeld = 1,
00527 
00534     CallFlagLocallyRinging = 2,
00535 
00541     CallFlagLocallyQueued = 4,
00542 
00549     CallFlagForwarded = 8,
00550 
00559     CallFlagClearing = 16,
00560 
00561     _CallFlagPadding = 0xffffffffU
00562 };
00563 
00574 typedef QFlags<CallFlag> CallFlags;
00575 Q_DECLARE_OPERATORS_FOR_FLAGS(CallFlags)
00576 
00577 
00582 enum CallMemberFlag
00583 {
00596     CallMemberFlagRinging = 1,
00597 
00609     CallMemberFlagHeld = 2,
00610 
00623     CallMemberFlagConferenceHost = 4,
00624 
00625     _CallMemberFlagPadding = 0xffffffffU
00626 };
00627 
00650 typedef QFlags<CallMemberFlag> CallMemberFlags;
00651 Q_DECLARE_OPERATORS_FOR_FLAGS(CallMemberFlags)
00652 
00653 
00658 enum MediaStreamPending
00659 {
00664     MediaStreamPendingLocalSend = 1,
00665 
00671     MediaStreamPendingRemoteSend = 2,
00672 
00673     _MediaStreamPendingPadding = 0xffffffffU
00674 };
00675 
00682 typedef QFlags<MediaStreamPending> MediaStreamPendingSend;
00683 Q_DECLARE_OPERATORS_FOR_FLAGS(MediaStreamPendingSend)
00684 
00685 
00690 enum ChannelMediaCapability
00691 {
00695     ChannelMediaCapabilityAudio = 1,
00696 
00700     ChannelMediaCapabilityVideo = 2,
00701 
00705     ChannelMediaCapabilityNATTraversalSTUN = 4,
00706 
00711     ChannelMediaCapabilityNATTraversalGTalkP2P = 8,
00712 
00717     ChannelMediaCapabilityNATTraversalICEUDP = 16,
00718 
00723     ChannelMediaCapabilityImmutableStreams = 32,
00724 
00725     _ChannelMediaCapabilityPadding = 0xffffffffU
00726 };
00727 
00739 typedef QFlags<ChannelMediaCapability> ChannelMediaCapabilities;
00740 Q_DECLARE_OPERATORS_FOR_FLAGS(ChannelMediaCapabilities)
00741 
00742 
00747 enum ChannelTextMessageFlag
00748 {
00753     ChannelTextMessageFlagTruncated = 1,
00754 
00769     ChannelTextMessageFlagNonTextContent = 2,
00770 
00787     ChannelTextMessageFlagScrollback = 4,
00788 
00804     ChannelTextMessageFlagRescued = 8,
00805 
00806     _ChannelTextMessageFlagPadding = 0xffffffffU
00807 };
00808 
00815 typedef QFlags<ChannelTextMessageFlag> ChannelTextMessageFlags;
00816 Q_DECLARE_OPERATORS_FOR_FLAGS(ChannelTextMessageFlags)
00817 
00818 
00823 enum CaptchaFlag
00824 {
00829     CaptchaFlagRequired = 1,
00830 
00831     _CaptchaFlagPadding = 0xffffffffU
00832 };
00833 
00844 typedef QFlags<CaptchaFlag> CaptchaFlags;
00845 Q_DECLARE_OPERATORS_FOR_FLAGS(CaptchaFlags)
00846 
00847 
00852 enum ChannelCallState
00853 {
00858     ChannelCallStateRinging = 1,
00859 
00864     ChannelCallStateQueued = 2,
00865 
00871     ChannelCallStateHeld = 4,
00872 
00878     ChannelCallStateForwarded = 8,
00879 
00887     ChannelCallStateInProgress = 16,
00888 
00901     ChannelCallStateConferenceHost = 32,
00902 
00903     _ChannelCallStatePadding = 0xffffffffU
00904 };
00905 
00914 typedef QFlags<ChannelCallState> ChannelCallStateFlags;
00915 Q_DECLARE_OPERATORS_FOR_FLAGS(ChannelCallStateFlags)
00916 
00917 
00922 enum ChannelGroupFlag
00923 {
00928     ChannelGroupFlagCanAdd = 1,
00929 
00934     ChannelGroupFlagCanRemove = 2,
00935 
00940     ChannelGroupFlagCanRescind = 4,
00941 
00946     ChannelGroupFlagMessageAdd = 8,
00947 
00952     ChannelGroupFlagMessageRemove = 16,
00953 
00958     ChannelGroupFlagMessageAccept = 32,
00959 
00964     ChannelGroupFlagMessageReject = 64,
00965 
00970     ChannelGroupFlagMessageRescind = 128,
00971 
00991     ChannelGroupFlagChannelSpecificHandles = 256,
00992 
00998     ChannelGroupFlagOnlyOneGroup = 512,
00999 
01007     ChannelGroupFlagHandleOwnersNotAvailable = 1024,
01008 
01013     ChannelGroupFlagProperties = 2048,
01014 
01025     ChannelGroupFlagMembersChangedDetailed = 4096,
01026 
01032     ChannelGroupFlagMessageDepart = 8192,
01033 
01034     _ChannelGroupFlagPadding = 0xffffffffU
01035 };
01036 
01043 typedef QFlags<ChannelGroupFlag> ChannelGroupFlags;
01044 Q_DECLARE_OPERATORS_FOR_FLAGS(ChannelGroupFlags)
01045 
01046 
01051 enum MessagePartSupportFlag
01052 {
01061     MessagePartSupportFlagOneAttachment = 1,
01062 
01069     MessagePartSupportFlagMultipleAttachments = 2,
01070 
01071     _MessagePartSupportFlagPadding = 0xffffffffU
01072 };
01073 
01106 typedef QFlags<MessagePartSupportFlag> MessagePartSupportFlags;
01107 Q_DECLARE_OPERATORS_FOR_FLAGS(MessagePartSupportFlags)
01108 
01109 
01114 enum MessageSendingFlag
01115 {
01133     MessageSendingFlagReportDelivery = 1,
01134 
01142     MessageSendingFlagReportRead = 2,
01143 
01151     MessageSendingFlagReportDeleted = 4,
01152 
01153     _MessageSendingFlagPadding = 0xffffffffU
01154 };
01155 
01166 typedef QFlags<MessageSendingFlag> MessageSendingFlags;
01167 Q_DECLARE_OPERATORS_FOR_FLAGS(MessageSendingFlags)
01168 
01169 
01174 enum DeliveryReportingSupportFlag
01175 {
01180     DeliveryReportingSupportFlagReceiveFailures = 1,
01181 
01186     DeliveryReportingSupportFlagReceiveSuccesses = 2,
01187 
01192     DeliveryReportingSupportFlagReceiveRead = 4,
01193 
01198     DeliveryReportingSupportFlagReceiveDeleted = 8,
01199 
01200     _DeliveryReportingSupportFlagPadding = 0xffffffffU
01201 };
01202 
01219 typedef QFlags<DeliveryReportingSupportFlag> DeliveryReportingSupportFlags;
01220 Q_DECLARE_OPERATORS_FOR_FLAGS(DeliveryReportingSupportFlags)
01221 
01222 
01227 enum ChannelPasswordFlag
01228 {
01233     ChannelPasswordFlagProvide = 8,
01234 
01238     ChannelPasswordFlagHint = 4,
01239 
01240     _ChannelPasswordFlagPadding = 0xffffffffU
01241 };
01242 
01249 typedef QFlags<ChannelPasswordFlag> ChannelPasswordFlags;
01250 Q_DECLARE_OPERATORS_FOR_FLAGS(ChannelPasswordFlags)
01251 
01252 
01257 enum PropertyFlag
01258 {
01262     PropertyFlagRead = 1,
01263 
01267     PropertyFlagWrite = 2,
01268 
01269     _PropertyFlagPadding = 0xffffffffU
01270 };
01271 
01278 typedef QFlags<PropertyFlag> PropertyFlags;
01279 Q_DECLARE_OPERATORS_FOR_FLAGS(PropertyFlags)
01280 
01281 
01286 enum StorageRestrictionFlag
01287 {
01292     StorageRestrictionFlagCannotSetParameters = 1,
01293 
01298     StorageRestrictionFlagCannotSetEnabled = 2,
01299 
01304     StorageRestrictionFlagCannotSetPresence = 4,
01305 
01309     StorageRestrictionFlagCannotSetService = 8,
01310 
01311     _StorageRestrictionFlagPadding = 0xffffffffU
01312 };
01313 
01322 typedef QFlags<StorageRestrictionFlag> StorageRestrictionFlags;
01323 Q_DECLARE_OPERATORS_FOR_FLAGS(StorageRestrictionFlags)
01324 
01325 
01330 enum RTCPXRStatisticsFlag
01331 {
01335     RTCPXRStatisticsFlagLoss = 1,
01336 
01340     RTCPXRStatisticsFlagDuplicate = 2,
01341 
01345     RTCPXRStatisticsFlagJitter = 4,
01346 
01350     RTCPXRStatisticsFlagTTL = 8,
01351 
01355     RTCPXRStatisticsFlagHL = 16,
01356 
01357     _RTCPXRStatisticsFlagPadding = 0xffffffffU
01358 };
01359 
01366 typedef QFlags<RTCPXRStatisticsFlag> RTCPXRStatisticsFlags;
01367 Q_DECLARE_OPERATORS_FOR_FLAGS(RTCPXRStatisticsFlags)
01368 
01369 
01375 enum HandleType
01376 {
01382     HandleTypeNone = 0,
01383 
01387     HandleTypeContact = 1,
01388 
01392     HandleTypeRoom = 2,
01393 
01397     HandleTypeList = 3,
01398 
01402     HandleTypeGroup = 4,
01403 
01404     _HandleTypePadding = 0xffffffffU
01405 };
01406 
01412 const int NUM_HANDLE_TYPES = (4+1);
01413 
01420 enum ConnectionStatus
01421 {
01425     ConnectionStatusConnected = 0,
01426 
01432     ConnectionStatusConnecting = 1,
01433 
01441     ConnectionStatusDisconnected = 2,
01442 
01443     _ConnectionStatusPadding = 0xffffffffU
01444 };
01445 
01451 const int NUM_CONNECTION_STATUSES = (2+1);
01452 
01465 enum ConnectionStatusReason
01466 {
01476     ConnectionStatusReasonNoneSpecified = 0,
01477 
01489     ConnectionStatusReasonRequested = 1,
01490 
01509     ConnectionStatusReasonNetworkError = 2,
01510 
01520     ConnectionStatusReasonAuthenticationFailed = 3,
01521 
01535     ConnectionStatusReasonEncryptionError = 4,
01536 
01582     ConnectionStatusReasonNameInUse = 5,
01583 
01593     ConnectionStatusReasonCertNotProvided = 6,
01594 
01607     ConnectionStatusReasonCertUntrusted = 7,
01608 
01618     ConnectionStatusReasonCertExpired = 8,
01619 
01629     ConnectionStatusReasonCertNotActivated = 9,
01630 
01640     ConnectionStatusReasonCertHostnameMismatch = 10,
01641 
01652     ConnectionStatusReasonCertFingerprintMismatch = 11,
01653 
01663     ConnectionStatusReasonCertSelfSigned = 12,
01664 
01675     ConnectionStatusReasonCertOtherError = 13,
01676 
01686     ConnectionStatusReasonCertRevoked = 14,
01687 
01698     ConnectionStatusReasonCertInsecure = 15,
01699 
01712     ConnectionStatusReasonCertLimitExceeded = 16,
01713 
01714     _ConnectionStatusReasonPadding = 0xffffffffU
01715 };
01716 
01722 const int NUM_CONNECTION_STATUS_REASONS = (16+1);
01723 
01732 enum ContactListState
01733 {
01738     ContactListStateNone = 0,
01739 
01745     ContactListStateWaiting = 1,
01746 
01755     ContactListStateFailure = 2,
01756 
01762     ContactListStateSuccess = 3,
01763 
01764     _ContactListStatePadding = 0xffffffffU
01765 };
01766 
01772 const int NUM_CONTACT_LIST_STATES = (3+1);
01773 
01789 enum SubscriptionState
01790 {
01794     SubscriptionStateUnknown = 0,
01795 
01801     SubscriptionStateNo = 1,
01802 
01809     SubscriptionStateRemovedRemotely = 2,
01810 
01816     SubscriptionStateAsk = 3,
01817 
01821     SubscriptionStateYes = 4,
01822 
01823     _SubscriptionStatePadding = 0xffffffffU
01824 };
01825 
01831 const int NUM_SUBSCRIPTION_STATES = (4+1);
01832 
01880 enum ContactMetadataStorageType
01881 {
01899     ContactMetadataStorageTypeNone = 0,
01900 
01911     ContactMetadataStorageTypeSubscribedOrPending = 1,
01912 
01924     ContactMetadataStorageTypeSubscribed = 2,
01925 
01939     ContactMetadataStorageTypeAnyone = 3,
01940 
01941     _ContactMetadataStorageTypePadding = 0xffffffffU
01942 };
01943 
01949 const int NUM_CONTACT_METADATA_STORAGE_TYPES = (3+1);
01950 
01959 enum HTTPMethod
01960 {
01964     HTTPMethodGet = 0,
01965 
01970     HTTPMethodPost = 1,
01971 
01972     _HTTPMethodPadding = 0xffffffffU
01973 };
01974 
01980 const int NUM_HTTP_METHODS = (1+1);
01981 
01990 enum ServicePointType
01991 {
01997     ServicePointTypeNone = 0,
01998 
02002     ServicePointTypeEmergency = 1,
02003 
02008     ServicePointTypeCounseling = 2,
02009 
02010     _ServicePointTypePadding = 0xffffffffU
02011 };
02012 
02018 const int NUM_SERVICE_POINT_TYPES = (2+1);
02019 
02026 enum ConnectionPresenceType
02027 {
02033     ConnectionPresenceTypeUnset = 0,
02034 
02038     ConnectionPresenceTypeOffline = 1,
02039 
02043     ConnectionPresenceTypeAvailable = 2,
02044 
02048     ConnectionPresenceTypeAway = 3,
02049 
02053     ConnectionPresenceTypeExtendedAway = 4,
02054 
02058     ConnectionPresenceTypeHidden = 5,
02059 
02063     ConnectionPresenceTypeBusy = 6,
02064 
02069     ConnectionPresenceTypeUnknown = 7,
02070 
02075     ConnectionPresenceTypeError = 8,
02076 
02077     _ConnectionPresenceTypePadding = 0xffffffffU
02078 };
02079 
02085 const int NUM_CONNECTION_PRESENCE_TYPES = (8+1);
02086 
02103 enum AccessControlType
02104 {
02115     AccessControlTypeWhitelist = 0,
02116 
02121     AccessControlTypePublishList = 1,
02122 
02132     AccessControlTypeGroup = 2,
02133 
02137     AccessControlTypeOpen = 3,
02138 
02144     AccessControlTypeSubscribeOrPublishList = 4,
02145 
02150     AccessControlTypeClosed = 5,
02151 
02169     AccessControlTypeNotUnderstood = 6,
02170 
02171     _AccessControlTypePadding = 0xffffffffU
02172 };
02173 
02179 const int NUM_ACCESS_CONTROL_TYPES = (6+1);
02180 
02202 enum RichPresenceAccessControlType
02203 {
02208     RichPresenceAccessControlTypeWhitelist = 0,
02209 
02215     RichPresenceAccessControlTypePublishList = 1,
02216 
02222     RichPresenceAccessControlTypeGroup = 2,
02223 
02228     RichPresenceAccessControlTypeOpen = 3,
02229 
02230     _RichPresenceAccessControlTypePadding = 0xffffffffU
02231 };
02232 
02238 const int NUM_RICH_PRESENCE_ACCESS_CONTROL_TYPES = (3+1);
02239 
02286 enum CallState
02287 {
02293     CallStateUnknown = 0,
02294 
02301     CallStatePendingInitiator = 1,
02302 
02312     CallStateInitialising = 2,
02313 
02325     CallStateInitialised = 3,
02326 
02332     CallStateAccepted = 4,
02333 
02338     CallStateActive = 5,
02339 
02343     CallStateEnded = 6,
02344 
02345     _CallStatePadding = 0xffffffffU
02346 };
02347 
02353 const int NUM_CALL_STATES = (6+1);
02354 
02365 enum CallStateChangeReason
02366 {
02373     CallStateChangeReasonUnknown = 0,
02374 
02381     CallStateChangeReasonProgressMade = 1,
02382 
02397     CallStateChangeReasonUserRequested = 2,
02398 
02409     CallStateChangeReasonForwarded = 3,
02410 
02420     CallStateChangeReasonRejected = 4,
02421 
02435     CallStateChangeReasonNoAnswer = 5,
02436 
02444     CallStateChangeReasonInvalidContact = 6,
02445 
02455     CallStateChangeReasonPermissionDenied = 7,
02456 
02467     CallStateChangeReasonBusy = 8,
02468 
02478     CallStateChangeReasonInternalError = 9,
02479 
02489     CallStateChangeReasonServiceError = 10,
02490 
02500     CallStateChangeReasonNetworkError = 11,
02501 
02511     CallStateChangeReasonMediaError = 12,
02512 
02518     CallStateChangeReasonConnectivityError = 13,
02519 
02520     _CallStateChangeReasonPadding = 0xffffffffU
02521 };
02522 
02528 const int NUM_CALL_STATE_CHANGE_REASONS = (13+1);
02529 
02536 enum ChannelContactSearchState
02537 {
02541     ChannelContactSearchStateNotStarted = 0,
02542 
02546     ChannelContactSearchStateInProgress = 1,
02547 
02552     ChannelContactSearchStateMoreAvailable = 2,
02553 
02557     ChannelContactSearchStateCompleted = 3,
02558 
02562     ChannelContactSearchStateFailed = 4,
02563 
02564     _ChannelContactSearchStatePadding = 0xffffffffU
02565 };
02566 
02572 const int NUM_CHANNEL_CONTACT_SEARCH_STATES = (4+1);
02573 
02580 enum FileTransferState
02581 {
02586     FileTransferStateNone = 0,
02587 
02593     FileTransferStatePending = 1,
02594 
02600     FileTransferStateAccepted = 2,
02601 
02605     FileTransferStateOpen = 3,
02606 
02610     FileTransferStateCompleted = 4,
02611 
02615     FileTransferStateCancelled = 5,
02616 
02617     _FileTransferStatePadding = 0xffffffffU
02618 };
02619 
02625 const int NUM_FILE_TRANSFER_STATES = (5+1);
02626 
02633 enum FileTransferStateChangeReason
02634 {
02638     FileTransferStateChangeReasonNone = 0,
02639 
02643     FileTransferStateChangeReasonRequested = 1,
02644 
02648     FileTransferStateChangeReasonLocalStopped = 2,
02649 
02653     FileTransferStateChangeReasonRemoteStopped = 3,
02654 
02658     FileTransferStateChangeReasonLocalError = 4,
02659 
02663     FileTransferStateChangeReasonRemoteError = 5,
02664 
02665     _FileTransferStateChangeReasonPadding = 0xffffffffU
02666 };
02667 
02673 const int NUM_FILE_TRANSFER_STATE_CHANGE_REASONS = (5+1);
02674 
02681 enum FileHashType
02682 {
02686     FileHashTypeNone = 0,
02687 
02691     FileHashTypeMD5 = 1,
02692 
02696     FileHashTypeSHA1 = 2,
02697 
02701     FileHashTypeSHA256 = 3,
02702 
02703     _FileHashTypePadding = 0xffffffffU
02704 };
02705 
02711 const int NUM_FILE_HASH_TYPES = (3+1);
02712 
02719 enum MediaStreamType
02720 {
02724     MediaStreamTypeAudio = 0,
02725 
02729     MediaStreamTypeVideo = 1,
02730 
02731     _MediaStreamTypePadding = 0xffffffffU
02732 };
02733 
02739 const int NUM_MEDIA_STREAM_TYPES = (1+1);
02740 
02747 enum MediaStreamState
02748 {
02752     MediaStreamStateDisconnected = 0,
02753 
02757     MediaStreamStateConnecting = 1,
02758 
02762     MediaStreamStateConnected = 2,
02763 
02764     _MediaStreamStatePadding = 0xffffffffU
02765 };
02766 
02772 const int NUM_MEDIA_STREAM_STATES = (2+1);
02773 
02780 enum MediaStreamDirection
02781 {
02785     MediaStreamDirectionNone = 0,
02786 
02790     MediaStreamDirectionSend = 1,
02791 
02795     MediaStreamDirectionReceive = 2,
02796 
02800     MediaStreamDirectionBidirectional = 3,
02801 
02802     _MediaStreamDirectionPadding = 0xffffffffU
02803 };
02804 
02810 const int NUM_MEDIA_STREAM_DIRECTIONS = (3+1);
02811 
02818 enum ChannelTextSendError
02819 {
02823     ChannelTextSendErrorUnknown = 0,
02824 
02828     ChannelTextSendErrorOffline = 1,
02829 
02833     ChannelTextSendErrorInvalidContact = 2,
02834 
02838     ChannelTextSendErrorPermissionDenied = 3,
02839 
02843     ChannelTextSendErrorTooLong = 4,
02844 
02849     ChannelTextSendErrorNotImplemented = 5,
02850 
02851     _ChannelTextSendErrorPadding = 0xffffffffU
02852 };
02853 
02859 const int NUM_CHANNEL_TEXT_SEND_ERRORS = (5+1);
02860 
02869 enum ChannelTextMessageType
02870 {
02874     ChannelTextMessageTypeNormal = 0,
02875 
02882     ChannelTextMessageTypeAction = 1,
02883 
02887     ChannelTextMessageTypeNotice = 2,
02888 
02892     ChannelTextMessageTypeAutoReply = 3,
02893 
02899     ChannelTextMessageTypeDeliveryReport = 4,
02900 
02901     _ChannelTextMessageTypePadding = 0xffffffffU
02902 };
02903 
02909 const int NUM_CHANNEL_TEXT_MESSAGE_TYPES = (4+1);
02910 
02917 enum TubeType
02918 {
02925     TubeTypeDBus = 0,
02926 
02933     TubeTypeStream = 1,
02934 
02935     _TubeTypePadding = 0xffffffffU
02936 };
02937 
02943 const int NUM_TUBE_TYPES = (1+1);
02944 
02951 enum TubeState
02952 {
02956     TubeStateLocalPending = 0,
02957 
02961     TubeStateRemotePending = 1,
02962 
02966     TubeStateOpen = 2,
02967 
02968     _TubeStatePadding = 0xffffffffU
02969 };
02970 
02976 const int NUM_TUBE_STATES = (2+1);
02977 
02988 enum CaptchaCancelReason
02989 {
02994     CaptchaCancelReasonUserCancelled = 0,
02995 
03003     CaptchaCancelReasonNotSupported = 1,
03004 
03010     CaptchaCancelReasonServiceConfused = 2,
03011 
03012     _CaptchaCancelReasonPadding = 0xffffffffU
03013 };
03014 
03020 const int NUM_CAPTCHA_CANCEL_REASONS = (2+1);
03021 
03028 enum CaptchaStatus
03029 {
03035     CaptchaStatusLocalPending = 0,
03036 
03043     CaptchaStatusRemotePending = 1,
03044 
03050     CaptchaStatusSucceeded = 2,
03051 
03057     CaptchaStatusTryAgain = 3,
03058 
03063     CaptchaStatusFailed = 4,
03064 
03065     _CaptchaStatusPadding = 0xffffffffU
03066 };
03067 
03073 const int NUM_CAPTCHA_STATUSES = (4+1);
03074 
03081 enum ChannelChatState
03082 {
03086     ChannelChatStateGone = 0,
03087 
03091     ChannelChatStateInactive = 1,
03092 
03096     ChannelChatStateActive = 2,
03097 
03101     ChannelChatStatePaused = 3,
03102 
03106     ChannelChatStateComposing = 4,
03107 
03108     _ChannelChatStatePadding = 0xffffffffU
03109 };
03110 
03116 const int NUM_CHANNEL_CHAT_STATES = (4+1);
03117 
03124 enum DTMFEvent
03125 {
03129     DTMFEventDigit0 = 0,
03130 
03134     DTMFEventDigit1 = 1,
03135 
03139     DTMFEventDigit2 = 2,
03140 
03144     DTMFEventDigit3 = 3,
03145 
03149     DTMFEventDigit4 = 4,
03150 
03154     DTMFEventDigit5 = 5,
03155 
03159     DTMFEventDigit6 = 6,
03160 
03164     DTMFEventDigit7 = 7,
03165 
03169     DTMFEventDigit8 = 8,
03170 
03174     DTMFEventDigit9 = 9,
03175 
03179     DTMFEventAsterisk = 10,
03180 
03184     DTMFEventHash = 11,
03185 
03189     DTMFEventLetterA = 12,
03190 
03194     DTMFEventLetterB = 13,
03195 
03199     DTMFEventLetterC = 14,
03200 
03204     DTMFEventLetterD = 15,
03205 
03206     _DTMFEventPadding = 0xffffffffU
03207 };
03208 
03214 const int NUM_DTMF_EVENTS = (15+1);
03215 
03237 enum ChannelGroupChangeReason
03238 {
03258     ChannelGroupChangeReasonNone = 0,
03259 
03282     ChannelGroupChangeReasonOffline = 1,
03283 
03294     ChannelGroupChangeReasonKicked = 2,
03295 
03318     ChannelGroupChangeReasonBusy = 3,
03319 
03326     ChannelGroupChangeReasonInvited = 4,
03327 
03338     ChannelGroupChangeReasonBanned = 5,
03339 
03343     ChannelGroupChangeReasonError = 6,
03344 
03369     ChannelGroupChangeReasonInvalidContact = 7,
03370 
03392     ChannelGroupChangeReasonNoAnswer = 8,
03393 
03405     ChannelGroupChangeReasonRenamed = 9,
03406 
03418     ChannelGroupChangeReasonPermissionDenied = 10,
03419 
03449     ChannelGroupChangeReasonSeparated = 11,
03450 
03451     _ChannelGroupChangeReasonPadding = 0xffffffffU
03452 };
03453 
03459 const int NUM_CHANNEL_GROUP_CHANGE_REASONS = (11+1);
03460 
03469 enum LocalHoldState
03470 {
03475     LocalHoldStateUnheld = 0,
03476 
03480     LocalHoldStateHeld = 1,
03481 
03489     LocalHoldStatePendingHold = 2,
03490 
03498     LocalHoldStatePendingUnhold = 3,
03499 
03500     _LocalHoldStatePadding = 0xffffffffU
03501 };
03502 
03508 const int NUM_LOCAL_HOLD_STATES = (3+1);
03509 
03519 enum LocalHoldStateReason
03520 {
03526     LocalHoldStateReasonNone = 0,
03527 
03531     LocalHoldStateReasonRequested = 1,
03532 
03536     LocalHoldStateReasonResourceNotAvailable = 2,
03537 
03538     _LocalHoldStateReasonPadding = 0xffffffffU
03539 };
03540 
03546 const int NUM_LOCAL_HOLD_STATE_REASONS = (2+1);
03547 
03561 enum DeliveryStatus
03562 {
03569     DeliveryStatusUnknown = 0,
03570 
03574     DeliveryStatusDelivered = 1,
03575 
03582     DeliveryStatusTemporarilyFailed = 2,
03583 
03592     DeliveryStatusPermanentlyFailed = 3,
03593 
03601     DeliveryStatusAccepted = 4,
03602 
03606     DeliveryStatusRead = 5,
03607 
03613     DeliveryStatusDeleted = 6,
03614 
03615     _DeliveryStatusPadding = 0xffffffffU
03616 };
03617 
03623 const int NUM_DELIVERY_STATUSES = (6+1);
03624 
03635 enum SASLAbortReason
03636 {
03640     SASLAbortReasonInvalidChallenge = 0,
03641 
03645     SASLAbortReasonUserAbort = 1,
03646 
03647     _SASLAbortReasonPadding = 0xffffffffU
03648 };
03649 
03655 const int NUM_SASL_ABORT_REASONS = (1+1);
03656 
03663 enum SASLStatus
03664 {
03670     SASLStatusNotStarted = 0,
03671 
03677     SASLStatusInProgress = 1,
03678 
03685     SASLStatusServerSucceeded = 2,
03686 
03693     SASLStatusClientAccepted = 3,
03694 
03700     SASLStatusSucceeded = 4,
03701 
03708     SASLStatusServerFailed = 5,
03709 
03714     SASLStatusClientFailed = 6,
03715 
03716     _SASLStatusPadding = 0xffffffffU
03717 };
03718 
03724 const int NUM_SASL_STATUSES = (6+1);
03725 
03732 enum TubeChannelState
03733 {
03739     TubeChannelStateLocalPending = 0,
03740 
03745     TubeChannelStateRemotePending = 1,
03746 
03752     TubeChannelStateOpen = 2,
03753 
03760     TubeChannelStateNotOffered = 3,
03761 
03762     _TubeChannelStatePadding = 0xffffffffU
03763 };
03764 
03770 const int NUM_TUBE_CHANNEL_STATES = (3+1);
03771 
03778 enum SocketAddressType
03779 {
03784     SocketAddressTypeUnix = 0,
03785 
03791     SocketAddressTypeAbstractUnix = 1,
03792 
03799     SocketAddressTypeIPv4 = 2,
03800 
03807     SocketAddressTypeIPv6 = 3,
03808 
03809     _SocketAddressTypePadding = 0xffffffffU
03810 };
03811 
03817 const int NUM_SOCKET_ADDRESS_TYPES = (3+1);
03818 
03825 enum SocketAccessControl
03826 {
03838     SocketAccessControlLocalhost = 0,
03839 
03848     SocketAccessControlPort = 1,
03849 
03858     SocketAccessControlNetmask = 2,
03859 
03897     SocketAccessControlCredentials = 3,
03898 
03899     _SocketAccessControlPadding = 0xffffffffU
03900 };
03901 
03907 const int NUM_SOCKET_ACCESS_CONTROLS = (3+1);
03908 
03915 enum MediaStreamError
03916 {
03920     MediaStreamErrorUnknown = 0,
03921 
03925     MediaStreamErrorEOS = 1,
03926 
03934     MediaStreamErrorCodecNegotiationFailed = 2,
03935 
03939     MediaStreamErrorConnectionFailed = 3,
03940 
03945     MediaStreamErrorNetworkError = 4,
03946 
03950     MediaStreamErrorNoCodecs = 5,
03951 
03955     MediaStreamErrorInvalidCMBehavior = 6,
03956 
03960     MediaStreamErrorMediaError = 7,
03961 
03962     _MediaStreamErrorPadding = 0xffffffffU
03963 };
03964 
03970 const int NUM_MEDIA_STREAM_ERRORS = (7+1);
03971 
03978 enum MediaStreamBaseProto
03979 {
03983     MediaStreamBaseProtoUDP = 0,
03984 
03988     MediaStreamBaseProtoTCP = 1,
03989 
03990     _MediaStreamBaseProtoPadding = 0xffffffffU
03991 };
03992 
03998 const int NUM_MEDIA_STREAM_BASE_PROTOS = (1+1);
03999 
04006 enum MediaStreamTransportType
04007 {
04011     MediaStreamTransportTypeLocal = 0,
04012 
04016     MediaStreamTransportTypeDerived = 1,
04017 
04021     MediaStreamTransportTypeRelay = 2,
04022 
04023     _MediaStreamTransportTypePadding = 0xffffffffU
04024 };
04025 
04031 const int NUM_MEDIA_STREAM_TRANSPORT_TYPES = (2+1);
04032 
04039 enum DebugLevel
04040 {
04045     DebugLevelError = 0,
04046 
04052     DebugLevelCritical = 1,
04053 
04057     DebugLevelWarning = 2,
04058 
04062     DebugLevelMessage = 3,
04063 
04067     DebugLevelInfo = 4,
04068 
04072     DebugLevelDebug = 5,
04073 
04074     _DebugLevelPadding = 0xffffffffU
04075 };
04076 
04082 const int NUM_DEBUG_LEVELS = (5+1);
04083 
04092 enum TLSCertificateState
04093 {
04097     TLSCertificateStatePending = 0,
04098 
04102     TLSCertificateStateAccepted = 1,
04103 
04107     TLSCertificateStateRejected = 2,
04108 
04109     _TLSCertificateStatePadding = 0xffffffffU
04110 };
04111 
04117 const int NUM_TLS_CERTIFICATE_STATES = (2+1);
04118 
04127 enum TLSCertificateRejectReason
04128 {
04133     TLSCertificateRejectReasonUnknown = 0,
04134 
04138     TLSCertificateRejectReasonUntrusted = 1,
04139 
04143     TLSCertificateRejectReasonExpired = 2,
04144 
04148     TLSCertificateRejectReasonNotActivated = 3,
04149 
04153     TLSCertificateRejectReasonFingerprintMismatch = 4,
04154 
04158     TLSCertificateRejectReasonHostnameMismatch = 5,
04159 
04163     TLSCertificateRejectReasonSelfSigned = 6,
04164 
04168     TLSCertificateRejectReasonRevoked = 7,
04169 
04174     TLSCertificateRejectReasonInsecure = 8,
04175 
04180     TLSCertificateRejectReasonLimitExceeded = 9,
04181 
04182     _TLSCertificateRejectReasonPadding = 0xffffffffU
04183 };
04184 
04190 const int NUM_TLS_CERTIFICATE_REJECT_REASONS = (9+1);
04191 
04200 enum CallContentPacketizationType
04201 {
04207     CallContentPacketizationTypeRTP = 0,
04208 
04214     CallContentPacketizationTypeRaw = 1,
04215 
04223     CallContentPacketizationTypeMSNWebcam = 2,
04224 
04225     _CallContentPacketizationTypePadding = 0xffffffffU
04226 };
04227 
04233 const int NUM_CALL_CONTENT_PACKETIZATION_TYPES = (2+1);
04234 
04244 enum CallContentDisposition
04245 {
04251     CallContentDispositionNone = 0,
04252 
04265     CallContentDispositionInitial = 1,
04266 
04267     _CallContentDispositionPadding = 0xffffffffU
04268 };
04269 
04275 const int NUM_CALL_CONTENT_DISPOSITIONS = (1+1);
04276 
04283 enum RCPTXRRTTMode
04284 {
04288     RCPTXRRTTModeAll = 0,
04289 
04294     RCPTXRRTTModeSender = 1,
04295 
04296     _RCPTXRRTTModePadding = 0xffffffffU
04297 };
04298 
04304 const int NUM_RCPT_XR_RTT_MODES = (1+1);
04305 
04317 enum StreamFlowState
04318 {
04322     StreamFlowStateStopped = 0,
04323 
04328     StreamFlowStatePendingStart = 1,
04329 
04334     StreamFlowStatePendingStop = 2,
04335 
04340     StreamFlowStateStarted = 3,
04341 
04342     _StreamFlowStatePadding = 0xffffffffU
04343 };
04344 
04350 const int NUM_STREAM_FLOW_STATES = (3+1);
04351 
04362 enum CallStreamCandidateType
04363 {
04368     CallStreamCandidateTypeNone = 0,
04369 
04374     CallStreamCandidateTypeHost = 1,
04375 
04381     CallStreamCandidateTypeServerReflexive = 2,
04382 
04388     CallStreamCandidateTypePeerReflexive = 3,
04389 
04396     CallStreamCandidateTypeRelay = 4,
04397 
04402     CallStreamCandidateTypeMulticast = 5,
04403 
04404     _CallStreamCandidateTypePadding = 0xffffffffU
04405 };
04406 
04412 const int NUM_CALL_STREAM_CANDIDATE_TYPES = (5+1);
04413 
04426 enum StreamComponent
04427 {
04432     StreamComponentUnknown = 0,
04433 
04438     StreamComponentData = 1,
04439 
04444     StreamComponentControl = 2,
04445 
04446     _StreamComponentPadding = 0xffffffffU
04447 };
04448 
04454 const int NUM_STREAM_COMPONENTS = (2+1);
04455 
04466 enum StreamTransportType
04467 {
04472     StreamTransportTypeUnknown = 0,
04473 
04480     StreamTransportTypeRawUDP = 1,
04481 
04487     StreamTransportTypeICE = 2,
04488 
04494     StreamTransportTypeGTalkP2P = 3,
04495 
04501     StreamTransportTypeWLM2009 = 4,
04502 
04507     StreamTransportTypeSHM = 5,
04508 
04512     StreamTransportTypeMulticast = 6,
04513 
04514     _StreamTransportTypePadding = 0xffffffffU
04515 };
04516 
04522 const int NUM_STREAM_TRANSPORT_TYPES = (6+1);
04523 
04532 enum SendingState
04533 {
04537     SendingStateNone = 0,
04538 
04542     SendingStatePendingSend = 1,
04543 
04547     SendingStateSending = 2,
04548 
04552     SendingStatePendingStopSending = 3,
04553 
04554     _SendingStatePadding = 0xffffffffU
04555 };
04556 
04562 const int NUM_SENDING_STATES = (3+1);
04563 
04573 enum StreamEndpointState
04574 {
04578     StreamEndpointStateConnecting = 0,
04579 
04585     StreamEndpointStateProvisionallyConnected = 1,
04586 
04593     StreamEndpointStateFullyConnected = 2,
04594 
04601     StreamEndpointStateExhaustedCandidates = 3,
04602 
04608     StreamEndpointStateFailed = 4,
04609 
04610     _StreamEndpointStatePadding = 0xffffffffU
04611 };
04612 
04618 const int NUM_STREAM_ENDPOINT_STATES = (4+1);
04619 
04620 }
04621 
04628 #define TP_QT_IFACE_CONNECTION_MANAGER (QLatin1String("org.freedesktop.Telepathy.ConnectionManager"))
04629 
04636 #define TP_QT_IFACE_PROTOCOL (QLatin1String("org.freedesktop.Telepathy.Protocol"))
04637 
04644 #define TP_QT_IFACE_PROTOCOL_INTERFACE_ADDRESSING (QLatin1String("org.freedesktop.Telepathy.Protocol.Interface.Addressing"))
04645 
04652 #define TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS (QLatin1String("org.freedesktop.Telepathy.Protocol.Interface.Avatars"))
04653 
04660 #define TP_QT_IFACE_PROTOCOL_INTERFACE_PRESENCE (QLatin1String("org.freedesktop.Telepathy.Protocol.Interface.Presence"))
04661 
04668 #define TP_QT_IFACE_CONNECTION (QLatin1String("org.freedesktop.Telepathy.Connection"))
04669 
04676 #define TP_QT_IFACE_CONNECTION_INTERFACE_ADDRESSING (QLatin1String("org.freedesktop.Telepathy.Connection.Interface.Addressing1"))
04677 
04684 #define TP_QT_IFACE_CONNECTION_INTERFACE_ALIASING (QLatin1String("org.freedesktop.Telepathy.Connection.Interface.Aliasing"))
04685 
04692 #define TP_QT_IFACE_CONNECTION_INTERFACE_ANONYMITY (QLatin1String("org.freedesktop.Telepathy.Connection.Interface.Anonymity"))
04693 
04700 #define TP_QT_IFACE_CONNECTION_INTERFACE_AVATARS (QLatin1String("org.freedesktop.Telepathy.Connection.Interface.Avatars"))
04701 
04708 #define TP_QT_IFACE_CONNECTION_INTERFACE_BALANCE (QLatin1String("org.freedesktop.Telepathy.Connection.Interface.Balance"))
04709 
04716 #define TP_QT_IFACE_CONNECTION_INTERFACE_CAPABILITIES (QLatin1String("org.freedesktop.Telepathy.Connection.Interface.Capabilities"))
04717 
04724 #define TP_QT_IFACE_CONNECTION_INTERFACE_CELLULAR (QLatin1String("org.freedesktop.Telepathy.Connection.Interface.Cellular"))
04725 
04732 #define TP_QT_IFACE_CONNECTION_INTERFACE_CLIENT_TYPES (QLatin1String("org.freedesktop.Telepathy.Connection.Interface.ClientTypes"))
04733 
04740 #define TP_QT_IFACE_CONNECTION_INTERFACE_CONTACTS (QLatin1String("org.freedesktop.Telepathy.Connection.Interface.Contacts"))
04741 
04748 #define TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_BLOCKING (QLatin1String("org.freedesktop.Telepathy.Connection.Interface.ContactBlocking"))
04749 
04756 #define TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_CAPABILITIES (QLatin1String("org.freedesktop.Telepathy.Connection.Interface.ContactCapabilities"))
04757 
04764 #define TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_GROUPS (QLatin1String("org.freedesktop.Telepathy.Connection.Interface.ContactGroups"))
04765 
04772 #define TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_INFO (QLatin1String("org.freedesktop.Telepathy.Connection.Interface.ContactInfo"))
04773 
04780 #define TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_LIST (QLatin1String("org.freedesktop.Telepathy.Connection.Interface.ContactList"))
04781 
04788 #define TP_QT_IFACE_CONNECTION_INTERFACE_LOCATION (QLatin1String("org.freedesktop.Telepathy.Connection.Interface.Location"))
04789 
04796 #define TP_QT_IFACE_CONNECTION_INTERFACE_MAIL_NOTIFICATION (QLatin1String("org.freedesktop.Telepathy.Connection.Interface.MailNotification"))
04797 
04804 #define TP_QT_IFACE_CONNECTION_INTERFACE_POWER_SAVING (QLatin1String("org.freedesktop.Telepathy.Connection.Interface.PowerSaving"))
04805 
04812 #define TP_QT_IFACE_CONNECTION_INTERFACE_PRESENCE (QLatin1String("org.freedesktop.Telepathy.Connection.Interface.Presence"))
04813 
04820 #define TP_QT_IFACE_CONNECTION_INTERFACE_REQUESTS (QLatin1String("org.freedesktop.Telepathy.Connection.Interface.Requests"))
04821 
04828 #define TP_QT_IFACE_CONNECTION_INTERFACE_SERVICE_POINT (QLatin1String("org.freedesktop.Telepathy.Connection.Interface.ServicePoint"))
04829 
04836 #define TP_QT_IFACE_CONNECTION_INTERFACE_SIMPLE_PRESENCE (QLatin1String("org.freedesktop.Telepathy.Connection.Interface.SimplePresence"))
04837 
04844 #define TP_QT_IFACE_CHANNEL (QLatin1String("org.freedesktop.Telepathy.Channel"))
04845 
04852 #define TP_QT_IFACE_CHANNEL_TYPE_CALL (QLatin1String("org.freedesktop.Telepathy.Channel.Type.Call1"))
04853 
04860 #define TP_QT_IFACE_CHANNEL_TYPE_CONTACT_LIST (QLatin1String("org.freedesktop.Telepathy.Channel.Type.ContactList"))
04861 
04868 #define TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH (QLatin1String("org.freedesktop.Telepathy.Channel.Type.ContactSearch"))
04869 
04876 #define TP_QT_IFACE_CHANNEL_TYPE_DBUS_TUBE (QLatin1String("org.freedesktop.Telepathy.Channel.Type.DBusTube"))
04877 
04884 #define TP_QT_IFACE_CHANNEL_TYPE_FILE_TRANSFER (QLatin1String("org.freedesktop.Telepathy.Channel.Type.FileTransfer"))
04885 
04892 #define TP_QT_IFACE_CHANNEL_TYPE_ROOM_LIST (QLatin1String("org.freedesktop.Telepathy.Channel.Type.RoomList"))
04893 
04900 #define TP_QT_IFACE_CHANNEL_TYPE_SERVER_AUTHENTICATION (QLatin1String("org.freedesktop.Telepathy.Channel.Type.ServerAuthentication"))
04901 
04908 #define TP_QT_IFACE_CHANNEL_TYPE_SERVER_TLS_CONNECTION (QLatin1String("org.freedesktop.Telepathy.Channel.Type.ServerTLSConnection"))
04909 
04916 #define TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA (QLatin1String("org.freedesktop.Telepathy.Channel.Type.StreamedMedia"))
04917 
04924 #define TP_QT_IFACE_CHANNEL_TYPE_STREAM_TUBE (QLatin1String("org.freedesktop.Telepathy.Channel.Type.StreamTube"))
04925 
04932 #define TP_QT_IFACE_CHANNEL_TYPE_TEXT (QLatin1String("org.freedesktop.Telepathy.Channel.Type.Text"))
04933 
04940 #define TP_QT_IFACE_CHANNEL_TYPE_TUBES (QLatin1String("org.freedesktop.Telepathy.Channel.Type.Tubes"))
04941 
04948 #define TP_QT_IFACE_CHANNEL_INTERFACE_ANONYMITY (QLatin1String("org.freedesktop.Telepathy.Channel.Interface.Anonymity"))
04949 
04956 #define TP_QT_IFACE_CHANNEL_INTERFACE_CAPTCHA_AUTHENTICATION (QLatin1String("org.freedesktop.Telepathy.Channel.Interface.CaptchaAuthentication1"))
04957 
04964 #define TP_QT_IFACE_CHANNEL_INTERFACE_CALL_STATE (QLatin1String("org.freedesktop.Telepathy.Channel.Interface.CallState"))
04965 
04972 #define TP_QT_IFACE_CHANNEL_INTERFACE_CHAT_STATE (QLatin1String("org.freedesktop.Telepathy.Channel.Interface.ChatState"))
04973 
04980 #define TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE (QLatin1String("org.freedesktop.Telepathy.Channel.Interface.Conference"))
04981 
04988 #define TP_QT_IFACE_CHANNEL_INTERFACE_DESTROYABLE (QLatin1String("org.freedesktop.Telepathy.Channel.Interface.Destroyable"))
04989 
04996 #define TP_QT_IFACE_CHANNEL_INTERFACE_DTMF (QLatin1String("org.freedesktop.Telepathy.Channel.Interface.DTMF"))
04997 
05004 #define TP_QT_IFACE_CHANNEL_INTERFACE_FILE_TRANSFER_METADATA (QLatin1String("org.freedesktop.Telepathy.Channel.Interface.FileTransfer.Metadata"))
05005 
05012 #define TP_QT_IFACE_CHANNEL_INTERFACE_GROUP (QLatin1String("org.freedesktop.Telepathy.Channel.Interface.Group"))
05013 
05020 #define TP_QT_IFACE_CHANNEL_INTERFACE_HOLD (QLatin1String("org.freedesktop.Telepathy.Channel.Interface.Hold"))
05021 
05028 #define TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING (QLatin1String("org.freedesktop.Telepathy.Channel.Interface.MediaSignalling"))
05029 
05036 #define TP_QT_IFACE_CHANNEL_INTERFACE_MESSAGES (QLatin1String("org.freedesktop.Telepathy.Channel.Interface.Messages"))
05037 
05044 #define TP_QT_IFACE_CHANNEL_INTERFACE_PASSWORD (QLatin1String("org.freedesktop.Telepathy.Channel.Interface.Password"))
05045 
05052 #define TP_QT_IFACE_CHANNEL_INTERFACE_SASL_AUTHENTICATION (QLatin1String("org.freedesktop.Telepathy.Channel.Interface.SASLAuthentication"))
05053 
05060 #define TP_QT_IFACE_CHANNEL_INTERFACE_SECURABLE (QLatin1String("org.freedesktop.Telepathy.Channel.Interface.Securable"))
05061 
05068 #define TP_QT_IFACE_CHANNEL_INTERFACE_SERVICE_POINT (QLatin1String("org.freedesktop.Telepathy.Channel.Interface.ServicePoint"))
05069 
05076 #define TP_QT_IFACE_CHANNEL_INTERFACE_SMS (QLatin1String("org.freedesktop.Telepathy.Channel.Interface.SMS"))
05077 
05084 #define TP_QT_IFACE_CHANNEL_INTERFACE_TUBE (QLatin1String("org.freedesktop.Telepathy.Channel.Interface.Tube"))
05085 
05092 #define TP_QT_IFACE_CHANNEL_DISPATCHER (QLatin1String("org.freedesktop.Telepathy.ChannelDispatcher"))
05093 
05100 #define TP_QT_IFACE_CHANNEL_DISPATCH_OPERATION (QLatin1String("org.freedesktop.Telepathy.ChannelDispatchOperation"))
05101 
05108 #define TP_QT_IFACE_CHANNEL_REQUEST (QLatin1String("org.freedesktop.Telepathy.ChannelRequest"))
05109 
05116 #define TP_QT_IFACE_MEDIA_SESSION_HANDLER (QLatin1String("org.freedesktop.Telepathy.Media.SessionHandler"))
05117 
05124 #define TP_QT_IFACE_MEDIA_STREAM_HANDLER (QLatin1String("org.freedesktop.Telepathy.Media.StreamHandler"))
05125 
05132 #define TP_QT_IFACE_DBUS_DAEMON (QLatin1String("org.freedesktop.DBus"))
05133 
05140 #define TP_QT_IFACE_INTROSPECTABLE (QLatin1String("org.freedesktop.DBus.Introspectable"))
05141 
05148 #define TP_QT_IFACE_PEER (QLatin1String("org.freedesktop.DBus.Peer"))
05149 
05156 #define TP_QT_IFACE_PROPERTIES (QLatin1String("org.freedesktop.DBus.Properties"))
05157 
05164 #define TP_QT_IFACE_DEBUG (QLatin1String("org.freedesktop.Telepathy.Debug"))
05165 
05172 #define TP_QT_IFACE_PROPERTIES_INTERFACE (QLatin1String("org.freedesktop.Telepathy.Properties"))
05173 
05180 #define TP_QT_IFACE_ACCOUNT_MANAGER (QLatin1String("org.freedesktop.Telepathy.AccountManager"))
05181 
05188 #define TP_QT_IFACE_ACCOUNT (QLatin1String("org.freedesktop.Telepathy.Account"))
05189 
05196 #define TP_QT_IFACE_ACCOUNT_INTERFACE_ADDRESSING (QLatin1String("org.freedesktop.Telepathy.Account.Interface.Addressing"))
05197 
05204 #define TP_QT_IFACE_ACCOUNT_INTERFACE_AVATAR (QLatin1String("org.freedesktop.Telepathy.Account.Interface.Avatar"))
05205 
05212 #define TP_QT_IFACE_ACCOUNT_INTERFACE_STORAGE (QLatin1String("org.freedesktop.Telepathy.Account.Interface.Storage"))
05213 
05220 #define TP_QT_IFACE_CLIENT (QLatin1String("org.freedesktop.Telepathy.Client"))
05221 
05228 #define TP_QT_IFACE_CLIENT_OBSERVER (QLatin1String("org.freedesktop.Telepathy.Client.Observer"))
05229 
05236 #define TP_QT_IFACE_CLIENT_APPROVER (QLatin1String("org.freedesktop.Telepathy.Client.Approver"))
05237 
05244 #define TP_QT_IFACE_CLIENT_HANDLER (QLatin1String("org.freedesktop.Telepathy.Client.Handler"))
05245 
05252 #define TP_QT_IFACE_CLIENT_INTERFACE_REQUESTS (QLatin1String("org.freedesktop.Telepathy.Client.Interface.Requests"))
05253 
05260 #define TP_QT_IFACE_AUTHENTICATION_TLS_CERTIFICATE (QLatin1String("org.freedesktop.Telepathy.Authentication.TLSCertificate"))
05261 
05268 #define TP_QT_IFACE_CALL_CONTENT_INTERFACE_MEDIA (QLatin1String("org.freedesktop.Telepathy.Call1.Content.Interface.Media"))
05269 
05276 #define TP_QT_IFACE_CALL_CONTENT_INTERFACE_DTMF (QLatin1String("org.freedesktop.Telepathy.Call1.Content.Interface.DTMF"))
05277 
05284 #define TP_QT_IFACE_CALL_CONTENT_INTERFACE_VIDEO_CONTROL (QLatin1String("org.freedesktop.Telepathy.Call1.Content.Interface.VideoControl"))
05285 
05292 #define TP_QT_IFACE_CALL_CONTENT_INTERFACE_AUDIO_CONTROL (QLatin1String("org.freedesktop.Telepathy.Call1.Content.Interface.AudioControl"))
05293 
05300 #define TP_QT_IFACE_CALL_CONTENT (QLatin1String("org.freedesktop.Telepathy.Call1.Content"))
05301 
05308 #define TP_QT_IFACE_CALL_CONTENT_MEDIA_DESCRIPTION_INTERFACE_RTCP_EXTENDED_REPORTS (QLatin1String("org.freedesktop.Telepathy.Call1.Content.MediaDescription.Interface.RTCPExtendedReports"))
05309 
05316 #define TP_QT_IFACE_CALL_CONTENT_MEDIA_DESCRIPTION_INTERFACE_RTCP_FEEDBACK (QLatin1String("org.freedesktop.Telepathy.Call1.Content.MediaDescription.Interface.RTCPFeedback"))
05317 
05324 #define TP_QT_IFACE_CALL_CONTENT_MEDIA_DESCRIPTION_INTERFACE_RTP_HEADER_EXTENSIONS (QLatin1String("org.freedesktop.Telepathy.Call1.Content.MediaDescription.Interface.RTPHeaderExtensions"))
05325 
05332 #define TP_QT_IFACE_CALL_CONTENT_MEDIA_DESCRIPTION (QLatin1String("org.freedesktop.Telepathy.Call1.Content.MediaDescription"))
05333 
05340 #define TP_QT_IFACE_CALL_STREAM_INTERFACE_MEDIA (QLatin1String("org.freedesktop.Telepathy.Call1.Stream.Interface.Media"))
05341 
05348 #define TP_QT_IFACE_CALL_STREAM (QLatin1String("org.freedesktop.Telepathy.Call1.Stream"))
05349 
05356 #define TP_QT_IFACE_CALL_STREAM_ENDPOINT (QLatin1String("org.freedesktop.Telepathy.Call1.Stream.Endpoint"))
05357 
05366 #define TP_QT_ERROR_NETWORK_ERROR QLatin1String("org.freedesktop.Telepathy.Error.NetworkError")
05367 
05377 #define TP_QT_ERROR_NOT_IMPLEMENTED QLatin1String("org.freedesktop.Telepathy.Error.NotImplemented")
05378 
05387 #define TP_QT_ERROR_INVALID_ARGUMENT QLatin1String("org.freedesktop.Telepathy.Error.InvalidArgument")
05388 
05397 #define TP_QT_ERROR_NOT_AVAILABLE QLatin1String("org.freedesktop.Telepathy.Error.NotAvailable")
05398 
05407 #define TP_QT_ERROR_PERMISSION_DENIED QLatin1String("org.freedesktop.Telepathy.Error.PermissionDenied")
05408 
05421 #define TP_QT_ERROR_DISCONNECTED QLatin1String("org.freedesktop.Telepathy.Error.Disconnected")
05422 
05431 #define TP_QT_ERROR_INVALID_HANDLE QLatin1String("org.freedesktop.Telepathy.Error.InvalidHandle")
05432 
05441 #define TP_QT_ERROR_CHANNEL_BANNED QLatin1String("org.freedesktop.Telepathy.Error.Channel.Banned")
05442 
05451 #define TP_QT_ERROR_CHANNEL_FULL QLatin1String("org.freedesktop.Telepathy.Error.Channel.Full")
05452 
05461 #define TP_QT_ERROR_CHANNEL_INVITE_ONLY QLatin1String("org.freedesktop.Telepathy.Error.Channel.InviteOnly")
05462 
05478 #define TP_QT_ERROR_NOT_YOURS QLatin1String("org.freedesktop.Telepathy.Error.NotYours")
05479 
05497 #define TP_QT_ERROR_CANCELLED QLatin1String("org.freedesktop.Telepathy.Error.Cancelled")
05498 
05508 #define TP_QT_ERROR_AUTHENTICATION_FAILED QLatin1String("org.freedesktop.Telepathy.Error.AuthenticationFailed")
05509 
05523 #define TP_QT_ERROR_ENCRYPTION_NOT_AVAILABLE QLatin1String("org.freedesktop.Telepathy.Error.EncryptionNotAvailable")
05524 
05535 #define TP_QT_ERROR_ENCRYPTION_ERROR QLatin1String("org.freedesktop.Telepathy.Error.EncryptionError")
05536 
05551 #define TP_QT_ERROR_CERT_NOT_PROVIDED QLatin1String("org.freedesktop.Telepathy.Error.Cert.NotProvided")
05552 
05566 #define TP_QT_ERROR_CERT_UNTRUSTED QLatin1String("org.freedesktop.Telepathy.Error.Cert.Untrusted")
05567 
05578 #define TP_QT_ERROR_CERT_EXPIRED QLatin1String("org.freedesktop.Telepathy.Error.Cert.Expired")
05579 
05591 #define TP_QT_ERROR_CERT_NOT_ACTIVATED QLatin1String("org.freedesktop.Telepathy.Error.Cert.NotActivated")
05592 
05604 #define TP_QT_ERROR_CERT_FINGERPRINT_MISMATCH QLatin1String("org.freedesktop.Telepathy.Error.Cert.FingerprintMismatch")
05605 
05625 #define TP_QT_ERROR_CERT_HOSTNAME_MISMATCH QLatin1String("org.freedesktop.Telepathy.Error.Cert.HostnameMismatch")
05626 
05638 #define TP_QT_ERROR_CERT_SELF_SIGNED QLatin1String("org.freedesktop.Telepathy.Error.Cert.SelfSigned")
05639 
05650 #define TP_QT_ERROR_CERT_REVOKED QLatin1String("org.freedesktop.Telepathy.Error.Cert.Revoked")
05651 
05663 #define TP_QT_ERROR_CERT_INSECURE QLatin1String("org.freedesktop.Telepathy.Error.Cert.Insecure")
05664 
05676 #define TP_QT_ERROR_CERT_INVALID QLatin1String("org.freedesktop.Telepathy.Error.Cert.Invalid")
05677 
05690 #define TP_QT_ERROR_CERT_LIMIT_EXCEEDED QLatin1String("org.freedesktop.Telepathy.Error.Cert.LimitExceeded")
05691 
05701 #define TP_QT_ERROR_NOT_CAPABLE QLatin1String("org.freedesktop.Telepathy.Error.NotCapable")
05702 
05713 #define TP_QT_ERROR_OFFLINE QLatin1String("org.freedesktop.Telepathy.Error.Offline")
05714 
05725 #define TP_QT_ERROR_CHANNEL_KICKED QLatin1String("org.freedesktop.Telepathy.Error.Channel.Kicked")
05726 
05739 #define TP_QT_ERROR_BUSY QLatin1String("org.freedesktop.Telepathy.Error.Busy")
05740 
05751 #define TP_QT_ERROR_NO_ANSWER QLatin1String("org.freedesktop.Telepathy.Error.NoAnswer")
05752 
05763 #define TP_QT_ERROR_DOES_NOT_EXIST QLatin1String("org.freedesktop.Telepathy.Error.DoesNotExist")
05764 
05776 #define TP_QT_ERROR_TERMINATED QLatin1String("org.freedesktop.Telepathy.Error.Terminated")
05777 
05787 #define TP_QT_ERROR_MEDIA_CODECS_INCOMPATIBLE QLatin1String("org.freedesktop.Telepathy.Error.Media.CodecsIncompatible")
05788 
05798 #define TP_QT_ERROR_MEDIA_UNSUPPORTED_TYPE QLatin1String("org.freedesktop.Telepathy.Error.Media.UnsupportedType")
05799 
05809 #define TP_QT_ERROR_MEDIA_STREAMING_ERROR QLatin1String("org.freedesktop.Telepathy.Error.Media.StreamingError")
05810 
05819 #define TP_QT_ERROR_CONNECTION_REFUSED QLatin1String("org.freedesktop.Telepathy.Error.ConnectionRefused")
05820 
05829 #define TP_QT_ERROR_CONNECTION_FAILED QLatin1String("org.freedesktop.Telepathy.Error.ConnectionFailed")
05830 
05839 #define TP_QT_ERROR_CONNECTION_LOST QLatin1String("org.freedesktop.Telepathy.Error.ConnectionLost")
05840 
05854 #define TP_QT_ERROR_ALREADY_CONNECTED QLatin1String("org.freedesktop.Telepathy.Error.AlreadyConnected")
05855 
05871 #define TP_QT_ERROR_CONNECTION_REPLACED QLatin1String("org.freedesktop.Telepathy.Error.ConnectionReplaced")
05872 
05882 #define TP_QT_ERROR_REGISTRATION_EXISTS QLatin1String("org.freedesktop.Telepathy.Error.RegistrationExists")
05883 
05901 #define TP_QT_ERROR_SERVICE_BUSY QLatin1String("org.freedesktop.Telepathy.Error.ServiceBusy")
05902 
05914 #define TP_QT_ERROR_RESOURCE_UNAVAILABLE QLatin1String("org.freedesktop.Telepathy.Error.ResourceUnavailable")
05915 
05928 #define TP_QT_ERROR_WOULD_BREAK_ANONYMITY QLatin1String("org.freedesktop.Telepathy.Error.WouldBreakAnonymity")
05929 
05939 #define TP_QT_ERROR_NOT_YET QLatin1String("org.freedesktop.Telepathy.Error.NotYet")
05940 
05949 #define TP_QT_ERROR_REJECTED QLatin1String("org.freedesktop.Telepathy.Error.Rejected")
05950 
05960 #define TP_QT_ERROR_PICKED_UP_ELSEWHERE QLatin1String("org.freedesktop.Telepathy.Error.PickedUpElsewhere")
05961 
05975 #define TP_QT_ERROR_SERVICE_CONFUSED QLatin1String("org.freedesktop.Telepathy.Error.ServiceConfused")
05976 
05992 #define TP_QT_ERROR_CONFUSED QLatin1String("org.freedesktop.Telepathy.Error.Confused")
05993 
06018 #define TP_QT_ERROR_SOFTWARE_UPGRADE_REQUIRED QLatin1String("org.freedesktop.Telepathy.Error.SoftwareUpgradeRequired")
06019 
06034 #define TP_QT_ERROR_EMERGENCY_CALLS_NOT_SUPPORTED QLatin1String("org.freedesktop.Telepathy.Error.EmergencyCallsNotSupported")
06035 
06056 #define TP_QT_ERROR_INSUFFICIENT_BALANCE QLatin1String("org.freedesktop.Telepathy.Error.InsufficientBalance")
06057 
06070 #define TP_QT_ERROR_CAPTCHA_NOT_SUPPORTED QLatin1String("org.freedesktop.Telepathy.Error.CaptchaNotSupported")
06071 


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01040.html0000644000175200001440000000427112000060453021616 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::CandidatePair Member List
This is the complete list of members for Tp::CandidatePair, including all inherited members.
localTp::CandidatePair
remoteTp::CandidatePair


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00115.html0000644000175200001440000035342512000060453021630 0ustar00collabora-develusers00000000000000 Tp::ChannelFactory Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The ChannelFactory class is responsible for constructing Channel objects according to application-defined settings. More...

#include <TelepathyQt/ChannelFactory>

Inherits Tp::DBusProxyFactory.

List of all members.

Public Member Functions

Static Public Member Functions

  • static ChannelFactoryPtr create (const QDBusConnection &bus)

Protected Member Functions


Detailed Description

The ChannelFactory class is responsible for constructing Channel objects according to application-defined settings.


Constructor & Destructor Documentation

Class destructor.

Tp::ChannelFactory::ChannelFactory ( const QDBusConnection &  bus) [protected]

Construct a new ChannelFactory object.

The constructed factory will construct channel subclasses provided by TelepathyQt as appropriate for the channel immutable properties, but not make any features ready.

Parameters:
busThe QDBusConnection the proxies constructed using this factory should use.

Member Function Documentation

ChannelFactoryPtr Tp::ChannelFactory::create ( const QDBusConnection &  bus) [static]

Create a new ChannelFactory object.

The returned factory will construct channel subclasses provided by TelepathyQt as appropriate for the channel immutable properties, but not make any features ready.

Parameters:
busThe QDBusConnection the proxies constructed using this factory should use.
Returns:
An ChannelFactoryPtr pointing to the newly created factory.
Features Tp::ChannelFactory::featuresForTextChats ( const QVariantMap &  additionalProps = QVariantMap()) const
void Tp::ChannelFactory::addFeaturesForTextChats ( const Features features,
const QVariantMap &  additionalProps = QVariantMap() 
)
ChannelFactory::ConstructorConstPtr Tp::ChannelFactory::constructorForTextChats ( const QVariantMap &  additionalProps = QVariantMap()) const
template<typename Subclass >
void Tp::ChannelFactory::setSubclassForTextChats ( const QVariantMap &  additionalProps = QVariantMap()) [inline]
void Tp::ChannelFactory::setConstructorForTextChats ( const ConstructorConstPtr &  ctor,
const QVariantMap &  additionalProps = QVariantMap() 
)
Features Tp::ChannelFactory::featuresForTextChatrooms ( const QVariantMap &  additionalProps = QVariantMap()) const
void Tp::ChannelFactory::addFeaturesForTextChatrooms ( const Features features,
const QVariantMap &  additionalProps = QVariantMap() 
)
ChannelFactory::ConstructorConstPtr Tp::ChannelFactory::constructorForTextChatrooms ( const QVariantMap &  additionalProps = QVariantMap()) const
template<typename Subclass >
void Tp::ChannelFactory::setSubclassForTextChatrooms ( const QVariantMap &  additionalProps = QVariantMap()) [inline]
void Tp::ChannelFactory::setConstructorForTextChatrooms ( const ConstructorConstPtr &  ctor,
const QVariantMap &  additionalProps = QVariantMap() 
)
Features Tp::ChannelFactory::featuresForCalls ( const QVariantMap &  additionalProps = QVariantMap()) const
void Tp::ChannelFactory::addFeaturesForCalls ( const Features features,
const QVariantMap &  additionalProps = QVariantMap() 
)
template<typename Subclass >
void Tp::ChannelFactory::setSubclassForCalls ( const QVariantMap &  additionalProps = QVariantMap()) [inline]
void Tp::ChannelFactory::setConstructorForCalls ( const ConstructorConstPtr &  ctor,
const QVariantMap &  additionalProps = QVariantMap() 
)
Features Tp::ChannelFactory::featuresForStreamedMediaCalls ( const QVariantMap &  additionalProps = QVariantMap()) const
void Tp::ChannelFactory::addFeaturesForStreamedMediaCalls ( const Features features,
const QVariantMap &  additionalProps = QVariantMap() 
)
ChannelFactory::ConstructorConstPtr Tp::ChannelFactory::constructorForStreamedMediaCalls ( const QVariantMap &  additionalProps = QVariantMap()) const
template<typename Subclass >
void Tp::ChannelFactory::setSubclassForStreamedMediaCalls ( const QVariantMap &  additionalProps = QVariantMap()) [inline]
void Tp::ChannelFactory::setConstructorForStreamedMediaCalls ( const ConstructorConstPtr &  ctor,
const QVariantMap &  additionalProps = QVariantMap() 
)
Features Tp::ChannelFactory::featuresForRoomLists ( const QVariantMap &  additionalProps = QVariantMap()) const
void Tp::ChannelFactory::addFeaturesForRoomLists ( const Features features,
const QVariantMap &  additionalProps = QVariantMap() 
)
ChannelFactory::ConstructorConstPtr Tp::ChannelFactory::constructorForRoomLists ( const QVariantMap &  additionalProps = QVariantMap()) const
template<typename Subclass >
void Tp::ChannelFactory::setSubclassForRoomLists ( const QVariantMap &  additionalProps = QVariantMap()) [inline]
void Tp::ChannelFactory::setConstructorForRoomLists ( const ConstructorConstPtr &  ctor,
const QVariantMap &  additionalProps = QVariantMap() 
)
Features Tp::ChannelFactory::featuresForOutgoingFileTransfers ( const QVariantMap &  additionalProps = QVariantMap()) const
void Tp::ChannelFactory::addFeaturesForOutgoingFileTransfers ( const Features features,
const QVariantMap &  additionalProps = QVariantMap() 
)
ChannelFactory::ConstructorConstPtr Tp::ChannelFactory::constructorForOutgoingFileTransfers ( const QVariantMap &  additionalProps = QVariantMap()) const
template<typename Subclass >
void Tp::ChannelFactory::setSubclassForOutgoingFileTransfers ( const QVariantMap &  additionalProps = QVariantMap()) [inline]
void Tp::ChannelFactory::setConstructorForOutgoingFileTransfers ( const ConstructorConstPtr &  ctor,
const QVariantMap &  additionalProps = QVariantMap() 
)
Features Tp::ChannelFactory::featuresForIncomingFileTransfers ( const QVariantMap &  additionalProps = QVariantMap()) const
void Tp::ChannelFactory::addFeaturesForIncomingFileTransfers ( const Features features,
const QVariantMap &  additionalProps = QVariantMap() 
)
ChannelFactory::ConstructorConstPtr Tp::ChannelFactory::constructorForIncomingFileTransfers ( const QVariantMap &  additionalProps = QVariantMap()) const
template<typename Subclass >
void Tp::ChannelFactory::setSubclassForIncomingFileTransfers ( const QVariantMap &  additionalProps = QVariantMap()) [inline]
void Tp::ChannelFactory::setConstructorForIncomingFileTransfers ( const ConstructorConstPtr &  ctor,
const QVariantMap &  additionalProps = QVariantMap() 
)
Features Tp::ChannelFactory::featuresForOutgoingStreamTubes ( const QVariantMap &  additionalProps = QVariantMap()) const
void Tp::ChannelFactory::addFeaturesForOutgoingStreamTubes ( const Features features,
const QVariantMap &  additionalProps = QVariantMap() 
)
ChannelFactory::ConstructorConstPtr Tp::ChannelFactory::constructorForOutgoingStreamTubes ( const QVariantMap &  additionalProps = QVariantMap()) const
template<typename Subclass >
void Tp::ChannelFactory::setSubclassForOutgoingStreamTubes ( const QVariantMap &  additionalProps = QVariantMap()) [inline]
void Tp::ChannelFactory::setConstructorForOutgoingStreamTubes ( const ConstructorConstPtr &  ctor,
const QVariantMap &  additionalProps = QVariantMap() 
)
Features Tp::ChannelFactory::featuresForIncomingStreamTubes ( const QVariantMap &  additionalProps = QVariantMap()) const
void Tp::ChannelFactory::addFeaturesForIncomingStreamTubes ( const Features features,
const QVariantMap &  additionalProps = QVariantMap() 
)
ChannelFactory::ConstructorConstPtr Tp::ChannelFactory::constructorForIncomingStreamTubes ( const QVariantMap &  additionalProps = QVariantMap()) const
template<typename Subclass >
void Tp::ChannelFactory::setSubclassForIncomingStreamTubes ( const QVariantMap &  additionalProps = QVariantMap()) [inline]
void Tp::ChannelFactory::setConstructorForIncomingStreamTubes ( const ConstructorConstPtr &  ctor,
const QVariantMap &  additionalProps = QVariantMap() 
)
Features Tp::ChannelFactory::featuresForOutgoingRoomStreamTubes ( const QVariantMap &  additionalProps = QVariantMap()) const
void Tp::ChannelFactory::addFeaturesForOutgoingRoomStreamTubes ( const Features features,
const QVariantMap &  additionalProps = QVariantMap() 
)
ChannelFactory::ConstructorConstPtr Tp::ChannelFactory::constructorForOutgoingRoomStreamTubes ( const QVariantMap &  additionalProps = QVariantMap()) const
template<typename Subclass >
void Tp::ChannelFactory::setSubclassForOutgoingRoomStreamTubes ( const QVariantMap &  additionalProps = QVariantMap()) [inline]
void Tp::ChannelFactory::setConstructorForOutgoingRoomStreamTubes ( const ConstructorConstPtr &  ctor,
const QVariantMap &  additionalProps = QVariantMap() 
)
Features Tp::ChannelFactory::featuresForIncomingRoomStreamTubes ( const QVariantMap &  additionalProps = QVariantMap()) const
void Tp::ChannelFactory::addFeaturesForIncomingRoomStreamTubes ( const Features features,
const QVariantMap &  additionalProps = QVariantMap() 
)
ChannelFactory::ConstructorConstPtr Tp::ChannelFactory::constructorForIncomingRoomStreamTubes ( const QVariantMap &  additionalProps = QVariantMap()) const
template<typename Subclass >
void Tp::ChannelFactory::setSubclassForIncomingRoomStreamTubes ( const QVariantMap &  additionalProps = QVariantMap()) [inline]
void Tp::ChannelFactory::setConstructorForIncomingRoomStreamTubes ( const ConstructorConstPtr &  ctor,
const QVariantMap &  additionalProps = QVariantMap() 
)
Features Tp::ChannelFactory::featuresForOutgoingDBusTubes ( const QVariantMap &  additionalProps = QVariantMap()) const
void Tp::ChannelFactory::addFeaturesForOutgoingDBusTubes ( const Features features,
const QVariantMap &  additionalProps = QVariantMap() 
)
ChannelFactory::ConstructorConstPtr Tp::ChannelFactory::constructorForOutgoingDBusTubes ( const QVariantMap &  additionalProps = QVariantMap()) const
template<typename Subclass >
void Tp::ChannelFactory::setSubclassForOutgoingDBusTubes ( const QVariantMap &  additionalProps = QVariantMap()) [inline]
void Tp::ChannelFactory::setConstructorForOutgoingDBusTubes ( const ConstructorConstPtr &  ctor,
const QVariantMap &  additionalProps = QVariantMap() 
)
Features Tp::ChannelFactory::featuresForIncomingDBusTubes ( const QVariantMap &  additionalProps = QVariantMap()) const
void Tp::ChannelFactory::addFeaturesForIncomingDBusTubes ( const Features features,
const QVariantMap &  additionalProps = QVariantMap() 
)
ChannelFactory::ConstructorConstPtr Tp::ChannelFactory::constructorForIncomingDBusTubes ( const QVariantMap &  additionalProps = QVariantMap()) const
template<typename Subclass >
void Tp::ChannelFactory::setSubclassForIncomingDBusTubes ( const QVariantMap &  additionalProps = QVariantMap()) [inline]
void Tp::ChannelFactory::setConstructorForIncomingDBusTubes ( const ConstructorConstPtr &  ctor,
const QVariantMap &  additionalProps = QVariantMap() 
)
Features Tp::ChannelFactory::featuresForOutgoingRoomDBusTubes ( const QVariantMap &  additionalProps = QVariantMap()) const
void Tp::ChannelFactory::addFeaturesForOutgoingRoomDBusTubes ( const Features features,
const QVariantMap &  additionalProps = QVariantMap() 
)
ChannelFactory::ConstructorConstPtr Tp::ChannelFactory::constructorForOutgoingRoomDBusTubes ( const QVariantMap &  additionalProps = QVariantMap()) const
template<typename Subclass >
void Tp::ChannelFactory::setSubclassForOutgoingRoomDBusTubes ( const QVariantMap &  additionalProps = QVariantMap()) [inline]
void Tp::ChannelFactory::setConstructorForOutgoingRoomDBusTubes ( const ConstructorConstPtr &  ctor,
const QVariantMap &  additionalProps = QVariantMap() 
)
Features Tp::ChannelFactory::featuresForIncomingRoomDBusTubes ( const QVariantMap &  additionalProps = QVariantMap()) const
void Tp::ChannelFactory::addFeaturesForIncomingRoomDBusTubes ( const Features features,
const QVariantMap &  additionalProps = QVariantMap() 
)
ChannelFactory::ConstructorConstPtr Tp::ChannelFactory::constructorForIncomingRoomDBusTubes ( const QVariantMap &  additionalProps = QVariantMap()) const
template<typename Subclass >
void Tp::ChannelFactory::setSubclassForIncomingRoomDBusTubes ( const QVariantMap &  additionalProps = QVariantMap()) [inline]
void Tp::ChannelFactory::setConstructorForIncomingRoomDBusTubes ( const ConstructorConstPtr &  ctor,
const QVariantMap &  additionalProps = QVariantMap() 
)
Features Tp::ChannelFactory::featuresForContactSearches ( const QVariantMap &  additionalProps = QVariantMap()) const
void Tp::ChannelFactory::addFeaturesForContactSearches ( const Features features,
const QVariantMap &  additionalProps = QVariantMap() 
)
ChannelFactory::ConstructorConstPtr Tp::ChannelFactory::constructorForContactSearches ( const QVariantMap &  additionalProps = QVariantMap()) const
template<typename Subclass >
void Tp::ChannelFactory::setSubclassForContactSearches ( const QVariantMap &  additionalProps = QVariantMap()) [inline]
void Tp::ChannelFactory::setConstructorForContactSearches ( const ConstructorConstPtr &  ctor,
const QVariantMap &  additionalProps = QVariantMap() 
)
Features Tp::ChannelFactory::featuresForServerAuthentication ( const QVariantMap &  additionalProps = QVariantMap()) const
void Tp::ChannelFactory::addFeaturesForServerAuthentication ( const Features features,
const QVariantMap &  additionalProps = QVariantMap() 
)
ChannelFactory::ConstructorConstPtr Tp::ChannelFactory::constructorForServerAuthentication ( const QVariantMap &  additionalProps = QVariantMap()) const
template<typename Subclass >
void Tp::ChannelFactory::setSubclassForServerAuthentication ( const QVariantMap &  additionalProps = QVariantMap()) [inline]
void Tp::ChannelFactory::setConstructorForServerAuthentication ( const ConstructorConstPtr &  ctor,
const QVariantMap &  additionalProps = QVariantMap() 
)
void Tp::ChannelFactory::addCommonFeatures ( const Features features)
ChannelFactory::ConstructorConstPtr Tp::ChannelFactory::fallbackConstructor ( ) const
template<typename Subclass >
void Tp::ChannelFactory::setFallbackSubclass ( ) [inline]
void Tp::ChannelFactory::setFallbackConstructor ( const ConstructorConstPtr &  ctor)
void Tp::ChannelFactory::addFeaturesFor ( const ChannelClassSpec channelClass,
const Features features 
)
template<typename Subclass >
void Tp::ChannelFactory::setSubclassFor ( const ChannelClassSpec channelClass) [inline]
ChannelFactory::ConstructorConstPtr Tp::ChannelFactory::constructorFor ( const ChannelClassSpec channelClass) const
void Tp::ChannelFactory::setConstructorFor ( const ChannelClassSpec channelClass,
const ConstructorConstPtr &  ctor 
)
PendingReady * Tp::ChannelFactory::proxy ( const ConnectionPtr &  connection,
const QString &  channelPath,
const QVariantMap &  immutableProperties 
) const

Constructs a Channel proxy and begins making it ready.

If a valid proxy already exists in the factory cache for the given combination of busName and objectPath, it is returned instead. All newly created proxies are automatically cached until they're either DBusProxy::invalidated() or the last reference to them outside the factory has been dropped.

The proxy can be accessed immediately after this function returns using PendingReady::proxy().

Parameters:
connectionProxy for the owning connection of the channel.
channelPathThe object path of the channel.
immutablePropertiesThe immutable properties of the channel.
Returns:
A PendingReady operation with the proxy in PendingReady::proxy().
QString Tp::ChannelFactory::finalBusNameFrom ( const QString &  uniqueOrWellKnown) const [protected, virtual]

Transforms well-known names to the corresponding unique names, as is appropriate for Channel

Parameters:
uniqueOrWellKnownThe name to transform.
Returns:
The unique name corresponding to uniqueOrWellKnown (which may be it itself).

Implements Tp::DBusProxyFactory.

Features Tp::ChannelFactory::featuresFor ( const DBusProxyPtr &  proxy) const [protected, virtual]

Return features as configured for the channel class given by the Channel::immutableProperties() of proxy.

Parameters:
proxyThe Channel proxy to determine the features for.
Returns:
A list of Feature objects.

Implements Tp::DBusProxyFactory.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00821.html0000644000175200001440000007657612000060453021645 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ChannelFactory Member List
This is the complete list of members for Tp::ChannelFactory, including all inherited members.
addCommonFeatures(const Features &features)Tp::ChannelFactory
addFeaturesFor(const ChannelClassSpec &channelClass, const Features &features)Tp::ChannelFactory
addFeaturesForCalls(const Features &features, const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory
addFeaturesForContactSearches(const Features &features, const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory
addFeaturesForIncomingDBusTubes(const Features &features, const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory
addFeaturesForIncomingFileTransfers(const Features &features, const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory
addFeaturesForIncomingRoomDBusTubes(const Features &features, const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory
addFeaturesForIncomingRoomStreamTubes(const Features &features, const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory
addFeaturesForIncomingStreamTubes(const Features &features, const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory
addFeaturesForOutgoingDBusTubes(const Features &features, const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory
addFeaturesForOutgoingFileTransfers(const Features &features, const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory
addFeaturesForOutgoingRoomDBusTubes(const Features &features, const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory
addFeaturesForOutgoingRoomStreamTubes(const Features &features, const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory
addFeaturesForOutgoingStreamTubes(const Features &features, const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory
addFeaturesForRoomLists(const Features &features, const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory
addFeaturesForServerAuthentication(const Features &features, const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory
addFeaturesForStreamedMediaCalls(const Features &features, const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory
addFeaturesForTextChatrooms(const Features &features, const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory
addFeaturesForTextChats(const Features &features, const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory
cachedProxy(const QString &busName, const QString &objectPath) const Tp::DBusProxyFactory [protected]
ChannelFactory(const QDBusConnection &bus)Tp::ChannelFactory [protected]
commonFeatures() const Tp::ChannelFactory
constructorFor(const ChannelClassSpec &channelClass) const Tp::ChannelFactory
constructorForContactSearches(const QVariantMap &additionalProps=QVariantMap()) const Tp::ChannelFactory
constructorForIncomingDBusTubes(const QVariantMap &additionalProps=QVariantMap()) const Tp::ChannelFactory
constructorForIncomingFileTransfers(const QVariantMap &additionalProps=QVariantMap()) const Tp::ChannelFactory
constructorForIncomingRoomDBusTubes(const QVariantMap &additionalProps=QVariantMap()) const Tp::ChannelFactory
constructorForIncomingRoomStreamTubes(const QVariantMap &additionalProps=QVariantMap()) const Tp::ChannelFactory
constructorForIncomingStreamTubes(const QVariantMap &additionalProps=QVariantMap()) const Tp::ChannelFactory
constructorForOutgoingDBusTubes(const QVariantMap &additionalProps=QVariantMap()) const Tp::ChannelFactory
constructorForOutgoingFileTransfers(const QVariantMap &additionalProps=QVariantMap()) const Tp::ChannelFactory
constructorForOutgoingRoomDBusTubes(const QVariantMap &additionalProps=QVariantMap()) const Tp::ChannelFactory
constructorForOutgoingRoomStreamTubes(const QVariantMap &additionalProps=QVariantMap()) const Tp::ChannelFactory
constructorForOutgoingStreamTubes(const QVariantMap &additionalProps=QVariantMap()) const Tp::ChannelFactory
constructorForRoomLists(const QVariantMap &additionalProps=QVariantMap()) const Tp::ChannelFactory
constructorForServerAuthentication(const QVariantMap &additionalProps=QVariantMap()) const Tp::ChannelFactory
constructorForStreamedMediaCalls(const QVariantMap &additionalProps=QVariantMap()) const Tp::ChannelFactory
constructorForTextChatrooms(const QVariantMap &additionalProps=QVariantMap()) const Tp::ChannelFactory
constructorForTextChats(const QVariantMap &additionalProps=QVariantMap()) const Tp::ChannelFactory
create(const QDBusConnection &bus)Tp::ChannelFactory [static]
dbusConnection() const Tp::DBusProxyFactory
DBusProxyFactory(const QDBusConnection &bus)Tp::DBusProxyFactory [protected]
fallbackConstructor() const Tp::ChannelFactory
featuresFor(const ChannelClassSpec &channelClass) const Tp::ChannelFactory
featuresFor(const DBusProxyPtr &proxy) const Tp::ChannelFactory [protected, virtual]
featuresForCalls(const QVariantMap &additionalProps=QVariantMap()) const Tp::ChannelFactory
featuresForContactSearches(const QVariantMap &additionalProps=QVariantMap()) const Tp::ChannelFactory
featuresForIncomingDBusTubes(const QVariantMap &additionalProps=QVariantMap()) const Tp::ChannelFactory
featuresForIncomingFileTransfers(const QVariantMap &additionalProps=QVariantMap()) const Tp::ChannelFactory
featuresForIncomingRoomDBusTubes(const QVariantMap &additionalProps=QVariantMap()) const Tp::ChannelFactory
featuresForIncomingRoomStreamTubes(const QVariantMap &additionalProps=QVariantMap()) const Tp::ChannelFactory
featuresForIncomingStreamTubes(const QVariantMap &additionalProps=QVariantMap()) const Tp::ChannelFactory
featuresForOutgoingDBusTubes(const QVariantMap &additionalProps=QVariantMap()) const Tp::ChannelFactory
featuresForOutgoingFileTransfers(const QVariantMap &additionalProps=QVariantMap()) const Tp::ChannelFactory
featuresForOutgoingRoomDBusTubes(const QVariantMap &additionalProps=QVariantMap()) const Tp::ChannelFactory
featuresForOutgoingRoomStreamTubes(const QVariantMap &additionalProps=QVariantMap()) const Tp::ChannelFactory
featuresForOutgoingStreamTubes(const QVariantMap &additionalProps=QVariantMap()) const Tp::ChannelFactory
featuresForRoomLists(const QVariantMap &additionalProps=QVariantMap()) const Tp::ChannelFactory
featuresForServerAuthentication(const QVariantMap &additionalProps=QVariantMap()) const Tp::ChannelFactory
featuresForStreamedMediaCalls(const QVariantMap &additionalProps=QVariantMap()) const Tp::ChannelFactory
featuresForTextChatrooms(const QVariantMap &additionalProps=QVariantMap()) const Tp::ChannelFactory
featuresForTextChats(const QVariantMap &additionalProps=QVariantMap()) const Tp::ChannelFactory
finalBusNameFrom(const QString &uniqueOrWellKnown) const Tp::ChannelFactory [protected, virtual]
initialPrepare(const DBusProxyPtr &proxy) const Tp::DBusProxyFactory [protected, virtual]
nowHaveProxy(const DBusProxyPtr &proxy) const Tp::DBusProxyFactory [protected]
proxy(const ConnectionPtr &connection, const QString &channelPath, const QVariantMap &immutableProperties) const Tp::ChannelFactory
readyPrepare(const DBusProxyPtr &proxy) const Tp::DBusProxyFactory [protected, virtual]
RefCounted()Tp::RefCounted [inline]
setConstructorFor(const ChannelClassSpec &channelClass, const ConstructorConstPtr &ctor)Tp::ChannelFactory
setConstructorForCalls(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory
setConstructorForContactSearches(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory
setConstructorForIncomingDBusTubes(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory
setConstructorForIncomingFileTransfers(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory
setConstructorForIncomingRoomDBusTubes(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory
setConstructorForIncomingRoomStreamTubes(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory
setConstructorForIncomingStreamTubes(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory
setConstructorForOutgoingDBusTubes(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory
setConstructorForOutgoingFileTransfers(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory
setConstructorForOutgoingRoomDBusTubes(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory
setConstructorForOutgoingRoomStreamTubes(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory
setConstructorForOutgoingStreamTubes(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory
setConstructorForRoomLists(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory
setConstructorForServerAuthentication(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory
setConstructorForStreamedMediaCalls(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory
setConstructorForTextChatrooms(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory
setConstructorForTextChats(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory
setFallbackConstructor(const ConstructorConstPtr &ctor)Tp::ChannelFactory
setFallbackSubclass()Tp::ChannelFactory [inline]
setSubclassFor(const ChannelClassSpec &channelClass)Tp::ChannelFactory [inline]
setSubclassForCalls(const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory [inline]
setSubclassForContactSearches(const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory [inline]
setSubclassForIncomingDBusTubes(const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory [inline]
setSubclassForIncomingFileTransfers(const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory [inline]
setSubclassForIncomingRoomDBusTubes(const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory [inline]
setSubclassForIncomingRoomStreamTubes(const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory [inline]
setSubclassForIncomingStreamTubes(const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory [inline]
setSubclassForOutgoingDBusTubes(const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory [inline]
setSubclassForOutgoingFileTransfers(const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory [inline]
setSubclassForOutgoingRoomDBusTubes(const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory [inline]
setSubclassForOutgoingRoomStreamTubes(const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory [inline]
setSubclassForOutgoingStreamTubes(const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory [inline]
setSubclassForRoomLists(const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory [inline]
setSubclassForServerAuthentication(const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory [inline]
setSubclassForStreamedMediaCalls(const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory [inline]
setSubclassForTextChatrooms(const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory [inline]
setSubclassForTextChats(const QVariantMap &additionalProps=QVariantMap())Tp::ChannelFactory [inline]
~ChannelFactory()Tp::ChannelFactory [virtual]
~DBusProxyFactory()Tp::DBusProxyFactory [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00529_source.html0000644000175200001440000002564512000060453023221 0ustar00collabora-develusers00000000000000 connection-lowlevel.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
connection-lowlevel.h
00001 
00023 #ifndef _TelepathyQt_connection_lowlevel_h_HEADER_GUARD_
00024 #define _TelepathyQt_connection_lowlevel_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Constants>
00031 #include <TelepathyQt/Types>
00032 
00033 namespace Tp
00034 {
00035 
00036 class Connection;
00037 class PendingChannel;
00038 class PendingContactAttributes;
00039 class PendingHandles;
00040 class PendingOperation;
00041 class PendingReady;
00042 
00043 class TP_QT_EXPORT ConnectionLowlevel : public QObject, public RefCounted
00044 {
00045     Q_OBJECT
00046     Q_DISABLE_COPY(ConnectionLowlevel)
00047 
00048 public:
00049     ~ConnectionLowlevel();
00050 
00051     bool isValid() const;
00052     ConnectionPtr connection() const;
00053 
00054     PendingReady *requestConnect(const Features &requestedFeatures = Features());
00055     PendingOperation *requestDisconnect();
00056 
00057     SimpleStatusSpecMap allowedPresenceStatuses() const;
00058     uint maxPresenceStatusMessageLength() const;
00059 
00060     PendingOperation *setSelfPresence(const QString &status, const QString &statusMessage);
00061 
00062     PendingChannel *createChannel(const QVariantMap &request);
00063     PendingChannel *createChannel(const QVariantMap &request, int timeout);
00064     PendingChannel *ensureChannel(const QVariantMap &request);
00065     PendingChannel *ensureChannel(const QVariantMap &request, int timeout);
00066 
00067     PendingHandles *requestHandles(HandleType handleType, const QStringList &names);
00068     PendingHandles *referenceHandles(HandleType handleType, const UIntList &handles);
00069 
00070     PendingContactAttributes *contactAttributes(const UIntList &handles,
00071             const QStringList &interfaces, bool reference = true);
00072     QStringList contactAttributeInterfaces() const;
00073 
00074     void injectContactIds(const HandleIdentifierMap &contactIds);
00075     void injectContactId(uint handle, const QString &contactId);
00076 
00077 private:
00078     friend class Connection;
00079     friend class ContactManager;
00080     friend class PendingContacts;
00081 
00082     TP_QT_NO_EXPORT ConnectionLowlevel(Connection *parent);
00083 
00084     TP_QT_NO_EXPORT bool hasImmortalHandles() const;
00085 
00086     TP_QT_NO_EXPORT bool hasContactId(uint handle) const;
00087     TP_QT_NO_EXPORT QString contactId(uint handle) const;
00088 
00089     struct Private;
00090     friend struct Private;
00091     Private *mPriv;
00092 };
00093 
00094 } // Tp
00095 
00096 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00998.html0000644000175200001440000000474512000060453021651 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Mail Member List
This is the complete list of members for Tp::Mail, including all inherited members.
Mail()Tp::Mail [inline]
Mail(const QMap< QString, QDBusVariant > &a)Tp::Mail [inline]
operator=(const QMap< QString, QDBusVariant > &a)Tp::Mail [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01034.html0000644000175200001440000000510512000060453021616 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::StringVariantMap Member List
This is the complete list of members for Tp::StringVariantMap, including all inherited members.
operator=(const QMap< QString, QDBusVariant > &a)Tp::StringVariantMap [inline]
StringVariantMap()Tp::StringVariantMap [inline]
StringVariantMap(const QMap< QString, QDBusVariant > &a)Tp::StringVariantMap [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00768.html0000644000175200001440000000526612000060453021643 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AbstractAdaptor Member List
This is the complete list of members for Tp::AbstractAdaptor, including all inherited members.
AbstractAdaptor(const QDBusConnection &connection, QObject *adaptee, QObject *parent)Tp::AbstractAdaptor
adaptee() const Tp::AbstractAdaptor
dbusConnection() const Tp::AbstractAdaptor
~AbstractAdaptor()Tp::AbstractAdaptor


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00502_source.html0000644000175200001440000114313112000060453023200 0ustar00collabora-develusers00000000000000 cli-channel.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-channel.h
00001 /*
00002  * This file contains D-Bus client proxy classes generated by qt-client-gen.py.
00003  *
00004  * This file can be distributed under the same terms as the specification from
00005  * which it was generated.
00006  */
00007 
00008 #ifndef IN_TP_QT_HEADER
00009 #error IN_TP_QT_HEADER
00010 #endif
00011 
00012 #include <TelepathyQt/Types>
00013 
00014 #include <QtGlobal>
00015 
00016 #include <QString>
00017 #include <QObject>
00018 #include <QVariant>
00019 
00020 #include <QDBusPendingReply>
00021 
00022 #include <TelepathyQt/AbstractInterface>
00023 #include <TelepathyQt/DBusProxy>
00024 #include <TelepathyQt/Global>
00025 
00026 namespace Tp
00027 {
00028 class PendingVariant;
00029 class PendingOperation;
00030 }
00031 
00032 namespace Tp
00033 {
00034 namespace Client
00035 {
00036 
00044 class TP_QT_EXPORT ChannelInterface : public Tp::AbstractInterface
00045 {
00046     Q_OBJECT
00047 
00048 public:
00055     static inline QLatin1String staticInterfaceName()
00056     {
00057         return QLatin1String("org.freedesktop.Telepathy.Channel");
00058     }
00059 
00067     ChannelInterface(
00068         const QString& busName,
00069         const QString& objectPath,
00070         QObject* parent = 0
00071     );
00072 
00081     ChannelInterface(
00082         const QDBusConnection& connection,
00083         const QString& busName,
00084         const QString& objectPath,
00085         QObject* parent = 0
00086     );
00087 
00094     ChannelInterface(Tp::DBusProxy *proxy);
00095 
00126     inline Tp::PendingVariant *requestPropertyChannelType() const
00127     {
00128         return internalRequestProperty(QLatin1String("ChannelType"));
00129     }
00130 
00164     inline Tp::PendingVariant *requestPropertyInterfaces() const
00165     {
00166         return internalRequestProperty(QLatin1String("Interfaces"));
00167     }
00168 
00213     inline Tp::PendingVariant *requestPropertyTargetHandle() const
00214     {
00215         return internalRequestProperty(QLatin1String("TargetHandle"));
00216     }
00217 
00271     inline Tp::PendingVariant *requestPropertyTargetID() const
00272     {
00273         return internalRequestProperty(QLatin1String("TargetID"));
00274     }
00275 
00295     inline Tp::PendingVariant *requestPropertyTargetHandleType() const
00296     {
00297         return internalRequestProperty(QLatin1String("TargetHandleType"));
00298     }
00299 
00368     inline Tp::PendingVariant *requestPropertyRequested() const
00369     {
00370         return internalRequestProperty(QLatin1String("Requested"));
00371     }
00372 
00434     inline Tp::PendingVariant *requestPropertyInitiatorHandle() const
00435     {
00436         return internalRequestProperty(QLatin1String("InitiatorHandle"));
00437     }
00438 
00473     inline Tp::PendingVariant *requestPropertyInitiatorID() const
00474     {
00475         return internalRequestProperty(QLatin1String("InitiatorID"));
00476     }
00477 
00484     Tp::PendingVariantMap *requestAllProperties() const
00485     {
00486         return internalRequestAllProperties();
00487     }
00488 
00489 public Q_SLOTS:
00504     inline QDBusPendingReply<> Close(int timeout = -1)
00505     {
00506         if (!invalidationReason().isEmpty()) {
00507             return QDBusPendingReply<>(QDBusMessage::createError(
00508                 invalidationReason(),
00509                 invalidationMessage()
00510             ));
00511         }
00512 
00513         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00514                 this->staticInterfaceName(), QLatin1String("Close"));
00515         return this->connection().asyncCall(callMessage, timeout);
00516     }
00517 
00535     inline QDBusPendingReply<QString> GetChannelType(int timeout = -1)
00536     {
00537         if (!invalidationReason().isEmpty()) {
00538             return QDBusPendingReply<QString>(QDBusMessage::createError(
00539                 invalidationReason(),
00540                 invalidationMessage()
00541             ));
00542         }
00543 
00544         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00545                 this->staticInterfaceName(), QLatin1String("GetChannelType"));
00546         return this->connection().asyncCall(callMessage, timeout);
00547     }
00548 
00572     inline QDBusPendingReply<uint, uint> GetHandle(int timeout = -1)
00573     {
00574         if (!invalidationReason().isEmpty()) {
00575             return QDBusPendingReply<uint, uint>(QDBusMessage::createError(
00576                 invalidationReason(),
00577                 invalidationMessage()
00578             ));
00579         }
00580 
00581         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00582                 this->staticInterfaceName(), QLatin1String("GetHandle"));
00583         return this->connection().asyncCall(callMessage, timeout);
00584     }
00585 
00603     inline QDBusPendingReply<QStringList> GetInterfaces(int timeout = -1)
00604     {
00605         if (!invalidationReason().isEmpty()) {
00606             return QDBusPendingReply<QStringList>(QDBusMessage::createError(
00607                 invalidationReason(),
00608                 invalidationMessage()
00609             ));
00610         }
00611 
00612         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00613                 this->staticInterfaceName(), QLatin1String("GetInterfaces"));
00614         return this->connection().asyncCall(callMessage, timeout);
00615     }
00616 
00617 Q_SIGNALS:
00625     void Closed();
00626 
00627 protected:
00628     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
00629 };
00630 
00638 class TP_QT_EXPORT ChannelInterfaceAnonymityInterface : public Tp::AbstractInterface
00639 {
00640     Q_OBJECT
00641 
00642 public:
00649     static inline QLatin1String staticInterfaceName()
00650     {
00651         return QLatin1String("org.freedesktop.Telepathy.Channel.Interface.Anonymity");
00652     }
00653 
00661     ChannelInterfaceAnonymityInterface(
00662         const QString& busName,
00663         const QString& objectPath,
00664         QObject* parent = 0
00665     );
00666 
00675     ChannelInterfaceAnonymityInterface(
00676         const QDBusConnection& connection,
00677         const QString& busName,
00678         const QString& objectPath,
00679         QObject* parent = 0
00680     );
00681 
00688     ChannelInterfaceAnonymityInterface(Tp::DBusProxy *proxy);
00689 
00697     explicit ChannelInterfaceAnonymityInterface(const Tp::Client::ChannelInterface& mainInterface);
00698 
00706     ChannelInterfaceAnonymityInterface(const Tp::Client::ChannelInterface& mainInterface, QObject* parent);
00707 
00720     inline Tp::PendingVariant *requestPropertyAnonymityModes() const
00721     {
00722         return internalRequestProperty(QLatin1String("AnonymityModes"));
00723     }
00724 
00735     inline Tp::PendingVariant *requestPropertyAnonymityMandatory() const
00736     {
00737         return internalRequestProperty(QLatin1String("AnonymityMandatory"));
00738     }
00739 
00761     inline Tp::PendingVariant *requestPropertyAnonymousID() const
00762     {
00763         return internalRequestProperty(QLatin1String("AnonymousID"));
00764     }
00765 
00772     Tp::PendingVariantMap *requestAllProperties() const
00773     {
00774         return internalRequestAllProperties();
00775     }
00776 
00777 protected:
00778     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
00779 };
00780 
00788 class TP_QT_EXPORT ChannelInterfaceCallStateInterface : public Tp::AbstractInterface
00789 {
00790     Q_OBJECT
00791 
00792 public:
00799     static inline QLatin1String staticInterfaceName()
00800     {
00801         return QLatin1String("org.freedesktop.Telepathy.Channel.Interface.CallState");
00802     }
00803 
00811     ChannelInterfaceCallStateInterface(
00812         const QString& busName,
00813         const QString& objectPath,
00814         QObject* parent = 0
00815     );
00816 
00825     ChannelInterfaceCallStateInterface(
00826         const QDBusConnection& connection,
00827         const QString& busName,
00828         const QString& objectPath,
00829         QObject* parent = 0
00830     );
00831 
00838     ChannelInterfaceCallStateInterface(Tp::DBusProxy *proxy);
00839 
00847     explicit ChannelInterfaceCallStateInterface(const Tp::Client::ChannelInterface& mainInterface);
00848 
00856     ChannelInterfaceCallStateInterface(const Tp::Client::ChannelInterface& mainInterface, QObject* parent);
00857 
00864     Tp::PendingVariantMap *requestAllProperties() const
00865     {
00866         return internalRequestAllProperties();
00867     }
00868 
00869 public Q_SLOTS:
00885     inline QDBusPendingReply<Tp::ChannelCallStateMap> GetCallStates(int timeout = -1)
00886     {
00887         if (!invalidationReason().isEmpty()) {
00888             return QDBusPendingReply<Tp::ChannelCallStateMap>(QDBusMessage::createError(
00889                 invalidationReason(),
00890                 invalidationMessage()
00891             ));
00892         }
00893 
00894         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00895                 this->staticInterfaceName(), QLatin1String("GetCallStates"));
00896         return this->connection().asyncCall(callMessage, timeout);
00897     }
00898 
00899 Q_SIGNALS:
00913     void CallStateChanged(uint contact, uint state);
00914 
00915 protected:
00916     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
00917 };
00918 
00926 class TP_QT_EXPORT ChannelInterfaceCaptchaAuthenticationInterface : public Tp::AbstractInterface
00927 {
00928     Q_OBJECT
00929 
00930 public:
00937     static inline QLatin1String staticInterfaceName()
00938     {
00939         return QLatin1String("org.freedesktop.Telepathy.Channel.Interface.CaptchaAuthentication1");
00940     }
00941 
00949     ChannelInterfaceCaptchaAuthenticationInterface(
00950         const QString& busName,
00951         const QString& objectPath,
00952         QObject* parent = 0
00953     );
00954 
00963     ChannelInterfaceCaptchaAuthenticationInterface(
00964         const QDBusConnection& connection,
00965         const QString& busName,
00966         const QString& objectPath,
00967         QObject* parent = 0
00968     );
00969 
00976     ChannelInterfaceCaptchaAuthenticationInterface(Tp::DBusProxy *proxy);
00977 
00985     explicit ChannelInterfaceCaptchaAuthenticationInterface(const Tp::Client::ChannelInterface& mainInterface);
00986 
00994     ChannelInterfaceCaptchaAuthenticationInterface(const Tp::Client::ChannelInterface& mainInterface, QObject* parent);
00995 
01017     inline Tp::PendingVariant *requestPropertyCanRetryCaptcha() const
01018     {
01019         return internalRequestProperty(QLatin1String("CanRetryCaptcha"));
01020     }
01021 
01047     inline Tp::PendingVariant *requestPropertyCaptchaStatus() const
01048     {
01049         return internalRequestProperty(QLatin1String("CaptchaStatus"));
01050     }
01051 
01085     inline Tp::PendingVariant *requestPropertyCaptchaError() const
01086     {
01087         return internalRequestProperty(QLatin1String("CaptchaError"));
01088     }
01089 
01111     inline Tp::PendingVariant *requestPropertyCaptchaErrorDetails() const
01112     {
01113         return internalRequestProperty(QLatin1String("CaptchaErrorDetails"));
01114     }
01115 
01122     Tp::PendingVariantMap *requestAllProperties() const
01123     {
01124         return internalRequestAllProperties();
01125     }
01126 
01127 public Q_SLOTS:
01181     inline QDBusPendingReply<Tp::CaptchaInfoList, uint, QString> GetCaptchas(int timeout = -1)
01182     {
01183         if (!invalidationReason().isEmpty()) {
01184             return QDBusPendingReply<Tp::CaptchaInfoList, uint, QString>(QDBusMessage::createError(
01185                 invalidationReason(),
01186                 invalidationMessage()
01187             ));
01188         }
01189 
01190         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
01191                 this->staticInterfaceName(), QLatin1String("GetCaptchas"));
01192         return this->connection().asyncCall(callMessage, timeout);
01193     }
01194 
01232     inline QDBusPendingReply<QByteArray> GetCaptchaData(uint ID, const QString& mimeType, int timeout = -1)
01233     {
01234         if (!invalidationReason().isEmpty()) {
01235             return QDBusPendingReply<QByteArray>(QDBusMessage::createError(
01236                 invalidationReason(),
01237                 invalidationMessage()
01238             ));
01239         }
01240 
01241         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
01242                 this->staticInterfaceName(), QLatin1String("GetCaptchaData"));
01243         callMessage << QVariant::fromValue(ID) << QVariant::fromValue(mimeType);
01244         return this->connection().asyncCall(callMessage, timeout);
01245     }
01246 
01265     inline QDBusPendingReply<> AnswerCaptchas(const Tp::CaptchaAnswers& answers, int timeout = -1)
01266     {
01267         if (!invalidationReason().isEmpty()) {
01268             return QDBusPendingReply<>(QDBusMessage::createError(
01269                 invalidationReason(),
01270                 invalidationMessage()
01271             ));
01272         }
01273 
01274         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
01275                 this->staticInterfaceName(), QLatin1String("AnswerCaptchas"));
01276         callMessage << QVariant::fromValue(answers);
01277         return this->connection().asyncCall(callMessage, timeout);
01278     }
01279 
01307     inline QDBusPendingReply<> CancelCaptcha(uint reason, const QString& debugMessage, int timeout = -1)
01308     {
01309         if (!invalidationReason().isEmpty()) {
01310             return QDBusPendingReply<>(QDBusMessage::createError(
01311                 invalidationReason(),
01312                 invalidationMessage()
01313             ));
01314         }
01315 
01316         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
01317                 this->staticInterfaceName(), QLatin1String("CancelCaptcha"));
01318         callMessage << QVariant::fromValue(reason) << QVariant::fromValue(debugMessage);
01319         return this->connection().asyncCall(callMessage, timeout);
01320     }
01321 
01322 protected:
01323     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
01324 };
01325 
01333 class TP_QT_EXPORT ChannelInterfaceChatStateInterface : public Tp::AbstractInterface
01334 {
01335     Q_OBJECT
01336 
01337 public:
01344     static inline QLatin1String staticInterfaceName()
01345     {
01346         return QLatin1String("org.freedesktop.Telepathy.Channel.Interface.ChatState");
01347     }
01348 
01356     ChannelInterfaceChatStateInterface(
01357         const QString& busName,
01358         const QString& objectPath,
01359         QObject* parent = 0
01360     );
01361 
01370     ChannelInterfaceChatStateInterface(
01371         const QDBusConnection& connection,
01372         const QString& busName,
01373         const QString& objectPath,
01374         QObject* parent = 0
01375     );
01376 
01383     ChannelInterfaceChatStateInterface(Tp::DBusProxy *proxy);
01384 
01392     explicit ChannelInterfaceChatStateInterface(const Tp::Client::ChannelInterface& mainInterface);
01393 
01401     ChannelInterfaceChatStateInterface(const Tp::Client::ChannelInterface& mainInterface, QObject* parent);
01402 
01438     inline Tp::PendingVariant *requestPropertyChatStates() const
01439     {
01440         return internalRequestProperty(QLatin1String("ChatStates"));
01441     }
01442 
01449     Tp::PendingVariantMap *requestAllProperties() const
01450     {
01451         return internalRequestAllProperties();
01452     }
01453 
01454 public Q_SLOTS:
01470     inline QDBusPendingReply<> SetChatState(uint state, int timeout = -1)
01471     {
01472         if (!invalidationReason().isEmpty()) {
01473             return QDBusPendingReply<>(QDBusMessage::createError(
01474                 invalidationReason(),
01475                 invalidationMessage()
01476             ));
01477         }
01478 
01479         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
01480                 this->staticInterfaceName(), QLatin1String("SetChatState"));
01481         callMessage << QVariant::fromValue(state);
01482         return this->connection().asyncCall(callMessage, timeout);
01483     }
01484 
01485 Q_SIGNALS:
01500     void ChatStateChanged(uint contact, uint state);
01501 
01502 protected:
01503     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
01504 };
01505 
01513 class TP_QT_EXPORT ChannelInterfaceConferenceInterface : public Tp::AbstractInterface
01514 {
01515     Q_OBJECT
01516 
01517 public:
01524     static inline QLatin1String staticInterfaceName()
01525     {
01526         return QLatin1String("org.freedesktop.Telepathy.Channel.Interface.Conference");
01527     }
01528 
01536     ChannelInterfaceConferenceInterface(
01537         const QString& busName,
01538         const QString& objectPath,
01539         QObject* parent = 0
01540     );
01541 
01550     ChannelInterfaceConferenceInterface(
01551         const QDBusConnection& connection,
01552         const QString& busName,
01553         const QString& objectPath,
01554         QObject* parent = 0
01555     );
01556 
01563     ChannelInterfaceConferenceInterface(Tp::DBusProxy *proxy);
01564 
01572     explicit ChannelInterfaceConferenceInterface(const Tp::Client::ChannelInterface& mainInterface);
01573 
01581     ChannelInterfaceConferenceInterface(const Tp::Client::ChannelInterface& mainInterface, QObject* parent);
01582 
01611     inline Tp::PendingVariant *requestPropertyChannels() const
01612     {
01613         return internalRequestProperty(QLatin1String("Channels"));
01614     }
01615 
01677     inline Tp::PendingVariant *requestPropertyInitialChannels() const
01678     {
01679         return internalRequestProperty(QLatin1String("InitialChannels"));
01680     }
01681 
01755     inline Tp::PendingVariant *requestPropertyInitialInviteeHandles() const
01756     {
01757         return internalRequestProperty(QLatin1String("InitialInviteeHandles"));
01758     }
01759 
01784     inline Tp::PendingVariant *requestPropertyInitialInviteeIDs() const
01785     {
01786         return internalRequestProperty(QLatin1String("InitialInviteeIDs"));
01787     }
01788 
01816     inline Tp::PendingVariant *requestPropertyInvitationMessage() const
01817     {
01818         return internalRequestProperty(QLatin1String("InvitationMessage"));
01819     }
01820 
01886     inline Tp::PendingVariant *requestPropertyOriginalChannels() const
01887     {
01888         return internalRequestProperty(QLatin1String("OriginalChannels"));
01889     }
01890 
01897     Tp::PendingVariantMap *requestAllProperties() const
01898     {
01899         return internalRequestAllProperties();
01900     }
01901 
01902 Q_SIGNALS:
01926     void ChannelMerged(const QDBusObjectPath& channel, uint channelSpecificHandle, const QVariantMap& properties);
01927 
01952     void ChannelRemoved(const QDBusObjectPath& channel, const QVariantMap& details);
01953 
01954 protected:
01955     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
01956 };
01957 
01965 class TP_QT_EXPORT ChannelInterfaceDTMFInterface : public Tp::AbstractInterface
01966 {
01967     Q_OBJECT
01968 
01969 public:
01976     static inline QLatin1String staticInterfaceName()
01977     {
01978         return QLatin1String("org.freedesktop.Telepathy.Channel.Interface.DTMF");
01979     }
01980 
01988     ChannelInterfaceDTMFInterface(
01989         const QString& busName,
01990         const QString& objectPath,
01991         QObject* parent = 0
01992     );
01993 
02002     ChannelInterfaceDTMFInterface(
02003         const QDBusConnection& connection,
02004         const QString& busName,
02005         const QString& objectPath,
02006         QObject* parent = 0
02007     );
02008 
02015     ChannelInterfaceDTMFInterface(Tp::DBusProxy *proxy);
02016 
02024     explicit ChannelInterfaceDTMFInterface(const Tp::Client::ChannelInterface& mainInterface);
02025 
02033     ChannelInterfaceDTMFInterface(const Tp::Client::ChannelInterface& mainInterface, QObject* parent);
02034 
02046     inline Tp::PendingVariant *requestPropertyCurrentlySendingTones() const
02047     {
02048         return internalRequestProperty(QLatin1String("CurrentlySendingTones"));
02049     }
02050 
02064     inline Tp::PendingVariant *requestPropertyInitialTones() const
02065     {
02066         return internalRequestProperty(QLatin1String("InitialTones"));
02067     }
02068 
02086     inline Tp::PendingVariant *requestPropertyDeferredTones() const
02087     {
02088         return internalRequestProperty(QLatin1String("DeferredTones"));
02089     }
02090 
02097     Tp::PendingVariantMap *requestAllProperties() const
02098     {
02099         return internalRequestAllProperties();
02100     }
02101 
02102 public Q_SLOTS:
02133     inline QDBusPendingReply<> StartTone(uint streamID, uchar event, int timeout = -1)
02134     {
02135         if (!invalidationReason().isEmpty()) {
02136             return QDBusPendingReply<>(QDBusMessage::createError(
02137                 invalidationReason(),
02138                 invalidationMessage()
02139             ));
02140         }
02141 
02142         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
02143                 this->staticInterfaceName(), QLatin1String("StartTone"));
02144         callMessage << QVariant::fromValue(streamID) << QVariant::fromValue(event);
02145         return this->connection().asyncCall(callMessage, timeout);
02146     }
02147 
02170     inline QDBusPendingReply<> StopTone(uint streamID, int timeout = -1)
02171     {
02172         if (!invalidationReason().isEmpty()) {
02173             return QDBusPendingReply<>(QDBusMessage::createError(
02174                 invalidationReason(),
02175                 invalidationMessage()
02176             ));
02177         }
02178 
02179         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
02180                 this->staticInterfaceName(), QLatin1String("StopTone"));
02181         callMessage << QVariant::fromValue(streamID);
02182         return this->connection().asyncCall(callMessage, timeout);
02183     }
02184 
02230     inline QDBusPendingReply<> MultipleTones(const QString& tones, int timeout = -1)
02231     {
02232         if (!invalidationReason().isEmpty()) {
02233             return QDBusPendingReply<>(QDBusMessage::createError(
02234                 invalidationReason(),
02235                 invalidationMessage()
02236             ));
02237         }
02238 
02239         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
02240                 this->staticInterfaceName(), QLatin1String("MultipleTones"));
02241         callMessage << QVariant::fromValue(tones);
02242         return this->connection().asyncCall(callMessage, timeout);
02243     }
02244 
02245 Q_SIGNALS:
02273     void TonesDeferred(const QString& tones);
02274 
02291     void SendingTones(const QString& tones);
02292 
02304     void StoppedTones(bool cancelled);
02305 
02306 protected:
02307     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
02308 };
02309 
02317 class TP_QT_EXPORT ChannelInterfaceDestroyableInterface : public Tp::AbstractInterface
02318 {
02319     Q_OBJECT
02320 
02321 public:
02328     static inline QLatin1String staticInterfaceName()
02329     {
02330         return QLatin1String("org.freedesktop.Telepathy.Channel.Interface.Destroyable");
02331     }
02332 
02340     ChannelInterfaceDestroyableInterface(
02341         const QString& busName,
02342         const QString& objectPath,
02343         QObject* parent = 0
02344     );
02345 
02354     ChannelInterfaceDestroyableInterface(
02355         const QDBusConnection& connection,
02356         const QString& busName,
02357         const QString& objectPath,
02358         QObject* parent = 0
02359     );
02360 
02367     ChannelInterfaceDestroyableInterface(Tp::DBusProxy *proxy);
02368 
02376     explicit ChannelInterfaceDestroyableInterface(const Tp::Client::ChannelInterface& mainInterface);
02377 
02385     ChannelInterfaceDestroyableInterface(const Tp::Client::ChannelInterface& mainInterface, QObject* parent);
02386 
02393     Tp::PendingVariantMap *requestAllProperties() const
02394     {
02395         return internalRequestAllProperties();
02396     }
02397 
02398 public Q_SLOTS:
02443     inline QDBusPendingReply<> Destroy(int timeout = -1)
02444     {
02445         if (!invalidationReason().isEmpty()) {
02446             return QDBusPendingReply<>(QDBusMessage::createError(
02447                 invalidationReason(),
02448                 invalidationMessage()
02449             ));
02450         }
02451 
02452         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
02453                 this->staticInterfaceName(), QLatin1String("Destroy"));
02454         return this->connection().asyncCall(callMessage, timeout);
02455     }
02456 
02457 protected:
02458     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
02459 };
02460 
02468 class TP_QT_EXPORT ChannelInterfaceFileTransferMetadataInterface : public Tp::AbstractInterface
02469 {
02470     Q_OBJECT
02471 
02472 public:
02479     static inline QLatin1String staticInterfaceName()
02480     {
02481         return QLatin1String("org.freedesktop.Telepathy.Channel.Interface.FileTransfer.Metadata");
02482     }
02483 
02491     ChannelInterfaceFileTransferMetadataInterface(
02492         const QString& busName,
02493         const QString& objectPath,
02494         QObject* parent = 0
02495     );
02496 
02505     ChannelInterfaceFileTransferMetadataInterface(
02506         const QDBusConnection& connection,
02507         const QString& busName,
02508         const QString& objectPath,
02509         QObject* parent = 0
02510     );
02511 
02518     ChannelInterfaceFileTransferMetadataInterface(Tp::DBusProxy *proxy);
02519 
02527     explicit ChannelInterfaceFileTransferMetadataInterface(const Tp::Client::ChannelInterface& mainInterface);
02528 
02536     ChannelInterfaceFileTransferMetadataInterface(const Tp::Client::ChannelInterface& mainInterface, QObject* parent);
02537 
02554     inline Tp::PendingVariant *requestPropertyServiceName() const
02555     {
02556         return internalRequestProperty(QLatin1String("ServiceName"));
02557     }
02558 
02575     inline Tp::PendingOperation *setPropertyServiceName(QString newValue)
02576     {
02577         return internalSetProperty(QLatin1String("ServiceName"), QVariant::fromValue(newValue));
02578     }
02579 
02593     inline Tp::PendingVariant *requestPropertyMetadata() const
02594     {
02595         return internalRequestProperty(QLatin1String("Metadata"));
02596     }
02597 
02611     inline Tp::PendingOperation *setPropertyMetadata(Tp::Metadata newValue)
02612     {
02613         return internalSetProperty(QLatin1String("Metadata"), QVariant::fromValue(newValue));
02614     }
02615 
02622     Tp::PendingVariantMap *requestAllProperties() const
02623     {
02624         return internalRequestAllProperties();
02625     }
02626 
02627 protected:
02628     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
02629 };
02630 
02638 class TP_QT_EXPORT ChannelInterfaceGroupInterface : public Tp::AbstractInterface
02639 {
02640     Q_OBJECT
02641 
02642 public:
02649     static inline QLatin1String staticInterfaceName()
02650     {
02651         return QLatin1String("org.freedesktop.Telepathy.Channel.Interface.Group");
02652     }
02653 
02661     ChannelInterfaceGroupInterface(
02662         const QString& busName,
02663         const QString& objectPath,
02664         QObject* parent = 0
02665     );
02666 
02675     ChannelInterfaceGroupInterface(
02676         const QDBusConnection& connection,
02677         const QString& busName,
02678         const QString& objectPath,
02679         QObject* parent = 0
02680     );
02681 
02688     ChannelInterfaceGroupInterface(Tp::DBusProxy *proxy);
02689 
02697     explicit ChannelInterfaceGroupInterface(const Tp::Client::ChannelInterface& mainInterface);
02698 
02706     ChannelInterfaceGroupInterface(const Tp::Client::ChannelInterface& mainInterface, QObject* parent);
02707 
02720     inline Tp::PendingVariant *requestPropertyGroupFlags() const
02721     {
02722         return internalRequestProperty(QLatin1String("GroupFlags"));
02723     }
02724 
02740     inline Tp::PendingVariant *requestPropertyHandleOwners() const
02741     {
02742         return internalRequestProperty(QLatin1String("HandleOwners"));
02743     }
02744 
02755     inline Tp::PendingVariant *requestPropertyLocalPendingMembers() const
02756     {
02757         return internalRequestProperty(QLatin1String("LocalPendingMembers"));
02758     }
02759 
02769     inline Tp::PendingVariant *requestPropertyMembers() const
02770     {
02771         return internalRequestProperty(QLatin1String("Members"));
02772     }
02773 
02784     inline Tp::PendingVariant *requestPropertyRemotePendingMembers() const
02785     {
02786         return internalRequestProperty(QLatin1String("RemotePendingMembers"));
02787     }
02788 
02803     inline Tp::PendingVariant *requestPropertySelfHandle() const
02804     {
02805         return internalRequestProperty(QLatin1String("SelfHandle"));
02806     }
02807 
02821     inline Tp::PendingVariant *requestPropertyMemberIdentifiers() const
02822     {
02823         return internalRequestProperty(QLatin1String("MemberIdentifiers"));
02824     }
02825 
02832     Tp::PendingVariantMap *requestAllProperties() const
02833     {
02834         return internalRequestAllProperties();
02835     }
02836 
02837 public Q_SLOTS:
02868     inline QDBusPendingReply<> AddMembers(const Tp::UIntList& contacts, const QString& message, int timeout = -1)
02869     {
02870         if (!invalidationReason().isEmpty()) {
02871             return QDBusPendingReply<>(QDBusMessage::createError(
02872                 invalidationReason(),
02873                 invalidationMessage()
02874             ));
02875         }
02876 
02877         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
02878                 this->staticInterfaceName(), QLatin1String("AddMembers"));
02879         callMessage << QVariant::fromValue(contacts) << QVariant::fromValue(message);
02880         return this->connection().asyncCall(callMessage, timeout);
02881     }
02882 
02905     inline QDBusPendingReply<Tp::UIntList, Tp::UIntList, Tp::UIntList> GetAllMembers(int timeout = -1)
02906     {
02907         if (!invalidationReason().isEmpty()) {
02908             return QDBusPendingReply<Tp::UIntList, Tp::UIntList, Tp::UIntList>(QDBusMessage::createError(
02909                 invalidationReason(),
02910                 invalidationMessage()
02911             ));
02912         }
02913 
02914         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
02915                 this->staticInterfaceName(), QLatin1String("GetAllMembers"));
02916         return this->connection().asyncCall(callMessage, timeout);
02917     }
02918 
02933     inline QDBusPendingReply<uint> GetGroupFlags(int timeout = -1)
02934     {
02935         if (!invalidationReason().isEmpty()) {
02936             return QDBusPendingReply<uint>(QDBusMessage::createError(
02937                 invalidationReason(),
02938                 invalidationMessage()
02939             ));
02940         }
02941 
02942         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
02943                 this->staticInterfaceName(), QLatin1String("GetGroupFlags"));
02944         return this->connection().asyncCall(callMessage, timeout);
02945     }
02946 
02972     inline QDBusPendingReply<Tp::UIntList> GetHandleOwners(const Tp::UIntList& handles, int timeout = -1)
02973     {
02974         if (!invalidationReason().isEmpty()) {
02975             return QDBusPendingReply<Tp::UIntList>(QDBusMessage::createError(
02976                 invalidationReason(),
02977                 invalidationMessage()
02978             ));
02979         }
02980 
02981         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
02982                 this->staticInterfaceName(), QLatin1String("GetHandleOwners"));
02983         callMessage << QVariant::fromValue(handles);
02984         return this->connection().asyncCall(callMessage, timeout);
02985     }
02986 
02998     inline QDBusPendingReply<Tp::UIntList> GetLocalPendingMembers(int timeout = -1)
02999     {
03000         if (!invalidationReason().isEmpty()) {
03001             return QDBusPendingReply<Tp::UIntList>(QDBusMessage::createError(
03002                 invalidationReason(),
03003                 invalidationMessage()
03004             ));
03005         }
03006 
03007         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
03008                 this->staticInterfaceName(), QLatin1String("GetLocalPendingMembers"));
03009         return this->connection().asyncCall(callMessage, timeout);
03010     }
03011 
03030     inline QDBusPendingReply<Tp::LocalPendingInfoList> GetLocalPendingMembersWithInfo(int timeout = -1)
03031     {
03032         if (!invalidationReason().isEmpty()) {
03033             return QDBusPendingReply<Tp::LocalPendingInfoList>(QDBusMessage::createError(
03034                 invalidationReason(),
03035                 invalidationMessage()
03036             ));
03037         }
03038 
03039         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
03040                 this->staticInterfaceName(), QLatin1String("GetLocalPendingMembersWithInfo"));
03041         return this->connection().asyncCall(callMessage, timeout);
03042     }
03043 
03054     inline QDBusPendingReply<Tp::UIntList> GetMembers(int timeout = -1)
03055     {
03056         if (!invalidationReason().isEmpty()) {
03057             return QDBusPendingReply<Tp::UIntList>(QDBusMessage::createError(
03058                 invalidationReason(),
03059                 invalidationMessage()
03060             ));
03061         }
03062 
03063         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
03064                 this->staticInterfaceName(), QLatin1String("GetMembers"));
03065         return this->connection().asyncCall(callMessage, timeout);
03066     }
03067 
03079     inline QDBusPendingReply<Tp::UIntList> GetRemotePendingMembers(int timeout = -1)
03080     {
03081         if (!invalidationReason().isEmpty()) {
03082             return QDBusPendingReply<Tp::UIntList>(QDBusMessage::createError(
03083                 invalidationReason(),
03084                 invalidationMessage()
03085             ));
03086         }
03087 
03088         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
03089                 this->staticInterfaceName(), QLatin1String("GetRemotePendingMembers"));
03090         return this->connection().asyncCall(callMessage, timeout);
03091     }
03092 
03103     inline QDBusPendingReply<uint> GetSelfHandle(int timeout = -1)
03104     {
03105         if (!invalidationReason().isEmpty()) {
03106             return QDBusPendingReply<uint>(QDBusMessage::createError(
03107                 invalidationReason(),
03108                 invalidationMessage()
03109             ));
03110         }
03111 
03112         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
03113                 this->staticInterfaceName(), QLatin1String("GetSelfHandle"));
03114         return this->connection().asyncCall(callMessage, timeout);
03115     }
03116 
03172     inline QDBusPendingReply<> RemoveMembers(const Tp::UIntList& contacts, const QString& message, int timeout = -1)
03173     {
03174         if (!invalidationReason().isEmpty()) {
03175             return QDBusPendingReply<>(QDBusMessage::createError(
03176                 invalidationReason(),
03177                 invalidationMessage()
03178             ));
03179         }
03180 
03181         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
03182                 this->staticInterfaceName(), QLatin1String("RemoveMembers"));
03183         callMessage << QVariant::fromValue(contacts) << QVariant::fromValue(message);
03184         return this->connection().asyncCall(callMessage, timeout);
03185     }
03186 
03211     inline QDBusPendingReply<> RemoveMembersWithReason(const Tp::UIntList& contacts, const QString& message, uint reason, int timeout = -1)
03212     {
03213         if (!invalidationReason().isEmpty()) {
03214             return QDBusPendingReply<>(QDBusMessage::createError(
03215                 invalidationReason(),
03216                 invalidationMessage()
03217             ));
03218         }
03219 
03220         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
03221                 this->staticInterfaceName(), QLatin1String("RemoveMembersWithReason"));
03222         callMessage << QVariant::fromValue(contacts) << QVariant::fromValue(message) << QVariant::fromValue(reason);
03223         return this->connection().asyncCall(callMessage, timeout);
03224     }
03225 
03226 Q_SIGNALS:
03245     void HandleOwnersChanged(const Tp::HandleOwnerMap& added, const Tp::UIntList& removed);
03246 
03275     void HandleOwnersChangedDetailed(const Tp::HandleOwnerMap& added, const Tp::UIntList& removed, const Tp::HandleIdentifierMap& identifiers);
03276 
03286     void SelfHandleChanged(uint selfHandle);
03287 
03303     void SelfContactChanged(uint selfHandle, const QString& selfID);
03304 
03319     void GroupFlagsChanged(uint added, uint removed);
03320 
03374     void MembersChanged(const QString& message, const Tp::UIntList& added, const Tp::UIntList& removed, const Tp::UIntList& localPending, const Tp::UIntList& remotePending, uint actor, uint reason);
03375 
03484     void MembersChangedDetailed(const Tp::UIntList& added, const Tp::UIntList& removed, const Tp::UIntList& localPending, const Tp::UIntList& remotePending, const QVariantMap& details);
03485 
03486 protected:
03487     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
03488 };
03489 
03497 class TP_QT_EXPORT ChannelInterfaceHoldInterface : public Tp::AbstractInterface
03498 {
03499     Q_OBJECT
03500 
03501 public:
03508     static inline QLatin1String staticInterfaceName()
03509     {
03510         return QLatin1String("org.freedesktop.Telepathy.Channel.Interface.Hold");
03511     }
03512 
03520     ChannelInterfaceHoldInterface(
03521         const QString& busName,
03522         const QString& objectPath,
03523         QObject* parent = 0
03524     );
03525 
03534     ChannelInterfaceHoldInterface(
03535         const QDBusConnection& connection,
03536         const QString& busName,
03537         const QString& objectPath,
03538         QObject* parent = 0
03539     );
03540 
03547     ChannelInterfaceHoldInterface(Tp::DBusProxy *proxy);
03548 
03556     explicit ChannelInterfaceHoldInterface(const Tp::Client::ChannelInterface& mainInterface);
03557 
03565     ChannelInterfaceHoldInterface(const Tp::Client::ChannelInterface& mainInterface, QObject* parent);
03566 
03573     Tp::PendingVariantMap *requestAllProperties() const
03574     {
03575         return internalRequestAllProperties();
03576     }
03577 
03578 public Q_SLOTS:
03597     inline QDBusPendingReply<uint, uint> GetHoldState(int timeout = -1)
03598     {
03599         if (!invalidationReason().isEmpty()) {
03600             return QDBusPendingReply<uint, uint>(QDBusMessage::createError(
03601                 invalidationReason(),
03602                 invalidationMessage()
03603             ));
03604         }
03605 
03606         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
03607                 this->staticInterfaceName(), QLatin1String("GetHoldState"));
03608         return this->connection().asyncCall(callMessage, timeout);
03609     }
03610 
03674     inline QDBusPendingReply<> RequestHold(bool hold, int timeout = -1)
03675     {
03676         if (!invalidationReason().isEmpty()) {
03677             return QDBusPendingReply<>(QDBusMessage::createError(
03678                 invalidationReason(),
03679                 invalidationMessage()
03680             ));
03681         }
03682 
03683         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
03684                 this->staticInterfaceName(), QLatin1String("RequestHold"));
03685         callMessage << QVariant::fromValue(hold);
03686         return this->connection().asyncCall(callMessage, timeout);
03687     }
03688 
03689 Q_SIGNALS:
03706     void HoldStateChanged(uint holdState, uint reason);
03707 
03708 protected:
03709     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
03710 };
03711 
03719 class TP_QT_EXPORT ChannelInterfaceMediaSignallingInterface : public Tp::AbstractInterface
03720 {
03721     Q_OBJECT
03722 
03723 public:
03730     static inline QLatin1String staticInterfaceName()
03731     {
03732         return QLatin1String("org.freedesktop.Telepathy.Channel.Interface.MediaSignalling");
03733     }
03734 
03742     ChannelInterfaceMediaSignallingInterface(
03743         const QString& busName,
03744         const QString& objectPath,
03745         QObject* parent = 0
03746     );
03747 
03756     ChannelInterfaceMediaSignallingInterface(
03757         const QDBusConnection& connection,
03758         const QString& busName,
03759         const QString& objectPath,
03760         QObject* parent = 0
03761     );
03762 
03769     ChannelInterfaceMediaSignallingInterface(Tp::DBusProxy *proxy);
03770 
03778     explicit ChannelInterfaceMediaSignallingInterface(const Tp::Client::ChannelInterface& mainInterface);
03779 
03787     ChannelInterfaceMediaSignallingInterface(const Tp::Client::ChannelInterface& mainInterface, QObject* parent);
03788 
03795     Tp::PendingVariantMap *requestAllProperties() const
03796     {
03797         return internalRequestAllProperties();
03798     }
03799 
03800 public Q_SLOTS:
03812     inline QDBusPendingReply<Tp::MediaSessionHandlerInfoList> GetSessionHandlers(int timeout = -1)
03813     {
03814         if (!invalidationReason().isEmpty()) {
03815             return QDBusPendingReply<Tp::MediaSessionHandlerInfoList>(QDBusMessage::createError(
03816                 invalidationReason(),
03817                 invalidationMessage()
03818             ));
03819         }
03820 
03821         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
03822                 this->staticInterfaceName(), QLatin1String("GetSessionHandlers"));
03823         return this->connection().asyncCall(callMessage, timeout);
03824     }
03825 
03826 Q_SIGNALS:
03842     void NewSessionHandler(const QDBusObjectPath& sessionHandler, const QString& sessionType);
03843 
03844 protected:
03845     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
03846 };
03847 
03855 class TP_QT_EXPORT ChannelInterfaceMessagesInterface : public Tp::AbstractInterface
03856 {
03857     Q_OBJECT
03858 
03859 public:
03866     static inline QLatin1String staticInterfaceName()
03867     {
03868         return QLatin1String("org.freedesktop.Telepathy.Channel.Interface.Messages");
03869     }
03870 
03878     ChannelInterfaceMessagesInterface(
03879         const QString& busName,
03880         const QString& objectPath,
03881         QObject* parent = 0
03882     );
03883 
03892     ChannelInterfaceMessagesInterface(
03893         const QDBusConnection& connection,
03894         const QString& busName,
03895         const QString& objectPath,
03896         QObject* parent = 0
03897     );
03898 
03905     ChannelInterfaceMessagesInterface(Tp::DBusProxy *proxy);
03906 
03914     explicit ChannelInterfaceMessagesInterface(const Tp::Client::ChannelInterface& mainInterface);
03915 
03923     ChannelInterfaceMessagesInterface(const Tp::Client::ChannelInterface& mainInterface, QObject* parent);
03924 
03978     inline Tp::PendingVariant *requestPropertySupportedContentTypes() const
03979     {
03980         return internalRequestProperty(QLatin1String("SupportedContentTypes"));
03981     }
03982 
03994     inline Tp::PendingVariant *requestPropertyMessageTypes() const
03995     {
03996         return internalRequestProperty(QLatin1String("MessageTypes"));
03997     }
03998 
04008     inline Tp::PendingVariant *requestPropertyMessagePartSupportFlags() const
04009     {
04010         return internalRequestProperty(QLatin1String("MessagePartSupportFlags"));
04011     }
04012 
04033     inline Tp::PendingVariant *requestPropertyPendingMessages() const
04034     {
04035         return internalRequestProperty(QLatin1String("PendingMessages"));
04036     }
04037 
04047     inline Tp::PendingVariant *requestPropertyDeliveryReportingSupport() const
04048     {
04049         return internalRequestProperty(QLatin1String("DeliveryReportingSupport"));
04050     }
04051 
04058     Tp::PendingVariantMap *requestAllProperties() const
04059     {
04060         return internalRequestAllProperties();
04061     }
04062 
04063 public Q_SLOTS:
04126     inline QDBusPendingReply<QString> SendMessage(const Tp::MessagePartList& message, uint flags, int timeout = -1)
04127     {
04128         if (!invalidationReason().isEmpty()) {
04129             return QDBusPendingReply<QString>(QDBusMessage::createError(
04130                 invalidationReason(),
04131                 invalidationMessage()
04132             ));
04133         }
04134 
04135         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
04136                 this->staticInterfaceName(), QLatin1String("SendMessage"));
04137         callMessage << QVariant::fromValue(message) << QVariant::fromValue(flags);
04138         return this->connection().asyncCall(callMessage, timeout);
04139     }
04140 
04181     inline QDBusPendingReply<Tp::MessagePartContentMap> GetPendingMessageContent(uint messageID, const Tp::UIntList& parts, int timeout = -1)
04182     {
04183         if (!invalidationReason().isEmpty()) {
04184             return QDBusPendingReply<Tp::MessagePartContentMap>(QDBusMessage::createError(
04185                 invalidationReason(),
04186                 invalidationMessage()
04187             ));
04188         }
04189 
04190         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
04191                 this->staticInterfaceName(), QLatin1String("GetPendingMessageContent"));
04192         callMessage << QVariant::fromValue(messageID) << QVariant::fromValue(parts);
04193         return this->connection().asyncCall(callMessage, timeout);
04194     }
04195 
04196 Q_SIGNALS:
04256     void MessageSent(const Tp::MessagePartList& content, uint flags, const QString& messageToken);
04257 
04271     void PendingMessagesRemoved(const Tp::UIntList& messageIDs);
04272 
04293     void MessageReceived(const Tp::MessagePartList& message);
04294 
04295 protected:
04296     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
04297 };
04298 
04306 class TP_QT_EXPORT ChannelInterfacePasswordInterface : public Tp::AbstractInterface
04307 {
04308     Q_OBJECT
04309 
04310 public:
04317     static inline QLatin1String staticInterfaceName()
04318     {
04319         return QLatin1String("org.freedesktop.Telepathy.Channel.Interface.Password");
04320     }
04321 
04329     ChannelInterfacePasswordInterface(
04330         const QString& busName,
04331         const QString& objectPath,
04332         QObject* parent = 0
04333     );
04334 
04343     ChannelInterfacePasswordInterface(
04344         const QDBusConnection& connection,
04345         const QString& busName,
04346         const QString& objectPath,
04347         QObject* parent = 0
04348     );
04349 
04356     ChannelInterfacePasswordInterface(Tp::DBusProxy *proxy);
04357 
04365     explicit ChannelInterfacePasswordInterface(const Tp::Client::ChannelInterface& mainInterface);
04366 
04374     ChannelInterfacePasswordInterface(const Tp::Client::ChannelInterface& mainInterface, QObject* parent);
04375 
04382     Tp::PendingVariantMap *requestAllProperties() const
04383     {
04384         return internalRequestAllProperties();
04385     }
04386 
04387 public Q_SLOTS:
04405     inline QDBusPendingReply<uint> GetPasswordFlags(int timeout = -1)
04406     {
04407         if (!invalidationReason().isEmpty()) {
04408             return QDBusPendingReply<uint>(QDBusMessage::createError(
04409                 invalidationReason(),
04410                 invalidationMessage()
04411             ));
04412         }
04413 
04414         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
04415                 this->staticInterfaceName(), QLatin1String("GetPasswordFlags"));
04416         return this->connection().asyncCall(callMessage, timeout);
04417     }
04418 
04439     inline QDBusPendingReply<bool> ProvidePassword(const QString& password, int timeout = -1)
04440     {
04441         if (!invalidationReason().isEmpty()) {
04442             return QDBusPendingReply<bool>(QDBusMessage::createError(
04443                 invalidationReason(),
04444                 invalidationMessage()
04445             ));
04446         }
04447 
04448         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
04449                 this->staticInterfaceName(), QLatin1String("ProvidePassword"));
04450         callMessage << QVariant::fromValue(password);
04451         return this->connection().asyncCall(callMessage, timeout);
04452     }
04453 
04454 Q_SIGNALS:
04469     void PasswordFlagsChanged(uint added, uint removed);
04470 
04471 protected:
04472     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
04473 };
04474 
04482 class TP_QT_EXPORT ChannelInterfaceSASLAuthenticationInterface : public Tp::AbstractInterface
04483 {
04484     Q_OBJECT
04485 
04486 public:
04493     static inline QLatin1String staticInterfaceName()
04494     {
04495         return QLatin1String("org.freedesktop.Telepathy.Channel.Interface.SASLAuthentication");
04496     }
04497 
04505     ChannelInterfaceSASLAuthenticationInterface(
04506         const QString& busName,
04507         const QString& objectPath,
04508         QObject* parent = 0
04509     );
04510 
04519     ChannelInterfaceSASLAuthenticationInterface(
04520         const QDBusConnection& connection,
04521         const QString& busName,
04522         const QString& objectPath,
04523         QObject* parent = 0
04524     );
04525 
04532     ChannelInterfaceSASLAuthenticationInterface(Tp::DBusProxy *proxy);
04533 
04541     explicit ChannelInterfaceSASLAuthenticationInterface(const Tp::Client::ChannelInterface& mainInterface);
04542 
04550     ChannelInterfaceSASLAuthenticationInterface(const Tp::Client::ChannelInterface& mainInterface, QObject* parent);
04551 
04574     inline Tp::PendingVariant *requestPropertyAvailableMechanisms() const
04575     {
04576         return internalRequestProperty(QLatin1String("AvailableMechanisms"));
04577     }
04578 
04600     inline Tp::PendingVariant *requestPropertyHasInitialData() const
04601     {
04602         return internalRequestProperty(QLatin1String("HasInitialData"));
04603     }
04604 
04625     inline Tp::PendingVariant *requestPropertyCanTryAgain() const
04626     {
04627         return internalRequestProperty(QLatin1String("CanTryAgain"));
04628     }
04629 
04643     inline Tp::PendingVariant *requestPropertySASLStatus() const
04644     {
04645         return internalRequestProperty(QLatin1String("SASLStatus"));
04646     }
04647 
04676     inline Tp::PendingVariant *requestPropertySASLError() const
04677     {
04678         return internalRequestProperty(QLatin1String("SASLError"));
04679     }
04680 
04702     inline Tp::PendingVariant *requestPropertySASLErrorDetails() const
04703     {
04704         return internalRequestProperty(QLatin1String("SASLErrorDetails"));
04705     }
04706 
04771     inline Tp::PendingVariant *requestPropertyAuthorizationIdentity() const
04772     {
04773         return internalRequestProperty(QLatin1String("AuthorizationIdentity"));
04774     }
04775 
04837     inline Tp::PendingVariant *requestPropertyDefaultUsername() const
04838     {
04839         return internalRequestProperty(QLatin1String("DefaultUsername"));
04840     }
04841 
04869     inline Tp::PendingVariant *requestPropertyDefaultRealm() const
04870     {
04871         return internalRequestProperty(QLatin1String("DefaultRealm"));
04872     }
04873 
04895     inline Tp::PendingVariant *requestPropertyMaySaveResponse() const
04896     {
04897         return internalRequestProperty(QLatin1String("MaySaveResponse"));
04898     }
04899 
04906     Tp::PendingVariantMap *requestAllProperties() const
04907     {
04908         return internalRequestAllProperties();
04909     }
04910 
04911 public Q_SLOTS:
04938     inline QDBusPendingReply<> StartMechanism(const QString& mechanism, int timeout = -1)
04939     {
04940         if (!invalidationReason().isEmpty()) {
04941             return QDBusPendingReply<>(QDBusMessage::createError(
04942                 invalidationReason(),
04943                 invalidationMessage()
04944             ));
04945         }
04946 
04947         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
04948                 this->staticInterfaceName(), QLatin1String("StartMechanism"));
04949         callMessage << QVariant::fromValue(mechanism);
04950         return this->connection().asyncCall(callMessage, timeout);
04951     }
04952 
05007     inline QDBusPendingReply<> StartMechanismWithData(const QString& mechanism, const QByteArray& initialData, int timeout = -1)
05008     {
05009         if (!invalidationReason().isEmpty()) {
05010             return QDBusPendingReply<>(QDBusMessage::createError(
05011                 invalidationReason(),
05012                 invalidationMessage()
05013             ));
05014         }
05015 
05016         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
05017                 this->staticInterfaceName(), QLatin1String("StartMechanismWithData"));
05018         callMessage << QVariant::fromValue(mechanism) << QVariant::fromValue(initialData);
05019         return this->connection().asyncCall(callMessage, timeout);
05020     }
05021 
05039     inline QDBusPendingReply<> Respond(const QByteArray& responseData, int timeout = -1)
05040     {
05041         if (!invalidationReason().isEmpty()) {
05042             return QDBusPendingReply<>(QDBusMessage::createError(
05043                 invalidationReason(),
05044                 invalidationMessage()
05045             ));
05046         }
05047 
05048         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
05049                 this->staticInterfaceName(), QLatin1String("Respond"));
05050         callMessage << QVariant::fromValue(responseData);
05051         return this->connection().asyncCall(callMessage, timeout);
05052     }
05053 
05082     inline QDBusPendingReply<> AcceptSASL(int timeout = -1)
05083     {
05084         if (!invalidationReason().isEmpty()) {
05085             return QDBusPendingReply<>(QDBusMessage::createError(
05086                 invalidationReason(),
05087                 invalidationMessage()
05088             ));
05089         }
05090 
05091         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
05092                 this->staticInterfaceName(), QLatin1String("AcceptSASL"));
05093         return this->connection().asyncCall(callMessage, timeout);
05094     }
05095 
05124     inline QDBusPendingReply<> AbortSASL(uint reason, const QString& debugMessage, int timeout = -1)
05125     {
05126         if (!invalidationReason().isEmpty()) {
05127             return QDBusPendingReply<>(QDBusMessage::createError(
05128                 invalidationReason(),
05129                 invalidationMessage()
05130             ));
05131         }
05132 
05133         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
05134                 this->staticInterfaceName(), QLatin1String("AbortSASL"));
05135         callMessage << QVariant::fromValue(reason) << QVariant::fromValue(debugMessage);
05136         return this->connection().asyncCall(callMessage, timeout);
05137     }
05138 
05139 Q_SIGNALS:
05157     void SASLStatusChanged(uint status, const QString& reason, const QVariantMap& details);
05158 
05178     void NewChallenge(const QByteArray& challengeData);
05179 
05180 protected:
05181     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
05182 };
05183 
05191 class TP_QT_EXPORT ChannelInterfaceSMSInterface : public Tp::AbstractInterface
05192 {
05193     Q_OBJECT
05194 
05195 public:
05202     static inline QLatin1String staticInterfaceName()
05203     {
05204         return QLatin1String("org.freedesktop.Telepathy.Channel.Interface.SMS");
05205     }
05206 
05214     ChannelInterfaceSMSInterface(
05215         const QString& busName,
05216         const QString& objectPath,
05217         QObject* parent = 0
05218     );
05219 
05228     ChannelInterfaceSMSInterface(
05229         const QDBusConnection& connection,
05230         const QString& busName,
05231         const QString& objectPath,
05232         QObject* parent = 0
05233     );
05234 
05241     ChannelInterfaceSMSInterface(Tp::DBusProxy *proxy);
05242 
05250     explicit ChannelInterfaceSMSInterface(const Tp::Client::ChannelInterface& mainInterface);
05251 
05259     ChannelInterfaceSMSInterface(const Tp::Client::ChannelInterface& mainInterface, QObject* parent);
05260 
05300     inline Tp::PendingVariant *requestPropertyFlash() const
05301     {
05302         return internalRequestProperty(QLatin1String("Flash"));
05303     }
05304 
05367     inline Tp::PendingVariant *requestPropertySMSChannel() const
05368     {
05369         return internalRequestProperty(QLatin1String("SMSChannel"));
05370     }
05371 
05378     Tp::PendingVariantMap *requestAllProperties() const
05379     {
05380         return internalRequestAllProperties();
05381     }
05382 
05383 public Q_SLOTS:
05448     inline QDBusPendingReply<uint, int, int> GetSMSLength(const Tp::MessagePartList& message, int timeout = -1)
05449     {
05450         if (!invalidationReason().isEmpty()) {
05451             return QDBusPendingReply<uint, int, int>(QDBusMessage::createError(
05452                 invalidationReason(),
05453                 invalidationMessage()
05454             ));
05455         }
05456 
05457         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
05458                 this->staticInterfaceName(), QLatin1String("GetSMSLength"));
05459         callMessage << QVariant::fromValue(message);
05460         return this->connection().asyncCall(callMessage, timeout);
05461     }
05462 
05463 Q_SIGNALS:
05473     void SMSChannelChanged(bool SMSChannel);
05474 
05475 protected:
05476     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
05477 };
05478 
05486 class TP_QT_EXPORT ChannelInterfaceSecurableInterface : public Tp::AbstractInterface
05487 {
05488     Q_OBJECT
05489 
05490 public:
05497     static inline QLatin1String staticInterfaceName()
05498     {
05499         return QLatin1String("org.freedesktop.Telepathy.Channel.Interface.Securable");
05500     }
05501 
05509     ChannelInterfaceSecurableInterface(
05510         const QString& busName,
05511         const QString& objectPath,
05512         QObject* parent = 0
05513     );
05514 
05523     ChannelInterfaceSecurableInterface(
05524         const QDBusConnection& connection,
05525         const QString& busName,
05526         const QString& objectPath,
05527         QObject* parent = 0
05528     );
05529 
05536     ChannelInterfaceSecurableInterface(Tp::DBusProxy *proxy);
05537 
05545     explicit ChannelInterfaceSecurableInterface(const Tp::Client::ChannelInterface& mainInterface);
05546 
05554     ChannelInterfaceSecurableInterface(const Tp::Client::ChannelInterface& mainInterface, QObject* parent);
05555 
05577     inline Tp::PendingVariant *requestPropertyEncrypted() const
05578     {
05579         return internalRequestProperty(QLatin1String("Encrypted"));
05580     }
05581 
05598     inline Tp::PendingVariant *requestPropertyVerified() const
05599     {
05600         return internalRequestProperty(QLatin1String("Verified"));
05601     }
05602 
05609     Tp::PendingVariantMap *requestAllProperties() const
05610     {
05611         return internalRequestAllProperties();
05612     }
05613 
05614 protected:
05615     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
05616 };
05617 
05625 class TP_QT_EXPORT ChannelInterfaceServicePointInterface : public Tp::AbstractInterface
05626 {
05627     Q_OBJECT
05628 
05629 public:
05636     static inline QLatin1String staticInterfaceName()
05637     {
05638         return QLatin1String("org.freedesktop.Telepathy.Channel.Interface.ServicePoint");
05639     }
05640 
05648     ChannelInterfaceServicePointInterface(
05649         const QString& busName,
05650         const QString& objectPath,
05651         QObject* parent = 0
05652     );
05653 
05662     ChannelInterfaceServicePointInterface(
05663         const QDBusConnection& connection,
05664         const QString& busName,
05665         const QString& objectPath,
05666         QObject* parent = 0
05667     );
05668 
05675     ChannelInterfaceServicePointInterface(Tp::DBusProxy *proxy);
05676 
05684     explicit ChannelInterfaceServicePointInterface(const Tp::Client::ChannelInterface& mainInterface);
05685 
05693     ChannelInterfaceServicePointInterface(const Tp::Client::ChannelInterface& mainInterface, QObject* parent);
05694 
05714     inline Tp::PendingVariant *requestPropertyInitialServicePoint() const
05715     {
05716         return internalRequestProperty(QLatin1String("InitialServicePoint"));
05717     }
05718 
05731     inline Tp::PendingVariant *requestPropertyCurrentServicePoint() const
05732     {
05733         return internalRequestProperty(QLatin1String("CurrentServicePoint"));
05734     }
05735 
05742     Tp::PendingVariantMap *requestAllProperties() const
05743     {
05744         return internalRequestAllProperties();
05745     }
05746 
05747 Q_SIGNALS:
05764     void ServicePointChanged(const Tp::ServicePoint& servicePoint);
05765 
05766 protected:
05767     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
05768 };
05769 
05777 class TP_QT_EXPORT ChannelInterfaceTubeInterface : public Tp::AbstractInterface
05778 {
05779     Q_OBJECT
05780 
05781 public:
05788     static inline QLatin1String staticInterfaceName()
05789     {
05790         return QLatin1String("org.freedesktop.Telepathy.Channel.Interface.Tube");
05791     }
05792 
05800     ChannelInterfaceTubeInterface(
05801         const QString& busName,
05802         const QString& objectPath,
05803         QObject* parent = 0
05804     );
05805 
05814     ChannelInterfaceTubeInterface(
05815         const QDBusConnection& connection,
05816         const QString& busName,
05817         const QString& objectPath,
05818         QObject* parent = 0
05819     );
05820 
05827     ChannelInterfaceTubeInterface(Tp::DBusProxy *proxy);
05828 
05836     explicit ChannelInterfaceTubeInterface(const Tp::Client::ChannelInterface& mainInterface);
05837 
05845     ChannelInterfaceTubeInterface(const Tp::Client::ChannelInterface& mainInterface, QObject* parent);
05846 
05892     inline Tp::PendingVariant *requestPropertyParameters() const
05893     {
05894         return internalRequestProperty(QLatin1String("Parameters"));
05895     }
05896 
05912     inline Tp::PendingVariant *requestPropertyState() const
05913     {
05914         return internalRequestProperty(QLatin1String("State"));
05915     }
05916 
05923     Tp::PendingVariantMap *requestAllProperties() const
05924     {
05925         return internalRequestAllProperties();
05926     }
05927 
05928 Q_SIGNALS:
05939     void TubeChannelStateChanged(uint state);
05940 
05941 protected:
05942     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
05943 };
05944 
05952 class TP_QT_EXPORT ChannelTypeCallInterface : public Tp::AbstractInterface
05953 {
05954     Q_OBJECT
05955 
05956 public:
05963     static inline QLatin1String staticInterfaceName()
05964     {
05965         return QLatin1String("org.freedesktop.Telepathy.Channel.Type.Call1");
05966     }
05967 
05975     ChannelTypeCallInterface(
05976         const QString& busName,
05977         const QString& objectPath,
05978         QObject* parent = 0
05979     );
05980 
05989     ChannelTypeCallInterface(
05990         const QDBusConnection& connection,
05991         const QString& busName,
05992         const QString& objectPath,
05993         QObject* parent = 0
05994     );
05995 
06002     ChannelTypeCallInterface(Tp::DBusProxy *proxy);
06003 
06011     explicit ChannelTypeCallInterface(const Tp::Client::ChannelInterface& mainInterface);
06012 
06020     ChannelTypeCallInterface(const Tp::Client::ChannelInterface& mainInterface, QObject* parent);
06021 
06037     inline Tp::PendingVariant *requestPropertyContents() const
06038     {
06039         return internalRequestProperty(QLatin1String("Contents"));
06040     }
06041 
06105     inline Tp::PendingVariant *requestPropertyCallStateDetails() const
06106     {
06107         return internalRequestProperty(QLatin1String("CallStateDetails"));
06108     }
06109 
06134     inline Tp::PendingVariant *requestPropertyCallState() const
06135     {
06136         return internalRequestProperty(QLatin1String("CallState"));
06137     }
06138 
06158     inline Tp::PendingVariant *requestPropertyCallFlags() const
06159     {
06160         return internalRequestProperty(QLatin1String("CallFlags"));
06161     }
06162 
06178     inline Tp::PendingVariant *requestPropertyCallStateReason() const
06179     {
06180         return internalRequestProperty(QLatin1String("CallStateReason"));
06181     }
06182 
06216     inline Tp::PendingVariant *requestPropertyHardwareStreaming() const
06217     {
06218         return internalRequestProperty(QLatin1String("HardwareStreaming"));
06219     }
06220 
06246     inline Tp::PendingVariant *requestPropertyCallMembers() const
06247     {
06248         return internalRequestProperty(QLatin1String("CallMembers"));
06249     }
06250 
06262     inline Tp::PendingVariant *requestPropertyMemberIdentifiers() const
06263     {
06264         return internalRequestProperty(QLatin1String("MemberIdentifiers"));
06265     }
06266 
06288     inline Tp::PendingVariant *requestPropertyInitialTransport() const
06289     {
06290         return internalRequestProperty(QLatin1String("InitialTransport"));
06291     }
06292 
06362     inline Tp::PendingVariant *requestPropertyInitialAudio() const
06363     {
06364         return internalRequestProperty(QLatin1String("InitialAudio"));
06365     }
06366 
06387     inline Tp::PendingVariant *requestPropertyInitialVideo() const
06388     {
06389         return internalRequestProperty(QLatin1String("InitialVideo"));
06390     }
06391 
06419     inline Tp::PendingVariant *requestPropertyInitialAudioName() const
06420     {
06421         return internalRequestProperty(QLatin1String("InitialAudioName"));
06422     }
06423 
06439     inline Tp::PendingVariant *requestPropertyInitialVideoName() const
06440     {
06441         return internalRequestProperty(QLatin1String("InitialVideoName"));
06442     }
06443 
06475     inline Tp::PendingVariant *requestPropertyMutableContents() const
06476     {
06477         return internalRequestProperty(QLatin1String("MutableContents"));
06478     }
06479 
06486     Tp::PendingVariantMap *requestAllProperties() const
06487     {
06488         return internalRequestAllProperties();
06489     }
06490 
06491 public Q_SLOTS:
06520     inline QDBusPendingReply<> SetRinging(int timeout = -1)
06521     {
06522         if (!invalidationReason().isEmpty()) {
06523             return QDBusPendingReply<>(QDBusMessage::createError(
06524                 invalidationReason(),
06525                 invalidationMessage()
06526             ));
06527         }
06528 
06529         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
06530                 this->staticInterfaceName(), QLatin1String("SetRinging"));
06531         return this->connection().asyncCall(callMessage, timeout);
06532     }
06533 
06564     inline QDBusPendingReply<> SetQueued(int timeout = -1)
06565     {
06566         if (!invalidationReason().isEmpty()) {
06567             return QDBusPendingReply<>(QDBusMessage::createError(
06568                 invalidationReason(),
06569                 invalidationMessage()
06570             ));
06571         }
06572 
06573         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
06574                 this->staticInterfaceName(), QLatin1String("SetQueued"));
06575         return this->connection().asyncCall(callMessage, timeout);
06576     }
06577 
06612     inline QDBusPendingReply<> Accept(int timeout = -1)
06613     {
06614         if (!invalidationReason().isEmpty()) {
06615             return QDBusPendingReply<>(QDBusMessage::createError(
06616                 invalidationReason(),
06617                 invalidationMessage()
06618             ));
06619         }
06620 
06621         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
06622                 this->staticInterfaceName(), QLatin1String("Accept"));
06623         return this->connection().asyncCall(callMessage, timeout);
06624     }
06625 
06651     inline QDBusPendingReply<> Hangup(uint reason, const QString& detailedHangupReason, const QString& message, int timeout = -1)
06652     {
06653         if (!invalidationReason().isEmpty()) {
06654             return QDBusPendingReply<>(QDBusMessage::createError(
06655                 invalidationReason(),
06656                 invalidationMessage()
06657             ));
06658         }
06659 
06660         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
06661                 this->staticInterfaceName(), QLatin1String("Hangup"));
06662         callMessage << QVariant::fromValue(reason) << QVariant::fromValue(detailedHangupReason) << QVariant::fromValue(message);
06663         return this->connection().asyncCall(callMessage, timeout);
06664     }
06665 
06704     inline QDBusPendingReply<QDBusObjectPath> AddContent(const QString& contentName, uint contentType, uint initialDirection, int timeout = -1)
06705     {
06706         if (!invalidationReason().isEmpty()) {
06707             return QDBusPendingReply<QDBusObjectPath>(QDBusMessage::createError(
06708                 invalidationReason(),
06709                 invalidationMessage()
06710             ));
06711         }
06712 
06713         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
06714                 this->staticInterfaceName(), QLatin1String("AddContent"));
06715         callMessage << QVariant::fromValue(contentName) << QVariant::fromValue(contentType) << QVariant::fromValue(initialDirection);
06716         return this->connection().asyncCall(callMessage, timeout);
06717     }
06718 
06719 Q_SIGNALS:
06731     void ContentAdded(const QDBusObjectPath& content);
06732 
06748     void ContentRemoved(const QDBusObjectPath& content, const Tp::CallStateReason& reason);
06749 
06777     void CallStateChanged(uint callState, uint callFlags, const Tp::CallStateReason& callStateReason, const QVariantMap& callStateDetails);
06778 
06807     void CallMembersChanged(const Tp::CallMemberMap& flagsChanged, const Tp::HandleIdentifierMap& identifiers, const Tp::UIntList& removed, const Tp::CallStateReason& reason);
06808 
06809 protected:
06810     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
06811 };
06812 
06820 class TP_QT_EXPORT ChannelTypeContactListInterface : public Tp::AbstractInterface
06821 {
06822     Q_OBJECT
06823 
06824 public:
06831     static inline QLatin1String staticInterfaceName()
06832     {
06833         return QLatin1String("org.freedesktop.Telepathy.Channel.Type.ContactList");
06834     }
06835 
06843     ChannelTypeContactListInterface(
06844         const QString& busName,
06845         const QString& objectPath,
06846         QObject* parent = 0
06847     );
06848 
06857     ChannelTypeContactListInterface(
06858         const QDBusConnection& connection,
06859         const QString& busName,
06860         const QString& objectPath,
06861         QObject* parent = 0
06862     );
06863 
06870     ChannelTypeContactListInterface(Tp::DBusProxy *proxy);
06871 
06879     explicit ChannelTypeContactListInterface(const Tp::Client::ChannelInterface& mainInterface);
06880 
06888     ChannelTypeContactListInterface(const Tp::Client::ChannelInterface& mainInterface, QObject* parent);
06889 
06896     Tp::PendingVariantMap *requestAllProperties() const
06897     {
06898         return internalRequestAllProperties();
06899     }
06900 
06901 protected:
06902     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
06903 };
06904 
06912 class TP_QT_EXPORT ChannelTypeContactSearchInterface : public Tp::AbstractInterface
06913 {
06914     Q_OBJECT
06915 
06916 public:
06923     static inline QLatin1String staticInterfaceName()
06924     {
06925         return QLatin1String("org.freedesktop.Telepathy.Channel.Type.ContactSearch");
06926     }
06927 
06935     ChannelTypeContactSearchInterface(
06936         const QString& busName,
06937         const QString& objectPath,
06938         QObject* parent = 0
06939     );
06940 
06949     ChannelTypeContactSearchInterface(
06950         const QDBusConnection& connection,
06951         const QString& busName,
06952         const QString& objectPath,
06953         QObject* parent = 0
06954     );
06955 
06962     ChannelTypeContactSearchInterface(Tp::DBusProxy *proxy);
06963 
06971     explicit ChannelTypeContactSearchInterface(const Tp::Client::ChannelInterface& mainInterface);
06972 
06980     ChannelTypeContactSearchInterface(const Tp::Client::ChannelInterface& mainInterface, QObject* parent);
06981 
06992     inline Tp::PendingVariant *requestPropertySearchState() const
06993     {
06994         return internalRequestProperty(QLatin1String("SearchState"));
06995     }
06996 
07022     inline Tp::PendingVariant *requestPropertyLimit() const
07023     {
07024         return internalRequestProperty(QLatin1String("Limit"));
07025     }
07026 
07041     inline Tp::PendingVariant *requestPropertyAvailableSearchKeys() const
07042     {
07043         return internalRequestProperty(QLatin1String("AvailableSearchKeys"));
07044     }
07045 
07066     inline Tp::PendingVariant *requestPropertyServer() const
07067     {
07068         return internalRequestProperty(QLatin1String("Server"));
07069     }
07070 
07077     Tp::PendingVariantMap *requestAllProperties() const
07078     {
07079         return internalRequestAllProperties();
07080     }
07081 
07082 public Q_SLOTS:
07100     inline QDBusPendingReply<> Search(const Tp::ContactSearchMap& terms, int timeout = -1)
07101     {
07102         if (!invalidationReason().isEmpty()) {
07103             return QDBusPendingReply<>(QDBusMessage::createError(
07104                 invalidationReason(),
07105                 invalidationMessage()
07106             ));
07107         }
07108 
07109         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
07110                 this->staticInterfaceName(), QLatin1String("Search"));
07111         callMessage << QVariant::fromValue(terms);
07112         return this->connection().asyncCall(callMessage, timeout);
07113     }
07114 
07129     inline QDBusPendingReply<> More(int timeout = -1)
07130     {
07131         if (!invalidationReason().isEmpty()) {
07132             return QDBusPendingReply<>(QDBusMessage::createError(
07133                 invalidationReason(),
07134                 invalidationMessage()
07135             ));
07136         }
07137 
07138         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
07139                 this->staticInterfaceName(), QLatin1String("More"));
07140         return this->connection().asyncCall(callMessage, timeout);
07141     }
07142 
07175     inline QDBusPendingReply<> Stop(int timeout = -1)
07176     {
07177         if (!invalidationReason().isEmpty()) {
07178             return QDBusPendingReply<>(QDBusMessage::createError(
07179                 invalidationReason(),
07180                 invalidationMessage()
07181             ));
07182         }
07183 
07184         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
07185                 this->staticInterfaceName(), QLatin1String("Stop"));
07186         return this->connection().asyncCall(callMessage, timeout);
07187     }
07188 
07189 Q_SIGNALS:
07239     void SearchStateChanged(uint state, const QString& error, const QVariantMap& details);
07240 
07253     void SearchResultReceived(const Tp::ContactSearchResultMap& result);
07254 
07255 protected:
07256     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
07257 };
07258 
07266 class TP_QT_EXPORT ChannelTypeDBusTubeInterface : public Tp::AbstractInterface
07267 {
07268     Q_OBJECT
07269 
07270 public:
07277     static inline QLatin1String staticInterfaceName()
07278     {
07279         return QLatin1String("org.freedesktop.Telepathy.Channel.Type.DBusTube");
07280     }
07281 
07289     ChannelTypeDBusTubeInterface(
07290         const QString& busName,
07291         const QString& objectPath,
07292         QObject* parent = 0
07293     );
07294 
07303     ChannelTypeDBusTubeInterface(
07304         const QDBusConnection& connection,
07305         const QString& busName,
07306         const QString& objectPath,
07307         QObject* parent = 0
07308     );
07309 
07316     ChannelTypeDBusTubeInterface(Tp::DBusProxy *proxy);
07317 
07325     explicit ChannelTypeDBusTubeInterface(const Tp::Client::ChannelInterface& mainInterface);
07326 
07334     ChannelTypeDBusTubeInterface(const Tp::Client::ChannelInterface& mainInterface, QObject* parent);
07335 
07354     inline Tp::PendingVariant *requestPropertyServiceName() const
07355     {
07356         return internalRequestProperty(QLatin1String("ServiceName"));
07357     }
07358 
07371     inline Tp::PendingVariant *requestPropertyDBusNames() const
07372     {
07373         return internalRequestProperty(QLatin1String("DBusNames"));
07374     }
07375 
07403     inline Tp::PendingVariant *requestPropertySupportedAccessControls() const
07404     {
07405         return internalRequestProperty(QLatin1String("SupportedAccessControls"));
07406     }
07407 
07414     Tp::PendingVariantMap *requestAllProperties() const
07415     {
07416         return internalRequestAllProperties();
07417     }
07418 
07419 public Q_SLOTS:
07444     inline QDBusPendingReply<QString> Offer(const QVariantMap& parameters, uint accesscontrol, int timeout = -1)
07445     {
07446         if (!invalidationReason().isEmpty()) {
07447             return QDBusPendingReply<QString>(QDBusMessage::createError(
07448                 invalidationReason(),
07449                 invalidationMessage()
07450             ));
07451         }
07452 
07453         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
07454                 this->staticInterfaceName(), QLatin1String("Offer"));
07455         callMessage << QVariant::fromValue(parameters) << QVariant::fromValue(accesscontrol);
07456         return this->connection().asyncCall(callMessage, timeout);
07457     }
07458 
07482     inline QDBusPendingReply<QString> Accept(uint accesscontrol, int timeout = -1)
07483     {
07484         if (!invalidationReason().isEmpty()) {
07485             return QDBusPendingReply<QString>(QDBusMessage::createError(
07486                 invalidationReason(),
07487                 invalidationMessage()
07488             ));
07489         }
07490 
07491         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
07492                 this->staticInterfaceName(), QLatin1String("Accept"));
07493         callMessage << QVariant::fromValue(accesscontrol);
07494         return this->connection().asyncCall(callMessage, timeout);
07495     }
07496 
07497 Q_SIGNALS:
07513     void DBusNamesChanged(const Tp::DBusTubeParticipants& added, const Tp::UIntList& removed);
07514 
07515 protected:
07516     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
07517 };
07518 
07526 class TP_QT_EXPORT ChannelTypeFileTransferInterface : public Tp::AbstractInterface
07527 {
07528     Q_OBJECT
07529 
07530 public:
07537     static inline QLatin1String staticInterfaceName()
07538     {
07539         return QLatin1String("org.freedesktop.Telepathy.Channel.Type.FileTransfer");
07540     }
07541 
07549     ChannelTypeFileTransferInterface(
07550         const QString& busName,
07551         const QString& objectPath,
07552         QObject* parent = 0
07553     );
07554 
07563     ChannelTypeFileTransferInterface(
07564         const QDBusConnection& connection,
07565         const QString& busName,
07566         const QString& objectPath,
07567         QObject* parent = 0
07568     );
07569 
07576     ChannelTypeFileTransferInterface(Tp::DBusProxy *proxy);
07577 
07585     explicit ChannelTypeFileTransferInterface(const Tp::Client::ChannelInterface& mainInterface);
07586 
07594     ChannelTypeFileTransferInterface(const Tp::Client::ChannelInterface& mainInterface, QObject* parent);
07595 
07608     inline Tp::PendingVariant *requestPropertyState() const
07609     {
07610         return internalRequestProperty(QLatin1String("State"));
07611     }
07612 
07630     inline Tp::PendingVariant *requestPropertyContentType() const
07631     {
07632         return internalRequestProperty(QLatin1String("ContentType"));
07633     }
07634 
07656     inline Tp::PendingVariant *requestPropertyFilename() const
07657     {
07658         return internalRequestProperty(QLatin1String("Filename"));
07659     }
07660 
07684     inline Tp::PendingVariant *requestPropertySize() const
07685     {
07686         return internalRequestProperty(QLatin1String("Size"));
07687     }
07688 
07715     inline Tp::PendingVariant *requestPropertyContentHashType() const
07716     {
07717         return internalRequestProperty(QLatin1String("ContentHashType"));
07718     }
07719 
07740     inline Tp::PendingVariant *requestPropertyContentHash() const
07741     {
07742         return internalRequestProperty(QLatin1String("ContentHash"));
07743     }
07744 
07762     inline Tp::PendingVariant *requestPropertyDescription() const
07763     {
07764         return internalRequestProperty(QLatin1String("Description"));
07765     }
07766 
07783     inline Tp::PendingVariant *requestPropertyDate() const
07784     {
07785         return internalRequestProperty(QLatin1String("Date"));
07786     }
07787 
07816     inline Tp::PendingVariant *requestPropertyAvailableSocketTypes() const
07817     {
07818         return internalRequestProperty(QLatin1String("AvailableSocketTypes"));
07819     }
07820 
07834     inline Tp::PendingVariant *requestPropertyTransferredBytes() const
07835     {
07836         return internalRequestProperty(QLatin1String("TransferredBytes"));
07837     }
07838 
07861     inline Tp::PendingVariant *requestPropertyInitialOffset() const
07862     {
07863         return internalRequestProperty(QLatin1String("InitialOffset"));
07864     }
07865 
07901     inline Tp::PendingVariant *requestPropertyURI() const
07902     {
07903         return internalRequestProperty(QLatin1String("URI"));
07904     }
07905 
07941     inline Tp::PendingOperation *setPropertyURI(QString newValue)
07942     {
07943         return internalSetProperty(QLatin1String("URI"), QVariant::fromValue(newValue));
07944     }
07945 
07952     Tp::PendingVariantMap *requestAllProperties() const
07953     {
07954         return internalRequestAllProperties();
07955     }
07956 
07957 public Q_SLOTS:
08002     inline QDBusPendingReply<QDBusVariant> AcceptFile(uint addressType, uint accessControl, const QDBusVariant& accessControlParam, qulonglong offset, int timeout = -1)
08003     {
08004         if (!invalidationReason().isEmpty()) {
08005             return QDBusPendingReply<QDBusVariant>(QDBusMessage::createError(
08006                 invalidationReason(),
08007                 invalidationMessage()
08008             ));
08009         }
08010 
08011         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
08012                 this->staticInterfaceName(), QLatin1String("AcceptFile"));
08013         callMessage << QVariant::fromValue(addressType) << QVariant::fromValue(accessControl) << QVariant::fromValue(accessControlParam) << QVariant::fromValue(offset);
08014         return this->connection().asyncCall(callMessage, timeout);
08015     }
08016 
08050     inline QDBusPendingReply<QDBusVariant> ProvideFile(uint addressType, uint accessControl, const QDBusVariant& accessControlParam, int timeout = -1)
08051     {
08052         if (!invalidationReason().isEmpty()) {
08053             return QDBusPendingReply<QDBusVariant>(QDBusMessage::createError(
08054                 invalidationReason(),
08055                 invalidationMessage()
08056             ));
08057         }
08058 
08059         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
08060                 this->staticInterfaceName(), QLatin1String("ProvideFile"));
08061         callMessage << QVariant::fromValue(addressType) << QVariant::fromValue(accessControl) << QVariant::fromValue(accessControlParam);
08062         return this->connection().asyncCall(callMessage, timeout);
08063     }
08064 
08065 Q_SIGNALS:
08083     void FileTransferStateChanged(uint state, uint reason);
08084 
08097     void TransferredBytesChanged(qulonglong count);
08098 
08110     void InitialOffsetDefined(qulonglong initialOffset);
08111 
08123     void URIDefined(const QString& URI);
08124 
08125 protected:
08126     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
08127 };
08128 
08136 class TP_QT_EXPORT ChannelTypeRoomListInterface : public Tp::AbstractInterface
08137 {
08138     Q_OBJECT
08139 
08140 public:
08147     static inline QLatin1String staticInterfaceName()
08148     {
08149         return QLatin1String("org.freedesktop.Telepathy.Channel.Type.RoomList");
08150     }
08151 
08159     ChannelTypeRoomListInterface(
08160         const QString& busName,
08161         const QString& objectPath,
08162         QObject* parent = 0
08163     );
08164 
08173     ChannelTypeRoomListInterface(
08174         const QDBusConnection& connection,
08175         const QString& busName,
08176         const QString& objectPath,
08177         QObject* parent = 0
08178     );
08179 
08186     ChannelTypeRoomListInterface(Tp::DBusProxy *proxy);
08187 
08195     explicit ChannelTypeRoomListInterface(const Tp::Client::ChannelInterface& mainInterface);
08196 
08204     ChannelTypeRoomListInterface(const Tp::Client::ChannelInterface& mainInterface, QObject* parent);
08205 
08219     inline Tp::PendingVariant *requestPropertyServer() const
08220     {
08221         return internalRequestProperty(QLatin1String("Server"));
08222     }
08223 
08230     Tp::PendingVariantMap *requestAllProperties() const
08231     {
08232         return internalRequestAllProperties();
08233     }
08234 
08235 public Q_SLOTS:
08251     inline QDBusPendingReply<bool> GetListingRooms(int timeout = -1)
08252     {
08253         if (!invalidationReason().isEmpty()) {
08254             return QDBusPendingReply<bool>(QDBusMessage::createError(
08255                 invalidationReason(),
08256                 invalidationMessage()
08257             ));
08258         }
08259 
08260         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
08261                 this->staticInterfaceName(), QLatin1String("GetListingRooms"));
08262         return this->connection().asyncCall(callMessage, timeout);
08263     }
08264 
08278     inline QDBusPendingReply<> ListRooms(int timeout = -1)
08279     {
08280         if (!invalidationReason().isEmpty()) {
08281             return QDBusPendingReply<>(QDBusMessage::createError(
08282                 invalidationReason(),
08283                 invalidationMessage()
08284             ));
08285         }
08286 
08287         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
08288                 this->staticInterfaceName(), QLatin1String("ListRooms"));
08289         return this->connection().asyncCall(callMessage, timeout);
08290     }
08291 
08304     inline QDBusPendingReply<> StopListing(int timeout = -1)
08305     {
08306         if (!invalidationReason().isEmpty()) {
08307             return QDBusPendingReply<>(QDBusMessage::createError(
08308                 invalidationReason(),
08309                 invalidationMessage()
08310             ));
08311         }
08312 
08313         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
08314                 this->staticInterfaceName(), QLatin1String("StopListing"));
08315         return this->connection().asyncCall(callMessage, timeout);
08316     }
08317 
08318 Q_SIGNALS:
08376     void GotRooms(const Tp::RoomInfoList& rooms);
08377 
08388     void ListingRooms(bool listing);
08389 
08390 protected:
08391     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
08392 };
08393 
08401 class TP_QT_EXPORT ChannelTypeServerAuthenticationInterface : public Tp::AbstractInterface
08402 {
08403     Q_OBJECT
08404 
08405 public:
08412     static inline QLatin1String staticInterfaceName()
08413     {
08414         return QLatin1String("org.freedesktop.Telepathy.Channel.Type.ServerAuthentication");
08415     }
08416 
08424     ChannelTypeServerAuthenticationInterface(
08425         const QString& busName,
08426         const QString& objectPath,
08427         QObject* parent = 0
08428     );
08429 
08438     ChannelTypeServerAuthenticationInterface(
08439         const QDBusConnection& connection,
08440         const QString& busName,
08441         const QString& objectPath,
08442         QObject* parent = 0
08443     );
08444 
08451     ChannelTypeServerAuthenticationInterface(Tp::DBusProxy *proxy);
08452 
08460     explicit ChannelTypeServerAuthenticationInterface(const Tp::Client::ChannelInterface& mainInterface);
08461 
08469     ChannelTypeServerAuthenticationInterface(const Tp::Client::ChannelInterface& mainInterface, QObject* parent);
08470 
08487     inline Tp::PendingVariant *requestPropertyAuthenticationMethod() const
08488     {
08489         return internalRequestProperty(QLatin1String("AuthenticationMethod"));
08490     }
08491 
08498     Tp::PendingVariantMap *requestAllProperties() const
08499     {
08500         return internalRequestAllProperties();
08501     }
08502 
08503 protected:
08504     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
08505 };
08506 
08514 class TP_QT_EXPORT ChannelTypeServerTLSConnectionInterface : public Tp::AbstractInterface
08515 {
08516     Q_OBJECT
08517 
08518 public:
08525     static inline QLatin1String staticInterfaceName()
08526     {
08527         return QLatin1String("org.freedesktop.Telepathy.Channel.Type.ServerTLSConnection");
08528     }
08529 
08537     ChannelTypeServerTLSConnectionInterface(
08538         const QString& busName,
08539         const QString& objectPath,
08540         QObject* parent = 0
08541     );
08542 
08551     ChannelTypeServerTLSConnectionInterface(
08552         const QDBusConnection& connection,
08553         const QString& busName,
08554         const QString& objectPath,
08555         QObject* parent = 0
08556     );
08557 
08564     ChannelTypeServerTLSConnectionInterface(Tp::DBusProxy *proxy);
08565 
08573     explicit ChannelTypeServerTLSConnectionInterface(const Tp::Client::ChannelInterface& mainInterface);
08574 
08582     ChannelTypeServerTLSConnectionInterface(const Tp::Client::ChannelInterface& mainInterface, QObject* parent);
08583 
08594     inline Tp::PendingVariant *requestPropertyServerCertificate() const
08595     {
08596         return internalRequestProperty(QLatin1String("ServerCertificate"));
08597     }
08598 
08612     inline Tp::PendingVariant *requestPropertyHostname() const
08613     {
08614         return internalRequestProperty(QLatin1String("Hostname"));
08615     }
08616 
08643     inline Tp::PendingVariant *requestPropertyReferenceIdentities() const
08644     {
08645         return internalRequestProperty(QLatin1String("ReferenceIdentities"));
08646     }
08647 
08654     Tp::PendingVariantMap *requestAllProperties() const
08655     {
08656         return internalRequestAllProperties();
08657     }
08658 
08659 protected:
08660     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
08661 };
08662 
08670 class TP_QT_EXPORT ChannelTypeStreamTubeInterface : public Tp::AbstractInterface
08671 {
08672     Q_OBJECT
08673 
08674 public:
08681     static inline QLatin1String staticInterfaceName()
08682     {
08683         return QLatin1String("org.freedesktop.Telepathy.Channel.Type.StreamTube");
08684     }
08685 
08693     ChannelTypeStreamTubeInterface(
08694         const QString& busName,
08695         const QString& objectPath,
08696         QObject* parent = 0
08697     );
08698 
08707     ChannelTypeStreamTubeInterface(
08708         const QDBusConnection& connection,
08709         const QString& busName,
08710         const QString& objectPath,
08711         QObject* parent = 0
08712     );
08713 
08720     ChannelTypeStreamTubeInterface(Tp::DBusProxy *proxy);
08721 
08729     explicit ChannelTypeStreamTubeInterface(const Tp::Client::ChannelInterface& mainInterface);
08730 
08738     ChannelTypeStreamTubeInterface(const Tp::Client::ChannelInterface& mainInterface, QObject* parent);
08739 
08762     inline Tp::PendingVariant *requestPropertyService() const
08763     {
08764         return internalRequestProperty(QLatin1String("Service"));
08765     }
08766 
08801     inline Tp::PendingVariant *requestPropertySupportedSocketTypes() const
08802     {
08803         return internalRequestProperty(QLatin1String("SupportedSocketTypes"));
08804     }
08805 
08812     Tp::PendingVariantMap *requestAllProperties() const
08813     {
08814         return internalRequestAllProperties();
08815     }
08816 
08817 public Q_SLOTS:
08848     inline QDBusPendingReply<> Offer(uint addresstype, const QDBusVariant& address, uint accesscontrol, const QVariantMap& parameters, int timeout = -1)
08849     {
08850         if (!invalidationReason().isEmpty()) {
08851             return QDBusPendingReply<>(QDBusMessage::createError(
08852                 invalidationReason(),
08853                 invalidationMessage()
08854             ));
08855         }
08856 
08857         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
08858                 this->staticInterfaceName(), QLatin1String("Offer"));
08859         callMessage << QVariant::fromValue(addresstype) << QVariant::fromValue(address) << QVariant::fromValue(accesscontrol) << QVariant::fromValue(parameters);
08860         return this->connection().asyncCall(callMessage, timeout);
08861     }
08862 
08903     inline QDBusPendingReply<QDBusVariant> Accept(uint addresstype, uint accesscontrol, const QDBusVariant& accesscontrolparam, int timeout = -1)
08904     {
08905         if (!invalidationReason().isEmpty()) {
08906             return QDBusPendingReply<QDBusVariant>(QDBusMessage::createError(
08907                 invalidationReason(),
08908                 invalidationMessage()
08909             ));
08910         }
08911 
08912         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
08913                 this->staticInterfaceName(), QLatin1String("Accept"));
08914         callMessage << QVariant::fromValue(addresstype) << QVariant::fromValue(accesscontrol) << QVariant::fromValue(accesscontrolparam);
08915         return this->connection().asyncCall(callMessage, timeout);
08916     }
08917 
08918 Q_SIGNALS:
08959     void NewRemoteConnection(uint handle, const QDBusVariant& connectionParam, uint connectionID);
08960 
08976     void NewLocalConnection(uint connectionID);
08977 
09009     void ConnectionClosed(uint connectionID, const QString& error, const QString& message);
09010 
09011 protected:
09012     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
09013 };
09014 
09022 class TP_QT_EXPORT ChannelTypeStreamedMediaInterface : public Tp::AbstractInterface
09023 {
09024     Q_OBJECT
09025 
09026 public:
09033     static inline QLatin1String staticInterfaceName()
09034     {
09035         return QLatin1String("org.freedesktop.Telepathy.Channel.Type.StreamedMedia");
09036     }
09037 
09045     ChannelTypeStreamedMediaInterface(
09046         const QString& busName,
09047         const QString& objectPath,
09048         QObject* parent = 0
09049     );
09050 
09059     ChannelTypeStreamedMediaInterface(
09060         const QDBusConnection& connection,
09061         const QString& busName,
09062         const QString& objectPath,
09063         QObject* parent = 0
09064     );
09065 
09072     ChannelTypeStreamedMediaInterface(Tp::DBusProxy *proxy);
09073 
09081     explicit ChannelTypeStreamedMediaInterface(const Tp::Client::ChannelInterface& mainInterface);
09082 
09090     ChannelTypeStreamedMediaInterface(const Tp::Client::ChannelInterface& mainInterface, QObject* parent);
09091 
09180     inline Tp::PendingVariant *requestPropertyInitialAudio() const
09181     {
09182         return internalRequestProperty(QLatin1String("InitialAudio"));
09183     }
09184 
09205     inline Tp::PendingVariant *requestPropertyInitialVideo() const
09206     {
09207         return internalRequestProperty(QLatin1String("InitialVideo"));
09208     }
09209 
09252     inline Tp::PendingVariant *requestPropertyImmutableStreams() const
09253     {
09254         return internalRequestProperty(QLatin1String("ImmutableStreams"));
09255     }
09256 
09263     Tp::PendingVariantMap *requestAllProperties() const
09264     {
09265         return internalRequestAllProperties();
09266     }
09267 
09268 public Q_SLOTS:
09296     inline QDBusPendingReply<Tp::MediaStreamInfoList> ListStreams(int timeout = -1)
09297     {
09298         if (!invalidationReason().isEmpty()) {
09299             return QDBusPendingReply<Tp::MediaStreamInfoList>(QDBusMessage::createError(
09300                 invalidationReason(),
09301                 invalidationMessage()
09302             ));
09303         }
09304 
09305         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
09306                 this->staticInterfaceName(), QLatin1String("ListStreams"));
09307         return this->connection().asyncCall(callMessage, timeout);
09308     }
09309 
09336     inline QDBusPendingReply<> RemoveStreams(const Tp::UIntList& streams, int timeout = -1)
09337     {
09338         if (!invalidationReason().isEmpty()) {
09339             return QDBusPendingReply<>(QDBusMessage::createError(
09340                 invalidationReason(),
09341                 invalidationMessage()
09342             ));
09343         }
09344 
09345         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
09346                 this->staticInterfaceName(), QLatin1String("RemoveStreams"));
09347         callMessage << QVariant::fromValue(streams);
09348         return this->connection().asyncCall(callMessage, timeout);
09349     }
09350 
09387     inline QDBusPendingReply<> RequestStreamDirection(uint streamID, uint streamDirection, int timeout = -1)
09388     {
09389         if (!invalidationReason().isEmpty()) {
09390             return QDBusPendingReply<>(QDBusMessage::createError(
09391                 invalidationReason(),
09392                 invalidationMessage()
09393             ));
09394         }
09395 
09396         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
09397                 this->staticInterfaceName(), QLatin1String("RequestStreamDirection"));
09398         callMessage << QVariant::fromValue(streamID) << QVariant::fromValue(streamDirection);
09399         return this->connection().asyncCall(callMessage, timeout);
09400     }
09401 
09454     inline QDBusPendingReply<Tp::MediaStreamInfoList> RequestStreams(uint contactHandle, const Tp::UIntList& types, int timeout = -1)
09455     {
09456         if (!invalidationReason().isEmpty()) {
09457             return QDBusPendingReply<Tp::MediaStreamInfoList>(QDBusMessage::createError(
09458                 invalidationReason(),
09459                 invalidationMessage()
09460             ));
09461         }
09462 
09463         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
09464                 this->staticInterfaceName(), QLatin1String("RequestStreams"));
09465         callMessage << QVariant::fromValue(contactHandle) << QVariant::fromValue(types);
09466         return this->connection().asyncCall(callMessage, timeout);
09467     }
09468 
09469 Q_SIGNALS:
09536     void StreamAdded(uint streamID, uint contactHandle, uint streamType);
09537 
09569     void StreamDirectionChanged(uint streamID, uint streamDirection, uint pendingFlags);
09570 
09588     void StreamError(uint streamID, uint errorCode, const QString& message);
09589 
09599     void StreamRemoved(uint streamID);
09600 
09614     void StreamStateChanged(uint streamID, uint streamState);
09615 
09616 protected:
09617     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
09618 };
09619 
09627 class TP_QT_EXPORT ChannelTypeTextInterface : public Tp::AbstractInterface
09628 {
09629     Q_OBJECT
09630 
09631 public:
09638     static inline QLatin1String staticInterfaceName()
09639     {
09640         return QLatin1String("org.freedesktop.Telepathy.Channel.Type.Text");
09641     }
09642 
09650     ChannelTypeTextInterface(
09651         const QString& busName,
09652         const QString& objectPath,
09653         QObject* parent = 0
09654     );
09655 
09664     ChannelTypeTextInterface(
09665         const QDBusConnection& connection,
09666         const QString& busName,
09667         const QString& objectPath,
09668         QObject* parent = 0
09669     );
09670 
09677     ChannelTypeTextInterface(Tp::DBusProxy *proxy);
09678 
09686     explicit ChannelTypeTextInterface(const Tp::Client::ChannelInterface& mainInterface);
09687 
09695     ChannelTypeTextInterface(const Tp::Client::ChannelInterface& mainInterface, QObject* parent);
09696 
09703     Tp::PendingVariantMap *requestAllProperties() const
09704     {
09705         return internalRequestAllProperties();
09706     }
09707 
09708 public Q_SLOTS:
09724     inline QDBusPendingReply<> AcknowledgePendingMessages(const Tp::UIntList& IDs, int timeout = -1)
09725     {
09726         if (!invalidationReason().isEmpty()) {
09727             return QDBusPendingReply<>(QDBusMessage::createError(
09728                 invalidationReason(),
09729                 invalidationMessage()
09730             ));
09731         }
09732 
09733         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
09734                 this->staticInterfaceName(), QLatin1String("AcknowledgePendingMessages"));
09735         callMessage << QVariant::fromValue(IDs);
09736         return this->connection().asyncCall(callMessage, timeout);
09737     }
09738 
09754     inline QDBusPendingReply<Tp::UIntList> GetMessageTypes(int timeout = -1)
09755     {
09756         if (!invalidationReason().isEmpty()) {
09757             return QDBusPendingReply<Tp::UIntList>(QDBusMessage::createError(
09758                 invalidationReason(),
09759                 invalidationMessage()
09760             ));
09761         }
09762 
09763         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
09764                 this->staticInterfaceName(), QLatin1String("GetMessageTypes"));
09765         return this->connection().asyncCall(callMessage, timeout);
09766     }
09767 
09798     inline QDBusPendingReply<Tp::PendingTextMessageList> ListPendingMessages(bool clear, int timeout = -1)
09799     {
09800         if (!invalidationReason().isEmpty()) {
09801             return QDBusPendingReply<Tp::PendingTextMessageList>(QDBusMessage::createError(
09802                 invalidationReason(),
09803                 invalidationMessage()
09804             ));
09805         }
09806 
09807         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
09808                 this->staticInterfaceName(), QLatin1String("ListPendingMessages"));
09809         callMessage << QVariant::fromValue(clear);
09810         return this->connection().asyncCall(callMessage, timeout);
09811     }
09812 
09845     inline QDBusPendingReply<> Send(uint type, const QString& text, int timeout = -1)
09846     {
09847         if (!invalidationReason().isEmpty()) {
09848             return QDBusPendingReply<>(QDBusMessage::createError(
09849                 invalidationReason(),
09850                 invalidationMessage()
09851             ));
09852         }
09853 
09854         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
09855                 this->staticInterfaceName(), QLatin1String("Send"));
09856         callMessage << QVariant::fromValue(type) << QVariant::fromValue(text);
09857         return this->connection().asyncCall(callMessage, timeout);
09858     }
09859 
09860 Q_SIGNALS:
09868     void LostMessage();
09869 
09903     void Received(uint ID, uint timestamp, uint sender, uint type, uint flags, const QString& text);
09904 
09933     void SendError(uint error, uint timestamp, uint type, const QString& text);
09934 
09958     void Sent(uint timestamp, uint type, const QString& text);
09959 
09960 protected:
09961     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
09962 };
09963 
09971 class TP_QT_EXPORT ChannelTypeTubesInterface : public Tp::AbstractInterface
09972 {
09973     Q_OBJECT
09974 
09975 public:
09982     static inline QLatin1String staticInterfaceName()
09983     {
09984         return QLatin1String("org.freedesktop.Telepathy.Channel.Type.Tubes");
09985     }
09986 
09994     ChannelTypeTubesInterface(
09995         const QString& busName,
09996         const QString& objectPath,
09997         QObject* parent = 0
09998     );
09999 
10008     ChannelTypeTubesInterface(
10009         const QDBusConnection& connection,
10010         const QString& busName,
10011         const QString& objectPath,
10012         QObject* parent = 0
10013     );
10014 
10021     ChannelTypeTubesInterface(Tp::DBusProxy *proxy);
10022 
10030     explicit ChannelTypeTubesInterface(const Tp::Client::ChannelInterface& mainInterface);
10031 
10039     ChannelTypeTubesInterface(const Tp::Client::ChannelInterface& mainInterface, QObject* parent);
10040 
10047     Tp::PendingVariantMap *requestAllProperties() const
10048     {
10049         return internalRequestAllProperties();
10050     }
10051 
10052 public Q_SLOTS:
10089     inline QDBusPendingReply<Tp::SupportedSocketMap> GetAvailableStreamTubeTypes(int timeout = -1)
10090     {
10091         if (!invalidationReason().isEmpty()) {
10092             return QDBusPendingReply<Tp::SupportedSocketMap>(QDBusMessage::createError(
10093                 invalidationReason(),
10094                 invalidationMessage()
10095             ));
10096         }
10097 
10098         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
10099                 this->staticInterfaceName(), QLatin1String("GetAvailableStreamTubeTypes"));
10100         return this->connection().asyncCall(callMessage, timeout);
10101     }
10102 
10116     inline QDBusPendingReply<Tp::UIntList> GetAvailableTubeTypes(int timeout = -1)
10117     {
10118         if (!invalidationReason().isEmpty()) {
10119             return QDBusPendingReply<Tp::UIntList>(QDBusMessage::createError(
10120                 invalidationReason(),
10121                 invalidationMessage()
10122             ));
10123         }
10124 
10125         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
10126                 this->staticInterfaceName(), QLatin1String("GetAvailableTubeTypes"));
10127         return this->connection().asyncCall(callMessage, timeout);
10128     }
10129 
10145     inline QDBusPendingReply<Tp::TubeInfoList> ListTubes(int timeout = -1)
10146     {
10147         if (!invalidationReason().isEmpty()) {
10148             return QDBusPendingReply<Tp::TubeInfoList>(QDBusMessage::createError(
10149                 invalidationReason(),
10150                 invalidationMessage()
10151             ));
10152         }
10153 
10154         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
10155                 this->staticInterfaceName(), QLatin1String("ListTubes"));
10156         return this->connection().asyncCall(callMessage, timeout);
10157     }
10158 
10186     inline QDBusPendingReply<uint> OfferDBusTube(const QString& service, const QVariantMap& parameters, int timeout = -1)
10187     {
10188         if (!invalidationReason().isEmpty()) {
10189             return QDBusPendingReply<uint>(QDBusMessage::createError(
10190                 invalidationReason(),
10191                 invalidationMessage()
10192             ));
10193         }
10194 
10195         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
10196                 this->staticInterfaceName(), QLatin1String("OfferDBusTube"));
10197         callMessage << QVariant::fromValue(service) << QVariant::fromValue(parameters);
10198         return this->connection().asyncCall(callMessage, timeout);
10199     }
10200 
10260     inline QDBusPendingReply<uint> OfferStreamTube(const QString& service, const QVariantMap& parameters, uint addressType, const QDBusVariant& address, uint accessControl, const QDBusVariant& accessControlParam, int timeout = -1)
10261     {
10262         if (!invalidationReason().isEmpty()) {
10263             return QDBusPendingReply<uint>(QDBusMessage::createError(
10264                 invalidationReason(),
10265                 invalidationMessage()
10266             ));
10267         }
10268 
10269         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
10270                 this->staticInterfaceName(), QLatin1String("OfferStreamTube"));
10271         callMessage << QVariant::fromValue(service) << QVariant::fromValue(parameters) << QVariant::fromValue(addressType) << QVariant::fromValue(address) << QVariant::fromValue(accessControl) << QVariant::fromValue(accessControlParam);
10272         return this->connection().asyncCall(callMessage, timeout);
10273     }
10274 
10297     inline QDBusPendingReply<QString> AcceptDBusTube(uint ID, int timeout = -1)
10298     {
10299         if (!invalidationReason().isEmpty()) {
10300             return QDBusPendingReply<QString>(QDBusMessage::createError(
10301                 invalidationReason(),
10302                 invalidationMessage()
10303             ));
10304         }
10305 
10306         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
10307                 this->staticInterfaceName(), QLatin1String("AcceptDBusTube"));
10308         callMessage << QVariant::fromValue(ID);
10309         return this->connection().asyncCall(callMessage, timeout);
10310     }
10311 
10349     inline QDBusPendingReply<QDBusVariant> AcceptStreamTube(uint ID, uint addressType, uint accessControl, const QDBusVariant& accessControlParam, int timeout = -1)
10350     {
10351         if (!invalidationReason().isEmpty()) {
10352             return QDBusPendingReply<QDBusVariant>(QDBusMessage::createError(
10353                 invalidationReason(),
10354                 invalidationMessage()
10355             ));
10356         }
10357 
10358         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
10359                 this->staticInterfaceName(), QLatin1String("AcceptStreamTube"));
10360         callMessage << QVariant::fromValue(ID) << QVariant::fromValue(addressType) << QVariant::fromValue(accessControl) << QVariant::fromValue(accessControlParam);
10361         return this->connection().asyncCall(callMessage, timeout);
10362     }
10363 
10378     inline QDBusPendingReply<> CloseTube(uint ID, int timeout = -1)
10379     {
10380         if (!invalidationReason().isEmpty()) {
10381             return QDBusPendingReply<>(QDBusMessage::createError(
10382                 invalidationReason(),
10383                 invalidationMessage()
10384             ));
10385         }
10386 
10387         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
10388                 this->staticInterfaceName(), QLatin1String("CloseTube"));
10389         callMessage << QVariant::fromValue(ID);
10390         return this->connection().asyncCall(callMessage, timeout);
10391     }
10392 
10412     inline QDBusPendingReply<QString> GetDBusTubeAddress(uint ID, int timeout = -1)
10413     {
10414         if (!invalidationReason().isEmpty()) {
10415             return QDBusPendingReply<QString>(QDBusMessage::createError(
10416                 invalidationReason(),
10417                 invalidationMessage()
10418             ));
10419         }
10420 
10421         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
10422                 this->staticInterfaceName(), QLatin1String("GetDBusTubeAddress"));
10423         callMessage << QVariant::fromValue(ID);
10424         return this->connection().asyncCall(callMessage, timeout);
10425     }
10426 
10447     inline QDBusPendingReply<Tp::DBusTubeMemberList> GetDBusNames(uint ID, int timeout = -1)
10448     {
10449         if (!invalidationReason().isEmpty()) {
10450             return QDBusPendingReply<Tp::DBusTubeMemberList>(QDBusMessage::createError(
10451                 invalidationReason(),
10452                 invalidationMessage()
10453             ));
10454         }
10455 
10456         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
10457                 this->staticInterfaceName(), QLatin1String("GetDBusNames"));
10458         callMessage << QVariant::fromValue(ID);
10459         return this->connection().asyncCall(callMessage, timeout);
10460     }
10461 
10487     inline QDBusPendingReply<uint, QDBusVariant> GetStreamTubeSocketAddress(uint ID, int timeout = -1)
10488     {
10489         if (!invalidationReason().isEmpty()) {
10490             return QDBusPendingReply<uint, QDBusVariant>(QDBusMessage::createError(
10491                 invalidationReason(),
10492                 invalidationMessage()
10493             ));
10494         }
10495 
10496         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
10497                 this->staticInterfaceName(), QLatin1String("GetStreamTubeSocketAddress"));
10498         callMessage << QVariant::fromValue(ID);
10499         return this->connection().asyncCall(callMessage, timeout);
10500     }
10501 
10502 Q_SIGNALS:
10532     void NewTube(uint ID, uint initiator, uint type, const QString& service, const QVariantMap& parameters, uint state);
10533 
10547     void TubeStateChanged(uint ID, uint state);
10548 
10559     void TubeClosed(uint ID);
10560 
10579     void DBusNamesChanged(uint ID, const Tp::DBusTubeMemberList& added, const Tp::UIntList& removed);
10580 
10595     void StreamTubeNewConnection(uint ID, uint handle);
10596 
10597 protected:
10598     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
10599 };
10600 }
10601 }
10602 Q_DECLARE_METATYPE(Tp::Client::ChannelInterface*)
10603 Q_DECLARE_METATYPE(Tp::Client::ChannelInterfaceAnonymityInterface*)
10604 Q_DECLARE_METATYPE(Tp::Client::ChannelInterfaceCallStateInterface*)
10605 Q_DECLARE_METATYPE(Tp::Client::ChannelInterfaceCaptchaAuthenticationInterface*)
10606 Q_DECLARE_METATYPE(Tp::Client::ChannelInterfaceChatStateInterface*)
10607 Q_DECLARE_METATYPE(Tp::Client::ChannelInterfaceConferenceInterface*)
10608 Q_DECLARE_METATYPE(Tp::Client::ChannelInterfaceDTMFInterface*)
10609 Q_DECLARE_METATYPE(Tp::Client::ChannelInterfaceDestroyableInterface*)
10610 Q_DECLARE_METATYPE(Tp::Client::ChannelInterfaceFileTransferMetadataInterface*)
10611 Q_DECLARE_METATYPE(Tp::Client::ChannelInterfaceGroupInterface*)
10612 Q_DECLARE_METATYPE(Tp::Client::ChannelInterfaceHoldInterface*)
10613 Q_DECLARE_METATYPE(Tp::Client::ChannelInterfaceMediaSignallingInterface*)
10614 Q_DECLARE_METATYPE(Tp::Client::ChannelInterfaceMessagesInterface*)
10615 Q_DECLARE_METATYPE(Tp::Client::ChannelInterfacePasswordInterface*)
10616 Q_DECLARE_METATYPE(Tp::Client::ChannelInterfaceSASLAuthenticationInterface*)
10617 Q_DECLARE_METATYPE(Tp::Client::ChannelInterfaceSMSInterface*)
10618 Q_DECLARE_METATYPE(Tp::Client::ChannelInterfaceSecurableInterface*)
10619 Q_DECLARE_METATYPE(Tp::Client::ChannelInterfaceServicePointInterface*)
10620 Q_DECLARE_METATYPE(Tp::Client::ChannelInterfaceTubeInterface*)
10621 Q_DECLARE_METATYPE(Tp::Client::ChannelTypeCallInterface*)
10622 Q_DECLARE_METATYPE(Tp::Client::ChannelTypeContactListInterface*)
10623 Q_DECLARE_METATYPE(Tp::Client::ChannelTypeContactSearchInterface*)
10624 Q_DECLARE_METATYPE(Tp::Client::ChannelTypeDBusTubeInterface*)
10625 Q_DECLARE_METATYPE(Tp::Client::ChannelTypeFileTransferInterface*)
10626 Q_DECLARE_METATYPE(Tp::Client::ChannelTypeRoomListInterface*)
10627 Q_DECLARE_METATYPE(Tp::Client::ChannelTypeServerAuthenticationInterface*)
10628 Q_DECLARE_METATYPE(Tp::Client::ChannelTypeServerTLSConnectionInterface*)
10629 Q_DECLARE_METATYPE(Tp::Client::ChannelTypeStreamTubeInterface*)
10630 Q_DECLARE_METATYPE(Tp::Client::ChannelTypeStreamedMediaInterface*)
10631 Q_DECLARE_METATYPE(Tp::Client::ChannelTypeTextInterface*)
10632 Q_DECLARE_METATYPE(Tp::Client::ChannelTypeTubesInterface*)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00941.html0000644000175200001440000010054312000060453021626 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::StreamTubeChannel Member List
This is the complete list of members for Tp::StreamTubeChannel, including all inherited members.
accessControl() const Tp::StreamTubeChannel [protected]
actualFeatures() const Tp::ReadyObject [virtual]
addConnection(uint connection)Tp::StreamTubeChannel [protected]
addressType() const Tp::StreamTubeChannel
baseInterface() const Tp::Channel [protected]
becomeReady(const Features &requestedFeatures=Features())Tp::ReadyObject [virtual]
busName() const Tp::DBusProxy
BypassInterfaceCheck enum valueTp::OptionalInterfaceFactory< Channel >
Channel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature)Tp::Channel [protected]
channelType() const Tp::Channel
CheckInterfaceSupported enum valueTp::OptionalInterfaceFactory< Channel >
conferenceChannelMerged(const Tp::ChannelPtr &channel)Tp::Channel [signal]
conferenceChannelRemoved(const Tp::ChannelPtr &channel, const Tp::Channel::GroupMemberChangeDetails &details)Tp::Channel [signal]
conferenceChannels() const Tp::Channel
conferenceInitialChannels() const Tp::Channel
conferenceInitialInviteeContacts() const Tp::Channel
conferenceMergeChannel(const ChannelPtr &channel)Tp::Channel
conferenceOriginalChannels() const Tp::Channel
conferenceSplitChannel()Tp::Channel
connection() const Tp::Channel
connectionClosed(uint connectionId, const QString &errorName, const QString &errorMessage)Tp::StreamTubeChannel [signal]
connections() const Tp::StreamTubeChannel
create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties)Tp::StreamTubeChannel [static]
dbusConnection() const Tp::DBusProxy
DBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::DBusProxy
FeatureConferenceInitialInviteeContactsTp::Channel [static]
FeatureConnectionMonitoringTp::StreamTubeChannel [static]
FeatureCoreTp::StreamTubeChannel [static]
groupAddContacts(const QList< ContactPtr > &contacts, const QString &message=QString())Tp::Channel
groupAddSelfHandle()Tp::Channel [protected, slot]
groupAreHandleOwnersAvailable() const Tp::Channel
groupCanAcceptContactsWithMessage() const Tp::Channel
groupCanAddContacts() const Tp::Channel
groupCanAddContactsChanged(bool canAddContacts)Tp::Channel [signal]
groupCanAddContactsWithMessage() const Tp::Channel
groupCanDepartWithMessage() const Tp::Channel
groupCanRejectContactsWithMessage() const Tp::Channel
groupCanRemoveContacts() const Tp::Channel
groupCanRemoveContactsChanged(bool canRemoveContacts)Tp::Channel [signal]
groupCanRemoveContactsWithMessage() const Tp::Channel
groupCanRescindContacts() const Tp::Channel
groupCanRescindContactsChanged(bool canRescindContacts)Tp::Channel [signal]
groupCanRescindContactsWithMessage() const Tp::Channel
groupContacts(bool includeSelfContact=true) const Tp::Channel
groupFlags() const Tp::Channel
groupFlagsChanged(Tp::ChannelGroupFlags flags, Tp::ChannelGroupFlags added, Tp::ChannelGroupFlags removed)Tp::Channel [signal]
groupHandleOwners() const Tp::Channel
groupHandleOwnersChanged(const Tp::HandleOwnerMap &owners, const Tp::UIntList &added, const Tp::UIntList &removed)Tp::Channel [signal]
groupIsSelfContactTracked() const Tp::Channel
groupLocalPendingContactChangeInfo(const ContactPtr &contact) const Tp::Channel
groupLocalPendingContacts(bool includeSelfContact=true) const Tp::Channel
groupMembersChanged(const Tp::Contacts &groupMembersAdded, const Tp::Contacts &groupLocalPendingMembersAdded, const Tp::Contacts &groupRemotePendingMembersAdded, const Tp::Contacts &groupMembersRemoved, const Tp::Channel::GroupMemberChangeDetails &details)Tp::Channel [signal]
groupRemotePendingContacts(bool includeSelfContact=true) const Tp::Channel
groupRemoveContacts(const QList< ContactPtr > &contacts, const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone)Tp::Channel
groupSelfContact() const Tp::Channel
groupSelfContactChanged()Tp::Channel [signal]
groupSelfContactRemoveInfo() const Tp::Channel
groupSelfHandleIsLocalPending() const Tp::Channel [protected]
hasInterface(const QString &name) constTp::OptionalInterfaceFactory< Channel > [inline]
immutableProperties() const Tp::Channel
initiatorContact() const Tp::Channel
interface() constTp::OptionalInterfaceFactory< Channel > [inline]
interfaces() constTp::OptionalInterfaceFactory< Channel > [inline]
InterfaceSupportedChecking enum nameTp::OptionalInterfaceFactory< Channel >
invalidate(const QString &reason, const QString &message)Tp::DBusProxy [protected]
invalidate(const QDBusError &error)Tp::DBusProxy [protected]
invalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage)Tp::DBusProxy [signal]
invalidationMessage() const Tp::DBusProxy
invalidationReason() const Tp::DBusProxy
ipAddress() const Tp::StreamTubeChannel
isConference() const Tp::Channel
isDroppingConnections() const Tp::StreamTubeChannel [protected]
isReady(const Features &features=Features()) const Tp::ReadyObject [virtual]
isRequested() const Tp::Channel
isValid() const Tp::DBusProxy
localAddress() const Tp::StreamTubeChannel
missingFeatures() const Tp::ReadyObject [virtual]
newConnection(uint connectionId)Tp::StreamTubeChannel [signal]
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
objectPath() const Tp::DBusProxy
optionalInterface(InterfaceSupportedChecking check=CheckInterfaceSupported) constTp::OptionalInterfaceFactory< Channel > [inline]
OptionalInterfaceFactory(Channel *this_)Tp::OptionalInterfaceFactory< Channel > [inline]
parameters() const Tp::TubeChannel
propertyChanged(const QString &propertyName)Tp::Object [signal]
readinessHelper() const Tp::ReadyObject [protected]
ReadyObject(RefCounted *object, const Feature &featureCore)Tp::ReadyObject
ReadyObject(DBusProxy *proxy, const Feature &featureCore)Tp::ReadyObject
RefCounted()Tp::RefCounted [inline]
removeConnection(uint connection, const QString &error, const QString &message)Tp::StreamTubeChannel [protected]
requestClose()Tp::Channel
requestedFeatures() const Tp::ReadyObject [virtual]
requestLeave(const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone)Tp::Channel
service() const Tp::StreamTubeChannel
setAccessControl(SocketAccessControl accessControl)Tp::StreamTubeChannel [protected]
setAddressType(SocketAddressType type)Tp::StreamTubeChannel [protected]
setBusName(const QString &busName)Tp::DBusProxy [protected]
setInterfaces(const QStringList &interfaces)Tp::OptionalInterfaceFactory< Channel > [inline, protected]
setIpAddress(const QPair< QHostAddress, quint16 > &address)Tp::StreamTubeChannel [protected]
setLocalAddress(const QString &address)Tp::StreamTubeChannel [protected]
setParameters(const QVariantMap &parameters)Tp::TubeChannel [protected]
state() const Tp::TubeChannel
stateChanged(Tp::TubeChannelState state)Tp::TubeChannel [signal]
StatefulDBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::StatefulDBusProxy
StreamTubeChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature=StreamTubeChannel::FeatureCore)Tp::StreamTubeChannel [protected]
supportsAbstractUnixSocketsOnLocalhost() const Tp::StreamTubeChannel
supportsAbstractUnixSocketsWithCredentials() const Tp::StreamTubeChannel
supportsConferenceMerging() const Tp::Channel
supportsConferenceSplitting() const Tp::Channel
supportsIPv4SocketsOnLocalhost() const Tp::StreamTubeChannel
supportsIPv4SocketsWithSpecifiedAddress() const Tp::StreamTubeChannel
supportsIPv6SocketsOnLocalhost() const Tp::StreamTubeChannel
supportsIPv6SocketsWithSpecifiedAddress() const Tp::StreamTubeChannel
supportsUnixSocketsOnLocalhost() const Tp::StreamTubeChannel
supportsUnixSocketsWithCredentials() const Tp::StreamTubeChannel
targetContact() const Tp::Channel
targetHandle() const Tp::Channel
targetHandleType() const Tp::Channel
targetId() const Tp::Channel
TubeChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature=TubeChannel::FeatureCore)Tp::TubeChannel [protected]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique)Tp::StatefulDBusProxy [static]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique, QString &error, QString &message)Tp::StatefulDBusProxy [static]
~Channel()Tp::Channel [virtual]
~DBusProxy()Tp::DBusProxy [virtual]
~Object()Tp::Object [virtual]
~OptionalInterfaceFactory()Tp::OptionalInterfaceFactory< Channel > [inline]
~ReadyObject()Tp::ReadyObject [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]
~StatefulDBusProxy()Tp::StatefulDBusProxy [virtual]
~StreamTubeChannel()Tp::StreamTubeChannel [virtual]
~TubeChannel()Tp::TubeChannel [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00970.html0000644000175200001440000000533412000060453021632 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::CaptchaInfo Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00968.html0000644000175200001440000000431712000060453021641 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::CapabilityPair Member List
This is the complete list of members for Tp::CapabilityPair, including all inherited members.
channelTypeTp::CapabilityPair
typeSpecificFlagsTp::CapabilityPair


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/namespacemembers_vars.html0000644000175200001440000001616612000060453025361 0ustar00collabora-develusers00000000000000 Namespace Members
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- n -

  • NUM_ACCESS_CONTROL_TYPES : Tp
  • NUM_CALL_CONTENT_DISPOSITIONS : Tp
  • NUM_CALL_CONTENT_PACKETIZATION_TYPES : Tp
  • NUM_CALL_STATE_CHANGE_REASONS : Tp
  • NUM_CALL_STATES : Tp
  • NUM_CALL_STREAM_CANDIDATE_TYPES : Tp
  • NUM_CAPTCHA_CANCEL_REASONS : Tp
  • NUM_CAPTCHA_STATUSES : Tp
  • NUM_CHANNEL_CHAT_STATES : Tp
  • NUM_CHANNEL_CONTACT_SEARCH_STATES : Tp
  • NUM_CHANNEL_GROUP_CHANGE_REASONS : Tp
  • NUM_CHANNEL_TEXT_MESSAGE_TYPES : Tp
  • NUM_CHANNEL_TEXT_SEND_ERRORS : Tp
  • NUM_CONNECTION_PRESENCE_TYPES : Tp
  • NUM_CONNECTION_STATUS_REASONS : Tp
  • NUM_CONNECTION_STATUSES : Tp
  • NUM_CONTACT_LIST_STATES : Tp
  • NUM_CONTACT_METADATA_STORAGE_TYPES : Tp
  • NUM_DEBUG_LEVELS : Tp
  • NUM_DELIVERY_STATUSES : Tp
  • NUM_DTMF_EVENTS : Tp
  • NUM_FILE_HASH_TYPES : Tp
  • NUM_FILE_TRANSFER_STATE_CHANGE_REASONS : Tp
  • NUM_FILE_TRANSFER_STATES : Tp
  • NUM_HANDLE_TYPES : Tp
  • NUM_HTTP_METHODS : Tp
  • NUM_LOCAL_HOLD_STATE_REASONS : Tp
  • NUM_LOCAL_HOLD_STATES : Tp
  • NUM_MEDIA_STREAM_BASE_PROTOS : Tp
  • NUM_MEDIA_STREAM_DIRECTIONS : Tp
  • NUM_MEDIA_STREAM_ERRORS : Tp
  • NUM_MEDIA_STREAM_STATES : Tp
  • NUM_MEDIA_STREAM_TRANSPORT_TYPES : Tp
  • NUM_MEDIA_STREAM_TYPES : Tp
  • NUM_RCPT_XR_RTT_MODES : Tp
  • NUM_RICH_PRESENCE_ACCESS_CONTROL_TYPES : Tp
  • NUM_SASL_ABORT_REASONS : Tp
  • NUM_SASL_STATUSES : Tp
  • NUM_SENDING_STATES : Tp
  • NUM_SERVICE_POINT_TYPES : Tp
  • NUM_SOCKET_ACCESS_CONTROLS : Tp
  • NUM_SOCKET_ADDRESS_TYPES : Tp
  • NUM_STREAM_COMPONENTS : Tp
  • NUM_STREAM_ENDPOINT_STATES : Tp
  • NUM_STREAM_FLOW_STATES : Tp
  • NUM_STREAM_TRANSPORT_TYPES : Tp
  • NUM_SUBSCRIPTION_STATES : Tp
  • NUM_TLS_CERTIFICATE_REJECT_REASONS : Tp
  • NUM_TLS_CERTIFICATE_STATES : Tp
  • NUM_TUBE_CHANNEL_STATES : Tp
  • NUM_TUBE_STATES : Tp
  • NUM_TUBE_TYPES : Tp


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00192.html0000644000175200001440000003173612000060453021633 0ustar00collabora-develusers00000000000000 Tp::ContactCapabilities Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactCapabilities Class Reference

The ContactCapabilities class represents the capabilities of a Contact. More...

#include <TelepathyQt/ContactCapabilities>

Inherits Tp::CapabilitiesBase.

List of all members.

Public Member Functions

Protected Member Functions


Detailed Description

The ContactCapabilities class represents the capabilities of a Contact.


Constructor & Destructor Documentation

Class destructor.

Tp::ContactCapabilities::ContactCapabilities ( bool  specificToContact) [protected]

Construct a new ContactCapabilities object.

Tp::ContactCapabilities::ContactCapabilities ( const RequestableChannelClassList rccs,
bool  specificToContact 
) [protected]

Construct a new ContactCapabilities object using the give rccs.

Parameters:
rccsRequestableChannelClassList representing the capabilities of a contact.
Tp::ContactCapabilities::ContactCapabilities ( const RequestableChannelClassSpecList rccSpecs,
bool  specificToContact 
) [protected]

Construct a new ContactCapabilities object using the give rccSpecs.

Parameters:
rccSpecsRequestableChannelClassList representing the capabilities of a contact.

Member Function Documentation

bool Tp::ContactCapabilities::dbusTubes ( const QString &  serviceName) const

Returns whether creating a DBusTube channel with the given service targeting this contact is expected to succeed.

Returns:
true if supported, false otherwise.

Return the supported DBusTube services.

Returns:
A list of supported DBusTube services.
bool Tp::ContactCapabilities::streamTubes ( const QString &  service) const

Return whether creating a StreamTube channel, using the given service, by providing a contact identifier is supported.

Returns:
true if supported, false otherwise.

Return the supported StreamTube services.

Returns:
A list of supported StreamTube services.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00345.html0000644000175200001440000007531512000060453021634 0ustar00collabora-develusers00000000000000 Tp::Client::ProtocolInterfaceAddressingInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

#include <TelepathyQt/ConnectionManager>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

  • QDBusPendingReply< QString > NormalizeVCardAddress (const QString &VCardField, const QString &VCardAddress, int timeout=-1)
  • QDBusPendingReply< QString > NormalizeContactURI (const QString &URI, int timeout=-1)

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Protocol.Interface.Addressing".


Constructor & Destructor Documentation

Tp::Client::ProtocolInterfaceAddressingInterface::ProtocolInterfaceAddressingInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ProtocolInterfaceAddressingInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ProtocolInterfaceAddressingInterface::ProtocolInterfaceAddressingInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ProtocolInterfaceAddressingInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ProtocolInterfaceAddressingInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ProtocolInterfaceAddressingInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ProtocolInterfaceAddressingInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Protocol.Interface.Addressing", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property AddressableVCardFields of type QStringList.

The vCard fields that can be used to request a contact with normalized to lower case. If the URL vCard field is addressable, a colon, followed by the supported URI schemes will be concatenated.

For example: ["tel", "x-sip"].

The url vCard field MUST NOT appear here; see AddressableURISchemes instead.

In practice, protocols have a limited set of URI schemes that make sense to resolve as a contact.

Connection managers with a .manager file MUST cache this property in the protocol's section of the .manager file if it is non-empty, using the key AddressableVCardFields. The corresponding value is a list of strings, each followed with a semicolon and in the syntax of the "localestring" type from the Desktop Entry Specification.

Well-known vCard fields:

tel
The TEL vCard field. Used for phone numbers.
x-sip
The X-SIP vCard field. Used for SIP addresses.
x-aim
The X-AIM vCard field. Used for AIM user IDs.
x-icq
The X-ICQ vCard field. Used for ICQ UINs.
x-skype
The X-SKYPE vCard field. Used for Skype user names or telephone numbers. There is also a X-SKYPE-USERNAME field, but for Telepathy purposes, x-skype is preferred
x-groupwise
The X-GROUPWISE vCard field. Used for Groupwise contacts.
x-gadugadu
The X-GADUGADU vCard field. Used for Gadu-Gadu contacts.
x-jabber
The X-JABBER vCard field. Used for XMPP JIDs.
x-msn
The X-MSN vCard field. Used for MSN contacts.
x-yahoo
The X-YAHOO vCard field. Used for Yahoo! IDs.
x-facebook-id
Used for Facebook IDs in XMPP. If the user JID is "-12345@chat.facebook.com" then the x-facebook-id is "12345"
Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property AddressableURISchemes of type QStringList.

The URI schemes that are supported by this protocol.

For example: ["tel", "sip"].

This property should only be used when the connection is offline. When it is connected the addressable URI schemes should be retrieved from the ConnectionInterfaceRequestsInterface::RequestableChannelClasses 's TargetURIScheme fixed-property instead.

Connection managers with a .manager file MUST cache this property in the protocol's section of the .manager file if it is non-empty, using the key AddressableURISchemes. The corresponding value is a list of strings, each followed with a semicolon and in the syntax of the "localestring" type from the Desktop Entry Specification.

Well-known URI schemes:

sip
SIP protocol. For example: sip:julien@example.com.
sips
Secure (encrypted) SIP protocol. For example: sips:julien@example.com.
tel
Used for telephone numbers. For example: tel:+12065551234.
xmpp
XMPP protocol. For example: xmpp:julien@example.com.
msnim
For the purposes of ProtocolInterfaceAddressingInterface , ConnectionInterfaceAddressingInterface , and org.freedesktop.Telepathy.Channel.Interface.Addressing1 , the verb part is ignored, and SHOULD be add; the contact field in the query string is used to identify the contact. For example: msnim:add?contact=julien.
aim
For the purposes of ProtocolInterfaceAddressingInterface , ConnectionInterfaceAddressingInterface , and org.freedesktop.Telepathy.Channel.Interface.Addressing1 , the verb part is ignored, and SHOULD be addbuddy; the screenname field in the query string is used to identify the contact. For example: aim:addbuddy?screenname=julien.
skype
Skype protocol. For example: skype:julien.
ymsgr
For the purposes of ProtocolInterfaceAddressingInterface , ConnectionInterfaceAddressingInterface , and org.freedesktop.Telepathy.Channel.Interface.Addressing1 , the verb part is ignored, and SHOULD be addfriend; the query string is used to identify the contact. For example: ymsgr:addfriend?julien.
gg
Gadu-Gadu protocol. For example: gg:julien.
Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply<QString> Tp::Client::ProtocolInterfaceAddressingInterface::NormalizeVCardAddress ( const QString &  VCardField,
const QString &  VCardAddress,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method NormalizeVCardAddress on the remote object.

Attempt to normalize the given vCard address. Where possible, this SHOULD return an address that would appear in the org.freedesktop.Telepathy.Connection.Interface.Addressing1/addresses attribute for a contact on a connected ConnectionInterface .

If full normalization requires network activity or is otherwise impossible to do without a ConnectionInterface , this method SHOULD perform a best-effort normalization.

An example would be a vCard TEL field with a formatted number in the form of +1 (206) 555 1234, this would be normalized to +12065551234.

This method MAY simply raise NotImplemented on some protocols, if it has no use.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
VCardFieldThe vCard field of the address we are normalizing. The field name SHOULD be in lower case, and MUST appear in AddressableVCardFields.
VCardAddressThe address to normalize, which is assumed to belong to a contact (and not, for instance, a chatroom or server).
timeoutThe timeout in milliseconds.
Returns:

The vCard address, normalized as much as possible.

QDBusPendingReply<QString> Tp::Client::ProtocolInterfaceAddressingInterface::NormalizeContactURI ( const QString &  URI,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method NormalizeContactURI on the remote object.

Attempt to normalize the given contact URI. Where possible, this SHOULD return an address that would appear in the org.freedesktop.Telepathy.Connection.Interface.Addressing1/uris attribute for a contact on a connected ConnectionInterface .

If full normalization requires network activity or is otherwise impossible to do without a ConnectionInterface , this method SHOULD perform a best-effort normalization.

If the URI has extra information beyond what's necessary to identify a particular contact, such as an XMPP resource or an action to carry out, this extra information SHOULD be removed. If all URIs in a scheme contain a verb or action (like aim, ymsgr and msnim URIs), then the verb SHOULD be replaced with the one specified in AddressableURISchemes .

This method is intended to normalize URIs stored in address books, for instance. In protocols like XMPP, if you vary the resource or action (query string), the URI still refers to the same high-level contact.

For instance, xmpp:romeo@Example.Com/Empathy?message;body=Hello would be normalized to xmpp:romeo@example.com, and aim:goim?screenname=Romeo%20M&message=Hello would be normalized to aim:addbuddy?screenname=romeom.

This method MAY simply raise NotImplemented on some protocols, if it has no use.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
URIThe URI to normalize, which is assumed to refer to a contact (as opposed to, for instance, a chatroom or a server). In some protocols, like XMPP, there is no way to tell whether a given URI refers to a contact or a chatroom by looking at its syntax. The URI's scheme (i.e. the part before the first colon) MUST appear in AddressableURISchemes.
timeoutThe timeout in milliseconds.
Returns:

A URI, normalized as much as possible.

void Tp::Client::ProtocolInterfaceAddressingInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00875.html0000644000175200001440000001102012000060453021623 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::GenericPropertyFilter< T > Member List
This is the complete list of members for Tp::GenericPropertyFilter< T >, including all inherited members.
addProperty(const QString &propertyName, const QVariant &propertyValue)Tp::GenericPropertyFilter< T > [inline]
Filter()Tp::Filter< T > [inline, protected]
filter() const Tp::GenericPropertyFilter< T > [inline]
GenericPropertyFilter()Tp::GenericPropertyFilter< T > [inline, protected]
isValid() const Tp::GenericPropertyFilter< T > [inline, virtual]
matches(const SharedPtr< T > &t) const Tp::GenericPropertyFilter< T > [inline, virtual]
RefCounted()Tp::RefCounted [inline]
setProperties(const QVariantMap &filter)Tp::GenericPropertyFilter< T > [inline]
~Filter()Tp::Filter< T > [inline, virtual]
~GenericPropertyFilter()Tp::GenericPropertyFilter< T > [inline, virtual]
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00889.html0000644000175200001440000001121512000060453021636 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::OptionalInterfaceFactory< DBusProxySubclass > Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00922.html0000644000175200001440000001500312000060453021621 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ReadinessHelper Member List
This is the complete list of members for Tp::ReadinessHelper, including all inherited members.
actualFeatures() const Tp::ReadinessHelper
addIntrospectables(const Introspectables &introspectables)Tp::ReadinessHelper
becomeReady(const Features &requestedFeatures)Tp::ReadinessHelper
currentStatus() const Tp::ReadinessHelper
forceCurrentStatus(uint currentStatus)Tp::ReadinessHelper
interfaces() const Tp::ReadinessHelper
Introspectables typedefTp::ReadinessHelper
IntrospectFunc typedefTp::ReadinessHelper
isReady(const Feature &feature, QString *errorName=0, QString *errorMessage=0) const Tp::ReadinessHelper
isReady(const Features &features, QString *errorName=0, QString *errorMessage=0) const Tp::ReadinessHelper
missingFeatures() const Tp::ReadinessHelper
ReadinessHelper(RefCounted *object, uint currentStatus=0, const Introspectables &introspectables=Introspectables(), QObject *parent=0)Tp::ReadinessHelper
ReadinessHelper(DBusProxy *proxy, uint currentStatus=0, const Introspectables &introspectables=Introspectables(), QObject *parent=0)Tp::ReadinessHelper
requestedFeatures() const Tp::ReadinessHelper
setCurrentStatus(uint currentStatus)Tp::ReadinessHelper
setInterfaces(const QStringList &interfaces)Tp::ReadinessHelper
setIntrospectCompleted(const Feature &feature, bool success, const QString &errorName=QString(), const QString &errorMessage=QString())Tp::ReadinessHelper
setIntrospectCompleted(const Feature &feature, bool success, const QDBusError &error)Tp::ReadinessHelper
statusReady(uint status)Tp::ReadinessHelper [signal]
~ReadinessHelper()Tp::ReadinessHelper


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00820.html0000644000175200001440000003677112000060453021635 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ChannelDispatchOperation Member List
This is the complete list of members for Tp::ChannelDispatchOperation, including all inherited members.
account() const Tp::ChannelDispatchOperation
actualFeatures() const Tp::ReadyObject [virtual]
baseInterface() const Tp::ChannelDispatchOperation [protected]
becomeReady(const Features &requestedFeatures=Features())Tp::ReadyObject [virtual]
busName() const Tp::DBusProxy
BypassInterfaceCheck enum valueTp::OptionalInterfaceFactory< ChannelDispatchOperation >
ChannelDispatchOperation(const QDBusConnection &bus, const QString &objectPath, const QVariantMap &immutableProperties, const QList< ChannelPtr > &initialChannels, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory)Tp::ChannelDispatchOperation [protected]
channelLost(const Tp::ChannelPtr &channel, const QString &errorName, const QString &errorMessage)Tp::ChannelDispatchOperation [signal]
channels() const Tp::ChannelDispatchOperation
CheckInterfaceSupported enum valueTp::OptionalInterfaceFactory< ChannelDispatchOperation >
claim()Tp::ChannelDispatchOperation
claim(const AbstractClientHandlerPtr &handler)Tp::ChannelDispatchOperation
connection() const Tp::ChannelDispatchOperation
create(const QDBusConnection &bus, const QString &objectPath, const QVariantMap &immutableProperties, const QList< ChannelPtr > &initialChannels, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory)Tp::ChannelDispatchOperation [static]
dbusConnection() const Tp::DBusProxy
DBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::DBusProxy
FeatureCoreTp::ChannelDispatchOperation [static]
handleWith(const QString &handler)Tp::ChannelDispatchOperation
hasInterface(const QString &name) constTp::OptionalInterfaceFactory< ChannelDispatchOperation > [inline]
interface() constTp::OptionalInterfaceFactory< ChannelDispatchOperation > [inline]
interfaces() constTp::OptionalInterfaceFactory< ChannelDispatchOperation > [inline]
InterfaceSupportedChecking enum nameTp::OptionalInterfaceFactory< ChannelDispatchOperation >
invalidate(const QString &reason, const QString &message)Tp::DBusProxy [protected]
invalidate(const QDBusError &error)Tp::DBusProxy [protected]
invalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage)Tp::DBusProxy [signal]
invalidationMessage() const Tp::DBusProxy
invalidationReason() const Tp::DBusProxy
isReady(const Features &features=Features()) const Tp::ReadyObject [virtual]
isValid() const Tp::DBusProxy
missingFeatures() const Tp::ReadyObject [virtual]
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
objectPath() const Tp::DBusProxy
optionalInterface(InterfaceSupportedChecking check=CheckInterfaceSupported) constTp::OptionalInterfaceFactory< ChannelDispatchOperation > [inline]
OptionalInterfaceFactory(ChannelDispatchOperation *this_)Tp::OptionalInterfaceFactory< ChannelDispatchOperation > [inline]
possibleHandlers() const Tp::ChannelDispatchOperation
propertyChanged(const QString &propertyName)Tp::Object [signal]
readinessHelper() const Tp::ReadyObject [protected]
ReadyObject(RefCounted *object, const Feature &featureCore)Tp::ReadyObject
ReadyObject(DBusProxy *proxy, const Feature &featureCore)Tp::ReadyObject
RefCounted()Tp::RefCounted [inline]
requestedFeatures() const Tp::ReadyObject [virtual]
setBusName(const QString &busName)Tp::DBusProxy [protected]
setInterfaces(const QStringList &interfaces)Tp::OptionalInterfaceFactory< ChannelDispatchOperation > [inline, protected]
StatefulDBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::StatefulDBusProxy
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique)Tp::StatefulDBusProxy [static]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique, QString &error, QString &message)Tp::StatefulDBusProxy [static]
~ChannelDispatchOperation()Tp::ChannelDispatchOperation [virtual]
~DBusProxy()Tp::DBusProxy [virtual]
~Object()Tp::Object [virtual]
~OptionalInterfaceFactory()Tp::OptionalInterfaceFactory< ChannelDispatchOperation > [inline]
~ReadyObject()Tp::ReadyObject [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]
~StatefulDBusProxy()Tp::StatefulDBusProxy [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00787.html0000644000175200001440000003067012000060453021641 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::BaseProtocol Member List
This is the complete list of members for Tp::BaseProtocol, including all inherited members.
authenticationTypes() const Tp::BaseProtocol
BaseProtocol(const QDBusConnection &dbusConnection, const QString &name)Tp::BaseProtocol [protected]
busName() const Tp::DBusService
connectionInterfaces() const Tp::BaseProtocol
create(const QString &name)Tp::BaseProtocol [inline, static]
create(const QString &name)Tp::BaseProtocol [inline, static]
create(const QDBusConnection &dbusConnection, const QString &name)Tp::BaseProtocol [inline, static]
create(const QDBusConnection &dbusConnection, const QString &name)Tp::BaseProtocol [inline, static]
createConnection(const QVariantMap &parameters, DBusError *error)Tp::BaseProtocol
CreateConnectionCallback typedefTp::BaseProtocol
dbusConnection() const Tp::DBusService
dbusObject() const Tp::DBusService
DBusService(const QDBusConnection &dbusConnection)Tp::DBusService
englishName() const Tp::BaseProtocol
iconName() const Tp::BaseProtocol
identifyAccount(const QVariantMap &parameters, DBusError *error)Tp::BaseProtocol
IdentifyAccountCallback typedefTp::BaseProtocol
immutableProperties() const Tp::BaseProtocol [virtual]
interface(const QString &interfaceName) const Tp::BaseProtocol
interfaces() const Tp::BaseProtocol
isRegistered() const Tp::DBusService
name() const Tp::BaseProtocol
normalizeContact(const QString &contactId, DBusError *error)Tp::BaseProtocol
NormalizeContactCallback typedefTp::BaseProtocol
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
objectPath() const Tp::DBusService
parameters() const Tp::BaseProtocol
plugInterface(const AbstractProtocolInterfacePtr &interface)Tp::BaseProtocol
propertyChanged(const QString &propertyName)Tp::Object [signal]
RefCounted()Tp::RefCounted [inline]
registerObject(const QString &busName, const QString &objectPath, DBusError *error)Tp::BaseProtocol [protected, virtual]
requestableChannelClasses() const Tp::BaseProtocol
setAuthenticationTypes(const QStringList &authenticationTypes)Tp::BaseProtocol
setConnectionInterfaces(const QStringList &connInterfaces)Tp::BaseProtocol
setCreateConnectionCallback(const CreateConnectionCallback &cb)Tp::BaseProtocol
setEnglishName(const QString &englishName)Tp::BaseProtocol
setIconName(const QString &iconName)Tp::BaseProtocol
setIdentifyAccountCallback(const IdentifyAccountCallback &cb)Tp::BaseProtocol
setNormalizeContactCallback(const NormalizeContactCallback &cb)Tp::BaseProtocol
setParameters(const ProtocolParameterList &parameters)Tp::BaseProtocol
setRequestableChannelClasses(const RequestableChannelClassSpecList &rccSpecs)Tp::BaseProtocol
setVCardField(const QString &vcardField)Tp::BaseProtocol
vcardField() const Tp::BaseProtocol
~BaseProtocol()Tp::BaseProtocol [virtual]
~DBusService()Tp::DBusService [virtual]
~Object()Tp::Object [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00933.html0000644000175200001440000001476212000060453021636 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::SimpleCallObserver Member List
This is the complete list of members for Tp::SimpleCallObserver, including all inherited members.
account() const Tp::SimpleCallObserver
CallDirection enum nameTp::SimpleCallObserver
CallDirectionBoth enum valueTp::SimpleCallObserver
CallDirectionIncoming enum valueTp::SimpleCallObserver
CallDirectionOutgoing enum valueTp::SimpleCallObserver
callEnded(const Tp::CallChannelPtr &channel, const QString &errorName, const QString &errorMessage)Tp::SimpleCallObserver [signal]
calls() const Tp::SimpleCallObserver
callStarted(const Tp::CallChannelPtr &channel)Tp::SimpleCallObserver [signal]
contactIdentifier() const Tp::SimpleCallObserver
create(const AccountPtr &account, CallDirection direction=CallDirectionBoth)Tp::SimpleCallObserver [static]
create(const AccountPtr &account, const ContactPtr &contact, CallDirection direction=CallDirectionBoth)Tp::SimpleCallObserver [static]
create(const AccountPtr &account, const QString &contactIdentifier, CallDirection direction=CallDirectionBoth)Tp::SimpleCallObserver [static]
direction() const Tp::SimpleCallObserver
RefCounted()Tp::RefCounted [inline]
streamedMediaCallEnded(const Tp::StreamedMediaChannelPtr &channel, const QString &errorName, const QString &errorMessage)Tp::SimpleCallObserver [signal]
streamedMediaCalls() const Tp::SimpleCallObserver
streamedMediaCallStarted(const Tp::StreamedMediaChannelPtr &channel)Tp::SimpleCallObserver [signal]
~RefCounted()Tp::RefCounted [inline, virtual]
~SimpleCallObserver()Tp::SimpleCallObserver [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01021.html0000644000175200001440000000436412000060453021620 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::RichPresenceAccessControl Member List
This is the complete list of members for Tp::RichPresenceAccessControl, including all inherited members.
detailTp::RichPresenceAccessControl
typeTp::RichPresenceAccessControl


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_0x63.html0000644000175200001440000017721212000060453023607 0ustar00collabora-develusers00000000000000 Class Members
   Home · All Classes · All Namespaces · Modules · Functions · Files
Here is a list of all class members with links to the classes they belong to:

- c -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00395.html0000644000175200001440000001563512000060453021640 0ustar00collabora-develusers00000000000000 Tp::StatelessDBusProxy Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::StatelessDBusProxy Class Reference

The StatelessDBusProxy class is a base class representing a remote object whose API is basically stateless. More...

#include <TelepathyQt/DBusProxy>

Inherits Tp::DBusProxy.

Inherited by Tp::Account, Tp::AccountManager, and Tp::ConnectionManager.

List of all members.

Public Member Functions


Detailed Description

The StatelessDBusProxy class is a base class representing a remote object whose API is basically stateless.

These objects can remain valid even if the service providing them exits and is restarted.

Examples include the AccountManager, Account and ConnectionManager.


Constructor & Destructor Documentation

Tp::StatelessDBusProxy::StatelessDBusProxy ( const QDBusConnection &  dbusConnection,
const QString &  busName,
const QString &  objectPath,
const Feature featureCore 
)

Construct a new StatelessDBusProxy object.

Parameters:
dbusConnectionQDBusConnection to use.
busNameD-Bus bus name of the service that provides the remote object.
objectPathThe object path.
featureCoreThe object core feature.

Class destructor.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00255.html0000644000175200001440000002164112000060453021625 0ustar00collabora-develusers00000000000000 Tp::ReadinessHelper::Introspectable Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ReadinessHelper::Introspectable Class Reference

The ReadinessHelper::Introspectable class represents a introspectable used by ReadinessHelper. More...

#include <TelepathyQt/ReadinessHelper>

List of all members.

Public Member Functions


Detailed Description

The ReadinessHelper::Introspectable class represents a introspectable used by ReadinessHelper.


Constructor & Destructor Documentation

Tp::ReadinessHelper::Introspectable::Introspectable ( const QSet< uint > &  makesSenseForStatuses,
const Features dependsOnFeatures,
const QStringList &  dependsOnInterfaces,
IntrospectFunc  introspectFunc,
void *  introspectFuncData,
bool  critical = false 
)

Member Function Documentation

ReadinessHelper::Introspectable & Tp::ReadinessHelper::Introspectable::operator= ( const Introspectable other)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00040.html0000644000175200001440000142440412000060453021622 0ustar00collabora-develusers00000000000000 Tp::Account Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The Account class represents a Telepathy account. More...

#include <TelepathyQt/Account>

Inherits Tp::StatelessDBusProxy, and Tp::OptionalInterfaceFactory< Account >.

List of all members.

Signals

Public Member Functions

Static Public Member Functions

Static Public Attributes

Protected Member Functions

Properties


Detailed Description

The Account class represents a Telepathy account.

The remote object accessor functions on this object (isValidAccount(), isEnabled(), and so on) don't make any D-Bus calls; instead, they return/use values cached from a previous introspection run. The introspection process populates their values in the most efficient way possible based on what the service implements.

To avoid unnecessary D-Bus traffic, some accessors only return valid information after specific features have been enabled. For instance, to retrieve the account protocol information, it is necessary to enable the feature Account::FeatureProtocolInfo. See the individual methods descriptions for more details.

Account features can be enabled by constructing an AccountFactory and enabling the desired features, and passing it to AccountManager or ClientRegistrar when creating them as appropriate. However, if a particular feature is only ever used in a specific circumstance, such as an user opening some settings dialog separate from the general view of the application, features can be later enabled as needed by calling becomeReady() with the additional features, and waiting for the resulting PendingOperation to finish.

As an addition to accessors, signals are emitted to indicate that properties have changed, for example displayNameChanged(), iconNameChanged(), etc.

Convenience methods to create channels using the channel dispatcher such as ensureTextChat(), createFileTransfer() are also provided.

If the account is deleted from the AccountManager, this object will not be deleted automatically; however, it will emit invalidated() with error code TP_QT_ERROR_OBJECT_REMOVED and will cease to be useful.

Usage

Creating an account object

The easiest way to create account objects is through AccountManager. One can just use the AccountManager convenience methods such as AccountManager::validAccounts() to get a list of account objects representing valid accounts.

If you already know the object path, you can just call create(). For example:

 AccountPtr acc = Account::create(busName, objectPath); 

An AccountPtr object is returned, which will automatically keep track of object lifetime.

You can also provide a D-Bus connection as a QDBusConnection:

 AccountPtr acc = Account::create(QDBusConnection::sessionBus(),
         busName, objectPath);

Making account ready to use

An Account object needs to become ready before usage, meaning that the introspection process finished and the object accessors can be used.

To make the object ready, use becomeReady() and wait for the PendingOperation::finished() signal to be emitted.

 class MyClass : public QObject
 {
     QOBJECT

 public:
     MyClass(QObject *parent = 0);
     ~MyClass() { }

 private Q_SLOTS:
     void onAccountReady(Tp::PendingOperation*);

 private:
     AccountPtr acc;
 };

 MyClass::MyClass(const QString &busName, const QString &objectPath,
         QObject *parent)
     : QObject(parent)
       acc(Account::create(busName, objectPath))
 {
     connect(acc->becomeReady(),
             SIGNAL(finished(Tp::PendingOperation*)),
             SLOT(onAccountReady(Tp::PendingOperation*)));
 }

 void MyClass::onAccountReady(Tp::PendingOperation *op)
 {
     if (op->isError()) {
         qWarning() << "Account cannot become ready:" <<
             op->errorName() << "-" << op->errorMessage();
         return;
     }

     // Account is now ready
     qDebug() << "Display name:" << acc->displayName();
 }

See Asynchronous Object Model, Shared Pointer Usage


Constructor & Destructor Documentation

Tp::Account::~Account ( ) [virtual]

Class destructor.

Tp::Account::Account ( const QDBusConnection &  bus,
const QString &  busName,
const QString &  objectPath,
const ConnectionFactoryConstPtr &  connectionFactory,
const ChannelFactoryConstPtr &  channelFactory,
const ContactFactoryConstPtr &  contactFactory,
const Feature coreFeature 
) [protected]

Construct a new Account object using the given bus and the given factories.

A warning is printed if the factories are not for bus.

Parameters:
busQDBusConnection to use.
busNameThe account well-known bus name (sometimes called a "service name"). This is usually the same as the account manager bus name TP_QT_ACCOUNT_MANAGER_BUS_NAME.
objectPathThe account object path.
connectionFactoryThe connection factory to use.
channelFactoryThe channel factory to use.
contactFactoryThe contact factory to use.
coreFeatureThe core feature of the Account subclass. The corresponding introspectable should depend on Account::FeatureCore.

Member Function Documentation

AccountPtr Tp::Account::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]

Create a new Account object using QDBusConnection::sessionBus() and the given factories.

A warning is printed if the factories are not for QDBusConnection::sessionBus().

Parameters:
busNameThe account well-known bus name (sometimes called a "service name"). This is usually the same as the account manager bus name TP_QT_ACCOUNT_MANAGER_BUS_NAME.
objectPathThe account object path.
connectionFactoryThe connection factory to use.
channelFactoryThe channel factory to use.
contactFactoryThe contact factory to use.
Returns:
An AccountPtr object pointing to the newly created Account object.
AccountPtr Tp::Account::create ( const QDBusConnection &  bus,
const QString &  busName,
const QString &  objectPath,
const ConnectionFactoryConstPtr &  connectionFactory,
const ChannelFactoryConstPtr &  channelFactory,
const ContactFactoryConstPtr &  contactFactory = ContactFactory::create() 
) [static]

Create a new Account object using the given bus and the given factories.

A warning is printed if the factories are not for bus.

Parameters:
busQDBusConnection to use.
busNameThe account well-known bus name (sometimes called a "service name"). This is usually the same as the account manager bus name TP_QT_ACCOUNT_MANAGER_BUS_NAME.
objectPathThe account object path.
connectionFactoryThe connection factory to use.
channelFactoryThe channel factory to use.
contactFactoryThe contact factory to use.
Returns:
An AccountPtr object pointing to the newly created Account object.
ConnectionFactoryConstPtr Tp::Account::connectionFactory ( ) const

Return the connection factory used by this account.

Only read access is provided. This allows constructing object instances and examining the object construction settings, but not changing settings. Allowing changes would lead to tricky situations where objects constructed at different times by the account would have unpredictably different construction settings (eg. subclass).

Returns:
A read-only pointer to the ConnectionFactory object.
ChannelFactoryConstPtr Tp::Account::channelFactory ( ) const

Return the channel factory used by this account.

Only read access is provided. This allows constructing object instances and examining the object construction settings, but not changing settings. Allowing changes would lead to tricky situations where objects constructed at different times by the account would have unpredictably different construction settings (eg. subclass).

Returns:
A read-only pointer to the ChannelFactory object.
ContactFactoryConstPtr Tp::Account::contactFactory ( ) const

Return the contact factory used by this account.

Only read access is provided. This allows constructing object instances and examining the object construction settings, but not changing settings. Allowing changes would lead to tricky situations where objects constructed at different times by the account would have unpredictably different construction settings (eg. subclass).

Returns:
A read-only pointer to the ContactFactory object.

Return whether this account is valid.

If true, this account is considered by the account manager to be complete and usable. If false, user action is required to make it usable, and it will never attempt to connect. For instance, this might be caused by the absence or misconfiguration of a required parameter, in which case updateParameters() may be used to properly set the parameters values.

Change notification is via the validityChanged() signal.

This method requires Account::FeatureCore to be ready.

Returns:
true if valid, false otherwise.
See also:
validityChanged(), updateParameters()
bool Tp::Account::isEnabled ( ) const

Return whether this account is enabled.

Change notification is via the stateChanged() signal.

This method requires Account::FeatureCore to be ready.

Returns:
true if enabled, false otherwise.
See also:
stateChanged(), setEnabled()

Set whether this account should be enabled or disabled.

This gives users the possibility to prevent an account from being used.

Note that changing this property won't change the validity of the account.

Parameters:
valueWhether this account should be enabled or disabled.
Returns:
A PendingOperation which will emit PendingOperation::finished when the request has been made.
See also:
stateChanged(), isEnabled()
QString Tp::Account::cmName ( ) const
QString Tp::Account::protocolName ( ) const
QString Tp::Account::serviceName ( ) const
PendingOperation * Tp::Account::setServiceName ( const QString &  value)

Set the service name of this account.

Some protocols, like XMPP and SIP, are used by various different user-recognised brands, such as Google Talk. On accounts for such services, this method can be used to set the name describing the service, which must consist only of ASCII letters, numbers and hyphen/minus signs, and start with a letter. For the jabber protocol, one of the following service names should be used if possible:

google-talk (for Google's IM service) facebook (for Facebook's IM service) lj-talk (for LiveJournal's IM service)

The service name may also be set, if appropriate, when creating the account. See AccountManager::createAccount() for more details.

Note that changing this property may also change the profile() used by this account, in which case profileChanged() will be emitted in addition to serviceNameChanged(), if Account::FeatureProfile is enabled.

Parameters:
valueThe service name of this account.
Returns:
A PendingOperation which will emit PendingOperation::finished when the request has been made.
See also:
serviceNameChanged(), serviceName()
ProfilePtr Tp::Account::profile ( ) const
QString Tp::Account::displayName ( ) const
PendingOperation * Tp::Account::setDisplayName ( const QString &  value)

Set the display name of this account.

The display name is the user-visible name of this account. This is usually chosen by the user at account creation time. See AccountManager::createAccount() for more details.

Parameters:
valueThe display name of this account.
Returns:
A PendingOperation which will emit PendingOperation::finished when the request has been made.
See also:
displayNameChanged(), displayName()
QString Tp::Account::iconName ( ) const
PendingOperation * Tp::Account::setIconName ( const QString &  value)

Set the icon name of this account.

Parameters:
valueThe icon name of this account.
Returns:
A PendingOperation which will emit PendingOperation::finished when the request has been made.
See also:
iconNameChanged(), iconName()
QString Tp::Account::nickname ( ) const
PendingOperation * Tp::Account::setNickname ( const QString &  value)

Set the nickname of this account as seen to other contacts.

Parameters:
valueThe nickname of this account.
Returns:
A PendingOperation which will emit PendingOperation::finished when the request has been made.
See also:
nicknameChanged(), nickname()
const Avatar& Tp::Account::avatar ( ) const

Set avatar of this account as seen to other contacts.

Note that avatar must match the requirements as returned by avatarRequirements().

Parameters:
avatarThe avatar of this account.
Returns:
A PendingOperation which will emit PendingOperation::finished when the request has been made.
See also:
avatarChanged(), avatar(), avatarRequirements()
QVariantMap Tp::Account::parameters ( ) const
PendingStringList * Tp::Account::updateParameters ( const QVariantMap &  set,
const QStringList &  unset 
)

Update this account parameters.

On success, the PendingOperation returned by this method will produce a list of strings, which are the names of parameters whose changes will not take effect until the account is disconnected and reconnected (for instance by calling reconnect()).

Parameters:
setParameters to set.
unsetParameters to unset.
Returns:
A PendingStringList which will emit PendingStringList::finished when the request has been made
See also:
parametersChanged(), parameters(), reconnect()

Set whether this account should be put online automatically whenever possible.

Parameters:
valueValue indicating if this account should be put online whenever possible.
Returns:
A PendingOperation which will emit PendingOperation::finished when the request has been made.
See also:
connectsAutomaticallyPropertyChanged(), connectsAutomatically()
QString Tp::Account::connectionError ( ) const
ConnectionPtr Tp::Account::connection ( ) const

Return whether this account connection is changing presence.

Change notification is via the changingPresence() signal.

This method requires Account::FeatureCore to be ready.

Returns:
true if changing presence, false otherwise.
See also:
changingPresence(), currentPresenceChanged(), setRequestedPresence()
PresenceSpecList Tp::Account::allowedPresenceStatuses ( bool  includeAllStatuses = false) const

Return a list of presences allowed by a connection to this account.

In particular, for the statuses reported here it can be assumed that setting them as the requested presence via setRequestedPresence() will eventually result in currentPresence() changing to exactly said presence. Other statuses are only guaranteed to be matched as closely as possible.

The statuses can be also used for the automatic presence, as set by setAutomaticPresence(), with the exception of any status specifications for which Presence::type() is Tp::ConnectionPresenceTypeOffline for the Presence returned by PresenceSpec::presence().

However, the optional parameter can be used to allow reporting also other possible presence statuses on this protocol besides the others that can be set on yourself. These are purely informatory, for e.g. adjusting an UI to allow all possible remote contact statuses to be displayed.

An offline presence status is always included, because it's always valid to make an account offline by setting the requested presence to an offline status.

Full functionality requires Account::FeatureProtocolInfo and Account::FeatureProfile to be ready as well as connection with Connection::FeatureSimplePresence enabled. If the connection is online and Connection::FeatureSimplePresence is enabled, it will return the connection allowed statuses, otherwise it will return a list os statuses based on profile() and protocolInfo() information if the corresponding features are enabled.

If there's a mismatch between the presence status info provided in the .profile file and/or the .manager file and what an online Connection actually reports (for example, the said data files are missing or too old to include presence information), the returned value can change, in particular when connectionChanged() is emitted with a connection for which Connection::status() is Tp::ConnectionStatusConnected.

This method requires Account::FeatureCore to be ready.

Parameters:
includeAllStatusesWhether the returned list will include all statuses or just the ones that can be settable using setRequestedPresence().
Returns:
The allowed statuses as a list of PresenceSpec objects.

Return the maximum length for a presence status message.

If a status message set using setRequestedPresence() (or setAutomaticPresence()) is longer than the maximum length allowed, the message will be truncated and currentPresenceChanged() will be emitted (if setting the presence worked) with the truncated message.

Full functionality requires Connection with Connection::FeatureSimplePresence enabled. If the connection is online and Connection::FeatureSimplePresence is enabled, it will return the connection maximum status message length, otherwise it will return 0.

This method requires Account::FeatureCore to be ready.

Returns:
The maximum length, or 0 if there is no limit.

Set the presence status that this account should have if it is brought online automatically by the account manager.

Note that changing this property won't actually change the account's status until the next time it is (re)connected for some reason.

The value of this property must be one that would be acceptable for setRequestedPresence(), as returned by allowedPresenceStatuses(), with the additional restriction that the offline presence cannot be used.

Parameters:
presenceThe presence to set when this account is brought online automatically by the account manager.
Returns:
A PendingOperation which will emit PendingOperation::finished when the request has been made.
See also:
automaticPresenceChanged(), automaticPresence(), setRequestedPresence()

Set the requested presence of this account.

When the requested presence is changed, the account manager will attempt to manipulate the connection to make currentPresence() match requestedPresence() as closely as possible.

Parameters:
presenceThe requested presence.
Returns:
A PendingOperation which will emit PendingOperation::finished when the request has been made.
See also:
requestedPresenceChanged(), currentPresence(), automaticPresence(), setAutomaticPresence()
bool Tp::Account::isOnline ( ) const

Return whether this account is online.

Change notification is via the onlinenessChanged() signal.

This method requires Account::FeatureCore to be ready.

Returns:
true if online, otherwise false.
See also:
onlinenessChanged()
QString Tp::Account::uniqueIdentifier ( ) const
QString Tp::Account::normalizedName ( ) const

If this account is currently connected, disconnect and reconnect it. If it is currently trying to connect, cancel the attempt to connect and start another. If it is currently disconnected, do nothing.

Returns:
A PendingOperation which will emit PendingOperation::finished when the request has been made.

Delete this account.

Returns:
A PendingOperation which will emit PendingOperation::finished when the request has been made.
See also:
removed()

Return whether passing hints on channel requests on this account is known to be supported.

This method requires Account::FeatureCore to be ready.

Returns:
true if supported, false otherwise.

Return whether the ChannelRequest::succeeded(const Tp::ChannelPtr &channel) signal is expected to be emitted with a non-NULL channel parameter for requests made using this account.

This can be used as a run-time check for the Channel Dispatcher implementation being new enough. In particular, similarly old Channel Dispatchers don't support request hints either, so the return value for this function and Account::supportsRequestHints() will bet he same.

This method requires Account::FeatureCore to be ready.

Returns:
true if supported, false otherwise.
PendingChannelRequest * Tp::Account::ensureTextChat ( const QString &  contactIdentifier,
const QDateTime &  userActionTime = QDateTime::currentDateTime(),
const QString &  preferredHandler = QString(),
const ChannelRequestHints hints = ChannelRequestHints() 
)

Start a request to ensure that a text channel with the given contact contactIdentifier exists, creating it if necessary.

See ensureChannel() for more details.

Parameters:
contactIdentifierThe identifier of the contact to chat with.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
preferredHandlerEither the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable.
hintsArbitrary metadata which will be relayed to the handler if supported, as indicated by supportsRequestHints().
Returns:
A PendingChannelRequest which will emit PendingChannelRequest::finished when the request has been made.
See also:
ensureChannel(), createChannel()
PendingChannelRequest * Tp::Account::ensureTextChat ( const ContactPtr &  contact,
const QDateTime &  userActionTime = QDateTime::currentDateTime(),
const QString &  preferredHandler = QString(),
const ChannelRequestHints hints = ChannelRequestHints() 
)

Start a request to ensure that a text channel with the given contact contact exists, creating it if necessary.

See ensureChannel() for more details.

Parameters:
contactThe contact to chat with.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
preferredHandlerEither the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable.
hintsArbitrary metadata which will be relayed to the handler if supported, as indicated by supportsRequestHints().
Returns:
A PendingChannelRequest which will emit PendingChannelRequest::finished when the request has been made.
See also:
ensureChannel(), createChannel()
PendingChannelRequest * Tp::Account::ensureTextChatroom ( const QString &  roomName,
const QDateTime &  userActionTime = QDateTime::currentDateTime(),
const QString &  preferredHandler = QString(),
const ChannelRequestHints hints = ChannelRequestHints() 
)

Start a request to ensure that a text chat room with the given room name roomName exists, creating it if necessary.

See ensureChannel() for more details.

Parameters:
roomNameThe name of the chat room.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
preferredHandlerEither the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable.
hintsArbitrary metadata which will be relayed to the handler if supported, as indicated by supportsRequestHints().
Returns:
A PendingChannelRequest which will emit PendingChannelRequest::finished when the request has been made.
See also:
ensureChannel(), createChannel()
PendingChannelRequest * Tp::Account::ensureAudioCall ( const QString &  contactIdentifier,
const QString &  initialAudioContentName = QString(),
const QDateTime &  userActionTime = QDateTime::currentDateTime(),
const QString &  preferredHandler = QString(),
const ChannelRequestHints hints = ChannelRequestHints() 
)

Start a request to ensure that an audio call channel with the given contact contactIdentifier exists, creating it if necessary.

See ensureChannel() for more details.

Parameters:
contactIdentifierThe identifier of the contact to call.
initialAudioContentNameThe name of the initial CallContent that will be automatically added on the channel.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
preferredHandlerEither the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable.
hintsArbitrary metadata which will be relayed to the handler if supported, as indicated by supportsRequestHints().
Returns:
A PendingChannelRequest which will emit PendingChannelRequest::finished when the request has been made.
See also:
ensureChannel(), createChannel()
PendingChannelRequest * Tp::Account::ensureAudioCall ( const ContactPtr &  contact,
const QString &  initialAudioContentName = QString(),
const QDateTime &  userActionTime = QDateTime::currentDateTime(),
const QString &  preferredHandler = QString(),
const ChannelRequestHints hints = ChannelRequestHints() 
)

Start a request to ensure that an audio call channel with the given contact contact exists, creating it if necessary.

See ensureChannel() for more details.

Parameters:
contactThe contact to call.
initialAudioContentNameThe name of the initial audio CallContent that will be automatically added on the channel.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
preferredHandlerEither the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable.
hintsArbitrary metadata which will be relayed to the handler if supported, as indicated by supportsRequestHints().
Returns:
A PendingChannelRequest which will emit PendingChannelRequest::finished when the request has been made.
See also:
ensureChannel(), createChannel()
PendingChannelRequest * Tp::Account::ensureVideoCall ( const QString &  contactIdentifier,
const QString &  initialVideoContentName = QString(),
const QDateTime &  userActionTime = QDateTime::currentDateTime(),
const QString &  preferredHandler = QString(),
const ChannelRequestHints hints = ChannelRequestHints() 
)

Start a request to ensure that a video call channel with the given contact contactIdentifier exists, creating it if necessary.

See ensureChannel() for more details.

Parameters:
contactIdentifierThe identifier of the contact to call.
initialVideoContentNameThe name of the initial video CallContent that will be automatically added on the channel.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
preferredHandlerEither the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable.
hintsArbitrary metadata which will be relayed to the handler if supported, as indicated by supportsRequestHints().
Returns:
A PendingChannelRequest which will emit PendingChannelRequest::finished when the request has been made.
See also:
ensureChannel(), createChannel()
PendingChannelRequest * Tp::Account::ensureVideoCall ( const ContactPtr &  contact,
const QString &  initialVideoContentName = QString(),
const QDateTime &  userActionTime = QDateTime::currentDateTime(),
const QString &  preferredHandler = QString(),
const ChannelRequestHints hints = ChannelRequestHints() 
)

Start a request to ensure that a video call channel with the given contact contact exists, creating it if necessary.

See ensureChannel() for more details.

Parameters:
contactThe contact to call.
initialVideoContentNameThe name of the initial video CallContent that will be automatically added on the channel.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
preferredHandlerEither the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable.
hintsArbitrary metadata which will be relayed to the handler if supported, as indicated by supportsRequestHints().
Returns:
A PendingChannelRequest which will emit PendingChannelRequest::finished when the request has been made.
See also:
ensureChannel(), createChannel()
PendingChannelRequest * Tp::Account::ensureAudioVideoCall ( const QString &  contactIdentifier,
const QString &  initialAudioContentName = QString(),
const QString &  initialVideoContentName = QString(),
const QDateTime &  userActionTime = QDateTime::currentDateTime(),
const QString &  preferredHandler = QString(),
const ChannelRequestHints hints = ChannelRequestHints() 
)

Start a request to ensure that an audio/video call channel with the given contact contactIdentifier exists, creating it if necessary.

See ensureChannel() for more details.

Parameters:
contactIdentifierThe identifier of the contact to call.
initialAudioContentNameThe name of the initial audio CallContent that will be automatically added on the channel.
initialVideoContentNameThe name of the initial video CallContent that will be automatically added on the channel.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
preferredHandlerEither the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable.
hintsArbitrary metadata which will be relayed to the handler if supported, as indicated by supportsRequestHints().
Returns:
A PendingChannelRequest which will emit PendingChannelRequest::finished when the request has been made.
See also:
ensureChannel(), createChannel()
PendingChannelRequest * Tp::Account::ensureAudioVideoCall ( const ContactPtr &  contact,
const QString &  initialAudioContentName = QString(),
const QString &  initialVideoContentName = QString(),
const QDateTime &  userActionTime = QDateTime::currentDateTime(),
const QString &  preferredHandler = QString(),
const ChannelRequestHints hints = ChannelRequestHints() 
)

Start a request to ensure that an audio/video call channel with the given contact contact exists, creating it if necessary.

See ensureChannel() for more details.

Parameters:
contactThe contact to call.
initialAudioContentNameThe name of the initial audio CallContent that will be automatically added on the channel.
initialVideoContentNameThe name of the initial video CallContent that will be automatically added on the channel.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
preferredHandlerEither the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable.
hintsArbitrary metadata which will be relayed to the handler if supported, as indicated by supportsRequestHints().
Returns:
A PendingChannelRequest which will emit PendingChannelRequest::finished when the request has been made.
See also:
ensureChannel(), createChannel()
PendingChannelRequest * Tp::Account::ensureStreamedMediaCall ( const QString &  contactIdentifier,
const QDateTime &  userActionTime = QDateTime::currentDateTime(),
const QString &  preferredHandler = QString(),
const ChannelRequestHints hints = ChannelRequestHints() 
)

Start a request to ensure that a media channel with the given contact contactIdentifier exists, creating it if necessary.

See ensureChannel() for more details.

Parameters:
contactIdentifierThe identifier of the contact to call.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
preferredHandlerEither the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable.
hintsArbitrary metadata which will be relayed to the handler if supported, as indicated by supportsRequestHints().
Returns:
A PendingChannelRequest which will emit PendingChannelRequest::finished when the request has been made.
See also:
ensureChannel(), createChannel()
PendingChannelRequest * Tp::Account::ensureStreamedMediaCall ( const ContactPtr &  contact,
const QDateTime &  userActionTime = QDateTime::currentDateTime(),
const QString &  preferredHandler = QString(),
const ChannelRequestHints hints = ChannelRequestHints() 
)

Start a request to ensure that a media channel with the given contact contact exists, creating it if necessary.

See ensureChannel() for more details.

Parameters:
contactThe contact to call.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
preferredHandlerEither the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable.
hintsArbitrary metadata which will be relayed to the handler if supported, as indicated by supportsRequestHints().
Returns:
A PendingChannelRequest which will emit PendingChannelRequest::finished when the request has been made.
See also:
ensureChannel(), createChannel()
PendingChannelRequest * Tp::Account::ensureStreamedMediaAudioCall ( const QString &  contactIdentifier,
const QDateTime &  userActionTime = QDateTime::currentDateTime(),
const QString &  preferredHandler = QString(),
const ChannelRequestHints hints = ChannelRequestHints() 
)

Start a request to ensure that an audio call with the given contact contactIdentifier exists, creating it if necessary.

See ensureChannel() for more details.

This will only work on relatively modern connection managers, like telepathy-gabble 0.9.0 or later.

Parameters:
contactIdentifierThe identifier of the contact to call.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
preferredHandlerEither the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable.
hintsArbitrary metadata which will be relayed to the handler if supported, as indicated by supportsRequestHints().
Returns:
A PendingChannelRequest which will emit PendingChannelRequest::finished when the request has been made.
See also:
ensureChannel(), createChannel()
PendingChannelRequest * Tp::Account::ensureStreamedMediaAudioCall ( const ContactPtr &  contact,
const QDateTime &  userActionTime = QDateTime::currentDateTime(),
const QString &  preferredHandler = QString(),
const ChannelRequestHints hints = ChannelRequestHints() 
)

Start a request to ensure that an audio call with the given contact contact exists, creating it if necessary.

See ensureChannel() for more details.

This will only work on relatively modern connection managers, like telepathy-gabble 0.9.0 or later.

Parameters:
contactThe contact to call.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
preferredHandlerEither the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable.
hintsArbitrary metadata which will be relayed to the handler if supported, as indicated by supportsRequestHints().
Returns:
A PendingChannelRequest which will emit PendingChannelRequest::finished when the request has been made.
See also:
ensureChannel(), createChannel()
PendingChannelRequest * Tp::Account::ensureStreamedMediaVideoCall ( const QString &  contactIdentifier,
bool  withAudio = true,
const QDateTime &  userActionTime = QDateTime::currentDateTime(),
const QString &  preferredHandler = QString(),
const ChannelRequestHints hints = ChannelRequestHints() 
)

Start a request to ensure that a video call with the given contact contactIdentifier exists, creating it if necessary.

See ensureChannel() for more details.

This will only work on relatively modern connection managers, like telepathy-gabble 0.9.0 or later.

Parameters:
contactIdentifierThe identifier of the contact to call.
withAudiotrue if both audio and video are required, false for a video-only call.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
preferredHandlerEither the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable.
hintsArbitrary metadata which will be relayed to the handler if supported, as indicated by supportsRequestHints().
Returns:
A PendingChannelRequest which will emit PendingChannelRequest::finished when the request has been made.
See also:
ensureChannel(), createChannel()
PendingChannelRequest * Tp::Account::ensureStreamedMediaVideoCall ( const ContactPtr &  contact,
bool  withAudio = false,
const QDateTime &  userActionTime = QDateTime::currentDateTime(),
const QString &  preferredHandler = QString(),
const ChannelRequestHints hints = ChannelRequestHints() 
)

Start a request to ensure that a video call with the given contact contact exists, creating it if necessary.

See ensureChannel() for more details.

This will only work on relatively modern connection managers, like telepathy-gabble 0.9.0 or later.

Parameters:
contactThe contact to call.
withAudiotrue if both audio and video are required, false for a video-only call.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
preferredHandlerEither the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable.
hintsArbitrary metadata which will be relayed to the handler if supported, as indicated by supportsRequestHints().
Returns:
A PendingChannelRequest which will emit PendingChannelRequest::finished when the request has been made.
See also:
ensureChannel(), createChannel()
PendingChannelRequest * Tp::Account::createFileTransfer ( const QString &  contactIdentifier,
const FileTransferChannelCreationProperties properties,
const QDateTime &  userActionTime = QDateTime::currentDateTime(),
const QString &  preferredHandler = QString(),
const ChannelRequestHints hints = ChannelRequestHints() 
)

Start a request to create a file transfer channel with the given contact contact.

Parameters:
contactIdentifierThe identifier of the contact to send a file.
propertiesThe desired properties.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
preferredHandlerEither the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable.
hintsArbitrary metadata which will be relayed to the handler if supported, as indicated by supportsRequestHints().
Returns:
A PendingChannelRequest which will emit PendingChannelRequest::finished when the request has been made.
See also:
ensureChannel(), createChannel()
PendingChannelRequest * Tp::Account::createFileTransfer ( const ContactPtr &  contact,
const FileTransferChannelCreationProperties properties,
const QDateTime &  userActionTime = QDateTime::currentDateTime(),
const QString &  preferredHandler = QString(),
const ChannelRequestHints hints = ChannelRequestHints() 
)

Start a request to create a file transfer channel with the given contact contact.

Parameters:
contactThe contact to send a file.
propertiesThe desired properties.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
preferredHandlerEither the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable.
hintsArbitrary metadata which will be relayed to the handler if supported, as indicated by supportsRequestHints().
Returns:
A PendingChannelRequest which will emit PendingChannelRequest::finished when the request has been made.
See also:
ensureChannel(), createChannel()
PendingChannelRequest * Tp::Account::createStreamTube ( const QString &  contactIdentifier,
const QString &  service,
const QDateTime &  userActionTime = QDateTime::currentDateTime(),
const QString &  preferredHandler = QString(),
const ChannelRequestHints hints = ChannelRequestHints() 
)

Start a request to create a stream tube channel with the given contact identifier contactIdentifier.

Parameters:
contactIdentifierThe identifier of the contact to open a stream tube with.
serviceThe stream tube service.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
preferredHandlerEither the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable.
hintsArbitrary metadata which will be relayed to the handler if supported, as indicated by supportsRequestHints().
Returns:
A PendingChannelRequest which will emit PendingChannelRequest::finished when the request has been made.
See also:
ensureChannel(), createChannel()
PendingChannelRequest * Tp::Account::createStreamTube ( const ContactPtr &  contact,
const QString &  service,
const QDateTime &  userActionTime = QDateTime::currentDateTime(),
const QString &  preferredHandler = QString(),
const ChannelRequestHints hints = ChannelRequestHints() 
)

Start a request to create a stream tube channel with the given contact contact.

Parameters:
contactThe contact to open a stream tube with.
serviceThe stream tube service.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
preferredHandlerEither the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable.
hintsArbitrary metadata which will be relayed to the handler if supported, as indicated by supportsRequestHints().
Returns:
A PendingChannelRequest which will emit PendingChannelRequest::finished when the request has been made.
See also:
ensureChannel(), createChannel()
PendingChannelRequest * Tp::Account::createDBusTube ( const QString &  contactIdentifier,
const QString &  serviceName,
const QDateTime &  userActionTime = QDateTime::currentDateTime(),
const QString &  preferredHandler = QString(),
const ChannelRequestHints hints = ChannelRequestHints() 
)

Start a request to create a DBus tube channel with the given contact contactIdentifier.

Parameters:
contactIdentifierThe contact identifier of the contact to open a DBus tube with.
serviceNamethe service name that will be used over the tube. It should be a well-known D-Bus service name, of the form com.example.ServiceName
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
preferredHandlerEither the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable.
hintsArbitrary metadata which will be relayed to the handler if supported, as indicated by supportsRequestHints().
Returns:
A PendingChannelRequest which will emit PendingChannelRequest::finished when the call has finished.
See also:
ensureChannel(), createChannel()
PendingChannelRequest* Tp::Account::createDBusTube ( const ContactPtr &  contact,
const QString &  serviceName,
const QDateTime &  userActionTime = QDateTime::currentDateTime(),
const QString &  preferredHandler = QString(),
const ChannelRequestHints hints = ChannelRequestHints() 
)
PendingChannelRequest * Tp::Account::createConferenceStreamedMediaCall ( const QList< ChannelPtr > &  channels,
const QStringList &  initialInviteeContactsIdentifiers = QStringList(),
const QDateTime &  userActionTime = QDateTime::currentDateTime(),
const QString &  preferredHandler = QString(),
const ChannelRequestHints hints = ChannelRequestHints() 
)

Start a request to create a conference media call with the given channels channels.

Parameters:
channelsThe conference channels.
initialInviteeContactsIdentifiersA list of additional contacts identifiers to be invited to this conference when it is created.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
preferredHandlerEither the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable.
hintsArbitrary metadata which will be relayed to the handler if supported, as indicated by supportsRequestHints().
Returns:
A PendingChannelRequest which will emit PendingChannelRequest::finished when the request has been made.
See also:
ensureChannel(), createChannel()
PendingChannelRequest * Tp::Account::createConferenceStreamedMediaCall ( const QList< ChannelPtr > &  channels,
const QList< ContactPtr > &  initialInviteeContacts = QList<ContactPtr>(),
const QDateTime &  userActionTime = QDateTime::currentDateTime(),
const QString &  preferredHandler = QString(),
const ChannelRequestHints hints = ChannelRequestHints() 
)

Start a request to create a conference media call with the given channels channels.

Parameters:
channelsThe conference channels.
initialInviteeContactsA list of additional contacts to be invited to this conference when it is created.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
preferredHandlerEither the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable.
hintsArbitrary metadata which will be relayed to the handler if supported, as indicated by supportsRequestHints().
Returns:
A PendingChannelRequest which will emit PendingChannelRequest::finished when the request has been made.
See also:
ensureChannel(), createChannel()
PendingChannelRequest * Tp::Account::createConferenceTextChat ( const QList< ChannelPtr > &  channels,
const QList< ContactPtr > &  initialInviteeContacts = QList<ContactPtr>(),
const QDateTime &  userActionTime = QDateTime::currentDateTime(),
const QString &  preferredHandler = QString(),
const ChannelRequestHints hints = ChannelRequestHints() 
)

Start a request to create a conference text chat with the given channels channels.

Parameters:
channelsThe conference channels.
initialInviteeContactsA list of additional contacts to be invited to this conference when it is created.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
preferredHandlerEither the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable.
hintsArbitrary metadata which will be relayed to the handler if supported, as indicated by supportsRequestHints().
Returns:
A PendingChannelRequest which will emit PendingChannelRequest::finished when the request has been made.
See also:
ensureChannel(), createChannel()
PendingChannelRequest * Tp::Account::createConferenceTextChat ( const QList< ChannelPtr > &  channels,
const QStringList &  initialInviteeContactsIdentifiers = QStringList(),
const QDateTime &  userActionTime = QDateTime::currentDateTime(),
const QString &  preferredHandler = QString(),
const ChannelRequestHints hints = ChannelRequestHints() 
)

Start a request to create a conference text chat with the given channels channels.

Parameters:
channelsThe conference channels.
initialInviteeContactsIdentifiersA list of additional contacts identifiers to be invited to this conference when it is created.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
preferredHandlerEither the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable.
hintsArbitrary metadata which will be relayed to the handler if supported, as indicated by supportsRequestHints().
Returns:
A PendingChannelRequest which will emit PendingChannelRequest::finished when the request has been made.
See also:
ensureChannel(), createChannel()
PendingChannelRequest * Tp::Account::createConferenceTextChatroom ( const QString &  roomName,
const QList< ChannelPtr > &  channels,
const QStringList &  initialInviteeContactsIdentifiers = QStringList(),
const QDateTime &  userActionTime = QDateTime::currentDateTime(),
const QString &  preferredHandler = QString(),
const ChannelRequestHints hints = ChannelRequestHints() 
)

Start a request to create a conference text chat room with the given channels channels and room name roomName.

Parameters:
roomNameThe room name.
channelsThe conference channels.
initialInviteeContactsIdentifiersA list of additional contacts identifiers to be invited to this conference when it is created.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
preferredHandlerEither the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable.
hintsArbitrary metadata which will be relayed to the handler if supported, as indicated by supportsRequestHints().
Returns:
A PendingChannelRequest which will emit PendingChannelRequest::finished when the request has been made.
See also:
ensureChannel(), createChannel()
PendingChannelRequest * Tp::Account::createConferenceTextChatroom ( const QString &  roomName,
const QList< ChannelPtr > &  channels,
const QList< ContactPtr > &  initialInviteeContacts = QList<ContactPtr>(),
const QDateTime &  userActionTime = QDateTime::currentDateTime(),
const QString &  preferredHandler = QString(),
const ChannelRequestHints hints = ChannelRequestHints() 
)

Start a request to create a conference text chat room with the given channels channels and room name roomName.

Parameters:
roomNameThe room name.
channelsThe conference channels.
initialInviteeContactsA list of additional contacts to be invited to this conference when it is created.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
preferredHandlerEither the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable.
hintsArbitrary metadata which will be relayed to the handler if supported, as indicated by supportsRequestHints().
Returns:
A PendingChannelRequest which will emit PendingChannelRequest::finished when the request has been made.
See also:
ensureChannel(), createChannel()
PendingChannelRequest * Tp::Account::createContactSearch ( const QString &  server,
uint  limit = 0,
const QDateTime &  userActionTime = QDateTime::currentDateTime(),
const QString &  preferredHandler = QString(),
const ChannelRequestHints hints = ChannelRequestHints() 
)

Start a request to create a contact search channel with the given server server and limit limit.

Parameters:
serverFor protocols which support searching for contacts on multiple servers with different DNS names (like XMPP), the DNS name of the server to be searched, e.g. "characters.shakespeare.lit". Otherwise, an empty string.
limitThe desired maximum number of results that should be returned by a doing a search. If the protocol does not support specifying a limit for the number of results returned at a time, this will be ignored.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
preferredHandlerEither the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable.
hintsArbitrary metadata which will be relayed to the handler if supported, as indicated by supportsRequestHints().
Returns:
A PendingChannelRequest which will emit PendingChannelRequest::finished when the request has been made.
See also:
createChannel()
PendingChannel * Tp::Account::ensureAndHandleTextChat ( const QString &  contactIdentifier,
const QDateTime &  userActionTime = QDateTime::currentDateTime() 
)

Start a request to ensure that a text channel with the given contact contactIdentifier exists, creating it if necessary. This initially just creates a PendingChannel object, which can be used to track the success or failure of the request.

Parameters:
contactIdentifierThe identifier of the contact to chat with.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
Returns:
A PendingChannel which will emit PendingChannel::finished successfully, when the Channel is available for handling using PendingChannel::channel(), or with an error if one has been encountered.
See also:
ensureAndHandleChannel(), createAndHandleChannel()
PendingChannel * Tp::Account::ensureAndHandleTextChat ( const ContactPtr &  contact,
const QDateTime &  userActionTime = QDateTime::currentDateTime() 
)

Start a request to ensure that a text channel with the given contact contact exists, creating it if necessary. This initially just creates a PendingChannel object, which can be used to track the success or failure of the request.

Parameters:
contactThe contact to chat with.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
Returns:
A PendingChannel which will emit PendingChannel::finished successfully, when the Channel is available for handling using PendingChannel::channel(), or with an error if one has been encountered.
See also:
ensureAndHandleChannel(), createAndHandleChannel()
PendingChannel * Tp::Account::ensureAndHandleTextChatroom ( const QString &  roomName,
const QDateTime &  userActionTime = QDateTime::currentDateTime() 
)

Start a request to ensure that a text chat room with the given room name roomName exists, creating it if necessary. This initially just creates a PendingChannel object, which can be used to track the success or failure of the request.

Parameters:
roomNameThe name of the chat room.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
Returns:
A PendingChannel which will emit PendingChannel::finished successfully, when the Channel is available for handling using PendingChannel::channel(), or with an error if one has been encountered.
See also:
ensureAndHandleChannel(), createAndHandleChannel()
PendingChannel * Tp::Account::ensureAndHandleAudioCall ( const QString &  contactIdentifier,
const QString &  initialAudioContentName = QString(),
const QDateTime &  userActionTime = QDateTime::currentDateTime() 
)

Start a request to ensure that an audio call channel with the given contact contactIdentifier exists, creating it if necessary. This initially just creates a PendingChannel object, which can be used to track the success or failure of the request.

Parameters:
contactIdentifierThe identifier of the contact to call.
initialAudioContentNameThe name of the initial audio CallContent that will be automatically added on the channel.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
Returns:
A PendingChannel which will emit PendingChannel::finished successfully, when the Channel is available for handling using PendingChannel::channel(), or with an error if one has been encountered.
See also:
ensureAndHandleChannel(), createAndHandleChannel()
PendingChannel * Tp::Account::ensureAndHandleAudioCall ( const ContactPtr &  contact,
const QString &  initialAudioContentName = QString(),
const QDateTime &  userActionTime = QDateTime::currentDateTime() 
)

Start a request to ensure that an audio call channel with the given contact contact exists, creating it if necessary. This initially just creates a PendingChannel object, which can be used to track the success or failure of the request.

Parameters:
contactThe contact to call.
initialAudioContentNameThe name of the initial audio CallContent that will be automatically added on the channel.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
Returns:
A PendingChannel which will emit PendingChannel::finished successfully, when the Channel is available for handling using PendingChannel::channel(), or with an error if one has been encountered.
See also:
ensureAndHandleChannel(), createAndHandleChannel()
PendingChannel * Tp::Account::ensureAndHandleVideoCall ( const QString &  contactIdentifier,
const QString &  initialVideoContentName = QString(),
const QDateTime &  userActionTime = QDateTime::currentDateTime() 
)

Start a request to ensure that a video call channel with the given contact contactIdentifier exists, creating it if necessary. This initially just creates a PendingChannel object, which can be used to track the success or failure of the request.

Parameters:
contactIdentifierThe identifier of the contact to call.
initialVideoContentNameThe name of the initial video CallContent that will be automatically added on the channel.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
Returns:
A PendingChannel which will emit PendingChannel::finished successfully, when the Channel is available for handling using PendingChannel::channel(), or with an error if one has been encountered.
See also:
ensureAndHandleChannel(), createAndHandleChannel()
PendingChannel * Tp::Account::ensureAndHandleVideoCall ( const ContactPtr &  contact,
const QString &  initialVideoContentName = QString(),
const QDateTime &  userActionTime = QDateTime::currentDateTime() 
)

Start a request to ensure that a video call channel with the given contact contact exists, creating it if necessary. This initially just creates a PendingChannel object, which can be used to track the success or failure of the request.

Parameters:
contactThe contact to call.
initialVideoContentNameThe name of the initial video CallContent that will be automatically added on the channel.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
Returns:
A PendingChannel which will emit PendingChannel::finished successfully, when the Channel is available for handling using PendingChannel::channel(), or with an error if one has been encountered.
See also:
ensureAndHandleChannel(), createAndHandleChannel()
PendingChannel * Tp::Account::ensureAndHandleAudioVideoCall ( const QString &  contactIdentifier,
const QString &  initialAudioContentName = QString(),
const QString &  initialVideoContentName = QString(),
const QDateTime &  userActionTime = QDateTime::currentDateTime() 
)

Start a request to ensure that an audio/video call channel with the given contact contactIdentifier exists, creating it if necessary. This initially just creates a PendingChannel object, which can be used to track the success or failure of the request.

Parameters:
contactIdentifierThe identifier of the contact to call.
initialAudioContentNameThe name of the initial audio CallContent that will be automatically added on the channel.
initialVideoContentNameThe name of the initial video CallContent that will be automatically added on the channel.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
Returns:
A PendingChannel which will emit PendingChannel::finished successfully, when the Channel is available for handling using PendingChannel::channel(), or with an error if one has been encountered.
See also:
ensureAndHandleChannel(), createAndHandleChannel()
PendingChannel * Tp::Account::ensureAndHandleAudioVideoCall ( const ContactPtr &  contact,
const QString &  initialAudioContentName = QString(),
const QString &  initialVideoContentName = QString(),
const QDateTime &  userActionTime = QDateTime::currentDateTime() 
)

Start a request to ensure that an audio/video call channel with the given contact contact exists, creating it if necessary. This initially just creates a PendingChannel object, which can be used to track the success or failure of the request.

Parameters:
contactThe contact to call.
initialAudioContentNameThe name of the initial audio CallContent that will be automatically added on the channel.
initialVideoContentNameThe name of the initial video CallContent that will be automatically added on the channel.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
Returns:
A PendingChannel which will emit PendingChannel::finished successfully, when the Channel is available for handling using PendingChannel::channel(), or with an error if one has been encountered.
See also:
ensureAndHandleChannel(), createAndHandleChannel()
PendingChannel * Tp::Account::ensureAndHandleStreamedMediaCall ( const QString &  contactIdentifier,
const QDateTime &  userActionTime = QDateTime::currentDateTime() 
)

Start a request to ensure that a media channel with the given contact contactIdentifier exists, creating it if necessary. This initially just creates a PendingChannel object, which can be used to track the success or failure of the request.

Parameters:
contactIdentifierThe identifier of the contact to call.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
Returns:
A PendingChannel which will emit PendingChannel::finished successfully, when the Channel is available for handling using PendingChannel::channel(), or with an error if one has been encountered.
See also:
ensureAndHandleChannel(), createAndHandleChannel()
PendingChannel * Tp::Account::ensureAndHandleStreamedMediaCall ( const ContactPtr &  contact,
const QDateTime &  userActionTime = QDateTime::currentDateTime() 
)

Start a request to ensure that a media channel with the given contact contact exists, creating it if necessary. This initially just creates a PendingChannel object, which can be used to track the success or failure of the request.

Parameters:
contactThe contact to call.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
Returns:
A PendingChannel which will emit PendingChannel::finished successfully, when the Channel is available for handling using PendingChannel::channel(), or with an error if one has been encountered.
See also:
ensureAndHandleChannel(), createAndHandleChannel()
PendingChannel * Tp::Account::ensureAndHandleStreamedMediaAudioCall ( const QString &  contactIdentifier,
const QDateTime &  userActionTime = QDateTime::currentDateTime() 
)

Start a request to ensure that an audio call with the given contact contactIdentifier exists, creating it if necessary. This initially just creates a PendingChannel object, which can be used to track the success or failure of the request.

This will only work on relatively modern connection managers, like telepathy-gabble 0.9.0 or later.

Parameters:
contactIdentifierThe identifier of the contact to call.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
Returns:
A PendingChannel which will emit PendingChannel::finished successfully, when the Channel is available for handling using PendingChannel::channel(), or with an error if one has been encountered.
See also:
ensureAndHandleChannel(), createAndHandleChannel()
PendingChannel * Tp::Account::ensureAndHandleStreamedMediaAudioCall ( const ContactPtr &  contact,
const QDateTime &  userActionTime = QDateTime::currentDateTime() 
)

Start a request to ensure that an audio call with the given contact contact exists, creating it if necessary. This initially just creates a PendingChannel object, which can be used to track the success or failure of the request.

This will only work on relatively modern connection managers, like telepathy-gabble 0.9.0 or later.

Parameters:
contactThe contact to call.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
Returns:
A PendingChannel which will emit PendingChannel::finished successfully, when the Channel is available for handling using PendingChannel::channel(), or with an error if one has been encountered.
See also:
ensureAndHandleChannel(), createAndHandleChannel()
PendingChannel * Tp::Account::ensureAndHandleStreamedMediaVideoCall ( const QString &  contactIdentifier,
bool  withAudio = true,
const QDateTime &  userActionTime = QDateTime::currentDateTime() 
)

Start a request to ensure that a video call with the given contact contactIdentifier exists, creating it if necessary. This initially just creates a PendingChannel object, which can be used to track the success or failure of the request.

This will only work on relatively modern connection managers, like telepathy-gabble 0.9.0 or later.

Parameters:
contactIdentifierThe identifier of the contact to call.
withAudiotrue if both audio and video are required, false for a video-only call.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
Returns:
A PendingChannel which will emit PendingChannel::finished successfully, when the Channel is available for handling using PendingChannel::channel(), or with an error if one has been encountered.
See also:
ensureAndHandleChannel(), createAndHandleChannel()
PendingChannel * Tp::Account::ensureAndHandleStreamedMediaVideoCall ( const ContactPtr &  contact,
bool  withAudio = true,
const QDateTime &  userActionTime = QDateTime::currentDateTime() 
)

Start a request to ensure that a video call with the given contact contact exists, creating it if necessary. This initially just creates a PendingChannel object, which can be used to track the success or failure of the request.

This will only work on relatively modern connection managers, like telepathy-gabble 0.9.0 or later.

Parameters:
contactThe contact to call.
withAudiotrue if both audio and video are required, false for a video-only call.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
Returns:
A PendingChannel which will emit PendingChannel::finished successfully, when the Channel is available for handling using PendingChannel::channel(), or with an error if one has been encountered.
See also:
ensureAndHandleChannel(), createAndHandleChannel()
PendingChannel * Tp::Account::createAndHandleFileTransfer ( const QString &  contactIdentifier,
const FileTransferChannelCreationProperties properties,
const QDateTime &  userActionTime = QDateTime::currentDateTime() 
)

Start a request to create a file transfer channel with the given contact contactIdentifier. This initially just creates a PendingChannel object, which can be used to track the success or failure of the request.

Parameters:
contactIdentifierThe identifier of the contact to send a file.
propertiesThe desired properties.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
Returns:
A PendingChannel which will emit PendingChannel::finished successfully, when the Channel is available for handling using PendingChannel::channel(), or with an error if one has been encountered.
See also:
ensureAndHandleChannel(), createAndHandleChannel()
PendingChannel * Tp::Account::createAndHandleFileTransfer ( const ContactPtr &  contact,
const FileTransferChannelCreationProperties properties,
const QDateTime &  userActionTime = QDateTime::currentDateTime() 
)

Start a request to create a file transfer channel with the given contact contact. This initially just creates a PendingChannel object, which can be used to track the success or failure of the request.

Parameters:
contactThe contact to send a file.
propertiesThe desired properties.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
Returns:
A PendingChannel which will emit PendingChannel::finished successfully, when the Channel is available for handling using PendingChannel::channel(), or with an error if one has been encountered.
See also:
ensureAndHandleChannel(), createAndHandleChannel()
PendingChannel * Tp::Account::createAndHandleStreamTube ( const QString &  contactIdentifier,
const QString &  service,
const QDateTime &  userActionTime = QDateTime::currentDateTime() 
)

Start a request to create a stream tube channel with the given contact identifier contactIdentifier. This initially just creates a PendingChannel object, which can be used to track the success or failure of the request.

Parameters:
contactIdentifierThe identifier of the contact to open a stream tube with.
serviceThe stream tube service.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
Returns:
A PendingChannel which will emit PendingChannel::finished successfully, when the Channel is available for handling using PendingChannel::channel(), or with an error if one has been encountered.
See also:
ensureAndHandleChannel(), createAndHandleChannel()
PendingChannel * Tp::Account::createAndHandleStreamTube ( const ContactPtr &  contact,
const QString &  service,
const QDateTime &  userActionTime = QDateTime::currentDateTime() 
)

Start a request to create a stream tube channel with the given contact contact. This initially just creates a PendingChannel object, which can be used to track the success or failure of the request.

Parameters:
contactThe contact to open a stream tube with.
serviceThe stream tube service.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
Returns:
A PendingChannel which will emit PendingChannel::finished successfully, when the Channel is available for handling using PendingChannel::channel(), or with an error if one has been encountered.
See also:
ensureAndHandleChannel(), createAndHandleChannel()
PendingChannel * Tp::Account::createAndHandleDBusTube ( const QString &  contactIdentifier,
const QString &  serviceName,
const QDateTime &  userActionTime = QDateTime::currentDateTime() 
)

Start a request to create a DBus tube channel with the given contact identifier contactIdentifier. This initially just creates a PendingChannel object, which can be used to track the success or failure of the request.

Parameters:
contactIdentifierThe identifier of the contact to open a DBus tube with.
serviceNameThe DBus tube service name.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
Returns:
A PendingChannel which will emit PendingChannel::finished successfully, when the Channel is available for handling using PendingChannel::channel(), or with an error if one has been encountered.
See also:
ensureAndHandleChannel(), createAndHandleChannel()
PendingChannel * Tp::Account::createAndHandleDBusTube ( const ContactPtr &  contact,
const QString &  serviceName,
const QDateTime &  userActionTime = QDateTime::currentDateTime() 
)

Start a request to create a DBus tube channel with the given contact contact. This initially just creates a PendingChannel object, which can be used to track the success or failure of the request.

Parameters:
contactThe contact to open a DBus tube with.
serviceThe DBus tube service name.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
Returns:
A PendingChannel which will emit PendingChannel::finished successfully, when the Channel is available for handling using PendingChannel::channel(), or with an error if one has been encountered.
See also:
ensureAndHandleChannel(), createAndHandleChannel()
PendingChannel * Tp::Account::createAndHandleConferenceTextChat ( const QList< ChannelPtr > &  channels,
const QList< ContactPtr > &  initialInviteeContacts = QList<ContactPtr>(),
const QDateTime &  userActionTime = QDateTime::currentDateTime() 
)

Start a request to create a conference text chat with the given channels channels. This initially just creates a PendingChannel object, which can be used to track the success or failure of the request.

Parameters:
channelsThe conference channels.
initialInviteeContactsA list of additional contacts to be invited to this conference when it is created.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
Returns:
A PendingChannel which will emit PendingChannel::finished successfully, when the Channel is available for handling using PendingChannel::channel(), or with an error if one has been encountered.
See also:
ensureAndHandleChannel(), createAndHandleChannel()
PendingChannel * Tp::Account::createAndHandleConferenceTextChat ( const QList< ChannelPtr > &  channels,
const QStringList &  initialInviteeContactsIdentifiers = QStringList(),
const QDateTime &  userActionTime = QDateTime::currentDateTime() 
)

Start a request to create a conference text chat with the given channels channels. This initially just creates a PendingChannel object, which can be used to track the success or failure of the request.

Parameters:
channelsThe conference channels.
initialInviteeContactsIdentifiersA list of additional contacts identifiers to be invited to this conference when it is created.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
Returns:
A PendingChannel which will emit PendingChannel::finished successfully, when the Channel is available for handling using PendingChannel::channel(), or with an error if one has been encountered.
See also:
ensureAndHandleChannel(), createAndHandleChannel()
PendingChannel * Tp::Account::createAndHandleConferenceTextChatroom ( const QString &  roomName,
const QList< ChannelPtr > &  channels,
const QStringList &  initialInviteeContactsIdentifiers = QStringList(),
const QDateTime &  userActionTime = QDateTime::currentDateTime() 
)

Start a request to create a conference text chat room with the given channels channels and room name roomName. This initially just creates a PendingChannel object, which can be used to track the success or failure of the request.

Parameters:
roomNameThe room name.
channelsThe conference channels.
initialInviteeContactsIdentifiersA list of additional contacts identifiers to be invited to this conference when it is created.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
Returns:
A PendingChannel which will emit PendingChannel::finished successfully, when the Channel is available for handling using PendingChannel::channel(), or with an error if one has been encountered.
See also:
ensureAndHandleChannel(), createAndHandleChannel()
PendingChannel * Tp::Account::createAndHandleConferenceTextChatroom ( const QString &  roomName,
const QList< ChannelPtr > &  channels,
const QList< ContactPtr > &  initialInviteeContacts = QList<ContactPtr>(),
const QDateTime &  userActionTime = QDateTime::currentDateTime() 
)

Start a request to create a conference text chat room with the given channels channels and room name roomName. This initially just creates a PendingChannel object, which can be used to track the success or failure of the request.

Parameters:
roomNameThe room name.
channelsThe conference channels.
initialInviteeContactsA list of additional contacts to be invited to this conference when it is created.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
Returns:
A PendingChannel which will emit PendingChannel::finished successfully, when the Channel is available for handling using PendingChannel::channel(), or with an error if one has been encountered.
See also:
ensureAndHandleChannel(), createAndHandleChannel()
PendingChannel * Tp::Account::createAndHandleConferenceStreamedMediaCall ( const QList< ChannelPtr > &  channels,
const QStringList &  initialInviteeContactsIdentifiers = QStringList(),
const QDateTime &  userActionTime = QDateTime::currentDateTime() 
)

Start a request to create a conference media call with the given channels channels. This initially just creates a PendingChannel object, which can be used to track the success or failure of the request.

Parameters:
channelsThe conference channels.
initialInviteeContactsIdentifiersA list of additional contacts identifiers to be invited to this conference when it is created.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
Returns:
A PendingChannel which will emit PendingChannel::finished successfully, when the Channel is available for handling using PendingChannel::channel(), or with an error if one has been encountered.
See also:
ensureAndHandleChannel(), createAndHandleChannel()
PendingChannel * Tp::Account::createAndHandleConferenceStreamedMediaCall ( const QList< ChannelPtr > &  channels,
const QList< ContactPtr > &  initialInviteeContacts = QList<ContactPtr>(),
const QDateTime &  userActionTime = QDateTime::currentDateTime() 
)

Start a request to create a conference media call with the given channels channels. This initially just creates a PendingChannel object, which can be used to track the success or failure of the request.

Parameters:
channelsThe conference channels.
initialInviteeContactsA list of additional contacts to be invited to this conference when it is created.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
Returns:
A PendingChannel which will emit PendingChannel::finished successfully, when the Channel is available for handling using PendingChannel::channel(), or with an error if one has been encountered.
See also:
ensureAndHandleChannel(), createAndHandleChannel()
PendingChannel * Tp::Account::createAndHandleContactSearch ( const QString &  server = QString(),
uint  limit = 0,
const QDateTime &  userActionTime = QDateTime::currentDateTime() 
)

Start a request to create a contact search channel with the given server server and limit limit. This initially just creates a PendingChannel object, which can be used to track the success or failure of the request.

Parameters:
serverFor protocols which support searching for contacts on multiple servers with different DNS names (like XMPP), the DNS name of the server to be searched, e.g. "characters.shakespeare.lit". Otherwise, an empty string. If the protocol does not support specifying a search server, this will be ignored.
limitThe desired maximum number of results that should be returned by a doing a search. If the protocol does not support specifying a limit for the number of results returned at a time, this will be ignored.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
Returns:
A PendingChannel which will emit PendingChannel::finished successfully, when the Channel is available for handling using PendingChannel::channel(), or with an error if one has been encountered.
See also:
ensureAndHandleChannel(), createAndHandleChannel()
PendingChannelRequest * Tp::Account::createChannel ( const QVariantMap &  request,
const QDateTime &  userActionTime = QDateTime::currentDateTime(),
const QString &  preferredHandler = QString(),
const ChannelRequestHints hints = ChannelRequestHints() 
)

Start a request to create a channel. This initially just creates a PendingChannelRequest object, which can be used to track the success or failure of the request, or to cancel it.

Helper methods for text chat, text chat room, media call and conference are provided and should be used if appropriate.

Parameters:
requestA dictionary containing desirable properties.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
preferredHandlerEither the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable.
hintsArbitrary metadata which will be relayed to the handler if supported, as indicated by supportsRequestHints().
Returns:
A PendingChannelRequest which will emit PendingChannelRequest::finished when the request has been made.
See also:
createChannel()
PendingChannelRequest * Tp::Account::ensureChannel ( const QVariantMap &  request,
const QDateTime &  userActionTime = QDateTime::currentDateTime(),
const QString &  preferredHandler = QString(),
const ChannelRequestHints hints = ChannelRequestHints() 
)

Start a request to ensure that a channel exists, creating it if necessary. This initially just creates a PendingChannelRequest object, which can be used to track the success or failure of the request, or to cancel it.

Helper methods for text chat, text chat room, media call and conference are provided and should be used if appropriate.

Parameters:
requestA dictionary containing desirable properties.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
preferredHandlerEither the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable.
hintsArbitrary metadata which will be relayed to the handler if supported, as indicated by supportsRequestHints().
Returns:
A PendingChannelRequest which will emit PendingChannelRequest::finished when the request has been made.
See also:
createChannel()
PendingChannel * Tp::Account::createAndHandleChannel ( const QVariantMap &  request,
const QDateTime &  userActionTime 
)

Start a request to create channel. This initially just creates a PendingChannel object, which can be used to track the success or failure of the request.

Helper methods for text chat, text chat room, media call and conference are provided and should be used if appropriate.

The caller is responsible for closing the channel with Channel::requestClose() or Channel::requestLeave() when it has finished handling it.

A possible error returned by this method is TP_QT_ERROR_NOT_AVAILABLE, in case a conflicting channel that matches request already exists.

Parameters:
requestA dictionary containing desirable properties.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
Returns:
A PendingChannel which will emit PendingChannel::finished successfully, when the Channel is available for handling using PendingChannel::channel(), or with an error if one has been encountered.
See also:
ensureAndHandleChannel()
PendingChannel * Tp::Account::ensureAndHandleChannel ( const QVariantMap &  request,
const QDateTime &  userActionTime 
)

Start a request to ensure that a channel exists, creating it if necessary. This initially just creates a PendingChannel object, which can be used to track the success or failure of the request.

Helper methods for text chat, text chat room, media call and conference are provided and should be used if appropriate.

The caller is responsible for closing the channel with Channel::requestClose() or Channel::requestLeave() when it has finished handling it.

A possible error returned by this method is TP_QT_ERROR_NOT_YOURS, in case somebody else is already handling a channel that matches request.

Parameters:
requestA dictionary containing desirable properties.
userActionTimeThe time at which user action occurred, or QDateTime() if this channel request is for some reason not involving user action.
Returns:
A PendingChannel which will emit PendingChannel::finished successfully, when the Channel is available for handling using PendingChannel::channel(), or with an error if one has been encountered.
See also:
createAndHandleChannel()
void Tp::Account::removed ( ) [signal]

Emitted when this account is removed from the account manager it belonged.

See also:
remove().
void Tp::Account::serviceNameChanged ( const QString &  serviceName) [signal]

Emitted when the value of serviceName() changes.

Parameters:
serviceNameThe new service name of this account.
See also:
serviceName(), setServiceName()
void Tp::Account::profileChanged ( const Tp::ProfilePtr &  profile) [signal]

Emitted when the value of profile() changes.

Parameters:
profileThe new profile of this account.
See also:
profile()
void Tp::Account::displayNameChanged ( const QString &  displayName) [signal]

Emitted when the value of displayName() changes.

Parameters:
displayNameThe new display name of this account.
See also:
displayName(), setDisplayName()
void Tp::Account::iconNameChanged ( const QString &  iconName) [signal]

Emitted when the value of iconName() changes.

Parameters:
iconNameThe new icon name of this account.
See also:
iconName(), setIconName()
void Tp::Account::nicknameChanged ( const QString &  nickname) [signal]

Emitted when the value of nickname() changes.

Parameters:
nicknameThe new nickname of this account.
See also:
nickname(), setNickname()
void Tp::Account::normalizedNameChanged ( const QString &  normalizedName) [signal]

Emitted when the value of normalizedName() changes.

Parameters:
normalizedNameThe new normalized name of this account.
See also:
normalizedName()
void Tp::Account::validityChanged ( bool  validity) [signal]

Emitted when the value of isValidAccount() changes.

Parameters:
validityThe new validity of this account.
See also:
isValidAccount()
void Tp::Account::stateChanged ( bool  state) [signal]

Emitted when the value of isEnabled() changes.

Parameters:
stateThe new state of this account.
See also:
isEnabled()
void Tp::Account::capabilitiesChanged ( const Tp::ConnectionCapabilities capabilities) [signal]

Emitted when the value of capabilities() changes.

Parameters:
capabilitiesThe new capabilities of this account.
See also:
capabilities()
void Tp::Account::connectsAutomaticallyPropertyChanged ( bool  connectsAutomatically) [signal]

Emitted when the value of connectsAutomatically() changes.

Parameters:
connectsAutomaticallyThe new value of connects automatically property of this account.
See also:
isEnabled()
void Tp::Account::firstOnline ( ) [signal]

Emitted when this account is first put online.

See also:
hasBeenOnline()
void Tp::Account::parametersChanged ( const QVariantMap &  parameters) [signal]

Emitted when the value of parameters() changes.

Parameters:
parametersThe new parameters of this account.
See also:
parameters()
void Tp::Account::changingPresence ( bool  value) [signal]

Emitted when the value of isChangingPresence() changes.

Parameters:
valueWhether this account's connection is changing presence.
See also:
isChangingPresence()
void Tp::Account::automaticPresenceChanged ( const Tp::Presence automaticPresence) [signal]

Emitted when the value of automaticPresence() changes.

Parameters:
automaticPresenceThe new value of automatic presence property of this account.
See also:
automaticPresence(), currentPresenceChanged()
void Tp::Account::currentPresenceChanged ( const Tp::Presence currentPresence) [signal]

Emitted when the value of currentPresence() changes.

Parameters:
currentPresenceThe new value of the current presence property of this account.
See also:
currentPresence()
void Tp::Account::requestedPresenceChanged ( const Tp::Presence requestedPresence) [signal]

Emitted when the value of requestedPresence() changes.

Parameters:
requestedPresenceThe new value of the requested presence property of this account.
See also:
requestedPresence(), currentPresenceChanged()
void Tp::Account::onlinenessChanged ( bool  online) [signal]

Emitted when the value of isOnline() changes.

Parameters:
onlineWhether this account is online.
See also:
isOnline(), currentPresence()
void Tp::Account::avatarChanged ( const Tp::Avatar avatar) [signal]

Emitted when the value of avatar() changes.

Parameters:
avatarThe new avatar of this account.
See also:
avatar()

Emitted when the connection status changes.

Parameters:
statusThe new status of this account connection.
See also:
connectionStatus(), connectionStatusReason(), connectionError(), connectionErrorDetails(), Connection::ErrorDetails
void Tp::Account::connectionChanged ( const Tp::ConnectionPtr &  connection) [signal]

Emitted when the value of connection() changes.

The connection will have the features set in the ConnectionFactory used by this account ready and the same channel and contact factories used by this account.

Parameters:
connectionA ConnectionPtr pointing to the new Connection object or a null ConnectionPtr if there is no connection.
See also:
connection()

Return the Client::AccountInterface interface proxy object for this account. This method is protected since the convenience methods provided by this class should generally be used instead of calling D-Bus methods directly.

Returns:
A pointer to the existing Client::AccountInterface object for this Account object.

Return the Client::ChannelDispatcherInterface interface proxy object to use for requesting channels on this account.

This method is protected since the convenience methods provided by this class should generally be used instead of calling D-Bus methods directly.

Returns:
A pointer to the existing Client::ChannelDispatcherInterface object for this Account object.

Member Data Documentation

Feature representing the core that needs to become ready to make the Account object usable.

Note that this feature must be enabled in order to use most Account methods. See specific methods documentation for more details.

When calling isReady(), becomeReady(), this feature is implicitly added to the requested features.

Feature used in order to access account avatar info.

See avatar specific methods' documentation for more details.

See also:
avatar(), avatarChanged()

Feature used in order to access account protocol info.

See protocol info specific methods' documentation for more details.

See also:
protocolInfo()

Feature used in order to access account capabilities.

Enabling this feature will also enable FeatureProtocolInfo and FeatureProfile.

See capabilities specific methods' documentation for more details.

See also:
capabilities(), capabilitiesChanged()

Feature used in order to access account profile info.

See profile specific methods' documentation for more details.

See also:
profile(), profileChanged()

Property Documentation

bool Tp::Account::valid [read]
bool Tp::Account::enabled [read]
QString Tp::Account::cmName [read]

Return the connection manager name of this account.

Returns:
The connection manager name.
QString Tp::Account::protocolName [read]

Return the protocol name of this account.

Returns:
The protocol name.
QString Tp::Account::serviceName [read]

Return the service name of this account.

Note that this method will fallback to protocolName() if service name is not known.

Change notification is via the serviceNameChanged() signal.

This method requires Account::FeatureCore to be ready.

Returns:
The service name.
See also:
serviceNameChanged(), setServiceName(), protocolName()
ProfilePtr Tp::Account::profile [read]

Return the profile used by this account.

Profiles are intended to describe variants of the basic protocols supported by Telepathy connection managers. An example of this would be Google Talk vs Facebook chat vs Jabber/XMPP. Google Talk is a specific case of XMPP with well-known capabilities, quirks and settings, and Facebook chat is a subset of the standard XMPP offering.

This method will return the profile for this account based on the service used by it.

Note that if a profile for serviceName() is not available, a fake profile (Profile::isFake() is true) will be returned in case protocolInfo() is valid.

The fake profile will contain the following info:

Change notification is via the profileChanged() signal.

This method requires Account::FeatureProfile to be ready.

Returns:
A pointer to the Profile object.
See also:
profileChanged(), serviceName()
QString Tp::Account::displayName [read]

Return the display name of this account.

Change notification is via the displayNameChanged() signal.

This method requires Account::FeatureCore to be ready.

Returns:
The display name.
See also:
displayNameChanged(), setDisplayName()
QString Tp::Account::iconName [read]

Return the icon name of this account.

If the account has no icon, and Account::FeatureProfile is enabled, the icon from the result of profile() will be used.

If neither the account nor the profile has an icon, and Account::FeatureProtocolInfo is enabled, the icon from protocolInfo() will be used if set.

As a last resort, "im-" + protocolName() will be returned.

This matches the fallbacks recommended by the Telepathy specification.

Change notification is via the iconNameChanged() signal.

This method requires Account::FeatureCore to be ready.

Returns:
The icon name.
See also:
iconNameChanged(), setIconName()
QString Tp::Account::nickname [read]

Return the nickname of this account.

Change notification is via the nicknameChanged() signal.

This method requires Account::FeatureCore to be ready.

Returns:
The nickname.
See also:
nicknameChanged(), setNickname()

Return the avatar requirements (size limits, supported MIME types, etc) for avatars passed to setAvatar() on this account.

For now this method will only return the avatar requirements found in protocolInfo() if Account::FeatureProtocolInfo is ready, otherwise an invalid AvatarSpec instance is returned.

Returns:
The requirements as an AvatarSpec object.
See also:
avatar(), setAvatar()
const Avatar & Tp::Account::avatar [read]

Return the avatar of this account.

Change notification is via the avatarChanged() signal.

This method requires Account::FeatureAvatar to be ready.

Returns:
The avatar as an Avatar object.
See also:
avatarChanged(), setAvatar()
QVariantMap Tp::Account::parameters [read]

Return the parameters of this account.

The account parameters are represented as a map from connection manager parameter names to their values.

Change notification is via the parametersChanged() signal.

This method requires Account::FeatureCore to be ready.

Returns:
The parameters as QVariantMap.
See also:
parametersChanged(), updateParameters()

Return the protocol info of this account protocol.

This method requires Account::FeatureProtocolInfo to be ready.

Returns:
The protocol info as a ProtocolInfo object.

Return the capabilities for this account.

Note that this method will return the connection() capabilities if the account is online and ready. If the account is disconnected, it will fallback to return the subtraction of the protocolInfo() capabilities and the profile() unsupported capabilities.

Change notification is via the capabilitiesChanged() signal.

This method requires Account::FeatureCapabilities to be ready.

Returns:
The capabilities as a ConnectionCapabilities object.
See also:
capabilitiesChanged(), protocolInfo(), profile()

Return whether this account has ever been put online successfully.

This property cannot change from true to false, only from false to true. When the account successfully goes online for the first time, or when it is detected that this has already happened, the firstOnline() signal is emitted.

This method requires Account::FeatureCore to be ready.

Returns:
true if ever been online, false otherwise.

Return whether this account should be put online automatically whenever possible.

Change notification is via the connectsAutomaticallyPropertyChanged() signal.

This method requires Account::FeatureCore to be ready.

Returns:
true if it should try to connect automatically, false otherwise.
See also:
connectsAutomaticallyPropertyChanged(), setConnectsAutomatically()

Return the status of this account connection.

Note that this method may return a different value from the one returned by Connection::status() on this account connection. This happens because this value will change whenever the connection status of this account connection changes and won't consider the Connection introspection process. The same rationale also applies to connectionStatusReason() and connectionErrorDetails().

A valid use case for this is for account creation UIs that wish to display the accounts connection status and nothing else on the connections (e.g. retrieve the contact list).

Change notification is via the connectionStatusChanged() signal.

This method requires Account::FeatureCore to be ready.

Returns:
The connection status as ConnectionStatus.
See also:
connectionStatusChanged(), connectionStatusReason(), connectionError(), connectionErrorDetails()

Return the reason for this account connection status.

This represents the reason for the last change to connectionStatus().

Note that this method may return a different value from the one returned by Connection::statusReason() on this account connection. See connectionStatus() for more details.

This method requires Account::FeatureCore to be ready.

Returns:
The connection status reason as ConnectionStatusReason.
See also:
connectionStatusChanged(), connectionStatus(), connectionError(), connectionErrorDetails()

Return the D-Bus error name for the last disconnection or connection failure, (in particular, TP_QT_ERROR_CANCELLED if it was disconnected by user request), or an empty string if the account is connected.

This method requires Account::FeatureCore to be ready.

Returns:
The D-Bus error name for the last disconnection or connection failure.
See also:
connectionErrorDetails(), connectionStatus(), connectionStatusReason(), connectionStatusChanged()

Return detailed information related to connectionError().

Note that this method may return a different value from the one returned by Connection::errorDetails() on this account connection. See connectionStatus() for more details.

This method requires Account::FeatureCore to be ready.

Returns:
The connection error details as a Connection::ErrorDetails object.
See also:
connectionError(), connectionStatus(), connectionStatusReason(), connectionStatusChanged(), Connection::ErrorDetails.
ConnectionPtr Tp::Account::connection [read]

Return the object representing the connection of this account.

Note that the Connection object returned by this method will have the features set in the connectionFactory() used by this account ready.

Change notification is via the connectionChanged() signal.

This method requires Account::FeatureCore to be ready.

Returns:
A pointer to the Connection object, or a null ConnectionPtr if there is no connection currently or if an error occurred.
See also:
connectionChanged()

Return the presence status that this account will have set on it by the account manager if it brings it online automatically.

Change notification is via the automaticPresenceChanged() signal.

This method requires Account::FeatureCore to be ready.

Returns:
The automatic presence as a Presence object.
See also:
automaticPresenceChanged(), setAutomaticPresence()

Return the actual presence of this account.

Change notification is via the currentPresenceChanged() signal.

This method requires Account::FeatureCore to be ready.

Returns:
The current presence as a Presence object.
See also:
currentPresenceChanged(), setRequestedPresence(), requestedPresence(), automaticPresence()

Return the requested presence of this account.

Change notification is via the requestedPresenceChanged() signal.

This method requires Account::FeatureCore to be ready.

Returns:
The requested presence as a Presence object.
See also:
requestedPresenceChanged(), setRequestedPresence(), currentPresence(), automaticPresence()
bool Tp::Account::online [read]

Return the unique identifier of this account.

Returns:
The unique identifier.

Return the normalized user ID of the local user of this account.

It is unspecified whether this user ID is globally unique.

As currently implemented, IRC user IDs are only unique within the same IRCnet. On some saner protocols, the user ID includes a DNS name which provides global uniqueness.

If this value is not known yet (which will always be the case for accounts that have never been online), it will be an empty string.

It is possible that this value will change if the connection manager's normalization algorithm changes.

This method requires Account::FeatureCore to be ready.

Returns:
The normalized user ID of the local user.
See also:
normalizedNameChanged()


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_func_0x72.html0000644000175200001440000022637512000060453024627 0ustar00collabora-develusers00000000000000 Class Members - Functions
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- r -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00156.html0000644000175200001440000006025712000060453021633 0ustar00collabora-develusers00000000000000 Tp::Client::ClientInterfaceRequestsInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ClientInterfaceRequestsInterface Class Reference

#include <TelepathyQt/Client>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

  • QDBusPendingReply AddRequest (const QDBusObjectPath &request, const QVariantMap &properties, int timeout=-1)
  • QDBusPendingReply RemoveRequest (const QDBusObjectPath &request, const QString &error, const QString &message, int timeout=-1)

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Client.Interface.Requests".


Constructor & Destructor Documentation

Tp::Client::ClientInterfaceRequestsInterface::ClientInterfaceRequestsInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ClientInterfaceRequestsInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ClientInterfaceRequestsInterface::ClientInterfaceRequestsInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ClientInterfaceRequestsInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ClientInterfaceRequestsInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ClientInterfaceRequestsInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ClientInterfaceRequestsInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

static QLatin1String Tp::Client::ClientInterfaceRequestsInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Client.Interface.Requests", which this class represents.

Returns:
The D-Bus interface name.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::ClientInterfaceRequestsInterface::AddRequest ( const QDBusObjectPath &  request,
const QVariantMap &  properties,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method AddRequest on the remote object.

Called by the ChannelDispatcher to indicate that channels have been requested, and that if the request is successful, they will probably be handled by this Handler. The ChannelDispatcher SHOULD only call this method on one handler per request.

This allows the UI to start preparing to handle the channels in advance (e.g. render a window with an "in progress" message), improving perceived responsiveness.

The use of "probably" is because you can't necessarily tell from a channel request which handler will handle particular channels. A reasonable heuristic would be to match the request against the ClientHandlerInterface::HandlerChannelFilter , and respect the preferred handler (if any).

If the request succeeds and is given to the expected Handler, the Requests_Satisfied parameter to ClientHandlerInterface::HandleChannels() can be used to match the channel to a previous AddRequest call.

This lets the UI direct the channels to the window that it already opened.

If the request fails, the expected handler is notified by the channel dispatcher calling its RemoveRequest() method.

This lets the UI close the window or display the error.

The channel dispatcher SHOULD remember which handler was notified, and if the channel request succeeds, it SHOULD dispatch the channels to the expected handler, unless the channels do not match that handler's ClientHandlerInterface::HandlerChannelFilter . If the channels are not dispatched to the expected handler, the handler that was expected is notified by the channel dispatcher calling its RemoveRequest() method with the NotYours error.

Expected handling is for the UI to close the window it previously opened.

Handlers SHOULD NOT return an error from this method; errors returned from this method SHOULD NOT alter the channel dispatcher's behaviour.

Calls to this method are merely a notification.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
requestThe ChannelRequest object, which MUST have been returned by CreateChannel or EnsureChannel before this method is called. See those methods for the rationale of this ordering.
propertiesSome of the properties of the ChannelRequest. To avoid race conditions, this dictionary MUST NOT include properties whose values could subsequently change. It SHOULD include as many properties as possible, given that constraint. In particular, the properties Requests, UserActionTime and Account MUST be included, and Hints MUST be included if implemented.
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ClientInterfaceRequestsInterface::RemoveRequest ( const QDBusObjectPath &  request,
const QString &  error,
const QString &  message,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method RemoveRequest on the remote object.

Called by the ChannelDispatcher to indicate that a request previously passed to AddRequest() has failed and should be disregarded.

Handlers SHOULD NOT return an error from this method; errors returned from this method SHOULD NOT alter the channel dispatcher's behaviour.

Calls to this method are merely a notification.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
requestThe request that failed.
error

The name of the D-Bus error with which the request failed.

If this is org.freedesktop.Telepathy.Error.NotYours, this indicates that the request succeeded, but all the resulting channels were given to some other handler.

messageAny message supplied with the D-Bus error.
timeoutThe timeout in milliseconds.
void Tp::Client::ClientInterfaceRequestsInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_func_0x6b.html0000644000175200001440000000307112000060453024670 0ustar00collabora-develusers00000000000000 Class Members - Functions
   Home · All Classes · All Namespaces · Modules · Functions · Files


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00291.html0000644000175200001440000002163112000060453021624 0ustar00collabora-develusers00000000000000 Tp::NotFilter< T > Class Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::NotFilter< T > Class Template Reference

The NotFilter class provides a generic filter object to be used in conjunction of other filters. More...

#include <TelepathyQt/NotFilter>

Inherits Tp::Filter< T >.

List of all members.

Public Member Functions

Static Public Member Functions


Detailed Description

template<class T>
class Tp::NotFilter< T >

The NotFilter class provides a generic filter object to be used in conjunction of other filters.

The NotFilter will match if its given filter does not match its criteria.


Constructor & Destructor Documentation

template<class T >
virtual Tp::NotFilter< T >::~NotFilter ( ) [inline, virtual]

Member Function Documentation

template<class T >
static SharedPtr<NotFilter<T> > Tp::NotFilter< T >::create ( const SharedPtr< const Filter< T > > &  filter = SharedPtr<const Filter<T> >()) [inline, static]
template<class T >
virtual bool Tp::NotFilter< T >::isValid ( ) const [inline, virtual]

Reimplemented from Tp::Filter< T >.

template<class T >
virtual bool Tp::NotFilter< T >::matches ( const SharedPtr< T > &  t) const [inline, virtual]

Reimplemented from Tp::Filter< T >.

template<class T >
SharedPtr<const Filter<T> > Tp::NotFilter< T >::filter ( ) const [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00005.html0000644000175200001440000001214112000060453021611 0ustar00collabora-develusers00000000000000 accounts/account-item.h
   Home · All Classes · All Namespaces · Modules · Functions · Files
accounts/account-item.h
#ifndef _TelepathyQt_examples_accounts_account_item_h_HEADER_GUARD_
#define _TelepathyQt_examples_accounts_account_item_h_HEADER_GUARD_

#include <TelepathyQt/Types>
#include <TelepathyQt/Account>
#include <TelepathyQt/Types>

#include <QString>

namespace Tp {
class AccountManager;
class PendingOperation;
}

class QTableWidget;

class AccountItem : public QObject
{
    Q_OBJECT

public:
    enum Columns {
        ColumnValid = 0,
        ColumnEnabled,
        ColumnConnectionManager,
        ColumnProtocol,
        ColumnDisplayName,
        ColumnNickname,
        ColumnConnectsAutomatically,
        ColumnChangingPresence,
        ColumnAutomaticPresence,
        ColumnCurrentPresence,
        ColumnRequestedPresence,
        ColumnConnectionStatus,
        ColumnConnection,
        NumColumns
    };
    Q_ENUMS(Columns)

    AccountItem(Tp::AccountPtr acc, QTableWidget *table, int row, QObject *parent = 0);
    virtual ~AccountItem();

    int row() const { return mRow; }

private Q_SLOTS:
    void onValidityChanged(bool);
    void onStateChanged(bool);
    void onDisplayNameChanged(const QString &);
    void onNicknameChanged(const QString &);
    void onConnectsAutomaticallyPropertyChanged(bool);
    void onChangingPresenceChanged(bool);
    void onAutomaticPresenceChanged(const Tp::SimplePresence &);
    void onCurrentPresenceChanged(const Tp::SimplePresence &);
    void onRequestedPresenceChanged(const Tp::SimplePresence &);
    void onStatusChanged(Tp::ConnectionStatus, Tp::ConnectionStatusReason,
            const QString &error, const QVariantMap &errorDetails);
    void onHaveConnectionChanged(bool);

private:
    void init();
    void setupGui();

    Tp::AccountPtr mAcc;
    QTableWidget *mTable;
    int mRow;
};

#endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00646_source.html0000644000175200001440000001207712000060453023214 0ustar00collabora-develusers00000000000000 pending-debug-message-list.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
pending-debug-message-list.h
00001 
00021 #ifndef _TelepathyQt_pending_debug_message_list_h_HEADER_GUARD_
00022 #define _TelepathyQt_pending_debug_message_list_h_HEADER_GUARD_
00023 
00024 #ifndef IN_TP_QT_HEADER
00025 #error IN_TP_QT_HEADER
00026 #endif
00027 
00028 #include <TelepathyQt/Types>
00029 #include <TelepathyQt/PendingOperation>
00030 
00031 namespace Tp
00032 {
00033 
00034 class TP_QT_EXPORT PendingDebugMessageList : public Tp::PendingOperation
00035 {
00036     Q_OBJECT
00037     Q_DISABLE_COPY(PendingDebugMessageList)
00038 
00039 public:
00040     virtual ~PendingDebugMessageList();
00041 
00042     DebugMessageList result() const;
00043 
00044 private Q_SLOTS:
00045     TP_QT_NO_EXPORT void watcherFinished(QDBusPendingCallWatcher*);
00046 
00047 private:
00048     friend class DebugReceiver;
00049     TP_QT_NO_EXPORT PendingDebugMessageList(const QDBusPendingCall &call,
00050             const SharedPtr<RefCounted> &object);
00051 
00052     struct Private;
00053     friend struct Private;
00054     Private *mPriv;
00055 };
00056 
00057 } // Tp
00058 
00059 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01050.html0000644000175200001440000000601712000060453021617 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MediaStreamHandlerCodec Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00230.html0000644000175200001440000012571212000060453021622 0ustar00collabora-develusers00000000000000 Tp::FileTransferChannel Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The FileTransferChannel class represents a Telepathy channel of type FileTransfer. More...

#include <TelepathyQt/FileTransferChannel>

Inherits Tp::Channel.

Inherited by Tp::IncomingFileTransferChannel, and Tp::OutgoingFileTransferChannel.

List of all members.

Signals

Public Member Functions

Static Public Member Functions

Static Public Attributes

Protected Slots

Protected Member Functions


Detailed Description

The FileTransferChannel class represents a Telepathy channel of type FileTransfer.

For more specialized file transfer classes, please refer to OutgoingFileTransferChannel and IncomingFileTransferChannel.

For more details, please refer to Telepathy specification.

See Asynchronous Object Model, Shared Pointer Usage


Constructor & Destructor Documentation

Class destructor.

Tp::FileTransferChannel::FileTransferChannel ( const ConnectionPtr &  connection,
const QString &  objectPath,
const QVariantMap &  immutableProperties,
const Feature coreFeature = FileTransferChannel::FeatureCore 
) [protected]

Construct a new FileTransferChannel object.

Parameters:
connectionConnection owning this channel, and specifying the service.
objectPathThe channel object path.
immutablePropertiesThe channel immutable properties.
coreFeatureThe core feature of the channel type, if any. The corresponding introspectable should depend on FileTransferChannel::FeatureCore.

Member Function Documentation

FileTransferChannelPtr Tp::FileTransferChannel::create ( const ConnectionPtr &  connection,
const QString &  objectPath,
const QVariantMap &  immutableProperties 
) [static]

Create a new FileTransferChannel object.

Parameters:
connectionConnection owning this channel, and specifying the service.
objectPathThe channel object path.
immutablePropertiesThe channel immutable properties.
Returns:
A FileTransferChannelPtr object pointing to the newly created FileTransferChannel object.

Reimplemented from Tp::Channel.

Reimplemented in Tp::IncomingFileTransferChannel, and Tp::OutgoingFileTransferChannel.

Return the state of the file transfer as described by FileTransferState.

Change notification is via the stateChanged() signal.

This method requires FileTransferChannel::FeatureCore to be ready.

Returns:
The state as FileTransferState.
See also:
stateReason()

Return the reason for the state change as described by the FileTransferStateChangeReason.

Change notification is via the stateChanged() signal.

This method requires FileTransferChannel::FeatureCore to be ready.

Returns:
The state reason as FileTransferStateChangeReason.
See also:
state()

Return the name of the file on the sender's side. This is given as a suggested filename for the receiver.

This property should be the basename of the file being sent. For example, if the sender sends the file /home/user/monkey.pdf then this property should be set to monkey.pdf.

This property cannot change once the channel has been created.

This method requires FileTransferChannel::FeatureCore to be ready.

Returns:
The suggested filename for the receiver.

Return the file's MIME type.

This property cannot change once the channel has been created.

This method requires FileTransferChannel::FeatureCore to be ready.

Returns:
The file's MIME type.
qulonglong Tp::FileTransferChannel::size ( ) const

Return the size of the file.

Note that the size is not guaranteed to be exactly right for incoming files. This is merely a hint and should not be used to know when the transfer finished.

For unknown sizes the return value can be UINT64_MAX.

This property cannot change once the channel has been created.

This method requires FileTransferChannel::FeatureCore to be ready.

Returns:
The file size.
QString Tp::FileTransferChannel::uri ( ) const

Return the URI of the file.

On outgoing file transfers, this property cannot change after the channel is requested. For incoming file transfers, this property may be set by the channel handler before calling AcceptFile to inform observers where the incoming file will be saved. When the URI property is set, the signal IncomingFileTransferChannel::uriDefined() is emitted.

This method requires FileTransferChannel::FeatureCore to be ready.

Returns:
The file uri.
See also:
IncomingFileTransferChannel::uriDefined()

Return the type of the contentHash().

This method requires FileTransferChannel::FeatureCore to be ready.

Returns:
The content hash type as FileHashType.
See also:
contentHash()

Return the hash of the contents of the file transfer, of type described in the value of the contentHashType().

Its value MUST correspond to the appropriate type of the contentHashType(). If the contentHashType() is set to FileHashTypeNone, then the returned value is an empty string.

This method requires FileTransferChannel::FeatureCore to be ready.

Returns:
The hash of the contents.
See also:
contentHashType()

Return the description of the file transfer.

This property cannot change once the channel has been created.

This method requires FileTransferChannel::FeatureCore to be ready.

Returns:
The description.

Return the last modification time of the file being transferred. This cannot change once the channel has been created.

This method requires FileTransferChannel::FeatureCore to be ready.

Returns:
The file modification time as QDateTime.

Return the offset in bytes from which the file will be sent.

This method requires FileTransferChannel::FeatureCore to be ready.

Returns:
The offset in bytes.
See also:
initialOffsetDefined()

Return the number of bytes that have been transferred.

Change notification is via the transferredBytesChanged() signal.

This method requires FileTransferChannel::FeatureCore to be ready.

Returns:
The number of bytes.
See also:
transferredBytesChanged()

Cancel a file transfer.

Returns:
A PendingOperation object which will emit PendingOperation::finished when the call has finished.

Emitted when the value of state() changes.

Parameters:
stateThe new state of this file transfer channel.
reasonThe reason for the change of state.
See also:
state()
void Tp::FileTransferChannel::initialOffsetDefined ( qulonglong  initialOffset) [signal]

Emitted when the initial offset for the file transfer is defined.

Parameters:
initialOffsetThe new initial offset for the file transfer.
See also:
initialOffset()
void Tp::FileTransferChannel::transferredBytesChanged ( qulonglong  count) [signal]

Emitted when the value of transferredBytes() changes.

Parameters:
countThe new number of bytes transferred.
See also:
transferredBytes()

Return a mapping from address types (members of SocketAddressType) to arrays of access-control type (members of SocketAccessControl) that the CM supports for sockets with that address type.

For simplicity, if a CM supports offering a particular type of file transfer, it is assumed to support accepting it. All CMs support at least SocketAddressTypeIPv4.

This method requires FileTransferChannel::FeatureCore to be ready.

Returns:
The available socket types as a map from address types to arrays of access-control type.
void Tp::FileTransferChannel::connectToHost ( ) [protected, virtual]

Protected virtual method called when the state becomes FileTransferStateOpen.

Specialized classes should reimplement this method and call setConnected() when the connection is established.

See also:
setConnected()
bool Tp::FileTransferChannel::isConnected ( ) const [protected]

Return whether a connection has been established.

Returns:
true if the connections has been established, false otherwise.
See also:
setConnected()

Indicate whether a connection has been established.

Specialized classes that reimplement connectToHost() must call this method once the connection has been established or setFinished() if an error occurred.

See also:
isConnected(), connectToHost(), setFinished()
bool Tp::FileTransferChannel::isFinished ( ) const [protected]

Return whether sending/receiving has finished.

Returns:
true if sending/receiving has finished, false otherwise.
void Tp::FileTransferChannel::setFinished ( ) [protected, virtual]

Protected virtual method called when an error occurred and the transfer should finish.

Specialized classes should reimplement this method and close the IO devices and do all the needed cleanup.

Note that for specialized classes that reimplement connectToHost() and set isConnected() to true, the state will not change to FileTransferStateCompleted once the state change is received.

When finished sending/receiving the specialized class MUST call this method and then the state will change to the latest pending state.

void Tp::FileTransferChannel::onUriDefined ( const QString &  uri) [protected, slot]

Member Data Documentation

Feature representing the core that needs to become ready to make the FileTransferChannel object usable.

Note that this feature must be enabled in order to use most FileTransferChannel methods. See specific methods documentation for more details.

When calling isReady(), becomeReady(), this feature is implicitly added to the requested features.

Reimplemented from Tp::Channel.

Reimplemented in Tp::IncomingFileTransferChannel, and Tp::OutgoingFileTransferChannel.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00189.html0000644000175200001440000001753512000060453021642 0ustar00collabora-develusers00000000000000 Tp::ConnectionManagerLowlevel Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ConnectionManagerLowlevel Class Reference

The ConnectionManagerLowlevel class extends ConnectionManager with support to low-level features. More...

#include <TelepathyQt/ConnectionManagerLowlevel>

Inherits Tp::RefCounted.

List of all members.

Public Member Functions


Detailed Description

The ConnectionManagerLowlevel class extends ConnectionManager with support to low-level features.


Constructor & Destructor Documentation


Member Function Documentation

ConnectionManagerPtr Tp::ConnectionManagerLowlevel::connectionManager ( ) const
PendingConnection * Tp::ConnectionManagerLowlevel::requestConnection ( const QString &  protocol,
const QVariantMap &  parameters 
)

Request a Connection object representing a given account on a given protocol with the given parameters.

Return a pending operation representing the Connection object which will succeed when the connection has been created or fail if an error occurred.

Parameters:
protocolName of the protocol to create the account for.
parametersAccount parameters.
Returns:
A PendingOperation which will emit PendingConnection::finished when the account has been created of failed its creation process.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00614_source.html0000644000175200001440000002116112000060453023201 0ustar00collabora-develusers00000000000000 not-filter.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
not-filter.h
00001 
00023 #ifndef _TelepathyQt_not_filter_h_HEADER_GUARD_
00024 #define _TelepathyQt_not_filter_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Filter>
00031 #include <TelepathyQt/Types>
00032 
00033 namespace Tp
00034 {
00035 
00036 template <class T>
00037 class NotFilter : public Filter<T>
00038 {
00039 public:
00040     static SharedPtr<NotFilter<T> > create(
00041             const SharedPtr<const Filter<T> > &filter = SharedPtr<const Filter<T> >())
00042     {
00043         return SharedPtr<NotFilter<T> >(new NotFilter<T>(filter));
00044     }
00045 
00046     inline virtual ~NotFilter() { }
00047 
00048     inline virtual bool isValid() const
00049     {
00050         return mFilter && mFilter->isValid();
00051     }
00052 
00053     inline virtual bool matches(const SharedPtr<T> &t) const
00054     {
00055         if (!isValid()) {
00056             return false;
00057         }
00058 
00059         return !mFilter->matches(t);
00060     }
00061 
00062     inline SharedPtr<const Filter<T> > filter() const { return mFilter; }
00063 
00064 private:
00065     NotFilter(const SharedPtr<const Filter<T> > &filter)
00066         : Filter<T>(), mFilter(filter) { }
00067 
00068     SharedPtr<const Filter<T> > mFilter;
00069 };
00070 
00071 } // Tp
00072 
00073 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00963.html0000644000175200001440000000502712000060453021633 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::CallMemberMap Member List
This is the complete list of members for Tp::CallMemberMap, including all inherited members.
CallMemberMap()Tp::CallMemberMap [inline]
CallMemberMap(const QMap< uint, uint > &a)Tp::CallMemberMap [inline]
operator=(const QMap< uint, uint > &a)Tp::CallMemberMap [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00731.html0000644000175200001440000000330512000060453021621 0ustar00collabora-develusers00000000000000 Tp::KeyFile Namespace Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::KeyFile Namespace Reference


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00612_source.html0000644000175200001440000004236512000060453023210 0ustar00collabora-develusers00000000000000 method-invocation-context.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
method-invocation-context.h
00001 
00023 #ifndef _TelepathyQt_method_invocation_context_h_HEADER_GUARD_
00024 #define _TelepathyQt_method_invocation_context_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <QtDBus>
00031 #include <QtCore>
00032 
00033 namespace Tp
00034 {
00035 
00036 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00037 
00038 namespace MethodInvocationContextTypes
00039 {
00040 
00041 struct Nil
00042 {
00043 };
00044 
00045 template<int Index,
00046          typename T1, typename T2, typename T3, typename T4,
00047          typename T5, typename T6, typename T7, typename T8>
00048 struct Select
00049 {
00050     typedef Select<Index - 1, T2, T3, T4, T5, T6, T7, T8, Nil> Next;
00051     typedef typename Next::Type Type;
00052 };
00053 template<typename T1, typename T2, typename T3, typename T4,
00054          typename T5, typename T6, typename T7, typename T8>
00055 struct Select<0, T1, T2, T3, T4, T5, T6, T7, T8>
00056 {
00057     typedef T1 Type;
00058 };
00059 
00060 template<typename T1, typename T2, typename T3, typename T4,
00061          typename T5, typename T6, typename T7, typename T8>
00062 struct ForEach
00063 {
00064     typedef ForEach<T2, T3, T4, T5, T6, T7, T8, Nil> Next;
00065     enum { Total = Next::Total + 1 };
00066 };
00067 template<>
00068 struct ForEach<Nil, Nil, Nil, Nil, Nil, Nil, Nil, Nil>
00069 {
00070     enum { Total = 0 };
00071 };
00072 
00073 }
00074 
00075 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
00076 
00077 template<typename T1 = MethodInvocationContextTypes::Nil, typename T2 = MethodInvocationContextTypes::Nil,
00078          typename T3 = MethodInvocationContextTypes::Nil, typename T4 = MethodInvocationContextTypes::Nil,
00079          typename T5 = MethodInvocationContextTypes::Nil, typename T6 = MethodInvocationContextTypes::Nil,
00080          typename T7 = MethodInvocationContextTypes::Nil, typename T8 = MethodInvocationContextTypes::Nil>
00081 class MethodInvocationContext : public RefCounted
00082 {
00083 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00084     template<int Index>
00085     struct Select : MethodInvocationContextTypes::Select<Index, T1, T2, T3, T4, T5, T6, T7, T8>
00086     {
00087     };
00088 
00089     typedef MethodInvocationContextTypes::ForEach<T1, T2, T3, T4, T5, T6, T7, T8> ForEach;
00090     enum { Count = ForEach::Total };
00091 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
00092 
00093 public:
00094     MethodInvocationContext(const QDBusConnection &bus, const QDBusMessage &message)
00095         : mBus(bus), mMessage(message), mFinished(false)
00096     {
00097         mMessage.setDelayedReply(true);
00098     }
00099 
00100     virtual ~MethodInvocationContext()
00101     {
00102         if (!mFinished) {
00103             setFinishedWithError(QString(), QString());
00104         }
00105     }
00106 
00107     bool isFinished() const { return mFinished; }
00108     bool isError() const { return !mErrorName.isEmpty(); }
00109     QString errorName() const { return mErrorName; }
00110     QString errorMessage() const { return mErrorMessage; }
00111 
00112     void setFinished(const T1 &t1 = T1(), const T2 &t2 = T2(), const T3 &t3 = T3(),
00113                      const T4 &t4 = T4(), const T5 &t5 = T5(), const T6 &t6 = T6(),
00114                      const T7 &t7 = T7(), const T8 &t8 = T8())
00115     {
00116         if (mFinished) {
00117             return;
00118         }
00119 
00120         mFinished = true;
00121 
00122         setReplyValue(0, qVariantFromValue(t1));
00123         setReplyValue(1, qVariantFromValue(t2));
00124         setReplyValue(2, qVariantFromValue(t3));
00125         setReplyValue(3, qVariantFromValue(t4));
00126         setReplyValue(4, qVariantFromValue(t5));
00127         setReplyValue(5, qVariantFromValue(t6));
00128         setReplyValue(6, qVariantFromValue(t7));
00129         setReplyValue(7, qVariantFromValue(t8));
00130 
00131         if (mReply.isEmpty()) {
00132             mBus.send(mMessage.createReply());
00133         } else {
00134             mBus.send(mMessage.createReply(mReply));
00135         }
00136         onFinished();
00137     }
00138 
00139     void setFinishedWithError(const QString &errorName,
00140             const QString &errorMessage)
00141     {
00142         if (mFinished) {
00143             return;
00144         }
00145 
00146         mFinished = true;
00147 
00148         if (errorName.isEmpty()) {
00149             mErrorName = QLatin1String("org.freedesktop.Telepathy.Qt.ErrorHandlingError");
00150         } else {
00151             mErrorName = errorName;
00152         }
00153         mErrorMessage = errorMessage;
00154 
00155         mBus.send(mMessage.createErrorReply(mErrorName, mErrorMessage));
00156         onFinished();
00157     }
00158 
00159     template<int Index> inline
00160     typename Select<Index>::Type argumentAt() const
00161     {
00162         Q_ASSERT(Index >= 0 && Index < Count);
00163         return qdbus_cast<typename Select<Index>::Type>(mReply.value(Index));
00164     }
00165 
00166 protected:
00167     virtual void onFinished() {}
00168 
00169 private:
00170     Q_DISABLE_COPY(MethodInvocationContext)
00171 
00172     void setReplyValue(int index, const QVariant &value)
00173     {
00174         if (index >= Count) {
00175             return;
00176         }
00177         mReply.insert(index, value);
00178     }
00179 
00180     QDBusConnection mBus;
00181     QDBusMessage mMessage;
00182     bool mFinished;
00183     QList<QVariant> mReply;
00184     QString mErrorName;
00185     QString mErrorMessage;
00186 };
00187 
00188 } // Tp
00189 
00190 Q_DECLARE_METATYPE(Tp::MethodInvocationContextTypes::Nil)
00191 
00192 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01068.html0000644000175200001440000002043112000060453021624 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::CallContentMediaDescriptionInterfaceRTCPFeedbackInterface Member List
This is the complete list of members for Tp::Client::CallContentMediaDescriptionInterfaceRTCPFeedbackInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
CallContentMediaDescriptionInterfaceRTCPFeedbackInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::CallContentMediaDescriptionInterfaceRTCPFeedbackInterface
CallContentMediaDescriptionInterfaceRTCPFeedbackInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::CallContentMediaDescriptionInterfaceRTCPFeedbackInterface
CallContentMediaDescriptionInterfaceRTCPFeedbackInterface(Tp::DBusProxy *proxy)Tp::Client::CallContentMediaDescriptionInterfaceRTCPFeedbackInterface
CallContentMediaDescriptionInterfaceRTCPFeedbackInterface(const Tp::Client::CallContentMediaDescriptionInterface &mainInterface)Tp::Client::CallContentMediaDescriptionInterfaceRTCPFeedbackInterface [explicit]
CallContentMediaDescriptionInterfaceRTCPFeedbackInterface(const Tp::Client::CallContentMediaDescriptionInterface &mainInterface, QObject *parent)Tp::Client::CallContentMediaDescriptionInterfaceRTCPFeedbackInterface
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::CallContentMediaDescriptionInterfaceRTCPFeedbackInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::CallContentMediaDescriptionInterfaceRTCPFeedbackInterface [inline]
requestPropertyDoesAVPF() const Tp::Client::CallContentMediaDescriptionInterfaceRTCPFeedbackInterface [inline]
requestPropertyFeedbackMessages() const Tp::Client::CallContentMediaDescriptionInterfaceRTCPFeedbackInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::CallContentMediaDescriptionInterfaceRTCPFeedbackInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00511_source.html0000644000175200001440000001256512000060453023205 0ustar00collabora-develusers00000000000000 cli-debug-receiver-body.hpp Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-debug-receiver-body.hpp
00001 #define IN_TP_QT_HEADER
00002 #include "TelepathyQt/debug-receiver.h"
00003 
00004 namespace Tp
00005 {
00006 namespace Client
00007 {
00008 
00009 DebugInterface::DebugInterface(const QString& busName, const QString& objectPath, QObject *parent)
00010     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00011 {
00012 }
00013 
00014 DebugInterface::DebugInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00015     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00016 {
00017 }
00018 
00019 DebugInterface::DebugInterface(Tp::DBusProxy *proxy)
00020     : Tp::AbstractInterface(proxy, staticInterfaceName())
00021 {
00022 }
00023 
00024 void DebugInterface::invalidate(Tp::DBusProxy *proxy,
00025         const QString &error, const QString &message)
00026 {
00027     disconnect(this, SIGNAL(NewDebugMessage(double, const QString&, uint, const QString&)), NULL, NULL);
00028 
00029     Tp::AbstractInterface::invalidate(proxy, error, message);
00030 }
00031 }
00032 }


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00101.html0000644000175200001440000000705712000060453021620 0ustar00collabora-develusers00000000000000 Tp::CapabilityPair Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::CapabilityPair Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

A pair (channel type, type-specific flags) as passed to AdvertiseCapabilities on the Capabilities interface.


Member Data Documentation


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00480_source.html0000644000175200001440000007765612000060453023226 0ustar00collabora-develusers00000000000000 channel.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
channel.h
00001 
00023 #ifndef _TelepathyQt_channel_h_HEADER_GUARD_
00024 #define _TelepathyQt_channel_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/_gen/cli-channel.h>
00031 
00032 #include <TelepathyQt/Constants>
00033 #include <TelepathyQt/DBus>
00034 #include <TelepathyQt/DBusProxy>
00035 #include <TelepathyQt/OptionalInterfaceFactory>
00036 #include <TelepathyQt/ReadinessHelper>
00037 #include <TelepathyQt/SharedPtr>
00038 #include <TelepathyQt/Types>
00039 
00040 #include <QSet>
00041 #include <QSharedDataPointer>
00042 #include <QVariantMap>
00043 
00044 namespace Tp
00045 {
00046 
00047 class Connection;
00048 class PendingOperation;
00049 class PendingReady;
00050 
00051 class TP_QT_EXPORT Channel : public StatefulDBusProxy,
00052                 public OptionalInterfaceFactory<Channel>
00053 {
00054     Q_OBJECT
00055     Q_DISABLE_COPY(Channel)
00056 
00057 public:
00058     static const Feature FeatureCore;
00059     static const Feature FeatureConferenceInitialInviteeContacts;
00060 
00061     static ChannelPtr create(const ConnectionPtr &connection,
00062             const QString &objectPath, const QVariantMap &immutableProperties);
00063 
00064     virtual ~Channel();
00065 
00066     ConnectionPtr connection() const;
00067 
00068     QVariantMap immutableProperties() const;
00069 
00070     QString channelType() const;
00071 
00072     HandleType targetHandleType() const;
00073     uint targetHandle() const;
00074     QString targetId() const;
00075     ContactPtr targetContact() const;
00076 
00077     bool isRequested() const;
00078     ContactPtr initiatorContact() const;
00079 
00080     PendingOperation *requestClose();
00081     PendingOperation *requestLeave(const QString &message = QString(),
00082             ChannelGroupChangeReason reason = ChannelGroupChangeReasonNone);
00083 
00084     ChannelGroupFlags groupFlags() const;
00085 
00086     bool groupCanAddContacts() const;
00087     bool groupCanAddContactsWithMessage() const;
00088     bool groupCanAcceptContactsWithMessage() const;
00089     PendingOperation *groupAddContacts(const QList<ContactPtr> &contacts,
00090             const QString &message = QString());
00091     bool groupCanRescindContacts() const;
00092     bool groupCanRescindContactsWithMessage() const;
00093     bool groupCanRemoveContacts() const;
00094     bool groupCanRemoveContactsWithMessage() const;
00095     bool groupCanRejectContactsWithMessage() const;
00096     bool groupCanDepartWithMessage() const;
00097     PendingOperation *groupRemoveContacts(const QList<ContactPtr> &contacts,
00098             const QString &message = QString(),
00099             ChannelGroupChangeReason reason = ChannelGroupChangeReasonNone);
00100 
00101     Contacts groupContacts(bool includeSelfContact = true) const;
00102     Contacts groupLocalPendingContacts(bool includeSelfContact = true) const;
00103     Contacts groupRemotePendingContacts(bool includeSelfContact = true) const;
00104 
00105     class GroupMemberChangeDetails
00106     {
00107     public:
00108         GroupMemberChangeDetails();
00109         GroupMemberChangeDetails(const GroupMemberChangeDetails &other);
00110         ~GroupMemberChangeDetails();
00111 
00112         GroupMemberChangeDetails &operator=(const GroupMemberChangeDetails &other);
00113 
00114         bool isValid() const { return mPriv.constData() != 0; }
00115 
00116         bool hasActor() const;
00117         ContactPtr actor() const;
00118 
00119         bool hasReason() const { return allDetails().contains(QLatin1String("change-reason")); }
00120         ChannelGroupChangeReason reason() const { return (ChannelGroupChangeReason) qdbus_cast<uint>(allDetails().value(QLatin1String("change-reason"))); }
00121 
00122         bool hasMessage() const { return allDetails().contains(QLatin1String("message")); }
00123         QString message () const { return qdbus_cast<QString>(allDetails().value(QLatin1String("message"))); }
00124 
00125         bool hasError() const { return allDetails().contains(QLatin1String("error")); }
00126         QString error() const { return qdbus_cast<QString>(allDetails().value(QLatin1String("error"))); }
00127 
00128         bool hasDebugMessage() const { return allDetails().contains(QLatin1String("debug-message")); }
00129         QString debugMessage() const { return qdbus_cast<QString>(allDetails().value(QLatin1String("debug-message"))); }
00130 
00131         QVariantMap allDetails() const;
00132 
00133     private:
00134         friend class Channel;
00135         friend class Contact;
00136         friend class ContactManager;
00137 
00138         TP_QT_NO_EXPORT GroupMemberChangeDetails(const ContactPtr &actor, const QVariantMap &details);
00139 
00140         struct Private;
00141         friend struct Private;
00142         QSharedDataPointer<Private> mPriv;
00143     };
00144 
00145     GroupMemberChangeDetails groupLocalPendingContactChangeInfo(const ContactPtr &contact) const;
00146     GroupMemberChangeDetails groupSelfContactRemoveInfo() const;
00147 
00148     bool groupAreHandleOwnersAvailable() const;
00149     HandleOwnerMap groupHandleOwners() const;
00150 
00151     bool groupIsSelfContactTracked() const;
00152     ContactPtr groupSelfContact() const;
00153 
00154     bool isConference() const;
00155     Contacts conferenceInitialInviteeContacts() const;
00156     QList<ChannelPtr> conferenceChannels() const;
00157     QList<ChannelPtr> conferenceInitialChannels() const;
00158     QHash<uint, ChannelPtr> conferenceOriginalChannels() const;
00159 
00160     bool supportsConferenceMerging() const;
00161     PendingOperation *conferenceMergeChannel(const ChannelPtr &channel);
00162 
00163     bool supportsConferenceSplitting() const;
00164     PendingOperation *conferenceSplitChannel();
00165 
00166 Q_SIGNALS:
00167     void groupFlagsChanged(Tp::ChannelGroupFlags flags,
00168             Tp::ChannelGroupFlags added, Tp::ChannelGroupFlags removed);
00169 
00170     void groupCanAddContactsChanged(bool canAddContacts);
00171     void groupCanRemoveContactsChanged(bool canRemoveContacts);
00172     void groupCanRescindContactsChanged(bool canRescindContacts);
00173 
00174     void groupMembersChanged(
00175             const Tp::Contacts &groupMembersAdded,
00176             const Tp::Contacts &groupLocalPendingMembersAdded,
00177             const Tp::Contacts &groupRemotePendingMembersAdded,
00178             const Tp::Contacts &groupMembersRemoved,
00179             const Tp::Channel::GroupMemberChangeDetails &details);
00180 
00181     void groupHandleOwnersChanged(const Tp::HandleOwnerMap &owners,
00182             const Tp::UIntList &added, const Tp::UIntList &removed);
00183 
00184     void groupSelfContactChanged();
00185 
00186     void conferenceChannelMerged(const Tp::ChannelPtr &channel);
00187     void conferenceChannelRemoved(const Tp::ChannelPtr &channel,
00188             const Tp::Channel::GroupMemberChangeDetails &details);
00189 
00190 protected:
00191     Channel(const ConnectionPtr &connection,const QString &objectPath,
00192             const QVariantMap &immutableProperties, const Feature &coreFeature);
00193 
00194     Client::ChannelInterface *baseInterface() const;
00195 
00196     bool groupSelfHandleIsLocalPending() const;
00197 
00198 protected Q_SLOTS:
00199     PendingOperation *groupAddSelfHandle();
00200 
00201 private Q_SLOTS:
00202     TP_QT_NO_EXPORT void gotMainProperties(QDBusPendingCallWatcher *watcher);
00203     TP_QT_NO_EXPORT void gotChannelType(QDBusPendingCallWatcher *watcher);
00204     TP_QT_NO_EXPORT void gotHandle(QDBusPendingCallWatcher *watcher);
00205     TP_QT_NO_EXPORT void gotInterfaces(QDBusPendingCallWatcher *watcher);
00206     TP_QT_NO_EXPORT void onClosed();
00207 
00208     TP_QT_NO_EXPORT void onConnectionReady(Tp::PendingOperation *op);
00209     TP_QT_NO_EXPORT void onConnectionInvalidated();
00210 
00211     TP_QT_NO_EXPORT void gotGroupProperties(QDBusPendingCallWatcher *watcher);
00212     TP_QT_NO_EXPORT void gotGroupFlags(QDBusPendingCallWatcher *watcher);
00213     TP_QT_NO_EXPORT void gotAllMembers(QDBusPendingCallWatcher *watcher);
00214     TP_QT_NO_EXPORT void gotLocalPendingMembersWithInfo(QDBusPendingCallWatcher *watcher);
00215     TP_QT_NO_EXPORT void gotSelfHandle(QDBusPendingCallWatcher *watcher);
00216     TP_QT_NO_EXPORT void gotContacts(Tp::PendingOperation *op);
00217 
00218     TP_QT_NO_EXPORT void onGroupFlagsChanged(uint added, uint removed);
00219     TP_QT_NO_EXPORT void onMembersChanged(const QString &message,
00220             const Tp::UIntList &added, const Tp::UIntList &removed,
00221             const Tp::UIntList &localPending, const Tp::UIntList &remotePending,
00222             uint actor, uint reason);
00223     TP_QT_NO_EXPORT void onMembersChangedDetailed(
00224             const Tp::UIntList &added, const Tp::UIntList &removed,
00225             const Tp::UIntList &localPending, const Tp::UIntList &remotePending,
00226             const QVariantMap &details);
00227     TP_QT_NO_EXPORT void onHandleOwnersChanged(const Tp::HandleOwnerMap &added, const Tp::UIntList &removed);
00228     TP_QT_NO_EXPORT void onSelfHandleChanged(uint selfHandle);
00229 
00230     TP_QT_NO_EXPORT void gotConferenceProperties(QDBusPendingCallWatcher *watcher);
00231     TP_QT_NO_EXPORT void gotConferenceInitialInviteeContacts(Tp::PendingOperation *op);
00232     TP_QT_NO_EXPORT void onConferenceChannelMerged(const QDBusObjectPath &channel, uint channelSpecificHandle,
00233             const QVariantMap &properties);
00234     TP_QT_NO_EXPORT void onConferenceChannelMerged(const QDBusObjectPath &channel);
00235     TP_QT_NO_EXPORT void onConferenceChannelRemoved(const QDBusObjectPath &channel, const QVariantMap &details);
00236     TP_QT_NO_EXPORT void onConferenceChannelRemoved(const QDBusObjectPath &channel);
00237     TP_QT_NO_EXPORT void gotConferenceChannelRemovedActorContact(Tp::PendingOperation *op);
00238 
00239 private:
00240     class PendingLeave;
00241     friend class PendingLeave;
00242 
00243     struct Private;
00244     friend struct Private;
00245     Private *mPriv;
00246 };
00247 
00248 } // Tp
00249 
00250 Q_DECLARE_METATYPE(Tp::Channel::GroupMemberChangeDetails);
00251 
00252 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01102.html0000644000175200001440000002333512000060453021617 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelTypeContactSearchInterface Member List
This is the complete list of members for Tp::Client::ChannelTypeContactSearchInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ChannelTypeContactSearchInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelTypeContactSearchInterface
ChannelTypeContactSearchInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelTypeContactSearchInterface
ChannelTypeContactSearchInterface(Tp::DBusProxy *proxy)Tp::Client::ChannelTypeContactSearchInterface
ChannelTypeContactSearchInterface(const Tp::Client::ChannelInterface &mainInterface)Tp::Client::ChannelTypeContactSearchInterface [explicit]
ChannelTypeContactSearchInterface(const Tp::Client::ChannelInterface &mainInterface, QObject *parent)Tp::Client::ChannelTypeContactSearchInterface
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ChannelTypeContactSearchInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
More(int timeout=-1)Tp::Client::ChannelTypeContactSearchInterface [inline, slot]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ChannelTypeContactSearchInterface [inline]
requestPropertyAvailableSearchKeys() const Tp::Client::ChannelTypeContactSearchInterface [inline]
requestPropertyLimit() const Tp::Client::ChannelTypeContactSearchInterface [inline]
requestPropertySearchState() const Tp::Client::ChannelTypeContactSearchInterface [inline]
requestPropertyServer() const Tp::Client::ChannelTypeContactSearchInterface [inline]
Search(const Tp::ContactSearchMap &terms, int timeout=-1)Tp::Client::ChannelTypeContactSearchInterface [inline, slot]
SearchResultReceived(const Tp::ContactSearchResultMap &result)Tp::Client::ChannelTypeContactSearchInterface [signal]
SearchStateChanged(uint state, const QString &error, const QVariantMap &details)Tp::Client::ChannelTypeContactSearchInterface [signal]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ChannelTypeContactSearchInterface [inline, static]
Stop(int timeout=-1)Tp::Client::ChannelTypeContactSearchInterface [inline, slot]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00762.html0000644000175200001440000001201312000060453021621 0ustar00collabora-develusers00000000000000 Mapping types
   Home · All Classes · All Namespaces · Modules · Functions · Files


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00865.html0000644000175200001440000000646712000060453021645 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MemberFunctor3< R, T, Arg1, Arg2, Arg3 > Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00181.html0000644000175200001440000005233112000060453021623 0ustar00collabora-develusers00000000000000 Tp::Client::ConnectionInterfacePowerSavingInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfacePowerSavingInterface Class Reference

#include <TelepathyQt/Connection>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Connection.Interface.PowerSaving".


Constructor & Destructor Documentation

Tp::Client::ConnectionInterfacePowerSavingInterface::ConnectionInterfacePowerSavingInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfacePowerSavingInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ConnectionInterfacePowerSavingInterface::ConnectionInterfacePowerSavingInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfacePowerSavingInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ConnectionInterfacePowerSavingInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ConnectionInterfacePowerSavingInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ConnectionInterfacePowerSavingInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Connection.Interface.PowerSaving", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property PowerSavingActive of type bool.

True if protocol-level power saving features are currently activated. This property can be changed using the SetPowerSaving() method; change notifications is via the PowerSavingChanged() signal.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::ConnectionInterfacePowerSavingInterface::SetPowerSaving ( bool  activate,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method SetPowerSaving on the remote object.

Turn power saving mode on or off.

Depending on the device's activity level, the connection can have its power saving mode turned on or off.

Errors raised by this method indicate that power saving could not be enabled, which SHOULD NOT generally be treated as fatal.

If the CM cannot switch modes, either because of the protocol (NotImplemented), or because of the service (NotAvailable), Mission Control (or whoever manages this) should be made aware. The error could be ignored or, in the extreme, be fascist and disconnect the account.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
activateTrue if protocol-level power saving features should be activated; False if they should be de-activated.
timeoutThe timeout in milliseconds.

Represents the signal PowerSavingChanged on the remote object.

The PowerSavingActive property changed.
Parameters:
activeThe new state of the power saving feature.
void Tp::Client::ConnectionInterfacePowerSavingInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00083.html0000644000175200001440000012302712000060453021625 0ustar00collabora-develusers00000000000000 Tp::Client::CallContentInterfaceMediaInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::CallContentInterfaceMediaInterface Class Reference

#include <TelepathyQt/CallContent>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Call1.Content.Interface.Media".


Constructor & Destructor Documentation

Tp::Client::CallContentInterfaceMediaInterface::CallContentInterfaceMediaInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a CallContentInterfaceMediaInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::CallContentInterfaceMediaInterface::CallContentInterfaceMediaInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a CallContentInterfaceMediaInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a CallContentInterfaceMediaInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a CallContentInterfaceMediaInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a CallContentInterfaceMediaInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Call1.Content.Interface.Media", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property RemoteMediaDescriptions of type Tp::ContactMediaDescriptionPropertiesMap.

A map from contact handles to descriptions supported by that contact. Keys of this map will appear in at most one RemoteMembers. See RemoteContact for more details on how to map between MediaDescriptions and Streams.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property LocalMediaDescriptions of type Tp::ContactMediaDescriptionPropertiesMap.

A map from contact handles to the descriptions the local side responsed with.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property MediaDescriptionOffer of type Tp::MediaDescriptionOffer.

The object path to the current CallContentMediaDescriptionInterface object, its CallContentMediaDescriptionInterface::RemoteContact and a mapping of the MediaDescriptions properties. If the object path is "/" then there isn't an outstanding content description, and the mapping MUST be empty.

Having all CallContentMediaDescriptionInterface properties here saves a D-Bus round-trip - it shouldn't be necessary to get these properties from the Content MediaDescription object, in practice.

Change notification is via the NewMediaDescriptionOffer() and MediaDescriptionOfferDone() signals.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Packetization of type uint.

The packetization method in use for this content.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property CurrentDTMFEvent of type uchar.

The currently requested DTMF event (for state-recoverability of DTMFChangeRequested). Should be ignored if CurrentDTMFState is None.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property CurrentDTMFState of type uint.

The current DTMF state (for state-recoverability of DTMFChangeRequested).

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::CallContentInterfaceMediaInterface::UpdateLocalMediaDescription ( const QVariantMap &  mediaDescription,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method UpdateLocalMediaDescription on the remote object.

Update the local codec mapping and other interfaces of the MediaDescription. This method should only be used during an existing call to update the local media description. This may trigger a re-negotiation which may result in new new MediaDescriptionOffers if the "FurtherNegotiationRequired" property is TRUE. Otherwise, only parameters which strictly describe the media being sent can be changed.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
mediaDescriptionThe updated media description that the local side wants to use.
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::CallContentInterfaceMediaInterface::AcknowledgeDTMFChange ( uchar  event,
uint  state,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method AcknowledgeDTMFChange on the remote object.

Called by the streaming implementation in response to DTMFChangeRequested to confirm that it has started or stopped sending the event in question.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
eventThe event referred to in the corresponding DTMFChangeRequested signal.
stateEither Sending or None.
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::CallContentInterfaceMediaInterface::Fail ( const Tp::CallStateReason reason,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method Fail on the remote object.

Signal an unrecoverable error for this content, and remove it.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
reasonA reason struct describing the error.
timeoutThe timeout in milliseconds.
void Tp::Client::CallContentInterfaceMediaInterface::NewMediaDescriptionOffer ( const QDBusObjectPath &  mediaDescription,
const QVariantMap &  properties 
) [signal]

Represents the signal NewMediaDescriptionOffer on the remote object.

Emitted when a new CallContentMediaDescriptionInterface appears. The streaming >implementation MUST respond by calling the CallContentMediaDescriptionInterface::Accept() or CallContentMediaDescriptionInterface::Reject() method on the description object appeared.

Emission of this signal indicates that the MediaDescriptionOffer property has changed to (Description, Contact, MediaDescriptionProperties).

When the MediaDescriptionOffer has been dealt with then CallContentInterfaceMediaInterface::MediaDescriptionOfferDone() must be emitted before CallContentInterfaceMediaInterface::NewMediaDescriptionOffer() is emitted again.

Parameters:
mediaDescriptionThe object path of the new media description. This replaces any previous media description.
propertiesThe immutable properties of the remote media description. Having all the MediaDescription properties here saves a D-Bus round-trip - it shouldn't be necessary to get the properties from the MediaDescription object, in practice.

Represents the signal MediaDescriptionOfferDone on the remote object.

Emitted when a CallContentMediaDescriptionInterface has been handled.

Emission of this signal indicates that the MediaDescriptionOffer property has changed to ("/", 0, {}).

void Tp::Client::CallContentInterfaceMediaInterface::LocalMediaDescriptionChanged ( const QVariantMap &  updatedMediaDescription) [signal]

Represents the signal LocalMediaDescriptionChanged on the remote object.

Change notification for CallContentInterfaceMediaInterface::LocalMediaDescriptions

Parameters:
updatedMediaDescription

The local content description that was updated

Represents the signal RemoteMediaDescriptionsChanged on the remote object.

Change notification for CallContentInterfaceMediaInterface::RemoteMediaDescriptions

Parameters:
updatedMediaDescriptions

The remote content descriptions that were updated

Represents the signal MediaDescriptionsRemoved on the remote object.

Removal notification for CallContentInterfaceMediaInterface::RemoteMediaDescriptions and CallContentInterfaceMediaInterface::LocalMediaDescriptions

Parameters:
removedMediaDescriptions

The local and remote content descriptions that are no longer part of this content

void Tp::Client::CallContentInterfaceMediaInterface::DTMFChangeRequested ( uchar  event,
uint  state 
) [signal]

Represents the signal DTMFChangeRequested on the remote object.

Used by the CM to relay instructions from Channel.Interface.DTMF to the streaming implementation. If any contact in this call supports the telephone-event codec in their MediaDescription, this event should be sent as outlined in RFC 4733. Otherwise, it should be sent as an audible tone.

Parameters:
eventThe event to send (or stop sending).
stateEither Pending_Send or Pending_Stop_Sending.
void Tp::Client::CallContentInterfaceMediaInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00903.html0000644000175200001440000001173512000060453021630 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingDebugMessageList Member List
This is the complete list of members for Tp::PendingDebugMessageList, including all inherited members.
errorMessage() const Tp::PendingOperation
errorName() const Tp::PendingOperation
finished(Tp::PendingOperation *operation)Tp::PendingOperation [signal]
isError() const Tp::PendingOperation
isFinished() const Tp::PendingOperation
isValid() const Tp::PendingOperation
object() const Tp::PendingOperation [protected]
PendingOperation(const SharedPtr< RefCounted > &object)Tp::PendingOperation [protected]
result() const Tp::PendingDebugMessageList
setFinished()Tp::PendingOperation [protected, slot]
setFinishedWithError(const QString &name, const QString &message)Tp::PendingOperation [protected, slot]
setFinishedWithError(const QDBusError &error)Tp::PendingOperation [protected, slot]
~PendingDebugMessageList()Tp::PendingDebugMessageList [virtual]
~PendingOperation()Tp::PendingOperation [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00307.html0000644000175200001440000002275612000060453021633 0ustar00collabora-develusers00000000000000 Tp::PendingCaptchas Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingCaptchas Class Reference

The PendingCaptchas class represents an asynchronous operation for retrieving a captcha challenge from a connection manager. More...

#include <TelepathyQt/PendingCaptchas>

Inherits Tp::PendingOperation.

List of all members.

Public Member Functions


Detailed Description

The PendingCaptchas class represents an asynchronous operation for retrieving a captcha challenge from a connection manager.

See Asynchronous Object Model


Constructor & Destructor Documentation

Class destructor.


Member Function Documentation

Return the main captcha of the request. This captcha is guaranteed to be compatible with any constraint specified in CaptchaAuthentication::requestCaptchas().

This is a convenience method which should be used when requiresMultipleCaptchas() is false - otherwise, you should use captchaList.

The returned Captcha can be answered through CaptchaAuthentication::answer() by using its id.

This method will return a meaningful value only if the operation was completed successfully.

Returns:
The main captcha for the pending request.
See also:
captchaList() CaptchaAuthentication::requestCaptchas() requiresMultipleCaptchas() CaptchaAuthentication::answer()

Return all the captchas of the request. These captchas are guaranteed to be compatible with any constraint specified in CaptchaAuthentication::requestCaptchas().

If requiresMultipleCaptchas() is false, you probably want to use the convenience method captcha() instead.

The returned Captchas can be answered through CaptchaAuthentication::answer() by using their ids.

This method will return a meaningful value only if the operation was completed successfully.

Returns:
All the captchas for the pending request.
See also:
captcha() CaptchaAuthentication::requestCaptchas() requiresMultipleCaptchas() CaptchaAuthentication::answer()

Return whether this request requires more than one captcha to be answered or not.

This method should always be checked before answering to find out what the connection manager expects. Depending on the result, you might want to use the result from captcha() if just a single answer is required, or from captchaList() otherwise.

This method will return a meaningful value only if the operation was completed successfully.

Returns:
The main captcha for the pending request.
See also:
captcha() captchaList()


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00486_source.html0000644000175200001440000014225412000060453023217 0ustar00collabora-develusers00000000000000 cli-account.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-account.h
00001 /*
00002  * This file contains D-Bus client proxy classes generated by qt-client-gen.py.
00003  *
00004  * This file can be distributed under the same terms as the specification from
00005  * which it was generated.
00006  */
00007 
00008 #ifndef IN_TP_QT_HEADER
00009 #error IN_TP_QT_HEADER
00010 #endif
00011 
00012 #include <TelepathyQt/Types>
00013 
00014 #include <QtGlobal>
00015 
00016 #include <QString>
00017 #include <QObject>
00018 #include <QVariant>
00019 
00020 #include <QDBusPendingReply>
00021 
00022 #include <TelepathyQt/AbstractInterface>
00023 #include <TelepathyQt/DBusProxy>
00024 #include <TelepathyQt/Global>
00025 
00026 namespace Tp
00027 {
00028 class PendingVariant;
00029 class PendingOperation;
00030 }
00031 
00032 namespace Tp
00033 {
00034 namespace Client
00035 {
00036 
00044 class TP_QT_EXPORT AccountInterface : public Tp::AbstractInterface
00045 {
00046     Q_OBJECT
00047 
00048 public:
00055     static inline QLatin1String staticInterfaceName()
00056     {
00057         return QLatin1String("org.freedesktop.Telepathy.Account");
00058     }
00059 
00067     AccountInterface(
00068         const QString& busName,
00069         const QString& objectPath,
00070         QObject* parent = 0
00071     );
00072 
00081     AccountInterface(
00082         const QDBusConnection& connection,
00083         const QString& busName,
00084         const QString& objectPath,
00085         QObject* parent = 0
00086     );
00087 
00094     AccountInterface(Tp::DBusProxy *proxy);
00095 
00105     inline Tp::PendingVariant *requestPropertyInterfaces() const
00106     {
00107         return internalRequestProperty(QLatin1String("Interfaces"));
00108     }
00109 
00123     inline Tp::PendingVariant *requestPropertyDisplayName() const
00124     {
00125         return internalRequestProperty(QLatin1String("DisplayName"));
00126     }
00127 
00141     inline Tp::PendingOperation *setPropertyDisplayName(QString newValue)
00142     {
00143         return internalSetProperty(QLatin1String("DisplayName"), QVariant::fromValue(newValue));
00144     }
00145 
00158     inline Tp::PendingVariant *requestPropertyIcon() const
00159     {
00160         return internalRequestProperty(QLatin1String("Icon"));
00161     }
00162 
00175     inline Tp::PendingOperation *setPropertyIcon(QString newValue)
00176     {
00177         return internalSetProperty(QLatin1String("Icon"), QVariant::fromValue(newValue));
00178     }
00179 
00199     inline Tp::PendingVariant *requestPropertyValid() const
00200     {
00201         return internalRequestProperty(QLatin1String("Valid"));
00202     }
00203 
00242     inline Tp::PendingVariant *requestPropertyEnabled() const
00243     {
00244         return internalRequestProperty(QLatin1String("Enabled"));
00245     }
00246 
00285     inline Tp::PendingOperation *setPropertyEnabled(bool newValue)
00286     {
00287         return internalSetProperty(QLatin1String("Enabled"), QVariant::fromValue(newValue));
00288     }
00289 
00307     inline Tp::PendingVariant *requestPropertyNickname() const
00308     {
00309         return internalRequestProperty(QLatin1String("Nickname"));
00310     }
00311 
00329     inline Tp::PendingOperation *setPropertyNickname(QString newValue)
00330     {
00331         return internalSetProperty(QLatin1String("Nickname"), QVariant::fromValue(newValue));
00332     }
00333 
00381     inline Tp::PendingVariant *requestPropertyService() const
00382     {
00383         return internalRequestProperty(QLatin1String("Service"));
00384     }
00385 
00433     inline Tp::PendingOperation *setPropertyService(QString newValue)
00434     {
00435         return internalSetProperty(QLatin1String("Service"), QVariant::fromValue(newValue));
00436     }
00437 
00457     inline Tp::PendingVariant *requestPropertyParameters() const
00458     {
00459         return internalRequestProperty(QLatin1String("Parameters"));
00460     }
00461 
00493     inline Tp::PendingVariant *requestPropertyAutomaticPresence() const
00494     {
00495         return internalRequestProperty(QLatin1String("AutomaticPresence"));
00496     }
00497 
00529     inline Tp::PendingOperation *setPropertyAutomaticPresence(Tp::SimplePresence newValue)
00530     {
00531         return internalSetProperty(QLatin1String("AutomaticPresence"), QVariant::fromValue(newValue));
00532     }
00533 
00549     inline Tp::PendingVariant *requestPropertyConnectAutomatically() const
00550     {
00551         return internalRequestProperty(QLatin1String("ConnectAutomatically"));
00552     }
00553 
00569     inline Tp::PendingOperation *setPropertyConnectAutomatically(bool newValue)
00570     {
00571         return internalSetProperty(QLatin1String("ConnectAutomatically"), QVariant::fromValue(newValue));
00572     }
00573 
00595     inline Tp::PendingVariant *requestPropertyConnection() const
00596     {
00597         return internalRequestProperty(QLatin1String("Connection"));
00598     }
00599 
00617     inline Tp::PendingVariant *requestPropertyConnectionStatus() const
00618     {
00619         return internalRequestProperty(QLatin1String("ConnectionStatus"));
00620     }
00621 
00634     inline Tp::PendingVariant *requestPropertyConnectionStatusReason() const
00635     {
00636         return internalRequestProperty(QLatin1String("ConnectionStatusReason"));
00637     }
00638 
00669     inline Tp::PendingVariant *requestPropertyConnectionError() const
00670     {
00671         return internalRequestProperty(QLatin1String("ConnectionError"));
00672     }
00673 
00698     inline Tp::PendingVariant *requestPropertyConnectionErrorDetails() const
00699     {
00700         return internalRequestProperty(QLatin1String("ConnectionErrorDetails"));
00701     }
00702 
00717     inline Tp::PendingVariant *requestPropertyCurrentPresence() const
00718     {
00719         return internalRequestProperty(QLatin1String("CurrentPresence"));
00720     }
00721 
00749     inline Tp::PendingVariant *requestPropertyRequestedPresence() const
00750     {
00751         return internalRequestProperty(QLatin1String("RequestedPresence"));
00752     }
00753 
00781     inline Tp::PendingOperation *setPropertyRequestedPresence(Tp::SimplePresence newValue)
00782     {
00783         return internalSetProperty(QLatin1String("RequestedPresence"), QVariant::fromValue(newValue));
00784     }
00785 
00827     inline Tp::PendingVariant *requestPropertyChangingPresence() const
00828     {
00829         return internalRequestProperty(QLatin1String("ChangingPresence"));
00830     }
00831 
00869     inline Tp::PendingVariant *requestPropertyNormalizedName() const
00870     {
00871         return internalRequestProperty(QLatin1String("NormalizedName"));
00872     }
00873 
00888     inline Tp::PendingVariant *requestPropertyHasBeenOnline() const
00889     {
00890         return internalRequestProperty(QLatin1String("HasBeenOnline"));
00891     }
00892 
00925     inline Tp::PendingVariant *requestPropertySupersedes() const
00926     {
00927         return internalRequestProperty(QLatin1String("Supersedes"));
00928     }
00929 
00962     inline Tp::PendingOperation *setPropertySupersedes(Tp::ObjectPathList newValue)
00963     {
00964         return internalSetProperty(QLatin1String("Supersedes"), QVariant::fromValue(newValue));
00965     }
00966 
00973     Tp::PendingVariantMap *requestAllProperties() const
00974     {
00975         return internalRequestAllProperties();
00976     }
00977 
00978 public Q_SLOTS:
00989     inline QDBusPendingReply<> Remove(int timeout = -1)
00990     {
00991         if (!invalidationReason().isEmpty()) {
00992             return QDBusPendingReply<>(QDBusMessage::createError(
00993                 invalidationReason(),
00994                 invalidationMessage()
00995             ));
00996         }
00997 
00998         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00999                 this->staticInterfaceName(), QLatin1String("Remove"));
01000         return this->connection().asyncCall(callMessage, timeout);
01001     }
01002 
01073     inline QDBusPendingReply<QStringList> UpdateParameters(const QVariantMap& set, const QStringList& unset, int timeout = -1)
01074     {
01075         if (!invalidationReason().isEmpty()) {
01076             return QDBusPendingReply<QStringList>(QDBusMessage::createError(
01077                 invalidationReason(),
01078                 invalidationMessage()
01079             ));
01080         }
01081 
01082         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
01083                 this->staticInterfaceName(), QLatin1String("UpdateParameters"));
01084         callMessage << QVariant::fromValue(set) << QVariant::fromValue(unset);
01085         return this->connection().asyncCall(callMessage, timeout);
01086     }
01087 
01129     inline QDBusPendingReply<> Reconnect(int timeout = -1)
01130     {
01131         if (!invalidationReason().isEmpty()) {
01132             return QDBusPendingReply<>(QDBusMessage::createError(
01133                 invalidationReason(),
01134                 invalidationMessage()
01135             ));
01136         }
01137 
01138         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
01139                 this->staticInterfaceName(), QLatin1String("Reconnect"));
01140         return this->connection().asyncCall(callMessage, timeout);
01141     }
01142 
01143 Q_SIGNALS:
01153     void Removed();
01154 
01169     void AccountPropertyChanged(const QVariantMap& properties);
01170 
01171 protected:
01172     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
01173 };
01174 
01182 class TP_QT_EXPORT AccountInterfaceAddressingInterface : public Tp::AbstractInterface
01183 {
01184     Q_OBJECT
01185 
01186 public:
01193     static inline QLatin1String staticInterfaceName()
01194     {
01195         return QLatin1String("org.freedesktop.Telepathy.Account.Interface.Addressing");
01196     }
01197 
01205     AccountInterfaceAddressingInterface(
01206         const QString& busName,
01207         const QString& objectPath,
01208         QObject* parent = 0
01209     );
01210 
01219     AccountInterfaceAddressingInterface(
01220         const QDBusConnection& connection,
01221         const QString& busName,
01222         const QString& objectPath,
01223         QObject* parent = 0
01224     );
01225 
01232     AccountInterfaceAddressingInterface(Tp::DBusProxy *proxy);
01233 
01241     explicit AccountInterfaceAddressingInterface(const Tp::Client::AccountInterface& mainInterface);
01242 
01250     AccountInterfaceAddressingInterface(const Tp::Client::AccountInterface& mainInterface, QObject* parent);
01251 
01270     inline Tp::PendingVariant *requestPropertyURISchemes() const
01271     {
01272         return internalRequestProperty(QLatin1String("URISchemes"));
01273     }
01274 
01281     Tp::PendingVariantMap *requestAllProperties() const
01282     {
01283         return internalRequestAllProperties();
01284     }
01285 
01286 public Q_SLOTS:
01307     inline QDBusPendingReply<> SetURISchemeAssociation(const QString& URIScheme, bool association, int timeout = -1)
01308     {
01309         if (!invalidationReason().isEmpty()) {
01310             return QDBusPendingReply<>(QDBusMessage::createError(
01311                 invalidationReason(),
01312                 invalidationMessage()
01313             ));
01314         }
01315 
01316         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
01317                 this->staticInterfaceName(), QLatin1String("SetURISchemeAssociation"));
01318         callMessage << QVariant::fromValue(URIScheme) << QVariant::fromValue(association);
01319         return this->connection().asyncCall(callMessage, timeout);
01320     }
01321 
01322 protected:
01323     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
01324 };
01325 
01333 class TP_QT_EXPORT AccountInterfaceAvatarInterface : public Tp::AbstractInterface
01334 {
01335     Q_OBJECT
01336 
01337 public:
01344     static inline QLatin1String staticInterfaceName()
01345     {
01346         return QLatin1String("org.freedesktop.Telepathy.Account.Interface.Avatar");
01347     }
01348 
01356     AccountInterfaceAvatarInterface(
01357         const QString& busName,
01358         const QString& objectPath,
01359         QObject* parent = 0
01360     );
01361 
01370     AccountInterfaceAvatarInterface(
01371         const QDBusConnection& connection,
01372         const QString& busName,
01373         const QString& objectPath,
01374         QObject* parent = 0
01375     );
01376 
01383     AccountInterfaceAvatarInterface(Tp::DBusProxy *proxy);
01384 
01392     explicit AccountInterfaceAvatarInterface(const Tp::Client::AccountInterface& mainInterface);
01393 
01401     AccountInterfaceAvatarInterface(const Tp::Client::AccountInterface& mainInterface, QObject* parent);
01402 
01416     inline Tp::PendingVariant *requestPropertyAvatar() const
01417     {
01418         return internalRequestProperty(QLatin1String("Avatar"));
01419     }
01420 
01434     inline Tp::PendingOperation *setPropertyAvatar(Tp::Avatar newValue)
01435     {
01436         return internalSetProperty(QLatin1String("Avatar"), QVariant::fromValue(newValue));
01437     }
01438 
01445     Tp::PendingVariantMap *requestAllProperties() const
01446     {
01447         return internalRequestAllProperties();
01448     }
01449 
01450 Q_SIGNALS:
01459     void AvatarChanged();
01460 
01461 protected:
01462     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
01463 };
01464 
01472 class TP_QT_EXPORT AccountInterfaceStorageInterface : public Tp::AbstractInterface
01473 {
01474     Q_OBJECT
01475 
01476 public:
01483     static inline QLatin1String staticInterfaceName()
01484     {
01485         return QLatin1String("org.freedesktop.Telepathy.Account.Interface.Storage");
01486     }
01487 
01495     AccountInterfaceStorageInterface(
01496         const QString& busName,
01497         const QString& objectPath,
01498         QObject* parent = 0
01499     );
01500 
01509     AccountInterfaceStorageInterface(
01510         const QDBusConnection& connection,
01511         const QString& busName,
01512         const QString& objectPath,
01513         QObject* parent = 0
01514     );
01515 
01522     AccountInterfaceStorageInterface(Tp::DBusProxy *proxy);
01523 
01531     explicit AccountInterfaceStorageInterface(const Tp::Client::AccountInterface& mainInterface);
01532 
01540     AccountInterfaceStorageInterface(const Tp::Client::AccountInterface& mainInterface, QObject* parent);
01541 
01560     inline Tp::PendingVariant *requestPropertyStorageProvider() const
01561     {
01562         return internalRequestProperty(QLatin1String("StorageProvider"));
01563     }
01564 
01592     inline Tp::PendingVariant *requestPropertyStorageIdentifier() const
01593     {
01594         return internalRequestProperty(QLatin1String("StorageIdentifier"));
01595     }
01596 
01629     inline Tp::PendingVariant *requestPropertyStorageSpecificInformation() const
01630     {
01631         return internalRequestProperty(QLatin1String("StorageSpecificInformation"));
01632     }
01633 
01650     inline Tp::PendingVariant *requestPropertyStorageRestrictions() const
01651     {
01652         return internalRequestProperty(QLatin1String("StorageRestrictions"));
01653     }
01654 
01661     Tp::PendingVariantMap *requestAllProperties() const
01662     {
01663         return internalRequestAllProperties();
01664     }
01665 
01666 protected:
01667     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
01668 };
01669 }
01670 }
01671 Q_DECLARE_METATYPE(Tp::Client::AccountInterface*)
01672 Q_DECLARE_METATYPE(Tp::Client::AccountInterfaceAddressingInterface*)
01673 Q_DECLARE_METATYPE(Tp::Client::AccountInterfaceAvatarInterface*)
01674 Q_DECLARE_METATYPE(Tp::Client::AccountInterfaceStorageInterface*)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00489_source.html0000644000175200001440000010261012000060453023212 0ustar00collabora-develusers00000000000000 cli-call-content-media-description.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-call-content-media-description.h
00001 /*
00002  * This file contains D-Bus client proxy classes generated by qt-client-gen.py.
00003  *
00004  * This file can be distributed under the same terms as the specification from
00005  * which it was generated.
00006  */
00007 
00008 #ifndef IN_TP_QT_HEADER
00009 #error IN_TP_QT_HEADER
00010 #endif
00011 
00012 #include <TelepathyQt/Types>
00013 
00014 #include <QtGlobal>
00015 
00016 #include <QString>
00017 #include <QObject>
00018 #include <QVariant>
00019 
00020 #include <QDBusPendingReply>
00021 
00022 #include <TelepathyQt/AbstractInterface>
00023 #include <TelepathyQt/DBusProxy>
00024 #include <TelepathyQt/Global>
00025 
00026 namespace Tp
00027 {
00028 class PendingVariant;
00029 class PendingOperation;
00030 }
00031 
00032 namespace Tp
00033 {
00034 namespace Client
00035 {
00036 
00044 class TP_QT_EXPORT CallContentMediaDescriptionInterface : public Tp::AbstractInterface
00045 {
00046     Q_OBJECT
00047 
00048 public:
00055     static inline QLatin1String staticInterfaceName()
00056     {
00057         return QLatin1String("org.freedesktop.Telepathy.Call1.Content.MediaDescription");
00058     }
00059 
00067     CallContentMediaDescriptionInterface(
00068         const QString& busName,
00069         const QString& objectPath,
00070         QObject* parent = 0
00071     );
00072 
00081     CallContentMediaDescriptionInterface(
00082         const QDBusConnection& connection,
00083         const QString& busName,
00084         const QString& objectPath,
00085         QObject* parent = 0
00086     );
00087 
00094     CallContentMediaDescriptionInterface(Tp::DBusProxy *proxy);
00095 
00108     inline Tp::PendingVariant *requestPropertyInterfaces() const
00109     {
00110         return internalRequestProperty(QLatin1String("Interfaces"));
00111     }
00112 
00136     inline Tp::PendingVariant *requestPropertyFurtherNegotiationRequired() const
00137     {
00138         return internalRequestProperty(QLatin1String("FurtherNegotiationRequired"));
00139     }
00140 
00158     inline Tp::PendingVariant *requestPropertyHasRemoteInformation() const
00159     {
00160         return internalRequestProperty(QLatin1String("HasRemoteInformation"));
00161     }
00162 
00173     inline Tp::PendingVariant *requestPropertyCodecs() const
00174     {
00175         return internalRequestProperty(QLatin1String("Codecs"));
00176     }
00177 
00199     inline Tp::PendingVariant *requestPropertyRemoteContact() const
00200     {
00201         return internalRequestProperty(QLatin1String("RemoteContact"));
00202     }
00203 
00240     inline Tp::PendingVariant *requestPropertySSRCs() const
00241     {
00242         return internalRequestProperty(QLatin1String("SSRCs"));
00243     }
00244 
00251     Tp::PendingVariantMap *requestAllProperties() const
00252     {
00253         return internalRequestAllProperties();
00254     }
00255 
00256 public Q_SLOTS:
00275     inline QDBusPendingReply<> Accept(const QVariantMap& localMediaDescription, int timeout = -1)
00276     {
00277         if (!invalidationReason().isEmpty()) {
00278             return QDBusPendingReply<>(QDBusMessage::createError(
00279                 invalidationReason(),
00280                 invalidationMessage()
00281             ));
00282         }
00283 
00284         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00285                 this->staticInterfaceName(), QLatin1String("Accept"));
00286         callMessage << QVariant::fromValue(localMediaDescription);
00287         return this->connection().asyncCall(callMessage, timeout);
00288     }
00289 
00304     inline QDBusPendingReply<> Reject(const Tp::CallStateReason& reason, int timeout = -1)
00305     {
00306         if (!invalidationReason().isEmpty()) {
00307             return QDBusPendingReply<>(QDBusMessage::createError(
00308                 invalidationReason(),
00309                 invalidationMessage()
00310             ));
00311         }
00312 
00313         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00314                 this->staticInterfaceName(), QLatin1String("Reject"));
00315         callMessage << QVariant::fromValue(reason);
00316         return this->connection().asyncCall(callMessage, timeout);
00317     }
00318 
00319 protected:
00320     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
00321 };
00322 
00330 class TP_QT_EXPORT CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface : public Tp::AbstractInterface
00331 {
00332     Q_OBJECT
00333 
00334 public:
00341     static inline QLatin1String staticInterfaceName()
00342     {
00343         return QLatin1String("org.freedesktop.Telepathy.Call1.Content.MediaDescription.Interface.RTCPExtendedReports");
00344     }
00345 
00353     CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface(
00354         const QString& busName,
00355         const QString& objectPath,
00356         QObject* parent = 0
00357     );
00358 
00367     CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface(
00368         const QDBusConnection& connection,
00369         const QString& busName,
00370         const QString& objectPath,
00371         QObject* parent = 0
00372     );
00373 
00380     CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface(Tp::DBusProxy *proxy);
00381 
00389     explicit CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface(const Tp::Client::CallContentMediaDescriptionInterface& mainInterface);
00390 
00398     CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface(const Tp::Client::CallContentMediaDescriptionInterface& mainInterface, QObject* parent);
00399 
00412     inline Tp::PendingVariant *requestPropertyLossRLEMaxSize() const
00413     {
00414         return internalRequestProperty(QLatin1String("LossRLEMaxSize"));
00415     }
00416 
00429     inline Tp::PendingVariant *requestPropertyDuplicateRLEMaxSize() const
00430     {
00431         return internalRequestProperty(QLatin1String("DuplicateRLEMaxSize"));
00432     }
00433 
00446     inline Tp::PendingVariant *requestPropertyPacketReceiptTimesMaxSize() const
00447     {
00448         return internalRequestProperty(QLatin1String("PacketReceiptTimesMaxSize"));
00449     }
00450 
00464     inline Tp::PendingVariant *requestPropertyDLRRMaxSize() const
00465     {
00466         return internalRequestProperty(QLatin1String("DLRRMaxSize"));
00467     }
00468 
00478     inline Tp::PendingVariant *requestPropertyRTTMode() const
00479     {
00480         return internalRequestProperty(QLatin1String("RTTMode"));
00481     }
00482 
00494     inline Tp::PendingVariant *requestPropertyStatisticsFlags() const
00495     {
00496         return internalRequestProperty(QLatin1String("StatisticsFlags"));
00497     }
00498 
00509     inline Tp::PendingVariant *requestPropertyEnableMetrics() const
00510     {
00511         return internalRequestProperty(QLatin1String("EnableMetrics"));
00512     }
00513 
00520     Tp::PendingVariantMap *requestAllProperties() const
00521     {
00522         return internalRequestAllProperties();
00523     }
00524 
00525 protected:
00526     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
00527 };
00528 
00536 class TP_QT_EXPORT CallContentMediaDescriptionInterfaceRTCPFeedbackInterface : public Tp::AbstractInterface
00537 {
00538     Q_OBJECT
00539 
00540 public:
00547     static inline QLatin1String staticInterfaceName()
00548     {
00549         return QLatin1String("org.freedesktop.Telepathy.Call1.Content.MediaDescription.Interface.RTCPFeedback");
00550     }
00551 
00559     CallContentMediaDescriptionInterfaceRTCPFeedbackInterface(
00560         const QString& busName,
00561         const QString& objectPath,
00562         QObject* parent = 0
00563     );
00564 
00573     CallContentMediaDescriptionInterfaceRTCPFeedbackInterface(
00574         const QDBusConnection& connection,
00575         const QString& busName,
00576         const QString& objectPath,
00577         QObject* parent = 0
00578     );
00579 
00586     CallContentMediaDescriptionInterfaceRTCPFeedbackInterface(Tp::DBusProxy *proxy);
00587 
00595     explicit CallContentMediaDescriptionInterfaceRTCPFeedbackInterface(const Tp::Client::CallContentMediaDescriptionInterface& mainInterface);
00596 
00604     CallContentMediaDescriptionInterfaceRTCPFeedbackInterface(const Tp::Client::CallContentMediaDescriptionInterface& mainInterface, QObject* parent);
00605 
00615     inline Tp::PendingVariant *requestPropertyFeedbackMessages() const
00616     {
00617         return internalRequestProperty(QLatin1String("FeedbackMessages"));
00618     }
00619 
00630     inline Tp::PendingVariant *requestPropertyDoesAVPF() const
00631     {
00632         return internalRequestProperty(QLatin1String("DoesAVPF"));
00633     }
00634 
00641     Tp::PendingVariantMap *requestAllProperties() const
00642     {
00643         return internalRequestAllProperties();
00644     }
00645 
00646 protected:
00647     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
00648 };
00649 
00657 class TP_QT_EXPORT CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface : public Tp::AbstractInterface
00658 {
00659     Q_OBJECT
00660 
00661 public:
00668     static inline QLatin1String staticInterfaceName()
00669     {
00670         return QLatin1String("org.freedesktop.Telepathy.Call1.Content.MediaDescription.Interface.RTPHeaderExtensions");
00671     }
00672 
00680     CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface(
00681         const QString& busName,
00682         const QString& objectPath,
00683         QObject* parent = 0
00684     );
00685 
00694     CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface(
00695         const QDBusConnection& connection,
00696         const QString& busName,
00697         const QString& objectPath,
00698         QObject* parent = 0
00699     );
00700 
00707     CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface(Tp::DBusProxy *proxy);
00708 
00716     explicit CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface(const Tp::Client::CallContentMediaDescriptionInterface& mainInterface);
00717 
00725     CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface(const Tp::Client::CallContentMediaDescriptionInterface& mainInterface, QObject* parent);
00726 
00736     inline Tp::PendingVariant *requestPropertyHeaderExtensions() const
00737     {
00738         return internalRequestProperty(QLatin1String("HeaderExtensions"));
00739     }
00740 
00747     Tp::PendingVariantMap *requestAllProperties() const
00748     {
00749         return internalRequestAllProperties();
00750     }
00751 
00752 protected:
00753     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
00754 };
00755 }
00756 }
00757 Q_DECLARE_METATYPE(Tp::Client::CallContentMediaDescriptionInterface*)
00758 Q_DECLARE_METATYPE(Tp::Client::CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface*)
00759 Q_DECLARE_METATYPE(Tp::Client::CallContentMediaDescriptionInterfaceRTCPFeedbackInterface*)
00760 Q_DECLARE_METATYPE(Tp::Client::CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface*)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00188.html0000644000175200001440000006702712000060453021642 0ustar00collabora-develusers00000000000000 Tp::Client::ConnectionManagerInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

#include <TelepathyQt/ConnectionManager>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

  • void NewConnection (const QString &busName, const QDBusObjectPath &objectPath, const QString &protocol)

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.ConnectionManager".


Constructor & Destructor Documentation

Tp::Client::ConnectionManagerInterface::ConnectionManagerInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionManagerInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ConnectionManagerInterface::ConnectionManagerInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionManagerInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ConnectionManagerInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Member Function Documentation

static QLatin1String Tp::Client::ConnectionManagerInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.ConnectionManager", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property Protocols of type Tp::ProtocolPropertiesMap.

A map from protocol identifiers supported by this connection manager to the immutable properties of the corresponding ProtocolInterface objects.

Providing the immutable properties here means that when the API of Protocol objects has been finalized, most clients will only need one D-Bus round trip to interrogate the ConnectionManager about all its protocols.

If this map is empty or missing, clients SHOULD fall back to calling ListProtocols() and GetParameters() .

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Interfaces of type QStringList.

A list of the extra interfaces provided by this connection manager (i.e. extra functionality that can be provided even before a connection has been created).

No interfaces suitable for listing in this property are currently defined; it's provided as a hook for possible future functionality.

To be compatible with older connection managers, if retrieving this property fails, clients SHOULD assume that its value is an empty list.

Connection managers with a non-empty list of Interfaces MUST represent them in the .manager file, if they have one, as an Interfaces key in the group headed [ConnectionManager], whose value is a list of strings each followed by a semicolon.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply<Tp::ParamSpecList> Tp::Client::ConnectionManagerInterface::GetParameters ( const QString &  protocol,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method GetParameters on the remote object.

Get a list of the parameters which may be specified in the Parameters of an Account (or, for specialised applications which do not use the account manager, passed to RequestConnection). Some parameters are mandatory, and some parameters only make sense when registering new accounts with the server; see the Param_Spec documentation for more details.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
protocolThe required protocol name
timeoutThe timeout in milliseconds.
Returns:
An array of structs representing possible parameters.
QDBusPendingReply<QStringList> Tp::Client::ConnectionManagerInterface::ListProtocols ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method ListProtocols on the remote object.

Get a list of protocol identifiers that are implemented by this connection manager.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
Returns:

The keys of the Protocols map.

QDBusPendingReply<QString, QDBusObjectPath> Tp::Client::ConnectionManagerInterface::RequestConnection ( const QString &  protocol,
const QVariantMap &  parameters,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method RequestConnection on the remote object.

Request a ConnectionInterface object representing a given account on a given protocol with the given parameters. The method returns the bus name and the object path where the new Connection object can be found, which should have the status of Connection_Status_Disconnected, to allow signal handlers to be attached before connecting is started with the ConnectionInterface::Connect() method.

Most applications should not use this method: they should instead use the the AccountInterface::Connection property on an AccountInterface object obtained from the AccountManagerInterface . This method is used internally by the account manager to create connections when needed.

The parameters which must and may be provided in the parameters dictionary can be discovered with the GetParameters() method. These parameters, their types, and their default values may be cached in files so that all available connection managers do not need to be started to discover which protocols are available.

To request values for these parameters from the user, a client must have prior knowledge of the meaning of the parameter names, so the well-known names and types defined by the Connection_Parameter_Name type should be used where appropriate.

Connection manager authors SHOULD avoid introducing parameters whose default values would not be serializable in a .manager file.

The same serialization format is used in Mission Control to store accounts.

Every successful RequestConnection call will cause the emission of a NewConnection() signal for the same newly created connection. The requester can use the returned object path and service name independently of the emission of that signal. In that case this signal emission is most useful for, e.g. other processes that are monitoring the creation of new connections.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
protocolThe protocol identifier
parametersA dictionary mapping parameter names to values of the appropriate type, as indicated by GetParameters and the well-known list of names and value types documented on the Connection_Parameter_Name type.
timeoutThe timeout in milliseconds.
Returns:

A D-Bus service name where the new Connection object can be found

Returns:

The D-Bus object path to the Connection on this service

void Tp::Client::ConnectionManagerInterface::NewConnection ( const QString &  busName,
const QDBusObjectPath &  objectPath,
const QString &  protocol 
) [signal]

Represents the signal NewConnection on the remote object.

Emitted when a new Connection object is created.

Parameters:
busNameThe D-Bus service where the connection object can be found
objectPathThe object path of the Connection object on this service
protocolThe identifier for the protocol this connection uses
void Tp::Client::ConnectionManagerInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00961.html0000644000175200001440000000423512000060453021631 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Avatar Member List
This is the complete list of members for Tp::Avatar, including all inherited members.
avatarDataTp::Avatar
MIMETypeTp::Avatar


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00127.html0000644000175200001440000005475312000060453021635 0ustar00collabora-develusers00000000000000 Tp::Client::ChannelInterfaceHoldInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

#include <TelepathyQt/Channel>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

  • QDBusPendingReply< uint, uint > GetHoldState (int timeout=-1)
  • QDBusPendingReply RequestHold (bool hold, int timeout=-1)

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Channel.Interface.Hold".


Constructor & Destructor Documentation

Tp::Client::ChannelInterfaceHoldInterface::ChannelInterfaceHoldInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfaceHoldInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ChannelInterfaceHoldInterface::ChannelInterfaceHoldInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfaceHoldInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ChannelInterfaceHoldInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ChannelInterfaceHoldInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ChannelInterfaceHoldInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

static QLatin1String Tp::Client::ChannelInterfaceHoldInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Channel.Interface.Hold", which this class represents.

Returns:
The D-Bus interface name.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply<uint, uint> Tp::Client::ChannelInterfaceHoldInterface::GetHoldState ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method GetHoldState on the remote object.

Return whether the local user has placed the channel on hold.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
Returns:

The state of the channel

Returns:

The reason why the channel is in that state

QDBusPendingReply Tp::Client::ChannelInterfaceHoldInterface::RequestHold ( bool  hold,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method RequestHold on the remote object.

Request that the channel be put on hold (be instructed not to send any media streams to you) or be taken off hold.

If the connection manager can immediately tell that the requested state change could not possibly succeed, this method SHOULD return the NotAvailable error. If the requested state is the same as the current state, this method SHOULD return successfully without doing anything.

Otherwise, this method SHOULD immediately set the hold state to Local_Hold_State_Pending_Hold or Local_Hold_State_Pending_Unhold (as appropriate), emitting HoldStateChanged() if this is a change, and return successfully.

The eventual success or failure of the request is indicated by a subsequent HoldStateChanged signal, changing the hold state to Local_Hold_State_Held or Local_Hold_State_Unheld.

If the channel has multiple streams, and the connection manager succeeds in changing the hold state of one stream but fails to change the hold state of another, it SHOULD attempt to revert all streams to their previous hold states.

The following state transitions SHOULD be used, where appropriate:

  • Successful hold: (Unheld, any reason) → (Pending_Hold, Requested) → (Held, Requested)
  • Successful unhold: (Held, any reason) → (Pending_Unhold, Requested) → (Unheld, Requested)
  • Attempting to unhold fails at the first attempt to acquire a resource: (Held, any reason) → (Pending_Unhold, Requested) → (Held, Resource_Not_Available)
  • Attempting to unhold acquires one resource, but fails to acquire a second, and takes time to release the first: (Held, any reason) → (Pending_Unhold, Requested) → (Pending_Hold, Resource_Not_Available) → (Held, Resource_Not_Available)

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
holdA boolean indicating whether or not the channel should be on hold
timeoutThe timeout in milliseconds.
void Tp::Client::ChannelInterfaceHoldInterface::HoldStateChanged ( uint  holdState,
uint  reason 
) [signal]

Represents the signal HoldStateChanged on the remote object.

Emitted to indicate that the hold state has changed for this channel. This may occur as a consequence of you requesting a change with RequestHold, or the state changing as a result of a request from another process.

Parameters:
holdStateThe state of the channel
reasonThe reason for the state change
void Tp::Client::ChannelInterfaceHoldInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00243.html0000644000175200001440000002461312000060453021624 0ustar00collabora-develusers00000000000000 Tp::GenericPropertyFilter< T > Class Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::GenericPropertyFilter< T > Class Template Reference

The GenericPropertyFilter class provides a generic filter object to be used to filter objects by properties. More...

#include <TelepathyQt/GenericPropertyFilter>

Inherits Tp::Filter< T >.

List of all members.

Public Member Functions

Protected Member Functions


Detailed Description

template<class T>
class Tp::GenericPropertyFilter< T >

The GenericPropertyFilter class provides a generic filter object to be used to filter objects by properties.

Specialized classes such as AccountPropertyFilter are also provided and should be used where appropriate.


Constructor & Destructor Documentation

template<class T>
virtual Tp::GenericPropertyFilter< T >::~GenericPropertyFilter ( ) [inline, virtual]
template<class T>
Tp::GenericPropertyFilter< T >::GenericPropertyFilter ( ) [inline, protected]

Member Function Documentation

template<class T>
virtual bool Tp::GenericPropertyFilter< T >::isValid ( ) const [inline, virtual]

Reimplemented from Tp::Filter< T >.

Reimplemented in Tp::AccountPropertyFilter.

template<class T>
virtual bool Tp::GenericPropertyFilter< T >::matches ( const SharedPtr< T > &  t) const [inline, virtual]

Reimplemented from Tp::Filter< T >.

template<class T>
QVariantMap Tp::GenericPropertyFilter< T >::filter ( ) const [inline]
template<class T>
void Tp::GenericPropertyFilter< T >::addProperty ( const QString &  propertyName,
const QVariant &  propertyValue 
) [inline]
template<class T>
void Tp::GenericPropertyFilter< T >::setProperties ( const QVariantMap &  filter) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01149.html0000644000175200001440000003061012000060453021624 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::DBus::DBusDaemonInterface Member List
This is the complete list of members for Tp::Client::DBus::DBusDaemonInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
AddMatch(const QString &rule, int timeout=-1)Tp::Client::DBus::DBusDaemonInterface [inline, slot]
DBusDaemonInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::DBus::DBusDaemonInterface
DBusDaemonInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::DBus::DBusDaemonInterface
DBusDaemonInterface(Tp::DBusProxy *proxy)Tp::Client::DBus::DBusDaemonInterface
DBusDaemonInterface(const Tp::AbstractInterface &mainInterface)Tp::Client::DBus::DBusDaemonInterface [explicit]
DBusDaemonInterface(const Tp::AbstractInterface &mainInterface, QObject *parent)Tp::Client::DBus::DBusDaemonInterface
GetConnectionSELinuxSecurityContext(const QString &connectionName, int timeout=-1)Tp::Client::DBus::DBusDaemonInterface [inline, slot]
GetConnectionUnixProcessID(const QString &connectionName, int timeout=-1)Tp::Client::DBus::DBusDaemonInterface [inline, slot]
GetConnectionUnixUser(const QString &connectionName, int timeout=-1)Tp::Client::DBus::DBusDaemonInterface [inline, slot]
GetId(int timeout=-1)Tp::Client::DBus::DBusDaemonInterface [inline, slot]
GetNameOwner(const QString &name, int timeout=-1)Tp::Client::DBus::DBusDaemonInterface [inline, slot]
Hello(int timeout=-1)Tp::Client::DBus::DBusDaemonInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::DBus::DBusDaemonInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
ListActivatableNames(int timeout=-1)Tp::Client::DBus::DBusDaemonInterface [inline, slot]
ListNames(int timeout=-1)Tp::Client::DBus::DBusDaemonInterface [inline, slot]
ListQueuedOwners(const QString &name, int timeout=-1)Tp::Client::DBus::DBusDaemonInterface [inline, slot]
NameAcquired(const QString &name)Tp::Client::DBus::DBusDaemonInterface [signal]
NameHasOwner(const QString &nameToCheck, int timeout=-1)Tp::Client::DBus::DBusDaemonInterface [inline, slot]
NameLost(const QString &name)Tp::Client::DBus::DBusDaemonInterface [signal]
NameOwnerChanged(const QString &name, const QString &oldOwner, const QString &newOwner)Tp::Client::DBus::DBusDaemonInterface [signal]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
ReleaseName(const QString &name, int timeout=-1)Tp::Client::DBus::DBusDaemonInterface [inline, slot]
ReloadConfig(int timeout=-1)Tp::Client::DBus::DBusDaemonInterface [inline, slot]
RemoveMatch(const QString &rule, int timeout=-1)Tp::Client::DBus::DBusDaemonInterface [inline, slot]
requestAllProperties() const Tp::Client::DBus::DBusDaemonInterface [inline]
RequestName(const QString &name, uint flags, int timeout=-1)Tp::Client::DBus::DBusDaemonInterface [inline, slot]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
StartServiceByName(const QString &service, uint flags, int timeout=-1)Tp::Client::DBus::DBusDaemonInterface [inline, slot]
staticInterfaceName()Tp::Client::DBus::DBusDaemonInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00487_source.html0000644000175200001440000007013612000060453023217 0ustar00collabora-develusers00000000000000 cli-call-content-body.hpp Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-call-content-body.hpp
00001 #define IN_TP_QT_HEADER
00002 #include "TelepathyQt/call-content.h"
00003 
00004 namespace Tp
00005 {
00006 namespace Client
00007 {
00008 
00009 CallContentInterface::CallContentInterface(const QString& busName, const QString& objectPath, QObject *parent)
00010     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00011 {
00012 }
00013 
00014 CallContentInterface::CallContentInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00015     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00016 {
00017 }
00018 
00019 CallContentInterface::CallContentInterface(Tp::DBusProxy *proxy)
00020     : Tp::AbstractInterface(proxy, staticInterfaceName())
00021 {
00022 }
00023 
00024 void CallContentInterface::invalidate(Tp::DBusProxy *proxy,
00025         const QString &error, const QString &message)
00026 {
00027     disconnect(this, SIGNAL(StreamsAdded(const Tp::ObjectPathList&)), NULL, NULL);
00028     disconnect(this, SIGNAL(StreamsRemoved(const Tp::ObjectPathList&, const Tp::CallStateReason&)), NULL, NULL);
00029 
00030     Tp::AbstractInterface::invalidate(proxy, error, message);
00031 }
00032 
00033 CallContentInterfaceAudioControlInterface::CallContentInterfaceAudioControlInterface(const QString& busName, const QString& objectPath, QObject *parent)
00034     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00035 {
00036 }
00037 
00038 CallContentInterfaceAudioControlInterface::CallContentInterfaceAudioControlInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00039     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00040 {
00041 }
00042 
00043 CallContentInterfaceAudioControlInterface::CallContentInterfaceAudioControlInterface(Tp::DBusProxy *proxy)
00044     : Tp::AbstractInterface(proxy, staticInterfaceName())
00045 {
00046 }
00047 
00048 CallContentInterfaceAudioControlInterface::CallContentInterfaceAudioControlInterface(const Tp::Client::CallContentInterface& mainInterface)
00049     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00050 {
00051 }
00052 
00053 CallContentInterfaceAudioControlInterface::CallContentInterfaceAudioControlInterface(const Tp::Client::CallContentInterface& mainInterface, QObject *parent)
00054     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00055 {
00056 }
00057 
00058 void CallContentInterfaceAudioControlInterface::invalidate(Tp::DBusProxy *proxy,
00059         const QString &error, const QString &message)
00060 {
00061 
00062     Tp::AbstractInterface::invalidate(proxy, error, message);
00063 }
00064 
00065 CallContentInterfaceDTMFInterface::CallContentInterfaceDTMFInterface(const QString& busName, const QString& objectPath, QObject *parent)
00066     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00067 {
00068 }
00069 
00070 CallContentInterfaceDTMFInterface::CallContentInterfaceDTMFInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00071     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00072 {
00073 }
00074 
00075 CallContentInterfaceDTMFInterface::CallContentInterfaceDTMFInterface(Tp::DBusProxy *proxy)
00076     : Tp::AbstractInterface(proxy, staticInterfaceName())
00077 {
00078 }
00079 
00080 CallContentInterfaceDTMFInterface::CallContentInterfaceDTMFInterface(const Tp::Client::CallContentInterface& mainInterface)
00081     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00082 {
00083 }
00084 
00085 CallContentInterfaceDTMFInterface::CallContentInterfaceDTMFInterface(const Tp::Client::CallContentInterface& mainInterface, QObject *parent)
00086     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00087 {
00088 }
00089 
00090 void CallContentInterfaceDTMFInterface::invalidate(Tp::DBusProxy *proxy,
00091         const QString &error, const QString &message)
00092 {
00093     disconnect(this, SIGNAL(TonesDeferred(const QString&)), NULL, NULL);
00094     disconnect(this, SIGNAL(SendingTones(const QString&)), NULL, NULL);
00095     disconnect(this, SIGNAL(StoppedTones(bool)), NULL, NULL);
00096 
00097     Tp::AbstractInterface::invalidate(proxy, error, message);
00098 }
00099 
00100 CallContentInterfaceMediaInterface::CallContentInterfaceMediaInterface(const QString& busName, const QString& objectPath, QObject *parent)
00101     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00102 {
00103 }
00104 
00105 CallContentInterfaceMediaInterface::CallContentInterfaceMediaInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00106     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00107 {
00108 }
00109 
00110 CallContentInterfaceMediaInterface::CallContentInterfaceMediaInterface(Tp::DBusProxy *proxy)
00111     : Tp::AbstractInterface(proxy, staticInterfaceName())
00112 {
00113 }
00114 
00115 CallContentInterfaceMediaInterface::CallContentInterfaceMediaInterface(const Tp::Client::CallContentInterface& mainInterface)
00116     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00117 {
00118 }
00119 
00120 CallContentInterfaceMediaInterface::CallContentInterfaceMediaInterface(const Tp::Client::CallContentInterface& mainInterface, QObject *parent)
00121     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00122 {
00123 }
00124 
00125 void CallContentInterfaceMediaInterface::invalidate(Tp::DBusProxy *proxy,
00126         const QString &error, const QString &message)
00127 {
00128     disconnect(this, SIGNAL(NewMediaDescriptionOffer(const QDBusObjectPath&, const QVariantMap&)), NULL, NULL);
00129     disconnect(this, SIGNAL(MediaDescriptionOfferDone()), NULL, NULL);
00130     disconnect(this, SIGNAL(LocalMediaDescriptionChanged(const QVariantMap&)), NULL, NULL);
00131     disconnect(this, SIGNAL(RemoteMediaDescriptionsChanged(const Tp::ContactMediaDescriptionPropertiesMap&)), NULL, NULL);
00132     disconnect(this, SIGNAL(MediaDescriptionsRemoved(const Tp::UIntList&)), NULL, NULL);
00133     disconnect(this, SIGNAL(DTMFChangeRequested(uchar, uint)), NULL, NULL);
00134 
00135     Tp::AbstractInterface::invalidate(proxy, error, message);
00136 }
00137 
00138 CallContentInterfaceVideoControlInterface::CallContentInterfaceVideoControlInterface(const QString& busName, const QString& objectPath, QObject *parent)
00139     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00140 {
00141 }
00142 
00143 CallContentInterfaceVideoControlInterface::CallContentInterfaceVideoControlInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00144     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00145 {
00146 }
00147 
00148 CallContentInterfaceVideoControlInterface::CallContentInterfaceVideoControlInterface(Tp::DBusProxy *proxy)
00149     : Tp::AbstractInterface(proxy, staticInterfaceName())
00150 {
00151 }
00152 
00153 CallContentInterfaceVideoControlInterface::CallContentInterfaceVideoControlInterface(const Tp::Client::CallContentInterface& mainInterface)
00154     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00155 {
00156 }
00157 
00158 CallContentInterfaceVideoControlInterface::CallContentInterfaceVideoControlInterface(const Tp::Client::CallContentInterface& mainInterface, QObject *parent)
00159     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00160 {
00161 }
00162 
00163 void CallContentInterfaceVideoControlInterface::invalidate(Tp::DBusProxy *proxy,
00164         const QString &error, const QString &message)
00165 {
00166     disconnect(this, SIGNAL(KeyFrameRequested()), NULL, NULL);
00167     disconnect(this, SIGNAL(VideoResolutionChanged(const Tp::VideoResolution&)), NULL, NULL);
00168     disconnect(this, SIGNAL(BitrateChanged(uint)), NULL, NULL);
00169     disconnect(this, SIGNAL(FramerateChanged(uint)), NULL, NULL);
00170     disconnect(this, SIGNAL(MTUChanged(uint)), NULL, NULL);
00171 
00172     Tp::AbstractInterface::invalidate(proxy, error, message);
00173 }
00174 }
00175 }


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00090.html0000644000175200001440000001346312000060453021625 0ustar00collabora-develusers00000000000000 Tp::CallStateReason Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::CallStateReason Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

A description of the reason for a change to the CallState and/or CallFlags .


Member Data Documentation

The contact responsible for the change, or 0 if no contact was responsible.

The reason, chosen from a limited set of possibilities defined by the Telepathy specification. If User_Requested then the Actor member will dictate whether it was the local user or a remote contact responsible.

A specific reason for the change, which may be a D-Bus error in the Telepathy namespace, a D-Bus error in any other namespace (for implementation-specific errors), or the empty string to indicate that the state change was not an error.

This SHOULD be an empty string for changes to any state other than Ended.

The errors Cancelled and Terminated SHOULD NOT be used here; an empty string SHOULD be used instead.

Those error names are used to indicate normal call termination by the local user or another user, respectively, in contexts where a D-Bus error name must appear.

An optional debug message, to expediate debugging the potentially many processes involved in a call. This may be communicated across the network in protocols that support doing so, but it is not essential.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00483_source.html0000644000175200001440000004752312000060453023217 0ustar00collabora-develusers00000000000000 cli-account-body.hpp Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-account-body.hpp
00001 #define IN_TP_QT_HEADER
00002 #include "TelepathyQt/account.h"
00003 
00004 namespace Tp
00005 {
00006 namespace Client
00007 {
00008 
00009 AccountInterface::AccountInterface(const QString& busName, const QString& objectPath, QObject *parent)
00010     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00011 {
00012 }
00013 
00014 AccountInterface::AccountInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00015     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00016 {
00017 }
00018 
00019 AccountInterface::AccountInterface(Tp::DBusProxy *proxy)
00020     : Tp::AbstractInterface(proxy, staticInterfaceName())
00021 {
00022 }
00023 
00024 void AccountInterface::invalidate(Tp::DBusProxy *proxy,
00025         const QString &error, const QString &message)
00026 {
00027     disconnect(this, SIGNAL(Removed()), NULL, NULL);
00028     disconnect(this, SIGNAL(AccountPropertyChanged(const QVariantMap&)), NULL, NULL);
00029 
00030     Tp::AbstractInterface::invalidate(proxy, error, message);
00031 }
00032 
00033 AccountInterfaceAddressingInterface::AccountInterfaceAddressingInterface(const QString& busName, const QString& objectPath, QObject *parent)
00034     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00035 {
00036 }
00037 
00038 AccountInterfaceAddressingInterface::AccountInterfaceAddressingInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00039     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00040 {
00041 }
00042 
00043 AccountInterfaceAddressingInterface::AccountInterfaceAddressingInterface(Tp::DBusProxy *proxy)
00044     : Tp::AbstractInterface(proxy, staticInterfaceName())
00045 {
00046 }
00047 
00048 AccountInterfaceAddressingInterface::AccountInterfaceAddressingInterface(const Tp::Client::AccountInterface& mainInterface)
00049     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00050 {
00051 }
00052 
00053 AccountInterfaceAddressingInterface::AccountInterfaceAddressingInterface(const Tp::Client::AccountInterface& mainInterface, QObject *parent)
00054     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00055 {
00056 }
00057 
00058 void AccountInterfaceAddressingInterface::invalidate(Tp::DBusProxy *proxy,
00059         const QString &error, const QString &message)
00060 {
00061 
00062     Tp::AbstractInterface::invalidate(proxy, error, message);
00063 }
00064 
00065 AccountInterfaceAvatarInterface::AccountInterfaceAvatarInterface(const QString& busName, const QString& objectPath, QObject *parent)
00066     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00067 {
00068 }
00069 
00070 AccountInterfaceAvatarInterface::AccountInterfaceAvatarInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00071     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00072 {
00073 }
00074 
00075 AccountInterfaceAvatarInterface::AccountInterfaceAvatarInterface(Tp::DBusProxy *proxy)
00076     : Tp::AbstractInterface(proxy, staticInterfaceName())
00077 {
00078 }
00079 
00080 AccountInterfaceAvatarInterface::AccountInterfaceAvatarInterface(const Tp::Client::AccountInterface& mainInterface)
00081     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00082 {
00083 }
00084 
00085 AccountInterfaceAvatarInterface::AccountInterfaceAvatarInterface(const Tp::Client::AccountInterface& mainInterface, QObject *parent)
00086     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00087 {
00088 }
00089 
00090 void AccountInterfaceAvatarInterface::invalidate(Tp::DBusProxy *proxy,
00091         const QString &error, const QString &message)
00092 {
00093     disconnect(this, SIGNAL(AvatarChanged()), NULL, NULL);
00094 
00095     Tp::AbstractInterface::invalidate(proxy, error, message);
00096 }
00097 
00098 AccountInterfaceStorageInterface::AccountInterfaceStorageInterface(const QString& busName, const QString& objectPath, QObject *parent)
00099     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00100 {
00101 }
00102 
00103 AccountInterfaceStorageInterface::AccountInterfaceStorageInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00104     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00105 {
00106 }
00107 
00108 AccountInterfaceStorageInterface::AccountInterfaceStorageInterface(Tp::DBusProxy *proxy)
00109     : Tp::AbstractInterface(proxy, staticInterfaceName())
00110 {
00111 }
00112 
00113 AccountInterfaceStorageInterface::AccountInterfaceStorageInterface(const Tp::Client::AccountInterface& mainInterface)
00114     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00115 {
00116 }
00117 
00118 AccountInterfaceStorageInterface::AccountInterfaceStorageInterface(const Tp::Client::AccountInterface& mainInterface, QObject *parent)
00119     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00120 {
00121 }
00122 
00123 void AccountInterfaceStorageInterface::invalidate(Tp::DBusProxy *proxy,
00124         const QString &error, const QString &message)
00125 {
00126 
00127     Tp::AbstractInterface::invalidate(proxy, error, message);
00128 }
00129 }
00130 }


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00975.html0000644000175200001440000000514512000060453021637 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ChannelOriginatorMap Member List
This is the complete list of members for Tp::ChannelOriginatorMap, including all inherited members.
ChannelOriginatorMap()Tp::ChannelOriginatorMap [inline]
ChannelOriginatorMap(const QMap< uint, QDBusObjectPath > &a)Tp::ChannelOriginatorMap [inline]
operator=(const QMap< uint, QDBusObjectPath > &a)Tp::ChannelOriginatorMap [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00009.html0000644000175200001440000000322712000060453021622 0ustar00collabora-develusers00000000000000 Contact Messenger Example
   Home · All Classes · All Namespaces · Modules · Functions · Files
Contact Messenger Example


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00514_source.html0000644000175200001440000002431612000060453023205 0ustar00collabora-develusers00000000000000 cli-media-session-handler.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-media-session-handler.h
00001 /*
00002  * This file contains D-Bus client proxy classes generated by qt-client-gen.py.
00003  *
00004  * This file can be distributed under the same terms as the specification from
00005  * which it was generated.
00006  */
00007 
00008 #ifndef IN_TP_QT_HEADER
00009 #error IN_TP_QT_HEADER
00010 #endif
00011 
00012 #include <TelepathyQt/Types>
00013 
00014 #include <QtGlobal>
00015 
00016 #include <QString>
00017 #include <QObject>
00018 #include <QVariant>
00019 
00020 #include <QDBusPendingReply>
00021 
00022 #include <TelepathyQt/AbstractInterface>
00023 #include <TelepathyQt/DBusProxy>
00024 #include <TelepathyQt/Global>
00025 
00026 namespace Tp
00027 {
00028 class PendingVariant;
00029 class PendingOperation;
00030 }
00031 
00032 namespace Tp
00033 {
00034 namespace Client
00035 {
00036 
00044 class TP_QT_EXPORT MediaSessionHandlerInterface : public Tp::AbstractInterface
00045 {
00046     Q_OBJECT
00047 
00048 public:
00055     static inline QLatin1String staticInterfaceName()
00056     {
00057         return QLatin1String("org.freedesktop.Telepathy.Media.SessionHandler");
00058     }
00059 
00067     MediaSessionHandlerInterface(
00068         const QString& busName,
00069         const QString& objectPath,
00070         QObject* parent = 0
00071     );
00072 
00081     MediaSessionHandlerInterface(
00082         const QDBusConnection& connection,
00083         const QString& busName,
00084         const QString& objectPath,
00085         QObject* parent = 0
00086     );
00087 
00094     MediaSessionHandlerInterface(Tp::DBusProxy *proxy);
00095 
00102     Tp::PendingVariantMap *requestAllProperties() const
00103     {
00104         return internalRequestAllProperties();
00105     }
00106 
00107 public Q_SLOTS:
00121     inline QDBusPendingReply<> Error(uint errorCode, const QString& message, int timeout = -1)
00122     {
00123         if (!invalidationReason().isEmpty()) {
00124             return QDBusPendingReply<>(QDBusMessage::createError(
00125                 invalidationReason(),
00126                 invalidationMessage()
00127             ));
00128         }
00129 
00130         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00131                 this->staticInterfaceName(), QLatin1String("Error"));
00132         callMessage << QVariant::fromValue(errorCode) << QVariant::fromValue(message);
00133         return this->connection().asyncCall(callMessage, timeout);
00134     }
00135 
00148     inline QDBusPendingReply<> Ready(int timeout = -1)
00149     {
00150         if (!invalidationReason().isEmpty()) {
00151             return QDBusPendingReply<>(QDBusMessage::createError(
00152                 invalidationReason(),
00153                 invalidationMessage()
00154             ));
00155         }
00156 
00157         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00158                 this->staticInterfaceName(), QLatin1String("Ready"));
00159         return this->connection().asyncCall(callMessage, timeout);
00160     }
00161 
00162 Q_SIGNALS:
00184     void NewStreamHandler(const QDBusObjectPath& streamHandler, uint ID, uint mediaType, uint direction);
00185 
00186 protected:
00187     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
00188 };
00189 }
00190 }
00191 Q_DECLARE_METATYPE(Tp::Client::MediaSessionHandlerInterface*)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00482_source.html0000644000175200001440000001254112000060453023206 0ustar00collabora-develusers00000000000000 channel.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
channel.h
00001 
00022 #ifndef _TelepathyQt_Farstream_channel_h_HEADER_GUARD_
00023 #define _TelepathyQt_Farstream_channel_h_HEADER_GUARD_
00024 
00025 #ifndef IN_TP_QT_FARSTREAM_HEADER
00026 #error IN_TP_QT_FARSTREAM_HEADER
00027 #endif
00028 
00029 #include <TelepathyQt/Farstream/Global>
00030 #include <TelepathyQt/Types>
00031 
00032 #include <TelepathyQt/PendingOperation>
00033 #include <TelepathyQt/RefCounted>
00034 
00035 typedef struct _TfChannel TfChannel;
00036 
00037 namespace Tp
00038 {
00039 namespace Farstream
00040 {
00041 
00042 class TP_QT_FS_EXPORT PendingChannel : public Tp::PendingOperation
00043 {
00044     Q_OBJECT
00045     Q_DISABLE_COPY(PendingChannel)
00046 
00047 public:
00048     ~PendingChannel();
00049 
00050     TfChannel *tfChannel() const;
00051     CallChannelPtr callChannel() const;
00052 
00053 private:
00054     TP_QT_FS_NO_EXPORT PendingChannel(const CallChannelPtr &channel);
00055 
00056     friend PendingChannel *createChannel(const CallChannelPtr &channel);
00057 
00058     struct Private;
00059     friend struct Private;
00060     Private *mPriv;
00061 };
00062 
00063 TP_QT_FS_EXPORT PendingChannel *createChannel(const CallChannelPtr &channel);
00064 
00065 } // Farstream
00066 } // Tp
00067 
00068 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00289.html0000644000175200001440000000706612000060453021641 0ustar00collabora-develusers00000000000000 Tp::NotDelegatedError Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::NotDelegatedError Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.


Member Data Documentation

the name of a D-Bus error describing what went wrong.

a human-readable informative error message.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00403.html0000644000175200001440000020326712000060453021626 0ustar00collabora-develusers00000000000000 Tp::StreamTubeServer Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::StreamTubeServer Class Reference

The StreamTubeServer class is a Handler implementation for outgoing Stream Tube channels, allowing an application to easily export a TCP network server over Telepathy Tubes without worrying about the channel dispatching details. More...

#include <TelepathyQt/StreamTubeServer>

Inherits Tp::RefCounted.

List of all members.

Classes

Signals

  • void tubeRequested (const Tp::AccountPtr &account, const Tp::OutgoingStreamTubeChannelPtr &tube, const QDateTime &userActionTime, const Tp::ChannelRequestHints &hints)
  • void tubeClosed (const Tp::AccountPtr &account, const Tp::OutgoingStreamTubeChannelPtr &tube, const QString &error, const QString &message)
  • void newTcpConnection (const QHostAddress &sourceAddress, quint16 sourcePort, const Tp::AccountPtr &account, const Tp::ContactPtr &contact, const Tp::OutgoingStreamTubeChannelPtr &tube)
  • void tcpConnectionClosed (const QHostAddress &sourceAddress, quint16 sourcePort, const Tp::AccountPtr &account, const Tp::ContactPtr &contact, const QString &error, const QString &message, const Tp::OutgoingStreamTubeChannelPtr &tube)

Public Member Functions

Static Public Member Functions

  • static StreamTubeServerPtr create (const QStringList &p2pServices, const QStringList &roomServices=QStringList(), const QString &clientName=QString(), bool monitorConnections=false, const AccountFactoryConstPtr &accountFactory=AccountFactory::create(QDBusConnection::sessionBus()), const ConnectionFactoryConstPtr &connectionFactory=ConnectionFactory::create(QDBusConnection::sessionBus()), const ChannelFactoryConstPtr &channelFactory=ChannelFactory::create(QDBusConnection::sessionBus()), const ContactFactoryConstPtr &contactFactory=ContactFactory::create())
  • static StreamTubeServerPtr create (const QDBusConnection &bus, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory, const QStringList &p2pServices, const QStringList &roomServices=QStringList(), const QString &clientName=QString(), bool monitorConnections=false)
  • static StreamTubeServerPtr create (const AccountManagerPtr &accountManager, const QStringList &p2pServices, const QStringList &roomServices=QStringList(), const QString &clientName=QString(), bool monitorConnections=false)
  • static StreamTubeServerPtr create (const ClientRegistrarPtr &registrar, const QStringList &p2pServices, const QStringList &roomServices=QStringList(), const QString &clientName=QString(), bool monitorConnections=false)

Detailed Description

The StreamTubeServer class is a Handler implementation for outgoing Stream Tube channels, allowing an application to easily export a TCP network server over Telepathy Tubes without worrying about the channel dispatching details.

Telepathy Tubes is a technology for connecting arbitrary applications together through the IM network (and sometimes with direct peer-to-peer connections), such that issues like firewall/NAT traversal are automatically handled. Stream Tubes in particular offer properties similar to SOCK_STREAM sockets. The StreamTubeServer class exports such a bytestream socket server over the tubes it handles as a Telepathy Handler Client; the StreamTubeClient class is the counterpart, enabling TCP/UNIX socket clients to connect to services from such exported servers offered to them via tubes.

Both peer-to-peer (TargetHandleType == HandleTypeContact) and group (TargetHandleType == HandleTypeRoom) channels are supported, and it's possible to specify the tube services to handle for each separately. It is also possible to not advertise handling capability for ANY tube service; instead just using the StreamTubeServer to handle tubes on an one-off basis by passing its corresponding Client service name as the preferredHandler when requesting tubes via the Account::createStreamTube() methods (or equivalent).

Connection monitoring allows associating incoming connections on the exported server socket with the corresponding remote contacts. This allows an application to show the details of and/or initiate further communication with the remote contacts, without considering the actual tube channels the connections are being made through at all (in particular, their Channel::targetContact() accessor for peer-to-peer and the OutgoingStreamTubeChannel::connectionsForSourceAddresses() accessor for group tubes).

Enabling connection monitoring adds a small overhead and latency to handling each incoming tube and signaling each new incoming connection over them, though, so use it only when needed. Additionally, some protocol backends or environments they're running in might not support the SocketAccessControlPort mechanism, in which case the source address won't be reported for connections through them. Even in this case, the remote contacts can be associated by accepting one incoming socket connection at a time, and waiting for the corresponding contact to be signaled (although its source address will be invalid, it's the only possibility given its the only accepted connection). However, it's not necessary to do this e.g. with the Gabble XMPP backend, because it fully supports the required mechanism.

A service activated Handler can be implemented using StreamTubeServer by passing a predefined clientName manually to the chosen create() method, and installing Telepathy .client and D-Bus .service files declaring the implemented tube services as channel classes and a path to the executable. If this is not needed, the clientName can be omitted, in which case a random unique client name is generated and used instead.

StreamTubeServer shares Account, Connection and Channel proxies and Contact objects with the rest of the application as long as a reference to the AccountManager, ClientRegistrar, or the factories used elsewhere is passed to the create() method. A stand-alone tube service Handler can get away without passing these however, or just passing select factories to make the desired features prepared and subclasses employed for these objects for their own convenience.

Whichever method is used, the ChannelFactory (perhaps indirectly) given must construct OutgoingStreamTubeChannel instances or subclasses thereof for all channel classes corresponding to the tube services to handle. This is the default; overriding it without obeying these constraints using ChannelFactory::setSubclassForOutgoingStreamTubes() or the related methods for room tubes prevents StreamTubeServer from operating correctly.

Todo:

Coin up a small Python script or alike to easily generate the .client and .service files. (fd.o #41614)

Support exporting Unix sockets as well. (fd.o #41615)


Constructor & Destructor Documentation

Class destructor.


Member Function Documentation

StreamTubeServerPtr Tp::StreamTubeServer::create ( const QStringList &  p2pServices,
const QStringList &  roomServices = QStringList(),
const QString &  clientName = QString(),
bool  monitorConnections = false,
const AccountFactoryConstPtr &  accountFactory = AccountFactory::create(QDBusConnection::sessionBus()),
const ConnectionFactoryConstPtr &  connectionFactory = ConnectionFactory::create(QDBusConnection::sessionBus()),
const ChannelFactoryConstPtr &  channelFactory = ChannelFactory::create(QDBusConnection::sessionBus()),
const ContactFactoryConstPtr &  contactFactory = ContactFactory::create() 
) [static]

Create a new StreamTubeServer, which will register itself on the session bus using an internal ClientRegistrar and use the given factories.

Parameters:
p2pServicesNames of the tube services to handle on peer-to-peer tube channels.
roomServicesNames of the tube services to handle on room/group tube channels.
clientNameThe client name (without the org.freedesktop.Telepathy.Client. prefix).
monitorConnectionsWhether to enable connection monitoring or not.
accountFactoryThe account factory to use.
connectionFactoryThe connection factory to use.
channelFactoryThe channel factory to use.
contactFactoryThe contact factory to use.
StreamTubeServerPtr Tp::StreamTubeServer::create ( const QDBusConnection &  bus,
const AccountFactoryConstPtr &  accountFactory,
const ConnectionFactoryConstPtr &  connectionFactory,
const ChannelFactoryConstPtr &  channelFactory,
const ContactFactoryConstPtr &  contactFactory,
const QStringList &  p2pServices,
const QStringList &  roomServices = QStringList(),
const QString &  clientName = QString(),
bool  monitorConnections = false 
) [static]

Create a new StreamTubeServer, which will register itself on the given bus using an internal ClientRegistrar and use the given factories.

The factories must all be created for the given bus.

Parameters:
busConnection to the bus to register on.
accountFactoryThe account factory to use.
connectionFactoryThe connection factory to use.
channelFactoryThe channel factory to use.
contactFactoryThe contact factory to use.
p2pServicesNames of the tube services to handle on peer-to-peer tube channels.
roomServicesNames of the tube services to handle on room/group tube channels.
clientNameThe client name (without the org.freedesktop.Telepathy.Client. prefix).
monitorConnectionsWhether to enable connection monitoring or not.
StreamTubeServerPtr Tp::StreamTubeServer::create ( const AccountManagerPtr &  accountManager,
const QStringList &  p2pServices,
const QStringList &  roomServices = QStringList(),
const QString &  clientName = QString(),
bool  monitorConnections = false 
) [static]

Create a new StreamTubeServer, which will register itself on the bus of and share objects with the given accountManager, creating an internal ClientRegistrar.

Parameters:
accountManagerA pointer to the account manager to link up with.
p2pServicesNames of the tube services to handle on peer-to-peer tube channels.
roomServicesNames of the tube services to handle on room/group tube channels.
clientNameThe client name (without the org.freedesktop.Telepathy.Client. prefix).
monitorConnectionsWhether to enable connection monitoring or not.
StreamTubeServerPtr Tp::StreamTubeServer::create ( const ClientRegistrarPtr &  registrar,
const QStringList &  p2pServices,
const QStringList &  roomServices = QStringList(),
const QString &  clientName = QString(),
bool  monitorConnections = false 
) [static]

Create a new StreamTubeServer, which will register itself on the bus of and using the given client registrar, and share objects with it.

Parameters:
registrarThe client registrar to use.
p2pServicesNames of the tube services to handle on peer-to-peer tube channels.
roomServicesNames of the tube services to handle on room/group tube channels.
clientNameThe client name (without the org.freedesktop.Telepathy.Client. prefix).
monitorConnectionsWhether to enable connection monitoring or not.
ClientRegistrarPtr Tp::StreamTubeServer::registrar ( ) const

Return the client registrar used by the server to register itself as a Handler client.

This is the registrar originally passed to create(const ClientRegistrarPtr &, const QStringList &, const QStringList &, const QString &, bool) if that was used, and an internally constructed one otherwise. In any case, it can be used to e.g. register further clients like any other ClientRegistrar.

Returns:
A pointer to the registrar.

Return the Telepathy Client name of the server.

Returns:
The name, without the org.freedesktop.Telepathy.Client. prefix of the full D-Bus service name.

Return whether the server has been successfully registered or not.

Registration is attempted, at the latest, when a socket is first exported using exportTcpSocket(). It can fail e.g. because the connection to the bus has failed, or a predefined clientName has been passed to create(), and a Client with the same name is already registered. Typically, failure registering would be a fatal error for a stand-alone tube handler, but only a warning event for an application serving other purposes. In any case, a high-quality user of the API will check the return value of this accessor after exporting their socket.

Returns:
true if the server has been successfully registered, false if not.

Return whether connection monitoring is enabled on this server.

For technical reasons, connection monitoring can't be enabled when the server is already running, so there is no corresponding setter method. It has to be enabled by passing true as the monitorConnections parameter to the create() method.

If connection monitoring isn't enabled, newTcpConnection() and tcpConnectionClosed() won't be emitted and tcpConnections() won't be populated.

Returns:
true if monitoring is enabled, false if not.
QPair< QHostAddress, quint16 > Tp::StreamTubeServer::exportedTcpSocketAddress ( ) const

Return the host address and port of the currently exported TCP socket, if any.

QHostAddress::Null is reported as the address and 0 as the port if no TCP socket has yet been successfully exported.

Returns:
The host address and port values in a pair structure.

Return the fixed parameters, if any, which are sent along when offering the exported socket on all handled tubes.

To prevent accidentally leaving the current parameters to be sent when offering a different socket, or vice versa, the parameters can only be set together with the socket using exportTcpSocket(). Parameters often contain sensitive information such as session identifiers or authentication credentials, which could then be used to maliciously access the service listening on the other socket.

If a custom dynamic ParametersGenerator was passed to exportTcpSocket() instead of a set of fixed parameters, an empty set of parameters is returned.

Returns:
The parameters in a string-variant map.
void Tp::StreamTubeServer::exportTcpSocket ( const QHostAddress &  address,
quint16  port,
const QVariantMap &  parameters = QVariantMap() 
)

Set the server to offer the socket listening at the given (address, port) combination as the local endpoint of tubes handled in the future.

A fixed set of protocol bootstrapping parameters can optionally be set to be sent along with all tube offers until the next call to exportTcpSocket(). See the ParametersGenerator documentation for an in-depth description of the parameter transfer mechanism, and a more flexible way to vary the parameters between each handled tube.

The handler is registered on the bus at the latest when this method or another exportTcpSocket() overload is called for the first time, so one should check the return value of isRegistered() at that point to verify that was successful.

Parameters:
addressThe listen address of the socket.
portThe port of the socket.
parametersThe bootstrapping parameters in a string-value map.
void Tp::StreamTubeServer::exportTcpSocket ( const QTcpServer *  server,
const QVariantMap &  parameters = QVariantMap() 
)

Set the StreamTubeServer to offer the already listening TCP server as the local endpoint of tubes handled in the future.

This is just a convenience wrapper around exportTcpSocket(const QHostAddress &, quint16, const QVariantMap &) to be used when the TCP server code is implemented using the QtNetwork facilities.

A fixed set of protocol bootstrapping parameters can optionally be set to be sent along with all tube offers until the next call to exportTcpSocket(). See the ParametersGenerator documentation for an in-depth description of the parameter transfer mechanism, and a more flexible way to vary the parameters between each handled tube.

Parameters:
serverA pointer to the TCP server.
parametersThe bootstrapping parameters in a string-value map.
void Tp::StreamTubeServer::exportTcpSocket ( const QHostAddress &  address,
quint16  port,
ParametersGenerator generator 
)

Set the server to offer the socket listening at the given address - port combination as the local endpoint of tubes handled in the future, sending the parameters from the given generator along with the offers.

The handler is registered on the bus at the latest when this method or another exportTcpSocket() overload is called for the first time, so one should check the return value of isRegistered() at that point to verify that was successful.

Parameters:
addressThe listen address of the socket.
portThe port of the socket.
generatorA pointer to the bootstrapping parameters generator.
void Tp::StreamTubeServer::exportTcpSocket ( const QTcpServer *  server,
ParametersGenerator generator 
)

Set the server to offer the already listening TCP server as the local endpoint of tubes handled in the future, sending the parameters from the given generator along with the offers.

This is just a convenience wrapper around exportTcpSocket(const QHostAddress &, quint16, ParametersGenerator *) to be used when the TCP server code is implemented using the QtNetwork facilities.

Parameters:
serverA pointer to the TCP server.
generatorA pointer to the bootstrapping parameters generator.

Return the tubes currently handled by the server.

Returns:
A list of Tube structures containing pointers to the account and tube channel for each tube.
QHash< QPair< QHostAddress, quint16 >, StreamTubeServer::RemoteContact > Tp::StreamTubeServer::tcpConnections ( ) const

Return the ongoing TCP connections over tubes handled by this server.

The returned mapping has the connection source addresses as keys and the contacts along with the accounts which can be used to reach them as values. Connections through protocol backends which don't support SocketAccessControlPort will be included as the potentially many values for the null source address key, the pair (QHostAddress::Null, 0).

This is effectively a state recovery accessor corresponding to the change notification signals newTcpConnection() and tcpConnectionClosed().

The mapping is only populated if connection monitoring was requested when creating the server (so monitorsConnections() returns true).

Returns:
The connections in a mapping with pairs of their source host addresses and ports as keys and structures containing pointers to the account and remote contacts they're from as values.
void Tp::StreamTubeServer::tubeRequested ( const Tp::AccountPtr &  account,
const Tp::OutgoingStreamTubeChannelPtr &  tube,
const QDateTime &  userActionTime,
const Tp::ChannelRequestHints hints 
) [signal]

Emitted when a tube has been requested for one of our services, and we've began handling it.

This is emitted before invoking the ParametersGenerator, if any, for the tube.

Parameters:
accountA pointer to the account from which the tube was requested from.
tubeA pointer to the actual tube channel.
userActionTimeThe time the request occurred at, if it was an user action. Should be used for focus stealing prevention.
hintsThe hints passed to the request, if any.
void Tp::StreamTubeServer::tubeClosed ( const Tp::AccountPtr &  account,
const Tp::OutgoingStreamTubeChannelPtr &  tube,
const QString &  error,
const QString &  message 
) [signal]

Emitted when a tube we've been handling (previously announced with tubeRequested()) has encountered an error or has otherwise been closed from further communication.

Parameters:
accountA pointer to the account from which the tube was requested from.
tubeA pointer to the actual tube channel.
errorThe D-Bus error name corresponding to the reason for the closure.
messageA freeform debug message associated with the error.
void Tp::StreamTubeServer::newTcpConnection ( const QHostAddress &  sourceAddress,
quint16  sourcePort,
const Tp::AccountPtr &  account,
const Tp::ContactPtr &  contact,
const Tp::OutgoingStreamTubeChannelPtr &  tube 
) [signal]

Emitted when we have picked up a new TCP connection to the (current or previous) exported server socket. This can be used to associate connections the protocol backend relays to the exported socket with the remote contact who originally initiated them in the other end of the tube.

This is only emitted if connection monitoring was enabled when creating the StreamTubeServer. Additionally, if the protocol backend the connection is from doesn't support the SocketAccessControlPort mechanism, the source address and port will always be invalid.

Parameters:
sourceAddressThe source address of the connection, or QHostAddress::Null if it can't be resolved.
sourcePortThe source port of the connection, or 0 if it can't be resolved.
accountA pointer to the account through which the remote contact can be reached.
contactA pointer to the remote contact object.
tubeA pointer to the tube channel through which the connection has been made.
void Tp::StreamTubeServer::tcpConnectionClosed ( const QHostAddress &  sourceAddress,
quint16  sourcePort,
const Tp::AccountPtr &  account,
const Tp::ContactPtr &  contact,
const QString &  error,
const QString &  message,
const Tp::OutgoingStreamTubeChannelPtr &  tube 
) [signal]

Emitted when a TCP connection (previously announced with newTcpConnection()) through one of our handled tubes has been closed due to an error or by a graceful disconnect (in which case the error is TP_QT_ERROR_DISCONNECTED).

This is only emitted if connection monitoring was enabled when creating the StreamTubeServer. Additionally, if the protocol backend the connection is from doesn't support the SocketAccessControlPort mechanism, the source address and port will always be invalid.

Parameters:
sourceAddressThe source address of the connection, or QHostAddress::Null if it couldn't be resolved.
sourcePortThe source port of the connection, or 0 if it couldn't be resolved.
accountA pointer to the account through which the remote contact can be reached.
contactA pointer to the remote contact object.
errorThe D-Bus error name corresponding to the reason for the closure.
messageA freeform debug message associated with the error.
tubeA pointer to the tube channel through which the connection has been made.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00508_source.html0000644000175200001440000072773212000060453023224 0ustar00collabora-develusers00000000000000 cli-connection.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-connection.h
00001 /*
00002  * This file contains D-Bus client proxy classes generated by qt-client-gen.py.
00003  *
00004  * This file can be distributed under the same terms as the specification from
00005  * which it was generated.
00006  */
00007 
00008 #ifndef IN_TP_QT_HEADER
00009 #error IN_TP_QT_HEADER
00010 #endif
00011 
00012 #include <TelepathyQt/Types>
00013 
00014 #include <QtGlobal>
00015 
00016 #include <QString>
00017 #include <QObject>
00018 #include <QVariant>
00019 
00020 #include <QDBusPendingReply>
00021 
00022 #include <TelepathyQt/AbstractInterface>
00023 #include <TelepathyQt/DBusProxy>
00024 #include <TelepathyQt/Global>
00025 
00026 namespace Tp
00027 {
00028 class PendingVariant;
00029 class PendingOperation;
00030 }
00031 
00032 namespace Tp
00033 {
00034 namespace Client
00035 {
00036 
00044 class TP_QT_EXPORT ConnectionInterface : public Tp::AbstractInterface
00045 {
00046     Q_OBJECT
00047 
00048 public:
00055     static inline QLatin1String staticInterfaceName()
00056     {
00057         return QLatin1String("org.freedesktop.Telepathy.Connection");
00058     }
00059 
00067     ConnectionInterface(
00068         const QString& busName,
00069         const QString& objectPath,
00070         QObject* parent = 0
00071     );
00072 
00081     ConnectionInterface(
00082         const QDBusConnection& connection,
00083         const QString& busName,
00084         const QString& objectPath,
00085         QObject* parent = 0
00086     );
00087 
00094     ConnectionInterface(Tp::DBusProxy *proxy);
00095 
00127     inline Tp::PendingVariant *requestPropertyInterfaces() const
00128     {
00129         return internalRequestProperty(QLatin1String("Interfaces"));
00130     }
00131 
00145     inline Tp::PendingVariant *requestPropertySelfHandle() const
00146     {
00147         return internalRequestProperty(QLatin1String("SelfHandle"));
00148     }
00149 
00168     inline Tp::PendingVariant *requestPropertyStatus() const
00169     {
00170         return internalRequestProperty(QLatin1String("Status"));
00171     }
00172 
00187     inline Tp::PendingVariant *requestPropertyHasImmortalHandles() const
00188     {
00189         return internalRequestProperty(QLatin1String("HasImmortalHandles"));
00190     }
00191 
00198     Tp::PendingVariantMap *requestAllProperties() const
00199     {
00200         return internalRequestAllProperties();
00201     }
00202 
00203 public Q_SLOTS:
00221     inline QDBusPendingReply<> Connect(int timeout = -1)
00222     {
00223         if (!invalidationReason().isEmpty()) {
00224             return QDBusPendingReply<>(QDBusMessage::createError(
00225                 invalidationReason(),
00226                 invalidationMessage()
00227             ));
00228         }
00229 
00230         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00231                 this->staticInterfaceName(), QLatin1String("Connect"));
00232         return this->connection().asyncCall(callMessage, timeout);
00233     }
00234 
00247     inline QDBusPendingReply<> Disconnect(int timeout = -1)
00248     {
00249         if (!invalidationReason().isEmpty()) {
00250             return QDBusPendingReply<>(QDBusMessage::createError(
00251                 invalidationReason(),
00252                 invalidationMessage()
00253             ));
00254         }
00255 
00256         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00257                 this->staticInterfaceName(), QLatin1String("Disconnect"));
00258         return this->connection().asyncCall(callMessage, timeout);
00259     }
00260 
00279     inline QDBusPendingReply<QStringList> GetInterfaces(int timeout = -1)
00280     {
00281         if (!invalidationReason().isEmpty()) {
00282             return QDBusPendingReply<QStringList>(QDBusMessage::createError(
00283                 invalidationReason(),
00284                 invalidationMessage()
00285             ));
00286         }
00287 
00288         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00289                 this->staticInterfaceName(), QLatin1String("GetInterfaces"));
00290         return this->connection().asyncCall(callMessage, timeout);
00291     }
00292 
00307     inline QDBusPendingReply<QString> GetProtocol(int timeout = -1)
00308     {
00309         if (!invalidationReason().isEmpty()) {
00310             return QDBusPendingReply<QString>(QDBusMessage::createError(
00311                 invalidationReason(),
00312                 invalidationMessage()
00313             ));
00314         }
00315 
00316         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00317                 this->staticInterfaceName(), QLatin1String("GetProtocol"));
00318         return this->connection().asyncCall(callMessage, timeout);
00319     }
00320 
00336     inline QDBusPendingReply<uint> GetSelfHandle(int timeout = -1)
00337     {
00338         if (!invalidationReason().isEmpty()) {
00339             return QDBusPendingReply<uint>(QDBusMessage::createError(
00340                 invalidationReason(),
00341                 invalidationMessage()
00342             ));
00343         }
00344 
00345         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00346                 this->staticInterfaceName(), QLatin1String("GetSelfHandle"));
00347         return this->connection().asyncCall(callMessage, timeout);
00348     }
00349 
00364     inline QDBusPendingReply<uint> GetStatus(int timeout = -1)
00365     {
00366         if (!invalidationReason().isEmpty()) {
00367             return QDBusPendingReply<uint>(QDBusMessage::createError(
00368                 invalidationReason(),
00369                 invalidationMessage()
00370             ));
00371         }
00372 
00373         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00374                 this->staticInterfaceName(), QLatin1String("GetStatus"));
00375         return this->connection().asyncCall(callMessage, timeout);
00376     }
00377 
00420     inline QDBusPendingReply<> HoldHandles(uint handleType, const Tp::UIntList& handles, int timeout = -1)
00421     {
00422         if (!invalidationReason().isEmpty()) {
00423             return QDBusPendingReply<>(QDBusMessage::createError(
00424                 invalidationReason(),
00425                 invalidationMessage()
00426             ));
00427         }
00428 
00429         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00430                 this->staticInterfaceName(), QLatin1String("HoldHandles"));
00431         callMessage << QVariant::fromValue(handleType) << QVariant::fromValue(handles);
00432         return this->connection().asyncCall(callMessage, timeout);
00433     }
00434 
00458     inline QDBusPendingReply<QStringList> InspectHandles(uint handleType, const Tp::UIntList& handles, int timeout = -1)
00459     {
00460         if (!invalidationReason().isEmpty()) {
00461             return QDBusPendingReply<QStringList>(QDBusMessage::createError(
00462                 invalidationReason(),
00463                 invalidationMessage()
00464             ));
00465         }
00466 
00467         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00468                 this->staticInterfaceName(), QLatin1String("InspectHandles"));
00469         callMessage << QVariant::fromValue(handleType) << QVariant::fromValue(handles);
00470         return this->connection().asyncCall(callMessage, timeout);
00471     }
00472 
00487     inline QDBusPendingReply<Tp::ChannelInfoList> ListChannels(int timeout = -1)
00488     {
00489         if (!invalidationReason().isEmpty()) {
00490             return QDBusPendingReply<Tp::ChannelInfoList>(QDBusMessage::createError(
00491                 invalidationReason(),
00492                 invalidationMessage()
00493             ));
00494         }
00495 
00496         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00497                 this->staticInterfaceName(), QLatin1String("ListChannels"));
00498         return this->connection().asyncCall(callMessage, timeout);
00499     }
00500 
00526     inline QDBusPendingReply<> ReleaseHandles(uint handleType, const Tp::UIntList& handles, int timeout = -1)
00527     {
00528         if (!invalidationReason().isEmpty()) {
00529             return QDBusPendingReply<>(QDBusMessage::createError(
00530                 invalidationReason(),
00531                 invalidationMessage()
00532             ));
00533         }
00534 
00535         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00536                 this->staticInterfaceName(), QLatin1String("ReleaseHandles"));
00537         callMessage << QVariant::fromValue(handleType) << QVariant::fromValue(handles);
00538         return this->connection().asyncCall(callMessage, timeout);
00539     }
00540 
00620     inline QDBusPendingReply<QDBusObjectPath> RequestChannel(const QString& type, uint handleType, uint handle, bool suppressHandler, int timeout = -1)
00621     {
00622         if (!invalidationReason().isEmpty()) {
00623             return QDBusPendingReply<QDBusObjectPath>(QDBusMessage::createError(
00624                 invalidationReason(),
00625                 invalidationMessage()
00626             ));
00627         }
00628 
00629         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00630                 this->staticInterfaceName(), QLatin1String("RequestChannel"));
00631         callMessage << QVariant::fromValue(type) << QVariant::fromValue(handleType) << QVariant::fromValue(handle) << QVariant::fromValue(suppressHandler);
00632         return this->connection().asyncCall(callMessage, timeout);
00633     }
00634 
00675     inline QDBusPendingReply<Tp::UIntList> RequestHandles(uint handleType, const QStringList& identifiers, int timeout = -1)
00676     {
00677         if (!invalidationReason().isEmpty()) {
00678             return QDBusPendingReply<Tp::UIntList>(QDBusMessage::createError(
00679                 invalidationReason(),
00680                 invalidationMessage()
00681             ));
00682         }
00683 
00684         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00685                 this->staticInterfaceName(), QLatin1String("RequestHandles"));
00686         callMessage << QVariant::fromValue(handleType) << QVariant::fromValue(identifiers);
00687         return this->connection().asyncCall(callMessage, timeout);
00688     }
00689 
00783     inline QDBusPendingReply<> AddClientInterest(const QStringList& tokens, int timeout = -1)
00784     {
00785         if (!invalidationReason().isEmpty()) {
00786             return QDBusPendingReply<>(QDBusMessage::createError(
00787                 invalidationReason(),
00788                 invalidationMessage()
00789             ));
00790         }
00791 
00792         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00793                 this->staticInterfaceName(), QLatin1String("AddClientInterest"));
00794         callMessage << QVariant::fromValue(tokens);
00795         return this->connection().asyncCall(callMessage, timeout);
00796     }
00797 
00829     inline QDBusPendingReply<> RemoveClientInterest(const QStringList& tokens, int timeout = -1)
00830     {
00831         if (!invalidationReason().isEmpty()) {
00832             return QDBusPendingReply<>(QDBusMessage::createError(
00833                 invalidationReason(),
00834                 invalidationMessage()
00835             ));
00836         }
00837 
00838         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00839                 this->staticInterfaceName(), QLatin1String("RemoveClientInterest"));
00840         callMessage << QVariant::fromValue(tokens);
00841         return this->connection().asyncCall(callMessage, timeout);
00842     }
00843 
00844 Q_SIGNALS:
00856     void SelfHandleChanged(uint selfHandle);
00857 
00901     void NewChannel(const QDBusObjectPath& objectPath, const QString& channelType, uint handleType, uint handle, bool suppressHandler);
00902 
00972     void ConnectionError(const QString& error, const QVariantMap& details);
00973 
00990     void StatusChanged(uint status, uint reason);
00991 
00992 protected:
00993     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
00994 };
00995 
01003 class TP_QT_EXPORT ConnectionInterfaceAddressingInterface : public Tp::AbstractInterface
01004 {
01005     Q_OBJECT
01006 
01007 public:
01014     static inline QLatin1String staticInterfaceName()
01015     {
01016         return QLatin1String("org.freedesktop.Telepathy.Connection.Interface.Addressing1");
01017     }
01018 
01026     ConnectionInterfaceAddressingInterface(
01027         const QString& busName,
01028         const QString& objectPath,
01029         QObject* parent = 0
01030     );
01031 
01040     ConnectionInterfaceAddressingInterface(
01041         const QDBusConnection& connection,
01042         const QString& busName,
01043         const QString& objectPath,
01044         QObject* parent = 0
01045     );
01046 
01053     ConnectionInterfaceAddressingInterface(Tp::DBusProxy *proxy);
01054 
01062     explicit ConnectionInterfaceAddressingInterface(const Tp::Client::ConnectionInterface& mainInterface);
01063 
01071     ConnectionInterfaceAddressingInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject* parent);
01072 
01079     Tp::PendingVariantMap *requestAllProperties() const
01080     {
01081         return internalRequestAllProperties();
01082     }
01083 
01084 public Q_SLOTS:
01174     inline QDBusPendingReply<Tp::AddressingNormalizationMap, Tp::ContactAttributesMap> GetContactsByVCardField(const QString& field, const QStringList& addresses, const QStringList& interfaces, int timeout = -1)
01175     {
01176         if (!invalidationReason().isEmpty()) {
01177             return QDBusPendingReply<Tp::AddressingNormalizationMap, Tp::ContactAttributesMap>(QDBusMessage::createError(
01178                 invalidationReason(),
01179                 invalidationMessage()
01180             ));
01181         }
01182 
01183         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
01184                 this->staticInterfaceName(), QLatin1String("GetContactsByVCardField"));
01185         callMessage << QVariant::fromValue(field) << QVariant::fromValue(addresses) << QVariant::fromValue(interfaces);
01186         return this->connection().asyncCall(callMessage, timeout);
01187     }
01188 
01259     inline QDBusPendingReply<Tp::AddressingNormalizationMap, Tp::ContactAttributesMap> GetContactsByURI(const QStringList& URIs, const QStringList& interfaces, int timeout = -1)
01260     {
01261         if (!invalidationReason().isEmpty()) {
01262             return QDBusPendingReply<Tp::AddressingNormalizationMap, Tp::ContactAttributesMap>(QDBusMessage::createError(
01263                 invalidationReason(),
01264                 invalidationMessage()
01265             ));
01266         }
01267 
01268         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
01269                 this->staticInterfaceName(), QLatin1String("GetContactsByURI"));
01270         callMessage << QVariant::fromValue(URIs) << QVariant::fromValue(interfaces);
01271         return this->connection().asyncCall(callMessage, timeout);
01272     }
01273 
01274 protected:
01275     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
01276 };
01277 
01285 class TP_QT_EXPORT ConnectionInterfaceAliasingInterface : public Tp::AbstractInterface
01286 {
01287     Q_OBJECT
01288 
01289 public:
01296     static inline QLatin1String staticInterfaceName()
01297     {
01298         return QLatin1String("org.freedesktop.Telepathy.Connection.Interface.Aliasing");
01299     }
01300 
01308     ConnectionInterfaceAliasingInterface(
01309         const QString& busName,
01310         const QString& objectPath,
01311         QObject* parent = 0
01312     );
01313 
01322     ConnectionInterfaceAliasingInterface(
01323         const QDBusConnection& connection,
01324         const QString& busName,
01325         const QString& objectPath,
01326         QObject* parent = 0
01327     );
01328 
01335     ConnectionInterfaceAliasingInterface(Tp::DBusProxy *proxy);
01336 
01344     explicit ConnectionInterfaceAliasingInterface(const Tp::Client::ConnectionInterface& mainInterface);
01345 
01353     ConnectionInterfaceAliasingInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject* parent);
01354 
01361     Tp::PendingVariantMap *requestAllProperties() const
01362     {
01363         return internalRequestAllProperties();
01364     }
01365 
01366 public Q_SLOTS:
01382     inline QDBusPendingReply<uint> GetAliasFlags(int timeout = -1)
01383     {
01384         if (!invalidationReason().isEmpty()) {
01385             return QDBusPendingReply<uint>(QDBusMessage::createError(
01386                 invalidationReason(),
01387                 invalidationMessage()
01388             ));
01389         }
01390 
01391         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
01392                 this->staticInterfaceName(), QLatin1String("GetAliasFlags"));
01393         return this->connection().asyncCall(callMessage, timeout);
01394     }
01395 
01414     inline QDBusPendingReply<QStringList> RequestAliases(const Tp::UIntList& contacts, int timeout = -1)
01415     {
01416         if (!invalidationReason().isEmpty()) {
01417             return QDBusPendingReply<QStringList>(QDBusMessage::createError(
01418                 invalidationReason(),
01419                 invalidationMessage()
01420             ));
01421         }
01422 
01423         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
01424                 this->staticInterfaceName(), QLatin1String("RequestAliases"));
01425         callMessage << QVariant::fromValue(contacts);
01426         return this->connection().asyncCall(callMessage, timeout);
01427     }
01428 
01451     inline QDBusPendingReply<Tp::AliasMap> GetAliases(const Tp::UIntList& contacts, int timeout = -1)
01452     {
01453         if (!invalidationReason().isEmpty()) {
01454             return QDBusPendingReply<Tp::AliasMap>(QDBusMessage::createError(
01455                 invalidationReason(),
01456                 invalidationMessage()
01457             ));
01458         }
01459 
01460         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
01461                 this->staticInterfaceName(), QLatin1String("GetAliases"));
01462         callMessage << QVariant::fromValue(contacts);
01463         return this->connection().asyncCall(callMessage, timeout);
01464     }
01465 
01485     inline QDBusPendingReply<> SetAliases(const Tp::AliasMap& aliases, int timeout = -1)
01486     {
01487         if (!invalidationReason().isEmpty()) {
01488             return QDBusPendingReply<>(QDBusMessage::createError(
01489                 invalidationReason(),
01490                 invalidationMessage()
01491             ));
01492         }
01493 
01494         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
01495                 this->staticInterfaceName(), QLatin1String("SetAliases"));
01496         callMessage << QVariant::fromValue(aliases);
01497         return this->connection().asyncCall(callMessage, timeout);
01498     }
01499 
01500 Q_SIGNALS:
01517     void AliasesChanged(const Tp::AliasPairList& aliases);
01518 
01519 protected:
01520     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
01521 };
01522 
01530 class TP_QT_EXPORT ConnectionInterfaceAnonymityInterface : public Tp::AbstractInterface
01531 {
01532     Q_OBJECT
01533 
01534 public:
01541     static inline QLatin1String staticInterfaceName()
01542     {
01543         return QLatin1String("org.freedesktop.Telepathy.Connection.Interface.Anonymity");
01544     }
01545 
01553     ConnectionInterfaceAnonymityInterface(
01554         const QString& busName,
01555         const QString& objectPath,
01556         QObject* parent = 0
01557     );
01558 
01567     ConnectionInterfaceAnonymityInterface(
01568         const QDBusConnection& connection,
01569         const QString& busName,
01570         const QString& objectPath,
01571         QObject* parent = 0
01572     );
01573 
01580     ConnectionInterfaceAnonymityInterface(Tp::DBusProxy *proxy);
01581 
01589     explicit ConnectionInterfaceAnonymityInterface(const Tp::Client::ConnectionInterface& mainInterface);
01590 
01598     ConnectionInterfaceAnonymityInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject* parent);
01599 
01610     inline Tp::PendingVariant *requestPropertySupportedAnonymityModes() const
01611     {
01612         return internalRequestProperty(QLatin1String("SupportedAnonymityModes"));
01613     }
01614 
01630     inline Tp::PendingVariant *requestPropertyAnonymityMandatory() const
01631     {
01632         return internalRequestProperty(QLatin1String("AnonymityMandatory"));
01633     }
01634 
01650     inline Tp::PendingOperation *setPropertyAnonymityMandatory(bool newValue)
01651     {
01652         return internalSetProperty(QLatin1String("AnonymityMandatory"), QVariant::fromValue(newValue));
01653     }
01654 
01667     inline Tp::PendingVariant *requestPropertyAnonymityModes() const
01668     {
01669         return internalRequestProperty(QLatin1String("AnonymityModes"));
01670     }
01671 
01684     inline Tp::PendingOperation *setPropertyAnonymityModes(uint newValue)
01685     {
01686         return internalSetProperty(QLatin1String("AnonymityModes"), QVariant::fromValue(newValue));
01687     }
01688 
01695     Tp::PendingVariantMap *requestAllProperties() const
01696     {
01697         return internalRequestAllProperties();
01698     }
01699 
01700 Q_SIGNALS:
01710     void AnonymityModesChanged(uint modes);
01711 
01712 protected:
01713     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
01714 };
01715 
01723 class TP_QT_EXPORT ConnectionInterfaceAvatarsInterface : public Tp::AbstractInterface
01724 {
01725     Q_OBJECT
01726 
01727 public:
01734     static inline QLatin1String staticInterfaceName()
01735     {
01736         return QLatin1String("org.freedesktop.Telepathy.Connection.Interface.Avatars");
01737     }
01738 
01746     ConnectionInterfaceAvatarsInterface(
01747         const QString& busName,
01748         const QString& objectPath,
01749         QObject* parent = 0
01750     );
01751 
01760     ConnectionInterfaceAvatarsInterface(
01761         const QDBusConnection& connection,
01762         const QString& busName,
01763         const QString& objectPath,
01764         QObject* parent = 0
01765     );
01766 
01773     ConnectionInterfaceAvatarsInterface(Tp::DBusProxy *proxy);
01774 
01782     explicit ConnectionInterfaceAvatarsInterface(const Tp::Client::ConnectionInterface& mainInterface);
01783 
01791     ConnectionInterfaceAvatarsInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject* parent);
01792 
01804     inline Tp::PendingVariant *requestPropertySupportedAvatarMIMETypes() const
01805     {
01806         return internalRequestProperty(QLatin1String("SupportedAvatarMIMETypes"));
01807     }
01808 
01820     inline Tp::PendingVariant *requestPropertyMinimumAvatarHeight() const
01821     {
01822         return internalRequestProperty(QLatin1String("MinimumAvatarHeight"));
01823     }
01824 
01836     inline Tp::PendingVariant *requestPropertyMinimumAvatarWidth() const
01837     {
01838         return internalRequestProperty(QLatin1String("MinimumAvatarWidth"));
01839     }
01840 
01855     inline Tp::PendingVariant *requestPropertyRecommendedAvatarHeight() const
01856     {
01857         return internalRequestProperty(QLatin1String("RecommendedAvatarHeight"));
01858     }
01859 
01872     inline Tp::PendingVariant *requestPropertyRecommendedAvatarWidth() const
01873     {
01874         return internalRequestProperty(QLatin1String("RecommendedAvatarWidth"));
01875     }
01876 
01888     inline Tp::PendingVariant *requestPropertyMaximumAvatarHeight() const
01889     {
01890         return internalRequestProperty(QLatin1String("MaximumAvatarHeight"));
01891     }
01892 
01904     inline Tp::PendingVariant *requestPropertyMaximumAvatarWidth() const
01905     {
01906         return internalRequestProperty(QLatin1String("MaximumAvatarWidth"));
01907     }
01908 
01920     inline Tp::PendingVariant *requestPropertyMaximumAvatarBytes() const
01921     {
01922         return internalRequestProperty(QLatin1String("MaximumAvatarBytes"));
01923     }
01924 
01931     Tp::PendingVariantMap *requestAllProperties() const
01932     {
01933         return internalRequestAllProperties();
01934     }
01935 
01936 public Q_SLOTS:
01971     inline QDBusPendingReply<QStringList, ushort, ushort, ushort, ushort, uint> GetAvatarRequirements(int timeout = -1)
01972     {
01973         if (!invalidationReason().isEmpty()) {
01974             return QDBusPendingReply<QStringList, ushort, ushort, ushort, ushort, uint>(QDBusMessage::createError(
01975                 invalidationReason(),
01976                 invalidationMessage()
01977             ));
01978         }
01979 
01980         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
01981                 this->staticInterfaceName(), QLatin1String("GetAvatarRequirements"));
01982         return this->connection().asyncCall(callMessage, timeout);
01983     }
01984 
02006     inline QDBusPendingReply<QStringList> GetAvatarTokens(const Tp::UIntList& contacts, int timeout = -1)
02007     {
02008         if (!invalidationReason().isEmpty()) {
02009             return QDBusPendingReply<QStringList>(QDBusMessage::createError(
02010                 invalidationReason(),
02011                 invalidationMessage()
02012             ));
02013         }
02014 
02015         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
02016                 this->staticInterfaceName(), QLatin1String("GetAvatarTokens"));
02017         callMessage << QVariant::fromValue(contacts);
02018         return this->connection().asyncCall(callMessage, timeout);
02019     }
02020 
02048     inline QDBusPendingReply<Tp::AvatarTokenMap> GetKnownAvatarTokens(const Tp::UIntList& contacts, int timeout = -1)
02049     {
02050         if (!invalidationReason().isEmpty()) {
02051             return QDBusPendingReply<Tp::AvatarTokenMap>(QDBusMessage::createError(
02052                 invalidationReason(),
02053                 invalidationMessage()
02054             ));
02055         }
02056 
02057         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
02058                 this->staticInterfaceName(), QLatin1String("GetKnownAvatarTokens"));
02059         callMessage << QVariant::fromValue(contacts);
02060         return this->connection().asyncCall(callMessage, timeout);
02061     }
02062 
02087     inline QDBusPendingReply<QByteArray, QString> RequestAvatar(uint contact, int timeout = -1)
02088     {
02089         if (!invalidationReason().isEmpty()) {
02090             return QDBusPendingReply<QByteArray, QString>(QDBusMessage::createError(
02091                 invalidationReason(),
02092                 invalidationMessage()
02093             ));
02094         }
02095 
02096         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
02097                 this->staticInterfaceName(), QLatin1String("RequestAvatar"));
02098         callMessage << QVariant::fromValue(contact);
02099         return this->connection().asyncCall(callMessage, timeout);
02100     }
02101 
02120     inline QDBusPendingReply<> RequestAvatars(const Tp::UIntList& contacts, int timeout = -1)
02121     {
02122         if (!invalidationReason().isEmpty()) {
02123             return QDBusPendingReply<>(QDBusMessage::createError(
02124                 invalidationReason(),
02125                 invalidationMessage()
02126             ));
02127         }
02128 
02129         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
02130                 this->staticInterfaceName(), QLatin1String("RequestAvatars"));
02131         callMessage << QVariant::fromValue(contacts);
02132         return this->connection().asyncCall(callMessage, timeout);
02133     }
02134 
02158     inline QDBusPendingReply<QString> SetAvatar(const QByteArray& avatar, const QString& MIMEType, int timeout = -1)
02159     {
02160         if (!invalidationReason().isEmpty()) {
02161             return QDBusPendingReply<QString>(QDBusMessage::createError(
02162                 invalidationReason(),
02163                 invalidationMessage()
02164             ));
02165         }
02166 
02167         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
02168                 this->staticInterfaceName(), QLatin1String("SetAvatar"));
02169         callMessage << QVariant::fromValue(avatar) << QVariant::fromValue(MIMEType);
02170         return this->connection().asyncCall(callMessage, timeout);
02171     }
02172 
02183     inline QDBusPendingReply<> ClearAvatar(int timeout = -1)
02184     {
02185         if (!invalidationReason().isEmpty()) {
02186             return QDBusPendingReply<>(QDBusMessage::createError(
02187                 invalidationReason(),
02188                 invalidationMessage()
02189             ));
02190         }
02191 
02192         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
02193                 this->staticInterfaceName(), QLatin1String("ClearAvatar"));
02194         return this->connection().asyncCall(callMessage, timeout);
02195     }
02196 
02197 Q_SIGNALS:
02214     void AvatarUpdated(uint contact, const QString& newAvatarToken);
02215 
02238     void AvatarRetrieved(uint contact, const QString& token, const QByteArray& avatar, const QString& type);
02239 
02240 protected:
02241     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
02242 };
02243 
02251 class TP_QT_EXPORT ConnectionInterfaceBalanceInterface : public Tp::AbstractInterface
02252 {
02253     Q_OBJECT
02254 
02255 public:
02262     static inline QLatin1String staticInterfaceName()
02263     {
02264         return QLatin1String("org.freedesktop.Telepathy.Connection.Interface.Balance");
02265     }
02266 
02274     ConnectionInterfaceBalanceInterface(
02275         const QString& busName,
02276         const QString& objectPath,
02277         QObject* parent = 0
02278     );
02279 
02288     ConnectionInterfaceBalanceInterface(
02289         const QDBusConnection& connection,
02290         const QString& busName,
02291         const QString& objectPath,
02292         QObject* parent = 0
02293     );
02294 
02301     ConnectionInterfaceBalanceInterface(Tp::DBusProxy *proxy);
02302 
02310     explicit ConnectionInterfaceBalanceInterface(const Tp::Client::ConnectionInterface& mainInterface);
02311 
02319     ConnectionInterfaceBalanceInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject* parent);
02320 
02339     inline Tp::PendingVariant *requestPropertyAccountBalance() const
02340     {
02341         return internalRequestProperty(QLatin1String("AccountBalance"));
02342     }
02343 
02361     inline Tp::PendingVariant *requestPropertyManageCreditURI() const
02362     {
02363         return internalRequestProperty(QLatin1String("ManageCreditURI"));
02364     }
02365 
02372     Tp::PendingVariantMap *requestAllProperties() const
02373     {
02374         return internalRequestAllProperties();
02375     }
02376 
02377 Q_SIGNALS:
02392     void BalanceChanged(const Tp::CurrencyAmount& balance);
02393 
02394 protected:
02395     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
02396 };
02397 
02405 class TP_QT_EXPORT ConnectionInterfaceCapabilitiesInterface : public Tp::AbstractInterface
02406 {
02407     Q_OBJECT
02408 
02409 public:
02416     static inline QLatin1String staticInterfaceName()
02417     {
02418         return QLatin1String("org.freedesktop.Telepathy.Connection.Interface.Capabilities");
02419     }
02420 
02428     ConnectionInterfaceCapabilitiesInterface(
02429         const QString& busName,
02430         const QString& objectPath,
02431         QObject* parent = 0
02432     );
02433 
02442     ConnectionInterfaceCapabilitiesInterface(
02443         const QDBusConnection& connection,
02444         const QString& busName,
02445         const QString& objectPath,
02446         QObject* parent = 0
02447     );
02448 
02455     ConnectionInterfaceCapabilitiesInterface(Tp::DBusProxy *proxy);
02456 
02464     explicit ConnectionInterfaceCapabilitiesInterface(const Tp::Client::ConnectionInterface& mainInterface);
02465 
02473     ConnectionInterfaceCapabilitiesInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject* parent);
02474 
02481     Tp::PendingVariantMap *requestAllProperties() const
02482     {
02483         return internalRequestAllProperties();
02484     }
02485 
02486 public Q_SLOTS:
02540     inline QDBusPendingReply<Tp::CapabilityPairList> AdvertiseCapabilities(const Tp::CapabilityPairList& add, const QStringList& remove, int timeout = -1)
02541     {
02542         if (!invalidationReason().isEmpty()) {
02543             return QDBusPendingReply<Tp::CapabilityPairList>(QDBusMessage::createError(
02544                 invalidationReason(),
02545                 invalidationMessage()
02546             ));
02547         }
02548 
02549         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
02550                 this->staticInterfaceName(), QLatin1String("AdvertiseCapabilities"));
02551         callMessage << QVariant::fromValue(add) << QVariant::fromValue(remove);
02552         return this->connection().asyncCall(callMessage, timeout);
02553     }
02554 
02589     inline QDBusPendingReply<Tp::ContactCapabilityList> GetCapabilities(const Tp::UIntList& handles, int timeout = -1)
02590     {
02591         if (!invalidationReason().isEmpty()) {
02592             return QDBusPendingReply<Tp::ContactCapabilityList>(QDBusMessage::createError(
02593                 invalidationReason(),
02594                 invalidationMessage()
02595             ));
02596         }
02597 
02598         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
02599                 this->staticInterfaceName(), QLatin1String("GetCapabilities"));
02600         callMessage << QVariant::fromValue(handles);
02601         return this->connection().asyncCall(callMessage, timeout);
02602     }
02603 
02604 Q_SIGNALS:
02631     void CapabilitiesChanged(const Tp::CapabilityChangeList& caps);
02632 
02633 protected:
02634     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
02635 };
02636 
02644 class TP_QT_EXPORT ConnectionInterfaceCellularInterface : public Tp::AbstractInterface
02645 {
02646     Q_OBJECT
02647 
02648 public:
02655     static inline QLatin1String staticInterfaceName()
02656     {
02657         return QLatin1String("org.freedesktop.Telepathy.Connection.Interface.Cellular");
02658     }
02659 
02667     ConnectionInterfaceCellularInterface(
02668         const QString& busName,
02669         const QString& objectPath,
02670         QObject* parent = 0
02671     );
02672 
02681     ConnectionInterfaceCellularInterface(
02682         const QDBusConnection& connection,
02683         const QString& busName,
02684         const QString& objectPath,
02685         QObject* parent = 0
02686     );
02687 
02694     ConnectionInterfaceCellularInterface(Tp::DBusProxy *proxy);
02695 
02703     explicit ConnectionInterfaceCellularInterface(const Tp::Client::ConnectionInterface& mainInterface);
02704 
02712     ConnectionInterfaceCellularInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject* parent);
02713 
02732     inline Tp::PendingVariant *requestPropertyMessageValidityPeriod() const
02733     {
02734         return internalRequestProperty(QLatin1String("MessageValidityPeriod"));
02735     }
02736 
02755     inline Tp::PendingOperation *setPropertyMessageValidityPeriod(uint newValue)
02756     {
02757         return internalSetProperty(QLatin1String("MessageValidityPeriod"), QVariant::fromValue(newValue));
02758     }
02759 
02782     inline Tp::PendingVariant *requestPropertyOverrideMessageServiceCentre() const
02783     {
02784         return internalRequestProperty(QLatin1String("OverrideMessageServiceCentre"));
02785     }
02786 
02809     inline Tp::PendingOperation *setPropertyOverrideMessageServiceCentre(bool newValue)
02810     {
02811         return internalSetProperty(QLatin1String("OverrideMessageServiceCentre"), QVariant::fromValue(newValue));
02812     }
02813 
02830     inline Tp::PendingVariant *requestPropertyMessageServiceCentre() const
02831     {
02832         return internalRequestProperty(QLatin1String("MessageServiceCentre"));
02833     }
02834 
02851     inline Tp::PendingOperation *setPropertyMessageServiceCentre(QString newValue)
02852     {
02853         return internalSetProperty(QLatin1String("MessageServiceCentre"), QVariant::fromValue(newValue));
02854     }
02855 
02869     inline Tp::PendingVariant *requestPropertyIMSI() const
02870     {
02871         return internalRequestProperty(QLatin1String("IMSI"));
02872     }
02873 
02892     inline Tp::PendingVariant *requestPropertyMessageReducedCharacterSet() const
02893     {
02894         return internalRequestProperty(QLatin1String("MessageReducedCharacterSet"));
02895     }
02896 
02915     inline Tp::PendingOperation *setPropertyMessageReducedCharacterSet(bool newValue)
02916     {
02917         return internalSetProperty(QLatin1String("MessageReducedCharacterSet"), QVariant::fromValue(newValue));
02918     }
02919 
02945     inline Tp::PendingVariant *requestPropertyMessageNationalCharacterSet() const
02946     {
02947         return internalRequestProperty(QLatin1String("MessageNationalCharacterSet"));
02948     }
02949 
02975     inline Tp::PendingOperation *setPropertyMessageNationalCharacterSet(QString newValue)
02976     {
02977         return internalSetProperty(QLatin1String("MessageNationalCharacterSet"), QVariant::fromValue(newValue));
02978     }
02979 
02986     Tp::PendingVariantMap *requestAllProperties() const
02987     {
02988         return internalRequestAllProperties();
02989     }
02990 
02991 Q_SIGNALS:
03007     void IMSIChanged(const QString& IMSI);
03008 
03009 protected:
03010     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
03011 };
03012 
03020 class TP_QT_EXPORT ConnectionInterfaceClientTypesInterface : public Tp::AbstractInterface
03021 {
03022     Q_OBJECT
03023 
03024 public:
03031     static inline QLatin1String staticInterfaceName()
03032     {
03033         return QLatin1String("org.freedesktop.Telepathy.Connection.Interface.ClientTypes");
03034     }
03035 
03043     ConnectionInterfaceClientTypesInterface(
03044         const QString& busName,
03045         const QString& objectPath,
03046         QObject* parent = 0
03047     );
03048 
03057     ConnectionInterfaceClientTypesInterface(
03058         const QDBusConnection& connection,
03059         const QString& busName,
03060         const QString& objectPath,
03061         QObject* parent = 0
03062     );
03063 
03070     ConnectionInterfaceClientTypesInterface(Tp::DBusProxy *proxy);
03071 
03079     explicit ConnectionInterfaceClientTypesInterface(const Tp::Client::ConnectionInterface& mainInterface);
03080 
03088     ConnectionInterfaceClientTypesInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject* parent);
03089 
03096     Tp::PendingVariantMap *requestAllProperties() const
03097     {
03098         return internalRequestAllProperties();
03099     }
03100 
03101 public Q_SLOTS:
03130     inline QDBusPendingReply<Tp::ContactClientTypes> GetClientTypes(const Tp::UIntList& contacts, int timeout = -1)
03131     {
03132         if (!invalidationReason().isEmpty()) {
03133             return QDBusPendingReply<Tp::ContactClientTypes>(QDBusMessage::createError(
03134                 invalidationReason(),
03135                 invalidationMessage()
03136             ));
03137         }
03138 
03139         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
03140                 this->staticInterfaceName(), QLatin1String("GetClientTypes"));
03141         callMessage << QVariant::fromValue(contacts);
03142         return this->connection().asyncCall(callMessage, timeout);
03143     }
03144 
03169     inline QDBusPendingReply<QStringList> RequestClientTypes(uint contact, int timeout = -1)
03170     {
03171         if (!invalidationReason().isEmpty()) {
03172             return QDBusPendingReply<QStringList>(QDBusMessage::createError(
03173                 invalidationReason(),
03174                 invalidationMessage()
03175             ));
03176         }
03177 
03178         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
03179                 this->staticInterfaceName(), QLatin1String("RequestClientTypes"));
03180         callMessage << QVariant::fromValue(contact);
03181         return this->connection().asyncCall(callMessage, timeout);
03182     }
03183 
03184 Q_SIGNALS:
03199     void ClientTypesUpdated(uint contact, const QStringList& clientTypes);
03200 
03201 protected:
03202     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
03203 };
03204 
03212 class TP_QT_EXPORT ConnectionInterfaceContactBlockingInterface : public Tp::AbstractInterface
03213 {
03214     Q_OBJECT
03215 
03216 public:
03223     static inline QLatin1String staticInterfaceName()
03224     {
03225         return QLatin1String("org.freedesktop.Telepathy.Connection.Interface.ContactBlocking");
03226     }
03227 
03235     ConnectionInterfaceContactBlockingInterface(
03236         const QString& busName,
03237         const QString& objectPath,
03238         QObject* parent = 0
03239     );
03240 
03249     ConnectionInterfaceContactBlockingInterface(
03250         const QDBusConnection& connection,
03251         const QString& busName,
03252         const QString& objectPath,
03253         QObject* parent = 0
03254     );
03255 
03262     ConnectionInterfaceContactBlockingInterface(Tp::DBusProxy *proxy);
03263 
03271     explicit ConnectionInterfaceContactBlockingInterface(const Tp::Client::ConnectionInterface& mainInterface);
03272 
03280     ConnectionInterfaceContactBlockingInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject* parent);
03281 
03298     inline Tp::PendingVariant *requestPropertyContactBlockingCapabilities() const
03299     {
03300         return internalRequestProperty(QLatin1String("ContactBlockingCapabilities"));
03301     }
03302 
03309     Tp::PendingVariantMap *requestAllProperties() const
03310     {
03311         return internalRequestAllProperties();
03312     }
03313 
03314 public Q_SLOTS:
03374     inline QDBusPendingReply<> BlockContacts(const Tp::UIntList& contacts, bool reportAbusive, int timeout = -1)
03375     {
03376         if (!invalidationReason().isEmpty()) {
03377             return QDBusPendingReply<>(QDBusMessage::createError(
03378                 invalidationReason(),
03379                 invalidationMessage()
03380             ));
03381         }
03382 
03383         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
03384                 this->staticInterfaceName(), QLatin1String("BlockContacts"));
03385         callMessage << QVariant::fromValue(contacts) << QVariant::fromValue(reportAbusive);
03386         return this->connection().asyncCall(callMessage, timeout);
03387     }
03388 
03407     inline QDBusPendingReply<> UnblockContacts(const Tp::UIntList& contacts, int timeout = -1)
03408     {
03409         if (!invalidationReason().isEmpty()) {
03410             return QDBusPendingReply<>(QDBusMessage::createError(
03411                 invalidationReason(),
03412                 invalidationMessage()
03413             ));
03414         }
03415 
03416         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
03417                 this->staticInterfaceName(), QLatin1String("UnblockContacts"));
03418         callMessage << QVariant::fromValue(contacts);
03419         return this->connection().asyncCall(callMessage, timeout);
03420     }
03421 
03442     inline QDBusPendingReply<Tp::HandleIdentifierMap> RequestBlockedContacts(int timeout = -1)
03443     {
03444         if (!invalidationReason().isEmpty()) {
03445             return QDBusPendingReply<Tp::HandleIdentifierMap>(QDBusMessage::createError(
03446                 invalidationReason(),
03447                 invalidationMessage()
03448             ));
03449         }
03450 
03451         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
03452                 this->staticInterfaceName(), QLatin1String("RequestBlockedContacts"));
03453         return this->connection().asyncCall(callMessage, timeout);
03454     }
03455 
03456 Q_SIGNALS:
03475     void BlockedContactsChanged(const Tp::HandleIdentifierMap& blockedContacts, const Tp::HandleIdentifierMap& unblockedContacts);
03476 
03477 protected:
03478     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
03479 };
03480 
03488 class TP_QT_EXPORT ConnectionInterfaceContactCapabilitiesInterface : public Tp::AbstractInterface
03489 {
03490     Q_OBJECT
03491 
03492 public:
03499     static inline QLatin1String staticInterfaceName()
03500     {
03501         return QLatin1String("org.freedesktop.Telepathy.Connection.Interface.ContactCapabilities");
03502     }
03503 
03511     ConnectionInterfaceContactCapabilitiesInterface(
03512         const QString& busName,
03513         const QString& objectPath,
03514         QObject* parent = 0
03515     );
03516 
03525     ConnectionInterfaceContactCapabilitiesInterface(
03526         const QDBusConnection& connection,
03527         const QString& busName,
03528         const QString& objectPath,
03529         QObject* parent = 0
03530     );
03531 
03538     ConnectionInterfaceContactCapabilitiesInterface(Tp::DBusProxy *proxy);
03539 
03547     explicit ConnectionInterfaceContactCapabilitiesInterface(const Tp::Client::ConnectionInterface& mainInterface);
03548 
03556     ConnectionInterfaceContactCapabilitiesInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject* parent);
03557 
03564     Tp::PendingVariantMap *requestAllProperties() const
03565     {
03566         return internalRequestAllProperties();
03567     }
03568 
03569 public Q_SLOTS:
03632     inline QDBusPendingReply<> UpdateCapabilities(const Tp::HandlerCapabilitiesList& handlerCapabilities, int timeout = -1)
03633     {
03634         if (!invalidationReason().isEmpty()) {
03635             return QDBusPendingReply<>(QDBusMessage::createError(
03636                 invalidationReason(),
03637                 invalidationMessage()
03638             ));
03639         }
03640 
03641         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
03642                 this->staticInterfaceName(), QLatin1String("UpdateCapabilities"));
03643         callMessage << QVariant::fromValue(handlerCapabilities);
03644         return this->connection().asyncCall(callMessage, timeout);
03645     }
03646 
03682     inline QDBusPendingReply<Tp::ContactCapabilitiesMap> GetContactCapabilities(const Tp::UIntList& handles, int timeout = -1)
03683     {
03684         if (!invalidationReason().isEmpty()) {
03685             return QDBusPendingReply<Tp::ContactCapabilitiesMap>(QDBusMessage::createError(
03686                 invalidationReason(),
03687                 invalidationMessage()
03688             ));
03689         }
03690 
03691         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
03692                 this->staticInterfaceName(), QLatin1String("GetContactCapabilities"));
03693         callMessage << QVariant::fromValue(handles);
03694         return this->connection().asyncCall(callMessage, timeout);
03695     }
03696 
03697 Q_SIGNALS:
03718     void ContactCapabilitiesChanged(const Tp::ContactCapabilitiesMap& caps);
03719 
03720 protected:
03721     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
03722 };
03723 
03731 class TP_QT_EXPORT ConnectionInterfaceContactGroupsInterface : public Tp::AbstractInterface
03732 {
03733     Q_OBJECT
03734 
03735 public:
03742     static inline QLatin1String staticInterfaceName()
03743     {
03744         return QLatin1String("org.freedesktop.Telepathy.Connection.Interface.ContactGroups");
03745     }
03746 
03754     ConnectionInterfaceContactGroupsInterface(
03755         const QString& busName,
03756         const QString& objectPath,
03757         QObject* parent = 0
03758     );
03759 
03768     ConnectionInterfaceContactGroupsInterface(
03769         const QDBusConnection& connection,
03770         const QString& busName,
03771         const QString& objectPath,
03772         QObject* parent = 0
03773     );
03774 
03781     ConnectionInterfaceContactGroupsInterface(Tp::DBusProxy *proxy);
03782 
03790     explicit ConnectionInterfaceContactGroupsInterface(const Tp::Client::ConnectionInterface& mainInterface);
03791 
03799     ConnectionInterfaceContactGroupsInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject* parent);
03800 
03817     inline Tp::PendingVariant *requestPropertyDisjointGroups() const
03818     {
03819         return internalRequestProperty(QLatin1String("DisjointGroups"));
03820     }
03821 
03834     inline Tp::PendingVariant *requestPropertyGroupStorage() const
03835     {
03836         return internalRequestProperty(QLatin1String("GroupStorage"));
03837     }
03838 
03862     inline Tp::PendingVariant *requestPropertyGroups() const
03863     {
03864         return internalRequestProperty(QLatin1String("Groups"));
03865     }
03866 
03873     Tp::PendingVariantMap *requestAllProperties() const
03874     {
03875         return internalRequestAllProperties();
03876     }
03877 
03878 public Q_SLOTS:
03927     inline QDBusPendingReply<> SetContactGroups(uint contact, const QStringList& groups, int timeout = -1)
03928     {
03929         if (!invalidationReason().isEmpty()) {
03930             return QDBusPendingReply<>(QDBusMessage::createError(
03931                 invalidationReason(),
03932                 invalidationMessage()
03933             ));
03934         }
03935 
03936         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
03937                 this->staticInterfaceName(), QLatin1String("SetContactGroups"));
03938         callMessage << QVariant::fromValue(contact) << QVariant::fromValue(groups);
03939         return this->connection().asyncCall(callMessage, timeout);
03940     }
03941 
03989     inline QDBusPendingReply<> SetGroupMembers(const QString& group, const Tp::UIntList& members, int timeout = -1)
03990     {
03991         if (!invalidationReason().isEmpty()) {
03992             return QDBusPendingReply<>(QDBusMessage::createError(
03993                 invalidationReason(),
03994                 invalidationMessage()
03995             ));
03996         }
03997 
03998         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
03999                 this->staticInterfaceName(), QLatin1String("SetGroupMembers"));
04000         callMessage << QVariant::fromValue(group) << QVariant::fromValue(members);
04001         return this->connection().asyncCall(callMessage, timeout);
04002     }
04003 
04044     inline QDBusPendingReply<> AddToGroup(const QString& group, const Tp::UIntList& members, int timeout = -1)
04045     {
04046         if (!invalidationReason().isEmpty()) {
04047             return QDBusPendingReply<>(QDBusMessage::createError(
04048                 invalidationReason(),
04049                 invalidationMessage()
04050             ));
04051         }
04052 
04053         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
04054                 this->staticInterfaceName(), QLatin1String("AddToGroup"));
04055         callMessage << QVariant::fromValue(group) << QVariant::fromValue(members);
04056         return this->connection().asyncCall(callMessage, timeout);
04057     }
04058 
04098     inline QDBusPendingReply<> RemoveFromGroup(const QString& group, const Tp::UIntList& members, int timeout = -1)
04099     {
04100         if (!invalidationReason().isEmpty()) {
04101             return QDBusPendingReply<>(QDBusMessage::createError(
04102                 invalidationReason(),
04103                 invalidationMessage()
04104             ));
04105         }
04106 
04107         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
04108                 this->staticInterfaceName(), QLatin1String("RemoveFromGroup"));
04109         callMessage << QVariant::fromValue(group) << QVariant::fromValue(members);
04110         return this->connection().asyncCall(callMessage, timeout);
04111     }
04112 
04141     inline QDBusPendingReply<> RemoveGroup(const QString& group, int timeout = -1)
04142     {
04143         if (!invalidationReason().isEmpty()) {
04144             return QDBusPendingReply<>(QDBusMessage::createError(
04145                 invalidationReason(),
04146                 invalidationMessage()
04147             ));
04148         }
04149 
04150         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
04151                 this->staticInterfaceName(), QLatin1String("RemoveGroup"));
04152         callMessage << QVariant::fromValue(group);
04153         return this->connection().asyncCall(callMessage, timeout);
04154     }
04155 
04195     inline QDBusPendingReply<> RenameGroup(const QString& oldName, const QString& newName, int timeout = -1)
04196     {
04197         if (!invalidationReason().isEmpty()) {
04198             return QDBusPendingReply<>(QDBusMessage::createError(
04199                 invalidationReason(),
04200                 invalidationMessage()
04201             ));
04202         }
04203 
04204         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
04205                 this->staticInterfaceName(), QLatin1String("RenameGroup"));
04206         callMessage << QVariant::fromValue(oldName) << QVariant::fromValue(newName);
04207         return this->connection().asyncCall(callMessage, timeout);
04208     }
04209 
04210 Q_SIGNALS:
04228     void GroupsChanged(const Tp::UIntList& contact, const QStringList& added, const QStringList& removed);
04229 
04240     void GroupsCreated(const QStringList& names);
04241 
04289     void GroupRenamed(const QString& oldName, const QString& newName);
04290 
04317     void GroupsRemoved(const QStringList& names);
04318 
04319 protected:
04320     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
04321 };
04322 
04330 class TP_QT_EXPORT ConnectionInterfaceContactInfoInterface : public Tp::AbstractInterface
04331 {
04332     Q_OBJECT
04333 
04334 public:
04341     static inline QLatin1String staticInterfaceName()
04342     {
04343         return QLatin1String("org.freedesktop.Telepathy.Connection.Interface.ContactInfo");
04344     }
04345 
04353     ConnectionInterfaceContactInfoInterface(
04354         const QString& busName,
04355         const QString& objectPath,
04356         QObject* parent = 0
04357     );
04358 
04367     ConnectionInterfaceContactInfoInterface(
04368         const QDBusConnection& connection,
04369         const QString& busName,
04370         const QString& objectPath,
04371         QObject* parent = 0
04372     );
04373 
04380     ConnectionInterfaceContactInfoInterface(Tp::DBusProxy *proxy);
04381 
04389     explicit ConnectionInterfaceContactInfoInterface(const Tp::Client::ConnectionInterface& mainInterface);
04390 
04398     ConnectionInterfaceContactInfoInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject* parent);
04399 
04423     inline Tp::PendingVariant *requestPropertyContactInfoFlags() const
04424     {
04425         return internalRequestProperty(QLatin1String("ContactInfoFlags"));
04426     }
04427 
04485     inline Tp::PendingVariant *requestPropertySupportedFields() const
04486     {
04487         return internalRequestProperty(QLatin1String("SupportedFields"));
04488     }
04489 
04496     Tp::PendingVariantMap *requestAllProperties() const
04497     {
04498         return internalRequestAllProperties();
04499     }
04500 
04501 public Q_SLOTS:
04524     inline QDBusPendingReply<Tp::ContactInfoMap> GetContactInfo(const Tp::UIntList& contacts, int timeout = -1)
04525     {
04526         if (!invalidationReason().isEmpty()) {
04527             return QDBusPendingReply<Tp::ContactInfoMap>(QDBusMessage::createError(
04528                 invalidationReason(),
04529                 invalidationMessage()
04530             ));
04531         }
04532 
04533         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
04534                 this->staticInterfaceName(), QLatin1String("GetContactInfo"));
04535         callMessage << QVariant::fromValue(contacts);
04536         return this->connection().asyncCall(callMessage, timeout);
04537     }
04538 
04558     inline QDBusPendingReply<> RefreshContactInfo(const Tp::UIntList& contacts, int timeout = -1)
04559     {
04560         if (!invalidationReason().isEmpty()) {
04561             return QDBusPendingReply<>(QDBusMessage::createError(
04562                 invalidationReason(),
04563                 invalidationMessage()
04564             ));
04565         }
04566 
04567         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
04568                 this->staticInterfaceName(), QLatin1String("RefreshContactInfo"));
04569         callMessage << QVariant::fromValue(contacts);
04570         return this->connection().asyncCall(callMessage, timeout);
04571     }
04572 
04594     inline QDBusPendingReply<Tp::ContactInfoFieldList> RequestContactInfo(uint contact, int timeout = -1)
04595     {
04596         if (!invalidationReason().isEmpty()) {
04597             return QDBusPendingReply<Tp::ContactInfoFieldList>(QDBusMessage::createError(
04598                 invalidationReason(),
04599                 invalidationMessage()
04600             ));
04601         }
04602 
04603         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
04604                 this->staticInterfaceName(), QLatin1String("RequestContactInfo"));
04605         callMessage << QVariant::fromValue(contact);
04606         return this->connection().asyncCall(callMessage, timeout);
04607     }
04608 
04626     inline QDBusPendingReply<> SetContactInfo(const Tp::ContactInfoFieldList& contactInfo, int timeout = -1)
04627     {
04628         if (!invalidationReason().isEmpty()) {
04629             return QDBusPendingReply<>(QDBusMessage::createError(
04630                 invalidationReason(),
04631                 invalidationMessage()
04632             ));
04633         }
04634 
04635         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
04636                 this->staticInterfaceName(), QLatin1String("SetContactInfo"));
04637         callMessage << QVariant::fromValue(contactInfo);
04638         return this->connection().asyncCall(callMessage, timeout);
04639     }
04640 
04641 Q_SIGNALS:
04658     void ContactInfoChanged(uint contact, const Tp::ContactInfoFieldList& contactInfo);
04659 
04660 protected:
04661     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
04662 };
04663 
04671 class TP_QT_EXPORT ConnectionInterfaceContactListInterface : public Tp::AbstractInterface
04672 {
04673     Q_OBJECT
04674 
04675 public:
04682     static inline QLatin1String staticInterfaceName()
04683     {
04684         return QLatin1String("org.freedesktop.Telepathy.Connection.Interface.ContactList");
04685     }
04686 
04694     ConnectionInterfaceContactListInterface(
04695         const QString& busName,
04696         const QString& objectPath,
04697         QObject* parent = 0
04698     );
04699 
04708     ConnectionInterfaceContactListInterface(
04709         const QDBusConnection& connection,
04710         const QString& busName,
04711         const QString& objectPath,
04712         QObject* parent = 0
04713     );
04714 
04721     ConnectionInterfaceContactListInterface(Tp::DBusProxy *proxy);
04722 
04730     explicit ConnectionInterfaceContactListInterface(const Tp::Client::ConnectionInterface& mainInterface);
04731 
04739     ConnectionInterfaceContactListInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject* parent);
04740 
04751     inline Tp::PendingVariant *requestPropertyContactListState() const
04752     {
04753         return internalRequestProperty(QLatin1String("ContactListState"));
04754     }
04755 
04815     inline Tp::PendingVariant *requestPropertyContactListPersists() const
04816     {
04817         return internalRequestProperty(QLatin1String("ContactListPersists"));
04818     }
04819 
04848     inline Tp::PendingVariant *requestPropertyCanChangeContactList() const
04849     {
04850         return internalRequestProperty(QLatin1String("CanChangeContactList"));
04851     }
04852 
04881     inline Tp::PendingVariant *requestPropertyRequestUsesMessage() const
04882     {
04883         return internalRequestProperty(QLatin1String("RequestUsesMessage"));
04884     }
04885 
04917     inline Tp::PendingVariant *requestPropertyDownloadAtConnection() const
04918     {
04919         return internalRequestProperty(QLatin1String("DownloadAtConnection"));
04920     }
04921 
04928     Tp::PendingVariantMap *requestAllProperties() const
04929     {
04930         return internalRequestAllProperties();
04931     }
04932 
04933 public Q_SLOTS:
05005     inline QDBusPendingReply<Tp::ContactAttributesMap> GetContactListAttributes(const QStringList& interfaces, bool hold, int timeout = -1)
05006     {
05007         if (!invalidationReason().isEmpty()) {
05008             return QDBusPendingReply<Tp::ContactAttributesMap>(QDBusMessage::createError(
05009                 invalidationReason(),
05010                 invalidationMessage()
05011             ));
05012         }
05013 
05014         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
05015                 this->staticInterfaceName(), QLatin1String("GetContactListAttributes"));
05016         callMessage << QVariant::fromValue(interfaces) << QVariant::fromValue(hold);
05017         return this->connection().asyncCall(callMessage, timeout);
05018     }
05019 
05130     inline QDBusPendingReply<> RequestSubscription(const Tp::UIntList& contacts, const QString& message, int timeout = -1)
05131     {
05132         if (!invalidationReason().isEmpty()) {
05133             return QDBusPendingReply<>(QDBusMessage::createError(
05134                 invalidationReason(),
05135                 invalidationMessage()
05136             ));
05137         }
05138 
05139         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
05140                 this->staticInterfaceName(), QLatin1String("RequestSubscription"));
05141         callMessage << QVariant::fromValue(contacts) << QVariant::fromValue(message);
05142         return this->connection().asyncCall(callMessage, timeout);
05143     }
05144 
05216     inline QDBusPendingReply<> AuthorizePublication(const Tp::UIntList& contacts, int timeout = -1)
05217     {
05218         if (!invalidationReason().isEmpty()) {
05219             return QDBusPendingReply<>(QDBusMessage::createError(
05220                 invalidationReason(),
05221                 invalidationMessage()
05222             ));
05223         }
05224 
05225         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
05226                 this->staticInterfaceName(), QLatin1String("AuthorizePublication"));
05227         callMessage << QVariant::fromValue(contacts);
05228         return this->connection().asyncCall(callMessage, timeout);
05229     }
05230 
05280     inline QDBusPendingReply<> RemoveContacts(const Tp::UIntList& contacts, int timeout = -1)
05281     {
05282         if (!invalidationReason().isEmpty()) {
05283             return QDBusPendingReply<>(QDBusMessage::createError(
05284                 invalidationReason(),
05285                 invalidationMessage()
05286             ));
05287         }
05288 
05289         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
05290                 this->staticInterfaceName(), QLatin1String("RemoveContacts"));
05291         callMessage << QVariant::fromValue(contacts);
05292         return this->connection().asyncCall(callMessage, timeout);
05293     }
05294 
05331     inline QDBusPendingReply<> Unsubscribe(const Tp::UIntList& contacts, int timeout = -1)
05332     {
05333         if (!invalidationReason().isEmpty()) {
05334             return QDBusPendingReply<>(QDBusMessage::createError(
05335                 invalidationReason(),
05336                 invalidationMessage()
05337             ));
05338         }
05339 
05340         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
05341                 this->staticInterfaceName(), QLatin1String("Unsubscribe"));
05342         callMessage << QVariant::fromValue(contacts);
05343         return this->connection().asyncCall(callMessage, timeout);
05344     }
05345 
05382     inline QDBusPendingReply<> Unpublish(const Tp::UIntList& contacts, int timeout = -1)
05383     {
05384         if (!invalidationReason().isEmpty()) {
05385             return QDBusPendingReply<>(QDBusMessage::createError(
05386                 invalidationReason(),
05387                 invalidationMessage()
05388             ));
05389         }
05390 
05391         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
05392                 this->staticInterfaceName(), QLatin1String("Unpublish"));
05393         callMessage << QVariant::fromValue(contacts);
05394         return this->connection().asyncCall(callMessage, timeout);
05395     }
05396 
05411     inline QDBusPendingReply<> Download(int timeout = -1)
05412     {
05413         if (!invalidationReason().isEmpty()) {
05414             return QDBusPendingReply<>(QDBusMessage::createError(
05415                 invalidationReason(),
05416                 invalidationMessage()
05417             ));
05418         }
05419 
05420         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
05421                 this->staticInterfaceName(), QLatin1String("Download"));
05422         return this->connection().asyncCall(callMessage, timeout);
05423     }
05424 
05425 Q_SIGNALS:
05435     void ContactListStateChanged(uint contactListState);
05436 
05487     void ContactsChangedWithID(const Tp::ContactSubscriptionMap& changes, const Tp::HandleIdentifierMap& identifiers, const Tp::HandleIdentifierMap& removals);
05488 
05511     void ContactsChanged(const Tp::ContactSubscriptionMap& changes, const Tp::UIntList& removals);
05512 
05513 protected:
05514     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
05515 };
05516 
05524 class TP_QT_EXPORT ConnectionInterfaceContactsInterface : public Tp::AbstractInterface
05525 {
05526     Q_OBJECT
05527 
05528 public:
05535     static inline QLatin1String staticInterfaceName()
05536     {
05537         return QLatin1String("org.freedesktop.Telepathy.Connection.Interface.Contacts");
05538     }
05539 
05547     ConnectionInterfaceContactsInterface(
05548         const QString& busName,
05549         const QString& objectPath,
05550         QObject* parent = 0
05551     );
05552 
05561     ConnectionInterfaceContactsInterface(
05562         const QDBusConnection& connection,
05563         const QString& busName,
05564         const QString& objectPath,
05565         QObject* parent = 0
05566     );
05567 
05574     ConnectionInterfaceContactsInterface(Tp::DBusProxy *proxy);
05575 
05583     explicit ConnectionInterfaceContactsInterface(const Tp::Client::ConnectionInterface& mainInterface);
05584 
05592     ConnectionInterfaceContactsInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject* parent);
05593 
05604     inline Tp::PendingVariant *requestPropertyContactAttributeInterfaces() const
05605     {
05606         return internalRequestProperty(QLatin1String("ContactAttributeInterfaces"));
05607     }
05608 
05615     Tp::PendingVariantMap *requestAllProperties() const
05616     {
05617         return internalRequestAllProperties();
05618     }
05619 
05620 public Q_SLOTS:
05703     inline QDBusPendingReply<Tp::ContactAttributesMap> GetContactAttributes(const Tp::UIntList& handles, const QStringList& interfaces, bool hold, int timeout = -1)
05704     {
05705         if (!invalidationReason().isEmpty()) {
05706             return QDBusPendingReply<Tp::ContactAttributesMap>(QDBusMessage::createError(
05707                 invalidationReason(),
05708                 invalidationMessage()
05709             ));
05710         }
05711 
05712         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
05713                 this->staticInterfaceName(), QLatin1String("GetContactAttributes"));
05714         callMessage << QVariant::fromValue(handles) << QVariant::fromValue(interfaces) << QVariant::fromValue(hold);
05715         return this->connection().asyncCall(callMessage, timeout);
05716     }
05717 
05718 protected:
05719     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
05720 };
05721 
05729 class TP_QT_EXPORT ConnectionInterfaceLocationInterface : public Tp::AbstractInterface
05730 {
05731     Q_OBJECT
05732 
05733 public:
05740     static inline QLatin1String staticInterfaceName()
05741     {
05742         return QLatin1String("org.freedesktop.Telepathy.Connection.Interface.Location");
05743     }
05744 
05752     ConnectionInterfaceLocationInterface(
05753         const QString& busName,
05754         const QString& objectPath,
05755         QObject* parent = 0
05756     );
05757 
05766     ConnectionInterfaceLocationInterface(
05767         const QDBusConnection& connection,
05768         const QString& busName,
05769         const QString& objectPath,
05770         QObject* parent = 0
05771     );
05772 
05779     ConnectionInterfaceLocationInterface(Tp::DBusProxy *proxy);
05780 
05788     explicit ConnectionInterfaceLocationInterface(const Tp::Client::ConnectionInterface& mainInterface);
05789 
05797     ConnectionInterfaceLocationInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject* parent);
05798 
05808     inline Tp::PendingVariant *requestPropertyLocationAccessControlTypes() const
05809     {
05810         return internalRequestProperty(QLatin1String("LocationAccessControlTypes"));
05811     }
05812 
05825     inline Tp::PendingVariant *requestPropertyLocationAccessControl() const
05826     {
05827         return internalRequestProperty(QLatin1String("LocationAccessControl"));
05828     }
05829 
05842     inline Tp::PendingOperation *setPropertyLocationAccessControl(Tp::RichPresenceAccessControl newValue)
05843     {
05844         return internalSetProperty(QLatin1String("LocationAccessControl"), QVariant::fromValue(newValue));
05845     }
05846 
05860     inline Tp::PendingVariant *requestPropertySupportedLocationFeatures() const
05861     {
05862         return internalRequestProperty(QLatin1String("SupportedLocationFeatures"));
05863     }
05864 
05871     Tp::PendingVariantMap *requestAllProperties() const
05872     {
05873         return internalRequestAllProperties();
05874     }
05875 
05876 public Q_SLOTS:
05917     inline QDBusPendingReply<Tp::ContactLocations> GetLocations(const Tp::UIntList& contacts, int timeout = -1)
05918     {
05919         if (!invalidationReason().isEmpty()) {
05920             return QDBusPendingReply<Tp::ContactLocations>(QDBusMessage::createError(
05921                 invalidationReason(),
05922                 invalidationMessage()
05923             ));
05924         }
05925 
05926         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
05927                 this->staticInterfaceName(), QLatin1String("GetLocations"));
05928         callMessage << QVariant::fromValue(contacts);
05929         return this->connection().asyncCall(callMessage, timeout);
05930     }
05931 
05956     inline QDBusPendingReply<QVariantMap> RequestLocation(uint contact, int timeout = -1)
05957     {
05958         if (!invalidationReason().isEmpty()) {
05959             return QDBusPendingReply<QVariantMap>(QDBusMessage::createError(
05960                 invalidationReason(),
05961                 invalidationMessage()
05962             ));
05963         }
05964 
05965         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
05966                 this->staticInterfaceName(), QLatin1String("RequestLocation"));
05967         callMessage << QVariant::fromValue(contact);
05968         return this->connection().asyncCall(callMessage, timeout);
05969     }
05970 
05992     inline QDBusPendingReply<> SetLocation(const QVariantMap& location, int timeout = -1)
05993     {
05994         if (!invalidationReason().isEmpty()) {
05995             return QDBusPendingReply<>(QDBusMessage::createError(
05996                 invalidationReason(),
05997                 invalidationMessage()
05998             ));
05999         }
06000 
06001         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
06002                 this->staticInterfaceName(), QLatin1String("SetLocation"));
06003         callMessage << QVariant::fromValue(location);
06004         return this->connection().asyncCall(callMessage, timeout);
06005     }
06006 
06007 Q_SIGNALS:
06022     void LocationUpdated(uint contact, const QVariantMap& location);
06023 
06024 protected:
06025     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
06026 };
06027 
06035 class TP_QT_EXPORT ConnectionInterfaceMailNotificationInterface : public Tp::AbstractInterface
06036 {
06037     Q_OBJECT
06038 
06039 public:
06046     static inline QLatin1String staticInterfaceName()
06047     {
06048         return QLatin1String("org.freedesktop.Telepathy.Connection.Interface.MailNotification");
06049     }
06050 
06058     ConnectionInterfaceMailNotificationInterface(
06059         const QString& busName,
06060         const QString& objectPath,
06061         QObject* parent = 0
06062     );
06063 
06072     ConnectionInterfaceMailNotificationInterface(
06073         const QDBusConnection& connection,
06074         const QString& busName,
06075         const QString& objectPath,
06076         QObject* parent = 0
06077     );
06078 
06085     ConnectionInterfaceMailNotificationInterface(Tp::DBusProxy *proxy);
06086 
06094     explicit ConnectionInterfaceMailNotificationInterface(const Tp::Client::ConnectionInterface& mainInterface);
06095 
06103     ConnectionInterfaceMailNotificationInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject* parent);
06104 
06119     inline Tp::PendingVariant *requestPropertyMailNotificationFlags() const
06120     {
06121         return internalRequestProperty(QLatin1String("MailNotificationFlags"));
06122     }
06123 
06148     inline Tp::PendingVariant *requestPropertyUnreadMailCount() const
06149     {
06150         return internalRequestProperty(QLatin1String("UnreadMailCount"));
06151     }
06152 
06169     inline Tp::PendingVariant *requestPropertyUnreadMails() const
06170     {
06171         return internalRequestProperty(QLatin1String("UnreadMails"));
06172     }
06173 
06188     inline Tp::PendingVariant *requestPropertyMailAddress() const
06189     {
06190         return internalRequestProperty(QLatin1String("MailAddress"));
06191     }
06192 
06199     Tp::PendingVariantMap *requestAllProperties() const
06200     {
06201         return internalRequestAllProperties();
06202     }
06203 
06204 public Q_SLOTS:
06228     inline QDBusPendingReply<Tp::MailURL> RequestInboxURL(int timeout = -1)
06229     {
06230         if (!invalidationReason().isEmpty()) {
06231             return QDBusPendingReply<Tp::MailURL>(QDBusMessage::createError(
06232                 invalidationReason(),
06233                 invalidationMessage()
06234             ));
06235         }
06236 
06237         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
06238                 this->staticInterfaceName(), QLatin1String("RequestInboxURL"));
06239         return this->connection().asyncCall(callMessage, timeout);
06240     }
06241 
06271     inline QDBusPendingReply<Tp::MailURL> RequestMailURL(const QString& ID, const QDBusVariant& URLData, int timeout = -1)
06272     {
06273         if (!invalidationReason().isEmpty()) {
06274             return QDBusPendingReply<Tp::MailURL>(QDBusMessage::createError(
06275                 invalidationReason(),
06276                 invalidationMessage()
06277             ));
06278         }
06279 
06280         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
06281                 this->staticInterfaceName(), QLatin1String("RequestMailURL"));
06282         callMessage << QVariant::fromValue(ID) << QVariant::fromValue(URLData);
06283         return this->connection().asyncCall(callMessage, timeout);
06284     }
06285 
06286 Q_SIGNALS:
06309     void MailsReceived(const Tp::MailList& mails);
06310 
06352     void UnreadMailsChanged(uint count, const Tp::MailList& mailsAdded, const QStringList& mailsRemoved);
06353 
06354 protected:
06355     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
06356 };
06357 
06365 class TP_QT_EXPORT ConnectionInterfacePowerSavingInterface : public Tp::AbstractInterface
06366 {
06367     Q_OBJECT
06368 
06369 public:
06376     static inline QLatin1String staticInterfaceName()
06377     {
06378         return QLatin1String("org.freedesktop.Telepathy.Connection.Interface.PowerSaving");
06379     }
06380 
06388     ConnectionInterfacePowerSavingInterface(
06389         const QString& busName,
06390         const QString& objectPath,
06391         QObject* parent = 0
06392     );
06393 
06402     ConnectionInterfacePowerSavingInterface(
06403         const QDBusConnection& connection,
06404         const QString& busName,
06405         const QString& objectPath,
06406         QObject* parent = 0
06407     );
06408 
06415     ConnectionInterfacePowerSavingInterface(Tp::DBusProxy *proxy);
06416 
06424     explicit ConnectionInterfacePowerSavingInterface(const Tp::Client::ConnectionInterface& mainInterface);
06425 
06433     ConnectionInterfacePowerSavingInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject* parent);
06434 
06450     inline Tp::PendingVariant *requestPropertyPowerSavingActive() const
06451     {
06452         return internalRequestProperty(QLatin1String("PowerSavingActive"));
06453     }
06454 
06461     Tp::PendingVariantMap *requestAllProperties() const
06462     {
06463         return internalRequestAllProperties();
06464     }
06465 
06466 public Q_SLOTS:
06500     inline QDBusPendingReply<> SetPowerSaving(bool activate, int timeout = -1)
06501     {
06502         if (!invalidationReason().isEmpty()) {
06503             return QDBusPendingReply<>(QDBusMessage::createError(
06504                 invalidationReason(),
06505                 invalidationMessage()
06506             ));
06507         }
06508 
06509         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
06510                 this->staticInterfaceName(), QLatin1String("SetPowerSaving"));
06511         callMessage << QVariant::fromValue(activate);
06512         return this->connection().asyncCall(callMessage, timeout);
06513     }
06514 
06515 Q_SIGNALS:
06528     void PowerSavingChanged(bool active);
06529 
06530 protected:
06531     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
06532 };
06533 
06541 class TP_QT_EXPORT ConnectionInterfacePresenceInterface : public Tp::AbstractInterface
06542 {
06543     Q_OBJECT
06544 
06545 public:
06552     static inline QLatin1String staticInterfaceName()
06553     {
06554         return QLatin1String("org.freedesktop.Telepathy.Connection.Interface.Presence");
06555     }
06556 
06564     ConnectionInterfacePresenceInterface(
06565         const QString& busName,
06566         const QString& objectPath,
06567         QObject* parent = 0
06568     );
06569 
06578     ConnectionInterfacePresenceInterface(
06579         const QDBusConnection& connection,
06580         const QString& busName,
06581         const QString& objectPath,
06582         QObject* parent = 0
06583     );
06584 
06591     ConnectionInterfacePresenceInterface(Tp::DBusProxy *proxy);
06592 
06600     explicit ConnectionInterfacePresenceInterface(const Tp::Client::ConnectionInterface& mainInterface);
06601 
06609     ConnectionInterfacePresenceInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject* parent);
06610 
06617     Tp::PendingVariantMap *requestAllProperties() const
06618     {
06619         return internalRequestAllProperties();
06620     }
06621 
06622 public Q_SLOTS:
06644     inline QDBusPendingReply<> AddStatus(const QString& status, const QVariantMap& parameters, int timeout = -1)
06645     {
06646         if (!invalidationReason().isEmpty()) {
06647             return QDBusPendingReply<>(QDBusMessage::createError(
06648                 invalidationReason(),
06649                 invalidationMessage()
06650             ));
06651         }
06652 
06653         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
06654                 this->staticInterfaceName(), QLatin1String("AddStatus"));
06655         callMessage << QVariant::fromValue(status) << QVariant::fromValue(parameters);
06656         return this->connection().asyncCall(callMessage, timeout);
06657     }
06658 
06672     inline QDBusPendingReply<> ClearStatus(int timeout = -1)
06673     {
06674         if (!invalidationReason().isEmpty()) {
06675             return QDBusPendingReply<>(QDBusMessage::createError(
06676                 invalidationReason(),
06677                 invalidationMessage()
06678             ));
06679         }
06680 
06681         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
06682                 this->staticInterfaceName(), QLatin1String("ClearStatus"));
06683         return this->connection().asyncCall(callMessage, timeout);
06684     }
06685 
06709     inline QDBusPendingReply<Tp::ContactPresences> GetPresence(const Tp::UIntList& contacts, int timeout = -1)
06710     {
06711         if (!invalidationReason().isEmpty()) {
06712             return QDBusPendingReply<Tp::ContactPresences>(QDBusMessage::createError(
06713                 invalidationReason(),
06714                 invalidationMessage()
06715             ));
06716         }
06717 
06718         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
06719                 this->staticInterfaceName(), QLatin1String("GetPresence"));
06720         callMessage << QVariant::fromValue(contacts);
06721         return this->connection().asyncCall(callMessage, timeout);
06722     }
06723 
06745     inline QDBusPendingReply<Tp::StatusSpecMap> GetStatuses(int timeout = -1)
06746     {
06747         if (!invalidationReason().isEmpty()) {
06748             return QDBusPendingReply<Tp::StatusSpecMap>(QDBusMessage::createError(
06749                 invalidationReason(),
06750                 invalidationMessage()
06751             ));
06752         }
06753 
06754         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
06755                 this->staticInterfaceName(), QLatin1String("GetStatuses"));
06756         return this->connection().asyncCall(callMessage, timeout);
06757     }
06758 
06777     inline QDBusPendingReply<> RemoveStatus(const QString& status, int timeout = -1)
06778     {
06779         if (!invalidationReason().isEmpty()) {
06780             return QDBusPendingReply<>(QDBusMessage::createError(
06781                 invalidationReason(),
06782                 invalidationMessage()
06783             ));
06784         }
06785 
06786         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
06787                 this->staticInterfaceName(), QLatin1String("RemoveStatus"));
06788         callMessage << QVariant::fromValue(status);
06789         return this->connection().asyncCall(callMessage, timeout);
06790     }
06791 
06810     inline QDBusPendingReply<> RequestPresence(const Tp::UIntList& contacts, int timeout = -1)
06811     {
06812         if (!invalidationReason().isEmpty()) {
06813             return QDBusPendingReply<>(QDBusMessage::createError(
06814                 invalidationReason(),
06815                 invalidationMessage()
06816             ));
06817         }
06818 
06819         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
06820                 this->staticInterfaceName(), QLatin1String("RequestPresence"));
06821         callMessage << QVariant::fromValue(contacts);
06822         return this->connection().asyncCall(callMessage, timeout);
06823     }
06824 
06840     inline QDBusPendingReply<> SetLastActivityTime(uint time, int timeout = -1)
06841     {
06842         if (!invalidationReason().isEmpty()) {
06843             return QDBusPendingReply<>(QDBusMessage::createError(
06844                 invalidationReason(),
06845                 invalidationMessage()
06846             ));
06847         }
06848 
06849         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
06850                 this->staticInterfaceName(), QLatin1String("SetLastActivityTime"));
06851         callMessage << QVariant::fromValue(time);
06852         return this->connection().asyncCall(callMessage, timeout);
06853     }
06854 
06892     inline QDBusPendingReply<> SetStatus(const Tp::MultipleStatusMap& statuses, int timeout = -1)
06893     {
06894         if (!invalidationReason().isEmpty()) {
06895             return QDBusPendingReply<>(QDBusMessage::createError(
06896                 invalidationReason(),
06897                 invalidationMessage()
06898             ));
06899         }
06900 
06901         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
06902                 this->staticInterfaceName(), QLatin1String("SetStatus"));
06903         callMessage << QVariant::fromValue(statuses);
06904         return this->connection().asyncCall(callMessage, timeout);
06905     }
06906 
06907 Q_SIGNALS:
06924     void PresenceUpdate(const Tp::ContactPresences& presence);
06925 
06926 protected:
06927     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
06928 };
06929 
06937 class TP_QT_EXPORT ConnectionInterfaceRequestsInterface : public Tp::AbstractInterface
06938 {
06939     Q_OBJECT
06940 
06941 public:
06948     static inline QLatin1String staticInterfaceName()
06949     {
06950         return QLatin1String("org.freedesktop.Telepathy.Connection.Interface.Requests");
06951     }
06952 
06960     ConnectionInterfaceRequestsInterface(
06961         const QString& busName,
06962         const QString& objectPath,
06963         QObject* parent = 0
06964     );
06965 
06974     ConnectionInterfaceRequestsInterface(
06975         const QDBusConnection& connection,
06976         const QString& busName,
06977         const QString& objectPath,
06978         QObject* parent = 0
06979     );
06980 
06987     ConnectionInterfaceRequestsInterface(Tp::DBusProxy *proxy);
06988 
06996     explicit ConnectionInterfaceRequestsInterface(const Tp::Client::ConnectionInterface& mainInterface);
06997 
07005     ConnectionInterfaceRequestsInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject* parent);
07006 
07017     inline Tp::PendingVariant *requestPropertyChannels() const
07018     {
07019         return internalRequestProperty(QLatin1String("Channels"));
07020     }
07021 
07051     inline Tp::PendingVariant *requestPropertyRequestableChannelClasses() const
07052     {
07053         return internalRequestProperty(QLatin1String("RequestableChannelClasses"));
07054     }
07055 
07062     Tp::PendingVariantMap *requestAllProperties() const
07063     {
07064         return internalRequestAllProperties();
07065     }
07066 
07067 public Q_SLOTS:
07149     inline QDBusPendingReply<QDBusObjectPath, QVariantMap> CreateChannel(const QVariantMap& request, int timeout = -1)
07150     {
07151         if (!invalidationReason().isEmpty()) {
07152             return QDBusPendingReply<QDBusObjectPath, QVariantMap>(QDBusMessage::createError(
07153                 invalidationReason(),
07154                 invalidationMessage()
07155             ));
07156         }
07157 
07158         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
07159                 this->staticInterfaceName(), QLatin1String("CreateChannel"));
07160         callMessage << QVariant::fromValue(request);
07161         return this->connection().asyncCall(callMessage, timeout);
07162     }
07163 
07228     inline QDBusPendingReply<bool, QDBusObjectPath, QVariantMap> EnsureChannel(const QVariantMap& request, int timeout = -1)
07229     {
07230         if (!invalidationReason().isEmpty()) {
07231             return QDBusPendingReply<bool, QDBusObjectPath, QVariantMap>(QDBusMessage::createError(
07232                 invalidationReason(),
07233                 invalidationMessage()
07234             ));
07235         }
07236 
07237         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
07238                 this->staticInterfaceName(), QLatin1String("EnsureChannel"));
07239         callMessage << QVariant::fromValue(request);
07240         return this->connection().asyncCall(callMessage, timeout);
07241     }
07242 
07243 Q_SIGNALS:
07287     void NewChannels(const Tp::ChannelDetailsList& channels);
07288 
07301     void ChannelClosed(const QDBusObjectPath& removed);
07302 
07303 protected:
07304     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
07305 };
07306 
07314 class TP_QT_EXPORT ConnectionInterfaceServicePointInterface : public Tp::AbstractInterface
07315 {
07316     Q_OBJECT
07317 
07318 public:
07325     static inline QLatin1String staticInterfaceName()
07326     {
07327         return QLatin1String("org.freedesktop.Telepathy.Connection.Interface.ServicePoint");
07328     }
07329 
07337     ConnectionInterfaceServicePointInterface(
07338         const QString& busName,
07339         const QString& objectPath,
07340         QObject* parent = 0
07341     );
07342 
07351     ConnectionInterfaceServicePointInterface(
07352         const QDBusConnection& connection,
07353         const QString& busName,
07354         const QString& objectPath,
07355         QObject* parent = 0
07356     );
07357 
07364     ConnectionInterfaceServicePointInterface(Tp::DBusProxy *proxy);
07365 
07373     explicit ConnectionInterfaceServicePointInterface(const Tp::Client::ConnectionInterface& mainInterface);
07374 
07382     ConnectionInterfaceServicePointInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject* parent);
07383 
07395     inline Tp::PendingVariant *requestPropertyKnownServicePoints() const
07396     {
07397         return internalRequestProperty(QLatin1String("KnownServicePoints"));
07398     }
07399 
07406     Tp::PendingVariantMap *requestAllProperties() const
07407     {
07408         return internalRequestAllProperties();
07409     }
07410 
07411 Q_SIGNALS:
07425     void ServicePointsChanged(const Tp::ServicePointInfoList& servicePoints);
07426 
07427 protected:
07428     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
07429 };
07430 
07438 class TP_QT_EXPORT ConnectionInterfaceSimplePresenceInterface : public Tp::AbstractInterface
07439 {
07440     Q_OBJECT
07441 
07442 public:
07449     static inline QLatin1String staticInterfaceName()
07450     {
07451         return QLatin1String("org.freedesktop.Telepathy.Connection.Interface.SimplePresence");
07452     }
07453 
07461     ConnectionInterfaceSimplePresenceInterface(
07462         const QString& busName,
07463         const QString& objectPath,
07464         QObject* parent = 0
07465     );
07466 
07475     ConnectionInterfaceSimplePresenceInterface(
07476         const QDBusConnection& connection,
07477         const QString& busName,
07478         const QString& objectPath,
07479         QObject* parent = 0
07480     );
07481 
07488     ConnectionInterfaceSimplePresenceInterface(Tp::DBusProxy *proxy);
07489 
07497     explicit ConnectionInterfaceSimplePresenceInterface(const Tp::Client::ConnectionInterface& mainInterface);
07498 
07506     ConnectionInterfaceSimplePresenceInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject* parent);
07507 
07549     inline Tp::PendingVariant *requestPropertyStatuses() const
07550     {
07551         return internalRequestProperty(QLatin1String("Statuses"));
07552     }
07553 
07598     inline Tp::PendingVariant *requestPropertyMaximumStatusMessageLength() const
07599     {
07600         return internalRequestProperty(QLatin1String("MaximumStatusMessageLength"));
07601     }
07602 
07609     Tp::PendingVariantMap *requestAllProperties() const
07610     {
07611         return internalRequestAllProperties();
07612     }
07613 
07614 public Q_SLOTS:
07678     inline QDBusPendingReply<> SetPresence(const QString& status, const QString& statusMessage, int timeout = -1)
07679     {
07680         if (!invalidationReason().isEmpty()) {
07681             return QDBusPendingReply<>(QDBusMessage::createError(
07682                 invalidationReason(),
07683                 invalidationMessage()
07684             ));
07685         }
07686 
07687         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
07688                 this->staticInterfaceName(), QLatin1String("SetPresence"));
07689         callMessage << QVariant::fromValue(status) << QVariant::fromValue(statusMessage);
07690         return this->connection().asyncCall(callMessage, timeout);
07691     }
07692 
07724     inline QDBusPendingReply<Tp::SimpleContactPresences> GetPresences(const Tp::UIntList& contacts, int timeout = -1)
07725     {
07726         if (!invalidationReason().isEmpty()) {
07727             return QDBusPendingReply<Tp::SimpleContactPresences>(QDBusMessage::createError(
07728                 invalidationReason(),
07729                 invalidationMessage()
07730             ));
07731         }
07732 
07733         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
07734                 this->staticInterfaceName(), QLatin1String("GetPresences"));
07735         callMessage << QVariant::fromValue(contacts);
07736         return this->connection().asyncCall(callMessage, timeout);
07737     }
07738 
07739 Q_SIGNALS:
07752     void PresencesChanged(const Tp::SimpleContactPresences& presence);
07753 
07754 protected:
07755     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
07756 };
07757 }
07758 }
07759 Q_DECLARE_METATYPE(Tp::Client::ConnectionInterface*)
07760 Q_DECLARE_METATYPE(Tp::Client::ConnectionInterfaceAddressingInterface*)
07761 Q_DECLARE_METATYPE(Tp::Client::ConnectionInterfaceAliasingInterface*)
07762 Q_DECLARE_METATYPE(Tp::Client::ConnectionInterfaceAnonymityInterface*)
07763 Q_DECLARE_METATYPE(Tp::Client::ConnectionInterfaceAvatarsInterface*)
07764 Q_DECLARE_METATYPE(Tp::Client::ConnectionInterfaceBalanceInterface*)
07765 Q_DECLARE_METATYPE(Tp::Client::ConnectionInterfaceCapabilitiesInterface*)
07766 Q_DECLARE_METATYPE(Tp::Client::ConnectionInterfaceCellularInterface*)
07767 Q_DECLARE_METATYPE(Tp::Client::ConnectionInterfaceClientTypesInterface*)
07768 Q_DECLARE_METATYPE(Tp::Client::ConnectionInterfaceContactBlockingInterface*)
07769 Q_DECLARE_METATYPE(Tp::Client::ConnectionInterfaceContactCapabilitiesInterface*)
07770 Q_DECLARE_METATYPE(Tp::Client::ConnectionInterfaceContactGroupsInterface*)
07771 Q_DECLARE_METATYPE(Tp::Client::ConnectionInterfaceContactInfoInterface*)
07772 Q_DECLARE_METATYPE(Tp::Client::ConnectionInterfaceContactListInterface*)
07773 Q_DECLARE_METATYPE(Tp::Client::ConnectionInterfaceContactsInterface*)
07774 Q_DECLARE_METATYPE(Tp::Client::ConnectionInterfaceLocationInterface*)
07775 Q_DECLARE_METATYPE(Tp::Client::ConnectionInterfaceMailNotificationInterface*)
07776 Q_DECLARE_METATYPE(Tp::Client::ConnectionInterfacePowerSavingInterface*)
07777 Q_DECLARE_METATYPE(Tp::Client::ConnectionInterfacePresenceInterface*)
07778 Q_DECLARE_METATYPE(Tp::Client::ConnectionInterfaceRequestsInterface*)
07779 Q_DECLARE_METATYPE(Tp::Client::ConnectionInterfaceServicePointInterface*)
07780 Q_DECLARE_METATYPE(Tp::Client::ConnectionInterfaceSimplePresenceInterface*)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00110.html0000644000175200001440000001663512000060453021622 0ustar00collabora-develusers00000000000000 Tp::ChannelClassSpecList Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ChannelClassSpecList Class Reference

The ChannelClassSpecList class represents a list of ChannelClassSpec. More...

#include <TelepathyQt/ChannelClassSpecList>

List of all members.

Public Member Functions


Detailed Description

The ChannelClassSpecList class represents a list of ChannelClassSpec.


Constructor & Destructor Documentation


Member Function Documentation


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00250.html0000644000175200001440000001232512000060453021617 0ustar00collabora-develusers00000000000000 Tp::HTTPPostData Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::HTTPPostData Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

A pair (key, value) representing POST data compatible with the application/x-www-form-urlencoded MIME type. The strings MUST be valid UTF-8 strings, and the characters used in the key MUST obey the requirements of the HTML CDATA type. The value MUST NOT be encoded with HTML entities.

For example, if the POST data should contain a key "less-than" with value "<", and a key "percent" with value "%", this should be represented as two HTTP_Post_Data structures, ("less-than", "<") and ("percent", "%"), resulting in a POST request whose request body is "less-than=&lt;&percent=%25". If a client passes this to a browser by writing it into an HTML form, it could do so by representing it as:

 <input type="hidden" name="less-than">&lt;</input>
 <input type="hidden" name="percent">%</input>
 

This data can be used to generate a HTML file that will automatically load the URL with appropriate POST data, in which case the client MUST convert any characters that are special within HTML into HTML entities. Alternatively, it can be used in an API that will instruct the browser how to load the URL (like the Netscape Plug-in API), in which case the client MUST escape characters that are reserved in URLs, if appropriate for that API.

An array of pairs is used instead of a map from keys to values, because it's valid to repeat keys in both HTML and x-www-form-urlencoded data.


Member Data Documentation

The key, corresponding to a HTML control name

The value


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00451_source.html0000644000175200001440000000477312000060453023212 0ustar00collabora-develusers00000000000000 call-content-media-description.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
call-content-media-description.h
00001 
00023 #ifndef _TelepathyQt_call_content_media_description_h_HEADER_GUARD_
00024 #define _TelepathyQt_call_content_media_description_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/_gen/cli-call-content-media-description.h>
00031 
00032 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00995.html0000644000175200001440000000503712000060453021641 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::HandleOwnerMap Member List
This is the complete list of members for Tp::HandleOwnerMap, including all inherited members.
HandleOwnerMap()Tp::HandleOwnerMap [inline]
HandleOwnerMap(const QMap< uint, uint > &a)Tp::HandleOwnerMap [inline]
operator=(const QMap< uint, uint > &a)Tp::HandleOwnerMap [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00847.html0000644000175200001440000002203412000060453021631 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::StatefulDBusProxy Member List
This is the complete list of members for Tp::StatefulDBusProxy, including all inherited members.
actualFeatures() const Tp::ReadyObject [virtual]
becomeReady(const Features &requestedFeatures=Features())Tp::ReadyObject [virtual]
busName() const Tp::DBusProxy
dbusConnection() const Tp::DBusProxy
DBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::DBusProxy
invalidate(const QString &reason, const QString &message)Tp::DBusProxy [protected]
invalidate(const QDBusError &error)Tp::DBusProxy [protected]
invalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage)Tp::DBusProxy [signal]
invalidationMessage() const Tp::DBusProxy
invalidationReason() const Tp::DBusProxy
isReady(const Features &features=Features()) const Tp::ReadyObject [virtual]
isValid() const Tp::DBusProxy
missingFeatures() const Tp::ReadyObject [virtual]
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
objectPath() const Tp::DBusProxy
propertyChanged(const QString &propertyName)Tp::Object [signal]
readinessHelper() const Tp::ReadyObject [protected]
ReadyObject(RefCounted *object, const Feature &featureCore)Tp::ReadyObject
ReadyObject(DBusProxy *proxy, const Feature &featureCore)Tp::ReadyObject
RefCounted()Tp::RefCounted [inline]
requestedFeatures() const Tp::ReadyObject [virtual]
setBusName(const QString &busName)Tp::DBusProxy [protected]
StatefulDBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::StatefulDBusProxy
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique)Tp::StatefulDBusProxy [static]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique, QString &error, QString &message)Tp::StatefulDBusProxy [static]
~DBusProxy()Tp::DBusProxy [virtual]
~Object()Tp::Object [virtual]
~ReadyObject()Tp::ReadyObject [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]
~StatefulDBusProxy()Tp::StatefulDBusProxy [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_func_0x69.html0000644000175200001440000010035012000060453024615 0ustar00collabora-develusers00000000000000 Class Members - Functions
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- i -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00553_source.html0000644000175200001440000001072212000060453023204 0ustar00collabora-develusers00000000000000 dbus-object.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
dbus-object.h
00001 
00023 #ifndef _TelepathyQt_dbus_object_h_HEADER_GUARD_
00024 #define _TelepathyQt_dbus_object_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Global>
00031 
00032 #include <QObject>
00033 
00034 class QDBusConnection;
00035 
00036 namespace Tp
00037 {
00038 
00039 class TP_QT_EXPORT DBusObject : public QObject
00040 {
00041     Q_OBJECT
00042     Q_DISABLE_COPY(DBusObject)
00043 
00044 public:
00045     DBusObject(const QDBusConnection &dbusConnection, QObject *parent = 0);
00046     virtual ~DBusObject();
00047 
00048     QDBusConnection dbusConnection() const;
00049 
00050 private:
00051     class Private;
00052     friend class Private;
00053     Private *mPriv;
00054 };
00055 
00056 }
00057 
00058 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01120.html0000644000175200001440000002272212000060453021616 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ProtocolInterfaceAvatarsInterface Member List
This is the complete list of members for Tp::Client::ProtocolInterfaceAvatarsInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ProtocolInterfaceAvatarsInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
ProtocolInterfaceAvatarsInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ProtocolInterfaceAvatarsInterface
ProtocolInterfaceAvatarsInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ProtocolInterfaceAvatarsInterface
ProtocolInterfaceAvatarsInterface(Tp::DBusProxy *proxy)Tp::Client::ProtocolInterfaceAvatarsInterface
ProtocolInterfaceAvatarsInterface(const Tp::Client::ConnectionManagerInterface &mainInterface)Tp::Client::ProtocolInterfaceAvatarsInterface [explicit]
ProtocolInterfaceAvatarsInterface(const Tp::Client::ConnectionManagerInterface &mainInterface, QObject *parent)Tp::Client::ProtocolInterfaceAvatarsInterface
requestAllProperties() const Tp::Client::ProtocolInterfaceAvatarsInterface [inline]
requestPropertyMaximumAvatarBytes() const Tp::Client::ProtocolInterfaceAvatarsInterface [inline]
requestPropertyMaximumAvatarHeight() const Tp::Client::ProtocolInterfaceAvatarsInterface [inline]
requestPropertyMaximumAvatarWidth() const Tp::Client::ProtocolInterfaceAvatarsInterface [inline]
requestPropertyMinimumAvatarHeight() const Tp::Client::ProtocolInterfaceAvatarsInterface [inline]
requestPropertyMinimumAvatarWidth() const Tp::Client::ProtocolInterfaceAvatarsInterface [inline]
requestPropertyRecommendedAvatarHeight() const Tp::Client::ProtocolInterfaceAvatarsInterface [inline]
requestPropertyRecommendedAvatarWidth() const Tp::Client::ProtocolInterfaceAvatarsInterface [inline]
requestPropertySupportedAvatarMIMETypes() const Tp::Client::ProtocolInterfaceAvatarsInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ProtocolInterfaceAvatarsInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00282.html0000644000175200001440000002177012000060453021630 0ustar00collabora-develusers00000000000000 Tp::MessageContentPart Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MessageContentPart Class Reference

The MessageContentPart class represents a Telepathy message part. More...

#include <TelepathyQt/MessageContentPart>

List of all members.

Public Member Functions


Detailed Description

The MessageContentPart class represents a Telepathy message part.


Constructor & Destructor Documentation


Member Function Documentation

bool Tp::MessageContentPart::isValid ( ) const [inline]
MessageContentPart & Tp::MessageContentPart::operator= ( const MessageContentPart other)
bool Tp::MessageContentPart::operator== ( const MessageContentPart other) const


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00874.html0000644000175200001440000001122512000060453021631 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::GenericCapabilityFilter< T > Member List
This is the complete list of members for Tp::GenericCapabilityFilter< T >, including all inherited members.
addRequestableChannelClassSubset(const RequestableChannelClassSpec &rccSpec)Tp::GenericCapabilityFilter< T > [inline]
create(const RequestableChannelClassSpecList &rccSpecs=RequestableChannelClassSpecList())Tp::GenericCapabilityFilter< T > [inline, static]
Filter()Tp::Filter< T > [inline, protected]
filter() const Tp::GenericCapabilityFilter< T > [inline]
isValid() const Tp::GenericCapabilityFilter< T > [inline, virtual]
matches(const SharedPtr< T > &t) const Tp::GenericCapabilityFilter< T > [inline, virtual]
RefCounted()Tp::RefCounted [inline]
setRequestableChannelClassesSubset(const RequestableChannelClassSpecList &rccSpecs)Tp::GenericCapabilityFilter< T > [inline]
~Filter()Tp::Filter< T > [inline, virtual]
~GenericCapabilityFilter()Tp::GenericCapabilityFilter< T > [inline, virtual]
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00157.html0000644000175200001440000010646312000060453021634 0ustar00collabora-develusers00000000000000 Tp::Client::ClientObserverInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

#include <TelepathyQt/Client>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

  • QDBusPendingReply ObserveChannels (const QDBusObjectPath &account, const QDBusObjectPath &connection, const Tp::ChannelDetailsList &channels, const QDBusObjectPath &dispatchOperation, const Tp::ObjectPathList &requestsSatisfied, const QVariantMap &observerInfo, int timeout=-1)

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Client.Observer".


Constructor & Destructor Documentation

Tp::Client::ClientObserverInterface::ClientObserverInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ClientObserverInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ClientObserverInterface::ClientObserverInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ClientObserverInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ClientObserverInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ClientObserverInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ClientObserverInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

static QLatin1String Tp::Client::ClientObserverInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Client.Observer", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property ObserverChannelFilter of type Tp::ChannelClassList.

A specification of the channels in which this observer is interested. The ObserveChannels() method should be called by the channel dispatcher whenever any of the new channels in a ConnectionInterfaceRequestsInterface::NewChannels() signal match this description.

Only certain D-Bus types have useful semantics for matching like this, so only certain types are allowed:

Integers of all sizes, including byte (y, n, q, i, u, x, t)
Matched by numeric value, regardless of type (e.g. 42 as a 16-bit signed integer 'n' is considered equal to 42 as a 32-bit unsigned integer 'u')
Booleans (b)
Matched by equality in the obvious way; not considered equal to any other type
Strings (s)
Matched by equality in the obvious way; not considered equal to any other type
Object paths (o)
Matched by equality in the obvious way; not considered equal to any other type

This property never changes while the observer process owns its Client bus name. For activatable processes, the filter can change due to an upgrade - the channel dispatcher SHOULD observe changes to .client files using a mechanism like inotify.

Not allowing this property to change is a simplification, particularly for activatable processes (we reject the possibility that a process with a .client file, when activated, has a filter that differs from what its .client file said).

If an Observer wants to add extra channels to its list of interests at runtime, it can register an additional Client bus name (for instance, the org.freedesktop.Telepathy.Client.Empathy process with unique name :1.42 could additionally register org.freedesktop.Telepathy.Client.Empathy._1_42) with additional filters. To remove those filters, it can release the bus name; it could even re-claim the bus name immediately, with different filters.

The same principle is applied to Approvers and Handlers.

For observers that have a .client file, the channel dispatcher may discover this property from keys of the form "propertyname type", in groups in the .client file whose name is the name of this interface followed by .ObserverChannelFilter, a space and an ASCII decimal number starting from 0.

Values in the .client file are encoded in exactly the same way as the default-p keys in .manager files, as described in the ConnectionManagerInterface interface (but note that not all types supported in .manager files can appear in .client files).

For instance, a .client file for an observer that is only interested in Text channels, with CONTACT or ROOM handles, that were requested by a local client:

 [org.freedesktop.Telepathy.Client]
 Interfaces=org.freedesktop.Telepathy.Client.Observer;
 
 [org.freedesktop.Telepathy.Client.Observer.ObserverChannelFilter 0]
 org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.Text
 org.freedesktop.Telepathy.Channel.TargetHandleType u=1
 org.freedesktop.Telepathy.Channel.Requested b=true
 
 [org.freedesktop.Telepathy.Client.Observer.ObserverChannelFilter 1]
 org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.Text
 org.freedesktop.Telepathy.Channel.TargetHandleType u=2
 org.freedesktop.Telepathy.Channel.Requested b=true
 
Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Recover of type bool.

If true, upon the startup of this observer, ClientObserverInterface::ObserveChannels() will be called for every already existing channel matching its ClientObserverInterface::ObserverChannelFilter

When an activatable client having this property disappears from the bus and there are channels matching its ObserverChannelFilter, ObserveChannels will be called immediately to reactivate it again. Such clients should specify this property in their .client file as follows:

 [org.freedesktop.Telepathy.Client.Observer]
 Recover=true
 

This means that if an activatable Observer crashes, it will be restarted as soon as possible; while there is an unavoidable possibility that it will miss some events during this process (particularly ChannelTypeTextInterface messages), this window of event loss is kept to a minimum.

Non-activatable observers can't take advantage of this mechanism, but setting this property on a non-activatable observer does allow it to "catch up" on channels that are currently active at the time that it starts up.

When the ObserveChannels method is called due to observer recovery, the Observer_Info dictionary will contain one extra item mapping the key "recovering" to True.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property DelayApprovers of type bool.

If true, the channel dispatcher will wait for ObserveChannels() to return before calling ClientApproverInterface::AddDispatchOperation() on appropriate Approvers.

This property SHOULD be false unless there is a reason why a channel should not be given to approvers. An example of this is if an Observer is also a Handler and wants to ChannelDispatchOperationInterface::Claim() a channel so that it becomes its handler and doesn't want any approver to be called, this property should be true.

Observers and Approvers should be called at the same time in normal operation (with this property set to false) to improve responsiveness. For example, if an incoming call appears, the approver should get the channel as fast as possible to show a dialog, but if an approver has to make round-trips to set itself up, then the approval of the channel is delayed. As a result, it is recommended for this property to remain false unless absolutely necessary.

For service-activatable clients, this property should be specified in the observer's .client file as follows:

If this property is not implemented (telepathy-mission-control 5.7.5 and older), the channel dispatcher SHOULD consider it as being false.

 [org.freedesktop.Telepathy.Client.Observer]
 DelayApprovers=true
 
Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::ClientObserverInterface::ObserveChannels ( const QDBusObjectPath &  account,
const QDBusObjectPath &  connection,
const Tp::ChannelDetailsList channels,
const QDBusObjectPath &  dispatchOperation,
const Tp::ObjectPathList requestsSatisfied,
const QVariantMap &  observerInfo,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method ObserveChannels on the remote object.

Called by the channel dispatcher when channels in which the observer has registered an interest are announced in a ConnectionInterfaceRequestsInterface::NewChannels() signal.

If the same NewChannels signal announces some channels that match the filter, and some that do not, then only a subset of the channels (those that do match the filter) are passed to this method.

If the channel dispatcher will split up the channels from a single NewChannels signal and dispatch them separately (for instance because no installed Handler can handle all of them), it will call ObserveChannels several times.

The observer MUST NOT return from this method call until it is ready for a handler for the channel to run (which may change the channel's state).

The channel dispatcher must wait for observers to start up, to avoid the following race: text channel logger (observer) gets ObserveChannels, text channel handler gets ClientHandlerInterface::HandleChannels() channel handler starts up faster and acknowledges messages, logger never sees those messages.

The channel dispatcher SHOULD NOT change its behaviour based on whether this method succeeds or fails: there are no defined D-Bus errors for this method, and if it fails, this only indicates that an Observer is somehow broken.

The expected error response in the channel dispatcher is to log a warning, and otherwise continue as though this method had succeeded.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
accountThe Account with which the channels are associated. The well-known bus name to use is that of the AccountManager.
connectionThe Connection with which the channels are associated. The well-known bus name to use can be derived from this object path by removing the leading '/' and replacing all subsequent '/' by '.'.
channelsThe Channels and their properties. Their well-known bus names are all the same as that of the Connection.
dispatchOperation

The path to the ChannelDispatchOperationInterface for these channels, or the special value '/' if there is no ChannelDispatchOperation (because the channels were requested, not incoming).

If the Observer calls ChannelDispatchOperationInterface::Claim() or ChannelDispatchOperationInterface::HandleWith() on the dispatch operation, it MUST be careful to avoid deadlock, since these methods cannot return until the Observer has returned from ObserveChannels() .

This allows an Observer to ChannelDispatchOperationInterface::Claim() a set of channels without having to match up calls to this method with calls to ClientApproverInterface::AddDispatchOperation() .

requestsSatisfiedThe ChannelRequests satisfied by these channels. If the same process is an Observer and a Handler, it can be useful to be given this information as soon as possible (it will also be passed to Handler.HandleChannels).
observerInfo

Additional information about these channels. Currently defined keys are:

recovering - b
True if ObserveChannels was called for an existing channel (due to the Recover property being True); False or omitted otherwise.
This allows observers to distinguish between new channels (the normal case), and existing channels that were given to the observer in order to catch up on previous events (perhaps after a previous instance of the same observer crashed).
request-properties - a{oa{sv}}
A map from ChannelRequestInterface paths listed in Requests_Satisfied to Qualified_Property_Value_Maps containing namespaced immutable properties of each request.

All defined keys for this dictionary are optional; observers MAY safely ignore any entry in this dictionary.

timeoutThe timeout in milliseconds.
void Tp::Client::ClientObserverInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00912.html0000644000175200001440000001223312000060453021622 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingVariant Member List
This is the complete list of members for Tp::PendingVariant, including all inherited members.
errorMessage() const Tp::PendingOperation
errorName() const Tp::PendingOperation
finished(Tp::PendingOperation *operation)Tp::PendingOperation [signal]
isError() const Tp::PendingOperation
isFinished() const Tp::PendingOperation
isValid() const Tp::PendingOperation
object() const Tp::PendingOperation [protected]
PendingOperation(const SharedPtr< RefCounted > &object)Tp::PendingOperation [protected]
PendingVariant(QDBusPendingCall call, const SharedPtr< RefCounted > &object)Tp::PendingVariant
result() const Tp::PendingVariant
setFinished()Tp::PendingOperation [protected, slot]
setFinishedWithError(const QString &name, const QString &message)Tp::PendingOperation [protected, slot]
setFinishedWithError(const QDBusError &error)Tp::PendingOperation [protected, slot]
~PendingOperation()Tp::PendingOperation [virtual]
~PendingVariant()Tp::PendingVariant


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_vars_0x6f.html0000644000175200001440000000523212000060453024715 0ustar00collabora-develusers00000000000000 Class Members - Variables
   Home · All Classes · All Namespaces · Modules · Functions · Files


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00368.html0000644000175200001440000001012512000060453021625 0ustar00collabora-develusers00000000000000 Tp::RichPresenceAccessControl Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::RichPresenceAccessControl Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

An access control mode for extended presence items like geolocation. This type isn't actually used by the SimplePresence interface, but it's included here so it can be referenced by rich presence interfaces such as ConnectionInterfaceLocationInterface .

ConnectionInterfaceLocationInterface uses this for historical reasons, new interfaces will use Access_Control_Type.


Member Data Documentation

The type of access control to apply.

Any additional information required by the Type. The required type and semantics are defined for each Rich_Presence_Access_Control_Type.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00354.html0000644000175200001440000001774612000060453021640 0ustar00collabora-develusers00000000000000 Tp::PtrFunctor4< R, Arg1, Arg2, Arg3, Arg4 > Struct Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PtrFunctor4< R, Arg1, Arg2, Arg3, Arg4 > Struct Template Reference

#include </home/collabora-devel/kde/src/telepathy-qt4/TelepathyQt/functors.h>

Inherits Tp::BaseFunctor.

List of all members.

Public Types

Public Member Functions

Public Attributes

template<class R, class Arg1, class Arg2, class Arg3, class Arg4>
struct Tp::PtrFunctor4< R, Arg1, Arg2, Arg3, Arg4 >


Member Typedef Documentation

template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 >
typedef R(* Tp::PtrFunctor4< R, Arg1, Arg2, Arg3, Arg4 >::FunctionType)(Arg1, Arg2, Arg3, Arg4)
template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 >
typedef R Tp::PtrFunctor4< R, Arg1, Arg2, Arg3, Arg4 >::ResultType

Constructor & Destructor Documentation

template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 >
Tp::PtrFunctor4< R, Arg1, Arg2, Arg3, Arg4 >::PtrFunctor4 ( FunctionType  fn) [inline]

Member Function Documentation

template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 >
ResultType Tp::PtrFunctor4< R, Arg1, Arg2, Arg3, Arg4 >::operator() ( Arg1  a1,
Arg2  a2,
Arg3  a3,
Arg4  a4 
) const [inline]

Member Data Documentation

template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 >
FunctionType Tp::PtrFunctor4< R, Arg1, Arg2, Arg3, Arg4 >::fn


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00206.html0000644000175200001440000001167412000060453021626 0ustar00collabora-develusers00000000000000 Tp::ContactSearchMap Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactSearchMap Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<QString, QString>, but needed to have a discrete type in the Qt type system.

A map from search keys to search terms.


Constructor & Destructor Documentation

Tp::ContactSearchMap::ContactSearchMap ( const QMap< QString, QString > &  a) [inline]

Member Function Documentation

ContactSearchMap& Tp::ContactSearchMap::operator= ( const QMap< QString, QString > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00506_source.html0000644000175200001440000006047112000060453023210 0ustar00collabora-develusers00000000000000 cli-connection-manager-body.hpp Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-connection-manager-body.hpp
00001 #define IN_TP_QT_HEADER
00002 #include "TelepathyQt/connection-manager.h"
00003 
00004 namespace Tp
00005 {
00006 namespace Client
00007 {
00008 
00009 ConnectionManagerInterface::ConnectionManagerInterface(const QString& busName, const QString& objectPath, QObject *parent)
00010     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00011 {
00012 }
00013 
00014 ConnectionManagerInterface::ConnectionManagerInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00015     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00016 {
00017 }
00018 
00019 ConnectionManagerInterface::ConnectionManagerInterface(Tp::DBusProxy *proxy)
00020     : Tp::AbstractInterface(proxy, staticInterfaceName())
00021 {
00022 }
00023 
00024 void ConnectionManagerInterface::invalidate(Tp::DBusProxy *proxy,
00025         const QString &error, const QString &message)
00026 {
00027     disconnect(this, SIGNAL(NewConnection(const QString&, const QDBusObjectPath&, const QString&)), NULL, NULL);
00028 
00029     Tp::AbstractInterface::invalidate(proxy, error, message);
00030 }
00031 
00032 ProtocolInterface::ProtocolInterface(const QString& busName, const QString& objectPath, QObject *parent)
00033     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00034 {
00035 }
00036 
00037 ProtocolInterface::ProtocolInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00038     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00039 {
00040 }
00041 
00042 ProtocolInterface::ProtocolInterface(Tp::DBusProxy *proxy)
00043     : Tp::AbstractInterface(proxy, staticInterfaceName())
00044 {
00045 }
00046 
00047 ProtocolInterface::ProtocolInterface(const Tp::Client::ConnectionManagerInterface& mainInterface)
00048     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00049 {
00050 }
00051 
00052 ProtocolInterface::ProtocolInterface(const Tp::Client::ConnectionManagerInterface& mainInterface, QObject *parent)
00053     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00054 {
00055 }
00056 
00057 void ProtocolInterface::invalidate(Tp::DBusProxy *proxy,
00058         const QString &error, const QString &message)
00059 {
00060 
00061     Tp::AbstractInterface::invalidate(proxy, error, message);
00062 }
00063 
00064 ProtocolInterfaceAddressingInterface::ProtocolInterfaceAddressingInterface(const QString& busName, const QString& objectPath, QObject *parent)
00065     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00066 {
00067 }
00068 
00069 ProtocolInterfaceAddressingInterface::ProtocolInterfaceAddressingInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00070     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00071 {
00072 }
00073 
00074 ProtocolInterfaceAddressingInterface::ProtocolInterfaceAddressingInterface(Tp::DBusProxy *proxy)
00075     : Tp::AbstractInterface(proxy, staticInterfaceName())
00076 {
00077 }
00078 
00079 ProtocolInterfaceAddressingInterface::ProtocolInterfaceAddressingInterface(const Tp::Client::ConnectionManagerInterface& mainInterface)
00080     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00081 {
00082 }
00083 
00084 ProtocolInterfaceAddressingInterface::ProtocolInterfaceAddressingInterface(const Tp::Client::ConnectionManagerInterface& mainInterface, QObject *parent)
00085     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00086 {
00087 }
00088 
00089 void ProtocolInterfaceAddressingInterface::invalidate(Tp::DBusProxy *proxy,
00090         const QString &error, const QString &message)
00091 {
00092 
00093     Tp::AbstractInterface::invalidate(proxy, error, message);
00094 }
00095 
00096 ProtocolInterfaceAvatarsInterface::ProtocolInterfaceAvatarsInterface(const QString& busName, const QString& objectPath, QObject *parent)
00097     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00098 {
00099 }
00100 
00101 ProtocolInterfaceAvatarsInterface::ProtocolInterfaceAvatarsInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00102     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00103 {
00104 }
00105 
00106 ProtocolInterfaceAvatarsInterface::ProtocolInterfaceAvatarsInterface(Tp::DBusProxy *proxy)
00107     : Tp::AbstractInterface(proxy, staticInterfaceName())
00108 {
00109 }
00110 
00111 ProtocolInterfaceAvatarsInterface::ProtocolInterfaceAvatarsInterface(const Tp::Client::ConnectionManagerInterface& mainInterface)
00112     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00113 {
00114 }
00115 
00116 ProtocolInterfaceAvatarsInterface::ProtocolInterfaceAvatarsInterface(const Tp::Client::ConnectionManagerInterface& mainInterface, QObject *parent)
00117     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00118 {
00119 }
00120 
00121 void ProtocolInterfaceAvatarsInterface::invalidate(Tp::DBusProxy *proxy,
00122         const QString &error, const QString &message)
00123 {
00124 
00125     Tp::AbstractInterface::invalidate(proxy, error, message);
00126 }
00127 
00128 ProtocolInterfacePresenceInterface::ProtocolInterfacePresenceInterface(const QString& busName, const QString& objectPath, QObject *parent)
00129     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00130 {
00131 }
00132 
00133 ProtocolInterfacePresenceInterface::ProtocolInterfacePresenceInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00134     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00135 {
00136 }
00137 
00138 ProtocolInterfacePresenceInterface::ProtocolInterfacePresenceInterface(Tp::DBusProxy *proxy)
00139     : Tp::AbstractInterface(proxy, staticInterfaceName())
00140 {
00141 }
00142 
00143 ProtocolInterfacePresenceInterface::ProtocolInterfacePresenceInterface(const Tp::Client::ConnectionManagerInterface& mainInterface)
00144     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00145 {
00146 }
00147 
00148 ProtocolInterfacePresenceInterface::ProtocolInterfacePresenceInterface(const Tp::Client::ConnectionManagerInterface& mainInterface, QObject *parent)
00149     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00150 {
00151 }
00152 
00153 void ProtocolInterfacePresenceInterface::invalidate(Tp::DBusProxy *proxy,
00154         const QString &error, const QString &message)
00155 {
00156 
00157     Tp::AbstractInterface::invalidate(proxy, error, message);
00158 }
00159 }
00160 }


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00264.html0000644000175200001440000000760012000060453021624 0ustar00collabora-develusers00000000000000 Tp::MediaDescriptionOffer Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MediaDescriptionOffer Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

The remote description offer and its information


Member Data Documentation

The object path to the CallContentMediaDescriptionInterface

The immutable properties of all interfaces of the codec description. Having all the codec description properties here saves a D-Bus round-trip - it shouldn't be necessary to get the properties from the MediaDescription object, in practice.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/tab_h.png0000644000175200001440000000030012000060453021673 0ustar00collabora-develusers00000000000000PNG  IHDR$[IDATx `FhY 26@cHw!ϗK1^HtOyGD׎ k9?i7zvPaJ})غwV`ai֍ZPC"P=IENDB`telepathy-qt-0.9.3/doc/html/a00520_source.html0000644000175200001440000003365012000060453023203 0ustar00collabora-develusers00000000000000 cli-tls-certificate.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-tls-certificate.h
00001 /*
00002  * This file contains D-Bus client proxy classes generated by qt-client-gen.py.
00003  *
00004  * This file can be distributed under the same terms as the specification from
00005  * which it was generated.
00006  */
00007 
00008 #ifndef IN_TP_QT_HEADER
00009 #error IN_TP_QT_HEADER
00010 #endif
00011 
00012 #include <TelepathyQt/Types>
00013 
00014 #include <QtGlobal>
00015 
00016 #include <QString>
00017 #include <QObject>
00018 #include <QVariant>
00019 
00020 #include <QDBusPendingReply>
00021 
00022 #include <TelepathyQt/AbstractInterface>
00023 #include <TelepathyQt/DBusProxy>
00024 #include <TelepathyQt/Global>
00025 
00026 namespace Tp
00027 {
00028 class PendingVariant;
00029 class PendingOperation;
00030 }
00031 
00032 namespace Tp
00033 {
00034 namespace Client
00035 {
00036 
00044 class TP_QT_EXPORT AuthenticationTLSCertificateInterface : public Tp::AbstractInterface
00045 {
00046     Q_OBJECT
00047 
00048 public:
00055     static inline QLatin1String staticInterfaceName()
00056     {
00057         return QLatin1String("org.freedesktop.Telepathy.Authentication.TLSCertificate");
00058     }
00059 
00067     AuthenticationTLSCertificateInterface(
00068         const QString& busName,
00069         const QString& objectPath,
00070         QObject* parent = 0
00071     );
00072 
00081     AuthenticationTLSCertificateInterface(
00082         const QDBusConnection& connection,
00083         const QString& busName,
00084         const QString& objectPath,
00085         QObject* parent = 0
00086     );
00087 
00094     AuthenticationTLSCertificateInterface(Tp::DBusProxy *proxy);
00095 
00103     explicit AuthenticationTLSCertificateInterface(const Tp::AbstractInterface& mainInterface);
00104 
00112     AuthenticationTLSCertificateInterface(const Tp::AbstractInterface& mainInterface, QObject* parent);
00113 
00124     inline Tp::PendingVariant *requestPropertyState() const
00125     {
00126         return internalRequestProperty(QLatin1String("State"));
00127     }
00128 
00149     inline Tp::PendingVariant *requestPropertyRejections() const
00150     {
00151         return internalRequestProperty(QLatin1String("Rejections"));
00152     }
00153 
00164     inline Tp::PendingVariant *requestPropertyCertificateType() const
00165     {
00166         return internalRequestProperty(QLatin1String("CertificateType"));
00167     }
00168 
00184     inline Tp::PendingVariant *requestPropertyCertificateChainData() const
00185     {
00186         return internalRequestProperty(QLatin1String("CertificateChainData"));
00187     }
00188 
00195     Tp::PendingVariantMap *requestAllProperties() const
00196     {
00197         return internalRequestAllProperties();
00198     }
00199 
00200 public Q_SLOTS:
00211     inline QDBusPendingReply<> Accept(int timeout = -1)
00212     {
00213         if (!invalidationReason().isEmpty()) {
00214             return QDBusPendingReply<>(QDBusMessage::createError(
00215                 invalidationReason(),
00216                 invalidationMessage()
00217             ));
00218         }
00219 
00220         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00221                 this->staticInterfaceName(), QLatin1String("Accept"));
00222         return this->connection().asyncCall(callMessage, timeout);
00223     }
00224 
00242     inline QDBusPendingReply<> Reject(const Tp::TLSCertificateRejectionList& rejections, int timeout = -1)
00243     {
00244         if (!invalidationReason().isEmpty()) {
00245             return QDBusPendingReply<>(QDBusMessage::createError(
00246                 invalidationReason(),
00247                 invalidationMessage()
00248             ));
00249         }
00250 
00251         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00252                 this->staticInterfaceName(), QLatin1String("Reject"));
00253         callMessage << QVariant::fromValue(rejections);
00254         return this->connection().asyncCall(callMessage, timeout);
00255     }
00256 
00257 Q_SIGNALS:
00263     void Accepted();
00264 
00274     void Rejected(const Tp::TLSCertificateRejectionList& rejections);
00275 
00276 protected:
00277     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
00278 };
00279 }
00280 }
00281 Q_DECLARE_METATYPE(Tp::Client::AuthenticationTLSCertificateInterface*)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00260.html0000644000175200001440000005367712000060453021637 0ustar00collabora-develusers00000000000000 Tp::LocationInfo Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::LocationInfo Class Reference

The LocationInfo class represents the location of a Telepathy Contact. More...

#include <TelepathyQt/LocationInfo>

List of all members.

Public Member Functions


Detailed Description

The LocationInfo class represents the location of a Telepathy Contact.


Constructor & Destructor Documentation

Construct a new LocationInfo object.

Tp::LocationInfo::LocationInfo ( const QVariantMap &  location)

Class destructor.


Member Function Documentation

bool Tp::LocationInfo::isValid ( ) const [inline]
LocationInfo & Tp::LocationInfo::operator= ( const LocationInfo other)
QString Tp::LocationInfo::countryCode ( ) const
QString Tp::LocationInfo::country ( ) const
QString Tp::LocationInfo::region ( ) const
QString Tp::LocationInfo::locality ( ) const
QString Tp::LocationInfo::area ( ) const
QString Tp::LocationInfo::postalCode ( ) const
QString Tp::LocationInfo::street ( ) const
QString Tp::LocationInfo::building ( ) const
QString Tp::LocationInfo::floor ( ) const
QString Tp::LocationInfo::room ( ) const
QString Tp::LocationInfo::text ( ) const
QString Tp::LocationInfo::description ( ) const
QString Tp::LocationInfo::uri ( ) const
QString Tp::LocationInfo::language ( ) const
double Tp::LocationInfo::latitude ( ) const
double Tp::LocationInfo::longitude ( ) const
double Tp::LocationInfo::altitude ( ) const
double Tp::LocationInfo::accuracy ( ) const
double Tp::LocationInfo::speed ( ) const
double Tp::LocationInfo::bearing ( ) const
QDateTime Tp::LocationInfo::timestamp ( ) const
QVariantMap Tp::LocationInfo::allDetails ( ) const


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00447_source.html0000644000175200001440000007534512000060453023222 0ustar00collabora-develusers00000000000000 base-protocol.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
base-protocol.h
00001 
00023 #ifndef _TelepathyQt_base_protocol_h_HEADER_GUARD_
00024 #define _TelepathyQt_base_protocol_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/AvatarSpec>
00031 #include <TelepathyQt/Callbacks>
00032 #include <TelepathyQt/DBusService>
00033 #include <TelepathyQt/Global>
00034 #include <TelepathyQt/PresenceSpecList>
00035 #include <TelepathyQt/ProtocolParameterList>
00036 #include <TelepathyQt/RequestableChannelClassSpecList>
00037 #include <TelepathyQt/Types>
00038 
00039 #include <QDBusConnection>
00040 
00041 class QString;
00042 class QStringList;
00043 
00044 namespace Tp
00045 {
00046 
00047 class TP_QT_EXPORT BaseProtocol : public DBusService
00048 {
00049     Q_OBJECT
00050     Q_DISABLE_COPY(BaseProtocol)
00051 
00052 public:
00053     static BaseProtocolPtr create(const QString &name)
00054     {
00055         return BaseProtocolPtr(new BaseProtocol(QDBusConnection::sessionBus(), name));
00056     }
00057     template<typename BaseProtocolSubclass>
00058     static SharedPtr<BaseProtocolSubclass> create(const QString &name)
00059     {
00060         return SharedPtr<BaseProtocolSubclass>(new BaseProtocolSubclass(
00061                 QDBusConnection::sessionBus(), name));
00062     }
00063     static BaseProtocolPtr create(const QDBusConnection &dbusConnection, const QString &name)
00064     {
00065         return BaseProtocolPtr(new BaseProtocol(dbusConnection, name));
00066     }
00067     template<typename BaseProtocolSubclass>
00068     static SharedPtr<BaseProtocolSubclass> create(const QDBusConnection &dbusConnection,
00069             const QString &name)
00070     {
00071         return SharedPtr<BaseProtocolSubclass>(new BaseProtocolSubclass(dbusConnection, name));
00072     }
00073 
00074     virtual ~BaseProtocol();
00075 
00076     QString name() const;
00077 
00078     QVariantMap immutableProperties() const;
00079 
00080     // Proto
00081     QStringList connectionInterfaces() const;
00082     void setConnectionInterfaces(const QStringList &connInterfaces);
00083 
00084     ProtocolParameterList parameters() const;
00085     void setParameters(const ProtocolParameterList &parameters);
00086 
00087     RequestableChannelClassSpecList requestableChannelClasses() const;
00088     void setRequestableChannelClasses(const RequestableChannelClassSpecList &rccSpecs);
00089 
00090     QString vcardField() const;
00091     void setVCardField(const QString &vcardField);
00092 
00093     QString englishName() const;
00094     void setEnglishName(const QString &englishName);
00095 
00096     QString iconName() const;
00097     void setIconName(const QString &iconName);
00098 
00099     QStringList authenticationTypes() const;
00100     void setAuthenticationTypes(const QStringList &authenticationTypes);
00101 
00102     typedef Callback2<BaseConnectionPtr, const QVariantMap &, DBusError*> CreateConnectionCallback;
00103     void setCreateConnectionCallback(const CreateConnectionCallback &cb);
00104     Tp::BaseConnectionPtr createConnection(const QVariantMap &parameters, DBusError *error);
00105 
00106     typedef Callback2<QString, const QVariantMap &, DBusError*> IdentifyAccountCallback;
00107     void setIdentifyAccountCallback(const IdentifyAccountCallback &cb);
00108     QString identifyAccount(const QVariantMap &parameters, DBusError *error);
00109 
00110     typedef Callback2<QString, const QString &, DBusError*> NormalizeContactCallback;
00111     void setNormalizeContactCallback(const NormalizeContactCallback &cb);
00112     QString normalizeContact(const QString &contactId, DBusError *error);
00113 
00114     QList<AbstractProtocolInterfacePtr> interfaces() const;
00115     AbstractProtocolInterfacePtr interface(const QString & interfaceName) const;
00116     bool plugInterface(const AbstractProtocolInterfacePtr &interface);
00117 
00118 protected:
00119     BaseProtocol(const QDBusConnection &dbusConnection, const QString &name);
00120 
00121     virtual bool registerObject(const QString &busName, const QString &objectPath,
00122             DBusError *error);
00123 
00124 private:
00125     friend class BaseConnectionManager;
00126     class Adaptee;
00127     friend class Adaptee;
00128     class Private;
00129     friend class Private;
00130     Private *mPriv;
00131 };
00132 
00133 class TP_QT_EXPORT AbstractProtocolInterface : public AbstractDBusServiceInterface
00134 {
00135     Q_OBJECT
00136     Q_DISABLE_COPY(AbstractProtocolInterface)
00137 
00138 public:
00139     AbstractProtocolInterface(const QString &interfaceName);
00140     virtual ~AbstractProtocolInterface();
00141 
00142 private:
00143     friend class BaseProtocol;
00144 
00145     class Private;
00146     friend class Private;
00147     Private *mPriv;
00148 };
00149 
00150 class TP_QT_EXPORT BaseProtocolAddressingInterface : public AbstractProtocolInterface
00151 {
00152     Q_OBJECT
00153     Q_DISABLE_COPY(BaseProtocolAddressingInterface)
00154 
00155 public:
00156     static BaseProtocolAddressingInterfacePtr create()
00157     {
00158         return BaseProtocolAddressingInterfacePtr(new BaseProtocolAddressingInterface());
00159     }
00160     template<typename BaseProtocolAddressingInterfaceSubclass>
00161     static SharedPtr<BaseProtocolAddressingInterfaceSubclass> create()
00162     {
00163         return SharedPtr<BaseProtocolAddressingInterfaceSubclass>(
00164                 new BaseProtocolAddressingInterfaceSubclass());
00165     }
00166 
00167     virtual ~BaseProtocolAddressingInterface();
00168 
00169     QVariantMap immutableProperties() const;
00170 
00171     QStringList addressableVCardFields() const;
00172     void setAddressableVCardFields(const QStringList &vcardFields);
00173 
00174     QStringList addressableUriSchemes() const;
00175     void setAddressableUriSchemes(const QStringList &uriSchemes);
00176 
00177     typedef Callback3<QString, const QString &, const QString &, DBusError*> NormalizeVCardAddressCallback;
00178     void setNormalizeVCardAddressCallback(const NormalizeVCardAddressCallback &cb);
00179     QString normalizeVCardAddress(const QString &vcardField, const QString &vcardAddress, DBusError *error);
00180 
00181     typedef Callback2<QString, const QString &, DBusError*> NormalizeContactUriCallback;
00182     void setNormalizeContactUriCallback(const NormalizeContactUriCallback &cb);
00183     QString normalizeContactUri(const QString &uri, DBusError *error);
00184 
00185 protected:
00186     BaseProtocolAddressingInterface();
00187 
00188 private:
00189     void createAdaptor();
00190 
00191     class Adaptee;
00192     friend class Adaptee;
00193     struct Private;
00194     friend struct Private;
00195     Private *mPriv;
00196 };
00197 
00198 class TP_QT_EXPORT BaseProtocolAvatarsInterface : public AbstractProtocolInterface
00199 {
00200     Q_OBJECT
00201     Q_DISABLE_COPY(BaseProtocolAvatarsInterface)
00202 
00203 public:
00204     static BaseProtocolAvatarsInterfacePtr create()
00205     {
00206         return BaseProtocolAvatarsInterfacePtr(new BaseProtocolAvatarsInterface());
00207     }
00208     template<typename BaseProtocolAvatarsInterfaceSubclass>
00209     static SharedPtr<BaseProtocolAvatarsInterfaceSubclass> create()
00210     {
00211         return SharedPtr<BaseProtocolAvatarsInterfaceSubclass>(
00212                 new BaseProtocolAvatarsInterfaceSubclass());
00213     }
00214 
00215     virtual ~BaseProtocolAvatarsInterface();
00216 
00217     QVariantMap immutableProperties() const;
00218 
00219     AvatarSpec avatarDetails() const;
00220     void setAvatarDetails(const AvatarSpec &spec);
00221 
00222 protected:
00223     BaseProtocolAvatarsInterface();
00224 
00225 private:
00226     void createAdaptor();
00227 
00228     class Adaptee;
00229     friend class Adaptee;
00230     struct Private;
00231     friend struct Private;
00232     Private *mPriv;
00233 };
00234 
00235 class TP_QT_EXPORT BaseProtocolPresenceInterface : public AbstractProtocolInterface
00236 {
00237     Q_OBJECT
00238     Q_DISABLE_COPY(BaseProtocolPresenceInterface)
00239 
00240 public:
00241     static BaseProtocolPresenceInterfacePtr create()
00242     {
00243         return BaseProtocolPresenceInterfacePtr(new BaseProtocolPresenceInterface());
00244     }
00245     template<typename BaseProtocolPresenceInterfaceSubclass>
00246     static SharedPtr<BaseProtocolPresenceInterfaceSubclass> create()
00247     {
00248         return SharedPtr<BaseProtocolPresenceInterfaceSubclass>(
00249                 new BaseProtocolPresenceInterfaceSubclass());
00250     }
00251 
00252     virtual ~BaseProtocolPresenceInterface();
00253 
00254     QVariantMap immutableProperties() const;
00255 
00256     PresenceSpecList statuses() const;
00257     void setStatuses(const PresenceSpecList &statuses);
00258 
00259 protected:
00260     BaseProtocolPresenceInterface();
00261 
00262 private:
00263     void createAdaptor();
00264 
00265     class Adaptee;
00266     friend class Adaptee;
00267     struct Private;
00268     friend struct Private;
00269     Private *mPriv;
00270 };
00271 
00272 }
00273 
00274 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00512_source.html0000644000175200001440000002420512000060453023200 0ustar00collabora-develusers00000000000000 cli-debug-receiver.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-debug-receiver.h
00001 /*
00002  * This file contains D-Bus client proxy classes generated by qt-client-gen.py.
00003  *
00004  * This file can be distributed under the same terms as the specification from
00005  * which it was generated.
00006  */
00007 
00008 #ifndef IN_TP_QT_HEADER
00009 #error IN_TP_QT_HEADER
00010 #endif
00011 
00012 #include <TelepathyQt/Types>
00013 
00014 #include <QtGlobal>
00015 
00016 #include <QString>
00017 #include <QObject>
00018 #include <QVariant>
00019 
00020 #include <QDBusPendingReply>
00021 
00022 #include <TelepathyQt/AbstractInterface>
00023 #include <TelepathyQt/DBusProxy>
00024 #include <TelepathyQt/Global>
00025 
00026 namespace Tp
00027 {
00028 class PendingVariant;
00029 class PendingOperation;
00030 }
00031 
00032 namespace Tp
00033 {
00034 namespace Client
00035 {
00036 
00044 class TP_QT_EXPORT DebugInterface : public Tp::AbstractInterface
00045 {
00046     Q_OBJECT
00047 
00048 public:
00055     static inline QLatin1String staticInterfaceName()
00056     {
00057         return QLatin1String("org.freedesktop.Telepathy.Debug");
00058     }
00059 
00067     DebugInterface(
00068         const QString& busName,
00069         const QString& objectPath,
00070         QObject* parent = 0
00071     );
00072 
00081     DebugInterface(
00082         const QDBusConnection& connection,
00083         const QString& busName,
00084         const QString& objectPath,
00085         QObject* parent = 0
00086     );
00087 
00094     DebugInterface(Tp::DBusProxy *proxy);
00095 
00106     inline Tp::PendingVariant *requestPropertyEnabled() const
00107     {
00108         return internalRequestProperty(QLatin1String("Enabled"));
00109     }
00110 
00121     inline Tp::PendingOperation *setPropertyEnabled(bool newValue)
00122     {
00123         return internalSetProperty(QLatin1String("Enabled"), QVariant::fromValue(newValue));
00124     }
00125 
00132     Tp::PendingVariantMap *requestAllProperties() const
00133     {
00134         return internalRequestAllProperties();
00135     }
00136 
00137 public Q_SLOTS:
00155     inline QDBusPendingReply<Tp::DebugMessageList> GetMessages(int timeout = -1)
00156     {
00157         if (!invalidationReason().isEmpty()) {
00158             return QDBusPendingReply<Tp::DebugMessageList>(QDBusMessage::createError(
00159                 invalidationReason(),
00160                 invalidationMessage()
00161             ));
00162         }
00163 
00164         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00165                 this->staticInterfaceName(), QLatin1String("GetMessages"));
00166         return this->connection().asyncCall(callMessage, timeout);
00167     }
00168 
00169 Q_SIGNALS:
00193     void NewDebugMessage(double time, const QString& domain, uint level, const QString& message);
00194 
00195 protected:
00196     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
00197 };
00198 }
00199 }
00200 Q_DECLARE_METATYPE(Tp::Client::DebugInterface*)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00384.html0000644000175200001440000001112512000060453021624 0ustar00collabora-develusers00000000000000 Tp::SimpleStatusSpec Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::SimpleStatusSpec Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

A struct containing information about a status.


Member Data Documentation

The type of a presence. This SHOULD NOT be used as a way to set statuses that the client does not recognise (as explained in SetPresence), but MAY be used to check that the client's assumptions about a particular status name match the connection manager's.

If true, the user can set this status on themselves using SetPresence.

If true, a non-empty message can be set for this status. Otherwise, the empty string is the only acceptable message. On IRC you can be Away with a status message, but if you are available you cannot set a status message.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/bc_s.png0000644000175200001440000000124512000060453021535 0ustar00collabora-develusers00000000000000PNG  IHDR /9lIDATxKHTmwfg8Ә6-Bڴ]dVZMaD}ghB*bU93Fy< ayt %8VjLlCF@m[ 7jRC0TUYYsv~,i).w w\cT i `owgH05%>\.*O0-c}B+ms˅V5:} *lcVO^aXx)0xrKfxxo5IkWaj;V[ƫ@fnؿR.B_CK|.03TH=7㴙8k_ӑϒ2z:V&fBvN9iVY յ>.Qx{E'|dj6ڝ؇x?sJ@uӑhbIҽ2,F[bӑh e'@;^dxg2FaG^@,)l߅ T-RU*ȕEΩ644l #jD Őo{N IENDB`telepathy-qt-0.9.3/doc/html/a00330.html0000644000175200001440000001420612000060453021616 0ustar00collabora-develusers00000000000000 Tp::PendingVariantMap Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingVariantMap Class Reference

The PendingVariantMap class is a generic subclass of PendingOperation representing a pending D-Bus method call that returns a variant map. More...

#include <TelepathyQt/PendingVariantMap>

Inherits Tp::PendingOperation.

List of all members.

Public Member Functions


Detailed Description

The PendingVariantMap class is a generic subclass of PendingOperation representing a pending D-Bus method call that returns a variant map.

See Asynchronous Object Model


Constructor & Destructor Documentation

Tp::PendingVariantMap::PendingVariantMap ( QDBusPendingCall  call,
const SharedPtr< RefCounted > &  object 
)

Member Function Documentation

QVariantMap Tp::PendingVariantMap::result ( ) const


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00071.html0000644000175200001440000001556712000060453021633 0ustar00collabora-develusers00000000000000 Tp::Callback1< R, Arg1 > Class Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Callback1< R, Arg1 > Class Template Reference

Callback with 1 argument. More...

#include <TelepathyQt/Callbacks>

Inherits Tp::BaseCallback.

List of all members.

Public Types

Public Member Functions


Detailed Description

template<class R, class Arg1>
class Tp::Callback1< R, Arg1 >

Callback with 1 argument.

See Callbacks Usage


Member Typedef Documentation

template<class R , class Arg1 >
typedef R(* Tp::Callback1< R, Arg1 >::FunctionType)(Arg1)
template<class R , class Arg1 >
typedef R Tp::Callback1< R, Arg1 >::ResultType

Constructor & Destructor Documentation

template<class R , class Arg1 >
Tp::Callback1< R, Arg1 >::Callback1 ( ) [inline]
template<class R , class Arg1 >
template<class Functor >
Tp::Callback1< R, Arg1 >::Callback1 ( const Functor &  functor) [inline]

Member Function Documentation

template<class R , class Arg1 >
ResultType Tp::Callback1< R, Arg1 >::operator() ( Arg1  a1) const [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00346.html0000644000175200001440000006362112000060453021632 0ustar00collabora-develusers00000000000000 Tp::Client::ProtocolInterfaceAvatarsInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ProtocolInterfaceAvatarsInterface Class Reference

#include <TelepathyQt/ConnectionManager>

Inherits Tp::AbstractInterface.

List of all members.

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Protocol.Interface.Avatars".


Constructor & Destructor Documentation

Tp::Client::ProtocolInterfaceAvatarsInterface::ProtocolInterfaceAvatarsInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ProtocolInterfaceAvatarsInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ProtocolInterfaceAvatarsInterface::ProtocolInterfaceAvatarsInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ProtocolInterfaceAvatarsInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ProtocolInterfaceAvatarsInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ProtocolInterfaceAvatarsInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ProtocolInterfaceAvatarsInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

static QLatin1String Tp::Client::ProtocolInterfaceAvatarsInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Protocol.Interface.Avatars", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property SupportedAvatarMIMETypes of type QStringList.

The expected value of the Connection.Interface.Avatars.SupportedAvatarMIMETypes property on connections to this protocol.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property MinimumAvatarHeight of type uint.

The expected value of the Connection.Interface.Avatars.MinimumAvatarHeight property on connections to this protocol.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property MinimumAvatarWidth of type uint.

The expected value of the Connection.Interface.Avatars.MinimumAvatarWidth property on connections to this protocol.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property RecommendedAvatarHeight of type uint.

The expected value of the Connection.Interface.Avatars.RecommendedAvatarHeight property on connections to this protocol.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property RecommendedAvatarWidth of type uint.

The expected value of the Connection.Interface.Avatars.RecommendedAvatarWidth property on connections to this protocol.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property MaximumAvatarHeight of type uint.

The expected value of the Connection.Interface.Avatars.MaximumAvatarHeight property on connections to this protocol.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property MaximumAvatarWidth of type uint.

The expected value of the Connection.Interface.Avatars.MaximumAvatarWidth property on connections to this protocol.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property MaximumAvatarBytes of type uint.

The expected value of the Connection.Interface.Avatars.MaximumAvatarBytes property on connections to this protocol.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
void Tp::Client::ProtocolInterfaceAvatarsInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00538_source.html0000644000175200001440000001513612000060453023213 0ustar00collabora-develusers00000000000000 contact-capabilities.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
contact-capabilities.h
00001 
00023 #ifndef _TelepathyQt_contact_capabilities_h_HEADER_GUARD_
00024 #define _TelepathyQt_contact_capabilities_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/CapabilitiesBase>
00031 #include <TelepathyQt/Types>
00032 
00033 namespace Tp
00034 {
00035 
00036 class TestBackdoors;
00037 
00038 class TP_QT_EXPORT ContactCapabilities : public CapabilitiesBase
00039 {
00040 public:
00041     ContactCapabilities();
00042     virtual ~ContactCapabilities();
00043 
00044     bool dbusTubes(const QString &serviceName) const;
00045     QStringList dbusTubeServices() const;
00046 
00047     bool streamTubes(const QString &service) const;
00048     QStringList streamTubeServices() const;
00049 
00050     // later:
00051     // bool dbusTubes(const QString &service) const;
00052     // QStringList dbusTubeServices() const;
00053 
00054 protected:
00055     friend class Contact;
00056     friend class TestBackdoors;
00057 
00058     ContactCapabilities(bool specificToContact);
00059     ContactCapabilities(const RequestableChannelClassList &rccs,
00060             bool specificToContact);
00061     ContactCapabilities(const RequestableChannelClassSpecList &rccSpecs,
00062             bool specificToContact);
00063 };
00064 
00065 } // Tp
00066 
00067 Q_DECLARE_METATYPE(Tp::ContactCapabilities);
00068 
00069 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00252.html0000644000175200001440000005047612000060453021632 0ustar00collabora-develusers00000000000000 Tp::IncomingFileTransferChannel Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The IncomingFileTransferChannel class represents a Telepathy channel of type FileTransfer for incoming file transfers. More...

#include <TelepathyQt/IncomingFileTransferChannel>

Inherits Tp::FileTransferChannel.

List of all members.

Signals

Public Member Functions

Static Public Member Functions

Static Public Attributes

Protected Member Functions


Detailed Description

The IncomingFileTransferChannel class represents a Telepathy channel of type FileTransfer for incoming file transfers.

For more details, please refer to Telepathy specification.

See Asynchronous Object Model, Shared Pointer Usage


Constructor & Destructor Documentation

Tp::IncomingFileTransferChannel::IncomingFileTransferChannel ( const ConnectionPtr &  connection,
const QString &  objectPath,
const QVariantMap &  immutableProperties,
const Feature coreFeature = IncomingFileTransferChannel::FeatureCore 
) [protected]

Construct a new IncomingFileTransferChannel object.

Parameters:
connectionConnection owning this channel, and specifying the service.
objectPathThe channel object path.
immutablePropertiesThe channel immutable properties.
coreFeatureThe core feature of the channel type, if any. The corresponding introspectable should depend on IncomingFileTransferChannel::FeatureCore.

Member Function Documentation

IncomingFileTransferChannelPtr Tp::IncomingFileTransferChannel::create ( const ConnectionPtr &  connection,
const QString &  objectPath,
const QVariantMap &  immutableProperties 
) [static]

Create a new IncomingFileTransferChannel object.

Parameters:
connectionConnection owning this channel, and specifying the service.
objectPathThe channel object path.
immutablePropertiesThe channel immutable properties.
Returns:
A IncomingFileTransferChannelPtr object pointing to the newly created IncomingFileTransfer object.

Reimplemented from Tp::FileTransferChannel.

Set the URI where the file will be saved.

This property may be set by the channel handler before calling AcceptFile to inform observers where the incoming file will be saved. When the URI property is set, the signal uriDefined() is emitted.

This method requires IncomingFileTransferChannel::FeatureCore to be ready.

Parameters:
uriThe URI where the file will be saved.
Returns:
A PendingOperation object which will emit PendingOperation::finished when the call has finished.
See also:
FileTransferChannel::uri(), uriDefined()
PendingOperation * Tp::IncomingFileTransferChannel::acceptFile ( qulonglong  offset,
QIODevice *  output 
)

Accept a file transfer that's in the FileTransferStatePending state().

The state will change to FileTransferStateOpen as soon as the transfer starts. The given output device should not be closed/destroyed until the state() changes to FileTransferStateCompleted or FileTransferStateCancelled.

Only the primary handler of a file transfer channel may call this method.

This method requires IncomingFileTransferChannel::FeatureCore to be ready.

Parameters:
offsetThe desired offset in bytes where the file transfer should start. The offset is taken from the beginning of the file. Specifying an offset of zero will start the transfer from the beginning of the file. The offset that is actually given in the initialOffset() method can differ from this argument where the requested offset is not supported. (For example, some protocols do not support offsets at all so the initialOffset() will always be 0.).
outputA QIODevice object where the data will be written to. The device should be ready to use when the state() changes to FileTransferStateCompleted. If the transfer is cancelled, state() becomes FileTransferStateCancelled, the data in output should be ignored
Returns:
A PendingOperation object which will emit PendingOperation::finished when the call has finished.
See also:
FileTransferChannel::stateChanged(), FileTransferChannel::state(), FileTransferChannel::stateReason(), FileTransferChannel::initialOffset()
void Tp::IncomingFileTransferChannel::uriDefined ( const QString &  uri) [signal]

Emitted when the value of uri() changes.

Parameters:
uriThe new URI of this file transfer channel.
See also:
FileTransferChannel::uri(), setUri()

Member Data Documentation

Feature representing the core that needs to become ready to make the IncomingFileTransferChannel object usable.

This is currently the same as FileTransferChannel::FeatureCore, but may change to include more.

When calling isReady(), becomeReady(), this feature is implicitly added to the requested features.

Reimplemented from Tp::FileTransferChannel.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00241.html0000644000175200001440000002161612000060453021622 0ustar00collabora-develusers00000000000000 Tp::FunctorCaller7< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 > Struct Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::FunctorCaller7< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 > Struct Template Reference

#include </home/collabora-devel/kde/src/telepathy-qt4/TelepathyQt/callbacks.h>

Inherits Tp::BaseFunctorCaller< FunctorCaller7< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >, Functor >.

List of all members.

Public Types

Public Member Functions

Static Public Member Functions

template<class Functor, class R, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7>
struct Tp::FunctorCaller7< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >


Member Typedef Documentation

template<class Functor , class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 , class Arg6 , class Arg7 >
typedef R Tp::FunctorCaller7< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >::ResultType
template<class Functor , class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 , class Arg6 , class Arg7 >
typedef R(* Tp::FunctorCaller7< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >::InvokeType)(AbstractFunctorCaller *, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7)

Constructor & Destructor Documentation

template<class Functor , class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 , class Arg6 , class Arg7 >
Tp::FunctorCaller7< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >::FunctorCaller7 ( const Functor &  functor) [inline, explicit]

Member Function Documentation

template<class Functor , class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 , class Arg6 , class Arg7 >
static ResultType Tp::FunctorCaller7< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >::invoke ( AbstractFunctorCaller call,
Arg1  a1,
Arg2  a2,
Arg3  a3,
Arg4  a4,
Arg5  a5,
Arg6  a6,
Arg7  a7 
) [inline, static]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00526_source.html0000644000175200001440000001715112000060453023207 0ustar00collabora-develusers00000000000000 connection-capabilities.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
connection-capabilities.h
00001 
00023 #ifndef _TelepathyQt_connection_capabilities_h_HEADER_GUARD_
00024 #define _TelepathyQt_connection_capabilities_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/CapabilitiesBase>
00031 #include <TelepathyQt/Types>
00032 
00033 namespace Tp
00034 {
00035 
00036 class TestBackdoors;
00037 
00038 class TP_QT_EXPORT ConnectionCapabilities : public CapabilitiesBase
00039 {
00040 public:
00041     ConnectionCapabilities();
00042     virtual ~ConnectionCapabilities();
00043 
00044     bool textChatrooms() const;
00045 
00046     TP_QT_DEPRECATED bool conferenceStreamedMediaCalls() const;
00047     TP_QT_DEPRECATED bool conferenceStreamedMediaCallsWithInvitees() const;
00048     bool conferenceTextChats() const;
00049     bool conferenceTextChatsWithInvitees() const;
00050     bool conferenceTextChatrooms() const;
00051     bool conferenceTextChatroomsWithInvitees() const;
00052 
00053     bool contactSearches() const;
00054     bool contactSearchesWithSpecificServer() const;
00055     bool contactSearchesWithLimit() const;
00056 
00057     bool dbusTubes() const;
00058     bool streamTubes() const;
00059 
00060 protected:
00061     friend class Account;
00062     friend class Connection;
00063     friend class ProtocolInfo;
00064     friend class TestBackdoors;
00065 
00066     ConnectionCapabilities(const RequestableChannelClassList &rccs);
00067     ConnectionCapabilities(const RequestableChannelClassSpecList &rccSpecs);
00068 };
00069 
00070 } // Tp
00071 
00072 Q_DECLARE_METATYPE(Tp::ConnectionCapabilities);
00073 
00074 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01108.html0000644000175200001440000002251212000060453021621 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelTypeStreamTubeInterface Member List
This is the complete list of members for Tp::Client::ChannelTypeStreamTubeInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
Accept(uint addresstype, uint accesscontrol, const QDBusVariant &accesscontrolparam, int timeout=-1)Tp::Client::ChannelTypeStreamTubeInterface [inline, slot]
ChannelTypeStreamTubeInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelTypeStreamTubeInterface
ChannelTypeStreamTubeInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelTypeStreamTubeInterface
ChannelTypeStreamTubeInterface(Tp::DBusProxy *proxy)Tp::Client::ChannelTypeStreamTubeInterface
ChannelTypeStreamTubeInterface(const Tp::Client::ChannelInterface &mainInterface)Tp::Client::ChannelTypeStreamTubeInterface [explicit]
ChannelTypeStreamTubeInterface(const Tp::Client::ChannelInterface &mainInterface, QObject *parent)Tp::Client::ChannelTypeStreamTubeInterface
ConnectionClosed(uint connectionID, const QString &error, const QString &message)Tp::Client::ChannelTypeStreamTubeInterface [signal]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ChannelTypeStreamTubeInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
NewLocalConnection(uint connectionID)Tp::Client::ChannelTypeStreamTubeInterface [signal]
NewRemoteConnection(uint handle, const QDBusVariant &connectionParam, uint connectionID)Tp::Client::ChannelTypeStreamTubeInterface [signal]
Offer(uint addresstype, const QDBusVariant &address, uint accesscontrol, const QVariantMap &parameters, int timeout=-1)Tp::Client::ChannelTypeStreamTubeInterface [inline, slot]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ChannelTypeStreamTubeInterface [inline]
requestPropertyService() const Tp::Client::ChannelTypeStreamTubeInterface [inline]
requestPropertySupportedSocketTypes() const Tp::Client::ChannelTypeStreamTubeInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ChannelTypeStreamTubeInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00688_source.html0000644000175200001440000001573512000060453023226 0ustar00collabora-develusers00000000000000 server-authentication-channel.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
server-authentication-channel.h
00001 
00023 #ifndef _TelepathyQt_server_authentication_channel_h_HEADER_GUARD_
00024 #define _TelepathyQt_server_authentication_channel_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Channel>
00031 
00032 namespace Tp
00033 {
00034 
00035 class TP_QT_EXPORT ServerAuthenticationChannel : public Channel
00036 {
00037     Q_OBJECT
00038     Q_DISABLE_COPY(ServerAuthenticationChannel)
00039 
00040 public:
00041     static const Feature FeatureCore;
00042 
00043     static ServerAuthenticationChannelPtr create(const ConnectionPtr &connection,
00044             const QString &objectPath, const QVariantMap &immutableProperties);
00045 
00046     virtual ~ServerAuthenticationChannel();
00047 
00048     CaptchaAuthenticationPtr captchaAuthentication() const;
00049 
00050     // TODO: Add something for SASL here as well
00051 
00052     bool hasCaptchaInterface() const;
00053     // TODO: Enable when SASL high-level support is in
00054     // bool hasSaslInterface() const;
00055 
00056 protected:
00057     ServerAuthenticationChannel(const ConnectionPtr &connection, const QString &objectPath,
00058             const QVariantMap &immutableProperties,
00059             const Feature &coreFeature = ServerAuthenticationChannel::FeatureCore);
00060 
00061 private Q_SLOTS:
00062     TP_QT_NO_EXPORT void gotCaptchaAuthenticationProperties(Tp::PendingOperation *op);
00063     TP_QT_NO_EXPORT void gotServerAuthenticationProperties(Tp::PendingOperation *op);
00064 
00065 private:
00066     struct Private;
00067     friend struct Private;
00068     Private *mPriv;
00069 };
00070 
00071 }
00072 
00073 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00505_source.html0000644000175200001440000034517012000060453023211 0ustar00collabora-develusers00000000000000 cli-connection-body.hpp Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-connection-body.hpp
00001 #define IN_TP_QT_HEADER
00002 #include "TelepathyQt/connection.h"
00003 
00004 namespace Tp
00005 {
00006 namespace Client
00007 {
00008 
00009 ConnectionInterface::ConnectionInterface(const QString& busName, const QString& objectPath, QObject *parent)
00010     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00011 {
00012 }
00013 
00014 ConnectionInterface::ConnectionInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00015     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00016 {
00017 }
00018 
00019 ConnectionInterface::ConnectionInterface(Tp::DBusProxy *proxy)
00020     : Tp::AbstractInterface(proxy, staticInterfaceName())
00021 {
00022 }
00023 
00024 void ConnectionInterface::invalidate(Tp::DBusProxy *proxy,
00025         const QString &error, const QString &message)
00026 {
00027     disconnect(this, SIGNAL(SelfHandleChanged(uint)), NULL, NULL);
00028     disconnect(this, SIGNAL(NewChannel(const QDBusObjectPath&, const QString&, uint, uint, bool)), NULL, NULL);
00029     disconnect(this, SIGNAL(ConnectionError(const QString&, const QVariantMap&)), NULL, NULL);
00030     disconnect(this, SIGNAL(StatusChanged(uint, uint)), NULL, NULL);
00031 
00032     Tp::AbstractInterface::invalidate(proxy, error, message);
00033 }
00034 
00035 ConnectionInterfaceAddressingInterface::ConnectionInterfaceAddressingInterface(const QString& busName, const QString& objectPath, QObject *parent)
00036     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00037 {
00038 }
00039 
00040 ConnectionInterfaceAddressingInterface::ConnectionInterfaceAddressingInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00041     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00042 {
00043 }
00044 
00045 ConnectionInterfaceAddressingInterface::ConnectionInterfaceAddressingInterface(Tp::DBusProxy *proxy)
00046     : Tp::AbstractInterface(proxy, staticInterfaceName())
00047 {
00048 }
00049 
00050 ConnectionInterfaceAddressingInterface::ConnectionInterfaceAddressingInterface(const Tp::Client::ConnectionInterface& mainInterface)
00051     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00052 {
00053 }
00054 
00055 ConnectionInterfaceAddressingInterface::ConnectionInterfaceAddressingInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject *parent)
00056     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00057 {
00058 }
00059 
00060 void ConnectionInterfaceAddressingInterface::invalidate(Tp::DBusProxy *proxy,
00061         const QString &error, const QString &message)
00062 {
00063 
00064     Tp::AbstractInterface::invalidate(proxy, error, message);
00065 }
00066 
00067 ConnectionInterfaceAliasingInterface::ConnectionInterfaceAliasingInterface(const QString& busName, const QString& objectPath, QObject *parent)
00068     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00069 {
00070 }
00071 
00072 ConnectionInterfaceAliasingInterface::ConnectionInterfaceAliasingInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00073     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00074 {
00075 }
00076 
00077 ConnectionInterfaceAliasingInterface::ConnectionInterfaceAliasingInterface(Tp::DBusProxy *proxy)
00078     : Tp::AbstractInterface(proxy, staticInterfaceName())
00079 {
00080 }
00081 
00082 ConnectionInterfaceAliasingInterface::ConnectionInterfaceAliasingInterface(const Tp::Client::ConnectionInterface& mainInterface)
00083     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00084 {
00085 }
00086 
00087 ConnectionInterfaceAliasingInterface::ConnectionInterfaceAliasingInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject *parent)
00088     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00089 {
00090 }
00091 
00092 void ConnectionInterfaceAliasingInterface::invalidate(Tp::DBusProxy *proxy,
00093         const QString &error, const QString &message)
00094 {
00095     disconnect(this, SIGNAL(AliasesChanged(const Tp::AliasPairList&)), NULL, NULL);
00096 
00097     Tp::AbstractInterface::invalidate(proxy, error, message);
00098 }
00099 
00100 ConnectionInterfaceAnonymityInterface::ConnectionInterfaceAnonymityInterface(const QString& busName, const QString& objectPath, QObject *parent)
00101     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00102 {
00103 }
00104 
00105 ConnectionInterfaceAnonymityInterface::ConnectionInterfaceAnonymityInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00106     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00107 {
00108 }
00109 
00110 ConnectionInterfaceAnonymityInterface::ConnectionInterfaceAnonymityInterface(Tp::DBusProxy *proxy)
00111     : Tp::AbstractInterface(proxy, staticInterfaceName())
00112 {
00113 }
00114 
00115 ConnectionInterfaceAnonymityInterface::ConnectionInterfaceAnonymityInterface(const Tp::Client::ConnectionInterface& mainInterface)
00116     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00117 {
00118 }
00119 
00120 ConnectionInterfaceAnonymityInterface::ConnectionInterfaceAnonymityInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject *parent)
00121     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00122 {
00123 }
00124 
00125 void ConnectionInterfaceAnonymityInterface::invalidate(Tp::DBusProxy *proxy,
00126         const QString &error, const QString &message)
00127 {
00128     disconnect(this, SIGNAL(AnonymityModesChanged(uint)), NULL, NULL);
00129 
00130     Tp::AbstractInterface::invalidate(proxy, error, message);
00131 }
00132 
00133 ConnectionInterfaceAvatarsInterface::ConnectionInterfaceAvatarsInterface(const QString& busName, const QString& objectPath, QObject *parent)
00134     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00135 {
00136 }
00137 
00138 ConnectionInterfaceAvatarsInterface::ConnectionInterfaceAvatarsInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00139     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00140 {
00141 }
00142 
00143 ConnectionInterfaceAvatarsInterface::ConnectionInterfaceAvatarsInterface(Tp::DBusProxy *proxy)
00144     : Tp::AbstractInterface(proxy, staticInterfaceName())
00145 {
00146 }
00147 
00148 ConnectionInterfaceAvatarsInterface::ConnectionInterfaceAvatarsInterface(const Tp::Client::ConnectionInterface& mainInterface)
00149     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00150 {
00151 }
00152 
00153 ConnectionInterfaceAvatarsInterface::ConnectionInterfaceAvatarsInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject *parent)
00154     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00155 {
00156 }
00157 
00158 void ConnectionInterfaceAvatarsInterface::invalidate(Tp::DBusProxy *proxy,
00159         const QString &error, const QString &message)
00160 {
00161     disconnect(this, SIGNAL(AvatarUpdated(uint, const QString&)), NULL, NULL);
00162     disconnect(this, SIGNAL(AvatarRetrieved(uint, const QString&, const QByteArray&, const QString&)), NULL, NULL);
00163 
00164     Tp::AbstractInterface::invalidate(proxy, error, message);
00165 }
00166 
00167 ConnectionInterfaceBalanceInterface::ConnectionInterfaceBalanceInterface(const QString& busName, const QString& objectPath, QObject *parent)
00168     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00169 {
00170 }
00171 
00172 ConnectionInterfaceBalanceInterface::ConnectionInterfaceBalanceInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00173     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00174 {
00175 }
00176 
00177 ConnectionInterfaceBalanceInterface::ConnectionInterfaceBalanceInterface(Tp::DBusProxy *proxy)
00178     : Tp::AbstractInterface(proxy, staticInterfaceName())
00179 {
00180 }
00181 
00182 ConnectionInterfaceBalanceInterface::ConnectionInterfaceBalanceInterface(const Tp::Client::ConnectionInterface& mainInterface)
00183     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00184 {
00185 }
00186 
00187 ConnectionInterfaceBalanceInterface::ConnectionInterfaceBalanceInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject *parent)
00188     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00189 {
00190 }
00191 
00192 void ConnectionInterfaceBalanceInterface::invalidate(Tp::DBusProxy *proxy,
00193         const QString &error, const QString &message)
00194 {
00195     disconnect(this, SIGNAL(BalanceChanged(const Tp::CurrencyAmount&)), NULL, NULL);
00196 
00197     Tp::AbstractInterface::invalidate(proxy, error, message);
00198 }
00199 
00200 ConnectionInterfaceCapabilitiesInterface::ConnectionInterfaceCapabilitiesInterface(const QString& busName, const QString& objectPath, QObject *parent)
00201     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00202 {
00203 }
00204 
00205 ConnectionInterfaceCapabilitiesInterface::ConnectionInterfaceCapabilitiesInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00206     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00207 {
00208 }
00209 
00210 ConnectionInterfaceCapabilitiesInterface::ConnectionInterfaceCapabilitiesInterface(Tp::DBusProxy *proxy)
00211     : Tp::AbstractInterface(proxy, staticInterfaceName())
00212 {
00213 }
00214 
00215 ConnectionInterfaceCapabilitiesInterface::ConnectionInterfaceCapabilitiesInterface(const Tp::Client::ConnectionInterface& mainInterface)
00216     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00217 {
00218 }
00219 
00220 ConnectionInterfaceCapabilitiesInterface::ConnectionInterfaceCapabilitiesInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject *parent)
00221     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00222 {
00223 }
00224 
00225 void ConnectionInterfaceCapabilitiesInterface::invalidate(Tp::DBusProxy *proxy,
00226         const QString &error, const QString &message)
00227 {
00228     disconnect(this, SIGNAL(CapabilitiesChanged(const Tp::CapabilityChangeList&)), NULL, NULL);
00229 
00230     Tp::AbstractInterface::invalidate(proxy, error, message);
00231 }
00232 
00233 ConnectionInterfaceCellularInterface::ConnectionInterfaceCellularInterface(const QString& busName, const QString& objectPath, QObject *parent)
00234     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00235 {
00236 }
00237 
00238 ConnectionInterfaceCellularInterface::ConnectionInterfaceCellularInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00239     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00240 {
00241 }
00242 
00243 ConnectionInterfaceCellularInterface::ConnectionInterfaceCellularInterface(Tp::DBusProxy *proxy)
00244     : Tp::AbstractInterface(proxy, staticInterfaceName())
00245 {
00246 }
00247 
00248 ConnectionInterfaceCellularInterface::ConnectionInterfaceCellularInterface(const Tp::Client::ConnectionInterface& mainInterface)
00249     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00250 {
00251 }
00252 
00253 ConnectionInterfaceCellularInterface::ConnectionInterfaceCellularInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject *parent)
00254     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00255 {
00256 }
00257 
00258 void ConnectionInterfaceCellularInterface::invalidate(Tp::DBusProxy *proxy,
00259         const QString &error, const QString &message)
00260 {
00261     disconnect(this, SIGNAL(IMSIChanged(const QString&)), NULL, NULL);
00262 
00263     Tp::AbstractInterface::invalidate(proxy, error, message);
00264 }
00265 
00266 ConnectionInterfaceClientTypesInterface::ConnectionInterfaceClientTypesInterface(const QString& busName, const QString& objectPath, QObject *parent)
00267     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00268 {
00269 }
00270 
00271 ConnectionInterfaceClientTypesInterface::ConnectionInterfaceClientTypesInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00272     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00273 {
00274 }
00275 
00276 ConnectionInterfaceClientTypesInterface::ConnectionInterfaceClientTypesInterface(Tp::DBusProxy *proxy)
00277     : Tp::AbstractInterface(proxy, staticInterfaceName())
00278 {
00279 }
00280 
00281 ConnectionInterfaceClientTypesInterface::ConnectionInterfaceClientTypesInterface(const Tp::Client::ConnectionInterface& mainInterface)
00282     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00283 {
00284 }
00285 
00286 ConnectionInterfaceClientTypesInterface::ConnectionInterfaceClientTypesInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject *parent)
00287     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00288 {
00289 }
00290 
00291 void ConnectionInterfaceClientTypesInterface::invalidate(Tp::DBusProxy *proxy,
00292         const QString &error, const QString &message)
00293 {
00294     disconnect(this, SIGNAL(ClientTypesUpdated(uint, const QStringList&)), NULL, NULL);
00295 
00296     Tp::AbstractInterface::invalidate(proxy, error, message);
00297 }
00298 
00299 ConnectionInterfaceContactBlockingInterface::ConnectionInterfaceContactBlockingInterface(const QString& busName, const QString& objectPath, QObject *parent)
00300     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00301 {
00302 }
00303 
00304 ConnectionInterfaceContactBlockingInterface::ConnectionInterfaceContactBlockingInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00305     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00306 {
00307 }
00308 
00309 ConnectionInterfaceContactBlockingInterface::ConnectionInterfaceContactBlockingInterface(Tp::DBusProxy *proxy)
00310     : Tp::AbstractInterface(proxy, staticInterfaceName())
00311 {
00312 }
00313 
00314 ConnectionInterfaceContactBlockingInterface::ConnectionInterfaceContactBlockingInterface(const Tp::Client::ConnectionInterface& mainInterface)
00315     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00316 {
00317 }
00318 
00319 ConnectionInterfaceContactBlockingInterface::ConnectionInterfaceContactBlockingInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject *parent)
00320     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00321 {
00322 }
00323 
00324 void ConnectionInterfaceContactBlockingInterface::invalidate(Tp::DBusProxy *proxy,
00325         const QString &error, const QString &message)
00326 {
00327     disconnect(this, SIGNAL(BlockedContactsChanged(const Tp::HandleIdentifierMap&, const Tp::HandleIdentifierMap&)), NULL, NULL);
00328 
00329     Tp::AbstractInterface::invalidate(proxy, error, message);
00330 }
00331 
00332 ConnectionInterfaceContactCapabilitiesInterface::ConnectionInterfaceContactCapabilitiesInterface(const QString& busName, const QString& objectPath, QObject *parent)
00333     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00334 {
00335 }
00336 
00337 ConnectionInterfaceContactCapabilitiesInterface::ConnectionInterfaceContactCapabilitiesInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00338     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00339 {
00340 }
00341 
00342 ConnectionInterfaceContactCapabilitiesInterface::ConnectionInterfaceContactCapabilitiesInterface(Tp::DBusProxy *proxy)
00343     : Tp::AbstractInterface(proxy, staticInterfaceName())
00344 {
00345 }
00346 
00347 ConnectionInterfaceContactCapabilitiesInterface::ConnectionInterfaceContactCapabilitiesInterface(const Tp::Client::ConnectionInterface& mainInterface)
00348     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00349 {
00350 }
00351 
00352 ConnectionInterfaceContactCapabilitiesInterface::ConnectionInterfaceContactCapabilitiesInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject *parent)
00353     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00354 {
00355 }
00356 
00357 void ConnectionInterfaceContactCapabilitiesInterface::invalidate(Tp::DBusProxy *proxy,
00358         const QString &error, const QString &message)
00359 {
00360     disconnect(this, SIGNAL(ContactCapabilitiesChanged(const Tp::ContactCapabilitiesMap&)), NULL, NULL);
00361 
00362     Tp::AbstractInterface::invalidate(proxy, error, message);
00363 }
00364 
00365 ConnectionInterfaceContactGroupsInterface::ConnectionInterfaceContactGroupsInterface(const QString& busName, const QString& objectPath, QObject *parent)
00366     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00367 {
00368 }
00369 
00370 ConnectionInterfaceContactGroupsInterface::ConnectionInterfaceContactGroupsInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00371     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00372 {
00373 }
00374 
00375 ConnectionInterfaceContactGroupsInterface::ConnectionInterfaceContactGroupsInterface(Tp::DBusProxy *proxy)
00376     : Tp::AbstractInterface(proxy, staticInterfaceName())
00377 {
00378 }
00379 
00380 ConnectionInterfaceContactGroupsInterface::ConnectionInterfaceContactGroupsInterface(const Tp::Client::ConnectionInterface& mainInterface)
00381     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00382 {
00383 }
00384 
00385 ConnectionInterfaceContactGroupsInterface::ConnectionInterfaceContactGroupsInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject *parent)
00386     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00387 {
00388 }
00389 
00390 void ConnectionInterfaceContactGroupsInterface::invalidate(Tp::DBusProxy *proxy,
00391         const QString &error, const QString &message)
00392 {
00393     disconnect(this, SIGNAL(GroupsChanged(const Tp::UIntList&, const QStringList&, const QStringList&)), NULL, NULL);
00394     disconnect(this, SIGNAL(GroupsCreated(const QStringList&)), NULL, NULL);
00395     disconnect(this, SIGNAL(GroupRenamed(const QString&, const QString&)), NULL, NULL);
00396     disconnect(this, SIGNAL(GroupsRemoved(const QStringList&)), NULL, NULL);
00397 
00398     Tp::AbstractInterface::invalidate(proxy, error, message);
00399 }
00400 
00401 ConnectionInterfaceContactInfoInterface::ConnectionInterfaceContactInfoInterface(const QString& busName, const QString& objectPath, QObject *parent)
00402     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00403 {
00404 }
00405 
00406 ConnectionInterfaceContactInfoInterface::ConnectionInterfaceContactInfoInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00407     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00408 {
00409 }
00410 
00411 ConnectionInterfaceContactInfoInterface::ConnectionInterfaceContactInfoInterface(Tp::DBusProxy *proxy)
00412     : Tp::AbstractInterface(proxy, staticInterfaceName())
00413 {
00414 }
00415 
00416 ConnectionInterfaceContactInfoInterface::ConnectionInterfaceContactInfoInterface(const Tp::Client::ConnectionInterface& mainInterface)
00417     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00418 {
00419 }
00420 
00421 ConnectionInterfaceContactInfoInterface::ConnectionInterfaceContactInfoInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject *parent)
00422     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00423 {
00424 }
00425 
00426 void ConnectionInterfaceContactInfoInterface::invalidate(Tp::DBusProxy *proxy,
00427         const QString &error, const QString &message)
00428 {
00429     disconnect(this, SIGNAL(ContactInfoChanged(uint, const Tp::ContactInfoFieldList&)), NULL, NULL);
00430 
00431     Tp::AbstractInterface::invalidate(proxy, error, message);
00432 }
00433 
00434 ConnectionInterfaceContactListInterface::ConnectionInterfaceContactListInterface(const QString& busName, const QString& objectPath, QObject *parent)
00435     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00436 {
00437 }
00438 
00439 ConnectionInterfaceContactListInterface::ConnectionInterfaceContactListInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00440     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00441 {
00442 }
00443 
00444 ConnectionInterfaceContactListInterface::ConnectionInterfaceContactListInterface(Tp::DBusProxy *proxy)
00445     : Tp::AbstractInterface(proxy, staticInterfaceName())
00446 {
00447 }
00448 
00449 ConnectionInterfaceContactListInterface::ConnectionInterfaceContactListInterface(const Tp::Client::ConnectionInterface& mainInterface)
00450     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00451 {
00452 }
00453 
00454 ConnectionInterfaceContactListInterface::ConnectionInterfaceContactListInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject *parent)
00455     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00456 {
00457 }
00458 
00459 void ConnectionInterfaceContactListInterface::invalidate(Tp::DBusProxy *proxy,
00460         const QString &error, const QString &message)
00461 {
00462     disconnect(this, SIGNAL(ContactListStateChanged(uint)), NULL, NULL);
00463     disconnect(this, SIGNAL(ContactsChangedWithID(const Tp::ContactSubscriptionMap&, const Tp::HandleIdentifierMap&, const Tp::HandleIdentifierMap&)), NULL, NULL);
00464     disconnect(this, SIGNAL(ContactsChanged(const Tp::ContactSubscriptionMap&, const Tp::UIntList&)), NULL, NULL);
00465 
00466     Tp::AbstractInterface::invalidate(proxy, error, message);
00467 }
00468 
00469 ConnectionInterfaceContactsInterface::ConnectionInterfaceContactsInterface(const QString& busName, const QString& objectPath, QObject *parent)
00470     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00471 {
00472 }
00473 
00474 ConnectionInterfaceContactsInterface::ConnectionInterfaceContactsInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00475     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00476 {
00477 }
00478 
00479 ConnectionInterfaceContactsInterface::ConnectionInterfaceContactsInterface(Tp::DBusProxy *proxy)
00480     : Tp::AbstractInterface(proxy, staticInterfaceName())
00481 {
00482 }
00483 
00484 ConnectionInterfaceContactsInterface::ConnectionInterfaceContactsInterface(const Tp::Client::ConnectionInterface& mainInterface)
00485     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00486 {
00487 }
00488 
00489 ConnectionInterfaceContactsInterface::ConnectionInterfaceContactsInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject *parent)
00490     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00491 {
00492 }
00493 
00494 void ConnectionInterfaceContactsInterface::invalidate(Tp::DBusProxy *proxy,
00495         const QString &error, const QString &message)
00496 {
00497 
00498     Tp::AbstractInterface::invalidate(proxy, error, message);
00499 }
00500 
00501 ConnectionInterfaceLocationInterface::ConnectionInterfaceLocationInterface(const QString& busName, const QString& objectPath, QObject *parent)
00502     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00503 {
00504 }
00505 
00506 ConnectionInterfaceLocationInterface::ConnectionInterfaceLocationInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00507     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00508 {
00509 }
00510 
00511 ConnectionInterfaceLocationInterface::ConnectionInterfaceLocationInterface(Tp::DBusProxy *proxy)
00512     : Tp::AbstractInterface(proxy, staticInterfaceName())
00513 {
00514 }
00515 
00516 ConnectionInterfaceLocationInterface::ConnectionInterfaceLocationInterface(const Tp::Client::ConnectionInterface& mainInterface)
00517     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00518 {
00519 }
00520 
00521 ConnectionInterfaceLocationInterface::ConnectionInterfaceLocationInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject *parent)
00522     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00523 {
00524 }
00525 
00526 void ConnectionInterfaceLocationInterface::invalidate(Tp::DBusProxy *proxy,
00527         const QString &error, const QString &message)
00528 {
00529     disconnect(this, SIGNAL(LocationUpdated(uint, const QVariantMap&)), NULL, NULL);
00530 
00531     Tp::AbstractInterface::invalidate(proxy, error, message);
00532 }
00533 
00534 ConnectionInterfaceMailNotificationInterface::ConnectionInterfaceMailNotificationInterface(const QString& busName, const QString& objectPath, QObject *parent)
00535     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00536 {
00537 }
00538 
00539 ConnectionInterfaceMailNotificationInterface::ConnectionInterfaceMailNotificationInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00540     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00541 {
00542 }
00543 
00544 ConnectionInterfaceMailNotificationInterface::ConnectionInterfaceMailNotificationInterface(Tp::DBusProxy *proxy)
00545     : Tp::AbstractInterface(proxy, staticInterfaceName())
00546 {
00547 }
00548 
00549 ConnectionInterfaceMailNotificationInterface::ConnectionInterfaceMailNotificationInterface(const Tp::Client::ConnectionInterface& mainInterface)
00550     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00551 {
00552 }
00553 
00554 ConnectionInterfaceMailNotificationInterface::ConnectionInterfaceMailNotificationInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject *parent)
00555     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00556 {
00557 }
00558 
00559 void ConnectionInterfaceMailNotificationInterface::invalidate(Tp::DBusProxy *proxy,
00560         const QString &error, const QString &message)
00561 {
00562     disconnect(this, SIGNAL(MailsReceived(const Tp::MailList&)), NULL, NULL);
00563     disconnect(this, SIGNAL(UnreadMailsChanged(uint, const Tp::MailList&, const QStringList&)), NULL, NULL);
00564 
00565     Tp::AbstractInterface::invalidate(proxy, error, message);
00566 }
00567 
00568 ConnectionInterfacePowerSavingInterface::ConnectionInterfacePowerSavingInterface(const QString& busName, const QString& objectPath, QObject *parent)
00569     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00570 {
00571 }
00572 
00573 ConnectionInterfacePowerSavingInterface::ConnectionInterfacePowerSavingInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00574     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00575 {
00576 }
00577 
00578 ConnectionInterfacePowerSavingInterface::ConnectionInterfacePowerSavingInterface(Tp::DBusProxy *proxy)
00579     : Tp::AbstractInterface(proxy, staticInterfaceName())
00580 {
00581 }
00582 
00583 ConnectionInterfacePowerSavingInterface::ConnectionInterfacePowerSavingInterface(const Tp::Client::ConnectionInterface& mainInterface)
00584     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00585 {
00586 }
00587 
00588 ConnectionInterfacePowerSavingInterface::ConnectionInterfacePowerSavingInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject *parent)
00589     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00590 {
00591 }
00592 
00593 void ConnectionInterfacePowerSavingInterface::invalidate(Tp::DBusProxy *proxy,
00594         const QString &error, const QString &message)
00595 {
00596     disconnect(this, SIGNAL(PowerSavingChanged(bool)), NULL, NULL);
00597 
00598     Tp::AbstractInterface::invalidate(proxy, error, message);
00599 }
00600 
00601 ConnectionInterfacePresenceInterface::ConnectionInterfacePresenceInterface(const QString& busName, const QString& objectPath, QObject *parent)
00602     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00603 {
00604 }
00605 
00606 ConnectionInterfacePresenceInterface::ConnectionInterfacePresenceInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00607     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00608 {
00609 }
00610 
00611 ConnectionInterfacePresenceInterface::ConnectionInterfacePresenceInterface(Tp::DBusProxy *proxy)
00612     : Tp::AbstractInterface(proxy, staticInterfaceName())
00613 {
00614 }
00615 
00616 ConnectionInterfacePresenceInterface::ConnectionInterfacePresenceInterface(const Tp::Client::ConnectionInterface& mainInterface)
00617     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00618 {
00619 }
00620 
00621 ConnectionInterfacePresenceInterface::ConnectionInterfacePresenceInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject *parent)
00622     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00623 {
00624 }
00625 
00626 void ConnectionInterfacePresenceInterface::invalidate(Tp::DBusProxy *proxy,
00627         const QString &error, const QString &message)
00628 {
00629     disconnect(this, SIGNAL(PresenceUpdate(const Tp::ContactPresences&)), NULL, NULL);
00630 
00631     Tp::AbstractInterface::invalidate(proxy, error, message);
00632 }
00633 
00634 ConnectionInterfaceRequestsInterface::ConnectionInterfaceRequestsInterface(const QString& busName, const QString& objectPath, QObject *parent)
00635     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00636 {
00637 }
00638 
00639 ConnectionInterfaceRequestsInterface::ConnectionInterfaceRequestsInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00640     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00641 {
00642 }
00643 
00644 ConnectionInterfaceRequestsInterface::ConnectionInterfaceRequestsInterface(Tp::DBusProxy *proxy)
00645     : Tp::AbstractInterface(proxy, staticInterfaceName())
00646 {
00647 }
00648 
00649 ConnectionInterfaceRequestsInterface::ConnectionInterfaceRequestsInterface(const Tp::Client::ConnectionInterface& mainInterface)
00650     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00651 {
00652 }
00653 
00654 ConnectionInterfaceRequestsInterface::ConnectionInterfaceRequestsInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject *parent)
00655     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00656 {
00657 }
00658 
00659 void ConnectionInterfaceRequestsInterface::invalidate(Tp::DBusProxy *proxy,
00660         const QString &error, const QString &message)
00661 {
00662     disconnect(this, SIGNAL(NewChannels(const Tp::ChannelDetailsList&)), NULL, NULL);
00663     disconnect(this, SIGNAL(ChannelClosed(const QDBusObjectPath&)), NULL, NULL);
00664 
00665     Tp::AbstractInterface::invalidate(proxy, error, message);
00666 }
00667 
00668 ConnectionInterfaceServicePointInterface::ConnectionInterfaceServicePointInterface(const QString& busName, const QString& objectPath, QObject *parent)
00669     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00670 {
00671 }
00672 
00673 ConnectionInterfaceServicePointInterface::ConnectionInterfaceServicePointInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00674     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00675 {
00676 }
00677 
00678 ConnectionInterfaceServicePointInterface::ConnectionInterfaceServicePointInterface(Tp::DBusProxy *proxy)
00679     : Tp::AbstractInterface(proxy, staticInterfaceName())
00680 {
00681 }
00682 
00683 ConnectionInterfaceServicePointInterface::ConnectionInterfaceServicePointInterface(const Tp::Client::ConnectionInterface& mainInterface)
00684     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00685 {
00686 }
00687 
00688 ConnectionInterfaceServicePointInterface::ConnectionInterfaceServicePointInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject *parent)
00689     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00690 {
00691 }
00692 
00693 void ConnectionInterfaceServicePointInterface::invalidate(Tp::DBusProxy *proxy,
00694         const QString &error, const QString &message)
00695 {
00696     disconnect(this, SIGNAL(ServicePointsChanged(const Tp::ServicePointInfoList&)), NULL, NULL);
00697 
00698     Tp::AbstractInterface::invalidate(proxy, error, message);
00699 }
00700 
00701 ConnectionInterfaceSimplePresenceInterface::ConnectionInterfaceSimplePresenceInterface(const QString& busName, const QString& objectPath, QObject *parent)
00702     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00703 {
00704 }
00705 
00706 ConnectionInterfaceSimplePresenceInterface::ConnectionInterfaceSimplePresenceInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00707     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00708 {
00709 }
00710 
00711 ConnectionInterfaceSimplePresenceInterface::ConnectionInterfaceSimplePresenceInterface(Tp::DBusProxy *proxy)
00712     : Tp::AbstractInterface(proxy, staticInterfaceName())
00713 {
00714 }
00715 
00716 ConnectionInterfaceSimplePresenceInterface::ConnectionInterfaceSimplePresenceInterface(const Tp::Client::ConnectionInterface& mainInterface)
00717     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00718 {
00719 }
00720 
00721 ConnectionInterfaceSimplePresenceInterface::ConnectionInterfaceSimplePresenceInterface(const Tp::Client::ConnectionInterface& mainInterface, QObject *parent)
00722     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00723 {
00724 }
00725 
00726 void ConnectionInterfaceSimplePresenceInterface::invalidate(Tp::DBusProxy *proxy,
00727         const QString &error, const QString &message)
00728 {
00729     disconnect(this, SIGNAL(PresencesChanged(const Tp::SimpleContactPresences&)), NULL, NULL);
00730 
00731     Tp::AbstractInterface::invalidate(proxy, error, message);
00732 }
00733 }
00734 }


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00012.html0000644000175200001440000000351512000060453021614 0ustar00collabora-develusers00000000000000 Protocols Example
   Home · All Classes · All Namespaces · Modules · Functions · Files
Protocols Example


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00024.html0000644000175200001440000001472412000060453021623 0ustar00collabora-develusers00000000000000 roster/roster-window.cpp
   Home · All Classes · All Namespaces · Modules · Functions · Files
roster/roster-window.cpp
#include "roster-window.h"
#include "_gen/roster-window.moc.hpp"

#include "roster-widget.h"

#include <TelepathyQt/Types>
#include <TelepathyQt/ChannelFactory>
#include <TelepathyQt/Connection>
#include <TelepathyQt/ConnectionFactory>
#include <TelepathyQt/ContactFactory>
#include <TelepathyQt/PendingOperation>
#include <TelepathyQt/PendingReady>

#include <QDebug>

using namespace Tp;

RosterWindow::RosterWindow(const QString &accountName, QWidget *parent)
    : QMainWindow(parent)
{
    setWindowTitle(QLatin1String("Roster"));

    setupGui();

    ChannelFactoryPtr channelFactory = ChannelFactory::create(
            QDBusConnection::sessionBus());
    ConnectionFactoryPtr connectionFactory = ConnectionFactory::create(
            QDBusConnection::sessionBus(), Connection::FeatureConnected |
                Connection::FeatureRoster | Connection::FeatureRosterGroups);
    ContactFactoryPtr contactFactory = ContactFactory::create(
            Contact::FeatureAlias | Contact::FeatureSimplePresence);

    mAccount = Account::create(TP_QT_ACCOUNT_MANAGER_BUS_NAME,
            TP_QT_ACCOUNT_OBJECT_PATH_BASE + QLatin1Char('/') + accountName,
            connectionFactory, channelFactory, contactFactory);
    connect(mAccount->becomeReady(Account::FeatureCore),
            SIGNAL(finished(Tp::PendingOperation *)),
            SLOT(onAccountReady(Tp::PendingOperation *)));

    resize(240, 320);
}

RosterWindow::~RosterWindow()
{
}

void RosterWindow::setupGui()
{
    mRoster = new RosterWidget();
    setCentralWidget(mRoster);
}

void RosterWindow::onAccountReady(Tp::PendingOperation *op)
{
    if (op->isError()) {
        qWarning() << "Account cannot become ready - " <<
            op->errorName() << '-' << op->errorMessage();
        QCoreApplication::exit(1);
        return;
    }

    qDebug() << "Account ready";
    connect(mAccount.data(),
            SIGNAL(connectionChanged(Tp::ConnectionPtr)),
            SLOT(onAccountConnectionChanged(Tp::ConnectionPtr)));

    if (mAccount->connection().isNull()) {
        qDebug() << "The account given has no Connection. Please set it online to continue.";
    }

    onAccountConnectionChanged(mAccount->connection());
}

void RosterWindow::onAccountConnectionChanged(const ConnectionPtr &conn)
{
    if (conn) {
        mRoster->setConnection(conn);
    } else {
        mRoster->unsetConnection();
    }
}


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00468_source.html0000644000175200001440000011463212000060453023216 0ustar00collabora-develusers00000000000000 channel-class-spec.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
channel-class-spec.h
00001 
00023 #ifndef _TelepathyQt_channel_class_spec_h_HEADER_GUARD_
00024 #define _TelepathyQt_channel_class_spec_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Constants>
00031 #include <TelepathyQt/Global>
00032 #include <TelepathyQt/Types>
00033 
00034 #include <QSharedDataPointer>
00035 #include <QVariant>
00036 #include <QVariantMap>
00037 #include <QPair>
00038 
00039 namespace Tp
00040 {
00041 
00042 class TP_QT_EXPORT ChannelClassSpec
00043 {
00044 public:
00045     ChannelClassSpec();
00046     ChannelClassSpec(const ChannelClass &cc);
00047     ChannelClassSpec(const QVariantMap &props);
00048     ChannelClassSpec(const QString &channelType, HandleType targetHandleType,
00049             const QVariantMap &otherProperties = QVariantMap());
00050     ChannelClassSpec(const QString &channelType, HandleType targetHandleType, bool requested,
00051             const QVariantMap &otherProperties = QVariantMap());
00052     ChannelClassSpec(const ChannelClassSpec &other,
00053             const QVariantMap &additionalProperties = QVariantMap());
00054     ~ChannelClassSpec();
00055 
00056     bool isValid() const;
00057 
00058     ChannelClassSpec &operator=(const ChannelClassSpec &other);
00059 
00060     bool operator==(const ChannelClassSpec &other) const
00061     {
00062         return this->allProperties() == other.allProperties();
00063     }
00064 
00065     bool isSubsetOf(const ChannelClassSpec &other) const;
00066     bool matches(const QVariantMap &immutableProperties) const;
00067 
00068     QString channelType() const
00069     {
00070         return qdbus_cast<QString>(
00071                 property(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType")));
00072     }
00073 
00074     void setChannelType(const QString &type)
00075     {
00076         setProperty(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"),
00077                 QVariant::fromValue(type));
00078     }
00079 
00080     HandleType targetHandleType() const
00081     {
00082         return (HandleType) qdbus_cast<uint>(
00083                 property(
00084                     TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType")));
00085     }
00086 
00087     void setTargetHandleType(HandleType type)
00088     {
00089         setProperty(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"),
00090                 QVariant::fromValue((uint) type));
00091     }
00092 
00093     bool hasRequested() const
00094     {
00095         return hasProperty(TP_QT_IFACE_CHANNEL + QLatin1String(".Requested"));
00096     }
00097 
00098     bool isRequested() const
00099     {
00100         return qdbus_cast<bool>(
00101                 property(TP_QT_IFACE_CHANNEL + QLatin1String(".Requested")));
00102     }
00103 
00104     void setRequested(bool requested)
00105     {
00106         setProperty(TP_QT_IFACE_CHANNEL + QLatin1String(".Requested"),
00107                 QVariant::fromValue(requested));
00108     }
00109 
00110     void unsetRequested()
00111     {
00112         unsetProperty(TP_QT_IFACE_CHANNEL + QLatin1String(".Requested"));
00113     }
00114 
00115     bool hasCallInitialAudioFlag() const
00116     {
00117         return qdbus_cast<bool>(
00118                 property(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudio")));
00119     }
00120 
00121     void setCallInitialAudioFlag()
00122     {
00123         setProperty(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudio"),
00124                 QVariant::fromValue(true));
00125     }
00126 
00127     void unsetCallInitialAudioFlag()
00128     {
00129         unsetProperty(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudio"));
00130     }
00131 
00132     bool hasCallInitialVideoFlag() const
00133     {
00134         return qdbus_cast<bool>(
00135                 property(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideo")));
00136     }
00137 
00138     void setCallInitialVideoFlag()
00139     {
00140         setProperty(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideo"),
00141                 QVariant::fromValue(true));
00142     }
00143 
00144     void unsetCallInitialVideoFlag()
00145     {
00146         unsetProperty(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideo"));
00147     }
00148 
00149     TP_QT_DEPRECATED bool hasStreamedMediaInitialAudioFlag() const
00150     {
00151         return qdbus_cast<bool>(
00152                 property(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialAudio")));
00153     }
00154 
00155     TP_QT_DEPRECATED void setStreamedMediaInitialAudioFlag()
00156     {
00157         setProperty(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialAudio"),
00158                 QVariant::fromValue(true));
00159     }
00160 
00161     TP_QT_DEPRECATED void unsetStreamedMediaInitialAudioFlag()
00162     {
00163         unsetProperty(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialAudio"));
00164     }
00165 
00166     TP_QT_DEPRECATED bool hasStreamedMediaInitialVideoFlag() const
00167     {
00168         return qdbus_cast<bool>(
00169                 property(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialVideo")));
00170     }
00171 
00172     TP_QT_DEPRECATED void setStreamedMediaInitialVideoFlag()
00173     {
00174         setProperty(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialVideo"),
00175                 QVariant::fromValue(true));
00176     }
00177 
00178     TP_QT_DEPRECATED void unsetStreamedMediaInitialVideoFlag()
00179     {
00180         unsetProperty(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialVideo"));
00181     }
00182 
00183     bool hasProperty(const QString &qualifiedName) const;
00184     QVariant property(const QString &qualifiedName) const;
00185 
00186     void setProperty(const QString &qualifiedName, const QVariant &value);
00187     void unsetProperty(const QString &qualifiedName);
00188 
00189     QVariantMap allProperties() const;
00190     ChannelClass bareClass() const;
00191 
00192     static ChannelClassSpec textChat(const QVariantMap &additionalProperties = QVariantMap());
00193     static ChannelClassSpec textChatroom(const QVariantMap &additionalProperties = QVariantMap());
00194     static ChannelClassSpec unnamedTextChat(const QVariantMap &additionalProperties = QVariantMap());
00195 
00196     static ChannelClassSpec mediaCall(const QVariantMap &additionalProperties = QVariantMap());
00197     static ChannelClassSpec audioCall(const QVariantMap &additionalProperties = QVariantMap());
00198     static ChannelClassSpec videoCall(const QVariantMap &additionalProperties = QVariantMap());
00199     static ChannelClassSpec videoCallWithAudio(const QVariantMap &additionalProperties =
00200             QVariantMap());
00201 
00202     TP_QT_DEPRECATED static ChannelClassSpec streamedMediaCall(const QVariantMap &additionalProperties = QVariantMap());
00203     TP_QT_DEPRECATED static ChannelClassSpec streamedMediaAudioCall(const QVariantMap &additionalProperties =
00204             QVariantMap());
00205     TP_QT_DEPRECATED static ChannelClassSpec streamedMediaVideoCall(const QVariantMap &additionalProperties =
00206             QVariantMap());
00207     TP_QT_DEPRECATED static ChannelClassSpec streamedMediaVideoCallWithAudio(const QVariantMap &additionalProperties =
00208             QVariantMap());
00209 
00210     TP_QT_DEPRECATED static ChannelClassSpec unnamedStreamedMediaCall(const QVariantMap &additionalProperties =
00211             QVariantMap());
00212     TP_QT_DEPRECATED static ChannelClassSpec unnamedStreamedMediaAudioCall(const QVariantMap &additionalProperties =
00213             QVariantMap());
00214     TP_QT_DEPRECATED static ChannelClassSpec unnamedStreamedMediaVideoCall(const QVariantMap &additionalProperties =
00215             QVariantMap());
00216     TP_QT_DEPRECATED static ChannelClassSpec unnamedStreamedMediaVideoCallWithAudio(const QVariantMap &additionalProperties =
00217             QVariantMap());
00218 
00219     static ChannelClassSpec serverAuthentication(const QVariantMap &additionalProperties =
00220             QVariantMap());
00221 
00222     static ChannelClassSpec roomList(const QVariantMap &additionalProperties = QVariantMap());
00223     static ChannelClassSpec outgoingFileTransfer(const QVariantMap &additionalProperties = QVariantMap());
00224     static ChannelClassSpec incomingFileTransfer(const QVariantMap &additionalProperties = QVariantMap());
00225     static ChannelClassSpec outgoingStreamTube(const QString &service = QString(),
00226             const QVariantMap &additionalProperties = QVariantMap());
00227     static ChannelClassSpec incomingStreamTube(const QString &service = QString(),
00228             const QVariantMap &additionalProperties = QVariantMap());
00229     static ChannelClassSpec outgoingRoomStreamTube(const QString &service = QString(),
00230             const QVariantMap &additionalProperties = QVariantMap());
00231     static ChannelClassSpec incomingRoomStreamTube(const QString &service = QString(),
00232             const QVariantMap &additionalProperties = QVariantMap());
00233     static ChannelClassSpec outgoingDBusTube(const QString &serviceName = QString(),
00234             const QVariantMap &additionalProperties = QVariantMap());
00235     static ChannelClassSpec incomingDBusTube(const QString &serviceName = QString(),
00236             const QVariantMap &additionalProperties = QVariantMap());
00237     static ChannelClassSpec outgoingRoomDBusTube(const QString &serviceName = QString(),
00238             const QVariantMap &additionalProperties = QVariantMap());
00239     static ChannelClassSpec incomingRoomDBusTube(const QString &serviceName = QString(),
00240             const QVariantMap &additionalProperties = QVariantMap());
00241     static ChannelClassSpec contactSearch(const QVariantMap &additionalProperties = QVariantMap());
00242 
00243 private:
00244     struct Private;
00245     friend struct Private;
00246     QSharedDataPointer<Private> mPriv;
00247 };
00248 
00249 class TP_QT_EXPORT ChannelClassSpecList :
00250                 public QList<ChannelClassSpec>
00251 {
00252 public:
00253     ChannelClassSpecList() { }
00254 
00255     ChannelClassSpecList(const ChannelClassSpec &spec)
00256     {
00257         append(spec);
00258     }
00259 
00260     ChannelClassSpecList(const QList<ChannelClassSpec> &other)
00261         : QList<ChannelClassSpec>(other)
00262     {
00263     }
00264 
00265     ChannelClassSpecList(const ChannelClassList &classes)
00266     {
00267         // Why doesn't Qt have range constructors like STL... stupid, so stupid.
00268         Q_FOREACH (const ChannelClass &cc, classes) {
00269             append(cc);
00270         }
00271     }
00272 
00273     ChannelClassList bareClasses() const
00274     {
00275         ChannelClassList list;
00276         Q_FOREACH (const ChannelClassSpec &spec, *this) {
00277             list.append(spec.bareClass());
00278         }
00279         return list;
00280     }
00281 };
00282 
00283 inline uint qHash(const ChannelClassSpec &spec)
00284 {
00285     uint ret = 0;
00286     QVariantMap::const_iterator it = spec.allProperties().constBegin();
00287     QVariantMap::const_iterator end = spec.allProperties().constEnd();
00288     int i = spec.allProperties().size() + 1;
00289     for (; it != end; ++it) {
00290         // all D-Bus types should be convertible to QString
00291         QPair<QString, QString> p(it.key(), it.value().toString());
00292         int h = qHash(p);
00293         ret ^= ((h << (2 << i)) | (h >> (2 >> i)));
00294         i--;
00295     }
00296     return ret;
00297 }
00298 
00299 inline uint qHash(const QSet<ChannelClassSpec> &specSet)
00300 {
00301     int ret = 0;
00302     Q_FOREACH (const ChannelClassSpec &spec, specSet) {
00303         int h = qHash(spec);
00304         ret ^= h;
00305     }
00306     return ret;
00307 }
00308 
00309 inline uint qHash(const ChannelClassSpecList &specList)
00310 {
00311     // Make it unique by converting to QSet
00312     QSet<ChannelClassSpec> uniqueSet = specList.toSet();
00313     return qHash(uniqueSet);
00314 }
00315 
00316 } // Tp
00317 
00318 Q_DECLARE_METATYPE(Tp::ChannelClassSpec);
00319 Q_DECLARE_METATYPE(Tp::ChannelClassSpecList);
00320 
00321 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00939.html0000644000175200001440000001573112000060453021641 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::SimpleStreamTubeHandler Member List
This is the complete list of members for Tp::SimpleStreamTubeHandler, including all inherited members.
AbstractClient()Tp::AbstractClient
AbstractClientHandler(const ChannelClassSpecList &channelFilter, const Capabilities &capabilities=Capabilities(), bool wantsRequestNotification=false)Tp::AbstractClientHandler [protected]
addRequest(const ChannelRequestPtr &request)Tp::AbstractClientHandler [virtual]
bypassApproval() const Tp::SimpleStreamTubeHandler [inline, virtual]
create(const QStringList &p2pServices, const QStringList &roomServices, bool requested, bool monitorConnections, bool bypassApproval=false)Tp::SimpleStreamTubeHandler [static]
handleChannels(const MethodInvocationContextPtr<> &context, const AccountPtr &account, const ConnectionPtr &connection, const QList< ChannelPtr > &channels, const QList< ChannelRequestPtr > &requestsSatisfied, const QDateTime &userActionTime, const HandlerInfo &handlerInfo)Tp::SimpleStreamTubeHandler [virtual]
handlerCapabilities() const Tp::AbstractClientHandler
handlerFilter() const Tp::AbstractClientHandler
invokedForTube(const Tp::AccountPtr &account, const Tp::StreamTubeChannelPtr &tube, const QDateTime &userActionTime, const Tp::ChannelRequestHints &requestHints)Tp::SimpleStreamTubeHandler [signal]
isRegistered() const Tp::AbstractClient
monitorsConnections() const Tp::SimpleStreamTubeHandler [inline]
RefCounted()Tp::RefCounted [inline]
removeRequest(const ChannelRequestPtr &request, const QString &errorName, const QString &errorMessage)Tp::AbstractClientHandler [virtual]
tubeInvalidated(const Tp::AccountPtr &account, const Tp::StreamTubeChannelPtr &tube, const QString &errorName, const QString &errorMessage)Tp::SimpleStreamTubeHandler [signal]
wantsRequestNotification() const Tp::AbstractClientHandler
~AbstractClient()Tp::AbstractClient [virtual]
~AbstractClientHandler()Tp::AbstractClientHandler [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]
~SimpleStreamTubeHandler()Tp::SimpleStreamTubeHandler


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00074.html0000644000175200001440000001771212000060453021630 0ustar00collabora-develusers00000000000000 Tp::Callback4< R, Arg1, Arg2, Arg3, Arg4 > Class Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Callback4< R, Arg1, Arg2, Arg3, Arg4 > Class Template Reference

Callback with 4 arguments. More...

#include <TelepathyQt/Callbacks>

Inherits Tp::BaseCallback.

List of all members.

Public Types

Public Member Functions


Detailed Description

template<class R, class Arg1, class Arg2, class Arg3, class Arg4>
class Tp::Callback4< R, Arg1, Arg2, Arg3, Arg4 >

Callback with 4 arguments.

See Callbacks Usage


Member Typedef Documentation

template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 >
typedef R(* Tp::Callback4< R, Arg1, Arg2, Arg3, Arg4 >::FunctionType)(Arg1, Arg2, Arg3, Arg4)
template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 >
typedef R Tp::Callback4< R, Arg1, Arg2, Arg3, Arg4 >::ResultType

Constructor & Destructor Documentation

template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 >
Tp::Callback4< R, Arg1, Arg2, Arg3, Arg4 >::Callback4 ( ) [inline]
template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 >
template<class Functor >
Tp::Callback4< R, Arg1, Arg2, Arg3, Arg4 >::Callback4 ( const Functor &  functor) [inline]

Member Function Documentation

template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 >
ResultType Tp::Callback4< R, Arg1, Arg2, Arg3, Arg4 >::operator() ( Arg1  a1,
Arg2  a2,
Arg3  a3,
Arg4  a4 
) const [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00214.html0000644000175200001440000003002312000060453021612 0ustar00collabora-develusers00000000000000 Tp::DBusError Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

Small container class, containing a D-Bus error. More...

#include <TelepathyQt/DBusError>

List of all members.

Public Member Functions


Detailed Description

Small container class, containing a D-Bus error.


Constructor & Destructor Documentation

Construct an empty DBusError

Tp::DBusError::DBusError ( const QString &  name,
const QString &  message 
)

Construct a DBusError with the given error name and message.

Parameters:
nameThe D-Bus error name.
messageA human-readable description of the error.

Class destructor.


Member Function Documentation

bool Tp::DBusError::isValid ( ) const [inline]

Return whether this DBusError is set to contain an error or not.

Returns:
true if the error name and message have been set, or false otherwise.
bool Tp::DBusError::operator== ( const DBusError other) const

Compare this error with another one.

Parameters:
otherThe other error to compare to.
Returns:
true if the two errors have the same name and message or false otherwise.
bool Tp::DBusError::operator!= ( const DBusError other) const

Compare this error with another one.

Parameters:
otherThe other error to compare to.
Returns:
false if the two errors have the same name and message or true otherwise.
QString Tp::DBusError::name ( ) const

Return the D-Bus name of this error.

Returns:
The D-Bus name of this error.
QString Tp::DBusError::message ( ) const

Return the human-readable description of the error.

Returns:
The human-readable description of the error.
void Tp::DBusError::set ( const QString &  name,
const QString &  message 
)

Set this DBusError to contain the given error name and message.

Parameters:
nameThe D-Bus error name to set.
messageThe description of the error to set.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00145.html0000644000175200001440000006347512000060453021636 0ustar00collabora-develusers00000000000000 Tp::Client::ChannelTypeRoomListInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

#include <TelepathyQt/Channel>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Channel.Type.RoomList".


Constructor & Destructor Documentation

Tp::Client::ChannelTypeRoomListInterface::ChannelTypeRoomListInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelTypeRoomListInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ChannelTypeRoomListInterface::ChannelTypeRoomListInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelTypeRoomListInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ChannelTypeRoomListInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ChannelTypeRoomListInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ChannelTypeRoomListInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

static QLatin1String Tp::Client::ChannelTypeRoomListInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Channel.Type.RoomList", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property Server of type QString.

For protocols with a concept of chatrooms on multiple servers with different DNS names (like XMPP), the DNS name of the server whose rooms are listed by this channel, e.g. "conference.jabber.org". Otherwise, the empty string. This property cannot change during the lifetime of the channel.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply<bool> Tp::Client::ChannelTypeRoomListInterface::GetListingRooms ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method GetListingRooms on the remote object.

Check to see if there is already a room list request in progress on this channel.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
Returns:

A boolean indicating if room listing is in progress

QDBusPendingReply Tp::Client::ChannelTypeRoomListInterface::ListRooms ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method ListRooms on the remote object.

Request the list of rooms from the server. The ListingRooms (True) signal should be emitted when this request is being processed, GotRooms when any room information is received, and ListingRooms (False) when the request is complete.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ChannelTypeRoomListInterface::StopListing ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method StopListing on the remote object.

Stop the room listing if it's in progress, but don't close the channel. The ListingRooms (False) signal should be emitted when the listing stops.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.

Represents the signal GotRooms on the remote object.

Emitted when information about rooms on the server becomes available. The array contains the room handle (as can be passed to the ConnectionInterface::RequestChannel() method with HANDLE_TYPE_ROOM), the channel type, and a dictionary containing further information about the room as available. The following well-known keys and types are recommended for use where appropriate:

handle-name (s)
The identifier of the room (as would be returned by ConnectionInterface::InspectHandles() )
name (s)
The human-readable name of the room if different from the handle
description (s)
A description of the room's overall purpose
subject (s)
The current subject of conversation in the room (as would be returned by getting the string part of the org.freedesktop.Telepathy.Channel.Interface.Subject2.Subject property)
members (u)
The number of members in the room
password (b)
True if the room requires a password to enter
invite-only (b)
True if you cannot join the room, but must be invited
room-id (s)
The human-readable identifier of a chat room (as would be returned by getting the org.freedesktop.Telepathy.Channel.Interface.Room2.RoomName property)
server (s)
The DNS name of the server hosting these channels (as would be returned by getting the org.freedesktop.Telepathy.Channel.Interface.Room2.Server property)
Parameters:
rooms An array of structs containing:
  • an integer room handle
  • a string representing the D-Bus interface name of the channel type
  • a dictionary mapping string keys to variant boxed information

Represents the signal ListingRooms on the remote object.

Emitted to indicate whether or not room listing request is currently in progress.

Parameters:
listingA boolean indicating if room listing is in progress
void Tp::Client::ChannelTypeRoomListInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00274.html0000644000175200001440000002003512000060453021622 0ustar00collabora-develusers00000000000000 Tp::MemberFunctor1< R, T, Arg1 > Struct Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MemberFunctor1< R, T, Arg1 > Struct Template Reference

#include </home/collabora-devel/kde/src/telepathy-qt4/TelepathyQt/functors.h>

Inherits Tp::BaseFunctor.

List of all members.

Public Types

Public Member Functions

Public Attributes

template<class R, class T, class Arg1>
struct Tp::MemberFunctor1< R, T, Arg1 >


Member Typedef Documentation

template<class R, class T, class Arg1>
typedef R(T::* Tp::MemberFunctor1< R, T, Arg1 >::FunctionType)(Arg1)
template<class R, class T, class Arg1>
typedef R Tp::MemberFunctor1< R, T, Arg1 >::ResultType

Constructor & Destructor Documentation

template<class R, class T, class Arg1>
Tp::MemberFunctor1< R, T, Arg1 >::MemberFunctor1 ( T *  object,
FunctionType  fn 
) [inline]

Member Function Documentation

template<class R, class T, class Arg1>
ResultType Tp::MemberFunctor1< R, T, Arg1 >::operator() ( Arg1  a1) const [inline]

Member Data Documentation

template<class R, class T, class Arg1>
T* Tp::MemberFunctor1< R, T, Arg1 >::object
template<class R, class T, class Arg1>
FunctionType Tp::MemberFunctor1< R, T, Arg1 >::fn


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00883.html0000644000175200001440000001251012000060453021627 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Message Member List
This is the complete list of members for Tp::Message, including all inherited members.
dbusInterface() const Tp::Message
hasNonTextContent() const Tp::Message
header() const Tp::Message
isSpecificToDBusInterface() const Tp::Message
isTruncated() const Tp::Message
Message(ChannelTextMessageType, const QString &)Tp::Message
Message(const Message &other)Tp::Message
messageToken() const Tp::Message
messageType() const Tp::Message
operator!=(const Message &other) const Tp::Message [inline]
operator=(const Message &other)Tp::Message
operator==(const Message &other) const Tp::Message
part(uint index) const Tp::Message
parts() const Tp::Message
sent() const Tp::Message
size() const Tp::Message
text() const Tp::Message
~Message()Tp::Message


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00593_source.html0000644000175200001440000001735512000060453023221 0ustar00collabora-develusers00000000000000 incoming-file-transfer-channel.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
incoming-file-transfer-channel.h
00001 
00023 #ifndef _TelepathyQt_incoming_file_transfer_channel_h_HEADER_GUARD_
00024 #define _TelepathyQt_incoming_file_transfer_channel_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/FileTransferChannel>
00031 
00032 #include <QAbstractSocket>
00033 
00034 namespace Tp
00035 {
00036 
00037 class TP_QT_EXPORT IncomingFileTransferChannel : public FileTransferChannel
00038 {
00039     Q_OBJECT
00040     Q_DISABLE_COPY(IncomingFileTransferChannel)
00041 
00042 public:
00043     static const Feature FeatureCore;
00044 
00045     static IncomingFileTransferChannelPtr create(const ConnectionPtr &connection,
00046             const QString &objectPath, const QVariantMap &immutableProperties);
00047 
00048     virtual ~IncomingFileTransferChannel();
00049 
00050     PendingOperation *setUri(const QString& uri);
00051     PendingOperation *acceptFile(qulonglong offset, QIODevice *output);
00052 
00053 Q_SIGNALS:
00054     void uriDefined(const QString &uri);
00055 
00056 protected:
00057     IncomingFileTransferChannel(const ConnectionPtr &connection,
00058             const QString &objectPath,
00059             const QVariantMap &immutableProperties,
00060             const Feature &coreFeature = IncomingFileTransferChannel::FeatureCore);
00061 
00062 private Q_SLOTS:
00063     TP_QT_NO_EXPORT void onAcceptFileFinished(Tp::PendingOperation *op);
00064 
00065     TP_QT_NO_EXPORT void onSocketConnected();
00066     TP_QT_NO_EXPORT void onSocketDisconnected();
00067     TP_QT_NO_EXPORT void onSocketError(QAbstractSocket::SocketError error);
00068     TP_QT_NO_EXPORT void doTransfer();
00069 
00070 private:
00071     TP_QT_NO_EXPORT void connectToHost();
00072     TP_QT_NO_EXPORT void setFinished();
00073 
00074     struct Private;
00075     friend struct Private;
00076     Private *mPriv;
00077 };
00078 
00079 } // Tp
00080 
00081 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00016.html0000644000175200001440000000762012000060453021621 0ustar00collabora-develusers00000000000000 protocols/protocols.cpp
   Home · All Classes · All Namespaces · Modules · Functions · Files
protocols/protocols.cpp
#include "protocols.h"
#include "_gen/protocols.moc.hpp"

#include <TelepathyQt/Debug>
#include <TelepathyQt/ConnectionManager>
#include <TelepathyQt/PendingStringList>

#include <QCoreApplication>
#include <QDebug>

Protocols::Protocols()
    : cmWrappersFinished(0)
{
    qDebug() << "Listing names";
    connect(ConnectionManager::listNames(),
            SIGNAL(finished(Tp::PendingOperation *)),
            SLOT(onListNamesFinished(Tp::PendingOperation *)));
}

Protocols::~Protocols()
{
}

void Protocols::onListNamesFinished(PendingOperation *op)
{
    if (op->isError()) {
        qWarning() << "Error listing connection manager names -" <<
            op->errorName() << ": " << op->errorMessage();
        return;
    }

    PendingStringList *ps = qobject_cast<PendingStringList *>(op);

    qDebug() << "Supported CMs:" << ps->result();

    foreach (const QString &cmName, ps->result()) {
        CMWrapper *cmWrapper = new CMWrapper(cmName, this);
        mCMWrappers.append(cmWrapper);
        connect(cmWrapper,
                SIGNAL(finished()),
                SLOT(onCMWrapperFinished()));
    }
}

void Protocols::onCMWrapperFinished()
{
    if (++cmWrappersFinished == mCMWrappers.size()) {
        QCoreApplication::quit();
    }
}


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00047.html0000644000175200001440000022723612000060453021634 0ustar00collabora-develusers00000000000000 Tp::AccountManager Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The AccountManager class represents a Telepathy account manager. More...

#include <TelepathyQt/AccountManager>

Inherits Tp::StatelessDBusProxy, and Tp::OptionalInterfaceFactory< AccountManager >.

List of all members.

Signals

Public Member Functions

Static Public Member Functions

Static Public Attributes

Protected Member Functions


Detailed Description

The AccountManager class represents a Telepathy account manager.

The remote object accessor functions on this object (allAccounts(), validAccounts(), and so on) don't make any D-Bus calls; instead, they return/use values cached from a previous introspection run. The introspection process populates their values in the most efficient way possible based on what the service implements.

To avoid unnecessary D-Bus traffic, some accessors only return valid information after AccountManager::FeatureCore has been enabled. See the individual methods descriptions for more details.

AccountManager features can be enabled by calling becomeReady() with the desired set of features as an argument (currently only AccountManager::FeatureCore is supported), and waiting for the resulting PendingOperation to finish.

All accounts returned by AccountManager are guaranteed to have the features set in the AccountFactory used by it ready.

A signal is emitted to indicate that accounts are added. See newCreated() for more details.

Usage

Creating an AccountManager object

One way to create an AccountManager object is to just call the create method. For example:

 AccountManagerPtr am = AccountManager::create(); 

An AccountManagerPtr object is returned, which will automatically keep track of object lifetime.

You can also provide a D-Bus connection as a QDBusConnection:

 AccountManagerPtr am = AccountManager::create(QDBusConnection::sessionBus()); 

Making AccountManager ready to use

An AccountManager object needs to become ready before usage, meaning that the introspection process finished and the object accessors can be used.

To make the object ready, use becomeReady() and wait for the PendingOperation::finished() signal to be emitted.

 class MyClass : public QObject
 {
     QOBJECT

 public:
     MyClass(QObject *parent = 0);
     ~MyClass() { }

 private Q_SLOTS:
     void onAccountManagerReady(Tp::PendingOperation*);

 private:
     AccountManagerPtr mAM;
 };

 MyClass::MyClass(QObject *parent)
     : QObject(parent)
       mAM(AccountManager::create())
 {
     connect(mAM->becomeReady(),
             SIGNAL(finished(Tp::PendingOperation*)),
             SLOT(onAccountManagerReady(Tp::PendingOperation*)));
 }

 void MyClass::onAccountManagerReady(Tp::PendingOperation *op)
 {
     if (op->isError()) {
         qWarning() << "Account manager cannot become ready:" <<
             op->errorName() << "-" << op->errorMessage();
         return;
     }

     // AccountManager is now ready
     qDebug() << "All accounts:";
     foreach (const Tp::AccountPtr &acc, mAM->allAccounts()) {
         qDebug() << " path:" << acc->objectPath();
     }
 }

See Asynchronous Object Model, Shared Pointer Usage


Constructor & Destructor Documentation

Class destructor.

Tp::AccountManager::AccountManager ( const QDBusConnection &  bus,
const AccountFactoryConstPtr &  accountFactory,
const ConnectionFactoryConstPtr &  connectionFactory,
const ChannelFactoryConstPtr &  channelFactory,
const ContactFactoryConstPtr &  contactFactory,
const Feature coreFeature 
) [protected]

Construct a new AccountManager object using the given bus and the given factories.

The connection, channel and contact factories are passed to any Account objects created by this account manager object. In fact, they're not used directly by AccountManager at all.

A warning is printed if the factories are not for bus.

Parameters:
busQDBusConnection to use.
accountFactoryThe account factory to use.
connectionFactoryThe connection factory to use.
channelFactoryThe channel factory to use.
contactFactoryThe contact factory to use.
coreFeatureThe core feature of the Account subclass. The corresponding introspectable should depend on AccountManager::FeatureCore.

Member Function Documentation

AccountManagerPtr Tp::AccountManager::create ( const QDBusConnection &  bus) [static]

Create a new AccountManager object using the given bus.

The instance will use an account factory creating Tp::Account objects with Account::FeatureCore ready, a connection factory creating Tp::Connection objects with no features ready, a channel factory creating stock Tp::Channel subclasses, as appropriate, with no features ready, and a contact factory creating Tp::Contact objects with no features ready.

Parameters:
busQDBusConnection to use.
Returns:
An AccountManagerPtr object pointing to the newly created AccountManager object.
AccountManagerPtr Tp::AccountManager::create ( const AccountFactoryConstPtr &  accountFactory = AccountFactory::create(QDBusConnection::sessionBus(), Account::FeatureCore),
const ConnectionFactoryConstPtr &  connectionFactory = ConnectionFactory::create(QDBusConnection::sessionBus()),
const ChannelFactoryConstPtr &  channelFactory = ChannelFactory::create(QDBusConnection::sessionBus()),
const ContactFactoryConstPtr &  contactFactory = ContactFactory::create() 
) [static]

Create a new AccountManager using QDBusConnection::sessionBus() and the given factories.

The connection, channel and contact factories are passed to any Account objects created by this account manager object. In fact, they're not used directly by AccountManager at all.

A warning is printed if the factories are for a bus different from QDBusConnection::sessionBus().

Parameters:
accountFactoryThe account factory to use.
connectionFactoryThe connection factory to use.
channelFactoryThe channel factory to use.
contactFactoryThe contact factory to use.
Returns:
An AccountManagerPtr object pointing to the newly created AccountManager object.
AccountManagerPtr Tp::AccountManager::create ( const QDBusConnection &  bus,
const AccountFactoryConstPtr &  accountFactory,
const ConnectionFactoryConstPtr &  connectionFactory,
const ChannelFactoryConstPtr &  channelFactory,
const ContactFactoryConstPtr &  contactFactory = ContactFactory::create() 
) [static]

Create a new AccountManager using the given bus and the given factories.

The connection, channel and contact factories are passed to any Account objects created by this account manager object. In fact, they're not used directly by AccountManager at all.

A warning is printed if the factories are not for bus.

Parameters:
busQDBusConnection to use.
accountFactoryThe account factory to use.
connectionFactoryThe connection factory to use.
channelFactoryThe channel factory to use.
contactFactoryThe contact factory to use.
Returns:
An AccountManagerPtr object pointing to the newly created AccountManager object.
AccountFactoryConstPtr Tp::AccountManager::accountFactory ( ) const

Return the account factory used by this account manager.

Only read access is provided. This allows constructing object instances and examining the object construction settings, but not changing settings. Allowing changes would lead to tricky situations where objects constructed at different times by the manager would have unpredictably different construction settings (eg. subclass).

Returns:
A read-only pointer to the AccountFactory object.
ConnectionFactoryConstPtr Tp::AccountManager::connectionFactory ( ) const

Return the connection factory used by this account manager.

Only read access is provided. This allows constructing object instances and examining the object construction settings, but not changing settings. Allowing changes would lead to tricky situations where objects constructed at different times by the manager would have unpredictably different construction settings (eg. subclass).

Returns:
A read-only pointer to the ConnectionFactory object.
ChannelFactoryConstPtr Tp::AccountManager::channelFactory ( ) const

Return the channel factory used by this account manager.

Only read access is provided. This allows constructing object instances and examining the object construction settings, but not changing settings. Allowing changes would lead to tricky situations where objects constructed at different times by the manager would have unpredictably different construction settings (eg. subclass).

Returns:
A read-only pointer to the ChannelFactory object.
ContactFactoryConstPtr Tp::AccountManager::contactFactory ( ) const

Return the contact factory used by this account manager.

Only read access is provided. This allows constructing object instances and examining the object construction settings, but not changing settings. Allowing changes would lead to tricky situations where objects constructed at different times by the manager would have unpredictably different construction settings (eg. subclass).

Returns:
A read-only pointer to the ContactFactory object.
QList< AccountPtr > Tp::AccountManager::allAccounts ( ) const

Return a list containing all accounts.

Newly accounts added and/or discovered are signaled via newAccount().

This method requires AccountManager::FeatureCore to be ready.

Returns:
A list of pointers to Account objects.
AccountSetPtr Tp::AccountManager::validAccounts ( ) const

Return a set of accounts containing all valid accounts.

This method requires AccountManager::FeatureCore to be ready.

Returns:
A pointer to an AccountSet object containing the matching accounts.
AccountSetPtr Tp::AccountManager::invalidAccounts ( ) const

Return a set of accounts containing all invalid accounts.

This method requires AccountManager::FeatureCore to be ready.

Returns:
A pointer to an AccountSet object containing the matching accounts.
AccountSetPtr Tp::AccountManager::enabledAccounts ( ) const

Return a set of accounts containing all enabled accounts.

This method requires AccountManager::FeatureCore to be ready.

Returns:
A pointer to an AccountSet object containing the matching accounts.
AccountSetPtr Tp::AccountManager::disabledAccounts ( ) const

Return a set of accounts containing all disabled accounts.

This method requires AccountManager::FeatureCore to be ready.

Returns:
A pointer to an AccountSet object containing the matching accounts.
AccountSetPtr Tp::AccountManager::onlineAccounts ( ) const

Return a set of accounts containing all online accounts.

This method requires AccountManager::FeatureCore to be ready.

Returns:
A pointer to an AccountSet object containing the matching accounts.
AccountSetPtr Tp::AccountManager::offlineAccounts ( ) const

Return a set of accounts containing all offline accounts.

This method requires AccountManager::FeatureCore to be ready.

Returns:
A pointer to an AccountSet object containing the matching accounts.
AccountSetPtr Tp::AccountManager::textChatAccounts ( ) const

Return a set of accounts containing all accounts that support text chats by providing a contact identifier.

For this method to work, you must use an AccountFactory which makes Account::FeatureCapabilities ready.

This method requires AccountManager::FeatureCore to be ready.

Returns:
A pointer to an AccountSet object containing the matching accounts.

Return a set of accounts containing all accounts that support text chat rooms.

For this method to work, you must use an AccountFactory which makes Account::FeatureCapabilities ready.

This method requires AccountManager::FeatureCore to be ready.

Returns:
A pointer to an AccountSet object containing the matching accounts.
AccountSetPtr Tp::AccountManager::audioCallAccounts ( ) const

Return a set of accounts containing all accounts that support audio calls (using the Call interface) by providing a contact identifier.

For this method to work, you must use an AccountFactory which makes Account::FeatureCapabilities ready.

This method requires AccountManager::FeatureCore to be ready.

Returns:
A pointer to an AccountSet object containing the matching accounts.
AccountSetPtr Tp::AccountManager::videoCallAccounts ( ) const

Return a set of accounts containing all accounts that support video calls (using the Call interface) by providing a contact identifier.

For this method to work, you must use an AccountFactory which makes Account::FeatureCapabilities ready.

This method requires AccountManager::FeatureCore to be ready.

Returns:
A pointer to an AccountSet object containing the matching accounts.

Return a set of accounts containing all accounts that support media calls (using the StreamedMedia interface) by providing a contact identifier.

For this method to work, you must use an AccountFactory which makes Account::FeatureCapabilities ready.

This method requires AccountManager::FeatureCore to be ready.

Returns:
A pointer to an AccountSet object containing the matching accounts.

Return a set of accounts containing all accounts that support audio calls (using the StreamedMedia interface) by providing a contact identifier.

For this method to work, you must use an AccountFactory which makes Account::FeatureCapabilities ready.

This method requires AccountManager::FeatureCore to be ready.

Returns:
A pointer to an AccountSet object containing the matching accounts.

Return a set of accounts containing all accounts that support video calls (using the StreamedMedia interface) by providing a contact identifier.

For this method to work, you must use an AccountFactory which makes Account::FeatureCapabilities ready.

This method requires AccountManager::FeatureCore to be ready.

Returns:
A pointer to an AccountSet object containing the matching accounts.

Return a set of accounts containing all accounts that support video calls with audio (using the StreamedMedia interface) by providing a contact identifier.

For this method to work, you must use an AccountFactory which makes Account::FeatureCapabilities ready.

This method requires AccountManager::FeatureCore to be ready.

Returns:
A pointer to an AccountSet object containing the matching accounts.

Return a set of accounts containing all accounts that support file transfers by providing a contact identifier.

For this method to work, you must use an AccountFactory which makes Account::FeatureCapabilities ready.

This method requires AccountManager::FeatureCore to be ready.

Returns:
A pointer to an AccountSet object containing the matching accounts.
AccountSetPtr Tp::AccountManager::accountsByProtocol ( const QString &  protocolName) const

Return a set of accounts containing all accounts for the given protocolName.

This method requires AccountManager::FeatureCore to be ready.

Parameters:
protocolNameThe name of the protocol used to filter accounts.
Returns:
A pointer to an AccountSet object containing the matching accounts.
AccountSetPtr Tp::AccountManager::filterAccounts ( const AccountFilterConstPtr &  filter) const

Return a set of accounts containing all accounts that match the given filter criteria.

For AccountCapabilityFilter filtering, an AccountFactory which makes Account::FeatureCapabilities ready must be used.

See AccountSet documentation for more details.

This method requires AccountManager::FeatureCore to be ready.

Parameters:
filterThe desired filter.
Returns:
A pointer to an AccountSet object containing the matching accounts.
AccountSetPtr Tp::AccountManager::filterAccounts ( const QVariantMap &  filter) const

Return a set of accounts containing all accounts that match the given filter criteria.

The filter is composed by Account property names and values as map items.

The following example will return all jabber accounts that are enabled:

 void MyClass::init()
 {
     mAM = AccountManager::create();
     connect(mAM->becomeReady(),
             SIGNAL(finished(Tp::PendingOperation*)),
             SLOT(onAccountManagerReady(Tp::PendingOperation*)));
 }

 void MyClass::onAccountManagerReady(Tp::PendingOperation *op)
 {
     if (op->isError()) {
         qWarning() << "Account manager cannot become ready:" <<
             op->errorName() << "-" << op->errorMessage();
         return;
     }

     QVariantMap filter;
     filter.insert(QLatin1String("protocolName"), QLatin1String("jabber"));
     filter.insert(QLatin1String("enabled"), true);
     filteredAccountSet = mAM->filterAccounts(filter);
     // connect to AccountSet::accountAdded/accountRemoved signals
     QList<AccountPtr> accounts = filteredAccountSet->accounts();
     // do something with accounts
 }

See AccountSet documentation for more details.

This method requires AccountManager::FeatureCore to be ready.

Parameters:
filterThe desired filter.
Returns:
A pointer to an AccountSet object containing the matching accounts.
AccountPtr Tp::AccountManager::accountForObjectPath ( const QString &  path) const

Return the account for the given path.

This method requires AccountManager::FeatureCore to be ready.

Parameters:
pathThe account object path.
Returns:
A pointer to an AccountSet object containing the matching accounts.
See also:
allAccounts(), accountsForObjectPaths()
AccountPtr Tp::AccountManager::accountForPath ( const QString &  path) const
QList< AccountPtr > Tp::AccountManager::accountsForObjectPaths ( const QStringList &  paths) const

Return a list of accounts for the given paths.

The returned list will have one AccountPtr object for each given path. If a given path is invalid the returned AccountPtr object will point to 0. AccountPtr::isNull() will return true.

This method requires AccountManager::FeatureCore to be ready.

Parameters:
pathsList of accounts object paths.
Returns:
A list of pointers to Account objects for the given paths. Null AccountPtr objects will be used as list elements for each invalid path.
See also:
allAccounts(), accountForObjectPath()
QList< AccountPtr > Tp::AccountManager::accountsForPaths ( const QStringList &  paths) const

Return a list of the fully qualified names of properties that can be set when calling createAccount().

Returns:
A list of fully qualified D-Bus property names, such as "org.freedesktop.Telepathy.Account.Enabled".
See also:
createAccount()
PendingAccount * Tp::AccountManager::createAccount ( const QString &  connectionManager,
const QString &  protocol,
const QString &  displayName,
const QVariantMap &  parameters,
const QVariantMap &  properties = QVariantMap() 
)

Create an account with the given parameters.

The optional properties argument can be used to set any property listed in supportedAccountProperties() at the time the account is created.

Parameters:
connectionManagerThe name of the connection manager to create the account for.
protocolThe name of the protocol to create the account for.
displayNameThe account display name.
parametersThe account parameters.
propertiesAn optional map from fully qualified D-Bus property names such as "org.freedesktop.Telepathy.Account.Enabled" to their values.
Returns:
A PendingAccount object which will emit PendingAccount::finished when the account has been created of failed its creation process.
See also:
supportedAccountProperties()
void Tp::AccountManager::newAccount ( const Tp::AccountPtr &  account) [signal]

Emitted when a new account is created.

The new account will have the features set in the AccountFactory used by this account manager ready and the same connection, channel and contact factories as used by this account manager.

Parameters:
accountThe newly created account.

Return the Client::AccountManagerInterface interface proxy object for this account manager. This method is protected since the convenience methods provided by this class should generally be used instead of calling D-Bus methods directly.

Returns:
A pointer to the existing Client::AccountManagerInterface object for this AccountManager object.

Member Data Documentation

Feature representing the core that needs to become ready to make the AccountManager object usable.

Note that this feature must be enabled in order to use most AccountManager methods.

When calling isReady(), becomeReady(), this feature is implicitly added to the requested features.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00953.html0000644000175200001440000006426712000060453021645 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::TubeChannel Member List
This is the complete list of members for Tp::TubeChannel, including all inherited members.
actualFeatures() const Tp::ReadyObject [virtual]
baseInterface() const Tp::Channel [protected]
becomeReady(const Features &requestedFeatures=Features())Tp::ReadyObject [virtual]
busName() const Tp::DBusProxy
BypassInterfaceCheck enum valueTp::OptionalInterfaceFactory< Channel >
Channel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature)Tp::Channel [protected]
channelType() const Tp::Channel
CheckInterfaceSupported enum valueTp::OptionalInterfaceFactory< Channel >
conferenceChannelMerged(const Tp::ChannelPtr &channel)Tp::Channel [signal]
conferenceChannelRemoved(const Tp::ChannelPtr &channel, const Tp::Channel::GroupMemberChangeDetails &details)Tp::Channel [signal]
conferenceChannels() const Tp::Channel
conferenceInitialChannels() const Tp::Channel
conferenceInitialInviteeContacts() const Tp::Channel
conferenceMergeChannel(const ChannelPtr &channel)Tp::Channel
conferenceOriginalChannels() const Tp::Channel
conferenceSplitChannel()Tp::Channel
connection() const Tp::Channel
create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties)Tp::TubeChannel [static]
dbusConnection() const Tp::DBusProxy
DBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::DBusProxy
FeatureConferenceInitialInviteeContactsTp::Channel [static]
FeatureCoreTp::TubeChannel [static]
groupAddContacts(const QList< ContactPtr > &contacts, const QString &message=QString())Tp::Channel
groupAddSelfHandle()Tp::Channel [protected, slot]
groupAreHandleOwnersAvailable() const Tp::Channel
groupCanAcceptContactsWithMessage() const Tp::Channel
groupCanAddContacts() const Tp::Channel
groupCanAddContactsChanged(bool canAddContacts)Tp::Channel [signal]
groupCanAddContactsWithMessage() const Tp::Channel
groupCanDepartWithMessage() const Tp::Channel
groupCanRejectContactsWithMessage() const Tp::Channel
groupCanRemoveContacts() const Tp::Channel
groupCanRemoveContactsChanged(bool canRemoveContacts)Tp::Channel [signal]
groupCanRemoveContactsWithMessage() const Tp::Channel
groupCanRescindContacts() const Tp::Channel
groupCanRescindContactsChanged(bool canRescindContacts)Tp::Channel [signal]
groupCanRescindContactsWithMessage() const Tp::Channel
groupContacts(bool includeSelfContact=true) const Tp::Channel
groupFlags() const Tp::Channel
groupFlagsChanged(Tp::ChannelGroupFlags flags, Tp::ChannelGroupFlags added, Tp::ChannelGroupFlags removed)Tp::Channel [signal]
groupHandleOwners() const Tp::Channel
groupHandleOwnersChanged(const Tp::HandleOwnerMap &owners, const Tp::UIntList &added, const Tp::UIntList &removed)Tp::Channel [signal]
groupIsSelfContactTracked() const Tp::Channel
groupLocalPendingContactChangeInfo(const ContactPtr &contact) const Tp::Channel
groupLocalPendingContacts(bool includeSelfContact=true) const Tp::Channel
groupMembersChanged(const Tp::Contacts &groupMembersAdded, const Tp::Contacts &groupLocalPendingMembersAdded, const Tp::Contacts &groupRemotePendingMembersAdded, const Tp::Contacts &groupMembersRemoved, const Tp::Channel::GroupMemberChangeDetails &details)Tp::Channel [signal]
groupRemotePendingContacts(bool includeSelfContact=true) const Tp::Channel
groupRemoveContacts(const QList< ContactPtr > &contacts, const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone)Tp::Channel
groupSelfContact() const Tp::Channel
groupSelfContactChanged()Tp::Channel [signal]
groupSelfContactRemoveInfo() const Tp::Channel
groupSelfHandleIsLocalPending() const Tp::Channel [protected]
hasInterface(const QString &name) constTp::OptionalInterfaceFactory< Channel > [inline]
immutableProperties() const Tp::Channel
initiatorContact() const Tp::Channel
interface() constTp::OptionalInterfaceFactory< Channel > [inline]
interfaces() constTp::OptionalInterfaceFactory< Channel > [inline]
InterfaceSupportedChecking enum nameTp::OptionalInterfaceFactory< Channel >
invalidate(const QString &reason, const QString &message)Tp::DBusProxy [protected]
invalidate(const QDBusError &error)Tp::DBusProxy [protected]
invalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage)Tp::DBusProxy [signal]
invalidationMessage() const Tp::DBusProxy
invalidationReason() const Tp::DBusProxy
isConference() const Tp::Channel
isReady(const Features &features=Features()) const Tp::ReadyObject [virtual]
isRequested() const Tp::Channel
isValid() const Tp::DBusProxy
missingFeatures() const Tp::ReadyObject [virtual]
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
objectPath() const Tp::DBusProxy
optionalInterface(InterfaceSupportedChecking check=CheckInterfaceSupported) constTp::OptionalInterfaceFactory< Channel > [inline]
OptionalInterfaceFactory(Channel *this_)Tp::OptionalInterfaceFactory< Channel > [inline]
parameters() const Tp::TubeChannel
propertyChanged(const QString &propertyName)Tp::Object [signal]
readinessHelper() const Tp::ReadyObject [protected]
ReadyObject(RefCounted *object, const Feature &featureCore)Tp::ReadyObject
ReadyObject(DBusProxy *proxy, const Feature &featureCore)Tp::ReadyObject
RefCounted()Tp::RefCounted [inline]
requestClose()Tp::Channel
requestedFeatures() const Tp::ReadyObject [virtual]
requestLeave(const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone)Tp::Channel
setBusName(const QString &busName)Tp::DBusProxy [protected]
setInterfaces(const QStringList &interfaces)Tp::OptionalInterfaceFactory< Channel > [inline, protected]
setParameters(const QVariantMap &parameters)Tp::TubeChannel [protected]
state() const Tp::TubeChannel
stateChanged(Tp::TubeChannelState state)Tp::TubeChannel [signal]
StatefulDBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::StatefulDBusProxy
supportsConferenceMerging() const Tp::Channel
supportsConferenceSplitting() const Tp::Channel
targetContact() const Tp::Channel
targetHandle() const Tp::Channel
targetHandleType() const Tp::Channel
targetId() const Tp::Channel
TubeChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature=TubeChannel::FeatureCore)Tp::TubeChannel [protected]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique)Tp::StatefulDBusProxy [static]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique, QString &error, QString &message)Tp::StatefulDBusProxy [static]
~Channel()Tp::Channel [virtual]
~DBusProxy()Tp::DBusProxy [virtual]
~Object()Tp::Object [virtual]
~OptionalInterfaceFactory()Tp::OptionalInterfaceFactory< Channel > [inline]
~ReadyObject()Tp::ReadyObject [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]
~StatefulDBusProxy()Tp::StatefulDBusProxy [virtual]
~TubeChannel()Tp::TubeChannel [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00293.html0000644000175200001440000001240612000060453021626 0ustar00collabora-develusers00000000000000 Tp::ObjectImmutablePropertiesMap Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ObjectImmutablePropertiesMap Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<QDBusObjectPath, QVariantMap>, but needed to have a discrete type in the Qt type system.

A mapping from object path to the immutable properties of the object.


Constructor & Destructor Documentation

Tp::ObjectImmutablePropertiesMap::ObjectImmutablePropertiesMap ( const QMap< QDBusObjectPath, QVariantMap > &  a) [inline]

Member Function Documentation

ObjectImmutablePropertiesMap& Tp::ObjectImmutablePropertiesMap::operator= ( const QMap< QDBusObjectPath, QVariantMap > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_func_0x76.html0000644000175200001440000001004012000060453024607 0ustar00collabora-develusers00000000000000 Class Members - Functions
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- v -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00203.html0000644000175200001440000005327712000060453021630 0ustar00collabora-develusers00000000000000 Tp::ContactMessenger Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The ContactMessenger class provides an easy way to send text messages to a contact and also track sent/receive text messages from the same contact. More...

#include <TelepathyQt/ContactMessenger>

Inherits Tp::RefCounted.

List of all members.

Signals

Public Member Functions

Static Public Member Functions


Detailed Description

The ContactMessenger class provides an easy way to send text messages to a contact and also track sent/receive text messages from the same contact.


Constructor & Destructor Documentation

Class destructor.


Member Function Documentation

ContactMessengerPtr Tp::ContactMessenger::create ( const AccountPtr &  account,
const ContactPtr &  contact 
) [static]

Create a new ContactMessenger object.

Parameters:
accountThe account this messenger is communicating with.
contactThe contact this messenger is communicating with.
Returns:
An ContactMessengerPtr object pointing to the newly created ContactMessenger object, or a null ContactMessengerPtr if contact is null.
ContactMessengerPtr Tp::ContactMessenger::create ( const AccountPtr &  account,
const QString &  contactIdentifier 
) [static]

Create a new ContactMessenger object.

Parameters:
accountThe account this messenger is communicating with.
contactIdentifierThe identifier of the contact this messenger is communicating with.
Returns:
An ContactMessengerPtr object pointing to the newly created ContactMessenger object, or a null ContactMessengerPtr if contact is null.
AccountPtr Tp::ContactMessenger::account ( ) const

Return the account this messenger is communicating with.

Returns:
A pointer to the Account object.

Return the identifier of the contact this messenger is communicating with.

Returns:
The identifier of the contact.
QList< TextChannelPtr > Tp::ContactMessenger::textChats ( ) const

Return the list of text chats currently being observed.

Returns:
A list of pointers to TextChannel objects.

Send a message to the contact identified by contactIdentifier() using account().

Note that the return from this method isn't ordered in any sane way, meaning that messageSent() can be signalled either before or after the returned PendingSendMessage object finishes.

Parameters:
textThe message text.
typeThe message type.
flagsThe message flags.
Returns:
A PendingSendMessage which will emit PendingSendMessage::finished once the reply is received and that can be used to check whether sending the message succeeded or not.

Send a message to the contact identified by contactIdentifier() using account().

Note that the return from this method isn't ordered in any sane way, meaning that messageSent() can be signalled either before or after the returned PendingSendMessage object finishes.

Parameters:
partsThe message parts.
flagsThe message flags.
Returns:
A PendingSendMessage which will emit PendingSendMessage::finished once the reply is received and that can be used to check whether sending the message succeeded or not.
void Tp::ContactMessenger::messageSent ( const Tp::Message message,
Tp::MessageSendingFlags  flags,
const QString &  sentMessageToken,
const Tp::TextChannelPtr &  channel 
) [signal]

Emitted whenever a text message on account() is sent to the contact identified by contactIdentifier().

Parameters:
messageThe message sent.
flagsThe flags of the message that was sent.
sentMessageTokenThe token of the message that was sent.
channelThe channel from which the message was sent.
void Tp::ContactMessenger::messageReceived ( const Tp::ReceivedMessage message,
const Tp::TextChannelPtr &  channel 
) [signal]

Emitted whenever a text message on account() is received from the contact identified by contactIdentifier().

Parameters:
messageThe message received.
channelThe channel from which the message was received.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00485_source.html0000644000175200001440000003037612000060453023217 0ustar00collabora-develusers00000000000000 cli-account-manager.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-account-manager.h
00001 /*
00002  * This file contains D-Bus client proxy classes generated by qt-client-gen.py.
00003  *
00004  * This file can be distributed under the same terms as the specification from
00005  * which it was generated.
00006  */
00007 
00008 #ifndef IN_TP_QT_HEADER
00009 #error IN_TP_QT_HEADER
00010 #endif
00011 
00012 #include <TelepathyQt/Types>
00013 
00014 #include <QtGlobal>
00015 
00016 #include <QString>
00017 #include <QObject>
00018 #include <QVariant>
00019 
00020 #include <QDBusPendingReply>
00021 
00022 #include <TelepathyQt/AbstractInterface>
00023 #include <TelepathyQt/DBusProxy>
00024 #include <TelepathyQt/Global>
00025 
00026 namespace Tp
00027 {
00028 class PendingVariant;
00029 class PendingOperation;
00030 }
00031 
00032 namespace Tp
00033 {
00034 namespace Client
00035 {
00036 
00044 class TP_QT_EXPORT AccountManagerInterface : public Tp::AbstractInterface
00045 {
00046     Q_OBJECT
00047 
00048 public:
00055     static inline QLatin1String staticInterfaceName()
00056     {
00057         return QLatin1String("org.freedesktop.Telepathy.AccountManager");
00058     }
00059 
00067     AccountManagerInterface(
00068         const QString& busName,
00069         const QString& objectPath,
00070         QObject* parent = 0
00071     );
00072 
00081     AccountManagerInterface(
00082         const QDBusConnection& connection,
00083         const QString& busName,
00084         const QString& objectPath,
00085         QObject* parent = 0
00086     );
00087 
00094     AccountManagerInterface(Tp::DBusProxy *proxy);
00095 
00105     inline Tp::PendingVariant *requestPropertyInterfaces() const
00106     {
00107         return internalRequestProperty(QLatin1String("Interfaces"));
00108     }
00109 
00123     inline Tp::PendingVariant *requestPropertyValidAccounts() const
00124     {
00125         return internalRequestProperty(QLatin1String("ValidAccounts"));
00126     }
00127 
00138     inline Tp::PendingVariant *requestPropertyInvalidAccounts() const
00139     {
00140         return internalRequestProperty(QLatin1String("InvalidAccounts"));
00141     }
00142 
00195     inline Tp::PendingVariant *requestPropertySupportedAccountProperties() const
00196     {
00197         return internalRequestProperty(QLatin1String("SupportedAccountProperties"));
00198     }
00199 
00206     Tp::PendingVariantMap *requestAllProperties() const
00207     {
00208         return internalRequestAllProperties();
00209     }
00210 
00211 public Q_SLOTS:
00273     inline QDBusPendingReply<QDBusObjectPath> CreateAccount(const QString& connectionManager, const QString& protocol, const QString& displayName, const QVariantMap& parameters, const QVariantMap& properties, int timeout = -1)
00274     {
00275         if (!invalidationReason().isEmpty()) {
00276             return QDBusPendingReply<QDBusObjectPath>(QDBusMessage::createError(
00277                 invalidationReason(),
00278                 invalidationMessage()
00279             ));
00280         }
00281 
00282         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00283                 this->staticInterfaceName(), QLatin1String("CreateAccount"));
00284         callMessage << QVariant::fromValue(connectionManager) << QVariant::fromValue(protocol) << QVariant::fromValue(displayName) << QVariant::fromValue(parameters) << QVariant::fromValue(properties);
00285         return this->connection().asyncCall(callMessage, timeout);
00286     }
00287 
00288 Q_SIGNALS:
00301     void AccountRemoved(const QDBusObjectPath& account);
00302 
00319     void AccountValidityChanged(const QDBusObjectPath& account, bool valid);
00320 
00321 protected:
00322     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
00323 };
00324 }
00325 }
00326 Q_DECLARE_METATYPE(Tp::Client::AccountManagerInterface*)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00390.html0000644000175200001440000000714712000060453021632 0ustar00collabora-develusers00000000000000 Tp::SocketAddressIPv4 Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::SocketAddressIPv4 Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

An IPv4 address and port.


Member Data Documentation

A dotted-quad IPv4 address literal: four ASCII decimal numbers, each between 0 and 255 inclusive, e.g. "192.168.0.1".

The TCP or UDP port number.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00509_source.html0000644000175200001440000005447012000060453023215 0ustar00collabora-develusers00000000000000 cli-dbus-body.hpp Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-dbus-body.hpp
00001 #define IN_TP_QT_HEADER
00002 #include "TelepathyQt/dbus.h"
00003 
00004 namespace Tp
00005 {
00006 namespace Client
00007 {
00008 namespace DBus
00009 {
00010 
00011 DBusDaemonInterface::DBusDaemonInterface(const QString& busName, const QString& objectPath, QObject *parent)
00012     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00013 {
00014 }
00015 
00016 DBusDaemonInterface::DBusDaemonInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00017     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00018 {
00019 }
00020 
00021 DBusDaemonInterface::DBusDaemonInterface(Tp::DBusProxy *proxy)
00022     : Tp::AbstractInterface(proxy, staticInterfaceName())
00023 {
00024 }
00025 
00026 DBusDaemonInterface::DBusDaemonInterface(const Tp::AbstractInterface& mainInterface)
00027     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00028 {
00029 }
00030 
00031 DBusDaemonInterface::DBusDaemonInterface(const Tp::AbstractInterface& mainInterface, QObject *parent)
00032     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00033 {
00034 }
00035 
00036 void DBusDaemonInterface::invalidate(Tp::DBusProxy *proxy,
00037         const QString &error, const QString &message)
00038 {
00039     disconnect(this, SIGNAL(NameOwnerChanged(const QString&, const QString&, const QString&)), NULL, NULL);
00040     disconnect(this, SIGNAL(NameLost(const QString&)), NULL, NULL);
00041     disconnect(this, SIGNAL(NameAcquired(const QString&)), NULL, NULL);
00042 
00043     Tp::AbstractInterface::invalidate(proxy, error, message);
00044 }
00045 
00046 IntrospectableInterface::IntrospectableInterface(const QString& busName, const QString& objectPath, QObject *parent)
00047     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00048 {
00049 }
00050 
00051 IntrospectableInterface::IntrospectableInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00052     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00053 {
00054 }
00055 
00056 IntrospectableInterface::IntrospectableInterface(Tp::DBusProxy *proxy)
00057     : Tp::AbstractInterface(proxy, staticInterfaceName())
00058 {
00059 }
00060 
00061 IntrospectableInterface::IntrospectableInterface(const Tp::AbstractInterface& mainInterface)
00062     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00063 {
00064 }
00065 
00066 IntrospectableInterface::IntrospectableInterface(const Tp::AbstractInterface& mainInterface, QObject *parent)
00067     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00068 {
00069 }
00070 
00071 void IntrospectableInterface::invalidate(Tp::DBusProxy *proxy,
00072         const QString &error, const QString &message)
00073 {
00074 
00075     Tp::AbstractInterface::invalidate(proxy, error, message);
00076 }
00077 
00078 PeerInterface::PeerInterface(const QString& busName, const QString& objectPath, QObject *parent)
00079     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00080 {
00081 }
00082 
00083 PeerInterface::PeerInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00084     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00085 {
00086 }
00087 
00088 PeerInterface::PeerInterface(Tp::DBusProxy *proxy)
00089     : Tp::AbstractInterface(proxy, staticInterfaceName())
00090 {
00091 }
00092 
00093 PeerInterface::PeerInterface(const Tp::AbstractInterface& mainInterface)
00094     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00095 {
00096 }
00097 
00098 PeerInterface::PeerInterface(const Tp::AbstractInterface& mainInterface, QObject *parent)
00099     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00100 {
00101 }
00102 
00103 void PeerInterface::invalidate(Tp::DBusProxy *proxy,
00104         const QString &error, const QString &message)
00105 {
00106 
00107     Tp::AbstractInterface::invalidate(proxy, error, message);
00108 }
00109 
00110 PropertiesInterface::PropertiesInterface(const QString& busName, const QString& objectPath, QObject *parent)
00111     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00112 {
00113 }
00114 
00115 PropertiesInterface::PropertiesInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00116     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00117 {
00118 }
00119 
00120 PropertiesInterface::PropertiesInterface(Tp::DBusProxy *proxy)
00121     : Tp::AbstractInterface(proxy, staticInterfaceName())
00122 {
00123 }
00124 
00125 PropertiesInterface::PropertiesInterface(const Tp::AbstractInterface& mainInterface)
00126     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00127 {
00128 }
00129 
00130 PropertiesInterface::PropertiesInterface(const Tp::AbstractInterface& mainInterface, QObject *parent)
00131     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00132 {
00133 }
00134 
00135 void PropertiesInterface::invalidate(Tp::DBusProxy *proxy,
00136         const QString &error, const QString &message)
00137 {
00138 
00139     Tp::AbstractInterface::invalidate(proxy, error, message);
00140 }
00141 }
00142 }
00143 }


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00160.html0000644000175200001440000001156512000060453021624 0ustar00collabora-develusers00000000000000 Tp::ComponentStateMap Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ComponentStateMap Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<uint, uint>, but needed to have a discrete type in the Qt type system.


Constructor & Destructor Documentation

Tp::ComponentStateMap::ComponentStateMap ( const QMap< uint, uint > &  a) [inline]

Member Function Documentation

ComponentStateMap& Tp::ComponentStateMap::operator= ( const QMap< uint, uint > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00028.html0000644000175200001440000000376712000060453021634 0ustar00collabora-develusers00000000000000 Mailing Lists
   Home · All Classes · All Namespaces · Modules · Functions · Files
Mailing Lists

General discussion list
This list should be used for general discussion about Telepathy usage, development.

Commits list
Subscribe to this list to follow the commits.

Bugs list
Subscribe to this list to follow the bug reports.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00402.html0000644000175200001440000021343612000060453021624 0ustar00collabora-develusers00000000000000 Tp::StreamTubeClient Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::StreamTubeClient Class Reference

The StreamTubeClient class is a Handler implementation for incoming Stream Tube channels, allowing an application to easily get notified about services they can connect to offered to them over Telepathy Tubes without worrying about the channel dispatching details. More...

#include <TelepathyQt/StreamTubeClient>

Inherits Tp::RefCounted.

List of all members.

Classes

Signals

  • void tubeOffered (const Tp::AccountPtr &account, const Tp::IncomingStreamTubeChannelPtr &tube)
  • void tubeClosed (const Tp::AccountPtr &account, const Tp::IncomingStreamTubeChannelPtr &tube, const QString &error, const QString &message)
  • void tubeAcceptedAsTcp (const QHostAddress &listenAddress, quint16 listenPort, const QHostAddress &sourceAddress, quint16 sourcePort, const Tp::AccountPtr &account, const Tp::IncomingStreamTubeChannelPtr &tube)
  • void tubeAcceptedAsUnix (const QString &listenAddress, bool requiresCredentials, uchar credentialByte, const Tp::AccountPtr &account, const Tp::IncomingStreamTubeChannelPtr &tube)
  • void newConnection (const Tp::AccountPtr &account, const Tp::IncomingStreamTubeChannelPtr &tube, uint connectionId)
  • void connectionClosed (const Tp::AccountPtr &account, const Tp::IncomingStreamTubeChannelPtr &tube, uint connectionId, const QString &error, const QString &message)

Public Member Functions

Static Public Member Functions

  • static StreamTubeClientPtr create (const QStringList &p2pServices, const QStringList &roomServices=QStringList(), const QString &clientName=QString(), bool monitorConnections=false, bool bypassApproval=false, const AccountFactoryConstPtr &accountFactory=AccountFactory::create(QDBusConnection::sessionBus()), const ConnectionFactoryConstPtr &connectionFactory=ConnectionFactory::create(QDBusConnection::sessionBus()), const ChannelFactoryConstPtr &channelFactory=ChannelFactory::create(QDBusConnection::sessionBus()), const ContactFactoryConstPtr &contactFactory=ContactFactory::create())
  • static StreamTubeClientPtr create (const QDBusConnection &bus, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory, const QStringList &p2pServices, const QStringList &roomServices=QStringList(), const QString &clientName=QString(), bool monitorConnections=false, bool bypassApproval=false)
  • static StreamTubeClientPtr create (const AccountManagerPtr &accountManager, const QStringList &p2pServices, const QStringList &roomServices=QStringList(), const QString &clientName=QString(), bool monitorConnections=false, bool bypassApproval=false)
  • static StreamTubeClientPtr create (const ClientRegistrarPtr &registrar, const QStringList &p2pServices, const QStringList &roomServices=QStringList(), const QString &clientName=QString(), bool monitorConnections=false, bool bypassApproval=false)

Detailed Description

The StreamTubeClient class is a Handler implementation for incoming Stream Tube channels, allowing an application to easily get notified about services they can connect to offered to them over Telepathy Tubes without worrying about the channel dispatching details.

Telepathy Tubes is a technology for connecting arbitrary applications together through the IM network (and sometimes with direct peer-to-peer connections), such that issues like firewall/NAT traversal are automatically handled. Stream Tubes in particular offer properties similar to SOCK_STREAM sockets. The StreamTubeClient class negotiates tubes offered to us so that an application can connect such bytestream sockets of theirs to them. The StreamTubeServer class is the counterpart, offering services from a bytestream socket server to tubes requested to be initiated.

Both peer-to-peer (TargetHandleType == HandleTypeContact) and group (TargetHandleType == HandleTypeRoom) channels are supported, and it's possible to specify the tube services to handle for each separately. There must be at least one service in total declared, as it never makes sense to handle stream tubes without considering the protocol of the service offered through them.

Connection monitoring allows fine-grained error reporting for connections made through tubes, and observing connections being made and broken even if the application code running StreamTubeClient can't easily get this information from the code actually connecting through it. Such a setting might occur e.g. when a wrapper application is developed to connect some existing "black box" networked application through TCP tubes by launching it with the appropriate command line arguments or alike for accepted tubes.

Enabling connection monitoring adds a small overhead and latency to handling each incoming tube and signaling each new incoming connection over them, though, so use it only when needed.

A service activated Handler can be implemented using StreamTubeClient by passing a predefined clientName manually to the chosen create() method, and installing Telepathy .client and D-Bus .service files declaring the implemented tube services as channel classes and a path to the executable. If this is not needed, the clientName can be omitted, in which case a random unique client name is generated and used instead. However, then the tube client application must already be running for remote contacts to be able to offer services to us over tubes.

Whether the Handler application implemented using StreamTubeClient is service activatable or not, incoming channels will typically first be given to an Approver, if there is one for tube services corresponding to the tube in question. Only if the Approver decides that the tube communication should be allowed (usually by asking the user), or if there is no matching Approver at all, is the channel given to the actual Handler tube client. This can be overridden by setting bypassApproval to true, which skips approval for the given services completely and directs them straight to the Handler.

StreamTubeClient shares Account, Connection and Channel proxies and Contact objects with the rest of the application as long as a reference to the AccountManager, ClientRegistrar, or the factories used elsewhere is passed to the create() method. A stand-alone tube client Handler can get away without passing these however, or just passing select factories to make the desired features prepared and subclasses employed for these objects for their own convenience.

Whichever method is used, the ChannelFactory (perhaps indirectly) given must construct IncomingStreamTubeChannel instances or subclasses thereof for all channel classes corresponding to the tube services the client should be able to connect to. This is the default; overriding it without obeying these constraints using ChannelFactory::setSubclassForIncomingStreamTubes() or the related methods for room tubes prevents StreamTubeClient from operating correctly.

Todo:
Coin up a small Python script or alike to easily generate the .client and .service files. (fd.o #41614)

Constructor & Destructor Documentation

Class destructor.


Member Function Documentation

StreamTubeClientPtr Tp::StreamTubeClient::create ( const QStringList &  p2pServices,
const QStringList &  roomServices = QStringList(),
const QString &  clientName = QString(),
bool  monitorConnections = false,
bool  bypassApproval = false,
const AccountFactoryConstPtr &  accountFactory = AccountFactory::create(QDBusConnection::sessionBus()),
const ConnectionFactoryConstPtr &  connectionFactory = ConnectionFactory::create(QDBusConnection::sessionBus()),
const ChannelFactoryConstPtr &  channelFactory = ChannelFactory::create(QDBusConnection::sessionBus()),
const ContactFactoryConstPtr &  contactFactory = ContactFactory::create() 
) [static]

Create a new StreamTubeClient, which will register itself on the session bus using an internal ClientRegistrar and use the given factories.

Parameters:
p2pServicesNames of the tube services to accept on peer-to-peer tube channels.
roomServicesNames of the tube services to accept on room/group tube channels.
clientNameThe client name (without the org.freedesktop.Telepathy.Client. prefix).
monitorConnectionsWhether to enable connection monitoring or not.
bypassApprovaltrue to skip approval, false to invoke an Approver for incoming channels if there is one.
accountFactoryThe account factory to use.
connectionFactoryThe connection factory to use.
channelFactoryThe channel factory to use.
contactFactoryThe contact factory to use.
StreamTubeClientPtr Tp::StreamTubeClient::create ( const QDBusConnection &  bus,
const AccountFactoryConstPtr &  accountFactory,
const ConnectionFactoryConstPtr &  connectionFactory,
const ChannelFactoryConstPtr &  channelFactory,
const ContactFactoryConstPtr &  contactFactory,
const QStringList &  p2pServices,
const QStringList &  roomServices = QStringList(),
const QString &  clientName = QString(),
bool  monitorConnections = false,
bool  bypassApproval = false 
) [static]

Create a new StreamTubeClient, which will register itself on the given bus using an internal ClientRegistrar and use the given factories.

The factories must all be created for the given bus.

Parameters:
busConnection to the bus to register on.
accountFactoryThe account factory to use.
connectionFactoryThe connection factory to use.
channelFactoryThe channel factory to use.
contactFactoryThe contact factory to use.
p2pServicesNames of the tube services to handle on peer-to-peer tube channels.
roomServicesNames of the tube services to handle on room/group tube channels.
clientNameThe client name (without the org.freedesktop.Telepathy.Client. prefix).
monitorConnectionsWhether to enable connection monitoring or not.
bypassApprovaltrue to skip approval, false to invoke an Approver for incoming channels if there is one.
StreamTubeClientPtr Tp::StreamTubeClient::create ( const AccountManagerPtr &  accountManager,
const QStringList &  p2pServices,
const QStringList &  roomServices = QStringList(),
const QString &  clientName = QString(),
bool  monitorConnections = false,
bool  bypassApproval = false 
) [static]

Create a new StreamTubeClient, which will register itself on the bus of and share objects with the given accountManager, creating an internal ClientRegistrar.

Parameters:
accountManagerA pointer to the account manager to link up with.
p2pServicesNames of the tube services to handle on peer-to-peer tube channels.
roomServicesNames of the tube services to handle on room/group tube channels.
clientNameThe client name (without the org.freedesktop.Telepathy.Client. prefix).
monitorConnectionsWhether to enable connection monitoring or not.
bypassApprovaltrue to skip approval, false to invoke an Approver for incoming channels if there is one.
StreamTubeClientPtr Tp::StreamTubeClient::create ( const ClientRegistrarPtr &  registrar,
const QStringList &  p2pServices,
const QStringList &  roomServices = QStringList(),
const QString &  clientName = QString(),
bool  monitorConnections = false,
bool  bypassApproval = false 
) [static]

Create a new StreamTubeClient, which will register itself on the bus of and using the given client registrar, and share objects with it.

Parameters:
registrarThe client registrar to use.
p2pServicesNames of the tube services to handle on peer-to-peer tube channels.
roomServicesNames of the tube services to handle on room/group tube channels.
clientNameThe client name (without the org.freedesktop.Telepathy.Client. prefix).
monitorConnectionsWhether to enable connection monitoring or not.
bypassApprovaltrue to skip approval, false to invoke an Approver for incoming channels if there is one.
ClientRegistrarPtr Tp::StreamTubeClient::registrar ( ) const

Return the client registrar used by the client to register itself as a Telepathy channel Handler Client.

This is the registrar originally passed to create(const ClientRegistrarPtr &, const QStringList &, const QStringList &, const QString &, bool, bool) if that was used, and an internally constructed one otherwise. In any case, it can be used to e.g. register further clients, just like any other ClientRegistrar.

Returns:
A pointer to the registrar.

Return the Telepathy Client name of the client.

Returns:
The name, without the org.freedesktop.Telepathy.Client. prefix of the full D-Bus service name.

Return whether the client has been successfully registered or not.

Registration is attempted, at the latest, when the client is first set to accept incoming tubes, either as TCP sockets (setToAcceptAsTcp()) or Unix ones (setToAcceptAsUnix()). It can fail e.g. because the connection to the bus has failed, or a predefined clientName has been passed to create(), and a Client with the same name is already registered. Typically, failure registering would be a fatal error for a stand-alone tube handler, but only a warning event for an application serving other purposes. In any case, a high-quality user of the API will check the return value of this accessor after choosing the desired address family.

Returns:
true if the client has been successfully registered, false if not.

Return whether connection monitoring is enabled on this client.

For technical reasons, connection monitoring can't be enabled when the client is already running, so there is no corresponding setter method. It has to be enabled by passing true as the monitorConnections parameter to the create() method.

If connection monitoring isn't enabled, newConnection() and connectionClosed() won't be emitted and connections() won't be populated.

Returns:
true if monitoring is enabled, false if not.

Return whether the client is currently set to accept incoming tubes as TCP sockets.

Returns:
true if the client will accept tubes as TCP sockets, false if it will accept them as Unix ones or hasn't been set to accept at all yet.

Return the TCP source address generator, if any, set by setToAcceptAsTcp() previously.

Returns:
A pointer to the generator instance.

Return whether the client is currently set to accept incoming tubes as Unix sockets.

Returns:
true if the client will accept tubes as Unix sockets, false if it will accept them as TCP ones or hasn't been set to accept at all yet.

Set the client to accept tubes received to handle in the future in a fashion which will yield a TCP socket as the local endpoint to connect to.

A source address generator can optionally be set. If non-null, it will be invoked for each new tube received to handle and an attempt is made to restrict connections to the tube's local socket endpoint to those from that source address.

However, if the protocol backend doesn't actually support source address based access control, tubeAcceptedAsTcp() will be emitted with QHostAddress::Any as the allowed source address to signal that it doesn't matter where we connect from, but more importantly, that anybody else on the same host could have, and can, connect to the tube. The tube can be closed at this point if this would be unacceptable security-wise. To totally prevent the tube from being accepted in the first place, one can close it already when tubeOffered() is emitted for it - support for the needed security mechanism can be queried using its supportsIPv4SocketsWithSpecifiedAddress() accessor.

The handler is registered on the bus at the latest when this method or setToAcceptAsUnix() is called for the first time, so one should check the return value of isRegistered() at that point to verify that was successful.

Parameters:
generatorA pointer to the source address generator to use, or 0 to allow all connections from the local host.
Todo:
Make it possible to set the tube client to auto-close tubes if the desired access control level is not achieved, as an alternative to the current best-effort behavior.
void Tp::StreamTubeClient::setToAcceptAsUnix ( bool  requireCredentials = false)

Set the client to accept tubes received to handle in the future in a fashion which will yield a Unix socket as the local endpoint to connect to.

If that doesn't cause problems for the payload protocol, it's possible to increase security by restricting the processes allowed to connect to the local endpoint socket to those from the same user ID as the protocol backend is running as by setting requireCredentials to true. This requires transmitting a single byte, signaled as the credentialByte parameter to the tubeAcceptedAsUnix() signal, in a SCM_CREDS or SCM_CREDENTIALS message, whichever is supported by the platform, as the first thing after having connected to the socket. Even if the platform doesn't implement either concept, the byte must still be sent.

However, not all protocol backends support the credential passing based access control on all the platforms they can run on. If a tube is offered through such a backend, tubeAcceptedAsUnix() will be emitted with requiresCredentials set to false, to signal that a credential byte should NOT be sent for that tube, and that any local process can or could have connected to the tube already. The tube can be closed at this point if this would be unacceptable security-wise. To totally prevent the tube from being accepted in the first place, one can close it already when tubeOffered() is emitted for it - support for the needed security mechanism can be queried using its supportsIPv4SocketsWithSpecifiedAddress() accessor.

The handler is registered on the bus at the latest when this method or setToAcceptAsTcp() is called for the first time, so one should check the return value of isRegistered() at that point to verify that was successful.

Parameters:
requireCredentialstrue to try and restrict connecting by UID, false to allow all connections.
Todo:
Make it possible to set the tube client to auto-close tubes if the desired access control level is not achieved, as an alternative to the current best-effort behavior.

Return the tubes currently handled by the client.

Returns:
A list of Tube structures containing pointers to the account and tube channel for each tube.

Return the ongoing connections established through tubes signaled by this client.

The returned mapping has for each Tube a structure containing pointers to the account and tube channel objects as keys, with the integer identifiers for the current connections on them as the values. The IDs are unique amongst the connections active on a single tube at any given time, but not globally.

This is effectively a state recovery accessor corresponding to the change notification signals newConnection() and connectionClosed().

The mapping is only populated if connection monitoring was requested when creating the client (so monitorsConnections() returns true).

Returns:
The connections in a mapping with Tube structures containing pointers to the account and channel objects for each tube as keys, and the sets of numerical IDs as values.
void Tp::StreamTubeClient::tubeOffered ( const Tp::AccountPtr &  account,
const Tp::IncomingStreamTubeChannelPtr &  tube 
) [signal]

Emitted when one of the services we're interested in connecting to has been offered by us as a tube, which we've began handling.

This is emitted before invoking the TcpSourceAddressGenerator, if any, for the tube.

Parameters:
accountA pointer to the account through which the tube was offered.
tubeA pointer to the actual tube channel.
void Tp::StreamTubeClient::tubeClosed ( const Tp::AccountPtr &  account,
const Tp::IncomingStreamTubeChannelPtr &  tube,
const QString &  error,
const QString &  message 
) [signal]

Emitted when a tube we've been handling (previously announced with tubeOffered()) has encountered an error or has otherwise been closed from further communication.

Parameters:
accountA pointer to the account through which the tube was offered.
tubeA pointer to the actual tube channel.
errorThe D-Bus error name corresponding to the reason for the closure.
messageA freeform debug message associated with the error.
void Tp::StreamTubeClient::tubeAcceptedAsTcp ( const QHostAddress &  listenAddress,
quint16  listenPort,
const QHostAddress &  sourceAddress,
quint16  sourcePort,
const Tp::AccountPtr &  account,
const Tp::IncomingStreamTubeChannelPtr &  tube 
) [signal]

Emitted when a tube offered to us (previously announced with tubeOffered()) has been successfully accepted and a TCP socket established as the local endpoint, as specified by setToAcceptAsTcp().

The allowed source address and port are signaled here if there was a TcpSourceAddressGenerator set at the time of accepting this tube, it yielded a non-zero address, and the protocol backend supports source address based access control. This enables the application to use the correct one of the sockets it currently has bound to the generated addresses.

Parameters:
listenAddressThe listen address of the local endpoint socket.
listenPortThe listen port of the local endpoint socket.
sourceAddressThe host address allowed to connect to the tube, or QHostAddress::Any if source address based access control is not in use.
sourcePortThe port from which connections are allowed to the tube, or 0 if source address based access control is not in use.
accountA pointer to the account object through which the tube was offered.
tubeA pointer to the actual tube channel object.
void Tp::StreamTubeClient::tubeAcceptedAsUnix ( const QString &  listenAddress,
bool  requiresCredentials,
uchar  credentialByte,
const Tp::AccountPtr &  account,
const Tp::IncomingStreamTubeChannelPtr &  tube 
) [signal]

Emitted when a tube offered to us (previously announced with tubeOffered()) has been successfully accepted and a Unix socket established as the local endpoint, as specified by setToAcceptAsUnix().

The credential byte which should be sent after connecting to the tube (in a SCM_CREDENTIALS or SCM_CREDS message if supported by the platform) will be signaled here if the client was set to attempt requiring credentials at the time of accepting this tube, and the protocol backend supports credential passing based access control. Otherwise, requiresCredentials will be false and no byte or associated out-of-band credentials metadata should be sent.

Parameters:
listenAddressThe listen address of the local endpoint socket.
requiresCredentialstrue if credentialByte should be sent after connecting to the socket, false if not.
credentialByteThe byte to send if requiresCredentials is true.
accountA pointer to the account object through which the tube was offered.
tubeA pointer to the actual tube channel object.
void Tp::StreamTubeClient::newConnection ( const Tp::AccountPtr &  account,
const Tp::IncomingStreamTubeChannelPtr &  tube,
uint  connectionId 
) [signal]

Emitted when a new connection has been made to the local endpoint socket for tube.

This can be used to later associate connection errors reported by connectionClosed() with the corresponding application sockets. However, establishing the association generally requires connecting only one socket at a time, waiting for newConnection() to be emitted, and only then proceeding, as there is no identification for the connections unlike the incoming connections in StreamTubeServer.

Note that the connection IDs are only unique within a given tube, so identification of the tube channel must also be recorded together with the ID to establish global uniqueness. Even then, the a connection ID can be reused after the previous connection identified by it having been signaled as closed with connectionClosed().

This is only emitted if connection monitoring was enabled when creating the StreamTubeClient.

Parameters:
accountA pointer to the account through which the tube was offered.
tubeA pointer to the tube channel through which the connection has been made.
connectionIdThe integer ID of the new connection.
void Tp::StreamTubeClient::connectionClosed ( const Tp::AccountPtr &  account,
const Tp::IncomingStreamTubeChannelPtr &  tube,
uint  connectionId,
const QString &  error,
const QString &  message 
) [signal]

Emitted when a connection (previously announced with newConnection()) through one of our handled tubes has been closed due to an error or by a graceful disconnect (in which case the error is TP_QT_ERROR_CANCELLED).

This is only emitted if connection monitoring was enabled when creating the StreamTubeClient.

Parameters:
accountA pointer to the account through which the tube was offered.
tubeA pointer to the tube channel through which the connection had been made.
connectionIdThe integer ID of the connection closed.
errorThe D-Bus error name corresponding to the reason for the closure.
messageA freeform debug message associated with the error.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00061.html0000644000175200001440000005606612000060453021631 0ustar00collabora-develusers00000000000000 Tp::BaseConnection Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

Base class for Connection implementations. More...

#include <TelepathyQt/BaseConnection>

Inherits Tp::DBusService.

List of all members.

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Base class for Connection implementations.


Constructor & Destructor Documentation

Class destructor.

Tp::BaseConnection::BaseConnection ( const QDBusConnection &  dbusConnection,
const QString &  cmName,
const QString &  protocolName,
const QVariantMap &  parameters 
) [protected]

Construct a BaseConnection.

Parameters:
dbusConnectionThe D-Bus connection that will be used by this object.
cmNameThe name of the connection manager associated with this connection.
protocolNameThe name of the protocol associated with this connection.
parametersThe parameters of this connection.

Member Function Documentation

static BaseConnectionPtr Tp::BaseConnection::create ( const QString &  cmName,
const QString &  protocolName,
const QVariantMap &  parameters 
) [inline, static]
template<typename BaseConnectionSubclass >
static SharedPtr<BaseConnectionSubclass> Tp::BaseConnection::create ( const QString &  cmName,
const QString &  protocolName,
const QVariantMap &  parameters 
) [inline, static]
static BaseConnectionPtr Tp::BaseConnection::create ( const QDBusConnection &  dbusConnection,
const QString &  cmName,
const QString &  protocolName,
const QVariantMap &  parameters 
) [inline, static]
template<typename BaseConnectionSubclass >
static SharedPtr<BaseConnectionSubclass> Tp::BaseConnection::create ( const QDBusConnection &  dbusConnection,
const QString &  cmName,
const QString &  protocolName,
const QVariantMap &  parameters 
) [inline, static]
QString Tp::BaseConnection::cmName ( ) const

Return the name of the connection manager associated with this connection.

Returns:
The name of the connection manager associated with this connection.

Return the name of the protocol associated with this connection.

Returns:
The name of the protocol associated with this connection.
QVariantMap Tp::BaseConnection::parameters ( ) const

Return the parameters of this connection.

Returns:
The parameters of this connection.
QVariantMap Tp::BaseConnection::immutableProperties ( ) const [virtual]

Return the immutable properties of this connection object.

Immutable properties cannot change after the object has been registered on the bus with registerObject().

Returns:
The immutable properties of this connection object.

Implements Tp::DBusService.

QString Tp::BaseConnection::uniqueName ( ) const [virtual]

Return a unique name for this connection.

Returns:
A unique name for this connection.

Register this connection object on the bus.

If error is passed, any D-Bus error that may occur will be stored there.

Parameters:
errorA pointer to an empty DBusError where any possible D-Bus error will be stored.
Returns:
true on success and false if there was an error or this connection object is already registered.
See also:
isRegistered()

Emitted when this connection has been disconnected.

bool Tp::BaseConnection::registerObject ( const QString &  busName,
const QString &  objectPath,
DBusError error 
) [protected, virtual]

Reimplemented from DBusService.

Reimplemented from Tp::DBusService.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00518_source.html0000644000175200001440000003150112000060453023203 0ustar00collabora-develusers00000000000000 cli-properties.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-properties.h
00001 /*
00002  * This file contains D-Bus client proxy classes generated by qt-client-gen.py.
00003  *
00004  * This file can be distributed under the same terms as the specification from
00005  * which it was generated.
00006  */
00007 
00008 #ifndef IN_TP_QT_HEADER
00009 #error IN_TP_QT_HEADER
00010 #endif
00011 
00012 #include <TelepathyQt/Types>
00013 
00014 #include <QtGlobal>
00015 
00016 #include <QString>
00017 #include <QObject>
00018 #include <QVariant>
00019 
00020 #include <QDBusPendingReply>
00021 
00022 #include <TelepathyQt/AbstractInterface>
00023 #include <TelepathyQt/DBusProxy>
00024 #include <TelepathyQt/Global>
00025 
00026 namespace Tp
00027 {
00028 class PendingVariant;
00029 class PendingOperation;
00030 }
00031 
00032 namespace Tp
00033 {
00034 namespace Client
00035 {
00036 
00044 class TP_QT_EXPORT PropertiesInterfaceInterface : public Tp::AbstractInterface
00045 {
00046     Q_OBJECT
00047 
00048 public:
00055     static inline QLatin1String staticInterfaceName()
00056     {
00057         return QLatin1String("org.freedesktop.Telepathy.Properties");
00058     }
00059 
00067     PropertiesInterfaceInterface(
00068         const QString& busName,
00069         const QString& objectPath,
00070         QObject* parent = 0
00071     );
00072 
00081     PropertiesInterfaceInterface(
00082         const QDBusConnection& connection,
00083         const QString& busName,
00084         const QString& objectPath,
00085         QObject* parent = 0
00086     );
00087 
00094     PropertiesInterfaceInterface(Tp::DBusProxy *proxy);
00095 
00103     explicit PropertiesInterfaceInterface(const Tp::AbstractInterface& mainInterface);
00104 
00112     PropertiesInterfaceInterface(const Tp::AbstractInterface& mainInterface, QObject* parent);
00113 
00120     Tp::PendingVariantMap *requestAllProperties() const
00121     {
00122         return internalRequestAllProperties();
00123     }
00124 
00125 public Q_SLOTS:
00151     inline QDBusPendingReply<Tp::PropertyValueList> GetProperties(const Tp::UIntList& properties, int timeout = -1)
00152     {
00153         if (!invalidationReason().isEmpty()) {
00154             return QDBusPendingReply<Tp::PropertyValueList>(QDBusMessage::createError(
00155                 invalidationReason(),
00156                 invalidationMessage()
00157             ));
00158         }
00159 
00160         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00161                 this->staticInterfaceName(), QLatin1String("GetProperties"));
00162         callMessage << QVariant::fromValue(properties);
00163         return this->connection().asyncCall(callMessage, timeout);
00164     }
00165 
00182     inline QDBusPendingReply<Tp::PropertySpecList> ListProperties(int timeout = -1)
00183     {
00184         if (!invalidationReason().isEmpty()) {
00185             return QDBusPendingReply<Tp::PropertySpecList>(QDBusMessage::createError(
00186                 invalidationReason(),
00187                 invalidationMessage()
00188             ));
00189         }
00190 
00191         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00192                 this->staticInterfaceName(), QLatin1String("ListProperties"));
00193         return this->connection().asyncCall(callMessage, timeout);
00194     }
00195 
00220     inline QDBusPendingReply<> SetProperties(const Tp::PropertyValueList& properties, int timeout = -1)
00221     {
00222         if (!invalidationReason().isEmpty()) {
00223             return QDBusPendingReply<>(QDBusMessage::createError(
00224                 invalidationReason(),
00225                 invalidationMessage()
00226             ));
00227         }
00228 
00229         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00230                 this->staticInterfaceName(), QLatin1String("SetProperties"));
00231         callMessage << QVariant::fromValue(properties);
00232         return this->connection().asyncCall(callMessage, timeout);
00233     }
00234 
00235 Q_SIGNALS:
00253     void PropertiesChanged(const Tp::PropertyValueList& properties);
00254 
00272     void PropertyFlagsChanged(const Tp::PropertyFlagsChangeList& properties);
00273 
00274 protected:
00275     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
00276 };
00277 }
00278 }
00279 Q_DECLARE_METATYPE(Tp::Client::PropertiesInterfaceInterface*)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00190.html0000644000175200001440000027702312000060453021632 0ustar00collabora-develusers00000000000000 Tp::Contact Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The Contact class represents a Telepathy contact. More...

#include <TelepathyQt/Contact>

Inherits Tp::Object.

List of all members.

Classes

Public Types

Signals

Public Member Functions

Static Public Attributes

Protected Member Functions


Detailed Description

The Contact class represents a Telepathy contact.

The accessor functions on this object (id(), alias(), and so on) don't make any D-Bus calls; instead, they return/use values cached from a previous introspection run. The introspection process populates their values in the most efficient way possible based on what the service implements.

To avoid unnecessary D-Bus traffic, some accessors only return valid information after specific features have been enabled. For instance, to retrieve the contact avatar token, it is necessary to enable the feature Contact::FeatureAvatarToken. See the individual methods descriptions for more details.

Contact features can be enabled by constructing a ContactFactory and enabling the desired features, and passing it to AccountManager, Account or ClientRegistrar when creating them as appropriate. However, if a particular feature is only ever used in a specific circumstance, such as an user opening some settings dialog separate from the general view of the application, features can be later enabled as needed by calling ContactManager::upgradeContacts() with the additional features, and waiting for the resulting PendingOperation to finish.

As an addition to accessors, signals are emitted to indicate that properties have changed, for example aliasChanged(), avatarTokenChanged(), etc.

See Asynchronous Object Model, Shared Pointer Usage


Member Enumeration Documentation

Enumerator:
PresenceStateNo 
PresenceStateAsk 
PresenceStateYes 

Constructor & Destructor Documentation

Class destructor.

Tp::Contact::Contact ( ContactManager manager,
const ReferencedHandles handle,
const Features requestedFeatures,
const QVariantMap &  attributes 
) [protected]

Construct a new Contact object.

Parameters:
managerContactManager owning this contact.
handleThe contact handle.
requestedFeaturesThe contact requested features.
attributesThe contact attributes.

Member Function Documentation

ContactManagerPtr Tp::Contact::manager ( ) const

Return the contact nanager owning this contact.

Returns:
A pointer to the ContactManager object.

Return the handle of this contact.

Returns:
The handle as a ReferencedHandles object.
QString Tp::Contact::id ( ) const

Return the identifier of this contact.

Returns:
The identifier.

Return the features requested on this contact.

Returns:
The requested features as a set of Feature objects.

Return the features that are actually enabled on this contact.

Returns:
The actual features as a set of Feature objects.
QString Tp::Contact::alias ( ) const

Return the alias of this contact.

Change notification is via the aliasChanged() signal.

This method requires Contact::FeatureAlias to be ready.

Returns:
The alias.
QMap< QString, QString > Tp::Contact::vcardAddresses ( ) const

Return the various vcard addresses that identify this contact.

This method requires Contact::FeatureAddresses to be ready.

Returns:
The vcard addresses identifying this contact.
See also:
ContactManager::contactsForVCardAddresses(), uris()
QStringList Tp::Contact::uris ( ) const

Return the various URI addresses that identify this contact.

This method requires Contact::FeatureAddresses to be ready.

Returns:
The URI addresses identifying this contact.
See also:
ContactManager::contactsForUris(), vcardAddresses()

Return whether the avatar token of this contact is known.

This method requires Contact::FeatureAvatarToken to be ready.

Returns:
true if the avatar token is known, false otherwise.
See also:
avatarToken()
QString Tp::Contact::avatarToken ( ) const

Return the avatar token for this contact.

Change notification is via the avatarTokenChanged() signal.

This method requires Contact::FeatureAvatarToken to be ready.

Returns:
The avatar token.
See also:
isAvatarTokenKnown(), avatarTokenChanged(), avatarData()

Return the actual avatar for this contact.

Change notification is via the avatarDataChanged() signal.

This method requires Contact::FeatureAvatarData to be ready.

Returns:
The avatar as an AvatarData object.
See also:
avatarDataChanged(), avatarToken()

Start a request to retrieve the avatar for this contact.

Force the request of the avatar data. This method returns directly, emitting avatarTokenChanged() and avatarDataChanged() signals once the token and data are fetched from the server.

This is only useful if the avatar token is unknown; see isAvatarTokenKnown(). It happens in the case of offline XMPP contacts, because the server does not send the token for them and an explicit request of the avatar data is needed.

This method requires Contact::FeatureAvatarData to be ready.

See also:
avatarData(), avatarDataChanged(), avatarToken(), avatarTokenChanged()

Return the actual presence of this contact.

Change notification is via the presenceChanged() signal.

This method requires Contact::FeatureSimplePresence to be ready.

Returns:
The presence as a Presence object.

Return the capabilities for this contact.

User interfaces can use this information to show or hide UI components.

If ContactManager::supportedFeatures() contains Contact::FeatureCapabilities, the returned object will be a ContactCapabilities object, where CapabilitiesBase::isSpecificToContact() will be true; if that feature isn't present, this returned object is the subset of Contact::manager()::connection()::capabilities() and CapabilitiesBase::isSpecificToContact() will be false.

Change notification is via the capabilitiesChanged() signal.

This method requires Contact::FeatureCapabilities to be ready.

Returns:
An object representing the contact capabilities.

Return the location for this contact.

Change notification is via the locationUpdated() signal.

This method requires Contact::FeatureLocation to be ready.

Returns:
The contact location as a LocationInfo object.

Return whether the info card for this contact has been received.

With some protocols (notably XMPP) information is not pushed from the server and must be requested explicitely using refreshInfo() or requestInfo(). This method can be used to know if the information is received from the server or if an explicit request is needed.

This method requires Contacat::FeatureInfo to be ready.

Returns:
true if the information is known; false otherwise.

Return the information for this contact.

Note that this method only return cached information. In order to refresh the information use refreshInfo().

Change notification is via the infoFieldsChanged() signal.

This method requires Contact::FeatureInfo to be ready.

Returns:
The contact info as a Contact::InfoFields object.

Refresh information for the given contact.

Once the information is retrieved infoFieldsChanged() will be emitted.

This method requires Contact::FeatureInfo to be ready.

Returns:
A PendingOperation, which will emit PendingOperation::finished when the call has finished.
See also:
infoFieldsChanged()

Start a request to retrieve the information for this contact.

This method is useful for UIs that don't care about notification of changes in the contact information but want to show the contact information (e.g. right-click on a contact and show the contact info).

Returns:
A PendingContactInfo, which will emit PendingContactInfo::finished when the information has been retrieved or an error occurred.

Return whether the presence subscription state of this contact is known.

Returns:
true if the presence subscription state is known, false otherwise.
See also:
subscriptionState(), isSubscriptionRejected()

Return whether a request to see this contact's presence was denied.

Returns:
if the a request to see the presence subscription was denied, false otherwise.
See also:
isSubscriptionStateKnown(), subscriptionState()

Return the presence subscription state of this contact (i.e. whether the local user can retrieve information about this contact's presence).

Returns:
The presence subscription state as Contact::PresenceState.
See also:
isSubscriptionStateKnown(), isSubscriptionRejected()

Return whether the presence publish state of this contact is known.

Returns:
true if the presence publish state is known, false otherwise.
See also:
publishState(), isPublishCancelled()

Return whether a request to publish presence information to this contact was cancelled.

Returns:
true if a request to publish presence information was cancelled, false otherwise.
See also:
isPublishStateKnown(), publishState()

Return the presence publish state of this contact (i.e. whether this contact can retrieve information about the local user's presence).

Returns:
The presence publish state as Contact::PresenceState.
See also:
isSubscriptionStateKnown(), isSubscriptionRejected()

If the publishState() is Contact::PresenceStateAsk, return an optional message that was sent by the contact asking to receive the local user's presence; omitted if none was given.

Returns:
The message that was sent by the contact asking to receive the local user's presence.
See also:
publishState()
PendingOperation * Tp::Contact::requestPresenceSubscription ( const QString &  message = QString())

Start a request that this contact allow the local user to subscribe to their presence (i.e. that this contact's subscribe attribute becomes Contact::PresenceStateYes)

This method requires Connection::FeatureRoster to be ready.

Returns:
A PendingOperation which will emit PendingOperation::finished when the request has been made.
See also:
subscriptionState(), removePresenceSubscription()
PendingOperation * Tp::Contact::removePresenceSubscription ( const QString &  message = QString())

Start a request for the local user to stop receiving presence from this contact.

This method requires Connection::FeatureRoster to be ready.

Returns:
A PendingOperation which will emit PendingOperation::finished when the request has been made.
See also:
subscriptionState(), requestPresenceSubscription()
PendingOperation * Tp::Contact::authorizePresencePublication ( const QString &  message = QString())

Start a request to authorize this contact's request to see the local user presence (i.e. that this contact publish attribute becomes Contact::PresenceStateYes).

This method requires Connection::FeatureRoster to be ready.

Returns:
A PendingOperation which will emit PendingOperation::finished when the request has been made.
See also:
publishState(), removePresencePublication()
PendingOperation * Tp::Contact::removePresencePublication ( const QString &  message = QString())

Start a request for the local user to stop sending presence to this contact.

This method requires Connection::FeatureRoster to be ready.

Returns:
A PendingOperation which will emit PendingOperation::finished when the request has been made.
See also:
publishState(), authorizePresencePublication()
bool Tp::Contact::isBlocked ( ) const

Return whether this contact is blocked.

Change notification is via the blockStatusChanged() signal.

Returns:
true if blocked, false otherwise.
See also:
block()

Block this contact. Blocked contacts cannot send messages to the user; depending on the protocol, blocking a contact may have other effects.

This method requires Connection::FeatureRoster to be ready.

Returns:
A PendingOperation which will emit PendingOperation::finished when an attempt has been made to take the requested action.
See also:
blockAndReportAbuse(), unblock()

Block this contact and additionally report abusive behaviour to the server.

If reporting abusive behaviour is not supported by the protocol, this method has the same effect as block().

This method requires Connection::FeatureRoster to be ready.

Returns:
A PendingOperation which will emit PendingOperation::finished when an attempt has been made to take the requested action.
See also:
ContactManager::canReportAbuse(), block(), unblock()

Unblock this contact.

This method requires Connection::FeatureRoster to be ready.

Returns:
A PendingOperation which will emit PendingOperation::finished when an attempt has been made to take the requested action.
See also:
block(), blockAndReportAbuse()
QStringList Tp::Contact::groups ( ) const

Return the names of the user-defined roster groups to which the contact belongs.

Change notification is via the addedToGroup() and removedFromGroup() signals.

This method requires Connection::FeatureRosterGroups to be ready.

Returns:
A list of user-defined contact list groups names.
See also:
addToGroup(), removedFromGroup()
PendingOperation * Tp::Contact::addToGroup ( const QString &  group)

Attempt to add the contact to the user-defined contact list group named group.

This method requires Connection::FeatureRosterGroups to be ready.

Parameters:
groupThe group name.
Returns:
A PendingOperation which will emit PendingOperation::finished when an attempt has been made to to add the contact to the user-defined contact list group.
See also:
groups(), removeFromGroup()
PendingOperation * Tp::Contact::removeFromGroup ( const QString &  group)

Attempt to remove the contact from the user-defined contact list group named group.

This method requires Connection::FeatureRosterGroups to be ready.

Parameters:
groupThe group name.
Returns:
A PendingOperation which will emit PendingOperation::finished when an attempt has been made to to remote the contact to the user-defined contact list group.
See also:
groups(), addToGroup()
QStringList Tp::Contact::clientTypes ( ) const

Return the client types of this contact, if known.

Client types are represented using the values documented by the XMPP registrar, with some additional types. A contact can set one or more client types, or can simply advertise itself as unknown - in this case, an empty list is returned.

This method returns cached information and is more appropriate for "lazy" client type finding, for instance displaying the client types (if available) of everyone in your contact list. For getting latest up-to-date information from the server you should use requestClientTypes() instead.

This method requires FeatureClientTypes to be ready.

Returns:
A list of the client types advertised by this contact.
See also:
requestClientTypes(), clientTypesChanged()

Return the current client types of the given contact.

If necessary, this method will make a request to the server for up-to-date information and wait for a reply. Therefore, this method is more appropriate for use in a "Contact Information..." dialog; it can be used to show progress information (while waiting for the method to return), and can distinguish between various error conditions.

This method requires FeatureClientTypes to be ready.

Returns:
A list of the client types advertised by this contact.
See also:
clientTypes(), clientTypesChanged()
void Tp::Contact::aliasChanged ( const QString &  alias) [signal]

Emitted when the value of alias() changes.

Parameters:
aliasThe new alias of this contact.
See also:
alias()
void Tp::Contact::avatarTokenChanged ( const QString &  avatarToken) [signal]

Emitted when the value of avatarToken() changes.

Parameters:
avatarTokenThe new avatar token of this contact.
See also:
avatarToken()
void Tp::Contact::avatarDataChanged ( const Tp::AvatarData avatarData) [signal]

Emitted when the value of avatarData() changes.

Parameters:
avatarDataThe new avatar of this contact.
See also:
avatarData()
void Tp::Contact::presenceChanged ( const Tp::Presence presence) [signal]

Emitted when the value of presence() changes.

Parameters:
presenceThe new presence of this contact.
See also:
presence()

Emitted when the value of capabilities() changes.

Parameters:
capsThe new capabilities of this contact.
See also:
capabilities()
void Tp::Contact::locationUpdated ( const Tp::LocationInfo location) [signal]

Emitted when the value of location() changes.

Parameters:
capsThe new location of this contact.
See also:
location()
void Tp::Contact::infoFieldsChanged ( const Tp::Contact::InfoFields infoFields) [signal]

Emitted when the value of infoFields() changes.

Parameters:
InfoFieldsThe new info of this contact.
See also:
infoFields()

Emitted when the value of subscriptionState() changes.

Parameters:
stateThe new subscription state of this contact.
See also:
subscriptionState()
void Tp::Contact::publishStateChanged ( Tp::Contact::PresenceState  state,
const QString &  message 
) [signal]

Emitted when the value of publishState() changes.

Parameters:
stateThe new publish state of this contact.
See also:
publishState()
void Tp::Contact::blockStatusChanged ( bool  blocked) [signal]

Emitted when the value of isBlocked() changes.

Parameters:
statusThe new block status of this contact.
See also:
isBlocked()
void Tp::Contact::addedToGroup ( const QString &  group) [signal]

Emitted when this contact is added to group of the contact list.

Parameters:
groupThe group name.
See also:
groups(), removedFromGroup()
void Tp::Contact::removedFromGroup ( const QString &  group) [signal]

Emitted when this contact is removed from group of the contact list.

Parameters:
groupThe group name.
See also:
groups(), addedToGroup()
void Tp::Contact::clientTypesChanged ( const QStringList &  clientTypes) [signal]

Emitted when the client types of this contact change or become known.

Parameters:
clientTypesThe contact's client types
See also:
clientTypes(), requestClientTypes()
void Tp::Contact::augment ( const Features requestedFeatures,
const QVariantMap &  attributes 
) [protected, virtual]

Member Data Documentation

Feature used in order to access contact alias info.

See also:
alias(), aliasChanged()

Feature used in order to access contact avatar data info.

Enabling this feature will also enable FeatureAvatarToken.

See also:
avatarData(), avatarDataChanged()

Feature used in order to access contact avatar token info.

See also:
isAvatarTokenKnown(), avatarToken(), avatarTokenChanged()

Feature used in order to access contact capabilities info.

See also:
capabilities(), capabilitiesChanged()

Feature used in order to access contact info fields.

See also:
infoFields(), infoFieldsChanged()

Feature used in order to access contact location info.

See also:
location(), locationUpdated()

Feature used in order to access contact presence info.

See also:
presence(), presenceChanged()

Feature used in order to access contact addressable addresses info.

See also:
vcardAddresses(), uris()

Feature used in order to access contact client types info.

See also:
clientTypes(), requestClientTypes(), clientTypesChanged()


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00089.html0000644000175200001440000001155712000060453021637 0ustar00collabora-develusers00000000000000 Tp::CallMemberMap Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::CallMemberMap Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<uint, uint>, but needed to have a discrete type in the Qt type system.

A mapping from handles to their current state in the call.


Constructor & Destructor Documentation

Tp::CallMemberMap::CallMemberMap ( const QMap< uint, uint > &  a) [inline]

Member Function Documentation

CallMemberMap& Tp::CallMemberMap::operator= ( const QMap< uint, uint > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01054.html0000644000175200001440000000516312000060453021624 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::SimpleContactPresences Member List
This is the complete list of members for Tp::SimpleContactPresences, including all inherited members.
operator=(const QMap< uint, SimplePresence > &a)Tp::SimpleContactPresences [inline]
SimpleContactPresences()Tp::SimpleContactPresences [inline]
SimpleContactPresences(const QMap< uint, SimplePresence > &a)Tp::SimpleContactPresences [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00185.html0000644000175200001440000007464212000060453021640 0ustar00collabora-develusers00000000000000 Tp::Client::ConnectionInterfaceSimplePresenceInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceSimplePresenceInterface Class Reference

#include <TelepathyQt/Connection>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Connection.Interface.SimplePresence".


Constructor & Destructor Documentation

Tp::Client::ConnectionInterfaceSimplePresenceInterface::ConnectionInterfaceSimplePresenceInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceSimplePresenceInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ConnectionInterfaceSimplePresenceInterface::ConnectionInterfaceSimplePresenceInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceSimplePresenceInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ConnectionInterfaceSimplePresenceInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ConnectionInterfaceSimplePresenceInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ConnectionInterfaceSimplePresenceInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Connection.Interface.SimplePresence", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property Statuses of type Tp::SimpleStatusSpecMap.

A dictionary where the keys are the presence statuses that are available on this connection, and the values are the corresponding presence types.

While the connection is in the DISCONNECTED state, it contains the set of presence statuses allowed to be set before connecting. The connection manager will attempt to set the appropriate status when the connection becomes connected, but cannot necessarily guarantee it. The available statuses cannot change until the connection status changes, so there is no change notification.

While the connection is in the CONNECTED state, this property contains the set of presence statuses which are actually available on this protocol. This set is constant for the remaining lifetime of the connection, so again, there is no change notification.

While the connection is in the CONNECTING state, the value of this property is undefined and SHOULD NOT be used. It can change at any time without notification (in particular, any cached values from when the connection was in the DISCONNECTED or CONNECTING state MUST NOT be assumed to still be correct when the state has become CONNECTED).

This property MUST include the special statuses "unknown" and "error" if and only if the connection manager can emit them as a contact's status.

For instance, connection managers for local-xmpp (XEP-0174) would omit "unknown" since there is no such concept.
Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property MaximumStatusMessageLength of type uint.

The maximum length in characters for any individual status message, or 0 if there is no limit.

While the connection is in the DISCONNECTED state, this property will be 0. The connection manager will attempt to set the appropriate value when the connection becomes connected, but cannot necessarily guarantee it. The maximum length cannot change until the connection status changes, so there is no change notification.

While the connection is in the CONNECTED state, this property contains the maximum length in characters for any individual status message which is actually allowed on this protocol. This value is constant for the remaining lifetime of the connection, so again, there is no change notification.

While the connection is in the CONNECTING state, the value of this property is undefined and SHOULD NOT be used. It can change at any time without notification (in particular, any cached values from when the connection was in the DISCONNECTED or CONNECTING state MUST NOT be assumed to still be correct when the state has become CONNECTED).

If a message passed to SetPresence() is longer than allowed by this property, the connection manager MUST truncate the supplied message; when emitting PresencesChanged() , the truncated version of the message MUST be used.

Some XMPP servers, like Google Talk, define a maximum length for status messages. Whether the user's server is one of these cannot be detected until quite late in the connection process.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::ConnectionInterfaceSimplePresenceInterface::SetPresence ( const QString &  status,
const QString &  statusMessage,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method SetPresence on the remote object.

Request that the presence status and status message are published for the connection. Changes will be indicated by PresencesChanged() signals being emitted.

This method may be called on a newly-created connection while it is still in the DISCONNECTED state, to request that when the connection connects, it will do so with the selected status.

In DISCONNECTED state the Statuses property will indicate which statuses are allowed to be set while DISCONNECTED (none, if the Connection Manager doesn't allow this). This value MUST NOT be cached, as the set of allowed presences might change upon connecting.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
status

The string identifier of the desired status. Possible status identifiers are defined in the Statuses property.

Clients MUST NOT set a status whose string value they do not recognise, even if its presence type in Statuses matches what the user requested.

Suppose a protocol has statuses that include 'phone' (of type BUSY) and 'in-a-meeting' (of type BUSY), but there is no generic 'busy' status.

If the user requests "Busy" status from a menu, a client author might be tempted to pick an arbitrary status that has type BUSY. However, on this protocol, neither of the choices would be appropriate, and incorrect information about the user would be conveyed.

Statuses whose Connection_Presence_Type is Offline, Error or Unknown MUST NOT be passed to this function. Connection managers SHOULD reject these statuses.

To go offline, call ConnectionInterface::Disconnect() instead. The "error" and "unknown" statuses make no sense.

statusMessageThe status message associated with the current status.
timeoutThe timeout in milliseconds.
QDBusPendingReply<Tp::SimpleContactPresences> Tp::Client::ConnectionInterfaceSimplePresenceInterface::GetPresences ( const Tp::UIntList contacts,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method GetPresences on the remote object.

Get presence previously emitted by PresencesChanged for the given contacts. Data is returned in the same structure as the PresencesChanged signal; no additional network requests are made.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
contactsAn array of the contacts whose presence should be obtained.
timeoutThe timeout in milliseconds.
Returns:

Presence information in the same format as for the PresencesChanged() signal. The returned mapping MUST include an entry for each contact in the method's argument.

The definition of the connection presence types Unknown and Offline means that if a connection manager will return Unknown for contacts not on the subscribe list, it MUST delay the reply to this method call until it has found out which contacts are, in fact, on the subscribe list.

Represents the signal PresencesChanged on the remote object.

This signal should be emitted when your own presence has been changed, or the presence of the member of any of the connection's channels has been changed.

Parameters:
presenceA dictionary of contact handles mapped to the status, presence type and status message.
void Tp::Client::ConnectionInterfaceSimplePresenceInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00981.html0000644000175200001440000000462112000060453021632 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactInfoField Member List
This is the complete list of members for Tp::ContactInfoField, including all inherited members.
fieldNameTp::ContactInfoField
fieldValueTp::ContactInfoField
parametersTp::ContactInfoField


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00547_source.html0000644000175200001440000003262412000060453023214 0ustar00collabora-develusers00000000000000 contact-search-channel.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
contact-search-channel.h
00001 
00023 #ifndef _TelepathyQt_contact_search_channel_h_HEADER_GUARD_
00024 #define _TelepathyQt_contact_search_channel_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Channel>
00031 #include <TelepathyQt/Contact>
00032 #include <TelepathyQt/Types>
00033 
00034 namespace Tp
00035 {
00036 
00037 class TP_QT_EXPORT ContactSearchChannel : public Channel
00038 {
00039     Q_OBJECT
00040     Q_DISABLE_COPY(ContactSearchChannel)
00041 
00042 public:
00043     static const Feature FeatureCore;
00044 
00045     class SearchStateChangeDetails
00046     {
00047     public:
00048         SearchStateChangeDetails();
00049         SearchStateChangeDetails(const SearchStateChangeDetails &other);
00050         ~SearchStateChangeDetails();
00051 
00052         bool isValid() const { return mPriv.constData() != 0; }
00053 
00054         SearchStateChangeDetails &operator=(const SearchStateChangeDetails &other);
00055 
00056         bool hasDebugMessage() const { return allDetails().contains(QLatin1String("debug-message")); }
00057         QString debugMessage() const { return qdbus_cast<QString>(allDetails().value(QLatin1String("debug-message"))); }
00058 
00059         QVariantMap allDetails() const;
00060 
00061     private:
00062         friend class ContactSearchChannel;
00063 
00064         TP_QT_NO_EXPORT SearchStateChangeDetails(const QVariantMap &details);
00065 
00066         struct Private;
00067         friend struct Private;
00068         QSharedDataPointer<Private> mPriv;
00069     };
00070 
00071     typedef QHash<ContactPtr, Contact::InfoFields> SearchResult;
00072 
00073     static ContactSearchChannelPtr create(const ConnectionPtr &connection,
00074             const QString &objectPath, const QVariantMap &immutableProperties);
00075 
00076     virtual ~ContactSearchChannel();
00077 
00078     ChannelContactSearchState searchState() const;
00079     uint limit() const;
00080     QStringList availableSearchKeys() const;
00081     QString server() const;
00082 
00083     PendingOperation *search(const QString &searchKey, const QString &searchTerm);
00084     PendingOperation *search(const ContactSearchMap &searchTerms);
00085     void continueSearch();
00086     void stopSearch();
00087 
00088 Q_SIGNALS:
00089     void searchStateChanged(Tp::ChannelContactSearchState state, const QString &errorName,
00090             const Tp::ContactSearchChannel::SearchStateChangeDetails &details);
00091     void searchResultReceived(const Tp::ContactSearchChannel::SearchResult &result);
00092 
00093 protected:
00094     ContactSearchChannel(const ConnectionPtr &connection, const QString &objectPath,
00095             const QVariantMap &immutableProperties, const Feature &coreFeature);
00096 
00097 private Q_SLOTS:
00098     TP_QT_NO_EXPORT void gotProperties(QDBusPendingCallWatcher *watcher);
00099     TP_QT_NO_EXPORT void gotSearchState(QDBusPendingCallWatcher *watcher);
00100     TP_QT_NO_EXPORT void onSearchStateChanged(uint state, const QString &error, const QVariantMap &details);
00101     TP_QT_NO_EXPORT void onSearchResultReceived(const Tp::ContactSearchResultMap &result);
00102     TP_QT_NO_EXPORT void gotSearchResultContacts(Tp::PendingOperation *op);
00103 
00104 private:
00105     class PendingSearch;
00106 
00107     struct Private;
00108     friend struct Private;
00109     Private *mPriv;
00110 };
00111 
00112 } // Tp
00113 
00114 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00227.html0000644000175200001440000002021312000060453021616 0ustar00collabora-develusers00000000000000 Tp::Feature Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Feature Class Reference

The Feature class represents a feature that can be enabled on demand. More...

#include <TelepathyQt/Feature>

List of all members.

Public Member Functions


Detailed Description

The Feature class represents a feature that can be enabled on demand.


Constructor & Destructor Documentation

Tp::Feature::Feature ( const QString &  className,
uint  id,
bool  critical = false 
)
Tp::Feature::Feature ( const Feature other)

Member Function Documentation

bool Tp::Feature::isValid ( ) const [inline]
Feature & Tp::Feature::operator= ( const Feature other)
bool Tp::Feature::isCritical ( ) const


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00020.html0000644000175200001440000001161612000060453021614 0ustar00collabora-develusers00000000000000 roster/roster-item.cpp
   Home · All Classes · All Namespaces · Modules · Functions · Files
roster/roster-item.cpp
#include "roster-item.h"
#include "_gen/roster-item.moc.hpp"

#include <TelepathyQt/Presence>

using namespace Tp;

RosterItem::RosterItem(const ContactPtr &contact, QListWidget *parent)
    : QObject(parent),
      QListWidgetItem(parent),
      mContact(contact)
{
    onContactChanged();

    connect(contact.data(),
            SIGNAL(aliasChanged(QString)),
            SLOT(onContactChanged()));
    connect(contact.data(),
            SIGNAL(presenceChanged(Tp::Presence)),
            SLOT(onContactChanged()));
    connect(contact.data(),
            SIGNAL(subscriptionStateChanged(Tp::Contact::PresenceState)),
            SLOT(onContactChanged()));
    connect(contact.data(),
            SIGNAL(publishStateChanged(Tp::Contact::PresenceState,QString)),
            SLOT(onContactChanged()));
    connect(contact.data(),
            SIGNAL(blockStatusChanged(bool)),
            SLOT(onContactChanged()));
}

RosterItem::~RosterItem()
{
}

void RosterItem::onContactChanged()
{
    QString status = mContact->presence().status();
    // I've asked to see the contact presence
    if (mContact->subscriptionState() == Contact::PresenceStateAsk) {
        setText(QString(QLatin1String("%1 (%2) (awaiting approval)")).arg(mContact->id()).arg(status));
    // The contact asked to see my presence
    } else if (mContact->publishState() == Contact::PresenceStateAsk) {
        setText(QString(QLatin1String("%1 (%2) (pending approval)")).arg(mContact->id()).arg(status));
    } else if (mContact->subscriptionState() == Contact::PresenceStateNo &&
               mContact->publishState() == Contact::PresenceStateNo) {
        setText(QString(QLatin1String("%1 (unknown)")).arg(mContact->id()));
    } else {
        setText(QString(QLatin1String("%1 (%2)")).arg(mContact->id()).arg(status));
    }

    if (mContact->isBlocked()) {
        setText(QString(QLatin1String("%1 (blocked)")).arg(text()));
    }

    emit changed();
}


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00077.html0000644000175200001440000002172212000060453021627 0ustar00collabora-develusers00000000000000 Tp::Callback7< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 > Class Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Callback7< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 > Class Template Reference

Callback with 7 arguments. More...

#include <TelepathyQt/Callbacks>

Inherits Tp::BaseCallback.

List of all members.

Public Types

Public Member Functions


Detailed Description

template<class R, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7>
class Tp::Callback7< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >

Callback with 7 arguments.

See Callbacks Usage


Member Typedef Documentation

template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 , class Arg6 , class Arg7 >
typedef R(* Tp::Callback7< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >::FunctionType)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7)
template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 , class Arg6 , class Arg7 >
typedef R Tp::Callback7< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >::ResultType

Constructor & Destructor Documentation

template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 , class Arg6 , class Arg7 >
Tp::Callback7< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >::Callback7 ( ) [inline]
template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 , class Arg6 , class Arg7 >
template<class Functor >
Tp::Callback7< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >::Callback7 ( const Functor &  functor) [inline]

Member Function Documentation

template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 , class Arg6 , class Arg7 >
ResultType Tp::Callback7< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >::operator() ( Arg1  a1,
Arg2  a2,
Arg3  a3,
Arg4  a4,
Arg5  a5,
Arg6  a6,
Arg7  a7 
) const [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00068.html0000644000175200001440000002613112000060453021626 0ustar00collabora-develusers00000000000000 Tp::BaseProtocolPresenceInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

Base class for implementations of Protocol.Interface.Presence. More...

#include <TelepathyQt/BaseProtocolPresenceInterface>

Inherits Tp::AbstractProtocolInterface.

List of all members.

Public Member Functions

Static Public Member Functions

  • static
    BaseProtocolPresenceInterfacePtr create ()
  • template<typename BaseProtocolPresenceInterfaceSubclass > static SharedPtr
    < BaseProtocolPresenceInterfaceSubclass > create ()

Protected Member Functions


Detailed Description

Base class for implementations of Protocol.Interface.Presence.


Constructor & Destructor Documentation


Member Function Documentation

static BaseProtocolPresenceInterfacePtr Tp::BaseProtocolPresenceInterface::create ( ) [inline, static]
template<typename BaseProtocolPresenceInterfaceSubclass >
static SharedPtr<BaseProtocolPresenceInterfaceSubclass> Tp::BaseProtocolPresenceInterface::create ( ) [inline, static]

Return the immutable properties of this interface.

Immutable properties cannot change after the interface has been registered on a service on the bus with registerInterface().

Returns:
The immutable properties of this interface.

Implements Tp::AbstractDBusServiceInterface.

Return the list of presence statuses that have been set with setStatuses().

This list is exposed as the Statuses property of this interface on the bus and represents the statuses that might appear in the Connection.Interface.SimplePresence.Statuses property on a connection to this protocol that supports SimplePresence.

This property is immutable and cannot change after this interface has been registered on an object on the bus with registerInterface().

Returns:
The list of presence statuses that have been set with setStatuses().
See also:
setStatuses()

Set the list of statuses that might appear in the Connection.Interface.SimplePresence.Statuses property on a connection to this protocol that supports SimplePresence.

This property is immutable and cannot change after this interface has been registered on an object on the bus with registerInterface().

Parameters:
statusesThe statuses list to set.
See also:
statuses()


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01098.html0000644000175200001440000002027612000060453021636 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelInterfaceServicePointInterface Member List
This is the complete list of members for Tp::Client::ChannelInterfaceServicePointInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ChannelInterfaceServicePointInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfaceServicePointInterface
ChannelInterfaceServicePointInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfaceServicePointInterface
ChannelInterfaceServicePointInterface(Tp::DBusProxy *proxy)Tp::Client::ChannelInterfaceServicePointInterface
ChannelInterfaceServicePointInterface(const Tp::Client::ChannelInterface &mainInterface)Tp::Client::ChannelInterfaceServicePointInterface [explicit]
ChannelInterfaceServicePointInterface(const Tp::Client::ChannelInterface &mainInterface, QObject *parent)Tp::Client::ChannelInterfaceServicePointInterface
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ChannelInterfaceServicePointInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ChannelInterfaceServicePointInterface [inline]
requestPropertyCurrentServicePoint() const Tp::Client::ChannelInterfaceServicePointInterface [inline]
requestPropertyInitialServicePoint() const Tp::Client::ChannelInterfaceServicePointInterface [inline]
ServicePointChanged(const Tp::ServicePoint &servicePoint)Tp::Client::ChannelInterfaceServicePointInterface [signal]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ChannelInterfaceServicePointInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00806.html0000644000175200001440000001116512000060453021627 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Callback3< R, Arg1, Arg2, Arg3 > Member List
This is the complete list of members for Tp::Callback3< R, Arg1, Arg2, Arg3 >, including all inherited members.
BaseCallback()Tp::BaseCallback [inline]
BaseCallback(AbstractFunctorCaller *caller)Tp::BaseCallback [inline]
BaseCallback(const BaseCallback &other)Tp::BaseCallback [inline]
Callback3()Tp::Callback3< R, Arg1, Arg2, Arg3 > [inline]
Callback3(const Functor &functor)Tp::Callback3< R, Arg1, Arg2, Arg3 > [inline]
callerTp::BaseCallback [protected]
FunctionType typedefTp::Callback3< R, Arg1, Arg2, Arg3 >
isValid() const Tp::BaseCallback [inline]
operator()(Arg1 a1, Arg2 a2, Arg3 a3) const Tp::Callback3< R, Arg1, Arg2, Arg3 > [inline]
operator=(const BaseCallback &other)Tp::BaseCallback [inline]
ResultType typedefTp::Callback3< R, Arg1, Arg2, Arg3 >
~BaseCallback()Tp::BaseCallback [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01136.html0000644000175200001440000001774012000060453021631 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceContactsInterface Member List
This is the complete list of members for Tp::Client::ConnectionInterfaceContactsInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ConnectionInterfaceContactsInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceContactsInterface
ConnectionInterfaceContactsInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceContactsInterface
ConnectionInterfaceContactsInterface(Tp::DBusProxy *proxy)Tp::Client::ConnectionInterfaceContactsInterface
ConnectionInterfaceContactsInterface(const Tp::Client::ConnectionInterface &mainInterface)Tp::Client::ConnectionInterfaceContactsInterface [explicit]
ConnectionInterfaceContactsInterface(const Tp::Client::ConnectionInterface &mainInterface, QObject *parent)Tp::Client::ConnectionInterfaceContactsInterface
GetContactAttributes(const Tp::UIntList &handles, const QStringList &interfaces, bool hold, int timeout=-1)Tp::Client::ConnectionInterfaceContactsInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ConnectionInterfaceContactsInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ConnectionInterfaceContactsInterface [inline]
requestPropertyContactAttributeInterfaces() const Tp::Client::ConnectionInterfaceContactsInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ConnectionInterfaceContactsInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00221.html0000644000175200001440000001210212000060453021606 0ustar00collabora-develusers00000000000000 Tp::DBusTubeParticipants Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::DBusTubeParticipants Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<uint, QString>, but needed to have a discrete type in the Qt type system.

Represents the participants in a multi-user D-Bus tube, as used by the DBusNames property and the DBusNamesChanged signal.


Constructor & Destructor Documentation

Tp::DBusTubeParticipants::DBusTubeParticipants ( const QMap< uint, QString > &  a) [inline]

Member Function Documentation

DBusTubeParticipants& Tp::DBusTubeParticipants::operator= ( const QMap< uint, QString > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_eval.html0000644000175200001440000001340712000060453024031 0ustar00collabora-develusers00000000000000 Class Members - Enumerator
   Home · All Classes · All Namespaces · Modules · Functions · Files
 


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00880.html0000644000175200001440000001642612000060453021636 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::LocationInfo Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00670_source.html0000644000175200001440000004570312000060453023213 0ustar00collabora-develusers00000000000000 profile.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
profile.h
00001 
00023 #ifndef _TelepathyQt_profile_h_HEADER_GUARD_
00024 #define _TelepathyQt_profile_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/RequestableChannelClassSpec>
00031 #include <TelepathyQt/Types>
00032 
00033 #include <QDBusSignature>
00034 #include <QObject>
00035 #include <QString>
00036 #include <QVariant>
00037 
00038 namespace Tp
00039 {
00040 
00041 class ProtocolInfo;
00042 
00043 class TP_QT_EXPORT Profile : public RefCounted
00044 {
00045     Q_DISABLE_COPY(Profile);
00046 
00047 public:
00048     static ProfilePtr createForServiceName(const QString &serviceName);
00049     static ProfilePtr createForFileName(const QString &fileName);
00050 
00051     ~Profile();
00052 
00053     QString serviceName() const;
00054 
00055     bool isValid() const;
00056 
00057     bool isFake() const;
00058 
00059     QString type() const;
00060     QString provider() const;
00061     QString name() const;
00062     QString iconName() const;
00063     QString cmName() const;
00064     QString protocolName() const;
00065 
00066     class Parameter
00067     {
00068     public:
00069         Parameter();
00070         Parameter(const Parameter &other);
00071         Parameter(const QString &name,
00072                   const QDBusSignature &dbusSignature,
00073                   const QVariant &value,
00074                   const QString &label,
00075                   bool mandatory);
00076         ~Parameter();
00077 
00078         QString name() const;
00079         QDBusSignature dbusSignature() const;
00080         QVariant::Type type() const;
00081         QVariant value() const;
00082         QString label() const;
00083 
00084         bool isMandatory() const;
00085 
00086         // TODO Add matches(Tp::Presence) method
00087 
00088         Parameter &operator=(const Parameter &other);
00089 
00090     private:
00091         friend class Profile;
00092 
00093         TP_QT_NO_EXPORT void setName(const QString &name);
00094         TP_QT_NO_EXPORT void setDBusSignature(const QDBusSignature &dbusSignature);
00095         TP_QT_NO_EXPORT void setValue(const QVariant &value);
00096         TP_QT_NO_EXPORT void setLabel(const QString &label);
00097         TP_QT_NO_EXPORT void setMandatory(bool mandatory);
00098 
00099         struct Private;
00100         friend struct Private;
00101         Private *mPriv;
00102     };
00103     typedef QList<Parameter> ParameterList;
00104 
00105     ParameterList parameters() const;
00106     bool hasParameter(const QString &name) const;
00107     Parameter parameter(const QString &name) const;
00108 
00109     class Presence
00110     {
00111     public:
00112         Presence();
00113         Presence(const Presence &other);
00114         Presence(const QString &id,
00115                  const QString &label,
00116                  const QString &iconName,
00117                  const QString &message,
00118                  bool disabled);
00119         ~Presence();
00120 
00121         QString id() const;
00122         QString label() const;
00123         QString iconName() const;
00124         bool canHaveStatusMessage() const;
00125 
00126         bool isDisabled() const;
00127 
00128         Presence &operator=(const Presence &other);
00129 
00130     private:
00131         friend class Profile;
00132 
00133         TP_QT_NO_EXPORT void setId(const QString &id);
00134         TP_QT_NO_EXPORT void setLabel(const QString &label);
00135         TP_QT_NO_EXPORT void setIconName(const QString &iconName);
00136         TP_QT_NO_EXPORT void setMessage(const QString &message);
00137         TP_QT_NO_EXPORT void setDisabled(bool disabled);
00138 
00139         struct Private;
00140         friend struct Private;
00141         Private *mPriv;
00142     };
00143     typedef QList<Presence> PresenceList;
00144 
00145     bool allowOtherPresences() const;
00146     PresenceList presences() const;
00147     bool hasPresence(const QString &id) const;
00148     Presence presence(const QString &id) const;
00149 
00150     RequestableChannelClassSpecList unsupportedChannelClassSpecs() const;
00151 
00152 private:
00153     friend class Account;
00154     friend class ProfileManager;
00155 
00156     TP_QT_NO_EXPORT Profile();
00157     TP_QT_NO_EXPORT Profile(const QString &serviceName, const QString &cmName,
00158             const QString &protocolName, const ProtocolInfo &protocolInfo);
00159 
00160     TP_QT_NO_EXPORT void setServiceName(const QString &serviceName);
00161     TP_QT_NO_EXPORT void setFileName(const QString &fileName);
00162 
00163     TP_QT_NO_EXPORT static QStringList searchDirs();
00164 
00165     struct Private;
00166     friend struct Private;
00167     Private *mPriv;
00168 };
00169 
00170 } // Tp
00171 
00172 Q_DECLARE_METATYPE(Tp::Profile::Parameter);
00173 Q_DECLARE_METATYPE(Tp::Profile::Presence);
00174 
00175 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00397.html0000644000175200001440000001200012000060453021621 0ustar00collabora-develusers00000000000000 Tp::StatusSpecMap Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::StatusSpecMap Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<QString, StatusSpec>, but needed to have a discrete type in the Qt type system.


Constructor & Destructor Documentation

Tp::StatusSpecMap::StatusSpecMap ( const QMap< QString, StatusSpec > &  a) [inline]

Member Function Documentation

StatusSpecMap& Tp::StatusSpecMap::operator= ( const QMap< QString, StatusSpec > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01059.html0000644000175200001440000000522112000060453021624 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::RTCPFeedbackMessageMap Member List
This is the complete list of members for Tp::RTCPFeedbackMessageMap, including all inherited members.
operator=(const QMap< uint, RTCPFeedbackMessageProperties > &a)Tp::RTCPFeedbackMessageMap [inline]
RTCPFeedbackMessageMap()Tp::RTCPFeedbackMessageMap [inline]
RTCPFeedbackMessageMap(const QMap< uint, RTCPFeedbackMessageProperties > &a)Tp::RTCPFeedbackMessageMap [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00773.html0000644000175200001440000001266212000060453021635 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AbstractClientHandler Member List
This is the complete list of members for Tp::AbstractClientHandler, including all inherited members.
AbstractClient()Tp::AbstractClient
AbstractClientHandler(const ChannelClassSpecList &channelFilter, const Capabilities &capabilities=Capabilities(), bool wantsRequestNotification=false)Tp::AbstractClientHandler [protected]
addRequest(const ChannelRequestPtr &request)Tp::AbstractClientHandler [virtual]
bypassApproval() const =0Tp::AbstractClientHandler [pure virtual]
handleChannels(const MethodInvocationContextPtr<> &context, const AccountPtr &account, const ConnectionPtr &connection, const QList< ChannelPtr > &channels, const QList< ChannelRequestPtr > &requestsSatisfied, const QDateTime &userActionTime, const HandlerInfo &handlerInfo)=0Tp::AbstractClientHandler [pure virtual]
handlerCapabilities() const Tp::AbstractClientHandler
handlerFilter() const Tp::AbstractClientHandler
isRegistered() const Tp::AbstractClient
RefCounted()Tp::RefCounted [inline]
removeRequest(const ChannelRequestPtr &request, const QString &errorName, const QString &errorMessage)Tp::AbstractClientHandler [virtual]
wantsRequestNotification() const Tp::AbstractClientHandler
~AbstractClient()Tp::AbstractClient [virtual]
~AbstractClientHandler()Tp::AbstractClientHandler [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01037.html0000644000175200001440000000557612000060453021635 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::TubeInfo Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00060.html0000644000175200001440000002274312000060453021623 0ustar00collabora-develusers00000000000000 Tp::BaseCallback Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

Base class for all the callback classes. More...

#include <TelepathyQt/Callbacks>

Inherited by Tp::Callback2< BaseConnectionPtr, const QVariantMap &, DBusError * >, Tp::Callback2< QString, const QString &, DBusError * >, Tp::Callback2< QString, const QVariantMap &, DBusError * >, Tp::Callback3< QString, const QString &, const QString &, DBusError * >, Tp::Callback0< R >, Tp::Callback1< R, Arg1 >, Tp::Callback2< R, Arg1, Arg2 >, Tp::Callback3< R, Arg1, Arg2, Arg3 >, Tp::Callback4< R, Arg1, Arg2, Arg3, Arg4 >, Tp::Callback5< R, Arg1, Arg2, Arg3, Arg4, Arg5 >, Tp::Callback6< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >, and Tp::Callback7< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >.

List of all members.

Public Member Functions

Protected Attributes


Detailed Description

Base class for all the callback classes.

See Callbacks Usage


Constructor & Destructor Documentation

Tp::BaseCallback::BaseCallback ( const BaseCallback other) [inline]
virtual Tp::BaseCallback::~BaseCallback ( ) [inline, virtual]

Member Function Documentation

bool Tp::BaseCallback::isValid ( ) const [inline]

Return whether this callback object has a valid functor assigned to it or if it's a default-constructed dummy callback object.

Returns:
false if this is a default-constructed callback or true if this callback was constructed from a functor.
BaseCallback& Tp::BaseCallback::operator= ( const BaseCallback other) [inline]

Member Data Documentation


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01008.html0000644000175200001440000000511312000060453021616 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MultipleStatusMap Member List
This is the complete list of members for Tp::MultipleStatusMap, including all inherited members.
MultipleStatusMap()Tp::MultipleStatusMap [inline]
MultipleStatusMap(const QMap< QString, QVariantMap > &a)Tp::MultipleStatusMap [inline]
operator=(const QMap< QString, QVariantMap > &a)Tp::MultipleStatusMap [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00795.html0000644000175200001440000003431712000060453021642 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::CallStream Member List
This is the complete list of members for Tp::CallStream, including all inherited members.
actualFeatures() const Tp::ReadyObject [virtual]
becomeReady(const Features &requestedFeatures=Features())Tp::ReadyObject [virtual]
busName() const Tp::DBusProxy
BypassInterfaceCheck enum valueTp::OptionalInterfaceFactory< CallStream >
canRequestReceiving() const Tp::CallStream
CheckInterfaceSupported enum valueTp::OptionalInterfaceFactory< CallStream >
content() const Tp::CallStream
dbusConnection() const Tp::DBusProxy
DBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::DBusProxy
hasInterface(const QString &name) constTp::OptionalInterfaceFactory< CallStream > [inline]
interface() constTp::OptionalInterfaceFactory< CallStream > [inline]
interfaces() constTp::OptionalInterfaceFactory< CallStream > [inline]
InterfaceSupportedChecking enum nameTp::OptionalInterfaceFactory< CallStream >
invalidate(const QString &reason, const QString &message)Tp::DBusProxy [protected]
invalidate(const QDBusError &error)Tp::DBusProxy [protected]
invalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage)Tp::DBusProxy [signal]
invalidationMessage() const Tp::DBusProxy
invalidationReason() const Tp::DBusProxy
isReady(const Features &features=Features()) const Tp::ReadyObject [virtual]
isValid() const Tp::DBusProxy
localSendingState() const Tp::CallStream
localSendingStateChanged(Tp::SendingState localSendingState, const Tp::CallStateReason &reason)Tp::CallStream [signal]
missingFeatures() const Tp::ReadyObject [virtual]
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
objectPath() const Tp::DBusProxy
optionalInterface(InterfaceSupportedChecking check=CheckInterfaceSupported) constTp::OptionalInterfaceFactory< CallStream > [inline]
OptionalInterfaceFactory(CallStream *this_)Tp::OptionalInterfaceFactory< CallStream > [inline]
propertyChanged(const QString &propertyName)Tp::Object [signal]
readinessHelper() const Tp::ReadyObject [protected]
ReadyObject(RefCounted *object, const Feature &featureCore)Tp::ReadyObject
ReadyObject(DBusProxy *proxy, const Feature &featureCore)Tp::ReadyObject
RefCounted()Tp::RefCounted [inline]
remoteMembers() const Tp::CallStream
remoteMembersRemoved(const Tp::Contacts &remoteMembers, const Tp::CallStateReason &reason)Tp::CallStream [signal]
remoteSendingState(const ContactPtr &contact) const Tp::CallStream
remoteSendingStateChanged(const QHash< Tp::ContactPtr, Tp::SendingState > &remoteSendingStates, const Tp::CallStateReason &reason)Tp::CallStream [signal]
requestedFeatures() const Tp::ReadyObject [virtual]
requestReceiving(const ContactPtr &contact, bool receive)Tp::CallStream
requestSending(bool send)Tp::CallStream
setBusName(const QString &busName)Tp::DBusProxy [protected]
setInterfaces(const QStringList &interfaces)Tp::OptionalInterfaceFactory< CallStream > [inline, protected]
StatefulDBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::StatefulDBusProxy
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique)Tp::StatefulDBusProxy [static]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique, QString &error, QString &message)Tp::StatefulDBusProxy [static]
~CallStream()Tp::CallStream
~DBusProxy()Tp::DBusProxy [virtual]
~Object()Tp::Object [virtual]
~OptionalInterfaceFactory()Tp::OptionalInterfaceFactory< CallStream > [inline]
~ReadyObject()Tp::ReadyObject [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]
~StatefulDBusProxy()Tp::StatefulDBusProxy [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_vars_0x6b.html0000644000175200001440000000300412000060453024704 0ustar00collabora-develusers00000000000000 Class Members - Variables
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- k -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01112.html0000644000175200001440000001532212000060453021615 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ClientInterface Member List
This is the complete list of members for Tp::Client::ClientInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ClientInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ClientInterface
ClientInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ClientInterface
ClientInterface(Tp::DBusProxy *proxy)Tp::Client::ClientInterface
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ClientInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ClientInterface [inline]
requestPropertyInterfaces() const Tp::Client::ClientInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ClientInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00015.html0000644000175200001440000000624512000060453021622 0ustar00collabora-develusers00000000000000 protocols/cm-wrapper.h
   Home · All Classes · All Namespaces · Modules · Functions · Files
protocols/cm-wrapper.h
#ifndef _TelepathyQt_examples_protocols_cm_wrapper_h_HEADER_GUARD_
#define _TelepathyQt_examples_protocols_cm_wrapper_h_HEADER_GUARD_

#include <TelepathyQt/Types>

#include <QObject>
#include <QString>

using namespace Tp;

namespace Tp
{
class ConnectionManager;
class PendingOperation;
}

class CMWrapper : public QObject
{
    Q_OBJECT

public:
   CMWrapper(const QString &cmName, QObject *parent = 0);
   ~CMWrapper();

   ConnectionManagerPtr cm() const;

Q_SIGNALS:
   void finished();

private Q_SLOTS:
    void onCMReady(Tp::PendingOperation *op);

private:
    ConnectionManagerPtr mCM;
};

#endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00798.html0000644000175200001440000000657712000060453021654 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::BaseCallback Member List
This is the complete list of members for Tp::BaseCallback, including all inherited members.
BaseCallback()Tp::BaseCallback [inline]
BaseCallback(AbstractFunctorCaller *caller)Tp::BaseCallback [inline]
BaseCallback(const BaseCallback &other)Tp::BaseCallback [inline]
callerTp::BaseCallback [protected]
isValid() const Tp::BaseCallback [inline]
operator=(const BaseCallback &other)Tp::BaseCallback [inline]
~BaseCallback()Tp::BaseCallback [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00490_source.html0000644000175200001440000014674112000060453023217 0ustar00collabora-develusers00000000000000 cli-call-content.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-call-content.h
00001 /*
00002  * This file contains D-Bus client proxy classes generated by qt-client-gen.py.
00003  *
00004  * This file can be distributed under the same terms as the specification from
00005  * which it was generated.
00006  */
00007 
00008 #ifndef IN_TP_QT_HEADER
00009 #error IN_TP_QT_HEADER
00010 #endif
00011 
00012 #include <TelepathyQt/Types>
00013 
00014 #include <QtGlobal>
00015 
00016 #include <QString>
00017 #include <QObject>
00018 #include <QVariant>
00019 
00020 #include <QDBusPendingReply>
00021 
00022 #include <TelepathyQt/AbstractInterface>
00023 #include <TelepathyQt/DBusProxy>
00024 #include <TelepathyQt/Global>
00025 
00026 namespace Tp
00027 {
00028 class PendingVariant;
00029 class PendingOperation;
00030 }
00031 
00032 namespace Tp
00033 {
00034 namespace Client
00035 {
00036 
00044 class TP_QT_EXPORT CallContentInterface : public Tp::AbstractInterface
00045 {
00046     Q_OBJECT
00047 
00048 public:
00055     static inline QLatin1String staticInterfaceName()
00056     {
00057         return QLatin1String("org.freedesktop.Telepathy.Call1.Content");
00058     }
00059 
00067     CallContentInterface(
00068         const QString& busName,
00069         const QString& objectPath,
00070         QObject* parent = 0
00071     );
00072 
00081     CallContentInterface(
00082         const QDBusConnection& connection,
00083         const QString& busName,
00084         const QString& objectPath,
00085         QObject* parent = 0
00086     );
00087 
00094     CallContentInterface(Tp::DBusProxy *proxy);
00095 
00111     inline Tp::PendingVariant *requestPropertyInterfaces() const
00112     {
00113         return internalRequestProperty(QLatin1String("Interfaces"));
00114     }
00115 
00135     inline Tp::PendingVariant *requestPropertyName() const
00136     {
00137         return internalRequestProperty(QLatin1String("Name"));
00138     }
00139 
00151     inline Tp::PendingVariant *requestPropertyType() const
00152     {
00153         return internalRequestProperty(QLatin1String("Type"));
00154     }
00155 
00165     inline Tp::PendingVariant *requestPropertyDisposition() const
00166     {
00167         return internalRequestProperty(QLatin1String("Disposition"));
00168     }
00169 
00195     inline Tp::PendingVariant *requestPropertyStreams() const
00196     {
00197         return internalRequestProperty(QLatin1String("Streams"));
00198     }
00199 
00206     Tp::PendingVariantMap *requestAllProperties() const
00207     {
00208         return internalRequestAllProperties();
00209     }
00210 
00211 public Q_SLOTS:
00224     inline QDBusPendingReply<> Remove(int timeout = -1)
00225     {
00226         if (!invalidationReason().isEmpty()) {
00227             return QDBusPendingReply<>(QDBusMessage::createError(
00228                 invalidationReason(),
00229                 invalidationMessage()
00230             ));
00231         }
00232 
00233         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00234                 this->staticInterfaceName(), QLatin1String("Remove"));
00235         return this->connection().asyncCall(callMessage, timeout);
00236     }
00237 
00238 Q_SIGNALS:
00250     void StreamsAdded(const Tp::ObjectPathList& streams);
00251 
00267     void StreamsRemoved(const Tp::ObjectPathList& streams, const Tp::CallStateReason& reason);
00268 
00269 protected:
00270     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
00271 };
00272 
00280 class TP_QT_EXPORT CallContentInterfaceAudioControlInterface : public Tp::AbstractInterface
00281 {
00282     Q_OBJECT
00283 
00284 public:
00291     static inline QLatin1String staticInterfaceName()
00292     {
00293         return QLatin1String("org.freedesktop.Telepathy.Call1.Content.Interface.AudioControl");
00294     }
00295 
00303     CallContentInterfaceAudioControlInterface(
00304         const QString& busName,
00305         const QString& objectPath,
00306         QObject* parent = 0
00307     );
00308 
00317     CallContentInterfaceAudioControlInterface(
00318         const QDBusConnection& connection,
00319         const QString& busName,
00320         const QString& objectPath,
00321         QObject* parent = 0
00322     );
00323 
00330     CallContentInterfaceAudioControlInterface(Tp::DBusProxy *proxy);
00331 
00339     explicit CallContentInterfaceAudioControlInterface(const Tp::Client::CallContentInterface& mainInterface);
00340 
00348     CallContentInterfaceAudioControlInterface(const Tp::Client::CallContentInterface& mainInterface, QObject* parent);
00349 
00361     inline Tp::PendingVariant *requestPropertyRequestedInputVolume() const
00362     {
00363         return internalRequestProperty(QLatin1String("RequestedInputVolume"));
00364     }
00365 
00377     inline Tp::PendingVariant *requestPropertyRequestedOutputVolume() const
00378     {
00379         return internalRequestProperty(QLatin1String("RequestedOutputVolume"));
00380     }
00381 
00388     Tp::PendingVariantMap *requestAllProperties() const
00389     {
00390         return internalRequestAllProperties();
00391     }
00392 
00393 public Q_SLOTS:
00411     inline QDBusPendingReply<> ReportInputVolume(int volume, int timeout = -1)
00412     {
00413         if (!invalidationReason().isEmpty()) {
00414             return QDBusPendingReply<>(QDBusMessage::createError(
00415                 invalidationReason(),
00416                 invalidationMessage()
00417             ));
00418         }
00419 
00420         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00421                 this->staticInterfaceName(), QLatin1String("ReportInputVolume"));
00422         callMessage << QVariant::fromValue(volume);
00423         return this->connection().asyncCall(callMessage, timeout);
00424     }
00425 
00443     inline QDBusPendingReply<> ReportOutputVolume(int volume, int timeout = -1)
00444     {
00445         if (!invalidationReason().isEmpty()) {
00446             return QDBusPendingReply<>(QDBusMessage::createError(
00447                 invalidationReason(),
00448                 invalidationMessage()
00449             ));
00450         }
00451 
00452         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00453                 this->staticInterfaceName(), QLatin1String("ReportOutputVolume"));
00454         callMessage << QVariant::fromValue(volume);
00455         return this->connection().asyncCall(callMessage, timeout);
00456     }
00457 
00458 protected:
00459     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
00460 };
00461 
00469 class TP_QT_EXPORT CallContentInterfaceDTMFInterface : public Tp::AbstractInterface
00470 {
00471     Q_OBJECT
00472 
00473 public:
00480     static inline QLatin1String staticInterfaceName()
00481     {
00482         return QLatin1String("org.freedesktop.Telepathy.Call1.Content.Interface.DTMF");
00483     }
00484 
00492     CallContentInterfaceDTMFInterface(
00493         const QString& busName,
00494         const QString& objectPath,
00495         QObject* parent = 0
00496     );
00497 
00506     CallContentInterfaceDTMFInterface(
00507         const QDBusConnection& connection,
00508         const QString& busName,
00509         const QString& objectPath,
00510         QObject* parent = 0
00511     );
00512 
00519     CallContentInterfaceDTMFInterface(Tp::DBusProxy *proxy);
00520 
00528     explicit CallContentInterfaceDTMFInterface(const Tp::Client::CallContentInterface& mainInterface);
00529 
00537     CallContentInterfaceDTMFInterface(const Tp::Client::CallContentInterface& mainInterface, QObject* parent);
00538 
00550     inline Tp::PendingVariant *requestPropertyCurrentlySendingTones() const
00551     {
00552         return internalRequestProperty(QLatin1String("CurrentlySendingTones"));
00553     }
00554 
00572     inline Tp::PendingVariant *requestPropertyDeferredTones() const
00573     {
00574         return internalRequestProperty(QLatin1String("DeferredTones"));
00575     }
00576 
00583     Tp::PendingVariantMap *requestAllProperties() const
00584     {
00585         return internalRequestAllProperties();
00586     }
00587 
00588 public Q_SLOTS:
00612     inline QDBusPendingReply<> StartTone(uchar event, int timeout = -1)
00613     {
00614         if (!invalidationReason().isEmpty()) {
00615             return QDBusPendingReply<>(QDBusMessage::createError(
00616                 invalidationReason(),
00617                 invalidationMessage()
00618             ));
00619         }
00620 
00621         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00622                 this->staticInterfaceName(), QLatin1String("StartTone"));
00623         callMessage << QVariant::fromValue(event);
00624         return this->connection().asyncCall(callMessage, timeout);
00625     }
00626 
00642     inline QDBusPendingReply<> StopTone(int timeout = -1)
00643     {
00644         if (!invalidationReason().isEmpty()) {
00645             return QDBusPendingReply<>(QDBusMessage::createError(
00646                 invalidationReason(),
00647                 invalidationMessage()
00648             ));
00649         }
00650 
00651         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00652                 this->staticInterfaceName(), QLatin1String("StopTone"));
00653         return this->connection().asyncCall(callMessage, timeout);
00654     }
00655 
00701     inline QDBusPendingReply<> MultipleTones(const QString& tones, int timeout = -1)
00702     {
00703         if (!invalidationReason().isEmpty()) {
00704             return QDBusPendingReply<>(QDBusMessage::createError(
00705                 invalidationReason(),
00706                 invalidationMessage()
00707             ));
00708         }
00709 
00710         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00711                 this->staticInterfaceName(), QLatin1String("MultipleTones"));
00712         callMessage << QVariant::fromValue(tones);
00713         return this->connection().asyncCall(callMessage, timeout);
00714     }
00715 
00716 Q_SIGNALS:
00743     void TonesDeferred(const QString& tones);
00744 
00761     void SendingTones(const QString& tones);
00762 
00774     void StoppedTones(bool cancelled);
00775 
00776 protected:
00777     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
00778 };
00779 
00787 class TP_QT_EXPORT CallContentInterfaceMediaInterface : public Tp::AbstractInterface
00788 {
00789     Q_OBJECT
00790 
00791 public:
00798     static inline QLatin1String staticInterfaceName()
00799     {
00800         return QLatin1String("org.freedesktop.Telepathy.Call1.Content.Interface.Media");
00801     }
00802 
00810     CallContentInterfaceMediaInterface(
00811         const QString& busName,
00812         const QString& objectPath,
00813         QObject* parent = 0
00814     );
00815 
00824     CallContentInterfaceMediaInterface(
00825         const QDBusConnection& connection,
00826         const QString& busName,
00827         const QString& objectPath,
00828         QObject* parent = 0
00829     );
00830 
00837     CallContentInterfaceMediaInterface(Tp::DBusProxy *proxy);
00838 
00846     explicit CallContentInterfaceMediaInterface(const Tp::Client::CallContentInterface& mainInterface);
00847 
00855     CallContentInterfaceMediaInterface(const Tp::Client::CallContentInterface& mainInterface, QObject* parent);
00856 
00869     inline Tp::PendingVariant *requestPropertyRemoteMediaDescriptions() const
00870     {
00871         return internalRequestProperty(QLatin1String("RemoteMediaDescriptions"));
00872     }
00873 
00884     inline Tp::PendingVariant *requestPropertyLocalMediaDescriptions() const
00885     {
00886         return internalRequestProperty(QLatin1String("LocalMediaDescriptions"));
00887     }
00888 
00917     inline Tp::PendingVariant *requestPropertyMediaDescriptionOffer() const
00918     {
00919         return internalRequestProperty(QLatin1String("MediaDescriptionOffer"));
00920     }
00921 
00933     inline Tp::PendingVariant *requestPropertyPacketization() const
00934     {
00935         return internalRequestProperty(QLatin1String("Packetization"));
00936     }
00937 
00948     inline Tp::PendingVariant *requestPropertyCurrentDTMFEvent() const
00949     {
00950         return internalRequestProperty(QLatin1String("CurrentDTMFEvent"));
00951     }
00952 
00963     inline Tp::PendingVariant *requestPropertyCurrentDTMFState() const
00964     {
00965         return internalRequestProperty(QLatin1String("CurrentDTMFState"));
00966     }
00967 
00974     Tp::PendingVariantMap *requestAllProperties() const
00975     {
00976         return internalRequestAllProperties();
00977     }
00978 
00979 public Q_SLOTS:
01000     inline QDBusPendingReply<> UpdateLocalMediaDescription(const QVariantMap& mediaDescription, int timeout = -1)
01001     {
01002         if (!invalidationReason().isEmpty()) {
01003             return QDBusPendingReply<>(QDBusMessage::createError(
01004                 invalidationReason(),
01005                 invalidationMessage()
01006             ));
01007         }
01008 
01009         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
01010                 this->staticInterfaceName(), QLatin1String("UpdateLocalMediaDescription"));
01011         callMessage << QVariant::fromValue(mediaDescription);
01012         return this->connection().asyncCall(callMessage, timeout);
01013     }
01014 
01036     inline QDBusPendingReply<> AcknowledgeDTMFChange(uchar event, uint state, int timeout = -1)
01037     {
01038         if (!invalidationReason().isEmpty()) {
01039             return QDBusPendingReply<>(QDBusMessage::createError(
01040                 invalidationReason(),
01041                 invalidationMessage()
01042             ));
01043         }
01044 
01045         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
01046                 this->staticInterfaceName(), QLatin1String("AcknowledgeDTMFChange"));
01047         callMessage << QVariant::fromValue(event) << QVariant::fromValue(state);
01048         return this->connection().asyncCall(callMessage, timeout);
01049     }
01050 
01065     inline QDBusPendingReply<> Fail(const Tp::CallStateReason& reason, int timeout = -1)
01066     {
01067         if (!invalidationReason().isEmpty()) {
01068             return QDBusPendingReply<>(QDBusMessage::createError(
01069                 invalidationReason(),
01070                 invalidationMessage()
01071             ));
01072         }
01073 
01074         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
01075                 this->staticInterfaceName(), QLatin1String("Fail"));
01076         callMessage << QVariant::fromValue(reason);
01077         return this->connection().asyncCall(callMessage, timeout);
01078     }
01079 
01080 Q_SIGNALS:
01112     void NewMediaDescriptionOffer(const QDBusObjectPath& mediaDescription, const QVariantMap& properties);
01113 
01125     void MediaDescriptionOfferDone();
01126 
01142     void LocalMediaDescriptionChanged(const QVariantMap& updatedMediaDescription);
01143 
01159     void RemoteMediaDescriptionsChanged(const Tp::ContactMediaDescriptionPropertiesMap& updatedMediaDescriptions);
01160 
01179     void MediaDescriptionsRemoved(const Tp::UIntList& removedMediaDescriptions);
01180 
01198     void DTMFChangeRequested(uchar event, uint state);
01199 
01200 protected:
01201     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
01202 };
01203 
01211 class TP_QT_EXPORT CallContentInterfaceVideoControlInterface : public Tp::AbstractInterface
01212 {
01213     Q_OBJECT
01214 
01215 public:
01222     static inline QLatin1String staticInterfaceName()
01223     {
01224         return QLatin1String("org.freedesktop.Telepathy.Call1.Content.Interface.VideoControl");
01225     }
01226 
01234     CallContentInterfaceVideoControlInterface(
01235         const QString& busName,
01236         const QString& objectPath,
01237         QObject* parent = 0
01238     );
01239 
01248     CallContentInterfaceVideoControlInterface(
01249         const QDBusConnection& connection,
01250         const QString& busName,
01251         const QString& objectPath,
01252         QObject* parent = 0
01253     );
01254 
01261     CallContentInterfaceVideoControlInterface(Tp::DBusProxy *proxy);
01262 
01270     explicit CallContentInterfaceVideoControlInterface(const Tp::Client::CallContentInterface& mainInterface);
01271 
01279     CallContentInterfaceVideoControlInterface(const Tp::Client::CallContentInterface& mainInterface, QObject* parent);
01280 
01291     inline Tp::PendingVariant *requestPropertyVideoResolution() const
01292     {
01293         return internalRequestProperty(QLatin1String("VideoResolution"));
01294     }
01295 
01306     inline Tp::PendingVariant *requestPropertyBitrate() const
01307     {
01308         return internalRequestProperty(QLatin1String("Bitrate"));
01309     }
01310 
01321     inline Tp::PendingVariant *requestPropertyFramerate() const
01322     {
01323         return internalRequestProperty(QLatin1String("Framerate"));
01324     }
01325 
01336     inline Tp::PendingVariant *requestPropertyMTU() const
01337     {
01338         return internalRequestProperty(QLatin1String("MTU"));
01339     }
01340 
01350     inline Tp::PendingVariant *requestPropertyManualKeyFrames() const
01351     {
01352         return internalRequestProperty(QLatin1String("ManualKeyFrames"));
01353     }
01354 
01361     Tp::PendingVariantMap *requestAllProperties() const
01362     {
01363         return internalRequestAllProperties();
01364     }
01365 
01366 Q_SIGNALS:
01373     void KeyFrameRequested();
01374 
01380     void VideoResolutionChanged(const Tp::VideoResolution& newResolution);
01381 
01387     void BitrateChanged(uint newBitrate);
01388 
01394     void FramerateChanged(uint newFramerate);
01395 
01401     void MTUChanged(uint newMTU);
01402 
01403 protected:
01404     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
01405 };
01406 }
01407 }
01408 Q_DECLARE_METATYPE(Tp::Client::CallContentInterface*)
01409 Q_DECLARE_METATYPE(Tp::Client::CallContentInterfaceAudioControlInterface*)
01410 Q_DECLARE_METATYPE(Tp::Client::CallContentInterfaceDTMFInterface*)
01411 Q_DECLARE_METATYPE(Tp::Client::CallContentInterfaceMediaInterface*)
01412 Q_DECLARE_METATYPE(Tp::Client::CallContentInterfaceVideoControlInterface*)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00969.html0000644000175200001440000000504512000060453021641 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::CaptchaAnswers Member List
This is the complete list of members for Tp::CaptchaAnswers, including all inherited members.
CaptchaAnswers()Tp::CaptchaAnswers [inline]
CaptchaAnswers(const QMap< uint, QString > &a)Tp::CaptchaAnswers [inline]
operator=(const QMap< uint, QString > &a)Tp::CaptchaAnswers [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00757.html0000644000175200001440000103677512000060453021653 0ustar00collabora-develusers00000000000000 Enumerated type constants
   Home · All Classes · All Namespaces · Modules · Functions · Files
Enumerated type constants

Enumerations

Variables


Detailed Description

Types generated from the specification representing enumerated types ie. types the values of which are mutually exclusive integral constants.


Enumeration Type Documentation

Enumerated type generated from the specification.

Enumerator:
HandleTypeNone 

A "null" handle type used to indicate the absence of a handle. When a handle type and a handle appear as a pair, if the handle type is zero, the handle must also be zero.

HandleTypeContact 

A contact

HandleTypeRoom 

A chat room

HandleTypeList 

A server-generated contact list (see Channel.Interface.Group)

HandleTypeGroup 

A user-defined contact list (see Channel.Interface.Group)

_HandleTypePadding 

Enumerated type generated from the specification.

Enumerator:
ConnectionStatusConnected 

The connection is fully connected and all methods are available.

ConnectionStatusConnecting 

Connect has been called but the connection has not yet been established. Some methods may fail until the connection has been established.

ConnectionStatusDisconnected 

If this is retrieved from GetStatus or Status, it indicates that connection has not yet been attempted. If seen in a StatusChanged signal, it indicates that the connection has failed; the Connection object SHOULD be removed from D-Bus immediately, and all subsequent method calls SHOULD fail.

_ConnectionStatusPadding 

Enumerated type generated from the specification.

A reason why the status of the connection changed. Apart from Requested, the values of this enumeration only make sense as reasons why the status changed to Disconnected.

Enumerator:
ConnectionStatusReasonNoneSpecified 

There is no reason set for this state change. Unknown status reasons SHOULD be treated like this reason.

When disconnected for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Disconnected.

ConnectionStatusReasonRequested 

The change is in response to a user request. Changes to the Connecting or Connected status SHOULD always indicate this reason; changes to the Disconnected status SHOULD indicate this reason if and only if the disconnection was requested by the user.

When disconnected for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Cancelled.

ConnectionStatusReasonNetworkError 

There was an error sending or receiving on the network socket.

When the status changes from Connecting to Disconnected for this reason, the equivalent D-Bus error is either org.freedesktop.Telepathy.Error.NetworkError, org.freedesktop.Telepathy.Error.ConnectionRefused, org.freedesktop.Telepathy.Error.ConnectionFailed or some more specific error.

When the status changes from Connected to Disconnected for this reason, the equivalent D-Bus error is either org.freedesktop.Telepathy.Error.NetworkError, org.freedesktop.Telepathy.Error.ConnectionLost or some more specific error.

ConnectionStatusReasonAuthenticationFailed 

The username or password was invalid.

When disconnected for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.AuthenticationFailed.

ConnectionStatusReasonEncryptionError 

There was an error negotiating SSL on this connection, or encryption was unavailable and require-encryption was set when the connection was created.

When disconnected for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.EncryptionNotAvailable if encryption was not available at all, or org.freedesktop.Telepathy.Error.EncryptionError if encryption failed.

ConnectionStatusReasonNameInUse 

In general, this reason indicates that the requested account name or other identification could not be used due to conflict with another connection. It can be divided into three cases:

  • If the status change is from Connecting to Disconnected and the 'register' parameter to RequestConnection was present and true, the requested account could not be created on the server because it already exists. The equivalent D-Bus error is org.freedesktop.Telepathy.Error.RegistrationExists.
  • If the status change is from Connecting to Disconnected but the 'register' parameter is absent or false, the connection manager could not connect to the specified account because a connection to that account already exists. The equivalent D-Bus error is org.freedesktop.Telepathy.Error.AlreadyConnected.
    In some protocols, like XMPP (when connecting with the same JID and resource as an existing connection), the existing connection "wins" and the new one fails to connect.
  • If the status change is from Connected to Disconnected, the existing connection was automatically disconnected because a new connection to the same account (perhaps from a different client or location) was established. The equivalent D-Bus error is org.freedesktop.Telepathy.Error.ConnectionReplaced.
    In some protocols, like MSNP (when connecting twice with the same Passport), the new connection "wins" and the existing one is automatically disconnected.
ConnectionStatusReasonCertNotProvided 

The server did not provide a SSL certificate.

When disconnected for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Cert.NotProvided.

ConnectionStatusReasonCertUntrusted 

The server's SSL certificate is signed by an untrusted certifying authority. This error SHOULD NOT be used to represent a self-signed certificate: use the more specific Cert_Self_Signed reason for that.

When disconnected for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Cert.Untrusted.

ConnectionStatusReasonCertExpired 

The server's SSL certificate has expired.

When disconnected for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Cert.Expired.

ConnectionStatusReasonCertNotActivated 

The server's SSL certificate is not yet valid.

When disconnected for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Cert.NotActivated.

ConnectionStatusReasonCertHostnameMismatch 

The server's SSL certificate did not match its hostname.

When disconnected for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Cert.HostnameMismatch.

ConnectionStatusReasonCertFingerprintMismatch 

The server's SSL certificate does not have the expected fingerprint.

When disconnected for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Cert.FingerprintMismatch.

ConnectionStatusReasonCertSelfSigned 

The server's SSL certificate is self-signed.

When disconnected for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Cert.SelfSigned.

ConnectionStatusReasonCertOtherError 

There was some other error validating the server's SSL certificate.

When disconnected for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Cert.Invalid.

ConnectionStatusReasonCertRevoked 

The server's SSL certificate has been revoked.

When disconnected for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Cert.Revoked.

ConnectionStatusReasonCertInsecure 

The server's SSL certificate uses an insecure algorithm, or is cryptographically weak.

When disconnected for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Cert.Insecure.

ConnectionStatusReasonCertLimitExceeded 

The length in bytes of the server certificate, or the depth of the sever certificate chain exceed the limits imposed by the crypto library.

When disconnected for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Cert.LimitExceeded

_ConnectionStatusReasonPadding 

Enumerated type generated from the specification.

The progress made in retrieving the contact list.

Enumerator:
ContactListStateNone 

The connection has not started to retrieve the contact list. If GetContactListAttributes is called in this state, it will raise NotYet.

ContactListStateWaiting 

The connection has started to retrieve the contact list, but has not yet succeeded or failed. If GetContactListAttributes is called in this state, it will raise NotYet.

ContactListStateFailure 

The connection has tried and failed to retrieve the contact list. If GetContactListAttributes is called in this state, it will immediately raise an error indicating the reason for failure. The connection manager SHOULD try again to obtain the contact list, if appropriate for the protocol. If it succeeds later, the ContactListState MUST advance to Success.

ContactListStateSuccess 

The connection has successfully retrieved the contact list. If GetContactListAttributes is called in this state, it will return successfully.

_ContactListStatePadding 

Enumerated type generated from the specification.

An enumeration indicating whether presence subscription is denied, denied but pending permission, or allowed. The exact semantics vary according to where this type is used: see the subscribe and publish contact attributes for details.

Enumerator:
SubscriptionStateUnknown 

The presence subscription state is unknown.

SubscriptionStateNo 

Presence information cannot be seen, and either the subscription state Removed_Remotely does not apply, or it is not known whether that state applies.

SubscriptionStateRemovedRemotely 

Presence information cannot be seen because the remote contact took action: either the local user's request to see the remote contact's presence was denied, or the remote contact requested to see the local user's presence but then cancelled their request.

SubscriptionStateAsk 

Presence information cannot be seen. Permission to see presence information has been requested, and the request has not yet been declined or accepted.

SubscriptionStateYes 

Presence information can be seen.

_SubscriptionStatePadding 

Enumerated type generated from the specification.

Values of this enumeration indicate the extent to which metadata such as aliases and group memberships can be stored for the contacts on a particular connection.

On some protocols, certain metadata (for instance, contact aliases) can only be stored for contacts on the contact list, or contacts with a particular contact list state.

To make it easier to deal with such protocols, if clients set metadata on a contact who is not in the required state, the Connection MUST cache the metadata for the duration of the session. If clients request the attributes of that contact after the appropriate "set" method has returned successfully, the Connection MUST return the new (cached) value.

If the contact is later placed in the required state to store metadata (for instance, if subscription to the contact's presence is requested, on a protocol like MSN where the alias has storage type Subscribed_Or_Pending), the connection MUST store the cached metadata at that time.

If the Connection didn't cache changes in this way, a client intending to change the alias on MSN would have to wait until the server acknowledged the subscription request; in the meantime, other clients would still display the old alias.

The only exception to that general rule is that if the Connection cannot store particular metadata at all (i.e. the storage type is None), it MUST reject attempts to set it.

If the implementation knows that metadata can't be stored at all, it's useful to report that, which can be done synchronously. In general, user interfaces should detect storage type None and not display editing controls at all.

Enumerator:
ContactMetadataStorageTypeNone 

This connection cannot store this type of metadata at all, and attempting to do so will fail with NotImplemented.

Link-local XMPP can't store aliases or group memberships at all, and subscription and presence states are implicit (all contacts on the local network have subscribe = publish = Yes and no other contacts exist).

As of April 2010, the XMPP server for Facebook Chat provides a read-only view of the user's Facebook contacts, so it could also usefully have this storage type.

ContactMetadataStorageTypeSubscribedOrPending 

This type of metadata can only be stored permanently for contacts whose subscribe attribute is Ask or Yes.

Contact aliases and groups on MSN have this behaviour.

ContactMetadataStorageTypeSubscribed 

This type of metadata can only be stored permanently for contacts whose subscribe attribute is Yes.

No service with this behaviour is currently known, but it's a stricter form of Subscribed_Or_Pending.

ContactMetadataStorageTypeAnyone 

The user can set this metadata for any valid contact identifier, whether or not they have any presence subscription relationship to it, and it will be stored on their contact list.

Contact aliases and groups on XMPP have this behaviour; it is possible to put a contact in a group, or assign an alias to them, without requesting that presence be shared.

_ContactMetadataStorageTypePadding 

Enumerated type generated from the specification.

The HTTP Method with which to request a URL.

Enumerator:
HTTPMethodGet 

Use the GET method when opening the URL.

HTTPMethodPost 

Use the POST method when opening the URL. Refer to HTTP_Post_Data for more details.

_HTTPMethodPadding 

Enumerated type generated from the specification.

The various types of service points a channel might connect to.

Enumerator:
ServicePointTypeNone 

The channel is not communicating with a service point, or it is not known whether it is communicating with a service point (e.g. an ordinary call).

ServicePointTypeEmergency 

The service point is a generic emergency point.

ServicePointTypeCounseling 

The service point is some kind of counseling service (ie, mental health or child-services counseling).

_ServicePointTypePadding 

Enumerated type generated from the specification.

Enumerator:
ConnectionPresenceTypeUnset 

An invalid presence type used as a null value. This value MUST NOT appear in the Statuses property, or in the result of GetStatuses on the deprecated Presence interface.

ConnectionPresenceTypeOffline 

Offline

ConnectionPresenceTypeAvailable 

Available

ConnectionPresenceTypeAway 

Away

ConnectionPresenceTypeExtendedAway 

Away for an extended time

ConnectionPresenceTypeHidden 

Hidden (invisible)

ConnectionPresenceTypeBusy 

Busy, Do Not Disturb.

ConnectionPresenceTypeUnknown 

Unknown, unable to determine presence for this contact, for example if the protocol only allows presence of subscribed contacts.

ConnectionPresenceTypeError 

Error, an error occurred while trying to determine presence. The message, if set, is an error from the server.

_ConnectionPresenceTypePadding 

Enumerated type generated from the specification.

A type for communication access control. These control policies are used in org.freedesktop.Telepathy.Connection.Interface.CommunicationPolicy.DRAFT as well as most rich presence interfaces.

New interfaces should use this type, and NOT Rich_Presence_Access_Control_Type.

Enumerator:
AccessControlTypeWhitelist 

Only allow contacts that are in a certain whitelist.

The associated variant in Access_Control is a list of Contact_Handle representing the whitelist, with signature au.

AccessControlTypePublishList 

Allow contacts in the user's 'publish' list. The associated variant in Access_Control is ignored.

AccessControlTypeGroup 

Only allow contacts that are in a certain group.

The associated variant in Access_Control is a Group_Handle representing the permitted group.

AccessControlTypeOpen 

Allow all contacts. The associated variant in Access_Control is ignored.

AccessControlTypeSubscribeOrPublishList 

Allow all contacts in the user's 'subscribe' or 'publish' list. The associated variant in Access_Control is ignored.

AccessControlTypeClosed 

Forbid all contacts. The associated variant in Access_Control is ignored.

AccessControlTypeNotUnderstood 

The access control rule is too complex to be represented in the current Telepathy API. The associated variant is meaningless. Setting this mode is never valid; the connection manager MUST raise an error if this is attempted.

XEP-0016 Privacy Lists can easily produce access control mechanisms that can't be expressed in a simpler API. We need to be able to at least indicate that fact.

The associated variant in Access_Control is ignored.

_AccessControlTypePadding 

Enumerated type generated from the specification.

A type of access control for Rich_Presence_Access_Control. For most types, the exact access control is given by an associated variant.

These are the access control types from XMPP publish/subscribe (XEP-0060).

ConnectionInterfaceLocationInterface uses this for historical reasons, new interfaces will use Access_Control_Type.

Enumerator:
RichPresenceAccessControlTypeWhitelist 

The associated variant is a list of contacts (signature 'au', Contact_Handle[]) who can see the extended presence information.

RichPresenceAccessControlTypePublishList 

All contacts in the user's 'publish' contact list can see the extended presence information. The associated variant is ignored.

RichPresenceAccessControlTypeGroup 

The associated variant is a handle of type Group (signature 'u', Group_Handle) representing a group of contacts who can see the extended presence information.

RichPresenceAccessControlTypeOpen 

Anyone with access to the service can see the extended presence information.

_RichPresenceAccessControlTypePadding 

Enumerated type generated from the specification.

The state of a call, as a whole.

The allowed transitions are:

  • Pending_Initiator → Initialising (for outgoing calls, when Accept() is called)
  • Initialising → Initialised (for outgoing calls, when the remote client indicates that the user has been notified about the call. If the network is known not to provide feedback about whether the remote side is ringing, then the call should immediately be set to Ringing.
  • Initialising → Initialised (for incoming calls, when e.g. the implementation has been initialised far enough that it is sensible to notify the user about the call (to reduce the probability that the user will pick up the call and have it immediately fail). The UI should then alert the user about the call, and call SetRinging() )
  • Initialised → Accepted (for outgoing calls to a contact, when the remote contact accepts the call; for incoming calls, when Accept() is called.)
  • Accepted → Active (when the local user successfully joins the call/conference, and media is known to be flowing successfully; also, when temporary connection problems are resolved (See below)). If the network is known not to provide feedback about when the call is properly connected, the call should immediately be set to Active.
  • Active → Accepted (when there are temporary connection problems that the CM is aware of and able to recover from)
  • any state → Ended (when the call is terminated normally, or when an error occurs that the CM is unable to recover from)

Clients MAY consider unknown values from this enum to be an error - additional values will not be defined after the Call specification is declared to be stable.

Enumerator:
CallStateUnknown 

The call state is not known. This call state MUST NOT appear as a value of the CallState property, but MAY be used by client code to represent calls whose state is as yet unknown.

CallStatePendingInitiator 

The initiator of the call hasn't accepted the call yet. This state only makes sense for outgoing calls, where it means that the local user has not yet sent any signalling messages to the remote user(s), and will not do so until Accept is called.

CallStateInitialising 

Progress has been made in placing the call, but the contact has not been made aware of the call yet. This corresponds to SIP's status code 183 Session Progress, and should be used for the period where the CM is waiting for the streaming implementation to initialise (before sending the initial INVITE or equivalent) and when the outgoing call has reached a gateway or ICE negotiation is pending. UIs should not produce a dialtone or start ringing if the call is in this state.

CallStateInitialised 

In the outgoing case: at least one called user has been alerted about the call (a SIP 180 (Ringing) packet or equivalent has been received) but none have answered, so the call cannot go to Accepted (use Ringing to determine which members have been informed and which haven't, if you care). UIs SHOULD produce a dialtone for outgoing calls in this state. In the incoming case, the local user should be informed of the call as soon as the call reaches this state (and SetRinging should be called to inform the CM that this has happened, so that it can relay this fact to the caller using a SIP 180 (Ringing) packet or equivalent).

CallStateAccepted 

The contact being called has accepted the call, but the call is not in the Active state (The most common reason for this is that the streaming implementation hasn't connected yet).

CallStateActive 

The contact being called has accepted the call, and discourse between at least two parties should now be possible.

CallStateEnded 

The call has ended, either via normal termination or an error.

_CallStatePadding 

Enumerated type generated from the specification.

A simple representation of the reason for a change in the call's state, which may be used by simple clients, or used as a fallback when the DBus_Reason member of a Call_State_Reason struct is not understood.

Enumerator:
CallStateChangeReasonUnknown  We just don't know. Unknown values of this enum SHOULD also be treated like this.
CallStateChangeReasonProgressMade  Situation normal. Progress has been made in the setup/teardown of the call (and it didn't require any user interaction).
CallStateChangeReasonUserRequested 

The change was requested by the contact indicated by the Actor member of a Call_State_Reason struct.

If the Actor is the local user, the DBus_Reason SHOULD be the empty string.

If the Actor is a remote user, the DBus_Reason SHOULD be the empty string if the call was terminated normally, but MAY be a non-empty error name to indicate error-like call termination reasons (call rejected as busy, kicked from a conference by a moderator, etc.).

CallStateChangeReasonForwarded 

The call was forwarded. If known, the handle of the contact the call was forwarded to will be indicated by the "forwarded-to" member of a CallStateDetails dictionnary in the CallStateChanged() signal.

CallStateChangeReasonRejected 

The CallState changed from Initialised or Ended (or a content's direction changed) because it was rejected by the remote user.

Corresponds to Rejected

CallStateChangeReasonNoAnswer 

The CallState changed from Initialised or Ended because the initiator ended the call before the receiver accepted it. With an incoming call this state change reason signifies a missed call, or one that was picked up elsewhere before it was picked up here.

Corresponds to NoAnswer or PickedUpElsewhere

CallStateChangeReasonInvalidContact 

The CallState changed because one of the addresses does not exist on the network.

Corresponds to DoesNotExist

CallStateChangeReasonPermissionDenied 

The CallState changed because the local user is not authorised.

Corresponds to PermissionDenied or InsufficientBalance

CallStateChangeReasonBusy 

The CallState changed from Initialised Ended because the receiver is busy (e.g. is already engaged in another call, and has not placed the initiator in a call-waiting queue).

Corresponds to Busy

CallStateChangeReasonInternalError 

There has been an unexpected error in either the CM or some other local component.

Corresponds to Confused or Media.StreamingError

CallStateChangeReasonServiceError 

There has been an unexpected error in the server or some other remote component.

Corresponds to ServiceConfused

CallStateChangeReasonNetworkError 

There has been a network error related to the CM or the signalling part of the call (compare and contrast: Streaming_Error).

Corresponds to NetworkError

CallStateChangeReasonMediaError 

Some aspect of the content is unsupported so has to be removed from the call.

Corresponds to Media.UnsupportedType or Media.CodecsIncompatible

CallStateChangeReasonConnectivityError 

It was not possible for the streaming implementation to connect to any of the users participating in this call or content. Corresponds to ConnectionFailed or ConnectionLost

_CallStateChangeReasonPadding 

Enumerated type generated from the specification.

Enumerator:
ChannelContactSearchStateNotStarted 

The search has not started

ChannelContactSearchStateInProgress 

The search is in progress

ChannelContactSearchStateMoreAvailable 

The search has paused, but more results can be retrieved by calling More.

ChannelContactSearchStateCompleted 

The search has been completed

ChannelContactSearchStateFailed 

The search has failed

_ChannelContactSearchStatePadding 

Enumerated type generated from the specification.

Enumerator:
FileTransferStateNone 

An invalid state type used as a null value. This value MUST NOT appear in the State property.

FileTransferStatePending 

The file transfer is waiting to be accepted/closed by the receiver. The receiver has to call AcceptFile, then wait for the state to change to Open and check the offset value.

FileTransferStateAccepted 

The receiver has accepted the transfer. The sender now has to call ProvideFile to actually start the transfer. The receiver should now wait for the state to change to Open and check the offset value.

FileTransferStateOpen 

The file transfer is open for traffic.

FileTransferStateCompleted 

The file transfer has been completed successfully.

FileTransferStateCancelled 

The file transfer has been cancelled.

_FileTransferStatePadding 

Enumerated type generated from the specification.

Enumerator:
FileTransferStateChangeReasonNone 

No reason was specified.

FileTransferStateChangeReasonRequested 

The change in state was requested.

FileTransferStateChangeReasonLocalStopped 

The file transfer was cancelled by the local user.

FileTransferStateChangeReasonRemoteStopped 

The file transfer was cancelled by the remote user.

FileTransferStateChangeReasonLocalError 

The file transfer was cancelled because of a local error.

FileTransferStateChangeReasonRemoteError 

The file transfer was cancelled because of a remote error.

_FileTransferStateChangeReasonPadding 

Enumerated type generated from the specification.

Enumerator:
FileHashTypeNone 

No hash.

FileHashTypeMD5 

MD5 digest as a string of 32 ASCII hex digits.

FileHashTypeSHA1 

SHA1 digest as a string of ASCII hex digits.

FileHashTypeSHA256 

SHA256 digest as a string of ASCII hex digits.

_FileHashTypePadding 

Enumerated type generated from the specification.

Enumerator:
MediaStreamTypeAudio 

An audio stream

MediaStreamTypeVideo 

A video stream

_MediaStreamTypePadding 

Enumerated type generated from the specification.

Enumerator:
MediaStreamStateDisconnected 

The stream is disconnected.

MediaStreamStateConnecting 

The stream is trying to connect.

MediaStreamStateConnected 

The stream is connected.

_MediaStreamStatePadding 

Enumerated type generated from the specification.

Enumerator:
MediaStreamDirectionNone 

Media are not being sent or received

MediaStreamDirectionSend 

Media are being sent, but not received

MediaStreamDirectionReceive 

Media are being received, but not sent

MediaStreamDirectionBidirectional 

Media are being sent and received

_MediaStreamDirectionPadding 

Enumerated type generated from the specification.

Enumerator:
ChannelTextSendErrorUnknown 

An unknown error occurred

ChannelTextSendErrorOffline 

The requested contact was offline

ChannelTextSendErrorInvalidContact 

The requested contact is not valid

ChannelTextSendErrorPermissionDenied 

The user does not have permission to speak on this channel

ChannelTextSendErrorTooLong 

The outgoing message was too long and was rejected by the server

ChannelTextSendErrorNotImplemented 

The channel doesn't support sending text messages to the requested contact

_ChannelTextSendErrorPadding 

Enumerated type generated from the specification.

The type of message.

Enumerator:
ChannelTextMessageTypeNormal 

An ordinary chat message. Unknown types SHOULD be treated like this.

ChannelTextMessageTypeAction 

An action which might be presented to the user as "* <sender> <action>", such as an IRC CTCP ACTION (typically selected by the "/me" command). For example, the text of the message might be "drinks more coffee".

ChannelTextMessageTypeNotice 

A one-off or automated message not necessarily expecting a reply

ChannelTextMessageTypeAutoReply 

An automatically-generated reply message.

ChannelTextMessageTypeDeliveryReport 

A delivery report. This message type MUST NOT appear unless the channel supports the Messages interface; see Message_Part for the format that delivery reports must take.

_ChannelTextMessageTypePadding 

Enumerated type generated from the specification.

Enumerator:
TubeTypeDBus 

The tube is D-Bus tube as described by the org.freedesktop.Telepathy.Channel.Type.DBusTube interface.

TubeTypeStream 

The tube is stream tube as described by the org.freedesktop.Telepathy.Channel.Type.StreamTube interface.

_TubeTypePadding 

Enumerated type generated from the specification.

Enumerator:
TubeStateLocalPending 

The tube is waiting to be accepted/closed locally.

TubeStateRemotePending 

The tube is waiting to be accepted/closed remotely.

TubeStateOpen 

The tube is open for traffic.

_TubeStatePadding 

Enumerated type generated from the specification.

A reason why captcha authentication was aborted by the client.

Enumerator:
CaptchaCancelReasonUserCancelled 

The user aborted the authentication. If this is used, the CaptchaError SHOULD be set to Cancelled

CaptchaCancelReasonNotSupported 

The Handler doesn't support the given/required captcha types. If this is used, the CaptchaError SHOULD be set to CaptchaNotSupported. This SHOULD also be used if Close is called before CancelCaptcha. If no Handler supports captcha channels, the ChannelDispatcher will just call Close, because it has no knowledge of specific channel types.

CaptchaCancelReasonServiceConfused 

The Handler doesn't understand the captcha data received. The challenger may be sending gibberish. If this is used, the CaptchaError SHOULD be set to ServiceConfused.

_CaptchaCancelReasonPadding 

Enumerated type generated from the specification.

Enumerator:
CaptchaStatusLocalPending 

The challenge/response exchange is in progress and waiting for a local action. Call AnswerCaptchas to go to the Remote_Pending state, or call CancelCaptcha followed by Close to give up.

CaptchaStatusRemotePending 

The challenge/response exchange is in progress and waiting for a response from the server. Wait for a reply from the server, which will result in the Succeeded, Try_Again, or Failed state, or call CancelCaptcha followed by Close to give up.

CaptchaStatusSucceeded 

Everyone is happy. Connection to the server will proceed as soon as this state is reached. There is nothing useful to do in this state except to call Close to close the channel.

CaptchaStatusTryAgain 

The server has indicated an authentication failure. Call GetCaptchas again to get a new captcha, or CancelCaptcha followed by Close to give up.

CaptchaStatusFailed 

Authentication has failed in some way. There is nothing useful to do in this state except to close the channel with Close.

_CaptchaStatusPadding 

Enumerated type generated from the specification.

Enumerator:
ChannelChatStateGone 

The contact has effectively ceased participating in the chat.

ChannelChatStateInactive 

The contact has not been active for some time.

ChannelChatStateActive 

The contact is actively participating in the chat.

ChannelChatStatePaused 

The contact has paused composing a message.

ChannelChatStateComposing 

The contact is composing a message to be sent to the chat.

_ChannelChatStatePadding 

Enumerated type generated from the specification.

Enumerator:
DTMFEventDigit0 

0

DTMFEventDigit1 

1

DTMFEventDigit2 

2

DTMFEventDigit3 

3

DTMFEventDigit4 

4

DTMFEventDigit5 

5

DTMFEventDigit6 

6

DTMFEventDigit7 

7

DTMFEventDigit8 

8

DTMFEventDigit9 

9

DTMFEventAsterisk 

*

DTMFEventHash 

#

DTMFEventLetterA 

A

DTMFEventLetterB 

B

DTMFEventLetterC 

C

DTMFEventLetterD 

D

_DTMFEventPadding 

Enumerated type generated from the specification.

The reason for a set of handles to move to one of Members , LocalPendingMembers or RemotePendingMembers , or to be removed from the group. A client may supply a reason when attempting to remove members from a group with RemoveMembersWithReason() , and reasons are supplied by the CM when emitting MembersChanged() and MembersChangedDetailed() . Some reason codes have different meanings depending on the Actor in a MembersChanged signal.

Enumerator:
ChannelGroupChangeReasonNone 

No reason was provided for this change.

In particular, this reason SHOULD be used when representing users joining a named chatroom in the usual way, users leaving a chatroom by their own request, and normal termination of a StreamedMedia call by the remote user.

If the SelfHandle is removed from a group for this reason and the actor is not the SelfHandle, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Terminated.

If the SelfHandle is removed from a group for this reason and the actor is also the SelfHandle, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Cancelled.

ChannelGroupChangeReasonOffline 

The change is due to a user going offline. Also used when user is already offline, but this wasn't known previously.

If a one-to-one ChannelTypeStreamedMediaInterface call fails because the contact being called is offline, the connection manager SHOULD indicate this by removing both the SelfHandle and the other contact's handle from the Group interface with reason Offline.

For 1-1 calls, the call terminates as a result of removing the remote contact, so the SelfHandle should be removed at the same time as the remote contact and for the same reason.

If a handle is removed from a group for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Offline.

ChannelGroupChangeReasonKicked 

The change is due to a kick operation.

If the SelfHandle is removed from a group for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Channel.Kicked.

ChannelGroupChangeReasonBusy 

The change is due to a busy indication.

If a one-to-one ChannelTypeStreamedMediaInterface call fails because the contact being called is busy, the connection manager SHOULD indicate this by removing both the SelfHandle and the other contact's handle from the Group interface with reason Busy.

For 1-1 calls, the call terminates as a result of removing the remote contact, so the SelfHandle should be removed at the same time as the remote contact and for the same reason.

If the SelfHandle is removed from a group for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Busy.

ChannelGroupChangeReasonInvited 

The change is due to an invitation. This reason SHOULD only be used when contacts are added to the remote-pending set (to indicate that the contact has been invited) or to the members (to indicate that the contact has accepted the invitation). Otherwise, what would it mean?

ChannelGroupChangeReasonBanned 

The change is due to a kick+ban operation.

If the SelfHandle is removed from a group for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Channel.Banned.

ChannelGroupChangeReasonError 

The change is due to an error occurring.

ChannelGroupChangeReasonInvalidContact 

The change is because the requested contact does not exist.

For instance, if the user invites a nonexistent contact to a chatroom or attempts to call a nonexistent contact, this could be indicated by the CM adding that contact's handle to remote-pending for reason None or Invited, then removing it for reason Invalid_Contact. In the case of a 1-1 StreamedMedia call, the CM SHOULD remove the self handle from the Group in the same signal.

For 1-1 calls, the call terminates as a result of removing the remote contact, so the SelfHandle should be removed at the same time as the remote contact and for the same reason.

If a contact is removed from a group for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.DoesNotExist.

ChannelGroupChangeReasonNoAnswer 

The change is because the requested contact did not respond.

If a one-to-one ChannelTypeStreamedMediaInterface call fails because the contact being called did not respond, or the local user did not respond to an incoming call, the connection manager SHOULD indicate this by removing both the SelfHandle and the other contact's handle from the Group interface with reason No_Answer.

Documenting existing practice.

If a contact is removed from a group for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.NoAnswer.

ChannelGroupChangeReasonRenamed 

The change is because a contact's unique identifier changed. There must be exactly one handle in the removed set and exactly one handle in one of the added sets. The org.freedesktop.Telepathy.Connection.Interface.Renaming.Renamed signal on the org.freedesktop.Telepathy.Connection.Interface.Renaming interface will have been emitted for the same handles, shortly before this MembersChanged() signal is emitted.

ChannelGroupChangeReasonPermissionDenied 

The change is because there was no permission to contact the requested handle.

If a contact is removed from a group for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.PermissionDenied.

ChannelGroupChangeReasonSeparated 

If members are removed with this reason code, the change is because the group has split into unconnected parts which can only communicate within themselves (e.g. netsplits on IRC use this reason code).

If members are added with this reason code, the change is because unconnected parts of the group have rejoined. If this channel carries messages (e.g. ChannelTypeTextInterface or ChannelTypeTubesInterface channels) applications must assume that the contacts being added are likely to have missed some messages as a result of the separation, and that the contacts in the group are likely to have missed some messages from the contacts being added.

Note that from the added contacts' perspective, they have been in the group all along, and the contacts we indicate to be in the group (including the local user) have just rejoined the group with reason Separated. Application protocols in Tubes should be prepared to cope with this situation.

The SelfHandle SHOULD NOT be removed from channels with this reason.

_ChannelGroupChangeReasonPadding 

Enumerated type generated from the specification.

The hold state of a channel.

Enumerator:
LocalHoldStateUnheld 

All streams are unheld (the call is active). New channels SHOULD have this hold state.

LocalHoldStateHeld 

All streams are held (the call is on hold)

LocalHoldStatePendingHold 

The connection manager is attempting to move to state Held, but has not yet completed that operation. It is unspecified whether any, all or none of the streams making up the channel are on hold. Examining the Hold state of Call Contents (if applicable) may provide more useful information.

LocalHoldStatePendingUnhold 

The connection manager is attempting to move to state Unheld, but has not yet completed that operation. It is unspecified whether any, all or none of the streams making up the channel are on hold. Examining the Hold state of Call Contents (if applicable) may provide more useful information.

_LocalHoldStatePadding 

Enumerated type generated from the specification.

The reason for a change to the Local_Hold_State. Clients MUST treat unknown values as equivalent to Local_Hold_State_Reason_None.

Enumerator:
LocalHoldStateReasonNone 

The reason cannot be described by any of the predefined values (connection managers SHOULD avoid this reason, but clients MUST handle it gracefully)

LocalHoldStateReasonRequested 

The change is in response to a user request

LocalHoldStateReasonResourceNotAvailable 

The change is because some resource was not available

_LocalHoldStateReasonPadding 

Enumerated type generated from the specification.

The status of a message as indicated by a delivery report. If this enum is extended in future specifications, this should only be to add new, non-overlapping conditions (i.e. all failures should still be signalled as either Temporarily_Failed or Permanently_Failed). If additional detail is required (e.g. distinguishing between the various types of permanent failure) this will be done using additional Delivery_Report_Header_Keys.

Enumerator:
DeliveryStatusUnknown 

The message's disposition is unknown. Clients SHOULD consider all messages to have status Delivery_Status_Unknown unless otherwise specified; connection managers SHOULD NOT signal this delivery status explicitly.

DeliveryStatusDelivered 

The message has been delivered to the intended recipient.

DeliveryStatusTemporarilyFailed 

Delivery of the message has failed. Clients SHOULD notify the user, but MAY automatically try sending another copy of the message. Similar to errors with type="wait" in XMPP; analogous to 4xx errors in SMTP.

DeliveryStatusPermanentlyFailed 

Delivery of the message has failed. Clients SHOULD NOT try again unless by specific user action. If the user does not modify the message or alter configuration before re-sending, this error is likely to happen again. Similar to errors with type="cancel", type="modify" or type="auth" in XMPP; analogous to 5xx errors in SMTP.

DeliveryStatusAccepted 

An intermediate server has accepted the message but the message has not been yet delivered to the ultimate recipient. The connection manager might send a Failed report or Delivered report later. Similar to "202 Accepted" success code in SIP; analogous to 251 and 252 responses in SMTP.

DeliveryStatusRead 

The message has been read by the intended recipient.

DeliveryStatusDeleted 

The message has been deleted by the intended recipient. This MAY be signalled on its own if the message is deleted without being read, or after Read if the message was read before being deleted.

_DeliveryStatusPadding 

Enumerated type generated from the specification.

A reason why SASL authentication was aborted by the client.

Enumerator:
SASLAbortReasonInvalidChallenge 

The server sent an invalid challenge or data.

SASLAbortReasonUserAbort 

The user aborted the authentication.

_SASLAbortReasonPadding 

Enumerated type generated from the specification.

Enumerator:
SASLStatusNotStarted 

The initial state. The Handler SHOULD either call AbortSASL, or connect to the NewChallenge signal then call StartMechanism or StartMechanismWithData.

SASLStatusInProgress 

The challenge/response exchange is in progress. The Handler SHOULD call either Respond or AcceptSASL exactly once per emission of NewChallenge, or call AbortSASL at any time.

SASLStatusServerSucceeded 

The server has indicated successful authentication, and the connection manager is waiting for confirmation from the Handler. The Handler must call either AcceptSASL or AbortSASL to indicate whether it considers authentication to have been successful.

SASLStatusClientAccepted 

The Handler has indicated successful authentication, and the connection manager is waiting for confirmation from the server. The state will progress to either Succeeded or Server_Failed when confirmation is received.

SASLStatusSucceeded 

Everyone is happy (the server sent success, and the client has called AcceptSASL). Connection to the server will proceed as soon as this state is reached. The Handler SHOULD call Close to close the channel.

SASLStatusServerFailed 

The server has indicated an authentication failure. If CanTryAgain is true, the client may try to authenticate again, by calling StartMechanism or StartMechanismWithData again. Otherwise, it should give up completely, by calling Close on the channel.

SASLStatusClientFailed 

The client has indicated an authentication failure. The possible actions are the same as for Server_Failed.

_SASLStatusPadding 

Enumerated type generated from the specification.

Enumerator:
TubeChannelStateLocalPending 

The initiator offered the tube. The tube is waiting to be accepted/closed locally. If the client accepts the tube, the tube's state will be Open.

TubeChannelStateRemotePending 

The tube is waiting to be accepted/closed remotely. If the recipient accepts the tube, the tube's state will be Open.

TubeChannelStateOpen 

The initiator offered the tube and the recipient accepted it. The tube is open for traffic. The tube's state stays in this state until it is closed.

TubeChannelStateNotOffered 

The tube channel has been requested but the tube is not yet offered. The client should offer the tube to the recipient and the tube's state will be Remote_Pending. The method used to offer the tube depends on the tube type.

_TubeChannelStatePadding 

Enumerated type generated from the specification.

Enumerator:
SocketAddressTypeUnix 

A Unix socket. The address variant contains a byte-array, signature 'ay', containing the path of the socket.

SocketAddressTypeAbstractUnix 

An abstract Unix socket. The address variant contains a byte-array, signature 'ay', containing the path of the socket including the leading null byte.

SocketAddressTypeIPv4 

An IPv4 socket. The address variant contains a Socket_Address_IPv4, i.e. a structure with signature (sq) in which the string is an IPv4 dotted-quad address literal (and must not be a DNS name), while the 16-bit unsigned integer is the port number.

SocketAddressTypeIPv6 

An IPv6 socket. The address variant contains a Socket_Address_IPv6, i.e. a structure with signature (sq) in which the string is an IPv6 address literal as specified in RFC2373 (and must not be a DNS name), while the 16-bit unsigned integer is the port number.

_SocketAddressTypePadding 

Enumerated type generated from the specification.

Enumerator:
SocketAccessControlLocalhost 

The IP or Unix socket can be accessed by any local user (e.g. a Unix socket that accepts all local connections, or an IP socket listening on 127.0.0.1 (or ::1) or rejecting connections not from that address). The associated variant must be ignored. For a D-Bus tube, this means that the "same user" access control typically provided by default in D-Bus implementations SHOULD be disabled. If the socket is only available to local users (e.g. a Unix socket, an IPv4 socket bound to 127.0.0.1, or an IPv6 socket bound to ::1), the ANONYMOUS authentication mechanism MAY be enabled.

SocketAccessControlPort 

May only be used on IP sockets, and only for Stream tubes. The associated variant must contain a struct Socket_Address_IPv4 (or Socket_Address_IPv6) containing the string form of an IP address of the appropriate version, and a port number. The socket can only be accessed if the connecting process has that address and port number; all other connections will be rejected.

SocketAccessControlNetmask 

May only be used on IP sockets. The associated variant must contain a struct Socket_Netmask_IPv4 (or Socket_Netmask_IPv6) with signature (sy), containing the string form of an IP address of the appropriate version, and a prefix length "n". The socket can only be accessed if the first n bits of the connecting address match the first n bits of the given address.

SocketAccessControlCredentials 

The high-level meaning of this access control type is that only the same user (e.g. same numeric Unix uid) is allowed to interact with the tube. Exactly how this is achieved varies by channel type.

For ChannelTypeStreamTubeInterface channels, this access control type may only be used on UNIX sockets. The connecting process must send a byte when it first connects, which is not considered to be part of the data stream. If the operating system uses sendmsg() with SCM_CREDS or SCM_CREDENTIALS to pass credentials over sockets, the connecting process must do so if possible; if not, it must still send the byte, without any attached credentials. (This mechanism is very similar to the first byte of a D-Bus connection, except that in D-Bus the byte is always zero, whereas in Tubes it can be nonzero.)

For ChannelTypeDBusTubeInterface channels, this access control type may be used on any type of socket, and there is no extra byte added by Telepathy at the beginning of the stream: all bytes in the stream are part of the D-Bus tube connection. The connecting process should prove its identity via any of the SASL authentication mechanisms usually used for D-Bus (in typical D-Bus implementations this involves either sending and receiving credentials as above, or demonstrating the ability to write to a file in the user's home directory).

In either case, the listening process will disconnect the connection unless it can determine by OS-specific means that the connecting process has the same user ID as the listening process.

In either tube type, the associated variant must be ignored.

_SocketAccessControlPadding 

Enumerated type generated from the specification.

Enumerator:
MediaStreamErrorUnknown 

An unknown error occured.

MediaStreamErrorEOS 

The end of the stream was reached.

MediaStreamErrorCodecNegotiationFailed 

There are no common codecs between the local side and the other particpants in the call. The possible codecs are not signalled here: the streaming implementation is assumed to report them in an implementation-dependent way, e.g. Farsight should use GstMissingElement.

MediaStreamErrorConnectionFailed 

A network connection for the Media could not be established or was lost.

MediaStreamErrorNetworkError 

There was an error in the networking stack (other than the connection failure).

MediaStreamErrorNoCodecs 

There are no installed codecs for this media type.

MediaStreamErrorInvalidCMBehavior 

The CM is doing something wrong.

MediaStreamErrorMediaError 

There was an error in the media processing stack.

_MediaStreamErrorPadding 

Enumerated type generated from the specification.

Enumerator:
MediaStreamBaseProtoUDP 

UDP (User Datagram Protocol)

MediaStreamBaseProtoTCP 

TCP (Transmission Control Protocol)

_MediaStreamBaseProtoPadding 

Enumerated type generated from the specification.

Enumerator:
MediaStreamTransportTypeLocal 

A local address

MediaStreamTransportTypeDerived 

An external address derived by a method such as STUN

MediaStreamTransportTypeRelay 

An external stream relay

_MediaStreamTransportTypePadding 

Enumerated type generated from the specification.

Enumerator:
DebugLevelError 

Log level for errors. Error messages are always fatal, resulting in the service terminating after something completely unexpected occurred.

DebugLevelCritical 

Log level for critical messages. Critical messages are messages that the service might predict and it is up to the service itself to decide whether to terminate following a critical message.

DebugLevelWarning 

Log level for warnings.

DebugLevelMessage 

Log level for messages.

DebugLevelInfo 

Log level for information messages.

DebugLevelDebug 

Log level for debug messages.

_DebugLevelPadding 

Enumerated type generated from the specification.

The possible states for a TLSCertificate object.

Enumerator:
TLSCertificateStatePending 

The certificate is currently waiting to be accepted or rejected.

TLSCertificateStateAccepted 

The certificate has been verified.

TLSCertificateStateRejected 

The certificate has been rejected.

_TLSCertificateStatePadding 

Enumerated type generated from the specification.

Possible reasons to reject a TLS certificate.

Enumerator:
TLSCertificateRejectReasonUnknown 

The certificate has been rejected for another reason not listed in this enumeration.

TLSCertificateRejectReasonUntrusted 

The certificate is not trusted.

TLSCertificateRejectReasonExpired 

The certificate is expired.

TLSCertificateRejectReasonNotActivated 

The certificate is not active yet.

TLSCertificateRejectReasonFingerprintMismatch 

The certificate provided does not have the expected fingerprint.

TLSCertificateRejectReasonHostnameMismatch 

The hostname certified does not match the provided one.

TLSCertificateRejectReasonSelfSigned 

The certificate is self-signed.

TLSCertificateRejectReasonRevoked 

The certificate has been revoked.

TLSCertificateRejectReasonInsecure 

The certificate uses an insecure cipher algorithm, or is cryptographically weak.

TLSCertificateRejectReasonLimitExceeded 

The length in bytes of the certificate, or the depth of the certificate chain exceed the limits imposed by the crypto library.

_TLSCertificateRejectReasonPadding 

Enumerated type generated from the specification.

A packetization method that can be used for a content.

Enumerator:
CallContentPacketizationTypeRTP  Real-time Transport Protocol, as documented by RFC 3550.
CallContentPacketizationTypeRaw  Raw media.
CallContentPacketizationTypeMSNWebcam  MSN webcam. This is the video-only one-way type which was used in earlier versions of WLM. Although no longer used, modern WLM clients still support the MSN webcam protocol.
_CallContentPacketizationTypePadding 

Enumerated type generated from the specification.

The disposition of this content, which defines whether to automatically start sending data on the streams when Accept is called on the channel.

Enumerator:
CallContentDispositionNone  The content has no specific disposition.
CallContentDispositionInitial 

The content was initially part of the call. When ChannelTypeCallInterface::Accept() is called on the channel, all streams of this content with CallStreamInterface::LocalSendingState set to Pending_Send will be moved to Sending as if CallStreamInterface::SetSending() (True) had been called.

_CallContentDispositionPadding 

Enumerated type generated from the specification.

Enumerator:
RCPTXRRTTModeAll 

Both RTP data senders and data receivers MAY send DLRR blocks.

RCPTXRRTTModeSender 

Only active RTP senders MAY send DLRR blocks, i.e., non RTP senders SHALL NOT send DLRR blocks.

_RCPTXRRTTModePadding 

Enumerated type generated from the specification.

The type of SendingState and ReceivingState .
Enumerator:
StreamFlowStateStopped 

No data is flowing (or expected to be flowing) at this time.

StreamFlowStatePendingStart 

The streaming implementation has been told to start or receiving, but has not yet indicated that it is doing so.

StreamFlowStatePendingStop 

The streaming implementation has been told to stop sending or receiving data, but it has not yet indicated that it has done so.

StreamFlowStateStarted 

The streaming implementation is successfully sending or receiving data, and everything is going swimmingly.

_StreamFlowStatePadding 

Enumerated type generated from the specification.

The network topology that an IP candidate represents. This can sometimes be used to infer what kind of performance characteristics (latency, bandwith, etc) can be expected of connections made to this candidate.

Enumerator:
CallStreamCandidateTypeNone 

This is not an IP candidate. This is a reserved value, and should not be seen on the bus.

CallStreamCandidateTypeHost 

This candidate represents a direct connection to the host, as its address is taken directly the host's IP stack.

CallStreamCandidateTypeServerReflexive 

This candidate probably represents a connection to the host through a NAT device, as its address was discovered by sending a binding request to a STUN server or similar.

CallStreamCandidateTypePeerReflexive 

This candidate probably represents a good route between the host and its peer, as its address was discovered by sending a STUN binding request to one of the candidates advertised by the peer.

CallStreamCandidateTypeRelay 

This candidate represents the address of a relay server (usually somewhere on the public internet). This candidate is the most likely to work, but all media will go via a relay server, so latency is likely to be higher than other types of candidate.

CallStreamCandidateTypeMulticast 

This candidate represents a Multicast group. This value should only appear if the Stream's Transport is set to Multicast.

_CallStreamCandidateTypePadding 

Enumerated type generated from the specification.

Media streams can use more than one UDP socket: one for RTP (data) and one for RTCP (control). Most of the time, they are adjacent to each other, but some protocols (xmpp) signal each port separately.
Enumerator:
StreamComponentUnknown 

The stream transport type is unknown or not applicable (should not appear over dbus).

StreamComponentData 

This is the high-traffic data socket, containing the audio/video data for the stream.

StreamComponentControl 

This is the low-traffic control socket, usually containing feedback about packet loss etc.

_StreamComponentPadding 

Enumerated type generated from the specification.

A transport that can be used for streaming.
Enumerator:
StreamTransportTypeUnknown 

The stream transport type is unknown or not applicable (for streams that do not have a configurable transport).

StreamTransportTypeRawUDP 

Raw UDP, with or without STUN. All streaming clients are assumed to support this transport, so there is no handler capability token for it in the Call1 interface. [This corresponds to "none" or "stun" in the old Media.StreamHandler interface.]

StreamTransportTypeICE 

Interactive Connectivity Establishment, as defined by RFC 5245. Note that this value covers ICE-UDP only. [This corresponds to "ice-udp" in the old Media.StreamHandler interface.]

StreamTransportTypeGTalkP2P 

Google Talk peer-to-peer connectivity establishment, as implemented by libjingle 0.3. [This corresponds to "gtalk-p2p" in the old Media.StreamHandler interface.]

StreamTransportTypeWLM2009 

The transport used by Windows Live Messenger 2009 or later, which resembles ICE draft 19. [This corresponds to "wlm-2009" in the old Media.StreamHandler interface.]

StreamTransportTypeSHM 

Shared memory transport, as implemented by the GStreamer shmsrc and shmsink plugins.

StreamTransportTypeMulticast 

Multicast transport.

_StreamTransportTypePadding 

Enumerated type generated from the specification.

Enum indicating whether a contact is sending media.

Enumerator:
SendingStateNone 

The contact is not sending media and has not been asked to do so.

SendingStatePendingSend 

The contact has been asked to start sending media.

SendingStateSending 

The contact is sending media.

SendingStatePendingStopSending 

The contact has been asked to stop sending media.

_SendingStatePadding 

Enumerated type generated from the specification.

Represents the state of ICE negotiation for a single component of a stream to an endpoint.

Enumerator:
StreamEndpointStateConnecting 

Candidate gathering and connectivity checks are in progress.

StreamEndpointStateProvisionallyConnected 

The streaming implementation has found at least one working candidate pair. It is possible to send media at this point, but the controlling side has yet to negotiate the final candidates for use in this call.

StreamEndpointStateFullyConnected 

This component of the stream is connected, and an updated offer has been sent and accepted (finalising the candidates to be used for the call). This should be set by the CM in response to AcceptSelectedCandidatePair.

StreamEndpointStateExhaustedCandidates 

The streaming implementation has tried connecting to all of the available candidates and none of them have connected. This is distinct from Failed, because the CM might be able to provide more candidates later (more likely in XMPP than SIP).

StreamEndpointStateFailed 

The CM and streaming implementation are in agreement that it is impossible to connect to this endpoint. This value should only be set by the CM.

_StreamEndpointStatePadding 

Variable Documentation

1 higher than the highest valid value of HandleType.

1 higher than the highest valid value of ConnectionStatus.

1 higher than the highest valid value of ConnectionStatusReason.

1 higher than the highest valid value of ContactListState.

1 higher than the highest valid value of SubscriptionState.

1 higher than the highest valid value of ContactMetadataStorageType.

1 higher than the highest valid value of HTTPMethod.

1 higher than the highest valid value of ServicePointType.

1 higher than the highest valid value of ConnectionPresenceType.

1 higher than the highest valid value of AccessControlType.

1 higher than the highest valid value of RichPresenceAccessControlType.

1 higher than the highest valid value of CallState.

1 higher than the highest valid value of CallStateChangeReason.

1 higher than the highest valid value of ChannelContactSearchState.

1 higher than the highest valid value of FileTransferState.

1 higher than the highest valid value of FileTransferStateChangeReason.

1 higher than the highest valid value of FileHashType.

1 higher than the highest valid value of MediaStreamType.

1 higher than the highest valid value of MediaStreamState.

1 higher than the highest valid value of MediaStreamDirection.

1 higher than the highest valid value of ChannelTextSendError.

1 higher than the highest valid value of ChannelTextMessageType.

const int Tp::NUM_TUBE_TYPES

1 higher than the highest valid value of TubeType.

1 higher than the highest valid value of TubeState.

1 higher than the highest valid value of CaptchaCancelReason.

1 higher than the highest valid value of CaptchaStatus.

1 higher than the highest valid value of ChannelChatState.

1 higher than the highest valid value of DTMFEvent.

1 higher than the highest valid value of ChannelGroupChangeReason.

1 higher than the highest valid value of LocalHoldState.

1 higher than the highest valid value of LocalHoldStateReason.

1 higher than the highest valid value of DeliveryStatus.

1 higher than the highest valid value of SASLAbortReason.

1 higher than the highest valid value of SASLStatus.

1 higher than the highest valid value of TubeChannelState.

1 higher than the highest valid value of SocketAddressType.

1 higher than the highest valid value of SocketAccessControl.

1 higher than the highest valid value of MediaStreamError.

1 higher than the highest valid value of MediaStreamBaseProto.

1 higher than the highest valid value of MediaStreamTransportType.

1 higher than the highest valid value of DebugLevel.

1 higher than the highest valid value of TLSCertificateState.

1 higher than the highest valid value of TLSCertificateRejectReason.

1 higher than the highest valid value of CallContentPacketizationType.

1 higher than the highest valid value of CallContentDisposition.

1 higher than the highest valid value of RCPTXRRTTMode.

1 higher than the highest valid value of StreamFlowState.

1 higher than the highest valid value of CallStreamCandidateType.

1 higher than the highest valid value of StreamComponent.

1 higher than the highest valid value of StreamTransportType.

1 higher than the highest valid value of SendingState.

1 higher than the highest valid value of StreamEndpointState.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00664_source.html0000644000175200001440000001177012000060453023213 0ustar00collabora-develusers00000000000000 pending-variant.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
pending-variant.h
00001 
00023 #ifndef _TelepathyQt_pending_variant_h_HEADER_GUARD_
00024 #define _TelepathyQt_pending_variant_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Global>
00031 #include <TelepathyQt/PendingOperation>
00032 
00033 #include <QVariant>
00034 
00035 namespace Tp
00036 {
00037 
00038 class TP_QT_EXPORT PendingVariant : public PendingOperation
00039 {
00040     Q_OBJECT
00041     Q_DISABLE_COPY(PendingVariant);
00042 
00043 public:
00044     PendingVariant(QDBusPendingCall call, const SharedPtr<RefCounted> &object);
00045     ~PendingVariant();
00046 
00047     QVariant result() const;
00048 
00049 private Q_SLOTS:
00050     TP_QT_NO_EXPORT void watcherFinished(QDBusPendingCallWatcher*);
00051 
00052 private:
00053     struct Private;
00054     friend struct Private;
00055     Private *mPriv;
00056 };
00057 
00058 } // Tp
00059 
00060 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00638_source.html0000644000175200001440000001611712000060453023214 0ustar00collabora-develusers00000000000000 pending-contact-attributes.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
pending-contact-attributes.h
00001 
00023 #ifndef _TelepathyQt_pending_contact_attributes_h_HEADER_GUARD_
00024 #define _TelepathyQt_pending_contact_attributes_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/PendingOperation>
00031 #include <TelepathyQt/Types>
00032 #include <TelepathyQt/Constants>
00033 #include <TelepathyQt/Types>
00034 
00035 namespace Tp
00036 {
00037 
00038 class ReferencedHandles;
00039 
00040 class TP_QT_EXPORT PendingContactAttributes : public PendingOperation
00041 {
00042     Q_OBJECT
00043     Q_DISABLE_COPY(PendingContactAttributes)
00044 
00045 public:
00046     ~PendingContactAttributes();
00047 
00048     ConnectionPtr connection() const;
00049 
00050     const UIntList &contactsRequested() const;
00051     const QStringList &interfacesRequested() const;
00052     bool shouldReference() const;
00053 
00054     ReferencedHandles validHandles() const;
00055     UIntList invalidHandles() const;
00056     ContactAttributesMap attributes() const;
00057 
00058 private Q_SLOTS:
00059     TP_QT_NO_EXPORT void onCallFinished(QDBusPendingCallWatcher *watcher);
00060 
00061 private:
00062     friend class ConnectionLowlevel;
00063 
00064     TP_QT_NO_EXPORT PendingContactAttributes(const ConnectionPtr &connection,
00065             const UIntList &handles,
00066             const QStringList &interfaces, bool reference);
00067 
00068     TP_QT_NO_EXPORT void failImmediately(const QString &error, const QString &errorMessage);
00069 
00070     struct Private;
00071     friend struct Private;
00072     Private *mPriv;
00073 };
00074 
00075 } // Tp
00076 
00077 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00507_source.html0000644000175200001440000013622712000060453023214 0ustar00collabora-develusers00000000000000 cli-connection-manager.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-connection-manager.h
00001 /*
00002  * This file contains D-Bus client proxy classes generated by qt-client-gen.py.
00003  *
00004  * This file can be distributed under the same terms as the specification from
00005  * which it was generated.
00006  */
00007 
00008 #ifndef IN_TP_QT_HEADER
00009 #error IN_TP_QT_HEADER
00010 #endif
00011 
00012 #include <TelepathyQt/Types>
00013 
00014 #include <QtGlobal>
00015 
00016 #include <QString>
00017 #include <QObject>
00018 #include <QVariant>
00019 
00020 #include <QDBusPendingReply>
00021 
00022 #include <TelepathyQt/AbstractInterface>
00023 #include <TelepathyQt/DBusProxy>
00024 #include <TelepathyQt/Global>
00025 
00026 namespace Tp
00027 {
00028 class PendingVariant;
00029 class PendingOperation;
00030 }
00031 
00032 namespace Tp
00033 {
00034 namespace Client
00035 {
00036 
00044 class TP_QT_EXPORT ConnectionManagerInterface : public Tp::AbstractInterface
00045 {
00046     Q_OBJECT
00047 
00048 public:
00055     static inline QLatin1String staticInterfaceName()
00056     {
00057         return QLatin1String("org.freedesktop.Telepathy.ConnectionManager");
00058     }
00059 
00067     ConnectionManagerInterface(
00068         const QString& busName,
00069         const QString& objectPath,
00070         QObject* parent = 0
00071     );
00072 
00081     ConnectionManagerInterface(
00082         const QDBusConnection& connection,
00083         const QString& busName,
00084         const QString& objectPath,
00085         QObject* parent = 0
00086     );
00087 
00094     ConnectionManagerInterface(Tp::DBusProxy *proxy);
00095 
00120     inline Tp::PendingVariant *requestPropertyProtocols() const
00121     {
00122         return internalRequestProperty(QLatin1String("Protocols"));
00123     }
00124 
00152     inline Tp::PendingVariant *requestPropertyInterfaces() const
00153     {
00154         return internalRequestProperty(QLatin1String("Interfaces"));
00155     }
00156 
00163     Tp::PendingVariantMap *requestAllProperties() const
00164     {
00165         return internalRequestAllProperties();
00166     }
00167 
00168 public Q_SLOTS:
00194     inline QDBusPendingReply<Tp::ParamSpecList> GetParameters(const QString& protocol, int timeout = -1)
00195     {
00196         if (!invalidationReason().isEmpty()) {
00197             return QDBusPendingReply<Tp::ParamSpecList>(QDBusMessage::createError(
00198                 invalidationReason(),
00199                 invalidationMessage()
00200             ));
00201         }
00202 
00203         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00204                 this->staticInterfaceName(), QLatin1String("GetParameters"));
00205         callMessage << QVariant::fromValue(protocol);
00206         return this->connection().asyncCall(callMessage, timeout);
00207     }
00208 
00224     inline QDBusPendingReply<QStringList> ListProtocols(int timeout = -1)
00225     {
00226         if (!invalidationReason().isEmpty()) {
00227             return QDBusPendingReply<QStringList>(QDBusMessage::createError(
00228                 invalidationReason(),
00229                 invalidationMessage()
00230             ));
00231         }
00232 
00233         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00234                 this->staticInterfaceName(), QLatin1String("ListProtocols"));
00235         return this->connection().asyncCall(callMessage, timeout);
00236     }
00237 
00315     inline QDBusPendingReply<QString, QDBusObjectPath> RequestConnection(const QString& protocol, const QVariantMap& parameters, int timeout = -1)
00316     {
00317         if (!invalidationReason().isEmpty()) {
00318             return QDBusPendingReply<QString, QDBusObjectPath>(QDBusMessage::createError(
00319                 invalidationReason(),
00320                 invalidationMessage()
00321             ));
00322         }
00323 
00324         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00325                 this->staticInterfaceName(), QLatin1String("RequestConnection"));
00326         callMessage << QVariant::fromValue(protocol) << QVariant::fromValue(parameters);
00327         return this->connection().asyncCall(callMessage, timeout);
00328     }
00329 
00330 Q_SIGNALS:
00348     void NewConnection(const QString& busName, const QDBusObjectPath& objectPath, const QString& protocol);
00349 
00350 protected:
00351     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
00352 };
00353 
00361 class TP_QT_EXPORT ProtocolInterface : public Tp::AbstractInterface
00362 {
00363     Q_OBJECT
00364 
00365 public:
00372     static inline QLatin1String staticInterfaceName()
00373     {
00374         return QLatin1String("org.freedesktop.Telepathy.Protocol");
00375     }
00376 
00384     ProtocolInterface(
00385         const QString& busName,
00386         const QString& objectPath,
00387         QObject* parent = 0
00388     );
00389 
00398     ProtocolInterface(
00399         const QDBusConnection& connection,
00400         const QString& busName,
00401         const QString& objectPath,
00402         QObject* parent = 0
00403     );
00404 
00411     ProtocolInterface(Tp::DBusProxy *proxy);
00412 
00420     explicit ProtocolInterface(const Tp::Client::ConnectionManagerInterface& mainInterface);
00421 
00429     ProtocolInterface(const Tp::Client::ConnectionManagerInterface& mainInterface, QObject* parent);
00430 
00454     inline Tp::PendingVariant *requestPropertyInterfaces() const
00455     {
00456         return internalRequestProperty(QLatin1String("Interfaces"));
00457     }
00458 
00485     inline Tp::PendingVariant *requestPropertyParameters() const
00486     {
00487         return internalRequestProperty(QLatin1String("Parameters"));
00488     }
00489 
00514     inline Tp::PendingVariant *requestPropertyConnectionInterfaces() const
00515     {
00516         return internalRequestProperty(QLatin1String("ConnectionInterfaces"));
00517     }
00518 
00584     inline Tp::PendingVariant *requestPropertyRequestableChannelClasses() const
00585     {
00586         return internalRequestProperty(QLatin1String("RequestableChannelClasses"));
00587     }
00588 
00638     inline Tp::PendingVariant *requestPropertyVCardField() const
00639     {
00640         return internalRequestProperty(QLatin1String("VCardField"));
00641     }
00642 
00681     inline Tp::PendingVariant *requestPropertyEnglishName() const
00682     {
00683         return internalRequestProperty(QLatin1String("EnglishName"));
00684     }
00685 
00715     inline Tp::PendingVariant *requestPropertyIcon() const
00716     {
00717         return internalRequestProperty(QLatin1String("Icon"));
00718     }
00719 
00765     inline Tp::PendingVariant *requestPropertyAuthenticationTypes() const
00766     {
00767         return internalRequestProperty(QLatin1String("AuthenticationTypes"));
00768     }
00769 
00776     Tp::PendingVariantMap *requestAllProperties() const
00777     {
00778         return internalRequestAllProperties();
00779     }
00780 
00781 public Q_SLOTS:
00819     inline QDBusPendingReply<QString> IdentifyAccount(const QVariantMap& parameters, int timeout = -1)
00820     {
00821         if (!invalidationReason().isEmpty()) {
00822             return QDBusPendingReply<QString>(QDBusMessage::createError(
00823                 invalidationReason(),
00824                 invalidationMessage()
00825             ));
00826         }
00827 
00828         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00829                 this->staticInterfaceName(), QLatin1String("IdentifyAccount"));
00830         callMessage << QVariant::fromValue(parameters);
00831         return this->connection().asyncCall(callMessage, timeout);
00832     }
00833 
00888     inline QDBusPendingReply<QString> NormalizeContact(const QString& contactID, int timeout = -1)
00889     {
00890         if (!invalidationReason().isEmpty()) {
00891             return QDBusPendingReply<QString>(QDBusMessage::createError(
00892                 invalidationReason(),
00893                 invalidationMessage()
00894             ));
00895         }
00896 
00897         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00898                 this->staticInterfaceName(), QLatin1String("NormalizeContact"));
00899         callMessage << QVariant::fromValue(contactID);
00900         return this->connection().asyncCall(callMessage, timeout);
00901     }
00902 
00903 protected:
00904     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
00905 };
00906 
00914 class TP_QT_EXPORT ProtocolInterfaceAddressingInterface : public Tp::AbstractInterface
00915 {
00916     Q_OBJECT
00917 
00918 public:
00925     static inline QLatin1String staticInterfaceName()
00926     {
00927         return QLatin1String("org.freedesktop.Telepathy.Protocol.Interface.Addressing");
00928     }
00929 
00937     ProtocolInterfaceAddressingInterface(
00938         const QString& busName,
00939         const QString& objectPath,
00940         QObject* parent = 0
00941     );
00942 
00951     ProtocolInterfaceAddressingInterface(
00952         const QDBusConnection& connection,
00953         const QString& busName,
00954         const QString& objectPath,
00955         QObject* parent = 0
00956     );
00957 
00964     ProtocolInterfaceAddressingInterface(Tp::DBusProxy *proxy);
00965 
00973     explicit ProtocolInterfaceAddressingInterface(const Tp::Client::ConnectionManagerInterface& mainInterface);
00974 
00982     ProtocolInterfaceAddressingInterface(const Tp::Client::ConnectionManagerInterface& mainInterface, QObject* parent);
00983 
01046     inline Tp::PendingVariant *requestPropertyAddressableVCardFields() const
01047     {
01048         return internalRequestProperty(QLatin1String("AddressableVCardFields"));
01049     }
01050 
01130     inline Tp::PendingVariant *requestPropertyAddressableURISchemes() const
01131     {
01132         return internalRequestProperty(QLatin1String("AddressableURISchemes"));
01133     }
01134 
01141     Tp::PendingVariantMap *requestAllProperties() const
01142     {
01143         return internalRequestAllProperties();
01144     }
01145 
01146 public Q_SLOTS:
01189     inline QDBusPendingReply<QString> NormalizeVCardAddress(const QString& VCardField, const QString& VCardAddress, int timeout = -1)
01190     {
01191         if (!invalidationReason().isEmpty()) {
01192             return QDBusPendingReply<QString>(QDBusMessage::createError(
01193                 invalidationReason(),
01194                 invalidationMessage()
01195             ));
01196         }
01197 
01198         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
01199                 this->staticInterfaceName(), QLatin1String("NormalizeVCardAddress"));
01200         callMessage << QVariant::fromValue(VCardField) << QVariant::fromValue(VCardAddress);
01201         return this->connection().asyncCall(callMessage, timeout);
01202     }
01203 
01264     inline QDBusPendingReply<QString> NormalizeContactURI(const QString& URI, int timeout = -1)
01265     {
01266         if (!invalidationReason().isEmpty()) {
01267             return QDBusPendingReply<QString>(QDBusMessage::createError(
01268                 invalidationReason(),
01269                 invalidationMessage()
01270             ));
01271         }
01272 
01273         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
01274                 this->staticInterfaceName(), QLatin1String("NormalizeContactURI"));
01275         callMessage << QVariant::fromValue(URI);
01276         return this->connection().asyncCall(callMessage, timeout);
01277     }
01278 
01279 protected:
01280     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
01281 };
01282 
01290 class TP_QT_EXPORT ProtocolInterfaceAvatarsInterface : public Tp::AbstractInterface
01291 {
01292     Q_OBJECT
01293 
01294 public:
01301     static inline QLatin1String staticInterfaceName()
01302     {
01303         return QLatin1String("org.freedesktop.Telepathy.Protocol.Interface.Avatars");
01304     }
01305 
01313     ProtocolInterfaceAvatarsInterface(
01314         const QString& busName,
01315         const QString& objectPath,
01316         QObject* parent = 0
01317     );
01318 
01327     ProtocolInterfaceAvatarsInterface(
01328         const QDBusConnection& connection,
01329         const QString& busName,
01330         const QString& objectPath,
01331         QObject* parent = 0
01332     );
01333 
01340     ProtocolInterfaceAvatarsInterface(Tp::DBusProxy *proxy);
01341 
01349     explicit ProtocolInterfaceAvatarsInterface(const Tp::Client::ConnectionManagerInterface& mainInterface);
01350 
01358     ProtocolInterfaceAvatarsInterface(const Tp::Client::ConnectionManagerInterface& mainInterface, QObject* parent);
01359 
01371     inline Tp::PendingVariant *requestPropertySupportedAvatarMIMETypes() const
01372     {
01373         return internalRequestProperty(QLatin1String("SupportedAvatarMIMETypes"));
01374     }
01375 
01387     inline Tp::PendingVariant *requestPropertyMinimumAvatarHeight() const
01388     {
01389         return internalRequestProperty(QLatin1String("MinimumAvatarHeight"));
01390     }
01391 
01403     inline Tp::PendingVariant *requestPropertyMinimumAvatarWidth() const
01404     {
01405         return internalRequestProperty(QLatin1String("MinimumAvatarWidth"));
01406     }
01407 
01419     inline Tp::PendingVariant *requestPropertyRecommendedAvatarHeight() const
01420     {
01421         return internalRequestProperty(QLatin1String("RecommendedAvatarHeight"));
01422     }
01423 
01435     inline Tp::PendingVariant *requestPropertyRecommendedAvatarWidth() const
01436     {
01437         return internalRequestProperty(QLatin1String("RecommendedAvatarWidth"));
01438     }
01439 
01451     inline Tp::PendingVariant *requestPropertyMaximumAvatarHeight() const
01452     {
01453         return internalRequestProperty(QLatin1String("MaximumAvatarHeight"));
01454     }
01455 
01467     inline Tp::PendingVariant *requestPropertyMaximumAvatarWidth() const
01468     {
01469         return internalRequestProperty(QLatin1String("MaximumAvatarWidth"));
01470     }
01471 
01483     inline Tp::PendingVariant *requestPropertyMaximumAvatarBytes() const
01484     {
01485         return internalRequestProperty(QLatin1String("MaximumAvatarBytes"));
01486     }
01487 
01494     Tp::PendingVariantMap *requestAllProperties() const
01495     {
01496         return internalRequestAllProperties();
01497     }
01498 
01499 protected:
01500     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
01501 };
01502 
01510 class TP_QT_EXPORT ProtocolInterfacePresenceInterface : public Tp::AbstractInterface
01511 {
01512     Q_OBJECT
01513 
01514 public:
01521     static inline QLatin1String staticInterfaceName()
01522     {
01523         return QLatin1String("org.freedesktop.Telepathy.Protocol.Interface.Presence");
01524     }
01525 
01533     ProtocolInterfacePresenceInterface(
01534         const QString& busName,
01535         const QString& objectPath,
01536         QObject* parent = 0
01537     );
01538 
01547     ProtocolInterfacePresenceInterface(
01548         const QDBusConnection& connection,
01549         const QString& busName,
01550         const QString& objectPath,
01551         QObject* parent = 0
01552     );
01553 
01560     ProtocolInterfacePresenceInterface(Tp::DBusProxy *proxy);
01561 
01569     explicit ProtocolInterfacePresenceInterface(const Tp::Client::ConnectionManagerInterface& mainInterface);
01570 
01578     ProtocolInterfacePresenceInterface(const Tp::Client::ConnectionManagerInterface& mainInterface, QObject* parent);
01579 
01593     inline Tp::PendingVariant *requestPropertyStatuses() const
01594     {
01595         return internalRequestProperty(QLatin1String("Statuses"));
01596     }
01597 
01604     Tp::PendingVariantMap *requestAllProperties() const
01605     {
01606         return internalRequestAllProperties();
01607     }
01608 
01609 protected:
01610     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
01611 };
01612 }
01613 }
01614 Q_DECLARE_METATYPE(Tp::Client::ConnectionManagerInterface*)
01615 Q_DECLARE_METATYPE(Tp::Client::ProtocolInterface*)
01616 Q_DECLARE_METATYPE(Tp::Client::ProtocolInterfaceAddressingInterface*)
01617 Q_DECLARE_METATYPE(Tp::Client::ProtocolInterfaceAvatarsInterface*)
01618 Q_DECLARE_METATYPE(Tp::Client::ProtocolInterfacePresenceInterface*)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01046.html0000644000175200001440000000465512000060453021632 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::HandlerCapabilities Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01095.html0000644000175200001440000003044212000060453021627 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelInterfaceSASLAuthenticationInterface Member List
This is the complete list of members for Tp::Client::ChannelInterfaceSASLAuthenticationInterface, including all inherited members.
AbortSASL(uint reason, const QString &debugMessage, int timeout=-1)Tp::Client::ChannelInterfaceSASLAuthenticationInterface [inline, slot]
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
AcceptSASL(int timeout=-1)Tp::Client::ChannelInterfaceSASLAuthenticationInterface [inline, slot]
ChannelInterfaceSASLAuthenticationInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfaceSASLAuthenticationInterface
ChannelInterfaceSASLAuthenticationInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfaceSASLAuthenticationInterface
ChannelInterfaceSASLAuthenticationInterface(Tp::DBusProxy *proxy)Tp::Client::ChannelInterfaceSASLAuthenticationInterface
ChannelInterfaceSASLAuthenticationInterface(const Tp::Client::ChannelInterface &mainInterface)Tp::Client::ChannelInterfaceSASLAuthenticationInterface [explicit]
ChannelInterfaceSASLAuthenticationInterface(const Tp::Client::ChannelInterface &mainInterface, QObject *parent)Tp::Client::ChannelInterfaceSASLAuthenticationInterface
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ChannelInterfaceSASLAuthenticationInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
NewChallenge(const QByteArray &challengeData)Tp::Client::ChannelInterfaceSASLAuthenticationInterface [signal]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ChannelInterfaceSASLAuthenticationInterface [inline]
requestPropertyAuthorizationIdentity() const Tp::Client::ChannelInterfaceSASLAuthenticationInterface [inline]
requestPropertyAvailableMechanisms() const Tp::Client::ChannelInterfaceSASLAuthenticationInterface [inline]
requestPropertyCanTryAgain() const Tp::Client::ChannelInterfaceSASLAuthenticationInterface [inline]
requestPropertyDefaultRealm() const Tp::Client::ChannelInterfaceSASLAuthenticationInterface [inline]
requestPropertyDefaultUsername() const Tp::Client::ChannelInterfaceSASLAuthenticationInterface [inline]
requestPropertyHasInitialData() const Tp::Client::ChannelInterfaceSASLAuthenticationInterface [inline]
requestPropertyMaySaveResponse() const Tp::Client::ChannelInterfaceSASLAuthenticationInterface [inline]
requestPropertySASLError() const Tp::Client::ChannelInterfaceSASLAuthenticationInterface [inline]
requestPropertySASLErrorDetails() const Tp::Client::ChannelInterfaceSASLAuthenticationInterface [inline]
requestPropertySASLStatus() const Tp::Client::ChannelInterfaceSASLAuthenticationInterface [inline]
Respond(const QByteArray &responseData, int timeout=-1)Tp::Client::ChannelInterfaceSASLAuthenticationInterface [inline, slot]
SASLStatusChanged(uint status, const QString &reason, const QVariantMap &details)Tp::Client::ChannelInterfaceSASLAuthenticationInterface [signal]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
StartMechanism(const QString &mechanism, int timeout=-1)Tp::Client::ChannelInterfaceSASLAuthenticationInterface [inline, slot]
StartMechanismWithData(const QString &mechanism, const QByteArray &initialData, int timeout=-1)Tp::Client::ChannelInterfaceSASLAuthenticationInterface [inline, slot]
staticInterfaceName()Tp::Client::ChannelInterfaceSASLAuthenticationInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01115.html0000644000175200001440000001771112000060453021624 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ClientInterfaceRequestsInterface Member List
This is the complete list of members for Tp::Client::ClientInterfaceRequestsInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
AddRequest(const QDBusObjectPath &request, const QVariantMap &properties, int timeout=-1)Tp::Client::ClientInterfaceRequestsInterface [inline, slot]
ClientInterfaceRequestsInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ClientInterfaceRequestsInterface
ClientInterfaceRequestsInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ClientInterfaceRequestsInterface
ClientInterfaceRequestsInterface(Tp::DBusProxy *proxy)Tp::Client::ClientInterfaceRequestsInterface
ClientInterfaceRequestsInterface(const Tp::Client::ClientInterface &mainInterface)Tp::Client::ClientInterfaceRequestsInterface [explicit]
ClientInterfaceRequestsInterface(const Tp::Client::ClientInterface &mainInterface, QObject *parent)Tp::Client::ClientInterfaceRequestsInterface
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ClientInterfaceRequestsInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
RemoveRequest(const QDBusObjectPath &request, const QString &error, const QString &message, int timeout=-1)Tp::Client::ClientInterfaceRequestsInterface [inline, slot]
requestAllProperties() const Tp::Client::ClientInterfaceRequestsInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ClientInterfaceRequestsInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00752.html0000644000175200001440000000364312000060453021631 0ustar00collabora-develusers00000000000000 Media session handler proxies
   Home · All Classes · All Namespaces · Modules · Functions · Files
Media session handler proxies

Classes


Detailed Description

Proxy objects representing remote Telepathy MediaSessionHandler objects.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_vars_0x70.html0000644000175200001440000001045512000060453024633 0ustar00collabora-develusers00000000000000 Class Members - Variables
   Home · All Classes · All Namespaces · Modules · Functions · Files


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/namespacemembers_eval.html0000644000175200001440000001116312000060453025325 0ustar00collabora-develusers00000000000000 Namespace Members
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- t -

  • TLSCertificateRejectReasonExpired : Tp
  • TLSCertificateRejectReasonFingerprintMismatch : Tp
  • TLSCertificateRejectReasonHostnameMismatch : Tp
  • TLSCertificateRejectReasonInsecure : Tp
  • TLSCertificateRejectReasonLimitExceeded : Tp
  • TLSCertificateRejectReasonNotActivated : Tp
  • TLSCertificateRejectReasonRevoked : Tp
  • TLSCertificateRejectReasonSelfSigned : Tp
  • TLSCertificateRejectReasonUnknown : Tp
  • TLSCertificateRejectReasonUntrusted : Tp
  • TLSCertificateStateAccepted : Tp
  • TLSCertificateStatePending : Tp
  • TLSCertificateStateRejected : Tp
  • TubeChannelStateLocalPending : Tp
  • TubeChannelStateNotOffered : Tp
  • TubeChannelStateOpen : Tp
  • TubeChannelStateRemotePending : Tp
  • TubeStateLocalPending : Tp
  • TubeStateOpen : Tp
  • TubeStateRemotePending : Tp
  • TubeTypeDBus : Tp
  • TubeTypeStream : Tp


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00861.html0000644000175200001440000000630512000060453021630 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MemberFunctor1< R, T, Arg1 > Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00197.html0000644000175200001440000003553712000060453021643 0ustar00collabora-develusers00000000000000 Tp::ContactFactory Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The ContactFactory class is responsible for constructing Contact objects according to application-defined settings. More...

#include <TelepathyQt/ContactFactory>

Inherits Tp::RefCounted.

List of all members.

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

The ContactFactory class is responsible for constructing Contact objects according to application-defined settings.


Constructor & Destructor Documentation

Class destructor.

Tp::ContactFactory::ContactFactory ( const Features features) [protected]

Class constructor.

Parameters:
featuresThe features to make ready on constructed contacts.

Member Function Documentation

ContactFactoryPtr Tp::ContactFactory::create ( const Features features = Features()) [static]

Creates a new ContactFactory.

Parameters:
featuresThe features to make ready on constructed contacts.
Returns:
A pointer to the created factory.

Gets the features this factory will make ready on constructed contacts.

Returns:
The set of features.
void Tp::ContactFactory::addFeature ( const Feature feature)

Adds a single feature this factory will make ready on further constructed contacts.

No feature removal is provided, to guard against uncooperative modules removing features other modules have set and depend on.

Parameters:
featureThe feature to add.
void Tp::ContactFactory::addFeatures ( const Features features)

Adds a set of features this factory will make ready on further constructed contacts.

No feature removal is provided, to guard against uncooperative modules removing features other modules have set and depend on.

Parameters:
featuresThe features to add.
ContactPtr Tp::ContactFactory::construct ( Tp::ContactManager manager,
const ReferencedHandles handle,
const Features features,
const QVariantMap &  attributes 
) const [protected, virtual]

Can be used by subclasses to override the Contact subclass constructed by the factory.

The default implementation constructs Tp::Contact objects.

Parameters:
managerThe contact manager this contact belongs.
handleThe contact handle.
featuresThe desired contact features.
attributesThe desired contact attributes.
Returns:
A pointer to the constructed contact.
PendingOperation * Tp::ContactFactory::prepare ( const ContactPtr &  contact) const [protected, virtual]

Can be used by subclasses to do arbitrary manipulation on constructed Contact objects.

The default implementation does nothing.

Parameters:
contactThe contact to be prepared.
Returns:
A PendingOperation used to prepare the contact or NULL if there is nothing to prepare.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01111.html0000644000175200001440000002735212000060453021622 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelTypeTubesInterface Member List
This is the complete list of members for Tp::Client::ChannelTypeTubesInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
AcceptDBusTube(uint ID, int timeout=-1)Tp::Client::ChannelTypeTubesInterface [inline, slot]
AcceptStreamTube(uint ID, uint addressType, uint accessControl, const QDBusVariant &accessControlParam, int timeout=-1)Tp::Client::ChannelTypeTubesInterface [inline, slot]
ChannelTypeTubesInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelTypeTubesInterface
ChannelTypeTubesInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelTypeTubesInterface
ChannelTypeTubesInterface(Tp::DBusProxy *proxy)Tp::Client::ChannelTypeTubesInterface
ChannelTypeTubesInterface(const Tp::Client::ChannelInterface &mainInterface)Tp::Client::ChannelTypeTubesInterface [explicit]
ChannelTypeTubesInterface(const Tp::Client::ChannelInterface &mainInterface, QObject *parent)Tp::Client::ChannelTypeTubesInterface
CloseTube(uint ID, int timeout=-1)Tp::Client::ChannelTypeTubesInterface [inline, slot]
DBusNamesChanged(uint ID, const Tp::DBusTubeMemberList &added, const Tp::UIntList &removed)Tp::Client::ChannelTypeTubesInterface [signal]
GetAvailableStreamTubeTypes(int timeout=-1)Tp::Client::ChannelTypeTubesInterface [inline, slot]
GetAvailableTubeTypes(int timeout=-1)Tp::Client::ChannelTypeTubesInterface [inline, slot]
GetDBusNames(uint ID, int timeout=-1)Tp::Client::ChannelTypeTubesInterface [inline, slot]
GetDBusTubeAddress(uint ID, int timeout=-1)Tp::Client::ChannelTypeTubesInterface [inline, slot]
GetStreamTubeSocketAddress(uint ID, int timeout=-1)Tp::Client::ChannelTypeTubesInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ChannelTypeTubesInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
ListTubes(int timeout=-1)Tp::Client::ChannelTypeTubesInterface [inline, slot]
NewTube(uint ID, uint initiator, uint type, const QString &service, const QVariantMap &parameters, uint state)Tp::Client::ChannelTypeTubesInterface [signal]
OfferDBusTube(const QString &service, const QVariantMap &parameters, int timeout=-1)Tp::Client::ChannelTypeTubesInterface [inline, slot]
OfferStreamTube(const QString &service, const QVariantMap &parameters, uint addressType, const QDBusVariant &address, uint accessControl, const QDBusVariant &accessControlParam, int timeout=-1)Tp::Client::ChannelTypeTubesInterface [inline, slot]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ChannelTypeTubesInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ChannelTypeTubesInterface [inline, static]
StreamTubeNewConnection(uint ID, uint handle)Tp::Client::ChannelTypeTubesInterface [signal]
TubeClosed(uint ID)Tp::Client::ChannelTypeTubesInterface [signal]
TubeStateChanged(uint ID, uint state)Tp::Client::ChannelTypeTubesInterface [signal]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00059.html0000644000175200001440000001165312000060453021631 0ustar00collabora-develusers00000000000000 Tp::AvatarTokenMap Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AvatarTokenMap Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<uint, QString>, but needed to have a discrete type in the Qt type system.

A dictionary whose keys are contact handles and whose values are avatar tokens.


Constructor & Destructor Documentation

Tp::AvatarTokenMap::AvatarTokenMap ( const QMap< uint, QString > &  a) [inline]

Member Function Documentation

AvatarTokenMap& Tp::AvatarTokenMap::operator= ( const QMap< uint, QString > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/open.png0000644000175200001440000000016612000060453021571 0ustar00collabora-develusers00000000000000PNG  IHDR =IDATx1 ت@@ ]01QXY~Jr?D>n F͐ }\ áIENDB`telepathy-qt-0.9.3/doc/html/a00177.html0000644000175200001440000017173012000060453021635 0ustar00collabora-develusers00000000000000 Tp::Client::ConnectionInterfaceContactListInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceContactListInterface Class Reference

#include <TelepathyQt/Connection>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Connection.Interface.ContactList".


Constructor & Destructor Documentation

Tp::Client::ConnectionInterfaceContactListInterface::ConnectionInterfaceContactListInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceContactListInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ConnectionInterfaceContactListInterface::ConnectionInterfaceContactListInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceContactListInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ConnectionInterfaceContactListInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ConnectionInterfaceContactListInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ConnectionInterfaceContactListInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Connection.Interface.ContactList", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property ContactListState of type uint.

The progress made in retrieving the contact list. Change notification is via ContactListStateChanged.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property ContactListPersists of type bool.

If true, presence subscriptions (in both directions) on this connection are stored by the server or other infrastructure.

XMPP, MSN, ICQ, etc. all behave like this.

If false, presence subscriptions on this connection are not stored.

In SIMPLE (SIP), clients are expected to keep a record of subscriptions, as described below. In link-local XMPP, subscriptions are implicit (everyone on the local network receives presence from everyone else) so nothing is ever stored.

If CanChangeContactList is true, Telepathy clients (e.g. user interfaces or address books) MAY keep a record of permission to publish and requests to subscribe locally, and attempt to restore it for each Connection. If ContactListPersists is false, clients MAY do this for all contacts; if ContactListPersists is true, clients SHOULD NOT change the state of contacts that were not changed locally.

In SIMPLE (SIP), ContactListPersists is false, but CanChangeContactList is true. Presence will not be received unless clients renew any subscriptions they have for each connection, in the way described. There is no server-side storage, so clients have no alternative but to maintain independent contact lists.

In protocols like XMPP and MSN, it may be useful for clients to queue up subscription requests or removals made while offline and process them next time the connection is online. However, clients should only replay the changes, rather than resetting the contact list to match a stored copy, to avoid overwriting changes that were made on the server.

Clients that replay requests like this SHOULD do so by calling AuthorizePublication to pre-approve publication of presence to the appropriate contacts, followed by RequestSubscription to request the appropriate contacts' presences.

This property cannot change after the connection has moved to the Connected state. Until then, its value is undefined, and it may change at any time, without notification.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property CanChangeContactList of type bool.

If true, presence subscription and publication can be changed using the RequestSubscription() , AuthorizePublication() and RemoveContacts() methods.

If false, all of those methods will always fail; they SHOULD raise the error org.freedesktop.Telepathy.Error.NotImplemented.

In XEP-0174 "Serverless Messaging" (link-local XMPP), presence is implicitly published to everyone in the local subnet, so the user cannot control their presence publication.

This property cannot change after the connection has moved to the Connected state. Until then, its value is undefined, and it may change at any time, without notification.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property RequestUsesMessage of type bool.

If true, the Message parameter to RequestSubscription() is likely to be significant, and user interfaces SHOULD prompt the user for a message to send with the request; a message such as "I would like to add you to my contact list", translated into the local user's language, might make a suitable default.

This matches user expectations in XMPP and ICQ, for instance.

If false, the parameter is ignored; user interfaces SHOULD avoid prompting the user, and SHOULD pass an empty string to RequestSubscription.

FIXME: is there any such protocol?

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property DownloadAtConnection of type bool.

If true, the contact list is automatically downloaded at connection. If false, the contact list is only downloaded when requested explicitely with Download() .

Downloading the contact list uses bandwidth and is not always necessary or desired. For example, a client could cache the contact list from previous connections and accept less regular updates, it could get the contact list from an out-of-band protocol-specific way, or it could not need the contact list at all.

Connection managers MUST default to true.

If a connection manager starts supporting this property but defaults to false, it would break all existing clients that don't call Download() .

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply<Tp::ContactAttributesMap> Tp::Client::ConnectionInterfaceContactListInterface::GetContactListAttributes ( const QStringList &  interfaces,
bool  hold,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method GetContactListAttributes on the remote object.

Return some contact attributes for a list of contacts associated with the user. This list MUST include at least:

  • all contacts whose subscribe attribute is not No
  • all contacts whose publish attribute is not No

but MAY contain other contacts.

For instance, on XMPP, all contacts on the roster would appear here even if they have subscription="none", unless there's reason to believe the user does not want to see them (such as having been blocked).

This list does not need to contain every visible contact: for instance, contacts seen in XMPP or IRC chatrooms SHOULD NOT appear here. Blocked contacts SHOULD NOT appear here, unless they still have a non-No subscribe or publish attribute for some reason.

It's reasonable to assume that blocked contacts should not be visible to the user unless they specifically go looking for them, at least in protocols like XMPP where blocking a contact suppresses presence.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
interfaces

A list of strings indicating which D-Bus interfaces the calling process is interested in. Equivalent to the corresponding argument to ConnectionInterfaceContactsInterface::GetContactAttributes() , except that if this list does not contain the ContactList interface itself, it is treated as though that interface was also requested.

hold

If true, all handles that appear as keys in the result have been held on behalf of the calling process, as if by a call to ConnectionInterface::HoldHandles() . (If ConnectionInterface::HasImmortalHandles is true, which SHOULD be the case in all new connection managers, this has no effect.)

timeoutThe timeout in milliseconds.
Returns:

A dictionary mapping the contact handles to contact attributes, equivalent to the result of ConnectionInterfaceContactsInterface::GetContactAttributes() .

QDBusPendingReply Tp::Client::ConnectionInterfaceContactListInterface::RequestSubscription ( const Tp::UIntList contacts,
const QString &  message,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method RequestSubscription on the remote object.

Request that the given contacts allow the local user to subscribe to their presence, i.e. that their subscribe attribute becomes Yes.

Connection managers SHOULD NOT attempt to enforce a mutual-subscription policy (i.e. when this method is called, they should not automatically allow the contacts to see the local user's presence). User interfaces that require mutual subscription MAY call AuthorizePublication() at the same time as this method.

Whether to enforce mutual subscription is a matter of policy, so it is left to the user interface and/or the server.

Before calling this method on a connection where ConnectionInterfaceAliasingInterface::GetAliasFlags() returns the User_Set flag, user interfaces SHOULD obtain, from the user, an alias to identify the contact in future, and store it using ConnectionInterfaceAliasingInterface::SetAliases() .

The user MAY be prompted using the contact's current self-assigned nickname, or something derived from the contact's (presumably self-assigned) identifier, as a default, but these names chosen by the contact SHOULD NOT be used without user approval.

This is a generalization of XEP-0165 "Best Practices to Discourage JID Mimicking") to protocols other than XMPP. A reasonable user interface for this, as used in many XMPP clients, is to have a text entry for the alias adjacent to the text entry for the identifier to add.

For contacts with subscribe=Yes, this method has no effect. It MUST return successfully if all contacts are in this state.

For contacts with subscribe=Ask, this method SHOULD send a new request, with the given message, if allowed by the underlying protocol.

For contacts with subscribe=No or subscribe=Rejected, this method SHOULD request that the contact allows the local user to subscribe to their presence; in general, this will change their publish attribute to Ask (although it could change directly to Yes in some situations).

Any state changes that immediately result from this request MUST be signalled via ContactsChanged() before this method returns.

This makes it easy for user interfaces to see what practical effect this method had.

If the remote contact accepts the request, their subscribe attribute will later change from Ask to Yes.

If the remote contact explicitly rejects the request (in protocols that allow this), their subscribe attribute will later change from Ask to Rejected.

If the subscription request is cancelled by the local user, the contact's subscribe attribute will change from Ask to No.

This method SHOULD NOT be called until the ContactListState changes to Success. If the ContactListState changes to Failure, this method SHOULD raise the same error as GetContactListAttributes() .

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
contacts

One or more contacts to whom requests are to be sent.

message

An optional plain-text message from the user, to send to those contacts with the subscription request. The RequestUsesMessage property indicates whether this message will be used or ignored.

Clients SHOULD NOT send a non-empty message without first giving the user an opportunity to edit it.

These messages are typically presented to the remote contact as if the user had typed them, so as a minimum, the user should be allowed to see what the UI will be saying on their behalf.

Connections where this message is not useful MUST still allow it to be non-empty.

timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ConnectionInterfaceContactListInterface::AuthorizePublication ( const Tp::UIntList contacts,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method AuthorizePublication on the remote object.

For each of the given contacts, request that the local user's presence is sent to that contact, i.e. that their publish attribute becomes Yes.

Connection managers SHOULD NOT attempt to enforce a mutual-subscription policy (i.e. when this method is called, they should not automatically request that the contacts allow the user to subscribe to their presence). User interfaces that require mutual subscription MAY call RequestSubscription() at the same time as this method.

Whether to enforce mutual subscription is a matter of policy, so it is left to the user interface and/or the server.

For contacts with publish=Yes, this method has no effect; it MUST return successfully if all contacts given have this state.

For contacts with publish=Ask, this method accepts the contact's request to see the local user's presence, changing their publish attribute from Ask to Yes.

For contacts with publish=No, if the protocol allows it, this method allows the contacts to see the local user's presence even though they have not requested it, changing their publish attribute from No to Yes. Otherwise, it merely records the fact that presence publication to those contacts is allowed; if any of those contacts ask to receive the local user's presence later in the lifetime of the connection, the connection SHOULD immediately allow them to do so, changing their publish attribute directly from No to Yes.

This makes it easy to implement the common UI policy that if the user attempts to subscribe to a contact's presence, requests for reciprocal subscription are automatically approved.

Any state changes that immediately result from this request MUST be signalled via ContactsChanged() before this method returns.

This makes it easy for user interfaces to see what practical effect this method had.

This method SHOULD NOT be called until the ContactListState changes to Success. If the ContactListState changes to Failure, this method SHOULD raise the same error as GetContactListAttributes() .

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
contacts

One or more contacts to authorize.

timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ConnectionInterfaceContactListInterface::RemoveContacts ( const Tp::UIntList contacts,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method RemoveContacts on the remote object.

Remove the given contacts from the contact list entirely. It is protocol-dependent whether this works, and under which circumstances.

If possible, this method SHOULD set the contacts' subscribe and publish attributes to No, remove any stored aliases for those contacts, and remove the contacts from the result of GetContactListAttributes() .

This method SHOULD succeed even if it was not possible to carry out the request entirely or for all contacts (for instance, if there is an outstanding request to subscribe to the contact's presence, and it's not possible to cancel such requests). However, all signals that immediately result from this method call MUST be emitted before it returns, so that clients can interpret the result.

User interfaces removing a contact from the contact list are unlikely to want spurious failure notifications resulting from limitations of a particular protocol. However, emitting the signals first means that if a client does want to check exactly what happened, it can wait for the method to return (while applying change-notification signals to its local cache of the contact list's state), then consult its local cache of the contact list's state to see whether the contact is still there.

This method SHOULD NOT be called until the ContactListState changes to Success. If the ContactListState changes to Failure, this method SHOULD raise the same error as GetContactListAttributes() .

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
contacts

One or more contacts to remove.

timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ConnectionInterfaceContactListInterface::Unsubscribe ( const Tp::UIntList contacts,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method Unsubscribe on the remote object.

Attempt to set the given contacts' subscribe attribute to No, i.e. stop receiving their presence.

For contacts with subscribe=Ask, this attempts to cancel an earlier request to subscribe to the contact's presence; for contacts with subscribe=Yes, this attempts to unsubscribe from the contact's presence.

As with RemoveContacts() , this method SHOULD succeed even if it was not possible to carry out the request entirely or for all contacts; however, all signals that immediately result from this method call MUST be emitted before it returns.

This method SHOULD NOT be called until the ContactListState changes to Success. If the ContactListState changes to Failure, this method SHOULD raise the same error as GetContactListAttributes() .

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
contacts

One or more contacts to remove.

timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ConnectionInterfaceContactListInterface::Unpublish ( const Tp::UIntList contacts,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method Unpublish on the remote object.

Attempt to set the given contacts' publish attribute to No, i.e. stop sending presence to them.

For contacts with publish=Ask, this method explicitly rejects the contact's request to subscribe to the user's presence; for contacts with publish=Yes, this method attempts to prevent the user's presence from being received by the contact.

As with RemoveContacts() , this method SHOULD succeed even if it was not possible to carry out the request entirely or for all contacts; however, all signals that immediately result from this method call MUST be emitted before it returns.

This method SHOULD NOT be called until the ContactListState changes to Success. If the ContactListState changes to Failure, this method SHOULD raise the same error as GetContactListAttributes() .

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
contacts

One or more contacts to remove.

timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ConnectionInterfaceContactListInterface::Download ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method Download on the remote object.

Download the contact list from the server. If DownloadAtConnection is true, Download does nothing.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.

Represents the signal ContactListStateChanged on the remote object.

Emitted when ContactListState changes.

Parameters:
contactListStateThe new value of ContactListState.

Represents the signal ContactsChangedWithID on the remote object.

Emitted when the contact list becomes available, when contacts' basic stored properties change, when new contacts are added to the list that would be returned by GetContactListAttributes() , or when contacts are removed from that list.

This provides change notification for that list, and for contacts' subscribe, publish and publish-request attributes.

Connection managers SHOULD also emit this signal when a contact requests that the user's presence is published to them, even if that contact's publish attribute is already Ask and the publish-request has not changed.

If the same contact sends 10 identical requests, 10 identical signals should be emitted.

Parameters:
changesThe new subscribe, publish and publish-request attributes of all the contacts that have been added, and all the contacts for which those attributes have changed.
identifiers The identifiers of the contacts in the Changes map.
removals The contacts that have been removed from the list that would be returned by GetContactListAttributes() . This also implies that they have subscribe = No and publish = No; contacts MUST NOT be listed both here and in Changes.

Represents the signal ContactsChanged on the remote object.

Emitted immediately after ContactsChangedWithID() , under the same circumstances.

If clients receive this signal without first receiving a corresponding ContactsChangedWithID() , they MUST assume that only this signal will be emitted.

Parameters:
changesThe same as the corresponding argument to ContactsChangedWithID.
removalsThe same as the corresponding argument to ContactsChangedWithID, except that it only includes handles and not identifiers.
void Tp::Client::ConnectionInterfaceContactListInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_vars_0x74.html0000644000175200001440000000602112000060453024631 0ustar00collabora-develusers00000000000000 Class Members - Variables
   Home · All Classes · All Namespaces · Modules · Functions · Files


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01109.html0000644000175200001440000002522412000060453021625 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelTypeStreamedMediaInterface Member List
This is the complete list of members for Tp::Client::ChannelTypeStreamedMediaInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ChannelTypeStreamedMediaInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelTypeStreamedMediaInterface
ChannelTypeStreamedMediaInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelTypeStreamedMediaInterface
ChannelTypeStreamedMediaInterface(Tp::DBusProxy *proxy)Tp::Client::ChannelTypeStreamedMediaInterface
ChannelTypeStreamedMediaInterface(const Tp::Client::ChannelInterface &mainInterface)Tp::Client::ChannelTypeStreamedMediaInterface [explicit]
ChannelTypeStreamedMediaInterface(const Tp::Client::ChannelInterface &mainInterface, QObject *parent)Tp::Client::ChannelTypeStreamedMediaInterface
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ChannelTypeStreamedMediaInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
ListStreams(int timeout=-1)Tp::Client::ChannelTypeStreamedMediaInterface [inline, slot]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
RemoveStreams(const Tp::UIntList &streams, int timeout=-1)Tp::Client::ChannelTypeStreamedMediaInterface [inline, slot]
requestAllProperties() const Tp::Client::ChannelTypeStreamedMediaInterface [inline]
requestPropertyImmutableStreams() const Tp::Client::ChannelTypeStreamedMediaInterface [inline]
requestPropertyInitialAudio() const Tp::Client::ChannelTypeStreamedMediaInterface [inline]
requestPropertyInitialVideo() const Tp::Client::ChannelTypeStreamedMediaInterface [inline]
RequestStreamDirection(uint streamID, uint streamDirection, int timeout=-1)Tp::Client::ChannelTypeStreamedMediaInterface [inline, slot]
RequestStreams(uint contactHandle, const Tp::UIntList &types, int timeout=-1)Tp::Client::ChannelTypeStreamedMediaInterface [inline, slot]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ChannelTypeStreamedMediaInterface [inline, static]
StreamAdded(uint streamID, uint contactHandle, uint streamType)Tp::Client::ChannelTypeStreamedMediaInterface [signal]
StreamDirectionChanged(uint streamID, uint streamDirection, uint pendingFlags)Tp::Client::ChannelTypeStreamedMediaInterface [signal]
StreamError(uint streamID, uint errorCode, const QString &message)Tp::Client::ChannelTypeStreamedMediaInterface [signal]
StreamRemoved(uint streamID)Tp::Client::ChannelTypeStreamedMediaInterface [signal]
StreamStateChanged(uint streamID, uint streamState)Tp::Client::ChannelTypeStreamedMediaInterface [signal]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00280.html0000644000175200001440000002430412000060453021622 0ustar00collabora-develusers00000000000000 Tp::MemberFunctor7< R, T, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 > Struct Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MemberFunctor7< R, T, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 > Struct Template Reference

#include </home/collabora-devel/kde/src/telepathy-qt4/TelepathyQt/functors.h>

Inherits Tp::BaseFunctor.

List of all members.

Public Types

Public Member Functions

Public Attributes

template<class R, class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7>
struct Tp::MemberFunctor7< R, T, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >


Member Typedef Documentation

template<class R, class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7>
typedef R(T::* Tp::MemberFunctor7< R, T, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >::FunctionType)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7)
template<class R, class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7>
typedef R Tp::MemberFunctor7< R, T, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >::ResultType

Constructor & Destructor Documentation

template<class R, class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7>
Tp::MemberFunctor7< R, T, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >::MemberFunctor7 ( T *  object,
FunctionType  fn 
) [inline]

Member Function Documentation

template<class R, class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7>
ResultType Tp::MemberFunctor7< R, T, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >::operator() ( Arg1  a1,
Arg2  a2,
Arg3  a3,
Arg4  a4,
Arg5  a5,
Arg6  a6,
Arg7  a7 
) const [inline]

Member Data Documentation

template<class R, class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7>
T* Tp::MemberFunctor7< R, T, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >::object
template<class R, class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7>
FunctionType Tp::MemberFunctor7< R, T, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >::fn


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00375.html0000644000175200001440000002343212000060453021630 0ustar00collabora-develusers00000000000000 Tp::ContactSearchChannel::SearchStateChangeDetails Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactSearchChannel::SearchStateChangeDetails Class Reference

The ContactSearchChannel::SearchStateChangeDetails class provides a wrapper around the details for a search state change. More...

#include <TelepathyQt/ContactSearchChannel>

List of all members.

Public Member Functions


Detailed Description

The ContactSearchChannel::SearchStateChangeDetails class provides a wrapper around the details for a search state change.

See also:
ContactSearchChannel

Constructor & Destructor Documentation


Member Function Documentation

ContactSearchChannel::SearchStateChangeDetails & Tp::ContactSearchChannel::SearchStateChangeDetails::operator= ( const SearchStateChangeDetails other)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00753.html0000644000175200001440000000363712000060453021635 0ustar00collabora-develusers00000000000000 Media stream handler proxies
   Home · All Classes · All Namespaces · Modules · Functions · Files
Media stream handler proxies

Classes


Detailed Description

Proxy objects representing remote Telepathy MediaStreamHandler objects.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_func_0x6f.html0000644000175200001440000004750312000060453024704 0ustar00collabora-develusers00000000000000 Class Members - Functions
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- o -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00233.html0000644000175200001440000002421612000060453021622 0ustar00collabora-develusers00000000000000 Tp::FixedFeatureFactory Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::FixedFeatureFactory Class Reference

The FixedFeatureFactory class is a base class for all D-Bus proxy factories which want the same set of features for all constructed proxies. More...

#include <TelepathyQt/FixedFeatureFactory>

Inherits Tp::DBusProxyFactory.

Inherited by Tp::AccountFactory, and Tp::ConnectionFactory.

List of all members.

Public Member Functions

Protected Member Functions


Detailed Description

The FixedFeatureFactory class is a base class for all D-Bus proxy factories which want the same set of features for all constructed proxies.


Constructor & Destructor Documentation

Class destructor.

Tp::FixedFeatureFactory::FixedFeatureFactory ( const QDBusConnection &  bus) [protected]

Class constructor.

The intention for storing the bus here is that it generally doesn't make sense to construct proxies for multiple buses in the same context. Allowing that would lead to more complex keying needs in the cache, as well.

Parameters:
busThe D-Bus bus connection for the objects constructed using this factory.

Member Function Documentation

Gets the features this factory will make ready on constructed proxies.

Returns:
The set of features.
void Tp::FixedFeatureFactory::addFeature ( const Feature feature)

Adds a single feature this factory will make ready on further constructed proxies.

No feature removal is provided, to guard against uncooperative modules removing features other modules have set and depend on.

Parameters:
featureThe feature to add.
void Tp::FixedFeatureFactory::addFeatures ( const Features features)

Adds a set of features this factory will make ready on further constructed proxies.

No feature removal is provided, to guard against uncooperative modules removing features other modules have set and depend on.

Parameters:
featuresThe features to add.
Features Tp::FixedFeatureFactory::featuresFor ( const DBusProxyPtr &  proxy) const [protected, virtual]

Fixed implementation of the per-proxy feature getter.

Returns:
features(), irrespective of the actual proxy.

Implements Tp::DBusProxyFactory.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00271.html0000644000175200001440000002014512000060453021621 0ustar00collabora-develusers00000000000000 Tp::MediaStreamHandlerTransport Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MediaStreamHandlerTransport Struct Reference


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00855.html0000644000175200001440000007460612000060453021644 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::FileTransferChannel Member List
This is the complete list of members for Tp::FileTransferChannel, including all inherited members.
actualFeatures() const Tp::ReadyObject [virtual]
availableSocketTypes() const Tp::FileTransferChannel [protected]
baseInterface() const Tp::Channel [protected]
becomeReady(const Features &requestedFeatures=Features())Tp::ReadyObject [virtual]
busName() const Tp::DBusProxy
BypassInterfaceCheck enum valueTp::OptionalInterfaceFactory< Channel >
cancel()Tp::FileTransferChannel
Channel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature)Tp::Channel [protected]
channelType() const Tp::Channel
CheckInterfaceSupported enum valueTp::OptionalInterfaceFactory< Channel >
conferenceChannelMerged(const Tp::ChannelPtr &channel)Tp::Channel [signal]
conferenceChannelRemoved(const Tp::ChannelPtr &channel, const Tp::Channel::GroupMemberChangeDetails &details)Tp::Channel [signal]
conferenceChannels() const Tp::Channel
conferenceInitialChannels() const Tp::Channel
conferenceInitialInviteeContacts() const Tp::Channel
conferenceMergeChannel(const ChannelPtr &channel)Tp::Channel
conferenceOriginalChannels() const Tp::Channel
conferenceSplitChannel()Tp::Channel
connection() const Tp::Channel
connectToHost()Tp::FileTransferChannel [protected, virtual]
contentHash() const Tp::FileTransferChannel
contentHashType() const Tp::FileTransferChannel
contentType() const Tp::FileTransferChannel
create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties)Tp::FileTransferChannel [static]
dbusConnection() const Tp::DBusProxy
DBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::DBusProxy
description() const Tp::FileTransferChannel
FeatureConferenceInitialInviteeContactsTp::Channel [static]
FeatureCoreTp::FileTransferChannel [static]
fileName() const Tp::FileTransferChannel
FileTransferChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature=FileTransferChannel::FeatureCore)Tp::FileTransferChannel [protected]
groupAddContacts(const QList< ContactPtr > &contacts, const QString &message=QString())Tp::Channel
groupAddSelfHandle()Tp::Channel [protected, slot]
groupAreHandleOwnersAvailable() const Tp::Channel
groupCanAcceptContactsWithMessage() const Tp::Channel
groupCanAddContacts() const Tp::Channel
groupCanAddContactsChanged(bool canAddContacts)Tp::Channel [signal]
groupCanAddContactsWithMessage() const Tp::Channel
groupCanDepartWithMessage() const Tp::Channel
groupCanRejectContactsWithMessage() const Tp::Channel
groupCanRemoveContacts() const Tp::Channel
groupCanRemoveContactsChanged(bool canRemoveContacts)Tp::Channel [signal]
groupCanRemoveContactsWithMessage() const Tp::Channel
groupCanRescindContacts() const Tp::Channel
groupCanRescindContactsChanged(bool canRescindContacts)Tp::Channel [signal]
groupCanRescindContactsWithMessage() const Tp::Channel
groupContacts(bool includeSelfContact=true) const Tp::Channel
groupFlags() const Tp::Channel
groupFlagsChanged(Tp::ChannelGroupFlags flags, Tp::ChannelGroupFlags added, Tp::ChannelGroupFlags removed)Tp::Channel [signal]
groupHandleOwners() const Tp::Channel
groupHandleOwnersChanged(const Tp::HandleOwnerMap &owners, const Tp::UIntList &added, const Tp::UIntList &removed)Tp::Channel [signal]
groupIsSelfContactTracked() const Tp::Channel
groupLocalPendingContactChangeInfo(const ContactPtr &contact) const Tp::Channel
groupLocalPendingContacts(bool includeSelfContact=true) const Tp::Channel
groupMembersChanged(const Tp::Contacts &groupMembersAdded, const Tp::Contacts &groupLocalPendingMembersAdded, const Tp::Contacts &groupRemotePendingMembersAdded, const Tp::Contacts &groupMembersRemoved, const Tp::Channel::GroupMemberChangeDetails &details)Tp::Channel [signal]
groupRemotePendingContacts(bool includeSelfContact=true) const Tp::Channel
groupRemoveContacts(const QList< ContactPtr > &contacts, const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone)Tp::Channel
groupSelfContact() const Tp::Channel
groupSelfContactChanged()Tp::Channel [signal]
groupSelfContactRemoveInfo() const Tp::Channel
groupSelfHandleIsLocalPending() const Tp::Channel [protected]
hasInterface(const QString &name) constTp::OptionalInterfaceFactory< Channel > [inline]
immutableProperties() const Tp::Channel
initialOffset() const Tp::FileTransferChannel
initialOffsetDefined(qulonglong initialOffset)Tp::FileTransferChannel [signal]
initiatorContact() const Tp::Channel
interface() constTp::OptionalInterfaceFactory< Channel > [inline]
interfaces() constTp::OptionalInterfaceFactory< Channel > [inline]
InterfaceSupportedChecking enum nameTp::OptionalInterfaceFactory< Channel >
invalidate(const QString &reason, const QString &message)Tp::DBusProxy [protected]
invalidate(const QDBusError &error)Tp::DBusProxy [protected]
invalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage)Tp::DBusProxy [signal]
invalidationMessage() const Tp::DBusProxy
invalidationReason() const Tp::DBusProxy
isConference() const Tp::Channel
isConnected() const Tp::FileTransferChannel [protected]
isFinished() const Tp::FileTransferChannel [protected]
isReady(const Features &features=Features()) const Tp::ReadyObject [virtual]
isRequested() const Tp::Channel
isValid() const Tp::DBusProxy
lastModificationTime() const Tp::FileTransferChannel
missingFeatures() const Tp::ReadyObject [virtual]
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
objectPath() const Tp::DBusProxy
onUriDefined(const QString &uri)Tp::FileTransferChannel [protected, slot]
optionalInterface(InterfaceSupportedChecking check=CheckInterfaceSupported) constTp::OptionalInterfaceFactory< Channel > [inline]
OptionalInterfaceFactory(Channel *this_)Tp::OptionalInterfaceFactory< Channel > [inline]
propertyChanged(const QString &propertyName)Tp::Object [signal]
readinessHelper() const Tp::ReadyObject [protected]
ReadyObject(RefCounted *object, const Feature &featureCore)Tp::ReadyObject
ReadyObject(DBusProxy *proxy, const Feature &featureCore)Tp::ReadyObject
RefCounted()Tp::RefCounted [inline]
requestClose()Tp::Channel
requestedFeatures() const Tp::ReadyObject [virtual]
requestLeave(const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone)Tp::Channel
setBusName(const QString &busName)Tp::DBusProxy [protected]
setConnected()Tp::FileTransferChannel [protected]
setFinished()Tp::FileTransferChannel [protected, virtual]
setInterfaces(const QStringList &interfaces)Tp::OptionalInterfaceFactory< Channel > [inline, protected]
size() const Tp::FileTransferChannel
state() const Tp::FileTransferChannel
stateChanged(Tp::FileTransferState state, Tp::FileTransferStateChangeReason reason)Tp::FileTransferChannel [signal]
StatefulDBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::StatefulDBusProxy
stateReason() const Tp::FileTransferChannel
supportsConferenceMerging() const Tp::Channel
supportsConferenceSplitting() const Tp::Channel
targetContact() const Tp::Channel
targetHandle() const Tp::Channel
targetHandleType() const Tp::Channel
targetId() const Tp::Channel
transferredBytes() const Tp::FileTransferChannel
transferredBytesChanged(qulonglong count)Tp::FileTransferChannel [signal]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique)Tp::StatefulDBusProxy [static]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique, QString &error, QString &message)Tp::StatefulDBusProxy [static]
uri() const Tp::FileTransferChannel
~Channel()Tp::Channel [virtual]
~DBusProxy()Tp::DBusProxy [virtual]
~FileTransferChannel()Tp::FileTransferChannel [virtual]
~Object()Tp::Object [virtual]
~OptionalInterfaceFactory()Tp::OptionalInterfaceFactory< Channel > [inline]
~ReadyObject()Tp::ReadyObject [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]
~StatefulDBusProxy()Tp::StatefulDBusProxy [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00210.html0000644000175200001440000001245212000060453021614 0ustar00collabora-develusers00000000000000 Tp::ContactSubscriptionMap Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactSubscriptionMap Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<uint, ContactSubscriptions>, but needed to have a discrete type in the Qt type system.

A map from contacts to their subscribe, publish and publish-request attributes.


Constructor & Destructor Documentation


Member Function Documentation

ContactSubscriptionMap& Tp::ContactSubscriptionMap::operator= ( const QMap< uint, ContactSubscriptions > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00428_source.html0000644000175200001440000000565412000060453023215 0ustar00collabora-develusers00000000000000 account-filter.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
account-filter.h
00001 
00023 #ifndef _TelepathyQt_account_filter_h_HEADER_GUARD_
00024 #define _TelepathyQt_account_filter_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Filter>
00031 
00032 namespace Tp
00033 {
00034 
00035 typedef Filter<Account> AccountFilter;
00036 
00037 } // Tp
00038 
00039 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00878.html0000644000175200001440000007651412000060453021651 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::IncomingFileTransferChannel Member List
This is the complete list of members for Tp::IncomingFileTransferChannel, including all inherited members.
acceptFile(qulonglong offset, QIODevice *output)Tp::IncomingFileTransferChannel
actualFeatures() const Tp::ReadyObject [virtual]
availableSocketTypes() const Tp::FileTransferChannel [protected]
baseInterface() const Tp::Channel [protected]
becomeReady(const Features &requestedFeatures=Features())Tp::ReadyObject [virtual]
busName() const Tp::DBusProxy
BypassInterfaceCheck enum valueTp::OptionalInterfaceFactory< Channel >
cancel()Tp::FileTransferChannel
Channel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature)Tp::Channel [protected]
channelType() const Tp::Channel
CheckInterfaceSupported enum valueTp::OptionalInterfaceFactory< Channel >
conferenceChannelMerged(const Tp::ChannelPtr &channel)Tp::Channel [signal]
conferenceChannelRemoved(const Tp::ChannelPtr &channel, const Tp::Channel::GroupMemberChangeDetails &details)Tp::Channel [signal]
conferenceChannels() const Tp::Channel
conferenceInitialChannels() const Tp::Channel
conferenceInitialInviteeContacts() const Tp::Channel
conferenceMergeChannel(const ChannelPtr &channel)Tp::Channel
conferenceOriginalChannels() const Tp::Channel
conferenceSplitChannel()Tp::Channel
connection() const Tp::Channel
contentHash() const Tp::FileTransferChannel
contentHashType() const Tp::FileTransferChannel
contentType() const Tp::FileTransferChannel
create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties)Tp::IncomingFileTransferChannel [static]
dbusConnection() const Tp::DBusProxy
DBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::DBusProxy
description() const Tp::FileTransferChannel
FeatureConferenceInitialInviteeContactsTp::Channel [static]
FeatureCoreTp::IncomingFileTransferChannel [static]
fileName() const Tp::FileTransferChannel
FileTransferChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature=FileTransferChannel::FeatureCore)Tp::FileTransferChannel [protected]
groupAddContacts(const QList< ContactPtr > &contacts, const QString &message=QString())Tp::Channel
groupAddSelfHandle()Tp::Channel [protected, slot]
groupAreHandleOwnersAvailable() const Tp::Channel
groupCanAcceptContactsWithMessage() const Tp::Channel
groupCanAddContacts() const Tp::Channel
groupCanAddContactsChanged(bool canAddContacts)Tp::Channel [signal]
groupCanAddContactsWithMessage() const Tp::Channel
groupCanDepartWithMessage() const Tp::Channel
groupCanRejectContactsWithMessage() const Tp::Channel
groupCanRemoveContacts() const Tp::Channel
groupCanRemoveContactsChanged(bool canRemoveContacts)Tp::Channel [signal]
groupCanRemoveContactsWithMessage() const Tp::Channel
groupCanRescindContacts() const Tp::Channel
groupCanRescindContactsChanged(bool canRescindContacts)Tp::Channel [signal]
groupCanRescindContactsWithMessage() const Tp::Channel
groupContacts(bool includeSelfContact=true) const Tp::Channel
groupFlags() const Tp::Channel
groupFlagsChanged(Tp::ChannelGroupFlags flags, Tp::ChannelGroupFlags added, Tp::ChannelGroupFlags removed)Tp::Channel [signal]
groupHandleOwners() const Tp::Channel
groupHandleOwnersChanged(const Tp::HandleOwnerMap &owners, const Tp::UIntList &added, const Tp::UIntList &removed)Tp::Channel [signal]
groupIsSelfContactTracked() const Tp::Channel
groupLocalPendingContactChangeInfo(const ContactPtr &contact) const Tp::Channel
groupLocalPendingContacts(bool includeSelfContact=true) const Tp::Channel
groupMembersChanged(const Tp::Contacts &groupMembersAdded, const Tp::Contacts &groupLocalPendingMembersAdded, const Tp::Contacts &groupRemotePendingMembersAdded, const Tp::Contacts &groupMembersRemoved, const Tp::Channel::GroupMemberChangeDetails &details)Tp::Channel [signal]
groupRemotePendingContacts(bool includeSelfContact=true) const Tp::Channel
groupRemoveContacts(const QList< ContactPtr > &contacts, const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone)Tp::Channel
groupSelfContact() const Tp::Channel
groupSelfContactChanged()Tp::Channel [signal]
groupSelfContactRemoveInfo() const Tp::Channel
groupSelfHandleIsLocalPending() const Tp::Channel [protected]
hasInterface(const QString &name) constTp::OptionalInterfaceFactory< Channel > [inline]
immutableProperties() const Tp::Channel
IncomingFileTransferChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature=IncomingFileTransferChannel::FeatureCore)Tp::IncomingFileTransferChannel [protected]
initialOffset() const Tp::FileTransferChannel
initialOffsetDefined(qulonglong initialOffset)Tp::FileTransferChannel [signal]
initiatorContact() const Tp::Channel
interface() constTp::OptionalInterfaceFactory< Channel > [inline]
interfaces() constTp::OptionalInterfaceFactory< Channel > [inline]
InterfaceSupportedChecking enum nameTp::OptionalInterfaceFactory< Channel >
invalidate(const QString &reason, const QString &message)Tp::DBusProxy [protected]
invalidate(const QDBusError &error)Tp::DBusProxy [protected]
invalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage)Tp::DBusProxy [signal]
invalidationMessage() const Tp::DBusProxy
invalidationReason() const Tp::DBusProxy
isConference() const Tp::Channel
isConnected() const Tp::FileTransferChannel [protected]
isFinished() const Tp::FileTransferChannel [protected]
isReady(const Features &features=Features()) const Tp::ReadyObject [virtual]
isRequested() const Tp::Channel
isValid() const Tp::DBusProxy
lastModificationTime() const Tp::FileTransferChannel
missingFeatures() const Tp::ReadyObject [virtual]
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
objectPath() const Tp::DBusProxy
onUriDefined(const QString &uri)Tp::FileTransferChannel [protected, slot]
optionalInterface(InterfaceSupportedChecking check=CheckInterfaceSupported) constTp::OptionalInterfaceFactory< Channel > [inline]
OptionalInterfaceFactory(Channel *this_)Tp::OptionalInterfaceFactory< Channel > [inline]
propertyChanged(const QString &propertyName)Tp::Object [signal]
readinessHelper() const Tp::ReadyObject [protected]
ReadyObject(RefCounted *object, const Feature &featureCore)Tp::ReadyObject
ReadyObject(DBusProxy *proxy, const Feature &featureCore)Tp::ReadyObject
RefCounted()Tp::RefCounted [inline]
requestClose()Tp::Channel
requestedFeatures() const Tp::ReadyObject [virtual]
requestLeave(const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone)Tp::Channel
setBusName(const QString &busName)Tp::DBusProxy [protected]
setConnected()Tp::FileTransferChannel [protected]
setInterfaces(const QStringList &interfaces)Tp::OptionalInterfaceFactory< Channel > [inline, protected]
setUri(const QString &uri)Tp::IncomingFileTransferChannel
size() const Tp::FileTransferChannel
state() const Tp::FileTransferChannel
stateChanged(Tp::FileTransferState state, Tp::FileTransferStateChangeReason reason)Tp::FileTransferChannel [signal]
StatefulDBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::StatefulDBusProxy
stateReason() const Tp::FileTransferChannel
supportsConferenceMerging() const Tp::Channel
supportsConferenceSplitting() const Tp::Channel
targetContact() const Tp::Channel
targetHandle() const Tp::Channel
targetHandleType() const Tp::Channel
targetId() const Tp::Channel
transferredBytes() const Tp::FileTransferChannel
transferredBytesChanged(qulonglong count)Tp::FileTransferChannel [signal]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique)Tp::StatefulDBusProxy [static]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique, QString &error, QString &message)Tp::StatefulDBusProxy [static]
uri() const Tp::FileTransferChannel
uriDefined(const QString &uri)Tp::IncomingFileTransferChannel [signal]
~Channel()Tp::Channel [virtual]
~DBusProxy()Tp::DBusProxy [virtual]
~FileTransferChannel()Tp::FileTransferChannel [virtual]
~IncomingFileTransferChannel()Tp::IncomingFileTransferChannel [virtual]
~Object()Tp::Object [virtual]
~OptionalInterfaceFactory()Tp::OptionalInterfaceFactory< Channel > [inline]
~ReadyObject()Tp::ReadyObject [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]
~StatefulDBusProxy()Tp::StatefulDBusProxy [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00788.html0000644000175200001440000001300312000060453021631 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AbstractProtocolInterface Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00069.html0000644000175200001440000001145612000060453021633 0ustar00collabora-develusers00000000000000 Tp::ByteArrayList Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ByteArrayList Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Generic list type with QByteArray elements. Convertible with QList<QByteArray>, but needed to have a discrete type in the Qt type system.


Constructor & Destructor Documentation

Tp::ByteArrayList::ByteArrayList ( const QList< QByteArray > &  a) [inline]

Member Function Documentation

ByteArrayList& Tp::ByteArrayList::operator= ( const QList< QByteArray > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00824.html0000644000175200001440000006133512000060453021633 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Channel Member List
This is the complete list of members for Tp::Channel, including all inherited members.
actualFeatures() const Tp::ReadyObject [virtual]
baseInterface() const Tp::Channel [protected]
becomeReady(const Features &requestedFeatures=Features())Tp::ReadyObject [virtual]
busName() const Tp::DBusProxy
BypassInterfaceCheck enum valueTp::OptionalInterfaceFactory< Channel >
Channel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature)Tp::Channel [protected]
channelType() const Tp::Channel
CheckInterfaceSupported enum valueTp::OptionalInterfaceFactory< Channel >
conferenceChannelMerged(const Tp::ChannelPtr &channel)Tp::Channel [signal]
conferenceChannelRemoved(const Tp::ChannelPtr &channel, const Tp::Channel::GroupMemberChangeDetails &details)Tp::Channel [signal]
conferenceChannels() const Tp::Channel
conferenceInitialChannels() const Tp::Channel
conferenceInitialInviteeContacts() const Tp::Channel
conferenceMergeChannel(const ChannelPtr &channel)Tp::Channel
conferenceOriginalChannels() const Tp::Channel
conferenceSplitChannel()Tp::Channel
connection() const Tp::Channel
create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties)Tp::Channel [static]
dbusConnection() const Tp::DBusProxy
DBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::DBusProxy
FeatureConferenceInitialInviteeContactsTp::Channel [static]
FeatureCoreTp::Channel [static]
groupAddContacts(const QList< ContactPtr > &contacts, const QString &message=QString())Tp::Channel
groupAddSelfHandle()Tp::Channel [protected, slot]
groupAreHandleOwnersAvailable() const Tp::Channel
groupCanAcceptContactsWithMessage() const Tp::Channel
groupCanAddContacts() const Tp::Channel
groupCanAddContactsChanged(bool canAddContacts)Tp::Channel [signal]
groupCanAddContactsWithMessage() const Tp::Channel
groupCanDepartWithMessage() const Tp::Channel
groupCanRejectContactsWithMessage() const Tp::Channel
groupCanRemoveContacts() const Tp::Channel
groupCanRemoveContactsChanged(bool canRemoveContacts)Tp::Channel [signal]
groupCanRemoveContactsWithMessage() const Tp::Channel
groupCanRescindContacts() const Tp::Channel
groupCanRescindContactsChanged(bool canRescindContacts)Tp::Channel [signal]
groupCanRescindContactsWithMessage() const Tp::Channel
groupContacts(bool includeSelfContact=true) const Tp::Channel
groupFlags() const Tp::Channel
groupFlagsChanged(Tp::ChannelGroupFlags flags, Tp::ChannelGroupFlags added, Tp::ChannelGroupFlags removed)Tp::Channel [signal]
groupHandleOwners() const Tp::Channel
groupHandleOwnersChanged(const Tp::HandleOwnerMap &owners, const Tp::UIntList &added, const Tp::UIntList &removed)Tp::Channel [signal]
groupIsSelfContactTracked() const Tp::Channel
groupLocalPendingContactChangeInfo(const ContactPtr &contact) const Tp::Channel
groupLocalPendingContacts(bool includeSelfContact=true) const Tp::Channel
groupMembersChanged(const Tp::Contacts &groupMembersAdded, const Tp::Contacts &groupLocalPendingMembersAdded, const Tp::Contacts &groupRemotePendingMembersAdded, const Tp::Contacts &groupMembersRemoved, const Tp::Channel::GroupMemberChangeDetails &details)Tp::Channel [signal]
groupRemotePendingContacts(bool includeSelfContact=true) const Tp::Channel
groupRemoveContacts(const QList< ContactPtr > &contacts, const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone)Tp::Channel
groupSelfContact() const Tp::Channel
groupSelfContactChanged()Tp::Channel [signal]
groupSelfContactRemoveInfo() const Tp::Channel
groupSelfHandleIsLocalPending() const Tp::Channel [protected]
hasInterface(const QString &name) constTp::OptionalInterfaceFactory< Channel > [inline]
immutableProperties() const Tp::Channel
initiatorContact() const Tp::Channel
interface() constTp::OptionalInterfaceFactory< Channel > [inline]
interfaces() constTp::OptionalInterfaceFactory< Channel > [inline]
InterfaceSupportedChecking enum nameTp::OptionalInterfaceFactory< Channel >
invalidate(const QString &reason, const QString &message)Tp::DBusProxy [protected]
invalidate(const QDBusError &error)Tp::DBusProxy [protected]
invalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage)Tp::DBusProxy [signal]
invalidationMessage() const Tp::DBusProxy
invalidationReason() const Tp::DBusProxy
isConference() const Tp::Channel
isReady(const Features &features=Features()) const Tp::ReadyObject [virtual]
isRequested() const Tp::Channel
isValid() const Tp::DBusProxy
missingFeatures() const Tp::ReadyObject [virtual]
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
objectPath() const Tp::DBusProxy
optionalInterface(InterfaceSupportedChecking check=CheckInterfaceSupported) constTp::OptionalInterfaceFactory< Channel > [inline]
OptionalInterfaceFactory(Channel *this_)Tp::OptionalInterfaceFactory< Channel > [inline]
propertyChanged(const QString &propertyName)Tp::Object [signal]
readinessHelper() const Tp::ReadyObject [protected]
ReadyObject(RefCounted *object, const Feature &featureCore)Tp::ReadyObject
ReadyObject(DBusProxy *proxy, const Feature &featureCore)Tp::ReadyObject
RefCounted()Tp::RefCounted [inline]
requestClose()Tp::Channel
requestedFeatures() const Tp::ReadyObject [virtual]
requestLeave(const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone)Tp::Channel
setBusName(const QString &busName)Tp::DBusProxy [protected]
setInterfaces(const QStringList &interfaces)Tp::OptionalInterfaceFactory< Channel > [inline, protected]
StatefulDBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::StatefulDBusProxy
supportsConferenceMerging() const Tp::Channel
supportsConferenceSplitting() const Tp::Channel
targetContact() const Tp::Channel
targetHandle() const Tp::Channel
targetHandleType() const Tp::Channel
targetId() const Tp::Channel
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique)Tp::StatefulDBusProxy [static]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique, QString &error, QString &message)Tp::StatefulDBusProxy [static]
~Channel()Tp::Channel [virtual]
~DBusProxy()Tp::DBusProxy [virtual]
~Object()Tp::Object [virtual]
~OptionalInterfaceFactory()Tp::OptionalInterfaceFactory< Channel > [inline]
~ReadyObject()Tp::ReadyObject [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]
~StatefulDBusProxy()Tp::StatefulDBusProxy [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00445_source.html0000644000175200001440000002463012000060453023207 0ustar00collabora-develusers00000000000000 base-connection.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
base-connection.h
00001 
00023 #ifndef _TelepathyQt_base_connection_h_HEADER_GUARD_
00024 #define _TelepathyQt_base_connection_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/DBusService>
00031 #include <TelepathyQt/Global>
00032 #include <TelepathyQt/Types>
00033 
00034 #include <QDBusConnection>
00035 
00036 class QString;
00037 
00038 namespace Tp
00039 {
00040 
00041 class TP_QT_EXPORT BaseConnection : public DBusService
00042 {
00043     Q_OBJECT
00044     Q_DISABLE_COPY(BaseConnection)
00045 
00046 public:
00047     static BaseConnectionPtr create(const QString &cmName, const QString &protocolName,
00048             const QVariantMap &parameters)
00049     {
00050         return BaseConnectionPtr(new BaseConnection(
00051                     QDBusConnection::sessionBus(), cmName, protocolName, parameters));
00052     }
00053     template<typename BaseConnectionSubclass>
00054     static SharedPtr<BaseConnectionSubclass> create(const QString &cmName,
00055             const QString &protocolName, const QVariantMap &parameters)
00056     {
00057         return SharedPtr<BaseConnectionSubclass>(new BaseConnectionSubclass(
00058                     QDBusConnection::sessionBus(), cmName, protocolName, parameters));
00059     }
00060     static BaseConnectionPtr create(const QDBusConnection &dbusConnection,
00061             const QString &cmName, const QString &protocolName,
00062             const QVariantMap &parameters)
00063     {
00064         return BaseConnectionPtr(new BaseConnection(
00065                     dbusConnection, cmName, protocolName, parameters));
00066     }
00067     template<typename BaseConnectionSubclass>
00068     static SharedPtr<BaseConnectionSubclass> create(const QDBusConnection &dbusConnection,
00069             const QString &cmName, const QString &protocolName,
00070             const QVariantMap &parameters)
00071     {
00072         return SharedPtr<BaseConnectionSubclass>(new BaseConnectionSubclass(
00073                     dbusConnection, cmName, protocolName, parameters));
00074     }
00075 
00076     virtual ~BaseConnection();
00077 
00078     QString cmName() const;
00079     QString protocolName() const;
00080     QVariantMap parameters() const;
00081 
00082     QVariantMap immutableProperties() const;
00083 
00084     virtual QString uniqueName() const;
00085     bool registerObject(DBusError *error = NULL);
00086 
00087 Q_SIGNALS:
00088     void disconnected();
00089 
00090 protected:
00091     BaseConnection(const QDBusConnection &dbusConnection,
00092             const QString &cmName, const QString &protocolName,
00093             const QVariantMap &parameters);
00094 
00095     virtual bool registerObject(const QString &busName, const QString &objectPath,
00096             DBusError *error);
00097 
00098 private:
00099     class Adaptee;
00100     friend class Adaptee;
00101     class Private;
00102     friend class Private;
00103     Private *mPriv;
00104 };
00105 
00106 }
00107 
00108 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00223.html0000644000175200001440000001255612000060453021625 0ustar00collabora-develusers00000000000000 Tp::DebugMessage Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::DebugMessage Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

A struct representing a debug message, as returned by GetMessages.


Member Data Documentation

Timestamp of the debug message. This is a double to allow more accuracy in the time the message was logged.

Domain of the debug message. This is used to identify the source of debug messages. For example, debug messages from a connection manager could have this Domain struct member be the name of the connection manager, and logs from any helper library could have the name of the helper library.

The domain could also contain a category as to where the log message originated separated by a forward-slash. For example, if a debug message was output in a connection manager called "dummy", in the file-transfer code, this Domain struct member might be dummy/file-transfer.

Level of the debug message. This states the severity of the debug message.

The text of the debug message.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01129.html0000644000175200001440000002520312000060453021624 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceCellularInterface Member List
This is the complete list of members for Tp::Client::ConnectionInterfaceCellularInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ConnectionInterfaceCellularInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceCellularInterface
ConnectionInterfaceCellularInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceCellularInterface
ConnectionInterfaceCellularInterface(Tp::DBusProxy *proxy)Tp::Client::ConnectionInterfaceCellularInterface
ConnectionInterfaceCellularInterface(const Tp::Client::ConnectionInterface &mainInterface)Tp::Client::ConnectionInterfaceCellularInterface [explicit]
ConnectionInterfaceCellularInterface(const Tp::Client::ConnectionInterface &mainInterface, QObject *parent)Tp::Client::ConnectionInterfaceCellularInterface
IMSIChanged(const QString &IMSI)Tp::Client::ConnectionInterfaceCellularInterface [signal]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ConnectionInterfaceCellularInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ConnectionInterfaceCellularInterface [inline]
requestPropertyIMSI() const Tp::Client::ConnectionInterfaceCellularInterface [inline]
requestPropertyMessageNationalCharacterSet() const Tp::Client::ConnectionInterfaceCellularInterface [inline]
requestPropertyMessageReducedCharacterSet() const Tp::Client::ConnectionInterfaceCellularInterface [inline]
requestPropertyMessageServiceCentre() const Tp::Client::ConnectionInterfaceCellularInterface [inline]
requestPropertyMessageValidityPeriod() const Tp::Client::ConnectionInterfaceCellularInterface [inline]
requestPropertyOverrideMessageServiceCentre() const Tp::Client::ConnectionInterfaceCellularInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
setPropertyMessageNationalCharacterSet(QString newValue)Tp::Client::ConnectionInterfaceCellularInterface [inline]
setPropertyMessageReducedCharacterSet(bool newValue)Tp::Client::ConnectionInterfaceCellularInterface [inline]
setPropertyMessageServiceCentre(QString newValue)Tp::Client::ConnectionInterfaceCellularInterface [inline]
setPropertyMessageValidityPeriod(uint newValue)Tp::Client::ConnectionInterfaceCellularInterface [inline]
setPropertyOverrideMessageServiceCentre(bool newValue)Tp::Client::ConnectionInterfaceCellularInterface [inline]
staticInterfaceName()Tp::Client::ConnectionInterfaceCellularInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00118.html0000644000175200001440000004747712000060453021642 0ustar00collabora-develusers00000000000000 Tp::Client::ChannelInterfaceAnonymityInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelInterfaceAnonymityInterface Class Reference

#include <TelepathyQt/Channel>

Inherits Tp::AbstractInterface.

List of all members.

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Channel.Interface.Anonymity".


Constructor & Destructor Documentation

Tp::Client::ChannelInterfaceAnonymityInterface::ChannelInterfaceAnonymityInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfaceAnonymityInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ChannelInterfaceAnonymityInterface::ChannelInterfaceAnonymityInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfaceAnonymityInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ChannelInterfaceAnonymityInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ChannelInterfaceAnonymityInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ChannelInterfaceAnonymityInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Channel.Interface.Anonymity", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property AnonymityModes of type uint.

The list of initially requested anonymity modes on the channel. This MUST NOT change, and is Requestable.
Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property AnonymityMandatory of type bool.

Whether or not the anonymity settings are required for this channel. This MUST NOT change, and is Requestable.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property AnonymousID of type QString.

This is the ID that the remote user of the channel MAY see (assuming there's a single ID). For example, for SIP connections where the From address has been scrambled by the CM, the scrambled address would be available here for the client to see. This is completely optional, and MAY be an empty string ("") in cases where anonymity modes are not set, or the CM doesn't know what the remote contact will see, or any other case where this doesn't make sense.

This MAY change over the lifetime of the channel, and SHOULD NOT be used with the Request interface.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
void Tp::Client::ChannelInterfaceAnonymityInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00504_source.html0000644000175200001440000011303112000060453023175 0ustar00collabora-develusers00000000000000 cli-client.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-client.h
00001 /*
00002  * This file contains D-Bus client proxy classes generated by qt-client-gen.py.
00003  *
00004  * This file can be distributed under the same terms as the specification from
00005  * which it was generated.
00006  */
00007 
00008 #ifndef IN_TP_QT_HEADER
00009 #error IN_TP_QT_HEADER
00010 #endif
00011 
00012 #include <TelepathyQt/Types>
00013 
00014 #include <QtGlobal>
00015 
00016 #include <QString>
00017 #include <QObject>
00018 #include <QVariant>
00019 
00020 #include <QDBusPendingReply>
00021 
00022 #include <TelepathyQt/AbstractInterface>
00023 #include <TelepathyQt/DBusProxy>
00024 #include <TelepathyQt/Global>
00025 
00026 namespace Tp
00027 {
00028 class PendingVariant;
00029 class PendingOperation;
00030 }
00031 
00032 namespace Tp
00033 {
00034 namespace Client
00035 {
00036 
00044 class TP_QT_EXPORT ClientInterface : public Tp::AbstractInterface
00045 {
00046     Q_OBJECT
00047 
00048 public:
00055     static inline QLatin1String staticInterfaceName()
00056     {
00057         return QLatin1String("org.freedesktop.Telepathy.Client");
00058     }
00059 
00067     ClientInterface(
00068         const QString& busName,
00069         const QString& objectPath,
00070         QObject* parent = 0
00071     );
00072 
00081     ClientInterface(
00082         const QDBusConnection& connection,
00083         const QString& busName,
00084         const QString& objectPath,
00085         QObject* parent = 0
00086     );
00087 
00094     ClientInterface(Tp::DBusProxy *proxy);
00095 
00118     inline Tp::PendingVariant *requestPropertyInterfaces() const
00119     {
00120         return internalRequestProperty(QLatin1String("Interfaces"));
00121     }
00122 
00129     Tp::PendingVariantMap *requestAllProperties() const
00130     {
00131         return internalRequestAllProperties();
00132     }
00133 
00134 protected:
00135     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
00136 };
00137 
00145 class TP_QT_EXPORT ClientApproverInterface : public Tp::AbstractInterface
00146 {
00147     Q_OBJECT
00148 
00149 public:
00156     static inline QLatin1String staticInterfaceName()
00157     {
00158         return QLatin1String("org.freedesktop.Telepathy.Client.Approver");
00159     }
00160 
00168     ClientApproverInterface(
00169         const QString& busName,
00170         const QString& objectPath,
00171         QObject* parent = 0
00172     );
00173 
00182     ClientApproverInterface(
00183         const QDBusConnection& connection,
00184         const QString& busName,
00185         const QString& objectPath,
00186         QObject* parent = 0
00187     );
00188 
00195     ClientApproverInterface(Tp::DBusProxy *proxy);
00196 
00204     explicit ClientApproverInterface(const Tp::Client::ClientInterface& mainInterface);
00205 
00213     ClientApproverInterface(const Tp::Client::ClientInterface& mainInterface, QObject* parent);
00214 
00240     inline Tp::PendingVariant *requestPropertyApproverChannelFilter() const
00241     {
00242         return internalRequestProperty(QLatin1String("ApproverChannelFilter"));
00243     }
00244 
00251     Tp::PendingVariantMap *requestAllProperties() const
00252     {
00253         return internalRequestAllProperties();
00254     }
00255 
00256 public Q_SLOTS:
00339     inline QDBusPendingReply<> AddDispatchOperation(const Tp::ChannelDetailsList& channels, const QDBusObjectPath& dispatchOperation, const QVariantMap& properties, int timeout = -1)
00340     {
00341         if (!invalidationReason().isEmpty()) {
00342             return QDBusPendingReply<>(QDBusMessage::createError(
00343                 invalidationReason(),
00344                 invalidationMessage()
00345             ));
00346         }
00347 
00348         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00349                 this->staticInterfaceName(), QLatin1String("AddDispatchOperation"));
00350         callMessage << QVariant::fromValue(channels) << QVariant::fromValue(dispatchOperation) << QVariant::fromValue(properties);
00351         return this->connection().asyncCall(callMessage, timeout);
00352     }
00353 
00354 protected:
00355     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
00356 };
00357 
00365 class TP_QT_EXPORT ClientHandlerInterface : public Tp::AbstractInterface
00366 {
00367     Q_OBJECT
00368 
00369 public:
00376     static inline QLatin1String staticInterfaceName()
00377     {
00378         return QLatin1String("org.freedesktop.Telepathy.Client.Handler");
00379     }
00380 
00388     ClientHandlerInterface(
00389         const QString& busName,
00390         const QString& objectPath,
00391         QObject* parent = 0
00392     );
00393 
00402     ClientHandlerInterface(
00403         const QDBusConnection& connection,
00404         const QString& busName,
00405         const QString& objectPath,
00406         QObject* parent = 0
00407     );
00408 
00415     ClientHandlerInterface(Tp::DBusProxy *proxy);
00416 
00424     explicit ClientHandlerInterface(const Tp::Client::ClientInterface& mainInterface);
00425 
00433     ClientHandlerInterface(const Tp::Client::ClientInterface& mainInterface, QObject* parent);
00434 
00459     inline Tp::PendingVariant *requestPropertyHandlerChannelFilter() const
00460     {
00461         return internalRequestProperty(QLatin1String("HandlerChannelFilter"));
00462     }
00463 
00499     inline Tp::PendingVariant *requestPropertyBypassApproval() const
00500     {
00501         return internalRequestProperty(QLatin1String("BypassApproval"));
00502     }
00503 
00551     inline Tp::PendingVariant *requestPropertyCapabilities() const
00552     {
00553         return internalRequestProperty(QLatin1String("Capabilities"));
00554     }
00555 
00593     inline Tp::PendingVariant *requestPropertyHandledChannels() const
00594     {
00595         return internalRequestProperty(QLatin1String("HandledChannels"));
00596     }
00597 
00604     Tp::PendingVariantMap *requestAllProperties() const
00605     {
00606         return internalRequestAllProperties();
00607     }
00608 
00609 public Q_SLOTS:
00715     inline QDBusPendingReply<> HandleChannels(const QDBusObjectPath& account, const QDBusObjectPath& connection, const Tp::ChannelDetailsList& channels, const Tp::ObjectPathList& requestsSatisfied, qulonglong userActionTime, const QVariantMap& handlerInfo, int timeout = -1)
00716     {
00717         if (!invalidationReason().isEmpty()) {
00718             return QDBusPendingReply<>(QDBusMessage::createError(
00719                 invalidationReason(),
00720                 invalidationMessage()
00721             ));
00722         }
00723 
00724         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00725                 this->staticInterfaceName(), QLatin1String("HandleChannels"));
00726         callMessage << QVariant::fromValue(account) << QVariant::fromValue(connection) << QVariant::fromValue(channels) << QVariant::fromValue(requestsSatisfied) << QVariant::fromValue(userActionTime) << QVariant::fromValue(handlerInfo);
00727         return this->connection().asyncCall(callMessage, timeout);
00728     }
00729 
00730 protected:
00731     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
00732 };
00733 
00741 class TP_QT_EXPORT ClientInterfaceRequestsInterface : public Tp::AbstractInterface
00742 {
00743     Q_OBJECT
00744 
00745 public:
00752     static inline QLatin1String staticInterfaceName()
00753     {
00754         return QLatin1String("org.freedesktop.Telepathy.Client.Interface.Requests");
00755     }
00756 
00764     ClientInterfaceRequestsInterface(
00765         const QString& busName,
00766         const QString& objectPath,
00767         QObject* parent = 0
00768     );
00769 
00778     ClientInterfaceRequestsInterface(
00779         const QDBusConnection& connection,
00780         const QString& busName,
00781         const QString& objectPath,
00782         QObject* parent = 0
00783     );
00784 
00791     ClientInterfaceRequestsInterface(Tp::DBusProxy *proxy);
00792 
00800     explicit ClientInterfaceRequestsInterface(const Tp::Client::ClientInterface& mainInterface);
00801 
00809     ClientInterfaceRequestsInterface(const Tp::Client::ClientInterface& mainInterface, QObject* parent);
00810 
00817     Tp::PendingVariantMap *requestAllProperties() const
00818     {
00819         return internalRequestAllProperties();
00820     }
00821 
00822 public Q_SLOTS:
00905     inline QDBusPendingReply<> AddRequest(const QDBusObjectPath& request, const QVariantMap& properties, int timeout = -1)
00906     {
00907         if (!invalidationReason().isEmpty()) {
00908             return QDBusPendingReply<>(QDBusMessage::createError(
00909                 invalidationReason(),
00910                 invalidationMessage()
00911             ));
00912         }
00913 
00914         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00915                 this->staticInterfaceName(), QLatin1String("AddRequest"));
00916         callMessage << QVariant::fromValue(request) << QVariant::fromValue(properties);
00917         return this->connection().asyncCall(callMessage, timeout);
00918     }
00919 
00960     inline QDBusPendingReply<> RemoveRequest(const QDBusObjectPath& request, const QString& error, const QString& message, int timeout = -1)
00961     {
00962         if (!invalidationReason().isEmpty()) {
00963             return QDBusPendingReply<>(QDBusMessage::createError(
00964                 invalidationReason(),
00965                 invalidationMessage()
00966             ));
00967         }
00968 
00969         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00970                 this->staticInterfaceName(), QLatin1String("RemoveRequest"));
00971         callMessage << QVariant::fromValue(request) << QVariant::fromValue(error) << QVariant::fromValue(message);
00972         return this->connection().asyncCall(callMessage, timeout);
00973     }
00974 
00975 protected:
00976     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
00977 };
00978 
00986 class TP_QT_EXPORT ClientObserverInterface : public Tp::AbstractInterface
00987 {
00988     Q_OBJECT
00989 
00990 public:
00997     static inline QLatin1String staticInterfaceName()
00998     {
00999         return QLatin1String("org.freedesktop.Telepathy.Client.Observer");
01000     }
01001 
01009     ClientObserverInterface(
01010         const QString& busName,
01011         const QString& objectPath,
01012         QObject* parent = 0
01013     );
01014 
01023     ClientObserverInterface(
01024         const QDBusConnection& connection,
01025         const QString& busName,
01026         const QString& objectPath,
01027         QObject* parent = 0
01028     );
01029 
01036     ClientObserverInterface(Tp::DBusProxy *proxy);
01037 
01045     explicit ClientObserverInterface(const Tp::Client::ClientInterface& mainInterface);
01046 
01054     ClientObserverInterface(const Tp::Client::ClientInterface& mainInterface, QObject* parent);
01055 
01148     inline Tp::PendingVariant *requestPropertyObserverChannelFilter() const
01149     {
01150         return internalRequestProperty(QLatin1String("ObserverChannelFilter"));
01151     }
01152 
01194     inline Tp::PendingVariant *requestPropertyRecover() const
01195     {
01196         return internalRequestProperty(QLatin1String("Recover"));
01197     }
01198 
01242     inline Tp::PendingVariant *requestPropertyDelayApprovers() const
01243     {
01244         return internalRequestProperty(QLatin1String("DelayApprovers"));
01245     }
01246 
01253     Tp::PendingVariantMap *requestAllProperties() const
01254     {
01255         return internalRequestAllProperties();
01256     }
01257 
01258 public Q_SLOTS:
01383     inline QDBusPendingReply<> ObserveChannels(const QDBusObjectPath& account, const QDBusObjectPath& connection, const Tp::ChannelDetailsList& channels, const QDBusObjectPath& dispatchOperation, const Tp::ObjectPathList& requestsSatisfied, const QVariantMap& observerInfo, int timeout = -1)
01384     {
01385         if (!invalidationReason().isEmpty()) {
01386             return QDBusPendingReply<>(QDBusMessage::createError(
01387                 invalidationReason(),
01388                 invalidationMessage()
01389             ));
01390         }
01391 
01392         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
01393                 this->staticInterfaceName(), QLatin1String("ObserveChannels"));
01394         callMessage << QVariant::fromValue(account) << QVariant::fromValue(connection) << QVariant::fromValue(channels) << QVariant::fromValue(dispatchOperation) << QVariant::fromValue(requestsSatisfied) << QVariant::fromValue(observerInfo);
01395         return this->connection().asyncCall(callMessage, timeout);
01396     }
01397 
01398 protected:
01399     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
01400 };
01401 }
01402 }
01403 Q_DECLARE_METATYPE(Tp::Client::ClientInterface*)
01404 Q_DECLARE_METATYPE(Tp::Client::ClientApproverInterface*)
01405 Q_DECLARE_METATYPE(Tp::Client::ClientHandlerInterface*)
01406 Q_DECLARE_METATYPE(Tp::Client::ClientInterfaceRequestsInterface*)
01407 Q_DECLARE_METATYPE(Tp::Client::ClientObserverInterface*)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00994.html0000644000175200001440000000511512000060453021635 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::HandleIdentifierMap Member List
This is the complete list of members for Tp::HandleIdentifierMap, including all inherited members.
HandleIdentifierMap()Tp::HandleIdentifierMap [inline]
HandleIdentifierMap(const QMap< uint, QString > &a)Tp::HandleIdentifierMap [inline]
operator=(const QMap< uint, QString > &a)Tp::HandleIdentifierMap [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00302.html0000644000175200001440000002061612000060453021617 0ustar00collabora-develusers00000000000000 Tp::StreamTubeServer::ParametersGenerator Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::StreamTubeServer::ParametersGenerator Class Reference

The StreamTubeServer::ParametersGenerator abstract interface allows sending a different set of parameters with each tube offer. More...

#include <TelepathyQt/StreamTubeServer>

Inherited by Tp::FixedParametersGenerator.

List of all members.

Public Member Functions

Protected Member Functions


Detailed Description

The StreamTubeServer::ParametersGenerator abstract interface allows sending a different set of parameters with each tube offer.

Tube parameters are arbitrary data sent with the tube offer, which can be retrieved in the receiving end with IncomingStreamTubeChannel::parameters(). They can be used to transfer e.g. session identification information, authentication credentials or alike, for bootstrapping the protocol used for communicating over the tube.

For usecases where the parameters don't need to change between each tube, just passing a fixed set of parameters to a suitable StreamTubeServer::exportTcpSocket() overload is usually more convenient than implementing a ParametersGenerator. Note that StreamTubeServer::exportTcpSocket() can be called multiple times to change the parameters for future tubes when e.g. configuration settings have been changed, so a ParametersGenerator only needs to be implemented if each and every tube must have a different set of parameters.


Constructor & Destructor Documentation

Class destructor. Protected, because StreamTubeServer never deletes a ParametersGenerator passed to it.


Member Function Documentation

QVariantMap Tp::StreamTubeServer::ParametersGenerator::nextParameters ( const AccountPtr &  account,
const OutgoingStreamTubeChannelPtr &  tube,
const ChannelRequestHints hints 
) [pure virtual]

Return the parameters to send when offering the given tube.

Parameters:
accountThe account from which the tube originates.
tubeThe tube channel which is going to be offered by the StreamTubeServer.
hintsThe hints associated with the request that led to the creation of this tube, if any.
Returns:
Parameters to send with the offer, or an empty QVariantMap if none are needed for this tube.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/namespaces.html0000644000175200001440000000432612000060453023131 0ustar00collabora-develusers00000000000000 Namespace List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Namespace List
Here is a list of all namespaces with brief descriptions:
Tp
Tp::Client
Tp::Client::DBus
Tp::Farstream
Tp::KeyFile
Tp::ManagerFile


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00823.html0000644000175200001440000001017712000060453021630 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ChannelRequestHints Member List
This is the complete list of members for Tp::ChannelRequestHints, including all inherited members.
allHints() const Tp::ChannelRequestHints
ChannelRequestHints()Tp::ChannelRequestHints
ChannelRequestHints(const QVariantMap &hints)Tp::ChannelRequestHints
ChannelRequestHints(const ChannelRequestHints &other)Tp::ChannelRequestHints
hasHint(const QString &reversedDomain, const QString &localName) const Tp::ChannelRequestHints
hint(const QString &reversedDomain, const QString &localName) const Tp::ChannelRequestHints
isValid() const Tp::ChannelRequestHints
operator=(const ChannelRequestHints &other)Tp::ChannelRequestHints
setHint(const QString &reversedDomain, const QString &localName, const QVariant &value)Tp::ChannelRequestHints
~ChannelRequestHints()Tp::ChannelRequestHints


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00176.html0000644000175200001440000010037512000060453021631 0ustar00collabora-develusers00000000000000 Tp::Client::ConnectionInterfaceContactInfoInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceContactInfoInterface Class Reference

#include <TelepathyQt/Connection>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Connection.Interface.ContactInfo".


Constructor & Destructor Documentation

Tp::Client::ConnectionInterfaceContactInfoInterface::ConnectionInterfaceContactInfoInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceContactInfoInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ConnectionInterfaceContactInfoInterface::ConnectionInterfaceContactInfoInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceContactInfoInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ConnectionInterfaceContactInfoInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ConnectionInterfaceContactInfoInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ConnectionInterfaceContactInfoInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Connection.Interface.ContactInfo", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property ContactInfoFlags of type uint.

An integer representing the bitwise-OR of flags on this connection.

This property MAY change, without change notification, at any time before the connection moves to status Connection_Status_Connected. It MUST NOT change after that point.

Some XMPP servers, like Facebook Chat, do not allow the vCard to be changed (and so would not have the Can_Set flag). Whether the user's server is one of these cannot necessarily be detected until quite late in the connection process.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property SupportedFields of type Tp::FieldSpecs.

A list of field specifications describing the kinds of fields which may be passed to SetContactInfo() . The empty list indicates that arbitrary vCard fields are permitted. This property SHOULD be the empty list, and be ignored by clients, if ContactInfoFlags does not contain the Can_Set flag.

For example, a protocol in which arbitrary vCards were stored as-is would set this property to the empty list. A protocol whose notion of contact information is one each of personal phone number, mobile phone number, location, email address and date of birth, with no attributes allowed on each piece of information, would set this property to (in Python-like syntax):

 [
   ('tel', ['type=home'], Parameters_Exact, 1),
   ('tel', ['type=cell'], Parameters_Exact, 1),
   ('adr', [], Parameters_Exact, 1),
   ('bday', [], Parameters_Exact, 1),
   ('email', ['type=internet'], Parameters_Exact, 1),
 ]

A protocol which allows users to specify up to four phone numbers, which may be labelled as personal and/or mobile, would set this property to [ ('tel', ['type=home', 'type=cell'], 0, 4), ].

Studying existing IM protocols shows that in practice protocols allow either a very restricted set of fields (such as MSN, which seems to correspond roughly to the largest example above), or something mapping 1:1 to a large subset of vCard (such as XMPP's XEP-0054).

This property MAY change, without change notification, at any time before the connection moves to status Connection_Status_Connected. It MUST NOT change after that point.

Some XMPP servers, like Google Talk, only allow a small subset of the "vcard-temp" protocol. Whether the user's server is one of these cannot be detected until quite late in the connection process.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply<Tp::ContactInfoMap> Tp::Client::ConnectionInterfaceContactInfoInterface::GetContactInfo ( const Tp::UIntList contacts,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method GetContactInfo on the remote object.

Request information on several contacts at once. This SHOULD only return cached information, omitting handles for which no information is cached from the returned map.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
contactsAn array of handles representing contacts.
timeoutThe timeout in milliseconds.
Returns:

A dictionary mapping contact handles to information, whose keys are the subset of the requested list of handles for which information was cached.

QDBusPendingReply Tp::Client::ConnectionInterfaceContactInfoInterface::RefreshContactInfo ( const Tp::UIntList contacts,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method RefreshContactInfo on the remote object.

Retrieve information for the given contact, requesting it from the network if an up-to-date version is not cached locally. This method SHOULD return immediately, emitting ContactInfoChanged when the contacts' updated contact information is returned. This method allows a client with cached contact information to update its cache after a number of days.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
contactsInteger handles for contacts.
timeoutThe timeout in milliseconds.
QDBusPendingReply<Tp::ContactInfoFieldList> Tp::Client::ConnectionInterfaceContactInfoInterface::RequestContactInfo ( uint  contact,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method RequestContactInfo on the remote object.

Retrieve information for a contact, requesting it from the network if it is not cached locally. This method is appropriate for an explicit user request to show a contact's information; it allows a UI to wait for the contact info to be returned.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
contactAn integer handle for a contact.
timeoutThe timeout in milliseconds.
Returns:

Information about that contact.

QDBusPendingReply Tp::Client::ConnectionInterfaceContactInfoInterface::SetContactInfo ( const Tp::ContactInfoFieldList contactInfo,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method SetContactInfo on the remote object.

Set new contact information for this connection, replacing existing information. This method is only suppported if ContactInfoFlags contains Can_Set, and may only be passed fields conforming to SupportedFields.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
contactInfoThe new information to be set.
timeoutThe timeout in milliseconds.

Represents the signal ContactInfoChanged on the remote object.

Emitted when a contact's information has changed or been received for the first time on this connection.

Parameters:
contactAn integer handle for the contact whose info has changed.
contactInfo An array of fields representing information about this contact.
void Tp::Client::ConnectionInterfaceContactInfoInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00898.html0000644000175200001440000001215612000060453021643 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingConnection Member List
This is the complete list of members for Tp::PendingConnection, including all inherited members.
connection() const Tp::PendingConnection
errorMessage() const Tp::PendingOperation
errorName() const Tp::PendingOperation
finished(Tp::PendingOperation *operation)Tp::PendingOperation [signal]
isError() const Tp::PendingOperation
isFinished() const Tp::PendingOperation
isValid() const Tp::PendingOperation
manager() const Tp::PendingConnection
object() const Tp::PendingOperation [protected]
PendingOperation(const SharedPtr< RefCounted > &object)Tp::PendingOperation [protected]
setFinished()Tp::PendingOperation [protected, slot]
setFinishedWithError(const QString &name, const QString &message)Tp::PendingOperation [protected, slot]
setFinishedWithError(const QDBusError &error)Tp::PendingOperation [protected, slot]
~PendingConnection()Tp::PendingConnection
~PendingOperation()Tp::PendingOperation [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00652_source.html0000644000175200001440000001650512000060453023211 0ustar00collabora-develusers00000000000000 pending-ready.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
pending-ready.h
00001 
00023 #ifndef _TelepathyQt_pending_ready_h_HEADER_GUARD_
00024 #define _TelepathyQt_pending_ready_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/DBusProxyFactory>
00031 #include <TelepathyQt/PendingOperation>
00032 #include <TelepathyQt/ReadinessHelper>
00033 #include <TelepathyQt/SharedPtr>
00034 
00035 #include <QSet>
00036 
00037 namespace Tp
00038 {
00039 
00040 class TP_QT_EXPORT PendingReady: public PendingOperation
00041 {
00042     Q_OBJECT
00043     Q_DISABLE_COPY(PendingReady);
00044 
00045 public:
00046     ~PendingReady();
00047 
00048     DBusProxyPtr proxy() const;
00049 
00050     Features requestedFeatures() const;
00051 
00052 private Q_SLOTS:
00053     TP_QT_NO_EXPORT void onNestedFinished(Tp::PendingOperation *);
00054 
00055 private:
00056     friend class Connection;
00057     friend class DBusProxyFactory;
00058     friend class ReadinessHelper;
00059 
00060     TP_QT_NO_EXPORT PendingReady(const SharedPtr<RefCounted> &object, const Features &requestedFeatures);
00061     TP_QT_NO_EXPORT PendingReady(const SharedPtr<DBusProxyFactory> &factory,
00062             const DBusProxyPtr &proxy, const Features &requestedFeatures);
00063 
00064     struct Private;
00065     friend struct Private;
00066     Private *mPriv;
00067 };
00068 
00069 } // Tp
00070 
00071 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01134.html0000644000175200001440000002270212000060453021621 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceContactInfoInterface Member List
This is the complete list of members for Tp::Client::ConnectionInterfaceContactInfoInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ConnectionInterfaceContactInfoInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceContactInfoInterface
ConnectionInterfaceContactInfoInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceContactInfoInterface
ConnectionInterfaceContactInfoInterface(Tp::DBusProxy *proxy)Tp::Client::ConnectionInterfaceContactInfoInterface
ConnectionInterfaceContactInfoInterface(const Tp::Client::ConnectionInterface &mainInterface)Tp::Client::ConnectionInterfaceContactInfoInterface [explicit]
ConnectionInterfaceContactInfoInterface(const Tp::Client::ConnectionInterface &mainInterface, QObject *parent)Tp::Client::ConnectionInterfaceContactInfoInterface
ContactInfoChanged(uint contact, const Tp::ContactInfoFieldList &contactInfo)Tp::Client::ConnectionInterfaceContactInfoInterface [signal]
GetContactInfo(const Tp::UIntList &contacts, int timeout=-1)Tp::Client::ConnectionInterfaceContactInfoInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ConnectionInterfaceContactInfoInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
RefreshContactInfo(const Tp::UIntList &contacts, int timeout=-1)Tp::Client::ConnectionInterfaceContactInfoInterface [inline, slot]
requestAllProperties() const Tp::Client::ConnectionInterfaceContactInfoInterface [inline]
RequestContactInfo(uint contact, int timeout=-1)Tp::Client::ConnectionInterfaceContactInfoInterface [inline, slot]
requestPropertyContactInfoFlags() const Tp::Client::ConnectionInterfaceContactInfoInterface [inline]
requestPropertySupportedFields() const Tp::Client::ConnectionInterfaceContactInfoInterface [inline]
SetContactInfo(const Tp::ContactInfoFieldList &contactInfo, int timeout=-1)Tp::Client::ConnectionInterfaceContactInfoInterface [inline, slot]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ConnectionInterfaceContactInfoInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00226.html0000644000175200001440000004577012000060453021634 0ustar00collabora-develusers00000000000000 Tp::Connection::ErrorDetails Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Connection::ErrorDetails Class Reference

The Connection::ErrorDetails class represents the details of a connection error. More...

#include <TelepathyQt/Connection>

List of all members.

Public Member Functions


Detailed Description

The Connection::ErrorDetails class represents the details of a connection error.

It contains detailed information about the reason for the connection going invalidated().

Some services may provide additional error information in the ConnectionError D-Bus signal, when a Connection is disconnected / has become unusable. If the service didn't provide any, or has not been invalidated yet, the instance will be invalid, as returned by isValid().

The information provided by invalidationReason() and this class should always be used in error handling in preference to statusReason(). The status reason can be used as a fallback, however, if the client doesn't understand what a particular value returned by invalidationReason() means, as it may be domain-specific with some services.

Connection::errorDetails() can be used to return the instance containing the details for invalidating that connection after invalidated() has been emitted.


Constructor & Destructor Documentation

Constructs a new invalid ErrorDetails instance.

Tp::Connection::ErrorDetails::ErrorDetails ( const QVariantMap &  details)

Construct a error details instance with the given details. The instance will indicate that it is valid.

Copy constructor.


Member Function Documentation

Connection::ErrorDetails & Tp::Connection::ErrorDetails::operator= ( const ErrorDetails other)

Assigns all information (validity, details) from other to this.

bool Tp::Connection::ErrorDetails::isValid ( ) const [inline]

Return whether or not the details are valid (have actually been received from the service).

Returns:
true if valid, false otherwise.

Return whether or not the details specify a debug message.

If present, the debug message will likely be the same string as the one returned by invalidationMessage().

The debug message is purely informational, offered for display for bug reporting purposes, and should not be attempted to be parsed.

Returns:
true if debug message is present, false otherwise.
See also:
debugMessage()
QString Tp::Connection::ErrorDetails::debugMessage ( ) const [inline]

Return the debug message specified by the details, if any.

If present, the debug message will likely be the same string as the one returned by invalidationMessage().

The debug message is purely informational, offered for display for bug reporting purposes, and should not be attempted to be parsed.

Returns:
The debug message, or an empty string if there is none.
See also:
hasDebugMessage()
QString Tp::Connection::ErrorDetails::serverMessage ( ) const [inline]

Return a map containing all details given in the low-level ConnectionError signal.

This is useful for accessing domain-specific additional details.

Returns:
The details of the connection error as QVariantMap.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00872.html0000644000175200001440000000635512000060453021637 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PtrFunctor7< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 > Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00093.html0000644000175200001440000007504512000060453021634 0ustar00collabora-develusers00000000000000 Tp::Client::CallStreamInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

#include <TelepathyQt/CallStream>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

  • QDBusPendingReply SetSending (bool send, int timeout=-1)
  • QDBusPendingReply RequestReceiving (uint contact, bool receive, int timeout=-1)

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Call1.Stream".


Constructor & Destructor Documentation

Tp::Client::CallStreamInterface::CallStreamInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a CallStreamInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::CallStreamInterface::CallStreamInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a CallStreamInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a CallStreamInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Member Function Documentation

static QLatin1String Tp::Client::CallStreamInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Call1.Stream", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property Interfaces of type QStringList.

Extra interfaces provided by this stream, such as CallStreamInterfaceMediaInterface . This SHOULD NOT include the Stream interface itself, and cannot change once the stream has been created.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property RemoteMembers of type Tp::ContactSendingStateMap.

A map from remote contacts to their sending state.

Media sent to this stream will be sent to all members listed here. All members listed here will also appear in ChannelTypeCallInterface::CallMembers , and each CallMembers member will be listed in at most one Stream per Content. Therefore, to hide things from a member of the call, UIs only need to mute one Stream per Content.

Contacts' handles in this map indicate whether they are sending media to this stream. Sending_State_Pending_Send indicates contacts who are not sending but have been asked to do so. The local user's sending state is shown in LocalSendingState .

This mapping is also used by the streaming implementation to map from CallContentMediaDescriptionInterface s to Streams. In this use-case, all of the senders in this stream will be represented in CallContentInterfaceMediaInterface::RemoteMediaDescriptions . This use-case should not affect anything that does not handle media streaming.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property RemoteMemberIdentifiers of type Tp::HandleIdentifierMap.

The string identifiers for handles mentioned in RemoteMembers, to give clients the minimal information necessary to create contacts without waiting for round-trips.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property LocalSendingState of type uint.

The local user's sending state. Media sent on this stream should be assumed to be received, directly or indirectly, by every other contact in the RemoteMembers mapping. Change notification is given via the LocalSendingStateChanged() signal.

Implementations of the first Call draft had the self handle in the RemoteMembers (then called Members) map and this showed that it's annoying having to keep track of the self handle so that it can be special-cased.

A value of Pending_Send for this property indicates that the other side requested the local user start sending media (which can be done by calling either SetSending() or ChannelTypeCallInterface::Accept() ).

When ChannelTypeCallInterface::Accept() is called, all streams with a local sending state of Pending_Send and the associated CallContentInterface::Disposition set to Initial are automatically set to sending.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property CanRequestReceiving of type bool.

If true, the user can request that a remote contact starts sending on this stream.

Not all protocols allow the user to ask the other side to start sending media.
Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::CallStreamInterface::SetSending ( bool  send,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method SetSending on the remote object.

Set the stream to start or stop sending media from the local user to other contacts.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
send

If True, the LocalSendingState should change to Sending, if it isn't already.

If False, the LocalSendingState should change to None, if it isn't already.

timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::CallStreamInterface::RequestReceiving ( uint  contact,
bool  receive,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method RequestReceiving on the remote object.

Request that a remote contact stops or starts sending on this stream. The CanRequestReceiving property defines whether the protocol allows the local user to request the other side start sending on this stream.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
contact

Contact from which sending is requested

receive

If true, request that the given contact starts to send media. If false, request that the given contact stops sending media.

timeoutThe timeout in milliseconds.
void Tp::Client::CallStreamInterface::RemoteMembersChanged ( const Tp::ContactSendingStateMap updates,
const Tp::HandleIdentifierMap identifiers,
const Tp::UIntList removed,
const Tp::CallStateReason reason 
) [signal]

Represents the signal RemoteMembersChanged on the remote object.

Emitted when RemoteMembers changes.
Parameters:
updatesA mapping from channel-specific handles to their updated sending state, whose keys include at least the members who were added, and the members whose states changed.
identifiers The identifiers of the contacts in the Updates map.
removedThe channel-specific handles that were removed from the keys of the RemoteMembers property, as a result of the contact leaving this stream
reasonA structured reason for the change.
void Tp::Client::CallStreamInterface::LocalSendingStateChanged ( uint  state,
const Tp::CallStateReason reason 
) [signal]

Represents the signal LocalSendingStateChanged on the remote object.

Emitted when LocalSendingState changes.
Parameters:
stateThe new value of LocalSendingState.
reasonA structured reason for the change.
void Tp::Client::CallStreamInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00881.html0000644000175200001440000000710512000060453021631 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MessageContentPart Member List
This is the complete list of members for Tp::MessageContentPart, including all inherited members.
barePart() const Tp::MessageContentPart
isValid() const Tp::MessageContentPart [inline]
MessageContentPart()Tp::MessageContentPart
MessageContentPart(const MessagePart &mp)Tp::MessageContentPart
MessageContentPart(const MessageContentPart &other)Tp::MessageContentPart
operator=(const MessageContentPart &other)Tp::MessageContentPart
operator==(const MessageContentPart &other) const Tp::MessageContentPart
~MessageContentPart()Tp::MessageContentPart


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00287.html0000644000175200001440000004754012000060453021640 0ustar00collabora-develusers00000000000000 Tp::MethodInvocationContext< T1, T2, T3, T4, T5, T6, T7, T8 > Class Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MethodInvocationContext< T1, T2, T3, T4, T5, T6, T7, T8 > Class Template Reference

The MethodInvocationContext class provides a way for the service implementation to respond to method calls. More...

#include <TelepathyQt/MethodInvocationContext>

Inherits Tp::RefCounted.

List of all members.

Public Member Functions

Protected Member Functions


Detailed Description

template<typename T1 = MethodInvocationContextTypes::Nil, typename T2 = MethodInvocationContextTypes::Nil, typename T3 = MethodInvocationContextTypes::Nil, typename T4 = MethodInvocationContextTypes::Nil, typename T5 = MethodInvocationContextTypes::Nil, typename T6 = MethodInvocationContextTypes::Nil, typename T7 = MethodInvocationContextTypes::Nil, typename T8 = MethodInvocationContextTypes::Nil>
class Tp::MethodInvocationContext< T1, T2, T3, T4, T5, T6, T7, T8 >

The MethodInvocationContext class provides a way for the service implementation to respond to method calls.

The methods setFinished() and setFinishedWithError() can be used to indicate whether the method call succeeded or failed.

If neither setFinished() nor setFinishedWithError() is called explicitly, the method call will be considered to have failed.

" In case an asynchronous operation needs to be performed when implementing a method call receiving a MethodInvocationContextPtr object, a reference to this object may be kept around until all asynchronous operations finish, and the appropriate finish method should be called to indicate whether the method call succeeded or failed later.


Constructor & Destructor Documentation

template<typename T1 = MethodInvocationContextTypes::Nil, typename T2 = MethodInvocationContextTypes::Nil, typename T3 = MethodInvocationContextTypes::Nil, typename T4 = MethodInvocationContextTypes::Nil, typename T5 = MethodInvocationContextTypes::Nil, typename T6 = MethodInvocationContextTypes::Nil, typename T7 = MethodInvocationContextTypes::Nil, typename T8 = MethodInvocationContextTypes::Nil>
Tp::MethodInvocationContext< T1, T2, T3, T4, T5, T6, T7, T8 >::MethodInvocationContext ( const QDBusConnection &  bus,
const QDBusMessage &  message 
) [inline]
template<typename T1 = MethodInvocationContextTypes::Nil, typename T2 = MethodInvocationContextTypes::Nil, typename T3 = MethodInvocationContextTypes::Nil, typename T4 = MethodInvocationContextTypes::Nil, typename T5 = MethodInvocationContextTypes::Nil, typename T6 = MethodInvocationContextTypes::Nil, typename T7 = MethodInvocationContextTypes::Nil, typename T8 = MethodInvocationContextTypes::Nil>
virtual Tp::MethodInvocationContext< T1, T2, T3, T4, T5, T6, T7, T8 >::~MethodInvocationContext ( ) [inline, virtual]

Member Function Documentation

template<typename T1 = MethodInvocationContextTypes::Nil, typename T2 = MethodInvocationContextTypes::Nil, typename T3 = MethodInvocationContextTypes::Nil, typename T4 = MethodInvocationContextTypes::Nil, typename T5 = MethodInvocationContextTypes::Nil, typename T6 = MethodInvocationContextTypes::Nil, typename T7 = MethodInvocationContextTypes::Nil, typename T8 = MethodInvocationContextTypes::Nil>
bool Tp::MethodInvocationContext< T1, T2, T3, T4, T5, T6, T7, T8 >::isFinished ( ) const [inline]
template<typename T1 = MethodInvocationContextTypes::Nil, typename T2 = MethodInvocationContextTypes::Nil, typename T3 = MethodInvocationContextTypes::Nil, typename T4 = MethodInvocationContextTypes::Nil, typename T5 = MethodInvocationContextTypes::Nil, typename T6 = MethodInvocationContextTypes::Nil, typename T7 = MethodInvocationContextTypes::Nil, typename T8 = MethodInvocationContextTypes::Nil>
bool Tp::MethodInvocationContext< T1, T2, T3, T4, T5, T6, T7, T8 >::isError ( ) const [inline]
template<typename T1 = MethodInvocationContextTypes::Nil, typename T2 = MethodInvocationContextTypes::Nil, typename T3 = MethodInvocationContextTypes::Nil, typename T4 = MethodInvocationContextTypes::Nil, typename T5 = MethodInvocationContextTypes::Nil, typename T6 = MethodInvocationContextTypes::Nil, typename T7 = MethodInvocationContextTypes::Nil, typename T8 = MethodInvocationContextTypes::Nil>
QString Tp::MethodInvocationContext< T1, T2, T3, T4, T5, T6, T7, T8 >::errorName ( ) const [inline]
template<typename T1 = MethodInvocationContextTypes::Nil, typename T2 = MethodInvocationContextTypes::Nil, typename T3 = MethodInvocationContextTypes::Nil, typename T4 = MethodInvocationContextTypes::Nil, typename T5 = MethodInvocationContextTypes::Nil, typename T6 = MethodInvocationContextTypes::Nil, typename T7 = MethodInvocationContextTypes::Nil, typename T8 = MethodInvocationContextTypes::Nil>
QString Tp::MethodInvocationContext< T1, T2, T3, T4, T5, T6, T7, T8 >::errorMessage ( ) const [inline]
template<typename T1 = MethodInvocationContextTypes::Nil, typename T2 = MethodInvocationContextTypes::Nil, typename T3 = MethodInvocationContextTypes::Nil, typename T4 = MethodInvocationContextTypes::Nil, typename T5 = MethodInvocationContextTypes::Nil, typename T6 = MethodInvocationContextTypes::Nil, typename T7 = MethodInvocationContextTypes::Nil, typename T8 = MethodInvocationContextTypes::Nil>
void Tp::MethodInvocationContext< T1, T2, T3, T4, T5, T6, T7, T8 >::setFinished ( const T1 &  t1 = T1(),
const T2 &  t2 = T2(),
const T3 &  t3 = T3(),
const T4 &  t4 = T4(),
const T5 &  t5 = T5(),
const T6 &  t6 = T6(),
const T7 &  t7 = T7(),
const T8 &  t8 = T8() 
) [inline]
template<typename T1 = MethodInvocationContextTypes::Nil, typename T2 = MethodInvocationContextTypes::Nil, typename T3 = MethodInvocationContextTypes::Nil, typename T4 = MethodInvocationContextTypes::Nil, typename T5 = MethodInvocationContextTypes::Nil, typename T6 = MethodInvocationContextTypes::Nil, typename T7 = MethodInvocationContextTypes::Nil, typename T8 = MethodInvocationContextTypes::Nil>
void Tp::MethodInvocationContext< T1, T2, T3, T4, T5, T6, T7, T8 >::setFinishedWithError ( const QString &  errorName,
const QString &  errorMessage 
) [inline]
template<typename T1 = MethodInvocationContextTypes::Nil, typename T2 = MethodInvocationContextTypes::Nil, typename T3 = MethodInvocationContextTypes::Nil, typename T4 = MethodInvocationContextTypes::Nil, typename T5 = MethodInvocationContextTypes::Nil, typename T6 = MethodInvocationContextTypes::Nil, typename T7 = MethodInvocationContextTypes::Nil, typename T8 = MethodInvocationContextTypes::Nil>
template<int Index>
Select<Index>::Type Tp::MethodInvocationContext< T1, T2, T3, T4, T5, T6, T7, T8 >::argumentAt ( ) const [inline]
template<typename T1 = MethodInvocationContextTypes::Nil, typename T2 = MethodInvocationContextTypes::Nil, typename T3 = MethodInvocationContextTypes::Nil, typename T4 = MethodInvocationContextTypes::Nil, typename T5 = MethodInvocationContextTypes::Nil, typename T6 = MethodInvocationContextTypes::Nil, typename T7 = MethodInvocationContextTypes::Nil, typename T8 = MethodInvocationContextTypes::Nil>
virtual void Tp::MethodInvocationContext< T1, T2, T3, T4, T5, T6, T7, T8 >::onFinished ( ) [inline, protected, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00213.html0000644000175200001440000013012512000060453021615 0ustar00collabora-develusers00000000000000 Tp::Client::DBus::DBusDaemonInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

#include <TelepathyQt/DBus>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

  • QDBusPendingReply< QString > Hello (int timeout=-1)
  • QDBusPendingReply< uint > RequestName (const QString &name, uint flags, int timeout=-1)
  • QDBusPendingReply< uint > ReleaseName (const QString &name, int timeout=-1)
  • QDBusPendingReply< uint > StartServiceByName (const QString &service, uint flags, int timeout=-1)
  • QDBusPendingReply< bool > NameHasOwner (const QString &nameToCheck, int timeout=-1)
  • QDBusPendingReply< QStringList > ListNames (int timeout=-1)
  • QDBusPendingReply< QStringList > ListActivatableNames (int timeout=-1)
  • QDBusPendingReply AddMatch (const QString &rule, int timeout=-1)
  • QDBusPendingReply RemoveMatch (const QString &rule, int timeout=-1)
  • QDBusPendingReply< QString > GetNameOwner (const QString &name, int timeout=-1)
  • QDBusPendingReply< QStringList > ListQueuedOwners (const QString &name, int timeout=-1)
  • QDBusPendingReply< uint > GetConnectionUnixUser (const QString &connectionName, int timeout=-1)
  • QDBusPendingReply< uint > GetConnectionUnixProcessID (const QString &connectionName, int timeout=-1)
  • QDBusPendingReply< QByteArray > GetConnectionSELinuxSecurityContext (const QString &connectionName, int timeout=-1)
  • QDBusPendingReply ReloadConfig (int timeout=-1)
  • QDBusPendingReply< QString > GetId (int timeout=-1)

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.DBus".


Constructor & Destructor Documentation

Tp::Client::DBus::DBusDaemonInterface::DBusDaemonInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a DBusDaemonInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::DBus::DBusDaemonInterface::DBusDaemonInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a DBusDaemonInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a DBusDaemonInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a DBusDaemonInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.
Tp::Client::DBus::DBusDaemonInterface::DBusDaemonInterface ( const Tp::AbstractInterface mainInterface,
QObject *  parent 
)

Creates a DBusDaemonInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

static QLatin1String Tp::Client::DBus::DBusDaemonInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.DBus", which this class represents.

Returns:
The D-Bus interface name.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply<QString> Tp::Client::DBus::DBusDaemonInterface::Hello ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method Hello on the remote object.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply<uint> Tp::Client::DBus::DBusDaemonInterface::RequestName ( const QString &  name,
uint  flags,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method RequestName on the remote object.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply<uint> Tp::Client::DBus::DBusDaemonInterface::ReleaseName ( const QString &  name,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method ReleaseName on the remote object.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply<uint> Tp::Client::DBus::DBusDaemonInterface::StartServiceByName ( const QString &  service,
uint  flags,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method StartServiceByName on the remote object.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply<bool> Tp::Client::DBus::DBusDaemonInterface::NameHasOwner ( const QString &  nameToCheck,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method NameHasOwner on the remote object.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply<QStringList> Tp::Client::DBus::DBusDaemonInterface::ListNames ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method ListNames on the remote object.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply<QStringList> Tp::Client::DBus::DBusDaemonInterface::ListActivatableNames ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method ListActivatableNames on the remote object.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::DBus::DBusDaemonInterface::AddMatch ( const QString &  rule,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method AddMatch on the remote object.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::DBus::DBusDaemonInterface::RemoveMatch ( const QString &  rule,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method RemoveMatch on the remote object.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply<QString> Tp::Client::DBus::DBusDaemonInterface::GetNameOwner ( const QString &  name,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method GetNameOwner on the remote object.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply<QStringList> Tp::Client::DBus::DBusDaemonInterface::ListQueuedOwners ( const QString &  name,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method ListQueuedOwners on the remote object.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply<uint> Tp::Client::DBus::DBusDaemonInterface::GetConnectionUnixUser ( const QString &  connectionName,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method GetConnectionUnixUser on the remote object.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply<uint> Tp::Client::DBus::DBusDaemonInterface::GetConnectionUnixProcessID ( const QString &  connectionName,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method GetConnectionUnixProcessID on the remote object.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply<QByteArray> Tp::Client::DBus::DBusDaemonInterface::GetConnectionSELinuxSecurityContext ( const QString &  connectionName,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method GetConnectionSELinuxSecurityContext on the remote object.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::DBus::DBusDaemonInterface::ReloadConfig ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method ReloadConfig on the remote object.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply<QString> Tp::Client::DBus::DBusDaemonInterface::GetId ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method GetId on the remote object.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
void Tp::Client::DBus::DBusDaemonInterface::NameOwnerChanged ( const QString &  name,
const QString &  oldOwner,
const QString &  newOwner 
) [signal]

Represents the signal NameOwnerChanged on the remote object.

void Tp::Client::DBus::DBusDaemonInterface::NameLost ( const QString &  name) [signal]

Represents the signal NameLost on the remote object.

void Tp::Client::DBus::DBusDaemonInterface::NameAcquired ( const QString &  name) [signal]

Represents the signal NameAcquired on the remote object.

void Tp::Client::DBus::DBusDaemonInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00072.html0000644000175200001440000001641312000060453021623 0ustar00collabora-develusers00000000000000 Tp::Callback2< R, Arg1, Arg2 > Class Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Callback2< R, Arg1, Arg2 > Class Template Reference

Callback with 2 arguments. More...

#include <TelepathyQt/Callbacks>

Inherits Tp::BaseCallback.

List of all members.

Public Types

Public Member Functions


Detailed Description

template<class R, class Arg1, class Arg2>
class Tp::Callback2< R, Arg1, Arg2 >

Callback with 2 arguments.

See Callbacks Usage


Member Typedef Documentation

template<class R, class Arg1, class Arg2>
typedef R(* Tp::Callback2< R, Arg1, Arg2 >::FunctionType)(Arg1, Arg2)
template<class R, class Arg1, class Arg2>
typedef R Tp::Callback2< R, Arg1, Arg2 >::ResultType

Constructor & Destructor Documentation

template<class R, class Arg1, class Arg2>
Tp::Callback2< R, Arg1, Arg2 >::Callback2 ( ) [inline]
template<class R, class Arg1, class Arg2>
template<class Functor >
Tp::Callback2< R, Arg1, Arg2 >::Callback2 ( const Functor &  functor) [inline]

Member Function Documentation

template<class R, class Arg1, class Arg2>
ResultType Tp::Callback2< R, Arg1, Arg2 >::operator() ( Arg1  a1,
Arg2  a2 
) const [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00325.html0000644000175200001440000001603112000060453021620 0ustar00collabora-develusers00000000000000 Tp::PendingString Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The PendingString class is a generic subclass of PendingOperation representing a pending D-Bus method call that returns a string. More...

#include <TelepathyQt/PendingString>

Inherits Tp::PendingOperation.

List of all members.

Public Member Functions

Protected Member Functions


Detailed Description

The PendingString class is a generic subclass of PendingOperation representing a pending D-Bus method call that returns a string.

See Asynchronous Object Model


Constructor & Destructor Documentation

Tp::PendingString::PendingString ( QDBusPendingCall  call,
const SharedPtr< RefCounted > &  object 
)

Class destructor.


Member Function Documentation

QString Tp::PendingString::result ( ) const
void Tp::PendingString::setResult ( const QString &  result) [protected]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01104.html0000644000175200001440000003056712000060453021626 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelTypeFileTransferInterface Member List
This is the complete list of members for Tp::Client::ChannelTypeFileTransferInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
AcceptFile(uint addressType, uint accessControl, const QDBusVariant &accessControlParam, qulonglong offset, int timeout=-1)Tp::Client::ChannelTypeFileTransferInterface [inline, slot]
ChannelTypeFileTransferInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelTypeFileTransferInterface
ChannelTypeFileTransferInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelTypeFileTransferInterface
ChannelTypeFileTransferInterface(Tp::DBusProxy *proxy)Tp::Client::ChannelTypeFileTransferInterface
ChannelTypeFileTransferInterface(const Tp::Client::ChannelInterface &mainInterface)Tp::Client::ChannelTypeFileTransferInterface [explicit]
ChannelTypeFileTransferInterface(const Tp::Client::ChannelInterface &mainInterface, QObject *parent)Tp::Client::ChannelTypeFileTransferInterface
FileTransferStateChanged(uint state, uint reason)Tp::Client::ChannelTypeFileTransferInterface [signal]
InitialOffsetDefined(qulonglong initialOffset)Tp::Client::ChannelTypeFileTransferInterface [signal]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ChannelTypeFileTransferInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
ProvideFile(uint addressType, uint accessControl, const QDBusVariant &accessControlParam, int timeout=-1)Tp::Client::ChannelTypeFileTransferInterface [inline, slot]
requestAllProperties() const Tp::Client::ChannelTypeFileTransferInterface [inline]
requestPropertyAvailableSocketTypes() const Tp::Client::ChannelTypeFileTransferInterface [inline]
requestPropertyContentHash() const Tp::Client::ChannelTypeFileTransferInterface [inline]
requestPropertyContentHashType() const Tp::Client::ChannelTypeFileTransferInterface [inline]
requestPropertyContentType() const Tp::Client::ChannelTypeFileTransferInterface [inline]
requestPropertyDate() const Tp::Client::ChannelTypeFileTransferInterface [inline]
requestPropertyDescription() const Tp::Client::ChannelTypeFileTransferInterface [inline]
requestPropertyFilename() const Tp::Client::ChannelTypeFileTransferInterface [inline]
requestPropertyInitialOffset() const Tp::Client::ChannelTypeFileTransferInterface [inline]
requestPropertySize() const Tp::Client::ChannelTypeFileTransferInterface [inline]
requestPropertyState() const Tp::Client::ChannelTypeFileTransferInterface [inline]
requestPropertyTransferredBytes() const Tp::Client::ChannelTypeFileTransferInterface [inline]
requestPropertyURI() const Tp::Client::ChannelTypeFileTransferInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
setPropertyURI(QString newValue)Tp::Client::ChannelTypeFileTransferInterface [inline]
staticInterfaceName()Tp::Client::ChannelTypeFileTransferInterface [inline, static]
TransferredBytesChanged(qulonglong count)Tp::Client::ChannelTypeFileTransferInterface [signal]
URIDefined(const QString &URI)Tp::Client::ChannelTypeFileTransferInterface [signal]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00321.html0000644000175200001440000001453612000060453021624 0ustar00collabora-develusers00000000000000 Tp::PendingReady Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingReady Class Reference

The PendingReady class represents the features requested and the reply to a request for an object to become ready. More...

#include <TelepathyQt/PendingReady>

Inherits Tp::PendingOperation.

List of all members.

Public Member Functions


Detailed Description

The PendingReady class represents the features requested and the reply to a request for an object to become ready.

Instances of this class cannot be constructed directly; the only way to get one is via ReadyObject::becomeReady() or a DBusProxyFactory subclass.

See Asynchronous Object Model


Constructor & Destructor Documentation

Class destructor.


Member Function Documentation

DBusProxyPtr Tp::PendingReady::proxy ( ) const

Return the proxy that should become ready.

Returns:
A pointer to the DBusProxy object if the operation was created by a proxy object or a DBusProxyFactory, otherwise a null DBusProxyPtr.

Return the features that were requested to become ready on the object.

Returns:
The requested features as a set of Feature objects.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00148.html0000644000175200001440000014174112000060453021632 0ustar00collabora-develusers00000000000000 Tp::Client::ChannelTypeStreamedMediaInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelTypeStreamedMediaInterface Class Reference

#include <TelepathyQt/Channel>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Channel.Type.StreamedMedia".


Constructor & Destructor Documentation

Tp::Client::ChannelTypeStreamedMediaInterface::ChannelTypeStreamedMediaInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelTypeStreamedMediaInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ChannelTypeStreamedMediaInterface::ChannelTypeStreamedMediaInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelTypeStreamedMediaInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ChannelTypeStreamedMediaInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ChannelTypeStreamedMediaInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ChannelTypeStreamedMediaInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

static QLatin1String Tp::Client::ChannelTypeStreamedMediaInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Channel.Type.StreamedMedia", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property InitialAudio of type bool.

If set to true in a channel request that will create a new channel, the connection manager should immediately attempt to establish an audio stream to the remote contact, making it unnecessary for the client to call ChannelTypeStreamedMediaInterface::RequestStreams() .

If this property, or InitialVideo, is passed to EnsureChannel (as opposed to CreateChannel), the connection manager SHOULD ignore these properties when checking whether it can return an existing channel as suitable; these properties only become significant when the connection manager has decided to create a new channel.

If true on a requested channel, this indicates that the audio stream has already been requested and the client does not need to call RequestStreams, although it MAY still do so.

If true on an unrequested (incoming) channel, this indicates that the remote contact initially requested an audio stream; this does not imply that that audio stream is still active (as indicated by ChannelTypeStreamedMediaInterface::ListStreams() ).

This property is immutable (cannot change), and therefore SHOULD appear wherever immutable properties are reported, e.g. ConnectionInterfaceRequestsInterface::NewChannels() signals.

This reduces D-Bus round trips.

Connection managers capable of signalling audio calls to contacts SHOULD include a channel class in ConnectionInterfaceRequestsInterface::RequestableChannelClasses with ChannelInterface::ChannelType = ChannelTypeStreamedMediaInterface and ChannelInterface::TargetHandleType = Contact in the fixed properties dictionary, and InitialAudio (and also InitialVideo, if applicable) in the allowed properties list. Clients wishing to discover whether a connection manager can signal audio and/or video calls SHOULD use this information.

Not all protocols support signalling video calls, and it would be possible (although unlikely) to have a protocol where only video, and not audio, could be signalled.

Connection managers that support the ConnectionInterfaceContactCapabilitiesInterface interface SHOULD represent the capabilities of receiving audio and/or video calls by including a channel class in a contact's capabilities with ChannelType = StreamedMedia in the fixed properties dictionary, and InitialAudio and/or InitialVideo in the allowed properties list. Clients wishing to discover whether a particular contact is likely to be able to receive audio and/or video calls SHOULD use this information.

Not all clients support video calls, and it would also be possible (although unlikely) to have a client which could only stream video, not audio.

Clients that are willing to receive audio and/or video calls SHOULD include the following among their channel classes if calling ConnectionInterfaceContactCapabilitiesInterface::UpdateCapabilities() (clients of a ChannelDispatcherInterface SHOULD instead arrange for the ChannelDispatcher to do this, by including the filters in their ClientHandlerInterface::HandlerChannelFilter properties):

  • { ChannelType = StreamedMedia }
  • { ChannelType = StreamedMedia, InitialAudio = true } if receiving calls with audio is supported
  • { ChannelType = StreamedMedia, InitialVideo = true } if receiving calls with video is supported

Connection managers for protocols with capability discovery, like XMPP, need this information to advertise the appropriate capabilities for their protocol.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property InitialVideo of type bool.

The same as InitialAudio , but for a video stream. This property is immutable (cannot change).

In particular, note that if this property is false, this does not imply that an active video stream has not been added, only that no video stream was active at the time the channel appeared.

This property is the correct way to discover whether connection managers, contacts etc. support video calls; it appears in capabilities structures in the same way as InitialAudio.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property ImmutableStreams of type bool.

If True, once streams have been requested for this channel (either by setting InitialAudio or InitialVideo when the channel is requested, or by calling RequestStreams() on a channel with no streams), a stream of a different content type cannot be added; subsequent calls to RequestStreams() that attempt to do so will fail.

If this property is missing, clients SHOULD assume that it is false, and thus that the channel's streams can be changed once the call has started.

If this property is present in the "allowed" set in all of the StreamedMedia entries in a contact's capabilities, then user interfaces MAY choose to show a separate "call" option for each class of call.

For example, once an audio-only Google Talk call has started, it is not possible to add a video stream; both audio and video must be requested at the start of the call if video is desired. User interfaces may use this pseudo-capability as a hint to display separate "Audio call" and "Video call" buttons, rather than a single "Call" button with the option to add and remove video once the call has started for contacts without this flag.

This property is immutable, and therefore SHOULD be announced in ConnectionInterfaceRequestsInterface::NewChannels() , etc.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply<Tp::MediaStreamInfoList> Tp::Client::ChannelTypeStreamedMediaInterface::ListStreams ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method ListStreams on the remote object.

Returns an array of structs representing the streams currently active within this channel. Each stream is identified by an unsigned integer which is unique for each stream within the channel.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
Returns:
An array of structs containing:
  • the stream identifier
  • the contact handle who the stream is with (or 0 if the stream represents more than a single member)
  • the type of the stream
  • the current stream state
  • the current direction of the stream
  • the current pending send flags
QDBusPendingReply Tp::Client::ChannelTypeStreamedMediaInterface::RemoveStreams ( const Tp::UIntList streams,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method RemoveStreams on the remote object.

Request that the given streams are removed. If all streams are removed, the channel MAY close.

Clients SHOULD NOT attempt to terminate calls by removing all the streams; instead, clients SHOULD terminate calls by removing the ChannelInterfaceGroupInterface::SelfHandle from the channel, using either ChannelInterfaceGroupInterface::RemoveMembers() or ChannelInterfaceGroupInterface::RemoveMembersWithReason() .

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
streamsAn array of stream identifiers (as defined in ListStreams)
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ChannelTypeStreamedMediaInterface::RequestStreamDirection ( uint  streamID,
uint  streamDirection,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method RequestStreamDirection on the remote object.

Request a change in the direction of an existing stream. In particular, this might be useful to stop sending media of a particular type, or inform the peer that you are no longer using media that is being sent to you.

Depending on the protocol, streams which are no longer sending in either direction should be removed and a StreamRemoved() signal emitted. Some direction changes can be enforced locally (for example, BIDIRECTIONAL -> RECEIVE can be achieved by merely stopping sending), others may not be possible on some protocols, and some need agreement from the remote end. In this case, the MEDIA_STREAM_PENDING_REMOTE_SEND flag will be set in the StreamDirectionChanged() signal, and the signal emitted again without the flag to indicate the resulting direction when the remote end has accepted or rejected the change.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
streamIDThe stream identifier (as defined in ListStreams)
streamDirectionThe desired stream direction (a value of MediaStreamDirection)
timeoutThe timeout in milliseconds.
QDBusPendingReply<Tp::MediaStreamInfoList> Tp::Client::ChannelTypeStreamedMediaInterface::RequestStreams ( uint  contactHandle,
const Tp::UIntList types,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method RequestStreams on the remote object.

Request that streams be established to exchange the given types of media with the given member. In general this will try and establish a bidirectional stream, but on some protocols it may not be possible to indicate to the peer that you would like to receive media, so a send-only stream will be created initially. In the cases where the stream requires remote agreement (eg you wish to receive media from them), the StreamDirectionChanged() signal will be emitted with the MEDIA_STREAM_PENDING_REMOTE_SEND flag set, and the signal emitted again with the flag cleared when the remote end has replied.

If streams of the requested types already exist, calling this method results in the creation of additional streams. Accordingly, clients wishing to have exactly one audio stream or exactly one video stream SHOULD check for the current streams using ListStreams() before calling this method.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
contactHandleA contact handle with whom to establish the streams
typesAn array of stream types (values of MediaStreamType)
timeoutThe timeout in milliseconds.
Returns:
An array of structs (in the same order as the given stream types) containing:
  • the stream identifier
  • the contact handle who the stream is with (or 0 if the stream represents more than a single member)
  • the type of the stream
  • the current stream state
  • the current direction of the stream
  • the current pending send flags
void Tp::Client::ChannelTypeStreamedMediaInterface::StreamAdded ( uint  streamID,
uint  contactHandle,
uint  streamType 
) [signal]

Represents the signal StreamAdded on the remote object.

Emitted when a new stream has been added to this channel. Clients SHOULD assume that the stream's Media_Stream_State is initially Disconnected.

If a connection manager needs to represent the addition of a stream whose state is already Connecting or Connected, it MUST do this by emitting StreamAdded, closely followed by StreamStateChanged() indicating a change to the appropriate state.

Historically, it was not clear from the StreamAdded signal what the state of the stream was. telepathy-spec 0.17.22 clarified this.

Similarly, clients SHOULD assume that the initial Media_Stream_Direction of a newly added stream is Receive, and that the initial Media_Stream_Pending_Send is Pending_Local_Send.

If a connection manager needs to represent the addition of a stream whose direction or pending-send differs from those initial values, it MUST do so by emitting StreamAdded, closely followed by StreamDirectionChanged() indicating a change to the appropriate direction and pending-send state.

StreamAdded doesn't itself indicate the stream's direction; this is unfortunate, but is preserved for compatibility.

This is the appropriate direction for streams added by a remote contact on existing connection managers, and does not violate user privacy by automatically sending audio or video (audio streams start off muted, video streams start off not sending). For streams added by the local user using the client receiving the signal, the true direction can also be determined from the return value of the RequestStreams() method.

Existing clients typically operate by maintaining a separate idea of the directions that they would like the streams to have, and enforcing these intended directions by calling RequestStreamDirection() whenever needed.

Parameters:
streamIDThe stream identifier (as defined in ListStreams)
contactHandleThe contact handle who the stream is with (or 0 if it represents more than a single member)
streamTypeThe stream type (a value from MediaStreamType)
void Tp::Client::ChannelTypeStreamedMediaInterface::StreamDirectionChanged ( uint  streamID,
uint  streamDirection,
uint  pendingFlags 
) [signal]

Represents the signal StreamDirectionChanged on the remote object.

Emitted when the direction or pending flags of a stream are changed.

If the MEDIA_STREAM_PENDING_LOCAL_SEND flag is set, the remote user has requested that we begin sending on this stream. RequestStreamDirection() should be called to indicate whether or not this change is acceptable.

This allows for a MSN-style user interface, "Fred has asked you to enable your webcam. (Accept | Reject)", if desired.

Parameters:
streamIDThe stream identifier (as defined in ListStreams)
streamDirectionThe new stream direction (as defined in ListStreams)
pendingFlagsThe new pending send flags (as defined in ListStreams)
void Tp::Client::ChannelTypeStreamedMediaInterface::StreamError ( uint  streamID,
uint  errorCode,
const QString &  message 
) [signal]

Represents the signal StreamError on the remote object.

Emitted when a stream encounters an error.

Parameters:
streamIDThe stream identifier (as defined in ListStreams)
errorCodeA stream error number, one of the values of MediaStreamError
messageA string describing the error (for debugging purposes only)

Represents the signal StreamRemoved on the remote object.

Emitted when a stream has been removed from this channel.

Parameters:
streamIDstream_id - the stream identifier (as defined in ListStreams)
void Tp::Client::ChannelTypeStreamedMediaInterface::StreamStateChanged ( uint  streamID,
uint  streamState 
) [signal]

Represents the signal StreamStateChanged on the remote object.

Emitted when a member's stream's state changes.

Parameters:
streamIDThe stream identifier (as defined in ListStreams)
streamStateThe new stream state (as defined in ListStreams)
void Tp::Client::ChannelTypeStreamedMediaInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01128.html0000644000175200001440000002053612000060453021627 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceCapabilitiesInterface Member List
This is the complete list of members for Tp::Client::ConnectionInterfaceCapabilitiesInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
AdvertiseCapabilities(const Tp::CapabilityPairList &add, const QStringList &remove, int timeout=-1)Tp::Client::ConnectionInterfaceCapabilitiesInterface [inline, slot]
CapabilitiesChanged(const Tp::CapabilityChangeList &caps)Tp::Client::ConnectionInterfaceCapabilitiesInterface [signal]
ConnectionInterfaceCapabilitiesInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceCapabilitiesInterface
ConnectionInterfaceCapabilitiesInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceCapabilitiesInterface
ConnectionInterfaceCapabilitiesInterface(Tp::DBusProxy *proxy)Tp::Client::ConnectionInterfaceCapabilitiesInterface
ConnectionInterfaceCapabilitiesInterface(const Tp::Client::ConnectionInterface &mainInterface)Tp::Client::ConnectionInterfaceCapabilitiesInterface [explicit]
ConnectionInterfaceCapabilitiesInterface(const Tp::Client::ConnectionInterface &mainInterface, QObject *parent)Tp::Client::ConnectionInterfaceCapabilitiesInterface
GetCapabilities(const Tp::UIntList &handles, int timeout=-1)Tp::Client::ConnectionInterfaceCapabilitiesInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ConnectionInterfaceCapabilitiesInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ConnectionInterfaceCapabilitiesInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ConnectionInterfaceCapabilitiesInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00908.html0000644000175200001440000001353412000060453021634 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingStreamTubeConnection Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00242.html0000644000175200001440000002670112000060453021623 0ustar00collabora-develusers00000000000000 Tp::GenericCapabilityFilter< T > Class Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::GenericCapabilityFilter< T > Class Template Reference

The GenericCapabilityFilter class provides a generic filter object to be used to filter objects by capabilities. More...

#include <TelepathyQt/GenericCapabilityFilter>

Inherits Tp::Filter< T >.

List of all members.

Public Member Functions

Static Public Member Functions


Detailed Description

template<class T>
class Tp::GenericCapabilityFilter< T >

The GenericCapabilityFilter class provides a generic filter object to be used to filter objects by capabilities.

The objects used in conjunction with this filter must implement a method called capabilities() returning a CapabilitiesBase (or a subclass of it) instance. Specialized classes such as AccountCapabilityFilter are also provided and should be used where appropriate.


Constructor & Destructor Documentation

template<class T >
virtual Tp::GenericCapabilityFilter< T >::~GenericCapabilityFilter ( ) [inline, virtual]

Member Function Documentation

template<class T >
static SharedPtr<GenericCapabilityFilter<T> > Tp::GenericCapabilityFilter< T >::create ( const RequestableChannelClassSpecList rccSpecs = RequestableChannelClassSpecList()) [inline, static]
template<class T >
virtual bool Tp::GenericCapabilityFilter< T >::isValid ( ) const [inline, virtual]

Reimplemented from Tp::Filter< T >.

template<class T >
virtual bool Tp::GenericCapabilityFilter< T >::matches ( const SharedPtr< T > &  t) const [inline, virtual]

Reimplemented from Tp::Filter< T >.

template<class T >
RequestableChannelClassSpecList Tp::GenericCapabilityFilter< T >::filter ( ) const [inline]
template<class T >
void Tp::GenericCapabilityFilter< T >::addRequestableChannelClassSubset ( const RequestableChannelClassSpec rccSpec) [inline]
template<class T >
void Tp::GenericCapabilityFilter< T >::setRequestableChannelClassesSubset ( const RequestableChannelClassSpecList rccSpecs) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01049.html0000644000175200001440000000440212000060453021623 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MediaStreamHandlerCandidate Member List
This is the complete list of members for Tp::MediaStreamHandlerCandidate, including all inherited members.
nameTp::MediaStreamHandlerCandidate
transportsTp::MediaStreamHandlerCandidate


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01081.html0000644000175200001440000002313612000060453021624 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelInterface Member List
This is the complete list of members for Tp::Client::ChannelInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ChannelInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterface
ChannelInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterface
ChannelInterface(Tp::DBusProxy *proxy)Tp::Client::ChannelInterface
Close(int timeout=-1)Tp::Client::ChannelInterface [inline, slot]
Closed()Tp::Client::ChannelInterface [signal]
GetChannelType(int timeout=-1)Tp::Client::ChannelInterface [inline, slot]
GetHandle(int timeout=-1)Tp::Client::ChannelInterface [inline, slot]
GetInterfaces(int timeout=-1)Tp::Client::ChannelInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ChannelInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ChannelInterface [inline]
requestPropertyChannelType() const Tp::Client::ChannelInterface [inline]
requestPropertyInitiatorHandle() const Tp::Client::ChannelInterface [inline]
requestPropertyInitiatorID() const Tp::Client::ChannelInterface [inline]
requestPropertyInterfaces() const Tp::Client::ChannelInterface [inline]
requestPropertyRequested() const Tp::Client::ChannelInterface [inline]
requestPropertyTargetHandle() const Tp::Client::ChannelInterface [inline]
requestPropertyTargetHandleType() const Tp::Client::ChannelInterface [inline]
requestPropertyTargetID() const Tp::Client::ChannelInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ChannelInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00887.html0000644000175200001440000000770612000060453021646 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::NotFilter< T > Member List
This is the complete list of members for Tp::NotFilter< T >, including all inherited members.
create(const SharedPtr< const Filter< T > > &filter=SharedPtr< const Filter< T > >())Tp::NotFilter< T > [inline, static]
Filter()Tp::Filter< T > [inline, protected]
filter() const Tp::NotFilter< T > [inline]
isValid() const Tp::NotFilter< T > [inline, virtual]
matches(const SharedPtr< T > &t) const Tp::NotFilter< T > [inline, virtual]
RefCounted()Tp::RefCounted [inline]
~Filter()Tp::Filter< T > [inline, virtual]
~NotFilter()Tp::NotFilter< T > [inline, virtual]
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01093.html0000644000175200001440000002420312000060453021623 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelInterfaceMessagesInterface Member List
This is the complete list of members for Tp::Client::ChannelInterfaceMessagesInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ChannelInterfaceMessagesInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfaceMessagesInterface
ChannelInterfaceMessagesInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfaceMessagesInterface
ChannelInterfaceMessagesInterface(Tp::DBusProxy *proxy)Tp::Client::ChannelInterfaceMessagesInterface
ChannelInterfaceMessagesInterface(const Tp::Client::ChannelInterface &mainInterface)Tp::Client::ChannelInterfaceMessagesInterface [explicit]
ChannelInterfaceMessagesInterface(const Tp::Client::ChannelInterface &mainInterface, QObject *parent)Tp::Client::ChannelInterfaceMessagesInterface
GetPendingMessageContent(uint messageID, const Tp::UIntList &parts, int timeout=-1)Tp::Client::ChannelInterfaceMessagesInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ChannelInterfaceMessagesInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
MessageReceived(const Tp::MessagePartList &message)Tp::Client::ChannelInterfaceMessagesInterface [signal]
MessageSent(const Tp::MessagePartList &content, uint flags, const QString &messageToken)Tp::Client::ChannelInterfaceMessagesInterface [signal]
PendingMessagesRemoved(const Tp::UIntList &messageIDs)Tp::Client::ChannelInterfaceMessagesInterface [signal]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ChannelInterfaceMessagesInterface [inline]
requestPropertyDeliveryReportingSupport() const Tp::Client::ChannelInterfaceMessagesInterface [inline]
requestPropertyMessagePartSupportFlags() const Tp::Client::ChannelInterfaceMessagesInterface [inline]
requestPropertyMessageTypes() const Tp::Client::ChannelInterfaceMessagesInterface [inline]
requestPropertyPendingMessages() const Tp::Client::ChannelInterfaceMessagesInterface [inline]
requestPropertySupportedContentTypes() const Tp::Client::ChannelInterfaceMessagesInterface [inline]
SendMessage(const Tp::MessagePartList &message, uint flags, int timeout=-1)Tp::Client::ChannelInterfaceMessagesInterface [inline, slot]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ChannelInterfaceMessagesInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00513_source.html0000644000175200001440000001264712000060453023210 0ustar00collabora-develusers00000000000000 cli-media-session-handler-body.hpp Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-media-session-handler-body.hpp
00001 #define IN_TP_QT_HEADER
00002 #include "TelepathyQt/media-session-handler.h"
00003 
00004 namespace Tp
00005 {
00006 namespace Client
00007 {
00008 
00009 MediaSessionHandlerInterface::MediaSessionHandlerInterface(const QString& busName, const QString& objectPath, QObject *parent)
00010     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00011 {
00012 }
00013 
00014 MediaSessionHandlerInterface::MediaSessionHandlerInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00015     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00016 {
00017 }
00018 
00019 MediaSessionHandlerInterface::MediaSessionHandlerInterface(Tp::DBusProxy *proxy)
00020     : Tp::AbstractInterface(proxy, staticInterfaceName())
00021 {
00022 }
00023 
00024 void MediaSessionHandlerInterface::invalidate(Tp::DBusProxy *proxy,
00025         const QString &error, const QString &message)
00026 {
00027     disconnect(this, SIGNAL(NewStreamHandler(const QDBusObjectPath&, uint, uint, uint)), NULL, NULL);
00028 
00029     Tp::AbstractInterface::invalidate(proxy, error, message);
00030 }
00031 }
00032 }


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00062.html0000644000175200001440000006133512000060453021625 0ustar00collabora-develusers00000000000000 Tp::BaseConnectionManager Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

Base class for connection manager implementations. More...

#include <TelepathyQt/BaseConnectionManager>

Inherits Tp::DBusService.

List of all members.

Signals

Public Member Functions

Static Public Member Functions

  • static BaseConnectionManagerPtr create (const QString &name)
  • template<typename BaseConnectionManagerSubclass > static SharedPtr
    < BaseConnectionManagerSubclass > create (const QString &name)
  • static BaseConnectionManagerPtr create (const QDBusConnection &dbusConnection, const QString &name)
  • template<typename BaseConnectionManagerSubclass > static SharedPtr
    < BaseConnectionManagerSubclass > create (const QDBusConnection &dbusConnection, const QString &name)

Protected Member Functions


Detailed Description

Base class for connection manager implementations.


Constructor & Destructor Documentation

Class destructor.

Tp::BaseConnectionManager::BaseConnectionManager ( const QDBusConnection &  dbusConnection,
const QString &  name 
) [protected]

Constructs a new BaseConnectionManager object that implements a connection manager on the given dbusConnection and has the given name.

Parameters:
dbusConnectionThe QDBusConnection to use.
nameThe name of the connection manager.

Member Function Documentation

static BaseConnectionManagerPtr Tp::BaseConnectionManager::create ( const QString &  name) [inline, static]
template<typename BaseConnectionManagerSubclass >
static SharedPtr<BaseConnectionManagerSubclass> Tp::BaseConnectionManager::create ( const QString &  name) [inline, static]
static BaseConnectionManagerPtr Tp::BaseConnectionManager::create ( const QDBusConnection &  dbusConnection,
const QString &  name 
) [inline, static]
template<typename BaseConnectionManagerSubclass >
static SharedPtr<BaseConnectionManagerSubclass> Tp::BaseConnectionManager::create ( const QDBusConnection &  dbusConnection,
const QString &  name 
) [inline, static]

Return the connection manager's name, as given on the constructor.

Returns:
The connection manager's name.
QVariantMap Tp::BaseConnectionManager::immutableProperties ( ) const [virtual]

Return the immutable properties of this connection manager object.

Immutable properties cannot change after the object has been registered on the bus with registerObject().

Returns:
The immutable properties of this connection manager object.

Implements Tp::DBusService.

QList< BaseProtocolPtr > Tp::BaseConnectionManager::protocols ( ) const

Return a list of all protocols that this connection manager implements.

This property is immutable and cannot change after the connection manager has been registered on the bus with registerObject().

Returns:
A list of all protocols that this connection manager implements.
See also:
addProtocol(), hasProtocol(), protocol()
BaseProtocolPtr Tp::BaseConnectionManager::protocol ( const QString &  protocolName) const

Return a pointer to the BaseProtocol instance that implements the protocol with the given protocolName, or a null BaseProtocolPtr if no such protocol has been added to the connection manager.

Parameters:
protocolNameThe name of the protocol in interest.
Returns:
The BaseProtocol instance that implements the protocol with the given protocolName.
See also:
hasProtocol(), protocols(), addProtocol()
bool Tp::BaseConnectionManager::hasProtocol ( const QString &  protocolName) const

Return whether a protocol with the given protocolName has been added to the connection manager.

Parameters:
protocolNameThe name of the protocol in interest.
Returns:
true if a protocol with the given protocolName has been added to the connection manager, or false otherwise.
See also:
addProtocol(), protocol(), protocols()
bool Tp::BaseConnectionManager::addProtocol ( const BaseProtocolPtr &  protocol)

Add a new protocol to the list of protocols that this connection manager implements.

Note that you cannot add new protocols after the connection manager has been registered on the bus with registerObject(). In addition, you cannot add two protocols with the same name. If any of these conditions is not met, this function will return false and print a suitable warning.

Parameters:
protocolThe protocol to add.
Returns:
true on success or false otherwise.

Register this connection manager on the bus.

A connection manager can only be registered once, and it should be registered only after all the protocols it implements have been added with addProtocol().

If error is passed, any D-Bus error that may occur will be stored there.

Parameters:
errorA pointer to an empty DBusError where any possible D-Bus error will be stored.
Returns:
true on success and false if there was an error or this connection manager is already registered.
See also:
isRegistered()
QList< BaseConnectionPtr > Tp::BaseConnectionManager::connections ( ) const

Return a list of all connections that have currently been made.

Returns:
A list of all connections that have currently been made.
void Tp::BaseConnectionManager::newConnection ( const BaseConnectionPtr &  connection) [signal]
bool Tp::BaseConnectionManager::registerObject ( const QString &  busName,
const QString &  objectPath,
DBusError error 
) [protected, virtual]

Reimplemented from DBusService.

Reimplemented from Tp::DBusService.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00974.html0000644000175200001440000000505212000060453021633 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ChannelInfo Member List
This is the complete list of members for Tp::ChannelInfo, including all inherited members.
channelTp::ChannelInfo
channelTypeTp::ChannelInfo
handleTp::ChannelInfo
handleTypeTp::ChannelInfo


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00929.html0000644000175200001440000006364512000060453021647 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ServerAuthenticationChannel Member List
This is the complete list of members for Tp::ServerAuthenticationChannel, including all inherited members.
actualFeatures() const Tp::ReadyObject [virtual]
baseInterface() const Tp::Channel [protected]
becomeReady(const Features &requestedFeatures=Features())Tp::ReadyObject [virtual]
busName() const Tp::DBusProxy
BypassInterfaceCheck enum valueTp::OptionalInterfaceFactory< Channel >
captchaAuthentication() const Tp::ServerAuthenticationChannel
Channel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature)Tp::Channel [protected]
channelType() const Tp::Channel
CheckInterfaceSupported enum valueTp::OptionalInterfaceFactory< Channel >
conferenceChannelMerged(const Tp::ChannelPtr &channel)Tp::Channel [signal]
conferenceChannelRemoved(const Tp::ChannelPtr &channel, const Tp::Channel::GroupMemberChangeDetails &details)Tp::Channel [signal]
conferenceChannels() const Tp::Channel
conferenceInitialChannels() const Tp::Channel
conferenceInitialInviteeContacts() const Tp::Channel
conferenceMergeChannel(const ChannelPtr &channel)Tp::Channel
conferenceOriginalChannels() const Tp::Channel
conferenceSplitChannel()Tp::Channel
connection() const Tp::Channel
create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties)Tp::ServerAuthenticationChannel [static]
dbusConnection() const Tp::DBusProxy
DBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::DBusProxy
FeatureConferenceInitialInviteeContactsTp::Channel [static]
FeatureCoreTp::ServerAuthenticationChannel [static]
groupAddContacts(const QList< ContactPtr > &contacts, const QString &message=QString())Tp::Channel
groupAddSelfHandle()Tp::Channel [protected, slot]
groupAreHandleOwnersAvailable() const Tp::Channel
groupCanAcceptContactsWithMessage() const Tp::Channel
groupCanAddContacts() const Tp::Channel
groupCanAddContactsChanged(bool canAddContacts)Tp::Channel [signal]
groupCanAddContactsWithMessage() const Tp::Channel
groupCanDepartWithMessage() const Tp::Channel
groupCanRejectContactsWithMessage() const Tp::Channel
groupCanRemoveContacts() const Tp::Channel
groupCanRemoveContactsChanged(bool canRemoveContacts)Tp::Channel [signal]
groupCanRemoveContactsWithMessage() const Tp::Channel
groupCanRescindContacts() const Tp::Channel
groupCanRescindContactsChanged(bool canRescindContacts)Tp::Channel [signal]
groupCanRescindContactsWithMessage() const Tp::Channel
groupContacts(bool includeSelfContact=true) const Tp::Channel
groupFlags() const Tp::Channel
groupFlagsChanged(Tp::ChannelGroupFlags flags, Tp::ChannelGroupFlags added, Tp::ChannelGroupFlags removed)Tp::Channel [signal]
groupHandleOwners() const Tp::Channel
groupHandleOwnersChanged(const Tp::HandleOwnerMap &owners, const Tp::UIntList &added, const Tp::UIntList &removed)Tp::Channel [signal]
groupIsSelfContactTracked() const Tp::Channel
groupLocalPendingContactChangeInfo(const ContactPtr &contact) const Tp::Channel
groupLocalPendingContacts(bool includeSelfContact=true) const Tp::Channel
groupMembersChanged(const Tp::Contacts &groupMembersAdded, const Tp::Contacts &groupLocalPendingMembersAdded, const Tp::Contacts &groupRemotePendingMembersAdded, const Tp::Contacts &groupMembersRemoved, const Tp::Channel::GroupMemberChangeDetails &details)Tp::Channel [signal]
groupRemotePendingContacts(bool includeSelfContact=true) const Tp::Channel
groupRemoveContacts(const QList< ContactPtr > &contacts, const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone)Tp::Channel
groupSelfContact() const Tp::Channel
groupSelfContactChanged()Tp::Channel [signal]
groupSelfContactRemoveInfo() const Tp::Channel
groupSelfHandleIsLocalPending() const Tp::Channel [protected]
hasCaptchaInterface() const Tp::ServerAuthenticationChannel
hasInterface(const QString &name) constTp::OptionalInterfaceFactory< Channel > [inline]
immutableProperties() const Tp::Channel
initiatorContact() const Tp::Channel
interface() constTp::OptionalInterfaceFactory< Channel > [inline]
interfaces() constTp::OptionalInterfaceFactory< Channel > [inline]
InterfaceSupportedChecking enum nameTp::OptionalInterfaceFactory< Channel >
invalidate(const QString &reason, const QString &message)Tp::DBusProxy [protected]
invalidate(const QDBusError &error)Tp::DBusProxy [protected]
invalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage)Tp::DBusProxy [signal]
invalidationMessage() const Tp::DBusProxy
invalidationReason() const Tp::DBusProxy
isConference() const Tp::Channel
isReady(const Features &features=Features()) const Tp::ReadyObject [virtual]
isRequested() const Tp::Channel
isValid() const Tp::DBusProxy
missingFeatures() const Tp::ReadyObject [virtual]
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
objectPath() const Tp::DBusProxy
optionalInterface(InterfaceSupportedChecking check=CheckInterfaceSupported) constTp::OptionalInterfaceFactory< Channel > [inline]
OptionalInterfaceFactory(Channel *this_)Tp::OptionalInterfaceFactory< Channel > [inline]
propertyChanged(const QString &propertyName)Tp::Object [signal]
readinessHelper() const Tp::ReadyObject [protected]
ReadyObject(RefCounted *object, const Feature &featureCore)Tp::ReadyObject
ReadyObject(DBusProxy *proxy, const Feature &featureCore)Tp::ReadyObject
RefCounted()Tp::RefCounted [inline]
requestClose()Tp::Channel
requestedFeatures() const Tp::ReadyObject [virtual]
requestLeave(const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone)Tp::Channel
ServerAuthenticationChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature=ServerAuthenticationChannel::FeatureCore)Tp::ServerAuthenticationChannel [protected]
setBusName(const QString &busName)Tp::DBusProxy [protected]
setInterfaces(const QStringList &interfaces)Tp::OptionalInterfaceFactory< Channel > [inline, protected]
StatefulDBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::StatefulDBusProxy
supportsConferenceMerging() const Tp::Channel
supportsConferenceSplitting() const Tp::Channel
targetContact() const Tp::Channel
targetHandle() const Tp::Channel
targetHandleType() const Tp::Channel
targetId() const Tp::Channel
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique)Tp::StatefulDBusProxy [static]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique, QString &error, QString &message)Tp::StatefulDBusProxy [static]
~Channel()Tp::Channel [virtual]
~DBusProxy()Tp::DBusProxy [virtual]
~Object()Tp::Object [virtual]
~OptionalInterfaceFactory()Tp::OptionalInterfaceFactory< Channel > [inline]
~ReadyObject()Tp::ReadyObject [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]
~ServerAuthenticationChannel()Tp::ServerAuthenticationChannel [virtual]
~StatefulDBusProxy()Tp::StatefulDBusProxy [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00401.html0000644000175200001440000015351612000060453021625 0ustar00collabora-develusers00000000000000 Tp::StreamTubeChannel Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The StreamTubeChannel class represents a Telepathy channel of type StreamTube. More...

#include <TelepathyQt/StreamTubeChannel>

Inherits Tp::TubeChannel.

Inherited by Tp::IncomingStreamTubeChannel, and Tp::OutgoingStreamTubeChannel.

List of all members.

Signals

Public Member Functions

Static Public Member Functions

Static Public Attributes

Protected Member Functions


Detailed Description

The StreamTubeChannel class represents a Telepathy channel of type StreamTube.

It provides a transport for reliable and ordered data transfer, similar to SOCK_STREAM sockets.

StreamTubeChannel is an intermediate base class; OutgoingStreamTubeChannel and IncomingStreamTubeChannel are the specialized classes used for locally and remotely initiated tubes respectively.

For more details, please refer to Telepathy specification.

See Asynchronous Object Model, Shared Pointer Usage


Constructor & Destructor Documentation

Class destructor.

Tp::StreamTubeChannel::StreamTubeChannel ( const ConnectionPtr &  connection,
const QString &  objectPath,
const QVariantMap &  immutableProperties,
const Feature coreFeature = StreamTubeChannel::FeatureCore 
) [protected]

Construct a new StreamTubeChannel object.

Parameters:
connectionConnection owning this channel, and specifying the service.
objectPathThe channel object path.
immutablePropertiesThe channel immutable properties.
coreFeatureThe core feature of the channel type, if any. The corresponding introspectable should depend on StreamTubeChannel::FeatureCore.

Member Function Documentation

StreamTubeChannelPtr Tp::StreamTubeChannel::create ( const ConnectionPtr &  connection,
const QString &  objectPath,
const QVariantMap &  immutableProperties 
) [static]

Create a new StreamTubeChannel channel.

Parameters:
connectionConnection owning this channel, and specifying the service.
objectPathThe channel object path.
immutablePropertiesThe channel immutable properties.
Returns:
A StreamTubeChannelPtr object pointing to the newly created StreamTubeChannel object.

Reimplemented from Tp::TubeChannel.

Reimplemented in Tp::IncomingStreamTubeChannel, and Tp::OutgoingStreamTubeChannel.

QString Tp::StreamTubeChannel::service ( ) const

Return the service name which will be used over this stream tube. This should be a well-known TCP service name, for instance "rsync" or "daap".

This method requires StreamTubeChannel::FeatureCore to be ready.

Returns:
The service name.

Return whether this stream tube is capable to accept or offer an IPv4 socket accepting all incoming connections coming from localhost.

Note that the Telepathy specification implies that any connection manager, if capable of providing stream tubes, must at least support IPv4 sockets with localhost access control. For this reason, this method should always return true.

This method requires StreamTubeChannel::FeatureCore to be ready.

Returns:
true if the stream tube is capable to accept or offer an IPv4 socket accepting all incoming connections coming from localhost, false otherwise.
See also:
IncomingStreamTubeChannel::acceptTubeAsTcpSocket(), OutgoingStreamTubeChannel::offerTcpSocket(), supportsIPv4SocketsWithSpecifiedAddress()

Return whether this stream tube is capable to accept an IPv4 socket accepting all incoming connections coming from a specific address for incoming tubes or whether this stream tube is capable of mapping connections to the socket's source address for outgoing tubes.

For incoming tubes, when this capability is available, the stream tube can be accepted specifying an IPv4 address. Every connection coming from any other address than the specified one will be rejected.

For outgoing tubes, when this capability is available, one can keep track of incoming connections by enabling StreamTubeChannel::FeatureConnectionMonitoring (possibly before opening the stream tube itself), and checking OutgoingStreamTubeChannel::contactsForConnections() or OutgoingStreamTubeChannel::connectionsForSourceAddresses().

Note that it is strongly advised to call this method before attempting to call IncomingStreamTubeChannel::acceptTubeAsTcpSocket() or OutgoingStreamTubeChannel::offerTcpSocket() with a specified address to prevent failures, as the spec implies this feature is not compulsory for connection managers.

This method requires StreamTubeChannel::FeatureCore to be ready.

Returns:
true if the stream tube is capable to accept an IPv4 socket accepting all incoming connections coming from a specific address for incoming tubes or the stream tube is capable of mapping connections to the socket's source address for outgoing tubes, false otherwise.
See also:
IncomingStreamTubeChannel::acceptTubeAsTcpSocket(), OutgoingStreamTubeChannel::offerTcpSocket(), OutgoingStreamTubeChannel::connectionsForSourceAddresses(), OutgoingStreamTubeChannel::contactsForConnections(), supportsIPv4SocketsOnLocalhost()

Return whether this stream tube is capable to accept or offer an IPv6 socket accepting all incoming connections coming from localhost.

Note that it is strongly advised to call this method before attempting to call IncomingStreamTubeChannel::acceptTubeAsTcpSocket() or OutgoingStreamTubeChannel::offerTcpSocket() with a specified address to prevent failures, as the spec implies this feature is not compulsory for connection managers.

This method requires StreamTubeChannel::FeatureCore to be ready.

Returns:
true if the stream tube is capable to accept or offer an IPv6 socket accepting all incoming connections coming from localhost, false otherwise.
See also:
IncomingStreamTubeChannel::acceptTubeAsTcpSocket(), OutgoingStreamTubeChannel::offerTcpSocket(), supportsIPv6SocketsWithSpecifiedAddress()

Return whether this stream tube is capable to accept an IPv6 socket accepting all incoming connections coming from a specific address for incoming tubes or whether this stream tube is capable of mapping connections to the socket's source address for outgoing tubes.

For incoming tubes, when this capability is available, the stream tube can be accepted specifying an IPv6 address. Every connection coming from any other address than the specified one will be rejected.

For outgoing tubes, when this capability is available, one can keep track of incoming connections by enabling StreamTubeChannel::FeatureConnectionMonitoring (possibly before opening the stream tube itself), and checking OutgoingStreamTubeChannel::contactsForConnections() or OutgoingStreamTubeChannel::connectionsForSourceAddresses().

Note that it is strongly advised to call this method before attempting to call IncomingStreamTubeChannel::acceptTubeAsTcpSocket() or OutgoingStreamTubeChannel::offerTcpSocket() with a specified address to prevent failures, as the spec implies this feature is not compulsory for connection managers.

This method requires StreamTubeChannel::FeatureCore to be ready.

Returns:
true if the stream tube is capable to accept an IPv6 socket accepting all incoming connections coming from a specific address for incoming tubes or the stream tube is capable of mapping connections to the socket's source address for outgoing tubes, false otherwise.
See also:
IncomingStreamTubeChannel::acceptTubeAsTcpSocket(), OutgoingStreamTubeChannel::offerTcpSocket(), OutgoingStreamTubeChannel::connectionsForSourceAddresses(), OutgoingStreamTubeChannel::contactsForConnections(), supportsIPv6SocketsOnLocalhost()

Return whether this stream tube is capable to accept or offer an Unix socket accepting all incoming connections coming from localhost.

Note that it is strongly advised to call this method before attempting to call IncomingStreamTubeChannel::acceptTubeAsUnixSocket() or OutgoingStreamTubeChannel::offerUnixSocket() without credentials enabled, as the spec implies this feature is not compulsory for connection managers.

This method requires StreamTubeChannel::FeatureCore to be ready.

Returns:
true if the stream tube is capable to accept or offer an Unix socket accepting all incoming connections coming from localhost, false otherwise.
See also:
IncomingStreamTubeChannel::acceptTubeAsUnixSocket(), OutgoingStreamTubeChannel::offerUnixSocket(), supportsUnixSocketsWithCredentials() supportsAbstractUnixSocketsOnLocalhost(), supportsAbstractUnixSocketsWithCredentials(),

Return whether this stream tube is capable to accept or offer an Unix socket which will require credentials upon connection.

When this capability is available and enabled, the connecting process must send a byte when it first connects, which is not considered to be part of the data stream. If the operating system uses sendmsg() with SCM_CREDS or SCM_CREDENTIALS to pass credentials over sockets, the connecting process must do so if possible; if not, it must still send the byte.

The listening process will disconnect the connection unless it can determine by OS-specific means that the connecting process has the same user ID as the listening process.

Note that it is strongly advised to call this method before attempting to call IncomingStreamTubeChannel::acceptTubeAsUnixSocket() or OutgoingStreamTubeChannel::offerUnixSocket() with credentials enabled, as the spec implies this feature is not compulsory for connection managers.

This method requires StreamTubeChannel::FeatureCore to be ready.

Returns:
true if the stream tube is capable to accept or offer an Unix socket which will require credentials upon connection, false otherwise.
See also:
IncomingStreamTubeChannel::acceptTubeAsUnixSocket(), OutgoingStreamTubeChannel::offerUnixSocket(), supportsUnixSocketsOnLocalhost(), supportsAbstractUnixSocketsOnLocalhost(), supportsAbstractUnixSocketsWithCredentials(),

Return whether this stream tube is capable to accept or offer an abstract Unix socket accepting all incoming connections coming from localhost.

Note that it is strongly advised to call this method before attempting to call IncomingStreamTubeChannel::acceptTubeAsUnixSocket() or OutgoingStreamTubeChannel::offerUnixSocket() without credentials enabled, as the spec implies this feature is not compulsory for connection managers.

This method requires StreamTubeChannel::FeatureCore to be ready.

Returns:
true if the stream tube is capable to accept or offer an abstract Unix socket accepting all incoming connections coming from localhost, false otherwise.
See also:
IncomingStreamTubeChannel::acceptTubeAsUnixSocket(), OutgoingStreamTubeChannel::offerUnixSocket(), supportsUnixSocketsOnLocalhost(), supportsUnixSocketsWithCredentials(), supportsAbstractUnixSocketsWithCredentials()

Return whether this stream tube is capable to accept or offer an abstract Unix socket which will require credentials upon connection.

When this capability is available and enabled, the connecting process must send a byte when it first connects, which is not considered to be part of the data stream. If the operating system uses sendmsg() with SCM_CREDS or SCM_CREDENTIALS to pass credentials over sockets, the connecting process must do so if possible; if not, it must still send the byte.

The listening process will disconnect the connection unless it can determine by OS-specific means that the connecting process has the same user ID as the listening process.

Note that it is strongly advised to call this method before attempting to call IncomingStreamTubeChannel::acceptTubeAsUnixSocket() or OutgoingStreamTubeChannel::offerUnixSocket() with credentials enabled, as the spec implies this feature is not compulsory for connection managers.

This method requires StreamTubeChannel::FeatureCore to be ready.

Returns:
true if the stream tube is capable to accept or offer an abstract Unix socket which will require credentials upon connection, false otherwise.
See also:
IncomingStreamTubeChannel::acceptTubeAsUnixSocket(), OutgoingStreamTubeChannel::offerUnixSocket(), supportsUnixSocketsOnLocalhost(), supportsUnixSocketsWithCredentials(), supportsAbstractUnixSocketsOnLocalhost()
QSet< uint > Tp::StreamTubeChannel::connections ( ) const

Return all the known active connections since StreamTubeChannel::FeatureConnectionMonitoring has been enabled.

For this method to return all known connections, you need to make StreamTubeChannel::FeatureConnectionMonitoring ready before accepting or offering the stream tube.

This method requires StreamTubeChannel::FeatureConnectionMonitoring to be ready.

Returns:
The list of active connection ids.
See also:
newConnection(), connectionClosed()

Return the type of the tube's local endpoint socket.

Note that this function will return a valid value only after state() has gone TubeStateOpen.

Returns:
The socket type as SocketAddressType.
See also:
localAddress(), ipAddress()
QPair< QHostAddress, quint16 > Tp::StreamTubeChannel::ipAddress ( ) const

Return the IP address/port combination used by this stream tube.

This method will return a meaningful value only if the local endpoint socket for the tube is a TCP socket, i.e. addressType() is SocketAddressTypeIPv4 or SocketAddressTypeIPv6.

Note that this function will return a valid value only after state() has gone TubeStateOpen.

Returns:
Pair of IP address as QHostAddress and port if using a TCP socket, or an undefined value otherwise.
See also:
localAddress()

Return the local address used by this stream tube.

This method will return a meaningful value only if the local endpoint socket for the tube is an UNIX socket, i.e. addressType() is SocketAddressTypeUnix or SocketAddressTypeAbstractUnix.

Note that this function will return a valid value only after state() has gone TubeStateOpen.

Returns:
Unix socket address if using an Unix socket, or an undefined value otherwise.
See also:
ipAddress()
void Tp::StreamTubeChannel::newConnection ( uint  connectionId) [signal]
void Tp::StreamTubeChannel::connectionClosed ( uint  connectionId,
const QString &  errorName,
const QString &  errorMessage 
) [signal]

Emitted when a connection on this stream tube has been closed.

Parameters:
connectionIdThe unique ID associated with the connection that was closed.
errorNameThe name of a D-Bus error describing the error that occurred.
errorMessageA debugging message associated with the error.
See also:
newConnection(), connections()
void Tp::StreamTubeChannel::addConnection ( uint  connection) [protected]
void Tp::StreamTubeChannel::removeConnection ( uint  connection,
const QString &  error,
const QString &  message 
) [protected]

Return the access control used by this stream tube.

Note that this function will only return a valid value after state() has gone TubeStateOpen.

Returns:
The access control as SocketAccessControl.
See also:
addressType()
void Tp::StreamTubeChannel::setAccessControl ( SocketAccessControl  accessControl) [protected]
void Tp::StreamTubeChannel::setIpAddress ( const QPair< QHostAddress, quint16 > &  address) [protected]
void Tp::StreamTubeChannel::setLocalAddress ( const QString &  address) [protected]

Member Data Documentation

Feature representing the core that needs to become ready to make the StreamTubeChannel object usable.

Note that this feature must be enabled in order to use most StreamTubeChannel methods. See specific methods documentation for more details.

Reimplemented from Tp::TubeChannel.

Reimplemented in Tp::IncomingStreamTubeChannel, and Tp::OutgoingStreamTubeChannel.

Feature used in order to monitor connections to this stream tube.

See connection monitoring specific methods' documentation for more details.

See also:
newConnection(), connectionClosed()


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00712_source.html0000644000175200001440000003776112000060453023215 0ustar00collabora-develusers00000000000000 text-channel.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
text-channel.h
00001 
00023 #ifndef _TelepathyQt_text_channel_h_HEADER_GUARD_
00024 #define _TelepathyQt_text_channel_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Channel>
00031 #include <TelepathyQt/PendingOperation>
00032 #include <TelepathyQt/PendingSendMessage>
00033 
00034 namespace Tp
00035 {
00036 
00037 class Message;
00038 class ReceivedMessage;
00039 
00040 class TP_QT_EXPORT TextChannel : public Channel
00041 {
00042     Q_OBJECT
00043     Q_DISABLE_COPY(TextChannel)
00044 
00045 public:
00046     static const Feature FeatureCore;
00047     static const Feature FeatureMessageQueue;
00048     static const Feature FeatureMessageCapabilities;
00049     static const Feature FeatureMessageSentSignal;
00050     static const Feature FeatureChatState;
00051 
00052     static TextChannelPtr create(const ConnectionPtr &connection,
00053             const QString &objectPath, const QVariantMap &immutableProperties);
00054 
00055     virtual ~TextChannel();
00056 
00057     bool hasMessagesInterface() const;
00058     bool hasChatStateInterface() const;
00059     bool canInviteContacts() const;
00060 
00061     // requires FeatureMessageCapabilities
00062     bool supportsMessageType(ChannelTextMessageType messageType) const;
00063     QList<ChannelTextMessageType> supportedMessageTypes() const;
00064     QStringList supportedContentTypes() const;
00065     MessagePartSupportFlags messagePartSupport() const;
00066     DeliveryReportingSupportFlags deliveryReportingSupport() const;
00067 
00068     // requires FeatureMessageQueue
00069     QList<ReceivedMessage> messageQueue() const;
00070 
00071     // requires FeatureChatState
00072     ChannelChatState chatState(const ContactPtr &contact) const;
00073 
00074 public Q_SLOTS:
00075     void acknowledge(const QList<ReceivedMessage> &messages);
00076 
00077     void forget(const QList<ReceivedMessage> &messages);
00078 
00079     PendingSendMessage *send(const QString &text,
00080             ChannelTextMessageType type = ChannelTextMessageTypeNormal,
00081             MessageSendingFlags flags = 0);
00082 
00083     PendingSendMessage *send(const MessagePartList &parts,
00084             MessageSendingFlags flags = 0);
00085 
00086     inline PendingOperation *inviteContacts(
00087             const QList<ContactPtr> &contacts,
00088             const QString &message = QString())
00089     {
00090         return groupAddContacts(contacts, message);
00091     }
00092 
00093     PendingOperation *requestChatState(ChannelChatState state);
00094 
00095 Q_SIGNALS:
00096     // FeatureMessageSentSignal
00097     void messageSent(const Tp::Message &message,
00098             Tp::MessageSendingFlags flags,
00099             const QString &sentMessageToken);
00100 
00101     // FeatureMessageQueue
00102     void messageReceived(const Tp::ReceivedMessage &message);
00103     void pendingMessageRemoved(
00104             const Tp::ReceivedMessage &message);
00105 
00106     // FeatureChatState
00107     void chatStateChanged(const Tp::ContactPtr &contact,
00108             Tp::ChannelChatState state);
00109 
00110 protected:
00111     TextChannel(const ConnectionPtr &connection, const QString &objectPath,
00112             const QVariantMap &immutableProperties,
00113             const Feature &coreFeature = TextChannel::FeatureCore);
00114 
00115 private Q_SLOTS:
00116     TP_QT_NO_EXPORT void onContactsFinished(Tp::PendingOperation *);
00117     TP_QT_NO_EXPORT void onAcknowledgePendingMessagesReply(QDBusPendingCallWatcher *);
00118 
00119     TP_QT_NO_EXPORT void onMessageSent(const Tp::MessagePartList &, uint,
00120             const QString &);
00121     TP_QT_NO_EXPORT void onMessageReceived(const Tp::MessagePartList &);
00122     TP_QT_NO_EXPORT void onPendingMessagesRemoved(const Tp::UIntList &);
00123 
00124     TP_QT_NO_EXPORT void onTextSent(uint, uint, const QString &);
00125     TP_QT_NO_EXPORT void onTextReceived(uint, uint, uint, uint, uint, const QString &);
00126     TP_QT_NO_EXPORT void onTextSendError(uint, uint, uint, const QString &);
00127 
00128     TP_QT_NO_EXPORT void gotProperties(QDBusPendingCallWatcher *);
00129     TP_QT_NO_EXPORT void gotPendingMessages(QDBusPendingCallWatcher *);
00130 
00131     TP_QT_NO_EXPORT void onChatStateChanged(uint, uint);
00132 
00133 private:
00134     struct Private;
00135     friend struct Private;
00136     Private *mPriv;
00137 };
00138 
00139 } // Tp
00140 
00141 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00025.html0000644000175200001440000000603412000060453021617 0ustar00collabora-develusers00000000000000 roster/roster-window.h
   Home · All Classes · All Namespaces · Modules · Functions · Files
roster/roster-window.h
#ifndef _TelepathyQt_examples_roster_roster_window_h_HEADER_GUARD_
#define _TelepathyQt_examples_roster_roster_window_h_HEADER_GUARD_

#include <QMainWindow>

#include <TelepathyQt/Account>
#include <TelepathyQt/Types>

namespace Tp {
class PendingOperation;
}

class RosterWidget;

class RosterWindow : public QMainWindow
{
    Q_OBJECT

public:
    RosterWindow(const QString &accountName, QWidget *parent = 0);
    virtual ~RosterWindow();

private Q_SLOTS:
    void onAccountReady(Tp::PendingOperation *op);
    void onAccountConnectionChanged(const Tp::ConnectionPtr &conn);

private:
    void setupGui();

    Tp::AccountPtr mAccount;
    RosterWidget *mRoster;
};

#endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_0x77.html0000644000175200001440000000372612000060453023612 0ustar00collabora-develusers00000000000000 Class Members
   Home · All Classes · All Namespaces · Modules · Functions · Files
Here is a list of all class members with links to the classes they belong to:

- w -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00730.html0000644000175200001440000000565312000060453021630 0ustar00collabora-develusers00000000000000 Tp::Farstream Namespace Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Farstream Namespace Reference

Classes

Functions


Function Documentation

Q_DECL_IMPORT PendingChannel * Tp::Farstream::createChannel ( const CallChannelPtr &  channel)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00006.html0000644000175200001440000001412212000060453021613 0ustar00collabora-develusers00000000000000 accounts/accounts-window.cpp
   Home · All Classes · All Namespaces · Modules · Functions · Files
accounts/accounts-window.cpp
#include "accounts-window.h"
#include "_gen/accounts-window.moc.hpp"

#include "account-item.h"

#include <TelepathyQt/Types>
#include <TelepathyQt/Account>
#include <TelepathyQt/AccountFactory>
#include <TelepathyQt/AccountManager>
#include <TelepathyQt/PendingOperation>
#include <TelepathyQt/PendingReady>

#include <QCheckBox>
#include <QDebug>
#include <QHBoxLayout>
#include <QItemEditorCreatorBase>
#include <QItemEditorFactory>
#include <QTableWidget>

AccountsWindow::AccountsWindow(QWidget *parent)
    : QMainWindow(parent)
{
    setupGui();

    mAM = Tp::AccountManager::create(Tp::AccountFactory::create(QDBusConnection::sessionBus(),
                Tp::Account::FeatureCore));
    connect(mAM->becomeReady(),
            SIGNAL(finished(Tp::PendingOperation *)),
            SLOT(onAMReady(Tp::PendingOperation *)));
    connect(mAM.data(),
            SIGNAL(newAccount(const Tp::AccountPtr &)),
            SLOT(onNewAccount(const Tp::AccountPtr &)));
}

AccountsWindow::~AccountsWindow()
{
}

void AccountsWindow::setupGui()
{
    mTable = new QTableWidget;

    mTable->setColumnCount(AccountItem::NumColumns);
    QStringList headerLabels;
    headerLabels <<
        QLatin1String("Valid") <<
        QLatin1String("Enabled") <<
        QLatin1String("Connection Manager") <<
        QLatin1String("Protocol Name") <<
        QLatin1String("Display Name") <<
        QLatin1String("Nickname") <<
        QLatin1String("Connects Automatically") <<
        QLatin1String("Changing Presence") <<
        QLatin1String("Automatic Presence") <<
        QLatin1String("Current Presence") <<
        QLatin1String("Requested Presence") <<
        QLatin1String("Connection Status") <<
        QLatin1String("Connection");
    mTable->setHorizontalHeaderLabels(headerLabels);

    setCentralWidget(mTable);
}

void AccountsWindow::onAMReady(Tp::PendingOperation *op)
{
    mTable->setRowCount(mAM->allAccounts().count());

    int row = 0;
    foreach (const Tp::AccountPtr &acc, mAM->allAccounts()) {
        (void) new AccountItem(acc, mTable, row++, this);
    }
}

void AccountsWindow::onNewAccount(const Tp::AccountPtr &acc)
{
    int row = mTable->rowCount();
    mTable->insertRow(row);
    (void) new AccountItem(acc, mTable, row, this);
}


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01110.html0000644000175200001440000002252612000060453021617 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelTypeTextInterface Member List
This is the complete list of members for Tp::Client::ChannelTypeTextInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
AcknowledgePendingMessages(const Tp::UIntList &IDs, int timeout=-1)Tp::Client::ChannelTypeTextInterface [inline, slot]
ChannelTypeTextInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelTypeTextInterface
ChannelTypeTextInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelTypeTextInterface
ChannelTypeTextInterface(Tp::DBusProxy *proxy)Tp::Client::ChannelTypeTextInterface
ChannelTypeTextInterface(const Tp::Client::ChannelInterface &mainInterface)Tp::Client::ChannelTypeTextInterface [explicit]
ChannelTypeTextInterface(const Tp::Client::ChannelInterface &mainInterface, QObject *parent)Tp::Client::ChannelTypeTextInterface
GetMessageTypes(int timeout=-1)Tp::Client::ChannelTypeTextInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ChannelTypeTextInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
ListPendingMessages(bool clear, int timeout=-1)Tp::Client::ChannelTypeTextInterface [inline, slot]
LostMessage()Tp::Client::ChannelTypeTextInterface [signal]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
Received(uint ID, uint timestamp, uint sender, uint type, uint flags, const QString &text)Tp::Client::ChannelTypeTextInterface [signal]
requestAllProperties() const Tp::Client::ChannelTypeTextInterface [inline]
Send(uint type, const QString &text, int timeout=-1)Tp::Client::ChannelTypeTextInterface [inline, slot]
SendError(uint error, uint timestamp, uint type, const QString &text)Tp::Client::ChannelTypeTextInterface [signal]
Sent(uint timestamp, uint type, const QString &text)Tp::Client::ChannelTypeTextInterface [signal]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ChannelTypeTextInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01017.html0000644000175200001440000000521512000060453021621 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::QualifiedPropertyValueMap Member List
This is the complete list of members for Tp::QualifiedPropertyValueMap, including all inherited members.
operator=(const QMap< QString, QDBusVariant > &a)Tp::QualifiedPropertyValueMap [inline]
QualifiedPropertyValueMap()Tp::QualifiedPropertyValueMap [inline]
QualifiedPropertyValueMap(const QMap< QString, QDBusVariant > &a)Tp::QualifiedPropertyValueMap [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00002.html0000644000175200001440000001000512000060453021603 0ustar00collabora-develusers00000000000000 Callbacks Usage
   Home · All Classes · All Namespaces · Modules · Functions · Files
Callbacks Usage

Overview

Callbacks are used in Telepathy-Qt by the service side high-level APIs to expose methods that may/should be overriden in implementations.

Ideally we would use virtual methods for this, but as new methods can be added freely (when interfaces change), we would not be able to guarantee a stable API/ABI. Other options, such as virtual padding, virtual_hook and Qt slots also have their own drawbacks.

There are 8 Callback classes, Tp::Callback0 to Tp::Callback7, which define a callback with 0 to 7 arguments respectively. The first template argument is always the return value type and the rest template arguments are the types of the callback arguments in the order that they are passed to the callback.

Callback classes can be constructed from a functor. To make it easy to use function pointers as functors, Telepathy-Qt also provides two helper functions, Tp::memFun and Tp::ptrFun.

Here is an example of their usage:

 // assuming a member function QString MyImpl::myFunc(const QString & s, int i);
 Tp::Callback2<QString, const QString &, int> cb = Tp::memFun(myObj, &MyImpl::myFunc);

 // assuming a non-member or static member function QString myFunc(const QString & s, int i);
 Tp::Callback2<QString, const QString &, int> cb = Tp::ptrFun(&myFunc);

 // assuming Tp::BaseConnectionPtr MyProtocolImpl::createConnection(const QVariantMap &parameters, DBusError *error);
 myBaseProtocol->setCreateConnectionCallback(Tp::memFun(myProtocolImpl, &MyProtocolImpl::createConnection));

You are also free to use any other mechanism for constructing functors, such as boost::bind, C++11's <functional> module or even C++11 lambda functions.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00758.html0000644000175200001440000023611312000060453021637 0ustar00collabora-develusers00000000000000 Interface string constants
   Home · All Classes · All Namespaces · Modules · Functions · Files
Interface string constants

Defines


Detailed Description

D-Bus interface names of the interfaces in the specification.


Define Documentation

The interface name "org.freedesktop.Telepathy.ConnectionManager" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Protocol" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Protocol.Interface.Addressing" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Protocol.Interface.Avatars" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Protocol.Interface.Presence" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Connection" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Connection.Interface.Addressing1" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Connection.Interface.Aliasing" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Connection.Interface.Anonymity" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Connection.Interface.Avatars" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Connection.Interface.Balance" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Connection.Interface.Capabilities" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Connection.Interface.Cellular" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Connection.Interface.ClientTypes" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Connection.Interface.Contacts" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Connection.Interface.ContactBlocking" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Connection.Interface.ContactCapabilities" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Connection.Interface.ContactGroups" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Connection.Interface.ContactInfo" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Connection.Interface.ContactList" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Connection.Interface.Location" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Connection.Interface.MailNotification" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Connection.Interface.PowerSaving" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Connection.Interface.Presence" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Connection.Interface.Requests" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Connection.Interface.ServicePoint" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Connection.Interface.SimplePresence" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Channel" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Channel.Type.Call1" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Channel.Type.ContactList" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Channel.Type.ContactSearch" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Channel.Type.DBusTube" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Channel.Type.FileTransfer" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Channel.Type.RoomList" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Channel.Type.ServerAuthentication" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Channel.Type.ServerTLSConnection" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Channel.Type.StreamedMedia" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Channel.Type.StreamTube" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Channel.Type.Text" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Channel.Type.Tubes" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Channel.Interface.Anonymity" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Channel.Interface.CaptchaAuthentication1" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Channel.Interface.CallState" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Channel.Interface.ChatState" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Channel.Interface.Conference" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Channel.Interface.Destroyable" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Channel.Interface.DTMF" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Channel.Interface.FileTransfer.Metadata" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Channel.Interface.Group" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Channel.Interface.Hold" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Channel.Interface.MediaSignalling" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Channel.Interface.Messages" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Channel.Interface.Password" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Channel.Interface.SASLAuthentication" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Channel.Interface.Securable" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Channel.Interface.ServicePoint" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Channel.Interface.SMS" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Channel.Interface.Tube" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.ChannelDispatcher" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.ChannelDispatchOperation" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.ChannelRequest" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Media.SessionHandler" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Media.StreamHandler" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.DBus" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.DBus.Introspectable" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.DBus.Peer" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.DBus.Properties" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Debug" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Properties" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.AccountManager" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Account" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Account.Interface.Addressing" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Account.Interface.Avatar" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Account.Interface.Storage" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Client" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Client.Observer" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Client.Approver" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Client.Handler" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Client.Interface.Requests" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Authentication.TLSCertificate" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Call1.Content.Interface.Media" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Call1.Content.Interface.DTMF" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Call1.Content.Interface.VideoControl" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Call1.Content.Interface.AudioControl" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Call1.Content" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Call1.Content.MediaDescription.Interface.RTCPExtendedReports" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Call1.Content.MediaDescription.Interface.RTCPFeedback" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Call1.Content.MediaDescription.Interface.RTPHeaderExtensions" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Call1.Content.MediaDescription" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Call1.Stream.Interface.Media" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Call1.Stream" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The interface name "org.freedesktop.Telepathy.Call1.Stream.Endpoint" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01001.html0000644000175200001440000000522512000060453021613 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MediaDescriptionProperties Member List
This is the complete list of members for Tp::MediaDescriptionProperties, including all inherited members.
MediaDescriptionProperties()Tp::MediaDescriptionProperties [inline]
MediaDescriptionProperties(const QMap< QString, QDBusVariant > &a)Tp::MediaDescriptionProperties [inline]
operator=(const QMap< QString, QDBusVariant > &a)Tp::MediaDescriptionProperties [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00279.html0000644000175200001440000002353712000060453021641 0ustar00collabora-develusers00000000000000 Tp::MemberFunctor6< R, T, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 > Struct Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MemberFunctor6< R, T, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 > Struct Template Reference

#include </home/collabora-devel/kde/src/telepathy-qt4/TelepathyQt/functors.h>

Inherits Tp::BaseFunctor.

List of all members.

Public Types

Public Member Functions

Public Attributes

template<class R, class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6>
struct Tp::MemberFunctor6< R, T, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >


Member Typedef Documentation

template<class R, class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6>
typedef R(T::* Tp::MemberFunctor6< R, T, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >::FunctionType)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6)
template<class R, class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6>
typedef R Tp::MemberFunctor6< R, T, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >::ResultType

Constructor & Destructor Documentation

template<class R, class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6>
Tp::MemberFunctor6< R, T, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >::MemberFunctor6 ( T *  object,
FunctionType  fn 
) [inline]

Member Function Documentation

template<class R, class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6>
ResultType Tp::MemberFunctor6< R, T, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >::operator() ( Arg1  a1,
Arg2  a2,
Arg3  a3,
Arg4  a4,
Arg5  a5,
Arg6  a6 
) const [inline]

Member Data Documentation

template<class R, class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6>
T* Tp::MemberFunctor6< R, T, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >::object
template<class R, class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6>
FunctionType Tp::MemberFunctor6< R, T, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >::fn


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01100.html0000644000175200001440000003257612000060453021624 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelTypeCallInterface Member List
This is the complete list of members for Tp::Client::ChannelTypeCallInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
Accept(int timeout=-1)Tp::Client::ChannelTypeCallInterface [inline, slot]
AddContent(const QString &contentName, uint contentType, uint initialDirection, int timeout=-1)Tp::Client::ChannelTypeCallInterface [inline, slot]
CallMembersChanged(const Tp::CallMemberMap &flagsChanged, const Tp::HandleIdentifierMap &identifiers, const Tp::UIntList &removed, const Tp::CallStateReason &reason)Tp::Client::ChannelTypeCallInterface [signal]
CallStateChanged(uint callState, uint callFlags, const Tp::CallStateReason &callStateReason, const QVariantMap &callStateDetails)Tp::Client::ChannelTypeCallInterface [signal]
ChannelTypeCallInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelTypeCallInterface
ChannelTypeCallInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelTypeCallInterface
ChannelTypeCallInterface(Tp::DBusProxy *proxy)Tp::Client::ChannelTypeCallInterface
ChannelTypeCallInterface(const Tp::Client::ChannelInterface &mainInterface)Tp::Client::ChannelTypeCallInterface [explicit]
ChannelTypeCallInterface(const Tp::Client::ChannelInterface &mainInterface, QObject *parent)Tp::Client::ChannelTypeCallInterface
ContentAdded(const QDBusObjectPath &content)Tp::Client::ChannelTypeCallInterface [signal]
ContentRemoved(const QDBusObjectPath &content, const Tp::CallStateReason &reason)Tp::Client::ChannelTypeCallInterface [signal]
Hangup(uint reason, const QString &detailedHangupReason, const QString &message, int timeout=-1)Tp::Client::ChannelTypeCallInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ChannelTypeCallInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ChannelTypeCallInterface [inline]
requestPropertyCallFlags() const Tp::Client::ChannelTypeCallInterface [inline]
requestPropertyCallMembers() const Tp::Client::ChannelTypeCallInterface [inline]
requestPropertyCallState() const Tp::Client::ChannelTypeCallInterface [inline]
requestPropertyCallStateDetails() const Tp::Client::ChannelTypeCallInterface [inline]
requestPropertyCallStateReason() const Tp::Client::ChannelTypeCallInterface [inline]
requestPropertyContents() const Tp::Client::ChannelTypeCallInterface [inline]
requestPropertyHardwareStreaming() const Tp::Client::ChannelTypeCallInterface [inline]
requestPropertyInitialAudio() const Tp::Client::ChannelTypeCallInterface [inline]
requestPropertyInitialAudioName() const Tp::Client::ChannelTypeCallInterface [inline]
requestPropertyInitialTransport() const Tp::Client::ChannelTypeCallInterface [inline]
requestPropertyInitialVideo() const Tp::Client::ChannelTypeCallInterface [inline]
requestPropertyInitialVideoName() const Tp::Client::ChannelTypeCallInterface [inline]
requestPropertyMemberIdentifiers() const Tp::Client::ChannelTypeCallInterface [inline]
requestPropertyMutableContents() const Tp::Client::ChannelTypeCallInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
SetQueued(int timeout=-1)Tp::Client::ChannelTypeCallInterface [inline, slot]
SetRinging(int timeout=-1)Tp::Client::ChannelTypeCallInterface [inline, slot]
staticInterfaceName()Tp::Client::ChannelTypeCallInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00065.html0000644000175200001440000016200512000060453021624 0ustar00collabora-develusers00000000000000 Tp::BaseProtocol Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

Base class for protocol implementations. More...

#include <TelepathyQt/BaseProtocol>

Inherits Tp::DBusService.

List of all members.

Public Types

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Base class for protocol implementations.

A Protocol is a D-Bus object that implements an IM protocol (for instance, jabber or msn). The BaseProtocol class provides an easy way to implement a Protocol D-Bus object, by providing the basic functionality itself and allowing you to extend it by setting the appropriate properties and callbacks.

A BaseProtocol instance cannot be registered by itself on the bus. You should add it to a BaseConnectionManager instance using BaseConnectionManager::addProtocol(). When the BaseConnectionManager is registered on the bus, all the BaseProtocol instances will also be registered.


Member Typedef Documentation

typedef Callback2<BaseConnectionPtr, const QVariantMap &, DBusError*> Tp::BaseProtocol::CreateConnectionCallback
typedef Callback2<QString, const QVariantMap &, DBusError*> Tp::BaseProtocol::IdentifyAccountCallback
typedef Callback2<QString, const QString &, DBusError*> Tp::BaseProtocol::NormalizeContactCallback

Constructor & Destructor Documentation

Class destructor.

Tp::BaseProtocol::BaseProtocol ( const QDBusConnection &  dbusConnection,
const QString &  name 
) [protected]

Constructs a new BaseProtocol object.

Parameters:
dbusConnectionThe D-Bus connection to use.
nameThe name of this protocol.

Member Function Documentation

static BaseProtocolPtr Tp::BaseProtocol::create ( const QString &  name) [inline, static]
template<typename BaseProtocolSubclass >
static SharedPtr<BaseProtocolSubclass> Tp::BaseProtocol::create ( const QString &  name) [inline, static]
static BaseProtocolPtr Tp::BaseProtocol::create ( const QDBusConnection &  dbusConnection,
const QString &  name 
) [inline, static]
template<typename BaseProtocolSubclass >
static SharedPtr<BaseProtocolSubclass> Tp::BaseProtocol::create ( const QDBusConnection &  dbusConnection,
const QString &  name 
) [inline, static]
QString Tp::BaseProtocol::name ( ) const

Return the protocol's name, as given on the constructor.

Returns:
The protocol's name.
QVariantMap Tp::BaseProtocol::immutableProperties ( ) const [virtual]

Return the immutable properties of this protocol object.

Immutable properties cannot change after the object has been registered on the bus with registerObject().

Returns:
The immutable properties of this protocol object.

Implements Tp::DBusService.

Return the list of interface names that have been set with setConnectionInterfaces().

This list is exposed as the ConnectionInterfaces property of this Protocol object on the bus and represents interface names that might be in the Interfaces property of a Connection to this protocol.

This property is immutable and cannot change after this Protocol object has been registered on the bus with registerObject().

Returns:
The list of interface names that have been set with setConnectionInterfaces().
See also:
setConnectionInterfaces()
void Tp::BaseProtocol::setConnectionInterfaces ( const QStringList &  connInterfaces)

Set the interface names that may appear on Connection objects of this protocol.

This property is immutable and cannot change after this Protocol object has been registered on the bus with registerObject().

Parameters:
connInterfacesThe list of interface names to set.
See also:
connectionInterfaces()

Return the list of parameters that have been set with setParameters().

This list is exposed as the Parameters property of this Protocol object on the bus and represents the parameters which may be specified in the Parameters property of an Account for this protocol.

This property is immutable and cannot change after this Protocol object has been registered on the bus with registerObject().

Returns:
The list of parameters that have been set with setParameters().
See also:
setParameters()

Set the parameters that may be specified in the Parameters property of an Account for this protocol.

This property is immutable and cannot change after this Protocol object has been registered on the bus with registerObject().

Parameters:
parametersThe list of parameters to set.
See also:
parameters()

Return the list of requestable channel classes that have been set with setRequestableChannelClasses().

This list is exposed as the RequestableChannelClasses property of this Protocol object on the bus and represents the channel classes which might be requestable from a Connection to this protocol.

This property is immutable and cannot change after this Protocol object has been registered on the bus with registerObject().

Returns:
The list of requestable channel classes that have been set with setRequestableChannelClasses()
See also:
setRequestableChannelClasses()

Set the channel classes which might be requestable from a Connection to this protocol.

This property is immutable and cannot change after this Protocol object has been registered on the bus with registerObject().

Parameters:
rccSpecsThe list of requestable channel classes to set.
See also:
requestableChannelClasses()
QString Tp::BaseProtocol::vcardField ( ) const

Return the name of the vcard field that has been set with setVCardField().

This is exposed as the VCardField property of this Protocol object on the bus and represents the name of the most common vcard field used for this protocol's contact identifiers, normalized to lower case.

This property is immutable and cannot change after this Protocol object has been registered on the bus with registerObject().

Returns:
The name of the vcard field that has been set with setVCardField().
See also:
setVCardField()
void Tp::BaseProtocol::setVCardField ( const QString &  vcardField)

Set the name of the most common vcard field used for this protocol's contact identifiers, normalized to lower case.

For example, this would be x-jabber for Jabber/XMPP (including Google Talk), or tel for the PSTN.

This property is immutable and cannot change after this Protocol object has been registered on the bus with registerObject().

Parameters:
vcardFieldThe name of the vcard field to set.
See also:
vcardField()
QString Tp::BaseProtocol::englishName ( ) const

Return the name that has been set with setEnglishName().

This is exposed as the EnglishName property of this Protocol object on the bus and represents the name of the protocol in a form suitable for display to users, such as "AIM" or "Yahoo!".

This property is immutable and cannot change after this Protocol object has been registered on the bus with registerObject().

Returns:
The name that has been set with setEnglishName().
See also:
setEnglishName()
void Tp::BaseProtocol::setEnglishName ( const QString &  englishName)

Set the name of the protocol in a form suitable for display to users, such as "AIM" or "Yahoo!".

This string should be in the C (english) locale. Clients are expected to lookup a translation on their own translation catalogs and fall back to this name if they have no translation for it.

This property is immutable and cannot change after this Protocol object has been registered on the bus with registerObject().

Parameters:
englishNameThe name to set.
See also:
englishName()
QString Tp::BaseProtocol::iconName ( ) const

Return the icon name that has been set with setIconName().

This is exposed as the Icon property of this Protocol object on the bus and represents the name of an icon in the system's icon theme suitable for this protocol, such as "im-msn".

This property is immutable and cannot change after this Protocol object has been registered on the bus with registerObject().

Returns:
The icon name set with setIconName().
See also:
setIconName()
void Tp::BaseProtocol::setIconName ( const QString &  iconName)

Set the name of an icon in the system's icon theme suitable for this protocol, such as "im-msn".

This property is immutable and cannot change after this Protocol object has been registered on the bus with registerObject().

Parameters:
iconNameThe icon name to set.
See also:
iconName()

Return the list of interfaces that have been set with setAuthenticationTypes().

This is exposed as the AuthenticationTypes property of this Protocol object on the bus and represents a list of D-Bus interfaces which provide information as to what kind of authentication channels can possibly appear before the connection reaches the CONNECTED state.

This property is immutable and cannot change after this Protocol object has been registered on the bus with registerObject().

Returns:
The list of authentication types that have been set with setAuthenticationTypes().
See also:
setAuthenticationTypes()
void Tp::BaseProtocol::setAuthenticationTypes ( const QStringList &  authenticationTypes)

Set a list of D-Bus interfaces which provide information as to what kind of authentication channels can possibly appear before the connection reaches the CONNECTED state.

This property is immutable and cannot change after this Protocol object has been registered on the bus with registerObject().

Parameters:
authenticationTypesThe list of interfaces to set.
See also:
authenticationTypes()

Set a callback that will be called to create a new connection, when this has been requested by a client.

Parameters:
cbThe callback to set.
See also:
createConnection()
BaseConnectionPtr Tp::BaseProtocol::createConnection ( const QVariantMap &  parameters,
Tp::DBusError error 
)

Create a new connection object by calling the callback that has been set with setCreateConnectionCallback().

Parameters:
parametersThe connection parameters.
errorA pointer to a DBusError instance where any possible error will be stored.
Returns:
A pointer to the new connection, or a null BaseConnectionPtr if no connection could be created, in which case error will contain an appropriate error.
See also:
setCreateConnectionCallback()

Set a callback that will be called from a client to identify an account.

This callback will be called when the IdentifyAccount method on the Protocol D-Bus object has been called.

Parameters:
cbThe callback to set.
See also:
identifyAccount()
QString Tp::BaseProtocol::identifyAccount ( const QVariantMap &  parameters,
Tp::DBusError error 
)

Return a string which uniquely identifies the account to which the given parameters would connect, by calling the callback that has been set with setIdentifyAccountCallback().

Parameters:
parametersThe connection parameters, as they would be provided to createConnection().
errorA pointer to a DBusError instance where any possible error will be stored.
Returns:
A string which uniquely identifies the account to which the given parameters would connect, or an empty string if no callback to create this string has been set with setIdentifyAccountCallback().
See also:
setIdentifyAccountCallback()

Set a callback that will be called from a client to normalize a contact id.

Parameters:
cbThe callback to set.
See also:
normalizeContact()
QString Tp::BaseProtocol::normalizeContact ( const QString &  contactId,
Tp::DBusError error 
)

Return a normalized version of the given contactId, by calling the callback that has been set with setNormalizeContactCallback().

Parameters:
contactIdThe contact ID to normalize.
errorA pointer to a DBusError instance where any possible error will be stored.
Returns:
A normalized version of the given contactId, or an empty string if no callback to do the normalization has been set with setNormalizeContactCallback().
See also:
setNormalizeContactCallback()
QList< AbstractProtocolInterfacePtr > Tp::BaseProtocol::interfaces ( ) const

Return a list of interfaces that have been plugged into this Protocol D-Bus object with plugInterface().

This property is immutable and cannot change after this Protocol object has been registered on the bus with registerObject().

Returns:
A list containing all the Protocol interface implementation objects.
See also:
plugInterface(), interface()
AbstractProtocolInterfacePtr Tp::BaseProtocol::interface ( const QString &  interfaceName) const

Return a pointer to the interface with the given name.

Parameters:
interfaceNameThe D-Bus name of the interface, ex. TP_QT_IFACE_PROTOCOL_INTERFACE_ADDRESSING.
Returns:
A pointer to the AbstractProtocolInterface object that implements the D-Bus interface with the given name, or a null pointer if such an interface has not been plugged into this object.
See also:
plugInterface(), interfaces()
bool Tp::BaseProtocol::plugInterface ( const AbstractProtocolInterfacePtr &  interface)

Plug a new interface into this Protocol D-Bus object.

This property is immutable and cannot change after this Protocol object has been registered on the bus with registerObject().

Parameters:
interfaceAn AbstractProtocolInterface instance that implements the interface that is to be plugged.
Returns:
true on success or false otherwise
See also:
interfaces(), interface()
bool Tp::BaseProtocol::registerObject ( const QString &  busName,
const QString &  objectPath,
DBusError error 
) [protected, virtual]

Reimplemented from DBusService.

Reimplemented from Tp::DBusService.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00290.html0000644000175200001440000001231712000060453021624 0ustar00collabora-develusers00000000000000 Tp::NotDelegatedMap Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::NotDelegatedMap Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<QDBusObjectPath, NotDelegatedError>, but needed to have a discrete type in the Qt type system.

A mapping associating not delegated channel with an error.


Constructor & Destructor Documentation

Tp::NotDelegatedMap::NotDelegatedMap ( const QMap< QDBusObjectPath, NotDelegatedError > &  a) [inline]

Member Function Documentation

NotDelegatedMap& Tp::NotDelegatedMap::operator= ( const QMap< QDBusObjectPath, NotDelegatedError > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01123.html0000644000175200001440000002011312000060453021611 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceAddressingInterface Member List
This is the complete list of members for Tp::Client::ConnectionInterfaceAddressingInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ConnectionInterfaceAddressingInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceAddressingInterface
ConnectionInterfaceAddressingInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceAddressingInterface
ConnectionInterfaceAddressingInterface(Tp::DBusProxy *proxy)Tp::Client::ConnectionInterfaceAddressingInterface
ConnectionInterfaceAddressingInterface(const Tp::Client::ConnectionInterface &mainInterface)Tp::Client::ConnectionInterfaceAddressingInterface [explicit]
ConnectionInterfaceAddressingInterface(const Tp::Client::ConnectionInterface &mainInterface, QObject *parent)Tp::Client::ConnectionInterfaceAddressingInterface
GetContactsByURI(const QStringList &URIs, const QStringList &interfaces, int timeout=-1)Tp::Client::ConnectionInterfaceAddressingInterface [inline, slot]
GetContactsByVCardField(const QString &field, const QStringList &addresses, const QStringList &interfaces, int timeout=-1)Tp::Client::ConnectionInterfaceAddressingInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ConnectionInterfaceAddressingInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ConnectionInterfaceAddressingInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ConnectionInterfaceAddressingInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01031.html0000644000175200001440000000432512000060453021616 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::SocketNetmaskIPv6 Member List
This is the complete list of members for Tp::SocketNetmaskIPv6, including all inherited members.
addressTp::SocketNetmaskIPv6
prefixLengthTp::SocketNetmaskIPv6


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00717_source.html0000644000175200001440000061002512000060453023210 0ustar00collabora-develusers00000000000000 types-body.hpp Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
types-body.hpp
00001 /* Generated from Telepathy D-Bus Interface Specification, TelepathyQt copy, version 0.17.7 */
00002 
00003 #define IN_TP_QT_HEADER
00004 #include "TelepathyQt/types.h"
00005 
00006 namespace Tp
00007 {
00008 TP_QT_EXPORT bool operator==(const AccessControl& v1, const AccessControl& v2)
00009 {
00010     return ((v1.type == v2.type)
00011             && (v1.detail.variant() == v2.detail.variant())
00012             );
00013 }
00014 
00015 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const AccessControl& val)
00016 {
00017     arg.beginStructure();
00018     arg << val.type << val.detail;
00019     arg.endStructure();
00020     return arg;
00021 }
00022 
00023 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, AccessControl& val)
00024 {
00025     arg.beginStructure();
00026     arg >> val.type >> val.detail;
00027     arg.endStructure();
00028     return arg;
00029 }
00030 
00031 TP_QT_EXPORT bool operator==(const AliasPair& v1, const AliasPair& v2)
00032 {
00033     return ((v1.handle == v2.handle)
00034             && (v1.alias == v2.alias)
00035             );
00036 }
00037 
00038 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const AliasPair& val)
00039 {
00040     arg.beginStructure();
00041     arg << val.handle << val.alias;
00042     arg.endStructure();
00043     return arg;
00044 }
00045 
00046 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, AliasPair& val)
00047 {
00048     arg.beginStructure();
00049     arg >> val.handle >> val.alias;
00050     arg.endStructure();
00051     return arg;
00052 }
00053 
00054 TP_QT_EXPORT bool operator==(const Avatar& v1, const Avatar& v2)
00055 {
00056     return ((v1.avatarData == v2.avatarData)
00057             && (v1.MIMEType == v2.MIMEType)
00058             );
00059 }
00060 
00061 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const Avatar& val)
00062 {
00063     arg.beginStructure();
00064     arg << val.avatarData << val.MIMEType;
00065     arg.endStructure();
00066     return arg;
00067 }
00068 
00069 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, Avatar& val)
00070 {
00071     arg.beginStructure();
00072     arg >> val.avatarData >> val.MIMEType;
00073     arg.endStructure();
00074     return arg;
00075 }
00076 
00077 TP_QT_EXPORT bool operator==(const CallStateReason& v1, const CallStateReason& v2)
00078 {
00079     return ((v1.actor == v2.actor)
00080             && (v1.reason == v2.reason)
00081             && (v1.DBusReason == v2.DBusReason)
00082             && (v1.message == v2.message)
00083             );
00084 }
00085 
00086 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const CallStateReason& val)
00087 {
00088     arg.beginStructure();
00089     arg << val.actor << val.reason << val.DBusReason << val.message;
00090     arg.endStructure();
00091     return arg;
00092 }
00093 
00094 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, CallStateReason& val)
00095 {
00096     arg.beginStructure();
00097     arg >> val.actor >> val.reason >> val.DBusReason >> val.message;
00098     arg.endStructure();
00099     return arg;
00100 }
00101 
00102 TP_QT_EXPORT bool operator==(const Candidate& v1, const Candidate& v2)
00103 {
00104     return ((v1.component == v2.component)
00105             && (v1.IP == v2.IP)
00106             && (v1.port == v2.port)
00107             && (v1.info == v2.info)
00108             );
00109 }
00110 
00111 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const Candidate& val)
00112 {
00113     arg.beginStructure();
00114     arg << val.component << val.IP << val.port << val.info;
00115     arg.endStructure();
00116     return arg;
00117 }
00118 
00119 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, Candidate& val)
00120 {
00121     arg.beginStructure();
00122     arg >> val.component >> val.IP >> val.port >> val.info;
00123     arg.endStructure();
00124     return arg;
00125 }
00126 
00127 TP_QT_EXPORT bool operator==(const CapabilityChange& v1, const CapabilityChange& v2)
00128 {
00129     return ((v1.handle == v2.handle)
00130             && (v1.channelType == v2.channelType)
00131             && (v1.oldGenericFlags == v2.oldGenericFlags)
00132             && (v1.newGenericFlags == v2.newGenericFlags)
00133             && (v1.oldTypeSpecificFlags == v2.oldTypeSpecificFlags)
00134             && (v1.newTypeSpecificFlags == v2.newTypeSpecificFlags)
00135             );
00136 }
00137 
00138 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const CapabilityChange& val)
00139 {
00140     arg.beginStructure();
00141     arg << val.handle << val.channelType << val.oldGenericFlags << val.newGenericFlags << val.oldTypeSpecificFlags << val.newTypeSpecificFlags;
00142     arg.endStructure();
00143     return arg;
00144 }
00145 
00146 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, CapabilityChange& val)
00147 {
00148     arg.beginStructure();
00149     arg >> val.handle >> val.channelType >> val.oldGenericFlags >> val.newGenericFlags >> val.oldTypeSpecificFlags >> val.newTypeSpecificFlags;
00150     arg.endStructure();
00151     return arg;
00152 }
00153 
00154 TP_QT_EXPORT bool operator==(const CapabilityPair& v1, const CapabilityPair& v2)
00155 {
00156     return ((v1.channelType == v2.channelType)
00157             && (v1.typeSpecificFlags == v2.typeSpecificFlags)
00158             );
00159 }
00160 
00161 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const CapabilityPair& val)
00162 {
00163     arg.beginStructure();
00164     arg << val.channelType << val.typeSpecificFlags;
00165     arg.endStructure();
00166     return arg;
00167 }
00168 
00169 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, CapabilityPair& val)
00170 {
00171     arg.beginStructure();
00172     arg >> val.channelType >> val.typeSpecificFlags;
00173     arg.endStructure();
00174     return arg;
00175 }
00176 
00177 TP_QT_EXPORT bool operator==(const CaptchaInfo& v1, const CaptchaInfo& v2)
00178 {
00179     return ((v1.ID == v2.ID)
00180             && (v1.type == v2.type)
00181             && (v1.label == v2.label)
00182             && (v1.flags == v2.flags)
00183             && (v1.availableMIMETypes == v2.availableMIMETypes)
00184             );
00185 }
00186 
00187 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const CaptchaInfo& val)
00188 {
00189     arg.beginStructure();
00190     arg << val.ID << val.type << val.label << val.flags << val.availableMIMETypes;
00191     arg.endStructure();
00192     return arg;
00193 }
00194 
00195 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, CaptchaInfo& val)
00196 {
00197     arg.beginStructure();
00198     arg >> val.ID >> val.type >> val.label >> val.flags >> val.availableMIMETypes;
00199     arg.endStructure();
00200     return arg;
00201 }
00202 
00203 TP_QT_EXPORT bool operator==(const ChannelDetails& v1, const ChannelDetails& v2)
00204 {
00205     return ((v1.channel == v2.channel)
00206             && (v1.properties == v2.properties)
00207             );
00208 }
00209 
00210 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const ChannelDetails& val)
00211 {
00212     arg.beginStructure();
00213     arg << val.channel << val.properties;
00214     arg.endStructure();
00215     return arg;
00216 }
00217 
00218 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, ChannelDetails& val)
00219 {
00220     arg.beginStructure();
00221     arg >> val.channel >> val.properties;
00222     arg.endStructure();
00223     return arg;
00224 }
00225 
00226 TP_QT_EXPORT bool operator==(const ChannelInfo& v1, const ChannelInfo& v2)
00227 {
00228     return ((v1.channel == v2.channel)
00229             && (v1.channelType == v2.channelType)
00230             && (v1.handleType == v2.handleType)
00231             && (v1.handle == v2.handle)
00232             );
00233 }
00234 
00235 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const ChannelInfo& val)
00236 {
00237     arg.beginStructure();
00238     arg << val.channel << val.channelType << val.handleType << val.handle;
00239     arg.endStructure();
00240     return arg;
00241 }
00242 
00243 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, ChannelInfo& val)
00244 {
00245     arg.beginStructure();
00246     arg >> val.channel >> val.channelType >> val.handleType >> val.handle;
00247     arg.endStructure();
00248     return arg;
00249 }
00250 
00251 TP_QT_EXPORT bool operator==(const ContactCapability& v1, const ContactCapability& v2)
00252 {
00253     return ((v1.handle == v2.handle)
00254             && (v1.channelType == v2.channelType)
00255             && (v1.genericFlags == v2.genericFlags)
00256             && (v1.typeSpecificFlags == v2.typeSpecificFlags)
00257             );
00258 }
00259 
00260 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const ContactCapability& val)
00261 {
00262     arg.beginStructure();
00263     arg << val.handle << val.channelType << val.genericFlags << val.typeSpecificFlags;
00264     arg.endStructure();
00265     return arg;
00266 }
00267 
00268 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, ContactCapability& val)
00269 {
00270     arg.beginStructure();
00271     arg >> val.handle >> val.channelType >> val.genericFlags >> val.typeSpecificFlags;
00272     arg.endStructure();
00273     return arg;
00274 }
00275 
00276 TP_QT_EXPORT bool operator==(const ContactInfoField& v1, const ContactInfoField& v2)
00277 {
00278     return ((v1.fieldName == v2.fieldName)
00279             && (v1.parameters == v2.parameters)
00280             && (v1.fieldValue == v2.fieldValue)
00281             );
00282 }
00283 
00284 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const ContactInfoField& val)
00285 {
00286     arg.beginStructure();
00287     arg << val.fieldName << val.parameters << val.fieldValue;
00288     arg.endStructure();
00289     return arg;
00290 }
00291 
00292 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, ContactInfoField& val)
00293 {
00294     arg.beginStructure();
00295     arg >> val.fieldName >> val.parameters >> val.fieldValue;
00296     arg.endStructure();
00297     return arg;
00298 }
00299 
00300 TP_QT_EXPORT bool operator==(const ContactSubscriptions& v1, const ContactSubscriptions& v2)
00301 {
00302     return ((v1.subscribe == v2.subscribe)
00303             && (v1.publish == v2.publish)
00304             && (v1.publishRequest == v2.publishRequest)
00305             );
00306 }
00307 
00308 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const ContactSubscriptions& val)
00309 {
00310     arg.beginStructure();
00311     arg << val.subscribe << val.publish << val.publishRequest;
00312     arg.endStructure();
00313     return arg;
00314 }
00315 
00316 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, ContactSubscriptions& val)
00317 {
00318     arg.beginStructure();
00319     arg >> val.subscribe >> val.publish >> val.publishRequest;
00320     arg.endStructure();
00321     return arg;
00322 }
00323 
00324 TP_QT_EXPORT bool operator==(const CurrencyAmount& v1, const CurrencyAmount& v2)
00325 {
00326     return ((v1.amount == v2.amount)
00327             && (v1.scale == v2.scale)
00328             && (v1.currency == v2.currency)
00329             );
00330 }
00331 
00332 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const CurrencyAmount& val)
00333 {
00334     arg.beginStructure();
00335     arg << val.amount << val.scale << val.currency;
00336     arg.endStructure();
00337     return arg;
00338 }
00339 
00340 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, CurrencyAmount& val)
00341 {
00342     arg.beginStructure();
00343     arg >> val.amount >> val.scale >> val.currency;
00344     arg.endStructure();
00345     return arg;
00346 }
00347 
00348 TP_QT_EXPORT bool operator==(const DBusTubeMember& v1, const DBusTubeMember& v2)
00349 {
00350     return ((v1.handle == v2.handle)
00351             && (v1.uniqueName == v2.uniqueName)
00352             );
00353 }
00354 
00355 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const DBusTubeMember& val)
00356 {
00357     arg.beginStructure();
00358     arg << val.handle << val.uniqueName;
00359     arg.endStructure();
00360     return arg;
00361 }
00362 
00363 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, DBusTubeMember& val)
00364 {
00365     arg.beginStructure();
00366     arg >> val.handle >> val.uniqueName;
00367     arg.endStructure();
00368     return arg;
00369 }
00370 
00371 TP_QT_EXPORT bool operator==(const DebugMessage& v1, const DebugMessage& v2)
00372 {
00373     return ((v1.timestamp == v2.timestamp)
00374             && (v1.domain == v2.domain)
00375             && (v1.level == v2.level)
00376             && (v1.message == v2.message)
00377             );
00378 }
00379 
00380 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const DebugMessage& val)
00381 {
00382     arg.beginStructure();
00383     arg << val.timestamp << val.domain << val.level << val.message;
00384     arg.endStructure();
00385     return arg;
00386 }
00387 
00388 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, DebugMessage& val)
00389 {
00390     arg.beginStructure();
00391     arg >> val.timestamp >> val.domain >> val.level >> val.message;
00392     arg.endStructure();
00393     return arg;
00394 }
00395 
00396 TP_QT_EXPORT bool operator==(const FieldSpec& v1, const FieldSpec& v2)
00397 {
00398     return ((v1.name == v2.name)
00399             && (v1.parameters == v2.parameters)
00400             && (v1.flags == v2.flags)
00401             && (v1.max == v2.max)
00402             );
00403 }
00404 
00405 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const FieldSpec& val)
00406 {
00407     arg.beginStructure();
00408     arg << val.name << val.parameters << val.flags << val.max;
00409     arg.endStructure();
00410     return arg;
00411 }
00412 
00413 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, FieldSpec& val)
00414 {
00415     arg.beginStructure();
00416     arg >> val.name >> val.parameters >> val.flags >> val.max;
00417     arg.endStructure();
00418     return arg;
00419 }
00420 
00421 TP_QT_EXPORT bool operator==(const HTTPPostData& v1, const HTTPPostData& v2)
00422 {
00423     return ((v1.key == v2.key)
00424             && (v1.value == v2.value)
00425             );
00426 }
00427 
00428 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const HTTPPostData& val)
00429 {
00430     arg.beginStructure();
00431     arg << val.key << val.value;
00432     arg.endStructure();
00433     return arg;
00434 }
00435 
00436 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, HTTPPostData& val)
00437 {
00438     arg.beginStructure();
00439     arg >> val.key >> val.value;
00440     arg.endStructure();
00441     return arg;
00442 }
00443 
00444 TP_QT_EXPORT bool operator==(const LocalPendingInfo& v1, const LocalPendingInfo& v2)
00445 {
00446     return ((v1.toBeAdded == v2.toBeAdded)
00447             && (v1.actor == v2.actor)
00448             && (v1.reason == v2.reason)
00449             && (v1.message == v2.message)
00450             );
00451 }
00452 
00453 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const LocalPendingInfo& val)
00454 {
00455     arg.beginStructure();
00456     arg << val.toBeAdded << val.actor << val.reason << val.message;
00457     arg.endStructure();
00458     return arg;
00459 }
00460 
00461 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, LocalPendingInfo& val)
00462 {
00463     arg.beginStructure();
00464     arg >> val.toBeAdded >> val.actor >> val.reason >> val.message;
00465     arg.endStructure();
00466     return arg;
00467 }
00468 
00469 TP_QT_EXPORT bool operator==(const MailAddress& v1, const MailAddress& v2)
00470 {
00471     return ((v1.name == v2.name)
00472             && (v1.address == v2.address)
00473             );
00474 }
00475 
00476 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const MailAddress& val)
00477 {
00478     arg.beginStructure();
00479     arg << val.name << val.address;
00480     arg.endStructure();
00481     return arg;
00482 }
00483 
00484 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, MailAddress& val)
00485 {
00486     arg.beginStructure();
00487     arg >> val.name >> val.address;
00488     arg.endStructure();
00489     return arg;
00490 }
00491 
00492 TP_QT_EXPORT bool operator==(const MediaDescriptionOffer& v1, const MediaDescriptionOffer& v2)
00493 {
00494     return ((v1.mediaDescription == v2.mediaDescription)
00495             && (v1.properties == v2.properties)
00496             );
00497 }
00498 
00499 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const MediaDescriptionOffer& val)
00500 {
00501     arg.beginStructure();
00502     arg << val.mediaDescription << val.properties;
00503     arg.endStructure();
00504     return arg;
00505 }
00506 
00507 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, MediaDescriptionOffer& val)
00508 {
00509     arg.beginStructure();
00510     arg >> val.mediaDescription >> val.properties;
00511     arg.endStructure();
00512     return arg;
00513 }
00514 
00515 TP_QT_EXPORT bool operator==(const MediaSessionHandlerInfo& v1, const MediaSessionHandlerInfo& v2)
00516 {
00517     return ((v1.sessionHandler == v2.sessionHandler)
00518             && (v1.mediaSessionType == v2.mediaSessionType)
00519             );
00520 }
00521 
00522 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const MediaSessionHandlerInfo& val)
00523 {
00524     arg.beginStructure();
00525     arg << val.sessionHandler << val.mediaSessionType;
00526     arg.endStructure();
00527     return arg;
00528 }
00529 
00530 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, MediaSessionHandlerInfo& val)
00531 {
00532     arg.beginStructure();
00533     arg >> val.sessionHandler >> val.mediaSessionType;
00534     arg.endStructure();
00535     return arg;
00536 }
00537 
00538 TP_QT_EXPORT bool operator==(const MediaStreamHandlerTransport& v1, const MediaStreamHandlerTransport& v2)
00539 {
00540     return ((v1.componentNumber == v2.componentNumber)
00541             && (v1.IPAddress == v2.IPAddress)
00542             && (v1.port == v2.port)
00543             && (v1.protocol == v2.protocol)
00544             && (v1.subtype == v2.subtype)
00545             && (v1.profile == v2.profile)
00546             && (v1.preferenceValue == v2.preferenceValue)
00547             && (v1.transportType == v2.transportType)
00548             && (v1.username == v2.username)
00549             && (v1.password == v2.password)
00550             );
00551 }
00552 
00553 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const MediaStreamHandlerTransport& val)
00554 {
00555     arg.beginStructure();
00556     arg << val.componentNumber << val.IPAddress << val.port << val.protocol << val.subtype << val.profile << val.preferenceValue << val.transportType << val.username << val.password;
00557     arg.endStructure();
00558     return arg;
00559 }
00560 
00561 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, MediaStreamHandlerTransport& val)
00562 {
00563     arg.beginStructure();
00564     arg >> val.componentNumber >> val.IPAddress >> val.port >> val.protocol >> val.subtype >> val.profile >> val.preferenceValue >> val.transportType >> val.username >> val.password;
00565     arg.endStructure();
00566     return arg;
00567 }
00568 
00569 TP_QT_EXPORT bool operator==(const MediaStreamInfo& v1, const MediaStreamInfo& v2)
00570 {
00571     return ((v1.identifier == v2.identifier)
00572             && (v1.contact == v2.contact)
00573             && (v1.type == v2.type)
00574             && (v1.state == v2.state)
00575             && (v1.direction == v2.direction)
00576             && (v1.pendingSendFlags == v2.pendingSendFlags)
00577             );
00578 }
00579 
00580 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const MediaStreamInfo& val)
00581 {
00582     arg.beginStructure();
00583     arg << val.identifier << val.contact << val.type << val.state << val.direction << val.pendingSendFlags;
00584     arg.endStructure();
00585     return arg;
00586 }
00587 
00588 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, MediaStreamInfo& val)
00589 {
00590     arg.beginStructure();
00591     arg >> val.identifier >> val.contact >> val.type >> val.state >> val.direction >> val.pendingSendFlags;
00592     arg.endStructure();
00593     return arg;
00594 }
00595 
00596 TP_QT_EXPORT bool operator==(const NotDelegatedError& v1, const NotDelegatedError& v2)
00597 {
00598     return ((v1.errorName == v2.errorName)
00599             && (v1.errorMessage == v2.errorMessage)
00600             );
00601 }
00602 
00603 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const NotDelegatedError& val)
00604 {
00605     arg.beginStructure();
00606     arg << val.errorName << val.errorMessage;
00607     arg.endStructure();
00608     return arg;
00609 }
00610 
00611 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, NotDelegatedError& val)
00612 {
00613     arg.beginStructure();
00614     arg >> val.errorName >> val.errorMessage;
00615     arg.endStructure();
00616     return arg;
00617 }
00618 
00619 TP_QT_EXPORT bool operator==(const ParamSpec& v1, const ParamSpec& v2)
00620 {
00621     return ((v1.name == v2.name)
00622             && (v1.flags == v2.flags)
00623             && (v1.signature == v2.signature)
00624             && (v1.defaultValue.variant() == v2.defaultValue.variant())
00625             );
00626 }
00627 
00628 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const ParamSpec& val)
00629 {
00630     arg.beginStructure();
00631     arg << val.name << val.flags << val.signature << val.defaultValue;
00632     arg.endStructure();
00633     return arg;
00634 }
00635 
00636 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, ParamSpec& val)
00637 {
00638     arg.beginStructure();
00639     arg >> val.name >> val.flags >> val.signature >> val.defaultValue;
00640     arg.endStructure();
00641     return arg;
00642 }
00643 
00644 TP_QT_EXPORT bool operator==(const PendingTextMessage& v1, const PendingTextMessage& v2)
00645 {
00646     return ((v1.identifier == v2.identifier)
00647             && (v1.unixTimestamp == v2.unixTimestamp)
00648             && (v1.sender == v2.sender)
00649             && (v1.messageType == v2.messageType)
00650             && (v1.flags == v2.flags)
00651             && (v1.text == v2.text)
00652             );
00653 }
00654 
00655 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const PendingTextMessage& val)
00656 {
00657     arg.beginStructure();
00658     arg << val.identifier << val.unixTimestamp << val.sender << val.messageType << val.flags << val.text;
00659     arg.endStructure();
00660     return arg;
00661 }
00662 
00663 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, PendingTextMessage& val)
00664 {
00665     arg.beginStructure();
00666     arg >> val.identifier >> val.unixTimestamp >> val.sender >> val.messageType >> val.flags >> val.text;
00667     arg.endStructure();
00668     return arg;
00669 }
00670 
00671 TP_QT_EXPORT bool operator==(const PropertyFlagsChange& v1, const PropertyFlagsChange& v2)
00672 {
00673     return ((v1.propertyID == v2.propertyID)
00674             && (v1.newFlags == v2.newFlags)
00675             );
00676 }
00677 
00678 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const PropertyFlagsChange& val)
00679 {
00680     arg.beginStructure();
00681     arg << val.propertyID << val.newFlags;
00682     arg.endStructure();
00683     return arg;
00684 }
00685 
00686 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, PropertyFlagsChange& val)
00687 {
00688     arg.beginStructure();
00689     arg >> val.propertyID >> val.newFlags;
00690     arg.endStructure();
00691     return arg;
00692 }
00693 
00694 TP_QT_EXPORT bool operator==(const PropertySpec& v1, const PropertySpec& v2)
00695 {
00696     return ((v1.propertyID == v2.propertyID)
00697             && (v1.name == v2.name)
00698             && (v1.signature == v2.signature)
00699             && (v1.flags == v2.flags)
00700             );
00701 }
00702 
00703 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const PropertySpec& val)
00704 {
00705     arg.beginStructure();
00706     arg << val.propertyID << val.name << val.signature << val.flags;
00707     arg.endStructure();
00708     return arg;
00709 }
00710 
00711 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, PropertySpec& val)
00712 {
00713     arg.beginStructure();
00714     arg >> val.propertyID >> val.name >> val.signature >> val.flags;
00715     arg.endStructure();
00716     return arg;
00717 }
00718 
00719 TP_QT_EXPORT bool operator==(const PropertyValue& v1, const PropertyValue& v2)
00720 {
00721     return ((v1.identifier == v2.identifier)
00722             && (v1.value.variant() == v2.value.variant())
00723             );
00724 }
00725 
00726 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const PropertyValue& val)
00727 {
00728     arg.beginStructure();
00729     arg << val.identifier << val.value;
00730     arg.endStructure();
00731     return arg;
00732 }
00733 
00734 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, PropertyValue& val)
00735 {
00736     arg.beginStructure();
00737     arg >> val.identifier >> val.value;
00738     arg.endStructure();
00739     return arg;
00740 }
00741 
00742 TP_QT_EXPORT bool operator==(const RTCPFeedbackMessage& v1, const RTCPFeedbackMessage& v2)
00743 {
00744     return ((v1.type == v2.type)
00745             && (v1.subtype == v2.subtype)
00746             && (v1.parameters == v2.parameters)
00747             );
00748 }
00749 
00750 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const RTCPFeedbackMessage& val)
00751 {
00752     arg.beginStructure();
00753     arg << val.type << val.subtype << val.parameters;
00754     arg.endStructure();
00755     return arg;
00756 }
00757 
00758 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, RTCPFeedbackMessage& val)
00759 {
00760     arg.beginStructure();
00761     arg >> val.type >> val.subtype >> val.parameters;
00762     arg.endStructure();
00763     return arg;
00764 }
00765 
00766 TP_QT_EXPORT bool operator==(const RTPHeaderExtension& v1, const RTPHeaderExtension& v2)
00767 {
00768     return ((v1.ID == v2.ID)
00769             && (v1.direction == v2.direction)
00770             && (v1.URI == v2.URI)
00771             && (v1.parameters == v2.parameters)
00772             );
00773 }
00774 
00775 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const RTPHeaderExtension& val)
00776 {
00777     arg.beginStructure();
00778     arg << val.ID << val.direction << val.URI << val.parameters;
00779     arg.endStructure();
00780     return arg;
00781 }
00782 
00783 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, RTPHeaderExtension& val)
00784 {
00785     arg.beginStructure();
00786     arg >> val.ID >> val.direction >> val.URI >> val.parameters;
00787     arg.endStructure();
00788     return arg;
00789 }
00790 
00791 TP_QT_EXPORT bool operator==(const RequestableChannelClass& v1, const RequestableChannelClass& v2)
00792 {
00793     return ((v1.fixedProperties == v2.fixedProperties)
00794             && (v1.allowedProperties == v2.allowedProperties)
00795             );
00796 }
00797 
00798 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const RequestableChannelClass& val)
00799 {
00800     arg.beginStructure();
00801     arg << val.fixedProperties << val.allowedProperties;
00802     arg.endStructure();
00803     return arg;
00804 }
00805 
00806 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, RequestableChannelClass& val)
00807 {
00808     arg.beginStructure();
00809     arg >> val.fixedProperties >> val.allowedProperties;
00810     arg.endStructure();
00811     return arg;
00812 }
00813 
00814 TP_QT_EXPORT bool operator==(const RichPresenceAccessControl& v1, const RichPresenceAccessControl& v2)
00815 {
00816     return ((v1.type == v2.type)
00817             && (v1.detail.variant() == v2.detail.variant())
00818             );
00819 }
00820 
00821 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const RichPresenceAccessControl& val)
00822 {
00823     arg.beginStructure();
00824     arg << val.type << val.detail;
00825     arg.endStructure();
00826     return arg;
00827 }
00828 
00829 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, RichPresenceAccessControl& val)
00830 {
00831     arg.beginStructure();
00832     arg >> val.type >> val.detail;
00833     arg.endStructure();
00834     return arg;
00835 }
00836 
00837 TP_QT_EXPORT bool operator==(const RoomInfo& v1, const RoomInfo& v2)
00838 {
00839     return ((v1.handle == v2.handle)
00840             && (v1.channelType == v2.channelType)
00841             && (v1.info == v2.info)
00842             );
00843 }
00844 
00845 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const RoomInfo& val)
00846 {
00847     arg.beginStructure();
00848     arg << val.handle << val.channelType << val.info;
00849     arg.endStructure();
00850     return arg;
00851 }
00852 
00853 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, RoomInfo& val)
00854 {
00855     arg.beginStructure();
00856     arg >> val.handle >> val.channelType >> val.info;
00857     arg.endStructure();
00858     return arg;
00859 }
00860 
00861 TP_QT_EXPORT bool operator==(const ServicePoint& v1, const ServicePoint& v2)
00862 {
00863     return ((v1.servicePointType == v2.servicePointType)
00864             && (v1.service == v2.service)
00865             );
00866 }
00867 
00868 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const ServicePoint& val)
00869 {
00870     arg.beginStructure();
00871     arg << val.servicePointType << val.service;
00872     arg.endStructure();
00873     return arg;
00874 }
00875 
00876 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, ServicePoint& val)
00877 {
00878     arg.beginStructure();
00879     arg >> val.servicePointType >> val.service;
00880     arg.endStructure();
00881     return arg;
00882 }
00883 
00884 TP_QT_EXPORT bool operator==(const SimplePresence& v1, const SimplePresence& v2)
00885 {
00886     return ((v1.type == v2.type)
00887             && (v1.status == v2.status)
00888             && (v1.statusMessage == v2.statusMessage)
00889             );
00890 }
00891 
00892 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const SimplePresence& val)
00893 {
00894     arg.beginStructure();
00895     arg << val.type << val.status << val.statusMessage;
00896     arg.endStructure();
00897     return arg;
00898 }
00899 
00900 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, SimplePresence& val)
00901 {
00902     arg.beginStructure();
00903     arg >> val.type >> val.status >> val.statusMessage;
00904     arg.endStructure();
00905     return arg;
00906 }
00907 
00908 TP_QT_EXPORT bool operator==(const SimpleStatusSpec& v1, const SimpleStatusSpec& v2)
00909 {
00910     return ((v1.type == v2.type)
00911             && (v1.maySetOnSelf == v2.maySetOnSelf)
00912             && (v1.canHaveMessage == v2.canHaveMessage)
00913             );
00914 }
00915 
00916 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const SimpleStatusSpec& val)
00917 {
00918     arg.beginStructure();
00919     arg << val.type << val.maySetOnSelf << val.canHaveMessage;
00920     arg.endStructure();
00921     return arg;
00922 }
00923 
00924 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, SimpleStatusSpec& val)
00925 {
00926     arg.beginStructure();
00927     arg >> val.type >> val.maySetOnSelf >> val.canHaveMessage;
00928     arg.endStructure();
00929     return arg;
00930 }
00931 
00932 TP_QT_EXPORT bool operator==(const SocketAddressIP& v1, const SocketAddressIP& v2)
00933 {
00934     return ((v1.address == v2.address)
00935             && (v1.port == v2.port)
00936             );
00937 }
00938 
00939 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const SocketAddressIP& val)
00940 {
00941     arg.beginStructure();
00942     arg << val.address << val.port;
00943     arg.endStructure();
00944     return arg;
00945 }
00946 
00947 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, SocketAddressIP& val)
00948 {
00949     arg.beginStructure();
00950     arg >> val.address >> val.port;
00951     arg.endStructure();
00952     return arg;
00953 }
00954 
00955 TP_QT_EXPORT bool operator==(const SocketAddressIPv4& v1, const SocketAddressIPv4& v2)
00956 {
00957     return ((v1.address == v2.address)
00958             && (v1.port == v2.port)
00959             );
00960 }
00961 
00962 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const SocketAddressIPv4& val)
00963 {
00964     arg.beginStructure();
00965     arg << val.address << val.port;
00966     arg.endStructure();
00967     return arg;
00968 }
00969 
00970 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, SocketAddressIPv4& val)
00971 {
00972     arg.beginStructure();
00973     arg >> val.address >> val.port;
00974     arg.endStructure();
00975     return arg;
00976 }
00977 
00978 TP_QT_EXPORT bool operator==(const SocketAddressIPv6& v1, const SocketAddressIPv6& v2)
00979 {
00980     return ((v1.address == v2.address)
00981             && (v1.port == v2.port)
00982             );
00983 }
00984 
00985 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const SocketAddressIPv6& val)
00986 {
00987     arg.beginStructure();
00988     arg << val.address << val.port;
00989     arg.endStructure();
00990     return arg;
00991 }
00992 
00993 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, SocketAddressIPv6& val)
00994 {
00995     arg.beginStructure();
00996     arg >> val.address >> val.port;
00997     arg.endStructure();
00998     return arg;
00999 }
01000 
01001 TP_QT_EXPORT bool operator==(const SocketNetmaskIPv4& v1, const SocketNetmaskIPv4& v2)
01002 {
01003     return ((v1.address == v2.address)
01004             && (v1.prefixLength == v2.prefixLength)
01005             );
01006 }
01007 
01008 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const SocketNetmaskIPv4& val)
01009 {
01010     arg.beginStructure();
01011     arg << val.address << val.prefixLength;
01012     arg.endStructure();
01013     return arg;
01014 }
01015 
01016 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, SocketNetmaskIPv4& val)
01017 {
01018     arg.beginStructure();
01019     arg >> val.address >> val.prefixLength;
01020     arg.endStructure();
01021     return arg;
01022 }
01023 
01024 TP_QT_EXPORT bool operator==(const SocketNetmaskIPv6& v1, const SocketNetmaskIPv6& v2)
01025 {
01026     return ((v1.address == v2.address)
01027             && (v1.prefixLength == v2.prefixLength)
01028             );
01029 }
01030 
01031 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const SocketNetmaskIPv6& val)
01032 {
01033     arg.beginStructure();
01034     arg << val.address << val.prefixLength;
01035     arg.endStructure();
01036     return arg;
01037 }
01038 
01039 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, SocketNetmaskIPv6& val)
01040 {
01041     arg.beginStructure();
01042     arg >> val.address >> val.prefixLength;
01043     arg.endStructure();
01044     return arg;
01045 }
01046 
01047 TP_QT_EXPORT bool operator==(const StreamCredentials& v1, const StreamCredentials& v2)
01048 {
01049     return ((v1.username == v2.username)
01050             && (v1.password == v2.password)
01051             );
01052 }
01053 
01054 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const StreamCredentials& val)
01055 {
01056     arg.beginStructure();
01057     arg << val.username << val.password;
01058     arg.endStructure();
01059     return arg;
01060 }
01061 
01062 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, StreamCredentials& val)
01063 {
01064     arg.beginStructure();
01065     arg >> val.username >> val.password;
01066     arg.endStructure();
01067     return arg;
01068 }
01069 
01070 TP_QT_EXPORT bool operator==(const TLSCertificateRejection& v1, const TLSCertificateRejection& v2)
01071 {
01072     return ((v1.reason == v2.reason)
01073             && (v1.error == v2.error)
01074             && (v1.details == v2.details)
01075             );
01076 }
01077 
01078 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const TLSCertificateRejection& val)
01079 {
01080     arg.beginStructure();
01081     arg << val.reason << val.error << val.details;
01082     arg.endStructure();
01083     return arg;
01084 }
01085 
01086 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, TLSCertificateRejection& val)
01087 {
01088     arg.beginStructure();
01089     arg >> val.reason >> val.error >> val.details;
01090     arg.endStructure();
01091     return arg;
01092 }
01093 
01094 TP_QT_EXPORT bool operator==(const TubeInfo& v1, const TubeInfo& v2)
01095 {
01096     return ((v1.identifier == v2.identifier)
01097             && (v1.initiator == v2.initiator)
01098             && (v1.type == v2.type)
01099             && (v1.service == v2.service)
01100             && (v1.parameters == v2.parameters)
01101             && (v1.state == v2.state)
01102             );
01103 }
01104 
01105 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const TubeInfo& val)
01106 {
01107     arg.beginStructure();
01108     arg << val.identifier << val.initiator << val.type << val.service << val.parameters << val.state;
01109     arg.endStructure();
01110     return arg;
01111 }
01112 
01113 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, TubeInfo& val)
01114 {
01115     arg.beginStructure();
01116     arg >> val.identifier >> val.initiator >> val.type >> val.service >> val.parameters >> val.state;
01117     arg.endStructure();
01118     return arg;
01119 }
01120 
01121 TP_QT_EXPORT bool operator==(const VideoResolution& v1, const VideoResolution& v2)
01122 {
01123     return ((v1.width == v2.width)
01124             && (v1.height == v2.height)
01125             );
01126 }
01127 
01128 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const VideoResolution& val)
01129 {
01130     arg.beginStructure();
01131     arg << val.width << val.height;
01132     arg.endStructure();
01133     return arg;
01134 }
01135 
01136 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, VideoResolution& val)
01137 {
01138     arg.beginStructure();
01139     arg >> val.width >> val.height;
01140     arg.endStructure();
01141     return arg;
01142 }
01143 
01144 TP_QT_EXPORT bool operator==(const CandidatePair& v1, const CandidatePair& v2)
01145 {
01146     return ((v1.local == v2.local)
01147             && (v1.remote == v2.remote)
01148             );
01149 }
01150 
01151 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const CandidatePair& val)
01152 {
01153     arg.beginStructure();
01154     arg << val.local << val.remote;
01155     arg.endStructure();
01156     return arg;
01157 }
01158 
01159 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, CandidatePair& val)
01160 {
01161     arg.beginStructure();
01162     arg >> val.local >> val.remote;
01163     arg.endStructure();
01164     return arg;
01165 }
01166 
01167 TP_QT_EXPORT bool operator==(const Codec& v1, const Codec& v2)
01168 {
01169     return ((v1.identifier == v2.identifier)
01170             && (v1.name == v2.name)
01171             && (v1.clockrate == v2.clockrate)
01172             && (v1.channels == v2.channels)
01173             && (v1.updated == v2.updated)
01174             && (v1.parameters == v2.parameters)
01175             );
01176 }
01177 
01178 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const Codec& val)
01179 {
01180     arg.beginStructure();
01181     arg << val.identifier << val.name << val.clockrate << val.channels << val.updated << val.parameters;
01182     arg.endStructure();
01183     return arg;
01184 }
01185 
01186 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, Codec& val)
01187 {
01188     arg.beginStructure();
01189     arg >> val.identifier >> val.name >> val.clockrate >> val.channels >> val.updated >> val.parameters;
01190     arg.endStructure();
01191     return arg;
01192 }
01193 
01194 TP_QT_EXPORT bool operator==(const HandlerCapabilities& v1, const HandlerCapabilities& v2)
01195 {
01196     return ((v1.wellKnownName == v2.wellKnownName)
01197             && (v1.channelClasses == v2.channelClasses)
01198             && (v1.capabilities == v2.capabilities)
01199             );
01200 }
01201 
01202 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const HandlerCapabilities& val)
01203 {
01204     arg.beginStructure();
01205     arg << val.wellKnownName << val.channelClasses << val.capabilities;
01206     arg.endStructure();
01207     return arg;
01208 }
01209 
01210 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, HandlerCapabilities& val)
01211 {
01212     arg.beginStructure();
01213     arg >> val.wellKnownName >> val.channelClasses >> val.capabilities;
01214     arg.endStructure();
01215     return arg;
01216 }
01217 
01218 TP_QT_EXPORT bool operator==(const LastActivityAndStatuses& v1, const LastActivityAndStatuses& v2)
01219 {
01220     return ((v1.lastActivity == v2.lastActivity)
01221             && (v1.statuses == v2.statuses)
01222             );
01223 }
01224 
01225 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const LastActivityAndStatuses& val)
01226 {
01227     arg.beginStructure();
01228     arg << val.lastActivity << val.statuses;
01229     arg.endStructure();
01230     return arg;
01231 }
01232 
01233 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, LastActivityAndStatuses& val)
01234 {
01235     arg.beginStructure();
01236     arg >> val.lastActivity >> val.statuses;
01237     arg.endStructure();
01238     return arg;
01239 }
01240 
01241 TP_QT_EXPORT bool operator==(const MailURL& v1, const MailURL& v2)
01242 {
01243     return ((v1.URL == v2.URL)
01244             && (v1.method == v2.method)
01245             && (v1.postData == v2.postData)
01246             );
01247 }
01248 
01249 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const MailURL& val)
01250 {
01251     arg.beginStructure();
01252     arg << val.URL << val.method << val.postData;
01253     arg.endStructure();
01254     return arg;
01255 }
01256 
01257 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, MailURL& val)
01258 {
01259     arg.beginStructure();
01260     arg >> val.URL >> val.method >> val.postData;
01261     arg.endStructure();
01262     return arg;
01263 }
01264 
01265 TP_QT_EXPORT bool operator==(const MediaStreamHandlerCandidate& v1, const MediaStreamHandlerCandidate& v2)
01266 {
01267     return ((v1.name == v2.name)
01268             && (v1.transports == v2.transports)
01269             );
01270 }
01271 
01272 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const MediaStreamHandlerCandidate& val)
01273 {
01274     arg.beginStructure();
01275     arg << val.name << val.transports;
01276     arg.endStructure();
01277     return arg;
01278 }
01279 
01280 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, MediaStreamHandlerCandidate& val)
01281 {
01282     arg.beginStructure();
01283     arg >> val.name >> val.transports;
01284     arg.endStructure();
01285     return arg;
01286 }
01287 
01288 TP_QT_EXPORT bool operator==(const MediaStreamHandlerCodec& v1, const MediaStreamHandlerCodec& v2)
01289 {
01290     return ((v1.codecID == v2.codecID)
01291             && (v1.name == v2.name)
01292             && (v1.mediaType == v2.mediaType)
01293             && (v1.clockRate == v2.clockRate)
01294             && (v1.numberOfChannels == v2.numberOfChannels)
01295             && (v1.parameters == v2.parameters)
01296             );
01297 }
01298 
01299 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const MediaStreamHandlerCodec& val)
01300 {
01301     arg.beginStructure();
01302     arg << val.codecID << val.name << val.mediaType << val.clockRate << val.numberOfChannels << val.parameters;
01303     arg.endStructure();
01304     return arg;
01305 }
01306 
01307 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, MediaStreamHandlerCodec& val)
01308 {
01309     arg.beginStructure();
01310     arg >> val.codecID >> val.name >> val.mediaType >> val.clockRate >> val.numberOfChannels >> val.parameters;
01311     arg.endStructure();
01312     return arg;
01313 }
01314 
01315 TP_QT_EXPORT bool operator==(const RTCPFeedbackMessageProperties& v1, const RTCPFeedbackMessageProperties& v2)
01316 {
01317     return ((v1.RTCPMinimumInterval == v2.RTCPMinimumInterval)
01318             && (v1.messages == v2.messages)
01319             );
01320 }
01321 
01322 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const RTCPFeedbackMessageProperties& val)
01323 {
01324     arg.beginStructure();
01325     arg << val.RTCPMinimumInterval << val.messages;
01326     arg.endStructure();
01327     return arg;
01328 }
01329 
01330 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, RTCPFeedbackMessageProperties& val)
01331 {
01332     arg.beginStructure();
01333     arg >> val.RTCPMinimumInterval >> val.messages;
01334     arg.endStructure();
01335     return arg;
01336 }
01337 
01338 TP_QT_EXPORT bool operator==(const ServicePointInfo& v1, const ServicePointInfo& v2)
01339 {
01340     return ((v1.servicePoint == v2.servicePoint)
01341             && (v1.serviceIDs == v2.serviceIDs)
01342             );
01343 }
01344 
01345 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const ServicePointInfo& val)
01346 {
01347     arg.beginStructure();
01348     arg << val.servicePoint << val.serviceIDs;
01349     arg.endStructure();
01350     return arg;
01351 }
01352 
01353 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, ServicePointInfo& val)
01354 {
01355     arg.beginStructure();
01356     arg >> val.servicePoint >> val.serviceIDs;
01357     arg.endStructure();
01358     return arg;
01359 }
01360 
01361 TP_QT_EXPORT bool operator==(const StatusSpec& v1, const StatusSpec& v2)
01362 {
01363     return ((v1.type == v2.type)
01364             && (v1.maySetOnSelf == v2.maySetOnSelf)
01365             && (v1.exclusive == v2.exclusive)
01366             && (v1.parameterTypes == v2.parameterTypes)
01367             );
01368 }
01369 
01370 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const StatusSpec& val)
01371 {
01372     arg.beginStructure();
01373     arg << val.type << val.maySetOnSelf << val.exclusive << val.parameterTypes;
01374     arg.endStructure();
01375     return arg;
01376 }
01377 
01378 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, StatusSpec& val)
01379 {
01380     arg.beginStructure();
01381     arg >> val.type >> val.maySetOnSelf >> val.exclusive >> val.parameterTypes;
01382     arg.endStructure();
01383     return arg;
01384 }
01385 
01386 TP_QT_NO_EXPORT void _registerTypes()
01387 {
01388     static bool registered = false;
01389     if (registered)
01390         return;
01391     registered = true;
01392 
01393     qDBusRegisterMetaType<Tp::AccessControl>();
01394     qDBusRegisterMetaType<Tp::AddressingNormalizationMap>();
01395     qDBusRegisterMetaType<Tp::AliasMap>();
01396     qDBusRegisterMetaType<Tp::AliasPair>();
01397     qDBusRegisterMetaType<Tp::AliasPairList>();
01398     qDBusRegisterMetaType<Tp::Avatar>();
01399     qDBusRegisterMetaType<Tp::AvatarTokenMap>();
01400     qDBusRegisterMetaType<Tp::ByteArrayList>();
01401     qDBusRegisterMetaType<Tp::CallMemberMap>();
01402     qDBusRegisterMetaType<Tp::CallMemberMapList>();
01403     qDBusRegisterMetaType<Tp::CallStateReason>();
01404     qDBusRegisterMetaType<Tp::Candidate>();
01405     qDBusRegisterMetaType<Tp::CandidateInfo>();
01406     qDBusRegisterMetaType<Tp::CandidateList>();
01407     qDBusRegisterMetaType<Tp::CandidatePair>();
01408     qDBusRegisterMetaType<Tp::CandidatePairList>();
01409     qDBusRegisterMetaType<Tp::CapabilityChange>();
01410     qDBusRegisterMetaType<Tp::CapabilityChangeList>();
01411     qDBusRegisterMetaType<Tp::CapabilityPair>();
01412     qDBusRegisterMetaType<Tp::CapabilityPairList>();
01413     qDBusRegisterMetaType<Tp::CaptchaAnswers>();
01414     qDBusRegisterMetaType<Tp::CaptchaInfo>();
01415     qDBusRegisterMetaType<Tp::CaptchaInfoList>();
01416     qDBusRegisterMetaType<Tp::ChannelCallStateMap>();
01417     qDBusRegisterMetaType<Tp::ChannelClass>();
01418     qDBusRegisterMetaType<Tp::ChannelClassList>();
01419     qDBusRegisterMetaType<Tp::ChannelDetails>();
01420     qDBusRegisterMetaType<Tp::ChannelDetailsList>();
01421     qDBusRegisterMetaType<Tp::ChannelInfo>();
01422     qDBusRegisterMetaType<Tp::ChannelInfoList>();
01423     qDBusRegisterMetaType<Tp::ChannelOriginatorMap>();
01424     qDBusRegisterMetaType<Tp::ChatStateMap>();
01425     qDBusRegisterMetaType<Tp::Codec>();
01426     qDBusRegisterMetaType<Tp::CodecList>();
01427     qDBusRegisterMetaType<Tp::ComponentStateMap>();
01428     qDBusRegisterMetaType<Tp::ContactAttributesMap>();
01429     qDBusRegisterMetaType<Tp::ContactCapabilitiesMap>();
01430     qDBusRegisterMetaType<Tp::ContactCapabilitiesMapList>();
01431     qDBusRegisterMetaType<Tp::ContactCapability>();
01432     qDBusRegisterMetaType<Tp::ContactCapabilityList>();
01433     qDBusRegisterMetaType<Tp::ContactClientTypes>();
01434     qDBusRegisterMetaType<Tp::ContactCodecMap>();
01435     qDBusRegisterMetaType<Tp::ContactInfoField>();
01436     qDBusRegisterMetaType<Tp::ContactInfoFieldList>();
01437     qDBusRegisterMetaType<Tp::ContactInfoMap>();
01438     qDBusRegisterMetaType<Tp::ContactLocations>();
01439     qDBusRegisterMetaType<Tp::ContactMediaDescriptionPropertiesMap>();
01440     qDBusRegisterMetaType<Tp::ContactPresences>();
01441     qDBusRegisterMetaType<Tp::ContactSSRCsMap>();
01442     qDBusRegisterMetaType<Tp::ContactSearchMap>();
01443     qDBusRegisterMetaType<Tp::ContactSearchResultMap>();
01444     qDBusRegisterMetaType<Tp::ContactSendingStateMap>();
01445     qDBusRegisterMetaType<Tp::ContactSubscriptionMap>();
01446     qDBusRegisterMetaType<Tp::ContactSubscriptions>();
01447     qDBusRegisterMetaType<Tp::CurrencyAmount>();
01448     qDBusRegisterMetaType<Tp::DBusTubeMember>();
01449     qDBusRegisterMetaType<Tp::DBusTubeMemberList>();
01450     qDBusRegisterMetaType<Tp::DBusTubeParticipants>();
01451     qDBusRegisterMetaType<Tp::DebugMessage>();
01452     qDBusRegisterMetaType<Tp::DebugMessageList>();
01453     qDBusRegisterMetaType<Tp::FieldSpec>();
01454     qDBusRegisterMetaType<Tp::FieldSpecs>();
01455     qDBusRegisterMetaType<Tp::HTTPPostData>();
01456     qDBusRegisterMetaType<Tp::HTTPPostDataList>();
01457     qDBusRegisterMetaType<Tp::HandleIdentifierMap>();
01458     qDBusRegisterMetaType<Tp::HandleOwnerMap>();
01459     qDBusRegisterMetaType<Tp::HandlerCapabilities>();
01460     qDBusRegisterMetaType<Tp::HandlerCapabilitiesList>();
01461     qDBusRegisterMetaType<Tp::LastActivityAndStatuses>();
01462     qDBusRegisterMetaType<Tp::LocalPendingInfo>();
01463     qDBusRegisterMetaType<Tp::LocalPendingInfoList>();
01464     qDBusRegisterMetaType<Tp::Location>();
01465     qDBusRegisterMetaType<Tp::Mail>();
01466     qDBusRegisterMetaType<Tp::MailAddress>();
01467     qDBusRegisterMetaType<Tp::MailAddressList>();
01468     qDBusRegisterMetaType<Tp::MailList>();
01469     qDBusRegisterMetaType<Tp::MailURL>();
01470     qDBusRegisterMetaType<Tp::MediaDescriptionOffer>();
01471     qDBusRegisterMetaType<Tp::MediaDescriptionProperties>();
01472     qDBusRegisterMetaType<Tp::MediaSessionHandlerInfo>();
01473     qDBusRegisterMetaType<Tp::MediaSessionHandlerInfoList>();
01474     qDBusRegisterMetaType<Tp::MediaStreamHandlerCandidate>();
01475     qDBusRegisterMetaType<Tp::MediaStreamHandlerCandidateList>();
01476     qDBusRegisterMetaType<Tp::MediaStreamHandlerCodec>();
01477     qDBusRegisterMetaType<Tp::MediaStreamHandlerCodecList>();
01478     qDBusRegisterMetaType<Tp::MediaStreamHandlerTransport>();
01479     qDBusRegisterMetaType<Tp::MediaStreamHandlerTransportList>();
01480     qDBusRegisterMetaType<Tp::MediaStreamInfo>();
01481     qDBusRegisterMetaType<Tp::MediaStreamInfoList>();
01482     qDBusRegisterMetaType<Tp::MessagePart>();
01483     qDBusRegisterMetaType<Tp::MessagePartContentMap>();
01484     qDBusRegisterMetaType<Tp::MessagePartList>();
01485     qDBusRegisterMetaType<Tp::MessagePartListList>();
01486     qDBusRegisterMetaType<Tp::Metadata>();
01487     qDBusRegisterMetaType<Tp::MultipleStatusMap>();
01488     qDBusRegisterMetaType<Tp::NotDelegatedError>();
01489     qDBusRegisterMetaType<Tp::NotDelegatedMap>();
01490     qDBusRegisterMetaType<Tp::ObjectImmutablePropertiesMap>();
01491     qDBusRegisterMetaType<Tp::ObjectImmutablePropertiesMapList>();
01492     qDBusRegisterMetaType<Tp::ObjectPathList>();
01493     qDBusRegisterMetaType<Tp::ParamSpec>();
01494     qDBusRegisterMetaType<Tp::ParamSpecList>();
01495     qDBusRegisterMetaType<Tp::PendingTextMessage>();
01496     qDBusRegisterMetaType<Tp::PendingTextMessageList>();
01497     qDBusRegisterMetaType<Tp::PropertyFlagsChange>();
01498     qDBusRegisterMetaType<Tp::PropertyFlagsChangeList>();
01499     qDBusRegisterMetaType<Tp::PropertySpec>();
01500     qDBusRegisterMetaType<Tp::PropertySpecList>();
01501     qDBusRegisterMetaType<Tp::PropertyValue>();
01502     qDBusRegisterMetaType<Tp::PropertyValueList>();
01503     qDBusRegisterMetaType<Tp::ProtocolPropertiesMap>();
01504     qDBusRegisterMetaType<Tp::QualifiedPropertyValueMap>();
01505     qDBusRegisterMetaType<Tp::QualifiedPropertyValueMapList>();
01506     qDBusRegisterMetaType<Tp::RTCPFeedbackMessage>();
01507     qDBusRegisterMetaType<Tp::RTCPFeedbackMessageList>();
01508     qDBusRegisterMetaType<Tp::RTCPFeedbackMessageMap>();
01509     qDBusRegisterMetaType<Tp::RTCPFeedbackMessageProperties>();
01510     qDBusRegisterMetaType<Tp::RTPHeaderExtension>();
01511     qDBusRegisterMetaType<Tp::RTPHeaderExtensionsList>();
01512     qDBusRegisterMetaType<Tp::RequestableChannelClass>();
01513     qDBusRegisterMetaType<Tp::RequestableChannelClassList>();
01514     qDBusRegisterMetaType<Tp::RichPresenceAccessControl>();
01515     qDBusRegisterMetaType<Tp::RoomInfo>();
01516     qDBusRegisterMetaType<Tp::RoomInfoList>();
01517     qDBusRegisterMetaType<Tp::ServicePoint>();
01518     qDBusRegisterMetaType<Tp::ServicePointInfo>();
01519     qDBusRegisterMetaType<Tp::ServicePointInfoList>();
01520     qDBusRegisterMetaType<Tp::SimpleContactPresences>();
01521     qDBusRegisterMetaType<Tp::SimplePresence>();
01522     qDBusRegisterMetaType<Tp::SimpleStatusSpec>();
01523     qDBusRegisterMetaType<Tp::SimpleStatusSpecMap>();
01524     qDBusRegisterMetaType<Tp::SingleContactAttributesMap>();
01525     qDBusRegisterMetaType<Tp::SocketAddressIP>();
01526     qDBusRegisterMetaType<Tp::SocketAddressIPList>();
01527     qDBusRegisterMetaType<Tp::SocketAddressIPv4>();
01528     qDBusRegisterMetaType<Tp::SocketAddressIPv6>();
01529     qDBusRegisterMetaType<Tp::SocketNetmaskIPv4>();
01530     qDBusRegisterMetaType<Tp::SocketNetmaskIPv6>();
01531     qDBusRegisterMetaType<Tp::StatusSpec>();
01532     qDBusRegisterMetaType<Tp::StatusSpecMap>();
01533     qDBusRegisterMetaType<Tp::StreamCredentials>();
01534     qDBusRegisterMetaType<Tp::StringStringMap>();
01535     qDBusRegisterMetaType<Tp::StringStringMapList>();
01536     qDBusRegisterMetaType<Tp::StringVariantMap>();
01537     qDBusRegisterMetaType<Tp::StringVariantMapList>();
01538     qDBusRegisterMetaType<Tp::SupportedSocketMap>();
01539     qDBusRegisterMetaType<Tp::TLSCertificateRejection>();
01540     qDBusRegisterMetaType<Tp::TLSCertificateRejectionList>();
01541     qDBusRegisterMetaType<Tp::TubeInfo>();
01542     qDBusRegisterMetaType<Tp::TubeInfoList>();
01543     qDBusRegisterMetaType<Tp::UIntList>();
01544     qDBusRegisterMetaType<Tp::VCardFieldAddressMap>();
01545     qDBusRegisterMetaType<Tp::VideoResolution>();
01546     qDBusRegisterMetaType<Tp::VideoResolutionStruct>();
01547 }
01548 
01549 } // namespace Tp


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00275.html0000644000175200001440000002071312000060453021626 0ustar00collabora-develusers00000000000000 Tp::MemberFunctor2< R, T, Arg1, Arg2 > Struct Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MemberFunctor2< R, T, Arg1, Arg2 > Struct Template Reference

#include </home/collabora-devel/kde/src/telepathy-qt4/TelepathyQt/functors.h>

Inherits Tp::BaseFunctor.

List of all members.

Public Types

Public Member Functions

Public Attributes

template<class R, class T, class Arg1, class Arg2>
struct Tp::MemberFunctor2< R, T, Arg1, Arg2 >


Member Typedef Documentation

template<class R, class T, class Arg1, class Arg2>
typedef R(T::* Tp::MemberFunctor2< R, T, Arg1, Arg2 >::FunctionType)(Arg1, Arg2)
template<class R, class T, class Arg1, class Arg2>
typedef R Tp::MemberFunctor2< R, T, Arg1, Arg2 >::ResultType

Constructor & Destructor Documentation

template<class R, class T, class Arg1, class Arg2>
Tp::MemberFunctor2< R, T, Arg1, Arg2 >::MemberFunctor2 ( T *  object,
FunctionType  fn 
) [inline]

Member Function Documentation

template<class R, class T, class Arg1, class Arg2>
ResultType Tp::MemberFunctor2< R, T, Arg1, Arg2 >::operator() ( Arg1  a1,
Arg2  a2 
) const [inline]

Member Data Documentation

template<class R, class T, class Arg1, class Arg2>
T* Tp::MemberFunctor2< R, T, Arg1, Arg2 >::object
template<class R, class T, class Arg1, class Arg2>
FunctionType Tp::MemberFunctor2< R, T, Arg1, Arg2 >::fn


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00154.html0000644000175200001440000010107612000060453021624 0ustar00collabora-develusers00000000000000 Tp::Client::ClientHandlerInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

#include <TelepathyQt/Client>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Client.Handler".


Constructor & Destructor Documentation

Tp::Client::ClientHandlerInterface::ClientHandlerInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ClientHandlerInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ClientHandlerInterface::ClientHandlerInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ClientHandlerInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ClientHandlerInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ClientHandlerInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ClientHandlerInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

static QLatin1String Tp::Client::ClientHandlerInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Client.Handler", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property HandlerChannelFilter of type Tp::ChannelClassList.

A specification of the channels that this channel handler can deal with. It will be offered to approvers as a potential channel handler for bundles that contain only suitable channels, or for suitable channels that must be handled separately.

This property works in exactly the same way as the ClientObserverInterface::ObserverChannelFilter property. In particular, it cannot change while the handler process continues to own the corresponding Client bus name.

In the .client file, it is represented in the same way as ObserverChannelFilter, but the group has the same name as this interface and the keys start with HandlerChannelFilter instead of ObserverChannelFilter.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property BypassApproval of type bool.

If true, channels destined for this handler are automatically handled, without invoking approvers.

The intended usage is to allow a client handling one channel to pick up closely related channels. Suppose a client capable of handling both Text and StreamedMedia, org.freedesktop.Telepathy.Client.Empathy, is handling a StreamedMedia channel. That client can take a second well-known bus name, say org.freedesktop.Telepathy.Client.Empathy._1._42.Bundle1, and configure an object at /org/freedesktop/Telepathy/Client/Empathy/_1/_42/Bundle1 with BypassApproval = TRUE, whose HandlerChannelFilter matches closely related Text channels by their Bundle property.

For service-activatable handlers, this property should be specified in the handler's .client file as follows:

 [org.freedesktop.Telepathy.Client.Handler]
 BypassApproval=true
 
Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Capabilities of type QStringList.

The set of additional capabilities supported by this handler. This describes things like support for streamed media codecs and NAT traversal mechanisms: see the Contact Capabilities interface for more details.

For handlers that have a .client file, the channel dispatcher may discover this property from the org.freedesktop.Telepathy.Client.Handler.Capabilities group; for each capability, that group contains a key whose name is the capability, with value true. Keys with other values SHOULD NOT appear in this group.

For instance, the .client file for a streamed media handler that supports ICE-UDP NAT traversal, Speex audio, and Theora and H264 video might contain this group:

 [org.freedesktop.Telepathy.Client.Handler.Capabilities]
 org.freedesktop.Telepathy.Channel.Interface.MediaSignalling/ice-udp=true
 org.freedesktop.Telepathy.Channel.Interface.MediaSignalling/audio/speex=true
 org.freedesktop.Telepathy.Channel.Interface.MediaSignalling/video/theora=true
 org.freedesktop.Telepathy.Channel.Interface.MediaSignalling/video/h264=true
 

Like the HandlerChannelFilter property, this property cannot change while the Handler owns its Client bus name. However, the .client file, if any, can change (due to upgrades or installation of pluggable codecs), and the capabilities really supported by the handler might not exactly match what is cached in the .client file.

The client file is installed statically and is intended to list codecs etc. that the handler guarantees it can support (e.g. by having a hard dependency on them), whereas the running handler process might be able to find additional codecs.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property HandledChannels of type Tp::ObjectPathList.

A list of the channels that this process is currently handling.

There is no change notification.

This property exists for state recovery - it makes it possible for channel handling to survive a ChannelDispatcher crash.

If the channel dispatcher is automatically replaced, the replacement can discover all Handlers by looking for the Client well-known bus names, and discover which channels they are currently handling. Once this has been done, all unhandled channels can be re-dispatched, and the only issue visible to the user is that unhandled channels that they have already approved might be sent back to Approvers.

The value of this property SHOULD be the same for all Client instances that share a unique bus name, and SHOULD include all channels that are being handled, even if they were conceptually handled by a different Client instance.

Otherwise, when a process released a temporary Client name, channels that it handled because of that Client name would no longer be state-recoverable.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::ClientHandlerInterface::HandleChannels ( const QDBusObjectPath &  account,
const QDBusObjectPath &  connection,
const Tp::ChannelDetailsList channels,
const Tp::ObjectPathList requestsSatisfied,
qulonglong  userActionTime,
const QVariantMap &  handlerInfo,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method HandleChannels on the remote object.

Called by the channel dispatcher when this client should handle these channels, or when this client should present channels that it is already handling to the user (e.g. bring them into the foreground).

Clients are expected to know what channels they're already handling, and which channel object path corresponds to which window or tab. This can easily be done using a hash table keyed by channels' object paths.

This method can raise any D-Bus error. If it does, the handler is assumed to have failed or crashed, and the channel dispatcher MUST recover in an implementation-specific way; it MAY attempt to dispatch the channels to another handler, or close the channels.

If closing the channels, it is RECOMMENDED that the channel dispatcher attempts to close the channels using ChannelInterface::Close() , but resorts to calling ChannelInterfaceDestroyableInterface::Destroy() (if available) or ignoring the channel (if not) if the same handler repeatedly fails to handle channels.

After HandleChannels returns successfully, the client process is considered to be responsible for the channel until it its unique name disappears from the bus.

If a process has multiple Client bus names - some temporary and some long-lived - and drops one of the temporary bus names in order to reduce the set of channels that it will handle, any channels that it is already handling should remain unaffected.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
accountThe Account with which the channels are associated. The well-known bus name to use is that of the AccountManager.
connectionThe Connection with which the channels are associated. The well-known bus name to use can be derived from this object path by removing the leading '/' and replacing all subsequent '/' by '.'.
channelsThe channels and their immutable properties. Their well-known bus name is the same as that of the Connection.
requestsSatisfied

The requests satisfied by these channels.

If the handler implements Requests, this tells it that these channels match previous ClientInterfaceRequestsInterface::AddRequest() calls that it may have received.

There can be more than one, if they were EnsureChannel requests.

userActionTimeThe time at which user action occurred, or 0 if this channel is to be handled for some reason not involving user action. Handlers SHOULD use this for focus-stealing prevention, if applicable. This property has the same semantic as User_Action_Timestamp but is unsigned for historical reasons.
handlerInfo

Additional information about these channels. Currently defined keys are:

request-properties - a{oa{sv}}
A map from ChannelRequestInterface paths listed in Requests_Satisfied to Qualified_Property_Value_Maps containing namespaced immutable properties of each request.

When more keys are defined for this dictionary, all will be optional; handlers MAY safely ignore any entry in this dictionary.

timeoutThe timeout in milliseconds.
void Tp::Client::ClientHandlerInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00319.html0000644000175200001440000003416712000060453021635 0ustar00collabora-develusers00000000000000 Tp::PendingHandles Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingHandles Class Reference

The PendingHandles class represents the parameters of and the reply to an asynchronous handle request/hold. More...

#include <TelepathyQt/PendingHandles>

Inherits Tp::PendingOperation.

List of all members.

Public Member Functions


Detailed Description

The PendingHandles class represents the parameters of and the reply to an asynchronous handle request/hold.

Instances of this class cannot be constructed directly; the only way to get one is to use Connection::requestHandles() or Connection::referenceHandles().

See Asynchronous Object Model


Constructor & Destructor Documentation

Class destructor.


Member Function Documentation

ConnectionPtr Tp::PendingHandles::connection ( ) const

Return the connection through which the operation was made.

Returns:
A pointer to the Connection object.

Return the handle type specified in the operation.

Returns:
The target handle type as HandleType.

Return whether the operation was a handle request (as opposed to a reference of existing handles).

Returns:
true if the operation was a request (== !isReference()), false otherwise.
See also:
isReference()

Return whether the operation was a handle reference (as opposed to a request for new handles).

Returns:
true if the operation was a reference (== !isRequest()), false otherwise.
See also:
isRequest()
const QStringList & Tp::PendingHandles::namesRequested ( ) const

If the operation was a request (as returned by isRequest()), returns the names of the entities for which handles were requested for. Otherwise, returns an empty list.

Returns:
Reference to a list of the names of the entities.
QStringList Tp::PendingHandles::validNames ( ) const
QHash< QString, QPair< QString, QString > > Tp::PendingHandles::invalidNames ( ) const

If the operation was a reference (as returned by isReference()), returns the handles which were to be referenced. Otherwise, returns an empty list.

Returns:
Reference to a list of the handles specified to be referenced.

Return the now-referenced handles resulting from the operation. If the operation has not (yet) finished successfully (isFinished() returns false), the return value is undefined.

For requests of new handles, handles()[i] will be the handle corresponding to the entity name namesToRequest()[i]. For references of existing handles, handles()[i] == handlesToReference()[i] will be true for any i.

Returns:
ReferencedHandles object containing the handles.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00770.html0000644000175200001440000001057112000060453021627 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AbstractClientObserver Member List
This is the complete list of members for Tp::AbstractClientObserver, including all inherited members.
AbstractClient()Tp::AbstractClient
AbstractClientObserver(const ChannelClassSpecList &channelFilter, bool shouldRecover=false)Tp::AbstractClientObserver [protected]
isRegistered() const Tp::AbstractClient
observeChannels(const MethodInvocationContextPtr<> &context, const AccountPtr &account, const ConnectionPtr &connection, const QList< ChannelPtr > &channels, const ChannelDispatchOperationPtr &dispatchOperation, const QList< ChannelRequestPtr > &requestsSatisfied, const ObserverInfo &observerInfo)=0Tp::AbstractClientObserver [pure virtual]
observerFilter() const Tp::AbstractClientObserver
RefCounted()Tp::RefCounted [inline]
shouldRecover() const Tp::AbstractClientObserver
~AbstractClient()Tp::AbstractClient [virtual]
~AbstractClientObserver()Tp::AbstractClientObserver [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00413.html0000644000175200001440000001320512000060453021616 0ustar00collabora-develusers00000000000000 Tp::TubeInfo Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::TubeInfo Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

A struct (tube ID, initiator handle, tube type, service name, parameters, state) representing a tube, as returned by ListTubes on the Tubes channel type.


Member Data Documentation


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00672_source.html0000644000175200001440000000462712000060453023215 0ustar00collabora-develusers00000000000000 properties.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
properties.h
00001 
00023 #ifndef _TelepathyQt_properties_h_HEADER_GUARD_
00024 #define _TelepathyQt_properties_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00049 #include <TelepathyQt/_gen/cli-properties.h>
00050 
00051 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00097.html0000644000175200001440000000717212000060453021634 0ustar00collabora-develusers00000000000000 Tp::CandidatePair Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::CandidatePair Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

A Pair of candidates.


Member Data Documentation

The local candidate.

The remote candidate.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00977.html0000644000175200001440000000506712000060453021644 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ComponentStateMap Member List
This is the complete list of members for Tp::ComponentStateMap, including all inherited members.
ComponentStateMap()Tp::ComponentStateMap [inline]
ComponentStateMap(const QMap< uint, uint > &a)Tp::ComponentStateMap [inline]
operator=(const QMap< uint, uint > &a)Tp::ComponentStateMap [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00208.html0000644000175200001440000001201012000060453021611 0ustar00collabora-develusers00000000000000 Tp::ContactSendingStateMap Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactSendingStateMap Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<uint, uint>, but needed to have a discrete type in the Qt type system.

A map from a contact to his or her sending state.


Constructor & Destructor Documentation

Tp::ContactSendingStateMap::ContactSendingStateMap ( const QMap< uint, uint > &  a) [inline]

Member Function Documentation

ContactSendingStateMap& Tp::ContactSendingStateMap::operator= ( const QMap< uint, uint > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01153.html0000644000175200001440000001275512000060453021631 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Farstream::PendingChannel Member List
This is the complete list of members for Tp::Farstream::PendingChannel, including all inherited members.
callChannel() const Tp::Farstream::PendingChannel
createChannel(const CallChannelPtr &channel)Tp::Farstream::PendingChannel [friend]
errorMessage() const Tp::PendingOperation
errorName() const Tp::PendingOperation
finished(Tp::PendingOperation *operation)Tp::PendingOperation [signal]
isError() const Tp::PendingOperation
isFinished() const Tp::PendingOperation
isValid() const Tp::PendingOperation
object() const Tp::PendingOperation [protected]
PendingOperation(const SharedPtr< RefCounted > &object)Tp::PendingOperation [protected]
setFinished()Tp::PendingOperation [protected, slot]
setFinishedWithError(const QString &name, const QString &message)Tp::PendingOperation [protected, slot]
setFinishedWithError(const QDBusError &error)Tp::PendingOperation [protected, slot]
tfChannel() const Tp::Farstream::PendingChannel
~PendingChannel()Tp::Farstream::PendingChannel
~PendingOperation()Tp::PendingOperation [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00205.html0000644000175200001440000007757212000060453021636 0ustar00collabora-develusers00000000000000 Tp::ContactSearchChannel Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The ContactSearchChannel class represents a Telepathy channel of type ContactSearch. More...

#include <TelepathyQt/ContactSearchChannel>

Inherits Tp::Channel.

List of all members.

Classes

Public Types

Signals

Public Member Functions

Static Public Member Functions

Static Public Attributes

Protected Member Functions


Detailed Description

The ContactSearchChannel class represents a Telepathy channel of type ContactSearch.


Member Typedef Documentation


Constructor & Destructor Documentation

Class destructor.

Tp::ContactSearchChannel::ContactSearchChannel ( const ConnectionPtr &  connection,
const QString &  objectPath,
const QVariantMap &  immutableProperties,
const Feature coreFeature 
) [protected]

Construct a new ContactSearchChannel object.

Parameters:
connectionConnection owning this channel, and specifying the service.
objectPathThe channel object path.
immutablePropertiesThe channel immutable properties.
coreFeatureThe core feature of the channel type, if any. The corresponding introspectable should depend on ContactSearchChannel::FeatureCore.

Member Function Documentation

ContactSearchChannelPtr Tp::ContactSearchChannel::create ( const ConnectionPtr &  connection,
const QString &  objectPath,
const QVariantMap &  immutableProperties 
) [static]

Create a new ContactSearchChannel object.

Parameters:
connectionConnection owning this channel, and specifying the service.
objectPathThe channel object path.
immutablePropertiesThe channel immutable properties.
Returns:
A ContactSearchChannelPtr object pointing to the newly created ContactSearchChannel object.

Reimplemented from Tp::Channel.

Return the current search state of this channel.

Change notification is via the searchStateChanged() signal.

This method requires ContactSearchChannel::FeatureCore to be ready.

Returns:
The current search state as ChannelContactSearchState.
See also:
searchStateChanged()

Return the maximum number of results that should be returned by calling search(), where 0 represents no limit.

For example, if the terms passed to search() match Antonius, Bridget and Charles and this property is 2, the search service will only return Antonius and Bridget.

This method requires ContactSearchChannel::FeatureCore to be ready.

Returns:
The maximum number of results, or 0 if there is no limit.
See also:
availableSearchKeys(), search()

Return the set of search keys supported by this channel.

Example values include [""] (for protocols where several address fields are implicitly searched) or ["x-n-given", "x-n-family", "nickname", "email"] (for XMPP XEP-0055, without extensibility via Data Forms).

This method requires ContactSearchChannel::FeatureCore to be ready.

Returns:
The supported search keys.
See also:
limit(), search()

Return the DNS name of the server being searched by this channel.

This method requires ContactSearchChannel::FeatureCore to be ready.

Returns:
For protocols which support searching for contacts on multiple servers with different DNS names (like XMPP), the DNS name of the server being searched by this channel, e.g. "characters.shakespeare.lit". Otherwise, an empty string.
PendingOperation * Tp::ContactSearchChannel::search ( const QString &  searchKey,
const QString &  searchTerm 
)

Send a request to start a search for contacts on this connection.

This may only be called while the searchState() is ChannelContactSearchStateNotStarted; a valid search request will cause the searchStateChanged() signal to be emitted with the state ChannelContactSearchStateInProgress.

Search results are signalled by searchResultReceived().

This method requires ContactSearchChannel::FeatureCore to be ready.

This is an overloaded method for search(const ContactSearchMap &searchTerms).

Parameters:
searchKeyThe search key.
searchTermThe search term.
Returns:
A PendingOperation which will emit PendingOperation::finished when the search has started.
See also:
searchState(), searchStateChanged(), searchResultReceived()

Send a request to start a search for contacts on this connection.

This may only be called while the searchState() is ChannelContactSearchStateNotStarted; a valid search request will cause the searchStateChanged() signal to be emitted with the state ChannelContactSearchStateInProgress.

Search results are signalled by searchResultReceived().

This method requires ContactSearchChannel::FeatureCore to be ready.

Parameters:
termsThe search terms.
Returns:
A PendingOperation which will emit PendingOperation::finished when the search has started.
See also:
searchState(), searchStateChanged(), searchResultReceived()

Request that a search which searchState() is ChannelContactSearchStateMoreAvailable move back to state ChannelContactSearchStateInProgress and continue listing up to limit() more results.

Stop the current search.

This may not be called while the searchState() is ChannelContactSearchStateNotStarted. If called while the searchState() is ChannelContactSearchStateInProgress, searchStateChanged() will be emitted, with the state ChannelContactSearchStateFailed and the error TP_QT_ERROR_CANCELLED.

Returns:
A PendingOperation which will emit PendingOperation::finished when the call has finished.
See also:
searchState(), searchStateChanged()

Emitted when the value of searchState() changes.

Parameters:
stateThe new state.
errorNameThe name of the error if any.
detailsThe details for the state change.
See also:
searchState()

Emitted when a result for a search is received. It can be emitted multiple times until the searchState() goes to ChannelContactSearchStateCompleted or ChannelContactSearchStateFailed.

Parameters:
resultThe search result.
See also:
searchState()

Member Data Documentation

Feature representing the core that needs to become ready to make the ContactSearchChannel object usable.

Note that this feature must be enabled in order to use most ContactSearchChannel methods. See specific methods documentation for more details.

When calling isReady(), becomeReady(), this feature is implicitly added to the requested features.

Reimplemented from Tp::Channel.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00415.html0000644000175200001440000001234112000060453021620 0ustar00collabora-develusers00000000000000 Tp::VCardFieldAddressMap Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::VCardFieldAddressMap Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<QString, QString>, but needed to have a discrete type in the Qt type system.

A mapping of vCard fields and addresses equivalent to a particular contact's protocol identifier. For instance, on XMPP this would contain x-jabber for all contacts, and x-facebook-id for contacts on Facebook's server.


Constructor & Destructor Documentation

Tp::VCardFieldAddressMap::VCardFieldAddressMap ( const QMap< QString, QString > &  a) [inline]

Member Function Documentation

VCardFieldAddressMap& Tp::VCardFieldAddressMap::operator= ( const QMap< QString, QString > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/namespacemembers_enum.html0000644000175200001440000002354212000060453025346 0ustar00collabora-develusers00000000000000 Namespace Members
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- a -

  • AccessControlType : Tp
  • AnonymityMode : Tp

- c -

  • CallContentDisposition : Tp
  • CallContentPacketizationType : Tp
  • CallFlag : Tp
  • CallMemberFlag : Tp
  • CallState : Tp
  • CallStateChangeReason : Tp
  • CallStreamCandidateType : Tp
  • CaptchaCancelReason : Tp
  • CaptchaFlag : Tp
  • CaptchaStatus : Tp
  • ChannelCallState : Tp
  • ChannelChatState : Tp
  • ChannelContactSearchState : Tp
  • ChannelGroupChangeReason : Tp
  • ChannelGroupFlag : Tp
  • ChannelMediaCapability : Tp
  • ChannelPasswordFlag : Tp
  • ChannelTextMessageFlag : Tp
  • ChannelTextMessageType : Tp
  • ChannelTextSendError : Tp
  • ConnectionAliasFlag : Tp
  • ConnectionCapabilityFlag : Tp
  • ConnectionPresenceType : Tp
  • ConnectionStatus : Tp
  • ConnectionStatusReason : Tp
  • ConnMgrParamFlag : Tp
  • ContactBlockingCapability : Tp
  • ContactInfoFieldFlag : Tp
  • ContactInfoFlag : Tp
  • ContactListState : Tp
  • ContactMetadataStorageType : Tp

- d -

  • DebugLevel : Tp
  • DeliveryReportingSupportFlag : Tp
  • DeliveryStatus : Tp
  • DTMFEvent : Tp

- f -

  • FileHashType : Tp
  • FileTransferState : Tp
  • FileTransferStateChangeReason : Tp

- h -

  • HandleType : Tp
  • HTTPMethod : Tp

- l -

  • LocalHoldState : Tp
  • LocalHoldStateReason : Tp
  • LocationFeature : Tp

- m -

  • MailNotificationFlag : Tp
  • MediaStreamBaseProto : Tp
  • MediaStreamDirection : Tp
  • MediaStreamError : Tp
  • MediaStreamPending : Tp
  • MediaStreamState : Tp
  • MediaStreamTransportType : Tp
  • MediaStreamType : Tp
  • MessagePartSupportFlag : Tp
  • MessageSendingFlag : Tp

- p -

  • PropertyFlag : Tp

- r -

  • RCPTXRRTTMode : Tp
  • RichPresenceAccessControlType : Tp
  • RTCPXRStatisticsFlag : Tp

- s -

  • SASLAbortReason : Tp
  • SASLStatus : Tp
  • SendingState : Tp
  • ServicePointType : Tp
  • SocketAccessControl : Tp
  • SocketAddressType : Tp
  • StorageRestrictionFlag : Tp
  • StreamComponent : Tp
  • StreamEndpointState : Tp
  • StreamFlowState : Tp
  • StreamTransportType : Tp
  • SubscriptionState : Tp

- t -

  • TLSCertificateRejectReason : Tp
  • TLSCertificateState : Tp
  • TubeChannelState : Tp
  • TubeState : Tp
  • TubeType : Tp


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00772.html0000644000175200001440000000767112000060453021640 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AbstractClientApprover Member List
This is the complete list of members for Tp::AbstractClientApprover, including all inherited members.
AbstractClient()Tp::AbstractClient
AbstractClientApprover(const ChannelClassSpecList &channelFilter)Tp::AbstractClientApprover [protected]
addDispatchOperation(const MethodInvocationContextPtr<> &context, const ChannelDispatchOperationPtr &dispatchOperation)=0Tp::AbstractClientApprover [pure virtual]
approverFilter() const Tp::AbstractClientApprover
isRegistered() const Tp::AbstractClient
RefCounted()Tp::RefCounted [inline]
~AbstractClient()Tp::AbstractClient [virtual]
~AbstractClientApprover()Tp::AbstractClientApprover [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00262.html0000644000175200001440000001013112000060453021613 0ustar00collabora-develusers00000000000000 Tp::MailAddress Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MailAddress Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

A pair (name, address) representing an e-mail address, such as ("Nicolas Dufresne", "nicolas.dufresne@collabora.co.uk"). At least one of name and address MUST be provided. A missing element will be represented by the empty string.

The CM should provide as much information as possible, but not all protocols provide both the displayed name and the address. (If a protocol doesn't provide either, it should omit the appropriate field from the Mail entirely.)


Member Data Documentation

The displayed name corresponding to the e-mail address

The actual e-mail address


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00220.html0000644000175200001440000000717012000060453021616 0ustar00collabora-develusers00000000000000 Tp::DBusTubeMember Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::DBusTubeMember Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

Represents a participant in a multi-user D-Bus tube, as returned by GetDBusNames and seen in the DBusNamesChanged signal.


Member Data Documentation

The handle of a participant in this D-Bus tube.

That participant's unique name.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00532_source.html0000644000175200001440000003037412000060453023206 0ustar00collabora-develusers00000000000000 connection-manager.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
connection-manager.h
00001 
00023 #ifndef _TelepathyQt_connection_manager_h_HEADER_GUARD_
00024 #define _TelepathyQt_connection_manager_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/_gen/cli-connection-manager.h>
00031 
00032 #include <TelepathyQt/ChannelFactory>
00033 #include <TelepathyQt/ConnectionFactory>
00034 #include <TelepathyQt/Constants>
00035 #include <TelepathyQt/ContactFactory>
00036 #include <TelepathyQt/DBus>
00037 #include <TelepathyQt/DBusProxy>
00038 #include <TelepathyQt/OptionalInterfaceFactory>
00039 #include <TelepathyQt/ProtocolInfo>
00040 #include <TelepathyQt/ProtocolParameter>
00041 #include <TelepathyQt/ReadinessHelper>
00042 #include <TelepathyQt/SharedPtr>
00043 #include <TelepathyQt/Types>
00044 
00045 namespace Tp
00046 {
00047 
00048 class ConnectionManagerLowlevel;
00049 class PendingConnection;
00050 class PendingStringList;
00051 
00052 class TP_QT_EXPORT ConnectionManager : public StatelessDBusProxy,
00053                 public OptionalInterfaceFactory<ConnectionManager>
00054 {
00055     Q_OBJECT
00056     Q_DISABLE_COPY(ConnectionManager)
00057     Q_PROPERTY(QString name READ name)
00058     Q_PROPERTY(QStringList supportedProtocols READ supportedProtocols)
00059     Q_PROPERTY(ProtocolInfoList protocols READ protocols)
00060 
00061 public:
00062     static const Feature FeatureCore;
00063 
00064     static ConnectionManagerPtr create(const QDBusConnection &bus,
00065             const QString &name);
00066     static ConnectionManagerPtr create(const QString &name,
00067             const ConnectionFactoryConstPtr &connectionFactory =
00068                 ConnectionFactory::create(QDBusConnection::sessionBus()),
00069             const ChannelFactoryConstPtr &channelFactory =
00070                 ChannelFactory::create(QDBusConnection::sessionBus()),
00071             const ContactFactoryConstPtr &contactFactory =
00072                 ContactFactory::create());
00073     static ConnectionManagerPtr create(const QDBusConnection &bus,
00074             const QString &name,
00075             const ConnectionFactoryConstPtr &connectionFactory,
00076             const ChannelFactoryConstPtr &channelFactory,
00077             const ContactFactoryConstPtr &contactFactory =
00078                 ContactFactory::create());
00079 
00080     virtual ~ConnectionManager();
00081 
00082     QString name() const;
00083 
00084     ConnectionFactoryConstPtr connectionFactory() const;
00085     ChannelFactoryConstPtr channelFactory() const;
00086     ContactFactoryConstPtr contactFactory() const;
00087 
00088     QStringList supportedProtocols() const;
00089     const ProtocolInfoList &protocols() const;
00090     bool hasProtocol(const QString &protocolName) const;
00091     ProtocolInfo protocol(const QString &protocolName) const;
00092 
00093     static PendingStringList *listNames(
00094             const QDBusConnection &bus = QDBusConnection::sessionBus());
00095 
00096 #if defined(BUILDING_TP_QT) || defined(TP_QT_ENABLE_LOWLEVEL_API)
00097     ConnectionManagerLowlevelPtr lowlevel();
00098     ConnectionManagerLowlevelConstPtr lowlevel() const;
00099 #endif
00100 
00101 protected:
00102     ConnectionManager(const QDBusConnection &bus, const QString &name,
00103             const ConnectionFactoryConstPtr &connectionFactory,
00104             const ChannelFactoryConstPtr &channelFactory,
00105             const ContactFactoryConstPtr &contactFactory);
00106 
00107     Client::ConnectionManagerInterface *baseInterface() const;
00108 
00109 private Q_SLOTS:
00110     TP_QT_NO_EXPORT void gotMainProperties(Tp::PendingOperation *op);
00111     TP_QT_NO_EXPORT void gotProtocolsLegacy(QDBusPendingCallWatcher *watcher);
00112     TP_QT_NO_EXPORT void gotParametersLegacy(QDBusPendingCallWatcher *watcher);
00113     TP_QT_NO_EXPORT void onProtocolReady(Tp::PendingOperation *watcher);
00114 
00115 private:
00116     friend class PendingConnection;
00117 
00118     struct Private;
00119     friend struct Private;
00120     Private *mPriv;
00121 };
00122 
00123 } // Tp
00124 
00125 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00561_source.html0000644000175200001440000002057112000060453023206 0ustar00collabora-develusers00000000000000 dbus-tube-channel.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
dbus-tube-channel.h
00001 
00022 #ifndef _TelepathyQt_dbus_tube_channel_h_HEADER_GUARD_
00023 #define _TelepathyQt_dbus_tube_channel_h_HEADER_GUARD_
00024 
00025 #ifndef IN_TP_QT_HEADER
00026 #error IN_TP_QT_HEADER
00027 #endif
00028 
00029 #include <TelepathyQt/TubeChannel>
00030 
00031 namespace Tp
00032 {
00033 
00034 class TP_QT_EXPORT DBusTubeChannel : public TubeChannel
00035 {
00036     Q_OBJECT
00037     Q_DISABLE_COPY(DBusTubeChannel)
00038 
00039 public:
00040     static const Feature FeatureCore;
00041     static const Feature FeatureBusNameMonitoring;
00042 
00043     static DBusTubeChannelPtr create(const ConnectionPtr &connection,
00044             const QString &objectPath, const QVariantMap &immutableProperties);
00045 
00046     virtual ~DBusTubeChannel();
00047 
00048     QString serviceName() const;
00049 
00050     bool supportsRestrictingToCurrentUser() const;
00051 
00052     QHash<QString, Tp::ContactPtr> contactsForBusNames() const;
00053 
00054     QString address() const;
00055 
00056 protected:
00057     DBusTubeChannel(const ConnectionPtr &connection, const QString &objectPath,
00058             const QVariantMap &immutableProperties);
00059 
00060 Q_SIGNALS:
00061     void busNameAdded(const QString &busName, const Tp::ContactPtr &contact);
00062     void busNameRemoved(const QString &busName, const Tp::ContactPtr &contact);
00063 
00064 private Q_SLOTS:
00065     TP_QT_NO_EXPORT void onRequestAllPropertiesFinished(Tp::PendingOperation*);
00066     TP_QT_NO_EXPORT void onRequestPropertyDBusNamesFinished(Tp::PendingOperation *op);
00067     TP_QT_NO_EXPORT void onDBusNamesChanged(const Tp::DBusTubeParticipants &added, const Tp::UIntList &removed);
00068     TP_QT_NO_EXPORT void onContactsRetrieved(const QUuid &uuid, const QList<Tp::ContactPtr> &contacts);
00069     TP_QT_NO_EXPORT void onQueueCompleted();
00070 
00071 private:
00072     TP_QT_NO_EXPORT void setAddress(const QString &address);
00073 
00074     struct Private;
00075     friend struct PendingDBusTubeConnection;
00076     friend struct Private;
00077     Private *mPriv;
00078 
00079 };
00080 
00081 } // Tp
00082 
00083 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00624_source.html0000644000175200001440000001662212000060453023210 0ustar00collabora-develusers00000000000000 outgoing-file-transfer-channel.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
outgoing-file-transfer-channel.h
00001 
00023 #ifndef _TelepathyQt_outgoing_file_transfer_channel_h_HEADER_GUARD_
00024 #define _TelepathyQt_outgoing_file_transfer_channel_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/FileTransferChannel>
00031 
00032 #include <QAbstractSocket>
00033 
00034 namespace Tp
00035 {
00036 
00037 class TP_QT_EXPORT OutgoingFileTransferChannel : public FileTransferChannel
00038 {
00039     Q_OBJECT
00040     Q_DISABLE_COPY(OutgoingFileTransferChannel)
00041 
00042 public:
00043     static const Feature FeatureCore;
00044 
00045     static OutgoingFileTransferChannelPtr create(const ConnectionPtr &connection,
00046             const QString &objectPath, const QVariantMap &immutableProperties);
00047 
00048     virtual ~OutgoingFileTransferChannel();
00049 
00050     PendingOperation *provideFile(QIODevice *input);
00051 
00052 protected:
00053     OutgoingFileTransferChannel(const ConnectionPtr &connection,
00054             const QString &objectPath,
00055             const QVariantMap &immutableProperties,
00056             const Feature &coreFeature = OutgoingFileTransferChannel::FeatureCore);
00057 
00058 private Q_SLOTS:
00059     TP_QT_NO_EXPORT void onProvideFileFinished(Tp::PendingOperation *op);
00060 
00061     TP_QT_NO_EXPORT void onSocketConnected();
00062     TP_QT_NO_EXPORT void onSocketDisconnected();
00063     TP_QT_NO_EXPORT void onSocketError(QAbstractSocket::SocketError error);
00064     TP_QT_NO_EXPORT void onInputAboutToClose();
00065     TP_QT_NO_EXPORT void doTransfer();
00066 
00067 private:
00068     TP_QT_NO_EXPORT void connectToHost();
00069     TP_QT_NO_EXPORT void setFinished();
00070 
00071     struct Private;
00072     friend struct Private;
00073     Private *mPriv;
00074 };
00075 
00076 } // Tp
00077 
00078 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00359.html0000644000175200001440000006263312000060453021640 0ustar00collabora-develusers00000000000000 Tp::ReadinessHelper Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ReadinessHelper Class Reference

The ReadinessHelper class is a helper class used by the introspection process. More...

#include <TelepathyQt/ReadinessHelper>

List of all members.

Classes

Public Types

Signals

Public Member Functions


Detailed Description

The ReadinessHelper class is a helper class used by the introspection process.


Member Typedef Documentation

typedef void(* Tp::ReadinessHelper::IntrospectFunc)(void *data)

Constructor & Destructor Documentation

Tp::ReadinessHelper::ReadinessHelper ( RefCounted object,
uint  currentStatus = 0,
const Introspectables introspectables = Introspectables(),
QObject *  parent = 0 
)
Tp::ReadinessHelper::ReadinessHelper ( DBusProxy proxy,
uint  currentStatus = 0,
const Introspectables introspectables = Introspectables(),
QObject *  parent = 0 
)

Member Function Documentation

void Tp::ReadinessHelper::addIntrospectables ( const Introspectables introspectables)
void Tp::ReadinessHelper::setCurrentStatus ( uint  currentStatus)
void Tp::ReadinessHelper::forceCurrentStatus ( uint  currentStatus)

Force the current internal status to currentStatus.

Note that this method will not start a new introspection or restart the current one in case one is running.

This is useful for example when the status is unknown initially but it will become known in the first introspection run and there is no need to re-run the introspection.

Parameters:
currentStatusThe status to set.
QStringList Tp::ReadinessHelper::interfaces ( ) const
void Tp::ReadinessHelper::setInterfaces ( const QStringList &  interfaces)
bool Tp::ReadinessHelper::isReady ( const Feature feature,
QString *  errorName = 0,
QString *  errorMessage = 0 
) const
bool Tp::ReadinessHelper::isReady ( const Features features,
QString *  errorName = 0,
QString *  errorMessage = 0 
) const
PendingReady * Tp::ReadinessHelper::becomeReady ( const Features requestedFeatures)
void Tp::ReadinessHelper::setIntrospectCompleted ( const Feature feature,
bool  success,
const QString &  errorName = QString(),
const QString &  errorMessage = QString() 
)
void Tp::ReadinessHelper::setIntrospectCompleted ( const Feature feature,
bool  success,
const QDBusError &  error 
)
void Tp::ReadinessHelper::statusReady ( uint  status) [signal]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00724.html0000644000175200001440000164265212000060453021642 0ustar00collabora-develusers00000000000000 Tp Namespace Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp Namespace Reference

Namespaces

Classes

Typedefs

Enumerations

Functions

Variables


Detailed Description

This file is part of TelepathyQt

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

This file is part of TelepathyQt

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

This file is part of TelepathyQt

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

This file is part of TelepathyQt

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

This file is part of TelepathyQt

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

This file is part of TelepathyQt

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

This file is part of TelepathyQt

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

This file is part of TelepathyQt

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

This file is part of TelepathyQt

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

This file is part of TelepathyQt

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

This file is part of TelepathyQt

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

This file is part of TelepathyQt

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

This file is part of TelepathyQt

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

This file is part of TelepathyQt

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

This file is part of TelepathyQt

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

This file is part of TelepathyQt

Copyright © 2009-2012 Collabora Ltd. <http://www.collabora.co.uk/> Copyright © 2009 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

This file is part of TelepathyQt

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

This file is part of TelepathyQt

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

This file is part of TelepathyQt

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

This file is part of TelepathyQt

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

This file is part of TelepathyQt

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


Typedef Documentation

typedef QList<CallContentPtr> Tp::CallContents
typedef QList<CallStreamPtr> Tp::CallStreams
typedef QListIterator<uint> Tp::ReferencedHandlesIterator
typedef QList<StreamedMediaStreamPtr> Tp::StreamedMediaStreams

Function Documentation

uint Tp::qHash ( const ChannelClassSpec &  spec) [inline]
uint Tp::qHash ( const QSet< ChannelClassSpec > &  specSet) [inline]
uint Tp::qHash ( const ChannelClassSpecList &  specList) [inline]
Debug Tp::enabledDebug ( )
Debug Tp::enabledWarning ( )
Q_DECL_IMPORT TfChannel * Tp::createFarsightChannel ( const StreamedMediaChannelPtr &  channel)
Features Tp::operator| ( const Feature &  feature1,
const Feature &  feature2 
) [inline]
Features Tp::operator| ( const Features &  features,
const Feature &  feature 
) [inline]
uint Tp::qHash ( const Features &  features) [inline]
template<class R >
PtrFunctor0<R> Tp::ptrFun ( R(*)()  fn) [inline]
template<class R , class Arg1 >
PtrFunctor1<R, Arg1> Tp::ptrFun ( R(*)(Arg1)  fn) [inline]
template<class R , class Arg1 , class Arg2 >
PtrFunctor2<R, Arg1, Arg2> Tp::ptrFun ( R(*)(Arg1, Arg2)  fn) [inline]
template<class R , class Arg1 , class Arg2 , class Arg3 >
PtrFunctor3<R, Arg1, Arg2, Arg3> Tp::ptrFun ( R(*)(Arg1, Arg2, Arg3)  fn) [inline]
template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 >
PtrFunctor4<R, Arg1, Arg2, Arg3, Arg4> Tp::ptrFun ( R(*)(Arg1, Arg2, Arg3, Arg4)  fn) [inline]
template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 >
PtrFunctor5<R, Arg1, Arg2, Arg3, Arg4, Arg5> Tp::ptrFun ( R(*)(Arg1, Arg2, Arg3, Arg4, Arg5)  fn) [inline]
template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 , class Arg6 >
PtrFunctor6<R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6> Tp::ptrFun ( R(*)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6)  fn) [inline]
template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 , class Arg6 , class Arg7 >
PtrFunctor7<R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7> Tp::ptrFun ( R(*)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7)  fn) [inline]
template<class R , class T >
MemberFunctor0<R, T> Tp::memFun ( T *  obj,
R(T::*)()  fn 
) [inline]
template<class R , class T , class Arg1 >
MemberFunctor1<R, T, Arg1> Tp::memFun ( T *  obj,
R(T::*)(Arg1)  fn 
) [inline]
template<class R , class T , class Arg1 , class Arg2 >
MemberFunctor2<R, T, Arg1, Arg2> Tp::memFun ( T *  obj,
R(T::*)(Arg1, Arg2)  fn 
) [inline]
template<class R , class T , class Arg1 , class Arg2 , class Arg3 >
MemberFunctor3<R, T, Arg1, Arg2, Arg3> Tp::memFun ( T *  obj,
R(T::*)(Arg1, Arg2, Arg3)  fn 
) [inline]
template<class R , class T , class Arg1 , class Arg2 , class Arg3 , class Arg4 >
MemberFunctor4<R, T, Arg1, Arg2, Arg3, Arg4> Tp::memFun ( T *  obj,
R(T::*)(Arg1, Arg2, Arg3, Arg4)  fn 
) [inline]
template<class R , class T , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 >
MemberFunctor5<R, T, Arg1, Arg2, Arg3, Arg4, Arg5> Tp::memFun ( T *  obj,
R(T::*)(Arg1, Arg2, Arg3, Arg4, Arg5)  fn 
) [inline]
template<class R , class T , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 , class Arg6 >
MemberFunctor6<R, T, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6> Tp::memFun ( T *  obj,
R(T::*)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6)  fn 
) [inline]
template<class R , class T , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 , class Arg6 , class Arg7 >
MemberFunctor7<R, T, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7> Tp::memFun ( T *  obj,
R(T::*)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7)  fn 
) [inline]
uint Tp::qHash ( const ProtocolParameter &  parameter)
template<typename T >
uint Tp::qHash ( const SharedPtr< T > &  ptr) [inline]
template<typename T >
uint Tp::qHash ( const WeakPtr< T > &  ptr) [inline]

\ingroup types

Register the types used by the library with the QtDBus type system.

Call this function to register the types used before using anything else in the library.

bool Tp::operator== ( const SUSocketAddress &  v1,
const SUSocketAddress &  v2 
)
QDBusArgument& Tp::operator<< ( QDBusArgument &  arg,
const SUSocketAddress &  val 
)
const QDBusArgument& Tp::operator>> ( const QDBusArgument &  arg,
SUSocketAddress &  val 
)
QString Tp::escapeAsIdentifier ( const QString &  string)

Escape an arbitrary string so it follows the rules for a C identifier, and hence an object path component, interface element component, bus name component or member name in D-Bus.

This is a reversible encoding, so it preserves distinctness.

The escaping consists of replacing all non-alphanumerics, and the first character if it's a digit, with an underscore and two lower-case hex digits:

"0123abc_xyz\x01\xff" -> _30123abc_5fxyz_01_ff

i.e. similar to URI encoding, but with _ taking the role of %, and a smaller allowed set. As a special case, "" is escaped to "_" (just for completeness, really).

Parameters:
stringThe string to be escaped.
Returns:
the escaped string.
bool Tp::checkValidProtocolName ( const QString &  protocolName)
QVariant::Type Tp::variantTypeFromDBusSignature ( const QString &  signature)
QVariant Tp::parseValueWithDBusSignature ( const QString &  value,
const QString &  dbusSignature 
)
bool Tp::operator== ( const AccessControl &  v1,
const AccessControl &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const AccessControl &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
AccessControl &  val 
)
bool Tp::operator== ( const AliasPair &  v1,
const AliasPair &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const AliasPair &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
AliasPair &  val 
)
bool Tp::operator== ( const Avatar &  v1,
const Avatar &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const Avatar &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
Avatar &  val 
)
bool Tp::operator== ( const CallStateReason &  v1,
const CallStateReason &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const CallStateReason &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
CallStateReason &  val 
)
bool Tp::operator== ( const Candidate &  v1,
const Candidate &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const Candidate &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
Candidate &  val 
)
bool Tp::operator== ( const CapabilityChange &  v1,
const CapabilityChange &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const CapabilityChange &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
CapabilityChange &  val 
)
bool Tp::operator== ( const CapabilityPair &  v1,
const CapabilityPair &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const CapabilityPair &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
CapabilityPair &  val 
)
bool Tp::operator== ( const CaptchaInfo &  v1,
const CaptchaInfo &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const CaptchaInfo &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
CaptchaInfo &  val 
)
bool Tp::operator== ( const ChannelDetails &  v1,
const ChannelDetails &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const ChannelDetails &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
ChannelDetails &  val 
)
bool Tp::operator== ( const ChannelInfo &  v1,
const ChannelInfo &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const ChannelInfo &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
ChannelInfo &  val 
)
bool Tp::operator== ( const ContactCapability &  v1,
const ContactCapability &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const ContactCapability &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
ContactCapability &  val 
)
bool Tp::operator== ( const ContactInfoField &  v1,
const ContactInfoField &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const ContactInfoField &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
ContactInfoField &  val 
)
bool Tp::operator== ( const ContactSubscriptions &  v1,
const ContactSubscriptions &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const ContactSubscriptions &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
ContactSubscriptions &  val 
)
bool Tp::operator== ( const CurrencyAmount &  v1,
const CurrencyAmount &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const CurrencyAmount &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
CurrencyAmount &  val 
)
bool Tp::operator== ( const DBusTubeMember &  v1,
const DBusTubeMember &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const DBusTubeMember &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
DBusTubeMember &  val 
)
bool Tp::operator== ( const DebugMessage &  v1,
const DebugMessage &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const DebugMessage &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
DebugMessage &  val 
)
bool Tp::operator== ( const FieldSpec &  v1,
const FieldSpec &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const FieldSpec &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
FieldSpec &  val 
)
bool Tp::operator== ( const HTTPPostData &  v1,
const HTTPPostData &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const HTTPPostData &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
HTTPPostData &  val 
)
bool Tp::operator== ( const LocalPendingInfo &  v1,
const LocalPendingInfo &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const LocalPendingInfo &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
LocalPendingInfo &  val 
)
bool Tp::operator== ( const MailAddress &  v1,
const MailAddress &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const MailAddress &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
MailAddress &  val 
)
bool Tp::operator== ( const MediaDescriptionOffer &  v1,
const MediaDescriptionOffer &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const MediaDescriptionOffer &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
MediaDescriptionOffer &  val 
)
bool Tp::operator== ( const MediaSessionHandlerInfo &  v1,
const MediaSessionHandlerInfo &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const MediaSessionHandlerInfo &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
MediaSessionHandlerInfo &  val 
)
bool Tp::operator== ( const MediaStreamHandlerTransport &  v1,
const MediaStreamHandlerTransport &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const MediaStreamHandlerTransport &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
MediaStreamHandlerTransport &  val 
)
bool Tp::operator== ( const MediaStreamInfo &  v1,
const MediaStreamInfo &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const MediaStreamInfo &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
MediaStreamInfo &  val 
)
bool Tp::operator== ( const NotDelegatedError &  v1,
const NotDelegatedError &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const NotDelegatedError &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
NotDelegatedError &  val 
)
bool Tp::operator== ( const ParamSpec &  v1,
const ParamSpec &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const ParamSpec &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
ParamSpec &  val 
)
bool Tp::operator== ( const PendingTextMessage &  v1,
const PendingTextMessage &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const PendingTextMessage &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
PendingTextMessage &  val 
)
bool Tp::operator== ( const PropertyFlagsChange &  v1,
const PropertyFlagsChange &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const PropertyFlagsChange &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
PropertyFlagsChange &  val 
)
bool Tp::operator== ( const PropertySpec &  v1,
const PropertySpec &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const PropertySpec &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
PropertySpec &  val 
)
bool Tp::operator== ( const PropertyValue &  v1,
const PropertyValue &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const PropertyValue &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
PropertyValue &  val 
)
bool Tp::operator== ( const RTCPFeedbackMessage &  v1,
const RTCPFeedbackMessage &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const RTCPFeedbackMessage &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
RTCPFeedbackMessage &  val 
)
bool Tp::operator== ( const RTPHeaderExtension &  v1,
const RTPHeaderExtension &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const RTPHeaderExtension &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
RTPHeaderExtension &  val 
)
bool Tp::operator== ( const RequestableChannelClass &  v1,
const RequestableChannelClass &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const RequestableChannelClass &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
RequestableChannelClass &  val 
)
bool Tp::operator== ( const RichPresenceAccessControl &  v1,
const RichPresenceAccessControl &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const RichPresenceAccessControl &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
RichPresenceAccessControl &  val 
)
bool Tp::operator== ( const RoomInfo &  v1,
const RoomInfo &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const RoomInfo &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
RoomInfo &  val 
)
bool Tp::operator== ( const ServicePoint &  v1,
const ServicePoint &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const ServicePoint &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
ServicePoint &  val 
)
bool Tp::operator== ( const SimplePresence &  v1,
const SimplePresence &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const SimplePresence &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
SimplePresence &  val 
)
bool Tp::operator== ( const SimpleStatusSpec &  v1,
const SimpleStatusSpec &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const SimpleStatusSpec &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
SimpleStatusSpec &  val 
)
bool Tp::operator== ( const SocketAddressIP &  v1,
const SocketAddressIP &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const SocketAddressIP &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
SocketAddressIP &  val 
)
bool Tp::operator== ( const SocketAddressIPv4 &  v1,
const SocketAddressIPv4 &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const SocketAddressIPv4 &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
SocketAddressIPv4 &  val 
)
bool Tp::operator== ( const SocketAddressIPv6 &  v1,
const SocketAddressIPv6 &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const SocketAddressIPv6 &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
SocketAddressIPv6 &  val 
)
bool Tp::operator== ( const SocketNetmaskIPv4 &  v1,
const SocketNetmaskIPv4 &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const SocketNetmaskIPv4 &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
SocketNetmaskIPv4 &  val 
)
bool Tp::operator== ( const SocketNetmaskIPv6 &  v1,
const SocketNetmaskIPv6 &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const SocketNetmaskIPv6 &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
SocketNetmaskIPv6 &  val 
)
bool Tp::operator== ( const StreamCredentials &  v1,
const StreamCredentials &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const StreamCredentials &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
StreamCredentials &  val 
)
bool Tp::operator== ( const TLSCertificateRejection &  v1,
const TLSCertificateRejection &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const TLSCertificateRejection &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
TLSCertificateRejection &  val 
)
bool Tp::operator== ( const TubeInfo &  v1,
const TubeInfo &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const TubeInfo &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
TubeInfo &  val 
)
bool Tp::operator== ( const VideoResolution &  v1,
const VideoResolution &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const VideoResolution &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
VideoResolution &  val 
)
bool Tp::operator== ( const CandidatePair &  v1,
const CandidatePair &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const CandidatePair &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
CandidatePair &  val 
)
bool Tp::operator== ( const Codec &  v1,
const Codec &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const Codec &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
Codec &  val 
)
bool Tp::operator== ( const HandlerCapabilities &  v1,
const HandlerCapabilities &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const HandlerCapabilities &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
HandlerCapabilities &  val 
)
bool Tp::operator== ( const LastActivityAndStatuses &  v1,
const LastActivityAndStatuses &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const LastActivityAndStatuses &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
LastActivityAndStatuses &  val 
)
bool Tp::operator== ( const MailURL &  v1,
const MailURL &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const MailURL &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
MailURL &  val 
)
bool Tp::operator== ( const MediaStreamHandlerCandidate &  v1,
const MediaStreamHandlerCandidate &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const MediaStreamHandlerCandidate &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
MediaStreamHandlerCandidate &  val 
)
bool Tp::operator== ( const MediaStreamHandlerCodec &  v1,
const MediaStreamHandlerCodec &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const MediaStreamHandlerCodec &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
MediaStreamHandlerCodec &  val 
)
bool Tp::operator== ( const RTCPFeedbackMessageProperties &  v1,
const RTCPFeedbackMessageProperties &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const RTCPFeedbackMessageProperties &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
RTCPFeedbackMessageProperties &  val 
)
bool Tp::operator== ( const ServicePointInfo &  v1,
const ServicePointInfo &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const ServicePointInfo &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
ServicePointInfo &  val 
)
bool Tp::operator== ( const StatusSpec &  v1,
const StatusSpec &  v2 
)
QDBusArgument & Tp::operator<< ( QDBusArgument &  arg,
const StatusSpec &  val 
)
const QDBusArgument & Tp::operator>> ( const QDBusArgument &  arg,
StatusSpec &  val 
)
bool Tp::operator!= ( const AccessControl &  v1,
const AccessControl &  v2 
) [inline]
bool Tp::operator!= ( const AliasPair &  v1,
const AliasPair &  v2 
) [inline]
bool Tp::operator!= ( const Avatar &  v1,
const Avatar &  v2 
) [inline]
bool Tp::operator!= ( const CallStateReason &  v1,
const CallStateReason &  v2 
) [inline]
bool Tp::operator!= ( const Candidate &  v1,
const Candidate &  v2 
) [inline]
bool Tp::operator!= ( const CapabilityChange &  v1,
const CapabilityChange &  v2 
) [inline]
bool Tp::operator!= ( const CapabilityPair &  v1,
const CapabilityPair &  v2 
) [inline]
bool Tp::operator!= ( const CaptchaInfo &  v1,
const CaptchaInfo &  v2 
) [inline]
bool Tp::operator!= ( const ChannelDetails &  v1,
const ChannelDetails &  v2 
) [inline]
bool Tp::operator!= ( const ChannelInfo &  v1,
const ChannelInfo &  v2 
) [inline]
bool Tp::operator!= ( const ContactCapability &  v1,
const ContactCapability &  v2 
) [inline]
bool Tp::operator!= ( const ContactInfoField &  v1,
const ContactInfoField &  v2 
) [inline]
bool Tp::operator!= ( const ContactSubscriptions &  v1,
const ContactSubscriptions &  v2 
) [inline]
bool Tp::operator!= ( const CurrencyAmount &  v1,
const CurrencyAmount &  v2 
) [inline]
bool Tp::operator!= ( const DBusTubeMember &  v1,
const DBusTubeMember &  v2 
) [inline]
bool Tp::operator!= ( const DebugMessage &  v1,
const DebugMessage &  v2 
) [inline]
bool Tp::operator!= ( const FieldSpec &  v1,
const FieldSpec &  v2 
) [inline]
bool Tp::operator!= ( const HTTPPostData &  v1,
const HTTPPostData &  v2 
) [inline]
bool Tp::operator!= ( const LocalPendingInfo &  v1,
const LocalPendingInfo &  v2 
) [inline]
bool Tp::operator!= ( const MailAddress &  v1,
const MailAddress &  v2 
) [inline]
bool Tp::operator!= ( const MediaDescriptionOffer &  v1,
const MediaDescriptionOffer &  v2 
) [inline]
bool Tp::operator!= ( const MediaSessionHandlerInfo &  v1,
const MediaSessionHandlerInfo &  v2 
) [inline]
bool Tp::operator!= ( const MediaStreamHandlerTransport &  v1,
const MediaStreamHandlerTransport &  v2 
) [inline]
bool Tp::operator!= ( const MediaStreamInfo &  v1,
const MediaStreamInfo &  v2 
) [inline]
bool Tp::operator!= ( const NotDelegatedError &  v1,
const NotDelegatedError &  v2 
) [inline]
bool Tp::operator!= ( const ParamSpec &  v1,
const ParamSpec &  v2 
) [inline]
bool Tp::operator!= ( const PendingTextMessage &  v1,
const PendingTextMessage &  v2 
) [inline]
bool Tp::operator!= ( const PropertyFlagsChange &  v1,
const PropertyFlagsChange &  v2 
) [inline]
bool Tp::operator!= ( const PropertySpec &  v1,
const PropertySpec &  v2 
) [inline]
bool Tp::operator!= ( const PropertyValue &  v1,
const PropertyValue &  v2 
) [inline]
bool Tp::operator!= ( const RTCPFeedbackMessage &  v1,
const RTCPFeedbackMessage &  v2 
) [inline]
bool Tp::operator!= ( const RTPHeaderExtension &  v1,
const RTPHeaderExtension &  v2 
) [inline]
bool Tp::operator!= ( const RequestableChannelClass &  v1,
const RequestableChannelClass &  v2 
) [inline]
bool Tp::operator!= ( const RichPresenceAccessControl &  v1,
const RichPresenceAccessControl &  v2 
) [inline]
bool Tp::operator!= ( const RoomInfo &  v1,
const RoomInfo &  v2 
) [inline]
bool Tp::operator!= ( const ServicePoint &  v1,
const ServicePoint &  v2 
) [inline]
bool Tp::operator!= ( const SimplePresence &  v1,
const SimplePresence &  v2 
) [inline]
bool Tp::operator!= ( const SimpleStatusSpec &  v1,
const SimpleStatusSpec &  v2 
) [inline]
bool Tp::operator!= ( const SocketAddressIP &  v1,
const SocketAddressIP &  v2 
) [inline]
bool Tp::operator!= ( const SocketAddressIPv4 &  v1,
const SocketAddressIPv4 &  v2 
) [inline]
bool Tp::operator!= ( const SocketAddressIPv6 &  v1,
const SocketAddressIPv6 &  v2 
) [inline]
bool Tp::operator!= ( const SocketNetmaskIPv4 &  v1,
const SocketNetmaskIPv4 &  v2 
) [inline]
bool Tp::operator!= ( const SocketNetmaskIPv6 &  v1,
const SocketNetmaskIPv6 &  v2 
) [inline]
bool Tp::operator!= ( const StreamCredentials &  v1,
const StreamCredentials &  v2 
) [inline]
bool Tp::operator!= ( const TLSCertificateRejection &  v1,
const TLSCertificateRejection &  v2 
) [inline]
bool Tp::operator!= ( const TubeInfo &  v1,
const TubeInfo &  v2 
) [inline]
bool Tp::operator!= ( const VideoResolution &  v1,
const VideoResolution &  v2 
) [inline]
bool Tp::operator!= ( const CandidatePair &  v1,
const CandidatePair &  v2 
) [inline]
bool Tp::operator!= ( const Codec &  v1,
const Codec &  v2 
) [inline]
bool Tp::operator!= ( const HandlerCapabilities &  v1,
const HandlerCapabilities &  v2 
) [inline]
bool Tp::operator!= ( const LastActivityAndStatuses &  v1,
const LastActivityAndStatuses &  v2 
) [inline]
bool Tp::operator!= ( const MailURL &  v1,
const MailURL &  v2 
) [inline]
bool Tp::operator!= ( const MediaStreamHandlerCandidate &  v1,
const MediaStreamHandlerCandidate &  v2 
) [inline]
bool Tp::operator!= ( const MediaStreamHandlerCodec &  v1,
const MediaStreamHandlerCodec &  v2 
) [inline]
bool Tp::operator!= ( const RTCPFeedbackMessageProperties &  v1,
const RTCPFeedbackMessageProperties &  v2 
) [inline]
bool Tp::operator!= ( const ServicePointInfo &  v1,
const ServicePointInfo &  v2 
) [inline]
bool Tp::operator!= ( const StatusSpec &  v1,
const StatusSpec &  v2 
) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01150.html0000644000175200001440000001701412000060453021617 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::DBus::IntrospectableInterface Member List
This is the complete list of members for Tp::Client::DBus::IntrospectableInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
Introspect(int timeout=-1)Tp::Client::DBus::IntrospectableInterface [inline, slot]
IntrospectableInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::DBus::IntrospectableInterface
IntrospectableInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::DBus::IntrospectableInterface
IntrospectableInterface(Tp::DBusProxy *proxy)Tp::Client::DBus::IntrospectableInterface
IntrospectableInterface(const Tp::AbstractInterface &mainInterface)Tp::Client::DBus::IntrospectableInterface [explicit]
IntrospectableInterface(const Tp::AbstractInterface &mainInterface, QObject *parent)Tp::Client::DBus::IntrospectableInterface
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::DBus::IntrospectableInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::DBus::IntrospectableInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::DBus::IntrospectableInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00885.html0000644000175200001440000001234012000060453021632 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ReceivedMessage::DeliveryDetails Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00350.html0000644000175200001440000001530312000060453021617 0ustar00collabora-develusers00000000000000 Tp::PtrFunctor0< R > Struct Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PtrFunctor0< R > Struct Template Reference

#include </home/collabora-devel/kde/src/telepathy-qt4/TelepathyQt/functors.h>

Inherits Tp::BaseFunctor.

List of all members.

Public Types

Public Member Functions

Public Attributes

template<class R>
struct Tp::PtrFunctor0< R >


Member Typedef Documentation

template<class R >
typedef R(* Tp::PtrFunctor0< R >::FunctionType)()
template<class R >
typedef R Tp::PtrFunctor0< R >::ResultType

Constructor & Destructor Documentation

template<class R >
Tp::PtrFunctor0< R >::PtrFunctor0 ( FunctionType  fn) [inline]

Member Function Documentation

template<class R >
ResultType Tp::PtrFunctor0< R >::operator() ( ) const [inline]

Member Data Documentation

template<class R >
FunctionType Tp::PtrFunctor0< R >::fn


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00383.html0000644000175200001440000001173212000060453021627 0ustar00collabora-develusers00000000000000 Tp::SimplePresence Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::SimplePresence Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

A struct representing the presence of a contact.


Member Data Documentation

The presence type, e.g. Connection_Presence_Type_Away.

The string identifier of the status, e.g. "brb", as defined in the Statuses property.

The user-defined status message, e.g. "Back soon!".

Clients SHOULD set the status message for the local user to the empty string, unless the user has actually provided a specific message (i.e. one that conveys more information than the Status).

User interfaces SHOULD regard an empty status message as unset, and MAY replace it with a localized string corresponding to the Status or Type.

Use case: Daf sets his status in Empathy by choosing the Welsh translation of "Available" from a menu. It is more informative for his English-speaking colleagues to see the English translation of "Available" (as localized by their own clients) than to see "Ar Gael" (which they don't understand anyway).


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00734.html0000644000175200001440000000461712000060453021633 0ustar00collabora-develusers00000000000000 Generic D-Bus proxies
   Home · All Classes · All Namespaces · Modules · Functions · Files
Generic D-Bus proxies

Classes


Detailed Description

Proxy objects representing well-known generic D-Bus interfaces on remote objects. Note that QDBus already has QDBusConnectionInterface for accessing the bus daemon, so in the parts where there is an overlap in the functionality, using the QDBus proxy should be given consideration instead of blindly using the proxy provided here.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00175.html0000644000175200001440000014241012000060453021624 0ustar00collabora-develusers00000000000000 Tp::Client::ConnectionInterfaceContactGroupsInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceContactGroupsInterface Class Reference

#include <TelepathyQt/Connection>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Connection.Interface.ContactGroups".


Constructor & Destructor Documentation

Tp::Client::ConnectionInterfaceContactGroupsInterface::ConnectionInterfaceContactGroupsInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceContactGroupsInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ConnectionInterfaceContactGroupsInterface::ConnectionInterfaceContactGroupsInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceContactGroupsInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ConnectionInterfaceContactGroupsInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ConnectionInterfaceContactGroupsInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ConnectionInterfaceContactGroupsInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Connection.Interface.ContactGroups", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property DisjointGroups of type bool.

True if each contact can be in at most one group; false if each contact can be in many groups.

This property cannot change after the connection has moved to the Connected state. Until then, its value is undefined, and it may change at any time, without notification.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property GroupStorage of type uint.

Indicates the extent to which contacts' groups can be set and stored. This property cannot change after the connection has moved to the Connected state. Until then, its value is undefined, and it may change at any time, without notification.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Groups of type QStringList.

The names of all groups that currently exist. This may be a larger set than the union of all contacts' groups contact attributes, if the connection allows groups to be empty.

Change notification is via GroupsCreated() and GroupsRemoved() ; clients can also distinguish between a create/remove pair and a renamed group by receiving GroupRenamed() .

This property's value is not meaningful until the ConnectionInterfaceContactListInterface::ContactListState has become Success.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::ConnectionInterfaceContactGroupsInterface::SetContactGroups ( uint  contact,
const QStringList &  groups,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method SetContactGroups on the remote object.

Add the given contact to the given groups (creating new groups if necessary), and remove them from all other groups.

This is the easiest and most correct way to implement user interfaces that display a single contact with a list of groups, resulting in a user expectation that when they apply the changes, the contact's set of groups will become exactly what was displayed.

If the user is removed from a group of which they were the only member, the group MAY be removed automatically.

In protocols like XMPP where groups behave like tags, a group with no members has no protocol representation.

Any GroupsCreated() , GroupsChanged() and GroupsRemoved() signals that result from this method call MUST be emitted before the method returns.

This method SHOULD NOT be called until the ConnectionInterfaceContactListInterface::ContactListState changes to Success. If the ContactListState is Failure, this method SHOULD raise the same error as ConnectionInterfaceContactListInterface::GetContactListAttributes() .

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
contactThe contact to alter.
groupsThe set of groups which the contact should be in.
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ConnectionInterfaceContactGroupsInterface::SetGroupMembers ( const QString &  group,
const Tp::UIntList members,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method SetGroupMembers on the remote object.

Add the given members to the given group (creating it if necessary), and remove all other members.

This is the easiest and most correct way to implement user interfaces that display a single group with a list of contacts, resulting in a user expectation that when they apply the changes, the groups's set of members will become exactly what was displayed.

If DisjointGroups is true, this will also remove each member from their previous group.

If the user is removed from a group of which they were the only member, the group MAY be removed automatically.

Any GroupsCreated() , GroupsChanged() and GroupsRemoved() signals that result from this method call MUST be emitted before the method returns.

This method SHOULD NOT be called until the ConnectionInterfaceContactListInterface::ContactListState changes to Success. If the ContactListState is Failure, this method SHOULD raise the same error as ConnectionInterfaceContactListInterface::GetContactListAttributes() .

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
groupThe group to alter.
membersThe set of members for the group. If this set is empty, this method MAY remove the group.
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ConnectionInterfaceContactGroupsInterface::AddToGroup ( const QString &  group,
const Tp::UIntList members,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method AddToGroup on the remote object.

Add the given members to the given group, creating it if necessary.

If DisjointGroups is true, this will also remove each member from their previous group.

This is good for user interfaces in which you can edit groups via drag-and-drop.

Any GroupsCreated() , GroupsChanged() and GroupsRemoved() signals that result from this method call MUST be emitted before the method returns.

This method SHOULD NOT be called until the ConnectionInterfaceContactListInterface::ContactListState changes to Success. If the ContactListState is Failure, this method SHOULD raise the same error as ConnectionInterfaceContactListInterface::GetContactListAttributes() .

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
groupThe group to alter.
membersThe set of members to include in the group.
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ConnectionInterfaceContactGroupsInterface::RemoveFromGroup ( const QString &  group,
const Tp::UIntList members,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method RemoveFromGroup on the remote object.

Remove the given members from the given group.

This is good for user interfaces in which you can edit groups via drag-and-drop.

Any GroupsChanged() or GroupsRemoved() signals that result from this method call MUST be emitted before the method returns.

This method SHOULD NOT be called until the ConnectionInterfaceContactListInterface::ContactListState changes to Success. If the ContactListState is Failure, this method SHOULD raise the same error as ConnectionInterfaceContactListInterface::GetContactListAttributes() .

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
groupThe group to alter. If it does not exist, then it has no members by definition, so this method SHOULD return successfully.
membersThe set of members to remove from the group. It is not an error to remove members who are already not in the group. If there are no members left in the group afterwards, the group MAY itself be removed.
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ConnectionInterfaceContactGroupsInterface::RemoveGroup ( const QString &  group,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method RemoveGroup on the remote object.

Remove all members from the given group, then remove the group itself. If the group already does not exist, this method SHOULD return successfully.

Any GroupsChanged() or GroupsRemoved() signals that result from this method call MUST be emitted before the method returns.

This method SHOULD NOT be called until the ConnectionInterfaceContactListInterface::ContactListState changes to Success. If the ContactListState is Failure, this method SHOULD raise the same error as ConnectionInterfaceContactListInterface::GetContactListAttributes() .

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
groupThe group to remove.
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ConnectionInterfaceContactGroupsInterface::RenameGroup ( const QString &  oldName,
const QString &  newName,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method RenameGroup on the remote object.

Rename the given group.

On protocols where groups behave like tags, this is an API short-cut for adding all of the group's members to a group with the new name, then removing the old group.

Otherwise, clients can't perform this operation atomically, even if the connection could.

Any GroupRenamed() or GroupsRemoved() signals that result from this method call MUST be emitted before the method returns.

This method SHOULD NOT be called until the ConnectionInterfaceContactListInterface::ContactListState changes to Success. If the ContactListState is Failure, this method SHOULD raise the same error as ConnectionInterfaceContactListInterface::GetContactListAttributes() .

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
oldNameThe group to rename.
newNameThe new name for the group.
timeoutThe timeout in milliseconds.
void Tp::Client::ConnectionInterfaceContactGroupsInterface::GroupsChanged ( const Tp::UIntList contact,
const QStringList &  added,
const QStringList &  removed 
) [signal]

Represents the signal GroupsChanged on the remote object.

Emitted when contacts' groups change.

Parameters:
contactThe relevant contacts.
addedThe names of groups to which the contacts were added.
removedThe names of groups from which the contacts were removed.
void Tp::Client::ConnectionInterfaceContactGroupsInterface::GroupsCreated ( const QStringList &  names) [signal]

Represents the signal GroupsCreated on the remote object.

Emitted when new, empty groups are created. This will often be followed by GroupsChanged signals that add some members.

Parameters:
namesThe names of the new groups.
void Tp::Client::ConnectionInterfaceContactGroupsInterface::GroupRenamed ( const QString &  oldName,
const QString &  newName 
) [signal]

Represents the signal GroupRenamed on the remote object.

Emitted when a group is renamed, in protocols where this can be distinguished from group creation, removal and membership changes.

Immediately after this signal is emitted, GroupsCreated() MUST signal the creation of a group with the new name, and GroupsRemoved() MUST signal the removal of a group with the old name.

Emitting these extra signals, in this order, means that clients that are interested in the set of groups that exist (but treat a rename and a create/remove pair identically) can ignore the GroupRenamed signal entirely.

If the group was not empty, immediately after those signals are emitted, GroupsChanged() MUST signal that the members of that group were removed from the old name and added to the new name.

On connection managers where groups behave like tags, renaming a group MAY be signalled as a set of GroupsCreated() , GroupsRemoved() and GroupsChanged() signals, instead of emitting this signal.

On protocols like XMPP, another resource "renaming a group" is indistinguishable from changing contacts' groups individually.

Parameters:
oldNameThe old name of the group.
newNameThe new name of the group.
void Tp::Client::ConnectionInterfaceContactGroupsInterface::GroupsRemoved ( const QStringList &  names) [signal]

Represents the signal GroupsRemoved on the remote object.

Emitted when one or more groups are removed. If they had members at the time that they were removed, then immediately after this signal is emitted, GroupsChanged() MUST signal that their members were removed.

Emitting the signals in this order allows for two modes of operation. A client interested only in a contact's set of groups can ignore GroupsRemoved() and rely on the GroupsChanged() signal that will follow; a more elaborate client wishing to distinguish between all of a group's members being removed, and the group itself being removed, can additionally watch for GroupsRemoved() and use it to disambiguate.

Parameters:
namesThe names of the groups.
void Tp::Client::ConnectionInterfaceContactGroupsInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00038.html0000644000175200001440000001111712000060453021621 0ustar00collabora-develusers00000000000000 Tp::AbstractProtocolInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AbstractProtocolInterface Class Reference

Base class for all the Protocol object interface implementations. More...

#include <TelepathyQt/AbstractProtocolInterface>

Inherits Tp::AbstractDBusServiceInterface.

Inherited by Tp::BaseProtocolAddressingInterface, Tp::BaseProtocolAvatarsInterface, and Tp::BaseProtocolPresenceInterface.

List of all members.

Public Member Functions


Detailed Description

Base class for all the Protocol object interface implementations.


Constructor & Destructor Documentation


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00108.html0000644000175200001440000001277612000060453021633 0ustar00collabora-develusers00000000000000 Tp::ChannelClass Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ChannelClass Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<QString, QDBusVariant>, but needed to have a discrete type in the Qt type system.

Mapping representing a class of channels that can be requested from a connection manager, can be handled by a user interface, are supported by a contact, etc.

Classes of channel are identified by the fixed values of a subset of their properties.

Channel classes SHOULD always include the keys ChannelInterface::ChannelType and ChannelInterface::TargetHandleType . (One exception is that ChannelTypeContactSearchInterface channels do not have TargetHandleType None in their requestable channel classes, for historical reasons.)


Constructor & Destructor Documentation

Tp::ChannelClass::ChannelClass ( const QMap< QString, QDBusVariant > &  a) [inline]

Member Function Documentation

ChannelClass& Tp::ChannelClass::operator= ( const QMap< QString, QDBusVariant > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00225.html0000644000175200001440000004621212000060453021623 0ustar00collabora-develusers00000000000000 Tp::ReceivedMessage::DeliveryDetails Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ReceivedMessage::DeliveryDetails Class Reference

The ReceivedMessage::DeliveryDetails class represents the details of a delivery report. More...

#include <TelepathyQt/ReceivedMessage>

List of all members.

Public Member Functions


Detailed Description

The ReceivedMessage::DeliveryDetails class represents the details of a delivery report.


Constructor & Destructor Documentation


Member Function Documentation

ReceivedMessage::DeliveryDetails & Tp::ReceivedMessage::DeliveryDetails::operator= ( const DeliveryDetails other)

Assignment operator.

Return the delivery status of a message.

Returns:
The delivery status as DeliveryStatus.

Return whether this delivery report contains an identifier for the message to which it refers.

Returns:
true if an original message token is known, false otherwise.
See also:
originalToken()

Return an identifier for the message to which this delivery report refers, or an empty string if hasOriginalToken() returns false.

Clients may match this against the token produced by the TextChannel::send() method and TextChannel::messageSent() signal. A status report with no token could match any sent message, and a sent message with an empty token could match any status report. If multiple sent messages match, clients should use some reasonable heuristic.

Returns:
The message token if hasOriginalToken() returns true, an empty string otherwise.
See also:
hasOriginalToken().

Return whether the delivery of the message this delivery report refers to, failed.

Returns:
true if the message delivery failed, false otherwise.
See also:
error()

Return the reason for the delivery failure if known.

Returns:
The reason as ChannelTextSendError.
See also:
isError()

Return whether this delivery report contains a debugging information on why the message it refers to could not be delivered.

Returns:
true if a debugging information is provided, false otherwise.
See also:
debugMessage()

Return the debugging information on why the message this delivery report refers to could not be delivered.

Returns:
The debug string.
See also:
hasDebugMessage()

Return the reason for the delivery failure if known, specified as a (possibly implementation-specific) D-Bus error.

Returns:
The D-Bus error string representing the error.

Return whether the message content for the message this delivery report refers to is known.

Returns:
true if the original message content is known, false otherwise.
See also:
echoedMessage()

Return the Message object for the message this delivery report refers to, omitted if the message is unknown.

Rationale:
Some protocols, like XMPP, echo the failing message back to the sender. This is sometimes the only way to match it against the sent message, so we include it here.
Returns:
The Message object, or an empty Message object if hasEchoedMessage() returns false.
See also:
hasEchoedMessage()


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00247.html0000644000175200001440000001157312000060453021631 0ustar00collabora-develusers00000000000000 Tp::HandleOwnerMap Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::HandleOwnerMap Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<uint, uint>, but needed to have a discrete type in the Qt type system.

A map from channel-specific handles to their owners.


Constructor & Destructor Documentation

Tp::HandleOwnerMap::HandleOwnerMap ( const QMap< uint, uint > &  a) [inline]

Member Function Documentation

HandleOwnerMap& Tp::HandleOwnerMap::operator= ( const QMap< uint, uint > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00978.html0000644000175200001440000000513512000060453021641 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactAttributesMap Member List
This is the complete list of members for Tp::ContactAttributesMap, including all inherited members.
ContactAttributesMap()Tp::ContactAttributesMap [inline]
ContactAttributesMap(const QMap< uint, QVariantMap > &a)Tp::ContactAttributesMap [inline]
operator=(const QMap< uint, QVariantMap > &a)Tp::ContactAttributesMap [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00891.html0000644000175200001440000007230012000060453021631 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::OutgoingDBusTubeChannel Member List
This is the complete list of members for Tp::OutgoingDBusTubeChannel, including all inherited members.
actualFeatures() const Tp::ReadyObject [virtual]
address() const Tp::DBusTubeChannel
baseInterface() const Tp::Channel [protected]
becomeReady(const Features &requestedFeatures=Features())Tp::ReadyObject [virtual]
busName() const Tp::DBusProxy
busNameAdded(const QString &busName, const Tp::ContactPtr &contact)Tp::DBusTubeChannel [signal]
busNameRemoved(const QString &busName, const Tp::ContactPtr &contact)Tp::DBusTubeChannel [signal]
BypassInterfaceCheck enum valueTp::OptionalInterfaceFactory< Channel >
Channel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature)Tp::Channel [protected]
channelType() const Tp::Channel
CheckInterfaceSupported enum valueTp::OptionalInterfaceFactory< Channel >
conferenceChannelMerged(const Tp::ChannelPtr &channel)Tp::Channel [signal]
conferenceChannelRemoved(const Tp::ChannelPtr &channel, const Tp::Channel::GroupMemberChangeDetails &details)Tp::Channel [signal]
conferenceChannels() const Tp::Channel
conferenceInitialChannels() const Tp::Channel
conferenceInitialInviteeContacts() const Tp::Channel
conferenceMergeChannel(const ChannelPtr &channel)Tp::Channel
conferenceOriginalChannels() const Tp::Channel
conferenceSplitChannel()Tp::Channel
connection() const Tp::Channel
contactsForBusNames() const Tp::DBusTubeChannel
create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties)Tp::OutgoingDBusTubeChannel [static]
dbusConnection() const Tp::DBusProxy
DBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::DBusProxy
DBusTubeChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties)Tp::DBusTubeChannel [protected]
FeatureBusNameMonitoringTp::DBusTubeChannel [static]
FeatureConferenceInitialInviteeContactsTp::Channel [static]
FeatureCoreTp::DBusTubeChannel [static]
groupAddContacts(const QList< ContactPtr > &contacts, const QString &message=QString())Tp::Channel
groupAddSelfHandle()Tp::Channel [protected, slot]
groupAreHandleOwnersAvailable() const Tp::Channel
groupCanAcceptContactsWithMessage() const Tp::Channel
groupCanAddContacts() const Tp::Channel
groupCanAddContactsChanged(bool canAddContacts)Tp::Channel [signal]
groupCanAddContactsWithMessage() const Tp::Channel
groupCanDepartWithMessage() const Tp::Channel
groupCanRejectContactsWithMessage() const Tp::Channel
groupCanRemoveContacts() const Tp::Channel
groupCanRemoveContactsChanged(bool canRemoveContacts)Tp::Channel [signal]
groupCanRemoveContactsWithMessage() const Tp::Channel
groupCanRescindContacts() const Tp::Channel
groupCanRescindContactsChanged(bool canRescindContacts)Tp::Channel [signal]
groupCanRescindContactsWithMessage() const Tp::Channel
groupContacts(bool includeSelfContact=true) const Tp::Channel
groupFlags() const Tp::Channel
groupFlagsChanged(Tp::ChannelGroupFlags flags, Tp::ChannelGroupFlags added, Tp::ChannelGroupFlags removed)Tp::Channel [signal]
groupHandleOwners() const Tp::Channel
groupHandleOwnersChanged(const Tp::HandleOwnerMap &owners, const Tp::UIntList &added, const Tp::UIntList &removed)Tp::Channel [signal]
groupIsSelfContactTracked() const Tp::Channel
groupLocalPendingContactChangeInfo(const ContactPtr &contact) const Tp::Channel
groupLocalPendingContacts(bool includeSelfContact=true) const Tp::Channel
groupMembersChanged(const Tp::Contacts &groupMembersAdded, const Tp::Contacts &groupLocalPendingMembersAdded, const Tp::Contacts &groupRemotePendingMembersAdded, const Tp::Contacts &groupMembersRemoved, const Tp::Channel::GroupMemberChangeDetails &details)Tp::Channel [signal]
groupRemotePendingContacts(bool includeSelfContact=true) const Tp::Channel
groupRemoveContacts(const QList< ContactPtr > &contacts, const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone)Tp::Channel
groupSelfContact() const Tp::Channel
groupSelfContactChanged()Tp::Channel [signal]
groupSelfContactRemoveInfo() const Tp::Channel
groupSelfHandleIsLocalPending() const Tp::Channel [protected]
hasInterface(const QString &name) constTp::OptionalInterfaceFactory< Channel > [inline]
immutableProperties() const Tp::Channel
initiatorContact() const Tp::Channel
interface() constTp::OptionalInterfaceFactory< Channel > [inline]
interfaces() constTp::OptionalInterfaceFactory< Channel > [inline]
InterfaceSupportedChecking enum nameTp::OptionalInterfaceFactory< Channel >
invalidate(const QString &reason, const QString &message)Tp::DBusProxy [protected]
invalidate(const QDBusError &error)Tp::DBusProxy [protected]
invalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage)Tp::DBusProxy [signal]
invalidationMessage() const Tp::DBusProxy
invalidationReason() const Tp::DBusProxy
isConference() const Tp::Channel
isReady(const Features &features=Features()) const Tp::ReadyObject [virtual]
isRequested() const Tp::Channel
isValid() const Tp::DBusProxy
missingFeatures() const Tp::ReadyObject [virtual]
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
objectPath() const Tp::DBusProxy
offerTube(const QVariantMap &parameters, bool allowOtherUsers=false)Tp::OutgoingDBusTubeChannel
optionalInterface(InterfaceSupportedChecking check=CheckInterfaceSupported) constTp::OptionalInterfaceFactory< Channel > [inline]
OptionalInterfaceFactory(Channel *this_)Tp::OptionalInterfaceFactory< Channel > [inline]
OutgoingDBusTubeChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties)Tp::OutgoingDBusTubeChannel [protected]
parameters() const Tp::TubeChannel
propertyChanged(const QString &propertyName)Tp::Object [signal]
readinessHelper() const Tp::ReadyObject [protected]
ReadyObject(RefCounted *object, const Feature &featureCore)Tp::ReadyObject
ReadyObject(DBusProxy *proxy, const Feature &featureCore)Tp::ReadyObject
RefCounted()Tp::RefCounted [inline]
requestClose()Tp::Channel
requestedFeatures() const Tp::ReadyObject [virtual]
requestLeave(const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone)Tp::Channel
serviceName() const Tp::DBusTubeChannel
setBusName(const QString &busName)Tp::DBusProxy [protected]
setInterfaces(const QStringList &interfaces)Tp::OptionalInterfaceFactory< Channel > [inline, protected]
setParameters(const QVariantMap &parameters)Tp::TubeChannel [protected]
state() const Tp::TubeChannel
stateChanged(Tp::TubeChannelState state)Tp::TubeChannel [signal]
StatefulDBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::StatefulDBusProxy
supportsConferenceMerging() const Tp::Channel
supportsConferenceSplitting() const Tp::Channel
supportsRestrictingToCurrentUser() const Tp::DBusTubeChannel
targetContact() const Tp::Channel
targetHandle() const Tp::Channel
targetHandleType() const Tp::Channel
targetId() const Tp::Channel
TubeChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature=TubeChannel::FeatureCore)Tp::TubeChannel [protected]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique)Tp::StatefulDBusProxy [static]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique, QString &error, QString &message)Tp::StatefulDBusProxy [static]
~Channel()Tp::Channel [virtual]
~DBusProxy()Tp::DBusProxy [virtual]
~DBusTubeChannel()Tp::DBusTubeChannel [virtual]
~Object()Tp::Object [virtual]
~OptionalInterfaceFactory()Tp::OptionalInterfaceFactory< Channel > [inline]
~OutgoingDBusTubeChannel()Tp::OutgoingDBusTubeChannel [virtual]
~ReadyObject()Tp::ReadyObject [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]
~StatefulDBusProxy()Tp::StatefulDBusProxy [virtual]
~TubeChannel()Tp::TubeChannel [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00610_source.html0000644000175200001440000004544112000060453023204 0ustar00collabora-develusers00000000000000 message.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
message.h
00001 
00023 #ifndef _TelepathyQt_message_h_HEADER_GUARD_
00024 #define _TelepathyQt_message_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <QSharedDataPointer>
00031 
00032 #include <TelepathyQt/Constants>
00033 #include <TelepathyQt/Contact>
00034 #include <TelepathyQt/Types>
00035 
00036 class QDateTime;
00037 
00038 namespace Tp
00039 {
00040 
00041 class Contact;
00042 class TextChannel;
00043 
00044 class TP_QT_EXPORT Message
00045 {
00046 public:
00047     Message(ChannelTextMessageType, const QString &);
00048     Message(const Message &other);
00049     ~Message();
00050 
00051     Message &operator=(const Message &other);
00052     bool operator==(const Message &other) const;
00053     inline bool operator!=(const Message &other) const
00054     {
00055         return !(*this == other);
00056     }
00057 
00058     // Convenient access to headers
00059 
00060     QDateTime sent() const;
00061 
00062     ChannelTextMessageType messageType() const;
00063 
00064     bool isTruncated() const;
00065 
00066     bool hasNonTextContent() const;
00067 
00068     QString messageToken() const;
00069 
00070     bool isSpecificToDBusInterface() const;
00071     QString dbusInterface() const;
00072 
00073     QString text() const;
00074 
00075     // Direct access to the whole message (header and body)
00076 
00077     MessagePart header() const;
00078 
00079     int size() const;
00080     MessagePart part(uint index) const;
00081     MessagePartList parts() const;
00082 
00083 private:
00084     friend class ContactMessenger;
00085     friend class ReceivedMessage;
00086     friend class TextChannel;
00087 
00088     TP_QT_NO_EXPORT Message();
00089     TP_QT_NO_EXPORT Message(const MessagePartList &parts);
00090     TP_QT_NO_EXPORT Message(uint, uint, const QString &);
00091 
00092     struct Private;
00093     friend struct Private;
00094     QSharedDataPointer<Private> mPriv;
00095 };
00096 
00097 class TP_QT_EXPORT ReceivedMessage : public Message
00098 {
00099 public:
00100     class DeliveryDetails
00101     {
00102     public:
00103         DeliveryDetails();
00104         DeliveryDetails(const DeliveryDetails &other);
00105         ~DeliveryDetails();
00106 
00107         DeliveryDetails &operator=(const DeliveryDetails &other);
00108 
00109         bool isValid() const { return mPriv.constData() != 0; }
00110 
00111         DeliveryStatus status() const;
00112 
00113         bool hasOriginalToken() const;
00114         QString originalToken() const;
00115 
00116         bool isError() const;
00117         ChannelTextSendError error() const;
00118 
00119         bool hasDebugMessage() const;
00120         QString debugMessage() const;
00121 
00122         QString dbusError() const;
00123 
00124         bool hasEchoedMessage() const;
00125         Message echoedMessage() const;
00126 
00127     private:
00128         friend class ReceivedMessage;
00129 
00130         TP_QT_NO_EXPORT DeliveryDetails(const MessagePartList &parts);
00131 
00132         struct Private;
00133         friend struct Private;
00134         QSharedDataPointer<Private> mPriv;
00135     };
00136 
00137     ReceivedMessage(const ReceivedMessage &other);
00138     ReceivedMessage &operator=(const ReceivedMessage &other);
00139     ~ReceivedMessage();
00140 
00141     QDateTime received() const;
00142     ContactPtr sender() const;
00143     QString senderNickname() const;
00144 
00145     QString supersededToken() const;
00146 
00147     bool isScrollback() const;
00148     bool isRescued() const;
00149 
00150     bool isDeliveryReport() const;
00151     DeliveryDetails deliveryDetails() const;
00152 
00153     bool isFromChannel(const TextChannelPtr &channel) const;
00154 
00155 private:
00156     friend class TextChannel;
00157 
00158     TP_QT_NO_EXPORT ReceivedMessage(const MessagePartList &parts,
00159             const TextChannelPtr &channel);
00160     TP_QT_NO_EXPORT ReceivedMessage();
00161 
00162     TP_QT_NO_EXPORT uint senderHandle() const;
00163     TP_QT_NO_EXPORT QString senderId() const;
00164     TP_QT_NO_EXPORT uint pendingId() const;
00165 
00166     TP_QT_NO_EXPORT void setForceNonText();
00167     TP_QT_NO_EXPORT void clearSenderHandle();
00168     TP_QT_NO_EXPORT void setSender(const ContactPtr &sender);
00169 };
00170 
00171 } // Tp
00172 
00173 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01025.html0000644000175200001440000000462212000060453021621 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::SimpleStatusSpec Member List
This is the complete list of members for Tp::SimpleStatusSpec, including all inherited members.
canHaveMessageTp::SimpleStatusSpec
maySetOnSelfTp::SimpleStatusSpec
typeTp::SimpleStatusSpec


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00790.html0000644000175200001440000001522712000060453021634 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::BaseProtocolAvatarsInterface Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00935.html0000644000175200001440000001142012000060453021624 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingSuccess Member List
This is the complete list of members for Tp::PendingSuccess, including all inherited members.
errorMessage() const Tp::PendingOperation
errorName() const Tp::PendingOperation
finished(Tp::PendingOperation *operation)Tp::PendingOperation [signal]
isError() const Tp::PendingOperation
isFinished() const Tp::PendingOperation
isValid() const Tp::PendingOperation
object() const Tp::PendingOperation [protected]
PendingOperation(const SharedPtr< RefCounted > &object)Tp::PendingOperation [protected]
PendingSuccess(const SharedPtr< RefCounted > &object)Tp::PendingSuccess [inline]
setFinished()Tp::PendingOperation [protected, slot]
setFinishedWithError(const QString &name, const QString &message)Tp::PendingOperation [protected, slot]
setFinishedWithError(const QDBusError &error)Tp::PendingOperation [protected, slot]
~PendingOperation()Tp::PendingOperation [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00126.html0000644000175200001440000021613612000060453021627 0ustar00collabora-develusers00000000000000 Tp::Client::ChannelInterfaceGroupInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

#include <TelepathyQt/Channel>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Channel.Interface.Group".


Constructor & Destructor Documentation

Tp::Client::ChannelInterfaceGroupInterface::ChannelInterfaceGroupInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfaceGroupInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ChannelInterfaceGroupInterface::ChannelInterfaceGroupInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfaceGroupInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ChannelInterfaceGroupInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ChannelInterfaceGroupInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ChannelInterfaceGroupInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

static QLatin1String Tp::Client::ChannelInterfaceGroupInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Channel.Interface.Group", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property GroupFlags of type uint.

An integer representing the bitwise-OR of flags on this channel. The user interface can use this to present information about which operations are currently valid. Change notification is via the GroupFlagsChanged signal.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property HandleOwners of type Tp::HandleOwnerMap.

A map from channel-specific handles to their owners, including at least all of the channel-specific handles in this channel's members, local-pending or remote-pending sets as keys. Any handle not in the keys of this mapping is not channel-specific in this channel. Handles which are channel-specific, but for which the owner is unknown, MUST appear in this mapping with 0 as owner. Change notification is via the HandleOwnersChanged signal.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property LocalPendingMembers of type Tp::LocalPendingInfoList.

An array of structs containing handles representing contacts requesting channel membership and awaiting local approval with AddMembers.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Members of type Tp::UIntList.

The members of this channel.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property RemotePendingMembers of type Tp::UIntList.

An array of handles representing contacts who have been invited to the channel and are awaiting remote approval.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property SelfHandle of type uint.

The handle for the user on this channel (which can also be a local or remote pending member), or 0 if the user is not a member at all (which is likely to be the case, for instance, on ContactList channels). Note that this is different from the result of Connection.GetSelfHandle on some protocols, so the value of this handle should always be used with the methods of this interface.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property MemberIdentifiers of type Tp::HandleIdentifierMap.

The string identifiers for handles mentioned in this channel, to give clients the minimal information necessary to create contacts without waiting for round-trips. Connection managers MUST include at least the identifiers for SelfHandle, Members, LocalPendingMembers (and their actors if any), RemotePendingMembers and HandleOwners.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::ChannelInterfaceGroupInterface::AddMembers ( const Tp::UIntList contacts,
const QString &  message,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method AddMembers on the remote object.

Invite all the given contacts into the channel, or accept requests for channel membership for contacts on the pending local list.

A message may be provided along with the request, which will be sent to the server if supported. See the CHANNEL_GROUP_FLAG_MESSAGE_ADD and CHANNEL_GROUP_FLAG_MESSAGE_ACCEPT GroupFlags to see in which cases this message should be provided.

Attempting to add contacts who are already members is allowed; connection managers must silently accept this, without error.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
contactsAn array of contact handles to invite to the channel
messageA string message, which can be blank if desired
timeoutThe timeout in milliseconds.
QDBusPendingReply<Tp::UIntList, Tp::UIntList, Tp::UIntList> Tp::Client::ChannelInterfaceGroupInterface::GetAllMembers ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method GetAllMembers on the remote object.

Returns arrays of all current, local and remote pending channel members.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
Returns:

array of handles of current members

Returns:

array of handles of local pending members

Returns:

array of handles of remote pending members

QDBusPendingReply<uint> Tp::Client::ChannelInterfaceGroupInterface::GetGroupFlags ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method GetGroupFlags on the remote object.

Returns the value of the GroupFlags property.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
Returns:

The value of the GroupFlags property

QDBusPendingReply<Tp::UIntList> Tp::Client::ChannelInterfaceGroupInterface::GetHandleOwners ( const Tp::UIntList handles,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method GetHandleOwners on the remote object.

If the CHANNEL_GROUP_FLAG_CHANNEL_SPECIFIC_HANDLES flag is set on the channel, then the handles of the group members are specific to this channel, and are not meaningful in a connection-wide context such as contact lists. This method allows you to find the owner of the handle if it can be discovered in this channel, or 0 if the owner is not available.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
handlesA list of integer handles representing members of the channel
timeoutThe timeout in milliseconds.
Returns:

An array of integer handles representing the owner handles of the given room members, in the same order, or 0 if the owner is not available

QDBusPendingReply<Tp::UIntList> Tp::Client::ChannelInterfaceGroupInterface::GetLocalPendingMembers ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method GetLocalPendingMembers on the remote object.

Returns the To_Be_Added handle (only) for each structure in the LocalPendingMembers property.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.

Begins a call to the D-Bus method GetLocalPendingMembersWithInfo on the remote object.

Returns the LocalPendingMembers property.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
Returns:

An array of structs containing: A handle representing the contact requesting channel membership A handle representing the contact making the request, or 0 if unknown The reason for the request: one of the values of Channel_Group_Change_Reason A string message containing the reason for the request if any (or blank if none)

QDBusPendingReply<Tp::UIntList> Tp::Client::ChannelInterfaceGroupInterface::GetMembers ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method GetMembers on the remote object.

Returns the Members property.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply<Tp::UIntList> Tp::Client::ChannelInterfaceGroupInterface::GetRemotePendingMembers ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method GetRemotePendingMembers on the remote object.

Returns an array of handles representing contacts who have been invited to the channel and are awaiting remote approval.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply<uint> Tp::Client::ChannelInterfaceGroupInterface::GetSelfHandle ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method GetSelfHandle on the remote object.

Returns the value of the SelfHandle property.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ChannelInterfaceGroupInterface::RemoveMembers ( const Tp::UIntList contacts,
const QString &  message,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method RemoveMembers on the remote object.

Requests the removal of contacts from a channel, reject their request for channel membership on the pending local list, or rescind their invitation on the pending remote list.

If the SelfHandle is in a Group, it can be removed via this method, in order to leave the group gracefully. This is the recommended way to leave a chatroom, close or reject a ChannelTypeStreamedMediaInterface call, and so on.

Accordingly, connection managers SHOULD support doing this, regardless of the value of GroupFlags . If doing so fails with PermissionDenied, this is considered to a bug in the connection manager, but clients MUST recover by falling back to closing the channel with the ChannelInterface::Close() method.

Removing any contact from the local pending list is always allowed. Removing contacts other than the SelfHandle from the channel's members is allowed if and only if Channel_Group_Flag_Can_Remove is in the GroupFlags , while removing contacts other than the SelfHandle from the remote pending list is allowed if and only if Channel_Group_Flag_Can_Rescind is in the GroupFlags .

A message may be provided along with the request, which will be sent to the server if supported. See the Channel_Group_Flag_Message_Remove, Channel_Group_Flag_Message_Depart, Channel_Group_Flag_Message_Reject and Channel_Group_Flag_Message_Rescind GroupFlags to see in which cases this message should be provided.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
contactsAn array of contact handles to remove from the channel
messageA string message, which can be blank if desired
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ChannelInterfaceGroupInterface::RemoveMembersWithReason ( const Tp::UIntList contacts,
const QString &  message,
uint  reason,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method RemoveMembersWithReason on the remote object.

As RemoveMembers, but a reason code may be provided where appropriate. The reason code may be ignored if the underlying protocol is unable to represent the given reason.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
contactsAn array of contact handles to remove from the channel
messageA string message, which can be blank if desired
reasonA reason for the change
timeoutThe timeout in milliseconds.

Represents the signal HandleOwnersChanged on the remote object.

Emitted whenever the HandleOwners property changes.

Parameters:
addedA map from channel-specific handles to their owners, in which the keys include all the handles that were added to the keys of the HandleOwners property, and all the handles in that property whose owner has changed
removedThe channel-specific handles that were removed from the keys of the HandleOwners property, as a result of the contact leaving this group in a previous MembersChanged signal
void Tp::Client::ChannelInterfaceGroupInterface::HandleOwnersChangedDetailed ( const Tp::HandleOwnerMap added,
const Tp::UIntList removed,
const Tp::HandleIdentifierMap identifiers 
) [signal]

Represents the signal HandleOwnersChangedDetailed on the remote object.

Emitted whenever the HandleOwners property changes. Clients can assume this signal is emitted by the Connection Manager if the MemberIdentifiers property exists

Parameters:
addedA map from channel-specific handles to their owners, in which the keys include all the handles that were added to the keys of the HandleOwners property, and all the handles in that property whose owner has changed
removedThe channel-specific handles that were removed from the keys of the HandleOwners property, as a result of the contact leaving this group in a previous MembersChanged signal
identifiersThe string identifiers for handles mentioned in this signal, to give clients the minimal information necessary to create contacts without waiting for round-trips. Connection managers MUST include at least the identifiers for all handles in the Added map, and MAY include those from Removed array.

Represents the signal SelfHandleChanged on the remote object.

Emitted whenever the SelfHandle property changes.

Parameters:
selfHandleThe new value of the SelfHandle property.
void Tp::Client::ChannelInterfaceGroupInterface::SelfContactChanged ( uint  selfHandle,
const QString &  selfID 
) [signal]

Represents the signal SelfContactChanged on the remote object.

Emitted whenever the SelfHandle property changes. Clients can assume this signal is emitted by the Connection Manager if the MemberIdentifiers property exists.

Parameters:
selfHandleThe new value of the SelfHandle property.
selfIDThe new value of the SelfHandle property's identifier.
void Tp::Client::ChannelInterfaceGroupInterface::GroupFlagsChanged ( uint  added,
uint  removed 
) [signal]

Represents the signal GroupFlagsChanged on the remote object.

Emitted when the flags as returned by GetGroupFlags are changed. The user interface should be updated as appropriate.

Parameters:
addedA bitwise OR of the flags which have been set
removedA bitwise OR of the flags which have been cleared
void Tp::Client::ChannelInterfaceGroupInterface::MembersChanged ( const QString &  message,
const Tp::UIntList added,
const Tp::UIntList removed,
const Tp::UIntList localPending,
const Tp::UIntList remotePending,
uint  actor,
uint  reason 
) [signal]

Represents the signal MembersChanged on the remote object.

Emitted when contacts join any of the three lists (members, local pending or remote pending) or when they leave any of the three lists. There may also be a message from the server regarding this change, which may be displayed to the user if desired.

All channel-specific handles that are mentioned in this signal MUST be represented in the value of the HandleOwners property. In practice, this will mean that HandleOwnersChanged() is emitted before emitting a MembersChanged signal in which channel-specific handles are added, but that it is emitted after emitting a MembersChanged signal in which channel-specific handles are removed.

See ChannelTypeStreamedMediaInterface for an overview of how group state changes are used to indicate the progress of a call.

Parameters:
messageA string message from the server, or blank if not
addedA list of members added to the channel
removedA list of members removed from the channel
localPendingA list of members who are pending local approval
remotePendingA list of members who are pending remote approval
actorThe contact handle of the person who made the change, or 0 if not known
reasonA reason for the change
void Tp::Client::ChannelInterfaceGroupInterface::MembersChangedDetailed ( const Tp::UIntList added,
const Tp::UIntList removed,
const Tp::UIntList localPending,
const Tp::UIntList remotePending,
const QVariantMap &  details 
) [signal]

Represents the signal MembersChangedDetailed on the remote object.

Emitted when contacts join any of the three lists (members, local pending or remote pending) or when they leave any of the three lists. This signal provides a superset of the information provided by MembersChanged() ; if the channel's GroupFlags contains Members_Changed_Detailed, then clients may listen exclusively to this signal in preference to that signal.

All channel-specific handles that are mentioned in this signal MUST be represented in the value of the HandleOwners property. In practice, this will mean that HandleOwnersChanged() is emitted before emitting a MembersChangedDetailed signal in which channel-specific handles are added, but that it is emitted after emitting a MembersChangedDetailed signal in which channel-specific handles are removed.

See ChannelTypeStreamedMediaInterface for an overview of how group state changes are used to indicate the progress of a call.

Parameters:
addedA list of members added to the channel
removedA list of members removed from the channel
localPendingA list of members who are pending local approval
remotePendingA list of members who are pending remote approval
details

Information about the change, which may include the following well-known keys:

actor (u — Contact_Handle)
The contact handle of the person who made the change; 0 or omitted if unknown or not applicable.
change-reason (u — Channel_Group_Change_Reason)
A reason for the change.
contact-ids (a{us} — Handle_Identifier_Map)

The string identifiers for handles mentioned in this signal, to give clients the minimal information necessary to react to the event without waiting for round-trips. Connection managers SHOULD include the identifiers for members added to the group and for the actor (if any); they MAY omit the identifiers for handles which have been removed from the group.

On IRC, an event such as a netsplit could cause the vast majority of a channel to leave. Given that clients should already know the identifiers of a channel's members, including potentially hundreds of strings in the netsplit signal is unnecessary.

Clients MUST NOT assume that the presence or absence of a handle in this mapping is meaningful. This mapping is merely an optimization for round-trip reduction, and connection managers MAY add additional handles, omit some handles, or omit the mapping completely.

message (s)
A string message from the server regarding the change
error (s — DBus_Error_Name)
A (possibly implementation-specific) DBus error describing the change, providing more specific information than the Channel_Group_Change_Reason enum allows. This MUST only be present if it is strictly more informative than 'change-reason'; if present, 'change-reason' MUST be set to the closest available reason.
A SIP connection manager might want to signal "402 Payment required" as something more specific than Error or Permission_Denied so that a SIP-aware UI could handle it specially; including a namespaced error permits this to be done without Channel_Group_Change_Reason being extended to encompass every error any CM ever wants to report.
debug-message (s)
Debugging information on the change. SHOULD NOT be shown to users in normal circumstances.
void Tp::Client::ChannelInterfaceGroupInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00811.html0000644000175200001440000001237612000060453021630 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::FunctorCaller6< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 > Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01118.html0000644000175200001440000002312612000060453021624 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ProtocolInterface Member List
This is the complete list of members for Tp::Client::ProtocolInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
IdentifyAccount(const QVariantMap &parameters, int timeout=-1)Tp::Client::ProtocolInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ProtocolInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
NormalizeContact(const QString &contactID, int timeout=-1)Tp::Client::ProtocolInterface [inline, slot]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
ProtocolInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ProtocolInterface
ProtocolInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ProtocolInterface
ProtocolInterface(Tp::DBusProxy *proxy)Tp::Client::ProtocolInterface
ProtocolInterface(const Tp::Client::ConnectionManagerInterface &mainInterface)Tp::Client::ProtocolInterface [explicit]
ProtocolInterface(const Tp::Client::ConnectionManagerInterface &mainInterface, QObject *parent)Tp::Client::ProtocolInterface
requestAllProperties() const Tp::Client::ProtocolInterface [inline]
requestPropertyAuthenticationTypes() const Tp::Client::ProtocolInterface [inline]
requestPropertyConnectionInterfaces() const Tp::Client::ProtocolInterface [inline]
requestPropertyEnglishName() const Tp::Client::ProtocolInterface [inline]
requestPropertyIcon() const Tp::Client::ProtocolInterface [inline]
requestPropertyInterfaces() const Tp::Client::ProtocolInterface [inline]
requestPropertyParameters() const Tp::Client::ProtocolInterface [inline]
requestPropertyRequestableChannelClasses() const Tp::Client::ProtocolInterface [inline]
requestPropertyVCardField() const Tp::Client::ProtocolInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ProtocolInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/namespacemembers_func.html0000644000175200001440000000301112000060453025322 0ustar00collabora-develusers00000000000000 Namespace Members
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- v -

  • variantTypeFromDBusSignature() : Tp


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00132.html0000644000175200001440000004523212000060453021621 0ustar00collabora-develusers00000000000000 Tp::Client::ChannelInterfaceSecurableInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelInterfaceSecurableInterface Class Reference

#include <TelepathyQt/Channel>

Inherits Tp::AbstractInterface.

List of all members.

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Channel.Interface.Securable".


Constructor & Destructor Documentation

Tp::Client::ChannelInterfaceSecurableInterface::ChannelInterfaceSecurableInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfaceSecurableInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ChannelInterfaceSecurableInterface::ChannelInterfaceSecurableInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfaceSecurableInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ChannelInterfaceSecurableInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ChannelInterfaceSecurableInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ChannelInterfaceSecurableInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Channel.Interface.Securable", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property Encrypted of type bool.

True if this channel occurs over an encrypted connection. This does not imply that steps have been taken to avoid man-in-the-middle attacks.

For future support for RFC 5056 Channel Binding it is desirable to be able to use some SASL mechanisms over an encrypted connection to an unverified peer, which can prove that it is the desired destination during the SASL negotiation.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Verified of type bool.

True if this channel occurs over a connection that is protected against tampering, and has been verified to be with the desired destination: for instance, one where TLS was previously negotiated, and the TLS certificate has been verified against a configured certificate authority or accepted by the user.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
void Tp::Client::ChannelInterfaceSecurableInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00751.html0000644000175200001440000005103412000060453021625 0ustar00collabora-develusers00000000000000 Utililty classes
   Home · All Classes · All Namespaces · Modules · Functions · Files
Utililty classes

Classes


Detailed Description

Utility classes.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01140.html0000644000175200001440000002366012000060453021622 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfacePresenceInterface Member List
This is the complete list of members for Tp::Client::ConnectionInterfacePresenceInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
AddStatus(const QString &status, const QVariantMap &parameters, int timeout=-1)Tp::Client::ConnectionInterfacePresenceInterface [inline, slot]
ClearStatus(int timeout=-1)Tp::Client::ConnectionInterfacePresenceInterface [inline, slot]
ConnectionInterfacePresenceInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfacePresenceInterface
ConnectionInterfacePresenceInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfacePresenceInterface
ConnectionInterfacePresenceInterface(Tp::DBusProxy *proxy)Tp::Client::ConnectionInterfacePresenceInterface
ConnectionInterfacePresenceInterface(const Tp::Client::ConnectionInterface &mainInterface)Tp::Client::ConnectionInterfacePresenceInterface [explicit]
ConnectionInterfacePresenceInterface(const Tp::Client::ConnectionInterface &mainInterface, QObject *parent)Tp::Client::ConnectionInterfacePresenceInterface
GetPresence(const Tp::UIntList &contacts, int timeout=-1)Tp::Client::ConnectionInterfacePresenceInterface [inline, slot]
GetStatuses(int timeout=-1)Tp::Client::ConnectionInterfacePresenceInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ConnectionInterfacePresenceInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
PresenceUpdate(const Tp::ContactPresences &presence)Tp::Client::ConnectionInterfacePresenceInterface [signal]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
RemoveStatus(const QString &status, int timeout=-1)Tp::Client::ConnectionInterfacePresenceInterface [inline, slot]
requestAllProperties() const Tp::Client::ConnectionInterfacePresenceInterface [inline]
RequestPresence(const Tp::UIntList &contacts, int timeout=-1)Tp::Client::ConnectionInterfacePresenceInterface [inline, slot]
SetLastActivityTime(uint time, int timeout=-1)Tp::Client::ConnectionInterfacePresenceInterface [inline, slot]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
SetStatus(const Tp::MultipleStatusMap &statuses, int timeout=-1)Tp::Client::ConnectionInterfacePresenceInterface [inline, slot]
staticInterfaceName()Tp::Client::ConnectionInterfacePresenceInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00584_source.html0000644000175200001440000001216112000060453023207 0ustar00collabora-develusers00000000000000 global.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
global.h
00001 
00023 #ifndef _TelepathyQt_Farsight_global_h_HEADER_GUARD_
00024 #define _TelepathyQt_Farsight_global_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <QtGlobal>
00031 
00032 #ifdef BUILDING_TP_QT_FARSIGHT
00033 #  define TP_QT_FS_EXPORT Q_DECL_EXPORT
00034 #else
00035 #  define TP_QT_FS_EXPORT Q_DECL_IMPORT
00036 #endif
00037 
00038 #if !defined(Q_OS_WIN) && defined(QT_VISIBILITY_AVAILABLE)
00039 #  define TP_QT_FS_NO_EXPORT __attribute__((visibility("hidden")))
00040 #endif
00041 
00042 #ifndef TP_QT_FS_NO_EXPORT
00043 #  define TP_QT_FS_NO_EXPORT
00044 #endif
00045 
00046 #ifndef TP_QT_FS_DEPRECATED
00047 #  ifdef TP_QT_DEPRECATED_WARNINGS
00048 #    ifdef BUILDING_TP_QT_FARSIGHT
00049 #      define TP_QT_FS_DEPRECATED
00050 #    else
00051 #      define TP_QT_FS_DEPRECATED Q_DECL_DEPRECATED
00052 #    endif
00053 #  else
00054 #    define TP_QT_FS_DEPRECATED
00055 #  endif
00056 #endif
00057 
00058 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00306.html0000644000175200001440000000727012000060453021624 0ustar00collabora-develusers00000000000000 Tp::PendingCallContent Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingCallContent Class Reference

#include </home/collabora-devel/kde/src/telepathy-qt4/TelepathyQt/call-content.h>

Inherits Tp::PendingOperation.

List of all members.

Public Member Functions


Constructor & Destructor Documentation


Member Function Documentation

CallContentPtr Tp::PendingCallContent::content ( ) const


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01039.html0000644000175200001440000000430312000060453021622 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::VideoResolution Member List
This is the complete list of members for Tp::VideoResolution, including all inherited members.
heightTp::VideoResolution
widthTp::VideoResolution


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00493_source.html0000644000175200001440000005107712000060453023217 0ustar00collabora-develusers00000000000000 cli-call-stream-endpoint.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-call-stream-endpoint.h
00001 /*
00002  * This file contains D-Bus client proxy classes generated by qt-client-gen.py.
00003  *
00004  * This file can be distributed under the same terms as the specification from
00005  * which it was generated.
00006  */
00007 
00008 #ifndef IN_TP_QT_HEADER
00009 #error IN_TP_QT_HEADER
00010 #endif
00011 
00012 #include <TelepathyQt/Types>
00013 
00014 #include <QtGlobal>
00015 
00016 #include <QString>
00017 #include <QObject>
00018 #include <QVariant>
00019 
00020 #include <QDBusPendingReply>
00021 
00022 #include <TelepathyQt/AbstractInterface>
00023 #include <TelepathyQt/DBusProxy>
00024 #include <TelepathyQt/Global>
00025 
00026 namespace Tp
00027 {
00028 class PendingVariant;
00029 class PendingOperation;
00030 }
00031 
00032 namespace Tp
00033 {
00034 namespace Client
00035 {
00036 
00044 class TP_QT_EXPORT CallStreamEndpointInterface : public Tp::AbstractInterface
00045 {
00046     Q_OBJECT
00047 
00048 public:
00055     static inline QLatin1String staticInterfaceName()
00056     {
00057         return QLatin1String("org.freedesktop.Telepathy.Call1.Stream.Endpoint");
00058     }
00059 
00067     CallStreamEndpointInterface(
00068         const QString& busName,
00069         const QString& objectPath,
00070         QObject* parent = 0
00071     );
00072 
00081     CallStreamEndpointInterface(
00082         const QDBusConnection& connection,
00083         const QString& busName,
00084         const QString& objectPath,
00085         QObject* parent = 0
00086     );
00087 
00094     CallStreamEndpointInterface(Tp::DBusProxy *proxy);
00095 
00108     inline Tp::PendingVariant *requestPropertyRemoteCredentials() const
00109     {
00110         return internalRequestProperty(QLatin1String("RemoteCredentials"));
00111     }
00112 
00122     inline Tp::PendingVariant *requestPropertyRemoteCandidates() const
00123     {
00124         return internalRequestProperty(QLatin1String("RemoteCandidates"));
00125     }
00126 
00157     inline Tp::PendingVariant *requestPropertySelectedCandidatePairs() const
00158     {
00159         return internalRequestProperty(QLatin1String("SelectedCandidatePairs"));
00160     }
00161 
00172     inline Tp::PendingVariant *requestPropertyEndpointState() const
00173     {
00174         return internalRequestProperty(QLatin1String("EndpointState"));
00175     }
00176 
00188     inline Tp::PendingVariant *requestPropertyTransport() const
00189     {
00190         return internalRequestProperty(QLatin1String("Transport"));
00191     }
00192 
00213     inline Tp::PendingVariant *requestPropertyControlling() const
00214     {
00215         return internalRequestProperty(QLatin1String("Controlling"));
00216     }
00217 
00228     inline Tp::PendingVariant *requestPropertyIsICELite() const
00229     {
00230         return internalRequestProperty(QLatin1String("IsICELite"));
00231     }
00232 
00239     Tp::PendingVariantMap *requestAllProperties() const
00240     {
00241         return internalRequestAllProperties();
00242     }
00243 
00244 public Q_SLOTS:
00278     inline QDBusPendingReply<> SetSelectedCandidatePair(const Tp::Candidate& localCandidate, const Tp::Candidate& remoteCandidate, int timeout = -1)
00279     {
00280         if (!invalidationReason().isEmpty()) {
00281             return QDBusPendingReply<>(QDBusMessage::createError(
00282                 invalidationReason(),
00283                 invalidationMessage()
00284             ));
00285         }
00286 
00287         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00288                 this->staticInterfaceName(), QLatin1String("SetSelectedCandidatePair"));
00289         callMessage << QVariant::fromValue(localCandidate) << QVariant::fromValue(remoteCandidate);
00290         return this->connection().asyncCall(callMessage, timeout);
00291     }
00292 
00311     inline QDBusPendingReply<> SetEndpointState(uint component, uint state, int timeout = -1)
00312     {
00313         if (!invalidationReason().isEmpty()) {
00314             return QDBusPendingReply<>(QDBusMessage::createError(
00315                 invalidationReason(),
00316                 invalidationMessage()
00317             ));
00318         }
00319 
00320         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00321                 this->staticInterfaceName(), QLatin1String("SetEndpointState"));
00322         callMessage << QVariant::fromValue(component) << QVariant::fromValue(state);
00323         return this->connection().asyncCall(callMessage, timeout);
00324     }
00325 
00345     inline QDBusPendingReply<> AcceptSelectedCandidatePair(const Tp::Candidate& localCandidate, const Tp::Candidate& remoteCandidate, int timeout = -1)
00346     {
00347         if (!invalidationReason().isEmpty()) {
00348             return QDBusPendingReply<>(QDBusMessage::createError(
00349                 invalidationReason(),
00350                 invalidationMessage()
00351             ));
00352         }
00353 
00354         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00355                 this->staticInterfaceName(), QLatin1String("AcceptSelectedCandidatePair"));
00356         callMessage << QVariant::fromValue(localCandidate) << QVariant::fromValue(remoteCandidate);
00357         return this->connection().asyncCall(callMessage, timeout);
00358     }
00359 
00379     inline QDBusPendingReply<> RejectSelectedCandidatePair(const Tp::Candidate& localCandidate, const Tp::Candidate& remoteCandidate, int timeout = -1)
00380     {
00381         if (!invalidationReason().isEmpty()) {
00382             return QDBusPendingReply<>(QDBusMessage::createError(
00383                 invalidationReason(),
00384                 invalidationMessage()
00385             ));
00386         }
00387 
00388         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00389                 this->staticInterfaceName(), QLatin1String("RejectSelectedCandidatePair"));
00390         callMessage << QVariant::fromValue(localCandidate) << QVariant::fromValue(remoteCandidate);
00391         return this->connection().asyncCall(callMessage, timeout);
00392     }
00393 
00411     inline QDBusPendingReply<> SetControlling(bool controlling, int timeout = -1)
00412     {
00413         if (!invalidationReason().isEmpty()) {
00414             return QDBusPendingReply<>(QDBusMessage::createError(
00415                 invalidationReason(),
00416                 invalidationMessage()
00417             ));
00418         }
00419 
00420         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00421                 this->staticInterfaceName(), QLatin1String("SetControlling"));
00422         callMessage << QVariant::fromValue(controlling);
00423         return this->connection().asyncCall(callMessage, timeout);
00424     }
00425 
00426 Q_SIGNALS:
00442     void RemoteCredentialsSet(const QString& username, const QString& password);
00443 
00454     void RemoteCandidatesAdded(const Tp::CandidateList& candidates);
00455 
00473     void CandidatePairSelected(const Tp::Candidate& localCandidate, const Tp::Candidate& remoteCandidate);
00474 
00488     void EndpointStateChanged(uint component, uint state);
00489 
00499     void ControllingChanged(bool controlling);
00500 
00501 protected:
00502     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
00503 };
00504 }
00505 }
00506 Q_DECLARE_METATYPE(Tp::Client::CallStreamEndpointInterface*)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01064.html0000644000175200001440000002001412000060453021615 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::AccountInterfaceAvatarInterface Member List
This is the complete list of members for Tp::Client::AccountInterfaceAvatarInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
AccountInterfaceAvatarInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::AccountInterfaceAvatarInterface
AccountInterfaceAvatarInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::AccountInterfaceAvatarInterface
AccountInterfaceAvatarInterface(Tp::DBusProxy *proxy)Tp::Client::AccountInterfaceAvatarInterface
AccountInterfaceAvatarInterface(const Tp::Client::AccountInterface &mainInterface)Tp::Client::AccountInterfaceAvatarInterface [explicit]
AccountInterfaceAvatarInterface(const Tp::Client::AccountInterface &mainInterface, QObject *parent)Tp::Client::AccountInterfaceAvatarInterface
AvatarChanged()Tp::Client::AccountInterfaceAvatarInterface [signal]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::AccountInterfaceAvatarInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::AccountInterfaceAvatarInterface [inline]
requestPropertyAvatar() const Tp::Client::AccountInterfaceAvatarInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
setPropertyAvatar(Tp::Avatar newValue)Tp::Client::AccountInterfaceAvatarInterface [inline]
staticInterfaceName()Tp::Client::AccountInterfaceAvatarInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00298.html0000644000175200001440000003407712000060453021643 0ustar00collabora-develusers00000000000000 Tp::OutgoingDBusTubeChannel Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The OutgoingDBusTubeChannel class represents an outgoing Telepathy channel of type DBusTube. More...

#include <TelepathyQt/OutgoingDBusTubeChannel>

Inherits Tp::DBusTubeChannel.

List of all members.

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

The OutgoingDBusTubeChannel class represents an outgoing Telepathy channel of type DBusTube.

Outgoing (locally initiated/requested) tubes are initially in the TubeChannelStateNotOffered state. When offerTube is called, the connection manager takes care of instantiating a new DBus server, at which point the tube state becomes TubeChannelStateRemotePending.

If the target accepts the connection request, the state goes TubeChannelStateOpen and both sides can start using the new private bus, the address of which can be retrieved from the completed PendingDBusTubeConnection or from this class.

Note:
If you plan to use QtDBus for the DBus connection, please note you should always use QDBusConnection::connectToPeer(), regardless of the fact this tube is a p2p or a group one. The above function has been introduced in Qt 4.8, previous versions of Qt do not allow the use of DBus Tubes through QtDBus.

For more details, please refer to Telepathy specification.

See Asynchronous Object Model, Shared Pointer Usage


Constructor & Destructor Documentation

Tp::OutgoingDBusTubeChannel::OutgoingDBusTubeChannel ( const ConnectionPtr &  connection,
const QString &  objectPath,
const QVariantMap &  immutableProperties 
) [protected]

Construct a new OutgoingDBusTubeChannel object.

Parameters:
connectionConnection owning this channel, and specifying the service.
objectPathThe object path of this channel.
immutablePropertiesThe immutable properties of this channel.

Member Function Documentation

OutgoingDBusTubeChannelPtr Tp::OutgoingDBusTubeChannel::create ( const ConnectionPtr &  connection,
const QString &  objectPath,
const QVariantMap &  immutableProperties 
) [static]

Create a new OutgoingDBusTubeChannel channel.

Parameters:
connectionConnection owning this channel, and specifying the service.
objectPathThe object path of this channel.
immutablePropertiesThe immutable properties of this channel.
Returns:
A OutgoingDBusTubeChannelPtr object pointing to the newly created OutgoingDBusTubeChannel object.

Reimplemented from Tp::DBusTubeChannel.

PendingDBusTubeConnection * Tp::OutgoingDBusTubeChannel::offerTube ( const QVariantMap &  parameters,
bool  allowOtherUsers = false 
)

Offer the tube

This method sets up a private DBus connection to the channel target(s), and offers it through the tube.

The PendingDBusTubeConnection returned by this method will be completed as soon as the tube is opened and ready to be used.

This method requires DBusTubeChannel::FeatureCore to be enabled.

Parameters:
parametersA dictionary of arbitrary Parameters to send with the tube offer. The other end will receive this QVariantMap in the parameters() method of the corresponding IncomingDBusTubeChannel.
allowOtherUsersWhether the server should allow other users to connect to this tube more than just the current one. If your application has no specific needs, it is advisable not to modify the default value of this argument.
Note:
If allowOtherUsers == false, but one of the ends does not support current user restriction, the tube will be offered regardless, falling back to allowing any connection. If your application requires strictly this condition to be enforced, you should check DBusTubeChannel::supportsRestrictingToCurrentUser before offering the tube, and take action from there. The tube is guaranteed either to be offered with the desired restriction or to fail the accept phase if supportsRestrictingToCurrentUser is true and allowOtherUsers is false.
Returns:
A PendingDBusTubeConnection which will finish as soon as the tube is ready to be used (hence in the Open state)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00689_source.html0000644000175200001440000001122612000060453023216 0ustar00collabora-develusers00000000000000 service-types.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
service-types.h
00001 
00023 #ifndef _TelepathyQt_service_types_h_HEADER_GUARD_
00024 #define _TelepathyQt_service_types_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Types>
00031 
00032 namespace Tp
00033 {
00034 
00035 class AbstractProtocolInterface;
00036 class BaseConnection;
00037 class BaseConnectionManager;
00038 class BaseProtocol;
00039 class BaseProtocolAddressingInterface;
00040 class BaseProtocolAvatarsInterface;
00041 class BaseProtocolPresenceInterface;
00042 class DBusService;
00043 
00044 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00045 
00046 typedef SharedPtr<AbstractProtocolInterface> AbstractProtocolInterfacePtr;
00047 typedef SharedPtr<BaseConnection> BaseConnectionPtr;
00048 typedef SharedPtr<BaseConnectionManager> BaseConnectionManagerPtr;
00049 typedef SharedPtr<BaseProtocol> BaseProtocolPtr;
00050 typedef SharedPtr<BaseProtocolAddressingInterface> BaseProtocolAddressingInterfacePtr;
00051 typedef SharedPtr<BaseProtocolAvatarsInterface> BaseProtocolAvatarsInterfacePtr;
00052 typedef SharedPtr<BaseProtocolPresenceInterface> BaseProtocolPresenceInterfacePtr;
00053 typedef SharedPtr<DBusService> DBusServicePtr;
00054 
00055 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
00056 
00057 } // Tp
00058 
00059 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01020.html0000644000175200001440000000440012000060453021606 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::RequestableChannelClass Member List
This is the complete list of members for Tp::RequestableChannelClass, including all inherited members.
allowedPropertiesTp::RequestableChannelClass
fixedPropertiesTp::RequestableChannelClass


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00714_source.html0000644000175200001440000000466012000060453023207 0ustar00collabora-develusers00000000000000 tls-certificate.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
tls-certificate.h
00001 
00022 #ifndef _TelepathyQt_tls_certificate_h_HEADER_GUARD_
00023 #define _TelepathyQt_tls_certificate_h_HEADER_GUARD_
00024 
00025 #ifndef IN_TP_QT_HEADER
00026 #error IN_TP_QT_HEADER
00027 #endif
00028 
00029 #include <TelepathyQt/_gen/cli-tls-certificate.h>
00030 
00031 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00740.html0000644000175200001440000000366512000060453021632 0ustar00collabora-develusers00000000000000 ChannelDispatcher proxies
   Home · All Classes · All Namespaces · Modules · Functions · Files
ChannelDispatcher proxies

Classes


Detailed Description

Proxy objects representing remote Telepathy ChannelDispatcher objects and their optional interfaces.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_0x75.html0000644000175200001440000002137112000060453023604 0ustar00collabora-develusers00000000000000 Class Members
   Home · All Classes · All Namespaces · Modules · Functions · Files
Here is a list of all class members with links to the classes they belong to:

- u -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00465_source.html0000644000175200001440000001423412000060453023210 0ustar00collabora-develusers00000000000000 captcha.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
captcha.h
00001 
00023 #ifndef _TelepathyQt_captcha_h_HEADER_GUARD_
00024 #define _TelepathyQt_captcha_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/CaptchaAuthentication>
00031 
00032 namespace Tp
00033 {
00034 
00035 class PendingCaptchas;
00036 
00037 class TP_QT_EXPORT Captcha {
00038 public:
00039     Captcha();
00040     Captcha(const Captcha &other);
00041     ~Captcha();
00042 
00043     bool isValid() const { return mPriv.constData() != 0; }
00044 
00045     Captcha &operator=(const Captcha &rhs);
00046 
00047     QString mimeType() const;
00048     QString label() const;
00049     QByteArray data() const;
00050     CaptchaAuthentication::ChallengeType type() const;
00051     uint id() const;
00052 
00053 private:
00054     struct Private;
00055     friend struct Private;
00056     friend class PendingCaptchas;
00057 
00058     Captcha(const QString &mimeType, const QString &label, const QByteArray &data,
00059             CaptchaAuthentication::ChallengeType type, uint id);
00060 
00061     QSharedDataPointer<Captcha::Private> mPriv;
00062 };
00063 
00064 }
00065 
00066 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00900.html0000644000175200001440000001216512000060453021623 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingContactInfo Member List
This is the complete list of members for Tp::PendingContactInfo, including all inherited members.
contact() const Tp::PendingContactInfo
errorMessage() const Tp::PendingOperation
errorName() const Tp::PendingOperation
finished(Tp::PendingOperation *operation)Tp::PendingOperation [signal]
infoFields() const Tp::PendingContactInfo
isError() const Tp::PendingOperation
isFinished() const Tp::PendingOperation
isValid() const Tp::PendingOperation
object() const Tp::PendingOperation [protected]
PendingOperation(const SharedPtr< RefCounted > &object)Tp::PendingOperation [protected]
setFinished()Tp::PendingOperation [protected, slot]
setFinishedWithError(const QString &name, const QString &message)Tp::PendingOperation [protected, slot]
setFinishedWithError(const QDBusError &error)Tp::PendingOperation [protected, slot]
~PendingContactInfo()Tp::PendingContactInfo
~PendingOperation()Tp::PendingOperation [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00417.html0000644000175200001440000003525212000060453021630 0ustar00collabora-develusers00000000000000 Tp::WeakPtr< T > Class Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::WeakPtr< T > Class Template Reference

The WeakPtr class holds a weak reference to an object managed by SharedPtr. More...

#include <TelepathyQt/WeakPtr>

List of all members.

Public Member Functions

Friends


Detailed Description

template<class T>
class Tp::WeakPtr< T >

The WeakPtr class holds a weak reference to an object managed by SharedPtr.

Tp::WeakPtr is useful for example for breaking reference cycles which would result from using a Tp::SharedPtr for both ends of a pair of mutually linked objects to refer to each other.

See Shared Pointer Usage


Constructor & Destructor Documentation

template<class T>
Tp::WeakPtr< T >::WeakPtr ( ) [inline]
template<class T>
Tp::WeakPtr< T >::WeakPtr ( T *  d) [inline, explicit]
template<class T>
Tp::WeakPtr< T >::WeakPtr ( const WeakPtr< T > &  o) [inline]
template<class T>
Tp::WeakPtr< T >::WeakPtr ( const SharedPtr< T > &  o) [inline]
template<class T>
Tp::WeakPtr< T >::~WeakPtr ( ) [inline]

Member Function Documentation

template<class T>
bool Tp::WeakPtr< T >::isNull ( ) const [inline]
template<class T>
bool Tp::WeakPtr< T >::operator! ( ) const [inline]
template<class T>
Tp::WeakPtr< T >::operator UnspecifiedBoolType ( ) const [inline]
template<class T>
WeakPtr<T>& Tp::WeakPtr< T >::operator= ( const WeakPtr< T > &  o) [inline]
template<class T>
WeakPtr<T>& Tp::WeakPtr< T >::operator= ( const SharedPtr< T > &  o) [inline]
template<class T>
void Tp::WeakPtr< T >::swap ( WeakPtr< T > &  o) [inline]
template<class T>
SharedPtr<T> Tp::WeakPtr< T >::toStrongRef ( ) const [inline]

Friends And Related Function Documentation

template<class T>
uint qHash ( const WeakPtr< T > &  ptr) [friend]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00312.html0000644000175200001440000001367112000060453021623 0ustar00collabora-develusers00000000000000 Tp::PendingConnection Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingConnection Class Reference

The PendingConnection class represents the parameters of and the reply to an asynchronous connection request. More...

#include <TelepathyQt/PendingConnection>

Inherits Tp::PendingOperation.

List of all members.

Public Member Functions


Detailed Description

The PendingConnection class represents the parameters of and the reply to an asynchronous connection request.

Instances of this class cannot be constructed directly; the only way to get one is via ConnectionManager.

See Asynchronous Object Model


Constructor & Destructor Documentation


Member Function Documentation

ConnectionManagerPtr Tp::PendingConnection::manager ( ) const

Return the connection manager through which the request was made.

Returns:
A pointer to the ConnectionManager object.
ConnectionPtr Tp::PendingConnection::connection ( ) const

Return the connection resulting from the connection request.

Returns:
A pointer to the Connection object.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00432_source.html0000644000175200001440000001203312000060453023175 0ustar00collabora-develusers00000000000000 account-property-filter.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
account-property-filter.h
00001 
00023 #ifndef _TelepathyQt_account_property_filter_h_HEADER_GUARD_
00024 #define _TelepathyQt_account_property_filter_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Account>
00031 #include <TelepathyQt/GenericPropertyFilter>
00032 #include <TelepathyQt/Types>
00033 
00034 namespace Tp
00035 {
00036 
00037 class TP_QT_EXPORT AccountPropertyFilter : public GenericPropertyFilter<Account>
00038 {
00039 public:
00040     static AccountPropertyFilterPtr create()
00041     {
00042         return AccountPropertyFilterPtr(new AccountPropertyFilter);
00043     }
00044 
00045     ~AccountPropertyFilter();
00046 
00047     bool isValid() const;
00048 
00049 private:
00050     AccountPropertyFilter();
00051 
00052     struct Private;
00053     friend struct Private;
00054     Private *mPriv;
00055 };
00056 
00057 } // Tp
00058 
00059 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00742.html0000644000175200001440000000630712000060453021630 0ustar00collabora-develusers00000000000000 ChannelRequest proxies
   Home · All Classes · All Namespaces · Modules · Functions · Files
ChannelRequest proxies

Classes


Detailed Description

Proxy objects representing remote Telepathy ChannelRequest objects and their optional interfaces.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00441_source.html0000644000175200001440000002042112000060453023175 0ustar00collabora-develusers00000000000000 avatar.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
avatar.h
00001 
00023 #ifndef _TelepathyQt_avatar_h_HEADER_GUARD_
00024 #define _TelepathyQt_avatar_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Global>
00031 
00032 #include <QSharedDataPointer>
00033 #include <QString>
00034 #include <QStringList>
00035 #include <QMetaType>
00036 
00037 namespace Tp
00038 {
00039 
00040 struct TP_QT_EXPORT AvatarData
00041 {
00042 public:
00043     inline AvatarData(const QString &fileName, const QString &mimeType)
00044         : fileName(fileName), mimeType(mimeType) {}
00045     inline AvatarData() {}
00046 
00047     QString fileName;
00048     QString mimeType;
00049 };
00050 
00051 class TP_QT_EXPORT AvatarSpec
00052 {
00053 public:
00054     AvatarSpec();
00055     AvatarSpec(const QStringList &supportedMimeTypes,
00056             uint minHeight, uint maxHeight, uint recommendedHeight,
00057             uint minWidth, uint maxWidth, uint recommendedWidth,
00058             uint maxBytes);
00059     AvatarSpec(const AvatarSpec &other);
00060     ~AvatarSpec();
00061 
00062     bool isValid() const { return mPriv.constData() != 0; }
00063 
00064     AvatarSpec &operator=(const AvatarSpec &other);
00065 
00066     QStringList supportedMimeTypes() const;
00067     uint minimumHeight() const;
00068     uint maximumHeight() const;
00069     uint recommendedHeight() const;
00070     uint minimumWidth() const;
00071     uint maximumWidth() const;
00072     uint recommendedWidth() const;
00073     uint maximumBytes() const;
00074 
00075 private:
00076     struct Private;
00077     friend struct Private;
00078     QSharedDataPointer<Private> mPriv;
00079 };
00080 
00081 } // Tp
00082 
00083 Q_DECLARE_METATYPE(Tp::AvatarData);
00084 Q_DECLARE_METATYPE(Tp::AvatarSpec);
00085 
00086 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00852.html0000644000175200001440000000631112000060453021625 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Feature Member List
This is the complete list of members for Tp::Feature, including all inherited members.
Feature()Tp::Feature
Feature(const QString &className, uint id, bool critical=false)Tp::Feature
Feature(const Feature &other)Tp::Feature
isCritical() const Tp::Feature
isValid() const Tp::Feature [inline]
operator=(const Feature &other)Tp::Feature
~Feature()Tp::Feature


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00011.html0000644000175200001440000000551712000060453021617 0ustar00collabora-develusers00000000000000 contact-messenger/sender.h
   Home · All Classes · All Namespaces · Modules · Functions · Files
contact-messenger/sender.h
#ifndef _TelepathyQt_examples_contact_messenger_sender_h_HEADER_GUARD_
#define _TelepathyQt_examples_contact_messenger_sender_h_HEADER_GUARD_

#include <TelepathyQt/Types>

#include <QObject>
#include <QString>

namespace Tp
{
class PendingOperation;
}

class Sender : public QObject
{
    Q_OBJECT

public:
    Sender(const QString &accountPath, const QString &contactIdentifier, const QString &message);
    ~Sender();

private Q_SLOTS:
    void onSendMessageFinished(Tp::PendingOperation *op);

private:
    Tp::ContactMessengerPtr messenger;
};

#endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00056.html0000644000175200001440000000701112000060453021617 0ustar00collabora-develusers00000000000000 Tp::Avatar Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Avatar Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

A struct containing avatar data marked with its MIME type.

May be set to an empty byte-array and an empty string, indicating no avatar.


Member Data Documentation


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01119.html0000644000175200001440000002103412000060453021621 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ProtocolInterfaceAddressingInterface Member List
This is the complete list of members for Tp::Client::ProtocolInterfaceAddressingInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ProtocolInterfaceAddressingInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
NormalizeContactURI(const QString &URI, int timeout=-1)Tp::Client::ProtocolInterfaceAddressingInterface [inline, slot]
NormalizeVCardAddress(const QString &VCardField, const QString &VCardAddress, int timeout=-1)Tp::Client::ProtocolInterfaceAddressingInterface [inline, slot]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
ProtocolInterfaceAddressingInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ProtocolInterfaceAddressingInterface
ProtocolInterfaceAddressingInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ProtocolInterfaceAddressingInterface
ProtocolInterfaceAddressingInterface(Tp::DBusProxy *proxy)Tp::Client::ProtocolInterfaceAddressingInterface
ProtocolInterfaceAddressingInterface(const Tp::Client::ConnectionManagerInterface &mainInterface)Tp::Client::ProtocolInterfaceAddressingInterface [explicit]
ProtocolInterfaceAddressingInterface(const Tp::Client::ConnectionManagerInterface &mainInterface, QObject *parent)Tp::Client::ProtocolInterfaceAddressingInterface
requestAllProperties() const Tp::Client::ProtocolInterfaceAddressingInterface [inline]
requestPropertyAddressableURISchemes() const Tp::Client::ProtocolInterfaceAddressingInterface [inline]
requestPropertyAddressableVCardFields() const Tp::Client::ProtocolInterfaceAddressingInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ProtocolInterfaceAddressingInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_0x6e.html0000644000175200001440000002352012000060453023661 0ustar00collabora-develusers00000000000000 Class Members
   Home · All Classes · All Namespaces · Modules · Functions · Files
Here is a list of all class members with links to the classes they belong to:

- n -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/tab_s.png0000644000175200001440000000027512000060453021721 0ustar00collabora-develusers00000000000000PNG  IHDR$[IDATx P@Kg"%(IE|%I7ilm" ӏCۓ\.dOZ̤Br/(#a6 8qaF-EtA4fl]JjJC%!<#īIENDB`telepathy-qt-0.9.3/doc/html/a00081.html0000644000175200001440000005544512000060453021633 0ustar00collabora-develusers00000000000000 Tp::Client::CallContentInterfaceAudioControlInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::CallContentInterfaceAudioControlInterface Class Reference

#include <TelepathyQt/CallContent>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Call1.Content.Interface.AudioControl".


Constructor & Destructor Documentation

Tp::Client::CallContentInterfaceAudioControlInterface::CallContentInterfaceAudioControlInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a CallContentInterfaceAudioControlInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::CallContentInterfaceAudioControlInterface::CallContentInterfaceAudioControlInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a CallContentInterfaceAudioControlInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a CallContentInterfaceAudioControlInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a CallContentInterfaceAudioControlInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a CallContentInterfaceAudioControlInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Call1.Content.Interface.AudioControl", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property RequestedInputVolume of type int.

The input volume as requested by the Connection Manager. Initially and on any changes the client should change its input volume to match the requested volume.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property RequestedOutputVolume of type int.

The input volume as requested by the Connection Manager. Initially and on any changes the client should change its input volume to match the requested volume.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::CallContentInterfaceAudioControlInterface::ReportInputVolume ( int  volume,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method ReportInputVolume on the remote object.

Report to the CM that the Content input volume has been changed by the client. It is the client's responsibility to change the input volume used for the content. However, the client MUST call this whenever it changes input volume for the content.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
volumeReport the input volume level as set by the client.
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::CallContentInterfaceAudioControlInterface::ReportOutputVolume ( int  volume,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method ReportOutputVolume on the remote object.

Report to the CM that the content output volume has been changed by the client. It is the client's responsibility to change the output volume used for the content. However, the client MUST call this whenever it changes output volume for the content.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
volumeReport the output volume level as set by the client.
timeoutThe timeout in milliseconds.
void Tp::Client::CallContentInterfaceAudioControlInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00164.html0000644000175200001440000020302612000060453021623 0ustar00collabora-develusers00000000000000 Tp::Client::ConnectionInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

#include <TelepathyQt/Connection>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

  • void SelfHandleChanged (uint selfHandle)
  • void NewChannel (const QDBusObjectPath &objectPath, const QString &channelType, uint handleType, uint handle, bool suppressHandler)
  • void ConnectionError (const QString &error, const QVariantMap &details)
  • void StatusChanged (uint status, uint reason)

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Connection".


Constructor & Destructor Documentation

Tp::Client::ConnectionInterface::ConnectionInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ConnectionInterface::ConnectionInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ConnectionInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Member Function Documentation

static QLatin1String Tp::Client::ConnectionInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Connection", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property Interfaces of type QStringList.

The set of optional interfaces supported by this connection. Before the connection status changes to CONNECTED, this property may change at any time, but it is guaranteed that interfaces will only be added, not removed. After the connection status changes to CONNECTED, this property cannot change further.

There is no explicit change notification; reasonable behaviour for a client would be to retrieve the interfaces list once initially, and once more when it becomes CONNECTED.

In some connection managers, certain capabilities of a connection are known to be implemented for all connections (e.g. support for SimplePresence), and some interfaces (like SimplePresence) can even be used before connecting. Other capabilities may or may not exist, depending on server functionality; by the time the connection goes CONNECTED, the connection manager is expected to have evaluated the server's functionality and enabled any extra interfaces for the remainder of the Connection's lifetime.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property SelfHandle of type uint.

The handle which represents the user on this connection, which will remain valid for the lifetime of this connection, or until a change in the user's identifier is signalled by the SelfHandleChanged signal. If the connection is not yet in the CONNECTED state, the value of this property MAY be zero.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Status of type uint.

The current status of the connection. Change notification is via the StatusChanged() signal.

If retrieval of property succeeds and yields the value Disconnected, this indicates that the connection has not yet been established. If connection has been attempted and failed, the Connection object SHOULD be removed from the bus entirely, meaning that retrieval of this property SHOULD fail.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property HasImmortalHandles of type bool.

True if handles last for the whole lifetime of the Connection. This SHOULD be the case in all connection managers, but clients MUST interoperate with older connection managers (which reference-count handles).

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::ConnectionInterface::Connect ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method Connect on the remote object.

Request that the connection be established. This will be done asynchronously and errors will be returned by emitting StatusChanged() signals.

Calling this method on a Connection that is already connecting or connected is allowed, and has no effect.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ConnectionInterface::Disconnect ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method Disconnect on the remote object.

Request that the connection be closed. This closes the connection if it's not already in DISCONNECTED state, and destroys the connection object.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply<QStringList> Tp::Client::ConnectionInterface::GetInterfaces ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method GetInterfaces on the remote object.

Returns the set of optional interfaces supported by this connection. See Interfaces for more details.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
Returns:

The value of the Interfaces property

QDBusPendingReply<QString> Tp::Client::ConnectionInterface::GetProtocol ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method GetProtocol on the remote object.

Get the protocol this connection is using.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
Returns:

A string identifier for the protocol

QDBusPendingReply<uint> Tp::Client::ConnectionInterface::GetSelfHandle ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method GetSelfHandle on the remote object.

Returns the value of the SelfHandle property. Change notification is via the SelfHandleChanged signal.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
Returns:

The value of the SelfHandle property

QDBusPendingReply<uint> Tp::Client::ConnectionInterface::GetStatus ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method GetStatus on the remote object.

Get the current status as defined in the StatusChanged signal.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
Returns:

The value of the Status property

QDBusPendingReply Tp::Client::ConnectionInterface::HoldHandles ( uint  handleType,
const Tp::UIntList handles,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method HoldHandles on the remote object.

If HasImmortalHandles is true, which SHOULD always be the case in this version of telepathy-spec, this method does nothing and returns successfully, unless the given handle type or any of the given handles is invalid.

In older connection managers, this method notifies the connection manger that your client is holding a copy of handles which may not be in use in any existing channel or list, and were not obtained by using the RequestHandles() method. For example, a handle observed in an emitted signal, or displayed somewhere in the UI that is not associated with a channel. The connection manager must not deallocate a handle where any clients have used this method to indicate it is in use until the ReleaseHandles() method is called, or the clients disappear from the bus.

Note that HoldHandles is idempotent - calling it multiple times is equivalent to calling it once. If a handle is "referenced" by several components which share a D-Bus unique name, the client should perform reference counting internally, and only call ReleaseHandles when none of the cooperating components need the handle any longer.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
handleTypeThe type of handle to be held
handlesA array of integer handles to hold
timeoutThe timeout in milliseconds.
QDBusPendingReply<QStringList> Tp::Client::ConnectionInterface::InspectHandles ( uint  handleType,
const Tp::UIntList handles,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method InspectHandles on the remote object.

Return a string representation for a number of handles of a given type.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
handleTypeThe type of handle to be inspected
handlesAn array of integer handles of this type
timeoutThe timeout in milliseconds.
Returns:

An array of identifiers corresponding to the given handles, in the same order.

QDBusPendingReply<Tp::ChannelInfoList> Tp::Client::ConnectionInterface::ListChannels ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method ListChannels on the remote object.

List all the channels which currently exist on this connection.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
Returns:

An array of structs representing channels.

QDBusPendingReply Tp::Client::ConnectionInterface::ReleaseHandles ( uint  handleType,
const Tp::UIntList handles,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method ReleaseHandles on the remote object.

If HasImmortalHandles is true, which SHOULD always be the case in this version of telepathy-spec, this method does nothing and returns successfully, unless the given handle type or any of the given handles is invalid. In older connection managers, this method explicitly notifies the connection manager that your client is no longer holding any references to the given handles, and that they may be deallocated if they are not held by any other clients or referenced by any existing channels. See HoldHandles for notes.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
handleTypeAn integer handle type (as defined in RequestHandle)
handlesAn array of integer handles being held by the client
timeoutThe timeout in milliseconds.
QDBusPendingReply<QDBusObjectPath> Tp::Client::ConnectionInterface::RequestChannel ( const QString &  type,
uint  handleType,
uint  handle,
bool  suppressHandler,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method RequestChannel on the remote object.

Request a channel satisfying the specified type and communicating with the contact, room, list etc. indicated by the given handle_type and handle. The handle_type and handle may both be zero to request the creation of a new, empty channel, which may or may not be possible, depending on the protocol and channel type.

On success, the returned channel will always be of the requested type (i.e. implement the requested channel-type interface).

If a new, empty channel is requested, on success the returned channel will always be an "anonymous" channel for which the type and handle are both zero.

If a channel to a contact, room etc. is requested, on success, the returned channel may either be a new or existing channel to the requested entity (i.e. its ChannelInterface::TargetHandleType and ChannelInterface::TargetHandle properties are the requested handle type and handle), or a newly created "anonymous" channel associated with the requested handle in some implementation-specific way.

For example, for a contact handle, the returned channel might be "anonymous", but implement the groups interface and have the requested contact already present among the members.

If the request cannot be satisfied, an error is raised and no channel is created.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
typeA D-Bus interface name representing base channel type
handleTypeAn integer representing the handle type, or Handle_Type_None if no handle is specified
handleA nonzero integer handle representing a contact, room, list etc. according to handle_type, or zero if the handle_type is Handle_Type_None
suppressHandlerClients SHOULD always set this to true. The historical meaning was that clients that did not intend to take responsibility for displaying the channel to the user could set this to FALSE, in which case the channel dispatcher would launch an appropriate channel handler. However, clients whose functionality relies on having a working channel dispatcher should obtain that functionality by calling methods on the channel dispatcher, so that they will get an appropriate error if the channel dispatcher is missing or not working. The channel dispatcher itself should set this to true too, so that it will ignore the NewChannel signal that results from the creation of the channel. It can then dispatch the channel returned from this method to an appropriate handler. So, there is no sensible use-case for setting this to false, and setting it to false can result in unhandled channels (in the case where clients assume that a channel dispatcher is present, but it isn't).
timeoutThe timeout in milliseconds.
Returns:

The D-Bus object path for the channel created or retrieved

QDBusPendingReply<Tp::UIntList> Tp::Client::ConnectionInterface::RequestHandles ( uint  handleType,
const QStringList &  identifiers,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method RequestHandles on the remote object.

Request several handles from the connection manager which represent a number of contacts, rooms or server-stored lists on the service.

If HasImmortalHandles is true, which SHOULD always be the case in this version of telepathy-spec, the handles remain valid until the connection disconnects.

The implementation of this method in older connection managers must record that these handles are in use by the client who invokes this method, and must not deallocate the handles until the client disconnects from the bus or calls the ReleaseHandles() method. Where the identifier refers to an entity that already has a handle in this connection manager, this handle should be returned instead. The handle number 0 must not be returned by the connection manager.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
handleTypeThe type of handle required
identifiersAn array of identifiers of entities to request handles for
timeoutThe timeout in milliseconds.
Returns:

An array of integer handle numbers in the same order as the given identifiers.

QDBusPendingReply Tp::Client::ConnectionInterface::AddClientInterest ( const QStringList &  tokens,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method AddClientInterest on the remote object.

Register a client's interest in notifications related to one or more interfaces.

Groups of notifications are identified by a token which is either a D-Bus interface name, or a string that starts with a D-Bus interface name. The meaning of each token is given by that D-Bus interface, which MUST define it in its documentation.

Initially, all interests are in entire interface, but allowing other strings allows subscription to part of an interface; for instance, an interest in ...MailNotification/count could track the number of messages without caring about their detailed content.

For each token with which this method interacts, the Connection tracks an "interest count" (like a reference count) for each unique bus name that has called this method. When a client calls this method, for each token, the interest count for its unique bus name is incremented; when RemoveClientInterest() is called, all interest counts for that unique bus name are decremented. If the unique bus name leaves the bus (for instance, if the client crashes or exits), all interest counts for that unique bus name are set to zero.

The Connection can then use these reference counts to avoid subscribing to protocol-level notifications unless at least one client has a non-zero interest count for the relevant token.

This method exists to reduce memory and network overhead when there is no active subscription.

One situation where this is useful is ConnectionInterfaceLocationInterface : on XMPP, location updates are received over PEP. If the Connection advertises the geoloc+notify capability, it will be sent location updates for all contacts. To avoid consuming resources for this, the connection should avoid advertising that capability until a client has expressed an interest in contacts' locations.

Another example of a protocol that benefits from this method is the Google XMPP Mail Notification extension, which can be used to implement ConnectionInterfaceMailNotificationInterface . In this protocol, the CM receives a notification that something has changed, but to get more information, the CM must request this information. Knowing that nobody is currently interested in this information, the CM can avoid generating useless network traffic. Similarly, the CM may free the list of unread messages to reduce memory overhead.

If this method is called for an interface that might require protocol-level subscription, but the connection cannot set up that subscription yet (for instance because the Status is not Connected yet), the Connection MUST remember the client's interest, and attempt to subscribe to the appropriate protocol feature when this becomes possible.

Clients MAY ignore any errors raised by this method; it is intended to be called with the reply ignored.

The only reason it could fail is if it's unimplemented, in which case the only thing the client can usefully do is to proceed as if it had succeeded.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
tokens

Interfaces or parts of interfaces in which to register an interest, represented by either a DBus_Interface, or a string prefixed with a DBus_Interface.

If the Connection does not support one of these tokens, this is not considered to be an error; the unsupported token is simply ignored.

timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ConnectionInterface::RemoveClientInterest ( const QStringList &  tokens,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method RemoveClientInterest on the remote object.

Release an interest registered using AddClientInterest() . See that method's documentation for details.

Clients MAY ignore any errors raised by this method; it is intended to be called with the reply ignored.

The only reasons it could fail are if it's unimplemented, or if the client's reference-counting is wrong and it has tried to remove a client interest that it did not add. In both cases, there's nothing the client could do about it.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
tokens

Interfaces or parts of interfaces that were previously passed to AddClientInterest() .

timeoutThe timeout in milliseconds.
void Tp::Client::ConnectionInterface::SelfHandleChanged ( uint  selfHandle) [signal]

Represents the signal SelfHandleChanged on the remote object.

Emitted whenever the SelfHandle property changes. If the connection is not yet in the CONNECTED state, this signal is not guaranteed to be emitted.

Parameters:
selfHandleThe new value of the SelfHandle property.
void Tp::Client::ConnectionInterface::NewChannel ( const QDBusObjectPath &  objectPath,
const QString &  channelType,
uint  handleType,
uint  handle,
bool  suppressHandler 
) [signal]

Represents the signal NewChannel on the remote object.

Emitted when a new Channel object is created, either through user request or incoming information from the service.

Parameters:
objectPathA D-Bus object path for the channel object on this service
channelTypeA D-Bus interface name representing the channel type
handleTypeAn integer representing the type of handle this channel communicates with, or Handle_Type_None if no handle is specified
handleA handle indicating the specific contact, room or list this channel communicates with, or zero if no handle is specified
suppressHandler

If true, the channel was requested by a client that intends to present it to the user itself (i.e. it passed suppress_handler=TRUE to the RequestChannel() method), so no other handler should be launched. Clients MAY assume that channels where this is true were created by a user request.

If false, either the channel was created due to incoming information from the service, or the channel was requested by a local client that does not intend to handle the channel itself (this usage is deprecated).

Clients MUST NOT assume that only incoming channels will have this flag set to false.

void Tp::Client::ConnectionInterface::ConnectionError ( const QString &  error,
const QVariantMap &  details 
) [signal]

Represents the signal ConnectionError on the remote object.

Emitted when an error occurs that renders this connection unusable.

Whenever this signal is emitted, it MUST immediately be followed by a StatusChanged() signal with status Connection_Status_Disconnected and an appropriate reason code.

Connection managers SHOULD emit this signal on disconnection, but need not do so. Clients MUST support connection managers that emit StatusChanged(Disconnected, ...) without first emitting ConnectionError.

This signal provides additional information about the reason for disconnection. The reason for connection is always straightforward - it was requested - so it does not need further explanation. However, on errors, it can be useful to provide additional information.

The Connection_Status_Reason is not given here, since it will be signalled in StatusChanged() . A reasonable client implementation would be to store the information given by this signal until StatusChanged is received, at which point the information given by this signal can be used to supplement the StatusChanged signal.

Parameters:
errorThe name of a D-Bus error describing the error that occurred, which may correspond to a Connection_Status_Reason, or may be a more specific Telepathy error (such as org.freedesktop.Telepathy.Error.ConnectionRefused for Connection_Status_Reason_Network_Error) or a protocol-specific or connection-manager-specific error in a suitable namespace. For instance, a SIP connection manager could signal "402 Payment Required" as an error in a connection-manager-specific namespace, or a link-local XMPP implementation that used Avahi could provide the error given to it by the avahi-daemon.
details

Additional information about the error, which may include the following well-known keys:

debug-message (s)
Debugging information on the change, corresponding to the message part of a D-Bus error message, which SHOULD NOT be displayed to users under normal circumstances
server-message (s)
A human-readable message from the server explaining what happened. This may be in the user's native language, or in the server operator's native language, or even in Lojban.
user-requested (b), expected-hostname (s), certificate-hostname (s)
The same details defined in TLS_Certificate_Rejection.
void Tp::Client::ConnectionInterface::StatusChanged ( uint  status,
uint  reason 
) [signal]

Represents the signal StatusChanged on the remote object.

Emitted when the status of the connection changes. All states and reasons have numerical values, as defined in ConnectionStatus and ConnectionStatusReason.

Parameters:
statusAn integer indicating the new status, as defined by ConnectionStatus
reasonAn integer indicating the reason for the status change, as defined by ConnectionStatusReason
void Tp::Client::ConnectionInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00831.html0000644000175200001440000003773112000060453021634 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ConnectionManager Member List
This is the complete list of members for Tp::ConnectionManager, including all inherited members.
actualFeatures() const Tp::ReadyObject [virtual]
baseInterface() const Tp::ConnectionManager [protected]
becomeReady(const Features &requestedFeatures=Features())Tp::ReadyObject [virtual]
busName() const Tp::DBusProxy
BypassInterfaceCheck enum valueTp::OptionalInterfaceFactory< ConnectionManager >
channelFactory() const Tp::ConnectionManager
CheckInterfaceSupported enum valueTp::OptionalInterfaceFactory< ConnectionManager >
connectionFactory() const Tp::ConnectionManager
ConnectionManager(const QDBusConnection &bus, const QString &name, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory)Tp::ConnectionManager [protected]
contactFactory() const Tp::ConnectionManager
create(const QDBusConnection &bus, const QString &name)Tp::ConnectionManager [static]
create(const QString &name, const ConnectionFactoryConstPtr &connectionFactory=ConnectionFactory::create(QDBusConnection::sessionBus()), const ChannelFactoryConstPtr &channelFactory=ChannelFactory::create(QDBusConnection::sessionBus()), const ContactFactoryConstPtr &contactFactory=ContactFactory::create())Tp::ConnectionManager [static]
create(const QDBusConnection &bus, const QString &name, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory=ContactFactory::create())Tp::ConnectionManager [static]
dbusConnection() const Tp::DBusProxy
DBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::DBusProxy
FeatureCoreTp::ConnectionManager [static]
hasInterface(const QString &name) constTp::OptionalInterfaceFactory< ConnectionManager > [inline]
hasProtocol(const QString &protocolName) const Tp::ConnectionManager
interface() constTp::OptionalInterfaceFactory< ConnectionManager > [inline]
interfaces() constTp::OptionalInterfaceFactory< ConnectionManager > [inline]
InterfaceSupportedChecking enum nameTp::OptionalInterfaceFactory< ConnectionManager >
invalidate(const QString &reason, const QString &message)Tp::DBusProxy [protected]
invalidate(const QDBusError &error)Tp::DBusProxy [protected]
invalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage)Tp::DBusProxy [signal]
invalidationMessage() const Tp::DBusProxy
invalidationReason() const Tp::DBusProxy
isReady(const Features &features=Features()) const Tp::ReadyObject [virtual]
isValid() const Tp::DBusProxy
listNames(const QDBusConnection &bus=QDBusConnection::sessionBus())Tp::ConnectionManager [static]
missingFeatures() const Tp::ReadyObject [virtual]
nameTp::ConnectionManager
name() const Tp::ConnectionManager
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
objectPath() const Tp::DBusProxy
optionalInterface(InterfaceSupportedChecking check=CheckInterfaceSupported) constTp::OptionalInterfaceFactory< ConnectionManager > [inline]
OptionalInterfaceFactory(ConnectionManager *this_)Tp::OptionalInterfaceFactory< ConnectionManager > [inline]
propertyChanged(const QString &propertyName)Tp::Object [signal]
protocol(const QString &protocolName) const Tp::ConnectionManager
protocolsTp::ConnectionManager
protocols() const Tp::ConnectionManager
readinessHelper() const Tp::ReadyObject [protected]
ReadyObject(RefCounted *object, const Feature &featureCore)Tp::ReadyObject
ReadyObject(DBusProxy *proxy, const Feature &featureCore)Tp::ReadyObject
RefCounted()Tp::RefCounted [inline]
requestedFeatures() const Tp::ReadyObject [virtual]
setBusName(const QString &busName)Tp::DBusProxy [protected]
setInterfaces(const QStringList &interfaces)Tp::OptionalInterfaceFactory< ConnectionManager > [inline, protected]
StatelessDBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::StatelessDBusProxy
supportedProtocolsTp::ConnectionManager
supportedProtocols() const Tp::ConnectionManager
~ConnectionManager()Tp::ConnectionManager [virtual]
~DBusProxy()Tp::DBusProxy [virtual]
~Object()Tp::Object [virtual]
~OptionalInterfaceFactory()Tp::OptionalInterfaceFactory< ConnectionManager > [inline]
~ReadyObject()Tp::ReadyObject [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]
~StatelessDBusProxy()Tp::StatelessDBusProxy [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00816.html0000644000175200001440000002110412000060453021622 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::CaptchaAuthentication Member List
This is the complete list of members for Tp::CaptchaAuthentication, including all inherited members.
answer(uint id, const QString &answer)Tp::CaptchaAuthentication
answer(const Tp::CaptchaAnswers &response)Tp::CaptchaAuthentication
AudioRecognitionChallenge enum valueTp::CaptchaAuthentication
cancel(Tp::CaptchaCancelReason reason, const QString &message=QString())Tp::CaptchaAuthentication [slot]
canRetry() const Tp::CaptchaAuthentication
ChallengeType enum nameTp::CaptchaAuthentication
channel() const Tp::CaptchaAuthentication
error() const Tp::CaptchaAuthentication
errorDetails() const Tp::CaptchaAuthentication
NoChallenge enum valueTp::CaptchaAuthentication
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
OCRChallenge enum valueTp::CaptchaAuthentication
PictureQuestionChallenge enum valueTp::CaptchaAuthentication
PictureRecognitionChallenge enum valueTp::CaptchaAuthentication
propertyChanged(const QString &propertyName)Tp::Object [signal]
RefCounted()Tp::RefCounted [inline]
requestCaptchas(const QStringList &preferredMimeTypes=QStringList(), ChallengeTypes preferredTypes=~ChallengeTypes(NoChallenge))Tp::CaptchaAuthentication
SpeechQuestionChallenge enum valueTp::CaptchaAuthentication
SpeechRecognitionChallenge enum valueTp::CaptchaAuthentication
status() const Tp::CaptchaAuthentication
statusChanged(Tp::CaptchaStatus status)Tp::CaptchaAuthentication [signal]
TextQuestionChallenge enum valueTp::CaptchaAuthentication
UnknownChallenge enum valueTp::CaptchaAuthentication
VideoQuestionChallenge enum valueTp::CaptchaAuthentication
VideoRecognitionChallenge enum valueTp::CaptchaAuthentication
~CaptchaAuthentication()Tp::CaptchaAuthentication [virtual]
~Object()Tp::Object [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00394.html0000644000175200001440000002410712000060453021631 0ustar00collabora-develusers00000000000000 Tp::StatefulDBusProxy Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::StatefulDBusProxy Class Reference

The StatefulDBusProxy class is a base class representing a remote object whose API is stateful. More...

#include <TelepathyQt/StatefulDBusProxy>

Inherits Tp::DBusProxy.

Inherited by Tp::CallContent, Tp::CallStream, Tp::Channel, Tp::ChannelDispatchOperation, Tp::ChannelRequest, Tp::Connection, and Tp::DebugReceiver.

List of all members.

Public Member Functions

Static Public Member Functions

  • static QString uniqueNameFrom (const QDBusConnection &bus, const QString &wellKnownOrUnique)
  • static QString uniqueNameFrom (const QDBusConnection &bus, const QString &wellKnownOrUnique, QString &error, QString &message)

Detailed Description

The StatefulDBusProxy class is a base class representing a remote object whose API is stateful.

These objects do not remain useful if the service providing them exits or crashes, so they emit invalidated() if this happens.

Examples include the Connection and Channel classes.


Constructor & Destructor Documentation

Tp::StatefulDBusProxy::StatefulDBusProxy ( const QDBusConnection &  dbusConnection,
const QString &  busName,
const QString &  objectPath,
const Feature featureCore 
)

Construct a new StatefulDBusProxy object.

Parameters:
dbusConnectionQDBusConnection to use.
busNameD-Bus bus name of the service that provides the remote object.
objectPathThe object path.
featureCoreThe object core feature.

Class destructor.


Member Function Documentation

QString Tp::StatefulDBusProxy::uniqueNameFrom ( const QDBusConnection &  bus,
const QString &  wellKnownOrUnique 
) [static]
QString Tp::StatefulDBusProxy::uniqueNameFrom ( const QDBusConnection &  bus,
const QString &  wellKnownOrUnique,
QString &  error,
QString &  message 
) [static]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00042.html0000644000175200001440000004741512000060453021626 0ustar00collabora-develusers00000000000000 Tp::AccountFactory Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The AccountFactory class is responsible for constructing Account objects according to application-defined settings. More...

#include <TelepathyQt/AccountFactory>

Inherits Tp::FixedFeatureFactory.

Inherited by Tp::PendingChannel::Private::FakeAccountFactory.

List of all members.

Public Member Functions

  • virtual ~AccountFactory ()
  • PendingReady * proxy (const QString &busName, const QString &objectPath, const ConnectionFactoryConstPtr &connFactory, const ChannelFactoryConstPtr &chanFactory, const ContactFactoryConstPtr &contactFactory) const

Static Public Member Functions

Protected Member Functions

  • AccountFactory (const QDBusConnection &bus, const Features &features)
  • virtual AccountPtr construct (const QString &busName, const QString &objectPath, const ConnectionFactoryConstPtr &connFactory, const ChannelFactoryConstPtr &chanFactory, const ContactFactoryConstPtr &contactFactory) const
  • virtual QString finalBusNameFrom (const QString &uniqueOrWellKnown) const

Detailed Description

The AccountFactory class is responsible for constructing Account objects according to application-defined settings.

The class is used by AccountManager and other classes which construct Account proxy instances to enable sharing instances of application-defined Account subclasses with certain features always ready.


Constructor & Destructor Documentation

Class destructor.

Tp::AccountFactory::AccountFactory ( const QDBusConnection &  bus,
const Features features 
) [protected]

Construct a new AccountFactory object.

As in create(), it should be noted that unlike Account::becomeReady(), FeatureCore isn't assumed. If no features are specified, no Account::becomeReady() call is made at all and the proxy won't be Account::isReady().

Parameters:
busThe QDBusConnection for proxies constructed using this factory to use.
featuresThe features to make ready on constructed Accounts.

Member Function Documentation

AccountFactoryPtr Tp::AccountFactory::create ( const QDBusConnection &  bus,
const Features features = Features() 
) [static]

Create a new AccountFactory object.

Optionally, the features to make ready on all constructed proxies can be specified. The default is to make no features ready. It should be noted that unlike Account::becomeReady(), FeatureCore isn't assumed. If no features are specified, which is the default behavior, no Account::becomeReady() call is made at all and the proxy won't be Account::isReady().

Parameters:
busThe QDBusConnection for proxies constructed using this factory to use.
featuresThe features to make ready on constructed Accounts.
Returns:
An AccountFactoryPtr object pointing to the newly created AccountFactory object.
PendingReady * Tp::AccountFactory::proxy ( const QString &  busName,
const QString &  objectPath,
const ConnectionFactoryConstPtr &  connFactory,
const ChannelFactoryConstPtr &  chanFactory,
const ContactFactoryConstPtr &  contactFactory 
) const

Constructs an Account proxy and begins making it ready.

If a valid proxy already exists in the factory cache for the given combination of busName and objectPath, it is returned instead. All newly created proxies are automatically cached until they're either DBusProxy::invalidated() or the last reference to them outside the factory has been dropped.

The proxy can be accessed immediately after this function returns using PendingReady::proxy(). The ready operation only finishes, however, when the features specified by features(), if any, are made ready as much as possible. If the service doesn't support a given feature, they won't obviously be ready even if the operation finished successfully, as is the case for Account::becomeReady().

Parameters:
busNameThe bus/service name of the D-Bus account object the proxy is constructed for. (Usually TP_QT_ACCOUNT_MANAGER_BUS_NAME).
objectPathThe object path of the account.
connFactoryThe connection factory to use for the Account.
chanFactoryThe channel factory to use for the Account.
contactFactoryThe channel factory to use for the Account.
Returns:
A PendingReady operation with the proxy in PendingReady::proxy().
AccountPtr Tp::AccountFactory::construct ( const QString &  busName,
const QString &  objectPath,
const ConnectionFactoryConstPtr &  connFactory,
const ChannelFactoryConstPtr &  chanFactory,
const ContactFactoryConstPtr &  contactFactory 
) const [protected, virtual]

Can be used by subclasses to override the Account subclass constructed by the factory.

This is automatically called by proxy() to construct proxy instances if no valid cached proxy is found.

The default implementation constructs Tp::Account objects.

Parameters:
busNameThe bus/service name of the D-Bus account object the proxy is constructed for. (Usually TP_QT_ACCOUNT_MANAGER_BUS_NAME).
objectPathThe object path of the account.
connFactoryThe connection factory to use for the Account.
chanFactoryThe channel factory to use for the Account.
contactFactoryThe channel factory to use for the Account.
Returns:
A pointer to the constructed Account object.
QString Tp::AccountFactory::finalBusNameFrom ( const QString &  uniqueOrWellKnown) const [protected, virtual]

Identity transform, as is appropriate for Account objects.

Parameters:
uniqueOrWellKnownThe name to transform.
Returns:
uniqueOrWellKnown

Implements Tp::DBusProxyFactory.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00196.html0000644000175200001440000001233012000060453021624 0ustar00collabora-develusers00000000000000 Tp::ContactCodecMap Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactCodecMap Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<uint, CodecList>, but needed to have a discrete type in the Qt type system.

A map from contact to the list of codecs he or she supports.


Constructor & Destructor Documentation

Tp::ContactCodecMap::ContactCodecMap ( const QMap< uint, CodecList > &  a) [inline]

Member Function Documentation

ContactCodecMap& Tp::ContactCodecMap::operator= ( const QMap< uint, CodecList > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00031.html0000644000175200001440000002031012000060453021605 0ustar00collabora-develusers00000000000000 Tp::AbstractClient Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AbstractClient Class Reference

The AbstractClient class represents a Telepathy client. More...

#include <TelepathyQt/AbstractClient>

Inherits Tp::RefCounted.

Inherited by Tp::AbstractClientApprover [virtual], Tp::AbstractClientHandler [virtual], and Tp::AbstractClientObserver [virtual].

List of all members.

Public Member Functions


Detailed Description

The AbstractClient class represents a Telepathy client.

Clients are programs used to process channels, approving, handling or observing them. User interface processes are the obvious example of clients, but they can provide other functionality, such as address-book synchronization, message logging, etc.

Each client is either an observer, an approver, a handler, or some combination of these.

Clients can be activatable services (those with a D-Bus .service file) so that they can run in response to channel creation, or non-activatable services (those that do not register a D-Bus .service file for their well-known name, but do request it at runtime) so that they can process channels, but only if they are already running - for instance, a full-screen media center application might do this.

As an optimization, service-activatable clients should install a file $XDG_DATA_DIRS/telepathy/clients/clientname.client containing a cached version of their immutable properties. The syntax of these files is documented in the Telepathy specification.

Non-activatable clients may install a .client file, but there's not much point in them doing so.

This is a base class and should not be used directly, use the specialized classes AbstractClientObserver, AbstractClientApprover and AbstractClientHandler instead.

If the same process wants to be either a mix of observer, approver and handler, or a combination of those it can multiple inherit the specialized abstract classes.

See also:
AbstractClientObserver, AbstractClientApprover, AbstractClientHandler

Constructor & Destructor Documentation

Construct a new AbstractClient object.

Note that this is a base class and should not be used directly, use the specialized classes AbstractClientObserver, AbstractClientApprover and AbstractClientHandler instead.

Class destructor.


Member Function Documentation

Return whether this client is registered.

Returns:
true if registered, false otherwise.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01026.html0000644000175200001440000000522512000060453021622 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::SingleContactAttributesMap Member List
This is the complete list of members for Tp::SingleContactAttributesMap, including all inherited members.
operator=(const QMap< QString, QDBusVariant > &a)Tp::SingleContactAttributesMap [inline]
SingleContactAttributesMap()Tp::SingleContactAttributesMap [inline]
SingleContactAttributesMap(const QMap< QString, QDBusVariant > &a)Tp::SingleContactAttributesMap [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00496_source.html0000644000175200001440000001333312000060453023213 0ustar00collabora-develusers00000000000000 cli-channel-dispatch-operation-body.hpp Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-channel-dispatch-operation-body.hpp
00001 #define IN_TP_QT_HEADER
00002 #include "TelepathyQt/channel-dispatch-operation.h"
00003 
00004 namespace Tp
00005 {
00006 namespace Client
00007 {
00008 
00009 ChannelDispatchOperationInterface::ChannelDispatchOperationInterface(const QString& busName, const QString& objectPath, QObject *parent)
00010     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00011 {
00012 }
00013 
00014 ChannelDispatchOperationInterface::ChannelDispatchOperationInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00015     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00016 {
00017 }
00018 
00019 ChannelDispatchOperationInterface::ChannelDispatchOperationInterface(Tp::DBusProxy *proxy)
00020     : Tp::AbstractInterface(proxy, staticInterfaceName())
00021 {
00022 }
00023 
00024 void ChannelDispatchOperationInterface::invalidate(Tp::DBusProxy *proxy,
00025         const QString &error, const QString &message)
00026 {
00027     disconnect(this, SIGNAL(ChannelLost(const QDBusObjectPath&, const QString&, const QString&)), NULL, NULL);
00028     disconnect(this, SIGNAL(Finished()), NULL, NULL);
00029 
00030     Tp::AbstractInterface::invalidate(proxy, error, message);
00031 }
00032 }
00033 }


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00396.html0000644000175200001440000001105212000060453021626 0ustar00collabora-develusers00000000000000 Tp::StatusSpec Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::StatusSpec Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.


Member Data Documentation


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00256.html0000644000175200001440000004132212000060453021624 0ustar00collabora-develusers00000000000000 Tp::Client::DBus::IntrospectableInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

#include <TelepathyQt/DBus>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

  • QDBusPendingReply< QString > Introspect (int timeout=-1)

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.DBus.Introspectable".


Constructor & Destructor Documentation

Tp::Client::DBus::IntrospectableInterface::IntrospectableInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a IntrospectableInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::DBus::IntrospectableInterface::IntrospectableInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a IntrospectableInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a IntrospectableInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a IntrospectableInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a IntrospectableInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

static QLatin1String Tp::Client::DBus::IntrospectableInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.DBus.Introspectable", which this class represents.

Returns:
The D-Bus interface name.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply<QString> Tp::Client::DBus::IntrospectableInterface::Introspect ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method Introspect on the remote object.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
void Tp::Client::DBus::IntrospectableInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00007.html0000644000175200001440000000571012000060453021617 0ustar00collabora-develusers00000000000000 accounts/accounts-window.h
   Home · All Classes · All Namespaces · Modules · Functions · Files
accounts/accounts-window.h
#ifndef _TelepathyQt_examples_accounts_accounts_window_h_HEADER_GUARD_
#define _TelepathyQt_examples_accounts_accounts_window_h_HEADER_GUARD_

#include <QMainWindow>

#include <TelepathyQt/Types>

namespace Tp {
class PendingOperation;
}

class QTableWidget;
class QTableWidgetItem;

class AccountsWindow : public QMainWindow
{
    Q_OBJECT

public:
    AccountsWindow(QWidget *parent = 0);
    virtual ~AccountsWindow();

private Q_SLOTS:
    void onAMReady(Tp::PendingOperation *);
    void onNewAccount(const Tp::AccountPtr &);

private:
    void setupGui();

    Tp::AccountManagerPtr mAM;
    QTableWidget *mTable;
};

#endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00371.html0000644000175200001440000001051712000060453021624 0ustar00collabora-develusers00000000000000 Tp::RTCPFeedbackMessage Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::RTCPFeedbackMessage Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

A struct defining an RTCP feedback message.


Member Data Documentation

Feedback type, for example "ack", "nack", or "ccm".

Feedback subtype, according to the Type, can be an empty string (""), if there is no subtype. For example, generic nack is Type="nack" Subtype="".

Feedback parameters as a string. Format is defined in the relevant RFC


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00810.html0000644000175200001440000001133312000060453021617 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Callback5< R, Arg1, Arg2, Arg3, Arg4, Arg5 > Member List
This is the complete list of members for Tp::Callback5< R, Arg1, Arg2, Arg3, Arg4, Arg5 >, including all inherited members.
BaseCallback()Tp::BaseCallback [inline]
BaseCallback(AbstractFunctorCaller *caller)Tp::BaseCallback [inline]
BaseCallback(const BaseCallback &other)Tp::BaseCallback [inline]
Callback5()Tp::Callback5< R, Arg1, Arg2, Arg3, Arg4, Arg5 > [inline]
Callback5(const Functor &functor)Tp::Callback5< R, Arg1, Arg2, Arg3, Arg4, Arg5 > [inline]
callerTp::BaseCallback [protected]
FunctionType typedefTp::Callback5< R, Arg1, Arg2, Arg3, Arg4, Arg5 >
isValid() const Tp::BaseCallback [inline]
operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5) const Tp::Callback5< R, Arg1, Arg2, Arg3, Arg4, Arg5 > [inline]
operator=(const BaseCallback &other)Tp::BaseCallback [inline]
ResultType typedefTp::Callback5< R, Arg1, Arg2, Arg3, Arg4, Arg5 >
~BaseCallback()Tp::BaseCallback [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00158.html0000644000175200001440000007722312000060453021636 0ustar00collabora-develusers00000000000000 Tp::ClientRegistrar Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ClientRegistrar Class Reference

The ClientRegistrar class is responsible for registering Telepathy clients (Observer, Approver, Handler). More...

#include <TelepathyQt/ClientRegistrar>

Inherits Tp::Object.

List of all members.

Public Member Functions

Static Public Member Functions


Detailed Description

The ClientRegistrar class is responsible for registering Telepathy clients (Observer, Approver, Handler).

Clients should inherit AbstractClientObserver, AbstractClientApprover, AbstractClientHandler or some combination of these, by using multiple inheritance, and register themselves using registerClient().

See the individual classes descriptions for more details.

Usage

Creating a client registrar object

One way to create a ClientRegistrar object is to just call the create method. For example:

 ClientRegistrarPtr cr = ClientRegistrar::create(); 

You can also provide a D-Bus connection as a QDBusConnection:

 ClientRegistrarPtr cr = ClientRegistrar::create(QDBusConnection::systemBus()); 

Registering a client

To register a client, just call registerClient() with a given AbstractClientPtr pointing to a valid AbstractClient instance.

 class MyClient : public AbstractClientObserver, public AbstractClientHandler
 {
     ...
 };

 ...

 ClientRegistrarPtr cr = ClientRegistrar::create();
 SharedPtr<MyClient> client = SharedPtr<MyClient>(new MyClient(...));
 cr->registerClient(AbstractClientPtr::dynamicCast(client), "myclient");
See also:
AbstractClientObserver, AbstractClientApprover, AbstractClientHandler

See Asynchronous Object Model, Shared Pointer Usage


Constructor & Destructor Documentation


Member Function Documentation

ClientRegistrarPtr Tp::ClientRegistrar::create ( const QDBusConnection &  bus) [static]

Create a new client registrar object using the given bus.

The instance will use an account factory creating Tp::Account objects with no features ready, a connection factory creating Tp::Connection objects with no features ready, and a channel factory creating stock Telepathy-Qt channel subclasses, as appropriate, with no features ready.

Parameters:
busQDBusConnection to use.
Returns:
A ClientRegistrarPtr object pointing to the newly created ClientRegistrar object.
ClientRegistrarPtr Tp::ClientRegistrar::create ( const AccountFactoryConstPtr &  accountFactory = AccountFactory::create(QDBusConnection::sessionBus()),
const ConnectionFactoryConstPtr &  connectionFactory = ConnectionFactory::create(QDBusConnection::sessionBus()),
const ChannelFactoryConstPtr &  channelFactory = ChannelFactory::create(QDBusConnection::sessionBus()),
const ContactFactoryConstPtr &  contactFactory = ContactFactory::create() 
) [static]

Create a new client registrar object using QDBusConnection::sessionBus() and the given factories.

Parameters:
accountFactoryThe account factory to use.
connectionFactoryThe connection factory to use.
channelFactoryThe channel factory to use.
contactFactoryThe contact factory to use.
Returns:
A ClientRegistrarPtr object pointing to the newly created ClientRegistrar object.
ClientRegistrarPtr Tp::ClientRegistrar::create ( const QDBusConnection &  bus,
const AccountFactoryConstPtr &  accountFactory,
const ConnectionFactoryConstPtr &  connectionFactory,
const ChannelFactoryConstPtr &  channelFactory,
const ContactFactoryConstPtr &  contactFactory 
) [static]

Create a new client registrar object using the given bus and the given factories.

Parameters:
busQDBusConnection to use.
accountFactoryThe account factory to use.
connectionFactoryThe connection factory to use.
channelFactoryThe channel factory to use.
contactFactoryThe contact factory to use.
Returns:
A ClientRegistrarPtr object pointing to the newly created ClientRegistrar object.
ClientRegistrarPtr Tp::ClientRegistrar::create ( const AccountManagerPtr &  manager) [static]

Create a new client registrar object using the bus and factories of the given Account manager.

Using this create method will enable (like any other way of passing the same factories to an AM and a registrar) getting the same Account/Connection etc. proxy instances from both AccountManager and AbstractClient implementations.

Parameters:
managerThe AccountManager the bus and factories of which should be used.
Returns:
A ClientRegistrarPtr object pointing to the newly ClientRegistrar object.
QDBusConnection Tp::ClientRegistrar::dbusConnection ( ) const

Return the D-Bus connection being used by this client registrar.

Returns:
A QDBusConnection object.
AccountFactoryConstPtr Tp::ClientRegistrar::accountFactory ( ) const

Get the account factory used by this client registrar.

Only read access is provided. This allows constructing object instances and examining the object construction settings, but not changing settings. Allowing changes would lead to tricky situations where objects constructed at different times by the registrar would have unpredictably different construction settings (eg. subclass).

Returns:
A read-only pointer to the AccountFactory object.
ConnectionFactoryConstPtr Tp::ClientRegistrar::connectionFactory ( ) const

Get the connection factory used by this client registrar.

Only read access is provided. This allows constructing object instances and examining the object construction settings, but not changing settings. Allowing changes would lead to tricky situations where objects constructed at different times by the registrar would have unpredictably different construction settings (eg. subclass).

Returns:
A read-only pointer to the ConnectionFactory object.
ChannelFactoryConstPtr Tp::ClientRegistrar::channelFactory ( ) const

Get the channel factory used by this client registrar.

Only read access is provided. This allows constructing object instances and examining the object construction settings, but not changing settings. Allowing changes would lead to tricky situations where objects constructed at different times by the registrar would have unpredictably different construction settings (eg. subclass).

Returns:
A read-only pointer to the ChannelFactory object.
ContactFactoryConstPtr Tp::ClientRegistrar::contactFactory ( ) const

Get the contact factory used by this client registrar.

Only read access is provided. This allows constructing object instances and examining the object construction settings, but not changing settings. Allowing changes would lead to tricky situations where objects constructed at different times by the registrar would have unpredictably different construction settings (eg. subclass).

Returns:
A read-only pointer to the ContactFactory object.
QList< AbstractClientPtr > Tp::ClientRegistrar::registeredClients ( ) const

Return the list of clients registered using registerClient() on this client registrar.

Returns:
A list of pointers to AbstractClient objects.
See also:
registerClient(), unregisterClient()
bool Tp::ClientRegistrar::registerClient ( const AbstractClientPtr &  client,
const QString &  clientName,
bool  unique = false 
)

Register a client on D-Bus.

The client registrar will export the appropriate D-Bus interfaces, based on the abstract classes subclassed by

Parameters:
client.If each of a client instance should be able to manipulate channels separately, set unique to true.

The client name MUST be a non-empty string of ASCII digits, letters, dots and/or underscores, starting with a letter, and without sets of two consecutive dots or a dot followed by a digit.

This method will do nothing if the client is already registered, and true will be returned.

To unregister a client use unregisterClient().

Parameters:
clientThe client to register.
clientNameThe client name used to register.
uniqueWhether each of a client instance is able to manipulate channels separately.
Returns:
true if client was successfully registered, false otherwise.
See also:
registeredClients(), unregisterClient()
bool Tp::ClientRegistrar::unregisterClient ( const AbstractClientPtr &  client)

Unregister a client registered using registerClient() on this client registrar.

If client was not registered previously, false will be returned.

Parameters:
clientThe client to unregister.
Returns:
true if client was successfully unregistered, false otherwise.
See also:
registeredClients(), registerClient()

Unregister all clients registered using registerClient() on this client registrar.

See also:
registeredClients(), registerClient(), unregisterClient()


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00813.html0000644000175200001440000001250312000060453021622 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::FunctorCaller7< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 > Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00094.html0000644000175200001440000017270112000060453021632 0ustar00collabora-develusers00000000000000 Tp::Client::CallStreamInterfaceMediaInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::CallStreamInterfaceMediaInterface Class Reference

#include <TelepathyQt/CallStream>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Call1.Stream.Interface.Media".


Constructor & Destructor Documentation

Tp::Client::CallStreamInterfaceMediaInterface::CallStreamInterfaceMediaInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a CallStreamInterfaceMediaInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::CallStreamInterfaceMediaInterface::CallStreamInterfaceMediaInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a CallStreamInterfaceMediaInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a CallStreamInterfaceMediaInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a CallStreamInterfaceMediaInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a CallStreamInterfaceMediaInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

static QLatin1String Tp::Client::CallStreamInterfaceMediaInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Call1.Stream.Interface.Media", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property SendingState of type uint.

Indicates whether the streaming implementation is/should be sending media for this stream. The streaming implementation should be able to rely on reading this value and listening to SendingStateChanged to determine whether it should be sending media or not. It should not need to listen to the Hold interfaces on the Call/Content. Feedback on success should be given via CompleteSendingStateChange. Failures should be reported via ReportSendingFailure.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property ReceivingState of type uint.

The counterpart of SendingState. Indicates whether the streaming implementation is/should be expecting to receive media for this stream. The CM should only tell the streaming implementation to stop receiving if it has been told to put the stream on hold, or the stream has been removed from the call.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Transport of type uint.

The transport for this stream.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property LocalCandidates of type Tp::CandidateList.

[FIXME]. Change notification is via the LocalCandidatesAdded signal.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property LocalCredentials of type Tp::StreamCredentials.

The local credentials are sent to the remote site over the signalling protocol. They are used in ICE to make sure that the connectivity checks come from the right peer. Change notification is via the LocalCredentialsChanged signal. This property will be a pair of empty strings if ICE has not yet been started.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property STUNServers of type Tp::SocketAddressIPList.

The IP addresses of possible STUN servers to use for NAT traversal, as dotted-quad IPv4 address literals or RFC2373 IPv6 address literals. Change notification is via the STUNServersChanged() signal. The IP addresses MUST NOT be given as DNS hostnames.

High-quality connection managers already need an asynchronous DNS resolver, so they might as well resolve this name to an IP to make life easier for streaming implementations.
Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property RelayInfo of type Tp::StringVariantMapList.

A list of mappings describing TURN or Google relay servers available for the client to use in its candidate gathering, as determined from the protocol. Well-known map keys are:

ip - s
The IP address of the relay server as a dotted-quad IPv4 address literal or an RFC2373 IPv6 address literal. This MUST NOT be a DNS hostname.
High-quality connection managers already need an asynchronous DNS resolver, so they might as well resolve this name to an IP and make life easier for streaming implementations.
type - s

Either udp for UDP (UDP MUST be assumed if this key is omitted), tcp for TCP, or tls.

The precise meaning of this key depends on the Transport property: if Transport is ICE, tls means TLS over TCP as referenced by ICE draft 19, and if Transport is GTalk_P2P, tls means a fake SSL session over TCP as implemented by libjingle.

port - q
The UDP or TCP port of the relay server as an ASCII unsigned integer
unique-id - s
A string identifying the relay server. If two RelayInfo entries have the same unique-id, but different types, there is usually little point in connecting to both. Use priority to determine which version to prefer in this case. Can also be used by the streaming implementation to avoid connecting to the same relay multiple times if relaying is required for both audio and video.
priority - u
A number determining which version of a server to prefer (if multiple are present with the same unique-id, the one with the highest priority should be used, or the streaming implementation should use the one whose type has the most desirable properties)
username - s
The username to use
password - s
The password to use
component - u
The component number to use this relay server for, as an ASCII unsigned integer; if not included, this relay server may be used for any or all components.
In ICE draft 6, as used by Google Talk, credentials are only valid once, so each component needs relaying separately.

An equivalent of the gtalk-p2p-relay-token property on MediaSignalling channels is not included here. The connection manager should be responsible for making the necessary HTTP requests to turn the token into a username and password.

The type of relay server that this represents depends on the value of the Transport property. If Transport is ICE, this is a TURN server; if Transport is GTalk_P2P, this is a Google relay server; otherwise, the meaning of RelayInfo is undefined.

If relaying is not possible for this stream, the list is empty.

Change notification is given via the RelayInfoChanged() signal.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property HasServerInfo of type bool.

True if all the initial information about STUN servers and Relay servers has been retrieved. Change notification is via the ServerInfoRetrieved() signal.

Streaming implementations that can't cope with STUN and relay servers being added later SHOULD wait for this property to become true before proceeding.
Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Endpoints of type Tp::ObjectPathList.

The list of Endpoint objects that exist for this stream. Change notification is via the EndpointsChanged signal.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property ICERestartPending of type bool.

State recovery for ICERestartRequested. Set when the signal is emitted, and unset when SetCredentials is called. Useful for debugging.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::CallStreamInterfaceMediaInterface::CompleteSendingStateChange ( uint  state,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method CompleteSendingStateChange on the remote object.

Called in response to SendingStateChanged() (Pending_*, *) to indicate that the media state has successfully progressed from Pending_{Start, Stop, Pause} to the corresponding non-pending state.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
stateThe new (non-pending) value of SendingState.
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::CallStreamInterfaceMediaInterface::ReportSendingFailure ( uint  reason,
const QString &  error,
const QString &  message,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method ReportSendingFailure on the remote object.

Can be called at any point to indicate a failure in the outgoing portion of the stream.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::CallStreamInterfaceMediaInterface::CompleteReceivingStateChange ( uint  state,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method CompleteReceivingStateChange on the remote object.

Called in response to ReceivingStateChanged() (Pending_*, *) to indicate that the media state has successfully progressed from Pending_{Start, Stop, Pause} to the corresponding non-pending state.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
stateThe new (non-pending) value of ReceivingState.
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::CallStreamInterfaceMediaInterface::ReportReceivingFailure ( uint  reason,
const QString &  error,
const QString &  message,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method ReportReceivingFailure on the remote object.

Can be called at any point to indicate a failure in the incoming portion of the stream.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::CallStreamInterfaceMediaInterface::SetCredentials ( const QString &  username,
const QString &  password,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method SetCredentials on the remote object.

Used to set the username fragment and password for streams that have global credentials.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
usernameThe username to use when authenticating on the stream.
passwordThe password to use when authenticating on the stream.
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::CallStreamInterfaceMediaInterface::AddCandidates ( const Tp::CandidateList candidates,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method AddCandidates on the remote object.

Add candidates to the LocalCandidates property and signal them to the remote contact(s). Note that connection managers MAY delay the sending of candidates until FinishInitialCandidates is called.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
candidatesThe candidates to be added.
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::CallStreamInterfaceMediaInterface::FinishInitialCandidates ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method FinishInitialCandidates on the remote object.

This indicates to the CM that the initial batch of candidates has been added, and should now be processed/sent to the remote side. Protocols supporting Raw UDP SHOULD wait for FinishInitialCandidates, and then set the lowest priority candidate as the Raw UDP candidate.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::CallStreamInterfaceMediaInterface::Fail ( const Tp::CallStateReason reason,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method Fail on the remote object.

Signal an unrecoverable error for this stream, and remove it. If all streams are removed from a content, then it will also be removed.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
reasonA structured reason for stream removal.
timeoutThe timeout in milliseconds.

Represents the signal SendingStateChanged on the remote object.

Change notification for SendingState. Note that this information is duplicated onto the Stream interface, so that UIs can ignore the Media interface, and streaming implementations can ignore everything but the media interface.

Parameters:
stateThe new value of SendingState.

Represents the signal ReceivingStateChanged on the remote object.

Change notification for ReceivingState.

Parameters:
stateThe new value of ReceivingState.

Represents the signal LocalCandidatesAdded on the remote object.

Emitted when local candidates are added to the LocalCandidates property.

Parameters:
candidatesCandidates that have been added.
void Tp::Client::CallStreamInterfaceMediaInterface::LocalCredentialsChanged ( const QString &  username,
const QString &  password 
) [signal]

Represents the signal LocalCredentialsChanged on the remote object.

Emitted when the value of LocalCredentials changes to a non-empty value. This should only happen when the streaming implementation calls SetCredentials, so this signal is mostly useful for debugging.

Represents the signal RelayInfoChanged on the remote object.

Emitted when the value of RelayInfo changes.

Represents the signal STUNServersChanged on the remote object.

Emitted when the value of STUNServers changes.

Represents the signal ServerInfoRetrieved on the remote object.

Signals that the initial information about STUN and Relay servers has been retrieved, i.e. the HasServerInfo property is now true.

void Tp::Client::CallStreamInterfaceMediaInterface::EndpointsChanged ( const Tp::ObjectPathList endpointsAdded,
const Tp::ObjectPathList endpointsRemoved 
) [signal]

Represents the signal EndpointsChanged on the remote object.

Emitted when the Endpoints property changes.

Parameters:
endpointsAddedEndpoints that were added.
endpointsRemovedEndpoints that no longer exist.

Represents the signal ICERestartRequested on the remote object.

Emitted when the remote side requests an ICE restart (e.g. third party call control, when the remote endpoint changes). The streaming implementation should call SetCredentials again.

void Tp::Client::CallStreamInterfaceMediaInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00237.html0000644000175200001440000001711212000060453021623 0ustar00collabora-develusers00000000000000 Tp::FunctorCaller3< Functor, R, Arg1, Arg2, Arg3 > Struct Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::FunctorCaller3< Functor, R, Arg1, Arg2, Arg3 > Struct Template Reference

#include </home/collabora-devel/kde/src/telepathy-qt4/TelepathyQt/callbacks.h>

Inherits Tp::BaseFunctorCaller< FunctorCaller3< Functor, R, Arg1, Arg2, Arg3 >, Functor >.

List of all members.

Public Types

Public Member Functions

Static Public Member Functions

template<class Functor, class R, class Arg1, class Arg2, class Arg3>
struct Tp::FunctorCaller3< Functor, R, Arg1, Arg2, Arg3 >


Member Typedef Documentation

template<class Functor , class R , class Arg1 , class Arg2 , class Arg3 >
typedef R Tp::FunctorCaller3< Functor, R, Arg1, Arg2, Arg3 >::ResultType
template<class Functor , class R , class Arg1 , class Arg2 , class Arg3 >
typedef R(* Tp::FunctorCaller3< Functor, R, Arg1, Arg2, Arg3 >::InvokeType)(AbstractFunctorCaller *, Arg1, Arg2, Arg3)

Constructor & Destructor Documentation

template<class Functor , class R , class Arg1 , class Arg2 , class Arg3 >
Tp::FunctorCaller3< Functor, R, Arg1, Arg2, Arg3 >::FunctorCaller3 ( const Functor &  functor) [inline, explicit]

Member Function Documentation

template<class Functor , class R , class Arg1 , class Arg2 , class Arg3 >
static ResultType Tp::FunctorCaller3< Functor, R, Arg1, Arg2, Arg3 >::invoke ( AbstractFunctorCaller call,
Arg1  a1,
Arg2  a2,
Arg3  a3 
) [inline, static]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00138.html0000644000175200001440000002762612000060453021636 0ustar00collabora-develusers00000000000000 Tp::ChannelRequestHints Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ChannelRequestHints Class Reference

The ChannelRequestHints class represents a dictionary of metadata provided by the channel requester when requesting a channel. More...

#include <TelepathyQt/ChannelRequestHints>

List of all members.

Public Member Functions


Detailed Description

The ChannelRequestHints class represents a dictionary of metadata provided by the channel requester when requesting a channel.


Constructor & Destructor Documentation

Tp::ChannelRequestHints::ChannelRequestHints ( const QVariantMap &  hints)

Member Function Documentation

ChannelRequestHints & Tp::ChannelRequestHints::operator= ( const ChannelRequestHints other)
bool Tp::ChannelRequestHints::hasHint ( const QString &  reversedDomain,
const QString &  localName 
) const
QVariant Tp::ChannelRequestHints::hint ( const QString &  reversedDomain,
const QString &  localName 
) const
void Tp::ChannelRequestHints::setHint ( const QString &  reversedDomain,
const QString &  localName,
const QVariant &  value 
)
QVariantMap Tp::ChannelRequestHints::allHints ( ) const


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01024.html0000644000175200001440000000457712000060453021631 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::SimplePresence Member List
This is the complete list of members for Tp::SimplePresence, including all inherited members.
statusTp::SimplePresence
statusMessageTp::SimplePresence
typeTp::SimplePresence


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00761.html0000644000175200001440000010557412000060453021637 0ustar00collabora-develusers00000000000000 List types
   Home · All Classes · All Namespaces · Modules · Functions · Files

Classes

Typedefs


Detailed Description

List types generated from the specification.


Typedef Documentation

typedef QList<AliasPair> Tp::AliasPairList

Array of AliasPair values.

typedef QList<CallMemberMap> Tp::CallMemberMapList

Array of CallMemberMap values.

typedef QList<Candidate> Tp::CandidateList

Array of Candidate values.

typedef QList<CapabilityChange> Tp::CapabilityChangeList

Array of CapabilityChange values.

typedef QList<CapabilityPair> Tp::CapabilityPairList

Array of CapabilityPair values.

typedef QList<CaptchaInfo> Tp::CaptchaInfoList

Array of CaptchaInfo values.

typedef QList<ChannelClass> Tp::ChannelClassList

Array of ChannelClass values.

typedef QList<ChannelDetails> Tp::ChannelDetailsList

Array of ChannelDetails values.

typedef QList<ChannelInfo> Tp::ChannelInfoList

Array of ChannelInfo values.

typedef QList<ContactCapability> Tp::ContactCapabilityList

Array of ContactCapability values.

typedef QList<ContactInfoField> Tp::ContactInfoFieldList

Array of ContactInfoField values.

typedef QList<DBusTubeMember> Tp::DBusTubeMemberList

Array of DBusTubeMember values.

typedef QList<DebugMessage> Tp::DebugMessageList

Array of DebugMessage values.

typedef QList<FieldSpec> Tp::FieldSpecs

Array of FieldSpec values.

typedef QList<HTTPPostData> Tp::HTTPPostDataList

Array of HTTPPostData values.

typedef QList<LocalPendingInfo> Tp::LocalPendingInfoList

Array of LocalPendingInfo values.

typedef QList<Mail> Tp::MailList

Array of Mail values.

typedef QList<MailAddress> Tp::MailAddressList

Array of MailAddress values.

typedef QList<MediaSessionHandlerInfo> Tp::MediaSessionHandlerInfoList

Array of MediaSessionHandlerInfo values.

typedef QList<MediaStreamHandlerTransport> Tp::MediaStreamHandlerTransportList

Array of MediaStreamHandlerTransport values.

typedef QList<MediaStreamInfo> Tp::MediaStreamInfoList

Array of MediaStreamInfo values.

typedef QList<MessagePart> Tp::MessagePartList

Array of MessagePart values.

typedef QList<MessagePartList> Tp::MessagePartListList

Array of MessagePartList values.

typedef QList<ObjectImmutablePropertiesMap> Tp::ObjectImmutablePropertiesMapList

Array of ObjectImmutablePropertiesMap values.

typedef QList<ParamSpec> Tp::ParamSpecList

Array of ParamSpec values.

typedef QList<PendingTextMessage> Tp::PendingTextMessageList

Array of PendingTextMessage values.

typedef QList<PropertyFlagsChange> Tp::PropertyFlagsChangeList

Array of PropertyFlagsChange values.

typedef QList<PropertySpec> Tp::PropertySpecList

Array of PropertySpec values.

typedef QList<PropertyValue> Tp::PropertyValueList

Array of PropertyValue values.

typedef QList<QualifiedPropertyValueMap> Tp::QualifiedPropertyValueMapList

Array of QualifiedPropertyValueMap values.

typedef QList<RTCPFeedbackMessage> Tp::RTCPFeedbackMessageList

Array of RTCPFeedbackMessage values.

typedef QList<RTPHeaderExtension> Tp::RTPHeaderExtensionsList

Array of RTPHeaderExtension values.

typedef QList<RequestableChannelClass> Tp::RequestableChannelClassList

Array of RequestableChannelClass values.

typedef QList<RoomInfo> Tp::RoomInfoList

Array of RoomInfo values.

typedef QList<SocketAddressIP> Tp::SocketAddressIPList

Array of SocketAddressIP values.

typedef QList<StringStringMap> Tp::StringStringMapList

Array of StringStringMap values.

typedef QList<StringVariantMap> Tp::StringVariantMapList

Array of StringVariantMap values.

typedef QList<TLSCertificateRejection> Tp::TLSCertificateRejectionList

Array of TLSCertificateRejection values.

typedef QList<TubeInfo> Tp::TubeInfoList

Array of TubeInfo values.

typedef QList<VideoResolution> Tp::VideoResolutionStruct

Array of VideoResolution values.

typedef QList<CandidatePair> Tp::CandidatePairList

Array of CandidatePair values.

typedef QList<Codec> Tp::CodecList

Array of Codec values.

typedef QList<ContactCapabilitiesMap> Tp::ContactCapabilitiesMapList

Array of ContactCapabilitiesMap values.

typedef QList<HandlerCapabilities> Tp::HandlerCapabilitiesList

Array of HandlerCapabilities values.

typedef QList<MediaStreamHandlerCandidate> Tp::MediaStreamHandlerCandidateList

Array of MediaStreamHandlerCandidate values.

typedef QList<MediaStreamHandlerCodec> Tp::MediaStreamHandlerCodecList

Array of MediaStreamHandlerCodec values.

typedef QList<ServicePointInfo> Tp::ServicePointInfoList

Array of ServicePointInfo values.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_func_0x79.html0000644000175200001440000000301212000060453024613 0ustar00collabora-develusers00000000000000 Class Members - Functions
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- y -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/tab_b.png0000644000175200001440000000026212000060453021674 0ustar00collabora-develusers00000000000000PNG  IHDR$[yIDATx ?|SVӈbB#P8O:əD>m{SI'z(!TBމy#WJDp|Å R] 6q]qD.&0=JD=@**IENDB`telepathy-qt-0.9.3/doc/html/a00356.html0000644000175200001440000002122612000060453021626 0ustar00collabora-develusers00000000000000 Tp::PtrFunctor6< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 > Struct Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PtrFunctor6< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 > Struct Template Reference

#include </home/collabora-devel/kde/src/telepathy-qt4/TelepathyQt/functors.h>

Inherits Tp::BaseFunctor.

List of all members.

Public Types

Public Member Functions

Public Attributes

template<class R, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6>
struct Tp::PtrFunctor6< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >


Member Typedef Documentation

template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 , class Arg6 >
typedef R(* Tp::PtrFunctor6< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >::FunctionType)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6)
template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 , class Arg6 >
typedef R Tp::PtrFunctor6< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >::ResultType

Constructor & Destructor Documentation

template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 , class Arg6 >
Tp::PtrFunctor6< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >::PtrFunctor6 ( FunctionType  fn) [inline]

Member Function Documentation

template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 , class Arg6 >
ResultType Tp::PtrFunctor6< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >::operator() ( Arg1  a1,
Arg2  a2,
Arg3  a3,
Arg4  a4,
Arg5  a5,
Arg6  a6 
) const [inline]

Member Data Documentation

template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 , class Arg6 >
FunctionType Tp::PtrFunctor6< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >::fn


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00819.html0000644000175200001440000000611712000060453021634 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ChannelClassSpecList Member List
This is the complete list of members for Tp::ChannelClassSpecList, including all inherited members.
bareClasses() const Tp::ChannelClassSpecList [inline]
ChannelClassSpecList()Tp::ChannelClassSpecList [inline]
ChannelClassSpecList(const ChannelClassSpec &spec)Tp::ChannelClassSpecList [inline]
ChannelClassSpecList(const QList< ChannelClassSpec > &other)Tp::ChannelClassSpecList [inline]
ChannelClassSpecList(const ChannelClassList &classes)Tp::ChannelClassSpecList [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01030.html0000644000175200001440000000432512000060453021615 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::SocketNetmaskIPv4 Member List
This is the complete list of members for Tp::SocketNetmaskIPv4, including all inherited members.
addressTp::SocketNetmaskIPv4
prefixLengthTp::SocketNetmaskIPv4


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00662_source.html0000644000175200001440000001202712000060453023205 0ustar00collabora-develusers00000000000000 pending-variant-map.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
pending-variant-map.h
00001 
00023 #ifndef _TelepathyQt_pending_variant_map_h_HEADER_GUARD_
00024 #define _TelepathyQt_pending_variant_map_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Global>
00031 #include <TelepathyQt/PendingOperation>
00032 
00033 #include <QVariant>
00034 
00035 namespace Tp
00036 {
00037 
00038 class TP_QT_EXPORT PendingVariantMap : public PendingOperation
00039 {
00040     Q_OBJECT
00041     Q_DISABLE_COPY(PendingVariantMap);
00042 
00043 public:
00044     PendingVariantMap(QDBusPendingCall call, const SharedPtr<RefCounted> &object);
00045     ~PendingVariantMap();
00046 
00047     QVariantMap result() const;
00048 
00049 private Q_SLOTS:
00050     TP_QT_NO_EXPORT void watcherFinished(QDBusPendingCallWatcher*);
00051 
00052 private:
00053     struct Private;
00054     friend struct Private;
00055     Private *mPriv;
00056 };
00057 
00058 } // Tp
00059 
00060 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00501_source.html0000644000175200001440000003462312000060453023203 0ustar00collabora-develusers00000000000000 cli-channel-request.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-channel-request.h
00001 /*
00002  * This file contains D-Bus client proxy classes generated by qt-client-gen.py.
00003  *
00004  * This file can be distributed under the same terms as the specification from
00005  * which it was generated.
00006  */
00007 
00008 #ifndef IN_TP_QT_HEADER
00009 #error IN_TP_QT_HEADER
00010 #endif
00011 
00012 #include <TelepathyQt/Types>
00013 
00014 #include <QtGlobal>
00015 
00016 #include <QString>
00017 #include <QObject>
00018 #include <QVariant>
00019 
00020 #include <QDBusPendingReply>
00021 
00022 #include <TelepathyQt/AbstractInterface>
00023 #include <TelepathyQt/DBusProxy>
00024 #include <TelepathyQt/Global>
00025 
00026 namespace Tp
00027 {
00028 class PendingVariant;
00029 class PendingOperation;
00030 }
00031 
00032 namespace Tp
00033 {
00034 namespace Client
00035 {
00036 
00044 class TP_QT_EXPORT ChannelRequestInterface : public Tp::AbstractInterface
00045 {
00046     Q_OBJECT
00047 
00048 public:
00055     static inline QLatin1String staticInterfaceName()
00056     {
00057         return QLatin1String("org.freedesktop.Telepathy.ChannelRequest");
00058     }
00059 
00067     ChannelRequestInterface(
00068         const QString& busName,
00069         const QString& objectPath,
00070         QObject* parent = 0
00071     );
00072 
00081     ChannelRequestInterface(
00082         const QDBusConnection& connection,
00083         const QString& busName,
00084         const QString& objectPath,
00085         QObject* parent = 0
00086     );
00087 
00094     ChannelRequestInterface(Tp::DBusProxy *proxy);
00095 
00105     inline Tp::PendingVariant *requestPropertyAccount() const
00106     {
00107         return internalRequestProperty(QLatin1String("Account"));
00108     }
00109 
00125     inline Tp::PendingVariant *requestPropertyUserActionTime() const
00126     {
00127         return internalRequestProperty(QLatin1String("UserActionTime"));
00128     }
00129 
00148     inline Tp::PendingVariant *requestPropertyPreferredHandler() const
00149     {
00150         return internalRequestProperty(QLatin1String("PreferredHandler"));
00151     }
00152 
00173     inline Tp::PendingVariant *requestPropertyRequests() const
00174     {
00175         return internalRequestProperty(QLatin1String("Requests"));
00176     }
00177 
00188     inline Tp::PendingVariant *requestPropertyInterfaces() const
00189     {
00190         return internalRequestProperty(QLatin1String("Interfaces"));
00191     }
00192 
00275     inline Tp::PendingVariant *requestPropertyHints() const
00276     {
00277         return internalRequestProperty(QLatin1String("Hints"));
00278     }
00279 
00286     Tp::PendingVariantMap *requestAllProperties() const
00287     {
00288         return internalRequestAllProperties();
00289     }
00290 
00291 public Q_SLOTS:
00324     inline QDBusPendingReply<> Proceed(int timeout = -1)
00325     {
00326         if (!invalidationReason().isEmpty()) {
00327             return QDBusPendingReply<>(QDBusMessage::createError(
00328                 invalidationReason(),
00329                 invalidationMessage()
00330             ));
00331         }
00332 
00333         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00334                 this->staticInterfaceName(), QLatin1String("Proceed"));
00335         return this->connection().asyncCall(callMessage, timeout);
00336     }
00337 
00380     inline QDBusPendingReply<> Cancel(int timeout = -1)
00381     {
00382         if (!invalidationReason().isEmpty()) {
00383             return QDBusPendingReply<>(QDBusMessage::createError(
00384                 invalidationReason(),
00385                 invalidationMessage()
00386             ));
00387         }
00388 
00389         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00390                 this->staticInterfaceName(), QLatin1String("Cancel"));
00391         return this->connection().asyncCall(callMessage, timeout);
00392     }
00393 
00394 Q_SIGNALS:
00417     void Failed(const QString& error, const QString& message);
00418 
00427     void Succeeded();
00428 
00469     void SucceededWithChannel(const QDBusObjectPath& connection, const QVariantMap& connectionProperties, const QDBusObjectPath& channel, const QVariantMap& channelProperties);
00470 
00471 protected:
00472     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
00473 };
00474 }
00475 }
00476 Q_DECLARE_METATYPE(Tp::Client::ChannelRequestInterface*)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00349.html0000644000175200001440000001224512000060453021631 0ustar00collabora-develusers00000000000000 Tp::ProtocolPropertiesMap Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ProtocolPropertiesMap Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<QString, QVariantMap>, but needed to have a discrete type in the Qt type system.

A map from protocol identifiers supported by a connection manager to the immutable properties of the corresponding ProtocolInterface objects.


Constructor & Destructor Documentation

Tp::ProtocolPropertiesMap::ProtocolPropertiesMap ( const QMap< QString, QVariantMap > &  a) [inline]

Member Function Documentation

ProtocolPropertiesMap& Tp::ProtocolPropertiesMap::operator= ( const QMap< QString, QVariantMap > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00893.html0000644000175200001440000010562112000060453021636 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::OutgoingStreamTubeChannel Member List
This is the complete list of members for Tp::OutgoingStreamTubeChannel, including all inherited members.
accessControl() const Tp::StreamTubeChannel [protected]
actualFeatures() const Tp::ReadyObject [virtual]
addConnection(uint connection)Tp::StreamTubeChannel [protected]
addressType() const Tp::StreamTubeChannel
baseInterface() const Tp::Channel [protected]
becomeReady(const Features &requestedFeatures=Features())Tp::ReadyObject [virtual]
busName() const Tp::DBusProxy
BypassInterfaceCheck enum valueTp::OptionalInterfaceFactory< Channel >
Channel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature)Tp::Channel [protected]
channelType() const Tp::Channel
CheckInterfaceSupported enum valueTp::OptionalInterfaceFactory< Channel >
conferenceChannelMerged(const Tp::ChannelPtr &channel)Tp::Channel [signal]
conferenceChannelRemoved(const Tp::ChannelPtr &channel, const Tp::Channel::GroupMemberChangeDetails &details)Tp::Channel [signal]
conferenceChannels() const Tp::Channel
conferenceInitialChannels() const Tp::Channel
conferenceInitialInviteeContacts() const Tp::Channel
conferenceMergeChannel(const ChannelPtr &channel)Tp::Channel
conferenceOriginalChannels() const Tp::Channel
conferenceSplitChannel()Tp::Channel
connection() const Tp::Channel
connectionClosed(uint connectionId, const QString &errorName, const QString &errorMessage)Tp::StreamTubeChannel [signal]
connections() const Tp::StreamTubeChannel
connectionsForCredentials() const Tp::OutgoingStreamTubeChannel
connectionsForSourceAddresses() const Tp::OutgoingStreamTubeChannel
contactsForConnections() const Tp::OutgoingStreamTubeChannel
create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties)Tp::OutgoingStreamTubeChannel [static]
dbusConnection() const Tp::DBusProxy
DBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::DBusProxy
FeatureConferenceInitialInviteeContactsTp::Channel [static]
FeatureConnectionMonitoringTp::StreamTubeChannel [static]
FeatureCoreTp::OutgoingStreamTubeChannel [static]
groupAddContacts(const QList< ContactPtr > &contacts, const QString &message=QString())Tp::Channel
groupAddSelfHandle()Tp::Channel [protected, slot]
groupAreHandleOwnersAvailable() const Tp::Channel
groupCanAcceptContactsWithMessage() const Tp::Channel
groupCanAddContacts() const Tp::Channel
groupCanAddContactsChanged(bool canAddContacts)Tp::Channel [signal]
groupCanAddContactsWithMessage() const Tp::Channel
groupCanDepartWithMessage() const Tp::Channel
groupCanRejectContactsWithMessage() const Tp::Channel
groupCanRemoveContacts() const Tp::Channel
groupCanRemoveContactsChanged(bool canRemoveContacts)Tp::Channel [signal]
groupCanRemoveContactsWithMessage() const Tp::Channel
groupCanRescindContacts() const Tp::Channel
groupCanRescindContactsChanged(bool canRescindContacts)Tp::Channel [signal]
groupCanRescindContactsWithMessage() const Tp::Channel
groupContacts(bool includeSelfContact=true) const Tp::Channel
groupFlags() const Tp::Channel
groupFlagsChanged(Tp::ChannelGroupFlags flags, Tp::ChannelGroupFlags added, Tp::ChannelGroupFlags removed)Tp::Channel [signal]
groupHandleOwners() const Tp::Channel
groupHandleOwnersChanged(const Tp::HandleOwnerMap &owners, const Tp::UIntList &added, const Tp::UIntList &removed)Tp::Channel [signal]
groupIsSelfContactTracked() const Tp::Channel
groupLocalPendingContactChangeInfo(const ContactPtr &contact) const Tp::Channel
groupLocalPendingContacts(bool includeSelfContact=true) const Tp::Channel
groupMembersChanged(const Tp::Contacts &groupMembersAdded, const Tp::Contacts &groupLocalPendingMembersAdded, const Tp::Contacts &groupRemotePendingMembersAdded, const Tp::Contacts &groupMembersRemoved, const Tp::Channel::GroupMemberChangeDetails &details)Tp::Channel [signal]
groupRemotePendingContacts(bool includeSelfContact=true) const Tp::Channel
groupRemoveContacts(const QList< ContactPtr > &contacts, const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone)Tp::Channel
groupSelfContact() const Tp::Channel
groupSelfContactChanged()Tp::Channel [signal]
groupSelfContactRemoveInfo() const Tp::Channel
groupSelfHandleIsLocalPending() const Tp::Channel [protected]
hasInterface(const QString &name) constTp::OptionalInterfaceFactory< Channel > [inline]
immutableProperties() const Tp::Channel
initiatorContact() const Tp::Channel
interface() constTp::OptionalInterfaceFactory< Channel > [inline]
interfaces() constTp::OptionalInterfaceFactory< Channel > [inline]
InterfaceSupportedChecking enum nameTp::OptionalInterfaceFactory< Channel >
invalidate(const QString &reason, const QString &message)Tp::DBusProxy [protected]
invalidate(const QDBusError &error)Tp::DBusProxy [protected]
invalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage)Tp::DBusProxy [signal]
invalidationMessage() const Tp::DBusProxy
invalidationReason() const Tp::DBusProxy
ipAddress() const Tp::StreamTubeChannel
isConference() const Tp::Channel
isDroppingConnections() const Tp::StreamTubeChannel [protected]
isReady(const Features &features=Features()) const Tp::ReadyObject [virtual]
isRequested() const Tp::Channel
isValid() const Tp::DBusProxy
localAddress() const Tp::StreamTubeChannel
missingFeatures() const Tp::ReadyObject [virtual]
newConnection(uint connectionId)Tp::StreamTubeChannel [signal]
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
objectPath() const Tp::DBusProxy
offerTcpSocket(const QHostAddress &address, quint16 port, const QVariantMap &parameters=QVariantMap())Tp::OutgoingStreamTubeChannel
offerTcpSocket(const QTcpServer *server, const QVariantMap &parameters=QVariantMap())Tp::OutgoingStreamTubeChannel
offerUnixSocket(const QString &socketAddress, const QVariantMap &parameters=QVariantMap(), bool requireCredentials=false)Tp::OutgoingStreamTubeChannel
offerUnixSocket(const QLocalServer *server, const QVariantMap &parameters=QVariantMap(), bool requireCredentials=false)Tp::OutgoingStreamTubeChannel
optionalInterface(InterfaceSupportedChecking check=CheckInterfaceSupported) constTp::OptionalInterfaceFactory< Channel > [inline]
OptionalInterfaceFactory(Channel *this_)Tp::OptionalInterfaceFactory< Channel > [inline]
OutgoingStreamTubeChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature=OutgoingStreamTubeChannel::FeatureCore)Tp::OutgoingStreamTubeChannel [protected]
parameters() const Tp::TubeChannel
propertyChanged(const QString &propertyName)Tp::Object [signal]
readinessHelper() const Tp::ReadyObject [protected]
ReadyObject(RefCounted *object, const Feature &featureCore)Tp::ReadyObject
ReadyObject(DBusProxy *proxy, const Feature &featureCore)Tp::ReadyObject
RefCounted()Tp::RefCounted [inline]
removeConnection(uint connection, const QString &error, const QString &message)Tp::StreamTubeChannel [protected]
requestClose()Tp::Channel
requestedFeatures() const Tp::ReadyObject [virtual]
requestLeave(const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone)Tp::Channel
service() const Tp::StreamTubeChannel
setAccessControl(SocketAccessControl accessControl)Tp::StreamTubeChannel [protected]
setAddressType(SocketAddressType type)Tp::StreamTubeChannel [protected]
setBusName(const QString &busName)Tp::DBusProxy [protected]
setInterfaces(const QStringList &interfaces)Tp::OptionalInterfaceFactory< Channel > [inline, protected]
setIpAddress(const QPair< QHostAddress, quint16 > &address)Tp::StreamTubeChannel [protected]
setLocalAddress(const QString &address)Tp::StreamTubeChannel [protected]
setParameters(const QVariantMap &parameters)Tp::TubeChannel [protected]
state() const Tp::TubeChannel
stateChanged(Tp::TubeChannelState state)Tp::TubeChannel [signal]
StatefulDBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::StatefulDBusProxy
StreamTubeChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature=StreamTubeChannel::FeatureCore)Tp::StreamTubeChannel [protected]
supportsAbstractUnixSocketsOnLocalhost() const Tp::StreamTubeChannel
supportsAbstractUnixSocketsWithCredentials() const Tp::StreamTubeChannel
supportsConferenceMerging() const Tp::Channel
supportsConferenceSplitting() const Tp::Channel
supportsIPv4SocketsOnLocalhost() const Tp::StreamTubeChannel
supportsIPv4SocketsWithSpecifiedAddress() const Tp::StreamTubeChannel
supportsIPv6SocketsOnLocalhost() const Tp::StreamTubeChannel
supportsIPv6SocketsWithSpecifiedAddress() const Tp::StreamTubeChannel
supportsUnixSocketsOnLocalhost() const Tp::StreamTubeChannel
supportsUnixSocketsWithCredentials() const Tp::StreamTubeChannel
targetContact() const Tp::Channel
targetHandle() const Tp::Channel
targetHandleType() const Tp::Channel
targetId() const Tp::Channel
TubeChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature=TubeChannel::FeatureCore)Tp::TubeChannel [protected]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique)Tp::StatefulDBusProxy [static]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique, QString &error, QString &message)Tp::StatefulDBusProxy [static]
~Channel()Tp::Channel [virtual]
~DBusProxy()Tp::DBusProxy [virtual]
~Object()Tp::Object [virtual]
~OptionalInterfaceFactory()Tp::OptionalInterfaceFactory< Channel > [inline]
~OutgoingStreamTubeChannel()Tp::OutgoingStreamTubeChannel [virtual]
~ReadyObject()Tp::ReadyObject [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]
~StatefulDBusProxy()Tp::StatefulDBusProxy [virtual]
~StreamTubeChannel()Tp::StreamTubeChannel [virtual]
~TubeChannel()Tp::TubeChannel [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00335.html0000644000175200001440000001614012000060453021622 0ustar00collabora-develusers00000000000000 Tp::PresenceSpecList Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PresenceSpecList Class Reference

The PresenceSpecList class represents a list of PresenceSpec. More...

#include <TelepathyQt/PresenceSpecList>

List of all members.

Public Member Functions


Detailed Description

The PresenceSpecList class represents a list of PresenceSpec.


Constructor & Destructor Documentation

Tp::PresenceSpecList::PresenceSpecList ( const QList< PresenceSpec > &  other) [inline]

Member Function Documentation

QMap<QString, PresenceSpec> Tp::PresenceSpecList::toMap ( ) const [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00295.html0000644000175200001440000002041412000060453021626 0ustar00collabora-develusers00000000000000 Tp::AbstractClientObserver::ObserverInfo Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AbstractClientObserver::ObserverInfo Class Reference

The AbstractClientObserver::ObserverInfo class provides a wrapper around the additional info about the channels passed to observeChannels(). More...

#include <TelepathyQt/AbstractClientObserver>

List of all members.

Public Member Functions


Detailed Description

The AbstractClientObserver::ObserverInfo class provides a wrapper around the additional info about the channels passed to observeChannels().

See also:
AbstractClientObserver

Constructor & Destructor Documentation

Tp::AbstractClientObserver::ObserverInfo::ObserverInfo ( const QVariantMap &  info = QVariantMap())

Member Function Documentation

AbstractClientObserver::ObserverInfo & Tp::AbstractClientObserver::ObserverInfo::operator= ( const ObserverInfo other)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01036.html0000644000175200001440000000466012000060453021625 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::TLSCertificateRejection Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00942.html0000644000175200001440000002213412000060453021626 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::StreamTubeClient Member List
This is the complete list of members for Tp::StreamTubeClient, including all inherited members.
acceptsAsTcp() const Tp::StreamTubeClient
acceptsAsUnix() const Tp::StreamTubeClient
clientName() const Tp::StreamTubeClient
connectionClosed(const Tp::AccountPtr &account, const Tp::IncomingStreamTubeChannelPtr &tube, uint connectionId, const QString &error, const QString &message)Tp::StreamTubeClient [signal]
connections() const Tp::StreamTubeClient
create(const QStringList &p2pServices, const QStringList &roomServices=QStringList(), const QString &clientName=QString(), bool monitorConnections=false, bool bypassApproval=false, const AccountFactoryConstPtr &accountFactory=AccountFactory::create(QDBusConnection::sessionBus()), const ConnectionFactoryConstPtr &connectionFactory=ConnectionFactory::create(QDBusConnection::sessionBus()), const ChannelFactoryConstPtr &channelFactory=ChannelFactory::create(QDBusConnection::sessionBus()), const ContactFactoryConstPtr &contactFactory=ContactFactory::create())Tp::StreamTubeClient [static]
create(const QDBusConnection &bus, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory, const QStringList &p2pServices, const QStringList &roomServices=QStringList(), const QString &clientName=QString(), bool monitorConnections=false, bool bypassApproval=false)Tp::StreamTubeClient [static]
create(const AccountManagerPtr &accountManager, const QStringList &p2pServices, const QStringList &roomServices=QStringList(), const QString &clientName=QString(), bool monitorConnections=false, bool bypassApproval=false)Tp::StreamTubeClient [static]
create(const ClientRegistrarPtr &registrar, const QStringList &p2pServices, const QStringList &roomServices=QStringList(), const QString &clientName=QString(), bool monitorConnections=false, bool bypassApproval=false)Tp::StreamTubeClient [static]
isRegistered() const Tp::StreamTubeClient
monitorsConnections() const Tp::StreamTubeClient
newConnection(const Tp::AccountPtr &account, const Tp::IncomingStreamTubeChannelPtr &tube, uint connectionId)Tp::StreamTubeClient [signal]
RefCounted()Tp::RefCounted [inline]
registrar() const Tp::StreamTubeClient
setToAcceptAsTcp(TcpSourceAddressGenerator *generator=0)Tp::StreamTubeClient
setToAcceptAsUnix(bool requireCredentials=false)Tp::StreamTubeClient
tcpGenerator() const Tp::StreamTubeClient
tubeAcceptedAsTcp(const QHostAddress &listenAddress, quint16 listenPort, const QHostAddress &sourceAddress, quint16 sourcePort, const Tp::AccountPtr &account, const Tp::IncomingStreamTubeChannelPtr &tube)Tp::StreamTubeClient [signal]
tubeAcceptedAsUnix(const QString &listenAddress, bool requiresCredentials, uchar credentialByte, const Tp::AccountPtr &account, const Tp::IncomingStreamTubeChannelPtr &tube)Tp::StreamTubeClient [signal]
tubeClosed(const Tp::AccountPtr &account, const Tp::IncomingStreamTubeChannelPtr &tube, const QString &error, const QString &message)Tp::StreamTubeClient [signal]
tubeOffered(const Tp::AccountPtr &account, const Tp::IncomingStreamTubeChannelPtr &tube)Tp::StreamTubeClient [signal]
tubes() const Tp::StreamTubeClient
~RefCounted()Tp::RefCounted [inline, virtual]
~StreamTubeClient()Tp::StreamTubeClient [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_func_0x71.html0000644000175200001440000000343112000060453024610 0ustar00collabora-develusers00000000000000 Class Members - Functions
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- q -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00956.html0000644000175200001440000000474512000060453021643 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::UIntList Member List
This is the complete list of members for Tp::UIntList, including all inherited members.
operator=(const QList< uint > &a)Tp::UIntList [inline]
UIntList()Tp::UIntList [inline]
UIntList(const QList< uint > &a)Tp::UIntList [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00960.html0000644000175200001440000000424512000060453021631 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AliasPair Member List
This is the complete list of members for Tp::AliasPair, including all inherited members.
aliasTp::AliasPair
handleTp::AliasPair


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00341.html0000644000175200001440000001114612000060453021620 0ustar00collabora-develusers00000000000000 Tp::PropertySpec Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PropertySpec Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

A struct (property ID, property name, D-Bus signature, flags) representing a property, as returned by ListProperties on the Properties interface.


Member Data Documentation


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00882.html0000644000175200001440000000654712000060453021643 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MessageContentPartList Member List
This is the complete list of members for Tp::MessageContentPartList, including all inherited members.
bareParts() const Tp::MessageContentPartList [inline]
MessageContentPartList()Tp::MessageContentPartList [inline]
MessageContentPartList(const MessagePart &mp)Tp::MessageContentPartList [inline]
MessageContentPartList(const MessagePartList &mps)Tp::MessageContentPartList [inline]
MessageContentPartList(const MessageContentPart &mcp)Tp::MessageContentPartList [inline]
MessageContentPartList(const QList< MessageContentPart > &other)Tp::MessageContentPartList [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00107.html0000644000175200001440000001170412000060453021620 0ustar00collabora-develusers00000000000000 Tp::ChannelCallStateMap Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ChannelCallStateMap Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<uint, uint>, but needed to have a discrete type in the Qt type system.

A map from contacts to call states.


Constructor & Destructor Documentation

Tp::ChannelCallStateMap::ChannelCallStateMap ( const QMap< uint, uint > &  a) [inline]

Member Function Documentation

ChannelCallStateMap& Tp::ChannelCallStateMap::operator= ( const QMap< uint, uint > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00744.html0000644000175200001440000000753212000060453021633 0ustar00collabora-develusers00000000000000 Connection manager proxies
   Home · All Classes · All Namespaces · Modules · Functions · Files
Connection manager proxies

Classes


Detailed Description

Proxy objects representing remote Telepathy ConnectionManager objects and their optional interfaces.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00892.html0000644000175200001440000007553712000060453021651 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::OutgoingFileTransferChannel Member List
This is the complete list of members for Tp::OutgoingFileTransferChannel, including all inherited members.
actualFeatures() const Tp::ReadyObject [virtual]
availableSocketTypes() const Tp::FileTransferChannel [protected]
baseInterface() const Tp::Channel [protected]
becomeReady(const Features &requestedFeatures=Features())Tp::ReadyObject [virtual]
busName() const Tp::DBusProxy
BypassInterfaceCheck enum valueTp::OptionalInterfaceFactory< Channel >
cancel()Tp::FileTransferChannel
Channel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature)Tp::Channel [protected]
channelType() const Tp::Channel
CheckInterfaceSupported enum valueTp::OptionalInterfaceFactory< Channel >
conferenceChannelMerged(const Tp::ChannelPtr &channel)Tp::Channel [signal]
conferenceChannelRemoved(const Tp::ChannelPtr &channel, const Tp::Channel::GroupMemberChangeDetails &details)Tp::Channel [signal]
conferenceChannels() const Tp::Channel
conferenceInitialChannels() const Tp::Channel
conferenceInitialInviteeContacts() const Tp::Channel
conferenceMergeChannel(const ChannelPtr &channel)Tp::Channel
conferenceOriginalChannels() const Tp::Channel
conferenceSplitChannel()Tp::Channel
connection() const Tp::Channel
contentHash() const Tp::FileTransferChannel
contentHashType() const Tp::FileTransferChannel
contentType() const Tp::FileTransferChannel
create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties)Tp::OutgoingFileTransferChannel [static]
dbusConnection() const Tp::DBusProxy
DBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::DBusProxy
description() const Tp::FileTransferChannel
FeatureConferenceInitialInviteeContactsTp::Channel [static]
FeatureCoreTp::OutgoingFileTransferChannel [static]
fileName() const Tp::FileTransferChannel
FileTransferChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature=FileTransferChannel::FeatureCore)Tp::FileTransferChannel [protected]
groupAddContacts(const QList< ContactPtr > &contacts, const QString &message=QString())Tp::Channel
groupAddSelfHandle()Tp::Channel [protected, slot]
groupAreHandleOwnersAvailable() const Tp::Channel
groupCanAcceptContactsWithMessage() const Tp::Channel
groupCanAddContacts() const Tp::Channel
groupCanAddContactsChanged(bool canAddContacts)Tp::Channel [signal]
groupCanAddContactsWithMessage() const Tp::Channel
groupCanDepartWithMessage() const Tp::Channel
groupCanRejectContactsWithMessage() const Tp::Channel
groupCanRemoveContacts() const Tp::Channel
groupCanRemoveContactsChanged(bool canRemoveContacts)Tp::Channel [signal]
groupCanRemoveContactsWithMessage() const Tp::Channel
groupCanRescindContacts() const Tp::Channel
groupCanRescindContactsChanged(bool canRescindContacts)Tp::Channel [signal]
groupCanRescindContactsWithMessage() const Tp::Channel
groupContacts(bool includeSelfContact=true) const Tp::Channel
groupFlags() const Tp::Channel
groupFlagsChanged(Tp::ChannelGroupFlags flags, Tp::ChannelGroupFlags added, Tp::ChannelGroupFlags removed)Tp::Channel [signal]
groupHandleOwners() const Tp::Channel
groupHandleOwnersChanged(const Tp::HandleOwnerMap &owners, const Tp::UIntList &added, const Tp::UIntList &removed)Tp::Channel [signal]
groupIsSelfContactTracked() const Tp::Channel
groupLocalPendingContactChangeInfo(const ContactPtr &contact) const Tp::Channel
groupLocalPendingContacts(bool includeSelfContact=true) const Tp::Channel
groupMembersChanged(const Tp::Contacts &groupMembersAdded, const Tp::Contacts &groupLocalPendingMembersAdded, const Tp::Contacts &groupRemotePendingMembersAdded, const Tp::Contacts &groupMembersRemoved, const Tp::Channel::GroupMemberChangeDetails &details)Tp::Channel [signal]
groupRemotePendingContacts(bool includeSelfContact=true) const Tp::Channel
groupRemoveContacts(const QList< ContactPtr > &contacts, const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone)Tp::Channel
groupSelfContact() const Tp::Channel
groupSelfContactChanged()Tp::Channel [signal]
groupSelfContactRemoveInfo() const Tp::Channel
groupSelfHandleIsLocalPending() const Tp::Channel [protected]
hasInterface(const QString &name) constTp::OptionalInterfaceFactory< Channel > [inline]
immutableProperties() const Tp::Channel
initialOffset() const Tp::FileTransferChannel
initialOffsetDefined(qulonglong initialOffset)Tp::FileTransferChannel [signal]
initiatorContact() const Tp::Channel
interface() constTp::OptionalInterfaceFactory< Channel > [inline]
interfaces() constTp::OptionalInterfaceFactory< Channel > [inline]
InterfaceSupportedChecking enum nameTp::OptionalInterfaceFactory< Channel >
invalidate(const QString &reason, const QString &message)Tp::DBusProxy [protected]
invalidate(const QDBusError &error)Tp::DBusProxy [protected]
invalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage)Tp::DBusProxy [signal]
invalidationMessage() const Tp::DBusProxy
invalidationReason() const Tp::DBusProxy
isConference() const Tp::Channel
isConnected() const Tp::FileTransferChannel [protected]
isFinished() const Tp::FileTransferChannel [protected]
isReady(const Features &features=Features()) const Tp::ReadyObject [virtual]
isRequested() const Tp::Channel
isValid() const Tp::DBusProxy
lastModificationTime() const Tp::FileTransferChannel
missingFeatures() const Tp::ReadyObject [virtual]
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
objectPath() const Tp::DBusProxy
onUriDefined(const QString &uri)Tp::FileTransferChannel [protected, slot]
optionalInterface(InterfaceSupportedChecking check=CheckInterfaceSupported) constTp::OptionalInterfaceFactory< Channel > [inline]
OptionalInterfaceFactory(Channel *this_)Tp::OptionalInterfaceFactory< Channel > [inline]
OutgoingFileTransferChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature=OutgoingFileTransferChannel::FeatureCore)Tp::OutgoingFileTransferChannel [protected]
propertyChanged(const QString &propertyName)Tp::Object [signal]
provideFile(QIODevice *input)Tp::OutgoingFileTransferChannel
readinessHelper() const Tp::ReadyObject [protected]
ReadyObject(RefCounted *object, const Feature &featureCore)Tp::ReadyObject
ReadyObject(DBusProxy *proxy, const Feature &featureCore)Tp::ReadyObject
RefCounted()Tp::RefCounted [inline]
requestClose()Tp::Channel
requestedFeatures() const Tp::ReadyObject [virtual]
requestLeave(const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone)Tp::Channel
setBusName(const QString &busName)Tp::DBusProxy [protected]
setConnected()Tp::FileTransferChannel [protected]
setInterfaces(const QStringList &interfaces)Tp::OptionalInterfaceFactory< Channel > [inline, protected]
size() const Tp::FileTransferChannel
state() const Tp::FileTransferChannel
stateChanged(Tp::FileTransferState state, Tp::FileTransferStateChangeReason reason)Tp::FileTransferChannel [signal]
StatefulDBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::StatefulDBusProxy
stateReason() const Tp::FileTransferChannel
supportsConferenceMerging() const Tp::Channel
supportsConferenceSplitting() const Tp::Channel
targetContact() const Tp::Channel
targetHandle() const Tp::Channel
targetHandleType() const Tp::Channel
targetId() const Tp::Channel
transferredBytes() const Tp::FileTransferChannel
transferredBytesChanged(qulonglong count)Tp::FileTransferChannel [signal]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique)Tp::StatefulDBusProxy [static]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique, QString &error, QString &message)Tp::StatefulDBusProxy [static]
uri() const Tp::FileTransferChannel
~Channel()Tp::Channel [virtual]
~DBusProxy()Tp::DBusProxy [virtual]
~FileTransferChannel()Tp::FileTransferChannel [virtual]
~Object()Tp::Object [virtual]
~OptionalInterfaceFactory()Tp::OptionalInterfaceFactory< Channel > [inline]
~OutgoingFileTransferChannel()Tp::OutgoingFileTransferChannel [virtual]
~ReadyObject()Tp::ReadyObject [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]
~StatefulDBusProxy()Tp::StatefulDBusProxy [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00926.html0000644000175200001440000002632012000060453021631 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::RequestableChannelClassSpec Member List
This is the complete list of members for Tp::RequestableChannelClassSpec, including all inherited members.
allowedProperties() const Tp::RequestableChannelClassSpec
allowsProperty(const QString &name) const Tp::RequestableChannelClassSpec
audioCall()Tp::RequestableChannelClassSpec [static]
audioCallWithVideoAllowed()Tp::RequestableChannelClassSpec [static]
bareClass() const Tp::RequestableChannelClassSpec
channelType() const Tp::RequestableChannelClassSpec
conferenceStreamedMediaCall()Tp::RequestableChannelClassSpec [static]
conferenceStreamedMediaCallWithInvitees()Tp::RequestableChannelClassSpec [static]
conferenceTextChat()Tp::RequestableChannelClassSpec [static]
conferenceTextChatroom()Tp::RequestableChannelClassSpec [static]
conferenceTextChatroomWithInvitees()Tp::RequestableChannelClassSpec [static]
conferenceTextChatWithInvitees()Tp::RequestableChannelClassSpec [static]
contactSearch()Tp::RequestableChannelClassSpec [static]
contactSearchWithLimit()Tp::RequestableChannelClassSpec [static]
contactSearchWithSpecificServer()Tp::RequestableChannelClassSpec [static]
contactSearchWithSpecificServerAndLimit()Tp::RequestableChannelClassSpec [static]
dbusTube(const QString &serviceName=QString())Tp::RequestableChannelClassSpec [static]
fileTransfer()Tp::RequestableChannelClassSpec [static]
fixedProperties() const Tp::RequestableChannelClassSpec
fixedProperty(const QString &name) const Tp::RequestableChannelClassSpec
hasFixedProperty(const QString &name) const Tp::RequestableChannelClassSpec
hasTargetHandleType() const Tp::RequestableChannelClassSpec
isValid() const Tp::RequestableChannelClassSpec [inline]
operator=(const RequestableChannelClassSpec &other)Tp::RequestableChannelClassSpec
operator==(const RequestableChannelClassSpec &other) const Tp::RequestableChannelClassSpec
RequestableChannelClassSpec()Tp::RequestableChannelClassSpec
RequestableChannelClassSpec(const RequestableChannelClass &rcc)Tp::RequestableChannelClassSpec
RequestableChannelClassSpec(const RequestableChannelClassSpec &other)Tp::RequestableChannelClassSpec
streamedMediaAudioCall()Tp::RequestableChannelClassSpec [static]
streamedMediaCall()Tp::RequestableChannelClassSpec [static]
streamedMediaVideoCall()Tp::RequestableChannelClassSpec [static]
streamedMediaVideoCallWithAudio()Tp::RequestableChannelClassSpec [static]
streamTube(const QString &service=QString())Tp::RequestableChannelClassSpec [static]
supports(const RequestableChannelClassSpec &spec) const Tp::RequestableChannelClassSpec
targetHandleType() const Tp::RequestableChannelClassSpec
textChat()Tp::RequestableChannelClassSpec [static]
textChatroom()Tp::RequestableChannelClassSpec [static]
videoCall()Tp::RequestableChannelClassSpec [static]
videoCallWithAudioAllowed()Tp::RequestableChannelClassSpec [static]
~RequestableChannelClassSpec()Tp::RequestableChannelClassSpec


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00896.html0000644000175200001440000001315212000060453021636 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingChannelRequest Member List
This is the complete list of members for Tp::PendingChannelRequest, including all inherited members.
account() const Tp::PendingChannelRequest
cancel()Tp::PendingChannelRequest
channelRequest() const Tp::PendingChannelRequest
channelRequestCreated(const Tp::ChannelRequestPtr &channelRequest)Tp::PendingChannelRequest [signal]
errorMessage() const Tp::PendingOperation
errorName() const Tp::PendingOperation
finished(Tp::PendingOperation *operation)Tp::PendingOperation [signal]
isError() const Tp::PendingOperation
isFinished() const Tp::PendingOperation
isValid() const Tp::PendingOperation
object() const Tp::PendingOperation [protected]
PendingOperation(const SharedPtr< RefCounted > &object)Tp::PendingOperation [protected]
setFinished()Tp::PendingOperation [protected, slot]
setFinishedWithError(const QString &name, const QString &message)Tp::PendingOperation [protected, slot]
setFinishedWithError(const QDBusError &error)Tp::PendingOperation [protected, slot]
~PendingChannelRequest()Tp::PendingChannelRequest
~PendingOperation()Tp::PendingOperation [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00099.html0000644000175200001440000007504212000060453021637 0ustar00collabora-develusers00000000000000 Tp::CapabilitiesBase Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The CapabilitiesBase class represents the capabilities a Connection or a Contact supports. More...

#include <TelepathyQt/CapabilitiesBase>

Inherited by Tp::ConnectionCapabilities, and Tp::ContactCapabilities.

List of all members.

Public Member Functions

Protected Member Functions


Detailed Description

The CapabilitiesBase class represents the capabilities a Connection or a Contact supports.


Constructor & Destructor Documentation

Class destructor.

Tp::CapabilitiesBase::CapabilitiesBase ( bool  specificToContact) [protected]

Construct a new CapabilitiesBase object.

Parameters:
specificToContactWhether this object describes the capabilities of a particular contact.
Tp::CapabilitiesBase::CapabilitiesBase ( const RequestableChannelClassList rccs,
bool  specificToContact 
) [protected]

Construct a new CapabilitiesBase object using the given rccs.

Parameters:
rccsRequestableChannelClassList representing the capabilities of a connection or contact.
specificToContactWhether this object describes the capabilities of a particular contact.
Tp::CapabilitiesBase::CapabilitiesBase ( const RequestableChannelClassSpecList rccSpecs,
bool  specificToContact 
) [protected]

Construct a new CapabilitiesBase object using the given rccSpecs.

Parameters:
rccSpecsRequestableChannelClassSpecList representing the capabilities of a connection or contact.
specificToContactWhether this object describes the capabilities of a particular contact.

Member Function Documentation

CapabilitiesBase & Tp::CapabilitiesBase::operator= ( const CapabilitiesBase other)

Return the list of requestable channel class spec representing the requests that can succeed.

This can be used by advanced clients to determine whether an unusually complex request would succeed. See the Telepathy specification for details of how to interpret the returned list.

The higher-level methods like textChats() are likely to be more useful to the majority of clients.

Returns:
A RequestableChannelClassSpecList indicating the parameters to Account::createChannel, Account::ensureChannel, Connection::createChannel and Connection::ensureChannel that can be expected to work.

Return whether this object accurately describes the capabilities of a particular contact, or if it's only a guess based on the capabilities of the underlying connection.

In protocols like XMPP where each contact advertises their capabilities to others, Contact::capabilities() will generally return an object where this method returns true.

In protocols like SIP where contacts' capabilities are not known, Contact::capabilities() will return an object where this method returns false, whose methods textChats() etc. are based on what the underlying connection supports.

This reflects the fact that the best assumption an application can make is that every contact supports every channel type supported by the connection, while indicating that requests to communicate might fail if the contact does not actually have the necessary functionality.

Returns:
true if this object describes the capabilities of a particular contact, false otherwise.

Return whether private text channels can be established by providing a contact identifier.

If the protocol is such that text chats can be established, but only via a more elaborate D-Bus API than normal (because more information is needed), then this method will return false.

Returns:
true if Account::ensureTextChat() can be expected to work, false otherwise.

Return whether private audio and/or video calls can be established by providing a contact identifier.

If the protocol is such that these calls can be established, but only via a more elaborate D-Bus API than normal (because more information is needed), then this method will return false.

Returns:
true if Account::ensureStreamedMediaCall() can be expected to work, false otherwise.
See also:
streamedMediaAudioCalls(), streamedMediaVideoCalls(), streamedMediaVideoCallsWithAudio()

Return whether private audio calls can be established by providing a contact identifier.

Call upgradingCalls() to determine whether such calls are likely to be upgradable to have a video stream later.

If the protocol is such that these calls can be established, but only via a more elaborate D-Bus API than normal (because more information is needed), then this method will return false.

In some older connection managers, streamedMediaAudioCalls() and streamedMediaVideoCalls() might both return false, even though streamedMediaCalls() returns true. This indicates that only an older API is supported - clients of these connection managers must call Account::ensureStreamedMediaCall() to get an empty call, then add audio and/or video streams to it.

Returns:
true if Account::ensureStreamedMediaAudioCall() can be expected to work, false otherwise.
See also:
streamedMediaCalls(), streamedMediaVideoCalls(), streamedMediaVideoCallsWithAudio()

Return whether private video calls can be established by providing a contact identifier.

The same comments as for streamedMediaAudioCalls() apply to this method.

Returns:
true if Account::ensureStreamedMediaVideoCall() can be expected to work, if given false as withAudio parameter, false otherwise.
See also:
streamedMediaCalls(), streamedMediaAudioCalls(), streamedMediaVideoCallsWithAudio()

Return whether private video calls with audio can be established by providing a contact identifier.

The same comments as for streamedMediaAudioCalls() apply to this method.

Returns:
true if Account::ensureStreamedMediaVideoCall() can be expected to work, if given true as withAudio parameter, false otherwise.
See also:
streamedMediaCalls(), streamedMediaAudioCalls(), streamedMediaVideoCalls()

Return whether the protocol supports adding streams of a different type to ongoing media calls.

In some protocols and clients (such as XMPP Jingle), all calls potentially support both audio and video. This is indicated by returning true.

In other protocols and clients (such as MSN, and the variant of XMPP Jingle used by Google clients), the streams are fixed at the time the call is started, so if you will ever want video, you have to ask for it at the beginning, for instance with ensureStreamedMediaVideoCall(). This is indicated by returning false.

User interfaces can use this method as a UI hint. If it returns false, then a UI wishing to support both audio and video calls will have to provide separate "audio call" and "video call" buttons or menu items; if it returns true, a single button that makes an audio call is sufficient, because video can be added later.

(The underlying Telepathy feature is the ImmutableStreams property; if this method returns true, then ImmutableStreams is false, and vice versa).

Returns:
true if audio calls can be upgraded to audio + video, false otherwise.

Return whether file transfer can be established by providing a contact identifier

Returns:
true if file transfers can be expected to work, false otherwise.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00337.html0000644000175200001440000003460512000060453021632 0ustar00collabora-develusers00000000000000 Tp::ProfileManager Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The ProfileManager class provides helper methods to retrieve Profile objects. More...

#include <TelepathyQt/ProfileManager>

Inherits Tp::Object, and Tp::ReadyObject.

List of all members.

Public Member Functions

Static Public Member Functions

  • static ProfileManagerPtr create (const QDBusConnection &bus=QDBusConnection::sessionBus())

Static Public Attributes


Detailed Description

The ProfileManager class provides helper methods to retrieve Profile objects.


Constructor & Destructor Documentation

Class destructor.


Member Function Documentation

ProfileManagerPtr Tp::ProfileManager::create ( const QDBusConnection &  bus = QDBusConnection::sessionBus()) [static]

Create a new ProfileManager object.

QList< ProfilePtr > Tp::ProfileManager::profiles ( ) const

Return a list of all available profiles.

Returns:
A list of all available profiles.
QList< ProfilePtr > Tp::ProfileManager::profilesForCM ( const QString &  cmName) const

Return a list of all available profiles for a given connection manager.

Parameters:
cmNameConnection manager name.
Returns:
A list of all available profiles for a given connection manager.
QList< ProfilePtr > Tp::ProfileManager::profilesForProtocol ( const QString &  protocolName) const

Return a list of all available profiles for a given protocol.

Parameters:
protocolNameProtocol name.
Returns:
A list of all available profiles for a given protocol.
ProfilePtr Tp::ProfileManager::profileForService ( const QString &  serviceName) const

Return the profile for a given service.

Parameters:
serviceNameService name.
Returns:
The profile for service.

Member Data Documentation

Feature representing the core that needs to become ready to make the ProfileManager object usable.

Note that this feature must be enabled in order to use all ProfileManager methods.

When calling isReady(), becomeReady(), this feature is implicitly added to the requested features.

Enabling this feature will make ProfileManager create fake Profile objects to all protocols supported on the installed connection managers, even if they don't have .profile files installed making use of them.

Fake profiles are identified by Profile::isFake() returning true.

The fake profile will contain the following info:

Where cmName and protocolName are the name of the connection manager and the name of the protocol for which this fake Profile is created, respectively.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01080.html0000644000175200001440000002266212000060453021626 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelRequestInterface Member List
This is the complete list of members for Tp::Client::ChannelRequestInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
Cancel(int timeout=-1)Tp::Client::ChannelRequestInterface [inline, slot]
ChannelRequestInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelRequestInterface
ChannelRequestInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelRequestInterface
ChannelRequestInterface(Tp::DBusProxy *proxy)Tp::Client::ChannelRequestInterface
Failed(const QString &error, const QString &message)Tp::Client::ChannelRequestInterface [signal]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ChannelRequestInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
Proceed(int timeout=-1)Tp::Client::ChannelRequestInterface [inline, slot]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ChannelRequestInterface [inline]
requestPropertyAccount() const Tp::Client::ChannelRequestInterface [inline]
requestPropertyHints() const Tp::Client::ChannelRequestInterface [inline]
requestPropertyInterfaces() const Tp::Client::ChannelRequestInterface [inline]
requestPropertyPreferredHandler() const Tp::Client::ChannelRequestInterface [inline]
requestPropertyRequests() const Tp::Client::ChannelRequestInterface [inline]
requestPropertyUserActionTime() const Tp::Client::ChannelRequestInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ChannelRequestInterface [inline, static]
Succeeded()Tp::Client::ChannelRequestInterface [signal]
SucceededWithChannel(const QDBusObjectPath &connection, const QVariantMap &connectionProperties, const QDBusObjectPath &channel, const QVariantMap &channelProperties)Tp::Client::ChannelRequestInterface [signal]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01058.html0000644000175200001440000000512512000060453021626 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactPresences Member List
This is the complete list of members for Tp::ContactPresences, including all inherited members.
ContactPresences()Tp::ContactPresences [inline]
ContactPresences(const QMap< uint, LastActivityAndStatuses > &a)Tp::ContactPresences [inline]
operator=(const QMap< uint, LastActivityAndStatuses > &a)Tp::ContactPresences [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01052.html0000644000175200001440000000443112000060453021617 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::RTCPFeedbackMessageProperties Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01122.html0000644000175200001440000003057412000060453021624 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterface Member List
This is the complete list of members for Tp::Client::ConnectionInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
AddClientInterest(const QStringList &tokens, int timeout=-1)Tp::Client::ConnectionInterface [inline, slot]
Connect(int timeout=-1)Tp::Client::ConnectionInterface [inline, slot]
ConnectionError(const QString &error, const QVariantMap &details)Tp::Client::ConnectionInterface [signal]
ConnectionInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterface
ConnectionInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterface
ConnectionInterface(Tp::DBusProxy *proxy)Tp::Client::ConnectionInterface
Disconnect(int timeout=-1)Tp::Client::ConnectionInterface [inline, slot]
GetInterfaces(int timeout=-1)Tp::Client::ConnectionInterface [inline, slot]
GetProtocol(int timeout=-1)Tp::Client::ConnectionInterface [inline, slot]
GetSelfHandle(int timeout=-1)Tp::Client::ConnectionInterface [inline, slot]
GetStatus(int timeout=-1)Tp::Client::ConnectionInterface [inline, slot]
HoldHandles(uint handleType, const Tp::UIntList &handles, int timeout=-1)Tp::Client::ConnectionInterface [inline, slot]
InspectHandles(uint handleType, const Tp::UIntList &handles, int timeout=-1)Tp::Client::ConnectionInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ConnectionInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
ListChannels(int timeout=-1)Tp::Client::ConnectionInterface [inline, slot]
NewChannel(const QDBusObjectPath &objectPath, const QString &channelType, uint handleType, uint handle, bool suppressHandler)Tp::Client::ConnectionInterface [signal]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
ReleaseHandles(uint handleType, const Tp::UIntList &handles, int timeout=-1)Tp::Client::ConnectionInterface [inline, slot]
RemoveClientInterest(const QStringList &tokens, int timeout=-1)Tp::Client::ConnectionInterface [inline, slot]
requestAllProperties() const Tp::Client::ConnectionInterface [inline]
RequestChannel(const QString &type, uint handleType, uint handle, bool suppressHandler, int timeout=-1)Tp::Client::ConnectionInterface [inline, slot]
RequestHandles(uint handleType, const QStringList &identifiers, int timeout=-1)Tp::Client::ConnectionInterface [inline, slot]
requestPropertyHasImmortalHandles() const Tp::Client::ConnectionInterface [inline]
requestPropertyInterfaces() const Tp::Client::ConnectionInterface [inline]
requestPropertySelfHandle() const Tp::Client::ConnectionInterface [inline]
requestPropertyStatus() const Tp::Client::ConnectionInterface [inline]
SelfHandleChanged(uint selfHandle)Tp::Client::ConnectionInterface [signal]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ConnectionInterface [inline, static]
StatusChanged(uint status, uint reason)Tp::Client::ConnectionInterface [signal]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00344.html0000644000175200001440000012562512000060453021633 0ustar00collabora-develusers00000000000000 Tp::Client::ProtocolInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

#include <TelepathyQt/ConnectionManager>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

  • QDBusPendingReply< QString > IdentifyAccount (const QVariantMap &parameters, int timeout=-1)
  • QDBusPendingReply< QString > NormalizeContact (const QString &contactID, int timeout=-1)

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Protocol".


Constructor & Destructor Documentation

Tp::Client::ProtocolInterface::ProtocolInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ProtocolInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ProtocolInterface::ProtocolInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ProtocolInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ProtocolInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ProtocolInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ProtocolInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

static QLatin1String Tp::Client::ProtocolInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Protocol", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property Interfaces of type QStringList.

A list of interfaces supported by this Protocol object.

This property should not be confused with ConnectionInterfaces , which refers to the interfaces of connections to this protocol.

Connection managers with a .manager file (as described as part of the ConnectionManagerInterface interface) MUST cache this property in the protocol's section of the .manager file, using the key Interfaces. The corresponding value is a list of D-Bus interface names, each followed by a semicolon.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Parameters of type Tp::ParamSpecList.

The parameters which may be specified in the AccountInterface::Parameters of an AccountInterface (or, for specialised applications which do not use the account manager, passed to ConnectionManagerInterface::RequestConnection() ). Some parameters are mandatory, and some parameters only make sense when registering new accounts with the server; see the Param_Spec documentation for more details.

Connection managers with a .manager file (as described as part of the ConnectionManagerInterface interface) MUST cache this property in the protocol's section of the .manager file via keys of the form param-p and default-p, as documented in the ConnectionManagerInterface interface.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property ConnectionInterfaces of type QStringList.

A list of interface names which might be in the ConnectionInterface::Interfaces property of a ConnectionInterface to this protocol. Whether a Connection will have all, some or none of these interfaces depends on server capabilities.

This property should not be confused with Interfaces .

Connection managers with a .manager file MUST cache this property in the protocol's section of the .manager file, using the key ConnectionInterfaces. The corresponding value is a list of D-Bus interface names, each followed by a semicolon.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property RequestableChannelClasses of type Tp::RequestableChannelClassList.

A list of channel classes which might be requestable from a ConnectionInterface to this protocol (i.e. they will, or might, appear in the Connection's ConnectionInterfaceRequestsInterface::RequestableChannelClasses property).

Whether a Connection will have all, some or none of these requestable channel classes depends on server capabilities; similarly, individual contacts are not guaranteed to support all of these channel classes.

Connection managers with a .manager file MUST cache this property in the protocol's section of the .manager file, using the key RequestableChannelClasses. The corresponding value is a list of opaque strings, each followed by a semicolon; each of those strings is the name of a group in the .manager file which represents a channel class.

The names of the groups representing channel classes are not significant, and MUST NOT be interpreted. When writing .manager files, authors MAY choose mnemonic group names, generate group names mechanically (e.g. with an incrementing integer), or use some combination of these.

Each group representing a channel class has a key allowed which is a list of D-Bus property names representing allowed parameters. Any other keys that do not contain a space MUST be ignored. Any key containing a space represents a fixed property; the key has the form "propertyname type", and the value is encoded in the same way as for the default-p keys described in the ConnectionManagerInterface documentation.

Connection managers that have channel classes whose fixed properties are not representable in this form SHOULD NOT have .manager files.

For instance, this .manager file could represent a connection manager that supports 1-1 Text messages and StreamedMedia audio calls:

[Protocol jabber]
 param-account=s required
 param-password=s required
 RequestableChannelClasses=rcc0;rcc1;
 
 [rcc0]
 org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.Text
 org.freedesktop.Telepathy.Channel.TargetHandleType u=1
 allowed=org.freedesktop.Telepathy.Channel.TargetHandle;org.freedesktop.Telepathy.Channel.TargetID;
 
 [rcc1]
 org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.StreamedMedia
 org.freedesktop.Telepathy.Channel.TargetHandleType u=1
 allowed=org.freedesktop.Telepathy.Channel.TargetHandle;org.freedesktop.Telepathy.Channel.TargetID;org.freedesktop.Telepathy.Channel.Type.StreamedMedia.InitialAudio;
 
Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property VCardField of type QString.

The name of the most common vCard field used for this protocol's contact identifiers, normalized to lower case, or the empty string if there is no such field.

For example, this would be x-jabber for Jabber/XMPP (including Google Talk), or tel for the PSTN.

A more exhaustive list of addressable vCard fields can be found in the Protocol's Addressing interface's ProtocolInterfaceAddressingInterface::AddressableVCardFields .

It is not necessarily valid to interpret contacts' identifiers as values of this vCard field. For instance, telepathy-sofiasip supports contacts whose identifiers are of the form sip:jenny@example.com or tel:8675309, which would not normally both be represented by any single vCard field. Arbitrary handles/identifiers as vCard fields are represented through the Connection's ConnectionInterfaceAddressingInterface contact attributes.

This is taken from Mission Control profiles as used on Maemo 5. One valid use of this field is to answer the question: given a contact's vCard containing an X-JABBER field, how can you communicate with the contact? By iterating through protocols looking for an x-jabber VCardField, one can build up a list of protocols that handle x-jabber, then offer the user a list of accounts for those protocols and/or the option to create a new account for one of those protocols.

Connection managers with a .manager file MUST cache this property in the protocol's section of the .manager file if it is non-empty, using the key VCardField. The corresponding value is a string, following the syntax of the "localestring" type from the Desktop Entry Specification.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property EnglishName of type QString.

The name of the protocol in a form suitable for display to users, such as "AIM" or "Yahoo!", or the empty string if none is available.

This is effectively in the C locale (international English); user interfaces requiring a localized protocol name SHOULD look one up in their own message catalog based on either the Telepathy Protocol name or this property, but SHOULD use this English version as a fallback if no translated version can be found.

Many protocols are named after a company or product which isn't translated in non-English locales. This also provides a fallback display name, for UIs with no prior knowledge of a particular protocol.

If this property's value is empty, clients MAY fall back to using the Telepathy Protocol name, possibly with its capitalization adjusted.

Connection managers with a .manager file MUST cache this property in the protocol's section of the .manager file if it is non-empty, using the key EnglishName. The corresponding value is a string, following the syntax of the "localestring" type from the Desktop Entry Specification.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Icon of type QString.

The name of an icon in the system's icon theme, such as "im-msn", or the empty string.

This can be used as a default if the AccountInterface::Icon property is not set on an Account, or used by the AccountManagerInterface to choose a default icon if none is set during account creation.

If this property's value is empty, clients MAY fall back to generating a name based on the Protocol name.

Connection managers with a .manager file MUST cache this property in the protocol's section of the .manager file if it is non-empty, using the key Icon. The corresponding value is a string, following the syntax of the "localestring" type from the Desktop Entry Specification.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property AuthenticationTypes of type QStringList.

A list of D-Bus interfaces which provide information as to what kind of authentication channels can possibly appear before the connection reaches the CONNECTED state.

These can either be channel types, or where the channel type isn't enough information to be useful, interfaces indicating a specific use of a channel type. For example, ChannelTypeServerTLSConnectionInterface channels are obviously about TLS certificates so the channel type would appear in this list. However, a ChannelTypeServerAuthenticationInterface channel type alone does not explain enough about the authentication type in use as it is merely a base for the channel interfaces that appear in said channels. In this case, CMs should use the value of the ChannelTypeServerAuthenticationInterface::AuthenticationMethod property in this list.

For example, if a protocol's AuthenticationTypes contains two values:

 [ ...  ChannelTypeServerTLSConnectionInterface  ,
   ...  ChannelInterfaceSASLAuthenticationInterface  ]

This tells a client that before the connection status reached CONNECTED, a ChannelTypeServerTLSConnectionInterface could appear carrying a TLS certificate. It also tells the client that before the connection status reaches CONNECTED, a ChannelTypeServerAuthenticationInterface channel could also appear, where ChannelTypeServerAuthenticationInterface::AuthenticationMethod = ChannelInterfaceSASLAuthenticationInterface . A hypothetical future Channel.Interface.Captcha interface would also appear in this list if the CM might require the user solve a captcha before connecting.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply<QString> Tp::Client::ProtocolInterface::IdentifyAccount ( const QVariantMap &  parameters,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method IdentifyAccount on the remote object.

Return a string which uniquely identifies the account to which the given parameters would connect.

For many protocols, this would return the well-known 'account' parameter. However, for IRC the returned string would be composed from the 'account' (i.e. nickname) and 'server' parameters. AccountManager implementations can use this to form the account-specific part of an Account's object path.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
parametersA set of parameters as would be provided to RequestConnection
timeoutThe timeout in milliseconds.
Returns:

An opaque string suitable for use as the account-specific part of an Account's object path. This is not necessarily globally unique, but should represent a "best-effort" identification of the account. For a pathological case, consider a user signing in as 'me@example.com' with 'server' set to either jabber1.example.com or jabber2.example.com. Both of these should result in me@example.com being returned from this method, even if the user can actually be signed in to those two servers simultaneously.

QDBusPendingReply<QString> Tp::Client::ProtocolInterface::NormalizeContact ( const QString &  contactID,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method NormalizeContact on the remote object.

Attempt to normalize the given contact ID. Where possible, this SHOULD return the same thing that would be returned by InspectHandles(RequestHandles(CONTACT, [Contact_ID])) on a connected ConnectionInterface .

If full normalization requires network activity or is otherwise impossible to do without a ConnectionInterface , this method SHOULD perform a best-effort normalization.

One common example of a best-effort offline normalization differing from the ideal normalization is XMPP.

On XMPP, contacts' JIDs should normally have the resource removed during normalization, but for contacts in a MUC (chatroom), the resource is an integral part of the JID - so the contact JID alice@example.com/Empathy should normalize to alice@example.com, but the in-MUC JID wonderland@conference.example.com/Alice should normalize to itself.

While online, the connection manager has enough context to know which chatrooms the user is in, and can infer from that whether to remove resources, but the best-effort normalization performed while offline does not have this context, so the best that can be done is to remove the resource from all JIDs.

This method MAY simply raise NotImplemented on some protocols.

In link-local XMPP, you can't talk to someone who isn't present on your local network, so normalizing identifiers in advance is meaningless.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
contactIDThe identifier of a contact in this protocol
timeoutThe timeout in milliseconds.
Returns:

The identifier of a contact in this protocol, normalized as much as possible

void Tp::Client::ProtocolInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00292.html0000644000175200001440000001612012000060453021622 0ustar00collabora-develusers00000000000000 Tp::Object Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The Object class provides an object with property notification. More...

#include <TelepathyQt/Object>

Inherits Tp::RefCounted.

Inherited by Tp::AbstractDBusServiceInterface, Tp::AccountSet, Tp::CaptchaAuthentication, Tp::ClientRegistrar, Tp::Contact, Tp::ContactManager, Tp::DBusProxy, Tp::DBusService, Tp::ProfileManager, and Tp::StreamedMediaStream.

List of all members.

Signals

Public Member Functions

Protected Member Functions


Detailed Description

The Object class provides an object with property notification.


Constructor & Destructor Documentation

Tp::Object::~Object ( ) [virtual]

Class destructor.

Tp::Object::Object ( ) [protected]

Construct a new Object object.


Member Function Documentation

void Tp::Object::propertyChanged ( const QString &  propertyName) [signal]
void Tp::Object::notify ( const char *  propertyName) [protected]

Notify that a property named propertyName changed.

This method will emit propertyChanged() for propertyName.

Todo:
Use for more classes beyond Account. Most importantly Contact.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00993.html0000644000175200001440000000426112000060453021635 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::HTTPPostData Member List
This is the complete list of members for Tp::HTTPPostData, including all inherited members.
keyTp::HTTPPostData
valueTp::HTTPPostData


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00946.html0000644000175200001440000000511612000060453021633 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::StreamTubeServer::ParametersGenerator Member List
This is the complete list of members for Tp::StreamTubeServer::ParametersGenerator, including all inherited members.
nextParameters(const AccountPtr &account, const OutgoingStreamTubeChannelPtr &tube, const ChannelRequestHints &hints)=0Tp::StreamTubeServer::ParametersGenerator [pure virtual]
~ParametersGenerator()Tp::StreamTubeServer::ParametersGenerator [inline, protected, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00722_source.html0000644000175200001440000000750712000060453023211 0ustar00collabora-develusers00000000000000 utils.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
utils.h
00001 
00023 #ifndef _TelepathyQt_utils_h_HEADER_GUARD_
00024 #define _TelepathyQt_utils_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Global>
00031 
00032 #include <QString>
00033 #include <QVariant>
00034 
00035 namespace Tp
00036 {
00037 
00038 TP_QT_EXPORT QString escapeAsIdentifier(const QString &string);
00039 
00040 TP_QT_EXPORT bool checkValidProtocolName(const QString &protocolName);
00041 
00042 TP_QT_EXPORT QVariant::Type variantTypeFromDBusSignature(const QString &signature);
00043 TP_QT_EXPORT QVariant parseValueWithDBusSignature(const QString &value,
00044         const QString &dbusSignature);
00045 
00046 } // Tp
00047 
00048 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00150.html0000644000175200001440000010074712000060453021624 0ustar00collabora-develusers00000000000000 Tp::Client::ChannelTypeTextInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

#include <TelepathyQt/Channel>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

  • void LostMessage ()
  • void Received (uint ID, uint timestamp, uint sender, uint type, uint flags, const QString &text)
  • void SendError (uint error, uint timestamp, uint type, const QString &text)
  • void Sent (uint timestamp, uint type, const QString &text)

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Channel.Type.Text".


Constructor & Destructor Documentation

Tp::Client::ChannelTypeTextInterface::ChannelTypeTextInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelTypeTextInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ChannelTypeTextInterface::ChannelTypeTextInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelTypeTextInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ChannelTypeTextInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ChannelTypeTextInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ChannelTypeTextInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

static QLatin1String Tp::Client::ChannelTypeTextInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Channel.Type.Text", which this class represents.

Returns:
The D-Bus interface name.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::ChannelTypeTextInterface::AcknowledgePendingMessages ( const Tp::UIntList IDs,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method AcknowledgePendingMessages on the remote object.

Inform the channel that you have handled messages by displaying them to the user (or equivalent), so they can be removed from the pending queue.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
IDsThe IDs of the messages to acknowledge
timeoutThe timeout in milliseconds.
QDBusPendingReply<Tp::UIntList> Tp::Client::ChannelTypeTextInterface::GetMessageTypes ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method GetMessageTypes on the remote object.

Return an array indicating which types of message may be sent on this channel.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
Returns:

An array of integer message types (ChannelTextMessageType)

QDBusPendingReply<Tp::PendingTextMessageList> Tp::Client::ChannelTypeTextInterface::ListPendingMessages ( bool  clear,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method ListPendingMessages on the remote object.

List the messages currently in the pending queue, and optionally remove then all.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
clearIf true, behave as if AcknowledgePendingMessages had also been called.
timeoutThe timeout in milliseconds.
Returns:
An array of structs representing the pending queue. Each contains:
  • a numeric identifier
  • a Unix timestamp indicating when the message was received
  • the contact handle for the contact who sent the message
  • the message type, taken from ChannelTextMessageType
  • the bitwise-OR of the message flags from ChannelTextMessageFlags
  • the text of the message
QDBusPendingReply Tp::Client::ChannelTypeTextInterface::Send ( uint  type,
const QString &  text,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method Send on the remote object.

Request that a message be sent on this channel. When the message has been submitted for delivery, this method will return and the Sent() signal will be emitted. If the message cannot be submitted for delivery, the method returns an error and no signal is emitted.

This method SHOULD return before the Sent signal is emitted.

When a Text channel implements the ChannelInterfaceMessagesInterface interface, that "SHOULD" becomes a "MUST".

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
typeAn integer indicating the type of the message
textThe message to send
timeoutThe timeout in milliseconds.

Represents the signal LostMessage on the remote object.

This signal is emitted to indicate that an incoming message was not able to be stored and forwarded by the connection manager due to lack of memory.

void Tp::Client::ChannelTypeTextInterface::Received ( uint  ID,
uint  timestamp,
uint  sender,
uint  type,
uint  flags,
const QString &  text 
) [signal]

Represents the signal Received on the remote object.

Signals that a message with the given id, timestamp, sender, type and text has been received on this channel. Applications that catch this signal and reliably inform the user of the message should acknowledge that they have dealt with the message with the AcknowledgePendingMessages method.

Parameters:
IDA numeric identifier for acknowledging the message
timestampA Unix timestamp indicating when the message was received
senderThe handle of the contact who sent the message
typeThe type of the message (normal, action, notice, etc.)
flagsA bitwise OR of the message flags
textThe text of the message
void Tp::Client::ChannelTypeTextInterface::SendError ( uint  error,
uint  timestamp,
uint  type,
const QString &  text 
) [signal]

Represents the signal SendError on the remote object.

Signals that an outgoing message has failed to send. The error will be one of the values from ChannelTextSendError.

This signal should only be emitted for messages for which Sent() has already been emitted and Send() has already returned success.

Parameters:
errorThe error that occurred
timestampThe Unix timestamp indicating when the message was sent
typeThe message type
textThe text of the message
void Tp::Client::ChannelTypeTextInterface::Sent ( uint  timestamp,
uint  type,
const QString &  text 
) [signal]

Represents the signal Sent on the remote object.

Signals that a message has been submitted for sending.

Parameters:
timestampUnix timestamp indicating when the message was sent
typeThe message type (normal, action, notice, etc) from ChannelTextMessageType
textThe text of the message. If the message was, or will be, altered during transmission, this argument SHOULD reflect what other contacts will receive rather than being a copy of the argument to Send.
void Tp::Client::ChannelTypeTextInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00570_source.html0000644000175200001440000002457312000060453023214 0ustar00collabora-develusers00000000000000 feature.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
feature.h
00001 
00023 #ifndef _TelepathyQt_feature_h_HEADER_GUARD_
00024 #define _TelepathyQt_feature_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Global>
00031 
00032 #include <QMetaType>
00033 #include <QPair>
00034 #include <QSet>
00035 #include <QSharedDataPointer>
00036 #include <QString>
00037 
00038 namespace Tp
00039 {
00040 
00041 class TP_QT_EXPORT Feature : public QPair<QString, uint>
00042 {
00043 public:
00044     Feature();
00045     Feature(const QString &className, uint id, bool critical = false);
00046     Feature(const Feature &other);
00047     ~Feature();
00048 
00049     bool isValid() const { return mPriv.constData() != 0; }
00050 
00051     Feature &operator=(const Feature &other);
00052 
00053     bool isCritical() const;
00054 
00055 private:
00056     struct Private;
00057     friend struct Private;
00058     QSharedDataPointer<Private> mPriv;
00059 };
00060 
00061 class TP_QT_EXPORT Features : public QSet<Feature>
00062 {
00063 public:
00064     Features() { }
00065     Features(const Feature &feature) { insert(feature); }
00066     Features(const QSet<Feature> &s) : QSet<Feature>(s) { }
00067 };
00068 
00069 inline Features operator|(const Feature &feature1, const Feature &feature2)
00070 {
00071     return Features() << feature1 << feature2;
00072 }
00073 
00074 inline Features operator|(const Features &features, const Feature &feature)
00075 {
00076     return Features(features) << feature;
00077 }
00078 
00079 inline uint qHash(const Features &features)
00080 {
00081     int ret = 0;
00082     Q_FOREACH (const Feature &feature, features) {
00083         int h = qHash(feature);
00084         ret ^= h;
00085     }
00086     return ret;
00087 }
00088 
00089 } // Tp
00090 
00091 Q_DECLARE_METATYPE(Tp::Feature);
00092 Q_DECLARE_METATYPE(Tp::Features);
00093 
00094 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00955.html0000644000175200001440000000505312000060453021633 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ObjectPathList Member List
This is the complete list of members for Tp::ObjectPathList, including all inherited members.
ObjectPathList()Tp::ObjectPathList [inline]
ObjectPathList(const QList< QDBusObjectPath > &a)Tp::ObjectPathList [inline]
operator=(const QList< QDBusObjectPath > &a)Tp::ObjectPathList [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00732.html0000644000175200001440000000332112000060453021620 0ustar00collabora-develusers00000000000000 Tp::ManagerFile Namespace Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ManagerFile Namespace Reference


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00780.html0000644000175200001440000001266512000060453021636 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AccountSet Member List
This is the complete list of members for Tp::AccountSet, including all inherited members.
accountAdded(const Tp::AccountPtr &account)Tp::AccountSet [signal]
accountManagerTp::AccountSet
accountManager() const Tp::AccountSet
accountRemoved(const Tp::AccountPtr &account)Tp::AccountSet [signal]
accountsTp::AccountSet
accounts() const Tp::AccountSet
AccountSet(const AccountManagerPtr &accountManager, const AccountFilterConstPtr &filter)Tp::AccountSet
AccountSet(const AccountManagerPtr &accountManager, const QVariantMap &filter)Tp::AccountSet
filterTp::AccountSet
filter() const Tp::AccountSet
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
propertyChanged(const QString &propertyName)Tp::Object [signal]
RefCounted()Tp::RefCounted [inline]
~AccountSet()Tp::AccountSet [virtual]
~Object()Tp::Object [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01028.html0000644000175200001440000000431512000060453021623 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::SocketAddressIPv4 Member List
This is the complete list of members for Tp::SocketAddressIPv4, including all inherited members.
addressTp::SocketAddressIPv4
portTp::SocketAddressIPv4


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00443_source.html0000644000175200001440000002476512000060453023216 0ustar00collabora-develusers00000000000000 base-connection-manager.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
base-connection-manager.h
00001 
00023 #ifndef _TelepathyQt_base_connection_manager_h_HEADER_GUARD_
00024 #define _TelepathyQt_base_connection_manager_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/DBusService>
00031 #include <TelepathyQt/Global>
00032 #include <TelepathyQt/Types>
00033 
00034 #include <QDBusConnection>
00035 
00036 class QString;
00037 
00038 namespace Tp
00039 {
00040 
00041 class TP_QT_EXPORT BaseConnectionManager : public DBusService
00042 {
00043     Q_OBJECT
00044     Q_DISABLE_COPY(BaseConnectionManager)
00045 
00046 public:
00047     static BaseConnectionManagerPtr create(const QString &name)
00048     {
00049         return BaseConnectionManagerPtr(new BaseConnectionManager(
00050                     QDBusConnection::sessionBus(), name));
00051     }
00052     template<typename BaseConnectionManagerSubclass>
00053     static SharedPtr<BaseConnectionManagerSubclass> create(const QString &name)
00054     {
00055         return SharedPtr<BaseConnectionManagerSubclass>(new BaseConnectionManagerSubclass(
00056                     QDBusConnection::sessionBus(), name));
00057     }
00058     static BaseConnectionManagerPtr create(const QDBusConnection &dbusConnection,
00059             const QString &name)
00060     {
00061         return BaseConnectionManagerPtr(new BaseConnectionManager(dbusConnection, name));
00062     }
00063     template<typename BaseConnectionManagerSubclass>
00064     static SharedPtr<BaseConnectionManagerSubclass> create(const QDBusConnection &dbusConnection,
00065             const QString &name)
00066     {
00067         return SharedPtr<BaseConnectionManagerSubclass>(new BaseConnectionManagerSubclass(
00068                     dbusConnection, name));
00069     }
00070 
00071     virtual ~BaseConnectionManager();
00072 
00073     QString name() const;
00074 
00075     QVariantMap immutableProperties() const;
00076 
00077     QList<BaseProtocolPtr> protocols() const;
00078     BaseProtocolPtr protocol(const QString &protocolName) const;
00079     bool hasProtocol(const QString &protocolName) const;
00080     bool addProtocol(const BaseProtocolPtr &protocol);
00081 
00082     bool registerObject(DBusError *error = NULL);
00083 
00084     QList<BaseConnectionPtr> connections() const;
00085 
00086 Q_SIGNALS:
00087     void newConnection(const BaseConnectionPtr &connection);
00088 
00089 protected:
00090     BaseConnectionManager(const QDBusConnection &dbusConnection, const QString &name);
00091 
00092     virtual bool registerObject(const QString &busName, const QString &objectPath,
00093             DBusError *error);
00094 
00095 private Q_SLOTS:
00096     TP_QT_NO_EXPORT void removeConnection();
00097 
00098 private:
00099     TP_QT_NO_EXPORT void addConnection(const BaseConnectionPtr &connection);
00100 
00101     class Adaptee;
00102     friend class Adaptee;
00103     class Private;
00104     friend class Private;
00105     Private *mPriv;
00106 };
00107 
00108 }
00109 
00110 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00398.html0000644000175200001440000000700612000060453021634 0ustar00collabora-develusers00000000000000 Tp::StreamCredentials Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::StreamCredentials Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

A username and password pair.


Member Data Documentation

The username.

The password.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00300.html0000644000175200001440000010432612000060453021616 0ustar00collabora-develusers00000000000000 Tp::OutgoingStreamTubeChannel Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The OutgoingStreamTubeChannel class represents an outgoing Telepathy channel of type StreamTube. More...

#include <TelepathyQt/OutgoingStreamTubeChannel>

Inherits Tp::StreamTubeChannel.

List of all members.

Public Member Functions

Static Public Member Functions

Static Public Attributes

Protected Member Functions


Detailed Description

The OutgoingStreamTubeChannel class represents an outgoing Telepathy channel of type StreamTube.

Outgoing (locally initiated/requested) tubes are initially in the TubeChannelStateNotOffered state. The various offer methods in this class can be used to offer a local listening TCP or Unix socket for the tube's target to connect to, at which point the tube becomes TubeChannelStateRemotePending. If the target accepts the connection request, the state goes TubeChannelStateOpen and the connection manager will start tunneling any incoming connections from the recipient side to the local service.


Constructor & Destructor Documentation

Tp::OutgoingStreamTubeChannel::OutgoingStreamTubeChannel ( const ConnectionPtr &  connection,
const QString &  objectPath,
const QVariantMap &  immutableProperties,
const Feature coreFeature = OutgoingStreamTubeChannel::FeatureCore 
) [protected]

Construct a new OutgoingStreamTubeChannel object.

Parameters:
connectionConnection owning this channel, and specifying the service.
objectPathThe channel object path.
immutablePropertiesThe channel immutable properties.
coreFeatureThe core feature of the channel type, if any. The corresponding introspectable should depend on OutgoingStreamTubeChannel::FeatureCore.

Member Function Documentation

OutgoingStreamTubeChannelPtr Tp::OutgoingStreamTubeChannel::create ( const ConnectionPtr &  connection,
const QString &  objectPath,
const QVariantMap &  immutableProperties 
) [static]

Create a new OutgoingStreamTubeChannel object.

Parameters:
connectionConnection owning this channel, and specifying the service.
objectPathThe channel object path.
immutablePropertiesThe channel immutable properties.
Returns:
A OutgoingStreamTubeChannelPtr object pointing to the newly created OutgoingStreamTubeChannel object.

Reimplemented from Tp::StreamTubeChannel.

PendingOperation * Tp::OutgoingStreamTubeChannel::offerTcpSocket ( const QHostAddress &  address,
quint16  port,
const QVariantMap &  parameters = QVariantMap() 
)

Offer a TCP socket over this stream tube.

This method offers a TCP socket over this tube. The socket's address is given as a QHostAddress and a numerical port in native byte order.

If your application uses QTcpServer as the local TCP server implementation, you can use the offerTcpSocket(const QTcpServer *, const QVariantMap &) overload instead to more easily pass the server's listen address.

It is guaranteed that when the PendingOperation returned by this method will be completed, the tube will be opened and ready to be used.

Connection managers adhering to the Telepathy specification should always support offering IPv4 TCP sockets. IPv6 sockets are only supported if supportsIPv6SocketsOnLocalhost() is true.

Note that the library will try to use SocketAccessControlPort access control whenever possible, as it allows to map connections to users based on their source addresses. If supportsIPv4SocketsWithSpecifiedAddress() or supportsIPv6SocketsWithSpecifiedAddress() for IPv4 and IPv6 sockets respectively is false, this feature is not available, and the connectionsForSourceAddresses() map won't contain useful distinct keys.

Arbitrary parameters can be associated with the offer to bootstrap legacy protocols; these will in particular be available as IncomingStreamTubeChannel::parameters() for a tube receiver implemented using TelepathyQt in the other end.

This method requires OutgoingStreamTubeChannel::FeatureCore to be ready.

Parameters:
addressA valid IPv4 or IPv6 address pointing to an existing socket.
portThe port the socket is listening for connections to.
parametersA dictionary of arbitrary parameters to send with the tube offer.
Returns:
A PendingOperation which will emit PendingOperation::finished when the stream tube is ready to be used (hence in the TubeStateOpen state).
PendingOperation * Tp::OutgoingStreamTubeChannel::offerTcpSocket ( const QTcpServer *  server,
const QVariantMap &  parameters = QVariantMap() 
)

Offer a TCP socket over this stream tube.

Otherwise identical to offerTcpSocket(const QHostAddress &, quint16, const QVariantMap &), but allows passing the local service's address in an already listening QTcpServer.

Parameters:
serverA valid QTcpServer, which should be already listening for incoming connections.
parametersA dictionary of arbitrary parameters to send with the tube offer.
Returns:
A PendingOperation which will emit PendingOperation::finished when the stream tube is ready to be used (hence in the TubeStateOpen state).
PendingOperation * Tp::OutgoingStreamTubeChannel::offerUnixSocket ( const QString &  socketAddress,
const QVariantMap &  parameters = QVariantMap(),
bool  requireCredentials = false 
)

Offer an Unix socket over this stream tube.

This method offers an Unix socket over this stream tube. The socket address is given as a a QString, which should contain the path to the socket. Abstract Unix sockets are also supported, and are given as addresses prefixed with a NUL byte.

If your application uses QLocalServer as the local Unix server implementation, you can use the offerUnixSocket(const QLocalServer *, const QVariantMap &, bool) overload instead to more easily pass the server's listen address.

Note that only connection managers for which supportsUnixSocketsOnLocalhost() or supportsAbstractUnixSocketsOnLocalhost() is true support exporting Unix sockets.

If supportsUnixSocketsWithCredentials() or supportsAbstractUnixSocketsWithCredentials(), as appropriate, returns true, the requireCredentials parameter can be set to true to make the connection manager pass an SCM_CREDS or SCM_CREDENTIALS message as supported by the platform when making a new connection. This enables preventing other local users from connecting to the service, but might not be possible to use with all protocols as the message is in-band in the data stream.

Arbitrary parameters can be associated with the offer to bootstrap legacy protocols; these will in particular be available as IncomingStreamTubeChannel::parameters() for a tube receiver implemented using TelepathyQt in the other end.

This method requires OutgoingStreamTubeChannel::FeatureCore to be ready.

Parameters:
addressA valid path to an existing Unix socket or abstract Unix socket.
parametersA dictionary of arbitrary parameters to send with the tube offer.
requireCredentialsWhether the server requires a SCM_CREDS or SCM_CREDENTIALS message upon connection.
Returns:
A PendingOperation which will emit PendingOperation::finished when the stream tube is ready to be used (hence in the TubeStateOpen state).
PendingOperation * Tp::OutgoingStreamTubeChannel::offerUnixSocket ( const QLocalServer *  server,
const QVariantMap &  parameters = QVariantMap(),
bool  requireCredentials = false 
)

Offer an Unix socket over the tube.

Otherwise identical to offerUnixSocket(const QString &, const QVariantMap &, bool), but allows passing the local service's address as an already listening QLocalServer.

This method requires OutgoingStreamTubeChannel::FeatureCore to be ready.

Parameters:
serverA valid QLocalServer, which should be already listening for incoming connections.
parametersA dictionary of arbitrary parameters to send with the tube offer.
requireCredentialsWhether the server should require a SCM_CRED or SCM_CREDENTIALS message upon connection.
Returns:
A PendingOperation which will emit PendingOperation::finished when the stream tube is ready to be used (hence in the TubeStateOpen state).
See also:
StreamTubeChannel::supportsUnixSocketsOnLocalhost(), StreamTubeChannel::supportsUnixSocketsWithCredentials(), StreamTubeChannel::supportsAbstractUnixSocketsOnLocalhost(), StreamTubeChannel::supportsAbstractUnixSocketsWithCredentials()
QHash< uint, ContactPtr > Tp::OutgoingStreamTubeChannel::contactsForConnections ( ) const

Return a map from connection ids to the associated contact.

Note that this function will only return valid data after the tube has been opened.

This method requires StreamTubeChannel::FeatureConnectionMonitoring to be ready.

Returns:
The map from connection ids to pointer to Contact objects.
See also:
connectionsForSourceAddresses(), connectionsForCredentials(), StreamTubeChannel::addressType()
QHash< QPair< QHostAddress, quint16 >, uint > Tp::OutgoingStreamTubeChannel::connectionsForSourceAddresses ( ) const

Return a map from a source address to the corresponding connections ids.

The connection ids retrieved here can be used to map a source address which connected to your socket to a connection ID (for error reporting) and further, to a contact (by using contactsForConnections()).

This method is only useful if a TCP socket was offered on this tube and the connection manager supports SocketAccessControlPort, which can be discovered using supportsIPv4SocketsWithSpecifiedAddress() and supportsIPv6SocketsWithSpecifiedAddress() for IPv4 and IPv6 sockets respectively.

Note that this function will only return valid data after the tube has been opened.

This method requires StreamTubeChannel::FeatureConnectionMonitoring to be ready.

Returns:
The map from source addresses as (QHostAddress, port in native byte order) pairs to the corresponding connection ids.
See also:
connectionsForCredentials()

Return a map from a credential byte to the corresponding connections ids.

The connection ids retrieved here can be used to map a source address which connected to your socket to a connection ID (for error reporting) and further, to a contact (by using contactsForConnections()).

This method is only useful if this tube was offered using an Unix socket and passing credential bytes was enabled (requireCredentials == true).

Note that this function will only return valid data after the tube has been opened.

This method requires StreamTubeChannel::FeatureConnectionMonitoring to be ready.

Returns:
The map from credential bytes to the corresponding connection ids.
See also:
connectionsForSourceAddresses()

Member Data Documentation

Feature representing the core that needs to become ready to make the OutgoingStreamTubeChannel object usable.

This is currently the same as StreamTubeChannel::FeatureCore, but may change to include more.

When calling isReady(), becomeReady(), this feature is implicitly added to the requested features.

Reimplemented from Tp::StreamTubeChannel.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00962.html0000644000175200001440000000504512000060453021632 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AvatarTokenMap Member List
This is the complete list of members for Tp::AvatarTokenMap, including all inherited members.
AvatarTokenMap()Tp::AvatarTokenMap [inline]
AvatarTokenMap(const QMap< uint, QString > &a)Tp::AvatarTokenMap [inline]
operator=(const QMap< uint, QString > &a)Tp::AvatarTokenMap [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00159.html0000644000175200001440000001457012000060453021633 0ustar00collabora-develusers00000000000000 Tp::Codec Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Codec Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

A description of a codec.


Member Data Documentation

Numeric identifier for the codec. This will be used as the PT in the SDP or content description.
QString Tp::Codec::name
The name of the codec.
The clockrate of the codec.
Number of channels of the codec if applicable, otherwise 0.
This should be set to true in calls to CallContentMediaDescriptionInterface::Accept() and UpdateLocalMediaDescription() if this codec has changed in a way that needs to be signalled over the network. If it is set to false, the CM is allowed ignore any differences between the current parameters and the previous ones
This mechanism may be used to save bandwidth and avoid the CM having to calculate diffs against previous versions of this struct, which can lead to false-positives (e.g. redundant ptime updates).
Extra parameters for this codec.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00438_source.html0000644000175200001440000002404012000060453023204 0ustar00collabora-develusers00000000000000 and-filter.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
and-filter.h
00001 
00023 #ifndef _TelepathyQt_and_filter_h_HEADER_GUARD_
00024 #define _TelepathyQt_and_filter_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Filter>
00031 #include <TelepathyQt/Types>
00032 
00033 namespace Tp
00034 {
00035 
00036 template <class T>
00037 class AndFilter : public Filter<T>
00038 {
00039 public:
00040     static SharedPtr<AndFilter<T> > create(
00041             const QList<SharedPtr<const Filter<T> > > &filters = QList<SharedPtr<const Filter<T> > >())
00042     {
00043         return SharedPtr<AndFilter<T> >(new AndFilter<T>(filters));
00044     }
00045 
00046     inline virtual ~AndFilter() { }
00047 
00048     inline virtual bool isValid() const
00049     {
00050         Q_FOREACH (const SharedPtr<const Filter<T> > &filter, mFilters) {
00051             if (!filter || !filter->isValid()) {
00052                 return false;
00053             }
00054         }
00055         return true;
00056     }
00057 
00058     inline virtual bool matches(const SharedPtr<T> &t) const
00059     {
00060         if (!isValid()) {
00061             return false;
00062         }
00063 
00064         Q_FOREACH (const SharedPtr<const Filter<T> > &filter, mFilters) {
00065             if (!filter->matches(t)) {
00066                 return false;
00067             }
00068         }
00069         return true;
00070     }
00071 
00072     inline QList<SharedPtr<const Filter<T> > > filters() const { return mFilters; }
00073 
00074 private:
00075     AndFilter(const QList<SharedPtr<const Filter<T> > > &filters)
00076         : Filter<T>(), mFilters(filters) { }
00077 
00078     QList<SharedPtr<const Filter<T> > > mFilters;
00079 };
00080 
00081 } // Tp
00082 
00083 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00058.html0000644000175200001440000003454212000060453021632 0ustar00collabora-develusers00000000000000 Tp::AvatarSpec Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AvatarSpec Class Reference

The AvatarSpec class represents a Telepathy avatar information supported by a protocol. More...

#include <TelepathyQt/AvatarSpec>

List of all members.

Public Member Functions


Detailed Description

The AvatarSpec class represents a Telepathy avatar information supported by a protocol.


Constructor & Destructor Documentation

Tp::AvatarSpec::AvatarSpec ( const QStringList &  supportedMimeTypes,
uint  minHeight,
uint  maxHeight,
uint  recommendedHeight,
uint  minWidth,
uint  maxWidth,
uint  recommendedWidth,
uint  maxBytes 
)

Member Function Documentation

bool Tp::AvatarSpec::isValid ( ) const [inline]
AvatarSpec & Tp::AvatarSpec::operator= ( const AvatarSpec other)
QStringList Tp::AvatarSpec::supportedMimeTypes ( ) const


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01033.html0000644000175200001440000000506312000060453021620 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::StringStringMap Member List
This is the complete list of members for Tp::StringStringMap, including all inherited members.
operator=(const QMap< QString, QString > &a)Tp::StringStringMap [inline]
StringStringMap()Tp::StringStringMap [inline]
StringStringMap(const QMap< QString, QString > &a)Tp::StringStringMap [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01010.html0000644000175200001440000000526312000060453021615 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ObjectImmutablePropertiesMap Member List
This is the complete list of members for Tp::ObjectImmutablePropertiesMap, including all inherited members.
ObjectImmutablePropertiesMap()Tp::ObjectImmutablePropertiesMap [inline]
ObjectImmutablePropertiesMap(const QMap< QDBusObjectPath, QVariantMap > &a)Tp::ObjectImmutablePropertiesMap [inline]
operator=(const QMap< QDBusObjectPath, QVariantMap > &a)Tp::ObjectImmutablePropertiesMap [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00067.html0000644000175200001440000002625712000060453021636 0ustar00collabora-develusers00000000000000 Tp::BaseProtocolAvatarsInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

Base class for implementations of Protocol.Interface.Avatars. More...

#include <TelepathyQt/BaseProtocolAvatarsInterface>

Inherits Tp::AbstractProtocolInterface.

List of all members.

Public Member Functions

Static Public Member Functions

  • static
    BaseProtocolAvatarsInterfacePtr create ()
  • template<typename BaseProtocolAvatarsInterfaceSubclass > static SharedPtr
    < BaseProtocolAvatarsInterfaceSubclass > create ()

Protected Member Functions


Detailed Description

Base class for implementations of Protocol.Interface.Avatars.


Constructor & Destructor Documentation


Member Function Documentation

static BaseProtocolAvatarsInterfacePtr Tp::BaseProtocolAvatarsInterface::create ( ) [inline, static]
template<typename BaseProtocolAvatarsInterfaceSubclass >
static SharedPtr<BaseProtocolAvatarsInterfaceSubclass> Tp::BaseProtocolAvatarsInterface::create ( ) [inline, static]

Return the immutable properties of this interface.

Immutable properties cannot change after the interface has been registered on a service on the bus with registerInterface().

Returns:
The immutable properties of this interface.

Implements Tp::AbstractDBusServiceInterface.

Return the AvatarSpec that has been set with setAvatarDetails().

The contents of this AvatarSpec are exposed as the various properties of this interface on the bus and represent the expected values of the Connection.Interface.Avatars properties on connections of this protocol.

This property is immutable and cannot change after this interface has been registered on an object on the bus with registerInterface().

Returns:
The AvatarSpec that has been set with setAvatarDetails().
See also:
setAvatarDetails()

Set the avatar details that will be exposed on the properties of this interface on the bus.

This property is immutable and cannot change after this interface has been registered on an object on the bus with registerInterface().

Parameters:
detailsThe details to set.
See also:
avatarDetails()


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_0x68.html0000644000175200001440000003107112000060453023604 0ustar00collabora-develusers00000000000000 Class Members
   Home · All Classes · All Namespaces · Modules · Functions · Files
Here is a list of all class members with links to the classes they belong to:

- h -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00803.html0000644000175200001440000001175212000060453021626 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::FunctorCaller2< Functor, R, Arg1, Arg2 > Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00244.html0000644000175200001440000005052212000060453021623 0ustar00collabora-develusers00000000000000 Tp::Channel::GroupMemberChangeDetails Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Channel::GroupMemberChangeDetails Class Reference

The Channel::GroupMemberChangeDetails class represents the details of a group membership change. More...

#include <TelepathyQt/Channel>

List of all members.

Public Member Functions


Detailed Description

The Channel::GroupMemberChangeDetails class represents the details of a group membership change.

Extended information is not always available; this will be reflected by the return value of isValid().


Constructor & Destructor Documentation


Member Function Documentation

Channel::GroupMemberChangeDetails & Tp::Channel::GroupMemberChangeDetails::operator= ( const GroupMemberChangeDetails other)

Assigns all information (validity, details) from other to this.

Return whether the details are valid (have actually been received from the service).

Returns:
true if valid, false otherwise.

Return whether the details specify an actor.

If present, actor() will return the contact object representing the person who made the change.

Returns:
true if the actor is known, false otherwise.
See also:
actor()

Return the contact object representing the person who made the change (actor), if known.

Returns:
A pointer to the Contact object, or a null ContactPtr if the actor is unknown.
See also:
hasActor()

Return whether the details specify the reason for the change.

Returns:
true if the reason is known, false otherwise.
See also:
reason()

Return the reason for the change, if known.

Returns:
The change reason as ChannelGroupChangeReason, or ChannelGroupChangeReasonNone if the reason is unknown.
See also:
hasReason()

Return whether the details specify a human-readable message from the contact represented by actor() pertaining to the change.

Returns:
true if the message is known, false otherwise.
See also:
message()

Return a human-readable message from the contact represented by actor() pertaining to the change, if known.

Returns:
The message, or an empty string if the message is unknown.
See also:
hasMessage()

Return whether the details specify a D-Bus error describing the change.

Returns:
true if the error is known, false otherwise.
See also:
error()

Return the D-Bus error describing the change, if known.

The D-Bus error provides more specific information than the reason() and should be used if applicable.

Returns:
A D-Bus error describing the change, or an empty string if the error is unknown.
See also:
hasError()

Return whether the details specify a debug message.

Returns:
true if debug message is present, false otherwise.
See also:
debugMessage()

Return the debug message specified by the details, if any.

The debug message is purely informational, offered for display for bug reporting purposes, and should not be attempted to be parsed.

Returns:
The debug message, or an empty string if there is none.
See also:
hasDebugMessage()

Return a map containing all details of the group members change.

This is useful for accessing domain-specific additional details.

Returns:
The details of the group members change as QVariantMap.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_vars_0x66.html0000644000175200001440000002424112000060453024636 0ustar00collabora-develusers00000000000000 Class Members - Variables
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- f -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00928.html0000644000175200001440000006253712000060453021645 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::RoomListChannel Member List
This is the complete list of members for Tp::RoomListChannel, including all inherited members.
actualFeatures() const Tp::ReadyObject [virtual]
baseInterface() const Tp::Channel [protected]
becomeReady(const Features &requestedFeatures=Features())Tp::ReadyObject [virtual]
busName() const Tp::DBusProxy
BypassInterfaceCheck enum valueTp::OptionalInterfaceFactory< Channel >
Channel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature)Tp::Channel [protected]
channelType() const Tp::Channel
CheckInterfaceSupported enum valueTp::OptionalInterfaceFactory< Channel >
conferenceChannelMerged(const Tp::ChannelPtr &channel)Tp::Channel [signal]
conferenceChannelRemoved(const Tp::ChannelPtr &channel, const Tp::Channel::GroupMemberChangeDetails &details)Tp::Channel [signal]
conferenceChannels() const Tp::Channel
conferenceInitialChannels() const Tp::Channel
conferenceInitialInviteeContacts() const Tp::Channel
conferenceMergeChannel(const ChannelPtr &channel)Tp::Channel
conferenceOriginalChannels() const Tp::Channel
conferenceSplitChannel()Tp::Channel
connection() const Tp::Channel
create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties)Tp::RoomListChannel [static]
dbusConnection() const Tp::DBusProxy
DBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::DBusProxy
FeatureConferenceInitialInviteeContactsTp::Channel [static]
FeatureCoreTp::Channel [static]
groupAddContacts(const QList< ContactPtr > &contacts, const QString &message=QString())Tp::Channel
groupAddSelfHandle()Tp::Channel [protected, slot]
groupAreHandleOwnersAvailable() const Tp::Channel
groupCanAcceptContactsWithMessage() const Tp::Channel
groupCanAddContacts() const Tp::Channel
groupCanAddContactsChanged(bool canAddContacts)Tp::Channel [signal]
groupCanAddContactsWithMessage() const Tp::Channel
groupCanDepartWithMessage() const Tp::Channel
groupCanRejectContactsWithMessage() const Tp::Channel
groupCanRemoveContacts() const Tp::Channel
groupCanRemoveContactsChanged(bool canRemoveContacts)Tp::Channel [signal]
groupCanRemoveContactsWithMessage() const Tp::Channel
groupCanRescindContacts() const Tp::Channel
groupCanRescindContactsChanged(bool canRescindContacts)Tp::Channel [signal]
groupCanRescindContactsWithMessage() const Tp::Channel
groupContacts(bool includeSelfContact=true) const Tp::Channel
groupFlags() const Tp::Channel
groupFlagsChanged(Tp::ChannelGroupFlags flags, Tp::ChannelGroupFlags added, Tp::ChannelGroupFlags removed)Tp::Channel [signal]
groupHandleOwners() const Tp::Channel
groupHandleOwnersChanged(const Tp::HandleOwnerMap &owners, const Tp::UIntList &added, const Tp::UIntList &removed)Tp::Channel [signal]
groupIsSelfContactTracked() const Tp::Channel
groupLocalPendingContactChangeInfo(const ContactPtr &contact) const Tp::Channel
groupLocalPendingContacts(bool includeSelfContact=true) const Tp::Channel
groupMembersChanged(const Tp::Contacts &groupMembersAdded, const Tp::Contacts &groupLocalPendingMembersAdded, const Tp::Contacts &groupRemotePendingMembersAdded, const Tp::Contacts &groupMembersRemoved, const Tp::Channel::GroupMemberChangeDetails &details)Tp::Channel [signal]
groupRemotePendingContacts(bool includeSelfContact=true) const Tp::Channel
groupRemoveContacts(const QList< ContactPtr > &contacts, const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone)Tp::Channel
groupSelfContact() const Tp::Channel
groupSelfContactChanged()Tp::Channel [signal]
groupSelfContactRemoveInfo() const Tp::Channel
groupSelfHandleIsLocalPending() const Tp::Channel [protected]
hasInterface(const QString &name) constTp::OptionalInterfaceFactory< Channel > [inline]
immutableProperties() const Tp::Channel
initiatorContact() const Tp::Channel
interface() constTp::OptionalInterfaceFactory< Channel > [inline]
interfaces() constTp::OptionalInterfaceFactory< Channel > [inline]
InterfaceSupportedChecking enum nameTp::OptionalInterfaceFactory< Channel >
invalidate(const QString &reason, const QString &message)Tp::DBusProxy [protected]
invalidate(const QDBusError &error)Tp::DBusProxy [protected]
invalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage)Tp::DBusProxy [signal]
invalidationMessage() const Tp::DBusProxy
invalidationReason() const Tp::DBusProxy
isConference() const Tp::Channel
isReady(const Features &features=Features()) const Tp::ReadyObject [virtual]
isRequested() const Tp::Channel
isValid() const Tp::DBusProxy
missingFeatures() const Tp::ReadyObject [virtual]
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
objectPath() const Tp::DBusProxy
optionalInterface(InterfaceSupportedChecking check=CheckInterfaceSupported) constTp::OptionalInterfaceFactory< Channel > [inline]
OptionalInterfaceFactory(Channel *this_)Tp::OptionalInterfaceFactory< Channel > [inline]
propertyChanged(const QString &propertyName)Tp::Object [signal]
readinessHelper() const Tp::ReadyObject [protected]
ReadyObject(RefCounted *object, const Feature &featureCore)Tp::ReadyObject
ReadyObject(DBusProxy *proxy, const Feature &featureCore)Tp::ReadyObject
RefCounted()Tp::RefCounted [inline]
requestClose()Tp::Channel
requestedFeatures() const Tp::ReadyObject [virtual]
requestLeave(const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone)Tp::Channel
RoomListChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature=Channel::FeatureCore)Tp::RoomListChannel [protected]
setBusName(const QString &busName)Tp::DBusProxy [protected]
setInterfaces(const QStringList &interfaces)Tp::OptionalInterfaceFactory< Channel > [inline, protected]
StatefulDBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::StatefulDBusProxy
supportsConferenceMerging() const Tp::Channel
supportsConferenceSplitting() const Tp::Channel
targetContact() const Tp::Channel
targetHandle() const Tp::Channel
targetHandleType() const Tp::Channel
targetId() const Tp::Channel
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique)Tp::StatefulDBusProxy [static]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique, QString &error, QString &message)Tp::StatefulDBusProxy [static]
~Channel()Tp::Channel [virtual]
~DBusProxy()Tp::DBusProxy [virtual]
~Object()Tp::Object [virtual]
~OptionalInterfaceFactory()Tp::OptionalInterfaceFactory< Channel > [inline]
~ReadyObject()Tp::ReadyObject [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]
~RoomListChannel()Tp::RoomListChannel [virtual]
~StatefulDBusProxy()Tp::StatefulDBusProxy [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00551_source.html0000644000175200001440000001274612000060453023212 0ustar00collabora-develusers00000000000000 dbus-error.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
dbus-error.h
00001 
00023 #ifndef _TelepathyQt_dbus_error_h_HEADER_GUARD_
00024 #define _TelepathyQt_dbus_error_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Global>
00031 
00032 namespace Tp
00033 {
00034 
00035 class TP_QT_EXPORT DBusError
00036 {
00037     Q_DISABLE_COPY(DBusError)
00038 
00039 public:
00040     DBusError();
00041     DBusError(const QString &name, const QString &message);
00042     ~DBusError();
00043 
00044     bool isValid() const { return mPriv != 0; }
00045 
00046     bool operator==(const DBusError &other) const;
00047     bool operator!=(const DBusError &other) const;
00048 
00049     QString name() const;
00050     QString message() const;
00051     void set(const QString &name, const QString &message);
00052 
00053 private:
00054     struct Private;
00055     friend struct Private;
00056     Private *mPriv;
00057 };
00058 
00059 } // Tp
00060 
00061 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00273.html0000644000175200001440000001747612000060453021640 0ustar00collabora-develusers00000000000000 Tp::MemberFunctor0< R, T > Struct Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MemberFunctor0< R, T > Struct Template Reference

#include </home/collabora-devel/kde/src/telepathy-qt4/TelepathyQt/functors.h>

Inherits Tp::BaseFunctor.

List of all members.

Public Types

Public Member Functions

Public Attributes

template<class R, class T>
struct Tp::MemberFunctor0< R, T >


Member Typedef Documentation

template<class R, class T>
typedef R(T::* Tp::MemberFunctor0< R, T >::FunctionType)()
template<class R, class T>
typedef R Tp::MemberFunctor0< R, T >::ResultType

Constructor & Destructor Documentation

template<class R, class T>
Tp::MemberFunctor0< R, T >::MemberFunctor0 ( T *  object,
FunctionType  fn 
) [inline]

Member Function Documentation

template<class R, class T>
ResultType Tp::MemberFunctor0< R, T >::operator() ( ) const [inline]

Member Data Documentation

template<class R, class T>
T* Tp::MemberFunctor0< R, T >::object
template<class R, class T>
FunctionType Tp::MemberFunctor0< R, T >::fn


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00054.html0000644000175200001440000002207512000060453021624 0ustar00collabora-develusers00000000000000 Tp::AndFilter< T > Class Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AndFilter< T > Class Template Reference

The AndFilter class provides a generic filter object to be used in conjunction of other filters. More...

#include <TelepathyQt/AndFilter>

Inherits Tp::Filter< T >.

List of all members.

Public Member Functions

Static Public Member Functions


Detailed Description

template<class T>
class Tp::AndFilter< T >

The AndFilter class provides a generic filter object to be used in conjunction of other filters.

The AndFilter will match if all of its given list of filters matches their criteria.


Constructor & Destructor Documentation

template<class T >
virtual Tp::AndFilter< T >::~AndFilter ( ) [inline, virtual]

Member Function Documentation

template<class T >
static SharedPtr<AndFilter<T> > Tp::AndFilter< T >::create ( const QList< SharedPtr< const Filter< T > > > &  filters = QList<SharedPtr<const Filter<T> > >()) [inline, static]
template<class T >
virtual bool Tp::AndFilter< T >::isValid ( ) const [inline, virtual]

Reimplemented from Tp::Filter< T >.

template<class T >
virtual bool Tp::AndFilter< T >::matches ( const SharedPtr< T > &  t) const [inline, virtual]

Reimplemented from Tp::Filter< T >.

template<class T >
QList<SharedPtr<const Filter<T> > > Tp::AndFilter< T >::filters ( ) const [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00650_source.html0000644000175200001440000001662312000060453023210 0ustar00collabora-develusers00000000000000 pending-operation.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
pending-operation.h
00001 
00023 #ifndef _TelepathyQt_pending_operation_h_HEADER_GUARD_
00024 #define _TelepathyQt_pending_operation_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Global>
00031 #include <TelepathyQt/RefCounted>
00032 #include <TelepathyQt/SharedPtr>
00033 
00034 #include <QObject>
00035 
00036 class QDBusError;
00037 class QDBusPendingCall;
00038 class QDBusPendingCallWatcher;
00039 
00040 namespace Tp
00041 {
00042 
00043 class ReadinessHelper;
00044 
00045 class TP_QT_EXPORT PendingOperation : public QObject
00046 {
00047     Q_OBJECT
00048     Q_DISABLE_COPY(PendingOperation)
00049 
00050 public:
00051     virtual ~PendingOperation();
00052 
00053     bool isFinished() const;
00054 
00055     bool isValid() const;
00056 
00057     bool isError() const;
00058     QString errorName() const;
00059     QString errorMessage() const;
00060 
00061 Q_SIGNALS:
00062     void finished(Tp::PendingOperation *operation);
00063 
00064 protected:
00065     PendingOperation(const SharedPtr<RefCounted> &object);
00066     SharedPtr<RefCounted> object() const;
00067 
00068 protected Q_SLOTS:
00069     void setFinished();
00070     void setFinishedWithError(const QString &name, const QString &message);
00071     void setFinishedWithError(const QDBusError &error);
00072 
00073 private Q_SLOTS:
00074     TP_QT_NO_EXPORT void emitFinished();
00075 
00076 private:
00077     friend class ContactManager;
00078     friend class ReadinessHelper;
00079 
00080     struct Private;
00081     friend struct Private;
00082     Private *mPriv;
00083 };
00084 
00085 } // Tp
00086 
00087 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00985.html0000644000175200001440000000507312000060453021640 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactSearchMap Member List
This is the complete list of members for Tp::ContactSearchMap, including all inherited members.
ContactSearchMap()Tp::ContactSearchMap [inline]
ContactSearchMap(const QMap< QString, QString > &a)Tp::ContactSearchMap [inline]
operator=(const QMap< QString, QString > &a)Tp::ContactSearchMap [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00500_source.html0000644000175200001440000001372412000060453023201 0ustar00collabora-develusers00000000000000 cli-channel-request-body.hpp Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-channel-request-body.hpp
00001 #define IN_TP_QT_HEADER
00002 #include "TelepathyQt/channel-request.h"
00003 
00004 namespace Tp
00005 {
00006 namespace Client
00007 {
00008 
00009 ChannelRequestInterface::ChannelRequestInterface(const QString& busName, const QString& objectPath, QObject *parent)
00010     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00011 {
00012 }
00013 
00014 ChannelRequestInterface::ChannelRequestInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00015     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00016 {
00017 }
00018 
00019 ChannelRequestInterface::ChannelRequestInterface(Tp::DBusProxy *proxy)
00020     : Tp::AbstractInterface(proxy, staticInterfaceName())
00021 {
00022 }
00023 
00024 void ChannelRequestInterface::invalidate(Tp::DBusProxy *proxy,
00025         const QString &error, const QString &message)
00026 {
00027     disconnect(this, SIGNAL(Failed(const QString&, const QString&)), NULL, NULL);
00028     disconnect(this, SIGNAL(Succeeded()), NULL, NULL);
00029     disconnect(this, SIGNAL(SucceededWithChannel(const QDBusObjectPath&, const QVariantMap&, const QDBusObjectPath&, const QVariantMap&)), NULL, NULL);
00030 
00031     Tp::AbstractInterface::invalidate(proxy, error, message);
00032 }
00033 }
00034 }


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00917.html0000644000175200001440000001506612000060453021636 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Profile Member List
This is the complete list of members for Tp::Profile, including all inherited members.
allowOtherPresences() const Tp::Profile
cmName() const Tp::Profile
createForFileName(const QString &fileName)Tp::Profile [static]
createForServiceName(const QString &serviceName)Tp::Profile [static]
hasParameter(const QString &name) const Tp::Profile
hasPresence(const QString &id) const Tp::Profile
iconName() const Tp::Profile
isFake() const Tp::Profile
isValid() const Tp::Profile
name() const Tp::Profile
parameter(const QString &name) const Tp::Profile
ParameterList typedefTp::Profile
parameters() const Tp::Profile
presence(const QString &id) const Tp::Profile
PresenceList typedefTp::Profile
presences() const Tp::Profile
protocolName() const Tp::Profile
provider() const Tp::Profile
RefCounted()Tp::RefCounted [inline]
serviceName() const Tp::Profile
type() const Tp::Profile
unsupportedChannelClassSpecs() const Tp::Profile
~Profile()Tp::Profile
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01062.html0000644000175200001440000003615612000060453021631 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::AccountInterface Member List
This is the complete list of members for Tp::Client::AccountInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
AccountInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::AccountInterface
AccountInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::AccountInterface
AccountInterface(Tp::DBusProxy *proxy)Tp::Client::AccountInterface
AccountPropertyChanged(const QVariantMap &properties)Tp::Client::AccountInterface [signal]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::AccountInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
Reconnect(int timeout=-1)Tp::Client::AccountInterface [inline, slot]
Remove(int timeout=-1)Tp::Client::AccountInterface [inline, slot]
Removed()Tp::Client::AccountInterface [signal]
requestAllProperties() const Tp::Client::AccountInterface [inline]
requestPropertyAutomaticPresence() const Tp::Client::AccountInterface [inline]
requestPropertyChangingPresence() const Tp::Client::AccountInterface [inline]
requestPropertyConnectAutomatically() const Tp::Client::AccountInterface [inline]
requestPropertyConnection() const Tp::Client::AccountInterface [inline]
requestPropertyConnectionError() const Tp::Client::AccountInterface [inline]
requestPropertyConnectionErrorDetails() const Tp::Client::AccountInterface [inline]
requestPropertyConnectionStatus() const Tp::Client::AccountInterface [inline]
requestPropertyConnectionStatusReason() const Tp::Client::AccountInterface [inline]
requestPropertyCurrentPresence() const Tp::Client::AccountInterface [inline]
requestPropertyDisplayName() const Tp::Client::AccountInterface [inline]
requestPropertyEnabled() const Tp::Client::AccountInterface [inline]
requestPropertyHasBeenOnline() const Tp::Client::AccountInterface [inline]
requestPropertyIcon() const Tp::Client::AccountInterface [inline]
requestPropertyInterfaces() const Tp::Client::AccountInterface [inline]
requestPropertyNickname() const Tp::Client::AccountInterface [inline]
requestPropertyNormalizedName() const Tp::Client::AccountInterface [inline]
requestPropertyParameters() const Tp::Client::AccountInterface [inline]
requestPropertyRequestedPresence() const Tp::Client::AccountInterface [inline]
requestPropertyService() const Tp::Client::AccountInterface [inline]
requestPropertySupersedes() const Tp::Client::AccountInterface [inline]
requestPropertyValid() const Tp::Client::AccountInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
setPropertyAutomaticPresence(Tp::SimplePresence newValue)Tp::Client::AccountInterface [inline]
setPropertyConnectAutomatically(bool newValue)Tp::Client::AccountInterface [inline]
setPropertyDisplayName(QString newValue)Tp::Client::AccountInterface [inline]
setPropertyEnabled(bool newValue)Tp::Client::AccountInterface [inline]
setPropertyIcon(QString newValue)Tp::Client::AccountInterface [inline]
setPropertyNickname(QString newValue)Tp::Client::AccountInterface [inline]
setPropertyRequestedPresence(Tp::SimplePresence newValue)Tp::Client::AccountInterface [inline]
setPropertyService(QString newValue)Tp::Client::AccountInterface [inline]
setPropertySupersedes(Tp::ObjectPathList newValue)Tp::Client::AccountInterface [inline]
staticInterfaceName()Tp::Client::AccountInterface [inline, static]
UpdateParameters(const QVariantMap &set, const QStringList &unset, int timeout=-1)Tp::Client::AccountInterface [inline, slot]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_vars_0x6d.html0000644000175200001440000000563012000060453024715 0ustar00collabora-develusers00000000000000 Class Members - Variables
   Home · All Classes · All Namespaces · Modules · Functions · Files


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00815.html0000644000175200001440000001473312000060453021633 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::CapabilitiesBase Member List
This is the complete list of members for Tp::CapabilitiesBase, including all inherited members.
allClassSpecs() const Tp::CapabilitiesBase
audioCalls() const Tp::CapabilitiesBase
CapabilitiesBase()Tp::CapabilitiesBase
CapabilitiesBase(const CapabilitiesBase &other)Tp::CapabilitiesBase
CapabilitiesBase(bool specificToContact)Tp::CapabilitiesBase [protected]
CapabilitiesBase(const RequestableChannelClassList &rccs, bool specificToContact)Tp::CapabilitiesBase [protected]
CapabilitiesBase(const RequestableChannelClassSpecList &rccSpecs, bool specificToContact)Tp::CapabilitiesBase [protected]
fileTransfers() const Tp::CapabilitiesBase
isSpecificToContact() const Tp::CapabilitiesBase
operator=(const CapabilitiesBase &other)Tp::CapabilitiesBase
streamedMediaAudioCalls() const Tp::CapabilitiesBase
streamedMediaCalls() const Tp::CapabilitiesBase
streamedMediaVideoCalls() const Tp::CapabilitiesBase
streamedMediaVideoCallsWithAudio() const Tp::CapabilitiesBase
textChats() const Tp::CapabilitiesBase
updateRequestableChannelClasses(const RequestableChannelClassList &rccs)Tp::CapabilitiesBase [protected, virtual]
upgradingCalls() const Tp::CapabilitiesBase
upgradingStreamedMediaCalls() const Tp::CapabilitiesBase
videoCalls() const Tp::CapabilitiesBase
videoCallsWithAudio() const Tp::CapabilitiesBase
~CapabilitiesBase()Tp::CapabilitiesBase [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_0x65.html0000644000175200001440000001753412000060453023611 0ustar00collabora-develusers00000000000000 Class Members
   Home · All Classes · All Namespaces · Modules · Functions · Files
Here is a list of all class members with links to the classes they belong to:

- e -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01148.html0000644000175200001440000002277112000060453021634 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::AuthenticationTLSCertificateInterface Member List
This is the complete list of members for Tp::Client::AuthenticationTLSCertificateInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
Accept(int timeout=-1)Tp::Client::AuthenticationTLSCertificateInterface [inline, slot]
Accepted()Tp::Client::AuthenticationTLSCertificateInterface [signal]
AuthenticationTLSCertificateInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::AuthenticationTLSCertificateInterface
AuthenticationTLSCertificateInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::AuthenticationTLSCertificateInterface
AuthenticationTLSCertificateInterface(Tp::DBusProxy *proxy)Tp::Client::AuthenticationTLSCertificateInterface
AuthenticationTLSCertificateInterface(const Tp::AbstractInterface &mainInterface)Tp::Client::AuthenticationTLSCertificateInterface [explicit]
AuthenticationTLSCertificateInterface(const Tp::AbstractInterface &mainInterface, QObject *parent)Tp::Client::AuthenticationTLSCertificateInterface
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::AuthenticationTLSCertificateInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
Reject(const Tp::TLSCertificateRejectionList &rejections, int timeout=-1)Tp::Client::AuthenticationTLSCertificateInterface [inline, slot]
Rejected(const Tp::TLSCertificateRejectionList &rejections)Tp::Client::AuthenticationTLSCertificateInterface [signal]
requestAllProperties() const Tp::Client::AuthenticationTLSCertificateInterface [inline]
requestPropertyCertificateChainData() const Tp::Client::AuthenticationTLSCertificateInterface [inline]
requestPropertyCertificateType() const Tp::Client::AuthenticationTLSCertificateInterface [inline]
requestPropertyRejections() const Tp::Client::AuthenticationTLSCertificateInterface [inline]
requestPropertyState() const Tp::Client::AuthenticationTLSCertificateInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::AuthenticationTLSCertificateInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00997.html0000644000175200001440000000500512000060453021636 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Location Member List
This is the complete list of members for Tp::Location, including all inherited members.
Location()Tp::Location [inline]
Location(const QMap< QString, QDBusVariant > &a)Tp::Location [inline]
operator=(const QMap< QString, QDBusVariant > &a)Tp::Location [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01144.html0000644000175200001440000001673412000060453021632 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::DebugInterface Member List
This is the complete list of members for Tp::Client::DebugInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
DebugInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::DebugInterface
DebugInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::DebugInterface
DebugInterface(Tp::DBusProxy *proxy)Tp::Client::DebugInterface
GetMessages(int timeout=-1)Tp::Client::DebugInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::DebugInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
NewDebugMessage(double time, const QString &domain, uint level, const QString &message)Tp::Client::DebugInterface [signal]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::DebugInterface [inline]
requestPropertyEnabled() const Tp::Client::DebugInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
setPropertyEnabled(bool newValue)Tp::Client::DebugInterface [inline]
staticInterfaceName()Tp::Client::DebugInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00416.html0000644000175200001440000000672012000060453021625 0ustar00collabora-develusers00000000000000 Tp::VideoResolution Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::VideoResolution Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.


Member Data Documentation

With of the video stream.

Height of the video stream.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00147.html0000644000175200001440000005152712000060453021633 0ustar00collabora-develusers00000000000000 Tp::Client::ChannelTypeServerTLSConnectionInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelTypeServerTLSConnectionInterface Class Reference

#include <TelepathyQt/Channel>

Inherits Tp::AbstractInterface.

List of all members.

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Channel.Type.ServerTLSConnection".


Constructor & Destructor Documentation

Tp::Client::ChannelTypeServerTLSConnectionInterface::ChannelTypeServerTLSConnectionInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelTypeServerTLSConnectionInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ChannelTypeServerTLSConnectionInterface::ChannelTypeServerTLSConnectionInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelTypeServerTLSConnectionInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ChannelTypeServerTLSConnectionInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ChannelTypeServerTLSConnectionInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ChannelTypeServerTLSConnectionInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Channel.Type.ServerTLSConnection", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property ServerCertificate of type QDBusObjectPath.

A TLSCertificate containing the certificate chain as sent by the server, and other relevant information.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Hostname of type QString.

The hostname or domain that the user expects to connect to. Clients SHOULD use the ReferenceIdentities property to verify the identity of the certificate. Clients MAY display this hostname to the user as the expected identity. Clients SHOULD use this property to lookup pinned certificates or other user preferences for the connection.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property ReferenceIdentities of type QStringList.

The identities of the server we expect ServerCertificate to certify; clients SHOULD verify that ServerCertificate matches one of these identities when checking its validity. This property MUST NOT be the empty list; it MUST contain the value of the Hostname property. All other identities included in this property MUST be derived from explicit user input or choices, such as Parameters passed to RequestConnection. The primary use for this property is for XMPP services hosted by Google Apps. When connecting to Google Talk using an .com JID, the server correctly presents a certificate for gmail.com; however, for domains hosted via Google Apps, a certificate for talk.google.com is offered, due to unresolved technical limitations. If the user has explicitly chosen to create a Google Talk account, then trusting a certificate for talk.google.com is reasonable. To handle this case, the connection manager may add the values of any or all of the server, fallback-server and extra-identities parameters; the Google Talk account creation user interface may set these parameters appropriately, or the user may set them for accounts with other services.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
void Tp::Client::ChannelTypeServerTLSConnectionInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00216.html0000644000175200001440000004305112000060453021621 0ustar00collabora-develusers00000000000000 Tp::DBusProxy Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::DBusProxy Class Reference

The DBusProxy class is a base class representing a remote object available over D-Bus. More...

#include <TelepathyQt/DBusProxy>

Inherits Tp::Object, and Tp::ReadyObject.

Inherited by Tp::StatefulDBusProxy, and Tp::StatelessDBusProxy.

List of all members.

Signals

Public Member Functions

Protected Member Functions


Detailed Description

The DBusProxy class is a base class representing a remote object available over D-Bus.

All Telepathy-Qt client convenience classes that wrap Telepathy interfaces inherit from this class in order to provide basic D-Bus interface information.


Constructor & Destructor Documentation

Tp::DBusProxy::DBusProxy ( const QDBusConnection &  dbusConnection,
const QString &  busName,
const QString &  objectPath,
const Feature featureCore 
)

Construct a new DBusProxy object.

Parameters:
dbusConnectionQDBusConnection to use.
busNameD-Bus bus name of the service that provides the remote object.
objectPathThe object path.
featureCoreThe object core feature.

Class destructor.


Member Function Documentation

QDBusConnection Tp::DBusProxy::dbusConnection ( ) const

Return the D-Bus connection through which the remote object is accessed.

Returns:
A QDBusConnection object.
QString Tp::DBusProxy::busName ( ) const

Return the D-Bus bus name (either a unique name or a well-known name) of the service that provides the remote object.

Returns:
The D-Bus bus name.
QString Tp::DBusProxy::objectPath ( ) const

Return the D-Bus object path of the remote object within the service.

Returns:
The D-Bus object path.
bool Tp::DBusProxy::isValid ( ) const

Return whether this proxy is still valid (has not emitted invalidated()).

Returns:
true if still valid, false otherwise.

Return the error name indicating the reason this proxy became invalid.

Returns:
A D-Bus error name, or QString() if this object is still valid.

Return a debugging message indicating the reason this proxy became invalid.

Returns:
A debugging message, or QString() if this object is still valid.
void Tp::DBusProxy::invalidated ( Tp::DBusProxy proxy,
const QString &  errorName,
const QString &  errorMessage 
) [signal]

Emitted when this object is no longer usable.

After this signal is emitted, any D-Bus method calls on the object will fail, but it may be possible to retrieve information that has already been retrieved and cached.

Parameters:
proxyThis proxy.
errorNameThe name of a D-Bus error describing the reason for the invalidation.
errorMessageA debugging message associated with the error.
void Tp::DBusProxy::setBusName ( const QString &  busName) [protected]

Sets the D-Bus bus name. This is used by subclasses after converting well-known names to unique names.

Parameters:
busNameThe D-Bus bus name to set.
void Tp::DBusProxy::invalidate ( const QString &  reason,
const QString &  message 
) [protected]

Called by subclasses when the DBusProxy should become invalid.

This method takes care of setting the invalidationReason, invalidationMessage, and emitting the invalidated signal.

Parameters:
reasonA D-Bus error name (a string in a subset of ASCII, prefixed with a reversed domain name)
messageA debugging message associated with the error
void Tp::DBusProxy::invalidate ( const QDBusError &  error) [protected]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00964.html0000644000175200001440000000510012000060453021624 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::CallStateReason Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00549_source.html0000644000175200001440000007602612000060453023222 0ustar00collabora-develusers00000000000000 contact.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
contact.h
00001 
00023 #ifndef _TelepathyQt_contact_h_HEADER_GUARD_
00024 #define _TelepathyQt_contact_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Channel>
00031 #include <TelepathyQt/Feature>
00032 #include <TelepathyQt/Object>
00033 #include <TelepathyQt/Types>
00034 
00035 #include <QSet>
00036 #include <QVariantMap>
00037 
00038 namespace Tp
00039 {
00040 
00041 struct AvatarData;
00042 class ContactCapabilities;
00043 class LocationInfo;
00044 class ContactManager;
00045 class PendingContactInfo;
00046 class PendingOperation;
00047 class PendingStringList;
00048 class Presence;
00049 class ReferencedHandles;
00050 
00051 class TP_QT_EXPORT Contact : public Object
00052 {
00053     Q_OBJECT
00054     Q_DISABLE_COPY(Contact)
00055 
00056 public:
00057     static const Feature FeatureAlias;
00058     static const Feature FeatureAvatarData;
00059     static const Feature FeatureAvatarToken;
00060     static const Feature FeatureCapabilities;
00061     static const Feature FeatureInfo;
00062     static const Feature FeatureLocation;
00063     static const Feature FeatureSimplePresence;
00064     static const Feature FeatureAddresses;
00065     static const Feature FeatureClientTypes;
00066 
00067     enum PresenceState {
00068          PresenceStateNo,
00069          PresenceStateAsk,
00070          PresenceStateYes
00071     };
00072 
00073     class InfoFields
00074     {
00075     public:
00076         InfoFields();
00077         InfoFields(const ContactInfoFieldList &fields);
00078         InfoFields(const InfoFields &other);
00079         ~InfoFields();
00080 
00081         bool isValid() const { return mPriv.constData() != 0; }
00082 
00083         InfoFields &operator=(const InfoFields &other);
00084 
00085         ContactInfoFieldList fields(const QString &name) const;
00086 
00087         ContactInfoFieldList allFields() const;
00088 
00089     private:
00090         struct Private;
00091         friend struct Private;
00092         QSharedDataPointer<Private> mPriv;
00093     };
00094 
00095     ~Contact();
00096 
00097     ContactManagerPtr manager() const;
00098 
00099     ReferencedHandles handle() const;
00100 
00101     // TODO filter: exact, prefix, substring match
00102     QString id() const;
00103 
00104     Features requestedFeatures() const;
00105     Features actualFeatures() const;
00106 
00107     // TODO filter: exact, prefix, substring match
00108     QString alias() const;
00109 
00110     QMap<QString, QString> vcardAddresses() const;
00111     QStringList uris() const;
00112 
00113     bool isAvatarTokenKnown() const;
00114     QString avatarToken() const;
00115     AvatarData avatarData() const;
00116     void requestAvatarData();
00117 
00118     /*
00119      * TODO filter:
00120      *  - exact match of presence().type(), presence().status()
00121      *  - ANY 1 of a number of presence types/statuses
00122      *  - presence().type() greater or less than a set value
00123      *  - have/don't have presence().message() AND exact/prefix/substring
00124      */
00125     Presence presence() const;
00126 
00127     // TODO filter: the same as Account filtering by caps
00128     ContactCapabilities capabilities() const;
00129 
00130     // TODO filter: is it available, how accurate, are they near me
00131     LocationInfo location() const;
00132 
00133     // TODO filter: having a specific field, having ANY field,
00134     // (field: exact, contents: exact/prefix/substring)
00135     bool isContactInfoKnown() const;
00136     InfoFields infoFields() const;
00137     PendingOperation *refreshInfo();
00138     PendingContactInfo *requestInfo();
00139 
00140     /*
00141      * Filters on exact values of these, but also the "in your contact list at all or not" usecase
00142      */
00143     bool isSubscriptionStateKnown() const;
00144     bool isSubscriptionRejected() const;
00145     PresenceState subscriptionState() const;
00146     bool isPublishStateKnown() const;
00147     bool isPublishCancelled() const;
00148     PresenceState publishState() const;
00149     QString publishStateMessage() const;
00150 
00151     PendingOperation *requestPresenceSubscription(const QString &message = QString());
00152     PendingOperation *removePresenceSubscription(const QString &message = QString());
00153     PendingOperation *authorizePresencePublication(const QString &message = QString());
00154     PendingOperation *removePresencePublication(const QString &message = QString());
00155 
00156     /*
00157      * Filter on being blocked or not
00158      */
00159     bool isBlocked() const;
00160     PendingOperation *block();
00161     PendingOperation *blockAndReportAbuse();
00162     PendingOperation *unblock();
00163 
00164     /*
00165      * Filter on the groups they're in - to show a specific group only
00166      *
00167      * Also prefix/substring match on ANY of the groups of the contact
00168      */
00169     QStringList groups() const;
00170     PendingOperation *addToGroup(const QString &group);
00171     PendingOperation *removeFromGroup(const QString &group);
00172 
00173     QStringList clientTypes() const;
00174     PendingStringList *requestClientTypes();
00175 
00176 Q_SIGNALS:
00177     void aliasChanged(const QString &alias);
00178 
00179     void avatarTokenChanged(const QString &avatarToken);
00180     void avatarDataChanged(const Tp::AvatarData &avatarData);
00181 
00182     void presenceChanged(const Tp::Presence &presence);
00183 
00184     void capabilitiesChanged(const Tp::ContactCapabilities &caps);
00185 
00186     void locationUpdated(const Tp::LocationInfo &location);
00187 
00188     void infoFieldsChanged(const Tp::Contact::InfoFields &infoFields);
00189 
00190     void subscriptionStateChanged(Tp::Contact::PresenceState state);
00191 
00192     void publishStateChanged(Tp::Contact::PresenceState state, const QString &message);
00193 
00194     void blockStatusChanged(bool blocked);
00195 
00196     void addedToGroup(const QString &group);
00197     void removedFromGroup(const QString &group);
00198 
00199     void clientTypesChanged(const QStringList &clientTypes);
00200 
00201     // TODO: consider how the Renaming interface should work and map to Contacts
00202     // I guess it would be something like:
00203     // void renamedTo(Tp::ContactPtr)
00204     // with that contact getting the same features requested as the current one. Or would we rather
00205     // want to signal that change right away with a handle?
00206 
00207 protected:
00208     Contact(ContactManager *manager, const ReferencedHandles &handle,
00209             const Features &requestedFeatures, const QVariantMap &attributes);
00210 
00211     virtual void augment(const Features &requestedFeatures, const QVariantMap &attributes);
00212 
00213 private:
00214     static const Feature FeatureRosterGroups;
00215 
00216     TP_QT_NO_EXPORT void receiveAlias(const QString &alias);
00217     TP_QT_NO_EXPORT void receiveAvatarToken(const QString &avatarToken);
00218     TP_QT_NO_EXPORT void setAvatarToken(const QString &token);
00219     TP_QT_NO_EXPORT void receiveAvatarData(const AvatarData &);
00220     TP_QT_NO_EXPORT void receiveSimplePresence(const SimplePresence &presence);
00221     TP_QT_NO_EXPORT void receiveCapabilities(const RequestableChannelClassList &caps);
00222     TP_QT_NO_EXPORT void receiveLocation(const QVariantMap &location);
00223     TP_QT_NO_EXPORT void receiveInfo(const ContactInfoFieldList &info);
00224     TP_QT_NO_EXPORT void receiveAddresses(const QMap<QString, QString> &addresses,
00225             const QStringList &uris);
00226     TP_QT_NO_EXPORT void receiveClientTypes(const QStringList &clientTypes);
00227 
00228     TP_QT_NO_EXPORT static PresenceState subscriptionStateToPresenceState(uint subscriptionState);
00229     TP_QT_NO_EXPORT void setSubscriptionState(SubscriptionState state);
00230     TP_QT_NO_EXPORT void setPublishState(SubscriptionState state, const QString &message = QString());
00231     TP_QT_NO_EXPORT void setBlocked(bool value);
00232 
00233     TP_QT_NO_EXPORT void setAddedToGroup(const QString &group);
00234     TP_QT_NO_EXPORT void setRemovedFromGroup(const QString &group);
00235 
00236     struct Private;
00237     friend class Connection;
00238     friend class ContactFactory;
00239     friend class ContactManager;
00240     friend struct Private;
00241     Private *mPriv;
00242 };
00243 
00244 } // Tp
00245 
00246 Q_DECLARE_METATYPE(Tp::Contact::InfoFields);
00247 
00248 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00265.html0000644000175200001440000001276212000060453021632 0ustar00collabora-develusers00000000000000 Tp::MediaDescriptionProperties Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MediaDescriptionProperties Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<QString, QDBusVariant>, but needed to have a discrete type in the Qt type system.

A mapping containing all properties that define the information from a CallContentMediaDescriptionInterface and its interfaces.

If CallContentMediaDescriptionInterface::HasRemoteInformation is True, then this mapping will always contains at least CallContentMediaDescriptionInterface::Codecs


Constructor & Destructor Documentation

Tp::MediaDescriptionProperties::MediaDescriptionProperties ( const QMap< QString, QDBusVariant > &  a) [inline]

Member Function Documentation

MediaDescriptionProperties& Tp::MediaDescriptionProperties::operator= ( const QMap< QString, QDBusVariant > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01085.html0000644000175200001440000002015412000060453021625 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelInterfaceChatStateInterface Member List
This is the complete list of members for Tp::Client::ChannelInterfaceChatStateInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ChannelInterfaceChatStateInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfaceChatStateInterface
ChannelInterfaceChatStateInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfaceChatStateInterface
ChannelInterfaceChatStateInterface(Tp::DBusProxy *proxy)Tp::Client::ChannelInterfaceChatStateInterface
ChannelInterfaceChatStateInterface(const Tp::Client::ChannelInterface &mainInterface)Tp::Client::ChannelInterfaceChatStateInterface [explicit]
ChannelInterfaceChatStateInterface(const Tp::Client::ChannelInterface &mainInterface, QObject *parent)Tp::Client::ChannelInterfaceChatStateInterface
ChatStateChanged(uint contact, uint state)Tp::Client::ChannelInterfaceChatStateInterface [signal]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ChannelInterfaceChatStateInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ChannelInterfaceChatStateInterface [inline]
requestPropertyChatStates() const Tp::Client::ChannelInterfaceChatStateInterface [inline]
SetChatState(uint state, int timeout=-1)Tp::Client::ChannelInterfaceChatStateInterface [inline, slot]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ChannelInterfaceChatStateInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00989.html0000644000175200001440000000430312000060453021637 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::DBusTubeMember Member List
This is the complete list of members for Tp::DBusTubeMember, including all inherited members.
handleTp::DBusTubeMember
uniqueNameTp::DBusTubeMember


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00404.html0000644000175200001440000001171012000060453021615 0ustar00collabora-develusers00000000000000 Tp::StringStringMap Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::StringStringMap Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<QString, QString>, but needed to have a discrete type in the Qt type system.

A mapping from strings to strings representing extra key-value pairs.


Constructor & Destructor Documentation

Tp::StringStringMap::StringStringMap ( const QMap< QString, QString > &  a) [inline]

Member Function Documentation

StringStringMap& Tp::StringStringMap::operator= ( const QMap< QString, QString > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00044.html0000644000175200001440000004725312000060453021630 0ustar00collabora-develusers00000000000000 Tp::Client::AccountInterfaceAddressingInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::AccountInterfaceAddressingInterface Class Reference

#include <TelepathyQt/AccountManager>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Account.Interface.Addressing".


Constructor & Destructor Documentation

Tp::Client::AccountInterfaceAddressingInterface::AccountInterfaceAddressingInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a AccountInterfaceAddressingInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::AccountInterfaceAddressingInterface::AccountInterfaceAddressingInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a AccountInterfaceAddressingInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a AccountInterfaceAddressingInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a AccountInterfaceAddressingInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a AccountInterfaceAddressingInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Account.Interface.Addressing", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property URISchemes of type QStringList.

A list of fields indicating the type of URI addressing scheme the the account should be used for (eg 'tel') indicating the account is intended for use by applications offering a telephony UI, or 'sip' or 'xmpp' for those protocols

Note that these fields signify intent, not ability: It is entirely possible that an account which can be used for a given URI scheme is not wanted for it by the user, and therefore not flagged as such in this field.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::AccountInterfaceAddressingInterface::SetURISchemeAssociation ( const QString &  URIScheme,
bool  association,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method SetURISchemeAssociation on the remote object.

Associate (or disassociate) an account with a particular URI addressing scheme, (such as 'tel' for telephony)

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
URISchemeURI scheme to associate/disassociate the account with/from
associationTrue to associate this account with a given addressing scheme False if the account should not be associated with said scheme
timeoutThe timeout in milliseconds.
void Tp::Client::AccountInterfaceAddressingInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00965.html0000644000175200001440000000501512000060453021632 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Candidate Member List
This is the complete list of members for Tp::Candidate, including all inherited members.
componentTp::Candidate
infoTp::Candidate
IPTp::Candidate
portTp::Candidate


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00739.html0000644000175200001440000004133412000060453021635 0ustar00collabora-develusers00000000000000 Channel proxies
   Home · All Classes · All Namespaces · Modules · Functions · Files
Channel proxies

Classes


Detailed Description

Proxy objects representing remote Telepathy Channel objects and their optional interfaces.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00918.html0000644000175200001440000001034212000060453021627 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Profile::Parameter Member List
This is the complete list of members for Tp::Profile::Parameter, including all inherited members.
dbusSignature() const Tp::Profile::Parameter
isMandatory() const Tp::Profile::Parameter
label() const Tp::Profile::Parameter
name() const Tp::Profile::Parameter
operator=(const Parameter &other)Tp::Profile::Parameter
Parameter()Tp::Profile::Parameter
Parameter(const Parameter &other)Tp::Profile::Parameter
Parameter(const QString &name, const QDBusSignature &dbusSignature, const QVariant &value, const QString &label, bool mandatory)Tp::Profile::Parameter
type() const Tp::Profile::Parameter
value() const Tp::Profile::Parameter
~Parameter()Tp::Profile::Parameter


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00400.html0000644000175200001440000010701312000060453021613 0ustar00collabora-develusers00000000000000 Tp::StreamedMediaStream Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::StreamedMediaStream Class Reference

The StreamedMediaStream class represents a Telepathy streamed media stream. More...

#include <TelepathyQt/StreamedMediaStream>

Inherits Tp::Object, and Tp::ReadyObject.

List of all members.

Public Types

Signals

Public Member Functions


Detailed Description

The StreamedMediaStream class represents a Telepathy streamed media stream.

Instances of this class cannot be constructed directly; the only way to get one is via StreamedMediaChannel.


Member Enumeration Documentation

Enumerator:
SendingStateNone 
SendingStatePendingSend 
SendingStateSending 

Constructor & Destructor Documentation


Member Function Documentation

StreamedMediaChannelPtr Tp::StreamedMediaStream::channel ( ) const

Return the channel owning this media stream.

Returns:
A pointer to the StreamedMediaChannel object.

Return the id of this media stream.

Returns:
An integer representing the media stream id.
ContactPtr Tp::StreamedMediaStream::contact ( ) const

Return the contact who this media stream is with.

Returns:
A pointer to the Contact object.

Return the state of this media stream.

Returns:
The state as MediaStreamState.

Return the type of this media stream.

Returns:
The type as MediaStreamType.

Return the media stream local sending state.

Returns:
The local sending state as StreamedMediaStream::SendingState.
See also:
localSendingStateChanged()

Return the media stream remote sending state.

Returns:
The remote sending state as StreamedMediaStream::SendingState.
See also:
remoteSendingStateChanged()

Return whether media is being sent on this media stream.

Returns:
true if media is being sent, false otherwise.
See also:
localSendingStateChanged()

Return whether media is being received on this media stream.

Returns:
true if media is being received, false otherwise.
See also:
remoteSendingStateChanged()

Return whether the local user has been asked to send media by the remote user on this media stream.

Returns:
true if the local user has been asked to send media by the remote user, false otherwise.
See also:
localSendingStateChanged()

Return whether the remote user has been asked to send media by the local user on this media stream.

Returns:
true if the remote user has been asked to send media by the local user, false otherwise.
See also:
remoteSendingStateChanged()

Return the pending send flags of this media stream.

Returns:
The pending send flags as MediaStreamPendingSend.
See also:
localSendingStateChanged()

Request that media starts or stops being sent on this media stream.

Returns:
A PendingOperation which will emit PendingOperation::finished when the call has finished.
See also:
localSendingStateChanged(), requestDirection()

Request that the remote contact stops or starts sending on this media stream.

Returns:
A PendingOperation which will emit PendingOperation::finished when the call has finished.
See also:
remoteSendingStateChanged(), requestDirection()

Request a change in the direction of this media stream. In particular, this might be useful to stop sending media of a particular type, or inform the peer that you are no longer using media that is being sent to you.

Parameters:
directionThe new direction.
Returns:
A PendingOperation which will emit PendingOperation::finished when the call has finished.
See also:
localSendingStateChanged(), remoteSendingStateChanged()
PendingOperation * Tp::StreamedMediaStream::requestDirection ( bool  send,
bool  receive 
)

Request a change in the direction of this media stream.

In particular, this might be useful to stop sending media of a particular type, or inform the peer that you are no longer using media that is being sent to you.

Returns:
A PendingOperation which will emit PendingOperation::finished when the call has finished.
See also:
requestDirection(Tp::MediaStreamDirection direction), localSendingStateChanged(), remoteSendingStateChanged()

Start sending a DTMF tone on this media stream.

Where possible, the tone will continue until stopDTMFTone() is called. On certain protocols, it may only be possible to send events with a predetermined length. In this case, the implementation may emit a fixed-length tone, and the stopDTMFTone() method call should return TP_QT_ERROR_NOT_AVAILABLE.

If the channel() does not support the TP_QT_IFACE_CHANNEL_INTERFACE_DTMF interface, the resulting PendingOperation will fail with error code TP_QT_ERROR_NOT_IMPLEMENTED.

Parameters:
eventA numeric event code from the DTMFEvent enum.
Returns:
A PendingOperation which will emit PendingOperation::finished when the request finishes.
See also:
stopDTMFTone()

Stop sending any DTMF tone which has been started using the startDTMFTone() method.

If there is no current tone, the resulting PendingOperation will finish successfully.

If continuous tones are not supported by this media stream, the resulting PendingOperation will fail with error code TP_QT_ERROR_NOT_AVAILABLE.

If the channel() does not support the TP_QT_IFACE_CHANNEL_INTERFACE_DTMF interface, the resulting PendingOperation will fail with error code TP_QT_ERROR_NOT_IMPLEMENTED.

Returns:
A PendingOperation which will emit PendingOperation::finished when the request finishes.
See also:
startDTMFTone()

Emitted when the local sending state of this media stream changes.

Parameters:
localSendingStateThe new local sending state of this media stream.
See also:
localSendingState()


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00373.html0000644000175200001440000001023312000060453021621 0ustar00collabora-develusers00000000000000 Tp::RTCPFeedbackMessageProperties Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::RTCPFeedbackMessageProperties Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.


Member Data Documentation

The minimum interval between two regular RTCP packets in milliseconds for this content. If no special value is desired, one should put MAXUINT (0xFFFFFFFF). Implementors and users of Call's RTCPFeedback should not use the MAXUINT default. Instead, in RTP/AVP, the default should be 5000 (5 seconds). If using the RTP/AVPF profile, it can be set to a lower value, the default being 0.

The RTCP feedback messages for this codec.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00328.html0000644000175200001440000001361612000060453021631 0ustar00collabora-develusers00000000000000 Tp::PendingTextMessage Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingTextMessage Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

A struct (message ID, timestamp in seconds since 1970-01-01 00:00 UTC, sender's handle, message type, flags, text) representing a pending text message, as returned by ListPendingMessages. The arguments of the Received signal also match this struct's signature.


Member Data Documentation


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00807.html0000644000175200001440000001216412000060453021630 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::FunctorCaller4< Functor, R, Arg1, Arg2, Arg3, Arg4 > Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00937.html0000644000175200001440000001140212000060453021626 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingVoid Member List
This is the complete list of members for Tp::PendingVoid, including all inherited members.
errorMessage() const Tp::PendingOperation
errorName() const Tp::PendingOperation
finished(Tp::PendingOperation *operation)Tp::PendingOperation [signal]
isError() const Tp::PendingOperation
isFinished() const Tp::PendingOperation
isValid() const Tp::PendingOperation
object() const Tp::PendingOperation [protected]
PendingOperation(const SharedPtr< RefCounted > &object)Tp::PendingOperation [protected]
PendingVoid(QDBusPendingCall call, const SharedPtr< RefCounted > &object)Tp::PendingVoid
setFinished()Tp::PendingOperation [protected, slot]
setFinishedWithError(const QString &name, const QString &message)Tp::PendingOperation [protected, slot]
setFinishedWithError(const QDBusError &error)Tp::PendingOperation [protected, slot]
~PendingOperation()Tp::PendingOperation [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00868.html0000644000175200001440000000620712000060453021640 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PtrFunctor5< R, Arg1, Arg2, Arg3, Arg4, Arg5 > Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00693_source.html0000644000175200001440000002023212000060453023206 0ustar00collabora-develusers00000000000000 simple-call-observer.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
simple-call-observer.h
00001 
00023 #ifndef _TelepathyQt_simple_call_observer_h_HEADER_GUARD_
00024 #define _TelepathyQt_simple_call_observer_h_HEADER_GUARD_
00025 
00026 #include <TelepathyQt/Constants>
00027 #include <TelepathyQt/Types>
00028 
00029 #include <QObject>
00030 
00031 namespace Tp
00032 {
00033 
00034 class PendingOperation;
00035 
00036 class TP_QT_EXPORT SimpleCallObserver : public QObject,
00037                 public RefCounted
00038 {
00039     Q_OBJECT
00040     Q_DISABLE_COPY(SimpleCallObserver)
00041     Q_FLAGS(CallDirection CallDirections)
00042 
00043 public:
00044     enum CallDirection {
00045         CallDirectionIncoming = 0x01,
00046         CallDirectionOutgoing = 0x02,
00047         CallDirectionBoth = CallDirectionIncoming | CallDirectionOutgoing
00048     };
00049     Q_DECLARE_FLAGS(CallDirections, CallDirection)
00050 
00051     static SimpleCallObserverPtr create(const AccountPtr &account,
00052             CallDirection direction = CallDirectionBoth);
00053     static SimpleCallObserverPtr create(const AccountPtr &account,
00054             const ContactPtr &contact,
00055             CallDirection direction = CallDirectionBoth);
00056     static SimpleCallObserverPtr create(const AccountPtr &account,
00057             const QString &contactIdentifier,
00058             CallDirection direction = CallDirectionBoth);
00059 
00060     virtual ~SimpleCallObserver();
00061 
00062     AccountPtr account() const;
00063     QString contactIdentifier() const;
00064     CallDirection direction() const;
00065 
00066     QList<CallChannelPtr> calls() const;
00067     TP_QT_DEPRECATED QList<StreamedMediaChannelPtr> streamedMediaCalls() const;
00068 
00069 Q_SIGNALS:
00070     void callStarted(const Tp::CallChannelPtr &channel);
00071     void callEnded(const Tp::CallChannelPtr &channel,
00072             const QString &errorName, const QString &errorMessage);
00073 
00074     void streamedMediaCallStarted(const Tp::StreamedMediaChannelPtr &channel);
00075     void streamedMediaCallEnded(const Tp::StreamedMediaChannelPtr &channel,
00076             const QString &errorName, const QString &errorMessage);
00077 
00078 private Q_SLOTS:
00079     TP_QT_NO_EXPORT void onNewChannels(const QList<Tp::ChannelPtr> &channels);
00080     TP_QT_NO_EXPORT void onChannelInvalidated(const Tp::ChannelPtr &channel,
00081             const QString &errorName, const QString &errorMessage);
00082 
00083 private:
00084     TP_QT_NO_EXPORT static SimpleCallObserverPtr create(
00085             const AccountPtr &account,
00086             const QString &contactIdentifier, bool requiresNormalization,
00087             CallDirection direction);
00088 
00089     TP_QT_NO_EXPORT SimpleCallObserver(const AccountPtr &account,
00090             const QString &contactIdentifier, bool requiresNormalization,
00091             CallDirection direction);
00092 
00093     struct Private;
00094     friend struct Private;
00095     Private *mPriv;
00096 };
00097 
00098 } // Tp
00099 
00100 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00991.html0000644000175200001440000000505212000060453021632 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::DebugMessage Member List
This is the complete list of members for Tp::DebugMessage, including all inherited members.
domainTp::DebugMessage
levelTp::DebugMessage
messageTp::DebugMessage
timestampTp::DebugMessage


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01103.html0000644000175200001440000002156412000060453021622 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelTypeDBusTubeInterface Member List
This is the complete list of members for Tp::Client::ChannelTypeDBusTubeInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
Accept(uint accesscontrol, int timeout=-1)Tp::Client::ChannelTypeDBusTubeInterface [inline, slot]
ChannelTypeDBusTubeInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelTypeDBusTubeInterface
ChannelTypeDBusTubeInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelTypeDBusTubeInterface
ChannelTypeDBusTubeInterface(Tp::DBusProxy *proxy)Tp::Client::ChannelTypeDBusTubeInterface
ChannelTypeDBusTubeInterface(const Tp::Client::ChannelInterface &mainInterface)Tp::Client::ChannelTypeDBusTubeInterface [explicit]
ChannelTypeDBusTubeInterface(const Tp::Client::ChannelInterface &mainInterface, QObject *parent)Tp::Client::ChannelTypeDBusTubeInterface
DBusNamesChanged(const Tp::DBusTubeParticipants &added, const Tp::UIntList &removed)Tp::Client::ChannelTypeDBusTubeInterface [signal]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ChannelTypeDBusTubeInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
Offer(const QVariantMap &parameters, uint accesscontrol, int timeout=-1)Tp::Client::ChannelTypeDBusTubeInterface [inline, slot]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ChannelTypeDBusTubeInterface [inline]
requestPropertyDBusNames() const Tp::Client::ChannelTypeDBusTubeInterface [inline]
requestPropertyServiceName() const Tp::Client::ChannelTypeDBusTubeInterface [inline]
requestPropertySupportedAccessControls() const Tp::Client::ChannelTypeDBusTubeInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ChannelTypeDBusTubeInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00251.html0000644000175200001440000003252312000060453021622 0ustar00collabora-develusers00000000000000 Tp::IncomingDBusTubeChannel Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The IncomingStreamTubeChannel class represents an incoming Telepathy channel of type StreamTube. More...

#include <TelepathyQt/IncomingDBusTubeChannel>

Inherits Tp::DBusTubeChannel.

List of all members.

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

The IncomingStreamTubeChannel class represents an incoming Telepathy channel of type StreamTube.

In particular, this class is meant to be used as a comfortable way for accepting incoming DBus tubes. Unless a different behavior is specified, tubes will be always accepted allowing connections just from the current user, unless this or one of the other ends do not support that. Unless your application has specific needs, you usually want to keep this behavior.

Once a tube is successfully accepted and open (the PendingDBusTubeConnection returned from the accepting methods has finished), the application can connect to the DBus server, the address of which can be retrieved from PendingDBusTubeConnection::address().

Note:
If you plan to use QtDBus for the DBus connection, please note you should always use QDBusConnection::connectToPeer(), regardless of the fact this tube is a p2p or a group one. The above function has been introduced in Qt 4.8, previous versions of Qt do not allow the use of DBus Tubes through QtDBus.

For more details, please refer to Telepathy specification.

See Asynchronous Object Model, Shared Pointer Usage


Constructor & Destructor Documentation

Tp::IncomingDBusTubeChannel::IncomingDBusTubeChannel ( const ConnectionPtr &  connection,
const QString &  objectPath,
const QVariantMap &  immutableProperties 
) [protected]

Construct a new IncomingDBusTubeChannel object.

Parameters:
connectionConnection owning this channel, and specifying the service.
objectPathThe object path of this channel.
immutablePropertiesThe immutable properties of this channel.

Member Function Documentation

IncomingDBusTubeChannelPtr Tp::IncomingDBusTubeChannel::create ( const ConnectionPtr &  connection,
const QString &  objectPath,
const QVariantMap &  immutableProperties 
) [static]

Create a new IncomingDBusTubeChannel channel.

Parameters:
connectionConnection owning this channel, and specifying the service.
objectPathThe object path of this channel.
immutablePropertiesThe immutable properties of this channel.
Returns:
A IncomingDBusTubeChannelPtr object pointing to the newly created IncomingDBusTubeChannel object.

Reimplemented from Tp::DBusTubeChannel.

Accepts an incoming DBus tube.

This method accepts an incoming connection request for a DBus tube. It can be called only if the tube is in the LocalPending state.

Once called, this method will try opening the tube, and will create a new private DBus connection which can be used to communicate with the other end. You can then retrieve the address either from PendingDBusTubeConnection or from address().

This method requires DBusTubeChannel::FeatureCore to be enabled.

Parameters:
allowOtherUsersWhether the server should allow other users to connect to this tube more than just the current one. If your application has no specific needs, it is advisable not to modify the default value of this argument.
Note:
If allowOtherUsers == false, but one of the ends does not support current user restriction, the tube will be offered regardless, falling back to allowing any connection. If your application requires strictly this condition to be enforced, you should check DBusTubeChannel::supportsRestrictingToCurrentUser before accepting the tube, and take action from there. The tube is guaranteed either to be accepted with the desired restriction or to fail the accept phase if supportsRestrictingToCurrentUser is true and allowOtherUsers is false.
Returns:
A PendingDBusTubeConnection which will finish as soon as the tube is ready to be used (hence in the Open state)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00463_source.html0000644000175200001440000002350312000060453023205 0ustar00collabora-develusers00000000000000 captcha-authentication.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
captcha-authentication.h
00001 
00023 #ifndef _TelepathyQt_captcha_authentication_h_HEADER_GUARD_
00024 #define _TelepathyQt_captcha_authentication_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Channel>
00031 #include <TelepathyQt/Connection>
00032 
00033 #include <TelepathyQt/Global>
00034 #include <TelepathyQt/SharedPtr>
00035 
00036 namespace Tp
00037 {
00038 
00039 class PendingCaptchaAnswer;
00040 class PendingCaptchaCancel;
00041 class PendingCaptchas;
00042 
00043 class TP_QT_EXPORT CaptchaAuthentication : public Tp::Object
00044 {
00045     Q_OBJECT
00046     Q_DISABLE_COPY(CaptchaAuthentication)
00047 
00048 public:
00049     enum ChallengeType {
00050         NoChallenge = 0,
00051         OCRChallenge = 1,
00052         AudioRecognitionChallenge = 2,
00053         PictureQuestionChallenge = 4,
00054         PictureRecognitionChallenge = 8,
00055         TextQuestionChallenge = 16,
00056         SpeechQuestionChallenge = 32,
00057         SpeechRecognitionChallenge = 64,
00058         VideoQuestionChallenge = 128,
00059         VideoRecognitionChallenge = 256,
00060         UnknownChallenge = 32768
00061     };
00062     Q_DECLARE_FLAGS(ChallengeTypes, ChallengeType)
00063 
00064     virtual ~CaptchaAuthentication();
00065 
00066     ChannelPtr channel() const;
00067 
00068     bool canRetry() const;
00069     Tp::CaptchaStatus status() const;
00070 
00071     QString error() const;
00072     Connection::ErrorDetails errorDetails() const;
00073 
00074     Tp::PendingCaptchas *requestCaptchas(const QStringList &preferredMimeTypes = QStringList(),
00075             ChallengeTypes preferredTypes = ~ChallengeTypes(NoChallenge));
00076     Tp::PendingOperation *answer(uint id, const QString &answer);
00077     Tp::PendingOperation *answer(const Tp::CaptchaAnswers &response);
00078 
00079 Q_SIGNALS:
00080     void statusChanged(Tp::CaptchaStatus status);
00081 
00082 public Q_SLOTS:
00083     Tp::PendingOperation *cancel(Tp::CaptchaCancelReason reason,
00084             const QString &message = QString());
00085 
00086 private Q_SLOTS:
00087     TP_QT_NO_EXPORT void onPropertiesChanged(const QVariantMap &changedProperties,
00088             const QStringList &invalidatedProperties);
00089 
00090 private:
00091     TP_QT_NO_EXPORT CaptchaAuthentication(const ChannelPtr &parent);
00092 
00093     friend class ServerAuthenticationChannel;
00094 
00095     struct Private;
00096     friend struct Private;
00097     Private *mPriv;
00098 };
00099 
00100 } // namespace Tp
00101 
00102 Q_DECLARE_OPERATORS_FOR_FLAGS(Tp::CaptchaAuthentication::ChallengeTypes)
00103 
00104 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00033.html0000644000175200001440000007207312000060453021624 0ustar00collabora-develusers00000000000000 Tp::AbstractClientHandler Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AbstractClientHandler Class Reference

The AbstractClientHandler class represents a Telepathy handler. More...

#include <TelepathyQt/AbstractClientHandler>

Inherits Tp::AbstractClient.

Inherited by Tp::SimpleStreamTubeHandler.

List of all members.

Classes

Public Member Functions

Protected Member Functions


Detailed Description

The AbstractClientHandler class represents a Telepathy handler.

Handlers are the user interface for a channel. They turn an abstract channel into something the user wants to see, like a text message stream or an audio and/or video call.

For its entire lifetime, each channel on a connection known to the channel dispatcher is either being processed by the channel dispatcher, or being handled by precisely one handler.

Because each channel is only handled by one handler, handlers may perform actions that only make sense to do once, such as acknowledging text messages, transferring the file, etc.

When a new incoming channel is offered to approvers by the channel dispatcher, it also offers the approvers a list of all the running or activatable handlers whose filter indicates that they are able to handle the channel. The approvers can choose one of those channel handlers to handle the channel.

When a new outgoing channel appears, the channel dispatcher passes it to an appropriate channel handler automatically.

To become an handler one should inherit AbstractClientHandler and implement the pure virtual bypassApproval() and handleChannels() methods. After that the object representing the handler must be registered using ClientRegistrar::registerClient().

When new channels in which the approver has registered an interest are ready to be handled, the method handleChannels() is invoked.

Usage

Implementing a handler

 class MyHandler : public AbstractClientHandler
 {
 public:
     MyHandler(const ChannelClassSpecList &channelFilter);
     ~MyHandler() { }

     void bypassApproval() const;

     void handleChannels(const MethodInvocationContextPtr<> &context,
             const AccountPtr &account,
             const ConnectionPtr &connection,
             const QList<ChannelPtr> &channels,
             const QList<ChannelRequestPtr> &requestsSatisfied,
             const QDateTime &userActionTime,
             const AbstractClientHandler::HandlerInfo &handlerInfo);
 };

 MyHandler::MyHandler(const ChannelClassSpecList &channelFilter)
     : AbstractClientHandler(channelFilter)
 {
 }

 void MyHandler::bypassApproval() const
 {
     return false;
 }

 void MyHandler::handleChannels(const MethodInvocationContextPtr<> &context,
         const AccountPtr &account,
         const ConnectionPtr &connection,
         const QList<ChannelPtr> &channels,
         const QList<ChannelRequestPtr> &requestsSatisfied,
         const QDateTime &userActionTime,
         const AbstractClientHandler::HandlerInfo &handlerInfo)
 {
     // do something

     context->setFinished();
 }

Registering a handler

 ClientRegistrar registrar = ClientRegistrar::create();
 AbstractClientPtr handler = AbstractClientPtr::dynamicCast(
         SharedPtr<MyHandler>(new MyHandler(
             ChannelClassSpecList() << ChannelClassSpec::textChat())));
 registrar->registerClient(handler, "myhandler");
See also:
AbstractClient

Constructor & Destructor Documentation

Class destructor.

Tp::AbstractClientHandler::AbstractClientHandler ( const ChannelClassSpecList channelFilter,
const Capabilities capabilities = Capabilities(),
bool  wantsRequestNotification = false 
) [protected]

Construct a new AbstractClientHandler object.

Parameters:
channelFilterA specification of the channels in which this observer is interested.
wantsRequestNotificationWhether this handler wants to receive channel requests notification via addRequest() and removeRequest().
capabilitiesThe set of additional capabilities supported by this handler.

Member Function Documentation

Return the property containing a specification of the channels that this channel handler can deal with. It will be offered to approvers as a potential channel handler for bundles that contain only suitable channels, or for suitable channels that must be handled separately.

This method works in exactly the same way as the AbstractClientObserver::observerChannelFilter() method. In particular, the returned value cannot change while the handler process continues to own the corresponding client bus name.

In the .client file, represented in the same way as observer channel filter, the group is TP_QT_IFACE_CLIENT_HANDLER suffixed by HandlerChannelFilter instead.

Returns:
A specification of the channels that this channel handler can deal with as a list of ChannelClassSpec objects.

Return the set of additional capabilities supported by this handler.

Returns:
The capabilities as an AbstractClientHandler::Capabilities object.
bool Tp::AbstractClientHandler::bypassApproval ( ) const [pure virtual]

Return whether channels destined for this handler are automatically handled, without invoking approvers.

Returns:
true if automatically handled, false otherwise.

Implemented in Tp::SimpleStreamTubeHandler.

void Tp::AbstractClientHandler::handleChannels ( const MethodInvocationContextPtr<> &  context,
const AccountPtr &  account,
const ConnectionPtr &  connection,
const QList< ChannelPtr > &  channels,
const QList< ChannelRequestPtr > &  requestsSatisfied,
const QDateTime &  userActionTime,
const HandlerInfo handlerInfo 
) [pure virtual]

Called by the channel dispatcher when this handler should handle these channels, or when this handler should present channels that it is already handling to the user (e.g. bring them into the foreground).

Clients are expected to know what channels they're already handling, and which channel object corresponds to which window or tab.

After handleChannels() replies successfully by calling MethodInvocationContext::setFinished(), the client process is considered to be responsible for the channel until it its unique name disappears from the bus.

If a process has multiple client bus names - some temporary and some long-lived - and drops one of the temporary bus names in order to reduce the set of channels that it will handle, any channels that it is already handling will remain unaffected.

The received context object should be stored until this method is finished processing and then MethodInvocationContext::setFinished() or MethodInvocationContext::setFinishedWithError() should be called on the received context object.

Specialized handlers must reimplement this method.

Parameters:
contextA MethodInvocationContextPtr object that must be used to indicate whether this method finished processing.
accountThe account with which the channels are associated.
connectionThe connection with which the channels are associated.
channelsThe channels to be handled.
dispatchOperationThe dispatch operation for these channels. The object will be invalid (DBusProxy::isValid() will be false) if there is no dispatch operation in place (because the channels were requested, not incoming).
requestsSatisfiedThe requests satisfied by these channels.
userActionTimeThe time at which user action occurred, or 0 if this channel is to be handled for some reason not involving user action. Handlers should use this for focus-stealing prevention, if applicable.
handlerInfoAdditional information about these channels.

Implemented in Tp::SimpleStreamTubeHandler.

Return whether this handler wants to receive notification of channel requests via addRequest() and removeRequest().

This property is set by the constructor and cannot be changed after that.

Returns:
true if receiving channel requests notification is desired, false otherwise.
void Tp::AbstractClientHandler::addRequest ( const ChannelRequestPtr &  channelRequest) [virtual]

Called by the channel dispatcher to indicate that channels have been requested, and that if the request is successful, they will probably be handled by this handler.

This allows the UI to start preparing to handle the channels in advance (e.g. render a window with an "in progress" message), improving perceived responsiveness.

If the request succeeds and is given to the expected handler, the requestsSatisfied parameter to handleChannels() can be used to match the channel to a previous addRequest() call.

This lets the UI direct the channels to the window that it already opened.

If the request fails, the expected handler is notified by the channel dispatcher calling its removeRequest() method.

This lets the UI close the window or display the error.

The channel dispatcher will attempt to ensure that handleChannels() is called on the same handler that received addRequest(). If that isn't possible, removeRequest() will be called on the handler that previously received addRequest(), with the special error TP_QT_ERROR_NOT_YOURS, which indicates that some other handler received the channel instead.

Expected handling is for the UI to close the window it previously opened.

Specialized handlers that want to be notified of newly requested channel should reimplement this method.

Parameters:
channelRequestThe newly created channel request.
See also:
removeRequest()
void Tp::AbstractClientHandler::removeRequest ( const ChannelRequestPtr &  channelRequest,
const QString &  errorName,
const QString &  errorMessage 
) [virtual]

Called by the ChannelDispatcher to indicate that a request previously passed to addRequest() has failed and should be disregarded.

Specialized handlers that want to be notified of removed channel requests should reimplement this method.

Parameters:
channelRequestThe channel request that failed.
errorNameThe name of the D-Bus error with which the request failed. If this is TP_QT_ERROR_NOT_YOURS, this indicates that the request succeeded, but all the resulting channels were given to some other handler.
errorMessageAny message supplied with the D-Bus error.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00308.html0000644000175200001440000003445712000060453021635 0ustar00collabora-develusers00000000000000 Tp::PendingChannel Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingChannel Class Reference

The PendingChannel class represents the parameters of and the reply to an asynchronous channel request. More...

#include <TelepathyQt/PendingChannel>

Inherits Tp::PendingOperation.

List of all members.

Public Member Functions


Detailed Description

The PendingChannel class represents the parameters of and the reply to an asynchronous channel request.

Instances of this class cannot be constructed directly; the only way to get one is trough Connection or Account.

See Asynchronous Object Model


Constructor & Destructor Documentation

Class destructor.


Member Function Documentation

ConnectionPtr Tp::PendingChannel::connection ( ) const

Return the connection through which the channel request was made.

Note that if this channel request was created through Account, a null ConnectionPtr will be returned.

Returns:
A pointer to the Connection object.
bool Tp::PendingChannel::yours ( ) const

Return whether this channel belongs to this process.

If false, the caller must assume that some other process is handling this channel; if true, the caller should handle it themselves or delegate it to another client.

Returns:
true if it belongs, false otherwise.
const QString & Tp::PendingChannel::channelType ( ) const

Return the channel type specified in the channel request.

Returns:
The D-Bus interface name for the type of the channel.

If the channel request has finished, return the handle type of the resulting channel. Otherwise, return the handle type that was requested.

(One example of a request producing a different target handle type is that on protocols like MSN, one-to-one conversations don't really exist, and if you request a text channel with handle type HandleTypeContact, what you will actually get is a text channel with handle type HandleTypeNone, with the requested contact as a member.)

Returns:
The target handle type as HandleType.
See also:
targetHandle()

If the channel request has finished, return the target handle of the resulting channel. Otherwise, return the target handle that was requested (which might be different in some situations - see targetHandleType()).

Returns:
An integer representing the target handle, which is of the type targetHandleType() indicates.
See also:
targetHandleType()

If this channel request has finished, return the immutable properties of the resulting channel. Otherwise, return an empty map.

The keys and values in this map are defined by the Telepathy specification, or by third-party extensions to that specification. These are the properties that cannot change over the lifetime of the channel; they're announced in the result of the request, for efficiency. This map should be passed to the constructor of Channel or its subclasses (such as TextChannel).

These properties can also be used to process channels in a way that does not require the creation of a Channel object - for instance, a ChannelDispatcher implementation should be able to classify and process channels based on their immutable properties, without needing to create Channel objects.

Returns:
The immutable properties as QVariantMap.
ChannelPtr Tp::PendingChannel::channel ( ) const

Return the channel resulting from the channel request.

Returns:
A pointer to the Channel object.

If this channel request has finished and was created through Account, return a HandledChannelNotifier object that will keep track of channel() being re-requested.

Returns:
A HandledChannelNotifier instance, or 0 if an error occurred.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00958.html0000644000175200001440000000520512000060453021635 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AddressingNormalizationMap Member List
This is the complete list of members for Tp::AddressingNormalizationMap, including all inherited members.
AddressingNormalizationMap()Tp::AddressingNormalizationMap [inline]
AddressingNormalizationMap(const QMap< QString, uint > &a)Tp::AddressingNormalizationMap [inline]
operator=(const QMap< QString, uint > &a)Tp::AddressingNormalizationMap [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00236.html0000644000175200001440000001637112000060453021630 0ustar00collabora-develusers00000000000000 Tp::FunctorCaller2< Functor, R, Arg1, Arg2 > Struct Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::FunctorCaller2< Functor, R, Arg1, Arg2 > Struct Template Reference

#include </home/collabora-devel/kde/src/telepathy-qt4/TelepathyQt/callbacks.h>

Inherits Tp::BaseFunctorCaller< FunctorCaller2< Functor, R, Arg1, Arg2 >, Functor >.

List of all members.

Public Types

Public Member Functions

Static Public Member Functions

template<class Functor, class R, class Arg1, class Arg2>
struct Tp::FunctorCaller2< Functor, R, Arg1, Arg2 >


Member Typedef Documentation

template<class Functor , class R , class Arg1 , class Arg2 >
typedef R Tp::FunctorCaller2< Functor, R, Arg1, Arg2 >::ResultType
template<class Functor , class R , class Arg1 , class Arg2 >
typedef R(* Tp::FunctorCaller2< Functor, R, Arg1, Arg2 >::InvokeType)(AbstractFunctorCaller *, Arg1, Arg2)

Constructor & Destructor Documentation

template<class Functor , class R , class Arg1 , class Arg2 >
Tp::FunctorCaller2< Functor, R, Arg1, Arg2 >::FunctorCaller2 ( const Functor &  functor) [inline, explicit]

Member Function Documentation

template<class Functor , class R , class Arg1 , class Arg2 >
static ResultType Tp::FunctorCaller2< Functor, R, Arg1, Arg2 >::invoke ( AbstractFunctorCaller call,
Arg1  a1,
Arg2  a2 
) [inline, static]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00555_source.html0000644000175200001440000001751512000060453023215 0ustar00collabora-develusers00000000000000 dbus-proxy-factory.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
dbus-proxy-factory.h
00001 
00023 #ifndef _TelepathyQt_dbus_proxy_factory_h_HEADER_GUARD_
00024 #define _TelepathyQt_dbus_proxy_factory_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Global>
00031 #include <TelepathyQt/SharedPtr>
00032 #include <TelepathyQt/Types>
00033 
00034 // For Q_DISABLE_COPY
00035 #include <QtGlobal>
00036 
00037 #include <QString>
00038 
00039 class QDBusConnection;
00040 
00041 namespace Tp
00042 {
00043 
00044 class Features;
00045 class PendingReady;
00046 class PendingOperation;
00047 
00048 class TP_QT_EXPORT DBusProxyFactory : public QObject, public RefCounted
00049 {
00050     Q_OBJECT
00051     Q_DISABLE_COPY(DBusProxyFactory)
00052 
00053 public:
00054     virtual ~DBusProxyFactory();
00055 
00056     const QDBusConnection &dbusConnection() const;
00057 
00058 protected:
00059     DBusProxyFactory(const QDBusConnection &bus);
00060 
00061     DBusProxyPtr cachedProxy(const QString &busName, const QString &objectPath) const;
00062 
00063     PendingReady *nowHaveProxy(const DBusProxyPtr &proxy) const;
00064 
00065     // I don't want this to be non-pure virtual, because I want ALL subclasses to have to think
00066     // about whether or not they need to uniquefy the name or not. If a subclass doesn't implement
00067     // this while it should, matching with the cache for future requests and invalidation breaks.
00068     virtual QString finalBusNameFrom(const QString &uniqueOrWellKnown) const = 0;
00069 
00070     virtual PendingOperation *initialPrepare(const DBusProxyPtr &proxy) const;
00071     virtual PendingOperation *readyPrepare(const DBusProxyPtr &proxy) const;
00072 
00073     virtual Features featuresFor(const DBusProxyPtr &proxy) const = 0;
00074 
00075 private:
00076     class Cache;
00077 
00078     struct Private;
00079     friend struct Private;
00080     Private *mPriv;
00081 };
00082 
00083 } // Tp
00084 
00085 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01035.html0000644000175200001440000000510712000060453021621 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::SupportedSocketMap Member List
This is the complete list of members for Tp::SupportedSocketMap, including all inherited members.
operator=(const QMap< uint, UIntList > &a)Tp::SupportedSocketMap [inline]
SupportedSocketMap()Tp::SupportedSocketMap [inline]
SupportedSocketMap(const QMap< uint, UIntList > &a)Tp::SupportedSocketMap [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00073.html0000644000175200001440000001713612000060453021627 0ustar00collabora-develusers00000000000000 Tp::Callback3< R, Arg1, Arg2, Arg3 > Class Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Callback3< R, Arg1, Arg2, Arg3 > Class Template Reference

Callback with 3 arguments. More...

#include <TelepathyQt/Callbacks>

Inherits Tp::BaseCallback.

List of all members.

Public Types

Public Member Functions


Detailed Description

template<class R, class Arg1, class Arg2, class Arg3>
class Tp::Callback3< R, Arg1, Arg2, Arg3 >

Callback with 3 arguments.

See Callbacks Usage


Member Typedef Documentation

template<class R, class Arg1, class Arg2, class Arg3>
typedef R(* Tp::Callback3< R, Arg1, Arg2, Arg3 >::FunctionType)(Arg1, Arg2, Arg3)
template<class R, class Arg1, class Arg2, class Arg3>
typedef R Tp::Callback3< R, Arg1, Arg2, Arg3 >::ResultType

Constructor & Destructor Documentation

template<class R, class Arg1, class Arg2, class Arg3>
Tp::Callback3< R, Arg1, Arg2, Arg3 >::Callback3 ( ) [inline]
template<class R, class Arg1, class Arg2, class Arg3>
template<class Functor >
Tp::Callback3< R, Arg1, Arg2, Arg3 >::Callback3 ( const Functor &  functor) [inline]

Member Function Documentation

template<class R, class Arg1, class Arg2, class Arg3>
ResultType Tp::Callback3< R, Arg1, Arg2, Arg3 >::operator() ( Arg1  a1,
Arg2  a2,
Arg3  a3 
) const [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00495_source.html0000644000175200001440000050373112000060453023220 0ustar00collabora-develusers00000000000000 cli-channel-body.hpp Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-channel-body.hpp
00001 #define IN_TP_QT_HEADER
00002 #include "TelepathyQt/channel.h"
00003 
00004 namespace Tp
00005 {
00006 namespace Client
00007 {
00008 
00009 ChannelInterface::ChannelInterface(const QString& busName, const QString& objectPath, QObject *parent)
00010     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00011 {
00012 }
00013 
00014 ChannelInterface::ChannelInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00015     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00016 {
00017 }
00018 
00019 ChannelInterface::ChannelInterface(Tp::DBusProxy *proxy)
00020     : Tp::AbstractInterface(proxy, staticInterfaceName())
00021 {
00022 }
00023 
00024 void ChannelInterface::invalidate(Tp::DBusProxy *proxy,
00025         const QString &error, const QString &message)
00026 {
00027     disconnect(this, SIGNAL(Closed()), NULL, NULL);
00028 
00029     Tp::AbstractInterface::invalidate(proxy, error, message);
00030 }
00031 
00032 ChannelInterfaceAnonymityInterface::ChannelInterfaceAnonymityInterface(const QString& busName, const QString& objectPath, QObject *parent)
00033     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00034 {
00035 }
00036 
00037 ChannelInterfaceAnonymityInterface::ChannelInterfaceAnonymityInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00038     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00039 {
00040 }
00041 
00042 ChannelInterfaceAnonymityInterface::ChannelInterfaceAnonymityInterface(Tp::DBusProxy *proxy)
00043     : Tp::AbstractInterface(proxy, staticInterfaceName())
00044 {
00045 }
00046 
00047 ChannelInterfaceAnonymityInterface::ChannelInterfaceAnonymityInterface(const Tp::Client::ChannelInterface& mainInterface)
00048     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00049 {
00050 }
00051 
00052 ChannelInterfaceAnonymityInterface::ChannelInterfaceAnonymityInterface(const Tp::Client::ChannelInterface& mainInterface, QObject *parent)
00053     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00054 {
00055 }
00056 
00057 void ChannelInterfaceAnonymityInterface::invalidate(Tp::DBusProxy *proxy,
00058         const QString &error, const QString &message)
00059 {
00060 
00061     Tp::AbstractInterface::invalidate(proxy, error, message);
00062 }
00063 
00064 ChannelInterfaceCallStateInterface::ChannelInterfaceCallStateInterface(const QString& busName, const QString& objectPath, QObject *parent)
00065     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00066 {
00067 }
00068 
00069 ChannelInterfaceCallStateInterface::ChannelInterfaceCallStateInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00070     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00071 {
00072 }
00073 
00074 ChannelInterfaceCallStateInterface::ChannelInterfaceCallStateInterface(Tp::DBusProxy *proxy)
00075     : Tp::AbstractInterface(proxy, staticInterfaceName())
00076 {
00077 }
00078 
00079 ChannelInterfaceCallStateInterface::ChannelInterfaceCallStateInterface(const Tp::Client::ChannelInterface& mainInterface)
00080     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00081 {
00082 }
00083 
00084 ChannelInterfaceCallStateInterface::ChannelInterfaceCallStateInterface(const Tp::Client::ChannelInterface& mainInterface, QObject *parent)
00085     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00086 {
00087 }
00088 
00089 void ChannelInterfaceCallStateInterface::invalidate(Tp::DBusProxy *proxy,
00090         const QString &error, const QString &message)
00091 {
00092     disconnect(this, SIGNAL(CallStateChanged(uint, uint)), NULL, NULL);
00093 
00094     Tp::AbstractInterface::invalidate(proxy, error, message);
00095 }
00096 
00097 ChannelInterfaceCaptchaAuthenticationInterface::ChannelInterfaceCaptchaAuthenticationInterface(const QString& busName, const QString& objectPath, QObject *parent)
00098     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00099 {
00100 }
00101 
00102 ChannelInterfaceCaptchaAuthenticationInterface::ChannelInterfaceCaptchaAuthenticationInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00103     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00104 {
00105 }
00106 
00107 ChannelInterfaceCaptchaAuthenticationInterface::ChannelInterfaceCaptchaAuthenticationInterface(Tp::DBusProxy *proxy)
00108     : Tp::AbstractInterface(proxy, staticInterfaceName())
00109 {
00110 }
00111 
00112 ChannelInterfaceCaptchaAuthenticationInterface::ChannelInterfaceCaptchaAuthenticationInterface(const Tp::Client::ChannelInterface& mainInterface)
00113     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00114 {
00115 }
00116 
00117 ChannelInterfaceCaptchaAuthenticationInterface::ChannelInterfaceCaptchaAuthenticationInterface(const Tp::Client::ChannelInterface& mainInterface, QObject *parent)
00118     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00119 {
00120 }
00121 
00122 void ChannelInterfaceCaptchaAuthenticationInterface::invalidate(Tp::DBusProxy *proxy,
00123         const QString &error, const QString &message)
00124 {
00125 
00126     Tp::AbstractInterface::invalidate(proxy, error, message);
00127 }
00128 
00129 ChannelInterfaceChatStateInterface::ChannelInterfaceChatStateInterface(const QString& busName, const QString& objectPath, QObject *parent)
00130     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00131 {
00132 }
00133 
00134 ChannelInterfaceChatStateInterface::ChannelInterfaceChatStateInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00135     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00136 {
00137 }
00138 
00139 ChannelInterfaceChatStateInterface::ChannelInterfaceChatStateInterface(Tp::DBusProxy *proxy)
00140     : Tp::AbstractInterface(proxy, staticInterfaceName())
00141 {
00142 }
00143 
00144 ChannelInterfaceChatStateInterface::ChannelInterfaceChatStateInterface(const Tp::Client::ChannelInterface& mainInterface)
00145     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00146 {
00147 }
00148 
00149 ChannelInterfaceChatStateInterface::ChannelInterfaceChatStateInterface(const Tp::Client::ChannelInterface& mainInterface, QObject *parent)
00150     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00151 {
00152 }
00153 
00154 void ChannelInterfaceChatStateInterface::invalidate(Tp::DBusProxy *proxy,
00155         const QString &error, const QString &message)
00156 {
00157     disconnect(this, SIGNAL(ChatStateChanged(uint, uint)), NULL, NULL);
00158 
00159     Tp::AbstractInterface::invalidate(proxy, error, message);
00160 }
00161 
00162 ChannelInterfaceConferenceInterface::ChannelInterfaceConferenceInterface(const QString& busName, const QString& objectPath, QObject *parent)
00163     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00164 {
00165 }
00166 
00167 ChannelInterfaceConferenceInterface::ChannelInterfaceConferenceInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00168     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00169 {
00170 }
00171 
00172 ChannelInterfaceConferenceInterface::ChannelInterfaceConferenceInterface(Tp::DBusProxy *proxy)
00173     : Tp::AbstractInterface(proxy, staticInterfaceName())
00174 {
00175 }
00176 
00177 ChannelInterfaceConferenceInterface::ChannelInterfaceConferenceInterface(const Tp::Client::ChannelInterface& mainInterface)
00178     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00179 {
00180 }
00181 
00182 ChannelInterfaceConferenceInterface::ChannelInterfaceConferenceInterface(const Tp::Client::ChannelInterface& mainInterface, QObject *parent)
00183     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00184 {
00185 }
00186 
00187 void ChannelInterfaceConferenceInterface::invalidate(Tp::DBusProxy *proxy,
00188         const QString &error, const QString &message)
00189 {
00190     disconnect(this, SIGNAL(ChannelMerged(const QDBusObjectPath&, uint, const QVariantMap&)), NULL, NULL);
00191     disconnect(this, SIGNAL(ChannelRemoved(const QDBusObjectPath&, const QVariantMap&)), NULL, NULL);
00192 
00193     Tp::AbstractInterface::invalidate(proxy, error, message);
00194 }
00195 
00196 ChannelInterfaceDTMFInterface::ChannelInterfaceDTMFInterface(const QString& busName, const QString& objectPath, QObject *parent)
00197     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00198 {
00199 }
00200 
00201 ChannelInterfaceDTMFInterface::ChannelInterfaceDTMFInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00202     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00203 {
00204 }
00205 
00206 ChannelInterfaceDTMFInterface::ChannelInterfaceDTMFInterface(Tp::DBusProxy *proxy)
00207     : Tp::AbstractInterface(proxy, staticInterfaceName())
00208 {
00209 }
00210 
00211 ChannelInterfaceDTMFInterface::ChannelInterfaceDTMFInterface(const Tp::Client::ChannelInterface& mainInterface)
00212     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00213 {
00214 }
00215 
00216 ChannelInterfaceDTMFInterface::ChannelInterfaceDTMFInterface(const Tp::Client::ChannelInterface& mainInterface, QObject *parent)
00217     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00218 {
00219 }
00220 
00221 void ChannelInterfaceDTMFInterface::invalidate(Tp::DBusProxy *proxy,
00222         const QString &error, const QString &message)
00223 {
00224     disconnect(this, SIGNAL(TonesDeferred(const QString&)), NULL, NULL);
00225     disconnect(this, SIGNAL(SendingTones(const QString&)), NULL, NULL);
00226     disconnect(this, SIGNAL(StoppedTones(bool)), NULL, NULL);
00227 
00228     Tp::AbstractInterface::invalidate(proxy, error, message);
00229 }
00230 
00231 ChannelInterfaceDestroyableInterface::ChannelInterfaceDestroyableInterface(const QString& busName, const QString& objectPath, QObject *parent)
00232     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00233 {
00234 }
00235 
00236 ChannelInterfaceDestroyableInterface::ChannelInterfaceDestroyableInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00237     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00238 {
00239 }
00240 
00241 ChannelInterfaceDestroyableInterface::ChannelInterfaceDestroyableInterface(Tp::DBusProxy *proxy)
00242     : Tp::AbstractInterface(proxy, staticInterfaceName())
00243 {
00244 }
00245 
00246 ChannelInterfaceDestroyableInterface::ChannelInterfaceDestroyableInterface(const Tp::Client::ChannelInterface& mainInterface)
00247     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00248 {
00249 }
00250 
00251 ChannelInterfaceDestroyableInterface::ChannelInterfaceDestroyableInterface(const Tp::Client::ChannelInterface& mainInterface, QObject *parent)
00252     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00253 {
00254 }
00255 
00256 void ChannelInterfaceDestroyableInterface::invalidate(Tp::DBusProxy *proxy,
00257         const QString &error, const QString &message)
00258 {
00259 
00260     Tp::AbstractInterface::invalidate(proxy, error, message);
00261 }
00262 
00263 ChannelInterfaceFileTransferMetadataInterface::ChannelInterfaceFileTransferMetadataInterface(const QString& busName, const QString& objectPath, QObject *parent)
00264     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00265 {
00266 }
00267 
00268 ChannelInterfaceFileTransferMetadataInterface::ChannelInterfaceFileTransferMetadataInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00269     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00270 {
00271 }
00272 
00273 ChannelInterfaceFileTransferMetadataInterface::ChannelInterfaceFileTransferMetadataInterface(Tp::DBusProxy *proxy)
00274     : Tp::AbstractInterface(proxy, staticInterfaceName())
00275 {
00276 }
00277 
00278 ChannelInterfaceFileTransferMetadataInterface::ChannelInterfaceFileTransferMetadataInterface(const Tp::Client::ChannelInterface& mainInterface)
00279     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00280 {
00281 }
00282 
00283 ChannelInterfaceFileTransferMetadataInterface::ChannelInterfaceFileTransferMetadataInterface(const Tp::Client::ChannelInterface& mainInterface, QObject *parent)
00284     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00285 {
00286 }
00287 
00288 void ChannelInterfaceFileTransferMetadataInterface::invalidate(Tp::DBusProxy *proxy,
00289         const QString &error, const QString &message)
00290 {
00291 
00292     Tp::AbstractInterface::invalidate(proxy, error, message);
00293 }
00294 
00295 ChannelInterfaceGroupInterface::ChannelInterfaceGroupInterface(const QString& busName, const QString& objectPath, QObject *parent)
00296     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00297 {
00298 }
00299 
00300 ChannelInterfaceGroupInterface::ChannelInterfaceGroupInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00301     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00302 {
00303 }
00304 
00305 ChannelInterfaceGroupInterface::ChannelInterfaceGroupInterface(Tp::DBusProxy *proxy)
00306     : Tp::AbstractInterface(proxy, staticInterfaceName())
00307 {
00308 }
00309 
00310 ChannelInterfaceGroupInterface::ChannelInterfaceGroupInterface(const Tp::Client::ChannelInterface& mainInterface)
00311     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00312 {
00313 }
00314 
00315 ChannelInterfaceGroupInterface::ChannelInterfaceGroupInterface(const Tp::Client::ChannelInterface& mainInterface, QObject *parent)
00316     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00317 {
00318 }
00319 
00320 void ChannelInterfaceGroupInterface::invalidate(Tp::DBusProxy *proxy,
00321         const QString &error, const QString &message)
00322 {
00323     disconnect(this, SIGNAL(HandleOwnersChanged(const Tp::HandleOwnerMap&, const Tp::UIntList&)), NULL, NULL);
00324     disconnect(this, SIGNAL(HandleOwnersChangedDetailed(const Tp::HandleOwnerMap&, const Tp::UIntList&, const Tp::HandleIdentifierMap&)), NULL, NULL);
00325     disconnect(this, SIGNAL(SelfHandleChanged(uint)), NULL, NULL);
00326     disconnect(this, SIGNAL(SelfContactChanged(uint, const QString&)), NULL, NULL);
00327     disconnect(this, SIGNAL(GroupFlagsChanged(uint, uint)), NULL, NULL);
00328     disconnect(this, SIGNAL(MembersChanged(const QString&, const Tp::UIntList&, const Tp::UIntList&, const Tp::UIntList&, const Tp::UIntList&, uint, uint)), NULL, NULL);
00329     disconnect(this, SIGNAL(MembersChangedDetailed(const Tp::UIntList&, const Tp::UIntList&, const Tp::UIntList&, const Tp::UIntList&, const QVariantMap&)), NULL, NULL);
00330 
00331     Tp::AbstractInterface::invalidate(proxy, error, message);
00332 }
00333 
00334 ChannelInterfaceHoldInterface::ChannelInterfaceHoldInterface(const QString& busName, const QString& objectPath, QObject *parent)
00335     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00336 {
00337 }
00338 
00339 ChannelInterfaceHoldInterface::ChannelInterfaceHoldInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00340     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00341 {
00342 }
00343 
00344 ChannelInterfaceHoldInterface::ChannelInterfaceHoldInterface(Tp::DBusProxy *proxy)
00345     : Tp::AbstractInterface(proxy, staticInterfaceName())
00346 {
00347 }
00348 
00349 ChannelInterfaceHoldInterface::ChannelInterfaceHoldInterface(const Tp::Client::ChannelInterface& mainInterface)
00350     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00351 {
00352 }
00353 
00354 ChannelInterfaceHoldInterface::ChannelInterfaceHoldInterface(const Tp::Client::ChannelInterface& mainInterface, QObject *parent)
00355     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00356 {
00357 }
00358 
00359 void ChannelInterfaceHoldInterface::invalidate(Tp::DBusProxy *proxy,
00360         const QString &error, const QString &message)
00361 {
00362     disconnect(this, SIGNAL(HoldStateChanged(uint, uint)), NULL, NULL);
00363 
00364     Tp::AbstractInterface::invalidate(proxy, error, message);
00365 }
00366 
00367 ChannelInterfaceMediaSignallingInterface::ChannelInterfaceMediaSignallingInterface(const QString& busName, const QString& objectPath, QObject *parent)
00368     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00369 {
00370 }
00371 
00372 ChannelInterfaceMediaSignallingInterface::ChannelInterfaceMediaSignallingInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00373     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00374 {
00375 }
00376 
00377 ChannelInterfaceMediaSignallingInterface::ChannelInterfaceMediaSignallingInterface(Tp::DBusProxy *proxy)
00378     : Tp::AbstractInterface(proxy, staticInterfaceName())
00379 {
00380 }
00381 
00382 ChannelInterfaceMediaSignallingInterface::ChannelInterfaceMediaSignallingInterface(const Tp::Client::ChannelInterface& mainInterface)
00383     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00384 {
00385 }
00386 
00387 ChannelInterfaceMediaSignallingInterface::ChannelInterfaceMediaSignallingInterface(const Tp::Client::ChannelInterface& mainInterface, QObject *parent)
00388     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00389 {
00390 }
00391 
00392 void ChannelInterfaceMediaSignallingInterface::invalidate(Tp::DBusProxy *proxy,
00393         const QString &error, const QString &message)
00394 {
00395     disconnect(this, SIGNAL(NewSessionHandler(const QDBusObjectPath&, const QString&)), NULL, NULL);
00396 
00397     Tp::AbstractInterface::invalidate(proxy, error, message);
00398 }
00399 
00400 ChannelInterfaceMessagesInterface::ChannelInterfaceMessagesInterface(const QString& busName, const QString& objectPath, QObject *parent)
00401     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00402 {
00403 }
00404 
00405 ChannelInterfaceMessagesInterface::ChannelInterfaceMessagesInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00406     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00407 {
00408 }
00409 
00410 ChannelInterfaceMessagesInterface::ChannelInterfaceMessagesInterface(Tp::DBusProxy *proxy)
00411     : Tp::AbstractInterface(proxy, staticInterfaceName())
00412 {
00413 }
00414 
00415 ChannelInterfaceMessagesInterface::ChannelInterfaceMessagesInterface(const Tp::Client::ChannelInterface& mainInterface)
00416     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00417 {
00418 }
00419 
00420 ChannelInterfaceMessagesInterface::ChannelInterfaceMessagesInterface(const Tp::Client::ChannelInterface& mainInterface, QObject *parent)
00421     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00422 {
00423 }
00424 
00425 void ChannelInterfaceMessagesInterface::invalidate(Tp::DBusProxy *proxy,
00426         const QString &error, const QString &message)
00427 {
00428     disconnect(this, SIGNAL(MessageSent(const Tp::MessagePartList&, uint, const QString&)), NULL, NULL);
00429     disconnect(this, SIGNAL(PendingMessagesRemoved(const Tp::UIntList&)), NULL, NULL);
00430     disconnect(this, SIGNAL(MessageReceived(const Tp::MessagePartList&)), NULL, NULL);
00431 
00432     Tp::AbstractInterface::invalidate(proxy, error, message);
00433 }
00434 
00435 ChannelInterfacePasswordInterface::ChannelInterfacePasswordInterface(const QString& busName, const QString& objectPath, QObject *parent)
00436     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00437 {
00438 }
00439 
00440 ChannelInterfacePasswordInterface::ChannelInterfacePasswordInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00441     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00442 {
00443 }
00444 
00445 ChannelInterfacePasswordInterface::ChannelInterfacePasswordInterface(Tp::DBusProxy *proxy)
00446     : Tp::AbstractInterface(proxy, staticInterfaceName())
00447 {
00448 }
00449 
00450 ChannelInterfacePasswordInterface::ChannelInterfacePasswordInterface(const Tp::Client::ChannelInterface& mainInterface)
00451     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00452 {
00453 }
00454 
00455 ChannelInterfacePasswordInterface::ChannelInterfacePasswordInterface(const Tp::Client::ChannelInterface& mainInterface, QObject *parent)
00456     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00457 {
00458 }
00459 
00460 void ChannelInterfacePasswordInterface::invalidate(Tp::DBusProxy *proxy,
00461         const QString &error, const QString &message)
00462 {
00463     disconnect(this, SIGNAL(PasswordFlagsChanged(uint, uint)), NULL, NULL);
00464 
00465     Tp::AbstractInterface::invalidate(proxy, error, message);
00466 }
00467 
00468 ChannelInterfaceSASLAuthenticationInterface::ChannelInterfaceSASLAuthenticationInterface(const QString& busName, const QString& objectPath, QObject *parent)
00469     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00470 {
00471 }
00472 
00473 ChannelInterfaceSASLAuthenticationInterface::ChannelInterfaceSASLAuthenticationInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00474     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00475 {
00476 }
00477 
00478 ChannelInterfaceSASLAuthenticationInterface::ChannelInterfaceSASLAuthenticationInterface(Tp::DBusProxy *proxy)
00479     : Tp::AbstractInterface(proxy, staticInterfaceName())
00480 {
00481 }
00482 
00483 ChannelInterfaceSASLAuthenticationInterface::ChannelInterfaceSASLAuthenticationInterface(const Tp::Client::ChannelInterface& mainInterface)
00484     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00485 {
00486 }
00487 
00488 ChannelInterfaceSASLAuthenticationInterface::ChannelInterfaceSASLAuthenticationInterface(const Tp::Client::ChannelInterface& mainInterface, QObject *parent)
00489     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00490 {
00491 }
00492 
00493 void ChannelInterfaceSASLAuthenticationInterface::invalidate(Tp::DBusProxy *proxy,
00494         const QString &error, const QString &message)
00495 {
00496     disconnect(this, SIGNAL(SASLStatusChanged(uint, const QString&, const QVariantMap&)), NULL, NULL);
00497     disconnect(this, SIGNAL(NewChallenge(const QByteArray&)), NULL, NULL);
00498 
00499     Tp::AbstractInterface::invalidate(proxy, error, message);
00500 }
00501 
00502 ChannelInterfaceSMSInterface::ChannelInterfaceSMSInterface(const QString& busName, const QString& objectPath, QObject *parent)
00503     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00504 {
00505 }
00506 
00507 ChannelInterfaceSMSInterface::ChannelInterfaceSMSInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00508     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00509 {
00510 }
00511 
00512 ChannelInterfaceSMSInterface::ChannelInterfaceSMSInterface(Tp::DBusProxy *proxy)
00513     : Tp::AbstractInterface(proxy, staticInterfaceName())
00514 {
00515 }
00516 
00517 ChannelInterfaceSMSInterface::ChannelInterfaceSMSInterface(const Tp::Client::ChannelInterface& mainInterface)
00518     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00519 {
00520 }
00521 
00522 ChannelInterfaceSMSInterface::ChannelInterfaceSMSInterface(const Tp::Client::ChannelInterface& mainInterface, QObject *parent)
00523     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00524 {
00525 }
00526 
00527 void ChannelInterfaceSMSInterface::invalidate(Tp::DBusProxy *proxy,
00528         const QString &error, const QString &message)
00529 {
00530     disconnect(this, SIGNAL(SMSChannelChanged(bool)), NULL, NULL);
00531 
00532     Tp::AbstractInterface::invalidate(proxy, error, message);
00533 }
00534 
00535 ChannelInterfaceSecurableInterface::ChannelInterfaceSecurableInterface(const QString& busName, const QString& objectPath, QObject *parent)
00536     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00537 {
00538 }
00539 
00540 ChannelInterfaceSecurableInterface::ChannelInterfaceSecurableInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00541     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00542 {
00543 }
00544 
00545 ChannelInterfaceSecurableInterface::ChannelInterfaceSecurableInterface(Tp::DBusProxy *proxy)
00546     : Tp::AbstractInterface(proxy, staticInterfaceName())
00547 {
00548 }
00549 
00550 ChannelInterfaceSecurableInterface::ChannelInterfaceSecurableInterface(const Tp::Client::ChannelInterface& mainInterface)
00551     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00552 {
00553 }
00554 
00555 ChannelInterfaceSecurableInterface::ChannelInterfaceSecurableInterface(const Tp::Client::ChannelInterface& mainInterface, QObject *parent)
00556     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00557 {
00558 }
00559 
00560 void ChannelInterfaceSecurableInterface::invalidate(Tp::DBusProxy *proxy,
00561         const QString &error, const QString &message)
00562 {
00563 
00564     Tp::AbstractInterface::invalidate(proxy, error, message);
00565 }
00566 
00567 ChannelInterfaceServicePointInterface::ChannelInterfaceServicePointInterface(const QString& busName, const QString& objectPath, QObject *parent)
00568     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00569 {
00570 }
00571 
00572 ChannelInterfaceServicePointInterface::ChannelInterfaceServicePointInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00573     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00574 {
00575 }
00576 
00577 ChannelInterfaceServicePointInterface::ChannelInterfaceServicePointInterface(Tp::DBusProxy *proxy)
00578     : Tp::AbstractInterface(proxy, staticInterfaceName())
00579 {
00580 }
00581 
00582 ChannelInterfaceServicePointInterface::ChannelInterfaceServicePointInterface(const Tp::Client::ChannelInterface& mainInterface)
00583     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00584 {
00585 }
00586 
00587 ChannelInterfaceServicePointInterface::ChannelInterfaceServicePointInterface(const Tp::Client::ChannelInterface& mainInterface, QObject *parent)
00588     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00589 {
00590 }
00591 
00592 void ChannelInterfaceServicePointInterface::invalidate(Tp::DBusProxy *proxy,
00593         const QString &error, const QString &message)
00594 {
00595     disconnect(this, SIGNAL(ServicePointChanged(const Tp::ServicePoint&)), NULL, NULL);
00596 
00597     Tp::AbstractInterface::invalidate(proxy, error, message);
00598 }
00599 
00600 ChannelInterfaceTubeInterface::ChannelInterfaceTubeInterface(const QString& busName, const QString& objectPath, QObject *parent)
00601     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00602 {
00603 }
00604 
00605 ChannelInterfaceTubeInterface::ChannelInterfaceTubeInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00606     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00607 {
00608 }
00609 
00610 ChannelInterfaceTubeInterface::ChannelInterfaceTubeInterface(Tp::DBusProxy *proxy)
00611     : Tp::AbstractInterface(proxy, staticInterfaceName())
00612 {
00613 }
00614 
00615 ChannelInterfaceTubeInterface::ChannelInterfaceTubeInterface(const Tp::Client::ChannelInterface& mainInterface)
00616     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00617 {
00618 }
00619 
00620 ChannelInterfaceTubeInterface::ChannelInterfaceTubeInterface(const Tp::Client::ChannelInterface& mainInterface, QObject *parent)
00621     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00622 {
00623 }
00624 
00625 void ChannelInterfaceTubeInterface::invalidate(Tp::DBusProxy *proxy,
00626         const QString &error, const QString &message)
00627 {
00628     disconnect(this, SIGNAL(TubeChannelStateChanged(uint)), NULL, NULL);
00629 
00630     Tp::AbstractInterface::invalidate(proxy, error, message);
00631 }
00632 
00633 ChannelTypeCallInterface::ChannelTypeCallInterface(const QString& busName, const QString& objectPath, QObject *parent)
00634     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00635 {
00636 }
00637 
00638 ChannelTypeCallInterface::ChannelTypeCallInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00639     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00640 {
00641 }
00642 
00643 ChannelTypeCallInterface::ChannelTypeCallInterface(Tp::DBusProxy *proxy)
00644     : Tp::AbstractInterface(proxy, staticInterfaceName())
00645 {
00646 }
00647 
00648 ChannelTypeCallInterface::ChannelTypeCallInterface(const Tp::Client::ChannelInterface& mainInterface)
00649     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00650 {
00651 }
00652 
00653 ChannelTypeCallInterface::ChannelTypeCallInterface(const Tp::Client::ChannelInterface& mainInterface, QObject *parent)
00654     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00655 {
00656 }
00657 
00658 void ChannelTypeCallInterface::invalidate(Tp::DBusProxy *proxy,
00659         const QString &error, const QString &message)
00660 {
00661     disconnect(this, SIGNAL(ContentAdded(const QDBusObjectPath&)), NULL, NULL);
00662     disconnect(this, SIGNAL(ContentRemoved(const QDBusObjectPath&, const Tp::CallStateReason&)), NULL, NULL);
00663     disconnect(this, SIGNAL(CallStateChanged(uint, uint, const Tp::CallStateReason&, const QVariantMap&)), NULL, NULL);
00664     disconnect(this, SIGNAL(CallMembersChanged(const Tp::CallMemberMap&, const Tp::HandleIdentifierMap&, const Tp::UIntList&, const Tp::CallStateReason&)), NULL, NULL);
00665 
00666     Tp::AbstractInterface::invalidate(proxy, error, message);
00667 }
00668 
00669 ChannelTypeContactListInterface::ChannelTypeContactListInterface(const QString& busName, const QString& objectPath, QObject *parent)
00670     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00671 {
00672 }
00673 
00674 ChannelTypeContactListInterface::ChannelTypeContactListInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00675     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00676 {
00677 }
00678 
00679 ChannelTypeContactListInterface::ChannelTypeContactListInterface(Tp::DBusProxy *proxy)
00680     : Tp::AbstractInterface(proxy, staticInterfaceName())
00681 {
00682 }
00683 
00684 ChannelTypeContactListInterface::ChannelTypeContactListInterface(const Tp::Client::ChannelInterface& mainInterface)
00685     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00686 {
00687 }
00688 
00689 ChannelTypeContactListInterface::ChannelTypeContactListInterface(const Tp::Client::ChannelInterface& mainInterface, QObject *parent)
00690     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00691 {
00692 }
00693 
00694 void ChannelTypeContactListInterface::invalidate(Tp::DBusProxy *proxy,
00695         const QString &error, const QString &message)
00696 {
00697 
00698     Tp::AbstractInterface::invalidate(proxy, error, message);
00699 }
00700 
00701 ChannelTypeContactSearchInterface::ChannelTypeContactSearchInterface(const QString& busName, const QString& objectPath, QObject *parent)
00702     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00703 {
00704 }
00705 
00706 ChannelTypeContactSearchInterface::ChannelTypeContactSearchInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00707     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00708 {
00709 }
00710 
00711 ChannelTypeContactSearchInterface::ChannelTypeContactSearchInterface(Tp::DBusProxy *proxy)
00712     : Tp::AbstractInterface(proxy, staticInterfaceName())
00713 {
00714 }
00715 
00716 ChannelTypeContactSearchInterface::ChannelTypeContactSearchInterface(const Tp::Client::ChannelInterface& mainInterface)
00717     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00718 {
00719 }
00720 
00721 ChannelTypeContactSearchInterface::ChannelTypeContactSearchInterface(const Tp::Client::ChannelInterface& mainInterface, QObject *parent)
00722     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00723 {
00724 }
00725 
00726 void ChannelTypeContactSearchInterface::invalidate(Tp::DBusProxy *proxy,
00727         const QString &error, const QString &message)
00728 {
00729     disconnect(this, SIGNAL(SearchStateChanged(uint, const QString&, const QVariantMap&)), NULL, NULL);
00730     disconnect(this, SIGNAL(SearchResultReceived(const Tp::ContactSearchResultMap&)), NULL, NULL);
00731 
00732     Tp::AbstractInterface::invalidate(proxy, error, message);
00733 }
00734 
00735 ChannelTypeDBusTubeInterface::ChannelTypeDBusTubeInterface(const QString& busName, const QString& objectPath, QObject *parent)
00736     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00737 {
00738 }
00739 
00740 ChannelTypeDBusTubeInterface::ChannelTypeDBusTubeInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00741     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00742 {
00743 }
00744 
00745 ChannelTypeDBusTubeInterface::ChannelTypeDBusTubeInterface(Tp::DBusProxy *proxy)
00746     : Tp::AbstractInterface(proxy, staticInterfaceName())
00747 {
00748 }
00749 
00750 ChannelTypeDBusTubeInterface::ChannelTypeDBusTubeInterface(const Tp::Client::ChannelInterface& mainInterface)
00751     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00752 {
00753 }
00754 
00755 ChannelTypeDBusTubeInterface::ChannelTypeDBusTubeInterface(const Tp::Client::ChannelInterface& mainInterface, QObject *parent)
00756     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00757 {
00758 }
00759 
00760 void ChannelTypeDBusTubeInterface::invalidate(Tp::DBusProxy *proxy,
00761         const QString &error, const QString &message)
00762 {
00763     disconnect(this, SIGNAL(DBusNamesChanged(const Tp::DBusTubeParticipants&, const Tp::UIntList&)), NULL, NULL);
00764 
00765     Tp::AbstractInterface::invalidate(proxy, error, message);
00766 }
00767 
00768 ChannelTypeFileTransferInterface::ChannelTypeFileTransferInterface(const QString& busName, const QString& objectPath, QObject *parent)
00769     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00770 {
00771 }
00772 
00773 ChannelTypeFileTransferInterface::ChannelTypeFileTransferInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00774     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00775 {
00776 }
00777 
00778 ChannelTypeFileTransferInterface::ChannelTypeFileTransferInterface(Tp::DBusProxy *proxy)
00779     : Tp::AbstractInterface(proxy, staticInterfaceName())
00780 {
00781 }
00782 
00783 ChannelTypeFileTransferInterface::ChannelTypeFileTransferInterface(const Tp::Client::ChannelInterface& mainInterface)
00784     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00785 {
00786 }
00787 
00788 ChannelTypeFileTransferInterface::ChannelTypeFileTransferInterface(const Tp::Client::ChannelInterface& mainInterface, QObject *parent)
00789     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00790 {
00791 }
00792 
00793 void ChannelTypeFileTransferInterface::invalidate(Tp::DBusProxy *proxy,
00794         const QString &error, const QString &message)
00795 {
00796     disconnect(this, SIGNAL(FileTransferStateChanged(uint, uint)), NULL, NULL);
00797     disconnect(this, SIGNAL(TransferredBytesChanged(qulonglong)), NULL, NULL);
00798     disconnect(this, SIGNAL(InitialOffsetDefined(qulonglong)), NULL, NULL);
00799     disconnect(this, SIGNAL(URIDefined(const QString&)), NULL, NULL);
00800 
00801     Tp::AbstractInterface::invalidate(proxy, error, message);
00802 }
00803 
00804 ChannelTypeRoomListInterface::ChannelTypeRoomListInterface(const QString& busName, const QString& objectPath, QObject *parent)
00805     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00806 {
00807 }
00808 
00809 ChannelTypeRoomListInterface::ChannelTypeRoomListInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00810     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00811 {
00812 }
00813 
00814 ChannelTypeRoomListInterface::ChannelTypeRoomListInterface(Tp::DBusProxy *proxy)
00815     : Tp::AbstractInterface(proxy, staticInterfaceName())
00816 {
00817 }
00818 
00819 ChannelTypeRoomListInterface::ChannelTypeRoomListInterface(const Tp::Client::ChannelInterface& mainInterface)
00820     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00821 {
00822 }
00823 
00824 ChannelTypeRoomListInterface::ChannelTypeRoomListInterface(const Tp::Client::ChannelInterface& mainInterface, QObject *parent)
00825     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00826 {
00827 }
00828 
00829 void ChannelTypeRoomListInterface::invalidate(Tp::DBusProxy *proxy,
00830         const QString &error, const QString &message)
00831 {
00832     disconnect(this, SIGNAL(GotRooms(const Tp::RoomInfoList&)), NULL, NULL);
00833     disconnect(this, SIGNAL(ListingRooms(bool)), NULL, NULL);
00834 
00835     Tp::AbstractInterface::invalidate(proxy, error, message);
00836 }
00837 
00838 ChannelTypeServerAuthenticationInterface::ChannelTypeServerAuthenticationInterface(const QString& busName, const QString& objectPath, QObject *parent)
00839     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00840 {
00841 }
00842 
00843 ChannelTypeServerAuthenticationInterface::ChannelTypeServerAuthenticationInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00844     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00845 {
00846 }
00847 
00848 ChannelTypeServerAuthenticationInterface::ChannelTypeServerAuthenticationInterface(Tp::DBusProxy *proxy)
00849     : Tp::AbstractInterface(proxy, staticInterfaceName())
00850 {
00851 }
00852 
00853 ChannelTypeServerAuthenticationInterface::ChannelTypeServerAuthenticationInterface(const Tp::Client::ChannelInterface& mainInterface)
00854     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00855 {
00856 }
00857 
00858 ChannelTypeServerAuthenticationInterface::ChannelTypeServerAuthenticationInterface(const Tp::Client::ChannelInterface& mainInterface, QObject *parent)
00859     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00860 {
00861 }
00862 
00863 void ChannelTypeServerAuthenticationInterface::invalidate(Tp::DBusProxy *proxy,
00864         const QString &error, const QString &message)
00865 {
00866 
00867     Tp::AbstractInterface::invalidate(proxy, error, message);
00868 }
00869 
00870 ChannelTypeServerTLSConnectionInterface::ChannelTypeServerTLSConnectionInterface(const QString& busName, const QString& objectPath, QObject *parent)
00871     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00872 {
00873 }
00874 
00875 ChannelTypeServerTLSConnectionInterface::ChannelTypeServerTLSConnectionInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00876     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00877 {
00878 }
00879 
00880 ChannelTypeServerTLSConnectionInterface::ChannelTypeServerTLSConnectionInterface(Tp::DBusProxy *proxy)
00881     : Tp::AbstractInterface(proxy, staticInterfaceName())
00882 {
00883 }
00884 
00885 ChannelTypeServerTLSConnectionInterface::ChannelTypeServerTLSConnectionInterface(const Tp::Client::ChannelInterface& mainInterface)
00886     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00887 {
00888 }
00889 
00890 ChannelTypeServerTLSConnectionInterface::ChannelTypeServerTLSConnectionInterface(const Tp::Client::ChannelInterface& mainInterface, QObject *parent)
00891     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00892 {
00893 }
00894 
00895 void ChannelTypeServerTLSConnectionInterface::invalidate(Tp::DBusProxy *proxy,
00896         const QString &error, const QString &message)
00897 {
00898 
00899     Tp::AbstractInterface::invalidate(proxy, error, message);
00900 }
00901 
00902 ChannelTypeStreamTubeInterface::ChannelTypeStreamTubeInterface(const QString& busName, const QString& objectPath, QObject *parent)
00903     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00904 {
00905 }
00906 
00907 ChannelTypeStreamTubeInterface::ChannelTypeStreamTubeInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00908     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00909 {
00910 }
00911 
00912 ChannelTypeStreamTubeInterface::ChannelTypeStreamTubeInterface(Tp::DBusProxy *proxy)
00913     : Tp::AbstractInterface(proxy, staticInterfaceName())
00914 {
00915 }
00916 
00917 ChannelTypeStreamTubeInterface::ChannelTypeStreamTubeInterface(const Tp::Client::ChannelInterface& mainInterface)
00918     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00919 {
00920 }
00921 
00922 ChannelTypeStreamTubeInterface::ChannelTypeStreamTubeInterface(const Tp::Client::ChannelInterface& mainInterface, QObject *parent)
00923     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00924 {
00925 }
00926 
00927 void ChannelTypeStreamTubeInterface::invalidate(Tp::DBusProxy *proxy,
00928         const QString &error, const QString &message)
00929 {
00930     disconnect(this, SIGNAL(NewRemoteConnection(uint, const QDBusVariant&, uint)), NULL, NULL);
00931     disconnect(this, SIGNAL(NewLocalConnection(uint)), NULL, NULL);
00932     disconnect(this, SIGNAL(ConnectionClosed(uint, const QString&, const QString&)), NULL, NULL);
00933 
00934     Tp::AbstractInterface::invalidate(proxy, error, message);
00935 }
00936 
00937 ChannelTypeStreamedMediaInterface::ChannelTypeStreamedMediaInterface(const QString& busName, const QString& objectPath, QObject *parent)
00938     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00939 {
00940 }
00941 
00942 ChannelTypeStreamedMediaInterface::ChannelTypeStreamedMediaInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00943     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00944 {
00945 }
00946 
00947 ChannelTypeStreamedMediaInterface::ChannelTypeStreamedMediaInterface(Tp::DBusProxy *proxy)
00948     : Tp::AbstractInterface(proxy, staticInterfaceName())
00949 {
00950 }
00951 
00952 ChannelTypeStreamedMediaInterface::ChannelTypeStreamedMediaInterface(const Tp::Client::ChannelInterface& mainInterface)
00953     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00954 {
00955 }
00956 
00957 ChannelTypeStreamedMediaInterface::ChannelTypeStreamedMediaInterface(const Tp::Client::ChannelInterface& mainInterface, QObject *parent)
00958     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00959 {
00960 }
00961 
00962 void ChannelTypeStreamedMediaInterface::invalidate(Tp::DBusProxy *proxy,
00963         const QString &error, const QString &message)
00964 {
00965     disconnect(this, SIGNAL(StreamAdded(uint, uint, uint)), NULL, NULL);
00966     disconnect(this, SIGNAL(StreamDirectionChanged(uint, uint, uint)), NULL, NULL);
00967     disconnect(this, SIGNAL(StreamError(uint, uint, const QString&)), NULL, NULL);
00968     disconnect(this, SIGNAL(StreamRemoved(uint)), NULL, NULL);
00969     disconnect(this, SIGNAL(StreamStateChanged(uint, uint)), NULL, NULL);
00970 
00971     Tp::AbstractInterface::invalidate(proxy, error, message);
00972 }
00973 
00974 ChannelTypeTextInterface::ChannelTypeTextInterface(const QString& busName, const QString& objectPath, QObject *parent)
00975     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00976 {
00977 }
00978 
00979 ChannelTypeTextInterface::ChannelTypeTextInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00980     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00981 {
00982 }
00983 
00984 ChannelTypeTextInterface::ChannelTypeTextInterface(Tp::DBusProxy *proxy)
00985     : Tp::AbstractInterface(proxy, staticInterfaceName())
00986 {
00987 }
00988 
00989 ChannelTypeTextInterface::ChannelTypeTextInterface(const Tp::Client::ChannelInterface& mainInterface)
00990     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00991 {
00992 }
00993 
00994 ChannelTypeTextInterface::ChannelTypeTextInterface(const Tp::Client::ChannelInterface& mainInterface, QObject *parent)
00995     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00996 {
00997 }
00998 
00999 void ChannelTypeTextInterface::invalidate(Tp::DBusProxy *proxy,
01000         const QString &error, const QString &message)
01001 {
01002     disconnect(this, SIGNAL(LostMessage()), NULL, NULL);
01003     disconnect(this, SIGNAL(Received(uint, uint, uint, uint, uint, const QString&)), NULL, NULL);
01004     disconnect(this, SIGNAL(SendError(uint, uint, uint, const QString&)), NULL, NULL);
01005     disconnect(this, SIGNAL(Sent(uint, uint, const QString&)), NULL, NULL);
01006 
01007     Tp::AbstractInterface::invalidate(proxy, error, message);
01008 }
01009 
01010 ChannelTypeTubesInterface::ChannelTypeTubesInterface(const QString& busName, const QString& objectPath, QObject *parent)
01011     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
01012 {
01013 }
01014 
01015 ChannelTypeTubesInterface::ChannelTypeTubesInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
01016     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
01017 {
01018 }
01019 
01020 ChannelTypeTubesInterface::ChannelTypeTubesInterface(Tp::DBusProxy *proxy)
01021     : Tp::AbstractInterface(proxy, staticInterfaceName())
01022 {
01023 }
01024 
01025 ChannelTypeTubesInterface::ChannelTypeTubesInterface(const Tp::Client::ChannelInterface& mainInterface)
01026     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
01027 {
01028 }
01029 
01030 ChannelTypeTubesInterface::ChannelTypeTubesInterface(const Tp::Client::ChannelInterface& mainInterface, QObject *parent)
01031     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
01032 {
01033 }
01034 
01035 void ChannelTypeTubesInterface::invalidate(Tp::DBusProxy *proxy,
01036         const QString &error, const QString &message)
01037 {
01038     disconnect(this, SIGNAL(NewTube(uint, uint, uint, const QString&, const QVariantMap&, uint)), NULL, NULL);
01039     disconnect(this, SIGNAL(TubeStateChanged(uint, uint)), NULL, NULL);
01040     disconnect(this, SIGNAL(TubeClosed(uint)), NULL, NULL);
01041     disconnect(this, SIGNAL(DBusNamesChanged(uint, const Tp::DBusTubeMemberList&, const Tp::UIntList&)), NULL, NULL);
01042     disconnect(this, SIGNAL(StreamTubeNewConnection(uint, uint)), NULL, NULL);
01043 
01044     Tp::AbstractInterface::invalidate(proxy, error, message);
01045 }
01046 }
01047 }


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00915.html0000644000175200001440000000577012000060453021635 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PresenceSpecList Member List
This is the complete list of members for Tp::PresenceSpecList, including all inherited members.
bareSpecs() const Tp::PresenceSpecList [inline]
PresenceSpecList()Tp::PresenceSpecList [inline]
PresenceSpecList(const SimpleStatusSpecMap &specMap)Tp::PresenceSpecList [inline]
PresenceSpecList(const QList< PresenceSpec > &other)Tp::PresenceSpecList [inline]
toMap() const Tp::PresenceSpecList [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00372.html0000644000175200001440000001250512000060453021624 0ustar00collabora-develusers00000000000000 Tp::RTCPFeedbackMessageMap Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::RTCPFeedbackMessageMap Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<uint, RTCPFeedbackMessageProperties>, but needed to have a discrete type in the Qt type system.

A map of codec and its feedback properties.


Constructor & Destructor Documentation


Member Function Documentation

RTCPFeedbackMessageMap& Tp::RTCPFeedbackMessageMap::operator= ( const QMap< uint, RTCPFeedbackMessageProperties > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00567_source.html0000644000175200001440000000761512000060453023220 0ustar00collabora-develusers00000000000000 debug.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
debug.h
00001 
00023 #ifndef _TelepathyQt_debug_h_HEADER_GUARD_
00024 #define _TelepathyQt_debug_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Global>
00031 
00032 namespace Tp
00033 {
00034 
00035 TP_QT_EXPORT void enableDebug(bool enable);
00036 TP_QT_EXPORT void enableWarnings(bool enable);
00037 
00038 typedef void (*DebugCallback)(const QString &libraryName,
00039                               const QString &libraryVersion,
00040                               QtMsgType type,
00041                               const QString &msg);
00042 TP_QT_EXPORT void setDebugCallback(DebugCallback cb);
00043 
00044 } // Tp
00045 
00046 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00277.html0000644000175200001440000002222512000060453021630 0ustar00collabora-develusers00000000000000 Tp::MemberFunctor4< R, T, Arg1, Arg2, Arg3, Arg4 > Struct Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MemberFunctor4< R, T, Arg1, Arg2, Arg3, Arg4 > Struct Template Reference

#include </home/collabora-devel/kde/src/telepathy-qt4/TelepathyQt/functors.h>

Inherits Tp::BaseFunctor.

List of all members.

Public Types

Public Member Functions

Public Attributes

template<class R, class T, class Arg1, class Arg2, class Arg3, class Arg4>
struct Tp::MemberFunctor4< R, T, Arg1, Arg2, Arg3, Arg4 >


Member Typedef Documentation

template<class R, class T, class Arg1, class Arg2, class Arg3, class Arg4>
typedef R(T::* Tp::MemberFunctor4< R, T, Arg1, Arg2, Arg3, Arg4 >::FunctionType)(Arg1, Arg2, Arg3, Arg4)
template<class R, class T, class Arg1, class Arg2, class Arg3, class Arg4>
typedef R Tp::MemberFunctor4< R, T, Arg1, Arg2, Arg3, Arg4 >::ResultType

Constructor & Destructor Documentation

template<class R, class T, class Arg1, class Arg2, class Arg3, class Arg4>
Tp::MemberFunctor4< R, T, Arg1, Arg2, Arg3, Arg4 >::MemberFunctor4 ( T *  object,
FunctionType  fn 
) [inline]

Member Function Documentation

template<class R, class T, class Arg1, class Arg2, class Arg3, class Arg4>
ResultType Tp::MemberFunctor4< R, T, Arg1, Arg2, Arg3, Arg4 >::operator() ( Arg1  a1,
Arg2  a2,
Arg3  a3,
Arg4  a4 
) const [inline]

Member Data Documentation

template<class R, class T, class Arg1, class Arg2, class Arg3, class Arg4>
T* Tp::MemberFunctor4< R, T, Arg1, Arg2, Arg3, Arg4 >::object
template<class R, class T, class Arg1, class Arg2, class Arg3, class Arg4>
FunctionType Tp::MemberFunctor4< R, T, Arg1, Arg2, Arg3, Arg4 >::fn


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00841.html0000644000175200001440000000714712000060453021633 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Contact::InfoFields Member List
This is the complete list of members for Tp::Contact::InfoFields, including all inherited members.
allFields() const Tp::Contact::InfoFields
fields(const QString &name) const Tp::Contact::InfoFields
InfoFields()Tp::Contact::InfoFields
InfoFields(const ContactInfoFieldList &fields)Tp::Contact::InfoFields
InfoFields(const InfoFields &other)Tp::Contact::InfoFields
isValid() const Tp::Contact::InfoFields [inline]
operator=(const InfoFields &other)Tp::Contact::InfoFields
~InfoFields()Tp::Contact::InfoFields


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00943.html0000644000175200001440000000511712000060453021631 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::StreamTubeClient::TcpSourceAddressGenerator Member List
This is the complete list of members for Tp::StreamTubeClient::TcpSourceAddressGenerator, including all inherited members.
nextSourceAddress(const AccountPtr &account, const IncomingStreamTubeChannelPtr &tube)=0Tp::StreamTubeClient::TcpSourceAddressGenerator [pure virtual]
~TcpSourceAddressGenerator()Tp::StreamTubeClient::TcpSourceAddressGenerator [inline, protected, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00686_source.html0000644000175200001440000001223112000060453023210 0ustar00collabora-develusers00000000000000 room-list-channel.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
room-list-channel.h
00001 
00023 #ifndef _TelepathyQt_room_list_channel_h_HEADER_GUARD_
00024 #define _TelepathyQt_room_list_channel_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Channel>
00031 
00032 namespace Tp
00033 {
00034 
00035 class TP_QT_EXPORT RoomListChannel : public Channel
00036 {
00037     Q_OBJECT
00038     Q_DISABLE_COPY(RoomListChannel)
00039 
00040 public:
00041     static RoomListChannelPtr create(const ConnectionPtr &connection,
00042             const QString &objectPath, const QVariantMap &immutableProperties);
00043 
00044     virtual ~RoomListChannel();
00045 
00046 protected:
00047     RoomListChannel(const ConnectionPtr &connection, const QString &objectPath,
00048             const QVariantMap &immutableProperties,
00049             const Feature &coreFeature = Channel::FeatureCore);
00050 
00051 private:
00052     struct Private;
00053     friend struct Private;
00054     Private *mPriv;
00055 };
00056 
00057 } // Tp
00058 
00059 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00765.html0000644000175200001440000000566112000060453021637 0ustar00collabora-develusers00000000000000 Deprecated List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Deprecated List
Member Tp::AccountManager::accountForPath (const QString &path) const
See accountForObjectPath()
Member Tp::AccountManager::accountsForPaths (const QStringList &paths) const
See accountsForObjectPaths()
Member Tp::SimpleCallObserver::streamedMediaCallEnded (const Tp::StreamedMediaChannelPtr &channel, const QString &errorName, const QString &errorMessage)
Use callEnded() instead. Modern clients shouldn't use StreamedMedia channels.
Member Tp::SimpleCallObserver::streamedMediaCalls () const
Use calls() instead. Modern clients shouldn't use StreamedMedia channels.
Member Tp::SimpleCallObserver::streamedMediaCallStarted (const Tp::StreamedMediaChannelPtr &channel)
Use callStarted() instead. Modern clients shouldn't use StreamedMedia channels.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00626_source.html0000644000175200001440000002253612000060453023213 0ustar00collabora-develusers00000000000000 outgoing-stream-tube-channel.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
outgoing-stream-tube-channel.h
00001 
00022 #ifndef _TelepathyQt_outgoing_stream_tube_channel_h_HEADER_GUARD_
00023 #define _TelepathyQt_outgoing_stream_tube_channel_h_HEADER_GUARD_
00024 
00025 #ifndef IN_TP_QT_HEADER
00026 #error IN_TP_QT_HEADER
00027 #endif
00028 
00029 #include <TelepathyQt/StreamTubeChannel>
00030 #include <TelepathyQt/PendingOperation>
00031 
00032 class QHostAddress;
00033 class QTcpServer;
00034 class QLocalServer;
00035 
00036 namespace Tp
00037 {
00038 
00039 class TP_QT_EXPORT OutgoingStreamTubeChannel : public StreamTubeChannel
00040 {
00041     Q_OBJECT
00042     Q_DISABLE_COPY(OutgoingStreamTubeChannel)
00043 
00044 public:
00045     static const Feature FeatureCore;
00046 
00047     static OutgoingStreamTubeChannelPtr create(const ConnectionPtr &connection,
00048             const QString &objectPath, const QVariantMap &immutableProperties);
00049 
00050     virtual ~OutgoingStreamTubeChannel();
00051 
00052     PendingOperation *offerTcpSocket(const QHostAddress &address, quint16 port,
00053             const QVariantMap &parameters = QVariantMap());
00054     PendingOperation *offerTcpSocket(const QTcpServer *server,
00055             const QVariantMap &parameters = QVariantMap());
00056 
00057     PendingOperation *offerUnixSocket(const QString &socketAddress,
00058             const QVariantMap &parameters = QVariantMap(), bool requireCredentials = false);
00059     PendingOperation *offerUnixSocket(const QLocalServer *server,
00060             const QVariantMap &parameters = QVariantMap(), bool requireCredentials = false);
00061 
00062     QHash<uint, Tp::ContactPtr> contactsForConnections() const;
00063 
00064     QHash<QPair<QHostAddress,quint16>, uint> connectionsForSourceAddresses() const;
00065     QHash<uchar, uint> connectionsForCredentials() const;
00066 
00067 protected:
00068     OutgoingStreamTubeChannel(const ConnectionPtr &connection, const QString &objectPath,
00069             const QVariantMap &immutableProperties,
00070             const Feature &coreFeature = OutgoingStreamTubeChannel::FeatureCore);
00071 
00072 private Q_SLOTS:
00073     TP_QT_NO_EXPORT void onNewRemoteConnection(uint contactId,
00074             const QDBusVariant &parameter, uint connectionId);
00075     TP_QT_NO_EXPORT void onContactsRetrieved(const QUuid &uuid,
00076             const QList<Tp::ContactPtr> &contacts);
00077     TP_QT_NO_EXPORT void onConnectionClosed(uint connectionId,
00078             const QString &errorName, const QString &errorMessage);
00079 
00080 private:
00081     struct Private;
00082     friend struct PendingOpenTube;
00083     friend struct Private;
00084     Private *mPriv;
00085 };
00086 
00087 }
00088 
00089 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01152.html0000644000175200001440000002017112000060453021617 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::DBus::PropertiesInterface Member List
This is the complete list of members for Tp::Client::DBus::PropertiesInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
Get(const QString &interfaceName, const QString &propertyName, int timeout=-1)Tp::Client::DBus::PropertiesInterface [inline, slot]
GetAll(const QString &interfaceName, int timeout=-1)Tp::Client::DBus::PropertiesInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::DBus::PropertiesInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
PropertiesInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::DBus::PropertiesInterface
PropertiesInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::DBus::PropertiesInterface
PropertiesInterface(Tp::DBusProxy *proxy)Tp::Client::DBus::PropertiesInterface
PropertiesInterface(const Tp::AbstractInterface &mainInterface)Tp::Client::DBus::PropertiesInterface [explicit]
PropertiesInterface(const Tp::AbstractInterface &mainInterface, QObject *parent)Tp::Client::DBus::PropertiesInterface
requestAllProperties() const Tp::Client::DBus::PropertiesInterface [inline]
Set(const QString &interfaceName, const QString &propertyName, const QDBusVariant &value, int timeout=-1)Tp::Client::DBus::PropertiesInterface [inline, slot]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::DBus::PropertiesInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00840.html0000644000175200001440000004257012000060453021631 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Contact Member List
This is the complete list of members for Tp::Contact, including all inherited members.
actualFeatures() const Tp::Contact
addedToGroup(const QString &group)Tp::Contact [signal]
addToGroup(const QString &group)Tp::Contact
alias() const Tp::Contact
aliasChanged(const QString &alias)Tp::Contact [signal]
augment(const Features &requestedFeatures, const QVariantMap &attributes)Tp::Contact [protected, virtual]
authorizePresencePublication(const QString &message=QString())Tp::Contact
avatarData() const Tp::Contact
avatarDataChanged(const Tp::AvatarData &avatarData)Tp::Contact [signal]
avatarToken() const Tp::Contact
avatarTokenChanged(const QString &avatarToken)Tp::Contact [signal]
block()Tp::Contact
blockAndReportAbuse()Tp::Contact
blockStatusChanged(bool blocked)Tp::Contact [signal]
capabilities() const Tp::Contact
capabilitiesChanged(const Tp::ContactCapabilities &caps)Tp::Contact [signal]
clientTypes() const Tp::Contact
clientTypesChanged(const QStringList &clientTypes)Tp::Contact [signal]
Contact(ContactManager *manager, const ReferencedHandles &handle, const Features &requestedFeatures, const QVariantMap &attributes)Tp::Contact [protected]
FeatureAddressesTp::Contact [static]
FeatureAliasTp::Contact [static]
FeatureAvatarDataTp::Contact [static]
FeatureAvatarTokenTp::Contact [static]
FeatureCapabilitiesTp::Contact [static]
FeatureClientTypesTp::Contact [static]
FeatureInfoTp::Contact [static]
FeatureLocationTp::Contact [static]
FeatureSimplePresenceTp::Contact [static]
groups() const Tp::Contact
handle() const Tp::Contact
id() const Tp::Contact
infoFields() const Tp::Contact
infoFieldsChanged(const Tp::Contact::InfoFields &infoFields)Tp::Contact [signal]
isAvatarTokenKnown() const Tp::Contact
isBlocked() const Tp::Contact
isContactInfoKnown() const Tp::Contact
isPublishCancelled() const Tp::Contact
isPublishStateKnown() const Tp::Contact
isSubscriptionRejected() const Tp::Contact
isSubscriptionStateKnown() const Tp::Contact
location() const Tp::Contact
locationUpdated(const Tp::LocationInfo &location)Tp::Contact [signal]
manager() const Tp::Contact
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
presence() const Tp::Contact
presenceChanged(const Tp::Presence &presence)Tp::Contact [signal]
PresenceState enum nameTp::Contact
PresenceStateAsk enum valueTp::Contact
PresenceStateNo enum valueTp::Contact
PresenceStateYes enum valueTp::Contact
propertyChanged(const QString &propertyName)Tp::Object [signal]
publishState() const Tp::Contact
publishStateChanged(Tp::Contact::PresenceState state, const QString &message)Tp::Contact [signal]
publishStateMessage() const Tp::Contact
RefCounted()Tp::RefCounted [inline]
refreshInfo()Tp::Contact
removedFromGroup(const QString &group)Tp::Contact [signal]
removeFromGroup(const QString &group)Tp::Contact
removePresencePublication(const QString &message=QString())Tp::Contact
removePresenceSubscription(const QString &message=QString())Tp::Contact
requestAvatarData()Tp::Contact
requestClientTypes()Tp::Contact
requestedFeatures() const Tp::Contact
requestInfo()Tp::Contact
requestPresenceSubscription(const QString &message=QString())Tp::Contact
subscriptionState() const Tp::Contact
subscriptionStateChanged(Tp::Contact::PresenceState state)Tp::Contact [signal]
unblock()Tp::Contact
uris() const Tp::Contact
vcardAddresses() const Tp::Contact
~Contact()Tp::Contact
~Object()Tp::Object [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01151.html0000644000175200001440000001712612000060453021624 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::DBus::PeerInterface Member List
This is the complete list of members for Tp::Client::DBus::PeerInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
GetMachineId(int timeout=-1)Tp::Client::DBus::PeerInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::DBus::PeerInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
PeerInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::DBus::PeerInterface
PeerInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::DBus::PeerInterface
PeerInterface(Tp::DBusProxy *proxy)Tp::Client::DBus::PeerInterface
PeerInterface(const Tp::AbstractInterface &mainInterface)Tp::Client::DBus::PeerInterface [explicit]
PeerInterface(const Tp::AbstractInterface &mainInterface, QObject *parent)Tp::Client::DBus::PeerInterface
Ping(int timeout=-1)Tp::Client::DBus::PeerInterface [inline, slot]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::DBus::PeerInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::DBus::PeerInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01012.html0000644000175200001440000000573412000060453021622 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingTextMessage Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00735.html0000644000175200001440000001612312000060453021627 0ustar00collabora-develusers00000000000000 Common debug support
   Home · All Classes · All Namespaces · Modules · Functions · Files
Common debug support

Typedefs

  • typedef void(* Tp::DebugCallback )(const QString &libraryName, const QString &libraryVersion, QtMsgType type, const QString &msg)

Functions


Detailed Description

TelepathyQt has an internal mechanism for displaying debugging output. It uses the Qt debugging subsystem, so if you want to redirect the messages, use qInstallMsgHandler() from <QtGlobal>.

Debugging output is divided into two categories: normal debug output and warning messages. Normal debug output results in the normal operation of the library, warning messages are output only when something goes wrong. Each category can be invidually enabled.


Typedef Documentation

 typedef QDebug (*DebugCallback)(const QString &libraryName,
                                 const QString &libraryVersion,
                                 QtMsgType type,
                                 const QString &msg)

Function Documentation

void Tp::enableDebug ( bool  enable)

Enable or disable normal debug output from the library. If the library is not compiled with debug support enabled, this has no effect; no output is produced in any case.

The default is false ie. no debug output.

Parameters:
enableWhether debug output should be enabled or not.
void Tp::enableWarnings ( bool  enable)

Enable or disable warning output from the library. If the library is not compiled with debug support enabled, this has no effect; no output is produced in any case.

The default is true ie. warning output enabled.

Parameters:
enableWhether warnings should be enabled or not.
void Tp::setDebugCallback ( DebugCallback  cb)

Set the callback method that will handle the debug output.

If cb is NULL this method will set the defaultDebugCallback instead. The default callback function will print the output using default Qt debug system.

Parameters:
cbA function pointer to the callback method or NULL.
See also:
DebugCallback


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00026.html0000644000175200001440000000645212000060453021624 0ustar00collabora-develusers00000000000000 Installation
   Home · All Classes · All Namespaces · Modules · Functions · Files
Installation

Installing from source on Linux

Requirements

Building Telepathy-Qt requires:

For the full set of regression tests to run, you'll also need:

and to build the example VoIP call UI (examples/call), you'll need:

Building also requires the cmake build system.

Building

After installing all dependencies, run:

   $ mkdir build; cd build
   $ cmake ..
   $ make
   $ make install 


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00217.html0000644000175200001440000005100712000060453021622 0ustar00collabora-develusers00000000000000 Tp::DBusProxyFactory Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The DBusProxyFactory class is a base class for all D-Bus proxy factory classes. Handles proxy caching and making them ready as appropriate. More...

#include <TelepathyQt/DBusProxyFactory>

Inherits Tp::RefCounted.

Inherited by Tp::ChannelFactory, and Tp::FixedFeatureFactory.

List of all members.

Public Member Functions

Protected Member Functions


Detailed Description

The DBusProxyFactory class is a base class for all D-Bus proxy factory classes. Handles proxy caching and making them ready as appropriate.


Constructor & Destructor Documentation

Class destructor.

Tp::DBusProxyFactory::DBusProxyFactory ( const QDBusConnection &  bus) [protected]

Construct a new DBusProxyFactory object.

The intention for storing the bus here is that it generally doesn't make sense to construct proxies for multiple buses in the same context. Allowing that would lead to more complex keying needs in the cache, as well.

Parameters:
busThe D-Bus bus connection for the objects constructed using this factory.

Member Function Documentation

const QDBusConnection & Tp::DBusProxyFactory::dbusConnection ( ) const

Return the D-Bus connection all of the proxies from this factory communicate with.

Returns:
A QDBusConnection object.
DBusProxyPtr Tp::DBusProxyFactory::cachedProxy ( const QString &  busName,
const QString &  objectPath 
) const [protected]

Return a cached proxy with the given busName and objectPath.

If a proxy has not been previously put into the cache by nowHaveProxy for those identifying attributes, or a previously cached proxy has since been invalidated and/or destroyed, a Null shared pointer is returned instead.

Parameters:
busNameBus name of the proxy to return.
objectPathObject path of the proxy to return.
Returns:
A pointer to the DBusProxy object, if any.
PendingReady * Tp::DBusProxyFactory::nowHaveProxy ( const DBusProxyPtr &  proxy) const [protected]

Should be called by subclasses when they have a proxy, be it a newly-constructed one or one from the cache.

This function will then do the rest of the factory work, including caching the proxy if it's not cached already, doing any initialPrepare()/readyPrepare() work if appropriate, and making the features from featuresFor() ready if they aren't already.

The returned PendingReady only finishes when the initialPrepare() and readyPrepare() operations for the proxy has completed, and the requested features have all been made ready (or found unable to be made ready). Note that this might have happened already before calling this function, if the proxy was not a newly created one, but was looked up from the cache. DBusProxyFactory handles the necessary subleties for this to work.

Access to the proxy instance is allowed as soon as this method returns through PendingReady::proxy(), if the proxy is needed in a context where it's not required to be ready.

Parameters:
proxyThe proxy which the factory should now make sure is prepared and made ready.
Returns:
A PendingReady operation which will emit PendingReady::finished when the proxy is usable.
QString Tp::DBusProxyFactory::finalBusNameFrom ( const QString &  uniqueOrWellKnown) const [protected, pure virtual]

"Normalize" a bus name according to the rules for the proxy class to construct.

Should be implemented by subclasses to transform the application-specified name uniqueOrWellKnown to whatever the proxy constructed for that name would have in its DBusProxy::busName() in the end.

For StatelessDBusProxy sub-classes this should mostly be an identity transform, while for StatefulDBusProxy sub-classes StatefulDBusProxy::uniqueNameFrom() or an equivalent thereof should be used in most cases.

If this is not implemented correctly, caching won't work properly.

Parameters:
uniqueOrWellKnownAny valid D-Bus service name, either unique or well-known.
Returns:
Whatever that name would turn to, when a proxy is constructed for it.

Implemented in Tp::ChannelFactory, Tp::AccountFactory, and Tp::ConnectionFactory.

PendingOperation * Tp::DBusProxyFactory::initialPrepare ( const DBusProxyPtr &  proxy) const [protected, virtual]

Allows subclasses to do arbitrary manipulation on the proxy before it is attempted to be made ready.

If a non-NULL operation is returned, the completion of that operation is waited for before starting to make the object ready whenever nowHaveProxy() is called the first time around for a given proxy.

Todo:
FIXME actually implement this... :) Currently just a vtable placeholder.
Parameters:
proxyThe just-constructed proxy to be prepared.
Returns:
NULL ie. nothing to do.
PendingOperation * Tp::DBusProxyFactory::readyPrepare ( const DBusProxyPtr &  proxy) const [protected, virtual]

Allows subclasses to do arbitrary manipulation on the proxy after it has been made ready.

If a non-NULL operation is returned, the completion of that operation is waited for before signaling that the object is ready for use after ReadyObject::becomeReady() for it has finished whenever nowHaveProxy() is called the first time around for a given proxy.

Todo:
FIXME actually implement this... :) Currently just a vtable placeholder.
Parameters:
proxyThe just-readified proxy to be prepared.
Returns:
NULL ie. nothing to do.
Features Tp::DBusProxyFactory::featuresFor ( const DBusProxyPtr &  proxy) const [protected, pure virtual]

Return the features which should be made ready on a given proxy.

This can be used to implement instance-specific features based on arbitrary criteria. FixedFeatureFactory implements this as a fixed set of features independent of the instance, however.

It should be noted that if an empty set of features is returned, ReadyObject::becomeReady() is not called at all. In other words, any "core feature" is not automatically added to the requested features. This is to enable setting a factory to not make proxies ready at all, which is useful eg. in the case of account editing UIs which aren't interested in the state of Connection objects for the Account objects they're editing.

Parameters:
proxyThe proxy on which the returned features will be made ready.
Returns:
A list of Feature objects.

Implemented in Tp::ChannelFactory, and Tp::FixedFeatureFactory.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00385.html0000644000175200001440000001230512000060453021626 0ustar00collabora-develusers00000000000000 Tp::SimpleStatusSpecMap Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::SimpleStatusSpecMap Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<QString, SimpleStatusSpec>, but needed to have a discrete type in the Qt type system.

A mapping describing possible statuses.


Constructor & Destructor Documentation

Tp::SimpleStatusSpecMap::SimpleStatusSpecMap ( const QMap< QString, SimpleStatusSpec > &  a) [inline]

Member Function Documentation

SimpleStatusSpecMap& Tp::SimpleStatusSpecMap::operator= ( const QMap< QString, SimpleStatusSpec > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00305.html0000644000175200001440000001353412000060453021623 0ustar00collabora-develusers00000000000000 Tp::PendingAccount Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingAccount Class Reference

The PendingAccount class represents the parameters of and the reply to an asynchronous account request. More...

#include <TelepathyQt/PendingAccount>

Inherits Tp::PendingOperation.

List of all members.

Public Member Functions


Detailed Description

The PendingAccount class represents the parameters of and the reply to an asynchronous account request.

Instances of this class cannot be constructed directly; the only way to get one is via AccountManager.

See Asynchronous Object Model


Constructor & Destructor Documentation

Class destructor.


Member Function Documentation

AccountManagerPtr Tp::PendingAccount::manager ( ) const

Return the account manager through which the request was made.

Returns:
A pointer to the AccountManager object.
AccountPtr Tp::PendingAccount::account ( ) const

Return the newly created account.

Returns:
A pointer to an Account object, or a null AccountPtr if an error occurred.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00378.html0000644000175200001440000001020012000060453021620 0ustar00collabora-develusers00000000000000 Tp::ServicePointInfo Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ServicePointInfo Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

Description of a service point and IDs which are mapped to it. An example Service Point info for GSM emergency calls (callable through "911" and "112") could look like: ServicePointInfo = ( Service_Point: ( Service_Point_Type: 1 (Emergency), Service_Point: "urn:service:sos" ), Service_IDs: [ "911", "112" ] )


Member Data Documentation

A list of IDs that are mapped to this service. This is provided as a convenience for the UIs, but the preferred method for requesting channel to a service is by setting the InitialServicePoint property in a channel request.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00425_source.html0000644000175200001440000000616512000060453023210 0ustar00collabora-develusers00000000000000 account-capability-filter.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
account-capability-filter.h
00001 
00023 #ifndef _TelepathyQt_account_capability_filter_h_HEADER_GUARD_
00024 #define _TelepathyQt_account_capability_filter_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/GenericCapabilityFilter>
00031 
00032 namespace Tp
00033 {
00034 
00035 typedef GenericCapabilityFilter<Account> AccountCapabilityFilter;
00036 
00037 } // Tp
00038 
00039 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00200.html0000644000175200001440000001170312000060453021611 0ustar00collabora-develusers00000000000000 Tp::ContactLocations Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactLocations Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<uint, QVariantMap>, but needed to have a discrete type in the Qt type system.

A map from contacts to their locations.


Constructor & Destructor Documentation

Tp::ContactLocations::ContactLocations ( const QMap< uint, QVariantMap > &  a) [inline]

Member Function Documentation

ContactLocations& Tp::ContactLocations::operator= ( const QMap< uint, QVariantMap > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00949.html0000644000175200001440000001226112000060453021635 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingStreamedMediaStreams Member List
This is the complete list of members for Tp::PendingStreamedMediaStreams, including all inherited members.
channel() const Tp::PendingStreamedMediaStreams
errorMessage() const Tp::PendingOperation
errorName() const Tp::PendingOperation
finished(Tp::PendingOperation *operation)Tp::PendingOperation [signal]
isError() const Tp::PendingOperation
isFinished() const Tp::PendingOperation
isValid() const Tp::PendingOperation
object() const Tp::PendingOperation [protected]
PendingOperation(const SharedPtr< RefCounted > &object)Tp::PendingOperation [protected]
setFinished()Tp::PendingOperation [protected, slot]
setFinishedWithError(const QString &name, const QString &message)Tp::PendingOperation [protected, slot]
setFinishedWithError(const QDBusError &error)Tp::PendingOperation [protected, slot]
streams() const Tp::PendingStreamedMediaStreams
~PendingOperation()Tp::PendingOperation [virtual]
~PendingStreamedMediaStreams()Tp::PendingStreamedMediaStreams


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00755.html0000644000175200001440000000462512000060453021635 0ustar00collabora-develusers00000000000000 functions
   Home · All Classes · All Namespaces · Modules · Functions · Files
functions

This file is part of TelepathyQt

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


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00269.html0000644000175200001440000001422312000060453021630 0ustar00collabora-develusers00000000000000 Tp::MediaStreamHandlerCodec Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MediaStreamHandlerCodec Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

Information about a codec supported by a client or a peer's client.


Member Data Documentation

The codec's payload identifier, as per RFC 3551 (static or dynamic)

The codec's name

Type of stream this codec supports

Sampling frequency in Hertz

Number of supported channels

Codec-specific optional parameters


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00640_source.html0000644000175200001440000001317112000060453023202 0ustar00collabora-develusers00000000000000 pending-contact-info.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
pending-contact-info.h
00001 
00023 #ifndef _TelepathyQt_pending_contact_info_h_HEADER_GUARD_
00024 #define _TelepathyQt_pending_contact_info_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Contact>
00031 #include <TelepathyQt/PendingOperation>
00032 #include <TelepathyQt/Types>
00033 
00034 class QDBusPendingCallWatcher;
00035 
00036 namespace Tp
00037 {
00038 
00039 class TP_QT_EXPORT PendingContactInfo : public PendingOperation
00040 {
00041     Q_OBJECT
00042     Q_DISABLE_COPY(PendingContactInfo);
00043 
00044 public:
00045     ~PendingContactInfo();
00046 
00047     ContactPtr contact() const;
00048 
00049     Contact::InfoFields infoFields() const;
00050 
00051 private Q_SLOTS:
00052     TP_QT_NO_EXPORT void onCallFinished(QDBusPendingCallWatcher *watcher);
00053 
00054 private:
00055     friend class Contact;
00056 
00057     TP_QT_NO_EXPORT PendingContactInfo(const ContactPtr &contact);
00058 
00059     struct Private;
00060     friend struct Private;
00061     Private *mPriv;
00062 };
00063 
00064 } // Tp
00065 
00066 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00423_source.html0000644000175200001440000002102212000060453023173 0ustar00collabora-develusers00000000000000 abstract-interface.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
abstract-interface.h
00001 
00023 #ifndef _TelepathyQt_abstract_interface_h_HEADER_GUARD_
00024 #define _TelepathyQt_abstract_interface_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Global>
00031 
00032 #include <QDBusAbstractInterface>
00033 
00034 namespace Tp
00035 {
00036 
00037 class DBusProxy;
00038 class PendingVariant;
00039 class PendingOperation;
00040 class PendingVariantMap;
00041 
00042 class TP_QT_EXPORT AbstractInterface : public QDBusAbstractInterface
00043 {
00044     Q_OBJECT
00045     Q_DISABLE_COPY(AbstractInterface)
00046 
00047 public:
00048     virtual ~AbstractInterface();
00049 
00050     bool isValid() const;
00051     QString invalidationReason() const;
00052     QString invalidationMessage() const;
00053 
00054     void setMonitorProperties(bool monitorProperties);
00055     bool isMonitoringProperties() const;
00056 
00057 Q_SIGNALS:
00058     void propertiesChanged(const QVariantMap &changedProperties,
00059             const QStringList &invalidatedProperties);
00060 
00061 protected Q_SLOTS:
00062     virtual void invalidate(Tp::DBusProxy *proxy,
00063             const QString &error, const QString &message);
00064 
00065 protected:
00066     AbstractInterface(DBusProxy *proxy, const QLatin1String &interface);
00067     AbstractInterface(const QString &busName, const QString &path,
00068             const QLatin1String &interface, const QDBusConnection &connection,
00069             QObject *parent);
00070 
00071     PendingVariant *internalRequestProperty(const QString &name) const;
00072     PendingOperation *internalSetProperty(const QString &name, const QVariant &newValue);
00073     PendingVariantMap *internalRequestAllProperties() const;
00074 
00075 private Q_SLOTS:
00076     TP_QT_NO_EXPORT void onPropertiesChanged(const QString &interface,
00077             const QVariantMap &changedProperties,
00078             const QStringList &invalidatedProperties);
00079 
00080 private:
00081     struct Private;
00082     friend struct Private;
00083     Private *mPriv;
00084 };
00085 
00086 } // Tp
00087 
00088 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00194.html0000644000175200001440000001137312000060453021630 0ustar00collabora-develusers00000000000000 Tp::ContactCapability Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactCapability Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

A struct (contact handle, channel type, generic flags, type-specific flags) representing a capability posessed by a contact, as returned by GetCapabilities on the Capabilities interface.


Member Data Documentation


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00785.html0000644000175200001440000002065712000060453021643 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::BaseConnectionManager Member List
This is the complete list of members for Tp::BaseConnectionManager, including all inherited members.
addProtocol(const BaseProtocolPtr &protocol)Tp::BaseConnectionManager
BaseConnectionManager(const QDBusConnection &dbusConnection, const QString &name)Tp::BaseConnectionManager [protected]
busName() const Tp::DBusService
connections() const Tp::BaseConnectionManager
create(const QString &name)Tp::BaseConnectionManager [inline, static]
create(const QString &name)Tp::BaseConnectionManager [inline, static]
create(const QDBusConnection &dbusConnection, const QString &name)Tp::BaseConnectionManager [inline, static]
create(const QDBusConnection &dbusConnection, const QString &name)Tp::BaseConnectionManager [inline, static]
dbusConnection() const Tp::DBusService
dbusObject() const Tp::DBusService
DBusService(const QDBusConnection &dbusConnection)Tp::DBusService
hasProtocol(const QString &protocolName) const Tp::BaseConnectionManager
immutableProperties() const Tp::BaseConnectionManager [virtual]
isRegistered() const Tp::DBusService
name() const Tp::BaseConnectionManager
newConnection(const BaseConnectionPtr &connection)Tp::BaseConnectionManager [signal]
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
objectPath() const Tp::DBusService
propertyChanged(const QString &propertyName)Tp::Object [signal]
protocol(const QString &protocolName) const Tp::BaseConnectionManager
protocols() const Tp::BaseConnectionManager
RefCounted()Tp::RefCounted [inline]
registerObject(DBusError *error=NULL)Tp::BaseConnectionManager
registerObject(const QString &busName, const QString &objectPath, DBusError *error)Tp::BaseConnectionManager [protected, virtual]
~BaseConnectionManager()Tp::BaseConnectionManager [virtual]
~DBusService()Tp::DBusService [virtual]
~Object()Tp::Object [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00817.html0000644000175200001440000000727712000060453021642 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Captcha Member List
This is the complete list of members for Tp::Captcha, including all inherited members.
Captcha()Tp::Captcha
Captcha(const Captcha &other)Tp::Captcha
data() const Tp::Captcha
id() const Tp::Captcha
isValid() const Tp::Captcha [inline]
label() const Tp::Captcha
mimeType() const Tp::Captcha
operator=(const Captcha &rhs)Tp::Captcha
type() const Tp::Captcha
~Captcha()Tp::Captcha


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00023.html0000644000175200001440000001207112000060453021613 0ustar00collabora-develusers00000000000000 roster/roster-widget.h
   Home · All Classes · All Namespaces · Modules · Functions · Files
roster/roster-widget.h
#ifndef _TelepathyQt_examples_roster_roster_widget_h_HEADER_GUARD_
#define _TelepathyQt_examples_roster_roster_widget_h_HEADER_GUARD_

#include <QWidget>

#include <TelepathyQt/Contact>
#include <TelepathyQt/Connection>

namespace Tp {
class Connection;
class PendingOperation;
}

class QAction;
class QDialog;
class QLineEdit;
class QListWidget;
class QListWidgetItem;
class QPushButton;

class RosterItem;

class RosterWidget : public QWidget
{
    Q_OBJECT

public:
    RosterWidget(QWidget *parent = 0);
    virtual ~RosterWidget();

    Tp::ConnectionPtr connection() const { return mConn; }
    void setConnection(const Tp::ConnectionPtr &conn);
    void unsetConnection();

    QListWidget *listWidget() const { return mList; }

protected:
    virtual RosterItem *createItemForContact(
            const Tp::ContactPtr &contact,
            bool &exists);
    virtual void updateActions(RosterItem *item) { }

private Q_SLOTS:
    void onContactManagerStateChanged(Tp::ContactListState state);
    void onPresencePublicationRequested(const Tp::Contacts &);
    void onItemSelectionChanged();
    void onAddButtonClicked();
    void onAuthActionTriggered(bool);
    void onDenyActionTriggered(bool);
    void onRemoveActionTriggered(bool);
    void onBlockActionTriggered(bool);
    void onContactRetrieved(Tp::PendingOperation *op);
    void updateActions();

private:
    void createActions();
    void setupGui();

    Tp::ConnectionPtr mConn;
    QAction *mAuthAction;
    QAction *mRemoveAction;
    QAction *mDenyAction;
    QAction *mBlockAction;
    QListWidget *mList;
    QPushButton *mAddBtn;
    QDialog *mAddDlg;
    QLineEdit *mAddDlgEdt;
};

#endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00199.html0000644000175200001440000001245512000060453021637 0ustar00collabora-develusers00000000000000 Tp::ContactInfoMap Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactInfoMap Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<uint, ContactInfoFieldList>, but needed to have a discrete type in the Qt type system.

A dictionary whose keys are contact handles and whose values are contact information..


Constructor & Destructor Documentation

Tp::ContactInfoMap::ContactInfoMap ( const QMap< uint, ContactInfoFieldList > &  a) [inline]

Member Function Documentation

ContactInfoMap& Tp::ContactInfoMap::operator= ( const QMap< uint, ContactInfoFieldList > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00838.html0000644000175200001440000006761512000060453021647 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactSearchChannel Member List
This is the complete list of members for Tp::ContactSearchChannel, including all inherited members.
actualFeatures() const Tp::ReadyObject [virtual]
availableSearchKeys() const Tp::ContactSearchChannel
baseInterface() const Tp::Channel [protected]
becomeReady(const Features &requestedFeatures=Features())Tp::ReadyObject [virtual]
busName() const Tp::DBusProxy
BypassInterfaceCheck enum valueTp::OptionalInterfaceFactory< Channel >
Channel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature)Tp::Channel [protected]
channelType() const Tp::Channel
CheckInterfaceSupported enum valueTp::OptionalInterfaceFactory< Channel >
conferenceChannelMerged(const Tp::ChannelPtr &channel)Tp::Channel [signal]
conferenceChannelRemoved(const Tp::ChannelPtr &channel, const Tp::Channel::GroupMemberChangeDetails &details)Tp::Channel [signal]
conferenceChannels() const Tp::Channel
conferenceInitialChannels() const Tp::Channel
conferenceInitialInviteeContacts() const Tp::Channel
conferenceMergeChannel(const ChannelPtr &channel)Tp::Channel
conferenceOriginalChannels() const Tp::Channel
conferenceSplitChannel()Tp::Channel
connection() const Tp::Channel
ContactSearchChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature)Tp::ContactSearchChannel [protected]
continueSearch()Tp::ContactSearchChannel
create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties)Tp::ContactSearchChannel [static]
dbusConnection() const Tp::DBusProxy
DBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::DBusProxy
FeatureConferenceInitialInviteeContactsTp::Channel [static]
FeatureCoreTp::ContactSearchChannel [static]
groupAddContacts(const QList< ContactPtr > &contacts, const QString &message=QString())Tp::Channel
groupAddSelfHandle()Tp::Channel [protected, slot]
groupAreHandleOwnersAvailable() const Tp::Channel
groupCanAcceptContactsWithMessage() const Tp::Channel
groupCanAddContacts() const Tp::Channel
groupCanAddContactsChanged(bool canAddContacts)Tp::Channel [signal]
groupCanAddContactsWithMessage() const Tp::Channel
groupCanDepartWithMessage() const Tp::Channel
groupCanRejectContactsWithMessage() const Tp::Channel
groupCanRemoveContacts() const Tp::Channel
groupCanRemoveContactsChanged(bool canRemoveContacts)Tp::Channel [signal]
groupCanRemoveContactsWithMessage() const Tp::Channel
groupCanRescindContacts() const Tp::Channel
groupCanRescindContactsChanged(bool canRescindContacts)Tp::Channel [signal]
groupCanRescindContactsWithMessage() const Tp::Channel
groupContacts(bool includeSelfContact=true) const Tp::Channel
groupFlags() const Tp::Channel
groupFlagsChanged(Tp::ChannelGroupFlags flags, Tp::ChannelGroupFlags added, Tp::ChannelGroupFlags removed)Tp::Channel [signal]
groupHandleOwners() const Tp::Channel
groupHandleOwnersChanged(const Tp::HandleOwnerMap &owners, const Tp::UIntList &added, const Tp::UIntList &removed)Tp::Channel [signal]
groupIsSelfContactTracked() const Tp::Channel
groupLocalPendingContactChangeInfo(const ContactPtr &contact) const Tp::Channel
groupLocalPendingContacts(bool includeSelfContact=true) const Tp::Channel
groupMembersChanged(const Tp::Contacts &groupMembersAdded, const Tp::Contacts &groupLocalPendingMembersAdded, const Tp::Contacts &groupRemotePendingMembersAdded, const Tp::Contacts &groupMembersRemoved, const Tp::Channel::GroupMemberChangeDetails &details)Tp::Channel [signal]
groupRemotePendingContacts(bool includeSelfContact=true) const Tp::Channel
groupRemoveContacts(const QList< ContactPtr > &contacts, const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone)Tp::Channel
groupSelfContact() const Tp::Channel
groupSelfContactChanged()Tp::Channel [signal]
groupSelfContactRemoveInfo() const Tp::Channel
groupSelfHandleIsLocalPending() const Tp::Channel [protected]
hasInterface(const QString &name) constTp::OptionalInterfaceFactory< Channel > [inline]
immutableProperties() const Tp::Channel
initiatorContact() const Tp::Channel
interface() constTp::OptionalInterfaceFactory< Channel > [inline]
interfaces() constTp::OptionalInterfaceFactory< Channel > [inline]
InterfaceSupportedChecking enum nameTp::OptionalInterfaceFactory< Channel >
invalidate(const QString &reason, const QString &message)Tp::DBusProxy [protected]
invalidate(const QDBusError &error)Tp::DBusProxy [protected]
invalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage)Tp::DBusProxy [signal]
invalidationMessage() const Tp::DBusProxy
invalidationReason() const Tp::DBusProxy
isConference() const Tp::Channel
isReady(const Features &features=Features()) const Tp::ReadyObject [virtual]
isRequested() const Tp::Channel
isValid() const Tp::DBusProxy
limit() const Tp::ContactSearchChannel
missingFeatures() const Tp::ReadyObject [virtual]
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
objectPath() const Tp::DBusProxy
optionalInterface(InterfaceSupportedChecking check=CheckInterfaceSupported) constTp::OptionalInterfaceFactory< Channel > [inline]
OptionalInterfaceFactory(Channel *this_)Tp::OptionalInterfaceFactory< Channel > [inline]
propertyChanged(const QString &propertyName)Tp::Object [signal]
readinessHelper() const Tp::ReadyObject [protected]
ReadyObject(RefCounted *object, const Feature &featureCore)Tp::ReadyObject
ReadyObject(DBusProxy *proxy, const Feature &featureCore)Tp::ReadyObject
RefCounted()Tp::RefCounted [inline]
requestClose()Tp::Channel
requestedFeatures() const Tp::ReadyObject [virtual]
requestLeave(const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone)Tp::Channel
search(const QString &searchKey, const QString &searchTerm)Tp::ContactSearchChannel
search(const ContactSearchMap &searchTerms)Tp::ContactSearchChannel
SearchResult typedefTp::ContactSearchChannel
searchResultReceived(const Tp::ContactSearchChannel::SearchResult &result)Tp::ContactSearchChannel [signal]
searchState() const Tp::ContactSearchChannel
searchStateChanged(Tp::ChannelContactSearchState state, const QString &errorName, const Tp::ContactSearchChannel::SearchStateChangeDetails &details)Tp::ContactSearchChannel [signal]
server() const Tp::ContactSearchChannel
setBusName(const QString &busName)Tp::DBusProxy [protected]
setInterfaces(const QStringList &interfaces)Tp::OptionalInterfaceFactory< Channel > [inline, protected]
StatefulDBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::StatefulDBusProxy
stopSearch()Tp::ContactSearchChannel
supportsConferenceMerging() const Tp::Channel
supportsConferenceSplitting() const Tp::Channel
targetContact() const Tp::Channel
targetHandle() const Tp::Channel
targetHandleType() const Tp::Channel
targetId() const Tp::Channel
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique)Tp::StatefulDBusProxy [static]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique, QString &error, QString &message)Tp::StatefulDBusProxy [static]
~Channel()Tp::Channel [virtual]
~ContactSearchChannel()Tp::ContactSearchChannel [virtual]
~DBusProxy()Tp::DBusProxy [virtual]
~Object()Tp::Object [virtual]
~OptionalInterfaceFactory()Tp::OptionalInterfaceFactory< Channel > [inline]
~ReadyObject()Tp::ReadyObject [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]
~StatefulDBusProxy()Tp::StatefulDBusProxy [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00684_source.html0000644000175200001440000004531512000060453023217 0ustar00collabora-develusers00000000000000 requestable-channel-class-spec.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
requestable-channel-class-spec.h
00001 
00023 #ifndef _TelepathyQt_requestable_channel_class_spec_h_HEADER_GUARD_
00024 #define _TelepathyQt_requestable_channel_class_spec_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Constants>
00031 #include <TelepathyQt/Types>
00032 
00033 namespace Tp
00034 {
00035 
00036 class TP_QT_EXPORT RequestableChannelClassSpec
00037 {
00038 public:
00039     RequestableChannelClassSpec();
00040     RequestableChannelClassSpec(const RequestableChannelClass &rcc);
00041     RequestableChannelClassSpec(const RequestableChannelClassSpec &other);
00042     ~RequestableChannelClassSpec();
00043 
00044     static RequestableChannelClassSpec textChat();
00045     static RequestableChannelClassSpec textChatroom();
00046 
00047     static RequestableChannelClassSpec audioCall();
00048     static RequestableChannelClassSpec audioCallWithVideoAllowed();
00049     static RequestableChannelClassSpec videoCall();
00050     static RequestableChannelClassSpec videoCallWithAudioAllowed();
00051 
00052     TP_QT_DEPRECATED static RequestableChannelClassSpec streamedMediaCall();
00053     TP_QT_DEPRECATED static RequestableChannelClassSpec streamedMediaAudioCall();
00054     TP_QT_DEPRECATED static RequestableChannelClassSpec streamedMediaVideoCall();
00055     TP_QT_DEPRECATED static RequestableChannelClassSpec streamedMediaVideoCallWithAudio();
00056 
00057     static RequestableChannelClassSpec fileTransfer();
00058 
00059     static RequestableChannelClassSpec conferenceTextChat();
00060     static RequestableChannelClassSpec conferenceTextChatWithInvitees();
00061     static RequestableChannelClassSpec conferenceTextChatroom();
00062     static RequestableChannelClassSpec conferenceTextChatroomWithInvitees();
00063     TP_QT_DEPRECATED static RequestableChannelClassSpec conferenceStreamedMediaCall();
00064     TP_QT_DEPRECATED static RequestableChannelClassSpec conferenceStreamedMediaCallWithInvitees();
00065 
00066     static RequestableChannelClassSpec contactSearch();
00067     static RequestableChannelClassSpec contactSearchWithSpecificServer();
00068     static RequestableChannelClassSpec contactSearchWithLimit();
00069     static RequestableChannelClassSpec contactSearchWithSpecificServerAndLimit();
00070 
00071     static RequestableChannelClassSpec dbusTube(const QString &serviceName = QString());
00072     static RequestableChannelClassSpec streamTube(const QString &service = QString());
00073 
00074     bool isValid() const { return mPriv.constData() != 0; }
00075 
00076     RequestableChannelClassSpec &operator=(const RequestableChannelClassSpec &other);
00077     bool operator==(const RequestableChannelClassSpec &other) const;
00078 
00079     bool supports(const RequestableChannelClassSpec &spec) const;
00080 
00081     QString channelType() const;
00082 
00083     bool hasTargetHandleType() const;
00084     HandleType targetHandleType() const;
00085 
00086     bool hasFixedProperty(const QString &name) const;
00087     QVariant fixedProperty(const QString &name) const;
00088     QVariantMap fixedProperties() const;
00089 
00090     bool allowsProperty(const QString &name) const;
00091     QStringList allowedProperties() const;
00092 
00093     RequestableChannelClass bareClass() const;
00094 
00095 private:
00096     struct Private;
00097     friend struct Private;
00098     QSharedDataPointer<Private> mPriv;
00099 };
00100 
00101 class TP_QT_EXPORT RequestableChannelClassSpecList :
00102                 public QList<RequestableChannelClassSpec>
00103 {
00104 public:
00105     RequestableChannelClassSpecList() { }
00106     RequestableChannelClassSpecList(const RequestableChannelClass &rcc)
00107     {
00108         append(RequestableChannelClassSpec(rcc));
00109     }
00110     RequestableChannelClassSpecList(const RequestableChannelClassList &rccs)
00111     {
00112         Q_FOREACH (const RequestableChannelClass &rcc, rccs) {
00113             append(RequestableChannelClassSpec(rcc));
00114         }
00115     }
00116     RequestableChannelClassSpecList(const RequestableChannelClassSpec &rccSpec)
00117     {
00118         append(rccSpec);
00119     }
00120     RequestableChannelClassSpecList(const QList<RequestableChannelClassSpec> &other)
00121         : QList<RequestableChannelClassSpec>(other)
00122     {
00123     }
00124 
00125     RequestableChannelClassList bareClasses() const
00126     {
00127         RequestableChannelClassList list;
00128         Q_FOREACH (const RequestableChannelClassSpec &rccSpec, *this) {
00129             list.append(rccSpec.bareClass());
00130         }
00131         return list;
00132     }
00133 };
00134 
00135 } // Tp
00136 
00137 Q_DECLARE_METATYPE(Tp::RequestableChannelClassSpec);
00138 Q_DECLARE_METATYPE(Tp::RequestableChannelClassSpecList);
00139 
00140 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00805.html0000644000175200001440000001205712000060453021627 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::FunctorCaller3< Functor, R, Arg1, Arg2, Arg3 > Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00228.html0000644000175200001440000001223112000060453021620 0ustar00collabora-develusers00000000000000 Tp::Features Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Features Class Reference

The Features class represents a list of Feature. More...

#include <TelepathyQt/Features>

List of all members.

Public Member Functions


Detailed Description

The Features class represents a list of Feature.


Constructor & Destructor Documentation

Tp::Features::Features ( ) [inline]
Tp::Features::Features ( const Feature feature) [inline]
Tp::Features::Features ( const QSet< Feature > &  s) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_0x69.html0000644000175200001440000010627712000060453023620 0ustar00collabora-develusers00000000000000 Class Members
   Home · All Classes · All Namespaces · Modules · Functions · Files
Here is a list of all class members with links to the classes they belong to:

- i -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00966.html0000644000175200001440000000505512000060453021637 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::CandidateInfo Member List
This is the complete list of members for Tp::CandidateInfo, including all inherited members.
CandidateInfo()Tp::CandidateInfo [inline]
CandidateInfo(const QMap< QString, QDBusVariant > &a)Tp::CandidateInfo [inline]
operator=(const QMap< QString, QDBusVariant > &a)Tp::CandidateInfo [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00871.html0000644000175200001440000000674212000060453021636 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MemberFunctor6< R, T, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 > Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00971.html0000644000175200001440000000510712000060453021631 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ChannelCallStateMap Member List
This is the complete list of members for Tp::ChannelCallStateMap, including all inherited members.
ChannelCallStateMap()Tp::ChannelCallStateMap [inline]
ChannelCallStateMap(const QMap< uint, uint > &a)Tp::ChannelCallStateMap [inline]
operator=(const QMap< uint, uint > &a)Tp::ChannelCallStateMap [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00249.html0000644000175200001440000001675112000060453021636 0ustar00collabora-develusers00000000000000 Tp::AbstractClientHandler::HandlerInfo Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AbstractClientHandler::HandlerInfo Class Reference

The AbstractClientHandler::HandlerInfo class provides a wrapper around the additional info about the channels passed to handleChannels(). More...

#include <TelepathyQt/AbstractClientHandler>

List of all members.

Public Member Functions


Detailed Description

The AbstractClientHandler::HandlerInfo class provides a wrapper around the additional info about the channels passed to handleChannels().

See also:
AbstractClientHandler

Constructor & Destructor Documentation

Tp::AbstractClientHandler::HandlerInfo::HandlerInfo ( const QVariantMap &  info = QVariantMap())

Member Function Documentation

AbstractClientHandler::HandlerInfo & Tp::AbstractClientHandler::HandlerInfo::operator= ( const HandlerInfo other)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions.html0000644000175200001440000006671212000060453023031 0ustar00collabora-develusers00000000000000 Class Members
   Home · All Classes · All Namespaces · Modules · Functions · Files
Here is a list of all class members with links to the classes they belong to:

- a -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_func_0x66.html0000644000175200001440000002454612000060453024626 0ustar00collabora-develusers00000000000000 Class Members - Functions
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- f -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00781.html0000644000175200001440000016141112000060453021631 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Account Member List
This is the complete list of members for Tp::Account, including all inherited members.
Account(const QDBusConnection &bus, const QString &busName, const QString &objectPath, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory, const Feature &coreFeature)Tp::Account [protected]
actualFeatures() const Tp::ReadyObject [virtual]
allowedPresenceStatuses(bool includeAllStatuses=false) const Tp::Account
automaticPresenceTp::Account
automaticPresence() const Tp::Account
automaticPresenceChanged(const Tp::Presence &automaticPresence)Tp::Account [signal]
avatarTp::Account
avatar() const Tp::Account
avatarChanged(const Tp::Avatar &avatar)Tp::Account [signal]
avatarRequirementsTp::Account
avatarRequirements() const Tp::Account
baseInterface() const Tp::Account [protected]
becomeReady(const Features &requestedFeatures=Features())Tp::ReadyObject [virtual]
busName() const Tp::DBusProxy
BypassInterfaceCheck enum valueTp::OptionalInterfaceFactory< Account >
capabilitiesTp::Account
capabilities() const Tp::Account
capabilitiesChanged(const Tp::ConnectionCapabilities &capabilities)Tp::Account [signal]
changingPresenceTp::Account
changingPresence(bool value)Tp::Account [signal]
channelFactory() const Tp::Account
CheckInterfaceSupported enum valueTp::OptionalInterfaceFactory< Account >
cmNameTp::Account
cmName() const Tp::Account
connectionTp::Account
connection() const Tp::Account
connectionChanged(const Tp::ConnectionPtr &connection)Tp::Account [signal]
connectionErrorTp::Account
connectionError() const Tp::Account
connectionErrorDetailsTp::Account
connectionErrorDetails() const Tp::Account
connectionFactory() const Tp::Account
connectionStatusTp::Account
connectionStatus() const Tp::Account
connectionStatusChanged(Tp::ConnectionStatus status)Tp::Account [signal]
connectionStatusReasonTp::Account
connectionStatusReason() const Tp::Account
connectsAutomaticallyTp::Account
connectsAutomatically() const Tp::Account
connectsAutomaticallyPropertyChanged(bool connectsAutomatically)Tp::Account [signal]
contactFactory() const Tp::Account
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())Tp::Account [static]
create(const QDBusConnection &bus, const QString &busName, const QString &objectPath, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory=ContactFactory::create())Tp::Account [static]
createAndHandleChannel(const QVariantMap &requestedProperties, const QDateTime &userActionTime)Tp::Account
createAndHandleConferenceStreamedMediaCall(const QList< ChannelPtr > &channels, const QStringList &initialInviteeContactsIdentifiers=QStringList(), const QDateTime &userActionTime=QDateTime::currentDateTime())Tp::Account
createAndHandleConferenceStreamedMediaCall(const QList< ChannelPtr > &channels, const QList< ContactPtr > &initialInviteeContacts=QList< ContactPtr >(), const QDateTime &userActionTime=QDateTime::currentDateTime())Tp::Account
createAndHandleConferenceTextChat(const QList< ChannelPtr > &channels, const QList< ContactPtr > &initialInviteeContacts=QList< ContactPtr >(), const QDateTime &userActionTime=QDateTime::currentDateTime())Tp::Account
createAndHandleConferenceTextChat(const QList< ChannelPtr > &channels, const QStringList &initialInviteeContactsIdentifiers=QStringList(), const QDateTime &userActionTime=QDateTime::currentDateTime())Tp::Account
createAndHandleConferenceTextChatroom(const QString &roomName, const QList< ChannelPtr > &channels, const QStringList &initialInviteeContactsIdentifiers=QStringList(), const QDateTime &userActionTime=QDateTime::currentDateTime())Tp::Account
createAndHandleConferenceTextChatroom(const QString &roomName, const QList< ChannelPtr > &channels, const QList< ContactPtr > &initialInviteeContacts=QList< ContactPtr >(), const QDateTime &userActionTime=QDateTime::currentDateTime())Tp::Account
createAndHandleContactSearch(const QString &server=QString(), uint limit=0, const QDateTime &userActionTime=QDateTime::currentDateTime())Tp::Account
createAndHandleDBusTube(const QString &contactIdentifier, const QString &serviceName, const QDateTime &userActionTime=QDateTime::currentDateTime())Tp::Account
createAndHandleDBusTube(const ContactPtr &contact, const QString &serviceName, const QDateTime &userActionTime=QDateTime::currentDateTime())Tp::Account
createAndHandleFileTransfer(const QString &contactIdentifier, const FileTransferChannelCreationProperties &properties, const QDateTime &userActionTime=QDateTime::currentDateTime())Tp::Account
createAndHandleFileTransfer(const ContactPtr &contact, const FileTransferChannelCreationProperties &properties, const QDateTime &userActionTime=QDateTime::currentDateTime())Tp::Account
createAndHandleStreamTube(const QString &contactIdentifier, const QString &service, const QDateTime &userActionTime=QDateTime::currentDateTime())Tp::Account
createAndHandleStreamTube(const ContactPtr &contact, const QString &service, const QDateTime &userActionTime=QDateTime::currentDateTime())Tp::Account
createChannel(const QVariantMap &requestedProperties, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints())Tp::Account
createConferenceStreamedMediaCall(const QList< ChannelPtr > &channels, const QStringList &initialInviteeContactsIdentifiers=QStringList(), const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints())Tp::Account
createConferenceStreamedMediaCall(const QList< ChannelPtr > &channels, const QList< ContactPtr > &initialInviteeContacts=QList< ContactPtr >(), const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints())Tp::Account
createConferenceTextChat(const QList< ChannelPtr > &channels, const QList< ContactPtr > &initialInviteeContacts=QList< ContactPtr >(), const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints())Tp::Account
createConferenceTextChat(const QList< ChannelPtr > &channels, const QStringList &initialInviteeContactsIdentifiers=QStringList(), const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints())Tp::Account
createConferenceTextChatroom(const QString &roomName, const QList< ChannelPtr > &channels, const QStringList &initialInviteeContactsIdentifiers=QStringList(), const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints())Tp::Account
createConferenceTextChatroom(const QString &roomName, const QList< ChannelPtr > &channels, const QList< ContactPtr > &initialInviteeContacts=QList< ContactPtr >(), const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints())Tp::Account
createContactSearch(const QString &server, uint limit=0, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints())Tp::Account
createDBusTube(const QString &contactIdentifier, const QString &serviceName, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints())Tp::Account
createDBusTube(const ContactPtr &contact, const QString &serviceName, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints())Tp::Account
createFileTransfer(const QString &contactIdentifier, const FileTransferChannelCreationProperties &properties, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints())Tp::Account
createFileTransfer(const ContactPtr &contact, const FileTransferChannelCreationProperties &properties, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints())Tp::Account
createStreamTube(const QString &contactIdentifier, const QString &service, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints())Tp::Account
createStreamTube(const ContactPtr &contact, const QString &service, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints())Tp::Account
currentPresenceTp::Account
currentPresence() const Tp::Account
currentPresenceChanged(const Tp::Presence &currentPresence)Tp::Account [signal]
dbusConnection() const Tp::DBusProxy
DBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::DBusProxy
dispatcherInterface() const Tp::Account [protected]
displayNameTp::Account
displayName() const Tp::Account
displayNameChanged(const QString &displayName)Tp::Account [signal]
enabledTp::Account
ensureAndHandleAudioCall(const QString &contactIdentifier, const QString &initialAudioContentName=QString(), const QDateTime &userActionTime=QDateTime::currentDateTime())Tp::Account
ensureAndHandleAudioCall(const ContactPtr &contact, const QString &initialAudioContentName=QString(), const QDateTime &userActionTime=QDateTime::currentDateTime())Tp::Account
ensureAndHandleAudioVideoCall(const QString &contactIdentifier, const QString &initialAudioContentName=QString(), const QString &initialVideoContentName=QString(), const QDateTime &userActionTime=QDateTime::currentDateTime())Tp::Account
ensureAndHandleAudioVideoCall(const ContactPtr &contact, const QString &initialAudioContentName=QString(), const QString &initialVideoContentName=QString(), const QDateTime &userActionTime=QDateTime::currentDateTime())Tp::Account
ensureAndHandleChannel(const QVariantMap &requestedProperties, const QDateTime &userActionTime)Tp::Account
ensureAndHandleStreamedMediaAudioCall(const QString &contactIdentifier, const QDateTime &userActionTime=QDateTime::currentDateTime())Tp::Account
ensureAndHandleStreamedMediaAudioCall(const ContactPtr &contact, const QDateTime &userActionTime=QDateTime::currentDateTime())Tp::Account
ensureAndHandleStreamedMediaCall(const QString &contactIdentifier, const QDateTime &userActionTime=QDateTime::currentDateTime())Tp::Account
ensureAndHandleStreamedMediaCall(const ContactPtr &contact, const QDateTime &userActionTime=QDateTime::currentDateTime())Tp::Account
ensureAndHandleStreamedMediaVideoCall(const QString &contactIdentifier, bool withAudio=true, const QDateTime &userActionTime=QDateTime::currentDateTime())Tp::Account
ensureAndHandleStreamedMediaVideoCall(const ContactPtr &contact, bool withAudio=true, const QDateTime &userActionTime=QDateTime::currentDateTime())Tp::Account
ensureAndHandleTextChat(const QString &contactIdentifier, const QDateTime &userActionTime=QDateTime::currentDateTime())Tp::Account
ensureAndHandleTextChat(const ContactPtr &contact, const QDateTime &userActionTime=QDateTime::currentDateTime())Tp::Account
ensureAndHandleTextChatroom(const QString &roomName, const QDateTime &userActionTime=QDateTime::currentDateTime())Tp::Account
ensureAndHandleVideoCall(const QString &contactIdentifier, const QString &initialVideoContentName=QString(), const QDateTime &userActionTime=QDateTime::currentDateTime())Tp::Account
ensureAndHandleVideoCall(const ContactPtr &contact, const QString &initialVideoContentName=QString(), const QDateTime &userActionTime=QDateTime::currentDateTime())Tp::Account
ensureAudioCall(const QString &contactIdentifier, const QString &initialAudioContentName=QString(), const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints())Tp::Account
ensureAudioCall(const ContactPtr &contact, const QString &initialAudioContentName=QString(), const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints())Tp::Account
ensureAudioVideoCall(const QString &contactIdentifier, const QString &initialAudioContentName=QString(), const QString &initialVideoContentName=QString(), const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints())Tp::Account
ensureAudioVideoCall(const ContactPtr &contact, const QString &initialAudioContentName=QString(), const QString &initialVideoContentName=QString(), const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints())Tp::Account
ensureChannel(const QVariantMap &requestedProperties, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints())Tp::Account
ensureStreamedMediaAudioCall(const QString &contactIdentifier, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints())Tp::Account
ensureStreamedMediaAudioCall(const ContactPtr &contact, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints())Tp::Account
ensureStreamedMediaCall(const QString &contactIdentifier, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints())Tp::Account
ensureStreamedMediaCall(const ContactPtr &contact, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints())Tp::Account
ensureStreamedMediaVideoCall(const QString &contactIdentifier, bool withAudio=true, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints())Tp::Account
ensureStreamedMediaVideoCall(const ContactPtr &contact, bool withAudio=false, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints())Tp::Account
ensureTextChat(const QString &contactIdentifier, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints())Tp::Account
ensureTextChat(const ContactPtr &contact, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints())Tp::Account
ensureTextChatroom(const QString &roomName, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints())Tp::Account
ensureVideoCall(const QString &contactIdentifier, const QString &initialVideoContentName=QString(), const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints())Tp::Account
ensureVideoCall(const ContactPtr &contact, const QString &initialVideoContentName=QString(), const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints())Tp::Account
FeatureAvatarTp::Account [static]
FeatureCapabilitiesTp::Account [static]
FeatureCoreTp::Account [static]
FeatureProfileTp::Account [static]
FeatureProtocolInfoTp::Account [static]
firstOnline()Tp::Account [signal]
hasBeenOnlineTp::Account
hasBeenOnline() const Tp::Account
hasInterface(const QString &name) constTp::OptionalInterfaceFactory< Account > [inline]
iconNameTp::Account
iconName() const Tp::Account
iconNameChanged(const QString &iconName)Tp::Account [signal]
interface() constTp::OptionalInterfaceFactory< Account > [inline]
interfaces() constTp::OptionalInterfaceFactory< Account > [inline]
InterfaceSupportedChecking enum nameTp::OptionalInterfaceFactory< Account >
invalidate(const QString &reason, const QString &message)Tp::DBusProxy [protected]
invalidate(const QDBusError &error)Tp::DBusProxy [protected]
invalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage)Tp::DBusProxy [signal]
invalidationMessage() const Tp::DBusProxy
invalidationReason() const Tp::DBusProxy
isChangingPresence() const Tp::Account
isEnabled() const Tp::Account
isOnline() const Tp::Account
isReady(const Features &features=Features()) const Tp::ReadyObject [virtual]
isValid() const Tp::DBusProxy
isValidAccount() const Tp::Account
maxPresenceStatusMessageLength() const Tp::Account
missingFeatures() const Tp::ReadyObject [virtual]
nicknameTp::Account
nickname() const Tp::Account
nicknameChanged(const QString &nickname)Tp::Account [signal]
normalizedNameTp::Account
normalizedName() const Tp::Account
normalizedNameChanged(const QString &normalizedName)Tp::Account [signal]
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
objectPath() const Tp::DBusProxy
onlineTp::Account
onlinenessChanged(bool online)Tp::Account [signal]
optionalInterface(InterfaceSupportedChecking check=CheckInterfaceSupported) constTp::OptionalInterfaceFactory< Account > [inline]
OptionalInterfaceFactory(Account *this_)Tp::OptionalInterfaceFactory< Account > [inline]
parametersTp::Account
parameters() const Tp::Account
parametersChanged(const QVariantMap &parameters)Tp::Account [signal]
profileTp::Account
profile() const Tp::Account
profileChanged(const Tp::ProfilePtr &profile)Tp::Account [signal]
propertyChanged(const QString &propertyName)Tp::Object [signal]
protocolInfoTp::Account
protocolInfo() const Tp::Account
protocolNameTp::Account
protocolName() const Tp::Account
readinessHelper() const Tp::ReadyObject [protected]
ReadyObject(RefCounted *object, const Feature &featureCore)Tp::ReadyObject
ReadyObject(DBusProxy *proxy, const Feature &featureCore)Tp::ReadyObject
reconnect()Tp::Account
RefCounted()Tp::RefCounted [inline]
remove()Tp::Account
removed()Tp::Account [signal]
requestedFeatures() const Tp::ReadyObject [virtual]
requestedPresenceTp::Account
requestedPresence() const Tp::Account
requestedPresenceChanged(const Tp::Presence &requestedPresence)Tp::Account [signal]
requestsSucceedWithChannel() const Tp::Account
serviceNameTp::Account
serviceName() const Tp::Account
serviceNameChanged(const QString &serviceName)Tp::Account [signal]
setAutomaticPresence(const Presence &presence)Tp::Account
setAvatar(const Avatar &avatar)Tp::Account
setBusName(const QString &busName)Tp::DBusProxy [protected]
setConnectsAutomatically(bool value)Tp::Account
setDisplayName(const QString &value)Tp::Account
setEnabled(bool value)Tp::Account
setIconName(const QString &value)Tp::Account
setInterfaces(const QStringList &interfaces)Tp::OptionalInterfaceFactory< Account > [inline, protected]
setNickname(const QString &value)Tp::Account
setRequestedPresence(const Presence &presence)Tp::Account
setServiceName(const QString &value)Tp::Account
stateChanged(bool state)Tp::Account [signal]
StatelessDBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::StatelessDBusProxy
supportsRequestHints() const Tp::Account
uniqueIdentifierTp::Account
uniqueIdentifier() const Tp::Account
updateParameters(const QVariantMap &set, const QStringList &unset)Tp::Account
validTp::Account
validityChanged(bool validity)Tp::Account [signal]
~Account()Tp::Account [virtual]
~DBusProxy()Tp::DBusProxy [virtual]
~Object()Tp::Object [virtual]
~OptionalInterfaceFactory()Tp::OptionalInterfaceFactory< Account > [inline]
~ReadyObject()Tp::ReadyObject [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]
~StatelessDBusProxy()Tp::StatelessDBusProxy [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00169.html0000644000175200001440000005115512000060453021634 0ustar00collabora-develusers00000000000000 Tp::Client::ConnectionInterfaceBalanceInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceBalanceInterface Class Reference

#include <TelepathyQt/Connection>

Inherits Tp::AbstractInterface.

List of all members.

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Connection.Interface.Balance".


Constructor & Destructor Documentation

Tp::Client::ConnectionInterfaceBalanceInterface::ConnectionInterfaceBalanceInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceBalanceInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ConnectionInterfaceBalanceInterface::ConnectionInterfaceBalanceInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceBalanceInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ConnectionInterfaceBalanceInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ConnectionInterfaceBalanceInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ConnectionInterfaceBalanceInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Connection.Interface.Balance", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property AccountBalance of type Tp::CurrencyAmount.

The user's balance on the account corresponding to this ConnectionInterface . A negative amount may be possible on some services, and indicates that the user owes money to the service provider.

On initial connection, this property may have an unknown value, represented by Amount = 0, Scale = 2**32 - 1 (the largest possible 32-bit unsigned integer) and Currency = "".

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property ManageCreditURI of type QString.

A URI the user may visit via the web browser to manage and top-up their account balance. This property is not guaranteed to be well-defined until the connection becomes Connected; there is no change notification. Different protocols and even servers or gateways (e.g. SIP and XMPP PSTN gateways) will have a different website used to manage a user's account balance. This property enables the client to provide that to the user. A Connection Manager MAY set this itself (because it is static or discoverable), or expose it as a connection parameter.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.

Represents the signal BalanceChanged on the remote object.

Emitted when the user's balance has changed.

Parameters:
balance

The new value of the AccountBalance property.

void Tp::Client::ConnectionInterfaceBalanceInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00608_source.html0000644000175200001440000002440512000060453023210 0ustar00collabora-develusers00000000000000 message-content-part.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
message-content-part.h
00001 
00023 #ifndef _TelepathyQt_message_content_part_h_HEADER_GUARD_
00024 #define _TelepathyQt_message_content_part_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Constants>
00031 #include <TelepathyQt/Types>
00032 
00033 namespace Tp
00034 {
00035 
00036 class TP_QT_EXPORT MessageContentPart
00037 {
00038 public:
00039     MessageContentPart();
00040     MessageContentPart(const MessagePart &mp);
00041     MessageContentPart(const MessageContentPart &other);
00042     ~MessageContentPart();
00043 
00044     bool isValid() const { return mPriv.constData() != 0; }
00045 
00046     MessageContentPart &operator=(const MessageContentPart &other);
00047     bool operator==(const MessageContentPart &other) const;
00048 
00049     MessagePart barePart() const;
00050 
00051 private:
00052     struct Private;
00053     friend struct Private;
00054     QSharedDataPointer<Private> mPriv;
00055 };
00056 
00057 class TP_QT_EXPORT MessageContentPartList :
00058                 public QList<MessageContentPart>
00059 {
00060 public:
00061     MessageContentPartList() { }
00062     MessageContentPartList(const MessagePart &mp)
00063     {
00064         append(MessageContentPart(mp));
00065     }
00066     MessageContentPartList(const MessagePartList &mps)
00067     {
00068         Q_FOREACH (const MessagePart &mp, mps) {
00069             append(MessageContentPart(mp));
00070         }
00071     }
00072     MessageContentPartList(const MessageContentPart &mcp)
00073     {
00074         append(mcp);
00075     }
00076     MessageContentPartList(const QList<MessageContentPart> &other)
00077         : QList<MessageContentPart>(other)
00078     {
00079     }
00080 
00081     MessagePartList bareParts() const
00082     {
00083         MessagePartList list;
00084         Q_FOREACH (const MessageContentPart &mcp, *this) {
00085             list.append(mcp.barePart());
00086         }
00087         return list;
00088     }
00089 };
00090 
00091 } // Tp
00092 
00093 Q_DECLARE_METATYPE(Tp::MessageContentPart);
00094 Q_DECLARE_METATYPE(Tp::MessageContentPartList);
00095 
00096 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00266.html0000644000175200001440000000732512000060453021632 0ustar00collabora-develusers00000000000000 Tp::MediaSessionHandlerInfo Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MediaSessionHandlerInfo Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

A struct representing a active session handler.


Member Data Documentation

The object path of the session handler, which is on the same bus name as the channel.

The media session's type


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00063.html0000644000175200001440000000646212000060453021626 0ustar00collabora-develusers00000000000000 Tp::BaseFunctor Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::BaseFunctor Struct Reference


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01067.html0000644000175200001440000002357012000060453021632 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface Member List
This is the complete list of members for Tp::Client::CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface
CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface
CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface(Tp::DBusProxy *proxy)Tp::Client::CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface
CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface(const Tp::Client::CallContentMediaDescriptionInterface &mainInterface)Tp::Client::CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface [explicit]
CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface(const Tp::Client::CallContentMediaDescriptionInterface &mainInterface, QObject *parent)Tp::Client::CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface [inline]
requestPropertyDLRRMaxSize() const Tp::Client::CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface [inline]
requestPropertyDuplicateRLEMaxSize() const Tp::Client::CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface [inline]
requestPropertyEnableMetrics() const Tp::Client::CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface [inline]
requestPropertyLossRLEMaxSize() const Tp::Client::CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface [inline]
requestPropertyPacketReceiptTimesMaxSize() const Tp::Client::CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface [inline]
requestPropertyRTTMode() const Tp::Client::CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface [inline]
requestPropertyStatisticsFlags() const Tp::Client::CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00122.html0000644000175200001440000011752212000060453021622 0ustar00collabora-develusers00000000000000 Tp::Client::ChannelInterfaceConferenceInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelInterfaceConferenceInterface Class Reference

#include <TelepathyQt/Channel>

Inherits Tp::AbstractInterface.

List of all members.

Signals

  • void ChannelMerged (const QDBusObjectPath &channel, uint channelSpecificHandle, const QVariantMap &properties)
  • void ChannelRemoved (const QDBusObjectPath &channel, const QVariantMap &details)

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Channel.Interface.Conference".


Constructor & Destructor Documentation

Tp::Client::ChannelInterfaceConferenceInterface::ChannelInterfaceConferenceInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfaceConferenceInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ChannelInterfaceConferenceInterface::ChannelInterfaceConferenceInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfaceConferenceInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ChannelInterfaceConferenceInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ChannelInterfaceConferenceInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ChannelInterfaceConferenceInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Channel.Interface.Conference", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property Channels of type Tp::ObjectPathList.

The individual ChannelInterface s that are continued by this conference, which have the same ChannelInterface::ChannelType as this one, but with ChannelInterface::TargetHandleType = CONTACT.

This property MUST NOT be requestable; instead, the InitialChannels property may be specified when requesting a channel.

This is consistent with requesting InitialInviteeHandles and InitialInviteeIDs , rather than requesting ChannelInterfaceGroupInterface::Members and some hypothetical ID version of that property.

Change notification is via the ChannelMerged() and ChannelRemoved() signals.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property InitialChannels of type Tp::ObjectPathList.

The initial value of Channels .

This property SHOULD be requestable. Omitting it from a request is equivalent to providing it with an empty list as value. Requests where its value has at least two channel paths SHOULD be expected to succeed on any implementation of this interface. If InitialInviteeHandles and InitialInviteeIDs are Allowed_Properties in ConnectionInterfaceRequestsInterface::RequestableChannelClasses , then requests with zero or one channel paths SHOULD also succeed; otherwise, clients SHOULD NOT make requests with zero or one paths for this property.

In GSM, a pair of calls can be merged into a conference, but you can't start a conference call from zero or one existing calls. In XMPP and MSN, you can create a new chatroom, or upgrade one 1-1 channel into a chatroom; however, on these protocols, it is also possible to fake GSM-style merging by upgrading the first channel, then inviting the targets of all the other channels into it.

If possible, the Channels ' states SHOULD NOT be altered by merging them into a conference. However, depending on the protocol, the Channels MAY be placed in a "frozen" state by placing them in this property's value or by calling org.freedesktop.Telepathy.Channel.Interface.MergeableConference.DRAFT.Merge on them.

In Jingle, nothing special will happen to merged calls. UIs MAY automatically place calls on hold before merging them, if that is the desired behaviour; this SHOULD always work. Not doing an implicit hold/unhold seems to preserve least-astonishment.

In GSM, the calls that are merged go into a state similar to Hold, but they cannot be unheld, only split from the conference call using org.freedesktop.Telepathy.Channel.Interface.Splittable.DRAFT.Split .

Depending on the protocol, it might be signalled to remote users that this channel is a continuation of all the requested channels, or that it is only a continuation of the first channel in the list.

In MSN, the conference steals the underlying switchboard (protocol construct) from one of its component channels, so the conference appears to remote users to be a continuation of that channel and no other. The connection manager has to make some arbitrary choice, so we arbitrarily mandate that it SHOULD choose the first channel in the list as the one to continue.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property InitialInviteeHandles of type Tp::UIntList.

A list of additional contacts invited to this conference when it was created.

If it is possible to invite new contacts when creating a conference (as opposed to merging several channels into one new conference channel), this property SHOULD be requestable, and appear in the allowed properties in ConnectionInterfaceRequestsInterface::RequestableChannelClasses . Otherwise, this property SHOULD NOT be requestable, and its value SHOULD always be the empty list.

On GSM you have to place a 1-1 call before you can merge it into a conference; on the other hand, you can invite new contacts to XMPP Muji calls and XMPP/MSN/Skype ad-hoc chat rooms without starting a 1-1 channel with them first.

If included in a request, the given contacts are automatically invited into the new channel, as if they had been added with ChannelInterfaceGroupInterface::AddMembers() (InitialInviteeHandles, InvitationMessage ) immediately after the channel was created.

This is a simple convenience API for the common case that a UI upgrades a 1-1 chat to a multi-user chat solely in order to invite someone else to participate.

If the local user was not the initiator of this channel, the ChannelInterfaceGroupInterface::SelfHandle SHOULD appear in the value of this property, together with any other contacts invited at the same time (if that information is known).

InitialInviteeHandles, InitialInviteeIDs and InitialChannels MAY be combined in a single request.

For example, if you have a 1-1 channel C1 with Rob, and you want to invite Sjoerd to join the discussion, you can do so by requesting a channel with InitialChannels=[C1] and InitialInviteeHandles=[sjoerd], or InitialChannels=[C1] and InitialInviteeIDs=["sjoerd@example.com"].

If a request includes some combination of InitialInviteeHandles, InitialInviteeIDs and InitialChannels, then the value of InitialInviteeHandles on the resulting channel SHOULD be the union of the handles from InitialInviteeHandles, the handles corresponding to the InitialInviteeIDs, and the target handles of the InitialChannels, with any duplicate handles removed. Because this property is immutable, its value SHOULD be computed before the channel is announced via the NewChannels signal.

This simplifies identification of new channels in clients - they only have to look at one of the properties, not both. For example, after either of the requests mentioned above, the NewChannels signal would announce the channel with InitialChannels=[C1], InitialInviteeHandles=[rob, sjoerd], and InitialInviteeIDs=["rob@example.net", "sjoerd.example.com"].

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property InitialInviteeIDs of type QStringList.

A list of additional contacts invited to this conference when it was created.

This property SHOULD be requestable if and only if InitialInviteeHandles is requestable. Its semantics are the same, except that it takes a list of the string representations of contact handles; invitations are sent to any contact present in either or both of these properties.

When a channel is created, the values of InitialInviteeHandles and InitialInviteeIDs MUST correspond to each other. In particular, this means that the value of InitialInviteeIDs will include the TargetID of each channel in InitialChannels, and the ID corresponding to each handle in InitialInviteeHandles.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property InvitationMessage of type QString.

The message that was sent to the InitialInviteeHandles when they were invited.

This property SHOULD be requestable, and appear in the allowed properties in ConnectionInterfaceRequestsInterface::RequestableChannelClasses , in protocols where invitations can have an accompanying text message.

This allows invitations with a message to be sent when using InitialInviteeHandles or InitialInviteeIDs .

If the local user was not the initiator of this channel, the message with which they were invited (if any) SHOULD appear in the value of this property.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property OriginalChannels of type Tp::ChannelOriginatorMap.

On GSM conference calls, it is possible to have the same phone number in a conference twice; for instance, it could be the number of a corporate switchboard. This is represented using channel-specific handles; whether or not a channel uses channel-specific handles is reported in ChannelInterfaceGroupInterface::GroupFlags . The ChannelInterfaceGroupInterface::HandleOwners property specifies the mapping from opaque channel-specific handles to actual numbers; this property specifies the original 1-1 channel corresponding to each channel-specific handle in the conference.

In protocols where this situation cannot arise, such as XMPP, this property MAY remain empty.

For example, consider this situation:

  1. Place a call (with path /call/to/simon) to the contact +441234567890 (which is assigned the handle h, say), and ask to be put through to Simon McVittie;
  2. Put that call on hold;
  3. Place another call (with path /call/to/jonny) to +441234567890, and ask to be put through to Jonny Lamb;
  4. Request a new channel with InitialChannels : ['/call/to/simon', '/call/to/jonny'].

The new channel will have the following properties, for some handles s and j:

{
... ChannelInterfaceGroupInterface::GroupFlags : Channel_Specific_Handles | (other flags),
... ChannelInterfaceGroupInterface::Members : [self_handle, s, j],
... ChannelInterfaceGroupInterface::HandleOwners : { s: h, j: h },
... InitialChannels : ['/call/to/simon', '/call/to/jonny'],
... Channels : ['/call/to/simon', '/call/to/jonny'],
... OriginalChannels : { s: '/call/to/simon', j: '/call/to/jonny' },
# ...standard properties like ChannelType: Group elided...
}

Change notification is via the ChannelMerged() and ChannelRemoved() signals: if Channel_Specific_Handle in the former is non-zero, this property SHOULD be updated to map that handle to the merged channel's path.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
void Tp::Client::ChannelInterfaceConferenceInterface::ChannelMerged ( const QDBusObjectPath &  channel,
uint  channelSpecificHandle,
const QVariantMap &  properties 
) [signal]

Represents the signal ChannelMerged on the remote object.

Emitted when a new channel is added to the value of Channels .

Parameters:
channelThe channel that was added to Channels.
channelSpecificHandleA new channel-specific handle for the TargetHandle of Channel, as will appear in OriginalChannels, or 0 if a global handle is used for Channel's TargetHandle on the Group interface of this channel.
propertiesChannel's immutable properties.
void Tp::Client::ChannelInterfaceConferenceInterface::ChannelRemoved ( const QDBusObjectPath &  channel,
const QVariantMap &  details 
) [signal]

Represents the signal ChannelRemoved on the remote object.

Emitted when a channel is removed from the value of Channels , either because it closed or because it was split using the org.freedesktop.Telepathy.Channel.Interface.Splittable.DRAFT.Split method.

If a channel is removed because it was closed, ChannelInterface::Closed() should be emitted before this signal.

Parameters:
channelThe channel that was removed from Channels.
details Additional information about the removal, which may include the same well-known keys as the Details argument of ChannelInterfaceGroupInterface::MembersChangedDetailed() , with the same semantics.
void Tp::Client::ChannelInterfaceConferenceInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00393.html0000644000175200001440000000727512000060453021637 0ustar00collabora-develusers00000000000000 Tp::SocketNetmaskIPv6 Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::SocketNetmaskIPv6 Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

An IPv6 network or subnet.


Member Data Documentation

An IPv6 address literal as specified by RFC2373 section 2.2, e.g. "2001:DB8::8:800:200C:4171".

The number of leading bits of the address that must match, for this netmask to be considered to match an address.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00748.html0000644000175200001440000000627412000060453021641 0ustar00collabora-develusers00000000000000 Connection manager service implementation
   Home · All Classes · All Namespaces · Modules · Functions · Files
Connection manager service implementation

Classes


Detailed Description

Classes to implement Telepathy ConnectionManager objects and their optional interfaces.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00322.html0000644000175200001440000002041412000060453021615 0ustar00collabora-develusers00000000000000 Tp::PendingSendMessage Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingSendMessage Class Reference

The PendingSendMessage class represents the parameters of and the reply to an asynchronous message send request. More...

#include <TelepathyQt/PendingSendMessage>

Inherits Tp::PendingOperation.

List of all members.

Public Member Functions


Detailed Description

The PendingSendMessage class represents the parameters of and the reply to an asynchronous message send request.

See Asynchronous Object Model


Constructor & Destructor Documentation


Member Function Documentation

TextChannelPtr Tp::PendingSendMessage::channel ( ) const

Return the channel used to send the message if this instance was created using TextChannel. If it was created using ContactMessenger, return a null TextChannelPtr.

Returns:
A pointer to the TextChannel object, or a null TextChannelPtr if created using ContactMessenger.
ContactMessengerPtr Tp::PendingSendMessage::messenger ( ) const

Return the contact messenger used to send the message if this instance was created using ContactMessenger. If it was created using TextChannel, return a null ContactMessengerPtr.

Returns:
A pointer to the ContactMessenger object, or a null ContactMessengerPtr if created using TextChannel.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00932.html0000644000175200001440000001150012000060453021620 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::WeakPtr< T > Member List
This is the complete list of members for Tp::WeakPtr< T >, including all inherited members.
isNull() const Tp::WeakPtr< T > [inline]
operator UnspecifiedBoolType() const Tp::WeakPtr< T > [inline]
operator!() const Tp::WeakPtr< T > [inline]
operator=(const WeakPtr< T > &o)Tp::WeakPtr< T > [inline]
operator=(const SharedPtr< T > &o)Tp::WeakPtr< T > [inline]
qHash(const WeakPtr< T > &ptr)Tp::WeakPtr< T > [friend]
swap(WeakPtr< T > &o)Tp::WeakPtr< T > [inline]
toStrongRef() const Tp::WeakPtr< T > [inline]
WeakPtr()Tp::WeakPtr< T > [inline]
WeakPtr(T *d)Tp::WeakPtr< T > [inline, explicit]
WeakPtr(const WeakPtr< T > &o)Tp::WeakPtr< T > [inline]
WeakPtr(const SharedPtr< T > &o)Tp::WeakPtr< T > [inline]
~WeakPtr()Tp::WeakPtr< T > [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00890.html0000644000175200001440000000773512000060453021642 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::OrFilter< T > Member List
This is the complete list of members for Tp::OrFilter< T >, including all inherited members.
create(const QList< SharedPtr< const Filter< T > > > &filters=QList< SharedPtr< const Filter< T > > >())Tp::OrFilter< T > [inline, static]
Filter()Tp::Filter< T > [inline, protected]
filters() const Tp::OrFilter< T > [inline]
isValid() const Tp::OrFilter< T > [inline, virtual]
matches(const SharedPtr< T > &t) const Tp::OrFilter< T > [inline, virtual]
RefCounted()Tp::RefCounted [inline]
~Filter()Tp::Filter< T > [inline, virtual]
~OrFilter()Tp::OrFilter< T > [inline, virtual]
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00870.html0000644000175200001440000000627212000060453021633 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PtrFunctor6< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 > Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00802.html0000644000175200001440000001101712000060453021617 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Callback1< R, Arg1 > Member List
This is the complete list of members for Tp::Callback1< R, Arg1 >, including all inherited members.
BaseCallback()Tp::BaseCallback [inline]
BaseCallback(AbstractFunctorCaller *caller)Tp::BaseCallback [inline]
BaseCallback(const BaseCallback &other)Tp::BaseCallback [inline]
Callback1()Tp::Callback1< R, Arg1 > [inline]
Callback1(const Functor &functor)Tp::Callback1< R, Arg1 > [inline]
callerTp::BaseCallback [protected]
FunctionType typedefTp::Callback1< R, Arg1 >
isValid() const Tp::BaseCallback [inline]
operator()(Arg1 a1) const Tp::Callback1< R, Arg1 > [inline]
operator=(const BaseCallback &other)Tp::BaseCallback [inline]
ResultType typedefTp::Callback1< R, Arg1 >
~BaseCallback()Tp::BaseCallback [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_type.html0000644000175200001440000003030012000060453024052 0ustar00collabora-develusers00000000000000 Class Members - Typedefs
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- c -

- d -

- f -

- h -

- i -

- n -

- p -

- r -

- s -

- v -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00931.html0000644000175200001440000001701412000060453021625 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::SharedPtr< T > Member List
This is the complete list of members for Tp::SharedPtr< T >, including all inherited members.
constCast(const SharedPtr< X > &src)Tp::SharedPtr< T > [inline, static]
constData() const Tp::SharedPtr< T > [inline]
data() const Tp::SharedPtr< T > [inline]
dynamicCast(const SharedPtr< X > &src)Tp::SharedPtr< T > [inline, static]
isNull() const Tp::SharedPtr< T > [inline]
operator UnspecifiedBoolType() const Tp::SharedPtr< T > [inline]
operator!() const Tp::SharedPtr< T > [inline]
operator!=(const SharedPtr< T > &o) const Tp::SharedPtr< T > [inline]
operator!=(const T *ptr) const Tp::SharedPtr< T > [inline]
operator->()Tp::SharedPtr< T > [inline]
operator->() const Tp::SharedPtr< T > [inline]
operator=(const SharedPtr< T > &o)Tp::SharedPtr< T > [inline]
operator==(const SharedPtr< T > &o) const Tp::SharedPtr< T > [inline]
operator==(const T *ptr) const Tp::SharedPtr< T > [inline]
qObjectCast(const SharedPtr< X > &src)Tp::SharedPtr< T > [inline, static]
reset()Tp::SharedPtr< T > [inline]
SharedPtr()Tp::SharedPtr< T > [inline]
SharedPtr(T *d)Tp::SharedPtr< T > [inline, explicit]
SharedPtr(const SharedPtr< Subclass > &o)Tp::SharedPtr< T > [inline]
SharedPtr(const SharedPtr< T > &o)Tp::SharedPtr< T > [inline]
SharedPtr(const WeakPtr< T > &o)Tp::SharedPtr< T > [inline, explicit]
staticCast(const SharedPtr< X > &src)Tp::SharedPtr< T > [inline, static]
swap(SharedPtr< T > &o)Tp::SharedPtr< T > [inline]
~SharedPtr()Tp::SharedPtr< T > [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00022.html0000644000175200001440000005067212000060453021623 0ustar00collabora-develusers00000000000000 roster/roster-widget.cpp
   Home · All Classes · All Namespaces · Modules · Functions · Files
roster/roster-widget.cpp
#include "roster-widget.h"
#include "_gen/roster-widget.moc.hpp"

#include "roster-item.h"

#include <TelepathyQt/Types>
#include <TelepathyQt/Contact>
#include <TelepathyQt/ContactManager>
#include <TelepathyQt/PendingConnection>
#include <TelepathyQt/PendingContacts>
#include <TelepathyQt/PendingOperation>
#include <TelepathyQt/PendingReady>

#include <QAction>
#include <QDebug>
#include <QDialog>
#include <QDialogButtonBox>
#include <QHBoxLayout>
#include <QLabel>
#include <QLineEdit>
#include <QListWidget>
#include <QListWidgetItem>
#include <QMessageBox>
#include <QPushButton>
#include <QVBoxLayout>

using namespace Tp;

RosterWidget::RosterWidget(QWidget *parent)
    : QWidget(parent)
{
    setWindowTitle(QLatin1String("Roster"));

    createActions();
    setupGui();
}

RosterWidget::~RosterWidget()
{
}

void RosterWidget::setConnection(const ConnectionPtr &conn)
{
    if (mConn) {
        unsetConnection();
    }

    mConn = conn;
    connect(conn->contactManager().data(),
            SIGNAL(presencePublicationRequested(const Tp::Contacts &)),
            SLOT(onPresencePublicationRequested(const Tp::Contacts &)));
    // TODO listen to allKnownContactsChanged

    connect(conn->contactManager().data(),
            SIGNAL(stateChanged(Tp::ContactListState)),
            SLOT(onContactManagerStateChanged(Tp::ContactListState)));
    onContactManagerStateChanged(conn->contactManager()->state());
}

void RosterWidget::unsetConnection()
{
    while (mList->count() > 0) {
        RosterItem *item = (RosterItem *) mList->item(0);
        mList->takeItem(0);
        delete item;
    }
    mConn.reset();
    updateActions();
    mAddBtn->setEnabled(false);
}

void RosterWidget::createActions()
{
    mAuthAction = new QAction(QLatin1String("Authorize Contact"), this);
    mAuthAction->setEnabled(false);
    connect(mAuthAction,
            SIGNAL(triggered(bool)),
            SLOT(onAuthActionTriggered(bool)));
    mDenyAction = new QAction(QLatin1String("Deny Contact"), this);
    mDenyAction->setEnabled(false);
    connect(mDenyAction,
            SIGNAL(triggered(bool)),
            SLOT(onDenyActionTriggered(bool)));
    mRemoveAction = new QAction(QLatin1String("Remove Contact"), this);
    mRemoveAction->setEnabled(false);
    connect(mRemoveAction,
            SIGNAL(triggered(bool)),
            SLOT(onRemoveActionTriggered(bool)));
    mBlockAction = new QAction(QLatin1String("Block Contact"), this);
    mBlockAction->setEnabled(false);
    mBlockAction->setCheckable(true);
    connect(mBlockAction,
            SIGNAL(triggered(bool)),
            SLOT(onBlockActionTriggered(bool)));
}

void RosterWidget::setupGui()
{
    QVBoxLayout *vbox = new QVBoxLayout;

    mList = new QListWidget;
    connect(mList,
            SIGNAL(itemSelectionChanged()),
            SLOT(onItemSelectionChanged()));
    vbox->addWidget(mList);

    mList->setContextMenuPolicy(Qt::ActionsContextMenu);
    mList->addAction(mAuthAction);
    mList->addAction(mDenyAction);
    mList->addAction(mRemoveAction);
    mList->addAction(mBlockAction);

    QHBoxLayout *hbox = new QHBoxLayout;

    mAddBtn = new QPushButton(QLatin1String("+"));
    mAddBtn->setEnabled(false);
    connect(mAddBtn,
            SIGNAL(clicked(bool)),
            SLOT(onAddButtonClicked()));
    hbox->addWidget(mAddBtn);
    hbox->addStretch(1);

    vbox->addLayout(hbox);

    setLayout(vbox);

    mAddDlg = new QDialog(this);
    mAddDlg->setWindowTitle(QLatin1String("Add Contact"));
    QVBoxLayout *addDlgVBox = new QVBoxLayout;

    QHBoxLayout *addDlgEntryHBox = new QHBoxLayout;
    QLabel *label = new QLabel(QLatin1String("Username"));
    addDlgEntryHBox->addWidget(label);
    mAddDlgEdt = new QLineEdit();
    addDlgEntryHBox->addWidget(mAddDlgEdt);
    addDlgVBox->addLayout(addDlgEntryHBox);

    QDialogButtonBox *addDlgBtnBox = new QDialogButtonBox(
            QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal);
    connect(addDlgBtnBox, SIGNAL(accepted()), mAddDlg, SLOT(accept()));
    connect(addDlgBtnBox, SIGNAL(rejected()), mAddDlg, SLOT(reject()));
    addDlgVBox->addWidget(addDlgBtnBox);

    mAddDlg->setLayout(addDlgVBox);
}

RosterItem *RosterWidget::createItemForContact(const ContactPtr &contact,
        bool &exists)
{
    RosterItem *item;
    exists = false;
    for (int i = 0; i < mList->count(); ++i) {
        item = dynamic_cast<RosterItem*>(mList->item(i));
        if (item->contact() == contact) {
            exists = true;
            return item;
        }
    }

    return new RosterItem(contact, mList);
}

void RosterWidget::onContactManagerStateChanged(ContactListState state)
{
    if (state == ContactListStateSuccess) {
        qDebug() << "Loading contacts";
        RosterItem *item;
        bool exists;
        foreach (const ContactPtr &contact, mConn->contactManager()->allKnownContacts()) {
            exists = false;
            item = createItemForContact(contact, exists);
            if (!exists) {
                connect(item, SIGNAL(changed()), SLOT(updateActions()));
            }
        }

        mAddBtn->setEnabled(true);
    }
}

void RosterWidget::onPresencePublicationRequested(const Contacts &contacts)
{
    qDebug() << "Presence publication requested";
    RosterItem *item;
    bool exists;
    foreach (const ContactPtr &contact, contacts) {
        exists = false;
        item = createItemForContact(contact, exists);
        if (!exists) {
            connect(item, SIGNAL(changed()), SLOT(updateActions()));
        }
    }
}

void RosterWidget::onItemSelectionChanged()
{
    updateActions();
}

void RosterWidget::onAddButtonClicked()
{
    mAddDlgEdt->clear();
    int ret = mAddDlg->exec();
    if (ret == QDialog::Rejected) {
        return;
    }

    QString username = mAddDlgEdt->text();
    PendingContacts *pcontacts = mConn->contactManager()->contactsForIdentifiers(
            QStringList() << username);
    connect(pcontacts,
            SIGNAL(finished(Tp::PendingOperation *)),
            SLOT(onContactRetrieved(Tp::PendingOperation *)));
}

void RosterWidget::onAuthActionTriggered(bool checked)
{
    Q_UNUSED(checked);

    QList<QListWidgetItem *> selectedItems = mList->selectedItems();
    if (selectedItems.isEmpty()) {
        return;
    }

    Q_ASSERT(selectedItems.size() == 1);
    RosterItem *item = dynamic_cast<RosterItem*>(selectedItems.first());
    if (item->contact()->publishState() != Contact::PresenceStateYes) {
        item->contact()->authorizePresencePublication();
    }
}

void RosterWidget::onDenyActionTriggered(bool checked)
{
    Q_UNUSED(checked);

    QList<QListWidgetItem *> selectedItems = mList->selectedItems();
    if (selectedItems.isEmpty()) {
        return;
    }

    Q_ASSERT(selectedItems.size() == 1);
    RosterItem *item = dynamic_cast<RosterItem*>(selectedItems.first());
    if (item->contact()->publishState() != Contact::PresenceStateNo) {
        // The contact can't see my presence
        item->contact()->removePresencePublication();
    }
}

void RosterWidget::onRemoveActionTriggered(bool checked)
{
    Q_UNUSED(checked);

    QList<QListWidgetItem *> selectedItems = mList->selectedItems();
    if (selectedItems.isEmpty()) {
        return;
    }

    Q_ASSERT(selectedItems.size() == 1);
    RosterItem *item = dynamic_cast<RosterItem*>(selectedItems.first());
    if (item->contact()->subscriptionState() != Contact::PresenceStateNo) {
        // The contact can't see my presence and I can't see his/her presence
        item->contact()->removePresencePublication();
        item->contact()->removePresenceSubscription();
    }
}

void RosterWidget::onBlockActionTriggered(bool checked)
{
    QList<QListWidgetItem *> selectedItems = mList->selectedItems();
    if (selectedItems.isEmpty()) {
        return;
    }

    Q_ASSERT(selectedItems.size() == 1);
    RosterItem *item = dynamic_cast<RosterItem*>(selectedItems.first());
    if (checked) {
        item->contact()->block();
    } else {
        item->contact()->unblock();
    }
}

void RosterWidget::onContactRetrieved(Tp::PendingOperation *op)
{
    PendingContacts *pcontacts = qobject_cast<PendingContacts *>(op);
    QList<ContactPtr> contacts = pcontacts->contacts();
    Q_ASSERT(pcontacts->identifiers().size() == 1);
    QString username = pcontacts->identifiers().first();
    if (contacts.size() != 1 || !contacts.first()) {
        QMessageBox msgBox;
        msgBox.setText(QString(QLatin1String("Unable to add contact \"%1\"")).arg(username));
        msgBox.exec();
        return;
    }

    ContactPtr contact = contacts.first();
    qDebug() << "Request presence subscription for contact" << username;
    bool exists = false;
    RosterItem *item = createItemForContact(contact, exists);
    if (!exists) {
        connect(item, SIGNAL(changed()), SLOT(updateActions()));
    }
    contact->requestPresenceSubscription();
}

void RosterWidget::updateActions()
{
    QList<QListWidgetItem *> selectedItems = mList->selectedItems();
    if (selectedItems.isEmpty()) {
        mAuthAction->setEnabled(false);
        mDenyAction->setEnabled(false);
        mRemoveAction->setEnabled(false);
        mBlockAction->setEnabled(false);
        updateActions(0);
        return;
    }
    Q_ASSERT(selectedItems.size() == 1);

    RosterItem *item = dynamic_cast<RosterItem*>(selectedItems.first());
    ContactPtr contact = item->contact();

    ContactManagerPtr manager = contact->manager();
    qDebug() << "Contact" << contact->id() << "selected";
    qDebug() << " subscription state:" << contact->subscriptionState();
    qDebug() << " publish state     :" << contact->publishState();
    qDebug() << " blocked           :" << contact->isBlocked();

    if (manager->canAuthorizePresencePublication() &&
        contact->publishState() == Contact::PresenceStateAsk) {
        mAuthAction->setEnabled(true);
    } else {
        mAuthAction->setEnabled(false);
    }

    if (manager->canRemovePresencePublication() &&
        contact->publishState() != Contact::PresenceStateNo) {
        mDenyAction->setEnabled(true);
    } else {
        mDenyAction->setEnabled(false);
    }

    if (manager->canRemovePresenceSubscription() &&
        contact->subscriptionState() != Contact::PresenceStateNo) {
        mRemoveAction->setEnabled(true);
    } else {
        mRemoveAction->setEnabled(false);
    }

    if (manager->canBlockContacts() &&
        contact->publishState() == Contact::PresenceStateYes) {
        mBlockAction->setEnabled(true);
    } else {
        mBlockAction->setEnabled(false);
    }

    mBlockAction->setChecked(contact->isBlocked());

    updateActions(item);
}


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00862.html0000644000175200001440000000575612000060453021642 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PtrFunctor2< R, Arg1, Arg2 > Member List
This is the complete list of members for Tp::PtrFunctor2< R, Arg1, Arg2 >, including all inherited members.
fnTp::PtrFunctor2< R, Arg1, Arg2 >
FunctionType typedefTp::PtrFunctor2< R, Arg1, Arg2 >
operator()(Arg1 a1, Arg2 a2) const Tp::PtrFunctor2< R, Arg1, Arg2 > [inline]
PtrFunctor2(FunctionType fn)Tp::PtrFunctor2< R, Arg1, Arg2 > [inline]
ResultType typedefTp::PtrFunctor2< R, Arg1, Arg2 >


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00927.html0000644000175200001440000000702712000060453021635 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::RequestableChannelClassSpecList Member List
This is the complete list of members for Tp::RequestableChannelClassSpecList, including all inherited members.
bareClasses() const Tp::RequestableChannelClassSpecList [inline]
RequestableChannelClassSpecList()Tp::RequestableChannelClassSpecList [inline]
RequestableChannelClassSpecList(const RequestableChannelClass &rcc)Tp::RequestableChannelClassSpecList [inline]
RequestableChannelClassSpecList(const RequestableChannelClassList &rccs)Tp::RequestableChannelClassSpecList [inline]
RequestableChannelClassSpecList(const RequestableChannelClassSpec &rccSpec)Tp::RequestableChannelClassSpecList [inline]
RequestableChannelClassSpecList(const QList< RequestableChannelClassSpec > &other)Tp::RequestableChannelClassSpecList [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00211.html0000644000175200001440000001052212000060453021611 0ustar00collabora-develusers00000000000000 Tp::ContactSubscriptions Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactSubscriptions Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

A single contact's subscribe, publish and publish-request attributes.


Member Data Documentation

The new value of the contact's "subscribe" attribute.

The new value of the contact's "publish" attribute.

The new value of the contact's "publish-request" attribute, or the empty string if that attribute would be omitted.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00032.html0000644000175200001440000003566712000060453021633 0ustar00collabora-develusers00000000000000 Tp::AbstractClientApprover Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AbstractClientApprover Class Reference

The AbstractClientApprover class represents a Telepathy approver. More...

#include <TelepathyQt/AbstractClientApprover>

Inherits Tp::AbstractClient.

List of all members.

Public Member Functions

Protected Member Functions


Detailed Description

The AbstractClientApprover class represents a Telepathy approver.

Approvers are clients that notify the user that new channels have been created, and allow the user to accept or reject those channels.

Approvers can also select which channel handler will be used for the channel, for instance by offering the user a list of possible handlers rather than just an accept/reject choice. However, the channel dispatcher must be able to prioritize possible handlers on its own using some reasonable heuristic, probably based on user configuration.

It is possible (and useful) to have an approver and a channel handler in the same process; this is particularly useful if a channel handler wants to claim responsibility for particular channels itself.

All approvers are notified simultaneously. For instance, in a desktop system, there might be one approver that displays a notification-area icon, one that is part of a contact list window and highlights contacts there, and one that is part of a full-screen media player.

Any approver can approve the handling of a channel dispatch operation with a particular channel handler by calling the ChannelDispatchOperation::handleWith() method. Approvers can also attempt to claim channels by calling ChannelDispatchOperation::claim(). If this succeeds, the approver may handle the channels itself (if it is also a handler), or close the channels in order to reject them.

Approvers wishing to reject channels should call the ChannelDispatchOperation::claim() method, then (if it succeeds) close the channels in any way they see fit.

The first approver to reply gets its decision acted on; any other approvers that reply at approximately the same time will get an error, indicating that the channel has already been dealt with.

Approvers should usually prompt the user and ask for confirmation, rather than dispatching the channel to a handler straight away.

To become an approver one should inherit AbstractClientApprover and implement the pure virtual addDispatchOperation() method. After that the object representing the approver must be registered using ClientRegistrar::registerClient().

When new channels in which the approver has registered an interest are ready to be dispatched, the method addDispatchOperation() is invoked. The new channels are represented by a ChannelDispatchOperation object, which is passed to the addDispatchOperation() method. All approvers are notified simultaneously.

Usage

Implementing an approver

 class MyApprover : public AbstractClientApprover
 {
 public:
     MyApprover(const ChannelClassSpecSpecList &channelFilter);
     ~MyApprover() { }

     void addDispatchOperation(const MethodInvocationContextPtr<> &context,
             const ChannelDispatchOperationPtr &dispatchOperation);
 };

 MyApprover::MyApprover(const ChannelClassSpecList &channelFilter)
     : AbstractClientApprover(channelFilter)
 {
 }

 void MyApprover::addDispatchOperation(
         const MethodInvocationContextPtr<> &context,
         const ChannelDispatchOperationPtr &dispatchOperation)
 {
     // do something with dispatchOperation

     context->setFinished();
 }

Registering an approver

 ClientRegistrar registrar = ClientRegistrar::create();
 AbstractClientPtr approver = AbstractClientPtr::dynamicCast(
         SharedPtr<MyApprover>(new MyApprover(
             ChannelClassSpecList() << ChannelClassSpec::textChat())));
 registrar->registerClient(approver, "myapprover");
See also:
AbstractClient

Constructor & Destructor Documentation

Class destructor.

Construct a new AbstractClientApprover object.

Parameters:
channelFilterA specification of the channels in which this approver is interested.

Member Function Documentation

Return the property containing a specification of the channels that this channel approver is interested. The addDispatchOperation() method should be called by the channel dispatcher whenever at least one of the channels in a channel dispatch operation matches this description.

This method works in exactly the same way as the AbstractClientObserver::observerChannelFilter() method. In particular, the returned value cannot change while the handler process continues to own the corresponding client bus name.

In the .client file, represented in the same way as observer channel filter, the group is TP_QT_IFACE_CLIENT_APPROVER followed by ApproverChannelFilter instead.

Returns:
A specification of the channels that this channel approver is interested as a list of ChannelClassSpec objects.
See also:
addDispatchOperation()
void Tp::AbstractClientApprover::addDispatchOperation ( const MethodInvocationContextPtr<> &  context,
const ChannelDispatchOperationPtr &  dispatchOperation 
) [pure virtual]

Called by the channel dispatcher when a dispatch operation in which the approver has registered an interest is created, or when the approver starts up while such channel dispatch operations already exist.

The received context object should be stored until this method is finished processing and then MethodInvocationContext::setFinished() or MethodInvocationContext::setFinishedWithError() should be called on the received context object.

Specialized approvers must reimplement this method.

Parameters:
contextA MethodInvocationContextPtr object that must be used to indicate whether this method finished processing.
dispatchOperationThe dispatch operation to be processed.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00836.html0000644000175200001440000003542512000060453021637 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactManager Member List
This is the complete list of members for Tp::ContactManager, including all inherited members.
addContactsToGroup(const QString &group, const QList< ContactPtr > &contacts)Tp::ContactManager
addGroup(const QString &group)Tp::ContactManager
allKnownContacts() const Tp::ContactManager
allKnownContactsChanged(const Tp::Contacts &contactsAdded, const Tp::Contacts &contactsRemoved, const Tp::Channel::GroupMemberChangeDetails &details)Tp::ContactManager [signal]
allKnownGroups() const Tp::ContactManager
authorizePresencePublication(const QList< ContactPtr > &contacts, const QString &message=QString())Tp::ContactManager
blockContacts(const QList< ContactPtr > &contacts)Tp::ContactManager
blockContactsAndReportAbuse(const QList< ContactPtr > &contacts)Tp::ContactManager
canAuthorizePresencePublication() const Tp::ContactManager
canBlockContacts() const Tp::ContactManager
canRemovePresencePublication() const Tp::ContactManager
canRemovePresenceSubscription() const Tp::ContactManager
canReportAbuse() const Tp::ContactManager
canRequestPresenceSubscription() const Tp::ContactManager
canRescindPresenceSubscriptionRequest() const Tp::ContactManager
connection() const Tp::ContactManager
contactsForHandles(const UIntList &handles, const Features &features=Features())Tp::ContactManager
contactsForHandles(const ReferencedHandles &handles, const Features &features=Features())Tp::ContactManager
contactsForHandles(const HandleIdentifierMap &handles, const Features &features=Features())Tp::ContactManager
contactsForIdentifiers(const QStringList &identifiers, const Features &features=Features())Tp::ContactManager
contactsForUris(const QStringList &uris, const Features &features=Features())Tp::ContactManager
contactsForVCardAddresses(const QString &vcardField, const QStringList &vcardAddresses, const Features &features=Features())Tp::ContactManager
groupAdded(const QString &group)Tp::ContactManager [signal]
groupContacts(const QString &group) const Tp::ContactManager
groupMembersChanged(const QString &group, const Tp::Contacts &groupMembersAdded, const Tp::Contacts &groupMembersRemoved, const Tp::Channel::GroupMemberChangeDetails &details)Tp::ContactManager [signal]
groupRemoved(const QString &group)Tp::ContactManager [signal]
groupRenamed(const QString &oldGroup, const QString &newGroup)Tp::ContactManager [signal]
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
presencePublicationRequested(const Tp::Contacts &contacts)Tp::ContactManager [signal]
propertyChanged(const QString &propertyName)Tp::Object [signal]
publicationAuthorizationHasMessage() const Tp::ContactManager
publicationRejectionHasMessage() const Tp::ContactManager
publicationRemovalHasMessage() const Tp::ContactManager
RefCounted()Tp::RefCounted [inline]
refreshContactInfo(const QList< ContactPtr > &contact)Tp::ContactManager
removeContacts(const QList< ContactPtr > &contacts, const QString &message=QString())Tp::ContactManager
removeContactsFromGroup(const QString &group, const QList< ContactPtr > &contacts)Tp::ContactManager
removeGroup(const QString &group)Tp::ContactManager
removePresencePublication(const QList< ContactPtr > &contacts, const QString &message=QString())Tp::ContactManager
removePresenceSubscription(const QList< ContactPtr > &contacts, const QString &message=QString())Tp::ContactManager
requestContactAvatars(const QList< ContactPtr > &contacts)Tp::ContactManager
requestPresenceSubscription(const QList< ContactPtr > &contacts, const QString &message=QString())Tp::ContactManager
state() const Tp::ContactManager
stateChanged(Tp::ContactListState state)Tp::ContactManager [signal]
subscriptionRemovalHasMessage() const Tp::ContactManager
subscriptionRequestHasMessage() const Tp::ContactManager
subscriptionRescindingHasMessage() const Tp::ContactManager
supportedFeatures() const Tp::ContactManager
unblockContacts(const QList< ContactPtr > &contacts)Tp::ContactManager
upgradeContacts(const QList< ContactPtr > &contacts, const Features &features)Tp::ContactManager
~ContactManager()Tp::ContactManager [virtual]
~Object()Tp::Object [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00737.html0000644000175200001440000000724412000060453021635 0ustar00collabora-develusers00000000000000 Account proxies
   Home · All Classes · All Namespaces · Modules · Functions · Files
Account proxies

Classes


Detailed Description

Proxy objects representing remote Telepathy account objects and their optional interfaces.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00519_source.html0000644000175200001440000001711412000060453023210 0ustar00collabora-develusers00000000000000 cli-tls-certificate-body.hpp Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-tls-certificate-body.hpp
00001 #define IN_TP_QT_HEADER
00002 #include "TelepathyQt/tls-certificate.h"
00003 
00004 namespace Tp
00005 {
00006 namespace Client
00007 {
00008 
00009 AuthenticationTLSCertificateInterface::AuthenticationTLSCertificateInterface(const QString& busName, const QString& objectPath, QObject *parent)
00010     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00011 {
00012 }
00013 
00014 AuthenticationTLSCertificateInterface::AuthenticationTLSCertificateInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00015     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00016 {
00017 }
00018 
00019 AuthenticationTLSCertificateInterface::AuthenticationTLSCertificateInterface(Tp::DBusProxy *proxy)
00020     : Tp::AbstractInterface(proxy, staticInterfaceName())
00021 {
00022 }
00023 
00024 AuthenticationTLSCertificateInterface::AuthenticationTLSCertificateInterface(const Tp::AbstractInterface& mainInterface)
00025     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00026 {
00027 }
00028 
00029 AuthenticationTLSCertificateInterface::AuthenticationTLSCertificateInterface(const Tp::AbstractInterface& mainInterface, QObject *parent)
00030     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00031 {
00032 }
00033 
00034 void AuthenticationTLSCertificateInterface::invalidate(Tp::DBusProxy *proxy,
00035         const QString &error, const QString &message)
00036 {
00037     disconnect(this, SIGNAL(Accepted()), NULL, NULL);
00038     disconnect(this, SIGNAL(Rejected(const Tp::TLSCertificateRejectionList&)), NULL, NULL);
00039 
00040     Tp::AbstractInterface::invalidate(proxy, error, message);
00041 }
00042 }
00043 }


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_func_0x64.html0000644000175200001440000001777212000060453024627 0ustar00collabora-develusers00000000000000 Class Members - Functions
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- d -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00581_source.html0000644000175200001440000003204712000060453023211 0ustar00collabora-develusers00000000000000 generic-capability-filter.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
generic-capability-filter.h
00001 
00023 #ifndef _TelepathyQt_generic_capability_filter_h_HEADER_GUARD_
00024 #define _TelepathyQt_generic_capability_filter_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/ConnectionCapabilities>
00031 #include <TelepathyQt/Filter>
00032 #include <TelepathyQt/Types>
00033 
00034 namespace Tp
00035 {
00036 
00037 template <class T>
00038 class GenericCapabilityFilter : public Filter<T>
00039 {
00040 public:
00041     static SharedPtr<GenericCapabilityFilter<T> > create(
00042             const RequestableChannelClassSpecList &rccSpecs = RequestableChannelClassSpecList())
00043     {
00044         return SharedPtr<GenericCapabilityFilter<T> >(new GenericCapabilityFilter<T>(
00045                     rccSpecs));
00046     }
00047 
00048     inline virtual ~GenericCapabilityFilter() { }
00049 
00050     inline virtual bool isValid() const { return true; }
00051 
00052     inline virtual bool matches(const SharedPtr<T> &t) const
00053     {
00054         bool supportedRcc;
00055         RequestableChannelClassSpecList objectRccSpecs = t->capabilities().allClassSpecs();
00056         Q_FOREACH (const RequestableChannelClassSpec &filterRccSpec, mFilter) {
00057             supportedRcc = false;
00058 
00059             Q_FOREACH (const RequestableChannelClassSpec &objectRccSpec, objectRccSpecs) {
00060                 /* check if fixed properties match */
00061                 if (filterRccSpec.fixedProperties() == objectRccSpec.fixedProperties()) {
00062                     supportedRcc = true;
00063 
00064                     /* check if all allowed properties in the filter RCC
00065                      * are in the object RCC allowed properties */
00066                     Q_FOREACH (const QString &value, filterRccSpec.allowedProperties()) {
00067                         if (!objectRccSpec.allowsProperty(value)) {
00068                             /* one of the properties in the filter RCC
00069                              * allowed properties is not in the object RCC
00070                              * allowed properties */
00071                             supportedRcc = false;
00072                             break;
00073                         }
00074                     }
00075 
00076                     /* this RCC is supported, no need to check anymore */
00077                     if (supportedRcc) {
00078                         break;
00079                     }
00080                 }
00081             }
00082 
00083             /* one of the filter RCC is not supported, this object
00084              * won't match filter */
00085             if (!supportedRcc) {
00086                 return false;
00087             }
00088         }
00089 
00090         return true;
00091     }
00092 
00093     inline RequestableChannelClassSpecList filter() const { return mFilter; }
00094 
00095     inline void addRequestableChannelClassSubset(const RequestableChannelClassSpec &rccSpec)
00096     {
00097         mFilter.append(rccSpec.bareClass());
00098     }
00099 
00100     inline void setRequestableChannelClassesSubset(const RequestableChannelClassSpecList &rccSpecs)
00101     {
00102         mFilter = rccSpecs.bareClasses();
00103     }
00104 
00105 private:
00106     GenericCapabilityFilter(const RequestableChannelClassSpecList &rccSpecs)
00107         : Filter<T>(), mFilter(rccSpecs) { }
00108 
00109     RequestableChannelClassSpecList mFilter;
00110 };
00111 
00112 } // Tp
00113 
00114 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00979.html0000644000175200001440000000514012000060453021636 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactCapability Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01082.html0000644000175200001440000002014512000060453021622 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelInterfaceAnonymityInterface Member List
This is the complete list of members for Tp::Client::ChannelInterfaceAnonymityInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ChannelInterfaceAnonymityInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfaceAnonymityInterface
ChannelInterfaceAnonymityInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfaceAnonymityInterface
ChannelInterfaceAnonymityInterface(Tp::DBusProxy *proxy)Tp::Client::ChannelInterfaceAnonymityInterface
ChannelInterfaceAnonymityInterface(const Tp::Client::ChannelInterface &mainInterface)Tp::Client::ChannelInterfaceAnonymityInterface [explicit]
ChannelInterfaceAnonymityInterface(const Tp::Client::ChannelInterface &mainInterface, QObject *parent)Tp::Client::ChannelInterfaceAnonymityInterface
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ChannelInterfaceAnonymityInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ChannelInterfaceAnonymityInterface [inline]
requestPropertyAnonymityMandatory() const Tp::Client::ChannelInterfaceAnonymityInterface [inline]
requestPropertyAnonymityModes() const Tp::Client::ChannelInterfaceAnonymityInterface [inline]
requestPropertyAnonymousID() const Tp::Client::ChannelInterfaceAnonymityInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ChannelInterfaceAnonymityInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01019.html0000644000175200001440000000512112000060453021617 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::RTPHeaderExtension Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00088.html0000644000175200001440000004436612000060453021642 0ustar00collabora-develusers00000000000000 Tp::Client::CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface Class Reference

#include <TelepathyQt/CallContentMediaDescriptionInterface>

Inherits Tp::AbstractInterface.

List of all members.

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Call1.Content.MediaDescription.Interface.RTPHeaderExtensions".


Constructor & Destructor Documentation

Creates a CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface::CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Call1.Content.MediaDescription.Interface.RTPHeaderExtensions", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property HeaderExtensions of type Tp::RTPHeaderExtensionsList.

A list of remote header extensions which are supported.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
void Tp::Client::CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01097.html0000644000175200001440000001751412000060453021636 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelInterfaceSecurableInterface Member List
This is the complete list of members for Tp::Client::ChannelInterfaceSecurableInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ChannelInterfaceSecurableInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfaceSecurableInterface
ChannelInterfaceSecurableInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfaceSecurableInterface
ChannelInterfaceSecurableInterface(Tp::DBusProxy *proxy)Tp::Client::ChannelInterfaceSecurableInterface
ChannelInterfaceSecurableInterface(const Tp::Client::ChannelInterface &mainInterface)Tp::Client::ChannelInterfaceSecurableInterface [explicit]
ChannelInterfaceSecurableInterface(const Tp::Client::ChannelInterface &mainInterface, QObject *parent)Tp::Client::ChannelInterfaceSecurableInterface
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ChannelInterfaceSecurableInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ChannelInterfaceSecurableInterface [inline]
requestPropertyEncrypted() const Tp::Client::ChannelInterfaceSecurableInterface [inline]
requestPropertyVerified() const Tp::Client::ChannelInterfaceSecurableInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ChannelInterfaceSecurableInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00004.html0000644000175200001440000002734312000060453021622 0ustar00collabora-develusers00000000000000 accounts/account-item.cpp
   Home · All Classes · All Namespaces · Modules · Functions · Files
accounts/account-item.cpp
#include "account-item.h"
#include "_gen/account-item.moc.hpp"

#include <TelepathyQt/AccountManager>
#include <TelepathyQt/PendingReady>

#include <QDebug>
#include <QComboBox>
#include <QTableWidget>

AccountItem::AccountItem(Tp::AccountPtr acc, QTableWidget *table, int row, QObject *parent)
    : QObject(parent),
      mAcc(acc),
      mTable(table),
      mRow(row)
{
    init();
}

AccountItem::~AccountItem()
{
}

void AccountItem::setupGui()
{
    mTable->setItem(mRow, ColumnValid, new QTableWidgetItem(mAcc->isValid() ?
                QLatin1String("true") : QLatin1String("false")));
    mTable->setItem(mRow, ColumnEnabled, new QTableWidgetItem(mAcc->isEnabled() ?
                QLatin1String("true") : QLatin1String("false")));
    mTable->setItem(mRow, ColumnConnectionManager, new QTableWidgetItem(mAcc->cmName()));
    mTable->setItem(mRow, ColumnProtocol, new QTableWidgetItem(mAcc->protocolName()));
    mTable->setItem(mRow, ColumnDisplayName, new QTableWidgetItem(mAcc->displayName()));
    mTable->setItem(mRow, ColumnNickname, new QTableWidgetItem(mAcc->nickname()));
    mTable->setItem(mRow, ColumnConnectsAutomatically, new QTableWidgetItem(mAcc->connectsAutomatically() ?
                QLatin1String("true") : QLatin1String("false")));
    mTable->setItem(mRow, ColumnAutomaticPresence, new QTableWidgetItem(mAcc->automaticPresence().status()));
    mTable->setItem(mRow, ColumnCurrentPresence, new QTableWidgetItem(mAcc->currentPresence().status()));
    mTable->setItem(mRow, ColumnRequestedPresence, new QTableWidgetItem(mAcc->requestedPresence().status()));
    mTable->setItem(mRow, ColumnChangingPresence, new QTableWidgetItem(mAcc->isChangingPresence() ?
                QLatin1String("true") : QLatin1String("false")));
    mTable->setItem(mRow, ColumnConnectionStatus, new QTableWidgetItem(QString::number(mAcc->connectionStatus())));
    mTable->setItem(mRow, ColumnConnection, new QTableWidgetItem(
                mAcc->connection().isNull() ? QLatin1String("") : mAcc->connection()->objectPath()));
}

void AccountItem::init()
{
    setupGui();

    Tp::Account *acc = mAcc.data();
    connect(acc,
            SIGNAL(validityChanged(bool)),
            SLOT(onValidityChanged(bool)));
    connect(acc,
            SIGNAL(stateChanged(bool)),
            SLOT(onStateChanged(bool)));
    connect(acc,
            SIGNAL(displayNameChanged(const QString &)),
            SLOT(onDisplayNameChanged(const QString &)));
    connect(acc,
            SIGNAL(nicknameChanged(const QString &)),
            SLOT(onNicknameChanged(const QString &)));
    connect(acc,
            SIGNAL(connectsAutomaticallyPropertyChanged(bool)),
            SLOT(onConnectsAutomaticallyPropertyChanged(bool)));
    connect(acc,
            SIGNAL(changingPresence(bool)),
            SLOT(onChangingPresenceChanged(bool)));
    connect(acc,
            SIGNAL(automaticPresenceChanged(const Tp::SimplePresence &)),
            SLOT(onAutomaticPresenceChanged(const Tp::SimplePresence &)));
    connect(acc,
            SIGNAL(currentPresenceChanged(const Tp::SimplePresence &)),
            SLOT(onCurrentPresenceChanged(const Tp::SimplePresence &)));
    connect(acc,
            SIGNAL(requestedPresenceChanged(const Tp::SimplePresence &)),
            SLOT(onRequestedPresenceChanged(const Tp::SimplePresence &)));
    connect(acc,
            SIGNAL(statusChanged(Tp::ConnectionStatus, Tp::ConnectionStatusReason,
                    const QString &, const QVariantMap &)),
            SLOT(onStatusChanged(Tp::ConnectionStatus, Tp::ConnectionStatusReason,
                    const QString &, const QVariantMap &)));
    connect(acc,
            SIGNAL(haveConnectionChanged(bool)),
            SLOT(onHaveConnectionChanged(bool)));
}

void AccountItem::onValidityChanged(bool valid)
{
    QTableWidgetItem *item = mTable->item(mRow, ColumnValid);
    item->setText((valid ? QLatin1String("true") : QLatin1String("false")));
}

void AccountItem::onStateChanged(bool enabled)
{
    QTableWidgetItem *item = mTable->item(mRow, ColumnEnabled);
    item->setText((enabled ? QLatin1String("true") : QLatin1String("false")));
}

void AccountItem::onDisplayNameChanged(const QString &name)
{
    QTableWidgetItem *item = mTable->item(mRow, ColumnDisplayName);
    item->setText(name);
}

void AccountItem::onNicknameChanged(const QString &name)
{
    QTableWidgetItem *item = mTable->item(mRow, ColumnNickname);
    item->setText(name);
}

void AccountItem::onConnectsAutomaticallyPropertyChanged(bool value)
{
    QTableWidgetItem *item = mTable->item(mRow, ColumnConnectsAutomatically);
    item->setText((value ? QLatin1String("true") : QLatin1String("false")));
}

void AccountItem::onChangingPresenceChanged(bool value)
{
    QTableWidgetItem *item = mTable->item(mRow, ColumnChangingPresence);
    item->setText((value ? QLatin1String("true") : QLatin1String("false")));
}

void AccountItem::onAutomaticPresenceChanged(const Tp::SimplePresence &presence)
{
    QTableWidgetItem *item = mTable->item(mRow, ColumnAutomaticPresence);
    item->setText(presence.status);
}

void AccountItem::onCurrentPresenceChanged(const Tp::SimplePresence &presence)
{
    QTableWidgetItem *item = mTable->item(mRow, ColumnCurrentPresence);
    item->setText(presence.status);
}

void AccountItem::onRequestedPresenceChanged(const Tp::SimplePresence &presence)
{
    QTableWidgetItem *item = mTable->item(mRow, ColumnRequestedPresence);
    item->setText(presence.status);
}

void AccountItem::onStatusChanged(Tp::ConnectionStatus status,
        Tp::ConnectionStatusReason reason, const QString &error,
        const QVariantMap &errorDetails)
{
    QTableWidgetItem *item = mTable->item(mRow, ColumnConnectionStatus);
    item->setText(QString::number(status));
}

void AccountItem::onHaveConnectionChanged(bool haveConnection)
{
    QTableWidgetItem *item = mTable->item(mRow, ColumnConnection);
    item->setText(mAcc->connection().isNull() ?
            QLatin1String("") : mAcc->connection()->objectPath());
}


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00253.html0000644000175200001440000005643612000060453021635 0ustar00collabora-develusers00000000000000 Tp::IncomingStreamTubeChannel Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The IncomingStreamTubeChannel class represents an incoming Telepathy channel of type StreamTube. More...

#include <TelepathyQt/IncomingStreamTubeChannel>

Inherits Tp::StreamTubeChannel.

List of all members.

Public Member Functions

Static Public Member Functions

Static Public Attributes

Protected Member Functions


Detailed Description

The IncomingStreamTubeChannel class represents an incoming Telepathy channel of type StreamTube.

In particular, this class is meant to be used as a comfortable way for accepting incoming stream tubes. Tubes can be accepted as TCP and/or Unix sockets with various access control methods depending on what the service supports using the various overloads of acceptTubeAsTcpSocket() and acceptTubeAsUnixSocket().

Once a tube is successfully accepted and open (the PendingStreamTubeConnection returned from the accepting methods has finished), the application can connect to the socket the address of which can be retrieved from PendingStreamTubeConnection::ipAddress() and/or PendingStreamTubeConnection::localAddress() depending on which accepting method was used. Connecting to this socket will open a tunneled connection to the service listening at the offering end of the tube.

For more details, please refer to Telepathy specification.

See Asynchronous Object Model, Shared Pointer Usage


Constructor & Destructor Documentation

Tp::IncomingStreamTubeChannel::IncomingStreamTubeChannel ( const ConnectionPtr &  connection,
const QString &  objectPath,
const QVariantMap &  immutableProperties,
const Feature coreFeature = IncomingStreamTubeChannel::FeatureCore 
) [protected]

Construct a new IncomingStreamTubeChannel object.

Parameters:
connectionConnection owning this channel, and specifying the service.
objectPathThe channel object path.
immutablePropertiesThe channel immutable properties.
coreFeatureThe core feature of the channel type, if any. The corresponding introspectable should depend on IncomingStreamTubeChannel::FeatureCore.

Member Function Documentation

IncomingStreamTubeChannelPtr Tp::IncomingStreamTubeChannel::create ( const ConnectionPtr &  connection,
const QString &  objectPath,
const QVariantMap &  immutableProperties 
) [static]

Create a new IncomingStreamTubeChannel object.

Parameters:
connectionConnection owning this channel, and specifying the service.
objectPathThe channel object path.
immutablePropertiesThe channel immutable properties.
Returns:
A IncomingStreamTubeChannelPtr object pointing to the newly created IncomingStreamTubeChannel object.

Reimplemented from Tp::StreamTubeChannel.

Accept an incoming stream tube as a TCP socket.

This method accepts an incoming connection request for a stream tube. It can be called only if the tube is in the TubeStateLocalPending state.

The connection manager will open a TCP socket for the application to connect to. The address of the socket will be returned in PendingStreamTubeConnection::ipAddress() once the operation has finished successfully.

Using this overload, the connection manager will accept every incoming connection from localhost.

This accept method must be supported by all connection managers adhering to the Telepathy specification.

This method requires IncomingStreamTubeChannel::FeatureCore to be ready.

Returns:
A PendingStreamTubeConnection which will emit PendingStreamTubeConnection::finished when the stream tube is ready to be used (hence in the TubeStateOpen state).
PendingStreamTubeConnection * Tp::IncomingStreamTubeChannel::acceptTubeAsTcpSocket ( const QHostAddress &  allowedAddress,
quint16  allowedPort 
)

Accept an incoming stream tube as a TCP socket.

This method accepts an incoming connection request for a stream tube. It can be called only if the tube is in the TubeStateLocalPending state.

The connection manager will open a TCP socket for the application to connect to. The address of the socket will be returned in PendingStreamTubeConnection::ipAddress() once the operation has finished successfully.

This overload lets you specify an allowed address/port combination for connecting to the CM socket. Connections with other source addresses won't be accepted. The accessors supportsIPv4SocketsWithSpecifiedAddress() and supportsIPv6SocketsWithSpecifiedAddress() can be used to verify that the connection manager supports this kind of access control; otherwise, this method will always fail unless QHostAddress::Any (or QHostAddress::AnyIPv4 in Qt5) or QHostAddress::AnyIPv6 is passed, in which case the behavior is identical to the always supported acceptTubeAsTcpSocket() overload.

Note that when using QHostAddress::Any (or QHostAddress::AnyIPv4 in Qt5) or QHostAddress::AnyIPv6, allowedPort is ignored.

This method requires IncomingStreamTubeChannel::FeatureCore to be ready.

Parameters:
allowedAddressAn allowed address for connecting to the socket.
allowedPortAn allowed port for connecting to the socket.
Returns:
A PendingStreamTubeConnection which will emit PendingStreamTubeConnection::finished when the stream tube is ready to be used (hence in the TubeStateOpen state).

Accept an incoming stream tube as a Unix socket.

This method accepts an incoming connection request for a stream tube. It can be called only if the tube is in the TubeStateLocalPending state.

An Unix socket (can be used with QLocalSocket or alike) will be opened by the connection manager as the local tube endpoint. This is only supported if supportsUnixSocketsOnLocalhost() is true.

You can also specify whether the CM should require an SCM_CREDS or SCM_CREDENTIALS message upon connection instead of accepting every incoming connection from localhost. This provides additional security, but requires sending the byte retrieved from PendingStreamTubeConnection::credentialByte() in-line in the socket byte stream (in a credentials message if available on the platform), which might not be compatible with all protocols or libraries. Also, only connection managers for which supportsUnixSocketsWithCredentials() is true support this type of access control.

This method requires IncomingStreamTubeChannel::FeatureCore to be ready.

Parameters:
requireCredentialsWhether the CM should require an SCM_CREDS or SCM_CREDENTIALS message upon connection.
Returns:
A PendingStreamTubeConnection which will emit PendingStreamTubeConnection::finished when the stream tube is ready to be used (hence in the TubeStateOpen state).
See also:
StreamTubeChannel::supportsUnixSocketsOnLocalhost(), StreamTubeChannel::supportsUnixSocketsWithCredentials(), StreamTubeChannel::supportsAbstractUnixSocketsOnLocalhost(), StreamTubeChannel::supportsAbstractUnixSocketsWithCredentials()

Member Data Documentation

Feature representing the core that needs to become ready to make the IncomingStreamTubeChannel object usable.

This is currently the same as StreamTubeChannel::FeatureCore, but may change to include more.

When calling isReady(), becomeReady(), this feature is implicitly added to the requested features.

Reimplemented from Tp::StreamTubeChannel.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01055.html0000644000175200001440000000514512000060453021625 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::SimpleStatusSpecMap Member List
This is the complete list of members for Tp::SimpleStatusSpecMap, including all inherited members.
operator=(const QMap< QString, SimpleStatusSpec > &a)Tp::SimpleStatusSpecMap [inline]
SimpleStatusSpecMap()Tp::SimpleStatusSpecMap [inline]
SimpleStatusSpecMap(const QMap< QString, SimpleStatusSpec > &a)Tp::SimpleStatusSpecMap [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00634_source.html0000644000175200001440000002345512000060453023213 0ustar00collabora-develusers00000000000000 pending-channel.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
pending-channel.h
00001 
00023 #ifndef _TelepathyQt_pending_channel_h_HEADER_GUARD_
00024 #define _TelepathyQt_pending_channel_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Channel>
00031 #include <TelepathyQt/PendingOperation>
00032 
00033 #include <QString>
00034 #include <QVariantMap>
00035 
00036 #include <QDBusPendingCallWatcher>
00037 
00038 namespace Tp
00039 {
00040 
00041 class Connection;
00042 class HandledChannelNotifier;
00043 
00044 class TP_QT_EXPORT PendingChannel : public PendingOperation
00045 {
00046     Q_OBJECT
00047     Q_DISABLE_COPY(PendingChannel)
00048 
00049 public:
00050     ~PendingChannel();
00051 
00052     ConnectionPtr connection() const;
00053 
00054     bool yours() const;
00055 
00056     const QString &channelType() const;
00057 
00058     uint targetHandleType() const;
00059 
00060     uint targetHandle() const;
00061 
00062     QVariantMap immutableProperties() const;
00063 
00064     ChannelPtr channel() const;
00065 
00066     HandledChannelNotifier *handledChannelNotifier() const;
00067 
00068 private Q_SLOTS:
00069     TP_QT_NO_EXPORT void onConnectionCreateChannelFinished(
00070             QDBusPendingCallWatcher *watcher);
00071     TP_QT_NO_EXPORT void onConnectionEnsureChannelFinished(
00072             QDBusPendingCallWatcher *watcher);
00073     TP_QT_NO_EXPORT void onChannelReady(Tp::PendingOperation *op);
00074 
00075     TP_QT_NO_EXPORT void onHandlerError(const QString &errorName,
00076             const QString &errorMessage);
00077     TP_QT_NO_EXPORT void onHandlerChannelReceived(
00078             const Tp::ChannelPtr &channel);
00079     TP_QT_NO_EXPORT void onAccountCreateChannelFinished(
00080             Tp::PendingOperation *op);
00081 
00082 private:
00083     friend class Account;
00084     friend class ConnectionLowlevel;
00085 
00086     TP_QT_NO_EXPORT PendingChannel(const ConnectionPtr &connection,
00087             const QString &errorName, const QString &errorMessage);
00088     TP_QT_NO_EXPORT PendingChannel(const ConnectionPtr &connection,
00089             const QVariantMap &request, bool create, int timeout = -1);
00090     TP_QT_NO_EXPORT PendingChannel(const AccountPtr &account,
00091             const QVariantMap &request, const QDateTime &userActionTime,
00092             bool create);
00093     TP_QT_NO_EXPORT PendingChannel(const QString &errorName,
00094             const QString &errorMessage);
00095 
00096     struct Private;
00097     friend struct Private;
00098     Private *mPriv;
00099 };
00100 
00101 } // Tp
00102 
00103 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01027.html0000644000175200001440000000430312000060453021617 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::SocketAddressIP Member List
This is the complete list of members for Tp::SocketAddressIP, including all inherited members.
addressTp::SocketAddressIP
portTp::SocketAddressIP


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00360.html0000644000175200001440000003273412000060453021627 0ustar00collabora-develusers00000000000000 Tp::ReadyObject Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ReadyObject Class Reference

#include <>>

Inherited by Tp::DBusProxy, Tp::ProfileManager, and Tp::StreamedMediaStream [private].

List of all members.

Public Member Functions

Protected Member Functions


Detailed Description

<TelepathyQt/ReadyObject>


Constructor & Destructor Documentation

Tp::ReadyObject::ReadyObject ( RefCounted object,
const Feature featureCore 
)

Construct a new ReadyObject object.

Parameters:
objectThe RefCounted the object refers to.
featureCoreThe core feature of the object.
Tp::ReadyObject::ReadyObject ( DBusProxy proxy,
const Feature featureCore 
)

Construct a new ReadyObject object.

Parameters:
proxyThe DBusProxy the object refers to.
featureCoreThe core feature of the object.

Class destructor.


Member Function Documentation

bool Tp::ReadyObject::isReady ( const Features features = Features()) const [virtual]

Return whether this object has finished its initial setup.

This is mostly useful as a sanity check, in code that shouldn't be run until the object is ready. To wait for the object to be ready, call becomeReady() and connect to the finished signal on the result.

Parameters:
featuresThe features which should be tested
Returns:
true if the object has finished its initial setup for basic functionality plus the given features
PendingReady * Tp::ReadyObject::becomeReady ( const Features requestedFeatures = Features()) [virtual]

Return a pending operation which will succeed when this object finishes its initial setup, or will fail if a fatal error occurs during this initial setup.

If an empty set is used FeatureCore will be considered as the requested feature.

Parameters:
requestedFeaturesThe features which should be enabled
Returns:
A PendingReady object which will emit finished when this object has finished or failed initial setup for basic functionality plus the given features


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00121.html0000644000175200001440000005261212000060453021617 0ustar00collabora-develusers00000000000000 Tp::Client::ChannelInterfaceChatStateInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelInterfaceChatStateInterface Class Reference

#include <TelepathyQt/Channel>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

  • QDBusPendingReply SetChatState (uint state, int timeout=-1)

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Channel.Interface.ChatState".


Constructor & Destructor Documentation

Tp::Client::ChannelInterfaceChatStateInterface::ChannelInterfaceChatStateInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfaceChatStateInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ChannelInterfaceChatStateInterface::ChannelInterfaceChatStateInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfaceChatStateInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ChannelInterfaceChatStateInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ChannelInterfaceChatStateInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ChannelInterfaceChatStateInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Channel.Interface.ChatState", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property ChatStates of type Tp::ChatStateMap.

A map containing the chat states of all contacts in this channel whose chat state is not Inactive.

Contacts in this channel, but who are not listed in this map, may be assumed to be in the Inactive state.

In implementations that do not have this property, its value may be assumed to be empty until a ChatStateChanged() signal indicates otherwise.

This property was not present in older versions of telepathy-spec, because chat states in XMPP are not state-recoverable (if you miss the change notification signal, there's no way to know the state). However, this property still allows clients to recover state changes that were seen by the CM before the client started to deal with the channel.

In CMs that follow older spec versions, assuming Inactive will mean that initial chat states will always be assumed to be Inactive, which is the best we can do. XEP 0085 specifies Inactive as the "neutral" state to be assumed unless told otherwise.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::ChannelInterfaceChatStateInterface::SetChatState ( uint  state,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method SetChatState on the remote object.

Set the local state and notify other members of the channel that it has changed.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
stateThe new state.
timeoutThe timeout in milliseconds.
void Tp::Client::ChannelInterfaceChatStateInterface::ChatStateChanged ( uint  contact,
uint  state 
) [signal]

Represents the signal ChatStateChanged on the remote object.

Emitted when the state of a member of the channel has changed. This includes local state.

Parameters:
contactAn integer handle for the contact.
stateThe new state of this contact.
void Tp::Client::ChannelInterfaceChatStateInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00412.html0000644000175200001440000004376112000060453021627 0ustar00collabora-develusers00000000000000 Tp::TubeChannel Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The TubeChannel class is a base class for all tube types. More...

#include <TelepathyQt/TubeChannel>

Inherits Tp::Channel.

Inherited by Tp::DBusTubeChannel, and Tp::StreamTubeChannel.

List of all members.

Signals

Public Member Functions

Static Public Member Functions

Static Public Attributes

Protected Member Functions


Detailed Description

The TubeChannel class is a base class for all tube types.

A tube is a mechanism for arbitrary data transfer between two or more IM users, used to allow applications on the users' systems to communicate without having to establish network connections themselves.

Note that TubeChannel should never be instantiated directly, instead one of its subclasses (e.g. IncomingStreamTubeChannel or OutgoingStreamTubeChannel) should be used.

See Asynchronous Object Model, Shared Pointer Usage


Constructor & Destructor Documentation

Class destructor.

Tp::TubeChannel::TubeChannel ( const ConnectionPtr &  connection,
const QString &  objectPath,
const QVariantMap &  immutableProperties,
const Feature coreFeature = TubeChannel::FeatureCore 
) [protected]

Construct a new TubeChannel object.

Parameters:
connectionConnection owning this channel, and specifying the service.
objectPathThe channel object path.
immutablePropertiesThe channel immutable properties.
coreFeatureThe core feature of the channel type, if any. The corresponding introspectable should depend on TubeChannel::FeatureCore.

Member Function Documentation

TubeChannelPtr Tp::TubeChannel::create ( const ConnectionPtr &  connection,
const QString &  objectPath,
const QVariantMap &  immutableProperties 
) [static]

Create a new TubeChannel channel.

Parameters:
connectionConnection owning this channel, and specifying the service.
objectPathThe channel object path.
immutablePropertiesThe channel immutable properties.
Returns:
A TubeChannelPtr object pointing to the newly created TubeChannel object.

Reimplemented from Tp::Channel.

Reimplemented in Tp::IncomingStreamTubeChannel, Tp::OutgoingStreamTubeChannel, Tp::StreamTubeChannel, Tp::DBusTubeChannel, Tp::IncomingDBusTubeChannel, and Tp::OutgoingDBusTubeChannel.

Return the state of this tube.

Change notification is via the stateChanged() signal.

This method requires TubeChannel::FeatureCore to be ready.

Returns:
The state as TubeChannelState.
See also:
stateChanged()
QVariantMap Tp::TubeChannel::parameters ( ) const

Return the parameters associated with this tube, if any.

The parameters are populated when an outgoing tube is offered, but they are most useful in the receiving end, where the parameters passed to the offer can be extracted for the tube's entire lifetime to bootstrap legacy protocols. All parameters are passed unchanged.

This method requires TubeChannel::FeatureCore to be ready.

Returns:
The parameters as QVariantMap.

Emitted when the value of state() changes.

See also:
state The new state of this tube.
void Tp::TubeChannel::setParameters ( const QVariantMap &  parameters) [protected]

Member Data Documentation

Feature representing the core that needs to become ready to make the TubeChannel object usable.

Note that this feature must be enabled in order to use most TubeChannel methods. See specific methods documentation for more details.

Reimplemented from Tp::Channel.

Reimplemented in Tp::IncomingStreamTubeChannel, Tp::OutgoingStreamTubeChannel, Tp::StreamTubeChannel, and Tp::DBusTubeChannel.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00793.html0000644000175200001440000003414612000060453021640 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::CallContent Member List
This is the complete list of members for Tp::CallContent, including all inherited members.
actualFeatures() const Tp::ReadyObject [virtual]
becomeReady(const Features &requestedFeatures=Features())Tp::ReadyObject [virtual]
busName() const Tp::DBusProxy
BypassInterfaceCheck enum valueTp::OptionalInterfaceFactory< CallContent >
channel() const Tp::CallContent
CheckInterfaceSupported enum valueTp::OptionalInterfaceFactory< CallContent >
dbusConnection() const Tp::DBusProxy
DBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::DBusProxy
disposition() const Tp::CallContent
hasInterface(const QString &name) constTp::OptionalInterfaceFactory< CallContent > [inline]
interface() constTp::OptionalInterfaceFactory< CallContent > [inline]
interfaces() constTp::OptionalInterfaceFactory< CallContent > [inline]
InterfaceSupportedChecking enum nameTp::OptionalInterfaceFactory< CallContent >
invalidate(const QString &reason, const QString &message)Tp::DBusProxy [protected]
invalidate(const QDBusError &error)Tp::DBusProxy [protected]
invalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage)Tp::DBusProxy [signal]
invalidationMessage() const Tp::DBusProxy
invalidationReason() const Tp::DBusProxy
isReady(const Features &features=Features()) const Tp::ReadyObject [virtual]
isValid() const Tp::DBusProxy
missingFeatures() const Tp::ReadyObject [virtual]
name() const Tp::CallContent
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
objectPath() const Tp::DBusProxy
optionalInterface(InterfaceSupportedChecking check=CheckInterfaceSupported) constTp::OptionalInterfaceFactory< CallContent > [inline]
OptionalInterfaceFactory(CallContent *this_)Tp::OptionalInterfaceFactory< CallContent > [inline]
propertyChanged(const QString &propertyName)Tp::Object [signal]
readinessHelper() const Tp::ReadyObject [protected]
ReadyObject(RefCounted *object, const Feature &featureCore)Tp::ReadyObject
ReadyObject(DBusProxy *proxy, const Feature &featureCore)Tp::ReadyObject
RefCounted()Tp::RefCounted [inline]
remove()Tp::CallContent
requestedFeatures() const Tp::ReadyObject [virtual]
setBusName(const QString &busName)Tp::DBusProxy [protected]
setInterfaces(const QStringList &interfaces)Tp::OptionalInterfaceFactory< CallContent > [inline, protected]
startDTMFTone(DTMFEvent event)Tp::CallContent
StatefulDBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::StatefulDBusProxy
stopDTMFTone()Tp::CallContent
streamAdded(const Tp::CallStreamPtr &stream)Tp::CallContent [signal]
streamRemoved(const Tp::CallStreamPtr &stream, const Tp::CallStateReason &reason)Tp::CallContent [signal]
streams() const Tp::CallContent
supportsDTMF() const Tp::CallContent
type() const Tp::CallContent
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique)Tp::StatefulDBusProxy [static]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique, QString &error, QString &message)Tp::StatefulDBusProxy [static]
~CallContent()Tp::CallContent
~DBusProxy()Tp::DBusProxy [virtual]
~Object()Tp::Object [virtual]
~OptionalInterfaceFactory()Tp::OptionalInterfaceFactory< CallContent > [inline]
~ReadyObject()Tp::ReadyObject [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]
~StatefulDBusProxy()Tp::StatefulDBusProxy [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00833.html0000644000175200001440000001341312000060453021625 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Connection::ErrorDetails Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01075.html0000644000175200001440000002663612000060453021637 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::CallStreamEndpointInterface Member List
This is the complete list of members for Tp::Client::CallStreamEndpointInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
AcceptSelectedCandidatePair(const Tp::Candidate &localCandidate, const Tp::Candidate &remoteCandidate, int timeout=-1)Tp::Client::CallStreamEndpointInterface [inline, slot]
CallStreamEndpointInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::CallStreamEndpointInterface
CallStreamEndpointInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::CallStreamEndpointInterface
CallStreamEndpointInterface(Tp::DBusProxy *proxy)Tp::Client::CallStreamEndpointInterface
CandidatePairSelected(const Tp::Candidate &localCandidate, const Tp::Candidate &remoteCandidate)Tp::Client::CallStreamEndpointInterface [signal]
ControllingChanged(bool controlling)Tp::Client::CallStreamEndpointInterface [signal]
EndpointStateChanged(uint component, uint state)Tp::Client::CallStreamEndpointInterface [signal]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::CallStreamEndpointInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
RejectSelectedCandidatePair(const Tp::Candidate &localCandidate, const Tp::Candidate &remoteCandidate, int timeout=-1)Tp::Client::CallStreamEndpointInterface [inline, slot]
RemoteCandidatesAdded(const Tp::CandidateList &candidates)Tp::Client::CallStreamEndpointInterface [signal]
RemoteCredentialsSet(const QString &username, const QString &password)Tp::Client::CallStreamEndpointInterface [signal]
requestAllProperties() const Tp::Client::CallStreamEndpointInterface [inline]
requestPropertyControlling() const Tp::Client::CallStreamEndpointInterface [inline]
requestPropertyEndpointState() const Tp::Client::CallStreamEndpointInterface [inline]
requestPropertyIsICELite() const Tp::Client::CallStreamEndpointInterface [inline]
requestPropertyRemoteCandidates() const Tp::Client::CallStreamEndpointInterface [inline]
requestPropertyRemoteCredentials() const Tp::Client::CallStreamEndpointInterface [inline]
requestPropertySelectedCandidatePairs() const Tp::Client::CallStreamEndpointInterface [inline]
requestPropertyTransport() const Tp::Client::CallStreamEndpointInterface [inline]
SetControlling(bool controlling, int timeout=-1)Tp::Client::CallStreamEndpointInterface [inline, slot]
SetEndpointState(uint component, uint state, int timeout=-1)Tp::Client::CallStreamEndpointInterface [inline, slot]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
SetSelectedCandidatePair(const Tp::Candidate &localCandidate, const Tp::Candidate &remoteCandidate, int timeout=-1)Tp::Client::CallStreamEndpointInterface [inline, slot]
staticInterfaceName()Tp::Client::CallStreamEndpointInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00832.html0000644000175200001440000004376012000060453021634 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Connection Member List
This is the complete list of members for Tp::Connection, including all inherited members.
accountBalance() const Tp::Connection
accountBalanceChanged(const Tp::CurrencyAmount &accountBalance)Tp::Connection [signal]
actualFeatures() const Tp::ReadyObject [virtual]
baseInterface() const Tp::Connection [protected]
becomeReady(const Features &requestedFeatures=Features())Tp::ReadyObject [virtual]
busName() const Tp::DBusProxy
BypassInterfaceCheck enum valueTp::OptionalInterfaceFactory< Connection >
capabilities() const Tp::Connection
channelFactory() const Tp::Connection
CheckInterfaceSupported enum valueTp::OptionalInterfaceFactory< Connection >
cmName() const Tp::Connection
Connection(const QDBusConnection &bus, const QString &busName, const QString &objectPath, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory, const Feature &coreFeature)Tp::Connection [protected]
contactFactory() const Tp::Connection
contactManager() const Tp::Connection
create(const QString &busName, const QString &objectPath, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory)Tp::Connection [static]
create(const QDBusConnection &bus, const QString &busName, const QString &objectPath, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory)Tp::Connection [static]
dbusConnection() const Tp::DBusProxy
DBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::DBusProxy
errorDetails() const Tp::Connection
FeatureAccountBalanceTp::Connection [static]
FeatureConnectedTp::Connection [static]
FeatureCoreTp::Connection [static]
FeatureRosterTp::Connection [static]
FeatureRosterGroupsTp::Connection [static]
FeatureSelfContactTp::Connection [static]
FeatureSimplePresenceTp::Connection [static]
hasInterface(const QString &name) constTp::OptionalInterfaceFactory< Connection > [inline]
interface() constTp::OptionalInterfaceFactory< Connection > [inline]
interfaces() constTp::OptionalInterfaceFactory< Connection > [inline]
InterfaceSupportedChecking enum nameTp::OptionalInterfaceFactory< Connection >
invalidate(const QString &reason, const QString &message)Tp::DBusProxy [protected]
invalidate(const QDBusError &error)Tp::DBusProxy [protected]
invalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage)Tp::DBusProxy [signal]
invalidationMessage() const Tp::DBusProxy
invalidationReason() const Tp::DBusProxy
isReady(const Features &features=Features()) const Tp::ReadyObject [virtual]
isValid() const Tp::DBusProxy
missingFeatures() const Tp::ReadyObject [virtual]
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
objectPath() const Tp::DBusProxy
optionalInterface(InterfaceSupportedChecking check=CheckInterfaceSupported) constTp::OptionalInterfaceFactory< Connection > [inline]
OptionalInterfaceFactory(Connection *this_)Tp::OptionalInterfaceFactory< Connection > [inline]
propertyChanged(const QString &propertyName)Tp::Object [signal]
protocolName() const Tp::Connection
readinessHelper() const Tp::ReadyObject [protected]
ReadyObject(RefCounted *object, const Feature &featureCore)Tp::ReadyObject
ReadyObject(DBusProxy *proxy, const Feature &featureCore)Tp::ReadyObject
RefCounted()Tp::RefCounted [inline]
requestedFeatures() const Tp::ReadyObject [virtual]
selfContact() const Tp::Connection
selfContactChanged()Tp::Connection [signal]
selfHandle() const Tp::Connection
selfHandleChanged(uint newHandle)Tp::Connection [signal]
setBusName(const QString &busName)Tp::DBusProxy [protected]
setInterfaces(const QStringList &interfaces)Tp::OptionalInterfaceFactory< Connection > [inline, protected]
StatefulDBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::StatefulDBusProxy
status() const Tp::Connection
statusChanged(Tp::ConnectionStatus newStatus)Tp::Connection [signal]
statusReason() const Tp::Connection
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique)Tp::StatefulDBusProxy [static]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique, QString &error, QString &message)Tp::StatefulDBusProxy [static]
~Connection()Tp::Connection [virtual]
~DBusProxy()Tp::DBusProxy [virtual]
~Object()Tp::Object [virtual]
~OptionalInterfaceFactory()Tp::OptionalInterfaceFactory< Connection > [inline]
~ReadyObject()Tp::ReadyObject [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]
~StatefulDBusProxy()Tp::StatefulDBusProxy [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00140.html0000644000175200001440000020422312000060453021615 0ustar00collabora-develusers00000000000000 Tp::Client::ChannelTypeCallInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

#include <TelepathyQt/Channel>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

  • QDBusPendingReply SetRinging (int timeout=-1)
  • QDBusPendingReply SetQueued (int timeout=-1)
  • QDBusPendingReply Accept (int timeout=-1)
  • QDBusPendingReply Hangup (uint reason, const QString &detailedHangupReason, const QString &message, int timeout=-1)
  • QDBusPendingReply
    < QDBusObjectPath > AddContent (const QString &contentName, uint contentType, uint initialDirection, int timeout=-1)

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Channel.Type.Call1".


Constructor & Destructor Documentation

Tp::Client::ChannelTypeCallInterface::ChannelTypeCallInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelTypeCallInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ChannelTypeCallInterface::ChannelTypeCallInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelTypeCallInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ChannelTypeCallInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ChannelTypeCallInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ChannelTypeCallInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

static QLatin1String Tp::Client::ChannelTypeCallInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Channel.Type.Call1", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property Contents of type Tp::ObjectPathList.

The list of CallContentInterface objects that are part of this call. Change notification is via the ContentAdded() and ContentRemoved() signals.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property CallStateDetails of type QVariantMap.

A map used to provide optional extensible details for the CallState , CallFlags and/or CallStateReason .

Well-known keys and their corresponding value types include:

hangup-message - s
An optional human-readable message sent when the call was ended, corresponding to the Message argument to the Hangup() method. This is only applicable when the call state is Ended.
XMPP Jingle can send such messages.
queue-message - s
An optional human-readable message sent when the local contact is being held in a queue. This is only applicable when Locally_Queued is in the call flags.
SIP 182 notifications can have human-readable messages attached.
debug-message - s
A message giving further details of any error indicated by the CallStateReason . This will not normally be localized or suitable for display to users, and is only applicable when the call state is Ended.
balance-required - i
Optionally included when a call cannot be connected because there is InsufficientBalance, indicating what the required balance would be to place this call. The value of this key has the same units and scale as ConnectionInterfaceBalanceInterface::AccountBalance .
forwarded-to - u
Optionally included when the CallStateReason is Forwarded. It indicates the handle to whom the Call was forwarded.
forwarded-to-id - s
The string that would result from inspecting the forwarded-to key (i.e. the contact's identifier in the IM protocol).
Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property CallState of type uint.

The current high-level state of this call. The CallFlags provide additional information, and the CallStateReason and CallStateDetails explain the reason for the current values for those properties.

Note that when in a conference call, this property is purely to show your state in joining the call. The receiver (or remote contact) in this context is the conference server itself. The property does not change when other call members' states change.

Clients MAY consider unknown values in this property to be an error.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property CallFlags of type uint.

Flags representing the status of the call as a whole, providing more specific information than the CallState .

Clients are expected to ignore unknown flags in this property, without error.

When an ongoing call is active and not on hold or has any other problems, this property will be 0.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property CallStateReason of type Tp::CallStateReason.

The reason for the last change to the CallState and/or CallFlags . The CallStateDetails MAY provide additional information.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property HardwareStreaming of type bool.

If this property is True, all of the media streaming is done by some mechanism outside the scope of Telepathy.

A connection manager might be intended for a specialized hardware device, which will take care of the audio streaming (e.g. telepathy-yafono, which uses GSM hardware which does the actual audio streaming for the call).

If this is False, the handler is responsible for doing the actual media streaming for at least some contents itself. Those contents will have the CallContentInterfaceMediaInterface interface, to communicate the necessary information to a streaming implementation. Connection managers SHOULD operate like this, if possible.

Many connection managers (such as telepathy-gabble) only do the call signalling, and expect the client to do the actual streaming using something like Farsight, to improve latency and allow better UI integration.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property CallMembers of type Tp::CallMemberMap.

A mapping from the remote contacts that are part of this call to flags describing their status. This mapping never has the local user's handle as a key.

When the call ends, this property should be an empty list, and notified with CallMembersChanged()

If the Call implements ChannelInterfaceGroupInterface and the Group members are channel-specific handles, then this call SHOULD also use channel-specific handles.

Anonymous members are exposed as channel-specific handles with no owner.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property MemberIdentifiers of type Tp::HandleIdentifierMap.

The string identifiers for handles mentioned in CallMembers, to give clients the minimal information necessary to create contacts without waiting for round-trips.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property InitialTransport of type uint.

If set on a requested channel, this indicates the transport that should be used for this call. Where not applicable, this property is defined to be Unknown, in particular, on CMs with hardware streaming.

When implementing a voip gateway one wants the outgoing leg of the gatewayed to have the same transport as the incoming leg. This property allows the gateway to request a Call with the right transport from the CM.
Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property InitialAudio of type bool.

If set to True in a channel request that will create a new channel, the connection manager should immediately attempt to establish an audio stream to the remote contact, making it unnecessary for the client to call ChannelTypeCallInterface::AddContent() .

If this property, or InitialVideo, is passed to EnsureChannel (as opposed to CreateChannel), the connection manager SHOULD ignore these properties when checking whether it can return an existing channel as suitable; these properties only become significant when the connection manager has decided to create a new channel.

If True on a requested channel, this indicates that the audio stream has already been requested and the client does not need to call RequestStreams, although it MAY still do so.

If True on an unrequested (incoming) channel, this indicates that the remote contact initially requested an audio stream; this does not imply that that audio stream is still active (as indicated by ChannelTypeCallInterface::Contents ).

The name of this new content can be decided by using the InitialAudioName property.

Connection managers that support the ConnectionInterfaceContactCapabilitiesInterface interface SHOULD represent the capabilities of receiving audio and/or video calls by including a channel class in a contact's capabilities with ChannelType = Call in the fixed properties dictionary, and InitialAudio and/or InitialVideo in the allowed properties list. Clients wishing to discover whether a particular contact is likely to be able to receive audio and/or video calls SHOULD use this information.

Not all clients support video calls, and it would also be possible (although unlikely) to have a client which could only stream video, not audio.

Clients that are willing to receive audio and/or video calls SHOULD include the following among their channel classes if calling ConnectionInterfaceContactCapabilitiesInterface::UpdateCapabilities() (clients of a ChannelDispatcherInterface SHOULD instead arrange for the ChannelDispatcher to do this, by including the filters in their ClientHandlerInterface::HandlerChannelFilter properties):

  • { ChannelType = Call }
  • { ChannelType = Call, InitialAudio = True } if receiving calls with audio is supported
  • { ChannelType = Call, InitialVideo = True } if receiving calls with video is supported

Connection managers for protocols with capability discovery, like XMPP, need this information to advertise the appropriate capabilities for their protocol.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property InitialVideo of type bool.

The same as InitialAudio , but for a video stream. This property is immutable (cannot change).

In particular, note that if this property is False, this does not imply that an active video stream has not been added, only that no video stream was active at the time the channel appeared.

This property is the correct way to discover whether connection managers, contacts etc. support video calls; it appears in capabilities structures in the same way as InitialAudio.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property InitialAudioName of type QString.

If InitialAudio is set to True, then this property will name the intial audio content with the value of this property.

Content names are meant to be significant, but if no name can be given to initial audio content, then its name cannot be meaningful or even localized.

If this property is empty or missing from the channel request and InitialAudio is True, then the CM must come up with a sensible for the content, such as "audio".

If the protocol has no concept of stream names then this property will not show up in the allowed properties list of the Requestable Channel Classes for call channels.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property InitialVideoName of type QString.

The same as InitialAudioName , but for a video stream created by setting InitialVideo to True. This property is immutable and so cannot change.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property MutableContents of type bool.

If True, a stream of a different content type can be added after the Channel has been requested

If this property is missing, clients SHOULD assume that it is False, and thus that the channel's streams cannot be changed once the call has started.

If this property isn't present in the "allowed" set in any of the Call entries contact capabilities, then user interfaces MAY choose to show a separate "call" option for each class of call.

For example, once an audio-only Google Talk call has started, it is not possible to add a video stream; both audio and video must be requested at the start of the call if video is desired. User interfaces may use this pseudo-capability as a hint to display separate "Audio call" and "Video call" buttons, rather than a single "Call1" button with the option to add and remove video once the call has started for contacts without this flag.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::ChannelTypeCallInterface::SetRinging ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method SetRinging on the remote object.

Indicate that the local user has been alerted about the incoming call.

This method is only useful if the channel's ChannelInterface::Requested property is False, and the CallState is Initialised (an incoming call is ready and waiting for the user to be notified). Calling this method SHOULD set CallFlags ' bit Locally_Ringing, and notify the remote contact that the local user has been alerted (if the protocol supports this); repeated calls to this method SHOULD succeed, but have no further effect.

In all other states, this method SHOULD fail with the error NotAvailable.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ChannelTypeCallInterface::SetQueued ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method SetQueued on the remote object.

Notifies the CM that the local user is already in a call, so this call has been put in a call-waiting style queue.

This method is only useful if the channel's ChannelInterface::Requested property is False, and the CallState is Initialising or Initialised. Calling this method SHOULD set CallFlags ' bit Locally_Queued, and notify the remote contact that the call is in a queue (if the protocol supports this); repeated calls to this method SHOULD succeed, but have no further effect.

Locally_Queued is a little like Locally_Held, but applies to calls that have not been Accepted (the Locally_Queued flag should be unset by the CM when Accept is called). It should also be set in response to the state of the world, rather than in response to user action.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ChannelTypeCallInterface::Accept ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method Accept on the remote object.

For incoming calls in state Initialised, accept the incoming call. This changes the CallState to Accepted.

For outgoing calls in state Pending_Initiator, actually call the remote contact; this changes the CallState to Initialising.

Otherwise, this method SHOULD fail with the error NotAvailable.

This method should be called exactly once per Call, by whatever client (user interface) is handling the channel.

When this method is called, for each CallContentInterface whose CallContentInterface::Disposition is Initial, any streams where the CallStreamInterface::LocalSendingState is Pending_Send will be moved to Sending as if CallStreamInterface::SetSending() (True) had been called.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ChannelTypeCallInterface::Hangup ( uint  reason,
const QString &  detailedHangupReason,
const QString &  message,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method Hangup on the remote object.

Request that the call is ended. All contents will be removed from the Call so that the Contents property will be the empty list.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
reasonA generic hangup reason.
detailedHangupReasonA more specific reason for the call hangup, if one is available, or an empty string otherwise.
messageA human-readable message to be sent to the remote contact(s). XMPP Jingle allows calls to be terminated with a human-readable message.
timeoutThe timeout in milliseconds.
QDBusPendingReply<QDBusObjectPath> Tp::Client::ChannelTypeCallInterface::AddContent ( const QString &  contentName,
uint  contentType,
uint  initialDirection,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method AddContent on the remote object.

Request that a new Content of type Content_Type is added to the Call1. Handlers should check the value of the MutableContents property before trying to add another content as it might not be allowed.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
contentNameThe suggested name of the content to add. The content name property should be meaningful, so should be given a name which is significant to the user. The name could be a localized "audio", "video" or perhaps include some string identifying the source, such as a webcam identifier. If there is already a content with the same name as this property then a sensible suffix should be added. For example, if this argument is "audio" but a content of the same name already exists, a sensible suffix such as " (1)" is appended to name the new content "audio (1)". A further content with the name "audio" would then be named "audio (2)".
contentTypeThe media stream type of the content to be added to the call.
initialDirectionThe requested initial direction of the new content.
timeoutThe timeout in milliseconds.
Returns:

Path to the newly-created Call1.Content object.

void Tp::Client::ChannelTypeCallInterface::ContentAdded ( const QDBusObjectPath &  content) [signal]

Represents the signal ContentAdded on the remote object.

Emitted when a new CallContentInterface is added to the call.

Parameters:
contentPath to the newly-created Content object.
void Tp::Client::ChannelTypeCallInterface::ContentRemoved ( const QDBusObjectPath &  content,
const Tp::CallStateReason reason 
) [signal]

Represents the signal ContentRemoved on the remote object.

Emitted when a CallContentInterface is removed from the call.

Parameters:
contentThe Content which was removed.
reasonWhy the content was removed.
void Tp::Client::ChannelTypeCallInterface::CallStateChanged ( uint  callState,
uint  callFlags,
const Tp::CallStateReason callStateReason,
const QVariantMap &  callStateDetails 
) [signal]

Represents the signal CallStateChanged on the remote object.

Emitted when the state of the call as a whole changes.

This signal is emitted for any change in the properties corresponding to its arguments, even if the other properties referenced remain unchanged.

Parameters:
callStateThe new value of the CallState property.
callFlagsThe new value of the CallFlags property.
callStateReasonThe new value of the CallStateReason property.
callStateDetailsThe new value of the CallStateDetails property.
void Tp::Client::ChannelTypeCallInterface::CallMembersChanged ( const Tp::CallMemberMap flagsChanged,
const Tp::HandleIdentifierMap identifiers,
const Tp::UIntList removed,
const Tp::CallStateReason reason 
) [signal]

Represents the signal CallMembersChanged on the remote object.

Emitted when the CallMembers property changes in any way, either because contacts have been added to the call, contacts have been removed from the call, or contacts' flags have changed.

Parameters:
flagsChangedA map from members of the call to their new call member flags, including at least the members who have been added to CallMembers, and the members whose flags have changed.
identifiers The identifiers of the contacts in the Flags_Changed map.
removedA list of members who have left the call, i.e. keys to be removed from CallMembers.
reasonA structured reason for the change.
void Tp::Client::ChannelTypeCallInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00602_source.html0000644000175200001440000001360312000060453023200 0ustar00collabora-develusers00000000000000 manager-file.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
manager-file.h
00001 
00023 #ifndef _TelepathyQt_manager_file_h_HEADER_GUARD_
00024 #define _TelepathyQt_manager_file_h_HEADER_GUARD_
00025 
00026 #include <TelepathyQt/AvatarSpec>
00027 #include <TelepathyQt/PresenceSpec>
00028 #include <TelepathyQt/Types>
00029 
00030 #include <QMetaType>
00031 #include <QVariant>
00032 
00033 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00034 
00035 namespace Tp
00036 {
00037 
00038 class TP_QT_NO_EXPORT ManagerFile
00039 {
00040 public:
00041     ManagerFile();
00042     ManagerFile(const ManagerFile &other);
00043     ManagerFile(const QString &cmName);
00044     ~ManagerFile();
00045 
00046     ManagerFile &operator=(const ManagerFile &other);
00047 
00048     QString cmName() const;
00049 
00050     bool isValid() const;
00051     QStringList protocols() const;
00052     ParamSpecList parameters(const QString &protocol) const;
00053     QString vcardField(const QString &protocol) const;
00054     QString englishName(const QString &protocol) const;
00055     QString iconName(const QString &protocol) const;
00056     RequestableChannelClassList requestableChannelClasses(
00057             const QString &protocol) const;
00058     PresenceSpecList allowedPresenceStatuses(const QString &protocol) const;
00059     AvatarSpec avatarRequirements(const QString &protocol) const;
00060     QStringList addressableVCardFields(const QString &protocol) const;
00061     QStringList addressableUriSchemes(const QString &protocol) const;
00062 
00063 private:
00064     struct Private;
00065     friend struct Private;
00066     Private *mPriv;
00067 };
00068 
00069 }
00070 
00071 Q_DECLARE_METATYPE(Tp::ManagerFile);
00072 
00073 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
00074 
00075 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01009.html0000644000175200001440000000432712000060453021625 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::NotDelegatedError Member List
This is the complete list of members for Tp::NotDelegatedError, including all inherited members.
errorMessageTp::NotDelegatedError
errorNameTp::NotDelegatedError


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01070.html0000644000175200001440000002104712000060453021621 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::CallContentInterface Member List
This is the complete list of members for Tp::Client::CallContentInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
CallContentInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::CallContentInterface
CallContentInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::CallContentInterface
CallContentInterface(Tp::DBusProxy *proxy)Tp::Client::CallContentInterface
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::CallContentInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
Remove(int timeout=-1)Tp::Client::CallContentInterface [inline, slot]
requestAllProperties() const Tp::Client::CallContentInterface [inline]
requestPropertyDisposition() const Tp::Client::CallContentInterface [inline]
requestPropertyInterfaces() const Tp::Client::CallContentInterface [inline]
requestPropertyName() const Tp::Client::CallContentInterface [inline]
requestPropertyStreams() const Tp::Client::CallContentInterface [inline]
requestPropertyType() const Tp::Client::CallContentInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::CallContentInterface [inline, static]
StreamsAdded(const Tp::ObjectPathList &streams)Tp::Client::CallContentInterface [signal]
StreamsRemoved(const Tp::ObjectPathList &streams, const Tp::CallStateReason &reason)Tp::Client::CallContentInterface [signal]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00484_source.html0000644000175200001440000001320112000060453023202 0ustar00collabora-develusers00000000000000 cli-account-manager-body.hpp Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-account-manager-body.hpp
00001 #define IN_TP_QT_HEADER
00002 #include "TelepathyQt/account-manager.h"
00003 
00004 namespace Tp
00005 {
00006 namespace Client
00007 {
00008 
00009 AccountManagerInterface::AccountManagerInterface(const QString& busName, const QString& objectPath, QObject *parent)
00010     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00011 {
00012 }
00013 
00014 AccountManagerInterface::AccountManagerInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00015     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00016 {
00017 }
00018 
00019 AccountManagerInterface::AccountManagerInterface(Tp::DBusProxy *proxy)
00020     : Tp::AbstractInterface(proxy, staticInterfaceName())
00021 {
00022 }
00023 
00024 void AccountManagerInterface::invalidate(Tp::DBusProxy *proxy,
00025         const QString &error, const QString &message)
00026 {
00027     disconnect(this, SIGNAL(AccountRemoved(const QDBusObjectPath&)), NULL, NULL);
00028     disconnect(this, SIGNAL(AccountValidityChanged(const QDBusObjectPath&, bool)), NULL, NULL);
00029 
00030     Tp::AbstractInterface::invalidate(proxy, error, message);
00031 }
00032 }
00033 }


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01065.html0000644000175200001440000002053612000060453021627 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::AccountInterfaceStorageInterface Member List
This is the complete list of members for Tp::Client::AccountInterfaceStorageInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
AccountInterfaceStorageInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::AccountInterfaceStorageInterface
AccountInterfaceStorageInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::AccountInterfaceStorageInterface
AccountInterfaceStorageInterface(Tp::DBusProxy *proxy)Tp::Client::AccountInterfaceStorageInterface
AccountInterfaceStorageInterface(const Tp::Client::AccountInterface &mainInterface)Tp::Client::AccountInterfaceStorageInterface [explicit]
AccountInterfaceStorageInterface(const Tp::Client::AccountInterface &mainInterface, QObject *parent)Tp::Client::AccountInterfaceStorageInterface
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::AccountInterfaceStorageInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::AccountInterfaceStorageInterface [inline]
requestPropertyStorageIdentifier() const Tp::Client::AccountInterfaceStorageInterface [inline]
requestPropertyStorageProvider() const Tp::Client::AccountInterfaceStorageInterface [inline]
requestPropertyStorageRestrictions() const Tp::Client::AccountInterfaceStorageInterface [inline]
requestPropertyStorageSpecificInformation() const Tp::Client::AccountInterfaceStorageInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::AccountInterfaceStorageInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00195.html0000644000175200001440000001175612000060453021636 0ustar00collabora-develusers00000000000000 Tp::ContactClientTypes Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactClientTypes Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<uint, QStringList>, but needed to have a discrete type in the Qt type system.

A mapping from contact handle to client types.


Constructor & Destructor Documentation

Tp::ContactClientTypes::ContactClientTypes ( const QMap< uint, QStringList > &  a) [inline]

Member Function Documentation

ContactClientTypes& Tp::ContactClientTypes::operator= ( const QMap< uint, QStringList > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_func_0x77.html0000644000175200001440000000323012000060453024613 0ustar00collabora-develusers00000000000000 Class Members - Functions
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- w -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00499_source.html0000644000175200001440000004521412000060453023221 0ustar00collabora-develusers00000000000000 cli-channel-dispatcher.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-channel-dispatcher.h
00001 /*
00002  * This file contains D-Bus client proxy classes generated by qt-client-gen.py.
00003  *
00004  * This file can be distributed under the same terms as the specification from
00005  * which it was generated.
00006  */
00007 
00008 #ifndef IN_TP_QT_HEADER
00009 #error IN_TP_QT_HEADER
00010 #endif
00011 
00012 #include <TelepathyQt/Types>
00013 
00014 #include <QtGlobal>
00015 
00016 #include <QString>
00017 #include <QObject>
00018 #include <QVariant>
00019 
00020 #include <QDBusPendingReply>
00021 
00022 #include <TelepathyQt/AbstractInterface>
00023 #include <TelepathyQt/DBusProxy>
00024 #include <TelepathyQt/Global>
00025 
00026 namespace Tp
00027 {
00028 class PendingVariant;
00029 class PendingOperation;
00030 }
00031 
00032 namespace Tp
00033 {
00034 namespace Client
00035 {
00036 
00044 class TP_QT_EXPORT ChannelDispatcherInterface : public Tp::AbstractInterface
00045 {
00046     Q_OBJECT
00047 
00048 public:
00055     static inline QLatin1String staticInterfaceName()
00056     {
00057         return QLatin1String("org.freedesktop.Telepathy.ChannelDispatcher");
00058     }
00059 
00067     ChannelDispatcherInterface(
00068         const QString& busName,
00069         const QString& objectPath,
00070         QObject* parent = 0
00071     );
00072 
00081     ChannelDispatcherInterface(
00082         const QDBusConnection& connection,
00083         const QString& busName,
00084         const QString& objectPath,
00085         QObject* parent = 0
00086     );
00087 
00094     ChannelDispatcherInterface(Tp::DBusProxy *proxy);
00095 
00105     inline Tp::PendingVariant *requestPropertyInterfaces() const
00106     {
00107         return internalRequestProperty(QLatin1String("Interfaces"));
00108     }
00109 
00123     inline Tp::PendingVariant *requestPropertySupportsRequestHints() const
00124     {
00125         return internalRequestProperty(QLatin1String("SupportsRequestHints"));
00126     }
00127 
00134     Tp::PendingVariantMap *requestAllProperties() const
00135     {
00136         return internalRequestAllProperties();
00137     }
00138 
00139 public Q_SLOTS:
00197     inline QDBusPendingReply<QDBusObjectPath> CreateChannel(const QDBusObjectPath& account, const QVariantMap& requestedProperties, qlonglong userActionTime, const QString& preferredHandler, int timeout = -1)
00198     {
00199         if (!invalidationReason().isEmpty()) {
00200             return QDBusPendingReply<QDBusObjectPath>(QDBusMessage::createError(
00201                 invalidationReason(),
00202                 invalidationMessage()
00203             ));
00204         }
00205 
00206         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00207                 this->staticInterfaceName(), QLatin1String("CreateChannel"));
00208         callMessage << QVariant::fromValue(account) << QVariant::fromValue(requestedProperties) << QVariant::fromValue(userActionTime) << QVariant::fromValue(preferredHandler);
00209         return this->connection().asyncCall(callMessage, timeout);
00210     }
00211 
00267     inline QDBusPendingReply<QDBusObjectPath> EnsureChannel(const QDBusObjectPath& account, const QVariantMap& requestedProperties, qlonglong userActionTime, const QString& preferredHandler, int timeout = -1)
00268     {
00269         if (!invalidationReason().isEmpty()) {
00270             return QDBusPendingReply<QDBusObjectPath>(QDBusMessage::createError(
00271                 invalidationReason(),
00272                 invalidationMessage()
00273             ));
00274         }
00275 
00276         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00277                 this->staticInterfaceName(), QLatin1String("EnsureChannel"));
00278         callMessage << QVariant::fromValue(account) << QVariant::fromValue(requestedProperties) << QVariant::fromValue(userActionTime) << QVariant::fromValue(preferredHandler);
00279         return this->connection().asyncCall(callMessage, timeout);
00280     }
00281 
00414     inline QDBusPendingReply<QDBusObjectPath> CreateChannelWithHints(const QDBusObjectPath& account, const QVariantMap& requestedProperties, qlonglong userActionTime, const QString& preferredHandler, const QVariantMap& hints, int timeout = -1)
00415     {
00416         if (!invalidationReason().isEmpty()) {
00417             return QDBusPendingReply<QDBusObjectPath>(QDBusMessage::createError(
00418                 invalidationReason(),
00419                 invalidationMessage()
00420             ));
00421         }
00422 
00423         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00424                 this->staticInterfaceName(), QLatin1String("CreateChannelWithHints"));
00425         callMessage << QVariant::fromValue(account) << QVariant::fromValue(requestedProperties) << QVariant::fromValue(userActionTime) << QVariant::fromValue(preferredHandler) << QVariant::fromValue(hints);
00426         return this->connection().asyncCall(callMessage, timeout);
00427     }
00428 
00534     inline QDBusPendingReply<QDBusObjectPath> EnsureChannelWithHints(const QDBusObjectPath& account, const QVariantMap& requestedProperties, qlonglong userActionTime, const QString& preferredHandler, const QVariantMap& hints, int timeout = -1)
00535     {
00536         if (!invalidationReason().isEmpty()) {
00537             return QDBusPendingReply<QDBusObjectPath>(QDBusMessage::createError(
00538                 invalidationReason(),
00539                 invalidationMessage()
00540             ));
00541         }
00542 
00543         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00544                 this->staticInterfaceName(), QLatin1String("EnsureChannelWithHints"));
00545         callMessage << QVariant::fromValue(account) << QVariant::fromValue(requestedProperties) << QVariant::fromValue(userActionTime) << QVariant::fromValue(preferredHandler) << QVariant::fromValue(hints);
00546         return this->connection().asyncCall(callMessage, timeout);
00547     }
00548 
00628     inline QDBusPendingReply<Tp::ObjectPathList, Tp::NotDelegatedMap> DelegateChannels(const Tp::ObjectPathList& channels, qlonglong userActionTime, const QString& preferredHandler, int timeout = -1)
00629     {
00630         if (!invalidationReason().isEmpty()) {
00631             return QDBusPendingReply<Tp::ObjectPathList, Tp::NotDelegatedMap>(QDBusMessage::createError(
00632                 invalidationReason(),
00633                 invalidationMessage()
00634             ));
00635         }
00636 
00637         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00638                 this->staticInterfaceName(), QLatin1String("DelegateChannels"));
00639         callMessage << QVariant::fromValue(channels) << QVariant::fromValue(userActionTime) << QVariant::fromValue(preferredHandler);
00640         return this->connection().asyncCall(callMessage, timeout);
00641     }
00642 
00678     inline QDBusPendingReply<> PresentChannel(const QDBusObjectPath& channel, qlonglong userActionTime, int timeout = -1)
00679     {
00680         if (!invalidationReason().isEmpty()) {
00681             return QDBusPendingReply<>(QDBusMessage::createError(
00682                 invalidationReason(),
00683                 invalidationMessage()
00684             ));
00685         }
00686 
00687         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00688                 this->staticInterfaceName(), QLatin1String("PresentChannel"));
00689         callMessage << QVariant::fromValue(channel) << QVariant::fromValue(userActionTime);
00690         return this->connection().asyncCall(callMessage, timeout);
00691     }
00692 
00693 protected:
00694     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
00695 };
00696 }
00697 }
00698 Q_DECLARE_METATYPE(Tp::Client::ChannelDispatcherInterface*)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00215.html0000644000175200001440000001336612000060453021626 0ustar00collabora-develusers00000000000000 Tp::DBusObject Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

A QObject on which low-level D-Bus adaptors are plugged to provide a D-Bus object. More...

#include <TelepathyQt/DBusObject>

List of all members.

Public Member Functions


Detailed Description

A QObject on which low-level D-Bus adaptors are plugged to provide a D-Bus object.


Constructor & Destructor Documentation

Tp::DBusObject::DBusObject ( const QDBusConnection &  dbusConnection,
QObject *  parent = 0 
)

Construct a DBusObject that operates on the given dbusConnection.

Parameters:
dbusConnectionThe D-Bus connection to use.
parentThe QObject parent of this instance.

Class destructor.


Member Function Documentation

QDBusConnection Tp::DBusObject::dbusConnection ( ) const

Return the D-Bus connection associated with this object.

Returns:
The D-Bus connection associated with this object.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00851.html0000644000175200001440000002522712000060453021633 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::DebugReceiver Member List
This is the complete list of members for Tp::DebugReceiver, including all inherited members.
actualFeatures() const Tp::ReadyObject [virtual]
becomeReady(const Features &requestedFeatures=Features())Tp::ReadyObject [virtual]
busName() const Tp::DBusProxy
create(const QString &busName, const QDBusConnection &bus=QDBusConnection::sessionBus())Tp::DebugReceiver [static]
dbusConnection() const Tp::DBusProxy
DBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::DBusProxy
DebugReceiver(const QDBusConnection &bus, const QString &busName)Tp::DebugReceiver [protected]
FeatureCoreTp::DebugReceiver [static]
fetchMessages()Tp::DebugReceiver
invalidate(const QString &reason, const QString &message)Tp::DBusProxy [protected]
invalidate(const QDBusError &error)Tp::DBusProxy [protected]
invalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage)Tp::DBusProxy [signal]
invalidationMessage() const Tp::DBusProxy
invalidationReason() const Tp::DBusProxy
isReady(const Features &features=Features()) const Tp::ReadyObject [virtual]
isValid() const Tp::DBusProxy
missingFeatures() const Tp::ReadyObject [virtual]
newDebugMessage(const Tp::DebugMessage &message)Tp::DebugReceiver [signal]
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
objectPath() const Tp::DBusProxy
propertyChanged(const QString &propertyName)Tp::Object [signal]
readinessHelper() const Tp::ReadyObject [protected]
ReadyObject(RefCounted *object, const Feature &featureCore)Tp::ReadyObject
ReadyObject(DBusProxy *proxy, const Feature &featureCore)Tp::ReadyObject
RefCounted()Tp::RefCounted [inline]
requestedFeatures() const Tp::ReadyObject [virtual]
setBusName(const QString &busName)Tp::DBusProxy [protected]
setMonitoringEnabled(bool enabled)Tp::DebugReceiver
StatefulDBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::StatefulDBusProxy
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique)Tp::StatefulDBusProxy [static]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique, QString &error, QString &message)Tp::StatefulDBusProxy [static]
~DBusProxy()Tp::DBusProxy [virtual]
~DebugReceiver()Tp::DebugReceiver [virtual]
~Object()Tp::Object [virtual]
~ReadyObject()Tp::ReadyObject [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]
~StatefulDBusProxy()Tp::StatefulDBusProxy [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00849.html0000644000175200001440000001203612000060453021634 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AbstractDBusServiceInterface Member List
This is the complete list of members for Tp::AbstractDBusServiceInterface, including all inherited members.
AbstractDBusServiceInterface(const QString &interfaceName)Tp::AbstractDBusServiceInterface
createAdaptor()=0Tp::AbstractDBusServiceInterface [protected, pure virtual]
dbusObject() const Tp::AbstractDBusServiceInterface
immutableProperties() const =0Tp::AbstractDBusServiceInterface [pure virtual]
interfaceName() const Tp::AbstractDBusServiceInterface
isRegistered() const Tp::AbstractDBusServiceInterface
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
propertyChanged(const QString &propertyName)Tp::Object [signal]
RefCounted()Tp::RefCounted [inline]
registerInterface(DBusObject *dbusObject)Tp::AbstractDBusServiceInterface [protected, virtual]
~AbstractDBusServiceInterface()Tp::AbstractDBusServiceInterface [virtual]
~Object()Tp::Object [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00947.html0000644000175200001440000000744712000060453021645 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::StreamTubeServer::RemoteContact Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00784.html0000644000175200001440000001134112000060453021630 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AvatarSpec Member List
This is the complete list of members for Tp::AvatarSpec, including all inherited members.
AvatarSpec()Tp::AvatarSpec
AvatarSpec(const QStringList &supportedMimeTypes, uint minHeight, uint maxHeight, uint recommendedHeight, uint minWidth, uint maxWidth, uint recommendedWidth, uint maxBytes)Tp::AvatarSpec
AvatarSpec(const AvatarSpec &other)Tp::AvatarSpec
isValid() const Tp::AvatarSpec [inline]
maximumBytes() const Tp::AvatarSpec
maximumHeight() const Tp::AvatarSpec
maximumWidth() const Tp::AvatarSpec
minimumHeight() const Tp::AvatarSpec
minimumWidth() const Tp::AvatarSpec
operator=(const AvatarSpec &other)Tp::AvatarSpec
recommendedHeight() const Tp::AvatarSpec
recommendedWidth() const Tp::AvatarSpec
supportedMimeTypes() const Tp::AvatarSpec
~AvatarSpec()Tp::AvatarSpec


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00791.html0000644000175200001440000001524312000060453021633 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::BaseProtocolPresenceInterface Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00510_source.html0000644000175200001440000014405312000060453023202 0ustar00collabora-develusers00000000000000 cli-dbus.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-dbus.h
00001 /*
00002  * This file contains D-Bus client proxy classes generated by qt-client-gen.py.
00003  *
00004  * This file can be distributed under the same terms as the specification from
00005  * which it was generated.
00006  */
00007 
00008 #ifndef IN_TP_QT_HEADER
00009 #error IN_TP_QT_HEADER
00010 #endif
00011 
00012 #include <TelepathyQt/Types>
00013 
00014 #include <QtGlobal>
00015 
00016 #include <QString>
00017 #include <QObject>
00018 #include <QVariant>
00019 
00020 #include <QDBusPendingReply>
00021 
00022 #include <TelepathyQt/AbstractInterface>
00023 #include <TelepathyQt/DBusProxy>
00024 #include <TelepathyQt/Global>
00025 
00026 namespace Tp
00027 {
00028 class PendingVariant;
00029 class PendingOperation;
00030 }
00031 
00032 namespace Tp
00033 {
00034 namespace Client
00035 {
00036 namespace DBus
00037 {
00038 
00046 class TP_QT_EXPORT DBusDaemonInterface : public Tp::AbstractInterface
00047 {
00048     Q_OBJECT
00049 
00050 public:
00057     static inline QLatin1String staticInterfaceName()
00058     {
00059         return QLatin1String("org.freedesktop.DBus");
00060     }
00061 
00069     DBusDaemonInterface(
00070         const QString& busName,
00071         const QString& objectPath,
00072         QObject* parent = 0
00073     );
00074 
00083     DBusDaemonInterface(
00084         const QDBusConnection& connection,
00085         const QString& busName,
00086         const QString& objectPath,
00087         QObject* parent = 0
00088     );
00089 
00096     DBusDaemonInterface(Tp::DBusProxy *proxy);
00097 
00105     explicit DBusDaemonInterface(const Tp::AbstractInterface& mainInterface);
00106 
00114     DBusDaemonInterface(const Tp::AbstractInterface& mainInterface, QObject* parent);
00115 
00122     Tp::PendingVariantMap *requestAllProperties() const
00123     {
00124         return internalRequestAllProperties();
00125     }
00126 
00127 public Q_SLOTS:
00136     inline QDBusPendingReply<QString> Hello(int timeout = -1)
00137     {
00138         if (!invalidationReason().isEmpty()) {
00139             return QDBusPendingReply<QString>(QDBusMessage::createError(
00140                 invalidationReason(),
00141                 invalidationMessage()
00142             ));
00143         }
00144 
00145         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00146                 this->staticInterfaceName(), QLatin1String("Hello"));
00147         return this->connection().asyncCall(callMessage, timeout);
00148     }
00149 
00158     inline QDBusPendingReply<uint> RequestName(const QString& name, uint flags, int timeout = -1)
00159     {
00160         if (!invalidationReason().isEmpty()) {
00161             return QDBusPendingReply<uint>(QDBusMessage::createError(
00162                 invalidationReason(),
00163                 invalidationMessage()
00164             ));
00165         }
00166 
00167         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00168                 this->staticInterfaceName(), QLatin1String("RequestName"));
00169         callMessage << QVariant::fromValue(name) << QVariant::fromValue(flags);
00170         return this->connection().asyncCall(callMessage, timeout);
00171     }
00172 
00181     inline QDBusPendingReply<uint> ReleaseName(const QString& name, int timeout = -1)
00182     {
00183         if (!invalidationReason().isEmpty()) {
00184             return QDBusPendingReply<uint>(QDBusMessage::createError(
00185                 invalidationReason(),
00186                 invalidationMessage()
00187             ));
00188         }
00189 
00190         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00191                 this->staticInterfaceName(), QLatin1String("ReleaseName"));
00192         callMessage << QVariant::fromValue(name);
00193         return this->connection().asyncCall(callMessage, timeout);
00194     }
00195 
00204     inline QDBusPendingReply<uint> StartServiceByName(const QString& service, uint flags, int timeout = -1)
00205     {
00206         if (!invalidationReason().isEmpty()) {
00207             return QDBusPendingReply<uint>(QDBusMessage::createError(
00208                 invalidationReason(),
00209                 invalidationMessage()
00210             ));
00211         }
00212 
00213         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00214                 this->staticInterfaceName(), QLatin1String("StartServiceByName"));
00215         callMessage << QVariant::fromValue(service) << QVariant::fromValue(flags);
00216         return this->connection().asyncCall(callMessage, timeout);
00217     }
00218 
00227     inline QDBusPendingReply<bool> NameHasOwner(const QString& nameToCheck, int timeout = -1)
00228     {
00229         if (!invalidationReason().isEmpty()) {
00230             return QDBusPendingReply<bool>(QDBusMessage::createError(
00231                 invalidationReason(),
00232                 invalidationMessage()
00233             ));
00234         }
00235 
00236         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00237                 this->staticInterfaceName(), QLatin1String("NameHasOwner"));
00238         callMessage << QVariant::fromValue(nameToCheck);
00239         return this->connection().asyncCall(callMessage, timeout);
00240     }
00241 
00250     inline QDBusPendingReply<QStringList> ListNames(int timeout = -1)
00251     {
00252         if (!invalidationReason().isEmpty()) {
00253             return QDBusPendingReply<QStringList>(QDBusMessage::createError(
00254                 invalidationReason(),
00255                 invalidationMessage()
00256             ));
00257         }
00258 
00259         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00260                 this->staticInterfaceName(), QLatin1String("ListNames"));
00261         return this->connection().asyncCall(callMessage, timeout);
00262     }
00263 
00272     inline QDBusPendingReply<QStringList> ListActivatableNames(int timeout = -1)
00273     {
00274         if (!invalidationReason().isEmpty()) {
00275             return QDBusPendingReply<QStringList>(QDBusMessage::createError(
00276                 invalidationReason(),
00277                 invalidationMessage()
00278             ));
00279         }
00280 
00281         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00282                 this->staticInterfaceName(), QLatin1String("ListActivatableNames"));
00283         return this->connection().asyncCall(callMessage, timeout);
00284     }
00285 
00294     inline QDBusPendingReply<> AddMatch(const QString& rule, int timeout = -1)
00295     {
00296         if (!invalidationReason().isEmpty()) {
00297             return QDBusPendingReply<>(QDBusMessage::createError(
00298                 invalidationReason(),
00299                 invalidationMessage()
00300             ));
00301         }
00302 
00303         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00304                 this->staticInterfaceName(), QLatin1String("AddMatch"));
00305         callMessage << QVariant::fromValue(rule);
00306         return this->connection().asyncCall(callMessage, timeout);
00307     }
00308 
00317     inline QDBusPendingReply<> RemoveMatch(const QString& rule, int timeout = -1)
00318     {
00319         if (!invalidationReason().isEmpty()) {
00320             return QDBusPendingReply<>(QDBusMessage::createError(
00321                 invalidationReason(),
00322                 invalidationMessage()
00323             ));
00324         }
00325 
00326         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00327                 this->staticInterfaceName(), QLatin1String("RemoveMatch"));
00328         callMessage << QVariant::fromValue(rule);
00329         return this->connection().asyncCall(callMessage, timeout);
00330     }
00331 
00340     inline QDBusPendingReply<QString> GetNameOwner(const QString& name, int timeout = -1)
00341     {
00342         if (!invalidationReason().isEmpty()) {
00343             return QDBusPendingReply<QString>(QDBusMessage::createError(
00344                 invalidationReason(),
00345                 invalidationMessage()
00346             ));
00347         }
00348 
00349         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00350                 this->staticInterfaceName(), QLatin1String("GetNameOwner"));
00351         callMessage << QVariant::fromValue(name);
00352         return this->connection().asyncCall(callMessage, timeout);
00353     }
00354 
00363     inline QDBusPendingReply<QStringList> ListQueuedOwners(const QString& name, int timeout = -1)
00364     {
00365         if (!invalidationReason().isEmpty()) {
00366             return QDBusPendingReply<QStringList>(QDBusMessage::createError(
00367                 invalidationReason(),
00368                 invalidationMessage()
00369             ));
00370         }
00371 
00372         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00373                 this->staticInterfaceName(), QLatin1String("ListQueuedOwners"));
00374         callMessage << QVariant::fromValue(name);
00375         return this->connection().asyncCall(callMessage, timeout);
00376     }
00377 
00386     inline QDBusPendingReply<uint> GetConnectionUnixUser(const QString& connectionName, int timeout = -1)
00387     {
00388         if (!invalidationReason().isEmpty()) {
00389             return QDBusPendingReply<uint>(QDBusMessage::createError(
00390                 invalidationReason(),
00391                 invalidationMessage()
00392             ));
00393         }
00394 
00395         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00396                 this->staticInterfaceName(), QLatin1String("GetConnectionUnixUser"));
00397         callMessage << QVariant::fromValue(connectionName);
00398         return this->connection().asyncCall(callMessage, timeout);
00399     }
00400 
00409     inline QDBusPendingReply<uint> GetConnectionUnixProcessID(const QString& connectionName, int timeout = -1)
00410     {
00411         if (!invalidationReason().isEmpty()) {
00412             return QDBusPendingReply<uint>(QDBusMessage::createError(
00413                 invalidationReason(),
00414                 invalidationMessage()
00415             ));
00416         }
00417 
00418         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00419                 this->staticInterfaceName(), QLatin1String("GetConnectionUnixProcessID"));
00420         callMessage << QVariant::fromValue(connectionName);
00421         return this->connection().asyncCall(callMessage, timeout);
00422     }
00423 
00432     inline QDBusPendingReply<QByteArray> GetConnectionSELinuxSecurityContext(const QString& connectionName, int timeout = -1)
00433     {
00434         if (!invalidationReason().isEmpty()) {
00435             return QDBusPendingReply<QByteArray>(QDBusMessage::createError(
00436                 invalidationReason(),
00437                 invalidationMessage()
00438             ));
00439         }
00440 
00441         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00442                 this->staticInterfaceName(), QLatin1String("GetConnectionSELinuxSecurityContext"));
00443         callMessage << QVariant::fromValue(connectionName);
00444         return this->connection().asyncCall(callMessage, timeout);
00445     }
00446 
00455     inline QDBusPendingReply<> ReloadConfig(int timeout = -1)
00456     {
00457         if (!invalidationReason().isEmpty()) {
00458             return QDBusPendingReply<>(QDBusMessage::createError(
00459                 invalidationReason(),
00460                 invalidationMessage()
00461             ));
00462         }
00463 
00464         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00465                 this->staticInterfaceName(), QLatin1String("ReloadConfig"));
00466         return this->connection().asyncCall(callMessage, timeout);
00467     }
00468 
00477     inline QDBusPendingReply<QString> GetId(int timeout = -1)
00478     {
00479         if (!invalidationReason().isEmpty()) {
00480             return QDBusPendingReply<QString>(QDBusMessage::createError(
00481                 invalidationReason(),
00482                 invalidationMessage()
00483             ));
00484         }
00485 
00486         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00487                 this->staticInterfaceName(), QLatin1String("GetId"));
00488         return this->connection().asyncCall(callMessage, timeout);
00489     }
00490 
00491 Q_SIGNALS:
00495     void NameOwnerChanged(const QString& name, const QString& oldOwner, const QString& newOwner);
00496 
00500     void NameLost(const QString& name);
00501 
00505     void NameAcquired(const QString& name);
00506 
00507 protected:
00508     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
00509 };
00510 
00518 class TP_QT_EXPORT IntrospectableInterface : public Tp::AbstractInterface
00519 {
00520     Q_OBJECT
00521 
00522 public:
00529     static inline QLatin1String staticInterfaceName()
00530     {
00531         return QLatin1String("org.freedesktop.DBus.Introspectable");
00532     }
00533 
00541     IntrospectableInterface(
00542         const QString& busName,
00543         const QString& objectPath,
00544         QObject* parent = 0
00545     );
00546 
00555     IntrospectableInterface(
00556         const QDBusConnection& connection,
00557         const QString& busName,
00558         const QString& objectPath,
00559         QObject* parent = 0
00560     );
00561 
00568     IntrospectableInterface(Tp::DBusProxy *proxy);
00569 
00577     explicit IntrospectableInterface(const Tp::AbstractInterface& mainInterface);
00578 
00586     IntrospectableInterface(const Tp::AbstractInterface& mainInterface, QObject* parent);
00587 
00594     Tp::PendingVariantMap *requestAllProperties() const
00595     {
00596         return internalRequestAllProperties();
00597     }
00598 
00599 public Q_SLOTS:
00608     inline QDBusPendingReply<QString> Introspect(int timeout = -1)
00609     {
00610         if (!invalidationReason().isEmpty()) {
00611             return QDBusPendingReply<QString>(QDBusMessage::createError(
00612                 invalidationReason(),
00613                 invalidationMessage()
00614             ));
00615         }
00616 
00617         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00618                 this->staticInterfaceName(), QLatin1String("Introspect"));
00619         return this->connection().asyncCall(callMessage, timeout);
00620     }
00621 
00622 protected:
00623     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
00624 };
00625 
00633 class TP_QT_EXPORT PeerInterface : public Tp::AbstractInterface
00634 {
00635     Q_OBJECT
00636 
00637 public:
00644     static inline QLatin1String staticInterfaceName()
00645     {
00646         return QLatin1String("org.freedesktop.DBus.Peer");
00647     }
00648 
00656     PeerInterface(
00657         const QString& busName,
00658         const QString& objectPath,
00659         QObject* parent = 0
00660     );
00661 
00670     PeerInterface(
00671         const QDBusConnection& connection,
00672         const QString& busName,
00673         const QString& objectPath,
00674         QObject* parent = 0
00675     );
00676 
00683     PeerInterface(Tp::DBusProxy *proxy);
00684 
00692     explicit PeerInterface(const Tp::AbstractInterface& mainInterface);
00693 
00701     PeerInterface(const Tp::AbstractInterface& mainInterface, QObject* parent);
00702 
00709     Tp::PendingVariantMap *requestAllProperties() const
00710     {
00711         return internalRequestAllProperties();
00712     }
00713 
00714 public Q_SLOTS:
00723     inline QDBusPendingReply<> Ping(int timeout = -1)
00724     {
00725         if (!invalidationReason().isEmpty()) {
00726             return QDBusPendingReply<>(QDBusMessage::createError(
00727                 invalidationReason(),
00728                 invalidationMessage()
00729             ));
00730         }
00731 
00732         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00733                 this->staticInterfaceName(), QLatin1String("Ping"));
00734         return this->connection().asyncCall(callMessage, timeout);
00735     }
00736 
00745     inline QDBusPendingReply<QString> GetMachineId(int timeout = -1)
00746     {
00747         if (!invalidationReason().isEmpty()) {
00748             return QDBusPendingReply<QString>(QDBusMessage::createError(
00749                 invalidationReason(),
00750                 invalidationMessage()
00751             ));
00752         }
00753 
00754         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00755                 this->staticInterfaceName(), QLatin1String("GetMachineId"));
00756         return this->connection().asyncCall(callMessage, timeout);
00757     }
00758 
00759 protected:
00760     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
00761 };
00762 
00770 class TP_QT_EXPORT PropertiesInterface : public Tp::AbstractInterface
00771 {
00772     Q_OBJECT
00773 
00774 public:
00781     static inline QLatin1String staticInterfaceName()
00782     {
00783         return QLatin1String("org.freedesktop.DBus.Properties");
00784     }
00785 
00793     PropertiesInterface(
00794         const QString& busName,
00795         const QString& objectPath,
00796         QObject* parent = 0
00797     );
00798 
00807     PropertiesInterface(
00808         const QDBusConnection& connection,
00809         const QString& busName,
00810         const QString& objectPath,
00811         QObject* parent = 0
00812     );
00813 
00820     PropertiesInterface(Tp::DBusProxy *proxy);
00821 
00829     explicit PropertiesInterface(const Tp::AbstractInterface& mainInterface);
00830 
00838     PropertiesInterface(const Tp::AbstractInterface& mainInterface, QObject* parent);
00839 
00846     Tp::PendingVariantMap *requestAllProperties() const
00847     {
00848         return internalRequestAllProperties();
00849     }
00850 
00851 public Q_SLOTS:
00860     inline QDBusPendingReply<QDBusVariant> Get(const QString& interfaceName, const QString& propertyName, int timeout = -1)
00861     {
00862         if (!invalidationReason().isEmpty()) {
00863             return QDBusPendingReply<QDBusVariant>(QDBusMessage::createError(
00864                 invalidationReason(),
00865                 invalidationMessage()
00866             ));
00867         }
00868 
00869         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00870                 this->staticInterfaceName(), QLatin1String("Get"));
00871         callMessage << QVariant::fromValue(interfaceName) << QVariant::fromValue(propertyName);
00872         return this->connection().asyncCall(callMessage, timeout);
00873     }
00874 
00883     inline QDBusPendingReply<> Set(const QString& interfaceName, const QString& propertyName, const QDBusVariant& value, int timeout = -1)
00884     {
00885         if (!invalidationReason().isEmpty()) {
00886             return QDBusPendingReply<>(QDBusMessage::createError(
00887                 invalidationReason(),
00888                 invalidationMessage()
00889             ));
00890         }
00891 
00892         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00893                 this->staticInterfaceName(), QLatin1String("Set"));
00894         callMessage << QVariant::fromValue(interfaceName) << QVariant::fromValue(propertyName) << QVariant::fromValue(value);
00895         return this->connection().asyncCall(callMessage, timeout);
00896     }
00897 
00906     inline QDBusPendingReply<QVariantMap> GetAll(const QString& interfaceName, int timeout = -1)
00907     {
00908         if (!invalidationReason().isEmpty()) {
00909             return QDBusPendingReply<QVariantMap>(QDBusMessage::createError(
00910                 invalidationReason(),
00911                 invalidationMessage()
00912             ));
00913         }
00914 
00915         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00916                 this->staticInterfaceName(), QLatin1String("GetAll"));
00917         callMessage << QVariant::fromValue(interfaceName);
00918         return this->connection().asyncCall(callMessage, timeout);
00919     }
00920 
00921 protected:
00922     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
00923 };
00924 }
00925 }
00926 }
00927 Q_DECLARE_METATYPE(Tp::Client::DBus::DBusDaemonInterface*)
00928 Q_DECLARE_METATYPE(Tp::Client::DBus::IntrospectableInterface*)
00929 Q_DECLARE_METATYPE(Tp::Client::DBus::PeerInterface*)
00930 Q_DECLARE_METATYPE(Tp::Client::DBus::PropertiesInterface*)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00779.html0000644000175200001440000001172112000060453021636 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AccountPropertyFilter Member List
This is the complete list of members for Tp::AccountPropertyFilter, including all inherited members.
addProperty(const QString &propertyName, const QVariant &propertyValue)Tp::GenericPropertyFilter< Account > [inline]
create()Tp::AccountPropertyFilter [inline, static]
filter() constTp::GenericPropertyFilter< Account > [inline]
Filter()Tp::Filter< Account > [inline, protected]
GenericPropertyFilter()Tp::GenericPropertyFilter< Account > [inline, protected]
isValid() const Tp::AccountPropertyFilter [virtual]
matches(const SharedPtr< Account > &t) constTp::GenericPropertyFilter< Account > [inline, virtual]
RefCounted()Tp::RefCounted [inline]
setProperties(const QVariantMap &filter)Tp::GenericPropertyFilter< Account > [inline]
~AccountPropertyFilter()Tp::AccountPropertyFilter
~Filter()Tp::Filter< Account > [inline, virtual]
~GenericPropertyFilter()Tp::GenericPropertyFilter< Account > [inline, virtual]
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00666_source.html0000644000175200001440000005643112000060453023220 0ustar00collabora-develusers00000000000000 presence.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
presence.h
00001 
00023 #ifndef _TelepathyQt_presence_h_HEADER_GUARD_
00024 #define _TelepathyQt_presence_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Constants>
00031 #include <TelepathyQt/Types>
00032 
00033 namespace Tp
00034 {
00035 
00036 class TP_QT_EXPORT Presence
00037 {
00038 public:
00039     Presence();
00040     Presence(const SimplePresence &sp);
00041     Presence(ConnectionPresenceType type, const QString &status, const QString &statusMessage);
00042     Presence(const Presence &other);
00043     ~Presence();
00044 
00045     static Presence available(const QString &statusMessage = QString());
00046     static Presence chat(const QString &statusMessage = QString());
00047     static Presence away(const QString &statusMessage = QString());
00048     static Presence brb(const QString &statusMessage = QString());
00049     static Presence busy(const QString &statusMessage = QString());
00050     static Presence dnd(const QString &statusMessage = QString());
00051     static Presence xa(const QString &statusMessage = QString());
00052     static Presence hidden(const QString &statusMessage = QString());
00053     static Presence offline(const QString &statusMessage = QString());
00054 
00055     bool isValid() const { return mPriv.constData() != 0; }
00056 
00057     Presence &operator=(const Presence &other);
00058     bool operator==(const Presence &other) const;
00059     bool operator!=(const Presence &other) const;
00060 
00061     ConnectionPresenceType type() const;
00062     QString status() const;
00063     QString statusMessage() const;
00064     void setStatus(const SimplePresence &value);
00065     void setStatus(ConnectionPresenceType type, const QString &status,
00066             const QString &statusMessage);
00067     void setStatusMessage(const QString &statusMessage);
00068 
00069     SimplePresence barePresence() const;
00070 
00071 private:
00072     struct Private;
00073     friend struct Private;
00074     QSharedDataPointer<Private> mPriv;
00075 };
00076 
00077 class TP_QT_EXPORT PresenceSpec
00078 {
00079 public:
00080     enum SimpleStatusFlag {
00081         NoFlags = 0,
00082         MaySetOnSelf = 0x1,
00083         CanHaveStatusMessage = 0x2,
00084         AllFlags = MaySetOnSelf | CanHaveStatusMessage
00085     };
00086     Q_DECLARE_FLAGS(SimpleStatusFlags, SimpleStatusFlag);
00087 
00088     PresenceSpec();
00089     PresenceSpec(const QString &status, const SimpleStatusSpec &spec);
00090     PresenceSpec(const PresenceSpec &other);
00091     ~PresenceSpec();
00092 
00093     static PresenceSpec available(SimpleStatusFlags flags = AllFlags);
00094     static PresenceSpec chat(SimpleStatusFlags flags = AllFlags);
00095     static PresenceSpec pstn(SimpleStatusFlags flags = CanHaveStatusMessage);
00096     static PresenceSpec away(SimpleStatusFlags flags = AllFlags);
00097     static PresenceSpec brb(SimpleStatusFlags flags = AllFlags);
00098     static PresenceSpec dnd(SimpleStatusFlags flags = AllFlags);
00099     static PresenceSpec busy(SimpleStatusFlags flags = AllFlags);
00100     static PresenceSpec xa(SimpleStatusFlags flags = AllFlags);
00101     static PresenceSpec hidden(SimpleStatusFlags flags = AllFlags);
00102     static PresenceSpec offline(SimpleStatusFlags flags = CanHaveStatusMessage);
00103     static PresenceSpec unknown(SimpleStatusFlags flags = CanHaveStatusMessage);
00104     static PresenceSpec error(SimpleStatusFlags flags = CanHaveStatusMessage);
00105 
00106     bool isValid() const { return mPriv.constData() != 0; }
00107 
00108     PresenceSpec &operator=(const PresenceSpec &other);
00109     bool operator==(const PresenceSpec &other) const;
00110     bool operator!=(const PresenceSpec &other) const;
00111     bool operator<(const PresenceSpec &other) const;
00112 
00113     Presence presence(const QString &statusMessage = QString()) const;
00114     bool maySetOnSelf() const;
00115     bool canHaveStatusMessage() const;
00116 
00117     SimpleStatusSpec bareSpec() const;
00118 
00119 private:
00120     struct Private;
00121     friend struct Private;
00122     QSharedDataPointer<Private> mPriv;
00123 };
00124 
00125 class TP_QT_EXPORT PresenceSpecList : public QList<PresenceSpec>
00126 {
00127 public:
00128     PresenceSpecList() { }
00129     PresenceSpecList(const SimpleStatusSpecMap &specMap)
00130     {
00131         SimpleStatusSpecMap::const_iterator i = specMap.constBegin();
00132         SimpleStatusSpecMap::const_iterator end = specMap.end();
00133         for (; i != end; ++i) {
00134             QString status = i.key();
00135             SimpleStatusSpec spec = i.value();
00136             append(PresenceSpec(status, spec));
00137         }
00138     }
00139     PresenceSpecList(const QList<PresenceSpec> &other)
00140         : QList<PresenceSpec>(other)
00141     {
00142     }
00143 
00144     QMap<QString, PresenceSpec> toMap() const
00145     {
00146         QMap<QString, PresenceSpec> ret;
00147         Q_FOREACH (const PresenceSpec &spec, *this) {
00148             ret.insert(spec.presence().status(), spec);
00149         }
00150         return ret;
00151     }
00152 
00153     SimpleStatusSpecMap bareSpecs() const
00154     {
00155         SimpleStatusSpecMap ret;
00156         Q_FOREACH (const PresenceSpec &spec, *this) {
00157             ret.insert(spec.presence().status(), spec.bareSpec());
00158         }
00159         return ret;
00160     }
00161 };
00162 
00163 Q_DECLARE_OPERATORS_FOR_FLAGS(PresenceSpec::SimpleStatusFlags)
00164 
00165 } // Tp
00166 
00167 Q_DECLARE_METATYPE(Tp::Presence);
00168 Q_DECLARE_METATYPE(Tp::PresenceSpec);
00169 Q_DECLARE_METATYPE(Tp::PresenceSpecList);
00170 
00171 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00728.html0000644000175200001440000002171712000060453021636 0ustar00collabora-develusers00000000000000 Tp::Client Namespace Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client Namespace Reference

Namespaces

Classes


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00085.html0000644000175200001440000006575512000060453021644 0ustar00collabora-develusers00000000000000 Tp::Client::CallContentMediaDescriptionInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::CallContentMediaDescriptionInterface Class Reference

#include <TelepathyQt/CallContentMediaDescriptionInterface>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

  • QDBusPendingReply Accept (const QVariantMap &localMediaDescription, int timeout=-1)
  • QDBusPendingReply Reject (const Tp::CallStateReason &reason, int timeout=-1)

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Call1.Content.MediaDescription".


Constructor & Destructor Documentation

Tp::Client::CallContentMediaDescriptionInterface::CallContentMediaDescriptionInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a CallContentMediaDescriptionInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::CallContentMediaDescriptionInterface::CallContentMediaDescriptionInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a CallContentMediaDescriptionInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a CallContentMediaDescriptionInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Call1.Content.MediaDescription", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property Interfaces of type QStringList.

Extra interfaces provided by this media description. This SHOULD NOT include the Description interface itself.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property FurtherNegotiationRequired of type bool.

If this is set to True by the CM in a MediaDescriptionOffer, it means "This is an offer under the SDP Offer/Answer model. Whatever you accept this offer with is what I will send to the other side in my answer." If this is set to False by the CM then it means "This is an Answer under the SDP Offer/Answer model, and if it remains False in the Accept(), no further codec negotiation needs to happen." If this is set to True by the streaming implementation (e.g. in an Accept or UpdateLocalMediaDescription call) then a new SDP Offer/Answer round-trip will be initiated.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property HasRemoteInformation of type bool.

True if this offer contains information from the remote side: If False then the Accept response solely depends on the capabilities and preferences of the local side. In most protocols this property will be False for the initial DescriptionOffer on an outgoing call.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Codecs of type Tp::CodecList.

A list of codecs the remote contact supports. When used with Accept, it means the locally supported codecs.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property RemoteContact of type uint.

The contact handle that this description applies to. This property can be used as an opaque identifier, and searched for in RemoteMembers for each Stream in this Content, to determine which Stream this MediaDescription applies to. If multiple MediaDescriptions apply to the same Stream, the SSRCs property should be used to separate media before decoding. If this property is 0, this MediaDescription applies to all streams, so the above matching method is unneccesary (e.g. in conference calls with a mixer, media from all participants is mixed into one stream). When calling Accept or UpdateLocalMediaDescription, this should always be set to 0, or omitted, because it is assumed that you send the same MediaDescription to everyone (Encoding a stream separately for each contact in a call is inefficient, and should be avoided).

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property SSRCs of type Tp::ContactSSRCsMap.

A map from Handle to list of Synchronisation Sources, as defined by RFC 3550.

Some protocols require the negotiation of SSRC identifiers for RTP streams. If this is the case, then MediaDescription offers will appear with this property set. The streaming implementation should then call Accept() with a map from 0 to a list containing a single SSRC (which does not collide with these, or any previously seen SSRCs). If a new MediaDescription offer appears with an SSRC the same as one in CallContentInterfaceMediaInterface::LocalMediaDescriptions , then the streaming implementation should pick a new SSRC to resolve the collision.

It is expected that this list will normally be at most one element long, but it is kept as a list for extensibility. The concatenation of all SSRCs associated with a Stream should contain no duplicate entries. If there are collisions, then it is the responsibility of the protocol implementation to resolve them and generate new offers.

If this property is omitted, then the streaming implementation can assume that there is only one MediaDescription per Stream.

If there is a single multicast Call Stream with multiple Remote Members, and all members are forced to use the same MediaDescription, this map can be used by the streaming implementation to determine which video sources belong to which contacts (e.g. in order to put a name under each face in the call)

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::CallContentMediaDescriptionInterface::Accept ( const QVariantMap &  localMediaDescription,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method Accept on the remote object.

Accepts the updated Description and update the corresponding local description. If FurtherNegotiationRequired is True, calling this method will generally cause a network round-trip and a new MediaDescription to be offered (hopefully with FurtherNegotiationRequired set to False).

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
localMediaDescriptionThe local description to send to the remote contacts and to use in the Content.
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::CallContentMediaDescriptionInterface::Reject ( const Tp::CallStateReason reason,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method Reject on the remote object.

Reject the proposed update to the remote description.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
reasonA structured reason for the rejection.
timeoutThe timeout in milliseconds.
void Tp::Client::CallContentMediaDescriptionInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00704_source.html0000644000175200001440000005373712000060453023217 0ustar00collabora-develusers00000000000000 stream-tube-client.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
stream-tube-client.h
00001 
00023 #ifndef _TelepathyQt_stream_tube_client_h_HEADER_GUARD_
00024 #define _TelepathyQt_stream_tube_client_h_HEADER_GUARD_
00025 
00026 #include <TelepathyQt/AccountFactory>
00027 #include <TelepathyQt/ChannelFactory>
00028 #include <TelepathyQt/ConnectionFactory>
00029 #include <TelepathyQt/ContactFactory>
00030 #include <TelepathyQt/RefCounted>
00031 #include <TelepathyQt/Types>
00032 
00033 class QHostAddress;
00034 
00035 namespace Tp
00036 {
00037 
00038 class PendingStreamTubeConnection;
00039 
00040 class TP_QT_EXPORT StreamTubeClient : public QObject, public RefCounted
00041 {
00042     Q_OBJECT
00043     Q_DISABLE_COPY(StreamTubeClient)
00044 
00045     class TubeWrapper;
00046 
00047 public:
00048 
00049     class TcpSourceAddressGenerator
00050     {
00051     public:
00052         virtual QPair<QHostAddress, quint16>
00053             nextSourceAddress(const AccountPtr &account, const IncomingStreamTubeChannelPtr &tube) = 0;
00054 
00055     protected:
00056         virtual ~TcpSourceAddressGenerator() {}
00057     };
00058 
00059     class Tube : public QPair<AccountPtr, IncomingStreamTubeChannelPtr>
00060     {
00061     public:
00062         Tube();
00063         Tube(const AccountPtr &account, const IncomingStreamTubeChannelPtr &channel);
00064         Tube(const Tube &other);
00065         ~Tube();
00066 
00067         bool isValid() const { return mPriv.constData() != 0; }
00068 
00069         Tube &operator=(const Tube &other);
00070 
00071         const AccountPtr &account() const
00072         {
00073             return first;
00074         }
00075 
00076         const IncomingStreamTubeChannelPtr &channel() const
00077         {
00078             return second;
00079         }
00080 
00081     private:
00082         struct Private;
00083         friend struct Private;
00084         QSharedDataPointer<Private> mPriv;
00085     };
00086 
00087     static StreamTubeClientPtr create(
00088             const QStringList &p2pServices,
00089             const QStringList &roomServices = QStringList(),
00090             const QString &clientName = QString(),
00091             bool monitorConnections = false,
00092             bool bypassApproval = false,
00093             const AccountFactoryConstPtr &accountFactory =
00094                 AccountFactory::create(QDBusConnection::sessionBus()),
00095             const ConnectionFactoryConstPtr &connectionFactory =
00096                 ConnectionFactory::create(QDBusConnection::sessionBus()),
00097             const ChannelFactoryConstPtr &channelFactory =
00098                 ChannelFactory::create(QDBusConnection::sessionBus()),
00099             const ContactFactoryConstPtr &contactFactory =
00100                 ContactFactory::create());
00101 
00102     static StreamTubeClientPtr create(
00103             const QDBusConnection &bus,
00104             const AccountFactoryConstPtr &accountFactory,
00105             const ConnectionFactoryConstPtr &connectionFactory,
00106             const ChannelFactoryConstPtr &channelFactory,
00107             const ContactFactoryConstPtr &contactFactory,
00108             const QStringList &p2pServices,
00109             const QStringList &roomServices = QStringList(),
00110             const QString &clientName = QString(),
00111             bool monitorConnections = false,
00112             bool bypassApproval = false);
00113 
00114     static StreamTubeClientPtr create(
00115             const AccountManagerPtr &accountManager,
00116             const QStringList &p2pServices,
00117             const QStringList &roomServices = QStringList(),
00118             const QString &clientName = QString(),
00119             bool monitorConnections = false,
00120             bool bypassApproval = false);
00121 
00122     static StreamTubeClientPtr create(
00123             const ClientRegistrarPtr &registrar,
00124             const QStringList &p2pServices,
00125             const QStringList &roomServices = QStringList(),
00126             const QString &clientName = QString(),
00127             bool monitorConnections = false,
00128             bool bypassApproval = false);
00129 
00130     virtual ~StreamTubeClient();
00131 
00132     ClientRegistrarPtr registrar() const;
00133     QString clientName() const;
00134     bool isRegistered() const;
00135     bool monitorsConnections() const;
00136 
00137     bool acceptsAsTcp() const;
00138     TcpSourceAddressGenerator *tcpGenerator() const;
00139     bool acceptsAsUnix() const;
00140 
00141     void setToAcceptAsTcp(TcpSourceAddressGenerator *generator = 0);
00142     void setToAcceptAsUnix(bool requireCredentials = false);
00143 
00144     QList<Tube> tubes() const;
00145     QHash<Tube, QSet<uint> > connections() const;
00146 
00147 Q_SIGNALS:
00148     void tubeOffered(
00149             const Tp::AccountPtr &account,
00150             const Tp::IncomingStreamTubeChannelPtr &tube);
00151     void tubeClosed(
00152             const Tp::AccountPtr &account,
00153             const Tp::IncomingStreamTubeChannelPtr &tube,
00154             const QString &error,
00155             const QString &message);
00156 
00157     void tubeAcceptedAsTcp(
00158             const QHostAddress &listenAddress,
00159             quint16 listenPort,
00160             const QHostAddress &sourceAddress,
00161             quint16 sourcePort,
00162             const Tp::AccountPtr &account,
00163             const Tp::IncomingStreamTubeChannelPtr &tube);
00164     void tubeAcceptedAsUnix(
00165             const QString &listenAddress,
00166             bool requiresCredentials,
00167             uchar credentialByte,
00168             const Tp::AccountPtr &account,
00169             const Tp::IncomingStreamTubeChannelPtr &tube);
00170 
00171     void newConnection(
00172             const Tp::AccountPtr &account,
00173             const Tp::IncomingStreamTubeChannelPtr &tube,
00174             uint connectionId);
00175     void connectionClosed(
00176             const Tp::AccountPtr &account,
00177             const Tp::IncomingStreamTubeChannelPtr &tube,
00178             uint connectionId,
00179             const QString &error,
00180             const QString &message);
00181 
00182 private Q_SLOTS:
00183 
00184     TP_QT_NO_EXPORT void onInvokedForTube(
00185             const Tp::AccountPtr &account,
00186             const Tp::StreamTubeChannelPtr &tube,
00187             const QDateTime &userActionTime,
00188             const Tp::ChannelRequestHints &requestHints);
00189 
00190     TP_QT_NO_EXPORT void onAcceptFinished(TubeWrapper *, Tp::PendingStreamTubeConnection *);
00191     TP_QT_NO_EXPORT void onTubeInvalidated(Tp::DBusProxy *, const QString &, const QString &);
00192 
00193     TP_QT_NO_EXPORT void onNewConnection(
00194             TubeWrapper *wrapper,
00195             uint conn);
00196     TP_QT_NO_EXPORT void onConnectionClosed(
00197             TubeWrapper *wrapper,
00198             uint conn,
00199             const QString &error,
00200             const QString &message);
00201 
00202 private:
00203     TP_QT_NO_EXPORT StreamTubeClient(
00204             const ClientRegistrarPtr &registrar,
00205             const QStringList &p2pServices,
00206             const QStringList &roomServices,
00207             const QString &clientName,
00208             bool monitorConnections,
00209             bool bypassApproval);
00210 
00211     struct Private;
00212     Private *mPriv;
00213 };
00214 
00215 } // Tp
00216 
00217 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00695_source.html0000644000175200001440000002610712000060453023217 0ustar00collabora-develusers00000000000000 simple-observer.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
simple-observer.h
00001 
00023 #ifndef _TelepathyQt_simple_observer_h_HEADER_GUARD_
00024 #define _TelepathyQt_simple_observer_h_HEADER_GUARD_
00025 
00026 #include <TelepathyQt/AbstractClientObserver>
00027 #include <TelepathyQt/ChannelClassFeatures>
00028 #include <TelepathyQt/Types>
00029 
00030 #include <QObject>
00031 
00032 namespace Tp
00033 {
00034 
00035 class PendingOperation;
00036 
00037 class TP_QT_EXPORT SimpleObserver : public QObject, public RefCounted
00038 {
00039     Q_OBJECT
00040     Q_DISABLE_COPY(SimpleObserver)
00041 
00042 public:
00043     static SimpleObserverPtr create(const AccountPtr &account,
00044             const ChannelClassSpecList &channelFilter,
00045             const QList<ChannelClassFeatures> &extraChannelFeatures =
00046                 QList<ChannelClassFeatures>());
00047     static SimpleObserverPtr create(const AccountPtr &account,
00048             const ChannelClassSpecList &channelFilter,
00049             const ContactPtr &contact,
00050             const QList<ChannelClassFeatures> &extraChannelFeatures =
00051                 QList<ChannelClassFeatures>());
00052     static SimpleObserverPtr create(const AccountPtr &account,
00053             const ChannelClassSpecList &channelFilter,
00054             const QString &contactIdentifier,
00055             const QList<ChannelClassFeatures> &extraChannelFeatures =
00056                 QList<ChannelClassFeatures>());
00057 
00058     virtual ~SimpleObserver();
00059 
00060     AccountPtr account() const;
00061     ChannelClassSpecList channelFilter() const;
00062     QString contactIdentifier() const;
00063     QList<ChannelClassFeatures> extraChannelFeatures() const;
00064 
00065     QList<ChannelPtr> channels() const;
00066 
00067 Q_SIGNALS:
00068     void newChannels(const QList<Tp::ChannelPtr> &channels);
00069     void channelInvalidated(const Tp::ChannelPtr &channel, const QString &errorName,
00070             const QString &errorMessage);
00071 
00072 private Q_SLOTS:
00073     TP_QT_NO_EXPORT void onAccountConnectionChanged(const Tp::ConnectionPtr &connection);
00074     TP_QT_NO_EXPORT void onAccountConnectionConnected();
00075     TP_QT_NO_EXPORT void onContactConstructed(Tp::PendingOperation *op);
00076 
00077     TP_QT_NO_EXPORT void onNewChannels(const Tp::AccountPtr &channelsAccount,
00078             const QList<Tp::ChannelPtr> &channels);
00079     TP_QT_NO_EXPORT void onChannelInvalidated(const Tp::AccountPtr &channelAccount,
00080             const Tp::ChannelPtr &channel, const QString &errorName, const QString &errorMessage);
00081 
00082 private:
00083     friend class SimpleCallObserver;
00084     friend class SimpleTextObserver;
00085 
00086     TP_QT_NO_EXPORT static SimpleObserverPtr create(const AccountPtr &account,
00087             const ChannelClassSpecList &channelFilter,
00088             const QString &contactIdentifier,
00089             bool requiresNormalization,
00090             const QList<ChannelClassFeatures> &extraChannelFeatures);
00091 
00092     TP_QT_NO_EXPORT SimpleObserver(const AccountPtr &account,
00093             const ChannelClassSpecList &channelFilter,
00094             const QString &contactIdentifier,
00095             bool requiresNormalization,
00096             const QList<ChannelClassFeatures> &extraChannelFeatures);
00097 
00098     struct Private;
00099     friend struct Private;
00100     Private *mPriv;
00101 };
00102 
00103 } // Tp
00104 
00105 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00818.html0000644000175200001440000004525412000060453021640 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ChannelClassSpec Member List
This is the complete list of members for Tp::ChannelClassSpec, including all inherited members.
allProperties() const Tp::ChannelClassSpec
audioCall(const QVariantMap &additionalProperties=QVariantMap())Tp::ChannelClassSpec [static]
bareClass() const Tp::ChannelClassSpec
ChannelClassSpec()Tp::ChannelClassSpec
ChannelClassSpec(const ChannelClass &cc)Tp::ChannelClassSpec
ChannelClassSpec(const QVariantMap &props)Tp::ChannelClassSpec
ChannelClassSpec(const QString &channelType, HandleType targetHandleType, const QVariantMap &otherProperties=QVariantMap())Tp::ChannelClassSpec
ChannelClassSpec(const QString &channelType, HandleType targetHandleType, bool requested, const QVariantMap &otherProperties=QVariantMap())Tp::ChannelClassSpec
ChannelClassSpec(const ChannelClassSpec &other, const QVariantMap &additionalProperties=QVariantMap())Tp::ChannelClassSpec
channelType() const Tp::ChannelClassSpec [inline]
contactSearch(const QVariantMap &additionalProperties=QVariantMap())Tp::ChannelClassSpec [static]
hasCallInitialAudioFlag() const Tp::ChannelClassSpec [inline]
hasCallInitialVideoFlag() const Tp::ChannelClassSpec [inline]
hasProperty(const QString &qualifiedName) const Tp::ChannelClassSpec
hasRequested() const Tp::ChannelClassSpec [inline]
hasStreamedMediaInitialAudioFlag() const Tp::ChannelClassSpec [inline]
hasStreamedMediaInitialVideoFlag() const Tp::ChannelClassSpec [inline]
incomingDBusTube(const QString &serviceName=QString(), const QVariantMap &additionalProperties=QVariantMap())Tp::ChannelClassSpec [static]
incomingFileTransfer(const QVariantMap &additionalProperties=QVariantMap())Tp::ChannelClassSpec [static]
incomingRoomDBusTube(const QString &serviceName=QString(), const QVariantMap &additionalProperties=QVariantMap())Tp::ChannelClassSpec [static]
incomingRoomStreamTube(const QString &service=QString(), const QVariantMap &additionalProperties=QVariantMap())Tp::ChannelClassSpec [static]
incomingStreamTube(const QString &service=QString(), const QVariantMap &additionalProperties=QVariantMap())Tp::ChannelClassSpec [static]
isRequested() const Tp::ChannelClassSpec [inline]
isSubsetOf(const ChannelClassSpec &other) const Tp::ChannelClassSpec
isValid() const Tp::ChannelClassSpec
matches(const QVariantMap &immutableProperties) const Tp::ChannelClassSpec
mediaCall(const QVariantMap &additionalProperties=QVariantMap())Tp::ChannelClassSpec [static]
operator=(const ChannelClassSpec &other)Tp::ChannelClassSpec
operator==(const ChannelClassSpec &other) const Tp::ChannelClassSpec [inline]
outgoingDBusTube(const QString &serviceName=QString(), const QVariantMap &additionalProperties=QVariantMap())Tp::ChannelClassSpec [static]
outgoingFileTransfer(const QVariantMap &additionalProperties=QVariantMap())Tp::ChannelClassSpec [static]
outgoingRoomDBusTube(const QString &serviceName=QString(), const QVariantMap &additionalProperties=QVariantMap())Tp::ChannelClassSpec [static]
outgoingRoomStreamTube(const QString &service=QString(), const QVariantMap &additionalProperties=QVariantMap())Tp::ChannelClassSpec [static]
outgoingStreamTube(const QString &service=QString(), const QVariantMap &additionalProperties=QVariantMap())Tp::ChannelClassSpec [static]
property(const QString &qualifiedName) const Tp::ChannelClassSpec
roomList(const QVariantMap &additionalProperties=QVariantMap())Tp::ChannelClassSpec [static]
serverAuthentication(const QVariantMap &additionalProperties=QVariantMap())Tp::ChannelClassSpec [static]
setCallInitialAudioFlag()Tp::ChannelClassSpec [inline]
setCallInitialVideoFlag()Tp::ChannelClassSpec [inline]
setChannelType(const QString &type)Tp::ChannelClassSpec [inline]
setProperty(const QString &qualifiedName, const QVariant &value)Tp::ChannelClassSpec
setRequested(bool requested)Tp::ChannelClassSpec [inline]
setStreamedMediaInitialAudioFlag()Tp::ChannelClassSpec [inline]
setStreamedMediaInitialVideoFlag()Tp::ChannelClassSpec [inline]
setTargetHandleType(HandleType type)Tp::ChannelClassSpec [inline]
streamedMediaAudioCall(const QVariantMap &additionalProperties=QVariantMap())Tp::ChannelClassSpec [static]
streamedMediaCall(const QVariantMap &additionalProperties=QVariantMap())Tp::ChannelClassSpec [static]
streamedMediaVideoCall(const QVariantMap &additionalProperties=QVariantMap())Tp::ChannelClassSpec [static]
streamedMediaVideoCallWithAudio(const QVariantMap &additionalProperties=QVariantMap())Tp::ChannelClassSpec [static]
targetHandleType() const Tp::ChannelClassSpec [inline]
textChat(const QVariantMap &additionalProperties=QVariantMap())Tp::ChannelClassSpec [static]
textChatroom(const QVariantMap &additionalProperties=QVariantMap())Tp::ChannelClassSpec [static]
unnamedStreamedMediaAudioCall(const QVariantMap &additionalProperties=QVariantMap())Tp::ChannelClassSpec [static]
unnamedStreamedMediaCall(const QVariantMap &additionalProperties=QVariantMap())Tp::ChannelClassSpec [static]
unnamedStreamedMediaVideoCall(const QVariantMap &additionalProperties=QVariantMap())Tp::ChannelClassSpec [static]
unnamedStreamedMediaVideoCallWithAudio(const QVariantMap &additionalProperties=QVariantMap())Tp::ChannelClassSpec [static]
unnamedTextChat(const QVariantMap &additionalProperties=QVariantMap())Tp::ChannelClassSpec [static]
unsetCallInitialAudioFlag()Tp::ChannelClassSpec [inline]
unsetCallInitialVideoFlag()Tp::ChannelClassSpec [inline]
unsetProperty(const QString &qualifiedName)Tp::ChannelClassSpec
unsetRequested()Tp::ChannelClassSpec [inline]
unsetStreamedMediaInitialAudioFlag()Tp::ChannelClassSpec [inline]
unsetStreamedMediaInitialVideoFlag()Tp::ChannelClassSpec [inline]
videoCall(const QVariantMap &additionalProperties=QVariantMap())Tp::ChannelClassSpec [static]
videoCallWithAudio(const QVariantMap &additionalProperties=QVariantMap())Tp::ChannelClassSpec [static]
~ChannelClassSpec()Tp::ChannelClassSpec


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01042.html0000644000175200001440000000521512000060453021617 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactCapabilitiesMap Member List
This is the complete list of members for Tp::ContactCapabilitiesMap, including all inherited members.
ContactCapabilitiesMap()Tp::ContactCapabilitiesMap [inline]
ContactCapabilitiesMap(const QMap< uint, RequestableChannelClassList > &a)Tp::ContactCapabilitiesMap [inline]
operator=(const QMap< uint, RequestableChannelClassList > &a)Tp::ContactCapabilitiesMap [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00366.html0000644000175200001440000011100412000060453021621 0ustar00collabora-develusers00000000000000 Tp::RequestableChannelClassSpec Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::RequestableChannelClassSpec Class Reference

The RequestableChannelClassSpec class represents a Telepathy requestable channel class. More...

#include <TelepathyQt/RequestableChannelClassSpec>

List of all members.

Public Member Functions

Static Public Member Functions


Detailed Description

The RequestableChannelClassSpec class represents a Telepathy requestable channel class.


Constructor & Destructor Documentation


Member Function Documentation

RequestableChannelClassSpec Tp::RequestableChannelClassSpec::dbusTube ( const QString &  serviceName = QString()) [static]
RequestableChannelClassSpec Tp::RequestableChannelClassSpec::streamTube ( const QString &  service = QString()) [static]
RequestableChannelClassSpec & Tp::RequestableChannelClassSpec::operator= ( const RequestableChannelClassSpec other)
bool Tp::RequestableChannelClassSpec::operator== ( const RequestableChannelClassSpec other) const
bool Tp::RequestableChannelClassSpec::hasFixedProperty ( const QString &  name) const
QVariant Tp::RequestableChannelClassSpec::fixedProperty ( const QString &  name) const
bool Tp::RequestableChannelClassSpec::allowsProperty ( const QString &  name) const


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00826.html0000644000175200001440000001535212000060453021633 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ClientRegistrar Member List
This is the complete list of members for Tp::ClientRegistrar, including all inherited members.
accountFactory() const Tp::ClientRegistrar
channelFactory() const Tp::ClientRegistrar
connectionFactory() const Tp::ClientRegistrar
contactFactory() const Tp::ClientRegistrar
create(const QDBusConnection &bus)Tp::ClientRegistrar [static]
create(const AccountFactoryConstPtr &accountFactory=AccountFactory::create(QDBusConnection::sessionBus()), const ConnectionFactoryConstPtr &connectionFactory=ConnectionFactory::create(QDBusConnection::sessionBus()), const ChannelFactoryConstPtr &channelFactory=ChannelFactory::create(QDBusConnection::sessionBus()), const ContactFactoryConstPtr &contactFactory=ContactFactory::create())Tp::ClientRegistrar [static]
create(const QDBusConnection &bus, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory)Tp::ClientRegistrar [static]
create(const AccountManagerPtr &accountManager)Tp::ClientRegistrar [static]
dbusConnection() const Tp::ClientRegistrar
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
propertyChanged(const QString &propertyName)Tp::Object [signal]
RefCounted()Tp::RefCounted [inline]
registerClient(const AbstractClientPtr &client, const QString &clientName, bool unique=false)Tp::ClientRegistrar
registeredClients() const Tp::ClientRegistrar
unregisterClient(const AbstractClientPtr &client)Tp::ClientRegistrar
unregisterClients()Tp::ClientRegistrar
~ClientRegistrar()Tp::ClientRegistrar
~Object()Tp::Object [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00351.html0000644000175200001440000001562512000060453021627 0ustar00collabora-develusers00000000000000 Tp::PtrFunctor1< R, Arg1 > Struct Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PtrFunctor1< R, Arg1 > Struct Template Reference

#include </home/collabora-devel/kde/src/telepathy-qt4/TelepathyQt/functors.h>

Inherits Tp::BaseFunctor.

List of all members.

Public Types

Public Member Functions

Public Attributes

template<class R, class Arg1>
struct Tp::PtrFunctor1< R, Arg1 >


Member Typedef Documentation

template<class R , class Arg1 >
typedef R(* Tp::PtrFunctor1< R, Arg1 >::FunctionType)(Arg1)
template<class R , class Arg1 >
typedef R Tp::PtrFunctor1< R, Arg1 >::ResultType

Constructor & Destructor Documentation

template<class R , class Arg1 >
Tp::PtrFunctor1< R, Arg1 >::PtrFunctor1 ( FunctionType  fn) [inline]

Member Function Documentation

template<class R , class Arg1 >
ResultType Tp::PtrFunctor1< R, Arg1 >::operator() ( Arg1  a1) const [inline]

Member Data Documentation

template<class R , class Arg1 >
FunctionType Tp::PtrFunctor1< R, Arg1 >::fn


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00842.html0000644000175200001440000000722412000060453021630 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::DBusError Member List
This is the complete list of members for Tp::DBusError, including all inherited members.
DBusError()Tp::DBusError
DBusError(const QString &name, const QString &message)Tp::DBusError
isValid() const Tp::DBusError [inline]
message() const Tp::DBusError
name() const Tp::DBusError
operator!=(const DBusError &other) const Tp::DBusError
operator==(const DBusError &other) const Tp::DBusError
set(const QString &name, const QString &message)Tp::DBusError
~DBusError()Tp::DBusError


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00125.html0000644000175200001440000005436312000060453021630 0ustar00collabora-develusers00000000000000 Tp::Client::ChannelInterfaceFileTransferMetadataInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelInterfaceFileTransferMetadataInterface Class Reference

#include <TelepathyQt/Channel>

Inherits Tp::AbstractInterface.

List of all members.

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Channel.Interface.FileTransfer.Metadata".


Constructor & Destructor Documentation

Tp::Client::ChannelInterfaceFileTransferMetadataInterface::ChannelInterfaceFileTransferMetadataInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfaceFileTransferMetadataInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ChannelInterfaceFileTransferMetadataInterface::ChannelInterfaceFileTransferMetadataInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfaceFileTransferMetadataInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ChannelInterfaceFileTransferMetadataInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ChannelInterfaceFileTransferMetadataInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ChannelInterfaceFileTransferMetadataInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Channel.Interface.FileTransfer.Metadata", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property ServiceName of type QString.

A string representing the service name that will be used over the file transfer channel. This property is equivalent to the ChannelTypeDBusTubeInterface::ServiceName and ChannelTypeStreamTubeInterface::Service properties. If no service name is given then this property will be the empty string.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous setter for the remote object property ServiceName of type QString.

A string representing the service name that will be used over the file transfer channel. This property is equivalent to the ChannelTypeDBusTubeInterface::ServiceName and ChannelTypeStreamTubeInterface::Service properties. If no service name is given then this property will be the empty string.

Returns:
A pending operation which will emit finished when the property has been set.

Asynchronous getter for the remote object property Metadata of type Tp::Metadata.

Additional information about the file transfer set by the channel initiator. If no additional information is given then this property will be empty.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous setter for the remote object property Metadata of type Tp::Metadata.

Additional information about the file transfer set by the channel initiator. If no additional information is given then this property will be empty.

Returns:
A pending operation which will emit finished when the property has been set.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
void Tp::Client::ChannelInterfaceFileTransferMetadataInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/doxygen.png0000644000175200001440000000754612000060453022316 0ustar00collabora-develusers00000000000000PNG  IHDRh ;-IDATx]{XysZ%ʔNF:FЪքb@;~ӎ"DHZm_4!-2UCe["_3LS|y>_ LZߦajLo}.2$Z);*.d~߳w'0@!ZZeͺwډ?O =\L[gdxr0 RrjJ*.WJN5qM[mޕSb58ļRB5SRus[2< %V'+%$fvĺRK$ C 4+xsQ}f[vZ 6c}!,Lt<ūdxH)/f襧C1v[~ 9%DDKgrN}M9Y3*/i謷%ÓU^#vr'p=]_7ySka-/!Ev902ɖF*, O!1k>QӳdxX:=GD<'fvRKUZjbi`t9cxڪVWsabiw11x%h޶9׉>oծhkG~Nls"^™d2%swW윧Dz W8c>1mBv8܉AZ Turth9kRSf/d1kbA.@+;:j ˫҉|#p4i]V~njxfv$եy| S[;BOKVցa 4x0:DN54>gxpo;Z:ɔbۇ|^T7=$4)L!/u#)9/rq%~a-poE,|gm /9/s|c /u P\a’1,;ueyK\"7-K!3>2amm r7M.(~[2Ʉ]C<b9[)v[~,_@\|8qܴ{}Qޔugr7J]|eڐ`4s5+ҡ\ٕxJ,uds&@yIeD;8nZ={ʘfQU|Xڝ)ض"tV-woJy>6谹 Frf͍ Kb(!@~) F{Ave'3H͍u @A$j"s&&b~twQ J~I J]=;=|S{瑓nʍ9˿˄.{ܴ`b ڞ)j\ΕY_E_.g0u2ݪiDWX'kqVgDO݄E 6 1cZėnNXx(]gL_M!b4+eʤd62[]Am,b@JՄ_,Wrr_g8&(QA4.ajAghSFJhheg;Lcs /RĢ,849:n`,o_~6YIqavʐv>=VEX޾5=uu^/ AeD䆸XjS#^˞3-٣[@vm X W¤v9ѽQ_{3W\؏:pajeI)tܱ8I>xdEd:4kONIq>m1!)[Vb47a@暍̱ p%5P~Z?| 30DN  } Un@ 3'T(,ϗ^.MA8a?UپJ<2S~@=hj3-G|8Y.]XRIT9XA$hIPv!vH}o)Ͷ8rߚ =*^iE«8"< Ht"Бx.ZM!b~ƒ !c bwzqT\ L*a.P7:*(Fp8O@5<917>y1zazs{/Q†9 j}SvYD*n]!rhyakj ʄg͑ d_*ll]^&}hnpȨ[.Y7..OڲX|e%L%L9e tO^ (p 3U%r J v2C z2Sf1]@ȝnp%"nJR2G+Z[?@[PcWKZ=Qi?yE`3+W;ӿfH%x2!%#M?;p)*u;p_z%#M !pWRphϦiE8gF?Kp)_+ǩXP&#j&q=n0Ln>D\J[tsI5)&~J :ÚAB@PKƴdoC)aSteLg.襩?M|ָbٚs+stٛ@`ᰱ*q:htw_Zِ^:cn{ӆݺ`N;כj*K}^4?&=zizkCcPBht'|UE1 ;&5v۵]@kS}pեy &>{f>P~ޞk^IENDB`telepathy-qt-0.9.3/doc/html/functions_func_0x73.html0000644000175200001440000016120012000060453024611 0ustar00collabora-develusers00000000000000 Class Members - Functions
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- s -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_rela.html0000644000175200001440000000314012000060453024016 0ustar00collabora-develusers00000000000000 Class Members - Related Functions
   Home · All Classes · All Namespaces · Modules · Functions · Files
 


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00797.html0000644000175200001440000000742312000060453021642 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::BaseFunctorCaller< T, Functor > Member List
This is the complete list of members for Tp::BaseFunctorCaller< T, Functor >, including all inherited members.
AbstractFunctorCaller(HookType invokeMethodHook)Tp::AbstractFunctorCaller [inline]
BaseFunctorCaller(const Functor &functor, AbstractFunctorCaller::HookType invokeMethodHook)Tp::BaseFunctorCaller< T, Functor > [inline]
clone() const Tp::BaseFunctorCaller< T, Functor > [inline, virtual]
functorTp::BaseFunctorCaller< T, Functor >
HookType typedefTp::AbstractFunctorCaller
invokeMethodHookTp::AbstractFunctorCaller
~AbstractFunctorCaller()Tp::AbstractFunctorCaller [inline, virtual]
~BaseFunctorCaller()Tp::BaseFunctorCaller< T, Functor > [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01125.html0000644000175200001440000002174312000060453021625 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceAnonymityInterface Member List
This is the complete list of members for Tp::Client::ConnectionInterfaceAnonymityInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
AnonymityModesChanged(uint modes)Tp::Client::ConnectionInterfaceAnonymityInterface [signal]
ConnectionInterfaceAnonymityInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceAnonymityInterface
ConnectionInterfaceAnonymityInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceAnonymityInterface
ConnectionInterfaceAnonymityInterface(Tp::DBusProxy *proxy)Tp::Client::ConnectionInterfaceAnonymityInterface
ConnectionInterfaceAnonymityInterface(const Tp::Client::ConnectionInterface &mainInterface)Tp::Client::ConnectionInterfaceAnonymityInterface [explicit]
ConnectionInterfaceAnonymityInterface(const Tp::Client::ConnectionInterface &mainInterface, QObject *parent)Tp::Client::ConnectionInterfaceAnonymityInterface
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ConnectionInterfaceAnonymityInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ConnectionInterfaceAnonymityInterface [inline]
requestPropertyAnonymityMandatory() const Tp::Client::ConnectionInterfaceAnonymityInterface [inline]
requestPropertyAnonymityModes() const Tp::Client::ConnectionInterfaceAnonymityInterface [inline]
requestPropertySupportedAnonymityModes() const Tp::Client::ConnectionInterfaceAnonymityInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
setPropertyAnonymityMandatory(bool newValue)Tp::Client::ConnectionInterfaceAnonymityInterface [inline]
setPropertyAnonymityModes(uint newValue)Tp::Client::ConnectionInterfaceAnonymityInterface [inline]
staticInterfaceName()Tp::Client::ConnectionInterfaceAnonymityInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00576_source.html0000644000175200001440000001300412000060453023205 0ustar00collabora-develusers00000000000000 filter.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
filter.h
00001 
00023 #ifndef _TelepathyQt_filter_h_HEADER_GUARD_
00024 #define _TelepathyQt_filter_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/SharedPtr>
00031 #include <TelepathyQt/Types>
00032 
00033 namespace Tp
00034 {
00035 
00036 template <class T>
00037 class Filter : public RefCounted
00038 {
00039     Q_DISABLE_COPY(Filter)
00040 
00041 public:
00042     virtual ~Filter() {}
00043 
00044     virtual bool isValid() const { return false; }
00045 
00046     virtual bool matches(const SharedPtr<T> &t) const
00047     {
00048         Q_UNUSED(t);
00049 
00050         return false;
00051     }
00052 
00053 protected:
00054     Filter() {}
00055 
00056 private:
00057     struct Private;
00058     Private *mPriv; // Just a placeholder really
00059 };
00060 
00061 } // Tp
00062 
00063 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_0x6f.html0000644000175200001440000005263012000060453023666 0ustar00collabora-develusers00000000000000 Class Members
   Home · All Classes · All Namespaces · Modules · Functions · Files
Here is a list of all class members with links to the classes they belong to:

- o -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01105.html0000644000175200001440000002135312000060453021620 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelTypeRoomListInterface Member List
This is the complete list of members for Tp::Client::ChannelTypeRoomListInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ChannelTypeRoomListInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelTypeRoomListInterface
ChannelTypeRoomListInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelTypeRoomListInterface
ChannelTypeRoomListInterface(Tp::DBusProxy *proxy)Tp::Client::ChannelTypeRoomListInterface
ChannelTypeRoomListInterface(const Tp::Client::ChannelInterface &mainInterface)Tp::Client::ChannelTypeRoomListInterface [explicit]
ChannelTypeRoomListInterface(const Tp::Client::ChannelInterface &mainInterface, QObject *parent)Tp::Client::ChannelTypeRoomListInterface
GetListingRooms(int timeout=-1)Tp::Client::ChannelTypeRoomListInterface [inline, slot]
GotRooms(const Tp::RoomInfoList &rooms)Tp::Client::ChannelTypeRoomListInterface [signal]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ChannelTypeRoomListInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
ListingRooms(bool listing)Tp::Client::ChannelTypeRoomListInterface [signal]
ListRooms(int timeout=-1)Tp::Client::ChannelTypeRoomListInterface [inline, slot]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ChannelTypeRoomListInterface [inline]
requestPropertyServer() const Tp::Client::ChannelTypeRoomListInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ChannelTypeRoomListInterface [inline, static]
StopListing(int timeout=-1)Tp::Client::ChannelTypeRoomListInterface [inline, slot]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00863.html0000644000175200001440000000637612000060453021642 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MemberFunctor2< R, T, Arg1, Arg2 > Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00027.html0000644000175200001440000000374312000060453021625 0ustar00collabora-develusers00000000000000 How to report a bug
   Home · All Classes · All Namespaces · Modules · Functions · Files
How to report a bug

Before reporting a bug, please check the Bug Tracker to see if the issue is already known.

Always include the following information in your bug report:

  • The version of Telepathy-Qt you are using

Please submit the bug report, feature request or "to-do" item here.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00155.html0000644000175200001440000003307012000060453021623 0ustar00collabora-develusers00000000000000 Tp::Client::ClientInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

#include <TelepathyQt/Client>

Inherits Tp::AbstractInterface.

List of all members.

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Client".


Constructor & Destructor Documentation

Tp::Client::ClientInterface::ClientInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ClientInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ClientInterface::ClientInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ClientInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ClientInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Member Function Documentation

static QLatin1String Tp::Client::ClientInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Client", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property Interfaces of type QStringList.

A list of the extra interfaces provided by this client. This SHOULD include at least one of ClientObserverInterface , ClientApproverInterface or ClientHandlerInterface .

In the .client file, this is represented by key "Interfaces" in the group named after this interface. The value of the key is a list of interface names each followed by a semicolon (so it always ends with a semicolon unless it is empty), i.e. a key of type "strings" as described in the Desktop Entry specification.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
void Tp::Client::ClientInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00376.html0000644000175200001440000004113712000060453021633 0ustar00collabora-develusers00000000000000 Tp::ServerAuthenticationChannel Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The ServerAuthenticationChannel class is a base class for all ServerAuthentication types. More...

#include <TelepathyQt/ServerAuthenticationChannel>

Inherits Tp::Channel.

List of all members.

Public Member Functions

Static Public Member Functions

Static Public Attributes

Protected Member Functions


Detailed Description

The ServerAuthenticationChannel class is a base class for all ServerAuthentication types.

A ServerAuthentication is a mechanism for a connection to perform an authentication operation. Such an authentication can happen in several ways (at the moment, only Captcha is supported) - this channel will expose a high-level object representing the requested method, allowing a handler to carry on the authentication procedure.

Note that when an authentication procedure succeeds, you can expect this channel to be closed automatically. Please refer to the methods' implementation docs for more details about this.

See Asynchronous Object Model, Shared Pointer Usage


Constructor & Destructor Documentation

Tp::ServerAuthenticationChannel::ServerAuthenticationChannel ( const ConnectionPtr &  connection,
const QString &  objectPath,
const QVariantMap &  immutableProperties,
const Feature coreFeature = ServerAuthenticationChannel::FeatureCore 
) [protected]

Construct a new ServerAuthenticationChannel object.

Parameters:
connectionConnection owning this channel, and specifying the service.
objectPathThe channel object path.
immutablePropertiesThe channel immutable properties.
coreFeatureThe core feature of the channel type, if any. The corresponding introspectable should depend on ServerAuthenticationChannel::FeatureCore.

Member Function Documentation

ServerAuthenticationChannelPtr Tp::ServerAuthenticationChannel::create ( const ConnectionPtr &  connection,
const QString &  objectPath,
const QVariantMap &  immutableProperties 
) [static]

Create a new ServerAuthenticationChannel channel.

Parameters:
connectionConnection owning this channel, and specifying the service.
objectPathThe channel object path.
immutablePropertiesThe channel immutable properties.
Returns:
A ServerAuthenticationChannelPtr object pointing to the newly created ServerAuthenticationChannel object.

Reimplemented from Tp::Channel.

CaptchaAuthenticationPtr Tp::ServerAuthenticationChannel::captchaAuthentication ( ) const

Return the CaptchaAuthentication object for this channel, if the channel implements the CaptchaAuthentication interface and is a ServerAuthentication Channel.

Note that this method will return a meaningful value only if hasCaptchaInterface() returns true.

This method requires ServerAuthenticationChannel::FeatureCore to be ready.

Returns:
A shared pointer to the object representing the CaptchaAuthentication interface, or a null shared pointer if the feature is not ready yet or the channel does not implement Captcha interface.
See also:
hasCaptchaInterface

Return whether this ServerAuthenticationChannel implements Captcha as its authentication mechanism. Should this be true, captchaAuthentication() can be safely accessed.

This method requires ServerAuthenticationChannel::FeatureCore to be ready.

Returns:
true if this channel implements the Captcha interface, false otherwise.
See also:
captchaAuthentication

Member Data Documentation

Feature representing the core that needs to become ready to make the ServerAuthenticationChannel object usable.

Note that this feature must be enabled in order to use most ServerAuthenticationChannel methods. See specific methods documentation for more details.

Reimplemented from Tp::Channel.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00087.html0000644000175200001440000004650012000060453021631 0ustar00collabora-develusers00000000000000 Tp::Client::CallContentMediaDescriptionInterfaceRTCPFeedbackInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::CallContentMediaDescriptionInterfaceRTCPFeedbackInterface Class Reference

#include <TelepathyQt/CallContentMediaDescriptionInterface>

Inherits Tp::AbstractInterface.

List of all members.

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Call1.Content.MediaDescription.Interface.RTCPFeedback".


Constructor & Destructor Documentation

Tp::Client::CallContentMediaDescriptionInterfaceRTCPFeedbackInterface::CallContentMediaDescriptionInterfaceRTCPFeedbackInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a CallContentMediaDescriptionInterfaceRTCPFeedbackInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::CallContentMediaDescriptionInterfaceRTCPFeedbackInterface::CallContentMediaDescriptionInterfaceRTCPFeedbackInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a CallContentMediaDescriptionInterfaceRTCPFeedbackInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a CallContentMediaDescriptionInterfaceRTCPFeedbackInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a CallContentMediaDescriptionInterfaceRTCPFeedbackInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a CallContentMediaDescriptionInterfaceRTCPFeedbackInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Call1.Content.MediaDescription.Interface.RTCPFeedback", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property FeedbackMessages of type Tp::RTCPFeedbackMessageMap.

A map of remote feedback codec properties that are supported.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property DoesAVPF of type bool.

True if the remote contact supports Audio-Visual Profile Feedback (AVPF), otherwise False.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
void Tp::Client::CallContentMediaDescriptionInterfaceRTCPFeedbackInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00706_source.html0000644000175200001440000006404012000060453023206 0ustar00collabora-develusers00000000000000 stream-tube-server.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
stream-tube-server.h
00001 
00023 #ifndef _TelepathyQt_stream_tube_server_h_HEADER_GUARD_
00024 #define _TelepathyQt_stream_tube_server_h_HEADER_GUARD_
00025 
00026 #include <QPair>
00027 #include <QSharedDataPointer>
00028 
00029 #include <TelepathyQt/AccountFactory>
00030 #include <TelepathyQt/ChannelFactory>
00031 #include <TelepathyQt/ConnectionFactory>
00032 #include <TelepathyQt/ContactFactory>
00033 #include <TelepathyQt/RefCounted>
00034 #include <TelepathyQt/Types>
00035 
00036 class QHostAddress;
00037 class QTcpServer;
00038 
00039 namespace Tp
00040 {
00041 
00042 class TP_QT_EXPORT StreamTubeServer : public QObject, public RefCounted
00043 {
00044     Q_OBJECT
00045     Q_DISABLE_COPY(StreamTubeServer)
00046 
00047     class TubeWrapper;
00048 
00049 public:
00050 
00051     class ParametersGenerator
00052     {
00053     public:
00054         virtual QVariantMap
00055             nextParameters(const AccountPtr &account, const OutgoingStreamTubeChannelPtr &tube,
00056                     const ChannelRequestHints &hints) = 0;
00057 
00058     protected:
00059         virtual ~ParametersGenerator() {}
00060     };
00061 
00062     class RemoteContact : public QPair<AccountPtr, ContactPtr>
00063     {
00064     public:
00065         RemoteContact();
00066         RemoteContact(const AccountPtr &account, const ContactPtr &contact);
00067         RemoteContact(const RemoteContact &other);
00068         ~RemoteContact();
00069 
00070         bool isValid() const { return mPriv.constData() != 0; }
00071 
00072         RemoteContact &operator=(const RemoteContact &other);
00073 
00074         const AccountPtr &account() const
00075         {
00076             return first;
00077         }
00078 
00079         const ContactPtr &contact() const
00080         {
00081             return second;
00082         }
00083 
00084     private:
00085         struct Private;
00086         friend struct Private;
00087         QSharedDataPointer<Private> mPriv;
00088     };
00089 
00090     class Tube : public QPair<AccountPtr, OutgoingStreamTubeChannelPtr>
00091     {
00092     public:
00093         Tube();
00094         Tube(const AccountPtr &account, const OutgoingStreamTubeChannelPtr &channel);
00095         Tube(const Tube &other);
00096         ~Tube();
00097 
00098         bool isValid() const { return mPriv.constData() != 0; }
00099 
00100         Tube &operator=(const Tube &other);
00101 
00102         const AccountPtr &account() const
00103         {
00104             return first;
00105         }
00106 
00107         const OutgoingStreamTubeChannelPtr &channel() const
00108         {
00109             return second;
00110         }
00111 
00112     private:
00113         struct Private;
00114         friend struct Private;
00115         QSharedDataPointer<Private> mPriv;
00116     };
00117 
00118     static StreamTubeServerPtr create(
00119             const QStringList &p2pServices,
00120             const QStringList &roomServices = QStringList(),
00121             const QString &clientName = QString(),
00122             bool monitorConnections = false,
00123             const AccountFactoryConstPtr &accountFactory =
00124                 AccountFactory::create(QDBusConnection::sessionBus()),
00125             const ConnectionFactoryConstPtr &connectionFactory =
00126                 ConnectionFactory::create(QDBusConnection::sessionBus()),
00127             const ChannelFactoryConstPtr &channelFactory =
00128                 ChannelFactory::create(QDBusConnection::sessionBus()),
00129             const ContactFactoryConstPtr &contactFactory =
00130                 ContactFactory::create());
00131 
00132     static StreamTubeServerPtr create(
00133             const QDBusConnection &bus,
00134             const AccountFactoryConstPtr &accountFactory,
00135             const ConnectionFactoryConstPtr &connectionFactory,
00136             const ChannelFactoryConstPtr &channelFactory,
00137             const ContactFactoryConstPtr &contactFactory,
00138             const QStringList &p2pServices,
00139             const QStringList &roomServices = QStringList(),
00140             const QString &clientName = QString(),
00141             bool monitorConnections = false);
00142 
00143     static StreamTubeServerPtr create(
00144             const AccountManagerPtr &accountManager,
00145             const QStringList &p2pServices,
00146             const QStringList &roomServices = QStringList(),
00147             const QString &clientName = QString(),
00148             bool monitorConnections = false);
00149 
00150     static StreamTubeServerPtr create(
00151             const ClientRegistrarPtr &registrar,
00152             const QStringList &p2pServices,
00153             const QStringList &roomServices = QStringList(),
00154             const QString &clientName = QString(),
00155             bool monitorConnections = false);
00156 
00157     virtual ~StreamTubeServer();
00158 
00159     ClientRegistrarPtr registrar() const;
00160     QString clientName() const;
00161     bool isRegistered() const;
00162     bool monitorsConnections() const;
00163 
00164     QPair<QHostAddress, quint16> exportedTcpSocketAddress() const;
00165     QVariantMap exportedParameters() const;
00166 
00167     void exportTcpSocket(
00168             const QHostAddress &address,
00169             quint16 port,
00170             const QVariantMap &parameters = QVariantMap());
00171     void exportTcpSocket(
00172             const QTcpServer *server,
00173             const QVariantMap &parameters = QVariantMap());
00174 
00175     void exportTcpSocket(
00176             const QHostAddress &address,
00177             quint16 port,
00178             ParametersGenerator *generator);
00179     void exportTcpSocket(
00180             const QTcpServer *server,
00181             ParametersGenerator *generator);
00182 
00183     QList<Tube> tubes() const;
00184 
00185     QHash<QPair<QHostAddress, quint16>, RemoteContact> tcpConnections() const;
00186 
00187 Q_SIGNALS:
00188 
00189     void tubeRequested(
00190             const Tp::AccountPtr &account,
00191             const Tp::OutgoingStreamTubeChannelPtr &tube,
00192             const QDateTime &userActionTime,
00193             const Tp::ChannelRequestHints &hints);
00194     void tubeClosed(
00195             const Tp::AccountPtr &account,
00196             const Tp::OutgoingStreamTubeChannelPtr &tube,
00197             const QString &error,
00198             const QString &message);
00199 
00200     void newTcpConnection(
00201             const QHostAddress &sourceAddress,
00202             quint16 sourcePort,
00203             const Tp::AccountPtr &account,
00204             const Tp::ContactPtr &contact,
00205             const Tp::OutgoingStreamTubeChannelPtr &tube);
00206     void tcpConnectionClosed(
00207             const QHostAddress &sourceAddress,
00208             quint16 sourcePort,
00209             const Tp::AccountPtr &account,
00210             const Tp::ContactPtr &contact,
00211             const QString &error,
00212             const QString &message,
00213             const Tp::OutgoingStreamTubeChannelPtr &tube);
00214 
00215 private Q_SLOTS:
00216     TP_QT_NO_EXPORT void onInvokedForTube(
00217             const Tp::AccountPtr &account,
00218             const Tp::StreamTubeChannelPtr &tube,
00219             const QDateTime &userActionTime,
00220             const Tp::ChannelRequestHints &requestHints);
00221 
00222     TP_QT_NO_EXPORT void onOfferFinished(
00223             TubeWrapper *wrapper,
00224             Tp::PendingOperation *op);
00225     TP_QT_NO_EXPORT void onTubeInvalidated(
00226             Tp::DBusProxy *proxy,
00227             const QString &error,
00228             const QString &message);
00229 
00230     TP_QT_NO_EXPORT void onNewConnection(
00231             TubeWrapper *wrapper,
00232             uint conn);
00233     TP_QT_NO_EXPORT void onConnectionClosed(
00234             TubeWrapper *wrapper,
00235             uint conn,
00236             const QString &error,
00237             const QString &message);
00238 
00239 private:
00240     TP_QT_NO_EXPORT StreamTubeServer(
00241             const ClientRegistrarPtr &registrar,
00242             const QStringList &p2pServices,
00243             const QStringList &roomServices,
00244             const QString &clientName,
00245             bool monitorConnections);
00246 
00247     struct Private;
00248     Private *mPriv;
00249 };
00250 
00251 } // Tp
00252 
00253 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00534_source.html0000644000175200001440000007114212000060453023206 0ustar00collabora-develusers00000000000000 connection.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
connection.h
00001 
00023 #ifndef _TelepathyQt_connection_h_HEADER_GUARD_
00024 #define _TelepathyQt_connection_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/_gen/cli-connection.h>
00031 
00032 #include <TelepathyQt/ConnectionCapabilities>
00033 #include <TelepathyQt/Contact>
00034 #include <TelepathyQt/DBus>
00035 #include <TelepathyQt/DBusProxy>
00036 #include <TelepathyQt/OptionalInterfaceFactory>
00037 #include <TelepathyQt/ReadinessHelper>
00038 #include <TelepathyQt/Types>
00039 #include <TelepathyQt/SharedPtr>
00040 
00041 #include <TelepathyQt/Constants>
00042 #include <TelepathyQt/Types>
00043 
00044 #include <QSet>
00045 #include <QString>
00046 #include <QStringList>
00047 
00048 namespace Tp
00049 {
00050 
00051 class Channel;
00052 class ConnectionCapabilities;
00053 class ConnectionLowlevel;
00054 class Contact;
00055 class ContactManager;
00056 class PendingChannel;
00057 class PendingContactAttributes;
00058 class PendingHandles;
00059 class PendingOperation;
00060 class PendingReady;
00061 
00062 class TP_QT_EXPORT Connection : public StatefulDBusProxy,
00063                    public OptionalInterfaceFactory<Connection>
00064 {
00065     Q_OBJECT
00066     Q_DISABLE_COPY(Connection)
00067 
00068 public:
00069     static const Feature FeatureCore;
00070     static const Feature FeatureSelfContact;
00071     static const Feature FeatureSimplePresence;
00072     static const Feature FeatureRoster;
00073     static const Feature FeatureRosterGroups;
00074     static const Feature FeatureAccountBalance; // TODO unit tests for this
00075     static const Feature FeatureConnected;
00076 
00077     static ConnectionPtr create(const QString &busName,
00078             const QString &objectPath,
00079             const ChannelFactoryConstPtr &channelFactory,
00080             const ContactFactoryConstPtr &contactFactory);
00081     static ConnectionPtr create(const QDBusConnection &bus,
00082             const QString &busName, const QString &objectPath,
00083             const ChannelFactoryConstPtr &channelFactory,
00084             const ContactFactoryConstPtr &contactFactory);
00085 
00086     virtual ~Connection();
00087 
00088     ChannelFactoryConstPtr channelFactory() const;
00089     ContactFactoryConstPtr contactFactory() const;
00090 
00091     QString cmName() const;
00092     QString protocolName() const;
00093 
00094     ConnectionStatus status() const;
00095     ConnectionStatusReason statusReason() const;
00096 
00097     class ErrorDetails
00098     {
00099         public:
00100             ErrorDetails();
00101             ErrorDetails(const QVariantMap &details);
00102             ErrorDetails(const ErrorDetails &other);
00103             ~ErrorDetails();
00104 
00105             ErrorDetails &operator=(const ErrorDetails &other);
00106 
00107             bool isValid() const { return mPriv.constData() != 0; }
00108 
00109             bool hasDebugMessage() const
00110             {
00111                 return allDetails().contains(QLatin1String("debug-message"));
00112             }
00113 
00114             QString debugMessage() const
00115             {
00116                 return qdbus_cast<QString>(allDetails().value(QLatin1String("debug-message")));
00117             }
00118 
00119             bool hasServerMessage() const
00120             {
00121                 return allDetails().contains(QLatin1String("server-message"));
00122             }
00123 
00124             QString serverMessage() const
00125             {
00126                 return qdbus_cast<QString>(allDetails().value(QLatin1String("server-message")));
00127             }
00128 
00129             bool hasUserRequested() const
00130             {
00131                 return allDetails().contains(QLatin1String("user-requested"));
00132             }
00133 
00134             bool userRequested() const
00135             {
00136                 return qdbus_cast<bool>(allDetails().value(QLatin1String("user-requested")));
00137             }
00138 
00139             bool hasExpectedHostname() const
00140             {
00141                 return allDetails().contains(QLatin1String("expected-hostname"));
00142             }
00143 
00144             QString expectedHostname() const
00145             {
00146                 return qdbus_cast<QString>(allDetails().value(QLatin1String("expected-hostname")));
00147             }
00148 
00149             bool hasCertificateHostname() const
00150             {
00151                 return allDetails().contains(QLatin1String("certificate-hostname"));
00152             }
00153 
00154             QString certificateHostname() const
00155             {
00156                 return qdbus_cast<QString>(allDetails().value(QLatin1String("certificate-hostname")));
00157             }
00158 
00159             QVariantMap allDetails() const;
00160 
00161         private:
00162             friend class Connection;
00163 
00164             struct Private;
00165             friend struct Private;
00166             QSharedDataPointer<Private> mPriv;
00167     };
00168 
00169     const ErrorDetails &errorDetails() const;
00170 
00171     uint selfHandle() const;
00172     ContactPtr selfContact() const;
00173 
00174     CurrencyAmount accountBalance() const;
00175 
00176     ConnectionCapabilities capabilities() const;
00177 
00178     ContactManagerPtr contactManager() const;
00179 
00180 #if defined(BUILDING_TP_QT) || defined(TP_QT_ENABLE_LOWLEVEL_API)
00181     ConnectionLowlevelPtr lowlevel();
00182     ConnectionLowlevelConstPtr lowlevel() const;
00183 #endif
00184 
00185 Q_SIGNALS:
00186     void statusChanged(Tp::ConnectionStatus newStatus);
00187 
00188     void selfHandleChanged(uint newHandle);
00189     // FIXME: might not need this when Renaming is fixed and mapped to Contacts
00190     void selfContactChanged();
00191 
00192     void accountBalanceChanged(const Tp::CurrencyAmount &accountBalance);
00193 
00194 protected:
00195     Connection(const QDBusConnection &bus, const QString &busName,
00196             const QString &objectPath,
00197             const ChannelFactoryConstPtr &channelFactory,
00198             const ContactFactoryConstPtr &contactFactory,
00199             const Feature &coreFeature);
00200 
00201     Client::ConnectionInterface *baseInterface() const;
00202 
00203 private Q_SLOTS:
00204     TP_QT_NO_EXPORT void onStatusReady(uint status);
00205     TP_QT_NO_EXPORT void onStatusChanged(uint status, uint reason);
00206     TP_QT_NO_EXPORT void onConnectionError(const QString &error, const QVariantMap &details);
00207     TP_QT_NO_EXPORT void gotMainProperties(QDBusPendingCallWatcher *watcher);
00208     TP_QT_NO_EXPORT void gotStatus(QDBusPendingCallWatcher *watcher);
00209     TP_QT_NO_EXPORT void gotInterfaces(QDBusPendingCallWatcher *watcher);
00210     TP_QT_NO_EXPORT void gotSelfHandle(QDBusPendingCallWatcher *watcher);
00211     TP_QT_NO_EXPORT void gotCapabilities(QDBusPendingCallWatcher *watcher);
00212     TP_QT_NO_EXPORT void gotContactAttributeInterfaces(QDBusPendingCallWatcher *watcher);
00213     TP_QT_NO_EXPORT void gotSimpleStatuses(QDBusPendingCallWatcher *watcher);
00214     TP_QT_NO_EXPORT void gotSelfContact(Tp::PendingOperation *op);
00215 
00216     TP_QT_NO_EXPORT void onIntrospectRosterFinished(Tp::PendingOperation *op);
00217     TP_QT_NO_EXPORT void onIntrospectRosterGroupsFinished(Tp::PendingOperation *op);
00218 
00219     TP_QT_NO_EXPORT void doReleaseSweep(uint handleType);
00220 
00221     TP_QT_NO_EXPORT void onSelfHandleChanged(uint);
00222 
00223     TP_QT_NO_EXPORT void gotBalance(QDBusPendingCallWatcher *watcher);
00224     TP_QT_NO_EXPORT void onBalanceChanged(const Tp::CurrencyAmount &);
00225 
00226 private:
00227     class PendingConnect;
00228     friend class ConnectionLowlevel;
00229     friend class PendingChannel;
00230     friend class PendingConnect;
00231     friend class PendingContactAttributes;
00232     friend class PendingContacts;
00233     friend class PendingHandles;
00234     friend class ReferencedHandles;
00235 
00236     TP_QT_NO_EXPORT void refHandle(HandleType handleType, uint handle);
00237     TP_QT_NO_EXPORT void unrefHandle(HandleType handleType, uint handle);
00238     TP_QT_NO_EXPORT void handleRequestLanded(HandleType handleType);
00239 
00240     struct Private;
00241     friend struct Private;
00242     Private *mPriv;
00243 };
00244 
00245 } // Tp
00246 
00247 Q_DECLARE_METATYPE(Tp::Connection::ErrorDetails);
00248 
00249 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00984.html0000644000175200001440000000505712000060453021641 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactSSRCsMap Member List
This is the complete list of members for Tp::ContactSSRCsMap, including all inherited members.
ContactSSRCsMap()Tp::ContactSSRCsMap [inline]
ContactSSRCsMap(const QMap< uint, UIntList > &a)Tp::ContactSSRCsMap [inline]
operator=(const QMap< uint, UIntList > &a)Tp::ContactSSRCsMap [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01057.html0000644000175200001440000000506112000060453021624 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactCodecMap Member List
This is the complete list of members for Tp::ContactCodecMap, including all inherited members.
ContactCodecMap()Tp::ContactCodecMap [inline]
ContactCodecMap(const QMap< uint, CodecList > &a)Tp::ContactCodecMap [inline]
operator=(const QMap< uint, CodecList > &a)Tp::ContactCodecMap [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00825.html0000644000175200001440000001321712000060453021630 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Channel::GroupMemberChangeDetails Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00916.html0000644000175200001440000001570112000060453021631 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ProfileManager Member List
This is the complete list of members for Tp::ProfileManager, including all inherited members.
actualFeatures() const Tp::ReadyObject [virtual]
becomeReady(const Features &requestedFeatures=Features())Tp::ReadyObject [virtual]
create(const QDBusConnection &bus=QDBusConnection::sessionBus())Tp::ProfileManager [static]
FeatureCoreTp::ProfileManager [static]
FeatureFakeProfilesTp::ProfileManager [static]
isReady(const Features &features=Features()) const Tp::ReadyObject [virtual]
missingFeatures() const Tp::ReadyObject [virtual]
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
profileForService(const QString &serviceName) const Tp::ProfileManager
profiles() const Tp::ProfileManager
profilesForCM(const QString &cmName) const Tp::ProfileManager
profilesForProtocol(const QString &protocolName) const Tp::ProfileManager
propertyChanged(const QString &propertyName)Tp::Object [signal]
readinessHelper() const Tp::ReadyObject [protected]
ReadyObject(RefCounted *object, const Feature &featureCore)Tp::ReadyObject
ReadyObject(DBusProxy *proxy, const Feature &featureCore)Tp::ReadyObject
RefCounted()Tp::RefCounted [inline]
requestedFeatures() const Tp::ReadyObject [virtual]
~Object()Tp::Object [virtual]
~ProfileManager()Tp::ProfileManager
~ReadyObject()Tp::ReadyObject [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_func_0x7e.html0000644000175200001440000004705112000060453024702 0ustar00collabora-develusers00000000000000 Class Members - Functions
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- ~ -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00076.html0000644000175200001440000002117212000060453021625 0ustar00collabora-develusers00000000000000 Tp::Callback6< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 > Class Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Callback6< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 > Class Template Reference

Callback with 6 arguments. More...

#include <TelepathyQt/Callbacks>

Inherits Tp::BaseCallback.

List of all members.

Public Types

Public Member Functions


Detailed Description

template<class R, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6>
class Tp::Callback6< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >

Callback with 6 arguments.

See Callbacks Usage


Member Typedef Documentation

template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 , class Arg6 >
typedef R(* Tp::Callback6< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >::FunctionType)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6)
template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 , class Arg6 >
typedef R Tp::Callback6< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >::ResultType

Constructor & Destructor Documentation

template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 , class Arg6 >
Tp::Callback6< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >::Callback6 ( ) [inline]
template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 , class Arg6 >
template<class Functor >
Tp::Callback6< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >::Callback6 ( const Functor &  functor) [inline]

Member Function Documentation

template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 , class Arg6 >
ResultType Tp::Callback6< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >::operator() ( Arg1  a1,
Arg2  a2,
Arg3  a3,
Arg4  a4,
Arg5  a5,
Arg6  a6 
) const [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00096.html0000644000175200001440000001540512000060453021631 0ustar00collabora-develusers00000000000000 Tp::CandidateInfo Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::CandidateInfo Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<QString, QDBusVariant>, but needed to have a discrete type in the Qt type system.

Extra information about the candidate. Allowed and mandatory keys depend on the transport protocol used. The following keys are commenly used:

type - u
The type of candidate (Call_Stream_Candidate_Type)
foundation - s
The foundation of this candidate
protocol - u
Underlying protocol of the candidate (Media_Stream_Base_Proto)
priority - u
Priority of the candidate (should be a number between 0 and 65535). Most ICE implementations will prefer the highest priority candidate pair that manages to connect. For backwards compatibility with non-ICE SIP clients, the lowest priority candidate may be sent as a raw UDP fallback candidate. It is recommended that a relay candidate is used as the lowest priority candidate if possible. If both IPv4 and IPv6 raw udp fallback candidates are available, they should be set to the same priority and advertised to the CM at the same time. The CM will decide which to advertise to the remote end.
base-ip - s
The underlying Host address where media sent to this (non-host-type) candidate will eventually arrive.
base-port - u
The underlying Host port where media sent to this (non-host-type) candidate will eventually arrive.
username - s
Username of this candidate (only if credentials are per candidate)
password - s
Password of this candidate (only if credentials are per candidate)
ttl - u
The TTL mandated for RTP/RTCP packets sent to a multicast group (only valid for Multicast Streams)

Constructor & Destructor Documentation

Tp::CandidateInfo::CandidateInfo ( const QMap< QString, QDBusVariant > &  a) [inline]

Member Function Documentation

CandidateInfo& Tp::CandidateInfo::operator= ( const QMap< QString, QDBusVariant > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00363.html0000644000175200001440000014674612000060453021643 0ustar00collabora-develusers00000000000000 Tp::ReferencedHandles Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ReferencedHandles Class Reference

Helper container for safe management of handle lifetimes. Every handle in a ReferencedHandles container is guaranteed to be valid (and stay valid, as long it's in at least one ReferencedHandles container). More...

#include <TelepathyQt/ReferencedHandles>

List of all members.

Public Types

Public Member Functions


Detailed Description

Helper container for safe management of handle lifetimes. Every handle in a ReferencedHandles container is guaranteed to be valid (and stay valid, as long it's in at least one ReferencedHandles container).

The class offers a QList-style API. However, from the mutable operations, only the operations for which the validity guarantees can be preserved are provided. This means no functions which can add an arbitrary handle to the container are included - the only way to add handles to the container is to reference them using Connection::referenceHandles() and appending the resulting ReferenceHandles instance.

ReferencedHandles is a implicitly shared class.


Member Typedef Documentation

typedef UIntList::const_iterator Tp::ReferencedHandles::const_iterator
typedef UIntList::ConstIterator Tp::ReferencedHandles::ConstIterator
typedef UIntList::const_pointer Tp::ReferencedHandles::const_pointer
typedef UIntList::const_reference Tp::ReferencedHandles::const_reference
typedef UIntList::difference_type Tp::ReferencedHandles::difference_type
typedef UIntList::pointer Tp::ReferencedHandles::pointer
typedef UIntList::reference Tp::ReferencedHandles::reference
typedef UIntList::size_type Tp::ReferencedHandles::size_type
typedef UIntList::value_type Tp::ReferencedHandles::value_type

Constructor & Destructor Documentation


Member Function Documentation

ConnectionPtr Tp::ReferencedHandles::connection ( ) const
uint Tp::ReferencedHandles::at ( int  i) const
uint Tp::ReferencedHandles::back ( ) const [inline]
uint Tp::ReferencedHandles::first ( ) const [inline]
uint Tp::ReferencedHandles::front ( ) const [inline]
uint Tp::ReferencedHandles::last ( ) const [inline]
uint Tp::ReferencedHandles::value ( int  i,
uint  defaultValue = 0 
) const
bool Tp::ReferencedHandles::contains ( uint  handle) const
int Tp::ReferencedHandles::count ( uint  handle) const
int Tp::ReferencedHandles::count ( ) const [inline]
bool Tp::ReferencedHandles::empty ( ) const [inline]
bool Tp::ReferencedHandles::endsWith ( uint  handle) const [inline]
int Tp::ReferencedHandles::indexOf ( uint  handle,
int  from = 0 
) const
int Tp::ReferencedHandles::lastIndexOf ( uint  handle,
int  from = -1 
) const
int Tp::ReferencedHandles::length ( ) const [inline]
ReferencedHandles Tp::ReferencedHandles::mid ( int  pos,
int  length = -1 
) const
bool Tp::ReferencedHandles::startsWith ( uint  handle) const [inline]
void Tp::ReferencedHandles::append ( const ReferencedHandles another) [inline]
void Tp::ReferencedHandles::move ( int  from,
int  to 
)
int Tp::ReferencedHandles::removeAll ( uint  handle)
bool Tp::ReferencedHandles::removeOne ( uint  handle)
void Tp::ReferencedHandles::swap ( int  i,
int  j 
)
bool Tp::ReferencedHandles::operator!= ( const ReferencedHandles another) const [inline]
bool Tp::ReferencedHandles::operator!= ( const UIntList another) const [inline]
ReferencedHandles Tp::ReferencedHandles::operator+ ( const ReferencedHandles another) const
ReferencedHandles& Tp::ReferencedHandles::operator+= ( const ReferencedHandles another) [inline]
ReferencedHandles& Tp::ReferencedHandles::operator<< ( const ReferencedHandles another) [inline]
ReferencedHandles & Tp::ReferencedHandles::operator= ( const ReferencedHandles another)
bool Tp::ReferencedHandles::operator== ( const ReferencedHandles another) const
bool Tp::ReferencedHandles::operator== ( const UIntList list) const
uint Tp::ReferencedHandles::operator[] ( int  i) const [inline]
QSet<uint> Tp::ReferencedHandles::toSet ( ) const [inline]
std::list<uint> Tp::ReferencedHandles::toStdList ( ) const [inline]
QVector<uint> Tp::ReferencedHandles::toVector ( ) const [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00411.html0000644000175200001440000002500512000060453021615 0ustar00collabora-develusers00000000000000 Tp::StreamTubeClient::Tube Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::StreamTubeClient::Tube Class Reference

The StreamTubeClient::Tube class represents a tube being handled by the client. More...

#include <TelepathyQt/StreamTubeClient>

List of all members.

Public Member Functions


Detailed Description

The StreamTubeClient::Tube class represents a tube being handled by the client.


Constructor & Destructor Documentation

Constructs a new invalid Tube instance.

Tp::StreamTubeClient::Tube::Tube ( const AccountPtr &  account,
const IncomingStreamTubeChannelPtr &  channel 
)

Constructs a Tube instance for the given tube channel from the given account.

Parameters:
accountA pointer to the account the online connection of which the tube originates from.
channelA pointer to the tube channel object.

Copy constructor.

Class destructor.


Member Function Documentation

bool Tp::StreamTubeClient::Tube::isValid ( ) const [inline]

Return whether or not the tube is valid or is just the null object created using the default constructor.

Returns:
true if valid, false otherwise.
StreamTubeClient::Tube & Tp::StreamTubeClient::Tube::operator= ( const Tube other)

Assignment operator.

AccountPtr Tp::StreamTubeClient::Tube::account ( ) const [inline]

Return the account from which the tube originates.

Returns:
A pointer to the account object.
IncomingStreamTubeChannelPtr Tp::StreamTubeClient::Tube::channel ( ) const [inline]

Return the actual tube channel.

Returns:
A pointer to the channel.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01004.html0000644000175200001440000000570312000060453021617 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MediaStreamInfo Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00276.html0000644000175200001440000002146012000060453021627 0ustar00collabora-develusers00000000000000 Tp::MemberFunctor3< R, T, Arg1, Arg2, Arg3 > Struct Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MemberFunctor3< R, T, Arg1, Arg2, Arg3 > Struct Template Reference

#include </home/collabora-devel/kde/src/telepathy-qt4/TelepathyQt/functors.h>

Inherits Tp::BaseFunctor.

List of all members.

Public Types

Public Member Functions

Public Attributes

template<class R, class T, class Arg1, class Arg2, class Arg3>
struct Tp::MemberFunctor3< R, T, Arg1, Arg2, Arg3 >


Member Typedef Documentation

template<class R, class T, class Arg1, class Arg2, class Arg3>
typedef R(T::* Tp::MemberFunctor3< R, T, Arg1, Arg2, Arg3 >::FunctionType)(Arg1, Arg2, Arg3)
template<class R, class T, class Arg1, class Arg2, class Arg3>
typedef R Tp::MemberFunctor3< R, T, Arg1, Arg2, Arg3 >::ResultType

Constructor & Destructor Documentation

template<class R, class T, class Arg1, class Arg2, class Arg3>
Tp::MemberFunctor3< R, T, Arg1, Arg2, Arg3 >::MemberFunctor3 ( T *  object,
FunctionType  fn 
) [inline]

Member Function Documentation

template<class R, class T, class Arg1, class Arg2, class Arg3>
ResultType Tp::MemberFunctor3< R, T, Arg1, Arg2, Arg3 >::operator() ( Arg1  a1,
Arg2  a2,
Arg3  a3 
) const [inline]

Member Data Documentation

template<class R, class T, class Arg1, class Arg2, class Arg3>
T* Tp::MemberFunctor3< R, T, Arg1, Arg2, Arg3 >::object
template<class R, class T, class Arg1, class Arg2, class Arg3>
FunctionType Tp::MemberFunctor3< R, T, Arg1, Arg2, Arg3 >::fn


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00258.html0000644000175200001440000001152212000060453021625 0ustar00collabora-develusers00000000000000 Tp::LocalPendingInfo Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::LocalPendingInfo Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

A structure representing a contact whose attempt to join a group is to be confirmed by the local user using AddMembers.


Member Data Documentation

The contact to be added to the group

The contact requesting or causing the change

The reason for the change

A human-readable message from the Actor, or an empty string if there is no message


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00204.html0000644000175200001440000001241212000060453021613 0ustar00collabora-develusers00000000000000 Tp::ContactPresences Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactPresences Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<uint, LastActivityAndStatuses>, but needed to have a discrete type in the Qt type system.

Mapping returned by GetPresence and signalled by PresenceUpdate, where the keys are contacts and the values represent their presences.


Constructor & Destructor Documentation

Tp::ContactPresences::ContactPresences ( const QMap< uint, LastActivityAndStatuses > &  a) [inline]

Member Function Documentation

ContactPresences& Tp::ContactPresences::operator= ( const QMap< uint, LastActivityAndStatuses > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00268.html0000644000175200001440000000727712000060453021642 0ustar00collabora-develusers00000000000000 Tp::MediaStreamHandlerCandidate Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MediaStreamHandlerCandidate Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.


Member Data Documentation


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/index.qhp0000644000175200001440000503506212000060453021753 0ustar00collabora-develusers00000000000000 org.freedesktop.Telepathy.Qt TelepathyQt-0.9.3 doxygen
tabs.css tab_a.png tab_b.png tab_h.png tab_s.png nav_h.png nav_f.png bc_s.png doxygen.png closed.png open.png doxygen.css a00419_source.html a00421_source.html a00423_source.html a00425_source.html a00427_source.html a00428_source.html a00430_source.html a00432_source.html a00434_source.html a00436_source.html a00438_source.html a00441_source.html a00443_source.html a00445_source.html a00447_source.html a00449_source.html a00451_source.html a00453_source.html a00455_source.html a00457_source.html a00459_source.html a00461_source.html a00463_source.html a00465_source.html a00466_source.html a00468_source.html a00470_source.html a00472_source.html a00474_source.html a00476_source.html a00480_source.html a00481_source.html a00482_source.html a00483_source.html a00484_source.html a00485_source.html a00486_source.html a00487_source.html a00488_source.html a00489_source.html a00490_source.html a00491_source.html a00492_source.html a00493_source.html a00494_source.html a00495_source.html a00496_source.html a00497_source.html a00498_source.html a00499_source.html a00500_source.html a00501_source.html a00502_source.html a00503_source.html a00504_source.html a00505_source.html a00506_source.html a00507_source.html a00508_source.html a00509_source.html a00510_source.html a00511_source.html a00512_source.html a00513_source.html a00514_source.html a00515_source.html a00516_source.html a00517_source.html a00518_source.html a00519_source.html a00520_source.html a00522_source.html a00524_source.html a00526_source.html a00528_source.html a00529_source.html a00530_source.html a00532_source.html a00534_source.html a00535_source.html a00536_source.html a00538_source.html a00540_source.html a00543_source.html a00545_source.html a00547_source.html a00549_source.html a00551_source.html a00553_source.html a00555_source.html a00557_source.html a00559_source.html a00561_source.html a00563_source.html a00565_source.html a00567_source.html a00570_source.html a00572_source.html a00574_source.html a00576_source.html a00578_source.html a00579_source.html a00581_source.html a00583_source.html a00584_source.html a00585_source.html a00586_source.html a00589_source.html a00591_source.html a00593_source.html a00595_source.html a00597_source.html a00599_source.html a00602_source.html a00604_source.html a00606_source.html a00608_source.html a00610_source.html a00612_source.html a00614_source.html a00616_source.html a00618_source.html a00620_source.html a00622_source.html a00624_source.html a00626_source.html a00628_source.html a00630_source.html a00632_source.html a00634_source.html a00636_source.html a00638_source.html a00640_source.html a00642_source.html a00644_source.html a00646_source.html a00648_source.html a00650_source.html a00652_source.html a00654_source.html a00656_source.html a00658_source.html a00660_source.html a00662_source.html a00664_source.html a00666_source.html a00668_source.html a00670_source.html a00672_source.html a00674_source.html a00676_source.html a00678_source.html a00680_source.html a00682_source.html a00684_source.html a00686_source.html a00688_source.html a00689_source.html a00691_source.html a00693_source.html a00695_source.html a00696_source.html a00698_source.html a00700_source.html a00702_source.html a00704_source.html a00706_source.html a00708_source.html a00710_source.html a00712_source.html a00714_source.html a00716_source.html a00717_source.html a00719_source.html a00720_source.html a00722_source.html a00001.html a00002.html a00003.html a00004.html a00005.html a00006.html a00007.html a00008.html a00009.html a00010.html a00011.html a00012.html a00013.html a00014.html a00015.html a00016.html a00017.html a00018.html a00019.html a00020.html a00021.html a00022.html a00023.html a00024.html a00025.html a00026.html a00027.html a00028.html a00029.html a00764.html a00765.html a00733.html a00734.html a00735.html a00736.html a00737.html a00738.html a00739.html a00740.html a00741.html a00742.html a00743.html a00744.html a00745.html a00746.html a00747.html a00748.html a00749.html a00750.html a00751.html a00752.html a00753.html a00754.html a00755.html a00756.html a00757.html a00758.html a00759.html a00760.html a00761.html a00762.html a00763.html a00724.html a00030.html a00768.html a00031.html a00769.html a00034.html a00770.html a00295.html a00771.html a00032.html a00772.html a00033.html a00773.html a00098.html a00774.html a00249.html a00775.html a00037.html a00776.html a00042.html a00777.html a00047.html a00778.html a00049.html a00779.html a00050.html a00780.html a00040.html a00781.html a00054.html a00782.html a00057.html a00783.html a00058.html a00784.html a00062.html a00785.html a00061.html a00786.html a00065.html a00787.html a00038.html a00788.html a00066.html a00789.html a00067.html a00790.html a00068.html a00791.html a00078.html a00792.html a00079.html a00793.html a00306.html a00794.html a00091.html a00795.html a00036.html a00796.html a00064.html a00797.html a00060.html a00798.html a00234.html a00799.html a00070.html a00800.html a00235.html a00801.html a00071.html a00802.html a00236.html a00803.html a00072.html a00804.html a00237.html a00805.html a00073.html a00806.html a00238.html a00807.html a00074.html a00808.html a00239.html a00809.html a00075.html a00810.html a00240.html a00811.html a00076.html a00812.html a00241.html a00813.html a00077.html a00814.html a00099.html a00815.html a00104.html a00816.html a00102.html a00817.html a00109.html a00818.html a00110.html a00819.html a00113.html a00820.html a00115.html a00821.html a00137.html a00822.html a00138.html a00823.html a00106.html a00824.html a00244.html a00825.html a00158.html a00826.html a00162.html a00827.html a00163.html a00828.html a00186.html a00829.html a00189.html a00830.html a00187.html a00831.html a00161.html a00832.html a00226.html a00833.html a00192.html a00834.html a00197.html a00835.html a00201.html a00836.html a00203.html a00837.html a00205.html a00838.html a00375.html a00839.html a00190.html a00840.html a00254.html a00841.html a00214.html a00842.html a00215.html a00843.html a00217.html a00844.html a00216.html a00845.html a00395.html a00846.html a00394.html a00847.html a00218.html a00848.html a00035.html a00849.html a00219.html a00850.html a00224.html a00851.html a00227.html a00852.html a00228.html a00853.html a00231.html a00854.html a00230.html a00855.html a00232.html a00856.html a00233.html a00857.html a00063.html a00350.html a00858.html a00273.html a00859.html a00351.html a00860.html a00274.html a00861.html a00352.html a00862.html a00275.html a00863.html a00353.html a00864.html a00276.html a00865.html a00354.html a00866.html a00277.html a00867.html a00355.html a00868.html a00278.html a00869.html a00356.html a00870.html a00279.html a00871.html a00357.html a00872.html a00280.html a00873.html a00242.html a00874.html a00243.html a00875.html a00245.html a00876.html a00251.html a00877.html a00252.html a00878.html a00253.html a00879.html a00260.html a00880.html a00282.html a00881.html a00283.html a00882.html a00281.html a00883.html a00361.html a00884.html a00225.html a00885.html a00287.html a00886.html a00291.html a00887.html a00292.html a00888.html a00296.html a00889.html a00297.html a00890.html a00298.html a00891.html a00299.html a00892.html a00300.html a00893.html a00305.html a00894.html a00307.html a00895.html a00310.html a00896.html a00308.html a00897.html a00312.html a00898.html a00313.html a00899.html a00314.html a00900.html a00315.html a00901.html a00316.html a00902.html a00317.html a00903.html a00319.html a00904.html a00320.html a00905.html a00321.html a00906.html a00322.html a00907.html a00324.html a00908.html a00326.html a00909.html a00325.html a00910.html a00330.html a00911.html a00329.html a00912.html a00332.html a00913.html a00334.html a00914.html a00335.html a00915.html a00337.html a00916.html a00336.html a00917.html a00301.html a00918.html a00333.html a00919.html a00343.html a00920.html a00348.html a00921.html a00359.html a00922.html a00255.html a00923.html a00360.html a00924.html a00363.html a00925.html a00366.html a00926.html a00367.html a00927.html a00370.html a00928.html a00376.html a00929.html a00362.html a00930.html a00379.html a00931.html a00417.html a00932.html a00380.html a00933.html a00382.html a00934.html a00327.html a00935.html a00318.html a00936.html a00331.html a00937.html a00311.html a00938.html a00386.html a00939.html a00387.html a00940.html a00401.html a00941.html a00402.html a00942.html a00407.html a00943.html a00411.html a00944.html a00403.html a00945.html a00302.html a00946.html a00364.html a00947.html a00410.html a00948.html a00323.html a00949.html a00400.html a00950.html a00399.html a00951.html a00408.html a00952.html a00412.html a00953.html a00069.html a00954.html a00294.html a00955.html a00414.html a00956.html a00039.html a00957.html a00051.html a00958.html a00052.html a00959.html a00053.html a00960.html a00056.html a00961.html a00059.html a00962.html a00089.html a00963.html a00090.html a00964.html a00095.html a00965.html a00096.html a00966.html a00100.html a00967.html a00101.html a00968.html a00103.html a00969.html a00105.html a00970.html a00107.html a00971.html a00108.html a00972.html a00111.html a00973.html a00116.html a00974.html a00136.html a00975.html a00152.html a00976.html a00160.html a00977.html a00191.html a00978.html a00194.html a00979.html a00195.html a00980.html a00198.html a00981.html a00200.html a00982.html a00202.html a00983.html a00209.html a00984.html a00206.html a00985.html a00208.html a00986.html a00211.html a00987.html a00212.html a00988.html a00220.html a00989.html a00221.html a00990.html a00223.html a00991.html a00229.html a00992.html a00250.html a00993.html a00246.html a00994.html a00247.html a00995.html a00258.html a00996.html a00259.html a00997.html a00261.html a00998.html a00262.html a00999.html a00264.html a01000.html a00265.html a01001.html a00266.html a01002.html a00271.html a01003.html a00272.html a01004.html a00284.html a01005.html a00285.html a01006.html a00286.html a01007.html a00288.html a01008.html a00289.html a01009.html a00293.html a01010.html a00303.html a01011.html a00328.html a01012.html a00340.html a01013.html a00341.html a01014.html a00342.html a01015.html a00349.html a01016.html a00358.html a01017.html a00371.html a01018.html a00374.html a01019.html a00365.html a01020.html a00368.html a01021.html a00369.html a01022.html a00377.html a01023.html a00383.html a01024.html a00384.html a01025.html a00388.html a01026.html a00389.html a01027.html a00390.html a01028.html a00391.html a01029.html a00392.html a01030.html a00393.html a01031.html a00398.html a01032.html a00404.html a01033.html a00405.html a01034.html a00406.html a01035.html a00409.html a01036.html a00413.html a01037.html a00415.html a01038.html a00416.html a01039.html a00097.html a01040.html a00159.html a01041.html a00193.html a01042.html a00199.html a01043.html a00207.html a01044.html a00210.html a01045.html a00248.html a01046.html a00257.html a01047.html a00263.html a01048.html a00268.html a01049.html a00269.html a01050.html a00290.html a01051.html a00373.html a01052.html a00378.html a01053.html a00381.html a01054.html a00385.html a01055.html a00396.html a01056.html a00196.html a01057.html a00204.html a01058.html a00372.html a01059.html a00397.html a01060.html a00041.html a00728.html a00048.html a01061.html a00043.html a01062.html a00044.html a01063.html a00045.html a01064.html a00046.html a01065.html a00085.html a01066.html a00086.html a01067.html a00087.html a01068.html a00088.html a01069.html a00080.html a01070.html a00081.html a01071.html a00082.html a01072.html a00083.html a01073.html a00084.html a01074.html a00092.html a01075.html a00093.html a01076.html a00094.html a01077.html a00114.html a01078.html a00112.html a01079.html a00139.html a01080.html a00117.html a01081.html a00118.html a01082.html a00119.html a01083.html a00120.html a01084.html a00121.html a01085.html a00122.html a01086.html a00124.html a01087.html a00123.html a01088.html a00125.html a01089.html a00126.html a01090.html a00127.html a01091.html a00128.html a01092.html a00129.html a01093.html a00130.html a01094.html a00131.html a01095.html a00134.html a01096.html a00132.html a01097.html a00133.html a01098.html a00135.html a01099.html a00140.html a01100.html a00141.html a01101.html a00142.html a01102.html a00143.html a01103.html a00144.html a01104.html a00145.html a01105.html a00146.html a01106.html a00147.html a01107.html a00149.html a01108.html a00148.html a01109.html a00150.html a01110.html a00151.html a01111.html a00155.html a01112.html a00153.html a01113.html a00154.html a01114.html a00156.html a01115.html a00157.html a01116.html a00188.html a01117.html a00344.html a01118.html a00345.html a01119.html a00346.html a01120.html a00347.html a01121.html a00164.html a01122.html a00165.html a01123.html a00166.html a01124.html a00167.html a01125.html a00168.html a01126.html a00169.html a01127.html a00170.html a01128.html a00171.html a01129.html a00172.html a01130.html a00173.html a01131.html a00174.html a01132.html a00175.html a01133.html a00176.html a01134.html a00177.html a01135.html a00178.html a01136.html a00179.html a01137.html a00180.html a01138.html a00181.html a01139.html a00182.html a01140.html a00183.html a01141.html a00184.html a01142.html a00185.html a01143.html a00222.html a01144.html a00267.html a01145.html a00270.html a01146.html a00339.html a01147.html a00055.html a01148.html a00729.html a00213.html a01149.html a00256.html a01150.html a00304.html a01151.html a00338.html a01152.html a00730.html a00309.html a01153.html a00731.html a00732.html index.html pages.html modules.html namespaces.html namespacemembers.html namespacemembers.html namespacemembers.html namespacemembers.html namespacemembers.html namespacemembers.html namespacemembers.html namespacemembers.html namespacemembers.html namespacemembers.html namespacemembers.html namespacemembers.html namespacemembers.html namespacemembers.html namespacemembers.html namespacemembers.html namespacemembers.html namespacemembers_func.html namespacemembers_func.html namespacemembers_func.html namespacemembers_func.html namespacemembers_func.html namespacemembers_func.html namespacemembers_func.html namespacemembers_func.html namespacemembers_func.html namespacemembers_func.html namespacemembers_vars.html namespacemembers_type.html namespacemembers_enum.html namespacemembers_eval.html namespacemembers_eval.html namespacemembers_eval.html namespacemembers_eval.html namespacemembers_eval.html namespacemembers_eval.html namespacemembers_eval.html namespacemembers_eval.html namespacemembers_eval.html namespacemembers_eval.html namespacemembers_eval.html namespacemembers_eval.html annotated.html classes.html hierarchy.html functions.html functions_0x62.html functions_0x63.html functions_0x64.html functions_0x65.html functions_0x66.html functions_0x67.html functions_0x68.html functions_0x69.html functions_0x6b.html functions_0x6c.html functions_0x6d.html functions_0x6e.html functions_0x6f.html functions_0x70.html functions_0x71.html functions_0x72.html functions_0x73.html functions_0x74.html functions_0x75.html functions_0x76.html functions_0x77.html functions_0x78.html functions_0x79.html functions_0x7e.html functions_func.html functions_func_0x62.html functions_func_0x63.html functions_func_0x64.html functions_func_0x65.html functions_func_0x66.html functions_func_0x67.html functions_func_0x68.html functions_func_0x69.html functions_func_0x6b.html functions_func_0x6c.html functions_func_0x6d.html functions_func_0x6e.html functions_func_0x6f.html functions_func_0x70.html functions_func_0x71.html functions_func_0x72.html functions_func_0x73.html functions_func_0x74.html functions_func_0x75.html functions_func_0x76.html functions_func_0x77.html functions_func_0x78.html functions_func_0x79.html functions_func_0x7e.html functions_vars.html functions_vars_0x63.html functions_vars_0x64.html functions_vars_0x65.html functions_vars_0x66.html functions_vars_0x67.html functions_vars_0x68.html functions_vars_0x69.html functions_vars_0x6b.html functions_vars_0x6c.html functions_vars_0x6d.html functions_vars_0x6e.html functions_vars_0x6f.html functions_vars_0x70.html functions_vars_0x72.html functions_vars_0x73.html functions_vars_0x74.html functions_vars_0x75.html functions_vars_0x76.html functions_vars_0x77.html functions_type.html functions_enum.html functions_eval.html functions_prop.html functions_rela.html files.html telepathy-qt-0.9.3/doc/html/a00756.html0000644000175200001440000034226012000060453021636 0ustar00collabora-develusers00000000000000 Flag type constants
   Home · All Classes · All Namespaces · Modules · Functions · Files

Typedefs

Enumerations


Detailed Description

Types generated from the specification representing bit flag constants and combinations of them (bitfields).


Typedef Documentation

QFlags< ConnMgrParamFlag > Tp::ConnMgrParamFlags

Type representing combinations of ConnMgrParamFlag values.

QFlags< ConnectionAliasFlag > Tp::ConnectionAliasFlags

Type representing combinations of ConnectionAliasFlag values.

QFlags< AnonymityMode > Tp::AnonymityModeFlags

Type representing combinations of AnonymityMode values.

Flags for the various types of anonymity modes. These modes are solely to inform the CM of the desired anonymous settings. It is up to the CM to determine whether the anonymity modes should be handled within the CM itself, or whether the network that a CM might be talking to should be enforcing anonymity. CMs MAY support only a subset of these modes, and specific connections MAY support none at all.

QFlags< ConnectionCapabilityFlag > Tp::ConnectionCapabilityFlags

Type representing combinations of ConnectionCapabilityFlag values.

QFlags< ContactBlockingCapability > Tp::ContactBlockingCapabilities

Type representing combinations of ContactBlockingCapability values.

QFlags< ContactInfoFlag > Tp::ContactInfoFlags

Type representing combinations of ContactInfoFlag values.

Flags defining the behaviour of contact information on this protocol. Some protocols provide no information on contacts without an explicit request; others always push information to the connection manager as and when it changes.

QFlags< ContactInfoFieldFlag > Tp::ContactInfoFieldFlags

Type representing combinations of ContactInfoFieldFlag values.

Flags describing the behaviour of a vCard field.
QFlags< LocationFeature > Tp::LocationFeatures

Type representing combinations of LocationFeature values.

Flags describing the Location features which may be supported on any given connection.
QFlags< MailNotificationFlag > Tp::MailNotificationFlags

Type representing combinations of MailNotificationFlag values.

Flags representing capabilities provided by a connection manager. Those values can be used as bitfield. Some flags depend on, or conflict with, each other. Connections SHOULD implement as many of these features as the underlying protocol allows, preferring to implement Supports_Unread_Mails instead of Emits_Mails_Received if both are possible.

QFlags< CallFlag > Tp::CallFlags

Type representing combinations of CallFlag values.

A set of flags representing additional information than is available in CallState. Many of these flags only make sense in a particular (or may explain why a call is in a specific state).

QFlags< CallMemberFlag > Tp::CallMemberFlags

Type representing combinations of CallMemberFlag values.

A set of flags representing the status of a remote contact in a call.

It is protocol- and client-specific whether a particular contact will ever have a particular flag set on them, and Telepathy clients SHOULD NOT assume that a flag will ever be set.

180 Ringing in SIP, and its equivalent in XMPP, are optional informational messages, and implementations are not required to send them. The same applies to the messages used to indicate hold state.

QFlags< MediaStreamPending > Tp::MediaStreamPendingSend

Type representing combinations of MediaStreamPending values.

QFlags< ChannelMediaCapability > Tp::ChannelMediaCapabilities

Type representing combinations of ChannelMediaCapability values.

The channel-type-specific capability flags used for Channel.Type.StreamedMedia in the Connection.Interface.Capabilities interface. See the InitialAudio property for details of the mechanisms that will replace this.

QFlags< ChannelTextMessageFlag > Tp::ChannelTextMessageFlags

Type representing combinations of ChannelTextMessageFlag values.

QFlags< CaptchaFlag > Tp::CaptchaFlags

Type representing combinations of CaptchaFlag values.

Extra flags to include with Captcha information

QFlags< ChannelCallState > Tp::ChannelCallStateFlags

Type representing combinations of ChannelCallState values.

A set of flags representing call states.

QFlags< ChannelGroupFlag > Tp::ChannelGroupFlags

Type representing combinations of ChannelGroupFlag values.

QFlags< MessagePartSupportFlag > Tp::MessagePartSupportFlags

Type representing combinations of MessagePartSupportFlag values.

Flags indicating the level of support for message parts on this channel. They are designed such that setting more flags always implies that the channel has more capabilities.

If no flags are set, this indicates that messages may contain a single message part whose content-type is any of the types from SupportedContentTypes, possibly with some alternatives.

There is no flag indicating support for alternatives. This is because the SendMessage implementation can always accept messages containing alternatives, even if the underlying protocol does not, by deleting all alternatives except the first (most preferred) that is supported.

Each of the flags so far implies the previous flag, so we could have used a simple enumeration here; however, we've defined the message-part support indicator as a flag set for future expansion.

See SupportedContentTypes for some examples.

QFlags< MessageSendingFlag > Tp::MessageSendingFlags

Type representing combinations of MessageSendingFlag values.

Flags altering the way a message is sent. The "most usual" action should always be to have these flags unset. Some indication of which flags are supported is provided by the DeliveryReportingSupport property.

QFlags< DeliveryReportingSupportFlag > Tp::DeliveryReportingSupportFlags

Type representing combinations of DeliveryReportingSupportFlag values.

Flags indicating the level of support for delivery reporting on this channel, as found on the DeliveryReportingSupport property. Any future flags added to this set will conform to the convention that the presence of an extra flag implies that more operations will succeed. Note that CMs may always provide more reports than are requested in the Message_Sending_Flags passed to SendMessage. If senders want delivery reports, they should ask for them. If they don't want delivery reports, they can just ignore them, so there's no need to have capability discovery for what will happen if a delivery report isn't requested.

QFlags< ChannelPasswordFlag > Tp::ChannelPasswordFlags

Type representing combinations of ChannelPasswordFlag values.

QFlags< PropertyFlag > Tp::PropertyFlags

Type representing combinations of PropertyFlag values.

QFlags< StorageRestrictionFlag > Tp::StorageRestrictionFlags

Type representing combinations of StorageRestrictionFlag values.

Flags indicating restrictions imposed on an Account by its storage method.

QFlags< RTCPXRStatisticsFlag > Tp::RTCPXRStatisticsFlags

Type representing combinations of RTCPXRStatisticsFlag values.


Enumeration Type Documentation

Flag type generated from the specification.

Enumerator:
ConnMgrParamFlagRequired 

This parameter is required for connecting to the server.

ConnMgrParamFlagRegister 

This parameter is required for registering an account on the server.

ConnMgrParamFlagHasDefault 

This parameter has a default value, which is returned in GetParameters; not providing this parameter is equivalent to providing the default.

ConnMgrParamFlagSecret 

This parameter should be considered private or secret; for instance, clients should store it in a "password safe" like gnome-keyring or kwallet, omit it from debug logs, and use a text input widget that hides the value of the parameter.

(Clients that support older connection managers may also treat any parameter whose name contains "password" as though it had this flag.)

ConnMgrParamFlagDBusProperty 

This parameter is also a D-Bus property on the resulting ConnectionInterface ; a parameter named com.example.Duck.Macaroni with this flag corresponds to the Macaroni property on the com.example.Duck interface. Its value can be queried and possibly changed on an existing Connection using methods on the org.freedesktop.DBus.Properties interface.

When a new value for a parameter with this flag is passed to AccountInterface::UpdateParameters() , the account manager will attempt to update its value on any running connections. Similarly, if the parameter also has the Has_Default flag, and is passed in the second argument to UpdateParameters, the default value will be applied to any running connections. Thus, clients generally do not need to directly access or update the connection property; instead, they SHOULD manipulate AccountInterface::Parameters .

This allows runtime-configurable options to be stored and maintained by the AccountManagerInterface , without needing to invent a separate account preference for “properties that should be set on the connection as soon as it is created”. It was originally invented to manage ConnectionInterfaceCellularInterface preferences.

_ConnMgrParamFlagPadding 

Flag type generated from the specification.

Enumerator:
ConnectionAliasFlagUserSet 

The aliases of contacts on this connection may be changed by the user of the service, not just by the contacts themselves. This is the case on Jabber, for instance.

It is possible that aliases can be changed by the contacts too - which alias takes precedence is not defined by this specification, and depends on the server and/or connection manager implementation.

This flag only applies to the aliases of "globally valid" contact handles. At this time, clients should not expect to be able to change the aliases corresponding to any channel-specific handles. If this becomes possible in future, a new flag will be defined.

_ConnectionAliasFlagPadding 

Flag type generated from the specification.

Enumerator:
AnonymityModeClientInfo 

Obscure any information that provides user identification, user-agent identification or personal details. Examples of this information might be GSM CallerID, SIP from address, various informational email headers, etc. The CM should scrub/replace any of this information before passing messages or data onto the network. Note that a CM which has the option of obscuring the information at the CM or privacy service level would choose both (anonymity services are opaque to clients of this interface). Clients SHOULD NOT set both Client_Info and Show_Client_Info modes. If they are set, the CM MUST respect Client_Info and ignore Show_Client_Info.

AnonymityModeShowClientInfo 

Explicitly request showing of client information. In connection context, this can be used to override service default. In channel context, this overrides connection anonymity modes. In GSM, it's possible to have CLIR enabled by default, and explicitly suppress CLIR for a single phone call. Clients SHOULD NOT set both Client_Info and Show_Client_Info modes. If they are set, the CM MUST respect Client_Info and ignore Show_Client_Info. The CM MAY set both Client_Info and Show_Client_Info in SupportedAnonymityModes to indicate its support for explicitly hiding and publicising client information.

AnonymityModeNetworkInfo 

Obscure any originating IP address information, contact URIs, and anonymize all traffic involved with sending/receiving any media streams or call content. Examples of this include the "headers" portions of RFC 3323 as well as the History-Info (described in RFC 4244) for a SIP CM. This SHOULD have the effect of hiding address information from the remote contact (ie, the contact cannot know what IP address the session is originated from). Obviously the network still needs to be able to route information between contacts, so this provides no guarantees of what can be seen by intermediaries.

_AnonymityModePadding 

Flag type generated from the specification.

Enumerator:
ConnectionCapabilityFlagCreate 

The given channel type and handle can be given to RequestChannel to create a new channel of this type.

ConnectionCapabilityFlagInvite 

The given contact can be invited to an existing channel of this type.

_ConnectionCapabilityFlagPadding 

Flag type generated from the specification.

Enumerator:
ContactBlockingCapabilityCanReportAbusive  When calling BlockContacts() , the contacts may be reporting as abusive to the server administrators by setting Report_Abusive to True.
_ContactBlockingCapabilityPadding 

Flag type generated from the specification.

Enumerator:
ContactInfoFlagCanSet 

Indicates that SetContactInfo is supported on this connection.

ContactInfoFlagPush 

Indicates that the protocol pushes all contacts' information to the connection manager without prompting. If set, ContactInfoChanged will be emitted whenever contacts' information changes.

_ContactInfoFlagPadding 

Flag type generated from the specification.

Enumerator:
ContactInfoFieldFlagParametersExact 

If present, exactly the parameters indicated must be set on this field; in the case of an empty list of parameters, this implies that parameters may not be used.

If absent, and the list of allowed parameters is non-empty, any (possibly empty) subset of that list may be used.

If absent, and the list of allowed parameters is empty, any parameters may be used.

ContactInfoFieldFlagOverwrittenByNickname 

Indicates that this field will be overwritten when the user's alias is changed with ConnectionInterfaceAliasingInterface::SetAliases() or when the Account's AccountInterface::Nickname is updated. Clients that allow the editing of the Alias and the ContactInfo in the same location should hide fields with this flag.

If a client allowed the user to edit both the nickname and the ContactInfo field at the same time, the user could set them to two different values even though they map to the same property. This would result in surprising behavior where the second value would win over the first.

In addition to hiding this field when editing ContactInfo together with the user's nickname, it is recommended that clients call SetContactInfo() before setting the user's nickname.

This ensures that if the user changes the nickname, the correct value will get set even if the stale nickname is mistakenly sent along with SetContactInfo() .

If used, this flag typically appears on either the 'nickname' or 'fn' field.

_ContactInfoFieldFlagPadding 

Flag type generated from the specification.

Enumerator:
LocationFeatureCanSet 

Indicates that setting your own location with SetLocation is supported on this connection.

_LocationFeaturePadding 

Flag type generated from the specification.

Enumerator:
MailNotificationFlagSupportsUnreadMailCount 

This Connection provides the number of unread e-mails (or e-mail threads) in the main folder of your e-mail account, as the UnreadMailCount property. The connection manager will update this value by emitting the UnreadMailsChanged signal.

MailNotificationFlagSupportsUnreadMails 

This Connection provides a detailed list of unread e-mails, as the UnreadMails property. If this flag is set, Supports_Unread_Mail_Count MUST be set, and Emits_Mails_Received MUST NOT be set. The Connection will update the list by emitting the UnreadMailsChanged signals.

MailNotificationFlagEmitsMailsReceived 

This Connection emits the MailsReceived signal, which provides details about newly arrived e-mails but does not maintain their read/unread status afterwards. This flag MUST NOT be combined with Supports_Unread_Mails.

MailNotificationFlagSupportsRequestInboxURL 

This Connection can provide a URL (with optional POST data) to open the the inbox of the e-mail account in a web-based client, via the RequestInboxURL method.

MailNotificationFlagSupportsRequestMailURL 

This Connection can provide a URL (with optional POST data) to open a specific mail in a web-based client, via the RequestMailURL() method. This feature is not useful unless either Emits_Mails_Received or Supports_Unread_Mails is set.

If this flag is not set, clients SHOULD fall back to using RequestInboxURL() if available.

MailNotificationFlagThreadBased 

Each Mail represents a thread of e-mails, which MAY have more than one sender.

Google Talk notifies users about new mail in terms of unread threads, rather than unread e-mails.

_MailNotificationFlagPadding 

Flag type generated from the specification.

Enumerator:
CallFlagLocallyHeld 

The call has been put on hold by the local user, e.g. using the Hold interface. This flag SHOULD only be set if there is at least one Content, and all Contents are locally held. Otherwise, in transient situations where some but not all contents are on hold, UIs would falsely indicate that the call as a whole is on hold, which could lead to the user saying something they'll regret, while under the impression that the other contacts can't hear them! This flag exists as a simplified proxy for HoldStateChanged, to reduce the number of signals that need to be listened to by a simple UI.

CallFlagLocallyRinging 

This flag exists for observability of the SetRinging method (e.g. so that loggers can tell whether the call got as far as alerting the user, or whether something went wrong before then). It should be set when the SetRinging is called, and unset when the call leaves Initialised.

CallFlagLocallyQueued 

This flag exists for observability of the SetQueued method. It should be set when the SetQueued is called, and unset when the call leaves Initialising or Initialised.

CallFlagForwarded 

The initiator of the call originally called a contact other than the current recipient of the call, but the call was then forwarded or diverted. This flag only makes sense on outgoing calls. It SHOULD be set or unset according to informational messages from other contacts.

CallFlagClearing 

This flag only occurs when the CallState is Ended. The call with this flag set has ended, but not all resources corresponding to the call have been freed yet. Depending on the protocol there might be some audible feedback while the clearing flag is set. In calls following the ITU-T Q.931 standard there is a period of time between the call ending and the underlying channel being completely free for re-use.

_CallFlagPadding 

Flag type generated from the specification.

Enumerator:
CallMemberFlagRinging 

The remote contact's client has told us that the contact has been alerted about the call but has not responded.

This is a flag per member, not a flag for the call as a whole, because in Muji conference calls, you could invite someone and have their state be "ringing" for a while.

CallMemberFlagHeld 

The call member has put this call on hold.

This is a flag per member, not a flag for the call as a whole, because in conference calls, any member could put the conference on hold.

CallMemberFlagConferenceHost  This contact has merged this call into a conference. Note that GSM provides a notification when the remote party merges a call into a conference, but not when it is split out again; thus, this flag can only indicate that the call has been part of a conference at some point. If a GSM connection manager receives a notification that a call has been merged into a conference a second time, it SHOULD represent this by clearing and immediately re-setting this flag on the remote contact.
_CallMemberFlagPadding 

Flag type generated from the specification.

Enumerator:
MediaStreamPendingLocalSend 

The local user has been asked to send media by the remote user. Call RequestStreamDirection to indicate whether or not this is acceptable.

MediaStreamPendingRemoteSend 

The remote user has been asked to send media by the local user. The StreamDirectionChanged signal will be emitted when the remote user accepts or rejects this change.

_MediaStreamPendingPadding 

Flag type generated from the specification.

Enumerator:
ChannelMediaCapabilityAudio 

The handle is capable of using audio streams within a media channel.

ChannelMediaCapabilityVideo 

The handle is capable of using video streams within a media channel.

ChannelMediaCapabilityNATTraversalSTUN 

The handle is capable of performing STUN to traverse NATs.

ChannelMediaCapabilityNATTraversalGTalkP2P 

The handle is capable of establishing Google Talk peer-to-peer connections (as implemented in libjingle 0.3) to traverse NATs.

ChannelMediaCapabilityNATTraversalICEUDP 

The handle is capable of establishing ICE UDP peer-to-peer connections (as defined by the IETF MMUSIC working group) to traverse NATs.

ChannelMediaCapabilityImmutableStreams 

Channels whose target handle is this contact will have ImmutableStreams = True.

_ChannelMediaCapabilityPadding 

Flag type generated from the specification.

Enumerator:
ChannelTextMessageFlagTruncated 

The incoming message was truncated to a shorter length by the server or the connection manager.

ChannelTextMessageFlagNonTextContent 

The incoming message contained non-text content which cannot be represented by this interface, but has been signalled in the ChannelInterfaceMessagesInterface interface.

Connection managers SHOULD only set this flag if the non-text content appears to be relatively significant (exactly how significant is up to the implementor). The intention is that if this flag is set, clients using this interface SHOULD inform the user that part of the message was not understood.

ChannelTextMessageFlagScrollback 

The incoming message was part of a replay of message history.

In XMPP multi-user chat, a few past messages are replayed when you join a chatroom. A sufficiently capable IRC connection manager could also set this flag on historical messages when connected to a proxy like bip or irssi-proxy. The existence of this flag allows loggers and UIs to use better heuristics when eliminating duplicates (a simple implementation made possible by this flag would be to avoid logging scrollback at all).

ChannelTextMessageFlagRescued 

The incoming message has been seen in a previous channel during the lifetime of the ConnectionInterface , but had not been acknowledged when that channel closed, causing an identical channel (the channel in which the message now appears) to open.

This means that a logger (which should already have seen the message in the previous channel) is able to recognise and ignore these replayed messages.

_ChannelTextMessageFlagPadding 

Flag type generated from the specification.

Enumerator:
CaptchaFlagRequired 

This captcha mechanism is required to be successfully answered in order to pass this captcha challenge.

_CaptchaFlagPadding 

Flag type generated from the specification.

Enumerator:
ChannelCallStateRinging 

The contact has been alerted about the call but has not responded (e.g. 180 Ringing in SIP).

ChannelCallStateQueued 

The contact is temporarily unavailable, and the call has been placed in a queue (e.g. 182 Queued in SIP, or call-waiting in telephony).

ChannelCallStateHeld 

The contact has placed the call on hold, and will not receive media from the local user or any other participants until they unhold the call again.

ChannelCallStateForwarded 

The initiator of the call originally called a contact other than the current recipient of the call, but the call was then forwarded or diverted.

ChannelCallStateInProgress 

Progress has been made in placing the outgoing call, but the destination contact may not have been made aware of the call yet (so the Ringing state is not appropriate). This corresponds to SIP's status code 183 Session Progress, and could be used when the outgoing call has reached a gateway, for instance.

ChannelCallStateConferenceHost  This contact has merged this call into a conference. Note that GSM provides a notification when the remote party merges a call into a conference, but not when it is split out again; thus, this flag can only indicate that the call has been part of a conference at some point. If a GSM connection manager receives a notification that a call has been merged into a conference a second time, it SHOULD represent this by clearing and immediately re-setting this flag on the remote contact.
_ChannelCallStatePadding 

Flag type generated from the specification.

Enumerator:
ChannelGroupFlagCanAdd 

The AddMembers method can be used to add or invite members who are not already in the local pending list (which is always valid).

ChannelGroupFlagCanRemove 

The RemoveMembers method can be used to remove channel members (removing those on the pending local list is always valid).

ChannelGroupFlagCanRescind 

The RemoveMembers method can be used on people on the remote pending list.

ChannelGroupFlagMessageAdd 

A message may be sent to the server when calling AddMembers on contacts who are not currently pending members.

ChannelGroupFlagMessageRemove 

A message may be sent to the server when calling RemoveMembers on contacts who are currently channel members.

ChannelGroupFlagMessageAccept 

A message may be sent to the server when calling AddMembers on contacts who are locally pending.

ChannelGroupFlagMessageReject 

A message may be sent to the server when calling RemoveMembers on contacts who are locally pending.

ChannelGroupFlagMessageRescind 

A message may be sent to the server when calling RemoveMembers on contacts who are remote pending.

ChannelGroupFlagChannelSpecificHandles 

The members of this group have handles which are specific to this channel, and are not valid as general-purpose handles on the connection. Depending on the channel, it may be possible to check the HandleOwners property or call GetHandleOwners() to find the owners of these handles, which should be done if you wish to (e.g.) subscribe to the contact's presence.

Connection managers must ensure that any given handle is not simultaneously a general-purpose handle and a channel-specific handle.

ChannelGroupFlagOnlyOneGroup 

Placing a contact in multiple groups of this type is not allowed and will raise NotAvailable (on services where contacts may only be in one user-defined group, user-defined groups will have this flag).

ChannelGroupFlagHandleOwnersNotAvailable 

In rooms with channel specific handles (ie Channel_Specific_Handles flag is set), this flag indicates that no handle owners are available, apart from the owner of the SelfHandle. This used to be an important optimization to avoid repeated GetHandleOwners calls, before we introduced the HandleOwners property and HandleOwnersChanged signal.

ChannelGroupFlagProperties 

This flag indicates that all the properties introduced in specification 0.17.6 are fully supported.

ChannelGroupFlagMembersChangedDetailed 

Indicates that MembersChangedDetailed will be emitted for changes to this group's members in addition to MembersChanged. Clients can then connect to the former and ignore emission of the latter. This flag's state MUST NOT change over the lifetime of a channel. If it were allowed to change, client bindings would have to always connect to MembersChanged just in case the flag ever went away (and generally be unnecessarily complicated), which would mostly negate the point of having this flag in the first place.

ChannelGroupFlagMessageDepart 

A message may be sent to the server when calling RemoveMembers on the SelfHandle. This would be set for XMPP Multi-User Chat or IRC channels, but not for a typical implementation of streamed media calls.

_ChannelGroupFlagPadding 

Flag type generated from the specification.

Enumerator:
MessagePartSupportFlagOneAttachment 

SendMessage will accept messages containing a textual message body, plus a single attachment of any type listed in the SupportedContentTypes property. It does not make sense for this flag to be set if Message_Part_Support_Flag_Data_Only is not also set (because the connection manager can trivially provide an empty text part if necessary).

MessagePartSupportFlagMultipleAttachments 

SendMessage will accept messages containing a textual message body, plus an arbitrary number of attachments of any type listed in the SupportedContentTypes property. It does not make sense for this flag to be set if Message_Part_Support_Flag_One_Attachment is not also set.

_MessagePartSupportFlagPadding 

Flag type generated from the specification.

Enumerator:
MessageSendingFlagReportDelivery 

Provide a successful delivery report if possible, even if this is not the default for this protocol. Ignored if delivery reports are not possible on this protocol.

In some protocols, like XMPP, it is not conventional to request or send positive delivery notifications.

Delivery failure reports SHOULD always be sent, but if this flag is present, the connection manager MAY also try harder to obtain failed delivery reports or allow them to be matched to outgoing messages.

MessageSendingFlagReportRead 

Provide a delivery report when the message is read by the recipient, even if this is not the default for this protocol. Ignored if read reports are not possible on this protocol.

MessageSendingFlagReportDeleted 

Provide a delivery report when the message is deleted by the recipient, even if this is not the default for this protocol. Ignored if such reports are not possible on this protocol.

_MessageSendingFlagPadding 

Flag type generated from the specification.

Enumerator:
DeliveryReportingSupportFlagReceiveFailures 

Clients MAY expect to receive negative delivery reports if Message_Sending_Flag_Report_Delivery is specified when sending.

DeliveryReportingSupportFlagReceiveSuccesses 

Clients MAY expect to receive positive delivery reports if Message_Sending_Flag_Report_Delivery is specified when sending.

DeliveryReportingSupportFlagReceiveRead 

Clients MAY expect to receive Delivery_Status Read reports if Message_Sending_Flag_Report_Read is specified when sending.

DeliveryReportingSupportFlagReceiveDeleted 

Clients MAY expect to receive Delivery_Status Deleted reports if Message_Sending_Flag_Report_Deleted is specified when sending.

_DeliveryReportingSupportFlagPadding 

Flag type generated from the specification.

Enumerator:
ChannelPasswordFlagProvide 

The ProvidePassword method must be called now for the user to join the channel

ChannelPasswordFlagHint 

The RoomConfig1.PasswordHint contains a hint for the password.

_ChannelPasswordFlagPadding 

Flag type generated from the specification.

Enumerator:
PropertyFlagRead 

The property can be read

PropertyFlagWrite 

The property can be written

_PropertyFlagPadding 

Flag type generated from the specification.

Enumerator:
StorageRestrictionFlagCannotSetParameters 

The account's Parameters property can't be changed by calling UpdateParameters.

StorageRestrictionFlagCannotSetEnabled 

The account can't be enabled/disabled by setting the Enabled property.

StorageRestrictionFlagCannotSetPresence 

The account's presence can't be changed by setting the RequestedPresence and AutomaticPresence properties.

StorageRestrictionFlagCannotSetService 

The account's Service property cannot be changed.

_StorageRestrictionFlagPadding 

Flag type generated from the specification.

Enumerator:
RTCPXRStatisticsFlagLoss 

Loss report flag, as defined in RFC3611 section 4.6.

RTCPXRStatisticsFlagDuplicate 

Duplicate report flag, as defined in RFC3611 section 4.6.

RTCPXRStatisticsFlagJitter 

Jitter flag, as defined in RFC3611 section 4.6.

RTCPXRStatisticsFlagTTL 

First bit of TTL or Hop Limit flag, as defined in RFC3611 section 4.6.

RTCPXRStatisticsFlagHL 

Second bit of TTL or Hop Limit flag, as defined in RFC3611 section 4.6.

_RTCPXRStatisticsFlagPadding 


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00419_source.html0000644000175200001440000001066112000060453023207 0ustar00collabora-develusers00000000000000 abstract-adaptor.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
abstract-adaptor.h
00001 
00023 #ifndef _TelepathyQt_abstract_adaptor_h_HEADER_GUARD_
00024 #define _TelepathyQt_abstract_adaptor_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Global>
00031 
00032 #include <QObject>
00033 #include <QDBusAbstractAdaptor>
00034 
00035 class QDBusConnection;
00036 
00037 namespace Tp
00038 {
00039 
00040 class TP_QT_EXPORT AbstractAdaptor : public QDBusAbstractAdaptor
00041 {
00042     Q_OBJECT
00043 
00044 public:
00045     AbstractAdaptor(const QDBusConnection &connection, QObject *adaptee, QObject *parent);
00046     ~AbstractAdaptor();
00047 
00048     QDBusConnection dbusConnection() const;
00049 
00050     QObject *adaptee() const;
00051 
00052 private:
00053     struct Private;
00054     friend struct Private;
00055     Private *mPriv;
00056 };
00057 
00058 }
00059 
00060 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00109.html0000644000175200001440000020467412000060453021634 0ustar00collabora-develusers00000000000000 Tp::ChannelClassSpec Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The ChannelClassSpec class represents a Telepathy channel class. More...

#include <TelepathyQt/ChannelClassSpec>

List of all members.

Public Member Functions

Static Public Member Functions


Detailed Description

The ChannelClassSpec class represents a Telepathy channel class.


Constructor & Destructor Documentation

Tp::ChannelClassSpec::ChannelClassSpec ( const QVariantMap &  props)
Tp::ChannelClassSpec::ChannelClassSpec ( const QString &  channelType,
HandleType  targetHandleType,
const QVariantMap &  otherProperties = QVariantMap() 
)
Tp::ChannelClassSpec::ChannelClassSpec ( const QString &  channelType,
HandleType  targetHandleType,
bool  requested,
const QVariantMap &  otherProperties = QVariantMap() 
)
Tp::ChannelClassSpec::ChannelClassSpec ( const ChannelClassSpec other,
const QVariantMap &  additionalProperties = QVariantMap() 
)

Member Function Documentation

ChannelClassSpec & Tp::ChannelClassSpec::operator= ( const ChannelClassSpec other)
bool Tp::ChannelClassSpec::operator== ( const ChannelClassSpec other) const [inline]
bool Tp::ChannelClassSpec::isSubsetOf ( const ChannelClassSpec other) const
bool Tp::ChannelClassSpec::matches ( const QVariantMap &  immutableProperties) const
QString Tp::ChannelClassSpec::channelType ( ) const [inline]
void Tp::ChannelClassSpec::setChannelType ( const QString &  type) [inline]
bool Tp::ChannelClassSpec::hasRequested ( ) const [inline]
bool Tp::ChannelClassSpec::isRequested ( ) const [inline]
void Tp::ChannelClassSpec::setRequested ( bool  requested) [inline]
bool Tp::ChannelClassSpec::hasProperty ( const QString &  qualifiedName) const
QVariant Tp::ChannelClassSpec::property ( const QString &  qualifiedName) const
void Tp::ChannelClassSpec::setProperty ( const QString &  qualifiedName,
const QVariant &  value 
)
void Tp::ChannelClassSpec::unsetProperty ( const QString &  qualifiedName)
QVariantMap Tp::ChannelClassSpec::allProperties ( ) const
ChannelClassSpec Tp::ChannelClassSpec::textChat ( const QVariantMap &  additionalProperties = QVariantMap()) [static]
ChannelClassSpec Tp::ChannelClassSpec::textChatroom ( const QVariantMap &  additionalProperties = QVariantMap()) [static]
ChannelClassSpec Tp::ChannelClassSpec::unnamedTextChat ( const QVariantMap &  additionalProperties = QVariantMap()) [static]
ChannelClassSpec Tp::ChannelClassSpec::mediaCall ( const QVariantMap &  additionalProperties = QVariantMap()) [static]
ChannelClassSpec Tp::ChannelClassSpec::audioCall ( const QVariantMap &  additionalProperties = QVariantMap()) [static]
ChannelClassSpec Tp::ChannelClassSpec::videoCall ( const QVariantMap &  additionalProperties = QVariantMap()) [static]
ChannelClassSpec Tp::ChannelClassSpec::videoCallWithAudio ( const QVariantMap &  additionalProperties = QVariantMap()) [static]
ChannelClassSpec Tp::ChannelClassSpec::streamedMediaCall ( const QVariantMap &  additionalProperties = QVariantMap()) [static]
ChannelClassSpec Tp::ChannelClassSpec::streamedMediaAudioCall ( const QVariantMap &  additionalProperties = QVariantMap()) [static]
ChannelClassSpec Tp::ChannelClassSpec::streamedMediaVideoCall ( const QVariantMap &  additionalProperties = QVariantMap()) [static]
ChannelClassSpec Tp::ChannelClassSpec::streamedMediaVideoCallWithAudio ( const QVariantMap &  additionalProperties = QVariantMap()) [static]
ChannelClassSpec Tp::ChannelClassSpec::unnamedStreamedMediaCall ( const QVariantMap &  additionalProperties = QVariantMap()) [static]
ChannelClassSpec Tp::ChannelClassSpec::unnamedStreamedMediaAudioCall ( const QVariantMap &  additionalProperties = QVariantMap()) [static]
ChannelClassSpec Tp::ChannelClassSpec::unnamedStreamedMediaVideoCall ( const QVariantMap &  additionalProperties = QVariantMap()) [static]
ChannelClassSpec Tp::ChannelClassSpec::unnamedStreamedMediaVideoCallWithAudio ( const QVariantMap &  additionalProperties = QVariantMap()) [static]
Tp::ChannelClassSpec Tp::ChannelClassSpec::serverAuthentication ( const QVariantMap &  additionalProperties = QVariantMap()) [static]
ChannelClassSpec Tp::ChannelClassSpec::roomList ( const QVariantMap &  additionalProperties = QVariantMap()) [static]
ChannelClassSpec Tp::ChannelClassSpec::outgoingFileTransfer ( const QVariantMap &  additionalProperties = QVariantMap()) [static]
ChannelClassSpec Tp::ChannelClassSpec::incomingFileTransfer ( const QVariantMap &  additionalProperties = QVariantMap()) [static]
ChannelClassSpec Tp::ChannelClassSpec::outgoingStreamTube ( const QString &  service = QString(),
const QVariantMap &  additionalProperties = QVariantMap() 
) [static]
ChannelClassSpec Tp::ChannelClassSpec::incomingStreamTube ( const QString &  service = QString(),
const QVariantMap &  additionalProperties = QVariantMap() 
) [static]
ChannelClassSpec Tp::ChannelClassSpec::outgoingRoomStreamTube ( const QString &  service = QString(),
const QVariantMap &  additionalProperties = QVariantMap() 
) [static]
ChannelClassSpec Tp::ChannelClassSpec::incomingRoomStreamTube ( const QString &  service = QString(),
const QVariantMap &  additionalProperties = QVariantMap() 
) [static]
ChannelClassSpec Tp::ChannelClassSpec::outgoingDBusTube ( const QString &  serviceName = QString(),
const QVariantMap &  additionalProperties = QVariantMap() 
) [static]
ChannelClassSpec Tp::ChannelClassSpec::incomingDBusTube ( const QString &  serviceName = QString(),
const QVariantMap &  additionalProperties = QVariantMap() 
) [static]
ChannelClassSpec Tp::ChannelClassSpec::outgoingRoomDBusTube ( const QString &  serviceName = QString(),
const QVariantMap &  additionalProperties = QVariantMap() 
) [static]
ChannelClassSpec Tp::ChannelClassSpec::incomingRoomDBusTube ( const QString &  serviceName = QString(),
const QVariantMap &  additionalProperties = QVariantMap() 
) [static]
ChannelClassSpec Tp::ChannelClassSpec::contactSearch ( const QVariantMap &  additionalProperties = QVariantMap()) [static]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00914.html0000644000175200001440000002142612000060453021630 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PresenceSpec Member List
This is the complete list of members for Tp::PresenceSpec, including all inherited members.
AllFlags enum valueTp::PresenceSpec
available(SimpleStatusFlags flags=AllFlags)Tp::PresenceSpec [static]
away(SimpleStatusFlags flags=AllFlags)Tp::PresenceSpec [static]
bareSpec() const Tp::PresenceSpec
brb(SimpleStatusFlags flags=AllFlags)Tp::PresenceSpec [static]
busy(SimpleStatusFlags flags=AllFlags)Tp::PresenceSpec [static]
CanHaveStatusMessage enum valueTp::PresenceSpec
canHaveStatusMessage() const Tp::PresenceSpec
chat(SimpleStatusFlags flags=AllFlags)Tp::PresenceSpec [static]
dnd(SimpleStatusFlags flags=AllFlags)Tp::PresenceSpec [static]
error(SimpleStatusFlags flags=CanHaveStatusMessage)Tp::PresenceSpec [static]
hidden(SimpleStatusFlags flags=AllFlags)Tp::PresenceSpec [static]
isValid() const Tp::PresenceSpec [inline]
MaySetOnSelf enum valueTp::PresenceSpec
maySetOnSelf() const Tp::PresenceSpec
NoFlags enum valueTp::PresenceSpec
offline(SimpleStatusFlags flags=CanHaveStatusMessage)Tp::PresenceSpec [static]
operator!=(const PresenceSpec &other) const Tp::PresenceSpec
operator<(const PresenceSpec &other) const Tp::PresenceSpec
operator=(const PresenceSpec &other)Tp::PresenceSpec
operator==(const PresenceSpec &other) const Tp::PresenceSpec
presence(const QString &statusMessage=QString()) const Tp::PresenceSpec
PresenceSpec()Tp::PresenceSpec
PresenceSpec(const QString &status, const SimpleStatusSpec &spec)Tp::PresenceSpec
PresenceSpec(const PresenceSpec &other)Tp::PresenceSpec
pstn(SimpleStatusFlags flags=CanHaveStatusMessage)Tp::PresenceSpec [static]
Q_DECLARE_FLAGS(SimpleStatusFlags, SimpleStatusFlag)Tp::PresenceSpec
SimpleStatusFlag enum nameTp::PresenceSpec
unknown(SimpleStatusFlags flags=CanHaveStatusMessage)Tp::PresenceSpec [static]
xa(SimpleStatusFlags flags=AllFlags)Tp::PresenceSpec [static]
~PresenceSpec()Tp::PresenceSpec


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00162.html0000644000175200001440000005075612000060453021633 0ustar00collabora-develusers00000000000000 Tp::ConnectionCapabilities Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ConnectionCapabilities Class Reference

The ConnectionCapabilities class represents the capabilities of a Connection. More...

#include <TelepathyQt/ConnectionCapabilities>

Inherits Tp::CapabilitiesBase.

List of all members.

Public Member Functions

Protected Member Functions


Detailed Description

The ConnectionCapabilities class represents the capabilities of a Connection.


Constructor & Destructor Documentation

Class destructor.

Construct a new ConnectionCapabilities object using the give rccs.

Parameters:
rccsRequestableChannelClassList representing the capabilities of a Connection.

Construct a new ConnectionCapabilities object using the give rccSpecs.

Parameters:
rccSpecsRequestableChannelClassSpecList representing the capabilities of a Connection.

Member Function Documentation

Return true if named text chatrooms can be joined by providing a chatroom identifier.

If the protocol is such that chatrooms can be joined, but only via a more elaborate D-Bus API than normal (because more information is needed), then this method will return false.

Returns:
true if Account::ensureTextChatroom() can be expected to work.

Return whether creating conference media calls is supported.

Returns:
true if supported, false otherwise.

Return whether creating conference media calls is supported.

This method will also check whether inviting new contacts when creating a conference media call channel by providing additional members to initial invitees (as opposed to merging several channels into one new conference channel) is supported.

If providing additional members is supported, it is also possible to request conference media calls with fewer than two (even zero) already established media calls.

Returns:
true if supported, false otherwise.

Return whether creating conference text chats is supported.

Returns:
true if supported, false otherwise.

Return whether creating conference text chats is supported.

This method will also check whether inviting new contacts when creating a conference text chat channel by providing additional members to initial invitees (as opposed to merging several channels into one new conference channel) is supported.

If providing additional members is supported, it is also possible to request conference text chats with fewer than two (even zero) already established text chats.

Returns:
true if supported, false otherwise.

Return whether creating conference text chat rooms is supported.

Returns:
true if supported, false otherwise.

Return whether creating conference text chat rooms is supported.

This method will also check whether inviting new contacts when creating a conference text chat room channel by providing additional members to initial invitees (as opposed to merging several channels into one new conference channel) is supported.

If providing additional members is supported, it is also possible to request conference text chat rooms with fewer than two (even zero) already established text chat rooms.

Returns:
true if supported, false otherwise.

Return whether creating a ContactSearch channel is supported.

Returns:
true if supported, false otherwise.

Return whether creating a ContactSearch channel specifying a server is supported.

Returns:
true if supported, false otherwise.

Return whether creating a ContactSearch channel specifying a limit is supported.

Returns:
true if supported, false otherwise.

Return whether creating a DBusTube channel by providing a contact identifier is supported.

Returns:
true if supported, false otherwise.

Return whether creating a StreamTube channel by providing a contact identifier is supported.

Returns:
true if supported, false otherwise.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00579_source.html0000644000175200001440000015326212000060453023223 0ustar00collabora-develusers00000000000000 functors.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
functors.h
00001 
00023 #ifndef _TelepathyQt_functors_h_HEADER_GUARD_
00024 #define _TelepathyQt_functors_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Global>
00031 
00032 namespace Tp
00033 {
00034 
00035 struct TP_QT_EXPORT BaseFunctor
00036 {
00037 };
00038 
00039 template <class R >
00040 struct PtrFunctor0 : public BaseFunctor
00041 {
00042     typedef R (*FunctionType)();
00043     typedef R ResultType;
00044 
00045     PtrFunctor0(FunctionType fn) : fn(fn) {}
00046 
00047     ResultType operator()() const { return fn(); }
00048 
00049     FunctionType fn;
00050 };
00051 
00052 template <class R, class T >
00053 struct MemberFunctor0 : public BaseFunctor
00054 {
00055     typedef R (T::*FunctionType)();
00056     typedef R ResultType;
00057 
00058     MemberFunctor0(T *object, FunctionType fn) : object(object), fn(fn) {}
00059 
00060     ResultType operator()() const { return (object->*(fn))(); }
00061 
00062     T *object;
00063     FunctionType fn;
00064 };
00065 
00066 template <class R , class Arg1>
00067 struct PtrFunctor1 : public BaseFunctor
00068 {
00069     typedef R (*FunctionType)(Arg1);
00070     typedef R ResultType;
00071 
00072     PtrFunctor1(FunctionType fn) : fn(fn) {}
00073 
00074     ResultType operator()(Arg1 a1) const { return fn(a1); }
00075 
00076     FunctionType fn;
00077 };
00078 
00079 template <class R, class T , class Arg1>
00080 struct MemberFunctor1 : public BaseFunctor
00081 {
00082     typedef R (T::*FunctionType)(Arg1);
00083     typedef R ResultType;
00084 
00085     MemberFunctor1(T *object, FunctionType fn) : object(object), fn(fn) {}
00086 
00087     ResultType operator()(Arg1 a1) const { return (object->*(fn))(a1); }
00088 
00089     T *object;
00090     FunctionType fn;
00091 };
00092 
00093 template <class R , class Arg1, class Arg2>
00094 struct PtrFunctor2 : public BaseFunctor
00095 {
00096     typedef R (*FunctionType)(Arg1, Arg2);
00097     typedef R ResultType;
00098 
00099     PtrFunctor2(FunctionType fn) : fn(fn) {}
00100 
00101     ResultType operator()(Arg1 a1, Arg2 a2) const { return fn(a1, a2); }
00102 
00103     FunctionType fn;
00104 };
00105 
00106 template <class R, class T , class Arg1, class Arg2>
00107 struct MemberFunctor2 : public BaseFunctor
00108 {
00109     typedef R (T::*FunctionType)(Arg1, Arg2);
00110     typedef R ResultType;
00111 
00112     MemberFunctor2(T *object, FunctionType fn) : object(object), fn(fn) {}
00113 
00114     ResultType operator()(Arg1 a1, Arg2 a2) const { return (object->*(fn))(a1, a2); }
00115 
00116     T *object;
00117     FunctionType fn;
00118 };
00119 
00120 template <class R , class Arg1, class Arg2, class Arg3>
00121 struct PtrFunctor3 : public BaseFunctor
00122 {
00123     typedef R (*FunctionType)(Arg1, Arg2, Arg3);
00124     typedef R ResultType;
00125 
00126     PtrFunctor3(FunctionType fn) : fn(fn) {}
00127 
00128     ResultType operator()(Arg1 a1, Arg2 a2, Arg3 a3) const { return fn(a1, a2, a3); }
00129 
00130     FunctionType fn;
00131 };
00132 
00133 template <class R, class T , class Arg1, class Arg2, class Arg3>
00134 struct MemberFunctor3 : public BaseFunctor
00135 {
00136     typedef R (T::*FunctionType)(Arg1, Arg2, Arg3);
00137     typedef R ResultType;
00138 
00139     MemberFunctor3(T *object, FunctionType fn) : object(object), fn(fn) {}
00140 
00141     ResultType operator()(Arg1 a1, Arg2 a2, Arg3 a3) const { return (object->*(fn))(a1, a2, a3); }
00142 
00143     T *object;
00144     FunctionType fn;
00145 };
00146 
00147 template <class R , class Arg1, class Arg2, class Arg3, class Arg4>
00148 struct PtrFunctor4 : public BaseFunctor
00149 {
00150     typedef R (*FunctionType)(Arg1, Arg2, Arg3, Arg4);
00151     typedef R ResultType;
00152 
00153     PtrFunctor4(FunctionType fn) : fn(fn) {}
00154 
00155     ResultType operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4) const { return fn(a1, a2, a3, a4); }
00156 
00157     FunctionType fn;
00158 };
00159 
00160 template <class R, class T , class Arg1, class Arg2, class Arg3, class Arg4>
00161 struct MemberFunctor4 : public BaseFunctor
00162 {
00163     typedef R (T::*FunctionType)(Arg1, Arg2, Arg3, Arg4);
00164     typedef R ResultType;
00165 
00166     MemberFunctor4(T *object, FunctionType fn) : object(object), fn(fn) {}
00167 
00168     ResultType operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4) const { return (object->*(fn))(a1, a2, a3, a4); }
00169 
00170     T *object;
00171     FunctionType fn;
00172 };
00173 
00174 template <class R , class Arg1, class Arg2, class Arg3, class Arg4, class Arg5>
00175 struct PtrFunctor5 : public BaseFunctor
00176 {
00177     typedef R (*FunctionType)(Arg1, Arg2, Arg3, Arg4, Arg5);
00178     typedef R ResultType;
00179 
00180     PtrFunctor5(FunctionType fn) : fn(fn) {}
00181 
00182     ResultType operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5) const { return fn(a1, a2, a3, a4, a5); }
00183 
00184     FunctionType fn;
00185 };
00186 
00187 template <class R, class T , class Arg1, class Arg2, class Arg3, class Arg4, class Arg5>
00188 struct MemberFunctor5 : public BaseFunctor
00189 {
00190     typedef R (T::*FunctionType)(Arg1, Arg2, Arg3, Arg4, Arg5);
00191     typedef R ResultType;
00192 
00193     MemberFunctor5(T *object, FunctionType fn) : object(object), fn(fn) {}
00194 
00195     ResultType operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5) const { return (object->*(fn))(a1, a2, a3, a4, a5); }
00196 
00197     T *object;
00198     FunctionType fn;
00199 };
00200 
00201 template <class R , class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6>
00202 struct PtrFunctor6 : public BaseFunctor
00203 {
00204     typedef R (*FunctionType)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6);
00205     typedef R ResultType;
00206 
00207     PtrFunctor6(FunctionType fn) : fn(fn) {}
00208 
00209     ResultType operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6) const { return fn(a1, a2, a3, a4, a5, a6); }
00210 
00211     FunctionType fn;
00212 };
00213 
00214 template <class R, class T , class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6>
00215 struct MemberFunctor6 : public BaseFunctor
00216 {
00217     typedef R (T::*FunctionType)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6);
00218     typedef R ResultType;
00219 
00220     MemberFunctor6(T *object, FunctionType fn) : object(object), fn(fn) {}
00221 
00222     ResultType operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6) const { return (object->*(fn))(a1, a2, a3, a4, a5, a6); }
00223 
00224     T *object;
00225     FunctionType fn;
00226 };
00227 
00228 template <class R , class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7>
00229 struct PtrFunctor7 : public BaseFunctor
00230 {
00231     typedef R (*FunctionType)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7);
00232     typedef R ResultType;
00233 
00234     PtrFunctor7(FunctionType fn) : fn(fn) {}
00235 
00236     ResultType operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6, Arg7 a7) const { return fn(a1, a2, a3, a4, a5, a6, a7); }
00237 
00238     FunctionType fn;
00239 };
00240 
00241 template <class R, class T , class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7>
00242 struct MemberFunctor7 : public BaseFunctor
00243 {
00244     typedef R (T::*FunctionType)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7);
00245     typedef R ResultType;
00246 
00247     MemberFunctor7(T *object, FunctionType fn) : object(object), fn(fn) {}
00248 
00249     ResultType operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6, Arg7 a7) const { return (object->*(fn))(a1, a2, a3, a4, a5, a6, a7); }
00250 
00251     T *object;
00252     FunctionType fn;
00253 };
00254 
00255 // convenience methods
00256 
00257 // ptrFun
00258 
00259 template <class R>
00260 inline PtrFunctor0<R>
00261 ptrFun(R (*fn)() )
00262 { return PtrFunctor0<R>(fn); }
00263 
00264 template <class R, class Arg1>
00265 inline PtrFunctor1<R, Arg1>
00266 ptrFun(R (*fn)(Arg1) )
00267 { return PtrFunctor1<R, Arg1>(fn); }
00268 
00269 template <class R, class Arg1, class Arg2>
00270 inline PtrFunctor2<R, Arg1, Arg2>
00271 ptrFun(R (*fn)(Arg1, Arg2) )
00272 { return PtrFunctor2<R, Arg1, Arg2>(fn); }
00273 
00274 template <class R, class Arg1, class Arg2, class Arg3>
00275 inline PtrFunctor3<R, Arg1, Arg2, Arg3>
00276 ptrFun(R (*fn)(Arg1, Arg2, Arg3) )
00277 { return PtrFunctor3<R, Arg1, Arg2, Arg3>(fn); }
00278 
00279 template <class R, class Arg1, class Arg2, class Arg3, class Arg4>
00280 inline PtrFunctor4<R, Arg1, Arg2, Arg3, Arg4>
00281 ptrFun(R (*fn)(Arg1, Arg2, Arg3, Arg4) )
00282 { return PtrFunctor4<R, Arg1, Arg2, Arg3, Arg4>(fn); }
00283 
00284 template <class R, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5>
00285 inline PtrFunctor5<R, Arg1, Arg2, Arg3, Arg4, Arg5>
00286 ptrFun(R (*fn)(Arg1, Arg2, Arg3, Arg4, Arg5) )
00287 { return PtrFunctor5<R, Arg1, Arg2, Arg3, Arg4, Arg5>(fn); }
00288 
00289 template <class R, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6>
00290 inline PtrFunctor6<R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>
00291 ptrFun(R (*fn)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6) )
00292 { return PtrFunctor6<R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>(fn); }
00293 
00294 template <class R, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7>
00295 inline PtrFunctor7<R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>
00296 ptrFun(R (*fn)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7) )
00297 { return PtrFunctor7<R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>(fn); }
00298 
00299 // memFun
00300 
00301 template <class R, class T>
00302 inline MemberFunctor0<R, T>
00303 memFun( T *obj, R (T::*fn)() )
00304 { return MemberFunctor0<R, T>(obj, fn); }
00305 
00306 template <class R, class T, class Arg1>
00307 inline MemberFunctor1<R, T, Arg1>
00308 memFun( T *obj, R (T::*fn)(Arg1) )
00309 { return MemberFunctor1<R, T, Arg1>(obj, fn); }
00310 
00311 template <class R, class T, class Arg1, class Arg2>
00312 inline MemberFunctor2<R, T, Arg1, Arg2>
00313 memFun( T *obj, R (T::*fn)(Arg1, Arg2) )
00314 { return MemberFunctor2<R, T, Arg1, Arg2>(obj, fn); }
00315 
00316 template <class R, class T, class Arg1, class Arg2, class Arg3>
00317 inline MemberFunctor3<R, T, Arg1, Arg2, Arg3>
00318 memFun( T *obj, R (T::*fn)(Arg1, Arg2, Arg3) )
00319 { return MemberFunctor3<R, T, Arg1, Arg2, Arg3>(obj, fn); }
00320 
00321 template <class R, class T, class Arg1, class Arg2, class Arg3, class Arg4>
00322 inline MemberFunctor4<R, T, Arg1, Arg2, Arg3, Arg4>
00323 memFun( T *obj, R (T::*fn)(Arg1, Arg2, Arg3, Arg4) )
00324 { return MemberFunctor4<R, T, Arg1, Arg2, Arg3, Arg4>(obj, fn); }
00325 
00326 template <class R, class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5>
00327 inline MemberFunctor5<R, T, Arg1, Arg2, Arg3, Arg4, Arg5>
00328 memFun( T *obj, R (T::*fn)(Arg1, Arg2, Arg3, Arg4, Arg5) )
00329 { return MemberFunctor5<R, T, Arg1, Arg2, Arg3, Arg4, Arg5>(obj, fn); }
00330 
00331 template <class R, class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6>
00332 inline MemberFunctor6<R, T, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>
00333 memFun( T *obj, R (T::*fn)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6) )
00334 { return MemberFunctor6<R, T, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>(obj, fn); }
00335 
00336 template <class R, class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7>
00337 inline MemberFunctor7<R, T, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>
00338 memFun( T *obj, R (T::*fn)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7) )
00339 { return MemberFunctor7<R, T, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>(obj, fn); }
00340 
00341 }
00342 
00343 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00367.html0000644000175200001440000002166212000060453021634 0ustar00collabora-develusers00000000000000 Tp::RequestableChannelClassSpecList Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::RequestableChannelClassSpecList Class Reference


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00680_source.html0000644000175200001440000001541112000060453023205 0ustar00collabora-develusers00000000000000 ready-object.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
ready-object.h
00001 
00023 #ifndef _TelepathyQt_ready_object_h_HEADER_GUARD_
00024 #define _TelepathyQt_ready_object_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Feature>
00031 
00032 #include <QObject>
00033 
00034 namespace Tp
00035 {
00036 
00037 class DBusProxy;
00038 class PendingReady;
00039 class ReadinessHelper;
00040 class RefCounted;
00041 
00042 class TP_QT_EXPORT ReadyObject
00043 {
00044     Q_DISABLE_COPY(ReadyObject)
00045 
00046 public:
00047     ReadyObject(RefCounted *object, const Feature &featureCore);
00048     ReadyObject(DBusProxy *proxy, const Feature &featureCore);
00049     virtual ~ReadyObject();
00050 
00051     virtual bool isReady(const Features &features = Features()) const;
00052     virtual PendingReady *becomeReady(const Features &requestedFeatures = Features());
00053 
00054     virtual Features requestedFeatures() const;
00055     virtual Features actualFeatures() const;
00056     virtual Features missingFeatures() const;
00057 
00058 protected:
00059     ReadinessHelper *readinessHelper() const;
00060 
00061 private:
00062     struct Private;
00063     friend struct Private;
00064     Private *mPriv;
00065 };
00066 
00067 } // Tp
00068 
00069 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_func_0x70.html0000644000175200001440000003252712000060453024617 0ustar00collabora-develusers00000000000000 Class Members - Functions
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- p -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00248.html0000644000175200001440000001172312000060453021627 0ustar00collabora-develusers00000000000000 Tp::HandlerCapabilities Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::HandlerCapabilities Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

A structure representing the capabilities of a single client.


Member Data Documentation

For implementations of the Client interface, the well-known bus name name of the client; for any other process, any other reversed domain name that uniquely identifies it.

An array of channel classes that can be handled by this client. This will usually be a copy of the client's ClientHandlerInterface::HandlerChannelFilter property.
An array of client capabilities supported by this client, to be used by the connection manager to determine what capabilities to advertise. This will usually be a copy of the client's ClientHandlerInterface::Capabilities property.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01013.html0000644000175200001440000000433612000060453021620 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PropertyFlagsChange Member List
This is the complete list of members for Tp::PropertyFlagsChange, including all inherited members.
newFlagsTp::PropertyFlagsChange
propertyIDTp::PropertyFlagsChange


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00347.html0000644000175200001440000004240512000060453021630 0ustar00collabora-develusers00000000000000 Tp::Client::ProtocolInterfacePresenceInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ProtocolInterfacePresenceInterface Class Reference

#include <TelepathyQt/ConnectionManager>

Inherits Tp::AbstractInterface.

List of all members.

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Protocol.Interface.Presence".


Constructor & Destructor Documentation

Tp::Client::ProtocolInterfacePresenceInterface::ProtocolInterfacePresenceInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ProtocolInterfacePresenceInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ProtocolInterfacePresenceInterface::ProtocolInterfacePresenceInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ProtocolInterfacePresenceInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ProtocolInterfacePresenceInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ProtocolInterfacePresenceInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ProtocolInterfacePresenceInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Protocol.Interface.Presence", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property Statuses of type Tp::SimpleStatusSpecMap.

The statuses that might appear in the Connection.Interface.SimplePresence.Statuses property on a connection to this protocol that supports SimplePresence. This property is immutable. Depending on server capabilities, it is possible that not all of these will actually appear on the Connection.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
void Tp::Client::ProtocolInterfacePresenceInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01014.html0000644000175200001440000000505312000060453021616 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PropertySpec Member List
This is the complete list of members for Tp::PropertySpec, including all inherited members.
flagsTp::PropertySpec
nameTp::PropertySpec
propertyIDTp::PropertySpec
signatureTp::PropertySpec


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01061.html0000644000175200001440000002104412000060453021616 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::AccountManagerInterface Member List
This is the complete list of members for Tp::Client::AccountManagerInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
AccountManagerInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::AccountManagerInterface
AccountManagerInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::AccountManagerInterface
AccountManagerInterface(Tp::DBusProxy *proxy)Tp::Client::AccountManagerInterface
AccountRemoved(const QDBusObjectPath &account)Tp::Client::AccountManagerInterface [signal]
AccountValidityChanged(const QDBusObjectPath &account, bool valid)Tp::Client::AccountManagerInterface [signal]
CreateAccount(const QString &connectionManager, const QString &protocol, const QString &displayName, const QVariantMap &parameters, const QVariantMap &properties, int timeout=-1)Tp::Client::AccountManagerInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::AccountManagerInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::AccountManagerInterface [inline]
requestPropertyInterfaces() const Tp::Client::AccountManagerInterface [inline]
requestPropertyInvalidAccounts() const Tp::Client::AccountManagerInterface [inline]
requestPropertySupportedAccountProperties() const Tp::Client::AccountManagerInterface [inline]
requestPropertyValidAccounts() const Tp::Client::AccountManagerInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::AccountManagerInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00135.html0000644000175200001440000005244412000060453021627 0ustar00collabora-develusers00000000000000 Tp::Client::ChannelInterfaceTubeInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelInterfaceTubeInterface Class Reference

#include <TelepathyQt/Channel>

Inherits Tp::AbstractInterface.

List of all members.

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Channel.Interface.Tube".


Constructor & Destructor Documentation

Tp::Client::ChannelInterfaceTubeInterface::ChannelInterfaceTubeInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfaceTubeInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ChannelInterfaceTubeInterface::ChannelInterfaceTubeInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfaceTubeInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ChannelInterfaceTubeInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ChannelInterfaceTubeInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ChannelInterfaceTubeInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

static QLatin1String Tp::Client::ChannelInterfaceTubeInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Channel.Interface.Tube", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property Parameters of type QVariantMap.

Each tube has a dictionary of arbitrary parameters. Parameters are commonly used to bootstrap legacy protocols where you can't negotiate parameters in-band. The allowable keys, types and values are defined by the service, but connection managers must support the value being a string (D-Bus type 's'), array of bytes (D-Bus type 'ay'), unsigned integer (D-Bus type 'u'), integer (D-Bus type 'i') and boolean (D-Bus type 'b').

When the tube is offered, the parameters are transmitted with the offer and appear as a property of the incoming tube for other participants.

For example, a stream tube for ChannelTypeStreamTubeInterface::Service "smb" (Server Message Block over TCP/IP) might use the following properties, as defined in DNS SRV (RFC 2782) Service Types:

 { 'u': 'some-username',
   'p': 'top-secret-password',
   'path': '/etc/passwd',
 }

When requesting a tube with ConnectionInterfaceRequestsInterface::CreateChannel() , this property MUST NOT be included in the request; instead, it is set when ChannelTypeStreamTubeInterface::Offer() or ChannelTypeDBusTubeInterface::Offer() (as appropriate) is called. Its value is undefined until the tube is offered; once set, its value MUST NOT change.

When receiving an incoming tube, this property is immutable and so advertised in the ConnectionInterfaceRequestsInterface::NewChannels() signal.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property State of type uint.

State of the tube in this channel.

When requesting a tube with ConnectionInterfaceRequestsInterface::CreateChannel() , this property MUST NOT be included in the request.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.

Represents the signal TubeChannelStateChanged on the remote object.

Emitted when the state of the tube channel changes. Valid state transitions are documented with Tube_Channel_State.

Parameters:
stateThe new state of the tube.
void Tp::Client::ChannelInterfaceTubeInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/index.html0000644000175200001440000000652412000060453022123 0ustar00collabora-develusers00000000000000 Telepathy-Qt
   Home · All Classes · All Namespaces · Modules · Functions · Files
Telepathy-Qt

Introduction

Telepathy-Qt is a Qt high-level binding for Telepathy.

Telepathy is a D-Bus framework for unifying real time communication, including instant messaging, voice calls and video calls. It abstracts differences between protocols to provide a unified interface for applications.

Releases can be found here.

Development is done in the git repository found here.

Getting Started

Examples

This is the list of examples in Telepathy-Qt's examples directory. The examples demonstrate Telepathy-Qt features in small, self-contained programs. They are not all designed to be impressive when you run them, but their source code is carefully written to show good Telepathy-Qt programming practices.

Further Information


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00336.html0000644000175200001440000006301012000060453021621 0ustar00collabora-develusers00000000000000 Tp::Profile Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The Profile class provides an easy way to read Telepathy profile files according to http://telepathy.freedesktop.org/wiki/service-profile-v1. More...

#include <TelepathyQt/Profile>

Inherits Tp::RefCounted.

List of all members.

Classes

Public Types

Public Member Functions

Static Public Member Functions


Detailed Description

The Profile class provides an easy way to read Telepathy profile files according to http://telepathy.freedesktop.org/wiki/service-profile-v1.

Note that profiles with xml element <type> different than "IM" are considered invalid.


Member Typedef Documentation


Constructor & Destructor Documentation

Class destructor.


Member Function Documentation

ProfilePtr Tp::Profile::createForServiceName ( const QString &  serviceName) [static]

Create a new Profile object used to read .profiles compliant files.

Parameters:
serviceNameThe profile service name.
Returns:
A ProfilePtr object pointing to the newly created Profile object.
ProfilePtr Tp::Profile::createForFileName ( const QString &  fileName) [static]

Create a new Profile object used to read .profiles compliant files.

Parameters:
fileNameThe profile file name.
Returns:
A ProfilePtr object pointing to the newly created Profile object.
QString Tp::Profile::serviceName ( ) const

Return the unique name of the service to which this profile applies.

Returns:
The unique name of the service.
bool Tp::Profile::isValid ( ) const

Return whether this profile is valid.

Returns:
true if valid, otherwise false.
bool Tp::Profile::isFake ( ) const

Return whether this profile is fake.

Fake profiles are profiles created for services not providing a .profile file.

Returns:
true if fake, otherwise false.
QString Tp::Profile::type ( ) const

Return the type of the service to which this profile applies.

In general, services of interest of Telepathy should be of type 'IM'. Other service types exist but are unlikely to affect Telepathy in any way.

Returns:
The type of the service.
QString Tp::Profile::provider ( ) const

Return the name of the vendor/organisation/provider who actually runs the service to which this profile applies.

Returns:
The provider of the service.
QString Tp::Profile::name ( ) const

Return the human-readable name for the service to which this profile applies.

Returns:
The Human-readable name of the service.
QString Tp::Profile::iconName ( ) const

Return the base name of the icon for the service to which this profile applies.

Returns:
The base name of the icon for the service.
QString Tp::Profile::cmName ( ) const

Return the connection manager name for the service to which this profile applies.

Returns:
The connection manager name for the service.
QString Tp::Profile::protocolName ( ) const

Return the protocol name for the service to which this profile applies.

Returns:
The protocol name for the service.

Return a list of parameters defined for the service to which this profile applies.

Returns:
A list of Profile::Parameter.
bool Tp::Profile::hasParameter ( const QString &  name) const

Return whether this profile defines the parameter named name.

Returns:
true if parameter is defined, otherwise false.
Profile::Parameter Tp::Profile::parameter ( const QString &  name) const

Return the parameter for a given name.

Returns:
A Profile::Parameter.

Return whether the standard CM presences not defined in presences() are supported.

Returns:
true if standard CM presences are supported, otherwise false.

Return a list of presences defined for the service to which this profile applies.

Returns:
A list of Profile::Presence.
bool Tp::Profile::hasPresence ( const QString &  id) const

Return whether this profile defines the presence with id id.

Returns:
true if presence is defined, otherwise false.
Profile::Presence Tp::Profile::presence ( const QString &  id) const

Return the presence for a given id.

Returns:
A Profile::Presence.

A list of channel classes not supported by the service to which this profile applies.

Returns:
A list of RequestableChannelClassSpec.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00622_source.html0000644000175200001440000001260012000060453023176 0ustar00collabora-develusers00000000000000 outgoing-dbus-tube-channel.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
outgoing-dbus-tube-channel.h
00001 
00022 #ifndef _TelepathyQt_outgoing_dbus_tube_channel_h_HEADER_GUARD_
00023 #define _TelepathyQt_outgoing_dbus_tube_channel_h_HEADER_GUARD_
00024 
00025 #ifndef IN_TP_QT_HEADER
00026 #error IN_TP_QT_HEADER
00027 #endif
00028 
00029 #include <TelepathyQt/DBusTubeChannel>
00030 
00031 namespace Tp {
00032 
00033 class PendingDBusTubeConnection;
00034 
00035 class TP_QT_EXPORT OutgoingDBusTubeChannel : public DBusTubeChannel
00036 {
00037     Q_OBJECT
00038     Q_DISABLE_COPY(OutgoingDBusTubeChannel)
00039 
00040 public:
00041     static OutgoingDBusTubeChannelPtr create(const ConnectionPtr &connection,
00042             const QString &objectPath, const QVariantMap &immutableProperties);
00043 
00044     virtual ~OutgoingDBusTubeChannel();
00045 
00046     PendingDBusTubeConnection *offerTube(const QVariantMap &parameters, bool allowOtherUsers = false);
00047 
00048 protected:
00049     OutgoingDBusTubeChannel(const ConnectionPtr &connection, const QString &objectPath,
00050             const QVariantMap &immutableProperties);
00051 
00052 private:
00053     struct Private;
00054     friend struct Private;
00055     Private *mPriv;
00056 };
00057 
00058 }
00059 
00060 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00986.html0000644000175200001440000000513712000060453021642 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactSendingStateMap Member List
This is the complete list of members for Tp::ContactSendingStateMap, including all inherited members.
ContactSendingStateMap()Tp::ContactSendingStateMap [inline]
ContactSendingStateMap(const QMap< uint, uint > &a)Tp::ContactSendingStateMap [inline]
operator=(const QMap< uint, uint > &a)Tp::ContactSendingStateMap [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00834.html0000644000175200001440000002116012000060453021624 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactCapabilities Member List
This is the complete list of members for Tp::ContactCapabilities, including all inherited members.
allClassSpecs() const Tp::CapabilitiesBase
audioCalls() const Tp::CapabilitiesBase
CapabilitiesBase()Tp::CapabilitiesBase
CapabilitiesBase(const CapabilitiesBase &other)Tp::CapabilitiesBase
CapabilitiesBase(bool specificToContact)Tp::CapabilitiesBase [protected]
CapabilitiesBase(const RequestableChannelClassList &rccs, bool specificToContact)Tp::CapabilitiesBase [protected]
CapabilitiesBase(const RequestableChannelClassSpecList &rccSpecs, bool specificToContact)Tp::CapabilitiesBase [protected]
ContactCapabilities()Tp::ContactCapabilities
ContactCapabilities(bool specificToContact)Tp::ContactCapabilities [protected]
ContactCapabilities(const RequestableChannelClassList &rccs, bool specificToContact)Tp::ContactCapabilities [protected]
ContactCapabilities(const RequestableChannelClassSpecList &rccSpecs, bool specificToContact)Tp::ContactCapabilities [protected]
dbusTubes(const QString &serviceName) const Tp::ContactCapabilities
dbusTubeServices() const Tp::ContactCapabilities
fileTransfers() const Tp::CapabilitiesBase
isSpecificToContact() const Tp::CapabilitiesBase
operator=(const CapabilitiesBase &other)Tp::CapabilitiesBase
streamedMediaAudioCalls() const Tp::CapabilitiesBase
streamedMediaCalls() const Tp::CapabilitiesBase
streamedMediaVideoCalls() const Tp::CapabilitiesBase
streamedMediaVideoCallsWithAudio() const Tp::CapabilitiesBase
streamTubes(const QString &service) const Tp::ContactCapabilities
streamTubeServices() const Tp::ContactCapabilities
textChats() const Tp::CapabilitiesBase
updateRequestableChannelClasses(const RequestableChannelClassList &rccs)Tp::CapabilitiesBase [protected, virtual]
upgradingCalls() const Tp::CapabilitiesBase
upgradingStreamedMediaCalls() const Tp::CapabilitiesBase
videoCalls() const Tp::CapabilitiesBase
videoCallsWithAudio() const Tp::CapabilitiesBase
~CapabilitiesBase()Tp::CapabilitiesBase [virtual]
~ContactCapabilities()Tp::ContactCapabilities [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00106.html0000644000175200001440000035062612000060453021630 0ustar00collabora-develusers00000000000000 Tp::Channel Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The Channel class represents a Telepathy channel. More...

#include <TelepathyQt/Channel>

Inherits Tp::StatefulDBusProxy, and Tp::OptionalInterfaceFactory< Channel >.

Inherited by Tp::CallChannel, Tp::ContactSearchChannel, Tp::FileTransferChannel, Tp::RoomListChannel, Tp::ServerAuthenticationChannel, Tp::StreamedMediaChannel, Tp::TextChannel, and Tp::TubeChannel.

List of all members.

Classes

Signals

Public Member Functions

Static Public Member Functions

Static Public Attributes

Protected Member Functions

Group interface

Cached access to state of the group interface on the associated remote object, if the interface is present.

Some methods can be used when targetHandleType() == HandleTypeContact, such as groupFlags(), groupCanAddContacts(), groupCanRemoveContacts(), groupSelfContact() and groupContacts().

As the group interface state can change freely during the lifetime of the channel due to events like new contacts joining the group, the cached state is automatically kept in sync with the remote object's state by hooking to the change notification signals present in the D-Bus interface.

As the cached value changes, change notification signals are emitted.

Signals such as groupMembersChanged(), groupSelfContactChanged(), etc., are emitted to indicate that properties have changed.

Check the individual signals' descriptions for details.


Detailed Description

The Channel class represents a Telepathy channel.

All communication in the Telepathy framework is carried out via channel objects. Specialized classes for some specific channel types such as StreamedMediaChannel, TextChannel, FileTransferChannel are provided.

The remote object accessor functions on this object (channelType(), targetHandleType(), and so on) don't make any D-Bus calls; instead, they return/use values cached from a previous introspection run. The introspection process populates their values in the most efficient way possible based on what the service implements.

To avoid unnecessary D-Bus traffic, some accessors only return valid information after specific features have been enabled. For instance, to retrieve the initial invitee contacts in a conference channel, it is necessary to enable the feature Channel::FeatureConferenceInitialInviteeContacts. See the individual methods descriptions for more details.

Channel features can be enabled by constructing a ChannelFactory and enabling the desired features, and passing it to AccountManager, Account or ClientRegistrar when creating them as appropriate. However, if a particular feature is only ever used in a specific circumstance, such as an user opening some settings dialog separate from the general view of the application, features can be later enabled as needed by calling becomeReady() with the additional features, and waiting for the resulting PendingOperation to finish.

Each channel is owned by a connection. If the Connection object becomes invalidated the Channel object will also get invalidated.

Usage

Creating a channel object

Channel objects can be created in various ways, but the preferred way is trough Account channel creation methods such as Account::ensureTextChat(), Account::createFileTransfer(), which uses the channel dispatcher.

If you already know the object path, you can just call create(). For example:

 ChannelPtr chan = Channel::create(connection, objectPath,
         immutableProperties);

Making channel ready to use

A Channel object needs to become ready before usage, meaning that the introspection process finished and the object accessors can be used.

To make the object ready, use becomeReady() and wait for the PendingOperation::finished() signal to be emitted.

 class MyClass : public QObject
 {
     QOBJECT

 public:
     MyClass(QObject *parent = 0);
     ~MyClass() { }

 private Q_SLOTS:
     void onChannelReady(Tp::PendingOperation*);

 private:
     ChannelPtr chan;
 };

 MyClass::MyClass(const ConnectionPtr &connection,
         const QString &objectPath, const QVariantMap &immutableProperties)
     : QObject(parent)
       chan(Channel::create(connection, objectPath, immutableProperties))
 {
     connect(chan->becomeReady(),
             SIGNAL(finished(Tp::PendingOperation*)),
             SLOT(onChannelReady(Tp::PendingOperation*)));
 }

 void MyClass::onChannelReady(Tp::PendingOperation *op)
 {
     if (op->isError()) {
         qWarning() << "Channel cannot become ready:" <<
             op->errorName() << "-" << op->errorMessage();
         return;
     }

     // Channel is now ready
 }

See Asynchronous Object Model, Shared Pointer Usage


Constructor & Destructor Documentation

Tp::Channel::~Channel ( ) [virtual]

Class destructor.

Tp::Channel::Channel ( const ConnectionPtr &  connection,
const QString &  objectPath,
const QVariantMap &  immutableProperties,
const Feature coreFeature 
) [protected]

Construct a new Channel object.

Parameters:
connectionConnection owning this channel, and specifying the service.
objectPathThe channel object path.
immutablePropertiesThe channel immutable properties.
coreFeatureThe core feature of the channel type. The corresponding introspectable should depend on Channel::FeatureCore.

Member Function Documentation

ChannelPtr Tp::Channel::create ( const ConnectionPtr &  connection,
const QString &  objectPath,
const QVariantMap &  immutableProperties 
) [static]

Create a new Channel object.

Parameters:
connectionConnection owning this channel, and specifying the service.
objectPathThe channel object path.
immutablePropertiesThe channel immutable properties.
Returns:
A ChannelPtr object pointing to the newly created Channel object.
Todo:
immutableProperties should be used to populate the corresponding accessors (such as channelType()) already on construction, not only when making FeatureCore ready (fd.o #41654)

Reimplemented in Tp::StreamedMediaChannel, Tp::ContactSearchChannel, Tp::TextChannel, Tp::IncomingStreamTubeChannel, Tp::CallChannel, Tp::OutgoingStreamTubeChannel, Tp::IncomingFileTransferChannel, Tp::OutgoingFileTransferChannel, Tp::StreamTubeChannel, Tp::DBusTubeChannel, Tp::FileTransferChannel, Tp::ServerAuthenticationChannel, Tp::TubeChannel, Tp::IncomingDBusTubeChannel, Tp::OutgoingDBusTubeChannel, and Tp::RoomListChannel.

ConnectionPtr Tp::Channel::connection ( ) const

Return the connection owning this channel.

Returns:
A pointer to the Connection object.
QVariantMap Tp::Channel::immutableProperties ( ) const

Return the immutable properties of the channel.

If the channel is ready (isReady(Channel::FeatureCore) returns true), the following keys are guaranteed to be present: org.freedesktop.Telepathy.Channel.ChannelType, org.freedesktop.Telepathy.Channel.TargetHandleType, org.freedesktop.Telepathy.Channel.TargetHandle and org.freedesktop.Telepathy.Channel.Requested.

The keys and values in this map are defined by the Telepathy specification, or by third-party extensions to that specification. These are the properties that cannot change over the lifetime of the channel; they're announced in the result of the request, for efficiency.

Returns:
The immutable properties as QVariantMap.
QString Tp::Channel::channelType ( ) const

Return the D-Bus interface name for the type of this channel.

This method requires Channel::FeatureCore to be ready.

Returns:
The D-Bus interface name for the type of the channel.

Return the type of the handle returned by targetHandle() as specified in HandleType.

This method requires Channel::FeatureCore to be ready.

Returns:
The target handle type as HandleType.
See also:
targetHandle(), targetId()
uint Tp::Channel::targetHandle ( ) const

Return the handle of the remote party with which this channel communicates.

This method requires Channel::FeatureCore to be ready.

Returns:
An integer representing the target handle, which is of the type targetHandleType() indicates.
See also:
targetHandleType(), targetId()
QString Tp::Channel::targetId ( ) const

Return the persistent unique ID of the remote party with which this channel communicates.

If targetHandleType() is HandleTypeContact, this will be the ID of the remote contact, and similarly the unique ID of the room when targetHandleType() is HandleTypeRoom.

This is not necessarily the best identifier to display to the user, though. In particular, for contacts, their alias should be displayed instead. It can be used for matching channels and UI elements for them across reconnects, though, at which point the old channels and contacts are invalidated.

This method requires Channel::FeatureCore to be ready.

Returns:
The target identifier.
See also:
targetHandle(), targetContact()
ContactPtr Tp::Channel::targetContact ( ) const

Return the contact with which this channel communicates for its lifetime, if applicable.

This method requires Channel::FeatureCore to be ready.

Returns:
A pointer to the Contact object, or a null ContactPtr if targetHandleType() is not HandleTypeContact.
See also:
targetHandle(), targetId()
bool Tp::Channel::isRequested ( ) const

Return whether this channel was created in response to a local request.

This method requires Channel::FeatureCore to be ready.

Returns:
true if the channel was created in response to a local request, false otherwise.
ContactPtr Tp::Channel::initiatorContact ( ) const

Return the contact who initiated this channel.

This method requires Channel::FeatureCore to be ready.

Returns:
A pointer to the Contact object representing the contact who initiated the channel, or a null ContactPtr if it can't be retrieved.

Start an asynchronous request that this channel be closed.

The returned PendingOperation object will signal the success or failure of this request; under normal circumstances, it can be expected to succeed.

Returns:
A PendingOperation which will emit PendingOperation::finished when the call has finished.
See also:
requestLeave()
PendingOperation * Tp::Channel::requestLeave ( const QString &  message = QString(),
ChannelGroupChangeReason  reason = ChannelGroupChangeReasonNone 
)

Start an asynchronous request to leave this channel as gracefully as possible.

If leaving any more gracefully is not possible, this will revert to the same as requestClose(). In particular, this will be the case for channels with no group interface (TP_QT_IFACE_CHANNEL_INTERFACE_GROUP not in the list returned by interfaces()).

The returned PendingOperation object will signal the success or failure of this request; under normal circumstances, it can be expected to succeed.

A message and a reason may be provided along with the request, which will be sent to the server if supported, which is indicated by ChannelGroupFlagMessageDepart and/or ChannelGroupFlagMessageReject.

Attempting to leave again when we have already left, either by our request or forcibly, will be a no-op, with the returned PendingOperation immediately finishing successfully.

Parameters:
messageThe message, which can be blank if desired.
reasonA reason for leaving.
Returns:
A PendingOperation which will emit PendingOperation::finished when the call has finished.

Return a set of flags indicating the capabilities and behaviour of the group on this channel.

Change notification is via the groupFlagsChanged() signal.

This method requires Channel::FeatureCore to be ready.

Returns:
The bitfield combination of flags as ChannelGroupFlags.
See also:
groupFlagsChanged()

Return whether contacts can be added or invited to this channel.

Change notification is via the groupCanAddContactsChanged() signal.

This method requires Channel::FeatureCore to be ready.

Returns:
true if contacts can be added or invited to the channel, false otherwise.
See also:
groupFlags(), groupAddContacts()

Return whether a message is expected when adding/inviting contacts, who are not already members, to this channel.

This method requires Channel::FeatureCore to be ready.

Returns:
true if a message is expected, false otherwise.
See also:
groupFlags(), groupAddContacts()

Return whether a message is expected when accepting contacts' requests to join this channel.

This method requires Channel::FeatureCore to be ready.

Returns:
true if a message is expected, false otherwise.
See also:
groupFlags(), groupAddContacts()
PendingOperation * Tp::Channel::groupAddContacts ( const QList< ContactPtr > &  contacts,
const QString &  message = QString() 
)

Add contacts to this channel.

Contacts on the local pending list (those waiting for permission to join the channel) can always be added. If groupCanAcceptContactsWithMessage() returns true, an optional message is expected when doing this; if not, the message parameter is likely to be ignored (so the user should not be asked for a message, and the message parameter should be left empty).

Other contacts can only be added if groupCanAddContacts() returns true. If groupCanAddContactsWithMessage() returns true, an optional message is expected when doing this, and if not, the message parameter is likely to be ignored.

This method requires Channel::FeatureCore to be ready.

Parameters:
contactsContacts to be added.
messageA string message, which can be blank if desired.
Returns:
A PendingOperation which will emit PendingOperation::finished when the call has finished.
See also:
groupCanAddContacts(), groupCanAddContactsWithMessage(), groupCanAcceptContactsWithMessage()

Return whether contacts in groupRemotePendingContacts() can be removed from this channel (i.e. whether an invitation can be rescinded).

Change notification is via the groupCanRescindContactsChanged() signal.

This method requires Channel::FeatureCore to be ready.

Returns:
true if contacts can be removed, false otherwise.
See also:
groupFlags(), groupRemoveContacts()

Return whether a message is expected when removing contacts who are in groupRemotePendingContacts() from this channel (i.e. rescinding an invitation).

This method requires Channel::FeatureCore to be ready.

Returns:
true if a message is expected, false otherwise.
See also:
groupFlags(), groupRemoveContacts()

Return if contacts in groupContacts() can be removed from this channel.

Note that contacts in local pending lists, and the groupSelfContact(), can always be removed from the channel.

Change notification is via the groupCanRemoveContactsChanged() signal.

This method requires Channel::FeatureCore to be ready.

Returns:
true if contacts can be removed, false otherwise.
See also:
groupFlags(), groupRemoveContacts()

Return whether a message is expected when removing contacts who are in groupContacts() from this channel.

This method requires Channel::FeatureCore to be ready.

Returns:
true if a message is expected, false otherwise.
See also:
groupFlags(), groupRemoveContacts()

Return whether a message is expected when removing contacts who are in groupLocalPendingContacts() from this channel (i.e. rejecting a request to join).

This method requires Channel::FeatureCore to be ready.

Returns:
true if a message is expected, false otherwise.
See also:
groupFlags(), groupRemoveContacts()

Return whether a message is expected when removing the groupSelfContact() from this channel (i.e. departing from the channel).

Returns:
true if a message is expected, false otherwise.
See also:
groupFlags(), groupRemoveContacts()
PendingOperation * Tp::Channel::groupRemoveContacts ( const QList< ContactPtr > &  contacts,
const QString &  message = QString(),
ChannelGroupChangeReason  reason = ChannelGroupChangeReasonNone 
)

Remove contacts from this channel.

Contacts on the local pending list (those waiting for permission to join the channel) can always be removed. If groupCanRejectContactsWithMessage() returns true, an optional message is expected when doing this; if not, the message parameter is likely to be ignored (so the user should not be asked for a message, and the message parameter should be left empty).

The groupSelfContact() can also always be removed, as a way to leave the group with an optional departure message and/or departure reason indication. If groupCanDepartWithMessage() returns true, an optional message is expected when doing this, and if not, the message parameter is likely to be ignored.

Contacts in the group can only be removed (e.g. kicked) if groupCanRemoveContacts() returns true. If groupCanRemoveContactsWithMessage() returns true, an optional message is expected when doing this, and if not, the message parameter is likely to be ignored.

Contacts in the remote pending list (those who have been invited to the channel) can only be removed (have their invitations rescinded) if groupCanRescindContacts() returns true. If groupCanRescindContactsWithMessage() returns true, an optional message is expected when doing this, and if not, the message parameter is likely to be ignored.

This method requires Channel::FeatureCore to be ready.

Parameters:
contactsContacts to be removed.
messageA string message, which can be blank if desired.
reasonReason of the change, as specified in ChannelGroupChangeReason
Returns:
A PendingOperation which will emit PendingOperation::finished when the call has finished.
See also:
groupCanRemoveContacts(), groupCanRemoveContactsWithMessage(), groupCanRejectContactsWithMessage(), groupCanRescindContacts(), groupCanRescindContacts(), groupCanRescindContactsWithMessage(), groupCanDepartWithMessage()
Contacts Tp::Channel::groupContacts ( bool  includeSelfContact = true) const

Return the current contacts of the group.

It is possible to omit the contact representing the local user, even if the contact is in the set, by passing false as the parameter includeSelfContact.

Change notification is via the groupMembersChanged() signal.

This method requires Channel::FeatureCore to be ready.

Parameters:
includeSelfContactWhether to include the self contact in the returned set.
Returns:
A set of pointers to the Contact objects.
See also:
groupLocalPendingContacts(), groupRemotePendingContacts()
Contacts Tp::Channel::groupLocalPendingContacts ( bool  includeSelfContact = true) const

Return the contacts currently waiting for local approval to join the group.

It is possible to omit the contact representing the local user, even if the contact is in the set, by passing false as the parameter includeSelfContact.

Change notification is via the groupMembersChanged() signal.

This method requires Channel::FeatureCore to be ready.

Parameters:
includeSelfContactWhether to include the self contact in the returned set.
Returns:
A set of pointers to the Contact objects.
See also:
groupContacts(), groupRemotePendingContacts()
Contacts Tp::Channel::groupRemotePendingContacts ( bool  includeSelfContact = true) const

Return the contacts currently waiting for remote approval to join the group.

It is possible to omit the contact representing the local user, even if the contact is in the set, by passing false as the parameter includeSelfContact.

Change notification is via the groupMembersChanged() signal.

This method requires Channel::FeatureCore to be ready.

Parameters:
includeSelfContactWhether to include the self contact in the returned set.
Returns:
A set of pointers to the Contact objects.
See also:
groupContacts(), groupLocalPendingContacts()

Return information of a local pending contact change. If no information is available, an object for which GroupMemberChangeDetails::isValid() returns false is returned.

This method requires Channel::FeatureCore to be ready.

Parameters:
contactA Contact object that is on the local pending contacts list.
Returns:
The change info as a GroupMemberChangeDetails object.

Return information on the removal of the local user from the group. If the user hasn't been removed from the group, an object for which GroupMemberChangeDetails::isValid() returns false is returned.

This method should be called only after you've left the channel. This is useful for getting the remove information after missing the corresponding groupMembersChanged() signal, as the local user being removed usually causes the channel to be closed.

The returned information is not guaranteed to be correct if groupIsSelfHandleTracked() returns false and a self handle change has occurred on the remote object.

This method requires Channel::FeatureCore to be ready.

Returns:
The remove info as a GroupMemberChangeDetails object.

Return whether globally valid handles can be looked up using the channel-specific handle on this channel using this object.

Handle owner lookup is only available if:

If this function returns false, the return value of groupHandleOwners() is undefined and groupHandleOwnersChanged() will never be emitted.

The value returned by this function will stay fixed for the entire time the object is ready, so no change notification is provided.

This method requires Channel::FeatureCore to be ready.

Returns:
true if handle owner lookup functionality is available, false otherwise.

Return a mapping of handles specific to this channel to globally valid handles.

The mapping includes at least all of the channel-specific handles in this channel's members, local-pending and remote-pending sets as keys. Any handle not in the keys of this mapping is not channel-specific in this channel. Handles which are channel-specific, but for which the owner is unknown, appear in this mapping with 0 as owner.

Change notification is via the groupHandleOwnersChanged() signal.

This method requires Channel::FeatureCore to be ready.

Returns:
A mapping from group-specific handles to globally valid handles.

Return whether the value returned by groupSelfContact() is guaranteed to accurately represent the local user even after nickname changes, etc.

This should always be true for new services implementing the group interface.

Older services not providing group properties don't necessarily emit the SelfHandleChanged signal either, so self contact changes can't be reliably tracked.

This method requires Channel::FeatureCore to be ready.

Returns:
true if changes to the self contact are tracked, false otherwise.
ContactPtr Tp::Channel::groupSelfContact ( ) const

Return a Contact object representing the user in the group if at all possible, otherwise a Contact object representing the user globally.

Change notification is via the groupSelfContactChanged() signal.

This method requires Channel::FeatureCore to be ready.

Returns:
A pointer to the Contact object.
bool Tp::Channel::isConference ( ) const

Return whether this channel implements the conference interface (TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE is in the list returned by interfaces()).

This method requires Channel::FeatureCore to be ready.

Returns:
true if the conference interface is supported, false otherwise.

Return a list of contacts invited to this conference when it was created.

This method requires Channel::FeatureConferenceInitialInviteeContacts to be ready.

Returns:
A set of pointers to the Contact objects.
QList< ChannelPtr > Tp::Channel::conferenceChannels ( ) const

Return the individual channels that are part of this conference.

Change notification is via the conferenceChannelMerged() and conferenceChannelRemoved() signals.

Note that the returned channels are not guaranteed to be ready. Calling Channel::becomeReady() may be needed.

This method requires Channel::FeatureCore to be ready.

Returns:
A list of pointers to Channel objects containing all channels in the conference.
See also:
conferenceInitialChannels(), conferenceOriginalChannels()
QList< ChannelPtr > Tp::Channel::conferenceInitialChannels ( ) const

Return the initial value of conferenceChannels().

Note that the returned channels are not guaranteed to be ready. Calling Channel::becomeReady() may be needed.

This method requires Channel::FeatureCore to be ready.

Returns:
A list of pointers to Channel objects containing all channels that were initially part of the conference.
See also:
conferenceChannels(), conferenceOriginalChannels()
QHash< uint, ChannelPtr > Tp::Channel::conferenceOriginalChannels ( ) const

Return a map between channel specific handles and the corresponding channels of this conference.

This method is only relevant on GSM conference calls where it is possible to have the same phone number in a conference twice; for instance, it could be the number of a corporate switchboard. This is represented using channel-specific handles; whether or not a channel uses channel-specific handles is reported in groupFlags(). The groupHandleOwners() specifies the mapping from opaque channel-specific handles to actual numbers; this property specifies the original 1-1 channel corresponding to each channel-specific handle in the conference.

In protocols where this situation cannot arise, such as XMPP, this method will return an empty hash.

Example, consider this situation: 1. Place a call (with path /call/to/simon) to the contact +441234567890 (which is assigned the handle h, say), and ask to be put through to Simon McVittie; 2. Put that call on hold; 3. Place another call (with path /call/to/jonny) to +441234567890, and ask to be put through to Jonny Lamb; 4. Request a new conference channel with initial channels: ['/call/to/simon', '/call/to/jonny'].

The new channel will have the following properties, for some handles s and j:

{ groupFlags(): ChannelGroupFlagChannelSpecificHandles | (other flags), groupMembers(): [self handle, s, j], groupHandleOwners(): { s: h, j: h }, conferenceInitialChannels(): ['/call/to/simon', '/call/to/jonny'], conferenceChannels(): ['/call/to/simon', '/call/to/jonny'], conferenceOriginalChannels(): { s: '/call/to/simon', j: '/call/to/jonny' }, # ... }

Note that the returned channels are not guaranteed to be ready. Calling Channel::becomeReady() may be needed.

This method requires Channel::FeatureCore to be ready.

Returns:
A map of channel specific handles to pointers to Channel objects.
See also:
conferenceChannels(), conferenceInitialChannels()

Return whether this channel supports conference merging using conferenceMergeChannel().

This method requires Channel::FeatureCore to be ready.

Returns:
true if the interface is supported, false otherwise.
See also:
conferenceMergeChannel()
PendingOperation * Tp::Channel::conferenceMergeChannel ( const ChannelPtr &  channel)

Request that the given channel be incorporated into this channel.

This method requires Channel::FeatureCore to be ready.

Returns:
A PendingOperation which will emit PendingOperation::finished when the call has finished.
See also:
supportsConferenceMerging()

Return whether this channel supports splitting using conferenceSplitChannel().

This method requires Channel::FeatureCore to be ready.

Returns:
true if the interface is supported, false otherwise.
See also:
conferenceSplitChannel()

Request that this channel is removed from any conference of which it is a part.

This method requires Channel::FeatureCore to be ready.

Returns:
A PendingOperation which will emit PendingOperation::finished when the call has finished.
See also:
supportsConferenceSplitting()

Emitted when the value of groupFlags() changes.

Parameters:
flagsThe value which would now be returned by groupFlags().
addedFlags added compared to the previous value.
removedFlags removed compared to the previous value.
void Tp::Channel::groupCanAddContactsChanged ( bool  canAddContacts) [signal]

Emitted when the value of groupCanAddContacts() changes.

Parameters:
canAddContactsWhether a contact can be added to this channel.
See also:
groupCanAddContacts()
void Tp::Channel::groupCanRemoveContactsChanged ( bool  canRemoveContacts) [signal]

Emitted when the value of groupCanRemoveContacts() changes.

Parameters:
canRemoveContactsWhether a contact can be removed from this channel.
See also:
groupCanRemoveContacts()
void Tp::Channel::groupCanRescindContactsChanged ( bool  canRescindContacts) [signal]

Emitted when the value of groupCanRescindContacts() changes.

Parameters:
canRescindContactsWhether contact invitations can be rescinded.
See also:
groupCanRescindContacts()
void Tp::Channel::groupMembersChanged ( const Tp::Contacts &  groupMembersAdded,
const Tp::Contacts &  groupLocalPendingMembersAdded,
const Tp::Contacts &  groupRemotePendingMembersAdded,
const Tp::Contacts &  groupMembersRemoved,
const Tp::Channel::GroupMemberChangeDetails details 
) [signal]

Emitted when the value returned by groupContacts(), groupLocalPendingContacts() or groupRemotePendingContacts() changes.

Parameters:
groupMembersAddedThe contacts that were added to this channel.
groupLocalPendingMembersAddedThe local pending contacts that were added to this channel.
groupRemotePendingMembersAddedThe remote pending contacts that were added to this channel.
groupMembersRemovedThe contacts removed from this channel.
detailsAdditional details such as the contact requesting or causing the change.
void Tp::Channel::groupHandleOwnersChanged ( const Tp::HandleOwnerMap owners,
const Tp::UIntList added,
const Tp::UIntList removed 
) [signal]

Emitted when the value returned by groupHandleOwners() changes.

Parameters:
ownersThe value which would now be returned by groupHandleOwners().
addedHandles which have been added to the mapping as keys, or existing handle keys for which the mapped-to value has changed.
removedHandles which have been removed from the mapping.

Emitted when the value returned by groupSelfContact() changes.

void Tp::Channel::conferenceChannelMerged ( const Tp::ChannelPtr &  channel) [signal]

Emitted when a new channel is added to the value of conferenceChannels().

Parameters:
channelThe channel that was added to conferenceChannels().
void Tp::Channel::conferenceChannelRemoved ( const Tp::ChannelPtr &  channel,
const Tp::Channel::GroupMemberChangeDetails details 
) [signal]

Emitted when a new channel is removed from the value of conferenceChannels().

Parameters:
channelThe channel that was removed from conferenceChannels().
detailsThe change details.

Return the Client::ChannelInterface interface proxy object for this channel. This method is protected since the convenience methods provided by this class should generally be used instead of calling D-Bus methods directly.

Returns:
A pointer to the existing Client::ChannelInterface object for this Channel object.
bool Tp::Channel::groupSelfHandleIsLocalPending ( ) const [protected]

Return whether the local user is in the "local pending" state. This indicates that the local user needs to take action to accept an invitation, an incoming call, etc.

This method requires Channel::FeatureCore to be ready.

Returns:
true if local user is in the channel's local-pending set, false otherwise.

Attempt to add the local user to this channel. In some channel types, such as Text and StreamedMedia, this is used to accept an invitation or an incoming call.

This method requires Channel::FeatureCore to be ready.

Returns:
A PendingOperation which will emit PendingOperation::finished when the call has finished.

Member Data Documentation

Feature representing the core that needs to become ready to make the Channel object usable.

Note that this feature must be enabled in order to use most Channel methods. See specific methods documentation for more details.

When calling isReady(), becomeReady(), this feature is implicitly added to the requested features.

Reimplemented in Tp::StreamedMediaChannel, Tp::IncomingStreamTubeChannel, Tp::TextChannel, Tp::OutgoingStreamTubeChannel, Tp::ContactSearchChannel, Tp::IncomingFileTransferChannel, Tp::OutgoingFileTransferChannel, Tp::StreamTubeChannel, Tp::CallChannel, Tp::FileTransferChannel, Tp::ServerAuthenticationChannel, Tp::DBusTubeChannel, and Tp::TubeChannel.

Feature used in order to access the conference initial invitee contacts info.

See also:
conferenceInitialInviteeContacts()


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00944.html0000644000175200001440000000724012000060453021631 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::StreamTubeClient::Tube Member List
This is the complete list of members for Tp::StreamTubeClient::Tube, including all inherited members.
account() const Tp::StreamTubeClient::Tube [inline]
channel() const Tp::StreamTubeClient::Tube [inline]
isValid() const Tp::StreamTubeClient::Tube [inline]
operator=(const Tube &other)Tp::StreamTubeClient::Tube
Tube()Tp::StreamTubeClient::Tube
Tube(const AccountPtr &account, const IncomingStreamTubeChannelPtr &channel)Tp::StreamTubeClient::Tube
Tube(const Tube &other)Tp::StreamTubeClient::Tube
~Tube()Tp::StreamTubeClient::Tube


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00343.html0000644000175200001440000006510012000060453021621 0ustar00collabora-develusers00000000000000 Tp::ProtocolInfo Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ProtocolInfo Class Reference

The ProtocolInfo class represents a Telepathy Protocol. More...

#include <TelepathyQt/ProtocolInfo>

List of all members.

Public Member Functions


Detailed Description

The ProtocolInfo class represents a Telepathy Protocol.


Constructor & Destructor Documentation

Class destructor.


Member Function Documentation

bool Tp::ProtocolInfo::isValid ( ) const [inline]
ProtocolInfo & Tp::ProtocolInfo::operator= ( const ProtocolInfo other)
QString Tp::ProtocolInfo::cmName ( ) const

Return the short name of the connection manager (e.g. "gabble") for this protocol.

Returns:
The name of the connection manager for this protocol.
QString Tp::ProtocolInfo::name ( ) const

Return the string identifying this protocol as described in the Telepathy specification (e.g. "jabber").

This identifier is not intended to be displayed to users directly; user interfaces are responsible for mapping them to localized strings.

Returns:
A string identifying this protocol.

Return all supported parameters for this protocol. The parameters' names may either be the well-known strings specified by the Telepathy specification (e.g. "account" and "password"), or implementation-specific strings.

Returns:
A list of parameters for this protocol.
bool Tp::ProtocolInfo::hasParameter ( const QString &  name) const

Return whether a given parameter can be passed to the connection manager when creating a connection to this protocol.

Parameters:
nameThe name of a parameter.
Returns:
true if the given parameter exists.

Return whether it might be possible to register new accounts on this protocol, by setting the special parameter named register to true.

Returns:
The same thing as hasParameter("register").
See also:
hasParameter()

Return the capabilities that are expected to be available from a connection to this protocol, i.e. those for which Connection::createChannel() can reasonably be expected to succeed. User interfaces can use this information to show or hide UI components.

Returns:
An object representing the capabilities expected to be available from a connection to this protocol.
QString Tp::ProtocolInfo::vcardField ( ) const

Return the name of the most common vcard field used for this protocol's contact identifiers, normalized to lower case.

One valid use of this field is to answer the question: given a contact's vcard containing an X-JABBER field, how can you communicate with the contact? By iterating through protocols looking for an x-jabber VCardField, one can build up a list of protocols that handle x-jabber, then offer the user a list of accounts for those protocols and/or the option to create a new account for one of those protocols. It is not necessarily valid to interpret contacts' identifiers as values of this vcard field. For instance, telepathy-sofiasip supports contacts whose identifiers are of the form sip:jenny@example.com or tel:8675309, which would not normally both be represented by any single vcard field.

Returns:
The most common vcard field used for this protocol's contact identifiers, or an empty string if there is no such field.
QString Tp::ProtocolInfo::englishName ( ) const

Return the English-language name of this protocol, such as "AIM" or "Yahoo!".

The name can be used as a fallback if an application doesn't have a localized name for this protocol.

If the manager file or the CM service doesn't specify the english name, it is inferred from this protocol name, such that for example "google-talk" becomes "Google Talk", but "local-xmpp" becomes "Local Xmpp".

Returns:
An English-language name for this protocol.
QString Tp::ProtocolInfo::iconName ( ) const

Return the name of an icon for this protocol in the system's icon theme, such as "im-msn".

If the manager file or the CM service doesn't specify the icon name, "im-<protocolname>" is assumed.

Returns:
The likely name of an icon for this protocol.

Return a list of PresenceSpec representing the possible presence statuses from a connection to this protocol.

Returns:
A list of PresenceSpec representing the possible presence statuses from a connection to this protocol.

Return the requirements (size limits, supported MIME types, etc) for avatars used on to this protocol.

Returns:
The requirements for avatars used on this protocol.

Return the vcard fields that can be used to request a contact with on this protocol, normalized to lower case.

Returns:
The vcard fields normalized to lower case.
See also:
addressableUriSchemes()

Return the URI schemes that are supported by this protocol.

Returns:
The URI schemes.
See also:
addressableVCardFields()
PendingString * Tp::ProtocolInfo::normalizeVCardAddress ( const QString &  vcardField,
const QString &  vcardAddress 
)

Attempt to normalize the given vcardAddress.

For example, a vcard TEL field formatted as +1 (206) 555 1234, could be normalized to +12065551234.

If a vcard address X would be normalized to Y, a successful ContactManager contact request using ContactManager::contactsForVCardAddresses() for vcard address X would result in a contact with Y reported as an address that can identify it in Contact::vcardAddresses().

Parameters:
vcardFieldThe vcard field the vcardAddress belongs to.
vcardAddressThe address to normalize.
Returns:
A PendingString which will emit PendingString::finished when the address has been normalized or an error occurred.
See also:
normalizeContactUri()

Attempt to normalize the given contact uri.

If the URI has extra information beyond what's necessary to identify a particular contact, such as an XMPP resource or an action to carry out, this extra information wil be removed.

An example would be xmpp:romeo@Example.Com/Empathy?message;body=Hello, which would be normalized to xmpp:romeo@example.com.

If a URI address X would be normalized to Y, a successful ContactManager contact request using ContactManager::contactsForUris() for URI address X would result in a contact with Y reported as an address that can identify it in Contact::uris().

Parameters:
uriThe URI to normalize.
Returns:
A PendingString which will emit PendingString::finished when the uri has been normalized or an error occurred.
See also:
normalizeVCardAddress()


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00070.html0000644000175200001440000001524712000060453021625 0ustar00collabora-develusers00000000000000 Tp::Callback0< R > Class Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Callback0< R > Class Template Reference

Callback with 0 arguments. More...

#include <TelepathyQt/Callbacks>

Inherits Tp::BaseCallback.

List of all members.

Public Types

Public Member Functions


Detailed Description

template<class R>
class Tp::Callback0< R >

Callback with 0 arguments.

See Callbacks Usage


Member Typedef Documentation

template<class R >
typedef R(* Tp::Callback0< R >::FunctionType)()
template<class R >
typedef R Tp::Callback0< R >::ResultType

Constructor & Destructor Documentation

template<class R >
Tp::Callback0< R >::Callback0 ( ) [inline]
template<class R >
template<class Functor >
Tp::Callback0< R >::Callback0 ( const Functor &  functor) [inline]

Member Function Documentation

template<class R >
ResultType Tp::Callback0< R >::operator() ( ) const [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00980.html0000644000175200001440000000511512000060453021630 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactClientTypes Member List
This is the complete list of members for Tp::ContactClientTypes, including all inherited members.
ContactClientTypes()Tp::ContactClientTypes [inline]
ContactClientTypes(const QMap< uint, QStringList > &a)Tp::ContactClientTypes [inline]
operator=(const QMap< uint, QStringList > &a)Tp::ContactClientTypes [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_0x73.html0000644000175200001440000017034512000060453023610 0ustar00collabora-develusers00000000000000 Class Members
   Home · All Classes · All Namespaces · Modules · Functions · Files
Here is a list of all class members with links to the classes they belong to:

- s -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00310.html0000644000175200001440000001730112000060453021613 0ustar00collabora-develusers00000000000000 Tp::PendingChannelRequest Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingChannelRequest Class Reference

The PendingChannelRequest class represents the parameters of and the reply to an asynchronous ChannelRequest request. More...

#include <TelepathyQt/PendingChannelRequest>

Inherits Tp::PendingOperation.

List of all members.

Signals

Public Member Functions


Detailed Description

The PendingChannelRequest class represents the parameters of and the reply to an asynchronous ChannelRequest request.

Instances of this class cannot be constructed directly; the only way to get one is trough Account.

See Asynchronous Object Model


Constructor & Destructor Documentation


Member Function Documentation

AccountPtr Tp::PendingChannelRequest::account ( ) const

Return the account through which the request was made.

Returns:
A pointer to the Account object.
ChannelRequestPtr Tp::PendingChannelRequest::channelRequest ( ) const
void Tp::PendingChannelRequest::channelRequestCreated ( const Tp::ChannelRequestPtr &  channelRequest) [signal]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00018.html0000644000175200001440000000372012000060453021620 0ustar00collabora-develusers00000000000000 Roster Example
   Home · All Classes · All Namespaces · Modules · Functions · Files
Roster Example


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00379.html0000644000175200001440000006536212000060453021644 0ustar00collabora-develusers00000000000000 Tp::SharedPtr< T > Class Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::SharedPtr< T > Class Template Reference

The SharedPtr class is a pointer to an explicitly shared object. More...

#include <TelepathyQt/SharedPtr>

List of all members.

Public Member Functions

Static Public Member Functions


Detailed Description

template<class T>
class Tp::SharedPtr< T >

The SharedPtr class is a pointer to an explicitly shared object.

Note that from Telepathy-Qt >= 0.9.0, Tp::SharedPtr cannot be constructed from a QWeakPointer as the conversion from a QWeakPointer to a Tp::SharedPtr can't be made thread-safe. Tp::WeakPtr is reintroduced as a weak pointer class safely promoteable to a Tp::SharedPtr.

See Shared Pointer Usage


Constructor & Destructor Documentation

template<class T>
Tp::SharedPtr< T >::SharedPtr ( ) [inline]
template<class T>
Tp::SharedPtr< T >::SharedPtr ( T *  d) [inline, explicit]
template<class T>
template<typename Subclass >
Tp::SharedPtr< T >::SharedPtr ( const SharedPtr< Subclass > &  o) [inline]
template<class T>
Tp::SharedPtr< T >::SharedPtr ( const SharedPtr< T > &  o) [inline]
template<class T>
Tp::SharedPtr< T >::SharedPtr ( const WeakPtr< T > &  o) [inline, explicit]
template<class T>
Tp::SharedPtr< T >::~SharedPtr ( ) [inline]

Member Function Documentation

template<class T>
void Tp::SharedPtr< T >::reset ( ) [inline]
template<class T>
T* Tp::SharedPtr< T >::data ( ) const [inline]
template<class T>
const T* Tp::SharedPtr< T >::constData ( ) const [inline]
template<class T>
T* Tp::SharedPtr< T >::operator-> ( ) [inline]
template<class T>
T* Tp::SharedPtr< T >::operator-> ( ) const [inline]
template<class T>
bool Tp::SharedPtr< T >::isNull ( ) const [inline]
template<class T>
bool Tp::SharedPtr< T >::operator! ( ) const [inline]
template<class T>
Tp::SharedPtr< T >::operator UnspecifiedBoolType ( ) const [inline]
template<class T>
bool Tp::SharedPtr< T >::operator== ( const SharedPtr< T > &  o) const [inline]
template<class T>
bool Tp::SharedPtr< T >::operator!= ( const SharedPtr< T > &  o) const [inline]
template<class T>
bool Tp::SharedPtr< T >::operator== ( const T *  ptr) const [inline]
template<class T>
bool Tp::SharedPtr< T >::operator!= ( const T *  ptr) const [inline]
template<class T>
SharedPtr<T>& Tp::SharedPtr< T >::operator= ( const SharedPtr< T > &  o) [inline]
template<class T>
void Tp::SharedPtr< T >::swap ( SharedPtr< T > &  o) [inline]
template<class T>
template<class X >
static SharedPtr<T> Tp::SharedPtr< T >::staticCast ( const SharedPtr< X > &  src) [inline, static]
template<class T>
template<class X >
static SharedPtr< T > Tp::SharedPtr< T >::dynamicCast ( const SharedPtr< X > &  src) [inline, static]

Casts the pointer given by src to a pointer pointing to an object of type T. The cast will succeed if the C++ runtime type identification mechanism considers the type T to be the actual runtime type of the object pointed to by src or one of its (possibly indirect) parent classes. Otherwise, a null pointer is returned.

Note that this also allows down-casting a baseclass pointer to a subclass pointer.

This cast method should not be used for QObject-derived classes, as Qt provides a more portable and efficient type identification mechanism, which is used by qObjectCast().

This cast method requires the C++ dynamic runtime type identification facility to be enabled (which might be disabled by eg. the -fno-rtti flag of the GNU G++ compiler).

template<class T>
template<class X >
static SharedPtr<T> Tp::SharedPtr< T >::constCast ( const SharedPtr< X > &  src) [inline, static]
template<class T>
template<class X >
static SharedPtr< T > Tp::SharedPtr< T >::qObjectCast ( const SharedPtr< X > &  src) [inline, static]

Casts the pointer given by src to a pointer pointing to an object of type T. The cast will succeed if the Qt runtime type identification mechanism considers the type T to be the actual runtime type of the object pointed to by src or one of its (possibly indirect) parent classes. Otherwise, a null pointer is returned.

Note that this also allows down-casting a baseclass pointer to a subclass pointer.

This cast method MUST not be used for classes not derived from QObject. However, dynamicCast() provides the same semantics for all classes, provided the C++ runtime type identification facility is enabled. This method, on the other hand, doesn't require the standard C++ facility and is probably also faster for the types it can be used with.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00313.html0000644000175200001440000003144212000060453021620 0ustar00collabora-develusers00000000000000 Tp::PendingContactAttributes Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingContactAttributes Class Reference

The PendingContactAttributes class represents the parameters of and the reply to an asynchronous request for raw contact attributes, as used in the ConnectionLowlevel::contactAttributes() low-level convenience method wrapping the Client::ConnectionInterfaceContactsInterface::GetContactAttributes() D-Bus method. More...

#include <TelepathyQt/PendingContactAttributes>

Inherits Tp::PendingOperation.

List of all members.

Public Member Functions


Detailed Description

The PendingContactAttributes class represents the parameters of and the reply to an asynchronous request for raw contact attributes, as used in the ConnectionLowlevel::contactAttributes() low-level convenience method wrapping the Client::ConnectionInterfaceContactsInterface::GetContactAttributes() D-Bus method.

See Asynchronous Object Model


Constructor & Destructor Documentation


Member Function Documentation

Return the connection through which the request was made.

Returns:
A pointer to the Connection object.

Return the contacts for which attributes were requested.

Returns:
Reference to a list with the handles of the contacts.

Return the interfaces the corresponding attributes of which were requested.

Returns:
Reference to a list of D-Bus interface names.

Return whether it was requested that the contact handles should be referenced in addition to fetching their attributes. This corresponds to the reference argument to Connection::contactAttributes().

Returns:
Whether the handles should be referenced or not.

If referencing the handles was requested (as indicated by shouldReference()), returns the now-referenced handles resulting from the operation. If the operation has not (yet) finished successfully (isFinished() returns false), or referencing was not requested, the return value is undefined.

Even if referencing was requested, the list will not always contain all of the handles in contactsRequested(), only the ones which were valid. The valid handles will be in the same order as in contactsRequested(), though.

Returns:
ReferencedHandles instance containing the handles.

Return the handles which were found to be invalid while processing the operation. If the operation has not (yet) finished successfully (isFinished() returns false), the return value is undefined.

Returns:
A list with the invalid handles.

Return a dictionary mapping the valid contact handles in contactsRequested() (when also referencing, this means the contents of validHandles()) to contact attributes. If the operation has not (yet) finished successfully (isFinished() returns false), the return value is undefined.

Returns:
Mapping from handles to variant maps containing the attributes.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00528_source.html0000644000175200001440000001622212000060453023207 0ustar00collabora-develusers00000000000000 connection-factory.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
connection-factory.h
00001 
00023 #ifndef _TelepathyQt_connection_factory_h_HEADER_GUARD_
00024 #define _TelepathyQt_connection_factory_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Global>
00031 #include <TelepathyQt/SharedPtr>
00032 #include <TelepathyQt/Types>
00033 
00034 #include <TelepathyQt/Feature>
00035 #include <TelepathyQt/FixedFeatureFactory>
00036 
00037 // For Q_DISABLE_COPY
00038 #include <QtGlobal>
00039 
00040 #include <QString>
00041 
00042 class QDBusConnection;
00043 
00044 namespace Tp
00045 {
00046 
00047 class PendingReady;
00048 
00049 class TP_QT_EXPORT ConnectionFactory : public FixedFeatureFactory
00050 {
00051 public:
00052     static ConnectionFactoryPtr create(const QDBusConnection &bus,
00053             const Features &features = Features());
00054 
00055     virtual ~ConnectionFactory();
00056 
00057     PendingReady *proxy(const QString &busName, const QString &objectPath,
00058             const ChannelFactoryConstPtr &chanFactory,
00059             const ContactFactoryConstPtr &contactFactory) const;
00060 
00061 protected:
00062     ConnectionFactory(const QDBusConnection &bus, const Features &features);
00063 
00064     virtual ConnectionPtr construct(const QString &busName, const QString &objectPath,
00065             const ChannelFactoryConstPtr &chanFactory,
00066             const ContactFactoryConstPtr &contactFactory) const;
00067     virtual QString finalBusNameFrom(const QString &uniqueOrWellKnown) const;
00068     // Nothing we'd like to prepare()
00069     // Fixed features
00070 
00071 private:
00072     struct Private;
00073     Private *mPriv; // Currently unused, just for future-proofing
00074 };
00075 
00076 } // Tp
00077 
00078 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00030.html0000644000175200001440000001646512000060453021624 0ustar00collabora-develusers00000000000000 Tp::AbstractAdaptor Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AbstractAdaptor Class Reference

Base class for all the low-level service-side adaptors. More...

#include <TelepathyQt/AbstractAdaptor>

List of all members.

Public Member Functions


Detailed Description

Base class for all the low-level service-side adaptors.

This class serves as the parent for all the generated low-level service-side adaptors. Adaptors provide the interface of an object on the bus.

The implementation of this interface should be provided in a special object called the adaptee. The adaptee is meant to provide properties, signals and slots that are connected automatically with the adaptor using Qt's meta-object system.


Constructor & Destructor Documentation

Tp::AbstractAdaptor::AbstractAdaptor ( const QDBusConnection &  dbusConnection,
QObject *  adaptee,
QObject *  parent 
)

Construct a new AbstractAdaptor that operates on the given dbusConnection and redirects calls to the given adaptee.

Parameters:
dbusConnectionThe D-Bus connection to use.
adapteeThe class the provides the implementation of the calls.
parentThe QObject parent of this adaptor.

Member Function Documentation

QDBusConnection Tp::AbstractAdaptor::dbusConnection ( ) const

Return the D-Bus connection associated with this adaptor.

Returns:
The D-Bus connection associated with this adaptor.
QObject * Tp::AbstractAdaptor::adaptee ( ) const

Return the adaptee object, i.e. the object that provides the implementation of this adaptor.

Returns:
The adaptee object.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00048.html0000644000175200001440000007167412000060453021640 0ustar00collabora-develusers00000000000000 Tp::Client::AccountManagerInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

#include <TelepathyQt/AccountManager>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

  • QDBusPendingReply
    < QDBusObjectPath > CreateAccount (const QString &connectionManager, const QString &protocol, const QString &displayName, const QVariantMap &parameters, const QVariantMap &properties, int timeout=-1)

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.AccountManager".


Constructor & Destructor Documentation

Tp::Client::AccountManagerInterface::AccountManagerInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a AccountManagerInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::AccountManagerInterface::AccountManagerInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a AccountManagerInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a AccountManagerInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Member Function Documentation

static QLatin1String Tp::Client::AccountManagerInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.AccountManager", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property Interfaces of type QStringList.

A list of the interfaces provided by the account manager object.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property ValidAccounts of type Tp::ObjectPathList.

A list of the valid (complete, usable) Accounts. Change notification is via AccountValidityChanged. This split between valid and invalid accounts makes it easy to ignore the invalid ones. The only things that should be manipulating invalid accounts are account-editing UIs, which might be able to rescue them.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property InvalidAccounts of type Tp::ObjectPathList.

A list of incomplete or otherwise unusable Accounts. Change notification is via AccountValidityChanged.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property SupportedAccountProperties of type QStringList.

A list of the fully qualified names of properties that can be set via the Properties argument to CreateAccount() when an account is created.

This property MUST NOT include include the AccountInterface::DisplayName and AccountInterface::Parameters properties, which are set using separate arguments.

This property MAY include the names of properties that, after account creation, will be read-only: this indicates that the property can be set at account creation but not changed later.

For example, an account manager might support migration tools that use this to preserve the AccountInterface::HasBeenOnline property, even though that property is usually read-only.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply<QDBusObjectPath> Tp::Client::AccountManagerInterface::CreateAccount ( const QString &  connectionManager,
const QString &  protocol,
const QString &  displayName,
const QVariantMap &  parameters,
const QVariantMap &  properties,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method CreateAccount on the remote object.

Request the creation of a new Account. The account manager SHOULD NOT allow invalid accounts to be created.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
connectionManagerThe name of the connection manager, e.g. "salut".
protocolThe protocol, e.g. "local-xmpp".
displayNameThe initial value of the new account's DisplayName property. The account manager SHOULD modify this to make it unique if an Account already exists with the same display name, for instance by appending a number or the 'account' parameter. Account manager implementations SHOULD accept an empty string, but account editing user interfaces should avoid passing an empty string for this parameter. The account creation UI may ask the user for a name for the new account. If the author of the UI chooses not to do this, the account creation UI is better able to suggest a default display name because it has protocol-specific knowledge which the account manager does not. The account manager always knows the complete list of accounts so it can easily tell whether it should append something to the display name to avoid presenting two identically-named accounts to the user.
parametersInitial parameter values, as would be passed to RequestConnection.
properties

The values of any other properties to be set immediately on the new Account.

Only the properties mentioned in SupportedAccountProperties are acceptable here. In particular, the AccountInterface::DisplayName and AccountInterface::Parameters properties are never allowed here, since they are set using the other arguments to this method.

Account manager implementations SHOULD support creating accounts with an empty value for this argument.

timeoutThe timeout in milliseconds.
Returns:

The new Account.

void Tp::Client::AccountManagerInterface::AccountRemoved ( const QDBusObjectPath &  account) [signal]

Represents the signal AccountRemoved on the remote object.

The given account has been removed. This is effectively change notification for the valid and invalid accounts lists. On emission of this signal, the Account indicated will no longer be present in either of the lists.

Parameters:
accountAn Account, which must not be used any more.
void Tp::Client::AccountManagerInterface::AccountValidityChanged ( const QDBusObjectPath &  account,
bool  valid 
) [signal]

Represents the signal AccountValidityChanged on the remote object.

The validity of the given account has changed. New accounts are also indicated by this signal, as an account validity change (usually to True) on an account that did not previously exist. This is effectively change notification for the valid and invalid accounts lists.

Parameters:
accountAn Account.
validTrue if the account is now valid.
void Tp::Client::AccountManagerInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00232.html0000644000175200001440000002144112000060453021616 0ustar00collabora-develusers00000000000000 Tp::Filter< T > Class Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Filter< T > Class Template Reference

The Filter class provides a base class to be used by specialized filters such as GenericCapabilityFilter, GenericPropertyFilter, etc. More...

#include <TelepathyQt/Filter>

Inherits Tp::RefCounted.

Inherited by Tp::AndFilter< T >, Tp::GenericCapabilityFilter< T >, Tp::GenericPropertyFilter< T >, Tp::NotFilter< T >, and Tp::OrFilter< T >.

List of all members.

Public Member Functions

Protected Member Functions


Detailed Description

template<class T>
class Tp::Filter< T >

The Filter class provides a base class to be used by specialized filters such as GenericCapabilityFilter, GenericPropertyFilter, etc.


Constructor & Destructor Documentation

template<class T>
virtual Tp::Filter< T >::~Filter ( ) [inline, virtual]
template<class T>
Tp::Filter< T >::Filter ( ) [inline, protected]

Member Function Documentation

template<class T>
virtual bool Tp::Filter< T >::matches ( const SharedPtr< T > &  t) const [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00888.html0000644000175200001440000000612512000060453021641 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Object Member List
This is the complete list of members for Tp::Object, including all inherited members.
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
propertyChanged(const QString &propertyName)Tp::Object [signal]
RefCounted()Tp::RefCounted [inline]
~Object()Tp::Object [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00355.html0000644000175200001440000002047612000060453021633 0ustar00collabora-develusers00000000000000 Tp::PtrFunctor5< R, Arg1, Arg2, Arg3, Arg4, Arg5 > Struct Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PtrFunctor5< R, Arg1, Arg2, Arg3, Arg4, Arg5 > Struct Template Reference

#include </home/collabora-devel/kde/src/telepathy-qt4/TelepathyQt/functors.h>

Inherits Tp::BaseFunctor.

List of all members.

Public Types

Public Member Functions

Public Attributes

template<class R, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5>
struct Tp::PtrFunctor5< R, Arg1, Arg2, Arg3, Arg4, Arg5 >


Member Typedef Documentation

template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 >
typedef R(* Tp::PtrFunctor5< R, Arg1, Arg2, Arg3, Arg4, Arg5 >::FunctionType)(Arg1, Arg2, Arg3, Arg4, Arg5)
template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 >
typedef R Tp::PtrFunctor5< R, Arg1, Arg2, Arg3, Arg4, Arg5 >::ResultType

Constructor & Destructor Documentation

template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 >
Tp::PtrFunctor5< R, Arg1, Arg2, Arg3, Arg4, Arg5 >::PtrFunctor5 ( FunctionType  fn) [inline]

Member Function Documentation

template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 >
ResultType Tp::PtrFunctor5< R, Arg1, Arg2, Arg3, Arg4, Arg5 >::operator() ( Arg1  a1,
Arg2  a2,
Arg3  a3,
Arg4  a4,
Arg5  a5 
) const [inline]

Member Data Documentation

template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 >
FunctionType Tp::PtrFunctor5< R, Arg1, Arg2, Arg3, Arg4, Arg5 >::fn


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00488_source.html0000644000175200001440000005071012000060453023214 0ustar00collabora-develusers00000000000000 cli-call-content-media-description-body.hpp Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-call-content-media-description-body.hpp
00001 #define IN_TP_QT_HEADER
00002 #include "TelepathyQt/call-content-media-description.h"
00003 
00004 namespace Tp
00005 {
00006 namespace Client
00007 {
00008 
00009 CallContentMediaDescriptionInterface::CallContentMediaDescriptionInterface(const QString& busName, const QString& objectPath, QObject *parent)
00010     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00011 {
00012 }
00013 
00014 CallContentMediaDescriptionInterface::CallContentMediaDescriptionInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00015     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00016 {
00017 }
00018 
00019 CallContentMediaDescriptionInterface::CallContentMediaDescriptionInterface(Tp::DBusProxy *proxy)
00020     : Tp::AbstractInterface(proxy, staticInterfaceName())
00021 {
00022 }
00023 
00024 void CallContentMediaDescriptionInterface::invalidate(Tp::DBusProxy *proxy,
00025         const QString &error, const QString &message)
00026 {
00027 
00028     Tp::AbstractInterface::invalidate(proxy, error, message);
00029 }
00030 
00031 CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface::CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface(const QString& busName, const QString& objectPath, QObject *parent)
00032     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00033 {
00034 }
00035 
00036 CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface::CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00037     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00038 {
00039 }
00040 
00041 CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface::CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface(Tp::DBusProxy *proxy)
00042     : Tp::AbstractInterface(proxy, staticInterfaceName())
00043 {
00044 }
00045 
00046 CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface::CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface(const Tp::Client::CallContentMediaDescriptionInterface& mainInterface)
00047     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00048 {
00049 }
00050 
00051 CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface::CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface(const Tp::Client::CallContentMediaDescriptionInterface& mainInterface, QObject *parent)
00052     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00053 {
00054 }
00055 
00056 void CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface::invalidate(Tp::DBusProxy *proxy,
00057         const QString &error, const QString &message)
00058 {
00059 
00060     Tp::AbstractInterface::invalidate(proxy, error, message);
00061 }
00062 
00063 CallContentMediaDescriptionInterfaceRTCPFeedbackInterface::CallContentMediaDescriptionInterfaceRTCPFeedbackInterface(const QString& busName, const QString& objectPath, QObject *parent)
00064     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00065 {
00066 }
00067 
00068 CallContentMediaDescriptionInterfaceRTCPFeedbackInterface::CallContentMediaDescriptionInterfaceRTCPFeedbackInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00069     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00070 {
00071 }
00072 
00073 CallContentMediaDescriptionInterfaceRTCPFeedbackInterface::CallContentMediaDescriptionInterfaceRTCPFeedbackInterface(Tp::DBusProxy *proxy)
00074     : Tp::AbstractInterface(proxy, staticInterfaceName())
00075 {
00076 }
00077 
00078 CallContentMediaDescriptionInterfaceRTCPFeedbackInterface::CallContentMediaDescriptionInterfaceRTCPFeedbackInterface(const Tp::Client::CallContentMediaDescriptionInterface& mainInterface)
00079     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00080 {
00081 }
00082 
00083 CallContentMediaDescriptionInterfaceRTCPFeedbackInterface::CallContentMediaDescriptionInterfaceRTCPFeedbackInterface(const Tp::Client::CallContentMediaDescriptionInterface& mainInterface, QObject *parent)
00084     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00085 {
00086 }
00087 
00088 void CallContentMediaDescriptionInterfaceRTCPFeedbackInterface::invalidate(Tp::DBusProxy *proxy,
00089         const QString &error, const QString &message)
00090 {
00091 
00092     Tp::AbstractInterface::invalidate(proxy, error, message);
00093 }
00094 
00095 CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface::CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface(const QString& busName, const QString& objectPath, QObject *parent)
00096     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00097 {
00098 }
00099 
00100 CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface::CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00101     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00102 {
00103 }
00104 
00105 CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface::CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface(Tp::DBusProxy *proxy)
00106     : Tp::AbstractInterface(proxy, staticInterfaceName())
00107 {
00108 }
00109 
00110 CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface::CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface(const Tp::Client::CallContentMediaDescriptionInterface& mainInterface)
00111     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00112 {
00113 }
00114 
00115 CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface::CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface(const Tp::Client::CallContentMediaDescriptionInterface& mainInterface, QObject *parent)
00116     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00117 {
00118 }
00119 
00120 void CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface::invalidate(Tp::DBusProxy *proxy,
00121         const QString &error, const QString &message)
00122 {
00123 
00124     Tp::AbstractInterface::invalidate(proxy, error, message);
00125 }
00126 }
00127 }


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00864.html0000644000175200001440000000604112000060453021630 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PtrFunctor3< R, Arg1, Arg2, Arg3 > Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00284.html0000644000175200001440000004041012000060453021622 0ustar00collabora-develusers00000000000000 Tp::MessagePart Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MessagePart Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<QString, QDBusVariant>, but needed to have a discrete type in the Qt type system.

Part of a message's content. In practice, this mapping never appears in isolation: incoming messages are represented by a list of Message_Part mappings in the MessageReceived() signal, and outgoing messages are passed to SendMessage() as a list of these mappings.

The first part of the message contains "headers", which refer to the entire message. The second and subsequent parts contain the message's content, including plain text, formatted text and/or attached files. Well-known keys for the header and body parts are defined by the Message_Header_Key and Message_Body_Key types, respectively. It is an error for a connection manager to put keys referring to the message as a whole in the second or subsequent Message_Part, or keys intended for body parts in the first Message_Part; clients MUST recover from this error by ignoring these mis-placed keys.

Instead of representing messages as aa{sv} where the first dictionary is special (a dictionary of headers), we could have used a signature like (a{sv}aa{sv}) to separate out the headers and the body parts.

However, this would make access to the messages more awkward. In Python, the syntax for access to a header field would remain message[0]['message-type'], but access to a body field in the second body part would change from message[2]['content'] to message[1][1]['content']. In GLib, the message would change from being a GPtrArray(GHashTable) to being a GValueArray(GHashTable, GPtrArray(GHashTable)) which is rather inconvenient to dereference.

In any group of parts with the same non-empty value for the alternative key (which represent alternative versions of the same content), more faithful versions of the intended message MUST come before less faithful versions (note that this order is the opposite of MIME multipart/alternative parts). Clients SHOULD display the first alternative that they understand.

Specifying the preference order means that if the underlying protocol doesn't support alternatives, the CM can safely delete everything apart from the first supported alternative when sending messages.

The order is the reverse of MIME because MIME's rationale for placing the "plainest" part first (legibility in pre-MIME UAs) does not apply to us, and placing the most preferred part first simplifies display (a client can iterate the message in order, display the first alternative that it understands, and skip displaying all subsequent parts with the same "alternative" key).

Clients SHOULD present all parts that are not redundant alternatives in the order they appear in this array, possibly excluding parts that are referenced by another displayed part. It is implementation-specific how the parts are presented to the user.

This allows CMs to assume that all parts are actually shown to the user, even if they are not explicitly referenced - we do not yet recommend formatted text, and there is no way for plain text to reference an attachment since it has no concept of markup or references. This also forces clients to do something sensible with messages that consist entirely of "attachments", with no "body" at all.

For instance, when displaying the above example, a client that understands the HTML part should display the JPEG image once, between the two lines "Here is a photo of my cat:" and "Isn't it cute?"; it may additionally present the image in some way for a second time, after "Isn't it cute?", or may choose not to.

A client that does not understand HTML, displaying the same message, should display the plain-text part, followed by the JPEG image.

Connection managers, clients and extensions to this specification SHOULD NOT include Handles as values in a Message_Part, except for message-sender in the header.

Reference-counting handles in clients becomes problematic if the channel proxy cannot know whether particular map values are handles or not.

Example messages

A rich-text message, with an embedded image, might be represented as:

 [
   {
     'message-token': '9de9546a-3400-4419-a505-3ea270cb834c',
     'message-sender': 42,
     'message-sent': 1210067943,
     'message-received': 1210067947,
     'message-type': 0,              # = Channel_Text_Message_Type_Normal
     'pending-message-id': 437,
   },
   { 'alternative': 'main',
     'content-type': 'text/html',
     'content': 'Here is a photo of my cat:<br />' +
                '<img src="cid:catphoto" alt="lol!" />' +
                '<br />Isn't it cute?',
   },
   { 'alternative': 'main',
     'content-type': 'text/plain',
     'content': 'Here is a photo of my cat:\\n[IMG: lol!]\\nIsn't it cute?',
   },
   { 'identifier': 'catphoto',
     'content-type': 'image/jpeg',
     'size': 101000,
     'needs-retrieval': True,
   },
 ]

telepathy-ring, Nokia's GSM connection manager, represents vCards sent via SMS as:

 [
   {
     'message-token': '9de9546a-3400-4419-a505-3ea270cb834c',
     'message-sender': 42,
     'message-sent': 1210067943,
     'message-received': 1210067947,
     'message-type': 0,              # = Channel_Text_Message_Type_Normal
     'pending-message-id': 437,
   },
   { 'content-type': 'text/x-vcard',
     'content': [ 0x66, 0x69, 0x71, ...], # vCard data as an array of bytes
   },
 ]

Delivery reports

Delivery reports are also represented as messages with the message-type header mapping to Channel_Text_Message_Type Delivery_Report. Delivery reports SHOULD contain the message-sender header, mapping to the intended recipient of the original message, if possible; other headers specific to delivery reports are defined by the Delivery_Report_Header_Key type. The second and subsequent parts, if present, are a human-readable report from the IM service.

For backwards- and forwards-compatibility, whenever a delivery error report is signalled—that is, with delivery-status mapping to Delivery_Status Temporarily_Failed or Permanently_Failed— ChannelTypeTextInterface::SendError() SHOULD also be emitted; whenever ChannelTypeTextInterface::SendError() is emitted, a delivery report MUST also be signalled. Delivery report messages on this interface MUST be represented in emissions of ChannelTypeTextInterface::Received() as messages with the Non_Text_Content Channel_Text_Message_Flags; clients which understand this interface SHOULD ignore the SendError signal in favour of listening for delivery reports, as mentioned in the introduction.

The result of attempting to send delivery reports using SendMessage() is currently undefined.

Example delivery reports

A minimal delivery report indicating permanent failure of the sent message whose token was b9a991bd-8845-4d7f-a704-215186f43bb4 for an unknown reason
 [{
 # header
 'message-sender': 123,
 'message-type': Channel_Text_Message_Type_Delivery_Report,
 'delivery-status': Delivery_Status_Permanently_Failed,
 'delivery-token': 'b9a991bd-8845-4d7f-a704-215186f43bb4',
 }
 # no body
 ]
A delivery report where the failed message is echoed back to the sender rather than being referenced by ID, and the failure reason is that this protocol cannot send messages to offline contacts such as the contact with handle 123
 [{ # header
 'message-sender': 123,
 'message-type': Channel_Text_Message_Type_Delivery_Report,
 'delivery-status': Delivery_Status_Temporarily_Failed,
 'delivery-error': Channel_Text_Send_Error_Offline,
 'delivery-echo':
     [{ # header of original message
     'message-sender': 1,
     'message-sent': 1210067943,
     },
     { # body of original message
     'content-type': 'text/plain',
     'content': 'Hello, world!',
     }]
   ],
 
 # no body
 ]
A maximally complex delivery report: the server reports a bilingual human-readable failure message because the user sent a message "Hello, world!" with token b9a991bd-8845-4d7f-a704-215186f43bb4 to a contact with handle 123, but that handle represents a contact who does not actually exist
 [{ # header
 'message-sender': 123,
 'message-type': Channel_Text_Message_Type_Delivery_Report,
 'delivery-status': Delivery_Status_Permanently_Failed,
 'delivery-error': Channel_Text_Send_Error_Invalid_Contact,
 'delivery-token': 'b9a991bd-8845-4d7f-a704-215186f43bb4',
 'delivery-echo':
     [{ # header of original message
     'message-sender': 1,
     'message-sent': 1210067943,
     },
     { # body of original message
     'content-type': 'text/plain',
     'content': 'Hello, world!',
     }]
   ],
 },
 { # message from server (alternative in English)
 'alternative': '404',
 'content-type': 'text/plain',
 'lang': 'en',
 'content': 'I have no contact with that name',
 },
 { # message from server (alternative in German)
 'alternative': '404'.
 'content-type': 'text/plain',
 'lang': 'de',
 'content', 'Ich habe keinen Kontakt mit diesem Namen',
 }
 ]
A minimal delivery report indicating successful delivery of the sent message whose token was b9a991bd-8845-4d7f-a704-215186f43bb4
 [{
 # header
 'message-sender': 123,
 'message-type': Channel_Text_Message_Type_Delivery_Report,
 'delivery-status': Delivery_Status_Delivered,
 'delivery-token': 'b9a991bd-8845-4d7f-a704-215186f43bb4',
 }
 # no body
 ]

Constructor & Destructor Documentation

Tp::MessagePart::MessagePart ( const QMap< QString, QDBusVariant > &  a) [inline]

Member Function Documentation

MessagePart& Tp::MessagePart::operator= ( const QMap< QString, QDBusVariant > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00746.html0000644000175200001440000000604612000060453021634 0ustar00collabora-develusers00000000000000 Service-side implementation
   Home · All Classes · All Namespaces · Modules · Functions · Files
Service-side implementation

Classes

Modules


Detailed Description

Classes to implement service D-Bus objects.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00364.html0000644000175200001440000002571312000060453021632 0ustar00collabora-develusers00000000000000 Tp::StreamTubeServer::RemoteContact Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::StreamTubeServer::RemoteContact Class Reference

The StreamTubeServer::RemoteContact class represents a contact from which a socket connection to our exported socket originates. More...

#include <TelepathyQt/StreamTubeServer>

List of all members.

Public Member Functions


Detailed Description

The StreamTubeServer::RemoteContact class represents a contact from which a socket connection to our exported socket originates.


Constructor & Destructor Documentation

Constructs a new invalid RemoteContact instance.

Tp::StreamTubeServer::RemoteContact::RemoteContact ( const AccountPtr &  account,
const ContactPtr &  contact 
)

Constructs a new RemoteContact for the given contact object from the given account.

Parameters:
accountA pointer to the account which this contact can be reached through.
contactA pointer to the contact object.

Member Function Documentation

Return whether or not the contact is valid or is just the null object created using the default constructor.

Returns:
true if valid, false otherwise.
StreamTubeServer::RemoteContact & Tp::StreamTubeServer::RemoteContact::operator= ( const RemoteContact other)

Assignment operator.

AccountPtr Tp::StreamTubeServer::RemoteContact::account ( ) const [inline]

Return the account through which the contact can be reached.

Returns:
A pointer to the account object.
ContactPtr Tp::StreamTubeServer::RemoteContact::contact ( ) const [inline]

Return the actual contact object.

Returns:
A pointer to the object.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00066.html0000644000175200001440000005675112000060453021637 0ustar00collabora-develusers00000000000000 Tp::BaseProtocolAddressingInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

Base class for implementations of Protocol.Interface.Addressing. More...

#include <TelepathyQt/BaseProtocolAddressingInterface>

Inherits Tp::AbstractProtocolInterface.

List of all members.

Public Types

Public Member Functions

Static Public Member Functions

  • static
    BaseProtocolAddressingInterfacePtr create ()
  • template<typename BaseProtocolAddressingInterfaceSubclass > static SharedPtr
    < BaseProtocolAddressingInterfaceSubclass > create ()

Protected Member Functions


Detailed Description

Base class for implementations of Protocol.Interface.Addressing.


Member Typedef Documentation

typedef Callback3<QString, const QString &, const QString &, DBusError*> Tp::BaseProtocolAddressingInterface::NormalizeVCardAddressCallback

Constructor & Destructor Documentation


Member Function Documentation

static BaseProtocolAddressingInterfacePtr Tp::BaseProtocolAddressingInterface::create ( ) [inline, static]
template<typename BaseProtocolAddressingInterfaceSubclass >
static SharedPtr<BaseProtocolAddressingInterfaceSubclass> Tp::BaseProtocolAddressingInterface::create ( ) [inline, static]

Return the immutable properties of this interface.

Immutable properties cannot change after the interface has been registered on a service on the bus with registerInterface().

Returns:
The immutable properties of this interface.

Implements Tp::AbstractDBusServiceInterface.

Return the list of addressable vcard fields that have been set with setAddressableVCardFields().

This list is exposed as the AddressableVCardFields property of this interface on the bus and represents the vcard fields that can be used to request a contact for this protocol, normalized to lower case.

Returns:
The list of addressable vcard fields that have been set with setAddressableVCardFields().
See also:
setAddressableVCardFields()
void Tp::BaseProtocolAddressingInterface::setAddressableVCardFields ( const QStringList &  vcardFields)

Set the list of vcard fields that can be used to request a contact for this protocol.

All the field names should be normalized to lower case.

Parameters:
vcardFieldsThe list of vcard fields to set.
See also:
addressableVCardFields()

Return the list of URI schemes that have been set with setAddressableUriSchemes().

This list is exposed as the AddressableURISchemes property of this interface on the bus and represents the URI schemes that are supported by this protocol, like "tel" or "sip".

Returns:
The list of addressable URI schemes that have been set with setAddressableUriSchemes().
See also:
setAddressableUriSchemes()
void Tp::BaseProtocolAddressingInterface::setAddressableUriSchemes ( const QStringList &  uriSchemes)

Set the list of URI schemes that are supported by this protocol.

Parameters:
uriSchemesThe list of URI schemes to set.
See also:
addressableUriSchemes()

Set a callback that will be called from a client to normalize a given vcard address.

This callback will be called when the NormalizeVCardAddress method on the Protocol.Interface.Addressing D-Bus interface has been called.

Parameters:
cbThe callback to set.
See also:
normalizeVCardAddress()
QString Tp::BaseProtocolAddressingInterface::normalizeVCardAddress ( const QString &  vcardField,
const QString &  vcardAddress,
DBusError error 
)

Return a normalized version of the given vcardAddress, which corresponds to the given vcardField, by calling the callback that has been set with setNormalizeVCardAddressCallback().

Parameters:
vcardFieldThe vcard field of the address we are normalizing.
vcardAddressThe address to normalize, which is assumed to belong to a contact.
errorA pointer to a DBusError instance where any possible error will be stored.
Returns:
A normalized version of the given vcardAddress, or an empty string if no callback to do the normalization has been set with setNormalizeVCardAddressCallback().
See also:
setNormalizeVCardAddressCallback()

Set a callback that will be called from a client to normalize a given contact URI.

This callback will be called when the NormalizeContactURI method on the Protocol.Interface.Addressing D-Bus interface has been called.

Parameters:
cbThe callback to set.
See also:
normalizeContactUri()
QString Tp::BaseProtocolAddressingInterface::normalizeContactUri ( const QString &  uri,
DBusError error 
)

Return a normalized version of the given contact URI, uri, by calling the callback that has been set with setNormalizeContactUriCallback().

Parameters:
uriThe contact URI to normalize.
errorA pointer to a DBusError instance where any possible error will be stored.
Returns:
A normalized version of the given uri, or an empty string if no callback to do the normalization has been set with setNormalizeContactUriCallback().
See also:
setNormalizeContactUriCallback()


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00449_source.html0000644000175200001440000004447012000060453023217 0ustar00collabora-develusers00000000000000 call-channel.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
call-channel.h
00001 
00022 #ifndef _TelepathyQt_call_channel_h_HEADER_GUARD_
00023 #define _TelepathyQt_call_channel_h_HEADER_GUARD_
00024 
00025 #ifndef IN_TP_QT_HEADER
00026 #error IN_TP_QT_HEADER
00027 #endif
00028 
00029 #include <TelepathyQt/Channel>
00030 #include <TelepathyQt/CallContent>
00031 
00032 namespace Tp
00033 {
00034 
00035 class TP_QT_EXPORT CallChannel : public Channel
00036 {
00037     Q_OBJECT
00038     Q_DISABLE_COPY(CallChannel)
00039 
00040 public:
00041     static const Feature FeatureCore;
00042     static const Feature FeatureCallState;
00043     static const Feature FeatureCallMembers;
00044     static const Feature FeatureContents;
00045     static const Feature FeatureLocalHoldState;
00046 
00047     static CallChannelPtr create(const ConnectionPtr &connection,
00048             const QString &objectPath, const QVariantMap &immutableProperties);
00049 
00050     virtual ~CallChannel();
00051 
00052     bool handlerStreamingRequired() const;
00053     StreamTransportType initialTransportType() const;
00054     bool hasInitialAudio() const;
00055     bool hasInitialVideo() const;
00056     QString initialAudioName() const;
00057     QString initialVideoName() const;
00058     bool hasMutableContents() const;
00059 
00060     PendingOperation *setRinging();
00061     PendingOperation *setQueued();
00062     PendingOperation *accept();
00063     PendingOperation *hangup(CallStateChangeReason reason = CallStateChangeReasonUserRequested,
00064             const QString &detailedReason = QString(), const QString &message = QString());
00065 
00066     // FeatureCallState
00067     CallState callState() const;
00068     CallFlags callFlags() const;
00069     CallStateReason callStateReason() const;
00070     QVariantMap callStateDetails() const;
00071 
00072     // FeatureCallMembers
00073     Contacts remoteMembers() const;
00074     CallMemberFlags remoteMemberFlags(const ContactPtr &member) const;
00075 
00076     // FeatureContents
00077     CallContents contents() const;
00078     CallContents contentsForType(MediaStreamType type) const;
00079     CallContentPtr contentByName(const QString &contentName) const;
00080     PendingCallContent *requestContent(const QString &name,
00081             MediaStreamType type, MediaStreamDirection direction);
00082 
00083     // FeatureLocalHoldState
00084     LocalHoldState localHoldState() const;
00085     LocalHoldStateReason localHoldStateReason() const;
00086     PendingOperation *requestHold(bool hold);
00087 
00088 Q_SIGNALS:
00089     // FeatureCallState
00090     void callStateChanged(Tp::CallState state);
00091     void callFlagsChanged(Tp::CallFlags flags);
00092 
00093     // FeatureCallMembers
00094     void remoteMemberFlagsChanged(
00095             const QHash<Tp::ContactPtr, Tp::CallMemberFlags> &remoteMemberFlags,
00096             const Tp::CallStateReason &reason);
00097     void remoteMembersRemoved(const Tp::Contacts &remoteMembers,
00098             const Tp::CallStateReason &reason);
00099 
00100     // FeatureContents
00101     void contentAdded(const Tp::CallContentPtr &content);
00102     void contentRemoved(const Tp::CallContentPtr &content, const Tp::CallStateReason &reason);
00103 
00104     // FeatureLocalHoldState
00105     void localHoldStateChanged(Tp::LocalHoldState state, Tp::LocalHoldStateReason reason);
00106 
00107 protected:
00108     CallChannel(const ConnectionPtr &connection,
00109             const QString &objectPath, const QVariantMap &immutableProperties,
00110             const Feature &coreFeature = CallChannel::FeatureCore);
00111 
00112 private Q_SLOTS:
00113     TP_QT_NO_EXPORT void gotMainProperties(Tp::PendingOperation *op);
00114 
00115     TP_QT_NO_EXPORT void gotCallState(Tp::PendingOperation *op);
00116     TP_QT_NO_EXPORT void onCallStateChanged(uint state, uint flags,
00117             const Tp::CallStateReason &stateReason, const QVariantMap &stateDetails);
00118 
00119     TP_QT_NO_EXPORT void gotCallMembers(Tp::PendingOperation *op);
00120     TP_QT_NO_EXPORT void gotCallMembersContacts(Tp::PendingOperation *op);
00121     TP_QT_NO_EXPORT void onCallMembersChanged(const Tp::CallMemberMap &updates,
00122             const Tp::HandleIdentifierMap &identifiers,
00123             const Tp::UIntList &removed,
00124             const Tp::CallStateReason &reason);
00125 
00126     TP_QT_NO_EXPORT void gotContents(Tp::PendingOperation *op);
00127     TP_QT_NO_EXPORT void onContentAdded(const QDBusObjectPath &contentPath);
00128     TP_QT_NO_EXPORT void onContentRemoved(const QDBusObjectPath &contentPath,
00129             const Tp::CallStateReason &reason);
00130     TP_QT_NO_EXPORT void onContentReady(Tp::PendingOperation *op);
00131 
00132     TP_QT_NO_EXPORT void gotLocalHoldState(QDBusPendingCallWatcher *);
00133     TP_QT_NO_EXPORT void onLocalHoldStateChanged(uint, uint);
00134 
00135 private:
00136     friend class PendingCallContent;
00137 
00138     TP_QT_NO_EXPORT CallContentPtr addContent(const QDBusObjectPath &contentPath);
00139     TP_QT_NO_EXPORT CallContentPtr lookupContent(const QDBusObjectPath &contentPath) const;
00140 
00141     struct Private;
00142     friend struct Private;
00143     Private *mPriv;
00144 };
00145 
00146 } // Tp
00147 
00148 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00828.html0000644000175200001440000001621512000060453021634 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ConnectionFactory Member List
This is the complete list of members for Tp::ConnectionFactory, including all inherited members.
addFeature(const Feature &feature)Tp::FixedFeatureFactory
addFeatures(const Features &features)Tp::FixedFeatureFactory
cachedProxy(const QString &busName, const QString &objectPath) const Tp::DBusProxyFactory [protected]
ConnectionFactory(const QDBusConnection &bus, const Features &features)Tp::ConnectionFactory [protected]
construct(const QString &busName, const QString &objectPath, const ChannelFactoryConstPtr &chanFactory, const ContactFactoryConstPtr &contactFactory) const Tp::ConnectionFactory [protected, virtual]
create(const QDBusConnection &bus, const Features &features=Features())Tp::ConnectionFactory [static]
dbusConnection() const Tp::DBusProxyFactory
DBusProxyFactory(const QDBusConnection &bus)Tp::DBusProxyFactory [protected]
features() const Tp::FixedFeatureFactory
featuresFor(const DBusProxyPtr &proxy) const Tp::FixedFeatureFactory [protected, virtual]
finalBusNameFrom(const QString &uniqueOrWellKnown) const Tp::ConnectionFactory [protected, virtual]
FixedFeatureFactory(const QDBusConnection &bus)Tp::FixedFeatureFactory [protected]
initialPrepare(const DBusProxyPtr &proxy) const Tp::DBusProxyFactory [protected, virtual]
nowHaveProxy(const DBusProxyPtr &proxy) const Tp::DBusProxyFactory [protected]
proxy(const QString &busName, const QString &objectPath, const ChannelFactoryConstPtr &chanFactory, const ContactFactoryConstPtr &contactFactory) const Tp::ConnectionFactory
readyPrepare(const DBusProxyPtr &proxy) const Tp::DBusProxyFactory [protected, virtual]
RefCounted()Tp::RefCounted [inline]
~ConnectionFactory()Tp::ConnectionFactory [virtual]
~DBusProxyFactory()Tp::DBusProxyFactory [virtual]
~FixedFeatureFactory()Tp::FixedFeatureFactory [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00326.html0000644000175200001440000002031012000060453021614 0ustar00collabora-develusers00000000000000 Tp::PendingStringList Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The PendingStringList class is a generic subclass of PendingOperation representing a pending D-Bus method call that returns a string list. More...

#include <TelepathyQt/PendingStringList>

Inherits Tp::PendingOperation.

List of all members.

Public Member Functions

Protected Member Functions


Detailed Description

The PendingStringList class is a generic subclass of PendingOperation representing a pending D-Bus method call that returns a string list.

See Asynchronous Object Model


Constructor & Destructor Documentation

Tp::PendingStringList::PendingStringList ( QDBusPendingCall  call,
const SharedPtr< RefCounted > &  object 
)

Member Function Documentation

QStringList Tp::PendingStringList::result ( ) const
void Tp::PendingStringList::setResult ( const QStringList &  result) [protected]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00616_source.html0000644000175200001440000001163412000060453023207 0ustar00collabora-develusers00000000000000 object.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
object.h
00001 
00023 #ifndef _TelepathyQt_object_h_HEADER_GUARD_
00024 #define _TelepathyQt_object_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Global>
00031 #include <TelepathyQt/RefCounted>
00032 
00033 #include <QObject>
00034 #include <QString>
00035 
00036 namespace Tp
00037 {
00038 
00039 class TP_QT_EXPORT Object : public QObject, public RefCounted
00040 {
00041     Q_OBJECT
00042     Q_DISABLE_COPY(Object)
00043 
00044 public:
00045     virtual ~Object();
00046 
00047 Q_SIGNALS:
00048     void propertyChanged(const QString &propertyName);
00049 
00050 protected:
00051     Object();
00052 
00053     void notify(const char *propertyName);
00054 
00055 private:
00056     struct Private;
00057     friend struct Private;
00058     Private *mPriv;
00059 };
00060 
00061 } // Tp
00062 
00063 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01094.html0000644000175200001440000002016512000060453021627 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelInterfacePasswordInterface Member List
This is the complete list of members for Tp::Client::ChannelInterfacePasswordInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ChannelInterfacePasswordInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfacePasswordInterface
ChannelInterfacePasswordInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfacePasswordInterface
ChannelInterfacePasswordInterface(Tp::DBusProxy *proxy)Tp::Client::ChannelInterfacePasswordInterface
ChannelInterfacePasswordInterface(const Tp::Client::ChannelInterface &mainInterface)Tp::Client::ChannelInterfacePasswordInterface [explicit]
ChannelInterfacePasswordInterface(const Tp::Client::ChannelInterface &mainInterface, QObject *parent)Tp::Client::ChannelInterfacePasswordInterface
GetPasswordFlags(int timeout=-1)Tp::Client::ChannelInterfacePasswordInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ChannelInterfacePasswordInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
PasswordFlagsChanged(uint added, uint removed)Tp::Client::ChannelInterfacePasswordInterface [signal]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
ProvidePassword(const QString &password, int timeout=-1)Tp::Client::ChannelInterfacePasswordInterface [inline, slot]
requestAllProperties() const Tp::Client::ChannelInterfacePasswordInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ChannelInterfacePasswordInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_func_0x62.html0000644000175200001440000001626512000060453024621 0ustar00collabora-develusers00000000000000 Class Members - Functions
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- b -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01007.html0000644000175200001440000000500312000060453021613 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Metadata Member List
This is the complete list of members for Tp::Metadata, including all inherited members.
Metadata()Tp::Metadata [inline]
Metadata(const QMap< QString, QStringList > &a)Tp::Metadata [inline]
operator=(const QMap< QString, QStringList > &a)Tp::Metadata [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00604_source.html0000644000175200001440000000471612000060453023207 0ustar00collabora-develusers00000000000000 media-session-handler.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
media-session-handler.h
00001 
00023 #ifndef _TelepathyQt_media_session_handler_h_HEADER_GUARD_
00024 #define _TelepathyQt_media_session_handler_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00048 #include <TelepathyQt/_gen/cli-media-session-handler.h>
00049 
00050 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00777.html0000644000175200001440000001632012000060453021634 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AccountFactory Member List
This is the complete list of members for Tp::AccountFactory, including all inherited members.
AccountFactory(const QDBusConnection &bus, const Features &features)Tp::AccountFactory [protected]
addFeature(const Feature &feature)Tp::FixedFeatureFactory
addFeatures(const Features &features)Tp::FixedFeatureFactory
cachedProxy(const QString &busName, const QString &objectPath) const Tp::DBusProxyFactory [protected]
construct(const QString &busName, const QString &objectPath, const ConnectionFactoryConstPtr &connFactory, const ChannelFactoryConstPtr &chanFactory, const ContactFactoryConstPtr &contactFactory) const Tp::AccountFactory [protected, virtual]
create(const QDBusConnection &bus, const Features &features=Features())Tp::AccountFactory [static]
dbusConnection() const Tp::DBusProxyFactory
DBusProxyFactory(const QDBusConnection &bus)Tp::DBusProxyFactory [protected]
features() const Tp::FixedFeatureFactory
featuresFor(const DBusProxyPtr &proxy) const Tp::FixedFeatureFactory [protected, virtual]
finalBusNameFrom(const QString &uniqueOrWellKnown) const Tp::AccountFactory [protected, virtual]
FixedFeatureFactory(const QDBusConnection &bus)Tp::FixedFeatureFactory [protected]
initialPrepare(const DBusProxyPtr &proxy) const Tp::DBusProxyFactory [protected, virtual]
nowHaveProxy(const DBusProxyPtr &proxy) const Tp::DBusProxyFactory [protected]
proxy(const QString &busName, const QString &objectPath, const ConnectionFactoryConstPtr &connFactory, const ChannelFactoryConstPtr &chanFactory, const ContactFactoryConstPtr &contactFactory) const Tp::AccountFactory
readyPrepare(const DBusProxyPtr &proxy) const Tp::DBusProxyFactory [protected, virtual]
RefCounted()Tp::RefCounted [inline]
~AccountFactory()Tp::AccountFactory [virtual]
~DBusProxyFactory()Tp::DBusProxyFactory [virtual]
~FixedFeatureFactory()Tp::FixedFeatureFactory [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00846.html0000644000175200001440000002066512000060453021640 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::StatelessDBusProxy Member List
This is the complete list of members for Tp::StatelessDBusProxy, including all inherited members.
actualFeatures() const Tp::ReadyObject [virtual]
becomeReady(const Features &requestedFeatures=Features())Tp::ReadyObject [virtual]
busName() const Tp::DBusProxy
dbusConnection() const Tp::DBusProxy
DBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::DBusProxy
invalidate(const QString &reason, const QString &message)Tp::DBusProxy [protected]
invalidate(const QDBusError &error)Tp::DBusProxy [protected]
invalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage)Tp::DBusProxy [signal]
invalidationMessage() const Tp::DBusProxy
invalidationReason() const Tp::DBusProxy
isReady(const Features &features=Features()) const Tp::ReadyObject [virtual]
isValid() const Tp::DBusProxy
missingFeatures() const Tp::ReadyObject [virtual]
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
objectPath() const Tp::DBusProxy
propertyChanged(const QString &propertyName)Tp::Object [signal]
readinessHelper() const Tp::ReadyObject [protected]
ReadyObject(RefCounted *object, const Feature &featureCore)Tp::ReadyObject
ReadyObject(DBusProxy *proxy, const Feature &featureCore)Tp::ReadyObject
RefCounted()Tp::RefCounted [inline]
requestedFeatures() const Tp::ReadyObject [virtual]
setBusName(const QString &busName)Tp::DBusProxy [protected]
StatelessDBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::StatelessDBusProxy
~DBusProxy()Tp::DBusProxy [virtual]
~Object()Tp::Object [virtual]
~ReadyObject()Tp::ReadyObject [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]
~StatelessDBusProxy()Tp::StatelessDBusProxy [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00374.html0000644000175200001440000001142212000060453021623 0ustar00collabora-develusers00000000000000 Tp::RTPHeaderExtension Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::RTPHeaderExtension Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

A struct defining a RTP Header extension.


Member Data Documentation

Identifier to be negotiated.

Direction in which the Header Extension is negotiated.

URI defining the extension.

Feedback parameters as a string. Format is defined in the relevant RFC.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00866.html0000644000175200001440000000612412000060453021634 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PtrFunctor4< R, Arg1, Arg2, Arg3, Arg4 > Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00674_source.html0000644000175200001440000002654212000060453023217 0ustar00collabora-develusers00000000000000 protocol-info.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
protocol-info.h
00001 
00023 #ifndef _TelepathyQt_protocol_info_h_HEADER_GUARD_
00024 #define _TelepathyQt_protocol_info_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/AvatarSpec>
00031 #include <TelepathyQt/Global>
00032 #include <TelepathyQt/PresenceSpec>
00033 #include <TelepathyQt/ProtocolParameter>
00034 #include <TelepathyQt/Types>
00035 
00036 #include <QSharedDataPointer>
00037 #include <QString>
00038 #include <QList>
00039 
00040 namespace Tp
00041 {
00042 
00043 class ConnectionCapabilities;
00044 class PendingString;
00045 
00046 class TP_QT_EXPORT ProtocolInfo
00047 {
00048 public:
00049     ProtocolInfo();
00050     ProtocolInfo(const ProtocolInfo &other);
00051     ~ProtocolInfo();
00052 
00053     bool isValid() const { return mPriv.constData() != 0; }
00054 
00055     ProtocolInfo &operator=(const ProtocolInfo &other);
00056 
00057     QString cmName() const;
00058 
00059     QString name() const;
00060 
00061     ProtocolParameterList parameters() const;
00062     bool hasParameter(const QString &name) const;
00063 
00064     bool canRegister() const;
00065 
00066     ConnectionCapabilities capabilities() const;
00067 
00068     QString vcardField() const;
00069 
00070     QString englishName() const;
00071 
00072     QString iconName() const;
00073 
00074     PresenceSpecList allowedPresenceStatuses() const;
00075 
00076     AvatarSpec avatarRequirements() const;
00077 
00078     QStringList addressableVCardFields() const;
00079     QStringList addressableUriSchemes() const;
00080 
00081     PendingString *normalizeVCardAddress(const QString &vcardField, const QString &vcardAddress);
00082     PendingString *normalizeContactUri(const QString &uri);
00083 
00084 private:
00085     friend class ConnectionManager;
00086 
00087     TP_QT_NO_EXPORT ProtocolInfo(const ConnectionManagerPtr &cm, const QString &name);
00088 
00089     TP_QT_NO_EXPORT void addParameter(const ParamSpec &spec);
00090     TP_QT_NO_EXPORT void setVCardField(const QString &vcardField);
00091     TP_QT_NO_EXPORT void setEnglishName(const QString &englishName);
00092     TP_QT_NO_EXPORT void setIconName(const QString &iconName);
00093     TP_QT_NO_EXPORT void setRequestableChannelClasses(const RequestableChannelClassList &caps);
00094     TP_QT_NO_EXPORT void setAllowedPresenceStatuses(const PresenceSpecList &statuses);
00095     TP_QT_NO_EXPORT void setAvatarRequirements(const AvatarSpec &avatarRequirements);
00096     TP_QT_NO_EXPORT void setAddressableVCardFields(const QStringList &vcardFields);
00097     TP_QT_NO_EXPORT void setAddressableUriSchemes(const QStringList &uriSchemes);
00098 
00099     struct Private;
00100     friend struct Private;
00101     QSharedDataPointer<Private> mPriv;
00102 };
00103 
00104 typedef QList<ProtocolInfo> ProtocolInfoList;
00105 
00106 } // Tp
00107 
00108 Q_DECLARE_METATYPE(Tp::ProtocolInfo);
00109 Q_DECLARE_METATYPE(Tp::ProtocolInfoList);
00110 
00111 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01002.html0000644000175200001440000000437612000060453021622 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MediaSessionHandlerInfo Member List
This is the complete list of members for Tp::MediaSessionHandlerInfo, including all inherited members.
mediaSessionTypeTp::MediaSessionHandlerInfo
sessionHandlerTp::MediaSessionHandlerInfo


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00304.html0000644000175200001440000004306512000060453021624 0ustar00collabora-develusers00000000000000 Tp::Client::DBus::PeerInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

#include <TelepathyQt/DBus>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

  • QDBusPendingReply Ping (int timeout=-1)
  • QDBusPendingReply< QString > GetMachineId (int timeout=-1)

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.DBus.Peer".


Constructor & Destructor Documentation

Tp::Client::DBus::PeerInterface::PeerInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a PeerInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::DBus::PeerInterface::PeerInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a PeerInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a PeerInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a PeerInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.
Tp::Client::DBus::PeerInterface::PeerInterface ( const Tp::AbstractInterface mainInterface,
QObject *  parent 
)

Creates a PeerInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

static QLatin1String Tp::Client::DBus::PeerInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.DBus.Peer", which this class represents.

Returns:
The D-Bus interface name.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::DBus::PeerInterface::Ping ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method Ping on the remote object.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply<QString> Tp::Client::DBus::PeerInterface::GetMachineId ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method GetMachineId on the remote object.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
void Tp::Client::DBus::PeerInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01077.html0000644000175200001440000003546312000060453021637 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::CallStreamInterfaceMediaInterface Member List
This is the complete list of members for Tp::Client::CallStreamInterfaceMediaInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
AddCandidates(const Tp::CandidateList &candidates, int timeout=-1)Tp::Client::CallStreamInterfaceMediaInterface [inline, slot]
CallStreamInterfaceMediaInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::CallStreamInterfaceMediaInterface
CallStreamInterfaceMediaInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::CallStreamInterfaceMediaInterface
CallStreamInterfaceMediaInterface(Tp::DBusProxy *proxy)Tp::Client::CallStreamInterfaceMediaInterface
CallStreamInterfaceMediaInterface(const Tp::Client::CallStreamInterface &mainInterface)Tp::Client::CallStreamInterfaceMediaInterface [explicit]
CallStreamInterfaceMediaInterface(const Tp::Client::CallStreamInterface &mainInterface, QObject *parent)Tp::Client::CallStreamInterfaceMediaInterface
CompleteReceivingStateChange(uint state, int timeout=-1)Tp::Client::CallStreamInterfaceMediaInterface [inline, slot]
CompleteSendingStateChange(uint state, int timeout=-1)Tp::Client::CallStreamInterfaceMediaInterface [inline, slot]
EndpointsChanged(const Tp::ObjectPathList &endpointsAdded, const Tp::ObjectPathList &endpointsRemoved)Tp::Client::CallStreamInterfaceMediaInterface [signal]
Fail(const Tp::CallStateReason &reason, int timeout=-1)Tp::Client::CallStreamInterfaceMediaInterface [inline, slot]
FinishInitialCandidates(int timeout=-1)Tp::Client::CallStreamInterfaceMediaInterface [inline, slot]
ICERestartRequested()Tp::Client::CallStreamInterfaceMediaInterface [signal]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::CallStreamInterfaceMediaInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
LocalCandidatesAdded(const Tp::CandidateList &candidates)Tp::Client::CallStreamInterfaceMediaInterface [signal]
LocalCredentialsChanged(const QString &username, const QString &password)Tp::Client::CallStreamInterfaceMediaInterface [signal]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
ReceivingStateChanged(uint state)Tp::Client::CallStreamInterfaceMediaInterface [signal]
RelayInfoChanged(const Tp::StringVariantMapList &relayInfo)Tp::Client::CallStreamInterfaceMediaInterface [signal]
ReportReceivingFailure(uint reason, const QString &error, const QString &message, int timeout=-1)Tp::Client::CallStreamInterfaceMediaInterface [inline, slot]
ReportSendingFailure(uint reason, const QString &error, const QString &message, int timeout=-1)Tp::Client::CallStreamInterfaceMediaInterface [inline, slot]
requestAllProperties() const Tp::Client::CallStreamInterfaceMediaInterface [inline]
requestPropertyEndpoints() const Tp::Client::CallStreamInterfaceMediaInterface [inline]
requestPropertyHasServerInfo() const Tp::Client::CallStreamInterfaceMediaInterface [inline]
requestPropertyICERestartPending() const Tp::Client::CallStreamInterfaceMediaInterface [inline]
requestPropertyLocalCandidates() const Tp::Client::CallStreamInterfaceMediaInterface [inline]
requestPropertyLocalCredentials() const Tp::Client::CallStreamInterfaceMediaInterface [inline]
requestPropertyReceivingState() const Tp::Client::CallStreamInterfaceMediaInterface [inline]
requestPropertyRelayInfo() const Tp::Client::CallStreamInterfaceMediaInterface [inline]
requestPropertySendingState() const Tp::Client::CallStreamInterfaceMediaInterface [inline]
requestPropertySTUNServers() const Tp::Client::CallStreamInterfaceMediaInterface [inline]
requestPropertyTransport() const Tp::Client::CallStreamInterfaceMediaInterface [inline]
SendingStateChanged(uint state)Tp::Client::CallStreamInterfaceMediaInterface [signal]
ServerInfoRetrieved()Tp::Client::CallStreamInterfaceMediaInterface [signal]
SetCredentials(const QString &username, const QString &password, int timeout=-1)Tp::Client::CallStreamInterfaceMediaInterface [inline, slot]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::CallStreamInterfaceMediaInterface [inline, static]
STUNServersChanged(const Tp::SocketAddressIPList &servers)Tp::Client::CallStreamInterfaceMediaInterface [signal]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00278.html0000644000175200001440000002277212000060453021640 0ustar00collabora-develusers00000000000000 Tp::MemberFunctor5< R, T, Arg1, Arg2, Arg3, Arg4, Arg5 > Struct Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MemberFunctor5< R, T, Arg1, Arg2, Arg3, Arg4, Arg5 > Struct Template Reference

#include </home/collabora-devel/kde/src/telepathy-qt4/TelepathyQt/functors.h>

Inherits Tp::BaseFunctor.

List of all members.

Public Types

Public Member Functions

Public Attributes

template<class R, class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5>
struct Tp::MemberFunctor5< R, T, Arg1, Arg2, Arg3, Arg4, Arg5 >


Member Typedef Documentation

template<class R, class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5>
typedef R(T::* Tp::MemberFunctor5< R, T, Arg1, Arg2, Arg3, Arg4, Arg5 >::FunctionType)(Arg1, Arg2, Arg3, Arg4, Arg5)
template<class R, class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5>
typedef R Tp::MemberFunctor5< R, T, Arg1, Arg2, Arg3, Arg4, Arg5 >::ResultType

Constructor & Destructor Documentation

template<class R, class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5>
Tp::MemberFunctor5< R, T, Arg1, Arg2, Arg3, Arg4, Arg5 >::MemberFunctor5 ( T *  object,
FunctionType  fn 
) [inline]

Member Function Documentation

template<class R, class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5>
ResultType Tp::MemberFunctor5< R, T, Arg1, Arg2, Arg3, Arg4, Arg5 >::operator() ( Arg1  a1,
Arg2  a2,
Arg3  a3,
Arg4  a4,
Arg5  a5 
) const [inline]

Member Data Documentation

template<class R, class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5>
T* Tp::MemberFunctor5< R, T, Arg1, Arg2, Arg3, Arg4, Arg5 >::object
template<class R, class T, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5>
FunctionType Tp::MemberFunctor5< R, T, Arg1, Arg2, Arg3, Arg4, Arg5 >::fn


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00913.html0000644000175200001440000001646212000060453021633 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Presence Member List
This is the complete list of members for Tp::Presence, including all inherited members.
available(const QString &statusMessage=QString())Tp::Presence [static]
away(const QString &statusMessage=QString())Tp::Presence [static]
barePresence() const Tp::Presence
brb(const QString &statusMessage=QString())Tp::Presence [static]
busy(const QString &statusMessage=QString())Tp::Presence [static]
chat(const QString &statusMessage=QString())Tp::Presence [static]
dnd(const QString &statusMessage=QString())Tp::Presence [static]
hidden(const QString &statusMessage=QString())Tp::Presence [static]
isValid() const Tp::Presence [inline]
offline(const QString &statusMessage=QString())Tp::Presence [static]
operator!=(const Presence &other) const Tp::Presence
operator=(const Presence &other)Tp::Presence
operator==(const Presence &other) const Tp::Presence
Presence()Tp::Presence
Presence(const SimplePresence &sp)Tp::Presence
Presence(ConnectionPresenceType type, const QString &status, const QString &statusMessage)Tp::Presence
Presence(const Presence &other)Tp::Presence
setStatus(const SimplePresence &value)Tp::Presence
setStatus(ConnectionPresenceType type, const QString &status, const QString &statusMessage)Tp::Presence
setStatusMessage(const QString &statusMessage)Tp::Presence
status() const Tp::Presence
statusMessage() const Tp::Presence
type() const Tp::Presence
xa(const QString &statusMessage=QString())Tp::Presence [static]
~Presence()Tp::Presence


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00921.html0000644000175200001440000001404112000060453021621 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ProtocolParameter Member List
This is the complete list of members for Tp::ProtocolParameter, including all inherited members.
bareParameter() const Tp::ProtocolParameter
dbusSignature() const Tp::ProtocolParameter
defaultValue() const Tp::ProtocolParameter
isRequired() const Tp::ProtocolParameter
isRequiredForRegistration() const Tp::ProtocolParameter
isSecret() const Tp::ProtocolParameter
isValid() const Tp::ProtocolParameter [inline]
name() const Tp::ProtocolParameter
operator<(const ProtocolParameter &other) const Tp::ProtocolParameter
operator=(const ProtocolParameter &other)Tp::ProtocolParameter
operator==(const ProtocolParameter &other) const Tp::ProtocolParameter
operator==(const QString &name) const Tp::ProtocolParameter
ProtocolParameter()Tp::ProtocolParameter
ProtocolParameter(const ParamSpec &spec)Tp::ProtocolParameter
ProtocolParameter(const QString &name, const QDBusSignature &dbusSignature, ConnMgrParamFlags flags, QVariant defaultValue=QVariant())Tp::ProtocolParameter
ProtocolParameter(const QString &name, const QString &dbusSignature, ConnMgrParamFlags flags, QVariant defaultValue=QVariant())Tp::ProtocolParameter
ProtocolParameter(const ProtocolParameter &other)Tp::ProtocolParameter
type() const Tp::ProtocolParameter
~ProtocolParameter()Tp::ProtocolParameter


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00408.html0000644000175200001440000015470612000060453021636 0ustar00collabora-develusers00000000000000 Tp::TextChannel Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The TextChannel class represents a Telepathy channel of type Text. More...

#include <TelepathyQt/TextChannel>

Inherits Tp::Channel.

List of all members.

Public Slots

Signals

Public Member Functions

Static Public Member Functions

Static Public Attributes

Protected Member Functions


Detailed Description

The TextChannel class represents a Telepathy channel of type Text.

For more details, please refer to Telepathy specification.

See Asynchronous Object Model, Shared Pointer Usage


Constructor & Destructor Documentation

Class destructor.

Tp::TextChannel::TextChannel ( const ConnectionPtr &  connection,
const QString &  objectPath,
const QVariantMap &  immutableProperties,
const Feature coreFeature = TextChannel::FeatureCore 
) [protected]

Construct a new TextChannel object.

Parameters:
connectionConnection owning this channel, and specifying the service.
objectPathThe channel object path.
immutablePropertiesThe channel immutable properties.
coreFeatureThe core feature of the channel type, if any. The corresponding introspectable should depend on TextChannel::FeatureCore.

Member Function Documentation

TextChannelPtr Tp::TextChannel::create ( const ConnectionPtr &  connection,
const QString &  objectPath,
const QVariantMap &  immutableProperties 
) [static]

Create a new TextChannel object.

Parameters:
connectionConnection owning this channel, and specifying the service.
objectPathThe channel object path.
immutablePropertiesThe channel immutable properties.
Returns:
A TextChannelPtr object pointing to the newly created TextChannel object.

Reimplemented from Tp::Channel.

Return whether this channel supports the Messages interface.

If the interface is not supported, some advanced functionality will be unavailable.

This method requires TextChannel::FeatureCore to be ready.

Returns:
true if the Messages interface is supported, false otherwise.

Return whether this channel supports the ChatState interface.

If the interface is not supported, requestChatState() will fail and all contacts' chat states will appear to be ChannelChatStateInactive.

This method requires TextChannel::FeatureCore to be ready.

Returns:
true if the ChatState interface is supported, false otherwise.
See also:
requestChatState(), chatStateChanged()

Return whether contacts can be invited into this channel using inviteContacts() (which is equivalent to Channel::groupAddContacts()).

Whether this is the case depends on the underlying protocol, the type of channel, and the user's privileges (in some chatrooms, only a privileged user can invite other contacts).

This is an alias for Channel::groupCanAddContacts(), to indicate its meaning more clearly for Text channels.

This method requires Channel::FeatureCore to be ready.

Returns:
true if contacts can be invited, false otherwise.
See also:
inviteContacts(), Channel::groupCanAddContacts(), Channel::groupAddContacts()

Return whether the provided message type is supported.

This method requires TextChannel::FeatureMessageCapabilities to be ready.

Parameters:
messageTypeThe message type to check.
Returns:
true if supported, false otherwise

Return the message types supported by this channel.

This method requires TextChannel::FeatureMessageCapabilities to be ready.

Returns:
The list of supported message types

Return a list of supported MIME content types for messages on this channel.

For a simple text channel this will be a list containing one item, "text/plain".

This list may contain the special value "*<!--x-->/<!--x-->*", which indicates that any content type is supported.

This method requires TextChannel::FeatureMessageCapabilities to be ready.

Returns:
The list of MIME content types.

Return a set of flags indicating support for multi-part messages on this channel.

This is zero on simple text channels, or greater than zero if there is partial or full support for multi-part messages.

This method requires TextChannel::FeatureMessageCapabilities to be ready.

Returns:
The flags as MessagePartSupportFlags.

Return a set of flags indicating support for delivery reporting on this channel.

This is zero if there are no particular guarantees, or greater than zero if delivery reports can be expected under certain circumstances.

This method requires TextChannel::FeatureMessageCapabilities to be ready.

Returns:
The flags as DeliveryReportingSupportFlags.

Return a list of messages received in this channel.

Messages are added to this list when they are received from the instant messaging service; the messageReceived() signal is emitted.

There is a small delay between the message being received over D-Bus and becoming available to users of this C++ API, since a small amount of additional information needs to be fetched. However, the relative ordering of all the messages in a channel is preserved.

Messages are removed from this list when they are acknowledged with the acknowledge() or forget() methods. On channels where hasMessagesInterface() returns true, they will also be removed when acknowledged by a different client. In either case, the pendingMessageRemoved() signal is emitted.

This method requires TextChannel::FeatureMessageQueue to be ready.

Returns:
A list of ReceivedMessage objects.
See also:
messageReceived()
ChannelChatState Tp::TextChannel::chatState ( const ContactPtr &  contact) const

Return the current chat state for contact.

If hasChatStateInterface() returns false, this method will always return ChannelChatStateInactive.

This method requires TextChannel::FeatureChatState to be ready.

Returns:
The contact chat state as ChannelChatState.
void Tp::TextChannel::acknowledge ( const QList< ReceivedMessage > &  messages) [slot]

Acknowledge that received messages have been displayed to the user.

Note that this method should only be called by the main handler of a channel, usually meaning the user interface process that displays the channel to the user (when a channel dispatcher is used, the handler must acknowledge messages, and other approvers or observers must not acknowledge messages).

Processes other than the main handler of a channel can free memory used by the library by calling forget() instead.

This method requires TextChannel::FeatureMessageQueue to be ready.

Parameters:
messagesA list of received messages that have now been displayed.
See also:
forget(), messageQueue(), messageReceived(), pendingMessageRemoved()
void Tp::TextChannel::forget ( const QList< ReceivedMessage > &  messages) [slot]

Remove messages from the message queue without acknowledging them.

Note that this method frees memory used by the library, but does not free the corresponding memory in the CM process. It should be used by clients that are not the main handler for a channel; the main handler for a channel should use acknowledge() instead.

This method requires TextChannel::FeatureMessageQueue to be ready.

Parameters:
messagesA list of received messages that have now been processed.
See also:
acknowledge(), messageQueue(), messageReceived(), pendingMessageRemoved()

Request that a message be sent on this channel.

When the message has been submitted for delivery, this method will return and the messageSent() signal will be emitted.

If the message cannot be submitted for delivery, the returned pending operation will fail and no signal is emitted.

This method requires TextChannel::FeatureCore to be ready.

Parameters:
textThe message body.
typeThe message type.
flagsFlags affecting how the message is sent. Note that the channel may ignore some or all flags, depending on deliveryReportingSupport(); the flags that were handled by the CM are provided in messageSent().
Returns:
A PendingOperation which will emit PendingOperation::finished when the message has been submitted for delivery.
See also:
messageSent()
PendingSendMessage * Tp::TextChannel::send ( const MessagePartList parts,
MessageSendingFlags  flags = 0 
) [slot]

Request that a message be sent on this channel.

When the message has been submitted for delivery, this method will return and the messageSent() signal will be emitted.

If the message cannot be submitted for delivery, the returned pending operation will fail and no signal is emitted.

This method requires TextChannel::FeatureCore to be ready.

Parameters:
partThe message parts.
flagsFlags affecting how the message is sent. Note that the channel may ignore some or all flags, depending on deliveryReportingSupport(); the flags that were handled by the CM are provided in messageSent().
Returns:
A PendingOperation which will emit PendingOperation::finished when the message has been submitted for delivery.
See also:
messageSent()
PendingOperation* Tp::TextChannel::inviteContacts ( const QList< ContactPtr > &  contacts,
const QString &  message = QString() 
) [inline, slot]

Set the local chat state and notify other members of the channel that it has changed.

Note that only the primary handler of the channel should set its chat state.

This method requires TextChannel::FeatureCore to be ready.

Parameters:
stateThe new state.
See also:
chatStateChanged()
void Tp::TextChannel::messageSent ( const Tp::Message message,
Tp::MessageSendingFlags  flags,
const QString &  sentMessageToken 
) [signal]

Emitted when a message is sent, if the TextChannel::FeatureMessageSentSignal has been enabled.

This signal is emitted regardless of whether the message is sent by this client, or another client using the same channel via D-Bus.

Parameters:
messageA message. This may differ slightly from what the client requested to send, for instance if it has been altered due to limitations of the instant messaging protocol used.
flagsMessageSendingFlags that were in effect when the message was sent. Clients can use these in conjunction with deliveryReportingSupport() to determine whether delivery reporting can be expected.
sentMessageTokenEither an empty QString, or an opaque token used to match the message to any delivery reports.
void Tp::TextChannel::messageReceived ( const Tp::ReceivedMessage message) [signal]

Emitted when a message is added to messageQueue(), if the TextChannel::FeatureMessageQueue Feature has been enabled.

This occurs slightly later than the message being received over D-Bus; see messageQueue() for details.

Parameters:
messageThe message received.
See also:
messageQueue(), acknowledge(), forget()
void Tp::TextChannel::pendingMessageRemoved ( const Tp::ReceivedMessage message) [signal]

Emitted when a message is removed from messageQueue(), if the TextChannel::FeatureMessageQueue Feature has been enabled. See messageQueue() for the circumstances in which this happens.

Parameters:
messageThe message removed.
See also:
messageQueue(), acknowledge(), forget()
void Tp::TextChannel::chatStateChanged ( const Tp::ContactPtr &  contact,
Tp::ChannelChatState  state 
) [signal]

Emitted when the state of a member of the channel has changed, if the TextChannel::FeatureChatState feature has been enabled.

Local state changes are also emitted here.

Parameters:
contactThe contact whose chat state changed.
stateThe new chat state for contact.
See also:
chatState()

Member Data Documentation

Feature representing the core that needs to become ready to make the TextChannel object usable.

This is currently the same as Channel::FeatureCore, but may change to include more.

When calling isReady(), becomeReady(), this feature is implicitly added to the requested features.

Reimplemented from Tp::Channel.

Feature used in order to access the message queue info.

See message queue methods' documentation for more details.

See also:
messageQueue(), messageReceived(), pendingMessageRemoved(), forget(), acknowledge()

Feature used in order to access message capabilities info.

See message capabilities methods' documentation for more details.

See also:
supportedContentTypes(), messagePartSupport(), deliveryReportingSupport()

Feature used in order to receive notification when a message is sent.

See also:
messageSent()

Feature used in order to keep track of chat state changes.

See chat state methods' documentation for more details.

See also:
chatState(), chatStateChanged()


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00296.html0000644000175200001440000003626512000060453021642 0ustar00collabora-develusers00000000000000 Tp::OptionalInterfaceFactory< DBusProxySubclass > Class Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::OptionalInterfaceFactory< DBusProxySubclass > Class Template Reference

The OptionalInterfaceFactory class is a helper class for high-level D-Bus proxy classes willing to offer access to shared instances of interface proxies for optional interfaces. More...

#include <TelepathyQt/OptionalInterfaceFactory>

List of all members.

Public Types

Public Member Functions

Protected Member Functions


Detailed Description

template<typename DBusProxySubclass>
class Tp::OptionalInterfaceFactory< DBusProxySubclass >

The OptionalInterfaceFactory class is a helper class for high-level D-Bus proxy classes willing to offer access to shared instances of interface proxies for optional interfaces.

To use this helper in a subclass of DBusProxy (say, ExampleObject), ExampleObject should inherit from OptionalInterfaceFactory<ExampleObject>, and call OptionalInterfaceFactory(this) in its constructor's initialization list.

Template Parameters:
DBusProxySubclassA subclass of DBusProxy

Member Enumeration Documentation

template<typename DBusProxySubclass>
enum Tp::OptionalInterfaceFactory::InterfaceSupportedChecking

Specifies if the interface being supported by the remote object should be checked by optionalInterface() and the convenience functions for it.

See also:
optionalInterface()
Enumerator:
CheckInterfaceSupported 

Don't return an interface instance unless it can be guaranteed that the remote object actually implements the interface.

BypassInterfaceCheck 

Return an interface instance even if it can't be verified that the remote object supports the interface.


Constructor & Destructor Documentation

template<typename DBusProxySubclass>
Tp::OptionalInterfaceFactory< DBusProxySubclass >::OptionalInterfaceFactory ( DBusProxySubclass *  this_) [inline]

Class constructor.

Parameters:
this_The class to which this OptionalInterfaceFactory is attached
template<typename DBusProxySubclass>
Tp::OptionalInterfaceFactory< DBusProxySubclass >::~OptionalInterfaceFactory ( ) [inline]

Class destructor.

Frees all interface instances constructed by this factory.


Member Function Documentation

template<typename DBusProxySubclass>
Tp::OptionalInterfaceFactory< DBusProxySubclass >::interfaces ( ) const [inline]

Return a list of interfaces supported by this object.

Returns:
List of supported interfaces.
template<typename DBusProxySubclass>
bool Tp::OptionalInterfaceFactory< DBusProxySubclass >::hasInterface ( const QString &  name) const [inline]
template<typename DBusProxySubclass>
template<class Interface >
Interface* Tp::OptionalInterfaceFactory< DBusProxySubclass >::optionalInterface ( InterfaceSupportedChecking  check = CheckInterfaceSupported) const [inline]
template<typename DBusProxySubclass>
template<typename Interface >
template< typename Interface > inline Interface * Tp::OptionalInterfaceFactory< DBusProxySubclass >::interface ( ) const [inline]

Return a pointer to a valid instance of a interface class, associated with the same remote object as the given main interface instance. The given main interface must be of the class the optional interface is generated for (for eg. ChannelInterfaceGroupInterface this means ChannelInterface) or a subclass.

First invocation of this method for a particular optional interface class will construct the instance; subsequent calls will return a pointer to the same instance.

The returned instance is freed when the factory is destroyed; using it after destroying the factory will likely produce a crash. As the instance is shared, it should not be freed directly.

Template Parameters:
InterfaceClass of the interface instance to get.
Returns:
A pointer to an optional interface instance.
template<typename DBusProxySubclass>
void Tp::OptionalInterfaceFactory< DBusProxySubclass >::setInterfaces ( const QStringList &  interfaces) [inline, protected]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00427_source.html0000644000175200001440000001665412000060453023216 0ustar00collabora-develusers00000000000000 account-factory.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
account-factory.h
00001 
00023 #ifndef _TelepathyQt_account_factory_h_HEADER_GUARD_
00024 #define _TelepathyQt_account_factory_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Global>
00031 #include <TelepathyQt/SharedPtr>
00032 #include <TelepathyQt/Types>
00033 
00034 #include <TelepathyQt/Account>
00035 #include <TelepathyQt/Feature>
00036 #include <TelepathyQt/FixedFeatureFactory>
00037 
00038 class QDBusConnection;
00039 
00040 namespace Tp
00041 {
00042 
00043 class PendingReady;
00044 
00045 class TP_QT_EXPORT AccountFactory : public FixedFeatureFactory
00046 {
00047     Q_OBJECT
00048     Q_DISABLE_COPY(AccountFactory)
00049 
00050 public:
00051     static AccountFactoryPtr create(const QDBusConnection &bus,
00052             const Features &features = Features());
00053 
00054     virtual ~AccountFactory();
00055 
00056     PendingReady *proxy(const QString &busName, const QString &objectPath,
00057             const ConnectionFactoryConstPtr &connFactory,
00058             const ChannelFactoryConstPtr &chanFactory,
00059             const ContactFactoryConstPtr &contactFactory) const;
00060 
00061 protected:
00062     AccountFactory(const QDBusConnection &bus, const Features &features);
00063 
00064     virtual AccountPtr construct(const QString &busName, const QString &objectPath,
00065             const ConnectionFactoryConstPtr &connFactory,
00066             const ChannelFactoryConstPtr &chanFactory,
00067             const ContactFactoryConstPtr &contactFactory) const;
00068     virtual QString finalBusNameFrom(const QString &uniqueOrWellKnown) const;
00069     // Nothing we'd like to prepare()
00070     // Fixed features
00071 
00072 private:
00073     struct Private;
00074     Private *mPriv; // Currently unused, just for future-proofing
00075 };
00076 
00077 } // Tp
00078 
00079 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01090.html0000644000175200001440000003471212000060453021626 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelInterfaceGroupInterface Member List
This is the complete list of members for Tp::Client::ChannelInterfaceGroupInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
AddMembers(const Tp::UIntList &contacts, const QString &message, int timeout=-1)Tp::Client::ChannelInterfaceGroupInterface [inline, slot]
ChannelInterfaceGroupInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfaceGroupInterface
ChannelInterfaceGroupInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfaceGroupInterface
ChannelInterfaceGroupInterface(Tp::DBusProxy *proxy)Tp::Client::ChannelInterfaceGroupInterface
ChannelInterfaceGroupInterface(const Tp::Client::ChannelInterface &mainInterface)Tp::Client::ChannelInterfaceGroupInterface [explicit]
ChannelInterfaceGroupInterface(const Tp::Client::ChannelInterface &mainInterface, QObject *parent)Tp::Client::ChannelInterfaceGroupInterface
GetAllMembers(int timeout=-1)Tp::Client::ChannelInterfaceGroupInterface [inline, slot]
GetGroupFlags(int timeout=-1)Tp::Client::ChannelInterfaceGroupInterface [inline, slot]
GetHandleOwners(const Tp::UIntList &handles, int timeout=-1)Tp::Client::ChannelInterfaceGroupInterface [inline, slot]
GetLocalPendingMembers(int timeout=-1)Tp::Client::ChannelInterfaceGroupInterface [inline, slot]
GetLocalPendingMembersWithInfo(int timeout=-1)Tp::Client::ChannelInterfaceGroupInterface [inline, slot]
GetMembers(int timeout=-1)Tp::Client::ChannelInterfaceGroupInterface [inline, slot]
GetRemotePendingMembers(int timeout=-1)Tp::Client::ChannelInterfaceGroupInterface [inline, slot]
GetSelfHandle(int timeout=-1)Tp::Client::ChannelInterfaceGroupInterface [inline, slot]
GroupFlagsChanged(uint added, uint removed)Tp::Client::ChannelInterfaceGroupInterface [signal]
HandleOwnersChanged(const Tp::HandleOwnerMap &added, const Tp::UIntList &removed)Tp::Client::ChannelInterfaceGroupInterface [signal]
HandleOwnersChangedDetailed(const Tp::HandleOwnerMap &added, const Tp::UIntList &removed, const Tp::HandleIdentifierMap &identifiers)Tp::Client::ChannelInterfaceGroupInterface [signal]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ChannelInterfaceGroupInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
MembersChanged(const QString &message, const Tp::UIntList &added, const Tp::UIntList &removed, const Tp::UIntList &localPending, const Tp::UIntList &remotePending, uint actor, uint reason)Tp::Client::ChannelInterfaceGroupInterface [signal]
MembersChangedDetailed(const Tp::UIntList &added, const Tp::UIntList &removed, const Tp::UIntList &localPending, const Tp::UIntList &remotePending, const QVariantMap &details)Tp::Client::ChannelInterfaceGroupInterface [signal]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
RemoveMembers(const Tp::UIntList &contacts, const QString &message, int timeout=-1)Tp::Client::ChannelInterfaceGroupInterface [inline, slot]
RemoveMembersWithReason(const Tp::UIntList &contacts, const QString &message, uint reason, int timeout=-1)Tp::Client::ChannelInterfaceGroupInterface [inline, slot]
requestAllProperties() const Tp::Client::ChannelInterfaceGroupInterface [inline]
requestPropertyGroupFlags() const Tp::Client::ChannelInterfaceGroupInterface [inline]
requestPropertyHandleOwners() const Tp::Client::ChannelInterfaceGroupInterface [inline]
requestPropertyLocalPendingMembers() const Tp::Client::ChannelInterfaceGroupInterface [inline]
requestPropertyMemberIdentifiers() const Tp::Client::ChannelInterfaceGroupInterface [inline]
requestPropertyMembers() const Tp::Client::ChannelInterfaceGroupInterface [inline]
requestPropertyRemotePendingMembers() const Tp::Client::ChannelInterfaceGroupInterface [inline]
requestPropertySelfHandle() const Tp::Client::ChannelInterfaceGroupInterface [inline]
SelfContactChanged(uint selfHandle, const QString &selfID)Tp::Client::ChannelInterfaceGroupInterface [signal]
SelfHandleChanged(uint selfHandle)Tp::Client::ChannelInterfaceGroupInterface [signal]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ChannelInterfaceGroupInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00771.html0000644000175200001440000000655212000060453021634 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AbstractClientObserver::ObserverInfo Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00492_source.html0000644000175200001440000001506012000060453023206 0ustar00collabora-develusers00000000000000 cli-call-stream-endpoint-body.hpp Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-call-stream-endpoint-body.hpp
00001 #define IN_TP_QT_HEADER
00002 #include "TelepathyQt/call-stream-endpoint.h"
00003 
00004 namespace Tp
00005 {
00006 namespace Client
00007 {
00008 
00009 CallStreamEndpointInterface::CallStreamEndpointInterface(const QString& busName, const QString& objectPath, QObject *parent)
00010     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00011 {
00012 }
00013 
00014 CallStreamEndpointInterface::CallStreamEndpointInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00015     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00016 {
00017 }
00018 
00019 CallStreamEndpointInterface::CallStreamEndpointInterface(Tp::DBusProxy *proxy)
00020     : Tp::AbstractInterface(proxy, staticInterfaceName())
00021 {
00022 }
00023 
00024 void CallStreamEndpointInterface::invalidate(Tp::DBusProxy *proxy,
00025         const QString &error, const QString &message)
00026 {
00027     disconnect(this, SIGNAL(RemoteCredentialsSet(const QString&, const QString&)), NULL, NULL);
00028     disconnect(this, SIGNAL(RemoteCandidatesAdded(const Tp::CandidateList&)), NULL, NULL);
00029     disconnect(this, SIGNAL(CandidatePairSelected(const Tp::Candidate&, const Tp::Candidate&)), NULL, NULL);
00030     disconnect(this, SIGNAL(EndpointStateChanged(uint, uint)), NULL, NULL);
00031     disconnect(this, SIGNAL(ControllingChanged(bool)), NULL, NULL);
00032 
00033     Tp::AbstractInterface::invalidate(proxy, error, message);
00034 }
00035 }
00036 }


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00959.html0000644000175200001440000000476512000060453021650 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AliasMap Member List
This is the complete list of members for Tp::AliasMap, including all inherited members.
AliasMap()Tp::AliasMap [inline]
AliasMap(const QMap< uint, QString > &a)Tp::AliasMap [inline]
operator=(const QMap< uint, QString > &a)Tp::AliasMap [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_vars_0x6e.html0000644000175200001440000000502612000060453024715 0ustar00collabora-develusers00000000000000 Class Members - Variables
   Home · All Classes · All Namespaces · Modules · Functions · Files


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00678_source.html0000644000175200001440000003421112000060453023213 0ustar00collabora-develusers00000000000000 readiness-helper.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
readiness-helper.h
00001 
00023 #ifndef _TelepathyQt_readiness_helper_h_HEADER_GUARD_
00024 #define _TelepathyQt_readiness_helper_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Feature>
00031 
00032 #include <QMap>
00033 #include <QSet>
00034 #include <QSharedDataPointer>
00035 #include <QStringList>
00036 
00037 class QDBusError;
00038 
00039 namespace Tp
00040 {
00041 
00042 class DBusProxy;
00043 class PendingOperation;
00044 class PendingReady;
00045 class RefCounted;
00046 
00047 class TP_QT_EXPORT ReadinessHelper : public QObject
00048 {
00049     Q_OBJECT
00050     Q_DISABLE_COPY(ReadinessHelper)
00051 
00052 public:
00053     typedef void (*IntrospectFunc)(void *data);
00054 
00055     struct Introspectable {
00056     public:
00057         Introspectable();
00058         Introspectable(const QSet<uint> &makesSenseForStatuses,
00059                 const Features &dependsOnFeatures,
00060                 const QStringList &dependsOnInterfaces,
00061                 IntrospectFunc introspectFunc,
00062                 void *introspectFuncData,
00063                 bool critical = false);
00064         Introspectable(const Introspectable &other);
00065         ~Introspectable();
00066 
00067         Introspectable &operator=(const Introspectable &other);
00068 
00069     private:
00070         friend class ReadinessHelper;
00071 
00072         struct Private;
00073         friend struct Private;
00074         QSharedDataPointer<Private> mPriv;
00075     };
00076     typedef QMap<Feature, Introspectable> Introspectables;
00077 
00078     ReadinessHelper(RefCounted *object,
00079             uint currentStatus = 0,
00080             const Introspectables &introspectables = Introspectables(),
00081             QObject *parent = 0);
00082     ReadinessHelper(DBusProxy *proxy,
00083             uint currentStatus = 0,
00084             const Introspectables &introspectables = Introspectables(),
00085             QObject *parent = 0);
00086     ~ReadinessHelper();
00087 
00088     void addIntrospectables(const Introspectables &introspectables);
00089 
00090     uint currentStatus() const;
00091     void setCurrentStatus(uint currentStatus);
00092     void forceCurrentStatus(uint currentStatus);
00093 
00094     QStringList interfaces() const;
00095     void setInterfaces(const QStringList &interfaces);
00096 
00097     Features requestedFeatures() const;
00098     Features actualFeatures() const;
00099     Features missingFeatures() const;
00100 
00101     bool isReady(const Feature &feature,
00102             QString *errorName = 0, QString *errorMessage = 0) const;
00103     bool isReady(const Features &features,
00104             QString *errorName = 0, QString *errorMessage = 0) const;
00105     PendingReady *becomeReady(const Features &requestedFeatures);
00106 
00107     void setIntrospectCompleted(const Feature &feature, bool success,
00108             const QString &errorName = QString(),
00109             const QString &errorMessage = QString());
00110     void setIntrospectCompleted(const Feature &feature, bool success,
00111             const QDBusError &error);
00112 
00113 Q_SIGNALS:
00114     void statusReady(uint status);
00115 
00116 private Q_SLOTS:
00117     TP_QT_NO_EXPORT void iterateIntrospection();
00118 
00119     TP_QT_NO_EXPORT void onProxyInvalidated(Tp::DBusProxy *proxy,
00120         const QString &errorName, const QString &errorMessage);
00121 
00122 private:
00123     struct Private;
00124     friend struct Private;
00125     Private *mPriv;
00126 };
00127 
00128 } // Tp
00129 
00130 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00905.html0000644000175200001440000001101412000060453021620 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingOperation Member List
This is the complete list of members for Tp::PendingOperation, including all inherited members.
errorMessage() const Tp::PendingOperation
errorName() const Tp::PendingOperation
finished(Tp::PendingOperation *operation)Tp::PendingOperation [signal]
isError() const Tp::PendingOperation
isFinished() const Tp::PendingOperation
isValid() const Tp::PendingOperation
object() const Tp::PendingOperation [protected]
PendingOperation(const SharedPtr< RefCounted > &object)Tp::PendingOperation [protected]
setFinished()Tp::PendingOperation [protected, slot]
setFinishedWithError(const QString &name, const QString &message)Tp::PendingOperation [protected, slot]
setFinishedWithError(const QDBusError &error)Tp::PendingOperation [protected, slot]
~PendingOperation()Tp::PendingOperation [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00814.html0000644000175200001440000001150112000060453021620 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Callback7< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 > Member List
This is the complete list of members for Tp::Callback7< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >, including all inherited members.
BaseCallback()Tp::BaseCallback [inline]
BaseCallback(AbstractFunctorCaller *caller)Tp::BaseCallback [inline]
BaseCallback(const BaseCallback &other)Tp::BaseCallback [inline]
Callback7()Tp::Callback7< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 > [inline]
Callback7(const Functor &functor)Tp::Callback7< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 > [inline]
callerTp::BaseCallback [protected]
FunctionType typedefTp::Callback7< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >
isValid() const Tp::BaseCallback [inline]
operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6, Arg7 a7) const Tp::Callback7< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 > [inline]
operator=(const BaseCallback &other)Tp::BaseCallback [inline]
ResultType typedefTp::Callback7< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >
~BaseCallback()Tp::BaseCallback [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01135.html0000644000175200001440000002754212000060453021631 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceContactListInterface Member List
This is the complete list of members for Tp::Client::ConnectionInterfaceContactListInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
AuthorizePublication(const Tp::UIntList &contacts, int timeout=-1)Tp::Client::ConnectionInterfaceContactListInterface [inline, slot]
ConnectionInterfaceContactListInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceContactListInterface
ConnectionInterfaceContactListInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceContactListInterface
ConnectionInterfaceContactListInterface(Tp::DBusProxy *proxy)Tp::Client::ConnectionInterfaceContactListInterface
ConnectionInterfaceContactListInterface(const Tp::Client::ConnectionInterface &mainInterface)Tp::Client::ConnectionInterfaceContactListInterface [explicit]
ConnectionInterfaceContactListInterface(const Tp::Client::ConnectionInterface &mainInterface, QObject *parent)Tp::Client::ConnectionInterfaceContactListInterface
ContactListStateChanged(uint contactListState)Tp::Client::ConnectionInterfaceContactListInterface [signal]
ContactsChanged(const Tp::ContactSubscriptionMap &changes, const Tp::UIntList &removals)Tp::Client::ConnectionInterfaceContactListInterface [signal]
ContactsChangedWithID(const Tp::ContactSubscriptionMap &changes, const Tp::HandleIdentifierMap &identifiers, const Tp::HandleIdentifierMap &removals)Tp::Client::ConnectionInterfaceContactListInterface [signal]
Download(int timeout=-1)Tp::Client::ConnectionInterfaceContactListInterface [inline, slot]
GetContactListAttributes(const QStringList &interfaces, bool hold, int timeout=-1)Tp::Client::ConnectionInterfaceContactListInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ConnectionInterfaceContactListInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
RemoveContacts(const Tp::UIntList &contacts, int timeout=-1)Tp::Client::ConnectionInterfaceContactListInterface [inline, slot]
requestAllProperties() const Tp::Client::ConnectionInterfaceContactListInterface [inline]
requestPropertyCanChangeContactList() const Tp::Client::ConnectionInterfaceContactListInterface [inline]
requestPropertyContactListPersists() const Tp::Client::ConnectionInterfaceContactListInterface [inline]
requestPropertyContactListState() const Tp::Client::ConnectionInterfaceContactListInterface [inline]
requestPropertyDownloadAtConnection() const Tp::Client::ConnectionInterfaceContactListInterface [inline]
requestPropertyRequestUsesMessage() const Tp::Client::ConnectionInterfaceContactListInterface [inline]
RequestSubscription(const Tp::UIntList &contacts, const QString &message, int timeout=-1)Tp::Client::ConnectionInterfaceContactListInterface [inline, slot]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ConnectionInterfaceContactListInterface [inline, static]
Unpublish(const Tp::UIntList &contacts, int timeout=-1)Tp::Client::ConnectionInterfaceContactListInterface [inline, slot]
Unsubscribe(const Tp::UIntList &contacts, int timeout=-1)Tp::Client::ConnectionInterfaceContactListInterface [inline, slot]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00950.html0000644000175200001440000002557412000060453021640 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::StreamedMediaStream Member List
This is the complete list of members for Tp::StreamedMediaStream, including all inherited members.
actualFeatures() const Tp::ReadyObject [private, virtual]
becomeReady(const Features &requestedFeatures=Features())Tp::ReadyObject [private, virtual]
channel() const Tp::StreamedMediaStream
contact() const Tp::StreamedMediaStream
direction() const Tp::StreamedMediaStream
id() const Tp::StreamedMediaStream
isReady(const Features &features=Features()) const Tp::ReadyObject [private, virtual]
localSendingRequested() const Tp::StreamedMediaStream
localSendingState() const Tp::StreamedMediaStream
localSendingStateChanged(Tp::StreamedMediaStream::SendingState localSendingState)Tp::StreamedMediaStream [signal]
missingFeatures() const Tp::ReadyObject [private, virtual]
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
pendingSend() const Tp::StreamedMediaStream
propertyChanged(const QString &propertyName)Tp::Object [signal]
readinessHelper() const Tp::ReadyObject [private]
ReadyObject(RefCounted *object, const Feature &featureCore)Tp::ReadyObject [private]
ReadyObject(DBusProxy *proxy, const Feature &featureCore)Tp::ReadyObject [private]
receiving() const Tp::StreamedMediaStream
RefCounted()Tp::RefCounted [inline]
remoteSendingRequested() const Tp::StreamedMediaStream
remoteSendingState() const Tp::StreamedMediaStream
remoteSendingStateChanged(Tp::StreamedMediaStream::SendingState remoteSendingState)Tp::StreamedMediaStream [signal]
requestDirection(MediaStreamDirection direction)Tp::StreamedMediaStream
requestDirection(bool send, bool receive)Tp::StreamedMediaStream
requestedFeatures() const Tp::ReadyObject [private, virtual]
requestReceiving(bool receive)Tp::StreamedMediaStream
requestSending(bool send)Tp::StreamedMediaStream
sending() const Tp::StreamedMediaStream
SendingState enum nameTp::StreamedMediaStream
SendingStateNone enum valueTp::StreamedMediaStream
SendingStatePendingSend enum valueTp::StreamedMediaStream
SendingStateSending enum valueTp::StreamedMediaStream
startDTMFTone(DTMFEvent event)Tp::StreamedMediaStream
state() const Tp::StreamedMediaStream
stopDTMFTone()Tp::StreamedMediaStream
type() const Tp::StreamedMediaStream
~Object()Tp::Object [virtual]
~ReadyObject()Tp::ReadyObject [private, virtual]
~RefCounted()Tp::RefCounted [inline, virtual]
~StreamedMediaStream()Tp::StreamedMediaStream


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00741.html0000644000175200001440000000452012000060453021622 0ustar00collabora-develusers00000000000000 ChannelDispatchOperation proxies
   Home · All Classes · All Namespaces · Modules · Functions · Files
ChannelDispatchOperation proxies

Classes


Detailed Description

Proxy objects representing remote Telepathy ChannelDispatchOperation objects and their optional interfaces.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00191.html0000644000175200001440000001212312000060453021617 0ustar00collabora-develusers00000000000000 Tp::ContactAttributesMap Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactAttributesMap Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<uint, QVariantMap>, but needed to have a discrete type in the Qt type system.

Mapping returned by GetContactAttributes, representing a collection of Contacts and their requested attributes.


Constructor & Destructor Documentation

Tp::ContactAttributesMap::ContactAttributesMap ( const QMap< uint, QVariantMap > &  a) [inline]

Member Function Documentation

ContactAttributesMap& Tp::ContactAttributesMap::operator= ( const QMap< uint, QVariantMap > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_enum.html0000644000175200001440000000433512000060453024046 0ustar00collabora-develusers00000000000000 Class Members - Enumerations
   Home · All Classes · All Namespaces · Modules · Functions · Files
 


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00642_source.html0000644000175200001440000003327512000060453023213 0ustar00collabora-develusers00000000000000 pending-contacts.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
pending-contacts.h
00001 
00023 #ifndef _TelepathyQt_pending_contacts_h_HEADER_GUARD_
00024 #define _TelepathyQt_pending_contacts_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/PendingOperation>
00031 
00032 #include <QHash>
00033 #include <QList>
00034 #include <QMap>
00035 #include <QSet>
00036 #include <QStringList>
00037 
00038 #include <TelepathyQt/Types>
00039 #include <TelepathyQt/Contact>
00040 
00041 namespace Tp
00042 {
00043 
00044 class ContactManager;
00045 
00046 class TP_QT_EXPORT PendingContacts : public PendingOperation
00047 {
00048     Q_OBJECT
00049     Q_DISABLE_COPY(PendingContacts);
00050 
00051 public:
00052     ~PendingContacts();
00053 
00054     ContactManagerPtr manager() const;
00055     Features features() const;
00056 
00057     bool isForHandles() const;
00058     UIntList handles() const;
00059 
00060     bool isForIdentifiers() const;
00061     QStringList identifiers() const;
00062 
00063     bool isForVCardAddresses() const;
00064     QString vcardField() const;
00065     QStringList vcardAddresses() const;
00066 
00067     bool isForUris() const;
00068     QStringList uris() const;
00069 
00070     bool isUpgrade() const;
00071     QList<ContactPtr> contactsToUpgrade() const;
00072 
00073     QList<ContactPtr> contacts() const;
00074     UIntList invalidHandles() const;
00075     QStringList validIdentifiers() const;
00076     QHash<QString, QPair<QString, QString> > invalidIdentifiers() const;
00077     QStringList validVCardAddresses() const;
00078     QStringList invalidVCardAddresses() const;
00079     QStringList validUris() const;
00080     QStringList invalidUris() const;
00081 
00082 private Q_SLOTS:
00083     TP_QT_NO_EXPORT void onAttributesFinished(Tp::PendingOperation *);
00084     TP_QT_NO_EXPORT void onRequestHandlesFinished(Tp::PendingOperation *);
00085     TP_QT_NO_EXPORT void onAddressingGetContactsFinished(Tp::PendingOperation *);
00086     TP_QT_NO_EXPORT void onReferenceHandlesFinished(Tp::PendingOperation *);
00087     TP_QT_NO_EXPORT void onNestedFinished(Tp::PendingOperation *);
00088     TP_QT_NO_EXPORT void onInspectHandlesFinished(QDBusPendingCallWatcher *);
00089 
00090 private:
00091     friend class ContactManager;
00092 
00093     enum RequestType
00094     {
00095         ForHandles,
00096         ForIdentifiers,
00097         ForVCardAddresses,
00098         ForUris,
00099         Upgrade
00100     };
00101 
00102     // If errorName is non-empty, these will fail instantly
00103     TP_QT_NO_EXPORT PendingContacts(const ContactManagerPtr &manager, const UIntList &handles,
00104             const Features &features,
00105             const Features &missingFeatures,
00106             const QStringList &interfaces,
00107             const QMap<uint, ContactPtr> &satisfyingContacts,
00108             const QSet<uint> &otherContacts,
00109             const QString &errorName = QString(),
00110             const QString &errorMessage = QString());
00111     TP_QT_NO_EXPORT PendingContacts(const ContactManagerPtr &manager, const QStringList &list,
00112             RequestType requestType,
00113             const Features &features,
00114             const QStringList &interfaces,
00115             const QString &errorName = QString(),
00116             const QString &errorMessage = QString());
00117     TP_QT_NO_EXPORT PendingContacts(const ContactManagerPtr &manager, const QString &vcardField,
00118             const QStringList &vcardAddresses,
00119             const Features &features,
00120             const QStringList &interfaces,
00121             const QString &errorName = QString(),
00122             const QString &errorMessage = QString());
00123     TP_QT_NO_EXPORT PendingContacts(const ContactManagerPtr &manager, const QList<ContactPtr> &contacts,
00124             const Features &features,
00125             const QString &errorName = QString(),
00126             const QString &errorMessage = QString());
00127 
00128     TP_QT_NO_EXPORT void allAttributesFetched();
00129 
00130     struct Private;
00131     friend struct Private;
00132     Private *mPriv;
00133 };
00134 
00135 } // Tp
00136 
00137 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00904.html0000644000175200001440000001525312000060453021630 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingHandles Member List
This is the complete list of members for Tp::PendingHandles, including all inherited members.
connection() const Tp::PendingHandles
errorMessage() const Tp::PendingOperation
errorName() const Tp::PendingOperation
finished(Tp::PendingOperation *operation)Tp::PendingOperation [signal]
handles() const Tp::PendingHandles
handlesToReference() const Tp::PendingHandles
handleType() const Tp::PendingHandles
invalidHandles() const Tp::PendingHandles
invalidNames() const Tp::PendingHandles
isError() const Tp::PendingOperation
isFinished() const Tp::PendingOperation
isReference() const Tp::PendingHandles
isRequest() const Tp::PendingHandles
isValid() const Tp::PendingOperation
namesRequested() const Tp::PendingHandles
object() const Tp::PendingOperation [protected]
PendingOperation(const SharedPtr< RefCounted > &object)Tp::PendingOperation [protected]
setFinished()Tp::PendingOperation [protected, slot]
setFinishedWithError(const QString &name, const QString &message)Tp::PendingOperation [protected, slot]
setFinishedWithError(const QDBusError &error)Tp::PendingOperation [protected, slot]
validNames() const Tp::PendingHandles
~PendingHandles()Tp::PendingHandles
~PendingOperation()Tp::PendingOperation [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01073.html0000644000175200001440000002713512000060453021630 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::CallContentInterfaceMediaInterface Member List
This is the complete list of members for Tp::Client::CallContentInterfaceMediaInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
AcknowledgeDTMFChange(uchar event, uint state, int timeout=-1)Tp::Client::CallContentInterfaceMediaInterface [inline, slot]
CallContentInterfaceMediaInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::CallContentInterfaceMediaInterface
CallContentInterfaceMediaInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::CallContentInterfaceMediaInterface
CallContentInterfaceMediaInterface(Tp::DBusProxy *proxy)Tp::Client::CallContentInterfaceMediaInterface
CallContentInterfaceMediaInterface(const Tp::Client::CallContentInterface &mainInterface)Tp::Client::CallContentInterfaceMediaInterface [explicit]
CallContentInterfaceMediaInterface(const Tp::Client::CallContentInterface &mainInterface, QObject *parent)Tp::Client::CallContentInterfaceMediaInterface
DTMFChangeRequested(uchar event, uint state)Tp::Client::CallContentInterfaceMediaInterface [signal]
Fail(const Tp::CallStateReason &reason, int timeout=-1)Tp::Client::CallContentInterfaceMediaInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::CallContentInterfaceMediaInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
LocalMediaDescriptionChanged(const QVariantMap &updatedMediaDescription)Tp::Client::CallContentInterfaceMediaInterface [signal]
MediaDescriptionOfferDone()Tp::Client::CallContentInterfaceMediaInterface [signal]
MediaDescriptionsRemoved(const Tp::UIntList &removedMediaDescriptions)Tp::Client::CallContentInterfaceMediaInterface [signal]
NewMediaDescriptionOffer(const QDBusObjectPath &mediaDescription, const QVariantMap &properties)Tp::Client::CallContentInterfaceMediaInterface [signal]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
RemoteMediaDescriptionsChanged(const Tp::ContactMediaDescriptionPropertiesMap &updatedMediaDescriptions)Tp::Client::CallContentInterfaceMediaInterface [signal]
requestAllProperties() const Tp::Client::CallContentInterfaceMediaInterface [inline]
requestPropertyCurrentDTMFEvent() const Tp::Client::CallContentInterfaceMediaInterface [inline]
requestPropertyCurrentDTMFState() const Tp::Client::CallContentInterfaceMediaInterface [inline]
requestPropertyLocalMediaDescriptions() const Tp::Client::CallContentInterfaceMediaInterface [inline]
requestPropertyMediaDescriptionOffer() const Tp::Client::CallContentInterfaceMediaInterface [inline]
requestPropertyPacketization() const Tp::Client::CallContentInterfaceMediaInterface [inline]
requestPropertyRemoteMediaDescriptions() const Tp::Client::CallContentInterfaceMediaInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::CallContentInterfaceMediaInterface [inline, static]
UpdateLocalMediaDescription(const QVariantMap &mediaDescription, int timeout=-1)Tp::Client::CallContentInterfaceMediaInterface [inline, slot]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00003.html0000644000175200001440000000352612000060453021616 0ustar00collabora-develusers00000000000000 Accounts Example
   Home · All Classes · All Namespaces · Modules · Functions · Files
Accounts Example


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/tab_a.png0000644000175200001440000000021412000060453021670 0ustar00collabora-develusers00000000000000PNG  IHDR$[SIDATx흻 @wɡ*MIFL :nN N&_ ɭɾ}ն8~Owv-A4Y)}IENDB`telepathy-qt-0.9.3/doc/html/a00545_source.html0000644000175200001440000001766212000060453023217 0ustar00collabora-develusers00000000000000 contact-messenger.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
contact-messenger.h
00001 
00023 #ifndef _TelepathyQt_contact_messenger_h_HEADER_GUARD_
00024 #define _TelepathyQt_contact_messenger_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Constants>
00031 #include <TelepathyQt/Message>
00032 #include <TelepathyQt/Types>
00033 
00034 namespace Tp
00035 {
00036 
00037 class PendingSendMessage;
00038 class MessageContentPartList;
00039 
00040 class TP_QT_EXPORT ContactMessenger  : public QObject, public RefCounted
00041 {
00042     Q_OBJECT
00043     Q_DISABLE_COPY(ContactMessenger)
00044 
00045 public:
00046     static ContactMessengerPtr create(const AccountPtr &account, const ContactPtr &contact);
00047     static ContactMessengerPtr create(const AccountPtr &account, const QString &contactIdentifier);
00048 
00049     virtual ~ContactMessenger();
00050 
00051     AccountPtr account() const;
00052     QString contactIdentifier() const;
00053 
00054     QList<TextChannelPtr> textChats() const;
00055 
00056     PendingSendMessage *sendMessage(const QString &text,
00057             ChannelTextMessageType type = ChannelTextMessageTypeNormal,
00058             MessageSendingFlags flags = 0);
00059     PendingSendMessage *sendMessage(const MessageContentPartList &parts,
00060             MessageSendingFlags flags = 0);
00061 
00062 Q_SIGNALS:
00063     void messageSent(const Tp::Message &message, Tp::MessageSendingFlags flags,
00064             const QString &sentMessageToken, const Tp::TextChannelPtr &channel);
00065     void messageReceived(const Tp::ReceivedMessage &message, const Tp::TextChannelPtr &channel);
00066 
00067 private:
00068     TP_QT_NO_EXPORT ContactMessenger(const AccountPtr &account,
00069             const QString &contactIdentifier);
00070 
00071     struct Private;
00072     friend struct Private;
00073     Private *mPriv;
00074 };
00075 
00076 } // Tp
00077 
00078 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00884.html0000644000175200001440000001750112000060453021635 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ReceivedMessage Member List
This is the complete list of members for Tp::ReceivedMessage, including all inherited members.
dbusInterface() const Tp::Message
deliveryDetails() const Tp::ReceivedMessage
hasNonTextContent() const Tp::Message
header() const Tp::Message
isDeliveryReport() const Tp::ReceivedMessage
isFromChannel(const TextChannelPtr &channel) const Tp::ReceivedMessage
isRescued() const Tp::ReceivedMessage
isScrollback() const Tp::ReceivedMessage
isSpecificToDBusInterface() const Tp::Message
isTruncated() const Tp::Message
Message(ChannelTextMessageType, const QString &)Tp::Message
Message(const Message &other)Tp::Message
messageToken() const Tp::Message
messageType() const Tp::Message
operator!=(const Message &other) const Tp::Message [inline]
operator=(const ReceivedMessage &other)Tp::ReceivedMessage
Tp::Message::operator=(const Message &other)Tp::Message
operator==(const Message &other) const Tp::Message
part(uint index) const Tp::Message
parts() const Tp::Message
received() const Tp::ReceivedMessage
ReceivedMessage(const ReceivedMessage &other)Tp::ReceivedMessage
sender() const Tp::ReceivedMessage
senderNickname() const Tp::ReceivedMessage
sent() const Tp::Message
size() const Tp::Message
supersededToken() const Tp::ReceivedMessage
text() const Tp::Message
~Message()Tp::Message
~ReceivedMessage()Tp::ReceivedMessage


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00036.html0000644000175200001440000002202312000060453021615 0ustar00collabora-develusers00000000000000 Tp::AbstractFunctorCaller Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AbstractFunctorCaller Struct Reference

#include </home/collabora-devel/kde/src/telepathy-qt4/TelepathyQt/callbacks.h>

Inherited by Tp::BaseFunctorCaller< FunctorCaller0< Functor, R >, Functor >, Tp::BaseFunctorCaller< FunctorCaller1< Functor, R, Arg1 >, Functor >, Tp::BaseFunctorCaller< FunctorCaller2< Functor, R, Arg1, Arg2 >, Functor >, Tp::BaseFunctorCaller< FunctorCaller3< Functor, R, Arg1, Arg2, Arg3 >, Functor >, Tp::BaseFunctorCaller< FunctorCaller4< Functor, R, Arg1, Arg2, Arg3, Arg4 >, Functor >, Tp::BaseFunctorCaller< FunctorCaller5< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5 >, Functor >, Tp::BaseFunctorCaller< FunctorCaller6< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >, Functor >, Tp::BaseFunctorCaller< FunctorCaller7< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >, Functor >, and Tp::BaseFunctorCaller< T, Functor >.

List of all members.

Public Types

Public Member Functions

Public Attributes


Member Typedef Documentation

typedef void*(* Tp::AbstractFunctorCaller::HookType)(void *)

Constructor & Destructor Documentation


Member Function Documentation


Member Data Documentation


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_0x72.html0000644000175200001440000023761612000060453023614 0ustar00collabora-develusers00000000000000 Class Members
   Home · All Classes · All Namespaces · Modules · Functions · Files
Here is a list of all class members with links to the classes they belong to:

- r -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00786.html0000644000175200001440000002020312000060453021627 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::BaseConnection Member List
This is the complete list of members for Tp::BaseConnection, including all inherited members.
BaseConnection(const QDBusConnection &dbusConnection, const QString &cmName, const QString &protocolName, const QVariantMap &parameters)Tp::BaseConnection [protected]
busName() const Tp::DBusService
cmName() const Tp::BaseConnection
create(const QString &cmName, const QString &protocolName, const QVariantMap &parameters)Tp::BaseConnection [inline, static]
create(const QString &cmName, const QString &protocolName, const QVariantMap &parameters)Tp::BaseConnection [inline, static]
create(const QDBusConnection &dbusConnection, const QString &cmName, const QString &protocolName, const QVariantMap &parameters)Tp::BaseConnection [inline, static]
create(const QDBusConnection &dbusConnection, const QString &cmName, const QString &protocolName, const QVariantMap &parameters)Tp::BaseConnection [inline, static]
dbusConnection() const Tp::DBusService
dbusObject() const Tp::DBusService
DBusService(const QDBusConnection &dbusConnection)Tp::DBusService
disconnected()Tp::BaseConnection [signal]
immutableProperties() const Tp::BaseConnection [virtual]
isRegistered() const Tp::DBusService
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
objectPath() const Tp::DBusService
parameters() const Tp::BaseConnection
propertyChanged(const QString &propertyName)Tp::Object [signal]
protocolName() const Tp::BaseConnection
RefCounted()Tp::RefCounted [inline]
registerObject(DBusError *error=NULL)Tp::BaseConnection
registerObject(const QString &busName, const QString &objectPath, DBusError *error)Tp::BaseConnection [protected, virtual]
uniqueName() const Tp::BaseConnection [virtual]
~BaseConnection()Tp::BaseConnection [virtual]
~DBusService()Tp::DBusService [virtual]
~Object()Tp::Object [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00131.html0000644000175200001440000015760512000060453021630 0ustar00collabora-develusers00000000000000 Tp::Client::ChannelInterfaceSASLAuthenticationInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelInterfaceSASLAuthenticationInterface Class Reference

#include <TelepathyQt/Channel>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

  • QDBusPendingReply StartMechanism (const QString &mechanism, int timeout=-1)
  • QDBusPendingReply StartMechanismWithData (const QString &mechanism, const QByteArray &initialData, int timeout=-1)
  • QDBusPendingReply Respond (const QByteArray &responseData, int timeout=-1)
  • QDBusPendingReply AcceptSASL (int timeout=-1)
  • QDBusPendingReply AbortSASL (uint reason, const QString &debugMessage, int timeout=-1)

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Channel.Interface.SASLAuthentication".


Constructor & Destructor Documentation

Tp::Client::ChannelInterfaceSASLAuthenticationInterface::ChannelInterfaceSASLAuthenticationInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfaceSASLAuthenticationInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ChannelInterfaceSASLAuthenticationInterface::ChannelInterfaceSASLAuthenticationInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfaceSASLAuthenticationInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ChannelInterfaceSASLAuthenticationInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ChannelInterfaceSASLAuthenticationInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ChannelInterfaceSASLAuthenticationInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Channel.Interface.SASLAuthentication", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property AvailableMechanisms of type QStringList.

The SASL mechanisms as offered by the server, plus any pseudo-SASL mechanisms supported by the connection manager for credentials transfer. For instance, in a protocol that natively uses SASL (like XMPP), this might be [ "X-TELEPATHY-PASSWORD", "PLAIN", "DIGEST-MD5", "SCRAM-SHA-1" ].

To make it possible to implement a very simple password-querying user interface without knowledge of any particular SASL mechanism, implementations of this interface MUST implement the pseudo-mechanism X-TELEPATHY-PASSWORD, unless none of the available mechanisms use a password at all.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property HasInitialData of type bool.

If true, StartMechanismWithData() can be expected to work for SASL mechanisms not starting with X-TELEPATHY- (this is the case in most, but not all, protocols). If false, StartMechanism() must be used instead.

This property does not affect the X-TELEPATHY- pseudo-mechanisms such as X-TELEPATHY-PASSWORD, which can use StartMechanismWithData() regardless of the value of this property.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property CanTryAgain of type bool.

If true, StartMechanism() and (if supported) StartMechanismWithData() can be expected to work when in one of the Failed states. If false, the only thing you can do after failure is to close the channel.

Retrying isn't required to work, although some protocols and implementations allow it.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property SASLStatus of type uint.

The current status of this channel. Change notification is via the SASLStatusChanged() signal.
Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property SASLError of type QString.

The reason for the SASLStatus , or an empty string if the state is neither Server_Failed nor Client_Failed.

In particular, an ordinary authentication failure (as would be produced for an incorrect password) SHOULD be represented by AuthenticationFailed, cancellation by the user's request SHOULD be represented by Cancelled, and cancellation by a local process due to inconsistent or invalid challenges from the server SHOULD be represented by ServiceConfused.

If this interface appears on a ChannelTypeServerAuthenticationInterface channel, and connection to the server fails with an authentication failure, this error code SHOULD be copied into the ConnectionInterface::ConnectionError() signal.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property SASLErrorDetails of type QVariantMap.

If SASLError is non-empty, any additional information about the last disconnection; otherwise, the empty map. The keys and values are the same as for the second argument of ConnectionInterface::ConnectionError() .

If this interface appears on a ChannelTypeServerAuthenticationInterface channel, and connection to the server fails with an authentication failure, these details SHOULD be copied into the ConnectionInterface::ConnectionError() signal.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property AuthorizationIdentity of type QString.

The identity for which authorization is being attempted, typically the 'account' from the ConnectionManagerInterface::RequestConnection() parameters, normalized and formatted according to the conventions used for SASL in this protocol.

The normalization used for SASL might not be the same normalization used elsewhere: for instance, in a protocol with email-like identifiers such as XMPP or SIP, the user "juliet@example.com" might have to authenticate to the example.com server via SASL PLAIN as "juliet".

This is usually achieved by using the authorization identity for authentication, but an advanced Handler could offer the option to authenticate under a different identity.

The terminology used here is that the authorization identity is who you want to act as, and the authentication identity is used to prove that you may do so. For instance, if Juliet is authorized to access a role account, "sysadmin@example.com", and act on its behalf, it might be possible to authenticate as "juliet@example.com" with her own password, but request to be authorized as "sysadmin@example.com" instead of her own account. See RFC 4422 §3.4.1 for more details.

In SASL the authorization identity is normally guessed from the authentication identity, but the information available to the connection manager is the identity for which authorization is required, such as the desired JID in XMPP, so that's what we signal to UIs; it's up to the UI to choose whether to authenticate as the authorization identity or some other identity.

As a concrete example, the "sysadmin" XMPP account mentioned above would have { 'account': 'sysadmin@example.com' } in its Parameters, and this property would also be 'sysadmin@example.com'. A simple Handler would merely prompt for sysadmin@example.com's password, and use that JID as both the authorization and authentication identity, which might result in SASL PLAIN authentication with the initial response '\\000sysadmin@example.com\\000root'.

A more advanced Handler might also ask for an authentication identity, defaulting to 'sysadmin@example.com'; if Juliet provided authentication identity 'juliet@example.com' and password 'romeo', the Handler might perform SASL PLAIN authentication using the initial response 'sysadmin@example.com\\000juliet@example.com\\000romeo'.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property DefaultUsername of type QString.

The default username for use with SASL mechanisms that deal with a "simple username" (as defined in RFC 4422). If such a SASL mechanism is in use, clients SHOULD default to using the DefaultUsername; also, if the client uses the DefaultUsername, it SHOULD assume that the authorization identity AuthorizationIdentity will be derived from it by the server.

In XMPP, servers typically expect "user@example.com" to authenticate with username "user"; this was a SHOULD in RFC 3920.

3920bis weakens that SHOULD to "in the absence of local information provided by the server, an XMPP client SHOULD assume that the authentication identity for such a SASL mechanism is the combination of a user name and password, where the simple user name is the localpart of the user's JID".

For example, in the simple case, if the user connects with ConnectionManagerInterface::RequestConnection() ({ account: "user@example.com" }) and use PLAIN with password "password", he or she should authenticate like so: "\\0user\\0password" and the channel will look like this:

{ "...  DefaultUsername   ": "user",
   "...  AuthorizationIdentity   ": "user@example.com }
 

In the complex case, if the same user is using his or her sysadmin powers to log in as the "announcements" role address, he or she would connect with ConnectionManagerInterface::RequestConnection() ({ account: "announcements@example.com" }) and the SASL channel would look like this:

{ "...  DefaultUsername   ": "announcements",
   "...  AuthorizationIdentity   ": "announcements@example.com }
 

A sufficiently elaborate UI could give the opportunity to override the username from "announcements" to "user". The user's simple username is still "user", and the password is still "password", but this time he or she is trying to authorize to act as announcements@example.com, so the UI would have to perform SASL PLAIN with this string: "announcements@example.com\\0user\\0password", where "announcements@example.com" is the AuthorizationIdentity .

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property DefaultRealm of type QString.

The default realm (as defined in RFC 2831) to use for authentication, if the server does not supply one.

The server is not required to provide a realm; if it doesn't, the client is expected to ask the user or provide a sensible default, typically the requested DNS name of the server. In some implementations of DIGEST-MD5, the server does not specify a realm, but expects that the client will choose a particular default, and authentication will fail if the client's default is different. Connection managers for protocols where this occurs are more easily able to work around these implementations than a generic client would be.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property MaySaveResponse of type bool.

Whether or not the client can save the authentication response and re-use it to automate future authentication challenges.

If this property is False, the client SHOULD NOT attempt to cache the authentication response in its own keyring.

If this property is not specified, it should be treated as if it were True.

Some protocols or services may have terms and conditions that prohibit caching a user's credentials.
Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::ChannelInterfaceSASLAuthenticationInterface::StartMechanism ( const QString &  mechanism,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method StartMechanism on the remote object.

Start an authentication try using Mechanism, without sending initial data (an "initial response" as defined in RFC 4422).

This method is appropriate for mechanisms where the client cannot send anything until it receives a challenge from the server, such as DIGEST-MD5 in "initial authentication" mode.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
mechanismThe chosen mechanism.
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ChannelInterfaceSASLAuthenticationInterface::StartMechanismWithData ( const QString &  mechanism,
const QByteArray &  initialData,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method StartMechanismWithData on the remote object.

Start an authentication try using Mechanism, and send Initial_Data as the "initial response" defined in RFC 4422 §3.3.

This method is appropriate for mechanisms where the client may send data first, such as PLAIN, or must send data first, such as DIGEST-MD5 in "subsequent authentication" mode.

Having two methods allows any mechanism where it makes a difference to distinguish between the absence of an initial response ( StartMechanism() ) and a zero-byte initial response (StartMechanismWithData, with Initial_Data empty).

If the HasInitialData property is false, this indicates that the underlying protocol does not make it possible to send initial data. In such protocols, this method may only be used for the X-TELEPATHY- pseudo-mechanisms (such as X-TELEPATHY-PASSWORD), and will fail if used with an ordinary SASL mechanism.

For instance, the IRC SASL extension implemented in Charybdis and Atheme does not support initial data - the first message in the exchange only carries the mechanism. This is significant if using DIGEST-MD5, which cannot be used in the faster "subsequent authentication" mode on a protocol not supporting initial data.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
mechanismThe chosen mechanism.
initialDataInitial data (an "initial response" in RFC 4422's terminology) to send with the mechanism.
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ChannelInterfaceSASLAuthenticationInterface::Respond ( const QByteArray &  responseData,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method Respond on the remote object.

Send a response to the the last challenge received via NewChallenge() .

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
responseDataThe response data.
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ChannelInterfaceSASLAuthenticationInterface::AcceptSASL ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method AcceptSASL on the remote object.

If the channel's status is SASL_Status_Server_Succeeded, this method confirms successful authentication and advances the status of the channel to SASL_Status_Succeeded.

If the channel's status is SASL_Status_In_Progress, calling this method indicates that the last NewChallenge() signal was in fact additional data sent after a successful SASL negotiation, and declares that from the client's point of view, authentication was successful. This advances the state of the channel to SASL_Status_Client_Accepted.

In mechanisms where the server authenticates itself to the client, calling this method indicates that the client considers this to have been successful. In the case of ChannelTypeServerAuthenticationInterface channels, this means that the connection manager MAY continue to connect, and MAY advance the ConnectionInterface::Status to Connected.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ChannelInterfaceSASLAuthenticationInterface::AbortSASL ( uint  reason,
const QString &  debugMessage,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method AbortSASL on the remote object.

Abort the current authentication try.

If the current status is SASL_Status_Server_Failed or SASL_Status_Client_Failed, this method returns successfully, but has no further effect. If the current status is SASL_Status_Succeeded or SASL_Status_Client_Accepted then NotAvailable is raised. Otherwise, it changes the channel's state to SASL_Status_Client_Failed, with an appropriate error name and reason code.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
reasonReason for abort.
debugMessageDebug message for abort.
timeoutThe timeout in milliseconds.
void Tp::Client::ChannelInterfaceSASLAuthenticationInterface::SASLStatusChanged ( uint  status,
const QString &  reason,
const QVariantMap &  details 
) [signal]

Represents the signal SASLStatusChanged on the remote object.

Emitted when the status of the channel changes.

Parameters:
statusThe new value of SASLStatus.
reasonThe new value of SASLError.
detailsThe new value of SASLErrorDetails.
void Tp::Client::ChannelInterfaceSASLAuthenticationInterface::NewChallenge ( const QByteArray &  challengeData) [signal]

Represents the signal NewChallenge on the remote object.

Emitted when a new challenge is received from the server, or when a message indicating successful authentication and containing additional data is received from the server.

When the channel's handler is ready to proceed, it should respond to the challenge by calling Respond() , or respond to the additional data by calling AcceptSASL() . Alternatively, it may call AbortSASL() to abort authentication.

Parameters:
challengeDataThe challenge data or additional data from the server.
void Tp::Client::ChannelInterfaceSASLAuthenticationInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00051.html0000644000175200001440000001216012000060453021613 0ustar00collabora-develusers00000000000000 Tp::AddressingNormalizationMap Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AddressingNormalizationMap Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<QString, uint>, but needed to have a discrete type in the Qt type system.

A map from URIs/vCard addresses to the corresponding handle.


Constructor & Destructor Documentation

Tp::AddressingNormalizationMap::AddressingNormalizationMap ( const QMap< QString, uint > &  a) [inline]

Member Function Documentation

AddressingNormalizationMap& Tp::AddressingNormalizationMap::operator= ( const QMap< QString, uint > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00137.html0000644000175200001440000011106712000060453021626 0ustar00collabora-develusers00000000000000 Tp::ChannelRequest Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The ChannelRequest class represents a Telepathy channel request. More...

#include <TelepathyQt/ChannelRequest>

Inherits Tp::StatefulDBusProxy, and Tp::OptionalInterfaceFactory< ChannelRequest >.

List of all members.

Signals

  • void failed (const QString &errorName, const QString &errorMessage)
  • void succeeded (const Tp::ChannelPtr &channel)

Public Member Functions

Static Public Member Functions

  • static ChannelRequestPtr create (const QDBusConnection &bus, const QString &objectPath, const QVariantMap &immutableProperties, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory)
  • static ChannelRequestPtr create (const AccountPtr &account, const QString &objectPath, const QVariantMap &immutableProperties)

Static Public Attributes

Protected Member Functions


Detailed Description

The ChannelRequest class represents a Telepathy channel request.

A channel request is an object in the channel dispatcher representing an ongoing request for some channels to be created or found. There can be any number of channel request objects at the same time.

A channel request can be cancelled by any client (not just the one that requested it). This means that the channel dispatcher will close the resulting channel, or refrain from requesting it at all, rather than dispatching it to a handler.

See Asynchronous Object Model


Constructor & Destructor Documentation

Class destructor.

Tp::ChannelRequest::ChannelRequest ( const QDBusConnection &  bus,
const QString &  objectPath,
const QVariantMap &  immutableProperties,
const AccountFactoryConstPtr &  accountFactory,
const ConnectionFactoryConstPtr &  connectionFactory,
const ChannelFactoryConstPtr &  channelFactory,
const ContactFactoryConstPtr &  contactFactory 
) [protected]

Construct a new channel request object using the given bus and the given factories.

Parameters:
busQDBusConnection to use.
objectPathThe channel request object path.
accountFactoryThe account factory to use.
connectionFactoryThe connection factory to use.
channelFactoryThe channel factory to use.
contactFactoryThe contact factory to use.
immutablePropertiesThe immutable properties of the channel request.
Returns:
A ChannelRequestPtr object pointing to the newly created ChannelRequest.
Tp::ChannelRequest::ChannelRequest ( const AccountPtr &  account,
const QString &  objectPath,
const QVariantMap &  immutableProperties 
) [protected]

Construct a new channel request object using the given account.

The constructed instance will use the factories from the account.

Parameters:
accountAccount to use.
objectPathThe channel request object path.
immutablePropertiesThe immutable properties of the channel request.
Returns:
A ChannelRequestPtr object pointing to the newly created ChannelRequest.

Member Function Documentation

ChannelRequestPtr Tp::ChannelRequest::create ( const QDBusConnection &  bus,
const QString &  objectPath,
const QVariantMap &  immutableProperties,
const AccountFactoryConstPtr &  accountFactory,
const ConnectionFactoryConstPtr &  connectionFactory,
const ChannelFactoryConstPtr &  channelFactory,
const ContactFactoryConstPtr &  contactFactory 
) [static]

Create a new channel request object using the given bus and the given factories.

Parameters:
objectPathThe channel request object path.
immutablePropertiesThe channel request immutable properties.
accountFactoryThe account factory to use.
connectionFactoryThe connection factory to use.
channelFactoryThe channel factory to use.
contactFactoryThe contact factory to use.
Returns:
A ChannelRequestPtr object pointing to the newly created ChannelRequest object.
ChannelRequestPtr Tp::ChannelRequest::create ( const AccountPtr &  account,
const QString &  objectPath,
const QVariantMap &  immutableProperties 
) [static]

Create a new channel request object for the given account.

The returned instance will use factories from the account.

Parameters:
accountThe account that the request was made through.
objectPathThe channel request object path.
immutablePropertiesThe channel request immutable properties.
Returns:
A ChannelRequestPtr object pointing to the newly created ChannelRequest object.
AccountPtr Tp::ChannelRequest::account ( ) const

Return the account on which this request was made.

This method can be used even before the ChannelRequest is ready, in which case the account object corresponding to the immutable properties is returned. In this case, the Account object is not necessarily ready either. This is useful for eg. matching ChannelRequests from ClientHandlerInterface::addRequest() with existing accounts in the application: either by object path, or if account factories are in use, even by object identity.

If the account is not provided in the immutable properties, this will only return a non-NULL AccountPtr once ChannelRequest::FeatureCore is ready on this object.

Returns:
A pointer to the Account object.

Return the time at which the user action occurred, or 0 if this channel request is for some reason not involving user action.

Unix developers: this corresponds to the _NET_WM_USER_TIME property in EWMH.

This property is set when the channel request is created, and can never change.

This method can be used even before the ChannelRequest is ready: in this case, the user action time from the immutable properties, if any, is returned.

Returns:
The time at which the user action occurred as QDateTime.

Return either the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable.

This property is set when the channel request is created, and can never change.

This method can be used even before the ChannelRequest is ready: in this case, the preferred handler from the immutable properties, if any, is returned.

Returns:
The preferred handler, or an empty string if any handler would be acceptable.

Return the desirable properties for the channel or channels to be created, as specified when placing the request in the first place.

This property is set when the channel request is created, and can never change.

This method can be used even before the ChannelRequest is ready: in this case, the requested channel properties from the immutable properties, if any, are returned. This is useful for e.g. matching ChannelRequests from ClientHandlerInterface::addRequest() with existing requests in the application (by the target ID or handle, most likely).

Returns:
The requested desirable channel properties as a list of QualifiedPropertyValueMap objects.

Return the dictionary of metadata provided by the channel requester when requesting the channel.

This property is set when the channel request is created, and can never change.

This method can be used even before the ChannelRequest is ready: in this case, the requested channel properties from the immutable properties, if any, are returned. This is useful for e.g. matching ChannelRequests from ClientHandlerInterface::addRequest() with existing requests in the application (by the target ID or handle, most likely).

See also:
Account::supportsRequestHints()
Returns:
The hints in the request as a ChannelRequestHints object, if any.

Return all of the immutable properties passed to this object when created.

This is useful for e.g. getting to domain-specific properties of channel requests.

Returns:
The immutable properties as QVariantMap.

Cancel the channel request.

If failed() is emitted in response to this method, the error will be TP_QT_ERROR_CANCELLED.

If the channel has already been dispatched to a handler, then it's too late to call this method, and the channel request will no longer exist.

Returns:
A PendingOperation which will emit PendingOperation::finished when the call has finished.
ChannelPtr Tp::ChannelRequest::channel ( ) const

Return the Channel which this request succeeded with, if any.

This will only ever be populated if Account::requestsSucceedWithChannel() is true, and succeeded() has already been emitted on this ChannelRequest. Note that a PendingChannelRequest being successfully finished already implies succeeded() has been emitted.

Returns:
A pointer to the Channel object, or a null ChannelPtr if there isn't any.
void Tp::ChannelRequest::failed ( const QString &  errorName,
const QString &  errorMessage 
) [signal]

Emitted when the channel request has failed. No further methods must not be called on it.

Parameters:
errorNameThe name of a D-Bus error.
errorMessageThe error message.
See also:
succeeded()
void Tp::ChannelRequest::succeeded ( const Tp::ChannelPtr &  channel) [signal]

Emitted when the channel request has succeeded. No further methods must not be called on it.

The channel parameter can be used to observe the channel resulting from the request (e.g. for it getting closed). The pointer may be NULL if the Channel Dispatcher implementation is too old. Whether a non-NULL channel can be expected can be checked with Account::requestsSucceedWithChannel().

If there is a channel, it will be of the subclass determined by and made ready (or not) according to the settings of the ChannelFactory on the Account the request was made through.

Parameters:
channelPointer to a proxy for the resulting channel, if the Channel Dispatcher reported it.
See also:
failed()

Return the ChannelRequestInterface for this ChannelRequest class. This method is protected since the convenience methods provided by this class should always be used instead of the interface by users of the class.

Returns:
A pointer to the existing Client::ChannelRequestInterface object for this ChannelRequest object.

Member Data Documentation

Feature representing the core that needs to become ready to make the ChannelRequest object usable.

Note that this feature must be enabled in order to use most ChannelRequest methods.

When calling isReady(), becomeReady(), this feature is implicitly added to the requested features.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01139.html0000644000175200001440000002032212000060453021622 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfacePowerSavingInterface Member List
This is the complete list of members for Tp::Client::ConnectionInterfacePowerSavingInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ConnectionInterfacePowerSavingInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfacePowerSavingInterface
ConnectionInterfacePowerSavingInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfacePowerSavingInterface
ConnectionInterfacePowerSavingInterface(Tp::DBusProxy *proxy)Tp::Client::ConnectionInterfacePowerSavingInterface
ConnectionInterfacePowerSavingInterface(const Tp::Client::ConnectionInterface &mainInterface)Tp::Client::ConnectionInterfacePowerSavingInterface [explicit]
ConnectionInterfacePowerSavingInterface(const Tp::Client::ConnectionInterface &mainInterface, QObject *parent)Tp::Client::ConnectionInterfacePowerSavingInterface
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ConnectionInterfacePowerSavingInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
PowerSavingChanged(bool active)Tp::Client::ConnectionInterfacePowerSavingInterface [signal]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ConnectionInterfacePowerSavingInterface [inline]
requestPropertyPowerSavingActive() const Tp::Client::ConnectionInterfacePowerSavingInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
SetPowerSaving(bool activate, int timeout=-1)Tp::Client::ConnectionInterfacePowerSavingInterface [inline, slot]
staticInterfaceName()Tp::Client::ConnectionInterfacePowerSavingInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00410.html0000644000175200001440000002474012000060453021621 0ustar00collabora-develusers00000000000000 Tp::StreamTubeServer::Tube Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::StreamTubeServer::Tube Class Reference

The StreamTubeServer::Tube class represents a tube being handled by the server. More...

#include <TelepathyQt/StreamTubeServer>

List of all members.

Public Member Functions


Detailed Description

The StreamTubeServer::Tube class represents a tube being handled by the server.


Constructor & Destructor Documentation

Constructs a new invalid Tube instance.

Tp::StreamTubeServer::Tube::Tube ( const AccountPtr &  account,
const OutgoingStreamTubeChannelPtr &  channel 
)

Constructs a Tube instance for the given tube channel originating from the given account.

Parameters:
accountA pointer to the account object.
channelA pointer to the tube channel object.

Copy constructor.

Class destructor.


Member Function Documentation

bool Tp::StreamTubeServer::Tube::isValid ( ) const [inline]

Return whether or not the tube is valid or is just the null object created using the default constructor.

Returns:
true if valid, false otherwise.
StreamTubeServer::Tube & Tp::StreamTubeServer::Tube::operator= ( const Tube other)

Assignment operator.

AccountPtr Tp::StreamTubeServer::Tube::account ( ) const [inline]

Return the account from which the tube originates.

Returns:
A pointer to the account object.
OutgoingStreamTubeChannelPtr Tp::StreamTubeServer::Tube::channel ( ) const [inline]

Return the actual tube channel.

Returns:
A pointer to the channel.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00035.html0000644000175200001440000003067712000060453021632 0ustar00collabora-develusers00000000000000 Tp::AbstractDBusServiceInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AbstractDBusServiceInterface Class Reference

Base class for D-Bus service interfaces. More...

#include <TelepathyQt/AbstractDBusServiceInterface>

Inherits Tp::Object.

Inherited by Tp::AbstractProtocolInterface.

List of all members.

Public Member Functions

Protected Member Functions


Detailed Description

Base class for D-Bus service interfaces.

This class serves as a base for all the classes that are used to implement interfaces that sit on top of D-Bus services.


Constructor & Destructor Documentation

Construct an AbstractDBusServiceInterface that implements the interface with the given interfaceName.

Parameters:
interfaceNameThe name of the interface that this class implements.

Member Function Documentation

Return the name of the interface that this class implements, as given on the constructor.

Returns:
The name of the interface that this class implements.
QVariantMap Tp::AbstractDBusServiceInterface::immutableProperties ( ) const [pure virtual]

Return the immutable properties of this interface.

Immutable properties cannot change after the interface has been registered on a service on the bus with registerInterface().

Returns:
The immutable properties of this interface.

Implemented in Tp::BaseProtocolPresenceInterface, Tp::BaseProtocolAvatarsInterface, and Tp::BaseProtocolAddressingInterface.

Return the DBusObject on which the adaptor of this interface is plugged.

This is only accessible after the interface has been registered with registerInterface().

Returns:
a pointer to the DBusObject on which the adaptor of this interface is plugged.
See also:
DBusService::dbusObject()

Return whether this interface has been registered.

Returns:
true if the service has been registered, or false otherwise.
See also:
registerInterface()
bool Tp::AbstractDBusServiceInterface::registerInterface ( DBusObject dbusObject) [protected, virtual]

Registers this interface by plugging its adaptor on the given dbusObject.

Parameters:
dbusObjectThe object on which to plug the adaptor.
Returns:
false if the interface has already been registered, or true otherwise.
See also:
isRegistered()
void Tp::AbstractDBusServiceInterface::createAdaptor ( ) [protected, pure virtual]

Create the adaptor for this interface.

Subclasses should reimplement this appropriately.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00392.html0000644000175200001440000000732412000060453021631 0ustar00collabora-develusers00000000000000 Tp::SocketNetmaskIPv4 Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::SocketNetmaskIPv4 Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

An IPv4 network or subnet.


Member Data Documentation

A dotted-quad IPv4 address literal: four ASCII decimal numbers, each between 0 and 255 inclusive, e.g. "192.168.0.1".

The number of leading bits of the address that must match, for this netmask to be considered to match an address.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00911.html0000644000175200001440000001226312000060453021624 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingVariantMap Member List
This is the complete list of members for Tp::PendingVariantMap, including all inherited members.
errorMessage() const Tp::PendingOperation
errorName() const Tp::PendingOperation
finished(Tp::PendingOperation *operation)Tp::PendingOperation [signal]
isError() const Tp::PendingOperation
isFinished() const Tp::PendingOperation
isValid() const Tp::PendingOperation
object() const Tp::PendingOperation [protected]
PendingOperation(const SharedPtr< RefCounted > &object)Tp::PendingOperation [protected]
PendingVariantMap(QDBusPendingCall call, const SharedPtr< RefCounted > &object)Tp::PendingVariantMap
result() const Tp::PendingVariantMap
setFinished()Tp::PendingOperation [protected, slot]
setFinishedWithError(const QString &name, const QString &message)Tp::PendingOperation [protected, slot]
setFinishedWithError(const QDBusError &error)Tp::PendingOperation [protected, slot]
~PendingOperation()Tp::PendingOperation [virtual]
~PendingVariantMap()Tp::PendingVariantMap


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00172.html0000644000175200001440000005560212000060453021627 0ustar00collabora-develusers00000000000000 Tp::Client::ConnectionInterfaceClientTypesInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceClientTypesInterface Class Reference

#include <TelepathyQt/Connection>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Connection.Interface.ClientTypes".


Constructor & Destructor Documentation

Tp::Client::ConnectionInterfaceClientTypesInterface::ConnectionInterfaceClientTypesInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceClientTypesInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ConnectionInterfaceClientTypesInterface::ConnectionInterfaceClientTypesInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceClientTypesInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ConnectionInterfaceClientTypesInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ConnectionInterfaceClientTypesInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ConnectionInterfaceClientTypesInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Connection.Interface.ClientTypes", which this class represents.

Returns:
The D-Bus interface name.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply<Tp::ContactClientTypes> Tp::Client::ConnectionInterfaceClientTypesInterface::GetClientTypes ( const Tp::UIntList contacts,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method GetClientTypes on the remote object.

Return the client types of the given contacts, if they are already known. If any of the given contacts' client types are not known, request their current client types, but return immediately without waiting for a reply; if a reply with a non-empty client type array is later received for those contacts, the ClientTypesUpdated signal will be emitted for them. This method is appropriate for "lazy" client type finding, for instance displaying the client types (if available) of everyone in your contact list.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
contactsThe contacts whose client types should be returned or signalled.
timeoutThe timeout in milliseconds.
Returns:

The contacts' client types, if already known. Contacts whose client types are not already known are omitted from the mapping; contacts known to have no client type information appear in the mapping with an empty list.

QDBusPendingReply<QStringList> Tp::Client::ConnectionInterfaceClientTypesInterface::RequestClientTypes ( uint  contact,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method RequestClientTypes on the remote object.

Return the current client types of the given contact. If necessary, make a request to the server for up-to-date information, and wait for a reply. This method is appropriate for use in a "Contact Information..." dialog; it can be used to show progress information (while waiting for the method to return), and can distinguish between various error conditions.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
contactThe contact whose client types should be returned.
timeoutThe timeout in milliseconds.
Returns:

The contact's client types. It MAY be empty, indicating that no client type information was found.

void Tp::Client::ConnectionInterfaceClientTypesInterface::ClientTypesUpdated ( uint  contact,
const QStringList &  clientTypes 
) [signal]

Represents the signal ClientTypesUpdated on the remote object.

Emitted when a contact's client types change or become known.

Parameters:
contactThe contact.
clientTypesThe contact's client types, or an empty list to indicate that nothing is known about the contact's client types.
void Tp::Client::ConnectionInterfaceClientTypesInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00455_source.html0000644000175200001440000000471112000060453023206 0ustar00collabora-develusers00000000000000 call-stream-endpoint.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
call-stream-endpoint.h
00001 
00023 #ifndef _TelepathyQt_call_stream_endpoint_h_HEADER_GUARD_
00024 #define _TelepathyQt_call_stream_endpoint_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/_gen/cli-call-stream-endpoint.h>
00031 
00032 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01029.html0000644000175200001440000000431512000060453021624 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::SocketAddressIPv6 Member List
This is the complete list of members for Tp::SocketAddressIPv6, including all inherited members.
addressTp::SocketAddressIPv6
portTp::SocketAddressIPv6


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01121.html0000644000175200001440000001713012000060453021614 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ProtocolInterfacePresenceInterface Member List
This is the complete list of members for Tp::Client::ProtocolInterfacePresenceInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ProtocolInterfacePresenceInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
ProtocolInterfacePresenceInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ProtocolInterfacePresenceInterface
ProtocolInterfacePresenceInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ProtocolInterfacePresenceInterface
ProtocolInterfacePresenceInterface(Tp::DBusProxy *proxy)Tp::Client::ProtocolInterfacePresenceInterface
ProtocolInterfacePresenceInterface(const Tp::Client::ConnectionManagerInterface &mainInterface)Tp::Client::ProtocolInterfacePresenceInterface [explicit]
ProtocolInterfacePresenceInterface(const Tp::Client::ConnectionManagerInterface &mainInterface, QObject *parent)Tp::Client::ProtocolInterfacePresenceInterface
requestAllProperties() const Tp::Client::ProtocolInterfacePresenceInterface [inline]
requestPropertyStatuses() const Tp::Client::ProtocolInterfacePresenceInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ProtocolInterfacePresenceInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00747.html0000644000175200001440000000322412000060453021630 0ustar00collabora-develusers00000000000000 Channel service implementation
   Home · All Classes · All Namespaces · Modules · Functions · Files
Channel service implementation

Classes to implement Telepathy Channel objects and their optional interfaces.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01051.html0000644000175200001440000000512712000060453021621 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::NotDelegatedMap Member List
This is the complete list of members for Tp::NotDelegatedMap, including all inherited members.
NotDelegatedMap()Tp::NotDelegatedMap [inline]
NotDelegatedMap(const QMap< QDBusObjectPath, NotDelegatedError > &a)Tp::NotDelegatedMap [inline]
operator=(const QMap< QDBusObjectPath, NotDelegatedError > &a)Tp::NotDelegatedMap [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00315.html0000644000175200001440000004535412000060453021631 0ustar00collabora-develusers00000000000000 Tp::PendingContacts Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingContacts Class Reference

The PendingContacts class is used by ContactManager when creating/updating Contact objects. More...

#include <TelepathyQt/PendingContacts>

Inherits Tp::PendingOperation.

List of all members.

Public Member Functions


Detailed Description

The PendingContacts class is used by ContactManager when creating/updating Contact objects.

See Asynchronous Object Model


Constructor & Destructor Documentation


Member Function Documentation

ContactManagerPtr Tp::PendingContacts::manager ( ) const
QStringList Tp::PendingContacts::identifiers ( ) const
QStringList Tp::PendingContacts::vcardAddresses ( ) const
QStringList Tp::PendingContacts::uris ( ) const
QList< ContactPtr > Tp::PendingContacts::contactsToUpgrade ( ) const
QList< ContactPtr > Tp::PendingContacts::contacts ( ) const
QHash< QString, QPair< QString, QString > > Tp::PendingContacts::invalidIdentifiers ( ) const
QStringList Tp::PendingContacts::validUris ( ) const
QStringList Tp::PendingContacts::invalidUris ( ) const


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00163.html0000644000175200001440000004555412000060453021634 0ustar00collabora-develusers00000000000000 Tp::ConnectionFactory Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The ConnectionFactory class is responsible for constructing Connection objects according to application-defined settings. More...

#include <TelepathyQt/ConnectionFactory>

Inherits Tp::FixedFeatureFactory.

List of all members.

Public Member Functions

  • virtual ~ConnectionFactory ()
  • PendingReady * proxy (const QString &busName, const QString &objectPath, const ChannelFactoryConstPtr &chanFactory, const ContactFactoryConstPtr &contactFactory) const

Static Public Member Functions

Protected Member Functions

  • ConnectionFactory (const QDBusConnection &bus, const Features &features)
  • virtual ConnectionPtr construct (const QString &busName, const QString &objectPath, const ChannelFactoryConstPtr &chanFactory, const ContactFactoryConstPtr &contactFactory) const
  • virtual QString finalBusNameFrom (const QString &uniqueOrWellKnown) const

Detailed Description

The ConnectionFactory class is responsible for constructing Connection objects according to application-defined settings.

The class is used by Account and other classes which construct Connection proxy instances to enable sharing instances of application-defined Connection subclasses with certain features always ready.


Constructor & Destructor Documentation

Class destructor.

Tp::ConnectionFactory::ConnectionFactory ( const QDBusConnection &  bus,
const Features features 
) [protected]

Construct a new ConnectionFactory object.

As in create(), it should be noted that unlike Connection::becomeReady(), FeatureCore isn't assumed. If no features are specified, no Connection::becomeReady() call is made at all and the proxy won't be Connection::isReady().

Parameters:
busThe QDBusConnection for proxies constructed using this factory to use.
featuresThe features to make ready on constructed Connections.

Member Function Documentation

ConnectionFactoryPtr Tp::ConnectionFactory::create ( const QDBusConnection &  bus,
const Features features = Features() 
) [static]

Create a new ConnectionFactory object.

Optionally, the features to make ready on all constructed proxies can be specified. The default is to make no features ready. It should be noted that unlike Connection::becomeReady(), FeatureCore isn't assumed. If no features are specified, which is the default behavior, no Connection::becomeReady() call is made at all and the proxy won't be Connection::isReady().

Parameters:
busThe QDBusConnection for proxies constructed using this factory to use.
featuresThe features to make ready on constructed Connections.
Returns:
A ConnectionFactoryPtr object pointing to the newly created ConnectionFactory object.
PendingReady * Tp::ConnectionFactory::proxy ( const QString &  busName,
const QString &  objectPath,
const ChannelFactoryConstPtr &  chanFactory,
const ContactFactoryConstPtr &  contactFactory 
) const

Constructs a Connection proxy and begins making it ready.

If a valid proxy already exists in the factory cache for the given combination of busName and objectPath, it is returned instead. All newly created proxies are automatically cached until they're either DBusProxy::invalidated() or the last reference to them outside the factory has been dropped.

The proxy can be accessed immediately after this function returns using PendingReady::proxy(). The ready operation only finishes, however, when the features specified by features(), if any, are made ready as much as possible. If the service doesn't support a given feature, they won't obviously be ready even if the operation finished successfully, as is the case for Connection::becomeReady().

Parameters:
busNameThe bus/service name of the D-Bus connection object the proxy is constructed for.
objectPathThe object path of the connection.
chanFactoryThe channel factory to use for the Connection.
contactFactoryThe channel factory to use for the Connection.
Returns:
A PendingReady operation with the proxy in PendingReady::proxy().
ConnectionPtr Tp::ConnectionFactory::construct ( const QString &  busName,
const QString &  objectPath,
const ChannelFactoryConstPtr &  chanFactory,
const ContactFactoryConstPtr &  contactFactory 
) const [protected, virtual]

Can be used by subclasses to override the Connection subclass constructed by the factory.

This is automatically called by proxy() to construct proxy instances if no valid cached proxy is found.

The default implementation constructs Tp::Connection objects.

Parameters:
busNameThe bus/service name of the D-Bus Connection object the proxy is constructed for.
objectPathThe object path of the connection.
chanFactoryThe channel factory to use for the Connection.
contactFactoryThe channel factory to use for the Connection.
Returns:
A pointer to the constructed Connection object.
QString Tp::ConnectionFactory::finalBusNameFrom ( const QString &  uniqueOrWellKnown) const [protected, virtual]

Transforms well-known names to the corresponding unique names, as is appropriate for Connection

Parameters:
uniqueOrWellKnownThe name to transform.
Returns:
The unique name corresponding to uniqueOrWellKnown (which may be it itself).

Implements Tp::DBusProxyFactory.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_0x79.html0000644000175200001440000000314212000060453023604 0ustar00collabora-develusers00000000000000 Class Members
   Home · All Classes · All Namespaces · Modules · Functions · Files
Here is a list of all class members with links to the classes they belong to:

- y -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00830.html0000644000175200001440000000626512000060453021631 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ConnectionManagerLowlevel Member List
This is the complete list of members for Tp::ConnectionManagerLowlevel, including all inherited members.
connectionManager() const Tp::ConnectionManagerLowlevel
isValid() const Tp::ConnectionManagerLowlevel
RefCounted()Tp::RefCounted [inline]
requestConnection(const QString &protocolName, const QVariantMap &parameters)Tp::ConnectionManagerLowlevel
~ConnectionManagerLowlevel()Tp::ConnectionManagerLowlevel
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01086.html0000644000175200001440000002307512000060453021633 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelInterfaceConferenceInterface Member List
This is the complete list of members for Tp::Client::ChannelInterfaceConferenceInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ChannelInterfaceConferenceInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfaceConferenceInterface
ChannelInterfaceConferenceInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfaceConferenceInterface
ChannelInterfaceConferenceInterface(Tp::DBusProxy *proxy)Tp::Client::ChannelInterfaceConferenceInterface
ChannelInterfaceConferenceInterface(const Tp::Client::ChannelInterface &mainInterface)Tp::Client::ChannelInterfaceConferenceInterface [explicit]
ChannelInterfaceConferenceInterface(const Tp::Client::ChannelInterface &mainInterface, QObject *parent)Tp::Client::ChannelInterfaceConferenceInterface
ChannelMerged(const QDBusObjectPath &channel, uint channelSpecificHandle, const QVariantMap &properties)Tp::Client::ChannelInterfaceConferenceInterface [signal]
ChannelRemoved(const QDBusObjectPath &channel, const QVariantMap &details)Tp::Client::ChannelInterfaceConferenceInterface [signal]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ChannelInterfaceConferenceInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ChannelInterfaceConferenceInterface [inline]
requestPropertyChannels() const Tp::Client::ChannelInterfaceConferenceInterface [inline]
requestPropertyInitialChannels() const Tp::Client::ChannelInterfaceConferenceInterface [inline]
requestPropertyInitialInviteeHandles() const Tp::Client::ChannelInterfaceConferenceInterface [inline]
requestPropertyInitialInviteeIDs() const Tp::Client::ChannelInterfaceConferenceInterface [inline]
requestPropertyInvitationMessage() const Tp::Client::ChannelInterfaceConferenceInterface [inline]
requestPropertyOriginalChannels() const Tp::Client::ChannelInterfaceConferenceInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ChannelInterfaceConferenceInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01071.html0000644000175200001440000002105512000060453021621 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::CallContentInterfaceAudioControlInterface Member List
This is the complete list of members for Tp::Client::CallContentInterfaceAudioControlInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
CallContentInterfaceAudioControlInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::CallContentInterfaceAudioControlInterface
CallContentInterfaceAudioControlInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::CallContentInterfaceAudioControlInterface
CallContentInterfaceAudioControlInterface(Tp::DBusProxy *proxy)Tp::Client::CallContentInterfaceAudioControlInterface
CallContentInterfaceAudioControlInterface(const Tp::Client::CallContentInterface &mainInterface)Tp::Client::CallContentInterfaceAudioControlInterface [explicit]
CallContentInterfaceAudioControlInterface(const Tp::Client::CallContentInterface &mainInterface, QObject *parent)Tp::Client::CallContentInterfaceAudioControlInterface
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::CallContentInterfaceAudioControlInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
ReportInputVolume(int volume, int timeout=-1)Tp::Client::CallContentInterfaceAudioControlInterface [inline, slot]
ReportOutputVolume(int volume, int timeout=-1)Tp::Client::CallContentInterfaceAudioControlInterface [inline, slot]
requestAllProperties() const Tp::Client::CallContentInterfaceAudioControlInterface [inline]
requestPropertyRequestedInputVolume() const Tp::Client::CallContentInterfaceAudioControlInterface [inline]
requestPropertyRequestedOutputVolume() const Tp::Client::CallContentInterfaceAudioControlInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::CallContentInterfaceAudioControlInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01015.html0000644000175200001440000000427512000060453021624 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PropertyValue Member List
This is the complete list of members for Tp::PropertyValue, including all inherited members.
identifierTp::PropertyValue
valueTp::PropertyValue


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00925.html0000644000175200001440000003626112000060453021635 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ReferencedHandles Member List
This is the complete list of members for Tp::ReferencedHandles, including all inherited members.
append(const ReferencedHandles &another)Tp::ReferencedHandles [inline]
at(int i) const Tp::ReferencedHandles
back() const Tp::ReferencedHandles [inline]
begin() const Tp::ReferencedHandles
clear()Tp::ReferencedHandles
connection() const Tp::ReferencedHandles
const_iterator typedefTp::ReferencedHandles
const_pointer typedefTp::ReferencedHandles
const_reference typedefTp::ReferencedHandles
constBegin() const Tp::ReferencedHandles [inline]
constEnd() const Tp::ReferencedHandles [inline]
ConstIterator typedefTp::ReferencedHandles
contains(uint handle) const Tp::ReferencedHandles
count(uint handle) const Tp::ReferencedHandles
count() const Tp::ReferencedHandles [inline]
difference_type typedefTp::ReferencedHandles
empty() const Tp::ReferencedHandles [inline]
end() const Tp::ReferencedHandles
endsWith(uint handle) const Tp::ReferencedHandles [inline]
first() const Tp::ReferencedHandles [inline]
front() const Tp::ReferencedHandles [inline]
handleType() const Tp::ReferencedHandles
indexOf(uint handle, int from=0) const Tp::ReferencedHandles
isEmpty() const Tp::ReferencedHandles
last() const Tp::ReferencedHandles [inline]
lastIndexOf(uint handle, int from=-1) const Tp::ReferencedHandles
length() const Tp::ReferencedHandles [inline]
mid(int pos, int length=-1) const Tp::ReferencedHandles
move(int from, int to)Tp::ReferencedHandles
operator!=(const ReferencedHandles &another) const Tp::ReferencedHandles [inline]
operator!=(const UIntList &another) const Tp::ReferencedHandles [inline]
operator+(const ReferencedHandles &another) const Tp::ReferencedHandles
operator+=(const ReferencedHandles &another)Tp::ReferencedHandles [inline]
operator<<(const ReferencedHandles &another)Tp::ReferencedHandles [inline]
operator=(const ReferencedHandles &another)Tp::ReferencedHandles
operator==(const ReferencedHandles &another) const Tp::ReferencedHandles
operator==(const UIntList &list) const Tp::ReferencedHandles
operator[](int i) const Tp::ReferencedHandles [inline]
pointer typedefTp::ReferencedHandles
pop_back()Tp::ReferencedHandles [inline]
pop_front()Tp::ReferencedHandles [inline]
reference typedefTp::ReferencedHandles
ReferencedHandles()Tp::ReferencedHandles
ReferencedHandles(const ReferencedHandles &other)Tp::ReferencedHandles
removeAll(uint handle)Tp::ReferencedHandles
removeAt(int i)Tp::ReferencedHandles
removeFirst()Tp::ReferencedHandles [inline]
removeLast()Tp::ReferencedHandles [inline]
removeOne(uint handle)Tp::ReferencedHandles
size() const Tp::ReferencedHandles
size_type typedefTp::ReferencedHandles
startsWith(uint handle) const Tp::ReferencedHandles [inline]
swap(int i, int j)Tp::ReferencedHandles
takeAt(int i)Tp::ReferencedHandles
takeFirst()Tp::ReferencedHandles [inline]
takeLast()Tp::ReferencedHandles [inline]
toList() const Tp::ReferencedHandles
toSet() const Tp::ReferencedHandles [inline]
toStdList() const Tp::ReferencedHandles [inline]
toVector() const Tp::ReferencedHandles [inline]
value(int i, uint defaultValue=0) const Tp::ReferencedHandles
value_type typedefTp::ReferencedHandles
~ReferencedHandles()Tp::ReferencedHandles


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00848.html0000644000175200001440000001203212000060453021627 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::DBusService Member List
This is the complete list of members for Tp::DBusService, including all inherited members.
busName() const Tp::DBusService
dbusConnection() const Tp::DBusService
dbusObject() const Tp::DBusService
DBusService(const QDBusConnection &dbusConnection)Tp::DBusService
immutableProperties() const =0Tp::DBusService [pure virtual]
isRegistered() const Tp::DBusService
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
objectPath() const Tp::DBusService
propertyChanged(const QString &propertyName)Tp::Object [signal]
RefCounted()Tp::RefCounted [inline]
registerObject(const QString &busName, const QString &objectPath, DBusError *error)Tp::DBusService [protected, virtual]
~DBusService()Tp::DBusService [virtual]
~Object()Tp::Object [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01124.html0000644000175200001440000002142012000060453021614 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceAliasingInterface Member List
This is the complete list of members for Tp::Client::ConnectionInterfaceAliasingInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
AliasesChanged(const Tp::AliasPairList &aliases)Tp::Client::ConnectionInterfaceAliasingInterface [signal]
ConnectionInterfaceAliasingInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceAliasingInterface
ConnectionInterfaceAliasingInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceAliasingInterface
ConnectionInterfaceAliasingInterface(Tp::DBusProxy *proxy)Tp::Client::ConnectionInterfaceAliasingInterface
ConnectionInterfaceAliasingInterface(const Tp::Client::ConnectionInterface &mainInterface)Tp::Client::ConnectionInterfaceAliasingInterface [explicit]
ConnectionInterfaceAliasingInterface(const Tp::Client::ConnectionInterface &mainInterface, QObject *parent)Tp::Client::ConnectionInterfaceAliasingInterface
GetAliases(const Tp::UIntList &contacts, int timeout=-1)Tp::Client::ConnectionInterfaceAliasingInterface [inline, slot]
GetAliasFlags(int timeout=-1)Tp::Client::ConnectionInterfaceAliasingInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ConnectionInterfaceAliasingInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
RequestAliases(const Tp::UIntList &contacts, int timeout=-1)Tp::Client::ConnectionInterfaceAliasingInterface [inline, slot]
requestAllProperties() const Tp::Client::ConnectionInterfaceAliasingInterface [inline]
SetAliases(const Tp::AliasMap &aliases, int timeout=-1)Tp::Client::ConnectionInterfaceAliasingInterface [inline, slot]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ConnectionInterfaceAliasingInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00769.html0000644000175200001440000000554512000060453021644 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AbstractClient Member List
This is the complete list of members for Tp::AbstractClient, including all inherited members.
AbstractClient()Tp::AbstractClient
isRegistered() const Tp::AbstractClient
RefCounted()Tp::RefCounted [inline]
~AbstractClient()Tp::AbstractClient [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_vars.html0000644000175200001440000000533712000060453024060 0ustar00collabora-develusers00000000000000 Class Members - Variables
   Home · All Classes · All Namespaces · Modules · Functions · Files


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00405.html0000644000175200001440000001177612000060453021632 0ustar00collabora-develusers00000000000000 Tp::StringVariantMap Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::StringVariantMap Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<QString, QDBusVariant>, but needed to have a discrete type in the Qt type system.

A mapping from strings to variants representing extra key-value pairs.


Constructor & Destructor Documentation

Tp::StringVariantMap::StringVariantMap ( const QMap< QString, QDBusVariant > &  a) [inline]

Member Function Documentation

StringVariantMap& Tp::StringVariantMap::operator= ( const QMap< QString, QDBusVariant > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00198.html0000644000175200001440000002250612000060453021634 0ustar00collabora-develusers00000000000000 Tp::ContactInfoField Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactInfoField Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

Represents one piece of information about a contact, as modelled by a single vCard field. Of the fields defined in RFC 2426, common examples include:

fn
The contact's full name, formatted to their liking
n
The contact's full name, divided into five parts: family name, given name, additional names, honorific prefixes, and honorific suffixes
org
The contact's organisation, divided into the organization's name possibly followed by one or more organizational unit names.
adr
A street address for the contact, divided into seven components: post office box, extended address, street address, locality (e.g., city), region (e.g., state or province), the postal code, and the country name.
label
A free-form street address for the contact, formatted as a single value (with embedded newlines where necessary) suitable for printing on an address label
tel
A telephone number for the contact.
email
An email address for the contact.

For example, the following vCard:

    BEGIN:vCard
    VERSION:3.0
    FN:Wee Ninja
    N;LANGUAGE=ja:Ninja;Wee;;;-san
    ORG:Collabora, Ltd.;Management Division;Human Resources\\; Company Policy Enforcement
    ADR;TYPE=WORK,POSTAL,PARCEL:;;11 Kings Parade;Cambridge;Cambridgeshire
     ;CB2 1SJ;UK
    LABEL;TYPE=WORK,POSTAL,PARCEL:11 Kings Parade\\nCambridge\\nCambridgeshire\\nUK\\nCB2 1SJ
    TEL;TYPE=VOICE,WORK:+44 1223 362967, +44 7700 900753
    EMAIL;TYPE=INTERNET,PREF:wee.ninja@collabora.co.uk
    EMAIL;TYPE=INTERNET:wee.ninja@example.com
    URL:http://www.thinkgeek.com/geektoys/plush/8823/
    NICKNAME:HR Ninja,Enforcement Ninja
    END:vCard

would be represented by (in Python-like syntax):

 [
   ('fn', [], ['Wee Ninja']),
   ('n', ['language=ja'], ['Ninja', 'Wee', '', '', '-san']),
   ('org', [], ['Collabora, Ltd.', 'Management Division',
     'Human Resources; Company Policy Enforcement']),
   ('adr', ['type=work','type=postal','type=parcel'],
    ['','','11 Kings Parade','Cambridge', 'Cambridgeshire','CB2 1SJ','UK']),
   ('label', ['type=work','type=postal','type=parcel'],
    ['''11 Kings Parade
   Cambridge
   Cambridgeshire
   UK
   CB2 1SJ''']),
   ('tel', ['type=voice','type=work'], ['+44 1223 362967']),
   ('tel', ['type=voice','type=work'], ['+44 7700 900753']),
   ('email', ['type=internet','type=pref'], ['wee.ninja@collabora.co.uk']),
   ('email', ['type=internet'], ['wee.ninja@example.com']),
   ('url', [], ['http://www.thinkgeek.com/geektoys/plush/8823/']),
   ('nickname', [], ['HR Ninja']),
   ('nickname', [], ['Enforcement Ninja'])
 ]

Member Data Documentation

The name of the field; this is the lowercased name of a vCard field. For example, a field representing a contact's address would be named "adr".

A list of vCard type parameters applicable to this field, with their values. The type parameter names, and any values that are case-insensitive in vCard, MUST be in lower case. For example, a contact's preferred home address would have parameters 'type=home' and 'type=pref'.

The type parameter 'type' is likely to be the most common, but there can be others, such as 'language=en'.

Characters which are required to be escaped in vCard type parameters should not be escaped in this list. For instance, a field "X-FOO;SEMICOLON=\\;:bar" in a vCard would become ('x-foo', ['semicolon=;'], ['bar']) in this interface.

This avoids Telepathy UIs having to understand the escaping and unescaping rules for vCards. The type parameter name is not allowed (by RFC 2425) to contain an '=' character, so no ambiguity is introduced.

For unstructured vCard fields (such as 'fn', a formatted name field), a single-element array containing the field's value.

For structured fields (such as 'adr', an address field), an array corresponding to the semicolon-separated elements of the field (with empty strings for empty elements).

A vCard field with multiple comma-separated values, such as 'nickname', should be represented by several Contact_Info_Fields.

Characters which are required to be escaped in vCard values, such as semi-colons and newlines, should not be escaped in this list (e.g. if a value contains a newline, the data passed over D-Bus should contain a literal newline character).

An earlier draft of this interface split structured vCard fields into multiple Telepathy-level fields; for example, 'n' became 'family-name', 'given-name', etc. But under this representation, omitting empty components leads to difficulty identifying where one name ends and another begins. Consider the fields ['given-name', 'honorific-suffixes', 'family-name', 'honorific-prefixes']: does this represent two 'n' fields, or one with incorrect component ordering?


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00632_source.html0000644000175200001440000001764112000060453023211 0ustar00collabora-develusers00000000000000 pending-channel-request.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
pending-channel-request.h
00001 
00023 #ifndef _TelepathyQt_pending_channel_request_h_HEADER_GUARD_
00024 #define _TelepathyQt_pending_channel_request_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Global>
00031 #include <TelepathyQt/PendingOperation>
00032 #include <TelepathyQt/Types>
00033 
00034 #include <QDateTime>
00035 #include <QString>
00036 #include <QVariantMap>
00037 
00038 class QDBusPendingCallWatcher;
00039 
00040 namespace Tp
00041 {
00042 
00043 class Account;
00044 class ChannelRequestHints;
00045 
00046 class TP_QT_EXPORT PendingChannelRequest : public PendingOperation
00047 {
00048     Q_OBJECT
00049     Q_DISABLE_COPY(PendingChannelRequest)
00050 
00051 public:
00052     ~PendingChannelRequest();
00053 
00054     AccountPtr account() const;
00055 
00056     ChannelRequestPtr channelRequest() const;
00057 
00058     PendingOperation *cancel();
00059 
00060 Q_SIGNALS:
00061     void channelRequestCreated(const Tp::ChannelRequestPtr &channelRequest);
00062 
00063 private Q_SLOTS:
00064     TP_QT_NO_EXPORT void onWatcherFinished(QDBusPendingCallWatcher *watcher);
00065     TP_QT_NO_EXPORT void onProceedOperationFinished(Tp::PendingOperation *op);
00066     TP_QT_NO_EXPORT void onCancelOperationFinished(Tp::PendingOperation *op);
00067 
00068 private:
00069     friend class Account;
00070 
00071     TP_QT_NO_EXPORT PendingChannelRequest(const AccountPtr &account,
00072             const QVariantMap &requestedProperties, const QDateTime &userActionTime,
00073             const QString &preferredHandler, bool create, const ChannelRequestHints &hints);
00074     TP_QT_NO_EXPORT PendingChannelRequest(const AccountPtr &account,
00075             const QString &errorName, const QString &errorMessage);
00076 
00077     struct Private;
00078     friend struct Private;
00079     Private *mPriv;
00080 };
00081 
00082 } // Tp
00083 
00084 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00316.html0000644000175200001440000001523412000060453021624 0ustar00collabora-develusers00000000000000 Tp::PendingDBusTubeConnection Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingDBusTubeConnection Class Reference

#include <TelepathyQt/PendingDBusTubeConnection>

Inherits Tp::PendingOperation.

List of all members.

Public Member Functions


Detailed Description

A pending operation for accepting or offering a DBus tube

This class represents an asynchronous operation for accepting or offering a DBus tube. Upon completion, the address of the opened tube is returned as a QString.


Constructor & Destructor Documentation


Member Function Documentation

When the operation has been completed successfully, returns the address of the opened DBus connection.

Please note this function will return a meaningful value only if the operation has already been completed successfully: in case of failure or non-completion, an empty QString will be returned.

Note:
If you plan to use QtDBus for the DBus connection, please note you should always use QDBusConnection::connectToPeer(), regardless of the fact this tube is a p2p or a group one. The above function has been introduced in Qt 4.8, previous versions of Qt do not allow the use of DBus Tubes through QtDBus.
Returns:
The address of the opened DBus connection.

Return whether this tube allows other users more than the current one to connect to the private bus created by the tube.

Note that even if the tube was accepted or offered specifying not to allow other users, this method might still return true if one of the ends did not support such a restriction.

In fact, if one of the ends does not support current user restriction, the tube will be offered regardless, falling back to allowing any connection. If your application requires strictly this condition to be enforced, you should check DBusTubeChannel::supportsRestrictingToCurrentUser before offering the tube, and take action from there.

This function, however, is guaranteed to return the same value of the given allowOtherUsers parameter when accepting or offering a tube if supportsRestrictingToCurrentUser is true.

Returns:
true if any user is allow to connect, false otherwise.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00910.html0000644000175200001440000001260412000060453021622 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingString Member List
This is the complete list of members for Tp::PendingString, including all inherited members.
errorMessage() const Tp::PendingOperation
errorName() const Tp::PendingOperation
finished(Tp::PendingOperation *operation)Tp::PendingOperation [signal]
isError() const Tp::PendingOperation
isFinished() const Tp::PendingOperation
isValid() const Tp::PendingOperation
object() const Tp::PendingOperation [protected]
PendingOperation(const SharedPtr< RefCounted > &object)Tp::PendingOperation [protected]
PendingString(QDBusPendingCall call, const SharedPtr< RefCounted > &object)Tp::PendingString
result() const Tp::PendingString
setFinished()Tp::PendingOperation [protected, slot]
setFinishedWithError(const QString &name, const QString &message)Tp::PendingOperation [protected, slot]
setFinishedWithError(const QDBusError &error)Tp::PendingOperation [protected, slot]
setResult(const QString &result)Tp::PendingString [protected]
~PendingOperation()Tp::PendingOperation [virtual]
~PendingString()Tp::PendingString


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00574_source.html0000644000175200001440000002334712000060453023216 0ustar00collabora-develusers00000000000000 file-transfer-channel.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
file-transfer-channel.h
00001 
00023 #ifndef _TelepathyQt_file_transfer_channel_h_HEADER_GUARD_
00024 #define _TelepathyQt_file_transfer_channel_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Channel>
00031 
00032 namespace Tp
00033 {
00034 
00035 class TP_QT_EXPORT FileTransferChannel : public Channel
00036 {
00037     Q_OBJECT
00038     Q_DISABLE_COPY(FileTransferChannel)
00039 
00040 public:
00041     static const Feature FeatureCore;
00042 
00043     static FileTransferChannelPtr create(const ConnectionPtr &connection,
00044             const QString &objectPath, const QVariantMap &immutableProperties);
00045 
00046     virtual ~FileTransferChannel();
00047 
00048     FileTransferState state() const;
00049     FileTransferStateChangeReason stateReason() const;
00050 
00051     QString fileName() const;
00052     QString contentType() const;
00053     qulonglong size() const;
00054     QString uri() const;
00055 
00056     FileHashType contentHashType() const;
00057     QString contentHash() const;
00058 
00059     QString description() const;
00060 
00061     QDateTime lastModificationTime() const;
00062 
00063     qulonglong initialOffset() const;
00064 
00065     qulonglong transferredBytes() const;
00066 
00067     PendingOperation *cancel();
00068 
00069 Q_SIGNALS:
00070     void stateChanged(Tp::FileTransferState state,
00071             Tp::FileTransferStateChangeReason reason);
00072     void initialOffsetDefined(qulonglong initialOffset);
00073     void transferredBytesChanged(qulonglong count);
00074 
00075 protected:
00076     FileTransferChannel(const ConnectionPtr &connection, const QString &objectPath,
00077             const QVariantMap &immutableProperties,
00078             const Feature &coreFeature = FileTransferChannel::FeatureCore);
00079 
00080     SupportedSocketMap availableSocketTypes() const;
00081 
00082     virtual void connectToHost();
00083     bool isConnected() const;
00084     void setConnected();
00085 
00086     bool isFinished() const;
00087     virtual void setFinished();
00088 
00089 private Q_SLOTS:
00090     TP_QT_NO_EXPORT void gotProperties(QDBusPendingCallWatcher *watcher);
00091 
00092     TP_QT_NO_EXPORT void changeState();
00093     TP_QT_NO_EXPORT void onStateChanged(uint state, uint stateReason);
00094     TP_QT_NO_EXPORT void onInitialOffsetDefined(qulonglong initialOffset);
00095     TP_QT_NO_EXPORT void onTransferredBytesChanged(qulonglong count);
00096 
00097 protected Q_SLOTS:
00098     TP_QT_NO_EXPORT void onUriDefined(const QString &uri);
00099 
00100 private:
00101     struct Private;
00102     friend struct Private;
00103     Private *mPriv;
00104 };
00105 
00106 } // Tp
00107 
00108 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00620_source.html0000644000175200001440000002402212000060453023175 0ustar00collabora-develusers00000000000000 or-filter.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
or-filter.h
00001 
00023 #ifndef _TelepathyQt_or_filter_h_HEADER_GUARD_
00024 #define _TelepathyQt_or_filter_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Filter>
00031 #include <TelepathyQt/Types>
00032 
00033 namespace Tp
00034 {
00035 
00036 template <class T>
00037 class OrFilter : public Filter<T>
00038 {
00039 public:
00040     static SharedPtr<OrFilter<T> > create(
00041             const QList<SharedPtr<const Filter<T> > > &filters = QList<SharedPtr<const Filter<T> > >())
00042     {
00043         return SharedPtr<OrFilter<T> >(new OrFilter<T>(filters));
00044     }
00045 
00046     inline virtual ~OrFilter() { }
00047 
00048     inline virtual bool isValid() const
00049     {
00050         Q_FOREACH (const SharedPtr<const Filter<T> > &filter, mFilters) {
00051             if (!filter || !filter->isValid()) {
00052                 return false;
00053             }
00054         }
00055         return true;
00056     }
00057 
00058     inline virtual bool matches(const SharedPtr<T> &t) const
00059     {
00060         if (!isValid()) {
00061             return false;
00062         }
00063 
00064         Q_FOREACH (const SharedPtr<const Filter<T> > &filter, mFilters) {
00065             if (filter->matches(t)) {
00066                 return true;
00067             }
00068         }
00069         return false;
00070     }
00071 
00072     inline QList<SharedPtr<const Filter<T> > > filters() const { return mFilters; }
00073 
00074 private:
00075     OrFilter(const QList<SharedPtr<const Filter<T> > > &filters)
00076         : Filter<T>(), mFilters(filters) { }
00077 
00078     QList<SharedPtr<const Filter<T> > > mFilters;
00079 };
00080 
00081 } // Tp
00082 
00083 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/nav_h.png0000644000175200001440000000014112000060453021714 0ustar00collabora-develusers00000000000000PNG  IHDR ,@(IDATxݱ 0 A2U !kJrZoIENDB`telepathy-qt-0.9.3/doc/html/functions_func_0x65.html0000644000175200001440000001660712000060453024624 0ustar00collabora-develusers00000000000000 Class Members - Functions
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- e -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00873.html0000644000175200001440000000703312000060453021632 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MemberFunctor7< R, T, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 > Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00117.html0000644000175200001440000012207712000060453021627 0ustar00collabora-develusers00000000000000 Tp::Client::ChannelInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

#include <TelepathyQt/Channel>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

  • QDBusPendingReply Close (int timeout=-1)
  • QDBusPendingReply< QString > GetChannelType (int timeout=-1)
  • QDBusPendingReply< uint, uint > GetHandle (int timeout=-1)
  • QDBusPendingReply< QStringList > GetInterfaces (int timeout=-1)

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Channel".


Constructor & Destructor Documentation

Tp::Client::ChannelInterface::ChannelInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ChannelInterface::ChannelInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ChannelInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Member Function Documentation

static QLatin1String Tp::Client::ChannelInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Channel", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property ChannelType of type QString.

The channel's type. This cannot change once the channel has been created.

For compatibility between older connection managers and newer clients, if this is unavailable or is an empty string, clients MUST use the result of calling GetChannelType() .

The GetAll method lets clients retrieve all properties in one round-trip, which is desirable.

When requesting a channel, the request MUST specify a channel type, and the request MUST fail if the specified channel type cannot be supplied.

Common sense.
Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Interfaces of type QStringList.

Extra interfaces provided by this channel. This SHOULD NOT include the channel type and the Channel interface itself, and cannot change once the channel has been created.

For compatibility between older connection managers and newer clients, if this is unavailable, or if this is an empty list and ChannelType is an empty string, clients MUST use the result of calling GetInterfaces() instead. If this is an empty list but ChannelType is non-empty, clients SHOULD NOT call GetInterfaces; this implies that connection managers that implement the ChannelType property MUST also implement the Interfaces property correctly.

The GetAll method lets clients retrieve all properties in one round-trip, which is desirable.

When requesting a channel with a particular value for this property, the request must fail without side-effects unless the connection manager expects to be able to provide a channel whose interfaces include at least the interfaces requested.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property TargetHandle of type uint.

The handle (a representation for the identifier) of the contact, chatroom, etc. with which this handle communicates. Its type is given by the TargetHandleType property.

This is fixed for the lifetime of the channel, so channels which could potentially be used to communicate with multiple contacts, and do not have an identity of their own (such as a Handle_Type_Room handle), must have TargetHandleType set to Handle_Type_None and TargetHandle set to 0.

Unlike in the telepathy-spec 0.16 API, there is no particular uniqueness guarantee - there can be many channels with the same (channel type, handle type, handle) tuple. This is necessary to support conversation threads in XMPP and SIP, for example.

If this is present in a channel request, it must be nonzero, TargetHandleType MUST be present and not Handle_Type_None, and TargetID MUST NOT be present. Properties from org.freedesktop.Telepathy.Channel.Interface.Addressing1 MUST NOT be present.

The channel that satisfies the request MUST either:

  • have the specified TargetHandle property; or
  • have TargetHandleType = Handle_Type_None, TargetHandle = 0, and be configured such that it could communicate with the specified handle in some other way (e.g. have the requested contact handle in its Group interface)
Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property TargetID of type QString.

The string that would result from inspecting the TargetHandle property (i.e. the identifier in the IM protocol of the contact, room, etc. with which this channel communicates), or the empty string if the TargetHandle is 0.

The presence of this property avoids the following race condition:

If this is present in a channel request, TargetHandleType MUST be present and not Handle_Type_None, and TargetHandle MUST NOT be present. Properties from org.freedesktop.Telepathy.Channel.Interface.Addressing1 MUST NOT be present.The request MUST fail with error InvalidHandle, without side-effects, if the requested TargetID would not be accepted by ConnectionInterface::RequestHandles() .

The returned channel must be related to the handle corresponding to the given identifier, in the same way as if TargetHandle had been part of the request instead.

Requesting channels with a string identifier saves a round-trip (the call to RequestHandles). It also allows the channel dispatcher to accept a channel request for an account that is not yet connected (and thus has no valid handles), bring the account online, and pass on the same parameters to the new connection's CreateChannel method.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property TargetHandleType of type uint.

The type of TargetHandle .

If this is omitted from a channel request, connection managers SHOULD treat this as equivalent to Handle_Type_None.

If this is omitted or is Handle_Type_None, TargetHandle and TargetID MUST be omitted from the request.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Requested of type bool.

True if this channel was created in response to a local request, such as a call to ConnectionInterface::RequestChannel() or ConnectionInterfaceRequestsInterface::CreateChannel() .

The idea of this property is to distinguish between "incoming" and "outgoing" channels, in a way that doesn't break down when considering special cases like contact lists that are automatically created on connection to the server, or chatrooms that an IRC proxy/bouncer like irssi-proxy or bip was already in.

The reason we want to make that distinction is that UIs for things that the user explicitly requested should start up automatically, whereas for incoming messages and VoIP calls we should first ask the user whether they want to open the messaging UI or accept the call.

If the channel was not explicitly requested (even if it was created as a side-effect of a call to one of those functions, e.g. because joining a Tube in a MUC context on XMPP implies joining that MUC), then this property is false.

For compatibility with older connection managers, clients SHOULD assume that this property is true if they see a channel announced by the ConnectionInterface::NewChannel() signal with the suppress_handler parameter set to true.

In a correct connection manager, the only way to get such a channel is to request it.

Clients MAY additionally assume that this property is false if they see a channel announced by the NewChannel signal with the suppress_handler parameter set to false.

This is more controversial, since it's possible to get that parameter set to false by requesting a channel. However, there's no good reason to do so, and we've deprecated this practice.

In the particular case of the channel dispatcher, the only side-effect of wrongly thinking a channel is unrequested is likely to be that the user has to confirm that they want to use it, so it seems fairly harmless to assume in the channel dispatcher that channels with suppress_handler false are indeed unrequested.

It does not make sense for this property to be in channel requests—it will always be true for channels returned by CreateChannel, and callers of EnsureChannel cannot control whether an existing channel was originally requested locally—so it MUST NOT be accepted.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property InitiatorHandle of type uint.

The contact who initiated the channel; for instance, the contact who invited the local user to a chatroom, or the contact who initiated a call.

This does not necessarily represent the contact who created the underlying protocol-level construct. For instance, if Rob creates a chatroom, Will joins that chatroom, and Will invites Simon to join it, then Simon will see Will as the InitiatorHandle of the channel representing the chatroom.

The room creator is generally a less useful piece of information than the inviter, is less likely to be available at invitation time (i.e. can't necessarily be an immutable property), and is less likely to be available at all. The creator of a chatroom is not currently available via Telepathy; if added in future, it is likely to be made available as a property on the Chatroom interface (bug 23151).

For channels requested by the local user, this MUST be the value of ConnectionInterface::SelfHandle at the time the channel was created (i.e. not a channel-specific handle).

On some protocols, the SelfHandle may change (as signalled by ConnectionInterface::SelfHandleChanged() ), but this property is immutable. Hence, locally-requested channels' InitiatorHandle and InitiatorID may not match the current SelfHandle; Requested can be used to determine whether the channel was created locally.

For channels requested by a remote user, this MUST be their handle. If unavailable or not applicable, this MUST be 0 (for instance, contact lists are not really initiated by anyone in particular, and it's easy to imagine a protocol where chatroom invitations can be anonymous).

For channels with the ChannelInterfaceGroupInterface interface, this SHOULD be the same contact who is signalled as the "Actor" causing the self-handle to be placed in the local-pending set.

This SHOULD NOT be a channel-specific handle, if possible.

It does not make sense for this property to be in channel requests - the initiator will always be the local user - so it MUST NOT be accepted.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property InitiatorID of type QString.

The string that would result from inspecting the InitiatorHandle property (i.e. the initiator's identifier in the IM protocol).

The presence of this property avoids the following race condition:

It does not make sense for this property to be in channel requests - the initiator will always be the local user - so it MUST NOT be accepted.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::ChannelInterface::Close ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method Close on the remote object.

Request that the channel be closed. This is not the case until the Closed signal has been emitted, and depending on the connection manager this may simply remove you from the channel on the server, rather than causing it to stop existing entirely. Some channels such as contact list channels may not be closed.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply<QString> Tp::Client::ChannelInterface::GetChannelType ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method GetChannelType on the remote object.

Returns the interface name for the type of this channel. Clients SHOULD use the ChannelType property instead, falling back to this method only if necessary. The GetAll method lets clients retrieve all properties in one round-trip.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
Returns:

The interface name

QDBusPendingReply<uint, uint> Tp::Client::ChannelInterface::GetHandle ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method GetHandle on the remote object.

Returns the handle type and number if this channel represents a communication with a particular contact, room or server-stored list, or zero if it is transient and defined only by its contents. Clients SHOULD use the TargetHandle and TargetHandleType properties instead, falling back to this method only if necessary. The GetAll method lets clients retrieve all properties in one round-trip.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
Returns:

The same as TargetHandleType.

Returns:

The same as TargetHandle.

QDBusPendingReply<QStringList> Tp::Client::ChannelInterface::GetInterfaces ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method GetInterfaces on the remote object.

Get the optional interfaces implemented by the channel. Clients SHOULD use the Interfaces property instead, falling back to this method only if necessary. The GetAll method lets clients retrieve all properties in one round-trip.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
Returns:

An array of the D-Bus interface names

Represents the signal Closed on the remote object.

Emitted when the channel has been closed. Method calls on the channel are no longer valid after this signal has been emitted, and the connection manager may then remove the object from the bus at any point.

void Tp::Client::ChannelInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00370.html0000644000175200001440000002473112000060453021626 0ustar00collabora-develusers00000000000000 Tp::RoomListChannel Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The RoomListChannel class represents a Telepathy Channel of type RoomList. More...

#include <TelepathyQt/RoomListChannel>

Inherits Tp::Channel.

List of all members.

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

The RoomListChannel class represents a Telepathy Channel of type RoomList.

Note that this subclass of Channel will eventually provide a high-level API for the RoomList interface. Until then, it's just a Channel.

For more details, please refer to Telepathy specification.

See Asynchronous Object Model, Shared Pointer Usage


Constructor & Destructor Documentation

Class destructor.

Tp::RoomListChannel::RoomListChannel ( const ConnectionPtr &  connection,
const QString &  objectPath,
const QVariantMap &  immutableProperties,
const Feature coreFeature = Channel::FeatureCore 
) [protected]

Construct a new RoomListChannel object.

Parameters:
connectionConnection owning this channel, and specifying the service.
objectPathThe channel object path.
immutablePropertiesThe channel immutable properties.
coreFeatureThe core feature of the channel type, if any. The corresponding introspectable should should depend on Channel::FeatureCore.

Member Function Documentation

RoomListChannelPtr Tp::RoomListChannel::create ( const ConnectionPtr &  connection,
const QString &  objectPath,
const QVariantMap &  immutableProperties 
) [static]

Create a new RoomListChannel object.

Parameters:
connectionConnection owning this channel, and specifying the service.
objectPathThe channel object path.
immutablePropertiesThe channel immutable properties.
Returns:
A RoomListChannelPtr object pointing to the newly created RoomListChannel object.

Reimplemented from Tp::Channel.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00535_source.html0000644000175200001440000001775612000060453023222 0ustar00collabora-develusers00000000000000 constants.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
constants.h
00001 
00023 #ifndef _TelepathyQt_constants_h_HEADER_GUARD_
00024 #define _TelepathyQt_constants_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00049 #define TP_QT_CONNECTION_MANAGER_BUS_NAME_BASE QLatin1String("org.freedesktop.Telepathy.ConnectionManager.")
00050 
00055 #define TP_QT_CONNECTION_MANAGER_OBJECT_PATH_BASE QLatin1String("/org/freedesktop/Telepathy/ConnectionManager/")
00056 
00062 #define TP_QT_CONNECTION_BUS_NAME_BASE QLatin1String("org.freedesktop.Telepathy.Connection.")
00063 
00069 #define TP_QT_CONNECTION_OBJECT_PATH_BASE QLatin1String("/org/freedesktop/Telepathy/Connection/")
00070 
00076 #define TP_QT_ACCOUNT_MANAGER_BUS_NAME \
00077     (QLatin1String("org.freedesktop.Telepathy.AccountManager"))
00078 
00084 #define TP_QT_ACCOUNT_MANAGER_OBJECT_PATH \
00085     (QLatin1String("/org/freedesktop/Telepathy/AccountManager"))
00086 
00090 #define TP_QT_CHANNEL_DISPATCHER_BUS_NAME \
00091     (QLatin1String("org.freedesktop.Telepathy.ChannelDispatcher"))
00092 
00096 #define TP_QT_CHANNEL_DISPATCHER_OBJECT_PATH \
00097     (QLatin1String("/org/freedesktop/Telepathy/ChannelDispatcher"))
00098 
00106 #define TP_QT_ACCOUNT_OBJECT_PATH_BASE \
00107     (QLatin1String("/org/freedesktop/Telepathy/Account"))
00108 
00112 #define TP_QT_DEBUG_OBJECT_PATH \
00113     (QLatin1String("/org/freedesktop/Telepathy/debug"))
00114 
00119 #include <TelepathyQt/_gen/constants.h>
00120 
00133 #define TP_QT_DBUS_ERROR_NAME_HAS_NO_OWNER \
00134     (QLatin1String("org.freedesktop.DBus.Error.NameHasNoOwner"))
00135 
00141 #define TP_QT_DBUS_ERROR_UNKNOWN_INTERFACE \
00142     (QLatin1String("org.freedesktop.DBus.Error.UnknownInterface"))
00143 
00152 #define TP_QT_DBUS_ERROR_UNKNOWN_METHOD \
00153     (QLatin1String("org.freedesktop.DBus.Error.UnknownMethod"))
00154 
00160 #define TP_QT_ERROR_OBJECT_REMOVED \
00161     (QLatin1String("org.freedesktop.Telepathy.Qt.Error.ObjectRemoved"))
00162 
00168 #define TP_QT_ERROR_INCONSISTENT \
00169     (QLatin1String("org.freedesktop.Telepathy.Qt.Error.Inconsistent"))
00170 
00181 #define TP_QT_ERROR_ORPHANED \
00182     (QLatin1String("org.freedesktop.Telepathy.Qt.Error.Orphaned"))
00183 
00184 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00524_source.html0000644000175200001440000000460312000060453023203 0ustar00collabora-develusers00000000000000 client.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
client.h
00001 
00023 #ifndef _TelepathyQt_client_h_HEADER_GUARD_
00024 #define _TelepathyQt_client_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/_gen/cli-client.h>
00031 
00032 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00123.html0000644000175200001440000004520512000060453021621 0ustar00collabora-develusers00000000000000 Tp::Client::ChannelInterfaceDestroyableInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelInterfaceDestroyableInterface Class Reference

#include <TelepathyQt/Channel>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

  • QDBusPendingReply Destroy (int timeout=-1)

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Channel.Interface.Destroyable".


Constructor & Destructor Documentation

Tp::Client::ChannelInterfaceDestroyableInterface::ChannelInterfaceDestroyableInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfaceDestroyableInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ChannelInterfaceDestroyableInterface::ChannelInterfaceDestroyableInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfaceDestroyableInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ChannelInterfaceDestroyableInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ChannelInterfaceDestroyableInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ChannelInterfaceDestroyableInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Channel.Interface.Destroyable", which this class represents.

Returns:
The D-Bus interface name.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::ChannelInterfaceDestroyableInterface::Destroy ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method Destroy on the remote object.

Close the channel abruptly, possibly with loss of data. The connection manager MUST NOT re-create the channel unless/until more events occur.

The main motivating situation for this method is that when a Text channel with pending messages is closed with Close, it comes back as an incoming channel (to avoid a race between Close and an incoming message). If Destroy is called on a Text channel, the CM should delete all pending messages and close the channel, and the channel shouldn't be re-created until/unless another message arrives.

Most clients SHOULD call ChannelInterface::Close() instead. However, if a client explicitly intends to destroy the channel with possible loss of data, it SHOULD call this method if this interface is supported (according to the ChannelInterface::Interfaces property), falling back to Close if not.

In particular, channel dispatchers SHOULD use this method if available when terminating channels that cannot be handled correctly (for instance, if no handler has been installed for a channel type, or if the handler crashes repeatedly).

Connection managers do not need to implement this interface on channels where Close and Destroy would be equivalent.

Callers need to be able to fall back to Close in any case.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
void Tp::Client::ChannelInterfaceDestroyableInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00481_source.html0000644000175200001440000000622412000060453023206 0ustar00collabora-develusers00000000000000 channel.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
channel.h
00001 
00023 #ifndef _TelepathyQt_Farsight_channel_h_HEADER_GUARD_
00024 #define _TelepathyQt_Farsight_channel_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Farsight/global.h>
00031 
00032 #include <TelepathyQt/Types>
00033 
00034 typedef struct _TfChannel TfChannel;
00035 
00036 namespace Tp
00037 {
00038 
00039 TP_QT_FS_DEPRECATED TP_QT_FS_EXPORT TfChannel *createFarsightChannel(const StreamedMediaChannelPtr &channel);
00040 
00041 } // Tp
00042 
00043 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/doxygen.css0000644000175200001440000001317012000060453022310 0ustar00collabora-develusers00000000000000body, table, div, p, dl { font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif; font-size: 12px; } /* @group Heading Levels */ h1 { text-align: center; font-size: 150%; } h2 { font-size: 110%; font-weight: bold; } h3 { font-size: 100%; } h3.version { font-size: 100%; text-align: center; } /* @end */ caption { font-weight: bold; } div.title{ font-size: 150%; text-align: center; margin: 2px; padding: 2px; } div.qindex, div.navtab{ background-color: #e8eef2; border: 1px solid #84b0c7; text-align: center; margin: 2px; padding: 2px; } div.qindex, div.navpath { width: 100%; line-height: 140%; } div.navtab { margin-right: 15px; } /* @group Link Styling */ a { color: #153788; font-weight: normal; text-decoration: none; } .contents a:visited { color: #1b77c5; } a:hover { text-decoration: underline; } a.qindex { font-weight: bold; } a.qindexHL { font-weight: bold; background-color: #6666cc; color: #ffffff; border: 1px double #9295C2; } .contents a.qindexHL:visited { color: #ffffff; } a.el { } a.elRef { } a.code { } a.codeRef { } /* @end */ dl.el { margin-left: -1cm; } .fragment { font-family: monospace, fixed; font-size: 100%; } pre.fragment { border: 1px solid #CCCCCC; background-color: #f5f5f5; padding: 4px 6px; margin: 4px 8px 4px 2px; } div.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px } div.groupHeader { margin-left: 16px; margin-top: 12px; margin-bottom: 6px; font-weight: bold; } div.groupText { margin-left: 16px; font-style: italic; } body { background: white; color: black; margin-right: 20px; margin-left: 20px; } td.indexkey { background-color: #e8eef2; font-weight: bold; border: 1px solid #CCCCCC; margin: 2px 0px 2px 0; padding: 2px 10px; } td.indexvalue { background-color: #e8eef2; border: 1px solid #CCCCCC; padding: 2px 10px; margin: 2px 0px; } tr.memlist { background-color: #f0f0f0; } p.formulaDsp { text-align: center; } img.formulaDsp { } img.formulaInl { vertical-align: middle; } /* @group Code Colorization */ span.keyword { color: #008000 } span.keywordtype { color: #604020 } span.keywordflow { color: #e08000 } span.comment { color: #800000 } span.preprocessor { color: #806020 } span.stringliteral { color: #002080 } span.charliteral { color: #008080 } span.vhdldigit { color: #ff00ff } span.vhdlchar { color: #000000 } span.vhdlkeyword { color: #700070 } span.vhdllogic { color: #ff0000 } /* @end */ .search { color: #003399; font-weight: bold; } form.search { margin-bottom: 0px; margin-top: 0px; } input.search { font-size: 75%; color: #000080; font-weight: normal; background-color: #e8eef2; } td.tiny { font-size: 75%; } .dirtab { padding: 4px; border-collapse: collapse; border: 1px solid #84b0c7; } th.dirtab { background: #e8eef2; font-weight: bold; } hr { height: 0; border: none; border-top: 1px solid #666; } /* @group Member Descriptions */ .mdescLeft, .mdescRight, .memItemLeft, .memItemRight, .memTemplItemLeft, .memTemplItemRight, .memTemplParams { background-color: #FAFAFA; border: none; margin: 4px; padding: 1px 0 0 8px; } .mdescLeft, .mdescRight { padding: 0px 8px 4px 8px; color: #555; } .memItemLeft, .memItemRight, .memTemplParams { border-top: 1px solid #ccc; } .memTemplParams { color: #606060; } /* @end */ /* @group Member Details */ /* Styles for detailed member documentation */ .memtemplate { font-size: 80%; color: #606060; font-weight: normal; margin-left: 3px; } .memnav { background-color: #e8eef2; border: 1px solid #84b0c7; text-align: center; margin: 2px; margin-right: 15px; padding: 2px; } .memitem { padding: 0; } .memname { white-space: nowrap; font-weight: bold; } .memproto { padding: 0; background-color: #d5e1e8; font-weight: bold; border: 1px solid #84b0c7; } .memdoc { padding: 2px 5px; border-top-width: 0; } .paramkey { text-align: right; } .paramtype { white-space: nowrap; } .paramname { color: #602020; white-space: nowrap; } .paramname em { font-style: normal; } /* @end */ /* @group Directory (tree) */ /* for the tree view */ .ftvtree { font-family: sans-serif; margin: 0.5em; } /* these are for tree view when used as main index */ .directory { font-size: 9pt; font-weight: bold; } .directory h3 { margin: 0px; margin-top: 1em; font-size: 11pt; } /* The following two styles can be used to replace the root node title with an image of your choice. Simply uncomment the next two styles, specify the name of your image and be sure to set 'height' to the proper pixel height of your image. */ /* .directory h3.swap { height: 61px; background-repeat: no-repeat; background-image: url("yourimage.gif"); } .directory h3.swap span { display: none; } */ .directory > h3 { margin-top: 0; } .directory p { margin: 0px; white-space: nowrap; } .directory div { display: none; margin: 0px; } .directory img { vertical-align: -30%; } /* these are for tree view when not used as main index */ .directory-alt { font-size: 100%; font-weight: bold; } .directory-alt h3 { margin: 0px; margin-top: 1em; font-size: 11pt; } .directory-alt > h3 { margin-top: 0; } .directory-alt p { margin: 0px; white-space: nowrap; } .directory-alt div { display: none; margin: 0px; } .directory-alt img { vertical-align: -30%; } /* @end */ address { font-style: normal; color: #333; } div.rationale:before { content: "Rationale:"; display: block; font-weight: bold; font-size: 0.85em; } div.rationale { font-style: italic; border-left: 0.25em solid #808080; padding-left: 0.5em; } div.rationale p { font-size: 0.85em; } telepathy-qt-0.9.3/doc/html/a00543_source.html0000644000175200001440000006207712000060453023215 0ustar00collabora-develusers00000000000000 contact-manager.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
contact-manager.h
00001 
00023 #ifndef _TelepathyQt_contact_manager_h_HEADER_GUARD_
00024 #define _TelepathyQt_contact_manager_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Channel>
00031 #include <TelepathyQt/Contact>
00032 #include <TelepathyQt/Feature>
00033 #include <TelepathyQt/Object>
00034 #include <TelepathyQt/ReferencedHandles>
00035 #include <TelepathyQt/Types>
00036 
00037 #include <QList>
00038 #include <QSet>
00039 #include <QString>
00040 #include <QStringList>
00041 #include <QVariantMap>
00042 
00043 namespace Tp
00044 {
00045 
00046 class Connection;
00047 class PendingContacts;
00048 class PendingOperation;
00049 
00050 class TP_QT_EXPORT ContactManager : public Object
00051 {
00052     Q_OBJECT
00053     Q_DISABLE_COPY(ContactManager)
00054 
00055 public:
00056     virtual ~ContactManager();
00057 
00058     ConnectionPtr connection() const;
00059 
00060     Features supportedFeatures() const;
00061 
00062     ContactListState state() const;
00063 
00064     Contacts allKnownContacts() const;
00065     QStringList allKnownGroups() const;
00066 
00067     PendingOperation *addGroup(const QString &group);
00068     PendingOperation *removeGroup(const QString &group);
00069 
00070     Contacts groupContacts(const QString &group) const;
00071     PendingOperation *addContactsToGroup(const QString &group,
00072             const QList<ContactPtr> &contacts);
00073     PendingOperation *removeContactsFromGroup(const QString &group,
00074             const QList<ContactPtr> &contacts);
00075 
00076     bool canRequestPresenceSubscription() const;
00077     bool subscriptionRequestHasMessage() const;
00078     PendingOperation *requestPresenceSubscription(
00079             const QList<ContactPtr> &contacts,
00080             const QString &message = QString());
00081     bool canRemovePresenceSubscription() const;
00082     bool subscriptionRemovalHasMessage() const;
00083     bool canRescindPresenceSubscriptionRequest() const;
00084     bool subscriptionRescindingHasMessage() const;
00085     PendingOperation *removePresenceSubscription(
00086             const QList<ContactPtr> &contacts,
00087             const QString &message = QString());
00088     bool canAuthorizePresencePublication() const;
00089     bool publicationAuthorizationHasMessage() const;
00090     PendingOperation *authorizePresencePublication(
00091             const QList<ContactPtr> &contacts,
00092             const QString &message = QString());
00093     bool publicationRejectionHasMessage() const;
00094     bool canRemovePresencePublication() const;
00095     bool publicationRemovalHasMessage() const;
00096     PendingOperation *removePresencePublication(
00097             const QList<ContactPtr> &contacts,
00098             const QString &message = QString());
00099     PendingOperation *removeContacts(
00100             const QList<ContactPtr> &contacts,
00101             const QString &message = QString());
00102 
00103     bool canBlockContacts() const;
00104     bool canReportAbuse() const;
00105     PendingOperation *blockContacts(const QList<ContactPtr> &contacts);
00106     PendingOperation *blockContactsAndReportAbuse(const QList<ContactPtr> &contacts);
00107     PendingOperation *unblockContacts(const QList<ContactPtr> &contacts);
00108 
00109     PendingContacts *contactsForHandles(const UIntList &handles,
00110             const Features &features = Features());
00111     PendingContacts *contactsForHandles(const ReferencedHandles &handles,
00112             const Features &features = Features());
00113     PendingContacts *contactsForHandles(const HandleIdentifierMap &handles,
00114             const Features &features = Features());
00115 
00116     PendingContacts *contactsForIdentifiers(const QStringList &identifiers,
00117             const Features &features = Features());
00118 
00119     PendingContacts *contactsForVCardAddresses(const QString &vcardField,
00120             const QStringList &vcardAddresses,
00121             const Features &features = Features());
00122     PendingContacts *contactsForUris(const QStringList &uris,
00123             const Features &features = Features());
00124 
00125     PendingContacts *upgradeContacts(const QList<ContactPtr> &contacts,
00126             const Features &features);
00127 
00128     void requestContactAvatars(const QList<ContactPtr> &contacts);
00129 
00130     PendingOperation *refreshContactInfo(const QList<ContactPtr> &contact);
00131 
00132 Q_SIGNALS:
00133     void stateChanged(Tp::ContactListState state);
00134 
00135     void presencePublicationRequested(const Tp::Contacts &contacts);
00136 
00137     void groupAdded(const QString &group);
00138     void groupRenamed(const QString &oldGroup, const QString &newGroup);
00139     void groupRemoved(const QString &group);
00140 
00141     void groupMembersChanged(const QString &group,
00142             const Tp::Contacts &groupMembersAdded,
00143             const Tp::Contacts &groupMembersRemoved,
00144             const Tp::Channel::GroupMemberChangeDetails &details);
00145 
00146     void allKnownContactsChanged(const Tp::Contacts &contactsAdded,
00147             const Tp::Contacts &contactsRemoved,
00148             const Tp::Channel::GroupMemberChangeDetails &details);
00149 
00150 private Q_SLOTS:
00151     TP_QT_NO_EXPORT void onAliasesChanged(const Tp::AliasPairList &);
00152     TP_QT_NO_EXPORT void doRequestAvatars();
00153     TP_QT_NO_EXPORT void onAvatarUpdated(uint, const QString &);
00154     TP_QT_NO_EXPORT void onAvatarRetrieved(uint, const QString &, const QByteArray &, const QString &);
00155     TP_QT_NO_EXPORT void onPresencesChanged(const Tp::SimpleContactPresences &);
00156     TP_QT_NO_EXPORT void onCapabilitiesChanged(const Tp::ContactCapabilitiesMap &);
00157     TP_QT_NO_EXPORT void onLocationUpdated(uint, const QVariantMap &);
00158     TP_QT_NO_EXPORT void onContactInfoChanged(uint, const Tp::ContactInfoFieldList &);
00159     TP_QT_NO_EXPORT void onClientTypesUpdated(uint, const QStringList &);
00160     TP_QT_NO_EXPORT void doRefreshInfo();
00161 
00162 private:
00163     class PendingRefreshContactInfo;
00164     class Roster;
00165     friend class Channel;
00166     friend class Connection;
00167     friend class PendingContacts;
00168     friend class PendingRefreshContactInfo;
00169     friend class Roster;
00170 
00171     TP_QT_NO_EXPORT ContactManager(Connection *parent);
00172 
00173     TP_QT_NO_EXPORT ContactPtr lookupContactByHandle(uint handle);
00174 
00175     TP_QT_NO_EXPORT ContactPtr ensureContact(const ReferencedHandles &handle,
00176             const Features &features,
00177             const QVariantMap &attributes);
00178     TP_QT_NO_EXPORT ContactPtr ensureContact(uint bareHandle,
00179             const QString &id, const Features &features);
00180 
00181     TP_QT_NO_EXPORT static QString featureToInterface(const Feature &feature);
00182     TP_QT_NO_EXPORT void ensureTracking(const Feature &feature);
00183 
00184     TP_QT_NO_EXPORT PendingOperation *introspectRoster();
00185     TP_QT_NO_EXPORT PendingOperation *introspectRosterGroups();
00186     TP_QT_NO_EXPORT void resetRoster();
00187 
00188     TP_QT_NO_EXPORT PendingOperation *refreshContactInfo(Contact *contact);
00189 
00190     struct Private;
00191     friend struct Private;
00192     Private *mPriv;
00193 };
00194 
00195 } // Tp
00196 
00197 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00091.html0000644000175200001440000004476412000060453021636 0ustar00collabora-develusers00000000000000 Tp::CallStream Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::CallStream Class Reference

The CallStream class provides an object representing a Telepathy Call.Stream. More...

#include <TelepathyQt/CallStream>

Inherits Tp::StatefulDBusProxy, and Tp::OptionalInterfaceFactory< CallStream >.

List of all members.

Signals

Public Member Functions


Detailed Description

The CallStream class provides an object representing a Telepathy Call.Stream.

Instances of this class cannot be constructed directly; the only way to get one is via CallContent.

See Asynchronous Object Model


Constructor & Destructor Documentation

Class destructor.


Member Function Documentation

CallContentPtr Tp::CallStream::content ( ) const

Return the content owning this call stream.

Returns:
The content owning this call stream.
Contacts Tp::CallStream::remoteMembers ( ) const

Return the contacts whose the call stream is with.

Returns:
The contacts whose the call stream is with.
See also:
remoteMembersRemoved()

Returns whether the user can request that a remote contact starts sending on this stream. Not all protocols allow the user to ask the other side to start sending media.

Returns:
true if the user can request that a remote contact starts sending on this stream, or false otherwise.
See also:
requestReceiving()

Return the call stream local sending state.

Returns:
The call stream local sending state.
See also:
localSendingStateChanged()
SendingState Tp::CallStream::remoteSendingState ( const ContactPtr &  contact) const

Return the call stream remote sending state for a given contact.

Returns:
The call stream remote sending state for a contact.
See also:
remoteSendingStateChanged()

Request that media starts or stops being sent on this call stream.

Returns:
A PendingOperation which will emit PendingOperation::finished when the call has finished.
See also:
localSendingStateChanged()
PendingOperation * Tp::CallStream::requestReceiving ( const ContactPtr &  contact,
bool  receive 
)

Request that a remote contact stops or starts sending on this call stream.

Returns:
A PendingOperation which will emit PendingOperation::finished when the call has finished.
See also:
remoteSendingStateChanged()
void Tp::CallStream::localSendingStateChanged ( Tp::SendingState  localSendingState,
const Tp::CallStateReason reason 
) [signal]

This signal is emitted when the local sending state of this call stream changes.

Parameters:
localSendingStateThe new local sending state of this call stream.
reasonThe reason that caused this change
See also:
localSendingState()
void Tp::CallStream::remoteSendingStateChanged ( const QHash< Tp::ContactPtr, Tp::SendingState > &  remoteSendingStates,
const Tp::CallStateReason reason 
) [signal]

This signal is emitted when any remote sending state of this call stream changes.

Parameters:
remoteSendingStatesThe new remote sending states of this call stream.
reasonThe reason that caused these changes
See also:
remoteSendingState()
void Tp::CallStream::remoteMembersRemoved ( const Tp::Contacts &  members,
const Tp::CallStateReason reason 
) [signal]

This signal is emitted when one or more members of this stream are removed.

Parameters:
membersThe members that were removed from this call stream.
reasonThe reason for that caused these removals
See also:
remoteMembers()


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00340.html0000644000175200001440000000713112000060453021616 0ustar00collabora-develusers00000000000000 Tp::PropertyFlagsChange Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PropertyFlagsChange Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

A struct (property ID, flags) representing a change to a property's flags, as seen in the PropertyFlagsChanged signal on the Properties interface.


Member Data Documentation


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00759.html0000644000175200001440000017547312000060453021653 0ustar00collabora-develusers00000000000000 Error string constants
   Home · All Classes · All Namespaces · Modules · Functions · Files
Error string constants

Defines


Detailed Description

Names of the D-Bus errors in the specification.


Define Documentation

The error name "org.freedesktop.DBus.Error.NameHasNoOwner" as a QLatin1String.

Raised by the D-Bus daemon when looking up the owner of a well-known name, if no process owns that name.

Also used by DBusProxy to indicate that the owner of a well-known name has disappeared (usually indicating that the process owning that name exited or crashed).

The error name "org.freedesktop.DBus.Error.UnknownInterface" as a QLatin1String.

The error name "org.freedesktop.DBus.Error.UnknownMethod" as a QLatin1String.

Raised by the D-Bus daemon when the method name invoked isn't known by the object you invoked it on.

The error name "org.freedesktop.Telepathy.Qt.Error.ObjectRemoved" as a QLatin1String.

The error name "org.freedesktop.Telepathy.Qt.Error.Inconsistent" as a QLatin1String.

The error name "org.freedesktop.Telepathy.Qt.Error.Orphaned" as a QLatin1String.

This error is used when the "parent" proxy of an object gets invalidated. For example, a Channel whose corresponding Connection is invalidated invalidates itself with this error, as do leftover StreamTube connections when their parent StreamTubeChannel is invalidated. The invalidation reason of the parent proxy might provide more information on the cause of the error.

The error name "org.freedesktop.Telepathy.Error.NetworkError" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised when there is an error reading from or writing to the network.

The error name "org.freedesktop.Telepathy.Error.NotImplemented" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised when the requested method, channel, etc is not available on this connection.

The error name "org.freedesktop.Telepathy.Error.InvalidArgument" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised when one of the provided arguments is invalid.

The error name "org.freedesktop.Telepathy.Error.NotAvailable" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised when the requested functionality is temporarily unavailable.

The error name "org.freedesktop.Telepathy.Error.PermissionDenied" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The user is not permitted to perform the requested operation.

The error name "org.freedesktop.Telepathy.Error.Disconnected" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The connection is not currently connected and cannot be used. This error may also be raised when operations are performed on a Connection for which StatusChanged has signalled status Disconnected for reason None. The second usage corresponds to None in the Connection_Status_Reason enum; if a better reason is available, the corresponding error should be used instead.

The error name "org.freedesktop.Telepathy.Error.InvalidHandle" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The handle specified is unknown on this channel or connection.

The error name "org.freedesktop.Telepathy.Error.Channel.Banned" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

You are banned from the channel.

The error name "org.freedesktop.Telepathy.Error.Channel.Full" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The channel is full.

The error name "org.freedesktop.Telepathy.Error.Channel.InviteOnly" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The requested channel is invite-only.

The error name "org.freedesktop.Telepathy.Error.NotYours" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The requested channel or other resource already exists, and another user interface in this session is responsible for it.

User interfaces SHOULD handle this error unobtrusively, since it indicates that some other user interface is already processing the channel.

The error name "org.freedesktop.Telepathy.Error.Cancelled" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised by an ongoing request if it is cancelled by user request before it has completed, or when operations are performed on an object which the user has asked to close (for instance, a Connection where the user has called Disconnect, or a Channel where the user has called Close). The second form can be used to correspond to the Requested member in the Connection_Status_Reason enum, or to to represent the situation where disconnecting a Connection, closing a Channel, etc. has been requested by the user but this request has not yet been acted on, for instance because the service will only act on the request when it has finished processing an event queue.

The error name "org.freedesktop.Telepathy.Error.AuthenticationFailed" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised when authentication with a service was unsuccessful. This corresponds to Authentication_Failed in the Connection_Status_Reason enum.

The error name "org.freedesktop.Telepathy.Error.EncryptionNotAvailable" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised if a user request insisted that encryption should be used, but encryption was not actually available. This corresponds to part of Encryption_Error in the Connection_Status_Reason enum. It's been separated into a distinct error here because the two concepts that were part of EncryptionError seem to be things that could reasonably appear differently in the UI.

The error name "org.freedesktop.Telepathy.Error.EncryptionError" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised if encryption appears to be available, but could not actually be used (for instance if SSL/TLS negotiation fails). This corresponds to part of Encryption_Error in the Connection_Status_Reason enum.

The error name "org.freedesktop.Telepathy.Error.Cert.NotProvided" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised if the server did not provide a SSL/TLS certificate. This error MUST NOT be used to represent the absence of a client certificate provided by the Telepathy connection manager. This corresponds to Cert_Not_Provided in the Connection_Status_Reason enum. That error explicitly applied only to server SSL certificates, so this one is similarly limited; having the CM present a client certificate is a possible future feature, but it should have its own error handling.

The error name "org.freedesktop.Telepathy.Error.Cert.Untrusted" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised if the server provided a SSL/TLS certificate signed by an untrusted certifying authority. This error SHOULD NOT be used to represent a self-signed certificate: see the Self Signed error for that. This corresponds to Cert_Untrusted in the Connection_Status_Reason enum and to Untrusted in the TLS_Certificate_Reject_Reason enum, with a clarification to avoid ambiguity.

The error name "org.freedesktop.Telepathy.Error.Cert.Expired" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised if the server provided an expired SSL/TLS certificate. This corresponds to Cert_Expired in the Connection_Status_Reason enum and to Expired in the TLS_Certificate_Reject_Reason enum.

The error name "org.freedesktop.Telepathy.Error.Cert.NotActivated" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised if the server provided an SSL/TLS certificate that will become valid at some point in the future. This corresponds to Cert_Not_Activated in the Connection_Status_Reason enum and to Not_Activated in the TLS_Certificate_Reject_Reason enum.

The error name "org.freedesktop.Telepathy.Error.Cert.FingerprintMismatch" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised if the server provided an SSL/TLS certificate that did not have the expected fingerprint. This corresponds to Cert_Fingerprint_Mismatch in the Connection_Status_Reason enum and to Fingerprint_Mismatch in the TLS_Certificate_Reject_Reason enum.

The error name "org.freedesktop.Telepathy.Error.Cert.HostnameMismatch" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised if the server provided an SSL/TLS certificate that did not match its hostname.

You MAY be able to get more details about the expected and certified hostnames by looking up the 'expected-hostname' and 'certificate-hostname' keys in the details map that came together with this error.

This corresponds to Cert_Hostname_Mismatch in the Connection_Status_Reason enum and to Hostname_Mismatch in the TLS_Certificate_Reject_Reason enum.

The error name "org.freedesktop.Telepathy.Error.Cert.SelfSigned" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised if the server provided an SSL/TLS certificate that is self-signed and untrusted. This corresponds to Cert_Self_Signed in the Connection_Status_Reason enum and to Self_Signed in the TLS_Certificate_Reject_Reason enum.

The error name "org.freedesktop.Telepathy.Error.Cert.Revoked" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised if the server provided an SSL/TLS certificate that has been revoked. This corresponds to Cert_Revoked in the Connection_Status_Reason enum and to Revoked in the TLS_Certificate_Reject_Reason enum.

The error name "org.freedesktop.Telepathy.Error.Cert.Insecure" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised if the server provided an SSL/TLS certificate that uses an insecure cipher algorithm or is cryptographically weak. This corresponds to Cert_Insecure in the Connection_Status_Reason enum and to Insecure in the TLS_Certificate_Reject_Reason enum.

The error name "org.freedesktop.Telepathy.Error.Cert.Invalid" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised if the server provided an SSL/TLS certificate that is unacceptable in some way that does not have a more specific error. This corresponds to Cert_Other_Error in the Connection_Status_Reason enum and to Unknown in the TLS_Certificate_Reject_Reason enum.

The error name "org.freedesktop.Telepathy.Error.Cert.LimitExceeded" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised if the length in bytes of the server certificate, or the depth of the server certificate chain exceeds the limits imposed by the crypto library. This corresponds to Cert_Limit_Exceeded in the Connection_Status_Reason enum and to Limit_Exceeded in the TLS_Certificate_Reject_Reason enum.

The error name "org.freedesktop.Telepathy.Error.NotCapable" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised when requested functionality is unavailable due to contact not having required capabilities.

The error name "org.freedesktop.Telepathy.Error.Offline" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised when requested functionality is unavailable because a contact is offline. This corresponds to Offline in the Channel_Group_Change_Reason enum.

The error name "org.freedesktop.Telepathy.Error.Channel.Kicked" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Used to represent a user being ejected from a channel by another user, for instance being kicked from a chatroom. This corresponds to Kicked in the Channel_Group_Change_Reason enum.

The error name "org.freedesktop.Telepathy.Error.Busy" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Used to represent a user being removed from a channel because of a "busy" indication. This error SHOULD NOT be used to represent a server or other infrastructure being too busy to process a request - for that, see ServerBusy. This corresponds to Busy in the Channel_Group_Change_Reason enum.

The error name "org.freedesktop.Telepathy.Error.NoAnswer" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Used to represent a user being removed from a channel because they did not respond, e.g. to a StreamedMedia call. This corresponds to No_Answer in the Channel_Group_Change_Reason enum.

The error name "org.freedesktop.Telepathy.Error.DoesNotExist" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised when the requested user does not, in fact, exist. This corresponds to Invalid_Contact in the Channel_Group_Change_Reason enum, but can also be used to represent other things not existing (like chatrooms, perhaps).

The error name "org.freedesktop.Telepathy.Error.Terminated" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised when a channel is terminated for an unspecified reason. In particular, this error SHOULD be used whenever normal termination of a 1-1 StreamedMedia call by the remote user is represented as a D-Bus error name. This corresponds to None in the Channel_Group_Change_Reason enum.

The error name "org.freedesktop.Telepathy.Error.Media.CodecsIncompatible" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised when the local streaming implementation has no codecs in common with the remote side. This corresponds to Media_Error.

The error name "org.freedesktop.Telepathy.Error.Media.UnsupportedType" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

The media stream type requested is not supported by either the local or remote side. This corresponds to Media_Error.

The error name "org.freedesktop.Telepathy.Error.Media.StreamingError" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised when the call's streaming implementation has some kind of internal error. This corresponds to Internal_Error.

The error name "org.freedesktop.Telepathy.Error.ConnectionRefused" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised when a connection is refused.

The error name "org.freedesktop.Telepathy.Error.ConnectionFailed" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised when a connection can't be established.

The error name "org.freedesktop.Telepathy.Error.ConnectionLost" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised when a connection is broken.

The error name "org.freedesktop.Telepathy.Error.AlreadyConnected" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised when the user attempts to connect to an account but they are already connected (perhaps from another client or computer), and the protocol or account settings do not allow this. XMPP can have this behaviour if the user chooses the same resource in both clients (it is server-dependent whether the result is AlreadyConnected on the new connection, ConnectionReplaced on the old connection, or two successful connections).

The error name "org.freedesktop.Telepathy.Error.ConnectionReplaced" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised by an existing connection to an account if it is replaced by a new connection (perhaps from another client or computer). In MSNP, when connecting twice with the same Passport, the new connection "wins" and the old one is automatically disconnected. XMPP can also have this behaviour if the user chooses the same resource in two clients (it is server-dependent whether the result is AlreadyConnected on the new connection, ConnectionReplaced on the old connection, or two successful connections).

The error name "org.freedesktop.Telepathy.Error.RegistrationExists" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised during in-band registration if the server indicates that the requested account already exists.

The error name "org.freedesktop.Telepathy.Error.ServiceBusy" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised if a server or some other piece of infrastructure cannot process the request, e.g. due to resource limitations. Clients MAY try again later.
This is not the same error as Busy, which indicates that a user is busy.

The error name "org.freedesktop.Telepathy.Error.ResourceUnavailable" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised if a request cannot be satisfied because a process local to the user has insufficient resources. Clients MAY try again later. For instance, the ChannelDispatcher might raise this error for some or all channel requests if it has detected that there is not enough free memory.

The error name "org.freedesktop.Telepathy.Error.WouldBreakAnonymity" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised if a request cannot be satisfied without violating an earlier request for anonymity, and the earlier request specified that raising an error is preferable to disclosing the user's identity (for instance via Connection.Interface.Anonymity.AnonymityMandatory or Channel.Interface.Anonymity.AnonymityMandatory).

The error name "org.freedesktop.Telepathy.Error.NotYet" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised when the requested functionality is not yet available, but is likely to become available after some time has passed.

The error name "org.freedesktop.Telepathy.Error.Rejected" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised when an incoming or outgoing Call1 is rejected by the the receiver.

The error name "org.freedesktop.Telepathy.Error.PickedUpElsewhere" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised when a call was terminated as a result of the local user picking up the call on a different resource.

The error name "org.freedesktop.Telepathy.Error.ServiceConfused" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised when a server or other piece of infrastructure indicates an internal error, or when a message that makes no sense is received from a server or other piece of infrastructure. For instance, this is appropriate for XMPP's internal-server-error, and is also appropriate if you receive sufficiently inconsistent information from a server that you cannot continue.

The error name "org.freedesktop.Telepathy.Error.Confused" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised if a server rejects protocol messages from a connection manager claiming that they do not make sense, two local processes fail to understand each other, or an apparently impossible situation is reached. For instance, this would be an appropriate mapping for XMPP's errors bad-format, invalid-xml, etc., which can't happen unless the local (or remote) XMPP implementation is faulty. This is also analogous to Invalid_CM_Behavior, TP_DBUS_ERROR_INCONSISTENT in telepathy-glib, and TP_QT_ERROR_INCONSISTENT in telepathy-qt.

The error name "org.freedesktop.Telepathy.Error.SoftwareUpgradeRequired" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised as a ConnectionInterface::ConnectionError() when a Connection cannot be established because either the Connection Manager or its support library (e.g. wocky, papyon, sofiasip) requires upgrading to support a newer protocol version.

This error corresponds to the Connection_Status_Reason of Network_Error.

Some protocols transmit a protocol or library version number to the server, which will disconnect them if the version isn't appropriate. This way we can report the error to the user, and if appropriate, the user's client can check for updates.

The error name "org.freedesktop.Telepathy.Error.EmergencyCallsNotSupported" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised if a client attempts to dial a number that is recognized as an emergency number (e.g. '911' in the USA), but the Connection Manager or provider does not support dialling emergency numbers. Many VOIP providers have the ability to dial traditional (PSTN) telephone numbers, but do not provide the ability to dial emergency numbers (for instance, Google Voice). This error provides additional information about why such a call was unsuccessful.

The error name "org.freedesktop.Telepathy.Error.InsufficientBalance" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised if the user has insufficient ConnectionInterfaceBalanceInterface to place a call or send a message.

The key 'balance-required' MAY be included in ChannelTypeCallInterface::CallStateDetails or a delivery report's Message_Part (with the same units and scale as ConnectionInterfaceBalanceInterface::AccountBalance ) to indicate how much credit is required to make this call or send this message.

The error name "org.freedesktop.Telepathy.Error.CaptchaNotSupported" as a QLatin1String, usable in QString requiring contexts even when building with Q_NO_CAST_FROM_ASCII defined.

Raised if the ChannelInterfaceCaptchaAuthenticationInterface Handler either has no UI to present captchas, or it does, but wasn't able to answer any of the captchas given.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00270.html0000644000175200001440000023057212000060453021627 0ustar00collabora-develusers00000000000000 Tp::Client::MediaStreamHandlerInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

#include <TelepathyQt/MediaStreamHandler>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Media.StreamHandler".


Constructor & Destructor Documentation

Tp::Client::MediaStreamHandlerInterface::MediaStreamHandlerInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a MediaStreamHandlerInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::MediaStreamHandlerInterface::MediaStreamHandlerInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a MediaStreamHandlerInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a MediaStreamHandlerInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Member Function Documentation

static QLatin1String Tp::Client::MediaStreamHandlerInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Media.StreamHandler", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property STUNServers of type Tp::SocketAddressIPList.

The IP addresses of possible STUN servers to use for NAT traversal, as dotted-quad IPv4 address literals or RFC2373 IPv6 address literals. This property cannot change once the stream has been created, so there is no change notification. The IP addresses MUST NOT be given as DNS hostnames. High-quality connection managers already need an asynchronous DNS resolver, so they might as well resolve this name to an IP to make life easier for streaming implementations.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property CreatedLocally of type bool.

True if we were the creator of this stream, false otherwise. This information is needed for some nat traversal mechanisms, such as ICE-UDP, where the creator gets the role of the controlling agent.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property NATTraversal of type QString.

The transport (NAT traversal technique) to be used for this stream. Well-known values include:

none
Raw UDP, with or without STUN, should be used. If the STUNServers property is non-empty, STUN SHOULD be used.
stun
A deprecated synonym for 'none'.
gtalk-p2p
Google Talk peer-to-peer connectivity establishment should be used, as implemented in libjingle 0.3.
ice-udp
Interactive Connectivity Establishment should be used, as defined by the IETF MMUSIC working group.
wlm-8.5
The transport used by Windows Live Messenger 8.5 or later, which resembles ICE draft 6, should be used.
wlm-2009
The transport used by Windows Live Messenger 2009 or later, which resembles ICE draft 19, should be used.

This property cannot change once the stream has been created, so there is no change notification.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property RelayInfo of type Tp::StringVariantMapList.

A list of mappings describing TURN or Google relay servers available for the client to use in its candidate gathering, as determined from the protocol. Map keys are:

ip - s
The IP address of the relay server as a dotted-quad IPv4 address literal or an RFC2373 IPv6 address literal. This MUST NOT be a DNS hostname.
High-quality connection managers already need an asynchronous DNS resolver, so they might as well resolve this name to an IP and make life easier for streaming implementations.
type - s

Either udp for UDP (UDP MUST be assumed if this key is omitted), tcp for TCP, or tls.

The precise meaning of this key depends on the NATTraversal property: if NATTraversal is ice-udp, tls means TLS over TCP as referenced by ICE draft 19, and if NATTraversal is gtalk-p2p, tls means a fake SSL session over TCP as implemented by libjingle.

port - q
The UDP or TCP port of the relay server as an ASCII unsigned integer
username - s
The username to use
password - s
The password to use
component - u
The component number to use this relay server for, as an ASCII unsigned integer; if not included, this relay server may be used for any or all components.
In ICE draft 6, as used by Google Talk, credentials are only valid once, so each component needs relaying separately.

An equivalent of the gtalk-p2p-relay-token property on MediaSignalling channels is not included here. The connection manager should be responsible for making the necessary HTTP requests to turn the token into a username and password.

The type of relay server that this represents depends on the value of the NATTraversal property. If NATTraversal is ice-udp, this is a TURN server; if NATTraversal is gtalk-p2p, this is a Google relay server; otherwise, the meaning of RelayInfo is undefined.

If relaying is not possible for this stream, the list is empty.

This property cannot change once the stream has been created, so there is no change notification.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::MediaStreamHandlerInterface::CodecChoice ( uint  codecID,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method CodecChoice on the remote object.

Inform the connection manager of codec used to receive data.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::MediaStreamHandlerInterface::Error ( uint  errorCode,
const QString &  message,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method Error on the remote object.

Inform the connection manager that an error occured in this stream. The connection manager should emit the StreamError signal for the stream on the relevant channel, and remove the stream from the session.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
errorCodeID of error, from the MediaStreamError enumeration
messageString describing the error
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::MediaStreamHandlerInterface::NativeCandidatesPrepared ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method NativeCandidatesPrepared on the remote object.

Informs the connection manager that all possible native candisates have been discovered for the moment.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::MediaStreamHandlerInterface::NewActiveCandidatePair ( const QString &  nativeCandidateID,
const QString &  remoteCandidateID,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method NewActiveCandidatePair on the remote object.

Informs the connection manager that a valid candidate pair has been discovered and streaming is in progress.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::MediaStreamHandlerInterface::NewActiveTransportPair ( const QString &  nativeCandidateID,
const Tp::MediaStreamHandlerTransport nativeTransport,
const QString &  remoteCandidateID,
const Tp::MediaStreamHandlerTransport remoteTransport,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method NewActiveTransportPair on the remote object.

Informs the connection manager that a valid transport pair has been discovered and streaming is in progress. Component id MUST be the same for both transports and the pair is only valid for that component. The connection manager might need to send the details of the active transport pair (e.g. c and o parameters of SDP body need to contain address of selected native RTP transport as stipulated by RFC 5245). However, the candidate ID might not be enough to determine these info if the transport was found after NativeCandidatesPrepared has been called (e.g. peer reflexive ICE candidate). This method must be called before NewActiveCandidatePair. This way, connection managers supporting this method can safely ignore subsequent NewActiveCandidatePair call. Connection managers SHOULD NOT implement this method unless they need to inform the peer about selected transports. As a result, streaming implementations MUST NOT treat errors raised by this method as fatal. Usually, connection managers only need to do one answer/offer round-trip. However, some protocols give the possibility to to send an updated offer (e.g. ICE defines such mechanism to avoid some race conditions and to properly set the state of gateway devices).

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::MediaStreamHandlerInterface::NewNativeCandidate ( const QString &  candidateID,
const Tp::MediaStreamHandlerTransportList transports,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method NewNativeCandidate on the remote object.

Inform this MediaStreamHandler that a new native transport candidate has been ascertained.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
candidateIDString identifier for this candidate
transports Array of transports for this candidate, with fields:
  • component number
  • IP address (as a string)
  • port
  • base network protocol (one of the values of MediaStreamBaseProto)
  • proto subtype (e.g. RTP)
  • proto profile (e.g. AVP)
  • our preference value of this transport (double in range 0.0-1.0 inclusive); 1 signals the most preferred transport
  • transport type, one of the values of MediaStreamTransportType
  • username if authentication is required
  • password if authentication is required
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::MediaStreamHandlerInterface::Ready ( const Tp::MediaStreamHandlerCodecList codecs,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method Ready on the remote object.

Inform the connection manager that a client is ready to handle this StreamHandler. Also provide it with info about all supported codecs.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
codecsLocally-supported codecs.
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::MediaStreamHandlerInterface::SetLocalCodecs ( const Tp::MediaStreamHandlerCodecList codecs,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method SetLocalCodecs on the remote object.

Used to provide codecs after Ready(), so the media client can go ready for an incoming call and exchange candidates/codecs before knowing what local codecs are available.

This is useful for gatewaying calls between two connection managers. Given an incoming call, you need to call Ready() to get the remote codecs before you can use them as the "local" codecs to place the outgoing call, and hence receive the outgoing call's remote codecs to use as the incoming call's "local" codecs.

In this situation, you would pass an empty list of codecs to the incoming call's Ready method, then later call SetLocalCodecs on the incoming call in order to respond to the offer.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
codecsLocally-supported codecs
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::MediaStreamHandlerInterface::StreamState ( uint  state,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method StreamState on the remote object.

Informs the connection manager of the stream's current state, as as specified in Channel.Type.StreamedMedia::ListStreams.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::MediaStreamHandlerInterface::SupportedCodecs ( const Tp::MediaStreamHandlerCodecList codecs,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method SupportedCodecs on the remote object.

Inform the connection manager of the supported codecs for this session. This is called after the connection manager has emitted SetRemoteCodecs to notify what codecs are supported by the peer, and will thus be an intersection of all locally supported codecs (passed to Ready) and those supported by the peer.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
codecsLocally supported codecs.
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::MediaStreamHandlerInterface::CodecsUpdated ( const Tp::MediaStreamHandlerCodecList codecs,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method CodecsUpdated on the remote object.

Inform the connection manager that the parameters of the supported codecs for this session have changed. The connection manager should send the new parameters to the remote contact. This is required for H.264 and Theora, for example.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
codecsLocally supported codecs, which SHOULD be the same as were previously in effect, but possibly with different parameters.
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::MediaStreamHandlerInterface::HoldState ( bool  held,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method HoldState on the remote object.

Notify the connection manager that the stream's hold state has been changed successfully in response to SetStreamHeld.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
heldIf true, the stream is now on hold.
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::MediaStreamHandlerInterface::UnholdFailure ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method UnholdFailure on the remote object.

Notify the connection manager that an attempt to reacquire the necessary hardware or software resources to unhold the stream, in response to SetStreamHeld, has failed.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::MediaStreamHandlerInterface::SupportedFeedbackMessages ( const Tp::RTCPFeedbackMessageMap messages,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method SupportedFeedbackMessages on the remote object.

Inform the connection manager of the supported feedback messages for this session. This is called a before calling SupportedCodecs, Ready or CodecsUpdated to indicate the local, or negotiated feedback messages.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
messagesLocally supported feedback messages.
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::MediaStreamHandlerInterface::SupportedHeaderExtensions ( const Tp::RTPHeaderExtensionsList headerExtensions,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method SupportedHeaderExtensions on the remote object.

Inform the connection manager of the supported RTP header extensions for this session. This is called before calling SupportedCodecs, Ready or CodecsUpdated to indicate the local or negotiated RTP header extensions.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
headerExtensionsLocally supported RTP header extensions.
timeoutThe timeout in milliseconds.
void Tp::Client::MediaStreamHandlerInterface::AddRemoteCandidate ( const QString &  candidateID,
const Tp::MediaStreamHandlerTransportList transports 
) [signal]

Represents the signal AddRemoteCandidate on the remote object.

Signal emitted when the connection manager wishes to inform the client of a new remote candidate.

Parameters:
candidateIDString identifier for this candidate
transportsArray of transports for this candidate with fields, as defined in NewNativeCandidate

Represents the signal Close on the remote object.

Signal emitted when the connection manager wishes the stream to be closed.

void Tp::Client::MediaStreamHandlerInterface::RemoveRemoteCandidate ( const QString &  candidateID) [signal]

Represents the signal RemoveRemoteCandidate on the remote object.

Signal emitted when the connection manager wishes to inform the client that the remote end has removed a previously usable candidate. It seemed like a good idea at the time, but wasn't.

Parameters:
candidateIDString identifier for remote candidate to drop
void Tp::Client::MediaStreamHandlerInterface::SetActiveCandidatePair ( const QString &  nativeCandidateID,
const QString &  remoteCandidateID 
) [signal]

Represents the signal SetActiveCandidatePair on the remote object.

Emitted by the connection manager to inform the client that a valid candidate pair has been discovered by the remote end and streaming is in progress.

Represents the signal SetRemoteCandidateList on the remote object.

Signal emitted when the connection manager wishes to inform the client of all the available remote candidates at once.

Parameters:
remoteCandidatesA list of candidate id and a list of transports as defined in NewNativeCandidate

Represents the signal SetRemoteCodecs on the remote object.

Signal emitted when the connection manager wishes to inform the client of the codecs supported by the remote end. If these codecs are compatible with the remote codecs, then the client must call SupportedCodecs, otherwise call Error.

Parameters:
codecsCodecs supported by the remote peer.

Represents the signal SetStreamPlaying on the remote object.

If emitted with argument TRUE, this means that the connection manager wishes to set the stream playing; this means that the streaming implementation should expect to receive data. If emitted with argument FALSE this signal is basically meaningless and should be ignored. We're very sorry.

Represents the signal SetStreamSending on the remote object.

Signal emitted when the connection manager wishes to set whether or not the stream sends to the remote end.

Represents the signal StartTelephonyEvent on the remote object.

Request that a telephony event (as defined by RFC 4733) is transmitted over this stream until StopTelephonyEvent is called.

Parameters:
eventA telephony event code.
void Tp::Client::MediaStreamHandlerInterface::StartNamedTelephonyEvent ( uchar  event,
uint  codecID 
) [signal]

Represents the signal StartNamedTelephonyEvent on the remote object.

Request that a telephony event (as defined by RFC 4733) is transmitted over this stream until StopTelephonyEvent is called. This differs from StartTelephonyEvent in that you force the event to be transmitted as a RFC 4733 named event, not as sound. You can also force a specific Codec ID.

Parameters:
eventA telephony event code as defined by RFC 4733.
codecIDThe payload type to use when sending events. The value 0xFFFFFFFF means to send with the already configured event type instead of using the specified one.

Represents the signal StartSoundTelephonyEvent on the remote object.

Request that a telephony event (as defined by RFC 4733) is transmitted over this stream until StopTelephonyEvent is called. This differs from StartTelephonyEvent in that you force the event to be transmitted as sound instead of as a named event.

Parameters:
eventA telephony event code as defined by RFC 4733.

Represents the signal StopTelephonyEvent on the remote object.

Request that any ongoing telephony events (as defined by RFC 4733) being transmitted over this stream are stopped.

Represents the signal SetStreamHeld on the remote object.

Emitted when the connection manager wishes to place the stream on hold (so the streaming client should free hardware or software resources) or take the stream off hold (so the streaming client should reacquire the necessary resources).

When placing a channel's streams on hold, the connection manager SHOULD notify the remote contact that this will be done (if appropriate in the protocol) before it emits this signal.

It is assumed that relinquishing a resource will not fail. If it does, the call is probably doomed anyway.

When unholding a channel's streams, the connection manager SHOULD emit this signal and wait for success to be indicated via HoldState before it notifies the remote contact that the channel has been taken off hold.

This means that if a resource is unavailable, the remote contact will never even be told that we tried to acquire it.

Parameters:
heldIf true, the stream is to be placed on hold.

Represents the signal SetRemoteFeedbackMessages on the remote object.

Signal emitted when the connection manager wishes to inform the client of the feedback messages supported by the remote end. This signal is emitted before SetRemoteCodecs. If the client supports any of these messages, it must call SupportedFeedbackMessages before calling SupportedCodecs.

Parameters:
messagesRemote Feedback messages desired by the remote side

Represents the signal SetRemoteHeaderExtensions on the remote object.

Signal emitted when the connection manager wishes to inform the client of the RTP header extensions supported by the remote end. This signal is emitted before SetRemoteCodecs. If the client supports any of these messages, it must call SupportedHeaderExtensions before calling SupportedCodecs.

Parameters:
headerExtensionsHeader extensions desired by the remote side
void Tp::Client::MediaStreamHandlerInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00128.html0000644000175200001440000004717712000060453021640 0ustar00collabora-develusers00000000000000 Tp::Client::ChannelInterfaceMediaSignallingInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelInterfaceMediaSignallingInterface Class Reference

#include <TelepathyQt/Channel>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

  • void NewSessionHandler (const QDBusObjectPath &sessionHandler, const QString &sessionType)

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Channel.Interface.MediaSignalling".


Constructor & Destructor Documentation

Tp::Client::ChannelInterfaceMediaSignallingInterface::ChannelInterfaceMediaSignallingInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfaceMediaSignallingInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ChannelInterfaceMediaSignallingInterface::ChannelInterfaceMediaSignallingInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfaceMediaSignallingInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ChannelInterfaceMediaSignallingInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ChannelInterfaceMediaSignallingInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ChannelInterfaceMediaSignallingInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Channel.Interface.MediaSignalling", which this class represents.

Returns:
The D-Bus interface name.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.

Begins a call to the D-Bus method GetSessionHandlers on the remote object.

Returns all currently active session handlers on this channel as a list of (session_handler_path, type).

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
void Tp::Client::ChannelInterfaceMediaSignallingInterface::NewSessionHandler ( const QDBusObjectPath &  sessionHandler,
const QString &  sessionType 
) [signal]

Represents the signal NewSessionHandler on the remote object.

Signal that a session handler object has been created. The client should create a session object and create streams for the streams within.

Parameters:
sessionHandlerObject path of the new Media.SessionHandler object
sessionTypeString indicating type of session, eg "rtp"
void Tp::Client::ChannelInterfaceMediaSignallingInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01005.html0000644000175200001440000000503512000060453021616 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MessagePart Member List
This is the complete list of members for Tp::MessagePart, including all inherited members.
MessagePart()Tp::MessagePart [inline]
MessagePart(const QMap< QString, QDBusVariant > &a)Tp::MessagePart [inline]
operator=(const QMap< QString, QDBusVariant > &a)Tp::MessagePart [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01038.html0000644000175200001440000000513312000060453021623 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::VCardFieldAddressMap Member List
This is the complete list of members for Tp::VCardFieldAddressMap, including all inherited members.
operator=(const QMap< QString, QString > &a)Tp::VCardFieldAddressMap [inline]
VCardFieldAddressMap()Tp::VCardFieldAddressMap [inline]
VCardFieldAddressMap(const QMap< QString, QString > &a)Tp::VCardFieldAddressMap [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_vars_0x67.html0000644000175200001440000000302212000060453024631 0ustar00collabora-develusers00000000000000 Class Members - Variables
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- g -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00369.html0000644000175200001440000000761212000060453021635 0ustar00collabora-develusers00000000000000 Tp::RoomInfo Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::RoomInfo Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.


Member Data Documentation

QVariantMap Tp::RoomInfo::info


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00120.html0000644000175200001440000010607412000060453021620 0ustar00collabora-develusers00000000000000 Tp::Client::ChannelInterfaceCaptchaAuthenticationInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelInterfaceCaptchaAuthenticationInterface Class Reference

#include <TelepathyQt/Channel>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Channel.Interface.CaptchaAuthentication1".


Constructor & Destructor Documentation

Tp::Client::ChannelInterfaceCaptchaAuthenticationInterface::ChannelInterfaceCaptchaAuthenticationInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfaceCaptchaAuthenticationInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ChannelInterfaceCaptchaAuthenticationInterface::ChannelInterfaceCaptchaAuthenticationInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfaceCaptchaAuthenticationInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ChannelInterfaceCaptchaAuthenticationInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ChannelInterfaceCaptchaAuthenticationInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ChannelInterfaceCaptchaAuthenticationInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Channel.Interface.CaptchaAuthentication1", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property CanRetryCaptcha of type bool.

If true, GetCaptchas() can be expected to return new captcha information when in the Local_Pending state. If false, GetCaptchas() will return NotAvailable on subsequent calls.

Refreshing the captcha isn't required to work, although some protocols and implementations allow it. This is usually done in case a given captcha is unintelligible.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property CaptchaStatus of type uint.

The current status of this channel.

Because only the Handler should call methods on this interface, the Handler MAY reduce round-trips by not fetching the initial value of this property, and instead assume that is initially Local_Pending.

This assumption normally avoids the need to call GetAll(), since the values of CaptchaError and CaptchaErrorDetails are also implied by this assumption, and the only other property is CanRetryCaptcha , which is immutable.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property CaptchaError of type QString.

The reason for the CaptchaStatus , or an empty string if the state is neither Try_Again nor Failed.

Typical values: "", Cancelled, AuthenticationFailed, CaptchaNotSupported

In particular, an ordinary authentication failure (as would be produced for an incorrect answer) SHOULD be represented by AuthenticationFailed, cancellation by the user's request SHOULD be represented by Cancelled, cancellation due to the inability to display the captcha to the user or otherwise answer it SHOULD be represented by CaptchaNotSupported, and cancellation by a local process due to inconsistent or invalid challenges from the server SHOULD be represented by ServiceConfused.

If this interface appears on a ChannelTypeServerAuthenticationInterface channel, and connection to the server fails with an authentication failure, this error code SHOULD be copied into the ConnectionInterface::ConnectionError() signal.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property CaptchaErrorDetails of type QVariantMap.

If CaptchaError is non-empty, any additional information about the last disconnection; otherwise, the empty map. The keys and values are the same as for the second argument of ConnectionInterface::ConnectionError() .

If this interface appears on a ChannelTypeServerAuthenticationInterface channel, and connection to the server fails with an authentication failure, these details SHOULD be copied into the ConnectionInterface::ConnectionError() signal.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply<Tp::CaptchaInfoList, uint, QString> Tp::Client::ChannelInterfaceCaptchaAuthenticationInterface::GetCaptchas ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method GetCaptchas on the remote object.

Gets information regarding each of the captcha methods available and which and how many need to be successfully answered

To call this method successfully, the state must be Local_Pending or Try_Again. If it is Local_Pending, it remains Local_Pending. If called more than once while in Local_Pending state, or if the state is Try_Again, this method fetches a new set of captcha challenges, if possible, and the state returns to Local_Pending.

For instance, you could call GetCaptchas again from Local_Pending state if the user indicates that they can't understand the initially-offered captcha.

This is a method, not a property, so that it can be used to fetch more than one set of captcha challenges, and so that change notification is not required. Only the Handler should call this method and calling GetAll would not reduce round-trips, so the usual reasons to prefer a property do not apply here.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
Returns:
Information about each of the available captcha methods.
Returns:
The number of captcha methods required to be answered in order to successfully complete this captcha challenge (most frequently 1, but XMPP allows servers to demand that more than one captcha is answered).
Returns:
The language of each Label in Captcha_Info if available, for instance en_US, or "" if unknown.
QDBusPendingReply<QByteArray> Tp::Client::ChannelInterfaceCaptchaAuthenticationInterface::GetCaptchaData ( uint  ID,
const QString &  mimeType,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method GetCaptchaData on the remote object.

Fetch and return the captcha data. In protocols where captchas are downloaded out-of-band (for instance via HTTP), the connection manager is expected to do so.

Returns an empty array if the type was "qa"

If audio-based and image-based captchas are both available, we don't want to waste time downloading the audio until/unless the user asks to hear it. The extra D-Bus round-trips are not a problem, since they are expected to be quick compared with the time taken for the user to solve the captcha.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
IDThe ID of the captcha of which to retrieve data.
mimeTypeMIME type picked by the Handler, chosen from the list of MIME types received in GetCaptchas. XEP-0158 allows the same captcha to be made available in multiple formats, for instance the same spoken question as audio/x-wav, application/ogg and audio/speex.
timeoutThe timeout in milliseconds.
Returns:

Captcha data as requested.

QDBusPendingReply Tp::Client::ChannelInterfaceCaptchaAuthenticationInterface::AnswerCaptchas ( const Tp::CaptchaAnswers answers,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method AnswerCaptchas on the remote object.

Answer as many captchas as desired and/or required.

Callable in state Local_Pending only. State changes to Remote_Pending.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
answersThe mapping of captcha IDs to answer strings.
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ChannelInterfaceCaptchaAuthenticationInterface::CancelCaptcha ( uint  reason,
const QString &  debugMessage,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method CancelCaptcha on the remote object.

Cancel. State changes to Failed with error NotAvailable or Cancelled if it isn't already Failed. All you can do now is to close the channel.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
reasonReason for cancelling. This MAY be used to choose an error response to the remote server, and SHOULD also be reflected in the CaptchaError.
debugMessageA textual description of the reason for cancelling, supplied by the Handler. This message SHOULD NOT be sent to the remote server, but SHOULD be copied into the 'debug-message' field of the CaptchaErrorDetails and ConnectionError.
timeoutThe timeout in milliseconds.
void Tp::Client::ChannelInterfaceCaptchaAuthenticationInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00987.html0000644000175200001440000000465212000060453021644 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactSubscriptions Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_vars_0x69.html0000644000175200001440000000527512000060453024647 0ustar00collabora-develusers00000000000000 Class Members - Variables
   Home · All Classes · All Namespaces · Modules · Functions · Files


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00869.html0000644000175200001440000000665112000060453021644 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MemberFunctor5< R, T, Arg1, Arg2, Arg3, Arg4, Arg5 > Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00139.html0000644000175200001440000010672512000060453021635 0ustar00collabora-develusers00000000000000 Tp::Client::ChannelRequestInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

#include <TelepathyQt/ChannelRequest>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

  • QDBusPendingReply Proceed (int timeout=-1)
  • QDBusPendingReply Cancel (int timeout=-1)

Signals

  • void Failed (const QString &error, const QString &message)
  • void Succeeded ()
  • void SucceededWithChannel (const QDBusObjectPath &connection, const QVariantMap &connectionProperties, const QDBusObjectPath &channel, const QVariantMap &channelProperties)

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.ChannelRequest".


Constructor & Destructor Documentation

Tp::Client::ChannelRequestInterface::ChannelRequestInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelRequestInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ChannelRequestInterface::ChannelRequestInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelRequestInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ChannelRequestInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Member Function Documentation

static QLatin1String Tp::Client::ChannelRequestInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.ChannelRequest", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property Account of type QDBusObjectPath.

The Account on which this request was made. This property cannot change.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property UserActionTime of type qlonglong.

The time at which user action occurred, or 0 if this channel request is for some reason not involving user action.

This property is set when the channel request is created, and can never change.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property PreferredHandler of type QString.

Either the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable.

This property is set when the channel request is created, and can never change.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Requests of type Tp::QualifiedPropertyValueMapList.

An array of dictionaries containing desirable properties for the channel or channels to be created.

This is an array so that we could add a CreateChannels method in future without redefining the API of ChannelRequest.

This property is set when the channel request is created, and can never change.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Interfaces of type QStringList.

A list of the extra interfaces provided by this channel request. This property cannot change.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Hints of type QVariantMap.

A dictionary of metadata provided by the channel requester, which the handler and other clients MAY choose to interpret. Clients MAY choose to use platform-specific keys for their own purposes, but MUST ignore unknown keys and MUST cope with expected keys being missing. Clients SHOULD namespace hint names by having them start with a reversed domain name, in the same way as D-Bus interface names.

This property might be used to pass a contact ID for a telephone number shared between two contacts from the address book to the call UI, so that if you try to call “Mum”, the call UI knows this rather than having to guess or show “Calling Mum or Dad”. The format of these contact IDs would be platform-specific, so we leave the definition of the dictionary entry up to the platform in question. But third-party channel requesters might not include the contact ID, so the call UI has to be able to deal with it not being there.

The channel dispatcher does not currently interpret any of these hints: they are solely for communication between cooperating clients. If hints that do affect the channel dispatcher are added in future, their names will start with an appropriate reversed domain name (e.g. org.freedesktop.Telepathy for hints defined by this specification, or an appropriate vendor name for third-party plugins).

This property may be set when the channel request is created, and can never change. Since it is immutable, it SHOULD be included in the dictionary of properties passed to ClientInterfaceRequestsInterface::AddRequest() by the ChannelDispatcherInterface .

The following standardised hints are defined:

org.freedesktop.Telepathy.ChannelRequest.DelegateToPreferredHandler - b
If present and True the client currently handling the channel SHOULD pass the channel to the PreferredHandler using ChannelDispatcherInterface::DelegateChannels() .
This hint allows the user to request a channel in their preferred client in a situation where there are two chat handlers (for example: requesting a channel in Empathy which is currently being handled by gnome-shell).
If the channel is currently unhandled, clients SHOULD ignore this hint.
It is assumed that Mission Control will correctly delegate an unhandled channel to the preferred Handler. This allows requesting clients to always include this hint in their channel request.
The Handler should check each ChannelRequestInterface of the Requests_Satisfied parameter of ClientHandlerInterface::HandleChannels() for the hint. The first request containing the hint SHOULD be used and all further hints SHOULD be ignored.
This covers the very unlikely case where ClientHandlerInterface::HandleChannels() satisfies two separate requests which have different PreferredHandler s.
Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::ChannelRequestInterface::Proceed ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method Proceed on the remote object.

Proceed with the channel request.

The client that created this object calls this method when it has connected signal handlers for Succeeded() and Failed() .

Clients other than the client which created the ChannelRequest MUST NOT call this method.

This method SHOULD return immediately; on success, the request might still fail, but this will be indicated asynchronously by the Failed() signal.

Proceed cannot fail, unless clients have got the life-cycle of a ChannelRequest seriously wrong (e.g. a client calls this method twice, or a client that did not create the ChannelRequest calls this method). If it fails, clients SHOULD assume that the whole ChannelRequest has become useless.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ChannelRequestInterface::Cancel ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method Cancel on the remote object.

Cancel the channel request. The precise effect depends on the current progress of the request.

If the connection manager has not already been asked to create a channel, then Failed() is emitted immediately, and the channel request is removed.

If the connection manager has already been asked to create a channel but has not produced one yet (e.g. if ConnectionInterfaceRequestsInterface::CreateChannel() has been called, but has not yet returned), then the ChannelDispatcher will remember that the request has been cancelled. When the channel appears, it will be closed (if it was newly created and can be closed), and will not be dispatched to a handler.

If the connection manager has already returned a channel, but the channel has not yet been dispatched to a handler then the channel dispatcher will not dispatch that channel to a handler. If the channel was newly created for this request, the channel dispatcher will close it with ChannelInterface::Close() ; otherwise, the channel dispatcher will ignore it. In either case, Failed() will be emitted when processing has been completed.

If Failed() is emitted in response to this method, the error SHOULD be org.freedesktop.Telepathy.Error.Cancelled.

If the channel has already been dispatched to a handler, then it's too late to call this method, and the channel request will no longer exist.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
void Tp::Client::ChannelRequestInterface::Failed ( const QString &  error,
const QString &  message 
) [signal]

Represents the signal Failed on the remote object.

The channel request has failed. It is no longer present, and further methods must not be called on it.

Parameters:
error

The name of a D-Bus error. This can come from various sources, including the error raised by ConnectionInterfaceRequestsInterface::CreateChannel() , or an error generated to represent failure to establish the ConnectionInterface .

messageIf the first argument of the D-Bus error message was a string, that string. Otherwise, an empty string.

Represents the signal Succeeded on the remote object.

The channel request has succeeded. It is no longer present, and further methods must not be called on it.

void Tp::Client::ChannelRequestInterface::SucceededWithChannel ( const QDBusObjectPath &  connection,
const QVariantMap &  connectionProperties,
const QDBusObjectPath &  channel,
const QVariantMap &  channelProperties 
) [signal]

Represents the signal SucceededWithChannel on the remote object.

Variant of the ChannelRequestInterface::Succeeded() signal allowing to get the channel which has been created.

This signal MUST be emitted if the ChannelDispatcherInterface 's ChannelDispatcherInterface::SupportsRequestHints property is true. If supported, it MUST be emitted before the Succeeded() signal.

Parameters:
connection

The Connection owning the channel.

connectionProperties

A subset of the Connection's properties, currently unused. This parameter may be used in future.

channel

The channel which has been created.

channelProperties

The same immutable properties of the Channel that would appear in a ConnectionInterfaceRequestsInterface::NewChannels() signal.

void Tp::Client::ChannelRequestInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00822.html0000644000175200001440000004012712000060453021625 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ChannelRequest Member List
This is the complete list of members for Tp::ChannelRequest, including all inherited members.
account() const Tp::ChannelRequest
actualFeatures() const Tp::ReadyObject [virtual]
baseInterface() const Tp::ChannelRequest [protected]
becomeReady(const Features &requestedFeatures=Features())Tp::ReadyObject [virtual]
busName() const Tp::DBusProxy
BypassInterfaceCheck enum valueTp::OptionalInterfaceFactory< ChannelRequest >
cancel()Tp::ChannelRequest
channel() const Tp::ChannelRequest
ChannelRequest(const QDBusConnection &bus, const QString &objectPath, const QVariantMap &immutableProperties, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory)Tp::ChannelRequest [protected]
ChannelRequest(const AccountPtr &account, const QString &objectPath, const QVariantMap &immutableProperties)Tp::ChannelRequest [protected]
CheckInterfaceSupported enum valueTp::OptionalInterfaceFactory< ChannelRequest >
create(const QDBusConnection &bus, const QString &objectPath, const QVariantMap &immutableProperties, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory)Tp::ChannelRequest [static]
create(const AccountPtr &account, const QString &objectPath, const QVariantMap &immutableProperties)Tp::ChannelRequest [static]
dbusConnection() const Tp::DBusProxy
DBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::DBusProxy
failed(const QString &errorName, const QString &errorMessage)Tp::ChannelRequest [signal]
FeatureCoreTp::ChannelRequest [static]
hasInterface(const QString &name) constTp::OptionalInterfaceFactory< ChannelRequest > [inline]
hints() const Tp::ChannelRequest
immutableProperties() const Tp::ChannelRequest
interface() constTp::OptionalInterfaceFactory< ChannelRequest > [inline]
interfaces() constTp::OptionalInterfaceFactory< ChannelRequest > [inline]
InterfaceSupportedChecking enum nameTp::OptionalInterfaceFactory< ChannelRequest >
invalidate(const QString &reason, const QString &message)Tp::DBusProxy [protected]
invalidate(const QDBusError &error)Tp::DBusProxy [protected]
invalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage)Tp::DBusProxy [signal]
invalidationMessage() const Tp::DBusProxy
invalidationReason() const Tp::DBusProxy
isReady(const Features &features=Features()) const Tp::ReadyObject [virtual]
isValid() const Tp::DBusProxy
missingFeatures() const Tp::ReadyObject [virtual]
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
objectPath() const Tp::DBusProxy
optionalInterface(InterfaceSupportedChecking check=CheckInterfaceSupported) constTp::OptionalInterfaceFactory< ChannelRequest > [inline]
OptionalInterfaceFactory(ChannelRequest *this_)Tp::OptionalInterfaceFactory< ChannelRequest > [inline]
preferredHandler() const Tp::ChannelRequest
propertyChanged(const QString &propertyName)Tp::Object [signal]
readinessHelper() const Tp::ReadyObject [protected]
ReadyObject(RefCounted *object, const Feature &featureCore)Tp::ReadyObject
ReadyObject(DBusProxy *proxy, const Feature &featureCore)Tp::ReadyObject
RefCounted()Tp::RefCounted [inline]
requestedFeatures() const Tp::ReadyObject [virtual]
requests() const Tp::ChannelRequest
setBusName(const QString &busName)Tp::DBusProxy [protected]
setInterfaces(const QStringList &interfaces)Tp::OptionalInterfaceFactory< ChannelRequest > [inline, protected]
StatefulDBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::StatefulDBusProxy
succeeded(const Tp::ChannelPtr &channel)Tp::ChannelRequest [signal]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique)Tp::StatefulDBusProxy [static]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique, QString &error, QString &message)Tp::StatefulDBusProxy [static]
userActionTime() const Tp::ChannelRequest
~ChannelRequest()Tp::ChannelRequest [virtual]
~DBusProxy()Tp::DBusProxy [virtual]
~Object()Tp::Object [virtual]
~OptionalInterfaceFactory()Tp::OptionalInterfaceFactory< ChannelRequest > [inline]
~ReadyObject()Tp::ReadyObject [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]
~StatefulDBusProxy()Tp::StatefulDBusProxy [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00809.html0000644000175200001440000001227112000060453021631 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::FunctorCaller5< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5 > Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00078.html0000644000175200001440000020021712000060453021626 0ustar00collabora-develusers00000000000000 Tp::CallChannel Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The CallChannel class provides an object representing a Telepathy channel of type Call. More...

#include <TelepathyQt/CallChannel>

Inherits Tp::Channel.

List of all members.

Signals

Public Member Functions

Static Public Member Functions

Static Public Attributes

Protected Member Functions


Detailed Description

The CallChannel class provides an object representing a Telepathy channel of type Call.


Constructor & Destructor Documentation

Class destructor.

Tp::CallChannel::CallChannel ( const ConnectionPtr &  connection,
const QString &  objectPath,
const QVariantMap &  immutableProperties,
const Feature coreFeature = CallChannel::FeatureCore 
) [protected]

Construct a new CallChannel associated with the given object on the same service as the given connection.

Parameters:
connectionConnection owning this channel, and specifying the service.
objectPathThe object path of this channel.
immutablePropertiesThe immutable properties of this channel.
coreFeatureThe core feature of the channel type. The corresponding introspectable should depend on Channel::FeatureCore.

Member Function Documentation

CallChannelPtr Tp::CallChannel::create ( const ConnectionPtr &  connection,
const QString &  objectPath,
const QVariantMap &  immutableProperties 
) [static]

Create a new CallChannel object.

Parameters:
connectionConnection owning this channel, and specifying the service.
objectPathThe object path of this channel.
immutablePropertiesThe immutable properties of this channel.
Returns:
A CallChannelPtr object pointing to the newly created CallChannel object.

Reimplemented from Tp::Channel.

Check whether media streaming by the handler is required for this channel.

If false, all of the media streaming is done by some mechanism outside the scope of Telepathy, otherwise the handler is responsible for doing the actual media streaming.

Returns:
true if required, false otherwise.

Return the initial transport type used for this call if set on a requested channel.

Where not applicable, this property is defined to be StreamTransportTypeUnknown, in particular, on CMs with hardware streaming.

Returns:
The initial transport type used for this call.

Return whether an audio content was requested at the channel's creation time.

Returns:
true if an audio content was requested, false otherwise.

Return whether a video content was requested at the channel's creation time.

Returns:
true if an video content was requested, false otherwise.

Return the name of the initial audio content if hasInitialAudio() returns true.

Returns:
The name of the initial audio content.

Return the name of the initial video content if hasInitialVideo() returns true.

Returns:
The name of the initial video content.

Return whether new contents can be added on the call after the Channel has been requested.

Returns:
true if a new content can be added after the Channel has been requested, false otherwise.
See also:
requestContent()

Indicate that the local user has been alerted about the incoming call.

Returns:
A PendingOperation which will emit PendingOperation::finished when the call has finished.

Notify the CM that the local user is already in a call, so this call has been put in a call-waiting style queue.

Returns:
A PendingOperation which will emit PendingOperation::finished when the call has finished.

Accept an incoming call, or begin calling the remote contact on an outgoing call.

Returns:
A PendingOperation which will emit PendingOperation::finished when the call has finished.
PendingOperation * Tp::CallChannel::hangup ( CallStateChangeReason  reason = CallStateChangeReasonUserRequested,
const QString &  detailedReason = QString(),
const QString &  message = QString() 
)

Request that the call is ended.

Parameters:
reasonA generic hangup reason.
detailedReasonA more specific reason for the call hangup, if one is available, or an empty string otherwise.
messageA human-readable message to be sent to the remote contact(s).
Returns:
A PendingOperation which will emit PendingOperation::finished when the call has finished.

Return the current high-level state of this call.

This function requires CallChannel::FeatureCallState to be enabled.

Returns:
The current high-level state of this call.
See also:
callStateChanged()

Return the flags representing the status of this call as a whole, providing more specific information than callState().

This function requires CallChannel::FeatureCallState to be enabled.

Returns:
The flags representing the status of this call.
See also:
callFlagsChanged()

Return the reason for the last change to the callState() and/or callFlags().

This function requires CallChannel::FeatureCallState to be enabled.

Returns:
The reason for the last change to the callState() and/or callFlags().
See also:
callStateChanged(), callFlagsChanged()
QVariantMap Tp::CallChannel::callStateDetails ( ) const

Return optional extensible details for the callState(), callFlags() and/or callStateReason().

This function requires CallChannel::FeatureCallState to be enabled.

Returns:
The optional extensible details for the callState(), callFlags() and/or callStateReason().
See also:
callStateChanged(), callFlagsChanged()
Contacts Tp::CallChannel::remoteMembers ( ) const

Return the remote members of this call.

This function requires CallChannel::FeatureCallMembers to be enabled.

Returns:
The remote members of this call.
See also:
remoteMemberFlags(), remoteMemberFlagsChanged(), remoteMembersRemoved()
CallMemberFlags Tp::CallChannel::remoteMemberFlags ( const ContactPtr &  member) const

Return the flags that describe the status of a given member of this call.

This function requires CallChannel::FeatureCallMembers to be enabled.

Parameters:
memberThe member of interest.
Returns:
The flags that describe the status of the requested member.
See also:
remoteMemberFlagsChanged(), remoteMembers(), remoteMembersRemoved()

Return a list of media contents in this channel.

This methods requires CallChannel::FeatureContents to be enabled.

Returns:
The contents in this channel.
See also:
contentAdded(), contentRemoved(), contentsForType(), contentByName(), requestContent()

Return a list of media contents in this channel for the given type type.

This methods requires CallChannel::FeatureContents to be enabled.

Parameters:
typeThe interested type.
Returns:
A list of media contents in this channel for the given type type.
See also:
contentAdded(), contentRemoved(), contents(), contentByName(), requestContent()
CallContentPtr Tp::CallChannel::contentByName ( const QString &  contentName) const

Return the media content in this channel that has the specified name.

This methods requires CallChannel::FeatureContents to be enabled.

Parameters:
nameThe interested name.
Returns:
The media content in this channel that has the specified name.
See also:
contentAdded(), contentRemoved(), contents(), contentsForType(), requestContent()
PendingCallContent * Tp::CallChannel::requestContent ( const QString &  name,
MediaStreamType  type,
MediaStreamDirection  direction 
)

Request a new media content to be created to exchange the given type type of media.

This methods requires CallChannel::FeatureContents to be enabled.

Returns:
A PendingCallContent which will emit PendingCallContent::finished when the call has finished.
See also:
contentAdded(), contents(), contentsForType(), contentByName()

Return whether the local user has placed this channel on hold.

This method requires CallChannel::FeatureHoldState to be enabled.

Returns:
The channel's local hold state.
See also:
requestHold(), localHoldStateChanged()

Return the reason why localHoldState() changed to its current value.

This method requires CallChannel::FeatureLocalHoldState to be enabled.

Returns:
The channel local hold state reason.
See also:
requestHold(), localHoldStateChanged()

Request that the channel be put on hold (be instructed not to send any media streams to you) or be taken off hold.

If the connection manager can immediately tell that the requested state change could not possibly succeed, the resulting PendingOperation will fail with error code TP_QT_ERROR_NOT_AVAILABLE. If the requested state is the same as the current state, the resulting PendingOperation will finish successfully.

Otherwise, the channel's local hold state will change to Tp::LocalHoldStatePendingHold or Tp::LocalHoldStatePendingUnhold (as appropriate), then the resulting PendingOperation will finish successfully.

The eventual success or failure of the request is indicated by a subsequent localHoldStateChanged() signal, changing the local hold state to Tp::LocalHoldStateHeld or Tp::LocalHoldStateUnheld.

If the channel has multiple streams, and the connection manager succeeds in changing the hold state of one stream but fails to change the hold state of another, it will attempt to revert all streams to their previous hold states.

If the channel does not support the TP_QT_IFACE_CHANNEL_INTERFACE_HOLD interface, the PendingOperation will fail with error code TP_QT_ERROR_NOT_IMPLEMENTED.

Parameters:
holdA boolean indicating whether or not the channel should be on hold
Returns:
A PendingOperation, which will emit PendingOperation::finished when the request finishes.
See also:
localHoldState(), localHoldStateReason(), localHoldStateChanged()

This signal is emitted when the value of callState() changes.

Parameters:
stateThe new state.

This signal is emitted when the value of callFlags() changes.

Parameters:
flagsThe new flags.
void Tp::CallChannel::remoteMemberFlagsChanged ( const QHash< Tp::ContactPtr, Tp::CallMemberFlags > &  remoteMemberFlags,
const Tp::CallStateReason reason 
) [signal]

This signal is emitted when the flags of members of the call change, or when new members are added in the call.

Parameters:
remoteMemberFlagsA maping of all the call members whose flags were changed to their new flags, and of all the new members of the call to their initial flags.
reasonThe reason for this change.
void Tp::CallChannel::remoteMembersRemoved ( const Tp::Contacts &  remoteMembers,
const Tp::CallStateReason reason 
) [signal]

This signal is emitted when remote members are removed from the call.

Parameters:
remoteMembersThe members that were removed.
reasonThe reason for this removal.
void Tp::CallChannel::contentAdded ( const Tp::CallContentPtr &  content) [signal]

This signal is emitted when a media content is added to this channel.

Parameters:
contentThe media content that was added.
See also:
contents(), contentsForType()
void Tp::CallChannel::contentRemoved ( const Tp::CallContentPtr &  content,
const Tp::CallStateReason reason 
) [signal]

This signal is emitted when a media content is removed from this channel.

Parameters:
contentThe media content that was removed.
reasonThe reason for this removal.
See also:
contents(), contentsForType()

This signal is emitted when the local hold state of this channel changes.

Parameters:
stateThe new local hold state of this channel.
reasonThe reason why the change occurred.
See also:
localHoldState(), localHoldStateReason()

Member Data Documentation

Feature representing the core that needs to become ready to make the CallChannel object usable.

When calling isReady(), becomeReady(), this feature is implicitly added to the requested features.

Reimplemented from Tp::Channel.

Feature used in order to access call state specific methods.

See call state specific methods' documentation for more details.

Feature used in order to access members specific methods.

See local members specific methods' documentation for more details.

Feature used in order to access content specific methods.

See media content specific methods' documentation for more details.

Feature used in order to access local hold state info.

See local hold state specific methods' documentation for more details.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00142.html0000644000175200001440000010145712000060453021624 0ustar00collabora-develusers00000000000000 Tp::Client::ChannelTypeContactSearchInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelTypeContactSearchInterface Class Reference

#include <TelepathyQt/Channel>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Channel.Type.ContactSearch".


Constructor & Destructor Documentation

Tp::Client::ChannelTypeContactSearchInterface::ChannelTypeContactSearchInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelTypeContactSearchInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ChannelTypeContactSearchInterface::ChannelTypeContactSearchInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelTypeContactSearchInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ChannelTypeContactSearchInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ChannelTypeContactSearchInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ChannelTypeContactSearchInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

static QLatin1String Tp::Client::ChannelTypeContactSearchInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Channel.Type.ContactSearch", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property SearchState of type uint.

The current state of this search channel object. Change notification is via SearchStateChanged.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Limit of type uint.

If supported by the protocol, the maximum number of results that should be returned, where 0 represents no limit. If the protocol does not support limiting results, this should be 0.

For example, if the terms passed to Search() match Antonius, Bridget and Charles and this property is 2, the search service SHOULD only return Antonius and Bridget.

This property SHOULD be requestable if and only if the protocol supports specifying a limit; implementations SHOULD use 0 as the default if possible, or a protocol-specific sensible default otherwise.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property AvailableSearchKeys of type QStringList.

The set of search keys supported by this channel. Example values include [""] (for protocols where several address fields are implicitly searched) or ["x-n-given", "x-n-family", "nickname", "email"] (for XMPP XEP-0055, without extensibility via Data Forms). It can be in the NewChannels signal for round-trip reduction.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Server of type QString.

For protocols which support searching for contacts on multiple servers with different DNS names (like XMPP), the DNS name of the server being searched by this channel, e.g. "characters.shakespeare.lit". Otherwise, the empty string. XEP 0055 defines a mechanism for XMPP clients to search services of their choice for contacts, such as users.jabber.org (the "Jabber User Directory"). This property SHOULD be requestable if and only if the protocol supports querying multiple different servers; implementations SHOULD use a sensible default if possible if this property is not specified in a channel request. This allows a client to perform searches on a protocol it knows nothing about without requiring the user to guess a valid server's hostname.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::ChannelTypeContactSearchInterface::Search ( const Tp::ContactSearchMap terms,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method Search on the remote object.

Send a request to start a search for contacts on this connection. This may only be called while the SearchState is Not_Started; a valid search request will cause the SearchStateChanged signal to be emitted with the state In_Progress.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
termsA dictionary mapping search key names to the desired values
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ChannelTypeContactSearchInterface::More ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method More on the remote object.

Request that a search in SearchState More_Available move back to state In_Progress and continue listing up to Limit more results.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ChannelTypeContactSearchInterface::Stop ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method Stop on the remote object.

Stop the current search. This may not be called while the SearchState is Not_Started. If called while the SearchState is In_Progress, SearchStateChanged() will be emitted, with the state Failed and the error org.freedesktop.Telepathy.Error.Cancelled.

Calling this method on a search in state Completed or Failed succeeds, but has no effect.

Specifying Stop to succeed when the search has finished means that clients who call Stop just before receiving SearchStateChanged() don't have to handle a useless error.

Depending on the protocol, the connection manager may not be able to prevent the server from sending further results after this method returns; if this is the case, it MUST ignore any further results.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
void Tp::Client::ChannelTypeContactSearchInterface::SearchStateChanged ( uint  state,
const QString &  error,
const QVariantMap &  details 
) [signal]

Represents the signal SearchStateChanged on the remote object.

Emitted when the SearchState property changes. The implementation MUST NOT make transitions other than the following:

  • Not_StartedIn_Progress
  • In_ProgressMore_Available
  • More_AvailableIn_Progress
  • In_ProgressCompleted
  • In_ProgressFailed
Parameters:
stateThe new search state
error If the new state is Failed, the name of a D-Bus error describing what went wrong. Otherwise, the empty string.
details

Additional information about the state transition, which may include the following well-known keys:

debug-message (s)
Debugging information on the change, corresponding to the message part of a D-Bus error message, which SHOULD NOT be displayed to users under normal circumstances

This argument allows for future extensions. For instance, if moving to state Failed because the server rejected one of our search terms, we could define a key that indicates which terms were invalid.

Represents the signal SearchResultReceived on the remote object.

Emitted when a some search results are received from the server. This signal can be fired arbitrarily many times so clients MUST NOT assume they'll get only one signal.

Parameters:
resultA mapping from contact identifier to an array of fields representing information about this contact.
void Tp::Client::ChannelTypeContactSearchInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00835.html0000644000175200001440000001026312000060453021627 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactFactory Member List
This is the complete list of members for Tp::ContactFactory, including all inherited members.
addFeature(const Feature &feature)Tp::ContactFactory
addFeatures(const Features &features)Tp::ContactFactory
construct(ContactManager *manager, const ReferencedHandles &handle, const Features &features, const QVariantMap &attributes) const Tp::ContactFactory [protected, virtual]
ContactFactory(const Features &features)Tp::ContactFactory [protected]
create(const Features &features=Features())Tp::ContactFactory [static]
features() const Tp::ContactFactory
prepare(const ContactPtr &contact) const Tp::ContactFactory [protected, virtual]
RefCounted()Tp::RefCounted [inline]
~ContactFactory()Tp::ContactFactory [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01117.html0000644000175200001440000002042412000060453021621 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionManagerInterface Member List
This is the complete list of members for Tp::Client::ConnectionManagerInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ConnectionManagerInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionManagerInterface
ConnectionManagerInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionManagerInterface
ConnectionManagerInterface(Tp::DBusProxy *proxy)Tp::Client::ConnectionManagerInterface
GetParameters(const QString &protocol, int timeout=-1)Tp::Client::ConnectionManagerInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ConnectionManagerInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
ListProtocols(int timeout=-1)Tp::Client::ConnectionManagerInterface [inline, slot]
NewConnection(const QString &busName, const QDBusObjectPath &objectPath, const QString &protocol)Tp::Client::ConnectionManagerInterface [signal]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ConnectionManagerInterface [inline]
RequestConnection(const QString &protocol, const QVariantMap &parameters, int timeout=-1)Tp::Client::ConnectionManagerInterface [inline, slot]
requestPropertyInterfaces() const Tp::Client::ConnectionManagerInterface [inline]
requestPropertyProtocols() const Tp::Client::ConnectionManagerInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ConnectionManagerInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00696_source.html0000644000175200001440000002673112000060453023223 0ustar00collabora-develusers00000000000000 simple-pending-operations.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
simple-pending-operations.h
00001 
00023 #ifndef _TelepathyQt_pending_operations_h_HEADER_GUARD_
00024 #define _TelepathyQt_pending_operations_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <QObject>
00031 
00032 #include <TelepathyQt/PendingOperation>
00033 
00034 namespace Tp
00035 {
00036 
00037 class TP_QT_EXPORT PendingSuccess : public PendingOperation
00038 {
00039     Q_OBJECT
00040     Q_DISABLE_COPY(PendingSuccess)
00041 
00042 public:
00043     PendingSuccess(const SharedPtr<RefCounted> &object)
00044         : PendingOperation(object)
00045     {
00046         setFinished();
00047     }
00048 };
00049 
00050 class TP_QT_EXPORT PendingFailure : public PendingOperation
00051 {
00052     Q_OBJECT
00053     Q_DISABLE_COPY(PendingFailure)
00054 
00055 public:
00056     PendingFailure(const QString &name, const QString &message,
00057             const SharedPtr<RefCounted> &object)
00058         : PendingOperation(object)
00059     {
00060         setFinishedWithError(name, message);
00061     }
00062 
00063     PendingFailure(const QDBusError &error,
00064             const SharedPtr<RefCounted> &object)
00065         : PendingOperation(object)
00066     {
00067         setFinishedWithError(error);
00068     }
00069 };
00070 
00071 class TP_QT_EXPORT PendingVoid : public PendingOperation
00072 {
00073     Q_OBJECT
00074     Q_DISABLE_COPY(PendingVoid)
00075 
00076 public:
00077     PendingVoid(QDBusPendingCall call, const SharedPtr<RefCounted> &object);
00078 
00079 private Q_SLOTS:
00080     TP_QT_NO_EXPORT void watcherFinished(QDBusPendingCallWatcher*);
00081 
00082 private:
00083     struct Private;
00084     friend struct Private;
00085     Private *mPriv;
00086 };
00087 
00088 class TP_QT_EXPORT PendingComposite : public PendingOperation
00089 {
00090     Q_OBJECT
00091     Q_DISABLE_COPY(PendingComposite)
00092 
00093 public:
00094     PendingComposite(const QList<PendingOperation*> &operations, const SharedPtr<RefCounted> &object);
00095     PendingComposite(const QList<PendingOperation*> &operations, bool failOnFirstError,
00096             const SharedPtr<RefCounted> &object);
00097     ~PendingComposite();
00098 
00099 private Q_SLOTS:
00100     TP_QT_NO_EXPORT void onOperationFinished(Tp::PendingOperation *);
00101 
00102 private:
00103     struct Private;
00104     friend struct Private;
00105     Private *mPriv;
00106 };
00107 
00108 } // Tp
00109 
00110 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01048.html0000644000175200001440000000451712000060453021631 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MailURL Member List
This is the complete list of members for Tp::MailURL, including all inherited members.
methodTp::MailURL
postDataTp::MailURL
URLTp::MailURL


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00057.html0000644000175200001440000001336112000060453021625 0ustar00collabora-develusers00000000000000 Tp::AvatarData Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The AvatarData class represents a Telepathy avatar. More...

#include <TelepathyQt/AvatarData>

List of all members.

Public Member Functions

Public Attributes


Detailed Description

The AvatarData class represents a Telepathy avatar.


Constructor & Destructor Documentation

Tp::AvatarData::AvatarData ( const QString &  fileName,
const QString &  mimeType 
) [inline]

Member Data Documentation


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00812.html0000644000175200001440000001141612000060453021623 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Callback6< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 > Member List
This is the complete list of members for Tp::Callback6< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >, including all inherited members.
BaseCallback()Tp::BaseCallback [inline]
BaseCallback(AbstractFunctorCaller *caller)Tp::BaseCallback [inline]
BaseCallback(const BaseCallback &other)Tp::BaseCallback [inline]
Callback6()Tp::Callback6< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 > [inline]
Callback6(const Functor &functor)Tp::Callback6< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 > [inline]
callerTp::BaseCallback [protected]
FunctionType typedefTp::Callback6< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >
isValid() const Tp::BaseCallback [inline]
operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6) const Tp::Callback6< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 > [inline]
operator=(const BaseCallback &other)Tp::BaseCallback [inline]
ResultType typedefTp::Callback6< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >
~BaseCallback()Tp::BaseCallback [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01088.html0000644000175200001440000001714312000060453021634 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelInterfaceDestroyableInterface Member List
This is the complete list of members for Tp::Client::ChannelInterfaceDestroyableInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ChannelInterfaceDestroyableInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfaceDestroyableInterface
ChannelInterfaceDestroyableInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfaceDestroyableInterface
ChannelInterfaceDestroyableInterface(Tp::DBusProxy *proxy)Tp::Client::ChannelInterfaceDestroyableInterface
ChannelInterfaceDestroyableInterface(const Tp::Client::ChannelInterface &mainInterface)Tp::Client::ChannelInterfaceDestroyableInterface [explicit]
ChannelInterfaceDestroyableInterface(const Tp::Client::ChannelInterface &mainInterface, QObject *parent)Tp::Client::ChannelInterfaceDestroyableInterface
Destroy(int timeout=-1)Tp::Client::ChannelInterfaceDestroyableInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ChannelInterfaceDestroyableInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ChannelInterfaceDestroyableInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ChannelInterfaceDestroyableInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00299.html0000644000175200001440000003616712000060453021646 0ustar00collabora-develusers00000000000000 Tp::OutgoingFileTransferChannel Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The OutgoingFileTransferChannel class represents a Telepathy channel of type FileTransfer for outgoing file transfers. More...

#include <TelepathyQt/OutgoingFileTransferChannel>

Inherits Tp::FileTransferChannel.

List of all members.

Public Member Functions

Static Public Member Functions

Static Public Attributes

Protected Member Functions


Detailed Description

The OutgoingFileTransferChannel class represents a Telepathy channel of type FileTransfer for outgoing file transfers.

For more details, please refer to Telepathy specification.

See Asynchronous Object Model, Shared Pointer Usage


Constructor & Destructor Documentation

Tp::OutgoingFileTransferChannel::OutgoingFileTransferChannel ( const ConnectionPtr &  connection,
const QString &  objectPath,
const QVariantMap &  immutableProperties,
const Feature coreFeature = OutgoingFileTransferChannel::FeatureCore 
) [protected]

Construct a new OutgoingFileTransferChannel object.

Parameters:
connectionConnection owning this channel, and specifying the service.
objectPathThe channel object path.
immutablePropertiesThe channel immutable properties.
coreFeatureThe core feature of the channel type, if any. The corresponding introspectable should depend on OutgoingFileTransferChannel::FeatureCore.

Member Function Documentation

OutgoingFileTransferChannelPtr Tp::OutgoingFileTransferChannel::create ( const ConnectionPtr &  connection,
const QString &  objectPath,
const QVariantMap &  immutableProperties 
) [static]

Create a new OutgoingFileTransferChannel object.

Parameters:
connectionConnection owning this channel, and specifying the service.
objectPathThe channel object path.
immutablePropertiesThe channel immutable properties.
Returns:
An OutgoingFileTransferChannelPtr object pointing to the newly created OutgoingFileTransferChannel object.

Reimplemented from Tp::FileTransferChannel.

Provide the file for an outgoing file transfer which has been offered.

The state will change to FileTransferStateOpen as soon as the transfer starts. The given input device should not be destroyed until the state() changes to FileTransferStateCompleted or FileTransferStateCancelled. If input is a sequential device QIODevice::isSequential(), it should be closed when no more data is available, so that it's known when to stop reading.

Only the primary handler of a file transfer channel may call this method.

This method requires FileTransferChannel::FeatureCore to be ready.

Parameters:
inputA QIODevice object where the data will be read from.
Returns:
A PendingOperation object which will emit PendingOperation::finished when the call has finished.
See also:
stateChanged(), state(), stateReason()

Member Data Documentation

Feature representing the core that needs to become ready to make the OutgoingFileTransferChannel object usable.

This is currently the same as FileTransferChannel::FeatureCore, but may change to include more.

When calling isReady(), becomeReady(), this feature is implicitly added to the requested features.

Reimplemented from Tp::FileTransferChannel.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01011.html0000644000175200001440000000503012000060453021606 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ParamSpec Member List
This is the complete list of members for Tp::ParamSpec, including all inherited members.
defaultValueTp::ParamSpec
flagsTp::ParamSpec
nameTp::ParamSpec
signatureTp::ParamSpec


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00430_source.html0000644000175200001440000003710212000060453023177 0ustar00collabora-develusers00000000000000 account-manager.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
account-manager.h
00001 
00023 #ifndef _TelepathyQt_account_manager_h_HEADER_GUARD_
00024 #define _TelepathyQt_account_manager_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/_gen/cli-account-manager.h>
00031 
00032 #include <TelepathyQt/Account>
00033 #include <TelepathyQt/AccountFactory>
00034 #include <TelepathyQt/ChannelFactory>
00035 #include <TelepathyQt/ConnectionFactory>
00036 #include <TelepathyQt/ContactFactory>
00037 #include <TelepathyQt/StatelessDBusProxy>
00038 #include <TelepathyQt/Filter>
00039 #include <TelepathyQt/OptionalInterfaceFactory>
00040 #include <TelepathyQt/SharedPtr>
00041 #include <TelepathyQt/Types>
00042 
00043 #include <QDBusObjectPath>
00044 #include <QSet>
00045 #include <QString>
00046 #include <QVariantMap>
00047 
00048 namespace Tp
00049 {
00050 
00051 class PendingAccount;
00052 
00053 class TP_QT_EXPORT AccountManager : public StatelessDBusProxy,
00054                 public OptionalInterfaceFactory<AccountManager>
00055 {
00056     Q_OBJECT
00057     Q_DISABLE_COPY(AccountManager)
00058 
00059 public:
00060     static const Feature FeatureCore;
00061 
00062     static AccountManagerPtr create(const QDBusConnection &bus);
00063     static AccountManagerPtr create(
00064             const AccountFactoryConstPtr &accountFactory =
00065                 AccountFactory::create(QDBusConnection::sessionBus(), Account::FeatureCore),
00066             const ConnectionFactoryConstPtr &connectionFactory =
00067                 ConnectionFactory::create(QDBusConnection::sessionBus()),
00068             const ChannelFactoryConstPtr &channelFactory =
00069                 ChannelFactory::create(QDBusConnection::sessionBus()),
00070             const ContactFactoryConstPtr &contactFactory =
00071                 ContactFactory::create());
00072     static AccountManagerPtr create(const QDBusConnection &bus,
00073             const AccountFactoryConstPtr &accountFactory,
00074             const ConnectionFactoryConstPtr &connectionFactory,
00075             const ChannelFactoryConstPtr &channelFactory,
00076             const ContactFactoryConstPtr &contactFactory =
00077                 ContactFactory::create());
00078 
00079     virtual ~AccountManager();
00080 
00081     AccountFactoryConstPtr accountFactory() const;
00082     ConnectionFactoryConstPtr connectionFactory() const;
00083     ChannelFactoryConstPtr channelFactory() const;
00084     ContactFactoryConstPtr contactFactory() const;
00085 
00086     QList<AccountPtr> allAccounts() const;
00087 
00088     AccountSetPtr validAccounts() const;
00089     AccountSetPtr invalidAccounts() const;
00090 
00091     AccountSetPtr enabledAccounts() const;
00092     AccountSetPtr disabledAccounts() const;
00093 
00094     AccountSetPtr onlineAccounts() const;
00095     AccountSetPtr offlineAccounts() const;
00096 
00097     AccountSetPtr textChatAccounts() const;
00098     AccountSetPtr textChatroomAccounts() const;
00099 
00100     AccountSetPtr audioCallAccounts() const;
00101     AccountSetPtr videoCallAccounts() const;
00102 
00103     TP_QT_DEPRECATED AccountSetPtr streamedMediaCallAccounts() const;
00104     TP_QT_DEPRECATED AccountSetPtr streamedMediaAudioCallAccounts() const;
00105     TP_QT_DEPRECATED AccountSetPtr streamedMediaVideoCallAccounts() const;
00106     TP_QT_DEPRECATED AccountSetPtr streamedMediaVideoCallWithAudioAccounts() const;
00107 
00108     AccountSetPtr fileTransferAccounts() const;
00109 
00110     AccountSetPtr accountsByProtocol(const QString &protocolName) const;
00111 
00112     AccountSetPtr filterAccounts(const AccountFilterConstPtr &filter) const;
00113     AccountSetPtr filterAccounts(const QVariantMap &filter) const;
00114 
00115     AccountPtr accountForObjectPath(const QString &path) const;
00116     TP_QT_DEPRECATED AccountPtr accountForPath(const QString &path) const;
00117     QList<AccountPtr> accountsForObjectPaths(const QStringList &paths) const;
00118     TP_QT_DEPRECATED QList<AccountPtr> accountsForPaths(const QStringList &paths) const;
00119 
00120     QStringList supportedAccountProperties() const;
00121     PendingAccount *createAccount(const QString &connectionManager,
00122             const QString &protocol, const QString &displayName,
00123             const QVariantMap &parameters,
00124             const QVariantMap &properties = QVariantMap());
00125 
00126 Q_SIGNALS:
00127     void newAccount(const Tp::AccountPtr &account);
00128 
00129 protected:
00130     AccountManager(const QDBusConnection &bus,
00131             const AccountFactoryConstPtr &accountFactory,
00132             const ConnectionFactoryConstPtr &connectionFactory,
00133             const ChannelFactoryConstPtr &channelFactory,
00134             const ContactFactoryConstPtr &contactFactory,
00135             const Feature &coreFeature);
00136 
00137     Client::AccountManagerInterface *baseInterface() const;
00138 
00139 private Q_SLOTS:
00140     TP_QT_NO_EXPORT void introspectMain();
00141     TP_QT_NO_EXPORT void gotMainProperties(QDBusPendingCallWatcher *watcher);
00142     TP_QT_NO_EXPORT void onAccountReady(Tp::PendingOperation *op);
00143     TP_QT_NO_EXPORT void onAccountValidityChanged(const QDBusObjectPath &objectPath,
00144             bool valid);
00145     TP_QT_NO_EXPORT void onAccountRemoved(const QDBusObjectPath &objectPath);
00146 
00147 private:
00148     friend class PendingAccount;
00149 
00150     struct Private;
00151     friend struct Private;
00152     Private *mPriv;
00153 };
00154 
00155 } // Tp
00156 
00157 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00858.html0000644000175200001440000000561212000060453021636 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PtrFunctor0< R > Member List
This is the complete list of members for Tp::PtrFunctor0< R >, including all inherited members.
fnTp::PtrFunctor0< R >
FunctionType typedefTp::PtrFunctor0< R >
operator()() const Tp::PtrFunctor0< R > [inline]
PtrFunctor0(FunctionType fn)Tp::PtrFunctor0< R > [inline]
ResultType typedefTp::PtrFunctor0< R >


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00668_source.html0000644000175200001440000001616412000060453023221 0ustar00collabora-develusers00000000000000 profile-manager.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
profile-manager.h
00001 
00023 #ifndef _TelepathyQt_profile_manager_h_HEADER_GUARD_
00024 #define _TelepathyQt_profile_manager_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Object>
00031 #include <TelepathyQt/Profile>
00032 #include <TelepathyQt/ReadyObject>
00033 #include <TelepathyQt/Types>
00034 
00035 #include <QDBusConnection>
00036 #include <QObject>
00037 
00038 namespace Tp
00039 {
00040 
00041 class PendingOperation;
00042 
00043 class TP_QT_EXPORT ProfileManager : public Object, public ReadyObject
00044 {
00045     Q_OBJECT
00046     Q_DISABLE_COPY(ProfileManager);
00047 
00048 public:
00049     static const Feature FeatureCore;
00050     static const Feature FeatureFakeProfiles;
00051 
00052     static ProfileManagerPtr create(const QDBusConnection &bus = QDBusConnection::sessionBus());
00053 
00054     ~ProfileManager();
00055 
00056     QList<ProfilePtr> profiles() const;
00057     QList<ProfilePtr> profilesForCM(const QString &cmName) const;
00058     QList<ProfilePtr> profilesForProtocol(const QString &protocolName) const;
00059     ProfilePtr profileForService(const QString &serviceName) const;
00060 
00061 private Q_SLOTS:
00062     TP_QT_NO_EXPORT void onCmNamesRetrieved(Tp::PendingOperation *op);
00063     TP_QT_NO_EXPORT void onCMsReady(Tp::PendingOperation *op);
00064 
00065 private:
00066     ProfileManager(const QDBusConnection &bus);
00067 
00068     struct Private;
00069     friend struct Private;
00070     Private *mPriv;
00071 };
00072 
00073 } // Tp
00074 
00075 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00314.html0000644000175200001440000001403612000060453021621 0ustar00collabora-develusers00000000000000 Tp::PendingContactInfo Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingContactInfo Class Reference

The PendingContactInfo class represents the parameters of and the reply to an asynchronous contact info request. More...

#include <TelepathyQt/PendingContactInfo>

Inherits Tp::PendingOperation.

List of all members.

Public Member Functions


Detailed Description

The PendingContactInfo class represents the parameters of and the reply to an asynchronous contact info request.

Instances of this class cannot be constructed directly; the only way to get one is via Contact.

See Asynchronous Object Model


Constructor & Destructor Documentation


Member Function Documentation

ContactPtr Tp::PendingContactInfo::contact ( ) const

Return the contact through which the request was made.

Returns:
A pointer to the Contact object.

Return the information for contact().

Returns:
The contact infor as a Contact::InfoFields object.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00309.html0000644000175200001440000001306212000060453021623 0ustar00collabora-develusers00000000000000 Tp::Farstream::PendingChannel Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Farstream::PendingChannel Class Reference

#include </home/collabora-devel/kde/src/telepathy-qt4/TelepathyQt/Farstream/channel.h>

Inherits Tp::PendingOperation.

List of all members.

Public Member Functions

Friends


Constructor & Destructor Documentation


Member Function Documentation


Friends And Related Function Documentation

PendingChannel* createChannel ( const CallChannelPtr &  channel) [friend]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00720_source.html0000644000175200001440000076115212000060453023212 0ustar00collabora-develusers00000000000000 types.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
types.h
00001 /* Generated from Telepathy D-Bus Interface Specification, TelepathyQt copy, version 0.17.7 */
00002 
00003 #ifndef IN_TP_QT_HEADER
00004 #error IN_TP_QT_HEADER
00005 #endif
00006 
00007 #include <QtGlobal>
00008 
00009 #include <QByteArray>
00010 #include <QString>
00011 #include <QStringList>
00012 #include <QVariantList>
00013 #include <QVariantMap>
00014 
00015 #include <QDBusArgument>
00016 #include <QDBusMetaType>
00017 #include <QDBusObjectPath>
00018 #include <QDBusSignature>
00019 #include <QDBusVariant>
00020 
00021 #include <TelepathyQt/Global>
00022 
00051 namespace Tp
00052 {
00061 struct TP_QT_EXPORT ByteArrayList : public QList<QByteArray>
00062 {
00063     inline ByteArrayList() : QList<QByteArray>() {}
00064     inline ByteArrayList(const QList<QByteArray>& a) : QList<QByteArray>(a) {}
00065 
00066     inline ByteArrayList& operator=(const QList<QByteArray>& a)
00067     {
00068         *(static_cast<QList<QByteArray>*>(this)) = a;
00069         return *this;
00070     }
00071 };
00072 
00081 struct TP_QT_EXPORT ObjectPathList : public QList<QDBusObjectPath>
00082 {
00083     inline ObjectPathList() : QList<QDBusObjectPath>() {}
00084     inline ObjectPathList(const QList<QDBusObjectPath>& a) : QList<QDBusObjectPath>(a) {}
00085 
00086     inline ObjectPathList& operator=(const QList<QDBusObjectPath>& a)
00087     {
00088         *(static_cast<QList<QDBusObjectPath>*>(this)) = a;
00089         return *this;
00090     }
00091 };
00092 
00101 struct TP_QT_EXPORT UIntList : public QList<uint>
00102 {
00103     inline UIntList() : QList<uint>() {}
00104     inline UIntList(const QList<uint>& a) : QList<uint>(a) {}
00105 
00106     inline UIntList& operator=(const QList<uint>& a)
00107     {
00108         *(static_cast<QList<uint>*>(this)) = a;
00109         return *this;
00110     }
00111 };
00112 
00130 struct TP_QT_EXPORT AccessControl
00131 {
00135     uint type;
00140     QDBusVariant detail;
00141 };
00142 
00143 TP_QT_EXPORT bool operator==(const AccessControl& v1, const AccessControl& v2);
00144 inline bool operator!=(const AccessControl& v1, const AccessControl& v2)
00145 {
00146     return !operator==(v1, v2);
00147 }
00148 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const AccessControl& val);
00149 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, AccessControl& val);
00150 
00161 struct TP_QT_EXPORT AddressingNormalizationMap : public QMap<QString, uint>
00162 {
00163     inline AddressingNormalizationMap() : QMap<QString, uint>() {}
00164     inline AddressingNormalizationMap(const QMap<QString, uint>& a) : QMap<QString, uint>(a) {}
00165 
00166     inline AddressingNormalizationMap& operator=(const QMap<QString, uint>& a)
00167     {
00168         *(static_cast<QMap<QString, uint>*>(this)) = a;
00169         return *this;
00170     }
00171 };
00172 
00183 struct TP_QT_EXPORT AliasMap : public QMap<uint, QString>
00184 {
00185     inline AliasMap() : QMap<uint, QString>() {}
00186     inline AliasMap(const QMap<uint, QString>& a) : QMap<uint, QString>(a) {}
00187 
00188     inline AliasMap& operator=(const QMap<uint, QString>& a)
00189     {
00190         *(static_cast<QMap<uint, QString>*>(this)) = a;
00191         return *this;
00192     }
00193 };
00194 
00204 struct TP_QT_EXPORT AliasPair
00205 {
00206     uint handle;
00207     QString alias;
00208 };
00209 
00210 TP_QT_EXPORT bool operator==(const AliasPair& v1, const AliasPair& v2);
00211 inline bool operator!=(const AliasPair& v1, const AliasPair& v2)
00212 {
00213     return !operator==(v1, v2);
00214 }
00215 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const AliasPair& val);
00216 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, AliasPair& val);
00217 
00224 typedef QList<AliasPair> AliasPairList;
00225 
00240 struct TP_QT_EXPORT Avatar
00241 {
00242     QByteArray avatarData;
00243     QString MIMEType;
00244 };
00245 
00246 TP_QT_EXPORT bool operator==(const Avatar& v1, const Avatar& v2);
00247 inline bool operator!=(const Avatar& v1, const Avatar& v2)
00248 {
00249     return !operator==(v1, v2);
00250 }
00251 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const Avatar& val);
00252 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, Avatar& val);
00253 
00265 struct TP_QT_EXPORT AvatarTokenMap : public QMap<uint, QString>
00266 {
00267     inline AvatarTokenMap() : QMap<uint, QString>() {}
00268     inline AvatarTokenMap(const QMap<uint, QString>& a) : QMap<uint, QString>(a) {}
00269 
00270     inline AvatarTokenMap& operator=(const QMap<uint, QString>& a)
00271     {
00272         *(static_cast<QMap<uint, QString>*>(this)) = a;
00273         return *this;
00274     }
00275 };
00276 
00287 struct TP_QT_EXPORT CallMemberMap : public QMap<uint, uint>
00288 {
00289     inline CallMemberMap() : QMap<uint, uint>() {}
00290     inline CallMemberMap(const QMap<uint, uint>& a) : QMap<uint, uint>(a) {}
00291 
00292     inline CallMemberMap& operator=(const QMap<uint, uint>& a)
00293     {
00294         *(static_cast<QMap<uint, uint>*>(this)) = a;
00295         return *this;
00296     }
00297 };
00298 
00305 typedef QList<CallMemberMap> CallMemberMapList;
00306 
00320 struct TP_QT_EXPORT CallStateReason
00321 {
00326     uint actor;
00332     uint reason;
00353     QString DBusReason;
00359     QString message;
00360 };
00361 
00362 TP_QT_EXPORT bool operator==(const CallStateReason& v1, const CallStateReason& v2);
00363 inline bool operator!=(const CallStateReason& v1, const CallStateReason& v2)
00364 {
00365     return !operator==(v1, v2);
00366 }
00367 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const CallStateReason& val);
00368 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, CallStateReason& val);
00369 
00379 struct TP_QT_EXPORT Candidate
00380 {
00384     uint component;
00388     QString IP;
00392     uint port;
00396     QVariantMap info;
00397 };
00398 
00399 TP_QT_EXPORT bool operator==(const Candidate& v1, const Candidate& v2);
00400 inline bool operator!=(const Candidate& v1, const Candidate& v2)
00401 {
00402     return !operator==(v1, v2);
00403 }
00404 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const Candidate& val);
00405 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, Candidate& val);
00406 
00413 typedef QList<Candidate> CandidateList;
00414 
00474 struct TP_QT_EXPORT CandidateInfo : public QMap<QString, QDBusVariant>
00475 {
00476     inline CandidateInfo() : QMap<QString, QDBusVariant>() {}
00477     inline CandidateInfo(const QMap<QString, QDBusVariant>& a) : QMap<QString, QDBusVariant>(a) {}
00478 
00479     inline CandidateInfo& operator=(const QMap<QString, QDBusVariant>& a)
00480     {
00481         *(static_cast<QMap<QString, QDBusVariant>*>(this)) = a;
00482         return *this;
00483     }
00484 };
00485 
00498 struct TP_QT_EXPORT CapabilityChange
00499 {
00500     uint handle;
00501     QString channelType;
00502     uint oldGenericFlags;
00503     uint newGenericFlags;
00504     uint oldTypeSpecificFlags;
00505     uint newTypeSpecificFlags;
00506 };
00507 
00508 TP_QT_EXPORT bool operator==(const CapabilityChange& v1, const CapabilityChange& v2);
00509 inline bool operator!=(const CapabilityChange& v1, const CapabilityChange& v2)
00510 {
00511     return !operator==(v1, v2);
00512 }
00513 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const CapabilityChange& val);
00514 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, CapabilityChange& val);
00515 
00522 typedef QList<CapabilityChange> CapabilityChangeList;
00523 
00534 struct TP_QT_EXPORT CapabilityPair
00535 {
00536     QString channelType;
00537     uint typeSpecificFlags;
00538 };
00539 
00540 TP_QT_EXPORT bool operator==(const CapabilityPair& v1, const CapabilityPair& v2);
00541 inline bool operator!=(const CapabilityPair& v1, const CapabilityPair& v2)
00542 {
00543     return !operator==(v1, v2);
00544 }
00545 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const CapabilityPair& val);
00546 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, CapabilityPair& val);
00547 
00554 typedef QList<CapabilityPair> CapabilityPairList;
00555 
00568 struct TP_QT_EXPORT CaptchaAnswers : public QMap<uint, QString>
00569 {
00570     inline CaptchaAnswers() : QMap<uint, QString>() {}
00571     inline CaptchaAnswers(const QMap<uint, QString>& a) : QMap<uint, QString>(a) {}
00572 
00573     inline CaptchaAnswers& operator=(const QMap<uint, QString>& a)
00574     {
00575         *(static_cast<QMap<uint, QString>*>(this)) = a;
00576         return *this;
00577     }
00578 };
00579 
00592 struct TP_QT_EXPORT CaptchaInfo
00593 {
00601     uint ID;
00611     QString type;
00643     QString label;
00649     uint flags;
00656     QStringList availableMIMETypes;
00657 };
00658 
00659 TP_QT_EXPORT bool operator==(const CaptchaInfo& v1, const CaptchaInfo& v2);
00660 inline bool operator!=(const CaptchaInfo& v1, const CaptchaInfo& v2)
00661 {
00662     return !operator==(v1, v2);
00663 }
00664 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const CaptchaInfo& val);
00665 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, CaptchaInfo& val);
00666 
00673 typedef QList<CaptchaInfo> CaptchaInfoList;
00674 
00685 struct TP_QT_EXPORT ChannelCallStateMap : public QMap<uint, uint>
00686 {
00687     inline ChannelCallStateMap() : QMap<uint, uint>() {}
00688     inline ChannelCallStateMap(const QMap<uint, uint>& a) : QMap<uint, uint>(a) {}
00689 
00690     inline ChannelCallStateMap& operator=(const QMap<uint, uint>& a)
00691     {
00692         *(static_cast<QMap<uint, uint>*>(this)) = a;
00693         return *this;
00694     }
00695 };
00696 
00722 struct TP_QT_EXPORT ChannelClass : public QMap<QString, QDBusVariant>
00723 {
00724     inline ChannelClass() : QMap<QString, QDBusVariant>() {}
00725     inline ChannelClass(const QMap<QString, QDBusVariant>& a) : QMap<QString, QDBusVariant>(a) {}
00726 
00727     inline ChannelClass& operator=(const QMap<QString, QDBusVariant>& a)
00728     {
00729         *(static_cast<QMap<QString, QDBusVariant>*>(this)) = a;
00730         return *this;
00731     }
00732 };
00733 
00740 typedef QList<ChannelClass> ChannelClassList;
00741 
00752 struct TP_QT_EXPORT ChannelDetails
00753 {
00757     QDBusObjectPath channel;
00803     QVariantMap properties;
00804 };
00805 
00806 TP_QT_EXPORT bool operator==(const ChannelDetails& v1, const ChannelDetails& v2);
00807 inline bool operator!=(const ChannelDetails& v1, const ChannelDetails& v2)
00808 {
00809     return !operator==(v1, v2);
00810 }
00811 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const ChannelDetails& val);
00812 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, ChannelDetails& val);
00813 
00820 typedef QList<ChannelDetails> ChannelDetailsList;
00821 
00832 struct TP_QT_EXPORT ChannelInfo
00833 {
00838     QDBusObjectPath channel;
00842     QString channelType;
00847     uint handleType;
00852     uint handle;
00853 };
00854 
00855 TP_QT_EXPORT bool operator==(const ChannelInfo& v1, const ChannelInfo& v2);
00856 inline bool operator!=(const ChannelInfo& v1, const ChannelInfo& v2)
00857 {
00858     return !operator==(v1, v2);
00859 }
00860 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const ChannelInfo& val);
00861 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, ChannelInfo& val);
00862 
00869 typedef QList<ChannelInfo> ChannelInfoList;
00870 
00885 struct TP_QT_EXPORT ChannelOriginatorMap : public QMap<uint, QDBusObjectPath>
00886 {
00887     inline ChannelOriginatorMap() : QMap<uint, QDBusObjectPath>() {}
00888     inline ChannelOriginatorMap(const QMap<uint, QDBusObjectPath>& a) : QMap<uint, QDBusObjectPath>(a) {}
00889 
00890     inline ChannelOriginatorMap& operator=(const QMap<uint, QDBusObjectPath>& a)
00891     {
00892         *(static_cast<QMap<uint, QDBusObjectPath>*>(this)) = a;
00893         return *this;
00894     }
00895 };
00896 
00907 struct TP_QT_EXPORT ChatStateMap : public QMap<uint, uint>
00908 {
00909     inline ChatStateMap() : QMap<uint, uint>() {}
00910     inline ChatStateMap(const QMap<uint, uint>& a) : QMap<uint, uint>(a) {}
00911 
00912     inline ChatStateMap& operator=(const QMap<uint, uint>& a)
00913     {
00914         *(static_cast<QMap<uint, uint>*>(this)) = a;
00915         return *this;
00916     }
00917 };
00918 
00927 struct TP_QT_EXPORT ComponentStateMap : public QMap<uint, uint>
00928 {
00929     inline ComponentStateMap() : QMap<uint, uint>() {}
00930     inline ComponentStateMap(const QMap<uint, uint>& a) : QMap<uint, uint>(a) {}
00931 
00932     inline ComponentStateMap& operator=(const QMap<uint, uint>& a)
00933     {
00934         *(static_cast<QMap<uint, uint>*>(this)) = a;
00935         return *this;
00936     }
00937 };
00938 
00950 struct TP_QT_EXPORT ContactAttributesMap : public QMap<uint, QVariantMap>
00951 {
00952     inline ContactAttributesMap() : QMap<uint, QVariantMap>() {}
00953     inline ContactAttributesMap(const QMap<uint, QVariantMap>& a) : QMap<uint, QVariantMap>(a) {}
00954 
00955     inline ContactAttributesMap& operator=(const QMap<uint, QVariantMap>& a)
00956     {
00957         *(static_cast<QMap<uint, QVariantMap>*>(this)) = a;
00958         return *this;
00959     }
00960 };
00961 
00973 struct TP_QT_EXPORT ContactCapability
00974 {
00975     uint handle;
00976     QString channelType;
00977     uint genericFlags;
00978     uint typeSpecificFlags;
00979 };
00980 
00981 TP_QT_EXPORT bool operator==(const ContactCapability& v1, const ContactCapability& v2);
00982 inline bool operator!=(const ContactCapability& v1, const ContactCapability& v2)
00983 {
00984     return !operator==(v1, v2);
00985 }
00986 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const ContactCapability& val);
00987 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, ContactCapability& val);
00988 
00995 typedef QList<ContactCapability> ContactCapabilityList;
00996 
01007 struct TP_QT_EXPORT ContactClientTypes : public QMap<uint, QStringList>
01008 {
01009     inline ContactClientTypes() : QMap<uint, QStringList>() {}
01010     inline ContactClientTypes(const QMap<uint, QStringList>& a) : QMap<uint, QStringList>(a) {}
01011 
01012     inline ContactClientTypes& operator=(const QMap<uint, QStringList>& a)
01013     {
01014         *(static_cast<QMap<uint, QStringList>*>(this)) = a;
01015         return *this;
01016     }
01017 };
01018 
01106 struct TP_QT_EXPORT ContactInfoField
01107 {
01113     QString fieldName;
01140     QStringList parameters;
01171     QStringList fieldValue;
01172 };
01173 
01174 TP_QT_EXPORT bool operator==(const ContactInfoField& v1, const ContactInfoField& v2);
01175 inline bool operator!=(const ContactInfoField& v1, const ContactInfoField& v2)
01176 {
01177     return !operator==(v1, v2);
01178 }
01179 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const ContactInfoField& val);
01180 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, ContactInfoField& val);
01181 
01188 typedef QList<ContactInfoField> ContactInfoFieldList;
01189 
01200 struct TP_QT_EXPORT ContactLocations : public QMap<uint, QVariantMap>
01201 {
01202     inline ContactLocations() : QMap<uint, QVariantMap>() {}
01203     inline ContactLocations(const QMap<uint, QVariantMap>& a) : QMap<uint, QVariantMap>(a) {}
01204 
01205     inline ContactLocations& operator=(const QMap<uint, QVariantMap>& a)
01206     {
01207         *(static_cast<QMap<uint, QVariantMap>*>(this)) = a;
01208         return *this;
01209     }
01210 };
01211 
01220 struct TP_QT_EXPORT ContactMediaDescriptionPropertiesMap : public QMap<uint, QVariantMap>
01221 {
01222     inline ContactMediaDescriptionPropertiesMap() : QMap<uint, QVariantMap>() {}
01223     inline ContactMediaDescriptionPropertiesMap(const QMap<uint, QVariantMap>& a) : QMap<uint, QVariantMap>(a) {}
01224 
01225     inline ContactMediaDescriptionPropertiesMap& operator=(const QMap<uint, QVariantMap>& a)
01226     {
01227         *(static_cast<QMap<uint, QVariantMap>*>(this)) = a;
01228         return *this;
01229     }
01230 };
01231 
01240 struct TP_QT_EXPORT ContactSSRCsMap : public QMap<uint, UIntList>
01241 {
01242     inline ContactSSRCsMap() : QMap<uint, UIntList>() {}
01243     inline ContactSSRCsMap(const QMap<uint, UIntList>& a) : QMap<uint, UIntList>(a) {}
01244 
01245     inline ContactSSRCsMap& operator=(const QMap<uint, UIntList>& a)
01246     {
01247         *(static_cast<QMap<uint, UIntList>*>(this)) = a;
01248         return *this;
01249     }
01250 };
01251 
01262 struct TP_QT_EXPORT ContactSearchMap : public QMap<QString, QString>
01263 {
01264     inline ContactSearchMap() : QMap<QString, QString>() {}
01265     inline ContactSearchMap(const QMap<QString, QString>& a) : QMap<QString, QString>(a) {}
01266 
01267     inline ContactSearchMap& operator=(const QMap<QString, QString>& a)
01268     {
01269         *(static_cast<QMap<QString, QString>*>(this)) = a;
01270         return *this;
01271     }
01272 };
01273 
01284 struct TP_QT_EXPORT ContactSendingStateMap : public QMap<uint, uint>
01285 {
01286     inline ContactSendingStateMap() : QMap<uint, uint>() {}
01287     inline ContactSendingStateMap(const QMap<uint, uint>& a) : QMap<uint, uint>(a) {}
01288 
01289     inline ContactSendingStateMap& operator=(const QMap<uint, uint>& a)
01290     {
01291         *(static_cast<QMap<uint, uint>*>(this)) = a;
01292         return *this;
01293     }
01294 };
01295 
01305 struct TP_QT_EXPORT ContactSubscriptions
01306 {
01310     uint subscribe;
01314     uint publish;
01319     QString publishRequest;
01320 };
01321 
01322 TP_QT_EXPORT bool operator==(const ContactSubscriptions& v1, const ContactSubscriptions& v2);
01323 inline bool operator!=(const ContactSubscriptions& v1, const ContactSubscriptions& v2)
01324 {
01325     return !operator==(v1, v2);
01326 }
01327 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const ContactSubscriptions& val);
01328 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, ContactSubscriptions& val);
01329 
01352 struct TP_QT_EXPORT CurrencyAmount
01353 {
01363     int amount;
01376     uint scale;
01383     QString currency;
01384 };
01385 
01386 TP_QT_EXPORT bool operator==(const CurrencyAmount& v1, const CurrencyAmount& v2);
01387 inline bool operator!=(const CurrencyAmount& v1, const CurrencyAmount& v2)
01388 {
01389     return !operator==(v1, v2);
01390 }
01391 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const CurrencyAmount& val);
01392 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, CurrencyAmount& val);
01393 
01404 struct TP_QT_EXPORT DBusTubeMember
01405 {
01409     uint handle;
01413     QString uniqueName;
01414 };
01415 
01416 TP_QT_EXPORT bool operator==(const DBusTubeMember& v1, const DBusTubeMember& v2);
01417 inline bool operator!=(const DBusTubeMember& v1, const DBusTubeMember& v2)
01418 {
01419     return !operator==(v1, v2);
01420 }
01421 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const DBusTubeMember& val);
01422 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, DBusTubeMember& val);
01423 
01430 typedef QList<DBusTubeMember> DBusTubeMemberList;
01431 
01443 struct TP_QT_EXPORT DBusTubeParticipants : public QMap<uint, QString>
01444 {
01445     inline DBusTubeParticipants() : QMap<uint, QString>() {}
01446     inline DBusTubeParticipants(const QMap<uint, QString>& a) : QMap<uint, QString>(a) {}
01447 
01448     inline DBusTubeParticipants& operator=(const QMap<uint, QString>& a)
01449     {
01450         *(static_cast<QMap<uint, QString>*>(this)) = a;
01451         return *this;
01452     }
01453 };
01454 
01464 struct TP_QT_EXPORT DebugMessage
01465 {
01470     double timestamp;
01487     QString domain;
01492     uint level;
01496     QString message;
01497 };
01498 
01499 TP_QT_EXPORT bool operator==(const DebugMessage& v1, const DebugMessage& v2);
01500 inline bool operator!=(const DebugMessage& v1, const DebugMessage& v2)
01501 {
01502     return !operator==(v1, v2);
01503 }
01504 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const DebugMessage& val);
01505 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, DebugMessage& val);
01506 
01513 typedef QList<DebugMessage> DebugMessageList;
01514 
01525 struct TP_QT_EXPORT FieldSpec
01526 {
01530     QString name;
01536     QStringList parameters;
01540     uint flags;
01545     uint max;
01546 };
01547 
01548 TP_QT_EXPORT bool operator==(const FieldSpec& v1, const FieldSpec& v2);
01549 inline bool operator!=(const FieldSpec& v1, const FieldSpec& v2)
01550 {
01551     return !operator==(v1, v2);
01552 }
01553 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const FieldSpec& val);
01554 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, FieldSpec& val);
01555 
01562 typedef QList<FieldSpec> FieldSpecs;
01563 
01608 struct TP_QT_EXPORT HTTPPostData
01609 {
01613     QString key;
01617     QString value;
01618 };
01619 
01620 TP_QT_EXPORT bool operator==(const HTTPPostData& v1, const HTTPPostData& v2);
01621 inline bool operator!=(const HTTPPostData& v1, const HTTPPostData& v2)
01622 {
01623     return !operator==(v1, v2);
01624 }
01625 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const HTTPPostData& val);
01626 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, HTTPPostData& val);
01627 
01634 typedef QList<HTTPPostData> HTTPPostDataList;
01635 
01646 struct TP_QT_EXPORT HandleIdentifierMap : public QMap<uint, QString>
01647 {
01648     inline HandleIdentifierMap() : QMap<uint, QString>() {}
01649     inline HandleIdentifierMap(const QMap<uint, QString>& a) : QMap<uint, QString>(a) {}
01650 
01651     inline HandleIdentifierMap& operator=(const QMap<uint, QString>& a)
01652     {
01653         *(static_cast<QMap<uint, QString>*>(this)) = a;
01654         return *this;
01655     }
01656 };
01657 
01668 struct TP_QT_EXPORT HandleOwnerMap : public QMap<uint, uint>
01669 {
01670     inline HandleOwnerMap() : QMap<uint, uint>() {}
01671     inline HandleOwnerMap(const QMap<uint, uint>& a) : QMap<uint, uint>(a) {}
01672 
01673     inline HandleOwnerMap& operator=(const QMap<uint, uint>& a)
01674     {
01675         *(static_cast<QMap<uint, uint>*>(this)) = a;
01676         return *this;
01677     }
01678 };
01679 
01690 struct TP_QT_EXPORT LocalPendingInfo
01691 {
01695     uint toBeAdded;
01699     uint actor;
01703     uint reason;
01708     QString message;
01709 };
01710 
01711 TP_QT_EXPORT bool operator==(const LocalPendingInfo& v1, const LocalPendingInfo& v2);
01712 inline bool operator!=(const LocalPendingInfo& v1, const LocalPendingInfo& v2)
01713 {
01714     return !operator==(v1, v2);
01715 }
01716 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const LocalPendingInfo& val);
01717 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, LocalPendingInfo& val);
01718 
01725 typedef QList<LocalPendingInfo> LocalPendingInfoList;
01726 
01737 struct TP_QT_EXPORT Location : public QMap<QString, QDBusVariant>
01738 {
01739     inline Location() : QMap<QString, QDBusVariant>() {}
01740     inline Location(const QMap<QString, QDBusVariant>& a) : QMap<QString, QDBusVariant>(a) {}
01741 
01742     inline Location& operator=(const QMap<QString, QDBusVariant>& a)
01743     {
01744         *(static_cast<QMap<QString, QDBusVariant>*>(this)) = a;
01745         return *this;
01746     }
01747 };
01748 
01762 struct TP_QT_EXPORT Mail : public QMap<QString, QDBusVariant>
01763 {
01764     inline Mail() : QMap<QString, QDBusVariant>() {}
01765     inline Mail(const QMap<QString, QDBusVariant>& a) : QMap<QString, QDBusVariant>(a) {}
01766 
01767     inline Mail& operator=(const QMap<QString, QDBusVariant>& a)
01768     {
01769         *(static_cast<QMap<QString, QDBusVariant>*>(this)) = a;
01770         return *this;
01771     }
01772 };
01773 
01780 typedef QList<Mail> MailList;
01781 
01802 struct TP_QT_EXPORT MailAddress
01803 {
01807     QString name;
01811     QString address;
01812 };
01813 
01814 TP_QT_EXPORT bool operator==(const MailAddress& v1, const MailAddress& v2);
01815 inline bool operator!=(const MailAddress& v1, const MailAddress& v2)
01816 {
01817     return !operator==(v1, v2);
01818 }
01819 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const MailAddress& val);
01820 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, MailAddress& val);
01821 
01828 typedef QList<MailAddress> MailAddressList;
01829 
01839 struct TP_QT_EXPORT MediaDescriptionOffer
01840 {
01846     QDBusObjectPath mediaDescription;
01853     QVariantMap properties;
01854 };
01855 
01856 TP_QT_EXPORT bool operator==(const MediaDescriptionOffer& v1, const MediaDescriptionOffer& v2);
01857 inline bool operator!=(const MediaDescriptionOffer& v1, const MediaDescriptionOffer& v2)
01858 {
01859     return !operator==(v1, v2);
01860 }
01861 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const MediaDescriptionOffer& val);
01862 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, MediaDescriptionOffer& val);
01863 
01885 struct TP_QT_EXPORT MediaDescriptionProperties : public QMap<QString, QDBusVariant>
01886 {
01887     inline MediaDescriptionProperties() : QMap<QString, QDBusVariant>() {}
01888     inline MediaDescriptionProperties(const QMap<QString, QDBusVariant>& a) : QMap<QString, QDBusVariant>(a) {}
01889 
01890     inline MediaDescriptionProperties& operator=(const QMap<QString, QDBusVariant>& a)
01891     {
01892         *(static_cast<QMap<QString, QDBusVariant>*>(this)) = a;
01893         return *this;
01894     }
01895 };
01896 
01906 struct TP_QT_EXPORT MediaSessionHandlerInfo
01907 {
01912     QDBusObjectPath sessionHandler;
01916     QString mediaSessionType;
01917 };
01918 
01919 TP_QT_EXPORT bool operator==(const MediaSessionHandlerInfo& v1, const MediaSessionHandlerInfo& v2);
01920 inline bool operator!=(const MediaSessionHandlerInfo& v1, const MediaSessionHandlerInfo& v2)
01921 {
01922     return !operator==(v1, v2);
01923 }
01924 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const MediaSessionHandlerInfo& val);
01925 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, MediaSessionHandlerInfo& val);
01926 
01933 typedef QList<MediaSessionHandlerInfo> MediaSessionHandlerInfoList;
01934 
01942 struct TP_QT_EXPORT MediaStreamHandlerTransport
01943 {
01944     uint componentNumber;
01945     QString IPAddress;
01946     uint port;
01947     uint protocol;
01948     QString subtype;
01949     QString profile;
01950     double preferenceValue;
01951     uint transportType;
01952     QString username;
01953     QString password;
01954 };
01955 
01956 TP_QT_EXPORT bool operator==(const MediaStreamHandlerTransport& v1, const MediaStreamHandlerTransport& v2);
01957 inline bool operator!=(const MediaStreamHandlerTransport& v1, const MediaStreamHandlerTransport& v2)
01958 {
01959     return !operator==(v1, v2);
01960 }
01961 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const MediaStreamHandlerTransport& val);
01962 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, MediaStreamHandlerTransport& val);
01963 
01970 typedef QList<MediaStreamHandlerTransport> MediaStreamHandlerTransportList;
01971 
01979 struct TP_QT_EXPORT MediaStreamInfo
01980 {
01981     uint identifier;
01982     uint contact;
01983     uint type;
01984     uint state;
01985     uint direction;
01986     uint pendingSendFlags;
01987 };
01988 
01989 TP_QT_EXPORT bool operator==(const MediaStreamInfo& v1, const MediaStreamInfo& v2);
01990 inline bool operator!=(const MediaStreamInfo& v1, const MediaStreamInfo& v2)
01991 {
01992     return !operator==(v1, v2);
01993 }
01994 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const MediaStreamInfo& val);
01995 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, MediaStreamInfo& val);
01996 
02003 typedef QList<MediaStreamInfo> MediaStreamInfoList;
02004 
02289 struct TP_QT_EXPORT MessagePart : public QMap<QString, QDBusVariant>
02290 {
02291     inline MessagePart() : QMap<QString, QDBusVariant>() {}
02292     inline MessagePart(const QMap<QString, QDBusVariant>& a) : QMap<QString, QDBusVariant>(a) {}
02293 
02294     inline MessagePart& operator=(const QMap<QString, QDBusVariant>& a)
02295     {
02296         *(static_cast<QMap<QString, QDBusVariant>*>(this)) = a;
02297         return *this;
02298     }
02299 };
02300 
02307 typedef QList<MessagePart> MessagePartList;
02308 
02315 typedef QList<MessagePartList> MessagePartListList;
02316 
02328 struct TP_QT_EXPORT MessagePartContentMap : public QMap<uint, QDBusVariant>
02329 {
02330     inline MessagePartContentMap() : QMap<uint, QDBusVariant>() {}
02331     inline MessagePartContentMap(const QMap<uint, QDBusVariant>& a) : QMap<uint, QDBusVariant>(a) {}
02332 
02333     inline MessagePartContentMap& operator=(const QMap<uint, QDBusVariant>& a)
02334     {
02335         *(static_cast<QMap<uint, QDBusVariant>*>(this)) = a;
02336         return *this;
02337     }
02338 };
02339 
02359 struct TP_QT_EXPORT Metadata : public QMap<QString, QStringList>
02360 {
02361     inline Metadata() : QMap<QString, QStringList>() {}
02362     inline Metadata(const QMap<QString, QStringList>& a) : QMap<QString, QStringList>(a) {}
02363 
02364     inline Metadata& operator=(const QMap<QString, QStringList>& a)
02365     {
02366         *(static_cast<QMap<QString, QStringList>*>(this)) = a;
02367         return *this;
02368     }
02369 };
02370 
02383 struct TP_QT_EXPORT MultipleStatusMap : public QMap<QString, QVariantMap>
02384 {
02385     inline MultipleStatusMap() : QMap<QString, QVariantMap>() {}
02386     inline MultipleStatusMap(const QMap<QString, QVariantMap>& a) : QMap<QString, QVariantMap>(a) {}
02387 
02388     inline MultipleStatusMap& operator=(const QMap<QString, QVariantMap>& a)
02389     {
02390         *(static_cast<QMap<QString, QVariantMap>*>(this)) = a;
02391         return *this;
02392     }
02393 };
02394 
02402 struct TP_QT_EXPORT NotDelegatedError
02403 {
02407     QString errorName;
02411     QString errorMessage;
02412 };
02413 
02414 TP_QT_EXPORT bool operator==(const NotDelegatedError& v1, const NotDelegatedError& v2);
02415 inline bool operator!=(const NotDelegatedError& v1, const NotDelegatedError& v2)
02416 {
02417     return !operator==(v1, v2);
02418 }
02419 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const NotDelegatedError& val);
02420 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, NotDelegatedError& val);
02421 
02432 struct TP_QT_EXPORT ObjectImmutablePropertiesMap : public QMap<QDBusObjectPath, QVariantMap>
02433 {
02434     inline ObjectImmutablePropertiesMap() : QMap<QDBusObjectPath, QVariantMap>() {}
02435     inline ObjectImmutablePropertiesMap(const QMap<QDBusObjectPath, QVariantMap>& a) : QMap<QDBusObjectPath, QVariantMap>(a) {}
02436 
02437     inline ObjectImmutablePropertiesMap& operator=(const QMap<QDBusObjectPath, QVariantMap>& a)
02438     {
02439         *(static_cast<QMap<QDBusObjectPath, QVariantMap>*>(this)) = a;
02440         return *this;
02441     }
02442 };
02443 
02450 typedef QList<ObjectImmutablePropertiesMap> ObjectImmutablePropertiesMapList;
02451 
02462 struct TP_QT_EXPORT ParamSpec
02463 {
02467     QString name;
02471     uint flags;
02475     QString signature;
02481     QDBusVariant defaultValue;
02482 };
02483 
02484 TP_QT_EXPORT bool operator==(const ParamSpec& v1, const ParamSpec& v2);
02485 inline bool operator!=(const ParamSpec& v1, const ParamSpec& v2)
02486 {
02487     return !operator==(v1, v2);
02488 }
02489 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const ParamSpec& val);
02490 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, ParamSpec& val);
02491 
02498 typedef QList<ParamSpec> ParamSpecList;
02499 
02512 struct TP_QT_EXPORT PendingTextMessage
02513 {
02514     uint identifier;
02515     uint unixTimestamp;
02516     uint sender;
02517     uint messageType;
02518     uint flags;
02519     QString text;
02520 };
02521 
02522 TP_QT_EXPORT bool operator==(const PendingTextMessage& v1, const PendingTextMessage& v2);
02523 inline bool operator!=(const PendingTextMessage& v1, const PendingTextMessage& v2)
02524 {
02525     return !operator==(v1, v2);
02526 }
02527 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const PendingTextMessage& val);
02528 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, PendingTextMessage& val);
02529 
02536 typedef QList<PendingTextMessage> PendingTextMessageList;
02537 
02549 struct TP_QT_EXPORT PropertyFlagsChange
02550 {
02551     uint propertyID;
02552     uint newFlags;
02553 };
02554 
02555 TP_QT_EXPORT bool operator==(const PropertyFlagsChange& v1, const PropertyFlagsChange& v2);
02556 inline bool operator!=(const PropertyFlagsChange& v1, const PropertyFlagsChange& v2)
02557 {
02558     return !operator==(v1, v2);
02559 }
02560 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const PropertyFlagsChange& val);
02561 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, PropertyFlagsChange& val);
02562 
02569 typedef QList<PropertyFlagsChange> PropertyFlagsChangeList;
02570 
02581 struct TP_QT_EXPORT PropertySpec
02582 {
02583     uint propertyID;
02584     QString name;
02585     QString signature;
02586     uint flags;
02587 };
02588 
02589 TP_QT_EXPORT bool operator==(const PropertySpec& v1, const PropertySpec& v2);
02590 inline bool operator!=(const PropertySpec& v1, const PropertySpec& v2)
02591 {
02592     return !operator==(v1, v2);
02593 }
02594 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const PropertySpec& val);
02595 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, PropertySpec& val);
02596 
02603 typedef QList<PropertySpec> PropertySpecList;
02604 
02616 struct TP_QT_EXPORT PropertyValue
02617 {
02618     uint identifier;
02619     QDBusVariant value;
02620 };
02621 
02622 TP_QT_EXPORT bool operator==(const PropertyValue& v1, const PropertyValue& v2);
02623 inline bool operator!=(const PropertyValue& v1, const PropertyValue& v2)
02624 {
02625     return !operator==(v1, v2);
02626 }
02627 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const PropertyValue& val);
02628 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, PropertyValue& val);
02629 
02636 typedef QList<PropertyValue> PropertyValueList;
02637 
02652 struct TP_QT_EXPORT ProtocolPropertiesMap : public QMap<QString, QVariantMap>
02653 {
02654     inline ProtocolPropertiesMap() : QMap<QString, QVariantMap>() {}
02655     inline ProtocolPropertiesMap(const QMap<QString, QVariantMap>& a) : QMap<QString, QVariantMap>(a) {}
02656 
02657     inline ProtocolPropertiesMap& operator=(const QMap<QString, QVariantMap>& a)
02658     {
02659         *(static_cast<QMap<QString, QVariantMap>*>(this)) = a;
02660         return *this;
02661     }
02662 };
02663 
02675 struct TP_QT_EXPORT QualifiedPropertyValueMap : public QMap<QString, QDBusVariant>
02676 {
02677     inline QualifiedPropertyValueMap() : QMap<QString, QDBusVariant>() {}
02678     inline QualifiedPropertyValueMap(const QMap<QString, QDBusVariant>& a) : QMap<QString, QDBusVariant>(a) {}
02679 
02680     inline QualifiedPropertyValueMap& operator=(const QMap<QString, QDBusVariant>& a)
02681     {
02682         *(static_cast<QMap<QString, QDBusVariant>*>(this)) = a;
02683         return *this;
02684     }
02685 };
02686 
02693 typedef QList<QualifiedPropertyValueMap> QualifiedPropertyValueMapList;
02694 
02704 struct TP_QT_EXPORT RTCPFeedbackMessage
02705 {
02710     QString type;
02716     QString subtype;
02720     QString parameters;
02721 };
02722 
02723 TP_QT_EXPORT bool operator==(const RTCPFeedbackMessage& v1, const RTCPFeedbackMessage& v2);
02724 inline bool operator!=(const RTCPFeedbackMessage& v1, const RTCPFeedbackMessage& v2)
02725 {
02726     return !operator==(v1, v2);
02727 }
02728 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const RTCPFeedbackMessage& val);
02729 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, RTCPFeedbackMessage& val);
02730 
02737 typedef QList<RTCPFeedbackMessage> RTCPFeedbackMessageList;
02738 
02748 struct TP_QT_EXPORT RTPHeaderExtension
02749 {
02753     uint ID;
02757     uint direction;
02761     QString URI;
02765     QString parameters;
02766 };
02767 
02768 TP_QT_EXPORT bool operator==(const RTPHeaderExtension& v1, const RTPHeaderExtension& v2);
02769 inline bool operator!=(const RTPHeaderExtension& v1, const RTPHeaderExtension& v2)
02770 {
02771     return !operator==(v1, v2);
02772 }
02773 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const RTPHeaderExtension& val);
02774 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, RTPHeaderExtension& val);
02775 
02782 typedef QList<RTPHeaderExtension> RTPHeaderExtensionsList;
02783 
02821 struct TP_QT_EXPORT RequestableChannelClass
02822 {
02849     QVariantMap fixedProperties;
02880     QStringList allowedProperties;
02881 };
02882 
02883 TP_QT_EXPORT bool operator==(const RequestableChannelClass& v1, const RequestableChannelClass& v2);
02884 inline bool operator!=(const RequestableChannelClass& v1, const RequestableChannelClass& v2)
02885 {
02886     return !operator==(v1, v2);
02887 }
02888 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const RequestableChannelClass& val);
02889 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, RequestableChannelClass& val);
02890 
02897 typedef QList<RequestableChannelClass> RequestableChannelClassList;
02898 
02917 struct TP_QT_EXPORT RichPresenceAccessControl
02918 {
02922     uint type;
02927     QDBusVariant detail;
02928 };
02929 
02930 TP_QT_EXPORT bool operator==(const RichPresenceAccessControl& v1, const RichPresenceAccessControl& v2);
02931 inline bool operator!=(const RichPresenceAccessControl& v1, const RichPresenceAccessControl& v2)
02932 {
02933     return !operator==(v1, v2);
02934 }
02935 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const RichPresenceAccessControl& val);
02936 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, RichPresenceAccessControl& val);
02937 
02945 struct TP_QT_EXPORT RoomInfo
02946 {
02947     uint handle;
02948     QString channelType;
02949     QVariantMap info;
02950 };
02951 
02952 TP_QT_EXPORT bool operator==(const RoomInfo& v1, const RoomInfo& v2);
02953 inline bool operator!=(const RoomInfo& v1, const RoomInfo& v2)
02954 {
02955     return !operator==(v1, v2);
02956 }
02957 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const RoomInfo& val);
02958 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, RoomInfo& val);
02959 
02966 typedef QList<RoomInfo> RoomInfoList;
02967 
02977 struct TP_QT_EXPORT ServicePoint
02978 {
02982     uint servicePointType;
02989     QString service;
02990 };
02991 
02992 TP_QT_EXPORT bool operator==(const ServicePoint& v1, const ServicePoint& v2);
02993 inline bool operator!=(const ServicePoint& v1, const ServicePoint& v2)
02994 {
02995     return !operator==(v1, v2);
02996 }
02997 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const ServicePoint& val);
02998 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, ServicePoint& val);
02999 
03009 struct TP_QT_EXPORT SimplePresence
03010 {
03014     uint type;
03019     QString status;
03043     QString statusMessage;
03044 };
03045 
03046 TP_QT_EXPORT bool operator==(const SimplePresence& v1, const SimplePresence& v2);
03047 inline bool operator!=(const SimplePresence& v1, const SimplePresence& v2)
03048 {
03049     return !operator==(v1, v2);
03050 }
03051 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const SimplePresence& val);
03052 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, SimplePresence& val);
03053 
03063 struct TP_QT_EXPORT SimpleStatusSpec
03064 {
03072     uint type;
03076     bool maySetOnSelf;
03083     bool canHaveMessage;
03084 };
03085 
03086 TP_QT_EXPORT bool operator==(const SimpleStatusSpec& v1, const SimpleStatusSpec& v2);
03087 inline bool operator!=(const SimpleStatusSpec& v1, const SimpleStatusSpec& v2)
03088 {
03089     return !operator==(v1, v2);
03090 }
03091 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const SimpleStatusSpec& val);
03092 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, SimpleStatusSpec& val);
03093 
03104 struct TP_QT_EXPORT SingleContactAttributesMap : public QMap<QString, QDBusVariant>
03105 {
03106     inline SingleContactAttributesMap() : QMap<QString, QDBusVariant>() {}
03107     inline SingleContactAttributesMap(const QMap<QString, QDBusVariant>& a) : QMap<QString, QDBusVariant>(a) {}
03108 
03109     inline SingleContactAttributesMap& operator=(const QMap<QString, QDBusVariant>& a)
03110     {
03111         *(static_cast<QMap<QString, QDBusVariant>*>(this)) = a;
03112         return *this;
03113     }
03114 };
03115 
03125 struct TP_QT_EXPORT SocketAddressIP
03126 {
03131     QString address;
03135     ushort port;
03136 };
03137 
03138 TP_QT_EXPORT bool operator==(const SocketAddressIP& v1, const SocketAddressIP& v2);
03139 inline bool operator!=(const SocketAddressIP& v1, const SocketAddressIP& v2)
03140 {
03141     return !operator==(v1, v2);
03142 }
03143 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const SocketAddressIP& val);
03144 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, SocketAddressIP& val);
03145 
03152 typedef QList<SocketAddressIP> SocketAddressIPList;
03153 
03163 struct TP_QT_EXPORT SocketAddressIPv4
03164 {
03169     QString address;
03173     ushort port;
03174 };
03175 
03176 TP_QT_EXPORT bool operator==(const SocketAddressIPv4& v1, const SocketAddressIPv4& v2);
03177 inline bool operator!=(const SocketAddressIPv4& v1, const SocketAddressIPv4& v2)
03178 {
03179     return !operator==(v1, v2);
03180 }
03181 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const SocketAddressIPv4& val);
03182 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, SocketAddressIPv4& val);
03183 
03193 struct TP_QT_EXPORT SocketAddressIPv6
03194 {
03199     QString address;
03203     ushort port;
03204 };
03205 
03206 TP_QT_EXPORT bool operator==(const SocketAddressIPv6& v1, const SocketAddressIPv6& v2);
03207 inline bool operator!=(const SocketAddressIPv6& v1, const SocketAddressIPv6& v2)
03208 {
03209     return !operator==(v1, v2);
03210 }
03211 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const SocketAddressIPv6& val);
03212 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, SocketAddressIPv6& val);
03213 
03223 struct TP_QT_EXPORT SocketNetmaskIPv4
03224 {
03229     QString address;
03234     uchar prefixLength;
03235 };
03236 
03237 TP_QT_EXPORT bool operator==(const SocketNetmaskIPv4& v1, const SocketNetmaskIPv4& v2);
03238 inline bool operator!=(const SocketNetmaskIPv4& v1, const SocketNetmaskIPv4& v2)
03239 {
03240     return !operator==(v1, v2);
03241 }
03242 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const SocketNetmaskIPv4& val);
03243 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, SocketNetmaskIPv4& val);
03244 
03254 struct TP_QT_EXPORT SocketNetmaskIPv6
03255 {
03260     QString address;
03265     uchar prefixLength;
03266 };
03267 
03268 TP_QT_EXPORT bool operator==(const SocketNetmaskIPv6& v1, const SocketNetmaskIPv6& v2);
03269 inline bool operator!=(const SocketNetmaskIPv6& v1, const SocketNetmaskIPv6& v2)
03270 {
03271     return !operator==(v1, v2);
03272 }
03273 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const SocketNetmaskIPv6& val);
03274 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, SocketNetmaskIPv6& val);
03275 
03285 struct TP_QT_EXPORT StreamCredentials
03286 {
03290     QString username;
03294     QString password;
03295 };
03296 
03297 TP_QT_EXPORT bool operator==(const StreamCredentials& v1, const StreamCredentials& v2);
03298 inline bool operator!=(const StreamCredentials& v1, const StreamCredentials& v2)
03299 {
03300     return !operator==(v1, v2);
03301 }
03302 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const StreamCredentials& val);
03303 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, StreamCredentials& val);
03304 
03315 struct TP_QT_EXPORT StringStringMap : public QMap<QString, QString>
03316 {
03317     inline StringStringMap() : QMap<QString, QString>() {}
03318     inline StringStringMap(const QMap<QString, QString>& a) : QMap<QString, QString>(a) {}
03319 
03320     inline StringStringMap& operator=(const QMap<QString, QString>& a)
03321     {
03322         *(static_cast<QMap<QString, QString>*>(this)) = a;
03323         return *this;
03324     }
03325 };
03326 
03333 typedef QList<StringStringMap> StringStringMapList;
03334 
03345 struct TP_QT_EXPORT StringVariantMap : public QMap<QString, QDBusVariant>
03346 {
03347     inline StringVariantMap() : QMap<QString, QDBusVariant>() {}
03348     inline StringVariantMap(const QMap<QString, QDBusVariant>& a) : QMap<QString, QDBusVariant>(a) {}
03349 
03350     inline StringVariantMap& operator=(const QMap<QString, QDBusVariant>& a)
03351     {
03352         *(static_cast<QMap<QString, QDBusVariant>*>(this)) = a;
03353         return *this;
03354     }
03355 };
03356 
03363 typedef QList<StringVariantMap> StringVariantMapList;
03364 
03376 struct TP_QT_EXPORT SupportedSocketMap : public QMap<uint, UIntList>
03377 {
03378     inline SupportedSocketMap() : QMap<uint, UIntList>() {}
03379     inline SupportedSocketMap(const QMap<uint, UIntList>& a) : QMap<uint, UIntList>(a) {}
03380 
03381     inline SupportedSocketMap& operator=(const QMap<uint, UIntList>& a)
03382     {
03383         *(static_cast<QMap<uint, UIntList>*>(this)) = a;
03384         return *this;
03385     }
03386 };
03387 
03403 struct TP_QT_EXPORT TLSCertificateRejection
03404 {
03417     uint reason;
03425     QString error;
03462     QVariantMap details;
03463 };
03464 
03465 TP_QT_EXPORT bool operator==(const TLSCertificateRejection& v1, const TLSCertificateRejection& v2);
03466 inline bool operator!=(const TLSCertificateRejection& v1, const TLSCertificateRejection& v2)
03467 {
03468     return !operator==(v1, v2);
03469 }
03470 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const TLSCertificateRejection& val);
03471 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, TLSCertificateRejection& val);
03472 
03479 typedef QList<TLSCertificateRejection> TLSCertificateRejectionList;
03480 
03492 struct TP_QT_EXPORT TubeInfo
03493 {
03494     uint identifier;
03495     uint initiator;
03496     uint type;
03497     QString service;
03498     QVariantMap parameters;
03499     uint state;
03500 };
03501 
03502 TP_QT_EXPORT bool operator==(const TubeInfo& v1, const TubeInfo& v2);
03503 inline bool operator!=(const TubeInfo& v1, const TubeInfo& v2)
03504 {
03505     return !operator==(v1, v2);
03506 }
03507 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const TubeInfo& val);
03508 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, TubeInfo& val);
03509 
03516 typedef QList<TubeInfo> TubeInfoList;
03517 
03534 struct TP_QT_EXPORT VCardFieldAddressMap : public QMap<QString, QString>
03535 {
03536     inline VCardFieldAddressMap() : QMap<QString, QString>() {}
03537     inline VCardFieldAddressMap(const QMap<QString, QString>& a) : QMap<QString, QString>(a) {}
03538 
03539     inline VCardFieldAddressMap& operator=(const QMap<QString, QString>& a)
03540     {
03541         *(static_cast<QMap<QString, QString>*>(this)) = a;
03542         return *this;
03543     }
03544 };
03545 
03553 struct TP_QT_EXPORT VideoResolution
03554 {
03558     uint width;
03562     uint height;
03563 };
03564 
03565 TP_QT_EXPORT bool operator==(const VideoResolution& v1, const VideoResolution& v2);
03566 inline bool operator!=(const VideoResolution& v1, const VideoResolution& v2)
03567 {
03568     return !operator==(v1, v2);
03569 }
03570 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const VideoResolution& val);
03571 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, VideoResolution& val);
03572 
03579 typedef QList<VideoResolution> VideoResolutionStruct;
03580 
03590 struct TP_QT_EXPORT CandidatePair
03591 {
03595     Candidate local;
03599     Candidate remote;
03600 };
03601 
03602 TP_QT_EXPORT bool operator==(const CandidatePair& v1, const CandidatePair& v2);
03603 inline bool operator!=(const CandidatePair& v1, const CandidatePair& v2)
03604 {
03605     return !operator==(v1, v2);
03606 }
03607 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const CandidatePair& val);
03608 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, CandidatePair& val);
03609 
03616 typedef QList<CandidatePair> CandidatePairList;
03617 
03627 struct TP_QT_EXPORT Codec
03628 {
03635     uint identifier;
03641     QString name;
03647     uint clockrate;
03653     uint channels;
03669     bool updated;
03675     StringStringMap parameters;
03676 };
03677 
03678 TP_QT_EXPORT bool operator==(const Codec& v1, const Codec& v2);
03679 inline bool operator!=(const Codec& v1, const Codec& v2)
03680 {
03681     return !operator==(v1, v2);
03682 }
03683 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const Codec& val);
03684 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, Codec& val);
03685 
03692 typedef QList<Codec> CodecList;
03693 
03704 struct TP_QT_EXPORT ContactCapabilitiesMap : public QMap<uint, RequestableChannelClassList>
03705 {
03706     inline ContactCapabilitiesMap() : QMap<uint, RequestableChannelClassList>() {}
03707     inline ContactCapabilitiesMap(const QMap<uint, RequestableChannelClassList>& a) : QMap<uint, RequestableChannelClassList>(a) {}
03708 
03709     inline ContactCapabilitiesMap& operator=(const QMap<uint, RequestableChannelClassList>& a)
03710     {
03711         *(static_cast<QMap<uint, RequestableChannelClassList>*>(this)) = a;
03712         return *this;
03713     }
03714 };
03715 
03722 typedef QList<ContactCapabilitiesMap> ContactCapabilitiesMapList;
03723 
03735 struct TP_QT_EXPORT ContactInfoMap : public QMap<uint, ContactInfoFieldList>
03736 {
03737     inline ContactInfoMap() : QMap<uint, ContactInfoFieldList>() {}
03738     inline ContactInfoMap(const QMap<uint, ContactInfoFieldList>& a) : QMap<uint, ContactInfoFieldList>(a) {}
03739 
03740     inline ContactInfoMap& operator=(const QMap<uint, ContactInfoFieldList>& a)
03741     {
03742         *(static_cast<QMap<uint, ContactInfoFieldList>*>(this)) = a;
03743         return *this;
03744     }
03745 };
03746 
03758 struct TP_QT_EXPORT ContactSearchResultMap : public QMap<QString, ContactInfoFieldList>
03759 {
03760     inline ContactSearchResultMap() : QMap<QString, ContactInfoFieldList>() {}
03761     inline ContactSearchResultMap(const QMap<QString, ContactInfoFieldList>& a) : QMap<QString, ContactInfoFieldList>(a) {}
03762 
03763     inline ContactSearchResultMap& operator=(const QMap<QString, ContactInfoFieldList>& a)
03764     {
03765         *(static_cast<QMap<QString, ContactInfoFieldList>*>(this)) = a;
03766         return *this;
03767     }
03768 };
03769 
03781 struct TP_QT_EXPORT ContactSubscriptionMap : public QMap<uint, ContactSubscriptions>
03782 {
03783     inline ContactSubscriptionMap() : QMap<uint, ContactSubscriptions>() {}
03784     inline ContactSubscriptionMap(const QMap<uint, ContactSubscriptions>& a) : QMap<uint, ContactSubscriptions>(a) {}
03785 
03786     inline ContactSubscriptionMap& operator=(const QMap<uint, ContactSubscriptions>& a)
03787     {
03788         *(static_cast<QMap<uint, ContactSubscriptions>*>(this)) = a;
03789         return *this;
03790     }
03791 };
03792 
03802 struct TP_QT_EXPORT HandlerCapabilities
03803 {
03809     QString wellKnownName;
03817     StringVariantMapList channelClasses;
03826     QStringList capabilities;
03827 };
03828 
03829 TP_QT_EXPORT bool operator==(const HandlerCapabilities& v1, const HandlerCapabilities& v2);
03830 inline bool operator!=(const HandlerCapabilities& v1, const HandlerCapabilities& v2)
03831 {
03832     return !operator==(v1, v2);
03833 }
03834 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const HandlerCapabilities& val);
03835 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, HandlerCapabilities& val);
03836 
03843 typedef QList<HandlerCapabilities> HandlerCapabilitiesList;
03844 
03855 struct TP_QT_EXPORT LastActivityAndStatuses
03856 {
03857     uint lastActivity;
03858     MultipleStatusMap statuses;
03859 };
03860 
03861 TP_QT_EXPORT bool operator==(const LastActivityAndStatuses& v1, const LastActivityAndStatuses& v2);
03862 inline bool operator!=(const LastActivityAndStatuses& v1, const LastActivityAndStatuses& v2)
03863 {
03864     return !operator==(v1, v2);
03865 }
03866 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const LastActivityAndStatuses& val);
03867 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, LastActivityAndStatuses& val);
03868 
03886 struct TP_QT_EXPORT MailURL
03887 {
03891     QString URL;
03895     uint method;
03900     HTTPPostDataList postData;
03901 };
03902 
03903 TP_QT_EXPORT bool operator==(const MailURL& v1, const MailURL& v2);
03904 inline bool operator!=(const MailURL& v1, const MailURL& v2)
03905 {
03906     return !operator==(v1, v2);
03907 }
03908 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const MailURL& val);
03909 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, MailURL& val);
03910 
03918 struct TP_QT_EXPORT MediaStreamHandlerCandidate
03919 {
03920     QString name;
03921     MediaStreamHandlerTransportList transports;
03922 };
03923 
03924 TP_QT_EXPORT bool operator==(const MediaStreamHandlerCandidate& v1, const MediaStreamHandlerCandidate& v2);
03925 inline bool operator!=(const MediaStreamHandlerCandidate& v1, const MediaStreamHandlerCandidate& v2)
03926 {
03927     return !operator==(v1, v2);
03928 }
03929 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const MediaStreamHandlerCandidate& val);
03930 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, MediaStreamHandlerCandidate& val);
03931 
03938 typedef QList<MediaStreamHandlerCandidate> MediaStreamHandlerCandidateList;
03939 
03949 struct TP_QT_EXPORT MediaStreamHandlerCodec
03950 {
03954     uint codecID;
03958     QString name;
03962     uint mediaType;
03966     uint clockRate;
03970     uint numberOfChannels;
03974     StringStringMap parameters;
03975 };
03976 
03977 TP_QT_EXPORT bool operator==(const MediaStreamHandlerCodec& v1, const MediaStreamHandlerCodec& v2);
03978 inline bool operator!=(const MediaStreamHandlerCodec& v1, const MediaStreamHandlerCodec& v2)
03979 {
03980     return !operator==(v1, v2);
03981 }
03982 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const MediaStreamHandlerCodec& val);
03983 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, MediaStreamHandlerCodec& val);
03984 
03991 typedef QList<MediaStreamHandlerCodec> MediaStreamHandlerCodecList;
03992 
04003 struct TP_QT_EXPORT NotDelegatedMap : public QMap<QDBusObjectPath, NotDelegatedError>
04004 {
04005     inline NotDelegatedMap() : QMap<QDBusObjectPath, NotDelegatedError>() {}
04006     inline NotDelegatedMap(const QMap<QDBusObjectPath, NotDelegatedError>& a) : QMap<QDBusObjectPath, NotDelegatedError>(a) {}
04007 
04008     inline NotDelegatedMap& operator=(const QMap<QDBusObjectPath, NotDelegatedError>& a)
04009     {
04010         *(static_cast<QMap<QDBusObjectPath, NotDelegatedError>*>(this)) = a;
04011         return *this;
04012     }
04013 };
04014 
04022 struct TP_QT_EXPORT RTCPFeedbackMessageProperties
04023 {
04032     uint RTCPMinimumInterval;
04036     RTCPFeedbackMessageList messages;
04037 };
04038 
04039 TP_QT_EXPORT bool operator==(const RTCPFeedbackMessageProperties& v1, const RTCPFeedbackMessageProperties& v2);
04040 inline bool operator!=(const RTCPFeedbackMessageProperties& v1, const RTCPFeedbackMessageProperties& v2)
04041 {
04042     return !operator==(v1, v2);
04043 }
04044 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const RTCPFeedbackMessageProperties& val);
04045 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, RTCPFeedbackMessageProperties& val);
04046 
04061 struct TP_QT_EXPORT ServicePointInfo
04062 {
04066     ServicePoint servicePoint;
04073     QStringList serviceIDs;
04074 };
04075 
04076 TP_QT_EXPORT bool operator==(const ServicePointInfo& v1, const ServicePointInfo& v2);
04077 inline bool operator!=(const ServicePointInfo& v1, const ServicePointInfo& v2)
04078 {
04079     return !operator==(v1, v2);
04080 }
04081 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const ServicePointInfo& val);
04082 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, ServicePointInfo& val);
04083 
04090 typedef QList<ServicePointInfo> ServicePointInfoList;
04091 
04103 struct TP_QT_EXPORT SimpleContactPresences : public QMap<uint, SimplePresence>
04104 {
04105     inline SimpleContactPresences() : QMap<uint, SimplePresence>() {}
04106     inline SimpleContactPresences(const QMap<uint, SimplePresence>& a) : QMap<uint, SimplePresence>(a) {}
04107 
04108     inline SimpleContactPresences& operator=(const QMap<uint, SimplePresence>& a)
04109     {
04110         *(static_cast<QMap<uint, SimplePresence>*>(this)) = a;
04111         return *this;
04112     }
04113 };
04114 
04125 struct TP_QT_EXPORT SimpleStatusSpecMap : public QMap<QString, SimpleStatusSpec>
04126 {
04127     inline SimpleStatusSpecMap() : QMap<QString, SimpleStatusSpec>() {}
04128     inline SimpleStatusSpecMap(const QMap<QString, SimpleStatusSpec>& a) : QMap<QString, SimpleStatusSpec>(a) {}
04129 
04130     inline SimpleStatusSpecMap& operator=(const QMap<QString, SimpleStatusSpec>& a)
04131     {
04132         *(static_cast<QMap<QString, SimpleStatusSpec>*>(this)) = a;
04133         return *this;
04134     }
04135 };
04136 
04144 struct TP_QT_EXPORT StatusSpec
04145 {
04146     uint type;
04147     bool maySetOnSelf;
04148     bool exclusive;
04149     StringStringMap parameterTypes;
04150 };
04151 
04152 TP_QT_EXPORT bool operator==(const StatusSpec& v1, const StatusSpec& v2);
04153 inline bool operator!=(const StatusSpec& v1, const StatusSpec& v2)
04154 {
04155     return !operator==(v1, v2);
04156 }
04157 TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const StatusSpec& val);
04158 TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, StatusSpec& val);
04159 
04170 struct TP_QT_EXPORT ContactCodecMap : public QMap<uint, CodecList>
04171 {
04172     inline ContactCodecMap() : QMap<uint, CodecList>() {}
04173     inline ContactCodecMap(const QMap<uint, CodecList>& a) : QMap<uint, CodecList>(a) {}
04174 
04175     inline ContactCodecMap& operator=(const QMap<uint, CodecList>& a)
04176     {
04177         *(static_cast<QMap<uint, CodecList>*>(this)) = a;
04178         return *this;
04179     }
04180 };
04181 
04193 struct TP_QT_EXPORT ContactPresences : public QMap<uint, LastActivityAndStatuses>
04194 {
04195     inline ContactPresences() : QMap<uint, LastActivityAndStatuses>() {}
04196     inline ContactPresences(const QMap<uint, LastActivityAndStatuses>& a) : QMap<uint, LastActivityAndStatuses>(a) {}
04197 
04198     inline ContactPresences& operator=(const QMap<uint, LastActivityAndStatuses>& a)
04199     {
04200         *(static_cast<QMap<uint, LastActivityAndStatuses>*>(this)) = a;
04201         return *this;
04202     }
04203 };
04204 
04215 struct TP_QT_EXPORT RTCPFeedbackMessageMap : public QMap<uint, RTCPFeedbackMessageProperties>
04216 {
04217     inline RTCPFeedbackMessageMap() : QMap<uint, RTCPFeedbackMessageProperties>() {}
04218     inline RTCPFeedbackMessageMap(const QMap<uint, RTCPFeedbackMessageProperties>& a) : QMap<uint, RTCPFeedbackMessageProperties>(a) {}
04219 
04220     inline RTCPFeedbackMessageMap& operator=(const QMap<uint, RTCPFeedbackMessageProperties>& a)
04221     {
04222         *(static_cast<QMap<uint, RTCPFeedbackMessageProperties>*>(this)) = a;
04223         return *this;
04224     }
04225 };
04226 
04235 struct TP_QT_EXPORT StatusSpecMap : public QMap<QString, StatusSpec>
04236 {
04237     inline StatusSpecMap() : QMap<QString, StatusSpec>() {}
04238     inline StatusSpecMap(const QMap<QString, StatusSpec>& a) : QMap<QString, StatusSpec>(a) {}
04239 
04240     inline StatusSpecMap& operator=(const QMap<QString, StatusSpec>& a)
04241     {
04242         *(static_cast<QMap<QString, StatusSpec>*>(this)) = a;
04243         return *this;
04244     }
04245 };
04246 
04247 
04248 } // namespace Tp
04249 
04250 Q_DECLARE_METATYPE(Tp::AccessControl)
04251 Q_DECLARE_METATYPE(Tp::AddressingNormalizationMap)
04252 Q_DECLARE_METATYPE(Tp::AliasMap)
04253 Q_DECLARE_METATYPE(Tp::AliasPair)
04254 Q_DECLARE_METATYPE(Tp::AliasPairList)
04255 Q_DECLARE_METATYPE(Tp::Avatar)
04256 Q_DECLARE_METATYPE(Tp::AvatarTokenMap)
04257 Q_DECLARE_METATYPE(Tp::ByteArrayList)
04258 Q_DECLARE_METATYPE(Tp::CallMemberMap)
04259 Q_DECLARE_METATYPE(Tp::CallMemberMapList)
04260 Q_DECLARE_METATYPE(Tp::CallStateReason)
04261 Q_DECLARE_METATYPE(Tp::Candidate)
04262 Q_DECLARE_METATYPE(Tp::CandidateInfo)
04263 Q_DECLARE_METATYPE(Tp::CandidateList)
04264 Q_DECLARE_METATYPE(Tp::CandidatePair)
04265 Q_DECLARE_METATYPE(Tp::CandidatePairList)
04266 Q_DECLARE_METATYPE(Tp::CapabilityChange)
04267 Q_DECLARE_METATYPE(Tp::CapabilityChangeList)
04268 Q_DECLARE_METATYPE(Tp::CapabilityPair)
04269 Q_DECLARE_METATYPE(Tp::CapabilityPairList)
04270 Q_DECLARE_METATYPE(Tp::CaptchaAnswers)
04271 Q_DECLARE_METATYPE(Tp::CaptchaInfo)
04272 Q_DECLARE_METATYPE(Tp::CaptchaInfoList)
04273 Q_DECLARE_METATYPE(Tp::ChannelCallStateMap)
04274 Q_DECLARE_METATYPE(Tp::ChannelClass)
04275 Q_DECLARE_METATYPE(Tp::ChannelClassList)
04276 Q_DECLARE_METATYPE(Tp::ChannelDetails)
04277 Q_DECLARE_METATYPE(Tp::ChannelDetailsList)
04278 Q_DECLARE_METATYPE(Tp::ChannelInfo)
04279 Q_DECLARE_METATYPE(Tp::ChannelInfoList)
04280 Q_DECLARE_METATYPE(Tp::ChannelOriginatorMap)
04281 Q_DECLARE_METATYPE(Tp::ChatStateMap)
04282 Q_DECLARE_METATYPE(Tp::Codec)
04283 Q_DECLARE_METATYPE(Tp::CodecList)
04284 Q_DECLARE_METATYPE(Tp::ComponentStateMap)
04285 Q_DECLARE_METATYPE(Tp::ContactAttributesMap)
04286 Q_DECLARE_METATYPE(Tp::ContactCapabilitiesMap)
04287 Q_DECLARE_METATYPE(Tp::ContactCapabilitiesMapList)
04288 Q_DECLARE_METATYPE(Tp::ContactCapability)
04289 Q_DECLARE_METATYPE(Tp::ContactCapabilityList)
04290 Q_DECLARE_METATYPE(Tp::ContactClientTypes)
04291 Q_DECLARE_METATYPE(Tp::ContactCodecMap)
04292 Q_DECLARE_METATYPE(Tp::ContactInfoField)
04293 Q_DECLARE_METATYPE(Tp::ContactInfoFieldList)
04294 Q_DECLARE_METATYPE(Tp::ContactInfoMap)
04295 Q_DECLARE_METATYPE(Tp::ContactLocations)
04296 Q_DECLARE_METATYPE(Tp::ContactMediaDescriptionPropertiesMap)
04297 Q_DECLARE_METATYPE(Tp::ContactPresences)
04298 Q_DECLARE_METATYPE(Tp::ContactSSRCsMap)
04299 Q_DECLARE_METATYPE(Tp::ContactSearchMap)
04300 Q_DECLARE_METATYPE(Tp::ContactSearchResultMap)
04301 Q_DECLARE_METATYPE(Tp::ContactSendingStateMap)
04302 Q_DECLARE_METATYPE(Tp::ContactSubscriptionMap)
04303 Q_DECLARE_METATYPE(Tp::ContactSubscriptions)
04304 Q_DECLARE_METATYPE(Tp::CurrencyAmount)
04305 Q_DECLARE_METATYPE(Tp::DBusTubeMember)
04306 Q_DECLARE_METATYPE(Tp::DBusTubeMemberList)
04307 Q_DECLARE_METATYPE(Tp::DBusTubeParticipants)
04308 Q_DECLARE_METATYPE(Tp::DebugMessage)
04309 Q_DECLARE_METATYPE(Tp::DebugMessageList)
04310 Q_DECLARE_METATYPE(Tp::FieldSpec)
04311 Q_DECLARE_METATYPE(Tp::FieldSpecs)
04312 Q_DECLARE_METATYPE(Tp::HTTPPostData)
04313 Q_DECLARE_METATYPE(Tp::HTTPPostDataList)
04314 Q_DECLARE_METATYPE(Tp::HandleIdentifierMap)
04315 Q_DECLARE_METATYPE(Tp::HandleOwnerMap)
04316 Q_DECLARE_METATYPE(Tp::HandlerCapabilities)
04317 Q_DECLARE_METATYPE(Tp::HandlerCapabilitiesList)
04318 Q_DECLARE_METATYPE(Tp::LastActivityAndStatuses)
04319 Q_DECLARE_METATYPE(Tp::LocalPendingInfo)
04320 Q_DECLARE_METATYPE(Tp::LocalPendingInfoList)
04321 Q_DECLARE_METATYPE(Tp::Location)
04322 Q_DECLARE_METATYPE(Tp::Mail)
04323 Q_DECLARE_METATYPE(Tp::MailAddress)
04324 Q_DECLARE_METATYPE(Tp::MailAddressList)
04325 Q_DECLARE_METATYPE(Tp::MailList)
04326 Q_DECLARE_METATYPE(Tp::MailURL)
04327 Q_DECLARE_METATYPE(Tp::MediaDescriptionOffer)
04328 Q_DECLARE_METATYPE(Tp::MediaDescriptionProperties)
04329 Q_DECLARE_METATYPE(Tp::MediaSessionHandlerInfo)
04330 Q_DECLARE_METATYPE(Tp::MediaSessionHandlerInfoList)
04331 Q_DECLARE_METATYPE(Tp::MediaStreamHandlerCandidate)
04332 Q_DECLARE_METATYPE(Tp::MediaStreamHandlerCandidateList)
04333 Q_DECLARE_METATYPE(Tp::MediaStreamHandlerCodec)
04334 Q_DECLARE_METATYPE(Tp::MediaStreamHandlerCodecList)
04335 Q_DECLARE_METATYPE(Tp::MediaStreamHandlerTransport)
04336 Q_DECLARE_METATYPE(Tp::MediaStreamHandlerTransportList)
04337 Q_DECLARE_METATYPE(Tp::MediaStreamInfo)
04338 Q_DECLARE_METATYPE(Tp::MediaStreamInfoList)
04339 Q_DECLARE_METATYPE(Tp::MessagePart)
04340 Q_DECLARE_METATYPE(Tp::MessagePartContentMap)
04341 Q_DECLARE_METATYPE(Tp::MessagePartList)
04342 Q_DECLARE_METATYPE(Tp::MessagePartListList)
04343 Q_DECLARE_METATYPE(Tp::Metadata)
04344 Q_DECLARE_METATYPE(Tp::MultipleStatusMap)
04345 Q_DECLARE_METATYPE(Tp::NotDelegatedError)
04346 Q_DECLARE_METATYPE(Tp::NotDelegatedMap)
04347 Q_DECLARE_METATYPE(Tp::ObjectImmutablePropertiesMap)
04348 Q_DECLARE_METATYPE(Tp::ObjectImmutablePropertiesMapList)
04349 Q_DECLARE_METATYPE(Tp::ObjectPathList)
04350 Q_DECLARE_METATYPE(Tp::ParamSpec)
04351 Q_DECLARE_METATYPE(Tp::ParamSpecList)
04352 Q_DECLARE_METATYPE(Tp::PendingTextMessage)
04353 Q_DECLARE_METATYPE(Tp::PendingTextMessageList)
04354 Q_DECLARE_METATYPE(Tp::PropertyFlagsChange)
04355 Q_DECLARE_METATYPE(Tp::PropertyFlagsChangeList)
04356 Q_DECLARE_METATYPE(Tp::PropertySpec)
04357 Q_DECLARE_METATYPE(Tp::PropertySpecList)
04358 Q_DECLARE_METATYPE(Tp::PropertyValue)
04359 Q_DECLARE_METATYPE(Tp::PropertyValueList)
04360 Q_DECLARE_METATYPE(Tp::ProtocolPropertiesMap)
04361 Q_DECLARE_METATYPE(Tp::QualifiedPropertyValueMap)
04362 Q_DECLARE_METATYPE(Tp::QualifiedPropertyValueMapList)
04363 Q_DECLARE_METATYPE(Tp::RTCPFeedbackMessage)
04364 Q_DECLARE_METATYPE(Tp::RTCPFeedbackMessageList)
04365 Q_DECLARE_METATYPE(Tp::RTCPFeedbackMessageMap)
04366 Q_DECLARE_METATYPE(Tp::RTCPFeedbackMessageProperties)
04367 Q_DECLARE_METATYPE(Tp::RTPHeaderExtension)
04368 Q_DECLARE_METATYPE(Tp::RTPHeaderExtensionsList)
04369 Q_DECLARE_METATYPE(Tp::RequestableChannelClass)
04370 Q_DECLARE_METATYPE(Tp::RequestableChannelClassList)
04371 Q_DECLARE_METATYPE(Tp::RichPresenceAccessControl)
04372 Q_DECLARE_METATYPE(Tp::RoomInfo)
04373 Q_DECLARE_METATYPE(Tp::RoomInfoList)
04374 Q_DECLARE_METATYPE(Tp::ServicePoint)
04375 Q_DECLARE_METATYPE(Tp::ServicePointInfo)
04376 Q_DECLARE_METATYPE(Tp::ServicePointInfoList)
04377 Q_DECLARE_METATYPE(Tp::SimpleContactPresences)
04378 Q_DECLARE_METATYPE(Tp::SimplePresence)
04379 Q_DECLARE_METATYPE(Tp::SimpleStatusSpec)
04380 Q_DECLARE_METATYPE(Tp::SimpleStatusSpecMap)
04381 Q_DECLARE_METATYPE(Tp::SingleContactAttributesMap)
04382 Q_DECLARE_METATYPE(Tp::SocketAddressIP)
04383 Q_DECLARE_METATYPE(Tp::SocketAddressIPList)
04384 Q_DECLARE_METATYPE(Tp::SocketAddressIPv4)
04385 Q_DECLARE_METATYPE(Tp::SocketAddressIPv6)
04386 Q_DECLARE_METATYPE(Tp::SocketNetmaskIPv4)
04387 Q_DECLARE_METATYPE(Tp::SocketNetmaskIPv6)
04388 Q_DECLARE_METATYPE(Tp::StatusSpec)
04389 Q_DECLARE_METATYPE(Tp::StatusSpecMap)
04390 Q_DECLARE_METATYPE(Tp::StreamCredentials)
04391 Q_DECLARE_METATYPE(Tp::StringStringMap)
04392 Q_DECLARE_METATYPE(Tp::StringStringMapList)
04393 Q_DECLARE_METATYPE(Tp::StringVariantMap)
04394 Q_DECLARE_METATYPE(Tp::StringVariantMapList)
04395 Q_DECLARE_METATYPE(Tp::SupportedSocketMap)
04396 Q_DECLARE_METATYPE(Tp::TLSCertificateRejection)
04397 Q_DECLARE_METATYPE(Tp::TLSCertificateRejectionList)
04398 Q_DECLARE_METATYPE(Tp::TubeInfo)
04399 Q_DECLARE_METATYPE(Tp::TubeInfoList)
04400 Q_DECLARE_METATYPE(Tp::UIntList)
04401 Q_DECLARE_METATYPE(Tp::VCardFieldAddressMap)
04402 Q_DECLARE_METATYPE(Tp::VideoResolution)
04403 Q_DECLARE_METATYPE(Tp::VideoResolutionStruct)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00113.html0000644000175200001440000010231312000060453021612 0ustar00collabora-develusers00000000000000 Tp::ChannelDispatchOperation Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The ChannelDispatchOperation class represents a Telepathy channel dispatch operation. More...

#include <TelepathyQt/ChannelDispatchOperation>

Inherits Tp::StatefulDBusProxy, and Tp::OptionalInterfaceFactory< ChannelDispatchOperation >.

List of all members.

Signals

  • void channelLost (const Tp::ChannelPtr &channel, const QString &errorName, const QString &errorMessage)

Public Member Functions

Static Public Member Functions

  • static ChannelDispatchOperationPtr create (const QDBusConnection &bus, const QString &objectPath, const QVariantMap &immutableProperties, const QList< ChannelPtr > &initialChannels, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory)

Static Public Attributes

Protected Member Functions


Detailed Description

The ChannelDispatchOperation class represents a Telepathy channel dispatch operation.

One of the channel dispatcher's functions is to offer incoming channels to Approver clients for approval. An approver should generally ask the user whether they want to participate in the requested communication channels (join the chat or chatroom, answer the call, accept the file transfer, or whatever is appropriate). A collection of channels offered in this way is represented by a ChannelDispatchOperation object.

If the user wishes to accept the communication channels, the approver should call handleWith() to indicate the user's or approver's preferred handler for the channels (the empty string indicates no particular preference, and will cause any suitable handler to be used).

If the user wishes to reject the communication channels, or if the user accepts the channels and the approver will handle them itself, the approver should call claim(). If the resulting PendingOperation succeeds, the approver immediately has control over the channels as their primary handler, and may do anything with them (in particular, it may close them in whatever way seems most appropriate).

There are various situations in which the channel dispatch operation will be closed, causing the DBusProxy::invalidated() signal to be emitted. If this happens, the approver should stop prompting the user.

Because all approvers are launched simultaneously, the user might respond to another approver; if this happens, the invalidated signal will be emitted with the error code TP_QT_ERROR_OBJECT_REMOVED.

If a channel closes, the signal channelLost() is emitted. If all channels close, there is nothing more to dispatch, so the invalidated signal will be emitted with the error code TP_QT_ERROR_OBJECT_REMOVED.

If the channel dispatcher crashes or exits, the invalidated signal will be emitted with the error code TP_QT_DBUS_ERROR_NAME_HAS_NO_OWNER. In a high-quality implementation, the dispatcher should be restarted, at which point it will create new channel dispatch operations for any undispatched channels, and the approver will be notified again.


Constructor & Destructor Documentation

Tp::ChannelDispatchOperation::ChannelDispatchOperation ( const QDBusConnection &  bus,
const QString &  objectPath,
const QVariantMap &  immutableProperties,
const QList< ChannelPtr > &  initialChannels,
const AccountFactoryConstPtr &  accountFactory,
const ConnectionFactoryConstPtr &  connectionFactory,
const ChannelFactoryConstPtr &  channelFactory,
const ContactFactoryConstPtr &  contactFactory 
) [protected]

Construct a new channel dispatch operation object using the given bus, the given factories and the given initial channels.

Parameters:
busQDBusConnection to use
objectPathThe channel dispatch operation object path.
immutablePropertiesThe channel dispatch operation immutable properties.
initialChannelsThe channels this CDO has initially (further tracking is done internally).
accountFactoryThe account factory to use.
connectionFactoryThe connection factory to use.
channelFactoryThe channel factory to use.
contactFactoryThe contact factory to use.

Member Function Documentation

ChannelDispatchOperationPtr Tp::ChannelDispatchOperation::create ( const QDBusConnection &  bus,
const QString &  objectPath,
const QVariantMap &  immutableProperties,
const QList< ChannelPtr > &  initialChannels,
const AccountFactoryConstPtr &  accountFactory,
const ConnectionFactoryConstPtr &  connectionFactory,
const ChannelFactoryConstPtr &  channelFactory,
const ContactFactoryConstPtr &  contactFactory 
) [static]

Create a new channel dispatch operation object using the given bus, the given factories and the given initial channels.

Parameters:
busQDBusConnection to use.
objectPathThe channel dispatch operation object path.
immutablePropertiesThe channel dispatch operation immutable properties.
initialChannelsThe channels this CDO has initially (further tracking is done internally).
accountFactoryThe account factory to use.
connectionFactoryThe connection factory to use.
channelFactoryThe channel factory to use.
contactFactoryThe contact factory to use.
Returns:
A ChannelDispatchOperationPtr object pointing to the newly created ChannelDispatchOperation object.

Return the connection with which the channels for this dispatch operation are associated.

This method requires ChannelDispatchOperation::FeatureCore to be ready.

Returns:
A pointer to the Connection object.

Return the account with which the connection and channels for this dispatch operation are associated.

This method requires ChannelDispatchOperation::FeatureCore to be ready.

Returns:
A pointer to the Account object.
QList< ChannelPtr > Tp::ChannelDispatchOperation::channels ( ) const

Return the channels to be dispatched.

This method requires ChannelDispatchOperation::FeatureCore to be ready.

Returns:
A list of pointers to Channel objects.

Return the well known bus names (starting with org.freedesktop.Telepathy.Client.) of the possible Handlers for this dispatch operation channels with the preferred handlers first.

As a result, approvers should use the first handler by default, unless they have a reason to do otherwise.

This method requires ChannelDispatchOperation::FeatureCore to be ready.

Returns:
List of possible handlers names.

Called by an approver to accept a channel bundle and request that the given handler be used to handle it.

If successful, this method will cause the ChannelDispatchOperation object to disappear, emitting invalidated with error TP_QT_ERROR_OBJECT_REMOVED.

However, this method may fail because the dispatch has already been completed and the object has already gone. If this occurs, it indicates that another approver has asked for the bundle to be handled by a particular handler. The approver must not attempt to interact with the channels further in this case, unless it is separately invoked as the handler.

Approvers which are also channel handlers should use claim() instead of this method to request that they can handle a channel bundle themselves.

Parameters:
handlerThe well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the channel handler that should handle the channel, or an empty string if the client has no preferred channel handler.
Returns:
A PendingOperation which will emit PendingOperation::finished when the call has finished.

Called by an approver to claim channels for closing them.

Returns:
A PendingOperation which will emit PendingOperation::finished when the call has finished.
PendingOperation * Tp::ChannelDispatchOperation::claim ( const AbstractClientHandlerPtr &  handler)

Called by an approver to claim channels for handling internally. If this method is called successfully, the handler becomes the handler for the channel, but does not have the AbstractClientHandler::handleChannels() method called on it.

Approvers wishing to reject channels must call this method to claim ownership of them, and must not call requestClose() on the channels unless/until this method returns successfully.

The channel dispatcher can't know how best to close arbitrary channel types, so it leaves it up to the approver to do so. For instance, for text channels it is necessary to acknowledge any messages that have already been displayed to the user first - ideally, the approver would display and then acknowledge the messages - or to call Channel::requestClose() if the destructive behaviour of that method is desired.

Similarly, an approver for streamed media channels can close the channel with a reason (e.g. "busy") if desired. The channel dispatcher, which is designed to have no specific knowledge of particular channel types, can't do that.

If successful, this method will cause the ChannelDispatchOperation object to disappear, emitting Finished, in the same way as for handleWith().

This method may fail because the dispatch operation has already been completed. Again, see handleWith() for more details. The approver must not attempt to interact with the channels further in this case.

Parameters:
handlerThe channel handler, that should remain registered during the lifetime of channels(), otherwise dispatching will fail if the channel dispatcher restarts.
Returns:
A PendingOperation which will emit PendingOperation::finished when the call has finished.
See also:
claim(), handleWith()
void Tp::ChannelDispatchOperation::channelLost ( const Tp::ChannelPtr &  channel,
const QString &  errorName,
const QString &  errorMessage 
) [signal]

Emitted when a channel has closed before it could be claimed or handled. If this is emitted for the last remaining channel in a channel dispatch operation, it will immediately be followed by invalidated() with error TP_QT_ERROR_OBJECT_REMOVED.

Parameters:
channelThe channel that was closed.
errorThe name of a D-Bus error indicating why the channel closed.
errorMessageThe error message.

Return the ChannelDispatchOperationInterface for this ChannelDispatchOperation class. This method is protected since the convenience methods provided by this class should always be used instead of the interface by users of the class.

Returns:
A pointer to the existing Client::ChannelDispatchOperationInterface object for this ChannelDispatchOperation object.

Member Data Documentation

Feature representing the core that needs to become ready to make the ChannelDispatchOperation object usable.

Note that this feature must be enabled in order to use most ChannelDispatchOperation methods.

When calling isReady(), becomeReady(), this feature is implicitly added to the requested features.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01044.html0000644000175200001440000000520512000060453021620 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactSearchResultMap Member List
This is the complete list of members for Tp::ContactSearchResultMap, including all inherited members.
ContactSearchResultMap()Tp::ContactSearchResultMap [inline]
ContactSearchResultMap(const QMap< QString, ContactInfoFieldList > &a)Tp::ContactSearchResultMap [inline]
operator=(const QMap< QString, ContactInfoFieldList > &a)Tp::ContactSearchResultMap [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00212.html0000644000175200001440000001302012000060453021606 0ustar00collabora-develusers00000000000000 Tp::CurrencyAmount Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::CurrencyAmount Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

An amount of money in a specified currency. For example, 3.21 British pounds would conventionally be represented by (Amount = 321, Scale = 2, Currency = "GBP"), but could be represented by (Amount = 3210, Scale = 3, Currency = "GBP") in a service that records balance in units of 0.001 pounds.

As a special case, if Amount = 0, Scale = 2**32 - 1 (i.e. the largest possible 32-bit unsigned integer) and Currency = "", this indicates an unknown amount.


Member Data Documentation

The amount, expressed as a fixed-point number with decimal scale defined by the Scale field; for instance, an Amount value of 1234 with Scale of 2 represents 12.34 in the currency unit given by the Currency field.

The decimal scale for the fixed point value of the Amount field, defining the number of rightmost decimal digits from the integer value which form the fractional part of the resulting currency value.

As well as defining the interpretation of Amount, user interfaces may use this value to determine the precision with which to display the amount.

The currency code represented by this amount, which SHOULD be an international currency code such as "EUR", "USD", or "JPY" if possible. An empty string can be used to indicate that the currency is not known.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00323.html0000644000175200001440000001375012000060453021623 0ustar00collabora-develusers00000000000000 Tp::PendingStreamedMediaStreams Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingStreamedMediaStreams Class Reference

Class containing the result of an asynchronous streamed media stream creation request. More...

#include <TelepathyQt/PendingStreamedMediaStreams>

Inherits Tp::PendingOperation.

List of all members.

Public Member Functions


Detailed Description

Class containing the result of an asynchronous streamed media stream creation request.

Instances of this class cannot be constructed directly; the only way to get one is via StreamedMediaChannel.

See Asynchronous Object Model


Constructor & Destructor Documentation


Member Function Documentation

StreamedMediaChannelPtr Tp::PendingStreamedMediaStreams::channel ( ) const

Return the channel through which the request was made.

Returns:
A pointer to the StreamedMediaChannel object.

Return a list of the newly created StreamedMediaStreamPtr objects.

Returns:
A list of pointers to StreamedMediaStream objects, or an empty list if an error occurred.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00515_source.html0000644000175200001440000002174612000060453023212 0ustar00collabora-develusers00000000000000 cli-media-stream-handler-body.hpp Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-media-stream-handler-body.hpp
00001 #define IN_TP_QT_HEADER
00002 #include "TelepathyQt/media-stream-handler.h"
00003 
00004 namespace Tp
00005 {
00006 namespace Client
00007 {
00008 
00009 MediaStreamHandlerInterface::MediaStreamHandlerInterface(const QString& busName, const QString& objectPath, QObject *parent)
00010     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00011 {
00012 }
00013 
00014 MediaStreamHandlerInterface::MediaStreamHandlerInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00015     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00016 {
00017 }
00018 
00019 MediaStreamHandlerInterface::MediaStreamHandlerInterface(Tp::DBusProxy *proxy)
00020     : Tp::AbstractInterface(proxy, staticInterfaceName())
00021 {
00022 }
00023 
00024 void MediaStreamHandlerInterface::invalidate(Tp::DBusProxy *proxy,
00025         const QString &error, const QString &message)
00026 {
00027     disconnect(this, SIGNAL(AddRemoteCandidate(const QString&, const Tp::MediaStreamHandlerTransportList&)), NULL, NULL);
00028     disconnect(this, SIGNAL(Close()), NULL, NULL);
00029     disconnect(this, SIGNAL(RemoveRemoteCandidate(const QString&)), NULL, NULL);
00030     disconnect(this, SIGNAL(SetActiveCandidatePair(const QString&, const QString&)), NULL, NULL);
00031     disconnect(this, SIGNAL(SetRemoteCandidateList(const Tp::MediaStreamHandlerCandidateList&)), NULL, NULL);
00032     disconnect(this, SIGNAL(SetRemoteCodecs(const Tp::MediaStreamHandlerCodecList&)), NULL, NULL);
00033     disconnect(this, SIGNAL(SetStreamPlaying(bool)), NULL, NULL);
00034     disconnect(this, SIGNAL(SetStreamSending(bool)), NULL, NULL);
00035     disconnect(this, SIGNAL(StartTelephonyEvent(uchar)), NULL, NULL);
00036     disconnect(this, SIGNAL(StartNamedTelephonyEvent(uchar, uint)), NULL, NULL);
00037     disconnect(this, SIGNAL(StartSoundTelephonyEvent(uchar)), NULL, NULL);
00038     disconnect(this, SIGNAL(StopTelephonyEvent()), NULL, NULL);
00039     disconnect(this, SIGNAL(SetStreamHeld(bool)), NULL, NULL);
00040     disconnect(this, SIGNAL(SetRemoteFeedbackMessages(const Tp::RTCPFeedbackMessageMap&)), NULL, NULL);
00041     disconnect(this, SIGNAL(SetRemoteHeaderExtensions(const Tp::RTPHeaderExtensionsList&)), NULL, NULL);
00042 
00043     Tp::AbstractInterface::invalidate(proxy, error, message);
00044 }
00045 }
00046 }


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_func_0x68.html0000644000175200001440000002721312000060453024622 0ustar00collabora-develusers00000000000000 Class Members - Functions
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- h -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00982.html0000644000175200001440000000507512000060453021637 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactLocations Member List
This is the complete list of members for Tp::ContactLocations, including all inherited members.
ContactLocations()Tp::ContactLocations [inline]
ContactLocations(const QMap< uint, QVariantMap > &a)Tp::ContactLocations [inline]
operator=(const QMap< uint, QVariantMap > &a)Tp::ContactLocations [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00380.html0000644000175200001440000006551212000060453021631 0ustar00collabora-develusers00000000000000 Tp::SimpleCallObserver Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The SimpleCallObserver class provides an easy way to track calls in an account and can be optionally filtered by a contact and/or call direction. More...

#include <TelepathyQt/SimpleCallObserver>

Inherits Tp::RefCounted.

List of all members.

Public Types

Signals

  • void callStarted (const Tp::CallChannelPtr &channel)
  • void callEnded (const Tp::CallChannelPtr &channel, const QString &errorName, const QString &errorMessage)
  • void streamedMediaCallStarted (const Tp::StreamedMediaChannelPtr &channel)
  • void streamedMediaCallEnded (const Tp::StreamedMediaChannelPtr &channel, const QString &errorName, const QString &errorMessage)

Public Member Functions

Static Public Member Functions


Detailed Description

The SimpleCallObserver class provides an easy way to track calls in an account and can be optionally filtered by a contact and/or call direction.


Member Enumeration Documentation

Enumerator:
CallDirectionIncoming 
CallDirectionOutgoing 
CallDirectionBoth 

Constructor & Destructor Documentation

Class destructor.


Member Function Documentation

SimpleCallObserverPtr Tp::SimpleCallObserver::create ( const AccountPtr &  account,
CallDirection  direction = CallDirectionBoth 
) [static]

Create a new SimpleCallObserver object.

Events will be signalled for all calls in account that respect direction.

Parameters:
accountThe account used to listen to events.
directionThe direction of the calls used to filter events.
Returns:
An SimpleCallObserverPtr object pointing to the newly created SimpleCallObserver object.
SimpleCallObserverPtr Tp::SimpleCallObserver::create ( const AccountPtr &  account,
const ContactPtr &  contact,
CallDirection  direction = CallDirectionBoth 
) [static]

Create a new SimpleCallObserver object.

Events will be signalled for all calls in account established with contact and that respect direction.

Parameters:
accountThe account used to listen to events.
contactThe contact used to filter events.
directionThe direction of the calls used to filter events.
Returns:
An SimpleCallObserverPtr object pointing to the newly created SimpleCallObserver object.
SimpleCallObserverPtr Tp::SimpleCallObserver::create ( const AccountPtr &  account,
const QString &  contactIdentifier,
CallDirection  direction = CallDirectionBoth 
) [static]

Create a new SimpleCallObserver object.

Events will be signalled for all calls in account established with a contact identified by contactIdentifier and that respect direction.

Parameters:
accountThe account used to listen to events.
contactIdentifierThe identifier of the contact used to filter events.
directionThe direction of the calls used to filter events.
Returns:
An SimpleCallObserverPtr object pointing to the newly created SimpleCallObserver object.
AccountPtr Tp::SimpleCallObserver::account ( ) const

Return the account used to listen to events.

Returns:
A pointer to the Account object.

Return the identifier of the contact used to filter events, or an empty string if none was provided at construction.

Returns:
The identifier of the contact.

Return the direction of the calls used to filter events.

Returns:
The direction of the calls as SimpleCallObserver::CallDirection.
QList< CallChannelPtr > Tp::SimpleCallObserver::calls ( ) const

Return the list of calls currently being observed.

Returns:
A list of pointers to CallChannel objects.
QList< StreamedMediaChannelPtr > Tp::SimpleCallObserver::streamedMediaCalls ( ) const

Return the list of streamed media calls currently being observed.

Deprecated:
Use calls() instead. Modern clients shouldn't use StreamedMedia channels.
Returns:
A list of pointers to StreamedMediaChannel objects.
void Tp::SimpleCallObserver::callStarted ( const Tp::CallChannelPtr &  channel) [signal]

Emitted whenever a call that matches this observer's criteria is started.

Parameters:
channelThe channel representing the call that started.
void Tp::SimpleCallObserver::callEnded ( const Tp::CallChannelPtr &  channel,
const QString &  errorName,
const QString &  errorMessage 
) [signal]

Emitted whenever a call that matches this observer's criteria has ended.

Parameters:
channelThe channel representing the call that ended.
errorNameA D-Bus error name (a string in a subset of ASCII, prefixed with a reversed domain name).
errorMessageA debugging message associated with the error.
void Tp::SimpleCallObserver::streamedMediaCallStarted ( const Tp::StreamedMediaChannelPtr &  channel) [signal]

Emitted whenever a streamed media call that matches this observer's criteria is started.

Parameters:
channelThe channel representing the streamed media call that started.
Deprecated:
Use callStarted() instead. Modern clients shouldn't use StreamedMedia channels.
void Tp::SimpleCallObserver::streamedMediaCallEnded ( const Tp::StreamedMediaChannelPtr &  channel,
const QString &  errorName,
const QString &  errorMessage 
) [signal]

Emitted whenever a streamed media call that matches this observer's criteria has ended.

Parameters:
channelThe channel representing the streamed media call that ended.
errorNameA D-Bus error name (a string in a subset of ASCII, prefixed with a reversed domain name).
errorMessageA debugging message associated with the error.
Deprecated:
Use callEnded() instead. Modern clients shouldn't use StreamedMedia channels.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00146.html0000644000175200001440000004263212000060453021627 0ustar00collabora-develusers00000000000000 Tp::Client::ChannelTypeServerAuthenticationInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelTypeServerAuthenticationInterface Class Reference

#include <TelepathyQt/Channel>

Inherits Tp::AbstractInterface.

List of all members.

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Channel.Type.ServerAuthentication".


Constructor & Destructor Documentation

Tp::Client::ChannelTypeServerAuthenticationInterface::ChannelTypeServerAuthenticationInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelTypeServerAuthenticationInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ChannelTypeServerAuthenticationInterface::ChannelTypeServerAuthenticationInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelTypeServerAuthenticationInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ChannelTypeServerAuthenticationInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ChannelTypeServerAuthenticationInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ChannelTypeServerAuthenticationInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Channel.Type.ServerAuthentication", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property AuthenticationMethod of type QString.

This property defines the method used for the authentication step represented by this channel, which MUST be one of this channel's ChannelInterface::Interfaces .

The initially-defined interface that can be used here is ChannelInterfaceSASLAuthenticationInterface .

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
void Tp::Client::ChannelTypeServerAuthenticationInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01106.html0000644000175200001440000001726612000060453021631 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelTypeServerAuthenticationInterface Member List
This is the complete list of members for Tp::Client::ChannelTypeServerAuthenticationInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ChannelTypeServerAuthenticationInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelTypeServerAuthenticationInterface
ChannelTypeServerAuthenticationInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelTypeServerAuthenticationInterface
ChannelTypeServerAuthenticationInterface(Tp::DBusProxy *proxy)Tp::Client::ChannelTypeServerAuthenticationInterface
ChannelTypeServerAuthenticationInterface(const Tp::Client::ChannelInterface &mainInterface)Tp::Client::ChannelTypeServerAuthenticationInterface [explicit]
ChannelTypeServerAuthenticationInterface(const Tp::Client::ChannelInterface &mainInterface, QObject *parent)Tp::Client::ChannelTypeServerAuthenticationInterface
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ChannelTypeServerAuthenticationInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ChannelTypeServerAuthenticationInterface [inline]
requestPropertyAuthenticationMethod() const Tp::Client::ChannelTypeServerAuthenticationInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ChannelTypeServerAuthenticationInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_0x62.html0000644000175200001440000001671612000060453023607 0ustar00collabora-develusers00000000000000 Class Members
   Home · All Classes · All Namespaces · Modules · Functions · Files
Here is a list of all class members with links to the classes they belong to:

- b -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01126.html0000644000175200001440000003017012000060453021620 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceAvatarsInterface Member List
This is the complete list of members for Tp::Client::ConnectionInterfaceAvatarsInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
AvatarRetrieved(uint contact, const QString &token, const QByteArray &avatar, const QString &type)Tp::Client::ConnectionInterfaceAvatarsInterface [signal]
AvatarUpdated(uint contact, const QString &newAvatarToken)Tp::Client::ConnectionInterfaceAvatarsInterface [signal]
ClearAvatar(int timeout=-1)Tp::Client::ConnectionInterfaceAvatarsInterface [inline, slot]
ConnectionInterfaceAvatarsInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceAvatarsInterface
ConnectionInterfaceAvatarsInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceAvatarsInterface
ConnectionInterfaceAvatarsInterface(Tp::DBusProxy *proxy)Tp::Client::ConnectionInterfaceAvatarsInterface
ConnectionInterfaceAvatarsInterface(const Tp::Client::ConnectionInterface &mainInterface)Tp::Client::ConnectionInterfaceAvatarsInterface [explicit]
ConnectionInterfaceAvatarsInterface(const Tp::Client::ConnectionInterface &mainInterface, QObject *parent)Tp::Client::ConnectionInterfaceAvatarsInterface
GetAvatarRequirements(int timeout=-1)Tp::Client::ConnectionInterfaceAvatarsInterface [inline, slot]
GetAvatarTokens(const Tp::UIntList &contacts, int timeout=-1)Tp::Client::ConnectionInterfaceAvatarsInterface [inline, slot]
GetKnownAvatarTokens(const Tp::UIntList &contacts, int timeout=-1)Tp::Client::ConnectionInterfaceAvatarsInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ConnectionInterfaceAvatarsInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ConnectionInterfaceAvatarsInterface [inline]
RequestAvatar(uint contact, int timeout=-1)Tp::Client::ConnectionInterfaceAvatarsInterface [inline, slot]
RequestAvatars(const Tp::UIntList &contacts, int timeout=-1)Tp::Client::ConnectionInterfaceAvatarsInterface [inline, slot]
requestPropertyMaximumAvatarBytes() const Tp::Client::ConnectionInterfaceAvatarsInterface [inline]
requestPropertyMaximumAvatarHeight() const Tp::Client::ConnectionInterfaceAvatarsInterface [inline]
requestPropertyMaximumAvatarWidth() const Tp::Client::ConnectionInterfaceAvatarsInterface [inline]
requestPropertyMinimumAvatarHeight() const Tp::Client::ConnectionInterfaceAvatarsInterface [inline]
requestPropertyMinimumAvatarWidth() const Tp::Client::ConnectionInterfaceAvatarsInterface [inline]
requestPropertyRecommendedAvatarHeight() const Tp::Client::ConnectionInterfaceAvatarsInterface [inline]
requestPropertyRecommendedAvatarWidth() const Tp::Client::ConnectionInterfaceAvatarsInterface [inline]
requestPropertySupportedAvatarMIMETypes() const Tp::Client::ConnectionInterfaceAvatarsInterface [inline]
SetAvatar(const QByteArray &avatar, const QString &MIMEType, int timeout=-1)Tp::Client::ConnectionInterfaceAvatarsInterface [inline, slot]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ConnectionInterfaceAvatarsInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00976.html0000644000175200001440000000501712000060453021636 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ChatStateMap Member List
This is the complete list of members for Tp::ChatStateMap, including all inherited members.
ChatStateMap()Tp::ChatStateMap [inline]
ChatStateMap(const QMap< uint, uint > &a)Tp::ChatStateMap [inline]
operator=(const QMap< uint, uint > &a)Tp::ChatStateMap [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_func_0x67.html0000644000175200001440000003562212000060453024624 0ustar00collabora-develusers00000000000000 Class Members - Functions
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- g -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01045.html0000644000175200001440000000517712000060453021631 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactSubscriptionMap Member List
This is the complete list of members for Tp::ContactSubscriptionMap, including all inherited members.
ContactSubscriptionMap()Tp::ContactSubscriptionMap [inline]
ContactSubscriptionMap(const QMap< uint, ContactSubscriptions > &a)Tp::ContactSubscriptionMap [inline]
operator=(const QMap< uint, ContactSubscriptions > &a)Tp::ContactSubscriptionMap [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00804.html0000644000175200001440000001110212000060453021614 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Callback2< R, Arg1, Arg2 > Member List
This is the complete list of members for Tp::Callback2< R, Arg1, Arg2 >, including all inherited members.
BaseCallback()Tp::BaseCallback [inline]
BaseCallback(AbstractFunctorCaller *caller)Tp::BaseCallback [inline]
BaseCallback(const BaseCallback &other)Tp::BaseCallback [inline]
Callback2()Tp::Callback2< R, Arg1, Arg2 > [inline]
Callback2(const Functor &functor)Tp::Callback2< R, Arg1, Arg2 > [inline]
callerTp::BaseCallback [protected]
FunctionType typedefTp::Callback2< R, Arg1, Arg2 >
isValid() const Tp::BaseCallback [inline]
operator()(Arg1 a1, Arg2 a2) const Tp::Callback2< R, Arg1, Arg2 > [inline]
operator=(const BaseCallback &other)Tp::BaseCallback [inline]
ResultType typedefTp::Callback2< R, Arg1, Arg2 >
~BaseCallback()Tp::BaseCallback [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00105.html0000644000175200001440000001564512000060453021626 0ustar00collabora-develusers00000000000000 Tp::CaptchaInfo Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::CaptchaInfo Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

A struct containing information regarding a single captcha mechanism.


Member Data Documentation

The ID with which to reference this captcha method when retrieving its data and answering it. They are unique within this channel instance only.

The type of challenge as defined by XEP-0158. For instance, the commonly-used "type the letters/words you see in this image" challenge is represented by ocr

A human-readable label for the challenge, as defined in XEP-0158.

If the server does not supply a label for a challenge of type other than qa, connection managers SHOULD set Label to an empty string instead of generating their own text. If the Label is an empty string, the Handler SHOULD replace it with a generic label in the user's locale, such as the strings suggested in XEP-0158 (for instance, Enter the text you see for ocr challenges). The Handler MAY use those generic labels in any case, as per the Internationalization Considerations section of XEP-0158.

Connection managers are not usually localized, so text generated by the connection manager would be in English, regardless of the user's locale. The Handler is better-placed to generate a generic Label in the user's locale.

For challenges of type qa, the Label is a plain-text question for the user to answer. The connection manager SHOULD NOT provide an empty Label; if it does, the Handler SHOULD treat that challenge as impossible, and SHOULD NOT attempt to display it.

One flag defined: Required. Most captchas will have no flags.

A list of MIME types the server is offering to provide for this captcha method.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00358.html0000644000175200001440000001227312000060453021632 0ustar00collabora-develusers00000000000000 Tp::QualifiedPropertyValueMap Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::QualifiedPropertyValueMap Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<QString, QDBusVariant>, but needed to have a discrete type in the Qt type system.

A mapping from strings representing D-Bus properties (by their namespaced names) to their values.


Constructor & Destructor Documentation

Tp::QualifiedPropertyValueMap::QualifiedPropertyValueMap ( const QMap< QString, QDBusVariant > &  a) [inline]

Member Function Documentation

QualifiedPropertyValueMap& Tp::QualifiedPropertyValueMap::operator= ( const QMap< QString, QDBusVariant > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00470_source.html0000644000175200001440000002604312000060453023205 0ustar00collabora-develusers00000000000000 channel-dispatch-operation.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
channel-dispatch-operation.h
00001 
00023 #ifndef _TelepathyQt_channel_dispatch_operation_h_HEADER_GUARD_
00024 #define _TelepathyQt_channel_dispatch_operation_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/_gen/cli-channel-dispatch-operation.h>
00031 
00032 #include <TelepathyQt/Constants>
00033 #include <TelepathyQt/DBus>
00034 #include <TelepathyQt/DBusProxy>
00035 #include <TelepathyQt/Feature>
00036 #include <TelepathyQt/OptionalInterfaceFactory>
00037 #include <TelepathyQt/ReadinessHelper>
00038 #include <TelepathyQt/Types>
00039 #include <TelepathyQt/SharedPtr>
00040 
00041 #include <QString>
00042 #include <QStringList>
00043 #include <QVariantMap>
00044 
00045 namespace Tp
00046 {
00047 
00048 class PendingOperation;
00049 
00050 class TP_QT_EXPORT ChannelDispatchOperation : public StatefulDBusProxy,
00051                 public OptionalInterfaceFactory<ChannelDispatchOperation>
00052 {
00053     Q_OBJECT
00054     Q_DISABLE_COPY(ChannelDispatchOperation)
00055 
00056 public:
00057     static const Feature FeatureCore;
00058 
00059     static ChannelDispatchOperationPtr create(const QDBusConnection &bus,
00060             const QString &objectPath, const QVariantMap &immutableProperties,
00061             const QList<ChannelPtr> &initialChannels,
00062             const AccountFactoryConstPtr &accountFactory,
00063             const ConnectionFactoryConstPtr &connectionFactory,
00064             const ChannelFactoryConstPtr &channelFactory,
00065             const ContactFactoryConstPtr &contactFactory);
00066     virtual ~ChannelDispatchOperation();
00067 
00068     ConnectionPtr connection() const;
00069 
00070     AccountPtr account() const;
00071 
00072     QList<ChannelPtr> channels() const;
00073 
00074     QStringList possibleHandlers() const;
00075 
00076     PendingOperation *handleWith(const QString &handler);
00077 
00078     PendingOperation *claim();
00079     PendingOperation *claim(const AbstractClientHandlerPtr &handler);
00080 
00081 Q_SIGNALS:
00082     void channelLost(const Tp::ChannelPtr &channel, const QString &errorName,
00083             const QString &errorMessage);
00084 
00085 protected:
00086     ChannelDispatchOperation(const QDBusConnection &bus,
00087             const QString &objectPath, const QVariantMap &immutableProperties,
00088             const QList<ChannelPtr> &initialChannels,
00089             const AccountFactoryConstPtr &accountFactory,
00090             const ConnectionFactoryConstPtr &connectionFactory,
00091             const ChannelFactoryConstPtr &channelFactory,
00092             const ContactFactoryConstPtr &contactFactory);
00093 
00094     Client::ChannelDispatchOperationInterface *baseInterface() const;
00095 
00096 private Q_SLOTS:
00097     TP_QT_NO_EXPORT void onFinished();
00098     TP_QT_NO_EXPORT void gotMainProperties(QDBusPendingCallWatcher *watcher);
00099     TP_QT_NO_EXPORT void onChannelLost(const QDBusObjectPath &channelObjectPath,
00100         const QString &errorName, const QString &errorMessage);
00101     TP_QT_NO_EXPORT void onProxiesPrepared(Tp::PendingOperation *op);
00102 
00103 private:
00104     class PendingClaim;
00105     friend class PendingClaim;
00106 
00107     struct Private;
00108     friend struct Private;
00109     Private *mPriv;
00110 };
00111 
00112 } // Tp
00113 
00114 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_0x6c.html0000644000175200001440000001725112000060453023663 0ustar00collabora-develusers00000000000000 Class Members
   Home · All Classes · All Namespaces · Modules · Functions · Files
Here is a list of all class members with links to the classes they belong to:

- l -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01101.html0000644000175200001440000001641512000060453021617 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelTypeContactListInterface Member List
This is the complete list of members for Tp::Client::ChannelTypeContactListInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ChannelTypeContactListInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelTypeContactListInterface
ChannelTypeContactListInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelTypeContactListInterface
ChannelTypeContactListInterface(Tp::DBusProxy *proxy)Tp::Client::ChannelTypeContactListInterface
ChannelTypeContactListInterface(const Tp::Client::ChannelInterface &mainInterface)Tp::Client::ChannelTypeContactListInterface [explicit]
ChannelTypeContactListInterface(const Tp::Client::ChannelInterface &mainInterface, QObject *parent)Tp::Client::ChannelTypeContactListInterface
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ChannelTypeContactListInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ChannelTypeContactListInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ChannelTypeContactListInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00860.html0000644000175200001440000000567312000060453021636 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PtrFunctor1< R, Arg1 > Member List
This is the complete list of members for Tp::PtrFunctor1< R, Arg1 >, including all inherited members.
fnTp::PtrFunctor1< R, Arg1 >
FunctionType typedefTp::PtrFunctor1< R, Arg1 >
operator()(Arg1 a1) const Tp::PtrFunctor1< R, Arg1 > [inline]
PtrFunctor1(FunctionType fn)Tp::PtrFunctor1< R, Arg1 > [inline]
ResultType typedefTp::PtrFunctor1< R, Arg1 >


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/tabs.css0000644000175200001440000000210712000060453021562 0ustar00collabora-develusers00000000000000.tabs, .tabs2, .tabs3 { background-image: url('tab_b.png'); width: 100%; z-index: 101; font-size: 13px; } .tabs2 { font-size: 10px; } .tabs3 { font-size: 9px; } .tablist { margin: 0; padding: 0; display: table; } .tablist li { float: left; display: table-cell; background-image: url('tab_b.png'); line-height: 36px; list-style: none; } .tablist a { display: block; padding: 0 20px; font-weight: bold; background-image:url('tab_s.png'); background-repeat:no-repeat; background-position:right; color: #283A5D; text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); text-decoration: none; outline: none; } .tabs3 .tablist a { padding: 0 10px; } .tablist a:hover { background-image: url('tab_h.png'); background-repeat:repeat-x; color: #fff; text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); text-decoration: none; } .tablist li.current a { background-image: url('tab_a.png'); background-repeat:repeat-x; color: #fff; text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); } telepathy-qt-0.9.3/doc/html/a00186.html0000644000175200001440000012304412000060453021630 0ustar00collabora-develusers00000000000000 Tp::ConnectionLowlevel Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ConnectionLowlevel Class Reference

The ConnectionLowlevel class extends Connection with support to low-level features. More...

#include <TelepathyQt/ConnectionLowlevel>

Inherits Tp::RefCounted.

List of all members.

Public Member Functions


Detailed Description

The ConnectionLowlevel class extends Connection with support to low-level features.


Constructor & Destructor Documentation


Member Function Documentation

ConnectionPtr Tp::ConnectionLowlevel::connection ( ) const

Start an asynchronous request that the connection be connected.

When using a full-fledged Telepathy setup with an Account Manager service, the Account methods Account::setRequestedPresence() and Account::reconnect() must be used instead.

The returned PendingOperation will finish successfully when the connection has reached ConnectionStatusConnected and the requested features are all ready, or finish with an error if a fatal error occurs during that process.

Parameters:
requestedFeaturesThe features which should be enabled
Returns:
A PendingReady which will emit PendingReady::finished when the Connection has reached ConnectionStatusConnected, and initial setup for basic functionality, plus the given features, has succeeded or failed.

Start an asynchronous request that the connection be disconnected. The returned PendingOperation object will signal the success or failure of this request; under normal circumstances, it can be expected to succeed.

When using a full-fledged Telepathy setup with an Account Manager service, Account::setRequestedPresence() with Presence::offline() as an argument should generally be used instead.

Returns:
A PendingOperation which will emit PendingOperation::finished when the request has been made.

Return a dictionary of presence statuses valid for use in this connection.

The value may have changed arbitrarily during the time the Connection spends in status ConnectionStatusConnecting, again staying fixed for the entire time in ConnectionStatusConnected.

This method requires Connection::FeatureSimplePresence to be ready.

Returns:
The allowed statuses as a map from string identifiers to SimpleStatusSpec objects.

Return the maximum length for a presence status message.

The value may have changed arbitrarily during the time the Connection spends in status ConnectionStatusConnecting, again staying fixed for the entire time in ConnectionStatusConnected.

This method requires Connection::FeatureSimplePresence to be ready.

Returns:
The maximum length, or 0 if there is no limit.
PendingOperation * Tp::ConnectionLowlevel::setSelfPresence ( const QString &  status,
const QString &  statusMessage 
)

Set the self presence status.

This should generally only be called by an Account Manager. In typical usage, Account::setRequestedPresence() should be used instead.

status must be one of the allowed statuses returned by allowedPresenceStatuses().

Note that clients SHOULD set the status message for the local user to the empty string, unless the user has actually provided a specific message (i.e. one that conveys more information than the ConnectionStatus).

Parameters:
statusThe desired status.
statusMessageThe desired status message.
Returns:
A PendingOperation which will emit PendingOperation::finished when the call has finished.
See also:
allowedPresenceStatuses()
PendingChannel * Tp::ConnectionLowlevel::createChannel ( const QVariantMap &  request)

Same as createChannel(request, -1)

PendingChannel * Tp::ConnectionLowlevel::createChannel ( const QVariantMap &  request,
int  timeout 
)

Asynchronously creates a channel satisfying the given request.

In typical usage, only the Channel Dispatcher should call this. Ordinary applications should use the Account::createChannel() family of methods (which invoke the Channel Dispatcher's services).

The request MUST contain the following keys: org.freedesktop.Telepathy.Channel.ChannelType org.freedesktop.Telepathy.Channel.TargetHandleType

Upon completion, the reply to the request can be retrieved through the returned PendingChannel object. The object also provides access to the parameters with which the call was made and a signal to connect to get notification of the request finishing processing. See the documentation for that class for more info.

Parameters:
requestA dictionary containing the desirable properties.
timeoutThe D-Bus timeout in milliseconds used for the method call. If timeout is -1, a default implementation-defined value that is suitable for inter-process communications (generally, 25 seconds) will be used.
Returns:
A PendingChannel which will emit PendingChannel::finished when the channel has been created, or an error occurred.
See also:
PendingChannel, ensureChannel(), Account::createChannel(), Account::createAndHandleChannel(), Account::ensureChannel(), Account::ensureAndHandleChannel()
PendingChannel * Tp::ConnectionLowlevel::ensureChannel ( const QVariantMap &  request)

Same as ensureChannel(request, -1)

PendingChannel * Tp::ConnectionLowlevel::ensureChannel ( const QVariantMap &  request,
int  timeout 
)

Asynchronously ensures a channel exists satisfying the given request.

In typical usage, only the Channel Dispatcher should call this. Ordinary applications should use the Account::ensureChannel() family of methods (which invoke the Channel Dispatcher's services).

The request MUST contain the following keys: org.freedesktop.Telepathy.Channel.ChannelType org.freedesktop.Telepathy.Channel.TargetHandleType

Upon completion, the reply to the request can be retrieved through the returned PendingChannel object. The object also provides access to the parameters with which the call was made and a signal to connect to get notification of the request finishing processing. See the documentation for that class for more info.

Parameters:
requestA dictionary containing the desirable properties.
timeoutThe D-Bus timeout in milliseconds used for the method call. If timeout is -1, a default implementation-defined value that is suitable for inter-process communications (generally, 25 seconds) will be used.
Returns:
A PendingChannel which will emit PendingChannel::finished when the channel is ensured to exist, or an error occurred.
See also:
PendingChannel, createChannel(), Account::createChannel(), Account::createAndHandleChannel(), Account::ensureChannel(), Account::ensureAndHandleChannel()
PendingHandles * Tp::ConnectionLowlevel::requestHandles ( HandleType  handleType,
const QStringList &  names 
)

Request handles of the given type for the given entities (contacts, rooms, lists, etc.).

Typically one doesn't need to request and use handles directly; instead, string identifiers and/or Contact objects are used in most APIs. File a bug for APIs in which there is no alternative to using handles. In particular however using low-level DBus interfaces for which there is no corresponding high-level (or one is implementing that abstraction) functionality does and will always require using bare handles.

Upon completion, the reply to the request can be retrieved through the returned PendingHandles object. The object also provides access to the parameters with which the call was made and a signal to connect to to get notification of the request finishing processing. See the documentation for that class for more info.

The returned PendingHandles object should be freed using its QObject::deleteLater() method after it is no longer used. However, all PendingHandles objects resulting from requests to a particular Connection will be freed when the Connection itself is freed. Conversely, this means that the PendingHandles object should not be used after the Connection is destroyed.

Parameters:
handleTypeType for the handles to request, as specified in HandleType.
namesNames of the entities to request handles for.
Returns:
A PendingHandles which will emit PendingHandles::finished when the handles have been requested, or an error occurred.
See also:
PendingHandles

Request a reference to the given handles. Handles not explicitly requested (via requestHandles()) but eg. observed in a signal need to be referenced to guarantee them staying valid.

Typically one doesn't need to reference and use handles directly; instead, string identifiers and/or Contact objects are used in most APIs. File a bug for APIs in which there is no alternative to using handles. In particular however using low-level DBus interfaces for which there is no corresponding high-level (or one is implementing that abstraction) functionality does and will always require using bare handles.

Upon completion, the reply to the operation can be retrieved through the returned PendingHandles object. The object also provides access to the parameters with which the call was made and a signal to connect to to get notification of the request finishing processing. See the documentation for that class for more info.

The returned PendingHandles object should be freed using its QObject::deleteLater() method after it is no longer used. However, all PendingHandles objects resulting from requests to a particular Connection will be freed when the Connection itself is freed. Conversely, this means that the PendingHandles object should not be used after the Connection is destroyed.

See also:
PendingHandles
Parameters:
handleTypeType of the handles given, as specified in HandleType.
handlesHandles to request a reference to.
Returns:
A PendingHandles which will emit PendingHandles::finished when the handles have been referenced, or an error occurred.
PendingContactAttributes * Tp::ConnectionLowlevel::contactAttributes ( const UIntList handles,
const QStringList &  interfaces,
bool  reference = true 
)

Requests attributes for contacts. Optionally, the handles of the contacts will be referenced automatically. Essentially, this method wraps ConnectionInterfaceContactsInterface::GetContactAttributes(), integrating it with the rest of the handle-referencing machinery.

This is very low-level API the Contact/ContactManager API provides a higher level of abstraction for the same functionality.

Upon completion, the reply to the request can be retrieved through the returned PendingContactAttributes object. The object also provides access to the parameters with which the call was made and a signal to connect to to get notification of the request finishing processing. See the documentation for that class for more info.

If the remote object doesn't support the Contacts interface (as signified by the list returned by interfaces() not containing TP_QT_IFACE_CONNECTION_INTERFACE_CONTACTS), the returned PendingContactAttributes instance will fail instantly with the error TP_QT_ERROR_NOT_IMPLEMENTED.

Similarly, if the connection isn't both connected and ready (status() == ConnectionStatusConnected && isReady(Connection::FeatureCore)), the returned PendingContactAttributes instance will fail instantly with the error TP_QT_ERROR_NOT_AVAILABLE.

This method requires Connection::FeatureCore to be ready.

See also:
PendingContactAttributes
Parameters:
handlesA list of handles of type HandleTypeContact
interfacesD-Bus interfaces for which the client requires information
referenceWhether the handles should additionally be referenced.
Returns:
A PendingContactAttributes which will emit PendingContactAttributes::fininshed when the contact attributes have been retrieved, or an error occurred.
void Tp::ConnectionLowlevel::injectContactId ( uint  handle,
const QString &  contactId 
)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00100.html0000644000175200001440000001373612000060453021620 0ustar00collabora-develusers00000000000000 Tp::CapabilityChange Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::CapabilityChange Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

A struct (contact handle, channel type, old generic flags, new generic flags, old type-specific flags, new type-specific flags) representing a change to one of a contact's capabilities, as seen in the CapabilitiesChanged signal on the Capabilities interface.


Member Data Documentation


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01083.html0000644000175200001440000001753012000060453021627 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelInterfaceCallStateInterface Member List
This is the complete list of members for Tp::Client::ChannelInterfaceCallStateInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
CallStateChanged(uint contact, uint state)Tp::Client::ChannelInterfaceCallStateInterface [signal]
ChannelInterfaceCallStateInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfaceCallStateInterface
ChannelInterfaceCallStateInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfaceCallStateInterface
ChannelInterfaceCallStateInterface(Tp::DBusProxy *proxy)Tp::Client::ChannelInterfaceCallStateInterface
ChannelInterfaceCallStateInterface(const Tp::Client::ChannelInterface &mainInterface)Tp::Client::ChannelInterfaceCallStateInterface [explicit]
ChannelInterfaceCallStateInterface(const Tp::Client::ChannelInterface &mainInterface, QObject *parent)Tp::Client::ChannelInterfaceCallStateInterface
GetCallStates(int timeout=-1)Tp::Client::ChannelInterfaceCallStateInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ChannelInterfaceCallStateInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ChannelInterfaceCallStateInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ChannelInterfaceCallStateInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_func_0x74.html0000644000175200001440000002056312000060453024620 0ustar00collabora-develusers00000000000000 Class Members - Functions
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- t -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_func_0x63.html0000644000175200001440000016670212000060453024624 0ustar00collabora-develusers00000000000000 Class Members - Functions
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- c -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01043.html0000644000175200001440000000507712000060453021626 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactInfoMap Member List
This is the complete list of members for Tp::ContactInfoMap, including all inherited members.
ContactInfoMap()Tp::ContactInfoMap [inline]
ContactInfoMap(const QMap< uint, ContactInfoFieldList > &a)Tp::ContactInfoMap [inline]
operator=(const QMap< uint, ContactInfoFieldList > &a)Tp::ContactInfoMap [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01132.html0000644000175200001440000002074612000060453021625 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceContactCapabilitiesInterface Member List
This is the complete list of members for Tp::Client::ConnectionInterfaceContactCapabilitiesInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ConnectionInterfaceContactCapabilitiesInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceContactCapabilitiesInterface
ConnectionInterfaceContactCapabilitiesInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceContactCapabilitiesInterface
ConnectionInterfaceContactCapabilitiesInterface(Tp::DBusProxy *proxy)Tp::Client::ConnectionInterfaceContactCapabilitiesInterface
ConnectionInterfaceContactCapabilitiesInterface(const Tp::Client::ConnectionInterface &mainInterface)Tp::Client::ConnectionInterfaceContactCapabilitiesInterface [explicit]
ConnectionInterfaceContactCapabilitiesInterface(const Tp::Client::ConnectionInterface &mainInterface, QObject *parent)Tp::Client::ConnectionInterfaceContactCapabilitiesInterface
ContactCapabilitiesChanged(const Tp::ContactCapabilitiesMap &caps)Tp::Client::ConnectionInterfaceContactCapabilitiesInterface [signal]
GetContactCapabilities(const Tp::UIntList &handles, int timeout=-1)Tp::Client::ConnectionInterfaceContactCapabilitiesInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ConnectionInterfaceContactCapabilitiesInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ConnectionInterfaceContactCapabilitiesInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ConnectionInterfaceContactCapabilitiesInterface [inline, static]
UpdateCapabilities(const Tp::HandlerCapabilitiesList &handlerCapabilities, int timeout=-1)Tp::Client::ConnectionInterfaceContactCapabilitiesInterface [inline, slot]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00894.html0000644000175200001440000001212612000060453021634 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingAccount Member List
This is the complete list of members for Tp::PendingAccount, including all inherited members.
account() const Tp::PendingAccount
errorMessage() const Tp::PendingOperation
errorName() const Tp::PendingOperation
finished(Tp::PendingOperation *operation)Tp::PendingOperation [signal]
isError() const Tp::PendingOperation
isFinished() const Tp::PendingOperation
isValid() const Tp::PendingOperation
manager() const Tp::PendingAccount
object() const Tp::PendingOperation [protected]
PendingOperation(const SharedPtr< RefCounted > &object)Tp::PendingOperation [protected]
setFinished()Tp::PendingOperation [protected, slot]
setFinishedWithError(const QString &name, const QString &message)Tp::PendingOperation [protected, slot]
setFinishedWithError(const QDBusError &error)Tp::PendingOperation [protected, slot]
~PendingAccount()Tp::PendingAccount
~PendingOperation()Tp::PendingOperation [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00494_source.html0000644000175200001440000011321512000060453023211 0ustar00collabora-develusers00000000000000 cli-call-stream.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-call-stream.h
00001 /*
00002  * This file contains D-Bus client proxy classes generated by qt-client-gen.py.
00003  *
00004  * This file can be distributed under the same terms as the specification from
00005  * which it was generated.
00006  */
00007 
00008 #ifndef IN_TP_QT_HEADER
00009 #error IN_TP_QT_HEADER
00010 #endif
00011 
00012 #include <TelepathyQt/Types>
00013 
00014 #include <QtGlobal>
00015 
00016 #include <QString>
00017 #include <QObject>
00018 #include <QVariant>
00019 
00020 #include <QDBusPendingReply>
00021 
00022 #include <TelepathyQt/AbstractInterface>
00023 #include <TelepathyQt/DBusProxy>
00024 #include <TelepathyQt/Global>
00025 
00026 namespace Tp
00027 {
00028 class PendingVariant;
00029 class PendingOperation;
00030 }
00031 
00032 namespace Tp
00033 {
00034 namespace Client
00035 {
00036 
00044 class TP_QT_EXPORT CallStreamInterface : public Tp::AbstractInterface
00045 {
00046     Q_OBJECT
00047 
00048 public:
00055     static inline QLatin1String staticInterfaceName()
00056     {
00057         return QLatin1String("org.freedesktop.Telepathy.Call1.Stream");
00058     }
00059 
00067     CallStreamInterface(
00068         const QString& busName,
00069         const QString& objectPath,
00070         QObject* parent = 0
00071     );
00072 
00081     CallStreamInterface(
00082         const QDBusConnection& connection,
00083         const QString& busName,
00084         const QString& objectPath,
00085         QObject* parent = 0
00086     );
00087 
00094     CallStreamInterface(Tp::DBusProxy *proxy);
00095 
00109     inline Tp::PendingVariant *requestPropertyInterfaces() const
00110     {
00111         return internalRequestProperty(QLatin1String("Interfaces"));
00112     }
00113 
00142     inline Tp::PendingVariant *requestPropertyRemoteMembers() const
00143     {
00144         return internalRequestProperty(QLatin1String("RemoteMembers"));
00145     }
00146 
00158     inline Tp::PendingVariant *requestPropertyRemoteMemberIdentifiers() const
00159     {
00160         return internalRequestProperty(QLatin1String("RemoteMemberIdentifiers"));
00161     }
00162 
00200     inline Tp::PendingVariant *requestPropertyLocalSendingState() const
00201     {
00202         return internalRequestProperty(QLatin1String("LocalSendingState"));
00203     }
00204 
00220     inline Tp::PendingVariant *requestPropertyCanRequestReceiving() const
00221     {
00222         return internalRequestProperty(QLatin1String("CanRequestReceiving"));
00223     }
00224 
00231     Tp::PendingVariantMap *requestAllProperties() const
00232     {
00233         return internalRequestAllProperties();
00234     }
00235 
00236 public Q_SLOTS:
00262     inline QDBusPendingReply<> SetSending(bool send, int timeout = -1)
00263     {
00264         if (!invalidationReason().isEmpty()) {
00265             return QDBusPendingReply<>(QDBusMessage::createError(
00266                 invalidationReason(),
00267                 invalidationMessage()
00268             ));
00269         }
00270 
00271         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00272                 this->staticInterfaceName(), QLatin1String("SetSending"));
00273         callMessage << QVariant::fromValue(send);
00274         return this->connection().asyncCall(callMessage, timeout);
00275     }
00276 
00302     inline QDBusPendingReply<> RequestReceiving(uint contact, bool receive, int timeout = -1)
00303     {
00304         if (!invalidationReason().isEmpty()) {
00305             return QDBusPendingReply<>(QDBusMessage::createError(
00306                 invalidationReason(),
00307                 invalidationMessage()
00308             ));
00309         }
00310 
00311         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00312                 this->staticInterfaceName(), QLatin1String("RequestReceiving"));
00313         callMessage << QVariant::fromValue(contact) << QVariant::fromValue(receive);
00314         return this->connection().asyncCall(callMessage, timeout);
00315     }
00316 
00317 Q_SIGNALS:
00347     void RemoteMembersChanged(const Tp::ContactSendingStateMap& updates, const Tp::HandleIdentifierMap& identifiers, const Tp::UIntList& removed, const Tp::CallStateReason& reason);
00348 
00364     void LocalSendingStateChanged(uint state, const Tp::CallStateReason& reason);
00365 
00366 protected:
00367     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
00368 };
00369 
00377 class TP_QT_EXPORT CallStreamInterfaceMediaInterface : public Tp::AbstractInterface
00378 {
00379     Q_OBJECT
00380 
00381 public:
00388     static inline QLatin1String staticInterfaceName()
00389     {
00390         return QLatin1String("org.freedesktop.Telepathy.Call1.Stream.Interface.Media");
00391     }
00392 
00400     CallStreamInterfaceMediaInterface(
00401         const QString& busName,
00402         const QString& objectPath,
00403         QObject* parent = 0
00404     );
00405 
00414     CallStreamInterfaceMediaInterface(
00415         const QDBusConnection& connection,
00416         const QString& busName,
00417         const QString& objectPath,
00418         QObject* parent = 0
00419     );
00420 
00427     CallStreamInterfaceMediaInterface(Tp::DBusProxy *proxy);
00428 
00436     explicit CallStreamInterfaceMediaInterface(const Tp::Client::CallStreamInterface& mainInterface);
00437 
00445     CallStreamInterfaceMediaInterface(const Tp::Client::CallStreamInterface& mainInterface, QObject* parent);
00446 
00462     inline Tp::PendingVariant *requestPropertySendingState() const
00463     {
00464         return internalRequestProperty(QLatin1String("SendingState"));
00465     }
00466 
00480     inline Tp::PendingVariant *requestPropertyReceivingState() const
00481     {
00482         return internalRequestProperty(QLatin1String("ReceivingState"));
00483     }
00484 
00494     inline Tp::PendingVariant *requestPropertyTransport() const
00495     {
00496         return internalRequestProperty(QLatin1String("Transport"));
00497     }
00498 
00508     inline Tp::PendingVariant *requestPropertyLocalCandidates() const
00509     {
00510         return internalRequestProperty(QLatin1String("LocalCandidates"));
00511     }
00512 
00526     inline Tp::PendingVariant *requestPropertyLocalCredentials() const
00527     {
00528         return internalRequestProperty(QLatin1String("LocalCredentials"));
00529     }
00530 
00552     inline Tp::PendingVariant *requestPropertySTUNServers() const
00553     {
00554         return internalRequestProperty(QLatin1String("STUNServers"));
00555     }
00556 
00654     inline Tp::PendingVariant *requestPropertyRelayInfo() const
00655     {
00656         return internalRequestProperty(QLatin1String("RelayInfo"));
00657     }
00658 
00678     inline Tp::PendingVariant *requestPropertyHasServerInfo() const
00679     {
00680         return internalRequestProperty(QLatin1String("HasServerInfo"));
00681     }
00682 
00693     inline Tp::PendingVariant *requestPropertyEndpoints() const
00694     {
00695         return internalRequestProperty(QLatin1String("Endpoints"));
00696     }
00697 
00708     inline Tp::PendingVariant *requestPropertyICERestartPending() const
00709     {
00710         return internalRequestProperty(QLatin1String("ICERestartPending"));
00711     }
00712 
00719     Tp::PendingVariantMap *requestAllProperties() const
00720     {
00721         return internalRequestAllProperties();
00722     }
00723 
00724 public Q_SLOTS:
00745     inline QDBusPendingReply<> CompleteSendingStateChange(uint state, int timeout = -1)
00746     {
00747         if (!invalidationReason().isEmpty()) {
00748             return QDBusPendingReply<>(QDBusMessage::createError(
00749                 invalidationReason(),
00750                 invalidationMessage()
00751             ));
00752         }
00753 
00754         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00755                 this->staticInterfaceName(), QLatin1String("CompleteSendingStateChange"));
00756         callMessage << QVariant::fromValue(state);
00757         return this->connection().asyncCall(callMessage, timeout);
00758     }
00759 
00773     inline QDBusPendingReply<> ReportSendingFailure(uint reason, const QString& error, const QString& message, int timeout = -1)
00774     {
00775         if (!invalidationReason().isEmpty()) {
00776             return QDBusPendingReply<>(QDBusMessage::createError(
00777                 invalidationReason(),
00778                 invalidationMessage()
00779             ));
00780         }
00781 
00782         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00783                 this->staticInterfaceName(), QLatin1String("ReportSendingFailure"));
00784         callMessage << QVariant::fromValue(reason) << QVariant::fromValue(error) << QVariant::fromValue(message);
00785         return this->connection().asyncCall(callMessage, timeout);
00786     }
00787 
00808     inline QDBusPendingReply<> CompleteReceivingStateChange(uint state, int timeout = -1)
00809     {
00810         if (!invalidationReason().isEmpty()) {
00811             return QDBusPendingReply<>(QDBusMessage::createError(
00812                 invalidationReason(),
00813                 invalidationMessage()
00814             ));
00815         }
00816 
00817         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00818                 this->staticInterfaceName(), QLatin1String("CompleteReceivingStateChange"));
00819         callMessage << QVariant::fromValue(state);
00820         return this->connection().asyncCall(callMessage, timeout);
00821     }
00822 
00836     inline QDBusPendingReply<> ReportReceivingFailure(uint reason, const QString& error, const QString& message, int timeout = -1)
00837     {
00838         if (!invalidationReason().isEmpty()) {
00839             return QDBusPendingReply<>(QDBusMessage::createError(
00840                 invalidationReason(),
00841                 invalidationMessage()
00842             ));
00843         }
00844 
00845         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00846                 this->staticInterfaceName(), QLatin1String("ReportReceivingFailure"));
00847         callMessage << QVariant::fromValue(reason) << QVariant::fromValue(error) << QVariant::fromValue(message);
00848         return this->connection().asyncCall(callMessage, timeout);
00849     }
00850 
00872     inline QDBusPendingReply<> SetCredentials(const QString& username, const QString& password, int timeout = -1)
00873     {
00874         if (!invalidationReason().isEmpty()) {
00875             return QDBusPendingReply<>(QDBusMessage::createError(
00876                 invalidationReason(),
00877                 invalidationMessage()
00878             ));
00879         }
00880 
00881         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00882                 this->staticInterfaceName(), QLatin1String("SetCredentials"));
00883         callMessage << QVariant::fromValue(username) << QVariant::fromValue(password);
00884         return this->connection().asyncCall(callMessage, timeout);
00885     }
00886 
00903     inline QDBusPendingReply<> AddCandidates(const Tp::CandidateList& candidates, int timeout = -1)
00904     {
00905         if (!invalidationReason().isEmpty()) {
00906             return QDBusPendingReply<>(QDBusMessage::createError(
00907                 invalidationReason(),
00908                 invalidationMessage()
00909             ));
00910         }
00911 
00912         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00913                 this->staticInterfaceName(), QLatin1String("AddCandidates"));
00914         callMessage << QVariant::fromValue(candidates);
00915         return this->connection().asyncCall(callMessage, timeout);
00916     }
00917 
00931     inline QDBusPendingReply<> FinishInitialCandidates(int timeout = -1)
00932     {
00933         if (!invalidationReason().isEmpty()) {
00934             return QDBusPendingReply<>(QDBusMessage::createError(
00935                 invalidationReason(),
00936                 invalidationMessage()
00937             ));
00938         }
00939 
00940         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00941                 this->staticInterfaceName(), QLatin1String("FinishInitialCandidates"));
00942         return this->connection().asyncCall(callMessage, timeout);
00943     }
00944 
00960     inline QDBusPendingReply<> Fail(const Tp::CallStateReason& reason, int timeout = -1)
00961     {
00962         if (!invalidationReason().isEmpty()) {
00963             return QDBusPendingReply<>(QDBusMessage::createError(
00964                 invalidationReason(),
00965                 invalidationMessage()
00966             ));
00967         }
00968 
00969         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00970                 this->staticInterfaceName(), QLatin1String("Fail"));
00971         callMessage << QVariant::fromValue(reason);
00972         return this->connection().asyncCall(callMessage, timeout);
00973     }
00974 
00975 Q_SIGNALS:
00988     void SendingStateChanged(uint state);
00989 
00999     void ReceivingStateChanged(uint state);
01000 
01010     void LocalCandidatesAdded(const Tp::CandidateList& candidates);
01011 
01019     void LocalCredentialsChanged(const QString& username, const QString& password);
01020 
01026     void RelayInfoChanged(const Tp::StringVariantMapList& relayInfo);
01027 
01033     void STUNServersChanged(const Tp::SocketAddressIPList& servers);
01034 
01045     void ServerInfoRetrieved();
01046 
01060     void EndpointsChanged(const Tp::ObjectPathList& endpointsAdded, const Tp::ObjectPathList& endpointsRemoved);
01061 
01069     void ICERestartRequested();
01070 
01071 protected:
01072     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
01073 };
01074 }
01075 }
01076 Q_DECLARE_METATYPE(Tp::Client::CallStreamInterface*)
01077 Q_DECLARE_METATYPE(Tp::Client::CallStreamInterfaceMediaInterface*)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_vars_0x64.html0000644000175200001440000000440212000060453024631 0ustar00collabora-develusers00000000000000 Class Members - Variables
   Home · All Classes · All Namespaces · Modules · Functions · Files


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00936.html0000644000175200001440000001215412000060453021632 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingFailure Member List
This is the complete list of members for Tp::PendingFailure, including all inherited members.
errorMessage() const Tp::PendingOperation
errorName() const Tp::PendingOperation
finished(Tp::PendingOperation *operation)Tp::PendingOperation [signal]
isError() const Tp::PendingOperation
isFinished() const Tp::PendingOperation
isValid() const Tp::PendingOperation
object() const Tp::PendingOperation [protected]
PendingFailure(const QString &name, const QString &message, const SharedPtr< RefCounted > &object)Tp::PendingFailure [inline]
PendingFailure(const QDBusError &error, const SharedPtr< RefCounted > &object)Tp::PendingFailure [inline]
PendingOperation(const SharedPtr< RefCounted > &object)Tp::PendingOperation [protected]
setFinished()Tp::PendingOperation [protected, slot]
setFinishedWithError(const QString &name, const QString &message)Tp::PendingOperation [protected, slot]
setFinishedWithError(const QDBusError &error)Tp::PendingOperation [protected, slot]
~PendingOperation()Tp::PendingOperation [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00996.html0000644000175200001440000000510612000060453021637 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::LocalPendingInfo Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00173.html0000644000175200001440000007003612000060453021626 0ustar00collabora-develusers00000000000000 Tp::Client::ConnectionInterfaceContactBlockingInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceContactBlockingInterface Class Reference

#include <TelepathyQt/Connection>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Connection.Interface.ContactBlocking".


Constructor & Destructor Documentation

Tp::Client::ConnectionInterfaceContactBlockingInterface::ConnectionInterfaceContactBlockingInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceContactBlockingInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ConnectionInterfaceContactBlockingInterface::ConnectionInterfaceContactBlockingInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceContactBlockingInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ConnectionInterfaceContactBlockingInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ConnectionInterfaceContactBlockingInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ConnectionInterfaceContactBlockingInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Connection.Interface.ContactBlocking", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property ContactBlockingCapabilities of type uint.

Additional capabilities for contact blocking; currently, this is limited to whether contacts may be reported as abusive.

Note that there is no capability for supporting blocking itself: the presence of this interface on a ConnectionInterface indicates that blocking contacts is supported.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::ConnectionInterfaceContactBlockingInterface::BlockContacts ( const Tp::UIntList contacts,
bool  reportAbusive,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method BlockContacts on the remote object.

Direct the server to block some contacts. The precise effect is protocol-dependent, but SHOULD include ignoring all current and subsequent communications from the given contacts, avoiding sending presence to them in future, and if they were already receiving the local user's presence, behaving as if the local user went offline.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
contactsSome contacts to block. If some of the contacts in this list are already blocked, the connection manager MUST act as if they were not specified in this list.
reportAbusive

In addition to blocking, report these contacts as abusive to the server administrators.

Clients can determine whether this capability is available by checking the ContactBlockingCapabilities property. If this argument is set to True by a client despite ContactBlockingCapabilities not containing the Can_Report_Abusive flag, the connection manager SHOULD act as if it were False and simply block the supplied contacts.

A correct user interface shouldn't get this far without knowing that reporting abusive contacts is not supported. If it does, then the user has expressed their intention to block these contacts. Returning an error would leave the UI with three options:

  • Ignore the error, leaving the contacts not actually blocked;
  • Display an error to the user;
  • Call this method again, passing False for this argument.

None of these seem preferable to the CM just ignoring this flag if it doesn't support it: that way, the contacts will be blocked, as the user requested, and UIs have fewer ways to mess up entirely.

timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ConnectionInterfaceContactBlockingInterface::UnblockContacts ( const Tp::UIntList contacts,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method UnblockContacts on the remote object.

Direct the server to unblock some contacts.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
contactsSome contacts to unblock. If some of the contacts in this list are not currently blocked, the connection manager MUST act as if they were not specified in this list.
timeoutThe timeout in milliseconds.

Begins a call to the D-Bus method RequestBlockedContacts on the remote object.

List the contacts that are blocked.

Clients SHOULD allow a relatively long timeout for calls to this method, since on some protocols contact blocking is part of the contact list, which can take a significant time to retrieve.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
Returns:

The blocked contacts’ handles, together with their identifiers.

Represents the signal BlockedContactsChanged on the remote object.

Emitted when the list of blocked contacts is first retrieved (before returning from any pending calls to RequestBlockedContacts() ), and whenever the list of blocked contacts subsequently changes.

Parameters:
blockedContactsContacts added to the result of RequestBlockedContacts.
unblockedContactsContacts removed from the result of RequestBlockedContacts.
void Tp::Client::ConnectionInterfaceContactBlockingInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00079.html0000644000175200001440000004542512000060453021637 0ustar00collabora-develusers00000000000000 Tp::CallContent Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::CallContent Class Reference

The CallContent class provides an object representing a Telepathy Call.Content. More...

#include <TelepathyQt/CallContent>

Inherits Tp::StatefulDBusProxy, and Tp::OptionalInterfaceFactory< CallContent >.

List of all members.

Signals

Public Member Functions


Detailed Description

The CallContent class provides an object representing a Telepathy Call.Content.

Instances of this class cannot be constructed directly; the only way to get one is via CallChannel.

See Asynchronous Object Model


Constructor & Destructor Documentation

Class destructor.


Member Function Documentation

CallChannelPtr Tp::CallContent::channel ( ) const

Return the channel owning this media content.

Returns:
The channel owning this media content.
QString Tp::CallContent::name ( ) const

Return the name of this media content.

Returns:
The name of this media content.

Return the type of this media content.

Returns:
The type of this media content.

Return the disposition of this media content.

Returns:
The disposition of this media content.

Return the media streams of this media content.

Returns:
A list of media streams of this media content.
See also:
streamAdded(), streamRemoved()

Removes this media content from the call.

Returns:
A PendingOperation which will emit PendingOperation::finished when the call has finished.

Return whether sending DTMF events is supported on this content. DTMF is only supported on audio contents that implement the TP_QT_IFACE_CALL_CONTENT_INTERFACE_DTMF interface.

Returns:
true if DTMF is supported, or false otherwise.

Start sending a DTMF tone on this media stream.

Where possible, the tone will continue until stopDTMFTone() is called. On certain protocols, it may only be possible to send events with a predetermined length. In this case, the implementation may emit a fixed-length tone, and the stopDTMFTone() method call should return TP_QT_ERROR_NOT_AVAILABLE.

If this content does not support the TP_QT_IFACE_CALL_CONTENT_INTERFACE_DTMF interface, the resulting PendingOperation will fail with error code TP_QT_ERROR_NOT_IMPLEMENTED.

Parameters:
eventA numeric event code from the DTMFEvent enum.
Returns:
A PendingOperation which will emit PendingOperation::finished when the request finishes.
See also:
stopDTMFTone(), supportsDTMF()

Stop sending any DTMF tone which has been started using the startDTMFTone() method.

If there is no current tone, the resulting PendingOperation will finish successfully.

If this content does not support the TP_QT_IFACE_CALL_CONTENT_INTERFACE_DTMF interface, the resulting PendingOperation will fail with error code TP_QT_ERROR_NOT_IMPLEMENTED.

Returns:
A PendingOperation which will emit PendingOperation::finished when the request finishes.
See also:
startDTMFTone(), supportsDTMF()
void Tp::CallContent::streamAdded ( const Tp::CallStreamPtr &  stream) [signal]

This signal is emitted when a new media stream is added to this media content.

Parameters:
streamThe media stream that was added.
See also:
streams()
void Tp::CallContent::streamRemoved ( const Tp::CallStreamPtr &  stream,
const Tp::CallStateReason reason 
) [signal]

This signal is emitted when a new media stream is removed from this media content.

Parameters:
streamThe media stream that was removed.
reasonThe reason for this removal.
See also:
streams()


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_0x78.html0000644000175200001440000000326312000060453023607 0ustar00collabora-develusers00000000000000 Class Members
   Home · All Classes · All Namespaces · Modules · Functions · Files
Here is a list of all class members with links to the classes they belong to:

- x -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01130.html0000644000175200001440000002042712000060453021617 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceClientTypesInterface Member List
This is the complete list of members for Tp::Client::ConnectionInterfaceClientTypesInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ClientTypesUpdated(uint contact, const QStringList &clientTypes)Tp::Client::ConnectionInterfaceClientTypesInterface [signal]
ConnectionInterfaceClientTypesInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceClientTypesInterface
ConnectionInterfaceClientTypesInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceClientTypesInterface
ConnectionInterfaceClientTypesInterface(Tp::DBusProxy *proxy)Tp::Client::ConnectionInterfaceClientTypesInterface
ConnectionInterfaceClientTypesInterface(const Tp::Client::ConnectionInterface &mainInterface)Tp::Client::ConnectionInterfaceClientTypesInterface [explicit]
ConnectionInterfaceClientTypesInterface(const Tp::Client::ConnectionInterface &mainInterface, QObject *parent)Tp::Client::ConnectionInterfaceClientTypesInterface
GetClientTypes(const Tp::UIntList &contacts, int timeout=-1)Tp::Client::ConnectionInterfaceClientTypesInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ConnectionInterfaceClientTypesInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ConnectionInterfaceClientTypesInterface [inline]
RequestClientTypes(uint contact, int timeout=-1)Tp::Client::ConnectionInterfaceClientTypesInterface [inline, slot]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ConnectionInterfaceClientTypesInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00934.html0000644000175200001440000001237012000060453021630 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::SimpleObserver Member List
This is the complete list of members for Tp::SimpleObserver, including all inherited members.
account() const Tp::SimpleObserver
channelFilter() const Tp::SimpleObserver
channelInvalidated(const Tp::ChannelPtr &channel, const QString &errorName, const QString &errorMessage)Tp::SimpleObserver [signal]
channels() const Tp::SimpleObserver
contactIdentifier() const Tp::SimpleObserver
create(const AccountPtr &account, const ChannelClassSpecList &channelFilter, const QList< ChannelClassFeatures > &extraChannelFeatures=QList< ChannelClassFeatures >())Tp::SimpleObserver [static]
create(const AccountPtr &account, const ChannelClassSpecList &channelFilter, const ContactPtr &contact, const QList< ChannelClassFeatures > &extraChannelFeatures=QList< ChannelClassFeatures >())Tp::SimpleObserver [static]
create(const AccountPtr &account, const ChannelClassSpecList &channelFilter, const QString &contactIdentifier, const QList< ChannelClassFeatures > &extraChannelFeatures=QList< ChannelClassFeatures >())Tp::SimpleObserver [static]
extraChannelFeatures() const Tp::SimpleObserver
newChannels(const QList< Tp::ChannelPtr > &channels)Tp::SimpleObserver [signal]
RefCounted()Tp::RefCounted [inline]
~RefCounted()Tp::RefCounted [inline, virtual]
~SimpleObserver()Tp::SimpleObserver [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00388.html0000644000175200001440000001222712000060453021634 0ustar00collabora-develusers00000000000000 Tp::SingleContactAttributesMap Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::SingleContactAttributesMap Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<QString, QDBusVariant>, but needed to have a discrete type in the Qt type system.

Some of the attributes of a single contact.


Constructor & Destructor Documentation

Tp::SingleContactAttributesMap::SingleContactAttributesMap ( const QMap< QString, QDBusVariant > &  a) [inline]

Member Function Documentation

SingleContactAttributesMap& Tp::SingleContactAttributesMap::operator= ( const QMap< QString, QDBusVariant > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00129.html0000644000175200001440000012023212000060453021621 0ustar00collabora-develusers00000000000000 Tp::Client::ChannelInterfaceMessagesInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelInterfaceMessagesInterface Class Reference

#include <TelepathyQt/Channel>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Channel.Interface.Messages".


Constructor & Destructor Documentation

Tp::Client::ChannelInterfaceMessagesInterface::ChannelInterfaceMessagesInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfaceMessagesInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ChannelInterfaceMessagesInterface::ChannelInterfaceMessagesInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfaceMessagesInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ChannelInterfaceMessagesInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ChannelInterfaceMessagesInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ChannelInterfaceMessagesInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

static QLatin1String Tp::Client::ChannelInterfaceMessagesInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Channel.Interface.Messages", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property SupportedContentTypes of type QStringList.

A list of MIME types supported by this channel, with more preferred MIME types appearing earlier in the list. The list MAY include "*/*" to indicate that attachments with arbitrary MIME types can be sent. This list MUST NOT be empty, since all Messages implementations MUST accept messages containing a single "text/plain" part.

Items in this list MUST be normalized to lower-case.

Some examples of how this property interacts with the MessagePartSupportFlags :

A simple IM implementation: only plain text messages are allowed
SupportedContentTypes = ['text/plain'], MessagePartSupportFlags = 0
Formatted text with a plain text alternative is allowed (see the HTML interface draft)
SupportedContentTypes = ['text/html', 'text/plain'], MessagePartSupportFlags = 0
JPEG or PNG images may be sent, but without any attached text
SupportedContentTypes = ['text/plain', 'image/jpeg', 'image/png'], MessagePartSupportFlags = 0
Unformatted text to which an optional JPEG or PNG image may be attached
SupportedContentTypes = ['text/plain', 'image/jpeg', 'image/png'], MessagePartSupportFlags = One_Attachment
Formatted text to which arbitrarily many images may be attached
SupportedContentTypes = ['text/html', 'text/plain', 'image/jpeg', 'image/png', 'image/x-ms-bmp'], MessagePartSupportFlags = One_Attachment | Multiple_Attachments
A full SIP implementation: arbitrary MIME messages are allowed
SupportedContentTypes = ['*/*'], MessagePartSupportFlags = One_Attachment | Multiple_Attachments
Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property MessageTypes of type Tp::UIntList.

A list of message types which may be sent on this channel.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property MessagePartSupportFlags of type uint.

Flags indicating the level of support for message parts on this channel.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property PendingMessages of type Tp::MessagePartListList.

A list of incoming messages that have neither been acknowledged nor rejected. This list is a more detailed version of the one returned by ChannelTypeTextInterface::ListPendingMessages() , and contains the same messages, uniquely identified by the same pending message IDs. Its items can be removed using ChannelTypeTextInterface::AcknowledgePendingMessages() .

Change notification is via MessageReceived() and PendingMessagesRemoved() .

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property DeliveryReportingSupport of type uint.

A bitfield indicating features supported by this channel.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply<QString> Tp::Client::ChannelInterfaceMessagesInterface::SendMessage ( const Tp::MessagePartList message,
uint  flags,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method SendMessage on the remote object.

Submit a message to the server for sending. If this method returns successfully, the message has been submitted to the server and the MessageSent() signal is emitted. A corresponding ChannelTypeTextInterface::Sent() signal on the Text interface MUST also be emitted.

This method MUST return before the MessageSent signal is emitted.

This means that the process sending the message is the first to see the Protocol_Message_Token, and can relate the message to the corresponding MessageSent() signal by comparing message tokens (if supported by the protocol).

If this method fails, message submission to the server has failed and no signal on this interface (or the Text interface) is emitted.

If this method succeeds, message submission to the server has succeeded, but the message has not necessarily reached its intended recipient. If a delivery failure is detected later, this is signalled by receiving a message whose message-type header maps to Delivery_Report. Similarly, if delivery is detected to have been successful (which is not possible in all protocols), a successful delivery report will be signalled.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
messageThe message content, including any attachments or alternatives. This MUST NOT include the following headers, or any others that do not make sense for a client to specify: message-sender, message-sender-id, message-sent, message-received, pending-message-id.
flagsFlags affecting how the message is sent. The channel MAY ignore some or all flags, depending on DeliveryReportingSupport; the flags that were handled by the CM are provided in MessageSent.
timeoutThe timeout in milliseconds.
Returns:

An opaque token used to match any incoming delivery or failure reports against this message, or an empty string if the message is not readily identifiable.

QDBusPendingReply<Tp::MessagePartContentMap> Tp::Client::ChannelInterfaceMessagesInterface::GetPendingMessageContent ( uint  messageID,
const Tp::UIntList parts,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method GetPendingMessageContent on the remote object.

Retrieve the content of one or more parts of a pending message. Note that this function may take a considerable amount of time to return if the part's 'needs-retrieval' flag is true; consider extending the default D-Bus method call timeout. Additional API is likely to be added in future, to stream large message parts.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
messageIDThe ID of a pending message
partsThe desired entries in the array of message parts, identified by their position. The "headers" part (which is not a valid argument to this method) is considered to be part 0, so the valid part numbers start at 1 (for the second Message_Part).
timeoutThe timeout in milliseconds.
Returns:

The content of the requested parts. The keys in this mapping are positions in the array of message parts; the values are either of type 's' or 'ay' (UTF-8 text string, or byte array), following the same rules as for the value of the 'content' key in the Message_Part mappings.

If the one of the requested part numbers was greater than zero but referred to a part that had no content (i.e. it had no 'content-type' key or no 'content' key), it is simply omitted from this mapping; this is not considered to be an error condition.

void Tp::Client::ChannelInterfaceMessagesInterface::MessageSent ( const Tp::MessagePartList content,
uint  flags,
const QString &  messageToken 
) [signal]

Represents the signal MessageSent on the remote object.

Signals that a message has been submitted for sending. This MUST be emitted exactly once per emission of the ChannelTypeTextInterface::Sent() signal on the Text interface, for backwards-compatibility; clients SHOULD ignore the latter if this interface is present, as mentioned in the introduction.

This SHOULD be emitted as soon as the CM determines it's theoretically possible to send the message (e.g. the parameters are supported and correct).

This signal allows a process that is not the caller of SendMessage to log sent messages.

Parameters:
content

The message content (see Message_Part for full details). If the message that was passed to SendMessage() has a formatted text part that the connection manager recognises, but no text/plain alternative, the CM MUST use the formatted text part to generate a text/plain alternative which is also included in this signal argument.

The connection manager SHOULD include the message-sender, message-sender-id and message-sent headers in the representation of the message that is signalled here. If the channel has channel-specific handles, the message-sender and message-sender-id SHOULD reflect the sender that other contacts will see.

If the connection manager can predict that the message will be altered during transmission, this argument SHOULD reflect what other contacts will receive, rather than being a copy of the argument to SendMessage (if the message is truncated, formatting or alternatives are dropped, etc., then the edited version SHOULD appear in this signal).

flagsFlags affecting how the message was sent. The flags might be a subset of those passed to SendMessage if the caller requested unsupported flags.
messageTokenAn opaque token used to match any incoming delivery or failure reports against this message, or an empty string if the message is not readily identifiable.

Represents the signal PendingMessagesRemoved on the remote object.

The messages with the given IDs have been removed from the PendingMessages list. Clients SHOULD NOT attempt to acknowledge those messages. This completes change notification for the PendingMessages property (previously, there was change notification when pending messages were added, but not when they were removed).

Parameters:
messageIDsThe messages that have been removed from the pending message list.

Represents the signal MessageReceived on the remote object.

Signals that a message has been received and added to the pending messages queue. This MUST be emitted exactly once per emission of the Received signal on the Text interface, for backwards-compatibility; clients SHOULD ignore the latter in favour of this signal if this interface is present, as mentioned in the introduction.

Parameters:
message

The message content, including any attachments or alternatives. If the incoming message contains formatted text without a plain text alternative, the connection manager MUST generate a text/plain alternative from the formatted text, and include it in this message (both here, and in the PendingMessages property).

void Tp::Client::ChannelInterfaceMessagesInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00407.html0000644000175200001440000002055112000060453021623 0ustar00collabora-develusers00000000000000 Tp::StreamTubeClient::TcpSourceAddressGenerator Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::StreamTubeClient::TcpSourceAddressGenerator Class Reference

The StreamTubeClient::TcpSourceAddressGenerator abstract interface allows using socket source address/port based access control for connecting to tubes accepted as TCP sockets. More...

#include <TelepathyQt/StreamTubeClient>

List of all members.

Public Member Functions

  • virtual QPair< QHostAddress,
    quint16 > nextSourceAddress (const AccountPtr &account, const IncomingStreamTubeChannelPtr &tube)=0

Protected Member Functions


Detailed Description

The StreamTubeClient::TcpSourceAddressGenerator abstract interface allows using socket source address/port based access control for connecting to tubes accepted as TCP sockets.

By default, every application on the local computer is allowed to connect to the socket created by the protocol backend as the local endpoint of the tube. This is not always desirable, as that includes even other users.

Note that since every TCP connection must have an unique source address, only one simultaneous connection can be made through each tube for which this type of access control has been used.


Constructor & Destructor Documentation

Class destructor. Protected, because StreamTubeClient never deletes a TcpSourceAddressGenerator passed to it.


Member Function Documentation

QPair< QHostAddress, quint16 > Tp::StreamTubeClient::TcpSourceAddressGenerator::nextSourceAddress ( const AccountPtr &  account,
const IncomingStreamTubeChannelPtr &  tube 
) [pure virtual]

Return the source address from which connections will be allowed to the given tube once it has been accepted.

Returning the pair (QHostAddress::Any, 0) (or alternatively (QHostAddress::AnyIPv4, 0) in Qt5) makes the protocol backend allow connections from any address on the local computer. This can be used on a tube-by-tube basis if for some tubes its known that multiple connections need to be made, so a single source address doesn't suffice.

The account and tube parameters can be inspected to make the decision; typically by looking at the tube's service type, parameters and/or initiator contact.

The general pattern for implementing this method is:

  1. Determine whether tube needs to allow multiple connections, and if so, skip source address access control completely
  2. Otherwise, create a socket and bind it to a free address
  3. Return this socket's address
  4. Keep the socket bound so that no other process can (accidentally or maliciously) take the address until it's used to connect to the tube when StreamTubeClient::tubeAcceptedAsTcp() is emitted for the tube
Parameters:
accountThe account from which the tube originates.
tubeThe tube channel which is going to be accepted by the StreamTubeClient.
Returns:
A pair containing the host address and port allowed to connect.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00992.html0000644000175200001440000000502012000060453021626 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::FieldSpec Member List
This is the complete list of members for Tp::FieldSpec, including all inherited members.
flagsTp::FieldSpec
maxTp::FieldSpec
nameTp::FieldSpec
parametersTp::FieldSpec


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00342.html0000644000175200001440000000715612000060453021627 0ustar00collabora-develusers00000000000000 Tp::PropertyValue Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PropertyValue Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

A struct (property ID, value) representing a property's value, as seen in the PropertiesChanged signal on the Properties interface, returned by the GetProperties method and passed to the SetProperties method.


Member Data Documentation


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00045.html0000644000175200001440000004746312000060453021634 0ustar00collabora-develusers00000000000000 Tp::Client::AccountInterfaceAvatarInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::AccountInterfaceAvatarInterface Class Reference

#include <TelepathyQt/AccountManager>

Inherits Tp::AbstractInterface.

List of all members.

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Account.Interface.Avatar".


Constructor & Destructor Documentation

Tp::Client::AccountInterfaceAvatarInterface::AccountInterfaceAvatarInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a AccountInterfaceAvatarInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::AccountInterfaceAvatarInterface::AccountInterfaceAvatarInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a AccountInterfaceAvatarInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a AccountInterfaceAvatarInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a AccountInterfaceAvatarInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a AccountInterfaceAvatarInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

static QLatin1String Tp::Client::AccountInterfaceAvatarInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Account.Interface.Avatar", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property Avatar of type Tp::Avatar.

The avatar to set on this account for display to other contacts, represented as a structure containing the bytes of the avatar, and the MIME type as a string; may be set to an empty byte-array and an empty string to indicate no avatar. When the account becomes connected, the account manager SHOULD set this avatar using SetAvatar if appropriate.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous setter for the remote object property Avatar of type Tp::Avatar.

The avatar to set on this account for display to other contacts, represented as a structure containing the bytes of the avatar, and the MIME type as a string; may be set to an empty byte-array and an empty string to indicate no avatar. When the account becomes connected, the account manager SHOULD set this avatar using SetAvatar if appropriate.

Returns:
A pending operation which will emit finished when the property has been set.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.

Represents the signal AvatarChanged on the remote object.

Emitted when the Avatar property changes. The avatar itself is deliberately not included in this signal, to reduce bus traffic in the (likely common) case where no running application cares about the user's own avatar.

void Tp::Client::AccountInterfaceAvatarInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00281.html0000644000175200001440000005274112000060453021631 0ustar00collabora-develusers00000000000000 Tp::Message Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Message Class Reference

The Message class represents a Telepathy message in a TextChannel. More...

#include <TelepathyQt/Message>

Inherited by Tp::ReceivedMessage.

List of all members.

Public Member Functions


Detailed Description

The Message class represents a Telepathy message in a TextChannel.

This class is implicitly shared, like QString.


Constructor & Destructor Documentation

Tp::Message::Message ( ChannelTextMessageType  type,
const QString &  text 
)

Construct a new Message object.

Parameters:
typeThe message type.
textThe message body.
Tp::Message::Message ( const Message other)

Copy constructor.

Class destructor.


Member Function Documentation

Message & Tp::Message::operator= ( const Message other)

Assignment operator.

bool Tp::Message::operator== ( const Message other) const

Equality operator.

bool Tp::Message::operator!= ( const Message other) const [inline]
QDateTime Tp::Message::sent ( ) const

Return the time the message was sent, or QDateTime() if that time is unknown.

Returns:
The timestamp as QDateTime.

Return the type of this message, or ChannelTextMessageTypeNormal if the type is not recognised.

Returns:
The type as ChannelTextMessageType.
bool Tp::Message::isTruncated ( ) const

Return whether this message was truncated during delivery.

Returns:
true if truncated, false otherwise.

Return whether this message contains parts not representable as plain text.

Returns:
true if it cannot completely be represented as plain text, false otherwise.
QString Tp::Message::messageToken ( ) const

Return the unique token identifying this message (e.g. the id attribute for XMPP messages), or an empty string if there is no suitable token.

Returns:
The non-empty message identifier, or an empty string if none.

Return whether this message is specific to a D-Bus interface. This is false in almost all cases.

If this function returns true, the message is specific to the interface indicated by dbusInterface(). Clients that don't understand that interface should not display the message. However, if the client would acknowledge an ordinary message, it must also acknowledge this interface-specific message.

Returns:
true if dbusInterface() would return a non-empty string, false otherwise.
See also:
dbusInterface()
QString Tp::Message::dbusInterface ( ) const

Return the D-Bus interface to which this message is specific, or an empty string for normal messages.

Returns:
The D-Bus interface name, or an empty string.
See also:
isSpecificToDBusInterface()
QString Tp::Message::text ( ) const

Return the message body containing all "text/plain" parts.

Returns:
The body text.

Return the message's header part, as defined by the Telepathy specification.

This is provided for advanced clients that need to access additional information not available through the normal Message API.

Returns:
The header as a MessagePart object. The same thing as part(0).
int Tp::Message::size ( ) const

Return the number of parts in this message.

Returns:
1 greater than the largest valid argument to part().
See also:
part(), parts()
MessagePart Tp::Message::part ( uint  index) const

Return the message's part for index, as defined by the Telepathy specification.

This is provided for advanced clients that need to access additional information not available through the normal Message API.

Parameters:
indexThe part to access, which must be strictly less than size(); part number 0 is the header, parts numbered 1 or greater are the body of the message.
Returns:
A MessagePart object.

Return the list of message parts forming this message.

Returns:
The list of MessagePart objects.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00879.html0000644000175200001440000010340512000060453021640 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::IncomingStreamTubeChannel Member List
This is the complete list of members for Tp::IncomingStreamTubeChannel, including all inherited members.
acceptTubeAsTcpSocket()Tp::IncomingStreamTubeChannel
acceptTubeAsTcpSocket(const QHostAddress &allowedAddress, quint16 allowedPort)Tp::IncomingStreamTubeChannel
acceptTubeAsUnixSocket(bool requireCredentials=false)Tp::IncomingStreamTubeChannel
accessControl() const Tp::StreamTubeChannel [protected]
actualFeatures() const Tp::ReadyObject [virtual]
addConnection(uint connection)Tp::StreamTubeChannel [protected]
addressType() const Tp::StreamTubeChannel
baseInterface() const Tp::Channel [protected]
becomeReady(const Features &requestedFeatures=Features())Tp::ReadyObject [virtual]
busName() const Tp::DBusProxy
BypassInterfaceCheck enum valueTp::OptionalInterfaceFactory< Channel >
Channel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature)Tp::Channel [protected]
channelType() const Tp::Channel
CheckInterfaceSupported enum valueTp::OptionalInterfaceFactory< Channel >
conferenceChannelMerged(const Tp::ChannelPtr &channel)Tp::Channel [signal]
conferenceChannelRemoved(const Tp::ChannelPtr &channel, const Tp::Channel::GroupMemberChangeDetails &details)Tp::Channel [signal]
conferenceChannels() const Tp::Channel
conferenceInitialChannels() const Tp::Channel
conferenceInitialInviteeContacts() const Tp::Channel
conferenceMergeChannel(const ChannelPtr &channel)Tp::Channel
conferenceOriginalChannels() const Tp::Channel
conferenceSplitChannel()Tp::Channel
connection() const Tp::Channel
connectionClosed(uint connectionId, const QString &errorName, const QString &errorMessage)Tp::StreamTubeChannel [signal]
connections() const Tp::StreamTubeChannel
create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties)Tp::IncomingStreamTubeChannel [static]
dbusConnection() const Tp::DBusProxy
DBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::DBusProxy
FeatureConferenceInitialInviteeContactsTp::Channel [static]
FeatureConnectionMonitoringTp::StreamTubeChannel [static]
FeatureCoreTp::IncomingStreamTubeChannel [static]
groupAddContacts(const QList< ContactPtr > &contacts, const QString &message=QString())Tp::Channel
groupAddSelfHandle()Tp::Channel [protected, slot]
groupAreHandleOwnersAvailable() const Tp::Channel
groupCanAcceptContactsWithMessage() const Tp::Channel
groupCanAddContacts() const Tp::Channel
groupCanAddContactsChanged(bool canAddContacts)Tp::Channel [signal]
groupCanAddContactsWithMessage() const Tp::Channel
groupCanDepartWithMessage() const Tp::Channel
groupCanRejectContactsWithMessage() const Tp::Channel
groupCanRemoveContacts() const Tp::Channel
groupCanRemoveContactsChanged(bool canRemoveContacts)Tp::Channel [signal]
groupCanRemoveContactsWithMessage() const Tp::Channel
groupCanRescindContacts() const Tp::Channel
groupCanRescindContactsChanged(bool canRescindContacts)Tp::Channel [signal]
groupCanRescindContactsWithMessage() const Tp::Channel
groupContacts(bool includeSelfContact=true) const Tp::Channel
groupFlags() const Tp::Channel
groupFlagsChanged(Tp::ChannelGroupFlags flags, Tp::ChannelGroupFlags added, Tp::ChannelGroupFlags removed)Tp::Channel [signal]
groupHandleOwners() const Tp::Channel
groupHandleOwnersChanged(const Tp::HandleOwnerMap &owners, const Tp::UIntList &added, const Tp::UIntList &removed)Tp::Channel [signal]
groupIsSelfContactTracked() const Tp::Channel
groupLocalPendingContactChangeInfo(const ContactPtr &contact) const Tp::Channel
groupLocalPendingContacts(bool includeSelfContact=true) const Tp::Channel
groupMembersChanged(const Tp::Contacts &groupMembersAdded, const Tp::Contacts &groupLocalPendingMembersAdded, const Tp::Contacts &groupRemotePendingMembersAdded, const Tp::Contacts &groupMembersRemoved, const Tp::Channel::GroupMemberChangeDetails &details)Tp::Channel [signal]
groupRemotePendingContacts(bool includeSelfContact=true) const Tp::Channel
groupRemoveContacts(const QList< ContactPtr > &contacts, const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone)Tp::Channel
groupSelfContact() const Tp::Channel
groupSelfContactChanged()Tp::Channel [signal]
groupSelfContactRemoveInfo() const Tp::Channel
groupSelfHandleIsLocalPending() const Tp::Channel [protected]
hasInterface(const QString &name) constTp::OptionalInterfaceFactory< Channel > [inline]
immutableProperties() const Tp::Channel
IncomingStreamTubeChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature=IncomingStreamTubeChannel::FeatureCore)Tp::IncomingStreamTubeChannel [protected]
initiatorContact() const Tp::Channel
interface() constTp::OptionalInterfaceFactory< Channel > [inline]
interfaces() constTp::OptionalInterfaceFactory< Channel > [inline]
InterfaceSupportedChecking enum nameTp::OptionalInterfaceFactory< Channel >
invalidate(const QString &reason, const QString &message)Tp::DBusProxy [protected]
invalidate(const QDBusError &error)Tp::DBusProxy [protected]
invalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage)Tp::DBusProxy [signal]
invalidationMessage() const Tp::DBusProxy
invalidationReason() const Tp::DBusProxy
ipAddress() const Tp::StreamTubeChannel
isConference() const Tp::Channel
isDroppingConnections() const Tp::StreamTubeChannel [protected]
isReady(const Features &features=Features()) const Tp::ReadyObject [virtual]
isRequested() const Tp::Channel
isValid() const Tp::DBusProxy
localAddress() const Tp::StreamTubeChannel
missingFeatures() const Tp::ReadyObject [virtual]
newConnection(uint connectionId)Tp::StreamTubeChannel [signal]
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
objectPath() const Tp::DBusProxy
optionalInterface(InterfaceSupportedChecking check=CheckInterfaceSupported) constTp::OptionalInterfaceFactory< Channel > [inline]
OptionalInterfaceFactory(Channel *this_)Tp::OptionalInterfaceFactory< Channel > [inline]
parameters() const Tp::TubeChannel
propertyChanged(const QString &propertyName)Tp::Object [signal]
readinessHelper() const Tp::ReadyObject [protected]
ReadyObject(RefCounted *object, const Feature &featureCore)Tp::ReadyObject
ReadyObject(DBusProxy *proxy, const Feature &featureCore)Tp::ReadyObject
RefCounted()Tp::RefCounted [inline]
removeConnection(uint connection, const QString &error, const QString &message)Tp::StreamTubeChannel [protected]
requestClose()Tp::Channel
requestedFeatures() const Tp::ReadyObject [virtual]
requestLeave(const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone)Tp::Channel
service() const Tp::StreamTubeChannel
setAccessControl(SocketAccessControl accessControl)Tp::StreamTubeChannel [protected]
setAddressType(SocketAddressType type)Tp::StreamTubeChannel [protected]
setBusName(const QString &busName)Tp::DBusProxy [protected]
setInterfaces(const QStringList &interfaces)Tp::OptionalInterfaceFactory< Channel > [inline, protected]
setIpAddress(const QPair< QHostAddress, quint16 > &address)Tp::StreamTubeChannel [protected]
setLocalAddress(const QString &address)Tp::StreamTubeChannel [protected]
setParameters(const QVariantMap &parameters)Tp::TubeChannel [protected]
state() const Tp::TubeChannel
stateChanged(Tp::TubeChannelState state)Tp::TubeChannel [signal]
StatefulDBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::StatefulDBusProxy
StreamTubeChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature=StreamTubeChannel::FeatureCore)Tp::StreamTubeChannel [protected]
supportsAbstractUnixSocketsOnLocalhost() const Tp::StreamTubeChannel
supportsAbstractUnixSocketsWithCredentials() const Tp::StreamTubeChannel
supportsConferenceMerging() const Tp::Channel
supportsConferenceSplitting() const Tp::Channel
supportsIPv4SocketsOnLocalhost() const Tp::StreamTubeChannel
supportsIPv4SocketsWithSpecifiedAddress() const Tp::StreamTubeChannel
supportsIPv6SocketsOnLocalhost() const Tp::StreamTubeChannel
supportsIPv6SocketsWithSpecifiedAddress() const Tp::StreamTubeChannel
supportsUnixSocketsOnLocalhost() const Tp::StreamTubeChannel
supportsUnixSocketsWithCredentials() const Tp::StreamTubeChannel
targetContact() const Tp::Channel
targetHandle() const Tp::Channel
targetHandleType() const Tp::Channel
targetId() const Tp::Channel
TubeChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature=TubeChannel::FeatureCore)Tp::TubeChannel [protected]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique)Tp::StatefulDBusProxy [static]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique, QString &error, QString &message)Tp::StatefulDBusProxy [static]
~Channel()Tp::Channel [virtual]
~DBusProxy()Tp::DBusProxy [virtual]
~IncomingStreamTubeChannel()Tp::IncomingStreamTubeChannel [virtual]
~Object()Tp::Object [virtual]
~OptionalInterfaceFactory()Tp::OptionalInterfaceFactory< Channel > [inline]
~ReadyObject()Tp::ReadyObject [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]
~StatefulDBusProxy()Tp::StatefulDBusProxy [virtual]
~StreamTubeChannel()Tp::StreamTubeChannel [virtual]
~TubeChannel()Tp::TubeChannel [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00239.html0000644000175200001440000002035412000060453021627 0ustar00collabora-develusers00000000000000 Tp::FunctorCaller5< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5 > Struct Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::FunctorCaller5< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5 > Struct Template Reference

#include </home/collabora-devel/kde/src/telepathy-qt4/TelepathyQt/callbacks.h>

Inherits Tp::BaseFunctorCaller< FunctorCaller5< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5 >, Functor >.

List of all members.

Public Types

Public Member Functions

Static Public Member Functions

template<class Functor, class R, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5>
struct Tp::FunctorCaller5< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5 >


Member Typedef Documentation

template<class Functor , class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 >
typedef R Tp::FunctorCaller5< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5 >::ResultType
template<class Functor , class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 >
typedef R(* Tp::FunctorCaller5< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5 >::InvokeType)(AbstractFunctorCaller *, Arg1, Arg2, Arg3, Arg4, Arg5)

Constructor & Destructor Documentation

template<class Functor , class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 >
Tp::FunctorCaller5< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5 >::FunctorCaller5 ( const Functor &  functor) [inline, explicit]

Member Function Documentation

template<class Functor , class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 >
static ResultType Tp::FunctorCaller5< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5 >::invoke ( AbstractFunctorCaller call,
Arg1  a1,
Arg2  a2,
Arg3  a3,
Arg4  a4,
Arg5  a5 
) [inline, static]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00257.html0000644000175200001440000000730512000060453021630 0ustar00collabora-develusers00000000000000 Tp::LastActivityAndStatuses Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::LastActivityAndStatuses Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

Structure representing a contact's presence, containing a last-activity time (deprecated) and a Multiple_Status_Map.


Member Data Documentation


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00591_source.html0000644000175200001440000001255512000060453023214 0ustar00collabora-develusers00000000000000 incoming-dbus-tube-channel.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
incoming-dbus-tube-channel.h
00001 
00022 #ifndef _TelepathyQt_incoming_dbus_tube_channel_h_HEADER_GUARD_
00023 #define _TelepathyQt_incoming_dbus_tube_channel_h_HEADER_GUARD_
00024 
00025 #ifndef IN_TP_QT_HEADER
00026 #error IN_TP_QT_HEADER
00027 #endif
00028 
00029 #include <TelepathyQt/DBusTubeChannel>
00030 
00031 namespace Tp {
00032 
00033 class PendingDBusTubeConnection;
00034 
00035 class TP_QT_EXPORT IncomingDBusTubeChannel : public DBusTubeChannel
00036 {
00037     Q_OBJECT
00038     Q_DISABLE_COPY(IncomingDBusTubeChannel)
00039 
00040 public:
00041     static IncomingDBusTubeChannelPtr create(const ConnectionPtr &connection,
00042             const QString &objectPath, const QVariantMap &immutableProperties);
00043 
00044     virtual ~IncomingDBusTubeChannel();
00045 
00046     PendingDBusTubeConnection *acceptTube(bool allowOtherUsers = false);
00047 
00048 protected:
00049     IncomingDBusTubeChannel(const ConnectionPtr &connection, const QString &objectPath,
00050             const QVariantMap &immutableProperties);
00051 
00052 private:
00053     struct Private;
00054     friend struct Private;
00055     Private *mPriv;
00056 
00057 };
00058 
00059 }
00060 
00061 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00897.html0000644000175200001440000001444212000060453021642 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingChannel Member List
This is the complete list of members for Tp::PendingChannel, including all inherited members.
channel() const Tp::PendingChannel
channelType() const Tp::PendingChannel
connection() const Tp::PendingChannel
errorMessage() const Tp::PendingOperation
errorName() const Tp::PendingOperation
finished(Tp::PendingOperation *operation)Tp::PendingOperation [signal]
handledChannelNotifier() const Tp::PendingChannel
immutableProperties() const Tp::PendingChannel
isError() const Tp::PendingOperation
isFinished() const Tp::PendingOperation
isValid() const Tp::PendingOperation
object() const Tp::PendingOperation [protected]
PendingOperation(const SharedPtr< RefCounted > &object)Tp::PendingOperation [protected]
setFinished()Tp::PendingOperation [protected, slot]
setFinishedWithError(const QString &name, const QString &message)Tp::PendingOperation [protected, slot]
setFinishedWithError(const QDBusError &error)Tp::PendingOperation [protected, slot]
targetHandle() const Tp::PendingChannel
targetHandleType() const Tp::PendingChannel
yours() const Tp::PendingChannel
~PendingChannel()Tp::PendingChannel
~PendingOperation()Tp::PendingOperation [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00365.html0000644000175200001440000001522512000060453021630 0ustar00collabora-develusers00000000000000 Tp::RequestableChannelClass Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::RequestableChannelClass Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

Structure representing a class of channels that can be requested, identified by a set of properties that identify that class of channel.

This will often just be the channel type and the handle type, but can include other properties of the channel - for instance, encrypted channels might require properties that unencrypted channels do not, like an encryption key.

In some cases, these classes of channel may overlap, in the sense that one class fixes all the properties that another class does, plus some more properties.

For older clients to still be able to understand how to request channels in the presence of a hypothetical "encryption" interface, we'd need to represent it like this:

  • class 1: ChannelType = Text, TargetHandleType = CONTACT
  • class 2: Channel.ChannelType = Text, Channel.TargetHandleType = CONTACT, Encryption.Encrypted = TRUE

Member Data Documentation

The property values that identify this requestable channel class. These properties MUST be included in requests for a channel of this class, and MUST take these values.

Clients that do not understand the semantics of all the Fixed_Properties MUST NOT request channels of this class, since they would be unable to avoid making an incorrect request.

This implies that connection managers wishing to make channels available to old or minimal clients SHOULD have a channel class with the minimum number of Fixed_Properties, and MAY additionally have channel classes with extra Fixed_Properties.

Interface designers SHOULD avoid introducing fixed properties whose types are not serializable in a .manager file.

Connection managers with a fixed property that is not serializable cannot have a complete .manager file.

Properties that MAY be set when requesting a channel of this channel type and handle type.

This array MUST NOT include properties that are in the Fixed_Properties mapping.

Properties in this array may either be required or optional, according to their documented semantics.

For instance, if TargetHandleType takes a value that is not Handle_Type_None, one or the other of TargetHandle and TargetID is required. Clients are expected to understand the documented relationship between the properties, so we do not have separate arrays of required and optional properties.

If this array contains the org.freedesktop.Telepathy.Channel.FUTURE.Bundle property, then this class of channel can be combined with other channels with that property in a request, or added to an existing bundle. If not, this signifies that the connection manager is unable to mark channels of this class as part of a bundle - this means that to the remote contact they are likely to be indistinguishable from channels requested separately.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00111.html0000644000175200001440000001231312000060453021610 0ustar00collabora-develusers00000000000000 Tp::ChannelDetails Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ChannelDetails Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

Enough details of a channel that clients can work out how to dispatch or handle it.


Member Data Documentation

QDBusObjectPath Tp::ChannelDetails::channel

The object path of the channel.

Properties of the channel.

Connection managers MUST NOT include properties in this mapping if their values can change. Clients MUST ignore properties that appear in this mapping if their values can change.

If properties that could change were included, the following race condition would be likely to exist in some cases:

  • NewChannels or Get("Channels") includes a property P with value V1
  • Client creates a proxy object for the channel
  • The value of P changes to V2
  • Client connects to PChanged signal
  • Client should call Get("P") or GetAll here, to avoid the race, but client's author has forgotten to do so
  • Proxy object thinks P == V1, but actually P == V2

We've taken the opportunity to make the API encourage the client author to get it right. Where possible, we intend that properties whose value will be used in channel dispatching or other "early" processing will be defined so that they are immutable (can never change).

Each dictionary MUST contain the keys ChannelInterface::ChannelType , ChannelInterface::TargetHandleType , ChannelInterface::TargetHandle , ChannelInterface::TargetID and ChannelInterface::Requested .

We expect these to be crucial to the channel-dispatching process.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00049.html0000644000175200001440000001272612000060453021632 0ustar00collabora-develusers00000000000000 Tp::AccountPropertyFilter Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AccountPropertyFilter Class Reference

The AccountPropertyFilter class provides a filter object to be used to filter accounts by properties. More...

#include <TelepathyQt/AccountPropertyFilter>

Inherits Tp::GenericPropertyFilter< Account >.

List of all members.

Public Member Functions

Static Public Member Functions

  • static AccountPropertyFilterPtr create ()

Detailed Description

The AccountPropertyFilter class provides a filter object to be used to filter accounts by properties.


Constructor & Destructor Documentation


Member Function Documentation

static AccountPropertyFilterPtr Tp::AccountPropertyFilter::create ( ) [inline, static]
bool Tp::AccountPropertyFilter::isValid ( ) const [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01018.html0000644000175200001440000000463312000060453021625 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::RTCPFeedbackMessage Member List
This is the complete list of members for Tp::RTCPFeedbackMessage, including all inherited members.
parametersTp::RTCPFeedbackMessage
subtypeTp::RTCPFeedbackMessage
typeTp::RTCPFeedbackMessage


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00606_source.html0000644000175200001440000000471112000060453023204 0ustar00collabora-develusers00000000000000 media-stream-handler.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
media-stream-handler.h
00001 
00023 #ifndef _TelepathyQt_media_stream_handler_h_HEADER_GUARD_
00024 #define _TelepathyQt_media_stream_handler_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00048 #include <TelepathyQt/_gen/cli-media-stream-handler.h>
00049 
00050 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01000.html0000644000175200001440000000436012000060453021611 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MediaDescriptionOffer Member List
This is the complete list of members for Tp::MediaDescriptionOffer, including all inherited members.
mediaDescriptionTp::MediaDescriptionOffer
propertiesTp::MediaDescriptionOffer


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01006.html0000644000175200001440000000514712000060453021623 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MessagePartContentMap Member List
This is the complete list of members for Tp::MessagePartContentMap, including all inherited members.
MessagePartContentMap()Tp::MessagePartContentMap [inline]
MessagePartContentMap(const QMap< uint, QDBusVariant > &a)Tp::MessagePartContentMap [inline]
operator=(const QMap< uint, QDBusVariant > &a)Tp::MessagePartContentMap [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00743.html0000644000175200001440000001202512000060453021623 0ustar00collabora-develusers00000000000000 Client proxies
   Home · All Classes · All Namespaces · Modules · Functions · Files

Classes


Detailed Description

Proxy objects representing remote Telepathy Client objects (approvers, handlers and observers) and their optional interfaces.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00218.html0000644000175200001440000003504212000060453021624 0ustar00collabora-develusers00000000000000 Tp::DBusService Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

Base class for D-Bus services. More...

#include <TelepathyQt/DBusService>

Inherits Tp::Object.

Inherited by Tp::BaseConnection, Tp::BaseConnectionManager, and Tp::BaseProtocol.

List of all members.

Public Member Functions

Protected Member Functions


Detailed Description

Base class for D-Bus services.

This class serves as a base for all the classes that are used to implement D-Bus services.


Constructor & Destructor Documentation

Tp::DBusService::DBusService ( const QDBusConnection &  dbusConnection)

Construct a DBusService that uses the given dbusConnection.

Parameters:
dbusConnectionThe D-Bus connection that will be used by this service.

Class destructor.


Member Function Documentation

QVariantMap Tp::DBusService::immutableProperties ( ) const [pure virtual]

Return the immutable properties of this D-Bus service object.

Immutable properties cannot change after the object has been registered on the bus with registerObject().

Returns:
The immutable properties of this D-Bus service object.

Implemented in Tp::BaseConnection, Tp::BaseProtocol, and Tp::BaseConnectionManager.

QDBusConnection Tp::DBusService::dbusConnection ( ) const

Return the D-Bus connection associated with this service.

Returns:
the D-Bus connection associated with this service.
QString Tp::DBusService::busName ( ) const

Return the D-Bus service name of this service.

This is only valid after this service has been registered on the bus using registerObject().

Returns:
the D-Bus service name of this service.
QString Tp::DBusService::objectPath ( ) const

Return the D-Bus object path of this service.

This is only valid after this service has been registered on the bus using registerObject().

Returns:
the D-Bus object path of this service.

Return the DBusObject that is used for registering this service on the bus.

The DBusObject is the object on which all the interface adaptors for this service are plugged.

Returns:
a pointer to the DBusObject that is used for registering this service on the bus.

Return whether this D-Bus service has been registered on the bus or not.

Returns:
true if the service has been registered, or false otherwise.
bool Tp::DBusService::registerObject ( const QString &  busName,
const QString &  objectPath,
DBusError error 
) [protected, virtual]

Register this service object on the bus with the given busName and objectPath.

error needs to be a valid pointer to a DBusError instance, where any possible D-Bus error will be stored.

A service may only be registered once in its lifetime. Use isRegistered() to find out if it has already been registered or not.

You normally don't need to use this method directly. Subclasses should provide a simplified version of it.

Parameters:
busNameThe D-Bus service name of this object.
objectPathThe D-Bus object path of this object.
errorA pointer to a valid DBusError instance, where any possible D-Bus error will be stored.
Returns:
true on success or false otherwise.

Reimplemented in Tp::BaseProtocol, Tp::BaseConnection, and Tp::BaseConnectionManager.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00792.html0000644000175200001440000010203512000060453021630 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::CallChannel Member List
This is the complete list of members for Tp::CallChannel, including all inherited members.
accept()Tp::CallChannel
actualFeatures() const Tp::ReadyObject [virtual]
baseInterface() const Tp::Channel [protected]
becomeReady(const Features &requestedFeatures=Features())Tp::ReadyObject [virtual]
busName() const Tp::DBusProxy
BypassInterfaceCheck enum valueTp::OptionalInterfaceFactory< Channel >
CallChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature=CallChannel::FeatureCore)Tp::CallChannel [protected]
callFlags() const Tp::CallChannel
callFlagsChanged(Tp::CallFlags flags)Tp::CallChannel [signal]
callState() const Tp::CallChannel
callStateChanged(Tp::CallState state)Tp::CallChannel [signal]
callStateDetails() const Tp::CallChannel
callStateReason() const Tp::CallChannel
Channel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature)Tp::Channel [protected]
channelType() const Tp::Channel
CheckInterfaceSupported enum valueTp::OptionalInterfaceFactory< Channel >
conferenceChannelMerged(const Tp::ChannelPtr &channel)Tp::Channel [signal]
conferenceChannelRemoved(const Tp::ChannelPtr &channel, const Tp::Channel::GroupMemberChangeDetails &details)Tp::Channel [signal]
conferenceChannels() const Tp::Channel
conferenceInitialChannels() const Tp::Channel
conferenceInitialInviteeContacts() const Tp::Channel
conferenceMergeChannel(const ChannelPtr &channel)Tp::Channel
conferenceOriginalChannels() const Tp::Channel
conferenceSplitChannel()Tp::Channel
connection() const Tp::Channel
contentAdded(const Tp::CallContentPtr &content)Tp::CallChannel [signal]
contentByName(const QString &contentName) const Tp::CallChannel
contentRemoved(const Tp::CallContentPtr &content, const Tp::CallStateReason &reason)Tp::CallChannel [signal]
contents() const Tp::CallChannel
contentsForType(MediaStreamType type) const Tp::CallChannel
create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties)Tp::CallChannel [static]
dbusConnection() const Tp::DBusProxy
DBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::DBusProxy
FeatureCallMembersTp::CallChannel [static]
FeatureCallStateTp::CallChannel [static]
FeatureConferenceInitialInviteeContactsTp::Channel [static]
FeatureContentsTp::CallChannel [static]
FeatureCoreTp::CallChannel [static]
FeatureLocalHoldStateTp::CallChannel [static]
groupAddContacts(const QList< ContactPtr > &contacts, const QString &message=QString())Tp::Channel
groupAddSelfHandle()Tp::Channel [protected, slot]
groupAreHandleOwnersAvailable() const Tp::Channel
groupCanAcceptContactsWithMessage() const Tp::Channel
groupCanAddContacts() const Tp::Channel
groupCanAddContactsChanged(bool canAddContacts)Tp::Channel [signal]
groupCanAddContactsWithMessage() const Tp::Channel
groupCanDepartWithMessage() const Tp::Channel
groupCanRejectContactsWithMessage() const Tp::Channel
groupCanRemoveContacts() const Tp::Channel
groupCanRemoveContactsChanged(bool canRemoveContacts)Tp::Channel [signal]
groupCanRemoveContactsWithMessage() const Tp::Channel
groupCanRescindContacts() const Tp::Channel
groupCanRescindContactsChanged(bool canRescindContacts)Tp::Channel [signal]
groupCanRescindContactsWithMessage() const Tp::Channel
groupContacts(bool includeSelfContact=true) const Tp::Channel
groupFlags() const Tp::Channel
groupFlagsChanged(Tp::ChannelGroupFlags flags, Tp::ChannelGroupFlags added, Tp::ChannelGroupFlags removed)Tp::Channel [signal]
groupHandleOwners() const Tp::Channel
groupHandleOwnersChanged(const Tp::HandleOwnerMap &owners, const Tp::UIntList &added, const Tp::UIntList &removed)Tp::Channel [signal]
groupIsSelfContactTracked() const Tp::Channel
groupLocalPendingContactChangeInfo(const ContactPtr &contact) const Tp::Channel
groupLocalPendingContacts(bool includeSelfContact=true) const Tp::Channel
groupMembersChanged(const Tp::Contacts &groupMembersAdded, const Tp::Contacts &groupLocalPendingMembersAdded, const Tp::Contacts &groupRemotePendingMembersAdded, const Tp::Contacts &groupMembersRemoved, const Tp::Channel::GroupMemberChangeDetails &details)Tp::Channel [signal]
groupRemotePendingContacts(bool includeSelfContact=true) const Tp::Channel
groupRemoveContacts(const QList< ContactPtr > &contacts, const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone)Tp::Channel
groupSelfContact() const Tp::Channel
groupSelfContactChanged()Tp::Channel [signal]
groupSelfContactRemoveInfo() const Tp::Channel
groupSelfHandleIsLocalPending() const Tp::Channel [protected]
handlerStreamingRequired() const Tp::CallChannel
hangup(CallStateChangeReason reason=CallStateChangeReasonUserRequested, const QString &detailedReason=QString(), const QString &message=QString())Tp::CallChannel
hasInitialAudio() const Tp::CallChannel
hasInitialVideo() const Tp::CallChannel
hasInterface(const QString &name) constTp::OptionalInterfaceFactory< Channel > [inline]
hasMutableContents() const Tp::CallChannel
immutableProperties() const Tp::Channel
initialAudioName() const Tp::CallChannel
initialTransportType() const Tp::CallChannel
initialVideoName() const Tp::CallChannel
initiatorContact() const Tp::Channel
interface() constTp::OptionalInterfaceFactory< Channel > [inline]
interfaces() constTp::OptionalInterfaceFactory< Channel > [inline]
InterfaceSupportedChecking enum nameTp::OptionalInterfaceFactory< Channel >
invalidate(const QString &reason, const QString &message)Tp::DBusProxy [protected]
invalidate(const QDBusError &error)Tp::DBusProxy [protected]
invalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage)Tp::DBusProxy [signal]
invalidationMessage() const Tp::DBusProxy
invalidationReason() const Tp::DBusProxy
isConference() const Tp::Channel
isReady(const Features &features=Features()) const Tp::ReadyObject [virtual]
isRequested() const Tp::Channel
isValid() const Tp::DBusProxy
localHoldState() const Tp::CallChannel
localHoldStateChanged(Tp::LocalHoldState state, Tp::LocalHoldStateReason reason)Tp::CallChannel [signal]
localHoldStateReason() const Tp::CallChannel
missingFeatures() const Tp::ReadyObject [virtual]
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
objectPath() const Tp::DBusProxy
optionalInterface(InterfaceSupportedChecking check=CheckInterfaceSupported) constTp::OptionalInterfaceFactory< Channel > [inline]
OptionalInterfaceFactory(Channel *this_)Tp::OptionalInterfaceFactory< Channel > [inline]
propertyChanged(const QString &propertyName)Tp::Object [signal]
readinessHelper() const Tp::ReadyObject [protected]
ReadyObject(RefCounted *object, const Feature &featureCore)Tp::ReadyObject
ReadyObject(DBusProxy *proxy, const Feature &featureCore)Tp::ReadyObject
RefCounted()Tp::RefCounted [inline]
remoteMemberFlags(const ContactPtr &member) const Tp::CallChannel
remoteMemberFlagsChanged(const QHash< Tp::ContactPtr, Tp::CallMemberFlags > &remoteMemberFlags, const Tp::CallStateReason &reason)Tp::CallChannel [signal]
remoteMembers() const Tp::CallChannel
remoteMembersRemoved(const Tp::Contacts &remoteMembers, const Tp::CallStateReason &reason)Tp::CallChannel [signal]
requestClose()Tp::Channel
requestContent(const QString &name, MediaStreamType type, MediaStreamDirection direction)Tp::CallChannel
requestedFeatures() const Tp::ReadyObject [virtual]
requestHold(bool hold)Tp::CallChannel
requestLeave(const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone)Tp::Channel
setBusName(const QString &busName)Tp::DBusProxy [protected]
setInterfaces(const QStringList &interfaces)Tp::OptionalInterfaceFactory< Channel > [inline, protected]
setQueued()Tp::CallChannel
setRinging()Tp::CallChannel
StatefulDBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::StatefulDBusProxy
supportsConferenceMerging() const Tp::Channel
supportsConferenceSplitting() const Tp::Channel
targetContact() const Tp::Channel
targetHandle() const Tp::Channel
targetHandleType() const Tp::Channel
targetId() const Tp::Channel
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique)Tp::StatefulDBusProxy [static]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique, QString &error, QString &message)Tp::StatefulDBusProxy [static]
~CallChannel()Tp::CallChannel [virtual]
~Channel()Tp::Channel [virtual]
~DBusProxy()Tp::DBusProxy [virtual]
~Object()Tp::Object [virtual]
~OptionalInterfaceFactory()Tp::OptionalInterfaceFactory< Channel > [inline]
~ReadyObject()Tp::ReadyObject [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]
~StatefulDBusProxy()Tp::StatefulDBusProxy [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00800.html0000644000175200001440000001073612000060453021624 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Callback0< R > Member List
This is the complete list of members for Tp::Callback0< R >, including all inherited members.
BaseCallback()Tp::BaseCallback [inline]
BaseCallback(AbstractFunctorCaller *caller)Tp::BaseCallback [inline]
BaseCallback(const BaseCallback &other)Tp::BaseCallback [inline]
Callback0()Tp::Callback0< R > [inline]
Callback0(const Functor &functor)Tp::Callback0< R > [inline]
callerTp::BaseCallback [protected]
FunctionType typedefTp::Callback0< R >
isValid() const Tp::BaseCallback [inline]
operator()() const Tp::Callback0< R > [inline]
operator=(const BaseCallback &other)Tp::BaseCallback [inline]
ResultType typedefTp::Callback0< R >
~BaseCallback()Tp::BaseCallback [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00352.html0000644000175200001440000001646612000060453021634 0ustar00collabora-develusers00000000000000 Tp::PtrFunctor2< R, Arg1, Arg2 > Struct Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PtrFunctor2< R, Arg1, Arg2 > Struct Template Reference

#include </home/collabora-devel/kde/src/telepathy-qt4/TelepathyQt/functors.h>

Inherits Tp::BaseFunctor.

List of all members.

Public Types

Public Member Functions

Public Attributes

template<class R, class Arg1, class Arg2>
struct Tp::PtrFunctor2< R, Arg1, Arg2 >


Member Typedef Documentation

template<class R , class Arg1 , class Arg2 >
typedef R(* Tp::PtrFunctor2< R, Arg1, Arg2 >::FunctionType)(Arg1, Arg2)
template<class R , class Arg1 , class Arg2 >
typedef R Tp::PtrFunctor2< R, Arg1, Arg2 >::ResultType

Constructor & Destructor Documentation

template<class R , class Arg1 , class Arg2 >
Tp::PtrFunctor2< R, Arg1, Arg2 >::PtrFunctor2 ( FunctionType  fn) [inline]

Member Function Documentation

template<class R , class Arg1 , class Arg2 >
ResultType Tp::PtrFunctor2< R, Arg1, Arg2 >::operator() ( Arg1  a1,
Arg2  a2 
) const [inline]

Member Data Documentation

template<class R , class Arg1 , class Arg2 >
FunctionType Tp::PtrFunctor2< R, Arg1, Arg2 >::fn


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/namespacemembers.html0000644000175200001440000000335712000060453024324 0ustar00collabora-develusers00000000000000 Namespace Members
   Home · All Classes · All Namespaces · Modules · Functions · Files
Here is a list of all namespace members with links to the namespace documentation for each member:

- v -

  • variantTypeFromDBusSignature() : Tp
  • VideoResolutionStruct : Tp


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00231.html0000644000175200001440000010447712000060453021630 0ustar00collabora-develusers00000000000000 Tp::FileTransferChannelCreationProperties Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::FileTransferChannelCreationProperties Class Reference

The FileTransferChannelCreationProperties class represents the properties of a file transfer channel request. More...

#include <TelepathyQt/FileTransferChannelCreationProperties>

List of all members.

Public Member Functions


Detailed Description

The FileTransferChannelCreationProperties class represents the properties of a file transfer channel request.


Constructor & Destructor Documentation

Tp::FileTransferChannelCreationProperties::FileTransferChannelCreationProperties ( const QString &  suggestedFileName,
const QString &  contentType,
qulonglong  size 
)

Create a FileTransferChannelCreationProperties.

If suggestedFileName or contentType are empty or if size is equal to zero, the channel request will fail. suggestedFileName will be cleaned of any path.

Parameters:
suggestedFileNameThe name of the file on the sender's side. This is therefore given as a suggested filename for the receiver.
contentTypeThe content type (MIME) of the file.
sizeThe size of the content of the file.
See also:
setUri()
Tp::FileTransferChannelCreationProperties::FileTransferChannelCreationProperties ( const QString &  path,
const QString &  contentType 
)

Create a FileTransferChannelCreationProperties.

This constructor accepts the path to a local file and sets the properties that can be deducted from the file. If path is not a local file the FileTransferChannelCreationProperties will be invalid.

Parameters:
pathThe path to the local file to be sent.

Member Function Documentation

FileTransferChannelCreationProperties & Tp::FileTransferChannelCreationProperties::operator= ( const FileTransferChannelCreationProperties other)
bool Tp::FileTransferChannelCreationProperties::operator== ( const FileTransferChannelCreationProperties other) const

Set the content hash of the file and its type for the request.

Parameters:
contentHashTypeThe type of content hash.
contentHashThe hash of the file, of type contentHashType.
Returns:
This FileTransferChannelCreationProperties.
See also:
hasContentHash(), contentHash(), contentHashType()

Set a description of the file for the request.

Parameters:
descriptionThe description of the file.
Returns:
This FileTransferChannelCreationProperties.
See also:
hasDescription(), description()

Set the last modification time of the file for the request.

Parameters:
lastModificationTimeThe last modification time of the file.
Returns:
This FileTransferChannelCreationProperties.
See also:
hasLastModificationTime(), lastModificationTime()

Set the URI of the file for the request.

Parameters:
uriThe URI of the file.
Returns:
This FileTransferChannelCreationProperties.
See also:
uri()

Return the suggested file name for the request. If the suggested file name is empty, the channel request will fail.

Returns:
The suggested file name for the request.

Return the content type (MIME) of the file for the request. If the content type is empty, the channel request will fail.

Returns:
The content type of the file.

Return the size of the contents of the file for the request. If size is zero, the channel request will fail.

Returns:
The size of the contents of file.

Return whether the request will have a content hash.

Returns:
true whether it will have a content hash, false otherwise.
See also:
contentHash(), contentHashType(), setContentHash()

Return the type of the content hash for the request.

Returns:
The type of the content hash.
See also:
hasContentHash(), contentHash(), setContentHash()

Return the content hash of the file for the request.

Returns:
The hash of the contents of the file transfer, of type returned by contentHashType().
See also:
hasContentHash(), contentHashType(), setContentHash()

Return whether the request will have a descriprion.

Returns:
true whether it will have description, false otherwise.
See also:
description(), setDescription()

Return the description of the file for the request.

Returns:
The description of the file.
See also:
hasDescription(), setDescription()

Return whether the request will have a last modification time.

Returns:
true whether it will have a last modification time, false otherwise.
See also:
lastModificationTime(), setLastModificationTime()

Return the last modification time of the file for the request.

Returns:
The last modification time of the file.
See also:
hasLastModificationTime(), setLastModificationTime()

Return whether the request will have an URI.

Returns:
true whether it will have URI, false otherwise.
See also:
uri(), setUri()

Return the URI of the file for the request. If the URI property is empty and the file transfer is handled by an handler that is not this process, then it won't be able to initiate the file transfer.

Returns:
The URI of the file.
See also:
setUri()


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00171.html0000644000175200001440000011120412000060453021615 0ustar00collabora-develusers00000000000000 Tp::Client::ConnectionInterfaceCellularInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceCellularInterface Class Reference

#include <TelepathyQt/Connection>

Inherits Tp::AbstractInterface.

List of all members.

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Connection.Interface.Cellular".


Constructor & Destructor Documentation

Tp::Client::ConnectionInterfaceCellularInterface::ConnectionInterfaceCellularInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceCellularInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ConnectionInterfaceCellularInterface::ConnectionInterfaceCellularInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceCellularInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ConnectionInterfaceCellularInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ConnectionInterfaceCellularInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ConnectionInterfaceCellularInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Connection.Interface.Cellular", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property MessageValidityPeriod of type uint.

Define how long should the service centre try message delivery before giving up, failing delivery and deleting the message. A value of 0 means to use the service centre's default period.

The value specified is in seconds. Note that various protocols or implementations may round the value up (eg. to a minute or hour precision). The maximum validity period may vary depending on protocol or provider.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous setter for the remote object property MessageValidityPeriod of type uint.

Define how long should the service centre try message delivery before giving up, failing delivery and deleting the message. A value of 0 means to use the service centre's default period.

The value specified is in seconds. Note that various protocols or implementations may round the value up (eg. to a minute or hour precision). The maximum validity period may vary depending on protocol or provider.

Returns:
A pending operation which will emit finished when the property has been set.

Asynchronous getter for the remote object property OverrideMessageServiceCentre of type bool.

If True, SMSes will be sent via the service centre specified by MessageServiceCentre . If False, the SIM's default SMSC will be used, ignoring the value of MessageServiceCentre.

It could be desirable for a configuration interface to remember the user's previous choice of custom SMSC, even if it's not in use. This boolean allows that choice to be saved as an account parameter by Mission Control, rather than the UI needing to save it elsewhere to be restored if the user wants to reactivate it.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous setter for the remote object property OverrideMessageServiceCentre of type bool.

If True, SMSes will be sent via the service centre specified by MessageServiceCentre . If False, the SIM's default SMSC will be used, ignoring the value of MessageServiceCentre.

It could be desirable for a configuration interface to remember the user's previous choice of custom SMSC, even if it's not in use. This boolean allows that choice to be saved as an account parameter by Mission Control, rather than the UI needing to save it elsewhere to be restored if the user wants to reactivate it.

Returns:
A pending operation which will emit finished when the property has been set.

Asynchronous getter for the remote object property MessageServiceCentre of type QString.

Address for the messaging service centre. Typically (as is the case for GSM's SMSC), it's the ISDN / telephony address (ie. a phone number). If OverrideMessageServiceCentre is False, this property's value should be ignored by the CM in favour of the SIM's default SMSC.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous setter for the remote object property MessageServiceCentre of type QString.

Address for the messaging service centre. Typically (as is the case for GSM's SMSC), it's the ISDN / telephony address (ie. a phone number). If OverrideMessageServiceCentre is False, this property's value should be ignored by the CM in favour of the SIM's default SMSC.

Returns:
A pending operation which will emit finished when the property has been set.

Asynchronous getter for the remote object property IMSI of type QString.

The International Mobile Subscriber Identifier, if it exists. This would originate from a SIM card. If the IMSI is unknown, this will contain an empty string ("").

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property MessageReducedCharacterSet of type bool.

Determines how to encode SMSes containing characters that do not fit into a non-Unicode character set. If False (which SHOULD be the default), messages will be encoded as UCS-2 and sent with no loss of fidelity (at the potential financial cost of using twice as many SMSes); if True, the message will be recoded in an implementation‐specific way to fit into a GSM reduced character set.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous setter for the remote object property MessageReducedCharacterSet of type bool.

Determines how to encode SMSes containing characters that do not fit into a non-Unicode character set. If False (which SHOULD be the default), messages will be encoded as UCS-2 and sent with no loss of fidelity (at the potential financial cost of using twice as many SMSes); if True, the message will be recoded in an implementation‐specific way to fit into a GSM reduced character set.

Returns:
A pending operation which will emit finished when the property has been set.

Asynchronous getter for the remote object property MessageNationalCharacterSet of type QString.

Hint for the connection manager for the GSM character set that should be used to send SMSes. The connection manager SHOULD follow this hint unless it has other ways to determine a better encoding. If the value is "gsm" (which SHOULD be the default), SMSes will be encoded in the normal 7-bit GSM character set, eventually falling back to UCS-2; see the MessageReducedCharacterSet property for details. Other valid character sets are specified in the GSM standard and are, for instance, "turkey", "spain" or "portugal". If the SMS cannot be encoded using the requested character set the behaviour is implementation-specific, but it is RECOMMENDED that the connection manager should behave as if this property was set to "gsm".

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous setter for the remote object property MessageNationalCharacterSet of type QString.

Hint for the connection manager for the GSM character set that should be used to send SMSes. The connection manager SHOULD follow this hint unless it has other ways to determine a better encoding. If the value is "gsm" (which SHOULD be the default), SMSes will be encoded in the normal 7-bit GSM character set, eventually falling back to UCS-2; see the MessageReducedCharacterSet property for details. Other valid character sets are specified in the GSM standard and are, for instance, "turkey", "spain" or "portugal". If the SMS cannot be encoded using the requested character set the behaviour is implementation-specific, but it is RECOMMENDED that the connection manager should behave as if this property was set to "gsm".

Returns:
A pending operation which will emit finished when the property has been set.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
void Tp::Client::ConnectionInterfaceCellularInterface::IMSIChanged ( const QString &  IMSI) [signal]

Represents the signal IMSIChanged on the remote object.

Emitted when the IMSI for the connection changes. This sort of thing is rare, but could happen on cellular phones that allow hot-swapping of SIM cards. In the case of SIM swapping, this signal would be emitted twice; the first time while the SIM is being ejected (with an empty string), and the second time after a new SIM has been inserted (assuming that the IMSI can be determined from the new SIM).

Parameters:
IMSIThe new IMSI value. This may be an empty string in the case where the IMSI is being reset or removed.
void Tp::Client::ConnectionInterfaceCellularInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01147.html0000644000175200001440000002116412000060453021626 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::PropertiesInterfaceInterface Member List
This is the complete list of members for Tp::Client::PropertiesInterfaceInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
GetProperties(const Tp::UIntList &properties, int timeout=-1)Tp::Client::PropertiesInterfaceInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::PropertiesInterfaceInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
ListProperties(int timeout=-1)Tp::Client::PropertiesInterfaceInterface [inline, slot]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
PropertiesChanged(const Tp::PropertyValueList &properties)Tp::Client::PropertiesInterfaceInterface [signal]
PropertiesInterfaceInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::PropertiesInterfaceInterface
PropertiesInterfaceInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::PropertiesInterfaceInterface
PropertiesInterfaceInterface(Tp::DBusProxy *proxy)Tp::Client::PropertiesInterfaceInterface
PropertiesInterfaceInterface(const Tp::AbstractInterface &mainInterface)Tp::Client::PropertiesInterfaceInterface [explicit]
PropertiesInterfaceInterface(const Tp::AbstractInterface &mainInterface, QObject *parent)Tp::Client::PropertiesInterfaceInterface
PropertyFlagsChanged(const Tp::PropertyFlagsChangeList &properties)Tp::Client::PropertiesInterfaceInterface [signal]
requestAllProperties() const Tp::Client::PropertiesInterfaceInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
SetProperties(const Tp::PropertyValueList &properties, int timeout=-1)Tp::Client::PropertiesInterfaceInterface [inline, slot]
staticInterfaceName()Tp::Client::PropertiesInterfaceInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/annotated.html0000644000175200001440000026113412000060453022771 0ustar00collabora-develusers00000000000000 Class List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Class List
Here are the classes, structs, unions and interfaces with brief descriptions:
Tp::AbstractAdaptorBase class for all the low-level service-side adaptors
Tp::AbstractClientThe AbstractClient class represents a Telepathy client
Tp::AbstractClientApproverThe AbstractClientApprover class represents a Telepathy approver
Tp::AbstractClientHandlerThe AbstractClientHandler class represents a Telepathy handler
Tp::AbstractClientObserverThe AbstractClientObserver class represents a Telepathy observer
Tp::AbstractDBusServiceInterfaceBase class for D-Bus service interfaces
Tp::AbstractFunctorCaller
Tp::AbstractInterfaceThe AbstractInterface class is the base class for all client side D-Bus interfaces, allowing access to remote methods/properties/signals
Tp::AbstractProtocolInterfaceBase class for all the Protocol object interface implementations
Tp::AccessControl
Tp::AccountThe Account class represents a Telepathy account
Tp::AccountCapabilityFilterThe AccountCapabilityFilter class provides a filter object to be used to filter accounts by capabilities
Tp::AccountFactoryThe AccountFactory class is responsible for constructing Account objects according to application-defined settings
Tp::Client::AccountInterface
Tp::Client::AccountInterfaceAddressingInterface
Tp::Client::AccountInterfaceAvatarInterface
Tp::Client::AccountInterfaceStorageInterface
Tp::AccountManagerThe AccountManager class represents a Telepathy account manager
Tp::Client::AccountManagerInterface
Tp::AccountPropertyFilterThe AccountPropertyFilter class provides a filter object to be used to filter accounts by properties
Tp::AccountSetThe AccountSet class represents a set of Telepathy accounts filtered by a given criteria
Tp::AddressingNormalizationMap
Tp::AliasMap
Tp::AliasPair
Tp::AndFilter< T >The AndFilter class provides a generic filter object to be used in conjunction of other filters
Tp::Client::AuthenticationTLSCertificateInterface
Tp::Avatar
Tp::AvatarDataThe AvatarData class represents a Telepathy avatar
Tp::AvatarSpecThe AvatarSpec class represents a Telepathy avatar information supported by a protocol
Tp::AvatarTokenMap
Tp::BaseCallbackBase class for all the callback classes
Tp::BaseConnectionBase class for Connection implementations
Tp::BaseConnectionManagerBase class for connection manager implementations
Tp::BaseFunctor
Tp::BaseFunctorCaller< T, Functor >
Tp::BaseProtocolBase class for protocol implementations
Tp::BaseProtocolAddressingInterfaceBase class for implementations of Protocol.Interface.Addressing
Tp::BaseProtocolAvatarsInterfaceBase class for implementations of Protocol.Interface.Avatars
Tp::BaseProtocolPresenceInterfaceBase class for implementations of Protocol.Interface.Presence
Tp::ByteArrayList
Tp::Callback0< R >Callback with 0 arguments
Tp::Callback1< R, Arg1 >Callback with 1 argument
Tp::Callback2< R, Arg1, Arg2 >Callback with 2 arguments
Tp::Callback3< R, Arg1, Arg2, Arg3 >Callback with 3 arguments
Tp::Callback4< R, Arg1, Arg2, Arg3, Arg4 >Callback with 4 arguments
Tp::Callback5< R, Arg1, Arg2, Arg3, Arg4, Arg5 >Callback with 5 arguments
Tp::Callback6< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >Callback with 6 arguments
Tp::Callback7< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >Callback with 7 arguments
Tp::CallChannelThe CallChannel class provides an object representing a Telepathy channel of type Call
Tp::CallContentThe CallContent class provides an object representing a Telepathy Call.Content
Tp::Client::CallContentInterface
Tp::Client::CallContentInterfaceAudioControlInterface
Tp::Client::CallContentInterfaceDTMFInterface
Tp::Client::CallContentInterfaceMediaInterface
Tp::Client::CallContentInterfaceVideoControlInterface
Tp::Client::CallContentMediaDescriptionInterface
Tp::Client::CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface
Tp::Client::CallContentMediaDescriptionInterfaceRTCPFeedbackInterface
Tp::Client::CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface
Tp::CallMemberMap
Tp::CallStateReason
Tp::CallStreamThe CallStream class provides an object representing a Telepathy Call.Stream
Tp::Client::CallStreamEndpointInterface
Tp::Client::CallStreamInterface
Tp::Client::CallStreamInterfaceMediaInterface
Tp::Candidate
Tp::CandidateInfo
Tp::CandidatePair
Tp::AbstractClientHandler::CapabilitiesThe AbstractClientHandler::Capabilities class provides a wrapper around the capabilities of a handler
Tp::CapabilitiesBaseThe CapabilitiesBase class represents the capabilities a Connection or a Contact supports
Tp::CapabilityChange
Tp::CapabilityPair
Tp::CaptchaThe Captcha class represents a Captcha ready to be answered
Tp::CaptchaAnswers
Tp::CaptchaAuthenticationThe CaptchaAuthentication class exposes CaptchaAuthentication's features for channels implementing it
Tp::CaptchaInfo
Tp::ChannelThe Channel class represents a Telepathy channel
Tp::ChannelCallStateMap
Tp::ChannelClass
Tp::ChannelClassSpecThe ChannelClassSpec class represents a Telepathy channel class
Tp::ChannelClassSpecListThe ChannelClassSpecList class represents a list of ChannelClassSpec
Tp::ChannelDetails
Tp::Client::ChannelDispatcherInterface
Tp::ChannelDispatchOperationThe ChannelDispatchOperation class represents a Telepathy channel dispatch operation
Tp::Client::ChannelDispatchOperationInterface
Tp::ChannelFactoryThe ChannelFactory class is responsible for constructing Channel objects according to application-defined settings
Tp::ChannelInfo
Tp::Client::ChannelInterface
Tp::Client::ChannelInterfaceAnonymityInterface
Tp::Client::ChannelInterfaceCallStateInterface
Tp::Client::ChannelInterfaceCaptchaAuthenticationInterface
Tp::Client::ChannelInterfaceChatStateInterface
Tp::Client::ChannelInterfaceConferenceInterface
Tp::Client::ChannelInterfaceDestroyableInterface
Tp::Client::ChannelInterfaceDTMFInterface
Tp::Client::ChannelInterfaceFileTransferMetadataInterface
Tp::Client::ChannelInterfaceGroupInterface
Tp::Client::ChannelInterfaceHoldInterface
Tp::Client::ChannelInterfaceMediaSignallingInterface
Tp::Client::ChannelInterfaceMessagesInterface
Tp::Client::ChannelInterfacePasswordInterface
Tp::Client::ChannelInterfaceSASLAuthenticationInterface
Tp::Client::ChannelInterfaceSecurableInterface
Tp::Client::ChannelInterfaceServicePointInterface
Tp::Client::ChannelInterfaceSMSInterface
Tp::Client::ChannelInterfaceTubeInterface
Tp::ChannelOriginatorMap
Tp::ChannelRequestThe ChannelRequest class represents a Telepathy channel request
Tp::ChannelRequestHintsThe ChannelRequestHints class represents a dictionary of metadata provided by the channel requester when requesting a channel
Tp::Client::ChannelRequestInterface
Tp::Client::ChannelTypeCallInterface
Tp::Client::ChannelTypeContactListInterface
Tp::Client::ChannelTypeContactSearchInterface
Tp::Client::ChannelTypeDBusTubeInterface
Tp::Client::ChannelTypeFileTransferInterface
Tp::Client::ChannelTypeRoomListInterface
Tp::Client::ChannelTypeServerAuthenticationInterface
Tp::Client::ChannelTypeServerTLSConnectionInterface
Tp::Client::ChannelTypeStreamedMediaInterface
Tp::Client::ChannelTypeStreamTubeInterface
Tp::Client::ChannelTypeTextInterface
Tp::Client::ChannelTypeTubesInterface
Tp::ChatStateMap
Tp::Client::ClientApproverInterface
Tp::Client::ClientHandlerInterface
Tp::Client::ClientInterface
Tp::Client::ClientInterfaceRequestsInterface
Tp::Client::ClientObserverInterface
Tp::ClientRegistrarThe ClientRegistrar class is responsible for registering Telepathy clients (Observer, Approver, Handler)
Tp::Codec
Tp::ComponentStateMap
Tp::ConnectionThe Connection class represents a Telepathy connection
Tp::ConnectionCapabilitiesThe ConnectionCapabilities class represents the capabilities of a Connection
Tp::ConnectionFactoryThe ConnectionFactory class is responsible for constructing Connection objects according to application-defined settings
Tp::Client::ConnectionInterface
Tp::Client::ConnectionInterfaceAddressingInterface
Tp::Client::ConnectionInterfaceAliasingInterface
Tp::Client::ConnectionInterfaceAnonymityInterface
Tp::Client::ConnectionInterfaceAvatarsInterface
Tp::Client::ConnectionInterfaceBalanceInterface
Tp::Client::ConnectionInterfaceCapabilitiesInterface
Tp::Client::ConnectionInterfaceCellularInterface
Tp::Client::ConnectionInterfaceClientTypesInterface
Tp::Client::ConnectionInterfaceContactBlockingInterface
Tp::Client::ConnectionInterfaceContactCapabilitiesInterface
Tp::Client::ConnectionInterfaceContactGroupsInterface
Tp::Client::ConnectionInterfaceContactInfoInterface
Tp::Client::ConnectionInterfaceContactListInterface
Tp::Client::ConnectionInterfaceContactsInterface
Tp::Client::ConnectionInterfaceLocationInterface
Tp::Client::ConnectionInterfaceMailNotificationInterface
Tp::Client::ConnectionInterfacePowerSavingInterface
Tp::Client::ConnectionInterfacePresenceInterface
Tp::Client::ConnectionInterfaceRequestsInterface
Tp::Client::ConnectionInterfaceServicePointInterface
Tp::Client::ConnectionInterfaceSimplePresenceInterface
Tp::ConnectionLowlevelThe ConnectionLowlevel class extends Connection with support to low-level features
Tp::ConnectionManagerThe ConnectionManager class represents a Telepathy connection manager
Tp::Client::ConnectionManagerInterface
Tp::ConnectionManagerLowlevelThe ConnectionManagerLowlevel class extends ConnectionManager with support to low-level features
Tp::ContactThe Contact class represents a Telepathy contact
Tp::ContactAttributesMap
Tp::ContactCapabilitiesThe ContactCapabilities class represents the capabilities of a Contact
Tp::ContactCapabilitiesMap
Tp::ContactCapability
Tp::ContactClientTypes
Tp::ContactCodecMap
Tp::ContactFactoryThe ContactFactory class is responsible for constructing Contact objects according to application-defined settings
Tp::ContactInfoField
Tp::ContactInfoMap
Tp::ContactLocations
Tp::ContactManagerThe ContactManager class is responsible for managing contacts
Tp::ContactMediaDescriptionPropertiesMap
Tp::ContactMessengerThe ContactMessenger class provides an easy way to send text messages to a contact and also track sent/receive text messages from the same contact
Tp::ContactPresences
Tp::ContactSearchChannelThe ContactSearchChannel class represents a Telepathy channel of type ContactSearch
Tp::ContactSearchMap
Tp::ContactSearchResultMap
Tp::ContactSendingStateMap
Tp::ContactSSRCsMap
Tp::ContactSubscriptionMap
Tp::ContactSubscriptions
Tp::CurrencyAmount
Tp::Client::DBus::DBusDaemonInterface
Tp::DBusErrorSmall container class, containing a D-Bus error
Tp::DBusObjectA QObject on which low-level D-Bus adaptors are plugged to provide a D-Bus object
Tp::DBusProxyThe DBusProxy class is a base class representing a remote object available over D-Bus
Tp::DBusProxyFactoryThe DBusProxyFactory class is a base class for all D-Bus proxy factory classes. Handles proxy caching and making them ready as appropriate
Tp::DBusServiceBase class for D-Bus services
Tp::DBusTubeChannelThe DBusTubeChannel class represents a Telepathy channel of type DBusTube
Tp::DBusTubeMember
Tp::DBusTubeParticipants
Tp::Client::DebugInterface
Tp::DebugMessage
Tp::DebugReceiverThe DebugReceiver class provides a D-Bus proxy for a Telepathy Debug object
Tp::ReceivedMessage::DeliveryDetailsThe ReceivedMessage::DeliveryDetails class represents the details of a delivery report
Tp::Connection::ErrorDetailsThe Connection::ErrorDetails class represents the details of a connection error
Tp::FeatureThe Feature class represents a feature that can be enabled on demand
Tp::FeaturesThe Features class represents a list of Feature
Tp::FieldSpec
Tp::FileTransferChannelThe FileTransferChannel class represents a Telepathy channel of type FileTransfer
Tp::FileTransferChannelCreationPropertiesThe FileTransferChannelCreationProperties class represents the properties of a file transfer channel request
Tp::Filter< T >The Filter class provides a base class to be used by specialized filters such as GenericCapabilityFilter, GenericPropertyFilter, etc
Tp::FixedFeatureFactoryThe FixedFeatureFactory class is a base class for all D-Bus proxy factories which want the same set of features for all constructed proxies
Tp::FunctorCaller0< Functor, R >
Tp::FunctorCaller1< Functor, R, Arg1 >
Tp::FunctorCaller2< Functor, R, Arg1, Arg2 >
Tp::FunctorCaller3< Functor, R, Arg1, Arg2, Arg3 >
Tp::FunctorCaller4< Functor, R, Arg1, Arg2, Arg3, Arg4 >
Tp::FunctorCaller5< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5 >
Tp::FunctorCaller6< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >
Tp::FunctorCaller7< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >
Tp::GenericCapabilityFilter< T >The GenericCapabilityFilter class provides a generic filter object to be used to filter objects by capabilities
Tp::GenericPropertyFilter< T >The GenericPropertyFilter class provides a generic filter object to be used to filter objects by properties
Tp::Channel::GroupMemberChangeDetailsThe Channel::GroupMemberChangeDetails class represents the details of a group membership change
Tp::HandledChannelNotifierThe HandledChannelNotifier class can be used to keep track of channel() being re-requested
Tp::HandleIdentifierMap
Tp::HandleOwnerMap
Tp::HandlerCapabilities
Tp::AbstractClientHandler::HandlerInfoThe AbstractClientHandler::HandlerInfo class provides a wrapper around the additional info about the channels passed to handleChannels()
Tp::HTTPPostData
Tp::IncomingDBusTubeChannelThe IncomingStreamTubeChannel class represents an incoming Telepathy channel of type StreamTube
Tp::IncomingFileTransferChannelThe IncomingFileTransferChannel class represents a Telepathy channel of type FileTransfer for incoming file transfers
Tp::IncomingStreamTubeChannelThe IncomingStreamTubeChannel class represents an incoming Telepathy channel of type StreamTube
Tp::Contact::InfoFieldsThe Contact::InfoFields class represents the information of a Telepathy contact
Tp::ReadinessHelper::IntrospectableThe ReadinessHelper::Introspectable class represents a introspectable used by ReadinessHelper
Tp::Client::DBus::IntrospectableInterface
Tp::LastActivityAndStatuses
Tp::LocalPendingInfo
Tp::Location
Tp::LocationInfoThe LocationInfo class represents the location of a Telepathy Contact
Tp::Mail
Tp::MailAddress
Tp::MailURL
Tp::MediaDescriptionOffer
Tp::MediaDescriptionProperties
Tp::MediaSessionHandlerInfo
Tp::Client::MediaSessionHandlerInterface
Tp::MediaStreamHandlerCandidate
Tp::MediaStreamHandlerCodec
Tp::Client::MediaStreamHandlerInterface
Tp::MediaStreamHandlerTransport
Tp::MediaStreamInfo
Tp::MemberFunctor0< R, T >
Tp::MemberFunctor1< R, T, Arg1 >
Tp::MemberFunctor2< R, T, Arg1, Arg2 >
Tp::MemberFunctor3< R, T, Arg1, Arg2, Arg3 >
Tp::MemberFunctor4< R, T, Arg1, Arg2, Arg3, Arg4 >
Tp::MemberFunctor5< R, T, Arg1, Arg2, Arg3, Arg4, Arg5 >
Tp::MemberFunctor6< R, T, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >
Tp::MemberFunctor7< R, T, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >
Tp::MessageThe Message class represents a Telepathy message in a TextChannel
Tp::MessageContentPartThe MessageContentPart class represents a Telepathy message part
Tp::MessageContentPartListThe MessageContentPartList class represents a list of MessageContentPart
Tp::MessagePart
Tp::MessagePartContentMap
Tp::Metadata
Tp::MethodInvocationContext< T1, T2, T3, T4, T5, T6, T7, T8 >The MethodInvocationContext class provides a way for the service implementation to respond to method calls
Tp::MultipleStatusMap
Tp::NotDelegatedError
Tp::NotDelegatedMap
Tp::NotFilter< T >The NotFilter class provides a generic filter object to be used in conjunction of other filters
Tp::ObjectThe Object class provides an object with property notification
Tp::ObjectImmutablePropertiesMap
Tp::ObjectPathList
Tp::AbstractClientObserver::ObserverInfoThe AbstractClientObserver::ObserverInfo class provides a wrapper around the additional info about the channels passed to observeChannels()
Tp::OptionalInterfaceFactory< DBusProxySubclass >The OptionalInterfaceFactory class is a helper class for high-level D-Bus proxy classes willing to offer access to shared instances of interface proxies for optional interfaces
Tp::OrFilter< T >The OrFilter class provides a generic filter object to be used in conjunction of other filters
Tp::OutgoingDBusTubeChannelThe OutgoingDBusTubeChannel class represents an outgoing Telepathy channel of type DBusTube
Tp::OutgoingFileTransferChannelThe OutgoingFileTransferChannel class represents a Telepathy channel of type FileTransfer for outgoing file transfers
Tp::OutgoingStreamTubeChannelThe OutgoingStreamTubeChannel class represents an outgoing Telepathy channel of type StreamTube
Tp::Profile::ParameterThe Profile::Parameter class represents a parameter defined in .profile files
Tp::StreamTubeServer::ParametersGeneratorThe StreamTubeServer::ParametersGenerator abstract interface allows sending a different set of parameters with each tube offer
Tp::ParamSpec
Tp::Client::DBus::PeerInterface
Tp::PendingAccountThe PendingAccount class represents the parameters of and the reply to an asynchronous account request
Tp::PendingCallContent
Tp::PendingCaptchasThe PendingCaptchas class represents an asynchronous operation for retrieving a captcha challenge from a connection manager
Tp::PendingChannelThe PendingChannel class represents the parameters of and the reply to an asynchronous channel request
Tp::Farstream::PendingChannel
Tp::PendingChannelRequestThe PendingChannelRequest class represents the parameters of and the reply to an asynchronous ChannelRequest request
Tp::PendingCompositeThe PendingComposite class is a PendingOperation that can be used to track multiple pending operations at once
Tp::PendingConnectionThe PendingConnection class represents the parameters of and the reply to an asynchronous connection request
Tp::PendingContactAttributesThe PendingContactAttributes class represents the parameters of and the reply to an asynchronous request for raw contact attributes, as used in the ConnectionLowlevel::contactAttributes() low-level convenience method wrapping the Client::ConnectionInterfaceContactsInterface::GetContactAttributes() D-Bus method
Tp::PendingContactInfoThe PendingContactInfo class represents the parameters of and the reply to an asynchronous contact info request
Tp::PendingContactsThe PendingContacts class is used by ContactManager when creating/updating Contact objects
Tp::PendingDBusTubeConnection
Tp::PendingDebugMessageList
Tp::PendingFailureThe PendingFailure class represents a PendingOperation that always fails with the error passed to the constructor
Tp::PendingHandlesThe PendingHandles class represents the parameters of and the reply to an asynchronous handle request/hold
Tp::PendingOperationThe PendingOperation class is a base class for pending asynchronous operations
Tp::PendingReadyThe PendingReady class represents the features requested and the reply to a request for an object to become ready
Tp::PendingSendMessageThe PendingSendMessage class represents the parameters of and the reply to an asynchronous message send request
Tp::PendingStreamedMediaStreamsClass containing the result of an asynchronous streamed media stream creation request
Tp::PendingStreamTubeConnectionThe PendingStreamTubeConnection class represents an asynchronous operation for accepting an incoming stream tube
Tp::PendingStringThe PendingString class is a generic subclass of PendingOperation representing a pending D-Bus method call that returns a string
Tp::PendingStringListThe PendingStringList class is a generic subclass of PendingOperation representing a pending D-Bus method call that returns a string list
Tp::PendingSuccessThe PendingSuccess class represents PendingOperation that is always successful
Tp::PendingTextMessage
Tp::PendingVariantThe PendingVariant class is a generic subclass of PendingOperation representing a pending D-Bus method call that returns a variant
Tp::PendingVariantMapThe PendingVariantMap class is a generic subclass of PendingOperation representing a pending D-Bus method call that returns a variant map
Tp::PendingVoidThe PendingVoid class is a generic subclass of PendingOperation representing a pending D-Bus method call that does not return anything (or returns a result that is not interesting)
Tp::PresenceThe Presence class represents a Telepathy simple presence
Tp::Profile::PresenceThe Profile::Presence class represents a presence defined in .profile files
Tp::PresenceSpecThe PresenceSpec class represents a Telepathy presence information supported by a protocol
Tp::PresenceSpecListThe PresenceSpecList class represents a list of PresenceSpec
Tp::ProfileThe Profile class provides an easy way to read Telepathy profile files according to http://telepathy.freedesktop.org/wiki/service-profile-v1
Tp::ProfileManagerThe ProfileManager class provides helper methods to retrieve Profile objects
Tp::Client::DBus::PropertiesInterface
Tp::Client::PropertiesInterfaceInterface
Tp::PropertyFlagsChange
Tp::PropertySpec
Tp::PropertyValue
Tp::ProtocolInfoThe ProtocolInfo class represents a Telepathy Protocol
Tp::Client::ProtocolInterface
Tp::Client::ProtocolInterfaceAddressingInterface
Tp::Client::ProtocolInterfaceAvatarsInterface
Tp::Client::ProtocolInterfacePresenceInterface
Tp::ProtocolParameterThe ProtocolParameter class represents a Telepathy protocol parameter
Tp::ProtocolPropertiesMap
Tp::PtrFunctor0< R >
Tp::PtrFunctor1< R, Arg1 >
Tp::PtrFunctor2< R, Arg1, Arg2 >
Tp::PtrFunctor3< R, Arg1, Arg2, Arg3 >
Tp::PtrFunctor4< R, Arg1, Arg2, Arg3, Arg4 >
Tp::PtrFunctor5< R, Arg1, Arg2, Arg3, Arg4, Arg5 >
Tp::PtrFunctor6< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >
Tp::PtrFunctor7< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >
Tp::QualifiedPropertyValueMap
Tp::ReadinessHelperThe ReadinessHelper class is a helper class used by the introspection process
Tp::ReadyObject
Tp::ReceivedMessageThe ReceivedMessage class is a subclass of Message, representing a received message only
Tp::RefCountedThe RefCounted class is a base class for shared objects used by SharedPtr
Tp::ReferencedHandlesHelper container for safe management of handle lifetimes. Every handle in a ReferencedHandles container is guaranteed to be valid (and stay valid, as long it's in at least one ReferencedHandles container)
Tp::StreamTubeServer::RemoteContactThe StreamTubeServer::RemoteContact class represents a contact from which a socket connection to our exported socket originates
Tp::RequestableChannelClass
Tp::RequestableChannelClassSpecThe RequestableChannelClassSpec class represents a Telepathy requestable channel class
Tp::RequestableChannelClassSpecListThe RequestableChannelClassSpecList class represents a list of RequestableChannelClassSpec
Tp::RichPresenceAccessControl
Tp::RoomInfo
Tp::RoomListChannelThe RoomListChannel class represents a Telepathy Channel of type RoomList
Tp::RTCPFeedbackMessage
Tp::RTCPFeedbackMessageMap
Tp::RTCPFeedbackMessageProperties
Tp::RTPHeaderExtension
Tp::ContactSearchChannel::SearchStateChangeDetailsThe ContactSearchChannel::SearchStateChangeDetails class provides a wrapper around the details for a search state change
Tp::ServerAuthenticationChannelThe ServerAuthenticationChannel class is a base class for all ServerAuthentication types
Tp::ServicePoint
Tp::ServicePointInfo
Tp::SharedPtr< T >The SharedPtr class is a pointer to an explicitly shared object
Tp::SimpleCallObserverThe SimpleCallObserver class provides an easy way to track calls in an account and can be optionally filtered by a contact and/or call direction
Tp::SimpleContactPresences
Tp::SimpleObserverThe SimpleObserver class provides an easy way to track channels in an account and can be optionally filtered by a contact
Tp::SimplePresence
Tp::SimpleStatusSpec
Tp::SimpleStatusSpecMap
Tp::SimpleStreamTubeHandler
Tp::SimpleTextObserverThe SimpleTextObserver class provides an easy way to track sent/received text messages in an account and can be optionally filtered by a contact
Tp::SingleContactAttributesMap
Tp::SocketAddressIP
Tp::SocketAddressIPv4
Tp::SocketAddressIPv6
Tp::SocketNetmaskIPv4
Tp::SocketNetmaskIPv6
Tp::StatefulDBusProxyThe StatefulDBusProxy class is a base class representing a remote object whose API is stateful
Tp::StatelessDBusProxyThe StatelessDBusProxy class is a base class representing a remote object whose API is basically stateless
Tp::StatusSpec
Tp::StatusSpecMap
Tp::StreamCredentials
Tp::StreamedMediaChannelThe StreamedMediaChannel class represents a Telepathy channel of type StreamedMedia
Tp::StreamedMediaStreamThe StreamedMediaStream class represents a Telepathy streamed media stream
Tp::StreamTubeChannelThe StreamTubeChannel class represents a Telepathy channel of type StreamTube
Tp::StreamTubeClientThe StreamTubeClient class is a Handler implementation for incoming Stream Tube channels, allowing an application to easily get notified about services they can connect to offered to them over Telepathy Tubes without worrying about the channel dispatching details
Tp::StreamTubeServerThe StreamTubeServer class is a Handler implementation for outgoing Stream Tube channels, allowing an application to easily export a TCP network server over Telepathy Tubes without worrying about the channel dispatching details
Tp::StringStringMap
Tp::StringVariantMap
Tp::SupportedSocketMap
Tp::StreamTubeClient::TcpSourceAddressGeneratorThe StreamTubeClient::TcpSourceAddressGenerator abstract interface allows using socket source address/port based access control for connecting to tubes accepted as TCP sockets
Tp::TextChannelThe TextChannel class represents a Telepathy channel of type Text
Tp::TLSCertificateRejection
Tp::StreamTubeServer::TubeThe StreamTubeServer::Tube class represents a tube being handled by the server
Tp::StreamTubeClient::TubeThe StreamTubeClient::Tube class represents a tube being handled by the client
Tp::TubeChannelThe TubeChannel class is a base class for all tube types
Tp::TubeInfo
Tp::UIntList
Tp::VCardFieldAddressMap
Tp::VideoResolution
Tp::WeakPtr< T >The WeakPtr class holds a weak reference to an object managed by SharedPtr


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00750.html0000644000175200001440000001462312000060453021627 0ustar00collabora-develusers00000000000000 Wrapper classes
   Home · All Classes · All Namespaces · Modules · Functions · Files
Wrapper classes

Classes


Detailed Description

Wrapper classes representing a Telepathy type.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00774.html0000644000175200001440000002066512000060453021640 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AbstractClientHandler::Capabilities Member List
This is the complete list of members for Tp::AbstractClientHandler::Capabilities, including all inherited members.
allTokens() const Tp::AbstractClientHandler::Capabilities
Capabilities(const QStringList &tokens=QStringList())Tp::AbstractClientHandler::Capabilities
Capabilities(const Capabilities &other)Tp::AbstractClientHandler::Capabilities
hasAudioCodecToken(const QString &mimeSubType) const Tp::AbstractClientHandler::Capabilities [inline]
hasGTalkP2PNATTraversalToken() const Tp::AbstractClientHandler::Capabilities [inline]
hasICEUDPNATTraversalToken() const Tp::AbstractClientHandler::Capabilities [inline]
hasToken(const QString &token) const Tp::AbstractClientHandler::Capabilities
hasVideoCodecToken(const QString &mimeSubType) const Tp::AbstractClientHandler::Capabilities [inline]
hasWLM2009NATTraversalToken() const Tp::AbstractClientHandler::Capabilities [inline]
hasWLM85NATTraversalToken() const Tp::AbstractClientHandler::Capabilities [inline]
operator=(const Capabilities &other)Tp::AbstractClientHandler::Capabilities
setAudioCodecToken(const QString &mimeSubType)Tp::AbstractClientHandler::Capabilities [inline]
setGTalkP2PNATTraversalToken()Tp::AbstractClientHandler::Capabilities [inline]
setICEUDPNATTraversalToken()Tp::AbstractClientHandler::Capabilities [inline]
setToken(const QString &token)Tp::AbstractClientHandler::Capabilities
setVideoCodecToken(const QString &mimeSubType)Tp::AbstractClientHandler::Capabilities [inline]
setWLM2009NATTraversalToken()Tp::AbstractClientHandler::Capabilities [inline]
setWLM85NATTraversalToken()Tp::AbstractClientHandler::Capabilities [inline]
unsetAudioCodecToken(const QString &mimeSubType)Tp::AbstractClientHandler::Capabilities [inline]
unsetGTalkP2PNATTraversalToken()Tp::AbstractClientHandler::Capabilities [inline]
unsetICEUDPNATTraversalToken()Tp::AbstractClientHandler::Capabilities [inline]
unsetToken(const QString &token)Tp::AbstractClientHandler::Capabilities
unsetVideoCodecToken(const QString &mimeSubType)Tp::AbstractClientHandler::Capabilities [inline]
unsetWLM2009NATTraversalToken()Tp::AbstractClientHandler::Capabilities [inline]
unsetWLM85NATTraversalToken()Tp::AbstractClientHandler::Capabilities [inline]
~Capabilities()Tp::AbstractClientHandler::Capabilities


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00745.html0000644000175200001440000002615712000060453021640 0ustar00collabora-develusers00000000000000 Connection proxies
   Home · All Classes · All Namespaces · Modules · Functions · Files
Connection proxies

Classes


Detailed Description

Proxy objects representing remote Telepathy Connection objects and their optional interfaces.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00760.html0000644000175200001440000001313312000060453021623 0ustar00collabora-develusers00000000000000 Structure types
   Home · All Classes · All Namespaces · Modules · Functions · Files
Structure types

Classes


Detailed Description

Structure types generated from the specification.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00134.html0000644000175200001440000006614312000060453021627 0ustar00collabora-develusers00000000000000 Tp::Client::ChannelInterfaceSMSInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

#include <TelepathyQt/Channel>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Channel.Interface.SMS".


Constructor & Destructor Documentation

Tp::Client::ChannelInterfaceSMSInterface::ChannelInterfaceSMSInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfaceSMSInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ChannelInterfaceSMSInterface::ChannelInterfaceSMSInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfaceSMSInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ChannelInterfaceSMSInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ChannelInterfaceSMSInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ChannelInterfaceSMSInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

static QLatin1String Tp::Client::ChannelInterfaceSMSInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Channel.Interface.SMS", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property Flash of type bool.

If True, then this channel is exclusively for receiving class 0 SMSes (and no SMSes can be sent using ChannelInterfaceMessagesInterface::SendMessage() on this channel). If False, no incoming class 0 SMSes will appear on this channel.

This property is immutable (cannot change), and therefore SHOULD appear wherever immutable properties are reported, e.g. ConnectionInterfaceRequestsInterface::NewChannels() signals.

Class 0 SMSes should be displayed immediately to the user, and need not be saved to the device memory unless the user explicitly chooses to do so. This is unlike “normal”, class 1 SMSes, which must be stored, but need not be shown immediately in their entirity to the user.

Separating class 0 SMSes into their own channel with this immutable property allows them to be dispatched to a different ClientHandlerInterface —which would include this property in its ClientHandlerInterface::HandlerChannelFilter —avoiding the normal Text channel handler having to decide for each message whether it should be displayed to the user immediately or handled normally.

Currently, no mechanism is defined for sending class 0 SMSes. It seems reasonable to support specifying the class of an outgoing SMS in its header Message_Part, rather than requiring the UI to request a special channel for such SMSes; hence, we define here that channels with Flash set to True are read-only.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property SMSChannel of type bool.

If TRUE, messages sent and received on this channel are transmitted via SMS.

If this property is included in the channel request, the Connection Manager MUST return an appropriate channel (i.e. if TRUE the channel must be for SMSes, if FALSE it must not), or else fail to provide the requested channel with the NotCapable error.

For example, to explicitly request an SMS channel to a contact. You might construct a channel request like:

{
   Channel.Type: Channel.Type.Text,
   Channel.TargetHandleType: Handle_Type_Contact,
   Channel.TargetID: escher.cat,
   Channel.Interface.SMS.SMSChannel: True,
 }
Some protocols allow us to send SMSes to a remote contact, without knowing the phone number to which those SMSes will be sent. This provides a mechanism to request such channels.

If this property is not included in the channel request, the Connection Manager MAY return an SMS channel if that is the most appropriate medium (i.e. if the channel target is a phone number).

To some types of identifiers (i.e. phone numbers) it only makes sense to return an SMS channel, this is what happens currently with telepathy-ring. We don't want to break this behaviour when we are not explicit about the type of channel we want. Alternatively, for protocols where there is an SMS fallback for IM messages, it's possible that we don't care what sort of channel we get, and simply want notification of the transport.

Some protocols have a fallback to deliver IM messages via SMS. On these protocols, the Connection Manager SHOULD set the property value as appropriate, and notify its change with SMSChannelChanged() .

Protocols such as MSN can fall back to delivering IM messages via SMS. Where possible we want clients to be able to inform the user that their messages are going to be redirected to the remote contact's phone.
Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply<uint, int, int> Tp::Client::ChannelInterfaceSMSInterface::GetSMSLength ( const Tp::MessagePartList message,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method GetSMSLength on the remote object.

Returns the number of 140 octet chunks required to send a message via SMS, as well as the number of remaining characters available in the final chunk and, if possible, an estimate of the cost.

There are a number of different SMS encoding mechanisms, and the client doesn't know which mechanisms an individual CM might support. This method allows the client, without any knowledge of the encoding mechanism, to provide length details to the user.

Clients SHOULD limit the frequency with which this method is called and SHOULD NOT call it for every keystroke. Clients MAY estimate the remaining size between single keystrokes.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
messageThe message the user wishes to send.
timeoutThe timeout in milliseconds.
Returns:

The number of 140 octet chunks required to send this message.

For example, in the GSM standard 7-bit encoding, a 162 character message would require 2 chunks.

Returns:

The number of further characters that can be fit in the final chunk. A negative value indicates that the message will be truncated by abs(Remaining_Characters). The value MIN_INT32 (-231) indicates the message will be truncated by an unknown amount.

For example, in the GSM standard 7-bit encoding, a 162 character message would return 144 remaining characters (because of the space required for the multipart SMS header).

Returns:

The estimated cost of sending this message. The currency and scale of this value are the same as the ConnectionInterfaceBalanceInterface::AccountBalance property.

A value of -1 indicates the cost could not be estimated.

Represents the signal SMSChannelChanged on the remote object.

This signal indicates a change in the SMSChannel property.

Parameters:
SMSChannelThe new value for SMSChannel.
void Tp::Client::ChannelInterfaceSMSInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00119.html0000644000175200001440000004603312000060453021626 0ustar00collabora-develusers00000000000000 Tp::Client::ChannelInterfaceCallStateInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelInterfaceCallStateInterface Class Reference

#include <TelepathyQt/Channel>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Channel.Interface.CallState".


Constructor & Destructor Documentation

Tp::Client::ChannelInterfaceCallStateInterface::ChannelInterfaceCallStateInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfaceCallStateInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ChannelInterfaceCallStateInterface::ChannelInterfaceCallStateInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfaceCallStateInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ChannelInterfaceCallStateInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ChannelInterfaceCallStateInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ChannelInterfaceCallStateInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Channel.Interface.CallState", which this class represents.

Returns:
The D-Bus interface name.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply<Tp::ChannelCallStateMap> Tp::Client::ChannelInterfaceCallStateInterface::GetCallStates ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method GetCallStates on the remote object.

Get the current call states for all contacts involved in this call.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
Returns:

The current call states. Participants where the call state flags would be 0 (all unset) may be omitted from this mapping.

void Tp::Client::ChannelInterfaceCallStateInterface::CallStateChanged ( uint  contact,
uint  state 
) [signal]

Represents the signal CallStateChanged on the remote object.

Emitted when the state of a member of the channel has changed.

Parameters:
contactAn integer handle for the contact.
stateThe new state for this contact.
void Tp::Client::ChannelInterfaceCallStateInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00799.html0000644000175200001440000001154012000060453021637 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::FunctorCaller0< Functor, R > Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00654_source.html0000644000175200001440000001630612000060453023212 0ustar00collabora-develusers00000000000000 pending-send-message.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
pending-send-message.h
00001 
00023 #ifndef _TelepathyQt_pending_send_message_h_HEADER_GUARD_
00024 #define _TelepathyQt_pending_send_message_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/PendingOperation>
00031 #include <TelepathyQt/Types>
00032 
00033 class QDBusPendingCallWatcher;
00034 class QString;
00035 
00036 namespace Tp
00037 {
00038 
00039 class Message;
00040 
00041 class TP_QT_EXPORT PendingSendMessage : public PendingOperation
00042 {
00043     Q_OBJECT
00044     Q_DISABLE_COPY(PendingSendMessage)
00045 
00046 public:
00047     ~PendingSendMessage();
00048 
00049     TextChannelPtr channel() const;
00050 
00051     ContactMessengerPtr messenger() const;
00052 
00053     QString sentMessageToken() const;
00054     Message message() const;
00055 
00056 private Q_SLOTS:
00057     TP_QT_NO_EXPORT void onTextSent(QDBusPendingCallWatcher *watcher);
00058     TP_QT_NO_EXPORT void onMessageSent(QDBusPendingCallWatcher *watcher);
00059     TP_QT_NO_EXPORT void onCDMessageSent(QDBusPendingCallWatcher *watcher);
00060 
00061 private:
00062     friend class TextChannel;
00063     friend class ContactMessenger;
00064 
00065     TP_QT_NO_EXPORT PendingSendMessage(const TextChannelPtr &channel,
00066             const Message &message);
00067     TP_QT_NO_EXPORT PendingSendMessage(const ContactMessengerPtr &messenger,
00068             const Message &message);
00069 
00070     struct Private;
00071     friend struct Private;
00072     Private *mPriv;
00073 };
00074 
00075 } // Tp
00076 
00077 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00658_source.html0000644000175200001440000001301212000060453023205 0ustar00collabora-develusers00000000000000 pending-string-list.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
pending-string-list.h
00001 
00023 #ifndef _TelepathyQt_pending_string_list_h_HEADER_GUARD_
00024 #define _TelepathyQt_pending_string_list_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/PendingOperation>
00031 
00032 #include <QStringList>
00033 
00034 namespace Tp
00035 {
00036 
00037 class TP_QT_EXPORT PendingStringList : public PendingOperation
00038 {
00039     Q_OBJECT
00040     Q_DISABLE_COPY(PendingStringList);
00041 
00042 public:
00043     PendingStringList(const SharedPtr<RefCounted> &object);
00044     PendingStringList(QDBusPendingCall call, const SharedPtr<RefCounted> &object);
00045     ~PendingStringList();
00046 
00047     QStringList result() const;
00048 
00049 protected:
00050     void setResult(const QStringList &result);
00051 
00052 private Q_SLOTS:
00053     TP_QT_NO_EXPORT void watcherFinished(QDBusPendingCallWatcher *watcher);
00054 
00055 private:
00056     struct Private;
00057     friend struct Private;
00058     Private *mPriv;
00059 };
00060 
00061 } // Tp
00062 
00063 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00263.html0000644000175200001440000001123012000060453021615 0ustar00collabora-develusers00000000000000 Tp::MailURL Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MailURL Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

A structure containing the required information to open a web-based e-mail UI, without needing re-authentication (if possible).

Because the URL and POST data frequently contain short-lived credential tokens, a new URL should be requested (by calling one of the methods that returns a Mail_URL) for each visit to the web-based UI, and the URL should be visited soon after it is returned.


Member Data Documentation

The URL to which to send a request.

The HTTP method of the request.

An array of name-value pairs containing the POST data to use when opening the URL. This MUST be an empty array if the Method is not POST.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00353.html0000644000175200001440000001721612000060453021627 0ustar00collabora-develusers00000000000000 Tp::PtrFunctor3< R, Arg1, Arg2, Arg3 > Struct Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PtrFunctor3< R, Arg1, Arg2, Arg3 > Struct Template Reference

#include </home/collabora-devel/kde/src/telepathy-qt4/TelepathyQt/functors.h>

Inherits Tp::BaseFunctor.

List of all members.

Public Types

Public Member Functions

Public Attributes

template<class R, class Arg1, class Arg2, class Arg3>
struct Tp::PtrFunctor3< R, Arg1, Arg2, Arg3 >


Member Typedef Documentation

template<class R , class Arg1 , class Arg2 , class Arg3 >
typedef R(* Tp::PtrFunctor3< R, Arg1, Arg2, Arg3 >::FunctionType)(Arg1, Arg2, Arg3)
template<class R , class Arg1 , class Arg2 , class Arg3 >
typedef R Tp::PtrFunctor3< R, Arg1, Arg2, Arg3 >::ResultType

Constructor & Destructor Documentation

template<class R , class Arg1 , class Arg2 , class Arg3 >
Tp::PtrFunctor3< R, Arg1, Arg2, Arg3 >::PtrFunctor3 ( FunctionType  fn) [inline]

Member Function Documentation

template<class R , class Arg1 , class Arg2 , class Arg3 >
ResultType Tp::PtrFunctor3< R, Arg1, Arg2, Arg3 >::operator() ( Arg1  a1,
Arg2  a2,
Arg3  a3 
) const [inline]

Member Data Documentation

template<class R , class Arg1 , class Arg2 , class Arg3 >
FunctionType Tp::PtrFunctor3< R, Arg1, Arg2, Arg3 >::fn


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01133.html0000644000175200001440000002647112000060453021627 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceContactGroupsInterface Member List
This is the complete list of members for Tp::Client::ConnectionInterfaceContactGroupsInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
AddToGroup(const QString &group, const Tp::UIntList &members, int timeout=-1)Tp::Client::ConnectionInterfaceContactGroupsInterface [inline, slot]
ConnectionInterfaceContactGroupsInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceContactGroupsInterface
ConnectionInterfaceContactGroupsInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceContactGroupsInterface
ConnectionInterfaceContactGroupsInterface(Tp::DBusProxy *proxy)Tp::Client::ConnectionInterfaceContactGroupsInterface
ConnectionInterfaceContactGroupsInterface(const Tp::Client::ConnectionInterface &mainInterface)Tp::Client::ConnectionInterfaceContactGroupsInterface [explicit]
ConnectionInterfaceContactGroupsInterface(const Tp::Client::ConnectionInterface &mainInterface, QObject *parent)Tp::Client::ConnectionInterfaceContactGroupsInterface
GroupRenamed(const QString &oldName, const QString &newName)Tp::Client::ConnectionInterfaceContactGroupsInterface [signal]
GroupsChanged(const Tp::UIntList &contact, const QStringList &added, const QStringList &removed)Tp::Client::ConnectionInterfaceContactGroupsInterface [signal]
GroupsCreated(const QStringList &names)Tp::Client::ConnectionInterfaceContactGroupsInterface [signal]
GroupsRemoved(const QStringList &names)Tp::Client::ConnectionInterfaceContactGroupsInterface [signal]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ConnectionInterfaceContactGroupsInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
RemoveFromGroup(const QString &group, const Tp::UIntList &members, int timeout=-1)Tp::Client::ConnectionInterfaceContactGroupsInterface [inline, slot]
RemoveGroup(const QString &group, int timeout=-1)Tp::Client::ConnectionInterfaceContactGroupsInterface [inline, slot]
RenameGroup(const QString &oldName, const QString &newName, int timeout=-1)Tp::Client::ConnectionInterfaceContactGroupsInterface [inline, slot]
requestAllProperties() const Tp::Client::ConnectionInterfaceContactGroupsInterface [inline]
requestPropertyDisjointGroups() const Tp::Client::ConnectionInterfaceContactGroupsInterface [inline]
requestPropertyGroups() const Tp::Client::ConnectionInterfaceContactGroupsInterface [inline]
requestPropertyGroupStorage() const Tp::Client::ConnectionInterfaceContactGroupsInterface [inline]
SetContactGroups(uint contact, const QStringList &groups, int timeout=-1)Tp::Client::ConnectionInterfaceContactGroupsInterface [inline, slot]
SetGroupMembers(const QString &group, const Tp::UIntList &members, int timeout=-1)Tp::Client::ConnectionInterfaceContactGroupsInterface [inline, slot]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ConnectionInterfaceContactGroupsInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00988.html0000644000175200001440000000457312000060453021647 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::CurrencyAmount Member List
This is the complete list of members for Tp::CurrencyAmount, including all inherited members.
amountTp::CurrencyAmount
currencyTp::CurrencyAmount
scaleTp::CurrencyAmount


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00165.html0000644000175200001440000006422212000060453021627 0ustar00collabora-develusers00000000000000 Tp::Client::ConnectionInterfaceAddressingInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceAddressingInterface Class Reference

#include <TelepathyQt/Connection>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Connection.Interface.Addressing1".


Constructor & Destructor Documentation

Tp::Client::ConnectionInterfaceAddressingInterface::ConnectionInterfaceAddressingInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceAddressingInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ConnectionInterfaceAddressingInterface::ConnectionInterfaceAddressingInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceAddressingInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ConnectionInterfaceAddressingInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ConnectionInterfaceAddressingInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ConnectionInterfaceAddressingInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Connection.Interface.Addressing1", which this class represents.

Returns:
The D-Bus interface name.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply<Tp::AddressingNormalizationMap, Tp::ContactAttributesMap> Tp::Client::ConnectionInterfaceAddressingInterface::GetContactsByVCardField ( const QString &  field,
const QStringList &  addresses,
const QStringList &  interfaces,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method GetContactsByVCardField on the remote object.

Request contacts and retrieve their attributes using a given field in their vCards.

The connection manager should record that these handles are in use by the client who invokes this method, and must not deallocate the handles until the client disconnects from the bus or calls the ConnectionInterface::ReleaseHandles() method.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
field

The vCard field of the addresses we are requesting. The field name SHOULD be in lower case. Supported fields can be found in ProtocolInterfaceAddressingInterface::AddressableVCardFields .

The url vCard field MUST NOT appear here; see GetContactsByURI() instead.

In practice, protocols have a limited set of URI schemes that make sense to resolve as a contact.

addressesThe addresses to get contact handles for. The address types should match the given vCard field.
interfaces

A list of strings indicating which D-Bus interfaces the calling process is interested in. All supported attributes from these interfaces, whose values can be obtained without additional network activity, will be in the reply.

Attributes from this interface and from ConnectionInterface are always returned, and need not be requested explicitly.

The behavior of this parameter is similar to the same parameter in ConnectionInterfaceContactsInterface::GetContactAttributes() .

timeoutThe timeout in milliseconds.
Returns:

A mapping from requested vCard addresses to the corresponding contact handles.

Requested addresses that are not valid or understood for this protocol MUST be omitted from the mapping.

Returns:

A dictionary mapping the contact handles to contact attributes. If any of the requested addresses are in fact invalid, they are simply omitted from this mapping. If contact attributes are not immediately known, the behaviour is defined by the interface; the attribute should either be omitted from the result or replaced with a default value.

Requested addresses that are not valid or understood for this protocol MUST be omitted from the mapping.

Each contact's attributes will always include at least the identifier that would be obtained by inspecting the handle (org.freedesktop.Telepathy.Connection/contact-id).

QDBusPendingReply<Tp::AddressingNormalizationMap, Tp::ContactAttributesMap> Tp::Client::ConnectionInterfaceAddressingInterface::GetContactsByURI ( const QStringList &  URIs,
const QStringList &  interfaces,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method GetContactsByURI on the remote object.

Request contacts and retrieve their attributes using URI addresses.

The connection manager should record that these handles are in use by the client who invokes this method, and must not deallocate the handles until the client disconnects from the bus or calls the ConnectionInterface::ReleaseHandles() method.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
URIsThe URI addresses to get contact handles for. Supported schemes can be found in AddressableURISchemes.
interfaces

A list of strings indicating which D-Bus interfaces the calling process is interested in. All supported attributes from these interfaces, whose values can be obtained without additional network activity, will be in the reply.

Attributes from this interface and from ConnectionInterface are always returned, and need not be requested explicitly.

The behavior of this parameter is similar to the same parameter in ConnectionInterfaceContactsInterface::GetContactAttributes() .

timeoutThe timeout in milliseconds.
Returns:

A mapping of requested URIs to the corresponding contact handles.

Requested URIs that are not valid or understood for this protocol MUST be omitted from the mapping.

Returns:

A dictionary mapping the contact handles to contact attributes. If any of the requested addresses are in fact invalid, they are simply omitted from this mapping. If contact attributes are not immediately known, the behaviour is defined by the interface; the attribute should either be omitted from the result or replaced with a default value.

Requested URIs that are not valid or understood for this protocol MUST be omitted from the mapping.

Each contact's attributes will always include at least the identifier that would be obtained by inspecting the handle (org.freedesktop.Telepathy.Connection/contact-id).

void Tp::Client::ConnectionInterfaceAddressingInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00628_source.html0000644000175200001440000001505012000060453023206 0ustar00collabora-develusers00000000000000 pending-account.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
pending-account.h
00001 
00023 #ifndef _TelepathyQt_pending_account_h_HEADER_GUARD_
00024 #define _TelepathyQt_pending_account_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Account>
00031 #include <TelepathyQt/PendingOperation>
00032 
00033 #include <QString>
00034 #include <QVariantMap>
00035 
00036 class QDBusPendingCallWatcher;
00037 
00038 namespace Tp
00039 {
00040 
00041 class AccountManager;
00042 
00043 class TP_QT_EXPORT PendingAccount : public PendingOperation
00044 {
00045     Q_OBJECT
00046     Q_DISABLE_COPY(PendingAccount);
00047 
00048 public:
00049     ~PendingAccount();
00050 
00051     AccountManagerPtr manager() const;
00052 
00053     AccountPtr account() const;
00054 
00055 private Q_SLOTS:
00056     TP_QT_NO_EXPORT void onCallFinished(QDBusPendingCallWatcher *watcher);
00057     TP_QT_NO_EXPORT void onAccountBuilt(Tp::PendingOperation *readyOp);
00058     TP_QT_NO_EXPORT void onNewAccount(const Tp::AccountPtr &account);
00059 
00060 private:
00061     friend class AccountManager;
00062 
00063     TP_QT_NO_EXPORT PendingAccount(const AccountManagerPtr &manager,
00064             const QString &connectionManager, const QString &protocol,
00065             const QString &displayName, const QVariantMap &parameters,
00066             const QVariantMap &properties = QVariantMap());
00067 
00068     struct Private;
00069     friend struct Private;
00070     Private *mPriv;
00071 };
00072 
00073 } // Tp
00074 
00075 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_func_0x75.html0000644000175200001440000001743712000060453024627 0ustar00collabora-develusers00000000000000 Class Members - Functions
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- u -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00202.html0000644000175200001440000001237412000060453021620 0ustar00collabora-develusers00000000000000 Tp::ContactMediaDescriptionPropertiesMap Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactMediaDescriptionPropertiesMap Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<uint, QVariantMap>, but needed to have a discrete type in the Qt type system.


Constructor & Destructor Documentation

Tp::ContactMediaDescriptionPropertiesMap::ContactMediaDescriptionPropertiesMap ( const QMap< uint, QVariantMap > &  a) [inline]

Member Function Documentation

ContactMediaDescriptionPropertiesMap& Tp::ContactMediaDescriptionPropertiesMap::operator= ( const QMap< uint, QVariantMap > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00972.html0000644000175200001440000000504512000060453021633 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ChannelClass Member List
This is the complete list of members for Tp::ChannelClass, including all inherited members.
ChannelClass()Tp::ChannelClass [inline]
ChannelClass(const QMap< QString, QDBusVariant > &a)Tp::ChannelClass [inline]
operator=(const QMap< QString, QDBusVariant > &a)Tp::ChannelClass [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01047.html0000644000175200001440000000436412000060453021630 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::LastActivityAndStatuses Member List
This is the complete list of members for Tp::LastActivityAndStatuses, including all inherited members.
lastActivityTp::LastActivityAndStatuses
statusesTp::LastActivityAndStatuses


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00476_source.html0000644000175200001440000003741512000060453023220 0ustar00collabora-develusers00000000000000 channel-request.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
channel-request.h
00001 
00023 #ifndef _TelepathyQt_channel_request_h_HEADER_GUARD_
00024 #define _TelepathyQt_channel_request_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/_gen/cli-channel-request.h>
00031 
00032 #include <TelepathyQt/Constants>
00033 #include <TelepathyQt/DBus>
00034 #include <TelepathyQt/DBusProxy>
00035 #include <TelepathyQt/Feature>
00036 #include <TelepathyQt/OptionalInterfaceFactory>
00037 #include <TelepathyQt/ReadinessHelper>
00038 #include <TelepathyQt/Types>
00039 #include <TelepathyQt/SharedPtr>
00040 
00041 #include <QSharedDataPointer>
00042 #include <QString>
00043 #include <QStringList>
00044 #include <QVariantMap>
00045 
00046 namespace Tp
00047 {
00048 
00049 class ChannelRequestHints;
00050 class PendingOperation;
00051 
00052 class TP_QT_EXPORT ChannelRequest : public StatefulDBusProxy,
00053                 public OptionalInterfaceFactory<ChannelRequest>
00054 {
00055     Q_OBJECT
00056     Q_DISABLE_COPY(ChannelRequest)
00057 
00058 public:
00059     static const Feature FeatureCore;
00060 
00061     static ChannelRequestPtr create(const QDBusConnection &bus,
00062             const QString &objectPath, const QVariantMap &immutableProperties,
00063             const AccountFactoryConstPtr &accountFactory,
00064             const ConnectionFactoryConstPtr &connectionFactory,
00065             const ChannelFactoryConstPtr &channelFactory,
00066             const ContactFactoryConstPtr &contactFactory);
00067 
00068     static ChannelRequestPtr create(const AccountPtr &account,
00069             const QString &objectPath, const QVariantMap &immutableProperties);
00070 
00071     virtual ~ChannelRequest();
00072 
00073     AccountPtr account() const;
00074     QDateTime userActionTime() const;
00075     QString preferredHandler() const;
00076     QualifiedPropertyValueMapList requests() const;
00077     ChannelRequestHints hints() const;
00078 
00079     QVariantMap immutableProperties() const;
00080 
00081     PendingOperation *cancel();
00082 
00083     ChannelPtr channel() const;
00084 
00085 Q_SIGNALS:
00086     void failed(const QString &errorName, const QString &errorMessage);
00087     void succeeded(const Tp::ChannelPtr &channel);
00088 
00089 protected:
00090     ChannelRequest(const QDBusConnection &bus,
00091             const QString &objectPath, const QVariantMap &immutableProperties,
00092             const AccountFactoryConstPtr &accountFactory,
00093             const ConnectionFactoryConstPtr &connectionFactory,
00094             const ChannelFactoryConstPtr &channelFactory,
00095             const ContactFactoryConstPtr &contactFactory);
00096 
00097     ChannelRequest(const AccountPtr &account,
00098             const QString &objectPath, const QVariantMap &immutableProperties);
00099 
00100     Client::ChannelRequestInterface *baseInterface() const;
00101 
00102 private Q_SLOTS:
00103     TP_QT_NO_EXPORT void gotMainProperties(QDBusPendingCallWatcher *watcher);
00104     TP_QT_NO_EXPORT void onAccountReady(Tp::PendingOperation *op);
00105 
00106     TP_QT_NO_EXPORT void onLegacySucceeded();
00107     TP_QT_NO_EXPORT void onSucceededWithChannel(const QDBusObjectPath &connPath, const QVariantMap &connProps,
00108             const QDBusObjectPath &chanPath, const QVariantMap &chanProps);
00109     TP_QT_NO_EXPORT void onChanBuilt(Tp::PendingOperation *op);
00110 
00111 private:
00112     friend class PendingChannelRequest;
00113 
00114     PendingOperation *proceed();
00115 
00116     struct Private;
00117     friend struct Private;
00118     Private *mPriv;
00119 };
00120 
00121 class TP_QT_EXPORT ChannelRequestHints
00122 {
00123 public:
00124     ChannelRequestHints();
00125     ChannelRequestHints(const QVariantMap &hints);
00126     ChannelRequestHints(const ChannelRequestHints &other);
00127     ~ChannelRequestHints();
00128 
00129     ChannelRequestHints &operator=(const ChannelRequestHints &other);
00130 
00131     bool isValid() const;
00132 
00133     bool hasHint(const QString &reversedDomain, const QString &localName) const;
00134     QVariant hint(const QString &reversedDomain, const QString &localName) const;
00135     void setHint(const QString &reversedDomain, const QString &localName, const QVariant &value);
00136 
00137     QVariantMap allHints() const;
00138 
00139 private:
00140     struct Private;
00141     friend struct Private;
00142     QSharedDataPointer<Private> mPriv;
00143 };
00144 
00145 } // Tp
00146 
00147 Q_DECLARE_METATYPE(Tp::ChannelRequestHints);
00148 
00149 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00348.html0000644000175200001440000004652412000060453021637 0ustar00collabora-develusers00000000000000 Tp::ProtocolParameter Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ProtocolParameter Class Reference

The ProtocolParameter class represents a Telepathy protocol parameter. More...

#include <TelepathyQt/ProtocolParameter>

List of all members.

Public Member Functions


Detailed Description

The ProtocolParameter class represents a Telepathy protocol parameter.


Constructor & Destructor Documentation

Tp::ProtocolParameter::ProtocolParameter ( const QString &  name,
const QDBusSignature &  dbusSignature,
ConnMgrParamFlags  flags,
QVariant  defaultValue = QVariant() 
)
Tp::ProtocolParameter::ProtocolParameter ( const QString &  name,
const QString &  dbusSignature,
ConnMgrParamFlags  flags,
QVariant  defaultValue = QVariant() 
)

Member Function Documentation

bool Tp::ProtocolParameter::isValid ( ) const [inline]
ProtocolParameter & Tp::ProtocolParameter::operator= ( const ProtocolParameter other)
bool Tp::ProtocolParameter::operator== ( const ProtocolParameter other) const
bool Tp::ProtocolParameter::operator== ( const QString &  name) const
bool Tp::ProtocolParameter::operator< ( const ProtocolParameter other) const
QString Tp::ProtocolParameter::name ( ) const
QDBusSignature Tp::ProtocolParameter::dbusSignature ( ) const
QVariant::Type Tp::ProtocolParameter::type ( ) const


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00240.html0000644000175200001440000002107512000060453021620 0ustar00collabora-develusers00000000000000 Tp::FunctorCaller6< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 > Struct Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::FunctorCaller6< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 > Struct Template Reference

#include </home/collabora-devel/kde/src/telepathy-qt4/TelepathyQt/callbacks.h>

Inherits Tp::BaseFunctorCaller< FunctorCaller6< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >, Functor >.

List of all members.

Public Types

Public Member Functions

Static Public Member Functions

template<class Functor, class R, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6>
struct Tp::FunctorCaller6< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >


Member Typedef Documentation

template<class Functor , class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 , class Arg6 >
typedef R Tp::FunctorCaller6< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >::ResultType
template<class Functor , class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 , class Arg6 >
typedef R(* Tp::FunctorCaller6< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >::InvokeType)(AbstractFunctorCaller *, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6)

Constructor & Destructor Documentation

template<class Functor , class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 , class Arg6 >
Tp::FunctorCaller6< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >::FunctorCaller6 ( const Functor &  functor) [inline, explicit]

Member Function Documentation

template<class Functor , class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 , class Arg6 >
static ResultType Tp::FunctorCaller6< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >::invoke ( AbstractFunctorCaller call,
Arg1  a1,
Arg2  a2,
Arg3  a3,
Arg4  a4,
Arg5  a5,
Arg6  a6 
) [inline, static]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_vars_0x63.html0000644000175200001440000000663612000060453024643 0ustar00collabora-develusers00000000000000 Class Members - Variables
   Home · All Classes · All Namespaces · Modules · Functions · Files


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00008.html0000644000175200001440000000505012000060453021615 0ustar00collabora-develusers00000000000000 accounts/main.cpp
   Home · All Classes · All Namespaces · Modules · Functions · Files
accounts/main.cpp
#include <TelepathyQt/Debug>
#include <TelepathyQt/Constants>
#include <TelepathyQt/Types>

#include <QApplication>
#include <QtGui>

#include "accounts-window.h"

int main(int argc, char **argv)
{
    QApplication app(argc, argv);

    Tp::registerTypes();
    Tp::enableDebug(true);
    Tp::enableWarnings(true);

    AccountsWindow w;
    w.show();

    return app.exec();
}


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00698_source.html0000644000175200001440000002406012000060453023216 0ustar00collabora-develusers00000000000000 simple-stream-tube-handler.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
simple-stream-tube-handler.h
00001 
00023 #ifndef _TelepathyQt_simple_stream_tube_handler_h_HEADER_GUARD_
00024 #define _TelepathyQt_simple_stream_tube_handler_h_HEADER_GUARD_
00025 
00026 #include <TelepathyQt/AbstractClientHandler>
00027 #include <TelepathyQt/ChannelRequestHints>
00028 #include <TelepathyQt/RefCounted>
00029 #include <TelepathyQt/Types>
00030 
00031 #include <QDateTime>
00032 #include <QLinkedList>
00033 #include <QHash>
00034 #include <QQueue>
00035 #include <QSet>
00036 
00037 namespace Tp
00038 {
00039 
00040 class PendingOperation;
00041 
00042 class TP_QT_NO_EXPORT SimpleStreamTubeHandler : public QObject,
00043                 public AbstractClientHandler
00044 {
00045     Q_OBJECT
00046     Q_DISABLE_COPY(SimpleStreamTubeHandler)
00047 
00048 public:
00049     static SharedPtr<SimpleStreamTubeHandler> create(
00050             const QStringList &p2pServices,
00051             const QStringList &roomServices,
00052             bool requested,
00053             bool monitorConnections,
00054             bool bypassApproval = false);
00055     ~SimpleStreamTubeHandler();
00056 
00057     bool monitorsConnections() const
00058     {
00059         return mMonitorConnections;
00060     }
00061 
00062     bool bypassApproval() const
00063     {
00064         return mBypassApproval;
00065     }
00066 
00067     void handleChannels(const MethodInvocationContextPtr<> &context,
00068             const AccountPtr &account,
00069             const ConnectionPtr &connection,
00070             const QList<ChannelPtr> &channels,
00071             const QList<ChannelRequestPtr> &requestsSatisfied,
00072             const QDateTime &userActionTime,
00073             const HandlerInfo &handlerInfo);
00074 
00075 Q_SIGNALS:
00076     void invokedForTube(
00077             const Tp::AccountPtr &account,
00078             const Tp::StreamTubeChannelPtr &tube,
00079             const QDateTime &userActionTime,
00080             const Tp::ChannelRequestHints &requestHints);
00081     void tubeInvalidated(
00082             const Tp::AccountPtr &account,
00083             const Tp::StreamTubeChannelPtr &tube,
00084             const QString &errorName,
00085             const QString &errorMessage);
00086 
00087 private Q_SLOTS:
00088     void onReadyOpFinished(Tp::PendingOperation *);
00089     void onTubeInvalidated(Tp::DBusProxy *, const QString &, const QString &);
00090 
00091 private:
00092     SimpleStreamTubeHandler(
00093             const QStringList &p2pServices,
00094             const QStringList &roomServices,
00095             bool requested,
00096             bool monitorConnections,
00097             bool bypassApproval);
00098 
00099     bool mMonitorConnections;
00100 
00101     struct InvocationData : RefCounted {
00102         InvocationData() : readyOp(0) {}
00103 
00104         PendingOperation *readyOp;
00105         QString error, message;
00106 
00107         MethodInvocationContextPtr<> ctx;
00108         AccountPtr acc;
00109         QList<StreamTubeChannelPtr> tubes;
00110         QDateTime time;
00111         ChannelRequestHints hints;
00112     };
00113     QLinkedList<SharedPtr<InvocationData> > mInvocations;
00114     QHash<StreamTubeChannelPtr, AccountPtr> mTubes;
00115     bool mBypassApproval;
00116 };
00117 
00118 } // Tp
00119 
00120 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00080.html0000644000175200001440000005670012000060453021625 0ustar00collabora-develusers00000000000000 Tp::Client::CallContentInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

#include <TelepathyQt/CallContent>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

  • QDBusPendingReply Remove (int timeout=-1)

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Call1.Content".


Constructor & Destructor Documentation

Tp::Client::CallContentInterface::CallContentInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a CallContentInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::CallContentInterface::CallContentInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a CallContentInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a CallContentInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Member Function Documentation

static QLatin1String Tp::Client::CallContentInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Call1.Content", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property Interfaces of type QStringList.

Extra interfaces provided by this content, such as CallContentInterfaceMediaInterface , ChannelInterfaceHoldInterface or org.freedesktop.Telepathy.Call1.Interface.Mute . This SHOULD NOT include the Content interface itself, and cannot change once the content has been created.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Name of type QString.

The name of the content.

The content name property should be meaningful, so should be given a name which is significant to the user. The name could be the "audio" or "video" string localized, or perhaps include some string identifying the source, such as a webcam identifier.
Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Type of type uint.

The media type of this content.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Disposition of type uint.

The disposition of this content.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Streams of type Tp::ObjectPathList.

The list of CallStreamInterface objects that exist in this content.

In a conference call multiple parties can share one media content (say, audio), but the streaming of that media can either be shared or separate. For example, in a multicast conference all contacts would share one stream, while in a Muji conference there would be a stream for each participant.

Change notification is through the StreamsAdded() and StreamsRemoved() signals.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::CallContentInterface::Remove ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method Remove on the remote object.

Remove the content from the call. This will cause Call1.ContentRemoved((self_handle, User_Requested, "", "")) to be emitted.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.

Represents the signal StreamsAdded on the remote object.

Emitted when streams are added to a call.

Parameters:
streamsThe Streams which were added.
void Tp::Client::CallContentInterface::StreamsRemoved ( const Tp::ObjectPathList streams,
const Tp::CallStateReason reason 
) [signal]

Represents the signal StreamsRemoved on the remote object.

Emitted when streams are removed from a call

Parameters:
streamsThe Streams which were removed.
reasonWhy the content was removed.
void Tp::Client::CallContentInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_vars_0x65.html0000644000175200001440000000354612000060453024642 0ustar00collabora-develusers00000000000000 Class Members - Variables
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- e -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00317.html0000644000175200001440000000765512000060453021635 0ustar00collabora-develusers00000000000000 Tp::PendingDebugMessageList Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingDebugMessageList Class Reference


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00585_source.html0000644000175200001440000000752212000060453023215 0ustar00collabora-develusers00000000000000 global.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
global.h
00001 
00022 #ifndef _TelepathyQt_Farstream_global_h_HEADER_GUARD_
00023 #define _TelepathyQt_Farstream_global_h_HEADER_GUARD_
00024 
00025 #ifndef IN_TP_QT_FARSTREAM_HEADER
00026 #error IN_TP_QT_FARSTREAM_HEADER
00027 #endif
00028 
00029 #include <QtGlobal>
00030 
00031 #ifdef BUILDING_TP_QT_FARSTREAM
00032 #  define TP_QT_FS_EXPORT Q_DECL_EXPORT
00033 #else
00034 #  define TP_QT_FS_EXPORT Q_DECL_IMPORT
00035 #endif
00036 
00037 #if !defined(Q_OS_WIN) && defined(QT_VISIBILITY_AVAILABLE)
00038 #  define TP_QT_FS_NO_EXPORT __attribute__((visibility("hidden")))
00039 #endif
00040 
00041 #ifndef TP_QT_FS_NO_EXPORT
00042 #  define TP_QT_FS_NO_EXPORT
00043 #endif
00044 
00045 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01141.html0000644000175200001440000002203012000060453021611 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceRequestsInterface Member List
This is the complete list of members for Tp::Client::ConnectionInterfaceRequestsInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ChannelClosed(const QDBusObjectPath &removed)Tp::Client::ConnectionInterfaceRequestsInterface [signal]
ConnectionInterfaceRequestsInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceRequestsInterface
ConnectionInterfaceRequestsInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceRequestsInterface
ConnectionInterfaceRequestsInterface(Tp::DBusProxy *proxy)Tp::Client::ConnectionInterfaceRequestsInterface
ConnectionInterfaceRequestsInterface(const Tp::Client::ConnectionInterface &mainInterface)Tp::Client::ConnectionInterfaceRequestsInterface [explicit]
ConnectionInterfaceRequestsInterface(const Tp::Client::ConnectionInterface &mainInterface, QObject *parent)Tp::Client::ConnectionInterfaceRequestsInterface
CreateChannel(const QVariantMap &request, int timeout=-1)Tp::Client::ConnectionInterfaceRequestsInterface [inline, slot]
EnsureChannel(const QVariantMap &request, int timeout=-1)Tp::Client::ConnectionInterfaceRequestsInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ConnectionInterfaceRequestsInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
NewChannels(const Tp::ChannelDetailsList &channels)Tp::Client::ConnectionInterfaceRequestsInterface [signal]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ConnectionInterfaceRequestsInterface [inline]
requestPropertyChannels() const Tp::Client::ConnectionInterfaceRequestsInterface [inline]
requestPropertyRequestableChannelClasses() const Tp::Client::ConnectionInterfaceRequestsInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ConnectionInterfaceRequestsInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00783.html0000644000175200001440000000521512000060453021632 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AvatarData Member List
This is the complete list of members for Tp::AvatarData, including all inherited members.
AvatarData(const QString &fileName, const QString &mimeType)Tp::AvatarData [inline]
AvatarData()Tp::AvatarData [inline]
fileNameTp::AvatarData
mimeTypeTp::AvatarData


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00324.html0000644000175200001440000002450312000060453021622 0ustar00collabora-develusers00000000000000 Tp::PendingStreamTubeConnection Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingStreamTubeConnection Class Reference

The PendingStreamTubeConnection class represents an asynchronous operation for accepting an incoming stream tube. More...

#include <TelepathyQt/PendingStreamTubeConnection>

Inherits Tp::PendingOperation.

List of all members.

Public Member Functions


Detailed Description

The PendingStreamTubeConnection class represents an asynchronous operation for accepting an incoming stream tube.

See Asynchronous Object Model


Constructor & Destructor Documentation


Member Function Documentation

Return the type of the opened stream tube socket.

Returns:
The socket type as SocketAddressType.
See also:
localAddress(), ipAddress()
QPair< QHostAddress, quint16 > Tp::PendingStreamTubeConnection::ipAddress ( ) const

Return the IP address/port combination of the opened stream tube socket.

This method will return a meaningful value only if the incoming stream tube was accepted as a TCP socket.

Returns:
Pair of IP address as QHostAddress and port if using a TCP socket, or an undefined value otherwise.
See also:
addressType(), localAddress()

Return the local address of the opened stream tube socket.

This method will return a meaningful value only if the incoming stream tube was accepted as an Unix socket.

Returns:
Unix socket address if using an Unix socket, or an undefined value otherwise.
See also:
addressType(), ipAddress()

Return whether sending a credential byte once connecting to the socket is required.

Note that if this method returns true, one should send a SCM_CREDS or SCM_CREDENTIALS and the credentialByte() once connected. If SCM_CREDS or SCM_CREDENTIALS cannot be sent, the credentialByte() should still be sent.

Returns:
true if sending credentials is required, false otherwise.
See also:
credentialByte()

Return the credential byte to send once connecting to the socket if requiresCredentials() is true.

Returns:
The credential byte.
See also:
requiresCredentials()


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01142.html0000644000175200001440000001775612000060453021635 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceServicePointInterface Member List
This is the complete list of members for Tp::Client::ConnectionInterfaceServicePointInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ConnectionInterfaceServicePointInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceServicePointInterface
ConnectionInterfaceServicePointInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceServicePointInterface
ConnectionInterfaceServicePointInterface(Tp::DBusProxy *proxy)Tp::Client::ConnectionInterfaceServicePointInterface
ConnectionInterfaceServicePointInterface(const Tp::Client::ConnectionInterface &mainInterface)Tp::Client::ConnectionInterfaceServicePointInterface [explicit]
ConnectionInterfaceServicePointInterface(const Tp::Client::ConnectionInterface &mainInterface, QObject *parent)Tp::Client::ConnectionInterfaceServicePointInterface
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ConnectionInterfaceServicePointInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ConnectionInterfaceServicePointInterface [inline]
requestPropertyKnownServicePoints() const Tp::Client::ConnectionInterfaceServicePointInterface [inline]
ServicePointsChanged(const Tp::ServicePointInfoList &servicePoints)Tp::Client::ConnectionInterfaceServicePointInterface [signal]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ConnectionInterfaceServicePointInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00130.html0000644000175200001440000005214012000060453021613 0ustar00collabora-develusers00000000000000 Tp::Client::ChannelInterfacePasswordInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelInterfacePasswordInterface Class Reference

#include <TelepathyQt/Channel>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Channel.Interface.Password".


Constructor & Destructor Documentation

Tp::Client::ChannelInterfacePasswordInterface::ChannelInterfacePasswordInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfacePasswordInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ChannelInterfacePasswordInterface::ChannelInterfacePasswordInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfacePasswordInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ChannelInterfacePasswordInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ChannelInterfacePasswordInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ChannelInterfacePasswordInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

static QLatin1String Tp::Client::ChannelInterfacePasswordInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Channel.Interface.Password", which this class represents.

Returns:
The D-Bus interface name.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply<uint> Tp::Client::ChannelInterfacePasswordInterface::GetPasswordFlags ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method GetPasswordFlags on the remote object.

Returns the bitwise-OR of the flags relevant to the password on this channel. The user interface can use this to present information about which operations are currently valid.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
Returns:

An integer with the logical OR of all the flags set (values of ChannelPasswordFlags)

QDBusPendingReply<bool> Tp::Client::ChannelInterfacePasswordInterface::ProvidePassword ( const QString &  password,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method ProvidePassword on the remote object.

Provide the password so that the channel can be joined. Must be called with the correct password in order for channel joining to proceed if the 'provide' password flag is set.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
passwordThe password
timeoutThe timeout in milliseconds.
Returns:

A boolean indicating whether or not the password was correct

void Tp::Client::ChannelInterfacePasswordInterface::PasswordFlagsChanged ( uint  added,
uint  removed 
) [signal]

Represents the signal PasswordFlagsChanged on the remote object.

Emitted when the flags as returned by GetPasswordFlags are changed. The user interface should be updated as appropriate.

Parameters:
addedA bitwise OR of the flags which have been set
removedA bitwise OR of the flags which have been cleared
void Tp::Client::ChannelInterfacePasswordInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00749.html0000644000175200001440000000421712000060453021635 0ustar00collabora-develusers00000000000000 Connection service implementation
   Home · All Classes · All Namespaces · Modules · Functions · Files
Connection service implementation

Classes


Detailed Description

Classes to implement Telepathy Connection objects and their optional interfaces.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/hierarchy.html0000644000175200001440000010416012000060453022765 0ustar00collabora-develusers00000000000000 Class Hierarchy
   Home · All Classes · All Namespaces · Modules · Functions · Files
Class Hierarchy
This inheritance list is sorted roughly, but not completely, alphabetically:


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00700_source.html0000644000175200001440000001701112000060453023174 0ustar00collabora-develusers00000000000000 simple-text-observer.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
simple-text-observer.h
00001 
00023 #ifndef _TelepathyQt_simple_text_observer_h_HEADER_GUARD_
00024 #define _TelepathyQt_simple_text_observer_h_HEADER_GUARD_
00025 
00026 #include <TelepathyQt/Constants>
00027 #include <TelepathyQt/Types>
00028 
00029 #include <QObject>
00030 
00031 namespace Tp
00032 {
00033 
00034 class Message;
00035 class PendingOperation;
00036 class ReceivedMessage;
00037 
00038 class TP_QT_EXPORT SimpleTextObserver : public QObject, public RefCounted
00039 {
00040     Q_OBJECT
00041     Q_DISABLE_COPY(SimpleTextObserver)
00042 
00043 public:
00044     static SimpleTextObserverPtr create(const AccountPtr &account);
00045     static SimpleTextObserverPtr create(const AccountPtr &account,
00046             const ContactPtr &contact);
00047     static SimpleTextObserverPtr create(const AccountPtr &account,
00048             const QString &contactIdentifier);
00049 
00050     virtual ~SimpleTextObserver();
00051 
00052     AccountPtr account() const;
00053     QString contactIdentifier() const;
00054 
00055     QList<TextChannelPtr> textChats() const;
00056 
00057 Q_SIGNALS:
00058     void messageSent(const Tp::Message &message, Tp::MessageSendingFlags flags,
00059             const QString &sentMessageToken, const Tp::TextChannelPtr &channel);
00060     void messageReceived(const Tp::ReceivedMessage &message, const Tp::TextChannelPtr &channel);
00061 
00062 private Q_SLOTS:
00063     TP_QT_NO_EXPORT void onNewChannels(const QList<Tp::ChannelPtr> &channels);
00064     TP_QT_NO_EXPORT void onChannelInvalidated(const Tp::ChannelPtr &channel);
00065 
00066 private:
00067     TP_QT_NO_EXPORT static SimpleTextObserverPtr create(const AccountPtr &account,
00068             const QString &contactIdentifier, bool requiresNormalization);
00069 
00070     TP_QT_NO_EXPORT SimpleTextObserver(const AccountPtr &account,
00071             const QString &contactIdentifier, bool requiresNormalization);
00072 
00073     struct Private;
00074     friend struct Private;
00075     Private *mPriv;
00076 };
00077 
00078 } // Tp
00079 
00080 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00229.html0000644000175200001440000001203312000060453021621 0ustar00collabora-develusers00000000000000 Tp::FieldSpec Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::FieldSpec Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

A struct describing a vCard field, with parameters, that may be passed to SetContactInfo on this Connection.


Member Data Documentation

A vCard field name, such as 'tel'.

The set of vCard type parameters which may be set on this field. If this list is empty and the Contact_Info_Field_Flag_Parameters_Exact flag is not set, any vCard type parameters may be used.

Flags describing the behaviour of this field.

Maximum number of instances of this field which may be set. MAXUINT32 is used to indicate that there is no limit.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_0x7e.html0000644000175200001440000004720112000060453023664 0ustar00collabora-develusers00000000000000 Class Members
   Home · All Classes · All Namespaces · Modules · Functions · Files
Here is a list of all class members with links to the classes they belong to:

- ~ -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00168.html0000644000175200001440000013576412000060453021644 0ustar00collabora-develusers00000000000000 Tp::Client::ConnectionInterfaceAvatarsInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceAvatarsInterface Class Reference

#include <TelepathyQt/Connection>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

  • void AvatarUpdated (uint contact, const QString &newAvatarToken)
  • void AvatarRetrieved (uint contact, const QString &token, const QByteArray &avatar, const QString &type)

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Connection.Interface.Avatars".


Constructor & Destructor Documentation

Tp::Client::ConnectionInterfaceAvatarsInterface::ConnectionInterfaceAvatarsInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceAvatarsInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ConnectionInterfaceAvatarsInterface::ConnectionInterfaceAvatarsInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceAvatarsInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ConnectionInterfaceAvatarsInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ConnectionInterfaceAvatarsInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ConnectionInterfaceAvatarsInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Connection.Interface.Avatars", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property SupportedAvatarMIMETypes of type QStringList.

An array of supported MIME types (e.g. "image/jpeg"). Clients MAY assume that the first type in this array is preferred. This property cannot change after the Connection goes to the Connected state.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property MinimumAvatarHeight of type uint.

The minimum height in pixels of an avatar on this protocol, which MAY be 0. This property cannot change after the Connection goes to the Connected state.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property MinimumAvatarWidth of type uint.

The minimum width in pixels of an avatar on this protocol, which MAY be 0. This property cannot change after the Connection goes to the Connected state.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property RecommendedAvatarHeight of type uint.

The recommended height in pixels of an avatar on this protocol, or 0 if there is no preferred height. This property cannot change after the Connection goes to the Connected state. In XMPP a recommended width is given by the protocol specification; in proprietary protocols, using the same avatar size as the proprietary client is likely to lead to the best display to other users.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property RecommendedAvatarWidth of type uint.

The recommended width in pixels of an avatar on this protocol, or 0 if there is no preferred width. This property cannot change after the Connection goes to the Connected state. The rationale is the same as for RecommendedAvatarHeight.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property MaximumAvatarHeight of type uint.

The maximum height in pixels of an avatar on this protocol, or 0 if there is no limit. This property cannot change after the Connection goes to the Connected state.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property MaximumAvatarWidth of type uint.

The maximum width in pixels of an avatar on this protocol, or 0 if there is no limit. This property cannot change after the Connection goes to the Connected state.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property MaximumAvatarBytes of type uint.

The maximum size in bytes of an avatar on this protocol, or 0 if there is no limit. This property cannot change after the Connection goes to the Connected state.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply<QStringList, ushort, ushort, ushort, ushort, uint> Tp::Client::ConnectionInterfaceAvatarsInterface::GetAvatarRequirements ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method GetAvatarRequirements on the remote object.

Get the required format of avatars on this connection.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
Returns:

An array of supported MIME types (eg image/jpeg)

Returns:

The minimum image width in pixels

Returns:

The minimum image height in pixels

Returns:

The maximum image width in pixels, or 0 if there is no limit

Returns:

The maximum image height in pixels, or 0 if there is no limit

Returns:

The maximum image size in bytes, or 0 if there is no limit

QDBusPendingReply<QStringList> Tp::Client::ConnectionInterfaceAvatarsInterface::GetAvatarTokens ( const Tp::UIntList contacts,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method GetAvatarTokens on the remote object.

Get the unique tokens for all of the given contacts' avatars. Using this method in new Telepathy clients is deprecated; use GetKnownAvatarTokens instead.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
contactsAn array of handles representing contacts
timeoutThe timeout in milliseconds.
Returns:

An array of avatar tokens or empty strings (if no avatar is set) in the same order as the given array of contact handles

QDBusPendingReply<Tp::AvatarTokenMap> Tp::Client::ConnectionInterfaceAvatarsInterface::GetKnownAvatarTokens ( const Tp::UIntList contacts,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method GetKnownAvatarTokens on the remote object.

Get the unique tokens for the given contacts' avatars. These tokens can be persisted across connections, and should be used by the client to check whether the avatars have been updated. For handles other than the self handle, only tokens that are already known are returned; an empty token means the given contact has no avatar. However, a CM must always have the tokens for the self handle if one is set (even if it is set to no avatar). On protocols where the avatar does not persist between connections, a CM should omit the self handle from the returned map until an avatar is explicitly set or cleared.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
contactsAn array of handles representing contacts
timeoutThe timeout in milliseconds.
Returns:

A dictionary of handles mapped to avatar tokens, containing only the known avatar tokens.

QDBusPendingReply<QByteArray, QString> Tp::Client::ConnectionInterfaceAvatarsInterface::RequestAvatar ( uint  contact,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method RequestAvatar on the remote object.

Request the avatar for a given contact. Using this method in new Telepathy clients is deprecated; use RequestAvatars instead.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
contactAn integer handle for the contact to request the avatar for
timeoutThe timeout in milliseconds.
Returns:

An array of bytes containing the image data

Returns:

A string containing the image MIME type (eg image/jpeg), or empty if unknown

QDBusPendingReply Tp::Client::ConnectionInterfaceAvatarsInterface::RequestAvatars ( const Tp::UIntList contacts,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method RequestAvatars on the remote object.

Request avatars for a number of contacts. The AvatarRetrieved signal is emitted for each avatar retrieved. If the handles are valid but retrieving an avatar fails (for any reason, including the contact not having an avatar) the AvatarRetrieved signal is not emitted for that contact.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
contactsThe contacts to retrieve avatars for
timeoutThe timeout in milliseconds.
QDBusPendingReply<QString> Tp::Client::ConnectionInterfaceAvatarsInterface::SetAvatar ( const QByteArray &  avatar,
const QString &  MIMEType,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method SetAvatar on the remote object.

Set a new avatar image for this connection. The avatar image must respect the requirements obtained by GetAvatarRequirements.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
avatarAn array of bytes representing the avatar image data
MIMETypeA string representing the image MIME type
timeoutThe timeout in milliseconds.
Returns:

The string token of the new avatar

QDBusPendingReply Tp::Client::ConnectionInterfaceAvatarsInterface::ClearAvatar ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method ClearAvatar on the remote object.

Remove the avatar image for this connection.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
void Tp::Client::ConnectionInterfaceAvatarsInterface::AvatarUpdated ( uint  contact,
const QString &  newAvatarToken 
) [signal]

Represents the signal AvatarUpdated on the remote object.

Emitted when the avatar for a contact has been updated, or first discovered on this connection. If the token differs from the token associated with the client's cached avatar for this contact, the new avatar should be requested with RequestAvatars.

Parameters:
contactAn integer handle for the contact whose avatar has changed
newAvatarTokenUnique token for their new avatar
void Tp::Client::ConnectionInterfaceAvatarsInterface::AvatarRetrieved ( uint  contact,
const QString &  token,
const QByteArray &  avatar,
const QString &  type 
) [signal]

Represents the signal AvatarRetrieved on the remote object.

Emitted when the avatar for a contact has been retrieved.

Parameters:
contactThe contact whose avatar has been retrieved
tokenThe token corresponding to the avatar
avatarAn array of bytes containing the image data
typeA string containing the image MIME type (eg image/jpeg), or empty if unknown
void Tp::Client::ConnectionInterfaceAvatarsInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_vars_0x77.html0000644000175200001440000000320212000060453024632 0ustar00collabora-develusers00000000000000 Class Members - Variables
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- w -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00339.html0000644000175200001440000006261012000060453021631 0ustar00collabora-develusers00000000000000 Tp::Client::PropertiesInterfaceInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

#include <TelepathyQt/Properties>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Properties".


Constructor & Destructor Documentation

Tp::Client::PropertiesInterfaceInterface::PropertiesInterfaceInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a PropertiesInterfaceInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::PropertiesInterfaceInterface::PropertiesInterfaceInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a PropertiesInterfaceInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a PropertiesInterfaceInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a PropertiesInterfaceInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a PropertiesInterfaceInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

static QLatin1String Tp::Client::PropertiesInterfaceInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Properties", which this class represents.

Returns:
The D-Bus interface name.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply<Tp::PropertyValueList> Tp::Client::PropertiesInterfaceInterface::GetProperties ( const Tp::UIntList properties,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method GetProperties on the remote object.

Returns an array of (identifier, value) pairs containing the current values of the given properties.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
propertiesAn array of property identifiers
timeoutThe timeout in milliseconds.
Returns:

An array of structs containing:

  • integer identifiers
  • variant boxed values
QDBusPendingReply<Tp::PropertySpecList> Tp::Client::PropertiesInterfaceInterface::ListProperties ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method ListProperties on the remote object.

Returns a dictionary of the properties available on this channel.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
Returns:

An array of structs containing: an integer identifier a string property name a string representing the D-Bus signature of this property a bitwise OR of the flags applicable to this property

QDBusPendingReply Tp::Client::PropertiesInterfaceInterface::SetProperties ( const Tp::PropertyValueList properties,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method SetProperties on the remote object.

Takes an array of (identifier, value) pairs containing desired values to set the given properties. In the case of any errors, no properties will be changed. When the changes have been acknowledged by the server, the PropertiesChanged signal will be emitted.

All properties given must have the PROPERTY_FLAG_WRITE flag, or PermissionDenied will be returned. If any variants are of the wrong type, NotAvailable will be returned. If any given property identifiers are invalid, InvalidArgument will be returned.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
propertiesAn array mapping integer property identifiers to boxed values
timeoutThe timeout in milliseconds.

Represents the signal PropertiesChanged on the remote object.

Emitted when the value of readable properties has changed.

Parameters:
properties

An array of structs containing:

  • integer identifiers
  • variant boxed values

The array should contain only properties whose values have actually changed.

Represents the signal PropertyFlagsChanged on the remote object.

Emitted when the flags of some room properties have changed.

Parameters:
properties

An array of structs containing:

  • integer identifiers
  • a bitwise OR of the current flags

The array should contain only properties whose flags have actually changed.

void Tp::Client::PropertiesInterfaceInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00708_source.html0000644000175200001440000006607312000060453023220 0ustar00collabora-develusers00000000000000 streamed-media-channel.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
streamed-media-channel.h
00001 
00023 #ifndef _TelepathyQt_streamed_media_channel_h_HEADER_GUARD_
00024 #define _TelepathyQt_streamed_media_channel_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Channel>
00031 #include <TelepathyQt/PendingOperation>
00032 #include <TelepathyQt/Object>
00033 #include <TelepathyQt/SharedPtr>
00034 #include <TelepathyQt/Types>
00035 
00036 namespace Tp
00037 {
00038 
00039 class StreamedMediaChannel;
00040 
00041 typedef QList<StreamedMediaStreamPtr> StreamedMediaStreams;
00042 
00043 class TP_QT_EXPORT_DEPRECATED PendingStreamedMediaStreams : public PendingOperation
00044 {
00045     Q_OBJECT
00046     Q_DISABLE_COPY(PendingStreamedMediaStreams)
00047 
00048 public:
00049     ~PendingStreamedMediaStreams();
00050 
00051     StreamedMediaChannelPtr channel() const;
00052 
00053     StreamedMediaStreams streams() const;
00054 
00055 private Q_SLOTS:
00056     TP_QT_NO_EXPORT void gotStreams(QDBusPendingCallWatcher *op);
00057 
00058     TP_QT_NO_EXPORT void onStreamRemoved(const Tp::StreamedMediaStreamPtr &stream);
00059     TP_QT_NO_EXPORT void onStreamReady(Tp::PendingOperation *op);
00060 
00061 private:
00062     friend class StreamedMediaChannel;
00063 
00064     TP_QT_NO_EXPORT PendingStreamedMediaStreams(const StreamedMediaChannelPtr &channel,
00065             const ContactPtr &contact,
00066             const QList<MediaStreamType> &types);
00067 
00068     struct Private;
00069     friend struct Private;
00070     Private *mPriv;
00071 };
00072 
00073 class TP_QT_EXPORT_DEPRECATED StreamedMediaStream : public Object, private ReadyObject
00074 {
00075     Q_OBJECT
00076     Q_DISABLE_COPY(StreamedMediaStream)
00077 
00078 public:
00079     enum SendingState {
00080         SendingStateNone = 0,
00081         SendingStatePendingSend = 1,
00082         SendingStateSending = 2
00083     };
00084 
00085     ~StreamedMediaStream();
00086 
00087     StreamedMediaChannelPtr channel() const;
00088 
00089     uint id() const;
00090 
00091     ContactPtr contact() const;
00092 
00093     MediaStreamState state() const;
00094     MediaStreamType type() const;
00095 
00096     SendingState localSendingState() const;
00097     SendingState remoteSendingState() const;
00098 
00099     bool sending() const;
00100     bool receiving() const;
00101 
00102     bool localSendingRequested() const;
00103     bool remoteSendingRequested() const;
00104 
00105     MediaStreamDirection direction() const;
00106     MediaStreamPendingSend pendingSend() const;
00107 
00108     PendingOperation *requestSending(bool send);
00109     PendingOperation *requestReceiving(bool receive);
00110 
00111     PendingOperation *requestDirection(MediaStreamDirection direction);
00112     PendingOperation *requestDirection(bool send, bool receive);
00113 
00114     PendingOperation *startDTMFTone(DTMFEvent event);
00115     PendingOperation *stopDTMFTone();
00116 
00117 Q_SIGNALS:
00118     void localSendingStateChanged(Tp::StreamedMediaStream::SendingState localSendingState);
00119     void remoteSendingStateChanged(Tp::StreamedMediaStream::SendingState remoteSendingState);
00120 
00121 private Q_SLOTS:
00122     TP_QT_NO_EXPORT void gotContact(Tp::PendingOperation *op);
00123 
00124 private:
00125     friend class PendingStreamedMediaStreams;
00126     friend class StreamedMediaChannel;
00127 
00128     static const Feature FeatureCore;
00129 
00130     TP_QT_NO_EXPORT StreamedMediaStream(const StreamedMediaChannelPtr &channel, const MediaStreamInfo &info);
00131 
00132     TP_QT_NO_EXPORT void gotDirection(uint direction, uint pendingSend);
00133     TP_QT_NO_EXPORT void gotStreamState(uint state);
00134 
00135     struct Private;
00136     friend struct Private;
00137     Private *mPriv;
00138 };
00139 
00140 class TP_QT_EXPORT_DEPRECATED StreamedMediaChannel : public Channel
00141 {
00142     Q_OBJECT
00143     Q_DISABLE_COPY(StreamedMediaChannel)
00144     Q_ENUMS(StateChangeReason)
00145 
00146 public:
00147     static const Feature FeatureCore;
00148     static const Feature FeatureStreams;
00149     static const Feature FeatureLocalHoldState;
00150 
00151     enum StateChangeReason {
00152         StateChangeReasonUnknown = 0,
00153         StateChangeReasonUserRequested = 1
00154     };
00155 
00156     static StreamedMediaChannelPtr create(const ConnectionPtr &connection,
00157             const QString &objectPath, const QVariantMap &immutableProperties);
00158 
00159     virtual ~StreamedMediaChannel();
00160 
00161     bool awaitingLocalAnswer() const;
00162     bool awaitingRemoteAnswer() const;
00163 
00164     PendingOperation *acceptCall();
00165     PendingOperation *hangupCall();
00166 
00167     StreamedMediaStreams streams() const;
00168     StreamedMediaStreams streamsForType(MediaStreamType type) const;
00169 
00170     PendingStreamedMediaStreams *requestStream(const ContactPtr &contact, MediaStreamType type);
00171     PendingStreamedMediaStreams *requestStreams(const ContactPtr &contact, QList<MediaStreamType> types);
00172 
00173     PendingOperation *removeStream(const StreamedMediaStreamPtr &stream);
00174     PendingOperation *removeStreams(const StreamedMediaStreams &streams);
00175 
00176     bool handlerStreamingRequired() const;
00177 
00178     LocalHoldState localHoldState() const;
00179     LocalHoldStateReason localHoldStateReason() const;
00180     PendingOperation *requestHold(bool hold);
00181 
00182 Q_SIGNALS:
00183     void streamAdded(const Tp::StreamedMediaStreamPtr &stream);
00184     void streamRemoved(const Tp::StreamedMediaStreamPtr &stream);
00185     void streamDirectionChanged(const Tp::StreamedMediaStreamPtr &stream,
00186             Tp::MediaStreamDirection direction,
00187             Tp::MediaStreamPendingSend pendingSend);
00188     void streamStateChanged(const Tp::StreamedMediaStreamPtr &stream,
00189             Tp::MediaStreamState state);
00190     void streamError(const Tp::StreamedMediaStreamPtr &stream,
00191             Tp::MediaStreamError errorCode,
00192             const QString &errorMessage);
00193 
00194     void localHoldStateChanged(Tp::LocalHoldState state,
00195             Tp::LocalHoldStateReason reason);
00196 
00197 protected:
00198     StreamedMediaChannel(const ConnectionPtr &connection,
00199             const QString &objectPath, const QVariantMap &immutableProperties,
00200             const Feature &coreFeature = StreamedMediaChannel::FeatureCore);
00201 
00202 private Q_SLOTS:
00203     TP_QT_NO_EXPORT void onStreamReady(Tp::PendingOperation *op);
00204 
00205     TP_QT_NO_EXPORT void gotStreams(QDBusPendingCallWatcher *);
00206     TP_QT_NO_EXPORT void onStreamAdded(uint, uint, uint);
00207     TP_QT_NO_EXPORT void onStreamRemoved(uint);
00208     TP_QT_NO_EXPORT void onStreamDirectionChanged(uint, uint, uint);
00209     TP_QT_NO_EXPORT void onStreamStateChanged(uint streamId, uint streamState);
00210     TP_QT_NO_EXPORT void onStreamError(uint, uint, const QString &);
00211 
00212     TP_QT_NO_EXPORT void gotLocalHoldState(QDBusPendingCallWatcher *);
00213     TP_QT_NO_EXPORT void onLocalHoldStateChanged(uint, uint);
00214 
00215 private:
00216     friend class PendingStreamedMediaStreams;
00217 
00218     StreamedMediaStreamPtr addStream(const MediaStreamInfo &streamInfo);
00219     StreamedMediaStreamPtr lookupStreamById(uint streamId);
00220 
00221     struct Private;
00222     friend struct Private;
00223     Private *mPriv;
00224 };
00225 
00226 } // Tp
00227 
00228 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00919.html0000644000175200001440000001000212000060453021621 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Profile::Presence Member List
This is the complete list of members for Tp::Profile::Presence, including all inherited members.
canHaveStatusMessage() const Tp::Profile::Presence
iconName() const Tp::Profile::Presence
id() const Tp::Profile::Presence
isDisabled() const Tp::Profile::Presence
label() const Tp::Profile::Presence
operator=(const Presence &other)Tp::Profile::Presence
Presence()Tp::Profile::Presence
Presence(const Presence &other)Tp::Profile::Presence
Presence(const QString &id, const QString &label, const QString &iconName, const QString &message, bool disabled)Tp::Profile::Presence
~Presence()Tp::Profile::Presence


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00540_source.html0000644000175200001440000001772412000060453023211 0ustar00collabora-develusers00000000000000 contact-factory.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
contact-factory.h
00001 
00023 #ifndef _TelepathyQt_contact_factory_h_HEADER_GUARD_
00024 #define _TelepathyQt_contact_factory_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Contact>
00031 #include <TelepathyQt/Feature>
00032 #include <TelepathyQt/Global>
00033 #include <TelepathyQt/Types>
00034 
00035 #include <QSet>
00036 #include <QtGlobal>
00037 
00038 namespace Tp
00039 {
00040 
00041 class ContactManager;
00042 class ReferencedHandles;
00043 
00044 class TP_QT_EXPORT ContactFactory : public RefCounted
00045 {
00046     Q_DISABLE_COPY(ContactFactory)
00047 
00048 public:
00049     static ContactFactoryPtr create(const Features &features = Features());
00050 
00051     virtual ~ContactFactory();
00052 
00053     Features features() const;
00054 
00055     void addFeature(const Feature &feature);
00056     void addFeatures(const Features &features);
00057 
00058 protected:
00059     ContactFactory(const Features &features);
00060 
00061     virtual ContactPtr construct(ContactManager *manager, const ReferencedHandles &handle,
00062             const Features &features, const QVariantMap &attributes) const;
00063     virtual PendingOperation *prepare(const ContactPtr &contact) const;
00064 
00065 private:
00066     friend class ContactManager;
00067     friend class PendingContacts;
00068 
00069     struct Private;
00070     friend struct Private;
00071     Private *mPriv;
00072 };
00073 
00074 } // Tp
00075 
00076 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00144.html0000644000175200001440000015015412000060453021624 0ustar00collabora-develusers00000000000000 Tp::Client::ChannelTypeFileTransferInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

#include <TelepathyQt/Channel>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

  • QDBusPendingReply< QDBusVariant > AcceptFile (uint addressType, uint accessControl, const QDBusVariant &accessControlParam, qulonglong offset, int timeout=-1)
  • QDBusPendingReply< QDBusVariant > ProvideFile (uint addressType, uint accessControl, const QDBusVariant &accessControlParam, int timeout=-1)

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Channel.Type.FileTransfer".


Constructor & Destructor Documentation

Tp::Client::ChannelTypeFileTransferInterface::ChannelTypeFileTransferInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelTypeFileTransferInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ChannelTypeFileTransferInterface::ChannelTypeFileTransferInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelTypeFileTransferInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ChannelTypeFileTransferInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ChannelTypeFileTransferInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ChannelTypeFileTransferInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

static QLatin1String Tp::Client::ChannelTypeFileTransferInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Channel.Type.FileTransfer", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property State of type uint.

The state of the file transfer as described by the File_Transfer_State enum.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property ContentType of type QString.

The file's MIME type. This cannot change once the channel has been created.

This property is mandatory when requesting the channel with the ConnectionInterfaceRequestsInterface::CreateChannel() method. Protocols which do not have a content-type property with file transfers should set this value to application/octet-stream.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Filename of type QString.

The name of the file on the sender's side. This is therefore given as a suggested filename for the receiver. This cannot change once the channel has been created.

This property should be the basename of the file being sent. For example, if the sender sends the file /home/user/monkey.pdf then this property should be set to monkey.pdf.

This property is mandatory when requesting the channel with the ConnectionInterfaceRequestsInterface::CreateChannel() method. This property cannot be empty and MUST be set to a sensible value.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Size of type qulonglong.

The size of the file. If this property is set, then the file transfer is guaranteed to be this size. This cannot change once the channel has been created.

When you are creating a channel with this property, its value MUST be accurate and in bytes. However, when receiving a file, this property still MUST be in bytes but might not be entirely accurate to the byte.

This property is mandatory when requesting the channel with the ConnectionInterfaceRequestsInterface::CreateChannel() method. If this information isn't provided in the protocol, connection managers MUST set it to UINT64_MAX.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property ContentHashType of type uint.

The type of the ContentHash property.

This property is optional when requesting the channel with the ConnectionInterfaceRequestsInterface::CreateChannel() method. However, if you wish to include the ContentHash property you MUST also include this property. If you omit this property from a ConnectionInterfaceRequestsInterface::CreateChannel() method call then its value will be assumed to be File_Hash_Type_None.

For each supported hash type, implementations SHOULD include an entry in ConnectionInterfaceRequestsInterface::RequestableChannelClasses with this property fixed to that hash type. If the protocol supports offering a file without a content hash, implementations SHOULD list this property in Allowed in a requestable channel class, mapping hash types they don't understand to None.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property ContentHash of type QString.

Hash of the contents of the file transfer, of type described in the value of the ContentHashType property.

This property is optional when requesting the channel with the ConnectionInterfaceRequestsInterface::CreateChannel() method. Its value MUST correspond to the appropriate type of the ContentHashType property. If the ContentHashType property is not set, or set to File_Hash_Type_None, then this property will not even be looked at.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Description of type QString.

Description of the file transfer. This cannot change once the channel has been created.

This property is optional when requesting the channel with the ConnectionInterfaceRequestsInterface::CreateChannel() method. If this property was not provided by the remote party, connection managers MUST set it to the empty string.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Date of type qlonglong.

The last modification time of the file being transferred. This cannot change once the channel has been created

This property is optional when requesting the channel with the ConnectionInterfaceRequestsInterface::CreateChannel() method.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property AvailableSocketTypes of type Tp::SupportedSocketMap.

A mapping from address types (members of Socket_Address_Type) to arrays of access-control type (members of Socket_Access_Control) that the connection manager supports for sockets with that address type. For simplicity, if a CM supports offering a particular type of file transfer, it is assumed to support accepting it. Connection Managers MUST support at least Socket_Address_Type_IPv4.

A typical value for a host without IPv6 support:

   {
     Socket_Address_Type_IPv4:
       [Socket_Access_Control_Localhost, Socket_Access_Control_Port,
        Socket_Access_Control_Netmask],
     Socket_Address_Type_Unix:
       [Socket_Access_Control_Localhost, Socket_Access_Control_Credentials]
   }
 
Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property TransferredBytes of type qulonglong.

The number of bytes that have been transferred at the time of requesting the property. This will be updated as the file transfer continues.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property InitialOffset of type qulonglong.

The offset in bytes from where the file should be sent. This MUST be respected by both the receiver and the sender after the state becomes Open, but before any data is sent or received. Until the InitialOffsetDefined() signal is emitted, this property is undefined.

Before setting the State property to Open, the connection manager MUST set the InitialOffset property, possibly to 0.

This property MUST NOT change after the state of the transfer has changed to Open.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property URI of type QString.

For outgoing file transfers, this requestable property allows the channel requester to inform observers (and the handler, if it is not the requester itself) of the URI of the file being transferred. Note that the connection manager SHOULD NOT read this file directly; the handler streams the file into the CM through the socket negotiated using ProvideFile() .

On outgoing file transfers, this property MUST NOT change after the channel is requested.

For incoming file transfers, this property MAY be set by the channel handler before calling AcceptFile() to inform observers where the incoming file will be saved. If set by an approver, the handler MUST save the file to that location. Setting this property once AcceptFile() has been called MUST fail. Once this property has been set URIDefined() is emitted.

If set, this URI SHOULD generally point to a file on the local system, as defined by RFC 1738 §3.10; that is, it should be of the form file:///path/to/file or file://localhost/path/to/file. For outgoing files, this URI MAY use a different scheme, such as http:, if a remote resource is being transferred to a contact.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous setter for the remote object property URI of type QString.

For outgoing file transfers, this requestable property allows the channel requester to inform observers (and the handler, if it is not the requester itself) of the URI of the file being transferred. Note that the connection manager SHOULD NOT read this file directly; the handler streams the file into the CM through the socket negotiated using ProvideFile() .

On outgoing file transfers, this property MUST NOT change after the channel is requested.

For incoming file transfers, this property MAY be set by the channel handler before calling AcceptFile() to inform observers where the incoming file will be saved. If set by an approver, the handler MUST save the file to that location. Setting this property once AcceptFile() has been called MUST fail. Once this property has been set URIDefined() is emitted.

If set, this URI SHOULD generally point to a file on the local system, as defined by RFC 1738 §3.10; that is, it should be of the form file:///path/to/file or file://localhost/path/to/file. For outgoing files, this URI MAY use a different scheme, such as http:, if a remote resource is being transferred to a contact.

Returns:
A pending operation which will emit finished when the property has been set.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply<QDBusVariant> Tp::Client::ChannelTypeFileTransferInterface::AcceptFile ( uint  addressType,
uint  accessControl,
const QDBusVariant &  accessControlParam,
qulonglong  offset,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method AcceptFile on the remote object.

Accept a file transfer that's in the Pending state. The file transfer's state becomes Accepted after this method is called. At this point the client can connect to the socket. CM MUST emit InitialOffsetDefined and change the state to Open before writing to the socket. Then InitialOffset should be respected in case its value differs from the offset that was specified as an argument to AcceptFile.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
addressTypeThe type of address the connection manager should listen on.
accessControlThe type of access control the connection manager should apply to the socket.
accessControlParamA parameter for the access control type, to be interpreted as specified in the documentation for the Socket_Access_Control enum.
offsetThe desired offset in bytes where the file transfer should start. The offset is taken from the beginning of the file. Specifying an offset of zero will start the transfer from the beginning of the file. The offset that is actually given in the InitialOffset property can differ from this argument where the requested offset is not supported. (For example, some protocols do not support offsets at all so the InitialOffset property will always be 0.)
timeoutThe timeout in milliseconds.
Returns:

The address on which the connection manager will listen for connections for this file transfer.

QDBusPendingReply<QDBusVariant> Tp::Client::ChannelTypeFileTransferInterface::ProvideFile ( uint  addressType,
uint  accessControl,
const QDBusVariant &  accessControlParam,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method ProvideFile on the remote object.

Provide the file for an outgoing file transfer which has been offered. Opens a socket that the client can use to provide a file to the connection manager. The channel MUST have been requested, and will change state to Open when this method is called if its state was Accepted.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
addressTypeThe type of address the connection manager should listen on.
accessControlThe type of access control the connection manager should apply to the socket.
accessControlParamA parameter for the access control type, to be interpreted as specified in the documentation for the Socket_Access_Control enum.
timeoutThe timeout in milliseconds.
Returns:

The address on which the connection manager will listen for connections for this file transfer.

void Tp::Client::ChannelTypeFileTransferInterface::FileTransferStateChanged ( uint  state,
uint  reason 
) [signal]

Represents the signal FileTransferStateChanged on the remote object.

Emitted when the state of a file transfer changes.

Parameters:
stateThe new state of the file transfer; see the File_Transfer_State enumeration.
reasonThe reason for the state change; see the File_Transfer_State_Change_Reason enumeration. The value will always be File_Transfer_State_Change_Reason_None, except when changing state to cancelled.

Represents the signal TransferredBytesChanged on the remote object.

Emitted when the number of transferred bytes changes. This will not be signalled with every single byte change. Instead, the most frequent this signal will be emitted is once a second. This should be sufficient, and the TransferredBytes property SHOULD NOT be polled.

Parameters:
countThe number of already transferred bytes.
void Tp::Client::ChannelTypeFileTransferInterface::InitialOffsetDefined ( qulonglong  initialOffset) [signal]

Represents the signal InitialOffsetDefined on the remote object.

Emitted when the value of the InitialOffset property has been negotiated. This signal MUST be emitted before the channel becomes Open and clients have to use this offset when transferring the file.

Parameters:
initialOffsetThe value of the InitialOffset property.
void Tp::Client::ChannelTypeFileTransferInterface::URIDefined ( const QString &  URI) [signal]

Represents the signal URIDefined on the remote object.

Emitted when the value of the URI property has been set. This signal MUST only be emitted on incoming file transfers, and only if the handler sets the URI property before accepting the file.

Parameters:
URIThe value of the URI property.
void Tp::Client::ChannelTypeFileTransferInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00796.html0000644000175200001440000000572312000060453021642 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AbstractFunctorCaller Member List
This is the complete list of members for Tp::AbstractFunctorCaller, including all inherited members.
AbstractFunctorCaller(HookType invokeMethodHook)Tp::AbstractFunctorCaller [inline]
clone() const =0Tp::AbstractFunctorCaller [pure virtual]
HookType typedefTp::AbstractFunctorCaller
invokeMethodHookTp::AbstractFunctorCaller
~AbstractFunctorCaller()Tp::AbstractFunctorCaller [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00001.html0000644000175200001440000000717312000060453021616 0ustar00collabora-develusers00000000000000 Asynchronous Object Model
   Home · All Classes · All Namespaces · Modules · Functions · Files
Asynchronous Object Model

Overview

Telepathy-Qt uses D-Bus to communicate with applications implementing the Telepathy specification.

When dealing with D-Bus, method calls can take some time to return, and in this case is not desirable to make synchronous calls, which could turn into applications hanging waiting for method returns. In order to avoid this issue, all Telepathy-Qt high-level methods requiring D-Bus method calls will return a Tp::PendingOperation which will emit the signal Tp::PendingOperation::finished() when the operation has ended. See individual methods' documentation for more details.

Additionally Telepathy-Qt introduces a concept in which object features need to be enabled before usage. Information corresponding to enabled features can be inspected synchronously with no need for asynchronous D-Bus method calls and the associated programming complexity.

To avoid the complexity of doing asynchronous calls when making object features ready Telepathy-Qt also provides so called factories for the main objects. These object features can be enabled by constructing a corresponding factory and enabling the desired features, and passing these factories to the objects responsible for creating the objects whose features are required. Doing that, applications are guaranteed that the specified features are ready in objects signaled to them by the library.

However, if a particular feature is only ever used in a specific circumstance, such as an user opening some settings dialog separate from the general view of the application, features can be later enabled as needed by calling becomeReady(), or in the Tp::Contact case by calling Tp::ContactManager::upgradeContacts(), with the additional features on the object, and waiting for the resulting PendingOperation to finish.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00338.html0000644000175200001440000005170412000060453021632 0ustar00collabora-develusers00000000000000 Tp::Client::DBus::PropertiesInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

#include <TelepathyQt/DBus>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

  • QDBusPendingReply< QDBusVariant > Get (const QString &interfaceName, const QString &propertyName, int timeout=-1)
  • QDBusPendingReply Set (const QString &interfaceName, const QString &propertyName, const QDBusVariant &value, int timeout=-1)
  • QDBusPendingReply< QVariantMap > GetAll (const QString &interfaceName, int timeout=-1)

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.DBus.Properties".


Constructor & Destructor Documentation

Tp::Client::DBus::PropertiesInterface::PropertiesInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a PropertiesInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::DBus::PropertiesInterface::PropertiesInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a PropertiesInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a PropertiesInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a PropertiesInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.
Tp::Client::DBus::PropertiesInterface::PropertiesInterface ( const Tp::AbstractInterface mainInterface,
QObject *  parent 
)

Creates a PropertiesInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

static QLatin1String Tp::Client::DBus::PropertiesInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.DBus.Properties", which this class represents.

Returns:
The D-Bus interface name.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply<QDBusVariant> Tp::Client::DBus::PropertiesInterface::Get ( const QString &  interfaceName,
const QString &  propertyName,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method Get on the remote object.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::DBus::PropertiesInterface::Set ( const QString &  interfaceName,
const QString &  propertyName,
const QDBusVariant &  value,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method Set on the remote object.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply<QVariantMap> Tp::Client::DBus::PropertiesInterface::GetAll ( const QString &  interfaceName,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method GetAll on the remote object.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
void Tp::Client::DBus::PropertiesInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00808.html0000644000175200001440000001125012000060453021624 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Callback4< R, Arg1, Arg2, Arg3, Arg4 > Member List
This is the complete list of members for Tp::Callback4< R, Arg1, Arg2, Arg3, Arg4 >, including all inherited members.
BaseCallback()Tp::BaseCallback [inline]
BaseCallback(AbstractFunctorCaller *caller)Tp::BaseCallback [inline]
BaseCallback(const BaseCallback &other)Tp::BaseCallback [inline]
Callback4()Tp::Callback4< R, Arg1, Arg2, Arg3, Arg4 > [inline]
Callback4(const Functor &functor)Tp::Callback4< R, Arg1, Arg2, Arg3, Arg4 > [inline]
callerTp::BaseCallback [protected]
FunctionType typedefTp::Callback4< R, Arg1, Arg2, Arg3, Arg4 >
isValid() const Tp::BaseCallback [inline]
operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4) const Tp::Callback4< R, Arg1, Arg2, Arg3, Arg4 > [inline]
operator=(const BaseCallback &other)Tp::BaseCallback [inline]
ResultType typedefTp::Callback4< R, Arg1, Arg2, Arg3, Arg4 >
~BaseCallback()Tp::BaseCallback [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00052.html0000644000175200001440000001147112000060453021620 0ustar00collabora-develusers00000000000000 Tp::AliasMap Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AliasMap Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<uint, QString>, but needed to have a discrete type in the Qt type system.

A dictionary whose keys are contact handles and whose values are aliases.


Constructor & Destructor Documentation

Tp::AliasMap::AliasMap ( ) [inline]
Tp::AliasMap::AliasMap ( const QMap< uint, QString > &  a) [inline]

Member Function Documentation

AliasMap& Tp::AliasMap::operator= ( const QMap< uint, QString > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00149.html0000644000175200001440000010074212000060453021627 0ustar00collabora-develusers00000000000000 Tp::Client::ChannelTypeStreamTubeInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

#include <TelepathyQt/Channel>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

  • QDBusPendingReply Offer (uint addresstype, const QDBusVariant &address, uint accesscontrol, const QVariantMap &parameters, int timeout=-1)
  • QDBusPendingReply< QDBusVariant > Accept (uint addresstype, uint accesscontrol, const QDBusVariant &accesscontrolparam, int timeout=-1)

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Channel.Type.StreamTube".


Constructor & Destructor Documentation

Tp::Client::ChannelTypeStreamTubeInterface::ChannelTypeStreamTubeInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelTypeStreamTubeInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ChannelTypeStreamTubeInterface::ChannelTypeStreamTubeInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelTypeStreamTubeInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ChannelTypeStreamTubeInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ChannelTypeStreamTubeInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ChannelTypeStreamTubeInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

static QLatin1String Tp::Client::ChannelTypeStreamTubeInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Channel.Type.StreamTube", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property Service of type QString.

A string representing the service name that will be used over the tube. It should be a well-known TCP service name as defined by http://www.iana.org/assignments/port-numbers or http://www.dns-sd.org/ServiceTypes.html, for instance "rsync" or "daap".

When the tube is offered, the service name is transmitted to the other end.

When requesting a channel with ConnectionInterfaceRequestsInterface::CreateChannel() , this property MUST be included in the request.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property SupportedSocketTypes of type Tp::SupportedSocketMap.

A mapping from address types (members of Socket_Address_Type) to arrays of access-control type (members of Socket_Access_Control) that the connection manager supports for stream tubes with that address type. For simplicity, if a CM supports offering a particular type of tube, it is assumed to support accepting it.

A typical value for a host without IPv6 support:

   {
     Socket_Address_Type_IPv4:
       [Socket_Access_Control_Localhost, Socket_Access_Control_Port,
        Socket_Access_Control_Netmask],
     Socket_Address_Type_Unix:
       [Socket_Access_Control_Localhost, Socket_Access_Control_Credentials]
   }
 

Connection Managers MUST support at least IPv4 with the localhost access control.

When requesting a channel with ConnectionInterfaceRequestsInterface::CreateChannel() , this property MUST NOT be included in the request.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::ChannelTypeStreamTubeInterface::Offer ( uint  addresstype,
const QDBusVariant &  address,
uint  accesscontrol,
const QVariantMap &  parameters,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method Offer on the remote object.

Offer a stream tube exporting the local socket specified.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
addresstypeThe type of the listening address of the local service, as a member of Socket_Address_Type.
addressThe listening address of the local service, as indicated by the address_type.
accesscontrolThe access control the local service applies to the local socket, specified so the connection manager can behave appropriately when it connects.
parametersThe dictionary of arbitrary Parameters to send with the tube offer.
timeoutThe timeout in milliseconds.
QDBusPendingReply<QDBusVariant> Tp::Client::ChannelTypeStreamTubeInterface::Accept ( uint  addresstype,
uint  accesscontrol,
const QDBusVariant &  accesscontrolparam,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method Accept on the remote object.

Accept a stream tube that's in the "local pending" state. The connection manager will attempt to open the tube. The tube remains in the "local pending" state until the TubeChannelStateChanged signal is emitted.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
addresstypeThe type of address the connection manager should listen on.
accesscontrol

The type of access control the connection manager should apply to the socket.

Note that if you plan to establish more than one connection through the tube, the Socket_Access_Control_Port access control can't be used as you can't connect more than once from the same port.

accesscontrolparamA parameter for the access control type, to be interpreted as specified in the documentation for the Socket_Access_Control enum.
timeoutThe timeout in milliseconds.
Returns:

The address on which the connection manager will listen for connections to this tube. The client should not attempt to connect to the address until the tube is open.

void Tp::Client::ChannelTypeStreamTubeInterface::NewRemoteConnection ( uint  handle,
const QDBusVariant &  connectionParam,
uint  connectionID 
) [signal]

Represents the signal NewRemoteConnection on the remote object.

Emitted each time a participant opens a new connection to its socket.

This signal is only fired on the offering side.

Parameters:
handleThe handle of the participant who opened the new connection
connectionParam

A parameter which can be used by the listening process to identify the connection. Note that this parameter has a meaningful value only in the Socket_Access_Control_Port and Socket_Access_Control_Credentials cases. If a different Socket_Access_Control has been chosen when offering the tube, this parameter should be ignored.

In the Socket_Access_Control_Port case, the variant contains a struct Socket_Address_IPv4 (or Socket_Address_IPv6) containing the address from which the CM is connected to the client application.

In the Socket_Access_Control_Credentials case, the variant contains the byte (D-Bus signature 'y') that has been sent with the credentials.

connectionIDThe unique ID associated with this connection. This ID will be used to identifiy the connection when reporting errors with ConnectionClosed.

Represents the signal NewLocalConnection on the remote object.

Emitted when the tube application connects to the CM's socket.

This signal is only fired on the accepting side.

Parameters:
connectionIDThe unique ID associated with this connection. This ID will be used to identifiy the connection when reporting errors with ConnectionClosed.
void Tp::Client::ChannelTypeStreamTubeInterface::ConnectionClosed ( uint  connectionID,
const QString &  error,
const QString &  message 
) [signal]

Represents the signal ConnectionClosed on the remote object.

Emitted when a connection has been closed.

Parameters:
connectionIDThe ID of the connection.
error

The name of a D-Bus error describing the error that occurred.

The following errors can be used:

  • org.freedesktop.Telepathy.Error.Cancelled: user closed the socket or the tube.
  • org.freedesktop.Telepathy.Error.ConnectionLost: the bytestream relaying connection's data has been broken.
  • org.freedesktop.Telepathy.Error.ConnectionRefused: the tube offer refused the connection.
messageA debug message.
void Tp::Client::ChannelTypeStreamTubeInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00133.html0000644000175200001440000005126012000060453021620 0ustar00collabora-develusers00000000000000 Tp::Client::ChannelInterfaceServicePointInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelInterfaceServicePointInterface Class Reference

#include <TelepathyQt/Channel>

Inherits Tp::AbstractInterface.

List of all members.

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Channel.Interface.ServicePoint".


Constructor & Destructor Documentation

Tp::Client::ChannelInterfaceServicePointInterface::ChannelInterfaceServicePointInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfaceServicePointInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ChannelInterfaceServicePointInterface::ChannelInterfaceServicePointInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfaceServicePointInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ChannelInterfaceServicePointInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ChannelInterfaceServicePointInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ChannelInterfaceServicePointInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Channel.Interface.ServicePoint", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property InitialServicePoint of type Tp::ServicePoint.

This property is used to indicate that the channel target is a well-known service point. Please note that the CM (or lower layers of the stack or network) may forward the connection to other other service points, which the CM SHOULD indicate via ServicePointChanged() signal.

This property SHOULD be set for channel requests that are specifically targeting service points.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property CurrentServicePoint of type Tp::ServicePoint.

The service point that the channel is connected to. If the channel is not connected to a service point, the CM MUST set the Service_Point_Type field to None; for instance, this will be the case for ordinary calls.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.

Represents the signal ServicePointChanged on the remote object.

Emitted when a channel changes the service point that it's connected to. This might be a new call being connected to a service, a call connected to a service being routed to a different service (ie, an emergency call being routed from a generic emergency PSAP to a poison control PSAP), or any number of other things. Note that this should be emitted as soon as the CM has been notified of the switch, and has updated its internal state. The CM MAY still be in the process of connecting to the new service point.

Parameters:
servicePointThe new service point that is being used.
void Tp::Client::ChannelInterfaceServicePointInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00644_source.html0000644000175200001440000001574612000060453023220 0ustar00collabora-develusers00000000000000 pending-dbus-tube-connection.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
pending-dbus-tube-connection.h
00001 
00022 #ifndef _TelepathyQt_pending_dbus_tube_connection_h_HEADER_GUARD_
00023 #define _TelepathyQt_pending_dbus_tube_connection_h_HEADER_GUARD_
00024 
00025 #ifndef IN_TP_QT_HEADER
00026 #error IN_TP_QT_HEADER
00027 #endif
00028 
00029 #include <TelepathyQt/PendingOperation>
00030 #include <TelepathyQt/OutgoingDBusTubeChannel>
00031 
00032 namespace Tp {
00033 
00034 class PendingString;
00035 
00036 class TP_QT_EXPORT PendingDBusTubeConnection : public PendingOperation
00037 {
00038     Q_OBJECT
00039     Q_DISABLE_COPY(PendingDBusTubeConnection)
00040 
00041 public:
00042     virtual ~PendingDBusTubeConnection();
00043 
00044     QString address() const;
00045 
00046     bool allowsOtherUsers() const;
00047 
00048 private Q_SLOTS:
00049     TP_QT_NO_EXPORT void onConnectionFinished(Tp::PendingOperation *op);
00050     TP_QT_NO_EXPORT void onStateChanged(Tp::TubeChannelState state);
00051     TP_QT_NO_EXPORT void onChannelInvalidated(Tp::DBusProxy *proxy,
00052                                         const QString &errorName,
00053                                         const QString &errorMessage);
00054 
00055 private:
00056     TP_QT_NO_EXPORT PendingDBusTubeConnection(PendingString *string,
00057             bool allowOtherUsers, const QVariantMap &parameters,
00058             const DBusTubeChannelPtr &object);
00059     TP_QT_NO_EXPORT PendingDBusTubeConnection(const QString &errorName, const QString &errorMessage,
00060             const DBusTubeChannelPtr &object);
00061 
00062     struct Private;
00063     friend class OutgoingDBusTubeChannel;
00064     friend class IncomingDBusTubeChannel;
00065     friend struct Private;
00066     Private *mPriv;
00067 };
00068 
00069 }
00070 
00071 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00733.html0000644000175200001440000002341012000060453021622 0ustar00collabora-develusers00000000000000 Utility string constants
   Home · All Classes · All Namespaces · Modules · Functions · Files
Utility string constants

Defines


Detailed Description

Utility constants which aren't generated from the specification but are useful for working with the Telepathy protocol.


Define Documentation

The prefix for a connection manager's bus name, to which the CM's name (e.g. "gabble") should be appended.

The prefix for a connection manager's object path, to which the CM's name (e.g. "gabble") should be appended.

The prefix for a connection's bus name, to which the CM's name (e.g. "gabble"), the protocol (e.g. "jabber") and an element representing the account should be appended.

The prefix for a connection's object path, to which the CM's name (e.g. "gabble"), the protocol (e.g. "jabber") and an element representing the account should be appended.

The well-known bus name of the Account Manager.

See also:
Tp::AccountManager

The object path of the Account Manager object.

See also:
Tp::AccountManager

The well-known bus name of the Channel Dispatcher.

The object path of the Channel Dispatcherr object.

The prefix for an Account's object path, to which the CM's name (e.g. "gabble"), the protocol (e.g. "jabber") and an element identifying the particular account should be appended.

See also:
Tp::Account

The object path of the Debug object of various services.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00436_source.html0000644000175200001440000020417712000060453023215 0ustar00collabora-develusers00000000000000 account.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
account.h
00001 
00023 #ifndef _TelepathyQt_account_h_HEADER_GUARD_
00024 #define _TelepathyQt_account_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/_gen/cli-account.h>
00031 
00032 #include <TelepathyQt/ChannelRequestHints>
00033 #include <TelepathyQt/Connection>
00034 #include <TelepathyQt/ConnectionCapabilities>
00035 #include <TelepathyQt/ConnectionFactory>
00036 #include <TelepathyQt/ContactFactory>
00037 #include <TelepathyQt/ChannelFactory>
00038 #include <TelepathyQt/ChannelDispatcherInterface>
00039 #include <TelepathyQt/DBus>
00040 #include <TelepathyQt/DBusProxy>
00041 #include <TelepathyQt/FileTransferChannelCreationProperties>
00042 #include <TelepathyQt/OptionalInterfaceFactory>
00043 #include <TelepathyQt/Presence>
00044 #include <TelepathyQt/PresenceSpec>
00045 #include <TelepathyQt/ProtocolInfo>
00046 #include <TelepathyQt/ReadinessHelper>
00047 #include <TelepathyQt/Types>
00048 #include <TelepathyQt/Constants>
00049 #include <TelepathyQt/SharedPtr>
00050 
00051 #include <QSet>
00052 #include <QString>
00053 #include <QStringList>
00054 #include <QVariantMap>
00055 
00056 namespace Tp
00057 {
00058 
00059 class Account;
00060 class Connection;
00061 class PendingChannel;
00062 class PendingChannelRequest;
00063 class PendingConnection;
00064 class PendingOperation;
00065 class PendingReady;
00066 class PendingStringList;
00067 
00068 class TP_QT_EXPORT Account : public StatelessDBusProxy,
00069                 public OptionalInterfaceFactory<Account>
00070 {
00071     Q_OBJECT
00072     Q_DISABLE_COPY(Account)
00073     Q_PROPERTY(bool valid READ isValidAccount NOTIFY validityChanged)
00074     Q_PROPERTY(bool enabled READ isEnabled NOTIFY stateChanged)
00075     Q_PROPERTY(QString cmName READ cmName)
00076     Q_PROPERTY(QString protocolName READ protocolName)
00077     Q_PROPERTY(QString serviceName READ serviceName NOTIFY serviceNameChanged)
00078     Q_PROPERTY(ProfilePtr profile READ profile NOTIFY profileChanged)
00079     Q_PROPERTY(QString displayName READ displayName NOTIFY displayNameChanged)
00080     Q_PROPERTY(QString iconName READ iconName NOTIFY iconNameChanged)
00081     Q_PROPERTY(QString nickname READ nickname NOTIFY nicknameChanged)
00082     Q_PROPERTY(AvatarSpec avatarRequirements READ avatarRequirements)
00083     Q_PROPERTY(Avatar avatar READ avatar NOTIFY avatarChanged)
00084     Q_PROPERTY(QVariantMap parameters READ parameters NOTIFY parametersChanged)
00085     Q_PROPERTY(ProtocolInfo protocolInfo READ protocolInfo)
00086     Q_PROPERTY(ConnectionCapabilities capabilities READ capabilities NOTIFY capabilitiesChanged)
00087     Q_PROPERTY(bool hasBeenOnline READ hasBeenOnline)
00088     Q_PROPERTY(bool connectsAutomatically READ connectsAutomatically NOTIFY connectsAutomaticallyPropertyChanged)
00089     Q_PROPERTY(ConnectionStatus connectionStatus READ connectionStatus NOTIFY connectionStatusChanged)
00090     Q_PROPERTY(ConnectionStatusReason connectionStatusReason READ connectionStatusReason)
00091     Q_PROPERTY(QString connectionError READ connectionError)
00092     Q_PROPERTY(Tp::Connection::ErrorDetails connectionErrorDetails READ connectionErrorDetails)
00093     Q_PROPERTY(ConnectionPtr connection READ connection NOTIFY connectionChanged)
00094     Q_PROPERTY(bool changingPresence READ isChangingPresence NOTIFY changingPresence)
00095     Q_PROPERTY(Presence automaticPresence READ automaticPresence NOTIFY automaticPresenceChanged)
00096     Q_PROPERTY(Presence currentPresence READ currentPresence NOTIFY currentPresenceChanged)
00097     Q_PROPERTY(Presence requestedPresence READ requestedPresence NOTIFY requestedPresenceChanged)
00098     Q_PROPERTY(bool online READ isOnline NOTIFY onlinenessChanged)
00099     Q_PROPERTY(QString uniqueIdentifier READ uniqueIdentifier)
00100     Q_PROPERTY(QString normalizedName READ normalizedName NOTIFY normalizedNameChanged)
00101 
00102 public:
00103     static const Feature FeatureCore;
00104     static const Feature FeatureAvatar;
00105     static const Feature FeatureProtocolInfo;
00106     static const Feature FeatureCapabilities;
00107     static const Feature FeatureProfile;
00108 
00109     static AccountPtr create(const QString &busName, const QString &objectPath,
00110             const ConnectionFactoryConstPtr &connectionFactory =
00111                 ConnectionFactory::create(QDBusConnection::sessionBus()),
00112             const ChannelFactoryConstPtr &channelFactory =
00113                 ChannelFactory::create(QDBusConnection::sessionBus()),
00114             const ContactFactoryConstPtr &contactFactory =
00115                 ContactFactory::create());
00116     static AccountPtr create(const QDBusConnection &bus,
00117             const QString &busName, const QString &objectPath,
00118             const ConnectionFactoryConstPtr &connectionFactory,
00119             const ChannelFactoryConstPtr &channelFactory,
00120             const ContactFactoryConstPtr &contactFactory =
00121                 ContactFactory::create());
00122     virtual ~Account();
00123 
00124     ConnectionFactoryConstPtr connectionFactory() const;
00125     ChannelFactoryConstPtr channelFactory() const;
00126     ContactFactoryConstPtr contactFactory() const;
00127 
00128     bool isValidAccount() const;
00129 
00130     bool isEnabled() const;
00131     PendingOperation *setEnabled(bool value);
00132 
00133     QString cmName() const;
00134 
00135     QString protocolName() const;
00136 
00137     QString serviceName() const;
00138     PendingOperation *setServiceName(const QString &value);
00139 
00140     ProfilePtr profile() const;
00141 
00142     QString displayName() const;
00143     PendingOperation *setDisplayName(const QString &value);
00144 
00145     QString iconName() const;
00146     PendingOperation *setIconName(const QString &value);
00147 
00148     QString nickname() const;
00149     PendingOperation *setNickname(const QString &value);
00150 
00151     AvatarSpec avatarRequirements() const;
00152     // TODO: We probably want to expose the avatar file name once we have the avatar token and MC
00153     //       starts sharing the cache used by tp-qt and tp-glib and use Tp::AvatarData to represent
00154     //       it as used in Tp::Contact
00155     const Avatar &avatar() const;
00156     PendingOperation *setAvatar(const Avatar &avatar);
00157 
00158     QVariantMap parameters() const;
00159     PendingStringList *updateParameters(const QVariantMap &set,
00160             const QStringList &unset);
00161 
00162     ProtocolInfo protocolInfo() const;
00163 
00164     ConnectionCapabilities capabilities() const;
00165 
00166     bool connectsAutomatically() const;
00167     PendingOperation *setConnectsAutomatically(bool value);
00168 
00169     bool hasBeenOnline() const;
00170 
00171     ConnectionStatus connectionStatus() const;
00172     ConnectionStatusReason connectionStatusReason() const;
00173     QString connectionError() const;
00174     Connection::ErrorDetails connectionErrorDetails() const;
00175     ConnectionPtr connection() const;
00176 
00177     bool isChangingPresence() const;
00178 
00179     PresenceSpecList allowedPresenceStatuses(bool includeAllStatuses = false) const;
00180     uint maxPresenceStatusMessageLength() const;
00181 
00182     // TODO: Add overload methods to set presence from a Profile::Presence
00183     // TODO: Add usablePresences() that would return a list of presences that could be set on the
00184     //       account
00185     Presence automaticPresence() const;
00186     PendingOperation *setAutomaticPresence(const Presence &presence);
00187 
00188     Presence currentPresence() const;
00189 
00190     Presence requestedPresence() const;
00191     PendingOperation *setRequestedPresence(const Presence &presence);
00192 
00193     bool isOnline() const;
00194 
00195     QString uniqueIdentifier() const;
00196 
00197     QString normalizedName() const;
00198 
00199     PendingOperation *reconnect();
00200 
00201     PendingOperation *remove();
00202 
00203     bool supportsRequestHints() const;
00204     bool requestsSucceedWithChannel() const;
00205 
00206     PendingChannelRequest *ensureTextChat(
00207             const QString &contactIdentifier,
00208             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00209             const QString &preferredHandler = QString(),
00210             const ChannelRequestHints &hints = ChannelRequestHints());
00211     PendingChannelRequest *ensureTextChat(
00212             const ContactPtr &contact,
00213             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00214             const QString &preferredHandler = QString(),
00215             const ChannelRequestHints &hints = ChannelRequestHints());
00216 
00217     PendingChannelRequest *ensureTextChatroom(
00218             const QString &roomName,
00219             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00220             const QString &preferredHandler = QString(),
00221             const ChannelRequestHints &hints = ChannelRequestHints());
00222 
00223     PendingChannelRequest *ensureAudioCall(
00224             const QString &contactIdentifier,
00225             const QString &initialAudioContentName = QString(),
00226             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00227             const QString &preferredHandler = QString(),
00228             const ChannelRequestHints &hints = ChannelRequestHints());
00229     PendingChannelRequest *ensureAudioCall(
00230             const ContactPtr &contact,
00231             const QString &initialAudioContentName = QString(),
00232             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00233             const QString &preferredHandler = QString(),
00234             const ChannelRequestHints &hints = ChannelRequestHints());
00235     PendingChannelRequest *ensureVideoCall(
00236             const QString &contactIdentifier,
00237             const QString &initialVideoContentName = QString(),
00238             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00239             const QString &preferredHandler = QString(),
00240             const ChannelRequestHints &hints = ChannelRequestHints());
00241     PendingChannelRequest *ensureVideoCall(
00242             const ContactPtr &contact,
00243             const QString &initialVideoContentName = QString(),
00244             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00245             const QString &preferredHandler = QString(),
00246             const ChannelRequestHints &hints = ChannelRequestHints());
00247     PendingChannelRequest *ensureAudioVideoCall(
00248             const QString &contactIdentifier,
00249             const QString &initialAudioContentName = QString(),
00250             const QString &initialVideoContentName = QString(),
00251             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00252             const QString &preferredHandler = QString(),
00253             const ChannelRequestHints &hints = ChannelRequestHints());
00254     PendingChannelRequest *ensureAudioVideoCall(
00255             const ContactPtr &contact,
00256             const QString &initialAudioContentName = QString(),
00257             const QString &initialVideoContentName = QString(),
00258             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00259             const QString &preferredHandler = QString(),
00260             const ChannelRequestHints &hints = ChannelRequestHints());
00261 
00262     TP_QT_DEPRECATED PendingChannelRequest *ensureStreamedMediaCall(
00263             const QString &contactIdentifier,
00264             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00265             const QString &preferredHandler = QString(),
00266             const ChannelRequestHints &hints = ChannelRequestHints());
00267     TP_QT_DEPRECATED PendingChannelRequest *ensureStreamedMediaCall(
00268             const ContactPtr &contact,
00269             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00270             const QString &preferredHandler = QString(),
00271             const ChannelRequestHints &hints = ChannelRequestHints());
00272     TP_QT_DEPRECATED PendingChannelRequest *ensureStreamedMediaAudioCall(
00273             const QString &contactIdentifier,
00274             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00275             const QString &preferredHandler = QString(),
00276             const ChannelRequestHints &hints = ChannelRequestHints());
00277     TP_QT_DEPRECATED PendingChannelRequest *ensureStreamedMediaAudioCall(
00278             const ContactPtr &contact,
00279             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00280             const QString &preferredHandler = QString(),
00281             const ChannelRequestHints &hints = ChannelRequestHints());
00282     TP_QT_DEPRECATED PendingChannelRequest *ensureStreamedMediaVideoCall(
00283             const QString &contactIdentifier,
00284             bool withAudio = true,
00285             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00286             const QString &preferredHandler = QString(),
00287             const ChannelRequestHints &hints = ChannelRequestHints());
00288     TP_QT_DEPRECATED PendingChannelRequest *ensureStreamedMediaVideoCall(
00289             const ContactPtr &contact,
00290             bool withAudio = false,
00291             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00292             const QString &preferredHandler = QString(),
00293             const ChannelRequestHints &hints = ChannelRequestHints());
00294 
00295     PendingChannelRequest *createFileTransfer(
00296             const QString &contactIdentifier,
00297             const FileTransferChannelCreationProperties &properties,
00298             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00299             const QString &preferredHandler = QString(),
00300             const ChannelRequestHints &hints = ChannelRequestHints());
00301     PendingChannelRequest *createFileTransfer(
00302             const ContactPtr &contact,
00303             const FileTransferChannelCreationProperties &properties,
00304             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00305             const QString &preferredHandler = QString(),
00306             const ChannelRequestHints &hints = ChannelRequestHints());
00307 
00308     PendingChannelRequest *createStreamTube(
00309             const QString &contactIdentifier,
00310             const QString &service,
00311             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00312             const QString &preferredHandler = QString(),
00313             const ChannelRequestHints &hints = ChannelRequestHints());
00314     PendingChannelRequest *createStreamTube(
00315             const ContactPtr &contact,
00316             const QString &service,
00317             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00318             const QString &preferredHandler = QString(),
00319             const ChannelRequestHints &hints = ChannelRequestHints());
00320 
00321     PendingChannelRequest *createDBusTube(
00322             const QString &contactIdentifier,
00323             const QString &serviceName,
00324             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00325             const QString &preferredHandler = QString(),
00326             const ChannelRequestHints &hints = ChannelRequestHints());
00327     PendingChannelRequest *createDBusTube(
00328             const ContactPtr &contact,
00329             const QString &serviceName,
00330             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00331             const QString &preferredHandler = QString(),
00332             const ChannelRequestHints &hints = ChannelRequestHints());
00333 
00334     TP_QT_DEPRECATED PendingChannelRequest *createConferenceStreamedMediaCall(
00335             const QList<ChannelPtr> &channels,
00336             const QStringList &initialInviteeContactsIdentifiers = QStringList(),
00337             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00338             const QString &preferredHandler = QString(),
00339             const ChannelRequestHints &hints = ChannelRequestHints());
00340     TP_QT_DEPRECATED PendingChannelRequest *createConferenceStreamedMediaCall(
00341             const QList<ChannelPtr> &channels,
00342             const QList<ContactPtr> &initialInviteeContacts = QList<ContactPtr>(),
00343             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00344             const QString &preferredHandler = QString(),
00345             const ChannelRequestHints &hints = ChannelRequestHints());
00346 
00347     PendingChannelRequest *createConferenceTextChat(
00348             const QList<ChannelPtr> &channels,
00349             const QList<ContactPtr> &initialInviteeContacts = QList<ContactPtr>(),
00350             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00351             const QString &preferredHandler = QString(),
00352             const ChannelRequestHints &hints = ChannelRequestHints());
00353     PendingChannelRequest *createConferenceTextChat(
00354             const QList<ChannelPtr> &channels,
00355             const QStringList &initialInviteeContactsIdentifiers = QStringList(),
00356             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00357             const QString &preferredHandler = QString(),
00358             const ChannelRequestHints &hints = ChannelRequestHints());
00359 
00360     PendingChannelRequest *createConferenceTextChatroom(
00361             const QString &roomName,
00362             const QList<ChannelPtr> &channels,
00363             const QStringList &initialInviteeContactsIdentifiers = QStringList(),
00364             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00365             const QString &preferredHandler = QString(),
00366             const ChannelRequestHints &hints = ChannelRequestHints());
00367     PendingChannelRequest *createConferenceTextChatroom(
00368             const QString &roomName,
00369             const QList<ChannelPtr> &channels,
00370             const QList<ContactPtr> &initialInviteeContacts = QList<ContactPtr>(),
00371             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00372             const QString &preferredHandler = QString(),
00373             const ChannelRequestHints &hints = ChannelRequestHints());
00374 
00375     PendingChannelRequest *createContactSearch(
00376             const QString &server,
00377             uint limit = 0,
00378             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00379             const QString &preferredHandler = QString(),
00380             const ChannelRequestHints &hints = ChannelRequestHints());
00381 
00382     PendingChannel *ensureAndHandleTextChat(
00383             const QString &contactIdentifier,
00384             const QDateTime &userActionTime = QDateTime::currentDateTime());
00385     PendingChannel *ensureAndHandleTextChat(
00386             const ContactPtr &contact,
00387             const QDateTime &userActionTime = QDateTime::currentDateTime());
00388 
00389     PendingChannel *ensureAndHandleTextChatroom(
00390             const QString &roomName,
00391             const QDateTime &userActionTime = QDateTime::currentDateTime());
00392 
00393     PendingChannel *ensureAndHandleAudioCall(
00394             const QString &contactIdentifier,
00395             const QString &initialAudioContentName = QString(),
00396             const QDateTime &userActionTime = QDateTime::currentDateTime());
00397     PendingChannel *ensureAndHandleAudioCall(
00398             const ContactPtr &contact,
00399             const QString &initialAudioContentName = QString(),
00400             const QDateTime &userActionTime = QDateTime::currentDateTime());
00401     PendingChannel *ensureAndHandleVideoCall(
00402             const QString &contactIdentifier,
00403             const QString &initialVideoContentName = QString(),
00404             const QDateTime &userActionTime = QDateTime::currentDateTime());
00405     PendingChannel *ensureAndHandleVideoCall(
00406             const ContactPtr &contact,
00407             const QString &initialVideoContentName = QString(),
00408             const QDateTime &userActionTime = QDateTime::currentDateTime());
00409     PendingChannel *ensureAndHandleAudioVideoCall(
00410             const QString &contactIdentifier,
00411             const QString &initialAudioContentName = QString(),
00412             const QString &initialVideoContentName = QString(),
00413             const QDateTime &userActionTime = QDateTime::currentDateTime());
00414     PendingChannel *ensureAndHandleAudioVideoCall(
00415             const ContactPtr &contact,
00416             const QString &initialAudioContentName = QString(),
00417             const QString &initialVideoContentName = QString(),
00418             const QDateTime &userActionTime = QDateTime::currentDateTime());
00419 
00420     TP_QT_DEPRECATED PendingChannel *ensureAndHandleStreamedMediaCall(
00421             const QString &contactIdentifier,
00422             const QDateTime &userActionTime = QDateTime::currentDateTime());
00423     TP_QT_DEPRECATED PendingChannel *ensureAndHandleStreamedMediaCall(
00424             const ContactPtr &contact,
00425             const QDateTime &userActionTime = QDateTime::currentDateTime());
00426 
00427     TP_QT_DEPRECATED PendingChannel *ensureAndHandleStreamedMediaAudioCall(
00428             const QString &contactIdentifier,
00429             const QDateTime &userActionTime = QDateTime::currentDateTime());
00430     TP_QT_DEPRECATED PendingChannel *ensureAndHandleStreamedMediaAudioCall(
00431             const ContactPtr &contact,
00432             const QDateTime &userActionTime = QDateTime::currentDateTime());
00433 
00434     TP_QT_DEPRECATED PendingChannel *ensureAndHandleStreamedMediaVideoCall(
00435             const QString &contactIdentifier,
00436             bool withAudio = true,
00437             const QDateTime &userActionTime = QDateTime::currentDateTime());
00438     TP_QT_DEPRECATED PendingChannel *ensureAndHandleStreamedMediaVideoCall(
00439             const ContactPtr &contact,
00440             bool withAudio = true,
00441             const QDateTime &userActionTime = QDateTime::currentDateTime());
00442 
00443     PendingChannel *createAndHandleFileTransfer(
00444             const QString &contactIdentifier,
00445             const FileTransferChannelCreationProperties &properties,
00446             const QDateTime &userActionTime = QDateTime::currentDateTime());
00447     PendingChannel *createAndHandleFileTransfer(
00448             const ContactPtr &contact,
00449             const FileTransferChannelCreationProperties &properties,
00450             const QDateTime &userActionTime = QDateTime::currentDateTime());
00451 
00452     PendingChannel *createAndHandleStreamTube(
00453             const QString &contactIdentifier,
00454             const QString &service,
00455             const QDateTime &userActionTime = QDateTime::currentDateTime());
00456     PendingChannel *createAndHandleStreamTube(
00457             const ContactPtr &contact,
00458             const QString &service,
00459             const QDateTime &userActionTime = QDateTime::currentDateTime());
00460 
00461     PendingChannel *createAndHandleDBusTube(
00462             const QString &contactIdentifier,
00463             const QString &serviceName,
00464             const QDateTime &userActionTime = QDateTime::currentDateTime());
00465     PendingChannel *createAndHandleDBusTube(
00466             const ContactPtr &contact,
00467             const QString &serviceName,
00468             const QDateTime &userActionTime = QDateTime::currentDateTime());
00469 
00470     PendingChannel *createAndHandleConferenceTextChat(
00471             const QList<ChannelPtr> &channels,
00472             const QList<ContactPtr> &initialInviteeContacts = QList<ContactPtr>(),
00473             const QDateTime &userActionTime = QDateTime::currentDateTime());
00474     PendingChannel *createAndHandleConferenceTextChat(
00475             const QList<ChannelPtr> &channels,
00476             const QStringList &initialInviteeContactsIdentifiers = QStringList(),
00477             const QDateTime &userActionTime = QDateTime::currentDateTime());
00478 
00479     PendingChannel *createAndHandleConferenceTextChatroom(
00480             const QString &roomName,
00481             const QList<ChannelPtr> &channels,
00482             const QStringList &initialInviteeContactsIdentifiers = QStringList(),
00483             const QDateTime &userActionTime = QDateTime::currentDateTime());
00484     PendingChannel *createAndHandleConferenceTextChatroom(
00485             const QString &roomName,
00486             const QList<ChannelPtr> &channels,
00487             const QList<ContactPtr> &initialInviteeContacts = QList<ContactPtr>(),
00488             const QDateTime &userActionTime = QDateTime::currentDateTime());
00489 
00490     TP_QT_DEPRECATED PendingChannel *createAndHandleConferenceStreamedMediaCall(
00491             const QList<ChannelPtr> &channels,
00492             const QStringList &initialInviteeContactsIdentifiers = QStringList(),
00493             const QDateTime &userActionTime = QDateTime::currentDateTime());
00494     TP_QT_DEPRECATED PendingChannel *createAndHandleConferenceStreamedMediaCall(
00495             const QList<ChannelPtr> &channels,
00496             const QList<ContactPtr> &initialInviteeContacts = QList<ContactPtr>(),
00497             const QDateTime &userActionTime = QDateTime::currentDateTime());
00498 
00499     PendingChannel *createAndHandleContactSearch(
00500             const QString &server = QString(),
00501             uint limit = 0,
00502             const QDateTime &userActionTime = QDateTime::currentDateTime());
00503 
00504     // advanced
00505     PendingChannelRequest *createChannel(
00506             const QVariantMap &requestedProperties,
00507             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00508             const QString &preferredHandler = QString(),
00509             const ChannelRequestHints &hints = ChannelRequestHints());
00510 
00511     PendingChannelRequest *ensureChannel(
00512             const QVariantMap &requestedProperties,
00513             const QDateTime &userActionTime = QDateTime::currentDateTime(),
00514             const QString &preferredHandler = QString(),
00515             const ChannelRequestHints &hints = ChannelRequestHints());
00516 
00517     PendingChannel *createAndHandleChannel(
00518             const QVariantMap &requestedProperties,
00519             const QDateTime &userActionTime);
00520     PendingChannel *ensureAndHandleChannel(
00521             const QVariantMap &requestedProperties,
00522             const QDateTime &userActionTime);
00523 
00524 Q_SIGNALS:
00525     void removed();
00526     void serviceNameChanged(const QString &serviceName);
00527     void profileChanged(const Tp::ProfilePtr &profile);
00528     void displayNameChanged(const QString &displayName);
00529     void iconNameChanged(const QString &iconName);
00530     void nicknameChanged(const QString &nickname);
00531     void normalizedNameChanged(const QString &normalizedName);
00532     void validityChanged(bool validity);
00533     void stateChanged(bool state);
00534     void capabilitiesChanged(const Tp::ConnectionCapabilities &capabilities);
00535     void connectsAutomaticallyPropertyChanged(bool connectsAutomatically);
00536     void firstOnline();
00537     void parametersChanged(const QVariantMap &parameters);
00538     void changingPresence(bool value);
00539     void automaticPresenceChanged(const Tp::Presence &automaticPresence);
00540     void currentPresenceChanged(const Tp::Presence &currentPresence);
00541     void requestedPresenceChanged(const Tp::Presence &requestedPresence);
00542     void onlinenessChanged(bool online);
00543     void avatarChanged(const Tp::Avatar &avatar);
00544     void connectionStatusChanged(Tp::ConnectionStatus status);
00545     void connectionChanged(const Tp::ConnectionPtr &connection);
00546 
00547 protected:
00548     friend class PendingChannelRequest; // to access dispatcherInterface()
00549 
00550     Account(const QDBusConnection &bus,
00551             const QString &busName, const QString &objectPath,
00552             const ConnectionFactoryConstPtr &connectionFactory,
00553             const ChannelFactoryConstPtr &channelFactory,
00554             const ContactFactoryConstPtr &contactFactory,
00555             const Feature &coreFeature);
00556 
00557     Client::AccountInterface *baseInterface() const;
00558     Client::ChannelDispatcherInterface *dispatcherInterface() const;
00559 
00560 private Q_SLOTS:
00561     TP_QT_NO_EXPORT void onDispatcherIntrospected(Tp::PendingOperation *op);
00562     TP_QT_NO_EXPORT void gotMainProperties(QDBusPendingCallWatcher *);
00563     TP_QT_NO_EXPORT void gotAvatar(QDBusPendingCallWatcher *);
00564     TP_QT_NO_EXPORT void onAvatarChanged();
00565     TP_QT_NO_EXPORT void onConnectionManagerReady(Tp::PendingOperation *);
00566     TP_QT_NO_EXPORT void onConnectionReady(Tp::PendingOperation *);
00567     TP_QT_NO_EXPORT void onPropertyChanged(const QVariantMap &delta);
00568     TP_QT_NO_EXPORT void onRemoved();
00569     TP_QT_NO_EXPORT void onConnectionBuilt(Tp::PendingOperation *);
00570 
00571 private:
00572     struct Private;
00573     friend struct Private;
00574 
00575     Private *mPriv;
00576 };
00577 
00578 } // Tp
00579 
00580 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01099.html0000644000175200001440000001776512000060453021650 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelInterfaceTubeInterface Member List
This is the complete list of members for Tp::Client::ChannelInterfaceTubeInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ChannelInterfaceTubeInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfaceTubeInterface
ChannelInterfaceTubeInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfaceTubeInterface
ChannelInterfaceTubeInterface(Tp::DBusProxy *proxy)Tp::Client::ChannelInterfaceTubeInterface
ChannelInterfaceTubeInterface(const Tp::Client::ChannelInterface &mainInterface)Tp::Client::ChannelInterfaceTubeInterface [explicit]
ChannelInterfaceTubeInterface(const Tp::Client::ChannelInterface &mainInterface, QObject *parent)Tp::Client::ChannelInterfaceTubeInterface
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ChannelInterfaceTubeInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ChannelInterfaceTubeInterface [inline]
requestPropertyParameters() const Tp::Client::ChannelInterfaceTubeInterface [inline]
requestPropertyState() const Tp::Client::ChannelInterfaceTubeInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ChannelInterfaceTubeInterface [inline, static]
TubeChannelStateChanged(uint state)Tp::Client::ChannelInterfaceTubeInterface [signal]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/pages.html0000644000175200001440000000332112000060453022103 0ustar00collabora-develusers00000000000000 Related Pages
   Home · All Classes · All Namespaces · Modules · Functions · Files
Related Pages
Here is a list of all related documentation pages:


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00179.html0000644000175200001440000007716212000060453021643 0ustar00collabora-develusers00000000000000 Tp::Client::ConnectionInterfaceLocationInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceLocationInterface Class Reference

#include <TelepathyQt/Connection>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Connection.Interface.Location".


Constructor & Destructor Documentation

Tp::Client::ConnectionInterfaceLocationInterface::ConnectionInterfaceLocationInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceLocationInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ConnectionInterfaceLocationInterface::ConnectionInterfaceLocationInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceLocationInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ConnectionInterfaceLocationInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ConnectionInterfaceLocationInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ConnectionInterfaceLocationInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Connection.Interface.Location", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property LocationAccessControlTypes of type Tp::UIntList.

The types of access control that are supported by this connection.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property LocationAccessControl of type Tp::RichPresenceAccessControl.

The current access control mechanism and settings for this connection. Before publishing location for the first time, if this has not been set by a client, implementations SHOULD set it to be as restrictive as possible (an empty whitelist, if supported).

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous setter for the remote object property LocationAccessControl of type Tp::RichPresenceAccessControl.

The current access control mechanism and settings for this connection. Before publishing location for the first time, if this has not been set by a client, implementations SHOULD set it to be as restrictive as possible (an empty whitelist, if supported).

Returns:
A pending operation which will emit finished when the property has been set.

Asynchronous getter for the remote object property SupportedLocationFeatures of type uint.

Indicates the Location features supported by this connection. This property MAY be undefined before ConnectionInterface::Status becomes Connected, but MUST remain constant thereafter.
Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply<Tp::ContactLocations> Tp::Client::ConnectionInterfaceLocationInterface::GetLocations ( const Tp::UIntList contacts,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method GetLocations on the remote object.

Return the current locations of the given contacts, if they are already known. If any of the given contacts' locations are not known, request their current locations, but return immediately without waiting for a reply; if a reply with a non-empty location is later received for those contacts, the LocationUpdated() signal will be emitted for them.

This method is appropriate for "lazy" location finding, for instance displaying the location (if available) of everyone in your contact list.

For backwards compatibility, if this method is called by a client whose "interest count" for this interface, as defined by ConnectionInterface::AddClientInterest() , is zero, the Connection SHOULD behave as if AddClientInterest had been called for this interface just before that method call. Clients that do not explicitly call AddClientInterest SHOULD NOT call ConnectionInterface::RemoveClientInterest() either.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
contactsThe contacts whose locations should be returned or signalled.
timeoutThe timeout in milliseconds.
Returns:

The contacts' locations, if already known. Contacts whose locations are not already known are omitted from the mapping; contacts known to have no location information appear in the mapping with an empty Location dictionary.

QDBusPendingReply<QVariantMap> Tp::Client::ConnectionInterfaceLocationInterface::RequestLocation ( uint  contact,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method RequestLocation on the remote object.

Return the current location of the given contact. If necessary, make a request to the server for up-to-date information, and wait for a reply. This method is appropriate for use in a "Contact Information..." dialog; it can be used to show progress information (while waiting for the method to return), and can distinguish between various error conditions.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
contactThe contact whose location should be returned.
timeoutThe timeout in milliseconds.
Returns:

The contact's location. It MAY be empty, indicating that no location information was found.

QDBusPendingReply Tp::Client::ConnectionInterfaceLocationInterface::SetLocation ( const QVariantMap &  location,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method SetLocation on the remote object.

Set the local user's own location.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
locationThe location to advertise. If the user wants to obscure their exact location by reducing the precision or accuracy, clients MUST do this themselves, rather than relying on the connection manager to do so. Clients that interact with more than one connection SHOULD advertise the same reduced-accuracy location to all of them, so that contacts cannot obtain an undesirably accurate location by assuming that random errors have been added and averaging the locations advertised on multiple connections.
timeoutThe timeout in milliseconds.
void Tp::Client::ConnectionInterfaceLocationInterface::LocationUpdated ( uint  contact,
const QVariantMap &  location 
) [signal]

Represents the signal LocationUpdated on the remote object.

Emitted when a contact's location changes or becomes known.

Parameters:
contactThe contact
locationThe contact's location, or empty to indicate that nothing is known about the contact's location.
void Tp::Client::ConnectionInterfaceLocationInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00153.html0000644000175200001440000005613412000060453021627 0ustar00collabora-develusers00000000000000 Tp::Client::ClientApproverInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

#include <TelepathyQt/Client>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Client.Approver".


Constructor & Destructor Documentation

Tp::Client::ClientApproverInterface::ClientApproverInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ClientApproverInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ClientApproverInterface::ClientApproverInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ClientApproverInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ClientApproverInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ClientApproverInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ClientApproverInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

static QLatin1String Tp::Client::ClientApproverInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Client.Approver", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property ApproverChannelFilter of type Tp::ChannelClassList.

A specification of the channels in which this approver is interested. The AddDispatchOperation() method should be called by the channel dispatcher whenever at least one of the channels in a channel dispatch operation matches this description.

This property works in exactly the same way as the ClientObserverInterface::ObserverChannelFilter property. In particular, it cannot change while the approver process continues to own the corresponding Client bus name.

In the .client file, it is represented in the same way as ObserverChannelFilter, but the group has the same name as this interface and the keys start with ApproverChannelFilter instead of ObserverChannelFilter.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::ClientApproverInterface::AddDispatchOperation ( const Tp::ChannelDetailsList channels,
const QDBusObjectPath &  dispatchOperation,
const QVariantMap &  properties,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method AddDispatchOperation on the remote object.

Called by the channel dispatcher when a ChannelDispatchOperation in which the approver has registered an interest is created, or when the approver starts up while such channel dispatch operations already exist.

The channel dispatcher SHOULD call this method on all approvers at the same time. If an approver returns an error from this method, the approver is assumed to be faulty.

If no approvers return from this method successfully (including situations where there are no matching approvers at all), the channel dispatcher SHOULD consider this to be an error, and recover by dispatching the channel to the most preferred handler.

Processes that aren't approvers (or don't at least ensure that there is some approver) probably shouldn't be making connections anyway, so there should always be at least one approver running.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
channels

The initial value of the ChannelDispatchOperationInterface::Channels property, containing the ChannelInterface s to be dispatched and their properties.

This can't be signalled to the approver through the Properties parameter of this method, because Channels is not an immutable property.

This argument always contains all of the channels in the channel dispatch operation, even if not all of them actually match the ApproverChannelFilter .

This seems the least bad way to handle such a situation; see the discussion on bug #21090.

The actual channels to be dispatched may reduce as channels are closed: this is signalled by ChannelDispatchOperationInterface::ChannelLost() .

Approvers SHOULD connect to ChannelLost and ChannelDispatchOperationInterface::Finished() . (if desired) before returning from AddDispatchOperation, since those signals are guaranteed not to be emitted until after all AddDispatchOperation calls have returned (with success or failure) or timed out.

dispatchOperation

The ChannelDispatchOperationInterface to be processed.

propertiesProperties of the channel dispatch operation. The keys MUST be fully qualified D-Bus property names. This MUST NOT include properties that could change, SHOULD include as many properties as possible given that constraint, and MUST include at least the Account, Connection and PossibleHandlers properties.
timeoutThe timeout in milliseconds.
void Tp::Client::ClientApproverInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01056.html0000644000175200001440000000505012000060453021621 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::StatusSpec Member List
This is the complete list of members for Tp::StatusSpec, including all inherited members.
exclusiveTp::StatusSpec
maySetOnSelfTp::StatusSpec
parameterTypesTp::StatusSpec
typeTp::StatusSpec


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01096.html0000644000175200001440000002041412000060453021626 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelInterfaceSMSInterface Member List
This is the complete list of members for Tp::Client::ChannelInterfaceSMSInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ChannelInterfaceSMSInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfaceSMSInterface
ChannelInterfaceSMSInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfaceSMSInterface
ChannelInterfaceSMSInterface(Tp::DBusProxy *proxy)Tp::Client::ChannelInterfaceSMSInterface
ChannelInterfaceSMSInterface(const Tp::Client::ChannelInterface &mainInterface)Tp::Client::ChannelInterfaceSMSInterface [explicit]
ChannelInterfaceSMSInterface(const Tp::Client::ChannelInterface &mainInterface, QObject *parent)Tp::Client::ChannelInterfaceSMSInterface
GetSMSLength(const Tp::MessagePartList &message, int timeout=-1)Tp::Client::ChannelInterfaceSMSInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ChannelInterfaceSMSInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ChannelInterfaceSMSInterface [inline]
requestPropertyFlash() const Tp::Client::ChannelInterfaceSMSInterface [inline]
requestPropertySMSChannel() const Tp::Client::ChannelInterfaceSMSInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
SMSChannelChanged(bool SMSChannel)Tp::Client::ChannelInterfaceSMSInterface [signal]
staticInterfaceName()Tp::Client::ChannelInterfaceSMSInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/namespacemembers_type.html0000644000175200001440000002523312000060453025362 0ustar00collabora-develusers00000000000000 Namespace Members
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- a -

  • AccountCapabilityFilter : Tp
  • AccountFilter : Tp
  • AliasPairList : Tp
  • AnonymityModeFlags : Tp

- c -

  • CallContents : Tp
  • CallFlags : Tp
  • CallMemberFlags : Tp
  • CallMemberMapList : Tp
  • CallStreams : Tp
  • CandidateList : Tp
  • CandidatePairList : Tp
  • CapabilityChangeList : Tp
  • CapabilityPairList : Tp
  • CaptchaFlags : Tp
  • CaptchaInfoList : Tp
  • ChannelCallStateFlags : Tp
  • ChannelClassFeatures : Tp
  • ChannelClassList : Tp
  • ChannelDetailsList : Tp
  • ChannelGroupFlags : Tp
  • ChannelInfoList : Tp
  • ChannelMediaCapabilities : Tp
  • ChannelPasswordFlags : Tp
  • ChannelTextMessageFlags : Tp
  • CodecList : Tp
  • ConnectionAliasFlags : Tp
  • ConnectionCapabilityFlags : Tp
  • ConnMgrParamFlags : Tp
  • ContactBlockingCapabilities : Tp
  • ContactCapabilitiesMapList : Tp
  • ContactCapabilityList : Tp
  • ContactInfoFieldFlags : Tp
  • ContactInfoFieldList : Tp
  • ContactInfoFlags : Tp

- d -

  • DBusTubeMemberList : Tp
  • DebugCallback : Tp
  • DebugMessageList : Tp
  • DeliveryReportingSupportFlags : Tp

- f -

  • FieldSpecs : Tp

- h -

  • HandlerCapabilitiesList : Tp
  • HTTPPostDataList : Tp

- l -

  • LocalPendingInfoList : Tp
  • LocationFeatures : Tp

- m -

  • MailAddressList : Tp
  • MailList : Tp
  • MailNotificationFlags : Tp
  • MediaSessionHandlerInfoList : Tp
  • MediaStreamHandlerCandidateList : Tp
  • MediaStreamHandlerCodecList : Tp
  • MediaStreamHandlerTransportList : Tp
  • MediaStreamInfoList : Tp
  • MediaStreamPendingSend : Tp
  • MessagePartList : Tp
  • MessagePartListList : Tp
  • MessagePartSupportFlags : Tp
  • MessageSendingFlags : Tp

- o -

  • ObjectImmutablePropertiesMapList : Tp

- p -

  • ParamSpecList : Tp
  • PendingTextMessageList : Tp
  • PropertyFlags : Tp
  • PropertyFlagsChangeList : Tp
  • PropertySpecList : Tp
  • PropertyValueList : Tp
  • ProtocolInfoList : Tp
  • ProtocolParameterList : Tp

- q -

  • QualifiedPropertyValueMapList : Tp

- r -

  • ReferencedHandlesIterator : Tp
  • RequestableChannelClassList : Tp
  • RoomInfoList : Tp
  • RTCPFeedbackMessageList : Tp
  • RTCPXRStatisticsFlags : Tp
  • RTPHeaderExtensionsList : Tp

- s -

  • ServicePointInfoList : Tp
  • SocketAddressIPList : Tp
  • StorageRestrictionFlags : Tp
  • StreamedMediaStreams : Tp
  • StringStringMapList : Tp
  • StringVariantMapList : Tp

- t -

  • TLSCertificateRejectionList : Tp
  • TubeInfoList : Tp

- v -

  • VideoResolutionStruct : Tp


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_func_0x6d.html0000644000175200001440000002416312000060453024677 0ustar00collabora-develusers00000000000000 Class Members - Functions
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- m -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00930.html0000644000175200001440000000435512000060453021630 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::RefCounted Member List
This is the complete list of members for Tp::RefCounted, including all inherited members.
RefCounted()Tp::RefCounted [inline]
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00301.html0000644000175200001440000003451612000060453021622 0ustar00collabora-develusers00000000000000 Tp::Profile::Parameter Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Profile::Parameter Class Reference

The Profile::Parameter class represents a parameter defined in .profile files. More...

#include <TelepathyQt/Profile>

List of all members.

Public Member Functions


Detailed Description

The Profile::Parameter class represents a parameter defined in .profile files.


Constructor & Destructor Documentation

Construct a new Profile::Parameter object that is a copy of other.

Tp::Profile::Parameter::Parameter ( const QString &  name,
const QDBusSignature &  dbusSignature,
const QVariant &  value,
const QString &  label,
bool  mandatory 
)

Construct a new Profile::Parameter object.

Parameters:
nameThe parameter name.
dbusSignatureThe parameter D-Bus signature.
valueThe parameter value.
labelThe parameter label.
mandatoryWhether this parameter is mandatory.

Class destructor.


Member Function Documentation

QString Tp::Profile::Parameter::name ( ) const

Return the name of this parameter.

Returns:
The name of this parameter.
QDBusSignature Tp::Profile::Parameter::dbusSignature ( ) const

Return the D-Bus signature of this parameter.

Returns:
The D-Bus signature of this parameter.
QVariant::Type Tp::Profile::Parameter::type ( ) const

Return the QVariant::Type of this parameter, constructed using dbusSignature().

Returns:
The QVariant::Type of this parameter.
QVariant Tp::Profile::Parameter::value ( ) const

Return the value of this parameter.

If mandatory() returns true, the value must not be modified and should be used as is when creating accounts for this profile.

Returns:
The value of this parameter.
QString Tp::Profile::Parameter::label ( ) const

Return the human-readable label of this parameter.

Returns:
The human-readable label of this parameter.

Return whether this parameter is mandatory, or whether the value returned by value() should be used as is when creating accounts for this profile.

Returns:
true if mandatory, otherwise false.
Profile::Parameter & Tp::Profile::Parameter::operator= ( const Parameter other)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01053.html0000644000175200001440000000432312000060453021620 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ServicePointInfo Member List
This is the complete list of members for Tp::ServicePointInfo, including all inherited members.
serviceIDsTp::ServicePointInfo
servicePointTp::ServicePointInfo


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00297.html0000644000175200001440000002204212000060453021627 0ustar00collabora-develusers00000000000000 Tp::OrFilter< T > Class Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::OrFilter< T > Class Template Reference

The OrFilter class provides a generic filter object to be used in conjunction of other filters. More...

#include <TelepathyQt/OrFilter>

Inherits Tp::Filter< T >.

List of all members.

Public Member Functions

Static Public Member Functions


Detailed Description

template<class T>
class Tp::OrFilter< T >

The OrFilter class provides a generic filter object to be used in conjunction of other filters.

The OrFilter will match if any of its given list of filters matches their criteria.


Constructor & Destructor Documentation

template<class T >
virtual Tp::OrFilter< T >::~OrFilter ( ) [inline, virtual]

Member Function Documentation

template<class T >
static SharedPtr<OrFilter<T> > Tp::OrFilter< T >::create ( const QList< SharedPtr< const Filter< T > > > &  filters = QList<SharedPtr<const Filter<T> > >()) [inline, static]
template<class T >
virtual bool Tp::OrFilter< T >::isValid ( ) const [inline, virtual]

Reimplemented from Tp::Filter< T >.

template<class T >
virtual bool Tp::OrFilter< T >::matches ( const SharedPtr< T > &  t) const [inline, virtual]

Reimplemented from Tp::Filter< T >.

template<class T >
QList<SharedPtr<const Filter<T> > > Tp::OrFilter< T >::filters ( ) const [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_0x67.html0000644000175200001440000003614012000060453023605 0ustar00collabora-develusers00000000000000 Class Members
   Home · All Classes · All Namespaces · Modules · Functions · Files
Here is a list of all class members with links to the classes they belong to:

- g -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00286.html0000644000175200001440000001275312000060453021635 0ustar00collabora-develusers00000000000000 Tp::Metadata Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Metadata Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<QString, QStringList>, but needed to have a discrete type in the Qt type system.

A mapping from string key to a list of strings, used in the Metadata property. To emulate a simple string → string hash table one should have exactly one member in the value string list. This property is an a{sas} primarily because this maps easily to XEP-0004 Data Forms, and allows more structured metadata than a{ss} would. (For instance, a list of RDF triples could be expressed as one long array of strings, or as three-element values for a series of dummy key names, rather than as one big string blob.) While it might be convenient for applications to allow keys of arbitrary types, the added convenience would be outweighed by having to define the XMPP representation


Constructor & Destructor Documentation

Tp::Metadata::Metadata ( ) [inline]
Tp::Metadata::Metadata ( const QMap< QString, QStringList > &  a) [inline]

Member Function Documentation

Metadata& Tp::Metadata::operator= ( const QMap< QString, QStringList > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00948.html0000644000175200001440000000724012000060453021635 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::StreamTubeServer::Tube Member List
This is the complete list of members for Tp::StreamTubeServer::Tube, including all inherited members.
account() const Tp::StreamTubeServer::Tube [inline]
channel() const Tp::StreamTubeServer::Tube [inline]
isValid() const Tp::StreamTubeServer::Tube [inline]
operator=(const Tube &other)Tp::StreamTubeServer::Tube
Tube()Tp::StreamTubeServer::Tube
Tube(const AccountPtr &account, const OutgoingStreamTubeChannelPtr &channel)Tp::StreamTubeServer::Tube
Tube(const Tube &other)Tp::StreamTubeServer::Tube
~Tube()Tp::StreamTubeServer::Tube


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_func_0x6e.html0000644000175200001440000001750612000060453024703 0ustar00collabora-develusers00000000000000 Class Members - Functions
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- n -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00389.html0000644000175200001440000000713412000060453021636 0ustar00collabora-develusers00000000000000 Tp::SocketAddressIP Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::SocketAddressIP Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

An IP address and port.


Member Data Documentation

Either a dotted-quad IPv4 address literal as for Socket_Address_IPv4, or an RFC2373 IPv6 address as for Socket_Address_IPv6.

The TCP or UDP port number.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00064.html0000644000175200001440000001536212000060453021626 0ustar00collabora-develusers00000000000000 Tp::BaseFunctorCaller< T, Functor > Struct Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::BaseFunctorCaller< T, Functor > Struct Template Reference

#include </home/collabora-devel/kde/src/telepathy-qt4/TelepathyQt/callbacks.h>

Inherits Tp::AbstractFunctorCaller.

List of all members.

Public Member Functions

Public Attributes

template<class T, class Functor>
struct Tp::BaseFunctorCaller< T, Functor >


Constructor & Destructor Documentation

template<class T, class Functor>
Tp::BaseFunctorCaller< T, Functor >::BaseFunctorCaller ( const Functor &  functor,
AbstractFunctorCaller::HookType  invokeMethodHook 
) [inline]
template<class T, class Functor>
virtual Tp::BaseFunctorCaller< T, Functor >::~BaseFunctorCaller ( ) [inline, virtual]

Member Function Documentation

template<class T, class Functor>
virtual AbstractFunctorCaller* Tp::BaseFunctorCaller< T, Functor >::clone ( ) const [inline, virtual]

Member Data Documentation

template<class T, class Functor>
Functor Tp::BaseFunctorCaller< T, Functor >::functor


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00901.html0000644000175200001440000002157712000060453021633 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingContacts Member List
This is the complete list of members for Tp::PendingContacts, including all inherited members.
contacts() const Tp::PendingContacts
contactsToUpgrade() const Tp::PendingContacts
errorMessage() const Tp::PendingOperation
errorName() const Tp::PendingOperation
features() const Tp::PendingContacts
finished(Tp::PendingOperation *operation)Tp::PendingOperation [signal]
handles() const Tp::PendingContacts
identifiers() const Tp::PendingContacts
invalidHandles() const Tp::PendingContacts
invalidIdentifiers() const Tp::PendingContacts
invalidUris() const Tp::PendingContacts
invalidVCardAddresses() const Tp::PendingContacts
isError() const Tp::PendingOperation
isFinished() const Tp::PendingOperation
isForHandles() const Tp::PendingContacts
isForIdentifiers() const Tp::PendingContacts
isForUris() const Tp::PendingContacts
isForVCardAddresses() const Tp::PendingContacts
isUpgrade() const Tp::PendingContacts
isValid() const Tp::PendingOperation
manager() const Tp::PendingContacts
object() const Tp::PendingOperation [protected]
PendingOperation(const SharedPtr< RefCounted > &object)Tp::PendingOperation [protected]
setFinished()Tp::PendingOperation [protected, slot]
setFinishedWithError(const QString &name, const QString &message)Tp::PendingOperation [protected, slot]
setFinishedWithError(const QDBusError &error)Tp::PendingOperation [protected, slot]
uris() const Tp::PendingContacts
validIdentifiers() const Tp::PendingContacts
validUris() const Tp::PendingContacts
validVCardAddresses() const Tp::PendingContacts
vcardAddresses() const Tp::PendingContacts
vcardField() const Tp::PendingContacts
~PendingContacts()Tp::PendingContacts
~PendingOperation()Tp::PendingOperation [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_vars_0x68.html0000644000175200001440000000425012000060453024636 0ustar00collabora-develusers00000000000000 Class Members - Variables
   Home · All Classes · All Namespaces · Modules · Functions · Files


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00676_source.html0000644000175200001440000002426712000060453023223 0ustar00collabora-develusers00000000000000 protocol-parameter.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
protocol-parameter.h
00001 
00023 #ifndef _TelepathyQt_protocol_parameter_h_HEADER_GUARD_
00024 #define _TelepathyQt_protocol_parameter_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Constants>
00031 #include <TelepathyQt/Global>
00032 #include <TelepathyQt/Types>
00033 
00034 #include <QDBusSignature>
00035 #include <QSharedDataPointer>
00036 #include <QString>
00037 #include <QVariant>
00038 
00039 namespace Tp
00040 {
00041 
00042 class TP_QT_EXPORT ProtocolParameter
00043 {
00044 public:
00045     ProtocolParameter();
00046     ProtocolParameter(const ParamSpec &spec);
00047     ProtocolParameter(const QString &name,
00048                       const QDBusSignature &dbusSignature,
00049                       ConnMgrParamFlags flags,
00050                       QVariant defaultValue = QVariant());
00051     ProtocolParameter(const QString &name,
00052                       const QString &dbusSignature,
00053                       ConnMgrParamFlags flags,
00054                       QVariant defaultValue = QVariant());
00055     ProtocolParameter(const ProtocolParameter &other);
00056     ~ProtocolParameter();
00057 
00058     bool isValid() const { return mPriv.constData() != 0; }
00059 
00060     ProtocolParameter &operator=(const ProtocolParameter &other);
00061     bool operator==(const ProtocolParameter &other) const;
00062     bool operator==(const QString &name) const;
00063     bool operator<(const ProtocolParameter &other) const;
00064 
00065     QString name() const;
00066     QDBusSignature dbusSignature() const;
00067     QVariant::Type type() const;
00068     QVariant defaultValue() const;
00069 
00070     bool isRequired() const;
00071     bool isSecret() const;
00072     bool isRequiredForRegistration() const;
00073 
00074     ParamSpec bareParameter() const;
00075 
00076 private:
00077     friend class ConnectionManager;
00078     friend class ProtocolInfo;
00079 
00080     struct Private;
00081     friend struct Private;
00082     QSharedDataPointer<Private> mPriv;
00083 };
00084 
00085 typedef QList<ProtocolParameter> ProtocolParameterList;
00086 
00087 uint qHash(const ProtocolParameter &parameter);
00088 
00089 } // Tp
00090 
00091 Q_DECLARE_METATYPE(Tp::ProtocolParameter);
00092 Q_DECLARE_METATYPE(Tp::ProtocolParameterList);
00093 
00094 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_0x6b.html0000644000175200001440000000337112000060453023660 0ustar00collabora-develusers00000000000000 Class Members
   Home · All Classes · All Namespaces · Modules · Functions · Files
Here is a list of all class members with links to the classes they belong to:

- k -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00039.html0000644000175200001440000000760612000060453021632 0ustar00collabora-develusers00000000000000 Tp::AccessControl Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AccessControl Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

An access control mode for extended presence items like geolocation. This type isn't actually used by the SimplePresence interface, but it's included here so it can be referenced by rich presence interfaces.

New interfaces should use this type, and NOT Rich_Presence_Access_Control.


Member Data Documentation

The type of access control to apply.

Any additional information required by the Type. The required type and semantics are defined for each Access_Control_Type.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00920.html0000644000175200001440000001361112000060453021622 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ProtocolInfo Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00182.html0000644000175200001440000010613312000060453021624 0ustar00collabora-develusers00000000000000 Tp::Client::ConnectionInterfacePresenceInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfacePresenceInterface Class Reference

#include <TelepathyQt/Connection>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Connection.Interface.Presence".


Constructor & Destructor Documentation

Tp::Client::ConnectionInterfacePresenceInterface::ConnectionInterfacePresenceInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfacePresenceInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ConnectionInterfacePresenceInterface::ConnectionInterfacePresenceInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfacePresenceInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ConnectionInterfacePresenceInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ConnectionInterfacePresenceInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ConnectionInterfacePresenceInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Connection.Interface.Presence", which this class represents.

Returns:
The D-Bus interface name.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::ConnectionInterfacePresenceInterface::AddStatus ( const QString &  status,
const QVariantMap &  parameters,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method AddStatus on the remote object.

Request that a single presence status is published for the user, along with any desired parameters. Changes will be indicated by PresenceUpdate signals being emitted.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
statusThe string identifier of the desired status
parametersA dictionary of optional parameter names mapped to their variant-boxed values
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ConnectionInterfacePresenceInterface::ClearStatus ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method ClearStatus on the remote object.

Request that all of a user's presence statuses be removed. Be aware that this request may simply result in the statuses being replaced by a default available status. Changes will be indicated by PresenceUpdate signals being emitted.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply<Tp::ContactPresences> Tp::Client::ConnectionInterfacePresenceInterface::GetPresence ( const Tp::UIntList contacts,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method GetPresence on the remote object.

Get presence previously emitted by PresenceUpdate for the given contacts. Data is returned in the same structure as the PresenceUpdate signal. Using this method in favour of RequestPresence has the advantage that it will not wake up each client connected to the PresenceUpdate signal.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
contactsAn array of the contacts whose presence should be obtained
timeoutThe timeout in milliseconds.
Returns:

Presence information in the same format as for the PresenceUpdate signal

QDBusPendingReply<Tp::StatusSpecMap> Tp::Client::ConnectionInterfacePresenceInterface::GetStatuses ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method GetStatuses on the remote object.

Get a dictionary of the valid presence statuses for this connection. This is only available when online because only some statuses will be available on some servers.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
Returns:

A dictionary of string identifiers mapped to a struct for each status, containing: a type value from one of the values above a boolean to indicate if this status may be set on yourself a boolean to indicate if this is an exclusive status which you may not set alongside any other a dictionary of valid optional string argument names mapped to their types

QDBusPendingReply Tp::Client::ConnectionInterfacePresenceInterface::RemoveStatus ( const QString &  status,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method RemoveStatus on the remote object.

Request that the given presence status is no longer published for the user. Changes will be indicated by PresenceUpdate signals being emitted. As with ClearStatus, removing a status may actually result in it being replaced by a default available status.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
statusThe string identifier of the status not to publish anymore for the user
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ConnectionInterfacePresenceInterface::RequestPresence ( const Tp::UIntList contacts,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method RequestPresence on the remote object.

Request the presence for contacts on this connection. A PresenceUpdate signal will be emitted when they are received. This is not the same as subscribing to the presence of a contact, which must be done using the 'subscription' ContactList, and on some protocols presence information may not be available unless a subscription exists.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
contactsAn array of the contacts whose presence should be obtained
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ConnectionInterfacePresenceInterface::SetLastActivityTime ( uint  time,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method SetLastActivityTime on the remote object.

Request that the recorded last activity time for the user be updated on the server.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeA UNIX timestamp of the user's last activity time (in UTC)
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ConnectionInterfacePresenceInterface::SetStatus ( const Tp::MultipleStatusMap statuses,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method SetStatus on the remote object.

Request that the user's presence be changed to the given statuses and desired parameters. Changes will be reflected by PresenceUpdate() signals being emitted.

Statuses whose Connection_Presence_Type is Offline, Error or Unknown MUST NOT be passed to this function. Connection managers SHOULD reject these statuses.

On certain protocols, this method may be called on a newly-created connection which is still in the DISCONNECTED state, and will sign on with the requested status. If the requested status is not available after signing on, NotAvailable will be returned and the connection will remain offline, or if the protocol does not support signing on with a certain status, Disconnected will be returned.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
statusesA dictionary mapping status identifiers to dictionaries, which map optional parameter names to their variant-boxed values
timeoutThe timeout in milliseconds.

Represents the signal PresenceUpdate on the remote object.

This signal should be emitted when your own presence has been changed, or the presence of the member of any of the connection's channels has been changed, or when the presence requested by RequestPresence is available.

Parameters:
presenceA dictionary of contact handles mapped to a struct containing a UNIX timestamp of the last activity time (in UTC), and a dictionary mapping the contact's current status identifiers to a dictionary of optional parameter names mapped to their variant-boxed values
void Tp::Client::ConnectionInterfacePresenceInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00222.html0000644000175200001440000004443012000060453021620 0ustar00collabora-develusers00000000000000 Tp::Client::DebugInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

#include <TelepathyQt/DebugReceiver>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

  • void NewDebugMessage (double time, const QString &domain, uint level, const QString &message)

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Debug".


Constructor & Destructor Documentation

Tp::Client::DebugInterface::DebugInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a DebugInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::DebugInterface::DebugInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a DebugInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a DebugInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Member Function Documentation

static QLatin1String Tp::Client::DebugInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Debug", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property Enabled of type bool.

TRUE if the NewDebugMessage signal should be emitted when a new debug message is generated.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous setter for the remote object property Enabled of type bool.

TRUE if the NewDebugMessage signal should be emitted when a new debug message is generated.

Returns:
A pending operation which will emit finished when the property has been set.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply<Tp::DebugMessageList> Tp::Client::DebugInterface::GetMessages ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method GetMessages on the remote object.

Retrieve buffered debug messages. An implementation could have a limit on how many message it keeps and so the array returned from this method should not be assumed to be all of the messages in the lifetime of the service.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
Returns:

A list of debug messages.

void Tp::Client::DebugInterface::NewDebugMessage ( double  time,
const QString &  domain,
uint  level,
const QString &  message 
) [signal]

Represents the signal NewDebugMessage on the remote object.

Emitted when a debug messages is generated if the Enabled property is set to TRUE.

Parameters:
timeTimestamp of the debug message.
domainDomain of the debug message, as described in the Debug_Message struct.
levelLevel of the debug message.
messageThe text of the debug message.
void Tp::Client::DebugInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00924.html0000644000175200001440000000760412000060453021633 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ReadyObject Member List
This is the complete list of members for Tp::ReadyObject, including all inherited members.
actualFeatures() const Tp::ReadyObject [virtual]
becomeReady(const Features &requestedFeatures=Features())Tp::ReadyObject [virtual]
isReady(const Features &features=Features()) const Tp::ReadyObject [virtual]
missingFeatures() const Tp::ReadyObject [virtual]
readinessHelper() const Tp::ReadyObject [protected]
ReadyObject(RefCounted *object, const Feature &featureCore)Tp::ReadyObject
ReadyObject(DBusProxy *proxy, const Feature &featureCore)Tp::ReadyObject
requestedFeatures() const Tp::ReadyObject [virtual]
~ReadyObject()Tp::ReadyObject [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_0x74.html0000644000175200001440000002411412000060453023601 0ustar00collabora-develusers00000000000000 Class Members
   Home · All Classes · All Namespaces · Modules · Functions · Files
Here is a list of all class members with links to the classes they belong to:

- t -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00589_source.html0000644000175200001440000001525012000060453023216 0ustar00collabora-develusers00000000000000 handled-channel-notifier.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
handled-channel-notifier.h
00001 
00023 #ifndef _TelepathyQt_handled_channel_notifier_h_HEADER_GUARD_
00024 #define _TelepathyQt_handled_channel_notifier_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Channel>
00031 #include <TelepathyQt/Types>
00032 
00033 #include <QObject>
00034 
00035 namespace Tp
00036 {
00037 
00038 class ChannelRequestHints;
00039 class RequestTemporaryHandler;
00040 
00041 class TP_QT_EXPORT HandledChannelNotifier : public QObject
00042 {
00043     Q_OBJECT
00044     Q_DISABLE_COPY(HandledChannelNotifier)
00045 
00046 public:
00047     ~HandledChannelNotifier();
00048 
00049     ChannelPtr channel() const;
00050 
00051 Q_SIGNALS:
00052     void handledAgain(const QDateTime &userActionTime, const Tp::ChannelRequestHints &requestHints);
00053 
00054 protected:
00055     void connectNotify(const char *);
00056 
00057 private Q_SLOTS:
00058     TP_QT_NO_EXPORT void onChannelReceived(const Tp::ChannelPtr &channel,
00059             const QDateTime &userActionTime, const Tp::ChannelRequestHints &requestHints);
00060     TP_QT_NO_EXPORT void onChannelInvalidated();
00061 
00062 private:
00063     friend class PendingChannel;
00064 
00065     HandledChannelNotifier(const ClientRegistrarPtr &cr,
00066             const SharedPtr<RequestTemporaryHandler> &handler);
00067 
00068     struct Private;
00069     friend struct Private;
00070     Private *mPriv;
00071 };
00072 
00073 } // Tp
00074 
00075 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00098.html0000644000175200001440000006012012000060453021625 0ustar00collabora-develusers00000000000000 Tp::AbstractClientHandler::Capabilities Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AbstractClientHandler::Capabilities Class Reference

The AbstractClientHandler::Capabilities class provides a wrapper around the capabilities of a handler. More...

#include <TelepathyQt/AbstractClientHandler>

List of all members.

Public Member Functions


Detailed Description

The AbstractClientHandler::Capabilities class provides a wrapper around the capabilities of a handler.

See also:
AbstractClientHandler

Constructor & Destructor Documentation

Tp::AbstractClientHandler::Capabilities::Capabilities ( const QStringList &  tokens = QStringList())

Member Function Documentation

AbstractClientHandler::Capabilities & Tp::AbstractClientHandler::Capabilities::operator= ( const Capabilities other)
bool Tp::AbstractClientHandler::Capabilities::hasAudioCodecToken ( const QString &  mimeSubType) const [inline]
void Tp::AbstractClientHandler::Capabilities::setAudioCodecToken ( const QString &  mimeSubType) [inline]
void Tp::AbstractClientHandler::Capabilities::unsetAudioCodecToken ( const QString &  mimeSubType) [inline]
bool Tp::AbstractClientHandler::Capabilities::hasVideoCodecToken ( const QString &  mimeSubType) const [inline]
void Tp::AbstractClientHandler::Capabilities::setVideoCodecToken ( const QString &  mimeSubType) [inline]
void Tp::AbstractClientHandler::Capabilities::unsetVideoCodecToken ( const QString &  mimeSubType) [inline]
bool Tp::AbstractClientHandler::Capabilities::hasToken ( const QString &  token) const
void Tp::AbstractClientHandler::Capabilities::setToken ( const QString &  token)
void Tp::AbstractClientHandler::Capabilities::unsetToken ( const QString &  token)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01003.html0000644000175200001440000000754212000060453021621 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MediaStreamHandlerTransport Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00095.html0000644000175200001440000001114712000060453021627 0ustar00collabora-develusers00000000000000 Tp::Candidate Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Candidate Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

A Stream Candidate.


Member Data Documentation

The component number.

The IP address to use.

The port number to use.

QVariantMap Tp::Candidate::info

Additional information about the candidate.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01016.html0000644000175200001440000000515312000060453021621 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ProtocolPropertiesMap Member List
This is the complete list of members for Tp::ProtocolPropertiesMap, including all inherited members.
operator=(const QMap< QString, QVariantMap > &a)Tp::ProtocolPropertiesMap [inline]
ProtocolPropertiesMap()Tp::ProtocolPropertiesMap [inline]
ProtocolPropertiesMap(const QMap< QString, QVariantMap > &a)Tp::ProtocolPropertiesMap [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00867.html0000644000175200001440000000656012000060453021641 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MemberFunctor4< R, T, Arg1, Arg2, Arg3, Arg4 > Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00789.html0000644000175200001440000002134012000060453021635 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::BaseProtocolAddressingInterface Member List
This is the complete list of members for Tp::BaseProtocolAddressingInterface, including all inherited members.
AbstractDBusServiceInterface(const QString &interfaceName)Tp::AbstractDBusServiceInterface
AbstractProtocolInterface(const QString &interfaceName)Tp::AbstractProtocolInterface
addressableUriSchemes() const Tp::BaseProtocolAddressingInterface
addressableVCardFields() const Tp::BaseProtocolAddressingInterface
BaseProtocolAddressingInterface()Tp::BaseProtocolAddressingInterface [protected]
create()Tp::BaseProtocolAddressingInterface [inline, static]
create()Tp::BaseProtocolAddressingInterface [inline, static]
dbusObject() const Tp::AbstractDBusServiceInterface
immutableProperties() const Tp::BaseProtocolAddressingInterface [virtual]
interfaceName() const Tp::AbstractDBusServiceInterface
isRegistered() const Tp::AbstractDBusServiceInterface
normalizeContactUri(const QString &uri, DBusError *error)Tp::BaseProtocolAddressingInterface
NormalizeContactUriCallback typedefTp::BaseProtocolAddressingInterface
normalizeVCardAddress(const QString &vcardField, const QString &vcardAddress, DBusError *error)Tp::BaseProtocolAddressingInterface
NormalizeVCardAddressCallback typedefTp::BaseProtocolAddressingInterface
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
propertyChanged(const QString &propertyName)Tp::Object [signal]
RefCounted()Tp::RefCounted [inline]
registerInterface(DBusObject *dbusObject)Tp::AbstractDBusServiceInterface [protected, virtual]
setAddressableUriSchemes(const QStringList &uriSchemes)Tp::BaseProtocolAddressingInterface
setAddressableVCardFields(const QStringList &vcardFields)Tp::BaseProtocolAddressingInterface
setNormalizeContactUriCallback(const NormalizeContactUriCallback &cb)Tp::BaseProtocolAddressingInterface
setNormalizeVCardAddressCallback(const NormalizeVCardAddressCallback &cb)Tp::BaseProtocolAddressingInterface
~AbstractDBusServiceInterface()Tp::AbstractDBusServiceInterface [virtual]
~AbstractProtocolInterface()Tp::AbstractProtocolInterface [virtual]
~BaseProtocolAddressingInterface()Tp::BaseProtocolAddressingInterface [virtual]
~Object()Tp::Object [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/classes.html0000644000175200001440000017405512000060453022456 0ustar00collabora-develusers00000000000000 Class Index
   Home · All Classes · All Namespaces · Modules · Functions · Files
Class Index
A | B | C | D | E | F | G | H | I | L | M | N | O | P | Q | R | S | T | U | V | W
  A  
ChannelClassSpecList (Tp)   ContactCodecMap (Tp)   MediaSessionHandlerInfo (Tp)   ProtocolInterfaceAvatarsInterface (Tp::Client)   
ChannelDetails (Tp)   ContactFactory (Tp)   MediaSessionHandlerInterface (Tp::Client)   ProtocolInterfacePresenceInterface (Tp::Client)   
AbstractAdaptor (Tp)   ChannelDispatcherInterface (Tp::Client)   ContactInfoField (Tp)   MediaStreamHandlerCandidate (Tp)   ProtocolParameter (Tp)   
AbstractClient (Tp)   ChannelDispatchOperation (Tp)   ContactInfoMap (Tp)   MediaStreamHandlerCodec (Tp)   ProtocolPropertiesMap (Tp)   
AbstractClientApprover (Tp)   ChannelDispatchOperationInterface (Tp::Client)   ContactLocations (Tp)   MediaStreamHandlerInterface (Tp::Client)   PtrFunctor0 (Tp)   
AbstractClientHandler (Tp)   ChannelFactory (Tp)   ContactManager (Tp)   MediaStreamHandlerTransport (Tp)   PtrFunctor1 (Tp)   
AbstractClientObserver (Tp)   ChannelInfo (Tp)   ContactMediaDescriptionPropertiesMap (Tp)   MediaStreamInfo (Tp)   PtrFunctor2 (Tp)   
AbstractDBusServiceInterface (Tp)   ChannelInterface (Tp::Client)   ContactMessenger (Tp)   MemberFunctor0 (Tp)   PtrFunctor3 (Tp)   
AbstractFunctorCaller (Tp)   ChannelInterfaceAnonymityInterface (Tp::Client)   ContactPresences (Tp)   MemberFunctor1 (Tp)   PtrFunctor4 (Tp)   
AbstractInterface (Tp)   ChannelInterfaceCallStateInterface (Tp::Client)   ContactSearchChannel (Tp)   MemberFunctor2 (Tp)   PtrFunctor5 (Tp)   
AbstractProtocolInterface (Tp)   ChannelInterfaceCaptchaAuthenticationInterface (Tp::Client)   ContactSearchMap (Tp)   MemberFunctor3 (Tp)   PtrFunctor6 (Tp)   
AccessControl (Tp)   ChannelInterfaceChatStateInterface (Tp::Client)   ContactSearchResultMap (Tp)   MemberFunctor4 (Tp)   PtrFunctor7 (Tp)   
Account (Tp)   ChannelInterfaceConferenceInterface (Tp::Client)   ContactSendingStateMap (Tp)   MemberFunctor5 (Tp)   
  Q  
AccountCapabilityFilter (Tp)   ChannelInterfaceDestroyableInterface (Tp::Client)   ContactSSRCsMap (Tp)   MemberFunctor6 (Tp)   
AccountFactory (Tp)   ChannelInterfaceDTMFInterface (Tp::Client)   ContactSubscriptionMap (Tp)   MemberFunctor7 (Tp)   QualifiedPropertyValueMap (Tp)   
AccountInterface (Tp::Client)   ChannelInterfaceFileTransferMetadataInterface (Tp::Client)   ContactSubscriptions (Tp)   Message (Tp)   
  R  
AccountInterfaceAddressingInterface (Tp::Client)   ChannelInterfaceGroupInterface (Tp::Client)   CurrencyAmount (Tp)   MessageContentPart (Tp)   
AccountInterfaceAvatarInterface (Tp::Client)   ChannelInterfaceHoldInterface (Tp::Client)   
  D  
MessageContentPartList (Tp)   ReadinessHelper (Tp)   
AccountInterfaceStorageInterface (Tp::Client)   ChannelInterfaceMediaSignallingInterface (Tp::Client)   MessagePart (Tp)   ReadyObject (Tp)   
AccountManager (Tp)   ChannelInterfaceMessagesInterface (Tp::Client)   DBusDaemonInterface (Tp::Client::DBus)   MessagePartContentMap (Tp)   ReceivedMessage (Tp)   
AccountManagerInterface (Tp::Client)   ChannelInterfacePasswordInterface (Tp::Client)   DBusError (Tp)   Metadata (Tp)   RefCounted (Tp)   
AccountPropertyFilter (Tp)   ChannelInterfaceSASLAuthenticationInterface (Tp::Client)   DBusObject (Tp)   MethodInvocationContext (Tp)   ReferencedHandles (Tp)   
AccountSet (Tp)   ChannelInterfaceSecurableInterface (Tp::Client)   DBusProxy (Tp)   MultipleStatusMap (Tp)   StreamTubeServer::RemoteContact (Tp)   
AddressingNormalizationMap (Tp)   ChannelInterfaceServicePointInterface (Tp::Client)   DBusProxyFactory (Tp)   
  N  
RequestableChannelClass (Tp)   
AliasMap (Tp)   ChannelInterfaceSMSInterface (Tp::Client)   DBusService (Tp)   RequestableChannelClassSpec (Tp)   
AliasPair (Tp)   ChannelInterfaceTubeInterface (Tp::Client)   DBusTubeChannel (Tp)   NotDelegatedError (Tp)   RequestableChannelClassSpecList (Tp)   
AndFilter (Tp)   ChannelOriginatorMap (Tp)   DBusTubeMember (Tp)   NotDelegatedMap (Tp)   RichPresenceAccessControl (Tp)   
AuthenticationTLSCertificateInterface (Tp::Client)   ChannelRequest (Tp)   DBusTubeParticipants (Tp)   NotFilter (Tp)   RoomInfo (Tp)   
Avatar (Tp)   ChannelRequestHints (Tp)   DebugInterface (Tp::Client)   
  O  
RoomListChannel (Tp)   
AvatarData (Tp)   ChannelRequestInterface (Tp::Client)   DebugMessage (Tp)   RTCPFeedbackMessage (Tp)   
AvatarSpec (Tp)   ChannelTypeCallInterface (Tp::Client)   DebugReceiver (Tp)   Object (Tp)   RTCPFeedbackMessageMap (Tp)   
AvatarTokenMap (Tp)   ChannelTypeContactListInterface (Tp::Client)   ReceivedMessage::DeliveryDetails (Tp)   ObjectImmutablePropertiesMap (Tp)   RTCPFeedbackMessageProperties (Tp)   
  B  
ChannelTypeContactSearchInterface (Tp::Client)   
  E  
ObjectPathList (Tp)   RTPHeaderExtension (Tp)   
ChannelTypeDBusTubeInterface (Tp::Client)   AbstractClientObserver::ObserverInfo (Tp)   
  S  
BaseCallback (Tp)   ChannelTypeFileTransferInterface (Tp::Client)   Connection::ErrorDetails (Tp)   OptionalInterfaceFactory (Tp)   
BaseConnection (Tp)   ChannelTypeRoomListInterface (Tp::Client)   
  F  
OrFilter (Tp)   ContactSearchChannel::SearchStateChangeDetails (Tp)   
BaseConnectionManager (Tp)   ChannelTypeServerAuthenticationInterface (Tp::Client)   OutgoingDBusTubeChannel (Tp)   ServerAuthenticationChannel (Tp)   
BaseFunctor (Tp)   ChannelTypeServerTLSConnectionInterface (Tp::Client)   Feature (Tp)   OutgoingFileTransferChannel (Tp)   ServicePoint (Tp)   
BaseFunctorCaller (Tp)   ChannelTypeStreamedMediaInterface (Tp::Client)   Features (Tp)   OutgoingStreamTubeChannel (Tp)   ServicePointInfo (Tp)   
BaseProtocol (Tp)   ChannelTypeStreamTubeInterface (Tp::Client)   FieldSpec (Tp)   
  P  
SharedPtr (Tp)   
BaseProtocolAddressingInterface (Tp)   ChannelTypeTextInterface (Tp::Client)   FileTransferChannel (Tp)   SimpleCallObserver (Tp)   
BaseProtocolAvatarsInterface (Tp)   ChannelTypeTubesInterface (Tp::Client)   FileTransferChannelCreationProperties (Tp)   Profile::Parameter (Tp)   SimpleContactPresences (Tp)   
BaseProtocolPresenceInterface (Tp)   ChatStateMap (Tp)   Filter (Tp)   StreamTubeServer::ParametersGenerator (Tp)   SimpleObserver (Tp)   
ByteArrayList (Tp)   ClientApproverInterface (Tp::Client)   FixedFeatureFactory (Tp)   ParamSpec (Tp)   SimplePresence (Tp)   
  C  
ClientHandlerInterface (Tp::Client)   FunctorCaller0 (Tp)   PeerInterface (Tp::Client::DBus)   SimpleStatusSpec (Tp)   
ClientInterface (Tp::Client)   FunctorCaller1 (Tp)   PendingAccount (Tp)   SimpleStatusSpecMap (Tp)   
Callback0 (Tp)   ClientInterfaceRequestsInterface (Tp::Client)   FunctorCaller2 (Tp)   PendingCallContent (Tp)   SimpleStreamTubeHandler (Tp)   
Callback1 (Tp)   ClientObserverInterface (Tp::Client)   FunctorCaller3 (Tp)   PendingCaptchas (Tp)   SimpleTextObserver (Tp)   
Callback2 (Tp)   ClientRegistrar (Tp)   FunctorCaller4 (Tp)   PendingChannel (Tp::Farstream)   SingleContactAttributesMap (Tp)   
Callback3 (Tp)   Codec (Tp)   FunctorCaller5 (Tp)   PendingChannel (Tp)   SocketAddressIP (Tp)   
Callback4 (Tp)   ComponentStateMap (Tp)   FunctorCaller6 (Tp)   PendingChannelRequest (Tp)   SocketAddressIPv4 (Tp)   
Callback5 (Tp)   Connection (Tp)   FunctorCaller7 (Tp)   PendingComposite (Tp)   SocketAddressIPv6 (Tp)   
Callback6 (Tp)   ConnectionCapabilities (Tp)   
  G  
PendingConnection (Tp)   SocketNetmaskIPv4 (Tp)   
Callback7 (Tp)   ConnectionFactory (Tp)   PendingContactAttributes (Tp)   SocketNetmaskIPv6 (Tp)   
CallChannel (Tp)   ConnectionInterface (Tp::Client)   GenericCapabilityFilter (Tp)   PendingContactInfo (Tp)   StatefulDBusProxy (Tp)   
CallContent (Tp)   ConnectionInterfaceAddressingInterface (Tp::Client)   GenericPropertyFilter (Tp)   PendingContacts (Tp)   StatelessDBusProxy (Tp)   
CallContentInterface (Tp::Client)   ConnectionInterfaceAliasingInterface (Tp::Client)   Channel::GroupMemberChangeDetails (Tp)   PendingDBusTubeConnection (Tp)   StatusSpec (Tp)   
CallContentInterfaceAudioControlInterface (Tp::Client)   ConnectionInterfaceAnonymityInterface (Tp::Client)   
  H  
PendingDebugMessageList (Tp)   StatusSpecMap (Tp)   
CallContentInterfaceDTMFInterface (Tp::Client)   ConnectionInterfaceAvatarsInterface (Tp::Client)   PendingFailure (Tp)   StreamCredentials (Tp)   
CallContentInterfaceMediaInterface (Tp::Client)   ConnectionInterfaceBalanceInterface (Tp::Client)   HandledChannelNotifier (Tp)   PendingHandles (Tp)   StreamedMediaChannel (Tp)   
CallContentInterfaceVideoControlInterface (Tp::Client)   ConnectionInterfaceCapabilitiesInterface (Tp::Client)   HandleIdentifierMap (Tp)   PendingOperation (Tp)   StreamedMediaStream (Tp)   
CallContentMediaDescriptionInterface (Tp::Client)   ConnectionInterfaceCellularInterface (Tp::Client)   HandleOwnerMap (Tp)   PendingReady (Tp)   StreamTubeChannel (Tp)   
CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface (Tp::Client)   ConnectionInterfaceClientTypesInterface (Tp::Client)   HandlerCapabilities (Tp)   PendingSendMessage (Tp)   StreamTubeClient (Tp)   
CallContentMediaDescriptionInterfaceRTCPFeedbackInterface (Tp::Client)   ConnectionInterfaceContactBlockingInterface (Tp::Client)   AbstractClientHandler::HandlerInfo (Tp)   PendingStreamedMediaStreams (Tp)   StreamTubeServer (Tp)   
CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface (Tp::Client)   ConnectionInterfaceContactCapabilitiesInterface (Tp::Client)   HTTPPostData (Tp)   PendingStreamTubeConnection (Tp)   StringStringMap (Tp)   
CallMemberMap (Tp)   ConnectionInterfaceContactGroupsInterface (Tp::Client)   
  I  
PendingString (Tp)   StringVariantMap (Tp)   
CallStateReason (Tp)   ConnectionInterfaceContactInfoInterface (Tp::Client)   PendingStringList (Tp)   SupportedSocketMap (Tp)   
CallStream (Tp)   ConnectionInterfaceContactListInterface (Tp::Client)   IncomingDBusTubeChannel (Tp)   PendingSuccess (Tp)   
  T  
CallStreamEndpointInterface (Tp::Client)   ConnectionInterfaceContactsInterface (Tp::Client)   IncomingFileTransferChannel (Tp)   PendingTextMessage (Tp)   
CallStreamInterface (Tp::Client)   ConnectionInterfaceLocationInterface (Tp::Client)   IncomingStreamTubeChannel (Tp)   PendingVariant (Tp)   StreamTubeClient::TcpSourceAddressGenerator (Tp)   
CallStreamInterfaceMediaInterface (Tp::Client)   ConnectionInterfaceMailNotificationInterface (Tp::Client)   Contact::InfoFields (Tp)   PendingVariantMap (Tp)   TextChannel (Tp)   
Candidate (Tp)   ConnectionInterfacePowerSavingInterface (Tp::Client)   ReadinessHelper::Introspectable (Tp)   PendingVoid (Tp)   TLSCertificateRejection (Tp)   
CandidateInfo (Tp)   ConnectionInterfacePresenceInterface (Tp::Client)   IntrospectableInterface (Tp::Client::DBus)   Profile::Presence (Tp)   StreamTubeClient::Tube (Tp)   
CandidatePair (Tp)   ConnectionInterfaceRequestsInterface (Tp::Client)   
  L  
Presence (Tp)   StreamTubeServer::Tube (Tp)   
AbstractClientHandler::Capabilities (Tp)   ConnectionInterfaceServicePointInterface (Tp::Client)   PresenceSpec (Tp)   TubeChannel (Tp)   
CapabilitiesBase (Tp)   ConnectionInterfaceSimplePresenceInterface (Tp::Client)   LastActivityAndStatuses (Tp)   PresenceSpecList (Tp)   TubeInfo (Tp)   
CapabilityChange (Tp)   ConnectionLowlevel (Tp)   LocalPendingInfo (Tp)   Profile (Tp)   
  U  
CapabilityPair (Tp)   ConnectionManager (Tp)   Location (Tp)   ProfileManager (Tp)   
Captcha (Tp)   ConnectionManagerInterface (Tp::Client)   LocationInfo (Tp)   PropertiesInterface (Tp::Client::DBus)   UIntList (Tp)   
CaptchaAnswers (Tp)   ConnectionManagerLowlevel (Tp)   
  M  
PropertiesInterfaceInterface (Tp::Client)   
  V  
CaptchaAuthentication (Tp)   Contact (Tp)   PropertyFlagsChange (Tp)   
CaptchaInfo (Tp)   ContactAttributesMap (Tp)   Mail (Tp)   PropertySpec (Tp)   VCardFieldAddressMap (Tp)   
Channel (Tp)   ContactCapabilities (Tp)   MailAddress (Tp)   PropertyValue (Tp)   VideoResolution (Tp)   
ChannelCallStateMap (Tp)   ContactCapabilitiesMap (Tp)   MailURL (Tp)   ProtocolInfo (Tp)   
  W  
ChannelClass (Tp)   ContactCapability (Tp)   MediaDescriptionOffer (Tp)   ProtocolInterface (Tp::Client)   
ChannelClassSpec (Tp)   ContactClientTypes (Tp)   MediaDescriptionProperties (Tp)   ProtocolInterfaceAddressingInterface (Tp::Client)   WeakPtr (Tp)   
A | B | C | D | E | F | G | H | I | L | M | N | O | P | Q | R | S | T | U | V | W


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00990.html0000644000175200001440000000512512000060453021632 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::DBusTubeParticipants Member List
This is the complete list of members for Tp::DBusTubeParticipants, including all inherited members.
DBusTubeParticipants()Tp::DBusTubeParticipants [inline]
DBusTubeParticipants(const QMap< uint, QString > &a)Tp::DBusTubeParticipants [inline]
operator=(const QMap< uint, QString > &a)Tp::DBusTubeParticipants [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_vars_0x6c.html0000644000175200001440000000352612000060453024716 0ustar00collabora-develusers00000000000000 Class Members - Variables
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- l -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00261.html0000644000175200001440000001172412000060453021623 0ustar00collabora-develusers00000000000000 Tp::Mail Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Mail Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions

  • Mail ()
  • Mail (const QMap< QString, QDBusVariant > &a)
  • Mail & operator= (const QMap< QString, QDBusVariant > &a)

Detailed Description

Mapping type generated from the specification. Convertible with QMap<QString, QDBusVariant>, but needed to have a discrete type in the Qt type system.

An extensible map representing a mail, or (on protocols where Thread_Based appears in MailNotificationFlags) a thread of mails. All keys are optional where not otherwise stated; however, at least one of "senders" and "subject" must be included.


Constructor & Destructor Documentation

Tp::Mail::Mail ( ) [inline]
Tp::Mail::Mail ( const QMap< QString, QDBusVariant > &  a) [inline]

Member Function Documentation

Mail& Tp::Mail::operator= ( const QMap< QString, QDBusVariant > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01076.html0000644000175200001440000002174112000060453021630 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::CallStreamInterface Member List
This is the complete list of members for Tp::Client::CallStreamInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
CallStreamInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::CallStreamInterface
CallStreamInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::CallStreamInterface
CallStreamInterface(Tp::DBusProxy *proxy)Tp::Client::CallStreamInterface
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::CallStreamInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
LocalSendingStateChanged(uint state, const Tp::CallStateReason &reason)Tp::Client::CallStreamInterface [signal]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
RemoteMembersChanged(const Tp::ContactSendingStateMap &updates, const Tp::HandleIdentifierMap &identifiers, const Tp::UIntList &removed, const Tp::CallStateReason &reason)Tp::Client::CallStreamInterface [signal]
requestAllProperties() const Tp::Client::CallStreamInterface [inline]
requestPropertyCanRequestReceiving() const Tp::Client::CallStreamInterface [inline]
requestPropertyInterfaces() const Tp::Client::CallStreamInterface [inline]
requestPropertyLocalSendingState() const Tp::Client::CallStreamInterface [inline]
requestPropertyRemoteMemberIdentifiers() const Tp::Client::CallStreamInterface [inline]
requestPropertyRemoteMembers() const Tp::Client::CallStreamInterface [inline]
RequestReceiving(uint contact, bool receive, int timeout=-1)Tp::Client::CallStreamInterface [inline, slot]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
SetSending(bool send, int timeout=-1)Tp::Client::CallStreamInterface [inline, slot]
staticInterfaceName()Tp::Client::CallStreamInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00331.html0000644000175200001440000001243412000060453021620 0ustar00collabora-develusers00000000000000 Tp::PendingVoid Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingVoid Class Reference

The PendingVoid class is a generic subclass of PendingOperation representing a pending D-Bus method call that does not return anything (or returns a result that is not interesting). More...

#include <TelepathyQt/PendingVoid>

Inherits Tp::PendingOperation.

List of all members.

Public Member Functions


Detailed Description

The PendingVoid class is a generic subclass of PendingOperation representing a pending D-Bus method call that does not return anything (or returns a result that is not interesting).


Constructor & Destructor Documentation

Tp::PendingVoid::PendingVoid ( QDBusPendingCall  call,
const SharedPtr< RefCounted > &  object 
)

Construct a new PendingVoid object.

Parameters:
objectThe object on which this pending operation takes place.
callA pending call as returned by the auto-generated low level Telepathy API; if the method returns anything, the return value(s) will be ignored.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00453_source.html0000644000175200001440000002756112000060453023214 0ustar00collabora-develusers00000000000000 call-content.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
call-content.h
00001 
00023 #ifndef _TelepathyQt_call_content_h_HEADER_GUARD_
00024 #define _TelepathyQt_call_content_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/_gen/cli-call-content.h>
00031 
00032 #include <TelepathyQt/CallStream>
00033 
00034 namespace Tp
00035 {
00036 
00037 typedef QList<CallContentPtr> CallContents;
00038 
00039 class TP_QT_EXPORT CallContent : public StatefulDBusProxy,
00040                     public OptionalInterfaceFactory<CallContent>
00041 {
00042     Q_OBJECT
00043     Q_DISABLE_COPY(CallContent)
00044 
00045 public:
00046     ~CallContent();
00047 
00048     CallChannelPtr channel() const;
00049 
00050     QString name() const;
00051     MediaStreamType type() const;
00052     CallContentDisposition disposition() const;
00053     CallStreams streams() const;
00054 
00055     PendingOperation *remove();
00056 
00057     bool supportsDTMF() const;
00058     PendingOperation *startDTMFTone(DTMFEvent event);
00059     PendingOperation *stopDTMFTone();
00060 
00061 Q_SIGNALS:
00062     void streamAdded(const Tp::CallStreamPtr &stream);
00063     void streamRemoved(const Tp::CallStreamPtr &stream, const Tp::CallStateReason &reason);
00064 
00065 private Q_SLOTS:
00066     TP_QT_NO_EXPORT void gotMainProperties(Tp::PendingOperation *op);
00067     TP_QT_NO_EXPORT void onStreamsAdded(const Tp::ObjectPathList &streamPath);
00068     TP_QT_NO_EXPORT void onStreamsRemoved(const Tp::ObjectPathList &streamPath,
00069             const Tp::CallStateReason &reason);
00070     TP_QT_NO_EXPORT void onStreamReady(Tp::PendingOperation *op);
00071 
00072 private:
00073     friend class CallChannel;
00074     friend class PendingCallContent;
00075 
00076     TP_QT_NO_EXPORT static const Feature FeatureCore;
00077 
00078     TP_QT_NO_EXPORT CallContent(const CallChannelPtr &channel,
00079             const QDBusObjectPath &contentPath);
00080 
00081     struct Private;
00082     friend struct Private;
00083     Private *mPriv;
00084 };
00085 
00086 class TP_QT_EXPORT PendingCallContent : public PendingOperation
00087 {
00088     Q_OBJECT
00089     Q_DISABLE_COPY(PendingCallContent)
00090 
00091 public:
00092     ~PendingCallContent();
00093 
00094     CallContentPtr content() const;
00095 
00096 private Q_SLOTS:
00097     TP_QT_NO_EXPORT void gotContent(QDBusPendingCallWatcher *watcher);
00098 
00099     TP_QT_NO_EXPORT void onContentReady(Tp::PendingOperation *op);
00100     TP_QT_NO_EXPORT void onContentRemoved(const Tp::CallContentPtr &content);
00101 
00102 private:
00103     friend class CallChannel;
00104 
00105     TP_QT_NO_EXPORT PendingCallContent(const CallChannelPtr &channel,
00106             const QString &contentName, MediaStreamType type, MediaStreamDirection direction);
00107 
00108     struct Private;
00109     friend struct Private;
00110     Private *mPriv;
00111 };
00112 
00113 } // Tp
00114 
00115 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01078.html0000644000175200001440000002257312000060453021636 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelDispatchOperationInterface Member List
This is the complete list of members for Tp::Client::ChannelDispatchOperationInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ChannelDispatchOperationInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelDispatchOperationInterface
ChannelDispatchOperationInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelDispatchOperationInterface
ChannelDispatchOperationInterface(Tp::DBusProxy *proxy)Tp::Client::ChannelDispatchOperationInterface
ChannelLost(const QDBusObjectPath &channel, const QString &error, const QString &message)Tp::Client::ChannelDispatchOperationInterface [signal]
Claim(int timeout=-1)Tp::Client::ChannelDispatchOperationInterface [inline, slot]
Finished()Tp::Client::ChannelDispatchOperationInterface [signal]
HandleWith(const QString &handler, int timeout=-1)Tp::Client::ChannelDispatchOperationInterface [inline, slot]
HandleWithTime(const QString &handler, qlonglong userActionTime, int timeout=-1)Tp::Client::ChannelDispatchOperationInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ChannelDispatchOperationInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ChannelDispatchOperationInterface [inline]
requestPropertyAccount() const Tp::Client::ChannelDispatchOperationInterface [inline]
requestPropertyChannels() const Tp::Client::ChannelDispatchOperationInterface [inline]
requestPropertyConnection() const Tp::Client::ChannelDispatchOperationInterface [inline]
requestPropertyInterfaces() const Tp::Client::ChannelDispatchOperationInterface [inline]
requestPropertyPossibleHandlers() const Tp::Client::ChannelDispatchOperationInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ChannelDispatchOperationInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00850.html0000644000175200001440000007051512000060453021632 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::DBusTubeChannel Member List
This is the complete list of members for Tp::DBusTubeChannel, including all inherited members.
actualFeatures() const Tp::ReadyObject [virtual]
address() const Tp::DBusTubeChannel
baseInterface() const Tp::Channel [protected]
becomeReady(const Features &requestedFeatures=Features())Tp::ReadyObject [virtual]
busName() const Tp::DBusProxy
busNameAdded(const QString &busName, const Tp::ContactPtr &contact)Tp::DBusTubeChannel [signal]
busNameRemoved(const QString &busName, const Tp::ContactPtr &contact)Tp::DBusTubeChannel [signal]
BypassInterfaceCheck enum valueTp::OptionalInterfaceFactory< Channel >
Channel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature)Tp::Channel [protected]
channelType() const Tp::Channel
CheckInterfaceSupported enum valueTp::OptionalInterfaceFactory< Channel >
conferenceChannelMerged(const Tp::ChannelPtr &channel)Tp::Channel [signal]
conferenceChannelRemoved(const Tp::ChannelPtr &channel, const Tp::Channel::GroupMemberChangeDetails &details)Tp::Channel [signal]
conferenceChannels() const Tp::Channel
conferenceInitialChannels() const Tp::Channel
conferenceInitialInviteeContacts() const Tp::Channel
conferenceMergeChannel(const ChannelPtr &channel)Tp::Channel
conferenceOriginalChannels() const Tp::Channel
conferenceSplitChannel()Tp::Channel
connection() const Tp::Channel
contactsForBusNames() const Tp::DBusTubeChannel
create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties)Tp::DBusTubeChannel [static]
dbusConnection() const Tp::DBusProxy
DBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::DBusProxy
DBusTubeChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties)Tp::DBusTubeChannel [protected]
FeatureBusNameMonitoringTp::DBusTubeChannel [static]
FeatureConferenceInitialInviteeContactsTp::Channel [static]
FeatureCoreTp::DBusTubeChannel [static]
groupAddContacts(const QList< ContactPtr > &contacts, const QString &message=QString())Tp::Channel
groupAddSelfHandle()Tp::Channel [protected, slot]
groupAreHandleOwnersAvailable() const Tp::Channel
groupCanAcceptContactsWithMessage() const Tp::Channel
groupCanAddContacts() const Tp::Channel
groupCanAddContactsChanged(bool canAddContacts)Tp::Channel [signal]
groupCanAddContactsWithMessage() const Tp::Channel
groupCanDepartWithMessage() const Tp::Channel
groupCanRejectContactsWithMessage() const Tp::Channel
groupCanRemoveContacts() const Tp::Channel
groupCanRemoveContactsChanged(bool canRemoveContacts)Tp::Channel [signal]
groupCanRemoveContactsWithMessage() const Tp::Channel
groupCanRescindContacts() const Tp::Channel
groupCanRescindContactsChanged(bool canRescindContacts)Tp::Channel [signal]
groupCanRescindContactsWithMessage() const Tp::Channel
groupContacts(bool includeSelfContact=true) const Tp::Channel
groupFlags() const Tp::Channel
groupFlagsChanged(Tp::ChannelGroupFlags flags, Tp::ChannelGroupFlags added, Tp::ChannelGroupFlags removed)Tp::Channel [signal]
groupHandleOwners() const Tp::Channel
groupHandleOwnersChanged(const Tp::HandleOwnerMap &owners, const Tp::UIntList &added, const Tp::UIntList &removed)Tp::Channel [signal]
groupIsSelfContactTracked() const Tp::Channel
groupLocalPendingContactChangeInfo(const ContactPtr &contact) const Tp::Channel
groupLocalPendingContacts(bool includeSelfContact=true) const Tp::Channel
groupMembersChanged(const Tp::Contacts &groupMembersAdded, const Tp::Contacts &groupLocalPendingMembersAdded, const Tp::Contacts &groupRemotePendingMembersAdded, const Tp::Contacts &groupMembersRemoved, const Tp::Channel::GroupMemberChangeDetails &details)Tp::Channel [signal]
groupRemotePendingContacts(bool includeSelfContact=true) const Tp::Channel
groupRemoveContacts(const QList< ContactPtr > &contacts, const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone)Tp::Channel
groupSelfContact() const Tp::Channel
groupSelfContactChanged()Tp::Channel [signal]
groupSelfContactRemoveInfo() const Tp::Channel
groupSelfHandleIsLocalPending() const Tp::Channel [protected]
hasInterface(const QString &name) constTp::OptionalInterfaceFactory< Channel > [inline]
immutableProperties() const Tp::Channel
initiatorContact() const Tp::Channel
interface() constTp::OptionalInterfaceFactory< Channel > [inline]
interfaces() constTp::OptionalInterfaceFactory< Channel > [inline]
InterfaceSupportedChecking enum nameTp::OptionalInterfaceFactory< Channel >
invalidate(const QString &reason, const QString &message)Tp::DBusProxy [protected]
invalidate(const QDBusError &error)Tp::DBusProxy [protected]
invalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage)Tp::DBusProxy [signal]
invalidationMessage() const Tp::DBusProxy
invalidationReason() const Tp::DBusProxy
isConference() const Tp::Channel
isReady(const Features &features=Features()) const Tp::ReadyObject [virtual]
isRequested() const Tp::Channel
isValid() const Tp::DBusProxy
missingFeatures() const Tp::ReadyObject [virtual]
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
objectPath() const Tp::DBusProxy
optionalInterface(InterfaceSupportedChecking check=CheckInterfaceSupported) constTp::OptionalInterfaceFactory< Channel > [inline]
OptionalInterfaceFactory(Channel *this_)Tp::OptionalInterfaceFactory< Channel > [inline]
parameters() const Tp::TubeChannel
propertyChanged(const QString &propertyName)Tp::Object [signal]
readinessHelper() const Tp::ReadyObject [protected]
ReadyObject(RefCounted *object, const Feature &featureCore)Tp::ReadyObject
ReadyObject(DBusProxy *proxy, const Feature &featureCore)Tp::ReadyObject
RefCounted()Tp::RefCounted [inline]
requestClose()Tp::Channel
requestedFeatures() const Tp::ReadyObject [virtual]
requestLeave(const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone)Tp::Channel
serviceName() const Tp::DBusTubeChannel
setBusName(const QString &busName)Tp::DBusProxy [protected]
setInterfaces(const QStringList &interfaces)Tp::OptionalInterfaceFactory< Channel > [inline, protected]
setParameters(const QVariantMap &parameters)Tp::TubeChannel [protected]
state() const Tp::TubeChannel
stateChanged(Tp::TubeChannelState state)Tp::TubeChannel [signal]
StatefulDBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::StatefulDBusProxy
supportsConferenceMerging() const Tp::Channel
supportsConferenceSplitting() const Tp::Channel
supportsRestrictingToCurrentUser() const Tp::DBusTubeChannel
targetContact() const Tp::Channel
targetHandle() const Tp::Channel
targetHandleType() const Tp::Channel
targetId() const Tp::Channel
TubeChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature=TubeChannel::FeatureCore)Tp::TubeChannel [protected]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique)Tp::StatefulDBusProxy [static]
uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique, QString &error, QString &message)Tp::StatefulDBusProxy [static]
~Channel()Tp::Channel [virtual]
~DBusProxy()Tp::DBusProxy [virtual]
~DBusTubeChannel()Tp::DBusTubeChannel [virtual]
~Object()Tp::Object [virtual]
~OptionalInterfaceFactory()Tp::OptionalInterfaceFactory< Channel > [inline]
~ReadyObject()Tp::ReadyObject [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]
~StatefulDBusProxy()Tp::StatefulDBusProxy [virtual]
~TubeChannel()Tp::TubeChannel [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01131.html0000644000175200001440000002200212000060453021607 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceContactBlockingInterface Member List
This is the complete list of members for Tp::Client::ConnectionInterfaceContactBlockingInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
BlockContacts(const Tp::UIntList &contacts, bool reportAbusive, int timeout=-1)Tp::Client::ConnectionInterfaceContactBlockingInterface [inline, slot]
BlockedContactsChanged(const Tp::HandleIdentifierMap &blockedContacts, const Tp::HandleIdentifierMap &unblockedContacts)Tp::Client::ConnectionInterfaceContactBlockingInterface [signal]
ConnectionInterfaceContactBlockingInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceContactBlockingInterface
ConnectionInterfaceContactBlockingInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceContactBlockingInterface
ConnectionInterfaceContactBlockingInterface(Tp::DBusProxy *proxy)Tp::Client::ConnectionInterfaceContactBlockingInterface
ConnectionInterfaceContactBlockingInterface(const Tp::Client::ConnectionInterface &mainInterface)Tp::Client::ConnectionInterfaceContactBlockingInterface [explicit]
ConnectionInterfaceContactBlockingInterface(const Tp::Client::ConnectionInterface &mainInterface, QObject *parent)Tp::Client::ConnectionInterfaceContactBlockingInterface
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ConnectionInterfaceContactBlockingInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ConnectionInterfaceContactBlockingInterface [inline]
RequestBlockedContacts(int timeout=-1)Tp::Client::ConnectionInterfaceContactBlockingInterface [inline, slot]
requestPropertyContactBlockingCapabilities() const Tp::Client::ConnectionInterfaceContactBlockingInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ConnectionInterfaceContactBlockingInterface [inline, static]
UnblockContacts(const Tp::UIntList &contacts, int timeout=-1)Tp::Client::ConnectionInterfaceContactBlockingInterface [inline, slot]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00778.html0000644000175200001440000005006712000060453021643 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AccountManager Member List
This is the complete list of members for Tp::AccountManager, including all inherited members.
accountFactory() const Tp::AccountManager
accountForObjectPath(const QString &path) const Tp::AccountManager
accountForPath(const QString &path) const Tp::AccountManager
AccountManager(const QDBusConnection &bus, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory, const Feature &coreFeature)Tp::AccountManager [protected]
accountsByProtocol(const QString &protocolName) const Tp::AccountManager
accountsForObjectPaths(const QStringList &paths) const Tp::AccountManager
accountsForPaths(const QStringList &paths) const Tp::AccountManager
actualFeatures() const Tp::ReadyObject [virtual]
allAccounts() const Tp::AccountManager
audioCallAccounts() const Tp::AccountManager
baseInterface() const Tp::AccountManager [protected]
becomeReady(const Features &requestedFeatures=Features())Tp::ReadyObject [virtual]
busName() const Tp::DBusProxy
BypassInterfaceCheck enum valueTp::OptionalInterfaceFactory< AccountManager >
channelFactory() const Tp::AccountManager
CheckInterfaceSupported enum valueTp::OptionalInterfaceFactory< AccountManager >
connectionFactory() const Tp::AccountManager
contactFactory() const Tp::AccountManager
create(const QDBusConnection &bus)Tp::AccountManager [static]
create(const AccountFactoryConstPtr &accountFactory=AccountFactory::create(QDBusConnection::sessionBus(), Account::FeatureCore), const ConnectionFactoryConstPtr &connectionFactory=ConnectionFactory::create(QDBusConnection::sessionBus()), const ChannelFactoryConstPtr &channelFactory=ChannelFactory::create(QDBusConnection::sessionBus()), const ContactFactoryConstPtr &contactFactory=ContactFactory::create())Tp::AccountManager [static]
create(const QDBusConnection &bus, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory=ContactFactory::create())Tp::AccountManager [static]
createAccount(const QString &connectionManager, const QString &protocol, const QString &displayName, const QVariantMap &parameters, const QVariantMap &properties=QVariantMap())Tp::AccountManager
dbusConnection() const Tp::DBusProxy
DBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::DBusProxy
disabledAccounts() const Tp::AccountManager
enabledAccounts() const Tp::AccountManager
FeatureCoreTp::AccountManager [static]
fileTransferAccounts() const Tp::AccountManager
filterAccounts(const AccountFilterConstPtr &filter) const Tp::AccountManager
filterAccounts(const QVariantMap &filter) const Tp::AccountManager
hasInterface(const QString &name) constTp::OptionalInterfaceFactory< AccountManager > [inline]
interface() constTp::OptionalInterfaceFactory< AccountManager > [inline]
interfaces() constTp::OptionalInterfaceFactory< AccountManager > [inline]
InterfaceSupportedChecking enum nameTp::OptionalInterfaceFactory< AccountManager >
invalidAccounts() const Tp::AccountManager
invalidate(const QString &reason, const QString &message)Tp::DBusProxy [protected]
invalidate(const QDBusError &error)Tp::DBusProxy [protected]
invalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage)Tp::DBusProxy [signal]
invalidationMessage() const Tp::DBusProxy
invalidationReason() const Tp::DBusProxy
isReady(const Features &features=Features()) const Tp::ReadyObject [virtual]
isValid() const Tp::DBusProxy
missingFeatures() const Tp::ReadyObject [virtual]
newAccount(const Tp::AccountPtr &account)Tp::AccountManager [signal]
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
objectPath() const Tp::DBusProxy
offlineAccounts() const Tp::AccountManager
onlineAccounts() const Tp::AccountManager
optionalInterface(InterfaceSupportedChecking check=CheckInterfaceSupported) constTp::OptionalInterfaceFactory< AccountManager > [inline]
OptionalInterfaceFactory(AccountManager *this_)Tp::OptionalInterfaceFactory< AccountManager > [inline]
propertyChanged(const QString &propertyName)Tp::Object [signal]
readinessHelper() const Tp::ReadyObject [protected]
ReadyObject(RefCounted *object, const Feature &featureCore)Tp::ReadyObject
ReadyObject(DBusProxy *proxy, const Feature &featureCore)Tp::ReadyObject
RefCounted()Tp::RefCounted [inline]
requestedFeatures() const Tp::ReadyObject [virtual]
setBusName(const QString &busName)Tp::DBusProxy [protected]
setInterfaces(const QStringList &interfaces)Tp::OptionalInterfaceFactory< AccountManager > [inline, protected]
StatelessDBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::StatelessDBusProxy
streamedMediaAudioCallAccounts() const Tp::AccountManager
streamedMediaCallAccounts() const Tp::AccountManager
streamedMediaVideoCallAccounts() const Tp::AccountManager
streamedMediaVideoCallWithAudioAccounts() const Tp::AccountManager
supportedAccountProperties() const Tp::AccountManager
textChatAccounts() const Tp::AccountManager
textChatroomAccounts() const Tp::AccountManager
validAccounts() const Tp::AccountManager
videoCallAccounts() const Tp::AccountManager
~AccountManager()Tp::AccountManager [virtual]
~DBusProxy()Tp::DBusProxy [virtual]
~Object()Tp::Object [virtual]
~OptionalInterfaceFactory()Tp::OptionalInterfaceFactory< AccountManager > [inline]
~ReadyObject()Tp::ReadyObject [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]
~StatelessDBusProxy()Tp::StatelessDBusProxy [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00207.html0000644000175200001440000001272712000060453021627 0ustar00collabora-develusers00000000000000 Tp::ContactSearchResultMap Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactSearchResultMap Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<QString, ContactInfoFieldList>, but needed to have a discrete type in the Qt type system.

A map from contact identifier to search result, emitted in the SearchResultReceived signal.


Constructor & Destructor Documentation


Member Function Documentation

ContactSearchResultMap& Tp::ContactSearchResultMap::operator= ( const QMap< QString, ContactInfoFieldList > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01079.html0000644000175200001440000002265312000060453021636 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelDispatcherInterface Member List
This is the complete list of members for Tp::Client::ChannelDispatcherInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ChannelDispatcherInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelDispatcherInterface
ChannelDispatcherInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelDispatcherInterface
ChannelDispatcherInterface(Tp::DBusProxy *proxy)Tp::Client::ChannelDispatcherInterface
CreateChannel(const QDBusObjectPath &account, const QVariantMap &requestedProperties, qlonglong userActionTime, const QString &preferredHandler, int timeout=-1)Tp::Client::ChannelDispatcherInterface [inline, slot]
CreateChannelWithHints(const QDBusObjectPath &account, const QVariantMap &requestedProperties, qlonglong userActionTime, const QString &preferredHandler, const QVariantMap &hints, int timeout=-1)Tp::Client::ChannelDispatcherInterface [inline, slot]
DelegateChannels(const Tp::ObjectPathList &channels, qlonglong userActionTime, const QString &preferredHandler, int timeout=-1)Tp::Client::ChannelDispatcherInterface [inline, slot]
EnsureChannel(const QDBusObjectPath &account, const QVariantMap &requestedProperties, qlonglong userActionTime, const QString &preferredHandler, int timeout=-1)Tp::Client::ChannelDispatcherInterface [inline, slot]
EnsureChannelWithHints(const QDBusObjectPath &account, const QVariantMap &requestedProperties, qlonglong userActionTime, const QString &preferredHandler, const QVariantMap &hints, int timeout=-1)Tp::Client::ChannelDispatcherInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ChannelDispatcherInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
PresentChannel(const QDBusObjectPath &channel, qlonglong userActionTime, int timeout=-1)Tp::Client::ChannelDispatcherInterface [inline, slot]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ChannelDispatcherInterface [inline]
requestPropertyInterfaces() const Tp::Client::ChannelDispatcherInterface [inline]
requestPropertySupportsRequestHints() const Tp::Client::ChannelDispatcherInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ChannelDispatcherInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00029.html0000644000175200001440000000602112000060453021617 0ustar00collabora-develusers00000000000000 Shared Pointer Usage
   Home · All Classes · All Namespaces · Modules · Functions · Files
Shared Pointer Usage

Overview

The Qt parent/child object model does not fit well with Telepathy-Qt object model, where in some places we either don't know the object parent or we can't use a parent, as the object can stay alive without it.

To avoid memory leaks, caused by objects that got instantiated and don't have any parent, we decided to make some of our objects reference counted, by making them inherit RefCounted.

Making the object reference counted, does not guarantee that it will get deleted when nobody is referencing it.

When instantiating new classes that inherits RefCounted the reference count is 0, this is referred to as the floating state. Again this may lead to memory leaks, caused by objects in the floating state that never get deleted.

So the solution is to put the object in a SharedPtr as soon as possible, letting the SharedPtr manage the object lifetime.

The pattern used is that classes inherit RefCounted and are used together with SharedPtr. When the reference count hits 0, the object is deleted.

In order to assure that the object is put in a SharedPtr as soon as possible, our objects inheriting RefCounted will have the constructor either private or protected, in case we want to support custom classes, and will have a public static create method that will return a SharedPtr pointing to the object instance.

Note that when developing custom classes, this pattern should be followed, to avoid objects in floating state, avoiding memory leaks.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01072.html0000644000175200001440000002264712000060453021632 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::CallContentInterfaceDTMFInterface Member List
This is the complete list of members for Tp::Client::CallContentInterfaceDTMFInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
CallContentInterfaceDTMFInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::CallContentInterfaceDTMFInterface
CallContentInterfaceDTMFInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::CallContentInterfaceDTMFInterface
CallContentInterfaceDTMFInterface(Tp::DBusProxy *proxy)Tp::Client::CallContentInterfaceDTMFInterface
CallContentInterfaceDTMFInterface(const Tp::Client::CallContentInterface &mainInterface)Tp::Client::CallContentInterfaceDTMFInterface [explicit]
CallContentInterfaceDTMFInterface(const Tp::Client::CallContentInterface &mainInterface, QObject *parent)Tp::Client::CallContentInterfaceDTMFInterface
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::CallContentInterfaceDTMFInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
MultipleTones(const QString &tones, int timeout=-1)Tp::Client::CallContentInterfaceDTMFInterface [inline, slot]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::CallContentInterfaceDTMFInterface [inline]
requestPropertyCurrentlySendingTones() const Tp::Client::CallContentInterfaceDTMFInterface [inline]
requestPropertyDeferredTones() const Tp::Client::CallContentInterfaceDTMFInterface [inline]
SendingTones(const QString &tones)Tp::Client::CallContentInterfaceDTMFInterface [signal]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
StartTone(uchar event, int timeout=-1)Tp::Client::CallContentInterfaceDTMFInterface [inline, slot]
staticInterfaceName()Tp::Client::CallContentInterfaceDTMFInterface [inline, static]
StoppedTones(bool cancelled)Tp::Client::CallContentInterfaceDTMFInterface [signal]
StopTone(int timeout=-1)Tp::Client::CallContentInterfaceDTMFInterface [inline, slot]
TonesDeferred(const QString &tones)Tp::Client::CallContentInterfaceDTMFInterface [signal]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00161.html0000644000175200001440000015561412000060453021631 0ustar00collabora-develusers00000000000000 Tp::Connection Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The Connection class represents a Telepathy connection. More...

#include <TelepathyQt/Connection>

Inherits Tp::StatefulDBusProxy, and Tp::OptionalInterfaceFactory< Connection >.

List of all members.

Classes

Signals

Public Member Functions

Static Public Member Functions

Static Public Attributes

Protected Member Functions


Detailed Description

The Connection class represents a Telepathy connection.

This models a connection to a single user account on a communication service.

Contacts, and server-stored lists (such as subscribed contacts, block lists, or allow lists) on a service are all represented using the ContactManager object on the connection, which is valid only for the lifetime of the connection object.

The remote object accessor functions on this object (status(), statusReason(), and so on) don't make any D-Bus calls; instead, they return/use values cached from a previous introspection run. The introspection process populates their values in the most efficient way possible based on what the service implements.

To avoid unnecessary D-Bus traffic, some accessors only return valid information after specific features have been enabled. For instance, to retrieve the connection self contact, it is necessary to enable the feature Connection::FeatureSelfContact. See the individual methods descriptions for more details.

Connection features can be enabled by constructing a ConnectionFactory and enabling the desired features, and passing it to AccountManager, Account or ClientRegistrar when creating them as appropriate. However, if a particular feature is only ever used in a specific circumstance, such as an user opening some settings dialog separate from the general view of the application, features can be later enabled as needed by calling becomeReady() with the additional features, and waiting for the resulting PendingOperation to finish.

As an addition to accessors, signals are emitted to indicate that properties have changed, for example statusChanged()(), selfContactChanged(), etc.

Usage

Creating a connection object

The easiest way to create connection objects is through Account. One can just use the Account::connection method to get an account active connection.

If you already know the object path, you can just call create(). For example:

 ConnectionPtr conn = Connection::create(busName, objectPath); 

A ConnectionPtr object is returned, which will automatically keep track of object lifetime.

You can also provide a D-Bus connection as a QDBusConnection:

 ConnectionPtr conn = Connection::create(QDBusConnection::sessionBus(),
         busName, objectPath);

Making connection ready to use

A Connection object needs to become ready before usage, meaning that the introspection process finished and the object accessors can be used.

To make the object ready, use becomeReady() and wait for the PendingOperation::finished() signal to be emitted.

 class MyClass : public QObject
 {
     QOBJECT

 public:
     MyClass(QObject *parent = 0);
     ~MyClass() { }

 private Q_SLOTS:
     void onConnectionReady(Tp::PendingOperation*);

 private:
     ConnectionPtr conn;
 };

 MyClass::MyClass(const QString &busName, const QString &objectPath,
         QObject *parent)
     : QObject(parent)
       conn(Connection::create(busName, objectPath))
 {
     // connect and become ready
     connect(conn->requestConnect(),
             SIGNAL(finished(Tp::PendingOperation*)),
             SLOT(onConnectionReady(Tp::PendingOperation*)));
 }

 void MyClass::onConnectionReady(Tp::PendingOperation *op)
 {
     if (op->isError()) {
         qWarning() << "Account cannot become ready:" <<
             op->errorName() << "-" << op->errorMessage();
         return;
     }

     // Connection is now ready
 }

See Asynchronous Object Model, Shared Pointer Usage


Constructor & Destructor Documentation

Class destructor.

Tp::Connection::Connection ( const QDBusConnection &  bus,
const QString &  busName,
const QString &  objectPath,
const ChannelFactoryConstPtr &  channelFactory,
const ContactFactoryConstPtr &  contactFactory,
const Feature coreFeature 
) [protected]

Construct a new connection object using the given bus.

A warning is printed if the factories are not for bus.

Parameters:
busQDBusConnection to use.
busNameThe connection's well-known bus name (sometimes called a "service name").
objectPathThe connection object path.
channelFactoryThe channel factory to use.
contactFactoryThe contact factory to use.
coreFeatureThe core feature of the Connection subclass. The corresponding introspectable should depend on Connection::FeatureCore.

Member Function Documentation

ConnectionPtr Tp::Connection::create ( const QString &  busName,
const QString &  objectPath,
const ChannelFactoryConstPtr &  channelFactory,
const ContactFactoryConstPtr &  contactFactory 
) [static]

Create a new connection object using QDBusConnection::sessionBus().

A warning is printed if the factories are not for QDBusConnection::sessionBus().

Parameters:
busNameThe connection well-known bus name (sometimes called a "service name").
objectPathThe connection object path.
channelFactoryThe channel factory to use.
contactFactoryThe contact factory to use.
Returns:
A ConnectionPtr object pointing to the newly created Connection object.
ConnectionPtr Tp::Connection::create ( const QDBusConnection &  bus,
const QString &  busName,
const QString &  objectPath,
const ChannelFactoryConstPtr &  channelFactory,
const ContactFactoryConstPtr &  contactFactory 
) [static]

Create a new connection object using the given bus.

A warning is printed if the factories are not for bus.

Parameters:
busQDBusConnection to use.
busNameThe connection well-known bus name (sometimes called a "service name").
objectPathThe connection object path.
channelFactoryThe channel factory to use.
contactFactoryThe contact factory to use.
Returns:
A ConnectionPtr object pointing to the newly created Connection object.
ChannelFactoryConstPtr Tp::Connection::channelFactory ( ) const

Return the channel factory used by this connection.

Only read access is provided. This allows constructing object instances and examining the object construction settings, but not changing settings. Allowing changes would lead to tricky situations where objects constructed at different times by the account would have unpredictably different construction settings (eg. subclass).

Returns:
A read-only pointer to the ChannelFactory object.
ContactFactoryConstPtr Tp::Connection::contactFactory ( ) const

Return the contact factory used by this connection.

Only read access is provided. This allows constructing object instances and examining the object construction settings, but not changing settings. Allowing changes would lead to tricky situations where objects constructed at different times by the account would have unpredictably different construction settings (eg. subclass).

Returns:
A read-only pointer to the ContactFactory object.
QString Tp::Connection::cmName ( ) const

Return the connection manager name of this connection.

Returns:
The connection manager name.
QString Tp::Connection::protocolName ( ) const

Return the protocol name of this connection.

Returns:
The protocol name.

Return the status of this connection.

Change notification is via the statusChanged() signal.

This method requires Connection::FeatureCore to be ready.

Returns:
The status as ConnectionStatus.
See also:
statusChanged(), statusReason(), errorDetails()

Return the reason for this connection status.

The validity and change rules are the same as for status().

The status reason should be only used as a fallback in error handling when the application doesn't understand an error name given as the invalidation reason, which may in some cases be domain/UI-specific.

This method requires Connection::FeatureCore to be ready.

Returns:
The status reason as ConnectionStatusReason.
See also:
invalidated(), invalidationReason()

Return detailed information about the reason for the connection going invalidated().

Some services may provide additional error information in the ConnectionError D-Bus signal, when a Connection is disconnected / has become unusable. If the service didn't provide any, or has not been invalidated yet, an invalid instance is returned.

The information provided by invalidationReason() and this method should always be used in error handling in preference to statusReason(). The status reason can be used as a fallback, however, if the client doesn't understand what a particular value returned by invalidationReason() means, as it may be domain-specific with some services.

Returns:
The error details as a Connection::ErrorDetails object.
See also:
status(), statusReason(), invalidationReason()

Return the handle representing the user on this connection.

Note that if the connection is not yet in the ConnectionStatusConnected state, the value of this property may be zero.

Change notification is via the selfHandleChanged() signal.

This method requires Connection::FeatureCore to be ready.

Returns:
The user handle.
See also:
selfHandleChanged(), selfContact()
ContactPtr Tp::Connection::selfContact ( ) const

Return the object representing the user on this connection.

Note that if the connection is not yet in the ConnectionStatusConnected state, the value of this property may be null.

Change notification is via the selfContactChanged() signal.

This method requires Connection::FeatureSelfContact to be ready.

Returns:
A pointer to the Contact object, or a null ContactPtr if unknown.
See also:
selfContactChanged(), selfHandle()

Return the user's balance on the account corresponding to this connection.

A negative amount may be possible on some services, and indicates that the user owes money to the service provider.

Change notification is via the accountBalanceChanged() signal.

This method requires Connection::FeatureAccountBalance to be ready.

Returns:
The account balance as #CurrencyAmount.
See also:
accountBalanceChanged()

Return the capabilities for this connection.

User interfaces can use this information to show or hide UI components.

This property cannot change after the connection has gone to state ConnectionStatusConnected, so there is no change notification.

This method requires Connection::FeatureCore to be ready.

Returns:
The capabilities of this connection.
ContactManagerPtr Tp::Connection::contactManager ( ) const

Return the ContactManager object for this connection.

The contact manager is responsible for all contact handling in this connection, including adding, removing, authorizing, etc.

Returns:
A pointer to the ContactManager object.

Indicates that the connection's status has changed and that all previously requested features are now ready to use for the new status.

Legitimate uses for this signal, apart from waiting for a given connection status to be ready, include updating an animation based on the connection being in ConnectionStatusConnecting, ConnectionStatusConnected and ConnectionStatusDisconnected, and otherwise showing progress indication to the user. It should, however, NEVER be used for error handling:

This signal doesn't contain the status reason as an argument, because statusChanged() shouldn't be used for error-handling. There are numerous cases in which a Connection may become unusable without there being a status change to ConnectionStatusDisconnected. All of these cases, and being disconnected itself, are signaled by invalidated() with appropriate error names. On the other hand, the reason for the status going to ConnectionStatusConnecting or ConnectionStatusConnected will always be ConnectionStatusReasonRequested, so signaling that would be useless.

The status reason, as returned by statusReason(), may however be used as a fallback for error handling in slots connected to the invalidated() signal, if the client doesn't understand a particular (likely domain-specific if so) error name given by invalidateReason().

Parameters:
newStatusThe new status of the connection, as would be returned by status().
void Tp::Connection::selfHandleChanged ( uint  newHandle) [signal]

Emitted when the value of selfHandle() changes.

Parameters:
newHandleThe new connection self handle.
See also:
selfHandle()

Emitted when the value of selfContact() changes.

See also:
selfContact()
void Tp::Connection::accountBalanceChanged ( const Tp::CurrencyAmount accountBalance) [signal]

Emitted when the value of accountBalance() changes.

Parameters:
accountBalanceThe new user's balance of this connection.
See also:
accountBalance()

Return the Client::ConnectionInterface interface proxy object for this connection. This method is protected since the convenience methods provided by this class should generally be used instead of calling D-Bus methods directly.

Returns:
A pointer to the existing Client::ConnectionInterface object for this Connection object.

Member Data Documentation

Feature representing the core that needs to become ready to make the Connection object usable.

Note that this feature must be enabled in order to use most Connection methods. See specific methods documentation for more details.

When calling isReady(), becomeReady(), this feature is implicitly added to the requested features.

Feature used to retrieve the connection self contact.

See self contact specific methods' documentation for more details.

See also:
selfContact(), selfContactChanged()

Feature used to retrieve/keep track of the connection self presence.

See simple presence specific methods' documentation for more details.

Feature used to enable roster support on Connection::contactManager.

See ContactManager roster specific methods' documentation for more details.

See also:
ContactManager::allKnownContacts()

Feature used to enable roster groups support on Connection::contactManager.

See ContactManager roster groups specific methods' documentation for more details.

See also:
ContactManager::allKnownGroups()

Feature used to retrieve/keep track of the connection account balance.

See account balance specific methods' documentation for more details.

See also:
accountBalance(), accountBalanceChanged()

When this feature is prepared, it means that the connection status() is ConnectionStatusConnected.

Note that if ConnectionFactory is being used with FeatureConnected set, Connection objects will only be signalled by the library when the corresponding connection is in status() ConnectionStatusConnected.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00092.html0000644000175200001440000012474112000060453021631 0ustar00collabora-develusers00000000000000 Tp::Client::CallStreamEndpointInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::CallStreamEndpointInterface Class Reference

#include <TelepathyQt/CallStreamEndpoint>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Call1.Stream.Endpoint".


Constructor & Destructor Documentation

Tp::Client::CallStreamEndpointInterface::CallStreamEndpointInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a CallStreamEndpointInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::CallStreamEndpointInterface::CallStreamEndpointInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a CallStreamEndpointInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a CallStreamEndpointInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Member Function Documentation

static QLatin1String Tp::Client::CallStreamEndpointInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Call1.Stream.Endpoint", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property RemoteCredentials of type Tp::StreamCredentials.

The ICE credentials used for all candidates. If each candidate has different credentials, then this property SHOULD be ("", ""). Per-candidate credentials are set in the Candidate's Candidate_Info a{sv}.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property RemoteCandidates of type Tp::CandidateList.

A list of candidates for this endpoint.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property SelectedCandidatePairs of type Tp::CandidatePairList.

The candidates that have been selected for use to stream packets to the remote contact for each component of the stream. Change notification is given via the the CandidatePairSelected() signal.

Note to client implementors (from RFC 5245 section 9.2.2.3):

If at least one of the pairs is In-Progress, the agent SHOULD wait for those checks to complete, and as each completes, redo the processing in this section until there are no losing pairs.

Also note that some or all of the local candidates in this list may represent a peer-reflexive candidate that do not appear in CallStreamInterfaceMediaInterface::LocalCandidates .

See RFC 5245 Appendix B.6. for more details about why this is.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property EndpointState of type Tp::ComponentStateMap.

The state of ICE negotiation with this Endpoint for each component of the stream.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Transport of type uint.

The transport type for the stream endpoint. This can be different from the transport of the Stream in the case where of falling back from ICE to Raw_UDP.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Controlling of type bool.

The local side is taking the controlling role (as defined by ICE RFC 5245). Change notification is given via the ControllingChanged() signal.

In ICE, the Caller is normally in controlling mode (and the Callee in controlled-mode), except if the Caller is doing ICE-Lite, in which case it's reversed. The Controlling side is responsible for selecting nominated pairs, and generating updated offers upon conclusion of ICE.
Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property IsICELite of type bool.

The Remote side is an ICE Lite endpoint. (The local side is assumed to always be an ICE Full implementation.)

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::CallStreamEndpointInterface::SetSelectedCandidatePair ( const Tp::Candidate localCandidate,
const Tp::Candidate remoteCandidate,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method SetSelectedCandidatePair on the remote object.

Update the entry in SelectedCandidatePairs for a particular component, and signal it to the remote side.

This method should only be called by the controlling side of an ICE session. See CandidatePairSelected() for details.

In the SDP offer/answer model, this signalling will take place as generating an updated offer. Note that updates may be queued up until information about all components of all streams is gathered.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
localCandidateThe local candidate that has been selected.
remoteCandidateThe remote candidate that has been selected.
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::CallStreamEndpointInterface::SetEndpointState ( uint  component,
uint  state,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method SetEndpointState on the remote object.

Change the EndpointState of the endpoint.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
componentThe component whose state needs updating.
stateThe new state of this component.
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::CallStreamEndpointInterface::AcceptSelectedCandidatePair ( const Tp::Candidate localCandidate,
const Tp::Candidate remoteCandidate,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method AcceptSelectedCandidatePair on the remote object.

Called in response to CandidatePairSelected if/when this candidate pair is known to have passed its connectivity checks.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
localCandidateThe local candidate that has been selected.
remoteCandidateThe remote candidate that has been selected.
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::CallStreamEndpointInterface::RejectSelectedCandidatePair ( const Tp::Candidate localCandidate,
const Tp::Candidate remoteCandidate,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method RejectSelectedCandidatePair on the remote object.

Called in response to CandidatePairSelected if/when this candidate pair is known to have failed its connectivity checks.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
localCandidateThe local candidate that has been selected.
remoteCandidateThe remote candidate that has been selected.
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::CallStreamEndpointInterface::SetControlling ( bool  controlling,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method SetControlling on the remote object.

Set whether the local side is taking the Controlling role. Note that if there are multiple endpoints (e.g. SIP call forking) it may be the case that all endpoints need to have the same controlling/controlled orientation.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
controllingThe new value of Controlling.
timeoutThe timeout in milliseconds.
void Tp::Client::CallStreamEndpointInterface::RemoteCredentialsSet ( const QString &  username,
const QString &  password 
) [signal]

Represents the signal RemoteCredentialsSet on the remote object.

Emitted when the remote ICE credentials for the endpoint are set. If each candidate has different credentials, then this signal will never be fired.

Parameters:
usernameThe username set.
passwordThe password set.

Represents the signal RemoteCandidatesAdded on the remote object.

Emitted when remote candidates are added to the RemoteCandidates property.

Parameters:
candidatesThe candidates that were added.
void Tp::Client::CallStreamEndpointInterface::CandidatePairSelected ( const Tp::Candidate localCandidate,
const Tp::Candidate remoteCandidate 
) [signal]

Represents the signal CandidatePairSelected on the remote object.

Emitted when a candidate is selected for use in the stream by the controlling side of an ICE session. The controlled side should call AcceptSelectedCandidatePair or RejectSelectedCandidatePair when connectivity checks have either succeeded or failed for this candidate pair. See also: SelectedCandidatePairs.

Parameters:
localCandidateThe local candidate that has been selected.
remoteCandidateThe remote candidate that has been selected.
void Tp::Client::CallStreamEndpointInterface::EndpointStateChanged ( uint  component,
uint  state 
) [signal]

Represents the signal EndpointStateChanged on the remote object.

Emitted when the EndpointState property changes.

Parameters:
componentThe component whose state has changed.
stateThe new state of this component.

Represents the signal ControllingChanged on the remote object.

The value of Controlling has changed.

Parameters:
controllingThe new value of Controlling.
void Tp::Client::CallStreamEndpointInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00459_source.html0000644000175200001440000017166012000060453023222 0ustar00collabora-develusers00000000000000 callbacks.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
callbacks.h
00001 
00023 #ifndef _TelepathyQt_callbacks_h_HEADER_GUARD_
00024 #define _TelepathyQt_callbacks_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Functors>
00031 #include <TelepathyQt/Global>
00032 
00033 namespace Tp
00034 {
00035 
00036 struct TP_QT_EXPORT AbstractFunctorCaller
00037 {
00038     typedef void *(*HookType)(void*);
00039 
00040     AbstractFunctorCaller(HookType invokeMethodHook) : invokeMethodHook(invokeMethodHook) {}
00041     virtual ~AbstractFunctorCaller() {}
00042 
00043     virtual AbstractFunctorCaller *clone() const = 0;
00044 
00045     HookType invokeMethodHook;
00046 
00047 private:
00048     AbstractFunctorCaller(const AbstractFunctorCaller &other);
00049     AbstractFunctorCaller &operator=(const AbstractFunctorCaller &other);
00050 };
00051 
00052 template <class T, class Functor>
00053 struct BaseFunctorCaller : public AbstractFunctorCaller
00054 {
00055     BaseFunctorCaller(const Functor &functor, AbstractFunctorCaller::HookType invokeMethodHook)
00056         : AbstractFunctorCaller(invokeMethodHook),
00057           functor(functor) {}
00058     virtual ~BaseFunctorCaller() {}
00059 
00060     virtual AbstractFunctorCaller *clone() const { return new T(functor); }
00061 
00062     Functor functor;
00063 };
00064 
00065 struct TP_QT_EXPORT BaseCallback
00066 {
00067     BaseCallback() : caller(0) {}
00068     /* takes ownership of caller */
00069     BaseCallback(AbstractFunctorCaller *caller) : caller(caller) {}
00070     BaseCallback(const BaseCallback &other) : caller(other.caller->clone()) {}
00071     virtual ~BaseCallback() { delete caller; }
00072 
00073     bool isValid() const { return caller != 0; }
00074 
00075     BaseCallback &operator=(const BaseCallback &other)
00076     {
00077         if (caller == other.caller) return *this;
00078         delete caller;
00079         caller = other.caller->clone();
00080         return *this;
00081     }
00082 
00083 protected:
00084     /* may be null */
00085     AbstractFunctorCaller *caller;
00086 };
00087 
00088 template <class Functor, class R >
00089 struct FunctorCaller0 : public BaseFunctorCaller<FunctorCaller0<Functor, R >, Functor>
00090 {
00091     typedef R ResultType;
00092     typedef R (*InvokeType)(AbstractFunctorCaller* );
00093 
00094     explicit FunctorCaller0(const Functor &functor) : BaseFunctorCaller<FunctorCaller0, Functor>(functor, reinterpret_cast<AbstractFunctorCaller::HookType>(&FunctorCaller0<Functor, R >::invoke)) {}
00095 
00096     static ResultType invoke(AbstractFunctorCaller *call )
00097     {
00098         typedef FunctorCaller0<Functor, R > Type;
00099         Type *typed = static_cast<Type*>(call);
00100         return (typed->functor)();
00101     }
00102 };
00103 
00104 template <class R >
00105 struct Callback0 : public BaseCallback
00106 {
00107     typedef R (*FunctionType)();
00108     typedef R ResultType;
00109 
00110     Callback0() {}
00111     template <class Functor>
00112     Callback0(const Functor &functor) : BaseCallback(new FunctorCaller0<Functor, R >(functor)) {}
00113 
00114     ResultType operator()() const
00115     {
00116         if (caller) {
00117             typedef R (*InvokeType)(AbstractFunctorCaller* );
00118             InvokeType invokeMethod = reinterpret_cast<InvokeType>(caller->invokeMethodHook);
00119             return invokeMethod(caller );
00120         }
00121         return ResultType();
00122     }
00123 };
00124 
00125 template <class Functor, class R , class Arg1>
00126 struct FunctorCaller1 : public BaseFunctorCaller<FunctorCaller1<Functor, R , Arg1>, Functor>
00127 {
00128     typedef R ResultType;
00129     typedef R (*InvokeType)(AbstractFunctorCaller* , Arg1);
00130 
00131     explicit FunctorCaller1(const Functor &functor) : BaseFunctorCaller<FunctorCaller1, Functor>(functor, reinterpret_cast<AbstractFunctorCaller::HookType>(&FunctorCaller1<Functor, R , Arg1>::invoke)) {}
00132 
00133     static ResultType invoke(AbstractFunctorCaller *call , Arg1 a1)
00134     {
00135         typedef FunctorCaller1<Functor, R , Arg1> Type;
00136         Type *typed = static_cast<Type*>(call);
00137         return (typed->functor)(a1);
00138     }
00139 };
00140 
00141 template <class R , class Arg1>
00142 struct Callback1 : public BaseCallback
00143 {
00144     typedef R (*FunctionType)(Arg1);
00145     typedef R ResultType;
00146 
00147     Callback1() {}
00148     template <class Functor>
00149     Callback1(const Functor &functor) : BaseCallback(new FunctorCaller1<Functor, R , Arg1>(functor)) {}
00150 
00151     ResultType operator()(Arg1 a1) const
00152     {
00153         if (caller) {
00154             typedef R (*InvokeType)(AbstractFunctorCaller* , Arg1);
00155             InvokeType invokeMethod = reinterpret_cast<InvokeType>(caller->invokeMethodHook);
00156             return invokeMethod(caller , a1);
00157         }
00158         return ResultType();
00159     }
00160 };
00161 
00162 template <class Functor, class R , class Arg1, class Arg2>
00163 struct FunctorCaller2 : public BaseFunctorCaller<FunctorCaller2<Functor, R , Arg1, Arg2>, Functor>
00164 {
00165     typedef R ResultType;
00166     typedef R (*InvokeType)(AbstractFunctorCaller* , Arg1, Arg2);
00167 
00168     explicit FunctorCaller2(const Functor &functor) : BaseFunctorCaller<FunctorCaller2, Functor>(functor, reinterpret_cast<AbstractFunctorCaller::HookType>(&FunctorCaller2<Functor, R , Arg1, Arg2>::invoke)) {}
00169 
00170     static ResultType invoke(AbstractFunctorCaller *call , Arg1 a1, Arg2 a2)
00171     {
00172         typedef FunctorCaller2<Functor, R , Arg1, Arg2> Type;
00173         Type *typed = static_cast<Type*>(call);
00174         return (typed->functor)(a1, a2);
00175     }
00176 };
00177 
00178 template <class R , class Arg1, class Arg2>
00179 struct Callback2 : public BaseCallback
00180 {
00181     typedef R (*FunctionType)(Arg1, Arg2);
00182     typedef R ResultType;
00183 
00184     Callback2() {}
00185     template <class Functor>
00186     Callback2(const Functor &functor) : BaseCallback(new FunctorCaller2<Functor, R , Arg1, Arg2>(functor)) {}
00187 
00188     ResultType operator()(Arg1 a1, Arg2 a2) const
00189     {
00190         if (caller) {
00191             typedef R (*InvokeType)(AbstractFunctorCaller* , Arg1, Arg2);
00192             InvokeType invokeMethod = reinterpret_cast<InvokeType>(caller->invokeMethodHook);
00193             return invokeMethod(caller , a1, a2);
00194         }
00195         return ResultType();
00196     }
00197 };
00198 
00199 template <class Functor, class R , class Arg1, class Arg2, class Arg3>
00200 struct FunctorCaller3 : public BaseFunctorCaller<FunctorCaller3<Functor, R , Arg1, Arg2, Arg3>, Functor>
00201 {
00202     typedef R ResultType;
00203     typedef R (*InvokeType)(AbstractFunctorCaller* , Arg1, Arg2, Arg3);
00204 
00205     explicit FunctorCaller3(const Functor &functor) : BaseFunctorCaller<FunctorCaller3, Functor>(functor, reinterpret_cast<AbstractFunctorCaller::HookType>(&FunctorCaller3<Functor, R , Arg1, Arg2, Arg3>::invoke)) {}
00206 
00207     static ResultType invoke(AbstractFunctorCaller *call , Arg1 a1, Arg2 a2, Arg3 a3)
00208     {
00209         typedef FunctorCaller3<Functor, R , Arg1, Arg2, Arg3> Type;
00210         Type *typed = static_cast<Type*>(call);
00211         return (typed->functor)(a1, a2, a3);
00212     }
00213 };
00214 
00215 template <class R , class Arg1, class Arg2, class Arg3>
00216 struct Callback3 : public BaseCallback
00217 {
00218     typedef R (*FunctionType)(Arg1, Arg2, Arg3);
00219     typedef R ResultType;
00220 
00221     Callback3() {}
00222     template <class Functor>
00223     Callback3(const Functor &functor) : BaseCallback(new FunctorCaller3<Functor, R , Arg1, Arg2, Arg3>(functor)) {}
00224 
00225     ResultType operator()(Arg1 a1, Arg2 a2, Arg3 a3) const
00226     {
00227         if (caller) {
00228             typedef R (*InvokeType)(AbstractFunctorCaller* , Arg1, Arg2, Arg3);
00229             InvokeType invokeMethod = reinterpret_cast<InvokeType>(caller->invokeMethodHook);
00230             return invokeMethod(caller , a1, a2, a3);
00231         }
00232         return ResultType();
00233     }
00234 };
00235 
00236 template <class Functor, class R , class Arg1, class Arg2, class Arg3, class Arg4>
00237 struct FunctorCaller4 : public BaseFunctorCaller<FunctorCaller4<Functor, R , Arg1, Arg2, Arg3, Arg4>, Functor>
00238 {
00239     typedef R ResultType;
00240     typedef R (*InvokeType)(AbstractFunctorCaller* , Arg1, Arg2, Arg3, Arg4);
00241 
00242     explicit FunctorCaller4(const Functor &functor) : BaseFunctorCaller<FunctorCaller4, Functor>(functor, reinterpret_cast<AbstractFunctorCaller::HookType>(&FunctorCaller4<Functor, R , Arg1, Arg2, Arg3, Arg4>::invoke)) {}
00243 
00244     static ResultType invoke(AbstractFunctorCaller *call , Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4)
00245     {
00246         typedef FunctorCaller4<Functor, R , Arg1, Arg2, Arg3, Arg4> Type;
00247         Type *typed = static_cast<Type*>(call);
00248         return (typed->functor)(a1, a2, a3, a4);
00249     }
00250 };
00251 
00252 template <class R , class Arg1, class Arg2, class Arg3, class Arg4>
00253 struct Callback4 : public BaseCallback
00254 {
00255     typedef R (*FunctionType)(Arg1, Arg2, Arg3, Arg4);
00256     typedef R ResultType;
00257 
00258     Callback4() {}
00259     template <class Functor>
00260     Callback4(const Functor &functor) : BaseCallback(new FunctorCaller4<Functor, R , Arg1, Arg2, Arg3, Arg4>(functor)) {}
00261 
00262     ResultType operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4) const
00263     {
00264         if (caller) {
00265             typedef R (*InvokeType)(AbstractFunctorCaller* , Arg1, Arg2, Arg3, Arg4);
00266             InvokeType invokeMethod = reinterpret_cast<InvokeType>(caller->invokeMethodHook);
00267             return invokeMethod(caller , a1, a2, a3, a4);
00268         }
00269         return ResultType();
00270     }
00271 };
00272 
00273 template <class Functor, class R , class Arg1, class Arg2, class Arg3, class Arg4, class Arg5>
00274 struct FunctorCaller5 : public BaseFunctorCaller<FunctorCaller5<Functor, R , Arg1, Arg2, Arg3, Arg4, Arg5>, Functor>
00275 {
00276     typedef R ResultType;
00277     typedef R (*InvokeType)(AbstractFunctorCaller* , Arg1, Arg2, Arg3, Arg4, Arg5);
00278 
00279     explicit FunctorCaller5(const Functor &functor) : BaseFunctorCaller<FunctorCaller5, Functor>(functor, reinterpret_cast<AbstractFunctorCaller::HookType>(&FunctorCaller5<Functor, R , Arg1, Arg2, Arg3, Arg4, Arg5>::invoke)) {}
00280 
00281     static ResultType invoke(AbstractFunctorCaller *call , Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5)
00282     {
00283         typedef FunctorCaller5<Functor, R , Arg1, Arg2, Arg3, Arg4, Arg5> Type;
00284         Type *typed = static_cast<Type*>(call);
00285         return (typed->functor)(a1, a2, a3, a4, a5);
00286     }
00287 };
00288 
00289 template <class R , class Arg1, class Arg2, class Arg3, class Arg4, class Arg5>
00290 struct Callback5 : public BaseCallback
00291 {
00292     typedef R (*FunctionType)(Arg1, Arg2, Arg3, Arg4, Arg5);
00293     typedef R ResultType;
00294 
00295     Callback5() {}
00296     template <class Functor>
00297     Callback5(const Functor &functor) : BaseCallback(new FunctorCaller5<Functor, R , Arg1, Arg2, Arg3, Arg4, Arg5>(functor)) {}
00298 
00299     ResultType operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5) const
00300     {
00301         if (caller) {
00302             typedef R (*InvokeType)(AbstractFunctorCaller* , Arg1, Arg2, Arg3, Arg4, Arg5);
00303             InvokeType invokeMethod = reinterpret_cast<InvokeType>(caller->invokeMethodHook);
00304             return invokeMethod(caller , a1, a2, a3, a4, a5);
00305         }
00306         return ResultType();
00307     }
00308 };
00309 
00310 template <class Functor, class R , class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6>
00311 struct FunctorCaller6 : public BaseFunctorCaller<FunctorCaller6<Functor, R , Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>, Functor>
00312 {
00313     typedef R ResultType;
00314     typedef R (*InvokeType)(AbstractFunctorCaller* , Arg1, Arg2, Arg3, Arg4, Arg5, Arg6);
00315 
00316     explicit FunctorCaller6(const Functor &functor) : BaseFunctorCaller<FunctorCaller6, Functor>(functor, reinterpret_cast<AbstractFunctorCaller::HookType>(&FunctorCaller6<Functor, R , Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>::invoke)) {}
00317 
00318     static ResultType invoke(AbstractFunctorCaller *call , Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6)
00319     {
00320         typedef FunctorCaller6<Functor, R , Arg1, Arg2, Arg3, Arg4, Arg5, Arg6> Type;
00321         Type *typed = static_cast<Type*>(call);
00322         return (typed->functor)(a1, a2, a3, a4, a5, a6);
00323     }
00324 };
00325 
00326 template <class R , class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6>
00327 struct Callback6 : public BaseCallback
00328 {
00329     typedef R (*FunctionType)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6);
00330     typedef R ResultType;
00331 
00332     Callback6() {}
00333     template <class Functor>
00334     Callback6(const Functor &functor) : BaseCallback(new FunctorCaller6<Functor, R , Arg1, Arg2, Arg3, Arg4, Arg5, Arg6>(functor)) {}
00335 
00336     ResultType operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6) const
00337     {
00338         if (caller) {
00339             typedef R (*InvokeType)(AbstractFunctorCaller* , Arg1, Arg2, Arg3, Arg4, Arg5, Arg6);
00340             InvokeType invokeMethod = reinterpret_cast<InvokeType>(caller->invokeMethodHook);
00341             return invokeMethod(caller , a1, a2, a3, a4, a5, a6);
00342         }
00343         return ResultType();
00344     }
00345 };
00346 
00347 template <class Functor, class R , class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7>
00348 struct FunctorCaller7 : public BaseFunctorCaller<FunctorCaller7<Functor, R , Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>, Functor>
00349 {
00350     typedef R ResultType;
00351     typedef R (*InvokeType)(AbstractFunctorCaller* , Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7);
00352 
00353     explicit FunctorCaller7(const Functor &functor) : BaseFunctorCaller<FunctorCaller7, Functor>(functor, reinterpret_cast<AbstractFunctorCaller::HookType>(&FunctorCaller7<Functor, R , Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>::invoke)) {}
00354 
00355     static ResultType invoke(AbstractFunctorCaller *call , Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6, Arg7 a7)
00356     {
00357         typedef FunctorCaller7<Functor, R , Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7> Type;
00358         Type *typed = static_cast<Type*>(call);
00359         return (typed->functor)(a1, a2, a3, a4, a5, a6, a7);
00360     }
00361 };
00362 
00363 template <class R , class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7>
00364 struct Callback7 : public BaseCallback
00365 {
00366     typedef R (*FunctionType)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7);
00367     typedef R ResultType;
00368 
00369     Callback7() {}
00370     template <class Functor>
00371     Callback7(const Functor &functor) : BaseCallback(new FunctorCaller7<Functor, R , Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7>(functor)) {}
00372 
00373     ResultType operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6, Arg7 a7) const
00374     {
00375         if (caller) {
00376             typedef R (*InvokeType)(AbstractFunctorCaller* , Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7);
00377             InvokeType invokeMethod = reinterpret_cast<InvokeType>(caller->invokeMethodHook);
00378             return invokeMethod(caller , a1, a2, a3, a4, a5, a6, a7);
00379         }
00380         return ResultType();
00381     }
00382 };
00383 
00384 }
00385 
00386 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00801.html0000644000175200001440000001164512000060453021625 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::FunctorCaller1< Functor, R, Arg1 > Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00999.html0000644000175200001440000000425712000060453021650 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MailAddress Member List
This is the complete list of members for Tp::MailAddress, including all inherited members.
addressTp::MailAddress
nameTp::MailAddress


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00597_source.html0000644000175200001440000001465112000060453023221 0ustar00collabora-develusers00000000000000 key-file.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
key-file.h
00001 
00023 #ifndef _TelepathyQt_key_file_h_HEADER_GUARD_
00024 #define _TelepathyQt_key_file_h_HEADER_GUARD_
00025 
00026 #include <TelepathyQt/Global>
00027 
00028 #include <QMetaType>
00029 #include <QtGlobal>
00030 
00031 class QString;
00032 class QStringList;
00033 
00034 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00035 
00036 namespace Tp
00037 {
00038 
00039 class TP_QT_NO_EXPORT KeyFile
00040 {
00041 public:
00042     enum Status {
00043         None = 0,
00044         NoError,
00045         NotFoundError,
00046         AccessError,
00047         FormatError,
00048     };
00049 
00050     KeyFile();
00051     KeyFile(const KeyFile &other);
00052     KeyFile(const QString &fileName);
00053     ~KeyFile();
00054 
00055     KeyFile &operator=(const KeyFile &other);
00056 
00057     void setFileName(const QString &fileName);
00058     QString fileName() const;
00059 
00060     Status status() const;
00061 
00062     void setGroup(const QString &group);
00063     QString group() const;
00064 
00065     QStringList allGroups() const;
00066     QStringList allKeys() const;
00067     QStringList keys() const;
00068     bool contains(const QString &key) const;
00069 
00070     QString rawValue(const QString &key) const;
00071     QString value(const QString &key) const;
00072     QStringList valueAsStringList(const QString &key) const;
00073 
00074     static bool unescapeString(const QByteArray &data, int from, int to,
00075         QString &result);
00076     static bool unescapeStringList(const QByteArray &data, int from, int to,
00077         QStringList &result);
00078 
00079 private:
00080     struct Private;
00081     friend struct Private;
00082     Private *mPriv;
00083 };
00084 
00085 }
00086 
00087 Q_DECLARE_METATYPE(Tp::KeyFile);
00088 
00089 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
00090 
00091 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00837.html0000644000175200001440000001146212000060453021633 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactMessenger Member List
This is the complete list of members for Tp::ContactMessenger, including all inherited members.
account() const Tp::ContactMessenger
contactIdentifier() const Tp::ContactMessenger
create(const AccountPtr &account, const ContactPtr &contact)Tp::ContactMessenger [static]
create(const AccountPtr &account, const QString &contactIdentifier)Tp::ContactMessenger [static]
messageReceived(const Tp::ReceivedMessage &message, const Tp::TextChannelPtr &channel)Tp::ContactMessenger [signal]
messageSent(const Tp::Message &message, Tp::MessageSendingFlags flags, const QString &sentMessageToken, const Tp::TextChannelPtr &channel)Tp::ContactMessenger [signal]
RefCounted()Tp::RefCounted [inline]
sendMessage(const QString &text, ChannelTextMessageType type=ChannelTextMessageTypeNormal, MessageSendingFlags flags=0)Tp::ContactMessenger
sendMessage(const MessageContentPartList &parts, MessageSendingFlags flags=0)Tp::ContactMessenger
textChats() const Tp::ContactMessenger
~ContactMessenger()Tp::ContactMessenger [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_func_0x6c.html0000644000175200001440000001642412000060453024677 0ustar00collabora-develusers00000000000000 Class Members - Functions
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- l -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01107.html0000644000175200001440000002030512000060453021616 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelTypeServerTLSConnectionInterface Member List
This is the complete list of members for Tp::Client::ChannelTypeServerTLSConnectionInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ChannelTypeServerTLSConnectionInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelTypeServerTLSConnectionInterface
ChannelTypeServerTLSConnectionInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelTypeServerTLSConnectionInterface
ChannelTypeServerTLSConnectionInterface(Tp::DBusProxy *proxy)Tp::Client::ChannelTypeServerTLSConnectionInterface
ChannelTypeServerTLSConnectionInterface(const Tp::Client::ChannelInterface &mainInterface)Tp::Client::ChannelTypeServerTLSConnectionInterface [explicit]
ChannelTypeServerTLSConnectionInterface(const Tp::Client::ChannelInterface &mainInterface, QObject *parent)Tp::Client::ChannelTypeServerTLSConnectionInterface
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ChannelTypeServerTLSConnectionInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ChannelTypeServerTLSConnectionInterface [inline]
requestPropertyHostname() const Tp::Client::ChannelTypeServerTLSConnectionInterface [inline]
requestPropertyReferenceIdentities() const Tp::Client::ChannelTypeServerTLSConnectionInterface [inline]
requestPropertyServerCertificate() const Tp::Client::ChannelTypeServerTLSConnectionInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ChannelTypeServerTLSConnectionInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00775.html0000644000175200001440000000613712000060453021637 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AbstractClientHandler::HandlerInfo Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00754.html0000644000175200001440000000364412000060453021634 0ustar00collabora-develusers00000000000000 Telepathy Properties proxy
   Home · All Classes · All Namespaces · Modules · Functions · Files
Telepathy Properties proxy

Classes


Detailed Description

Proxy object representing the Telepathy Properties interface on remote objects.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00794.html0000644000175200001440000001165112000060453021635 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingCallContent Member List
This is the complete list of members for Tp::PendingCallContent, including all inherited members.
content() const Tp::PendingCallContent
errorMessage() const Tp::PendingOperation
errorName() const Tp::PendingOperation
finished(Tp::PendingOperation *operation)Tp::PendingOperation [signal]
isError() const Tp::PendingOperation
isFinished() const Tp::PendingOperation
isValid() const Tp::PendingOperation
object() const Tp::PendingOperation [protected]
PendingOperation(const SharedPtr< RefCounted > &object)Tp::PendingOperation [protected]
setFinished()Tp::PendingOperation [protected, slot]
setFinishedWithError(const QString &name, const QString &message)Tp::PendingOperation [protected, slot]
setFinishedWithError(const QDBusError &error)Tp::PendingOperation [protected, slot]
~PendingCallContent()Tp::PendingCallContent
~PendingOperation()Tp::PendingOperation [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00238.html0000644000175200001440000001763312000060453021634 0ustar00collabora-develusers00000000000000 Tp::FunctorCaller4< Functor, R, Arg1, Arg2, Arg3, Arg4 > Struct Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::FunctorCaller4< Functor, R, Arg1, Arg2, Arg3, Arg4 > Struct Template Reference

#include </home/collabora-devel/kde/src/telepathy-qt4/TelepathyQt/callbacks.h>

Inherits Tp::BaseFunctorCaller< FunctorCaller4< Functor, R, Arg1, Arg2, Arg3, Arg4 >, Functor >.

List of all members.

Public Types

Public Member Functions

Static Public Member Functions

template<class Functor, class R, class Arg1, class Arg2, class Arg3, class Arg4>
struct Tp::FunctorCaller4< Functor, R, Arg1, Arg2, Arg3, Arg4 >


Member Typedef Documentation

template<class Functor , class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 >
typedef R Tp::FunctorCaller4< Functor, R, Arg1, Arg2, Arg3, Arg4 >::ResultType
template<class Functor , class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 >
typedef R(* Tp::FunctorCaller4< Functor, R, Arg1, Arg2, Arg3, Arg4 >::InvokeType)(AbstractFunctorCaller *, Arg1, Arg2, Arg3, Arg4)

Constructor & Destructor Documentation

template<class Functor , class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 >
Tp::FunctorCaller4< Functor, R, Arg1, Arg2, Arg3, Arg4 >::FunctorCaller4 ( const Functor &  functor) [inline, explicit]

Member Function Documentation

template<class Functor , class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 >
static ResultType Tp::FunctorCaller4< Functor, R, Arg1, Arg2, Arg3, Arg4 >::invoke ( AbstractFunctorCaller call,
Arg1  a1,
Arg2  a2,
Arg3  a3,
Arg4  a4 
) [inline, static]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01143.html0000644000175200001440000002164212000060453021623 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceSimplePresenceInterface Member List
This is the complete list of members for Tp::Client::ConnectionInterfaceSimplePresenceInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ConnectionInterfaceSimplePresenceInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceSimplePresenceInterface
ConnectionInterfaceSimplePresenceInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceSimplePresenceInterface
ConnectionInterfaceSimplePresenceInterface(Tp::DBusProxy *proxy)Tp::Client::ConnectionInterfaceSimplePresenceInterface
ConnectionInterfaceSimplePresenceInterface(const Tp::Client::ConnectionInterface &mainInterface)Tp::Client::ConnectionInterfaceSimplePresenceInterface [explicit]
ConnectionInterfaceSimplePresenceInterface(const Tp::Client::ConnectionInterface &mainInterface, QObject *parent)Tp::Client::ConnectionInterfaceSimplePresenceInterface
GetPresences(const Tp::UIntList &contacts, int timeout=-1)Tp::Client::ConnectionInterfaceSimplePresenceInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ConnectionInterfaceSimplePresenceInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
PresencesChanged(const Tp::SimpleContactPresences &presence)Tp::Client::ConnectionInterfaceSimplePresenceInterface [signal]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ConnectionInterfaceSimplePresenceInterface [inline]
requestPropertyMaximumStatusMessageLength() const Tp::Client::ConnectionInterfaceSimplePresenceInterface [inline]
requestPropertyStatuses() const Tp::Client::ConnectionInterfaceSimplePresenceInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
SetPresence(const QString &status, const QString &statusMessage, int timeout=-1)Tp::Client::ConnectionInterfaceSimplePresenceInterface [inline, slot]
staticInterfaceName()Tp::Client::ConnectionInterfaceSimplePresenceInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00046.html0000644000175200001440000005414112000060453021624 0ustar00collabora-develusers00000000000000 Tp::Client::AccountInterfaceStorageInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::AccountInterfaceStorageInterface Class Reference

#include <TelepathyQt/AccountManager>

Inherits Tp::AbstractInterface.

List of all members.

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Account.Interface.Storage".


Constructor & Destructor Documentation

Tp::Client::AccountInterfaceStorageInterface::AccountInterfaceStorageInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a AccountInterfaceStorageInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::AccountInterfaceStorageInterface::AccountInterfaceStorageInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a AccountInterfaceStorageInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a AccountInterfaceStorageInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a AccountInterfaceStorageInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a AccountInterfaceStorageInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

static QLatin1String Tp::Client::AccountInterfaceStorageInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Account.Interface.Storage", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property StorageProvider of type QString.

The name of the account storage implementation, which SHOULD start with a reversed domain name in the same way as D-Bus interface names. When this is the empty string the account is internally stored.

This property cannot change once an Account has been created.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property StorageIdentifier of type QDBusVariant.

Unique identification of the account within the storage backend. The contents of the variant are defined by the StorageProvider .

This property cannot change once an Account has been created.

Different storage systems will have their own way of uniquely identifying an account, typically an integer or a string. Given that all users of this property should have direct knowledge of the backend they should know what types to expect and how to handle it.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property StorageSpecificInformation of type QVariantMap.

Map containing information specific to the storage backend. The keys and the types of their values are defined by the StorageProvider , and are not interpreted by the AccountManager implementation.

As the values in this map may change at any time (due to an external application manipulating the storage provider directly), this property should not be cached; it should instead be retrieved each time it is needed.

This can be used to provide additional hints to user interfaces aware of a specific storage provider, without requiring those user interfaces to use the StorageIdentifier to query the storage provider directly.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property StorageRestrictions of type uint.

Bitfield which defines what restrictions this Storage method has.

This property cannot change once an Account has been created.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
void Tp::Client::AccountInterfaceStorageInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00491_source.html0000644000175200001440000003210412000060453023203 0ustar00collabora-develusers00000000000000 cli-call-stream-body.hpp Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-call-stream-body.hpp
00001 #define IN_TP_QT_HEADER
00002 #include "TelepathyQt/call-stream.h"
00003 
00004 namespace Tp
00005 {
00006 namespace Client
00007 {
00008 
00009 CallStreamInterface::CallStreamInterface(const QString& busName, const QString& objectPath, QObject *parent)
00010     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00011 {
00012 }
00013 
00014 CallStreamInterface::CallStreamInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00015     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00016 {
00017 }
00018 
00019 CallStreamInterface::CallStreamInterface(Tp::DBusProxy *proxy)
00020     : Tp::AbstractInterface(proxy, staticInterfaceName())
00021 {
00022 }
00023 
00024 void CallStreamInterface::invalidate(Tp::DBusProxy *proxy,
00025         const QString &error, const QString &message)
00026 {
00027     disconnect(this, SIGNAL(RemoteMembersChanged(const Tp::ContactSendingStateMap&, const Tp::HandleIdentifierMap&, const Tp::UIntList&, const Tp::CallStateReason&)), NULL, NULL);
00028     disconnect(this, SIGNAL(LocalSendingStateChanged(uint, const Tp::CallStateReason&)), NULL, NULL);
00029 
00030     Tp::AbstractInterface::invalidate(proxy, error, message);
00031 }
00032 
00033 CallStreamInterfaceMediaInterface::CallStreamInterfaceMediaInterface(const QString& busName, const QString& objectPath, QObject *parent)
00034     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00035 {
00036 }
00037 
00038 CallStreamInterfaceMediaInterface::CallStreamInterfaceMediaInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00039     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00040 {
00041 }
00042 
00043 CallStreamInterfaceMediaInterface::CallStreamInterfaceMediaInterface(Tp::DBusProxy *proxy)
00044     : Tp::AbstractInterface(proxy, staticInterfaceName())
00045 {
00046 }
00047 
00048 CallStreamInterfaceMediaInterface::CallStreamInterfaceMediaInterface(const Tp::Client::CallStreamInterface& mainInterface)
00049     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00050 {
00051 }
00052 
00053 CallStreamInterfaceMediaInterface::CallStreamInterfaceMediaInterface(const Tp::Client::CallStreamInterface& mainInterface, QObject *parent)
00054     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00055 {
00056 }
00057 
00058 void CallStreamInterfaceMediaInterface::invalidate(Tp::DBusProxy *proxy,
00059         const QString &error, const QString &message)
00060 {
00061     disconnect(this, SIGNAL(SendingStateChanged(uint)), NULL, NULL);
00062     disconnect(this, SIGNAL(ReceivingStateChanged(uint)), NULL, NULL);
00063     disconnect(this, SIGNAL(LocalCandidatesAdded(const Tp::CandidateList&)), NULL, NULL);
00064     disconnect(this, SIGNAL(LocalCredentialsChanged(const QString&, const QString&)), NULL, NULL);
00065     disconnect(this, SIGNAL(RelayInfoChanged(const Tp::StringVariantMapList&)), NULL, NULL);
00066     disconnect(this, SIGNAL(STUNServersChanged(const Tp::SocketAddressIPList&)), NULL, NULL);
00067     disconnect(this, SIGNAL(ServerInfoRetrieved()), NULL, NULL);
00068     disconnect(this, SIGNAL(EndpointsChanged(const Tp::ObjectPathList&, const Tp::ObjectPathList&)), NULL, NULL);
00069     disconnect(this, SIGNAL(ICERestartRequested()), NULL, NULL);
00070 
00071     Tp::AbstractInterface::invalidate(proxy, error, message);
00072 }
00073 }
00074 }


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01137.html0000644000175200001440000002317212000060453021626 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceLocationInterface Member List
This is the complete list of members for Tp::Client::ConnectionInterfaceLocationInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ConnectionInterfaceLocationInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceLocationInterface
ConnectionInterfaceLocationInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceLocationInterface
ConnectionInterfaceLocationInterface(Tp::DBusProxy *proxy)Tp::Client::ConnectionInterfaceLocationInterface
ConnectionInterfaceLocationInterface(const Tp::Client::ConnectionInterface &mainInterface)Tp::Client::ConnectionInterfaceLocationInterface [explicit]
ConnectionInterfaceLocationInterface(const Tp::Client::ConnectionInterface &mainInterface, QObject *parent)Tp::Client::ConnectionInterfaceLocationInterface
GetLocations(const Tp::UIntList &contacts, int timeout=-1)Tp::Client::ConnectionInterfaceLocationInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ConnectionInterfaceLocationInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
LocationUpdated(uint contact, const QVariantMap &location)Tp::Client::ConnectionInterfaceLocationInterface [signal]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ConnectionInterfaceLocationInterface [inline]
RequestLocation(uint contact, int timeout=-1)Tp::Client::ConnectionInterfaceLocationInterface [inline, slot]
requestPropertyLocationAccessControl() const Tp::Client::ConnectionInterfaceLocationInterface [inline]
requestPropertyLocationAccessControlTypes() const Tp::Client::ConnectionInterfaceLocationInterface [inline]
requestPropertySupportedLocationFeatures() const Tp::Client::ConnectionInterfaceLocationInterface [inline]
SetLocation(const QVariantMap &location, int timeout=-1)Tp::Client::ConnectionInterfaceLocationInterface [inline, slot]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
setPropertyLocationAccessControl(Tp::RichPresenceAccessControl newValue)Tp::Client::ConnectionInterfaceLocationInterface [inline]
staticInterfaceName()Tp::Client::ConnectionInterfaceLocationInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00902.html0000644000175200001440000001230312000060453021617 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingDBusTubeConnection Member List
This is the complete list of members for Tp::PendingDBusTubeConnection, including all inherited members.
address() const Tp::PendingDBusTubeConnection
allowsOtherUsers() const Tp::PendingDBusTubeConnection
errorMessage() const Tp::PendingOperation
errorName() const Tp::PendingOperation
finished(Tp::PendingOperation *operation)Tp::PendingOperation [signal]
isError() const Tp::PendingOperation
isFinished() const Tp::PendingOperation
isValid() const Tp::PendingOperation
object() const Tp::PendingOperation [protected]
PendingOperation(const SharedPtr< RefCounted > &object)Tp::PendingOperation [protected]
setFinished()Tp::PendingOperation [protected, slot]
setFinishedWithError(const QString &name, const QString &message)Tp::PendingOperation [protected, slot]
setFinishedWithError(const QDBusError &error)Tp::PendingOperation [protected, slot]
~PendingDBusTubeConnection()Tp::PendingDBusTubeConnection [virtual]
~PendingOperation()Tp::PendingOperation [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00845.html0000644000175200001440000001754412000060453021641 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::DBusProxy Member List
This is the complete list of members for Tp::DBusProxy, including all inherited members.
actualFeatures() const Tp::ReadyObject [virtual]
becomeReady(const Features &requestedFeatures=Features())Tp::ReadyObject [virtual]
busName() const Tp::DBusProxy
dbusConnection() const Tp::DBusProxy
DBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore)Tp::DBusProxy
invalidate(const QString &reason, const QString &message)Tp::DBusProxy [protected]
invalidate(const QDBusError &error)Tp::DBusProxy [protected]
invalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage)Tp::DBusProxy [signal]
invalidationMessage() const Tp::DBusProxy
invalidationReason() const Tp::DBusProxy
isReady(const Features &features=Features()) const Tp::ReadyObject [virtual]
isValid() const Tp::DBusProxy
missingFeatures() const Tp::ReadyObject [virtual]
notify(const char *propertyName)Tp::Object [protected]
Object()Tp::Object [protected]
objectPath() const Tp::DBusProxy
propertyChanged(const QString &propertyName)Tp::Object [signal]
readinessHelper() const Tp::ReadyObject [protected]
ReadyObject(RefCounted *object, const Feature &featureCore)Tp::ReadyObject
ReadyObject(DBusProxy *proxy, const Feature &featureCore)Tp::ReadyObject
RefCounted()Tp::RefCounted [inline]
requestedFeatures() const Tp::ReadyObject [virtual]
setBusName(const QString &busName)Tp::DBusProxy [protected]
~DBusProxy()Tp::DBusProxy [virtual]
~Object()Tp::Object [virtual]
~ReadyObject()Tp::ReadyObject [virtual]
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00219.html0000644000175200001440000005513612000060453021633 0ustar00collabora-develusers00000000000000 Tp::DBusTubeChannel Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The DBusTubeChannel class represents a Telepathy channel of type DBusTube. More...

#include <TelepathyQt/DBusTubeChannel>

Inherits Tp::TubeChannel.

Inherited by Tp::IncomingDBusTubeChannel, and Tp::OutgoingDBusTubeChannel.

List of all members.

Signals

Public Member Functions

Static Public Member Functions

Static Public Attributes

Protected Member Functions


Detailed Description

The DBusTubeChannel class represents a Telepathy channel of type DBusTube.

It provides a private bus which can be used as a peer-to-peer connection in case of a Contact Channel, or as a full-fledged bus in case of a Room Channel.

DBusTubeChannel is an intermediate base class; OutgoingDBusTubeChannel and IncomingDBusTubeChannel are the specialized classes used for locally and remotely initiated tubes respectively.

For more details, please refer to Telepathy specification.

See Asynchronous Object Model, Shared Pointer Usage


Constructor & Destructor Documentation

Class destructor.

Tp::DBusTubeChannel::DBusTubeChannel ( const ConnectionPtr &  connection,
const QString &  objectPath,
const QVariantMap &  immutableProperties 
) [protected]

Construct a new DBusTubeChannel object.

Parameters:
connectionConnection owning this channel, and specifying the service.
objectPathThe object path of this channel.
immutablePropertiesThe immutable properties of this channel.

Member Function Documentation

DBusTubeChannelPtr Tp::DBusTubeChannel::create ( const ConnectionPtr &  connection,
const QString &  objectPath,
const QVariantMap &  immutableProperties 
) [static]

Create a new DBusTubeChannel channel.

Parameters:
connectionConnection owning this channel, and specifying the service.
objectPathThe object path of this channel.
immutablePropertiesThe immutable properties of this channel.
Returns:
A DBusTubeChannelPtr object pointing to the newly created DBusTubeChannel object.

Reimplemented from Tp::TubeChannel.

Reimplemented in Tp::IncomingDBusTubeChannel, and Tp::OutgoingDBusTubeChannel.

Returns the service name which will be used over the tube. This should be a well-known and valid DBus service name, in the form "org.my.service".

This method requires DBusTubeChannel::FeatureCore to be enabled.

Returns:
the service name that will be used over the tube

Checks if this tube is capable to accept or offer a private bus which will allow connections only from the current user

This method is useful only if your appliance is really security-sensitive: in general, this restriction is always enabled by default on all tubes offered or accepted from Telepathy-Qt, falling back to a general connection allowance if this feature is not available.

If your application does not have specific needs regarding DBus credentials, you can trust Telepathy-Qt to do the right thing - in any case, the most secure method available will be used by default.

This method requires DBusTubeChannel::FeatureCore to be enabled.

Returns:
Whether this DBus tube is capable to accept or offer a private bus restricting access to it to the current user only.
See also:
IncomingDBusTubeChannel::acceptTube
OutgoingDBusTubeChannel::offerTube
QHash< QString, Tp::ContactPtr > Tp::DBusTubeChannel::contactsForBusNames ( ) const

This function returns all the known active bus names in this tube. It requires FeatureBusNameMonitoring to be activated; however, even a late activation of the feature will make this function return a full list of all the connected bus names, including the ones which appeared before the activation of the feature itself.

This function will always return an empty hash in case the tube is p2p, even if FeatureBusNameMonitoring has been activated.

This method requires FeatureBusNameMonitoring to be enabled.

Returns:
A list of active connection ids known to this tube
QString Tp::DBusTubeChannel::address ( ) const

If the tube has been opened, this function returns the private bus address you should be connecting to for using this tube.

Please note this function will return a meaningful value only if the tube has already been opened successfully: in case of failure or the tube being still pending, an empty QString will be returned.

Note:
If you plan to use QtDBus for the DBus connection, please note you should always use QDBusConnection::connectToPeer(), regardless of the fact this tube is a p2p or a group one. The above function has been introduced in Qt 4.8, previous versions of Qt do not allow the use of DBus Tubes through QtDBus.
Returns:
The address of the private bus opened by this tube
void Tp::DBusTubeChannel::busNameAdded ( const QString &  busName,
const Tp::ContactPtr &  contact 
) [signal]

Emitted when a new participant joins this tube.

This signal will be emitted only if the tube is a group tube (not p2p), and if the FeatureBusNameMonitoring feature has been enabled.

Parameters:
busNameThe bus name of the new participant
contactThe ContactPtr identifying the participant
void Tp::DBusTubeChannel::busNameRemoved ( const QString &  busName,
const Tp::ContactPtr &  contact 
) [signal]

Emitted when a participant leaves this tube.

This signal will be emitted only if the tube is a group tube (not p2p), and if the FeatureBusNameMonitoring feature has been enabled.

Parameters:
busNameThe bus name of the participant leaving
contactThe ContactPtr identifying the participant

Member Data Documentation

Feature representing the core that needs to become ready to make the DBusTubeChannel object usable.

Note that this feature must be enabled in order to use most DBusTubeChannel methods. See specific methods documentation for more details.

Reimplemented from Tp::TubeChannel.

Feature used in order to monitor bus names in this DBus tube.

See bus name monitoring specific methods' documentation for more details.

See also:
busNameAdded(), busNameRemoved()


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00782.html0000644000175200001440000000774612000060453021644 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AndFilter< T > Member List
This is the complete list of members for Tp::AndFilter< T >, including all inherited members.
create(const QList< SharedPtr< const Filter< T > > > &filters=QList< SharedPtr< const Filter< T > > >())Tp::AndFilter< T > [inline, static]
Filter()Tp::Filter< T > [inline, protected]
filters() const Tp::AndFilter< T > [inline]
isValid() const Tp::AndFilter< T > [inline, virtual]
matches(const SharedPtr< T > &t) const Tp::AndFilter< T > [inline, virtual]
RefCounted()Tp::RefCounted [inline]
~AndFilter()Tp::AndFilter< T > [inline, virtual]
~Filter()Tp::Filter< T > [inline, virtual]
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00516_source.html0000644000175200001440000010374212000060453023210 0ustar00collabora-develusers00000000000000 cli-media-stream-handler.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-media-stream-handler.h
00001 /*
00002  * This file contains D-Bus client proxy classes generated by qt-client-gen.py.
00003  *
00004  * This file can be distributed under the same terms as the specification from
00005  * which it was generated.
00006  */
00007 
00008 #ifndef IN_TP_QT_HEADER
00009 #error IN_TP_QT_HEADER
00010 #endif
00011 
00012 #include <TelepathyQt/Types>
00013 
00014 #include <QtGlobal>
00015 
00016 #include <QString>
00017 #include <QObject>
00018 #include <QVariant>
00019 
00020 #include <QDBusPendingReply>
00021 
00022 #include <TelepathyQt/AbstractInterface>
00023 #include <TelepathyQt/DBusProxy>
00024 #include <TelepathyQt/Global>
00025 
00026 namespace Tp
00027 {
00028 class PendingVariant;
00029 class PendingOperation;
00030 }
00031 
00032 namespace Tp
00033 {
00034 namespace Client
00035 {
00036 
00044 class TP_QT_EXPORT MediaStreamHandlerInterface : public Tp::AbstractInterface
00045 {
00046     Q_OBJECT
00047 
00048 public:
00055     static inline QLatin1String staticInterfaceName()
00056     {
00057         return QLatin1String("org.freedesktop.Telepathy.Media.StreamHandler");
00058     }
00059 
00067     MediaStreamHandlerInterface(
00068         const QString& busName,
00069         const QString& objectPath,
00070         QObject* parent = 0
00071     );
00072 
00081     MediaStreamHandlerInterface(
00082         const QDBusConnection& connection,
00083         const QString& busName,
00084         const QString& objectPath,
00085         QObject* parent = 0
00086     );
00087 
00094     MediaStreamHandlerInterface(Tp::DBusProxy *proxy);
00095 
00111     inline Tp::PendingVariant *requestPropertySTUNServers() const
00112     {
00113         return internalRequestProperty(QLatin1String("STUNServers"));
00114     }
00115 
00127     inline Tp::PendingVariant *requestPropertyCreatedLocally() const
00128     {
00129         return internalRequestProperty(QLatin1String("CreatedLocally"));
00130     }
00131 
00173     inline Tp::PendingVariant *requestPropertyNATTraversal() const
00174     {
00175         return internalRequestProperty(QLatin1String("NATTraversal"));
00176     }
00177 
00258     inline Tp::PendingVariant *requestPropertyRelayInfo() const
00259     {
00260         return internalRequestProperty(QLatin1String("RelayInfo"));
00261     }
00262 
00269     Tp::PendingVariantMap *requestAllProperties() const
00270     {
00271         return internalRequestAllProperties();
00272     }
00273 
00274 public Q_SLOTS:
00285     inline QDBusPendingReply<> CodecChoice(uint codecID, int timeout = -1)
00286     {
00287         if (!invalidationReason().isEmpty()) {
00288             return QDBusPendingReply<>(QDBusMessage::createError(
00289                 invalidationReason(),
00290                 invalidationMessage()
00291             ));
00292         }
00293 
00294         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00295                 this->staticInterfaceName(), QLatin1String("CodecChoice"));
00296         callMessage << QVariant::fromValue(codecID);
00297         return this->connection().asyncCall(callMessage, timeout);
00298     }
00299 
00320     inline QDBusPendingReply<> Error(uint errorCode, const QString& message, int timeout = -1)
00321     {
00322         if (!invalidationReason().isEmpty()) {
00323             return QDBusPendingReply<>(QDBusMessage::createError(
00324                 invalidationReason(),
00325                 invalidationMessage()
00326             ));
00327         }
00328 
00329         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00330                 this->staticInterfaceName(), QLatin1String("Error"));
00331         callMessage << QVariant::fromValue(errorCode) << QVariant::fromValue(message);
00332         return this->connection().asyncCall(callMessage, timeout);
00333     }
00334 
00346     inline QDBusPendingReply<> NativeCandidatesPrepared(int timeout = -1)
00347     {
00348         if (!invalidationReason().isEmpty()) {
00349             return QDBusPendingReply<>(QDBusMessage::createError(
00350                 invalidationReason(),
00351                 invalidationMessage()
00352             ));
00353         }
00354 
00355         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00356                 this->staticInterfaceName(), QLatin1String("NativeCandidatesPrepared"));
00357         return this->connection().asyncCall(callMessage, timeout);
00358     }
00359 
00371     inline QDBusPendingReply<> NewActiveCandidatePair(const QString& nativeCandidateID, const QString& remoteCandidateID, int timeout = -1)
00372     {
00373         if (!invalidationReason().isEmpty()) {
00374             return QDBusPendingReply<>(QDBusMessage::createError(
00375                 invalidationReason(),
00376                 invalidationMessage()
00377             ));
00378         }
00379 
00380         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00381                 this->staticInterfaceName(), QLatin1String("NewActiveCandidatePair"));
00382         callMessage << QVariant::fromValue(nativeCandidateID) << QVariant::fromValue(remoteCandidateID);
00383         return this->connection().asyncCall(callMessage, timeout);
00384     }
00385 
00413     inline QDBusPendingReply<> NewActiveTransportPair(const QString& nativeCandidateID, const Tp::MediaStreamHandlerTransport& nativeTransport, const QString& remoteCandidateID, const Tp::MediaStreamHandlerTransport& remoteTransport, int timeout = -1)
00414     {
00415         if (!invalidationReason().isEmpty()) {
00416             return QDBusPendingReply<>(QDBusMessage::createError(
00417                 invalidationReason(),
00418                 invalidationMessage()
00419             ));
00420         }
00421 
00422         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00423                 this->staticInterfaceName(), QLatin1String("NewActiveTransportPair"));
00424         callMessage << QVariant::fromValue(nativeCandidateID) << QVariant::fromValue(nativeTransport) << QVariant::fromValue(remoteCandidateID) << QVariant::fromValue(remoteTransport);
00425         return this->connection().asyncCall(callMessage, timeout);
00426     }
00427 
00462     inline QDBusPendingReply<> NewNativeCandidate(const QString& candidateID, const Tp::MediaStreamHandlerTransportList& transports, int timeout = -1)
00463     {
00464         if (!invalidationReason().isEmpty()) {
00465             return QDBusPendingReply<>(QDBusMessage::createError(
00466                 invalidationReason(),
00467                 invalidationMessage()
00468             ));
00469         }
00470 
00471         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00472                 this->staticInterfaceName(), QLatin1String("NewNativeCandidate"));
00473         callMessage << QVariant::fromValue(candidateID) << QVariant::fromValue(transports);
00474         return this->connection().asyncCall(callMessage, timeout);
00475     }
00476 
00492     inline QDBusPendingReply<> Ready(const Tp::MediaStreamHandlerCodecList& codecs, int timeout = -1)
00493     {
00494         if (!invalidationReason().isEmpty()) {
00495             return QDBusPendingReply<>(QDBusMessage::createError(
00496                 invalidationReason(),
00497                 invalidationMessage()
00498             ));
00499         }
00500 
00501         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00502                 this->staticInterfaceName(), QLatin1String("Ready"));
00503         callMessage << QVariant::fromValue(codecs);
00504         return this->connection().asyncCall(callMessage, timeout);
00505     }
00506 
00536     inline QDBusPendingReply<> SetLocalCodecs(const Tp::MediaStreamHandlerCodecList& codecs, int timeout = -1)
00537     {
00538         if (!invalidationReason().isEmpty()) {
00539             return QDBusPendingReply<>(QDBusMessage::createError(
00540                 invalidationReason(),
00541                 invalidationMessage()
00542             ));
00543         }
00544 
00545         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00546                 this->staticInterfaceName(), QLatin1String("SetLocalCodecs"));
00547         callMessage << QVariant::fromValue(codecs);
00548         return this->connection().asyncCall(callMessage, timeout);
00549     }
00550 
00562     inline QDBusPendingReply<> StreamState(uint state, int timeout = -1)
00563     {
00564         if (!invalidationReason().isEmpty()) {
00565             return QDBusPendingReply<>(QDBusMessage::createError(
00566                 invalidationReason(),
00567                 invalidationMessage()
00568             ));
00569         }
00570 
00571         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00572                 this->staticInterfaceName(), QLatin1String("StreamState"));
00573         callMessage << QVariant::fromValue(state);
00574         return this->connection().asyncCall(callMessage, timeout);
00575     }
00576 
00595     inline QDBusPendingReply<> SupportedCodecs(const Tp::MediaStreamHandlerCodecList& codecs, int timeout = -1)
00596     {
00597         if (!invalidationReason().isEmpty()) {
00598             return QDBusPendingReply<>(QDBusMessage::createError(
00599                 invalidationReason(),
00600                 invalidationMessage()
00601             ));
00602         }
00603 
00604         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00605                 this->staticInterfaceName(), QLatin1String("SupportedCodecs"));
00606         callMessage << QVariant::fromValue(codecs);
00607         return this->connection().asyncCall(callMessage, timeout);
00608     }
00609 
00628     inline QDBusPendingReply<> CodecsUpdated(const Tp::MediaStreamHandlerCodecList& codecs, int timeout = -1)
00629     {
00630         if (!invalidationReason().isEmpty()) {
00631             return QDBusPendingReply<>(QDBusMessage::createError(
00632                 invalidationReason(),
00633                 invalidationMessage()
00634             ));
00635         }
00636 
00637         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00638                 this->staticInterfaceName(), QLatin1String("CodecsUpdated"));
00639         callMessage << QVariant::fromValue(codecs);
00640         return this->connection().asyncCall(callMessage, timeout);
00641     }
00642 
00658     inline QDBusPendingReply<> HoldState(bool held, int timeout = -1)
00659     {
00660         if (!invalidationReason().isEmpty()) {
00661             return QDBusPendingReply<>(QDBusMessage::createError(
00662                 invalidationReason(),
00663                 invalidationMessage()
00664             ));
00665         }
00666 
00667         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00668                 this->staticInterfaceName(), QLatin1String("HoldState"));
00669         callMessage << QVariant::fromValue(held);
00670         return this->connection().asyncCall(callMessage, timeout);
00671     }
00672 
00685     inline QDBusPendingReply<> UnholdFailure(int timeout = -1)
00686     {
00687         if (!invalidationReason().isEmpty()) {
00688             return QDBusPendingReply<>(QDBusMessage::createError(
00689                 invalidationReason(),
00690                 invalidationMessage()
00691             ));
00692         }
00693 
00694         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00695                 this->staticInterfaceName(), QLatin1String("UnholdFailure"));
00696         return this->connection().asyncCall(callMessage, timeout);
00697     }
00698 
00715     inline QDBusPendingReply<> SupportedFeedbackMessages(const Tp::RTCPFeedbackMessageMap& messages, int timeout = -1)
00716     {
00717         if (!invalidationReason().isEmpty()) {
00718             return QDBusPendingReply<>(QDBusMessage::createError(
00719                 invalidationReason(),
00720                 invalidationMessage()
00721             ));
00722         }
00723 
00724         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00725                 this->staticInterfaceName(), QLatin1String("SupportedFeedbackMessages"));
00726         callMessage << QVariant::fromValue(messages);
00727         return this->connection().asyncCall(callMessage, timeout);
00728     }
00729 
00747     inline QDBusPendingReply<> SupportedHeaderExtensions(const Tp::RTPHeaderExtensionsList& headerExtensions, int timeout = -1)
00748     {
00749         if (!invalidationReason().isEmpty()) {
00750             return QDBusPendingReply<>(QDBusMessage::createError(
00751                 invalidationReason(),
00752                 invalidationMessage()
00753             ));
00754         }
00755 
00756         QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(),
00757                 this->staticInterfaceName(), QLatin1String("SupportedHeaderExtensions"));
00758         callMessage << QVariant::fromValue(headerExtensions);
00759         return this->connection().asyncCall(callMessage, timeout);
00760     }
00761 
00762 Q_SIGNALS:
00778     void AddRemoteCandidate(const QString& candidateID, const Tp::MediaStreamHandlerTransportList& transports);
00779 
00786     void Close();
00787 
00799     void RemoveRemoteCandidate(const QString& candidateID);
00800 
00808     void SetActiveCandidatePair(const QString& nativeCandidateID, const QString& remoteCandidateID);
00809 
00821     void SetRemoteCandidateList(const Tp::MediaStreamHandlerCandidateList& remoteCandidates);
00822 
00835     void SetRemoteCodecs(const Tp::MediaStreamHandlerCodecList& codecs);
00836 
00846     void SetStreamPlaying(bool playing);
00847 
00854     void SetStreamSending(bool sending);
00855 
00866     void StartTelephonyEvent(uchar event);
00867 
00887     void StartNamedTelephonyEvent(uchar event, uint codecID);
00888 
00901     void StartSoundTelephonyEvent(uchar event);
00902 
00909     void StopTelephonyEvent();
00910 
00944     void SetStreamHeld(bool held);
00945 
00959     void SetRemoteFeedbackMessages(const Tp::RTCPFeedbackMessageMap& messages);
00960 
00974     void SetRemoteHeaderExtensions(const Tp::RTPHeaderExtensionsList& headerExtensions);
00975 
00976 protected:
00977     virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &);
00978 };
00979 }
00980 }
00981 Q_DECLARE_METATYPE(Tp::Client::MediaStreamHandlerInterface*)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00151.html0000644000175200001440000014612512000060453021625 0ustar00collabora-develusers00000000000000 Tp::Client::ChannelTypeTubesInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

#include <TelepathyQt/Channel>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Channel.Type.Tubes".


Constructor & Destructor Documentation

Tp::Client::ChannelTypeTubesInterface::ChannelTypeTubesInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelTypeTubesInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ChannelTypeTubesInterface::ChannelTypeTubesInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelTypeTubesInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ChannelTypeTubesInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ChannelTypeTubesInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ChannelTypeTubesInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

static QLatin1String Tp::Client::ChannelTypeTubesInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Channel.Type.Tubes", which this class represents.

Returns:
The D-Bus interface name.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply<Tp::SupportedSocketMap> Tp::Client::ChannelTypeTubesInterface::GetAvailableStreamTubeTypes ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method GetAvailableStreamTubeTypes on the remote object.

List the available address types and access-control types for stream tubes.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
Returns:

A mapping from address types (members of Socket_Address_Type) to arrays of access-control type (members of Socket_Access_Control) that the connection manager supports for stream tubes with that address type. For simplicity, if a CM supports offering a particular type of tube, it is assumed to support accepting it.

A typical value for a host without IPv6 support:

       {
         Socket_Address_Type_IPv4:
           [Socket_Access_Control_Localhost, Socket_Access_Control_Port,
            Socket_Access_Control_Netmask],
         Socket_Address_Type_Unix:
           [Socket_Access_Control_Localhost, Socket_Access_Control_Credentials]
       }
     

If stream tubes are not supported, this will be an empty dictionary.

QDBusPendingReply<Tp::UIntList> Tp::Client::ChannelTypeTubesInterface::GetAvailableTubeTypes ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method GetAvailableTubeTypes on the remote object.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
Returns:

An array of the available tube types, as defined by the Tube_Type enum.

QDBusPendingReply<Tp::TubeInfoList> Tp::Client::ChannelTypeTubesInterface::ListTubes ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method ListTubes on the remote object.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
Returns:

Return an array of tuples, each representing a tube, with the following members: the tube's ID the tube's initiator the tube's type the tube's service the tube's parameters the tube's state

QDBusPendingReply<uint> Tp::Client::ChannelTypeTubesInterface::OfferDBusTube ( const QString &  service,
const QVariantMap &  parameters,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method OfferDBusTube on the remote object.

Offers a D-Bus tube providing the service specified.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
serviceA string representing the service name that will be used over the tube. It should be a well-known D-Bus service name, of the form com.example.ServiceName.
parametersA dictionary of properties for the new tube; the allowable keys, types and values are defined by the service. Connection managers must support the value being any primitive (non-container) D-Bus type, or a byte array 'ay'.
timeoutThe timeout in milliseconds.
Returns:

The ID of the new tube.

QDBusPendingReply<uint> Tp::Client::ChannelTypeTubesInterface::OfferStreamTube ( const QString &  service,
const QVariantMap &  parameters,
uint  addressType,
const QDBusVariant &  address,
uint  accessControl,
const QDBusVariant &  accessControlParam,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method OfferStreamTube on the remote object.

Offer a stream tube exporting the local socket specified.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
service A string representing the service name that will be used over the tube. It should be a well-known TCP service name as defined by http://www.iana.org/assignments/port-numbers or http://www.dns-sd.org/ServiceTypes.html, for instance "rsync" or "daap".
parameters

A dictionary of properties for the new tube; the allowable keys, types and values are defined by the service. Connection managers must support the value being any primitive (non-container) D-Bus type, or a byte array 'ay'.

These should usually be the same key-value pairs specified for use in the DNS-SD TXT record for that service.

addressTypeThe type of the listening address of the local service, as a member of Socket_Address_Type.
addressThe listening address of the local service, as indicated by the address_type.
accessControlThe access control the local service applies to the local socket, specified so the connection manager can behave appropriately when it connects.
accessControlParamA parameter for the access control type, to be interpreted as specified in the documentation for the Socket_Access_Control enum.
timeoutThe timeout in milliseconds.
Returns:

The ID of the new tube.

QDBusPendingReply<QString> Tp::Client::ChannelTypeTubesInterface::AcceptDBusTube ( uint  ID,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method AcceptDBusTube on the remote object.

Accept a D-Bus tube that's in the "local pending" state. The connection manager will attempt to open the tube. The tube remains in the "local pending" state until the TubeStateChanged signal is emitted.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
IDThe ID of the tube to accept.
timeoutThe timeout in milliseconds.
Returns:

The string describing the address of the private bus. The client should not attempt to connect to the address until the tube is open.

QDBusPendingReply<QDBusVariant> Tp::Client::ChannelTypeTubesInterface::AcceptStreamTube ( uint  ID,
uint  addressType,
uint  accessControl,
const QDBusVariant &  accessControlParam,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method AcceptStreamTube on the remote object.

Accept a stream tube that's in the "local pending" state. The connection manager will attempt to open the tube. The tube remains in the "local pending" state until the TubeStateChanged signal is emitted.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
IDThe ID of the tube to accept.
addressTypeThe type of address the connection manager should listen on.
accessControlThe type of access control the connection manager should apply to the socket.
accessControlParamA parameter for the access control type, to be interpreted as specified in the documentation for the Socket_Access_Control enum.
timeoutThe timeout in milliseconds.
Returns:

The address on which the connection manager will listen for connections to this tube. The client should not attempt to connect to the address until the tube is open.

QDBusPendingReply Tp::Client::ChannelTypeTubesInterface::CloseTube ( uint  ID,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method CloseTube on the remote object.

Close a tube.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
IDThe ID of the tube to close.
timeoutThe timeout in milliseconds.
QDBusPendingReply<QString> Tp::Client::ChannelTypeTubesInterface::GetDBusTubeAddress ( uint  ID,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method GetDBusTubeAddress on the remote object.

For a D-Bus tube, return a string describing the address of the private bus.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
IDThe ID of the tube to get an address for.
timeoutThe timeout in milliseconds.
Returns:

The bus address.

QDBusPendingReply<Tp::DBusTubeMemberList> Tp::Client::ChannelTypeTubesInterface::GetDBusNames ( uint  ID,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method GetDBusNames on the remote object.

For a multi-user (i.e. Handle_Type_Room) D-Bus tube, obtain a mapping between contact handles and their unique bus names on this tube.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
IDThe ID of the tube to get names for.
timeoutThe timeout in milliseconds.
Returns:

An array of structures, each containing a contact handle and a D-Bus bus name.

QDBusPendingReply<uint, QDBusVariant> Tp::Client::ChannelTypeTubesInterface::GetStreamTubeSocketAddress ( uint  ID,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method GetStreamTubeSocketAddress on the remote object.

For a stream tube, obtain the address of the socket used to communicate over this tube.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
IDThe ID of the stream tube to get the socket for.
timeoutThe timeout in milliseconds.
Returns:

The type of the listening address of the socket, as a member of Socket_Address_Type.

Returns:

The listening address of the socket, as indicated by the address_type.

void Tp::Client::ChannelTypeTubesInterface::NewTube ( uint  ID,
uint  initiator,
uint  type,
const QString &  service,
const QVariantMap &  parameters,
uint  state 
) [signal]

Represents the signal NewTube on the remote object.

Emitted when a tube is created.

Parameters:
IDThe ID of the new tube.
initiatorThe handle of the contact who initiated the tube.
typeThe tube type, as defined by the Tube_Type enum.
serviceA string representing the service that will be used over the tube.
parametersThe new tube's properties.
stateThe new tube's state.
void Tp::Client::ChannelTypeTubesInterface::TubeStateChanged ( uint  ID,
uint  state 
) [signal]

Represents the signal TubeStateChanged on the remote object.

Emitted when the state of a tube changes.

Parameters:
IDThe ID of the tube that changed state.
stateThe new state of the tube; see the Tube_State enumeration.

Represents the signal TubeClosed on the remote object.

Emitted when a tube has been closed. The ID of a closed tube is no longer valid. The ID may later be reused for a new tube.

Parameters:
IDThe ID of the tube that was closed.
void Tp::Client::ChannelTypeTubesInterface::DBusNamesChanged ( uint  ID,
const Tp::DBusTubeMemberList added,
const Tp::UIntList removed 
) [signal]

Represents the signal DBusNamesChanged on the remote object.

Emitted on a multi-user (i.e. Handle_Type_Room) D-Bus tube when a participant opens or closes the tube.

Parameters:
IDThe ID of the tube whose names have changed.
addedArray of handles and D-Bus names of new participants.
removedArray of handles of former participants.
void Tp::Client::ChannelTypeTubesInterface::StreamTubeNewConnection ( uint  ID,
uint  handle 
) [signal]

Represents the signal StreamTubeNewConnection on the remote object.

Emitted on a stream tube when a participant opens a new connection to its socket.

Parameters:
IDThe ID of the tube
handleThe handle of the participant who opened the new connection
void Tp::Client::ChannelTypeTubesInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00973.html0000644000175200001440000000430412000060453021631 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ChannelDetails Member List
This is the complete list of members for Tp::ChannelDetails, including all inherited members.
channelTp::ChannelDetails
propertiesTp::ChannelDetails


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00283.html0000644000175200001440000002056012000060453021625 0ustar00collabora-develusers00000000000000 Tp::MessageContentPartList Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MessageContentPartList Class Reference


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00234.html0000644000175200001440000001501612000060453021621 0ustar00collabora-develusers00000000000000 Tp::FunctorCaller0< Functor, R > Struct Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::FunctorCaller0< Functor, R > Struct Template Reference

#include </home/collabora-devel/kde/src/telepathy-qt4/TelepathyQt/callbacks.h>

Inherits Tp::BaseFunctorCaller< FunctorCaller0< Functor, R >, Functor >.

List of all members.

Public Types

Public Member Functions

Static Public Member Functions

template<class Functor, class R>
struct Tp::FunctorCaller0< Functor, R >


Member Typedef Documentation

template<class Functor , class R >
typedef R Tp::FunctorCaller0< Functor, R >::ResultType
template<class Functor , class R >
typedef R(* Tp::FunctorCaller0< Functor, R >::InvokeType)(AbstractFunctorCaller *)

Constructor & Destructor Documentation

template<class Functor , class R >
Tp::FunctorCaller0< Functor, R >::FunctorCaller0 ( const Functor &  functor) [inline, explicit]

Member Function Documentation

template<class Functor , class R >
static ResultType Tp::FunctorCaller0< Functor, R >::invoke ( AbstractFunctorCaller call) [inline, static]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00053.html0000644000175200001440000000665412000060453021630 0ustar00collabora-develusers00000000000000 Tp::AliasPair Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AliasPair Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

A pair (contact handle, alias) as seen in the AliasesChanged signal.


Member Data Documentation


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00010.html0000644000175200001440000001326212000060453021612 0ustar00collabora-develusers00000000000000 contact-messenger/sender.cpp
   Home · All Classes · All Namespaces · Modules · Functions · Files
contact-messenger/sender.cpp
#include "sender.h"
#include "_gen/sender.moc.hpp"

#include <TelepathyQt/Account>
#include <TelepathyQt/Debug>
#include <TelepathyQt/Constants>
#include <TelepathyQt/ContactMessenger>
#include <TelepathyQt/PendingSendMessage>
#include <TelepathyQt/Types>

#include <QCoreApplication>

Sender::Sender(const QString &accountPath,
        const QString &contactIdentifier, const QString &message)
{
    Tp::AccountPtr acc = Tp::Account::create(TP_QT_ACCOUNT_MANAGER_BUS_NAME,
            accountPath);
    messenger = Tp::ContactMessenger::create(acc, contactIdentifier);
    connect(messenger->sendMessage(message),
            SIGNAL(finished(Tp::PendingOperation*)),
            SLOT(onSendMessageFinished(Tp::PendingOperation*)));
}

Sender::~Sender()
{
}

void Sender::onSendMessageFinished(Tp::PendingOperation *op)
{
    if (op->isError()) {
        qDebug() << "Error sending message:" << op->errorName() << "-" << op->errorMessage();
        QCoreApplication::exit(1);
        return;
    }

    Tp::PendingSendMessage *psm = qobject_cast<Tp::PendingSendMessage *>(op);
    qDebug() << "Message sent, token is" << psm->sentMessageToken();
    QCoreApplication::exit(0);
}

int main(int argc, char **argv)
{
    QCoreApplication app(argc, argv);

    Tp::registerTypes();
    Tp::enableDebug(true);
    Tp::enableWarnings(true);

    if (argc < 4) {
        qDebug() << "Usage: contact-messenger account_path contact_id message";
        return -1;
    }

    Sender *sender = new Sender(QLatin1String(argv[1]), QLatin1String(argv[2]),
            QLatin1String(argv[3]));

    int ret = app.exec();
    delete sender;
    return ret;
}


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00719_source.html0000644000175200001440000004437612000060453023224 0ustar00collabora-develusers00000000000000 types.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
types.h
00001 
00023 #ifndef _TelepathyQt_types_h_HEADER_GUARD_
00024 #define _TelepathyQt_types_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/_gen/types.h>
00031 
00032 #include <TelepathyQt/Global>
00033 #include <TelepathyQt/SharedPtr>
00034 #include <TelepathyQt/MethodInvocationContext>
00035 
00036 #include <QDBusVariant>
00037 
00038 namespace Tp
00039 {
00040 
00041 TP_QT_EXPORT void registerTypes();
00042 
00043 template <typename T> class Filter;
00044 template <typename T> class GenericCapabilityFilter;
00045 template <typename T> class GenericPropertyFilter;
00046 
00047 class AbstractClient;
00048 class AbstractClientApprover;
00049 class AbstractClientHandler;
00050 class AbstractClientObserver;
00051 class Account;
00052 typedef GenericCapabilityFilter<Account> AccountCapabilityFilter;
00053 class AccountFactory;
00054 typedef Filter<Account> AccountFilter;
00055 class AccountManager;
00056 class AccountPropertyFilter;
00057 class AccountSet;
00058 class CallChannel;
00059 class CallContent;
00060 class CallStream;
00061 class CaptchaAuthentication;
00062 class Channel;
00063 class ChannelDispatchOperation;
00064 class ChannelFactory;
00065 class ChannelRequest;
00066 class ClientObject;
00067 class ClientRegistrar;
00068 class Connection;
00069 class ConnectionFactory;
00070 class ConnectionLowlevel;
00071 class ConnectionManager;
00072 class ConnectionManagerLowlevel;
00073 class Contact;
00074 class ContactFactory;
00075 class ContactManager;
00076 class ContactMessenger;
00077 class ContactSearchChannel;
00078 class DBusProxy;
00079 class DebugReceiver;
00080 class DBusTubeChannel;
00081 class FileTransferChannel;
00082 class IncomingDBusTubeChannel;
00083 class IncomingFileTransferChannel;
00084 class IncomingStreamTubeChannel;
00085 class OutgoingDBusTubeChannel;
00086 class OutgoingFileTransferChannel;
00087 class OutgoingStreamTubeChannel;
00088 class Profile;
00089 class ProfileManager;
00090 class RoomListChannel;
00091 class ServerAuthenticationChannel;
00092 class SimpleObserver;
00093 class SimpleCallObserver;
00094 class SimpleTextObserver;
00095 class StreamedMediaChannel;
00096 class StreamedMediaStream;
00097 class StreamTubeChannel;
00098 class StreamTubeClient;
00099 class StreamTubeServer;
00100 class TextChannel;
00101 class TubeChannel;
00102 
00103 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00104 
00105 typedef SharedPtr<AbstractClient> AbstractClientPtr;
00106 typedef SharedPtr<AbstractClientApprover> AbstractClientApproverPtr;
00107 typedef SharedPtr<AbstractClientHandler> AbstractClientHandlerPtr;
00108 typedef SharedPtr<AbstractClientObserver> AbstractClientObserverPtr;
00109 typedef SharedPtr<Account> AccountPtr;
00110 typedef SharedPtr<AccountCapabilityFilter> AccountCapabilityFilterPtr;
00111 typedef SharedPtr<const AccountCapabilityFilter> AccountCapabilityFilterConstPtr;
00112 typedef SharedPtr<AccountFactory> AccountFactoryPtr;
00113 typedef SharedPtr<const AccountFactory> AccountFactoryConstPtr;
00114 typedef SharedPtr<AccountFilter> AccountFilterPtr;
00115 typedef SharedPtr<const AccountFilter> AccountFilterConstPtr;
00116 typedef SharedPtr<AccountManager> AccountManagerPtr;
00117 typedef SharedPtr<AccountPropertyFilter> AccountPropertyFilterPtr;
00118 typedef SharedPtr<const AccountPropertyFilter> AccountPropertyFilterConstPtr;
00119 typedef SharedPtr<AccountSet> AccountSetPtr;
00120 typedef SharedPtr<CallChannel> CallChannelPtr;
00121 typedef SharedPtr<CallContent> CallContentPtr;
00122 typedef SharedPtr<CallStream> CallStreamPtr;
00123 typedef SharedPtr<CaptchaAuthentication> CaptchaAuthenticationPtr;
00124 typedef SharedPtr<Channel> ChannelPtr;
00125 typedef SharedPtr<ChannelDispatchOperation> ChannelDispatchOperationPtr;
00126 typedef SharedPtr<ChannelFactory> ChannelFactoryPtr;
00127 typedef SharedPtr<const ChannelFactory> ChannelFactoryConstPtr;
00128 typedef SharedPtr<ChannelRequest> ChannelRequestPtr;
00129 typedef SharedPtr<ClientObject> ClientObjectPtr;
00130 typedef SharedPtr<ClientRegistrar> ClientRegistrarPtr;
00131 typedef SharedPtr<Connection> ConnectionPtr;
00132 typedef SharedPtr<ConnectionFactory> ConnectionFactoryPtr;
00133 typedef SharedPtr<const ConnectionFactory> ConnectionFactoryConstPtr;
00134 typedef SharedPtr<ConnectionLowlevel> ConnectionLowlevelPtr;
00135 typedef SharedPtr<const ConnectionLowlevel> ConnectionLowlevelConstPtr;
00136 typedef SharedPtr<ConnectionManager> ConnectionManagerPtr;
00137 typedef SharedPtr<ConnectionManagerLowlevel> ConnectionManagerLowlevelPtr;
00138 typedef SharedPtr<const ConnectionManagerLowlevel> ConnectionManagerLowlevelConstPtr;
00139 typedef SharedPtr<Contact> ContactPtr;
00140 typedef QSet<ContactPtr> Contacts;
00141 typedef SharedPtr<ContactFactory> ContactFactoryPtr;
00142 typedef SharedPtr<const ContactFactory> ContactFactoryConstPtr;
00143 typedef SharedPtr<ContactManager> ContactManagerPtr;
00144 typedef SharedPtr<ContactMessenger> ContactMessengerPtr;
00145 typedef SharedPtr<ContactSearchChannel> ContactSearchChannelPtr;
00146 typedef SharedPtr<DBusProxy> DBusProxyPtr;
00147 typedef SharedPtr<DBusTubeChannel> DBusTubeChannelPtr;
00148 typedef SharedPtr<DebugReceiver> DebugReceiverPtr;
00149 typedef SharedPtr<FileTransferChannel> FileTransferChannelPtr;
00150 typedef SharedPtr<IncomingDBusTubeChannel> IncomingDBusTubeChannelPtr;
00151 typedef SharedPtr<IncomingFileTransferChannel> IncomingFileTransferChannelPtr;
00152 typedef SharedPtr<IncomingStreamTubeChannel> IncomingStreamTubeChannelPtr;
00153 typedef SharedPtr<OutgoingDBusTubeChannel> OutgoingDBusTubeChannelPtr;
00154 typedef SharedPtr<OutgoingFileTransferChannel> OutgoingFileTransferChannelPtr;
00155 typedef SharedPtr<OutgoingStreamTubeChannel> OutgoingStreamTubeChannelPtr;
00156 typedef SharedPtr<Profile> ProfilePtr;
00157 typedef SharedPtr<ProfileManager> ProfileManagerPtr;
00158 typedef SharedPtr<RoomListChannel> RoomListChannelPtr;
00159 typedef SharedPtr<ServerAuthenticationChannel> ServerAuthenticationChannelPtr;
00160 typedef SharedPtr<SimpleObserver> SimpleObserverPtr;
00161 typedef SharedPtr<SimpleCallObserver> SimpleCallObserverPtr;
00162 typedef SharedPtr<SimpleTextObserver> SimpleTextObserverPtr;
00163 typedef TP_QT_DEPRECATED SharedPtr<StreamedMediaChannel> StreamedMediaChannelPtr;
00164 typedef TP_QT_DEPRECATED SharedPtr<StreamedMediaStream> StreamedMediaStreamPtr;
00165 typedef SharedPtr<StreamTubeChannel> StreamTubeChannelPtr;
00166 typedef SharedPtr<StreamTubeClient> StreamTubeClientPtr;
00167 typedef SharedPtr<StreamTubeServer> StreamTubeServerPtr;
00168 typedef SharedPtr<TextChannel> TextChannelPtr;
00169 typedef SharedPtr<TubeChannel> TubeChannelPtr;
00170 
00171 template<typename T1 = MethodInvocationContextTypes::Nil, typename T2 = MethodInvocationContextTypes::Nil,
00172          typename T3 = MethodInvocationContextTypes::Nil, typename T4 = MethodInvocationContextTypes::Nil,
00173          typename T5 = MethodInvocationContextTypes::Nil, typename T6 = MethodInvocationContextTypes::Nil,
00174          typename T7 = MethodInvocationContextTypes::Nil, typename T8 = MethodInvocationContextTypes::Nil>
00175 class MethodInvocationContextPtr : public SharedPtr<MethodInvocationContext<T1, T2, T3, T4, T5, T6, T7, T8> >
00176 {
00177 public:
00178     inline MethodInvocationContextPtr() { }
00179     explicit inline MethodInvocationContextPtr(MethodInvocationContext<T1, T2, T3, T4, T5, T6, T7, T8> *d)
00180         : SharedPtr<MethodInvocationContext<T1, T2, T3, T4, T5, T6, T7, T8> >(d) { }
00181     inline MethodInvocationContextPtr(const SharedPtr<MethodInvocationContext<T1, T2, T3, T4, T5, T6, T7, T8> > &o)
00182         : SharedPtr<MethodInvocationContext<T1, T2, T3, T4, T5, T6, T7, T8> >(o) { }
00183 };
00184 
00185 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
00186 
00187 } // Tp
00188 
00189 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00957.html0000644000175200001440000000427012000060453021635 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AccessControl Member List
This is the complete list of members for Tp::AccessControl, including all inherited members.
detailTp::AccessControl
typeTp::AccessControl


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00327.html0000644000175200001440000001027312000060453021624 0ustar00collabora-develusers00000000000000 Tp::PendingSuccess Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingSuccess Class Reference

The PendingSuccess class represents PendingOperation that is always successful. More...

#include <TelepathyQt/PendingSuccess>

Inherits Tp::PendingOperation.

List of all members.

Public Member Functions


Detailed Description

The PendingSuccess class represents PendingOperation that is always successful.


Constructor & Destructor Documentation

Tp::PendingSuccess::PendingSuccess ( const SharedPtr< RefCounted > &  object) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00682_source.html0000644000175200001440000006560012000060453023214 0ustar00collabora-develusers00000000000000 referenced-handles.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
referenced-handles.h
00001 
00023 #ifndef _TelepathyQt_referenced_handles_h_HEADER_GUARD_
00024 #define _TelepathyQt_referenced_handles_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Constants>
00031 #include <TelepathyQt/Types>
00032 
00033 #ifndef QT_NO_STL
00034 # include <list>
00035 #endif
00036 
00037 #include <QList>
00038 #include <QSet>
00039 #include <QSharedDataPointer>
00040 #include <QVector>
00041 
00042 namespace Tp
00043 {
00044 
00045 class Connection;
00046 
00047 class TP_QT_EXPORT ReferencedHandles
00048 {
00049 public:
00050     typedef UIntList::const_iterator const_iterator;
00051     typedef UIntList::ConstIterator ConstIterator;
00052     typedef UIntList::const_pointer const_pointer;
00053     typedef UIntList::const_reference const_reference;
00054     typedef UIntList::difference_type difference_type;
00055     typedef UIntList::pointer pointer;
00056     typedef UIntList::reference reference;
00057     typedef UIntList::size_type size_type;
00058     typedef UIntList::value_type value_type;
00059 
00060     ReferencedHandles();
00061     ReferencedHandles(const ReferencedHandles &other);
00062     ~ReferencedHandles();
00063 
00064     ConnectionPtr connection() const;
00065     HandleType handleType() const;
00066 
00067     uint at(int i) const;
00068 
00069     inline uint back() const
00070     {
00071         return last();
00072     }
00073 
00074     inline uint first() const
00075     {
00076         return at(0);
00077     }
00078 
00079     inline uint front() const
00080     {
00081         return first();
00082     }
00083 
00084     inline uint last() const
00085     {
00086         return at(size() - 1);
00087     }
00088 
00089     uint value(int i, uint defaultValue = 0) const;
00090 
00091     const_iterator begin() const;
00092 
00093     inline const_iterator constBegin() const
00094     {
00095         return begin();
00096     }
00097 
00098     inline const_iterator constEnd() const
00099     {
00100         return end();
00101     }
00102 
00103     const_iterator end() const;
00104 
00105     bool contains(uint handle) const;
00106 
00107     int count(uint handle) const;
00108 
00109     inline int count() const
00110     {
00111         return size();
00112     }
00113 
00114     inline bool empty() const
00115     {
00116         return isEmpty();
00117     }
00118 
00119     inline bool endsWith(uint handle) const
00120     {
00121         return !isEmpty() && last() == handle;
00122     }
00123 
00124     int indexOf(uint handle, int from = 0) const;
00125 
00126     bool isEmpty() const;
00127 
00128     int lastIndexOf(uint handle, int from = -1) const;
00129 
00130     inline int length() const
00131     {
00132         return count();
00133     }
00134 
00135     ReferencedHandles mid(int pos, int length = -1) const;
00136 
00137     int size() const;
00138 
00139     inline bool startsWith(uint handle) const
00140     {
00141         return !isEmpty() && first() == handle;
00142     }
00143 
00144     inline void append(const ReferencedHandles& another)
00145     {
00146         *this = *this + another;
00147     }
00148 
00149     void clear();
00150     void move(int from, int to);
00151 
00152     inline void pop_back()
00153     {
00154         return removeLast();
00155     }
00156 
00157     inline void pop_front()
00158     {
00159         return removeFirst();
00160     }
00161 
00162     int removeAll(uint handle);
00163 
00164     void removeAt(int i);
00165 
00166     inline void removeFirst()
00167     {
00168         return removeAt(0);
00169     }
00170 
00171     inline void removeLast()
00172     {
00173         return removeAt(size() - 1);
00174     }
00175 
00176     bool removeOne(uint handle);
00177 
00178     void swap(int i, int j);
00179 
00180     uint takeAt(int i);
00181 
00182     inline uint takeFirst()
00183     {
00184         return takeAt(0);
00185     }
00186 
00187     inline uint takeLast()
00188     {
00189         return takeAt(size() - 1);
00190     }
00191 
00192     bool operator!=(const ReferencedHandles& another) const
00193     {
00194         return !(*this == another);
00195     }
00196 
00197     bool operator!=(const UIntList& another) const
00198     {
00199         return !(*this == another);
00200     }
00201 
00202     ReferencedHandles operator+(const ReferencedHandles& another) const;
00203 
00204     inline ReferencedHandles& operator+=(const ReferencedHandles& another)
00205     {
00206         return *this = (*this + another);
00207     }
00208 
00209     ReferencedHandles& operator<<(const ReferencedHandles& another)
00210     {
00211         return *this += another;
00212     }
00213 
00214     ReferencedHandles& operator=(const ReferencedHandles& another);
00215 
00216     bool operator==(const ReferencedHandles& another) const;
00217     bool operator==(const UIntList& list) const;
00218 
00219     inline uint operator[](int i) const
00220     {
00221         return at(i);
00222     }
00223 
00224     UIntList toList() const;
00225 
00226     inline QSet<uint> toSet() const
00227     {
00228         return toList().toSet();
00229     }
00230 
00231 #ifndef QT_NO_STL
00232     inline std::list<uint> toStdList() const
00233     {
00234         return toList().toStdList();
00235     }
00236 #endif
00237 
00238     inline QVector<uint> toVector() const
00239     {
00240         return toList().toVector();
00241     }
00242 
00243 private:
00244     // For access to the "prime" constructor
00245     friend class ContactManager;
00246     friend class PendingContactAttributes;
00247     friend class PendingContacts;
00248     friend class PendingHandles;
00249 
00250     TP_QT_NO_EXPORT ReferencedHandles(const ConnectionPtr &connection,
00251             HandleType handleType, const UIntList& handles);
00252 
00253     struct Private;
00254     friend struct Private;
00255     QSharedDataPointer<Private> mPriv;
00256 };
00257 
00258 typedef QListIterator<uint> ReferencedHandlesIterator;
00259 
00260 } // Tp
00261 
00262 Q_DECLARE_METATYPE(Tp::ReferencedHandles);
00263 
00264 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01145.html0000644000175200001440000001674012000060453021630 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::MediaSessionHandlerInterface Member List
This is the complete list of members for Tp::Client::MediaSessionHandlerInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
Error(uint errorCode, const QString &message, int timeout=-1)Tp::Client::MediaSessionHandlerInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::MediaSessionHandlerInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
MediaSessionHandlerInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::MediaSessionHandlerInterface
MediaSessionHandlerInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::MediaSessionHandlerInterface
MediaSessionHandlerInterface(Tp::DBusProxy *proxy)Tp::Client::MediaSessionHandlerInterface
NewStreamHandler(const QDBusObjectPath &streamHandler, uint ID, uint mediaType, uint direction)Tp::Client::MediaSessionHandlerInterface [signal]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
Ready(int timeout=-1)Tp::Client::MediaSessionHandlerInterface [inline, slot]
requestAllProperties() const Tp::Client::MediaSessionHandlerInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::MediaSessionHandlerInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00716_source.html0000644000175200001440000001516612000060453023214 0ustar00collabora-develusers00000000000000 tube-channel.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
tube-channel.h
00001 
00022 #ifndef _TelepathyQt_tube_channel_h_HEADER_GUARD_
00023 #define _TelepathyQt_tube_channel_h_HEADER_GUARD_
00024 
00025 #ifndef IN_TP_QT_HEADER
00026 #error IN_TP_QT_HEADER
00027 #endif
00028 
00029 #include <TelepathyQt/Channel>
00030 
00031 namespace Tp
00032 {
00033 
00034 class TP_QT_EXPORT TubeChannel : public Channel
00035 {
00036     Q_OBJECT
00037     Q_DISABLE_COPY(TubeChannel)
00038 
00039 public:
00040     static const Feature FeatureCore;
00041 
00042     static TubeChannelPtr create(const ConnectionPtr &connection,
00043             const QString &objectPath, const QVariantMap &immutableProperties);
00044 
00045     virtual ~TubeChannel();
00046 
00047     TubeChannelState state() const;
00048 
00049     QVariantMap parameters() const;
00050 
00051 Q_SIGNALS:
00052     void stateChanged(Tp::TubeChannelState state);
00053 
00054 protected:
00055     TubeChannel(const ConnectionPtr &connection, const QString &objectPath,
00056             const QVariantMap &immutableProperties,
00057             const Feature &coreFeature = TubeChannel::FeatureCore);
00058 
00059     void setParameters(const QVariantMap &parameters);
00060 
00061 private Q_SLOTS:
00062     TP_QT_NO_EXPORT void onTubeChannelStateChanged(uint newstate);
00063     TP_QT_NO_EXPORT void gotTubeProperties(Tp::PendingOperation *op);
00064 
00065 private:
00066     struct Private;
00067     friend struct Private;
00068     Private *mPriv;
00069 };
00070 
00071 }
00072 
00073 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00180.html0000644000175200001440000010274512000060453021627 0ustar00collabora-develusers00000000000000 Tp::Client::ConnectionInterfaceMailNotificationInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceMailNotificationInterface Class Reference

#include <TelepathyQt/Connection>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Connection.Interface.MailNotification".


Constructor & Destructor Documentation

Tp::Client::ConnectionInterfaceMailNotificationInterface::ConnectionInterfaceMailNotificationInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceMailNotificationInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ConnectionInterfaceMailNotificationInterface::ConnectionInterfaceMailNotificationInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceMailNotificationInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ConnectionInterfaceMailNotificationInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ConnectionInterfaceMailNotificationInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ConnectionInterfaceMailNotificationInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Connection.Interface.MailNotification", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property MailNotificationFlags of type uint.

Integer representing the bitwise-OR of supported features for e-mails notification on this server. This property MUST NOT change after the Connection becomes CONNECTED. This property indicates the behavior and availability of the other properties and signals within this interface. A connection manager that cannot at least set one of the flags in the Mail_Notification_Flags SHOULD NOT provide this interface.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property UnreadMailCount of type uint.

The number of unread messages in the Inbox. Change notification is via UnreadMailsChanged() .

This property is only useful if Supports_Unread_Mail_Count is set in the MailNotificationFlags ; otherwise, it MUST be zero.

If Thread_Based appears in the MailNotificationFlags , this property counts the number of threads, not the number of mails.

Note that this count MAY be bigger than the number of items in UnreadMails . See UnreadMails for more details.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property UnreadMails of type Tp::MailList.

An array of unread Mails. Change notification is via UnreadMailsChanged. This property is only useful if Supports_Unread_Mails is set in MailNotificationFlags; otherwise, it MUST be an empty list. The array size MAY be shorter than UnreadMailCount. Some servers may limits the amount of detailed e-mails sent. This can significantly reduce the network traffic for large inbox. For this reason, it is normal that UnreadMailCount be bigger or equal to the size of this array.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property MailAddress of type QString.

A string representing the e-mail address of the account. The CMs MUST provide this information. In close integration of MailNotification with other e-mail services, the e-mail address can be used has a unique identifier for the account. Possible integration could be between Telepathy and Evolution where the e-mail address is the common information in both interfaces.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply<Tp::MailURL> Tp::Client::ConnectionInterfaceMailNotificationInterface::RequestInboxURL ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method RequestInboxURL on the remote object.

This method creates and returns a URL and an optional POST data that allow opening the Inbox folder of a webmail account. This URL MAY contain tokens with a short lifetime, so clients SHOULD request a new URL for each visit to the webmail interface. This method is implemented only if the Supports_Request_Inbox_URL flag is set in MailNotificationFlags. We are not using properties here because the tokens are unsuitable for sharing between clients, and network round-trips may be required to obtain the information that leads to authentication free webmail access.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
Returns:

A struture containing a URL and optional additional data to open a webmail client, without re-authentication if possible.

QDBusPendingReply<Tp::MailURL> Tp::Client::ConnectionInterfaceMailNotificationInterface::RequestMailURL ( const QString &  ID,
const QDBusVariant &  URLData,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method RequestMailURL on the remote object.

This method creates and returns a URL and optional POST data that allow opening a specific mail in a webmail interface. This method is implemented only if Supports_Request_Mail_URL flag is set in MailNotificationFlags. See RequestInboxURL for design rationale.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
IDThe mail's id as found in the Mail structure, or the empty string if no id key was provided.
URLDataWhatever url-data was found in the Mail structure, or the boolean value False (D-Bus type 'b') if no url-data was provided in the Mail.
timeoutThe timeout in milliseconds.
Returns:

A struture that contains a URL and optional additional data to open a webmail client, without re-authentication if possible.

Represents the signal MailsReceived on the remote object.

Emitted when new e-mails messages arrive to the inbox associated with this connection. This signal is used for protocols that are not able to maintain the UnreadMails list, but do provide real-time notification about newly arrived e-mails. It MUST NOT be emitted unless Emits_Mails_Received is set in MailNotificationFlags.

Parameters:
mails

An array of Mails. Those e-mail MUST NOT have the "id" key.

On connections that emit this signal, it's impossible to tell when a mail has been removed, and hence when "id" has become invalid.

void Tp::Client::ConnectionInterfaceMailNotificationInterface::UnreadMailsChanged ( uint  count,
const Tp::MailList mailsAdded,
const QStringList &  mailsRemoved 
) [signal]

Represents the signal UnreadMailsChanged on the remote object.

Emitted when UnreadMails or UnreadMailCount have changed. It MUST NOT be emited if Supports_Unread_Mail_Count flag is not set in MailNotificationFlags .

Mails_Added and Mails_Removed MUST be empty if the Supports_Unread_Mails flag is not set.

Parameters:
countNumber of unread messages in the inbox (the new value of UnreadMailCount).
mailsAdded

A list of Mail that are being added or updated in UnreadMails .

Mails may be updated when the URL information (URL and POST data) have changed, or senders were added or removed from an e-mail thread.

If the Supports_Unread_Mails flag is not set, this list MUST be empty, even if Count has increased.

mailsRemovedA list of e-mail IDs that are being removed from UnreadMails. If the Supports_Unread_Mails flag is not set, this list MUST be empty, even if Count has decreased.
void Tp::Client::ConnectionInterfaceMailNotificationInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00361.html0000644000175200001440000003744612000060453021635 0ustar00collabora-develusers00000000000000 Tp::ReceivedMessage Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ReceivedMessage Class Reference

The ReceivedMessage class is a subclass of Message, representing a received message only. More...

#include <TelepathyQt/ReceivedMessage>

Inherits Tp::Message.

List of all members.

Classes

Public Member Functions


Detailed Description

The ReceivedMessage class is a subclass of Message, representing a received message only.

It contains additional information that's generally only available on received messages.


Constructor & Destructor Documentation

Copy constructor.


Member Function Documentation

ReceivedMessage & Tp::ReceivedMessage::operator= ( const ReceivedMessage other)

Assignment operator.

QDateTime Tp::ReceivedMessage::received ( ) const

Return the time the message was received.

Returns:
The timestamp as QDateTime, or QDateTime() if unknown.
ContactPtr Tp::ReceivedMessage::sender ( ) const

Return the contact who sent the message.

Returns:
A pointer to the Contact object.
See also:
senderNickname()

Return the nickname chosen by the sender of the message, which can be different for each message in a conversation.

Returns:
The nickname.
See also:
sender()

If this message replaces a previous message, return the value of messageToken() for that previous message. Otherwise, return an empty string.

For instance, a user interface could replace the superseded message with this message, or grey out the superseded message.

Returns:
The message token of the superseded message or an empty string if none.

Return whether the incoming message was part of a replay of message history.

If true, loggers can use this to improve their heuristics for elimination of duplicate messages (a simple, correct implementation would be to avoid logging any message that has this flag).

Returns:
true if the scrollback flag is set, false otherwise.

Return whether the incoming message was seen in a previous channel during the lifetime of the connection, but was not acknowledged before that channel closed, causing the channel in which it now appears to open.

If true, loggers should not log this message again.

Returns:
true if the rescued flag is set, false otherwise.

Return whether the incoming message is a delivery report.

Returns:
true if a delivery report, false otherwise.
See also:
deliveryDetails()

Return the details of a delivery report.

This method should only be used if isDeliveryReport() returns true.

Returns:
The delivery report as a ReceivedMessage::DeliveryDetails object.
See also:
isDeliveryReport()
bool Tp::ReceivedMessage::isFromChannel ( const TextChannelPtr &  channel) const

Return whether this message is from channel.

Returns:
true if the message is from channel, false otherwise.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00503_source.html0000644000175200001440000005707712000060453023215 0ustar00collabora-develusers00000000000000 cli-client-body.hpp Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-client-body.hpp
00001 #define IN_TP_QT_HEADER
00002 #include "TelepathyQt/client.h"
00003 
00004 namespace Tp
00005 {
00006 namespace Client
00007 {
00008 
00009 ClientInterface::ClientInterface(const QString& busName, const QString& objectPath, QObject *parent)
00010     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00011 {
00012 }
00013 
00014 ClientInterface::ClientInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00015     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00016 {
00017 }
00018 
00019 ClientInterface::ClientInterface(Tp::DBusProxy *proxy)
00020     : Tp::AbstractInterface(proxy, staticInterfaceName())
00021 {
00022 }
00023 
00024 void ClientInterface::invalidate(Tp::DBusProxy *proxy,
00025         const QString &error, const QString &message)
00026 {
00027 
00028     Tp::AbstractInterface::invalidate(proxy, error, message);
00029 }
00030 
00031 ClientApproverInterface::ClientApproverInterface(const QString& busName, const QString& objectPath, QObject *parent)
00032     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00033 {
00034 }
00035 
00036 ClientApproverInterface::ClientApproverInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00037     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00038 {
00039 }
00040 
00041 ClientApproverInterface::ClientApproverInterface(Tp::DBusProxy *proxy)
00042     : Tp::AbstractInterface(proxy, staticInterfaceName())
00043 {
00044 }
00045 
00046 ClientApproverInterface::ClientApproverInterface(const Tp::Client::ClientInterface& mainInterface)
00047     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00048 {
00049 }
00050 
00051 ClientApproverInterface::ClientApproverInterface(const Tp::Client::ClientInterface& mainInterface, QObject *parent)
00052     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00053 {
00054 }
00055 
00056 void ClientApproverInterface::invalidate(Tp::DBusProxy *proxy,
00057         const QString &error, const QString &message)
00058 {
00059 
00060     Tp::AbstractInterface::invalidate(proxy, error, message);
00061 }
00062 
00063 ClientHandlerInterface::ClientHandlerInterface(const QString& busName, const QString& objectPath, QObject *parent)
00064     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00065 {
00066 }
00067 
00068 ClientHandlerInterface::ClientHandlerInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00069     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00070 {
00071 }
00072 
00073 ClientHandlerInterface::ClientHandlerInterface(Tp::DBusProxy *proxy)
00074     : Tp::AbstractInterface(proxy, staticInterfaceName())
00075 {
00076 }
00077 
00078 ClientHandlerInterface::ClientHandlerInterface(const Tp::Client::ClientInterface& mainInterface)
00079     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00080 {
00081 }
00082 
00083 ClientHandlerInterface::ClientHandlerInterface(const Tp::Client::ClientInterface& mainInterface, QObject *parent)
00084     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00085 {
00086 }
00087 
00088 void ClientHandlerInterface::invalidate(Tp::DBusProxy *proxy,
00089         const QString &error, const QString &message)
00090 {
00091 
00092     Tp::AbstractInterface::invalidate(proxy, error, message);
00093 }
00094 
00095 ClientInterfaceRequestsInterface::ClientInterfaceRequestsInterface(const QString& busName, const QString& objectPath, QObject *parent)
00096     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00097 {
00098 }
00099 
00100 ClientInterfaceRequestsInterface::ClientInterfaceRequestsInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00101     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00102 {
00103 }
00104 
00105 ClientInterfaceRequestsInterface::ClientInterfaceRequestsInterface(Tp::DBusProxy *proxy)
00106     : Tp::AbstractInterface(proxy, staticInterfaceName())
00107 {
00108 }
00109 
00110 ClientInterfaceRequestsInterface::ClientInterfaceRequestsInterface(const Tp::Client::ClientInterface& mainInterface)
00111     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00112 {
00113 }
00114 
00115 ClientInterfaceRequestsInterface::ClientInterfaceRequestsInterface(const Tp::Client::ClientInterface& mainInterface, QObject *parent)
00116     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00117 {
00118 }
00119 
00120 void ClientInterfaceRequestsInterface::invalidate(Tp::DBusProxy *proxy,
00121         const QString &error, const QString &message)
00122 {
00123 
00124     Tp::AbstractInterface::invalidate(proxy, error, message);
00125 }
00126 
00127 ClientObserverInterface::ClientObserverInterface(const QString& busName, const QString& objectPath, QObject *parent)
00128     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00129 {
00130 }
00131 
00132 ClientObserverInterface::ClientObserverInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00133     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00134 {
00135 }
00136 
00137 ClientObserverInterface::ClientObserverInterface(Tp::DBusProxy *proxy)
00138     : Tp::AbstractInterface(proxy, staticInterfaceName())
00139 {
00140 }
00141 
00142 ClientObserverInterface::ClientObserverInterface(const Tp::Client::ClientInterface& mainInterface)
00143     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00144 {
00145 }
00146 
00147 ClientObserverInterface::ClientObserverInterface(const Tp::Client::ClientInterface& mainInterface, QObject *parent)
00148     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00149 {
00150 }
00151 
00152 void ClientObserverInterface::invalidate(Tp::DBusProxy *proxy,
00153         const QString &error, const QString &message)
00154 {
00155 
00156     Tp::AbstractInterface::invalidate(proxy, error, message);
00157 }
00158 }
00159 }


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00254.html0000644000175200001440000002455212000060453021630 0ustar00collabora-develusers00000000000000 Tp::Contact::InfoFields Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Contact::InfoFields Class Reference

The Contact::InfoFields class represents the information of a Telepathy contact. More...

#include <TelepathyQt/Contact>

List of all members.

Public Member Functions


Detailed Description

The Contact::InfoFields class represents the information of a Telepathy contact.


Constructor & Destructor Documentation

Constructs a new invalid InfoFields instance.

Construct a info fields instance with the given fields. The instance will indicate that it is valid.

Copy constructor.

Class destructor.


Member Function Documentation

bool Tp::Contact::InfoFields::isValid ( ) const [inline]
Contact::InfoFields & Tp::Contact::InfoFields::operator= ( const InfoFields other)

Assignment operator.

ContactInfoFieldList Tp::Contact::InfoFields::fields ( const QString &  name) const

Return a list containing all fields whose name are name.

Parameters:
nameThe name used to match the fields.
Returns:
A list of ContactInfoField objects.

Return a list containing all fields describing the contact information.

Returns:
The contact information as a list of ContactInfoField objects.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00729.html0000644000175200001440000000424712000060453021636 0ustar00collabora-develusers00000000000000 Tp::Client::DBus Namespace Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::DBus Namespace Reference


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01089.html0000644000175200001440000002111212000060453021624 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelInterfaceFileTransferMetadataInterface Member List
This is the complete list of members for Tp::Client::ChannelInterfaceFileTransferMetadataInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ChannelInterfaceFileTransferMetadataInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfaceFileTransferMetadataInterface
ChannelInterfaceFileTransferMetadataInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfaceFileTransferMetadataInterface
ChannelInterfaceFileTransferMetadataInterface(Tp::DBusProxy *proxy)Tp::Client::ChannelInterfaceFileTransferMetadataInterface
ChannelInterfaceFileTransferMetadataInterface(const Tp::Client::ChannelInterface &mainInterface)Tp::Client::ChannelInterfaceFileTransferMetadataInterface [explicit]
ChannelInterfaceFileTransferMetadataInterface(const Tp::Client::ChannelInterface &mainInterface, QObject *parent)Tp::Client::ChannelInterfaceFileTransferMetadataInterface
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ChannelInterfaceFileTransferMetadataInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ChannelInterfaceFileTransferMetadataInterface [inline]
requestPropertyMetadata() const Tp::Client::ChannelInterfaceFileTransferMetadataInterface [inline]
requestPropertyServiceName() const Tp::Client::ChannelInterfaceFileTransferMetadataInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
setPropertyMetadata(Tp::Metadata newValue)Tp::Client::ChannelInterfaceFileTransferMetadataInterface [inline]
setPropertyServiceName(QString newValue)Tp::Client::ChannelInterfaceFileTransferMetadataInterface [inline]
staticInterfaceName()Tp::Client::ChannelInterfaceFileTransferMetadataInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00710_source.html0000644000175200001440000001121312000060453023173 0ustar00collabora-develusers00000000000000 test-backdoors.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
test-backdoors.h
00001 
00023 #ifndef _TelepathyQt_test_backdoors_h_HEADER_GUARD_
00024 #define _TelepathyQt_test_backdoors_h_HEADER_GUARD_
00025 
00026 #ifdef IN_TP_QT_HEADER
00027 #error "This file is an internal header and should never be included by a public one"
00028 #endif
00029 
00030 #include <TelepathyQt/Global>
00031 #include <TelepathyQt/ConnectionCapabilities>
00032 #include <TelepathyQt/ContactCapabilities>
00033 
00034 #include <QString>
00035 
00036 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00037 
00038 namespace Tp
00039 {
00040 
00041 class DBusProxy;
00042 
00043 // Exported so the tests can use it even if they link dynamically
00044 // The header is not installed though, so this should be considered private API
00045 struct TP_QT_EXPORT TestBackdoors
00046 {
00047     static void invalidateProxy(DBusProxy *proxy, const QString &reason, const QString &message);
00048 
00049     static ConnectionCapabilities createConnectionCapabilities(
00050             const RequestableChannelClassSpecList &rccSpecs);
00051     static ContactCapabilities createContactCapabilities(
00052             const RequestableChannelClassSpecList &rccSpecs, bool specificToContact);
00053 };
00054 
00055 } // Tp
00056 
00057 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
00058 
00059 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01023.html0000644000175200001440000000430012000060453021610 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ServicePoint Member List
This is the complete list of members for Tp::ServicePoint, including all inherited members.
serviceTp::ServicePoint
servicePointTypeTp::ServicePoint


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00854.html0000644000175200001440000001727712000060453021644 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::FileTransferChannelCreationProperties Member List
This is the complete list of members for Tp::FileTransferChannelCreationProperties, including all inherited members.
contentHash() const Tp::FileTransferChannelCreationProperties
contentHashType() const Tp::FileTransferChannelCreationProperties
contentType() const Tp::FileTransferChannelCreationProperties
description() const Tp::FileTransferChannelCreationProperties
FileTransferChannelCreationProperties()Tp::FileTransferChannelCreationProperties
FileTransferChannelCreationProperties(const QString &suggestedFileName, const QString &contentType, qulonglong size)Tp::FileTransferChannelCreationProperties
FileTransferChannelCreationProperties(const QString &path, const QString &contentType)Tp::FileTransferChannelCreationProperties
FileTransferChannelCreationProperties(const FileTransferChannelCreationProperties &other)Tp::FileTransferChannelCreationProperties
hasContentHash() const Tp::FileTransferChannelCreationProperties
hasDescription() const Tp::FileTransferChannelCreationProperties
hasLastModificationTime() const Tp::FileTransferChannelCreationProperties
hasUri() const Tp::FileTransferChannelCreationProperties
isValid() const Tp::FileTransferChannelCreationProperties [inline]
lastModificationTime() const Tp::FileTransferChannelCreationProperties
operator=(const FileTransferChannelCreationProperties &other)Tp::FileTransferChannelCreationProperties
operator==(const FileTransferChannelCreationProperties &other) const Tp::FileTransferChannelCreationProperties
setContentHash(FileHashType contentHashType, const QString &contentHash)Tp::FileTransferChannelCreationProperties
setDescription(const QString &description)Tp::FileTransferChannelCreationProperties
setLastModificationTime(const QDateTime &lastModificationTime)Tp::FileTransferChannelCreationProperties
setUri(const QString &uri)Tp::FileTransferChannelCreationProperties
size() const Tp::FileTransferChannelCreationProperties
suggestedFileName() const Tp::FileTransferChannelCreationProperties
uri() const Tp::FileTransferChannelCreationProperties
~FileTransferChannelCreationProperties()Tp::FileTransferChannelCreationProperties


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00578_source.html0000644000175200001440000001405712000060453023220 0ustar00collabora-develusers00000000000000 fixed-feature-factory.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
fixed-feature-factory.h
00001 
00023 #ifndef _TelepathyQt_fixed_feature_factory_h_HEADER_GUARD_
00024 #define _TelepathyQt_fixed_feature_factory_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Global>
00031 #include <TelepathyQt/SharedPtr>
00032 
00033 #include <TelepathyQt/DBusProxyFactory>
00034 
00035 class QDBusConnection;
00036 
00037 namespace Tp
00038 {
00039 
00040 class Feature;
00041 class Features;
00042 
00043 class TP_QT_EXPORT FixedFeatureFactory : public DBusProxyFactory
00044 {
00045     Q_OBJECT
00046     Q_DISABLE_COPY(FixedFeatureFactory)
00047 
00048 public:
00049     virtual ~FixedFeatureFactory();
00050 
00051     Features features() const;
00052 
00053     void addFeature(const Feature &feature);
00054     void addFeatures(const Features &features);
00055 
00056 protected:
00057     FixedFeatureFactory(const QDBusConnection &bus);
00058 
00059     virtual Features featuresFor(const DBusProxyPtr &proxy) const;
00060 
00061 private:
00062     struct Private;
00063     friend struct Private;
00064     Private *mPriv;
00065 };
00066 
00067 } // Tp
00068 
00069 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00318.html0000644000175200001440000001441412000060453021625 0ustar00collabora-develusers00000000000000 Tp::PendingFailure Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingFailure Class Reference

The PendingFailure class represents a PendingOperation that always fails with the error passed to the constructor. More...

#include <TelepathyQt/PendingFailure>

Inherits Tp::PendingOperation.

List of all members.

Public Member Functions


Detailed Description

The PendingFailure class represents a PendingOperation that always fails with the error passed to the constructor.


Constructor & Destructor Documentation

Tp::PendingFailure::PendingFailure ( const QString &  name,
const QString &  message,
const SharedPtr< RefCounted > &  object 
) [inline]
Tp::PendingFailure::PendingFailure ( const QDBusError &  error,
const SharedPtr< RefCounted > &  object 
) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00086.html0000644000175200001440000006516012000060453021633 0ustar00collabora-develusers00000000000000 Tp::Client::CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface Class Reference

#include <TelepathyQt/CallContentMediaDescriptionInterface>

Inherits Tp::AbstractInterface.

List of all members.

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Call1.Content.MediaDescription.Interface.RTCPExtendedReports".


Constructor & Destructor Documentation

Creates a CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface::CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Call1.Content.MediaDescription.Interface.RTCPExtendedReports", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property LossRLEMaxSize of type uint.

If non-zero, enable Loss Run Length Encoded Report Blocks. The value of this integer represents the max-size of report blocks, as specified in RFC 3611 section 5.1. MAXUINT32 is used to indicate that there is no limit.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property DuplicateRLEMaxSize of type uint.

If non-zero, enable Duplicate Run-Length-Encoded Report Blocks. The value of this integer represents the max-size of report blocks, as specified in RFC 3611 section 5.1. MAXUINT32 is used to indicate that there is no limit.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property PacketReceiptTimesMaxSize of type uint.

If non-zero, enable Packet Receipt Times Report Blocks. The value of this integer represents the max-size of report blocks, as specified in RFC 3611 section 5.1. MAXUINT32 is used to indicate that there is no limit.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property DLRRMaxSize of type uint.

If non-zero, enable Receiver Reference Time and Delay since Last Receiver Report Blocks (for estimating Round Trip Times between non-senders and other parties in the call. The value of this integer represents the max-size of report blocks, as specified in RFC 3611 section 5.1. MAXUINT32 is used to indicate that there is no limit.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property RTTMode of type uint.

Who is allowed to send Delay since Last Receiver Reports.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property StatisticsFlags of type uint.

Which fields SHOULD be included in the statistics summary report blocks that are sent, and whether to send VoIP Metrics Report Blocks. There can be zero or more flags set.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property EnableMetrics of type bool.

Whether to enable VoIP Metrics Report Blocks. These blocks are of a fixed size.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
void Tp::Client::CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00522_source.html0000644000175200001440000002246112000060453023203 0ustar00collabora-develusers00000000000000 client-registrar.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
client-registrar.h
00001 
00023 #ifndef _TelepathyQt_client_registrar_h_HEADER_GUARD_
00024 #define _TelepathyQt_client_registrar_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/AccountFactory>
00031 #include <TelepathyQt/ChannelFactory>
00032 #include <TelepathyQt/ConnectionFactory>
00033 #include <TelepathyQt/ContactFactory>
00034 #include <TelepathyQt/Object>
00035 #include <TelepathyQt/Types>
00036 
00037 #include <QDBusConnection>
00038 #include <QString>
00039 
00040 namespace Tp
00041 {
00042 
00043 class TP_QT_EXPORT ClientRegistrar : public Object
00044 {
00045     Q_OBJECT
00046     Q_DISABLE_COPY(ClientRegistrar)
00047 
00048 public:
00049     static ClientRegistrarPtr create(const QDBusConnection &bus);
00050     static ClientRegistrarPtr create(
00051             const AccountFactoryConstPtr &accountFactory =
00052                 AccountFactory::create(QDBusConnection::sessionBus()),
00053             const ConnectionFactoryConstPtr &connectionFactory =
00054                 ConnectionFactory::create(QDBusConnection::sessionBus()),
00055             const ChannelFactoryConstPtr &channelFactory =
00056                 ChannelFactory::create(QDBusConnection::sessionBus()),
00057             const ContactFactoryConstPtr &contactFactory =
00058                 ContactFactory::create());
00059     static ClientRegistrarPtr create(const QDBusConnection &bus,
00060             const AccountFactoryConstPtr &accountFactory,
00061             const ConnectionFactoryConstPtr &connectionFactory,
00062             const ChannelFactoryConstPtr &channelFactory,
00063             const ContactFactoryConstPtr &contactFactory);
00064     static ClientRegistrarPtr create(const AccountManagerPtr &accountManager);
00065 
00066     ~ClientRegistrar();
00067 
00068     QDBusConnection dbusConnection() const;
00069 
00070     AccountFactoryConstPtr accountFactory() const;
00071     ConnectionFactoryConstPtr connectionFactory() const;
00072     ChannelFactoryConstPtr channelFactory() const;
00073     ContactFactoryConstPtr contactFactory() const;
00074 
00075     QList<AbstractClientPtr> registeredClients() const;
00076     bool registerClient(const AbstractClientPtr &client,
00077             const QString &clientName, bool unique = false);
00078     bool unregisterClient(const AbstractClientPtr &client);
00079     void unregisterClients();
00080 
00081 private:
00082     ClientRegistrar(const QDBusConnection &bus,
00083             const AccountFactoryConstPtr &accountFactory,
00084             const ConnectionFactoryConstPtr &connectionFactory,
00085             const ChannelFactoryConstPtr &channelFactory,
00086             const ContactFactoryConstPtr &contactFactory);
00087 
00088     struct Private;
00089     friend struct Private;
00090     Private *mPriv;
00091 
00092     static QHash<QPair<QString, QString>, ClientRegistrar *> registrarForConnection;
00093 };
00094 
00095 } // Tp
00096 
00097 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00021.html0000644000175200001440000000544112000060453021614 0ustar00collabora-develusers00000000000000 roster/roster-item.h
   Home · All Classes · All Namespaces · Modules · Functions · Files
roster/roster-item.h
#ifndef _TelepathyQt_examples_roster_roster_item_h_HEADER_GUARD_
#define _TelepathyQt_examples_roster_roster_item_h_HEADER_GUARD_

#include <TelepathyQt/Types>
#include <TelepathyQt/Contact>

#include <QListWidgetItem>
#include <QString>

class RosterItem : public QObject, public QListWidgetItem
{
    Q_OBJECT

public:
    RosterItem(const Tp::ContactPtr &contact,
            QListWidget *parent = 0);
    ~RosterItem();

    Tp::ContactPtr contact() const { return mContact; }

Q_SIGNALS:
    void changed();

private Q_SLOTS:
    void onContactChanged();

private:
    Tp::ContactPtr mContact;
};

#endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00517_source.html0000644000175200001440000001716212000060453023211 0ustar00collabora-develusers00000000000000 cli-properties-body.hpp Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
cli-properties-body.hpp
00001 #define IN_TP_QT_HEADER
00002 #include "TelepathyQt/properties.h"
00003 
00004 namespace Tp
00005 {
00006 namespace Client
00007 {
00008 
00009 PropertiesInterfaceInterface::PropertiesInterfaceInterface(const QString& busName, const QString& objectPath, QObject *parent)
00010     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent)
00011 {
00012 }
00013 
00014 PropertiesInterfaceInterface::PropertiesInterfaceInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent)
00015     : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent)
00016 {
00017 }
00018 
00019 PropertiesInterfaceInterface::PropertiesInterfaceInterface(Tp::DBusProxy *proxy)
00020     : Tp::AbstractInterface(proxy, staticInterfaceName())
00021 {
00022 }
00023 
00024 PropertiesInterfaceInterface::PropertiesInterfaceInterface(const Tp::AbstractInterface& mainInterface)
00025     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent())
00026 {
00027 }
00028 
00029 PropertiesInterfaceInterface::PropertiesInterfaceInterface(const Tp::AbstractInterface& mainInterface, QObject *parent)
00030     : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent)
00031 {
00032 }
00033 
00034 void PropertiesInterfaceInterface::invalidate(Tp::DBusProxy *proxy,
00035         const QString &error, const QString &message)
00036 {
00037     disconnect(this, SIGNAL(PropertiesChanged(const Tp::PropertyValueList&)), NULL, NULL);
00038     disconnect(this, SIGNAL(PropertyFlagsChanged(const Tp::PropertyFlagsChangeList&)), NULL, NULL);
00039 
00040     Tp::AbstractInterface::invalidate(proxy, error, message);
00041 }
00042 }
00043 }


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01063.html0000644000175200001440000001763412000060453021632 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::AccountInterfaceAddressingInterface Member List
This is the complete list of members for Tp::Client::AccountInterfaceAddressingInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
AccountInterfaceAddressingInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::AccountInterfaceAddressingInterface
AccountInterfaceAddressingInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::AccountInterfaceAddressingInterface
AccountInterfaceAddressingInterface(Tp::DBusProxy *proxy)Tp::Client::AccountInterfaceAddressingInterface
AccountInterfaceAddressingInterface(const Tp::Client::AccountInterface &mainInterface)Tp::Client::AccountInterfaceAddressingInterface [explicit]
AccountInterfaceAddressingInterface(const Tp::Client::AccountInterface &mainInterface, QObject *parent)Tp::Client::AccountInterfaceAddressingInterface
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::AccountInterfaceAddressingInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::AccountInterfaceAddressingInterface [inline]
requestPropertyURISchemes() const Tp::Client::AccountInterfaceAddressingInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
SetURISchemeAssociation(const QString &URIScheme, bool association, int timeout=-1)Tp::Client::AccountInterfaceAddressingInterface [inline, slot]
staticInterfaceName()Tp::Client::AccountInterfaceAddressingInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00037.html0000644000175200001440000011210412000060453021616 0ustar00collabora-develusers00000000000000 Tp::AbstractInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The AbstractInterface class is the base class for all client side D-Bus interfaces, allowing access to remote methods/properties/signals. More...

#include <TelepathyQt/AbstractInterface>

Inherited by Tp::Client::AccountInterface, Tp::Client::AccountInterfaceAddressingInterface, Tp::Client::AccountInterfaceAvatarInterface, Tp::Client::AccountInterfaceStorageInterface, Tp::Client::AccountManagerInterface, Tp::Client::AuthenticationTLSCertificateInterface, Tp::Client::CallContentInterface, Tp::Client::CallContentInterfaceAudioControlInterface, Tp::Client::CallContentInterfaceDTMFInterface, Tp::Client::CallContentInterfaceMediaInterface, Tp::Client::CallContentInterfaceVideoControlInterface, Tp::Client::CallContentMediaDescriptionInterface, Tp::Client::CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface, Tp::Client::CallContentMediaDescriptionInterfaceRTCPFeedbackInterface, Tp::Client::CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface, Tp::Client::CallStreamEndpointInterface, Tp::Client::CallStreamInterface, Tp::Client::CallStreamInterfaceMediaInterface, Tp::Client::ChannelDispatcherInterface, Tp::Client::ChannelDispatchOperationInterface, Tp::Client::ChannelInterface, Tp::Client::ChannelInterfaceAnonymityInterface, Tp::Client::ChannelInterfaceCallStateInterface, Tp::Client::ChannelInterfaceCaptchaAuthenticationInterface, Tp::Client::ChannelInterfaceChatStateInterface, Tp::Client::ChannelInterfaceConferenceInterface, Tp::Client::ChannelInterfaceDestroyableInterface, Tp::Client::ChannelInterfaceDTMFInterface, Tp::Client::ChannelInterfaceFileTransferMetadataInterface, Tp::Client::ChannelInterfaceGroupInterface, Tp::Client::ChannelInterfaceHoldInterface, Tp::Client::ChannelInterfaceMediaSignallingInterface, Tp::Client::ChannelInterfaceMessagesInterface, Tp::Client::ChannelInterfacePasswordInterface, Tp::Client::ChannelInterfaceSASLAuthenticationInterface, Tp::Client::ChannelInterfaceSecurableInterface, Tp::Client::ChannelInterfaceServicePointInterface, Tp::Client::ChannelInterfaceSMSInterface, Tp::Client::ChannelInterfaceTubeInterface, Tp::Client::ChannelRequestInterface, Tp::Client::ChannelTypeCallInterface, Tp::Client::ChannelTypeContactListInterface, Tp::Client::ChannelTypeContactSearchInterface, Tp::Client::ChannelTypeDBusTubeInterface, Tp::Client::ChannelTypeFileTransferInterface, Tp::Client::ChannelTypeRoomListInterface, Tp::Client::ChannelTypeServerAuthenticationInterface, Tp::Client::ChannelTypeServerTLSConnectionInterface, Tp::Client::ChannelTypeStreamedMediaInterface, Tp::Client::ChannelTypeStreamTubeInterface, Tp::Client::ChannelTypeTextInterface, Tp::Client::ChannelTypeTubesInterface, Tp::Client::ClientApproverInterface, Tp::Client::ClientHandlerInterface, Tp::Client::ClientInterface, Tp::Client::ClientInterfaceRequestsInterface, Tp::Client::ClientObserverInterface, Tp::Client::ConnectionInterface, Tp::Client::ConnectionInterfaceAddressingInterface, Tp::Client::ConnectionInterfaceAliasingInterface, Tp::Client::ConnectionInterfaceAnonymityInterface, Tp::Client::ConnectionInterfaceAvatarsInterface, Tp::Client::ConnectionInterfaceBalanceInterface, Tp::Client::ConnectionInterfaceCapabilitiesInterface, Tp::Client::ConnectionInterfaceCellularInterface, Tp::Client::ConnectionInterfaceClientTypesInterface, Tp::Client::ConnectionInterfaceContactBlockingInterface, Tp::Client::ConnectionInterfaceContactCapabilitiesInterface, Tp::Client::ConnectionInterfaceContactGroupsInterface, Tp::Client::ConnectionInterfaceContactInfoInterface, Tp::Client::ConnectionInterfaceContactListInterface, Tp::Client::ConnectionInterfaceContactsInterface, Tp::Client::ConnectionInterfaceLocationInterface, Tp::Client::ConnectionInterfaceMailNotificationInterface, Tp::Client::ConnectionInterfacePowerSavingInterface, Tp::Client::ConnectionInterfacePresenceInterface, Tp::Client::ConnectionInterfaceRequestsInterface, Tp::Client::ConnectionInterfaceServicePointInterface, Tp::Client::ConnectionInterfaceSimplePresenceInterface, Tp::Client::ConnectionManagerInterface, Tp::Client::DBus::DBusDaemonInterface, Tp::Client::DBus::IntrospectableInterface, Tp::Client::DBus::PeerInterface, Tp::Client::DBus::PropertiesInterface, Tp::Client::DebugInterface, Tp::Client::MediaSessionHandlerInterface, Tp::Client::MediaStreamHandlerInterface, Tp::Client::PropertiesInterfaceInterface, Tp::Client::ProtocolInterface, Tp::Client::ProtocolInterfaceAddressingInterface, Tp::Client::ProtocolInterfaceAvatarsInterface, and Tp::Client::ProtocolInterfacePresenceInterface.

List of all members.

Signals

  • void propertiesChanged (const QVariantMap &changedProperties, const QStringList &invalidatedProperties)

Public Member Functions

Protected Slots

Protected Member Functions


Detailed Description

The AbstractInterface class is the base class for all client side D-Bus interfaces, allowing access to remote methods/properties/signals.


Constructor & Destructor Documentation

Tp::AbstractInterface::AbstractInterface ( DBusProxy proxy,
const QLatin1String &  interface 
) [protected]
Tp::AbstractInterface::AbstractInterface ( const QString &  busName,
const QString &  path,
const QLatin1String &  interface,
const QDBusConnection &  connection,
QObject *  parent 
) [protected]

Member Function Documentation

void Tp::AbstractInterface::setMonitorProperties ( bool  monitorProperties)

Sets whether this abstract interface will be monitoring properties or not. If it's set to monitor, the signal propertiesChanged will be emitted whenever a property on this interface will change.

By default, AbstractInterface does not monitor properties: you need to call this method for this to happen.

Parameters:
monitorPropertiesWhether this interface should monitor property changes or not.
See also:
isMonitoringProperties propertiesChanged()

Return whether this abstract interface is monitoring properties or not. If it's monitoring, the signal propertiesChanged will be emitted whenever a property on this interface will change.

By default, AbstractInterface does not monitor properties: you need to call setMonitorProperties for this to happen.

Returns:
true if the interface is monitoring for property changes, false otherwise.
See also:
setMonitorProperties propertiesChanged()
void Tp::AbstractInterface::propertiesChanged ( const QVariantMap &  changedProperties,
const QStringList &  invalidatedProperties 
) [signal]

Emitted when one or more properties on this interface change or become invalidated. This signal will be emitted only if the interface is monitoring properties.

Parameters:
changedPropertiesA map of the changed properties with their new value, if any.
invalidatedPropertiesA list of the invalidated properties, if any.
See also:
isMonitoringProperties()
void Tp::AbstractInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual, slot]

Reimplemented in Tp::Client::ChannelTypeTubesInterface, Tp::Client::ChannelTypeTextInterface, Tp::Client::ChannelTypeStreamedMediaInterface, Tp::Client::ChannelTypeStreamTubeInterface, Tp::Client::ChannelTypeServerTLSConnectionInterface, Tp::Client::ChannelTypeServerAuthenticationInterface, Tp::Client::ChannelTypeRoomListInterface, Tp::Client::ChannelTypeFileTransferInterface, Tp::Client::ConnectionInterfaceSimplePresenceInterface, Tp::Client::ChannelTypeDBusTubeInterface, Tp::Client::ConnectionInterfaceServicePointInterface, Tp::Client::ConnectionInterfaceRequestsInterface, Tp::Client::ChannelTypeContactSearchInterface, Tp::Client::ConnectionInterfacePresenceInterface, Tp::Client::ChannelTypeContactListInterface, Tp::Client::ChannelTypeCallInterface, Tp::Client::ConnectionInterfacePowerSavingInterface, Tp::Client::ConnectionInterfaceMailNotificationInterface, Tp::Client::ConnectionInterfaceLocationInterface, Tp::Client::ChannelInterfaceTubeInterface, Tp::Client::ChannelInterfaceServicePointInterface, Tp::Client::ConnectionInterfaceContactsInterface, Tp::Client::ChannelInterfaceSecurableInterface, Tp::Client::ConnectionInterfaceContactListInterface, Tp::Client::ChannelInterfaceSMSInterface, Tp::Client::ChannelInterfaceSASLAuthenticationInterface, Tp::Client::ConnectionInterfaceContactInfoInterface, Tp::Client::ChannelInterfacePasswordInterface, Tp::Client::ConnectionInterfaceContactGroupsInterface, Tp::Client::ChannelInterfaceMessagesInterface, Tp::Client::ChannelInterfaceMediaSignallingInterface, Tp::Client::ConnectionInterfaceContactCapabilitiesInterface, Tp::Client::ChannelInterfaceHoldInterface, Tp::Client::ChannelInterfaceGroupInterface, Tp::Client::ConnectionInterfaceContactBlockingInterface, Tp::Client::ConnectionInterfaceClientTypesInterface, Tp::Client::ConnectionInterfaceCellularInterface, Tp::Client::ConnectionInterfaceCapabilitiesInterface, Tp::Client::ChannelInterfaceFileTransferMetadataInterface, Tp::Client::ChannelInterfaceDestroyableInterface, Tp::Client::ConnectionInterfaceBalanceInterface, Tp::Client::ChannelInterfaceDTMFInterface, Tp::Client::ConnectionInterfaceAvatarsInterface, Tp::Client::ChannelInterfaceConferenceInterface, Tp::Client::ConnectionInterfaceAnonymityInterface, Tp::Client::AccountInterfaceStorageInterface, Tp::Client::ProtocolInterfacePresenceInterface, Tp::Client::ConnectionInterfaceAliasingInterface, Tp::Client::ChannelInterfaceChatStateInterface, Tp::Client::ProtocolInterfaceAvatarsInterface, Tp::Client::AccountInterfaceAvatarInterface, Tp::Client::CallContentInterfaceVideoControlInterface, Tp::Client::ClientObserverInterface, Tp::Client::AccountInterfaceAddressingInterface, Tp::Client::ChannelInterfaceCaptchaAuthenticationInterface, Tp::Client::ProtocolInterfaceAddressingInterface, Tp::Client::ConnectionInterfaceAddressingInterface, Tp::Client::CallContentInterfaceMediaInterface, Tp::Client::AccountInterface, Tp::Client::CallStreamInterfaceMediaInterface, Tp::Client::ConnectionInterface, Tp::Client::MediaStreamHandlerInterface, Tp::Client::ClientInterfaceRequestsInterface, Tp::Client::DBus::PropertiesInterface, Tp::Client::ChannelInterfaceCallStateInterface, Tp::Client::ProtocolInterface, Tp::Client::ChannelInterfaceAnonymityInterface, Tp::Client::CallContentInterfaceDTMFInterface, Tp::Client::DBus::PeerInterface, Tp::Client::CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface, Tp::Client::ClientHandlerInterface, Tp::Client::ChannelDispatcherInterface, Tp::Client::CallContentMediaDescriptionInterfaceRTCPFeedbackInterface, Tp::Client::ChannelInterface, Tp::Client::DBus::IntrospectableInterface, Tp::Client::CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface, Tp::Client::DBus::DBusDaemonInterface, Tp::Client::CallStreamEndpointInterface, Tp::Client::ChannelRequestInterface, Tp::Client::CallContentInterfaceAudioControlInterface, Tp::Client::ChannelDispatchOperationInterface, Tp::Client::CallStreamInterface, Tp::Client::ClientApproverInterface, Tp::Client::ConnectionManagerInterface, Tp::Client::AccountManagerInterface, Tp::Client::CallContentMediaDescriptionInterface, Tp::Client::AuthenticationTLSCertificateInterface, Tp::Client::PropertiesInterfaceInterface, Tp::Client::CallContentInterface, Tp::Client::DebugInterface, Tp::Client::MediaSessionHandlerInterface, and Tp::Client::ClientInterface.

PendingVariant * Tp::AbstractInterface::internalRequestProperty ( const QString &  name) const [protected]
PendingOperation * Tp::AbstractInterface::internalSetProperty ( const QString &  name,
const QVariant &  newValue 
) [protected]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01032.html0000644000175200001440000000432212000060453021614 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::StreamCredentials Member List
This is the complete list of members for Tp::StreamCredentials, including all inherited members.
passwordTp::StreamCredentials
usernameTp::StreamCredentials


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_func.html0000644000175200001440000006352512000060453024043 0ustar00collabora-develusers00000000000000 Class Members - Functions
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- a -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00224.html0000644000175200001440000003122212000060453021615 0ustar00collabora-develusers00000000000000 Tp::DebugReceiver Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The DebugReceiver class provides a D-Bus proxy for a Telepathy Debug object. More...

#include <TelepathyQt/DebugReceiver>

Inherits Tp::StatefulDBusProxy.

List of all members.

Signals

Public Member Functions

Static Public Member Functions

  • static DebugReceiverPtr create (const QString &busName, const QDBusConnection &bus=QDBusConnection::sessionBus())

Static Public Attributes

Protected Member Functions


Detailed Description

The DebugReceiver class provides a D-Bus proxy for a Telepathy Debug object.

A Debug object provides debugging messages from services.


Constructor & Destructor Documentation

Tp::DebugReceiver::DebugReceiver ( const QDBusConnection &  bus,
const QString &  busName 
) [protected]

Member Function Documentation

DebugReceiverPtr Tp::DebugReceiver::create ( const QString &  busName,
const QDBusConnection &  bus = QDBusConnection::sessionBus() 
) [static]

Retrieves buffered debug messages.

This method returns a list of buffered debug messages. Depending on the service side implementation, this may not be the entire list of all messages received during the service's lifetime. Use monitoring instead for getting all the messages being streamed in realtime.

Returns:
A pending operation returning a list of buffered debug messages when finished.
See also:
setMonitoringEnabled

Enables or disables the emission of newDebugMessage.

This function either enables or disables the emission of newDebugMessage. If monitoring is enabled, everytime a message will be received, newDebugMessage will be emitted carrying the new message.

Monitoring should be disabled when not needed, as it generates a high amount of traffic on the bus. It is always disabled by default.

This method requires FeatureCore to be enabled.

Parameters:
enabledWhether to enable or disable monitoring.
Returns:
A pending operation returning whether the operation succeeded or not.
See also:
newDebugMessage
void Tp::DebugReceiver::newDebugMessage ( const Tp::DebugMessage msg) [signal]

Emitted whenever a new debug message is available. This will be emitted only if monitoring has been previously enabled.

Parameters:
msgThe new debug message.
See also:
setMonitoringEnabled

Member Data Documentation

Feature representing the core that needs to become ready to make the DebugReceiver object usable.

Note that this feature must be enabled in order to use most DebugReceiver methods. See specific methods documentation for more details.

When calling isReady(), becomeReady(), this feature is implicitly added to the requested features.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00618_source.html0000644000175200001440000003057412000060453023215 0ustar00collabora-develusers00000000000000 optional-interface-factory.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
optional-interface-factory.h
00001 
00023 #ifndef _TelepathyQt_optional_interface_factory_h_HEADER_GUARD_
00024 #define _TelepathyQt_optional_interface_factory_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Global>
00031 
00032 #include <QObject>
00033 #include <QStringList>
00034 #include <QtGlobal>
00035 
00036 namespace Tp
00037 {
00038 
00039 class AbstractInterface;
00040 
00041 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00042 
00043 class TP_QT_EXPORT OptionalInterfaceCache
00044 {
00045     Q_DISABLE_COPY(OptionalInterfaceCache)
00046 
00047 public:
00048     explicit OptionalInterfaceCache(QObject *proxy);
00049 
00050     ~OptionalInterfaceCache();
00051 
00052 protected:
00053     AbstractInterface *getCached(const QString &name) const;
00054     void cache(AbstractInterface *interface) const;
00055     QObject *proxy() const;
00056 
00057 private:
00058     struct Private;
00059     friend struct Private;
00060     Private *mPriv;
00061 };
00062 
00063 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
00064 
00065 template <typename DBusProxySubclass> class OptionalInterfaceFactory
00066 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00067     : private OptionalInterfaceCache
00068 #endif
00069 {
00070     Q_DISABLE_COPY(OptionalInterfaceFactory)
00071 
00072 public:
00073     enum InterfaceSupportedChecking
00074     {
00075         CheckInterfaceSupported,
00076         BypassInterfaceCheck
00077     };
00078 
00079     inline OptionalInterfaceFactory(DBusProxySubclass *this_)
00080         : OptionalInterfaceCache(this_)
00081     {
00082     }
00083 
00084     inline ~OptionalInterfaceFactory()
00085     {
00086     }
00087 
00088     inline QStringList interfaces() const { return mInterfaces; }
00089 
00090     inline bool hasInterface(const QString &name) const
00091     {
00092         return mInterfaces.contains(name);
00093     }
00094 
00095     template <class Interface>
00096     inline Interface *optionalInterface(
00097             InterfaceSupportedChecking check = CheckInterfaceSupported) const
00098     {
00099         // Check for the remote object supporting the interface
00100         // Note that extra whitespace on "name" declaration is significant to avoid
00101         // vexing-parse
00102         QString name( (QLatin1String(Interface::staticInterfaceName())) );
00103         if (check == CheckInterfaceSupported && !mInterfaces.contains(name)) {
00104             return 0;
00105         }
00106 
00107         // If present or forced, delegate to OptionalInterfaceFactory
00108         return interface<Interface>();
00109     }
00110 
00111     template <typename Interface>
00112     inline Interface *interface() const
00113     {
00114         AbstractInterface* interfaceMustBeASubclassOfAbstractInterface = static_cast<Interface *>(NULL);
00115         Q_UNUSED(interfaceMustBeASubclassOfAbstractInterface);
00116 
00117         // If there is a interface cached already, return it
00118         // Note that extra whitespace on "name" declaration is significant to avoid
00119         // vexing-parse
00120         QString name( (QLatin1String(Interface::staticInterfaceName())) );
00121         AbstractInterface *cached = getCached(name);
00122         if (cached)
00123             return static_cast<Interface *>(cached);
00124 
00125         // Otherwise, cache and return a newly constructed proxy
00126         Interface *interface = new Interface(
00127                 static_cast<DBusProxySubclass *>(proxy()));
00128         cache(interface);
00129         return interface;
00130     }
00131 
00132 protected:
00133     inline void setInterfaces(const QStringList &interfaces)
00134     {
00135         mInterfaces = interfaces;
00136     }
00137 
00138 private:
00139     QStringList mInterfaces;
00140 };
00141 
00142 } // Tp
00143 
00144 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00559_source.html0000644000175200001440000002132412000060453023212 0ustar00collabora-develusers00000000000000 dbus-service.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
dbus-service.h
00001 
00023 #ifndef _TelepathyQt_dbus_service_h_HEADER_GUARD_
00024 #define _TelepathyQt_dbus_service_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/DBusError>
00031 #include <TelepathyQt/Global>
00032 #include <TelepathyQt/Object>
00033 #include <TelepathyQt/ServiceTypes>
00034 
00035 #include <QObject>
00036 #include <QVariantMap>
00037 
00038 class QDBusConnection;
00039 class QString;
00040 
00041 namespace Tp
00042 {
00043 
00044 class DBusObject;
00045 
00046 class TP_QT_EXPORT DBusService : public Object
00047 {
00048     Q_OBJECT
00049     Q_DISABLE_COPY(DBusService)
00050 
00051 public:
00052     DBusService(const QDBusConnection &dbusConnection);
00053     virtual ~DBusService();
00054 
00055     virtual QVariantMap immutableProperties() const = 0;
00056 
00057     QDBusConnection dbusConnection() const;
00058     QString busName() const;
00059     QString objectPath() const;
00060     DBusObject *dbusObject() const;
00061     bool isRegistered() const;
00062 
00063 protected:
00064     virtual bool registerObject(const QString &busName, const QString &objectPath,
00065             DBusError *error);
00066 
00067 private:
00068     class Private;
00069     friend class Private;
00070     Private *mPriv;
00071 };
00072 
00073 class TP_QT_EXPORT AbstractDBusServiceInterface : public Object
00074 {
00075     Q_OBJECT
00076     Q_DISABLE_COPY(AbstractDBusServiceInterface)
00077 
00078 public:
00079     AbstractDBusServiceInterface(const QString &interfaceName);
00080     virtual ~AbstractDBusServiceInterface();
00081 
00082     QString interfaceName() const;
00083 
00084     virtual QVariantMap immutableProperties() const = 0;
00085 
00086     DBusObject *dbusObject() const;
00087     bool isRegistered() const;
00088 
00089 protected:
00090     virtual bool registerInterface(DBusObject *dbusObject);
00091     virtual void createAdaptor() = 0;
00092 
00093 private:
00094     class Private;
00095     friend class Private;
00096     Private *mPriv;
00097 };
00098 
00099 }
00100 
00101 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_0x6d.html0000644000175200001440000002734712000060453023673 0ustar00collabora-develusers00000000000000 Class Members
   Home · All Classes · All Namespaces · Modules · Functions · Files
Here is a list of all class members with links to the classes they belong to:

- m -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00764.html0000644000175200001440000001002612000060453021625 0ustar00collabora-develusers00000000000000 Todo List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Todo List
Member Tp::Channel::create (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties)
immutableProperties should be used to populate the corresponding accessors (such as channelType()) already on construction, not only when making FeatureCore ready (fd.o #41654)
Member Tp::DBusProxyFactory::initialPrepare (const DBusProxyPtr &proxy) const
FIXME actually implement this... :) Currently just a vtable placeholder.
Member Tp::DBusProxyFactory::readyPrepare (const DBusProxyPtr &proxy) const
FIXME actually implement this... :) Currently just a vtable placeholder.
Member Tp::Object::notify (const char *propertyName)
Use for more classes beyond Account. Most importantly Contact.
Class Tp::StreamTubeClient
Coin up a small Python script or alike to easily generate the .client and .service files. (fd.o #41614)
Member Tp::StreamTubeClient::setToAcceptAsTcp (TcpSourceAddressGenerator *generator=0)
Make it possible to set the tube client to auto-close tubes if the desired access control level is not achieved, as an alternative to the current best-effort behavior.
Member Tp::StreamTubeClient::setToAcceptAsUnix (bool requireCredentials=false)
Make it possible to set the tube client to auto-close tubes if the desired access control level is not achieved, as an alternative to the current best-effort behavior.
Class Tp::StreamTubeServer

Coin up a small Python script or alike to easily generate the .client and .service files. (fd.o #41614)

Support exporting Unix sockets as well. (fd.o #41615)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01092.html0000644000175200001440000001777312000060453021640 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelInterfaceMediaSignallingInterface Member List
This is the complete list of members for Tp::Client::ChannelInterfaceMediaSignallingInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ChannelInterfaceMediaSignallingInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfaceMediaSignallingInterface
ChannelInterfaceMediaSignallingInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfaceMediaSignallingInterface
ChannelInterfaceMediaSignallingInterface(Tp::DBusProxy *proxy)Tp::Client::ChannelInterfaceMediaSignallingInterface
ChannelInterfaceMediaSignallingInterface(const Tp::Client::ChannelInterface &mainInterface)Tp::Client::ChannelInterfaceMediaSignallingInterface [explicit]
ChannelInterfaceMediaSignallingInterface(const Tp::Client::ChannelInterface &mainInterface, QObject *parent)Tp::Client::ChannelInterfaceMediaSignallingInterface
GetSessionHandlers(int timeout=-1)Tp::Client::ChannelInterfaceMediaSignallingInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ChannelInterfaceMediaSignallingInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
NewSessionHandler(const QDBusObjectPath &sessionHandler, const QString &sessionType)Tp::Client::ChannelInterfaceMediaSignallingInterface [signal]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ChannelInterfaceMediaSignallingInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ChannelInterfaceMediaSignallingInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00738.html0000644000175200001440000000436712000060453021641 0ustar00collabora-develusers00000000000000 Account manager proxies
   Home · All Classes · All Namespaces · Modules · Functions · Files
Account manager proxies

Classes


Detailed Description

Proxy objects representing remote Telepathy account manager objects and their optional interfaces.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00377.html0000644000175200001440000000730312000060453021631 0ustar00collabora-develusers00000000000000 Tp::ServicePoint Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ServicePoint Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

A service point.


Member Data Documentation

The service type.

String representation of the service point. The representation is service specific; it may be a 'service' Uniform Resource Name as specified by RFC 5031, or may be in some other form. Empty, unused or unknown value is represented by "".


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01060.html0000644000175200001440000000505112000060453021615 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::StatusSpecMap Member List
This is the complete list of members for Tp::StatusSpecMap, including all inherited members.
operator=(const QMap< QString, StatusSpec > &a)Tp::StatusSpecMap [inline]
StatusSpecMap()Tp::StatusSpecMap [inline]
StatusSpecMap(const QMap< QString, StatusSpec > &a)Tp::StatusSpecMap [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00013.html0000644000175200001440000000503212000060453021611 0ustar00collabora-develusers00000000000000 protocols/main.cpp
   Home · All Classes · All Namespaces · Modules · Functions · Files
protocols/main.cpp
#include <TelepathyQt/Debug>
#include <TelepathyQt/Constants>
#include <TelepathyQt/Types>

#include <QDebug>
#include <QtCore>

#include "protocols.h"

int main(int argc, char **argv)
{
    QCoreApplication app(argc, argv);

    Tp::registerTypes();
    Tp::enableDebug(false);
    Tp::enableWarnings(false);

    Protocols protocols;

    return app.exec();
}


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00041.html0000644000175200001440000000521112000060453021611 0ustar00collabora-develusers00000000000000 Tp::AccountCapabilityFilter Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AccountCapabilityFilter Class Reference

The AccountCapabilityFilter class provides a filter object to be used to filter accounts by capabilities. More...

#include <TelepathyQt/AccountCapabilityFilter>


Detailed Description

The AccountCapabilityFilter class provides a filter object to be used to filter accounts by capabilities.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01114.html0000644000175200001440000002115212000060453021615 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ClientHandlerInterface Member List
This is the complete list of members for Tp::Client::ClientHandlerInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ClientHandlerInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ClientHandlerInterface
ClientHandlerInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ClientHandlerInterface
ClientHandlerInterface(Tp::DBusProxy *proxy)Tp::Client::ClientHandlerInterface
ClientHandlerInterface(const Tp::Client::ClientInterface &mainInterface)Tp::Client::ClientHandlerInterface [explicit]
ClientHandlerInterface(const Tp::Client::ClientInterface &mainInterface, QObject *parent)Tp::Client::ClientHandlerInterface
HandleChannels(const QDBusObjectPath &account, const QDBusObjectPath &connection, const Tp::ChannelDetailsList &channels, const Tp::ObjectPathList &requestsSatisfied, qulonglong userActionTime, const QVariantMap &handlerInfo, int timeout=-1)Tp::Client::ClientHandlerInterface [inline, slot]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ClientHandlerInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ClientHandlerInterface [inline]
requestPropertyBypassApproval() const Tp::Client::ClientHandlerInterface [inline]
requestPropertyCapabilities() const Tp::Client::ClientHandlerInterface [inline]
requestPropertyHandledChannels() const Tp::Client::ClientHandlerInterface [inline]
requestPropertyHandlerChannelFilter() const Tp::Client::ClientHandlerInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ClientHandlerInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00886.html0000644000175200001440000001251212000060453021634 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MethodInvocationContext< T1, T2, T3, T4, T5, T6, T7, T8 > Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00409.html0000644000175200001440000001422412000060453021625 0ustar00collabora-develusers00000000000000 Tp::TLSCertificateRejection Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::TLSCertificateRejection Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Attributes


Detailed Description

Structure type generated from the specification.

Struct representing one reason why a TLS certificate was rejected.

Since there can be multiple things wrong with a TLS certificate, arrays of this type are used to represent lists of reasons for rejection. In that case, the most important reason SHOULD be placed first in the list.


Member Data Documentation

The value of the TLS_Certificate_Reject_Reason enumeration for this certificate rejection.

Clients that do not understand the Error member, which may be implementation-specific, can use this property to classify rejection reasons into common categories.

The DBus error name for this certificate rejection.

This MAY correspond to the value of the Reason member, or MAY be a more specific D-Bus error name, perhaps implementation-specific.

Additional information about why the certificate was rejected. This MAY also include one or more of the following well-known keys:

user-requested (b)
True if the error was due to an user-requested rejection of the certificate; False if there was an unrecoverable error in the verification process.
expected-hostname (s)
If the rejection reason is Hostname_Mismatch, the hostname that the server certificate was expected to have.
certificate-hostname (s)
If the rejection reason is Hostname_Mismatch, the hostname of the certificate that was presented.

For instance, if you try to connect to gmail.com but are presented with a TLS certificate issued to evil.example.org, the error details for Hostname_Mismatch MAY include:

       {
         'expected-hostname': 'gmail.com',
         'certificate-hostname': 'evil.example.org',
       }
     
debug-message (s)
Debugging information on the error, corresponding to the message part of a D-Bus error message, which SHOULD NOT be displayed to users under normal circumstances


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00104.html0000644000175200001440000007422212000060453021621 0ustar00collabora-develusers00000000000000 Tp::CaptchaAuthentication Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::CaptchaAuthentication Class Reference

The CaptchaAuthentication class exposes CaptchaAuthentication's features for channels implementing it. More...

#include <TelepathyQt/CaptchaAuthentication>

Inherits Tp::Object.

List of all members.

Public Types

Public Slots

Signals

Public Member Functions


Detailed Description

The CaptchaAuthentication class exposes CaptchaAuthentication's features for channels implementing it.

A ServerAuthentication channel can implement a CaptchaAuthentication interface: this class exposes all the features this interface provides in a high-level fashion. It is a mechanism for retrieving a captcha challenge from a connection manager and answering it.

This class is meant to be used just during authentication phase. It is useful just for platform-level handlers which are meant to handle authentication - if you are implementing a client which is meant to live in a Telepathy-aware platform, you probably won't need to handle this unless you have very special needs.

Note that CaptchaAuthentication cannot be instantiated directly, instead the accessor method from ServerAuthenticationChannel (ServerAuthenticationChannel::captchaAuthentication) should be used.

See Asynchronous Object Model, Shared Pointer Usage


Member Enumeration Documentation

Enumerator:
NoChallenge 
OCRChallenge 
AudioRecognitionChallenge 
PictureQuestionChallenge 
PictureRecognitionChallenge 
TextQuestionChallenge 
SpeechQuestionChallenge 
SpeechRecognitionChallenge 
VideoQuestionChallenge 
VideoRecognitionChallenge 
UnknownChallenge 

Constructor & Destructor Documentation

Class destructor.


Member Function Documentation

Tp::ChannelPtr Tp::CaptchaAuthentication::channel ( ) const

Return the channel associated with this captcha.

CaptchaAuthentication is just a representation of an interface which can be implemented by a ServerAuthentication channel. This function will return the channel implementing the interface represented by this instance.

Note that it is currently guaranteed the ChannelPtr returned by this function will be a ServerAuthenticationChannel.

Returns:
The channel implementing the CaptchaAuthentication interface represented by this instance.

Return whether this channel supports updating its captchas or not.

Some protocols allow their captchas to be reloaded providing new data to the user; for example, in case the image provided is not easily readable. This function checks if this instance supports such a feature.

Note that in case this function returns true, requestCaptchas can be called safely after a failed answer attempt.

Returns:
true if a new captcha can be fetched from this channel, false otherwise.

Return the current status of the captcha.

Returns:
The current status of the captcha.

Return the code of the last error happened on the interface.

Returns:
An error code describing the last error occurred.
See also:
errorDetails

Return the details of the last error happened on the interface.

Returns:
Further details describing the last error occurred.
See also:
error
PendingCaptchas * Tp::CaptchaAuthentication::requestCaptchas ( const QStringList &  preferredMimeTypes = QStringList(),
ChallengeTypes  preferredTypes = ~ChallengeTypes(NoChallenge) 
)

Request captcha challenges from the connection manager.

Even if most protocols usually provide a single captcha challenge (OCR), for a variety of reasons some of them could provide a number of different challenge types, requiring one or more of them to be answered.

This method initiates a request to the connection manager for obtaining the most compatible captcha challenges available. It allows to supply a number of supported mimetypes and types, so that the request will fail if the CM is unable to provide a challenge compatible with what the handler supports, or will provide the best one available otherwise.

Please note that all the challenges returned by this request must be answered in order for the authentication to succeed.

Note that if the CM supports retrying the captcha, this function can also be used to load a new set of captchas. In general, if canRetry returns true, one can expect this function to always return a different set of challenges which invalidates any other obtained previously.

Parameters:
preferredMimeTypesA list of mimetypes supported by the handler, or an empty list if every mimetype can be supported.
preferredTypesA list of challenge types supported by the handler.
Returns:
A PendingCaptchas which will emit PendingCaptchas::finished when the request has been completed and all the payloads have been downloaded.
See also:
canRetry
cancel
answer
Tp::PendingOperation * Tp::CaptchaAuthentication::answer ( uint  id,
const QString &  response 
)

Overloaded function. Convenience method when just a single captcha requires to be answered.

Note that you need to answer only the last set of challenges returned, in case requestCaptchas was invoked multiple times.

Please note that if this operation succeeds, the channel will be closed right after.

Parameters:
idThe id of the challenge being answered.
responseThe answer of this challenge.
Returns:
A PendingOperation which will emit PendingOperation::finished upon the outcome of the answer procedure. Upon success, the operation will complete once the channel is closed.
See also:
requestCaptchas
answer

Answer a set of challenges.

Challenges obtained with requestCaptchas should be answered using this method. Note that every challenge returned by the last invocation of requestCaptchas must be answered in order for the operation to succeed.

Usually, most protocols will require just a single challenge to be answered: if that is the case, you can use the convenience overload.

Note that you need to answer only the last set of challenges returned, in case requestCaptchas was invoked multiple times.

Please note that if this operation succeeds, the channel will be closed right after.

Parameters:
responseA set of answers mapped by their id to the challenges obtained previously
Returns:
A PendingOperation which will emit PendingOperation::finished upon the outcome of the answer procedure. Upon success, the operation will complete once the channel is closed.
See also:
requestCaptchas
answer

Emitted when the value of status() changes.

See also:
status The new status of this CaptchaAuthentication.
Tp::PendingOperation * Tp::CaptchaAuthentication::cancel ( Tp::CaptchaCancelReason  reason,
const QString &  message = QString() 
) [slot]

Cancel the current challenge.

Please note that if this operation succeeds, the channel will be closed right after.

Note that this function has not the same semantics as retry. The status of the CaptchaAuthentication will change to Failed even if the channel supports retrying. This function should be called only if the user refuses to answer any challenge. Instead, if the user wishes to retry, you should just call requestCaptchas one more time.

Parameters:
reasonThe reason why the challenge has been cancelled.
messageA message detailing the cancel reason.
Returns:
A PendingOperation which will emit PendingOperation::finished upon the outcome of the cancel procedure. Upon success, the operation will complete once the channel is closed.
See also:
requestCaptchas


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00776.html0000644000175200001440000001216012000060453021631 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::AbstractInterface Member List
This is the complete list of members for Tp::AbstractInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *proxy, const QString &error, const QString &message)Tp::AbstractInterface [protected, virtual, slot]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00017.html0000644000175200001440000000577612000060453021634 0ustar00collabora-develusers00000000000000 protocols/protocols.h
   Home · All Classes · All Namespaces · Modules · Functions · Files
protocols/protocols.h
#ifndef _TelepathyQt_examples_protocols_protocols_h_HEADER_GUARD_
#define _TelepathyQt_examples_protocols_protocols_h_HEADER_GUARD_

#include <TelepathyQt/Types>

#include "cm-wrapper.h"

#include <QList>
#include <QObject>

using namespace Tp;

namespace Tp
{
class PendingOperation;
}

class Protocols : public QObject
{
    Q_OBJECT

public:
   Protocols();
   ~Protocols();

private Q_SLOTS:
    void onListNamesFinished(Tp::PendingOperation *op);
    void onCMWrapperFinished();

private:
    QList<CMWrapper *> mCMWrappers;
    int cmWrappersFinished;
};

#endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01113.html0000644000175200001440000001742712000060453021626 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ClientApproverInterface Member List
This is the complete list of members for Tp::Client::ClientApproverInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
AddDispatchOperation(const Tp::ChannelDetailsList &channels, const QDBusObjectPath &dispatchOperation, const QVariantMap &properties, int timeout=-1)Tp::Client::ClientApproverInterface [inline, slot]
ClientApproverInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ClientApproverInterface
ClientApproverInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ClientApproverInterface
ClientApproverInterface(Tp::DBusProxy *proxy)Tp::Client::ClientApproverInterface
ClientApproverInterface(const Tp::Client::ClientInterface &mainInterface)Tp::Client::ClientApproverInterface [explicit]
ClientApproverInterface(const Tp::Client::ClientInterface &mainInterface, QObject *parent)Tp::Client::ClientApproverInterface
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ClientApproverInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ClientApproverInterface [inline]
requestPropertyApproverChannelFilter() const Tp::Client::ClientApproverInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ClientApproverInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01066.html0000644000175200001440000002161512000060453021627 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::CallContentMediaDescriptionInterface Member List
This is the complete list of members for Tp::Client::CallContentMediaDescriptionInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
Accept(const QVariantMap &localMediaDescription, int timeout=-1)Tp::Client::CallContentMediaDescriptionInterface [inline, slot]
CallContentMediaDescriptionInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::CallContentMediaDescriptionInterface
CallContentMediaDescriptionInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::CallContentMediaDescriptionInterface
CallContentMediaDescriptionInterface(Tp::DBusProxy *proxy)Tp::Client::CallContentMediaDescriptionInterface
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::CallContentMediaDescriptionInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
Reject(const Tp::CallStateReason &reason, int timeout=-1)Tp::Client::CallContentMediaDescriptionInterface [inline, slot]
requestAllProperties() const Tp::Client::CallContentMediaDescriptionInterface [inline]
requestPropertyCodecs() const Tp::Client::CallContentMediaDescriptionInterface [inline]
requestPropertyFurtherNegotiationRequired() const Tp::Client::CallContentMediaDescriptionInterface [inline]
requestPropertyHasRemoteInformation() const Tp::Client::CallContentMediaDescriptionInterface [inline]
requestPropertyInterfaces() const Tp::Client::CallContentMediaDescriptionInterface [inline]
requestPropertyRemoteContact() const Tp::Client::CallContentMediaDescriptionInterface [inline]
requestPropertySSRCs() const Tp::Client::CallContentMediaDescriptionInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::CallContentMediaDescriptionInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00859.html0000644000175200001440000000621612000060453021640 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::MemberFunctor0< R, T > Member List


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00457_source.html0000644000175200001440000002457512000060453023222 0ustar00collabora-develusers00000000000000 call-stream.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
call-stream.h
00001 
00023 #ifndef _TelepathyQt_call_stream_h_HEADER_GUARD_
00024 #define _TelepathyQt_call_stream_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/_gen/cli-call-stream.h>
00031 
00032 #include <TelepathyQt/Constants>
00033 #include <TelepathyQt/DBusProxy>
00034 #include <TelepathyQt/OptionalInterfaceFactory>
00035 #include <TelepathyQt/PendingOperation>
00036 #include <TelepathyQt/Types>
00037 #include <TelepathyQt/SharedPtr>
00038 
00039 namespace Tp
00040 {
00041 
00042 typedef QList<CallStreamPtr> CallStreams;
00043 
00044 class TP_QT_EXPORT CallStream : public StatefulDBusProxy,
00045                     public OptionalInterfaceFactory<CallStream>
00046 {
00047     Q_OBJECT
00048     Q_DISABLE_COPY(CallStream)
00049 
00050 public:
00051     ~CallStream();
00052 
00053     CallContentPtr content() const;
00054 
00055     Contacts remoteMembers() const;
00056     bool canRequestReceiving() const;
00057 
00058     SendingState localSendingState() const;
00059     SendingState remoteSendingState(const ContactPtr &contact) const;
00060 
00061     PendingOperation *requestSending(bool send);
00062     PendingOperation *requestReceiving(const ContactPtr &contact, bool receive);
00063 
00064 Q_SIGNALS:
00065     void localSendingStateChanged(Tp::SendingState localSendingState,
00066             const Tp::CallStateReason &reason);
00067     void remoteSendingStateChanged(
00068             const QHash<Tp::ContactPtr, Tp::SendingState> &remoteSendingStates,
00069             const Tp::CallStateReason &reason);
00070     void remoteMembersRemoved(const Tp::Contacts &remoteMembers,
00071             const Tp::CallStateReason &reason);
00072 
00073 private Q_SLOTS:
00074     TP_QT_NO_EXPORT void gotMainProperties(Tp::PendingOperation *op);
00075     TP_QT_NO_EXPORT void gotRemoteMembersContacts(Tp::PendingOperation *op);
00076 
00077     TP_QT_NO_EXPORT void onRemoteMembersChanged(const Tp::ContactSendingStateMap &updates,
00078             const Tp::HandleIdentifierMap &identifiers,
00079             const Tp::UIntList &removed,
00080             const Tp::CallStateReason &reason);
00081     TP_QT_NO_EXPORT void onLocalSendingStateChanged(uint, const Tp::CallStateReason &reason);
00082 
00083 private:
00084     friend class CallChannel;
00085     friend class CallContent;
00086 
00087     TP_QT_NO_EXPORT static const Feature FeatureCore;
00088 
00089     TP_QT_NO_EXPORT CallStream(const CallContentPtr &content, const QDBusObjectPath &streamPath);
00090 
00091     struct Private;
00092     friend struct Private;
00093     Private *mPriv;
00094 };
00095 
00096 } // Tp
00097 
00098 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00399.html0000644000175200001440000015563612000060453021652 0ustar00collabora-develusers00000000000000 Tp::StreamedMediaChannel Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The StreamedMediaChannel class represents a Telepathy channel of type StreamedMedia. More...

#include <TelepathyQt/StreamedMediaChannel>

Inherits Tp::Channel.

List of all members.

Public Types

Signals

Public Member Functions

Static Public Member Functions

Static Public Attributes

Protected Member Functions


Detailed Description

The StreamedMediaChannel class represents a Telepathy channel of type StreamedMedia.

For more details, please refer to Telepathy specification.

See Asynchronous Object Model, Shared Pointer Usage


Member Enumeration Documentation

Enumerator:
StateChangeReasonUnknown 
StateChangeReasonUserRequested 

Constructor & Destructor Documentation

Class destructor.

Tp::StreamedMediaChannel::StreamedMediaChannel ( const ConnectionPtr &  connection,
const QString &  objectPath,
const QVariantMap &  immutableProperties,
const Feature coreFeature = StreamedMediaChannel::FeatureCore 
) [protected]

Construct a new StreamedMediaChannel object.

Parameters:
connectionConnection owning this channel, and specifying the service.
objectPathThe channel object path.
immutablePropertiesThe channel immutable properties.
coreFeatureThe core feature of the channel type, if any. The corresponding introspectable should depend on StreamedMediaChannel::FeatureCore.

Member Function Documentation

StreamedMediaChannelPtr Tp::StreamedMediaChannel::create ( const ConnectionPtr &  connection,
const QString &  objectPath,
const QVariantMap &  immutableProperties 
) [static]

Create a new StreamedMediaChannel object.

Parameters:
connectionConnection owning this channel, and specifying the service.
objectPathThe channel object path.
immutablePropertiesThe channel immutable properties.
Returns:
A StreamedMediaChannelPtr object pointing to the newly created StreamedMediaChannel object.

Reimplemented from Tp::Channel.

Return whether this channel is awaiting local answer.

This method requires StreamedMediaChannel::FeatureCore to be ready.

Returns:
true if awaiting local answer, false otherwise.
See also:
awaitingRemoteAnswer(), acceptCall()

Return whether this channel is awaiting remote answer.

This method requires StreamedMediaChannel::FeatureCore to be ready.

Returns:
true if awaiting remote answer, false otherwise.
See also:
awaitingLocalAnswer()

Accept an incoming call.

This method requires StreamedMediaChannel::FeatureCore to be ready.

Returns:
A PendingOperation which will emit PendingOperation::finished when the call has finished.
See also:
awaitingLocalAnswer(), hangupCall()

Request that the call is ended.

This method requires StreamedMediaChannel::FeatureCore to be ready.

Returns:
A PendingOperation which will emit PendingOperation::finished when the call has finished.

Return a list of media streams in this channel.

This methods requires StreamedMediaChannel::FeatureStreams to be ready.

Returns:
A list of pointers to StreamedMediaStream objects.
See also:
streamAdded(), streamRemoved(), streamsForType(), requestStreams()

Return a list of media streams in this channel for the given type type.

This methods requires StreamedMediaChannel::FeatureStreams to be ready.

Parameters:
typeThe interested type.
Returns:
A list of pointers to StreamedMediaStream objects.
See also:
streamAdded(), streamRemoved(), streams(), requestStreams()

Request that media streams be established to exchange the given type type of media with the given contact contact.

This methods requires StreamedMediaChannel::FeatureStreams to be ready.

Returns:
A PendingStreamedMediaStreams which will emit PendingStreamedMediaStreams::finished when the call has finished.
See also:
streamAdded(), streams(), streamsForType()
PendingStreamedMediaStreams * Tp::StreamedMediaChannel::requestStreams ( const ContactPtr &  contact,
QList< MediaStreamType types 
)

Request that media streams be established to exchange the given types types of media with the given contact contact.

This methods requires StreamedMediaChannel::FeatureStreams to be ready.

Returns:
A PendingStreamedMediaStreams which will emit PendingStreamedMediaStreams::finished when the call has finished.
See also:
streamAdded(), streams(), streamsForType()
PendingOperation * Tp::StreamedMediaChannel::removeStream ( const StreamedMediaStreamPtr &  stream)

Remove the specified media stream from this channel.

This methods requires StreamedMediaChannel::FeatureStreams to be ready.

Parameters:
streamMedia stream to remove.
Returns:
A PendingOperation which will emit PendingOperation::finished when the call has finished.
See also:
streamRemoved(), streams(), streamsForType()

Remove the specified media streams from this channel.

This methods requires StreamedMediaChannel::FeatureStreams to be ready.

Parameters:
streamsList of media streams to remove.
Returns:
A PendingOperation which will emit PendingOperation::finished when the call has finished.
See also:
streamRemoved(), streams(), streamsForType()

Check whether media streaming by the handler is required for this channel.

For channels with the TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING interface, the main handler of the channel is responsible for doing the actual streaming, for instance by calling createFarsightChannel(channel) from TelepathyQt-Farsight library and using the telepathy-farsight API on the resulting TfChannel.

This method requires StreamedMediaChannel::FeatureCore to be ready.

Returns:
true if required, false otherwise.

Return the local hold state for this channel.

Whether the local user has placed this channel on hold.

This method requires StreamedMediaChannel::FeatureHoldState to be ready.

Returns:
The local hold state as LocalHoldState.
See also:
requestHold(), localHoldStateChanged()

Return the reason why localHoldState() changed to its current value.

This method requires StreamedMediaChannel::FeatureLocalHoldState to be ready.

Returns:
The local hold state reason as LocalHoldStateReason.
See also:
requestHold(), localHoldStateChanged()

Request that the channel be put on hold (be instructed not to send any media streams to you) or be taken off hold.

If the CM can immediately tell that the requested state change could not possibly succeed, the resulting PendingOperation will fail with error code TP_QT_ERROR_NOT_AVAILABLE. If the requested state is the same as the current state, the resulting PendingOperation will finish successfully.

Otherwise, the channel's local hold state will change to LocalHoldStatePendingHold or LocalHoldStatePendingUnhold (as appropriate), then the resulting PendingOperation will finish successfully.

The eventual success or failure of the request is indicated by a subsequent localHoldStateChanged() signal, changing the local hold state to LocalHoldStateHeld or LocalHoldStateUnheld.

If the channel has multiple streams, and the connection manager succeeds in changing the hold state of one stream but fails to change the hold state of another, it will attempt to revert all streams to their previous hold states.

If the channel does not support the TP_QT_IFACE_CHANNEL_INTERFACE_HOLD interface, the PendingOperation will fail with error code TP_QT_ERROR_NOT_IMPLEMENTED.

Parameters:
holdA boolean indicating whether or not the channel should be on hold
Returns:
A PendingOperation which will emit PendingOperation::finished when the request finishes.
See also:
localHoldState(), localHoldStateReason(), localHoldStateChanged()
void Tp::StreamedMediaChannel::streamAdded ( const Tp::StreamedMediaStreamPtr &  stream) [signal]

Emitted when a media stream is added to this channel.

Parameters:
streamThe media stream that was added.
See also:
streams(), streamsForType(), streamRemoved()
void Tp::StreamedMediaChannel::streamRemoved ( const Tp::StreamedMediaStreamPtr &  stream) [signal]

Emitted when a media stream is removed from this channel.

Parameters:
streamThe media stream that was removed.
See also:
streams(), streamsForType(), streamAdded()
void Tp::StreamedMediaChannel::streamDirectionChanged ( const Tp::StreamedMediaStreamPtr &  stream,
Tp::MediaStreamDirection  direction,
Tp::MediaStreamPendingSend  pendingSend 
) [signal]

Emitted when a media stream direction changes.

Parameters:
streamThe media stream which the direction changed.
directionThe new direction of the stream that changed.
pendingSendThe new pending send flags of the stream that changed.
See also:
StreamedMediaStream::direction()
void Tp::StreamedMediaChannel::streamStateChanged ( const Tp::StreamedMediaStreamPtr &  stream,
Tp::MediaStreamState  state 
) [signal]

Emitted when a media stream state changes.

Parameters:
streamThe media stream which the state changed.
stateThe new state of the stream that changed.
See also:
StreamedMediaStream::state()
void Tp::StreamedMediaChannel::streamError ( const Tp::StreamedMediaStreamPtr &  stream,
Tp::MediaStreamError  errorCode,
const QString &  errorMessage 
) [signal]

Emitted when an error occurs on a media stream.

Parameters:
streamThe media stream which the error occurred.
errorCodeThe error code.
errorMessageThe error message.

Emitted when the local hold state of this channel changes.

Parameters:
stateThe new local hold state of this channel.
reasonThe reason why the change occurred.
See also:
localHoldState(), localHoldStateReason()

Member Data Documentation

Feature representing the core that needs to become ready to make the StreamedMediaChannel object usable.

This is currently the same as Channel::FeatureCore, but may change to include more.

When calling isReady(), becomeReady(), this feature is implicitly added to the requested features.

See also:
awaitingLocalAnswer(), awaitingRemoteAnswer(), acceptCall(), hangupCall(), handlerStreamingRequired()

Reimplemented from Tp::Channel.

Feature used in order to access media stream specific methods.

See media stream specific methods' documentation for more details.

See also:
streams(), streamsForType(), requestStream(), requestStreams(), streamAdded() removeStream(), removeStreams(), streamRemoved(), streamDirectionChanged(), streamStateChanged(), streamError()

Feature used in order to access local hold state info.

See local hold state specific methods' documentation for more details.

See also:
localHoldState(), localHoldStateReason(), requestHold(), localHoldStateChanged()


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_0x66.html0000644000175200001440000005373412000060453023614 0ustar00collabora-develusers00000000000000 Class Members
   Home · All Classes · All Namespaces · Modules · Functions · Files
Here is a list of all class members with links to the classes they belong to:

- f -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00333.html0000644000175200001440000003212312000060453021617 0ustar00collabora-develusers00000000000000 Tp::Profile::Presence Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Profile::Presence Class Reference

The Profile::Presence class represents a presence defined in .profile files. More...

#include <TelepathyQt/Profile>

List of all members.

Public Member Functions


Detailed Description

The Profile::Presence class represents a presence defined in .profile files.


Constructor & Destructor Documentation

Construct a new Profile::Presence object that is a copy of other.

Tp::Profile::Presence::Presence ( const QString &  id,
const QString &  label,
const QString &  iconName,
const QString &  message,
bool  disabled 
)

Construct a new Profile::Presence object.

Parameters:
idThe presence id.
labelThe presence label.
iconNameThe presence icon name.
messageThe presence message.
disabledWhether this presence is supported.

Class destructor.


Member Function Documentation

QString Tp::Profile::Presence::id ( ) const

Return the Telepathy presence id for this presence.

Returns:
The Telepathy presence id for this presence.
QString Tp::Profile::Presence::label ( ) const

Return the label that should be used for this presence.

Returns:
The label for this presence.

Return the icon name of this presence.

Returns:
The icon name of this presence.

Return whether user-defined text-message can be attached to this presence.

Returns:
true if user-defined text-message can be attached to this presence, false otherwise.

Return whether this presence is supported for the service to which this profile applies.

Returns:
true if supported, otherwise false.
Profile::Presence & Tp::Profile::Presence::operator= ( const Presence other)


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00114.html0000644000175200001440000010662212000060453021622 0ustar00collabora-develusers00000000000000 Tp::Client::ChannelDispatchOperationInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

#include <TelepathyQt/ChannelDispatchOperation>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

  • QDBusPendingReply HandleWith (const QString &handler, int timeout=-1)
  • QDBusPendingReply Claim (int timeout=-1)
  • QDBusPendingReply HandleWithTime (const QString &handler, qlonglong userActionTime, int timeout=-1)

Signals

  • void ChannelLost (const QDBusObjectPath &channel, const QString &error, const QString &message)
  • void Finished ()

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.ChannelDispatchOperation".


Constructor & Destructor Documentation

Tp::Client::ChannelDispatchOperationInterface::ChannelDispatchOperationInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelDispatchOperationInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ChannelDispatchOperationInterface::ChannelDispatchOperationInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelDispatchOperationInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ChannelDispatchOperationInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Member Function Documentation

static QLatin1String Tp::Client::ChannelDispatchOperationInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.ChannelDispatchOperation", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property Interfaces of type QStringList.

A list of the extra interfaces provided by this channel dispatch operation. This property cannot change.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Connection of type QDBusObjectPath.

The Connection with which the Channels are associated. The well-known bus name to use can be derived from this object path by removing the leading '/' and replacing all subsequent '/' by '.'. This property cannot change.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Account of type QDBusObjectPath.

The Account with which the Connection and Channels are associated. This property cannot change.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Channels of type Tp::ChannelDetailsList.

The Channels to be dispatched, and their properties. Change notification is via the ChannelLost signal (channels cannot be added to this property, only removed).

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property PossibleHandlers of type QStringList.

The well known bus names (starting with org.freedesktop.Telepathy.Client.) of the possible Handlers for these channels. The channel dispatcher MUST place the most preferred handlers first, according to some reasonable heuristic. As a result, approvers SHOULD use the first handler by default. The heuristic used to prioritize handlers SHOULD give a higher priority to handlers that are already running. If, for instance, Empathy and Kopete have similar functionality, and Empathy is running, we should prefer to send channels to it rather than launching Kopete via service activation.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::ChannelDispatchOperationInterface::HandleWith ( const QString &  handler,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method HandleWith on the remote object.

Called by an approver to accept a channel bundle and request that the given handler be used to handle it.

If successful, this method will cause the ChannelDispatchOperation object to disappear, emitting Finished() .

However, this method may fail because the dispatch has already been completed and the object has already gone. If this occurs, it indicates that another approver has asked for the bundle to be handled by a particular handler. The approver MUST NOT attempt to interact with the channels further in this case, unless it is separately invoked as the handler.

Approvers which are also channel handlers SHOULD use Claim() instead of HandleWith to request that they can handle a channel bundle themselves.

(FIXME: list some possible errors)

If the channel handler raises an error from ClientHandlerInterface::HandleChannels() , this method MAY respond by raising that same error, even if it is not specifically documented here.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
handler

The well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the channel handler that should handle the channel, or the empty string if the client has no preferred channel handler.

timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ChannelDispatchOperationInterface::Claim ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method Claim on the remote object.

Called by an approver to claim channels for handling internally. If this method is called successfully, the process calling this method becomes the handler for the channel, but does not have the ClientHandlerInterface::HandleChannels() method called on it.

Clients that call Claim on channels but do not immediately close them SHOULD implement the Handler interface and its ClientHandlerInterface::HandledChannels property.

Approvers wishing to reject channels MUST call this method to claim ownership of them, and MUST NOT call ChannelInterface::Close() on the channels unless/until this method returns successfully.

The channel dispatcher can't know how best to close arbitrary channel types, so it leaves it up to the approver to do so. For instance, for Text channels it is necessary to acknowledge any messages that have already been displayed to the user first - ideally, the approver would display and then acknowledge the messages - or to call ChannelInterfaceDestroyableInterface::Destroy() if the destructive behaviour of that method is desired.

Similarly, an Approver for StreamedMedia channels can close the channel with a reason (e.g. "busy") if desired. The channel dispatcher, which is designed to have no specific knowledge of particular channel types, can't do that.

If successful, this method will cause the ChannelDispatchOperation object to disappear, emitting Finished() , in the same way as for HandleWith() .

This method may fail because the dispatch operation has already been completed. Again, see HandleWith for more details. The approver MUST NOT attempt to interact with the channels further in this case.

(FIXME: list some other possible errors)

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ChannelDispatchOperationInterface::HandleWithTime ( const QString &  handler,
qlonglong  userActionTime,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method HandleWithTime on the remote object.

A variant of HandleWith() allowing the approver to pass an user action time. This timestamp will be passed to the Handler when ClientHandlerInterface::HandleChannels() is called.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
handler

The well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the channel handler that should handle the channel, or the empty string if the client has no preferred channel handler.

userActionTime

The time at which user action occurred.

timeoutThe timeout in milliseconds.
void Tp::Client::ChannelDispatchOperationInterface::ChannelLost ( const QDBusObjectPath &  channel,
const QString &  error,
const QString &  message 
) [signal]

Represents the signal ChannelLost on the remote object.

A channel has closed before it could be claimed or handled. If this is emitted for the last remaining channel in a channel dispatch operation, it MUST immediately be followed by Finished() .

This signal MUST NOT be emitted until all Approvers that were invoked have returned (successfully or with an error) from their ClientApproverInterface::AddDispatchOperation() method.

This means that Approvers can connect to the ChannelLost signal in a race-free way. Non-approver processes that discover a channel dispatch operation in some way (such as observers) will have to follow the usual "connect to signals then recover state" model - first connect to ChannelLost and Finished() , then download Channels (and on error, perhaps assume that the operation has already Finished).

Parameters:
channelThe Channel that closed.
error

The name of a D-Bus error indicating why the channel closed. If no better reason can be found, org.freedesktop.Telepathy.Error.NotAvailable MAY be used as a fallback; this means that this error SHOULD NOT be given any more specific meaning.

messageA string associated with the D-Bus error.

Represents the signal Finished on the remote object.

Emitted when this dispatch operation finishes. The dispatch operation is no longer present and further methods must not be called on it.

Approvers that have a user interface SHOULD stop notifying the user about the channels in response to this signal; they MAY assume that on errors, they would have received ChannelLost() first.

Its object path SHOULD NOT be reused for a subsequent dispatch operation; the ChannelDispatcher MUST choose object paths in a way that avoids immediate re-use.

Otherwise, clients might accidentally call HandleWith() or Claim() on a new dispatch operation instead of the one they intended to handle.

This signal MUST NOT be emitted until all Approvers that were invoked have returned (successfully or with an error) from their ClientApproverInterface::AddDispatchOperation() method.

This means that Approvers can connect to the ChannelLost signal in a race-free way. Non-approver processes that discover a channel dispatch operation in some way (such as observers) will have to follow the usual "connect to signals then recover state" model - first connect to ChannelLost() and Finished, then download Channels (and on error, perhaps assume that the operation has already Finished).

void Tp::Client::ChannelDispatchOperationInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_0x64.html0000644000175200001440000002157012000060453023603 0ustar00collabora-develusers00000000000000 Class Members
   Home · All Classes · All Namespaces · Modules · Functions · Files
Here is a list of all class members with links to the classes they belong to:

- d -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00075.html0000644000175200001440000002044212000060453021623 0ustar00collabora-develusers00000000000000 Tp::Callback5< R, Arg1, Arg2, Arg3, Arg4, Arg5 > Class Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Callback5< R, Arg1, Arg2, Arg3, Arg4, Arg5 > Class Template Reference

Callback with 5 arguments. More...

#include <TelepathyQt/Callbacks>

Inherits Tp::BaseCallback.

List of all members.

Public Types

Public Member Functions


Detailed Description

template<class R, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5>
class Tp::Callback5< R, Arg1, Arg2, Arg3, Arg4, Arg5 >

Callback with 5 arguments.

See Callbacks Usage


Member Typedef Documentation

template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 >
typedef R(* Tp::Callback5< R, Arg1, Arg2, Arg3, Arg4, Arg5 >::FunctionType)(Arg1, Arg2, Arg3, Arg4, Arg5)
template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 >
typedef R Tp::Callback5< R, Arg1, Arg2, Arg3, Arg4, Arg5 >::ResultType

Constructor & Destructor Documentation

template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 >
Tp::Callback5< R, Arg1, Arg2, Arg3, Arg4, Arg5 >::Callback5 ( ) [inline]
template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 >
template<class Functor >
Tp::Callback5< R, Arg1, Arg2, Arg3, Arg4, Arg5 >::Callback5 ( const Functor &  functor) [inline]

Member Function Documentation

template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 >
ResultType Tp::Callback5< R, Arg1, Arg2, Arg3, Arg4, Arg5 >::operator() ( Arg1  a1,
Arg2  a2,
Arg3  a3,
Arg4  a4,
Arg5  a5 
) const [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00170.html0000644000175200001440000006225512000060453021627 0ustar00collabora-develusers00000000000000 Tp::Client::ConnectionInterfaceCapabilitiesInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceCapabilitiesInterface Class Reference

#include <TelepathyQt/Connection>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Connection.Interface.Capabilities".


Constructor & Destructor Documentation

Tp::Client::ConnectionInterfaceCapabilitiesInterface::ConnectionInterfaceCapabilitiesInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceCapabilitiesInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ConnectionInterfaceCapabilitiesInterface::ConnectionInterfaceCapabilitiesInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceCapabilitiesInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ConnectionInterfaceCapabilitiesInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ConnectionInterfaceCapabilitiesInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ConnectionInterfaceCapabilitiesInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Connection.Interface.Capabilities", which this class represents.

Returns:
The D-Bus interface name.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply<Tp::CapabilityPairList> Tp::Client::ConnectionInterfaceCapabilitiesInterface::AdvertiseCapabilities ( const Tp::CapabilityPairList add,
const QStringList &  remove,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method AdvertiseCapabilities on the remote object.

Used by user interfaces to indicate which channel types they are able to handle on this connection. Because these may be provided by different client processes, this method accepts channel types to add and remove from the set already advertised on this connection. The type of advertised capabilities (create versus invite) is protocol-dependent and hence cannot be set by the this method. In the case of a client adding an already advertised channel type but with new channel type specific flags, the connection manager should simply add the new flags to the set of advertised capabilities.

Upon a successful invocation of this method, the CapabilitiesChanged() signal will be emitted for the user's own handle ( ConnectionInterface::GetSelfHandle() ) by the connection manager to indicate the changes that have been made. This signal should also be monitored to ensure that the set is kept accurate - for example, a client may remove capabilities or type specific capability flags when it exits which are still provided by another client.

On connections managed by the ChannelDispatcherInterface , this method SHOULD NOT be used by clients other than the ChannelDispatcher itself.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
add An array of structures containing:
  • a string channel type
  • a bitwise OR of type specific capability flags
removeAn array of D-Bus interface names of channel types to remove
timeoutThe timeout in milliseconds.
Returns:

An array of structures describing the current capabilities containing: a string channel type a bitwise OR of type specific capability flags

QDBusPendingReply<Tp::ContactCapabilityList> Tp::Client::ConnectionInterfaceCapabilitiesInterface::GetCapabilities ( const Tp::UIntList handles,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method GetCapabilities on the remote object.

Returns an array of capabilities for the given contact handles.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
handles

An array of contact handles for this connection.

This may include zero, which originally meant a query for capabilities available on the connection itself. This usage is deprecated; clients SHOULD NOT do this, and connection managers SHOULD proceed as though zero had not been present in this list.

timeoutThe timeout in milliseconds.
Returns:
An array of structures containing:
  • an integer handle representing the contact
  • a string channel type
  • a bitwise OR of generic capability flags for the type
  • a bitwise OR of type specific capability flags for the type

Represents the signal CapabilitiesChanged on the remote object.

Announce that there has been a change of capabilities on the given handle.

If the handle is zero, the capabilities refer to the connection itself, in some poorly defined way. This usage is deprecated and clients should ignore it.

Parameters:
caps An array of structures containing:
  • an integer handle representing the contact
  • a string channel type
  • a bitwise OR of the contact's old generic capability flags
  • a bitwise OR of the contact's new generic capability flags
  • a bitwise OR of the contact's old type specific capability flags
  • a bitwise OR of the contact's new type specific capability flags
void Tp::Client::ConnectionInterfaceCapabilitiesInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01069.html0000644000175200001440000002016212000060453021626 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface Member List
This is the complete list of members for Tp::Client::CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface
CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface
CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface(Tp::DBusProxy *proxy)Tp::Client::CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface
CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface(const Tp::Client::CallContentMediaDescriptionInterface &mainInterface)Tp::Client::CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface [explicit]
CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface(const Tp::Client::CallContentMediaDescriptionInterface &mainInterface, QObject *parent)Tp::Client::CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface [inline]
requestPropertyHeaderExtensions() const Tp::Client::CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface [inline, static]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00829.html0000644000175200001440000001457012000060453021637 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ConnectionLowlevel Member List
This is the complete list of members for Tp::ConnectionLowlevel, including all inherited members.
allowedPresenceStatuses() const Tp::ConnectionLowlevel
connection() const Tp::ConnectionLowlevel
contactAttributeInterfaces() const Tp::ConnectionLowlevel
contactAttributes(const UIntList &handles, const QStringList &interfaces, bool reference=true)Tp::ConnectionLowlevel
createChannel(const QVariantMap &request)Tp::ConnectionLowlevel
createChannel(const QVariantMap &request, int timeout)Tp::ConnectionLowlevel
ensureChannel(const QVariantMap &request)Tp::ConnectionLowlevel
ensureChannel(const QVariantMap &request, int timeout)Tp::ConnectionLowlevel
injectContactId(uint handle, const QString &contactId)Tp::ConnectionLowlevel
injectContactIds(const HandleIdentifierMap &contactIds)Tp::ConnectionLowlevel
isValid() const Tp::ConnectionLowlevel
maxPresenceStatusMessageLength() const Tp::ConnectionLowlevel
RefCounted()Tp::RefCounted [inline]
referenceHandles(HandleType handleType, const UIntList &handles)Tp::ConnectionLowlevel
requestConnect(const Features &requestedFeatures=Features())Tp::ConnectionLowlevel
requestDisconnect()Tp::ConnectionLowlevel
requestHandles(HandleType handleType, const QStringList &names)Tp::ConnectionLowlevel
setSelfPresence(const QString &status, const QString &statusMessage)Tp::ConnectionLowlevel
~ConnectionLowlevel()Tp::ConnectionLowlevel
~RefCounted()Tp::RefCounted [inline, virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_0x70.html0000644000175200001440000004342412000060453023602 0ustar00collabora-develusers00000000000000 Class Members
   Home · All Classes · All Namespaces · Modules · Functions · Files
Here is a list of all class members with links to the classes they belong to:

- p -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00406.html0000644000175200001440000001224012000060453021616 0ustar00collabora-develusers00000000000000 Tp::SupportedSocketMap Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::SupportedSocketMap Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<uint, UIntList>, but needed to have a discrete type in the Qt type system.

The supported socket address and access-control types for tubes. See GetAvailableStreamTubeTypes.


Constructor & Destructor Documentation

Tp::SupportedSocketMap::SupportedSocketMap ( const QMap< uint, UIntList > &  a) [inline]

Member Function Documentation

SupportedSocketMap& Tp::SupportedSocketMap::operator= ( const QMap< uint, UIntList > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00907.html0000644000175200001440000001301712000060453021627 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PendingSendMessage Member List
This is the complete list of members for Tp::PendingSendMessage, including all inherited members.
channel() const Tp::PendingSendMessage
errorMessage() const Tp::PendingOperation
errorName() const Tp::PendingOperation
finished(Tp::PendingOperation *operation)Tp::PendingOperation [signal]
isError() const Tp::PendingOperation
isFinished() const Tp::PendingOperation
isValid() const Tp::PendingOperation
message() const Tp::PendingSendMessage
messenger() const Tp::PendingSendMessage
object() const Tp::PendingOperation [protected]
PendingOperation(const SharedPtr< RefCounted > &object)Tp::PendingOperation [protected]
sentMessageToken() const Tp::PendingSendMessage
setFinished()Tp::PendingOperation [protected, slot]
setFinishedWithError(const QString &name, const QString &message)Tp::PendingOperation [protected, slot]
setFinishedWithError(const QDBusError &error)Tp::PendingOperation [protected, slot]
~PendingOperation()Tp::PendingOperation [virtual]
~PendingSendMessage()Tp::PendingSendMessage


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00357.html0000644000175200001440000002175612000060453021637 0ustar00collabora-develusers00000000000000 Tp::PtrFunctor7< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 > Struct Template Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::PtrFunctor7< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 > Struct Template Reference

#include </home/collabora-devel/kde/src/telepathy-qt4/TelepathyQt/functors.h>

Inherits Tp::BaseFunctor.

List of all members.

Public Types

Public Member Functions

Public Attributes

template<class R, class Arg1, class Arg2, class Arg3, class Arg4, class Arg5, class Arg6, class Arg7>
struct Tp::PtrFunctor7< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >


Member Typedef Documentation

template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 , class Arg6 , class Arg7 >
typedef R(* Tp::PtrFunctor7< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >::FunctionType)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7)
template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 , class Arg6 , class Arg7 >
typedef R Tp::PtrFunctor7< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >::ResultType

Constructor & Destructor Documentation

template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 , class Arg6 , class Arg7 >
Tp::PtrFunctor7< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >::PtrFunctor7 ( FunctionType  fn) [inline]

Member Function Documentation

template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 , class Arg6 , class Arg7 >
ResultType Tp::PtrFunctor7< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >::operator() ( Arg1  a1,
Arg2  a2,
Arg3  a3,
Arg4  a4,
Arg5  a5,
Arg6  a6,
Arg7  a7 
) const [inline]

Member Data Documentation

template<class R , class Arg1 , class Arg2 , class Arg3 , class Arg4 , class Arg5 , class Arg6 , class Arg7 >
FunctionType Tp::PtrFunctor7< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >::fn


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00246.html0000644000175200001440000001177312000060453021632 0ustar00collabora-develusers00000000000000 Tp::HandleIdentifierMap Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::HandleIdentifierMap Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<uint, QString>, but needed to have a discrete type in the Qt type system.

A map from handles to the corresponding normalized string identifier.


Constructor & Destructor Documentation

Tp::HandleIdentifierMap::HandleIdentifierMap ( const QMap< uint, QString > &  a) [inline]

Member Function Documentation

HandleIdentifierMap& Tp::HandleIdentifierMap::operator= ( const QMap< uint, QString > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00983.html0000644000175200001440000000533512000060453021637 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactMediaDescriptionPropertiesMap Member List
This is the complete list of members for Tp::ContactMediaDescriptionPropertiesMap, including all inherited members.
ContactMediaDescriptionPropertiesMap()Tp::ContactMediaDescriptionPropertiesMap [inline]
ContactMediaDescriptionPropertiesMap(const QMap< uint, QVariantMap > &a)Tp::ContactMediaDescriptionPropertiesMap [inline]
operator=(const QMap< uint, QVariantMap > &a)Tp::ContactMediaDescriptionPropertiesMap [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00636_source.html0000644000175200001440000001501412000060453023205 0ustar00collabora-develusers00000000000000 pending-connection.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
pending-connection.h
00001 
00023 #ifndef _TelepathyQt_pending_connection_h_HEADER_GUARD_
00024 #define _TelepathyQt_pending_connection_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/Connection>
00031 #include <TelepathyQt/PendingOperation>
00032 
00033 #include <QString>
00034 #include <QVariantMap>
00035 
00036 class QDBusPendingCallWatcher;
00037 
00038 namespace Tp
00039 {
00040 
00041 class ConnectionManager;
00042 
00043 class TP_QT_EXPORT PendingConnection : public PendingOperation
00044 {
00045     Q_OBJECT
00046     Q_DISABLE_COPY(PendingConnection);
00047 
00048 public:
00049     ~PendingConnection();
00050 
00051     ConnectionManagerPtr manager() const;
00052 
00053     ConnectionPtr connection() const;
00054 
00055 private Q_SLOTS:
00056     TP_QT_NO_EXPORT void onCallFinished(QDBusPendingCallWatcher *watcher);
00057     TP_QT_NO_EXPORT void onConnectionBuilt(Tp::PendingOperation *op);
00058 
00059 private:
00060     friend class ConnectionManagerLowlevel;
00061 
00062     TP_QT_NO_EXPORT PendingConnection(const ConnectionManagerPtr &manager,
00063             const QString &protocol, const QVariantMap &parameters);
00064     TP_QT_NO_EXPORT PendingConnection(const QString &error, const QString &errorMessage);
00065 
00066     struct Private;
00067     friend struct Private;
00068     Private *mPriv;
00069 };
00070 
00071 } // Tp
00072 
00073 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00043.html0000644000175200001440000024403312000060453021622 0ustar00collabora-develusers00000000000000 Tp::Client::AccountInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

#include <TelepathyQt/AccountManager>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

  • QDBusPendingReply Remove (int timeout=-1)
  • QDBusPendingReply< QStringList > UpdateParameters (const QVariantMap &set, const QStringList &unset, int timeout=-1)
  • QDBusPendingReply Reconnect (int timeout=-1)

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Account".


Constructor & Destructor Documentation

Tp::Client::AccountInterface::AccountInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a AccountInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::AccountInterface::AccountInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a AccountInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a AccountInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Member Function Documentation

static QLatin1String Tp::Client::AccountInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Account", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property Interfaces of type QStringList.

A list of the extra interfaces provided by this account.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property DisplayName of type QString.

The user-visible name of this account. This SHOULD be chosen by the user at account creation time. The account creation user interface is responsible for setting a reasonable default value in the user's locale; something like "Jabber (bob@example.com)" would be sensible.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous setter for the remote object property DisplayName of type QString.

The user-visible name of this account. This SHOULD be chosen by the user at account creation time. The account creation user interface is responsible for setting a reasonable default value in the user's locale; something like "Jabber (bob@example.com)" would be sensible.

Returns:
A pending operation which will emit finished when the property has been set.

Asynchronous getter for the remote object property Icon of type QString.

The name of an icon in the system's icon theme, such as "im-msn", or the empty string to not specify an icon. If the icon is set to an empty string, the account manager or any client MAY derive a default icon, for instance from the protocol.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous setter for the remote object property Icon of type QString.

The name of an icon in the system's icon theme, such as "im-msn", or the empty string to not specify an icon. If the icon is set to an empty string, the account manager or any client MAY derive a default icon, for instance from the protocol.

Returns:
A pending operation which will emit finished when the property has been set.

Asynchronous getter for the remote object property Valid of type bool.

If true, this account is considered by the account manager to be complete and usable. If false, user action is required to make it usable, and it will never attempt to connect (for instance, this might be caused by the absence of a required parameter). For connection managers with a plugin architecture, like telepathy-haze, we have little or no control over the parameters offered; for platforms with package management, we have little or no control over the CMs offered. NMC 4.x would just pretend the account didn't exist in these circumstances, but silent data loss is bad, and UIs with CM-specific knowledge (or a user filling in newly-required parameters) might be able to rescue a broken account.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Enabled of type bool.

This property gives the users the possibility to prevent an account from being used. This flag does not change the validity of the account.

A disabled account can never be put online.

Use cases:

  • user has two or more accounts capable of calling contact X, but he doesn't want the UI to prompt him everytime about which one he wants to use for the call. He can then disable all the equivalent accounts but one.
  • There is some temporary server error and the user doesn't want to be be bother by error messages, or change the account configuration: temporarily disabling the account is quicker.

The AccountManager SHOULD allow this property to be set on invalid accounts, but MUST NOT attempt to put invalid accounts online even if they become Enabled.

There doesn't seem to be any good reason not to allow this.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous setter for the remote object property Enabled of type bool.

This property gives the users the possibility to prevent an account from being used. This flag does not change the validity of the account.

A disabled account can never be put online.

Use cases:

  • user has two or more accounts capable of calling contact X, but he doesn't want the UI to prompt him everytime about which one he wants to use for the call. He can then disable all the equivalent accounts but one.
  • There is some temporary server error and the user doesn't want to be be bother by error messages, or change the account configuration: temporarily disabling the account is quicker.

The AccountManager SHOULD allow this property to be set on invalid accounts, but MUST NOT attempt to put invalid accounts online even if they become Enabled.

There doesn't seem to be any good reason not to allow this.

Returns:
A pending operation which will emit finished when the property has been set.

Asynchronous getter for the remote object property Nickname of type QString.

The nickname to set on this account for display to other contacts, as set by the user. When the account becomes connected, the account manager SHOULD set this as the user's alias using SetAliases if appropriate. In a later specification revision, we plan to separate the concepts of a contact's nickname as set by themselves, and the local name for them in our contact list (a "handle" or "pet name" as described in XEP-0165 and its references). The terminology change from alias to nickname here is a step in that direction.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous setter for the remote object property Nickname of type QString.

The nickname to set on this account for display to other contacts, as set by the user. When the account becomes connected, the account manager SHOULD set this as the user's alias using SetAliases if appropriate. In a later specification revision, we plan to separate the concepts of a contact's nickname as set by themselves, and the local name for them in our contact list (a "handle" or "pet name" as described in XEP-0165 and its references). The terminology change from alias to nickname here is a step in that direction.

Returns:
A pending operation which will emit finished when the property has been set.

Asynchronous getter for the remote object property Service of type QString.

Some protocols, like XMPP and SIP, are used by various different user-recognised brands, such as Google Talk and Ovi by Nokia. On accounts for such services, this property SHOULD be set to a string describing the service, which MUST consist only of ASCII letters, numbers and hyphen/minus signs, and start with a letter (matching the requirements for Protocol). For the jabber protocol, one of the following service names should be used if possible:

For the IRC protocol, the network name (freenode, gimpnet, etc.) can be used if relevant.

The Icon property SHOULD be set to a corresponding brand-specific icon name, if possible. In the future, this property may be used as an index into additional service-specific customizations. If this property is the empty string (or missing), the service is determined by the protocol name (either because this is a single-service protocol like msn, or because this is just a generic jabber or sip account without specific branding).

This property MAY be set, if appropriate, when calling AccountManagerInterface::CreateAccount() . Updating this property will fail on externally-stored accounts whose AccountInterfaceStorageInterface::StorageRestrictions include Cannot_Set_Service.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous setter for the remote object property Service of type QString.

Some protocols, like XMPP and SIP, are used by various different user-recognised brands, such as Google Talk and Ovi by Nokia. On accounts for such services, this property SHOULD be set to a string describing the service, which MUST consist only of ASCII letters, numbers and hyphen/minus signs, and start with a letter (matching the requirements for Protocol). For the jabber protocol, one of the following service names should be used if possible:

For the IRC protocol, the network name (freenode, gimpnet, etc.) can be used if relevant.

The Icon property SHOULD be set to a corresponding brand-specific icon name, if possible. In the future, this property may be used as an index into additional service-specific customizations. If this property is the empty string (or missing), the service is determined by the protocol name (either because this is a single-service protocol like msn, or because this is just a generic jabber or sip account without specific branding).

This property MAY be set, if appropriate, when calling AccountManagerInterface::CreateAccount() . Updating this property will fail on externally-stored accounts whose AccountInterfaceStorageInterface::StorageRestrictions include Cannot_Set_Service.

Returns:
A pending operation which will emit finished when the property has been set.

Asynchronous getter for the remote object property Parameters of type QVariantMap.

A map from connection manager parameter names (as in the ConnectionManagerInterface interface) to their values. This property includes only those parameters that are stored for this account, and SHOULD only include those parameters that the user has explicitly set.

This property cannot be altered using org.freedesktop.DBus.Properties.Set(); use UpdateParameters() instead.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property AutomaticPresence of type Tp::SimplePresence.

The presence status that this account should have if it is brought online.

In ITOS2007 and ITOS2008 this is a global preference, not visible on D-Bus (the "default presence"). "Automatic presence" better describes when it is used.

Setting this property MUST NOT actually change the account's status until the next time it is (re)connected for some reason.

The value of this property MUST be one that would be acceptable for RequestedPresence , with the additional restriction that the Connection_Presence_Type MUST NOT be Offline.

Otherwise, it would not be possible to use this presence to bring the account online for a channel request.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous setter for the remote object property AutomaticPresence of type Tp::SimplePresence.

The presence status that this account should have if it is brought online.

In ITOS2007 and ITOS2008 this is a global preference, not visible on D-Bus (the "default presence"). "Automatic presence" better describes when it is used.

Setting this property MUST NOT actually change the account's status until the next time it is (re)connected for some reason.

The value of this property MUST be one that would be acceptable for RequestedPresence , with the additional restriction that the Connection_Presence_Type MUST NOT be Offline.

Otherwise, it would not be possible to use this presence to bring the account online for a channel request.

Returns:
A pending operation which will emit finished when the property has been set.

Asynchronous getter for the remote object property ConnectAutomatically of type bool.

If true, the account manager SHOULD attempt to put this account online with the AutomaticPresence whenever possible (in the base Account interface this is deliberately left vague). If false, it MUST NOT put the account online automatically in response to, for instance, connectivity changes, but SHOULD still put the account online with the AutomaticPresence if requested by the user (for instance, if the user tries to start a conversation using this account).

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous setter for the remote object property ConnectAutomatically of type bool.

If true, the account manager SHOULD attempt to put this account online with the AutomaticPresence whenever possible (in the base Account interface this is deliberately left vague). If false, it MUST NOT put the account online automatically in response to, for instance, connectivity changes, but SHOULD still put the account online with the AutomaticPresence if requested by the user (for instance, if the user tries to start a conversation using this account).

Returns:
A pending operation which will emit finished when the property has been set.

Asynchronous getter for the remote object property Connection of type QDBusObjectPath.

Either the object path of the ConnectionInterface to this account, or the special value '/' if there is no connection.

If this object path is not '/', the Connection's well-known bus name can be derived from this object path by removing the first '/' and replacing subsequent '/' characters with '.'.

Object paths aren't nullable, so we can't use an empty string.
Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property ConnectionStatus of type uint.

If the Connection property is non-empty, the status of that connection. If the Connection property is the empty string, this property may either be Disconnected (indicating that the account manager is not attempting to bring it online), or Connecting (indicating that the account manager is attempting to connect). The account manager is expected to set this by observing signals from the Connection. If the AM is doing some sort of backoff/delay on reconnection attempts, the account's status is conceptually "Connecting" even though there is no Connection.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property ConnectionStatusReason of type uint.

The reason for the last change to ConnectionStatus. The account manager is expected to set this by observing signals from the Connection. If you weren't watching the Connection at the time it failed, you can't tell why - unless the AM can tell you.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property ConnectionError of type QString.

If the last connection to this account failed with an error, the D-Bus error name of that error; otherwise, the empty string. The account manager is expected to set this by observing the ConnectionInterface::ConnectionError() and ConnectionInterface::StatusChanged() signals.

If ConnectionError is received before the connection disconnects, its first argument should be used to set this property; otherwise, the Reason argument of StatusChanged should be converted to a suitable D-Bus error name.

Whenever the Connection connects successfully, this property should be reset to the empty string.

This combines the state-recoverability of ConnectionStatusReason with the extensibility of Connection.ConnectionError.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property ConnectionErrorDetails of type QVariantMap.

If the last connection to this account failed with an error, a mapping representing any additional information about the last disconnection; otherwise, the empty map. The keys and values are the same as for the second argument of ConnectionInterface::ConnectionError() .

Whenever the Connection connects successfully, this property should be reset to the empty map.

This combines the state-recoverability of ConnectionStatusReason with the extensibility of Connection.ConnectionError.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property CurrentPresence of type Tp::SimplePresence.

The actual presence. If the connection is not online, the Connection_Presence_Type SHOULD be Connection_Presence_Type_Offline. If the connection is online but does not support the SimplePresence interface, the type SHOULD be Connection_Presence_Type_Unset. The account manager is expected to set this by observing signals from the Connection.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property RequestedPresence of type Tp::SimplePresence.

The requested presence for this account. When this is changed, the account manager should attempt to manipulate the connection manager to make CurrentPresence match RequestedPresence as closely as possible. It should not be saved to any sort of persistent storage.

When the account manager automatically connects an account, it must signal this by setting the RequestedPresence to the same thing as the AutomaticPresence .

The Connection_Presence_Type in this property MUST NOT be Unset, Unknown or Error.

Requesting those presence types doesn't make sense.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous setter for the remote object property RequestedPresence of type Tp::SimplePresence.

The requested presence for this account. When this is changed, the account manager should attempt to manipulate the connection manager to make CurrentPresence match RequestedPresence as closely as possible. It should not be saved to any sort of persistent storage.

When the account manager automatically connects an account, it must signal this by setting the RequestedPresence to the same thing as the AutomaticPresence .

The Connection_Presence_Type in this property MUST NOT be Unset, Unknown or Error.

Requesting those presence types doesn't make sense.

Returns:
A pending operation which will emit finished when the property has been set.

Asynchronous getter for the remote object property ChangingPresence of type bool.

If true, a change to the presence of this account is in progress.

Whenever RequestedPresence is set on an account that could go online, or whenever an account with a non-offline RequestedPresence becomes able to go online (for instance because Enabled or Valid changes to True), ChangingPresence MUST change to True, and the two property changes MUST be emitted in the same AccountPropertyChanged() signal, before the Set method returns.

When the account manager succeeds or fails in changing the presence, or the connection disconnects due to an error, ChangingPresence MUST change to False as part of the same AccountPropertyChanged() signal.

This allows UIs to indicate that a presence change is in progress or has finished, even if the change was initiated by a different UI.

For instance, Maemo 5 and Empathy indicate a presence change by having the presence indicator alternate between the RequestedPresence and the CurrentPresence ; they should start blinking when ChangingPresence becomes true, and stop when it becomes false.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property NormalizedName of type QString.

The normalized user ID of the local user on this account (i.e. the string returned when the ConnectionInterface::InspectHandles() method is called on the result of ConnectionInterface::GetSelfHandle() for an active connection).

It is unspecified whether this user ID is globally unique.

As currently implemented, IRC user IDs are only unique within the same IRCnet. On some saner protocols, the user ID includes a DNS name which provides global uniqueness.

If this value is not known yet (which will always be the case for accounts that have never been online), it will be an empty string.

It is possible that this value will change if the connection manager's normalization algorithm changes, although this SHOULD be avoided.

It's not always completely clear what normalization algorithm should be used; for instance, in Gabble, we currently use JIDs, but it would also have been reasonable to use xmpp URIs.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property HasBeenOnline of type bool.

If true, this account has successfully been put online at some point in the past. UIs could apply a policy that the 'account' parameter can only be edited in accounts that have never been online, or that ConnectAutomatically cannot be set on such accounts. The account manager should not enforce such policies, but it can expose enough information to UIs that the UI can decide what to do.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property Supersedes of type Tp::ObjectPathList.

A list of the object paths of formerly-used accounts which are superseded by this one.

For instance, if an account is migrated from one connection manager implementation to another, or even from one protocol to another (for instance formerly-proprietary services which can now be accessed via XMPP), log storage services could look for logs under all of the superseded object paths as well as the new object path.

This is a list because a single user-visible account could be migrated more than once.

If the Account Manager implementation performs an account migration automatically, it SHOULD set this property. If a client performs an account migration, it SHOULD set this property via via the Properties argument of AccountManagerInterface::CreateAccount() when creating the migrated account. In either case, the value SHOULD include the old account's path, and every path from the old account's Supersedes property.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous setter for the remote object property Supersedes of type Tp::ObjectPathList.

A list of the object paths of formerly-used accounts which are superseded by this one.

For instance, if an account is migrated from one connection manager implementation to another, or even from one protocol to another (for instance formerly-proprietary services which can now be accessed via XMPP), log storage services could look for logs under all of the superseded object paths as well as the new object path.

This is a list because a single user-visible account could be migrated more than once.

If the Account Manager implementation performs an account migration automatically, it SHOULD set this property. If a client performs an account migration, it SHOULD set this property via via the Properties argument of AccountManagerInterface::CreateAccount() when creating the migrated account. In either case, the value SHOULD include the old account's path, and every path from the old account's Supersedes property.

Returns:
A pending operation which will emit finished when the property has been set.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::AccountInterface::Remove ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method Remove on the remote object.

Delete the account.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
QDBusPendingReply<QStringList> Tp::Client::AccountInterface::UpdateParameters ( const QVariantMap &  set,
const QStringList &  unset,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method UpdateParameters on the remote object.

Change the value of the Parameters property.

If any of the Set parameters’ Conn_Mgr_Param_Flags include DBus_Property, the change will be applied immediately to the corresponding D-Bus Property on the active Connection , if there is one. If any of the Unset parameters’ Conn_Mgr_Param_Flags include both DBus_Property and Has_Default, the corresponding D-Bus Property on the connection will be set to the default value. Changes to other parameters will not take effect until the next time the account is disconnected and reconnected. (If parameters are explicitly set to their default value, or are unset when previously set to their default value, the account manager MAY decide that no reconnection is necessary to make the change take effect.)

In general, reconnecting is a destructive operation that shouldn't happen as a side-effect. In particular, migration tools that twiddle the settings of all accounts shouldn't cause an automatic disconnect and reconnect.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
setA mapping from parameter names to their values. These parameters should be stored for future use.
unsetA list of the names of parameters to be removed from the set of stored values, allowing the default values to be used. If the given parameters were not, in fact, stored, or even if they do not exist at all, the account manager MUST accept this without error.
timeoutThe timeout in milliseconds.
Returns:

If all of the updates could be applied to the active Connection (if any), the empty list, signifying that no reconnection is required for the new parameters to take effect. For example, if the only parameter updated is ...Cellular. ConnectionInterfaceCellularInterface::MessageValidityPeriod , the new value can be applied immediately to the connection.

Otherwise, a list of the names of parameters with changes that will not take effect until the account is reconnected. User interfaces that require "instant apply" semantics MAY call Reconnect() in response to receiving a non-empty list. For example, if the caller updates both ...Anonymity. ConnectionInterfaceAnonymityInterface::AnonymityMandatory and require-encryption, the former can be applied to the current connection, but the latter needs a reconnect to take effect, so this method should return ["require-encryption"].

QDBusPendingReply Tp::Client::AccountInterface::Reconnect ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method Reconnect on the remote object.

Re-connect this account. If the account is currently disconnected and the requested presence is offline, or if the account is not Enabled or not Valid , this does nothing.

If the account is disconnected and the requested presence is not offline, this forces an attempt to connect with the requested presence immediately.

If the account is connecting or connected, this is equivalent to remembering the current value of RequestedPresence , setting its value to (OFFLINE, "offline", ""), waiting for the change to take effect, then setting its value to the value that was previously remembered.

Clients desiring "instant apply" semantics for CM parameters MAY call this method to achieve that.

In particular, if the account's Connection is in the Connecting state, calling this method causes the attempt to connect to be aborted and re-tried.

This is necessary to ensure that the new parameters are picked up.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.

Represents the signal Removed on the remote object.

This account has been removed. This is redundant with AccountRemoved, but it's still worth having, to avoid having to bind to AccountManager.AccountRemoved to tell you whether your Account is valid — ideally, an account-editing UI should only care about a single Account.

void Tp::Client::AccountInterface::AccountPropertyChanged ( const QVariantMap &  properties) [signal]

Represents the signal AccountPropertyChanged on the remote object.

The values of one or more properties on this interface (that do not specify that this signal does not apply to them) may have changed. This does not cover properties of other interfaces, which must provide their own change notification if appropriate.

Parameters:
propertiesA map from property names in this namespace (e.g. Nickname) to values. Properties whose values have not changed SHOULD be omitted, but this need not be done.
void Tp::Client::AccountInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00183.html0000644000175200001440000010111212000060453021615 0ustar00collabora-develusers00000000000000 Tp::Client::ConnectionInterfaceRequestsInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceRequestsInterface Class Reference

#include <TelepathyQt/Connection>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

  • QDBusPendingReply
    < QDBusObjectPath, QVariantMap > CreateChannel (const QVariantMap &request, int timeout=-1)
  • QDBusPendingReply< bool,
    QDBusObjectPath, QVariantMap > EnsureChannel (const QVariantMap &request, int timeout=-1)

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Connection.Interface.Requests".


Constructor & Destructor Documentation

Tp::Client::ConnectionInterfaceRequestsInterface::ConnectionInterfaceRequestsInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceRequestsInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ConnectionInterfaceRequestsInterface::ConnectionInterfaceRequestsInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceRequestsInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ConnectionInterfaceRequestsInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ConnectionInterfaceRequestsInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ConnectionInterfaceRequestsInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Connection.Interface.Requests", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property Channels of type Tp::ChannelDetailsList.

A list of all the channels which currently exist on this connection. Change notification is via the NewChannels and ChannelClosed signals.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property RequestableChannelClasses of type Tp::RequestableChannelClassList.

The classes of channel that are expected to be available on this connection, i.e. those for which CreateChannel() can reasonably be expected to succeed. User interfaces can use this information to show or hide UI components.

This property cannot change after the connection has gone to state Connection_Status_Connected, so there is no change notification (if the connection has context-dependent capabilities, it SHOULD advertise support for all classes of channel that it might support during its lifetime). Before this state has been reached, the value of this property is undefined.

This is not on an optional interface, because connection managers can always offer some sort of clue about the channel classes they expect to support (at worst, they can announce support for everything for which they have code).

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply<QDBusObjectPath, QVariantMap> Tp::Client::ConnectionInterfaceRequestsInterface::CreateChannel ( const QVariantMap &  request,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method CreateChannel on the remote object.

Request that an entirely new channel is created.

There is deliberately no flag corresponding to the suppress_handler argument to ConnectionInterface::RequestChannel() , because passing a FALSE value for that argument is deprecated. Requests made using this interface always behave as though suppress_handler was TRUE.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
request

A dictionary containing desirable properties, which MUST include ChannelInterface::ChannelType . Some properties are defined such that only an exact match makes sense, and connection managers MUST NOT satisfy a request with a channel where that property does not match; some properties are defined such that the connection manager MAY treat the request as merely a hint, and make a best-effort attempt to satisfy it. This is documented separately for each property.

If this dictionary contains a property whose semantics are not known to the connection manager, this method MUST fail without side-effects (in particular it must not create a new channel).

This is necessary if we want to be able to invent properties in future that, when used in a request, are hard requirements rather than just hints. A connection manager that did not know the semantics of those properties could incorrectly return a new channel that did not satisfy the requirements.

The connection manager MUST NOT respond successfully, and SHOULD NOT create a new channel or cause any other side-effects, unless it can create a new channel that satisfies the client's requirements.

Properties that will be set by this argument need not have write access after the channel has been created - indeed, it is expected that most will be read-only.

timeoutThe timeout in milliseconds.
Returns:

The Channel object, which MUST NOT be signalled with NewChannels() until after this method returns.

This allows the requester to alter its handling of NewChannels by knowing whether one of the channels satisfied a request it made.

Returns:

Properties of the channel that was produced, equivalent to the properties in Channel_Details. Connection managers MUST NOT include properties here whose values can change, for the same reasons as in Channel_Details.

QDBusPendingReply<bool, QDBusObjectPath, QVariantMap> Tp::Client::ConnectionInterfaceRequestsInterface::EnsureChannel ( const QVariantMap &  request,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method EnsureChannel on the remote object.

Request that channels are ensured to exist.

The connection manager is in the best position to determine which existing channels could satisfy which requests.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
request

A dictionary containing desirable properties, with the same semantics as the corresponding parameter to CreateChannel() .

timeoutThe timeout in milliseconds.
Returns:

If false, the caller of EnsureChannel MUST assume that some other process is handling this channel; if true, the caller of EnsureChannel SHOULD handle it themselves or delegate it to another client.

If the creation of a channel makes several calls to EnsureChannel (and no other requests) successful, exactly one of those calls MUST return a true value for this argument.

If the creation of a channel makes other requests successful, the value returned for this argument MUST be such that exactly one of the clients making requests ends up responsible for the channel. In particular, if CreateChannel() returns a channel C, any EnsureChannel calls that also return C MUST return a false value for this argument.

Returns:

The Channel object. If it was created as a result of this method call, it MUST NOT be signalled by NewChannels until after this method returns. This allows the requester to alter its handling of NewChannels by knowing whether one of the channels satisfied a request it made.

Returns:

Properties of the channel that was produced, equivalent to the properties in Channel_Details. Connection managers MUST NOT include properties here whose values can change, for the same reasons as in Channel_Details.

Represents the signal NewChannels on the remote object.

New channels have been created. The connection manager SHOULD emit a single signal for any group of closely related channels that are created at the same time, so that the channel dispatcher can try to dispatch them to a handler as a unit.

In particular, if additional channels are created as a side-effect of a call to CreateChannel() , these channels SHOULD appear in the same NewChannels signal as the channel that satisfies the request.

Joining a MUC Tube in XMPP requires joining the corresponding MUC (chatroom), so a ChannelTypeTextInterface channel can be created as a side-effect.

Every time NewChannels is emitted, it MUST be followed by a ConnectionInterface::NewChannel() signal for each channel.

The double signal emission is for the benefit of older Telepathy clients, which won't be listening for NewChannels.

The more informative NewChannels signal comes first so that clients that did not examine the connection to find out whether Requests is supported will see the more informative signal for each channel first, and then ignore the less informative signal because it announces a new channel of which they are already aware.

Parameters:
channelsThe channels and their details. All channels that are signalled together like this MUST have the same Bundle property, which may either refer to an existing bundle, or establish a new bundle.
void Tp::Client::ConnectionInterfaceRequestsInterface::ChannelClosed ( const QDBusObjectPath &  removed) [signal]

Represents the signal ChannelClosed on the remote object.

Emitted when a channel is closed and hence disappears from the Channels property. This is redundant with the Closed signal on the channel itself, but it does provide full change notification for the Channels property.

Parameters:
removedThe channel which has been removed from the Channels property
void Tp::Client::ConnectionInterfaceRequestsInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/closed.png0000644000175200001440000000017612000060453022102 0ustar00collabora-develusers00000000000000PNG  IHDR EIDATxA @! Pi/`Є.?,!u zlޖJh1ߘ+vRLx@ (*79H l)IENDB`telepathy-qt-0.9.3/doc/html/a00853.html0000644000175200001440000000474012000060453021632 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Features Member List
This is the complete list of members for Tp::Features, including all inherited members.
Features()Tp::Features [inline]
Features(const Feature &feature)Tp::Features [inline]
Features(const QSet< Feature > &s)Tp::Features [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00124.html0000644000175200001440000010242212000060453021615 0ustar00collabora-develusers00000000000000 Tp::Client::ChannelInterfaceDTMFInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

#include <TelepathyQt/Channel>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

  • QDBusPendingReply StartTone (uint streamID, uchar event, int timeout=-1)
  • QDBusPendingReply StopTone (uint streamID, int timeout=-1)
  • QDBusPendingReply MultipleTones (const QString &tones, int timeout=-1)

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Channel.Interface.DTMF".


Constructor & Destructor Documentation

Tp::Client::ChannelInterfaceDTMFInterface::ChannelInterfaceDTMFInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfaceDTMFInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ChannelInterfaceDTMFInterface::ChannelInterfaceDTMFInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ChannelInterfaceDTMFInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ChannelInterfaceDTMFInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ChannelInterfaceDTMFInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ChannelInterfaceDTMFInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

static QLatin1String Tp::Client::ChannelInterfaceDTMFInterface::staticInterfaceName ( ) [inline, static]

Returns the name of the interface "org.freedesktop.Telepathy.Channel.Interface.DTMF", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property CurrentlySendingTones of type bool.

Indicates whether there are DTMF tones currently being sent in the channel. If so, the client should wait for StoppedTones signal before trying to send more tones.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property InitialTones of type QString.

If non-empty in a channel request that will create a new channel, the connection manager should send the tones immediately after at least one eligible audio stream has been created in the channel. This should only be used with InitialAudio=true. This property is immutable (cannot change).

Returns:
A pending variant which will emit finished when the property has been retrieved.

Asynchronous getter for the remote object property DeferredTones of type QString.

The tones waiting for the user to continue, if any.

When this property is set to a non-empty value, TonesDeferred() is emitted. When any tones are played (i.e. whenever SendingTones() is emitted), this property is reset to the empty string.

Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply Tp::Client::ChannelInterfaceDTMFInterface::StartTone ( uint  streamID,
uchar  event,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method StartTone on the remote object.

Start sending a DTMF tone to all eligible streams in the channel. Where possible, the tone will continue until StopTone is called. On certain protocols, it may only be possible to send events with a predetermined length. In this case, the implementation MAY emit a fixed-length tone, and the StopTone method call SHOULD return NotAvailable. The client may wish to control the exact duration and timing of the tones sent as a result of user's interaction with the dialpad, thus starting and stopping the tone sending explicitly. Tone overlaping or queueing is not supported, so this method can only be called if no DTMF tones are already being played.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
streamIDA stream ID as defined in the StreamedMedia channel type. This argument is included for backwards compatibility and MUST be ignored by the implementations - the tone SHOULD be sent to all eligible streams in the channel.
eventA numeric event code from the DTMF_Event enum.
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ChannelInterfaceDTMFInterface::StopTone ( uint  streamID,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method StopTone on the remote object.

Stop sending any DTMF tones which have been started using the StartTone or MultipleTones methods. If there is no current tone, this method will do nothing. If MultipleTones was used, the client should not assume the sending has stopped immediately; instead, the client should wait for the StoppedTones signal. On some protocols it might be impossible to cancel queued tones immediately.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
streamIDA stream ID as defined in the StreamedMedia channel type. This argument is included for backwards compatibility and MUST be ignored by the implementations - the sending SHOULD be stoped in all eligible streams in the channel.
timeoutThe timeout in milliseconds.
QDBusPendingReply Tp::Client::ChannelInterfaceDTMFInterface::MultipleTones ( const QString &  tones,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method MultipleTones on the remote object.

Send multiple DTMF events to all eligible streams in the channel. Each tone will be played for an implementation-defined number of milliseconds (typically 250ms), followed by a gap before the next tone is played (typically 100ms). The duration and gap are defined by the protocol or connection manager. In cases where the client knows in advance the tone sequence it wants to send, it's easier to use this method than manually start and stop each tone in the sequence. The tone and gap lengths may need to vary for interoperability, according to the protocol and other implementations' ability to recognise tones. At the time of writing, GStreamer uses a minimum of 250ms tones and 100ms gaps when playing in-band DTMF in the normal audio stream, or 70ms tones and 50ms gaps when encoding DTMF as audio/telephone-event. Tone overlaping or queueing is not supported, so this method can only be called if no DTMF tones are already being played.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
tones

A string representation of one or more DTMF events. Implementations of this method MUST support all of the following characters in this string:

  • the digits 0-9, letters A-D and a-d, and symbols '*' and '#' correspond to the members of DTMF_Event
  • any of 'p', 'P', 'x', 'X' or ',' (comma) results in an implementation-defined pause, typically for 3 seconds
  • 'w' or 'W' waits for the user to continue, by stopping interpretation of the string, and if there is more to be played, emitting the TonesDeferred() signal with the rest of the string as its argument: see that signal for details
timeoutThe timeout in milliseconds.
void Tp::Client::ChannelInterfaceDTMFInterface::TonesDeferred ( const QString &  tones) [signal]

Represents the signal TonesDeferred on the remote object.

Emitted when 'w' or 'W', indicating "wait for the user to continue", is encountered while playing a DTMF string queued by MultipleTones() or InitialTones . Any queued DTMF events after the 'w', which have not yet been played, are placed in the DeferredTones property and copied into this signal's argument.

When the channel handler is ready to continue, it MAY pass the value of DeferredTones to MultipleTones() , to resume sending. Alternatively, it MAY ignore the deferred tones, or even play different tones instead. Any deferred tones are discarded the next time a tone is played.

This signal SHOULD NOT be emitted if there is nothing left to play, i.e. if the 'w' was the last character in the DTMF string.

Parameters:
tonesThe new non-empty value of DeferredTones.
void Tp::Client::ChannelInterfaceDTMFInterface::SendingTones ( const QString &  tones) [signal]

Represents the signal SendingTones on the remote object.

DTMF tone(s)are being sent to all eligible streams in the channel. The signal is provided to indicating the fact that the streams are currently being used to send one or more DTMF tones, so any other media input is not getting through to the audio stream. It also serves as a cue for the StopTone() method.

Parameters:
tonesDTMF string (one or more events) that is to be played.

Represents the signal StoppedTones on the remote object.

DTMF tones have finished playing on streams in this channel.

Parameters:
cancelledTrue if the DTMF tones were actively cancelled via StopTone.
void Tp::Client::ChannelInterfaceDTMFInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00586_source.html0000644000175200001440000001272212000060453023214 0ustar00collabora-develusers00000000000000 global.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
global.h
00001 
00023 #ifndef _TelepathyQt_global_h_HEADER_GUARD_
00024 #define _TelepathyQt_global_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <QtGlobal>
00031 
00032 #ifdef BUILDING_TP_QT
00033 #  define TP_QT_EXPORT Q_DECL_EXPORT
00034 #else
00035 #  define TP_QT_EXPORT Q_DECL_IMPORT
00036 #endif
00037 
00038 #if !defined(Q_OS_WIN) && defined(QT_VISIBILITY_AVAILABLE)
00039 #  define TP_QT_NO_EXPORT __attribute__((visibility("hidden")))
00040 #endif
00041 
00042 #ifndef TP_QT_NO_EXPORT
00043 #  define TP_QT_NO_EXPORT
00044 #endif
00045 
00098 #ifndef TP_QT_DEPRECATED
00099 #  ifdef TP_QT_DEPRECATED_WARNINGS
00100 #    ifdef BUILDING_TP_QT
00101 #      define TP_QT_DEPRECATED
00102 #    else
00103 #      define TP_QT_DEPRECATED Q_DECL_DEPRECATED
00104 #    endif
00105 #  else
00106 #    define TP_QT_DEPRECATED
00107 #  endif
00108 #endif
00109 
00135 #ifndef TP_QT_EXPORT_DEPRECATED
00136 #  define TP_QT_EXPORT_DEPRECATED TP_QT_DEPRECATED TP_QT_EXPORT
00137 #endif
00138 
00139 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00630_source.html0000644000175200001440000001577512000060453023215 0ustar00collabora-develusers00000000000000 pending-captchas.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
pending-captchas.h
00001 
00023 #ifndef _TelepathyQt_pending_captcha_h_HEADER_GUARD_
00024 #define _TelepathyQt_pending_captcha_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/PendingOperation>
00031 
00032 #include <TelepathyQt/CaptchaAuthentication>
00033 
00034 #include <QPair>
00035 
00036 namespace Tp
00037 {
00038 
00039 class Captcha;
00040 
00041 class TP_QT_EXPORT PendingCaptchas : public PendingOperation
00042 {
00043     Q_OBJECT
00044     Q_DISABLE_COPY(PendingCaptchas)
00045 
00046 public:
00047     virtual ~PendingCaptchas();
00048 
00049     Captcha captcha() const;
00050     QList<Captcha> captchaList() const;
00051     bool requiresMultipleCaptchas() const;
00052 
00053 private Q_SLOTS:
00054     TP_QT_NO_EXPORT void onChannelInvalidated(Tp::DBusProxy *proxy,
00055             const QString &errorName, const QString &errorMessage);
00056     TP_QT_NO_EXPORT void onGetCaptchasWatcherFinished(QDBusPendingCallWatcher *watcher);
00057     TP_QT_NO_EXPORT void onGetCaptchaDataWatcherFinished(QDBusPendingCallWatcher *watcher);
00058 
00059 private:
00060     TP_QT_NO_EXPORT PendingCaptchas(const QDBusPendingCall &call,
00061             const QStringList &preferredMimeTypes,
00062             CaptchaAuthentication::ChallengeTypes preferredTypes,
00063             const CaptchaAuthenticationPtr &channel);
00064     TP_QT_NO_EXPORT PendingCaptchas(
00065             const QString &errorName, const QString &errorMessage,
00066             const CaptchaAuthenticationPtr &channel);
00067 
00068     struct Private;
00069     friend class CaptchaAuthentication;
00070     friend struct Private;
00071     Private *mPriv;
00072 };
00073 
00074 }
00075 
00076 #endif // TP_PENDING_CAPTCHA_H


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00245.html0000644000175200001440000001567512000060453021636 0ustar00collabora-develusers00000000000000 Tp::HandledChannelNotifier Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::HandledChannelNotifier Class Reference

The HandledChannelNotifier class can be used to keep track of channel() being re-requested. More...

#include <TelepathyQt/HandledChannelNotifier>

List of all members.

Signals

Public Member Functions

Protected Member Functions


Detailed Description

The HandledChannelNotifier class can be used to keep track of channel() being re-requested.

Instances of this class cannot be constructed directly; the only way to get one is trough PendingChannel.


Constructor & Destructor Documentation


Member Function Documentation

void Tp::HandledChannelNotifier::handledAgain ( const QDateTime &  userActionTime,
const Tp::ChannelRequestHints requestHints 
) [signal]
void Tp::HandledChannelNotifier::connectNotify ( const char *  signalName) [protected]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00166.html0000644000175200001440000006311012000060453021623 0ustar00collabora-develusers00000000000000 Tp::Client::ConnectionInterfaceAliasingInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceAliasingInterface Class Reference

#include <TelepathyQt/Connection>

Inherits Tp::AbstractInterface.

List of all members.

Public Slots

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Connection.Interface.Aliasing".


Constructor & Destructor Documentation

Tp::Client::ConnectionInterfaceAliasingInterface::ConnectionInterfaceAliasingInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceAliasingInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ConnectionInterfaceAliasingInterface::ConnectionInterfaceAliasingInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceAliasingInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ConnectionInterfaceAliasingInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ConnectionInterfaceAliasingInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ConnectionInterfaceAliasingInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Connection.Interface.Aliasing", which this class represents.

Returns:
The D-Bus interface name.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.
QDBusPendingReply<uint> Tp::Client::ConnectionInterfaceAliasingInterface::GetAliasFlags ( int  timeout = -1) [inline, slot]

Begins a call to the D-Bus method GetAliasFlags on the remote object.

Return a bitwise OR of flags detailing the behaviour of aliases on this connection.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
timeoutThe timeout in milliseconds.
Returns:

An integer with a bitwise OR of flags from ConnectionAliasFlags

QDBusPendingReply<QStringList> Tp::Client::ConnectionInterfaceAliasingInterface::RequestAliases ( const Tp::UIntList contacts,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method RequestAliases on the remote object.

Request the value of several contacts' aliases at once.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
contactsAn array of handles representing contacts
timeoutThe timeout in milliseconds.
Returns:

A list of aliases in the same order as the contact handles

QDBusPendingReply<Tp::AliasMap> Tp::Client::ConnectionInterfaceAliasingInterface::GetAliases ( const Tp::UIntList contacts,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method GetAliases on the remote object.

Request the value of several contacts' aliases at once. This SHOULD only return cached aliases, falling back on the contact identifier (i.e. the string corresponding to the handle) if none is present. Also if there was no cached alias, a request SHOULD be started of which the result is later signalled by AliasesChanged.

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
contactsAn array of handles representing contacts
timeoutThe timeout in milliseconds.
Returns:

A dictionary mapping contact handles to aliases

QDBusPendingReply Tp::Client::ConnectionInterfaceAliasingInterface::SetAliases ( const Tp::AliasMap aliases,
int  timeout = -1 
) [inline, slot]

Begins a call to the D-Bus method SetAliases on the remote object.

Request that the alias of the given contact be changed. Success will be indicated by emitting an AliasesChanged signal. On connections where the CONNECTION_ALIAS_FLAG_USER_SET flag is not set, this method will only ever succeed if the contact is the user's own handle (as returned by Connection.GetSelfHandle).

Note that timeout is ignored as of now. It will be used once http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed.

Parameters:
aliasesA dictionary mapping integer handles of contacts to strings of the new alias to set.
timeoutThe timeout in milliseconds.

Represents the signal AliasesChanged on the remote object.

Signal emitted when a contact's alias (or that of the user) is changed.

Parameters:
aliases An array containing structs of:
  • the handle representing the contact
  • the new alias
void Tp::Client::ConnectionInterfaceAliasingInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00474_source.html0000644000175200001440000013106112000060453023206 0ustar00collabora-develusers00000000000000 channel-factory.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
channel-factory.h
00001 
00023 #ifndef _TelepathyQt_channel_factory_h_HEADER_GUARD_
00024 #define _TelepathyQt_channel_factory_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/DBusProxyFactory>
00031 #include <TelepathyQt/SharedPtr>
00032 #include <TelepathyQt/Types>
00033 
00034 // For Q_DISABLE_COPY
00035 #include <QtGlobal>
00036 #include <QString>
00037 #include <QVariantMap>
00038 
00039 class QDBusConnection;
00040 
00041 namespace Tp
00042 {
00043 
00044 class ChannelClassSpec;
00045 
00046 class TP_QT_EXPORT ChannelFactory : public DBusProxyFactory
00047 {
00048     Q_OBJECT
00049     Q_DISABLE_COPY(ChannelFactory)
00050 
00051 public:
00052 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00053     struct TP_QT_EXPORT Constructor : public RefCounted
00054     {
00055         virtual ~Constructor() {}
00056 
00057         virtual ChannelPtr construct(const ConnectionPtr &conn, const QString &objectPath,
00058                 const QVariantMap &immutableProperties) const = 0;
00059     };
00060     typedef SharedPtr<Constructor> ConstructorPtr;
00061     typedef SharedPtr<const Constructor> ConstructorConstPtr;
00062 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
00063 
00064     static ChannelFactoryPtr create(const QDBusConnection &bus);
00065 
00066     virtual ~ChannelFactory();
00067 
00068     Features featuresForTextChats(const QVariantMap &additionalProps = QVariantMap()) const;
00069     void addFeaturesForTextChats(const Features &features,
00070             const QVariantMap &additionalProps = QVariantMap());
00071 
00072     ConstructorConstPtr constructorForTextChats(
00073             const QVariantMap &additionalProps = QVariantMap()) const;
00074 
00075     template<typename Subclass>
00076     void setSubclassForTextChats(const QVariantMap &additionalProps = QVariantMap())
00077     {
00078         setConstructorForTextChats(SubclassCtor<Subclass>::create(), additionalProps);
00079     }
00080 
00081     void setConstructorForTextChats(const ConstructorConstPtr &ctor,
00082             const QVariantMap &additionalProps = QVariantMap());
00083 
00084     Features featuresForTextChatrooms(const QVariantMap &additionalProps = QVariantMap()) const;
00085     void addFeaturesForTextChatrooms(const Features &features,
00086             const QVariantMap &additionalProps = QVariantMap());
00087 
00088     ConstructorConstPtr constructorForTextChatrooms(
00089             const QVariantMap &additionalProps = QVariantMap()) const;
00090 
00091     template<typename Subclass>
00092     void setSubclassForTextChatrooms(const QVariantMap &additionalProps = QVariantMap())
00093     {
00094         setConstructorForTextChatrooms(SubclassCtor<Subclass>::create(), additionalProps);
00095     }
00096 
00097     void setConstructorForTextChatrooms(const ConstructorConstPtr &ctor,
00098             const QVariantMap &additionalProps = QVariantMap());
00099 
00100     Features featuresForCalls(const QVariantMap &additionalProps = QVariantMap()) const;
00101     void addFeaturesForCalls(const Features &features,
00102             const QVariantMap &additionalProps = QVariantMap());
00103 
00104     template<typename Subclass>
00105     void setSubclassForCalls(const QVariantMap &additionalProps = QVariantMap())
00106     {
00107         setConstructorForCalls(SubclassCtor<Subclass>::create(), additionalProps);
00108     }
00109 
00110     void setConstructorForCalls(const ConstructorConstPtr &ctor,
00111             const QVariantMap &additionalProps = QVariantMap());
00112 
00113     TP_QT_DEPRECATED Features featuresForStreamedMediaCalls(const QVariantMap &additionalProps = QVariantMap()) const;
00114     TP_QT_DEPRECATED void addFeaturesForStreamedMediaCalls(const Features &features,
00115             const QVariantMap &additionalProps = QVariantMap());
00116 
00117     TP_QT_DEPRECATED ConstructorConstPtr constructorForStreamedMediaCalls(
00118             const QVariantMap &additionalProps = QVariantMap()) const;
00119 
00120     template<typename Subclass>
00121     TP_QT_DEPRECATED void setSubclassForStreamedMediaCalls(const QVariantMap &additionalProps = QVariantMap())
00122     {
00123         setConstructorForStreamedMediaCalls(SubclassCtor<Subclass>::create(), additionalProps);
00124     }
00125 
00126     TP_QT_DEPRECATED void setConstructorForStreamedMediaCalls(const ConstructorConstPtr &ctor,
00127             const QVariantMap &additionalProps = QVariantMap());
00128 
00129     Features featuresForRoomLists(const QVariantMap &additionalProps = QVariantMap()) const;
00130     void addFeaturesForRoomLists(const Features &features,
00131             const QVariantMap &additionalProps = QVariantMap());
00132 
00133     ConstructorConstPtr constructorForRoomLists(
00134             const QVariantMap &additionalProps = QVariantMap()) const;
00135 
00136     template<typename Subclass>
00137     void setSubclassForRoomLists(const QVariantMap &additionalProps = QVariantMap())
00138     {
00139         setConstructorForRoomLists(SubclassCtor<Subclass>::create(), additionalProps);
00140     }
00141 
00142     void setConstructorForRoomLists(const ConstructorConstPtr &ctor,
00143             const QVariantMap &additionalProps = QVariantMap());
00144 
00145     Features featuresForOutgoingFileTransfers(const QVariantMap &additionalProps = QVariantMap()) const;
00146     void addFeaturesForOutgoingFileTransfers(const Features &features,
00147             const QVariantMap &additionalProps = QVariantMap());
00148 
00149     ConstructorConstPtr constructorForOutgoingFileTransfers(
00150             const QVariantMap &additionalProps = QVariantMap()) const;
00151 
00152     template<typename Subclass>
00153     void setSubclassForOutgoingFileTransfers(const QVariantMap &additionalProps = QVariantMap())
00154     {
00155         setConstructorForOutgoingFileTransfers(SubclassCtor<Subclass>::create(), additionalProps);
00156     }
00157 
00158     void setConstructorForOutgoingFileTransfers(const ConstructorConstPtr &ctor,
00159             const QVariantMap &additionalProps = QVariantMap());
00160 
00161     Features featuresForIncomingFileTransfers(const QVariantMap &additionalProps = QVariantMap()) const;
00162     void addFeaturesForIncomingFileTransfers(const Features &features,
00163             const QVariantMap &additionalProps = QVariantMap());
00164 
00165     ConstructorConstPtr constructorForIncomingFileTransfers(
00166             const QVariantMap &additionalProps = QVariantMap()) const;
00167 
00168     template<typename Subclass>
00169     void setSubclassForIncomingFileTransfers(const QVariantMap &additionalProps = QVariantMap())
00170     {
00171         setConstructorForIncomingFileTransfers(SubclassCtor<Subclass>::create(), additionalProps);
00172     }
00173 
00174     void setConstructorForIncomingFileTransfers(const ConstructorConstPtr &ctor,
00175             const QVariantMap &additionalProps = QVariantMap());
00176 
00177     Features featuresForOutgoingStreamTubes(const QVariantMap &additionalProps = QVariantMap()) const;
00178     void addFeaturesForOutgoingStreamTubes(const Features &features,
00179             const QVariantMap &additionalProps = QVariantMap());
00180 
00181     ConstructorConstPtr constructorForOutgoingStreamTubes(
00182             const QVariantMap &additionalProps = QVariantMap()) const;
00183 
00184     template<typename Subclass>
00185     void setSubclassForOutgoingStreamTubes(const QVariantMap &additionalProps = QVariantMap())
00186     {
00187         setConstructorForOutgoingStreamTubes(SubclassCtor<Subclass>::create(), additionalProps);
00188     }
00189 
00190     void setConstructorForOutgoingStreamTubes(const ConstructorConstPtr &ctor,
00191             const QVariantMap &additionalProps = QVariantMap());
00192 
00193     Features featuresForIncomingStreamTubes(const QVariantMap &additionalProps = QVariantMap()) const;
00194     void addFeaturesForIncomingStreamTubes(const Features &features,
00195             const QVariantMap &additionalProps = QVariantMap());
00196 
00197     ConstructorConstPtr constructorForIncomingStreamTubes(
00198             const QVariantMap &additionalProps = QVariantMap()) const;
00199 
00200     template<typename Subclass>
00201     void setSubclassForIncomingStreamTubes(const QVariantMap &additionalProps = QVariantMap())
00202     {
00203         setConstructorForIncomingStreamTubes(SubclassCtor<Subclass>::create(), additionalProps);
00204     }
00205 
00206     void setConstructorForIncomingStreamTubes(const ConstructorConstPtr &ctor,
00207             const QVariantMap &additionalProps = QVariantMap());
00208 
00209     Features featuresForOutgoingRoomStreamTubes(const QVariantMap &additionalProps = QVariantMap()) const;
00210     void addFeaturesForOutgoingRoomStreamTubes(const Features &features,
00211             const QVariantMap &additionalProps = QVariantMap());
00212 
00213     ConstructorConstPtr constructorForOutgoingRoomStreamTubes(
00214             const QVariantMap &additionalProps = QVariantMap()) const;
00215 
00216     template<typename Subclass>
00217     void setSubclassForOutgoingRoomStreamTubes(const QVariantMap &additionalProps = QVariantMap())
00218     {
00219         setConstructorForOutgoingRoomStreamTubes(SubclassCtor<Subclass>::create(), additionalProps);
00220     }
00221 
00222     void setConstructorForOutgoingRoomStreamTubes(const ConstructorConstPtr &ctor,
00223             const QVariantMap &additionalProps = QVariantMap());
00224 
00225     Features featuresForIncomingRoomStreamTubes(const QVariantMap &additionalProps = QVariantMap()) const;
00226     void addFeaturesForIncomingRoomStreamTubes(const Features &features,
00227             const QVariantMap &additionalProps = QVariantMap());
00228 
00229     ConstructorConstPtr constructorForIncomingRoomStreamTubes(
00230             const QVariantMap &additionalProps = QVariantMap()) const;
00231 
00232     template<typename Subclass>
00233     void setSubclassForIncomingRoomStreamTubes(const QVariantMap &additionalProps = QVariantMap())
00234     {
00235         setConstructorForIncomingRoomStreamTubes(SubclassCtor<Subclass>::create(), additionalProps);
00236     }
00237 
00238     void setConstructorForIncomingRoomStreamTubes(const ConstructorConstPtr &ctor,
00239             const QVariantMap &additionalProps = QVariantMap());
00240 
00241     Features featuresForOutgoingDBusTubes(const QVariantMap &additionalProps = QVariantMap()) const;
00242     void addFeaturesForOutgoingDBusTubes(const Features &features,
00243             const QVariantMap &additionalProps = QVariantMap());
00244 
00245     ConstructorConstPtr constructorForOutgoingDBusTubes(
00246             const QVariantMap &additionalProps = QVariantMap()) const;
00247 
00248     template<typename Subclass>
00249     void setSubclassForOutgoingDBusTubes(const QVariantMap &additionalProps = QVariantMap())
00250     {
00251         setConstructorForOutgoingDBusTubes(SubclassCtor<Subclass>::create(), additionalProps);
00252     }
00253 
00254     void setConstructorForOutgoingDBusTubes(const ConstructorConstPtr &ctor,
00255             const QVariantMap &additionalProps = QVariantMap());
00256 
00257     Features featuresForIncomingDBusTubes(const QVariantMap &additionalProps = QVariantMap()) const;
00258     void addFeaturesForIncomingDBusTubes(const Features &features,
00259             const QVariantMap &additionalProps = QVariantMap());
00260 
00261     ConstructorConstPtr constructorForIncomingDBusTubes(
00262             const QVariantMap &additionalProps = QVariantMap()) const;
00263 
00264     template<typename Subclass>
00265     void setSubclassForIncomingDBusTubes(const QVariantMap &additionalProps = QVariantMap())
00266     {
00267         setConstructorForIncomingDBusTubes(SubclassCtor<Subclass>::create(), additionalProps);
00268     }
00269 
00270     void setConstructorForIncomingDBusTubes(const ConstructorConstPtr &ctor,
00271             const QVariantMap &additionalProps = QVariantMap());
00272 
00273     Features featuresForOutgoingRoomDBusTubes(const QVariantMap &additionalProps = QVariantMap()) const;
00274     void addFeaturesForOutgoingRoomDBusTubes(const Features &features,
00275             const QVariantMap &additionalProps = QVariantMap());
00276 
00277     ConstructorConstPtr constructorForOutgoingRoomDBusTubes(
00278             const QVariantMap &additionalProps = QVariantMap()) const;
00279 
00280     template<typename Subclass>
00281     void setSubclassForOutgoingRoomDBusTubes(const QVariantMap &additionalProps = QVariantMap())
00282     {
00283         setConstructorForOutgoingRoomDBusTubes(SubclassCtor<Subclass>::create(), additionalProps);
00284     }
00285 
00286     void setConstructorForOutgoingRoomDBusTubes(const ConstructorConstPtr &ctor,
00287             const QVariantMap &additionalProps = QVariantMap());
00288 
00289     Features featuresForIncomingRoomDBusTubes(const QVariantMap &additionalProps = QVariantMap()) const;
00290     void addFeaturesForIncomingRoomDBusTubes(const Features &features,
00291             const QVariantMap &additionalProps = QVariantMap());
00292 
00293     ConstructorConstPtr constructorForIncomingRoomDBusTubes(
00294             const QVariantMap &additionalProps = QVariantMap()) const;
00295 
00296     template<typename Subclass>
00297     void setSubclassForIncomingRoomDBusTubes(const QVariantMap &additionalProps = QVariantMap())
00298     {
00299         setConstructorForIncomingRoomDBusTubes(SubclassCtor<Subclass>::create(), additionalProps);
00300     }
00301 
00302     void setConstructorForIncomingRoomDBusTubes(const ConstructorConstPtr &ctor,
00303             const QVariantMap &additionalProps = QVariantMap());
00304 
00305     Features featuresForContactSearches(const QVariantMap &additionalProps = QVariantMap()) const;
00306     void addFeaturesForContactSearches(const Features &features,
00307             const QVariantMap &additionalProps = QVariantMap());
00308 
00309     ConstructorConstPtr constructorForContactSearches(
00310             const QVariantMap &additionalProps = QVariantMap()) const;
00311 
00312     template<typename Subclass>
00313     void setSubclassForContactSearches(const QVariantMap &additionalProps = QVariantMap())
00314     {
00315         setConstructorForContactSearches(SubclassCtor<Subclass>::create(), additionalProps);
00316     }
00317 
00318     void setConstructorForContactSearches(const ConstructorConstPtr &ctor,
00319             const QVariantMap &additionalProps = QVariantMap());
00320 
00321     Features featuresForServerAuthentication(const QVariantMap &additionalProps = QVariantMap()) const;
00322     void addFeaturesForServerAuthentication(const Features &features,
00323             const QVariantMap &additionalProps = QVariantMap());
00324 
00325     ConstructorConstPtr constructorForServerAuthentication(
00326             const QVariantMap &additionalProps = QVariantMap()) const;
00327 
00328     template<typename Subclass>
00329     void setSubclassForServerAuthentication(const QVariantMap &additionalProps = QVariantMap())
00330     {
00331         setConstructorForServerAuthentication(SubclassCtor<Subclass>::create(), additionalProps);
00332     }
00333 
00334     void setConstructorForServerAuthentication(const ConstructorConstPtr &ctor,
00335             const QVariantMap &additionalProps = QVariantMap());
00336 
00337     Features commonFeatures() const;
00338     void addCommonFeatures(const Features &features);
00339 
00340     ConstructorConstPtr fallbackConstructor() const;
00341 
00342     template <typename Subclass>
00343     void setFallbackSubclass()
00344     {
00345         setFallbackConstructor(SubclassCtor<Subclass>::create());
00346     }
00347 
00348     void setFallbackConstructor(const ConstructorConstPtr &ctor);
00349 
00350     Features featuresFor(const ChannelClassSpec &channelClass) const;
00351     void addFeaturesFor(const ChannelClassSpec &channelClass, const Features &features);
00352 
00353     template <typename Subclass>
00354     void setSubclassFor(const ChannelClassSpec &channelClass)
00355     {
00356         setConstructorFor(channelClass, SubclassCtor<Subclass>::create());
00357     }
00358 
00359     ConstructorConstPtr constructorFor(const ChannelClassSpec &channelClass) const;
00360     void setConstructorFor(const ChannelClassSpec &channelClass, const ConstructorConstPtr &ctor);
00361 
00362     PendingReady *proxy(const ConnectionPtr &connection, const QString &channelPath,
00363             const QVariantMap &immutableProperties) const;
00364 
00365 protected:
00366     ChannelFactory(const QDBusConnection &bus);
00367 
00368 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00369     template <typename Subclass>
00370     struct SubclassCtor : public Constructor
00371     {
00372         static ConstructorPtr create()
00373         {
00374             return ConstructorPtr(new SubclassCtor<Subclass>());
00375         }
00376 
00377         virtual ~SubclassCtor() {}
00378 
00379         ChannelPtr construct(const ConnectionPtr &conn, const QString &objectPath,
00380                 const QVariantMap &immutableProperties) const
00381         {
00382             return Subclass::create(conn, objectPath, immutableProperties);
00383         }
00384     };
00385 #endif /* DOXYGEN_SHOULD_SKIP_THIS */
00386 
00387     virtual QString finalBusNameFrom(const QString &uniqueOrWellKnown) const;
00388     // Nothing we'd like to prepare()
00389     virtual Features featuresFor(const DBusProxyPtr &proxy) const;
00390 
00391 private:
00392     struct Private;
00393     Private *mPriv;
00394 };
00395 
00396 } // Tp
00397 
00398 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_vars_0x73.html0000644000175200001440000000651112000060453024634 0ustar00collabora-develusers00000000000000 Class Members - Variables
   Home · All Classes · All Namespaces · Modules · Functions · Files


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00184.html0000644000175200001440000004544312000060453021634 0ustar00collabora-develusers00000000000000 Tp::Client::ConnectionInterfaceServicePointInterface Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceServicePointInterface Class Reference

#include <TelepathyQt/Connection>

Inherits Tp::AbstractInterface.

List of all members.

Signals

Public Member Functions

Static Public Member Functions

Protected Member Functions


Detailed Description

Proxy class providing a 1:1 mapping of the D-Bus interface "org.freedesktop.Telepathy.Connection.Interface.ServicePoint".


Constructor & Destructor Documentation

Tp::Client::ConnectionInterfaceServicePointInterface::ConnectionInterfaceServicePointInterface ( const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceServicePointInterface associated with the given object on the session bus.

Parameters:
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.
Tp::Client::ConnectionInterfaceServicePointInterface::ConnectionInterfaceServicePointInterface ( const QDBusConnection &  connection,
const QString &  busName,
const QString &  objectPath,
QObject *  parent = 0 
)

Creates a ConnectionInterfaceServicePointInterface associated with the given object on the given bus.

Parameters:
connectionThe bus via which the object can be reached.
busNameName of the service the object is on.
objectPathPath to the object on the service.
parentPassed to the parent class constructor.

Creates a ConnectionInterfaceServicePointInterface associated with the same object as the given proxy.

Parameters:
proxyThe proxy to use. It will also be the QObject::parent() for this object.

Creates a ConnectionInterfaceServicePointInterface associated with the same object as the given proxy. Additionally, the created proxy will have the same parent as the given proxy.

Parameters:
mainInterfaceThe proxy to use.

Creates a ConnectionInterfaceServicePointInterface associated with the same object as the given proxy. However, a different parent object can be specified.

Parameters:
mainInterfaceThe proxy to use.
parentPassed to the parent class constructor.

Member Function Documentation

Returns the name of the interface "org.freedesktop.Telepathy.Connection.Interface.ServicePoint", which this class represents.

Returns:
The D-Bus interface name.

Asynchronous getter for the remote object property KnownServicePoints of type Tp::ServicePointInfoList.

The list of all (known) service points.
Returns:
A pending variant which will emit finished when the property has been retrieved.

Request all of the DBus properties on the interface.

Returns:
A pending variant map which will emit finished when the properties have been retrieved.

Represents the signal ServicePointsChanged on the remote object.

Emitted when the list of known service points (or their IDs) has changed.

Parameters:
servicePoints

The new value of KnownServicePoints .

void Tp::Client::ConnectionInterfaceServicePointInterface::invalidate ( Tp::DBusProxy proxy,
const QString &  error,
const QString &  message 
) [protected, virtual]

Reimplemented from Tp::AbstractInterface.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00382.html0000644000175200001440000005642112000060453021632 0ustar00collabora-develusers00000000000000 Tp::SimpleObserver Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files

The SimpleObserver class provides an easy way to track channels in an account and can be optionally filtered by a contact. More...

#include <TelepathyQt/SimpleObserver>

Inherits Tp::RefCounted.

List of all members.

Signals

Public Member Functions

Static Public Member Functions


Detailed Description

The SimpleObserver class provides an easy way to track channels in an account and can be optionally filtered by a contact.


Constructor & Destructor Documentation

Class destructor.


Member Function Documentation

SimpleObserverPtr Tp::SimpleObserver::create ( const AccountPtr &  account,
const ChannelClassSpecList channelFilter,
const QList< ChannelClassFeatures > &  extraChannelFeatures = QList<ChannelClassFeatures>() 
) [static]

Create a new SimpleObserver object.

Events will be signalled for all channels in account that match channelFilter for all contacts.

Parameters:
channelFilterA specification of the channels in which this observer is interested.
accountThe account used to listen to events.
extraChannelFeaturesExtra channel features to be enabled. All channels emitted in newChannels() will have the extra features that match their immutable properties enabled.
Returns:
An SimpleObserverPtr object pointing to the newly created SimpleObserver object.
SimpleObserverPtr Tp::SimpleObserver::create ( const AccountPtr &  account,
const ChannelClassSpecList channelFilter,
const ContactPtr &  contact,
const QList< ChannelClassFeatures > &  extraChannelFeatures = QList<ChannelClassFeatures>() 
) [static]

Create a new SimpleObserver object.

Events will be signalled for all channels in account established with contact, if not null, and that match channelFilter.

Parameters:
channelFilterA specification of the channels in which this observer is interested.
accountThe account used to listen to events.
contactThe contact used to filter events.
extraChannelFeaturesExtra channel features to be enabled. All channels emitted in newChannels() will have the extra features that match their immutable properties enabled.
Returns:
An SimpleObserverPtr object pointing to the newly created SimpleObserver object.
SimpleObserverPtr Tp::SimpleObserver::create ( const AccountPtr &  account,
const ChannelClassSpecList channelFilter,
const QString &  contactIdentifier,
const QList< ChannelClassFeatures > &  extraChannelFeatures = QList<ChannelClassFeatures>() 
) [static]

Create a new SimpleObserver object.

Events will be signalled for all channels in account established with a contact identified by contactIdentifier, if non-empty, and that match channelFilter.

Parameters:
channelFilterA specification of the channels in which this observer is interested.
accountThe account used to listen to events.
contactIdentifierThe identifier of the contact used to filter events.
extraChannelFeaturesExtra channel features to be enabled. All channels emitted in newChannels() will have the extra features that match their immutable properties enabled.
Returns:
An SimpleObserverPtr object pointing to the newly created SimpleObserver object.
AccountPtr Tp::SimpleObserver::account ( ) const

Return the account used to listen to events.

Returns:
A pointer to the Account object.

Return a specification of the channels that this observer is interested.

Returns:
The specification of the channels as a list of ChannelClassSpec objects.

Return the identifier of the contact used to filter events, or an empty string if none was provided at construction.

Returns:
The identifier of the contact.

Return the extra channel features to be enabled based on the channels immutable properties.

Returns:
The features as a list of ChannelClassFeatures objects.
QList< ChannelPtr > Tp::SimpleObserver::channels ( ) const

Return the channels being observed.

Returns:
A list of pointers to Channel objects.
void Tp::SimpleObserver::newChannels ( const QList< Tp::ChannelPtr > &  channels) [signal]

Emitted whenever new channels that match this observer's criteria are created.

Parameters:
channelsThe new channels.
void Tp::SimpleObserver::channelInvalidated ( const Tp::ChannelPtr &  channel,
const QString &  errorName,
const QString &  errorMessage 
) [signal]

Emitted whenever a channel that is being observed is invalidated.

Parameters:
channelThe channel that was invalidated.
errorNameA D-Bus error name (a string in a subset of ASCII, prefixed with a reversed domain name).
errorMessageA debugging message associated with the error.


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00193.html0000644000175200001440000001271412000060453021627 0ustar00collabora-develusers00000000000000 Tp::ContactCapabilitiesMap Struct Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactCapabilitiesMap Struct Reference

#include <TelepathyQt/Types>

List of all members.

Public Member Functions


Detailed Description

Mapping type generated from the specification. Convertible with QMap<uint, RequestableChannelClassList>, but needed to have a discrete type in the Qt type system.

A mapping from contact handle to their capabilities.


Constructor & Destructor Documentation


Member Function Documentation

ContactCapabilitiesMap& Tp::ContactCapabilitiesMap::operator= ( const QMap< uint, RequestableChannelClassList > &  a) [inline]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01087.html0000644000175200001440000002314312000060453021630 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ChannelInterfaceDTMFInterface Member List
This is the complete list of members for Tp::Client::ChannelInterfaceDTMFInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ChannelInterfaceDTMFInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfaceDTMFInterface
ChannelInterfaceDTMFInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ChannelInterfaceDTMFInterface
ChannelInterfaceDTMFInterface(Tp::DBusProxy *proxy)Tp::Client::ChannelInterfaceDTMFInterface
ChannelInterfaceDTMFInterface(const Tp::Client::ChannelInterface &mainInterface)Tp::Client::ChannelInterfaceDTMFInterface [explicit]
ChannelInterfaceDTMFInterface(const Tp::Client::ChannelInterface &mainInterface, QObject *parent)Tp::Client::ChannelInterfaceDTMFInterface
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ChannelInterfaceDTMFInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
MultipleTones(const QString &tones, int timeout=-1)Tp::Client::ChannelInterfaceDTMFInterface [inline, slot]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ChannelInterfaceDTMFInterface [inline]
requestPropertyCurrentlySendingTones() const Tp::Client::ChannelInterfaceDTMFInterface [inline]
requestPropertyDeferredTones() const Tp::Client::ChannelInterfaceDTMFInterface [inline]
requestPropertyInitialTones() const Tp::Client::ChannelInterfaceDTMFInterface [inline]
SendingTones(const QString &tones)Tp::Client::ChannelInterfaceDTMFInterface [signal]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
StartTone(uint streamID, uchar event, int timeout=-1)Tp::Client::ChannelInterfaceDTMFInterface [inline, slot]
staticInterfaceName()Tp::Client::ChannelInterfaceDTMFInterface [inline, static]
StoppedTones(bool cancelled)Tp::Client::ChannelInterfaceDTMFInterface [signal]
StopTone(uint streamID, int timeout=-1)Tp::Client::ChannelInterfaceDTMFInterface [inline, slot]
TonesDeferred(const QString &tones)Tp::Client::ChannelInterfaceDTMFInterface [signal]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00201.html0000644000175200001440000027435412000060453021627 0ustar00collabora-develusers00000000000000 Tp::ContactManager Class Reference
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::ContactManager Class Reference

The ContactManager class is responsible for managing contacts. More...

#include <TelepathyQt/ContactManager>

Inherits Tp::Object.

List of all members.

Signals

Public Member Functions


Detailed Description

The ContactManager class is responsible for managing contacts.

See Asynchronous Object Model, Shared Pointer Usage


Constructor & Destructor Documentation

Class destructor.


Member Function Documentation

ConnectionPtr Tp::ContactManager::connection ( ) const

Return the connection owning this ContactManager.

Returns:
A pointer to the Connection object.

Return the features that are expected to work on contacts on this ContactManager connection.

This method requires Connection::FeatureCore to be ready.

Returns:
The supported features as a set of Feature objects.

Return the progress made in retrieving the contact list.

Change notification is via the stateChanged() signal.

This method requires Connection::FeatureRoster to be ready.

Returns:
The contact list state as ContactListState.
See also:
stateChanged()

Return a list of relevant contacts (a reasonable guess as to what should be displayed as "the contact list").

This may include any or all of: contacts whose presence the user receives, contacts who are allowed to see the user's presence, contacts stored in some persistent contact list on the server, contacts who the user has blocked from communicating with them, or contacts who are relevant in some other way.

User interfaces displaying a contact list will probably want to filter this list and display some suitable subset of it.

On protocols where there is no concept of presence or a centrally-stored contact list (like IRC), this method may return an empty list.

Change notification is via the allKnownContactsChanged() signal.

This method requires Connection::FeatureRoster to be ready.

Returns:
A set of pointers to the Contact objects.
See also:
allKnownContactsChanged()
QStringList Tp::ContactManager::allKnownGroups ( ) const

Return a list of user-defined contact list groups' names.

Change notification is via the groupAdded(), groupRemoved() and groupRenamed() signals.

This method requires Connection::FeatureRosterGroups to be ready.

Returns:
The list of user-defined contact list groups names.
See also:
groupMembersChanged(), groupAdded(), groupRemoved(), groupRenamed()
PendingOperation * Tp::ContactManager::addGroup ( const QString &  group)

Attempt to add an user-defined contact list group named group.

On some protocols (e.g. XMPP) empty groups are not represented on the server, so disconnecting from the server and reconnecting might cause empty groups to vanish.

The returned pending operation will finish successfully if the group already exists.

Change notification is via the groupAdded() signal.

This method requires Connection::FeatureRosterGroups to be ready.

Parameters:
groupThe group name.
Returns:
A PendingOperation which will emit PendingOperation::finished when an attempt has been made to add an user-defined contact list group.
See also:
allKnownGroups(), groupAdded(), addContactsToGroup()
PendingOperation * Tp::ContactManager::removeGroup ( const QString &  group)

Attempt to remove an user-defined contact list group named group.

Change notification is via the groupRemoved() signal.

This method requires Connection::FeatureRosterGroups to be ready.

Parameters:
groupThe group name.
Returns:
A PendingOperation which will emit PendingOperation::finished() when an attempt has been made to remove an user-defined contact list group.
See also:
allKnownGroups(), groupRemoved(), removeContactsFromGroup()
Contacts Tp::ContactManager::groupContacts ( const QString &  group) const

Return the contacts in the given user-defined contact list group named group.

Change notification is via the groupMembersChanged() signal.

This method requires Connection::FeatureRosterGroups to be ready.

Parameters:
groupThe group name.
Returns:
A set of pointers to the Contact objects, or an empty set if the group does not exist.
See also:
allKnownGroups(), groupMembersChanged()
PendingOperation * Tp::ContactManager::addContactsToGroup ( const QString &  group,
const QList< ContactPtr > &  contacts 
)

Attempt to add the given contacts to the user-defined contact list group named group.

Change notification is via the groupMembersChanged() signal.

This method requires Connection::FeatureRosterGroups to be ready.

Parameters:
groupThe group name.
contactsContacts to add.
Returns:
A PendingOperation which will emit PendingOperation::finished() when an attempt has been made to add the contacts to the user-defined contact list group.
See also:
groupMembersChanged(), groupContacts()
PendingOperation * Tp::ContactManager::removeContactsFromGroup ( const QString &  group,
const QList< ContactPtr > &  contacts 
)

Attempt to remove the given contacts from the user-defined contact list group named group.

Change notification is via the groupMembersChanged() signal.

This method requires Connection::FeatureRosterGroups to be ready.

Parameters:
groupThe group name.
contactsContacts to remove.
Returns:
A PendingOperation which will PendingOperation::finished when an attempt has been made to remove the contacts from the user-defined contact list group.
See also:
groupMembersChanged(), groupContacts()

Return whether subscribing to additional contacts' presence is supported.

In some protocols, the list of contacts whose presence can be seen is fixed, so we can't subscribe to the presence of additional contacts.

Notably, in link-local XMPP, you can see the presence of everyone on the local network, and trying to add more subscriptions would be meaningless.

This method requires Connection::FeatureRoster to be ready.

Returns:
true if Contact::requestPresenceSubscription() and requestPresenceSubscription() are likely to succeed, false otherwise.
See also:
requestPresenceSubscription(), subscriptionRequestHasMessage()

Return whether a message can be sent when subscribing to contacts' presence.

If no message will actually be sent, user interfaces should avoid prompting the user for a message, and use an empty string for the message argument.

This method requires Connection::FeatureRoster to be ready.

Returns:
true if the message argument to Contact::requestPresenceSubscription() and requestPresenceSubscription() is actually used, false otherwise.
See also:
canRemovePresenceSubscription(), requestPresenceSubscription()
PendingOperation * Tp::ContactManager::requestPresenceSubscription ( const QList< ContactPtr > &  contacts,
const QString &  message = QString() 
)

Attempt to subscribe to the presence of the given contacts.

This operation is sometimes called "adding contacts to the buddy list" or "requesting authorization".

On most protocols, the contacts will need to give permission before the user will be able to receive their presence: if so, they will be in presence state Contact::PresenceStateAsk until they authorize or deny the request.

The returned PendingOperation will return successfully when a request to subscribe to the contacts' presence has been submitted, or fail if this cannot happen. In particular, it does not wait for the contacts to give permission for the presence subscription.

This method requires Connection::FeatureRoster to be ready.

Parameters:
contactsContacts whose presence is desired
messageA message from the user which is either transmitted to the contacts, or ignored, depending on the protocol
Returns:
A PendingOperation which will PendingOperation::finished() when an attempt has been made to subscribe to the contacts' presence.
See also:
canRequestPresenceSubscription(), subscriptionRequestHasMessage()

Return whether the user can stop receiving the presence of a contact whose presence they have subscribed to.

This method requires Connection::FeatureRoster to be ready.

Returns:
true if Contact::removePresenceSubscription() and removePresenceSubscription() are likely to succeed for contacts with subscription state Contact::PresenceStateYes, false otherwise.
See also:
removePresenceSubscription(), subscriptionRemovalHasMessage()

Return whether a message can be sent when removing an existing subscription to the presence of a contact.

If no message will actually be sent, user interfaces should avoid prompting the user for a message, and use an empty string for the message argument.

This method requires Connection::FeatureRoster to be ready.

Returns:
true if the message argument to Contact::removePresenceSubscription() and removePresenceSubscription() is actually used, for contacts with subscription state Contact::PresenceStateYes, false otherwise.
See also:
canRemovePresencePublication(), removePresenceSubscription()

Return whether the user can cancel a request to subscribe to a contact's presence before that contact has responded.

This method requires Connection::FeatureRoster to be ready.

Returns:
true if Contact::removePresenceSubscription() and removePresenceSubscription() are likely to succeed for contacts with subscription state Contact::PresenceStateAsk, false otherwise.
See also:
removePresenceSubscription(), subscriptionRescindingHasMessage()

Return whether a message can be sent when cancelling a request to subscribe to the presence of a contact.

If no message will actually be sent, user interfaces should avoid prompting the user for a message, and use an empty string for the message argument.

This method requires Connection::FeatureRoster to be ready.

Returns:
true if the message argument to Contact::removePresenceSubscription() and removePresenceSubscription() is actually used, for contacts with subscription state Contact::PresenceStateAsk, false otherwise.
See also:
canRescindPresenceSubscriptionRequest(), removePresenceSubscription()
PendingOperation * Tp::ContactManager::removePresenceSubscription ( const QList< ContactPtr > &  contacts,
const QString &  message = QString() 
)

Attempt to stop receiving the presence of the given contacts, or cancel a request to subscribe to their presence that was previously sent.

This method requires Connection::FeatureRoster to be ready.

Parameters:
contactsContacts whose presence is no longer required A message from the user which is either transmitted to the contacts, or ignored, depending on the protocol
Returns:
A PendingOperation which will PendingOperation::finished() when an attempt has been made to remove any subscription to the contacts' presence.
See also:
canRemovePresenceSubscription(), canRescindPresenceSubscriptionRequest(), subscriptionRemovalHasMessage(), subscriptionRescindingHasMessage()

Return true if the publication of the user's presence to contacts can be authorized.

This is always true, unless the protocol has no concept of authorizing publication (in which case contacts' publication status can never be Contact::PresenceStateAsk).

This method requires Connection::FeatureRoster to be ready.

Returns:
true if Contact::authorizePresencePublication() and authorizePresencePublication() are likely to succeed for contacts with subscription state Contact::PresenceStateAsk, false otherwise.
See also:
publicationAuthorizationHasMessage(), authorizePresencePublication()

Return whether a message can be sent when authorizing a request from a contact that the user's presence is published to them.

If no message will actually be sent, user interfaces should avoid prompting the user for a message, and use an empty string for the message argument.

This method requires Connection::FeatureRoster to be ready.

Returns:
true if the message argument to Contact::authorizePresencePublication() and authorizePresencePublication() is actually used, for contacts with subscription state Contact::PresenceStateAsk, false otherwise.
See also:
canAuthorizePresencePublication(), authorizePresencePublication()
PendingOperation * Tp::ContactManager::authorizePresencePublication ( const QList< ContactPtr > &  contacts,
const QString &  message = QString() 
)

If the given contacts have asked the user to publish presence to them, grant permission for this publication to take place.

This method requires Connection::FeatureRoster to be ready.

Parameters:
contactsContacts who should be allowed to receive the user's presence A message from the user which is either transmitted to the contacts, or ignored, depending on the protocol
Returns:
A PendingOperation which will emit PendingOperation::fininshed when an attempt has been made to authorize publication of the user's presence to the contacts.
See also:
canAuthorizePresencePublication(), publicationAuthorizationHasMessage()

Return whether a message can be sent when rejecting a request from a contact that the user's presence is published to them.

If no message will actually be sent, user interfaces should avoid prompting the user for a message, and use an empty string for the message argument.

This method requires Connection::FeatureRoster to be ready.

Returns:
true if the message argument to Contact::removePresencePublication() and removePresencePublication() is actually used, for contacts with subscription state Contact::PresenceStateAsk, false otherwise.
See also:
canRemovePresencePublication(), removePresencePublication()

Return true if the publication of the user's presence to contacts can be removed, even after permission has been given.

(Rejecting requests for presence to be published is always allowed.)

This method requires Connection::FeatureRoster to be ready.

Returns:
true if Contact::removePresencePublication() and removePresencePublication() are likely to succeed for contacts with subscription state Contact::PresenceStateYes, false otherwise.
See also:
publicationRemovalHasMessage(), removePresencePublication()

Return whether a message can be sent when revoking earlier permission that the user's presence is published to a contact.

If no message will actually be sent, user interfaces should avoid prompting the user for a message, and use an empty string for the message argument.

This method requires Connection::FeatureRoster to be ready.

Returns:
true if the message argument to Contact::removePresencePublication and removePresencePublication() is actually used, for contacts with subscription state Contact::PresenceStateYes, false otherwise.
See also:
canRemovePresencePublication(), removePresencePublication()
PendingOperation * Tp::ContactManager::removePresencePublication ( const QList< ContactPtr > &  contacts,
const QString &  message = QString() 
)

If the given contacts have asked the user to publish presence to them, deny this request (this should always succeed, unless a network error occurs).

If the given contacts already have permission to receive the user's presence, attempt to revoke that permission (this might not be supported by the protocol - canRemovePresencePublication indicates whether it is likely to succeed).

This method requires Connection::FeatureRoster to be ready.

Parameters:
contactsContacts who should no longer be allowed to receive the user's presence A message from the user which is either transmitted to the contacts, or ignored, depending on the protocol
Returns:
A PendingOperation which will emit PendingOperation::finished() when an attempt has been made to remove any publication of the user's presence to the contacts.
See also:
canRemovePresencePublication(), publicationRejectionHasMessage(), publicationRemovalHasMessage()
PendingOperation * Tp::ContactManager::removeContacts ( const QList< ContactPtr > &  contacts,
const QString &  message = QString() 
)

Remove completely contacts from the server. It has the same effect than calling removePresencePublication() and removePresenceSubscription(), but also remove from 'stored' list if it exists.

This method requires Connection::FeatureRoster to be ready.

Parameters:
contactsContacts who should be removed A message from the user which is either transmitted to the contacts, or ignored, depending on the protocol
Returns:
A PendingOperation which will emit PendingOperation::finished when an attempt has been made to remove any publication of the user's presence to the contacts.

Return whether this protocol has a list of blocked contacts.

This method requires Connection::FeatureRoster to be ready.

Returns:
true if blockContacts() is likely to succeed, false otherwise.

Return whether this protocol can report abusive contacts.

This method requires Connection::FeatureRoster to be ready.

Returns:
true if reporting abuse when blocking contacts is supported, false otherwise.
PendingOperation * Tp::ContactManager::blockContacts ( const QList< ContactPtr > &  contacts)

Block the given contacts. Blocked contacts cannot send messages to the user; depending on the protocol, blocking a contact may have other effects.

This method requires Connection::FeatureRoster to be ready.

Parameters:
contactsContacts that should be blocked.
Returns:
A PendingOperation which will emit PendingOperation::finished() when an attempt has been made to take the requested action.
See also:
canBlockContacts(), unblockContacts(), blockContactsAndReportAbuse()
PendingOperation * Tp::ContactManager::blockContactsAndReportAbuse ( const QList< ContactPtr > &  contacts)

Block the given contacts and additionally report abusive behaviour to the server.

If reporting abusive behaviour is not supported by the protocol, this method has the same effect as blockContacts().

This method requires Connection::FeatureRoster to be ready.

Parameters:
contactsContacts who should be added to the list of blocked contacts.
Returns:
A PendingOperation which will emit PendingOperation::finished() when an attempt has been made to take the requested action.
See also:
canBlockContacts(), canReportAbuse(), blockContacts()
PendingOperation * Tp::ContactManager::unblockContacts ( const QList< ContactPtr > &  contacts)

Unblock the given contacts.

This method requires Connection::FeatureRoster to be ready.

Parameters:
contactsContacts that should be unblocked.
Returns:
A PendingOperation which will emit PendingOperation::finished() when an attempt has been made to take the requested action.
See also:
canBlockContacts(), blockContacts(), blockContactsAndReportAbuse()
PendingContacts * Tp::ContactManager::contactsForHandles ( const UIntList handles,
const Features features = Features() 
)
PendingContacts * Tp::ContactManager::contactsForIdentifiers ( const QStringList &  identifiers,
const Features features = Features() 
)
PendingContacts * Tp::ContactManager::contactsForVCardAddresses ( const QString &  vcardField,
const QStringList &  vcardAddresses,
const Features features = Features() 
)

Request contacts and enable their features using a given field in their vcards.

This method requires Connection::FeatureCore to be ready.

Parameters:
vcardFieldThe vcard field of the addresses we are requesting. Supported fields can be found in ProtocolInfo::addressableVCardFields().
vcardAddressesThe addresses to get contacts for. The address types must match the given vcard field.
featuresThe Contact features to enable.
Returns:
A PendingContacts, which will emit PendingContacts::finished when the contacts are retrieved or an error occurred.
See also:
contactsForHandles(), contactsForIdentifiers(), contactsForUris(), ProtocolInfo::normalizeVCardAddress()
PendingContacts * Tp::ContactManager::contactsForUris ( const QStringList &  uris,
const Features features = Features() 
)

Request contacts and enable their features using the given URI addresses.

This method requires Connection::FeatureCore to be ready.

Parameters:
urisThe URI addresses to get contacts for. Supported schemes can be found in ProtocolInfo::addressableUriSchemes().
featuresThe Contact features to enable.
Returns:
A PendingContacts, which will emit PendingContacts::finished when the contacts are retrieved or an error occurred.
See also:
contactsForHandles(), contactsForIdentifiers(), contactsForVCardAddresses(), ProtocolInfo::normalizeContactUri()
PendingContacts * Tp::ContactManager::upgradeContacts ( const QList< ContactPtr > &  contacts,
const Features features 
)
void Tp::ContactManager::requestContactAvatars ( const QList< ContactPtr > &  contacts)

Start a request to retrieve the avatar for the given contacts.

Force the request of the avatar data. This method returns directly, emitting Contact::avatarTokenChanged() and Contact::avatarDataChanged() signals once the token and data are fetched from the server.

This is only useful if the avatar token is unknown; see Contact::isAvatarTokenKnown(). It happens in the case of offline XMPP contacts, because the server does not send the token for them and an explicit request of the avatar data is needed.

This method requires Contact::FeatureAvatarData to be ready.

See also:
Contact::avatarData(), Contact::avatarDataChanged(), Contact::avatarToken(), Contact::avatarTokenChanged()
PendingOperation * Tp::ContactManager::refreshContactInfo ( const QList< ContactPtr > &  contacts)

Refresh information for the given contact.

Once the information is retrieved infoFieldsChanged() will be emitted.

This method requires Contact::FeatureInfo to be ready.

Returns:
A PendingOperation, which will emit PendingOperation::finished when the call has finished.
See also:
infoFieldsChanged()
void Tp::ContactManager::presencePublicationRequested ( const Tp::Contacts &  contacts) [signal]

Emitted whenever some contacts request for presence publication.

Parameters:
contactsA set of contacts which requested presence publication.
void Tp::ContactManager::groupAdded ( const QString &  group) [signal]

Emitted when a new contact list group is created.

Parameters:
groupThe group name.
See also:
allKnownGroups()
void Tp::ContactManager::groupRenamed ( const QString &  oldGroup,
const QString &  newGroup 
) [signal]

Emitted when a new contact list group is renamed.

Parameters:
oldGroupThe old group name.
newGroupThe new group name.
See also:
allKnownGroups()
void Tp::ContactManager::groupRemoved ( const QString &  group) [signal]

Emitted when a contact list group is removed.

Parameters:
groupThe group name.
See also:
allKnownGroups()
void Tp::ContactManager::groupMembersChanged ( const QString &  group,
const Tp::Contacts &  groupMembersAdded,
const Tp::Contacts &  groupMembersRemoved,
const Tp::Channel::GroupMemberChangeDetails details 
) [signal]

Emitted whenever some contacts got removed or added from a group.

Parameters:
groupThe name of the group that changed.
groupMembersAddedA set of contacts which were added to the group group.
groupMembersRemovedA set of contacts which were removed from the group group.
detailsThe change details.
See also:
groupContacts()
void Tp::ContactManager::allKnownContactsChanged ( const Tp::Contacts &  contactsAdded,
const Tp::Contacts &  contactsRemoved,
const Tp::Channel::GroupMemberChangeDetails details 
) [signal]

Emitted whenever some contacts got removed or added from ContactManager's known contact list. It is useful for monitoring which contacts are currently known by ContactManager.

Note that, in some protocols, this signal could stream newly added contacts with both presence subscription and publication state set to No. Be sure to watch over publication and/or subscription state changes if that is the case.

Parameters:
contactsAddedA set of contacts which were added to the known contact list.
contactsRemovedA set of contacts which were removed from the known contact list.
detailsThe change details.
See also:
allKnownContacts()


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00702_source.html0000644000175200001440000002455412000060453023210 0ustar00collabora-develusers00000000000000 stream-tube-channel.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
stream-tube-channel.h
00001 
00022 #ifndef _TelepathyQt_stream_tube_channel_h_HEADER_GUARD_
00023 #define _TelepathyQt_stream_tube_channel_h_HEADER_GUARD_
00024 
00025 #ifndef IN_TP_QT_HEADER
00026 #error IN_TP_QT_HEADER
00027 #endif
00028 
00029 #include <TelepathyQt/TubeChannel>
00030 
00031 class QHostAddress;
00032 
00033 namespace Tp
00034 {
00035 
00036 class TP_QT_EXPORT StreamTubeChannel : public TubeChannel
00037 {
00038     Q_OBJECT
00039     Q_DISABLE_COPY(StreamTubeChannel)
00040 
00041 public:
00042     static const Feature FeatureCore;
00043     static const Feature FeatureConnectionMonitoring;
00044 
00045     static StreamTubeChannelPtr create(const ConnectionPtr &connection,
00046             const QString &objectPath, const QVariantMap &immutableProperties);
00047 
00048     virtual ~StreamTubeChannel();
00049 
00050     QString service() const;
00051 
00052     bool supportsIPv4SocketsOnLocalhost() const;
00053     bool supportsIPv4SocketsWithSpecifiedAddress() const;
00054 
00055     bool supportsIPv6SocketsOnLocalhost() const;
00056     bool supportsIPv6SocketsWithSpecifiedAddress() const;
00057 
00058     bool supportsUnixSocketsOnLocalhost() const;
00059     bool supportsUnixSocketsWithCredentials() const;
00060 
00061     bool supportsAbstractUnixSocketsOnLocalhost() const;
00062     bool supportsAbstractUnixSocketsWithCredentials() const;
00063 
00064     QSet<uint> connections() const;
00065 
00066     SocketAddressType addressType() const;
00067 
00068     QPair< QHostAddress, quint16 > ipAddress() const;
00069     QString localAddress() const;
00070 
00071 Q_SIGNALS:
00072     void newConnection(uint connectionId);
00073     void connectionClosed(uint connectionId, const QString &errorName,
00074             const QString &errorMessage);
00075 
00076 protected:
00077     StreamTubeChannel(const ConnectionPtr &connection, const QString &objectPath,
00078             const QVariantMap &immutableProperties,
00079             const Feature &coreFeature = StreamTubeChannel::FeatureCore);
00080 
00081     void addConnection(uint connection);
00082     void removeConnection(uint connection, const QString &error, const QString &message);
00083     void setAddressType(SocketAddressType type);
00084     SocketAccessControl accessControl() const;
00085     void setAccessControl(SocketAccessControl accessControl);
00086     void setIpAddress(const QPair<QHostAddress, quint16> &address);
00087     void setLocalAddress(const QString &address);
00088     bool isDroppingConnections() const;
00089 
00090 private Q_SLOTS:
00091     TP_QT_NO_EXPORT void gotStreamTubeProperties(Tp::PendingOperation *op);
00092     TP_QT_NO_EXPORT void onConnectionClosed(uint, const QString &, const QString &);
00093     TP_QT_NO_EXPORT void dropConnections();
00094 
00095 private:
00096     struct Private;
00097     friend struct Private;
00098     Private *mPriv;
00099 };
00100 
00101 }
00102 
00103 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01138.html0000644000175200001440000002343112000060453021625 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::ConnectionInterfaceMailNotificationInterface Member List
This is the complete list of members for Tp::Client::ConnectionInterfaceMailNotificationInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
ConnectionInterfaceMailNotificationInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceMailNotificationInterface
ConnectionInterfaceMailNotificationInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::ConnectionInterfaceMailNotificationInterface
ConnectionInterfaceMailNotificationInterface(Tp::DBusProxy *proxy)Tp::Client::ConnectionInterfaceMailNotificationInterface
ConnectionInterfaceMailNotificationInterface(const Tp::Client::ConnectionInterface &mainInterface)Tp::Client::ConnectionInterfaceMailNotificationInterface [explicit]
ConnectionInterfaceMailNotificationInterface(const Tp::Client::ConnectionInterface &mainInterface, QObject *parent)Tp::Client::ConnectionInterfaceMailNotificationInterface
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::ConnectionInterfaceMailNotificationInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
MailsReceived(const Tp::MailList &mails)Tp::Client::ConnectionInterfaceMailNotificationInterface [signal]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::ConnectionInterfaceMailNotificationInterface [inline]
RequestInboxURL(int timeout=-1)Tp::Client::ConnectionInterfaceMailNotificationInterface [inline, slot]
RequestMailURL(const QString &ID, const QDBusVariant &URLData, int timeout=-1)Tp::Client::ConnectionInterfaceMailNotificationInterface [inline, slot]
requestPropertyMailAddress() const Tp::Client::ConnectionInterfaceMailNotificationInterface [inline]
requestPropertyMailNotificationFlags() const Tp::Client::ConnectionInterfaceMailNotificationInterface [inline]
requestPropertyUnreadMailCount() const Tp::Client::ConnectionInterfaceMailNotificationInterface [inline]
requestPropertyUnreadMails() const Tp::Client::ConnectionInterfaceMailNotificationInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::ConnectionInterfaceMailNotificationInterface [inline, static]
UnreadMailsChanged(uint count, const Tp::MailList &mailsAdded, const QStringList &mailsRemoved)Tp::Client::ConnectionInterfaceMailNotificationInterface [signal]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a01022.html0000644000175200001440000000453112000060453021615 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::RoomInfo Member List
This is the complete list of members for Tp::RoomInfo, including all inherited members.
channelTypeTp::RoomInfo
handleTp::RoomInfo
infoTp::RoomInfo


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/telepathy-qt.tags0000644000175200001440000632123612000060453023435 0ustar00collabora-develusers00000000000000 async_model Asynchronous Object Model a00001 async_model_overview callbacks Callbacks Usage a00002 callbacks_overview accounts_example Accounts Example a00003 accounts_example_account_item_cpp accounts/account-item.cpp a00004 accounts_example_account_item_h accounts/account-item.h a00005 accounts_example_accounts_window_cpp accounts/accounts-window.cpp a00006 accounts_example_accounts_window_h accounts/accounts-window.h a00007 accounts_example_main accounts/main.cpp a00008 contact_messenger_example Contact Messenger Example a00009 contact_messenger_example_sender_cpp contact-messenger/sender.cpp a00010 contact_messenger_example_sender_h contact-messenger/sender.h a00011 protocols_example Protocols Example a00012 protocols_example_main protocols/main.cpp a00013 protocols_example_cm_wrapper_cpp protocols/cm-wrapper.cpp a00014 protocols_example_cm_wrapper_h protocols/cm-wrapper.h a00015 protocols_example_protocols_cpp protocols/protocols.cpp a00016 protocols_example_protocols_h protocols/protocols.h a00017 roster_example Roster Example a00018 roster_example_main roster/main.cpp a00019 roster_example_roster_item_cpp roster/roster-item.cpp a00020 roster_example_roster_item_h roster/roster-item.h a00021 roster_example_roster_widget_cpp roster/roster-widget.cpp a00022 roster_example_roster_widget_h roster/roster-widget.h a00023 roster_example_roster_window_cpp roster/roster-window.cpp a00024 roster_example_roster_window_h roster/roster-window.h a00025 installation Installation a00026 installation_from_source_building installation_from_source_requirements installation_from_source bugreport How to report a bug a00027 mailing_lists Mailing Lists a00028 shared_ptr Shared Pointer Usage a00029 shared_ptr_overview utilityconsts Utility string constants a00733.html #define TP_QT_CONNECTION_MANAGER_BUS_NAME_BASE a00733.html gad12ac04a69dad205b4ac1db5c3616e02 #define TP_QT_CONNECTION_MANAGER_OBJECT_PATH_BASE a00733.html ga82bacf2c11c46ac8465466b49c7c4dc4 #define TP_QT_CONNECTION_BUS_NAME_BASE a00733.html gafce46e0293e8b8ed0cb49cc06fb52fdc #define TP_QT_CONNECTION_OBJECT_PATH_BASE a00733.html gafcafb3bcb597ecccc003fc8ce9a2a957 #define TP_QT_ACCOUNT_MANAGER_BUS_NAME a00733.html gafcfe2ea4e82d229999b3876ba06fe4a4 #define TP_QT_ACCOUNT_MANAGER_OBJECT_PATH a00733.html gaa3e702c9e58f1e0ed3cd8e0cabd38c73 #define TP_QT_CHANNEL_DISPATCHER_BUS_NAME a00733.html gab4b745a5d2743ff9f18d3c3ebefef533 #define TP_QT_CHANNEL_DISPATCHER_OBJECT_PATH a00733.html gabdc46f5d6c775103cde2c1e076161453 #define TP_QT_ACCOUNT_OBJECT_PATH_BASE a00733.html gaa4aaa603a4454417a9e2ff8813f83fc5 #define TP_QT_DEBUG_OBJECT_PATH a00733.html gaf6f886e1183c0cc4d7cbaf6744a719e7 clientdbus Generic D-Bus proxies a00734.html Tp::Client::DBus::DBusDaemonInterface Tp::Client::DBus::IntrospectableInterface Tp::Client::DBus::PeerInterface Tp::Client::DBus::PropertiesInterface debug Common debug support a00735.html void(* DebugCallback a00735.html gac649008aad1016daf386c45e214de63b )(const QString &libraryName, const QString &libraryVersion, QtMsgType type, const QString &msg) void enableDebug a00735.html ga52cbf229d908f8ea516b53f074e44241 (bool enable) void enableWarnings a00735.html ga7cc429d87fa4d829de26cd835cc005d3 (bool enable) void setDebugCallback a00735.html ga04ff12f8b086a5373b4c12853388e791 (DebugCallback cb) clientsideproxies Client-side proxies a00736.html Tp::AbstractInterface Tp::DebugReceiver Tp::OptionalInterfaceFactory clientdbus clientaccount clientam clientchannel clientchanneldispatcher clientchanneldispatchoperation clientchannelrequest clientclient clientcm clientconn clientmsesh clientmstrh clientprops clientaccount Account proxies a00737.html Tp::AccountSet Tp::Account Tp::ContactMessenger Tp::PendingAccount Tp::Client::AccountInterface Tp::Client::AccountInterfaceAddressingInterface Tp::Client::AccountInterfaceAvatarInterface Tp::Client::AccountInterfaceStorageInterface clientam Account manager proxies a00738.html Tp::AccountManager Tp::Client::AccountManagerInterface clientchannel Channel proxies a00739.html Tp::CallChannel Tp::CallContent Tp::CallStream Tp::CaptchaAuthentication Tp::Channel::GroupMemberChangeDetails Tp::Channel Tp::ContactSearchChannel Tp::DBusTubeChannel Tp::FileTransferChannelCreationProperties Tp::FileTransferChannel Tp::HandledChannelNotifier Tp::IncomingDBusTubeChannel Tp::IncomingFileTransferChannel Tp::IncomingStreamTubeChannel Tp::Message Tp::ReceivedMessage Tp::ReceivedMessage::DeliveryDetails Tp::OutgoingDBusTubeChannel Tp::OutgoingFileTransferChannel Tp::OutgoingStreamTubeChannel Tp::PendingChannel Tp::PendingDBusTubeConnection Tp::PendingSendMessage Tp::PendingStreamTubeConnection Tp::RoomListChannel Tp::ServerAuthenticationChannel Tp::StreamTubeChannel Tp::PendingStreamedMediaStreams Tp::StreamedMediaStream Tp::StreamedMediaChannel Tp::TextChannel Tp::TubeChannel Tp::Client::ChannelInterface Tp::Client::ChannelInterfaceAnonymityInterface Tp::Client::ChannelInterfaceCallStateInterface Tp::Client::ChannelInterfaceCaptchaAuthenticationInterface Tp::Client::ChannelInterfaceChatStateInterface Tp::Client::ChannelInterfaceConferenceInterface Tp::Client::ChannelInterfaceDTMFInterface Tp::Client::ChannelInterfaceDestroyableInterface Tp::Client::ChannelInterfaceFileTransferMetadataInterface Tp::Client::ChannelInterfaceGroupInterface Tp::Client::ChannelInterfaceHoldInterface Tp::Client::ChannelInterfaceMediaSignallingInterface Tp::Client::ChannelInterfaceMessagesInterface Tp::Client::ChannelInterfacePasswordInterface Tp::Client::ChannelInterfaceSASLAuthenticationInterface Tp::Client::ChannelInterfaceSMSInterface Tp::Client::ChannelInterfaceSecurableInterface Tp::Client::ChannelInterfaceServicePointInterface Tp::Client::ChannelInterfaceTubeInterface Tp::Client::ChannelTypeCallInterface Tp::Client::ChannelTypeContactListInterface Tp::Client::ChannelTypeContactSearchInterface Tp::Client::ChannelTypeDBusTubeInterface Tp::Client::ChannelTypeFileTransferInterface Tp::Client::ChannelTypeRoomListInterface Tp::Client::ChannelTypeServerAuthenticationInterface Tp::Client::ChannelTypeServerTLSConnectionInterface Tp::Client::ChannelTypeStreamTubeInterface Tp::Client::ChannelTypeStreamedMediaInterface Tp::Client::ChannelTypeTextInterface Tp::Client::ChannelTypeTubesInterface clientchanneldispatcher ChannelDispatcher proxies a00740.html Tp::Client::ChannelDispatcherInterface clientchanneldispatchoperation ChannelDispatchOperation proxies a00741.html Tp::ChannelDispatchOperation Tp::Client::ChannelDispatchOperationInterface clientchannelrequest ChannelRequest proxies a00742.html Tp::ChannelRequest Tp::ChannelRequestHints Tp::PendingChannelRequest Tp::Client::ChannelRequestInterface clientclient Client proxies a00743.html Tp::AbstractClient Tp::AbstractClientObserver Tp::AbstractClientObserver::ObserverInfo Tp::AbstractClientApprover Tp::AbstractClientHandler Tp::AbstractClientHandler::Capabilities Tp::AbstractClientHandler::HandlerInfo Tp::Client::ClientInterface Tp::Client::ClientApproverInterface Tp::Client::ClientHandlerInterface Tp::Client::ClientInterfaceRequestsInterface Tp::Client::ClientObserverInterface clientcm Connection manager proxies a00744.html Tp::ConnectionManagerLowlevel Tp::ConnectionManager Tp::ProtocolInfo Tp::ProtocolParameter Tp::Client::ConnectionManagerInterface Tp::Client::ProtocolInterface Tp::Client::ProtocolInterfaceAddressingInterface Tp::Client::ProtocolInterfaceAvatarsInterface Tp::Client::ProtocolInterfacePresenceInterface clientconn Connection proxies a00745.html Tp::CapabilitiesBase Tp::ConnectionCapabilities Tp::ConnectionLowlevel Tp::Connection Tp::Connection::ErrorDetails Tp::ContactCapabilities Tp::ContactManager Tp::Contact::InfoFields Tp::Contact Tp::LocationInfo Tp::PendingConnection Tp::PendingContactAttributes Tp::PendingContactInfo Tp::PendingContacts Tp::PendingHandles Tp::ReferencedHandles Tp::Client::ConnectionInterface Tp::Client::ConnectionInterfaceAddressingInterface Tp::Client::ConnectionInterfaceAliasingInterface Tp::Client::ConnectionInterfaceAnonymityInterface Tp::Client::ConnectionInterfaceAvatarsInterface Tp::Client::ConnectionInterfaceBalanceInterface Tp::Client::ConnectionInterfaceCapabilitiesInterface Tp::Client::ConnectionInterfaceCellularInterface Tp::Client::ConnectionInterfaceClientTypesInterface Tp::Client::ConnectionInterfaceContactBlockingInterface Tp::Client::ConnectionInterfaceContactCapabilitiesInterface Tp::Client::ConnectionInterfaceContactGroupsInterface Tp::Client::ConnectionInterfaceContactInfoInterface Tp::Client::ConnectionInterfaceContactListInterface Tp::Client::ConnectionInterfaceContactsInterface Tp::Client::ConnectionInterfaceLocationInterface Tp::Client::ConnectionInterfaceMailNotificationInterface Tp::Client::ConnectionInterfacePowerSavingInterface Tp::Client::ConnectionInterfacePresenceInterface Tp::Client::ConnectionInterfaceRequestsInterface Tp::Client::ConnectionInterfaceServicePointInterface Tp::Client::ConnectionInterfaceSimplePresenceInterface servicesideimpl Service-side implementation a00746.html Tp::AbstractAdaptor Tp::DBusError Tp::DBusObject Tp::DBusService Tp::AbstractDBusServiceInterface servicechannel servicecm serviceconn servicechannel Channel service implementation a00747.html servicecm Connection manager service implementation a00748.html Tp::BaseConnectionManager Tp::BaseProtocol Tp::AbstractProtocolInterface Tp::BaseProtocolAddressingInterface Tp::BaseProtocolAvatarsInterface Tp::BaseProtocolPresenceInterface serviceconn Connection service implementation a00749.html Tp::BaseConnection wrappers Wrapper classes a00750.html Tp::AvatarData Tp::AvatarSpec Tp::ChannelClassSpec Tp::ChannelClassSpecList Tp::ContactSearchChannel::SearchStateChangeDetails Tp::MessageContentPart Tp::MessageContentPartList Tp::Presence Tp::PresenceSpec Tp::PresenceSpecList Tp::RequestableChannelClassSpec Tp::RequestableChannelClassSpecList utils Utililty classes a00751.html Tp::AccountCapabilityFilter Tp::AccountFactory Tp::AccountPropertyFilter Tp::AndFilter Tp::BaseCallback Tp::Callback0 Tp::Callback1 Tp::Callback2 Tp::Callback3 Tp::Callback4 Tp::Callback5 Tp::Callback6 Tp::Callback7 Tp::ChannelFactory Tp::ConnectionFactory Tp::ContactFactory Tp::DBusProxyFactory Tp::Feature Tp::Features Tp::Filter Tp::FixedFeatureFactory Tp::GenericCapabilityFilter Tp::GenericPropertyFilter Tp::MethodInvocationContext Tp::NotFilter Tp::OrFilter Tp::PendingSuccess Tp::PendingFailure Tp::PendingVoid Tp::PendingComposite Tp::PendingReady Tp::PendingStringList Tp::PendingString Tp::PendingVariantMap Tp::PendingVariant Tp::Profile Tp::Profile::Parameter Tp::Profile::Presence Tp::ReadinessHelper Tp::ReadinessHelper::Introspectable Tp::RefCounted Tp::SharedPtr Tp::WeakPtr Tp::SimpleCallObserver Tp::SimpleObserver Tp::SimpleTextObserver clientmsesh Media session handler proxies a00752.html Tp::Client::MediaSessionHandlerInterface clientmstrh Media stream handler proxies a00753.html Tp::Client::MediaStreamHandlerInterface clientprops Telepathy Properties proxy a00754.html Tp::Client::PropertiesInterfaceInterface utility functions a00755.html flagtypeconsts Flag type constants a00756.html QFlags< ConnMgrParamFlag > ConnMgrParamFlags a00756.html ga1ec95e0e8a60f6e9fcff6c0e5f6d1d2d QFlags< ConnectionAliasFlag > ConnectionAliasFlags a00756.html gae209ab8dc8dfb0cdb18dde803abb1ecc QFlags< AnonymityMode > AnonymityModeFlags a00756.html ga5a62d572ef4b37d2c530e82d1a343fda QFlags< ConnectionCapabilityFlag > ConnectionCapabilityFlags a00756.html ga69e0ae4c578de4e8281c66d56725800f QFlags< ContactBlockingCapability > ContactBlockingCapabilities a00756.html ga74e90ca71966332843fb6151dced4c49 QFlags< ContactInfoFlag > ContactInfoFlags a00756.html ga058b4ea8ec38721f3f2d6c5f90969365 QFlags< ContactInfoFieldFlag > ContactInfoFieldFlags a00756.html ga382ba0240f67164dac0738216da6e64d QFlags< LocationFeature > LocationFeatures a00756.html ga8a6cdfccfaf1954767c3274fc539162f QFlags< MailNotificationFlag > MailNotificationFlags a00756.html gafd6ee67fbf03013403438de823c5d18f QFlags< CallFlag > CallFlags a00756.html ga23879924993c4e2383bad817f3bdf5e1 QFlags< CallMemberFlag > CallMemberFlags a00756.html ga6c3e650fcbac033703069c8762664118 QFlags< MediaStreamPending > MediaStreamPendingSend a00756.html ga81e5288410135f5ab84ca9d59dbca988 QFlags< ChannelMediaCapability > ChannelMediaCapabilities a00756.html gaa68e46bf2d2ce86778a7a91e507da2fd QFlags< ChannelTextMessageFlag > ChannelTextMessageFlags a00756.html ga2db541b9a0efb3c9f3831ad6e7a6924b QFlags< CaptchaFlag > CaptchaFlags a00756.html ga28d990842d23b3d1dac39c23f7252cb5 QFlags< ChannelCallState > ChannelCallStateFlags a00756.html gae23e253bc21e75878c9cbbc5a305bbf6 QFlags< ChannelGroupFlag > ChannelGroupFlags a00756.html ga2aa3d302db1664feb0dd960eab27ed52 QFlags< MessagePartSupportFlag > MessagePartSupportFlags a00756.html ga4bfff302b6b5d81554686d23babad276 QFlags< MessageSendingFlag > MessageSendingFlags a00756.html ga0cc93486e0bc233331ea4e8ba512ae0b QFlags< DeliveryReportingSupportFlag > DeliveryReportingSupportFlags a00756.html gac53c2806bb9e28f40fa80b6b0596986e QFlags< ChannelPasswordFlag > ChannelPasswordFlags a00756.html ga601f54a29430f1ea82a421a1ba5b470b QFlags< PropertyFlag > PropertyFlags a00756.html ga932aabdf9cf257497afdfe4d88f9bb72 QFlags< StorageRestrictionFlag > StorageRestrictionFlags a00756.html ga435da029c381cecf7511ae963554ff77 QFlags< RTCPXRStatisticsFlag > RTCPXRStatisticsFlags a00756.html gad27cbc06add91c8b90463be0616ff32c ConnMgrParamFlag a00756.html ga5cb2fa9d056d53a2942394c5b13dafe7 ConnMgrParamFlagRequired a00756.html gga5cb2fa9d056d53a2942394c5b13dafe7a7b7151e5c5f6c582dd4a5782a2b21ce1 ConnMgrParamFlagRegister a00756.html gga5cb2fa9d056d53a2942394c5b13dafe7a1fc8a43025d60fddc2de0d5f03c4be65 ConnMgrParamFlagHasDefault a00756.html gga5cb2fa9d056d53a2942394c5b13dafe7a5c90d0a9a3fc1d64081ad614af8ed978 ConnMgrParamFlagSecret a00756.html gga5cb2fa9d056d53a2942394c5b13dafe7a1d8f731dd2f9cbeb5e11a3e16d1a5d7b ConnMgrParamFlagDBusProperty a00756.html gga5cb2fa9d056d53a2942394c5b13dafe7ac02602299e89100fa0e1f4b855140691 _ConnMgrParamFlagPadding a00756.html gga5cb2fa9d056d53a2942394c5b13dafe7a5e922734230292cb238220301b828839 ConnectionAliasFlag a00756.html gaef4f6c211ed67dac662bf64736ed207a ConnectionAliasFlagUserSet a00756.html ggaef4f6c211ed67dac662bf64736ed207aa74605a2a62fc83950d2b3f7143a72d79 _ConnectionAliasFlagPadding a00756.html ggaef4f6c211ed67dac662bf64736ed207aaebe67dcae258f069cb01993d254648bd AnonymityMode a00756.html ga757256bafd010c153333986e415a205e AnonymityModeClientInfo a00756.html gga757256bafd010c153333986e415a205ea1d1114e10218b5232108fecad35864ce AnonymityModeShowClientInfo a00756.html gga757256bafd010c153333986e415a205ea2a5ee09100d2ddaefbe47a36739c75b7 AnonymityModeNetworkInfo a00756.html gga757256bafd010c153333986e415a205eab4ff0e3e79327d08a0693add72928046 _AnonymityModePadding a00756.html gga757256bafd010c153333986e415a205ea997db8140fc8f0e2106f16403e37de66 ConnectionCapabilityFlag a00756.html ga2bfda5e1b7b0e582dcc4beafbc686e2f ConnectionCapabilityFlagCreate a00756.html gga2bfda5e1b7b0e582dcc4beafbc686e2fabcba0674619a6c92d98af8a73a7991b6 ConnectionCapabilityFlagInvite a00756.html gga2bfda5e1b7b0e582dcc4beafbc686e2fa2dfbb9b4870dddedf50b96eaa005a625 _ConnectionCapabilityFlagPadding a00756.html gga2bfda5e1b7b0e582dcc4beafbc686e2faa90c051bc5b9c252725695aee9cfcfb8 ContactBlockingCapability a00756.html ga5ff0e407360d15b72ed8db5039e393cd ContactBlockingCapabilityCanReportAbusive a00756.html gga5ff0e407360d15b72ed8db5039e393cda33ed07dda4bde02f3c31f52e139ecc27 _ContactBlockingCapabilityPadding a00756.html gga5ff0e407360d15b72ed8db5039e393cda83cd5558884f307f1473c2c13f3e797f ContactInfoFlag a00756.html ga8fd6152ac8664f7043f597a958c33cb1 ContactInfoFlagCanSet a00756.html gga8fd6152ac8664f7043f597a958c33cb1a432131938b4cf72de980ceeab3f7f957 ContactInfoFlagPush a00756.html gga8fd6152ac8664f7043f597a958c33cb1a826fbdd18b10cc3f43a56460b71c8818 _ContactInfoFlagPadding a00756.html gga8fd6152ac8664f7043f597a958c33cb1a6bece6d34725fe3511a49b7285a66882 ContactInfoFieldFlag a00756.html ga74c105177c0b1e57474fd8e04f15d4d9 ContactInfoFieldFlagParametersExact a00756.html gga74c105177c0b1e57474fd8e04f15d4d9af61eec02c35ad02d6e7fea102a78fbee ContactInfoFieldFlagOverwrittenByNickname a00756.html gga74c105177c0b1e57474fd8e04f15d4d9a289de4147a75f0f15a94933174f00523 _ContactInfoFieldFlagPadding a00756.html gga74c105177c0b1e57474fd8e04f15d4d9aa56f65d632572391aeefaa006ea72fee LocationFeature a00756.html gaa527b9338d1b405122e98454f7e3b569 LocationFeatureCanSet a00756.html ggaa527b9338d1b405122e98454f7e3b569a33d3fc47ceee2e5541a4012d53abaa73 _LocationFeaturePadding a00756.html ggaa527b9338d1b405122e98454f7e3b569a142730992e5819ee562c743023aac8ee MailNotificationFlag a00756.html ga21317c6c96d4875d8ca7618ef7b39183 MailNotificationFlagSupportsUnreadMailCount a00756.html gga21317c6c96d4875d8ca7618ef7b39183a453639b6a753438c7b599c4f2d4b0b37 MailNotificationFlagSupportsUnreadMails a00756.html gga21317c6c96d4875d8ca7618ef7b39183aa0f7bb1c1918579815c589c8b87e5d9c MailNotificationFlagEmitsMailsReceived a00756.html gga21317c6c96d4875d8ca7618ef7b39183a47dae26c23dd0d6c0afeb0eb28879d6b MailNotificationFlagSupportsRequestInboxURL a00756.html gga21317c6c96d4875d8ca7618ef7b39183a6c525f4f23305b3939c2a1e0e1527c7a MailNotificationFlagSupportsRequestMailURL a00756.html gga21317c6c96d4875d8ca7618ef7b39183af09af0f14fbfa7ea02ef8db7c55f940d MailNotificationFlagThreadBased a00756.html gga21317c6c96d4875d8ca7618ef7b39183a11f770f71ed06eb3590090af16694e1a _MailNotificationFlagPadding a00756.html gga21317c6c96d4875d8ca7618ef7b39183ad74fdc6915917e2296a0854b17ca91fd CallFlag a00756.html gaf0ca6541c128e8636355db618bb8905c CallFlagLocallyHeld a00756.html ggaf0ca6541c128e8636355db618bb8905ca9b81f2c41e19987c015dea9f0db87cc3 CallFlagLocallyRinging a00756.html ggaf0ca6541c128e8636355db618bb8905ca77d51bde51748bc257b157d7f3a121dd CallFlagLocallyQueued a00756.html ggaf0ca6541c128e8636355db618bb8905cae83382836bc4502185536e92dce46cf4 CallFlagForwarded a00756.html ggaf0ca6541c128e8636355db618bb8905ca8b480e748569900593f38e9577978112 CallFlagClearing a00756.html ggaf0ca6541c128e8636355db618bb8905cac5d43644a005f65a9a705538b40257d4 _CallFlagPadding a00756.html ggaf0ca6541c128e8636355db618bb8905cab61c9a6b9f086aa174a69eab71931ed5 CallMemberFlag a00756.html ga750486dca75cdd08fe07242049bc863d CallMemberFlagRinging a00756.html gga750486dca75cdd08fe07242049bc863daca1fc71e62aef7e332544effc860a6d1 CallMemberFlagHeld a00756.html gga750486dca75cdd08fe07242049bc863dab53f9525e96e76aac774d6a9ca46fc16 CallMemberFlagConferenceHost a00756.html gga750486dca75cdd08fe07242049bc863da99315403fd65c373bdda55def1697153 _CallMemberFlagPadding a00756.html gga750486dca75cdd08fe07242049bc863da27246b7da2ca2ba35faa9399e5bc1d99 MediaStreamPending a00756.html gabf9a12dd89a5a502270bf18fd1cca47d MediaStreamPendingLocalSend a00756.html ggabf9a12dd89a5a502270bf18fd1cca47dab6f964a0b18c3cf5bd8fa3389fd84403 MediaStreamPendingRemoteSend a00756.html ggabf9a12dd89a5a502270bf18fd1cca47dad226bd2a7c98d02406ff1b4a56d724cf _MediaStreamPendingPadding a00756.html ggabf9a12dd89a5a502270bf18fd1cca47da5060120b4d5ab6cc272654a506f647a5 ChannelMediaCapability a00756.html gabacbce0da0a9ffbdcf61b486fb228296 ChannelMediaCapabilityAudio a00756.html ggabacbce0da0a9ffbdcf61b486fb228296ae258062ae67379e51857f8f67883f2d9 ChannelMediaCapabilityVideo a00756.html ggabacbce0da0a9ffbdcf61b486fb228296a0046934ca06adeffcba8f8e8ff8e9eb5 ChannelMediaCapabilityNATTraversalSTUN a00756.html ggabacbce0da0a9ffbdcf61b486fb228296a83d15a00008eaf4d8bb5ae09786c779f ChannelMediaCapabilityNATTraversalGTalkP2P a00756.html ggabacbce0da0a9ffbdcf61b486fb228296a83be87a1c5b327eb98df027672952bd8 ChannelMediaCapabilityNATTraversalICEUDP a00756.html ggabacbce0da0a9ffbdcf61b486fb228296a7ce46ce2b6b4a8bb8d73edf9807af9ea ChannelMediaCapabilityImmutableStreams a00756.html ggabacbce0da0a9ffbdcf61b486fb228296abaa2e098339493d9f42694453287397d _ChannelMediaCapabilityPadding a00756.html ggabacbce0da0a9ffbdcf61b486fb228296aff3cfd5112e2d2679d4801e9ccd6313f ChannelTextMessageFlag a00756.html ga0712fe4009ffbcb6b49e99fe47af4ce6 ChannelTextMessageFlagTruncated a00756.html gga0712fe4009ffbcb6b49e99fe47af4ce6af42f7c5d364574ad92204e4dcaa23965 ChannelTextMessageFlagNonTextContent a00756.html gga0712fe4009ffbcb6b49e99fe47af4ce6aeb0dbeba04a987d64e11af3aae3c8f79 ChannelTextMessageFlagScrollback a00756.html gga0712fe4009ffbcb6b49e99fe47af4ce6a73bd1335bafc306e7220cc57652414cb ChannelTextMessageFlagRescued a00756.html gga0712fe4009ffbcb6b49e99fe47af4ce6a09e726755fbfae4bba9dd5b95ccd4015 _ChannelTextMessageFlagPadding a00756.html gga0712fe4009ffbcb6b49e99fe47af4ce6a3e7936efcdcbf252dee6d01d4ce3fa6e CaptchaFlag a00756.html ga6a04590391bb361bc1c47e22571d81fa CaptchaFlagRequired a00756.html gga6a04590391bb361bc1c47e22571d81faaf8112f78c092b2e6eda2c7c9b782b612 _CaptchaFlagPadding a00756.html gga6a04590391bb361bc1c47e22571d81faa70f5bb9ba2f8ee35bca58b2d8751cdcc ChannelCallState a00756.html gac0a5e07b6cb83e50403bb971a60f45bf ChannelCallStateRinging a00756.html ggac0a5e07b6cb83e50403bb971a60f45bfa85542f90092584b3eec097e349394d0c ChannelCallStateQueued a00756.html ggac0a5e07b6cb83e50403bb971a60f45bfa0e00c1ca7a35c65138551d15280df63c ChannelCallStateHeld a00756.html ggac0a5e07b6cb83e50403bb971a60f45bfafca34a52d14e2d721a1fb23df5bfec84 ChannelCallStateForwarded a00756.html ggac0a5e07b6cb83e50403bb971a60f45bfae52645cc6beb01c00fd1d544d0907777 ChannelCallStateInProgress a00756.html ggac0a5e07b6cb83e50403bb971a60f45bfa1ecef1a51a1e00bab1b19679a7741086 ChannelCallStateConferenceHost a00756.html ggac0a5e07b6cb83e50403bb971a60f45bfa594aa75472a6d190873ad4fcb56f564e _ChannelCallStatePadding a00756.html ggac0a5e07b6cb83e50403bb971a60f45bfa6cc625f385bf307291d2192be7b9743d ChannelGroupFlag a00756.html gadeaed0d7e8e3d306d4e4398387975857 ChannelGroupFlagCanAdd a00756.html ggadeaed0d7e8e3d306d4e4398387975857a92287976a53cff7fef872f7f338a6421 ChannelGroupFlagCanRemove a00756.html ggadeaed0d7e8e3d306d4e4398387975857a234d1cfcee7a197f0fe4dfaeec2c73e2 ChannelGroupFlagCanRescind a00756.html ggadeaed0d7e8e3d306d4e4398387975857aac6aa1a60ca623539e07af0af9311551 ChannelGroupFlagMessageAdd a00756.html ggadeaed0d7e8e3d306d4e4398387975857ac38ac45c32ee6580351f538db1cce427 ChannelGroupFlagMessageRemove a00756.html ggadeaed0d7e8e3d306d4e4398387975857a79a63ed9daf2566c8d98ebf7587b1547 ChannelGroupFlagMessageAccept a00756.html ggadeaed0d7e8e3d306d4e4398387975857ae4f4fe9907dc0c03d6952c4fcc20761e ChannelGroupFlagMessageReject a00756.html ggadeaed0d7e8e3d306d4e4398387975857aa1f993c76d9eeb1d9060428c79b562d1 ChannelGroupFlagMessageRescind a00756.html ggadeaed0d7e8e3d306d4e4398387975857a4cf292e38653fa27b7a8747d3dc20ab7 ChannelGroupFlagChannelSpecificHandles a00756.html ggadeaed0d7e8e3d306d4e4398387975857a6d9439ac4c1f06dd8c04d5963f9710bd ChannelGroupFlagOnlyOneGroup a00756.html ggadeaed0d7e8e3d306d4e4398387975857a014d2efa5ce405f7657c2a25d371f5fa ChannelGroupFlagHandleOwnersNotAvailable a00756.html ggadeaed0d7e8e3d306d4e4398387975857af98f1fe1441423f1638a4e27ffe7d61f ChannelGroupFlagProperties a00756.html ggadeaed0d7e8e3d306d4e4398387975857a4f141283930e2bcc21685084fb1355ef ChannelGroupFlagMembersChangedDetailed a00756.html ggadeaed0d7e8e3d306d4e4398387975857a4b809cf8cfc8bf253d66fc1e3f0cec00 ChannelGroupFlagMessageDepart a00756.html ggadeaed0d7e8e3d306d4e4398387975857a87b9a4cf165b77967282575281461a4a _ChannelGroupFlagPadding a00756.html ggadeaed0d7e8e3d306d4e4398387975857ab9a9872dfb053cb6cc6eb46c98dcc9c8 MessagePartSupportFlag a00756.html ga1c55f4f4934456de1364e395cc22c263 MessagePartSupportFlagOneAttachment a00756.html gga1c55f4f4934456de1364e395cc22c263afa21b09e15a4fac12a46721d2c7ea00f MessagePartSupportFlagMultipleAttachments a00756.html gga1c55f4f4934456de1364e395cc22c263ad7c9a031c066fdfe21a799da018ddb2a _MessagePartSupportFlagPadding a00756.html gga1c55f4f4934456de1364e395cc22c263aeff156ec7ed5a541c527a6957f21193b MessageSendingFlag a00756.html gad55925d8d24fecd516519f3a92aafb58 MessageSendingFlagReportDelivery a00756.html ggad55925d8d24fecd516519f3a92aafb58a2e33eea159b91165f09f475b88f32434 MessageSendingFlagReportRead a00756.html ggad55925d8d24fecd516519f3a92aafb58a27520e910e54d28731f7895ca2a37ad7 MessageSendingFlagReportDeleted a00756.html ggad55925d8d24fecd516519f3a92aafb58aef03fa0d57d5807de53537433b6f2afb _MessageSendingFlagPadding a00756.html ggad55925d8d24fecd516519f3a92aafb58a5a564addc4d0a541643b23f686c9195c DeliveryReportingSupportFlag a00756.html gaaa94e5e1d4cb5701a33445e2984cb486 DeliveryReportingSupportFlagReceiveFailures a00756.html ggaaa94e5e1d4cb5701a33445e2984cb486a0d0715bc2e3cd811592257b806f076ca DeliveryReportingSupportFlagReceiveSuccesses a00756.html ggaaa94e5e1d4cb5701a33445e2984cb486aa340e76702c1564dfbde667e3c73ba71 DeliveryReportingSupportFlagReceiveRead a00756.html ggaaa94e5e1d4cb5701a33445e2984cb486aaf7a82a3ba3c1742d823ab71c633e79f DeliveryReportingSupportFlagReceiveDeleted a00756.html ggaaa94e5e1d4cb5701a33445e2984cb486abe6bcf6721e9c937bc3bd815e44eb483 _DeliveryReportingSupportFlagPadding a00756.html ggaaa94e5e1d4cb5701a33445e2984cb486a860915b62679978ddeea0bc1acdb5f7a ChannelPasswordFlag a00756.html gae5ebd6e742d951f5a5d31ac1e9e185c3 ChannelPasswordFlagProvide a00756.html ggae5ebd6e742d951f5a5d31ac1e9e185c3a90aa19041edfc0a0d6ec392f6a8029b3 ChannelPasswordFlagHint a00756.html ggae5ebd6e742d951f5a5d31ac1e9e185c3a049f04e1f55b3af8897d4ff5c3afbc3e _ChannelPasswordFlagPadding a00756.html ggae5ebd6e742d951f5a5d31ac1e9e185c3a8775a4977b8cb374d1ea8f1c3782a44f PropertyFlag a00756.html ga2268bdb3b45d0d46b05a7275f6a58bbe PropertyFlagRead a00756.html gga2268bdb3b45d0d46b05a7275f6a58bbea1b8c2f894807777844a02825fe59acb2 PropertyFlagWrite a00756.html gga2268bdb3b45d0d46b05a7275f6a58bbea853cc919d8d0ae43796362f285730314 _PropertyFlagPadding a00756.html gga2268bdb3b45d0d46b05a7275f6a58bbeafaefb2c4fc8a7b7e4848aba2413bdf9f StorageRestrictionFlag a00756.html ga8b5b12da307a1bca780ae392e899b16e StorageRestrictionFlagCannotSetParameters a00756.html gga8b5b12da307a1bca780ae392e899b16ea9a2bd9bb405afffb62a8b8eb50ee511a StorageRestrictionFlagCannotSetEnabled a00756.html gga8b5b12da307a1bca780ae392e899b16ea50bbce0cb18abedc1d31e57d67cba304 StorageRestrictionFlagCannotSetPresence a00756.html gga8b5b12da307a1bca780ae392e899b16eafe1d54999a2154d0f8fa96082f8e7fd5 StorageRestrictionFlagCannotSetService a00756.html gga8b5b12da307a1bca780ae392e899b16ea5170fcc3bb7cc2f6a7381e044bf9a972 _StorageRestrictionFlagPadding a00756.html gga8b5b12da307a1bca780ae392e899b16ea263a5409e2f093e9cc13282c6cd8b73c RTCPXRStatisticsFlag a00756.html gaa5f5055496c072aa97fd7f9e0f0c5419 RTCPXRStatisticsFlagLoss a00756.html ggaa5f5055496c072aa97fd7f9e0f0c5419aca1da490d670b5e2796b4ea1cca57f81 RTCPXRStatisticsFlagDuplicate a00756.html ggaa5f5055496c072aa97fd7f9e0f0c5419afcede23e95c8d6df44b10d9bb30d2e1a RTCPXRStatisticsFlagJitter a00756.html ggaa5f5055496c072aa97fd7f9e0f0c5419a27b33220b8af82c00d3e05aaab0d578a RTCPXRStatisticsFlagTTL a00756.html ggaa5f5055496c072aa97fd7f9e0f0c5419a3e010b11f7c39f8103d38a5f4d40a926 RTCPXRStatisticsFlagHL a00756.html ggaa5f5055496c072aa97fd7f9e0f0c5419a7569492e0f4e73d1e9e6966d5b8b5905 _RTCPXRStatisticsFlagPadding a00756.html ggaa5f5055496c072aa97fd7f9e0f0c5419a2219b3c5087e04541721c30fd316089a enumtypeconsts Enumerated type constants a00757.html HandleType a00757.html ga36fa367f622d8b98416393b3fe4c89d2 HandleTypeNone a00757.html ga36fa367f622d8b98416393b3fe4c89d2af89959dcf135559145d99732346c69e6 HandleTypeContact a00757.html ga36fa367f622d8b98416393b3fe4c89d2a5c0c85266c24696c080d2a688ec8bfa3 HandleTypeRoom a00757.html ga36fa367f622d8b98416393b3fe4c89d2ac4186e266a163cb4ced697e949b02cd3 HandleTypeList a00757.html ga36fa367f622d8b98416393b3fe4c89d2aff5b4d0f0110236fea4c3dcaafa67af9 HandleTypeGroup a00757.html ga36fa367f622d8b98416393b3fe4c89d2a2b95392fef02b76d4321a242e40173be _HandleTypePadding a00757.html ga36fa367f622d8b98416393b3fe4c89d2ac34fe4f627ac03b51f67c08636d62f8b ConnectionStatus a00757.html ga601f90d95125a95ed0ff9a546fb1363f ConnectionStatusConnected a00757.html ga601f90d95125a95ed0ff9a546fb1363fa6af1d5f41051b70b5c14bd19c4174d17 ConnectionStatusConnecting a00757.html ga601f90d95125a95ed0ff9a546fb1363fac691efe1fa9ab0c66332033c7817cf71 ConnectionStatusDisconnected a00757.html ga601f90d95125a95ed0ff9a546fb1363fa92910aabeadb7e95d5ccc7f13dac571c _ConnectionStatusPadding a00757.html ga601f90d95125a95ed0ff9a546fb1363faab3d27bb3ec6b8e831694eff11657d73 ConnectionStatusReason a00757.html gafcefb23369c2cf510f27775670294c6c ConnectionStatusReasonNoneSpecified a00757.html gafcefb23369c2cf510f27775670294c6cad4eedc748700e9f70a2da3d09d551300 ConnectionStatusReasonRequested a00757.html gafcefb23369c2cf510f27775670294c6ca2d0e83ce43fc2aa9b4afcd2bfb43fe6a ConnectionStatusReasonNetworkError a00757.html gafcefb23369c2cf510f27775670294c6ca98b5990d6c4d741b2063898f3592804f ConnectionStatusReasonAuthenticationFailed a00757.html gafcefb23369c2cf510f27775670294c6cac47620cab72ea7c2581e7fff78576c6b ConnectionStatusReasonEncryptionError a00757.html gafcefb23369c2cf510f27775670294c6ca5e5a11e3c27b792e1e84550d0bf31df1 ConnectionStatusReasonNameInUse a00757.html gafcefb23369c2cf510f27775670294c6caafc5abcd599707f4a3e9b000fa067496 ConnectionStatusReasonCertNotProvided a00757.html gafcefb23369c2cf510f27775670294c6ca2e699ec66e40de505f322fc8be878dc3 ConnectionStatusReasonCertUntrusted a00757.html gafcefb23369c2cf510f27775670294c6ca1f883ac52d327e25483a04dffcbf7e51 ConnectionStatusReasonCertExpired a00757.html gafcefb23369c2cf510f27775670294c6cafa91b31af9d1614844984e9ece64a32a ConnectionStatusReasonCertNotActivated a00757.html gafcefb23369c2cf510f27775670294c6ca5a5fd148b1bea5ad268da790fad52ef6 ConnectionStatusReasonCertHostnameMismatch a00757.html gafcefb23369c2cf510f27775670294c6ca2f4d5c18d6004f1243e47c9d65469997 ConnectionStatusReasonCertFingerprintMismatch a00757.html gafcefb23369c2cf510f27775670294c6caeeb9251b845f2cabfef42d4c8142dbe7 ConnectionStatusReasonCertSelfSigned a00757.html gafcefb23369c2cf510f27775670294c6ca80a9a592ebead08b6c414783598e8221 ConnectionStatusReasonCertOtherError a00757.html gafcefb23369c2cf510f27775670294c6ca1a97d6650615a881a8c78de07f131392 ConnectionStatusReasonCertRevoked a00757.html gafcefb23369c2cf510f27775670294c6cadac2dc2c58a78c85777564cda333445d ConnectionStatusReasonCertInsecure a00757.html gafcefb23369c2cf510f27775670294c6ca4133cb4e2c25a051548aac43fe440101 ConnectionStatusReasonCertLimitExceeded a00757.html gafcefb23369c2cf510f27775670294c6caa59fbd6d253a7f8100387e6d0e20e234 _ConnectionStatusReasonPadding a00757.html gafcefb23369c2cf510f27775670294c6ca40a4510b965940d1d12deb1d5289859f ContactListState a00757.html gad1ebe7859ea635738c90418460309dc7 ContactListStateNone a00757.html gad1ebe7859ea635738c90418460309dc7af310e50dbccd4e278dfda34de8229489 ContactListStateWaiting a00757.html gad1ebe7859ea635738c90418460309dc7a9f625f030f9168435c3ae9d9c7f7c9d4 ContactListStateFailure a00757.html gad1ebe7859ea635738c90418460309dc7ac932eb0a0fd5d2f4030dae78657ce314 ContactListStateSuccess a00757.html gad1ebe7859ea635738c90418460309dc7af8a70e85564460c8d9f72dba6bdb65a0 _ContactListStatePadding a00757.html gad1ebe7859ea635738c90418460309dc7aacd1235c772e255bc07304675005eff9 SubscriptionState a00757.html ga6c99f8845100a205c12d66ec117a78de SubscriptionStateUnknown a00757.html ga6c99f8845100a205c12d66ec117a78dea57618775be1e938333647f3f832e9354 SubscriptionStateNo a00757.html ga6c99f8845100a205c12d66ec117a78dea759008dafd20b15b8ded54735926f990 SubscriptionStateRemovedRemotely a00757.html ga6c99f8845100a205c12d66ec117a78deab530cc8b1158603d43de733e6df54be1 SubscriptionStateAsk a00757.html ga6c99f8845100a205c12d66ec117a78dea3c5c2a8cbaea19e032423e8c5a5ba365 SubscriptionStateYes a00757.html ga6c99f8845100a205c12d66ec117a78dea167c5e6e0bc915d6fa5d1e48b24118bf _SubscriptionStatePadding a00757.html ga6c99f8845100a205c12d66ec117a78deaef819596d05709f7ad510da6d132f8db ContactMetadataStorageType a00757.html ga4d71f3cae6d427dd3c2d59b6f7f72bab ContactMetadataStorageTypeNone a00757.html ga4d71f3cae6d427dd3c2d59b6f7f72babac80c4375e54a9caa0b4074e95c2e60de ContactMetadataStorageTypeSubscribedOrPending a00757.html ga4d71f3cae6d427dd3c2d59b6f7f72baba64095a44b4de5ba6f9de0950a3dff789 ContactMetadataStorageTypeSubscribed a00757.html ga4d71f3cae6d427dd3c2d59b6f7f72babacd011a48c30589a2f701e7a7963abb58 ContactMetadataStorageTypeAnyone a00757.html ga4d71f3cae6d427dd3c2d59b6f7f72baba40f8a384e7a569b8fd9bd895b0fa73be _ContactMetadataStorageTypePadding a00757.html ga4d71f3cae6d427dd3c2d59b6f7f72babadc7c3bb44ba6fde83a87c969a2754882 HTTPMethod a00757.html ga555eee1bc333732490e1c4b8de9d1c88 HTTPMethodGet a00757.html ga555eee1bc333732490e1c4b8de9d1c88a82991109c053cac31f87b5cc1dfd42f0 HTTPMethodPost a00757.html ga555eee1bc333732490e1c4b8de9d1c88a923c73a532b12a1648862aefeb742351 _HTTPMethodPadding a00757.html ga555eee1bc333732490e1c4b8de9d1c88a4e5848d03cd970af98883a850ad4b5a6 ServicePointType a00757.html ga245141cc45e499cf4c660bf82c79453d ServicePointTypeNone a00757.html ga245141cc45e499cf4c660bf82c79453da53ae328cb93800ab8069e41ad01507c3 ServicePointTypeEmergency a00757.html ga245141cc45e499cf4c660bf82c79453dabf1bf92f07054247f9eb3f3ee0bf39fa ServicePointTypeCounseling a00757.html ga245141cc45e499cf4c660bf82c79453dabfb78370c8fcd533d70d9e9fe154677f _ServicePointTypePadding a00757.html ga245141cc45e499cf4c660bf82c79453da362acf4fa51a2fc98cda93ba0c378d81 ConnectionPresenceType a00757.html ga1f94046a888cc61a4c86f5426c4e9875 ConnectionPresenceTypeUnset a00757.html ga1f94046a888cc61a4c86f5426c4e9875aa1a9e769fc869eab68bdf1082ed4194d ConnectionPresenceTypeOffline a00757.html ga1f94046a888cc61a4c86f5426c4e9875a42893dcb07d9e743264653f2b1004f27 ConnectionPresenceTypeAvailable a00757.html ga1f94046a888cc61a4c86f5426c4e9875a5f13818f8fc8e0a1d2e635f0e290959d ConnectionPresenceTypeAway a00757.html ga1f94046a888cc61a4c86f5426c4e9875a0daa17373b159ace07e31e28e3e571e5 ConnectionPresenceTypeExtendedAway a00757.html ga1f94046a888cc61a4c86f5426c4e9875a22736f0f3c6517c6b50ba72b14c15dd1 ConnectionPresenceTypeHidden a00757.html ga1f94046a888cc61a4c86f5426c4e9875a93007eafa25f26e5c1fcdea1c558c2af ConnectionPresenceTypeBusy a00757.html ga1f94046a888cc61a4c86f5426c4e9875af1aaa306a6e92a81f03826000564c860 ConnectionPresenceTypeUnknown a00757.html ga1f94046a888cc61a4c86f5426c4e9875a246d03a6f3964d6d53bba07e132e8479 ConnectionPresenceTypeError a00757.html ga1f94046a888cc61a4c86f5426c4e9875aee12216cb066cb145ef76ca65e7c8d12 _ConnectionPresenceTypePadding a00757.html ga1f94046a888cc61a4c86f5426c4e9875ae09a65c8ab3476117627b294429d94cc AccessControlType a00757.html gabb9cd3c2de41e5caa1e42f04dfa036ba AccessControlTypeWhitelist a00757.html gabb9cd3c2de41e5caa1e42f04dfa036baadb4e9c21aebc1b28c9db82f9b9b83d3f AccessControlTypePublishList a00757.html gabb9cd3c2de41e5caa1e42f04dfa036baab2686c25851ee877f5a34fa44599e739 AccessControlTypeGroup a00757.html gabb9cd3c2de41e5caa1e42f04dfa036baa891e5e8face80384a496dd25fe59c457 AccessControlTypeOpen a00757.html gabb9cd3c2de41e5caa1e42f04dfa036baadab26fb2daff5d11560330c362d17a72 AccessControlTypeSubscribeOrPublishList a00757.html gabb9cd3c2de41e5caa1e42f04dfa036baa89afa1bd6de8ce162daca2cb4f072c5b AccessControlTypeClosed a00757.html gabb9cd3c2de41e5caa1e42f04dfa036baa2e98912e22741a8f52792412d18e1374 AccessControlTypeNotUnderstood a00757.html gabb9cd3c2de41e5caa1e42f04dfa036baab31c729946edb3fc6367cd955be48f5e _AccessControlTypePadding a00757.html gabb9cd3c2de41e5caa1e42f04dfa036baa113a017dc5796a924c814877e19670f9 RichPresenceAccessControlType a00757.html gada0e452157f0ace844f898df2328dd89 RichPresenceAccessControlTypeWhitelist a00757.html gada0e452157f0ace844f898df2328dd89a9030fc904f2c033d7dc65e75563321fa RichPresenceAccessControlTypePublishList a00757.html gada0e452157f0ace844f898df2328dd89a8197a38175a34ef69a79d560e607e660 RichPresenceAccessControlTypeGroup a00757.html gada0e452157f0ace844f898df2328dd89a14db81756caee469621dc35c49b1a03e RichPresenceAccessControlTypeOpen a00757.html gada0e452157f0ace844f898df2328dd89a132a7cfc6674c6404b1982cc0c5e6a52 _RichPresenceAccessControlTypePadding a00757.html gada0e452157f0ace844f898df2328dd89ad24aca58593d5a10e15564b119847cd5 CallState a00757.html ga29b57a5b4f94c451af84b5e57102c4d9 CallStateUnknown a00757.html ga29b57a5b4f94c451af84b5e57102c4d9a41367cc733adb6ea98643b24a74b5d88 CallStatePendingInitiator a00757.html ga29b57a5b4f94c451af84b5e57102c4d9aedebb08c95e37b5bbc2fcc41ee9fdfdc CallStateInitialising a00757.html ga29b57a5b4f94c451af84b5e57102c4d9a4715d2742ff582df46e1f5a501392335 CallStateInitialised a00757.html ga29b57a5b4f94c451af84b5e57102c4d9af60a9178889d8d0db1d56312bfccac9a CallStateAccepted a00757.html ga29b57a5b4f94c451af84b5e57102c4d9ac8f6abefc2087c47eb6c3b4f9f36b1b9 CallStateActive a00757.html ga29b57a5b4f94c451af84b5e57102c4d9ae00c2709e6515b32bbd57c9cad73064e CallStateEnded a00757.html ga29b57a5b4f94c451af84b5e57102c4d9ab7448536f3d5274e5b0dc995648efc60 _CallStatePadding a00757.html ga29b57a5b4f94c451af84b5e57102c4d9a3e85d0aff14c3c1588ac5902cc706d5f CallStateChangeReason a00757.html ga76f639168e50102c9de416ca38721a80 CallStateChangeReasonUnknown a00757.html ga76f639168e50102c9de416ca38721a80ae8415ad2b16289077d2c5e500dc1295d CallStateChangeReasonProgressMade a00757.html ga76f639168e50102c9de416ca38721a80ad25bca1fe2d9850b8799eac6c45a5bc7 CallStateChangeReasonUserRequested a00757.html ga76f639168e50102c9de416ca38721a80aca9ca451661e58baa6e6776904183184 CallStateChangeReasonForwarded a00757.html ga76f639168e50102c9de416ca38721a80a146edc9f2bf775dadc0fec696f12d147 CallStateChangeReasonRejected a00757.html ga76f639168e50102c9de416ca38721a80ae7b99c110154b433239540fed7984ecf CallStateChangeReasonNoAnswer a00757.html ga76f639168e50102c9de416ca38721a80a20b8a39d962991b07e890c11dabf6822 CallStateChangeReasonInvalidContact a00757.html ga76f639168e50102c9de416ca38721a80a1401a7adcca399a952fcae727f41bbd0 CallStateChangeReasonPermissionDenied a00757.html ga76f639168e50102c9de416ca38721a80ab9bbe2fd958138d3df4a82fe1034e585 CallStateChangeReasonBusy a00757.html ga76f639168e50102c9de416ca38721a80ab9f44ff3310752e0889181bf670b8155 CallStateChangeReasonInternalError a00757.html ga76f639168e50102c9de416ca38721a80a6b1c119afbaef077f2168bdcce49d7db CallStateChangeReasonServiceError a00757.html ga76f639168e50102c9de416ca38721a80a1d5846e29976ba99c07287f8f15d8ca2 CallStateChangeReasonNetworkError a00757.html ga76f639168e50102c9de416ca38721a80ac764e91ed0cf502072c1374342541d5a CallStateChangeReasonMediaError a00757.html ga76f639168e50102c9de416ca38721a80a5588aa2532eb7415e347b623ca8f5551 CallStateChangeReasonConnectivityError a00757.html ga76f639168e50102c9de416ca38721a80a1dc8412ac14fc83d517ffa42afdc217c _CallStateChangeReasonPadding a00757.html ga76f639168e50102c9de416ca38721a80aad70506b0d1c5a02e5cc596cfcacdba2 ChannelContactSearchState a00757.html gad6239ceeae9aa8a33b49fec1b77e535d ChannelContactSearchStateNotStarted a00757.html gad6239ceeae9aa8a33b49fec1b77e535da6d7b29eb8febda2c506bc566c10248f9 ChannelContactSearchStateInProgress a00757.html gad6239ceeae9aa8a33b49fec1b77e535da1b4aaa5f39b1c550afccbb8a58c4fece ChannelContactSearchStateMoreAvailable a00757.html gad6239ceeae9aa8a33b49fec1b77e535da78325173e9c273bde3b46ac3467eb173 ChannelContactSearchStateCompleted a00757.html gad6239ceeae9aa8a33b49fec1b77e535da3a306ee2b594771e71838cb90a6733fd ChannelContactSearchStateFailed a00757.html gad6239ceeae9aa8a33b49fec1b77e535da8fbac7e828625f03349227bf126e781c _ChannelContactSearchStatePadding a00757.html gad6239ceeae9aa8a33b49fec1b77e535da939a306e71fe8481235f39aa256117bd FileTransferState a00757.html ga4fae9d8b47f004df92c9eda24cf8781e FileTransferStateNone a00757.html ga4fae9d8b47f004df92c9eda24cf8781ea706f060b407122404bb21e326fbed074 FileTransferStatePending a00757.html ga4fae9d8b47f004df92c9eda24cf8781eab6b3d23b02024da063bd17441383bc7f FileTransferStateAccepted a00757.html ga4fae9d8b47f004df92c9eda24cf8781ea8ab3abc401d923aff9d5dfaaf7a1b93d FileTransferStateOpen a00757.html ga4fae9d8b47f004df92c9eda24cf8781ea8ad132aec75c843581f9485f5e811673 FileTransferStateCompleted a00757.html ga4fae9d8b47f004df92c9eda24cf8781eae50cd129faf3d6729df2ffe97c614510 FileTransferStateCancelled a00757.html ga4fae9d8b47f004df92c9eda24cf8781ea1de760588d3471e7b7c337158d1cc12a _FileTransferStatePadding a00757.html ga4fae9d8b47f004df92c9eda24cf8781ea2c9a1e6b3478b332b32bc5b65881064c FileTransferStateChangeReason a00757.html ga2a35d8ba60e214fd8f1e284ea3d38aef FileTransferStateChangeReasonNone a00757.html ga2a35d8ba60e214fd8f1e284ea3d38aefa20c12a9ed075c82c01c7e2b118387375 FileTransferStateChangeReasonRequested a00757.html ga2a35d8ba60e214fd8f1e284ea3d38aefad5ceb0681274fcb980781d2081e0bbd0 FileTransferStateChangeReasonLocalStopped a00757.html ga2a35d8ba60e214fd8f1e284ea3d38aefa994c886ca6639971a44c6f1d39cd8b45 FileTransferStateChangeReasonRemoteStopped a00757.html ga2a35d8ba60e214fd8f1e284ea3d38aefa248a063f70c5b5d233280ebc30af3b06 FileTransferStateChangeReasonLocalError a00757.html ga2a35d8ba60e214fd8f1e284ea3d38aefa03a74da7f2a9052612accf9e48c66c26 FileTransferStateChangeReasonRemoteError a00757.html ga2a35d8ba60e214fd8f1e284ea3d38aefa6ab01ac71d857162d139e24da4f2701d _FileTransferStateChangeReasonPadding a00757.html ga2a35d8ba60e214fd8f1e284ea3d38aefad37120830f305845cdf1df588abbfdf6 FileHashType a00757.html ga01668c37b6bf53402bd46218a778a077 FileHashTypeNone a00757.html ga01668c37b6bf53402bd46218a778a077a5425aefada78b0e6bb843aca067122ff FileHashTypeMD5 a00757.html ga01668c37b6bf53402bd46218a778a077af187e18369189fc8de709b62180a0913 FileHashTypeSHA1 a00757.html ga01668c37b6bf53402bd46218a778a077a758e4c3fa6c0eed34bb8a193382287aa FileHashTypeSHA256 a00757.html ga01668c37b6bf53402bd46218a778a077a13e7ee71af363e65e1ea8256d6b42b99 _FileHashTypePadding a00757.html ga01668c37b6bf53402bd46218a778a077ab3946a7403e0c0393d48675d87ea0e9f MediaStreamType a00757.html ga792af87e6990a550aea64cffd907b6af MediaStreamTypeAudio a00757.html ga792af87e6990a550aea64cffd907b6afa6cbfe7ede4404ebf3b660f4814ae3ecb MediaStreamTypeVideo a00757.html ga792af87e6990a550aea64cffd907b6afae67152402c83bc8e01263c784d8f27d4 _MediaStreamTypePadding a00757.html ga792af87e6990a550aea64cffd907b6afaef884197c1277bed4b70463c41728bfb MediaStreamState a00757.html gade0301e7ed872ed3ce2fe49fef847ef0 MediaStreamStateDisconnected a00757.html gade0301e7ed872ed3ce2fe49fef847ef0a20a0fcc2033be0126745e0f2d5782ac2 MediaStreamStateConnecting a00757.html gade0301e7ed872ed3ce2fe49fef847ef0ae4bd974acadcc6f461b214c728d76323 MediaStreamStateConnected a00757.html gade0301e7ed872ed3ce2fe49fef847ef0a113b29fea3d710696fc67e6d01994d4d _MediaStreamStatePadding a00757.html gade0301e7ed872ed3ce2fe49fef847ef0a5b998dce825824302d07b31bf1dccf47 MediaStreamDirection a00757.html gadcab310dc357419cb70579825175da64 MediaStreamDirectionNone a00757.html gadcab310dc357419cb70579825175da64af650069e060e98cf7ae0f2fde9acb91b MediaStreamDirectionSend a00757.html gadcab310dc357419cb70579825175da64a6364176a18a2c24c47f53445e5a690d7 MediaStreamDirectionReceive a00757.html gadcab310dc357419cb70579825175da64a5acbd56c8a1c214fa01230cf7aed1487 MediaStreamDirectionBidirectional a00757.html gadcab310dc357419cb70579825175da64ab781b88425ab2b8706e5ec2de542b7f4 _MediaStreamDirectionPadding a00757.html gadcab310dc357419cb70579825175da64ae554a8714498b747e9a87f24bb416379 ChannelTextSendError a00757.html ga5d62f6836d5167746124d53ba55e1dbd ChannelTextSendErrorUnknown a00757.html ga5d62f6836d5167746124d53ba55e1dbdac32481e278a5fae5e455bbbc793a9ecb ChannelTextSendErrorOffline a00757.html ga5d62f6836d5167746124d53ba55e1dbda3ad35d336edd345d0121d4063c4d181b ChannelTextSendErrorInvalidContact a00757.html ga5d62f6836d5167746124d53ba55e1dbdad7cb872eb410b4377eedcae6a6e95ce9 ChannelTextSendErrorPermissionDenied a00757.html ga5d62f6836d5167746124d53ba55e1dbdabbf708315596e486649430690af2fd25 ChannelTextSendErrorTooLong a00757.html ga5d62f6836d5167746124d53ba55e1dbda09d675f77316a66e1e330f2209bddecf ChannelTextSendErrorNotImplemented a00757.html ga5d62f6836d5167746124d53ba55e1dbda1020e6a8825cda2e058814d47ac88d78 _ChannelTextSendErrorPadding a00757.html ga5d62f6836d5167746124d53ba55e1dbda2cbc5f7244f3ae488713b4c46270ec54 ChannelTextMessageType a00757.html ga7f1e23e32fa6218eebc7021d094a8f49 ChannelTextMessageTypeNormal a00757.html ga7f1e23e32fa6218eebc7021d094a8f49a37e68749b415d08419694a1e9e7837b4 ChannelTextMessageTypeAction a00757.html ga7f1e23e32fa6218eebc7021d094a8f49a1766ba6643dd1a5cee388cd7220848f5 ChannelTextMessageTypeNotice a00757.html ga7f1e23e32fa6218eebc7021d094a8f49a92bc2974bdd9f2c238705c73947512eb ChannelTextMessageTypeAutoReply a00757.html ga7f1e23e32fa6218eebc7021d094a8f49ad857b8087d7f921736efc85e2683e8be ChannelTextMessageTypeDeliveryReport a00757.html ga7f1e23e32fa6218eebc7021d094a8f49ad333d787b06dc9e8a79561573cb6fb1c _ChannelTextMessageTypePadding a00757.html ga7f1e23e32fa6218eebc7021d094a8f49a6b94ac490da4899a2d9194a5ab65cffe TubeType a00757.html ga4c2a799af2fe17765ee45a8d8b703e2b TubeTypeDBus a00757.html ga4c2a799af2fe17765ee45a8d8b703e2babd7cb9df9ff44362dcab29b480e989f3 TubeTypeStream a00757.html ga4c2a799af2fe17765ee45a8d8b703e2ba205172a6ad834a1ac53749020471efc9 _TubeTypePadding a00757.html ga4c2a799af2fe17765ee45a8d8b703e2ba2a7c7466d4784296d28389cc22df9934 TubeState a00757.html ga53f50d894433ea4833ff1e751afa14a0 TubeStateLocalPending a00757.html ga53f50d894433ea4833ff1e751afa14a0ad1b9acd6405cd62f5ea736bd9d1c8b79 TubeStateRemotePending a00757.html ga53f50d894433ea4833ff1e751afa14a0ad891c7f1fbedaa330c3386fbdba30cb8 TubeStateOpen a00757.html ga53f50d894433ea4833ff1e751afa14a0ad6c6b4da4bb3b838bf5b77f59b060e1c _TubeStatePadding a00757.html ga53f50d894433ea4833ff1e751afa14a0a722f3a7a2f07168c8e013a308414030d CaptchaCancelReason a00757.html ga06c22a4c5a0028dbf58b64f217e87e47 CaptchaCancelReasonUserCancelled a00757.html ga06c22a4c5a0028dbf58b64f217e87e47ac833d4316d8cb6a6c89e5b7516e2572a CaptchaCancelReasonNotSupported a00757.html ga06c22a4c5a0028dbf58b64f217e87e47a2de6b3db732ff32d3960159dcea850ab CaptchaCancelReasonServiceConfused a00757.html ga06c22a4c5a0028dbf58b64f217e87e47aa7138d74344d4af0fbf47f9224420949 _CaptchaCancelReasonPadding a00757.html ga06c22a4c5a0028dbf58b64f217e87e47a1fde3bd11bff35f89fed67e3ce233d08 CaptchaStatus a00757.html gaa4dc89cbad454d2d524302c2f2504bc2 CaptchaStatusLocalPending a00757.html gaa4dc89cbad454d2d524302c2f2504bc2a4d02051d9bf2c2e9104598e9914e947f CaptchaStatusRemotePending a00757.html gaa4dc89cbad454d2d524302c2f2504bc2add7e32a7261a06996685d997bcb48306 CaptchaStatusSucceeded a00757.html gaa4dc89cbad454d2d524302c2f2504bc2ae61f5e63f2b2a5f05f9fc6469fcd1f15 CaptchaStatusTryAgain a00757.html gaa4dc89cbad454d2d524302c2f2504bc2a0df479d6ffca18bdd3122ce1c108c8a8 CaptchaStatusFailed a00757.html gaa4dc89cbad454d2d524302c2f2504bc2a14ceed4683e79bea397aa6cb572ed8c4 _CaptchaStatusPadding a00757.html gaa4dc89cbad454d2d524302c2f2504bc2a25d48ffe6ad3f6580fe03182c8188757 ChannelChatState a00757.html gafafcdfb5cc02a057311ebe1c3b339e50 ChannelChatStateGone a00757.html gafafcdfb5cc02a057311ebe1c3b339e50ae88de9b6a777523fcd095dffc66a77a2 ChannelChatStateInactive a00757.html gafafcdfb5cc02a057311ebe1c3b339e50a128b7853bb11562a90ebdc0c4e9a3b2e ChannelChatStateActive a00757.html gafafcdfb5cc02a057311ebe1c3b339e50a439643af76ef0bf428ffbcf958d4a1cb ChannelChatStatePaused a00757.html gafafcdfb5cc02a057311ebe1c3b339e50acea42513e9a70afaecfbf676dfbfa00b ChannelChatStateComposing a00757.html gafafcdfb5cc02a057311ebe1c3b339e50a29b17e44519c26f35f5d423e5a528b7c _ChannelChatStatePadding a00757.html gafafcdfb5cc02a057311ebe1c3b339e50ad39be07d5bc7d821871509c9ccfbfd16 DTMFEvent a00757.html ga012772bfae380954ec1655209ae053a4 DTMFEventDigit0 a00757.html ga012772bfae380954ec1655209ae053a4aba871cc8e5bb6f76d8e98fb3ea1b7b0f DTMFEventDigit1 a00757.html ga012772bfae380954ec1655209ae053a4aba24c37745bbc1663e371a02af724aa3 DTMFEventDigit2 a00757.html ga012772bfae380954ec1655209ae053a4a0b435ba1e5929b5f1285b4ed7bb4461c DTMFEventDigit3 a00757.html ga012772bfae380954ec1655209ae053a4ab5233d11f39ac3742e77feda41335d2d DTMFEventDigit4 a00757.html ga012772bfae380954ec1655209ae053a4a5b33b94977d7037ba782e43589f8a7c7 DTMFEventDigit5 a00757.html ga012772bfae380954ec1655209ae053a4a97ff04d31b935dff321a7fda4ff5c00f DTMFEventDigit6 a00757.html ga012772bfae380954ec1655209ae053a4abce00b38a8ef909f478e361d302a31b1 DTMFEventDigit7 a00757.html ga012772bfae380954ec1655209ae053a4ae36fb4b8bdf680dc9b5412ff12d0a959 DTMFEventDigit8 a00757.html ga012772bfae380954ec1655209ae053a4a7c38653c053fbab594870ebf4a988078 DTMFEventDigit9 a00757.html ga012772bfae380954ec1655209ae053a4a8f68ad6d8b9acd6de913b1bb7fadb9cb DTMFEventAsterisk a00757.html ga012772bfae380954ec1655209ae053a4acea062bf869937b1ad2ac5dc32625ba2 DTMFEventHash a00757.html ga012772bfae380954ec1655209ae053a4af2ea268770f0ed9b85211bed605eff7b DTMFEventLetterA a00757.html ga012772bfae380954ec1655209ae053a4abd42c36f21149b9547b5d98d50a4a5d7 DTMFEventLetterB a00757.html ga012772bfae380954ec1655209ae053a4a59813e8bc99d39cbe247100cc2f369ea DTMFEventLetterC a00757.html ga012772bfae380954ec1655209ae053a4a461aac5ce08cce03d43e02a11493aa56 DTMFEventLetterD a00757.html ga012772bfae380954ec1655209ae053a4afef5cae80946be1da53a642689946937 _DTMFEventPadding a00757.html ga012772bfae380954ec1655209ae053a4a4a5e01929a9c646ce84029d47841f154 ChannelGroupChangeReason a00757.html ga23b323e3a7d7e111827d7ecd5816611b ChannelGroupChangeReasonNone a00757.html ga23b323e3a7d7e111827d7ecd5816611bae138b982d4c9bbe853228fcbca5bb2d2 ChannelGroupChangeReasonOffline a00757.html ga23b323e3a7d7e111827d7ecd5816611ba04b849bb9ebef99d7ae5fe0be2d1c767 ChannelGroupChangeReasonKicked a00757.html ga23b323e3a7d7e111827d7ecd5816611bab5f6a81c45744defdf3d9e5a39f9b2b5 ChannelGroupChangeReasonBusy a00757.html ga23b323e3a7d7e111827d7ecd5816611bae95ea1e70846c6ed613694b02a75137d ChannelGroupChangeReasonInvited a00757.html ga23b323e3a7d7e111827d7ecd5816611ba93acb38c57c97166217c56683bfe532a ChannelGroupChangeReasonBanned a00757.html ga23b323e3a7d7e111827d7ecd5816611ba7a73c9f0c82baaf01577caa0faa3e9f4 ChannelGroupChangeReasonError a00757.html ga23b323e3a7d7e111827d7ecd5816611ba0d6c1d6b1ef4817db00b425a8a7e8568 ChannelGroupChangeReasonInvalidContact a00757.html ga23b323e3a7d7e111827d7ecd5816611bad6a3f9751907dba0b8948387ed869ad7 ChannelGroupChangeReasonNoAnswer a00757.html ga23b323e3a7d7e111827d7ecd5816611ba7a9e904a1e78b248a12ec90e532a325f ChannelGroupChangeReasonRenamed a00757.html ga23b323e3a7d7e111827d7ecd5816611bab548182cdb61cf8f401be9056dab542f ChannelGroupChangeReasonPermissionDenied a00757.html ga23b323e3a7d7e111827d7ecd5816611ba7965c7a788e1b15c44f0502d1b28a245 ChannelGroupChangeReasonSeparated a00757.html ga23b323e3a7d7e111827d7ecd5816611ba6e360d0a9cdc2652204e2cbe0293452f _ChannelGroupChangeReasonPadding a00757.html ga23b323e3a7d7e111827d7ecd5816611ba76ad374c857e4425205d2e981651f5dd LocalHoldState a00757.html gacb8a20bad361e968d1a7170bae64a34d LocalHoldStateUnheld a00757.html gacb8a20bad361e968d1a7170bae64a34da834824a35b674e8db7942e88b8c2886e LocalHoldStateHeld a00757.html gacb8a20bad361e968d1a7170bae64a34da282c8058e0e6a9d8d5ec88db26b6a80e LocalHoldStatePendingHold a00757.html gacb8a20bad361e968d1a7170bae64a34da3be247a894e45db07a60647a2ef66991 LocalHoldStatePendingUnhold a00757.html gacb8a20bad361e968d1a7170bae64a34da94586be270ad7b459f3fd7609a01aae9 _LocalHoldStatePadding a00757.html gacb8a20bad361e968d1a7170bae64a34da59dc43715eb19356066a493296db9642 LocalHoldStateReason a00757.html ga4738883a2b74c73d53c34db4214dfe64 LocalHoldStateReasonNone a00757.html ga4738883a2b74c73d53c34db4214dfe64a18b9753a1e0264b869a0c016b86ef9b5 LocalHoldStateReasonRequested a00757.html ga4738883a2b74c73d53c34db4214dfe64ab0637c6b3d632497a8f96f1fe722c20f LocalHoldStateReasonResourceNotAvailable a00757.html ga4738883a2b74c73d53c34db4214dfe64a752618dffe4900ab096690e25f1532df _LocalHoldStateReasonPadding a00757.html ga4738883a2b74c73d53c34db4214dfe64a5b935757ae39c5d894ba9d8628fe78d6 DeliveryStatus a00757.html ga604080e478c7ae07ec133324c3c844b1 DeliveryStatusUnknown a00757.html ga604080e478c7ae07ec133324c3c844b1af2e4b056d294ec494ff11bc2651a85bc DeliveryStatusDelivered a00757.html ga604080e478c7ae07ec133324c3c844b1ac2407dda8e99aca8ad1cfee1afbe7cd8 DeliveryStatusTemporarilyFailed a00757.html ga604080e478c7ae07ec133324c3c844b1a234e2d9c6c716cf8f6846a03b842651c DeliveryStatusPermanentlyFailed a00757.html ga604080e478c7ae07ec133324c3c844b1a414de69453b2798d0953ddb4178b96ce DeliveryStatusAccepted a00757.html ga604080e478c7ae07ec133324c3c844b1a83d67dce5a05963fd154b4168cd71e5e DeliveryStatusRead a00757.html ga604080e478c7ae07ec133324c3c844b1a0783f23ad57a2a04bc96deb54a786ec7 DeliveryStatusDeleted a00757.html ga604080e478c7ae07ec133324c3c844b1a73d92cd732f875053ad60cab0eed5d10 _DeliveryStatusPadding a00757.html ga604080e478c7ae07ec133324c3c844b1a26349096eded56b4083f437fbe035ec3 SASLAbortReason a00757.html gaf4f8a401f061ad5c26257f8e4e581050 SASLAbortReasonInvalidChallenge a00757.html gaf4f8a401f061ad5c26257f8e4e581050aeae9b855eb8241e7a0cef7b82f34e29e SASLAbortReasonUserAbort a00757.html gaf4f8a401f061ad5c26257f8e4e581050a177255584f02c722ae4f0346a61fa449 _SASLAbortReasonPadding a00757.html gaf4f8a401f061ad5c26257f8e4e581050a40b83468e273779bad71801a433c0256 SASLStatus a00757.html gad32b4dc0f4e05f7f5f054f8e86e29a71 SASLStatusNotStarted a00757.html gad32b4dc0f4e05f7f5f054f8e86e29a71aa17ef57b95fe5ad37a86eebf327c5115 SASLStatusInProgress a00757.html gad32b4dc0f4e05f7f5f054f8e86e29a71a8383e86ce0c8434fdb5fbe945211ddb7 SASLStatusServerSucceeded a00757.html gad32b4dc0f4e05f7f5f054f8e86e29a71a26c1f1732db66be7434c4889d77a369b SASLStatusClientAccepted a00757.html gad32b4dc0f4e05f7f5f054f8e86e29a71a78ef3cf9ff636a4c917ea97ef16f5ab7 SASLStatusSucceeded a00757.html gad32b4dc0f4e05f7f5f054f8e86e29a71af1ca144e6962c5e60682400c48d0959c SASLStatusServerFailed a00757.html gad32b4dc0f4e05f7f5f054f8e86e29a71ab405ecc7532cb71ae9594ad8a32308ea SASLStatusClientFailed a00757.html gad32b4dc0f4e05f7f5f054f8e86e29a71a270f05634247b2af51ea04dd2cfabc91 _SASLStatusPadding a00757.html gad32b4dc0f4e05f7f5f054f8e86e29a71a9ef08b10aca094bad487ed8f7b575b32 TubeChannelState a00757.html gaed213c3ef4c3a3a732c871e2ec42285c TubeChannelStateLocalPending a00757.html gaed213c3ef4c3a3a732c871e2ec42285ca2d6619fb7b4865ee832222cbff28fbf6 TubeChannelStateRemotePending a00757.html gaed213c3ef4c3a3a732c871e2ec42285ca0baf79855da8c3c520522c47324de2a9 TubeChannelStateOpen a00757.html gaed213c3ef4c3a3a732c871e2ec42285ca11243c36e2b4521f5d120dbe811413c1 TubeChannelStateNotOffered a00757.html gaed213c3ef4c3a3a732c871e2ec42285ca3f74a3ac21241ca3374983174099dde8 _TubeChannelStatePadding a00757.html gaed213c3ef4c3a3a732c871e2ec42285ca7d745822170fc1e13fa4f111d39a96d6 SocketAddressType a00757.html ga7c4136f60d444e2c62c9b6568cf96824 SocketAddressTypeUnix a00757.html ga7c4136f60d444e2c62c9b6568cf96824af3e31ed96405c22c9c255ab087aa0202 SocketAddressTypeAbstractUnix a00757.html ga7c4136f60d444e2c62c9b6568cf96824a205dd31f0952d22fd896541321646d91 SocketAddressTypeIPv4 a00757.html ga7c4136f60d444e2c62c9b6568cf96824ac3d350676a2a8f1a0024e8a22de2a752 SocketAddressTypeIPv6 a00757.html ga7c4136f60d444e2c62c9b6568cf96824a58293e917107b6c17bc6997bdbbdbdb3 _SocketAddressTypePadding a00757.html ga7c4136f60d444e2c62c9b6568cf96824acf256d93a4904324a44de7886a7db9d0 SocketAccessControl a00757.html ga59816b3c275bf13857e694c6ecec5fc9 SocketAccessControlLocalhost a00757.html ga59816b3c275bf13857e694c6ecec5fc9adc17ee56d8be8d2a8a1e3b63498bf909 SocketAccessControlPort a00757.html ga59816b3c275bf13857e694c6ecec5fc9a2c0ee1efb68ecddb8109490f3cd0f38d SocketAccessControlNetmask a00757.html ga59816b3c275bf13857e694c6ecec5fc9a526c352c65aee815e1403f1b05d6ffd5 SocketAccessControlCredentials a00757.html ga59816b3c275bf13857e694c6ecec5fc9ae9a58f3f6f2d5b1594f79002a63ab1e3 _SocketAccessControlPadding a00757.html ga59816b3c275bf13857e694c6ecec5fc9a1dc538633f1283be3bf70040130cd57d MediaStreamError a00757.html ga7378559696fef6d79ded2b9507834145 MediaStreamErrorUnknown a00757.html ga7378559696fef6d79ded2b9507834145a0bf9d4b1584d32b1aaf7b266e674ffc3 MediaStreamErrorEOS a00757.html ga7378559696fef6d79ded2b9507834145a57fb46b28042ed7bc1cf83c91362eb0d MediaStreamErrorCodecNegotiationFailed a00757.html ga7378559696fef6d79ded2b9507834145a31c11d8f2f55c182da9c3574f4ebc92a MediaStreamErrorConnectionFailed a00757.html ga7378559696fef6d79ded2b9507834145ae19086364c9c7ceef90692cc5e3c4553 MediaStreamErrorNetworkError a00757.html ga7378559696fef6d79ded2b9507834145ac7d864eb9b8517195597bc1b4e11136b MediaStreamErrorNoCodecs a00757.html ga7378559696fef6d79ded2b9507834145a1cddeded4db95f017084436dedff81fc MediaStreamErrorInvalidCMBehavior a00757.html ga7378559696fef6d79ded2b9507834145ac17c1e925b6c43ac849221266d95abe8 MediaStreamErrorMediaError a00757.html ga7378559696fef6d79ded2b9507834145a49acb3724b348b1814a90fa1117b71e4 _MediaStreamErrorPadding a00757.html ga7378559696fef6d79ded2b9507834145a3a472fa4d8cb01f7528fd315715ddece MediaStreamBaseProto a00757.html ga58b6c53046bff44524cbbd491d92b4dd MediaStreamBaseProtoUDP a00757.html ga58b6c53046bff44524cbbd491d92b4dda1a45c84819c5f5aa636721fa8c708ca3 MediaStreamBaseProtoTCP a00757.html ga58b6c53046bff44524cbbd491d92b4ddac73367ac89da1393cead276ab54d0d69 _MediaStreamBaseProtoPadding a00757.html ga58b6c53046bff44524cbbd491d92b4dda144e797fd2edc04784a7e733b346315a MediaStreamTransportType a00757.html gabaca565c16b2802bb9ea5cbf6b6a4327 MediaStreamTransportTypeLocal a00757.html gabaca565c16b2802bb9ea5cbf6b6a4327a4e1cd3df3ca51fe5491b3174c5084dcd MediaStreamTransportTypeDerived a00757.html gabaca565c16b2802bb9ea5cbf6b6a4327a97b1a445af18a0893768798fa801d6b9 MediaStreamTransportTypeRelay a00757.html gabaca565c16b2802bb9ea5cbf6b6a4327af4a2724c7f58b312e88a62f240681ace _MediaStreamTransportTypePadding a00757.html gabaca565c16b2802bb9ea5cbf6b6a4327ad35bc6c05d123c807b61c8190d570f6d DebugLevel a00757.html gabcd296a1f2f46223df1468700a3e22dc DebugLevelError a00757.html gabcd296a1f2f46223df1468700a3e22dca8e1728f5f1c5dea6f5d6e3d7804571d2 DebugLevelCritical a00757.html gabcd296a1f2f46223df1468700a3e22dca7764c642ac4cb8ef7d765a4942e9a1fa DebugLevelWarning a00757.html gabcd296a1f2f46223df1468700a3e22dca6a0e73d20aacf43a7de1621228084032 DebugLevelMessage a00757.html gabcd296a1f2f46223df1468700a3e22dcab825ff1a2efce24bfa0acea9fbdfe5c7 DebugLevelInfo a00757.html gabcd296a1f2f46223df1468700a3e22dca97f62eb29596bee19b4e6c730977867d DebugLevelDebug a00757.html gabcd296a1f2f46223df1468700a3e22dcaf1bf23992286b9212eaeca48501f0c71 _DebugLevelPadding a00757.html gabcd296a1f2f46223df1468700a3e22dcad632475463b5493179e2fa8e65d70bba TLSCertificateState a00757.html ga4599a4b62efa6b890716cc33c204a899 TLSCertificateStatePending a00757.html ga4599a4b62efa6b890716cc33c204a899ae43c8b95d2be8e8a725ec871be1915f5 TLSCertificateStateAccepted a00757.html ga4599a4b62efa6b890716cc33c204a899a92f9dceb8c50ead8b2e414cdf67e4691 TLSCertificateStateRejected a00757.html ga4599a4b62efa6b890716cc33c204a899a55ab7c9dfdf2f2f2f8d86761def3564c _TLSCertificateStatePadding a00757.html ga4599a4b62efa6b890716cc33c204a899a1ea99d4faa537948f77aab306daaca69 TLSCertificateRejectReason a00757.html gad74334f93654c0c1adbdd03ee0196488 TLSCertificateRejectReasonUnknown a00757.html gad74334f93654c0c1adbdd03ee0196488a6b18f12c84b98e2e5fcdf543f9f18cb6 TLSCertificateRejectReasonUntrusted a00757.html gad74334f93654c0c1adbdd03ee0196488afd94cbef2b741adf31344098db448efd TLSCertificateRejectReasonExpired a00757.html gad74334f93654c0c1adbdd03ee0196488a5394a96eccdc3b21cd7dd3d3cd2a98a6 TLSCertificateRejectReasonNotActivated a00757.html gad74334f93654c0c1adbdd03ee0196488a6cdc7c812f6988bda6efc8717149b892 TLSCertificateRejectReasonFingerprintMismatch a00757.html gad74334f93654c0c1adbdd03ee0196488a96e7dd1a7b4ad5b3e85d2632ddb6adc0 TLSCertificateRejectReasonHostnameMismatch a00757.html gad74334f93654c0c1adbdd03ee0196488a2b85f82659b659086956189f2b30ce1e TLSCertificateRejectReasonSelfSigned a00757.html gad74334f93654c0c1adbdd03ee0196488a0ed2c1a19819284a4142db4d6468ef49 TLSCertificateRejectReasonRevoked a00757.html gad74334f93654c0c1adbdd03ee0196488aa65901c32dbe47596ff4af0ab7f0d071 TLSCertificateRejectReasonInsecure a00757.html gad74334f93654c0c1adbdd03ee0196488addf4f700339e938b9c8b57e242363a8b TLSCertificateRejectReasonLimitExceeded a00757.html gad74334f93654c0c1adbdd03ee0196488acf4bf671caa2ab60767794321c1a4d52 _TLSCertificateRejectReasonPadding a00757.html gad74334f93654c0c1adbdd03ee0196488a613cc55b18197783c0b95a72feb072e1 CallContentPacketizationType a00757.html gaf4760523ed21820d3c2a6e74a230defe CallContentPacketizationTypeRTP a00757.html gaf4760523ed21820d3c2a6e74a230defead0b067ea6416e64cca910812a12f1cf6 CallContentPacketizationTypeRaw a00757.html gaf4760523ed21820d3c2a6e74a230defea50512d6e710cc8d4fc30a0ebe5ab5343 CallContentPacketizationTypeMSNWebcam a00757.html gaf4760523ed21820d3c2a6e74a230defea916ffc6cf0d6dee0a06e8238ac5a6262 _CallContentPacketizationTypePadding a00757.html gaf4760523ed21820d3c2a6e74a230defeab66a3102877d1c05cbe0b597c101bb5e CallContentDisposition a00757.html ga0b9c2541a4cb18bd89fb50dc37c057ad CallContentDispositionNone a00757.html ga0b9c2541a4cb18bd89fb50dc37c057adadfc0b70af8ad2490d73f50aa1f474aee CallContentDispositionInitial a00757.html ga0b9c2541a4cb18bd89fb50dc37c057adadb7ace9352dc4088311da29a12b7be4f _CallContentDispositionPadding a00757.html ga0b9c2541a4cb18bd89fb50dc37c057adaaca3027c7f76035ce61ba1be39ecf11a RCPTXRRTTMode a00757.html ga69b6598dfe33d3f82bf225d6e387aaee RCPTXRRTTModeAll a00757.html ga69b6598dfe33d3f82bf225d6e387aaeeae6bc80f78b2f3ba88969b7289e3bb60c RCPTXRRTTModeSender a00757.html ga69b6598dfe33d3f82bf225d6e387aaeea0075f473c2a6254b3e888e0291b9c115 _RCPTXRRTTModePadding a00757.html ga69b6598dfe33d3f82bf225d6e387aaeea0f035c43a2ca7bd34048524b3991f114 StreamFlowState a00757.html ga57557f44cb750a772273d285d131242b StreamFlowStateStopped a00757.html ga57557f44cb750a772273d285d131242ba8042d34a732148f8b9bd0bb41e284c6b StreamFlowStatePendingStart a00757.html ga57557f44cb750a772273d285d131242ba0d736e7ccaec759526ee4b821d325a66 StreamFlowStatePendingStop a00757.html ga57557f44cb750a772273d285d131242ba0776426f146a2db8cf03c2572e49f31a StreamFlowStateStarted a00757.html ga57557f44cb750a772273d285d131242ba6c86f88a465502140f506bb0582f815d _StreamFlowStatePadding a00757.html ga57557f44cb750a772273d285d131242ba8249702021ca71004be5c89072c6b9c3 CallStreamCandidateType a00757.html gaf49827bf619488a43ca02670b391d981 CallStreamCandidateTypeNone a00757.html gaf49827bf619488a43ca02670b391d981afec61a63031e9bb39e28e6d6b43483d0 CallStreamCandidateTypeHost a00757.html gaf49827bf619488a43ca02670b391d981a7e6dca8593d61df8c1e939c8751e5a3a CallStreamCandidateTypeServerReflexive a00757.html gaf49827bf619488a43ca02670b391d981aff7471655affad557d59f8ab9367e54a CallStreamCandidateTypePeerReflexive a00757.html gaf49827bf619488a43ca02670b391d981acdda0ef65ecd90be69838c8bd67b4397 CallStreamCandidateTypeRelay a00757.html gaf49827bf619488a43ca02670b391d981a3bc120cfd06d0a7d18eaff40f2351ba7 CallStreamCandidateTypeMulticast a00757.html gaf49827bf619488a43ca02670b391d981a763e0f7ba4240229a26d73f0985dfd1c _CallStreamCandidateTypePadding a00757.html gaf49827bf619488a43ca02670b391d981a49d9190ff0c52058300b26602fd0c111 StreamComponent a00757.html gacba6e022f5b3292e88e2fb372c4e47b1 StreamComponentUnknown a00757.html gacba6e022f5b3292e88e2fb372c4e47b1af11a292444ac96a318352472fbf89216 StreamComponentData a00757.html gacba6e022f5b3292e88e2fb372c4e47b1a9bbe638136d2227d22e8f66918d86773 StreamComponentControl a00757.html gacba6e022f5b3292e88e2fb372c4e47b1a05e60bcb1450fe294cd7df6c8c53044f _StreamComponentPadding a00757.html gacba6e022f5b3292e88e2fb372c4e47b1a31763624549378b90218ef258e167325 StreamTransportType a00757.html gaab74feeec5bd0954e333caff3d971908 StreamTransportTypeUnknown a00757.html gaab74feeec5bd0954e333caff3d971908a19f0a61eb96ad82bdb787f69d0dc89fb StreamTransportTypeRawUDP a00757.html gaab74feeec5bd0954e333caff3d971908a673b45035add5c8eed84fc1f9bac0485 StreamTransportTypeICE a00757.html gaab74feeec5bd0954e333caff3d971908a777571595958760552d5118f97dff6ec StreamTransportTypeGTalkP2P a00757.html gaab74feeec5bd0954e333caff3d971908a35b2a77e3e69586f1bc08cc57a249599 StreamTransportTypeWLM2009 a00757.html gaab74feeec5bd0954e333caff3d971908a993dca4ce5c486bda2fb11eafffc600f StreamTransportTypeSHM a00757.html gaab74feeec5bd0954e333caff3d971908a07ad46f02a8d2351199bd0ff0e8109c3 StreamTransportTypeMulticast a00757.html gaab74feeec5bd0954e333caff3d971908a484a7f0c13e0fc6bd3b9646d3b3bc0d5 _StreamTransportTypePadding a00757.html gaab74feeec5bd0954e333caff3d971908a051cb55507eaab4b0330de993e03df1d SendingState a00757.html ga0c88294dbc48b75ba591dfab17ce8b0d SendingStateNone a00757.html ga0c88294dbc48b75ba591dfab17ce8b0da26a19edd449bb2334e5cdf6bc4b4076e SendingStatePendingSend a00757.html ga0c88294dbc48b75ba591dfab17ce8b0dad21a2ad2c8e8387672e3e60c9e3b05b6 SendingStateSending a00757.html ga0c88294dbc48b75ba591dfab17ce8b0daee8d5d7a2b72019255526874c7129fc0 SendingStatePendingStopSending a00757.html ga0c88294dbc48b75ba591dfab17ce8b0dac8fa85d237e13399527dafaeeeaadcf7 _SendingStatePadding a00757.html ga0c88294dbc48b75ba591dfab17ce8b0da30979609450bae8f0c5d74d6956f0b6d StreamEndpointState a00757.html gae7b563baf8ac09ee12a00f04e87703bd StreamEndpointStateConnecting a00757.html gae7b563baf8ac09ee12a00f04e87703bdab45f4463e556edd5e20cddd2032f5db2 StreamEndpointStateProvisionallyConnected a00757.html gae7b563baf8ac09ee12a00f04e87703bda74f5426e8522a80aabb32245a61bb8cb StreamEndpointStateFullyConnected a00757.html gae7b563baf8ac09ee12a00f04e87703bda6b3cc61f92e6ddead82cb11220319552 StreamEndpointStateExhaustedCandidates a00757.html gae7b563baf8ac09ee12a00f04e87703bdae2c9fd368bdce2ce2b4cf4ed0bbc44ae StreamEndpointStateFailed a00757.html gae7b563baf8ac09ee12a00f04e87703bda4437db7b85f19cb3a33ca7e836bb297f _StreamEndpointStatePadding a00757.html gae7b563baf8ac09ee12a00f04e87703bdaac58b7865c4ea4ffb711313e029e192d const int NUM_HANDLE_TYPES a00757.html ga23b2937d54313f18fddc50e51049224e const int NUM_CONNECTION_STATUSES a00757.html ga51c527949738caf38c485424584857d5 const int NUM_CONNECTION_STATUS_REASONS a00757.html ga7c63da3bd56c6f3a9314cfd7d466ae77 const int NUM_CONTACT_LIST_STATES a00757.html gafef1b806b948eef363dedfd3c8550935 const int NUM_SUBSCRIPTION_STATES a00757.html ga1066026edb2c924dd29e932bf0919a46 const int NUM_CONTACT_METADATA_STORAGE_TYPES a00757.html gae6e621542ef62c295ebad595c025604a const int NUM_HTTP_METHODS a00757.html ga727991cbea866a0000d18fd648859bc4 const int NUM_SERVICE_POINT_TYPES a00757.html ga2c408002f5c6691e190129a5c4dd55b3 const int NUM_CONNECTION_PRESENCE_TYPES a00757.html gac34c7572bf4aaecc2eb197659acd6ec4 const int NUM_ACCESS_CONTROL_TYPES a00757.html gaaddadcf3a2c5f356f79d7cf64bcb882d const int NUM_RICH_PRESENCE_ACCESS_CONTROL_TYPES a00757.html ga9bf83e6421ec8ce49937b1e95dcc77f7 const int NUM_CALL_STATES a00757.html ga849bd71910b6fde122a6828a9e8f4b49 const int NUM_CALL_STATE_CHANGE_REASONS a00757.html ga6fef28e82103edf666921355cb8f9c6b const int NUM_CHANNEL_CONTACT_SEARCH_STATES a00757.html ga5db8cc76bbcb2bc5ff6107f8c4d6453d const int NUM_FILE_TRANSFER_STATES a00757.html gafb681ac850e01abad10e3b484b0cc49b const int NUM_FILE_TRANSFER_STATE_CHANGE_REASONS a00757.html ga12e304098543152629637e49b916cd7e const int NUM_FILE_HASH_TYPES a00757.html ga91b5a335352c614e3e8d7956b7d151eb const int NUM_MEDIA_STREAM_TYPES a00757.html ga020e591698bc4bb04e35e4f98bf8c4f3 const int NUM_MEDIA_STREAM_STATES a00757.html ga53ef05a24413185540bbabac7fb29a3d const int NUM_MEDIA_STREAM_DIRECTIONS a00757.html ga92b5a97b69111f5119fd280848b1620e const int NUM_CHANNEL_TEXT_SEND_ERRORS a00757.html ga5df5b92c1722194593fc4069b1fd64f5 const int NUM_CHANNEL_TEXT_MESSAGE_TYPES a00757.html gaa3b94c8371162c898b7dc14728b02d3d const int NUM_TUBE_TYPES a00757.html ga04cae570f6300564d66ab85bb27ff393 const int NUM_TUBE_STATES a00757.html ga570400a3501480a78ada6d73d014c961 const int NUM_CAPTCHA_CANCEL_REASONS a00757.html ga76b89d0bf3094770baacd799465ee799 const int NUM_CAPTCHA_STATUSES a00757.html ga2266c7cf2ca710a664856fa617110e56 const int NUM_CHANNEL_CHAT_STATES a00757.html ga67f78e8d718687643b8a0916c8542208 const int NUM_DTMF_EVENTS a00757.html gaf57308ae5e0b480074d78a82194c05ce const int NUM_CHANNEL_GROUP_CHANGE_REASONS a00757.html ga392978c063029d424528a211471fd2a7 const int NUM_LOCAL_HOLD_STATES a00757.html gaa14f82b50ba815d15d1b132996a3779d const int NUM_LOCAL_HOLD_STATE_REASONS a00757.html ga76b407b65cc8c85810b124a5fb276345 const int NUM_DELIVERY_STATUSES a00757.html gacb7da01546b06ac67f5f3590c51c0db6 const int NUM_SASL_ABORT_REASONS a00757.html ga698fb6ee1474ba869f85b16bd2b0d366 const int NUM_SASL_STATUSES a00757.html gad05aae22ce147fc1c4ccb3713e524238 const int NUM_TUBE_CHANNEL_STATES a00757.html ga6a3a2b74a0cdd175165e9feb92a8e6d7 const int NUM_SOCKET_ADDRESS_TYPES a00757.html ga6b1c5504e1e1efd5351a37388aa4bdd5 const int NUM_SOCKET_ACCESS_CONTROLS a00757.html ga06b3062a1e6701d0e4f3b0a0c3334e80 const int NUM_MEDIA_STREAM_ERRORS a00757.html gadf99f8a1e60cfffdd5a02f7dceaf48bd const int NUM_MEDIA_STREAM_BASE_PROTOS a00757.html gac164eea6c21c2cd8a0f2b31aeb1f57a1 const int NUM_MEDIA_STREAM_TRANSPORT_TYPES a00757.html ga869d382e013d33a2f0d76390ec45dedc const int NUM_DEBUG_LEVELS a00757.html gaf443bff5b0eb066745920d8c81b3f47f const int NUM_TLS_CERTIFICATE_STATES a00757.html gaeb4f950a81daa039aeb673febe49fc5c const int NUM_TLS_CERTIFICATE_REJECT_REASONS a00757.html ga0f0ab633e7949e149a875dbf3a3f05e9 const int NUM_CALL_CONTENT_PACKETIZATION_TYPES a00757.html ga0603b7176d2161e8c6ac95e303952316 const int NUM_CALL_CONTENT_DISPOSITIONS a00757.html gacfe40cd91311309638b976aaa4e80b14 const int NUM_RCPT_XR_RTT_MODES a00757.html ga4c403e5aaa3b715de8710fd90a75d20f const int NUM_STREAM_FLOW_STATES a00757.html ga3795022133869c36d554a7874cd2c509 const int NUM_CALL_STREAM_CANDIDATE_TYPES a00757.html ga1b9cd2e8467258595f6dac7928eaf088 const int NUM_STREAM_COMPONENTS a00757.html gadb2306434f320cdd80edb9d573c76812 const int NUM_STREAM_TRANSPORT_TYPES a00757.html ga3eb19089259af918c9df32ab4648be98 const int NUM_SENDING_STATES a00757.html gafd9a5c0d96a7c1bc589a753452967a99 const int NUM_STREAM_ENDPOINT_STATES a00757.html ga453416f5d42ca929eb395db54bc923fb ifacestrconsts Interface string constants a00758.html #define TP_QT_IFACE_CONNECTION_MANAGER a00758.html gaf2d69eebd87916358dbb2789c22c8a3b #define TP_QT_IFACE_PROTOCOL a00758.html gac396e03d3f80971c45c0ede00b49e657 #define TP_QT_IFACE_PROTOCOL_INTERFACE_ADDRESSING a00758.html gaa387a1500f1269dc3b46a79fe8f192de #define TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS a00758.html ga66f0a419993fa30a62718db3bf9040b3 #define TP_QT_IFACE_PROTOCOL_INTERFACE_PRESENCE a00758.html ga8d1ecfa5822a767d0ae88c218aac5fa5 #define TP_QT_IFACE_CONNECTION a00758.html ga7f57ff8160f3d992ef409e7ea555292f #define TP_QT_IFACE_CONNECTION_INTERFACE_ADDRESSING a00758.html ga1a17f21cce3d103303a154b427790034 #define TP_QT_IFACE_CONNECTION_INTERFACE_ALIASING a00758.html ga7dddb9b2e33927d8789777f8275177db #define TP_QT_IFACE_CONNECTION_INTERFACE_ANONYMITY a00758.html gaa482d3b6ca7f8fbf2b741a17f6d1802a #define TP_QT_IFACE_CONNECTION_INTERFACE_AVATARS a00758.html gaab8b6e3cffd9105b1736134f91dadd05 #define TP_QT_IFACE_CONNECTION_INTERFACE_BALANCE a00758.html ga2fde533d84a80c6e7e3890ef0562a7c1 #define TP_QT_IFACE_CONNECTION_INTERFACE_CAPABILITIES a00758.html ga2d05b341f45019c5050648fe4d65c892 #define TP_QT_IFACE_CONNECTION_INTERFACE_CELLULAR a00758.html ga8a9954037f090267134140ac586bb4eb #define TP_QT_IFACE_CONNECTION_INTERFACE_CLIENT_TYPES a00758.html ga4e383e15608bb492a832569befe14a35 #define TP_QT_IFACE_CONNECTION_INTERFACE_CONTACTS a00758.html ga148e8449c3c3391f45c280a7f1b3745a #define TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_BLOCKING a00758.html ga05ce59b2d2c80ad26bfcb7abe85fac47 #define TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_CAPABILITIES a00758.html gacbe3d2fe2970be4f9898d36aaed2dd12 #define TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_GROUPS a00758.html ga30b74ef961f26ef66ae3a4eb06cd3adf #define TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_INFO a00758.html ga1c46f67f04a180fa07dcffdadc3d9fc0 #define TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_LIST a00758.html ga6522a15993c79e2ecb484a411a627537 #define TP_QT_IFACE_CONNECTION_INTERFACE_LOCATION a00758.html ga262bc6500bee934f3fa86b1ea83d7cdc #define TP_QT_IFACE_CONNECTION_INTERFACE_MAIL_NOTIFICATION a00758.html gad21a3a085137185b4871b0f620b55529 #define TP_QT_IFACE_CONNECTION_INTERFACE_POWER_SAVING a00758.html gab61a3f71bbcd6487c8e7b999eda20948 #define TP_QT_IFACE_CONNECTION_INTERFACE_PRESENCE a00758.html gabc8bdc7264be87cc72bcc78d382196f9 #define TP_QT_IFACE_CONNECTION_INTERFACE_REQUESTS a00758.html gad582414cb2c29431dd483c4909608b37 #define TP_QT_IFACE_CONNECTION_INTERFACE_SERVICE_POINT a00758.html ga9b014d8d38d88f1835664eed6f9acc8c #define TP_QT_IFACE_CONNECTION_INTERFACE_SIMPLE_PRESENCE a00758.html ga50eab47acb39f6ff34cb7c980719f08b #define TP_QT_IFACE_CHANNEL a00758.html ga843f2cc845c26cf7652414d23333f90d #define TP_QT_IFACE_CHANNEL_TYPE_CALL a00758.html gadb1792f7a67278262a7018537a62838b #define TP_QT_IFACE_CHANNEL_TYPE_CONTACT_LIST a00758.html gaf68d4007bd80ac57aa96cfaf626c6f50 #define TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH a00758.html gaba26df25134e3db06f093e698d41da9a #define TP_QT_IFACE_CHANNEL_TYPE_DBUS_TUBE a00758.html ga8bff1bf79350dd8bab1bdf36ad255f9b #define TP_QT_IFACE_CHANNEL_TYPE_FILE_TRANSFER a00758.html gaed5b7f0554952282b8cbb7f940428bec #define TP_QT_IFACE_CHANNEL_TYPE_ROOM_LIST a00758.html ga29ed77fac161f576f4c388b9d7338156 #define TP_QT_IFACE_CHANNEL_TYPE_SERVER_AUTHENTICATION a00758.html gaf03ade17a3c285e1e737e243a4e7e630 #define TP_QT_IFACE_CHANNEL_TYPE_SERVER_TLS_CONNECTION a00758.html gac1c8d66b90f883ea4fac9b87bf63d6d4 #define TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA a00758.html gabb44bae5a1606889ffd5bc2ef84f1234 #define TP_QT_IFACE_CHANNEL_TYPE_STREAM_TUBE a00758.html gad6f6ec071229d19a0af87d8167a8e824 #define TP_QT_IFACE_CHANNEL_TYPE_TEXT a00758.html gaa3c70264a3a68388140b0ac0c0d98ba0 #define TP_QT_IFACE_CHANNEL_TYPE_TUBES a00758.html ga764d9b1a9d4890fb76ef97639f26a65a #define TP_QT_IFACE_CHANNEL_INTERFACE_ANONYMITY a00758.html ga8bffe3efe73776bae7096b4132ac4430 #define TP_QT_IFACE_CHANNEL_INTERFACE_CAPTCHA_AUTHENTICATION a00758.html ga5d521a511f87f8553589fae06d616fac #define TP_QT_IFACE_CHANNEL_INTERFACE_CALL_STATE a00758.html ga57f5b68664e75ad0756be5daacd58c78 #define TP_QT_IFACE_CHANNEL_INTERFACE_CHAT_STATE a00758.html ga80f62096abef0aa2510ddd474cdfdab4 #define TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE a00758.html ga33ecf5d19a11ada53bb1608899b8fa37 #define TP_QT_IFACE_CHANNEL_INTERFACE_DESTROYABLE a00758.html gaac1efd7f28d5823846d722df630cae2e #define TP_QT_IFACE_CHANNEL_INTERFACE_DTMF a00758.html ga0dd3ad6e12d0b246142fad5ff9c33aa6 #define TP_QT_IFACE_CHANNEL_INTERFACE_FILE_TRANSFER_METADATA a00758.html ga2682dc0f2516a82e8943444d15cf2538 #define TP_QT_IFACE_CHANNEL_INTERFACE_GROUP a00758.html gaa67c0597f60010c798d069d7e5a57ec9 #define TP_QT_IFACE_CHANNEL_INTERFACE_HOLD a00758.html gaedbbe6335a1c8a97ac938a89efe2897c #define TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING a00758.html ga44533972496f82f85a19b1a129089420 #define TP_QT_IFACE_CHANNEL_INTERFACE_MESSAGES a00758.html ga0ae686d14bb7a32f6b55969ae3886578 #define TP_QT_IFACE_CHANNEL_INTERFACE_PASSWORD a00758.html ga4d82b94624b027d8b676493a27cf8923 #define TP_QT_IFACE_CHANNEL_INTERFACE_SASL_AUTHENTICATION a00758.html ga68dc4520146e486e951f113c226b3a35 #define TP_QT_IFACE_CHANNEL_INTERFACE_SECURABLE a00758.html ga6823b5e6cb145a79f772848542552225 #define TP_QT_IFACE_CHANNEL_INTERFACE_SERVICE_POINT a00758.html gabc616bd3a7ff8dd5a27e24d7cd0bf2b4 #define TP_QT_IFACE_CHANNEL_INTERFACE_SMS a00758.html ga4586f832364863d3837b0c6a53dc08d5 #define TP_QT_IFACE_CHANNEL_INTERFACE_TUBE a00758.html ga6ab95706f3c48f1a49566b674c5e1775 #define TP_QT_IFACE_CHANNEL_DISPATCHER a00758.html ga41548e8382e95accee0a557c8fe23786 #define TP_QT_IFACE_CHANNEL_DISPATCH_OPERATION a00758.html ga1b6580c0d18a9597a0588719e9d11480 #define TP_QT_IFACE_CHANNEL_REQUEST a00758.html gabc1b3633ecdd689901bd9492f95eebc6 #define TP_QT_IFACE_MEDIA_SESSION_HANDLER a00758.html ga16b6d9eb00bf820a55ffb1805b22bb7a #define TP_QT_IFACE_MEDIA_STREAM_HANDLER a00758.html ga1723adbd66f8992c0b1b0838429f480f #define TP_QT_IFACE_DBUS_DAEMON a00758.html ga0f49a38039830b1c49df81850aa9bd32 #define TP_QT_IFACE_INTROSPECTABLE a00758.html ga560c2a797d227718341ad4939666ddb7 #define TP_QT_IFACE_PEER a00758.html ga6990e389958424947765f09a90cbdfe1 #define TP_QT_IFACE_PROPERTIES a00758.html ga252ed4b1cbbe14c0f772a77f4be41363 #define TP_QT_IFACE_DEBUG a00758.html ga97a740413a803402a5e3755100edd972 #define TP_QT_IFACE_PROPERTIES_INTERFACE a00758.html ga71d7dfb70d71a9196f7904ca2274883c #define TP_QT_IFACE_ACCOUNT_MANAGER a00758.html gab300a056e3491c334bf7dd3b57c288ef #define TP_QT_IFACE_ACCOUNT a00758.html gae5e5cf3d74338b3c96eb3792e171cb89 #define TP_QT_IFACE_ACCOUNT_INTERFACE_ADDRESSING a00758.html ga800d76b425ca6ebf5c2db7270cb5f74b #define TP_QT_IFACE_ACCOUNT_INTERFACE_AVATAR a00758.html ga0e8e90f360595814598ae0b1a9fda801 #define TP_QT_IFACE_ACCOUNT_INTERFACE_STORAGE a00758.html gab626be3e9cb8ac4c82f826e9d6f35702 #define TP_QT_IFACE_CLIENT a00758.html gafeed14b1b373bd5d0780a0a9be240e63 #define TP_QT_IFACE_CLIENT_OBSERVER a00758.html gaa698d51161c6dabaea74775099bd9922 #define TP_QT_IFACE_CLIENT_APPROVER a00758.html ga728bd2dc837fa91c5f446c0189eb3607 #define TP_QT_IFACE_CLIENT_HANDLER a00758.html gad8a287a33d2a4d4455d755666c182ef6 #define TP_QT_IFACE_CLIENT_INTERFACE_REQUESTS a00758.html gad4a7fc1e1c48893b9dddfe61599685ed #define TP_QT_IFACE_AUTHENTICATION_TLS_CERTIFICATE a00758.html gaceb8c3205d26ba9c93f7cb14a95913be #define TP_QT_IFACE_CALL_CONTENT_INTERFACE_MEDIA a00758.html ga19064156c397c3294b4c22fa137a77fd #define TP_QT_IFACE_CALL_CONTENT_INTERFACE_DTMF a00758.html ga84390e181e0725ed2d6ef6445af265ea #define TP_QT_IFACE_CALL_CONTENT_INTERFACE_VIDEO_CONTROL a00758.html ga69a72ae647358e2fd7bc1cd93aaafbed #define TP_QT_IFACE_CALL_CONTENT_INTERFACE_AUDIO_CONTROL a00758.html ga8c5988653107a7028431ee07dd4e3b76 #define TP_QT_IFACE_CALL_CONTENT a00758.html gadd0ef288e767073b06e142d8bd02c555 #define TP_QT_IFACE_CALL_CONTENT_MEDIA_DESCRIPTION_INTERFACE_RTCP_EXTENDED_REPORTS a00758.html ga0dec517846794df9cb3abf573fc61d7d #define TP_QT_IFACE_CALL_CONTENT_MEDIA_DESCRIPTION_INTERFACE_RTCP_FEEDBACK a00758.html gaa2e24286eb4e19e9203859a439293a31 #define TP_QT_IFACE_CALL_CONTENT_MEDIA_DESCRIPTION_INTERFACE_RTP_HEADER_EXTENSIONS a00758.html ga90cdd1c7c1496785a487ce5b92f15a27 #define TP_QT_IFACE_CALL_CONTENT_MEDIA_DESCRIPTION a00758.html gad76b2760da1d5d7412d51e2b42667b8f #define TP_QT_IFACE_CALL_STREAM_INTERFACE_MEDIA a00758.html gaf54a92b45fac3c4fd28c749866be87cd #define TP_QT_IFACE_CALL_STREAM a00758.html ga179c247d57183f70c2cd40bfff7394b6 #define TP_QT_IFACE_CALL_STREAM_ENDPOINT a00758.html ga98f44a1349a84dbbf0a87d43679fd98b errorstrconsts Error string constants a00759.html #define TP_QT_DBUS_ERROR_NAME_HAS_NO_OWNER a00759.html ga6564dfeb1fd342f909aa574d2c43dd9a #define TP_QT_DBUS_ERROR_UNKNOWN_INTERFACE a00759.html ga4fb645cf561929893f374c23a6438cdb #define TP_QT_DBUS_ERROR_UNKNOWN_METHOD a00759.html gabbfd8f6a898f01b96c6a9c854444a369 #define TP_QT_ERROR_OBJECT_REMOVED a00759.html gac29742c58a9a6ec646939e005873c497 #define TP_QT_ERROR_INCONSISTENT a00759.html ga41a4cf084fb4f49265ff3214cc61cecb #define TP_QT_ERROR_ORPHANED a00759.html ga380cd75c260c398bf1bc67785b838ae0 #define TP_QT_ERROR_NETWORK_ERROR a00759.html ga65e9021101931112e71cac342f39bec6 #define TP_QT_ERROR_NOT_IMPLEMENTED a00759.html ga5578e1b4fc9e7c798ac652002e1ee867 #define TP_QT_ERROR_INVALID_ARGUMENT a00759.html ga748489420e8c33e725363f9f5e1cadf4 #define TP_QT_ERROR_NOT_AVAILABLE a00759.html ga142d0c5162cadf41ef1737532aef012d #define TP_QT_ERROR_PERMISSION_DENIED a00759.html gaff6cdf30606d29f299c517e0609fa8d4 #define TP_QT_ERROR_DISCONNECTED a00759.html ga81c5413de9e100afc33233fb0149cfd7 #define TP_QT_ERROR_INVALID_HANDLE a00759.html gada56cf0f29dd9b846fe24529d2f3dbea #define TP_QT_ERROR_CHANNEL_BANNED a00759.html gae6f61b274461415f7feb58b0b1f0cc6e #define TP_QT_ERROR_CHANNEL_FULL a00759.html ga5e2a776fd4d9b3d589144c4226bf4058 #define TP_QT_ERROR_CHANNEL_INVITE_ONLY a00759.html ga2f7d257f26d5e52a1a399be07598316d #define TP_QT_ERROR_NOT_YOURS a00759.html ga353c44a48d9b850d5708e8c76dd27902 #define TP_QT_ERROR_CANCELLED a00759.html ga52bfa67b2af1655d7cdd66c516020812 #define TP_QT_ERROR_AUTHENTICATION_FAILED a00759.html ga3101a5aac3ee3bb0fb7d57f91dd13083 #define TP_QT_ERROR_ENCRYPTION_NOT_AVAILABLE a00759.html gabe2260dbb5c6f15a3d08912eeca3d974 #define TP_QT_ERROR_ENCRYPTION_ERROR a00759.html ga991c5c813352d541bd864d77fef2dd21 #define TP_QT_ERROR_CERT_NOT_PROVIDED a00759.html ga0ec967168175a000d6752bbe56cd4395 #define TP_QT_ERROR_CERT_UNTRUSTED a00759.html gacf29162fdea09b31fae947c77612bd95 #define TP_QT_ERROR_CERT_EXPIRED a00759.html gaf805864981be5a31bfae3e076d80474f #define TP_QT_ERROR_CERT_NOT_ACTIVATED a00759.html gabc79cad4eddc564712c2bf6a0ce6190d #define TP_QT_ERROR_CERT_FINGERPRINT_MISMATCH a00759.html ga1997bbc705628a9de2e96a9ce12cd8de #define TP_QT_ERROR_CERT_HOSTNAME_MISMATCH a00759.html ga0007a99b4966022ad5ed651a045a4367 #define TP_QT_ERROR_CERT_SELF_SIGNED a00759.html ga2fcadf7e8f7e8ca6272ce52a29ef9814 #define TP_QT_ERROR_CERT_REVOKED a00759.html ga022d8543d83be2fe8a4ef5fd03a89c38 #define TP_QT_ERROR_CERT_INSECURE a00759.html ga9a2156b2b4d55f55d596da1dd4fa639b #define TP_QT_ERROR_CERT_INVALID a00759.html gad6299d6f3c3f5b3ba0b104902c41638e #define TP_QT_ERROR_CERT_LIMIT_EXCEEDED a00759.html gafe234058d08b264b2e9764de4bf2c028 #define TP_QT_ERROR_NOT_CAPABLE a00759.html gac6ca70c7dcc9c7844667bbec2c52930b #define TP_QT_ERROR_OFFLINE a00759.html ga15c3c72b6c2e733b5bd5732b63fcce20 #define TP_QT_ERROR_CHANNEL_KICKED a00759.html gafa1d05f6d7216c6244c8c70af0bb7eeb #define TP_QT_ERROR_BUSY a00759.html gaff38238e3c8bd7ef22160214485eb634 #define TP_QT_ERROR_NO_ANSWER a00759.html ga82e60beacf86b1c0090b4a4763282c72 #define TP_QT_ERROR_DOES_NOT_EXIST a00759.html gaa71c0c24ba84d399c6e4fafa0f488a1e #define TP_QT_ERROR_TERMINATED a00759.html ga554d146983e044faad499d8ab0ce7eb5 #define TP_QT_ERROR_MEDIA_CODECS_INCOMPATIBLE a00759.html gaf07f17f02857d4393e26d92fdef1532d #define TP_QT_ERROR_MEDIA_UNSUPPORTED_TYPE a00759.html ga5a9bb6962c0f91e3563c217ef3bc8858 #define TP_QT_ERROR_MEDIA_STREAMING_ERROR a00759.html ga09f909dfc4522052ef2e1380046e200c #define TP_QT_ERROR_CONNECTION_REFUSED a00759.html ga0e76cc288ad8aa3c7d37ae644f6c911a #define TP_QT_ERROR_CONNECTION_FAILED a00759.html ga0d795bda9a3037474f1e0f150f3a5eb8 #define TP_QT_ERROR_CONNECTION_LOST a00759.html gae1c989d22b8611d5c748a31b693069ab #define TP_QT_ERROR_ALREADY_CONNECTED a00759.html ga8767758a0528481e78e7cbf27511be28 #define TP_QT_ERROR_CONNECTION_REPLACED a00759.html gad8d7ccfb2940598020cb410025e76c84 #define TP_QT_ERROR_REGISTRATION_EXISTS a00759.html ga4778df780a24b8bbe0dc5112bda7632b #define TP_QT_ERROR_SERVICE_BUSY a00759.html ga222e5f91acea45d362f8fa7b5d812034 #define TP_QT_ERROR_RESOURCE_UNAVAILABLE a00759.html ga0d4fbb909e1be3e00b0449f669ffb1fe #define TP_QT_ERROR_WOULD_BREAK_ANONYMITY a00759.html gad3d9877680070b453049e3ce6e4c49d7 #define TP_QT_ERROR_NOT_YET a00759.html ga912fa571003c4b9e9928b3af24b4fbc1 #define TP_QT_ERROR_REJECTED a00759.html ga2fbddff7b80dfc9461e133d96aaf6e25 #define TP_QT_ERROR_PICKED_UP_ELSEWHERE a00759.html ga16d46c17e689d40dd2ad13cbc760bca5 #define TP_QT_ERROR_SERVICE_CONFUSED a00759.html ga1a487cbd9d7d181aa29819b7bb2e244f #define TP_QT_ERROR_CONFUSED a00759.html gab5d9784bed7369eb655a0adaf959f7f0 #define TP_QT_ERROR_SOFTWARE_UPGRADE_REQUIRED a00759.html ga4bcfa78b05f6ab9aa2ce2b02f214c88e #define TP_QT_ERROR_EMERGENCY_CALLS_NOT_SUPPORTED a00759.html gac5d046fde515ad093e7ac84452a3966d #define TP_QT_ERROR_INSUFFICIENT_BALANCE a00759.html gad5ab7dddf12ffcfce38bd3ce0e3c50a1 #define TP_QT_ERROR_CAPTCHA_NOT_SUPPORTED a00759.html ga889bb3bc3f81633c6aba3b77747ac549 struct Structure types a00760.html Tp::AccessControl Tp::AliasPair Tp::Avatar Tp::CallStateReason Tp::Candidate Tp::CapabilityChange Tp::CapabilityPair Tp::CaptchaInfo Tp::ChannelDetails Tp::ChannelInfo Tp::ContactCapability Tp::ContactInfoField Tp::ContactSubscriptions Tp::CurrencyAmount Tp::DBusTubeMember Tp::DebugMessage Tp::FieldSpec Tp::HTTPPostData Tp::LocalPendingInfo Tp::MailAddress Tp::MediaDescriptionOffer Tp::MediaSessionHandlerInfo Tp::MediaStreamHandlerTransport Tp::MediaStreamInfo Tp::NotDelegatedError Tp::ParamSpec Tp::PendingTextMessage Tp::PropertyFlagsChange Tp::PropertySpec Tp::PropertyValue Tp::RTCPFeedbackMessage Tp::RTPHeaderExtension Tp::RequestableChannelClass Tp::RichPresenceAccessControl Tp::RoomInfo Tp::ServicePoint Tp::SimplePresence Tp::SimpleStatusSpec Tp::SocketAddressIP Tp::SocketAddressIPv4 Tp::SocketAddressIPv6 Tp::SocketNetmaskIPv4 Tp::SocketNetmaskIPv6 Tp::StreamCredentials Tp::TLSCertificateRejection Tp::TubeInfo Tp::VideoResolution Tp::CandidatePair Tp::Codec Tp::HandlerCapabilities Tp::LastActivityAndStatuses Tp::MailURL Tp::MediaStreamHandlerCandidate Tp::MediaStreamHandlerCodec Tp::RTCPFeedbackMessageProperties Tp::ServicePointInfo Tp::StatusSpec list List types a00761.html Tp::ByteArrayList Tp::ObjectPathList Tp::UIntList QList< AliasPair > AliasPairList a00761.html ga757dcd94888605b4f0d79f51bbcefa43 QList< CallMemberMap > CallMemberMapList a00761.html gaa5adf4e7ccf57ae583ba83c368f16cb5 QList< Candidate > CandidateList a00761.html gabdf7af55b514b0489d75746e76d5ab10 QList< CapabilityChange > CapabilityChangeList a00761.html ga0b2d49e1af78f1ab8d9249a5c4fe70d0 QList< CapabilityPair > CapabilityPairList a00761.html ga892cf317320ab69b02832d5dfca9273f QList< CaptchaInfo > CaptchaInfoList a00761.html gacd79793ab0ea32490833447992f64d91 QList< ChannelClass > ChannelClassList a00761.html ga635ae458e9972df8168a2467b8a9a667 QList< ChannelDetails > ChannelDetailsList a00761.html ga7014d699ff46041f3c88a396205ba4c0 QList< ChannelInfo > ChannelInfoList a00761.html ga5475de9fd22232c0550ef18ddd96e2ce QList< ContactCapability > ContactCapabilityList a00761.html ga25a7874e81a5b1884bfedfbc9de2b21c QList< ContactInfoField > ContactInfoFieldList a00761.html ga1bcdf451db0cd688c513eb251f9db826 QList< DBusTubeMember > DBusTubeMemberList a00761.html gaeb042df04a14635e599e4aac67d8cded QList< DebugMessage > DebugMessageList a00761.html gab97304df3b85109e3c7b723885d9afa1 QList< FieldSpec > FieldSpecs a00761.html ga86e2b82675f7aad4acef3399f9ac4f6b QList< HTTPPostData > HTTPPostDataList a00761.html gae6c63eb506f3a6076b6c07f351bf5eb7 QList< LocalPendingInfo > LocalPendingInfoList a00761.html gac97059fe5c133488d4dcfec37f43df7b QList< Mail > MailList a00761.html gae50b7b034851b01778a874e609029b87 QList< MailAddress > MailAddressList a00761.html ga13bf9d3d2e169d01cb6a1aa1182bc2ea QList< MediaSessionHandlerInfo > MediaSessionHandlerInfoList a00761.html ga07ca0c62ada90c615ee10bd22c70fb94 QList< MediaStreamHandlerTransport > MediaStreamHandlerTransportList a00761.html gaa367912f1202d6f2b29071f31633cd3c QList< MediaStreamInfo > MediaStreamInfoList a00761.html ga65181a48014c66c341422e7af20a58a7 QList< MessagePart > MessagePartList a00761.html gad29671d375c7a5bf1e8228f609b0d828 QList< MessagePartList > MessagePartListList a00761.html ga456fa0c4d341085f96af5222d70706b4 QList< ObjectImmutablePropertiesMap > ObjectImmutablePropertiesMapList a00761.html ga75d8bde97d8b9504f88ce0c9217b1595 QList< ParamSpec > ParamSpecList a00761.html gae1edd4964ec61f36c336217c86d21604 QList< PendingTextMessage > PendingTextMessageList a00761.html ga2b02972934a7134c50f58df1ed939bc3 QList< PropertyFlagsChange > PropertyFlagsChangeList a00761.html ga22a74fc2e884c0cadf09239b313a1687 QList< PropertySpec > PropertySpecList a00761.html ga88f81e671a1a1683537b0cc1e36c7c67 QList< PropertyValue > PropertyValueList a00761.html ga8565f094dc81def1852362f954930926 QList< QualifiedPropertyValueMap > QualifiedPropertyValueMapList a00761.html ga470b743611827a78ba5c10d9adc3a076 QList< RTCPFeedbackMessage > RTCPFeedbackMessageList a00761.html ga1c6419f296cb4c6815ec60f3642f4036 QList< RTPHeaderExtension > RTPHeaderExtensionsList a00761.html ga61c9bbcf5540dd326191a2f300c96165 QList< RequestableChannelClass > RequestableChannelClassList a00761.html gac19bde94a4bfba9311f1f37fbbdbe05c QList< RoomInfo > RoomInfoList a00761.html ga61418665719aaef9e0608f87eccca306 QList< SocketAddressIP > SocketAddressIPList a00761.html ga6ed3041ef7a8dd5a4169eb5a987c5c87 QList< StringStringMap > StringStringMapList a00761.html ga2869383d5f0b7f2efb5a7329491a2d8d QList< StringVariantMap > StringVariantMapList a00761.html ga82068e180fc9d8c9c169e4210271bfe3 QList< TLSCertificateRejection > TLSCertificateRejectionList a00761.html gae14945f191d95a4d3ff67d53f8e0e821 QList< TubeInfo > TubeInfoList a00761.html gaf81388615dd2d8fda5d74dc55f277799 QList< VideoResolution > VideoResolutionStruct a00761.html gad361c0dec97af2c12b57c8e72a01c74f QList< CandidatePair > CandidatePairList a00761.html ga4483704f64d5813fb1aa69e534f2f6aa QList< Codec > CodecList a00761.html ga109edbf33ad8b050e75e62e629dbe524 QList< ContactCapabilitiesMap > ContactCapabilitiesMapList a00761.html gaaba776766eb7d3cdc9161288bec3be04 QList< HandlerCapabilities > HandlerCapabilitiesList a00761.html ga557ebc02ad2e9e0c40549cd20928f3a0 QList< MediaStreamHandlerCandidate > MediaStreamHandlerCandidateList a00761.html ga014d46ba19f093138774d4f80e4f923f QList< MediaStreamHandlerCodec > MediaStreamHandlerCodecList a00761.html ga19e9976a1866b5b395cc0f0e020c1389 QList< ServicePointInfo > ServicePointInfoList a00761.html ga1f268bf6d2790e4364cf6fe8b8b66ba5 mapping Mapping types a00762.html Tp::AddressingNormalizationMap Tp::AliasMap Tp::AvatarTokenMap Tp::CallMemberMap Tp::CandidateInfo Tp::CaptchaAnswers Tp::ChannelCallStateMap Tp::ChannelClass Tp::ChannelOriginatorMap Tp::ChatStateMap Tp::ComponentStateMap Tp::ContactAttributesMap Tp::ContactClientTypes Tp::ContactLocations Tp::ContactMediaDescriptionPropertiesMap Tp::ContactSSRCsMap Tp::ContactSearchMap Tp::ContactSendingStateMap Tp::DBusTubeParticipants Tp::HandleIdentifierMap Tp::HandleOwnerMap Tp::Location Tp::Mail Tp::MediaDescriptionProperties Tp::MessagePart Tp::MessagePartContentMap Tp::Metadata Tp::MultipleStatusMap Tp::ObjectImmutablePropertiesMap Tp::ProtocolPropertiesMap Tp::QualifiedPropertyValueMap Tp::SingleContactAttributesMap Tp::StringStringMap Tp::StringVariantMap Tp::SupportedSocketMap Tp::VCardFieldAddressMap Tp::ContactCapabilitiesMap Tp::ContactInfoMap Tp::ContactSearchResultMap Tp::ContactSubscriptionMap Tp::NotDelegatedMap Tp::SimpleContactPresences Tp::SimpleStatusSpecMap Tp::ContactCodecMap Tp::ContactPresences Tp::RTCPFeedbackMessageMap Tp::StatusSpecMap typesconstants Types and constants a00763.html utilityconsts flagtypeconsts enumtypeconsts ifacestrconsts errorstrconsts struct list mapping Tp a00724.html Tp::Farstream Tp::Client Tp::KeyFile Tp::ManagerFile Tp::AbstractAdaptor Tp::AbstractClient Tp::AbstractClientObserver Tp::AbstractClientApprover Tp::AbstractClientHandler Tp::AbstractInterface Tp::AccountFactory Tp::AccountManager Tp::AccountPropertyFilter Tp::AccountSet Tp::Account Tp::AndFilter Tp::AvatarData Tp::AvatarSpec Tp::BaseConnectionManager Tp::BaseConnection Tp::BaseProtocol Tp::AbstractProtocolInterface Tp::BaseProtocolAddressingInterface Tp::BaseProtocolAvatarsInterface Tp::BaseProtocolPresenceInterface Tp::CallChannel Tp::CallContent Tp::PendingCallContent Tp::CallStream Tp::AbstractFunctorCaller Tp::BaseFunctorCaller Tp::BaseCallback Tp::FunctorCaller0 Tp::Callback0 Tp::FunctorCaller1 Tp::Callback1 Tp::FunctorCaller2 Tp::Callback2 Tp::FunctorCaller3 Tp::Callback3 Tp::FunctorCaller4 Tp::Callback4 Tp::FunctorCaller5 Tp::Callback5 Tp::FunctorCaller6 Tp::Callback6 Tp::FunctorCaller7 Tp::Callback7 Tp::CapabilitiesBase Tp::CaptchaAuthentication Tp::Captcha Tp::ChannelClassSpec Tp::ChannelClassSpecList Tp::ChannelDispatchOperation Tp::ChannelFactory Tp::ChannelRequest Tp::ChannelRequestHints Tp::Channel Tp::ClientRegistrar Tp::ConnectionCapabilities Tp::ConnectionFactory Tp::ConnectionLowlevel Tp::ConnectionManagerLowlevel Tp::ConnectionManager Tp::Connection Tp::ContactCapabilities Tp::ContactFactory Tp::ContactManager Tp::ContactMessenger Tp::ContactSearchChannel Tp::Contact Tp::DBusError Tp::DBusObject Tp::DBusProxyFactory Tp::DBusProxy Tp::StatelessDBusProxy Tp::StatefulDBusProxy Tp::DBusService Tp::AbstractDBusServiceInterface Tp::DBusTubeChannel Tp::DebugReceiver Tp::Feature Tp::Features Tp::FileTransferChannelCreationProperties Tp::FileTransferChannel Tp::Filter Tp::FixedFeatureFactory Tp::BaseFunctor Tp::PtrFunctor0 Tp::MemberFunctor0 Tp::PtrFunctor1 Tp::MemberFunctor1 Tp::PtrFunctor2 Tp::MemberFunctor2 Tp::PtrFunctor3 Tp::MemberFunctor3 Tp::PtrFunctor4 Tp::MemberFunctor4 Tp::PtrFunctor5 Tp::MemberFunctor5 Tp::PtrFunctor6 Tp::MemberFunctor6 Tp::PtrFunctor7 Tp::MemberFunctor7 Tp::GenericCapabilityFilter Tp::GenericPropertyFilter Tp::HandledChannelNotifier Tp::IncomingDBusTubeChannel Tp::IncomingFileTransferChannel Tp::IncomingStreamTubeChannel Tp::LocationInfo Tp::MessageContentPart Tp::MessageContentPartList Tp::Message Tp::ReceivedMessage Tp::MethodInvocationContext Tp::NotFilter Tp::Object Tp::OptionalInterfaceFactory Tp::OrFilter Tp::OutgoingDBusTubeChannel Tp::OutgoingFileTransferChannel Tp::OutgoingStreamTubeChannel Tp::PendingAccount Tp::PendingCaptchas Tp::PendingChannelRequest Tp::PendingChannel Tp::PendingConnection Tp::PendingContactAttributes Tp::PendingContactInfo Tp::PendingContacts Tp::PendingDBusTubeConnection Tp::PendingDebugMessageList Tp::PendingHandles Tp::PendingOperation Tp::PendingReady Tp::PendingSendMessage Tp::PendingStreamTubeConnection Tp::PendingStringList Tp::PendingString Tp::PendingVariantMap Tp::PendingVariant Tp::Presence Tp::PresenceSpec Tp::PresenceSpecList Tp::ProfileManager Tp::Profile Tp::ProtocolInfo Tp::ProtocolParameter Tp::ReadinessHelper Tp::ReadyObject Tp::ReferencedHandles Tp::RequestableChannelClassSpec Tp::RequestableChannelClassSpecList Tp::RoomListChannel Tp::ServerAuthenticationChannel Tp::RefCounted Tp::SharedPtr Tp::WeakPtr Tp::SimpleCallObserver Tp::SimpleObserver Tp::PendingSuccess Tp::PendingFailure Tp::PendingVoid Tp::PendingComposite Tp::SimpleStreamTubeHandler Tp::SimpleTextObserver Tp::StreamTubeChannel Tp::StreamTubeClient Tp::StreamTubeServer Tp::PendingStreamedMediaStreams Tp::StreamedMediaStream Tp::StreamedMediaChannel Tp::TextChannel Tp::TubeChannel Tp::ByteArrayList Tp::ObjectPathList Tp::UIntList Tp::AccessControl Tp::AddressingNormalizationMap Tp::AliasMap Tp::AliasPair Tp::Avatar Tp::AvatarTokenMap Tp::CallMemberMap Tp::CallStateReason Tp::Candidate Tp::CandidateInfo Tp::CapabilityChange Tp::CapabilityPair Tp::CaptchaAnswers Tp::CaptchaInfo Tp::ChannelCallStateMap Tp::ChannelClass Tp::ChannelDetails Tp::ChannelInfo Tp::ChannelOriginatorMap Tp::ChatStateMap Tp::ComponentStateMap Tp::ContactAttributesMap Tp::ContactCapability Tp::ContactClientTypes Tp::ContactInfoField Tp::ContactLocations Tp::ContactMediaDescriptionPropertiesMap Tp::ContactSSRCsMap Tp::ContactSearchMap Tp::ContactSendingStateMap Tp::ContactSubscriptions Tp::CurrencyAmount Tp::DBusTubeMember Tp::DBusTubeParticipants Tp::DebugMessage Tp::FieldSpec Tp::HTTPPostData Tp::HandleIdentifierMap Tp::HandleOwnerMap Tp::LocalPendingInfo Tp::Location Tp::Mail Tp::MailAddress Tp::MediaDescriptionOffer Tp::MediaDescriptionProperties Tp::MediaSessionHandlerInfo Tp::MediaStreamHandlerTransport Tp::MediaStreamInfo Tp::MessagePart Tp::MessagePartContentMap Tp::Metadata Tp::MultipleStatusMap Tp::NotDelegatedError Tp::ObjectImmutablePropertiesMap Tp::ParamSpec Tp::PendingTextMessage Tp::PropertyFlagsChange Tp::PropertySpec Tp::PropertyValue Tp::ProtocolPropertiesMap Tp::QualifiedPropertyValueMap Tp::RTCPFeedbackMessage Tp::RTPHeaderExtension Tp::RequestableChannelClass Tp::RichPresenceAccessControl Tp::RoomInfo Tp::ServicePoint Tp::SimplePresence Tp::SimpleStatusSpec Tp::SingleContactAttributesMap Tp::SocketAddressIP Tp::SocketAddressIPv4 Tp::SocketAddressIPv6 Tp::SocketNetmaskIPv4 Tp::SocketNetmaskIPv6 Tp::StreamCredentials Tp::StringStringMap Tp::StringVariantMap Tp::SupportedSocketMap Tp::TLSCertificateRejection Tp::TubeInfo Tp::VCardFieldAddressMap Tp::VideoResolution Tp::CandidatePair Tp::Codec Tp::ContactCapabilitiesMap Tp::ContactInfoMap Tp::ContactSearchResultMap Tp::ContactSubscriptionMap Tp::HandlerCapabilities Tp::LastActivityAndStatuses Tp::MailURL Tp::MediaStreamHandlerCandidate Tp::MediaStreamHandlerCodec Tp::NotDelegatedMap Tp::RTCPFeedbackMessageProperties Tp::ServicePointInfo Tp::SimpleContactPresences Tp::SimpleStatusSpecMap Tp::StatusSpec Tp::ContactCodecMap Tp::ContactPresences Tp::RTCPFeedbackMessageMap Tp::StatusSpecMap Tp::AccountCapabilityFilter GenericCapabilityFilter< Account > AccountCapabilityFilter a00724.html a0fbe5e17526c282b49da74095f4a1ddf Filter< Account > AccountFilter a00724.html a24e2644163d833ea163f0249f529f8c9 QList< CallContentPtr > CallContents a00724.html a3820ec949dc82f6f97a30f0e104091af QList< CallStreamPtr > CallStreams a00724.html a83f7d048920d2599e033fc044169bbe0 QPair< ChannelClassSpec, Features > ChannelClassFeatures a00724.html a031f254486002def23779768e27ffc94 void(* DebugCallback a00735.html gac649008aad1016daf386c45e214de63b )(const QString &libraryName, const QString &libraryVersion, QtMsgType type, const QString &msg) QList< ProtocolInfo > ProtocolInfoList a00724.html ac5d329e03ae72736dacd3cc249790f25 QList< ProtocolParameter > ProtocolParameterList a00724.html aa7ad590c3b1ad16749cbe5709fd49d5f QListIterator< uint > ReferencedHandlesIterator a00724.html a7ffd423c5ecc983be75a5fe3b4861c75 QList< StreamedMediaStreamPtr > StreamedMediaStreams a00724.html a718c87b6def4f11250685fba6cb6ff30 QFlags< ConnMgrParamFlag > ConnMgrParamFlags a00756.html ga1ec95e0e8a60f6e9fcff6c0e5f6d1d2d QFlags< ConnectionAliasFlag > ConnectionAliasFlags a00756.html gae209ab8dc8dfb0cdb18dde803abb1ecc QFlags< AnonymityMode > AnonymityModeFlags a00756.html ga5a62d572ef4b37d2c530e82d1a343fda QFlags< ConnectionCapabilityFlag > ConnectionCapabilityFlags a00756.html ga69e0ae4c578de4e8281c66d56725800f QFlags< ContactBlockingCapability > ContactBlockingCapabilities a00756.html ga74e90ca71966332843fb6151dced4c49 QFlags< ContactInfoFlag > ContactInfoFlags a00756.html ga058b4ea8ec38721f3f2d6c5f90969365 QFlags< ContactInfoFieldFlag > ContactInfoFieldFlags a00756.html ga382ba0240f67164dac0738216da6e64d QFlags< LocationFeature > LocationFeatures a00756.html ga8a6cdfccfaf1954767c3274fc539162f QFlags< MailNotificationFlag > MailNotificationFlags a00756.html gafd6ee67fbf03013403438de823c5d18f QFlags< CallFlag > CallFlags a00756.html ga23879924993c4e2383bad817f3bdf5e1 QFlags< CallMemberFlag > CallMemberFlags a00756.html ga6c3e650fcbac033703069c8762664118 QFlags< MediaStreamPending > MediaStreamPendingSend a00756.html ga81e5288410135f5ab84ca9d59dbca988 QFlags< ChannelMediaCapability > ChannelMediaCapabilities a00756.html gaa68e46bf2d2ce86778a7a91e507da2fd QFlags< ChannelTextMessageFlag > ChannelTextMessageFlags a00756.html ga2db541b9a0efb3c9f3831ad6e7a6924b QFlags< CaptchaFlag > CaptchaFlags a00756.html ga28d990842d23b3d1dac39c23f7252cb5 QFlags< ChannelCallState > ChannelCallStateFlags a00756.html gae23e253bc21e75878c9cbbc5a305bbf6 QFlags< ChannelGroupFlag > ChannelGroupFlags a00756.html ga2aa3d302db1664feb0dd960eab27ed52 QFlags< MessagePartSupportFlag > MessagePartSupportFlags a00756.html ga4bfff302b6b5d81554686d23babad276 QFlags< MessageSendingFlag > MessageSendingFlags a00756.html ga0cc93486e0bc233331ea4e8ba512ae0b QFlags< DeliveryReportingSupportFlag > DeliveryReportingSupportFlags a00756.html gac53c2806bb9e28f40fa80b6b0596986e QFlags< ChannelPasswordFlag > ChannelPasswordFlags a00756.html ga601f54a29430f1ea82a421a1ba5b470b QFlags< PropertyFlag > PropertyFlags a00756.html ga932aabdf9cf257497afdfe4d88f9bb72 QFlags< StorageRestrictionFlag > StorageRestrictionFlags a00756.html ga435da029c381cecf7511ae963554ff77 QFlags< RTCPXRStatisticsFlag > RTCPXRStatisticsFlags a00756.html gad27cbc06add91c8b90463be0616ff32c QList< AliasPair > AliasPairList a00761.html ga757dcd94888605b4f0d79f51bbcefa43 QList< CallMemberMap > CallMemberMapList a00761.html gaa5adf4e7ccf57ae583ba83c368f16cb5 QList< Candidate > CandidateList a00761.html gabdf7af55b514b0489d75746e76d5ab10 QList< CapabilityChange > CapabilityChangeList a00761.html ga0b2d49e1af78f1ab8d9249a5c4fe70d0 QList< CapabilityPair > CapabilityPairList a00761.html ga892cf317320ab69b02832d5dfca9273f QList< CaptchaInfo > CaptchaInfoList a00761.html gacd79793ab0ea32490833447992f64d91 QList< ChannelClass > ChannelClassList a00761.html ga635ae458e9972df8168a2467b8a9a667 QList< ChannelDetails > ChannelDetailsList a00761.html ga7014d699ff46041f3c88a396205ba4c0 QList< ChannelInfo > ChannelInfoList a00761.html ga5475de9fd22232c0550ef18ddd96e2ce QList< ContactCapability > ContactCapabilityList a00761.html ga25a7874e81a5b1884bfedfbc9de2b21c QList< ContactInfoField > ContactInfoFieldList a00761.html ga1bcdf451db0cd688c513eb251f9db826 QList< DBusTubeMember > DBusTubeMemberList a00761.html gaeb042df04a14635e599e4aac67d8cded QList< DebugMessage > DebugMessageList a00761.html gab97304df3b85109e3c7b723885d9afa1 QList< FieldSpec > FieldSpecs a00761.html ga86e2b82675f7aad4acef3399f9ac4f6b QList< HTTPPostData > HTTPPostDataList a00761.html gae6c63eb506f3a6076b6c07f351bf5eb7 QList< LocalPendingInfo > LocalPendingInfoList a00761.html gac97059fe5c133488d4dcfec37f43df7b QList< Mail > MailList a00761.html gae50b7b034851b01778a874e609029b87 QList< MailAddress > MailAddressList a00761.html ga13bf9d3d2e169d01cb6a1aa1182bc2ea QList< MediaSessionHandlerInfo > MediaSessionHandlerInfoList a00761.html ga07ca0c62ada90c615ee10bd22c70fb94 QList< MediaStreamHandlerTransport > MediaStreamHandlerTransportList a00761.html gaa367912f1202d6f2b29071f31633cd3c QList< MediaStreamInfo > MediaStreamInfoList a00761.html ga65181a48014c66c341422e7af20a58a7 QList< MessagePart > MessagePartList a00761.html gad29671d375c7a5bf1e8228f609b0d828 QList< MessagePartList > MessagePartListList a00761.html ga456fa0c4d341085f96af5222d70706b4 QList< ObjectImmutablePropertiesMap > ObjectImmutablePropertiesMapList a00761.html ga75d8bde97d8b9504f88ce0c9217b1595 QList< ParamSpec > ParamSpecList a00761.html gae1edd4964ec61f36c336217c86d21604 QList< PendingTextMessage > PendingTextMessageList a00761.html ga2b02972934a7134c50f58df1ed939bc3 QList< PropertyFlagsChange > PropertyFlagsChangeList a00761.html ga22a74fc2e884c0cadf09239b313a1687 QList< PropertySpec > PropertySpecList a00761.html ga88f81e671a1a1683537b0cc1e36c7c67 QList< PropertyValue > PropertyValueList a00761.html ga8565f094dc81def1852362f954930926 QList< QualifiedPropertyValueMap > QualifiedPropertyValueMapList a00761.html ga470b743611827a78ba5c10d9adc3a076 QList< RTCPFeedbackMessage > RTCPFeedbackMessageList a00761.html ga1c6419f296cb4c6815ec60f3642f4036 QList< RTPHeaderExtension > RTPHeaderExtensionsList a00761.html ga61c9bbcf5540dd326191a2f300c96165 QList< RequestableChannelClass > RequestableChannelClassList a00761.html gac19bde94a4bfba9311f1f37fbbdbe05c QList< RoomInfo > RoomInfoList a00761.html ga61418665719aaef9e0608f87eccca306 QList< SocketAddressIP > SocketAddressIPList a00761.html ga6ed3041ef7a8dd5a4169eb5a987c5c87 QList< StringStringMap > StringStringMapList a00761.html ga2869383d5f0b7f2efb5a7329491a2d8d QList< StringVariantMap > StringVariantMapList a00761.html ga82068e180fc9d8c9c169e4210271bfe3 QList< TLSCertificateRejection > TLSCertificateRejectionList a00761.html gae14945f191d95a4d3ff67d53f8e0e821 QList< TubeInfo > TubeInfoList a00761.html gaf81388615dd2d8fda5d74dc55f277799 QList< VideoResolution > VideoResolutionStruct a00761.html gad361c0dec97af2c12b57c8e72a01c74f QList< CandidatePair > CandidatePairList a00761.html ga4483704f64d5813fb1aa69e534f2f6aa QList< Codec > CodecList a00761.html ga109edbf33ad8b050e75e62e629dbe524 QList< ContactCapabilitiesMap > ContactCapabilitiesMapList a00761.html gaaba776766eb7d3cdc9161288bec3be04 QList< HandlerCapabilities > HandlerCapabilitiesList a00761.html ga557ebc02ad2e9e0c40549cd20928f3a0 QList< MediaStreamHandlerCandidate > MediaStreamHandlerCandidateList a00761.html ga014d46ba19f093138774d4f80e4f923f QList< MediaStreamHandlerCodec > MediaStreamHandlerCodecList a00761.html ga19e9976a1866b5b395cc0f0e020c1389 QList< ServicePointInfo > ServicePointInfoList a00761.html ga1f268bf6d2790e4364cf6fe8b8b66ba5 ConnMgrParamFlag a00756.html ga5cb2fa9d056d53a2942394c5b13dafe7 ConnMgrParamFlagRequired a00756.html gga5cb2fa9d056d53a2942394c5b13dafe7a7b7151e5c5f6c582dd4a5782a2b21ce1 ConnMgrParamFlagRegister a00756.html gga5cb2fa9d056d53a2942394c5b13dafe7a1fc8a43025d60fddc2de0d5f03c4be65 ConnMgrParamFlagHasDefault a00756.html gga5cb2fa9d056d53a2942394c5b13dafe7a5c90d0a9a3fc1d64081ad614af8ed978 ConnMgrParamFlagSecret a00756.html gga5cb2fa9d056d53a2942394c5b13dafe7a1d8f731dd2f9cbeb5e11a3e16d1a5d7b ConnMgrParamFlagDBusProperty a00756.html gga5cb2fa9d056d53a2942394c5b13dafe7ac02602299e89100fa0e1f4b855140691 _ConnMgrParamFlagPadding a00756.html gga5cb2fa9d056d53a2942394c5b13dafe7a5e922734230292cb238220301b828839 ConnectionAliasFlag a00756.html gaef4f6c211ed67dac662bf64736ed207a ConnectionAliasFlagUserSet a00756.html ggaef4f6c211ed67dac662bf64736ed207aa74605a2a62fc83950d2b3f7143a72d79 _ConnectionAliasFlagPadding a00756.html ggaef4f6c211ed67dac662bf64736ed207aaebe67dcae258f069cb01993d254648bd AnonymityMode a00756.html ga757256bafd010c153333986e415a205e AnonymityModeClientInfo a00756.html gga757256bafd010c153333986e415a205ea1d1114e10218b5232108fecad35864ce AnonymityModeShowClientInfo a00756.html gga757256bafd010c153333986e415a205ea2a5ee09100d2ddaefbe47a36739c75b7 AnonymityModeNetworkInfo a00756.html gga757256bafd010c153333986e415a205eab4ff0e3e79327d08a0693add72928046 _AnonymityModePadding a00756.html gga757256bafd010c153333986e415a205ea997db8140fc8f0e2106f16403e37de66 ConnectionCapabilityFlag a00756.html ga2bfda5e1b7b0e582dcc4beafbc686e2f ConnectionCapabilityFlagCreate a00756.html gga2bfda5e1b7b0e582dcc4beafbc686e2fabcba0674619a6c92d98af8a73a7991b6 ConnectionCapabilityFlagInvite a00756.html gga2bfda5e1b7b0e582dcc4beafbc686e2fa2dfbb9b4870dddedf50b96eaa005a625 _ConnectionCapabilityFlagPadding a00756.html gga2bfda5e1b7b0e582dcc4beafbc686e2faa90c051bc5b9c252725695aee9cfcfb8 ContactBlockingCapability a00756.html ga5ff0e407360d15b72ed8db5039e393cd ContactBlockingCapabilityCanReportAbusive a00756.html gga5ff0e407360d15b72ed8db5039e393cda33ed07dda4bde02f3c31f52e139ecc27 _ContactBlockingCapabilityPadding a00756.html gga5ff0e407360d15b72ed8db5039e393cda83cd5558884f307f1473c2c13f3e797f ContactInfoFlag a00756.html ga8fd6152ac8664f7043f597a958c33cb1 ContactInfoFlagCanSet a00756.html gga8fd6152ac8664f7043f597a958c33cb1a432131938b4cf72de980ceeab3f7f957 ContactInfoFlagPush a00756.html gga8fd6152ac8664f7043f597a958c33cb1a826fbdd18b10cc3f43a56460b71c8818 _ContactInfoFlagPadding a00756.html gga8fd6152ac8664f7043f597a958c33cb1a6bece6d34725fe3511a49b7285a66882 ContactInfoFieldFlag a00756.html ga74c105177c0b1e57474fd8e04f15d4d9 ContactInfoFieldFlagParametersExact a00756.html gga74c105177c0b1e57474fd8e04f15d4d9af61eec02c35ad02d6e7fea102a78fbee ContactInfoFieldFlagOverwrittenByNickname a00756.html gga74c105177c0b1e57474fd8e04f15d4d9a289de4147a75f0f15a94933174f00523 _ContactInfoFieldFlagPadding a00756.html gga74c105177c0b1e57474fd8e04f15d4d9aa56f65d632572391aeefaa006ea72fee LocationFeature a00756.html gaa527b9338d1b405122e98454f7e3b569 LocationFeatureCanSet a00756.html ggaa527b9338d1b405122e98454f7e3b569a33d3fc47ceee2e5541a4012d53abaa73 _LocationFeaturePadding a00756.html ggaa527b9338d1b405122e98454f7e3b569a142730992e5819ee562c743023aac8ee MailNotificationFlag a00756.html ga21317c6c96d4875d8ca7618ef7b39183 MailNotificationFlagSupportsUnreadMailCount a00756.html gga21317c6c96d4875d8ca7618ef7b39183a453639b6a753438c7b599c4f2d4b0b37 MailNotificationFlagSupportsUnreadMails a00756.html gga21317c6c96d4875d8ca7618ef7b39183aa0f7bb1c1918579815c589c8b87e5d9c MailNotificationFlagEmitsMailsReceived a00756.html gga21317c6c96d4875d8ca7618ef7b39183a47dae26c23dd0d6c0afeb0eb28879d6b MailNotificationFlagSupportsRequestInboxURL a00756.html gga21317c6c96d4875d8ca7618ef7b39183a6c525f4f23305b3939c2a1e0e1527c7a MailNotificationFlagSupportsRequestMailURL a00756.html gga21317c6c96d4875d8ca7618ef7b39183af09af0f14fbfa7ea02ef8db7c55f940d MailNotificationFlagThreadBased a00756.html gga21317c6c96d4875d8ca7618ef7b39183a11f770f71ed06eb3590090af16694e1a _MailNotificationFlagPadding a00756.html gga21317c6c96d4875d8ca7618ef7b39183ad74fdc6915917e2296a0854b17ca91fd CallFlag a00756.html gaf0ca6541c128e8636355db618bb8905c CallFlagLocallyHeld a00756.html ggaf0ca6541c128e8636355db618bb8905ca9b81f2c41e19987c015dea9f0db87cc3 CallFlagLocallyRinging a00756.html ggaf0ca6541c128e8636355db618bb8905ca77d51bde51748bc257b157d7f3a121dd CallFlagLocallyQueued a00756.html ggaf0ca6541c128e8636355db618bb8905cae83382836bc4502185536e92dce46cf4 CallFlagForwarded a00756.html ggaf0ca6541c128e8636355db618bb8905ca8b480e748569900593f38e9577978112 CallFlagClearing a00756.html ggaf0ca6541c128e8636355db618bb8905cac5d43644a005f65a9a705538b40257d4 _CallFlagPadding a00756.html ggaf0ca6541c128e8636355db618bb8905cab61c9a6b9f086aa174a69eab71931ed5 CallMemberFlag a00756.html ga750486dca75cdd08fe07242049bc863d CallMemberFlagRinging a00756.html gga750486dca75cdd08fe07242049bc863daca1fc71e62aef7e332544effc860a6d1 CallMemberFlagHeld a00756.html gga750486dca75cdd08fe07242049bc863dab53f9525e96e76aac774d6a9ca46fc16 CallMemberFlagConferenceHost a00756.html gga750486dca75cdd08fe07242049bc863da99315403fd65c373bdda55def1697153 _CallMemberFlagPadding a00756.html gga750486dca75cdd08fe07242049bc863da27246b7da2ca2ba35faa9399e5bc1d99 MediaStreamPending a00756.html gabf9a12dd89a5a502270bf18fd1cca47d MediaStreamPendingLocalSend a00756.html ggabf9a12dd89a5a502270bf18fd1cca47dab6f964a0b18c3cf5bd8fa3389fd84403 MediaStreamPendingRemoteSend a00756.html ggabf9a12dd89a5a502270bf18fd1cca47dad226bd2a7c98d02406ff1b4a56d724cf _MediaStreamPendingPadding a00756.html ggabf9a12dd89a5a502270bf18fd1cca47da5060120b4d5ab6cc272654a506f647a5 ChannelMediaCapability a00756.html gabacbce0da0a9ffbdcf61b486fb228296 ChannelMediaCapabilityAudio a00756.html ggabacbce0da0a9ffbdcf61b486fb228296ae258062ae67379e51857f8f67883f2d9 ChannelMediaCapabilityVideo a00756.html ggabacbce0da0a9ffbdcf61b486fb228296a0046934ca06adeffcba8f8e8ff8e9eb5 ChannelMediaCapabilityNATTraversalSTUN a00756.html ggabacbce0da0a9ffbdcf61b486fb228296a83d15a00008eaf4d8bb5ae09786c779f ChannelMediaCapabilityNATTraversalGTalkP2P a00756.html ggabacbce0da0a9ffbdcf61b486fb228296a83be87a1c5b327eb98df027672952bd8 ChannelMediaCapabilityNATTraversalICEUDP a00756.html ggabacbce0da0a9ffbdcf61b486fb228296a7ce46ce2b6b4a8bb8d73edf9807af9ea ChannelMediaCapabilityImmutableStreams a00756.html ggabacbce0da0a9ffbdcf61b486fb228296abaa2e098339493d9f42694453287397d _ChannelMediaCapabilityPadding a00756.html ggabacbce0da0a9ffbdcf61b486fb228296aff3cfd5112e2d2679d4801e9ccd6313f ChannelTextMessageFlag a00756.html ga0712fe4009ffbcb6b49e99fe47af4ce6 ChannelTextMessageFlagTruncated a00756.html gga0712fe4009ffbcb6b49e99fe47af4ce6af42f7c5d364574ad92204e4dcaa23965 ChannelTextMessageFlagNonTextContent a00756.html gga0712fe4009ffbcb6b49e99fe47af4ce6aeb0dbeba04a987d64e11af3aae3c8f79 ChannelTextMessageFlagScrollback a00756.html gga0712fe4009ffbcb6b49e99fe47af4ce6a73bd1335bafc306e7220cc57652414cb ChannelTextMessageFlagRescued a00756.html gga0712fe4009ffbcb6b49e99fe47af4ce6a09e726755fbfae4bba9dd5b95ccd4015 _ChannelTextMessageFlagPadding a00756.html gga0712fe4009ffbcb6b49e99fe47af4ce6a3e7936efcdcbf252dee6d01d4ce3fa6e CaptchaFlag a00756.html ga6a04590391bb361bc1c47e22571d81fa CaptchaFlagRequired a00756.html gga6a04590391bb361bc1c47e22571d81faaf8112f78c092b2e6eda2c7c9b782b612 _CaptchaFlagPadding a00756.html gga6a04590391bb361bc1c47e22571d81faa70f5bb9ba2f8ee35bca58b2d8751cdcc ChannelCallState a00756.html gac0a5e07b6cb83e50403bb971a60f45bf ChannelCallStateRinging a00756.html ggac0a5e07b6cb83e50403bb971a60f45bfa85542f90092584b3eec097e349394d0c ChannelCallStateQueued a00756.html ggac0a5e07b6cb83e50403bb971a60f45bfa0e00c1ca7a35c65138551d15280df63c ChannelCallStateHeld a00756.html ggac0a5e07b6cb83e50403bb971a60f45bfafca34a52d14e2d721a1fb23df5bfec84 ChannelCallStateForwarded a00756.html ggac0a5e07b6cb83e50403bb971a60f45bfae52645cc6beb01c00fd1d544d0907777 ChannelCallStateInProgress a00756.html ggac0a5e07b6cb83e50403bb971a60f45bfa1ecef1a51a1e00bab1b19679a7741086 ChannelCallStateConferenceHost a00756.html ggac0a5e07b6cb83e50403bb971a60f45bfa594aa75472a6d190873ad4fcb56f564e _ChannelCallStatePadding a00756.html ggac0a5e07b6cb83e50403bb971a60f45bfa6cc625f385bf307291d2192be7b9743d ChannelGroupFlag a00756.html gadeaed0d7e8e3d306d4e4398387975857 ChannelGroupFlagCanAdd a00756.html ggadeaed0d7e8e3d306d4e4398387975857a92287976a53cff7fef872f7f338a6421 ChannelGroupFlagCanRemove a00756.html ggadeaed0d7e8e3d306d4e4398387975857a234d1cfcee7a197f0fe4dfaeec2c73e2 ChannelGroupFlagCanRescind a00756.html ggadeaed0d7e8e3d306d4e4398387975857aac6aa1a60ca623539e07af0af9311551 ChannelGroupFlagMessageAdd a00756.html ggadeaed0d7e8e3d306d4e4398387975857ac38ac45c32ee6580351f538db1cce427 ChannelGroupFlagMessageRemove a00756.html ggadeaed0d7e8e3d306d4e4398387975857a79a63ed9daf2566c8d98ebf7587b1547 ChannelGroupFlagMessageAccept a00756.html ggadeaed0d7e8e3d306d4e4398387975857ae4f4fe9907dc0c03d6952c4fcc20761e ChannelGroupFlagMessageReject a00756.html ggadeaed0d7e8e3d306d4e4398387975857aa1f993c76d9eeb1d9060428c79b562d1 ChannelGroupFlagMessageRescind a00756.html ggadeaed0d7e8e3d306d4e4398387975857a4cf292e38653fa27b7a8747d3dc20ab7 ChannelGroupFlagChannelSpecificHandles a00756.html ggadeaed0d7e8e3d306d4e4398387975857a6d9439ac4c1f06dd8c04d5963f9710bd ChannelGroupFlagOnlyOneGroup a00756.html ggadeaed0d7e8e3d306d4e4398387975857a014d2efa5ce405f7657c2a25d371f5fa ChannelGroupFlagHandleOwnersNotAvailable a00756.html ggadeaed0d7e8e3d306d4e4398387975857af98f1fe1441423f1638a4e27ffe7d61f ChannelGroupFlagProperties a00756.html ggadeaed0d7e8e3d306d4e4398387975857a4f141283930e2bcc21685084fb1355ef ChannelGroupFlagMembersChangedDetailed a00756.html ggadeaed0d7e8e3d306d4e4398387975857a4b809cf8cfc8bf253d66fc1e3f0cec00 ChannelGroupFlagMessageDepart a00756.html ggadeaed0d7e8e3d306d4e4398387975857a87b9a4cf165b77967282575281461a4a _ChannelGroupFlagPadding a00756.html ggadeaed0d7e8e3d306d4e4398387975857ab9a9872dfb053cb6cc6eb46c98dcc9c8 MessagePartSupportFlag a00756.html ga1c55f4f4934456de1364e395cc22c263 MessagePartSupportFlagOneAttachment a00756.html gga1c55f4f4934456de1364e395cc22c263afa21b09e15a4fac12a46721d2c7ea00f MessagePartSupportFlagMultipleAttachments a00756.html gga1c55f4f4934456de1364e395cc22c263ad7c9a031c066fdfe21a799da018ddb2a _MessagePartSupportFlagPadding a00756.html gga1c55f4f4934456de1364e395cc22c263aeff156ec7ed5a541c527a6957f21193b MessageSendingFlag a00756.html gad55925d8d24fecd516519f3a92aafb58 MessageSendingFlagReportDelivery a00756.html ggad55925d8d24fecd516519f3a92aafb58a2e33eea159b91165f09f475b88f32434 MessageSendingFlagReportRead a00756.html ggad55925d8d24fecd516519f3a92aafb58a27520e910e54d28731f7895ca2a37ad7 MessageSendingFlagReportDeleted a00756.html ggad55925d8d24fecd516519f3a92aafb58aef03fa0d57d5807de53537433b6f2afb _MessageSendingFlagPadding a00756.html ggad55925d8d24fecd516519f3a92aafb58a5a564addc4d0a541643b23f686c9195c DeliveryReportingSupportFlag a00756.html gaaa94e5e1d4cb5701a33445e2984cb486 DeliveryReportingSupportFlagReceiveFailures a00756.html ggaaa94e5e1d4cb5701a33445e2984cb486a0d0715bc2e3cd811592257b806f076ca DeliveryReportingSupportFlagReceiveSuccesses a00756.html ggaaa94e5e1d4cb5701a33445e2984cb486aa340e76702c1564dfbde667e3c73ba71 DeliveryReportingSupportFlagReceiveRead a00756.html ggaaa94e5e1d4cb5701a33445e2984cb486aaf7a82a3ba3c1742d823ab71c633e79f DeliveryReportingSupportFlagReceiveDeleted a00756.html ggaaa94e5e1d4cb5701a33445e2984cb486abe6bcf6721e9c937bc3bd815e44eb483 _DeliveryReportingSupportFlagPadding a00756.html ggaaa94e5e1d4cb5701a33445e2984cb486a860915b62679978ddeea0bc1acdb5f7a ChannelPasswordFlag a00756.html gae5ebd6e742d951f5a5d31ac1e9e185c3 ChannelPasswordFlagProvide a00756.html ggae5ebd6e742d951f5a5d31ac1e9e185c3a90aa19041edfc0a0d6ec392f6a8029b3 ChannelPasswordFlagHint a00756.html ggae5ebd6e742d951f5a5d31ac1e9e185c3a049f04e1f55b3af8897d4ff5c3afbc3e _ChannelPasswordFlagPadding a00756.html ggae5ebd6e742d951f5a5d31ac1e9e185c3a8775a4977b8cb374d1ea8f1c3782a44f PropertyFlag a00756.html ga2268bdb3b45d0d46b05a7275f6a58bbe PropertyFlagRead a00756.html gga2268bdb3b45d0d46b05a7275f6a58bbea1b8c2f894807777844a02825fe59acb2 PropertyFlagWrite a00756.html gga2268bdb3b45d0d46b05a7275f6a58bbea853cc919d8d0ae43796362f285730314 _PropertyFlagPadding a00756.html gga2268bdb3b45d0d46b05a7275f6a58bbeafaefb2c4fc8a7b7e4848aba2413bdf9f StorageRestrictionFlag a00756.html ga8b5b12da307a1bca780ae392e899b16e StorageRestrictionFlagCannotSetParameters a00756.html gga8b5b12da307a1bca780ae392e899b16ea9a2bd9bb405afffb62a8b8eb50ee511a StorageRestrictionFlagCannotSetEnabled a00756.html gga8b5b12da307a1bca780ae392e899b16ea50bbce0cb18abedc1d31e57d67cba304 StorageRestrictionFlagCannotSetPresence a00756.html gga8b5b12da307a1bca780ae392e899b16eafe1d54999a2154d0f8fa96082f8e7fd5 StorageRestrictionFlagCannotSetService a00756.html gga8b5b12da307a1bca780ae392e899b16ea5170fcc3bb7cc2f6a7381e044bf9a972 _StorageRestrictionFlagPadding a00756.html gga8b5b12da307a1bca780ae392e899b16ea263a5409e2f093e9cc13282c6cd8b73c RTCPXRStatisticsFlag a00756.html gaa5f5055496c072aa97fd7f9e0f0c5419 RTCPXRStatisticsFlagLoss a00756.html ggaa5f5055496c072aa97fd7f9e0f0c5419aca1da490d670b5e2796b4ea1cca57f81 RTCPXRStatisticsFlagDuplicate a00756.html ggaa5f5055496c072aa97fd7f9e0f0c5419afcede23e95c8d6df44b10d9bb30d2e1a RTCPXRStatisticsFlagJitter a00756.html ggaa5f5055496c072aa97fd7f9e0f0c5419a27b33220b8af82c00d3e05aaab0d578a RTCPXRStatisticsFlagTTL a00756.html ggaa5f5055496c072aa97fd7f9e0f0c5419a3e010b11f7c39f8103d38a5f4d40a926 RTCPXRStatisticsFlagHL a00756.html ggaa5f5055496c072aa97fd7f9e0f0c5419a7569492e0f4e73d1e9e6966d5b8b5905 _RTCPXRStatisticsFlagPadding a00756.html ggaa5f5055496c072aa97fd7f9e0f0c5419a2219b3c5087e04541721c30fd316089a HandleType a00757.html ga36fa367f622d8b98416393b3fe4c89d2 HandleTypeNone a00757.html ga36fa367f622d8b98416393b3fe4c89d2af89959dcf135559145d99732346c69e6 HandleTypeContact a00757.html ga36fa367f622d8b98416393b3fe4c89d2a5c0c85266c24696c080d2a688ec8bfa3 HandleTypeRoom a00757.html ga36fa367f622d8b98416393b3fe4c89d2ac4186e266a163cb4ced697e949b02cd3 HandleTypeList a00757.html ga36fa367f622d8b98416393b3fe4c89d2aff5b4d0f0110236fea4c3dcaafa67af9 HandleTypeGroup a00757.html ga36fa367f622d8b98416393b3fe4c89d2a2b95392fef02b76d4321a242e40173be _HandleTypePadding a00757.html ga36fa367f622d8b98416393b3fe4c89d2ac34fe4f627ac03b51f67c08636d62f8b ConnectionStatus a00757.html ga601f90d95125a95ed0ff9a546fb1363f ConnectionStatusConnected a00757.html ga601f90d95125a95ed0ff9a546fb1363fa6af1d5f41051b70b5c14bd19c4174d17 ConnectionStatusConnecting a00757.html ga601f90d95125a95ed0ff9a546fb1363fac691efe1fa9ab0c66332033c7817cf71 ConnectionStatusDisconnected a00757.html ga601f90d95125a95ed0ff9a546fb1363fa92910aabeadb7e95d5ccc7f13dac571c _ConnectionStatusPadding a00757.html ga601f90d95125a95ed0ff9a546fb1363faab3d27bb3ec6b8e831694eff11657d73 ConnectionStatusReason a00757.html gafcefb23369c2cf510f27775670294c6c ConnectionStatusReasonNoneSpecified a00757.html gafcefb23369c2cf510f27775670294c6cad4eedc748700e9f70a2da3d09d551300 ConnectionStatusReasonRequested a00757.html gafcefb23369c2cf510f27775670294c6ca2d0e83ce43fc2aa9b4afcd2bfb43fe6a ConnectionStatusReasonNetworkError a00757.html gafcefb23369c2cf510f27775670294c6ca98b5990d6c4d741b2063898f3592804f ConnectionStatusReasonAuthenticationFailed a00757.html gafcefb23369c2cf510f27775670294c6cac47620cab72ea7c2581e7fff78576c6b ConnectionStatusReasonEncryptionError a00757.html gafcefb23369c2cf510f27775670294c6ca5e5a11e3c27b792e1e84550d0bf31df1 ConnectionStatusReasonNameInUse a00757.html gafcefb23369c2cf510f27775670294c6caafc5abcd599707f4a3e9b000fa067496 ConnectionStatusReasonCertNotProvided a00757.html gafcefb23369c2cf510f27775670294c6ca2e699ec66e40de505f322fc8be878dc3 ConnectionStatusReasonCertUntrusted a00757.html gafcefb23369c2cf510f27775670294c6ca1f883ac52d327e25483a04dffcbf7e51 ConnectionStatusReasonCertExpired a00757.html gafcefb23369c2cf510f27775670294c6cafa91b31af9d1614844984e9ece64a32a ConnectionStatusReasonCertNotActivated a00757.html gafcefb23369c2cf510f27775670294c6ca5a5fd148b1bea5ad268da790fad52ef6 ConnectionStatusReasonCertHostnameMismatch a00757.html gafcefb23369c2cf510f27775670294c6ca2f4d5c18d6004f1243e47c9d65469997 ConnectionStatusReasonCertFingerprintMismatch a00757.html gafcefb23369c2cf510f27775670294c6caeeb9251b845f2cabfef42d4c8142dbe7 ConnectionStatusReasonCertSelfSigned a00757.html gafcefb23369c2cf510f27775670294c6ca80a9a592ebead08b6c414783598e8221 ConnectionStatusReasonCertOtherError a00757.html gafcefb23369c2cf510f27775670294c6ca1a97d6650615a881a8c78de07f131392 ConnectionStatusReasonCertRevoked a00757.html gafcefb23369c2cf510f27775670294c6cadac2dc2c58a78c85777564cda333445d ConnectionStatusReasonCertInsecure a00757.html gafcefb23369c2cf510f27775670294c6ca4133cb4e2c25a051548aac43fe440101 ConnectionStatusReasonCertLimitExceeded a00757.html gafcefb23369c2cf510f27775670294c6caa59fbd6d253a7f8100387e6d0e20e234 _ConnectionStatusReasonPadding a00757.html gafcefb23369c2cf510f27775670294c6ca40a4510b965940d1d12deb1d5289859f ContactListState a00757.html gad1ebe7859ea635738c90418460309dc7 ContactListStateNone a00757.html gad1ebe7859ea635738c90418460309dc7af310e50dbccd4e278dfda34de8229489 ContactListStateWaiting a00757.html gad1ebe7859ea635738c90418460309dc7a9f625f030f9168435c3ae9d9c7f7c9d4 ContactListStateFailure a00757.html gad1ebe7859ea635738c90418460309dc7ac932eb0a0fd5d2f4030dae78657ce314 ContactListStateSuccess a00757.html gad1ebe7859ea635738c90418460309dc7af8a70e85564460c8d9f72dba6bdb65a0 _ContactListStatePadding a00757.html gad1ebe7859ea635738c90418460309dc7aacd1235c772e255bc07304675005eff9 SubscriptionState a00757.html ga6c99f8845100a205c12d66ec117a78de SubscriptionStateUnknown a00757.html ga6c99f8845100a205c12d66ec117a78dea57618775be1e938333647f3f832e9354 SubscriptionStateNo a00757.html ga6c99f8845100a205c12d66ec117a78dea759008dafd20b15b8ded54735926f990 SubscriptionStateRemovedRemotely a00757.html ga6c99f8845100a205c12d66ec117a78deab530cc8b1158603d43de733e6df54be1 SubscriptionStateAsk a00757.html ga6c99f8845100a205c12d66ec117a78dea3c5c2a8cbaea19e032423e8c5a5ba365 SubscriptionStateYes a00757.html ga6c99f8845100a205c12d66ec117a78dea167c5e6e0bc915d6fa5d1e48b24118bf _SubscriptionStatePadding a00757.html ga6c99f8845100a205c12d66ec117a78deaef819596d05709f7ad510da6d132f8db ContactMetadataStorageType a00757.html ga4d71f3cae6d427dd3c2d59b6f7f72bab ContactMetadataStorageTypeNone a00757.html ga4d71f3cae6d427dd3c2d59b6f7f72babac80c4375e54a9caa0b4074e95c2e60de ContactMetadataStorageTypeSubscribedOrPending a00757.html ga4d71f3cae6d427dd3c2d59b6f7f72baba64095a44b4de5ba6f9de0950a3dff789 ContactMetadataStorageTypeSubscribed a00757.html ga4d71f3cae6d427dd3c2d59b6f7f72babacd011a48c30589a2f701e7a7963abb58 ContactMetadataStorageTypeAnyone a00757.html ga4d71f3cae6d427dd3c2d59b6f7f72baba40f8a384e7a569b8fd9bd895b0fa73be _ContactMetadataStorageTypePadding a00757.html ga4d71f3cae6d427dd3c2d59b6f7f72babadc7c3bb44ba6fde83a87c969a2754882 HTTPMethod a00757.html ga555eee1bc333732490e1c4b8de9d1c88 HTTPMethodGet a00757.html ga555eee1bc333732490e1c4b8de9d1c88a82991109c053cac31f87b5cc1dfd42f0 HTTPMethodPost a00757.html ga555eee1bc333732490e1c4b8de9d1c88a923c73a532b12a1648862aefeb742351 _HTTPMethodPadding a00757.html ga555eee1bc333732490e1c4b8de9d1c88a4e5848d03cd970af98883a850ad4b5a6 ServicePointType a00757.html ga245141cc45e499cf4c660bf82c79453d ServicePointTypeNone a00757.html ga245141cc45e499cf4c660bf82c79453da53ae328cb93800ab8069e41ad01507c3 ServicePointTypeEmergency a00757.html ga245141cc45e499cf4c660bf82c79453dabf1bf92f07054247f9eb3f3ee0bf39fa ServicePointTypeCounseling a00757.html ga245141cc45e499cf4c660bf82c79453dabfb78370c8fcd533d70d9e9fe154677f _ServicePointTypePadding a00757.html ga245141cc45e499cf4c660bf82c79453da362acf4fa51a2fc98cda93ba0c378d81 ConnectionPresenceType a00757.html ga1f94046a888cc61a4c86f5426c4e9875 ConnectionPresenceTypeUnset a00757.html ga1f94046a888cc61a4c86f5426c4e9875aa1a9e769fc869eab68bdf1082ed4194d ConnectionPresenceTypeOffline a00757.html ga1f94046a888cc61a4c86f5426c4e9875a42893dcb07d9e743264653f2b1004f27 ConnectionPresenceTypeAvailable a00757.html ga1f94046a888cc61a4c86f5426c4e9875a5f13818f8fc8e0a1d2e635f0e290959d ConnectionPresenceTypeAway a00757.html ga1f94046a888cc61a4c86f5426c4e9875a0daa17373b159ace07e31e28e3e571e5 ConnectionPresenceTypeExtendedAway a00757.html ga1f94046a888cc61a4c86f5426c4e9875a22736f0f3c6517c6b50ba72b14c15dd1 ConnectionPresenceTypeHidden a00757.html ga1f94046a888cc61a4c86f5426c4e9875a93007eafa25f26e5c1fcdea1c558c2af ConnectionPresenceTypeBusy a00757.html ga1f94046a888cc61a4c86f5426c4e9875af1aaa306a6e92a81f03826000564c860 ConnectionPresenceTypeUnknown a00757.html ga1f94046a888cc61a4c86f5426c4e9875a246d03a6f3964d6d53bba07e132e8479 ConnectionPresenceTypeError a00757.html ga1f94046a888cc61a4c86f5426c4e9875aee12216cb066cb145ef76ca65e7c8d12 _ConnectionPresenceTypePadding a00757.html ga1f94046a888cc61a4c86f5426c4e9875ae09a65c8ab3476117627b294429d94cc AccessControlType a00757.html gabb9cd3c2de41e5caa1e42f04dfa036ba AccessControlTypeWhitelist a00757.html gabb9cd3c2de41e5caa1e42f04dfa036baadb4e9c21aebc1b28c9db82f9b9b83d3f AccessControlTypePublishList a00757.html gabb9cd3c2de41e5caa1e42f04dfa036baab2686c25851ee877f5a34fa44599e739 AccessControlTypeGroup a00757.html gabb9cd3c2de41e5caa1e42f04dfa036baa891e5e8face80384a496dd25fe59c457 AccessControlTypeOpen a00757.html gabb9cd3c2de41e5caa1e42f04dfa036baadab26fb2daff5d11560330c362d17a72 AccessControlTypeSubscribeOrPublishList a00757.html gabb9cd3c2de41e5caa1e42f04dfa036baa89afa1bd6de8ce162daca2cb4f072c5b AccessControlTypeClosed a00757.html gabb9cd3c2de41e5caa1e42f04dfa036baa2e98912e22741a8f52792412d18e1374 AccessControlTypeNotUnderstood a00757.html gabb9cd3c2de41e5caa1e42f04dfa036baab31c729946edb3fc6367cd955be48f5e _AccessControlTypePadding a00757.html gabb9cd3c2de41e5caa1e42f04dfa036baa113a017dc5796a924c814877e19670f9 RichPresenceAccessControlType a00757.html gada0e452157f0ace844f898df2328dd89 RichPresenceAccessControlTypeWhitelist a00757.html gada0e452157f0ace844f898df2328dd89a9030fc904f2c033d7dc65e75563321fa RichPresenceAccessControlTypePublishList a00757.html gada0e452157f0ace844f898df2328dd89a8197a38175a34ef69a79d560e607e660 RichPresenceAccessControlTypeGroup a00757.html gada0e452157f0ace844f898df2328dd89a14db81756caee469621dc35c49b1a03e RichPresenceAccessControlTypeOpen a00757.html gada0e452157f0ace844f898df2328dd89a132a7cfc6674c6404b1982cc0c5e6a52 _RichPresenceAccessControlTypePadding a00757.html gada0e452157f0ace844f898df2328dd89ad24aca58593d5a10e15564b119847cd5 CallState a00757.html ga29b57a5b4f94c451af84b5e57102c4d9 CallStateUnknown a00757.html ga29b57a5b4f94c451af84b5e57102c4d9a41367cc733adb6ea98643b24a74b5d88 CallStatePendingInitiator a00757.html ga29b57a5b4f94c451af84b5e57102c4d9aedebb08c95e37b5bbc2fcc41ee9fdfdc CallStateInitialising a00757.html ga29b57a5b4f94c451af84b5e57102c4d9a4715d2742ff582df46e1f5a501392335 CallStateInitialised a00757.html ga29b57a5b4f94c451af84b5e57102c4d9af60a9178889d8d0db1d56312bfccac9a CallStateAccepted a00757.html ga29b57a5b4f94c451af84b5e57102c4d9ac8f6abefc2087c47eb6c3b4f9f36b1b9 CallStateActive a00757.html ga29b57a5b4f94c451af84b5e57102c4d9ae00c2709e6515b32bbd57c9cad73064e CallStateEnded a00757.html ga29b57a5b4f94c451af84b5e57102c4d9ab7448536f3d5274e5b0dc995648efc60 _CallStatePadding a00757.html ga29b57a5b4f94c451af84b5e57102c4d9a3e85d0aff14c3c1588ac5902cc706d5f CallStateChangeReason a00757.html ga76f639168e50102c9de416ca38721a80 CallStateChangeReasonUnknown a00757.html ga76f639168e50102c9de416ca38721a80ae8415ad2b16289077d2c5e500dc1295d CallStateChangeReasonProgressMade a00757.html ga76f639168e50102c9de416ca38721a80ad25bca1fe2d9850b8799eac6c45a5bc7 CallStateChangeReasonUserRequested a00757.html ga76f639168e50102c9de416ca38721a80aca9ca451661e58baa6e6776904183184 CallStateChangeReasonForwarded a00757.html ga76f639168e50102c9de416ca38721a80a146edc9f2bf775dadc0fec696f12d147 CallStateChangeReasonRejected a00757.html ga76f639168e50102c9de416ca38721a80ae7b99c110154b433239540fed7984ecf CallStateChangeReasonNoAnswer a00757.html ga76f639168e50102c9de416ca38721a80a20b8a39d962991b07e890c11dabf6822 CallStateChangeReasonInvalidContact a00757.html ga76f639168e50102c9de416ca38721a80a1401a7adcca399a952fcae727f41bbd0 CallStateChangeReasonPermissionDenied a00757.html ga76f639168e50102c9de416ca38721a80ab9bbe2fd958138d3df4a82fe1034e585 CallStateChangeReasonBusy a00757.html ga76f639168e50102c9de416ca38721a80ab9f44ff3310752e0889181bf670b8155 CallStateChangeReasonInternalError a00757.html ga76f639168e50102c9de416ca38721a80a6b1c119afbaef077f2168bdcce49d7db CallStateChangeReasonServiceError a00757.html ga76f639168e50102c9de416ca38721a80a1d5846e29976ba99c07287f8f15d8ca2 CallStateChangeReasonNetworkError a00757.html ga76f639168e50102c9de416ca38721a80ac764e91ed0cf502072c1374342541d5a CallStateChangeReasonMediaError a00757.html ga76f639168e50102c9de416ca38721a80a5588aa2532eb7415e347b623ca8f5551 CallStateChangeReasonConnectivityError a00757.html ga76f639168e50102c9de416ca38721a80a1dc8412ac14fc83d517ffa42afdc217c _CallStateChangeReasonPadding a00757.html ga76f639168e50102c9de416ca38721a80aad70506b0d1c5a02e5cc596cfcacdba2 ChannelContactSearchState a00757.html gad6239ceeae9aa8a33b49fec1b77e535d ChannelContactSearchStateNotStarted a00757.html gad6239ceeae9aa8a33b49fec1b77e535da6d7b29eb8febda2c506bc566c10248f9 ChannelContactSearchStateInProgress a00757.html gad6239ceeae9aa8a33b49fec1b77e535da1b4aaa5f39b1c550afccbb8a58c4fece ChannelContactSearchStateMoreAvailable a00757.html gad6239ceeae9aa8a33b49fec1b77e535da78325173e9c273bde3b46ac3467eb173 ChannelContactSearchStateCompleted a00757.html gad6239ceeae9aa8a33b49fec1b77e535da3a306ee2b594771e71838cb90a6733fd ChannelContactSearchStateFailed a00757.html gad6239ceeae9aa8a33b49fec1b77e535da8fbac7e828625f03349227bf126e781c _ChannelContactSearchStatePadding a00757.html gad6239ceeae9aa8a33b49fec1b77e535da939a306e71fe8481235f39aa256117bd FileTransferState a00757.html ga4fae9d8b47f004df92c9eda24cf8781e FileTransferStateNone a00757.html ga4fae9d8b47f004df92c9eda24cf8781ea706f060b407122404bb21e326fbed074 FileTransferStatePending a00757.html ga4fae9d8b47f004df92c9eda24cf8781eab6b3d23b02024da063bd17441383bc7f FileTransferStateAccepted a00757.html ga4fae9d8b47f004df92c9eda24cf8781ea8ab3abc401d923aff9d5dfaaf7a1b93d FileTransferStateOpen a00757.html ga4fae9d8b47f004df92c9eda24cf8781ea8ad132aec75c843581f9485f5e811673 FileTransferStateCompleted a00757.html ga4fae9d8b47f004df92c9eda24cf8781eae50cd129faf3d6729df2ffe97c614510 FileTransferStateCancelled a00757.html ga4fae9d8b47f004df92c9eda24cf8781ea1de760588d3471e7b7c337158d1cc12a _FileTransferStatePadding a00757.html ga4fae9d8b47f004df92c9eda24cf8781ea2c9a1e6b3478b332b32bc5b65881064c FileTransferStateChangeReason a00757.html ga2a35d8ba60e214fd8f1e284ea3d38aef FileTransferStateChangeReasonNone a00757.html ga2a35d8ba60e214fd8f1e284ea3d38aefa20c12a9ed075c82c01c7e2b118387375 FileTransferStateChangeReasonRequested a00757.html ga2a35d8ba60e214fd8f1e284ea3d38aefad5ceb0681274fcb980781d2081e0bbd0 FileTransferStateChangeReasonLocalStopped a00757.html ga2a35d8ba60e214fd8f1e284ea3d38aefa994c886ca6639971a44c6f1d39cd8b45 FileTransferStateChangeReasonRemoteStopped a00757.html ga2a35d8ba60e214fd8f1e284ea3d38aefa248a063f70c5b5d233280ebc30af3b06 FileTransferStateChangeReasonLocalError a00757.html ga2a35d8ba60e214fd8f1e284ea3d38aefa03a74da7f2a9052612accf9e48c66c26 FileTransferStateChangeReasonRemoteError a00757.html ga2a35d8ba60e214fd8f1e284ea3d38aefa6ab01ac71d857162d139e24da4f2701d _FileTransferStateChangeReasonPadding a00757.html ga2a35d8ba60e214fd8f1e284ea3d38aefad37120830f305845cdf1df588abbfdf6 FileHashType a00757.html ga01668c37b6bf53402bd46218a778a077 FileHashTypeNone a00757.html ga01668c37b6bf53402bd46218a778a077a5425aefada78b0e6bb843aca067122ff FileHashTypeMD5 a00757.html ga01668c37b6bf53402bd46218a778a077af187e18369189fc8de709b62180a0913 FileHashTypeSHA1 a00757.html ga01668c37b6bf53402bd46218a778a077a758e4c3fa6c0eed34bb8a193382287aa FileHashTypeSHA256 a00757.html ga01668c37b6bf53402bd46218a778a077a13e7ee71af363e65e1ea8256d6b42b99 _FileHashTypePadding a00757.html ga01668c37b6bf53402bd46218a778a077ab3946a7403e0c0393d48675d87ea0e9f MediaStreamType a00757.html ga792af87e6990a550aea64cffd907b6af MediaStreamTypeAudio a00757.html ga792af87e6990a550aea64cffd907b6afa6cbfe7ede4404ebf3b660f4814ae3ecb MediaStreamTypeVideo a00757.html ga792af87e6990a550aea64cffd907b6afae67152402c83bc8e01263c784d8f27d4 _MediaStreamTypePadding a00757.html ga792af87e6990a550aea64cffd907b6afaef884197c1277bed4b70463c41728bfb MediaStreamState a00757.html gade0301e7ed872ed3ce2fe49fef847ef0 MediaStreamStateDisconnected a00757.html gade0301e7ed872ed3ce2fe49fef847ef0a20a0fcc2033be0126745e0f2d5782ac2 MediaStreamStateConnecting a00757.html gade0301e7ed872ed3ce2fe49fef847ef0ae4bd974acadcc6f461b214c728d76323 MediaStreamStateConnected a00757.html gade0301e7ed872ed3ce2fe49fef847ef0a113b29fea3d710696fc67e6d01994d4d _MediaStreamStatePadding a00757.html gade0301e7ed872ed3ce2fe49fef847ef0a5b998dce825824302d07b31bf1dccf47 MediaStreamDirection a00757.html gadcab310dc357419cb70579825175da64 MediaStreamDirectionNone a00757.html gadcab310dc357419cb70579825175da64af650069e060e98cf7ae0f2fde9acb91b MediaStreamDirectionSend a00757.html gadcab310dc357419cb70579825175da64a6364176a18a2c24c47f53445e5a690d7 MediaStreamDirectionReceive a00757.html gadcab310dc357419cb70579825175da64a5acbd56c8a1c214fa01230cf7aed1487 MediaStreamDirectionBidirectional a00757.html gadcab310dc357419cb70579825175da64ab781b88425ab2b8706e5ec2de542b7f4 _MediaStreamDirectionPadding a00757.html gadcab310dc357419cb70579825175da64ae554a8714498b747e9a87f24bb416379 ChannelTextSendError a00757.html ga5d62f6836d5167746124d53ba55e1dbd ChannelTextSendErrorUnknown a00757.html ga5d62f6836d5167746124d53ba55e1dbdac32481e278a5fae5e455bbbc793a9ecb ChannelTextSendErrorOffline a00757.html ga5d62f6836d5167746124d53ba55e1dbda3ad35d336edd345d0121d4063c4d181b ChannelTextSendErrorInvalidContact a00757.html ga5d62f6836d5167746124d53ba55e1dbdad7cb872eb410b4377eedcae6a6e95ce9 ChannelTextSendErrorPermissionDenied a00757.html ga5d62f6836d5167746124d53ba55e1dbdabbf708315596e486649430690af2fd25 ChannelTextSendErrorTooLong a00757.html ga5d62f6836d5167746124d53ba55e1dbda09d675f77316a66e1e330f2209bddecf ChannelTextSendErrorNotImplemented a00757.html ga5d62f6836d5167746124d53ba55e1dbda1020e6a8825cda2e058814d47ac88d78 _ChannelTextSendErrorPadding a00757.html ga5d62f6836d5167746124d53ba55e1dbda2cbc5f7244f3ae488713b4c46270ec54 ChannelTextMessageType a00757.html ga7f1e23e32fa6218eebc7021d094a8f49 ChannelTextMessageTypeNormal a00757.html ga7f1e23e32fa6218eebc7021d094a8f49a37e68749b415d08419694a1e9e7837b4 ChannelTextMessageTypeAction a00757.html ga7f1e23e32fa6218eebc7021d094a8f49a1766ba6643dd1a5cee388cd7220848f5 ChannelTextMessageTypeNotice a00757.html ga7f1e23e32fa6218eebc7021d094a8f49a92bc2974bdd9f2c238705c73947512eb ChannelTextMessageTypeAutoReply a00757.html ga7f1e23e32fa6218eebc7021d094a8f49ad857b8087d7f921736efc85e2683e8be ChannelTextMessageTypeDeliveryReport a00757.html ga7f1e23e32fa6218eebc7021d094a8f49ad333d787b06dc9e8a79561573cb6fb1c _ChannelTextMessageTypePadding a00757.html ga7f1e23e32fa6218eebc7021d094a8f49a6b94ac490da4899a2d9194a5ab65cffe TubeType a00757.html ga4c2a799af2fe17765ee45a8d8b703e2b TubeTypeDBus a00757.html ga4c2a799af2fe17765ee45a8d8b703e2babd7cb9df9ff44362dcab29b480e989f3 TubeTypeStream a00757.html ga4c2a799af2fe17765ee45a8d8b703e2ba205172a6ad834a1ac53749020471efc9 _TubeTypePadding a00757.html ga4c2a799af2fe17765ee45a8d8b703e2ba2a7c7466d4784296d28389cc22df9934 TubeState a00757.html ga53f50d894433ea4833ff1e751afa14a0 TubeStateLocalPending a00757.html ga53f50d894433ea4833ff1e751afa14a0ad1b9acd6405cd62f5ea736bd9d1c8b79 TubeStateRemotePending a00757.html ga53f50d894433ea4833ff1e751afa14a0ad891c7f1fbedaa330c3386fbdba30cb8 TubeStateOpen a00757.html ga53f50d894433ea4833ff1e751afa14a0ad6c6b4da4bb3b838bf5b77f59b060e1c _TubeStatePadding a00757.html ga53f50d894433ea4833ff1e751afa14a0a722f3a7a2f07168c8e013a308414030d CaptchaCancelReason a00757.html ga06c22a4c5a0028dbf58b64f217e87e47 CaptchaCancelReasonUserCancelled a00757.html ga06c22a4c5a0028dbf58b64f217e87e47ac833d4316d8cb6a6c89e5b7516e2572a CaptchaCancelReasonNotSupported a00757.html ga06c22a4c5a0028dbf58b64f217e87e47a2de6b3db732ff32d3960159dcea850ab CaptchaCancelReasonServiceConfused a00757.html ga06c22a4c5a0028dbf58b64f217e87e47aa7138d74344d4af0fbf47f9224420949 _CaptchaCancelReasonPadding a00757.html ga06c22a4c5a0028dbf58b64f217e87e47a1fde3bd11bff35f89fed67e3ce233d08 CaptchaStatus a00757.html gaa4dc89cbad454d2d524302c2f2504bc2 CaptchaStatusLocalPending a00757.html gaa4dc89cbad454d2d524302c2f2504bc2a4d02051d9bf2c2e9104598e9914e947f CaptchaStatusRemotePending a00757.html gaa4dc89cbad454d2d524302c2f2504bc2add7e32a7261a06996685d997bcb48306 CaptchaStatusSucceeded a00757.html gaa4dc89cbad454d2d524302c2f2504bc2ae61f5e63f2b2a5f05f9fc6469fcd1f15 CaptchaStatusTryAgain a00757.html gaa4dc89cbad454d2d524302c2f2504bc2a0df479d6ffca18bdd3122ce1c108c8a8 CaptchaStatusFailed a00757.html gaa4dc89cbad454d2d524302c2f2504bc2a14ceed4683e79bea397aa6cb572ed8c4 _CaptchaStatusPadding a00757.html gaa4dc89cbad454d2d524302c2f2504bc2a25d48ffe6ad3f6580fe03182c8188757 ChannelChatState a00757.html gafafcdfb5cc02a057311ebe1c3b339e50 ChannelChatStateGone a00757.html gafafcdfb5cc02a057311ebe1c3b339e50ae88de9b6a777523fcd095dffc66a77a2 ChannelChatStateInactive a00757.html gafafcdfb5cc02a057311ebe1c3b339e50a128b7853bb11562a90ebdc0c4e9a3b2e ChannelChatStateActive a00757.html gafafcdfb5cc02a057311ebe1c3b339e50a439643af76ef0bf428ffbcf958d4a1cb ChannelChatStatePaused a00757.html gafafcdfb5cc02a057311ebe1c3b339e50acea42513e9a70afaecfbf676dfbfa00b ChannelChatStateComposing a00757.html gafafcdfb5cc02a057311ebe1c3b339e50a29b17e44519c26f35f5d423e5a528b7c _ChannelChatStatePadding a00757.html gafafcdfb5cc02a057311ebe1c3b339e50ad39be07d5bc7d821871509c9ccfbfd16 DTMFEvent a00757.html ga012772bfae380954ec1655209ae053a4 DTMFEventDigit0 a00757.html ga012772bfae380954ec1655209ae053a4aba871cc8e5bb6f76d8e98fb3ea1b7b0f DTMFEventDigit1 a00757.html ga012772bfae380954ec1655209ae053a4aba24c37745bbc1663e371a02af724aa3 DTMFEventDigit2 a00757.html ga012772bfae380954ec1655209ae053a4a0b435ba1e5929b5f1285b4ed7bb4461c DTMFEventDigit3 a00757.html ga012772bfae380954ec1655209ae053a4ab5233d11f39ac3742e77feda41335d2d DTMFEventDigit4 a00757.html ga012772bfae380954ec1655209ae053a4a5b33b94977d7037ba782e43589f8a7c7 DTMFEventDigit5 a00757.html ga012772bfae380954ec1655209ae053a4a97ff04d31b935dff321a7fda4ff5c00f DTMFEventDigit6 a00757.html ga012772bfae380954ec1655209ae053a4abce00b38a8ef909f478e361d302a31b1 DTMFEventDigit7 a00757.html ga012772bfae380954ec1655209ae053a4ae36fb4b8bdf680dc9b5412ff12d0a959 DTMFEventDigit8 a00757.html ga012772bfae380954ec1655209ae053a4a7c38653c053fbab594870ebf4a988078 DTMFEventDigit9 a00757.html ga012772bfae380954ec1655209ae053a4a8f68ad6d8b9acd6de913b1bb7fadb9cb DTMFEventAsterisk a00757.html ga012772bfae380954ec1655209ae053a4acea062bf869937b1ad2ac5dc32625ba2 DTMFEventHash a00757.html ga012772bfae380954ec1655209ae053a4af2ea268770f0ed9b85211bed605eff7b DTMFEventLetterA a00757.html ga012772bfae380954ec1655209ae053a4abd42c36f21149b9547b5d98d50a4a5d7 DTMFEventLetterB a00757.html ga012772bfae380954ec1655209ae053a4a59813e8bc99d39cbe247100cc2f369ea DTMFEventLetterC a00757.html ga012772bfae380954ec1655209ae053a4a461aac5ce08cce03d43e02a11493aa56 DTMFEventLetterD a00757.html ga012772bfae380954ec1655209ae053a4afef5cae80946be1da53a642689946937 _DTMFEventPadding a00757.html ga012772bfae380954ec1655209ae053a4a4a5e01929a9c646ce84029d47841f154 ChannelGroupChangeReason a00757.html ga23b323e3a7d7e111827d7ecd5816611b ChannelGroupChangeReasonNone a00757.html ga23b323e3a7d7e111827d7ecd5816611bae138b982d4c9bbe853228fcbca5bb2d2 ChannelGroupChangeReasonOffline a00757.html ga23b323e3a7d7e111827d7ecd5816611ba04b849bb9ebef99d7ae5fe0be2d1c767 ChannelGroupChangeReasonKicked a00757.html ga23b323e3a7d7e111827d7ecd5816611bab5f6a81c45744defdf3d9e5a39f9b2b5 ChannelGroupChangeReasonBusy a00757.html ga23b323e3a7d7e111827d7ecd5816611bae95ea1e70846c6ed613694b02a75137d ChannelGroupChangeReasonInvited a00757.html ga23b323e3a7d7e111827d7ecd5816611ba93acb38c57c97166217c56683bfe532a ChannelGroupChangeReasonBanned a00757.html ga23b323e3a7d7e111827d7ecd5816611ba7a73c9f0c82baaf01577caa0faa3e9f4 ChannelGroupChangeReasonError a00757.html ga23b323e3a7d7e111827d7ecd5816611ba0d6c1d6b1ef4817db00b425a8a7e8568 ChannelGroupChangeReasonInvalidContact a00757.html ga23b323e3a7d7e111827d7ecd5816611bad6a3f9751907dba0b8948387ed869ad7 ChannelGroupChangeReasonNoAnswer a00757.html ga23b323e3a7d7e111827d7ecd5816611ba7a9e904a1e78b248a12ec90e532a325f ChannelGroupChangeReasonRenamed a00757.html ga23b323e3a7d7e111827d7ecd5816611bab548182cdb61cf8f401be9056dab542f ChannelGroupChangeReasonPermissionDenied a00757.html ga23b323e3a7d7e111827d7ecd5816611ba7965c7a788e1b15c44f0502d1b28a245 ChannelGroupChangeReasonSeparated a00757.html ga23b323e3a7d7e111827d7ecd5816611ba6e360d0a9cdc2652204e2cbe0293452f _ChannelGroupChangeReasonPadding a00757.html ga23b323e3a7d7e111827d7ecd5816611ba76ad374c857e4425205d2e981651f5dd LocalHoldState a00757.html gacb8a20bad361e968d1a7170bae64a34d LocalHoldStateUnheld a00757.html gacb8a20bad361e968d1a7170bae64a34da834824a35b674e8db7942e88b8c2886e LocalHoldStateHeld a00757.html gacb8a20bad361e968d1a7170bae64a34da282c8058e0e6a9d8d5ec88db26b6a80e LocalHoldStatePendingHold a00757.html gacb8a20bad361e968d1a7170bae64a34da3be247a894e45db07a60647a2ef66991 LocalHoldStatePendingUnhold a00757.html gacb8a20bad361e968d1a7170bae64a34da94586be270ad7b459f3fd7609a01aae9 _LocalHoldStatePadding a00757.html gacb8a20bad361e968d1a7170bae64a34da59dc43715eb19356066a493296db9642 LocalHoldStateReason a00757.html ga4738883a2b74c73d53c34db4214dfe64 LocalHoldStateReasonNone a00757.html ga4738883a2b74c73d53c34db4214dfe64a18b9753a1e0264b869a0c016b86ef9b5 LocalHoldStateReasonRequested a00757.html ga4738883a2b74c73d53c34db4214dfe64ab0637c6b3d632497a8f96f1fe722c20f LocalHoldStateReasonResourceNotAvailable a00757.html ga4738883a2b74c73d53c34db4214dfe64a752618dffe4900ab096690e25f1532df _LocalHoldStateReasonPadding a00757.html ga4738883a2b74c73d53c34db4214dfe64a5b935757ae39c5d894ba9d8628fe78d6 DeliveryStatus a00757.html ga604080e478c7ae07ec133324c3c844b1 DeliveryStatusUnknown a00757.html ga604080e478c7ae07ec133324c3c844b1af2e4b056d294ec494ff11bc2651a85bc DeliveryStatusDelivered a00757.html ga604080e478c7ae07ec133324c3c844b1ac2407dda8e99aca8ad1cfee1afbe7cd8 DeliveryStatusTemporarilyFailed a00757.html ga604080e478c7ae07ec133324c3c844b1a234e2d9c6c716cf8f6846a03b842651c DeliveryStatusPermanentlyFailed a00757.html ga604080e478c7ae07ec133324c3c844b1a414de69453b2798d0953ddb4178b96ce DeliveryStatusAccepted a00757.html ga604080e478c7ae07ec133324c3c844b1a83d67dce5a05963fd154b4168cd71e5e DeliveryStatusRead a00757.html ga604080e478c7ae07ec133324c3c844b1a0783f23ad57a2a04bc96deb54a786ec7 DeliveryStatusDeleted a00757.html ga604080e478c7ae07ec133324c3c844b1a73d92cd732f875053ad60cab0eed5d10 _DeliveryStatusPadding a00757.html ga604080e478c7ae07ec133324c3c844b1a26349096eded56b4083f437fbe035ec3 SASLAbortReason a00757.html gaf4f8a401f061ad5c26257f8e4e581050 SASLAbortReasonInvalidChallenge a00757.html gaf4f8a401f061ad5c26257f8e4e581050aeae9b855eb8241e7a0cef7b82f34e29e SASLAbortReasonUserAbort a00757.html gaf4f8a401f061ad5c26257f8e4e581050a177255584f02c722ae4f0346a61fa449 _SASLAbortReasonPadding a00757.html gaf4f8a401f061ad5c26257f8e4e581050a40b83468e273779bad71801a433c0256 SASLStatus a00757.html gad32b4dc0f4e05f7f5f054f8e86e29a71 SASLStatusNotStarted a00757.html gad32b4dc0f4e05f7f5f054f8e86e29a71aa17ef57b95fe5ad37a86eebf327c5115 SASLStatusInProgress a00757.html gad32b4dc0f4e05f7f5f054f8e86e29a71a8383e86ce0c8434fdb5fbe945211ddb7 SASLStatusServerSucceeded a00757.html gad32b4dc0f4e05f7f5f054f8e86e29a71a26c1f1732db66be7434c4889d77a369b SASLStatusClientAccepted a00757.html gad32b4dc0f4e05f7f5f054f8e86e29a71a78ef3cf9ff636a4c917ea97ef16f5ab7 SASLStatusSucceeded a00757.html gad32b4dc0f4e05f7f5f054f8e86e29a71af1ca144e6962c5e60682400c48d0959c SASLStatusServerFailed a00757.html gad32b4dc0f4e05f7f5f054f8e86e29a71ab405ecc7532cb71ae9594ad8a32308ea SASLStatusClientFailed a00757.html gad32b4dc0f4e05f7f5f054f8e86e29a71a270f05634247b2af51ea04dd2cfabc91 _SASLStatusPadding a00757.html gad32b4dc0f4e05f7f5f054f8e86e29a71a9ef08b10aca094bad487ed8f7b575b32 TubeChannelState a00757.html gaed213c3ef4c3a3a732c871e2ec42285c TubeChannelStateLocalPending a00757.html gaed213c3ef4c3a3a732c871e2ec42285ca2d6619fb7b4865ee832222cbff28fbf6 TubeChannelStateRemotePending a00757.html gaed213c3ef4c3a3a732c871e2ec42285ca0baf79855da8c3c520522c47324de2a9 TubeChannelStateOpen a00757.html gaed213c3ef4c3a3a732c871e2ec42285ca11243c36e2b4521f5d120dbe811413c1 TubeChannelStateNotOffered a00757.html gaed213c3ef4c3a3a732c871e2ec42285ca3f74a3ac21241ca3374983174099dde8 _TubeChannelStatePadding a00757.html gaed213c3ef4c3a3a732c871e2ec42285ca7d745822170fc1e13fa4f111d39a96d6 SocketAddressType a00757.html ga7c4136f60d444e2c62c9b6568cf96824 SocketAddressTypeUnix a00757.html ga7c4136f60d444e2c62c9b6568cf96824af3e31ed96405c22c9c255ab087aa0202 SocketAddressTypeAbstractUnix a00757.html ga7c4136f60d444e2c62c9b6568cf96824a205dd31f0952d22fd896541321646d91 SocketAddressTypeIPv4 a00757.html ga7c4136f60d444e2c62c9b6568cf96824ac3d350676a2a8f1a0024e8a22de2a752 SocketAddressTypeIPv6 a00757.html ga7c4136f60d444e2c62c9b6568cf96824a58293e917107b6c17bc6997bdbbdbdb3 _SocketAddressTypePadding a00757.html ga7c4136f60d444e2c62c9b6568cf96824acf256d93a4904324a44de7886a7db9d0 SocketAccessControl a00757.html ga59816b3c275bf13857e694c6ecec5fc9 SocketAccessControlLocalhost a00757.html ga59816b3c275bf13857e694c6ecec5fc9adc17ee56d8be8d2a8a1e3b63498bf909 SocketAccessControlPort a00757.html ga59816b3c275bf13857e694c6ecec5fc9a2c0ee1efb68ecddb8109490f3cd0f38d SocketAccessControlNetmask a00757.html ga59816b3c275bf13857e694c6ecec5fc9a526c352c65aee815e1403f1b05d6ffd5 SocketAccessControlCredentials a00757.html ga59816b3c275bf13857e694c6ecec5fc9ae9a58f3f6f2d5b1594f79002a63ab1e3 _SocketAccessControlPadding a00757.html ga59816b3c275bf13857e694c6ecec5fc9a1dc538633f1283be3bf70040130cd57d MediaStreamError a00757.html ga7378559696fef6d79ded2b9507834145 MediaStreamErrorUnknown a00757.html ga7378559696fef6d79ded2b9507834145a0bf9d4b1584d32b1aaf7b266e674ffc3 MediaStreamErrorEOS a00757.html ga7378559696fef6d79ded2b9507834145a57fb46b28042ed7bc1cf83c91362eb0d MediaStreamErrorCodecNegotiationFailed a00757.html ga7378559696fef6d79ded2b9507834145a31c11d8f2f55c182da9c3574f4ebc92a MediaStreamErrorConnectionFailed a00757.html ga7378559696fef6d79ded2b9507834145ae19086364c9c7ceef90692cc5e3c4553 MediaStreamErrorNetworkError a00757.html ga7378559696fef6d79ded2b9507834145ac7d864eb9b8517195597bc1b4e11136b MediaStreamErrorNoCodecs a00757.html ga7378559696fef6d79ded2b9507834145a1cddeded4db95f017084436dedff81fc MediaStreamErrorInvalidCMBehavior a00757.html ga7378559696fef6d79ded2b9507834145ac17c1e925b6c43ac849221266d95abe8 MediaStreamErrorMediaError a00757.html ga7378559696fef6d79ded2b9507834145a49acb3724b348b1814a90fa1117b71e4 _MediaStreamErrorPadding a00757.html ga7378559696fef6d79ded2b9507834145a3a472fa4d8cb01f7528fd315715ddece MediaStreamBaseProto a00757.html ga58b6c53046bff44524cbbd491d92b4dd MediaStreamBaseProtoUDP a00757.html ga58b6c53046bff44524cbbd491d92b4dda1a45c84819c5f5aa636721fa8c708ca3 MediaStreamBaseProtoTCP a00757.html ga58b6c53046bff44524cbbd491d92b4ddac73367ac89da1393cead276ab54d0d69 _MediaStreamBaseProtoPadding a00757.html ga58b6c53046bff44524cbbd491d92b4dda144e797fd2edc04784a7e733b346315a MediaStreamTransportType a00757.html gabaca565c16b2802bb9ea5cbf6b6a4327 MediaStreamTransportTypeLocal a00757.html gabaca565c16b2802bb9ea5cbf6b6a4327a4e1cd3df3ca51fe5491b3174c5084dcd MediaStreamTransportTypeDerived a00757.html gabaca565c16b2802bb9ea5cbf6b6a4327a97b1a445af18a0893768798fa801d6b9 MediaStreamTransportTypeRelay a00757.html gabaca565c16b2802bb9ea5cbf6b6a4327af4a2724c7f58b312e88a62f240681ace _MediaStreamTransportTypePadding a00757.html gabaca565c16b2802bb9ea5cbf6b6a4327ad35bc6c05d123c807b61c8190d570f6d DebugLevel a00757.html gabcd296a1f2f46223df1468700a3e22dc DebugLevelError a00757.html gabcd296a1f2f46223df1468700a3e22dca8e1728f5f1c5dea6f5d6e3d7804571d2 DebugLevelCritical a00757.html gabcd296a1f2f46223df1468700a3e22dca7764c642ac4cb8ef7d765a4942e9a1fa DebugLevelWarning a00757.html gabcd296a1f2f46223df1468700a3e22dca6a0e73d20aacf43a7de1621228084032 DebugLevelMessage a00757.html gabcd296a1f2f46223df1468700a3e22dcab825ff1a2efce24bfa0acea9fbdfe5c7 DebugLevelInfo a00757.html gabcd296a1f2f46223df1468700a3e22dca97f62eb29596bee19b4e6c730977867d DebugLevelDebug a00757.html gabcd296a1f2f46223df1468700a3e22dcaf1bf23992286b9212eaeca48501f0c71 _DebugLevelPadding a00757.html gabcd296a1f2f46223df1468700a3e22dcad632475463b5493179e2fa8e65d70bba TLSCertificateState a00757.html ga4599a4b62efa6b890716cc33c204a899 TLSCertificateStatePending a00757.html ga4599a4b62efa6b890716cc33c204a899ae43c8b95d2be8e8a725ec871be1915f5 TLSCertificateStateAccepted a00757.html ga4599a4b62efa6b890716cc33c204a899a92f9dceb8c50ead8b2e414cdf67e4691 TLSCertificateStateRejected a00757.html ga4599a4b62efa6b890716cc33c204a899a55ab7c9dfdf2f2f2f8d86761def3564c _TLSCertificateStatePadding a00757.html ga4599a4b62efa6b890716cc33c204a899a1ea99d4faa537948f77aab306daaca69 TLSCertificateRejectReason a00757.html gad74334f93654c0c1adbdd03ee0196488 TLSCertificateRejectReasonUnknown a00757.html gad74334f93654c0c1adbdd03ee0196488a6b18f12c84b98e2e5fcdf543f9f18cb6 TLSCertificateRejectReasonUntrusted a00757.html gad74334f93654c0c1adbdd03ee0196488afd94cbef2b741adf31344098db448efd TLSCertificateRejectReasonExpired a00757.html gad74334f93654c0c1adbdd03ee0196488a5394a96eccdc3b21cd7dd3d3cd2a98a6 TLSCertificateRejectReasonNotActivated a00757.html gad74334f93654c0c1adbdd03ee0196488a6cdc7c812f6988bda6efc8717149b892 TLSCertificateRejectReasonFingerprintMismatch a00757.html gad74334f93654c0c1adbdd03ee0196488a96e7dd1a7b4ad5b3e85d2632ddb6adc0 TLSCertificateRejectReasonHostnameMismatch a00757.html gad74334f93654c0c1adbdd03ee0196488a2b85f82659b659086956189f2b30ce1e TLSCertificateRejectReasonSelfSigned a00757.html gad74334f93654c0c1adbdd03ee0196488a0ed2c1a19819284a4142db4d6468ef49 TLSCertificateRejectReasonRevoked a00757.html gad74334f93654c0c1adbdd03ee0196488aa65901c32dbe47596ff4af0ab7f0d071 TLSCertificateRejectReasonInsecure a00757.html gad74334f93654c0c1adbdd03ee0196488addf4f700339e938b9c8b57e242363a8b TLSCertificateRejectReasonLimitExceeded a00757.html gad74334f93654c0c1adbdd03ee0196488acf4bf671caa2ab60767794321c1a4d52 _TLSCertificateRejectReasonPadding a00757.html gad74334f93654c0c1adbdd03ee0196488a613cc55b18197783c0b95a72feb072e1 CallContentPacketizationType a00757.html gaf4760523ed21820d3c2a6e74a230defe CallContentPacketizationTypeRTP a00757.html gaf4760523ed21820d3c2a6e74a230defead0b067ea6416e64cca910812a12f1cf6 CallContentPacketizationTypeRaw a00757.html gaf4760523ed21820d3c2a6e74a230defea50512d6e710cc8d4fc30a0ebe5ab5343 CallContentPacketizationTypeMSNWebcam a00757.html gaf4760523ed21820d3c2a6e74a230defea916ffc6cf0d6dee0a06e8238ac5a6262 _CallContentPacketizationTypePadding a00757.html gaf4760523ed21820d3c2a6e74a230defeab66a3102877d1c05cbe0b597c101bb5e CallContentDisposition a00757.html ga0b9c2541a4cb18bd89fb50dc37c057ad CallContentDispositionNone a00757.html ga0b9c2541a4cb18bd89fb50dc37c057adadfc0b70af8ad2490d73f50aa1f474aee CallContentDispositionInitial a00757.html ga0b9c2541a4cb18bd89fb50dc37c057adadb7ace9352dc4088311da29a12b7be4f _CallContentDispositionPadding a00757.html ga0b9c2541a4cb18bd89fb50dc37c057adaaca3027c7f76035ce61ba1be39ecf11a RCPTXRRTTMode a00757.html ga69b6598dfe33d3f82bf225d6e387aaee RCPTXRRTTModeAll a00757.html ga69b6598dfe33d3f82bf225d6e387aaeeae6bc80f78b2f3ba88969b7289e3bb60c RCPTXRRTTModeSender a00757.html ga69b6598dfe33d3f82bf225d6e387aaeea0075f473c2a6254b3e888e0291b9c115 _RCPTXRRTTModePadding a00757.html ga69b6598dfe33d3f82bf225d6e387aaeea0f035c43a2ca7bd34048524b3991f114 StreamFlowState a00757.html ga57557f44cb750a772273d285d131242b StreamFlowStateStopped a00757.html ga57557f44cb750a772273d285d131242ba8042d34a732148f8b9bd0bb41e284c6b StreamFlowStatePendingStart a00757.html ga57557f44cb750a772273d285d131242ba0d736e7ccaec759526ee4b821d325a66 StreamFlowStatePendingStop a00757.html ga57557f44cb750a772273d285d131242ba0776426f146a2db8cf03c2572e49f31a StreamFlowStateStarted a00757.html ga57557f44cb750a772273d285d131242ba6c86f88a465502140f506bb0582f815d _StreamFlowStatePadding a00757.html ga57557f44cb750a772273d285d131242ba8249702021ca71004be5c89072c6b9c3 CallStreamCandidateType a00757.html gaf49827bf619488a43ca02670b391d981 CallStreamCandidateTypeNone a00757.html gaf49827bf619488a43ca02670b391d981afec61a63031e9bb39e28e6d6b43483d0 CallStreamCandidateTypeHost a00757.html gaf49827bf619488a43ca02670b391d981a7e6dca8593d61df8c1e939c8751e5a3a CallStreamCandidateTypeServerReflexive a00757.html gaf49827bf619488a43ca02670b391d981aff7471655affad557d59f8ab9367e54a CallStreamCandidateTypePeerReflexive a00757.html gaf49827bf619488a43ca02670b391d981acdda0ef65ecd90be69838c8bd67b4397 CallStreamCandidateTypeRelay a00757.html gaf49827bf619488a43ca02670b391d981a3bc120cfd06d0a7d18eaff40f2351ba7 CallStreamCandidateTypeMulticast a00757.html gaf49827bf619488a43ca02670b391d981a763e0f7ba4240229a26d73f0985dfd1c _CallStreamCandidateTypePadding a00757.html gaf49827bf619488a43ca02670b391d981a49d9190ff0c52058300b26602fd0c111 StreamComponent a00757.html gacba6e022f5b3292e88e2fb372c4e47b1 StreamComponentUnknown a00757.html gacba6e022f5b3292e88e2fb372c4e47b1af11a292444ac96a318352472fbf89216 StreamComponentData a00757.html gacba6e022f5b3292e88e2fb372c4e47b1a9bbe638136d2227d22e8f66918d86773 StreamComponentControl a00757.html gacba6e022f5b3292e88e2fb372c4e47b1a05e60bcb1450fe294cd7df6c8c53044f _StreamComponentPadding a00757.html gacba6e022f5b3292e88e2fb372c4e47b1a31763624549378b90218ef258e167325 StreamTransportType a00757.html gaab74feeec5bd0954e333caff3d971908 StreamTransportTypeUnknown a00757.html gaab74feeec5bd0954e333caff3d971908a19f0a61eb96ad82bdb787f69d0dc89fb StreamTransportTypeRawUDP a00757.html gaab74feeec5bd0954e333caff3d971908a673b45035add5c8eed84fc1f9bac0485 StreamTransportTypeICE a00757.html gaab74feeec5bd0954e333caff3d971908a777571595958760552d5118f97dff6ec StreamTransportTypeGTalkP2P a00757.html gaab74feeec5bd0954e333caff3d971908a35b2a77e3e69586f1bc08cc57a249599 StreamTransportTypeWLM2009 a00757.html gaab74feeec5bd0954e333caff3d971908a993dca4ce5c486bda2fb11eafffc600f StreamTransportTypeSHM a00757.html gaab74feeec5bd0954e333caff3d971908a07ad46f02a8d2351199bd0ff0e8109c3 StreamTransportTypeMulticast a00757.html gaab74feeec5bd0954e333caff3d971908a484a7f0c13e0fc6bd3b9646d3b3bc0d5 _StreamTransportTypePadding a00757.html gaab74feeec5bd0954e333caff3d971908a051cb55507eaab4b0330de993e03df1d SendingState a00757.html ga0c88294dbc48b75ba591dfab17ce8b0d SendingStateNone a00757.html ga0c88294dbc48b75ba591dfab17ce8b0da26a19edd449bb2334e5cdf6bc4b4076e SendingStatePendingSend a00757.html ga0c88294dbc48b75ba591dfab17ce8b0dad21a2ad2c8e8387672e3e60c9e3b05b6 SendingStateSending a00757.html ga0c88294dbc48b75ba591dfab17ce8b0daee8d5d7a2b72019255526874c7129fc0 SendingStatePendingStopSending a00757.html ga0c88294dbc48b75ba591dfab17ce8b0dac8fa85d237e13399527dafaeeeaadcf7 _SendingStatePadding a00757.html ga0c88294dbc48b75ba591dfab17ce8b0da30979609450bae8f0c5d74d6956f0b6d StreamEndpointState a00757.html gae7b563baf8ac09ee12a00f04e87703bd StreamEndpointStateConnecting a00757.html gae7b563baf8ac09ee12a00f04e87703bdab45f4463e556edd5e20cddd2032f5db2 StreamEndpointStateProvisionallyConnected a00757.html gae7b563baf8ac09ee12a00f04e87703bda74f5426e8522a80aabb32245a61bb8cb StreamEndpointStateFullyConnected a00757.html gae7b563baf8ac09ee12a00f04e87703bda6b3cc61f92e6ddead82cb11220319552 StreamEndpointStateExhaustedCandidates a00757.html gae7b563baf8ac09ee12a00f04e87703bdae2c9fd368bdce2ce2b4cf4ed0bbc44ae StreamEndpointStateFailed a00757.html gae7b563baf8ac09ee12a00f04e87703bda4437db7b85f19cb3a33ca7e836bb297f _StreamEndpointStatePadding a00757.html gae7b563baf8ac09ee12a00f04e87703bdaac58b7865c4ea4ffb711313e029e192d uint qHash a00724.html a2ef696a0d8e66b55fe4d33ab037b408e (const ChannelClassSpec &spec) uint qHash a00724.html a71c6a91e55bb5ddb2a4a5b8bfc5dcd9c (const QSet< ChannelClassSpec > &specSet) uint qHash a00724.html aefcfdc59e6f5eb27d988f6292b706302 (const ChannelClassSpecList &specList) void enableDebug a00735.html ga52cbf229d908f8ea516b53f074e44241 (bool enable) void enableWarnings a00735.html ga7cc429d87fa4d829de26cd835cc005d3 (bool enable) void setDebugCallback a00735.html ga04ff12f8b086a5373b4c12853388e791 (DebugCallback cb) Debug enabledDebug a00724.html aed3a7ef9278169667fba239c567bccd2 () Debug enabledWarning a00724.html a7757257be10e373dfff8ad1f25fa3318 () TfChannel * createFarsightChannel a00724.html a3a4b712efa10384da178f66b30a48e29 (const StreamedMediaChannelPtr &channel) Features operator| a00724.html a5506682a3584a6f446f639cfed5b920b (const Feature &feature1, const Feature &feature2) Features operator| a00724.html a560cae4407a2089af01d38d0a097cdf2 (const Features &features, const Feature &feature) uint qHash a00724.html ad04994de8486a68fba31c147062ee5e4 (const Features &features) PtrFunctor0< R > ptrFun a00724.html a69a4e19165b179ae1cca6526e7fd89fb (R(*fn)()) PtrFunctor1< R, Arg1 > ptrFun a00724.html a84e58858c491d79624c22c08ee0e4ab8 (R(*fn)(Arg1)) PtrFunctor2< R, Arg1, Arg2 > ptrFun a00724.html a2e9f85674d4256034019f42af1cf1ce2 (R(*fn)(Arg1, Arg2)) PtrFunctor3< R, Arg1, Arg2, Arg3 > ptrFun a00724.html a94cde4d70a9571931d6fbbe9ced5386b (R(*fn)(Arg1, Arg2, Arg3)) PtrFunctor4< R, Arg1, Arg2, Arg3, Arg4 > ptrFun a00724.html a0df65663391d5d43ddd818a33bf1e32e (R(*fn)(Arg1, Arg2, Arg3, Arg4)) PtrFunctor5< R, Arg1, Arg2, Arg3, Arg4, Arg5 > ptrFun a00724.html a6e7dbd4d4e5e943afaf42870c63b2980 (R(*fn)(Arg1, Arg2, Arg3, Arg4, Arg5)) PtrFunctor6< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 > ptrFun a00724.html acc9b4c644f85b772aea500fef11b631f (R(*fn)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6)) PtrFunctor7< R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 > ptrFun a00724.html a7af80b75518c98a9b97057cf88177f8f (R(*fn)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7)) MemberFunctor0< R, T > memFun a00724.html aa79582b7e3c94d106e8bb70a1486260d (T *obj, R(T::*fn)()) MemberFunctor1< R, T, Arg1 > memFun a00724.html a8c011ba84f9075d9f0b51c24afc81947 (T *obj, R(T::*fn)(Arg1)) MemberFunctor2< R, T, Arg1, Arg2 > memFun a00724.html a22e49170f331bf477f345e958282ccdf (T *obj, R(T::*fn)(Arg1, Arg2)) MemberFunctor3< R, T, Arg1, Arg2, Arg3 > memFun a00724.html a641112b098228363642160cd9ad3e441 (T *obj, R(T::*fn)(Arg1, Arg2, Arg3)) MemberFunctor4< R, T, Arg1, Arg2, Arg3, Arg4 > memFun a00724.html a9ec115d657e8192aa23049b1ee114087 (T *obj, R(T::*fn)(Arg1, Arg2, Arg3, Arg4)) MemberFunctor5< R, T, Arg1, Arg2, Arg3, Arg4, Arg5 > memFun a00724.html ab2538d0892333a23fe2e4ae70f7fefb8 (T *obj, R(T::*fn)(Arg1, Arg2, Arg3, Arg4, Arg5)) MemberFunctor6< R, T, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 > memFun a00724.html a39fcee57171be92a69f2ec258c34cf2b (T *obj, R(T::*fn)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6)) MemberFunctor7< R, T, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 > memFun a00724.html a582886cefa160bd080f92886159cdaa2 (T *obj, R(T::*fn)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7)) uint qHash a00724.html a71006219e1876fcd174292130e6baaaa (const ProtocolParameter &parameter) uint qHash a00724.html ade905886d626745f0affa04d1eb78972 (const SharedPtr< T > &ptr) uint qHash a00724.html ae13216cbcf4902a974bc02e84b3f73d4 (const WeakPtr< T > &ptr) void registerTypes a00724.html ab8312af992258c4c971d5dfe745f6ba9 () bool operator== a00724.html a64124d3c464eb95a94a84787c44dc96d (const SUSocketAddress &v1, const SUSocketAddress &v2) QDBusArgument & operator<< a00724.html a2abfe3553ccba8e750facda4b42e821d (QDBusArgument &arg, const SUSocketAddress &val) const QDBusArgument & operator>> a00724.html ab950f54004efdeb2190df69444b97c51 (const QDBusArgument &arg, SUSocketAddress &val) QString escapeAsIdentifier a00724.html aaebe9d5f5d20d3a8156b763d54af55ed (const QString &string) bool checkValidProtocolName a00724.html a19c21cc46d1eb6e564a89a9bca9bf9c7 (const QString &protocolName) QVariant::Type variantTypeFromDBusSignature a00724.html a183a444afccd0cd1a1364f2063adc786 (const QString &signature) QVariant parseValueWithDBusSignature a00724.html a23af7e0407659ac7c2016901d3fb2722 (const QString &value, const QString &dbusSignature) bool operator== a00724.html a104edc83625caf560ad3139d2420075c (const AccessControl &v1, const AccessControl &v2) QDBusArgument & operator<< a00724.html aaff420286fc4d2de055a43c6ccb78350 (QDBusArgument &arg, const AccessControl &val) const QDBusArgument & operator>> a00724.html a1b8246f7d3ea8beb221b4c1038cfef85 (const QDBusArgument &arg, AccessControl &val) bool operator== a00724.html af26ed706982d8e9581221868b4700d38 (const AliasPair &v1, const AliasPair &v2) QDBusArgument & operator<< a00724.html a135372159215a3d354d90c2804ecdabb (QDBusArgument &arg, const AliasPair &val) const QDBusArgument & operator>> a00724.html aa23f5a9f159ada49ef0cee28261fb049 (const QDBusArgument &arg, AliasPair &val) bool operator== a00724.html a3c1ca3c6e806368751ae0813d2058c78 (const Avatar &v1, const Avatar &v2) QDBusArgument & operator<< a00724.html abbb2aa4539e46d7449db77183849e23c (QDBusArgument &arg, const Avatar &val) const QDBusArgument & operator>> a00724.html a6a699a95affd699b9afbf6c5d14b4a79 (const QDBusArgument &arg, Avatar &val) bool operator== a00724.html adb9b453a45d3023596e2009c325baf1e (const CallStateReason &v1, const CallStateReason &v2) QDBusArgument & operator<< a00724.html a5f46e58ff1172d3e2c5c57d1b86f2ff6 (QDBusArgument &arg, const CallStateReason &val) const QDBusArgument & operator>> a00724.html ae829afe1f16283c1933e74fbac3a499a (const QDBusArgument &arg, CallStateReason &val) bool operator== a00724.html a822f763e9be46bfbee90a774572ee0d5 (const Candidate &v1, const Candidate &v2) QDBusArgument & operator<< a00724.html a8e0d2e1d65142da84bb5bd2ce980dbaa (QDBusArgument &arg, const Candidate &val) const QDBusArgument & operator>> a00724.html a5d65f85e30f8095c0f6fe8bdfca095c6 (const QDBusArgument &arg, Candidate &val) bool operator== a00724.html ae3512c5951453b73a48b4722da58e799 (const CapabilityChange &v1, const CapabilityChange &v2) QDBusArgument & operator<< a00724.html a1b2e54df77ff13b5ad937996cd4be17a (QDBusArgument &arg, const CapabilityChange &val) const QDBusArgument & operator>> a00724.html a15e0f4bb9f54c92d162a065fc96e9df9 (const QDBusArgument &arg, CapabilityChange &val) bool operator== a00724.html a95952a7e1b490056e40e6eb416f80943 (const CapabilityPair &v1, const CapabilityPair &v2) QDBusArgument & operator<< a00724.html a596e7ef52b9a28b932ea4249104a4122 (QDBusArgument &arg, const CapabilityPair &val) const QDBusArgument & operator>> a00724.html ade5688c968fc6713ab6d65735732b4ac (const QDBusArgument &arg, CapabilityPair &val) bool operator== a00724.html a5157cc7ba9d7e0f28d7f58f84c1596a5 (const CaptchaInfo &v1, const CaptchaInfo &v2) QDBusArgument & operator<< a00724.html ab74a72cd5ab73e18dc74d31790862e03 (QDBusArgument &arg, const CaptchaInfo &val) const QDBusArgument & operator>> a00724.html ab7e699fa26498e3be78d670937cc5a3e (const QDBusArgument &arg, CaptchaInfo &val) bool operator== a00724.html a3314f0d4af7068843d5f4660c5970b3a (const ChannelDetails &v1, const ChannelDetails &v2) QDBusArgument & operator<< a00724.html a3e14e04670d021fa7c1f04fae7eb15e3 (QDBusArgument &arg, const ChannelDetails &val) const QDBusArgument & operator>> a00724.html acf4aa425f0b888b75f5f4f6d811e949b (const QDBusArgument &arg, ChannelDetails &val) bool operator== a00724.html adedf212bb09e2c8a315cf3fd8768b76b (const ChannelInfo &v1, const ChannelInfo &v2) QDBusArgument & operator<< a00724.html acee93c99f49245218065637f42cb49bd (QDBusArgument &arg, const ChannelInfo &val) const QDBusArgument & operator>> a00724.html aeb0e5a8008412152f2e354ac11a9f032 (const QDBusArgument &arg, ChannelInfo &val) bool operator== a00724.html abd5c475b0540e03c52d9988ce8f57659 (const ContactCapability &v1, const ContactCapability &v2) QDBusArgument & operator<< a00724.html a558eb474d056ce9c72b772f810306162 (QDBusArgument &arg, const ContactCapability &val) const QDBusArgument & operator>> a00724.html ab2b8a651fc5fd7b354a3d6414e8b3755 (const QDBusArgument &arg, ContactCapability &val) bool operator== a00724.html af4c97b6544fca7b2c6923ab6b1e5e1d2 (const ContactInfoField &v1, const ContactInfoField &v2) QDBusArgument & operator<< a00724.html a0f6f876cca113adc26adca98b6b70762 (QDBusArgument &arg, const ContactInfoField &val) const QDBusArgument & operator>> a00724.html a8979697b303b8cf757fc7d51563d575a (const QDBusArgument &arg, ContactInfoField &val) bool operator== a00724.html afa0272ef6765ff6cb02e3a05434e67d7 (const ContactSubscriptions &v1, const ContactSubscriptions &v2) QDBusArgument & operator<< a00724.html a355554b09e7dc64fd465521ccf7a083a (QDBusArgument &arg, const ContactSubscriptions &val) const QDBusArgument & operator>> a00724.html a2b5442b4a97b09f54ce94887e6cdfd72 (const QDBusArgument &arg, ContactSubscriptions &val) bool operator== a00724.html a27a2001a560e3208936823edc77cf74d (const CurrencyAmount &v1, const CurrencyAmount &v2) QDBusArgument & operator<< a00724.html aa6b101a2150aab4d9b1e0a898619e64b (QDBusArgument &arg, const CurrencyAmount &val) const QDBusArgument & operator>> a00724.html a9fa3cbad4ed6f7a4ea837dbb0693454f (const QDBusArgument &arg, CurrencyAmount &val) bool operator== a00724.html a7248ef36b9d98ac82f82dacf2028882d (const DBusTubeMember &v1, const DBusTubeMember &v2) QDBusArgument & operator<< a00724.html afbd32e40befcda310664f8331bee75ab (QDBusArgument &arg, const DBusTubeMember &val) const QDBusArgument & operator>> a00724.html a39d6b2564f8deab3630381cfecf6af58 (const QDBusArgument &arg, DBusTubeMember &val) bool operator== a00724.html a960513ce35965508bee79512ffe7abb9 (const DebugMessage &v1, const DebugMessage &v2) QDBusArgument & operator<< a00724.html ac863f794185f911ee853322b2b37932d (QDBusArgument &arg, const DebugMessage &val) const QDBusArgument & operator>> a00724.html a04582d7602c4decfe60c44336ad9a680 (const QDBusArgument &arg, DebugMessage &val) bool operator== a00724.html a64f0d89793f6e66504cd3a4fe554783e (const FieldSpec &v1, const FieldSpec &v2) QDBusArgument & operator<< a00724.html a5c5076e0a6271f1f567914e061156fa0 (QDBusArgument &arg, const FieldSpec &val) const QDBusArgument & operator>> a00724.html ade0f81f2092f3e63c3ef64b331430075 (const QDBusArgument &arg, FieldSpec &val) bool operator== a00724.html ab3229391b780080e31134898339b7a8d (const HTTPPostData &v1, const HTTPPostData &v2) QDBusArgument & operator<< a00724.html ae9a517da15a94b8aa2ad171a9e0409e7 (QDBusArgument &arg, const HTTPPostData &val) const QDBusArgument & operator>> a00724.html a5eca5e7cc8aaef037b41fe27f8956a97 (const QDBusArgument &arg, HTTPPostData &val) bool operator== a00724.html a4b343625ffb0e457cbe3989861b958cf (const LocalPendingInfo &v1, const LocalPendingInfo &v2) QDBusArgument & operator<< a00724.html a93cba2eb2a1d38716fe4c6b7bb139c90 (QDBusArgument &arg, const LocalPendingInfo &val) const QDBusArgument & operator>> a00724.html a17258034e4313dbe4de72c840ed8ed7e (const QDBusArgument &arg, LocalPendingInfo &val) bool operator== a00724.html a763f99d5a9e7c4346b0e22cff27eb132 (const MailAddress &v1, const MailAddress &v2) QDBusArgument & operator<< a00724.html a31fc416bd89be8bb2701309ca1cd0d3d (QDBusArgument &arg, const MailAddress &val) const QDBusArgument & operator>> a00724.html adb5d415147652074a379d725f1933d3c (const QDBusArgument &arg, MailAddress &val) bool operator== a00724.html a11ebfb13777a480fecd5d2208f323cd3 (const MediaDescriptionOffer &v1, const MediaDescriptionOffer &v2) QDBusArgument & operator<< a00724.html a4afb39e9a1c99ea8606dd53e852bcf94 (QDBusArgument &arg, const MediaDescriptionOffer &val) const QDBusArgument & operator>> a00724.html a812361553fd5adc71a7165771d56cbbb (const QDBusArgument &arg, MediaDescriptionOffer &val) bool operator== a00724.html af68a04a0a67ab96ca311894a86335599 (const MediaSessionHandlerInfo &v1, const MediaSessionHandlerInfo &v2) QDBusArgument & operator<< a00724.html a2cbde85f5ff3c92542509cda4ba33b87 (QDBusArgument &arg, const MediaSessionHandlerInfo &val) const QDBusArgument & operator>> a00724.html a67b562d35faa0c9a5545240a9747f5f9 (const QDBusArgument &arg, MediaSessionHandlerInfo &val) bool operator== a00724.html abea520d5798b9739653ccefbfcc909cc (const MediaStreamHandlerTransport &v1, const MediaStreamHandlerTransport &v2) QDBusArgument & operator<< a00724.html a1b4e9142371c45d09240850323828f37 (QDBusArgument &arg, const MediaStreamHandlerTransport &val) const QDBusArgument & operator>> a00724.html ad558325ebabbdd79ae50d4b3d6f209fb (const QDBusArgument &arg, MediaStreamHandlerTransport &val) bool operator== a00724.html a454427683779289983efc060816a54ce (const MediaStreamInfo &v1, const MediaStreamInfo &v2) QDBusArgument & operator<< a00724.html ab0b03c346dc8a607c39aec9b10cd755f (QDBusArgument &arg, const MediaStreamInfo &val) const QDBusArgument & operator>> a00724.html aa2fb547c67acbf393df85823f4d6ff14 (const QDBusArgument &arg, MediaStreamInfo &val) bool operator== a00724.html a41ff0bb2a7d568325e774afed089b83a (const NotDelegatedError &v1, const NotDelegatedError &v2) QDBusArgument & operator<< a00724.html afb9df75fec452021bcee3c11fdd04252 (QDBusArgument &arg, const NotDelegatedError &val) const QDBusArgument & operator>> a00724.html abc68eb50543fe0f902b555c27df5b558 (const QDBusArgument &arg, NotDelegatedError &val) bool operator== a00724.html a03ec783474ec059ed46af28aea1b85af (const ParamSpec &v1, const ParamSpec &v2) QDBusArgument & operator<< a00724.html aefd644f06b9cdb36bf1055fd47a82ece (QDBusArgument &arg, const ParamSpec &val) const QDBusArgument & operator>> a00724.html a7e0c6148ff57629a6f4986b0847664d8 (const QDBusArgument &arg, ParamSpec &val) bool operator== a00724.html a6fcf5c14befc36b63c3503ea477c8949 (const PendingTextMessage &v1, const PendingTextMessage &v2) QDBusArgument & operator<< a00724.html a7699dadecff412d0dd7bf6229514f33c (QDBusArgument &arg, const PendingTextMessage &val) const QDBusArgument & operator>> a00724.html a63e8645801c62516950fa22d59d4e8fb (const QDBusArgument &arg, PendingTextMessage &val) bool operator== a00724.html a8c30188e835378eb903ea5a403b7d2fc (const PropertyFlagsChange &v1, const PropertyFlagsChange &v2) QDBusArgument & operator<< a00724.html a4fb997279cd4dfda6de45f3823963e14 (QDBusArgument &arg, const PropertyFlagsChange &val) const QDBusArgument & operator>> a00724.html ad0d129c8958e8728fcc2e8629c195b6e (const QDBusArgument &arg, PropertyFlagsChange &val) bool operator== a00724.html af8ef12a998b88fd96a02711eaabcaa0c (const PropertySpec &v1, const PropertySpec &v2) QDBusArgument & operator<< a00724.html af5fc4f6106a63f4562ea50158e6177b3 (QDBusArgument &arg, const PropertySpec &val) const QDBusArgument & operator>> a00724.html abc78b4e920813381a4a1228b34e42ac9 (const QDBusArgument &arg, PropertySpec &val) bool operator== a00724.html af6ff5195f30ff8585eda7e5f0840f5f2 (const PropertyValue &v1, const PropertyValue &v2) QDBusArgument & operator<< a00724.html a2fdae7df634bcfd0f4df4d0ed3080c7f (QDBusArgument &arg, const PropertyValue &val) const QDBusArgument & operator>> a00724.html a1d914b93156ff5cce81056893bd3dba0 (const QDBusArgument &arg, PropertyValue &val) bool operator== a00724.html a82efc4294b579084a1f2c73814b807a1 (const RTCPFeedbackMessage &v1, const RTCPFeedbackMessage &v2) QDBusArgument & operator<< a00724.html acdac30f846a96e72f0102020f286dbfe (QDBusArgument &arg, const RTCPFeedbackMessage &val) const QDBusArgument & operator>> a00724.html a8bcae60f3dc198dcbbbbd4857a32dcd4 (const QDBusArgument &arg, RTCPFeedbackMessage &val) bool operator== a00724.html acf3ee548b68b31509762dfe22ceaac0e (const RTPHeaderExtension &v1, const RTPHeaderExtension &v2) QDBusArgument & operator<< a00724.html a43bcd6a2a9a43edcbb7259b1542f92b0 (QDBusArgument &arg, const RTPHeaderExtension &val) const QDBusArgument & operator>> a00724.html a670b0721a0b007b78b9ec313c34c08b4 (const QDBusArgument &arg, RTPHeaderExtension &val) bool operator== a00724.html a4bfd7957d4edff3db77708af3d5667c2 (const RequestableChannelClass &v1, const RequestableChannelClass &v2) QDBusArgument & operator<< a00724.html a381779506e0c37634a8d60e8ce181c4a (QDBusArgument &arg, const RequestableChannelClass &val) const QDBusArgument & operator>> a00724.html acfceeed7c38920f8e5b0b72b3bae9323 (const QDBusArgument &arg, RequestableChannelClass &val) bool operator== a00724.html af73ca0a6b0ff9af833608eb76dfb602e (const RichPresenceAccessControl &v1, const RichPresenceAccessControl &v2) QDBusArgument & operator<< a00724.html a5a565014375bca89ae51ca888cb06558 (QDBusArgument &arg, const RichPresenceAccessControl &val) const QDBusArgument & operator>> a00724.html a4da4e4584062f1cda69d9221d2fae74b (const QDBusArgument &arg, RichPresenceAccessControl &val) bool operator== a00724.html a750fbca8f312b9f28c9d01b444950142 (const RoomInfo &v1, const RoomInfo &v2) QDBusArgument & operator<< a00724.html aac8b4dda70795a3240a3f8fc1db39e91 (QDBusArgument &arg, const RoomInfo &val) const QDBusArgument & operator>> a00724.html ad332899bddba681887cc63aec3ccbd91 (const QDBusArgument &arg, RoomInfo &val) bool operator== a00724.html a029d84bd9cc671bad9e6e1a8258b75a4 (const ServicePoint &v1, const ServicePoint &v2) QDBusArgument & operator<< a00724.html a9bb6f7752d559b6d2e27655aceb665a7 (QDBusArgument &arg, const ServicePoint &val) const QDBusArgument & operator>> a00724.html a3463b2b6468606cc968413f824252e2c (const QDBusArgument &arg, ServicePoint &val) bool operator== a00724.html acb946490860241677e131841b4e1f069 (const SimplePresence &v1, const SimplePresence &v2) QDBusArgument & operator<< a00724.html ad288176ee8b4cc97931e813efdb70d6c (QDBusArgument &arg, const SimplePresence &val) const QDBusArgument & operator>> a00724.html aba2c9a7c07ee5c84cb5d35afca261e45 (const QDBusArgument &arg, SimplePresence &val) bool operator== a00724.html a5d991ec56483a795ab71314b160dfc84 (const SimpleStatusSpec &v1, const SimpleStatusSpec &v2) QDBusArgument & operator<< a00724.html a7b8dea03d7a8aea6dc5404a03e31512c (QDBusArgument &arg, const SimpleStatusSpec &val) const QDBusArgument & operator>> a00724.html a5c6b2d1468356e9fb8e743e0382dd32a (const QDBusArgument &arg, SimpleStatusSpec &val) bool operator== a00724.html a64433ce6d6b8018046709d292f1d7174 (const SocketAddressIP &v1, const SocketAddressIP &v2) QDBusArgument & operator<< a00724.html a8e0b090f6bfc1a3c0b5764664c25fb04 (QDBusArgument &arg, const SocketAddressIP &val) const QDBusArgument & operator>> a00724.html a3a8d887b8f6833c07d0e5a244e28207c (const QDBusArgument &arg, SocketAddressIP &val) bool operator== a00724.html a7bdfc31f1bd975273df3651b2a0ce2fc (const SocketAddressIPv4 &v1, const SocketAddressIPv4 &v2) QDBusArgument & operator<< a00724.html a2eefd9f666ac723a42f476665b434c8e (QDBusArgument &arg, const SocketAddressIPv4 &val) const QDBusArgument & operator>> a00724.html abfbc7f58defd0ee7393dc81525eb1eee (const QDBusArgument &arg, SocketAddressIPv4 &val) bool operator== a00724.html a785f9cb7a856c6e7fd8db739dc68642c (const SocketAddressIPv6 &v1, const SocketAddressIPv6 &v2) QDBusArgument & operator<< a00724.html a1cef3c91dc070c0855664a64cb8de1a2 (QDBusArgument &arg, const SocketAddressIPv6 &val) const QDBusArgument & operator>> a00724.html ab0ce11be3b452a9a7c5b45fef79c230c (const QDBusArgument &arg, SocketAddressIPv6 &val) bool operator== a00724.html a9e32cd02f09eef07fef02e00e3ad290b (const SocketNetmaskIPv4 &v1, const SocketNetmaskIPv4 &v2) QDBusArgument & operator<< a00724.html a1009a077f12f829c950215486f4fbb51 (QDBusArgument &arg, const SocketNetmaskIPv4 &val) const QDBusArgument & operator>> a00724.html a5337d4419ef5edf73a166ca1c570623e (const QDBusArgument &arg, SocketNetmaskIPv4 &val) bool operator== a00724.html a6db4bea6c36d7c9abb31da9a9dd1b13f (const SocketNetmaskIPv6 &v1, const SocketNetmaskIPv6 &v2) QDBusArgument & operator<< a00724.html a088c36733d53b81a6ea13f932d63fde4 (QDBusArgument &arg, const SocketNetmaskIPv6 &val) const QDBusArgument & operator>> a00724.html a4896031595ee0d39e0d5790ebf260f20 (const QDBusArgument &arg, SocketNetmaskIPv6 &val) bool operator== a00724.html a61a9e3472f0f34ec7267770c4296735f (const StreamCredentials &v1, const StreamCredentials &v2) QDBusArgument & operator<< a00724.html a62fa9eec66664150e199ebf05a28910d (QDBusArgument &arg, const StreamCredentials &val) const QDBusArgument & operator>> a00724.html a4298eeacd77ccab4b3823cb017a5048a (const QDBusArgument &arg, StreamCredentials &val) bool operator== a00724.html a96bfdb9d92ee3e0ac0604a9ac842b571 (const TLSCertificateRejection &v1, const TLSCertificateRejection &v2) QDBusArgument & operator<< a00724.html a89a356ed95f089e4e0928b7aec9b0bc1 (QDBusArgument &arg, const TLSCertificateRejection &val) const QDBusArgument & operator>> a00724.html a3b5637f997fb3357463786d349f79d31 (const QDBusArgument &arg, TLSCertificateRejection &val) bool operator== a00724.html ae0bc0e2201d212ad64089e35acc189cc (const TubeInfo &v1, const TubeInfo &v2) QDBusArgument & operator<< a00724.html a403c39f69fa5efcfd7762a38964bb1aa (QDBusArgument &arg, const TubeInfo &val) const QDBusArgument & operator>> a00724.html a8fa9b2dbbf4cb0f4896c9684bc8a9246 (const QDBusArgument &arg, TubeInfo &val) bool operator== a00724.html aa39cf2fa8e5e92edf3563b97e2f03c7c (const VideoResolution &v1, const VideoResolution &v2) QDBusArgument & operator<< a00724.html a6af509edc37bd14f77a7344640e59e75 (QDBusArgument &arg, const VideoResolution &val) const QDBusArgument & operator>> a00724.html ab4bd5703894de1276271c975f935a2e3 (const QDBusArgument &arg, VideoResolution &val) bool operator== a00724.html a6892bf024b6fca6356b55ec539f071bb (const CandidatePair &v1, const CandidatePair &v2) QDBusArgument & operator<< a00724.html ad0918fadae7ceb12a474d8fc5ea08081 (QDBusArgument &arg, const CandidatePair &val) const QDBusArgument & operator>> a00724.html a494bb434dca07743fc074b73e1e8298d (const QDBusArgument &arg, CandidatePair &val) bool operator== a00724.html adf7ca90647d65b95bbac6ec7eb022594 (const Codec &v1, const Codec &v2) QDBusArgument & operator<< a00724.html aa44522fae9d1052c33f1c4f4881099c5 (QDBusArgument &arg, const Codec &val) const QDBusArgument & operator>> a00724.html acc568aac5b1acd52580eb401d811a048 (const QDBusArgument &arg, Codec &val) bool operator== a00724.html a62cbb88a42ebd00abbf2a914e909fac2 (const HandlerCapabilities &v1, const HandlerCapabilities &v2) QDBusArgument & operator<< a00724.html a80c3e9cdd97140919e53d3f1fe482021 (QDBusArgument &arg, const HandlerCapabilities &val) const QDBusArgument & operator>> a00724.html ad548d3e484773439dfa5a4cb065bc292 (const QDBusArgument &arg, HandlerCapabilities &val) bool operator== a00724.html a7d7e8b0cfbd58a39026984173734c15a (const LastActivityAndStatuses &v1, const LastActivityAndStatuses &v2) QDBusArgument & operator<< a00724.html a522918ad66ac11136ead0a8e5e16d79a (QDBusArgument &arg, const LastActivityAndStatuses &val) const QDBusArgument & operator>> a00724.html a23bd3e53f8d57272a0258207d16701a1 (const QDBusArgument &arg, LastActivityAndStatuses &val) bool operator== a00724.html a759ad22bc62b06ad9e9adb6e84662e73 (const MailURL &v1, const MailURL &v2) QDBusArgument & operator<< a00724.html aa5341bd14e0654e5dbe77d247c17ba57 (QDBusArgument &arg, const MailURL &val) const QDBusArgument & operator>> a00724.html a327d3caf14e51fb86016c9725ce631e8 (const QDBusArgument &arg, MailURL &val) bool operator== a00724.html a7935e02f6dfdb16fab3303591644387e (const MediaStreamHandlerCandidate &v1, const MediaStreamHandlerCandidate &v2) QDBusArgument & operator<< a00724.html ac426b969de141533836b99cb9577b207 (QDBusArgument &arg, const MediaStreamHandlerCandidate &val) const QDBusArgument & operator>> a00724.html af1acc975f7f75c6a65c076eba66840b3 (const QDBusArgument &arg, MediaStreamHandlerCandidate &val) bool operator== a00724.html a782a8127564fa3b2db7fa76592307aa4 (const MediaStreamHandlerCodec &v1, const MediaStreamHandlerCodec &v2) QDBusArgument & operator<< a00724.html a7170b03224992d88f9960f100888090a (QDBusArgument &arg, const MediaStreamHandlerCodec &val) const QDBusArgument & operator>> a00724.html a413680d9501b8723f2ef73b75f6883f7 (const QDBusArgument &arg, MediaStreamHandlerCodec &val) bool operator== a00724.html abdb9e1691eb63d89bf68c3d0d9d2bfa8 (const RTCPFeedbackMessageProperties &v1, const RTCPFeedbackMessageProperties &v2) QDBusArgument & operator<< a00724.html a663946085b4fd82cda6a61372fad7289 (QDBusArgument &arg, const RTCPFeedbackMessageProperties &val) const QDBusArgument & operator>> a00724.html af08884757180771d5f391b85bc9b12f7 (const QDBusArgument &arg, RTCPFeedbackMessageProperties &val) bool operator== a00724.html a39f66d5b64a7a25d020ca514cb56a545 (const ServicePointInfo &v1, const ServicePointInfo &v2) QDBusArgument & operator<< a00724.html ac6b804b9185c8abfc87c9330cca861f5 (QDBusArgument &arg, const ServicePointInfo &val) const QDBusArgument & operator>> a00724.html acb0df5d1605ff041b84511b3738a7f0e (const QDBusArgument &arg, ServicePointInfo &val) bool operator== a00724.html a5bc251c11db5b0fb9ffd831eff9610ca (const StatusSpec &v1, const StatusSpec &v2) QDBusArgument & operator<< a00724.html a2abb573eaf4b4864725c5c039737e407 (QDBusArgument &arg, const StatusSpec &val) const QDBusArgument & operator>> a00724.html ad1630d74c79b92a92aaa05f8270e67db (const QDBusArgument &arg, StatusSpec &val) void _registerTypes a00724.html aba27cd30a29bf61a83836e8d206668fb () bool operator!= a00724.html a5e547b15fdf04ff0e5e479b94c012753 (const AccessControl &v1, const AccessControl &v2) bool operator!= a00724.html a27f858523fe19e5db7b54c2ff908fa47 (const AliasPair &v1, const AliasPair &v2) bool operator!= a00724.html ad48745d840af02a921cd2ffe359671d0 (const Avatar &v1, const Avatar &v2) bool operator!= a00724.html a2c12dcb77c5a6c7d195dac0c1537bc26 (const CallStateReason &v1, const CallStateReason &v2) bool operator!= a00724.html a21ea5b49e0c936620189cda01ef5a494 (const Candidate &v1, const Candidate &v2) bool operator!= a00724.html a992d1d2d926012f226d47590db5115c4 (const CapabilityChange &v1, const CapabilityChange &v2) bool operator!= a00724.html af73dce1737ee89e73d337591870f04f5 (const CapabilityPair &v1, const CapabilityPair &v2) bool operator!= a00724.html a137b5f1c553873d8a4d215aa40010f92 (const CaptchaInfo &v1, const CaptchaInfo &v2) bool operator!= a00724.html acddcdf0528ec53e1cae1dc2313badc5b (const ChannelDetails &v1, const ChannelDetails &v2) bool operator!= a00724.html a9e3df31c2709b74702fef9be2dcc7d17 (const ChannelInfo &v1, const ChannelInfo &v2) bool operator!= a00724.html ac34129c9dbf1fb8beb3febdc54a33b5e (const ContactCapability &v1, const ContactCapability &v2) bool operator!= a00724.html a3c1034e4fc544a04ba20f775349cfcc4 (const ContactInfoField &v1, const ContactInfoField &v2) bool operator!= a00724.html a9217114f1d6a8f0385ff2e400a11def6 (const ContactSubscriptions &v1, const ContactSubscriptions &v2) bool operator!= a00724.html ac22df834bdae30914d27a2330e70cf76 (const CurrencyAmount &v1, const CurrencyAmount &v2) bool operator!= a00724.html ac3cec2950ad44ad5fb93e884db482b13 (const DBusTubeMember &v1, const DBusTubeMember &v2) bool operator!= a00724.html a41b3a35ead1c09ac50f95f237e08d6a3 (const DebugMessage &v1, const DebugMessage &v2) bool operator!= a00724.html a89f2797d0b0682b1564d8cc8f28fa5e0 (const FieldSpec &v1, const FieldSpec &v2) bool operator!= a00724.html a032426276fa9c0bfe63dc94adaa5f515 (const HTTPPostData &v1, const HTTPPostData &v2) bool operator!= a00724.html ac3e284a317e0a4860976a6ac2d347218 (const LocalPendingInfo &v1, const LocalPendingInfo &v2) bool operator!= a00724.html af9b45de2f21a65b9383fc2bf2d1db75f (const MailAddress &v1, const MailAddress &v2) bool operator!= a00724.html a629c0a45567b1e0f21748f9a6b3d24d3 (const MediaDescriptionOffer &v1, const MediaDescriptionOffer &v2) bool operator!= a00724.html a745275afb3289b7422d8a4ba2d8bc95a (const MediaSessionHandlerInfo &v1, const MediaSessionHandlerInfo &v2) bool operator!= a00724.html a8cebd766e135dffa4bca474f57bb8a94 (const MediaStreamHandlerTransport &v1, const MediaStreamHandlerTransport &v2) bool operator!= a00724.html aab7b2a485efa96f50323781bdf6b7c9c (const MediaStreamInfo &v1, const MediaStreamInfo &v2) bool operator!= a00724.html a103f5568676be406491238fe3dd32432 (const NotDelegatedError &v1, const NotDelegatedError &v2) bool operator!= a00724.html a7402e5f40a17a309258a3c40e3e888b4 (const ParamSpec &v1, const ParamSpec &v2) bool operator!= a00724.html ac42a83f8cba45daf574b1c9920ff7b46 (const PendingTextMessage &v1, const PendingTextMessage &v2) bool operator!= a00724.html ab2dc17a2b5998d8fa3267080b3bbcea7 (const PropertyFlagsChange &v1, const PropertyFlagsChange &v2) bool operator!= a00724.html a563fde5229a655a974a9c1f556cd394e (const PropertySpec &v1, const PropertySpec &v2) bool operator!= a00724.html ac5c6dec9e45d53ee76a401d0d4a09e22 (const PropertyValue &v1, const PropertyValue &v2) bool operator!= a00724.html a45cd05a6310f49ccf5176e6da74c3a18 (const RTCPFeedbackMessage &v1, const RTCPFeedbackMessage &v2) bool operator!= a00724.html a48ccd457d40ea5df474382447c680bbd (const RTPHeaderExtension &v1, const RTPHeaderExtension &v2) bool operator!= a00724.html ad51c3d9ca14991d4c032de94eef1428b (const RequestableChannelClass &v1, const RequestableChannelClass &v2) bool operator!= a00724.html ac8dd3066029ecb2539e9f95d52f32e2a (const RichPresenceAccessControl &v1, const RichPresenceAccessControl &v2) bool operator!= a00724.html ac464a5316f0cd71651085fb99831ec70 (const RoomInfo &v1, const RoomInfo &v2) bool operator!= a00724.html ab5559ff7f72720e0877ae80b0eb22f4f (const ServicePoint &v1, const ServicePoint &v2) bool operator!= a00724.html a6936d9db44af616328ce22ddad8ee4e8 (const SimplePresence &v1, const SimplePresence &v2) bool operator!= a00724.html a36296961c2283ee6479ac354290b5377 (const SimpleStatusSpec &v1, const SimpleStatusSpec &v2) bool operator!= a00724.html a5ee6445414d074d61692ec0f07323336 (const SocketAddressIP &v1, const SocketAddressIP &v2) bool operator!= a00724.html aa27697d559728f110159c5df8d2420d6 (const SocketAddressIPv4 &v1, const SocketAddressIPv4 &v2) bool operator!= a00724.html ae83a550cbb0a68d291776c272ca3034c (const SocketAddressIPv6 &v1, const SocketAddressIPv6 &v2) bool operator!= a00724.html ab89c26d34ef9526a670695178e44ca8c (const SocketNetmaskIPv4 &v1, const SocketNetmaskIPv4 &v2) bool operator!= a00724.html a1aed9c3a6053af52b4932e541deac995 (const SocketNetmaskIPv6 &v1, const SocketNetmaskIPv6 &v2) bool operator!= a00724.html a534fc54ec941f4b1572f1506234da999 (const StreamCredentials &v1, const StreamCredentials &v2) bool operator!= a00724.html ae5a2612bc83289d689a50d3f7c657102 (const TLSCertificateRejection &v1, const TLSCertificateRejection &v2) bool operator!= a00724.html a2e48fc6503ccb1279161def8f03566c4 (const TubeInfo &v1, const TubeInfo &v2) bool operator!= a00724.html a8df800d22f5ea17f24d8f759d76c9d79 (const VideoResolution &v1, const VideoResolution &v2) bool operator!= a00724.html a03e2cdafe039981a66df1f3e8d71b764 (const CandidatePair &v1, const CandidatePair &v2) bool operator!= a00724.html a2ae8c09572f0778bc2979e152bbb546b (const Codec &v1, const Codec &v2) bool operator!= a00724.html a83329343f59ac2b0e91bd75584df5755 (const HandlerCapabilities &v1, const HandlerCapabilities &v2) bool operator!= a00724.html ad408479b7230049679239e5709a22821 (const LastActivityAndStatuses &v1, const LastActivityAndStatuses &v2) bool operator!= a00724.html ae4eb868efc18a7c62b4002f018920641 (const MailURL &v1, const MailURL &v2) bool operator!= a00724.html a9154c2e195561404f82c1e8046b327d7 (const MediaStreamHandlerCandidate &v1, const MediaStreamHandlerCandidate &v2) bool operator!= a00724.html a99b99ed8fe2dc66b7a7bc5c715915608 (const MediaStreamHandlerCodec &v1, const MediaStreamHandlerCodec &v2) bool operator!= a00724.html a585088155eedca764a7d7ee42fa6efdc (const RTCPFeedbackMessageProperties &v1, const RTCPFeedbackMessageProperties &v2) bool operator!= a00724.html a14bd1ff740159f8df74ddfd37311d19c (const ServicePointInfo &v1, const ServicePointInfo &v2) bool operator!= a00724.html affa1836c03ce6122bbc0b2453fe4c317 (const StatusSpec &v1, const StatusSpec &v2) const int NUM_HANDLE_TYPES a00757.html ga23b2937d54313f18fddc50e51049224e const int NUM_CONNECTION_STATUSES a00757.html ga51c527949738caf38c485424584857d5 const int NUM_CONNECTION_STATUS_REASONS a00757.html ga7c63da3bd56c6f3a9314cfd7d466ae77 const int NUM_CONTACT_LIST_STATES a00757.html gafef1b806b948eef363dedfd3c8550935 const int NUM_SUBSCRIPTION_STATES a00757.html ga1066026edb2c924dd29e932bf0919a46 const int NUM_CONTACT_METADATA_STORAGE_TYPES a00757.html gae6e621542ef62c295ebad595c025604a const int NUM_HTTP_METHODS a00757.html ga727991cbea866a0000d18fd648859bc4 const int NUM_SERVICE_POINT_TYPES a00757.html ga2c408002f5c6691e190129a5c4dd55b3 const int NUM_CONNECTION_PRESENCE_TYPES a00757.html gac34c7572bf4aaecc2eb197659acd6ec4 const int NUM_ACCESS_CONTROL_TYPES a00757.html gaaddadcf3a2c5f356f79d7cf64bcb882d const int NUM_RICH_PRESENCE_ACCESS_CONTROL_TYPES a00757.html ga9bf83e6421ec8ce49937b1e95dcc77f7 const int NUM_CALL_STATES a00757.html ga849bd71910b6fde122a6828a9e8f4b49 const int NUM_CALL_STATE_CHANGE_REASONS a00757.html ga6fef28e82103edf666921355cb8f9c6b const int NUM_CHANNEL_CONTACT_SEARCH_STATES a00757.html ga5db8cc76bbcb2bc5ff6107f8c4d6453d const int NUM_FILE_TRANSFER_STATES a00757.html gafb681ac850e01abad10e3b484b0cc49b const int NUM_FILE_TRANSFER_STATE_CHANGE_REASONS a00757.html ga12e304098543152629637e49b916cd7e const int NUM_FILE_HASH_TYPES a00757.html ga91b5a335352c614e3e8d7956b7d151eb const int NUM_MEDIA_STREAM_TYPES a00757.html ga020e591698bc4bb04e35e4f98bf8c4f3 const int NUM_MEDIA_STREAM_STATES a00757.html ga53ef05a24413185540bbabac7fb29a3d const int NUM_MEDIA_STREAM_DIRECTIONS a00757.html ga92b5a97b69111f5119fd280848b1620e const int NUM_CHANNEL_TEXT_SEND_ERRORS a00757.html ga5df5b92c1722194593fc4069b1fd64f5 const int NUM_CHANNEL_TEXT_MESSAGE_TYPES a00757.html gaa3b94c8371162c898b7dc14728b02d3d const int NUM_TUBE_TYPES a00757.html ga04cae570f6300564d66ab85bb27ff393 const int NUM_TUBE_STATES a00757.html ga570400a3501480a78ada6d73d014c961 const int NUM_CAPTCHA_CANCEL_REASONS a00757.html ga76b89d0bf3094770baacd799465ee799 const int NUM_CAPTCHA_STATUSES a00757.html ga2266c7cf2ca710a664856fa617110e56 const int NUM_CHANNEL_CHAT_STATES a00757.html ga67f78e8d718687643b8a0916c8542208 const int NUM_DTMF_EVENTS a00757.html gaf57308ae5e0b480074d78a82194c05ce const int NUM_CHANNEL_GROUP_CHANGE_REASONS a00757.html ga392978c063029d424528a211471fd2a7 const int NUM_LOCAL_HOLD_STATES a00757.html gaa14f82b50ba815d15d1b132996a3779d const int NUM_LOCAL_HOLD_STATE_REASONS a00757.html ga76b407b65cc8c85810b124a5fb276345 const int NUM_DELIVERY_STATUSES a00757.html gacb7da01546b06ac67f5f3590c51c0db6 const int NUM_SASL_ABORT_REASONS a00757.html ga698fb6ee1474ba869f85b16bd2b0d366 const int NUM_SASL_STATUSES a00757.html gad05aae22ce147fc1c4ccb3713e524238 const int NUM_TUBE_CHANNEL_STATES a00757.html ga6a3a2b74a0cdd175165e9feb92a8e6d7 const int NUM_SOCKET_ADDRESS_TYPES a00757.html ga6b1c5504e1e1efd5351a37388aa4bdd5 const int NUM_SOCKET_ACCESS_CONTROLS a00757.html ga06b3062a1e6701d0e4f3b0a0c3334e80 const int NUM_MEDIA_STREAM_ERRORS a00757.html gadf99f8a1e60cfffdd5a02f7dceaf48bd const int NUM_MEDIA_STREAM_BASE_PROTOS a00757.html gac164eea6c21c2cd8a0f2b31aeb1f57a1 const int NUM_MEDIA_STREAM_TRANSPORT_TYPES a00757.html ga869d382e013d33a2f0d76390ec45dedc const int NUM_DEBUG_LEVELS a00757.html gaf443bff5b0eb066745920d8c81b3f47f const int NUM_TLS_CERTIFICATE_STATES a00757.html gaeb4f950a81daa039aeb673febe49fc5c const int NUM_TLS_CERTIFICATE_REJECT_REASONS a00757.html ga0f0ab633e7949e149a875dbf3a3f05e9 const int NUM_CALL_CONTENT_PACKETIZATION_TYPES a00757.html ga0603b7176d2161e8c6ac95e303952316 const int NUM_CALL_CONTENT_DISPOSITIONS a00757.html gacfe40cd91311309638b976aaa4e80b14 const int NUM_RCPT_XR_RTT_MODES a00757.html ga4c403e5aaa3b715de8710fd90a75d20f const int NUM_STREAM_FLOW_STATES a00757.html ga3795022133869c36d554a7874cd2c509 const int NUM_CALL_STREAM_CANDIDATE_TYPES a00757.html ga1b9cd2e8467258595f6dac7928eaf088 const int NUM_STREAM_COMPONENTS a00757.html gadb2306434f320cdd80edb9d573c76812 const int NUM_STREAM_TRANSPORT_TYPES a00757.html ga3eb19089259af918c9df32ab4648be98 const int NUM_SENDING_STATES a00757.html gafd9a5c0d96a7c1bc589a753452967a99 const int NUM_STREAM_ENDPOINT_STATES a00757.html ga453416f5d42ca929eb395db54bc923fb Tp::AbstractAdaptor a00030.html AbstractAdaptor a00030.html accab0d3dd39eea60bd17f73a6d084aa4 (const QDBusConnection &connection, QObject *adaptee, QObject *parent) ~AbstractAdaptor a00030.html a024a0530d62e6db9ba9ffb46550dae79 () QDBusConnection dbusConnection a00030.html ac8679e99e7b798d416ee1cf04d4a3de1 () const QObject * adaptee a00030.html a97d2bff3efdb7c760c052ca9960ceaa8 () const Tp::AbstractClient a00031.html Tp::RefCounted AbstractClient a00031.html a77bd0d3b24cc5d3d704a39036b4a320e () virtual ~AbstractClient a00031.html a8543a346d1b624c3d7b8fe115db8925d () bool isRegistered a00031.html af463e681ec011ab1ed5bac9038016260 () const Tp::AbstractClientObserver a00034.html Tp::AbstractClient Tp::AbstractClientObserver::ObserverInfo virtual ~AbstractClientObserver a00034.html af2a98c9910fd0c3c5777ace96389797c () ChannelClassSpecList observerFilter a00034.html a0785ea6763d1e9474451f2f4dbc121a5 () const bool shouldRecover a00034.html a872a0ff1f6048b76ff71eac4395ecc15 () const virtual void observeChannels a00034.html a8b364b89efd118eb53410e162cd49001 (const MethodInvocationContextPtr<> &context, const AccountPtr &account, const ConnectionPtr &connection, const QList< ChannelPtr > &channels, const ChannelDispatchOperationPtr &dispatchOperation, const QList< ChannelRequestPtr > &requestsSatisfied, const ObserverInfo &observerInfo)=0 AbstractClientObserver a00034.html a6d64a054dfca03d5329d90d68ff37377 (const ChannelClassSpecList &channelFilter, bool shouldRecover=false) observer_create_sec observer_usage_sec observer_register_sec Tp::AbstractClientObserver::ObserverInfo a00295.html ObserverInfo a00295.html a2650d9dddd69c40497ab1222cb8da9ff (const QVariantMap &info=QVariantMap()) ObserverInfo a00295.html adc47535a2a01d45f64cae33142da7d41 (const ObserverInfo &other) ~ObserverInfo a00295.html a3d20b63489b6a8248a240fc0e58f174b () ObserverInfo & operator= a00295.html ad14eb82b71a8c6de5faeada5e32a65b2 (const ObserverInfo &other) bool isRecovering a00295.html a8ff5b00956a5388e9ad286b306c4d7fa () const QVariantMap allInfo a00295.html a5c8b02ef312b977ab254df2f48ddda4a () const Tp::AbstractClientApprover a00032.html Tp::AbstractClient virtual ~AbstractClientApprover a00032.html a3dd0e62afefa42da582f2b263576b822 () ChannelClassSpecList approverFilter a00032.html a14a4daed739a919fa2eeb64be26d3f5e () const virtual void addDispatchOperation a00032.html aa50cc72153c6601df2ba1aad73831f87 (const MethodInvocationContextPtr<> &context, const ChannelDispatchOperationPtr &dispatchOperation)=0 AbstractClientApprover a00032.html a96ee6a9c0ef99f78f944b02c4a9e4be1 (const ChannelClassSpecList &channelFilter) approver_usage_sec approver_create_sec approver_register_sec Tp::AbstractClientHandler a00033.html Tp::AbstractClient Tp::AbstractClientHandler::Capabilities Tp::AbstractClientHandler::HandlerInfo virtual ~AbstractClientHandler a00033.html aecbb5e17a9494e9e25b95447b92664ad () ChannelClassSpecList handlerFilter a00033.html ae8164789b2f1c73c3d9eb9c768ee2d2d () const Capabilities handlerCapabilities a00033.html a66a39770b504442eace51e2d100e0882 () const virtual bool bypassApproval a00033.html abe174258a56c37021f52aacbc83bedbf () const =0 virtual void handleChannels a00033.html abc44780bc349b383e6be81582de1866c (const MethodInvocationContextPtr<> &context, const AccountPtr &account, const ConnectionPtr &connection, const QList< ChannelPtr > &channels, const QList< ChannelRequestPtr > &requestsSatisfied, const QDateTime &userActionTime, const HandlerInfo &handlerInfo)=0 bool wantsRequestNotification a00033.html ad2068126fa3fe0aae0c9247d98fb1ed7 () const virtual void addRequest a00033.html af5e487d62397b34cd5285d7492f50c57 (const ChannelRequestPtr &request) virtual void removeRequest a00033.html a4712b474e5669b309a67fd4ab1f702c5 (const ChannelRequestPtr &request, const QString &errorName, const QString &errorMessage) AbstractClientHandler a00033.html aaddc269dd6bd2ac7b3c1594189cf52b7 (const ChannelClassSpecList &channelFilter, const Capabilities &capabilities=Capabilities(), bool wantsRequestNotification=false) handler_register_sec handler_usage_sec handler_create_sec Tp::AbstractClientHandler::Capabilities a00098.html Capabilities a00098.html a7767581c7db12627b501c4e39a721467 (const QStringList &tokens=QStringList()) Capabilities a00098.html ac29183e65ccd2c79fe19e0fa61d3a4be (const Capabilities &other) ~Capabilities a00098.html ac0e04003800a4a322d96efcc55d623a0 () Capabilities & operator= a00098.html ae91f07c82f94ea378b9451914a58d563 (const Capabilities &other) bool hasGTalkP2PNATTraversalToken a00098.html aee32e23ea17ba54af4a3179fb35fa300 () const void setGTalkP2PNATTraversalToken a00098.html a74c1067e79a6a26d358ef394757e6148 () void unsetGTalkP2PNATTraversalToken a00098.html ae4dabea59bed35149656993818e3cfb4 () bool hasICEUDPNATTraversalToken a00098.html ae1b5ba70431d7173ef3a26d88bc9cf18 () const void setICEUDPNATTraversalToken a00098.html af1ae78b9e598cfee01cb7c23f3d25e57 () void unsetICEUDPNATTraversalToken a00098.html a8802511c8e0b831a0237ac35c21882f2 () bool hasWLM85NATTraversalToken a00098.html a97f143036495be415c8ed444516438e7 () const void setWLM85NATTraversalToken a00098.html a0374955d412edd3ad9482e5dd97ccbbc () void unsetWLM85NATTraversalToken a00098.html a79ecd955679b4ee35dad28a54fe15f5d () bool hasWLM2009NATTraversalToken a00098.html a45f7829d86e23d8f78b9738c498eda71 () const void setWLM2009NATTraversalToken a00098.html ac5ee21a35bb3cf45535afe13600fa25d () void unsetWLM2009NATTraversalToken a00098.html ae4fd19e35bbfbe0655fa388e30fd94b3 () bool hasAudioCodecToken a00098.html aa35250025f02bc1a70fc40f3fcd1e4ea (const QString &mimeSubType) const void setAudioCodecToken a00098.html ade6ae2301e4b046a4d9e680b31d25200 (const QString &mimeSubType) void unsetAudioCodecToken a00098.html a15e13330abb07055bb2a284b1f00be03 (const QString &mimeSubType) bool hasVideoCodecToken a00098.html a473e7c2038e0a44d0129498c1e5a96bd (const QString &mimeSubType) const void setVideoCodecToken a00098.html aad41ad40d7cce022be33fbe69dd2859b (const QString &mimeSubType) void unsetVideoCodecToken a00098.html a1a085cfb83bdf684d429c75c29e32d5e (const QString &mimeSubType) bool hasToken a00098.html a155a39e7c9d7dba7d4fef0fe8fef17b2 (const QString &token) const void setToken a00098.html acbdce560bb68d50f258638b2f3c14e23 (const QString &token) void unsetToken a00098.html ad5cfa9423061f66077b8d928ce8c958b (const QString &token) QStringList allTokens a00098.html a38833504428503fc0545a54dfd6c72d0 () const Tp::AbstractClientHandler::HandlerInfo a00249.html HandlerInfo a00249.html ad75a6c9a17cb968204103f9b9fc9df7c (const QVariantMap &info=QVariantMap()) HandlerInfo a00249.html ac2e3658f1326f16c46dbec467066854c (const HandlerInfo &other) ~HandlerInfo a00249.html a5ace26cbdcd385ea81a3d337b4d5dda1 () HandlerInfo & operator= a00249.html a88f0b703792886670bcf43fe9c115eba (const HandlerInfo &other) QVariantMap allInfo a00249.html a958edb701997eb1661afde8259ebc593 () const Tp::AbstractInterface a00037.html void propertiesChanged a00037.html a1c7549c77596f07f241e361c5124119d (const QVariantMap &changedProperties, const QStringList &invalidatedProperties) virtual ~AbstractInterface a00037.html ad82f1079204bca0dcfd1f6eeda3b0bcf () bool isValid a00037.html a6ffad807cd688510af39c9ddd808d5b5 () const QString invalidationReason a00037.html a8bf99ab34d551325914c08500acadc94 () const QString invalidationMessage a00037.html a96caf6bfea37a71d4849b4470728ceb4 () const void setMonitorProperties a00037.html a6b4af7363d43822a32fdd3fa56108424 (bool monitorProperties) bool isMonitoringProperties a00037.html a3714c9535fdd183a175c1b1e668f4ec7 () const virtual void invalidate a00037.html a79dde56ba44455f47c7c354ada07467a (Tp::DBusProxy *proxy, const QString &error, const QString &message) AbstractInterface a00037.html ae73665dbe1abf1c50a8ab98221274dbe (DBusProxy *proxy, const QLatin1String &interface) AbstractInterface a00037.html a454ff620101be4299892b3e47fead4d2 (const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent) PendingVariant * internalRequestProperty a00037.html ad97c6346a1c2bbfd893943d60da27b89 (const QString &name) const PendingOperation * internalSetProperty a00037.html a735ab438b3675c6938cd534722c47b4e (const QString &name, const QVariant &newValue) PendingVariantMap * internalRequestAllProperties a00037.html a0fe684d0ef843a3e36f2ecee24defed6 () const Tp::AccountFactory a00042.html Tp::FixedFeatureFactory virtual ~AccountFactory a00042.html a71d9fc0d170c56ff711f85b736c76ec1 () PendingReady * proxy a00042.html a7ede7dec04ba26b835933b6b3e2f2882 (const QString &busName, const QString &objectPath, const ConnectionFactoryConstPtr &connFactory, const ChannelFactoryConstPtr &chanFactory, const ContactFactoryConstPtr &contactFactory) const static AccountFactoryPtr create a00042.html af67ebd126a8dedb3d8fee93b919b596f (const QDBusConnection &bus, const Features &features=Features()) AccountFactory a00042.html afcc221dbbc44fb3253c244e7a36d454f (const QDBusConnection &bus, const Features &features) virtual AccountPtr construct a00042.html aef69b0aa907ad4f44a5de8ecc5c110c4 (const QString &busName, const QString &objectPath, const ConnectionFactoryConstPtr &connFactory, const ChannelFactoryConstPtr &chanFactory, const ContactFactoryConstPtr &contactFactory) const virtual QString finalBusNameFrom a00042.html a43cc0732393ff41ee2f5408de729ae49 (const QString &uniqueOrWellKnown) const Tp::AccountManager a00047.html Tp::StatelessDBusProxy OptionalInterfaceFactory< AccountManager > void newAccount a00047.html aef650cc35bea6a034b0dd15214e5e5ac (const Tp::AccountPtr &account) virtual ~AccountManager a00047.html ae287073f203f0a8d78f5e6c2892c39f6 () AccountFactoryConstPtr accountFactory a00047.html a16036f8db8985700f39b059c17851d95 () const ConnectionFactoryConstPtr connectionFactory a00047.html af22db6cd9f3a977a893474ae6630e7a8 () const ChannelFactoryConstPtr channelFactory a00047.html afa69a902d00d9d57133b21094ca0f6b9 () const ContactFactoryConstPtr contactFactory a00047.html aa3d85fe57f232fa8350a40bafb01362d () const QList< AccountPtr > allAccounts a00047.html aa943498f3241bd1f7923afa86fdcd6ce () const AccountSetPtr validAccounts a00047.html a9743f5527faa9a532502f3298b6898a4 () const AccountSetPtr invalidAccounts a00047.html a19a91a98b9f6ddebba0dd4779bf8ffdc () const AccountSetPtr enabledAccounts a00047.html aa3955191455d4faeb46403107680bea3 () const AccountSetPtr disabledAccounts a00047.html a8f88078a8fcd1c1365e8c4d66c56c512 () const AccountSetPtr onlineAccounts a00047.html a6d8d358a6c97293fe5c5de86b99ad36a () const AccountSetPtr offlineAccounts a00047.html ac473461f9596c6baec3e81eb47dfc5f4 () const AccountSetPtr textChatAccounts a00047.html a5f466145d6b0795b1cb954fa0654c048 () const AccountSetPtr textChatroomAccounts a00047.html a268a0059391e83577a2c58ac16df0bb8 () const AccountSetPtr audioCallAccounts a00047.html a2c514a20780f21e39c5474f6a93698af () const AccountSetPtr videoCallAccounts a00047.html a3828f2cb5b6b7294901c054b354e1f6a () const AccountSetPtr streamedMediaCallAccounts a00047.html a70a4ae08d477e9470c2ee225bc72bee0 () const AccountSetPtr streamedMediaAudioCallAccounts a00047.html ac8400bd8e1aa0856b53dbbf8d2e9f8e7 () const AccountSetPtr streamedMediaVideoCallAccounts a00047.html a4e3635adcaa2d7497b8161034c9b93ea () const AccountSetPtr streamedMediaVideoCallWithAudioAccounts a00047.html a540cc48a6bea814a6623b3703343c462 () const AccountSetPtr fileTransferAccounts a00047.html a69b7abb4c0e69568a2c4a597796d819f () const AccountSetPtr accountsByProtocol a00047.html a7ebe2dbc3f23e3be8ff282db794af7e7 (const QString &protocolName) const AccountSetPtr filterAccounts a00047.html a423907cc361e319d5d9f62779aa324f3 (const AccountFilterConstPtr &filter) const AccountSetPtr filterAccounts a00047.html a208ba628bd31eada3772f7a9157cf372 (const QVariantMap &filter) const AccountPtr accountForObjectPath a00047.html a289248571d94fb7be0f501d52dc15386 (const QString &path) const AccountPtr accountForPath a00047.html abc2dc8dd16b90d401131ef287dd95585 (const QString &path) const QList< AccountPtr > accountsForObjectPaths a00047.html a615b30735c32ae303ff12d5f22e49420 (const QStringList &paths) const QList< AccountPtr > accountsForPaths a00047.html a6fc8f4e48d8fe4ec751bdfb842538b39 (const QStringList &paths) const QStringList supportedAccountProperties a00047.html a40fa241a679442565532e1e52dbbf6cd () const PendingAccount * createAccount a00047.html aa2d5cdc6e92c2a11a1fa07dabfaca95d (const QString &connectionManager, const QString &protocol, const QString &displayName, const QVariantMap &parameters, const QVariantMap &properties=QVariantMap()) static AccountManagerPtr create a00047.html a30ff19bd33c13261dcc5d2eed7c5a87e (const QDBusConnection &bus) static AccountManagerPtr create a00047.html a40290cda2ca69a5ac654a1fdd2475d21 (const AccountFactoryConstPtr &accountFactory=AccountFactory::create(QDBusConnection::sessionBus(), Account::FeatureCore), const ConnectionFactoryConstPtr &connectionFactory=ConnectionFactory::create(QDBusConnection::sessionBus()), const ChannelFactoryConstPtr &channelFactory=ChannelFactory::create(QDBusConnection::sessionBus()), const ContactFactoryConstPtr &contactFactory=ContactFactory::create()) static AccountManagerPtr create a00047.html af50b99a52f73f47527eb6ab0d8cf4d02 (const QDBusConnection &bus, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory=ContactFactory::create()) static const Feature FeatureCore a00047.html ac1779286fbe3671cb7ae713963fa28ac AccountManager a00047.html ae48b47302eae2672b39556f1ab771740 (const QDBusConnection &bus, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory, const Feature &coreFeature) Client::AccountManagerInterface * baseInterface a00047.html ac611e39ad5432d9804171e2514008b0e () const am_create_sec am_usage_sec am_ready_sec Tp::AccountPropertyFilter a00049.html GenericPropertyFilter< Account > ~AccountPropertyFilter a00049.html a13b9a58680473d5128967b7b1de73718 () bool isValid a00049.html a331faf2fdcde69031c77323e0e172c64 () const static AccountPropertyFilterPtr create a00049.html a747dba6924e1c604f237a5ddfa1e1104 () Tp::AccountSet a00050.html Tp::Object void accountAdded a00050.html ad4c2e67665120452eb2204102cde0c18 (const Tp::AccountPtr &account) void accountRemoved a00050.html ae55a9de1c576d878d5f00ec3bc377d4f (const Tp::AccountPtr &account) AccountSet a00050.html ad3de88c91f8a39fd608ddf35a8a43433 (const AccountManagerPtr &accountManager, const AccountFilterConstPtr &filter) AccountSet a00050.html a39228d4f1b66bc857edc3fe7181cd064 (const AccountManagerPtr &accountManager, const QVariantMap &filter) virtual ~AccountSet a00050.html a7fedb11fbb563c34de1bd88afc6fcefe () AccountManagerPtr accountManager a00050.html aa5742d9fd244cc809201ec64830e534e () const AccountFilterConstPtr filter a00050.html ab9c2068a428aa8aadb8634f1fc6a001f () const QList< AccountPtr > accounts a00050.html a0dcbebe855cb46de7f0cbd18cff2da1d () const AccountManagerPtr accountManager a00050.html ab708e529f5e2b1dc168a85670bc47683 AccountFilterConstPtr filter a00050.html a65abb277c8a3be5b5f226b7b733dc7bc QList< AccountPtr > accounts a00050.html a93dffbca19977d08caa5696bfaec5c97 account_set_usage_sec account_set_create_sec Tp::Account a00040.html Tp::StatelessDBusProxy OptionalInterfaceFactory< Account > void removed a00040.html a8c564b522baf49c15018dc6ac48b3db2 () void serviceNameChanged a00040.html a4d28521835b27c47a55884a5c919092b (const QString &serviceName) void profileChanged a00040.html ace42d3a377fee2914566f68f5bccca2b (const Tp::ProfilePtr &profile) void displayNameChanged a00040.html a72c00f778599ca3c68bc97b7d5866fc1 (const QString &displayName) void iconNameChanged a00040.html a5373fba453c6b048857be9cd6b4fc50d (const QString &iconName) void nicknameChanged a00040.html afc0c31d4be4ff7efd21b0a4c5b44245f (const QString &nickname) void normalizedNameChanged a00040.html acdbc322a9b0bca21d857c629b6935c2b (const QString &normalizedName) void validityChanged a00040.html aa05c46077f96177b54a8a1e0f6aac6a5 (bool validity) void stateChanged a00040.html abdca5eae8368ed8601fea1f771859e95 (bool state) void capabilitiesChanged a00040.html a3943466e1bbec7a585939aad14423688 (const Tp::ConnectionCapabilities &capabilities) void connectsAutomaticallyPropertyChanged a00040.html a5c73e27c315e7f1d18eed8cbce727a55 (bool connectsAutomatically) void firstOnline a00040.html aabdb96a16b1d44347ada2f729b62133a () void parametersChanged a00040.html a73240d4c4269e91aafc512d2d0540f4e (const QVariantMap &parameters) void changingPresence a00040.html ab67374d7e791ead3beaddd3c78945e13 (bool value) void automaticPresenceChanged a00040.html afc167ca4b747c7ddc1b47187532bf18d (const Tp::Presence &automaticPresence) void currentPresenceChanged a00040.html af11a68796890bb36bbd861eeb6c728bf (const Tp::Presence &currentPresence) void requestedPresenceChanged a00040.html afe7216187ea9918ce7f05f529646090f (const Tp::Presence &requestedPresence) void onlinenessChanged a00040.html a7cde86e7ddc01a56b64caffbaec7fb2f (bool online) void avatarChanged a00040.html a04f4a8277e0207740bd355f93304de07 (const Tp::Avatar &avatar) void connectionStatusChanged a00040.html a55eeccfe19cc61410c34660682de00dd (Tp::ConnectionStatus status) void connectionChanged a00040.html ae8f51f89fa64a36aa7d85c6f40890c53 (const Tp::ConnectionPtr &connection) virtual ~Account a00040.html a49fa41a550c0fb2039b1945f866faaa8 () ConnectionFactoryConstPtr connectionFactory a00040.html ae2f177b0718c55235336a81e5c2377f0 () const ChannelFactoryConstPtr channelFactory a00040.html acd696bac5636d69b947f78fce9a9d23a () const ContactFactoryConstPtr contactFactory a00040.html a623af65416db8cb66f675deefa10edd3 () const bool isValidAccount a00040.html ada326018b91c5208302633624809c164 () const bool isEnabled a00040.html a136e97e79395c504099e3ddf74d9e4c8 () const PendingOperation * setEnabled a00040.html a236a0768d589ce8ee81bd3d20c03b36d (bool value) QString cmName a00040.html aa112f96ad72c2211ab27f2acdf66deff () const QString protocolName a00040.html a6662638c97a83b57adc4e3141a1a2f4d () const QString serviceName a00040.html a78b20f592c85d3036319d10b5d22680f () const PendingOperation * setServiceName a00040.html a989b494f485dbc81b5e7a6ea9938db16 (const QString &value) ProfilePtr profile a00040.html ae52d8f4fa9856dccbe4ff9e01cb5a24f () const QString displayName a00040.html a9fb40eab5d106c73bf8167386941d99b () const PendingOperation * setDisplayName a00040.html a734e4b2b84c708fcbd0fbcfba034e958 (const QString &value) QString iconName a00040.html a466818531605767d91a86f8a701f1c22 () const PendingOperation * setIconName a00040.html af27a1a46ef1ad5321e041c0e4113224d (const QString &value) QString nickname a00040.html acf0b1e286195c08aa0addba50f6fae4d () const PendingOperation * setNickname a00040.html a4ca3a21f9a30c549b8de4e8f828c47fb (const QString &value) AvatarSpec avatarRequirements a00040.html a1fb13db623ce1dc641f3efbb062abc11 () const const Avatar & avatar a00040.html a7986044d3712e222d4fe78e404ddb2c0 () const PendingOperation * setAvatar a00040.html a4b9a655f455894444cc1aca7013bc8f4 (const Avatar &avatar) QVariantMap parameters a00040.html a97dd9d43317189a31c3d2895b6749f92 () const PendingStringList * updateParameters a00040.html ac6c4b093a9a66f9f2148c572d3f7186d (const QVariantMap &set, const QStringList &unset) ProtocolInfo protocolInfo a00040.html aaf467624c2f236233f9c94a85334bef5 () const ConnectionCapabilities capabilities a00040.html a9908d3c7acdb5591efb11a5e1c27e39f () const bool connectsAutomatically a00040.html aaefb8ab1d01ff98b184e739560f49e78 () const PendingOperation * setConnectsAutomatically a00040.html a97ed89daad41d4628ee5407ae47465f5 (bool value) bool hasBeenOnline a00040.html ad693afac9776edb06c52d253ebc37d93 () const ConnectionStatus connectionStatus a00040.html a513a06f6482d9dd63060991e95c9198e () const ConnectionStatusReason connectionStatusReason a00040.html a19afe9d4286572b6d359bb5beaa8fe48 () const QString connectionError a00040.html a6d1db36226e162137ccaf29f5cb48593 () const Connection::ErrorDetails connectionErrorDetails a00040.html ab97ac22cf81da24e1e7b7e6e86bb59e6 () const ConnectionPtr connection a00040.html a5cc7bc5b20a3672ce9bee41c3de57e92 () const bool isChangingPresence a00040.html a76cf23e27bb40103e4dc9e58f6f4f416 () const PresenceSpecList allowedPresenceStatuses a00040.html af259615fab0050ccb1a3a40db6cbab1b (bool includeAllStatuses=false) const uint maxPresenceStatusMessageLength a00040.html a7b214856a7b5b2bba6c8515fdc43f9a3 () const Presence automaticPresence a00040.html a2687767e33179f3ddab29afcbd3dab54 () const PendingOperation * setAutomaticPresence a00040.html a6675cb92038e4669734d279af7f52db9 (const Presence &presence) Presence currentPresence a00040.html abe41ad93a3dfd277502e7cf8e152476b () const Presence requestedPresence a00040.html a097f61700dda6800acb723916c691ecf () const PendingOperation * setRequestedPresence a00040.html afd8463718f9643b2b1f32cb45bb6a776 (const Presence &presence) bool isOnline a00040.html a4d50af2176c91cbde03bb0001d098c6a () const QString uniqueIdentifier a00040.html a9c763d3a7cf2b419b8e564b0a56549c9 () const QString normalizedName a00040.html a3028b9d11e53c5a3b21b59e6050a6109 () const PendingOperation * reconnect a00040.html acf58d85dd564cf237609dd5b2097784f () PendingOperation * remove a00040.html a4fda5fc77d34eb22019d48ee52464dcf () bool supportsRequestHints a00040.html ac8df78c3696cd42d459445fe979e193b () const bool requestsSucceedWithChannel a00040.html a72bf6f6e2e270b24992f9417f11e087e () const PendingChannelRequest * ensureTextChat a00040.html acbd675a6f8d833b0047a9e02f47467f5 (const QString &contactIdentifier, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints()) PendingChannelRequest * ensureTextChat a00040.html a4aca1313a940b50c96a0f6391fc00915 (const ContactPtr &contact, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints()) PendingChannelRequest * ensureTextChatroom a00040.html a38d57b57c77573bf4c37110d1d35cf3c (const QString &roomName, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints()) PendingChannelRequest * ensureAudioCall a00040.html a57e640b076f5304aa61d11613c7a12ab (const QString &contactIdentifier, const QString &initialAudioContentName=QString(), const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints()) PendingChannelRequest * ensureAudioCall a00040.html a8e261569d921b6d89e5c58b4a6fcc253 (const ContactPtr &contact, const QString &initialAudioContentName=QString(), const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints()) PendingChannelRequest * ensureVideoCall a00040.html abc182d149d289aa5da22f068ee744eab (const QString &contactIdentifier, const QString &initialVideoContentName=QString(), const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints()) PendingChannelRequest * ensureVideoCall a00040.html aa356cabad84aa7493f5b5f6d03d8e281 (const ContactPtr &contact, const QString &initialVideoContentName=QString(), const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints()) PendingChannelRequest * ensureAudioVideoCall a00040.html a79a753c3497c5780f8e4f60319ac12bc (const QString &contactIdentifier, const QString &initialAudioContentName=QString(), const QString &initialVideoContentName=QString(), const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints()) PendingChannelRequest * ensureAudioVideoCall a00040.html a2bf8a9cd827d54d365ac6ca147de880e (const ContactPtr &contact, const QString &initialAudioContentName=QString(), const QString &initialVideoContentName=QString(), const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints()) PendingChannelRequest * ensureStreamedMediaCall a00040.html a0a26395e77841d89ea789e590e023b43 (const QString &contactIdentifier, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints()) PendingChannelRequest * ensureStreamedMediaCall a00040.html a5498d8d7f1f9c03aa903bd3db8b0d313 (const ContactPtr &contact, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints()) PendingChannelRequest * ensureStreamedMediaAudioCall a00040.html a0d07e32785d3a4487186127504c3f722 (const QString &contactIdentifier, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints()) PendingChannelRequest * ensureStreamedMediaAudioCall a00040.html adb48eb5eadf0186a2c99616e5cea88a2 (const ContactPtr &contact, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints()) PendingChannelRequest * ensureStreamedMediaVideoCall a00040.html abe9b35767b382bca625aa8f690395468 (const QString &contactIdentifier, bool withAudio=true, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints()) PendingChannelRequest * ensureStreamedMediaVideoCall a00040.html afde4a46025b3e944e6531db84b9e32b3 (const ContactPtr &contact, bool withAudio=false, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints()) PendingChannelRequest * createFileTransfer a00040.html ac415c6153d6373e299ec6d09a29898c0 (const QString &contactIdentifier, const FileTransferChannelCreationProperties &properties, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints()) PendingChannelRequest * createFileTransfer a00040.html a252d8f4448d7854770673812a8811153 (const ContactPtr &contact, const FileTransferChannelCreationProperties &properties, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints()) PendingChannelRequest * createStreamTube a00040.html a859f4bad0a76afed783c133908c0fae5 (const QString &contactIdentifier, const QString &service, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints()) PendingChannelRequest * createStreamTube a00040.html a23c36e1cdf6925de40e9515af5fd64fb (const ContactPtr &contact, const QString &service, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints()) PendingChannelRequest * createDBusTube a00040.html ac89bd92dadabd40f36e1d815375c166f (const QString &contactIdentifier, const QString &serviceName, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints()) PendingChannelRequest * createDBusTube a00040.html a120bcf3ff503addd072a2d84768ee1a7 (const ContactPtr &contact, const QString &serviceName, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints()) PendingChannelRequest * createConferenceStreamedMediaCall a00040.html ab57d1e0c35264c824195aeb14de4a206 (const QList< ChannelPtr > &channels, const QStringList &initialInviteeContactsIdentifiers=QStringList(), const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints()) PendingChannelRequest * createConferenceStreamedMediaCall a00040.html a9c7717a22e7e89aef4f6c977976129ba (const QList< ChannelPtr > &channels, const QList< ContactPtr > &initialInviteeContacts=QList< ContactPtr >(), const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints()) PendingChannelRequest * createConferenceTextChat a00040.html a124ca0577a3b7254f6b9058d2b9d1a27 (const QList< ChannelPtr > &channels, const QList< ContactPtr > &initialInviteeContacts=QList< ContactPtr >(), const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints()) PendingChannelRequest * createConferenceTextChat a00040.html a0af1347fe56d9577fa0c1ade2472452a (const QList< ChannelPtr > &channels, const QStringList &initialInviteeContactsIdentifiers=QStringList(), const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints()) PendingChannelRequest * createConferenceTextChatroom a00040.html a466bf2e116c3f6668ef6b0d2fbb1208e (const QString &roomName, const QList< ChannelPtr > &channels, const QStringList &initialInviteeContactsIdentifiers=QStringList(), const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints()) PendingChannelRequest * createConferenceTextChatroom a00040.html a4ce33e7af6d418632b27bed0e6b8b936 (const QString &roomName, const QList< ChannelPtr > &channels, const QList< ContactPtr > &initialInviteeContacts=QList< ContactPtr >(), const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints()) PendingChannelRequest * createContactSearch a00040.html a04637cc0d7d688db6223b871eaedba74 (const QString &server, uint limit=0, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints()) PendingChannel * ensureAndHandleTextChat a00040.html a3b94f7012027cd1d45ef7e81800585e9 (const QString &contactIdentifier, const QDateTime &userActionTime=QDateTime::currentDateTime()) PendingChannel * ensureAndHandleTextChat a00040.html a6f39485aa7e2ff5b5270085572de9240 (const ContactPtr &contact, const QDateTime &userActionTime=QDateTime::currentDateTime()) PendingChannel * ensureAndHandleTextChatroom a00040.html ae19ab91a2aec44842c7a0e48dbe82948 (const QString &roomName, const QDateTime &userActionTime=QDateTime::currentDateTime()) PendingChannel * ensureAndHandleAudioCall a00040.html a7addf4a8277ee1279ed1751abdb32547 (const QString &contactIdentifier, const QString &initialAudioContentName=QString(), const QDateTime &userActionTime=QDateTime::currentDateTime()) PendingChannel * ensureAndHandleAudioCall a00040.html a4316ea9f10a8d5832f135c0b5bf69060 (const ContactPtr &contact, const QString &initialAudioContentName=QString(), const QDateTime &userActionTime=QDateTime::currentDateTime()) PendingChannel * ensureAndHandleVideoCall a00040.html a4a4fd614a16fb85b8ecdc24e5602b732 (const QString &contactIdentifier, const QString &initialVideoContentName=QString(), const QDateTime &userActionTime=QDateTime::currentDateTime()) PendingChannel * ensureAndHandleVideoCall a00040.html a734d950720413d9412ebe1f8ca1b6ed3 (const ContactPtr &contact, const QString &initialVideoContentName=QString(), const QDateTime &userActionTime=QDateTime::currentDateTime()) PendingChannel * ensureAndHandleAudioVideoCall a00040.html ad5d345a2c3b291774d53dbf59d293d4d (const QString &contactIdentifier, const QString &initialAudioContentName=QString(), const QString &initialVideoContentName=QString(), const QDateTime &userActionTime=QDateTime::currentDateTime()) PendingChannel * ensureAndHandleAudioVideoCall a00040.html a0b083cabd99590d26f377b52c06888b3 (const ContactPtr &contact, const QString &initialAudioContentName=QString(), const QString &initialVideoContentName=QString(), const QDateTime &userActionTime=QDateTime::currentDateTime()) PendingChannel * ensureAndHandleStreamedMediaCall a00040.html aba0e7a69fe84870f250bd515eb4c4ff7 (const QString &contactIdentifier, const QDateTime &userActionTime=QDateTime::currentDateTime()) PendingChannel * ensureAndHandleStreamedMediaCall a00040.html a7498f2201ca64e4cdef4a433cfa2ebc0 (const ContactPtr &contact, const QDateTime &userActionTime=QDateTime::currentDateTime()) PendingChannel * ensureAndHandleStreamedMediaAudioCall a00040.html a405c41b4272c30e828e2c1874a5671ec (const QString &contactIdentifier, const QDateTime &userActionTime=QDateTime::currentDateTime()) PendingChannel * ensureAndHandleStreamedMediaAudioCall a00040.html aff03d0bd441ca8ffbbd2bcb236f33a39 (const ContactPtr &contact, const QDateTime &userActionTime=QDateTime::currentDateTime()) PendingChannel * ensureAndHandleStreamedMediaVideoCall a00040.html abe6625709e2a1234929a3a0bf8ad5110 (const QString &contactIdentifier, bool withAudio=true, const QDateTime &userActionTime=QDateTime::currentDateTime()) PendingChannel * ensureAndHandleStreamedMediaVideoCall a00040.html ae825938962e74f87bd47c6dc229734d5 (const ContactPtr &contact, bool withAudio=true, const QDateTime &userActionTime=QDateTime::currentDateTime()) PendingChannel * createAndHandleFileTransfer a00040.html aed93b0ed9559a475b42505395a478e50 (const QString &contactIdentifier, const FileTransferChannelCreationProperties &properties, const QDateTime &userActionTime=QDateTime::currentDateTime()) PendingChannel * createAndHandleFileTransfer a00040.html a0224f831a42d63b345322525e43cc781 (const ContactPtr &contact, const FileTransferChannelCreationProperties &properties, const QDateTime &userActionTime=QDateTime::currentDateTime()) PendingChannel * createAndHandleStreamTube a00040.html a80e192ae718f2904524d3b5fbcb0a5fb (const QString &contactIdentifier, const QString &service, const QDateTime &userActionTime=QDateTime::currentDateTime()) PendingChannel * createAndHandleStreamTube a00040.html a36e8c7b6aceb8ba7ddde04a88c637f65 (const ContactPtr &contact, const QString &service, const QDateTime &userActionTime=QDateTime::currentDateTime()) PendingChannel * createAndHandleDBusTube a00040.html a1c0feca79b6ccc4a9cfb9c3a5f0649c5 (const QString &contactIdentifier, const QString &serviceName, const QDateTime &userActionTime=QDateTime::currentDateTime()) PendingChannel * createAndHandleDBusTube a00040.html abbb00c4e4c689c62fce0e7abbc039944 (const ContactPtr &contact, const QString &serviceName, const QDateTime &userActionTime=QDateTime::currentDateTime()) PendingChannel * createAndHandleConferenceTextChat a00040.html a670829dfd7250ff1b9986f19bb10a61a (const QList< ChannelPtr > &channels, const QList< ContactPtr > &initialInviteeContacts=QList< ContactPtr >(), const QDateTime &userActionTime=QDateTime::currentDateTime()) PendingChannel * createAndHandleConferenceTextChat a00040.html a046ddbd01f0168f9d76ee1020b424fcf (const QList< ChannelPtr > &channels, const QStringList &initialInviteeContactsIdentifiers=QStringList(), const QDateTime &userActionTime=QDateTime::currentDateTime()) PendingChannel * createAndHandleConferenceTextChatroom a00040.html a228666ac21047119285bdae8afa40e52 (const QString &roomName, const QList< ChannelPtr > &channels, const QStringList &initialInviteeContactsIdentifiers=QStringList(), const QDateTime &userActionTime=QDateTime::currentDateTime()) PendingChannel * createAndHandleConferenceTextChatroom a00040.html ad7ab17e576bac62d22f649882f0a134d (const QString &roomName, const QList< ChannelPtr > &channels, const QList< ContactPtr > &initialInviteeContacts=QList< ContactPtr >(), const QDateTime &userActionTime=QDateTime::currentDateTime()) PendingChannel * createAndHandleConferenceStreamedMediaCall a00040.html a1ee236fe5eedf6453b3ddfd3582b005b (const QList< ChannelPtr > &channels, const QStringList &initialInviteeContactsIdentifiers=QStringList(), const QDateTime &userActionTime=QDateTime::currentDateTime()) PendingChannel * createAndHandleConferenceStreamedMediaCall a00040.html a4c45998f9c2d4dc41e5dc9befd8ec5d1 (const QList< ChannelPtr > &channels, const QList< ContactPtr > &initialInviteeContacts=QList< ContactPtr >(), const QDateTime &userActionTime=QDateTime::currentDateTime()) PendingChannel * createAndHandleContactSearch a00040.html a72abf4e36163deaff3b4aed4a33d5fc9 (const QString &server=QString(), uint limit=0, const QDateTime &userActionTime=QDateTime::currentDateTime()) PendingChannelRequest * createChannel a00040.html a24722fdf1204c9f6d24fe3d4cc2c3292 (const QVariantMap &requestedProperties, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints()) PendingChannelRequest * ensureChannel a00040.html acb2d7f568beb5b96f0fe985f877d4ec9 (const QVariantMap &requestedProperties, const QDateTime &userActionTime=QDateTime::currentDateTime(), const QString &preferredHandler=QString(), const ChannelRequestHints &hints=ChannelRequestHints()) PendingChannel * createAndHandleChannel a00040.html aed5d16035a1c442e93a2fae72b850857 (const QVariantMap &requestedProperties, const QDateTime &userActionTime) PendingChannel * ensureAndHandleChannel a00040.html aee4ba1ddaf5b965e05803554e4d6ca02 (const QVariantMap &requestedProperties, const QDateTime &userActionTime) static AccountPtr create a00040.html aef4c7a496efe8532088c7c91ef56ca1a (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 a00040.html a7cd951eaf433bc214136004002d9c23b (const QDBusConnection &bus, const QString &busName, const QString &objectPath, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory=ContactFactory::create()) static const Feature FeatureCore a00040.html a7539f38c2b784fb4b9f97da4ea97a6ad static const Feature FeatureAvatar a00040.html afc6d6fa78a867d70f9371a8d87570355 static const Feature FeatureProtocolInfo a00040.html af103cec14aca1099ab41ec53ad27b787 static const Feature FeatureCapabilities a00040.html a01b1ed83af4d509328278c4ec6c9fb7c static const Feature FeatureProfile a00040.html ae546a2de4635e84dca100e73f12a3923 Account a00040.html ab18d2713520cfe79375033ae4a917529 (const QDBusConnection &bus, const QString &busName, const QString &objectPath, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory, const Feature &coreFeature) Client::AccountInterface * baseInterface a00040.html a3f50f8819ed6bcfbe3de72e4ab1f594a () const Client::ChannelDispatcherInterface * dispatcherInterface a00040.html a2c12bdde2185330aeeb11376899d44c7 () const bool valid a00040.html a3cffc957c41ec745ccac736d62d12a02 bool enabled a00040.html aeb9b15744188659cb50146f2c7f24b24 QString cmName a00040.html ae9e0af24edd754310a26d2a4b199e90a QString protocolName a00040.html af675e608e7ccc275355716ba97446b0c QString serviceName a00040.html aef34a01727157f42f507f97e24450fc3 ProfilePtr profile a00040.html ad3d0be18bb75c147ca01d50bbcd1d440 QString displayName a00040.html ae4bdab95dd652f4625bde6cf7045f886 QString iconName a00040.html a1bdcb40505e0dcd18e2fadf0586a879f QString nickname a00040.html a770a6a3d3e2292a0f901616a7f8fb382 AvatarSpec avatarRequirements a00040.html a7142e9d3d92c9efc7f167f1fbd16b6e6 Avatar avatar a00040.html a0adb5a23167b2e36ae1178e653aaa543 QVariantMap parameters a00040.html aecbcd5c64d4b1110ae39052981a12083 ProtocolInfo protocolInfo a00040.html afb2abfa556b1dbfe135b82daecff7b5b ConnectionCapabilities capabilities a00040.html afbe2e6ca0be1db61d6c1b526b662b9e3 bool hasBeenOnline a00040.html a49784c282d5624c05212c759cbe35710 bool connectsAutomatically a00040.html a225d08dc86f88771d9bb52548587438f ConnectionStatus connectionStatus a00040.html aaa9b668961fc565957aa4a4516c20821 ConnectionStatusReason connectionStatusReason a00040.html a14fbcb879ac804648d078b870a32c793 QString connectionError a00040.html a6d8bc8610d01feb04c5102378126746b Tp::Connection::ErrorDetails connectionErrorDetails a00040.html a990be73ee94813ac53546176aafd1adc ConnectionPtr connection a00040.html af2a055b749ac0d96b0153d3a0cf35fd9 bool changingPresence a00040.html ac05567ba1653168e23b33aae6ad34463 Presence automaticPresence a00040.html a964518b04a92924e7f845ab98a68007b Presence currentPresence a00040.html aeb4d2c5bdb6ffb7f66904b1b4eb0f848 Presence requestedPresence a00040.html a7fefc5c5b2f028ef3678bd03bd5d2ae6 bool online a00040.html a7492892b2d84652633bb48c0007a470e QString uniqueIdentifier a00040.html a7698f1f9fc04b17128c59fdd519e0199 QString normalizedName a00040.html ad170e8e8962670f586652dae8c49bf3f account_ready_sec account_create_sec account_usage_sec Tp::AndFilter a00054.html Tp::Filter virtual ~AndFilter a00054.html a34763fedbcc451d7d5c6756a7db931dd () virtual bool isValid a00054.html af8fee23e5ed63c0997f3b713cf9abb8d () const virtual bool matches a00054.html a6003457a9b6093f976f18268bcc0fa1e (const SharedPtr< T > &t) const QList< SharedPtr< const Filter< T > > > filters a00054.html a54a1bf0034b1fb1f1223dc86d048aeb5 () const static SharedPtr< AndFilter< T > > create a00054.html ad4257c712fb1ba80aaea65a9e10760c9 (const QList< SharedPtr< const Filter< T > > > &filters=QList< SharedPtr< const Filter< T > > >()) Tp::AvatarData a00057.html AvatarData a00057.html a469d73842f3653666adf48741be26b0b (const QString &fileName, const QString &mimeType) AvatarData a00057.html aec4d4212517c06d9f712488dd9af24ba () QString fileName a00057.html ab9d39d5346f8cd3be5eef72185287515 QString mimeType a00057.html a097053516b4cf12847daab25d313e473 Tp::AvatarSpec a00058.html AvatarSpec a00058.html af3d5d9cba6eb7371878d3ea7c37b16a4 () AvatarSpec a00058.html a9f5b0dbce7af7beca52e071b33511d9e (const QStringList &supportedMimeTypes, uint minHeight, uint maxHeight, uint recommendedHeight, uint minWidth, uint maxWidth, uint recommendedWidth, uint maxBytes) AvatarSpec a00058.html af91a0f3d036aa394b1167e2fd44db21e (const AvatarSpec &other) ~AvatarSpec a00058.html a279811d7a05c16a8095c7165f3352853 () bool isValid a00058.html ac8484053519fef9a4d82b0ac6bc69d22 () const AvatarSpec & operator= a00058.html afb23eec8d9767dd543c4687285a166f7 (const AvatarSpec &other) QStringList supportedMimeTypes a00058.html a90aea83463ca1f9b9349450fdcdef82a () const uint minimumHeight a00058.html a240e48e147f5d20f27f15c4c53b2c5b8 () const uint maximumHeight a00058.html aa1ac2ac8a0951716c26f3f788949d798 () const uint recommendedHeight a00058.html a0ac4dcf09f63a443008d2ea6a8fe463a () const uint minimumWidth a00058.html a85779e57443a3127a81c15f76e2f9d47 () const uint maximumWidth a00058.html a638af3491126c28e3ed8c355c839b0c8 () const uint recommendedWidth a00058.html a21bdb915de70ef99c4c1867e8d075dfc () const uint maximumBytes a00058.html a515d57c04be3419cf42bb9dda50ec786 () const Tp::BaseConnectionManager a00062.html Tp::DBusService void newConnection a00062.html aec924f0c98fe84e2cede63b8180e0bd8 (const BaseConnectionPtr &connection) virtual ~BaseConnectionManager a00062.html aba6ca3e31d6109efcad481b9331fa1ad () QString name a00062.html a55b2067ca06f6337b00fd6cb35c206b8 () const QVariantMap immutableProperties a00062.html a96ca8a6b55c923e1baa2f3096aa1443e () const QList< BaseProtocolPtr > protocols a00062.html a05108bc2d77df85aa6ff8481ba706813 () const BaseProtocolPtr protocol a00062.html ae12d300da9b4da40fc99d126719a511f (const QString &protocolName) const bool hasProtocol a00062.html a2c1e8bfaf1ba1f6e5eede2d0e02915c9 (const QString &protocolName) const bool addProtocol a00062.html a9e545502f9148154e5321a13489d3c14 (const BaseProtocolPtr &protocol) bool registerObject a00062.html adf85fbe7d273e9628be2380a8e44ef38 (DBusError *error=NULL) QList< BaseConnectionPtr > connections a00062.html ac18978a6d9d550d39db2be9f677fc9ea () const static BaseConnectionManagerPtr create a00062.html a23e48db54811831a056e80145d302d12 (const QString &name) static SharedPtr< BaseConnectionManagerSubclass > create a00062.html aec68a4f81bce19eef5705be2b7c37263 (const QString &name) static BaseConnectionManagerPtr create a00062.html ac8c4d4839684a2ba546fb55958dcd904 (const QDBusConnection &dbusConnection, const QString &name) static SharedPtr< BaseConnectionManagerSubclass > create a00062.html aae6a7adade939b4ae77a53748c24a5ba (const QDBusConnection &dbusConnection, const QString &name) BaseConnectionManager a00062.html acbfd3dc14d56b58f708bc14f2a4b436b (const QDBusConnection &dbusConnection, const QString &name) virtual bool registerObject a00062.html ab5e0b85ce1a352a07d43566681602a2b (const QString &busName, const QString &objectPath, DBusError *error) Tp::BaseConnection a00061.html Tp::DBusService void disconnected a00061.html a3a7ab1dd564ff6b597f7d9d712b9a8ad () virtual ~BaseConnection a00061.html a57a7563e802eeab218aaa461b34b1d25 () QString cmName a00061.html adef16d41150bd74cc7ea2d4cd5e25906 () const QString protocolName a00061.html a31a94890e53adb5fe91c3eb568729f9e () const QVariantMap parameters a00061.html a7c8f844d9b9a5f41d4305828b12d9139 () const QVariantMap immutableProperties a00061.html a8bd12c5e682f4c70a9449e41f2d7af02 () const virtual QString uniqueName a00061.html a95b0eacbb0cb6a2ef5a6a04ae817f8e7 () const bool registerObject a00061.html aa45975c5a628aad418385ef42f4f2dae (DBusError *error=NULL) static BaseConnectionPtr create a00061.html a6d506b5e8745e8cb83eeb64354627082 (const QString &cmName, const QString &protocolName, const QVariantMap &parameters) static SharedPtr< BaseConnectionSubclass > create a00061.html abc5e42e702078acbab514714a0900b62 (const QString &cmName, const QString &protocolName, const QVariantMap &parameters) static BaseConnectionPtr create a00061.html ac7c6e128c7363d200f99b357754846c6 (const QDBusConnection &dbusConnection, const QString &cmName, const QString &protocolName, const QVariantMap &parameters) static SharedPtr< BaseConnectionSubclass > create a00061.html a3d85eec24e2a22a626abeaf8e732b5ef (const QDBusConnection &dbusConnection, const QString &cmName, const QString &protocolName, const QVariantMap &parameters) BaseConnection a00061.html acddfd7f573107d6acdfdbe8538089bbc (const QDBusConnection &dbusConnection, const QString &cmName, const QString &protocolName, const QVariantMap &parameters) virtual bool registerObject a00061.html a33d8b5973a926e504fefc724e63898e0 (const QString &busName, const QString &objectPath, DBusError *error) Tp::BaseProtocol a00065.html Tp::DBusService Callback2< BaseConnectionPtr, const QVariantMap &, DBusError * > CreateConnectionCallback a00065.html a754a9cbbee89e10d007d54a822abbba9 Callback2< QString, const QVariantMap &, DBusError * > IdentifyAccountCallback a00065.html a5be1a3e566f6941789443b9eb5a7aa54 Callback2< QString, const QString &, DBusError * > NormalizeContactCallback a00065.html af08508c4bfaa09ce71698365c724754e virtual ~BaseProtocol a00065.html abe324f7382944c98357b745d1f447754 () QString name a00065.html a97d21acbee456b6a50ff9aa248e845c1 () const QVariantMap immutableProperties a00065.html aa89e38a5eafea9440fc5d6d36cadb0d5 () const QStringList connectionInterfaces a00065.html ac2855d193fda0733527fe0f4c838eb6c () const void setConnectionInterfaces a00065.html a0323131c57fb3919d97c0934ceb1e197 (const QStringList &connInterfaces) ProtocolParameterList parameters a00065.html a8dac258c1fcbbef9c1667f4a843ea3e9 () const void setParameters a00065.html a9230ce0069f1c5dc2718a38fd38b77c4 (const ProtocolParameterList &parameters) RequestableChannelClassSpecList requestableChannelClasses a00065.html af4d465b67497dc393459496397301ad6 () const void setRequestableChannelClasses a00065.html abf3f1adee60c6d6f0f33028dd2f11d9d (const RequestableChannelClassSpecList &rccSpecs) QString vcardField a00065.html a8d13a3ec36b3f8c5998267ea0e3e92d5 () const void setVCardField a00065.html a9c91b65251e69bc08b5dfbd6f3ed0418 (const QString &vcardField) QString englishName a00065.html ae23ef0315e4344677a960596b81bc6e8 () const void setEnglishName a00065.html a1cf142fe8cee7ae8510736809828659b (const QString &englishName) QString iconName a00065.html a32c5d745b28d679998ea6a3007e55368 () const void setIconName a00065.html a41376268d1583c1217395a15bfe6fd2f (const QString &iconName) QStringList authenticationTypes a00065.html a8f81226737b86dd7269bcb702484a4cb () const void setAuthenticationTypes a00065.html ac618edcd67b7528670da894c273e284c (const QStringList &authenticationTypes) void setCreateConnectionCallback a00065.html a02f0988bb7083dd8e9b20e8cb2350f51 (const CreateConnectionCallback &cb) Tp::BaseConnectionPtr createConnection a00065.html ad0733724fe51c059a0a503ddd70268ae (const QVariantMap &parameters, DBusError *error) void setIdentifyAccountCallback a00065.html a9c1e6b2e6601c459bd3cc52b4ca5f133 (const IdentifyAccountCallback &cb) QString identifyAccount a00065.html a4926c732f0d835b728b4b5a413797576 (const QVariantMap &parameters, DBusError *error) void setNormalizeContactCallback a00065.html a9416d4a97e23359fa7753a8c2a8f34b6 (const NormalizeContactCallback &cb) QString normalizeContact a00065.html ab3908229b44f3397dd6d0fe6d7463490 (const QString &contactId, DBusError *error) QList< AbstractProtocolInterfacePtr > interfaces a00065.html aa8c6220baf97b64a0efea933a124895d () const AbstractProtocolInterfacePtr interface a00065.html a9ed1d5f4f1e817f6bf81f8b7d0e55725 (const QString &interfaceName) const bool plugInterface a00065.html a9bc5a99e490f3b4858b7559b42ec8567 (const AbstractProtocolInterfacePtr &interface) static BaseProtocolPtr create a00065.html a13a02b2d82a1c4bcb7cbb86bc3ce9a2c (const QString &name) static SharedPtr< BaseProtocolSubclass > create a00065.html ab6877446aabf2122340bc73f0ccd0137 (const QString &name) static BaseProtocolPtr create a00065.html a25b4c1b77af3c1e5799bafb55de5fe5b (const QDBusConnection &dbusConnection, const QString &name) static SharedPtr< BaseProtocolSubclass > create a00065.html a57bfcbdedf90255f806640522369f461 (const QDBusConnection &dbusConnection, const QString &name) BaseProtocol a00065.html a8d922b26eec0e19a1487b1083be60d00 (const QDBusConnection &dbusConnection, const QString &name) virtual bool registerObject a00065.html a1484af076699ff225817248538e060cf (const QString &busName, const QString &objectPath, DBusError *error) Tp::AbstractProtocolInterface a00038.html Tp::AbstractDBusServiceInterface AbstractProtocolInterface a00038.html abb9aec5d7d64c5c2187c4a5923c2ef55 (const QString &interfaceName) virtual ~AbstractProtocolInterface a00038.html aef0831190fc807ba8c21b0abd2d5d0da () Tp::BaseProtocolAddressingInterface a00066.html Tp::AbstractProtocolInterface Callback3< QString, const QString &, const QString &, DBusError * > NormalizeVCardAddressCallback a00066.html aaf6153a1fc10de1cef1ef5296643d279 Callback2< QString, const QString &, DBusError * > NormalizeContactUriCallback a00066.html a0d76428929399db0e8f117520942ca6d virtual ~BaseProtocolAddressingInterface a00066.html af25c5f97835e751b26b79e1c6b2fb5f4 () QVariantMap immutableProperties a00066.html a5c134d4757b31480e8fbff83a1db79e6 () const QStringList addressableVCardFields a00066.html a9bdb55fef54a7af0df2b088c3529ccd2 () const void setAddressableVCardFields a00066.html ae82ada4d1f6f969045699872358652c9 (const QStringList &vcardFields) QStringList addressableUriSchemes a00066.html a29fdbb5b3f8f792039964aecbf59aa99 () const void setAddressableUriSchemes a00066.html aa655d34b029325d5bd38c207b8ab3df0 (const QStringList &uriSchemes) void setNormalizeVCardAddressCallback a00066.html a97231d17119828328c0ed4fb6e876d9b (const NormalizeVCardAddressCallback &cb) QString normalizeVCardAddress a00066.html a15ddf2ccf7e4d0f7ae7803c492c91d43 (const QString &vcardField, const QString &vcardAddress, DBusError *error) void setNormalizeContactUriCallback a00066.html a0e49a479f42c62eed624bcddb250f0f1 (const NormalizeContactUriCallback &cb) QString normalizeContactUri a00066.html aafa464e7e8b51d928bfd9706637f93fe (const QString &uri, DBusError *error) static BaseProtocolAddressingInterfacePtr create a00066.html a6aa0b03781d69091500002cfe897cf0f () static SharedPtr< BaseProtocolAddressingInterfaceSubclass > create a00066.html a28d3e56b9e74a6f704e10b64ae4496b3 () BaseProtocolAddressingInterface a00066.html ad1bce0dc314e162c895a4e797ccf28fc () Tp::BaseProtocolAvatarsInterface a00067.html Tp::AbstractProtocolInterface virtual ~BaseProtocolAvatarsInterface a00067.html a6c08a96f5a02b037ceeac239520bf536 () QVariantMap immutableProperties a00067.html ab4730d3a7b82a918a593c36802291a51 () const AvatarSpec avatarDetails a00067.html ac5fcc903abfc9f512bce3202533c1896 () const void setAvatarDetails a00067.html a58f77a409e97f7d453206fc1c142773c (const AvatarSpec &spec) static BaseProtocolAvatarsInterfacePtr create a00067.html a83e084786e3c283756344524220e075d () static SharedPtr< BaseProtocolAvatarsInterfaceSubclass > create a00067.html a01d93ed9dca936895aa1b8bc4ff01543 () BaseProtocolAvatarsInterface a00067.html aeba211a409db85d13633febe2f16bf52 () Tp::BaseProtocolPresenceInterface a00068.html Tp::AbstractProtocolInterface virtual ~BaseProtocolPresenceInterface a00068.html a37e421a5f126246ae6081db38920e9c5 () QVariantMap immutableProperties a00068.html a84d8cc22f1c37d2a57911d9b74e3ee76 () const PresenceSpecList statuses a00068.html abfda554023305d87655cc38d7d24c12f () const void setStatuses a00068.html ac03a1e1616bc96cd334f7c63c3831eb5 (const PresenceSpecList &statuses) static BaseProtocolPresenceInterfacePtr create a00068.html af79b5416be145c84aab70c051280aa03 () static SharedPtr< BaseProtocolPresenceInterfaceSubclass > create a00068.html ad9e2fca08c8f7335e7e8d87d74edadf1 () BaseProtocolPresenceInterface a00068.html a7d39850098f393d2d0b4174d6462dda4 () Tp::CallChannel a00078.html Tp::Channel void callStateChanged a00078.html a20ee5987f101b17d51d0aa0728e8c422 (Tp::CallState state) void callFlagsChanged a00078.html abe3fdb9e12b37fdb160a7fcb15e3bcf2 (Tp::CallFlags flags) void remoteMemberFlagsChanged a00078.html a8924b3eda5dedaffa276563196e31564 (const QHash< Tp::ContactPtr, Tp::CallMemberFlags > &remoteMemberFlags, const Tp::CallStateReason &reason) void remoteMembersRemoved a00078.html a4ebd0813e1ac1946bad783f968f00d2e (const Tp::Contacts &remoteMembers, const Tp::CallStateReason &reason) void contentAdded a00078.html acd83ab0d7c600f7316e30cd66398d5b3 (const Tp::CallContentPtr &content) void contentRemoved a00078.html a2e40925e9a10f57cec4bcbdc3b7f24c7 (const Tp::CallContentPtr &content, const Tp::CallStateReason &reason) void localHoldStateChanged a00078.html a33820c267894971e550a6bc7b848db0c (Tp::LocalHoldState state, Tp::LocalHoldStateReason reason) virtual ~CallChannel a00078.html a5eb52cf42809d04f47ae40323ff0d364 () bool handlerStreamingRequired a00078.html a16b5201603c2fa27debee12e38f3c4c7 () const StreamTransportType initialTransportType a00078.html aa36c7fc6959223a29d42b981b3f8c30f () const bool hasInitialAudio a00078.html ae604021a45998e02dd2f995757ef13bd () const bool hasInitialVideo a00078.html a6a9e174152c95ee9889308c2d0d8ecec () const QString initialAudioName a00078.html a245257c5d657bb1786027d48f894549a () const QString initialVideoName a00078.html a6db694786597d739eec23b09300b586c () const bool hasMutableContents a00078.html ae8968da112538fbd3437095869971b72 () const PendingOperation * setRinging a00078.html a979b738e62a952b03de72c0714fe4f6e () PendingOperation * setQueued a00078.html a433d41012e561dc2a745fff45a9b3cfd () PendingOperation * accept a00078.html ad4d70fbcbb694ef8f9e3099bd95503f2 () PendingOperation * hangup a00078.html a86a247081faf23709252ecc1d8e64f1d (CallStateChangeReason reason=CallStateChangeReasonUserRequested, const QString &detailedReason=QString(), const QString &message=QString()) CallState callState a00078.html a5590d677ac201876056418e9f89daea3 () const CallFlags callFlags a00078.html a573cef951cfb1ff9db3e5a82fc730e97 () const CallStateReason callStateReason a00078.html af4de4f8bd11bb4e3160a7b27cdc7d7b4 () const QVariantMap callStateDetails a00078.html a996300f27f632d0e1b10df66bb5fc76b () const Contacts remoteMembers a00078.html aa1468ea101344800bff47eb5ceafb408 () const CallMemberFlags remoteMemberFlags a00078.html aa6802bb3ccba31555d4e51fe4f0902b8 (const ContactPtr &member) const CallContents contents a00078.html aaaf47fbc2f8dcb535fabeb1291d9d45e () const CallContents contentsForType a00078.html ac69beea4a26feab6bf71bc23a453dafa (MediaStreamType type) const CallContentPtr contentByName a00078.html a1d33d777b6d8874171e50708856a0f6e (const QString &contentName) const PendingCallContent * requestContent a00078.html a810b9a62be218ddedf9592167979638d (const QString &name, MediaStreamType type, MediaStreamDirection direction) LocalHoldState localHoldState a00078.html aede2a1234654a5d1044ddf4dfefb3df0 () const LocalHoldStateReason localHoldStateReason a00078.html a1bfc67452494081f5525c6a96b239981 () const PendingOperation * requestHold a00078.html a19fcb71d9327bb6876b5c8dec9f1e00c (bool hold) static CallChannelPtr create a00078.html adf1b8153cb99c7e0ab4fbdedf70fc559 (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) static const Feature FeatureCore a00078.html a644391eb4161f82651ea0ceb3b701cd6 static const Feature FeatureCallState a00078.html a2c540e6a86bdd05a819deac4161c07c6 static const Feature FeatureCallMembers a00078.html acb2c8f6dcf6c6f0919dd75a09c0e5adf static const Feature FeatureContents a00078.html aa0b46928e544859d57a610774674cb25 static const Feature FeatureLocalHoldState a00078.html ac5586ecd4ff602790865106023400846 CallChannel a00078.html a650376c6144ca375bb8b5e04c7fb0a5a (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature=CallChannel::FeatureCore) Tp::CallContent a00079.html Tp::StatefulDBusProxy OptionalInterfaceFactory< CallContent > void streamAdded a00079.html a730ecd19f69b477d1abd6122280f4e6e (const Tp::CallStreamPtr &stream) void streamRemoved a00079.html a33d3906c43dee4754a07f776ffee6cb0 (const Tp::CallStreamPtr &stream, const Tp::CallStateReason &reason) ~CallContent a00079.html a81dfa25f2bed9528dcea07cd177c99fa () CallChannelPtr channel a00079.html ac83f175cdfca41498d7ec406f165213b () const QString name a00079.html ab749b4ec3712c14611471f681dd77954 () const MediaStreamType type a00079.html a78e94d077794f83a66c333f5e40112b7 () const CallContentDisposition disposition a00079.html a05c5728d5b6c44ad5be4f9142b4a17a4 () const CallStreams streams a00079.html a7eb03541695c8d135ddb29315806cd8f () const PendingOperation * remove a00079.html aea2066f03a84a9fa255572dfbe416be6 () bool supportsDTMF a00079.html ac10b5bf2b32fca6373e808f4e2a68110 () const PendingOperation * startDTMFTone a00079.html a4fd35fbaf1a8e50c9db645933f8a9f2c (DTMFEvent event) PendingOperation * stopDTMFTone a00079.html ac39ed3b9c60045241e9a61c719fe504d () Tp::PendingCallContent a00306.html Tp::PendingOperation ~PendingCallContent a00306.html aad443633b6e63a5ec6437cfe98cb6c84 () CallContentPtr content a00306.html adca21704795390ed7f1562efef398753 () const Tp::CallStream a00091.html Tp::StatefulDBusProxy OptionalInterfaceFactory< CallStream > void localSendingStateChanged a00091.html ab254a1c43336929a7678ed220904e65e (Tp::SendingState localSendingState, const Tp::CallStateReason &reason) void remoteSendingStateChanged a00091.html a29f12406179eb4cb82bbaa783e32b745 (const QHash< Tp::ContactPtr, Tp::SendingState > &remoteSendingStates, const Tp::CallStateReason &reason) void remoteMembersRemoved a00091.html a9d8ca109af432c71c3f50d91e7d470f7 (const Tp::Contacts &remoteMembers, const Tp::CallStateReason &reason) ~CallStream a00091.html a5e4bd23d594e9bb1f654fc533b3326af () CallContentPtr content a00091.html a3405461a24cc3bb70de2aaa0fb420cb6 () const Contacts remoteMembers a00091.html a4890e0d9e521ed88388e3cedc51f62bd () const bool canRequestReceiving a00091.html a5c74c24f56b4db9c11c46c5e3ecb43fc () const SendingState localSendingState a00091.html a5d73874fa611e40d56d782163f38261b () const SendingState remoteSendingState a00091.html a01445c496aaa67139d5556756a8ec31e (const ContactPtr &contact) const PendingOperation * requestSending a00091.html a595c1041331e8c42d43359fbf744c315 (bool send) PendingOperation * requestReceiving a00091.html a2b0e5457e8e5bf927002302aa177b4d2 (const ContactPtr &contact, bool receive) Tp::AbstractFunctorCaller a00036.html void *(* HookType a00036.html aba2fa60903d8c7dba88ba99a060762ae )(void *) AbstractFunctorCaller a00036.html ae11043afca2123970051ad78d8f53ee0 (HookType invokeMethodHook) virtual ~AbstractFunctorCaller a00036.html a1c7a083774ed060319c7d723a5fe983e () virtual AbstractFunctorCaller * clone a00036.html a1908087a5de65fb714d0f4efe4b561ec () const =0 HookType invokeMethodHook a00036.html a9c85599e1af1aaede7da9c09c674d0c1 Tp::BaseFunctorCaller a00064.html T Functor Tp::AbstractFunctorCaller BaseFunctorCaller a00064.html ae7dfb581985ab61e02dcc0d330ab6a90 (const Functor &functor, AbstractFunctorCaller::HookType invokeMethodHook) virtual ~BaseFunctorCaller a00064.html a7843b46c04c2154675aff07fef12da27 () virtual AbstractFunctorCaller * clone a00064.html a24341dd2e9f04ba5e26df7c40c22226e () const Functor functor a00064.html ad60f187bb7c70ce7a51ee129aabc58dc Tp::BaseCallback a00060.html BaseCallback a00060.html a004ab8eb73e2d0593511b1a1991aa96c () BaseCallback a00060.html aa8692b22f524e662c0a61aa01cf0a2f2 (AbstractFunctorCaller *caller) BaseCallback a00060.html aa49c5a89c4e7522f57371d50babdd428 (const BaseCallback &other) virtual ~BaseCallback a00060.html af96b8c3466f6ea2e8cb78439278ddd9d () bool isValid a00060.html a9a9b46a8682d31b7a971c77de6bdc396 () const BaseCallback & operator= a00060.html ab4aec0842d5165e86985d354fe1e19db (const BaseCallback &other) AbstractFunctorCaller * caller a00060.html afd47da9a9492006d4b3a52f0e39dc036 Tp::FunctorCaller0 a00234.html BaseFunctorCaller< FunctorCaller0< Functor, R >, Functor > R ResultType a00234.html a5d54166916dec370260f238bce6a8948 R(* InvokeType a00234.html a07b83461ba2b027310de0ae359d595b0 )(AbstractFunctorCaller *) FunctorCaller0 a00234.html aace32e7725b71811b26057ee948cfb03 (const Functor &functor) static ResultType invoke a00234.html acdf41bc8cecf176c5788e2d7ec2f0add (AbstractFunctorCaller *call) Tp::Callback0 a00070.html Tp::BaseCallback R(* FunctionType a00070.html a1a53a1bdd2562398260cf92adb267bbd )() R ResultType a00070.html a37184de7f3509ffe325b8fc168b83127 Callback0 a00070.html a5b803a5335e64214f46c296ca04f2b60 () Callback0 a00070.html a97a4fcaf510962662a29117a17f39e9c (const Functor &functor) ResultType operator() a00070.html af2ba1dad2f9d7cac0f1ba29a3216da0e () const Tp::FunctorCaller1 a00235.html BaseFunctorCaller< FunctorCaller1< Functor, R, Arg1 >, Functor > R ResultType a00235.html aed33744b5d003f695e45439ea92c8e5d R(* InvokeType a00235.html a5f54b2fea31185cf58811147670b647c )(AbstractFunctorCaller *, Arg1) FunctorCaller1 a00235.html ad9d8773059665921c27c74508ef20cbf (const Functor &functor) static ResultType invoke a00235.html a43b5b57ccf917ca934987d2b8da27ec0 (AbstractFunctorCaller *call, Arg1 a1) Tp::Callback1 a00071.html Tp::BaseCallback R(* FunctionType a00071.html a8230a2cc29b294afe16a67df3fe6c69f )(Arg1) R ResultType a00071.html aaa892e46ea815e4111e776e2ca064303 Callback1 a00071.html a34091b70f384167901c9714be811ce98 () Callback1 a00071.html a2712579bbb75a7b7f37b9c3b703772a7 (const Functor &functor) ResultType operator() a00071.html ac5ae3231fffd5f6215930ad1fc507451 (Arg1 a1) const Tp::FunctorCaller2 a00236.html BaseFunctorCaller< FunctorCaller2< Functor, R, Arg1, Arg2 >, Functor > R ResultType a00236.html a6b4193c7f32542b22fec2b3e31b82541 R(* InvokeType a00236.html a30f618f401548e50e8764de2431beaa8 )(AbstractFunctorCaller *, Arg1, Arg2) FunctorCaller2 a00236.html adb6f9af7847df5b2420925a0bc521719 (const Functor &functor) static ResultType invoke a00236.html afaf7bac16db7aa2c015819039aa46d17 (AbstractFunctorCaller *call, Arg1 a1, Arg2 a2) Tp::Callback2 a00072.html R Arg1 Arg2 Tp::BaseCallback R(* FunctionType a00072.html a1e77ba169e6dca8734fc30ec57a4ad3a )(Arg1, Arg2) R ResultType a00072.html a4d293f1019a514e53260ce5ea0ffd36c Callback2 a00072.html a1c111169d477e2facb20324a4aafcf25 () Callback2 a00072.html a2d1d16388904d39fbecb6e2c37b6a809 (const Functor &functor) ResultType operator() a00072.html a56b014b42e7768bb896cfce334493291 (Arg1 a1, Arg2 a2) const Tp::FunctorCaller3 a00237.html BaseFunctorCaller< FunctorCaller3< Functor, R, Arg1, Arg2, Arg3 >, Functor > R ResultType a00237.html a40763b1e97de7f7f468909e157c24bae R(* InvokeType a00237.html afbaf2f2cf4808332b1b453cb34cf7e32 )(AbstractFunctorCaller *, Arg1, Arg2, Arg3) FunctorCaller3 a00237.html ae2ac18445dcdc8e07dd9fc6f57e76131 (const Functor &functor) static ResultType invoke a00237.html ac29cadb66115a12e621c9d3680da43cc (AbstractFunctorCaller *call, Arg1 a1, Arg2 a2, Arg3 a3) Tp::Callback3 a00073.html R Arg1 Arg2 Arg3 Tp::BaseCallback R(* FunctionType a00073.html a24035d13d34d70ee67420691323fc5a0 )(Arg1, Arg2, Arg3) R ResultType a00073.html a3f30e770a61a49affe78ead5ddd57acb Callback3 a00073.html a8fdd01c14f72a0866fb660a7eff5606b () Callback3 a00073.html a24955a1e427f7fb238e8628a1a684c3d (const Functor &functor) ResultType operator() a00073.html ad72e4a8b291532345bee86402f26627b (Arg1 a1, Arg2 a2, Arg3 a3) const Tp::FunctorCaller4 a00238.html BaseFunctorCaller< FunctorCaller4< Functor, R, Arg1, Arg2, Arg3, Arg4 >, Functor > R ResultType a00238.html ad4331657a2f073027e9cd4a4e2a1e6a0 R(* InvokeType a00238.html aae553295f3ed18c8911db8b25be3e7b6 )(AbstractFunctorCaller *, Arg1, Arg2, Arg3, Arg4) FunctorCaller4 a00238.html ac2a1e2ae23a3a5623edcf2af5fe21b91 (const Functor &functor) static ResultType invoke a00238.html a4a827f9a920b9bcee2ce19ec49cd7e41 (AbstractFunctorCaller *call, Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4) Tp::Callback4 a00074.html Tp::BaseCallback R(* FunctionType a00074.html af1473687cd81be1c4832244e3920e334 )(Arg1, Arg2, Arg3, Arg4) R ResultType a00074.html aa2bf2940b6529b9936d90420f9332d90 Callback4 a00074.html ad9d33e67e0405e6080ffe9a7752a33a2 () Callback4 a00074.html a4cfb048db968e63bc081967a36285e32 (const Functor &functor) ResultType operator() a00074.html a9ee4fb9c6736ebc09b7193c3f4cfae7d (Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4) const Tp::FunctorCaller5 a00239.html BaseFunctorCaller< FunctorCaller5< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5 >, Functor > R ResultType a00239.html a237a666ede6c5227ab05576ec1dcf4dd R(* InvokeType a00239.html a1e636b7585b1572383c86d7840fd710a )(AbstractFunctorCaller *, Arg1, Arg2, Arg3, Arg4, Arg5) FunctorCaller5 a00239.html a686eda1d44bd7d1118853bd9f4ca3e0e (const Functor &functor) static ResultType invoke a00239.html a7e81c232f78f0513c7f79bcfe422dffa (AbstractFunctorCaller *call, Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5) Tp::Callback5 a00075.html Tp::BaseCallback R(* FunctionType a00075.html a6007de73cafab1bd98bbf4cb70d07785 )(Arg1, Arg2, Arg3, Arg4, Arg5) R ResultType a00075.html a42e6e0987abaaf57ed7be31c0b5d0676 Callback5 a00075.html adac369018e947d416cb222db942dfe30 () Callback5 a00075.html af46ebdd4ab21ef27c9a15de887c4cc22 (const Functor &functor) ResultType operator() a00075.html a08c0bf6ca597a70de62c558ff884e781 (Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5) const Tp::FunctorCaller6 a00240.html BaseFunctorCaller< FunctorCaller6< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6 >, Functor > R ResultType a00240.html a40cf29fcdaaa769ca9f7961c9eddff39 R(* InvokeType a00240.html a51fd0f5bcac496abeaa150fc0488515a )(AbstractFunctorCaller *, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6) FunctorCaller6 a00240.html a42c365dc1441f28588cf5af626f9d6c2 (const Functor &functor) static ResultType invoke a00240.html a741c2d6adc592e2e52518712a389d170 (AbstractFunctorCaller *call, Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6) Tp::Callback6 a00076.html Tp::BaseCallback R(* FunctionType a00076.html a8f26f430a793770eb93125f1c0e54560 )(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6) R ResultType a00076.html ae9c1a588370fa4f57faa3b3dda7cbae6 Callback6 a00076.html a808ca3148e3f565790043c22d8e8c1a0 () Callback6 a00076.html a2344cc6db15323e676ba37f421fc8e6d (const Functor &functor) ResultType operator() a00076.html a97219be4db1487135dc289b69d992822 (Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6) const Tp::FunctorCaller7 a00241.html BaseFunctorCaller< FunctorCaller7< Functor, R, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7 >, Functor > R ResultType a00241.html a3bc8c546dcfa229de1165b36148debe3 R(* InvokeType a00241.html a6b6d2122f6a9ee82613db4425caeb4de )(AbstractFunctorCaller *, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7) FunctorCaller7 a00241.html a4988aed3dff9c8ecd29cefcba5c7d921 (const Functor &functor) static ResultType invoke a00241.html aad46983c636654dd272c2cdae29d7fd6 (AbstractFunctorCaller *call, Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6, Arg7 a7) Tp::Callback7 a00077.html Tp::BaseCallback R(* FunctionType a00077.html a2564e119fc4c30a60c199f4e28792a7a )(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7) R ResultType a00077.html ae544642279f02fd964fc1af981d99411 Callback7 a00077.html a9485b39133010f132970c19f787416e9 () Callback7 a00077.html a16452079fefd60bbc25f9b84690b851b (const Functor &functor) ResultType operator() a00077.html afc63092b5c09e0677587497adb063a43 (Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6, Arg7 a7) const Tp::CapabilitiesBase a00099.html CapabilitiesBase a00099.html a1d6825a3442f02f2022d03ce790e76c7 () CapabilitiesBase a00099.html a74316dfcc9251e830f2a817ac896492d (const CapabilitiesBase &other) virtual ~CapabilitiesBase a00099.html a9e8c72fc44412b62682248a419ed03ee () CapabilitiesBase & operator= a00099.html a78c7a70514d7fe182b6ad20fabdd46ca (const CapabilitiesBase &other) RequestableChannelClassSpecList allClassSpecs a00099.html ac9fed1452165cec3753579b692e52421 () const bool isSpecificToContact a00099.html a75e439476d7ac6f4c703eb321f304a3f () const bool textChats a00099.html ae37ff85bb8939c973ace2609c7a83d49 () const bool audioCalls a00099.html ad49ec413a341f0203ae851a08313f56f () const bool videoCalls a00099.html a19da89463f6d3390aeadba487ec78f47 () const bool videoCallsWithAudio a00099.html aad47dd0e50cf52e00e0c4a769e504eec () const bool upgradingCalls a00099.html aa9c866689cacccc12116997e01feefe9 () const bool streamedMediaCalls a00099.html afb13a503379b891d781e5d9ee6f1082a () const bool streamedMediaAudioCalls a00099.html a6e79eee6dff0bf53a8cebec9a131d7ca () const bool streamedMediaVideoCalls a00099.html a8a3a6ca9031dc1c86f78dfd8a3daf6f0 () const bool streamedMediaVideoCallsWithAudio a00099.html a9106da37a42c0ad9a310907fbe247e4c () const bool upgradingStreamedMediaCalls a00099.html aafc5599f071dede36c492a418186bac6 () const bool fileTransfers a00099.html a1793069a74fbf11dc9e2114469c2d53c () const CapabilitiesBase a00099.html ad8c30790e746235b9e4b459749eefc21 (bool specificToContact) CapabilitiesBase a00099.html abb02ee8949eb0045ff5394efaba3a94e (const RequestableChannelClassList &rccs, bool specificToContact) CapabilitiesBase a00099.html a679abce4b85f7d0b79991fe984b78a46 (const RequestableChannelClassSpecList &rccSpecs, bool specificToContact) virtual void updateRequestableChannelClasses a00099.html a05d7a3f7bc885ee8ce87e441d54671d3 (const RequestableChannelClassList &rccs) Tp::CaptchaAuthentication a00104.html Tp::Object ChallengeType a00104.html a735efcce598bac2ff9d606782f1e1418 NoChallenge a00104.html a735efcce598bac2ff9d606782f1e1418a7b4c6aad7b9a65efb7c86598750190e3 OCRChallenge a00104.html a735efcce598bac2ff9d606782f1e1418a6fe07985e62fa909a934747b71f0bd2f AudioRecognitionChallenge a00104.html a735efcce598bac2ff9d606782f1e1418ab63211e2649bc1e81980ad05e0cf6419 PictureQuestionChallenge a00104.html a735efcce598bac2ff9d606782f1e1418a7a11655a77f3b48f2a9e8e98d1470712 PictureRecognitionChallenge a00104.html a735efcce598bac2ff9d606782f1e1418a5ad3901677b98144bd769c4e6e35cb9f TextQuestionChallenge a00104.html a735efcce598bac2ff9d606782f1e1418a3083e5c1808b5656f0b8cfa9fc54c982 SpeechQuestionChallenge a00104.html a735efcce598bac2ff9d606782f1e1418ab4de748e694c6bd5cbaab3cf16c3e2bd SpeechRecognitionChallenge a00104.html a735efcce598bac2ff9d606782f1e1418a6a458a8fb6d8b360a5defe4af927d8ca VideoQuestionChallenge a00104.html a735efcce598bac2ff9d606782f1e1418a09ca9b62fc1c059304285d901cbbfcf3 VideoRecognitionChallenge a00104.html a735efcce598bac2ff9d606782f1e1418a207e2a506a84e396ffa25f4149f0fe90 UnknownChallenge a00104.html a735efcce598bac2ff9d606782f1e1418aa3357d893520da03b5d906c6bb59544d Tp::PendingOperation * cancel a00104.html a781ee784454c7c78ff9f0193d0165949 (Tp::CaptchaCancelReason reason, const QString &message=QString()) void statusChanged a00104.html a317b6ec9d9ef192b27620d85ed52191c (Tp::CaptchaStatus status) virtual ~CaptchaAuthentication a00104.html a1b898a10beffeff6d81fecbc49658e25 () ChannelPtr channel a00104.html ab9ed0a84d0e2082e091654bfe9be4517 () const bool canRetry a00104.html ac3c61ba4fad3c06cc7ad8c6b79ad5c85 () const Tp::CaptchaStatus status a00104.html af32b234c1bac73f3d09777cc865b1666 () const QString error a00104.html a00212326929e2a401a6420ea7a8ab836 () const Connection::ErrorDetails errorDetails a00104.html a3bc8666ba874757c4907ee6a13408200 () const Tp::PendingCaptchas * requestCaptchas a00104.html a1c17a9c530d7a193e8497df1e2fde937 (const QStringList &preferredMimeTypes=QStringList(), ChallengeTypes preferredTypes=~ChallengeTypes(NoChallenge)) Tp::PendingOperation * answer a00104.html a14bb2f644f24af3df939415e1122a7a3 (uint id, const QString &answer) Tp::PendingOperation * answer a00104.html aaad5ae808b5e95df77abc67d17a9af65 (const Tp::CaptchaAnswers &response) Tp::Captcha a00102.html Captcha a00102.html a5b3d04cf2e580aa782cc184352ac6616 () Captcha a00102.html aff2594586616897d7ca9db15359bd305 (const Captcha &other) ~Captcha a00102.html ae57884b7be37d4bded2bfbbfb2d28e22 () bool isValid a00102.html a1000fc7037a8ba71f3add41da5c0eb75 () const Captcha & operator= a00102.html ac0a66fbb1066ccb1db4d5cfc6b2f7dbe (const Captcha &rhs) QString mimeType a00102.html aa2eab673769b35904006f95c255d5232 () const QString label a00102.html a4ec9638a137c51e501a192db6d5162fc () const QByteArray data a00102.html ab0c719fe7bd00e99c61b3d77d260b1e8 () const CaptchaAuthentication::ChallengeType type a00102.html a5e76b73eb3712eee6ed9b110f9c5f30b () const uint id a00102.html aee99f3ceb66fca75e32cb51026df1a25 () const Tp::ChannelClassSpec a00109.html ChannelClassSpec a00109.html aad4b9eb6b3a6f5dd268a9984114f0426 () ChannelClassSpec a00109.html ab0019fe11785156d12ed280db7639426 (const ChannelClass &cc) ChannelClassSpec a00109.html a9771aefe01e0ca4ded16e5c5b8b970a1 (const QVariantMap &props) ChannelClassSpec a00109.html aac1f16d2f7c68ac8b29a1e5b05e3dc3e (const QString &channelType, HandleType targetHandleType, const QVariantMap &otherProperties=QVariantMap()) ChannelClassSpec a00109.html a4aea45c8ac9f9303050602e28aca4c22 (const QString &channelType, HandleType targetHandleType, bool requested, const QVariantMap &otherProperties=QVariantMap()) ChannelClassSpec a00109.html ac66234c6ffa44b83a6de38bef86a33a8 (const ChannelClassSpec &other, const QVariantMap &additionalProperties=QVariantMap()) ~ChannelClassSpec a00109.html abe072071c9b71c563c2c19df1a9783c9 () bool isValid a00109.html a97dc9eaebffde6c6aec4dc04ee6910fb () const ChannelClassSpec & operator= a00109.html aeb6eb9b59c7065c87e98e1acf0d1191e (const ChannelClassSpec &other) bool operator== a00109.html ac89f8c3b4474c6a68d69f36b58bf30a4 (const ChannelClassSpec &other) const bool isSubsetOf a00109.html ae5856156d58870d3ac0481a9940e22c6 (const ChannelClassSpec &other) const bool matches a00109.html abcea33782b6107c3dd79fa20aec435cf (const QVariantMap &immutableProperties) const QString channelType a00109.html a47a6f287e483edc865217ac125044cf2 () const void setChannelType a00109.html acfd0e3bde9520e15156482a3edd5e74f (const QString &type) HandleType targetHandleType a00109.html a609b08909a130f806e92b0991ba2e072 () const void setTargetHandleType a00109.html ab9501d602cc8e3bc40bacff721026307 (HandleType type) bool hasRequested a00109.html a67d1b975a485d7677761eb9411b74a37 () const bool isRequested a00109.html a9dfad22aa03440c6327b9958fd4c42a9 () const void setRequested a00109.html ac0622a89fcfa8c73e2b667e25cf58d32 (bool requested) void unsetRequested a00109.html a7758a95585755b32a1ba6fd4a2820b26 () bool hasCallInitialAudioFlag a00109.html ad45baa89ea6d471dc155b7f396759997 () const void setCallInitialAudioFlag a00109.html a46459b5ae363c5009d5621f3e3587d27 () void unsetCallInitialAudioFlag a00109.html ac9117ec12fd5679be5465978445ec9f2 () bool hasCallInitialVideoFlag a00109.html a5f545d01a9e37d39030c73ecd01fe9c8 () const void setCallInitialVideoFlag a00109.html a9dee2a6e5f6b45281d8930ab4a4c2934 () void unsetCallInitialVideoFlag a00109.html ad8c51eab9738488bee5338579a9fc7bc () bool hasStreamedMediaInitialAudioFlag a00109.html a85ce2ec1d6e099b191896416a0044188 () const void setStreamedMediaInitialAudioFlag a00109.html a4444620e7eb2e5e9ecb3e6f9415679ab () void unsetStreamedMediaInitialAudioFlag a00109.html a50dc02ec24a4e2564572557cd088ae15 () bool hasStreamedMediaInitialVideoFlag a00109.html a76d811533003ae55554f1a71aac33cf7 () const void setStreamedMediaInitialVideoFlag a00109.html a67d8dc5ff1536f1423d97bdd90a59088 () void unsetStreamedMediaInitialVideoFlag a00109.html a87d17c1d1f83cdefdde4023a6fa8307a () bool hasProperty a00109.html a86f44f7b10ab680c1072e85f663e70af (const QString &qualifiedName) const QVariant property a00109.html af282864ac2a392f44279e8ae88294eb4 (const QString &qualifiedName) const void setProperty a00109.html aeef2a85d66a157be12af95e7137cd85d (const QString &qualifiedName, const QVariant &value) void unsetProperty a00109.html aa55aa3f6407bdfb8cbd8fc23ed34b736 (const QString &qualifiedName) QVariantMap allProperties a00109.html adf4c99badfc9d2108ae57d898c44afc2 () const ChannelClass bareClass a00109.html a0613c81aad3f7203ca04a035b1eb7f45 () const static ChannelClassSpec textChat a00109.html a8396208afbe06b3b565e301321243adb (const QVariantMap &additionalProperties=QVariantMap()) static ChannelClassSpec textChatroom a00109.html ae294759b58d74fe2271810c3b01511de (const QVariantMap &additionalProperties=QVariantMap()) static ChannelClassSpec unnamedTextChat a00109.html a2a9de7599298f8013ea804fc87eb48e2 (const QVariantMap &additionalProperties=QVariantMap()) static ChannelClassSpec mediaCall a00109.html adc8939c5706e37ace286584fd8f76fac (const QVariantMap &additionalProperties=QVariantMap()) static ChannelClassSpec audioCall a00109.html a2d431355008b4446878f612a636ea49a (const QVariantMap &additionalProperties=QVariantMap()) static ChannelClassSpec videoCall a00109.html acc389563474b335b430e97853ffe46e5 (const QVariantMap &additionalProperties=QVariantMap()) static ChannelClassSpec videoCallWithAudio a00109.html a9a3b6a890c5cfac494f757ad9cc45a80 (const QVariantMap &additionalProperties=QVariantMap()) static ChannelClassSpec streamedMediaCall a00109.html a1bfb95cfa86530d30ceeed734e25c12d (const QVariantMap &additionalProperties=QVariantMap()) static ChannelClassSpec streamedMediaAudioCall a00109.html a978c5a4e9565e3ba360a2ba8447212ba (const QVariantMap &additionalProperties=QVariantMap()) static ChannelClassSpec streamedMediaVideoCall a00109.html afa00e2a16df25ac6a193771d6c2f1f9f (const QVariantMap &additionalProperties=QVariantMap()) static ChannelClassSpec streamedMediaVideoCallWithAudio a00109.html ab5dbc7a0c9abc76cf7718ff987d63728 (const QVariantMap &additionalProperties=QVariantMap()) static ChannelClassSpec unnamedStreamedMediaCall a00109.html a7bbd1056894665fddcef16904d5dfead (const QVariantMap &additionalProperties=QVariantMap()) static ChannelClassSpec unnamedStreamedMediaAudioCall a00109.html a07abeff6a8dcc128bcff7b6a37fbeb2e (const QVariantMap &additionalProperties=QVariantMap()) static ChannelClassSpec unnamedStreamedMediaVideoCall a00109.html ab9ad979760108b0bc19b344a2969efcd (const QVariantMap &additionalProperties=QVariantMap()) static ChannelClassSpec unnamedStreamedMediaVideoCallWithAudio a00109.html a551faee4e45353abeff69d70d2f48db9 (const QVariantMap &additionalProperties=QVariantMap()) static ChannelClassSpec serverAuthentication a00109.html a50afdce74085d1dc88be8e59b1ae38fc (const QVariantMap &additionalProperties=QVariantMap()) static ChannelClassSpec roomList a00109.html a0e3d8ca909b665954cac0961ff6cdabb (const QVariantMap &additionalProperties=QVariantMap()) static ChannelClassSpec outgoingFileTransfer a00109.html a8fc2109dfa0afc1b6833a12194709c4f (const QVariantMap &additionalProperties=QVariantMap()) static ChannelClassSpec incomingFileTransfer a00109.html acd0d807341e5c923469276c0028ac2c7 (const QVariantMap &additionalProperties=QVariantMap()) static ChannelClassSpec outgoingStreamTube a00109.html a8ec0b6df9556b7de4a5f2cf32e7fc1d0 (const QString &service=QString(), const QVariantMap &additionalProperties=QVariantMap()) static ChannelClassSpec incomingStreamTube a00109.html a32e6f753bb93cd162824d714728ce72f (const QString &service=QString(), const QVariantMap &additionalProperties=QVariantMap()) static ChannelClassSpec outgoingRoomStreamTube a00109.html af176da23698c3bd53f4f59d36325e927 (const QString &service=QString(), const QVariantMap &additionalProperties=QVariantMap()) static ChannelClassSpec incomingRoomStreamTube a00109.html a812704dde4189e42bcfb15f194cabe61 (const QString &service=QString(), const QVariantMap &additionalProperties=QVariantMap()) static ChannelClassSpec outgoingDBusTube a00109.html a542274b84ae5db1e8065cb67e4178877 (const QString &serviceName=QString(), const QVariantMap &additionalProperties=QVariantMap()) static ChannelClassSpec incomingDBusTube a00109.html a89ad95b6eb5f4d3f69cba926660df384 (const QString &serviceName=QString(), const QVariantMap &additionalProperties=QVariantMap()) static ChannelClassSpec outgoingRoomDBusTube a00109.html acba659ac38f75b67d5eed3710f411799 (const QString &serviceName=QString(), const QVariantMap &additionalProperties=QVariantMap()) static ChannelClassSpec incomingRoomDBusTube a00109.html a57afe9287632cde69e6b0ed46c22c5ae (const QString &serviceName=QString(), const QVariantMap &additionalProperties=QVariantMap()) static ChannelClassSpec contactSearch a00109.html a18576a0e838e65ce7d6add906577ec33 (const QVariantMap &additionalProperties=QVariantMap()) Tp::ChannelClassSpecList a00110.html ChannelClassSpecList a00110.html a6c75fce26ab4051e2a7845e823c2136b () ChannelClassSpecList a00110.html a8bd425703cb70c43a488e5566cf96dd3 (const ChannelClassSpec &spec) ChannelClassSpecList a00110.html adac9b1f7068650fdbf223edfaf2ae9aa (const QList< ChannelClassSpec > &other) ChannelClassSpecList a00110.html a91a3354f419a1685ad10111e93ca6ad5 (const ChannelClassList &classes) ChannelClassList bareClasses a00110.html a55bd979ade70a7600818c9ab4882f783 () const Tp::ChannelDispatchOperation a00113.html Tp::StatefulDBusProxy OptionalInterfaceFactory< ChannelDispatchOperation > void channelLost a00113.html adbec0d5c90cd39e41aea005a57d4face (const Tp::ChannelPtr &channel, const QString &errorName, const QString &errorMessage) virtual ~ChannelDispatchOperation a00113.html ad65a5030d2e07cda4e94f56335540897 () ConnectionPtr connection a00113.html a97a31d8837c887c5c3cfb3b384b9daf8 () const AccountPtr account a00113.html a522666f095aecf88e940caa3c5c760aa () const QList< ChannelPtr > channels a00113.html a6dfcf1643ae5add061cfc85cbfcc75f9 () const QStringList possibleHandlers a00113.html a7d2fddbd2bdb7d340777d881d8c21042 () const PendingOperation * handleWith a00113.html a6110ece4fc4e28a5a8fc071fb1871f9d (const QString &handler) PendingOperation * claim a00113.html abe3cc768fce132036939f63384fe7c82 () PendingOperation * claim a00113.html af0bd9c46a0e88aa49c72984a43300b33 (const AbstractClientHandlerPtr &handler) static ChannelDispatchOperationPtr create a00113.html af2641c395dc9df9431c21d7175e71bbe (const QDBusConnection &bus, const QString &objectPath, const QVariantMap &immutableProperties, const QList< ChannelPtr > &initialChannels, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory) static const Feature FeatureCore a00113.html a0d296de60678b7e1b60b679028f35e7f ChannelDispatchOperation a00113.html acecbbde978de90f3683ca5396807896b (const QDBusConnection &bus, const QString &objectPath, const QVariantMap &immutableProperties, const QList< ChannelPtr > &initialChannels, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory) Client::ChannelDispatchOperationInterface * baseInterface a00113.html ab64648baf1e2797cdb63cb7884f95ae4 () const Tp::ChannelFactory a00115.html Tp::DBusProxyFactory virtual ~ChannelFactory a00115.html af96b3dff0320c8eefb431d6b15816dd9 () Features featuresForTextChats a00115.html afd986643fc95f5034104f5c7b9f24e43 (const QVariantMap &additionalProps=QVariantMap()) const void addFeaturesForTextChats a00115.html a9f6aa9d64f21c5f9786ca99b2c50ead7 (const Features &features, const QVariantMap &additionalProps=QVariantMap()) ConstructorConstPtr constructorForTextChats a00115.html a8db3bb93ee16ddd56179bd8e46a18f4e (const QVariantMap &additionalProps=QVariantMap()) const void setSubclassForTextChats a00115.html aa1c22d5d1edcf0788353bd09c254a07e (const QVariantMap &additionalProps=QVariantMap()) void setConstructorForTextChats a00115.html aec4b0245e029309ce071d6e0c92d63f6 (const ConstructorConstPtr &ctor, const QVariantMap &additionalProps=QVariantMap()) Features featuresForTextChatrooms a00115.html a78b6423d7f6813337a7eba7b1f0a09a0 (const QVariantMap &additionalProps=QVariantMap()) const void addFeaturesForTextChatrooms a00115.html ab7b1f660613756d269d5e445bf77d14a (const Features &features, const QVariantMap &additionalProps=QVariantMap()) ConstructorConstPtr constructorForTextChatrooms a00115.html a9c068cfbac44290ac462bb7ece1c339d (const QVariantMap &additionalProps=QVariantMap()) const void setSubclassForTextChatrooms a00115.html ad9db6b948abaeffb2a327d55b0a0cb46 (const QVariantMap &additionalProps=QVariantMap()) void setConstructorForTextChatrooms a00115.html a7da9a444eb83b848376ee108681265b4 (const ConstructorConstPtr &ctor, const QVariantMap &additionalProps=QVariantMap()) Features featuresForCalls a00115.html a0b46eff100cf1808bcb47db53830b134 (const QVariantMap &additionalProps=QVariantMap()) const void addFeaturesForCalls a00115.html a9f344ca7cde70f44dee0ff3c4575d01a (const Features &features, const QVariantMap &additionalProps=QVariantMap()) void setSubclassForCalls a00115.html a2cf129a603d71aabada4e9325407e23f (const QVariantMap &additionalProps=QVariantMap()) void setConstructorForCalls a00115.html aefd5cd955e67fab3686ffee950000766 (const ConstructorConstPtr &ctor, const QVariantMap &additionalProps=QVariantMap()) Features featuresForStreamedMediaCalls a00115.html ab50af50f3fe9898cd5e6b6bdd9edb243 (const QVariantMap &additionalProps=QVariantMap()) const void addFeaturesForStreamedMediaCalls a00115.html a025c18da2ebf1f18d18277b986d7c5c4 (const Features &features, const QVariantMap &additionalProps=QVariantMap()) ConstructorConstPtr constructorForStreamedMediaCalls a00115.html a15ae766f8d4d3fab616ee94fbc82da62 (const QVariantMap &additionalProps=QVariantMap()) const void setSubclassForStreamedMediaCalls a00115.html a7de56eda41e697a4a2a191b5bc7b05e2 (const QVariantMap &additionalProps=QVariantMap()) void setConstructorForStreamedMediaCalls a00115.html a83854338778f47ecf0f87c2ab93aa3ec (const ConstructorConstPtr &ctor, const QVariantMap &additionalProps=QVariantMap()) Features featuresForRoomLists a00115.html ad9d04ffb15ce72511ec748b0fae445cf (const QVariantMap &additionalProps=QVariantMap()) const void addFeaturesForRoomLists a00115.html aaa269dd2e537a736e5c5b635441f3f28 (const Features &features, const QVariantMap &additionalProps=QVariantMap()) ConstructorConstPtr constructorForRoomLists a00115.html a5bedb174e10d92cc570a2c2a4013f27f (const QVariantMap &additionalProps=QVariantMap()) const void setSubclassForRoomLists a00115.html a7b3905e311abb60b4f6c55708cf59c14 (const QVariantMap &additionalProps=QVariantMap()) void setConstructorForRoomLists a00115.html a510437aa6fe7aa4383f17e418b2cd9b4 (const ConstructorConstPtr &ctor, const QVariantMap &additionalProps=QVariantMap()) Features featuresForOutgoingFileTransfers a00115.html a5a6f69901dc424c1ccb9eb70f404687d (const QVariantMap &additionalProps=QVariantMap()) const void addFeaturesForOutgoingFileTransfers a00115.html a955a4243faf34edfb5e46b5e1d200a16 (const Features &features, const QVariantMap &additionalProps=QVariantMap()) ConstructorConstPtr constructorForOutgoingFileTransfers a00115.html a669607881fccadde49fb2933d1c1c04e (const QVariantMap &additionalProps=QVariantMap()) const void setSubclassForOutgoingFileTransfers a00115.html a93187d3d8097aa63be45e14211ed077f (const QVariantMap &additionalProps=QVariantMap()) void setConstructorForOutgoingFileTransfers a00115.html ac61edcd321e81b46e2da1eaa9d1a0631 (const ConstructorConstPtr &ctor, const QVariantMap &additionalProps=QVariantMap()) Features featuresForIncomingFileTransfers a00115.html af069fad815d0a0f607fb09a35ada345a (const QVariantMap &additionalProps=QVariantMap()) const void addFeaturesForIncomingFileTransfers a00115.html afe626884fbb4f731160ea6489549ec1e (const Features &features, const QVariantMap &additionalProps=QVariantMap()) ConstructorConstPtr constructorForIncomingFileTransfers a00115.html a469f3d51228d878f246dead3e9ec5eda (const QVariantMap &additionalProps=QVariantMap()) const void setSubclassForIncomingFileTransfers a00115.html a5598e2a82c446780d1c1fe44c2b10d4e (const QVariantMap &additionalProps=QVariantMap()) void setConstructorForIncomingFileTransfers a00115.html a119f85ccdb3339666381f8965f954dc5 (const ConstructorConstPtr &ctor, const QVariantMap &additionalProps=QVariantMap()) Features featuresForOutgoingStreamTubes a00115.html a2197a651412571f4932450223d6a0a53 (const QVariantMap &additionalProps=QVariantMap()) const void addFeaturesForOutgoingStreamTubes a00115.html af67d2137868732ae2e255506b667e557 (const Features &features, const QVariantMap &additionalProps=QVariantMap()) ConstructorConstPtr constructorForOutgoingStreamTubes a00115.html a497873772cb424b20424a4b79bb0a3ac (const QVariantMap &additionalProps=QVariantMap()) const void setSubclassForOutgoingStreamTubes a00115.html a052c5dfa9740bd9232d7624964e0c830 (const QVariantMap &additionalProps=QVariantMap()) void setConstructorForOutgoingStreamTubes a00115.html a7a8c664a88d541a68bc40fc0ecf1ec8e (const ConstructorConstPtr &ctor, const QVariantMap &additionalProps=QVariantMap()) Features featuresForIncomingStreamTubes a00115.html ad690f3b74db4e5635bea388aee2a355f (const QVariantMap &additionalProps=QVariantMap()) const void addFeaturesForIncomingStreamTubes a00115.html af6715877cdf727ee70b225370751ed7c (const Features &features, const QVariantMap &additionalProps=QVariantMap()) ConstructorConstPtr constructorForIncomingStreamTubes a00115.html a518f41f815ed4c8eeac4480ba78c394d (const QVariantMap &additionalProps=QVariantMap()) const void setSubclassForIncomingStreamTubes a00115.html ad61e36911fbc08d4fafd5becece7b721 (const QVariantMap &additionalProps=QVariantMap()) void setConstructorForIncomingStreamTubes a00115.html a769953d95ba9b5131c16d72b6d61e033 (const ConstructorConstPtr &ctor, const QVariantMap &additionalProps=QVariantMap()) Features featuresForOutgoingRoomStreamTubes a00115.html ab346a8a3e366bd980379a800015f3572 (const QVariantMap &additionalProps=QVariantMap()) const void addFeaturesForOutgoingRoomStreamTubes a00115.html ab6ed457d1d10a787335f8583b5df9528 (const Features &features, const QVariantMap &additionalProps=QVariantMap()) ConstructorConstPtr constructorForOutgoingRoomStreamTubes a00115.html a4e031f698e544db0e8a2f04e45b0970c (const QVariantMap &additionalProps=QVariantMap()) const void setSubclassForOutgoingRoomStreamTubes a00115.html aa66c7c88415c48f2bb71b70c8e2ebe57 (const QVariantMap &additionalProps=QVariantMap()) void setConstructorForOutgoingRoomStreamTubes a00115.html aa430cfe85a5c9e4de44e3d095f7fcaa5 (const ConstructorConstPtr &ctor, const QVariantMap &additionalProps=QVariantMap()) Features featuresForIncomingRoomStreamTubes a00115.html af1d2c7860280cf9aea90012cf4add3f2 (const QVariantMap &additionalProps=QVariantMap()) const void addFeaturesForIncomingRoomStreamTubes a00115.html afeab30624c79cc455f41e051404411f2 (const Features &features, const QVariantMap &additionalProps=QVariantMap()) ConstructorConstPtr constructorForIncomingRoomStreamTubes a00115.html a71b7736d3184ac8330413a69234712ad (const QVariantMap &additionalProps=QVariantMap()) const void setSubclassForIncomingRoomStreamTubes a00115.html ab36675668c0b0a1cdc84f19bb41ae89a (const QVariantMap &additionalProps=QVariantMap()) void setConstructorForIncomingRoomStreamTubes a00115.html a0c19633cc9ff152cf0ba14c78b905506 (const ConstructorConstPtr &ctor, const QVariantMap &additionalProps=QVariantMap()) Features featuresForOutgoingDBusTubes a00115.html acabb66c8439c0ac2e337c1887df57c1b (const QVariantMap &additionalProps=QVariantMap()) const void addFeaturesForOutgoingDBusTubes a00115.html aa08f9483bca95d6e72356bf54a135822 (const Features &features, const QVariantMap &additionalProps=QVariantMap()) ConstructorConstPtr constructorForOutgoingDBusTubes a00115.html a23cb6130bb6b4b6b9b52140269b79130 (const QVariantMap &additionalProps=QVariantMap()) const void setSubclassForOutgoingDBusTubes a00115.html a84e80d707d01e0046b71836878e23a08 (const QVariantMap &additionalProps=QVariantMap()) void setConstructorForOutgoingDBusTubes a00115.html a13e3e8f96a323bcc573363a165f50ba1 (const ConstructorConstPtr &ctor, const QVariantMap &additionalProps=QVariantMap()) Features featuresForIncomingDBusTubes a00115.html a3918e49b689cb840d12e4deecde4c7d0 (const QVariantMap &additionalProps=QVariantMap()) const void addFeaturesForIncomingDBusTubes a00115.html a94e9817a0343ddf604ffde16be44af80 (const Features &features, const QVariantMap &additionalProps=QVariantMap()) ConstructorConstPtr constructorForIncomingDBusTubes a00115.html a0d8fc201abf70b86d9bfc95c178f7a2d (const QVariantMap &additionalProps=QVariantMap()) const void setSubclassForIncomingDBusTubes a00115.html a81300eb3578c419b30558e9f21816028 (const QVariantMap &additionalProps=QVariantMap()) void setConstructorForIncomingDBusTubes a00115.html a529cad69a46d0bbe83ab9fae61941f4b (const ConstructorConstPtr &ctor, const QVariantMap &additionalProps=QVariantMap()) Features featuresForOutgoingRoomDBusTubes a00115.html ac24025b8a1e3b072cef038787ba9e64f (const QVariantMap &additionalProps=QVariantMap()) const void addFeaturesForOutgoingRoomDBusTubes a00115.html ae7afe6513a706969bdbf104cd26cccd3 (const Features &features, const QVariantMap &additionalProps=QVariantMap()) ConstructorConstPtr constructorForOutgoingRoomDBusTubes a00115.html a29b68b27c1a1674482c4967904345668 (const QVariantMap &additionalProps=QVariantMap()) const void setSubclassForOutgoingRoomDBusTubes a00115.html acb3e9d43f7654756debc1f6bdf4e0bca (const QVariantMap &additionalProps=QVariantMap()) void setConstructorForOutgoingRoomDBusTubes a00115.html a10e21fa0b80a590fb800906b8b91885a (const ConstructorConstPtr &ctor, const QVariantMap &additionalProps=QVariantMap()) Features featuresForIncomingRoomDBusTubes a00115.html a21cb39f35440724c930339eff42c0c8b (const QVariantMap &additionalProps=QVariantMap()) const void addFeaturesForIncomingRoomDBusTubes a00115.html a7e37c612daff3815a233be7846567630 (const Features &features, const QVariantMap &additionalProps=QVariantMap()) ConstructorConstPtr constructorForIncomingRoomDBusTubes a00115.html a0e9423fcd28ca10d4c47533750cbf219 (const QVariantMap &additionalProps=QVariantMap()) const void setSubclassForIncomingRoomDBusTubes a00115.html a0ef97eb6e7df9abb34a1da820e961f10 (const QVariantMap &additionalProps=QVariantMap()) void setConstructorForIncomingRoomDBusTubes a00115.html acc4ff9c075de6e3285f4f2c7a8db659b (const ConstructorConstPtr &ctor, const QVariantMap &additionalProps=QVariantMap()) Features featuresForContactSearches a00115.html adba95bc56cdb6dc05d98a8ded2e252e1 (const QVariantMap &additionalProps=QVariantMap()) const void addFeaturesForContactSearches a00115.html ad24821fa63fda6a9a07b77daff7a8032 (const Features &features, const QVariantMap &additionalProps=QVariantMap()) ConstructorConstPtr constructorForContactSearches a00115.html ae8548eae52a0bb1556a868bfd387aaeb (const QVariantMap &additionalProps=QVariantMap()) const void setSubclassForContactSearches a00115.html a7db4e54e4807d873d9c82cf1eb56dd3d (const QVariantMap &additionalProps=QVariantMap()) void setConstructorForContactSearches a00115.html ab84b44e85ca686248840bba9a37ec328 (const ConstructorConstPtr &ctor, const QVariantMap &additionalProps=QVariantMap()) Features featuresForServerAuthentication a00115.html a5337f6e8b224920a5afe8bcfde31f724 (const QVariantMap &additionalProps=QVariantMap()) const void addFeaturesForServerAuthentication a00115.html aeb8f1b0f6ff05e43d214ed1b288622e7 (const Features &features, const QVariantMap &additionalProps=QVariantMap()) ConstructorConstPtr constructorForServerAuthentication a00115.html ad2dd8397524d698530ec94c16d91af05 (const QVariantMap &additionalProps=QVariantMap()) const void setSubclassForServerAuthentication a00115.html a0629638577bfe6c9deea5511c8d6c020 (const QVariantMap &additionalProps=QVariantMap()) void setConstructorForServerAuthentication a00115.html ad8b89da204ccab1de8bb3bdde80d9b18 (const ConstructorConstPtr &ctor, const QVariantMap &additionalProps=QVariantMap()) Features commonFeatures a00115.html ae425ff10faabfa99d16f7c45a7942c16 () const void addCommonFeatures a00115.html aa2cda93a389b1174e6a8cc914973bb7c (const Features &features) ConstructorConstPtr fallbackConstructor a00115.html aca236c9f8217882b969df66c71c3b4e9 () const void setFallbackSubclass a00115.html ae0b44cb14dff09176f9809a455c7546a () void setFallbackConstructor a00115.html a071e3e4a64b9b20424e051629eb69902 (const ConstructorConstPtr &ctor) Features featuresFor a00115.html aa972b93fec81a9ccc569764fff6e4626 (const ChannelClassSpec &channelClass) const void addFeaturesFor a00115.html ad5e816407353a34ce9b171ff1f964b34 (const ChannelClassSpec &channelClass, const Features &features) void setSubclassFor a00115.html a1c50ffaad80849ca3e281d771090c110 (const ChannelClassSpec &channelClass) ConstructorConstPtr constructorFor a00115.html aed6e02ede635d08cdbc13858b8d27253 (const ChannelClassSpec &channelClass) const void setConstructorFor a00115.html a522dbf512bbd855aae71b4d4817ff8d3 (const ChannelClassSpec &channelClass, const ConstructorConstPtr &ctor) PendingReady * proxy a00115.html a523b44eb42d509dde6dc5407ef2e002a (const ConnectionPtr &connection, const QString &channelPath, const QVariantMap &immutableProperties) const static ChannelFactoryPtr create a00115.html a6e472cf0591d4e8a731839a45ce50ad0 (const QDBusConnection &bus) ChannelFactory a00115.html a4a07442bf86a0fdcba4d9240f9a25834 (const QDBusConnection &bus) virtual QString finalBusNameFrom a00115.html acfe8fe6a30a5d894e6050c40d73cb1b8 (const QString &uniqueOrWellKnown) const virtual Features featuresFor a00115.html aa1093d1b1b9a2d79e81232ce8e4ec860 (const DBusProxyPtr &proxy) const Tp::ChannelRequest a00137.html Tp::StatefulDBusProxy OptionalInterfaceFactory< ChannelRequest > void failed a00137.html a7d9ed07c568582bfa6e48bd38faee819 (const QString &errorName, const QString &errorMessage) void succeeded a00137.html a05262d57d3b1134e614256d7dad8d8eb (const Tp::ChannelPtr &channel) virtual ~ChannelRequest a00137.html afa9d83521eaaad8b807a83da53a7c6a9 () AccountPtr account a00137.html adcb35b58ee4ba57919fbe4a43161fcc8 () const QDateTime userActionTime a00137.html adc6a7ab407026e16e8daf377b3b78cd4 () const QString preferredHandler a00137.html a653bb5c7c552db71638d970332cc8438 () const QualifiedPropertyValueMapList requests a00137.html ab14c46c9fa671a21e5a3e453b633ac0f () const ChannelRequestHints hints a00137.html abfe44f6fffec61bbf6f9a3ab26c10eef () const QVariantMap immutableProperties a00137.html a75ca6ed4cf10fea1dfc5687daab8735f () const PendingOperation * cancel a00137.html ab65f0a6d13266ab32cbb38417c3875ae () ChannelPtr channel a00137.html a5a0c3eac26eb434b5cf044f6c07e72d8 () const static ChannelRequestPtr create a00137.html a4f011f4ba673442d64577d3250029c9c (const QDBusConnection &bus, const QString &objectPath, const QVariantMap &immutableProperties, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory) static ChannelRequestPtr create a00137.html a2b72e2476e47e4d39c084da2453ccfb8 (const AccountPtr &account, const QString &objectPath, const QVariantMap &immutableProperties) static const Feature FeatureCore a00137.html a2aa5704551dde6d21af951b449067a90 ChannelRequest a00137.html a1584babd6c6ed1acf7224c58b81c5256 (const QDBusConnection &bus, const QString &objectPath, const QVariantMap &immutableProperties, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory) ChannelRequest a00137.html a785bffffc67a9191fc68ae8eb2d89e37 (const AccountPtr &account, const QString &objectPath, const QVariantMap &immutableProperties) Client::ChannelRequestInterface * baseInterface a00137.html a14dca9031552aaed29b2b50e95ad969e () const Tp::ChannelRequestHints a00138.html ChannelRequestHints a00138.html ae79c1212d4ac734ad0580369565515ff () ChannelRequestHints a00138.html a60d0f55c34e16a44bc00c58c0fade87f (const QVariantMap &hints) ChannelRequestHints a00138.html a49b1c290d530fe002a0996333a898de6 (const ChannelRequestHints &other) ~ChannelRequestHints a00138.html a392111301e8e498d4c0f60187b39f9d1 () ChannelRequestHints & operator= a00138.html acb20d3499e0e09be9764f3e2cca17aa1 (const ChannelRequestHints &other) bool isValid a00138.html a75f8cb73be6352a40209917936495958 () const bool hasHint a00138.html a74e0fbca7252a346f55ebcf8df22297f (const QString &reversedDomain, const QString &localName) const QVariant hint a00138.html aeaec3c8326fb57d318772097cded1ec9 (const QString &reversedDomain, const QString &localName) const void setHint a00138.html ac3f467a85e5dcac0d171aad6606c8638 (const QString &reversedDomain, const QString &localName, const QVariant &value) QVariantMap allHints a00138.html acdbe6dddd6955a7ba3b2f0e091b62bba () const Tp::Channel a00106.html Tp::StatefulDBusProxy OptionalInterfaceFactory< Channel > Tp::Channel::GroupMemberChangeDetails void groupFlagsChanged a00106.html ad89d6ce74c58ebf61a4926a1de357abe (Tp::ChannelGroupFlags flags, Tp::ChannelGroupFlags added, Tp::ChannelGroupFlags removed) void groupCanAddContactsChanged a00106.html ab9efd229d37f6e6004ac5ff3f582d6ee (bool canAddContacts) void groupCanRemoveContactsChanged a00106.html a67c5eef9ac7d326959dd42d5a7df7faa (bool canRemoveContacts) void groupCanRescindContactsChanged a00106.html a41dacc664ff47e165c4771529dfcf133 (bool canRescindContacts) void groupMembersChanged a00106.html a9a19634088f78c3fb81fd166df72739e (const Tp::Contacts &groupMembersAdded, const Tp::Contacts &groupLocalPendingMembersAdded, const Tp::Contacts &groupRemotePendingMembersAdded, const Tp::Contacts &groupMembersRemoved, const Tp::Channel::GroupMemberChangeDetails &details) void groupHandleOwnersChanged a00106.html a64255c824c71e3bf3db54ab1bcfd7fe6 (const Tp::HandleOwnerMap &owners, const Tp::UIntList &added, const Tp::UIntList &removed) void groupSelfContactChanged a00106.html af49ad76277e06b7ebf82e1577275a483 () void conferenceChannelMerged a00106.html ae9863051758cc3f27b5fdcd3054e99e0 (const Tp::ChannelPtr &channel) void conferenceChannelRemoved a00106.html a126dc12155e5cb8f27177d563da5ff6a (const Tp::ChannelPtr &channel, const Tp::Channel::GroupMemberChangeDetails &details) virtual ~Channel a00106.html a985547027af2a72e3feb25d2ccf087a8 () ConnectionPtr connection a00106.html aa30315c7f2480e346ee8943df982c212 () const QVariantMap immutableProperties a00106.html a0446ca8a0fe4251d5c0e9065304b0d94 () const QString channelType a00106.html a9bbf9b2886d305548677d8821a34bd50 () const HandleType targetHandleType a00106.html a42c98d6ff979b5fdf9778ddc777373fe () const uint targetHandle a00106.html a799b68a6d9a24aa4433e95baeb54cc12 () const QString targetId a00106.html a7a07f98077f3f9f133b7f136c84c3670 () const ContactPtr targetContact a00106.html a7769265d5da24e22e1b6a23cdb99c9ae () const bool isRequested a00106.html a6d96df8e1de97a087f7ae0f5333f3eab () const ContactPtr initiatorContact a00106.html ae283517935f22e7a21853de03c889ff7 () const PendingOperation * requestClose a00106.html acb1a800352ab8cec80aa2035fe803e15 () PendingOperation * requestLeave a00106.html a6897e0b59c5f1284707c904fe95e6be2 (const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone) bool isConference a00106.html a2a361e19f4f97245d8990ade3d71e0b9 () const Contacts conferenceInitialInviteeContacts a00106.html a9eb6776df574ad5eac3ed217fbcbf3a2 () const QList< ChannelPtr > conferenceChannels a00106.html a1534e58ff1068bf6ca029a03ba7dd134 () const QList< ChannelPtr > conferenceInitialChannels a00106.html a3c01542f154d8dd3215808b0f581cccb () const QHash< uint, ChannelPtr > conferenceOriginalChannels a00106.html ab563fa0d9e7202c9a0661b45e2bcc54b () const bool supportsConferenceMerging a00106.html a060f03903441f532ab3e10d2782b8ec4 () const PendingOperation * conferenceMergeChannel a00106.html a5208dbc6f39e04b66b364106ce07599c (const ChannelPtr &channel) bool supportsConferenceSplitting a00106.html a87091c215b2093fd699e1556f365e1cb () const PendingOperation * conferenceSplitChannel a00106.html a5ea6a3a44618b95a6e71ce72e752792b () static ChannelPtr create a00106.html ab9e80e6c7d574f9f853cf6c47801da72 (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) static const Feature FeatureCore a00106.html a83c71f5ebefd137981583d8a1ba6773d static const Feature FeatureConferenceInitialInviteeContacts a00106.html a05706198daf9f5c92bfca2b29a0744c9 Channel a00106.html a52c89004f625576968767b4ede6e2a35 (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature) Client::ChannelInterface * baseInterface a00106.html a5d5a59388659f5cdf970055c6b4a4053 () const ChannelGroupFlags groupFlags a00106.html abbee48987796764e3e3772ce995c010e () const bool groupCanAddContacts a00106.html a6cb2dbd3acece5a370c7ab99b80f34e6 () const bool groupCanAddContactsWithMessage a00106.html acae34246b4e5acf9a6275a450f3eba73 () const bool groupCanAcceptContactsWithMessage a00106.html af014b62a43660d2163d2b5f8f3621c7d () const PendingOperation * groupAddContacts a00106.html acc945279bd4566ffb4ba8c0f904e50b7 (const QList< ContactPtr > &contacts, const QString &message=QString()) bool groupCanRescindContacts a00106.html a98b233d8c741adf56d628945dee5878f () const bool groupCanRescindContactsWithMessage a00106.html a09810a8beacdcec192979eda2dc092b2 () const bool groupCanRemoveContacts a00106.html a5c5490d743c142adf8d5703e2ed6c2d0 () const bool groupCanRemoveContactsWithMessage a00106.html af9cbc61a3f06c254b5b9e944a1125181 () const bool groupCanRejectContactsWithMessage a00106.html a0cb2eec67f7bbe6eb9cdfc9b01e116b0 () const bool groupCanDepartWithMessage a00106.html a59e3f480718aef14e38569ccfc2dba64 () const PendingOperation * groupRemoveContacts a00106.html a15983f21a04226f730345bf4d1b8f22e (const QList< ContactPtr > &contacts, const QString &message=QString(), ChannelGroupChangeReason reason=ChannelGroupChangeReasonNone) Contacts groupContacts a00106.html a65f219d7a97d7b838d3a638899329eae (bool includeSelfContact=true) const Contacts groupLocalPendingContacts a00106.html a3e4d1b48d36dcabc82db17e4f91f1557 (bool includeSelfContact=true) const Contacts groupRemotePendingContacts a00106.html ae856118e1634348a5f6036b78fe61e87 (bool includeSelfContact=true) const GroupMemberChangeDetails groupLocalPendingContactChangeInfo a00106.html aa7476d5f3c85953e319ba110ffac59bd (const ContactPtr &contact) const GroupMemberChangeDetails groupSelfContactRemoveInfo a00106.html a153d105e41f89f062c6d479232f8d61f () const bool groupAreHandleOwnersAvailable a00106.html a9bd2bdb1dd943e9b8ffe9e4b849bc048 () const HandleOwnerMap groupHandleOwners a00106.html ae531e432ebe3cff7f922ea7f52117a09 () const bool groupIsSelfContactTracked a00106.html a9501cc64ddbfeef7be864554f801193e () const ContactPtr groupSelfContact a00106.html abff3edca07f40572b69ab1eb40b6b160 () const bool groupSelfHandleIsLocalPending a00106.html a44d7d66bbb9421d061f01938cf258955 () const PendingOperation * groupAddSelfHandle a00106.html afaee8e55452c94e49fe234bb89097462 () chan_ready_sec chan_create_sec chan_usage_sec Tp::Channel::GroupMemberChangeDetails a00244.html GroupMemberChangeDetails a00244.html a48c5f27593216b49e83acc91d81920d8 () GroupMemberChangeDetails a00244.html a79462117fb371c0033f95db563b1cb1a (const GroupMemberChangeDetails &other) ~GroupMemberChangeDetails a00244.html a14eab0d6e2651bca27602347d704b81a () GroupMemberChangeDetails & operator= a00244.html a135a0802e86ac40947c9abfec235d61b (const GroupMemberChangeDetails &other) bool isValid a00244.html a5e366f00986075e3bb8effee16bb0971 () const bool hasActor a00244.html adf94b9c24d04ee43cde2eb823ec06be1 () const ContactPtr actor a00244.html adcb153798d9f667fb2e2dba4d0bc7989 () const bool hasReason a00244.html a9fb50692359db8431da17898c57b597d () const ChannelGroupChangeReason reason a00244.html a7c1647ab21b98b543d4fc5a8e29b9b1a () const bool hasMessage a00244.html a424ad28b9fefe69cef4421c68acb1134 () const QString message a00244.html a12faf9d5bf6192915d77d432f7ec3f2a () const bool hasError a00244.html a3e8f25a0dbdfc7c72e06e29f1a8b68f6 () const QString error a00244.html a930cdd1484e41e61ee137959c9ff9b4f () const bool hasDebugMessage a00244.html a22c4a0db0572ab93d29b7bbfdb77a641 () const QString debugMessage a00244.html a0ac7c427b6e87b44bfcb263d602063ae () const QVariantMap allDetails a00244.html ad96a81dde6b2e07bdac5086152323560 () const Tp::ClientRegistrar a00158.html Tp::Object ~ClientRegistrar a00158.html a2628204c7847bc5bb535b1cc01b81aa4 () QDBusConnection dbusConnection a00158.html aa5e2433fdb5e8129a0c060f8a5dbdd30 () const AccountFactoryConstPtr accountFactory a00158.html a9f22d7f159ccbc84bac88be5f05bdc29 () const ConnectionFactoryConstPtr connectionFactory a00158.html a562477f469e0a193736dd5508c7e5291 () const ChannelFactoryConstPtr channelFactory a00158.html aca84ddb99a28c6f911362464e64b817f () const ContactFactoryConstPtr contactFactory a00158.html a7db495adc294dda744ed4781ede01b43 () const QList< AbstractClientPtr > registeredClients a00158.html a16fe9d5b6ec9e15b40a84ecf63e123d2 () const bool registerClient a00158.html a18c094053cc83809a167370f7113341b (const AbstractClientPtr &client, const QString &clientName, bool unique=false) bool unregisterClient a00158.html a6bfe24179b1e9d44a6a618a0d346e4a7 (const AbstractClientPtr &client) void unregisterClients a00158.html abfa88fe255a78e44faacdedfda2fec20 () static ClientRegistrarPtr create a00158.html a82f69f7d62e78d263ac26e5f7b51f523 (const QDBusConnection &bus) static ClientRegistrarPtr create a00158.html afe18588712ea58fc961408be22afbd83 (const AccountFactoryConstPtr &accountFactory=AccountFactory::create(QDBusConnection::sessionBus()), const ConnectionFactoryConstPtr &connectionFactory=ConnectionFactory::create(QDBusConnection::sessionBus()), const ChannelFactoryConstPtr &channelFactory=ChannelFactory::create(QDBusConnection::sessionBus()), const ContactFactoryConstPtr &contactFactory=ContactFactory::create()) static ClientRegistrarPtr create a00158.html a444848407927131641af467109faa23e (const QDBusConnection &bus, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory) static ClientRegistrarPtr create a00158.html ab822cf38041a032670e938e02f8ff080 (const AccountManagerPtr &accountManager) cr_create_sec cr_registering_sec cr_usage_sec Tp::ConnectionCapabilities a00162.html Tp::CapabilitiesBase ConnectionCapabilities a00162.html ad11fea17bae85184e09b58a428bf98c1 () virtual ~ConnectionCapabilities a00162.html a2d8fc7dd4c2f85cefd2043bbc0b72fc2 () bool textChatrooms a00162.html a311f0a6bf4540ddb83fad1039bbc6ab0 () const bool conferenceStreamedMediaCalls a00162.html aa931444110a23bf72ed7310bd5feee59 () const bool conferenceStreamedMediaCallsWithInvitees a00162.html a2abd061d45954f5544803fd8c1e18ebe () const bool conferenceTextChats a00162.html ae3be98c4e873cc4b6a2d12c41d592c3b () const bool conferenceTextChatsWithInvitees a00162.html abf882e1da606851004ab2e334729e983 () const bool conferenceTextChatrooms a00162.html a7e16aaca152b69d48b13d3616e587b8e () const bool conferenceTextChatroomsWithInvitees a00162.html ab2a50985142547c1aea772b93cda580c () const bool contactSearches a00162.html a346839e3b9c8af511ac51380ec1d44d2 () const bool contactSearchesWithSpecificServer a00162.html a5581dcc91c33e3fb2cd5ca909fa6c291 () const bool contactSearchesWithLimit a00162.html acfd4b70389eff46b52f91e866b7fa1d8 () const bool dbusTubes a00162.html ae5ec90e7d21f948b4feb2d64ed04e56d () const bool streamTubes a00162.html a401558f7cbcc02bd39a8848752ff11cc () const ConnectionCapabilities a00162.html a206a4b817c3742ef99418b6e53d1a776 (const RequestableChannelClassList &rccs) ConnectionCapabilities a00162.html ae739a04443be467f85e18e5a5d2397ef (const RequestableChannelClassSpecList &rccSpecs) Tp::ConnectionFactory a00163.html Tp::FixedFeatureFactory virtual ~ConnectionFactory a00163.html a287d602bc3e358fdd343b31977fd92e9 () PendingReady * proxy a00163.html a38d679adf6078b0511a4d14d3990ec3a (const QString &busName, const QString &objectPath, const ChannelFactoryConstPtr &chanFactory, const ContactFactoryConstPtr &contactFactory) const static ConnectionFactoryPtr create a00163.html a36edf94e6a977d175146be820c014dc7 (const QDBusConnection &bus, const Features &features=Features()) ConnectionFactory a00163.html a6e0b1665e7ea306297f2f2c24df6e870 (const QDBusConnection &bus, const Features &features) virtual ConnectionPtr construct a00163.html afa59732a681f38065f78e808f2ac6dfd (const QString &busName, const QString &objectPath, const ChannelFactoryConstPtr &chanFactory, const ContactFactoryConstPtr &contactFactory) const virtual QString finalBusNameFrom a00163.html ab1251bd98dec96f8a2b3c9ab62e0caf1 (const QString &uniqueOrWellKnown) const Tp::ConnectionLowlevel a00186.html Tp::RefCounted ~ConnectionLowlevel a00186.html aec70ebc6f61d39f2f6ce9a7251e545e1 () bool isValid a00186.html a989c8d7ecb790f008351c0be8801986f () const ConnectionPtr connection a00186.html a296be91116fa075ed800ab271d7c41bc () const PendingReady * requestConnect a00186.html adad3f0e46e1c3c4c98544bb7d340480d (const Features &requestedFeatures=Features()) PendingOperation * requestDisconnect a00186.html a755798967e4cdf6da1289da28862b179 () SimpleStatusSpecMap allowedPresenceStatuses a00186.html aed9fc8c25a465d3838355850e141ef00 () const uint maxPresenceStatusMessageLength a00186.html a38ea995a0439b2d796bdfc7b0202e3f9 () const PendingOperation * setSelfPresence a00186.html a75ac25bfa3bdbf9f012ff223406d8db7 (const QString &status, const QString &statusMessage) PendingChannel * createChannel a00186.html a7b12503cbb302b81e6d66bde16ce3e22 (const QVariantMap &request) PendingChannel * createChannel a00186.html aa2735d19e297d0840854a2a13982ae4e (const QVariantMap &request, int timeout) PendingChannel * ensureChannel a00186.html a206bf1c04cf460b00ce96527632cc3b7 (const QVariantMap &request) PendingChannel * ensureChannel a00186.html a81921413027017073265d874e2a216ee (const QVariantMap &request, int timeout) PendingHandles * requestHandles a00186.html a78ab30b0f022b5624eb74bfa63984e6b (HandleType handleType, const QStringList &names) PendingHandles * referenceHandles a00186.html a215e173f60e1c5c3cb72f1a81aaac152 (HandleType handleType, const UIntList &handles) PendingContactAttributes * contactAttributes a00186.html abe631c36b5c3c3c2f5f47da299dd9b8f (const UIntList &handles, const QStringList &interfaces, bool reference=true) QStringList contactAttributeInterfaces a00186.html a5c29fee7f683b77cc9e547572cfef027 () const void injectContactIds a00186.html a98c37ffb06db1147ece617022162417e (const HandleIdentifierMap &contactIds) void injectContactId a00186.html af6bb69a40fcd7570927d5e0d0af1f7bb (uint handle, const QString &contactId) Tp::ConnectionManagerLowlevel a00189.html Tp::RefCounted ~ConnectionManagerLowlevel a00189.html acd0eb4d2b197aa5c0dee7cbf25a300b2 () bool isValid a00189.html a62bf424d33bb0879872c45951057e61a () const ConnectionManagerPtr connectionManager a00189.html a731a6277636dc3379ed7cd04fd8fc933 () const PendingConnection * requestConnection a00189.html a03387ca868e4fd195037e44f7d39e85d (const QString &protocolName, const QVariantMap &parameters) Tp::ConnectionManager a00187.html Tp::StatelessDBusProxy OptionalInterfaceFactory< ConnectionManager > virtual ~ConnectionManager a00187.html aa0f20ca9e71d59633fd9b6ea1a8763b6 () QString name a00187.html abdcc976229007c7e14f807b64bb63f74 () const ConnectionFactoryConstPtr connectionFactory a00187.html a6336058295c90e97f28cb038310ee12c () const ChannelFactoryConstPtr channelFactory a00187.html a9fc735e792973e0b10fe500e088a705d () const ContactFactoryConstPtr contactFactory a00187.html abb781a150e4cde477d507697fbfb2831 () const QStringList supportedProtocols a00187.html a984817c505553dc8a8b6d27fd84dfa41 () const const ProtocolInfoList & protocols a00187.html ac60ebb96b662bcb703d052cb3a3d4c6b () const bool hasProtocol a00187.html a2e7c27d5dec78c71eeaacc4b4c9ba403 (const QString &protocolName) const ProtocolInfo protocol a00187.html a2e1d9073a0732e10772104b7f21e598f (const QString &protocolName) const static ConnectionManagerPtr create a00187.html a8cdfaeae6d4efde734b01797aec037e7 (const QDBusConnection &bus, const QString &name) static ConnectionManagerPtr create a00187.html a8056229e3683962e732e5190561ec4f6 (const QString &name, const ConnectionFactoryConstPtr &connectionFactory=ConnectionFactory::create(QDBusConnection::sessionBus()), const ChannelFactoryConstPtr &channelFactory=ChannelFactory::create(QDBusConnection::sessionBus()), const ContactFactoryConstPtr &contactFactory=ContactFactory::create()) static ConnectionManagerPtr create a00187.html a2fbe31cd738148546f3f41a3361bc93f (const QDBusConnection &bus, const QString &name, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory=ContactFactory::create()) static PendingStringList * listNames a00187.html ab4488e9c105fcf20ff494e89087f60eb (const QDBusConnection &bus=QDBusConnection::sessionBus()) static const Feature FeatureCore a00187.html ab598a95bf0e38c8ebcd542b8c4c69d0c ConnectionManager a00187.html af963841a786f7426b415152cdd24d95c (const QDBusConnection &bus, const QString &name, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory) Client::ConnectionManagerInterface * baseInterface a00187.html ac9c58694df64dadfbf06a99b8a97f170 () const QString name a00187.html a9feef3a5e739dd1c5f63dbfbf571e4f9 QStringList supportedProtocols a00187.html a988e5d359ceeda327aae07008ee2eba6 ProtocolInfoList protocols a00187.html ae78473168234b90f050396b7c2d09d71 Tp::Connection a00161.html Tp::StatefulDBusProxy OptionalInterfaceFactory< Connection > Tp::Connection::ErrorDetails void statusChanged a00161.html a3812449d9e2b5cfa70c437a0cd36d014 (Tp::ConnectionStatus newStatus) void selfHandleChanged a00161.html a410f3768d95dce2efa21bca2e500673a (uint newHandle) void selfContactChanged a00161.html ae4abf99523e737b183858b525410461b () void accountBalanceChanged a00161.html ab050d0607f1d1cd1a826aa7d9cf349a0 (const Tp::CurrencyAmount &accountBalance) virtual ~Connection a00161.html ac0926851c142146c0bd1cd3b95b76cfb () ChannelFactoryConstPtr channelFactory a00161.html a27e53ade1cd0fcc658d58ba008dd5d29 () const ContactFactoryConstPtr contactFactory a00161.html a3b06334fb0ea8e73e292c89de88f3039 () const QString cmName a00161.html a8f2168c942763c8220f516ab6f0cc457 () const QString protocolName a00161.html a949df10fcc0722f4b8e00fca6253f398 () const ConnectionStatus status a00161.html a7eefc2f1f44614d375822fa8af6e1d05 () const ConnectionStatusReason statusReason a00161.html aca21b3cfa48fade2023c37165fb2de79 () const const ErrorDetails & errorDetails a00161.html a22da076fc2c2ddf380a43a877a04951b () const uint selfHandle a00161.html a8712aa8d00be6dd5d5e897147fb7bd2e () const ContactPtr selfContact a00161.html a359f35737ac7afac5b6575de3059c5be () const CurrencyAmount accountBalance a00161.html aaf468455c540234631a358715b24acf7 () const ConnectionCapabilities capabilities a00161.html a1aeada5cef07c09584b3d14587808865 () const ContactManagerPtr contactManager a00161.html a5d1ae07b1ae25e99053c89a43b0a95ba () const static ConnectionPtr create a00161.html a6d894b98d3b0efbfba992b89f039a031 (const QString &busName, const QString &objectPath, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory) static ConnectionPtr create a00161.html afc71a3c4153b352201048d883f07036b (const QDBusConnection &bus, const QString &busName, const QString &objectPath, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory) static const Feature FeatureCore a00161.html abc270e079265fcbec7e422d002523298 static const Feature FeatureSelfContact a00161.html af1a6dedc304a3b68d04dc191e20203c6 static const Feature FeatureSimplePresence a00161.html af832a6ba64e4811a2ff364c755493afb static const Feature FeatureRoster a00161.html a3dac123c3d7845db5ecd423fcd733323 static const Feature FeatureRosterGroups a00161.html adf6eab299cb7a0186ded6074e57fb5d0 static const Feature FeatureAccountBalance a00161.html a6053a35e135d08ed9b7f28ea7a86558e static const Feature FeatureConnected a00161.html acb9a25022157355be1b534bfe6bc1f25 Connection a00161.html a48d7eb17e7b90a817d3be1de0efdb7a2 (const QDBusConnection &bus, const QString &busName, const QString &objectPath, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory, const Feature &coreFeature) Client::ConnectionInterface * baseInterface a00161.html a414d50a08898a3f52642f37ae50c202e () const conn_usage_sec conn_create_sec conn_ready_sec Tp::Connection::ErrorDetails a00226.html ErrorDetails a00226.html a5b0ba9df9110f276e06ef95922d6005b () ErrorDetails a00226.html a795f19754b52973c1a1bb50219c7f49d (const QVariantMap &details) ErrorDetails a00226.html a41dd9790d9f5e49bc5ce891d90778ffa (const ErrorDetails &other) ~ErrorDetails a00226.html a1f4f39c0df1e5120bd36ed309a50bae6 () ErrorDetails & operator= a00226.html a7fb9b68381d4eaebbe74cae8f7e23432 (const ErrorDetails &other) bool isValid a00226.html a48f2d195a116f672feddd4218e87a531 () const bool hasDebugMessage a00226.html a5cec9c3d8b7c50ad31d6fd73f9784fd4 () const QString debugMessage a00226.html a511b72f210100ddb57da3bb0e720cbd0 () const bool hasServerMessage a00226.html a00e42ba36c9094cd5e868ac0634dfb3e () const QString serverMessage a00226.html a7ccb305148c3812028167e23eec5d872 () const bool hasUserRequested a00226.html abb680817f99e846408ef1d18c4dcffc1 () const bool userRequested a00226.html a66cd75caea80c61ddeb83e837ad7a13f () const bool hasExpectedHostname a00226.html aa2fb6b18d46253541dc45547ab239202 () const QString expectedHostname a00226.html a64fcc4838b1be1d71bccb8470d8d45eb () const bool hasCertificateHostname a00226.html ab708b33ca38b986431e3972fccf1ad18 () const QString certificateHostname a00226.html aabae56774ef17c1512583613ed5bc08e () const QVariantMap allDetails a00226.html a45563746582851913ba7caa6c4cda9b7 () const Tp::ContactCapabilities a00192.html Tp::CapabilitiesBase ContactCapabilities a00192.html a1c8b59b409121c88b6233f55a8ebe06e () virtual ~ContactCapabilities a00192.html a54c6f7506c86cad7345d3eebfc0a44c1 () bool dbusTubes a00192.html a2415f2979a2a31af6767587b4f430ad7 (const QString &serviceName) const QStringList dbusTubeServices a00192.html a598b1c486e0c255fd5a3b6b09738034f () const bool streamTubes a00192.html a099c2ad7c3b4c4e2b7fbf395f0da71a5 (const QString &service) const QStringList streamTubeServices a00192.html af89f0e09b4319c8614f3b4603a182c31 () const ContactCapabilities a00192.html a19e5f36372e74acd4de7bf9de6e3d4a5 (bool specificToContact) ContactCapabilities a00192.html a75f53c321f69e1be7df1d3310ad5d284 (const RequestableChannelClassList &rccs, bool specificToContact) ContactCapabilities a00192.html a24a45a95b6026c2e9cf3bc878ab60ea8 (const RequestableChannelClassSpecList &rccSpecs, bool specificToContact) Tp::ContactFactory a00197.html Tp::RefCounted virtual ~ContactFactory a00197.html abdc81d784a4b10e6ec69c529aa19afb5 () Features features a00197.html a164f793bc1c263e4d9f31e4011787519 () const void addFeature a00197.html aad52dfcc20b9b32649bbcf1cfa084dd5 (const Feature &feature) void addFeatures a00197.html a8d48d2bcb259358d27a7b3bc48015895 (const Features &features) static ContactFactoryPtr create a00197.html a1e65dc49f0c4ab8162b6d69717276752 (const Features &features=Features()) ContactFactory a00197.html aa0c8d46ff64084030ce08cd8f6836648 (const Features &features) virtual ContactPtr construct a00197.html a617cdc6f87c1c505f66f00f4ad85b3cc (ContactManager *manager, const ReferencedHandles &handle, const Features &features, const QVariantMap &attributes) const virtual PendingOperation * prepare a00197.html acf3b277d8ad55760df43250a5590f8a1 (const ContactPtr &contact) const Tp::ContactManager a00201.html Tp::Object void stateChanged a00201.html ab08ec3253dde87c9ae00df8d05188b82 (Tp::ContactListState state) void presencePublicationRequested a00201.html a6fd4463cdd976722642239d5412691a0 (const Tp::Contacts &contacts) void groupAdded a00201.html a9f4088f2dc6fde3d93081bd4cc0eee64 (const QString &group) void groupRenamed a00201.html a46359db15ed92bc1ab140adb2759c7ae (const QString &oldGroup, const QString &newGroup) void groupRemoved a00201.html a9ed8c4284e625ea4eeba9a52c922d89d (const QString &group) void groupMembersChanged a00201.html a878b55c5edf1c0a596881a2038075ef6 (const QString &group, const Tp::Contacts &groupMembersAdded, const Tp::Contacts &groupMembersRemoved, const Tp::Channel::GroupMemberChangeDetails &details) void allKnownContactsChanged a00201.html ae4d442bf3ad52303c6490d356ce481d5 (const Tp::Contacts &contactsAdded, const Tp::Contacts &contactsRemoved, const Tp::Channel::GroupMemberChangeDetails &details) virtual ~ContactManager a00201.html a0ce348904cde9db375f71a6bb53987f0 () ConnectionPtr connection a00201.html af101a4f8ae122e85e9fac5d6c0b537a2 () const Features supportedFeatures a00201.html aeb877cd57dfba9e04dffb65d74b8717b () const ContactListState state a00201.html a1355aca8ae314ed81ecf3a0320e81bbc () const Contacts allKnownContacts a00201.html a3c12a76eb7542de6e75afa6499ac93a5 () const QStringList allKnownGroups a00201.html a9009d3811e5efc8ccc1f1dc9464c11dc () const PendingOperation * addGroup a00201.html a24457084fe465714d5f3d6e321af8b54 (const QString &group) PendingOperation * removeGroup a00201.html a48ab95a31eab835a3d0cb51bb857438c (const QString &group) Contacts groupContacts a00201.html a50547e5fb2e109238a9ca50736fc199d (const QString &group) const PendingOperation * addContactsToGroup a00201.html a708499de87d0e57c49421e13fe467ed1 (const QString &group, const QList< ContactPtr > &contacts) PendingOperation * removeContactsFromGroup a00201.html a27c80e1ab19be8b8542ae14f8d6ce691 (const QString &group, const QList< ContactPtr > &contacts) bool canRequestPresenceSubscription a00201.html ad8e08099706426de94b2bd1f23a0008c () const bool subscriptionRequestHasMessage a00201.html abd8e2c4544a1724e5fb10bf16c80b001 () const PendingOperation * requestPresenceSubscription a00201.html a67ba299f82a47b6dc6d3f6d3645c007d (const QList< ContactPtr > &contacts, const QString &message=QString()) bool canRemovePresenceSubscription a00201.html ac498236242908f35f35309b6346545a5 () const bool subscriptionRemovalHasMessage a00201.html ae70040aad36cf4a546c3f7f2cc66645f () const bool canRescindPresenceSubscriptionRequest a00201.html ae14695e4e6eb0385b3d6f69cfbd032fd () const bool subscriptionRescindingHasMessage a00201.html a763cc321e395d3252d9ca04a02086527 () const PendingOperation * removePresenceSubscription a00201.html a368a06c54d07ede65d273cf693b2332f (const QList< ContactPtr > &contacts, const QString &message=QString()) bool canAuthorizePresencePublication a00201.html a5cae6b97938e3fdbfad730586030d765 () const bool publicationAuthorizationHasMessage a00201.html aae15b650476959aa7aa2397859e8ad9c () const PendingOperation * authorizePresencePublication a00201.html a22916788a01fc087d66088ae756f6660 (const QList< ContactPtr > &contacts, const QString &message=QString()) bool publicationRejectionHasMessage a00201.html a103ec996765a5e3434cb8b265427666f () const bool canRemovePresencePublication a00201.html a1602d61f630c016d41525b54c5e73caa () const bool publicationRemovalHasMessage a00201.html a1fc517663e67692b9b8b688aafec5095 () const PendingOperation * removePresencePublication a00201.html a6e1d65b5d6be2af709e88f87216750e5 (const QList< ContactPtr > &contacts, const QString &message=QString()) PendingOperation * removeContacts a00201.html a24a5a21ae83dbab5923f0f75dae6606f (const QList< ContactPtr > &contacts, const QString &message=QString()) bool canBlockContacts a00201.html a5366527c88063801f1222443d2909ce9 () const bool canReportAbuse a00201.html a653cff49446d43979ee2150a8fc9550f () const PendingOperation * blockContacts a00201.html a78f591ad92400f0e9b27de1248b3bd46 (const QList< ContactPtr > &contacts) PendingOperation * blockContactsAndReportAbuse a00201.html ab2191227907fca9ae565a18cc621ac4d (const QList< ContactPtr > &contacts) PendingOperation * unblockContacts a00201.html abae132ca2f20df46a825eb1acb8d0a1a (const QList< ContactPtr > &contacts) PendingContacts * contactsForHandles a00201.html a2355acb3dbcb50d2b6f8285eb4b556d8 (const UIntList &handles, const Features &features=Features()) PendingContacts * contactsForHandles a00201.html a595c828f1d320467e775a91e6cd2d28d (const ReferencedHandles &handles, const Features &features=Features()) PendingContacts * contactsForHandles a00201.html aa1305c59634925fea621d1d10f9275de (const HandleIdentifierMap &handles, const Features &features=Features()) PendingContacts * contactsForIdentifiers a00201.html a1497aedf16dbdcded0fbcb2c4f29b352 (const QStringList &identifiers, const Features &features=Features()) PendingContacts * contactsForVCardAddresses a00201.html aea09abb6cb5aeba931ba8392167baa32 (const QString &vcardField, const QStringList &vcardAddresses, const Features &features=Features()) PendingContacts * contactsForUris a00201.html ac6842742473bef9300e3ff1c48c25d2f (const QStringList &uris, const Features &features=Features()) PendingContacts * upgradeContacts a00201.html a3a939155d5d13b9e30fe52660d32939c (const QList< ContactPtr > &contacts, const Features &features) void requestContactAvatars a00201.html a00fb3dd601748e7a455c57027be48ed5 (const QList< ContactPtr > &contacts) PendingOperation * refreshContactInfo a00201.html a020c0e302e894c323e4f0579a6c41d00 (const QList< ContactPtr > &contact) Tp::ContactMessenger a00203.html Tp::RefCounted void messageSent a00203.html a7aa1a873748165a75234a2795e519544 (const Tp::Message &message, Tp::MessageSendingFlags flags, const QString &sentMessageToken, const Tp::TextChannelPtr &channel) void messageReceived a00203.html ad1c321adc574237c193663a341b89cb0 (const Tp::ReceivedMessage &message, const Tp::TextChannelPtr &channel) virtual ~ContactMessenger a00203.html aa33ca4bd3c65515d80831b77b00e7226 () AccountPtr account a00203.html ad1ffb6ae0b66dae5eca1abb17bd6d64b () const QString contactIdentifier a00203.html a22fb9c45ffb22629dd8716c4fe610f12 () const QList< TextChannelPtr > textChats a00203.html a49b5251a8711fc705d8be68c541d3815 () const PendingSendMessage * sendMessage a00203.html a30c4b668b097ff94273de2b3241086e4 (const QString &text, ChannelTextMessageType type=ChannelTextMessageTypeNormal, MessageSendingFlags flags=0) PendingSendMessage * sendMessage a00203.html acb7ac211a1cc2f83f9a419f5821e51b5 (const MessageContentPartList &parts, MessageSendingFlags flags=0) static ContactMessengerPtr create a00203.html ab2fbdb730a9649a5ac338fa61ff8fe88 (const AccountPtr &account, const ContactPtr &contact) static ContactMessengerPtr create a00203.html a8b88fa8574844994aa490e282d655708 (const AccountPtr &account, const QString &contactIdentifier) Tp::ContactSearchChannel a00205.html Tp::Channel Tp::ContactSearchChannel::SearchStateChangeDetails QHash< ContactPtr, Contact::InfoFields > SearchResult a00205.html a92cf99841e856d9e6d4855e12e3b2547 void searchStateChanged a00205.html ac28937310553af2b6ccc2fe342d9d21e (Tp::ChannelContactSearchState state, const QString &errorName, const Tp::ContactSearchChannel::SearchStateChangeDetails &details) void searchResultReceived a00205.html a11acd0bf22af556645f51394753f7d47 (const Tp::ContactSearchChannel::SearchResult &result) virtual ~ContactSearchChannel a00205.html a2e098658a284a68d3da3e3cf5f04c1b6 () ChannelContactSearchState searchState a00205.html ac7ab1919bc7bda2b53978f129455c818 () const uint limit a00205.html a5959f05cef06d33ab26329cf8b5f96b0 () const QStringList availableSearchKeys a00205.html a50583016b5b63c746731ac83613e556d () const QString server a00205.html aee18c17cd612dec094192c68fb26c9f0 () const PendingOperation * search a00205.html aed86236f46e2a8c8c98be1028179424c (const QString &searchKey, const QString &searchTerm) PendingOperation * search a00205.html ac26ebbc56d95167ef0190f810e7a299c (const ContactSearchMap &searchTerms) void continueSearch a00205.html aaf683cddb21337c62111e0f240dc8597 () void stopSearch a00205.html afc3eb7cc90889b6590609542ec830029 () static ContactSearchChannelPtr create a00205.html a96801b2054954b6df9768da72eccecab (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) static const Feature FeatureCore a00205.html a4abe3794920e06ec1ee7db7bd490dd51 ContactSearchChannel a00205.html a801b3050584be5d3a12d9c6831f50ccf (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature) Tp::ContactSearchChannel::SearchStateChangeDetails a00375.html SearchStateChangeDetails a00375.html a0bb56eb4821f2f46d10a502edce1ffd4 () SearchStateChangeDetails a00375.html a6c3e7bc79cf99dd8ef53b886ed2c397f (const SearchStateChangeDetails &other) ~SearchStateChangeDetails a00375.html aa3e602c35a614fb9cda74c0fbb2fd52e () bool isValid a00375.html a4c0ec04e6ee971486623a554bbf2892d () const SearchStateChangeDetails & operator= a00375.html ade1e8fb20461d83a7f8179a8a6fcbecd (const SearchStateChangeDetails &other) bool hasDebugMessage a00375.html add8799b5f10ada18312b3f3be2b74ebe () const QString debugMessage a00375.html ab7b08d8964aa69cdb6d95af8dc13ce9a () const QVariantMap allDetails a00375.html a3730cbc8e89decd366e650e472880847 () const Tp::Contact a00190.html Tp::Object Tp::Contact::InfoFields PresenceState a00190.html ab758b1908d04f9870c8091456f3ddc5b PresenceStateNo a00190.html ab758b1908d04f9870c8091456f3ddc5baf7076e1e97f86d1c4ebc4ebe290e3c61 PresenceStateAsk a00190.html ab758b1908d04f9870c8091456f3ddc5ba9c5f79349a1de47e9734bf77042f0728 PresenceStateYes a00190.html ab758b1908d04f9870c8091456f3ddc5ba7eabc92c3f6ae76802f5bdfac658ebdc void aliasChanged a00190.html ace8b4e7779bda7a773b983114d549215 (const QString &alias) void avatarTokenChanged a00190.html a113976de58b07cf9da5e867aac61e61c (const QString &avatarToken) void avatarDataChanged a00190.html a612ee28bc1240ed7cc242c1d8ceb2c63 (const Tp::AvatarData &avatarData) void presenceChanged a00190.html a034354d4568e525569cad825070caae7 (const Tp::Presence &presence) void capabilitiesChanged a00190.html a0e3355749ebda1585ac55b379ad128fd (const Tp::ContactCapabilities &caps) void locationUpdated a00190.html acae80bba6988ba2355626852c773e416 (const Tp::LocationInfo &location) void infoFieldsChanged a00190.html af6169b8950a3e67cc96b4832cf336e73 (const Tp::Contact::InfoFields &infoFields) void subscriptionStateChanged a00190.html af83e6bc67e66198c2090a27f868f4bd2 (Tp::Contact::PresenceState state) void publishStateChanged a00190.html afb7b962372cfb9d9eed5ec1e9c5fd36a (Tp::Contact::PresenceState state, const QString &message) void blockStatusChanged a00190.html a1db42abddc2803fcbd1597366251b9c7 (bool blocked) void addedToGroup a00190.html ab3289edf063657b66b6fc754185cc22a (const QString &group) void removedFromGroup a00190.html a9814b8af1fa29dad5bb1626b455c20a7 (const QString &group) void clientTypesChanged a00190.html aa01dea7d04735d8a9ddefd1d0c1b689c (const QStringList &clientTypes) ~Contact a00190.html ae778594b7fd91499112861b2b3d7772f () ContactManagerPtr manager a00190.html aea6e33b03faf8c68d4577bcb4161dc42 () const ReferencedHandles handle a00190.html ab64dc31bd4fbfc9791da9c60fe9f8173 () const QString id a00190.html aca45e993fea6618783ad2187d09d45b5 () const Features requestedFeatures a00190.html ae2dde6b88239722647494fca5e2c2b65 () const Features actualFeatures a00190.html a8705afdb5019e74ac92eec8dc9e5d94c () const QString alias a00190.html ad8348105833f362b812aa8aa8bfe698a () const QMap< QString, QString > vcardAddresses a00190.html a6760b6f21928b8fd49e203bc6a7b2b97 () const QStringList uris a00190.html ac785dfebd90f92fc8d8ef57b4846379c () const bool isAvatarTokenKnown a00190.html a6f7bfd8bfb8d0ad2ed11661ca052a7f3 () const QString avatarToken a00190.html a3605f3bef239b197e8dc9705f05de5e4 () const AvatarData avatarData a00190.html ab9ac335a30dcba596f7c98cd811a782a () const void requestAvatarData a00190.html aa92553f42d6de4ba1c285bff1233c014 () Presence presence a00190.html a27db3cfb69c113bbf39b9697bd013fe6 () const ContactCapabilities capabilities a00190.html a1afdb35ac692840aadf8091a9694b4df () const LocationInfo location a00190.html ad475fa80abd48fa447adf61d14bd2011 () const bool isContactInfoKnown a00190.html abc6f53dd1b25f60c3271397be64dfab3 () const InfoFields infoFields a00190.html ad2cc0129e906e9bc27b7a86b81dd8816 () const PendingOperation * refreshInfo a00190.html afbcc3d1622dae475b56caa8b43af5938 () PendingContactInfo * requestInfo a00190.html aa80d9b8a16b17856ad7abc5c63431fee () bool isSubscriptionStateKnown a00190.html ad14f250055a72a36b6ffde1943ce5201 () const bool isSubscriptionRejected a00190.html aa5b01df3d2cb99d663fbb34dbe2baa43 () const PresenceState subscriptionState a00190.html a650f9b833ebb36f28e7b8ac004e0e765 () const bool isPublishStateKnown a00190.html a3494aaab888db05620292cf2f32069dd () const bool isPublishCancelled a00190.html a044078488356a3c4b1b6c82061f66152 () const PresenceState publishState a00190.html aff2a3b67a62428cf4d06c90f69ef4688 () const QString publishStateMessage a00190.html a9d9baf0be1c527c35e14d8fccadf2c28 () const PendingOperation * requestPresenceSubscription a00190.html af30104295906e16cb1c98afb14acdd73 (const QString &message=QString()) PendingOperation * removePresenceSubscription a00190.html ab907f90204744c50836abd5a54d674fa (const QString &message=QString()) PendingOperation * authorizePresencePublication a00190.html a4f83e036d937ca58e82b25f72efebdb1 (const QString &message=QString()) PendingOperation * removePresencePublication a00190.html ab4b51e36e7efe1a921c2fb2d7bc391fb (const QString &message=QString()) bool isBlocked a00190.html a0c6a8d9c0fc3a99bb62d9246907192f5 () const PendingOperation * block a00190.html a32b183df90e0c037177b4335c1243b31 () PendingOperation * blockAndReportAbuse a00190.html a719edcff5e9353e6f1c72cb7cfbc31d6 () PendingOperation * unblock a00190.html a45c18438210c49f7dc08fa514d7e58a5 () QStringList groups a00190.html a0914911fa54d112aea94dc43d0fb124f () const PendingOperation * addToGroup a00190.html a37e3eccee021ba28b567b3256b4c592b (const QString &group) PendingOperation * removeFromGroup a00190.html a5df622e88d066440fac3a079b148afec (const QString &group) QStringList clientTypes a00190.html a47fa2c1858dc68be0f93b2745fac2050 () const PendingStringList * requestClientTypes a00190.html a1e6ab17e02ba414395574d8df6471d12 () static const Feature FeatureAlias a00190.html a536e766810218cd7d6de0d201dd03ebe static const Feature FeatureAvatarData a00190.html a6f66e39ad96bf52b25126f39459c47dc static const Feature FeatureAvatarToken a00190.html af9b6a80e2453f27272859b57cd47f80f static const Feature FeatureCapabilities a00190.html a06e83ec4d31a506b6812a8afda6a8af5 static const Feature FeatureInfo a00190.html a949fd098a4d13311dc4d81c2a1706553 static const Feature FeatureLocation a00190.html a3e80342afc76406c7c069d96e0cdbac8 static const Feature FeatureSimplePresence a00190.html af9098f3f176bfce4fa2628f97d4c9ae3 static const Feature FeatureAddresses a00190.html adafed65eb8ad4fb16e611ee8fc400d66 static const Feature FeatureClientTypes a00190.html a5210cf171bfb7d9df41c02b285fb24ce Contact a00190.html a8017eddef01ed158ac60957b213c1f09 (ContactManager *manager, const ReferencedHandles &handle, const Features &requestedFeatures, const QVariantMap &attributes) virtual void augment a00190.html a8bf74ad84d6ea767c4d3edd6af7e7624 (const Features &requestedFeatures, const QVariantMap &attributes) Tp::Contact::InfoFields a00254.html InfoFields a00254.html aa27a13bb4cb14c350220846d8d4ee84c () InfoFields a00254.html a5a84e96a2fb1e8f5013b023e06a636f5 (const ContactInfoFieldList &fields) InfoFields a00254.html ae16ade6240b6b63e5640db65a111c0e8 (const InfoFields &other) ~InfoFields a00254.html aa7e43607089a4dbe48b51b9b034f029f () bool isValid a00254.html a77b2fa73a80c4a54d2be600118cea44b () const InfoFields & operator= a00254.html acba855e62b6f4c74bbe56696ef529612 (const InfoFields &other) ContactInfoFieldList fields a00254.html a1ccbcfdf61b6e920aedbf77188c14dae (const QString &name) const ContactInfoFieldList allFields a00254.html a1a90bcf42b3647d238a5abd306f63ccf () const Tp::DBusError a00214.html DBusError a00214.html a8d43990c630256f0226983d7aaed17b3 () DBusError a00214.html a655dae19351bca06887016f258e47521 (const QString &name, const QString &message) ~DBusError a00214.html aea11156ce698b000d1d92f8e8b90f80c () bool isValid a00214.html a612c00e5a05312042297b7b2ded181a8 () const bool operator== a00214.html a65c50178f47a021ecf4e5debdcc591f8 (const DBusError &other) const bool operator!= a00214.html ac35fa8b59013e9788dde7b50e14c4c0e (const DBusError &other) const QString name a00214.html ab673c95a6a793a3c92bdf64c521b96dd () const QString message a00214.html a5d6b9b9f2192a7947f8236b0f64add0a () const void set a00214.html aa58c913f245d4841941f77022ff8e21a (const QString &name, const QString &message) Tp::DBusObject a00215.html DBusObject a00215.html a8a40ad322d15a975003d875d40350de8 (const QDBusConnection &dbusConnection, QObject *parent=0) virtual ~DBusObject a00215.html a399bdc058db284b634e7831128f58c5b () QDBusConnection dbusConnection a00215.html a210eb370c731cb7c7c90f29c1d61be9f () const Tp::DBusProxyFactory a00217.html Tp::RefCounted virtual ~DBusProxyFactory a00217.html accd7803cbbf50cc15fcef36839d5f961 () const QDBusConnection & dbusConnection a00217.html aaabfff2d1bfc81081fc6724a58b55ea3 () const DBusProxyFactory a00217.html aa57a60837c3c748c5f33e9e92580d3ca (const QDBusConnection &bus) DBusProxyPtr cachedProxy a00217.html a85284989eb0a7a8531234cb21ccd51d3 (const QString &busName, const QString &objectPath) const PendingReady * nowHaveProxy a00217.html ac4e7283969f7903ede45161b04a4aa37 (const DBusProxyPtr &proxy) const virtual QString finalBusNameFrom a00217.html acb7d5d014352d54ccd821911fb0ece05 (const QString &uniqueOrWellKnown) const =0 virtual PendingOperation * initialPrepare a00217.html a58b75844d411274a3a1c3dfdc6b8606f (const DBusProxyPtr &proxy) const virtual PendingOperation * readyPrepare a00217.html ab12a7b1e605f6ca8b99527e721e2d848 (const DBusProxyPtr &proxy) const virtual Features featuresFor a00217.html a40aaeeb2981d2e0e62372bf744dad9ed (const DBusProxyPtr &proxy) const =0 Tp::DBusProxy a00216.html Tp::Object Tp::ReadyObject void invalidated a00216.html a2ec4e99262674ba916321d11398c6b58 (Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage) DBusProxy a00216.html a377481f5dfa02148922c8b5f500033e0 (const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore) virtual ~DBusProxy a00216.html ae9dd49ab6450270eee49c7e608e4699b () QDBusConnection dbusConnection a00216.html a336b08c4b43ff12b92d4e3bd75296a8d () const QString busName a00216.html ac37e3a353d5bdaebf451600959c1af1d () const QString objectPath a00216.html af95b104d2da1bb0c2ec5bc9cae224ecb () const bool isValid a00216.html adb39028a597488f81d5f8bacfe822886 () const QString invalidationReason a00216.html a5485c06ca011151760106abe47e0109f () const QString invalidationMessage a00216.html af3808f1cfe2ddf7187066e65639529db () const void setBusName a00216.html a8454cf67e8444988c50ba0d14ac5c2d5 (const QString &busName) void invalidate a00216.html a4cff103158912bc2207e0da18d00b710 (const QString &reason, const QString &message) void invalidate a00216.html a5b3bddf9ffeefd35b8efbf7fb0ba6134 (const QDBusError &error) Tp::StatelessDBusProxy a00395.html Tp::DBusProxy StatelessDBusProxy a00395.html a03e67b9c9a1edf4dd10ca3d011558118 (const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore) virtual ~StatelessDBusProxy a00395.html abe2674d0119057442a047fa318255603 () Tp::StatefulDBusProxy a00394.html Tp::DBusProxy StatefulDBusProxy a00394.html a7632f926d92300e92aaa8fd48c431185 (const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore) virtual ~StatefulDBusProxy a00394.html a57018959bb419e2ad393a8300857b868 () static QString uniqueNameFrom a00394.html a61e8c614eaf20f5d52eb4b17f060369a (const QDBusConnection &bus, const QString &wellKnownOrUnique) static QString uniqueNameFrom a00394.html a87d6063f9fa84aa8ccae110ceacffd40 (const QDBusConnection &bus, const QString &wellKnownOrUnique, QString &error, QString &message) Tp::DBusService a00218.html Tp::Object DBusService a00218.html a7156a7b3ac09af59b1cbc5f9e33efc88 (const QDBusConnection &dbusConnection) virtual ~DBusService a00218.html a85b2bdc6cf8efaee666d655fc4693c16 () virtual QVariantMap immutableProperties a00218.html a2ad262e8bb9c5577ad41f7b28a51e4e1 () const =0 QDBusConnection dbusConnection a00218.html aa1f7e8613cfda37abfa4f529bb6633b5 () const QString busName a00218.html ae1cf0a6d00b2b7d541c3e5dbc319521b () const QString objectPath a00218.html aaf651c0bc7e2c0002c38509eeb03f3c9 () const DBusObject * dbusObject a00218.html a0da60cf97c088264c934d3c84b59d1fb () const bool isRegistered a00218.html affb11e5c2e364c6ca9356ef57efb17e3 () const virtual bool registerObject a00218.html a680d7bda2dab65741f80605d3b3ff607 (const QString &busName, const QString &objectPath, DBusError *error) Tp::AbstractDBusServiceInterface a00035.html Tp::Object AbstractDBusServiceInterface a00035.html ab7f3a6c62addea121b3dd7a5d51c5766 (const QString &interfaceName) virtual ~AbstractDBusServiceInterface a00035.html a72d8f7e2e59db04759168e059323fbb1 () QString interfaceName a00035.html ae5a60300ba120fb6579a489d1e3abe59 () const virtual QVariantMap immutableProperties a00035.html aa73b72b907398dfc6a4563b62dc6fd2f () const =0 DBusObject * dbusObject a00035.html ae8630f88c35f340bf7a5b41ae13c208b () const bool isRegistered a00035.html a3e4213911feea638dd4dab3dd20ada17 () const virtual bool registerInterface a00035.html a9d73f044373a17cfc82c6c0a9a8dbbaa (DBusObject *dbusObject) virtual void createAdaptor a00035.html a5e145203ddae87726aa46500691b2f3d ()=0 Tp::DBusTubeChannel a00219.html Tp::TubeChannel void busNameAdded a00219.html ab78140328bdfa768da72cc64b3b4f668 (const QString &busName, const Tp::ContactPtr &contact) void busNameRemoved a00219.html a4739394d5e81812f0ab04be061afdcab (const QString &busName, const Tp::ContactPtr &contact) virtual ~DBusTubeChannel a00219.html a035b470a4d23a2be6183f5fe534f9c25 () QString serviceName a00219.html a44114279ecb94d29249fbb251d1ac807 () const bool supportsRestrictingToCurrentUser a00219.html aaaa5d832f72b29f54f98f45aca73455a () const QHash< QString, Tp::ContactPtr > contactsForBusNames a00219.html af33f624c11036679f22f2c6fcffb1c2b () const QString address a00219.html a23663e0cf235bb22ff6e1a8efb928211 () const static DBusTubeChannelPtr create a00219.html a5ad7ac4799086ea7d9236ddee3ea9160 (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) static const Feature FeatureCore a00219.html a1532c8140e6f2ed059e0f5abebc292e1 static const Feature FeatureBusNameMonitoring a00219.html ac38c8afe2813f4f827d9db96a7750298 DBusTubeChannel a00219.html abd1c98f647a199663d1291a30cb6107e (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) Tp::DebugReceiver a00224.html Tp::StatefulDBusProxy void newDebugMessage a00224.html a77cb755d0fc2e1083a76a5a32b74997d (const Tp::DebugMessage &message) virtual ~DebugReceiver a00224.html a9e36301c70b0ede9cbc192cedae0a0ec () PendingDebugMessageList * fetchMessages a00224.html a14fd2429a6917eb2055dc5dcab752b6b () PendingOperation * setMonitoringEnabled a00224.html acd0fb1527de983e87c70fc33baba1b6a (bool enabled) static DebugReceiverPtr create a00224.html a5d97fe881da64526350223f3b01a9b7d (const QString &busName, const QDBusConnection &bus=QDBusConnection::sessionBus()) static const Feature FeatureCore a00224.html ab2e6ba8728c77b27bffc70bc2e60a2a5 DebugReceiver a00224.html a768521e4d61b9d456eb83314bbdacc28 (const QDBusConnection &bus, const QString &busName) Tp::Feature a00227.html Feature a00227.html a012f956361c1ecebbe1101e90f1fb585 () Feature a00227.html a8fd9131ecf0ab37dc40d183fcfc5a419 (const QString &className, uint id, bool critical=false) Feature a00227.html a9a9c5cc1323bc8407f41e1765f551a6c (const Feature &other) ~Feature a00227.html af2b721f78b9ec87e4e84cfa58e02eacb () bool isValid a00227.html aa7bdcceed648c4e53013f62ff70c8cf1 () const Feature & operator= a00227.html a6a528aabd2ec8873bb65a63bd5fbf9a9 (const Feature &other) bool isCritical a00227.html aa2bcc5f643bef92d16e9a83dfd976096 () const Tp::Features a00228.html Features a00228.html a452f412bb96ea2d2414fc4c39957e21b () Features a00228.html a9ddd199fc8617e26d7f3bf7d3d046f5a (const Feature &feature) Features a00228.html a6149e886e295bc642bf0fd65caae224b (const QSet< Feature > &s) Tp::FileTransferChannelCreationProperties a00231.html FileTransferChannelCreationProperties a00231.html af88b5debb7223e3ea7e3686373cfc1df () FileTransferChannelCreationProperties a00231.html a9b53c4e07a23bce1335436a144a130fc (const QString &suggestedFileName, const QString &contentType, qulonglong size) FileTransferChannelCreationProperties a00231.html ae6283dbd4f28c6bb8f5cb89a25acea44 (const QString &path, const QString &contentType) FileTransferChannelCreationProperties a00231.html a172f86f6c1d215480c5b6fb12930639b (const FileTransferChannelCreationProperties &other) ~FileTransferChannelCreationProperties a00231.html a9d0a86216d53695b8e21b25476ad2e8b () bool isValid a00231.html ac5b7f10b06cb08bed5441bfdde1e1b77 () const FileTransferChannelCreationProperties & operator= a00231.html a21fb3ede84111eb8029acd1e2cfc2faa (const FileTransferChannelCreationProperties &other) bool operator== a00231.html a00535df9850e61ed2b65048a781e08ba (const FileTransferChannelCreationProperties &other) const FileTransferChannelCreationProperties & setContentHash a00231.html a938143631f0a8bc3aec19d9a6398bccd (FileHashType contentHashType, const QString &contentHash) FileTransferChannelCreationProperties & setDescription a00231.html add08c21a31f96f4aeadcfe928c88f83e (const QString &description) FileTransferChannelCreationProperties & setLastModificationTime a00231.html a2faea887b38383b22915d94c6f1f9783 (const QDateTime &lastModificationTime) FileTransferChannelCreationProperties & setUri a00231.html a253204c3d7b8f8849d7b1960f8142123 (const QString &uri) QString suggestedFileName a00231.html a894fabe1070c8505b4fbbe3377e004b8 () const QString contentType a00231.html a3a3c73bc9ccd9b2b5138410b42bdfc93 () const qulonglong size a00231.html a75d61b0513af3d58109e112bc18f06ac () const bool hasContentHash a00231.html a4e9fc3bf77c33c788c6bdb0a9b4aeaed () const FileHashType contentHashType a00231.html a0455dcadbf8399ea1752877f888a55ab () const QString contentHash a00231.html a204cecb12943032ccef093294e46248a () const bool hasDescription a00231.html a529ce0e965b4d697b28b153aa6c5c479 () const QString description a00231.html a2953c5a58d733b2cb094915b329621e8 () const bool hasLastModificationTime a00231.html a9f91b23adf39e21ee94ed50785de6cfd () const QDateTime lastModificationTime a00231.html ad802a6b7f7e2d17363822bb449d62b9b () const bool hasUri a00231.html a2fd3f48687e3ded60552a61dd6b5970f () const QString uri a00231.html a0a9855af1a389c6cb13fd5a12f5398d1 () const Tp::FileTransferChannel a00230.html Tp::Channel void stateChanged a00230.html ae7bab5a3817ce7c036509b3548c59d8b (Tp::FileTransferState state, Tp::FileTransferStateChangeReason reason) void initialOffsetDefined a00230.html a1625963b2ed309a3b559ec1a34e47788 (qulonglong initialOffset) void transferredBytesChanged a00230.html ab5e1fc0317125ba466988f3f11c47ca0 (qulonglong count) virtual ~FileTransferChannel a00230.html acae3f8a38d02f05ad8752981f5c4d5c5 () FileTransferState state a00230.html af5eaf95fce467175709bc9a677a99823 () const FileTransferStateChangeReason stateReason a00230.html a60f72666dfef89e088ae3a0b0f48f74d () const QString fileName a00230.html a0b641c616449a894ff960d463748c383 () const QString contentType a00230.html aacfbbfd5b51c4da2641ccc8c353188c9 () const qulonglong size a00230.html abb67c974edd4363cace18283d29cbbce () const QString uri a00230.html ac1afab6110e28bbdff1fee46b7f8b7a7 () const FileHashType contentHashType a00230.html a1481e951ea766d1422859347cf64a182 () const QString contentHash a00230.html aa5dfb852c95bba3241e75da21e8e3ff3 () const QString description a00230.html aa0113985b9f3eaf249ebc7f90a2bd72a () const QDateTime lastModificationTime a00230.html a6710729f5b777cb039b5b6fb62ddf836 () const qulonglong initialOffset a00230.html a34dbec4a30c0d73d1f8861a3500af57d () const qulonglong transferredBytes a00230.html a7bcbf39ec7d92537bbda507e9cf07a7c () const PendingOperation * cancel a00230.html a02cd4e2fd045b474e488b87fbe6c1f07 () static FileTransferChannelPtr create a00230.html abc5e5967f512675521c323b480bae955 (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) static const Feature FeatureCore a00230.html a5f5f0af9fa83ed14c097670c05b0ed71 void onUriDefined a00230.html a7d5d10c8e3c57e2e54ab53d9cc34453c (const QString &uri) FileTransferChannel a00230.html a9d502b0dafe62f57370bb519443a3265 (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature=FileTransferChannel::FeatureCore) SupportedSocketMap availableSocketTypes a00230.html a497872a3f691722f20654937b5cbea90 () const virtual void connectToHost a00230.html aa86326ced6b70b4d1b26e1f784167df7 () bool isConnected a00230.html a7d40e3566345990a25a4f84f5189ab89 () const void setConnected a00230.html a34305944fca0868033cfae04512d4a4b () bool isFinished a00230.html a6a6d65f672214327340a44fee3fffd3d () const virtual void setFinished a00230.html a08527165099e8d671437727144871e9d () Tp::Filter a00232.html T Tp::RefCounted virtual ~Filter a00232.html abb64b19e1e56d863e8ba653ec4c6552a () virtual bool isValid a00232.html a26fe0d603bfd361eb3dc5885ed71ad91 () const virtual bool matches a00232.html a4436adcdc7e8465ec20feef346547c40 (const SharedPtr< T > &t) const Filter a00232.html ac8a72371d850de0ff65c3ab68e8101f0 () Tp::FixedFeatureFactory a00233.html Tp::DBusProxyFactory virtual ~FixedFeatureFactory a00233.html a18870c3171032e3a27453bb010e86720 () Features features a00233.html ac02fe1d220587b4f4efc236c9e773332 () const void addFeature a00233.html ad21d770b0be00c0df531814e84fa2462 (const Feature &feature) void addFeatures a00233.html ad51b92980595eb5cacac6f3b93f6b5f7 (const Features &features) FixedFeatureFactory a00233.html a2feccddc408df42bd2bd0765eb68f889 (const QDBusConnection &bus) virtual Features featuresFor a00233.html a4c8effdc343a04cc7675cd4f740fbfae (const DBusProxyPtr &proxy) const Tp::BaseFunctor a00063.html Tp::PtrFunctor0 a00350.html Tp::BaseFunctor R(* FunctionType a00350.html a7f36a21e71f37e9d154c651c64eacefb )() R ResultType a00350.html abebbfc39abf235c103e90482bc003584 PtrFunctor0 a00350.html ac7185221d1144bfcbeb480244a2d9ea6 (FunctionType fn) ResultType operator() a00350.html a8e356d5cb210dbf67cf340c2f3e77735 () const FunctionType fn a00350.html a31ccfd2562ebc25f15b4ed7dbf553604 Tp::MemberFunctor0 a00273.html R T Tp::BaseFunctor R(T::* FunctionType a00273.html a1b808950da7da9579d3d43adf4de3f98 )() R ResultType a00273.html a87fb57058d08ed9cd019eebf236c2118 MemberFunctor0 a00273.html ab90e18d88ff643b8feec70e0d0f018b2 (T *object, FunctionType fn) ResultType operator() a00273.html a639c328b2cc6a81f17c3bc6f05b89537 () const T * object a00273.html ab1f8d31789dbe7155641bacd151ae947 FunctionType fn a00273.html a4a3579278df934e6ccf4c4f6555ab65b Tp::PtrFunctor1 a00351.html Tp::BaseFunctor R(* FunctionType a00351.html a4db78f6e4963fa72e500f4605aeb56b9 )(Arg1) R ResultType a00351.html a2e0b721873a46a51ea4c11f478c4ab8c PtrFunctor1 a00351.html a260ed00f836f6105d7971e8726b370d8 (FunctionType fn) ResultType operator() a00351.html a6f86a7eb2995d8ba8e225be802c66276 (Arg1 a1) const FunctionType fn a00351.html ac6f5715394fbf62789557076039f61fa Tp::MemberFunctor1 a00274.html R T Arg1 Tp::BaseFunctor R(T::* FunctionType a00274.html a569f3cc2ccd0f58f60d6aadfc5fab828 )(Arg1) R ResultType a00274.html a0ebb2b3efe65dff1284c852bf094d88b MemberFunctor1 a00274.html a0df4f0a3c73af27a50dd79c892b2e9b7 (T *object, FunctionType fn) ResultType operator() a00274.html a250548c62d4a786bb4387da2a562613e (Arg1 a1) const T * object a00274.html a3976788911c7ce9f4eea0dc6f827f93d FunctionType fn a00274.html a5f3954962bb3755fe0892d16c82ce7cf Tp::PtrFunctor2 a00352.html Tp::BaseFunctor R(* FunctionType a00352.html ababd6af3fe5524d4c59e070ac4a2a389 )(Arg1, Arg2) R ResultType a00352.html a319c715d757f577e295c8f307cd80a81 PtrFunctor2 a00352.html a10e3f7bfd0820eb81eba8a3efb5a3e77 (FunctionType fn) ResultType operator() a00352.html a604de724bf536ba97f7dc799a07b7c9c (Arg1 a1, Arg2 a2) const FunctionType fn a00352.html aac196f235c861f44da75f72bddb80461 Tp::MemberFunctor2 a00275.html R T Arg1 Arg2 Tp::BaseFunctor R(T::* FunctionType a00275.html aacdebabf70169c2ce67ba7f6be5e27c7 )(Arg1, Arg2) R ResultType a00275.html a1942264de104c940bf9a9014a2078845 MemberFunctor2 a00275.html ae4821a83c1c7d92ed37ea173775cfbc3 (T *object, FunctionType fn) ResultType operator() a00275.html af75910c9c2b82dc1a05296382e6ff172 (Arg1 a1, Arg2 a2) const T * object a00275.html ad58994441f870edb83c736f694394622 FunctionType fn a00275.html a626f4d11da224396fcc0aab1770157e5 Tp::PtrFunctor3 a00353.html Tp::BaseFunctor R(* FunctionType a00353.html a32a14c6693e1e8940c4dccc32fae5c6e )(Arg1, Arg2, Arg3) R ResultType a00353.html a5c0e4e4c122a0305b9f29a9eb2daa080 PtrFunctor3 a00353.html afd1b16a218044f653f085973596e778c (FunctionType fn) ResultType operator() a00353.html ae73625ea5ce8db7cb3b50a957ee67c00 (Arg1 a1, Arg2 a2, Arg3 a3) const FunctionType fn a00353.html af54e1109f6c0898367ddffcb89725d8e Tp::MemberFunctor3 a00276.html R T Arg1 Arg2 Arg3 Tp::BaseFunctor R(T::* FunctionType a00276.html a35e62e61349d8015454c877ee2492ed7 )(Arg1, Arg2, Arg3) R ResultType a00276.html a21126b048feaac620c076e6178f016d8 MemberFunctor3 a00276.html a4d29af967a24b06c261b48709d56db9e (T *object, FunctionType fn) ResultType operator() a00276.html ac632a04a839468df5290e20c5b3a56c5 (Arg1 a1, Arg2 a2, Arg3 a3) const T * object a00276.html a37ea89dc7db6d5c78b7dadb1bf5c1266 FunctionType fn a00276.html af996485857a2fb96d68b87281a8aab0f Tp::PtrFunctor4 a00354.html Tp::BaseFunctor R(* FunctionType a00354.html a445684d50a0c91aaaa85ff099ea85667 )(Arg1, Arg2, Arg3, Arg4) R ResultType a00354.html aa7182d38b55157b630f4ac495841c26a PtrFunctor4 a00354.html aece4779f9026524a44b305ab822aad6a (FunctionType fn) ResultType operator() a00354.html ad4fd8459459cdf9b3d37ce5379bcc723 (Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4) const FunctionType fn a00354.html a8534f8cc00cbf74525b641e28c201e2e Tp::MemberFunctor4 a00277.html R T Arg1 Arg2 Arg3 Arg4 Tp::BaseFunctor R(T::* FunctionType a00277.html a5a2c29dc260f64bb0efc3197f74a5a81 )(Arg1, Arg2, Arg3, Arg4) R ResultType a00277.html a2116745890f5ff8cf89957fa47e28b5d MemberFunctor4 a00277.html a08a9c674afd018fb4b71586ec9cdc5e5 (T *object, FunctionType fn) ResultType operator() a00277.html abb6ef93b62bf81aa2f30d0bb4730b06c (Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4) const T * object a00277.html af0a6fd1a90cee14a54f18860838300ad FunctionType fn a00277.html abcc76109d98e89c2d2d0ea0a62b83b29 Tp::PtrFunctor5 a00355.html Tp::BaseFunctor R(* FunctionType a00355.html a79d99a241cb28b84c59d57433aa5112c )(Arg1, Arg2, Arg3, Arg4, Arg5) R ResultType a00355.html a4fb88d3e89a23bd35b7eb03c703d7d87 PtrFunctor5 a00355.html adb8d980d6a0dd413926dd46188e85d58 (FunctionType fn) ResultType operator() a00355.html a92dc97399b219cd08a063bc885e0e181 (Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5) const FunctionType fn a00355.html a4fcaab783a819a70963886f172cd695d Tp::MemberFunctor5 a00278.html R T Arg1 Arg2 Arg3 Arg4 Arg5 Tp::BaseFunctor R(T::* FunctionType a00278.html ab2d678ce00ef081437c27fb0fa734d60 )(Arg1, Arg2, Arg3, Arg4, Arg5) R ResultType a00278.html a09518cab4836da0b2b3a1253cdcc5ab2 MemberFunctor5 a00278.html acfd94005025a0ec05f5088742c9115e5 (T *object, FunctionType fn) ResultType operator() a00278.html aee5fe4dadf4113bc23aeea7930803b6e (Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5) const T * object a00278.html a238734aa28508ef29e26d67302ad0df2 FunctionType fn a00278.html aba0ff8bbffa9ebedfe29597840fa65b1 Tp::PtrFunctor6 a00356.html Tp::BaseFunctor R(* FunctionType a00356.html afe6e77fc684f799ddd6449cefa465446 )(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6) R ResultType a00356.html a9484811c326c0a80cdacf47eb8e5abf8 PtrFunctor6 a00356.html a874637c4d70b11da1015c21b0c636094 (FunctionType fn) ResultType operator() a00356.html a9350b09154fb4e1d4f3a7906b67fa305 (Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6) const FunctionType fn a00356.html a748d7551e6debbfa9bdd81fdd8b3f4d9 Tp::MemberFunctor6 a00279.html R T Arg1 Arg2 Arg3 Arg4 Arg5 Arg6 Tp::BaseFunctor R(T::* FunctionType a00279.html aa2523de0913df7edda30bdb98ccd8949 )(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6) R ResultType a00279.html ae3bdb1c7cdc064c3e816e58d704b080c MemberFunctor6 a00279.html ae94b592ca2ca9310f77bf3d4a57789a2 (T *object, FunctionType fn) ResultType operator() a00279.html a84c3d9b2be733b847f117ad7710ce835 (Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6) const T * object a00279.html aac914df4f98fe659fafe0d6f1be99db8 FunctionType fn a00279.html ad9a18a7eb3a5901d7f2a3cdd16e979ef Tp::PtrFunctor7 a00357.html Tp::BaseFunctor R(* FunctionType a00357.html adab4b0951200ee741c5be3ccbcbc4cb3 )(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7) R ResultType a00357.html a6e296a3fd9bfda944a1b6e66e730df6a PtrFunctor7 a00357.html a90023dbc25c8eeab213cfe4b1122bac0 (FunctionType fn) ResultType operator() a00357.html abcac3d9986e0ad6f258856a5cac2d608 (Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6, Arg7 a7) const FunctionType fn a00357.html afac511cefc9ed93892308d699e077923 Tp::MemberFunctor7 a00280.html R T Arg1 Arg2 Arg3 Arg4 Arg5 Arg6 Arg7 Tp::BaseFunctor R(T::* FunctionType a00280.html a36fd7762fd29592aa5b294589d7352a5 )(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7) R ResultType a00280.html a0450634868848146d2165e961b3d3f51 MemberFunctor7 a00280.html a66f8a0c1a818c4d9f675d8706c420246 (T *object, FunctionType fn) ResultType operator() a00280.html a37ee11c370b6a2de9b498d4a345ca318 (Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6, Arg7 a7) const T * object a00280.html a78e8c43a63666356eed0087aaf806f64 FunctionType fn a00280.html a02f5f09b8a8d6a30e51519646be2765c Tp::GenericCapabilityFilter a00242.html Tp::Filter virtual ~GenericCapabilityFilter a00242.html a8dbbf38edd043b5b2ed114c81df039b5 () virtual bool isValid a00242.html a8d354be2876ec75479fd30c8b28d3374 () const virtual bool matches a00242.html ace0fafd2261279ee8a59f4f32b5c709f (const SharedPtr< T > &t) const RequestableChannelClassSpecList filter a00242.html a0f2d8289e149711b0749cc3d17530c20 () const void addRequestableChannelClassSubset a00242.html a31c32288601a65f063fe6cace72c2bc0 (const RequestableChannelClassSpec &rccSpec) void setRequestableChannelClassesSubset a00242.html af6204fef98cc3cf25b649926fabb1281 (const RequestableChannelClassSpecList &rccSpecs) static SharedPtr< GenericCapabilityFilter< T > > create a00242.html a74b1b36289a8dbc2458e1197bfda9c66 (const RequestableChannelClassSpecList &rccSpecs=RequestableChannelClassSpecList()) Tp::GenericPropertyFilter a00243.html T Tp::Filter virtual ~GenericPropertyFilter a00243.html a5dd35a21eb35072976cc22889d9fc774 () virtual bool isValid a00243.html a736f972b7f0531e551470cd76aa619ae () const virtual bool matches a00243.html aa7cf2cb7ddaa0a78bb1a89e3dd81a338 (const SharedPtr< T > &t) const QVariantMap filter a00243.html ad6bbf4bc4e5c3d06ad64663174cc23e7 () const void addProperty a00243.html a6f217b50d0be61932053444753be8995 (const QString &propertyName, const QVariant &propertyValue) void setProperties a00243.html ab8f6ecfbfd3a42d2388b70fb18d30cc3 (const QVariantMap &filter) GenericPropertyFilter a00243.html a652316270232cb34ef0317fd044f84f4 () Tp::HandledChannelNotifier a00245.html void handledAgain a00245.html a87035ac3451b7c0225625f308fb5d21c (const QDateTime &userActionTime, const Tp::ChannelRequestHints &requestHints) ~HandledChannelNotifier a00245.html a827b9da4b2863577ba664fda40bc4690 () ChannelPtr channel a00245.html a90226a5762c1f6c743f91901ded0c9f4 () const void connectNotify a00245.html ab91b942173be2d3fba7f08132cf1d983 (const char *) Tp::IncomingDBusTubeChannel a00251.html Tp::DBusTubeChannel virtual ~IncomingDBusTubeChannel a00251.html a390145993bcbff3b01c5d7cd60615b2d () PendingDBusTubeConnection * acceptTube a00251.html aabde954e1a410fa9ed25113973f532b3 (bool allowOtherUsers=false) static IncomingDBusTubeChannelPtr create a00251.html ae3e2251a78cf64a0db783291a5336685 (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) IncomingDBusTubeChannel a00251.html af71545325a918ba798504a4859189332 (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) Tp::IncomingFileTransferChannel a00252.html Tp::FileTransferChannel void uriDefined a00252.html afc82c988a18c5ef9f42cd2dd09d6564c (const QString &uri) virtual ~IncomingFileTransferChannel a00252.html a15b6bb0c0d092a524cc0bbdfb321766a () PendingOperation * setUri a00252.html a44c842f20225191f2fada0d6ac95d87b (const QString &uri) PendingOperation * acceptFile a00252.html aa62e022018986504a09f1f74172c991d (qulonglong offset, QIODevice *output) static IncomingFileTransferChannelPtr create a00252.html aafd81dd707b1d9c150e3ff21f93d9b2f (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) static const Feature FeatureCore a00252.html acfa3edfc8e92758318b00454b6efd946 IncomingFileTransferChannel a00252.html a317d951472f8d1c2e0b8ac73f2654d22 (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature=IncomingFileTransferChannel::FeatureCore) Tp::IncomingStreamTubeChannel a00253.html Tp::StreamTubeChannel virtual ~IncomingStreamTubeChannel a00253.html a2f925c020b2a8dc99159fb9c198b80bf () PendingStreamTubeConnection * acceptTubeAsTcpSocket a00253.html a81e4fdcff28b00da56f0f77b7d68eeec () PendingStreamTubeConnection * acceptTubeAsTcpSocket a00253.html a6f8cc5a73e228b693f97917bbafdcf11 (const QHostAddress &allowedAddress, quint16 allowedPort) PendingStreamTubeConnection * acceptTubeAsUnixSocket a00253.html a85b4649b59e5ff5b1e501dad211e6ec1 (bool requireCredentials=false) static IncomingStreamTubeChannelPtr create a00253.html a89b4f36f0440a9e270c1401c663ada3f (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) static const Feature FeatureCore a00253.html a8d39c272c1f678db8e3fc325cd32ece6 IncomingStreamTubeChannel a00253.html a58c730a7e80a26fcf4e5a6f972076944 (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature=IncomingStreamTubeChannel::FeatureCore) Tp::LocationInfo a00260.html LocationInfo a00260.html acd9932c167e16f55340c294ee984d961 () LocationInfo a00260.html ad7a03b4ecce6ca4caad7d3086d110a59 (const QVariantMap &location) LocationInfo a00260.html a5ee2bd51ea377d912b033adb35d27ea5 (const LocationInfo &other) virtual ~LocationInfo a00260.html a4711ec46f054df87b4f5711edeea0718 () bool isValid a00260.html a6279ae2f6334149758a631903160320c () const LocationInfo & operator= a00260.html aba0d32eefe42585c30aefbf229f5fa89 (const LocationInfo &other) QString countryCode a00260.html aa2b40311c7436830f7aba2cbbad88036 () const QString country a00260.html a91723726d39ec0ec61f800fc263f620c () const QString region a00260.html a501639f209f2b42d45d2935ec87dc71d () const QString locality a00260.html aead56e91289b69adede588cd2de93e7c () const QString area a00260.html af56b6b0234c34c30c3366b6071753265 () const QString postalCode a00260.html a2599452941ac36b3bb979be3bacb1d65 () const QString street a00260.html aac639f13871160fffbda6579ce6b2327 () const QString building a00260.html a7f8166a18e3f633640230d5c53185e69 () const QString floor a00260.html a2af07738c7ffe45f703fc55a50b49921 () const QString room a00260.html aa562af7a5a6a12af7caab608b0b5107d () const QString text a00260.html a742e2e00504806d02e862a8429ffbf19 () const QString description a00260.html ad14a780af31a3cf634b8024496011671 () const QString uri a00260.html a41730be987e016cbcb9ddc4e1eae855e () const QString language a00260.html aefa38e6c6f9837974cae438f4ae68c15 () const double latitude a00260.html af37525c5d85ba8db4e1dcbe009dc244f () const double longitude a00260.html adc11a6ac2b877f10741e6f36795d0a5c () const double altitude a00260.html a44e6ca6341d2afadfb4d477015ff763f () const double accuracy a00260.html a1c7c6b92becfc24db142a21781c74f67 () const double speed a00260.html ab2d1e382375c5df18ab6173013ddb0e9 () const double bearing a00260.html aa3ba2dd02d194ecec25ddd49ea580ca1 () const QDateTime timestamp a00260.html aefdc0b6a3da88602ff6c27ec9bd1a114 () const QVariantMap allDetails a00260.html a0fab2cac03b8114ae6d5ee9a26134f44 () const Tp::MessageContentPart a00282.html MessageContentPart a00282.html af3bcd49e8f0e5425d91d6572ec441da0 () MessageContentPart a00282.html acf07c09fefeb7b996a58fcc99c4d053a (const MessagePart &mp) MessageContentPart a00282.html a108edee8ed3430b0c2bdc82ea0e2f2e6 (const MessageContentPart &other) ~MessageContentPart a00282.html ad79450f106c1723b95b7a265603092a7 () bool isValid a00282.html ab8daf140eb4dd3fa7464ed0fbebf3781 () const MessageContentPart & operator= a00282.html aa211e6ca7171480591dee1160bdbee00 (const MessageContentPart &other) bool operator== a00282.html a3f8c2c5a7478a4212fd8ab20e3e34c07 (const MessageContentPart &other) const MessagePart barePart a00282.html ac421ec6ee4ed28105a0689f3049dfeb1 () const Tp::MessageContentPartList a00283.html MessageContentPartList a00283.html a2708056ac491f1887f5f84bd4210268e () MessageContentPartList a00283.html a225066eafa3e72646c7e292de4962d40 (const MessagePart &mp) MessageContentPartList a00283.html a04a39163a6edd529fda90f9cb2505120 (const MessagePartList &mps) MessageContentPartList a00283.html aaf724d1c1367409e2c17e4d44921e0b1 (const MessageContentPart &mcp) MessageContentPartList a00283.html a91fa92965705e60e99d6291fd48d86c6 (const QList< MessageContentPart > &other) MessagePartList bareParts a00283.html a30268e7538f093cc8b70609ad38a15ef () const Tp::Message a00281.html Message a00281.html a613729fbb1dd2e2a8280c0218055ca9c (ChannelTextMessageType, const QString &) Message a00281.html a12ad1f6c77609ba2cd3d3d081c3c8d25 (const Message &other) ~Message a00281.html aef167f02f084bb4950fe5daf855281c8 () Message & operator= a00281.html a5688d85413d3be1c03d4db54e80dcc9e (const Message &other) bool operator== a00281.html aae5944d0f2387b9a5e4d205a57d2f31a (const Message &other) const bool operator!= a00281.html ab44f1b185f23f41795e7bfc29c6d4ac1 (const Message &other) const QDateTime sent a00281.html a50b3c6c7a03d2c2f132915b9087c0a19 () const ChannelTextMessageType messageType a00281.html ab17c74b432798fa117369cb88a67ea61 () const bool isTruncated a00281.html aaa663a7149c35528f19b997f83c65601 () const bool hasNonTextContent a00281.html afe7b6f02defee51318d53c1630e218f7 () const QString messageToken a00281.html a61584c03abf795aea21205f50ec81bfa () const bool isSpecificToDBusInterface a00281.html aab23c41b78a78d35ad921ad5a53fc975 () const QString dbusInterface a00281.html ae18bd32e2fb4437345f247bb29e63043 () const QString text a00281.html a7707a341dabe4ee5f99fc0247d891fe6 () const MessagePart header a00281.html a7fe6f84f66c787956723f04ab92c808a () const int size a00281.html ae50f4914b58c68fa4f78378047b4ea3f () const MessagePart part a00281.html a6162eee67ff8d4bfb3707c52bdac93ba (uint index) const MessagePartList parts a00281.html ab259a109bc86cf1435a63374ac3fb29c () const Tp::ReceivedMessage a00361.html Tp::Message Tp::ReceivedMessage::DeliveryDetails ReceivedMessage a00361.html ac9c8a6c2de8f85e3497ae55763b2666d (const ReceivedMessage &other) ReceivedMessage & operator= a00361.html a3e813666af59e9498543662a1bfcc3d6 (const ReceivedMessage &other) ~ReceivedMessage a00361.html a89ac72b35d58e961d4e3d8e110d9849b () QDateTime received a00361.html ae9457ab365ace5059be01881d8382891 () const ContactPtr sender a00361.html a651d3313775c1796b7fb17459eb6796e () const QString senderNickname a00361.html ab4bc0b337115d4b7bac22d0f506800b1 () const QString supersededToken a00361.html aa6cc806bb2a649979ddb3fbdf12bac19 () const bool isScrollback a00361.html af57030d9d5b0e0ded2cbea4c1cc1c03f () const bool isRescued a00361.html a58bbb6f3c9bfc3c941f316e4e89aaa58 () const bool isDeliveryReport a00361.html a2bfe8450380543052b189f6ff4dda269 () const DeliveryDetails deliveryDetails a00361.html a522811cc1187229c243abaab9a86dad2 () const bool isFromChannel a00361.html aa18322677acc4e0f8600cfe1c36b0e1e (const TextChannelPtr &channel) const Tp::ReceivedMessage::DeliveryDetails a00225.html DeliveryDetails a00225.html aaf48e2cb49dc4ec6749221edadad4ef7 () DeliveryDetails a00225.html acd6bcdafb4b329e17cd961439ff7b4e2 (const DeliveryDetails &other) ~DeliveryDetails a00225.html aac75c7a3c5174a27e7726098c0bc1125 () DeliveryDetails & operator= a00225.html a4f2ef888429475dd225bc09a04b52ca6 (const DeliveryDetails &other) bool isValid a00225.html ac76a13b12fbabc831ffb8efffab8e4e4 () const DeliveryStatus status a00225.html a432c4ab80fb3bce56cea36e63312a1af () const bool hasOriginalToken a00225.html a58ed2c6b3335480aedff73522c2cd7da () const QString originalToken a00225.html a728038f8e72138f868a7e8dd58d16775 () const bool isError a00225.html ac462e2ad27c59029ba06815e08464474 () const ChannelTextSendError error a00225.html ac7812446b2dcfd0aeb0c873e26880f94 () const bool hasDebugMessage a00225.html af581dc9573c78becf6aaa855fa0fcd5f () const QString debugMessage a00225.html af508c6ed4d29ab2644b8cd49b0951417 () const QString dbusError a00225.html a3af4edab81649d45a3a75d746640f1e8 () const bool hasEchoedMessage a00225.html ac1015d544f2d0861668b020c26d37f0a () const Message echoedMessage a00225.html ad41858a3ff01e2d6ad0d48b8c53a343d () const Tp::MethodInvocationContext a00287.html T1 T2 T3 T4 T5 T6 T7 T8 Tp::RefCounted MethodInvocationContext a00287.html a46aea8301afc328f226cef0276cecf55 (const QDBusConnection &bus, const QDBusMessage &message) virtual ~MethodInvocationContext a00287.html a14890ae9fe15a479b02bdcfa80c3fc25 () bool isFinished a00287.html afed5371f98647dd35b2f46eaa706d7f2 () const bool isError a00287.html a833f4d41875b5954d49b0a5d79a0ea32 () const QString errorName a00287.html a00279091ddb8c7eb16f33c9b0fd578cb () const QString errorMessage a00287.html a56aaa54b6a4d73c16e273de93fab24c9 () const void setFinished a00287.html a178f52fefcc6ac93f1e9aef7c5c8b984 (const T1 &t1=T1(), const T2 &t2=T2(), const T3 &t3=T3(), const T4 &t4=T4(), const T5 &t5=T5(), const T6 &t6=T6(), const T7 &t7=T7(), const T8 &t8=T8()) void setFinishedWithError a00287.html accc180d53a757b3aa9bc9286dc464712 (const QString &errorName, const QString &errorMessage) Select< Index >::Type argumentAt a00287.html a8a4e5e0f5e5426ead7974adc6bf8e8f3 () const virtual void onFinished a00287.html a21ab9f2452e8c617275a49047fe8d385 () Tp::NotFilter a00291.html Tp::Filter virtual ~NotFilter a00291.html aa7b7d2ab12328884ff4ac84d52d7b880 () virtual bool isValid a00291.html a3c2f57defc9d77ebef94bb9c7be99fd4 () const virtual bool matches a00291.html aaa029bf9105fe39d2d106b9fe096f8ce (const SharedPtr< T > &t) const SharedPtr< const Filter< T > > filter a00291.html a98af04ea3fd767c5620813a6e52527af () const static SharedPtr< NotFilter< T > > create a00291.html a1d7c4f04dbf69ca810c690130e149648 (const SharedPtr< const Filter< T > > &filter=SharedPtr< const Filter< T > >()) Tp::Object a00292.html Tp::RefCounted void propertyChanged a00292.html a83a87f712a0c20755745880983977b7a (const QString &propertyName) virtual ~Object a00292.html a6f7137bb1763779fdb6babc91f2462c3 () Object a00292.html acd48c94dd2130fcd4ab80c44e3079b0c () void notify a00292.html ab082554e5af7e3271aa1486f86d74db7 (const char *propertyName) Tp::OptionalInterfaceFactory a00296.html DBusProxySubclass InterfaceSupportedChecking a00296.html a7d7b4eec46ac3258e70177f6e3e4937f CheckInterfaceSupported a00296.html a7d7b4eec46ac3258e70177f6e3e4937fa3656e4c2bd93aa3aac424933c316d655 BypassInterfaceCheck a00296.html a7d7b4eec46ac3258e70177f6e3e4937fa24a4d338ee86ab43371d960a1faedcd9 OptionalInterfaceFactory a00296.html a246a25e9db61df8f276dc16d2802e945 (DBusProxySubclass *this_) ~OptionalInterfaceFactory a00296.html a33a51382c8d11e0b2d2e5e38de96e490 () QStringList interfaces a00296.html afa2877d62298299d006b46d77fecc09e () const bool hasInterface a00296.html a98357110cdffae727bb8f2bee80cc281 (const QString &name) const Interface * optionalInterface a00296.html a420b5a495b76274faa02b24de38af1fa (InterfaceSupportedChecking check=CheckInterfaceSupported) const Interface * interface a00296.html a2ce7f206a9eee3da8bfa31a23b15283c () const void setInterfaces a00296.html ae57eceda64422bb29f0aa121609c1f19 (const QStringList &interfaces) Tp::OrFilter a00297.html Tp::Filter virtual ~OrFilter a00297.html af285cea764f4d2ac71b5d5b4113b6198 () virtual bool isValid a00297.html a210066efb26ec9b627ce6be0fc7903bd () const virtual bool matches a00297.html a97895e9d3a7403af8a6acd821ad11cf4 (const SharedPtr< T > &t) const QList< SharedPtr< const Filter< T > > > filters a00297.html a22ae917c2b95bfb87ab52e8d72843822 () const static SharedPtr< OrFilter< T > > create a00297.html a7b688cfcd68bd5ff686d33f79711760c (const QList< SharedPtr< const Filter< T > > > &filters=QList< SharedPtr< const Filter< T > > >()) Tp::OutgoingDBusTubeChannel a00298.html Tp::DBusTubeChannel virtual ~OutgoingDBusTubeChannel a00298.html a1032217cac99b5dd7feb7258835eb034 () PendingDBusTubeConnection * offerTube a00298.html a0371e766254d1ed291710c7aad569147 (const QVariantMap &parameters, bool allowOtherUsers=false) static OutgoingDBusTubeChannelPtr create a00298.html a6b225327deb5419e2847921e32adae54 (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) OutgoingDBusTubeChannel a00298.html a7c2b92e79a1c4bb1e7f96b2578b85900 (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) Tp::OutgoingFileTransferChannel a00299.html Tp::FileTransferChannel virtual ~OutgoingFileTransferChannel a00299.html a0a0f0b03b7ecb01d7956c15419850b09 () PendingOperation * provideFile a00299.html a19cc9cd68441c5d6e260eab8d9ca2d1b (QIODevice *input) static OutgoingFileTransferChannelPtr create a00299.html a92d1221187f9df07306e7b843452743a (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) static const Feature FeatureCore a00299.html af5a53b23a870cb4893d15eaad616f7b6 OutgoingFileTransferChannel a00299.html aea465cc98269324bc065920ff279a244 (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature=OutgoingFileTransferChannel::FeatureCore) Tp::OutgoingStreamTubeChannel a00300.html Tp::StreamTubeChannel virtual ~OutgoingStreamTubeChannel a00300.html a7478575299ff7c71db7acba895700c6f () PendingOperation * offerTcpSocket a00300.html a143e2df36036e3f7c9f86a5f696e5bcf (const QHostAddress &address, quint16 port, const QVariantMap &parameters=QVariantMap()) PendingOperation * offerTcpSocket a00300.html a6376568f5d86c3997a582deb6d28c827 (const QTcpServer *server, const QVariantMap &parameters=QVariantMap()) PendingOperation * offerUnixSocket a00300.html ac04f5fb54e80dd25c3d3da89d4d574a2 (const QString &socketAddress, const QVariantMap &parameters=QVariantMap(), bool requireCredentials=false) PendingOperation * offerUnixSocket a00300.html a1c142043399705135f62a7d7ff8da15f (const QLocalServer *server, const QVariantMap &parameters=QVariantMap(), bool requireCredentials=false) QHash< uint, Tp::ContactPtr > contactsForConnections a00300.html abbbc29e5d3f18a86b1fac19fe7e71f17 () const QHash< QPair< QHostAddress, quint16 >, uint > connectionsForSourceAddresses a00300.html ab98c4b3e65fa2cc70fe079e8ac72fb30 () const QHash< uchar, uint > connectionsForCredentials a00300.html a45842cc49b6e821b17146289a042ac3f () const static OutgoingStreamTubeChannelPtr create a00300.html a4a375cccbb5d552527a777fd9180c344 (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) static const Feature FeatureCore a00300.html a7ee76e14dcce84aa8a26474edd4160f2 OutgoingStreamTubeChannel a00300.html a3189fcc8ef8fbfa5367a7cb2a43218d8 (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature=OutgoingStreamTubeChannel::FeatureCore) Tp::PendingAccount a00305.html Tp::PendingOperation ~PendingAccount a00305.html ac3693443726401777a9ada4098fc41ce () AccountManagerPtr manager a00305.html a58c76d3eb8843ba9b0d191fdd80a2f2b () const AccountPtr account a00305.html aeb65df44f64d1cb3dcfe64a2b7e18478 () const Tp::PendingCaptchas a00307.html Tp::PendingOperation virtual ~PendingCaptchas a00307.html a0593edc35de52ae150ab58d8abb3ba9c () Captcha captcha a00307.html ae6746aadee31c30c7fe5d7a7918082d0 () const QList< Captcha > captchaList a00307.html ae095ac1c3f4a87bf1b83a9ff223907f7 () const bool requiresMultipleCaptchas a00307.html a6ff5d2b83ec819c26b323ebf2a786309 () const Tp::PendingChannelRequest a00310.html Tp::PendingOperation void channelRequestCreated a00310.html a419bb698a1867ed6993ada08bd86071c (const Tp::ChannelRequestPtr &channelRequest) ~PendingChannelRequest a00310.html ab01dc2cc41e87a3b54ae4ab04b1fef06 () AccountPtr account a00310.html aa7cb505587ef436e8764cdf5d7cf3ec7 () const ChannelRequestPtr channelRequest a00310.html a6f5b7561344b8430fd5f5ec0a3eeed43 () const PendingOperation * cancel a00310.html a7402674c33f709c5de212c544af8954d () Tp::PendingChannel a00308.html Tp::PendingOperation ~PendingChannel a00308.html ae77602d6533a88ff261daa51cebd9c55 () ConnectionPtr connection a00308.html ad3b1c8a68ce7999d2457bd7fa2536a81 () const bool yours a00308.html a19aec0edcb732c12eddd2b388a11c94e () const const QString & channelType a00308.html ac46b44e368b45f274b43625c48ae76ba () const uint targetHandleType a00308.html ad99154ee5c89e62e02341f688d54e05d () const uint targetHandle a00308.html abc8e08deea949fec59591954c4375ac2 () const QVariantMap immutableProperties a00308.html a8b2b2ea1c7d4c201ee3125e143372e14 () const ChannelPtr channel a00308.html a11fb7e7f32712a4f9a25aaf59687d2cb () const HandledChannelNotifier * handledChannelNotifier a00308.html a49dff9f3299e5c04d6b7c124799e959c () const Tp::PendingConnection a00312.html Tp::PendingOperation ~PendingConnection a00312.html ac8556625954214418e547378d15e5c46 () ConnectionManagerPtr manager a00312.html a6f8d648991ed255737259a46ba855376 () const ConnectionPtr connection a00312.html ab44e4f69a5b9ad8d1f6f6efd7011c5c2 () const Tp::PendingContactAttributes a00313.html Tp::PendingOperation ~PendingContactAttributes a00313.html a6955ad38883a04b599d12b269e4e4789 () ConnectionPtr connection a00313.html a84508852a763e941cf714a21583e8f16 () const const UIntList & contactsRequested a00313.html a53d775cd9fa163889ef4fc98e51cee11 () const const QStringList & interfacesRequested a00313.html a313df63e7b4773a4208c0fe3242a899e () const bool shouldReference a00313.html acf0d47bd44c1dfc70d72e4ea4af780ec () const ReferencedHandles validHandles a00313.html a076602d693d8ecd8f166ff50713310ae () const UIntList invalidHandles a00313.html a0419dabebe76ec42b539c37b07d5562a () const ContactAttributesMap attributes a00313.html af1970cbdb567bd860044f38cbf2d1d9d () const Tp::PendingContactInfo a00314.html Tp::PendingOperation ~PendingContactInfo a00314.html ac01127713823a2eab21580484e84b095 () ContactPtr contact a00314.html a4aa3f90209cd0c9f50a944afb3d3d86b () const Contact::InfoFields infoFields a00314.html ab2593668b4228c37203b1044bb587c87 () const Tp::PendingContacts a00315.html Tp::PendingOperation ~PendingContacts a00315.html ab8224a6242f1946d498c1666aea1ba04 () ContactManagerPtr manager a00315.html a8e06cf789aac390d554e42cd99451d26 () const Features features a00315.html a939e3ec49dbb6446e03198243d961d2d () const bool isForHandles a00315.html a68d8b12ed0791dabcee42743f2a7f776 () const UIntList handles a00315.html ae78da1d9cacdbd73352742875ffefb01 () const bool isForIdentifiers a00315.html ae8c8770929e0f14a730292f4f686078e () const QStringList identifiers a00315.html a82b71f1fb36cadba06499b3aab167a31 () const bool isForVCardAddresses a00315.html ac27c3adc68476adcaa5badb3ecdc11a1 () const QString vcardField a00315.html a9a7b281b9261a3a582a8391f93d528db () const QStringList vcardAddresses a00315.html a5fc080437fe9018f3df091beef383b80 () const bool isForUris a00315.html a840b2969e0ee4af0acdbab18f71d622d () const QStringList uris a00315.html a5dbc4e665df8eb73c0e5f08348eaa63a () const bool isUpgrade a00315.html ae1eb097fc59e8dea81998e1022a3449e () const QList< ContactPtr > contactsToUpgrade a00315.html ace4a8db43e7e037729301f06a797162d () const QList< ContactPtr > contacts a00315.html a27a390a2f721f8c269457eabea7c8688 () const UIntList invalidHandles a00315.html ad0044a47f813739bac9d237652c944f5 () const QStringList validIdentifiers a00315.html a920b538b9b1f25dbe752ec740707dc08 () const QHash< QString, QPair< QString, QString > > invalidIdentifiers a00315.html a4827db6541f54c47304b7016ae6b8ef6 () const QStringList validVCardAddresses a00315.html aa52e2555f2095bd2d24e59ee33fc4267 () const QStringList invalidVCardAddresses a00315.html aee40d0b9b89781807ee474bacd2ac732 () const QStringList validUris a00315.html a9ed889b00c55e9515434c995a7934ace () const QStringList invalidUris a00315.html a426652ce26ca0b16bc8d882c0d08710e () const Tp::PendingDBusTubeConnection a00316.html Tp::PendingOperation virtual ~PendingDBusTubeConnection a00316.html a264219243cd58011f529b613c9a4901f () QString address a00316.html a70a1c57f3eb7102d792b7b7f1ac00f9b () const bool allowsOtherUsers a00316.html a87f19e3f9b1873a95f7cabeb75df0f85 () const Tp::PendingDebugMessageList a00317.html Tp::PendingOperation virtual ~PendingDebugMessageList a00317.html af8e140c6591f704c7f7da18b4c6c943c () DebugMessageList result a00317.html aabff8fe3bedb58748b8d7aba691bd9d5 () const Tp::PendingHandles a00319.html Tp::PendingOperation ~PendingHandles a00319.html a172397f19a1210f05607ef590c7de78f () ConnectionPtr connection a00319.html a6a5444e8f92fea9470b420c156afe7f6 () const HandleType handleType a00319.html a6030f3b78dd401648b4df7f9450718c2 () const bool isRequest a00319.html a8998c31c8bc58004556d00da296c1a42 () const bool isReference a00319.html a974ddc8bddde79caef0a9e3a79ee7999 () const const QStringList & namesRequested a00319.html abcbc041a1c3503944fb1a0b46efbe8cb () const QStringList validNames a00319.html ab4dd0740e8aaedacc945c1470d67d63d () const QHash< QString, QPair< QString, QString > > invalidNames a00319.html af966a0dc9e6d69d66193b7ddca23aec8 () const const UIntList & handlesToReference a00319.html ac80bd40f0e27b8eed444fe2cbf54e472 () const ReferencedHandles handles a00319.html ac524bbfe23f411945a48b30c42409860 () const UIntList invalidHandles a00319.html aa101cc641ddfa3e21ce2cd5e18e741f5 () const Tp::PendingOperation a00320.html void finished a00320.html addbb8c4462019ffdf19095a31da0cc7a (Tp::PendingOperation *operation) virtual ~PendingOperation a00320.html abd218ec414d17ad5ac7d408f28118b91 () bool isFinished a00320.html adb775a9b977ebb85e1ee0473669f45b0 () const bool isValid a00320.html a2b4e8575ad69c45cba0b2b070674c51f () const bool isError a00320.html a24440bb6d849af38b6e439cdca9e0707 () const QString errorName a00320.html a59a70ec4857b40d3355c2f336229216a () const QString errorMessage a00320.html ab17664ef188c153aed9fdac478ee8c76 () const void setFinished a00320.html a6ba0dd198408611c3afd272cde6b6702 () void setFinishedWithError a00320.html ab7cc7962607ab6729ade1c5e6e070a53 (const QString &name, const QString &message) void setFinishedWithError a00320.html a0a69e6672e2b34b51cdcabd807b8236e (const QDBusError &error) PendingOperation a00320.html aa3181e83c48ad81316f4fb3d081528d0 (const SharedPtr< RefCounted > &object) SharedPtr< RefCounted > object a00320.html aa25a577804897fb7f395fccf0fe17dd2 () const Tp::PendingReady a00321.html Tp::PendingOperation ~PendingReady a00321.html a371326df0d8cb7c9bc3814ba036ff608 () DBusProxyPtr proxy a00321.html a52478a85d09bcb9992fe566579c2ff27 () const Features requestedFeatures a00321.html a84584c9083eeccef5092180caf4ccca2 () const Tp::PendingSendMessage a00322.html Tp::PendingOperation ~PendingSendMessage a00322.html ac46961e744240a7b243a28e7070f18bb () TextChannelPtr channel a00322.html aafccbdb9bd56e8d0443b17adce917b0e () const ContactMessengerPtr messenger a00322.html a6475c825825b6cb59f9a462f433cb0ac () const QString sentMessageToken a00322.html aa11971307fe5692d57b17adb6cec5a13 () const Message message a00322.html acef01fc061fa1cfba70b5825b99012ef () const Tp::PendingStreamTubeConnection a00324.html Tp::PendingOperation virtual ~PendingStreamTubeConnection a00324.html a4815adbe7334a9b28f0624182bc9366b () SocketAddressType addressType a00324.html a118f4294bdcd6147f5b0a2101ecd4969 () const QPair< QHostAddress, quint16 > ipAddress a00324.html a242c0f1b29a0c668dd68fb801904c1d1 () const QString localAddress a00324.html a2c127932420bb7e8457f312f3a48a25c () const bool requiresCredentials a00324.html a3d4e4f0c2c2f0bcc0e41ed9c58a6d6ed () const uchar credentialByte a00324.html a1db89e668f068a85d06973c8cf759261 () const Tp::PendingStringList a00326.html Tp::PendingOperation PendingStringList a00326.html ac66dcbc0ca66e81c203c429cdf35c8bf (const SharedPtr< RefCounted > &object) PendingStringList a00326.html a82dc24036856a3adc3cd53bd7c282d2c (QDBusPendingCall call, const SharedPtr< RefCounted > &object) ~PendingStringList a00326.html a0860161359f8cd811fe9033c07cea130 () QStringList result a00326.html a5e7a0f39a6fc292d87e0f7bb7d618600 () const void setResult a00326.html a30db236d7c1aad1c2960bb5dad5f135c (const QStringList &result) Tp::PendingString a00325.html Tp::PendingOperation PendingString a00325.html a41630e61a68ecbc20178aab41071671f (QDBusPendingCall call, const SharedPtr< RefCounted > &object) ~PendingString a00325.html ab939af849371809be5b886082d57f6e4 () QString result a00325.html a588a2afab22f9ccf2bb28cf811f59f8a () const void setResult a00325.html adfbc254bb2b87bc10761ffa941787635 (const QString &result) Tp::PendingVariantMap a00330.html Tp::PendingOperation PendingVariantMap a00330.html a1ac92b5ce2c8bac5bf9580bce03b88c0 (QDBusPendingCall call, const SharedPtr< RefCounted > &object) ~PendingVariantMap a00330.html a6d734bc990c015f16853a4b77a09d2b3 () QVariantMap result a00330.html a49fe64d7aa599437d3320a72f82b4238 () const Tp::PendingVariant a00329.html Tp::PendingOperation PendingVariant a00329.html aefbef300b3530895ae15f66f83bd9705 (QDBusPendingCall call, const SharedPtr< RefCounted > &object) ~PendingVariant a00329.html afd0fe5fc5a08e6bf22adb4ff375991d6 () QVariant result a00329.html a886d4619e5ae41d2fc5c56c7dbce1c26 () const Tp::Presence a00332.html Presence a00332.html a96a70c850b08fc71caea5ec749e15ce2 () Presence a00332.html ade8370ac7fccded90deded2681b64e86 (const SimplePresence &sp) Presence a00332.html a6dbe459b9599f002c8b0dae7825f5c5f (ConnectionPresenceType type, const QString &status, const QString &statusMessage) Presence a00332.html adfeccff0083293393d7e3879f9d1820d (const Presence &other) ~Presence a00332.html a90c35e7258d25bcfb5f0f91a8885d515 () bool isValid a00332.html a6a73d3c0f64ef22bed94877703fd1ac1 () const Presence & operator= a00332.html af89abe9d87d1b2089276f5a9766ae8c3 (const Presence &other) bool operator== a00332.html afce6e0e73a14a8cc6028942ac3e89d36 (const Presence &other) const bool operator!= a00332.html a843d3323fafeba7842149c2b527098ba (const Presence &other) const ConnectionPresenceType type a00332.html a7a8cc174c58706f94c0bfe876a35cfdd () const QString status a00332.html ac286a2fdc3b3b2ea5d3b928317a0f3f2 () const QString statusMessage a00332.html a7aa0f00c4dbc323ce016ea5b42fa853b () const void setStatus a00332.html af928b8621d7beb4a2214a4fb74be3bfd (const SimplePresence &value) void setStatus a00332.html ae0a515cfe66d15bb9b12e5bdbc8c0096 (ConnectionPresenceType type, const QString &status, const QString &statusMessage) void setStatusMessage a00332.html a33b2f3e37e97cba80ade13831a9971cc (const QString &statusMessage) SimplePresence barePresence a00332.html a04bf087ffd4f162aaac2cb34f3da36e3 () const static Presence available a00332.html ae57a9a74c1253fecc40b8d6b7c0f25b7 (const QString &statusMessage=QString()) static Presence chat a00332.html a862e03a0bb2b8569728e83ea35600185 (const QString &statusMessage=QString()) static Presence away a00332.html a4af1f7ad72889f31d26a97648448d8a7 (const QString &statusMessage=QString()) static Presence brb a00332.html ae26ac946eb3201036637422f8e4f61df (const QString &statusMessage=QString()) static Presence busy a00332.html a072c2a50fb8e1a961dc5083ef480c17d (const QString &statusMessage=QString()) static Presence dnd a00332.html ad7b794b8dd66cbd4c5fb4bc4ee749bd9 (const QString &statusMessage=QString()) static Presence xa a00332.html a11047b8f34bb654e7e92e4c9239aafda (const QString &statusMessage=QString()) static Presence hidden a00332.html a549b8e3b0e40ed747bce2fd33d9d9b8a (const QString &statusMessage=QString()) static Presence offline a00332.html a40f43f74e4393a1f09cc825a3749127a (const QString &statusMessage=QString()) Tp::PresenceSpec a00334.html SimpleStatusFlag a00334.html a6294fa3935e9d72c9b16bc7ae6f0f43b NoFlags a00334.html a6294fa3935e9d72c9b16bc7ae6f0f43ba826c52c5726fa08b2da3dcfd06bcad72 MaySetOnSelf a00334.html a6294fa3935e9d72c9b16bc7ae6f0f43bac4d36e8bd03da9355dcc33df98240533 CanHaveStatusMessage a00334.html a6294fa3935e9d72c9b16bc7ae6f0f43bacdbdf1fb73e5c957284bf87cd1b45558 AllFlags a00334.html a6294fa3935e9d72c9b16bc7ae6f0f43bac502234b63b83950f24c0c310366ea3f Q_DECLARE_FLAGS a00334.html a7b4d5c4934ca67a3445a52bf1f6695c1 (SimpleStatusFlags, SimpleStatusFlag) PresenceSpec a00334.html ab1c782008bd33b0a26bd4d0419dc4a04 () PresenceSpec a00334.html ae0bc2d7c1e665f83d0d900f5450ac81d (const QString &status, const SimpleStatusSpec &spec) PresenceSpec a00334.html a1944e7a700629dddb24f5f5397e3e1dd (const PresenceSpec &other) ~PresenceSpec a00334.html a7a09bd19d8ab43e1b6f539a80a33c833 () bool isValid a00334.html af3a66aa0ee3c0fee122c60651e60feab () const PresenceSpec & operator= a00334.html a808e70be9272692b483010cd6e437816 (const PresenceSpec &other) bool operator== a00334.html a3ac00dcab839ada97b5f88cd2325ffac (const PresenceSpec &other) const bool operator!= a00334.html a25e0510745fa0a38921a599b6b111621 (const PresenceSpec &other) const bool operator< a00334.html a2ecc010db4c39cd1691a3e2b4dd24845 (const PresenceSpec &other) const Presence presence a00334.html a8d0096c7f43561d271339298e59a5811 (const QString &statusMessage=QString()) const bool maySetOnSelf a00334.html a89aa430b9e06468da80839cb48d5607a () const bool canHaveStatusMessage a00334.html aa2b5cc60c440ec3c5beb0a41aa0b0767 () const SimpleStatusSpec bareSpec a00334.html a9c3e20b33f8eba2d6e4510b4bf7c0c54 () const static PresenceSpec available a00334.html a166f068862651ec515434d0b4c627c8b (SimpleStatusFlags flags=AllFlags) static PresenceSpec chat a00334.html a25e6e844983f573b6e4f0481ccb92d05 (SimpleStatusFlags flags=AllFlags) static PresenceSpec pstn a00334.html a4e00877bdc035ad68dbabd5859387b6f (SimpleStatusFlags flags=CanHaveStatusMessage) static PresenceSpec away a00334.html a0077753a4794072f1dc2a28ec339884a (SimpleStatusFlags flags=AllFlags) static PresenceSpec brb a00334.html a05d321109834281269dbdb9ddd36de2e (SimpleStatusFlags flags=AllFlags) static PresenceSpec dnd a00334.html a96bebd17f5505a948e571ae0c7cfe974 (SimpleStatusFlags flags=AllFlags) static PresenceSpec busy a00334.html abe843961054d9bed1ce4d44203f9facd (SimpleStatusFlags flags=AllFlags) static PresenceSpec xa a00334.html a6a5643f89324ee1aea9fdf580f6c01e6 (SimpleStatusFlags flags=AllFlags) static PresenceSpec hidden a00334.html a983b5ade44d215a36e30440a9257092a (SimpleStatusFlags flags=AllFlags) static PresenceSpec offline a00334.html ab8246201702d9addbb07e77a32995290 (SimpleStatusFlags flags=CanHaveStatusMessage) static PresenceSpec unknown a00334.html a3756025e5ba6f43ed01e425ac36f472a (SimpleStatusFlags flags=CanHaveStatusMessage) static PresenceSpec error a00334.html aad51d2250497791649403ec24c128b0c (SimpleStatusFlags flags=CanHaveStatusMessage) Tp::PresenceSpecList a00335.html PresenceSpecList a00335.html a7b98b261c2ce061f961f8357465890fc () PresenceSpecList a00335.html a523d793dd49b562f8be0a500a1888ca8 (const SimpleStatusSpecMap &specMap) PresenceSpecList a00335.html a7e5fa4aa0323fbb963b14954c375e377 (const QList< PresenceSpec > &other) QMap< QString, PresenceSpec > toMap a00335.html a11014e8df8549c38ae65be9207f0d1ab () const SimpleStatusSpecMap bareSpecs a00335.html aad90b13b4b097c8654837411c0d02c31 () const Tp::ProfileManager a00337.html Tp::Object Tp::ReadyObject ~ProfileManager a00337.html a53b45f0148b2a6f01af866fb4088fb3d () QList< ProfilePtr > profiles a00337.html a77cec343b3b63fd443c51336e36b2ed5 () const QList< ProfilePtr > profilesForCM a00337.html adaf060205699c875f9f16cdd070b2349 (const QString &cmName) const QList< ProfilePtr > profilesForProtocol a00337.html a6e534df6f7498ba54b21cc2b207aa24e (const QString &protocolName) const ProfilePtr profileForService a00337.html a3117435a97cd88308868e7fc348a1567 (const QString &serviceName) const static ProfileManagerPtr create a00337.html aabe816d03b51d6e975734f27a2485be0 (const QDBusConnection &bus=QDBusConnection::sessionBus()) static const Feature FeatureCore a00337.html aaf02704b18d2c007a88b2e9c3131f0a7 static const Feature FeatureFakeProfiles a00337.html a219b8d6679b8f0a81f0a142bc87405ff Tp::Profile a00336.html Tp::RefCounted Tp::Profile::Parameter Tp::Profile::Presence QList< Parameter > ParameterList a00336.html a8a9bf02803f8c32ec6e1b9bc4aa0cbaa QList< Presence > PresenceList a00336.html a867270340de668a199cca09127efa614 ~Profile a00336.html a254e5bfc09abd2d556747b61eeeaf7e9 () QString serviceName a00336.html af95068a93b9573c6a6a80c0448f75d8a () const bool isValid a00336.html afa721c43ff4e93e9aa78deb295d5423b () const bool isFake a00336.html ac132749ecde1174657a71583556f17a7 () const QString type a00336.html a4d7bd00d0fa793f014c5213963d96be7 () const QString provider a00336.html a720035f806ff8f7ef67fefe0b5678a8f () const QString name a00336.html a4d0ffc991c72d5f9d82f27a4f6d135b3 () const QString iconName a00336.html afbd67c3974952fa6bdec41725d2b2ab8 () const QString cmName a00336.html a5746246892811f2685d705f3df972a8a () const QString protocolName a00336.html a2ecc5dd4d2a01dc32b7c45a5949d2d24 () const ParameterList parameters a00336.html a5d6f116d5e3af12fa0d447527efb7951 () const bool hasParameter a00336.html ad1bf70dbd0dba498e392f6ebbc837814 (const QString &name) const Parameter parameter a00336.html a00efaa4ae6abf7c8000e56366a2f04a4 (const QString &name) const bool allowOtherPresences a00336.html aa07a1d453ecafba5f64cfa7917a729a1 () const PresenceList presences a00336.html adf018fe2a706aab0be5a990a2b9623c3 () const bool hasPresence a00336.html ae35fe9f8e18ca63660b5d3c4cca38604 (const QString &id) const Presence presence a00336.html a6cd4e7b53395860dd0569f2d4714ffb2 (const QString &id) const RequestableChannelClassSpecList unsupportedChannelClassSpecs a00336.html a6dbd41f08550fe89fa75aa1ba7d8d4c5 () const static ProfilePtr createForServiceName a00336.html a8446f0b88bd7d2a5fe2802adf8114a1e (const QString &serviceName) static ProfilePtr createForFileName a00336.html aa726deb22f11df10d280ff7f14503000 (const QString &fileName) Tp::Profile::Parameter a00301.html Parameter a00301.html a358c97ef8cd49bdf63baeecdeedbf891 () Parameter a00301.html ab4c0f9d9b23674c7098d1a18f71a8a21 (const Parameter &other) Parameter a00301.html adc559e98b20fe5181a2e8124d5e313a4 (const QString &name, const QDBusSignature &dbusSignature, const QVariant &value, const QString &label, bool mandatory) ~Parameter a00301.html adc8332a978c58860a9c9a7a4b7e8a43a () QString name a00301.html a21f81519b616e1f00db6fe6e78ee6df1 () const QDBusSignature dbusSignature a00301.html a593b4c88a65c9256eda7117d6729a4f7 () const QVariant::Type type a00301.html a1f492fe97ba2407b48939b2f2bd812db () const QVariant value a00301.html a8212a38eeec78c26708a95c68837b9e9 () const QString label a00301.html a99664f72a426b1d95a3c28899c5cfd12 () const bool isMandatory a00301.html adee65800a07193a6315c166d86b6c89e () const Parameter & operator= a00301.html adda67f82550664474a6547f432f78b94 (const Parameter &other) Tp::Profile::Presence a00333.html Presence a00333.html acef1b4d491e69a92f13135744a9c021e () Presence a00333.html aba4f49631b241a651a5111051581c964 (const Presence &other) Presence a00333.html acddc434111b6f1cb7a9f403272ba981b (const QString &id, const QString &label, const QString &iconName, const QString &message, bool disabled) ~Presence a00333.html a6b5a513e98be36afd59d137f80a82e67 () QString id a00333.html a6b603e552cad1d802b001b9acaf61fa5 () const QString label a00333.html a549d3c6312401b4bb3f36a115619c74f () const QString iconName a00333.html a2717c5947fb5f3340ee522ad1966ebc2 () const bool canHaveStatusMessage a00333.html a73047af7349cf93e9e41af7de3120326 () const bool isDisabled a00333.html a621bebf1544c28e3456cbf1bee7246f7 () const Presence & operator= a00333.html aad73376aa58a3f26b33f371e1fe2cedb (const Presence &other) Tp::ProtocolInfo a00343.html ProtocolInfo a00343.html a38cc324bf94dbd1184841237c79a84a2 () ProtocolInfo a00343.html a800a7e31cace1c9175265f2e989402d2 (const ProtocolInfo &other) ~ProtocolInfo a00343.html a91408a030f9229026d34c5aafda95b78 () bool isValid a00343.html a2276cf69d524a1668e3dd7941f40225d () const ProtocolInfo & operator= a00343.html a49e4af6b520b5d07344195292d466c2a (const ProtocolInfo &other) QString cmName a00343.html aad7b00d30e5715a76bd8bc9207ba9256 () const QString name a00343.html a19ca863d985faa451355ff02ad273c4c () const ProtocolParameterList parameters a00343.html af6341b1c93f369f58b4bf34fbde158b3 () const bool hasParameter a00343.html a29925747aeafb70c778be86f4c5cb029 (const QString &name) const bool canRegister a00343.html af9a83845e067e872d25caa95491c3289 () const ConnectionCapabilities capabilities a00343.html a3a49bb3d427c0e35392a1291d822b800 () const QString vcardField a00343.html a208f75635d663c2299ee440eaa4affa6 () const QString englishName a00343.html a710f0ffd700cf32c3090b563e7627c14 () const QString iconName a00343.html a8e9e95ba9a562fbfd48bd87871b4adf8 () const PresenceSpecList allowedPresenceStatuses a00343.html aca52292a0c3a4b7173799f86666b9f1d () const AvatarSpec avatarRequirements a00343.html a5e11a069bffcce95683b3523929fce5d () const QStringList addressableVCardFields a00343.html ad351647e9fe18eb6d0f7e4f0fe807f43 () const QStringList addressableUriSchemes a00343.html ae55a1a1e910a519f77d18a7609b87c50 () const PendingString * normalizeVCardAddress a00343.html a6e9008f57748af200c4de3cd25e4f001 (const QString &vcardField, const QString &vcardAddress) PendingString * normalizeContactUri a00343.html a30a9af6b5f6087e20466f4261bf4c8e9 (const QString &uri) Tp::ProtocolParameter a00348.html ProtocolParameter a00348.html a90ddaf78a98917fe0a0d9e9acdc002c5 () ProtocolParameter a00348.html a4c85dca20be36721db6f5585be6771dd (const ParamSpec &spec) ProtocolParameter a00348.html afaa06616523630991cf167162088d8ea (const QString &name, const QDBusSignature &dbusSignature, ConnMgrParamFlags flags, QVariant defaultValue=QVariant()) ProtocolParameter a00348.html a2d090d3d6ce7df281643f110b0de3faa (const QString &name, const QString &dbusSignature, ConnMgrParamFlags flags, QVariant defaultValue=QVariant()) ProtocolParameter a00348.html a267a013144db39bf11158606d37b324e (const ProtocolParameter &other) ~ProtocolParameter a00348.html a3be3d2816a80fd6950ec1b6bbcfe3166 () bool isValid a00348.html add35e63e47f0ec127058637b6833c6b0 () const ProtocolParameter & operator= a00348.html a5687ebffb149510e372a3d5a26f5f980 (const ProtocolParameter &other) bool operator== a00348.html a9273c5097017978575a7a24b2ffcfb68 (const ProtocolParameter &other) const bool operator== a00348.html a7e9360e1d542115457a165c1913de7fe (const QString &name) const bool operator< a00348.html a3f2907ae828ba431408bf8a385388570 (const ProtocolParameter &other) const QString name a00348.html a8e5512a1713cf7c7f2ca1d11ba2538dc () const QDBusSignature dbusSignature a00348.html ab5eb32d9db8e250cb16c1dd67e413ecb () const QVariant::Type type a00348.html a7e7ba2fa9af014cec73c1c3de779a460 () const QVariant defaultValue a00348.html a5956eab64603a40fccfee57368c2a06f () const bool isRequired a00348.html ac615194164024066351377420ac84fe5 () const bool isSecret a00348.html a2fe397df6298ec27c0cdce9aa0fa4c8e () const bool isRequiredForRegistration a00348.html a7a034c5109455e77f02771ec08cd0197 () const ParamSpec bareParameter a00348.html abe99920e781fcb0f3881cfa23ccea4b4 () const Tp::ReadinessHelper a00359.html Tp::ReadinessHelper::Introspectable void(* IntrospectFunc a00359.html a1c93c38499ba330d1223033312a6301d )(void *data) QMap< Feature, Introspectable > Introspectables a00359.html a9772a3ba90500d39ae046a0f78cc4313 void statusReady a00359.html ad7271e5c9ac578ab6fb0cf9f84b83c14 (uint status) ReadinessHelper a00359.html a42ea15fdd0372a1abaf21f037da5a081 (RefCounted *object, uint currentStatus=0, const Introspectables &introspectables=Introspectables(), QObject *parent=0) ReadinessHelper a00359.html a370a0600f4c2a0b0ffe8c7d9d0ffbeaf (DBusProxy *proxy, uint currentStatus=0, const Introspectables &introspectables=Introspectables(), QObject *parent=0) ~ReadinessHelper a00359.html a5b2099f2a9660904be3f00d856ede784 () void addIntrospectables a00359.html adf756bde4d31e07f08933136d27ab1a4 (const Introspectables &introspectables) uint currentStatus a00359.html adf8f1675c104eb53cd53ab2363f80313 () const void setCurrentStatus a00359.html a27ed6d75ea53d3d9de87361a5b097c53 (uint currentStatus) void forceCurrentStatus a00359.html a0989475603c687bba1d734632915d9bf (uint currentStatus) QStringList interfaces a00359.html a947a5ff49c06f137c489911edce86903 () const void setInterfaces a00359.html a60c286169a6b333174480d4757239b06 (const QStringList &interfaces) Features requestedFeatures a00359.html a7b61414b87758963692862eb95ba1f75 () const Features actualFeatures a00359.html a1a4eefff76e2af9479b1891d89a28236 () const Features missingFeatures a00359.html a62e65ec97addb12f411b0702d02477ec () const bool isReady a00359.html aa9c64cfe903e2a8b4abbcc57d52bb2a4 (const Feature &feature, QString *errorName=0, QString *errorMessage=0) const bool isReady a00359.html a4767d8f77dc6030b725e334ede46a431 (const Features &features, QString *errorName=0, QString *errorMessage=0) const PendingReady * becomeReady a00359.html ae0c4884228f5a255f1d19b6909cea323 (const Features &requestedFeatures) void setIntrospectCompleted a00359.html ab8781bfe0bd8b79587d87b727d286628 (const Feature &feature, bool success, const QString &errorName=QString(), const QString &errorMessage=QString()) void setIntrospectCompleted a00359.html a1050f6df9704362726848bbbdb86dcfa (const Feature &feature, bool success, const QDBusError &error) Tp::ReadinessHelper::Introspectable a00255.html Introspectable a00255.html a52395a621fc2bff0ceef3b47560c7032 () Introspectable a00255.html ae0bd6bac6bc26f9f80886b6e7162a505 (const QSet< uint > &makesSenseForStatuses, const Features &dependsOnFeatures, const QStringList &dependsOnInterfaces, IntrospectFunc introspectFunc, void *introspectFuncData, bool critical=false) Introspectable a00255.html a3ea22ec902c002212a44168a3d8027c4 (const Introspectable &other) ~Introspectable a00255.html ac946102e1f3f8966bcec25ae39397d15 () Introspectable & operator= a00255.html a0568a8db310748fc4ed31ed4874282ee (const Introspectable &other) Tp::ReadyObject a00360.html ReadyObject a00360.html a2de35741d4bf67914231a2e16b13dc64 (RefCounted *object, const Feature &featureCore) ReadyObject a00360.html a5abc100b28983140d7a543e774262b1f (DBusProxy *proxy, const Feature &featureCore) virtual ~ReadyObject a00360.html a81f5ea8834c094181c0b5fa5e222809d () virtual bool isReady a00360.html a344fc63eaef5278cbf938eaa1ed4c635 (const Features &features=Features()) const virtual PendingReady * becomeReady a00360.html ac02393f99a46725a4ffee32caaec13cc (const Features &requestedFeatures=Features()) virtual Features requestedFeatures a00360.html aa760fb2e39a85324384e337586a76360 () const virtual Features actualFeatures a00360.html a417478987395e7f7914527d44603450b () const virtual Features missingFeatures a00360.html a404a435b24239ae81bcd58c06da18478 () const ReadinessHelper * readinessHelper a00360.html a34fdf6035f206e96a34f71d5dd7cb4c9 () const Tp::ReferencedHandles a00363.html UIntList::const_iterator const_iterator a00363.html a44be16479cd4688554f54ea707fad540 UIntList::ConstIterator ConstIterator a00363.html aac96430ec59664371c358d33eac4d003 UIntList::const_pointer const_pointer a00363.html a1232840034944bc5e9781ebf04adda1c UIntList::const_reference const_reference a00363.html a2a66ff4d2f0ce2a5f6ce2db4e05713c0 UIntList::difference_type difference_type a00363.html a9b60a7c2c501c61c16c8a4b03ecb9754 UIntList::pointer pointer a00363.html af51cb0ab57afaa8a8c64d3d899fbf93f UIntList::reference reference a00363.html ac5430db5cea08986370b66c113f3ec63 UIntList::size_type size_type a00363.html a801c15bab7abce83b3b127b5d124faff UIntList::value_type value_type a00363.html a19d7736ecb9213b9ee62ee37dad3fde6 ReferencedHandles a00363.html a7c0247bad58184313805d49f77ab40a2 () ReferencedHandles a00363.html a9716f41c69fd96dcff5543d743f81959 (const ReferencedHandles &other) ~ReferencedHandles a00363.html ac4f24639a4f685754b6d335c7cf34348 () ConnectionPtr connection a00363.html abe65d3deadc65a4ad36c8d3c3f40130a () const HandleType handleType a00363.html a616892fad4eeeb41277c8a3ebe654d4f () const uint at a00363.html ac4de6225cb5a322e4e84df80da9c343a (int i) const uint back a00363.html aaa90dc57277940da6265d96944a4296c () const uint first a00363.html a2dced453fc4567ac367e22570d39210f () const uint front a00363.html a9cc8f4f2cc119d9c61d39564715f0598 () const uint last a00363.html af6cbcd88ef0eaadf9fccdcd72f167969 () const uint value a00363.html a63d0fc086c338613c713fea8776d5832 (int i, uint defaultValue=0) const const_iterator begin a00363.html a5527e35a154e7920db43a2623d8978dc () const const_iterator constBegin a00363.html a1207cbf0d38c21b68f35b552e02ebf16 () const const_iterator constEnd a00363.html a654c8a8df925635eb9f0aab7e3b678bb () const const_iterator end a00363.html a4115ac92d8f7aa40db6b64ef1709d7c3 () const bool contains a00363.html a1244de633fe115f9f341dcbd87fe7715 (uint handle) const int count a00363.html a3c45cdf6c5f444ed445754b0cf3403c8 (uint handle) const int count a00363.html ab039fb04bff715f34f78a8eb677d88a2 () const bool empty a00363.html a5c208ba568739a98883b23d324e6b973 () const bool endsWith a00363.html a82ea55b40ae561e534b8319e9b4236df (uint handle) const int indexOf a00363.html a3fa64718eebb9e8d74af349ced6b7799 (uint handle, int from=0) const bool isEmpty a00363.html ad1560c566c7c3bccc89c68661d1e9951 () const int lastIndexOf a00363.html af71265bd648ebdeba13ae556ed8710c0 (uint handle, int from=-1) const int length a00363.html a8f27fa0ca07df82524c3d0e0eec0854d () const ReferencedHandles mid a00363.html a6e9b096c8d7414ba89603bc6d01f5b15 (int pos, int length=-1) const int size a00363.html a6d8c1c47093c568d399c3f09f058c93d () const bool startsWith a00363.html abeb5948db1c8185860f8cb45a2f8cb20 (uint handle) const void append a00363.html aa7d426a715830e7dffdd03542343dc57 (const ReferencedHandles &another) void clear a00363.html a6aed11fb86143e62fc78d0ba900d1532 () void move a00363.html a55f5e6994b3f53e5861d2811a28b56da (int from, int to) void pop_back a00363.html ad87c1f4ae1fcea419b7fa2ed8aee457c () void pop_front a00363.html a06a81e183e231f85de2fa4d9862f3bce () int removeAll a00363.html a50b4e728492b35c58d426ef93c5b3fb4 (uint handle) void removeAt a00363.html adc48b88b4baf38956fed7812ffdee3a5 (int i) void removeFirst a00363.html a6bc386d784ad61bc985206e7e1679011 () void removeLast a00363.html a24e4c4fe77df5784bb88e4dc6d62b856 () bool removeOne a00363.html ad6ecd9f001140cbb0e68dc0223c0201b (uint handle) void swap a00363.html ae0876737bc259a3278dec639ed38cefb (int i, int j) uint takeAt a00363.html aa304cb33ebf4e8f529e02213f8a3edaa (int i) uint takeFirst a00363.html a7dfeeb81ce7767128bfd8419a1bf7b74 () uint takeLast a00363.html a51c9c5165cda03489d79de681e0924fe () bool operator!= a00363.html ad48b8b7806275304c5c5e1c81a08fce4 (const ReferencedHandles &another) const bool operator!= a00363.html ad3de7ff68313b8e8bab179860d31f7c5 (const UIntList &another) const ReferencedHandles operator+ a00363.html a8fc4e5d377f0ff8b001e362084681633 (const ReferencedHandles &another) const ReferencedHandles & operator+= a00363.html a233a8fa001e715fa937ac81b77c792fe (const ReferencedHandles &another) ReferencedHandles & operator<< a00363.html a72fe8343ff61cdc1744e01cc4f71b2e4 (const ReferencedHandles &another) ReferencedHandles & operator= a00363.html a3731e7a359e7e3270fa15bb8537451a2 (const ReferencedHandles &another) bool operator== a00363.html aef4ab4a755e07adea54b36576c21738c (const ReferencedHandles &another) const bool operator== a00363.html af04661dd087930a22b0280a3e5f3e8a6 (const UIntList &list) const uint operator[] a00363.html a4ab5b63d1e9e84740d47da6af8fabdc4 (int i) const UIntList toList a00363.html a810e5f08e6cd5467fc02dd8b4d82ddf1 () const QSet< uint > toSet a00363.html a133926c60915192d2b45700632a67aae () const std::list< uint > toStdList a00363.html a1b8427fcc2b9cfd084bde77b90d48180 () const QVector< uint > toVector a00363.html a5aca6acd9c9f249d1c1c31af5c215526 () const Tp::RequestableChannelClassSpec a00366.html RequestableChannelClassSpec a00366.html a9091a05f1770e30be329c1dc721585b8 () RequestableChannelClassSpec a00366.html ad7ee7d3aa731769fb10b3a86086a9ead (const RequestableChannelClass &rcc) RequestableChannelClassSpec a00366.html abba4c19436be5709895e46318d2be6d4 (const RequestableChannelClassSpec &other) ~RequestableChannelClassSpec a00366.html ae1587b6bab1b1f07ec9c673ce69c4a84 () bool isValid a00366.html a522d409c9b7f42c483d494253edb77ff () const RequestableChannelClassSpec & operator= a00366.html ab43be0db474fbd290b5d9677fa5cbe22 (const RequestableChannelClassSpec &other) bool operator== a00366.html a93e06ecb918be6b83f529c4878baf5c6 (const RequestableChannelClassSpec &other) const bool supports a00366.html a520420c2872d525885107d0f272caa31 (const RequestableChannelClassSpec &spec) const QString channelType a00366.html a1dc18d6b358125524c96fa9c221ee1b8 () const bool hasTargetHandleType a00366.html ac912b8123939c744da04460be23a1e37 () const HandleType targetHandleType a00366.html a210eb463162f1741c17d39e4d9237ab1 () const bool hasFixedProperty a00366.html ab14c1d78a316d13c9d680e2dd7fce218 (const QString &name) const QVariant fixedProperty a00366.html ab11b5d4e79dc1934a1f36b93564c9be6 (const QString &name) const QVariantMap fixedProperties a00366.html ab3987dad6d8612ebf9e31ab8ecfcae5d () const bool allowsProperty a00366.html a5f8d0cd201bbdde0ea092b120c4e2b21 (const QString &name) const QStringList allowedProperties a00366.html a55160b0a363afb39ecece13d9c967437 () const RequestableChannelClass bareClass a00366.html a974d8e3d17d706af2170ccc311bba8b2 () const static RequestableChannelClassSpec textChat a00366.html aa7125df8ddbe1789ad2c23f8cc6c79e9 () static RequestableChannelClassSpec textChatroom a00366.html aefaf246d69f65566cf65e09f6b7af0ab () static RequestableChannelClassSpec audioCall a00366.html a3be2b68dc3647a5dc5aed495cc32d915 () static RequestableChannelClassSpec audioCallWithVideoAllowed a00366.html aaf7c44b579675087c45cf2c17a101d07 () static RequestableChannelClassSpec videoCall a00366.html a4fc2d49c952fb17cf3a5677855e28b52 () static RequestableChannelClassSpec videoCallWithAudioAllowed a00366.html a76b0efaecd1b0dd16b1af209d3bdeeb1 () static RequestableChannelClassSpec streamedMediaCall a00366.html a47402240b0e4f34fe7b051dcbe218193 () static RequestableChannelClassSpec streamedMediaAudioCall a00366.html abf9e27c92999abb06d68aa6d617e030f () static RequestableChannelClassSpec streamedMediaVideoCall a00366.html af3f7564347f6a15b435ad95502f4cbd7 () static RequestableChannelClassSpec streamedMediaVideoCallWithAudio a00366.html a548e085b1a2f38f9d4621d2fa2b887e7 () static RequestableChannelClassSpec fileTransfer a00366.html ad4ad05b10d2641f601d6138179e08958 () static RequestableChannelClassSpec conferenceTextChat a00366.html a49cdfdadb45bc3473c5e460d622cd6c0 () static RequestableChannelClassSpec conferenceTextChatWithInvitees a00366.html a972991bb7c06db5ab859fe60cbfef1cc () static RequestableChannelClassSpec conferenceTextChatroom a00366.html ae2f7ea79f8472b08545a5be7dadc0f6e () static RequestableChannelClassSpec conferenceTextChatroomWithInvitees a00366.html af2c339c17362cba98bf35ca5504317a2 () static RequestableChannelClassSpec conferenceStreamedMediaCall a00366.html a81883fa104cbf75f23ae822bbf4461c7 () static RequestableChannelClassSpec conferenceStreamedMediaCallWithInvitees a00366.html aefda628ae1bec2aee33cabd868ec6d73 () static RequestableChannelClassSpec contactSearch a00366.html a30c89dba49046be4e122a97ef2523f25 () static RequestableChannelClassSpec contactSearchWithSpecificServer a00366.html a66fd6f597dd46d0eb8718ad6655d7b6a () static RequestableChannelClassSpec contactSearchWithLimit a00366.html aef06b59df2e9ee22c59430ffb682acf8 () static RequestableChannelClassSpec contactSearchWithSpecificServerAndLimit a00366.html a9a40a256b3a19a554c8126cdaf13bceb () static RequestableChannelClassSpec dbusTube a00366.html a0736ba6275ef56464d7553601ade67af (const QString &serviceName=QString()) static RequestableChannelClassSpec streamTube a00366.html a1ea59074d179f4091ca26078fd088de9 (const QString &service=QString()) Tp::RequestableChannelClassSpecList a00367.html RequestableChannelClassSpecList a00367.html abf7674f633f0209b52dc06eec65be108 () RequestableChannelClassSpecList a00367.html afe88a8525653a52afaafb374db7b29c2 (const RequestableChannelClass &rcc) RequestableChannelClassSpecList a00367.html adf37a4ccdc939fb6405a6156913f7dc1 (const RequestableChannelClassList &rccs) RequestableChannelClassSpecList a00367.html a933f02f81d33fc6407fd7fb124a5f053 (const RequestableChannelClassSpec &rccSpec) RequestableChannelClassSpecList a00367.html ab3697751f041b316d00d3491af91b6b2 (const QList< RequestableChannelClassSpec > &other) RequestableChannelClassList bareClasses a00367.html a76fb06b8c63c22a2ec323063a3eb044f () const Tp::RoomListChannel a00370.html Tp::Channel virtual ~RoomListChannel a00370.html a4a13963770e6aaf4e641c5805804c9f9 () static RoomListChannelPtr create a00370.html ab9c88b2759fc8fe16922e46946277c3e (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) RoomListChannel a00370.html a142779da14bd7a2077e24610761c67fd (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature=Channel::FeatureCore) Tp::ServerAuthenticationChannel a00376.html Tp::Channel virtual ~ServerAuthenticationChannel a00376.html af8900ca5c00a79216fd5cba91f6c1537 () CaptchaAuthenticationPtr captchaAuthentication a00376.html a309378575350c2dc345312ff5ddf943a () const bool hasCaptchaInterface a00376.html a4b05b5ff95125d3990b13092aefd1e49 () const static ServerAuthenticationChannelPtr create a00376.html a4c7845fecc3434db49448bcd2cdad539 (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) static const Feature FeatureCore a00376.html a6c46e1a6a1dd2746116f2417725d8898 ServerAuthenticationChannel a00376.html ad654bf53a82973defdf639f928143dc0 (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature=ServerAuthenticationChannel::FeatureCore) Tp::RefCounted a00362.html Tp::RefCounted::SharedCount RefCounted a00362.html ace03ea74806fd9a180b8863ae23c838c () virtual ~RefCounted a00362.html a56b3618d2e02f6999c77da00d4e1bfd4 () Tp::SharedPtr a00379.html T SharedPtr a00379.html a79e77f8516541918fc59fc3158183cfc () SharedPtr a00379.html aeaadda9d83f81f9942b60b8c280322c2 (T *d) SharedPtr a00379.html a586886eb82450a8607aa9ea85bd49bfc (const SharedPtr< Subclass > &o) SharedPtr a00379.html a2af4d2c560f1a053c77e3b4db1157f4f (const SharedPtr< T > &o) SharedPtr a00379.html aa5e4c47a385747ecea8321bcfd1de5e9 (const WeakPtr< T > &o) ~SharedPtr a00379.html a71f1de35be59445d9779b438d2023946 () void reset a00379.html a7683de5eedc65e88c82c0d22deb4ee8b () T * data a00379.html adc73ce1581f42a51d84b8ac5a8998880 () const const T * constData a00379.html a4d5f86f30c12329a9bb25c751e929f3e () const T * operator-> a00379.html a608bb2dfb78e98f9417af758db90eda4 () T * operator-> a00379.html a618035ac0a3615febf15b3a691494c53 () const bool isNull a00379.html ae420fced157c5aa01e6657c99b7e2369 () const bool operator! a00379.html adbf812bbeb93627bce95e34348193944 () const operator UnspecifiedBoolType a00379.html ad1d510bbef0e492d78a19f06bac2fb9a () const bool operator== a00379.html a47a747a700f6f2f201c2b32b7953c049 (const SharedPtr< T > &o) const bool operator!= a00379.html a2c390370413437b5c157b66b80f36b80 (const SharedPtr< T > &o) const bool operator== a00379.html a9ce5aadb276e525209ad8fa0d4907d48 (const T *ptr) const bool operator!= a00379.html a700193a0dcb1e9f40db5f2e6197dce7e (const T *ptr) const SharedPtr< T > & operator= a00379.html aebc80490d3f55d97a94fcfab17ed2e11 (const SharedPtr< T > &o) void swap a00379.html a71e6e70f44c02324359ff508390491d7 (SharedPtr< T > &o) static SharedPtr< T > staticCast a00379.html a17cb7bc963db18dd259f0a3a435a8d44 (const SharedPtr< X > &src) static SharedPtr< T > dynamicCast a00379.html aa70d1a1931b049a2474a46e20d2ac96c (const SharedPtr< X > &src) static SharedPtr< T > constCast a00379.html a8c3fcef4cc5dc15522464f6759b37984 (const SharedPtr< X > &src) static SharedPtr< T > qObjectCast a00379.html a51dd7ce733587ce0bb5a286c31196daf (const SharedPtr< X > &src) Tp::WeakPtr a00417.html T WeakPtr a00417.html ae3298ebf0b212020bd5cf36f25e8de36 () WeakPtr a00417.html a3b35509929b3db70972697e257f52696 (T *d) WeakPtr a00417.html a747d5b502f228065554886cd98527601 (const WeakPtr< T > &o) WeakPtr a00417.html aae987022fe973ce08f4a1621547871cc (const SharedPtr< T > &o) ~WeakPtr a00417.html a5578d71cd460221beb4f4c14006a1f76 () bool isNull a00417.html ad507ba1eab0caa2d22a6ddcd0bda1de3 () const bool operator! a00417.html a6d8a29c3a5279f84745ff399c8ee142b () const operator UnspecifiedBoolType a00417.html a2326aae8806149e1d23fbb467c07e0c3 () const WeakPtr< T > & operator= a00417.html a523cdbb873d133e0920855f9acb2f321 (const WeakPtr< T > &o) WeakPtr< T > & operator= a00417.html aa56b28622ae36336e5cdda6b7bacf114 (const SharedPtr< T > &o) void swap a00417.html aa7702fd0f3b1a14cf52a9c77063f273b (WeakPtr< T > &o) SharedPtr< T > toStrongRef a00417.html a795442739ef1bdfed71a7160e99b09de () const friend uint qHash a00417.html a50440317a59020c14a0754a6b2eaa8f9 (const WeakPtr< T > &ptr) Tp::SimpleCallObserver a00380.html Tp::RefCounted CallDirection a00380.html af228184fac78b39b0a11775d13987a57 CallDirectionIncoming a00380.html af228184fac78b39b0a11775d13987a57a11582abca95d2634cf630aede9684215 CallDirectionOutgoing a00380.html af228184fac78b39b0a11775d13987a57a80229d03595171d4cd8735a7b3737660 CallDirectionBoth a00380.html af228184fac78b39b0a11775d13987a57afda9b5f637110570a664a9a4ed82bd41 void callStarted a00380.html acae8bfd6047a7ae64a7733068890f270 (const Tp::CallChannelPtr &channel) void callEnded a00380.html ad0d2aadd90c81643ed6bb9194d7948ec (const Tp::CallChannelPtr &channel, const QString &errorName, const QString &errorMessage) void streamedMediaCallStarted a00380.html af3300d394f47220c23d293366e271035 (const Tp::StreamedMediaChannelPtr &channel) void streamedMediaCallEnded a00380.html a73f129b605d4a91ef15858cdaf60a1c5 (const Tp::StreamedMediaChannelPtr &channel, const QString &errorName, const QString &errorMessage) virtual ~SimpleCallObserver a00380.html ac5fb12b263c1cf21579b29f97faa90fb () AccountPtr account a00380.html a5cb4db5e9da32cd9600bb6f96bdad089 () const QString contactIdentifier a00380.html a616b07b43343e9b382d604dea3556743 () const CallDirection direction a00380.html ad28a5bc0308e9e08c5eda325ab02bbb0 () const QList< CallChannelPtr > calls a00380.html a9de2dacc8eb402666d9af2aa7d9c8883 () const QList< StreamedMediaChannelPtr > streamedMediaCalls a00380.html a43041e2aa9859c607c912016c02bb40c () const static SimpleCallObserverPtr create a00380.html afbccd8b64b3eda96a992f6b5cadf7b42 (const AccountPtr &account, CallDirection direction=CallDirectionBoth) static SimpleCallObserverPtr create a00380.html a9a72405936afe6f7769e26fa53fce7b3 (const AccountPtr &account, const ContactPtr &contact, CallDirection direction=CallDirectionBoth) static SimpleCallObserverPtr create a00380.html a66d9f03294552eccd8be2c104296333b (const AccountPtr &account, const QString &contactIdentifier, CallDirection direction=CallDirectionBoth) Tp::SimpleObserver a00382.html Tp::RefCounted void newChannels a00382.html a86cf2f27f357ea6c3bc04065cc97e72a (const QList< Tp::ChannelPtr > &channels) void channelInvalidated a00382.html a4ebe1563722a01fefcdb60f6d6bb9732 (const Tp::ChannelPtr &channel, const QString &errorName, const QString &errorMessage) virtual ~SimpleObserver a00382.html a2dc3fe1b5b1da763a7f8fa3c9910609c () AccountPtr account a00382.html a40a226ed16097f26496498401b17b5d5 () const ChannelClassSpecList channelFilter a00382.html ad8b5207a04cdd0cc0c8586a33e1000db () const QString contactIdentifier a00382.html a55d27338ac0eee342955cecb74ab3046 () const QList< ChannelClassFeatures > extraChannelFeatures a00382.html a662db799d696786b129d711d2012c47f () const QList< ChannelPtr > channels a00382.html a3f2089961600aea0964a207601b0708e () const static SimpleObserverPtr create a00382.html abeebea99a08e86a098999f3fb88ceb7e (const AccountPtr &account, const ChannelClassSpecList &channelFilter, const QList< ChannelClassFeatures > &extraChannelFeatures=QList< ChannelClassFeatures >()) static SimpleObserverPtr create a00382.html ad50f99efab06f8ab9bafed8564365093 (const AccountPtr &account, const ChannelClassSpecList &channelFilter, const ContactPtr &contact, const QList< ChannelClassFeatures > &extraChannelFeatures=QList< ChannelClassFeatures >()) static SimpleObserverPtr create a00382.html a02b8bed5cf4794c42104a3b2c995c892 (const AccountPtr &account, const ChannelClassSpecList &channelFilter, const QString &contactIdentifier, const QList< ChannelClassFeatures > &extraChannelFeatures=QList< ChannelClassFeatures >()) Tp::PendingSuccess a00327.html Tp::PendingOperation PendingSuccess a00327.html af159b12ea9c08729c5065315c5bff348 (const SharedPtr< RefCounted > &object) Tp::PendingFailure a00318.html Tp::PendingOperation PendingFailure a00318.html a07070627d68522beb1970ddddcb5f82e (const QString &name, const QString &message, const SharedPtr< RefCounted > &object) PendingFailure a00318.html a19097704563c230f1a04cc9ca50fc726 (const QDBusError &error, const SharedPtr< RefCounted > &object) Tp::PendingVoid a00331.html Tp::PendingOperation PendingVoid a00331.html a794383e75741a6faaf4fb73f135dd835 (QDBusPendingCall call, const SharedPtr< RefCounted > &object) Tp::PendingComposite a00311.html Tp::PendingOperation PendingComposite a00311.html abc7ab0a788f837502ad580debdbc7d7b (const QList< PendingOperation * > &operations, const SharedPtr< RefCounted > &object) PendingComposite a00311.html aa0991c2fb6f53a3e0fe07d8b1f7d9f87 (const QList< PendingOperation * > &operations, bool failOnFirstError, const SharedPtr< RefCounted > &object) ~PendingComposite a00311.html a92f143e917d39644bd775dffcf0f806f () Tp::SimpleStreamTubeHandler a00386.html Tp::AbstractClientHandler Tp::SimpleStreamTubeHandler::InvocationData void invokedForTube a00386.html a6517a9474816dc5dcfa824c405b11f31 (const Tp::AccountPtr &account, const Tp::StreamTubeChannelPtr &tube, const QDateTime &userActionTime, const Tp::ChannelRequestHints &requestHints) void tubeInvalidated a00386.html a9d4ba8ca3d49610bf9ce22089384ee1d (const Tp::AccountPtr &account, const Tp::StreamTubeChannelPtr &tube, const QString &errorName, const QString &errorMessage) ~SimpleStreamTubeHandler a00386.html aa802429138f4c73b74678c1a3e4e61b4 () bool monitorsConnections a00386.html abb310462a6b99ad4d633eb005b0455be () const bool bypassApproval a00386.html a572b7e13f4c8b956080f849dc999ad05 () const void handleChannels a00386.html a2e03f9d5f5e7b79690a6ceb37e200a60 (const MethodInvocationContextPtr<> &context, const AccountPtr &account, const ConnectionPtr &connection, const QList< ChannelPtr > &channels, const QList< ChannelRequestPtr > &requestsSatisfied, const QDateTime &userActionTime, const HandlerInfo &handlerInfo) static SharedPtr< SimpleStreamTubeHandler > create a00386.html a0d6199593c0c7222210603384a3328db (const QStringList &p2pServices, const QStringList &roomServices, bool requested, bool monitorConnections, bool bypassApproval=false) Tp::SimpleTextObserver a00387.html Tp::RefCounted void messageSent a00387.html a09f2fdc7f09a21e7a8a213599f4ed6af (const Tp::Message &message, Tp::MessageSendingFlags flags, const QString &sentMessageToken, const Tp::TextChannelPtr &channel) void messageReceived a00387.html af2d932fc0ff2e01f1b7729643eedd63c (const Tp::ReceivedMessage &message, const Tp::TextChannelPtr &channel) virtual ~SimpleTextObserver a00387.html a73e6e7535c76d559e3bff5c0d37c1abb () AccountPtr account a00387.html a95f81fd27482ed896811c98cee8a72e4 () const QString contactIdentifier a00387.html a7ea2658e0bc7ac503f4c5bef1e3ee93c () const QList< TextChannelPtr > textChats a00387.html af0b52324f6c8c69e5fb8a1644f1eff9f () const static SimpleTextObserverPtr create a00387.html ae941f7ce0beebf4a414eace0c1fd6d6a (const AccountPtr &account) static SimpleTextObserverPtr create a00387.html a9de5859431919dcd318644ec6a80c260 (const AccountPtr &account, const ContactPtr &contact) static SimpleTextObserverPtr create a00387.html ac6e8e2ef29e5365ec7ec9155af8f0681 (const AccountPtr &account, const QString &contactIdentifier) Tp::StreamTubeChannel a00401.html Tp::TubeChannel void newConnection a00401.html a5f85450588e2d896e6de3bacdbdeb3cc (uint connectionId) void connectionClosed a00401.html a82d6927b2594f38f7e456385f4012012 (uint connectionId, const QString &errorName, const QString &errorMessage) virtual ~StreamTubeChannel a00401.html a670a7edc78854d28f5939fc56b255256 () QString service a00401.html ad25d53d8887f62bdc60c49c0f212a09b () const bool supportsIPv4SocketsOnLocalhost a00401.html a57a39b41239275e56c6e9dabdfe6ddb9 () const bool supportsIPv4SocketsWithSpecifiedAddress a00401.html a0af05f4159e124f86ac049b59df9a7a2 () const bool supportsIPv6SocketsOnLocalhost a00401.html a3e27bd9f2044d3c426ecde0d6833215d () const bool supportsIPv6SocketsWithSpecifiedAddress a00401.html a9b32c022174410548d38b79eb8d2c8b9 () const bool supportsUnixSocketsOnLocalhost a00401.html a76fa470eabdffcac7f7c05bd21d5c1cc () const bool supportsUnixSocketsWithCredentials a00401.html ac02fa715c03e8cd95fea129bd53027d2 () const bool supportsAbstractUnixSocketsOnLocalhost a00401.html ac384eef8c7e96aff0dcb321488ee55f4 () const bool supportsAbstractUnixSocketsWithCredentials a00401.html a1361c871ccb7a315cb133cc74e708337 () const QSet< uint > connections a00401.html aed3e952bc172ccd365aa885e0547945b () const SocketAddressType addressType a00401.html ad573db7778832e72613013c74c8a3fee () const QPair< QHostAddress, quint16 > ipAddress a00401.html ab3e29d999bdf9a3c2b72c478c252892e () const QString localAddress a00401.html af626269a9b076f4b6bff0ad0551b39ef () const static StreamTubeChannelPtr create a00401.html a7fcf100a3e44372bca8339f9360e5d88 (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) static const Feature FeatureCore a00401.html a1e74072fe858a01ce407559613df814c static const Feature FeatureConnectionMonitoring a00401.html ac39339717d06a96b23cbfb7cbfc3540c StreamTubeChannel a00401.html a47929ec1d83df485725563e562c1656f (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature=StreamTubeChannel::FeatureCore) void addConnection a00401.html a0565694a41a26961abf4e1f239920dc0 (uint connection) void removeConnection a00401.html ae3f116cfe5b3a843f23eb1d98c46a786 (uint connection, const QString &error, const QString &message) void setAddressType a00401.html a6529f1e57db95892102e77efa48d2b56 (SocketAddressType type) SocketAccessControl accessControl a00401.html aa5a1e3ccd70234bf1545e16f4202e74c () const void setAccessControl a00401.html a11422822baae08b270baf238b107db4a (SocketAccessControl accessControl) void setIpAddress a00401.html a6af133554c88a3511945ea97852a6ba5 (const QPair< QHostAddress, quint16 > &address) void setLocalAddress a00401.html a3793c2237941df78ed307350ce10421e (const QString &address) bool isDroppingConnections a00401.html a3449070e8220a8e12b029aea4b0b6fe9 () const Tp::StreamTubeClient a00402.html Tp::RefCounted Tp::StreamTubeClient::TcpSourceAddressGenerator Tp::StreamTubeClient::Tube void tubeOffered a00402.html ad4d666b7d56b22c951af65021f2d9e7e (const Tp::AccountPtr &account, const Tp::IncomingStreamTubeChannelPtr &tube) void tubeClosed a00402.html ab8b5d535d458e1d0204fe1612b5280b2 (const Tp::AccountPtr &account, const Tp::IncomingStreamTubeChannelPtr &tube, const QString &error, const QString &message) void tubeAcceptedAsTcp a00402.html a12d4647c8ad29a941ac6123905736f92 (const QHostAddress &listenAddress, quint16 listenPort, const QHostAddress &sourceAddress, quint16 sourcePort, const Tp::AccountPtr &account, const Tp::IncomingStreamTubeChannelPtr &tube) void tubeAcceptedAsUnix a00402.html ad08bfa94a24811712e5c5ff2a1ac75bb (const QString &listenAddress, bool requiresCredentials, uchar credentialByte, const Tp::AccountPtr &account, const Tp::IncomingStreamTubeChannelPtr &tube) void newConnection a00402.html a546354350619ba4a6e3868ad66f8059f (const Tp::AccountPtr &account, const Tp::IncomingStreamTubeChannelPtr &tube, uint connectionId) void connectionClosed a00402.html aeaea793406ca40e9938afdd4d8c0d016 (const Tp::AccountPtr &account, const Tp::IncomingStreamTubeChannelPtr &tube, uint connectionId, const QString &error, const QString &message) virtual ~StreamTubeClient a00402.html ac3a062f064bf9be0b8167de413034a4c () ClientRegistrarPtr registrar a00402.html a92732661ae0a10e7f2b21b67fc4da810 () const QString clientName a00402.html a09436a56bb9da91a0b8c32a476ca63be () const bool isRegistered a00402.html ac662264d218ab334f69cdd2eb62afca7 () const bool monitorsConnections a00402.html a4b9fd27d1b52389492906a6054f92e9b () const bool acceptsAsTcp a00402.html a0dd9d210fd985adc19c5cf214e065244 () const TcpSourceAddressGenerator * tcpGenerator a00402.html a11aba03e2672913e71e405daea4b17da () const bool acceptsAsUnix a00402.html a78e666ade88e771e6b1a539258622575 () const void setToAcceptAsTcp a00402.html abc9f3c4980b7e2b9013720b1aedde2b2 (TcpSourceAddressGenerator *generator=0) void setToAcceptAsUnix a00402.html a829e13f23dffbbb50e5af68b35b9c18f (bool requireCredentials=false) QList< Tube > tubes a00402.html a4a72d17586682c78d2cb3df358a64748 () const QHash< Tube, QSet< uint > > connections a00402.html a31d77a10ca40f3eb09ad506cb9c5f392 () const static StreamTubeClientPtr create a00402.html a46f483a430ddb98052253b28e160977b (const QStringList &p2pServices, const QStringList &roomServices=QStringList(), const QString &clientName=QString(), bool monitorConnections=false, bool bypassApproval=false, const AccountFactoryConstPtr &accountFactory=AccountFactory::create(QDBusConnection::sessionBus()), const ConnectionFactoryConstPtr &connectionFactory=ConnectionFactory::create(QDBusConnection::sessionBus()), const ChannelFactoryConstPtr &channelFactory=ChannelFactory::create(QDBusConnection::sessionBus()), const ContactFactoryConstPtr &contactFactory=ContactFactory::create()) static StreamTubeClientPtr create a00402.html af0c745c20a295b4f2fe78ba99fbbabc4 (const QDBusConnection &bus, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory, const QStringList &p2pServices, const QStringList &roomServices=QStringList(), const QString &clientName=QString(), bool monitorConnections=false, bool bypassApproval=false) static StreamTubeClientPtr create a00402.html a0f43076d2684766b22326b8f165deb02 (const AccountManagerPtr &accountManager, const QStringList &p2pServices, const QStringList &roomServices=QStringList(), const QString &clientName=QString(), bool monitorConnections=false, bool bypassApproval=false) static StreamTubeClientPtr create a00402.html a118bf57c77e658ee93e05b0ee31b3578 (const ClientRegistrarPtr &registrar, const QStringList &p2pServices, const QStringList &roomServices=QStringList(), const QString &clientName=QString(), bool monitorConnections=false, bool bypassApproval=false) Tp::StreamTubeClient::TcpSourceAddressGenerator a00407.html virtual QPair< QHostAddress, quint16 > nextSourceAddress a00407.html a39597af2206e3c769d60032c72bed2e9 (const AccountPtr &account, const IncomingStreamTubeChannelPtr &tube)=0 virtual ~TcpSourceAddressGenerator a00407.html a244044fe9977844132b17fb203942d0a () Tp::StreamTubeClient::Tube a00411.html Tube a00411.html a67633232c4fe0f7069169c09b68789f6 () Tube a00411.html a95edd19c72cc3671c07548b0485e33cb (const AccountPtr &account, const IncomingStreamTubeChannelPtr &channel) Tube a00411.html a66473ad7e616da513dab970e12df0f7c (const Tube &other) ~Tube a00411.html ad05292b539750b59cacdf5f832da2a34 () bool isValid a00411.html a439289722f72a4951127d897f3b42724 () const Tube & operator= a00411.html adf4eab11564c1d77ba7c99244d6a0579 (const Tube &other) const AccountPtr & account a00411.html a0ba9bde070c51acfd6b3534423b26af7 () const const IncomingStreamTubeChannelPtr & channel a00411.html a3ddc0eba586612942ce091a76a749342 () const Tp::StreamTubeServer a00403.html Tp::RefCounted Tp::StreamTubeServer::ParametersGenerator Tp::StreamTubeServer::RemoteContact Tp::StreamTubeServer::Tube void tubeRequested a00403.html a79863540c66e7370bfc31b76cefbc9e4 (const Tp::AccountPtr &account, const Tp::OutgoingStreamTubeChannelPtr &tube, const QDateTime &userActionTime, const Tp::ChannelRequestHints &hints) void tubeClosed a00403.html aa6149284bb271c332a1ae974c86c4457 (const Tp::AccountPtr &account, const Tp::OutgoingStreamTubeChannelPtr &tube, const QString &error, const QString &message) void newTcpConnection a00403.html a3a6fb43124b2047c3eca73097710ba64 (const QHostAddress &sourceAddress, quint16 sourcePort, const Tp::AccountPtr &account, const Tp::ContactPtr &contact, const Tp::OutgoingStreamTubeChannelPtr &tube) void tcpConnectionClosed a00403.html acc8f5fcc855b371430d3915754ad3a8b (const QHostAddress &sourceAddress, quint16 sourcePort, const Tp::AccountPtr &account, const Tp::ContactPtr &contact, const QString &error, const QString &message, const Tp::OutgoingStreamTubeChannelPtr &tube) virtual ~StreamTubeServer a00403.html ac4ec3a4178996d1ea8305f25a25c9218 () ClientRegistrarPtr registrar a00403.html ac0af546f4a3fa08ffb8207e450fdcf91 () const QString clientName a00403.html a4f3ce4a3ebe9838e8911f7870560a34a () const bool isRegistered a00403.html a21dc72be595520a1982e8cdbc5b25441 () const bool monitorsConnections a00403.html a26340af76407099a3b495daa615c7071 () const QPair< QHostAddress, quint16 > exportedTcpSocketAddress a00403.html abb2fb44ceeedfd62746f62dce30a35d3 () const QVariantMap exportedParameters a00403.html aede3b7140c63b6ab77d0282a6cf90bb8 () const void exportTcpSocket a00403.html ac0675a57b83d927f357c3005de8f8fc9 (const QHostAddress &address, quint16 port, const QVariantMap &parameters=QVariantMap()) void exportTcpSocket a00403.html a2ffd7f4775bcf196b8cf41c702692e45 (const QTcpServer *server, const QVariantMap &parameters=QVariantMap()) void exportTcpSocket a00403.html a6e128b4f8b23eb78b8463a2898c21943 (const QHostAddress &address, quint16 port, ParametersGenerator *generator) void exportTcpSocket a00403.html a5782864765424878c2fa632bd8760a56 (const QTcpServer *server, ParametersGenerator *generator) QList< Tube > tubes a00403.html a5e7f76884a85b7a3b97e4f0cceaf2c6a () const QHash< QPair< QHostAddress, quint16 >, RemoteContact > tcpConnections a00403.html a6eae36057f2b458d0ee561a8d16cd25c () const static StreamTubeServerPtr create a00403.html a942ccb0e1c3326fee2fb2034c78d39bf (const QStringList &p2pServices, const QStringList &roomServices=QStringList(), const QString &clientName=QString(), bool monitorConnections=false, const AccountFactoryConstPtr &accountFactory=AccountFactory::create(QDBusConnection::sessionBus()), const ConnectionFactoryConstPtr &connectionFactory=ConnectionFactory::create(QDBusConnection::sessionBus()), const ChannelFactoryConstPtr &channelFactory=ChannelFactory::create(QDBusConnection::sessionBus()), const ContactFactoryConstPtr &contactFactory=ContactFactory::create()) static StreamTubeServerPtr create a00403.html af29e1b553452032f8e5942c72c1bb1c9 (const QDBusConnection &bus, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory, const QStringList &p2pServices, const QStringList &roomServices=QStringList(), const QString &clientName=QString(), bool monitorConnections=false) static StreamTubeServerPtr create a00403.html a17ce8c6e4263ee55db9afba3fc6f3f5b (const AccountManagerPtr &accountManager, const QStringList &p2pServices, const QStringList &roomServices=QStringList(), const QString &clientName=QString(), bool monitorConnections=false) static StreamTubeServerPtr create a00403.html af2425e6b5409b3720a89e62aa1fc617f (const ClientRegistrarPtr &registrar, const QStringList &p2pServices, const QStringList &roomServices=QStringList(), const QString &clientName=QString(), bool monitorConnections=false) Tp::StreamTubeServer::ParametersGenerator a00302.html virtual QVariantMap nextParameters a00302.html a93f5f6b77c05a47066cd2c8436f20a84 (const AccountPtr &account, const OutgoingStreamTubeChannelPtr &tube, const ChannelRequestHints &hints)=0 virtual ~ParametersGenerator a00302.html afb74be7b77d7ade23dda42d7d03b2799 () Tp::StreamTubeServer::RemoteContact a00364.html RemoteContact a00364.html a5a8a57923facba65400626717a46dc8e () RemoteContact a00364.html ac926107b62625433da4c727437fb6d78 (const AccountPtr &account, const ContactPtr &contact) RemoteContact a00364.html ae6a2a18a445007ac593b4790ff200db3 (const RemoteContact &other) ~RemoteContact a00364.html a7188ced89e760700ab077fe395c18852 () bool isValid a00364.html ac345016380802d84632a0118abe5b2c4 () const RemoteContact & operator= a00364.html a0cd829e9adaba61b3ff2b471ac6b3699 (const RemoteContact &other) const AccountPtr & account a00364.html ad5d677cbbbfcf48b3f04a12bd5f4e610 () const const ContactPtr & contact a00364.html ab95077e1a3bc57730d5115781a0ba2b8 () const Tp::StreamTubeServer::Tube a00410.html Tube a00410.html a6529318397d861649902642ae4711b77 () Tube a00410.html a7405a77abdebb5f0eeedeb73fb979652 (const AccountPtr &account, const OutgoingStreamTubeChannelPtr &channel) Tube a00410.html a4582e0c1f763920a55241fb27d42e103 (const Tube &other) ~Tube a00410.html a71568f91c500a4e551c4f7b75ad9f971 () bool isValid a00410.html a63f048fc5177b4b652aaf8f83033c49d () const Tube & operator= a00410.html a73282136752c854a99e67bbeac39bf8b (const Tube &other) const AccountPtr & account a00410.html a12f8951e6ecd4162acf35404101df420 () const const OutgoingStreamTubeChannelPtr & channel a00410.html aa886319747f3b685f8ab9c9e9c13db4a () const Tp::PendingStreamedMediaStreams a00323.html Tp::PendingOperation ~PendingStreamedMediaStreams a00323.html aa854cfd056e4c0c241ea20e0d88618f1 () StreamedMediaChannelPtr channel a00323.html ae46e35a08b1a8886eb2a7ad86e8d30c0 () const StreamedMediaStreams streams a00323.html a9b808fdfd12f770b9026b613e5b93c28 () const Tp::StreamedMediaStream a00400.html Tp::Object Tp::ReadyObject SendingState a00400.html aa20aefbe2d402de0b1f95b4fb7589991 SendingStateNone a00400.html aa20aefbe2d402de0b1f95b4fb7589991abdb45cafbe13cbb92c8b5221ddc12634 SendingStatePendingSend a00400.html aa20aefbe2d402de0b1f95b4fb7589991ad6a5eabc7c03df90abf25ee1f77d7026 SendingStateSending a00400.html aa20aefbe2d402de0b1f95b4fb7589991ab629deb52722cd6177eb3b6f7a1002c9 void localSendingStateChanged a00400.html a5edca9241d0c454dd3f49f2e24f41087 (Tp::StreamedMediaStream::SendingState localSendingState) void remoteSendingStateChanged a00400.html accc4f274f27963aa169f18bd9a90c8cd (Tp::StreamedMediaStream::SendingState remoteSendingState) ~StreamedMediaStream a00400.html aec3a7368cb37fc81baaa61b0413e39a2 () StreamedMediaChannelPtr channel a00400.html a9e6f5c7461158b9e5a69a69d418fdbd0 () const uint id a00400.html a1e592ac88fd625b9370eaa9304f3a52c () const ContactPtr contact a00400.html a9fd942aa528a5c26e16c21b8335a25e8 () const MediaStreamState state a00400.html a3cbdb625a22232dedbfe56cb51837e3c () const MediaStreamType type a00400.html a3366e1aaa8ec0c3a3951f38c109fc41c () const SendingState localSendingState a00400.html ab80d19fd4c6ddeda31265bc229c26750 () const SendingState remoteSendingState a00400.html a56563e54a579a2870d48d276b255ac32 () const bool sending a00400.html ad670aa4296ad803a66da0ab326b3d8b6 () const bool receiving a00400.html ae66d14804598aa1056229e6514af21e6 () const bool localSendingRequested a00400.html a1e1c4976bb2a78f643937b6beb66ae26 () const bool remoteSendingRequested a00400.html a1702dd672f21e46d6207a806afa3fe39 () const MediaStreamDirection direction a00400.html a1976b37c0ea2b475ec96391538e372e3 () const MediaStreamPendingSend pendingSend a00400.html a7fb9e87f5b771911e2971a215abf7b1a () const PendingOperation * requestSending a00400.html a9954ca20ff41ff654f1206819e870e4a (bool send) PendingOperation * requestReceiving a00400.html a3516b2fbebbdd8d7c0bc904175b801bb (bool receive) PendingOperation * requestDirection a00400.html ad0f385c6a06089e03331ea57d931afd6 (MediaStreamDirection direction) PendingOperation * requestDirection a00400.html a5da6b57291d0c7c6fbc651f8dde05445 (bool send, bool receive) PendingOperation * startDTMFTone a00400.html a961bc2a84d4327440a060ce884b683eb (DTMFEvent event) PendingOperation * stopDTMFTone a00400.html ad7bb488894b53ab5484ee41acae99261 () Tp::StreamedMediaChannel a00399.html Tp::Channel StateChangeReason a00399.html aa00cbebc4b282db3e254dd6205a05138 StateChangeReasonUnknown a00399.html aa00cbebc4b282db3e254dd6205a05138a1bd74716f24d551a68c8e2592fdcd16f StateChangeReasonUserRequested a00399.html aa00cbebc4b282db3e254dd6205a05138af76d70cf9e98db8aff3fbf4c05a22710 void streamAdded a00399.html a798f819d0649163d3ca8ca7c28c1f524 (const Tp::StreamedMediaStreamPtr &stream) void streamRemoved a00399.html aa382a319c11351cbd7b5739bfb2a0320 (const Tp::StreamedMediaStreamPtr &stream) void streamDirectionChanged a00399.html a727e237484584ed6387fc847ee7e8b87 (const Tp::StreamedMediaStreamPtr &stream, Tp::MediaStreamDirection direction, Tp::MediaStreamPendingSend pendingSend) void streamStateChanged a00399.html ad05428521413d71f65df6326997d2141 (const Tp::StreamedMediaStreamPtr &stream, Tp::MediaStreamState state) void streamError a00399.html a537da5008bba28869c2cf9bd52ff5066 (const Tp::StreamedMediaStreamPtr &stream, Tp::MediaStreamError errorCode, const QString &errorMessage) void localHoldStateChanged a00399.html af6f78729302c09cdd2699f9a3499f8ca (Tp::LocalHoldState state, Tp::LocalHoldStateReason reason) virtual ~StreamedMediaChannel a00399.html a0a3395a2c8a2afc9a195da07becf26b4 () bool awaitingLocalAnswer a00399.html af93d70055440857f9a6e463328c060c9 () const bool awaitingRemoteAnswer a00399.html a1a7108ee579639c70aafdbd9e6fff85a () const PendingOperation * acceptCall a00399.html a2748ea78b7d17ab8cfcaae51cac315a8 () PendingOperation * hangupCall a00399.html ac4a9a7077f8c0edbe38a7b46ca190eca () StreamedMediaStreams streams a00399.html aafa3cffe04710ccf1beabbe515d502b7 () const StreamedMediaStreams streamsForType a00399.html adb652288311efd1d35a768f7e4d82c63 (MediaStreamType type) const PendingStreamedMediaStreams * requestStream a00399.html aa18f1d75117d2e539d04f2eba823fcae (const ContactPtr &contact, MediaStreamType type) PendingStreamedMediaStreams * requestStreams a00399.html a11214a0c6566423b1f0001c67bc3efa3 (const ContactPtr &contact, QList< MediaStreamType > types) PendingOperation * removeStream a00399.html aae01a58db339336839eed7e866752667 (const StreamedMediaStreamPtr &stream) PendingOperation * removeStreams a00399.html a64aea610d34913c44961a3f0cf02cdee (const StreamedMediaStreams &streams) bool handlerStreamingRequired a00399.html a0e4aa7c70d7dd8cb5e3cb623ce02784f () const LocalHoldState localHoldState a00399.html abd40156b29d1a68d40671f6634258ccb () const LocalHoldStateReason localHoldStateReason a00399.html a312c441b51660ea639c0f0efd276f2f0 () const PendingOperation * requestHold a00399.html a45d96c82ea5d919509f974545638a6df (bool hold) static StreamedMediaChannelPtr create a00399.html a24183d8e5ab9322678ba5f516ceb0bed (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) static const Feature FeatureCore a00399.html ab1d58285aec127f99d447d75368724bd static const Feature FeatureStreams a00399.html adf0c6a0013b3f2bf3bca15dbeefe8b3b static const Feature FeatureLocalHoldState a00399.html ac8c70ed52e765cd287a69c9bf2a06016 StreamedMediaChannel a00399.html a45047cf4d0754dca0486fb4eeb540a4b (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature=StreamedMediaChannel::FeatureCore) Tp::TextChannel a00408.html Tp::Channel void acknowledge a00408.html afb55a5fc13266d563ba88f31041ed87b (const QList< ReceivedMessage > &messages) void forget a00408.html a18ca62ce003aa0e323e2b31e9551e48d (const QList< ReceivedMessage > &messages) PendingSendMessage * send a00408.html ab17daecfc62d114d80e2fd01a14e1ee5 (const QString &text, ChannelTextMessageType type=ChannelTextMessageTypeNormal, MessageSendingFlags flags=0) PendingSendMessage * send a00408.html a443a34b50039849df979edce50c02996 (const MessagePartList &parts, MessageSendingFlags flags=0) PendingOperation * inviteContacts a00408.html a8f6750e534c4fc9882ff5c60a5e0e1af (const QList< ContactPtr > &contacts, const QString &message=QString()) PendingOperation * requestChatState a00408.html ae69d0b390a05a119e3e0a9c90243aab6 (ChannelChatState state) void messageSent a00408.html a7121bdb9485e2adc7b914ee6e2e43a80 (const Tp::Message &message, Tp::MessageSendingFlags flags, const QString &sentMessageToken) void messageReceived a00408.html ac975bebed8816f41124cd04a99ee5ab5 (const Tp::ReceivedMessage &message) void pendingMessageRemoved a00408.html a6feaeaafabf33f6a067abe3a02baedbc (const Tp::ReceivedMessage &message) void chatStateChanged a00408.html a64da071ac16b527f5b55b5d42687464c (const Tp::ContactPtr &contact, Tp::ChannelChatState state) virtual ~TextChannel a00408.html a237ed447e98f238f20822f4f6d107f9a () bool hasMessagesInterface a00408.html acee19d717b2c1b920f8ba59479af5840 () const bool hasChatStateInterface a00408.html a387ca1f04dd16de42d3bf12a827f09fb () const bool canInviteContacts a00408.html a5ebe1cb0adfb54bd5f0d6f735c8d8ea7 () const bool supportsMessageType a00408.html adcff6ecd3ced7ffd1ace9a2403bbe062 (ChannelTextMessageType messageType) const QList< ChannelTextMessageType > supportedMessageTypes a00408.html a12600f3b7420d9a8f1d90b531bf603cb () const QStringList supportedContentTypes a00408.html a0fd060584cf0d8be1bd4bddc96b09e4c () const MessagePartSupportFlags messagePartSupport a00408.html a45e1ee5bbaeadad2dbd58f155138e0e1 () const DeliveryReportingSupportFlags deliveryReportingSupport a00408.html a50ab1fc4405e3bb92b7e7ab328df68df () const QList< ReceivedMessage > messageQueue a00408.html a4a0acad4523d9278a654888468219dff () const ChannelChatState chatState a00408.html a77dbe42d2c170e5c05e83fab59a4176e (const ContactPtr &contact) const static TextChannelPtr create a00408.html a480c7d4dd280f57bde8e2a2dbf4cfa2d (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) static const Feature FeatureCore a00408.html a4992224757d4366c17f81bd4522a60aa static const Feature FeatureMessageQueue a00408.html a7293d821bbdfee44693cc1161ef7f6dc static const Feature FeatureMessageCapabilities a00408.html a74b6f9875f38e3c48ecaaeb74762750d static const Feature FeatureMessageSentSignal a00408.html a53b22df8df169c3e21e3ebc595334db1 static const Feature FeatureChatState a00408.html aaa1ede637039b587f9072d9cbed336b0 TextChannel a00408.html ab4f3e598a3c9a842f3d0adc81b1c9e26 (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature=TextChannel::FeatureCore) Tp::TubeChannel a00412.html Tp::Channel void stateChanged a00412.html a82f1cc0406c02e85f7a1bde6070d7f9d (Tp::TubeChannelState state) virtual ~TubeChannel a00412.html ac2847a4f862906815c1231a2d80d52cb () TubeChannelState state a00412.html a9e5cd49ad6bfde378a79cdf69b8265dc () const QVariantMap parameters a00412.html a7d0eddeca675a3c0864fcc39b73bd4da () const static TubeChannelPtr create a00412.html afbb45e75124522c4895889ed41445306 (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) static const Feature FeatureCore a00412.html a0c08aeb853f66ffdf990a02ece5d2c65 TubeChannel a00412.html a97fdee383ebd73669ea52f0440dc0830 (const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature=TubeChannel::FeatureCore) void setParameters a00412.html abc827001cd776312e5ba5129e204ad2c (const QVariantMap &parameters) Tp::ByteArrayList a00069.html ByteArrayList a00069.html a9f9f843dfb281d097099f9310a12e1e1 () ByteArrayList a00069.html a7f86e44671df3e63b7f2188f824372b1 (const QList< QByteArray > &a) ByteArrayList & operator= a00069.html add7ae228a19a284a2c79a1cc9f5b1551 (const QList< QByteArray > &a) Tp::ObjectPathList a00294.html ObjectPathList a00294.html aa6c33fefb5684699eff09dfc728ac6f2 () ObjectPathList a00294.html aa3b12cc1950635514f57429db5ce847f (const QList< QDBusObjectPath > &a) ObjectPathList & operator= a00294.html a051d45535c5a02c1eba809f9f0f36bb5 (const QList< QDBusObjectPath > &a) Tp::UIntList a00414.html UIntList a00414.html ad001d8ad577994be28bbc7fb52aef1bf () UIntList a00414.html a935d8111fb5bd3dba1860025738f7a5d (const QList< uint > &a) UIntList & operator= a00414.html aa2c576e266c71eac26f46ecee7ba4c4e (const QList< uint > &a) Tp::AccessControl a00039.html uint type a00039.html a37336da8653933b0f1857dd9410716a0 QDBusVariant detail a00039.html a36b6fdcda85868ec4b69507d2f3a6137 Tp::AddressingNormalizationMap a00051.html AddressingNormalizationMap a00051.html af8fc569e3101cabecccaa10b798c679e () AddressingNormalizationMap a00051.html a1bec431c9fa9d17c9855c0eba7add82e (const QMap< QString, uint > &a) AddressingNormalizationMap & operator= a00051.html a9af1a24642811c461f67ccc5f937e5d4 (const QMap< QString, uint > &a) Tp::AliasMap a00052.html AliasMap a00052.html aa6a691386791fcbc4864376ab45a79f5 () AliasMap a00052.html a3784f69287085e6ba227404683b7e520 (const QMap< uint, QString > &a) AliasMap & operator= a00052.html a8bdd57003482435cbd13e7fac47b3fbd (const QMap< uint, QString > &a) Tp::AliasPair a00053.html uint handle a00053.html acb1aed24c5bd58b495fce686d9518709 QString alias a00053.html ab911665744edf332d43cd6cc0ad1ea99 Tp::Avatar a00056.html QByteArray avatarData a00056.html a78383ca6b5249b065758c8e79552336b QString MIMEType a00056.html a19f922f163432a8c9fccb9b00004e93d Tp::AvatarTokenMap a00059.html AvatarTokenMap a00059.html a7438e97cd349c8b5a6136d3d22bc5356 () AvatarTokenMap a00059.html ad2e88f3fecf9e857d25973aa5f26f332 (const QMap< uint, QString > &a) AvatarTokenMap & operator= a00059.html a8f917ff08793b66140de46c7b1636983 (const QMap< uint, QString > &a) Tp::CallMemberMap a00089.html CallMemberMap a00089.html ae73c3cdd55372d128c081ba20508c73d () CallMemberMap a00089.html ae10b7be28437a0a2051e8a212a35da9e (const QMap< uint, uint > &a) CallMemberMap & operator= a00089.html ae20ee8d04bba03a002ad7e4abddbbf70 (const QMap< uint, uint > &a) Tp::CallStateReason a00090.html uint actor a00090.html afa5761f9b02d6683a9c1fd02f75f4c13 uint reason a00090.html a0f73e97b9ce2678a7637a66f1840ebd2 QString DBusReason a00090.html a3fd1f7d30b66390fae6bd660a77beb59 QString message a00090.html a67f766b6526c8156cb410bb6c70c6797 Tp::Candidate a00095.html uint component a00095.html aa87e518c275bfa1389fb3fec8593d4b7 QString IP a00095.html ad52bf86d2c2b44b12be58a9d2a4875b8 uint port a00095.html a407c6215d6aa3d64618b5e688449771c QVariantMap info a00095.html a744c2fd61fad4b8a60925ced0e7bb1cc Tp::CandidateInfo a00096.html CandidateInfo a00096.html aca9d51350940b3ab60cb23c69cf45dd4 () CandidateInfo a00096.html af5a57adefba8d98fda8fe0eb1d5b741a (const QMap< QString, QDBusVariant > &a) CandidateInfo & operator= a00096.html a39138283b1b61192b90c00cecb00d83c (const QMap< QString, QDBusVariant > &a) Tp::CapabilityChange a00100.html uint handle a00100.html af861f557a240c4027cbe21e3ac296a1d QString channelType a00100.html adf6f8fdc9ed9a750445332b3b3f07c78 uint oldGenericFlags a00100.html a23f2b3fed49ce61472bdc9fa068b994c uint newGenericFlags a00100.html afc024ff61d7056f2df64e4faa3a4f06d uint oldTypeSpecificFlags a00100.html ad605be5defad45db6c4aabc5cf9d7f5e uint newTypeSpecificFlags a00100.html a5c7ef332032c55f88f1ac7308ead9fd8 Tp::CapabilityPair a00101.html QString channelType a00101.html ae331dc8c4c853b804b5d8c436fd21b88 uint typeSpecificFlags a00101.html ac739c64fa64636013940fedf6e1e649d Tp::CaptchaAnswers a00103.html CaptchaAnswers a00103.html a1458dde424f45a29fb7ff87dfdcb0f8b () CaptchaAnswers a00103.html aac7a228d6ee4f3748cb29ae2a2de52dd (const QMap< uint, QString > &a) CaptchaAnswers & operator= a00103.html a109b8b67a563e0fa34d982d7399283e2 (const QMap< uint, QString > &a) Tp::CaptchaInfo a00105.html uint ID a00105.html add45381fad9491883eafb5d301f50109 QString type a00105.html afa6bd5fea1990542188a1c0a8fa216a5 QString label a00105.html a5d0d6128f05c5ac688cbef740803f0d8 uint flags a00105.html a700aa6dd98bde267b25472e698ffb085 QStringList availableMIMETypes a00105.html a598ed9ba79c6f35446eab21f0f8ffaed Tp::ChannelCallStateMap a00107.html ChannelCallStateMap a00107.html a5ea92444ad14a49ef1e80c5bd8ce10d9 () ChannelCallStateMap a00107.html a35df05e14241606c0e490d255f293216 (const QMap< uint, uint > &a) ChannelCallStateMap & operator= a00107.html af17418ea7b3aaebbb00b677824f34664 (const QMap< uint, uint > &a) Tp::ChannelClass a00108.html ChannelClass a00108.html a2cdd92e4288a21175ac76e64b9716fa9 () ChannelClass a00108.html a153f2964e50e2c512b4bf98364c2adb0 (const QMap< QString, QDBusVariant > &a) ChannelClass & operator= a00108.html a8229e830748f5d94ad0af5c18d800e21 (const QMap< QString, QDBusVariant > &a) Tp::ChannelDetails a00111.html QDBusObjectPath channel a00111.html a8b7a7ad095bcb6ad847c67fac177f18c QVariantMap properties a00111.html a58ea2d20c6fd914c0c91327e44d87554 Tp::ChannelInfo a00116.html QDBusObjectPath channel a00116.html aeaf4462b50596782ba32e2a3adfbffd5 QString channelType a00116.html a2acf8306b7b28207c98f03be05be7b35 uint handleType a00116.html a6d823ba8dc586535972b8c6e21f0952c uint handle a00116.html abcb87ea67667d6ea9f787ac862c5a69d Tp::ChannelOriginatorMap a00136.html ChannelOriginatorMap a00136.html a30e064311f1530dbf61fa8cf099958e2 () ChannelOriginatorMap a00136.html a69523d9dfc18bf49a99b442848731d31 (const QMap< uint, QDBusObjectPath > &a) ChannelOriginatorMap & operator= a00136.html a60fdcb55d57212eea0817de0e56b5a8d (const QMap< uint, QDBusObjectPath > &a) Tp::ChatStateMap a00152.html ChatStateMap a00152.html ad4dfaacc4ed5c669a08e209a4bffcdb5 () ChatStateMap a00152.html aa4cda41b139560ed90d0ac667e5de7f6 (const QMap< uint, uint > &a) ChatStateMap & operator= a00152.html a70cad5fd5c461ed4325a9df4ef9b36ce (const QMap< uint, uint > &a) Tp::ComponentStateMap a00160.html ComponentStateMap a00160.html a1c821f0009b989a3f38a4b9925033e11 () ComponentStateMap a00160.html a45e61aee2678ca225ce8f4466cd47dd4 (const QMap< uint, uint > &a) ComponentStateMap & operator= a00160.html a8d2070f327ebf6a5f83a0b31939961e7 (const QMap< uint, uint > &a) Tp::ContactAttributesMap a00191.html ContactAttributesMap a00191.html a9908c3b347b5c5a2c69ae2cf1433220b () ContactAttributesMap a00191.html a89eed8c58f5632e600b070c5da3efcc6 (const QMap< uint, QVariantMap > &a) ContactAttributesMap & operator= a00191.html a461566966fbcd67005ac24a7f7d5ad8c (const QMap< uint, QVariantMap > &a) Tp::ContactCapability a00194.html uint handle a00194.html a95a5f6cfc301edf04579c13bb295e430 QString channelType a00194.html a4539b0f8093f2476308003a930be6687 uint genericFlags a00194.html a4c025885b121932d426ed3565aded25c uint typeSpecificFlags a00194.html a55531eeb6d9ae9c1cff464a33da4f6c8 Tp::ContactClientTypes a00195.html ContactClientTypes a00195.html a62c1c8f1283665b4b242f3994b419f0d () ContactClientTypes a00195.html af9ec6f108474fbfc5ad3dcc438234dc4 (const QMap< uint, QStringList > &a) ContactClientTypes & operator= a00195.html a7e6fd4c6f5f10dd6b5a1b4c988cadf84 (const QMap< uint, QStringList > &a) Tp::ContactInfoField a00198.html QString fieldName a00198.html a1cc69fa1c18d29fe268b02aac866fbcb QStringList parameters a00198.html a5d3dbb5ec36017ecb335e31a9d2d16fb QStringList fieldValue a00198.html aebfb20659e9c1c15a117bee269b4e73e Tp::ContactLocations a00200.html ContactLocations a00200.html a7d5093d05ddb33caa88c7780343e4adb () ContactLocations a00200.html a1586598dc5060699308a67c6391b180e (const QMap< uint, QVariantMap > &a) ContactLocations & operator= a00200.html ab835d1df61f36536174d58d221290bb0 (const QMap< uint, QVariantMap > &a) Tp::ContactMediaDescriptionPropertiesMap a00202.html ContactMediaDescriptionPropertiesMap a00202.html ac3255557e39d6b52195ad6960b277c7e () ContactMediaDescriptionPropertiesMap a00202.html af9c98fe1941b6be961ed4032e2a2f94c (const QMap< uint, QVariantMap > &a) ContactMediaDescriptionPropertiesMap & operator= a00202.html a4031638288e46c10d7032b50a4f933a4 (const QMap< uint, QVariantMap > &a) Tp::ContactSSRCsMap a00209.html ContactSSRCsMap a00209.html ae2420e3ddd2051a4b57ca72aebe70a67 () ContactSSRCsMap a00209.html a74b5a4453757449974c90365a6fb4bb2 (const QMap< uint, UIntList > &a) ContactSSRCsMap & operator= a00209.html a4c5f01b784c7ee30c6b280799f1846f6 (const QMap< uint, UIntList > &a) Tp::ContactSearchMap a00206.html ContactSearchMap a00206.html a7e618543a0c3d519111def74065dcc3c () ContactSearchMap a00206.html a57c6790af9c51c9d276c5700fa27df20 (const QMap< QString, QString > &a) ContactSearchMap & operator= a00206.html a983b0fee5f4227f1af50bd1e0dfe393e (const QMap< QString, QString > &a) Tp::ContactSendingStateMap a00208.html ContactSendingStateMap a00208.html af1102c90ea5c7205b3934952bc0976fa () ContactSendingStateMap a00208.html a38c649db3a37d6644f5ec6790b39034f (const QMap< uint, uint > &a) ContactSendingStateMap & operator= a00208.html a20f56b6ea141078e48014a022e7b384b (const QMap< uint, uint > &a) Tp::ContactSubscriptions a00211.html uint subscribe a00211.html a84abdea97e9a6b6d5700b52f7a8caf36 uint publish a00211.html a4adede5b1eabff1eba25ed2a42b790dd QString publishRequest a00211.html afaed3e77a48d68af90830ee9ca843ce7 Tp::CurrencyAmount a00212.html int amount a00212.html ac788302b47ac04ad10146570c7950036 uint scale a00212.html a41e22c658bcfe34c05f95a3865074e01 QString currency a00212.html a1f8c2bad78d76fb77e36f9e8d1a4a869 Tp::DBusTubeMember a00220.html uint handle a00220.html a1a66fb62a27a3e884cd5d7f9e8fb052d QString uniqueName a00220.html a2aae283245a92c8f37b9a7d8b0b86ff1 Tp::DBusTubeParticipants a00221.html DBusTubeParticipants a00221.html a0bd4084e4104d4756e038c6f4816b2c2 () DBusTubeParticipants a00221.html ac2103d56dc8550c47e099dcb8e46a1e7 (const QMap< uint, QString > &a) DBusTubeParticipants & operator= a00221.html a96e59de468b8d30cd27448fd389f4430 (const QMap< uint, QString > &a) Tp::DebugMessage a00223.html double timestamp a00223.html a2482bdf6a5e616fa6d05cc159cd0e565 QString domain a00223.html a9650c39f1d5f1c4d7997f3778d50cbb7 uint level a00223.html a3124027d9ed546aabed530f4a7e80196 QString message a00223.html a631eb4370f17f82c8310b5d8cc86c486 Tp::FieldSpec a00229.html QString name a00229.html a17ae459552c227d6e78488bdc84d51f1 QStringList parameters a00229.html ac14cde2320037a2b387f47e95663d034 uint flags a00229.html acebd8c32de0c64cfd858ade76037401a uint max a00229.html aa7d60b9027ac275aa9ef7548f1f6686e Tp::HTTPPostData a00250.html QString key a00250.html abfcd2c0255ab587c5fc43043e3c1fbe6 QString value a00250.html a398fdaef7e43ae0a4e4fb31d7f652648 Tp::HandleIdentifierMap a00246.html HandleIdentifierMap a00246.html a0457cac4989eaef78f3b86b37db457f8 () HandleIdentifierMap a00246.html a97cc6a58adf909d664ec5f4efc4e3327 (const QMap< uint, QString > &a) HandleIdentifierMap & operator= a00246.html a91bdbb50d21509a5ad450c7c46d62c0e (const QMap< uint, QString > &a) Tp::HandleOwnerMap a00247.html HandleOwnerMap a00247.html a38c5788a5daa74e3f9f1a4af88f5becc () HandleOwnerMap a00247.html a2907f82e6ea97adc208d420444ff3c5a (const QMap< uint, uint > &a) HandleOwnerMap & operator= a00247.html afccefcebb32e155d926078656283be1b (const QMap< uint, uint > &a) Tp::LocalPendingInfo a00258.html uint toBeAdded a00258.html add8926f89623ae757569314e71868890 uint actor a00258.html a1a92791d2b1509bea1ce14a6cc812a2a uint reason a00258.html a2f513e7ae121f945b84c2a0c8850a777 QString message a00258.html afc71db75eda2f2edf228bf4b69e1bfca Tp::Location a00259.html Location a00259.html aaa4547edc84e248b1b2b9ff908d4f72e () Location a00259.html a4035686bd315d84b1dcf49d8ed8a39c3 (const QMap< QString, QDBusVariant > &a) Location & operator= a00259.html a40517f70cec10c31964297ea24cbb988 (const QMap< QString, QDBusVariant > &a) Tp::Mail a00261.html Mail a00261.html a8429598413ba5698761d4104e239f1bf () Mail a00261.html aa9f51f13a65b8d0de73ea1c242990911 (const QMap< QString, QDBusVariant > &a) Mail & operator= a00261.html a4c5d329bc561d00d8e41880ac6190187 (const QMap< QString, QDBusVariant > &a) Tp::MailAddress a00262.html QString name a00262.html aa061624bfb4b0e1fbba6a8060e019cb2 QString address a00262.html af7a5af758ca2d8cccec7d25177be5b6f Tp::MediaDescriptionOffer a00264.html QDBusObjectPath mediaDescription a00264.html a7c1f87d5f000fe25bdef4f828e3a37ef QVariantMap properties a00264.html a5f3da2243a353de9cc1013342ebcbaca Tp::MediaDescriptionProperties a00265.html MediaDescriptionProperties a00265.html a20563e0d40c51f8d1a54c8a8e535b07f () MediaDescriptionProperties a00265.html a2531f6cbad7c151249f29925695b7356 (const QMap< QString, QDBusVariant > &a) MediaDescriptionProperties & operator= a00265.html a6128afdfdbff49497cb0a4a3e14e7b3a (const QMap< QString, QDBusVariant > &a) Tp::MediaSessionHandlerInfo a00266.html QDBusObjectPath sessionHandler a00266.html a77f64dbde416a9b7f5fbba7acd10245e QString mediaSessionType a00266.html a32cc59fe4458e6f817716fb666d97c32 Tp::MediaStreamHandlerTransport a00271.html uint componentNumber a00271.html afa2bff5c2c31d4abeaf7f1f1566f4095 QString IPAddress a00271.html ae938c51294ba2500f67f18c98abd21c6 uint port a00271.html acdb5a875086cc85cb32be7665c489132 uint protocol a00271.html a60f70f93424862f2d0b118c5e173358f QString subtype a00271.html a29f3be6e0c12630d97e6739a4c74d442 QString profile a00271.html ac5ce026b4c33a923b8c0bb6486b479df double preferenceValue a00271.html a7c6678ca560a9382bdc6c039cef2a55a uint transportType a00271.html a832b70ed3b9d9c7668896a6eda6ed387 QString username a00271.html af1b86069bdae8e7e5b89f9043b7b021d QString password a00271.html a9fdfd85943b5058a18656eb720e6760f Tp::MediaStreamInfo a00272.html uint identifier a00272.html a976811fc43ada79fd328f3f1dc11e2d4 uint contact a00272.html ac4c7bca76588559028d435b2fe6b6224 uint type a00272.html a8b8721d07d4a4058897c1bc1487e52c5 uint state a00272.html a6542749a6d740def2c97c8aaa4a77bbf uint direction a00272.html aa623a103c92274d1a7d6870364c0f48c uint pendingSendFlags a00272.html a946e78a080cccd4ca47a0581f69a20a3 Tp::MessagePart a00284.html MessagePart a00284.html a1a41d368c27c4c1e02bdefb08f22264a () MessagePart a00284.html a6b75645f5b063c5ef953beb5690aed29 (const QMap< QString, QDBusVariant > &a) MessagePart & operator= a00284.html ac2e934cc97febd88b7c1906617904c00 (const QMap< QString, QDBusVariant > &a) Tp::MessagePartContentMap a00285.html MessagePartContentMap a00285.html a059ca636ee3e769540506c0d13a1b137 () MessagePartContentMap a00285.html a2ab1c58c121b99f935baeae0dcc1664c (const QMap< uint, QDBusVariant > &a) MessagePartContentMap & operator= a00285.html a91e48d97c6706e5d37ec458f9f5a87ba (const QMap< uint, QDBusVariant > &a) Tp::Metadata a00286.html Metadata a00286.html a735b34760675858f0371c311b351b155 () Metadata a00286.html a6b9d49a25101d281e5d4c3327565d862 (const QMap< QString, QStringList > &a) Metadata & operator= a00286.html a4994446a28bdaa899c94b9d43dfa44e6 (const QMap< QString, QStringList > &a) Tp::MultipleStatusMap a00288.html MultipleStatusMap a00288.html adc0aa567d7a9e230bef4d5f0df193d65 () MultipleStatusMap a00288.html a59b800128f0fd477acfa8e85ec3e2311 (const QMap< QString, QVariantMap > &a) MultipleStatusMap & operator= a00288.html a1770952e0be9af63c9da37cee95b6c91 (const QMap< QString, QVariantMap > &a) Tp::NotDelegatedError a00289.html QString errorName a00289.html aa8d75c8bf4cd609d65b53eb8c6f5a339 QString errorMessage a00289.html ac163be5c025227fd607e121250792e8e Tp::ObjectImmutablePropertiesMap a00293.html ObjectImmutablePropertiesMap a00293.html aa27ddf2431cd767e892778c8084312fc () ObjectImmutablePropertiesMap a00293.html a0e548da289afe6f9e80809860723f235 (const QMap< QDBusObjectPath, QVariantMap > &a) ObjectImmutablePropertiesMap & operator= a00293.html a952ae67ad95ccb8ca5fd681198882eb3 (const QMap< QDBusObjectPath, QVariantMap > &a) Tp::ParamSpec a00303.html QString name a00303.html a3427336575350de74b5cef719399da6d uint flags a00303.html a6ffd3669f250f78b22ead709307d3594 QString signature a00303.html ab2133ba67b01b05a7d49bfc296e32f92 QDBusVariant defaultValue a00303.html a7fa9c745e7b1a0d8deb7033d8df2990c Tp::PendingTextMessage a00328.html uint identifier a00328.html a2853752a52c8bfb5425572d7b3b7c1a0 uint unixTimestamp a00328.html afae449bf464ff944c189cf6b8f986927 uint sender a00328.html a9aa8df89dbb5cf050b10fe567a841199 uint messageType a00328.html a6064b4fc055b6dbab1d934a73ffb5808 uint flags a00328.html a2a9b6131f79fdc807e671d88de68b34d QString text a00328.html a304f13812a4fa78bd7f7d9b917212042 Tp::PropertyFlagsChange a00340.html uint propertyID a00340.html ad2a67b75ee1f452515312098ba132bfd uint newFlags a00340.html a6ebcdbedd503e4650c72708948144bb6 Tp::PropertySpec a00341.html uint propertyID a00341.html add6e67ef920701101b725d7fff0a320e QString name a00341.html a0f154fce1538a8041962b9a3c5af3029 QString signature a00341.html a3b107828ef8655fb00725686b74d51f2 uint flags a00341.html a1644a52dfe064265a0aa5fe6e90a2917 Tp::PropertyValue a00342.html uint identifier a00342.html aa2d2bbdf22d027af2eb6dcac5dfa065a QDBusVariant value a00342.html aba46069a91abcd786a53fcdeb3956055 Tp::ProtocolPropertiesMap a00349.html ProtocolPropertiesMap a00349.html a1758abbbca36be739a9b2422d3247fe3 () ProtocolPropertiesMap a00349.html aa355f8e3cbbfd3839cfc226f8113b1ea (const QMap< QString, QVariantMap > &a) ProtocolPropertiesMap & operator= a00349.html ae1119b35a4fd21e9d5f77eb74e1faa73 (const QMap< QString, QVariantMap > &a) Tp::QualifiedPropertyValueMap a00358.html QualifiedPropertyValueMap a00358.html af649e09c1a0ff93d8562a3d12e6c5d19 () QualifiedPropertyValueMap a00358.html a31b00139677db9d0b4b46f8a5f9b1716 (const QMap< QString, QDBusVariant > &a) QualifiedPropertyValueMap & operator= a00358.html adaeba5156fca40e92bf63e5b7019ce6b (const QMap< QString, QDBusVariant > &a) Tp::RTCPFeedbackMessage a00371.html QString type a00371.html ad099f588a114b1435ae2547422859c19 QString subtype a00371.html a21e3b5a4f1515b386c18d4c5f6631e6e QString parameters a00371.html ac2eef033839f24fc07e88df4e7e3e984 Tp::RTPHeaderExtension a00374.html uint ID a00374.html a7e20d861df2afef9a4258ed1b2fb6b6c uint direction a00374.html a63f16b528134a1814ddf5e0d43687c1f QString URI a00374.html a57eabda42755fb13b25bbe72c7c178fb QString parameters a00374.html abb8f26753104de224009d275b0bc0cca Tp::RequestableChannelClass a00365.html QVariantMap fixedProperties a00365.html aea833cfc56dea2405a61a0d8d82ee2a2 QStringList allowedProperties a00365.html a43de5927a252d90a988e35d52a37b87f Tp::RichPresenceAccessControl a00368.html uint type a00368.html a7ca0e7eb95c3dca3ce5081124b17882b QDBusVariant detail a00368.html a7db7d0f143be8054b958e7e7812ec4fe Tp::RoomInfo a00369.html uint handle a00369.html aa7519a9ee4cded06a72c7da7007923f2 QString channelType a00369.html abc4d26dcdcf74873727598433588f8a2 QVariantMap info a00369.html a629a9bcf2b50ccfae3138e2342ea2974 Tp::ServicePoint a00377.html uint servicePointType a00377.html a4574097ed1038db922fb63d88878a10a QString service a00377.html ad3fe8e6f9bfcdef22c3a0ae84a6c4700 Tp::SimplePresence a00383.html uint type a00383.html ab079d0fed6dcfe3c8dc6b64e925cb7f7 QString status a00383.html a3d0c93676cdf1c16bd14ed4a95f10914 QString statusMessage a00383.html a43bddb3a0909795eec3f9cc69a3787fc Tp::SimpleStatusSpec a00384.html uint type a00384.html a2529c0e267eb320c729e99bc43f805db bool maySetOnSelf a00384.html a968cddecd58b074ec3e785c2946f73ba bool canHaveMessage a00384.html afde4b8cdacfb5dd53e34bf7e09cabc9d Tp::SingleContactAttributesMap a00388.html SingleContactAttributesMap a00388.html a84c3195bf522f040ce50713580a03d0e () SingleContactAttributesMap a00388.html af062e3d67bb3e92a3fa03aa8d976ee73 (const QMap< QString, QDBusVariant > &a) SingleContactAttributesMap & operator= a00388.html a2ce188ed5088f1116a892ff443236c78 (const QMap< QString, QDBusVariant > &a) Tp::SocketAddressIP a00389.html QString address a00389.html a6912d0ea8cd99a048ebbbb61bbb39e7d ushort port a00389.html a17b7fa04cefee793067e7b022185e729 Tp::SocketAddressIPv4 a00390.html QString address a00390.html a6ce2c73995ea593326b7237e38a67c7a ushort port a00390.html adc892e488990cc26d818aa8f5857fc67 Tp::SocketAddressIPv6 a00391.html QString address a00391.html a49e2edfb1ed3ba66b85ff8546ac517e3 ushort port a00391.html a8c16ef9b2e43a267705ebaeb1f331946 Tp::SocketNetmaskIPv4 a00392.html QString address a00392.html a2840c43c4667b00113291b6bc24dab44 uchar prefixLength a00392.html af3488c362f4aabc881618f061d31cbf4 Tp::SocketNetmaskIPv6 a00393.html QString address a00393.html a3cf2596aad66d4747c6f4ec83fd157f0 uchar prefixLength a00393.html aec86021fa6cc9595b646271004571f92 Tp::StreamCredentials a00398.html QString username a00398.html a98adf83f0e60efbc694f3f871b441bf1 QString password a00398.html a16f3a03e9f071d701475ecbbf006e8c8 Tp::StringStringMap a00404.html StringStringMap a00404.html ab26589a7364423321a33220f00f85cc5 () StringStringMap a00404.html a5c4a7c18bc10a29c76c47038689d29a2 (const QMap< QString, QString > &a) StringStringMap & operator= a00404.html a083ef21fe67a47fd83b37a83dd92b9a9 (const QMap< QString, QString > &a) Tp::StringVariantMap a00405.html StringVariantMap a00405.html a91d545ae00fe3044bf9b147c08ea8483 () StringVariantMap a00405.html a8309328030f6b45fb3b4ed3dd9aca01b (const QMap< QString, QDBusVariant > &a) StringVariantMap & operator= a00405.html a8b4d73533ab802cc9a4ab21b7e555f0b (const QMap< QString, QDBusVariant > &a) Tp::SupportedSocketMap a00406.html SupportedSocketMap a00406.html a5542e1efdd4315a2b4a20872164fc873 () SupportedSocketMap a00406.html af6f50437da207644c7dd06f946d32144 (const QMap< uint, UIntList > &a) SupportedSocketMap & operator= a00406.html a2fdc17beea11ec58faf5c7c449e6be93 (const QMap< uint, UIntList > &a) Tp::TLSCertificateRejection a00409.html uint reason a00409.html a596fc6b335546115f80ac0945036f0aa QString error a00409.html a1ba42c160a46a02bd2aa23fc844cfd6e QVariantMap details a00409.html a870aa788afd0dfbc10afab90bf663b4e Tp::TubeInfo a00413.html uint identifier a00413.html a55ec47239502d4adb9db9ba64cdaf794 uint initiator a00413.html a840be6279f3ce706ffa05c9411511934 uint type a00413.html a7534872596f596abfbf1c0e7ceba0d37 QString service a00413.html adcbe49865a86edc12daf00c6403768b6 QVariantMap parameters a00413.html a987451ee37a0a9572f37ec6b355a0457 uint state a00413.html a5730ddfb08aa24c7b81312cdd192bbda Tp::VCardFieldAddressMap a00415.html VCardFieldAddressMap a00415.html addf7be050c3f5988ba9b7ba5b4dd2b7d () VCardFieldAddressMap a00415.html a9d54981e779870680f9e9f82b91455d8 (const QMap< QString, QString > &a) VCardFieldAddressMap & operator= a00415.html a1dec6f99ddde1061e63a0f5a07efde90 (const QMap< QString, QString > &a) Tp::VideoResolution a00416.html uint width a00416.html a3098c4efc3775c208916c1dcece5a43e uint height a00416.html a02c26671ca0031f6a75b66e26385d2f6 Tp::CandidatePair a00097.html Candidate local a00097.html a8a9504d8544994f622f15a26c6c2d5dd Candidate remote a00097.html afcdcf1056135a67f8dfdcdbaede619ef Tp::Codec a00159.html uint identifier a00159.html a7be2726f7a7fea865e7266e6f2b2177b QString name a00159.html a16b28348bda458eccebd50c9b5ad7e7d uint clockrate a00159.html a271fc0d965a75feb092cca1bb95a9136 uint channels a00159.html a8c800041f377ce5d5f38a7f8185cb9bc bool updated a00159.html a0b2f8520c1c673d176aa250ce1490b25 StringStringMap parameters a00159.html a61659a12fd6e58107f4c8f4aef03633e Tp::ContactCapabilitiesMap a00193.html ContactCapabilitiesMap a00193.html a09bf49d3f5afcdd4e5b23f8e1c94502b () ContactCapabilitiesMap a00193.html ab04f4abbf6b44aa09fdadac89ea3c181 (const QMap< uint, RequestableChannelClassList > &a) ContactCapabilitiesMap & operator= a00193.html a1abfaae5b86d434d36d6150ecfc7aad2 (const QMap< uint, RequestableChannelClassList > &a) Tp::ContactInfoMap a00199.html ContactInfoMap a00199.html a52f9eea5f802e7d203c0a23d82255c63 () ContactInfoMap a00199.html a1937f27cdb21e0f2acf4f404e7756b46 (const QMap< uint, ContactInfoFieldList > &a) ContactInfoMap & operator= a00199.html a27d39c2a92c669066f1717051cea65f8 (const QMap< uint, ContactInfoFieldList > &a) Tp::ContactSearchResultMap a00207.html ContactSearchResultMap a00207.html a03f40be63f84768088a33414ab75a2a7 () ContactSearchResultMap a00207.html a0b3400da0ea9237ee66a35c6114b6789 (const QMap< QString, ContactInfoFieldList > &a) ContactSearchResultMap & operator= a00207.html a29eeda8ec75bd8ac127e9a575c8810a6 (const QMap< QString, ContactInfoFieldList > &a) Tp::ContactSubscriptionMap a00210.html ContactSubscriptionMap a00210.html a7dca0876b80ed93d7f50b650e40a6aef () ContactSubscriptionMap a00210.html af63d33a231941350abd7e0d34a86e8c3 (const QMap< uint, ContactSubscriptions > &a) ContactSubscriptionMap & operator= a00210.html a1b23d32401dc349380d7e0ea7d5779ec (const QMap< uint, ContactSubscriptions > &a) Tp::HandlerCapabilities a00248.html QString wellKnownName a00248.html a4dfb85ed3096c2f09886391b1dd679aa StringVariantMapList channelClasses a00248.html a3572e7ce2f70f8066b144b700ffa4fd1 QStringList capabilities a00248.html afd2552fbfbc13aa8c39a6b4f2d2ce70f Tp::LastActivityAndStatuses a00257.html uint lastActivity a00257.html aa2c84793326941697aeebba6161dcfae MultipleStatusMap statuses a00257.html ad969842a107cc652f9feff91018c6c4d Tp::MailURL a00263.html QString URL a00263.html a8532db2c3603357ccc7369924494fd7f uint method a00263.html a75ff4e8924eb4433b56510a529864e64 HTTPPostDataList postData a00263.html a403f01eb6c062addc17bfc7a76a7bf9e Tp::MediaStreamHandlerCandidate a00268.html QString name a00268.html a6dbd5e48b794a037069f23851ec96b1d MediaStreamHandlerTransportList transports a00268.html a8e7dd63334f23067a7bb76aed0362074 Tp::MediaStreamHandlerCodec a00269.html uint codecID a00269.html a00c689f7bb4944dad548cc399fe48db4 QString name a00269.html ad1d1b69a148fb215b3f48f0e8dfbc1a6 uint mediaType a00269.html ab5ecbdd99a3f3275183c15936474f49e uint clockRate a00269.html a383b950a18b0fe0461726d648601e687 uint numberOfChannels a00269.html a57b78c25e631b7721a379a1add33959d StringStringMap parameters a00269.html a517fabe2623e3ab4159acd504fb559d1 Tp::NotDelegatedMap a00290.html NotDelegatedMap a00290.html adc24e8b38437f78d82aedf19e71ec688 () NotDelegatedMap a00290.html a6060a09791049d8b02fe25ff5eddaa6e (const QMap< QDBusObjectPath, NotDelegatedError > &a) NotDelegatedMap & operator= a00290.html aa4d65983375469dc6c18c0c305037e89 (const QMap< QDBusObjectPath, NotDelegatedError > &a) Tp::RTCPFeedbackMessageProperties a00373.html uint RTCPMinimumInterval a00373.html a785815c118b8414a41a9fd27a28edd94 RTCPFeedbackMessageList messages a00373.html a3a036862bfec531810d7e57b85c13a55 Tp::ServicePointInfo a00378.html ServicePoint servicePoint a00378.html a11d2f7bfab8addaedc24d3bfa38f5418 QStringList serviceIDs a00378.html a332187b214d59eff84cbed3737d8638a Tp::SimpleContactPresences a00381.html SimpleContactPresences a00381.html a1be942cc8d304f7bb753345a009cb8c1 () SimpleContactPresences a00381.html a5c842cea7dd50700132c881de296ca48 (const QMap< uint, SimplePresence > &a) SimpleContactPresences & operator= a00381.html a05b64cb109ed668352ad78f566b38cd2 (const QMap< uint, SimplePresence > &a) Tp::SimpleStatusSpecMap a00385.html SimpleStatusSpecMap a00385.html ad856cc9010d6e93b9577ec871d15ee90 () SimpleStatusSpecMap a00385.html accfaf94dd3211ab66d8322f4c9af62d8 (const QMap< QString, SimpleStatusSpec > &a) SimpleStatusSpecMap & operator= a00385.html a1d9293c6ef566b50902a7424baab6295 (const QMap< QString, SimpleStatusSpec > &a) Tp::StatusSpec a00396.html uint type a00396.html aa7aa2223df547af769307be0e778bfd0 bool maySetOnSelf a00396.html a56f0b00e61d877093c0e6903dcde7636 bool exclusive a00396.html ac03b2ebaec3e5a1f0d4a0afcff963871 StringStringMap parameterTypes a00396.html a096f1a7de3555905be469ef0560c370e Tp::ContactCodecMap a00196.html ContactCodecMap a00196.html a38e316ab8d0cb28f7216e070b58c99b9 () ContactCodecMap a00196.html aa930cc6a3528f20d0f19c19b5a0cf00f (const QMap< uint, CodecList > &a) ContactCodecMap & operator= a00196.html a7341b4d60bdcd4c18df5b8230e7f2196 (const QMap< uint, CodecList > &a) Tp::ContactPresences a00204.html ContactPresences a00204.html a8a127b0aadb1132dc679e9211d6bcbfc () ContactPresences a00204.html a0076ed95787843e7d39c76b8f9f0ab54 (const QMap< uint, LastActivityAndStatuses > &a) ContactPresences & operator= a00204.html ab8b6c93d7984dd0c10e044f2b2a60af5 (const QMap< uint, LastActivityAndStatuses > &a) Tp::RTCPFeedbackMessageMap a00372.html RTCPFeedbackMessageMap a00372.html ac6667858600fc8fc783f51e68e5e0f48 () RTCPFeedbackMessageMap a00372.html ac8c658ed9891b42f4df4da4ec436e328 (const QMap< uint, RTCPFeedbackMessageProperties > &a) RTCPFeedbackMessageMap & operator= a00372.html a191d1e92065cf0a57930fb941d2049b8 (const QMap< uint, RTCPFeedbackMessageProperties > &a) Tp::StatusSpecMap a00397.html StatusSpecMap a00397.html a7b4ac05b7522441a67ce00c5ec7978d2 () StatusSpecMap a00397.html af2908de8260cff7570446248e3a90754 (const QMap< QString, StatusSpec > &a) StatusSpecMap & operator= a00397.html a1d55b26ca8ce23c9e5618fd78f511828 (const QMap< QString, StatusSpec > &a) Tp::AccountCapabilityFilter a00041.html Tp::Client a00728.html Tp::Client::DBus Tp::Client::AccountManagerInterface Tp::Client::AccountInterface Tp::Client::AccountInterfaceAddressingInterface Tp::Client::AccountInterfaceAvatarInterface Tp::Client::AccountInterfaceStorageInterface Tp::Client::CallContentMediaDescriptionInterface Tp::Client::CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface Tp::Client::CallContentMediaDescriptionInterfaceRTCPFeedbackInterface Tp::Client::CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface Tp::Client::CallContentInterface Tp::Client::CallContentInterfaceAudioControlInterface Tp::Client::CallContentInterfaceDTMFInterface Tp::Client::CallContentInterfaceMediaInterface Tp::Client::CallContentInterfaceVideoControlInterface Tp::Client::CallStreamEndpointInterface Tp::Client::CallStreamInterface Tp::Client::CallStreamInterfaceMediaInterface Tp::Client::ChannelDispatchOperationInterface Tp::Client::ChannelDispatcherInterface Tp::Client::ChannelRequestInterface Tp::Client::ChannelInterface Tp::Client::ChannelInterfaceAnonymityInterface Tp::Client::ChannelInterfaceCallStateInterface Tp::Client::ChannelInterfaceCaptchaAuthenticationInterface Tp::Client::ChannelInterfaceChatStateInterface Tp::Client::ChannelInterfaceConferenceInterface Tp::Client::ChannelInterfaceDTMFInterface Tp::Client::ChannelInterfaceDestroyableInterface Tp::Client::ChannelInterfaceFileTransferMetadataInterface Tp::Client::ChannelInterfaceGroupInterface Tp::Client::ChannelInterfaceHoldInterface Tp::Client::ChannelInterfaceMediaSignallingInterface Tp::Client::ChannelInterfaceMessagesInterface Tp::Client::ChannelInterfacePasswordInterface Tp::Client::ChannelInterfaceSASLAuthenticationInterface Tp::Client::ChannelInterfaceSMSInterface Tp::Client::ChannelInterfaceSecurableInterface Tp::Client::ChannelInterfaceServicePointInterface Tp::Client::ChannelInterfaceTubeInterface Tp::Client::ChannelTypeCallInterface Tp::Client::ChannelTypeContactListInterface Tp::Client::ChannelTypeContactSearchInterface Tp::Client::ChannelTypeDBusTubeInterface Tp::Client::ChannelTypeFileTransferInterface Tp::Client::ChannelTypeRoomListInterface Tp::Client::ChannelTypeServerAuthenticationInterface Tp::Client::ChannelTypeServerTLSConnectionInterface Tp::Client::ChannelTypeStreamTubeInterface Tp::Client::ChannelTypeStreamedMediaInterface Tp::Client::ChannelTypeTextInterface Tp::Client::ChannelTypeTubesInterface Tp::Client::ClientInterface Tp::Client::ClientApproverInterface Tp::Client::ClientHandlerInterface Tp::Client::ClientInterfaceRequestsInterface Tp::Client::ClientObserverInterface Tp::Client::ConnectionManagerInterface Tp::Client::ProtocolInterface Tp::Client::ProtocolInterfaceAddressingInterface Tp::Client::ProtocolInterfaceAvatarsInterface Tp::Client::ProtocolInterfacePresenceInterface Tp::Client::ConnectionInterface Tp::Client::ConnectionInterfaceAddressingInterface Tp::Client::ConnectionInterfaceAliasingInterface Tp::Client::ConnectionInterfaceAnonymityInterface Tp::Client::ConnectionInterfaceAvatarsInterface Tp::Client::ConnectionInterfaceBalanceInterface Tp::Client::ConnectionInterfaceCapabilitiesInterface Tp::Client::ConnectionInterfaceCellularInterface Tp::Client::ConnectionInterfaceClientTypesInterface Tp::Client::ConnectionInterfaceContactBlockingInterface Tp::Client::ConnectionInterfaceContactCapabilitiesInterface Tp::Client::ConnectionInterfaceContactGroupsInterface Tp::Client::ConnectionInterfaceContactInfoInterface Tp::Client::ConnectionInterfaceContactListInterface Tp::Client::ConnectionInterfaceContactsInterface Tp::Client::ConnectionInterfaceLocationInterface Tp::Client::ConnectionInterfaceMailNotificationInterface Tp::Client::ConnectionInterfacePowerSavingInterface Tp::Client::ConnectionInterfacePresenceInterface Tp::Client::ConnectionInterfaceRequestsInterface Tp::Client::ConnectionInterfaceServicePointInterface Tp::Client::ConnectionInterfaceSimplePresenceInterface Tp::Client::DebugInterface Tp::Client::MediaSessionHandlerInterface Tp::Client::MediaStreamHandlerInterface Tp::Client::PropertiesInterfaceInterface Tp::Client::AuthenticationTLSCertificateInterface Tp::Client::AccountManagerInterface a00048.html Tp::AbstractInterface QDBusPendingReply< QDBusObjectPath > CreateAccount a00048.html ab7351db4a9af1fbbd0835d9d1e4716fe (const QString &connectionManager, const QString &protocol, const QString &displayName, const QVariantMap &parameters, const QVariantMap &properties, int timeout=-1) void AccountRemoved a00048.html a8894f899b1e58cb1f2190f14240e6679 (const QDBusObjectPath &account) void AccountValidityChanged a00048.html a2b5e39cf54b6fea3a771f8797f5a2b6e (const QDBusObjectPath &account, bool valid) AccountManagerInterface a00048.html a2a226c9f5c42b4ddec22f7a74076314a (const QString &busName, const QString &objectPath, QObject *parent=0) AccountManagerInterface a00048.html abcdbf868d6095e422c70a91edd36d1f8 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) AccountManagerInterface a00048.html a33ca113a2d0c8759e66932c7193fcb6c (Tp::DBusProxy *proxy) Tp::PendingVariant * requestPropertyInterfaces a00048.html ad826980978d4c837909afdb9783be5a8 () const Tp::PendingVariant * requestPropertyValidAccounts a00048.html a214c776c1a116bb801af49eed60fff28 () const Tp::PendingVariant * requestPropertyInvalidAccounts a00048.html a43f0bbf47369464170fb685eb3608b9e () const Tp::PendingVariant * requestPropertySupportedAccountProperties a00048.html a90b55336750c04c3ec12e3eea0c00d64 () const Tp::PendingVariantMap * requestAllProperties a00048.html a1f905388fc689a06434548a271dbd83c () const static QLatin1String staticInterfaceName a00048.html a208f53b265c050567fa448090e9e57cb () virtual void invalidate a00048.html a78899af823271616f9c503b3e60257ef (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::AccountInterface a00043.html Tp::AbstractInterface QDBusPendingReply Remove a00043.html aafff9e9364c41883b86e508eae1b6d1e (int timeout=-1) QDBusPendingReply< QStringList > UpdateParameters a00043.html a3ba5ad3cfa9a002bb2c66c74104ad532 (const QVariantMap &set, const QStringList &unset, int timeout=-1) QDBusPendingReply Reconnect a00043.html a67dde6a908c5e44c599c6816ab0cf8a8 (int timeout=-1) void Removed a00043.html ac54562f56877c69c4a3d27ca758cf8fd () void AccountPropertyChanged a00043.html ab1c040e758a3af7da14fc3f570f24a40 (const QVariantMap &properties) AccountInterface a00043.html ae31d2650076d6b4b4d89906d6c71a4bc (const QString &busName, const QString &objectPath, QObject *parent=0) AccountInterface a00043.html a8436989210e6335be512001bc8654f2e (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) AccountInterface a00043.html add59859f573579959b72f2a402ff5c6a (Tp::DBusProxy *proxy) Tp::PendingVariant * requestPropertyInterfaces a00043.html ac092a1717f929f7db1aaffaccb564479 () const Tp::PendingVariant * requestPropertyDisplayName a00043.html a4d8023273f270922b59493f23ca2a221 () const Tp::PendingOperation * setPropertyDisplayName a00043.html a27adff0d773158bbe81340aa4dac8a27 (QString newValue) Tp::PendingVariant * requestPropertyIcon a00043.html a7b797f4cf85678499338df91d18d8ed6 () const Tp::PendingOperation * setPropertyIcon a00043.html ab18a3c398ae4e5fef39b784dd9a54649 (QString newValue) Tp::PendingVariant * requestPropertyValid a00043.html ac91ef67bd0fe78f6b55159315a29bb81 () const Tp::PendingVariant * requestPropertyEnabled a00043.html a1ea9fbd2a42882e47ebb70c8fb300845 () const Tp::PendingOperation * setPropertyEnabled a00043.html ac4b9ce97170a52ac579b2c0d59a5586f (bool newValue) Tp::PendingVariant * requestPropertyNickname a00043.html a90018ec9de59a0d8e3949995dfdc084c () const Tp::PendingOperation * setPropertyNickname a00043.html a1bff26528d1f9793e0d528f70ad9da2c (QString newValue) Tp::PendingVariant * requestPropertyService a00043.html ae9040da7b193ea9597fff03f9fa5422d () const Tp::PendingOperation * setPropertyService a00043.html a69c80a9cb0077671630c73c0cfff5c34 (QString newValue) Tp::PendingVariant * requestPropertyParameters a00043.html a3bba5536ec20e444de1048db449aa981 () const Tp::PendingVariant * requestPropertyAutomaticPresence a00043.html a05b1a012789347f54c8aa65badd91922 () const Tp::PendingOperation * setPropertyAutomaticPresence a00043.html a40662d9b543e60e45a874751e47d2a5e (Tp::SimplePresence newValue) Tp::PendingVariant * requestPropertyConnectAutomatically a00043.html a1b3df420b6dd256f3246bbe9a283f761 () const Tp::PendingOperation * setPropertyConnectAutomatically a00043.html aff2365221bd8ec0cbcac24aa104cef31 (bool newValue) Tp::PendingVariant * requestPropertyConnection a00043.html aac5de300678dcb2b3632a06a51954ec0 () const Tp::PendingVariant * requestPropertyConnectionStatus a00043.html aa96d364028e5a1bf9438552e6d6c6d6c () const Tp::PendingVariant * requestPropertyConnectionStatusReason a00043.html aac277a5402c90ffc4d7891fecea13ab4 () const Tp::PendingVariant * requestPropertyConnectionError a00043.html a7c23434905a5a83069a752620562ac62 () const Tp::PendingVariant * requestPropertyConnectionErrorDetails a00043.html a2887994607dffcdc98696a0ce2711fc0 () const Tp::PendingVariant * requestPropertyCurrentPresence a00043.html a9e6d071253895146d85eb8f315b7eec2 () const Tp::PendingVariant * requestPropertyRequestedPresence a00043.html a38e8810907a6bfcf368ecf2a4d28cba2 () const Tp::PendingOperation * setPropertyRequestedPresence a00043.html adf6efd445e74a91fce805da68acd8d6a (Tp::SimplePresence newValue) Tp::PendingVariant * requestPropertyChangingPresence a00043.html a75c501194be615df752ba7df0c487d25 () const Tp::PendingVariant * requestPropertyNormalizedName a00043.html a9aea7ff6df329438b2a4937686d20219 () const Tp::PendingVariant * requestPropertyHasBeenOnline a00043.html a4c3d8e27c21236ad39eb3bddac2c46f4 () const Tp::PendingVariant * requestPropertySupersedes a00043.html a05c9e7324308782933906bcecf722f26 () const Tp::PendingOperation * setPropertySupersedes a00043.html a20a73a086ee2b377748c64aab880fae2 (Tp::ObjectPathList newValue) Tp::PendingVariantMap * requestAllProperties a00043.html ab72bdbe9b6f425a75beddc06a1f4b992 () const static QLatin1String staticInterfaceName a00043.html a78754208dfe803627327780459d485fb () virtual void invalidate a00043.html a3d919b1b4c69abf8f8f221cddf6d9780 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::AccountInterfaceAddressingInterface a00044.html Tp::AbstractInterface QDBusPendingReply SetURISchemeAssociation a00044.html a2c6138cf93d90216a52cccc9ccb94d8d (const QString &URIScheme, bool association, int timeout=-1) AccountInterfaceAddressingInterface a00044.html a6acaaa342386de67bac65e6aa2a17304 (const QString &busName, const QString &objectPath, QObject *parent=0) AccountInterfaceAddressingInterface a00044.html ac5ced47e8b710d60f4b33a7b7bbdb65a (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) AccountInterfaceAddressingInterface a00044.html a0d7a7568d98ed1630e89670ddeaaee79 (Tp::DBusProxy *proxy) AccountInterfaceAddressingInterface a00044.html a369c13927928b13341127730c0025494 (const Tp::Client::AccountInterface &mainInterface) AccountInterfaceAddressingInterface a00044.html a6b239568bcbfc82ec583440759f1bf3f (const Tp::Client::AccountInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyURISchemes a00044.html a74d54665f6b0cb230663b6769b297bdc () const Tp::PendingVariantMap * requestAllProperties a00044.html a26be6a33179973aa2b189ab7addc1bf5 () const static QLatin1String staticInterfaceName a00044.html adf5073ab7af6de28230c5df27ff2c499 () virtual void invalidate a00044.html a2ad9311bb6fe091b703d4011797339ae (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::AccountInterfaceAvatarInterface a00045.html Tp::AbstractInterface void AvatarChanged a00045.html aca120acd11e059ed209bf83cda0ffee0 () AccountInterfaceAvatarInterface a00045.html abfe3a3f95b1f9768626aedd7661ba9ce (const QString &busName, const QString &objectPath, QObject *parent=0) AccountInterfaceAvatarInterface a00045.html afc67a95ffce1c60c1e7a4623bfbfae21 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) AccountInterfaceAvatarInterface a00045.html aa30ffddf9e86da2d80af6b124721bad3 (Tp::DBusProxy *proxy) AccountInterfaceAvatarInterface a00045.html a6a544583ea2008d4290a77197c0c9469 (const Tp::Client::AccountInterface &mainInterface) AccountInterfaceAvatarInterface a00045.html a7f4e4bb8948fd57058f26cd48ac0669c (const Tp::Client::AccountInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyAvatar a00045.html abc51722fa2cbb87f3733c04e8ddcac9a () const Tp::PendingOperation * setPropertyAvatar a00045.html aaa2ddc3157ed643455f110eb10e86527 (Tp::Avatar newValue) Tp::PendingVariantMap * requestAllProperties a00045.html a73ce04a917e64c096c943821e94e211e () const static QLatin1String staticInterfaceName a00045.html a6c1370999b5585c9fac4bd255b94c6e7 () virtual void invalidate a00045.html a999fa3585b22c543ef1d8f38c1b1600e (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::AccountInterfaceStorageInterface a00046.html Tp::AbstractInterface AccountInterfaceStorageInterface a00046.html a5dfbb73fe643fbb058872dd1dee900e1 (const QString &busName, const QString &objectPath, QObject *parent=0) AccountInterfaceStorageInterface a00046.html a4d30dbaa6bc4bacb5d1a2aa7d2b45f9a (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) AccountInterfaceStorageInterface a00046.html a30f5d73e9fb458c4e8ae846abaa31b33 (Tp::DBusProxy *proxy) AccountInterfaceStorageInterface a00046.html a7eae5c3ed27a8bfcf025398e9b106ef1 (const Tp::Client::AccountInterface &mainInterface) AccountInterfaceStorageInterface a00046.html a6081adff3f0b32a9a6feae5f910817b0 (const Tp::Client::AccountInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyStorageProvider a00046.html aa2beaa0f6a8167b5ace076d62078f69f () const Tp::PendingVariant * requestPropertyStorageIdentifier a00046.html a1191e0999e12184180cf24a923133fc4 () const Tp::PendingVariant * requestPropertyStorageSpecificInformation a00046.html a85ee3f8c7c81d46079bd640a1df861e0 () const Tp::PendingVariant * requestPropertyStorageRestrictions a00046.html ae1bab8a5affc87fb91f0b81b42da56ba () const Tp::PendingVariantMap * requestAllProperties a00046.html a9bcaefcbb2eb3702b678ba44039d6e65 () const static QLatin1String staticInterfaceName a00046.html afeaefb26ec1af54929e64654be0a0637 () virtual void invalidate a00046.html aafc996cec550ca94826e128cde22b860 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::CallContentMediaDescriptionInterface a00085.html Tp::AbstractInterface QDBusPendingReply Accept a00085.html a8fa89a7b8399da4e5d88a58dedca3818 (const QVariantMap &localMediaDescription, int timeout=-1) QDBusPendingReply Reject a00085.html a420e2022b816f5630c4e9005dc53df6a (const Tp::CallStateReason &reason, int timeout=-1) CallContentMediaDescriptionInterface a00085.html acba57c72b34bc20080f001b24e8ab33a (const QString &busName, const QString &objectPath, QObject *parent=0) CallContentMediaDescriptionInterface a00085.html af1c74ebf57c69353f2b69db3641a5f18 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) CallContentMediaDescriptionInterface a00085.html aa9dd283c26a96eface116878b7d35c79 (Tp::DBusProxy *proxy) Tp::PendingVariant * requestPropertyInterfaces a00085.html a2e831e31443ebffa99e84aab329368e9 () const Tp::PendingVariant * requestPropertyFurtherNegotiationRequired a00085.html a631c37f55367cf9b422fa7eea9f1f45f () const Tp::PendingVariant * requestPropertyHasRemoteInformation a00085.html aa1af9b0be809d4c24e41d43c005510a4 () const Tp::PendingVariant * requestPropertyCodecs a00085.html a44ff16492fa35cdf8219fafd3bd9c9a7 () const Tp::PendingVariant * requestPropertyRemoteContact a00085.html ad6b848303ad194e22eb22f9698301f92 () const Tp::PendingVariant * requestPropertySSRCs a00085.html a728603b2d7432bc920796d9a8fdad91e () const Tp::PendingVariantMap * requestAllProperties a00085.html ab9cb5eaa391e951496b3a81cac56b900 () const static QLatin1String staticInterfaceName a00085.html a1bf9168e84ffd9dad114017673bcf49d () virtual void invalidate a00085.html aa247e1fa320166fbd4e8aef0ae47ed21 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface a00086.html Tp::AbstractInterface CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface a00086.html afc166c7f7a47decffc87670f024785d1 (const QString &busName, const QString &objectPath, QObject *parent=0) CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface a00086.html a5164d90724bce66f0034a0f08985d1fa (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface a00086.html a09111bdaf8186c4959181242e03ff878 (Tp::DBusProxy *proxy) CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface a00086.html a31b95b0f9c4deeacb954bf06b579e4ae (const Tp::Client::CallContentMediaDescriptionInterface &mainInterface) CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface a00086.html a77439759150989d1385d65340ecef76b (const Tp::Client::CallContentMediaDescriptionInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyLossRLEMaxSize a00086.html a8f1782ccf29fd97bbd714402dc6967a3 () const Tp::PendingVariant * requestPropertyDuplicateRLEMaxSize a00086.html aef482fc71777488f975b88f7ae2b7bbd () const Tp::PendingVariant * requestPropertyPacketReceiptTimesMaxSize a00086.html aeb654a6820ea11cb1bcd785166c2fb2a () const Tp::PendingVariant * requestPropertyDLRRMaxSize a00086.html a542258fd8a97405fc6767208d6365283 () const Tp::PendingVariant * requestPropertyRTTMode a00086.html a09aa68425339981324d94f54e977682d () const Tp::PendingVariant * requestPropertyStatisticsFlags a00086.html a9b9425e6a5fa28a610a8332e27087064 () const Tp::PendingVariant * requestPropertyEnableMetrics a00086.html aaf023f447dd44752bd49aee59d55b8fa () const Tp::PendingVariantMap * requestAllProperties a00086.html a9d3a0ad886e2fe9d9e3dcfc1f0defdb5 () const static QLatin1String staticInterfaceName a00086.html aa729414fbc3257268f409c0859637f49 () virtual void invalidate a00086.html ab774993a1de24da043af383ca157e701 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::CallContentMediaDescriptionInterfaceRTCPFeedbackInterface a00087.html Tp::AbstractInterface CallContentMediaDescriptionInterfaceRTCPFeedbackInterface a00087.html a5199793fcec4f08010e70fb09d6b8a33 (const QString &busName, const QString &objectPath, QObject *parent=0) CallContentMediaDescriptionInterfaceRTCPFeedbackInterface a00087.html a90b7a424e27bbcf294dc6f6db007e48d (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) CallContentMediaDescriptionInterfaceRTCPFeedbackInterface a00087.html ac8f5fe24ef75639a598e15db39c557f6 (Tp::DBusProxy *proxy) CallContentMediaDescriptionInterfaceRTCPFeedbackInterface a00087.html ac88dd77a4b612da49711e71abd02ac07 (const Tp::Client::CallContentMediaDescriptionInterface &mainInterface) CallContentMediaDescriptionInterfaceRTCPFeedbackInterface a00087.html af911bb5d0f6a0e4c59db38c171327414 (const Tp::Client::CallContentMediaDescriptionInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyFeedbackMessages a00087.html a32a89b8e51be9ef53cd6aad784cf943e () const Tp::PendingVariant * requestPropertyDoesAVPF a00087.html a9507cabe07989f55d51d63ced705f8c4 () const Tp::PendingVariantMap * requestAllProperties a00087.html a17995610a60669c1a390b6817dddd434 () const static QLatin1String staticInterfaceName a00087.html a275756d7052c8fc60a9c64b0743024eb () virtual void invalidate a00087.html a57a898cc31f68f66223c94f3a068db79 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface a00088.html Tp::AbstractInterface CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface a00088.html a9490ee7cdb3900a08740fd75e1ed8dbf (const QString &busName, const QString &objectPath, QObject *parent=0) CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface a00088.html a46d3c6e15c8220d5349e16dc1d565663 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface a00088.html ad8c17c2e85dc73a1f1ef3030f74458b9 (Tp::DBusProxy *proxy) CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface a00088.html a6edca2ea019e9863b3f1550c9416550f (const Tp::Client::CallContentMediaDescriptionInterface &mainInterface) CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface a00088.html aa7ed063d44dc8d63f25bb34723c02f10 (const Tp::Client::CallContentMediaDescriptionInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyHeaderExtensions a00088.html a9e57f79e92b53db006c887bea572df0e () const Tp::PendingVariantMap * requestAllProperties a00088.html a6b28a5bcd7c70d94b816859c33580901 () const static QLatin1String staticInterfaceName a00088.html a6a1132413624405ecb25e1c055ca3e28 () virtual void invalidate a00088.html a2c39533940a38a9a9a4f484b07e7bd23 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::CallContentInterface a00080.html Tp::AbstractInterface QDBusPendingReply Remove a00080.html aea25e4c9059b10d35f7f4b83bbb61650 (int timeout=-1) void StreamsAdded a00080.html a0c806b6cb9503906f5b0d72bca48edc3 (const Tp::ObjectPathList &streams) void StreamsRemoved a00080.html ac706b76f25a6f705b3913013dd4b91dd (const Tp::ObjectPathList &streams, const Tp::CallStateReason &reason) CallContentInterface a00080.html a4cfea5c81f378d5da8faeb32d5db3cb2 (const QString &busName, const QString &objectPath, QObject *parent=0) CallContentInterface a00080.html af98f65ea49e76a0ae7cfd2c6a83739a0 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) CallContentInterface a00080.html a54e5764eb6b61a5265000df741b2bd6e (Tp::DBusProxy *proxy) Tp::PendingVariant * requestPropertyInterfaces a00080.html afa055c4b51d35c18c4fc0079e897237b () const Tp::PendingVariant * requestPropertyName a00080.html aee9b092cb04ef602097d21aadd326d11 () const Tp::PendingVariant * requestPropertyType a00080.html a1d00d67b7bc9c57a22677cf816fd032d () const Tp::PendingVariant * requestPropertyDisposition a00080.html a53328c2b0aa861de4355f6ddd8d3db2b () const Tp::PendingVariant * requestPropertyStreams a00080.html a08906a50dff80100f7431c5c34f32cbc () const Tp::PendingVariantMap * requestAllProperties a00080.html ae7a08da2aac1d503535502386f51af48 () const static QLatin1String staticInterfaceName a00080.html aea97fd569a945cea495997c46f33126e () virtual void invalidate a00080.html a43c1edd75138777e09f992e009e88505 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::CallContentInterfaceAudioControlInterface a00081.html Tp::AbstractInterface QDBusPendingReply ReportInputVolume a00081.html a42a5862da7b4e7a91c963d86052e36f3 (int volume, int timeout=-1) QDBusPendingReply ReportOutputVolume a00081.html a34d6d07613760cd6ad34daa5296367a5 (int volume, int timeout=-1) CallContentInterfaceAudioControlInterface a00081.html ae9ce696da71bd8e5c63f0d4c55e7b816 (const QString &busName, const QString &objectPath, QObject *parent=0) CallContentInterfaceAudioControlInterface a00081.html a34d37b841da255f6d95921bacc6c5a4b (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) CallContentInterfaceAudioControlInterface a00081.html aedefe6d7ab2f6550b526d5a3ffdfc090 (Tp::DBusProxy *proxy) CallContentInterfaceAudioControlInterface a00081.html ab1a8515094bbfc1b353084cd911dbbf0 (const Tp::Client::CallContentInterface &mainInterface) CallContentInterfaceAudioControlInterface a00081.html af3e78120905c84433c28a3df207571e8 (const Tp::Client::CallContentInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyRequestedInputVolume a00081.html a9c66ec27ab31c2ce4ad417d98967ec36 () const Tp::PendingVariant * requestPropertyRequestedOutputVolume a00081.html aef12c0b9fce51fb5f999108313e57515 () const Tp::PendingVariantMap * requestAllProperties a00081.html a3cfc04962e1123ff082ff60b8b6bd157 () const static QLatin1String staticInterfaceName a00081.html a83291f33b972c1f26b15f17c4a223eb7 () virtual void invalidate a00081.html af9e73b4b38f6b0f0d250ccd32840b3ca (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::CallContentInterfaceDTMFInterface a00082.html Tp::AbstractInterface QDBusPendingReply StartTone a00082.html a6b273102d1f0cf0cbf6d5ea010300774 (uchar event, int timeout=-1) QDBusPendingReply StopTone a00082.html a1179c9a37ea73de37b66d6dc8b0b315c (int timeout=-1) QDBusPendingReply MultipleTones a00082.html a7e0321c82dab2219c23812c568b8f494 (const QString &tones, int timeout=-1) void TonesDeferred a00082.html abc342e6c869b1beab64eda1f05860c71 (const QString &tones) void SendingTones a00082.html a26ddb38bcf288d1b9888b5652e94a79b (const QString &tones) void StoppedTones a00082.html ac03a2249847509cd96b35293e2c2bb5e (bool cancelled) CallContentInterfaceDTMFInterface a00082.html abe8b84384a84850905bde5a0ebc86207 (const QString &busName, const QString &objectPath, QObject *parent=0) CallContentInterfaceDTMFInterface a00082.html a5e34f6464643da542026543327881abb (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) CallContentInterfaceDTMFInterface a00082.html a6dce3fa7ec4d71193389e397e3638adf (Tp::DBusProxy *proxy) CallContentInterfaceDTMFInterface a00082.html a6f1db9ca830b33fca2e5f28516ff3ae3 (const Tp::Client::CallContentInterface &mainInterface) CallContentInterfaceDTMFInterface a00082.html ac6fa90c9a97ea50730d9cee2a557e43e (const Tp::Client::CallContentInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyCurrentlySendingTones a00082.html a8b8a251b64f331cf3ceacbce1863b5b6 () const Tp::PendingVariant * requestPropertyDeferredTones a00082.html a1ee5031039b1e759e8fc4abe3a7cc0d7 () const Tp::PendingVariantMap * requestAllProperties a00082.html a9f98ea3f01f9e611462bbd5703008c54 () const static QLatin1String staticInterfaceName a00082.html afb19c4a3f95870c0dfecfd3e6eb4fe80 () virtual void invalidate a00082.html aea89bc7c312ca03667fd83071dcd0ef6 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::CallContentInterfaceMediaInterface a00083.html Tp::AbstractInterface QDBusPendingReply UpdateLocalMediaDescription a00083.html ab54fd3f3fd9ec3095e23bc44601719eb (const QVariantMap &mediaDescription, int timeout=-1) QDBusPendingReply AcknowledgeDTMFChange a00083.html ad2130224845669ca6b61be830ee271ad (uchar event, uint state, int timeout=-1) QDBusPendingReply Fail a00083.html a5933265cdfffa8e2f0d995336af39aff (const Tp::CallStateReason &reason, int timeout=-1) void NewMediaDescriptionOffer a00083.html ac17ef58b267282d1f84ddf2e710bab29 (const QDBusObjectPath &mediaDescription, const QVariantMap &properties) void MediaDescriptionOfferDone a00083.html a4cb2cfc46cec8d48cb18fb94c5656f2e () void LocalMediaDescriptionChanged a00083.html ab568f77157a2b4b71fac9fc2111304d5 (const QVariantMap &updatedMediaDescription) void RemoteMediaDescriptionsChanged a00083.html a15370ecfd3fe2d7d70b9f1bfc5758eb9 (const Tp::ContactMediaDescriptionPropertiesMap &updatedMediaDescriptions) void MediaDescriptionsRemoved a00083.html ab3ed747236841cb241af3927d12b4ef8 (const Tp::UIntList &removedMediaDescriptions) void DTMFChangeRequested a00083.html ac8ba43d557db1edf1c6673ffa7a8f334 (uchar event, uint state) CallContentInterfaceMediaInterface a00083.html ac655eac56103911fd38c5e523c4d0f56 (const QString &busName, const QString &objectPath, QObject *parent=0) CallContentInterfaceMediaInterface a00083.html a446e272e3a24ed0fa5600103ea1aeb2f (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) CallContentInterfaceMediaInterface a00083.html a0e74ccdab4c2ce06255a9b16ec49b8ef (Tp::DBusProxy *proxy) CallContentInterfaceMediaInterface a00083.html aa11816cc505c2b5d41d210cfdf89d218 (const Tp::Client::CallContentInterface &mainInterface) CallContentInterfaceMediaInterface a00083.html a2be7b34f87a38ce460b85f52abf202ca (const Tp::Client::CallContentInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyRemoteMediaDescriptions a00083.html a1172b1cef3d99cbf5abfb3dd77df46d6 () const Tp::PendingVariant * requestPropertyLocalMediaDescriptions a00083.html a480da9608fa55f554247238f7283211e () const Tp::PendingVariant * requestPropertyMediaDescriptionOffer a00083.html aa1bd45ae706af714b1bd12a1cdc01975 () const Tp::PendingVariant * requestPropertyPacketization a00083.html a3c5ba1a6230269eea80dc74fb5c08202 () const Tp::PendingVariant * requestPropertyCurrentDTMFEvent a00083.html aa29b4bf0d95ec9468480b33d48336534 () const Tp::PendingVariant * requestPropertyCurrentDTMFState a00083.html a45fe1c1148ab89991b65f2ee82ceea99 () const Tp::PendingVariantMap * requestAllProperties a00083.html ac7a2e5061321f7e9b8dcc19aa7304c9b () const static QLatin1String staticInterfaceName a00083.html a3b0dbc29402ac07449ebbbb4c699e90b () virtual void invalidate a00083.html a6dbf1076e51b359fbd932fee9d6a8abe (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::CallContentInterfaceVideoControlInterface a00084.html Tp::AbstractInterface void KeyFrameRequested a00084.html ade948dadb77c497b3c906649008ed324 () void VideoResolutionChanged a00084.html a9bcd7131c8425be2002cbf1997771364 (const Tp::VideoResolution &newResolution) void BitrateChanged a00084.html aa8bde7f71668d3499f7474baebc801fd (uint newBitrate) void FramerateChanged a00084.html ae42029f88c272b1d526449fe83088ba4 (uint newFramerate) void MTUChanged a00084.html a5ca4a30d9a43a0f2e0fa9a65e3d2760e (uint newMTU) CallContentInterfaceVideoControlInterface a00084.html af68d669d4d7dcd4c6a184a0d3d83670a (const QString &busName, const QString &objectPath, QObject *parent=0) CallContentInterfaceVideoControlInterface a00084.html a9bef2ef5771c6e0f90f5758d7ebc80d5 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) CallContentInterfaceVideoControlInterface a00084.html a9504d27158b7dcee2efebff53c1fa5ba (Tp::DBusProxy *proxy) CallContentInterfaceVideoControlInterface a00084.html a348bfda5132fa95e7703cc824045c4ab (const Tp::Client::CallContentInterface &mainInterface) CallContentInterfaceVideoControlInterface a00084.html a330057918cc99e1348878b0d5f44d87d (const Tp::Client::CallContentInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyVideoResolution a00084.html a80813149a60a214fdbfe3d88df8e82fa () const Tp::PendingVariant * requestPropertyBitrate a00084.html a64e6f2320175e4cd316147c4bdf82ec3 () const Tp::PendingVariant * requestPropertyFramerate a00084.html a8fbc7e254260b80c0544d2bd7a853774 () const Tp::PendingVariant * requestPropertyMTU a00084.html a7fd6385196adf3812506947c8d51c6df () const Tp::PendingVariant * requestPropertyManualKeyFrames a00084.html abadcc3f0ee2343822264108a8a30bbe8 () const Tp::PendingVariantMap * requestAllProperties a00084.html a46120932b5eb17d362b076c2db175394 () const static QLatin1String staticInterfaceName a00084.html ab385b542eb8fca30a8c03da61d1d941e () virtual void invalidate a00084.html a3882f0ca56cfda96198b0c9fb276ed2a (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::CallStreamEndpointInterface a00092.html Tp::AbstractInterface QDBusPendingReply SetSelectedCandidatePair a00092.html aaf40c402dd700c6bbbd183ed5a3513d1 (const Tp::Candidate &localCandidate, const Tp::Candidate &remoteCandidate, int timeout=-1) QDBusPendingReply SetEndpointState a00092.html ae66d90633c55e3c9f39d4f9188d1ca61 (uint component, uint state, int timeout=-1) QDBusPendingReply AcceptSelectedCandidatePair a00092.html acce5c5bc107acf0fadc497814984c373 (const Tp::Candidate &localCandidate, const Tp::Candidate &remoteCandidate, int timeout=-1) QDBusPendingReply RejectSelectedCandidatePair a00092.html ab1ba28f4e26a3eb0d57df8be27255c1f (const Tp::Candidate &localCandidate, const Tp::Candidate &remoteCandidate, int timeout=-1) QDBusPendingReply SetControlling a00092.html a8e403b903a8e86ae7c938e78d562c400 (bool controlling, int timeout=-1) void RemoteCredentialsSet a00092.html a73aab94dd184b75a3b5e8637646fdd24 (const QString &username, const QString &password) void RemoteCandidatesAdded a00092.html a1bdc2dc20844f8319fe003bb839c1cae (const Tp::CandidateList &candidates) void CandidatePairSelected a00092.html a21f5b03c6947d88e242dc4052844894e (const Tp::Candidate &localCandidate, const Tp::Candidate &remoteCandidate) void EndpointStateChanged a00092.html a5ec5d41031736d66f7962021506b29d6 (uint component, uint state) void ControllingChanged a00092.html af3171ebc6c2d341c445108d8a835be75 (bool controlling) CallStreamEndpointInterface a00092.html a9d59d25ae613d89517b3d11a63d6a045 (const QString &busName, const QString &objectPath, QObject *parent=0) CallStreamEndpointInterface a00092.html ae43b9c95c6377eea39134d1333c4097c (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) CallStreamEndpointInterface a00092.html a205075a3c63e41757b066ba51679e53e (Tp::DBusProxy *proxy) Tp::PendingVariant * requestPropertyRemoteCredentials a00092.html a330e8cd08e8aa8e496f52cc962ac68f0 () const Tp::PendingVariant * requestPropertyRemoteCandidates a00092.html ac1f4c760349900182d6d91fe86f5e0c9 () const Tp::PendingVariant * requestPropertySelectedCandidatePairs a00092.html a01176478223bc0107b27a88bc0c4d915 () const Tp::PendingVariant * requestPropertyEndpointState a00092.html a97631a9b0e3b252a8b3cc7da94c02c65 () const Tp::PendingVariant * requestPropertyTransport a00092.html af22d884b40eac9b44761d7a4602f241d () const Tp::PendingVariant * requestPropertyControlling a00092.html a606618d82c637800e9509a8078a876de () const Tp::PendingVariant * requestPropertyIsICELite a00092.html a7dce3327b86fc594f8d20516e4788c79 () const Tp::PendingVariantMap * requestAllProperties a00092.html aaba4736aef87d3751cac425c0af25a09 () const static QLatin1String staticInterfaceName a00092.html afcc6293a5f1985eada9b45edef210641 () virtual void invalidate a00092.html a93bd7c5e3e237e0f3c37fb2e4021cf35 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::CallStreamInterface a00093.html Tp::AbstractInterface QDBusPendingReply SetSending a00093.html a6e6c0077d52bb72755cbb27c7219620a (bool send, int timeout=-1) QDBusPendingReply RequestReceiving a00093.html a23cc0cb2a4326dc123b01e9108165f5c (uint contact, bool receive, int timeout=-1) void RemoteMembersChanged a00093.html ae34271eb8be0b9a568c8fa7b4e1db541 (const Tp::ContactSendingStateMap &updates, const Tp::HandleIdentifierMap &identifiers, const Tp::UIntList &removed, const Tp::CallStateReason &reason) void LocalSendingStateChanged a00093.html a5b3aac23c0ee7336cc7f5af5be633eea (uint state, const Tp::CallStateReason &reason) CallStreamInterface a00093.html a032956227aacbed3c1ee5bbf6d0723aa (const QString &busName, const QString &objectPath, QObject *parent=0) CallStreamInterface a00093.html a7fe232e55b31ff959bab36c84e31b34d (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) CallStreamInterface a00093.html a7ddff177ef400fac7e745b50fe3ef04c (Tp::DBusProxy *proxy) Tp::PendingVariant * requestPropertyInterfaces a00093.html aba99875d5c450e0d060d80301e710a85 () const Tp::PendingVariant * requestPropertyRemoteMembers a00093.html a5a64e893204b0dd7406f7ac077785a65 () const Tp::PendingVariant * requestPropertyRemoteMemberIdentifiers a00093.html a46cd90977a8c680d1f34c852308a09cd () const Tp::PendingVariant * requestPropertyLocalSendingState a00093.html a636a90f26988c095262820a24dbdebd0 () const Tp::PendingVariant * requestPropertyCanRequestReceiving a00093.html a557906e1fa13b8b1fd41bf0e7328d077 () const Tp::PendingVariantMap * requestAllProperties a00093.html a35d03b0c34310acb64002fdd88f4eff6 () const static QLatin1String staticInterfaceName a00093.html a3fa6794ce3ee6680e35360fc71e355f3 () virtual void invalidate a00093.html afbd224de2065eb9266a5b3fa1d7caf18 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::CallStreamInterfaceMediaInterface a00094.html Tp::AbstractInterface QDBusPendingReply CompleteSendingStateChange a00094.html a118a8123429d2030a3f5a2aca42c288a (uint state, int timeout=-1) QDBusPendingReply ReportSendingFailure a00094.html af2df672d8284d2b58037d2d79f032cc1 (uint reason, const QString &error, const QString &message, int timeout=-1) QDBusPendingReply CompleteReceivingStateChange a00094.html ab6dc6fe16aec0821500683a47e6b6f82 (uint state, int timeout=-1) QDBusPendingReply ReportReceivingFailure a00094.html a7b1c306b7bbc14c20f1c5cf97816ba28 (uint reason, const QString &error, const QString &message, int timeout=-1) QDBusPendingReply SetCredentials a00094.html a8631da1aa08586bd7c8011eba4541911 (const QString &username, const QString &password, int timeout=-1) QDBusPendingReply AddCandidates a00094.html af00fb88e3f49989fb815dbb4b9b93c33 (const Tp::CandidateList &candidates, int timeout=-1) QDBusPendingReply FinishInitialCandidates a00094.html a183422f5a1bc3117f9428ee37d1aff36 (int timeout=-1) QDBusPendingReply Fail a00094.html ac5affdf39c8816ee2507085aa85ddaa8 (const Tp::CallStateReason &reason, int timeout=-1) void SendingStateChanged a00094.html a78ebcd8402a2a51fa0e3372cc7760eba (uint state) void ReceivingStateChanged a00094.html aad1a10397b108ccebbe3b8153281e3b3 (uint state) void LocalCandidatesAdded a00094.html a9205e73c9b0dd0e8561a832d19831aa0 (const Tp::CandidateList &candidates) void LocalCredentialsChanged a00094.html ae64146022a5e779cd34a32dcb7bb4579 (const QString &username, const QString &password) void RelayInfoChanged a00094.html aee40a4f15d6d4fc0677d34aee7d009a9 (const Tp::StringVariantMapList &relayInfo) void STUNServersChanged a00094.html a6ce3ef9c5cf2e038613f0a48e14619f1 (const Tp::SocketAddressIPList &servers) void ServerInfoRetrieved a00094.html a4cbc7d28e7bda299a898350d544addf9 () void EndpointsChanged a00094.html a1efcc726fbd7c311f6f768830cf8330d (const Tp::ObjectPathList &endpointsAdded, const Tp::ObjectPathList &endpointsRemoved) void ICERestartRequested a00094.html afb771e89e6a86b56d01e25d5082743eb () CallStreamInterfaceMediaInterface a00094.html a83316c9dea3bd73a79355a3e57a066f4 (const QString &busName, const QString &objectPath, QObject *parent=0) CallStreamInterfaceMediaInterface a00094.html a294ddd54eb8f2d1a858a098741bbde36 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) CallStreamInterfaceMediaInterface a00094.html a463cace5adff97f3e166b7c12bec6481 (Tp::DBusProxy *proxy) CallStreamInterfaceMediaInterface a00094.html ab72c7855e43f7f7a6699298535c05e9b (const Tp::Client::CallStreamInterface &mainInterface) CallStreamInterfaceMediaInterface a00094.html af231b7f203c8aaa9e949fffe321dcab1 (const Tp::Client::CallStreamInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertySendingState a00094.html ada616279e530be35ab8054760fd37d10 () const Tp::PendingVariant * requestPropertyReceivingState a00094.html adedab8b4961b2186dbe067d1e84dca9c () const Tp::PendingVariant * requestPropertyTransport a00094.html abf369df6ae4cde198f143b347a2ba7d3 () const Tp::PendingVariant * requestPropertyLocalCandidates a00094.html a683ea7395242f6d9c28bec87e8b2364a () const Tp::PendingVariant * requestPropertyLocalCredentials a00094.html ac3b20b21ed683a89e3aa7af67513faae () const Tp::PendingVariant * requestPropertySTUNServers a00094.html a6c9e0e2d5972d53a516930de157323a8 () const Tp::PendingVariant * requestPropertyRelayInfo a00094.html a9a48b971ff50df29817c22a42087eb7e () const Tp::PendingVariant * requestPropertyHasServerInfo a00094.html a9d567b34885bdff4522eac082e61a26c () const Tp::PendingVariant * requestPropertyEndpoints a00094.html a9f6c53b46f628024c2d837892c8f5926 () const Tp::PendingVariant * requestPropertyICERestartPending a00094.html af893fbad5bfa060ea40be774bdb07d74 () const Tp::PendingVariantMap * requestAllProperties a00094.html a4334388285b2e2264bba5c8e5c72ca4d () const static QLatin1String staticInterfaceName a00094.html a1167ba883427c0194710e1387dfb47f0 () virtual void invalidate a00094.html a3ee08b4305dd6b30f5dafe10f89773a2 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ChannelDispatchOperationInterface a00114.html Tp::AbstractInterface QDBusPendingReply HandleWith a00114.html a4aa587c9c05a2ad0a74277c5ee7d80a2 (const QString &handler, int timeout=-1) QDBusPendingReply Claim a00114.html a1a519eae4cfd367598370d95107f18d4 (int timeout=-1) QDBusPendingReply HandleWithTime a00114.html aca498e4abf991ef28587ecff7e36856a (const QString &handler, qlonglong userActionTime, int timeout=-1) void ChannelLost a00114.html a5266292ad400bb04990af3d6e50be91c (const QDBusObjectPath &channel, const QString &error, const QString &message) void Finished a00114.html af81dae9437a97ef253ffe3fbf86e3e95 () ChannelDispatchOperationInterface a00114.html aa51292af57dad62f21923167014e12ec (const QString &busName, const QString &objectPath, QObject *parent=0) ChannelDispatchOperationInterface a00114.html aaf54a76dcd7dccefb88c03c2a13218ee (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ChannelDispatchOperationInterface a00114.html aab1255e2cca44fc798664457eb19d384 (Tp::DBusProxy *proxy) Tp::PendingVariant * requestPropertyInterfaces a00114.html ae4eefa59f2ca34c881644a11eb328082 () const Tp::PendingVariant * requestPropertyConnection a00114.html aed61fa269d677c37e1bc647af96eedda () const Tp::PendingVariant * requestPropertyAccount a00114.html a302fe2c46a53795f6ffd5d3b2bda1b09 () const Tp::PendingVariant * requestPropertyChannels a00114.html a0200e63eda1630db29f21c349c43b23b () const Tp::PendingVariant * requestPropertyPossibleHandlers a00114.html aee19654059b2fff5a8d3e7a812c4c40a () const Tp::PendingVariantMap * requestAllProperties a00114.html a41e23e3901a4ed9618b70d245862b70d () const static QLatin1String staticInterfaceName a00114.html a065343de4bedcef0842295f8f4d96d4a () virtual void invalidate a00114.html aaddc4a77248179496b073d4edc9707fb (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ChannelDispatcherInterface a00112.html Tp::AbstractInterface QDBusPendingReply< QDBusObjectPath > CreateChannel a00112.html a0c58ea06c28d1a449a8b751960349398 (const QDBusObjectPath &account, const QVariantMap &requestedProperties, qlonglong userActionTime, const QString &preferredHandler, int timeout=-1) QDBusPendingReply< QDBusObjectPath > EnsureChannel a00112.html ac5e28d300f8ac69d1894f412aecf4bdd (const QDBusObjectPath &account, const QVariantMap &requestedProperties, qlonglong userActionTime, const QString &preferredHandler, int timeout=-1) QDBusPendingReply< QDBusObjectPath > CreateChannelWithHints a00112.html a4d0b67d2118465e2ed155be98061df5b (const QDBusObjectPath &account, const QVariantMap &requestedProperties, qlonglong userActionTime, const QString &preferredHandler, const QVariantMap &hints, int timeout=-1) QDBusPendingReply< QDBusObjectPath > EnsureChannelWithHints a00112.html a53443624f4c53a085d4a3e51b3fc34cb (const QDBusObjectPath &account, const QVariantMap &requestedProperties, qlonglong userActionTime, const QString &preferredHandler, const QVariantMap &hints, int timeout=-1) QDBusPendingReply< Tp::ObjectPathList, Tp::NotDelegatedMap > DelegateChannels a00112.html ad508625879d04f2cc4e843b34740bee7 (const Tp::ObjectPathList &channels, qlonglong userActionTime, const QString &preferredHandler, int timeout=-1) QDBusPendingReply PresentChannel a00112.html a9cd644f1a1354c918f8b5a8f9398c814 (const QDBusObjectPath &channel, qlonglong userActionTime, int timeout=-1) ChannelDispatcherInterface a00112.html a52cb4cd3e72ff3235a3cd419ea0e5e5c (const QString &busName, const QString &objectPath, QObject *parent=0) ChannelDispatcherInterface a00112.html a4f279fd34492b9a453e66c915d16d5e5 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ChannelDispatcherInterface a00112.html abdf1ab18772e586bdc36b1efec7e3a90 (Tp::DBusProxy *proxy) Tp::PendingVariant * requestPropertyInterfaces a00112.html ac05675306c3d51fd28827b25d06781c7 () const Tp::PendingVariant * requestPropertySupportsRequestHints a00112.html a61722ad5fedf791e665ff8b3d8435df6 () const Tp::PendingVariantMap * requestAllProperties a00112.html ae04105ed308e74353025dc8228335417 () const static QLatin1String staticInterfaceName a00112.html a989709eb4978b06fabd28cf18b629765 () virtual void invalidate a00112.html a167eaae3cf3228558a5efe817c46bfe8 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ChannelRequestInterface a00139.html Tp::AbstractInterface QDBusPendingReply Proceed a00139.html a7f57dc69dcd97a065a26f3de3efdbe97 (int timeout=-1) QDBusPendingReply Cancel a00139.html a082febb1dc3bb1a7b398c543d26d0f60 (int timeout=-1) void Failed a00139.html a3d915422d69667aa0f92d466786a14c0 (const QString &error, const QString &message) void Succeeded a00139.html a2320f90731c06ef81c4bf0c8234e11ee () void SucceededWithChannel a00139.html ad17d26e95afa047fd4df0b45a6d9d260 (const QDBusObjectPath &connection, const QVariantMap &connectionProperties, const QDBusObjectPath &channel, const QVariantMap &channelProperties) ChannelRequestInterface a00139.html aad18f5b3d14c103fb6fca937b18370ab (const QString &busName, const QString &objectPath, QObject *parent=0) ChannelRequestInterface a00139.html ae092bdbb3ee9e152288730cb3eec9ca9 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ChannelRequestInterface a00139.html a7112df9b9c9c7e7304b302ad5414c878 (Tp::DBusProxy *proxy) Tp::PendingVariant * requestPropertyAccount a00139.html a2f1410c463a8c16aa5c71c06ab711582 () const Tp::PendingVariant * requestPropertyUserActionTime a00139.html ab8f4cb29696637da10fd5a1ebf5a9b24 () const Tp::PendingVariant * requestPropertyPreferredHandler a00139.html ad43b8985fcd8c79d8e5b0c62c3b7fd14 () const Tp::PendingVariant * requestPropertyRequests a00139.html a124319247c90b7021b5fc7e0803aede8 () const Tp::PendingVariant * requestPropertyInterfaces a00139.html a01428d1e129e24e8086a160a7d628227 () const Tp::PendingVariant * requestPropertyHints a00139.html afbab1ed4d79c5e1a965b9941cbc23ce0 () const Tp::PendingVariantMap * requestAllProperties a00139.html a5f560f0a7b8bc17cbeb78dab333811ad () const static QLatin1String staticInterfaceName a00139.html ac12cb892f982916ba1c81dcd4b445bf6 () virtual void invalidate a00139.html a7a85786c6c839eb5f26aaf49094b9c8a (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ChannelInterface a00117.html Tp::AbstractInterface QDBusPendingReply Close a00117.html a822439bf7adb2ce890cf8066ea01a1ff (int timeout=-1) QDBusPendingReply< QString > GetChannelType a00117.html aa14a76049f40ba119845f2c52f84bdeb (int timeout=-1) QDBusPendingReply< uint, uint > GetHandle a00117.html a135d5199c69e92039f81bcbad48d6e27 (int timeout=-1) QDBusPendingReply< QStringList > GetInterfaces a00117.html a65855cac589751eee7717e266caa7c6c (int timeout=-1) void Closed a00117.html a42005b6ea5c4fb962a2a8789a35741da () ChannelInterface a00117.html a892880ace6b153f8c4cb6bd19066c074 (const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterface a00117.html a9044ef5ba0d6848c83511ab1d53d9c56 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterface a00117.html a248dd4161960529ca31f7cca130cbe36 (Tp::DBusProxy *proxy) Tp::PendingVariant * requestPropertyChannelType a00117.html a48df5dad17fa70262c8d59b2c75c83c2 () const Tp::PendingVariant * requestPropertyInterfaces a00117.html ac0ef159d0249fe8fe9faf1b6a5dbba99 () const Tp::PendingVariant * requestPropertyTargetHandle a00117.html aba93f0a84612cc6c2adf866eaff3e763 () const Tp::PendingVariant * requestPropertyTargetID a00117.html aa04a1d3032316883c6ce5085f20caf68 () const Tp::PendingVariant * requestPropertyTargetHandleType a00117.html a389f3d423b4da14c328fd0ddbe20b8ae () const Tp::PendingVariant * requestPropertyRequested a00117.html a32516a093708b2b8accc930b8252dcfa () const Tp::PendingVariant * requestPropertyInitiatorHandle a00117.html a88f912db7a4d0680d3d78d928369cbe7 () const Tp::PendingVariant * requestPropertyInitiatorID a00117.html af7de86e324a198e115d6957f3da83fa1 () const Tp::PendingVariantMap * requestAllProperties a00117.html afedf34d3aac0c21bd9f6c49cc2709472 () const static QLatin1String staticInterfaceName a00117.html ae7005466f857a3b9117b4c191e3ef65e () virtual void invalidate a00117.html a0a29ac5a212f2e0b0e9db5544d245ee1 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ChannelInterfaceAnonymityInterface a00118.html Tp::AbstractInterface ChannelInterfaceAnonymityInterface a00118.html a0e3573c0c38f549ffdc2b39590bde5f5 (const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfaceAnonymityInterface a00118.html aa8b6922ebe291e31df1a4af795a99cb2 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfaceAnonymityInterface a00118.html a77ba03f8bcf3aacf0ada00a62efef3d2 (Tp::DBusProxy *proxy) ChannelInterfaceAnonymityInterface a00118.html a7cce5eb941804de9939c18c24b859a96 (const Tp::Client::ChannelInterface &mainInterface) ChannelInterfaceAnonymityInterface a00118.html ada1986c258ce523f87688d326d9f85d1 (const Tp::Client::ChannelInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyAnonymityModes a00118.html a2feaa4231174c7a24b74171d6af38401 () const Tp::PendingVariant * requestPropertyAnonymityMandatory a00118.html a82f26e8942e062a498e71abd40fa2d86 () const Tp::PendingVariant * requestPropertyAnonymousID a00118.html a5bceb2cecc60f445625e9dc74417e41c () const Tp::PendingVariantMap * requestAllProperties a00118.html ad0f217a646a9d315d761fcfd9fb7d6fe () const static QLatin1String staticInterfaceName a00118.html a207155cf56f072bfe081b9ccf37d0ed9 () virtual void invalidate a00118.html aea5daa38f1568b7c2b751d304bf5857d (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ChannelInterfaceCallStateInterface a00119.html Tp::AbstractInterface QDBusPendingReply< Tp::ChannelCallStateMap > GetCallStates a00119.html a94f4b34ef7ca5b2ca26008f4da1e9ebb (int timeout=-1) void CallStateChanged a00119.html a2e3e0c6d2ab69cde21e52b9a4f3a0ba2 (uint contact, uint state) ChannelInterfaceCallStateInterface a00119.html ad54ff432ec4b2e9d8e909820ba35443c (const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfaceCallStateInterface a00119.html a553c793ed9080be818fac1e73c571298 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfaceCallStateInterface a00119.html ae1cf5626aca898d1dcc31deab4718aa8 (Tp::DBusProxy *proxy) ChannelInterfaceCallStateInterface a00119.html a12dcaba49f90f1dddfd23fddba7d7d5b (const Tp::Client::ChannelInterface &mainInterface) ChannelInterfaceCallStateInterface a00119.html acbe2950d7ead11c461d3adac5a37269e (const Tp::Client::ChannelInterface &mainInterface, QObject *parent) Tp::PendingVariantMap * requestAllProperties a00119.html a78bbf0f1f18fdd147df88bf7154531f8 () const static QLatin1String staticInterfaceName a00119.html a409583f50c3c171ae50af9f5bf4fda9a () virtual void invalidate a00119.html a89570f7a9048005211d46aa5219ea94b (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ChannelInterfaceCaptchaAuthenticationInterface a00120.html Tp::AbstractInterface QDBusPendingReply< Tp::CaptchaInfoList, uint, QString > GetCaptchas a00120.html a5bce6ccb4f86ec65fbef41986506a3d9 (int timeout=-1) QDBusPendingReply< QByteArray > GetCaptchaData a00120.html a4689d9e53b602168efcc78322de63093 (uint ID, const QString &mimeType, int timeout=-1) QDBusPendingReply AnswerCaptchas a00120.html aed3a3dd4f17b0814ad45ff06a9b2749a (const Tp::CaptchaAnswers &answers, int timeout=-1) QDBusPendingReply CancelCaptcha a00120.html a84f3ba6a9f4e6ac7c914d7fffd112289 (uint reason, const QString &debugMessage, int timeout=-1) ChannelInterfaceCaptchaAuthenticationInterface a00120.html ac0b770d68a14bba885382001b62dd17d (const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfaceCaptchaAuthenticationInterface a00120.html ad1dc1eabd51e3d8c420a0e52abd788c9 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfaceCaptchaAuthenticationInterface a00120.html ac96a5f5eb023eaa163ff1bfad534e6cc (Tp::DBusProxy *proxy) ChannelInterfaceCaptchaAuthenticationInterface a00120.html acadcaf07ddcae916228c725fd3568a7a (const Tp::Client::ChannelInterface &mainInterface) ChannelInterfaceCaptchaAuthenticationInterface a00120.html accd8cb47123a4964848975b99f8c7054 (const Tp::Client::ChannelInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyCanRetryCaptcha a00120.html a407acbe74a17a0041d1740756b53c6df () const Tp::PendingVariant * requestPropertyCaptchaStatus a00120.html aa23aa44ac8eda567a69e28b69c557ad4 () const Tp::PendingVariant * requestPropertyCaptchaError a00120.html afd31a23fdd88e458a78aa09809a06953 () const Tp::PendingVariant * requestPropertyCaptchaErrorDetails a00120.html a73bc7c59534a0a3ab27ed822068f07be () const Tp::PendingVariantMap * requestAllProperties a00120.html a5141eef6c1d0d05eb9591eed4a354e98 () const static QLatin1String staticInterfaceName a00120.html a0dedaf4e56a242a00e4dc4ce208b811b () virtual void invalidate a00120.html a74a056026208feb89f67e1cd6da2af4f (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ChannelInterfaceChatStateInterface a00121.html Tp::AbstractInterface QDBusPendingReply SetChatState a00121.html a7bfc1a6e8e6c0c54b5bbe391dc24cbb1 (uint state, int timeout=-1) void ChatStateChanged a00121.html a8a5c78fb1e38007eb5602c97f99c826d (uint contact, uint state) ChannelInterfaceChatStateInterface a00121.html a86e591069556c2ef77ea5c4dd2c99213 (const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfaceChatStateInterface a00121.html a654df83bc55d2f46dcd48509bd3d81c7 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfaceChatStateInterface a00121.html a221cc1d3e4f778fb67a4409d0a130e8e (Tp::DBusProxy *proxy) ChannelInterfaceChatStateInterface a00121.html a6cdc1e708934976cd390081f08702222 (const Tp::Client::ChannelInterface &mainInterface) ChannelInterfaceChatStateInterface a00121.html ae19b1f51b9c360b1877bd35e04dcb2be (const Tp::Client::ChannelInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyChatStates a00121.html ae5552b249ded0f18fdfa4013708813dc () const Tp::PendingVariantMap * requestAllProperties a00121.html ae6ff846230b0113d235b23568cdfee26 () const static QLatin1String staticInterfaceName a00121.html a78a69f72bce3905c903172c7806f7467 () virtual void invalidate a00121.html ad04a682781c90b58060b843a7cadae05 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ChannelInterfaceConferenceInterface a00122.html Tp::AbstractInterface void ChannelMerged a00122.html aa18cbd842e99515cda90efe07e8a91fd (const QDBusObjectPath &channel, uint channelSpecificHandle, const QVariantMap &properties) void ChannelRemoved a00122.html a1d24742c62566f56411860baeb2150ea (const QDBusObjectPath &channel, const QVariantMap &details) ChannelInterfaceConferenceInterface a00122.html a6a791b536475b8cfc6b5e362a9fbfa38 (const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfaceConferenceInterface a00122.html a6f859b2cde332d102978818700e9234d (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfaceConferenceInterface a00122.html a9fafcb7b8fcb694737f9c7cac0c794c5 (Tp::DBusProxy *proxy) ChannelInterfaceConferenceInterface a00122.html a6a9cc2a45dd7f36534fdebee5d192e2c (const Tp::Client::ChannelInterface &mainInterface) ChannelInterfaceConferenceInterface a00122.html ad46d53b05377ffcaa7cacb2838a21b1c (const Tp::Client::ChannelInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyChannels a00122.html a7b85212cb060d3a19fd606665244e93f () const Tp::PendingVariant * requestPropertyInitialChannels a00122.html a4d9942808d335a31ab5448f26effefe1 () const Tp::PendingVariant * requestPropertyInitialInviteeHandles a00122.html a25988ffaac75d5db7643ba80d8f2aa00 () const Tp::PendingVariant * requestPropertyInitialInviteeIDs a00122.html ac315a8deab7588403c9f10a97927983c () const Tp::PendingVariant * requestPropertyInvitationMessage a00122.html a539c0363b105cce8fe0dc11b56d85364 () const Tp::PendingVariant * requestPropertyOriginalChannels a00122.html abf5d6b6c5b743b10ec242f8605beb5e5 () const Tp::PendingVariantMap * requestAllProperties a00122.html aa02a4f1b4eed56c88ab625ef1ba32198 () const static QLatin1String staticInterfaceName a00122.html a5d9c43e0c6f2e3e5a1254afb417a7bd2 () virtual void invalidate a00122.html ac0cba804de17ad80dd35fbe279626c82 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ChannelInterfaceDTMFInterface a00124.html Tp::AbstractInterface QDBusPendingReply StartTone a00124.html a7f4f47a584592d46b2182c53dcce22cc (uint streamID, uchar event, int timeout=-1) QDBusPendingReply StopTone a00124.html a755c363703a7afb5efe8c5d44b29e683 (uint streamID, int timeout=-1) QDBusPendingReply MultipleTones a00124.html ac436279fe00b1d024645eabdfaa1e98e (const QString &tones, int timeout=-1) void TonesDeferred a00124.html a413c337da0b107f1947b8393d414d8f8 (const QString &tones) void SendingTones a00124.html afa8462b3db0db4ee82bfffde8b30e41e (const QString &tones) void StoppedTones a00124.html a9619fd9b95e3d1f3af078e537116d4ac (bool cancelled) ChannelInterfaceDTMFInterface a00124.html aebdbf77eb52c5e20559543f7601296f3 (const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfaceDTMFInterface a00124.html ad8d400217c1a81800ecacbd22be01662 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfaceDTMFInterface a00124.html abd01a6731529646635d210fc57892ed3 (Tp::DBusProxy *proxy) ChannelInterfaceDTMFInterface a00124.html aa006dda0854225c735b72d8552ccc1a2 (const Tp::Client::ChannelInterface &mainInterface) ChannelInterfaceDTMFInterface a00124.html ac43aa619edb225c3a59c752e4adc5d71 (const Tp::Client::ChannelInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyCurrentlySendingTones a00124.html a6e8f3202e229c84b5055335f40b3bbe6 () const Tp::PendingVariant * requestPropertyInitialTones a00124.html ab0b01ad567b4178387723912b8a859e7 () const Tp::PendingVariant * requestPropertyDeferredTones a00124.html abc815fe134037b68a002f2f5d4e2744e () const Tp::PendingVariantMap * requestAllProperties a00124.html afac06b63451ba69cc204df607ea5c8ca () const static QLatin1String staticInterfaceName a00124.html aa83cc3ee16a396afd88e1aa73a442649 () virtual void invalidate a00124.html a1a26748d2b875d31993bf52d97e6148b (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ChannelInterfaceDestroyableInterface a00123.html Tp::AbstractInterface QDBusPendingReply Destroy a00123.html adffce8af8cc62152f5e273e3daa2e817 (int timeout=-1) ChannelInterfaceDestroyableInterface a00123.html a948b4517bac6d99f0c0a499361cd9efa (const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfaceDestroyableInterface a00123.html afddc0033957ab2ab35569e637b1dfdf0 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfaceDestroyableInterface a00123.html a4461b2f092458ccbd9a44314829bf386 (Tp::DBusProxy *proxy) ChannelInterfaceDestroyableInterface a00123.html ae9432e173870c1553fc0a11381b44fd7 (const Tp::Client::ChannelInterface &mainInterface) ChannelInterfaceDestroyableInterface a00123.html a9a237ca6f56e5c514aec91881992bcfe (const Tp::Client::ChannelInterface &mainInterface, QObject *parent) Tp::PendingVariantMap * requestAllProperties a00123.html a180bf4363d540b853c8e14c285fa6ab4 () const static QLatin1String staticInterfaceName a00123.html a4d1378f0615d3f182c5709cfc9f504c1 () virtual void invalidate a00123.html a98415e7574a38dba9726ab8ef5841e23 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ChannelInterfaceFileTransferMetadataInterface a00125.html Tp::AbstractInterface ChannelInterfaceFileTransferMetadataInterface a00125.html a8e3d0d8fb001199f6118ddf42e854473 (const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfaceFileTransferMetadataInterface a00125.html a0320cbe670c296a4dc2187af871ebaf6 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfaceFileTransferMetadataInterface a00125.html ad17298f8cde3a92407062d59b6d0d418 (Tp::DBusProxy *proxy) ChannelInterfaceFileTransferMetadataInterface a00125.html a34ec2407d057a1da59ac171c61860079 (const Tp::Client::ChannelInterface &mainInterface) ChannelInterfaceFileTransferMetadataInterface a00125.html a3dbdeb25f5cc1f14f12c9c130a75bc8d (const Tp::Client::ChannelInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyServiceName a00125.html a97b92a9ad320126052b6d0980c13d7f6 () const Tp::PendingOperation * setPropertyServiceName a00125.html a5bff74a368d3133b24c4997015fbcd48 (QString newValue) Tp::PendingVariant * requestPropertyMetadata a00125.html a9808fa66158073369c9c255a8c230e99 () const Tp::PendingOperation * setPropertyMetadata a00125.html ad8e836f4ab0a51e3de3279c3177c2a6a (Tp::Metadata newValue) Tp::PendingVariantMap * requestAllProperties a00125.html ab3739c781eca3e944159f0129ad14323 () const static QLatin1String staticInterfaceName a00125.html a8162b34ba8a568b96d53dd8c75611655 () virtual void invalidate a00125.html ae4e8e9071c9be3fc2d60b83634f17870 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ChannelInterfaceGroupInterface a00126.html Tp::AbstractInterface QDBusPendingReply AddMembers a00126.html a679717c703b0c51ebc9dc1ff6a248693 (const Tp::UIntList &contacts, const QString &message, int timeout=-1) QDBusPendingReply< Tp::UIntList, Tp::UIntList, Tp::UIntList > GetAllMembers a00126.html ac801b6c6f0174090f556d4451fd94fd7 (int timeout=-1) QDBusPendingReply< uint > GetGroupFlags a00126.html ad307d230353b15975e824b9becee2bf0 (int timeout=-1) QDBusPendingReply< Tp::UIntList > GetHandleOwners a00126.html ae124118f5339d05e033018c1d540b9b9 (const Tp::UIntList &handles, int timeout=-1) QDBusPendingReply< Tp::UIntList > GetLocalPendingMembers a00126.html a71a77339bd0c81193ef4ab7501495e20 (int timeout=-1) QDBusPendingReply< Tp::LocalPendingInfoList > GetLocalPendingMembersWithInfo a00126.html a672af560e2335b00a096b69702c2cdde (int timeout=-1) QDBusPendingReply< Tp::UIntList > GetMembers a00126.html a002272a6c67ee7682f32cd318b3d7058 (int timeout=-1) QDBusPendingReply< Tp::UIntList > GetRemotePendingMembers a00126.html abfb7d3de4986e5a5039bb199a17e10a4 (int timeout=-1) QDBusPendingReply< uint > GetSelfHandle a00126.html a5c36599b48a9f43842134499cf61ef2d (int timeout=-1) QDBusPendingReply RemoveMembers a00126.html a68f5efdb73d7f6dcddb638fb05bea959 (const Tp::UIntList &contacts, const QString &message, int timeout=-1) QDBusPendingReply RemoveMembersWithReason a00126.html a730c7b58b679aa14cdeeb20e468643cb (const Tp::UIntList &contacts, const QString &message, uint reason, int timeout=-1) void HandleOwnersChanged a00126.html a0b5e0a8cf6d7b511a59b6aa6e02e468a (const Tp::HandleOwnerMap &added, const Tp::UIntList &removed) void HandleOwnersChangedDetailed a00126.html a884c6ce068ac8f57a5c28a9aa958ab0f (const Tp::HandleOwnerMap &added, const Tp::UIntList &removed, const Tp::HandleIdentifierMap &identifiers) void SelfHandleChanged a00126.html a7538d2aae49e96eafb247af84b749ed1 (uint selfHandle) void SelfContactChanged a00126.html ae14a905b4aa426ac8d39eede78fa3e1a (uint selfHandle, const QString &selfID) void GroupFlagsChanged a00126.html aff24670319166febb52fbdd07f1ae1d4 (uint added, uint removed) void MembersChanged a00126.html a8fd1f5fe36448c5f32c8d35bca1af3c1 (const QString &message, const Tp::UIntList &added, const Tp::UIntList &removed, const Tp::UIntList &localPending, const Tp::UIntList &remotePending, uint actor, uint reason) void MembersChangedDetailed a00126.html ac840dd1ed0232d40ddaec4b2ffe6b289 (const Tp::UIntList &added, const Tp::UIntList &removed, const Tp::UIntList &localPending, const Tp::UIntList &remotePending, const QVariantMap &details) ChannelInterfaceGroupInterface a00126.html a8dc738ab020099112172d46f81cbfea7 (const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfaceGroupInterface a00126.html aa8d44d8da94dc3d52ac6676abd03344f (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfaceGroupInterface a00126.html a9f19860cd372053b2a26b3b9872b3966 (Tp::DBusProxy *proxy) ChannelInterfaceGroupInterface a00126.html a119c2047d24a622af97d9a804380b6ba (const Tp::Client::ChannelInterface &mainInterface) ChannelInterfaceGroupInterface a00126.html ab9c5248b077b7b05f480ed923b999857 (const Tp::Client::ChannelInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyGroupFlags a00126.html a93a5eb6f41bedc6c57a25bebf81626b5 () const Tp::PendingVariant * requestPropertyHandleOwners a00126.html a40b5642f56029baddf910bc36615bb80 () const Tp::PendingVariant * requestPropertyLocalPendingMembers a00126.html ae3bc5b0510c7d6732846bc81e7d58579 () const Tp::PendingVariant * requestPropertyMembers a00126.html aabef4247d36d5d5311024ce5a4a746d2 () const Tp::PendingVariant * requestPropertyRemotePendingMembers a00126.html ab2282518e6a9fcc62da8c2af5748c955 () const Tp::PendingVariant * requestPropertySelfHandle a00126.html a97cc43cea0aad7761a3056412ea502be () const Tp::PendingVariant * requestPropertyMemberIdentifiers a00126.html a700c7ac5d6249d2d3c77bd49cc2c8809 () const Tp::PendingVariantMap * requestAllProperties a00126.html a44dccb58c143ee15afec7d21b045a76a () const static QLatin1String staticInterfaceName a00126.html a1f6b3019b28cf8c787a4dea326876262 () virtual void invalidate a00126.html ab54c77e9528266c565ec417791e6f546 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ChannelInterfaceHoldInterface a00127.html Tp::AbstractInterface QDBusPendingReply< uint, uint > GetHoldState a00127.html a245771309949e953ff90fb58ee9d91bd (int timeout=-1) QDBusPendingReply RequestHold a00127.html a05a20df88f33a9faf5fc0ab729d8730b (bool hold, int timeout=-1) void HoldStateChanged a00127.html a719bfb409d0197e11e944ce8ba5a5974 (uint holdState, uint reason) ChannelInterfaceHoldInterface a00127.html a246936e79a04a56da32f55384b770191 (const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfaceHoldInterface a00127.html adf33231fa0f8766ddc0ada5a0e740e28 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfaceHoldInterface a00127.html af59f7ef064c37aeb0a5c4f76d9b5d26d (Tp::DBusProxy *proxy) ChannelInterfaceHoldInterface a00127.html a7da65a8438e580b36d46cd8e9d12e76c (const Tp::Client::ChannelInterface &mainInterface) ChannelInterfaceHoldInterface a00127.html a04cf11a3d78ce63052e26385f3c78a0e (const Tp::Client::ChannelInterface &mainInterface, QObject *parent) Tp::PendingVariantMap * requestAllProperties a00127.html a179d036c9807aadda96d2cb45565f234 () const static QLatin1String staticInterfaceName a00127.html a349f24aeb30873dc2ef05606499603a8 () virtual void invalidate a00127.html a5c249bc9f5fb17b5945a8af0b53cc75b (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ChannelInterfaceMediaSignallingInterface a00128.html Tp::AbstractInterface QDBusPendingReply< Tp::MediaSessionHandlerInfoList > GetSessionHandlers a00128.html a5595cc1921151cef79673adc48ea048f (int timeout=-1) void NewSessionHandler a00128.html a61a94d9364bfdb63560ac5b187641c06 (const QDBusObjectPath &sessionHandler, const QString &sessionType) ChannelInterfaceMediaSignallingInterface a00128.html ad41879e41375051e402d35a4164972b6 (const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfaceMediaSignallingInterface a00128.html a307d06a72bf9f7d41917d243214fa625 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfaceMediaSignallingInterface a00128.html a7735787788c3dc00e4c2052575872d0c (Tp::DBusProxy *proxy) ChannelInterfaceMediaSignallingInterface a00128.html a866e14ac44da29db897b44f5f7cd125f (const Tp::Client::ChannelInterface &mainInterface) ChannelInterfaceMediaSignallingInterface a00128.html a41ddefe575bde304766289e79b72a729 (const Tp::Client::ChannelInterface &mainInterface, QObject *parent) Tp::PendingVariantMap * requestAllProperties a00128.html af98111e4d51b58a89ebfb22833d4a2b5 () const static QLatin1String staticInterfaceName a00128.html a5fa2f2b351bf8c315a62f762be2c3e4b () virtual void invalidate a00128.html a9900ffb0c85243a2edce30e0b7070e88 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ChannelInterfaceMessagesInterface a00129.html Tp::AbstractInterface QDBusPendingReply< QString > SendMessage a00129.html a2322168c5097082626ce8e18e19df608 (const Tp::MessagePartList &message, uint flags, int timeout=-1) QDBusPendingReply< Tp::MessagePartContentMap > GetPendingMessageContent a00129.html a3aa8c7d409c35d4c2ad70a171c2e05eb (uint messageID, const Tp::UIntList &parts, int timeout=-1) void MessageSent a00129.html afbc7353fdabcd01e305061a2ee29deb0 (const Tp::MessagePartList &content, uint flags, const QString &messageToken) void PendingMessagesRemoved a00129.html a1653fd80ebb06e02ffbd8bb31935ce3f (const Tp::UIntList &messageIDs) void MessageReceived a00129.html aa6f58737e7247f1dafa158a375349a31 (const Tp::MessagePartList &message) ChannelInterfaceMessagesInterface a00129.html acd2a368d83af344d0d9df20f0a04f327 (const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfaceMessagesInterface a00129.html a61c6baf5ac33cdb2fa1c0f9d82971341 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfaceMessagesInterface a00129.html a13616cfdf998313de5a0b7e568870726 (Tp::DBusProxy *proxy) ChannelInterfaceMessagesInterface a00129.html a596dcfc8100e1b1c848d23e647b2443f (const Tp::Client::ChannelInterface &mainInterface) ChannelInterfaceMessagesInterface a00129.html afa9a27ce573c6063fe0c2b3d81eb4aad (const Tp::Client::ChannelInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertySupportedContentTypes a00129.html a498b45f3f71b049c80ed92b43432c054 () const Tp::PendingVariant * requestPropertyMessageTypes a00129.html a5faa6d23838e93219b08f8e5171fb727 () const Tp::PendingVariant * requestPropertyMessagePartSupportFlags a00129.html ad1f813d6c96538dab7d8fa27248a2812 () const Tp::PendingVariant * requestPropertyPendingMessages a00129.html abcb27385de02342c40009d73299c943c () const Tp::PendingVariant * requestPropertyDeliveryReportingSupport a00129.html a8cb4c801b31b8085b8e66ee060a0b63c () const Tp::PendingVariantMap * requestAllProperties a00129.html a333ba30f24d33e7b5d8a189c4147bb9f () const static QLatin1String staticInterfaceName a00129.html a9dff305f703305fc024064c31e88bbfb () virtual void invalidate a00129.html ae852f646b8750ee9ae7513ecabce3c76 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ChannelInterfacePasswordInterface a00130.html Tp::AbstractInterface QDBusPendingReply< uint > GetPasswordFlags a00130.html a48c149d4bd9e6db9cd6db57709001319 (int timeout=-1) QDBusPendingReply< bool > ProvidePassword a00130.html a369b369ccaedec0ec005cc742c0817c0 (const QString &password, int timeout=-1) void PasswordFlagsChanged a00130.html a33b0006a8acf2cd01a9efd397d311f72 (uint added, uint removed) ChannelInterfacePasswordInterface a00130.html af0c53984c5b43c1d59859840962d12d2 (const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfacePasswordInterface a00130.html a1e737affc4b57c949768e2f8a4e6f430 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfacePasswordInterface a00130.html aa12766f3b5d8eeb1ee64b022a425da21 (Tp::DBusProxy *proxy) ChannelInterfacePasswordInterface a00130.html af854bb60a4f32453a5998007b3fdb947 (const Tp::Client::ChannelInterface &mainInterface) ChannelInterfacePasswordInterface a00130.html ac2ddeb333e5dc722f6057f5c9cd8c902 (const Tp::Client::ChannelInterface &mainInterface, QObject *parent) Tp::PendingVariantMap * requestAllProperties a00130.html add20d5c7edac8879219bff9a0a43b036 () const static QLatin1String staticInterfaceName a00130.html a2b9830bb2772224ae8fa6612ada70c1d () virtual void invalidate a00130.html acd3cc98291efedd3c12d1c61020ddfd4 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ChannelInterfaceSASLAuthenticationInterface a00131.html Tp::AbstractInterface QDBusPendingReply StartMechanism a00131.html a305de6933d13d95a9b6145c91cdeaccf (const QString &mechanism, int timeout=-1) QDBusPendingReply StartMechanismWithData a00131.html a132a20cc888970dabd202bfb4c5aacca (const QString &mechanism, const QByteArray &initialData, int timeout=-1) QDBusPendingReply Respond a00131.html ae8c86f45faa45fafd5fe42d03869c8a2 (const QByteArray &responseData, int timeout=-1) QDBusPendingReply AcceptSASL a00131.html ad6d594e30722ea3ee378be222700f798 (int timeout=-1) QDBusPendingReply AbortSASL a00131.html aef599fe6b2d21f0fc22accb4c8a43ace (uint reason, const QString &debugMessage, int timeout=-1) void SASLStatusChanged a00131.html a5bfadeaf864af8029796132ad19ab07f (uint status, const QString &reason, const QVariantMap &details) void NewChallenge a00131.html a7c18012aadaa73dadffc3979c965c41f (const QByteArray &challengeData) ChannelInterfaceSASLAuthenticationInterface a00131.html aa8b6865d152d3fe286ccf881c3f22039 (const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfaceSASLAuthenticationInterface a00131.html aa25735e9c830ca6efd74d0a54e00074f (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfaceSASLAuthenticationInterface a00131.html a62d0b6bcd773abdec6502f63fe6e0205 (Tp::DBusProxy *proxy) ChannelInterfaceSASLAuthenticationInterface a00131.html a5aba240e5be2087a4eb9a13c22bab50e (const Tp::Client::ChannelInterface &mainInterface) ChannelInterfaceSASLAuthenticationInterface a00131.html a07e5eecf49a93679d96fb5516d8e2b88 (const Tp::Client::ChannelInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyAvailableMechanisms a00131.html ab923daa38e076f9a0dfb6ff050a41bc3 () const Tp::PendingVariant * requestPropertyHasInitialData a00131.html a995ca3ca552831bc3cb1e271af8a175c () const Tp::PendingVariant * requestPropertyCanTryAgain a00131.html addfe20dbc6ebc0e4189c4d76b127ccb3 () const Tp::PendingVariant * requestPropertySASLStatus a00131.html a7560d50b14dcb743f9f59bee523af345 () const Tp::PendingVariant * requestPropertySASLError a00131.html a96b02246df4d899f84073e0defd371c1 () const Tp::PendingVariant * requestPropertySASLErrorDetails a00131.html a7ac446db7f00020f081be45711c1db7e () const Tp::PendingVariant * requestPropertyAuthorizationIdentity a00131.html aee55564e166f8b5be1bd4ef0cee20786 () const Tp::PendingVariant * requestPropertyDefaultUsername a00131.html a075de39104a43b28cdf19597675cd571 () const Tp::PendingVariant * requestPropertyDefaultRealm a00131.html a951f07f75b0594a2af1aad2a7026c7d1 () const Tp::PendingVariant * requestPropertyMaySaveResponse a00131.html a359c084b70afb615eabc5356ccecce72 () const Tp::PendingVariantMap * requestAllProperties a00131.html aafa8368c1df7466171d3f2e8c45cdc9f () const static QLatin1String staticInterfaceName a00131.html ad02dda8414442c6667d08b3731b8e1a4 () virtual void invalidate a00131.html a97b6ba872a1604e9b8399ccdc6c3fafd (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ChannelInterfaceSMSInterface a00134.html Tp::AbstractInterface QDBusPendingReply< uint, int, int > GetSMSLength a00134.html a25ca310de9dd4b8b5f4bd301e1d7e486 (const Tp::MessagePartList &message, int timeout=-1) void SMSChannelChanged a00134.html a44a6a31763a5b5a28fcd4f87ae336265 (bool SMSChannel) ChannelInterfaceSMSInterface a00134.html a0963567595da8466f4465a74252468e1 (const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfaceSMSInterface a00134.html a31251dbe46c1c44dbb1d7ba56b892773 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfaceSMSInterface a00134.html ae4c10b0c7b205032a5aa5e071a40eea6 (Tp::DBusProxy *proxy) ChannelInterfaceSMSInterface a00134.html a3a19a0190339a05da0cc1d3c2dd88c8f (const Tp::Client::ChannelInterface &mainInterface) ChannelInterfaceSMSInterface a00134.html ad90f19f83c3774f703daaf80c7f6e571 (const Tp::Client::ChannelInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyFlash a00134.html a01085f8a670bd4dee774b0409a00af2b () const Tp::PendingVariant * requestPropertySMSChannel a00134.html a3701fe3db530a59dc25ce790cd8dfbf0 () const Tp::PendingVariantMap * requestAllProperties a00134.html ab4e879b9ec2423bc01fa5c7edccef3cb () const static QLatin1String staticInterfaceName a00134.html a6aaf11f1282007dfe112373a4415f718 () virtual void invalidate a00134.html a051ffa99b47faa6678ca7316f07f4399 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ChannelInterfaceSecurableInterface a00132.html Tp::AbstractInterface ChannelInterfaceSecurableInterface a00132.html ac3b4f21815ac1a4bddf4224800e9681c (const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfaceSecurableInterface a00132.html a2484f2a529d8de96ac4ddf40c85a8a41 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfaceSecurableInterface a00132.html a77b998c8019ba11ff6d7a1bb6eb1428f (Tp::DBusProxy *proxy) ChannelInterfaceSecurableInterface a00132.html adfecafba5d1aa574104b06f5f1a5b583 (const Tp::Client::ChannelInterface &mainInterface) ChannelInterfaceSecurableInterface a00132.html a9c437b4f2287281fcc3efd578d48eaeb (const Tp::Client::ChannelInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyEncrypted a00132.html a7394b53e31f6017c9b5bd012adfd1239 () const Tp::PendingVariant * requestPropertyVerified a00132.html ab5ff439de2e731a1d2caa973ccada90c () const Tp::PendingVariantMap * requestAllProperties a00132.html ad7f8e57f2be5deafc5d37cbf0f870cd7 () const static QLatin1String staticInterfaceName a00132.html a6b278292d1b013768e4af1e36bbe9b98 () virtual void invalidate a00132.html ad70f5ac7d07d41d97a00b15dccd446df (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ChannelInterfaceServicePointInterface a00133.html Tp::AbstractInterface void ServicePointChanged a00133.html a636a125d6977f21f075a29ae07cb3449 (const Tp::ServicePoint &servicePoint) ChannelInterfaceServicePointInterface a00133.html a4e7f7f5c9bd05d399b3fe889536f73da (const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfaceServicePointInterface a00133.html a7ae470c6bb7937380431406530661a0d (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfaceServicePointInterface a00133.html a229e53bb7780ada1625006eabdced42b (Tp::DBusProxy *proxy) ChannelInterfaceServicePointInterface a00133.html afe41fcf5478a72f45623866181d75471 (const Tp::Client::ChannelInterface &mainInterface) ChannelInterfaceServicePointInterface a00133.html a3e588177e22476a742a19fa59b84a0b9 (const Tp::Client::ChannelInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyInitialServicePoint a00133.html a57779ab21eabb81fdb4810ef83e848c7 () const Tp::PendingVariant * requestPropertyCurrentServicePoint a00133.html a37142e1b3e07f9cb989741cd678b767d () const Tp::PendingVariantMap * requestAllProperties a00133.html a51af8cdfb06c5fa6571b9efd1082b48c () const static QLatin1String staticInterfaceName a00133.html af7d1bb5ed8aebade7d68f45c72aa3c0f () virtual void invalidate a00133.html a8cb04cd79913d3f5f7bd30f62871e830 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ChannelInterfaceTubeInterface a00135.html Tp::AbstractInterface void TubeChannelStateChanged a00135.html a05afd17c2b2ab3fb4594ed51c36f1277 (uint state) ChannelInterfaceTubeInterface a00135.html a71e0de9d3eb14bd44216c31253132de5 (const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfaceTubeInterface a00135.html a5de20c8cf3492ebcdd98ffbd92faf4b6 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ChannelInterfaceTubeInterface a00135.html afee67f861bbb27fcd2edd719c2a97998 (Tp::DBusProxy *proxy) ChannelInterfaceTubeInterface a00135.html a1cb7032c43f020efd899d00987bbf598 (const Tp::Client::ChannelInterface &mainInterface) ChannelInterfaceTubeInterface a00135.html abe77f4f6a4e51e5e2ac9f70fa6a03eeb (const Tp::Client::ChannelInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyParameters a00135.html a17ea23ed3335870f87b76e01953002b1 () const Tp::PendingVariant * requestPropertyState a00135.html a64235b3e6509199718e97e855a39afee () const Tp::PendingVariantMap * requestAllProperties a00135.html ac5842a64c5898e83748391613217d35e () const static QLatin1String staticInterfaceName a00135.html ab0b2bd1476ce9b12e68da68b6d973d5d () virtual void invalidate a00135.html aa23a4a79b6ec6c81c1370cd9499aad61 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ChannelTypeCallInterface a00140.html Tp::AbstractInterface QDBusPendingReply SetRinging a00140.html a96239edddf18d4058f9099425d982a5c (int timeout=-1) QDBusPendingReply SetQueued a00140.html a741f81bef240cc59132133a29876be09 (int timeout=-1) QDBusPendingReply Accept a00140.html a633506fb39ef1a4d7b7d14069fcf1392 (int timeout=-1) QDBusPendingReply Hangup a00140.html afa49096dadac8b53c436bfb698151f7e (uint reason, const QString &detailedHangupReason, const QString &message, int timeout=-1) QDBusPendingReply< QDBusObjectPath > AddContent a00140.html ab33e95e80e652d661305d0a95fec8aca (const QString &contentName, uint contentType, uint initialDirection, int timeout=-1) void ContentAdded a00140.html adf5123584ed15171eeec88ee0dd7cdcb (const QDBusObjectPath &content) void ContentRemoved a00140.html a15b7638cda497d1b3be7f6cdbd766f53 (const QDBusObjectPath &content, const Tp::CallStateReason &reason) void CallStateChanged a00140.html a74e593605cb733cee4cfd96473f14e8c (uint callState, uint callFlags, const Tp::CallStateReason &callStateReason, const QVariantMap &callStateDetails) void CallMembersChanged a00140.html a7e53ac3834a7321526ebb2cda3bbf04a (const Tp::CallMemberMap &flagsChanged, const Tp::HandleIdentifierMap &identifiers, const Tp::UIntList &removed, const Tp::CallStateReason &reason) ChannelTypeCallInterface a00140.html aecad80b0dbd59d6f007252d82c8e87cc (const QString &busName, const QString &objectPath, QObject *parent=0) ChannelTypeCallInterface a00140.html a8950b8e0e52b1c4e27d012a5b1ae5b77 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ChannelTypeCallInterface a00140.html a16316a652a14601a29163c60840f63d5 (Tp::DBusProxy *proxy) ChannelTypeCallInterface a00140.html a03493dc42391870962fe7936261d254b (const Tp::Client::ChannelInterface &mainInterface) ChannelTypeCallInterface a00140.html ab24514a6dd6c4ca7ff8cf1e8416b70a0 (const Tp::Client::ChannelInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyContents a00140.html a001110328039f224b70dafc475c31fbf () const Tp::PendingVariant * requestPropertyCallStateDetails a00140.html a72d3ca4955982fcd707988fcf5e03792 () const Tp::PendingVariant * requestPropertyCallState a00140.html a93fa7e2928719d075b068fa9d11d37db () const Tp::PendingVariant * requestPropertyCallFlags a00140.html a6540dd7a20f6d53e154abbc5fe8b3b2e () const Tp::PendingVariant * requestPropertyCallStateReason a00140.html abec721352f707fba6f301628c49d267c () const Tp::PendingVariant * requestPropertyHardwareStreaming a00140.html ae2356a39a64cc9e96ebf6c8be19aeec9 () const Tp::PendingVariant * requestPropertyCallMembers a00140.html aa69dae80831c99f2e948442372b57d50 () const Tp::PendingVariant * requestPropertyMemberIdentifiers a00140.html a7b38f12b971a1328b7d3adf0a57baf13 () const Tp::PendingVariant * requestPropertyInitialTransport a00140.html a830793df651ca3d88dd119ce86496e87 () const Tp::PendingVariant * requestPropertyInitialAudio a00140.html a7359b73bc1f2c36b7ecdfc0a264fd188 () const Tp::PendingVariant * requestPropertyInitialVideo a00140.html ace0f0982b16fc09cdce44f040cae1733 () const Tp::PendingVariant * requestPropertyInitialAudioName a00140.html aa6088e0eb02283553550c27a7c0fc0e7 () const Tp::PendingVariant * requestPropertyInitialVideoName a00140.html a0dcb4cd44bb1b0320b7dd5217fb21ec9 () const Tp::PendingVariant * requestPropertyMutableContents a00140.html a167b9c345eedf5fedce33bd00a3e85a2 () const Tp::PendingVariantMap * requestAllProperties a00140.html a6a6c36fb3384c128a0d5d9ee9f4b2f48 () const static QLatin1String staticInterfaceName a00140.html a30872a6283425848b143dca8e7f7abef () virtual void invalidate a00140.html a50f30944805c396ded58589c48eccbdf (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ChannelTypeContactListInterface a00141.html Tp::AbstractInterface ChannelTypeContactListInterface a00141.html a0b19c65f24fd0e3b45e20be0697020db (const QString &busName, const QString &objectPath, QObject *parent=0) ChannelTypeContactListInterface a00141.html a6bdb4bbe627bd33cbaf56017cd3f8b45 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ChannelTypeContactListInterface a00141.html a0c2a04bc94c5a67a24cb23f040940c7a (Tp::DBusProxy *proxy) ChannelTypeContactListInterface a00141.html a80cd1cde5874158b76f2c1fa6bc3f455 (const Tp::Client::ChannelInterface &mainInterface) ChannelTypeContactListInterface a00141.html af61df5ae0a86795d35fc619dddc8b8c9 (const Tp::Client::ChannelInterface &mainInterface, QObject *parent) Tp::PendingVariantMap * requestAllProperties a00141.html ab1edb48641e8fd3e020273d0d8b86ae4 () const static QLatin1String staticInterfaceName a00141.html a54ef6a00756e6797f65592500091b8ef () virtual void invalidate a00141.html af265a16ed1fa8c6c3670c19473ca447e (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ChannelTypeContactSearchInterface a00142.html Tp::AbstractInterface QDBusPendingReply Search a00142.html aa8ca6382d623328ab5210c5780782d5a (const Tp::ContactSearchMap &terms, int timeout=-1) QDBusPendingReply More a00142.html aa5d9d2b680bb81ec0e00fdff51620f3c (int timeout=-1) QDBusPendingReply Stop a00142.html a358c80442161ade9a9d3e758c8c729e4 (int timeout=-1) void SearchStateChanged a00142.html a5548696ea67359097cec33e62d511447 (uint state, const QString &error, const QVariantMap &details) void SearchResultReceived a00142.html aec8316d64e19e4f7b82717842e9175af (const Tp::ContactSearchResultMap &result) ChannelTypeContactSearchInterface a00142.html a0af91e03afa35941661ee3c8de2af634 (const QString &busName, const QString &objectPath, QObject *parent=0) ChannelTypeContactSearchInterface a00142.html a628afe07e4d03a6b15a52eab899fd37c (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ChannelTypeContactSearchInterface a00142.html a3e8b70b4361ab47b00b63e99c05c0d2e (Tp::DBusProxy *proxy) ChannelTypeContactSearchInterface a00142.html a4f037961ba3ca6083222cc048ea36265 (const Tp::Client::ChannelInterface &mainInterface) ChannelTypeContactSearchInterface a00142.html a76e56ecdc349b7cd0a291c81ac3b4e57 (const Tp::Client::ChannelInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertySearchState a00142.html aafddc844f61e63b77ddf7ec49267560e () const Tp::PendingVariant * requestPropertyLimit a00142.html a9adce7c2d55f5953a18729bdfdd14705 () const Tp::PendingVariant * requestPropertyAvailableSearchKeys a00142.html a7220b7ee2b349e81a2511e370b4b9d9b () const Tp::PendingVariant * requestPropertyServer a00142.html a6d8ed003b301ab7d12bb30ea6dfcba6e () const Tp::PendingVariantMap * requestAllProperties a00142.html ac3da5d23a1fd87f946cd17b6db26992b () const static QLatin1String staticInterfaceName a00142.html a54dfd37402a677c822fe0997325a0f4e () virtual void invalidate a00142.html ab70c0b92b91e3888e7f25c458f9b5aa6 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ChannelTypeDBusTubeInterface a00143.html Tp::AbstractInterface QDBusPendingReply< QString > Offer a00143.html a82729555d6a94dc8ec2fe9138eb7cf66 (const QVariantMap &parameters, uint accesscontrol, int timeout=-1) QDBusPendingReply< QString > Accept a00143.html ace79664ed05ccfaaaf849008be1f5967 (uint accesscontrol, int timeout=-1) void DBusNamesChanged a00143.html a0e4f4cb91e60addb7be6ccb9393ea6c2 (const Tp::DBusTubeParticipants &added, const Tp::UIntList &removed) ChannelTypeDBusTubeInterface a00143.html a97718786c9c071014cbdee0dfdd9c479 (const QString &busName, const QString &objectPath, QObject *parent=0) ChannelTypeDBusTubeInterface a00143.html a4f5eeb7b54185002fd6749136cba4162 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ChannelTypeDBusTubeInterface a00143.html a7463ca4d8d1e18ce797085c7d80eaf43 (Tp::DBusProxy *proxy) ChannelTypeDBusTubeInterface a00143.html a0277af23a31deea7094e4f86edfef06d (const Tp::Client::ChannelInterface &mainInterface) ChannelTypeDBusTubeInterface a00143.html a068dd3c3cb9cbce5209a0be1fa157574 (const Tp::Client::ChannelInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyServiceName a00143.html a14f94c953b722f0c017be40ab28b972d () const Tp::PendingVariant * requestPropertyDBusNames a00143.html aa5b59ba24ef690f942c1c0933f33fd1a () const Tp::PendingVariant * requestPropertySupportedAccessControls a00143.html a3752156cf18aafd8c68b8b6eeab18fb9 () const Tp::PendingVariantMap * requestAllProperties a00143.html afd71a648d2ab61abb7011e0e3449405e () const static QLatin1String staticInterfaceName a00143.html a6149fdb3cc4d19827aa3f52db5a10060 () virtual void invalidate a00143.html a67dcf67123021313e8d9126a8e1c4936 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ChannelTypeFileTransferInterface a00144.html Tp::AbstractInterface QDBusPendingReply< QDBusVariant > AcceptFile a00144.html adfdff8bed32f86194ffd64074833bc69 (uint addressType, uint accessControl, const QDBusVariant &accessControlParam, qulonglong offset, int timeout=-1) QDBusPendingReply< QDBusVariant > ProvideFile a00144.html ac9f2511f0821baa239c8e9898f9c94bf (uint addressType, uint accessControl, const QDBusVariant &accessControlParam, int timeout=-1) void FileTransferStateChanged a00144.html a92cb044275a108537f006d9f371dd750 (uint state, uint reason) void TransferredBytesChanged a00144.html a2f18f3ac37ec73cca36c6befd44e78f7 (qulonglong count) void InitialOffsetDefined a00144.html a94b5a83b112b80e7cf8d40401e8b9229 (qulonglong initialOffset) void URIDefined a00144.html a23733372663ed0021643cfa21abb7366 (const QString &URI) ChannelTypeFileTransferInterface a00144.html a07c223f949c456dcfc4c1c500aa28ba7 (const QString &busName, const QString &objectPath, QObject *parent=0) ChannelTypeFileTransferInterface a00144.html adc6fa6da3f6cddb837bb1b713d44480c (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ChannelTypeFileTransferInterface a00144.html ad659f4687a3831c3bf4606e0dab16b0d (Tp::DBusProxy *proxy) ChannelTypeFileTransferInterface a00144.html a81a0546e3eaf32c91bc61b956567077b (const Tp::Client::ChannelInterface &mainInterface) ChannelTypeFileTransferInterface a00144.html a5a001a018feebd76671c7aad0b277b56 (const Tp::Client::ChannelInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyState a00144.html ae7ce82a878ab8da1996d83ea80df16e7 () const Tp::PendingVariant * requestPropertyContentType a00144.html a1cb0ae96a1eee75e17eb065b6af98f5f () const Tp::PendingVariant * requestPropertyFilename a00144.html ad8fee01d164e271be0f7c61210772f30 () const Tp::PendingVariant * requestPropertySize a00144.html af5861bf6534ea5233fe5c923adb1ff55 () const Tp::PendingVariant * requestPropertyContentHashType a00144.html a8d9258f652692afecb922df19a84ad88 () const Tp::PendingVariant * requestPropertyContentHash a00144.html a3838827a70756189c4157bc9c797d853 () const Tp::PendingVariant * requestPropertyDescription a00144.html a19bfe89ff83b43548b569bf2347366ea () const Tp::PendingVariant * requestPropertyDate a00144.html a16029910669ec3a6f3200564c6f0603c () const Tp::PendingVariant * requestPropertyAvailableSocketTypes a00144.html aeee45cc78b3acc38ab66aaa2051d5ef1 () const Tp::PendingVariant * requestPropertyTransferredBytes a00144.html a62cbc15599c7dc0e93799a9b5a2e3a90 () const Tp::PendingVariant * requestPropertyInitialOffset a00144.html af6971cb9352130521303eb15396121e3 () const Tp::PendingVariant * requestPropertyURI a00144.html aef03522c10ee6cac3836fcfd27977283 () const Tp::PendingOperation * setPropertyURI a00144.html ac6f8df9dbae4fb8d0dc10529c85f6b08 (QString newValue) Tp::PendingVariantMap * requestAllProperties a00144.html acd6eaf8157a573c4e10b26935b38e379 () const static QLatin1String staticInterfaceName a00144.html a5f9129c40781e3468d5f5c8338e02455 () virtual void invalidate a00144.html aad18fde9a91940b4a84d89af2d72e4ac (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ChannelTypeRoomListInterface a00145.html Tp::AbstractInterface QDBusPendingReply< bool > GetListingRooms a00145.html a95cea38c51f34c0b82d4b849ad7c7a9f (int timeout=-1) QDBusPendingReply ListRooms a00145.html ad498e11d474fb2686e3843cb7ae9fe3c (int timeout=-1) QDBusPendingReply StopListing a00145.html ab7ca661f291c91dbb65af8d03399dc40 (int timeout=-1) void GotRooms a00145.html a00f2de288e88901a36e471f62d3fcc32 (const Tp::RoomInfoList &rooms) void ListingRooms a00145.html ae46d854a92b5cd329ffd2dbd02ed2243 (bool listing) ChannelTypeRoomListInterface a00145.html a876c7a1362b8f70214d10c8ca5a55052 (const QString &busName, const QString &objectPath, QObject *parent=0) ChannelTypeRoomListInterface a00145.html a8de5e2faed584a38eb0e21f32247fe02 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ChannelTypeRoomListInterface a00145.html a6cf14ead62c930642fb127122737271b (Tp::DBusProxy *proxy) ChannelTypeRoomListInterface a00145.html a91da5bc67aed8449ce35eab8ae68a513 (const Tp::Client::ChannelInterface &mainInterface) ChannelTypeRoomListInterface a00145.html a10dadadaf9a782075d03b282ce529087 (const Tp::Client::ChannelInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyServer a00145.html af3ed7577ccddd7b626975a1d050bdc2d () const Tp::PendingVariantMap * requestAllProperties a00145.html a19c02f689ab3cba27182cce786a7b672 () const static QLatin1String staticInterfaceName a00145.html a1404ba74e8b8f851599a1162643924f0 () virtual void invalidate a00145.html a003e269bb48fdcace7a472bd80e5f201 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ChannelTypeServerAuthenticationInterface a00146.html Tp::AbstractInterface ChannelTypeServerAuthenticationInterface a00146.html a9bc027f154b098d795c8080c28bda1c1 (const QString &busName, const QString &objectPath, QObject *parent=0) ChannelTypeServerAuthenticationInterface a00146.html a1280f43539ed1953623b2e6ae300d79d (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ChannelTypeServerAuthenticationInterface a00146.html abb698c3b6b27a2ef8e20b9f18edebd7b (Tp::DBusProxy *proxy) ChannelTypeServerAuthenticationInterface a00146.html a73569e4ce995d386d496fdaecb5c5933 (const Tp::Client::ChannelInterface &mainInterface) ChannelTypeServerAuthenticationInterface a00146.html a6462ab1d85ccba33cc71b9b21d53ef63 (const Tp::Client::ChannelInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyAuthenticationMethod a00146.html a227ca9b0f954a8fa04797b822d865607 () const Tp::PendingVariantMap * requestAllProperties a00146.html a24af76bf821b3a72abbaf20df9fbc482 () const static QLatin1String staticInterfaceName a00146.html a29724582a3b17d37efa75d34e98a5c61 () virtual void invalidate a00146.html a3605912956a74721f73a0985a0878854 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ChannelTypeServerTLSConnectionInterface a00147.html Tp::AbstractInterface ChannelTypeServerTLSConnectionInterface a00147.html a73dee1e82312f5e596bdcd601b28e3c3 (const QString &busName, const QString &objectPath, QObject *parent=0) ChannelTypeServerTLSConnectionInterface a00147.html a4101ed78663a5374b338b6db031558af (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ChannelTypeServerTLSConnectionInterface a00147.html a6dfce06413fb3ed6f2629d71a23179a4 (Tp::DBusProxy *proxy) ChannelTypeServerTLSConnectionInterface a00147.html a10efd5c9e8a84240f4728c800478acf7 (const Tp::Client::ChannelInterface &mainInterface) ChannelTypeServerTLSConnectionInterface a00147.html a83744c6a4a3e408b1b12d94d43cceccd (const Tp::Client::ChannelInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyServerCertificate a00147.html a8f9362f4bfe241ef4df03af6f02105ff () const Tp::PendingVariant * requestPropertyHostname a00147.html a4218c95b46a801355bc4d5b0e0a00412 () const Tp::PendingVariant * requestPropertyReferenceIdentities a00147.html a0cdca4f78427409609a4bba32102dead () const Tp::PendingVariantMap * requestAllProperties a00147.html a1d2808d74483476fcb190d61ee6aaa28 () const static QLatin1String staticInterfaceName a00147.html a363de4227c1c4cbe0a296531bf635369 () virtual void invalidate a00147.html a5228b77889d6d16e8c5d84a039d9c96c (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ChannelTypeStreamTubeInterface a00149.html Tp::AbstractInterface QDBusPendingReply Offer a00149.html a7877910bbb85221e3aa4d0449190c492 (uint addresstype, const QDBusVariant &address, uint accesscontrol, const QVariantMap &parameters, int timeout=-1) QDBusPendingReply< QDBusVariant > Accept a00149.html acb3148b12fa8a9681eb653fea91d0839 (uint addresstype, uint accesscontrol, const QDBusVariant &accesscontrolparam, int timeout=-1) void NewRemoteConnection a00149.html a0e854a9f933d1441ce697fdbf70d9868 (uint handle, const QDBusVariant &connectionParam, uint connectionID) void NewLocalConnection a00149.html a477eae0d2c124e6e4f71669a6f1b99d7 (uint connectionID) void ConnectionClosed a00149.html ad16099fb7dc01dcbed2778de4e83b490 (uint connectionID, const QString &error, const QString &message) ChannelTypeStreamTubeInterface a00149.html a0061cb5ba974cc6fddb25e491a17083a (const QString &busName, const QString &objectPath, QObject *parent=0) ChannelTypeStreamTubeInterface a00149.html afb19c20b20a913cff7a4206a3c2a1e7a (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ChannelTypeStreamTubeInterface a00149.html a421156df7a0a30e5c18a557308b79ac3 (Tp::DBusProxy *proxy) ChannelTypeStreamTubeInterface a00149.html a52b202dfe8ff607a2fdac6ea18c1f95f (const Tp::Client::ChannelInterface &mainInterface) ChannelTypeStreamTubeInterface a00149.html a049fb5fabc2d075de62fec7c7333edf1 (const Tp::Client::ChannelInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyService a00149.html ae39d9906253a3e376cd6445a7742090d () const Tp::PendingVariant * requestPropertySupportedSocketTypes a00149.html a25f8a53f375e742844e12e5ca3d7b3c9 () const Tp::PendingVariantMap * requestAllProperties a00149.html a1343c74a06c16cbfba24ff9e7d44b12b () const static QLatin1String staticInterfaceName a00149.html a4cccdead76c7a301fe06b9e8436bffb4 () virtual void invalidate a00149.html a750a1f2830a0d359a8d0bd2ce46e12bb (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ChannelTypeStreamedMediaInterface a00148.html Tp::AbstractInterface QDBusPendingReply< Tp::MediaStreamInfoList > ListStreams a00148.html a7a8eeca318c2136b63ba097c457fa68a (int timeout=-1) QDBusPendingReply RemoveStreams a00148.html a7dbf38ab728bfbbfc33663dac8ba844c (const Tp::UIntList &streams, int timeout=-1) QDBusPendingReply RequestStreamDirection a00148.html ae52bd6692f541d32d385a5b3208ba6f1 (uint streamID, uint streamDirection, int timeout=-1) QDBusPendingReply< Tp::MediaStreamInfoList > RequestStreams a00148.html a96ce1fb969a88a702aa361fa6f9bb863 (uint contactHandle, const Tp::UIntList &types, int timeout=-1) void StreamAdded a00148.html a4888b1748c7b9891a0b4c0bb3084bc55 (uint streamID, uint contactHandle, uint streamType) void StreamDirectionChanged a00148.html a0632b6527268e75d40295eee10647358 (uint streamID, uint streamDirection, uint pendingFlags) void StreamError a00148.html a5b1141dd856c2991277fbc436fdc2eda (uint streamID, uint errorCode, const QString &message) void StreamRemoved a00148.html af016449ea3f901190f7aade9a570aa85 (uint streamID) void StreamStateChanged a00148.html a5d01071b0fada995bc2a99d749a90c70 (uint streamID, uint streamState) ChannelTypeStreamedMediaInterface a00148.html a015a4ff8c4f12da989ff8beb5fcc26dc (const QString &busName, const QString &objectPath, QObject *parent=0) ChannelTypeStreamedMediaInterface a00148.html a9ada38af464c9020bdf4f9fa513ef9d3 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ChannelTypeStreamedMediaInterface a00148.html a9afec910af19a04485e746d06e9babb3 (Tp::DBusProxy *proxy) ChannelTypeStreamedMediaInterface a00148.html a3f8b81e044e1e6fccbd53ae618289e63 (const Tp::Client::ChannelInterface &mainInterface) ChannelTypeStreamedMediaInterface a00148.html a002432238ea8dd5470b33a76c7eace96 (const Tp::Client::ChannelInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyInitialAudio a00148.html aca00f0bc30ae2859905ccecd96681232 () const Tp::PendingVariant * requestPropertyInitialVideo a00148.html a9bb55843906687b8f04b2978cc0928a3 () const Tp::PendingVariant * requestPropertyImmutableStreams a00148.html ae4409dc50ce4e882cd0e5f32c65149d6 () const Tp::PendingVariantMap * requestAllProperties a00148.html a7f2c884868504af6b93e157082c50846 () const static QLatin1String staticInterfaceName a00148.html ad4967b8376f1a25438a77f23d9bc9f3d () virtual void invalidate a00148.html a1dba035682776d470ddc7b38d173f0f9 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ChannelTypeTextInterface a00150.html Tp::AbstractInterface QDBusPendingReply AcknowledgePendingMessages a00150.html a1820e2231a34cdf2c8e5cfcc9a43fa21 (const Tp::UIntList &IDs, int timeout=-1) QDBusPendingReply< Tp::UIntList > GetMessageTypes a00150.html a2747e614a025a292f45085d275d94389 (int timeout=-1) QDBusPendingReply< Tp::PendingTextMessageList > ListPendingMessages a00150.html a0fb3a957973dda8ffc0e40b08f075927 (bool clear, int timeout=-1) QDBusPendingReply Send a00150.html ade1755fc13ce795b85885feb57fc95fd (uint type, const QString &text, int timeout=-1) void LostMessage a00150.html a78f91e1b7a45e1a8ecf9b1d0140830cb () void Received a00150.html a6806c943f87dd4c395ebc6a4179ba47c (uint ID, uint timestamp, uint sender, uint type, uint flags, const QString &text) void SendError a00150.html aca02a476054cd4ce1bf624d15b8b7ab7 (uint error, uint timestamp, uint type, const QString &text) void Sent a00150.html a9321e686cb3530918925b8e8ff4ef2d0 (uint timestamp, uint type, const QString &text) ChannelTypeTextInterface a00150.html a31aa761a43ff68c6061a2848a43aeee4 (const QString &busName, const QString &objectPath, QObject *parent=0) ChannelTypeTextInterface a00150.html aeccffa348cfbb22d3dfcd30614013dd4 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ChannelTypeTextInterface a00150.html abb6dea8074ad447f69be2495dc44139a (Tp::DBusProxy *proxy) ChannelTypeTextInterface a00150.html a77020011d268a8ed946b61e8a95f0709 (const Tp::Client::ChannelInterface &mainInterface) ChannelTypeTextInterface a00150.html aa72b33d9b66365d5412369fc4e4b3dda (const Tp::Client::ChannelInterface &mainInterface, QObject *parent) Tp::PendingVariantMap * requestAllProperties a00150.html acd1fdd895549a7bfc90a4908766a247e () const static QLatin1String staticInterfaceName a00150.html ae2e905c7243ced2cc4edd7d63f3b667e () virtual void invalidate a00150.html a6dd8d58367fe1479c90f1f83eca858bc (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ChannelTypeTubesInterface a00151.html Tp::AbstractInterface QDBusPendingReply< Tp::SupportedSocketMap > GetAvailableStreamTubeTypes a00151.html a343f7d92ab89ae378b50b93497c94dff (int timeout=-1) QDBusPendingReply< Tp::UIntList > GetAvailableTubeTypes a00151.html a26fa7b69effd51e537b951550f01de62 (int timeout=-1) QDBusPendingReply< Tp::TubeInfoList > ListTubes a00151.html ace509ef5db58d877bd3cdc516aa3e27b (int timeout=-1) QDBusPendingReply< uint > OfferDBusTube a00151.html abcb2c8585aa2f4eead2a4f0e788b84c6 (const QString &service, const QVariantMap &parameters, int timeout=-1) QDBusPendingReply< uint > OfferStreamTube a00151.html ae85cc7d27df03535ef2ceb515543c35c (const QString &service, const QVariantMap &parameters, uint addressType, const QDBusVariant &address, uint accessControl, const QDBusVariant &accessControlParam, int timeout=-1) QDBusPendingReply< QString > AcceptDBusTube a00151.html afc825ce29cf82648c924d23d3442a2b9 (uint ID, int timeout=-1) QDBusPendingReply< QDBusVariant > AcceptStreamTube a00151.html a142bb5ed60790b480f65b746d23590c4 (uint ID, uint addressType, uint accessControl, const QDBusVariant &accessControlParam, int timeout=-1) QDBusPendingReply CloseTube a00151.html ae4eec264c0877d163e85181320570641 (uint ID, int timeout=-1) QDBusPendingReply< QString > GetDBusTubeAddress a00151.html a86886c34eff72171302131d52a16b354 (uint ID, int timeout=-1) QDBusPendingReply< Tp::DBusTubeMemberList > GetDBusNames a00151.html af33674c47acb3e3f1c9ebf3896127bfe (uint ID, int timeout=-1) QDBusPendingReply< uint, QDBusVariant > GetStreamTubeSocketAddress a00151.html ae29055ee72a9535b26f2980852540cba (uint ID, int timeout=-1) void NewTube a00151.html a48c7fc07621c0d57f7590388a427c1eb (uint ID, uint initiator, uint type, const QString &service, const QVariantMap &parameters, uint state) void TubeStateChanged a00151.html a94177527d6b7ccc3599479cc7b38eb0e (uint ID, uint state) void TubeClosed a00151.html a60baa373a7ff70b3bc3bb3f4ce8fef03 (uint ID) void DBusNamesChanged a00151.html a0d6854bf9e2aa36001fc64235f1c4a66 (uint ID, const Tp::DBusTubeMemberList &added, const Tp::UIntList &removed) void StreamTubeNewConnection a00151.html af0a65a13343ae108c403efbdc73f382f (uint ID, uint handle) ChannelTypeTubesInterface a00151.html a52b0c417efb62c16e144916c50636b93 (const QString &busName, const QString &objectPath, QObject *parent=0) ChannelTypeTubesInterface a00151.html a1a9b7687b7729ea15036d9ab76c17caf (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ChannelTypeTubesInterface a00151.html a16b819d1d500a7ac71fe12334198a383 (Tp::DBusProxy *proxy) ChannelTypeTubesInterface a00151.html ada9153b036f2ca62ab306c3180bcf2ea (const Tp::Client::ChannelInterface &mainInterface) ChannelTypeTubesInterface a00151.html a8c7ee23ee39be92d0896610bc3e62907 (const Tp::Client::ChannelInterface &mainInterface, QObject *parent) Tp::PendingVariantMap * requestAllProperties a00151.html af88c1235d163d1b79f0b405a199f3e0a () const static QLatin1String staticInterfaceName a00151.html a86162f964468be6ae06cfc5858866510 () virtual void invalidate a00151.html a337c8b4874868ab2cd56242ef1687557 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ClientInterface a00155.html Tp::AbstractInterface ClientInterface a00155.html a1c7d014fb851ce58f66d96e48c5a06fd (const QString &busName, const QString &objectPath, QObject *parent=0) ClientInterface a00155.html a8e8a39b46a759c714521e786e8c16b7c (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ClientInterface a00155.html ae893c2e14859707d653c4bdc51c3ff71 (Tp::DBusProxy *proxy) Tp::PendingVariant * requestPropertyInterfaces a00155.html ab8a91c2c49eb920784f95eea0cf4393b () const Tp::PendingVariantMap * requestAllProperties a00155.html ad488a2374c6c192b37f13feb79e88729 () const static QLatin1String staticInterfaceName a00155.html a5ced59da54cd89900b76245270bc34ae () virtual void invalidate a00155.html af294cc6e85be530e7e01b84b2ff827b4 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ClientApproverInterface a00153.html Tp::AbstractInterface QDBusPendingReply AddDispatchOperation a00153.html a3c8f2cd19bc110b3674ba42933485031 (const Tp::ChannelDetailsList &channels, const QDBusObjectPath &dispatchOperation, const QVariantMap &properties, int timeout=-1) ClientApproverInterface a00153.html ac93bc1ec07e7d89f11e790f382ed4afb (const QString &busName, const QString &objectPath, QObject *parent=0) ClientApproverInterface a00153.html a927b52920af0847c6dfc57e15a344705 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ClientApproverInterface a00153.html a8f6cf1077c191640231b1bca4207e89a (Tp::DBusProxy *proxy) ClientApproverInterface a00153.html a1514313b901e5023c36881f5940b2bcc (const Tp::Client::ClientInterface &mainInterface) ClientApproverInterface a00153.html a5cb50beda40db37e1db6a611f611e25c (const Tp::Client::ClientInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyApproverChannelFilter a00153.html a5669e70f97ba8baecbc0ca881c940445 () const Tp::PendingVariantMap * requestAllProperties a00153.html abe4c13f6c3cd3f2d96e28d047e56fed4 () const static QLatin1String staticInterfaceName a00153.html a76621166ffdb2aa44b609537bddcbe56 () virtual void invalidate a00153.html aa35e0edec1be25c8afec41edffe79850 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ClientHandlerInterface a00154.html Tp::AbstractInterface QDBusPendingReply HandleChannels a00154.html a8a5614e91a82ede4761b6ba3e13724a1 (const QDBusObjectPath &account, const QDBusObjectPath &connection, const Tp::ChannelDetailsList &channels, const Tp::ObjectPathList &requestsSatisfied, qulonglong userActionTime, const QVariantMap &handlerInfo, int timeout=-1) ClientHandlerInterface a00154.html a65c0d05c01eacbc939576e978c536e35 (const QString &busName, const QString &objectPath, QObject *parent=0) ClientHandlerInterface a00154.html a3ddc3654d064c13942ba4ffb1bb53ee8 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ClientHandlerInterface a00154.html a656ec0dc35846ed8de6360c45a7de376 (Tp::DBusProxy *proxy) ClientHandlerInterface a00154.html af8fc0be64052bb9a1a206dcb77d7f0e1 (const Tp::Client::ClientInterface &mainInterface) ClientHandlerInterface a00154.html adcd41c3fdba1b62b007ae9c11049bb35 (const Tp::Client::ClientInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyHandlerChannelFilter a00154.html a03b88e295fd2eda13a74ca563ef3a612 () const Tp::PendingVariant * requestPropertyBypassApproval a00154.html a9f3c6921da0449f0622784667e5b7df1 () const Tp::PendingVariant * requestPropertyCapabilities a00154.html a192b9fbe2cfc112eb4ad642d49be1aff () const Tp::PendingVariant * requestPropertyHandledChannels a00154.html a90849d477c548974f68940c5a552655c () const Tp::PendingVariantMap * requestAllProperties a00154.html ad43f4d74deb16f76650eddd25d78dca7 () const static QLatin1String staticInterfaceName a00154.html a345475f10315ae8f525907d655283874 () virtual void invalidate a00154.html a4e8818b257c63a8c3a0c1d000243376a (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ClientInterfaceRequestsInterface a00156.html Tp::AbstractInterface QDBusPendingReply AddRequest a00156.html a1329b48da918cd64b9426c6c72641b45 (const QDBusObjectPath &request, const QVariantMap &properties, int timeout=-1) QDBusPendingReply RemoveRequest a00156.html acc1968edab827b728dfffd6b4c873037 (const QDBusObjectPath &request, const QString &error, const QString &message, int timeout=-1) ClientInterfaceRequestsInterface a00156.html a079fc6b1d26170a376e65cbc21ce0e54 (const QString &busName, const QString &objectPath, QObject *parent=0) ClientInterfaceRequestsInterface a00156.html a698f3a6da8e6aa3cc92cf477bb3aecc3 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ClientInterfaceRequestsInterface a00156.html aaf31645a0eed2ab48af0aa91a917fe71 (Tp::DBusProxy *proxy) ClientInterfaceRequestsInterface a00156.html a18905d76f77992f0783eb7c04872efdb (const Tp::Client::ClientInterface &mainInterface) ClientInterfaceRequestsInterface a00156.html ad6fb7d74792e19d756cfc035ae4771da (const Tp::Client::ClientInterface &mainInterface, QObject *parent) Tp::PendingVariantMap * requestAllProperties a00156.html a668f1b4a0b8326f9b30b5f5f1f135b8d () const static QLatin1String staticInterfaceName a00156.html a1e896f5676b36a4cffbcc843d6015139 () virtual void invalidate a00156.html aee40ebdd12bdcda81afc4bc63bb1fc77 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ClientObserverInterface a00157.html Tp::AbstractInterface QDBusPendingReply ObserveChannels a00157.html aa39e6aec3617c1390535b892196391ee (const QDBusObjectPath &account, const QDBusObjectPath &connection, const Tp::ChannelDetailsList &channels, const QDBusObjectPath &dispatchOperation, const Tp::ObjectPathList &requestsSatisfied, const QVariantMap &observerInfo, int timeout=-1) ClientObserverInterface a00157.html a1764511b2499f753b122856604ee9dc3 (const QString &busName, const QString &objectPath, QObject *parent=0) ClientObserverInterface a00157.html ae5eef9e6dccaf18d352924acfb26af93 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ClientObserverInterface a00157.html ae68920bd0dd07340d4ca617610491e6d (Tp::DBusProxy *proxy) ClientObserverInterface a00157.html a9e99b32acf94e9a2ac7ab683ab8ab01e (const Tp::Client::ClientInterface &mainInterface) ClientObserverInterface a00157.html ab0cc02daf9f5e05e4ba0bd58ba54927c (const Tp::Client::ClientInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyObserverChannelFilter a00157.html aa419ddfd381d4aac1b0072988db60cff () const Tp::PendingVariant * requestPropertyRecover a00157.html a78fc6c230151bfdee93a0c0ef2ca0eff () const Tp::PendingVariant * requestPropertyDelayApprovers a00157.html abb05b659bc798a9799d33f53432ffa97 () const Tp::PendingVariantMap * requestAllProperties a00157.html ae4b93bee74564d07a0f9639015f12a63 () const static QLatin1String staticInterfaceName a00157.html ad6c750e5f82869b1ed3bbe596eec66d5 () virtual void invalidate a00157.html ad2e400ad845c2ef4857c5f89ec0ce625 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ConnectionManagerInterface a00188.html Tp::AbstractInterface QDBusPendingReply< Tp::ParamSpecList > GetParameters a00188.html a953a47d6b0340748ff4e4b3b989b172b (const QString &protocol, int timeout=-1) QDBusPendingReply< QStringList > ListProtocols a00188.html a9afa8a04b4dd0ca6a774b3fdd769d174 (int timeout=-1) QDBusPendingReply< QString, QDBusObjectPath > RequestConnection a00188.html a990ff973b2c7d3ea7c418503397358d2 (const QString &protocol, const QVariantMap &parameters, int timeout=-1) void NewConnection a00188.html a117b8eed297620abf0132378deb11870 (const QString &busName, const QDBusObjectPath &objectPath, const QString &protocol) ConnectionManagerInterface a00188.html a4307ec6e7f3d2f41c61d6b9a73d10e6b (const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionManagerInterface a00188.html aa5750616d0548197db4f8aeeaa877e7a (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionManagerInterface a00188.html a0a19a88f5bebc6da92abdab35ee89d8c (Tp::DBusProxy *proxy) Tp::PendingVariant * requestPropertyProtocols a00188.html a1bea143a1b7008c16bd76e264623f872 () const Tp::PendingVariant * requestPropertyInterfaces a00188.html a82912274c4979257ddea64dd76373206 () const Tp::PendingVariantMap * requestAllProperties a00188.html a982ac20d66f42a53b5afda6a69c96245 () const static QLatin1String staticInterfaceName a00188.html a11cff1e3bb2025f775fa3583dfc9c863 () virtual void invalidate a00188.html a5446fd7a295386ec2a54d40937ecaafd (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ProtocolInterface a00344.html Tp::AbstractInterface QDBusPendingReply< QString > IdentifyAccount a00344.html a9a2882b28278f9bdc357e70e58eb51ee (const QVariantMap &parameters, int timeout=-1) QDBusPendingReply< QString > NormalizeContact a00344.html adecc0d11f8274c02d60ab822c4206692 (const QString &contactID, int timeout=-1) ProtocolInterface a00344.html a8d42bf04bd149b5fc7ae0241d533dc7d (const QString &busName, const QString &objectPath, QObject *parent=0) ProtocolInterface a00344.html ac2d92dd26fb25776f2a6d33973fcd577 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ProtocolInterface a00344.html ae61d4b554b574cfedd01e62789a2ad0e (Tp::DBusProxy *proxy) ProtocolInterface a00344.html aa201a8b28ce1fc10282b59efe3bdadeb (const Tp::Client::ConnectionManagerInterface &mainInterface) ProtocolInterface a00344.html a6e09f230a1ac3a7e4683776b95f40d83 (const Tp::Client::ConnectionManagerInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyInterfaces a00344.html a639fd9fe6592d022f24d70b09f9b9c8e () const Tp::PendingVariant * requestPropertyParameters a00344.html a6e62991877b6583b76034f0905f99ab8 () const Tp::PendingVariant * requestPropertyConnectionInterfaces a00344.html af1e7bb73f881efc82b1163208dbf7a01 () const Tp::PendingVariant * requestPropertyRequestableChannelClasses a00344.html a7a32935fcd9f42bdf66db01d0e828544 () const Tp::PendingVariant * requestPropertyVCardField a00344.html a1837bdf61d98c6d78ef5fcbfc2fa1527 () const Tp::PendingVariant * requestPropertyEnglishName a00344.html a124e7172dcc8ef1e129f95ca7bbf225c () const Tp::PendingVariant * requestPropertyIcon a00344.html a77e2839a11843c479474b47bfcf2044c () const Tp::PendingVariant * requestPropertyAuthenticationTypes a00344.html ab3cd67fb9a3d970ed39effd9bf06d9ea () const Tp::PendingVariantMap * requestAllProperties a00344.html a98f7dc156c89a506794e223b42c14639 () const static QLatin1String staticInterfaceName a00344.html ab2e6717a599a3aabbfc8b81759717bfa () virtual void invalidate a00344.html a767a5265a6cbce6b647918f375fa709f (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ProtocolInterfaceAddressingInterface a00345.html Tp::AbstractInterface QDBusPendingReply< QString > NormalizeVCardAddress a00345.html a7e5d861026881f3a8166ffff910e06d3 (const QString &VCardField, const QString &VCardAddress, int timeout=-1) QDBusPendingReply< QString > NormalizeContactURI a00345.html a79088c750137c2a24449c963899252cd (const QString &URI, int timeout=-1) ProtocolInterfaceAddressingInterface a00345.html ab3ac0c8c2d05973e108109bdf3b74670 (const QString &busName, const QString &objectPath, QObject *parent=0) ProtocolInterfaceAddressingInterface a00345.html a4ac4219366eba255ae094592dda05c52 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ProtocolInterfaceAddressingInterface a00345.html a4f837214fa74ceace80e2b58d0fad92c (Tp::DBusProxy *proxy) ProtocolInterfaceAddressingInterface a00345.html af032f4afe6c8a48cefa21fca878be828 (const Tp::Client::ConnectionManagerInterface &mainInterface) ProtocolInterfaceAddressingInterface a00345.html a63f5d273c06f04544da005083ca551c8 (const Tp::Client::ConnectionManagerInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyAddressableVCardFields a00345.html a721bca967bc332882ffc976be4a43af6 () const Tp::PendingVariant * requestPropertyAddressableURISchemes a00345.html a3164a117332272810ca7f8cc089a219e () const Tp::PendingVariantMap * requestAllProperties a00345.html a238777bf0c352ab646890749a744acb5 () const static QLatin1String staticInterfaceName a00345.html a238dae2975d564211a604d8abcc53d99 () virtual void invalidate a00345.html a2e2fb91a802acb07243e857da962ac34 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ProtocolInterfaceAvatarsInterface a00346.html Tp::AbstractInterface ProtocolInterfaceAvatarsInterface a00346.html a7cc9bcf3f490ff9c99193546e759ba5a (const QString &busName, const QString &objectPath, QObject *parent=0) ProtocolInterfaceAvatarsInterface a00346.html a3b067300c901370f3d1f0d89e4ee1137 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ProtocolInterfaceAvatarsInterface a00346.html a5b5d36d829c7ea606685bc5061499f14 (Tp::DBusProxy *proxy) ProtocolInterfaceAvatarsInterface a00346.html ae03a483768dd6c011bfe538df64b755f (const Tp::Client::ConnectionManagerInterface &mainInterface) ProtocolInterfaceAvatarsInterface a00346.html a14957c1c2acf7dd09e9d525abc6f2ddd (const Tp::Client::ConnectionManagerInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertySupportedAvatarMIMETypes a00346.html adfb2a42f3bfa971dc7ce8c5118633bbd () const Tp::PendingVariant * requestPropertyMinimumAvatarHeight a00346.html aafca11669a26c467b222031641d06e3e () const Tp::PendingVariant * requestPropertyMinimumAvatarWidth a00346.html a364aa9ec5baddb882e838eb60dfc59e2 () const Tp::PendingVariant * requestPropertyRecommendedAvatarHeight a00346.html a69df4fb1162e0933a70945b2b3f68659 () const Tp::PendingVariant * requestPropertyRecommendedAvatarWidth a00346.html a16c9449f5626c4a119d952ae221b3628 () const Tp::PendingVariant * requestPropertyMaximumAvatarHeight a00346.html a7c0cc351fcde0869b9b1d93a2cce192e () const Tp::PendingVariant * requestPropertyMaximumAvatarWidth a00346.html a4f81600298a104ab6126314f14dd8288 () const Tp::PendingVariant * requestPropertyMaximumAvatarBytes a00346.html a4b74bbad6f78012b3b8973357a8cfdde () const Tp::PendingVariantMap * requestAllProperties a00346.html a0016408fb5327ad44fb676047511965e () const static QLatin1String staticInterfaceName a00346.html a7b00747647e320e13c810c32add4e816 () virtual void invalidate a00346.html ac7fa15abfc0fd3b6e853937c6332b6df (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ProtocolInterfacePresenceInterface a00347.html Tp::AbstractInterface ProtocolInterfacePresenceInterface a00347.html a5f17202710d512b50f531919f5c9eace (const QString &busName, const QString &objectPath, QObject *parent=0) ProtocolInterfacePresenceInterface a00347.html a424d94feb31c8735d077cd8279237e7a (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ProtocolInterfacePresenceInterface a00347.html a22643842022694c5a093aebfc3ef6791 (Tp::DBusProxy *proxy) ProtocolInterfacePresenceInterface a00347.html a4fdba614f146b5af09b007ece08a9833 (const Tp::Client::ConnectionManagerInterface &mainInterface) ProtocolInterfacePresenceInterface a00347.html a834115c052f014fe4191e8217161e79e (const Tp::Client::ConnectionManagerInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyStatuses a00347.html a7d81bcd71a0263f81b0e294f2f2a095e () const Tp::PendingVariantMap * requestAllProperties a00347.html abeca037c97fe79a67514208849403ce0 () const static QLatin1String staticInterfaceName a00347.html a15d7ff8cfe0bfd8663ea1445261cbd6b () virtual void invalidate a00347.html a7e86d344076a015c3a95db851c1320e6 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ConnectionInterface a00164.html Tp::AbstractInterface QDBusPendingReply Connect a00164.html a8ec87139c9a4325c343704ed82dd3f2d (int timeout=-1) QDBusPendingReply Disconnect a00164.html aef7d85a82f1aa3199389a410285baf90 (int timeout=-1) QDBusPendingReply< QStringList > GetInterfaces a00164.html ad8fde8e1a89aba88787d42b9cc2e55be (int timeout=-1) QDBusPendingReply< QString > GetProtocol a00164.html a462020b5ee2c13a52010f0155a325410 (int timeout=-1) QDBusPendingReply< uint > GetSelfHandle a00164.html a584b7c43c4ea3fa60bd540c14abbe432 (int timeout=-1) QDBusPendingReply< uint > GetStatus a00164.html a47330a8f501d1b9634358a8ca6ac3b38 (int timeout=-1) QDBusPendingReply HoldHandles a00164.html a14f4cd0312e8b9c8fcd7ce369a983970 (uint handleType, const Tp::UIntList &handles, int timeout=-1) QDBusPendingReply< QStringList > InspectHandles a00164.html a7327cef43f7cfd1fe915727689d10edd (uint handleType, const Tp::UIntList &handles, int timeout=-1) QDBusPendingReply< Tp::ChannelInfoList > ListChannels a00164.html a09dc48d07a118c5023f7d6b5e633b745 (int timeout=-1) QDBusPendingReply ReleaseHandles a00164.html ad16bd0a3abde0ec1acf33e4a61710737 (uint handleType, const Tp::UIntList &handles, int timeout=-1) QDBusPendingReply< QDBusObjectPath > RequestChannel a00164.html aa47cba559bbbe54b170bec5f3e044801 (const QString &type, uint handleType, uint handle, bool suppressHandler, int timeout=-1) QDBusPendingReply< Tp::UIntList > RequestHandles a00164.html a9358410e2c3e263d29dd071cb1c03ec3 (uint handleType, const QStringList &identifiers, int timeout=-1) QDBusPendingReply AddClientInterest a00164.html a89546da1a6ea2e577a2daf2d2dfd3548 (const QStringList &tokens, int timeout=-1) QDBusPendingReply RemoveClientInterest a00164.html a254dae0090c1b44074475245ffcb1487 (const QStringList &tokens, int timeout=-1) void SelfHandleChanged a00164.html a8fbec1b80a6b878296c888fafab52b1e (uint selfHandle) void NewChannel a00164.html abe677e48098e91a45b7179ccd177a482 (const QDBusObjectPath &objectPath, const QString &channelType, uint handleType, uint handle, bool suppressHandler) void ConnectionError a00164.html a7aec7b63ff000b318ded32d9f6f0945e (const QString &error, const QVariantMap &details) void StatusChanged a00164.html a3e844cffb132c2790c1d5e96f49a853d (uint status, uint reason) ConnectionInterface a00164.html a1e01e2e9779ac8222ba91ac0da23593a (const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterface a00164.html acdb8a53f409f4558d65a180fb2e70c85 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterface a00164.html a822cb38159f23b6940556b387f2fa1fe (Tp::DBusProxy *proxy) Tp::PendingVariant * requestPropertyInterfaces a00164.html ab4e5441ee3c48b300f363a0a4c09a1da () const Tp::PendingVariant * requestPropertySelfHandle a00164.html a2e9535cf988e586fb1b8afc0c86c10ec () const Tp::PendingVariant * requestPropertyStatus a00164.html a5f9c73f030036f326577b5009a57c1db () const Tp::PendingVariant * requestPropertyHasImmortalHandles a00164.html a565a7efa781442d2c68f678402f16040 () const Tp::PendingVariantMap * requestAllProperties a00164.html a9908829a0d021ec42d03bcf2a73de6f1 () const static QLatin1String staticInterfaceName a00164.html a847ea5450f7bca013f16b6f7096a7502 () virtual void invalidate a00164.html a2b085f9aa591b5ffc1298d477735f470 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ConnectionInterfaceAddressingInterface a00165.html Tp::AbstractInterface QDBusPendingReply< Tp::AddressingNormalizationMap, Tp::ContactAttributesMap > GetContactsByVCardField a00165.html a1c77024816322107a5636197f66604fe (const QString &field, const QStringList &addresses, const QStringList &interfaces, int timeout=-1) QDBusPendingReply< Tp::AddressingNormalizationMap, Tp::ContactAttributesMap > GetContactsByURI a00165.html a8fd89d0a7487e0f1d89e2ec7865f2c98 (const QStringList &URIs, const QStringList &interfaces, int timeout=-1) ConnectionInterfaceAddressingInterface a00165.html aa60d9d6d70331895d53584beb96875f1 (const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceAddressingInterface a00165.html ab5e8e53748cba695f6e5a5903ee0c6bc (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceAddressingInterface a00165.html aded89ea91edae9a8f6c344632aa58cae (Tp::DBusProxy *proxy) ConnectionInterfaceAddressingInterface a00165.html ab88cb0180cf5bc69dd0d1db005aa21ff (const Tp::Client::ConnectionInterface &mainInterface) ConnectionInterfaceAddressingInterface a00165.html ac14c83c12480756303d8bf135853b65a (const Tp::Client::ConnectionInterface &mainInterface, QObject *parent) Tp::PendingVariantMap * requestAllProperties a00165.html a236fb80a795d62953b121bcf119c83b1 () const static QLatin1String staticInterfaceName a00165.html ab5dd9b237b1ad44e9aa5f5479d44915a () virtual void invalidate a00165.html af04460eb7d36ee5f3b2625ea4df45709 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ConnectionInterfaceAliasingInterface a00166.html Tp::AbstractInterface QDBusPendingReply< uint > GetAliasFlags a00166.html a501f89d2ecea040095a7c537cdc7fbbc (int timeout=-1) QDBusPendingReply< QStringList > RequestAliases a00166.html a7aff627034e1b5359e29a8acf797d2ac (const Tp::UIntList &contacts, int timeout=-1) QDBusPendingReply< Tp::AliasMap > GetAliases a00166.html a972c44d52b22cfae45ea636430e253db (const Tp::UIntList &contacts, int timeout=-1) QDBusPendingReply SetAliases a00166.html a23e464b0eaae1d3f05647ecdec2c3200 (const Tp::AliasMap &aliases, int timeout=-1) void AliasesChanged a00166.html a2ae8d24521ee642a53980b29910b3249 (const Tp::AliasPairList &aliases) ConnectionInterfaceAliasingInterface a00166.html aad543259e63e21d66bda29b1be5cbe73 (const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceAliasingInterface a00166.html a66b85433266fa990bb14af577e76e4b0 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceAliasingInterface a00166.html a741e07e3e1b86fc744c0a92420cd396d (Tp::DBusProxy *proxy) ConnectionInterfaceAliasingInterface a00166.html abf8d51eb420a76bd6e58a94d4d3b2868 (const Tp::Client::ConnectionInterface &mainInterface) ConnectionInterfaceAliasingInterface a00166.html a8ddaa0d859219c8e445b47b42e002b18 (const Tp::Client::ConnectionInterface &mainInterface, QObject *parent) Tp::PendingVariantMap * requestAllProperties a00166.html aa6f314f94ac5c9a0e67f89dc4794b2e6 () const static QLatin1String staticInterfaceName a00166.html a0540ccae352b0a584cb6e77dd65c3e16 () virtual void invalidate a00166.html a1fe802db5325be43750cc45195118cb4 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ConnectionInterfaceAnonymityInterface a00167.html Tp::AbstractInterface void AnonymityModesChanged a00167.html a7feaa29a9971f3f04b831e6df3f69ffa (uint modes) ConnectionInterfaceAnonymityInterface a00167.html a93f76517d61861131e4812c29e8cbf35 (const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceAnonymityInterface a00167.html ad956cb14d3d0892152c0c8db878d4b43 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceAnonymityInterface a00167.html a9bb037bb47b989d957ecb1fa25207cdc (Tp::DBusProxy *proxy) ConnectionInterfaceAnonymityInterface a00167.html a01f049e4ff41a8d03585eccd01f5bbc4 (const Tp::Client::ConnectionInterface &mainInterface) ConnectionInterfaceAnonymityInterface a00167.html aaa691262bc60176527ed8291881a573b (const Tp::Client::ConnectionInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertySupportedAnonymityModes a00167.html ab2c5a768c6bb3034c76154209847ba54 () const Tp::PendingVariant * requestPropertyAnonymityMandatory a00167.html a86aed866fdf0242e2193992277e28b87 () const Tp::PendingOperation * setPropertyAnonymityMandatory a00167.html ac6c93db6b528696acc58dc8ebc73569b (bool newValue) Tp::PendingVariant * requestPropertyAnonymityModes a00167.html a9434c9fe5ba25e2586e0de4f644181aa () const Tp::PendingOperation * setPropertyAnonymityModes a00167.html a53d65221108e6e03a0643cbc5fa210d2 (uint newValue) Tp::PendingVariantMap * requestAllProperties a00167.html a55eaef286c368cd283b061668f7e1ef8 () const static QLatin1String staticInterfaceName a00167.html a63c6d6134ebf667221c9caa274aa69e4 () virtual void invalidate a00167.html abc2f422c543ed4e8efd9b761b4368c5b (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ConnectionInterfaceAvatarsInterface a00168.html Tp::AbstractInterface QDBusPendingReply< QStringList, ushort, ushort, ushort, ushort, uint > GetAvatarRequirements a00168.html ac209652ace428086ef55ca482687fa91 (int timeout=-1) QDBusPendingReply< QStringList > GetAvatarTokens a00168.html a9f9948a2f58e04042edec6b34454f8e3 (const Tp::UIntList &contacts, int timeout=-1) QDBusPendingReply< Tp::AvatarTokenMap > GetKnownAvatarTokens a00168.html a2272796c9fa2d31801d7f2a85ee0c2a0 (const Tp::UIntList &contacts, int timeout=-1) QDBusPendingReply< QByteArray, QString > RequestAvatar a00168.html a4c8f2ede02ee69d8f86ec21b15382dda (uint contact, int timeout=-1) QDBusPendingReply RequestAvatars a00168.html a9a8d97c85504c7ac9ae6d8b75aedb46b (const Tp::UIntList &contacts, int timeout=-1) QDBusPendingReply< QString > SetAvatar a00168.html af176971d77543e1e957e3bafdfc47e1b (const QByteArray &avatar, const QString &MIMEType, int timeout=-1) QDBusPendingReply ClearAvatar a00168.html a6b8aedc11f9edf726af633d883b31224 (int timeout=-1) void AvatarUpdated a00168.html a8a69f40e0a4123a12f1a8c591d9df1a8 (uint contact, const QString &newAvatarToken) void AvatarRetrieved a00168.html affd91b0f5dec9fd534663cea065bfdc0 (uint contact, const QString &token, const QByteArray &avatar, const QString &type) ConnectionInterfaceAvatarsInterface a00168.html aa13f66d74abe98cee19c238523c5828b (const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceAvatarsInterface a00168.html ad113faa26c54c056ae47f1d31c842421 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceAvatarsInterface a00168.html a1ed509e25b7b8054e55bfd9ace794dfc (Tp::DBusProxy *proxy) ConnectionInterfaceAvatarsInterface a00168.html a551fc522587e7b5830adb5e169b141cc (const Tp::Client::ConnectionInterface &mainInterface) ConnectionInterfaceAvatarsInterface a00168.html a404e5cc9770ea3379a9110b9563032d4 (const Tp::Client::ConnectionInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertySupportedAvatarMIMETypes a00168.html a3b4d7a2709e668e465edfd0bd35c146c () const Tp::PendingVariant * requestPropertyMinimumAvatarHeight a00168.html a229fee758ea578bf25ae6dfc9ec3678b () const Tp::PendingVariant * requestPropertyMinimumAvatarWidth a00168.html ab5ebec9103a60d2edcb51d3955c591bb () const Tp::PendingVariant * requestPropertyRecommendedAvatarHeight a00168.html a2b86c90c7fbaad7b1d3eb3b2538e6a15 () const Tp::PendingVariant * requestPropertyRecommendedAvatarWidth a00168.html adb3d928d9fadae6593b115d0767c9783 () const Tp::PendingVariant * requestPropertyMaximumAvatarHeight a00168.html aaba8f5fb118e392f18d66cb4a270efd1 () const Tp::PendingVariant * requestPropertyMaximumAvatarWidth a00168.html af89aa1a9fb9b38594d82f8b3dc6ad9cb () const Tp::PendingVariant * requestPropertyMaximumAvatarBytes a00168.html a24685c00a32c5529f2e8e2d8c7608e8b () const Tp::PendingVariantMap * requestAllProperties a00168.html af29ea61f00847e9170b2403600e8d817 () const static QLatin1String staticInterfaceName a00168.html a4be2a1021e4d6f90c0ba0b25cf86531a () virtual void invalidate a00168.html a4e5c9e2e807f370f4567274b9786ff8c (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ConnectionInterfaceBalanceInterface a00169.html Tp::AbstractInterface void BalanceChanged a00169.html a9678240d9c854a78a85726395cbe91c4 (const Tp::CurrencyAmount &balance) ConnectionInterfaceBalanceInterface a00169.html a0fea2fd262149535d630156c3385fbc0 (const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceBalanceInterface a00169.html ab7d0fdb4bd44c36d5ee43907e6a328ca (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceBalanceInterface a00169.html a05583a197b42da0afe0b9e292b15aee6 (Tp::DBusProxy *proxy) ConnectionInterfaceBalanceInterface a00169.html a47ee37f9342455837086b0adb8f42cd4 (const Tp::Client::ConnectionInterface &mainInterface) ConnectionInterfaceBalanceInterface a00169.html a909f0133ff0b45947e15879fa03511a2 (const Tp::Client::ConnectionInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyAccountBalance a00169.html a1857446a85b9180abddfeea462f2789b () const Tp::PendingVariant * requestPropertyManageCreditURI a00169.html a12200610731dd5725a18db0526cc4908 () const Tp::PendingVariantMap * requestAllProperties a00169.html acd9d06cd501846d7480277e10b133b2b () const static QLatin1String staticInterfaceName a00169.html aefae2141a8a59de69a13a5eafb8f7c4b () virtual void invalidate a00169.html acbaa7d45cbfc8adb828d9b0aebbf6cae (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ConnectionInterfaceCapabilitiesInterface a00170.html Tp::AbstractInterface QDBusPendingReply< Tp::CapabilityPairList > AdvertiseCapabilities a00170.html afa8e35f69d2c02ece24b8efef07637ac (const Tp::CapabilityPairList &add, const QStringList &remove, int timeout=-1) QDBusPendingReply< Tp::ContactCapabilityList > GetCapabilities a00170.html a4de20d043cdc61eca0c8ab055fb2db9d (const Tp::UIntList &handles, int timeout=-1) void CapabilitiesChanged a00170.html ad4ee760d1539ee1cdadc2f08592ac6a2 (const Tp::CapabilityChangeList &caps) ConnectionInterfaceCapabilitiesInterface a00170.html a714bcdb261e5eebd403cc84632c1ca01 (const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceCapabilitiesInterface a00170.html accce0f9b7b6fe3fa80b89e1f5cde2d6a (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceCapabilitiesInterface a00170.html a5938f6dc0e61d4bd6e85d90546041616 (Tp::DBusProxy *proxy) ConnectionInterfaceCapabilitiesInterface a00170.html a824630f75302d619f276ddf2eee116a8 (const Tp::Client::ConnectionInterface &mainInterface) ConnectionInterfaceCapabilitiesInterface a00170.html ab47b148bbdd7eeed704c7415fbc4b2eb (const Tp::Client::ConnectionInterface &mainInterface, QObject *parent) Tp::PendingVariantMap * requestAllProperties a00170.html a53ded2b4a63247ada57398961b67fae2 () const static QLatin1String staticInterfaceName a00170.html ae018d05e7082f62b9fb21cac11ed9056 () virtual void invalidate a00170.html a6d65fa4d3e07b16dba47c431a6b7d111 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ConnectionInterfaceCellularInterface a00171.html Tp::AbstractInterface void IMSIChanged a00171.html a88c9af7885ef795acdd07ba4c3e9a748 (const QString &IMSI) ConnectionInterfaceCellularInterface a00171.html a89d31c463da71533463aa8f3b32347ab (const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceCellularInterface a00171.html aca5b634e499120e189034932f2ef7e28 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceCellularInterface a00171.html a892c42849a41392ac0e6c5fbc52f3e73 (Tp::DBusProxy *proxy) ConnectionInterfaceCellularInterface a00171.html a90a68712f03049de88aa7ded52446748 (const Tp::Client::ConnectionInterface &mainInterface) ConnectionInterfaceCellularInterface a00171.html afe2066a8106775cffb4786090611984b (const Tp::Client::ConnectionInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyMessageValidityPeriod a00171.html a557d7738b6669b0ac5a2238c546a989c () const Tp::PendingOperation * setPropertyMessageValidityPeriod a00171.html a9b2fa895cec8e3423dfcd4ef72d0d18d (uint newValue) Tp::PendingVariant * requestPropertyOverrideMessageServiceCentre a00171.html aca0c201eb330dd0f3bd281876f18a9cb () const Tp::PendingOperation * setPropertyOverrideMessageServiceCentre a00171.html a765ccdbe8b0761a59259bebed2b11b9e (bool newValue) Tp::PendingVariant * requestPropertyMessageServiceCentre a00171.html ae32cfc03c4f18331b32f5e49335ddae6 () const Tp::PendingOperation * setPropertyMessageServiceCentre a00171.html aeead06401be8de0767f5f8639e8f64cc (QString newValue) Tp::PendingVariant * requestPropertyIMSI a00171.html a684fa39547294b5e1c39f06f7fa2a7e6 () const Tp::PendingVariant * requestPropertyMessageReducedCharacterSet a00171.html a16e219476e26b245746c66b26426e471 () const Tp::PendingOperation * setPropertyMessageReducedCharacterSet a00171.html a81f8acf5bfda3213ba35590506011fb5 (bool newValue) Tp::PendingVariant * requestPropertyMessageNationalCharacterSet a00171.html afda286edcc3aa2c53b79db8c58167816 () const Tp::PendingOperation * setPropertyMessageNationalCharacterSet a00171.html a462feaf19bc887ea102f83351d1a0aab (QString newValue) Tp::PendingVariantMap * requestAllProperties a00171.html aa5381a17a177a055403d412d96436a43 () const static QLatin1String staticInterfaceName a00171.html af36cb60eb454ca7d7c79e141627b2b5e () virtual void invalidate a00171.html a2b7ebb6cf9038c00136aa1d1f2e822e1 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ConnectionInterfaceClientTypesInterface a00172.html Tp::AbstractInterface QDBusPendingReply< Tp::ContactClientTypes > GetClientTypes a00172.html adfee9ef78f3f9f4f569c01e5dd4aef5c (const Tp::UIntList &contacts, int timeout=-1) QDBusPendingReply< QStringList > RequestClientTypes a00172.html af72cd23c79c5f53e4ede75cd8bdb7f2f (uint contact, int timeout=-1) void ClientTypesUpdated a00172.html abb34363bdafe17f4f4dbcef20b7c4eb7 (uint contact, const QStringList &clientTypes) ConnectionInterfaceClientTypesInterface a00172.html ac243f5452b0d159b51e0d15d242ab610 (const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceClientTypesInterface a00172.html a53cf7e054216bae8117e4605f08e1d02 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceClientTypesInterface a00172.html ac8dc73bff5ea332b8ee75a8af96a7464 (Tp::DBusProxy *proxy) ConnectionInterfaceClientTypesInterface a00172.html a20fdc3fecf336b3d8b20156b582b6bfd (const Tp::Client::ConnectionInterface &mainInterface) ConnectionInterfaceClientTypesInterface a00172.html a0b47b8efc0dcc8e55268f684983ebe0d (const Tp::Client::ConnectionInterface &mainInterface, QObject *parent) Tp::PendingVariantMap * requestAllProperties a00172.html af5c537f0eb1d37874cc0d0af917aaef4 () const static QLatin1String staticInterfaceName a00172.html af22964dc6eb45c5166122f84718bf1fc () virtual void invalidate a00172.html ae78ace26fb1a50fbded487fbf9c1a5f5 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ConnectionInterfaceContactBlockingInterface a00173.html Tp::AbstractInterface QDBusPendingReply BlockContacts a00173.html ae0051cd9fa800a4e55858451c538b82c (const Tp::UIntList &contacts, bool reportAbusive, int timeout=-1) QDBusPendingReply UnblockContacts a00173.html aa6d4535c4d50651b709791fe9408f98c (const Tp::UIntList &contacts, int timeout=-1) QDBusPendingReply< Tp::HandleIdentifierMap > RequestBlockedContacts a00173.html aa7c04800e2f50b34db4e856b517918e5 (int timeout=-1) void BlockedContactsChanged a00173.html aa9282209c45118dbd020399a23f0d02a (const Tp::HandleIdentifierMap &blockedContacts, const Tp::HandleIdentifierMap &unblockedContacts) ConnectionInterfaceContactBlockingInterface a00173.html a1bcb1b19e8c45a4b56642195e11f1fde (const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceContactBlockingInterface a00173.html a1976be7d8708b439a36e8fe5820f9843 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceContactBlockingInterface a00173.html accb8e4ddbabc1f75afe559f5833b7733 (Tp::DBusProxy *proxy) ConnectionInterfaceContactBlockingInterface a00173.html aa8b34abca1465601178e331146ad0f82 (const Tp::Client::ConnectionInterface &mainInterface) ConnectionInterfaceContactBlockingInterface a00173.html a2f9ac73d17ef28dface44a5f26e701f6 (const Tp::Client::ConnectionInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyContactBlockingCapabilities a00173.html a2145dc150273c3922fc93340f2c32315 () const Tp::PendingVariantMap * requestAllProperties a00173.html a1a0cec0462113fe0c7d312993f6a937c () const static QLatin1String staticInterfaceName a00173.html a53df3c1bc6cc74b3153393d33512213d () virtual void invalidate a00173.html ab8c049b52fe9f96769a5c9b239cf19b9 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ConnectionInterfaceContactCapabilitiesInterface a00174.html Tp::AbstractInterface QDBusPendingReply UpdateCapabilities a00174.html ad60d35f6a156d335b8864787d1c2455d (const Tp::HandlerCapabilitiesList &handlerCapabilities, int timeout=-1) QDBusPendingReply< Tp::ContactCapabilitiesMap > GetContactCapabilities a00174.html a544b1ab8b5fc97318f181b5f408a4d68 (const Tp::UIntList &handles, int timeout=-1) void ContactCapabilitiesChanged a00174.html af5f0b45de01638c60cec25d90b093b0e (const Tp::ContactCapabilitiesMap &caps) ConnectionInterfaceContactCapabilitiesInterface a00174.html aae9610e633129bb85c8c793523282bdc (const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceContactCapabilitiesInterface a00174.html abe263ec05338badf8663642d76df35c3 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceContactCapabilitiesInterface a00174.html a5a26307419e42690f0eac5eac0752579 (Tp::DBusProxy *proxy) ConnectionInterfaceContactCapabilitiesInterface a00174.html a3ce3e1abb935c808ef374be03fbaedce (const Tp::Client::ConnectionInterface &mainInterface) ConnectionInterfaceContactCapabilitiesInterface a00174.html a06fd3d98c414ce4ecaf20e2ef2b2e625 (const Tp::Client::ConnectionInterface &mainInterface, QObject *parent) Tp::PendingVariantMap * requestAllProperties a00174.html a6627b2232989257782a3aa60e5da9597 () const static QLatin1String staticInterfaceName a00174.html af58216e81295b07579acbb02885a9477 () virtual void invalidate a00174.html af8c69e2d9f417e6d87dd46de927d3d18 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ConnectionInterfaceContactGroupsInterface a00175.html Tp::AbstractInterface QDBusPendingReply SetContactGroups a00175.html a661684a4c1f46920ad079b2c8fbb2f39 (uint contact, const QStringList &groups, int timeout=-1) QDBusPendingReply SetGroupMembers a00175.html a40e5a2d30162c7de0d91efc5a737dfd3 (const QString &group, const Tp::UIntList &members, int timeout=-1) QDBusPendingReply AddToGroup a00175.html a312a437818840f27584827249251db40 (const QString &group, const Tp::UIntList &members, int timeout=-1) QDBusPendingReply RemoveFromGroup a00175.html a4bba3f12920f34999893eda04fa41899 (const QString &group, const Tp::UIntList &members, int timeout=-1) QDBusPendingReply RemoveGroup a00175.html a0df294ab4200151da3a5fa9add9b4e4f (const QString &group, int timeout=-1) QDBusPendingReply RenameGroup a00175.html acf3e3561a4a7b4091da6b2dc6a024b0c (const QString &oldName, const QString &newName, int timeout=-1) void GroupsChanged a00175.html a6f49d7198f08294e32386a6d4fc852f5 (const Tp::UIntList &contact, const QStringList &added, const QStringList &removed) void GroupsCreated a00175.html a74705f328c47b18ff49861268cb65d13 (const QStringList &names) void GroupRenamed a00175.html a1e527edc51e5f45b9d8ab01977418328 (const QString &oldName, const QString &newName) void GroupsRemoved a00175.html a1769d5929eb00e18232d03d3a04735dc (const QStringList &names) ConnectionInterfaceContactGroupsInterface a00175.html a42731c13015df417ee5883839d0bec71 (const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceContactGroupsInterface a00175.html ac577462760a6bdcd87d83e04b8fc93ac (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceContactGroupsInterface a00175.html a7aae6d6ee94842b90a60a36563fe3ceb (Tp::DBusProxy *proxy) ConnectionInterfaceContactGroupsInterface a00175.html a7ec20d2b5d96038c9002bb69806e45f5 (const Tp::Client::ConnectionInterface &mainInterface) ConnectionInterfaceContactGroupsInterface a00175.html a809d5cdf311c9191d8a73c60fcfc2101 (const Tp::Client::ConnectionInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyDisjointGroups a00175.html adf4401f0359aee93173aaf06ddd3c693 () const Tp::PendingVariant * requestPropertyGroupStorage a00175.html ae6bc0cdfe3a49425416a1891afd69a02 () const Tp::PendingVariant * requestPropertyGroups a00175.html a7f6e343212870fa634e37817d5537da7 () const Tp::PendingVariantMap * requestAllProperties a00175.html a02fc663e73c78ff472a93b4f71038034 () const static QLatin1String staticInterfaceName a00175.html a700a96e2aa9c5dfaed3b596bd5bad025 () virtual void invalidate a00175.html a821becd032850e809f3d54a25c4f9bbc (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ConnectionInterfaceContactInfoInterface a00176.html Tp::AbstractInterface QDBusPendingReply< Tp::ContactInfoMap > GetContactInfo a00176.html a36c3a022e951259ec3b4ed80e7480a33 (const Tp::UIntList &contacts, int timeout=-1) QDBusPendingReply RefreshContactInfo a00176.html ae9f2f896086c04da2519fcceb2d077e6 (const Tp::UIntList &contacts, int timeout=-1) QDBusPendingReply< Tp::ContactInfoFieldList > RequestContactInfo a00176.html a0ef865f0ed9137a6087524fb5e6c4a8a (uint contact, int timeout=-1) QDBusPendingReply SetContactInfo a00176.html aff9dc6c63b0673a2f1d5e42fbf3ef8da (const Tp::ContactInfoFieldList &contactInfo, int timeout=-1) void ContactInfoChanged a00176.html a53685c0bb8e50e62e1e6903cd9117fe2 (uint contact, const Tp::ContactInfoFieldList &contactInfo) ConnectionInterfaceContactInfoInterface a00176.html a858818a079b8056b8ef1120db2a12323 (const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceContactInfoInterface a00176.html ae22dab06554e4cd9369ade030f18fbbc (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceContactInfoInterface a00176.html a1e663279de59b76d51ae8642b4c8804b (Tp::DBusProxy *proxy) ConnectionInterfaceContactInfoInterface a00176.html a4c3664981a062f323dffaa92d89514c4 (const Tp::Client::ConnectionInterface &mainInterface) ConnectionInterfaceContactInfoInterface a00176.html ab988eea21cd116dc2c1234a89c764387 (const Tp::Client::ConnectionInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyContactInfoFlags a00176.html a17472ae90b4fdcafa5954632cdb214a4 () const Tp::PendingVariant * requestPropertySupportedFields a00176.html a942adb12ac99fe7a722fa07f56f3ccdf () const Tp::PendingVariantMap * requestAllProperties a00176.html a0d20a68700f5a55f5e4493f9af9f306a () const static QLatin1String staticInterfaceName a00176.html a014f076039461628f8a4aee678ddac13 () virtual void invalidate a00176.html ad7f88ffca44ce977bdd3fd0c0d0917d2 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ConnectionInterfaceContactListInterface a00177.html Tp::AbstractInterface QDBusPendingReply< Tp::ContactAttributesMap > GetContactListAttributes a00177.html a6e699cca4cc6a1dbaa22209e9a4e8037 (const QStringList &interfaces, bool hold, int timeout=-1) QDBusPendingReply RequestSubscription a00177.html adeae1e380bc1f9bc3342057d571f0b93 (const Tp::UIntList &contacts, const QString &message, int timeout=-1) QDBusPendingReply AuthorizePublication a00177.html a1632effbf59f0e746d32efe66cabae9a (const Tp::UIntList &contacts, int timeout=-1) QDBusPendingReply RemoveContacts a00177.html a61a7630763ca10bd1bff8fa62e7dd7bb (const Tp::UIntList &contacts, int timeout=-1) QDBusPendingReply Unsubscribe a00177.html ab2b423b9376ec1c155ccf84e33356b45 (const Tp::UIntList &contacts, int timeout=-1) QDBusPendingReply Unpublish a00177.html a6dfda782fbf203ff4f8d45d4a6206b39 (const Tp::UIntList &contacts, int timeout=-1) QDBusPendingReply Download a00177.html ad6f51368f4d87a17baae74d2a0334519 (int timeout=-1) void ContactListStateChanged a00177.html ae3c1d17246c3ac4ecd47c381c03fec6a (uint contactListState) void ContactsChangedWithID a00177.html ae968799e729aff2d0c5d77946b62a54d (const Tp::ContactSubscriptionMap &changes, const Tp::HandleIdentifierMap &identifiers, const Tp::HandleIdentifierMap &removals) void ContactsChanged a00177.html ab4f99743d64306ef318f39a9bdc59d20 (const Tp::ContactSubscriptionMap &changes, const Tp::UIntList &removals) ConnectionInterfaceContactListInterface a00177.html a05e2e822142be17118de349ff38da013 (const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceContactListInterface a00177.html a8d596a79288ae28e604e8aaf3714cbe8 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceContactListInterface a00177.html a1d4df82fd1f68d396a7a3c85266ee9b2 (Tp::DBusProxy *proxy) ConnectionInterfaceContactListInterface a00177.html a86d745f71277bfcf655887afd9a7a100 (const Tp::Client::ConnectionInterface &mainInterface) ConnectionInterfaceContactListInterface a00177.html a45236d75788776727da3db43a20227d8 (const Tp::Client::ConnectionInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyContactListState a00177.html a14b164c68a4855c311ff338c4981e8ae () const Tp::PendingVariant * requestPropertyContactListPersists a00177.html aeec2a0e273dd855f6da054ccde63a56d () const Tp::PendingVariant * requestPropertyCanChangeContactList a00177.html a4bd8a495bb8c1cb9cd947c85df53c173 () const Tp::PendingVariant * requestPropertyRequestUsesMessage a00177.html aa005471e8039d196cce840344e4c22b5 () const Tp::PendingVariant * requestPropertyDownloadAtConnection a00177.html a6133c9d773edbec143a5946c81ec2f2c () const Tp::PendingVariantMap * requestAllProperties a00177.html a5c475329e6983af0f8a078a8bdbb5c0e () const static QLatin1String staticInterfaceName a00177.html a6da850950e8f95621deade9d32433220 () virtual void invalidate a00177.html abef53119d032bec10e74f408e7a2f1e8 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ConnectionInterfaceContactsInterface a00178.html Tp::AbstractInterface QDBusPendingReply< Tp::ContactAttributesMap > GetContactAttributes a00178.html a43164831038004bb1446384a72a203d6 (const Tp::UIntList &handles, const QStringList &interfaces, bool hold, int timeout=-1) ConnectionInterfaceContactsInterface a00178.html a5334da2e8093c760f6f15c2ad2aa5208 (const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceContactsInterface a00178.html adedb85733443479e27473ab256b43818 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceContactsInterface a00178.html aa64fcedfe5125d458394aee656744735 (Tp::DBusProxy *proxy) ConnectionInterfaceContactsInterface a00178.html a65e1b66f4f02816fd70a8b3fb7337875 (const Tp::Client::ConnectionInterface &mainInterface) ConnectionInterfaceContactsInterface a00178.html a2fcaeab467c1dad4ee2ab40244fd5d00 (const Tp::Client::ConnectionInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyContactAttributeInterfaces a00178.html a550882a35e022c74d1ffabae1d530491 () const Tp::PendingVariantMap * requestAllProperties a00178.html ac5d950250b57960e5bb4676c140eb0fd () const static QLatin1String staticInterfaceName a00178.html ad8496c61ac4ba933775ab354f39f2527 () virtual void invalidate a00178.html af05daee1d238e757510fb54a2cc9a433 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ConnectionInterfaceLocationInterface a00179.html Tp::AbstractInterface QDBusPendingReply< Tp::ContactLocations > GetLocations a00179.html a68df6fc70906e05d4b58b176f413854b (const Tp::UIntList &contacts, int timeout=-1) QDBusPendingReply< QVariantMap > RequestLocation a00179.html a3ac061ef9ad9f9cb50035d7fa9621c37 (uint contact, int timeout=-1) QDBusPendingReply SetLocation a00179.html a5571f72a3d63ebebd386152361bc85c7 (const QVariantMap &location, int timeout=-1) void LocationUpdated a00179.html a8736c3a2b6ebf2810c334400d18cd8fe (uint contact, const QVariantMap &location) ConnectionInterfaceLocationInterface a00179.html a17183c2f8334c7c2d00f432914be1e92 (const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceLocationInterface a00179.html af9096959d21e9c306378bcd2bf42199a (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceLocationInterface a00179.html a3525a707d16037cee7b31cde102a8c10 (Tp::DBusProxy *proxy) ConnectionInterfaceLocationInterface a00179.html a4aa2152a597fb766a7e300d8dec089b9 (const Tp::Client::ConnectionInterface &mainInterface) ConnectionInterfaceLocationInterface a00179.html a44d865536f79da0084843d6fc4a0b92d (const Tp::Client::ConnectionInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyLocationAccessControlTypes a00179.html a960c688f212710c3088aa7e46418e2df () const Tp::PendingVariant * requestPropertyLocationAccessControl a00179.html a62c31ded187999d76b1086097cb7cd61 () const Tp::PendingOperation * setPropertyLocationAccessControl a00179.html a1e263dbd54efe6c0cde6c951a7f79ef3 (Tp::RichPresenceAccessControl newValue) Tp::PendingVariant * requestPropertySupportedLocationFeatures a00179.html ab1572d82b30c5d099b48b320eb2acede () const Tp::PendingVariantMap * requestAllProperties a00179.html aaedbe81febb51486cd5f7f7dd53228e2 () const static QLatin1String staticInterfaceName a00179.html a1f755183a9c8b50577aa66e332e177a5 () virtual void invalidate a00179.html a587bfa053cefcd3eccc7b1c3416cab12 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ConnectionInterfaceMailNotificationInterface a00180.html Tp::AbstractInterface QDBusPendingReply< Tp::MailURL > RequestInboxURL a00180.html a333c897d9c91cba88178ecc3bb27d341 (int timeout=-1) QDBusPendingReply< Tp::MailURL > RequestMailURL a00180.html a05e2ae66fb837f4914884016fb5bb4bc (const QString &ID, const QDBusVariant &URLData, int timeout=-1) void MailsReceived a00180.html a59c5a94dee389bce17a42732f31308dd (const Tp::MailList &mails) void UnreadMailsChanged a00180.html abbcf0be05caec8db3a8879a1602167e9 (uint count, const Tp::MailList &mailsAdded, const QStringList &mailsRemoved) ConnectionInterfaceMailNotificationInterface a00180.html ad9b23eaa83a9a3428317e2e2dfc3f319 (const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceMailNotificationInterface a00180.html a6f9d7b3b972ac98c511f8df57ee4e90c (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceMailNotificationInterface a00180.html a175c50bb4ca30c811b35d22690276bb0 (Tp::DBusProxy *proxy) ConnectionInterfaceMailNotificationInterface a00180.html a829aa16104a5ec270abc19bdb037dbc9 (const Tp::Client::ConnectionInterface &mainInterface) ConnectionInterfaceMailNotificationInterface a00180.html a3e3523ae9f559235738974a68cb1abf8 (const Tp::Client::ConnectionInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyMailNotificationFlags a00180.html a33cbd435129563eae23f28745b2e17c9 () const Tp::PendingVariant * requestPropertyUnreadMailCount a00180.html a6645e265af4559d949cb087fe252b563 () const Tp::PendingVariant * requestPropertyUnreadMails a00180.html a27aca2fc415a9245802656d01c150d2b () const Tp::PendingVariant * requestPropertyMailAddress a00180.html ae3025cca19100dd269141a4173f8bacf () const Tp::PendingVariantMap * requestAllProperties a00180.html ae42b08e8c2f6299698dbbd6063d1a028 () const static QLatin1String staticInterfaceName a00180.html a5ff5822cf57191e9f77edf2652e5aea6 () virtual void invalidate a00180.html a94f112c22a33a6f560b1c6e54e734c98 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ConnectionInterfacePowerSavingInterface a00181.html Tp::AbstractInterface QDBusPendingReply SetPowerSaving a00181.html aba066b06b69b3322b43a0173ea25ea02 (bool activate, int timeout=-1) void PowerSavingChanged a00181.html a87b5e39cffdcc4ec1fb826e891d047d9 (bool active) ConnectionInterfacePowerSavingInterface a00181.html a4cefe0b959073066239d530f97019129 (const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfacePowerSavingInterface a00181.html ae7906113a514d977a454d3d332d3bfc9 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfacePowerSavingInterface a00181.html a3c64a18d64530dfb01b92889e6889051 (Tp::DBusProxy *proxy) ConnectionInterfacePowerSavingInterface a00181.html aea38e632c0c9d18cc5103a20e9416662 (const Tp::Client::ConnectionInterface &mainInterface) ConnectionInterfacePowerSavingInterface a00181.html ac4223aa696aff8c8f53c77a7bcffd370 (const Tp::Client::ConnectionInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyPowerSavingActive a00181.html a712f7768e7b052dc9f802eb82d3739be () const Tp::PendingVariantMap * requestAllProperties a00181.html a3c742bbf0f9b4990a2240ba68624c7f8 () const static QLatin1String staticInterfaceName a00181.html accb9c4775e22a038350ef724b271ba79 () virtual void invalidate a00181.html a7d1c84fa4b5db3647fa3f689f246c85d (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ConnectionInterfacePresenceInterface a00182.html Tp::AbstractInterface QDBusPendingReply AddStatus a00182.html a76fe6e017ddd99da31385e938fb6fe5f (const QString &status, const QVariantMap &parameters, int timeout=-1) QDBusPendingReply ClearStatus a00182.html a723ec46a58338dea168b4e97346dc97f (int timeout=-1) QDBusPendingReply< Tp::ContactPresences > GetPresence a00182.html a35c769e34a29bd70be2295b060d9adf2 (const Tp::UIntList &contacts, int timeout=-1) QDBusPendingReply< Tp::StatusSpecMap > GetStatuses a00182.html a018adf15f18776a96c000f0f1a075851 (int timeout=-1) QDBusPendingReply RemoveStatus a00182.html a28e3b65cac66b6e4c00831fd95c658d5 (const QString &status, int timeout=-1) QDBusPendingReply RequestPresence a00182.html a45dcbce1eb47800ce480e9806e470ab0 (const Tp::UIntList &contacts, int timeout=-1) QDBusPendingReply SetLastActivityTime a00182.html ad310549eadbce01519da2e11317479eb (uint time, int timeout=-1) QDBusPendingReply SetStatus a00182.html ada9151b8ccbc8123a8192a9d76ad4c46 (const Tp::MultipleStatusMap &statuses, int timeout=-1) void PresenceUpdate a00182.html ab9f3acab2ffc168c54f60c2339ccdd39 (const Tp::ContactPresences &presence) ConnectionInterfacePresenceInterface a00182.html ac38ac3328a9fd7900c6aec8fc5011c4d (const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfacePresenceInterface a00182.html a6d204c3d7357e73d722ced9b85b96d36 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfacePresenceInterface a00182.html ab89bd255de7e88e241814a217bfd4fc2 (Tp::DBusProxy *proxy) ConnectionInterfacePresenceInterface a00182.html a829cd3efb37171e9b1fc2927b6f513e3 (const Tp::Client::ConnectionInterface &mainInterface) ConnectionInterfacePresenceInterface a00182.html a96605696b633e6e48a6bb3f30d224cb4 (const Tp::Client::ConnectionInterface &mainInterface, QObject *parent) Tp::PendingVariantMap * requestAllProperties a00182.html a7fbf0b22bdfb546649dc240e00e8ccc4 () const static QLatin1String staticInterfaceName a00182.html ab5fe238a270f5f25135e6d4570d682a8 () virtual void invalidate a00182.html a1e1919160fd6599717ed6006714516a7 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ConnectionInterfaceRequestsInterface a00183.html Tp::AbstractInterface QDBusPendingReply< QDBusObjectPath, QVariantMap > CreateChannel a00183.html a1c7158c9b48d622551be4ae53f555497 (const QVariantMap &request, int timeout=-1) QDBusPendingReply< bool, QDBusObjectPath, QVariantMap > EnsureChannel a00183.html a3ec57bb2c8404981e4c7ffce83c7f62f (const QVariantMap &request, int timeout=-1) void NewChannels a00183.html aa9fda39dba52244626a87535073b85bd (const Tp::ChannelDetailsList &channels) void ChannelClosed a00183.html a60c133364acb5fe6fc4ec476aceaa390 (const QDBusObjectPath &removed) ConnectionInterfaceRequestsInterface a00183.html a18b4b6b81b42d196f8c17adf6d0d3f8f (const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceRequestsInterface a00183.html ab5c9ca703b764048270a3edc3e18fd54 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceRequestsInterface a00183.html a0176e0e91ff8a943e7ea31354a83650f (Tp::DBusProxy *proxy) ConnectionInterfaceRequestsInterface a00183.html a5982b6b04863c694bee4eeeab3bfd133 (const Tp::Client::ConnectionInterface &mainInterface) ConnectionInterfaceRequestsInterface a00183.html a16e98317700317d69c12d87a55db3123 (const Tp::Client::ConnectionInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyChannels a00183.html a26f0035084927da90dbbfa307bd1d709 () const Tp::PendingVariant * requestPropertyRequestableChannelClasses a00183.html a00ada64383785ded487e93cea7f72e44 () const Tp::PendingVariantMap * requestAllProperties a00183.html ae309194c1456d23f1457791308e4ae51 () const static QLatin1String staticInterfaceName a00183.html a6e7a4212115fd5044ec9d5b567714815 () virtual void invalidate a00183.html a128cb7c36b03dcf696848a9706dd15b9 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ConnectionInterfaceServicePointInterface a00184.html Tp::AbstractInterface void ServicePointsChanged a00184.html a9656242d774513124acafbe3b7f96e25 (const Tp::ServicePointInfoList &servicePoints) ConnectionInterfaceServicePointInterface a00184.html aa23b82c27507a86de530f384adc545e1 (const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceServicePointInterface a00184.html a5fd775577c9bfc10ae49365b047aedf7 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceServicePointInterface a00184.html ae328508880e3740aeeddf74e4bd7c169 (Tp::DBusProxy *proxy) ConnectionInterfaceServicePointInterface a00184.html a826306f29e572bebe538afd9ff96b0a8 (const Tp::Client::ConnectionInterface &mainInterface) ConnectionInterfaceServicePointInterface a00184.html a59aa84a66389ecee41ca3015031b6030 (const Tp::Client::ConnectionInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyKnownServicePoints a00184.html a9e12a38a30383d79b8510603d2d706db () const Tp::PendingVariantMap * requestAllProperties a00184.html a6e73acb7b1c549076fb7aaa49494dd21 () const static QLatin1String staticInterfaceName a00184.html ac8a1be985e3a6a12590d1f00bfc6e548 () virtual void invalidate a00184.html a14b11f7cb8796fb3374e6a3ae001a8ff (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::ConnectionInterfaceSimplePresenceInterface a00185.html Tp::AbstractInterface QDBusPendingReply SetPresence a00185.html ab94bf6f10a2a8ca07b33d159a5ffbe83 (const QString &status, const QString &statusMessage, int timeout=-1) QDBusPendingReply< Tp::SimpleContactPresences > GetPresences a00185.html a471db128011bce253a0c18abeb7bbbef (const Tp::UIntList &contacts, int timeout=-1) void PresencesChanged a00185.html adf045e33db1a908dceed3f279e2d8365 (const Tp::SimpleContactPresences &presence) ConnectionInterfaceSimplePresenceInterface a00185.html afbf65807ff351072a6c42e9b6474371c (const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceSimplePresenceInterface a00185.html a260f1c27ccf82671c7fdc2e2b4ddf02f (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) ConnectionInterfaceSimplePresenceInterface a00185.html a1de7f68435f6c01f978c73fde36fa8e3 (Tp::DBusProxy *proxy) ConnectionInterfaceSimplePresenceInterface a00185.html abc1b658dcf1ef326e9fa5c0e52bbaf00 (const Tp::Client::ConnectionInterface &mainInterface) ConnectionInterfaceSimplePresenceInterface a00185.html a79396b6a34b59a4f774944d0a09c9660 (const Tp::Client::ConnectionInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyStatuses a00185.html a650155a84c65f55bef60fa0cedc7445b () const Tp::PendingVariant * requestPropertyMaximumStatusMessageLength a00185.html a86935dcdda31e2afe0fa3a2dcd850a3a () const Tp::PendingVariantMap * requestAllProperties a00185.html aed15c8da757fe8e2a70b809fb40a8b91 () const static QLatin1String staticInterfaceName a00185.html adf79fa88e94f9d20fa6c24fdeb6672d1 () virtual void invalidate a00185.html aa67e9fc93932aacb050c7d6b489cc49b (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::DebugInterface a00222.html Tp::AbstractInterface QDBusPendingReply< Tp::DebugMessageList > GetMessages a00222.html aac9b08e373bc0cc94bfa1b74224508ad (int timeout=-1) void NewDebugMessage a00222.html ac2b81507b4d1ce431b4860f139124559 (double time, const QString &domain, uint level, const QString &message) DebugInterface a00222.html a117efc98b88f41ef97ea49fbeac0fd25 (const QString &busName, const QString &objectPath, QObject *parent=0) DebugInterface a00222.html a6400212979f1096cc47df4ef3ff9786c (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) DebugInterface a00222.html a2831ff3879af99c7f9200b169ce35d7e (Tp::DBusProxy *proxy) Tp::PendingVariant * requestPropertyEnabled a00222.html a68b2127b44ccd4ff4bd1bfaeb6df2ff0 () const Tp::PendingOperation * setPropertyEnabled a00222.html ae7f840ad766891194a944bf0906fdcbd (bool newValue) Tp::PendingVariantMap * requestAllProperties a00222.html a9dff2d6ee9f8133822df43e9ba9193a7 () const static QLatin1String staticInterfaceName a00222.html a80cc0178e605cc6142012a8b9b68dec2 () virtual void invalidate a00222.html a4948b31b45b4a915d8fb4653dac5c440 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::MediaSessionHandlerInterface a00267.html Tp::AbstractInterface QDBusPendingReply Error a00267.html a3f0046e0cad1347b062ed9d3bfae1910 (uint errorCode, const QString &message, int timeout=-1) QDBusPendingReply Ready a00267.html ac40036eb1b5cf7e4018ca4313b05008a (int timeout=-1) void NewStreamHandler a00267.html acff954aa161bcbb3f6e2fc4957caf544 (const QDBusObjectPath &streamHandler, uint ID, uint mediaType, uint direction) MediaSessionHandlerInterface a00267.html a60f68bde864ef4e89a757bb557f67070 (const QString &busName, const QString &objectPath, QObject *parent=0) MediaSessionHandlerInterface a00267.html adc109e17e10678956fb9a191b77a2d3a (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) MediaSessionHandlerInterface a00267.html a4dceca7e849b67134571326ea4efce17 (Tp::DBusProxy *proxy) Tp::PendingVariantMap * requestAllProperties a00267.html aef7773e459405417a30040220e89fb7b () const static QLatin1String staticInterfaceName a00267.html a51c95d8ce66ee1244fbd6d09259d3ccb () virtual void invalidate a00267.html ac910fce6905a0712acdae9c59bf84487 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::MediaStreamHandlerInterface a00270.html Tp::AbstractInterface QDBusPendingReply CodecChoice a00270.html ab1eb1ea8dfd8c473dc5c8295d91af09b (uint codecID, int timeout=-1) QDBusPendingReply Error a00270.html a6ffe269363575ba32d9209076ba283fa (uint errorCode, const QString &message, int timeout=-1) QDBusPendingReply NativeCandidatesPrepared a00270.html a7533e24fe29154e6c040c5e78d203ceb (int timeout=-1) QDBusPendingReply NewActiveCandidatePair a00270.html a378d58676a97b4f88207da7de60bd5e3 (const QString &nativeCandidateID, const QString &remoteCandidateID, int timeout=-1) QDBusPendingReply NewActiveTransportPair a00270.html a2157b2c11b48b4ef90041d6b5bc986fd (const QString &nativeCandidateID, const Tp::MediaStreamHandlerTransport &nativeTransport, const QString &remoteCandidateID, const Tp::MediaStreamHandlerTransport &remoteTransport, int timeout=-1) QDBusPendingReply NewNativeCandidate a00270.html a70dccf4f4e31226adc7c50b8e8cbd9d3 (const QString &candidateID, const Tp::MediaStreamHandlerTransportList &transports, int timeout=-1) QDBusPendingReply Ready a00270.html a7c35a805de431b425ff41cd7ae3e69b8 (const Tp::MediaStreamHandlerCodecList &codecs, int timeout=-1) QDBusPendingReply SetLocalCodecs a00270.html a62ab8f562006416a2727628df6b840b1 (const Tp::MediaStreamHandlerCodecList &codecs, int timeout=-1) QDBusPendingReply StreamState a00270.html aff2a3cb3d9ff321980d8f230442107dc (uint state, int timeout=-1) QDBusPendingReply SupportedCodecs a00270.html aca2771ece7eb32035846050fb9cb3881 (const Tp::MediaStreamHandlerCodecList &codecs, int timeout=-1) QDBusPendingReply CodecsUpdated a00270.html ac67fd8f6fa5389a04092474458cc7278 (const Tp::MediaStreamHandlerCodecList &codecs, int timeout=-1) QDBusPendingReply HoldState a00270.html acaa1e0a04ef78dbac081291a59ab1e25 (bool held, int timeout=-1) QDBusPendingReply UnholdFailure a00270.html a17b91781196eb8686f41ec1ff8988de7 (int timeout=-1) QDBusPendingReply SupportedFeedbackMessages a00270.html a352e74e4d182f23e5a9e0bc192ef3474 (const Tp::RTCPFeedbackMessageMap &messages, int timeout=-1) QDBusPendingReply SupportedHeaderExtensions a00270.html a0930ccb9c067824d5ee8fa28e0e157e9 (const Tp::RTPHeaderExtensionsList &headerExtensions, int timeout=-1) void AddRemoteCandidate a00270.html a71da3591b07d2e37ebcc199ef2727d68 (const QString &candidateID, const Tp::MediaStreamHandlerTransportList &transports) void Close a00270.html a6c44a70c44fd004fd4b43aae6b8a1b40 () void RemoveRemoteCandidate a00270.html a69193bef66e727de09eacb7862f92190 (const QString &candidateID) void SetActiveCandidatePair a00270.html a81ecf3c9698847a4914a3fb1f1b1c8d8 (const QString &nativeCandidateID, const QString &remoteCandidateID) void SetRemoteCandidateList a00270.html a53b464dcf845795381e1890051ab6327 (const Tp::MediaStreamHandlerCandidateList &remoteCandidates) void SetRemoteCodecs a00270.html a4516248ace8a973431c62eda79db804e (const Tp::MediaStreamHandlerCodecList &codecs) void SetStreamPlaying a00270.html a22fccd4c562256e7afaab7525fe93980 (bool playing) void SetStreamSending a00270.html ac773bc4c94d1006fdc9a1b9ad95e1cff (bool sending) void StartTelephonyEvent a00270.html a7f097ede51dc766cb7479e9c9876efa5 (uchar event) void StartNamedTelephonyEvent a00270.html a2a484bb332305b45e023d60a61aa60b7 (uchar event, uint codecID) void StartSoundTelephonyEvent a00270.html ab1c3114691efd4e260e1a55becf3ce7e (uchar event) void StopTelephonyEvent a00270.html ad3f9985f9cb50463571070ac048c3a0e () void SetStreamHeld a00270.html a0fc9b6f34770c4e7e19ad2085168a81d (bool held) void SetRemoteFeedbackMessages a00270.html a3d81e3cc0e0b7583057e225df094df39 (const Tp::RTCPFeedbackMessageMap &messages) void SetRemoteHeaderExtensions a00270.html a32280b602d749c88bf4f38b84bbca65c (const Tp::RTPHeaderExtensionsList &headerExtensions) MediaStreamHandlerInterface a00270.html a46dd707795a460004b097011a1bfe706 (const QString &busName, const QString &objectPath, QObject *parent=0) MediaStreamHandlerInterface a00270.html a97315efe57079b115f77bd182a6bca18 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) MediaStreamHandlerInterface a00270.html ae03a9bf5ca863e354dce096a5823b561 (Tp::DBusProxy *proxy) Tp::PendingVariant * requestPropertySTUNServers a00270.html a2b072d7a310666b4fceaa135e678c08c () const Tp::PendingVariant * requestPropertyCreatedLocally a00270.html a06b69631c6a0acef4a525857d285bfaf () const Tp::PendingVariant * requestPropertyNATTraversal a00270.html a008303f379a16c11d51ceb2856d456ac () const Tp::PendingVariant * requestPropertyRelayInfo a00270.html af58da5e3b6ef1be48b852d5e61bcc37c () const Tp::PendingVariantMap * requestAllProperties a00270.html abcd670ce4fc78f5baad5a1b538b125cc () const static QLatin1String staticInterfaceName a00270.html a4e7a0e544ba39af67de1d6ab1b4c3210 () virtual void invalidate a00270.html a4f311f1bfc38ab71b364aeae56f2f46c (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::PropertiesInterfaceInterface a00339.html Tp::AbstractInterface QDBusPendingReply< Tp::PropertyValueList > GetProperties a00339.html a1927cdac3d907145f7a9882cdbb650e8 (const Tp::UIntList &properties, int timeout=-1) QDBusPendingReply< Tp::PropertySpecList > ListProperties a00339.html a7836d5040a1042c645d1f96cd84f765d (int timeout=-1) QDBusPendingReply SetProperties a00339.html ae3a46e0395b74f5ea99b43e485907c53 (const Tp::PropertyValueList &properties, int timeout=-1) void PropertiesChanged a00339.html a70d85eda1acf37d41f4e8e3f6d584516 (const Tp::PropertyValueList &properties) void PropertyFlagsChanged a00339.html a90ffb4d172b3e3d06b5c9b6c6cd92d82 (const Tp::PropertyFlagsChangeList &properties) PropertiesInterfaceInterface a00339.html a445c31e3a6a9f90699c443283fec1b1d (const QString &busName, const QString &objectPath, QObject *parent=0) PropertiesInterfaceInterface a00339.html a420cddeca2b1747564118363c6b81197 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) PropertiesInterfaceInterface a00339.html a524fa4127e57ea2253972ba73bb5cdf9 (Tp::DBusProxy *proxy) PropertiesInterfaceInterface a00339.html a30456c2cdf6a231ba206c29fd12eb4ac (const Tp::AbstractInterface &mainInterface) PropertiesInterfaceInterface a00339.html a54e9e6ab502403f96eae819773409c53 (const Tp::AbstractInterface &mainInterface, QObject *parent) Tp::PendingVariantMap * requestAllProperties a00339.html ab808fd4e2512b5e4e0f69c2bf883c058 () const static QLatin1String staticInterfaceName a00339.html a64d117634afe773532adf37904c012b1 () virtual void invalidate a00339.html a82ebdd7d943d1f9de8245148f7cadd90 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::AuthenticationTLSCertificateInterface a00055.html Tp::AbstractInterface QDBusPendingReply Accept a00055.html ad8d84c54a4928a85610af32e2cfe1eb6 (int timeout=-1) QDBusPendingReply Reject a00055.html a47c2ce5d23a40e8f67ae21e6ed10f18b (const Tp::TLSCertificateRejectionList &rejections, int timeout=-1) void Accepted a00055.html aae701f94fef1b62efa5444fde85e50dd () void Rejected a00055.html a5022b77f848b753345912006c33df94b (const Tp::TLSCertificateRejectionList &rejections) AuthenticationTLSCertificateInterface a00055.html a8de5e54aad53b84989ddd6c646a8ce50 (const QString &busName, const QString &objectPath, QObject *parent=0) AuthenticationTLSCertificateInterface a00055.html a4d73a765cf518b4b938e26bf7140c0d2 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) AuthenticationTLSCertificateInterface a00055.html aef138ea6d1a1b8389335207c79bf986e (Tp::DBusProxy *proxy) AuthenticationTLSCertificateInterface a00055.html a8416d29eca6fc8aadba3b047002dccb3 (const Tp::AbstractInterface &mainInterface) AuthenticationTLSCertificateInterface a00055.html ac8799a798e61cc27eff4886c3b367772 (const Tp::AbstractInterface &mainInterface, QObject *parent) Tp::PendingVariant * requestPropertyState a00055.html abc4cd3cad66a106398dda827b074eb5d () const Tp::PendingVariant * requestPropertyRejections a00055.html a46ab8ba7a65afa02bf2145674cea65af () const Tp::PendingVariant * requestPropertyCertificateType a00055.html a4d9653cd0ce74d99a0a14233fdf06ac6 () const Tp::PendingVariant * requestPropertyCertificateChainData a00055.html a2d088f89edb634030c6807b14842d22b () const Tp::PendingVariantMap * requestAllProperties a00055.html a21297bcfdcabc19633222a88bd759732 () const static QLatin1String staticInterfaceName a00055.html afc2979d50a8821cec8149a1f66e3a7ee () virtual void invalidate a00055.html ac14dcbe81d26913244336c26839fe231 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::DBus a00729.html Tp::Client::DBus::DBusDaemonInterface Tp::Client::DBus::IntrospectableInterface Tp::Client::DBus::PeerInterface Tp::Client::DBus::PropertiesInterface Tp::Client::DBus::DBusDaemonInterface a00213.html Tp::AbstractInterface QDBusPendingReply< QString > Hello a00213.html abf91f6b4c2d9a203a7b7b116b1ed67b9 (int timeout=-1) QDBusPendingReply< uint > RequestName a00213.html a1c2f62810300323b9a65e99244c89629 (const QString &name, uint flags, int timeout=-1) QDBusPendingReply< uint > ReleaseName a00213.html ae2f28e59d906fbe9262c410747c04ae9 (const QString &name, int timeout=-1) QDBusPendingReply< uint > StartServiceByName a00213.html a5faac2da91621ae9264b3677fd733474 (const QString &service, uint flags, int timeout=-1) QDBusPendingReply< bool > NameHasOwner a00213.html ac1a4054f2de6e844f7eb09e043d87a6a (const QString &nameToCheck, int timeout=-1) QDBusPendingReply< QStringList > ListNames a00213.html a86e111a1fd7e83cf95e0297f3c18d4d0 (int timeout=-1) QDBusPendingReply< QStringList > ListActivatableNames a00213.html a89b0efab846eaa484c56f5e06a486d22 (int timeout=-1) QDBusPendingReply AddMatch a00213.html a0cb4dbace19b2cf6998462c5ba2c4b38 (const QString &rule, int timeout=-1) QDBusPendingReply RemoveMatch a00213.html a5a1dff1acb49646fe3f5fcbd9211e246 (const QString &rule, int timeout=-1) QDBusPendingReply< QString > GetNameOwner a00213.html ae1076ee8927cbeb98374968126441a68 (const QString &name, int timeout=-1) QDBusPendingReply< QStringList > ListQueuedOwners a00213.html a15cb00d9ade842cb57e7cfe71e0596bb (const QString &name, int timeout=-1) QDBusPendingReply< uint > GetConnectionUnixUser a00213.html a3352cbe9f6fc88d2a06b495716d3f531 (const QString &connectionName, int timeout=-1) QDBusPendingReply< uint > GetConnectionUnixProcessID a00213.html af1b1c3a17cec8c7ec5ea2dd11dd5ead4 (const QString &connectionName, int timeout=-1) QDBusPendingReply< QByteArray > GetConnectionSELinuxSecurityContext a00213.html a2dab4a9797ec950694db157d21cb2cb0 (const QString &connectionName, int timeout=-1) QDBusPendingReply ReloadConfig a00213.html ae41100be2b8a6d960aecc50e8fd87210 (int timeout=-1) QDBusPendingReply< QString > GetId a00213.html a76ec33447e0ed498d347c804ec599c82 (int timeout=-1) void NameOwnerChanged a00213.html a69de8ead31c4cd85f344439cc55888c8 (const QString &name, const QString &oldOwner, const QString &newOwner) void NameLost a00213.html ab39be66da3dde8b798b8a3904368fa7b (const QString &name) void NameAcquired a00213.html ad833cb71cdb66e9b017515a1e48cf63c (const QString &name) DBusDaemonInterface a00213.html ada3fb22d5797701d89a178b1fb9f29d3 (const QString &busName, const QString &objectPath, QObject *parent=0) DBusDaemonInterface a00213.html a1fa41111a13feab6f7953ddd1dd66d02 (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) DBusDaemonInterface a00213.html a6bfc57c16db707969b6d0b04f72ca471 (Tp::DBusProxy *proxy) DBusDaemonInterface a00213.html a5de4b7e83bbbc323966b2b7e918ccf0a (const Tp::AbstractInterface &mainInterface) DBusDaemonInterface a00213.html af6d142b513d6f8578a399b6ea9f2d9aa (const Tp::AbstractInterface &mainInterface, QObject *parent) Tp::PendingVariantMap * requestAllProperties a00213.html abc61a62b5717a277422f330ff91a6155 () const static QLatin1String staticInterfaceName a00213.html a5c01517705abf992475dcc6665114352 () virtual void invalidate a00213.html a705a6bf39fe30cbb3646f73a41262eba (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::DBus::IntrospectableInterface a00256.html Tp::AbstractInterface QDBusPendingReply< QString > Introspect a00256.html ab45c42e8f439dbcb48e50a3d6ffac6cf (int timeout=-1) IntrospectableInterface a00256.html a2917257eca5fc414366ff5c9ec3fad2f (const QString &busName, const QString &objectPath, QObject *parent=0) IntrospectableInterface a00256.html a75f948e820d730e984d6f6f09c97eb9a (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) IntrospectableInterface a00256.html a22ce17260c5645251421a152a8088107 (Tp::DBusProxy *proxy) IntrospectableInterface a00256.html af3622953cbba3701e3fbf375adc4b138 (const Tp::AbstractInterface &mainInterface) IntrospectableInterface a00256.html a6435e1fdb55052cf123edb2abdfa50b2 (const Tp::AbstractInterface &mainInterface, QObject *parent) Tp::PendingVariantMap * requestAllProperties a00256.html a32908974769042980a106e60db28a214 () const static QLatin1String staticInterfaceName a00256.html a4b8fc3cfa04205ec0d11346c64b6820c () virtual void invalidate a00256.html a2149fb31f2b659c7afe91c7c30cb5984 (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::DBus::PeerInterface a00304.html Tp::AbstractInterface QDBusPendingReply Ping a00304.html a0411ad7a2039a28ec2b1f717a4c9aff2 (int timeout=-1) QDBusPendingReply< QString > GetMachineId a00304.html a1ab3831a3b26e408aa29e56e23f84f02 (int timeout=-1) PeerInterface a00304.html acf2f8d325c99ab420ec807c0deecb560 (const QString &busName, const QString &objectPath, QObject *parent=0) PeerInterface a00304.html a25290a5fa5f34efe37be7cc2f258b9de (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) PeerInterface a00304.html a5dc567af22bc50df16f85214fe7121a3 (Tp::DBusProxy *proxy) PeerInterface a00304.html a3cffc55edc3f0726bf6f82b3b38b4ecd (const Tp::AbstractInterface &mainInterface) PeerInterface a00304.html ac8bb2e67ed18570cad4b6f73a00db62f (const Tp::AbstractInterface &mainInterface, QObject *parent) Tp::PendingVariantMap * requestAllProperties a00304.html ae31306b9d3cbab8f098604871af654ab () const static QLatin1String staticInterfaceName a00304.html a45c07d7364a1cee2a8bf880c8286f668 () virtual void invalidate a00304.html a4f99988b2b35281fb34e69fc97efbabe (Tp::DBusProxy *, const QString &, const QString &) Tp::Client::DBus::PropertiesInterface a00338.html Tp::AbstractInterface QDBusPendingReply< QDBusVariant > Get a00338.html a28ffd86c80d0647c2ec112f9216900a5 (const QString &interfaceName, const QString &propertyName, int timeout=-1) QDBusPendingReply Set a00338.html aa837b58666a042a6ad2b4e80702f3a41 (const QString &interfaceName, const QString &propertyName, const QDBusVariant &value, int timeout=-1) QDBusPendingReply< QVariantMap > GetAll a00338.html a524e8e38990b1466cda291dff455aac4 (const QString &interfaceName, int timeout=-1) PropertiesInterface a00338.html a3b047ca34890ab9dca5f45da471d8256 (const QString &busName, const QString &objectPath, QObject *parent=0) PropertiesInterface a00338.html af55d78f1c851f0beabaf6e77416a765f (const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0) PropertiesInterface a00338.html a9507e86c9d36c8b8eb4d0d66045900c5 (Tp::DBusProxy *proxy) PropertiesInterface a00338.html a82062c51e2f76c79032ac80ea5b6df24 (const Tp::AbstractInterface &mainInterface) PropertiesInterface a00338.html a11524dcd1520bbd5bc3308a82fb152c2 (const Tp::AbstractInterface &mainInterface, QObject *parent) Tp::PendingVariantMap * requestAllProperties a00338.html ad9ffd4414206a5afe4a8a195725ea634 () const static QLatin1String staticInterfaceName a00338.html aec562b76639a74b3a4318f0eba14b6dc () virtual void invalidate a00338.html a2cb6c27ca000bb82ce0d82f012a16e93 (Tp::DBusProxy *, const QString &, const QString &) Tp::Farstream a00730.html Tp::Farstream::PendingChannel PendingChannel * createChannel a00730.html ac1e305224f48f834db3fd36122a004c3 (const CallChannelPtr &channel) Tp::Farstream::PendingChannel a00309.html Tp::PendingOperation ~PendingChannel a00309.html a7cbe24d5e907d6cd8c8086cb650d9873 () TfChannel * tfChannel a00309.html ae703b4e636fd73bfac644c3440e60f93 () const CallChannelPtr callChannel a00309.html a38312e22da9f7d0b8da1f1ae17419a4c () const friend PendingChannel * createChannel a00309.html af9591e53749061c076b8e48ddef0141e (const CallChannelPtr &channel) Tp::KeyFile a00731.html Tp::ManagerFile a00732.html index Telepathy-Qt index developer_resources Introduction getting_started examples telepathy-qt-0.9.3/doc/html/a01074.html0000644000175200001440000002413212000060453021623 0ustar00collabora-develusers00000000000000 Member List
   Home · All Classes · All Namespaces · Modules · Functions · Files
Tp::Client::CallContentInterfaceVideoControlInterface Member List
This is the complete list of members for Tp::Client::CallContentInterfaceVideoControlInterface, including all inherited members.
AbstractInterface(DBusProxy *proxy, const QLatin1String &interface)Tp::AbstractInterface [protected]
AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent)Tp::AbstractInterface [protected]
BitrateChanged(uint newBitrate)Tp::Client::CallContentInterfaceVideoControlInterface [signal]
CallContentInterfaceVideoControlInterface(const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::CallContentInterfaceVideoControlInterface
CallContentInterfaceVideoControlInterface(const QDBusConnection &connection, const QString &busName, const QString &objectPath, QObject *parent=0)Tp::Client::CallContentInterfaceVideoControlInterface
CallContentInterfaceVideoControlInterface(Tp::DBusProxy *proxy)Tp::Client::CallContentInterfaceVideoControlInterface
CallContentInterfaceVideoControlInterface(const Tp::Client::CallContentInterface &mainInterface)Tp::Client::CallContentInterfaceVideoControlInterface [explicit]
CallContentInterfaceVideoControlInterface(const Tp::Client::CallContentInterface &mainInterface, QObject *parent)Tp::Client::CallContentInterfaceVideoControlInterface
FramerateChanged(uint newFramerate)Tp::Client::CallContentInterfaceVideoControlInterface [signal]
internalRequestAllProperties() const Tp::AbstractInterface [protected]
internalRequestProperty(const QString &name) const Tp::AbstractInterface [protected]
internalSetProperty(const QString &name, const QVariant &newValue)Tp::AbstractInterface [protected]
invalidate(Tp::DBusProxy *, const QString &, const QString &)Tp::Client::CallContentInterfaceVideoControlInterface [protected, virtual]
invalidationMessage() const Tp::AbstractInterface
invalidationReason() const Tp::AbstractInterface
isMonitoringProperties() const Tp::AbstractInterface
isValid() const Tp::AbstractInterface
KeyFrameRequested()Tp::Client::CallContentInterfaceVideoControlInterface [signal]
MTUChanged(uint newMTU)Tp::Client::CallContentInterfaceVideoControlInterface [signal]
propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties)Tp::AbstractInterface [signal]
requestAllProperties() const Tp::Client::CallContentInterfaceVideoControlInterface [inline]
requestPropertyBitrate() const Tp::Client::CallContentInterfaceVideoControlInterface [inline]
requestPropertyFramerate() const Tp::Client::CallContentInterfaceVideoControlInterface [inline]
requestPropertyManualKeyFrames() const Tp::Client::CallContentInterfaceVideoControlInterface [inline]
requestPropertyMTU() const Tp::Client::CallContentInterfaceVideoControlInterface [inline]
requestPropertyVideoResolution() const Tp::Client::CallContentInterfaceVideoControlInterface [inline]
setMonitorProperties(bool monitorProperties)Tp::AbstractInterface
staticInterfaceName()Tp::Client::CallContentInterfaceVideoControlInterface [inline, static]
VideoResolutionChanged(const Tp::VideoResolution &newResolution)Tp::Client::CallContentInterfaceVideoControlInterface [signal]
~AbstractInterface()Tp::AbstractInterface [virtual]


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/modules.html0000644000175200001440000000716112000060453022462 0ustar00collabora-develusers00000000000000 Modules
   Home · All Classes · All Namespaces · Modules · Functions · Files
Modules


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/functions_prop.html0000644000175200001440000001350612000060453024062 0ustar00collabora-develusers00000000000000 Class Members - Properties
   Home · All Classes · All Namespaces · Modules · Functions · Files
 

- a -

- c -

- d -

- e -

- f -

- h -

- i -

- n -

- o -

- p -

- r -

- s -

- u -

- v -


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/doc/html/a00656_source.html0000644000175200001440000001761512000060453023220 0ustar00collabora-develusers00000000000000 pending-stream-tube-connection.h Source File
   Home · All Classes · All Namespaces · Modules · Functions · Files
pending-stream-tube-connection.h
00001 
00022 #ifndef _TelepathyQt_pending_stream_tube_connection_h_HEADER_GUARD_
00023 #define _TelepathyQt_pending_stream_tube_connection_h_HEADER_GUARD_
00024 
00025 #ifndef IN_TP_QT_HEADER
00026 #error IN_TP_QT_HEADER
00027 #endif
00028 
00029 #include <TelepathyQt/Constants>
00030 #include <TelepathyQt/PendingOperation>
00031 #include <TelepathyQt/Types>
00032 
00033 #include <QPair>
00034 
00035 class QHostAddress;
00036 
00037 namespace Tp
00038 {
00039 
00040 class PendingVariant;
00041 class IncomingStreamTubeChannel;
00042 
00043 class TP_QT_EXPORT PendingStreamTubeConnection : public PendingOperation
00044 {
00045     Q_OBJECT
00046     Q_DISABLE_COPY(PendingStreamTubeConnection)
00047 
00048 public:
00049     virtual ~PendingStreamTubeConnection();
00050 
00051     SocketAddressType addressType() const;
00052 
00053     QPair<QHostAddress, quint16> ipAddress() const;
00054     QString localAddress() const;
00055 
00056     bool requiresCredentials() const;
00057     uchar credentialByte() const;
00058 
00059 private Q_SLOTS:
00060     TP_QT_NO_EXPORT void onChannelInvalidated(Tp::DBusProxy *proxy,
00061             const QString &errorName, const QString &errorMessage);
00062     TP_QT_NO_EXPORT void onAcceptFinished(Tp::PendingOperation *op);
00063     TP_QT_NO_EXPORT void onTubeStateChanged(Tp::TubeChannelState state);
00064 
00065 private:
00066     TP_QT_NO_EXPORT PendingStreamTubeConnection(PendingVariant *acceptOperation,
00067             SocketAddressType type, bool requiresCredentials, uchar credentialByte,
00068             const IncomingStreamTubeChannelPtr &channel);
00069     TP_QT_NO_EXPORT PendingStreamTubeConnection(
00070             const QString &errorName, const QString &errorMessage,
00071             const IncomingStreamTubeChannelPtr &channel);
00072 
00073     struct Private;
00074     friend class IncomingStreamTubeChannel;
00075     friend struct Private;
00076     Private *mPriv;
00077 };
00078 
00079 }
00080 
00081 #endif // TP_PENDING_STREAM_TUBE_CONNECTION_H


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.3
telepathy-qt-0.9.3/TelepathyQt/0000755000175200001440000000000012000056607020660 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/TelepathyQt/dbus.cpp0000644000175200001440000000204212000056607022317 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008 Collabora Ltd. * @copyright Copyright (C) 2008 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/cli-dbus-body.hpp" #include "TelepathyQt/_gen/cli-dbus.moc.hpp" telepathy-qt-0.9.3/TelepathyQt/ConnectionInterfaceCellularInterface0000644000175200001440000000044012000056607030026 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ConnectionInterfaceCellularInterface_HEADER_GUARD_ #define _TelepathyQt_ConnectionInterfaceCellularInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/ConnectionInterfaceContactsInterface0000644000175200001440000000044012000056607030041 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ConnectionInterfaceContactsInterface_HEADER_GUARD_ #define _TelepathyQt_ConnectionInterfaceContactsInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/simple-text-observer-internal.h0000644000175200001440000000442312000056607026746 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT SimpleTextObserver::Private { Private(SimpleTextObserver *parent, const AccountPtr &account, const QString &contactIdentifier, bool requiresNormalization); ~Private(); class TextChannelWrapper; SimpleTextObserver *parent; AccountPtr account; QString contactIdentifier; SimpleObserverPtr observer; QHash channels; }; class TP_QT_NO_EXPORT SimpleTextObserver::Private::TextChannelWrapper : public QObject { Q_OBJECT Q_DISABLE_COPY(TextChannelWrapper) public: TextChannelWrapper(const Tp::TextChannelPtr &channel); ~TextChannelWrapper() { } Q_SIGNALS: void channelMessageSent(const Tp::Message &message, Tp::MessageSendingFlags flags, const QString &sentMessageToken, const Tp::TextChannelPtr &channel); void channelMessageReceived(const Tp::ReceivedMessage &message, const Tp::TextChannelPtr &channel); private Q_SLOTS: void onChannelMessageSent(const Tp::Message &message, Tp::MessageSendingFlags flags, const QString &sentMessageToken); void onChannelMessageReceived(const Tp::ReceivedMessage &message); private: TextChannelPtr mChannel; }; } // Tp telepathy-qt-0.9.3/TelepathyQt/ChannelInterfaceConferenceInterface0000644000175200001440000000043312000056607027605 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelInterfaceConferenceInterface_HEADER_GUARD_ #define _TelepathyQt_ChannelInterfaceConferenceInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/connection-capabilities.h0000644000175200001440000000434212000056607025622 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009-2010 Collabora Ltd. * @copyright Copyright (C) 2009-2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_connection_capabilities_h_HEADER_GUARD_ #define _TelepathyQt_connection_capabilities_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include namespace Tp { class TestBackdoors; class TP_QT_EXPORT ConnectionCapabilities : public CapabilitiesBase { public: ConnectionCapabilities(); virtual ~ConnectionCapabilities(); bool textChatrooms() const; TP_QT_DEPRECATED bool conferenceStreamedMediaCalls() const; TP_QT_DEPRECATED bool conferenceStreamedMediaCallsWithInvitees() const; bool conferenceTextChats() const; bool conferenceTextChatsWithInvitees() const; bool conferenceTextChatrooms() const; bool conferenceTextChatroomsWithInvitees() const; bool contactSearches() const; bool contactSearchesWithSpecificServer() const; bool contactSearchesWithLimit() const; bool dbusTubes() const; bool streamTubes() const; protected: friend class Account; friend class Connection; friend class ProtocolInfo; friend class TestBackdoors; ConnectionCapabilities(const RequestableChannelClassList &rccs); ConnectionCapabilities(const RequestableChannelClassSpecList &rccSpecs); }; } // Tp Q_DECLARE_METATYPE(Tp::ConnectionCapabilities); #endif telepathy-qt-0.9.3/TelepathyQt/account-set.cpp0000644000175200001440000002745012000056607023621 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/account-set-internal.h" #include "TelepathyQt/_gen/account-set.moc.hpp" #include "TelepathyQt/_gen/account-set-internal.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include #include namespace Tp { AccountSet::Private::Private(AccountSet *parent, const AccountManagerPtr &accountManager, const AccountFilterConstPtr &filter) : parent(parent), accountManager(accountManager), filter(filter), ready(false) { init(); } AccountSet::Private::Private(AccountSet *parent, const AccountManagerPtr &accountManager, const QVariantMap &filterMap) : parent(parent), accountManager(accountManager), ready(false) { AccountPropertyFilterPtr propertyFilter = AccountPropertyFilter::create(); for (QVariantMap::const_iterator i = filterMap.constBegin(); i != filterMap.constEnd(); ++i) { propertyFilter->addProperty(i.key(), i.value()); } filter = AccountFilterPtr::dynamicCast(propertyFilter); init(); } void AccountSet::Private::init() { if (filter->isValid()) { connectSignals(); insertAccounts(); ready = true; } } void AccountSet::Private::connectSignals() { parent->connect(accountManager.data(), SIGNAL(newAccount(Tp::AccountPtr)), SLOT(onNewAccount(Tp::AccountPtr))); } void AccountSet::Private::insertAccounts() { foreach (const Tp::AccountPtr &account, accountManager->allAccounts()) { insertAccount(account); } } void AccountSet::Private::insertAccount(const Tp::AccountPtr &account) { QString accountPath = account->objectPath(); Q_ASSERT(!wrappers.contains(accountPath)); wrapAccount(account); filterAccount(account); } void AccountSet::Private::removeAccount(const Tp::AccountPtr &account) { QString accountPath = account->objectPath(); Q_ASSERT(wrappers.contains(accountPath)); accounts.remove(accountPath); AccountWrapper *wrapper = wrappers.take(accountPath); Q_ASSERT(wrapper->disconnect(parent)); wrapper->deleteLater(); emit parent->accountRemoved(account); } void AccountSet::Private::wrapAccount(const AccountPtr &account) { AccountWrapper *wrapper = new AccountWrapper(account, parent); parent->connect(wrapper, SIGNAL(accountRemoved(Tp::AccountPtr)), SLOT(onAccountRemoved(Tp::AccountPtr))); parent->connect(wrapper, SIGNAL(accountPropertyChanged(Tp::AccountPtr,QString)), SLOT(onAccountChanged(Tp::AccountPtr))); parent->connect(wrapper, SIGNAL(accountCapabilitiesChanged(Tp::AccountPtr,Tp::ConnectionCapabilities)), SLOT(onAccountChanged(Tp::AccountPtr))); wrappers.insert(account->objectPath(), wrapper); } void AccountSet::Private::filterAccount(const AccountPtr &account) { QString accountPath = account->objectPath(); Q_ASSERT(wrappers.contains(accountPath)); AccountWrapper *wrapper = wrappers[accountPath]; /* account changed, let's check if it matches filter */ if (accountMatchFilter(wrapper)) { if (!accounts.contains(account->objectPath())) { accounts.insert(account->objectPath(), account); if (ready) { emit parent->accountAdded(account); } } } else { if (accounts.contains(account->objectPath())) { accounts.remove(account->objectPath()); if (ready) { emit parent->accountRemoved(account); } } } } bool AccountSet::Private::accountMatchFilter(AccountWrapper *wrapper) { if (!filter) { return true; } return filter->matches(wrapper->account()); } AccountSet::Private::AccountWrapper::AccountWrapper( const AccountPtr &account, QObject *parent) : QObject(parent), mAccount(account) { connect(account.data(), SIGNAL(removed()), SLOT(onAccountRemoved())); connect(account.data(), SIGNAL(propertyChanged(QString)), SLOT(onAccountPropertyChanged(QString))); connect(account.data(), SIGNAL(capabilitiesChanged(Tp::ConnectionCapabilities)), SLOT(onAccountCapalitiesChanged(Tp::ConnectionCapabilities))); } AccountSet::Private::AccountWrapper::~AccountWrapper() { } void AccountSet::Private::AccountWrapper::onAccountRemoved() { emit accountRemoved(mAccount); } void AccountSet::Private::AccountWrapper::onAccountPropertyChanged( const QString &propertyName) { emit accountPropertyChanged(mAccount, propertyName); } void AccountSet::Private::AccountWrapper::onAccountCapalitiesChanged( const ConnectionCapabilities &caps) { emit accountCapabilitiesChanged(mAccount, caps); } /** * \class AccountSet * \ingroup clientaccount * \headerfile TelepathyQt/account-set.h * * \brief The AccountSet class represents a set of Telepathy accounts * filtered by a given criteria. * * AccountSet is automatically updated whenever accounts that match the given * criteria are added, removed or updated. * * \section account_set_usage_sec Usage * * \subsection account_set_create_sec Creating an AccountSet object * * The easiest way to create AccountSet objects is through AccountManager. One * can just use the AccountManager convenience methods such as * AccountManager::validAccounts() to get a set of account objects * representing valid accounts. * * For example: * * \code * * class MyClass : public QObject * { * QOBJECT * * public: * MyClass(QObject *parent = 0); * ~MyClass() { } * * private Q_SLOTS: * void onAccountManagerReady(Tp::PendingOperation *); * void onValidAccountAdded(const Tp::AccountPtr &); * void onValidAccountRemoved(const Tp::AccountPtr &); * * private: * AccountManagerPtr am; * AccountSetPtr validAccountsSet; * }; * * MyClass::MyClass(QObject *parent) * : QObject(parent) * am(AccountManager::create()) * { * connect(am->becomeReady(), * SIGNAL(finished(Tp::PendingOperation*)), * SLOT(onAccountManagerReady(Tp::PendingOperation*))); * } * * void MyClass::onAccountManagerReady(Tp::PendingOperation *op) * { * if (op->isError()) { * qWarning() << "Account manager cannot become ready:" << * op->errorName() << "-" << op->errorMessage(); * return; * } * * validAccountsSet = am->validAccounts(); * connect(validAccountsSet.data(), * SIGNAL(accountAdded(const Tp::AccountPtr &)), * SLOT(onValidAccountAdded(const Tp::AccountPtr &))); * connect(validAccountsSet.data(), * SIGNAL(accountRemoved(const Tp::AccountPtr &)), * SLOT(onValidAccountRemoved(const Tp::AccountPtr &))); * * QList accounts = validAccountsSet->accounts(); * // do something with accounts * } * * void MyClass::onValidAccountAdded(const Tp::AccountPtr &account) * { * // do something with account * } * * void MyClass::onValidAccountRemoved(const Tp::AccountPtr &account) * { * // do something with account * } * * \endcode * * You can also define your own filter using AccountManager::filterAccounts: * * \code * * void MyClass::onAccountManagerReady(Tp::PendingOperation *op) * { * ... * * AccountPropertyFilterPtr filter = AccountPropertyFilter::create(); * filter->addProperty(QLatin1String("protocolName"), QLatin1String("jabber")); * filter->addProperty(QLatin1String("enabled"), true); * * AccountSetPtr filteredAccountSet = am->filterAccounts(filter); * // connect to AccountSet::accountAdded/accountRemoved signals * QList accounts = filteredAccountSet->accounts(); * // do something with accounts * * .... * } * * \endcode * * Note that for AccountSet to property work with AccountCapabilityFilter * objects, the feature Account::FeatureCapabilities need to be enabled in all * accounts return by the AccountManager passed as param in the constructor. * The easiest way to do this is to enable AccountManager feature * AccountManager::FeatureFilterByCapabilities. * * AccountSet can also be instantiated directly, but when doing it, * the AccountManager object passed as param in the constructor must be ready * for AccountSet properly work. */ /** * Construct a new AccountSet object. * * \param accountManager An account manager object used to filter accounts. * The account manager object must be ready. * \param filter The desired filter. */ AccountSet::AccountSet(const AccountManagerPtr &accountManager, const AccountFilterConstPtr &filter) : Object(), mPriv(new Private(this, accountManager, filter)) { } /** * Construct a new AccountSet object. * * The \a filter must contain Account property names and values as map items. * * \param accountManager An account manager object used to filter accounts. * The account manager object must be ready. * \param filter The desired filter. */ AccountSet::AccountSet(const AccountManagerPtr &accountManager, const QVariantMap &filter) : Object(), mPriv(new Private(this, accountManager, filter)) { } /** * Class destructor. */ AccountSet::~AccountSet() { delete mPriv; } /** * Return the account manager object used to filter accounts. * * \return A pointer to the AccountManager object. */ AccountManagerPtr AccountSet::accountManager() const { return mPriv->accountManager; } /** * Return the filter used to filter accounts. * * \return A read-only pointer the AccountFilter object. */ AccountFilterConstPtr AccountSet::filter() const { return mPriv->filter; } /** * Return a list of account objects that match filter. * * Change notification is via the accountAdded() and accountRemoved() signals. * * \return A list of pointers to Account objects. * \sa accountAdded(), accountRemoved() */ QList AccountSet::accounts() const { return mPriv->accounts.values(); } /** * \fn void AccountSet::accountAdded(const Tp::AccountPtr &account) * * Emitted whenever an account that matches filter is added to * this set. * * \param account The account that was added to this set. * \sa accounts() */ /** * \fn void AccountSet::accountRemoved(const Tp::AccountPtr &account) * * Emitted whenever an account that matches filter is removed * from this set. * * \param account The account that was removed from this set. * \sa accounts() */ void AccountSet::onNewAccount(const AccountPtr &account) { mPriv->insertAccount(account); } void AccountSet::onAccountRemoved(const AccountPtr &account) { mPriv->removeAccount(account); } void AccountSet::onAccountChanged(const AccountPtr &account) { mPriv->filterAccount(account); } } // Tp telepathy-qt-0.9.3/TelepathyQt/ChannelInterfaceCallStateInterface0000644000175200001440000000043112000056607027410 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelInterfaceCallStateInterface_HEADER_GUARD_ #define _TelepathyQt_ChannelInterfaceCallStateInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/base-protocol.h0000644000175200001440000002064412000056607023610 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_base_protocol_h_HEADER_GUARD_ #define _TelepathyQt_base_protocol_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include #include #include #include #include #include class QString; class QStringList; namespace Tp { class TP_QT_EXPORT BaseProtocol : public DBusService { Q_OBJECT Q_DISABLE_COPY(BaseProtocol) public: static BaseProtocolPtr create(const QString &name) { return BaseProtocolPtr(new BaseProtocol(QDBusConnection::sessionBus(), name)); } template static SharedPtr create(const QString &name) { return SharedPtr(new BaseProtocolSubclass( QDBusConnection::sessionBus(), name)); } static BaseProtocolPtr create(const QDBusConnection &dbusConnection, const QString &name) { return BaseProtocolPtr(new BaseProtocol(dbusConnection, name)); } template static SharedPtr create(const QDBusConnection &dbusConnection, const QString &name) { return SharedPtr(new BaseProtocolSubclass(dbusConnection, name)); } virtual ~BaseProtocol(); QString name() const; QVariantMap immutableProperties() const; // Proto QStringList connectionInterfaces() const; void setConnectionInterfaces(const QStringList &connInterfaces); ProtocolParameterList parameters() const; void setParameters(const ProtocolParameterList ¶meters); RequestableChannelClassSpecList requestableChannelClasses() const; void setRequestableChannelClasses(const RequestableChannelClassSpecList &rccSpecs); QString vcardField() const; void setVCardField(const QString &vcardField); QString englishName() const; void setEnglishName(const QString &englishName); QString iconName() const; void setIconName(const QString &iconName); QStringList authenticationTypes() const; void setAuthenticationTypes(const QStringList &authenticationTypes); typedef Callback2 CreateConnectionCallback; void setCreateConnectionCallback(const CreateConnectionCallback &cb); Tp::BaseConnectionPtr createConnection(const QVariantMap ¶meters, DBusError *error); typedef Callback2 IdentifyAccountCallback; void setIdentifyAccountCallback(const IdentifyAccountCallback &cb); QString identifyAccount(const QVariantMap ¶meters, DBusError *error); typedef Callback2 NormalizeContactCallback; void setNormalizeContactCallback(const NormalizeContactCallback &cb); QString normalizeContact(const QString &contactId, DBusError *error); QList interfaces() const; AbstractProtocolInterfacePtr interface(const QString & interfaceName) const; bool plugInterface(const AbstractProtocolInterfacePtr &interface); protected: BaseProtocol(const QDBusConnection &dbusConnection, const QString &name); virtual bool registerObject(const QString &busName, const QString &objectPath, DBusError *error); private: friend class BaseConnectionManager; class Adaptee; friend class Adaptee; class Private; friend class Private; Private *mPriv; }; class TP_QT_EXPORT AbstractProtocolInterface : public AbstractDBusServiceInterface { Q_OBJECT Q_DISABLE_COPY(AbstractProtocolInterface) public: AbstractProtocolInterface(const QString &interfaceName); virtual ~AbstractProtocolInterface(); private: friend class BaseProtocol; class Private; friend class Private; Private *mPriv; }; class TP_QT_EXPORT BaseProtocolAddressingInterface : public AbstractProtocolInterface { Q_OBJECT Q_DISABLE_COPY(BaseProtocolAddressingInterface) public: static BaseProtocolAddressingInterfacePtr create() { return BaseProtocolAddressingInterfacePtr(new BaseProtocolAddressingInterface()); } template static SharedPtr create() { return SharedPtr( new BaseProtocolAddressingInterfaceSubclass()); } virtual ~BaseProtocolAddressingInterface(); QVariantMap immutableProperties() const; QStringList addressableVCardFields() const; void setAddressableVCardFields(const QStringList &vcardFields); QStringList addressableUriSchemes() const; void setAddressableUriSchemes(const QStringList &uriSchemes); typedef Callback3 NormalizeVCardAddressCallback; void setNormalizeVCardAddressCallback(const NormalizeVCardAddressCallback &cb); QString normalizeVCardAddress(const QString &vcardField, const QString &vcardAddress, DBusError *error); typedef Callback2 NormalizeContactUriCallback; void setNormalizeContactUriCallback(const NormalizeContactUriCallback &cb); QString normalizeContactUri(const QString &uri, DBusError *error); protected: BaseProtocolAddressingInterface(); private: void createAdaptor(); class Adaptee; friend class Adaptee; struct Private; friend struct Private; Private *mPriv; }; class TP_QT_EXPORT BaseProtocolAvatarsInterface : public AbstractProtocolInterface { Q_OBJECT Q_DISABLE_COPY(BaseProtocolAvatarsInterface) public: static BaseProtocolAvatarsInterfacePtr create() { return BaseProtocolAvatarsInterfacePtr(new BaseProtocolAvatarsInterface()); } template static SharedPtr create() { return SharedPtr( new BaseProtocolAvatarsInterfaceSubclass()); } virtual ~BaseProtocolAvatarsInterface(); QVariantMap immutableProperties() const; AvatarSpec avatarDetails() const; void setAvatarDetails(const AvatarSpec &spec); protected: BaseProtocolAvatarsInterface(); private: void createAdaptor(); class Adaptee; friend class Adaptee; struct Private; friend struct Private; Private *mPriv; }; class TP_QT_EXPORT BaseProtocolPresenceInterface : public AbstractProtocolInterface { Q_OBJECT Q_DISABLE_COPY(BaseProtocolPresenceInterface) public: static BaseProtocolPresenceInterfacePtr create() { return BaseProtocolPresenceInterfacePtr(new BaseProtocolPresenceInterface()); } template static SharedPtr create() { return SharedPtr( new BaseProtocolPresenceInterfaceSubclass()); } virtual ~BaseProtocolPresenceInterface(); QVariantMap immutableProperties() const; PresenceSpecList statuses() const; void setStatuses(const PresenceSpecList &statuses); protected: BaseProtocolPresenceInterface(); private: void createAdaptor(); class Adaptee; friend class Adaptee; struct Private; friend struct Private; Private *mPriv; }; } #endif telepathy-qt-0.9.3/TelepathyQt/message.cpp0000644000175200001440000005665112000056607023025 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include #include "TelepathyQt/debug-internal.h" #include #include #include namespace Tp { namespace { QVariant valueFromPart(const MessagePartList &parts, uint index, const char *key) { return parts.at(index).value(QLatin1String(key)).variant(); } uint uintOrZeroFromPart(const MessagePartList &parts, uint index, const char *key) { return valueFromPart(parts, index, key).toUInt(); } QString stringOrEmptyFromPart(const MessagePartList &parts, uint index, const char *key) { QString s = valueFromPart(parts, index, key).toString(); if (s.isNull()) { s = QLatin1String(""); } return s; } bool booleanFromPart(const MessagePartList &parts, uint index, const char *key, bool assumeIfAbsent) { QVariant v = valueFromPart(parts, index, key); if (v.isValid() && v.type() == QVariant::Bool) { return v.toBool(); } return assumeIfAbsent; } MessagePartList partsFromPart(const MessagePartList &parts, uint index, const char *key) { return qdbus_cast(valueFromPart(parts, index, key)); } bool partContains(const MessagePartList &parts, uint index, const char *key) { return parts.at(index).contains(QLatin1String(key)); } } struct TP_QT_NO_EXPORT Message::Private : public QSharedData { Private(const MessagePartList &parts); ~Private(); uint senderHandle() const; QString senderId() const; uint pendingId() const; void clearSenderHandle(); MessagePartList parts; // if the Text interface says "non-text" we still only have the text, // because the interface can't tell us anything else... bool forceNonText; // for received messages only WeakPtr textChannel; ContactPtr sender; }; Message::Private::Private(const MessagePartList &parts) : parts(parts), forceNonText(false), sender(0) { } Message::Private::~Private() { } inline uint Message::Private::senderHandle() const { return uintOrZeroFromPart(parts, 0, "message-sender"); } inline QString Message::Private::senderId() const { return stringOrEmptyFromPart(parts, 0, "message-sender-id"); } inline uint Message::Private::pendingId() const { return uintOrZeroFromPart(parts, 0, "pending-message-id"); } void Message::Private::clearSenderHandle() { parts[0].remove(QLatin1String("message-sender")); } /** * \class Message * \ingroup clientchannel * \headerfile TelepathyQt/message.h * * \brief The Message class represents a Telepathy message in a TextChannel. * * This class is implicitly shared, like QString. */ /** * \internal Default constructor. */ Message::Message() : mPriv(new Private(MessagePartList())) { } /** * Construct a new Message object. * * \param parts The parts of a message as defined by the \telepathy_spec. * This list must have length at least 1. */ Message::Message(const MessagePartList &parts) : mPriv(new Private(parts)) { Q_ASSERT(parts.size() > 0); } /** * Construct a new Message object. * * \param timestamp The time the message was sent. * \param type The message type. * \param text The message body. */ Message::Message(uint timestamp, uint type, const QString &text) : mPriv(new Private(MessagePartList() << MessagePart() << MessagePart())) { mPriv->parts[0].insert(QLatin1String("message-sent"), QDBusVariant(static_cast(timestamp))); mPriv->parts[0].insert(QLatin1String("message-type"), QDBusVariant(type)); mPriv->parts[1].insert(QLatin1String("content-type"), QDBusVariant(QLatin1String("text/plain"))); mPriv->parts[1].insert(QLatin1String("content"), QDBusVariant(text)); } /** * Construct a new Message object. * * \param type The message type. * \param text The message body. */ Message::Message(ChannelTextMessageType type, const QString &text) : mPriv(new Private(MessagePartList() << MessagePart() << MessagePart())) { mPriv->parts[0].insert(QLatin1String("message-type"), QDBusVariant(static_cast(type))); mPriv->parts[1].insert(QLatin1String("content-type"), QDBusVariant(QLatin1String("text/plain"))); mPriv->parts[1].insert(QLatin1String("content"), QDBusVariant(text)); } /** * Copy constructor. */ Message::Message(const Message &other) : mPriv(other.mPriv) { } /** * Assignment operator. */ Message &Message::operator=(const Message &other) { if (this != &other) { mPriv = other.mPriv; } return *this; } /** * Equality operator. */ bool Message::operator==(const Message &other) const { return this->mPriv == other.mPriv; } /** * Class destructor. */ Message::~Message() { } /** * Return the time the message was sent, or QDateTime() if that time is * unknown. * * \return The timestamp as QDateTime. */ QDateTime Message::sent() const { // FIXME See http://bugs.freedesktop.org/show_bug.cgi?id=21690 uint stamp = valueFromPart(mPriv->parts, 0, "message-sent").toUInt(); if (stamp != 0) { return QDateTime::fromTime_t(stamp); } else { return QDateTime(); } } /** * Return the type of this message, or #ChannelTextMessageTypeNormal * if the type is not recognised. * * \return The type as #ChannelTextMessageType. */ ChannelTextMessageType Message::messageType() const { uint raw = valueFromPart(mPriv->parts, 0, "message-type").toUInt(); if (raw < static_cast(NUM_CHANNEL_TEXT_MESSAGE_TYPES)) { return ChannelTextMessageType(raw); } else { return ChannelTextMessageTypeNormal; } } /** * Return whether this message was truncated during delivery. * * \return \c true if truncated, \c false otherwise. */ bool Message::isTruncated() const { for (int i = 1; i < size(); i++) { if (booleanFromPart(mPriv->parts, i, "truncated", false)) { return true; } } return false; } /** * Return whether this message contains parts not representable as plain * text. * * \return \c true if it cannot completely be represented as plain text, \c false * otherwise. */ bool Message::hasNonTextContent() const { if (mPriv->forceNonText || size() <= 1 || isSpecificToDBusInterface()) { return true; } QSet texts; QSet textNeeded; for (int i = 1; i < size(); i++) { QString altGroup = stringOrEmptyFromPart(mPriv->parts, i, "alternative"); QString contentType = stringOrEmptyFromPart(mPriv->parts, i, "content-type"); if (contentType == QLatin1String("text/plain")) { if (!altGroup.isEmpty()) { // we can use this as an alternative for a non-text part // with the same altGroup texts << altGroup; } } else { QString alt = stringOrEmptyFromPart(mPriv->parts, i, "alternative"); if (altGroup.isEmpty()) { // we can't possibly rescue this part by using a text/plain // alternative, because it's not in any alternative group return true; } else { // maybe we'll find a text/plain alternative for this textNeeded << altGroup; } } } textNeeded -= texts; return !textNeeded.isEmpty(); } /** * Return the unique token identifying this message (e.g. the id attribute * for XMPP messages), or an empty string if there is no suitable token. * * \return The non-empty message identifier, or an empty string if none. */ QString Message::messageToken() const { return stringOrEmptyFromPart(mPriv->parts, 0, "message-token"); } /** * Return whether this message is specific to a D-Bus interface. This is * \c false in almost all cases. * * If this function returns \c true, the message is specific to the interface * indicated by dbusInterface(). Clients that don't understand that interface * should not display the message. However, if the client would acknowledge * an ordinary message, it must also acknowledge this interface-specific * message. * * \return \c true if dbusInterface() would return a non-empty string, \c false otherwise. * \sa dbusInterface() */ bool Message::isSpecificToDBusInterface() const { return !dbusInterface().isEmpty(); } /** * Return the D-Bus interface to which this message is specific, or an * empty string for normal messages. * * \return The D-Bus interface name, or an empty string. * \sa isSpecificToDBusInterface() */ QString Message::dbusInterface() const { return stringOrEmptyFromPart(mPriv->parts, 0, "interface"); } /** * Return the message body containing all "text/plain" parts. * * \return The body text. */ QString Message::text() const { // Alternative-groups for which we've already emitted an alternative QSet altGroupsUsed; QString text; for (int i = 1; i < size(); i++) { QString altGroup = stringOrEmptyFromPart(mPriv->parts, i, "alternative"); QString contentType = stringOrEmptyFromPart(mPriv->parts, i, "content-type"); if (contentType == QLatin1String("text/plain")) { if (!altGroup.isEmpty()) { if (altGroupsUsed.contains(altGroup)) { continue; } else { altGroupsUsed << altGroup; } } QVariant content = valueFromPart(mPriv->parts, i, "content"); if (content.type() == QVariant::String) { text += content.toString(); } else { // O RLY? debug() << "allegedly text/plain part wasn't"; } } } return text; } /** * Return the message's header part, as defined by the \telepathy_spec. * * This is provided for advanced clients that need to access * additional information not available through the normal Message API. * * \return The header as a MessagePart object. The same thing as part(0). */ MessagePart Message::header() const { return part(0); } /** * Return the number of parts in this message. * * \return 1 greater than the largest valid argument to part(). * \sa part(), parts() */ int Message::size() const { return mPriv->parts.size(); } /** * Return the message's part for \a index, as defined by the \telepathy_spec. * * This is provided for advanced clients that need to access * additional information not available through the normal Message API. * * \param index The part to access, which must be strictly less than size(); * part number 0 is the header, parts numbered 1 or greater * are the body of the message. * \return A MessagePart object. */ MessagePart Message::part(uint index) const { return mPriv->parts.at(index); } /** * Return the list of message parts forming this message. * * \return The list of MessagePart objects. */ MessagePartList Message::parts() const { return mPriv->parts; } /** * \class ReceivedMessage * \ingroup clientchannel * \headerfile TelepathyQt/message.h * * \brief The ReceivedMessage class is a subclass of Message, representing a * received message only. * * It contains additional information that's generally only * available on received messages. */ /** * \class ReceivedMessage::DeliveryDetails * \ingroup clientchannel * \headerfile TelepathyQt/message.h * * \brief The ReceivedMessage::DeliveryDetails class represents the details of a delivery report. */ struct TP_QT_NO_EXPORT ReceivedMessage::DeliveryDetails::Private : public QSharedData { Private(const MessagePartList &parts) : parts(parts) { } MessagePartList parts; }; /** * Default constructor. */ ReceivedMessage::DeliveryDetails::DeliveryDetails() { } /** * Copy constructor. */ ReceivedMessage::DeliveryDetails::DeliveryDetails(const DeliveryDetails &other) : mPriv(other.mPriv) { } /** * Construct a new ReceivedMessage::DeliveryDetails object. * * \param The message parts. */ ReceivedMessage::DeliveryDetails::DeliveryDetails(const MessagePartList &parts) : mPriv(new Private(parts)) { } /** * Class destructor. */ ReceivedMessage::DeliveryDetails::~DeliveryDetails() { } /** * Assignment operator. */ ReceivedMessage::DeliveryDetails &ReceivedMessage::DeliveryDetails::operator=( const DeliveryDetails &other) { this->mPriv = other.mPriv; return *this; } /** * Return the delivery status of a message. * * \return The delivery status as #DeliveryStatus. */ DeliveryStatus ReceivedMessage::DeliveryDetails::status() const { if (!isValid()) { return DeliveryStatusUnknown; } return static_cast(uintOrZeroFromPart(mPriv->parts, 0, "delivery-status")); } /** * Return whether this delivery report contains an identifier for the message to which it * refers. * * \return \c true if an original message token is known, \c false otherwise. * \sa originalToken() */ bool ReceivedMessage::DeliveryDetails::hasOriginalToken() const { if (!isValid()) { return false; } return partContains(mPriv->parts, 0, "delivery-token"); } /** * Return an identifier for the message to which this delivery report refers, or an empty string if * hasOriginalToken() returns \c false. * * Clients may match this against the token produced by the TextChannel::send() method and * TextChannel::messageSent() signal. A status report with no token could match any sent message, * and a sent message with an empty token could match any status report. * If multiple sent messages match, clients should use some reasonable heuristic. * * \return The message token if hasOriginalToken() returns \c true, an empty string otherwise. * \sa hasOriginalToken(). */ QString ReceivedMessage::DeliveryDetails::originalToken() const { if (!isValid()) { return QString(); } return stringOrEmptyFromPart(mPriv->parts, 0, "delivery-token"); } /** * Return whether the delivery of the message this delivery report refers to, failed. * * \return \c true if the message delivery failed, \c false otherwise. * \sa error() */ bool ReceivedMessage::DeliveryDetails::isError() const { if (!isValid()) { return false; } DeliveryStatus st(status()); return st == DeliveryStatusTemporarilyFailed || st == DeliveryStatusPermanentlyFailed; } /** * Return the reason for the delivery failure if known. * * \return The reason as #ChannelTextSendError. * \sa isError() */ ChannelTextSendError ReceivedMessage::DeliveryDetails::error() const { if (!isValid()) { return ChannelTextSendErrorUnknown; } return static_cast(uintOrZeroFromPart(mPriv->parts, 0, "delivery-error")); } /** * Return whether this delivery report contains a debugging information on why the message it refers * to could not be delivered. * * \return \c true if a debugging information is provided, \c false otherwise. * \sa debugMessage() */ bool ReceivedMessage::DeliveryDetails::hasDebugMessage() const { if (!isValid()) { return false; } return partContains(mPriv->parts, 0, "delivery-error-message"); } /** * Return the debugging information on why the message this delivery report refers to could not be * delivered. * * \return The debug string. * \sa hasDebugMessage() */ QString ReceivedMessage::DeliveryDetails::debugMessage() const { if (!isValid()) { return QString(); } return stringOrEmptyFromPart(mPriv->parts, 0, "delivery-error-message"); } /** * Return the reason for the delivery failure if known, specified as a * (possibly implementation-specific) D-Bus error. * * \return The D-Bus error string representing the error. */ QString ReceivedMessage::DeliveryDetails::dbusError() const { if (!isValid()) { return QString(); } QString ret = stringOrEmptyFromPart(mPriv->parts, 0, "delivery-dbus-error"); if (ret.isEmpty()) { switch (error()) { case ChannelTextSendErrorOffline: ret = TP_QT_ERROR_OFFLINE; break; case ChannelTextSendErrorInvalidContact: ret = TP_QT_ERROR_DOES_NOT_EXIST; break; case ChannelTextSendErrorPermissionDenied: ret = TP_QT_ERROR_PERMISSION_DENIED; break; case ChannelTextSendErrorTooLong: ret = TP_QT_ERROR_INVALID_ARGUMENT; break; case ChannelTextSendErrorNotImplemented: ret = TP_QT_ERROR_NOT_IMPLEMENTED; break; default: ret = TP_QT_ERROR_NOT_AVAILABLE; } } return ret; } /** * Return whether the message content for the message this delivery report refers to is known. * * \return \c true if the original message content is known, \c false otherwise. * \sa echoedMessage() */ bool ReceivedMessage::DeliveryDetails::hasEchoedMessage() const { if (!isValid()) { return false; } return partContains(mPriv->parts, 0, "delivery-echo"); } /** * Return the Message object for the message this delivery report refers to, omitted if the message * is unknown. * *
*
Rationale:
*
* Some protocols, like XMPP, echo the failing message back to the sender. This is sometimes the * only way to match it against the sent message, so we include it here. *
*
* * \return The Message object, or an empty Message object if hasEchoedMessage() * returns \c false. * \sa hasEchoedMessage() */ Message ReceivedMessage::DeliveryDetails::echoedMessage() const { if (!isValid()) { return Message(); } return Message(partsFromPart(mPriv->parts, 0, "delivery-echo")); } /** * \internal Default constructor. */ ReceivedMessage::ReceivedMessage() { } /** * Construct a new ReceivedMessage object. * * \param parts The parts of a message as defined by the \telepathy_spec. * This list must have length at least 1. * \param channel The channel owning this message. */ ReceivedMessage::ReceivedMessage(const MessagePartList &parts, const TextChannelPtr &channel) : Message(parts) { if (!mPriv->parts[0].contains(QLatin1String("message-received"))) { mPriv->parts[0].insert(QLatin1String("message-received"), QDBusVariant(static_cast( QDateTime::currentDateTime().toTime_t()))); } mPriv->textChannel = channel; } /** * Copy constructor. */ ReceivedMessage::ReceivedMessage(const ReceivedMessage &other) : Message(other) { } /** * Assignment operator. */ ReceivedMessage &ReceivedMessage::operator=(const ReceivedMessage &other) { if (this != &other) { mPriv = other.mPriv; } return *this; } /** * Class destructor. */ ReceivedMessage::~ReceivedMessage() { } /** * Return the time the message was received. * * \return The timestamp as QDateTime, or QDateTime() if unknown. */ QDateTime ReceivedMessage::received() const { // FIXME See http://bugs.freedesktop.org/show_bug.cgi?id=21690 uint stamp = valueFromPart(mPriv->parts, 0, "message-received").toUInt(); if (stamp != 0) { return QDateTime::fromTime_t(stamp); } else { return QDateTime(); } } /** * Return the contact who sent the message. * * \return A pointer to the Contact object. * \sa senderNickname() */ ContactPtr ReceivedMessage::sender() const { return mPriv->sender; } /** * Return the nickname chosen by the sender of the message, which can be different for each * message in a conversation. * * \return The nickname. * \sa sender() */ QString ReceivedMessage::senderNickname() const { QString ret = stringOrEmptyFromPart(mPriv->parts, 0, "sender-nickname"); if (ret.isEmpty() && mPriv->sender) { ret = mPriv->sender->alias(); } return ret; } /** * If this message replaces a previous message, return the value of * messageToken() for that previous message. Otherwise, return an empty string. * * For instance, a user interface could replace the superseded * message with this message, or grey out the superseded message. * * \return The message token of the superseded message or an empty string if none. */ QString ReceivedMessage::supersededToken() const { return stringOrEmptyFromPart(mPriv->parts, 0, "supersedes"); } /** * Return whether the incoming message was part of a replay of message * history. * * If \c true, loggers can use this to improve their heuristics for elimination * of duplicate messages (a simple, correct implementation would be to avoid * logging any message that has this flag). * * \return \c true if the scrollback flag is set, \c false otherwise. */ bool ReceivedMessage::isScrollback() const { return booleanFromPart(mPriv->parts, 0, "scrollback", false); } /** * Return whether the incoming message was seen in a previous channel during * the lifetime of the connection, but was not acknowledged before that * channel closed, causing the channel in which it now appears to open. * * If \c true, loggers should not log this message again. * * \return \c true if the rescued flag is set, \c false otherwise. */ bool ReceivedMessage::isRescued() const { return booleanFromPart(mPriv->parts, 0, "rescued", false); } /** * Return whether the incoming message is a delivery report. * * \return \c true if a delivery report, \c false otherwise. * \sa deliveryDetails() */ bool ReceivedMessage::isDeliveryReport() const { return messageType() == ChannelTextMessageTypeDeliveryReport; } /** * Return the details of a delivery report. * * This method should only be used if isDeliveryReport() returns \c true. * * \return The delivery report as a ReceivedMessage::DeliveryDetails object. * \sa isDeliveryReport() */ ReceivedMessage::DeliveryDetails ReceivedMessage::deliveryDetails() const { return DeliveryDetails(parts()); } /** * Return whether this message is from \a channel. * * \return \c true if the message is from \a channel, \c false otherwise. */ bool ReceivedMessage::isFromChannel(const TextChannelPtr &channel) const { return TextChannelPtr(mPriv->textChannel) == channel; } uint ReceivedMessage::pendingId() const { return mPriv->pendingId(); } uint ReceivedMessage::senderHandle() const { return mPriv->senderHandle(); } QString ReceivedMessage::senderId() const { return mPriv->senderId(); } void ReceivedMessage::setForceNonText() { mPriv->forceNonText = true; } void ReceivedMessage::clearSenderHandle() { mPriv->clearSenderHandle(); } void ReceivedMessage::setSender(const ContactPtr &sender) { mPriv->sender = sender; } } // Tp telepathy-qt-0.9.3/TelepathyQt/ConnectionLowlevel0000644000175200001440000000040312000056607024411 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ConnectionLowlevel_HEADER_GUARD #define _TelepathyQt_ConnectionLowlevel_HEADER_GUARD #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/CallContentInterfaceMediaInterface0000644000175200001440000000043612000056607027416 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_CallContentInterfaceMediaInterface_HEADER_GUARD_ #define _TelepathyQt_CallContentInterfaceMediaInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/abstract-adaptor.cpp0000644000175200001440000000601612000056607024622 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/abstract-adaptor.moc.hpp" #include "TelepathyQt/debug-internal.h" #include namespace Tp { struct TP_QT_NO_EXPORT AbstractAdaptor::Private { Private(const QDBusConnection &dbusConnection, QObject *adaptee) : dbusConnection(dbusConnection), adaptee(adaptee) { } QDBusConnection dbusConnection; QObject *adaptee; }; /** * \class AbstractAdaptor * \ingroup servicesideimpl * \headerfile TelepathyQt/abstract-adaptor.h * * \brief Base class for all the low-level service-side adaptors. * * This class serves as the parent for all the generated low-level service-side * adaptors. Adaptors provide the interface of an object on the bus. * * The implementation of this interface should be provided in a special object * called the adaptee. The adaptee is meant to provide properties, signals * and slots that are connected automatically with the adaptor using Qt's meta-object * system. */ /** * Construct a new AbstractAdaptor that operates on the given * \a dbusConnection and redirects calls to the given \a adaptee. * * \param dbusConnection The D-Bus connection to use. * \param adaptee The class the provides the implementation of the calls. * \param parent The QObject parent of this adaptor. */ AbstractAdaptor::AbstractAdaptor(const QDBusConnection &dbusConnection, QObject *adaptee, QObject *parent) : QDBusAbstractAdaptor(parent), mPriv(new Private(dbusConnection, adaptee)) { setAutoRelaySignals(false); } /** * Class destructor. */ AbstractAdaptor::~AbstractAdaptor() { delete mPriv; } /** * Return the D-Bus connection associated with this adaptor. * * \return The D-Bus connection associated with this adaptor. */ QDBusConnection AbstractAdaptor::dbusConnection() const { return mPriv->dbusConnection; } /** * Return the adaptee object, i.e. the object that provides the implementation * of this adaptor. * * \return The adaptee object. */ QObject *AbstractAdaptor::adaptee() const { return mPriv->adaptee; } } telepathy-qt-0.9.3/TelepathyQt/file-transfer-channel.h0000644000175200001440000000614412000056607025205 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_file_transfer_channel_h_HEADER_GUARD_ #define _TelepathyQt_file_transfer_channel_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include namespace Tp { class TP_QT_EXPORT FileTransferChannel : public Channel { Q_OBJECT Q_DISABLE_COPY(FileTransferChannel) public: static const Feature FeatureCore; static FileTransferChannelPtr create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties); virtual ~FileTransferChannel(); FileTransferState state() const; FileTransferStateChangeReason stateReason() const; QString fileName() const; QString contentType() const; qulonglong size() const; QString uri() const; FileHashType contentHashType() const; QString contentHash() const; QString description() const; QDateTime lastModificationTime() const; qulonglong initialOffset() const; qulonglong transferredBytes() const; PendingOperation *cancel(); Q_SIGNALS: void stateChanged(Tp::FileTransferState state, Tp::FileTransferStateChangeReason reason); void initialOffsetDefined(qulonglong initialOffset); void transferredBytesChanged(qulonglong count); protected: FileTransferChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature = FileTransferChannel::FeatureCore); SupportedSocketMap availableSocketTypes() const; virtual void connectToHost(); bool isConnected() const; void setConnected(); bool isFinished() const; virtual void setFinished(); private Q_SLOTS: TP_QT_NO_EXPORT void gotProperties(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void changeState(); TP_QT_NO_EXPORT void onStateChanged(uint state, uint stateReason); TP_QT_NO_EXPORT void onInitialOffsetDefined(qulonglong initialOffset); TP_QT_NO_EXPORT void onTransferredBytesChanged(qulonglong count); protected Q_SLOTS: TP_QT_NO_EXPORT void onUriDefined(const QString &uri); private: struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/IncomingFileTransferChannel0000644000175200001440000000044212000056607026144 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_IncomingFileTransferChannel_HEADER_GUARD_ #define _TelepathyQt_IncomingFileTransferChannel_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/ContactFactory0000644000175200001440000000037112000056607023527 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ContactFactory_HEADER_GUARD_ #define _TelepathyQt_ContactFactory_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/stable-interfaces.xml0000644000175200001440000000213412000056607024775 0ustar00collabora-develusers00000000000000 Telepathy D-Bus Interface Specification, TelepathyQt copy 0.17.7 telepathy-qt-0.9.3/TelepathyQt/ChannelFactory0000644000175200001440000000037112000056607023504 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelFactory_HEADER_GUARD_ #define _TelepathyQt_ChannelFactory_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/ConnectionInterfaceRequestsInterface0000644000175200001440000000044012000056607030076 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ConnectionInterfaceRequestsInterface_HEADER_GUARD_ #define _TelepathyQt_ConnectionInterfaceRequestsInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/streamed-media-channel.cpp0000644000175200001440000014464412000056607025670 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/streamed-media-channel.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include #include #include #include namespace Tp { /* ====== PendingStreamedMediaStreams ====== */ struct TP_QT_NO_EXPORT PendingStreamedMediaStreams::Private { StreamedMediaStreams streams; uint numStreams; uint streamsReady; }; /** * \class PendingStreamedMediaStreams * \ingroup clientchannel * \headerfile TelepathyQt/streamed-media-channel.h * * \brief Class containing the result of an asynchronous streamed media stream creation * request. * * Instances of this class cannot be constructed directly; the only way to get * one is via StreamedMediaChannel. * * See \ref async_model */ /** * Construct a new PendingStreamedMediaStreams object. * * \param channel StreamedMediaChannel to use. * \param contact The contact who the media stream is with. * \param types A list of stream types to request. */ PendingStreamedMediaStreams::PendingStreamedMediaStreams(const StreamedMediaChannelPtr &channel, const ContactPtr &contact, const QList &types) : PendingOperation(channel), mPriv(new Private) { mPriv->numStreams = types.size(); mPriv->streamsReady = 0; UIntList l; foreach (MediaStreamType type, types) { l << type; } Client::ChannelTypeStreamedMediaInterface *streamedMediaInterface = channel->interface(); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( streamedMediaInterface->RequestStreams( contact->handle()[0], l), this); connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotStreams(QDBusPendingCallWatcher*))); } /** * Class destructor. */ PendingStreamedMediaStreams::~PendingStreamedMediaStreams() { delete mPriv; } /** * Return the channel through which the request was made. * * \return A pointer to the StreamedMediaChannel object. */ StreamedMediaChannelPtr PendingStreamedMediaStreams::channel() const { return StreamedMediaChannelPtr(qobject_cast( (StreamedMediaChannel*) object().data())); } /** * Return a list of the newly created StreamedMediaStreamPtr objects. * * \return A list of pointers to StreamedMediaStream objects, or an empty list if an error occurred. */ StreamedMediaStreams PendingStreamedMediaStreams::streams() const { if (!isFinished()) { warning() << "PendingStreamedMediaStreams::streams called before finished, " "returning empty list"; return StreamedMediaStreams(); } else if (!isValid()) { warning() << "PendingStreamedMediaStreams::streams called when not valid, " "returning empty list"; return StreamedMediaStreams(); } return mPriv->streams; } void PendingStreamedMediaStreams::gotStreams(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (reply.isError()) { warning().nospace() << "StreamedMedia::RequestStreams()" " failed with " << reply.error().name() << ": " << reply.error().message(); setFinishedWithError(reply.error()); watcher->deleteLater(); return; } debug() << "Got reply to StreamedMedia::RequestStreams()"; MediaStreamInfoList list = reply.value(); foreach (const MediaStreamInfo &streamInfo, list) { StreamedMediaStreamPtr stream = channel()->lookupStreamById( streamInfo.identifier); if (!stream) { stream = channel()->addStream(streamInfo); } else { channel()->onStreamDirectionChanged(streamInfo.identifier, streamInfo.direction, streamInfo.pendingSendFlags); channel()->onStreamStateChanged(streamInfo.identifier, streamInfo.state); } mPriv->streams.append(stream); connect(channel().data(), SIGNAL(streamRemoved(Tp::StreamedMediaStreamPtr)), SLOT(onStreamRemoved(Tp::StreamedMediaStreamPtr))); connect(stream->becomeReady(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onStreamReady(Tp::PendingOperation*))); } watcher->deleteLater(); } void PendingStreamedMediaStreams::onStreamRemoved(const StreamedMediaStreamPtr &stream) { if (isFinished()) { return; } if (mPriv->streams.contains(stream)) { // the stream was removed before becoming ready setFinishedWithError(TP_QT_ERROR_CANCELLED, QLatin1String("Stream removed before ready")); } } void PendingStreamedMediaStreams::onStreamReady(PendingOperation *op) { if (isFinished()) { return; } if (op->isError()) { setFinishedWithError(op->errorName(), op->errorMessage()); return; } mPriv->streamsReady++; debug() << "PendingStreamedMediaStreams:"; debug() << " Streams count:" << mPriv->numStreams; debug() << " Streams ready:" << mPriv->streamsReady; if (mPriv->streamsReady == mPriv->numStreams) { debug() << "All streams are ready"; setFinished(); } } /* ====== StreamedMediaStream ====== */ struct TP_QT_NO_EXPORT StreamedMediaStream::Private { Private(StreamedMediaStream *parent, const StreamedMediaChannelPtr &channel, const MediaStreamInfo &info); static void introspectContact(Private *self); PendingOperation *updateDirection(bool send, bool receive); SendingState localSendingStateFromDirection(); SendingState remoteSendingStateFromDirection(); StreamedMediaStream *parent; WeakPtr channel; ReadinessHelper *readinessHelper; uint id; uint type; uint contactHandle; ContactPtr contact; uint direction; uint pendingSend; uint state; }; StreamedMediaStream::Private::Private(StreamedMediaStream *parent, const StreamedMediaChannelPtr &channel, const MediaStreamInfo &streamInfo) : parent(parent), channel(channel), readinessHelper(parent->readinessHelper()), id(streamInfo.identifier), type(streamInfo.type), contactHandle(streamInfo.contact), direction(MediaStreamDirectionNone), pendingSend(0), state(MediaStreamStateDisconnected) { ReadinessHelper::Introspectables introspectables; ReadinessHelper::Introspectable introspectableCore( QSet() << 0, // makesSenseForStatuses Features(), // dependsOnFeatures QStringList(), // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::introspectContact, this); introspectables[FeatureCore] = introspectableCore; readinessHelper->addIntrospectables(introspectables); } void StreamedMediaStream::Private::introspectContact(StreamedMediaStream::Private *self) { debug() << "Introspecting stream"; if (self->contactHandle == 0) { debug() << "Stream ready"; self->readinessHelper->setIntrospectCompleted(FeatureCore, true); return; } debug() << "Introspecting stream contact"; ContactManagerPtr contactManager = self->parent->channel()->connection()->contactManager(); debug() << "contact manager" << contactManager; // TODO: pass id hints to ContactManager if we ever gain support to retrieve contact ids // from MediaStreamInfo or something similar. self->parent->connect(contactManager->contactsForHandles( UIntList() << self->contactHandle), SIGNAL(finished(Tp::PendingOperation*)), SLOT(gotContact(Tp::PendingOperation*))); } PendingOperation *StreamedMediaStream::Private::updateDirection( bool send, bool receive) { uint newDirection = 0; if (send) { newDirection |= MediaStreamDirectionSend; } if (receive) { newDirection |= MediaStreamDirectionReceive; } Client::ChannelTypeStreamedMediaInterface *streamedMediaInterface = parent->channel()->interface(); return new PendingVoid( streamedMediaInterface->RequestStreamDirection( id, newDirection), StreamedMediaStreamPtr(parent)); } StreamedMediaStream::SendingState StreamedMediaStream::Private::localSendingStateFromDirection() { if (pendingSend & MediaStreamPendingLocalSend) { return SendingStatePendingSend; } if (direction & MediaStreamDirectionSend) { return SendingStateSending; } return SendingStateNone; } StreamedMediaStream::SendingState StreamedMediaStream::Private::remoteSendingStateFromDirection() { if (pendingSend & MediaStreamPendingRemoteSend) { return SendingStatePendingSend; } if (direction & MediaStreamDirectionReceive) { return SendingStateSending; } return SendingStateNone; } /** * \class StreamedMediaStream * \ingroup clientchannel * \headerfile TelepathyQt/streamed-media-channel.h * * \brief The StreamedMediaStream class represents a Telepathy streamed media * stream. * * Instances of this class cannot be constructed directly; the only way to get * one is via StreamedMediaChannel. */ /** * Feature representing the core that needs to become ready to make the * StreamedMediaStream object usable. * * Note that this feature must be enabled in order to use most StreamedMediaStream * methods. See specific methods documentation for more details. * * When calling isReady(), becomeReady(), this feature is implicitly added * to the requested features. */ const Feature StreamedMediaStream::FeatureCore = Feature(QLatin1String(StreamedMediaStream::staticMetaObject.className()), 0); /** * Construct a new StreamedMediaStream object. * * \param channel The channel ownding this media stream. * \param streamInfo The stream info of this media stream. */ StreamedMediaStream::StreamedMediaStream(const StreamedMediaChannelPtr &channel, const MediaStreamInfo &streamInfo) : Object(), ReadyObject(this, FeatureCore), mPriv(new Private(this, channel, streamInfo)) { gotDirection(streamInfo.direction, streamInfo.pendingSendFlags); gotStreamState(streamInfo.state); } /** * Class destructor. */ StreamedMediaStream::~StreamedMediaStream() { delete mPriv; } /** * Return the channel owning this media stream. * * \return A pointer to the StreamedMediaChannel object. */ StreamedMediaChannelPtr StreamedMediaStream::channel() const { return StreamedMediaChannelPtr(mPriv->channel); } /** * Return the id of this media stream. * * \return An integer representing the media stream id. */ uint StreamedMediaStream::id() const { return mPriv->id; } /** * Return the contact who this media stream is with. * * \return A pointer to the Contact object. */ ContactPtr StreamedMediaStream::contact() const { return mPriv->contact; } /** * Return the state of this media stream. * * \return The state as #MediaStreamState. */ MediaStreamState StreamedMediaStream::state() const { return (MediaStreamState) mPriv->state; } /** * Return the type of this media stream. * * \return The type as #MediaStreamType. */ MediaStreamType StreamedMediaStream::type() const { return (MediaStreamType) mPriv->type; } /** * Return whether media is being sent on this media stream. * * \return \c true if media is being sent, \c false otherwise. * \sa localSendingStateChanged() */ bool StreamedMediaStream::sending() const { return mPriv->direction & MediaStreamDirectionSend; } /** * Return whether media is being received on this media stream. * * \return \c true if media is being received, \c false otherwise. * \sa remoteSendingStateChanged() */ bool StreamedMediaStream::receiving() const { return mPriv->direction & MediaStreamDirectionReceive; } /** * Return whether the local user has been asked to send media by the * remote user on this media stream. * * \return \c true if the local user has been asked to send media by the * remote user, \c false otherwise. * \sa localSendingStateChanged() */ bool StreamedMediaStream::localSendingRequested() const { return mPriv->pendingSend & MediaStreamPendingLocalSend; } /** * Return whether the remote user has been asked to send media by the local * user on this media stream. * * \return \c true if the remote user has been asked to send media by the * local user, \c false otherwise. * \sa remoteSendingStateChanged() */ bool StreamedMediaStream::remoteSendingRequested() const { return mPriv->pendingSend & MediaStreamPendingRemoteSend; } /** * Return the direction of this media stream. * * \return The direction as #MediaStreamDirection. * \sa localSendingState(), remoteSendingState(), * localSendingStateChanged(), remoteSendingStateChanged(), * sending(), receiving() */ MediaStreamDirection StreamedMediaStream::direction() const { return (MediaStreamDirection) mPriv->direction; } /** * Return the pending send flags of this media stream. * * \return The pending send flags as #MediaStreamPendingSend. * \sa localSendingStateChanged() */ MediaStreamPendingSend StreamedMediaStream::pendingSend() const { return (MediaStreamPendingSend) mPriv->pendingSend; } /** * Request a change in the direction of this media stream. In particular, this * might be useful to stop sending media of a particular type, or inform the * peer that you are no longer using media that is being sent to you. * * \param direction The new direction. * \return A PendingOperation which will emit PendingOperation::finished * when the call has finished. * \sa localSendingStateChanged(), remoteSendingStateChanged() */ PendingOperation *StreamedMediaStream::requestDirection( MediaStreamDirection direction) { StreamedMediaChannelPtr chan(channel()); Client::ChannelTypeStreamedMediaInterface *streamedMediaInterface = chan->interface(); return new PendingVoid( streamedMediaInterface->RequestStreamDirection( mPriv->id, direction), StreamedMediaStreamPtr(this)); } /** * Start sending a DTMF tone on this media stream. * * Where possible, the tone will continue until stopDTMFTone() is called. * On certain protocols, it may only be possible to send events with a predetermined * length. In this case, the implementation may emit a fixed-length tone, * and the stopDTMFTone() method call should return #TP_QT_ERROR_NOT_AVAILABLE. * * If the channel() does not support the #TP_QT_IFACE_CHANNEL_INTERFACE_DTMF * interface, the resulting PendingOperation will fail with error code * #TP_QT_ERROR_NOT_IMPLEMENTED. * \param event A numeric event code from the #DTMFEvent enum. * \return A PendingOperation which will emit PendingOperation::finished * when the request finishes. * \sa stopDTMFTone() */ PendingOperation *StreamedMediaStream::startDTMFTone(DTMFEvent event) { StreamedMediaChannelPtr chan(channel()); if (!chan->interfaces().contains(TP_QT_IFACE_CHANNEL_INTERFACE_DTMF)) { warning() << "StreamedMediaStream::startDTMFTone() used with no dtmf interface"; return new PendingFailure(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("StreamedMediaChannel does not support dtmf interface"), StreamedMediaStreamPtr(this)); } Client::ChannelInterfaceDTMFInterface *dtmfInterface = chan->interface(); return new PendingVoid( dtmfInterface->StartTone(mPriv->id, event), StreamedMediaStreamPtr(this)); } /** * Stop sending any DTMF tone which has been started using the startDTMFTone() * method. * * If there is no current tone, the resulting PendingOperation will * finish successfully. * * If continuous tones are not supported by this media stream, the resulting * PendingOperation will fail with error code #TP_QT_ERROR_NOT_AVAILABLE. * * If the channel() does not support the #TP_QT_IFACE_CHANNEL_INTERFACE_DTMF * interface, the resulting PendingOperation will fail with error code * #TP_QT_ERROR_NOT_IMPLEMENTED. * * \return A PendingOperation which will emit PendingOperation::finished * when the request finishes. * \sa startDTMFTone() */ PendingOperation *StreamedMediaStream::stopDTMFTone() { StreamedMediaChannelPtr chan(channel()); if (!chan->interfaces().contains(TP_QT_IFACE_CHANNEL_INTERFACE_DTMF)) { warning() << "StreamedMediaStream::stopDTMFTone() used with no dtmf interface"; return new PendingFailure(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("StreamedMediaChannel does not support dtmf interface"), StreamedMediaStreamPtr(this)); } Client::ChannelInterfaceDTMFInterface *dtmfInterface = chan->interface(); return new PendingVoid( dtmfInterface->StopTone(mPriv->id), StreamedMediaStreamPtr(this)); } /** * Request a change in the direction of this media stream. * * In particular, this might be useful to stop sending media of a particular type, * or inform the peer that you are no longer using media that is being sent to you. * * \return A PendingOperation which will emit PendingOperation::finished * when the call has finished. * \sa requestDirection(Tp::MediaStreamDirection direction), * localSendingStateChanged(), remoteSendingStateChanged() */ PendingOperation *StreamedMediaStream::requestDirection(bool send, bool receive) { uint dir = MediaStreamDirectionNone; if (send) { dir |= MediaStreamDirectionSend; } if (receive) { dir |= MediaStreamDirectionReceive; } return requestDirection((MediaStreamDirection) dir); } /** * Return the media stream local sending state. * * \return The local sending state as StreamedMediaStream::SendingState. * \sa localSendingStateChanged() */ StreamedMediaStream::SendingState StreamedMediaStream::localSendingState() const { return mPriv->localSendingStateFromDirection(); } /** * Return the media stream remote sending state. * * \return The remote sending state as StreamedMediaStream::SendingState. * \sa remoteSendingStateChanged() */ StreamedMediaStream::SendingState StreamedMediaStream::remoteSendingState() const { return mPriv->remoteSendingStateFromDirection(); } /** * Request that media starts or stops being sent on this media stream. * * \return A PendingOperation which will emit PendingOperation::finished * when the call has finished. * \sa localSendingStateChanged(), requestDirection() */ PendingOperation *StreamedMediaStream::requestSending(bool send) { return mPriv->updateDirection( send, mPriv->direction & MediaStreamDirectionReceive); } /** * Request that the remote contact stops or starts sending on this media stream. * * \return A PendingOperation which will emit PendingOperation::finished * when the call has finished. * \sa remoteSendingStateChanged(), requestDirection() */ PendingOperation *StreamedMediaStream::requestReceiving(bool receive) { return mPriv->updateDirection( mPriv->direction & MediaStreamDirectionSend, receive); } /** * \fn void StreamedMediaStream::localSendingStateChanged( * Tp::StreamedMediaStream::SendingState localSendingState) * * Emitted when the local sending state of this media stream changes. * * \param localSendingState The new local sending state of this media stream. * \sa localSendingState() */ /** * \fn void MediaStream::remoteSendingStateChanged( * Tp::MediaStream::SendingState &remoteSendingState) * * Emitted when the remote sending state of this media stream changes. * * \param remoteSendingState The new remote sending state of this media stream. * \sa remoteSendingState() */ void StreamedMediaStream::gotContact(PendingOperation *op) { PendingContacts *pc = qobject_cast(op); Q_ASSERT(pc->isForHandles()); if (op->isError()) { warning().nospace() << "Gathering media stream contact failed: " << op->errorName() << ": " << op->errorMessage(); mPriv->readinessHelper->setIntrospectCompleted(FeatureCore, false, op->errorName(), op->errorMessage()); return; } QList contacts = pc->contacts(); UIntList invalidHandles = pc->invalidHandles(); if (contacts.size()) { Q_ASSERT(contacts.size() == 1); Q_ASSERT(invalidHandles.size() == 0); mPriv->contact = contacts.first(); debug() << "Got stream contact"; debug() << "Stream ready"; mPriv->readinessHelper->setIntrospectCompleted(FeatureCore, true); } else { Q_ASSERT(invalidHandles.size() == 1); warning().nospace() << "Error retrieving media stream contact (invalid handle)"; mPriv->readinessHelper->setIntrospectCompleted(FeatureCore, false, TP_QT_ERROR_INVALID_ARGUMENT, QLatin1String("Invalid contact handle")); } } void StreamedMediaStream::gotDirection(uint direction, uint pendingSend) { if (direction == mPriv->direction && pendingSend == mPriv->pendingSend) { return; } SendingState oldLocalState = mPriv->localSendingStateFromDirection(); SendingState oldRemoteState = mPriv->remoteSendingStateFromDirection(); mPriv->direction = direction; mPriv->pendingSend = pendingSend; if (!isReady()) { return; } SendingState localSendingState = mPriv->localSendingStateFromDirection(); if (localSendingState != oldLocalState) { emit localSendingStateChanged(localSendingState); } SendingState remoteSendingState = mPriv->remoteSendingStateFromDirection(); if (remoteSendingState != oldRemoteState) { emit remoteSendingStateChanged(remoteSendingState); } } void StreamedMediaStream::gotStreamState(uint state) { if (state == mPriv->state) { return; } mPriv->state = state; } /* ====== StreamedMediaChannel ====== */ struct TP_QT_NO_EXPORT StreamedMediaChannel::Private { Private(StreamedMediaChannel *parent); ~Private(); static void introspectStreams(Private *self); static void introspectLocalHoldState(Private *self); // Public object StreamedMediaChannel *parent; // Mandatory properties interface proxy Client::DBus::PropertiesInterface *properties; ReadinessHelper *readinessHelper; // Introspection StreamedMediaStreams incompleteStreams; StreamedMediaStreams streams; LocalHoldState localHoldState; LocalHoldStateReason localHoldStateReason; }; StreamedMediaChannel::Private::Private(StreamedMediaChannel *parent) : parent(parent), properties(parent->interface()), readinessHelper(parent->readinessHelper()), localHoldState(LocalHoldStateUnheld), localHoldStateReason(LocalHoldStateReasonNone) { ReadinessHelper::Introspectables introspectables; ReadinessHelper::Introspectable introspectableStreams( QSet() << 0, // makesSenseForStatuses Features() << Channel::FeatureCore, // dependsOnFeatures (core) QStringList(), // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::introspectStreams, this); introspectables[FeatureStreams] = introspectableStreams; ReadinessHelper::Introspectable introspectableLocalHoldState( QSet() << 0, // makesSenseForStatuses Features() << Channel::FeatureCore, // dependsOnFeatures (core) QStringList() << TP_QT_IFACE_CHANNEL_INTERFACE_HOLD, // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::introspectLocalHoldState, this); introspectables[FeatureLocalHoldState] = introspectableLocalHoldState; readinessHelper->addIntrospectables(introspectables); } StreamedMediaChannel::Private::~Private() { } void StreamedMediaChannel::Private::introspectStreams(StreamedMediaChannel::Private *self) { StreamedMediaChannel *parent = self->parent; Client::ChannelTypeStreamedMediaInterface *streamedMediaInterface = parent->interface(); parent->connect(streamedMediaInterface, SIGNAL(StreamAdded(uint,uint,uint)), SLOT(onStreamAdded(uint,uint,uint))); parent->connect(streamedMediaInterface, SIGNAL(StreamRemoved(uint)), SLOT(onStreamRemoved(uint))); parent->connect(streamedMediaInterface, SIGNAL(StreamDirectionChanged(uint,uint,uint)), SLOT(onStreamDirectionChanged(uint,uint,uint))); parent->connect(streamedMediaInterface, SIGNAL(StreamStateChanged(uint,uint)), SLOT(onStreamStateChanged(uint,uint))); parent->connect(streamedMediaInterface, SIGNAL(StreamError(uint,uint,QString)), SLOT(onStreamError(uint,uint,QString))); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( streamedMediaInterface->ListStreams(), parent); parent->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher *)), SLOT(gotStreams(QDBusPendingCallWatcher *))); } void StreamedMediaChannel::Private::introspectLocalHoldState(StreamedMediaChannel::Private *self) { StreamedMediaChannel *parent = self->parent; Client::ChannelInterfaceHoldInterface *holdInterface = parent->interface(); parent->connect(holdInterface, SIGNAL(HoldStateChanged(uint,uint)), SLOT(onLocalHoldStateChanged(uint,uint))); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( holdInterface->GetHoldState(), parent); parent->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotLocalHoldState(QDBusPendingCallWatcher*))); } /** * \class StreamedMediaChannel * \ingroup clientchannel * \headerfile TelepathyQt/streamed-media-channel.h * * \brief The StreamedMediaChannel class represents a Telepathy channel of type StreamedMedia. * * For more details, please refer to \telepathy_spec. * * See \ref async_model, \ref shared_ptr */ /** * Feature representing the core that needs to become ready to make the * StreamedMediaChannel object usable. * * This is currently the same as Channel::FeatureCore, but may change to include more. * * When calling isReady(), becomeReady(), this feature is implicitly added * to the requested features. * \sa awaitingLocalAnswer(), awaitingRemoteAnswer(), acceptCall(), hangupCall(), handlerStreamingRequired() */ const Feature StreamedMediaChannel::FeatureCore = Feature(QLatin1String(Channel::staticMetaObject.className()), 0, true); /** * Feature used in order to access media stream specific methods. * * See media stream specific methods' documentation for more details. * \sa streams(), streamsForType(), * requestStream(), requestStreams(), streamAdded() * removeStream(), removeStreams(), streamRemoved(), * streamDirectionChanged(), streamStateChanged(), streamError() */ const Feature StreamedMediaChannel::FeatureStreams = Feature(QLatin1String(StreamedMediaChannel::staticMetaObject.className()), 0); /** * Feature used in order to access local hold state info. * * See local hold state specific methods' documentation for more details. * \sa localHoldState(), localHoldStateReason(), requestHold(), localHoldStateChanged() */ const Feature StreamedMediaChannel::FeatureLocalHoldState = Feature(QLatin1String(StreamedMediaChannel::staticMetaObject.className()), 1); /** * Create a new StreamedMediaChannel object. * * \param connection Connection owning this channel, and specifying the * service. * \param objectPath The channel object path. * \param immutableProperties The channel immutable properties. * \return A StreamedMediaChannelPtr object pointing to the newly created * StreamedMediaChannel object. */ StreamedMediaChannelPtr StreamedMediaChannel::create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) { return StreamedMediaChannelPtr(new StreamedMediaChannel(connection, objectPath, immutableProperties, StreamedMediaChannel::FeatureCore)); } /** * Construct a new StreamedMediaChannel object. * * \param connection Connection owning this channel, and specifying the * service. * \param objectPath The channel object path. * \param immutableProperties The channel immutable properties. * \param coreFeature The core feature of the channel type, if any. The corresponding introspectable should * depend on StreamedMediaChannel::FeatureCore. */ StreamedMediaChannel::StreamedMediaChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature) : Channel(connection, objectPath, immutableProperties, coreFeature), mPriv(new Private(this)) { } /** * Class destructor. */ StreamedMediaChannel::~StreamedMediaChannel() { delete mPriv; } /** * Return a list of media streams in this channel. * * This methods requires StreamedMediaChannel::FeatureStreams to be ready. * * \return A list of pointers to StreamedMediaStream objects. * \sa streamAdded(), streamRemoved(), streamsForType(), requestStreams() */ StreamedMediaStreams StreamedMediaChannel::streams() const { return mPriv->streams; } /** * Return a list of media streams in this channel for the given type \a type. * * This methods requires StreamedMediaChannel::FeatureStreams to be ready. * * \param type The interested type. * \return A list of pointers to StreamedMediaStream objects. * \sa streamAdded(), streamRemoved(), streams(), requestStreams() */ StreamedMediaStreams StreamedMediaChannel::streamsForType(MediaStreamType type) const { StreamedMediaStreams ret; foreach (const StreamedMediaStreamPtr &stream, mPriv->streams) { if (stream->type() == type) { ret << stream; } } return ret; } /** * Return whether this channel is awaiting local answer. * * This method requires StreamedMediaChannel::FeatureCore to be ready. * * \return \c true if awaiting local answer, \c false otherwise. * \sa awaitingRemoteAnswer(), acceptCall() */ bool StreamedMediaChannel::awaitingLocalAnswer() const { return groupSelfHandleIsLocalPending(); } /** * Return whether this channel is awaiting remote answer. * * This method requires StreamedMediaChannel::FeatureCore to be ready. * * \return \c true if awaiting remote answer, \c false otherwise. * \sa awaitingLocalAnswer() */ bool StreamedMediaChannel::awaitingRemoteAnswer() const { return !groupRemotePendingContacts().isEmpty(); } /** * Accept an incoming call. * * This method requires StreamedMediaChannel::FeatureCore to be ready. * * \return A PendingOperation which will emit PendingOperation::finished * when the call has finished. * \sa awaitingLocalAnswer(), hangupCall() */ PendingOperation *StreamedMediaChannel::acceptCall() { return groupAddSelfHandle(); } /** * Remove the specified media stream from this channel. * * This methods requires StreamedMediaChannel::FeatureStreams to be ready. * * \param stream Media stream to remove. * \return A PendingOperation which will emit PendingOperation::finished * when the call has finished. * \sa streamRemoved(), streams(), streamsForType() */ PendingOperation *StreamedMediaChannel::removeStream(const StreamedMediaStreamPtr &stream) { if (!stream) { return new PendingFailure(TP_QT_ERROR_INVALID_ARGUMENT, QLatin1String("Unable to remove a null stream"), StreamedMediaChannelPtr(this)); } // StreamedMedia.RemoveStreams will trigger StreamedMedia.StreamRemoved // that will proper remove the stream Client::ChannelTypeStreamedMediaInterface *streamedMediaInterface = interface(); return new PendingVoid( streamedMediaInterface->RemoveStreams( UIntList() << stream->id()), StreamedMediaChannelPtr(this)); } /** * Remove the specified media streams from this channel. * * This methods requires StreamedMediaChannel::FeatureStreams to be ready. * * \param streams List of media streams to remove. * \return A PendingOperation which will emit PendingOperation::finished * when the call has finished. * \sa streamRemoved(), streams(), streamsForType() */ PendingOperation *StreamedMediaChannel::removeStreams(const StreamedMediaStreams &streams) { UIntList ids; foreach (const StreamedMediaStreamPtr &stream, streams) { if (!stream) { continue; } ids << stream->id(); } if (ids.isEmpty()) { return new PendingFailure(TP_QT_ERROR_INVALID_ARGUMENT, QLatin1String("Unable to remove invalid streams"), StreamedMediaChannelPtr(this)); } Client::ChannelTypeStreamedMediaInterface *streamedMediaInterface = interface(); return new PendingVoid( streamedMediaInterface->RemoveStreams(ids), StreamedMediaChannelPtr(this)); } /** * Request that media streams be established to exchange the given type \a type * of media with the given contact \a contact. * * This methods requires StreamedMediaChannel::FeatureStreams to be ready. * * \return A PendingStreamedMediaStreams which will emit PendingStreamedMediaStreams::finished * when the call has finished. * \sa streamAdded(), streams(), streamsForType() */ PendingStreamedMediaStreams *StreamedMediaChannel::requestStream( const ContactPtr &contact, MediaStreamType type) { return new PendingStreamedMediaStreams(StreamedMediaChannelPtr(this), contact, QList() << type); } /** * Request that media streams be established to exchange the given types \a * types of media with the given contact \a contact. * * This methods requires StreamedMediaChannel::FeatureStreams to be ready. * * \return A PendingStreamedMediaStreams which will emit PendingStreamedMediaStreams::finished * when the call has finished. * \sa streamAdded(), streams(), streamsForType() */ PendingStreamedMediaStreams *StreamedMediaChannel::requestStreams( const ContactPtr &contact, QList types) { return new PendingStreamedMediaStreams(StreamedMediaChannelPtr(this), contact, types); } /** * Request that the call is ended. * * This method requires StreamedMediaChannel::FeatureCore to be ready. * * \return A PendingOperation which will emit PendingOperation::finished * when the call has finished. */ PendingOperation *StreamedMediaChannel::hangupCall() { return requestLeave(); } /** * Check whether media streaming by the handler is required for this channel. * * For channels with the #TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING interface, * the main handler of the channel is responsible for doing the actual streaming, for instance by * calling createFarsightChannel(channel) from TelepathyQt-Farsight library * and using the telepathy-farsight API on the resulting TfChannel. * * This method requires StreamedMediaChannel::FeatureCore to be ready. * * \return \c true if required, \c false otherwise. */ bool StreamedMediaChannel::handlerStreamingRequired() const { return interfaces().contains( TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING); } /** * Return the local hold state for this channel. * * Whether the local user has placed this channel on hold. * * This method requires StreamedMediaChannel::FeatureHoldState to be ready. * * \return The local hold state as #LocalHoldState. * \sa requestHold(), localHoldStateChanged() */ LocalHoldState StreamedMediaChannel::localHoldState() const { if (!isReady(FeatureLocalHoldState)) { warning() << "StreamedMediaChannel::localHoldState() used with FeatureLocalHoldState not ready"; } else if (!interfaces().contains(TP_QT_IFACE_CHANNEL_INTERFACE_HOLD)) { warning() << "StreamedMediaChannel::localHoldStateReason() used with no hold interface"; } return mPriv->localHoldState; } /** * Return the reason why localHoldState() changed to its current value. * * This method requires StreamedMediaChannel::FeatureLocalHoldState to be ready. * * \return The local hold state reason as #LocalHoldStateReason. * \sa requestHold(), localHoldStateChanged() */ LocalHoldStateReason StreamedMediaChannel::localHoldStateReason() const { if (!isReady(FeatureLocalHoldState)) { warning() << "StreamedMediaChannel::localHoldStateReason() used with FeatureLocalHoldState not ready"; } else if (!interfaces().contains(TP_QT_IFACE_CHANNEL_INTERFACE_HOLD)) { warning() << "StreamedMediaChannel::localHoldStateReason() used with no hold interface"; } return mPriv->localHoldStateReason; } /** * Request that the channel be put on hold (be instructed not to send any media * streams to you) or be taken off hold. * * If the CM can immediately tell that the requested state * change could not possibly succeed, the resulting PendingOperation will fail * with error code #TP_QT_ERROR_NOT_AVAILABLE. * If the requested state is the same as the current state, the resulting * PendingOperation will finish successfully. * * Otherwise, the channel's local hold state will change to * #LocalHoldStatePendingHold or #LocalHoldStatePendingUnhold (as * appropriate), then the resulting PendingOperation will finish successfully. * * The eventual success or failure of the request is indicated by a subsequent * localHoldStateChanged() signal, changing the local hold state to * #LocalHoldStateHeld or #LocalHoldStateUnheld. * * If the channel has multiple streams, and the connection manager succeeds in * changing the hold state of one stream but fails to change the hold state of * another, it will attempt to revert all streams to their previous hold * states. * * If the channel does not support the #TP_QT_IFACE_CHANNEL_INTERFACE_HOLD * interface, the PendingOperation will fail with error code * #TP_QT_ERROR_NOT_IMPLEMENTED. * * \param hold A boolean indicating whether or not the channel should be on hold * \return A PendingOperation which will emit PendingOperation::finished * when the request finishes. * \sa localHoldState(), localHoldStateReason(), localHoldStateChanged() */ PendingOperation *StreamedMediaChannel::requestHold(bool hold) { if (!interfaces().contains(TP_QT_IFACE_CHANNEL_INTERFACE_HOLD)) { warning() << "StreamedMediaChannel::requestHold() used with no hold interface"; return new PendingFailure(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("StreamedMediaChannel does not support hold interface"), StreamedMediaChannelPtr(this)); } Client::ChannelInterfaceHoldInterface *holdInterface = interface(); return new PendingVoid(holdInterface->RequestHold(hold), StreamedMediaChannelPtr(this)); } /** * \fn void StreamedMediaChannel::streamAdded(const Tp::StreamedMediaStreamPtr &stream) * * Emitted when a media stream is added to this channel. * * \param stream The media stream that was added. * \sa streams(), streamsForType(), streamRemoved() */ /** * \fn void StreamedMediaChannel::streamRemoved(const Tp::StreamedMediaStreamPtr &stream) * * Emitted when a media stream is removed from this channel. * * \param stream The media stream that was removed. * \sa streams(), streamsForType(), streamAdded() */ /** * \fn void StreamedMediaChannel::streamDirectionChanged( * const Tp::StreamedMediaStreamPtr &stream, Tp::MediaStreamDirection direction, * Tp::MediaStreamPendingSend pendingSend) * * Emitted when a media stream direction changes. * * \param stream The media stream which the direction changed. * \param direction The new direction of the stream that changed. * \param pendingSend The new pending send flags of the stream that changed. * \sa StreamedMediaStream::direction() */ /** * \fn void StreamedMediaChannel::streamStateChanged( * const Tp::StreamedMediaStreamPtr &stream, Tp::MediaStreamState state) * * Emitted when a media stream state changes. * * \param stream The media stream which the state changed. * \param state The new state of the stream that changed. * \sa StreamedMediaStream::state() */ /** * \fn void StreamedMediaChannel::streamError( * const Tp::StreamedMediaStreamPtr &stream, * Tp::StreamedMediaStreamError errorCode, const QString &errorMessage) * * Emitted when an error occurs on a media stream. * * \param stream The media stream which the error occurred. * \param errorCode The error code. * \param errorMessage The error message. */ /** * \fn void StreamedMediaChannel::localHoldStateChanged(Tp::LocalHoldState state, Tp::LocalHoldStateReason reason); * * Emitted when the local hold state of this channel changes. * * \param state The new local hold state of this channel. * \param reason The reason why the change occurred. * \sa localHoldState(), localHoldStateReason() */ void StreamedMediaChannel::onStreamReady(PendingOperation *op) { PendingReady *pr = qobject_cast(op); StreamedMediaStreamPtr stream = StreamedMediaStreamPtr::qObjectCast(pr->proxy()); if (op->isError()) { mPriv->incompleteStreams.removeOne(stream); if (!isReady(FeatureStreams) && mPriv->incompleteStreams.size() == 0) { // let's not fail because a stream could not become ready mPriv->readinessHelper->setIntrospectCompleted(FeatureStreams, true); } return; } // the stream was removed before become ready if (!mPriv->incompleteStreams.contains(stream)) { if (!isReady(FeatureStreams) && mPriv->incompleteStreams.size() == 0) { mPriv->readinessHelper->setIntrospectCompleted(FeatureStreams, true); } return; } mPriv->incompleteStreams.removeOne(stream); mPriv->streams.append(stream); if (isReady(FeatureStreams)) { emit streamAdded(stream); } if (!isReady(FeatureStreams) && mPriv->incompleteStreams.size() == 0) { mPriv->readinessHelper->setIntrospectCompleted(FeatureStreams, true); } } void StreamedMediaChannel::gotStreams(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (reply.isError()) { warning().nospace() << "StreamedMedia.ListStreams failed with" << reply.error().name() << ": " << reply.error().message(); mPriv->readinessHelper->setIntrospectCompleted(FeatureStreams, false, reply.error()); watcher->deleteLater(); return; } debug() << "Got reply to StreamedMedia::ListStreams()"; MediaStreamInfoList streamInfoList = reply.value(); if (streamInfoList.size() > 0) { foreach (const MediaStreamInfo &streamInfo, streamInfoList) { StreamedMediaStreamPtr stream = lookupStreamById( streamInfo.identifier); if (!stream) { addStream(streamInfo); } else { onStreamDirectionChanged(streamInfo.identifier, streamInfo.direction, streamInfo.pendingSendFlags); onStreamStateChanged(streamInfo.identifier, streamInfo.state); } } } else { mPriv->readinessHelper->setIntrospectCompleted(FeatureStreams, true); } watcher->deleteLater(); } void StreamedMediaChannel::onStreamAdded(uint streamId, uint contactHandle, uint streamType) { if (lookupStreamById(streamId)) { debug() << "Received StreamedMedia.StreamAdded for an existing " "stream, ignoring"; return; } MediaStreamInfo streamInfo = { streamId, contactHandle, streamType, MediaStreamStateDisconnected, MediaStreamDirectionReceive, MediaStreamPendingLocalSend }; addStream(streamInfo); } void StreamedMediaChannel::onStreamRemoved(uint streamId) { debug() << "Received StreamedMedia.StreamRemoved for stream" << streamId; StreamedMediaStreamPtr stream = lookupStreamById(streamId); if (!stream) { return; } bool incomplete = mPriv->incompleteStreams.contains(stream); if (incomplete) { mPriv->incompleteStreams.removeOne(stream); } else { mPriv->streams.removeOne(stream); } if (isReady(FeatureStreams) && !incomplete) { emit streamRemoved(stream); } // the stream was added/removed before become ready if (!isReady(FeatureStreams) && mPriv->streams.size() == 0 && mPriv->incompleteStreams.size() == 0) { mPriv->readinessHelper->setIntrospectCompleted(FeatureStreams, true); } } void StreamedMediaChannel::onStreamDirectionChanged(uint streamId, uint streamDirection, uint streamPendingFlags) { debug() << "Received StreamedMedia.StreamDirectionChanged for stream" << streamId << "with direction changed to" << streamDirection; StreamedMediaStreamPtr stream = lookupStreamById(streamId); if (!stream) { return; } uint oldDirection = stream->direction(); uint oldPendingFlags = stream->pendingSend(); stream->gotDirection(streamDirection, streamPendingFlags); if (oldDirection != streamDirection || oldPendingFlags != streamPendingFlags) { emit streamDirectionChanged(stream, (MediaStreamDirection) streamDirection, (MediaStreamPendingSend) streamPendingFlags); } } void StreamedMediaChannel::onStreamStateChanged(uint streamId, uint streamState) { debug() << "Received StreamedMedia.StreamStateChanged for stream" << streamId << "with state changed to" << streamState; StreamedMediaStreamPtr stream = lookupStreamById(streamId); if (!stream) { return; } uint oldState = stream->state(); stream->gotStreamState(streamState); if (oldState != streamState) { emit streamStateChanged(stream, (MediaStreamState) streamState); } } void StreamedMediaChannel::onStreamError(uint streamId, uint errorCode, const QString &errorMessage) { debug() << "Received StreamedMedia.StreamError for stream" << streamId << "with error code" << errorCode << "and message:" << errorMessage; StreamedMediaStreamPtr stream = lookupStreamById(streamId); if (!stream) { return; } emit streamError(stream, (MediaStreamError) errorCode, errorMessage); } void StreamedMediaChannel::gotLocalHoldState(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (reply.isError()) { warning().nospace() << "StreamedMedia::Hold::GetHoldState()" " failed with " << reply.error().name() << ": " << reply.error().message(); debug() << "Ignoring error getting hold state and assuming we're not " "on hold"; onLocalHoldStateChanged(mPriv->localHoldState, mPriv->localHoldStateReason); watcher->deleteLater(); return; } debug() << "Got reply to StreamedMedia::Hold::GetHoldState()"; onLocalHoldStateChanged(reply.argumentAt<0>(), reply.argumentAt<1>()); watcher->deleteLater(); } void StreamedMediaChannel::onLocalHoldStateChanged(uint localHoldState, uint localHoldStateReason) { bool changed = false; if (mPriv->localHoldState != static_cast(localHoldState) || mPriv->localHoldStateReason != static_cast(localHoldStateReason)) { changed = true; } mPriv->localHoldState = static_cast(localHoldState); mPriv->localHoldStateReason = static_cast(localHoldStateReason); if (!isReady(FeatureLocalHoldState)) { mPriv->readinessHelper->setIntrospectCompleted(FeatureLocalHoldState, true); } else { if (changed) { emit localHoldStateChanged(mPriv->localHoldState, mPriv->localHoldStateReason); } } } StreamedMediaStreamPtr StreamedMediaChannel::addStream(const MediaStreamInfo &streamInfo) { StreamedMediaStreamPtr stream = StreamedMediaStreamPtr( new StreamedMediaStream(StreamedMediaChannelPtr(this), streamInfo)); mPriv->incompleteStreams.append(stream); connect(stream->becomeReady(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onStreamReady(Tp::PendingOperation*))); return stream; } StreamedMediaStreamPtr StreamedMediaChannel::lookupStreamById(uint streamId) { foreach (const StreamedMediaStreamPtr &stream, mPriv->streams) { if (stream->id() == streamId) { return stream; } } foreach (const StreamedMediaStreamPtr &stream, mPriv->incompleteStreams) { if (stream->id() == streamId) { return stream; } } return StreamedMediaStreamPtr(); } } // Tp telepathy-qt-0.9.3/TelepathyQt/file-transfer-channel-creation-properties.cpp0000644000175200001440000002704612000056607031540 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include #include "TelepathyQt/debug-internal.h" #include #include #include namespace Tp { struct TP_QT_NO_EXPORT FileTransferChannelCreationProperties::Private : public QSharedData { Private(const QString &suggestedFileName, const QString &contentType, qulonglong size) : contentType(contentType), size(size), contentHashType(FileHashTypeNone) { QFileInfo fileInfo(suggestedFileName); this->suggestedFileName = fileInfo.fileName(); } Private(const QString &path, const QString &contentType) : contentType(contentType), contentHashType(FileHashTypeNone) { QFileInfo fileInfo(path); if (fileInfo.exists()) { // Set mandatory parameters suggestedFileName = fileInfo.fileName(); size = fileInfo.size(); QUrl fileUri = QUrl::fromLocalFile(fileInfo.canonicalFilePath()); uri = fileUri.toString(); // Set optional parameters lastModificationTime = fileInfo.lastModified(); } else { warning() << path << "is not a local file."; } } /* mandatory parameters */ QString suggestedFileName; QString contentType; qulonglong size; /* optional parameters */ FileHashType contentHashType; QString contentHash; QString description; QDateTime lastModificationTime; QString uri; }; /** * \class FileTransferChannelCreationProperties * \ingroup clientchannel * \headerfile TelepathyQt/file-transfer-channel-creation-properties.h * * \brief The FileTransferChannelCreationProperties class represents the * properties of a file transfer channel request. */ /** * Create an invalid FileTransferChannelCreationProperties. */ FileTransferChannelCreationProperties::FileTransferChannelCreationProperties() { } /** * Create a FileTransferChannelCreationProperties. * * If \a suggestedFileName or \a contentType are empty or if \a size is equal to * zero, the channel request will fail. * \a suggestedFileName will be cleaned of any path. * * \param suggestedFileName The name of the file on the sender's side. This is * therefore given as a suggested filename for the * receiver. * \param contentType The content type (MIME) of the file. * \param size The size of the content of the file. * \sa setUri() */ FileTransferChannelCreationProperties::FileTransferChannelCreationProperties( const QString &suggestedFileName, const QString &contentType, qulonglong size) : mPriv(new Private(suggestedFileName, contentType, size)) { } /** * Create a FileTransferChannelCreationProperties. * * This constructor accepts the path to a local file and sets the properties * that can be deducted from the file. * If \a path is not a local file the FileTransferChannelCreationProperties * will be invalid. * * \param path The path to the local file to be sent. */ FileTransferChannelCreationProperties::FileTransferChannelCreationProperties( const QString &path, const QString &contentType) : mPriv(new Private(path, contentType)) { if (mPriv->suggestedFileName.isEmpty()) { mPriv = QSharedDataPointer(NULL); } } /** * Copy constructor. */ FileTransferChannelCreationProperties::FileTransferChannelCreationProperties( const FileTransferChannelCreationProperties &other) : mPriv(other.mPriv) { } /** * Class destructor. */ FileTransferChannelCreationProperties::~FileTransferChannelCreationProperties() { } FileTransferChannelCreationProperties &FileTransferChannelCreationProperties::operator=( const FileTransferChannelCreationProperties &other) { this->mPriv = other.mPriv; return *this; } bool FileTransferChannelCreationProperties::operator==( const FileTransferChannelCreationProperties &other) const { return mPriv == other.mPriv; } /** * Set the content hash of the file and its type for the request. * * \param contentHashType The type of content hash. * \param contentHash The hash of the file, of type \a contentHashType. * \return This FileTransferChannelCreationProperties. * \sa hasContentHash(), contentHash(), contentHashType() */ FileTransferChannelCreationProperties &FileTransferChannelCreationProperties::setContentHash( FileHashType contentHashType, const QString &contentHash) { if (!isValid()) { // there is no point in updating content hash if not valid, as we miss filename, content // type and size return *this; } mPriv->contentHashType = contentHashType; mPriv->contentHash = contentHash; return *this; } /** * Set a description of the file for the request. * * \param description The description of the file. * \return This FileTransferChannelCreationProperties. * \sa hasDescription(), description() */ FileTransferChannelCreationProperties &FileTransferChannelCreationProperties::setDescription( const QString &description) { if (!isValid()) { // there is no point in updating description if not valid, as we miss filename, content // type and size return *this; } mPriv->description = description; return *this; } /** * Set the last modification time of the file for the request. * * \param lastModificationTime The last modification time of the file. * \return This FileTransferChannelCreationProperties. * \sa hasLastModificationTime(), lastModificationTime() */ FileTransferChannelCreationProperties &FileTransferChannelCreationProperties::setLastModificationTime( const QDateTime &lastModificationTime) { if (!isValid()) { // there is no point in updating last modification time if not valid, as we miss filename, // content type and size return *this; } mPriv->lastModificationTime = lastModificationTime; return *this; } /** * Set the URI of the file for the request. * * \param uri The URI of the file. * \return This FileTransferChannelCreationProperties. * \sa uri() */ FileTransferChannelCreationProperties &FileTransferChannelCreationProperties::setUri( const QString &uri) { if (!isValid()) { // there is no point in updating uri if not valid, as we miss filename, content // type and size return *this; } mPriv->uri = uri; return *this; } /** * Return the suggested file name for the request. * If the suggested file name is empty, the channel request will fail. * * \return The suggested file name for the request. */ QString FileTransferChannelCreationProperties::suggestedFileName() const { if (!isValid()) { return QString(); } return mPriv->suggestedFileName; } /** * Return the content type (MIME) of the file for the request. * If the content type is empty, the channel request will fail. * * \return The content type of the file. */ QString FileTransferChannelCreationProperties::contentType() const { if (!isValid()) { return QString(); } return mPriv->contentType; } /** * Return the size of the contents of the file for the request. * If size is zero, the channel request will fail. * * \return The size of the contents of file. */ qulonglong FileTransferChannelCreationProperties::size() const { if (!isValid()) { return 0; } return mPriv->size; } /** * Return whether the request will have a content hash. * * \return \c true whether it will have a content hash, \c false otherwise. * \sa contentHash(), contentHashType(), setContentHash() */ bool FileTransferChannelCreationProperties::hasContentHash() const { if (!isValid()) { return false; } return (mPriv->contentHashType != FileHashTypeNone); } /** * Return the type of the content hash for the request. * * \return The type of the content hash. * \sa hasContentHash(), contentHash(), setContentHash() */ FileHashType FileTransferChannelCreationProperties::contentHashType() const { if (!isValid()) { return FileHashTypeNone; } return mPriv->contentHashType; } /** * Return the content hash of the file for the request. * * \return The hash of the contents of the file transfer, of type returned by * contentHashType(). * \sa hasContentHash(), contentHashType(), setContentHash() */ QString FileTransferChannelCreationProperties::contentHash() const { if (!isValid()) { return QString(); } return mPriv->contentHash; } /** * Return whether the request will have a descriprion. * * \return \c true whether it will have description, \c false otherwise. * \sa description(), setDescription() */ bool FileTransferChannelCreationProperties::hasDescription() const { if (!isValid()) { return false; } return (!mPriv->description.isEmpty()); } /** * Return the description of the file for the request. * * \return The description of the file. * \sa hasDescription(), setDescription() */ QString FileTransferChannelCreationProperties::description() const { if (!isValid()) { return QString(); } return mPriv->description; } /** * Return whether the request will have a last modification time. * * \return \c true whether it will have a last modification time, \c false * otherwise. * \sa lastModificationTime(), setLastModificationTime() */ bool FileTransferChannelCreationProperties::hasLastModificationTime() const { if (!isValid()) { return false; } return (mPriv->lastModificationTime.isValid()); } /** * Return the last modification time of the file for the request. * * \return The last modification time of the file. * \sa hasLastModificationTime(), setLastModificationTime() */ QDateTime FileTransferChannelCreationProperties::lastModificationTime() const { if (!isValid()) { return QDateTime(); } return mPriv->lastModificationTime; } /** * Return whether the request will have an URI. * * \return \c true whether it will have URI, \c false otherwise. * \sa uri(), setUri() */ bool FileTransferChannelCreationProperties::hasUri() const { if (!isValid()) { return false; } return (!mPriv->uri.isEmpty()); } /** * Return the URI of the file for the request. * If the URI property is empty and the file transfer is handled by an handler * that is not this process, then it won't be able to initiate the file * transfer. * * \return The URI of the file. * \sa setUri() */ QString FileTransferChannelCreationProperties::uri() const { if (!isValid()) { return QString(); } return mPriv->uri; } } // Tp telepathy-qt-0.9.3/TelepathyQt/PendingAccount0000644000175200001440000000037112000056607023505 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_PendingAccount_HEADER_GUARD_ #define _TelepathyQt_PendingAccount_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/stream-tube-client-internal.h0000644000175200001440000000417312000056607026354 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include #include #include namespace Tp { class TP_QT_NO_EXPORT StreamTubeClient::TubeWrapper : public QObject { Q_OBJECT Q_DISABLE_COPY(TubeWrapper) public: TubeWrapper(const AccountPtr &acc, const IncomingStreamTubeChannelPtr &tube, const QHostAddress &sourceAddress, quint16 sourcePort, StreamTubeClient *parent); TubeWrapper(const AccountPtr &acc, const IncomingStreamTubeChannelPtr &tube, bool requireCredentials, StreamTubeClient *parent); ~TubeWrapper() { } AccountPtr mAcc; IncomingStreamTubeChannelPtr mTube; QHostAddress mSourceAddress; quint16 mSourcePort; Q_SIGNALS: void acceptFinished(TubeWrapper *wrapper, Tp::PendingStreamTubeConnection *conn); void newConnection(TubeWrapper *wrapper, uint conn); void connectionClosed(TubeWrapper *wrapper, uint conn, const QString &error, const QString &message); private Q_SLOTS: void onTubeAccepted(Tp::PendingOperation *); void onNewConnection(uint); void onConnectionClosed(uint, const QString &, const QString &); }; } // Tp telepathy-qt-0.9.3/TelepathyQt/ServerAuthenticationChannel0000644000175200001440000000044112000056607026241 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ServerAuthenticationChannel_HEADER_GUARD_ #define _TelepathyQt_ServerAuthenticationChannel_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/generic-property-filter.h0000644000175200001440000000426612000056607025622 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_generic_property_filter_h_HEADER_GUARD_ #define _TelepathyQt_generic_property_filter_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include namespace Tp { template class GenericPropertyFilter : public Filter { public: inline virtual ~GenericPropertyFilter() { } inline virtual bool isValid() const { return true; } inline virtual bool matches(const SharedPtr &t) const { for (QVariantMap::const_iterator i = mFilter.constBegin(); i != mFilter.constEnd(); ++i) { QString propertyName = i.key(); QVariant propertyValue = i.value(); if (t->property(propertyName.toLatin1().constData()) != propertyValue) { return false; } } return true; } inline QVariantMap filter() const { return mFilter; } inline void addProperty(const QString &propertyName, const QVariant &propertyValue) { mFilter.insert(propertyName, propertyValue); } inline void setProperties(const QVariantMap &filter) { mFilter = filter; } protected: inline GenericPropertyFilter() : Filter() { } private: QVariantMap mFilter; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/CaptchaAuthentication0000644000175200001440000000041612000056607025047 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_CaptchaAuthentication_HEADER_GUARD_ #define _TelepathyQt_CaptchaAuthentication_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/FileTransferChannelCreationProperties0000644000175200001440000000050112000056607030216 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_FileTransferChannelCreationProperties_HEADER_GUARD_ #define _TelepathyQt_FileTransferChannelCreationProperties_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/global.h0000644000175200001440000001103412000056607022270 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_global_h_HEADER_GUARD_ #define _TelepathyQt_global_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #ifdef BUILDING_TP_QT # define TP_QT_EXPORT Q_DECL_EXPORT #else # define TP_QT_EXPORT Q_DECL_IMPORT #endif #if !defined(Q_OS_WIN) && defined(QT_VISIBILITY_AVAILABLE) # define TP_QT_NO_EXPORT __attribute__((visibility("hidden"))) #endif #ifndef TP_QT_NO_EXPORT # define TP_QT_NO_EXPORT #endif /** * @def TP_QT_DEPRECATED * @ingroup macros * * The TP_QT_DEPRECATED macro can be used to trigger compile-time * warnings with newer compilers when deprecated functions are used. * * For non-inline functions, the macro gets inserted at front of the * function declaration, right before the return type: * * \code * TP_QT_DEPRECATED void deprecatedFunctionA(); * TP_QT_DEPRECATED int deprecatedFunctionB() const; * \endcode * * For functions which are implemented inline, * the TP_QT_DEPRECATED macro is inserted at the front, right before the * return type, but after "static", "inline" or "virtual": * * \code * TP_QT_DEPRECATED void deprecatedInlineFunctionA() { .. } * virtual TP_QT_DEPRECATED int deprecatedInlineFunctionB() { .. } * static TP_QT_DEPRECATED bool deprecatedInlineFunctionC() { .. } * inline TP_QT_DEPRECATED bool deprecatedInlineFunctionD() { .. } * \endcode * * You can also mark whole structs or classes as deprecated, by inserting the * TP_QT_DEPRECATED macro after the struct/class keyword, but before the * name of the struct/class: * * \code * class TP_QT_DEPRECATED DeprecatedClass { }; * struct TP_QT_DEPRECATED DeprecatedStruct { }; * \endcode * * \note If the class you want to deprecate is a QObject and needs to be exported, * you should use TP_QT_EXPORT_DEPRECATED instead. * * \note * It does not make much sense to use the TP_QT_DEPRECATED keyword for a * Qt signal; this is because usually get called by the class which they belong * to, and one would assume that a class author does not use deprecated methods * of his own class. The only exception to this are signals which are connected * to other signals; they get invoked from moc-generated code. In any case, * printing a warning message in either case is not useful. * For slots, it can make sense (since slots can be invoked directly) but be * aware that if the slots get triggered by a signal, they will get called from * moc code as well and thus the warnings are useless. * * \note * TP_QT_DEPRECATED cannot be used for constructors. */ #ifndef TP_QT_DEPRECATED # ifdef TP_QT_DEPRECATED_WARNINGS # ifdef BUILDING_TP_QT # define TP_QT_DEPRECATED # else # define TP_QT_DEPRECATED Q_DECL_DEPRECATED # endif # else # define TP_QT_DEPRECATED # endif #endif /** * @def TP_QT_EXPORT_DEPRECATED * @ingroup macros * * The TP_QT_EXPORT_DEPRECATED macro can be used to trigger compile-time * warnings with newer compilers when deprecated functions are used, and * export the symbol. * * This macro simply expands to TP_QT_DEPRECATED TP_QT_EXPORT, and needs * to be used only when you need to deprecate a class which is a QObject * and needs to be exported. This is because the following: * * \code * class TP_QT_DEPRECATED TP_QT_EXPORT Class : public QObject * \endcode * * Wouldn't be recognized from moc to be a valid QObject class, and hence * would be skipped. Instead, you should do: * * \code * class TP_QT_EXPORT_DEPRECATED Class : public QObject * \endcode * * For any other use, please use TP_QT_DEPRECATED instead. */ #ifndef TP_QT_EXPORT_DEPRECATED # define TP_QT_EXPORT_DEPRECATED TP_QT_DEPRECATED TP_QT_EXPORT #endif #endif telepathy-qt-0.9.3/TelepathyQt/incoming-dbus-tube-channel.h0000644000175200001440000000342712000056607026140 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @license LGPL 2.1 * * 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 _TelepathyQt_incoming_dbus_tube_channel_h_HEADER_GUARD_ #define _TelepathyQt_incoming_dbus_tube_channel_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include namespace Tp { class PendingDBusTubeConnection; class TP_QT_EXPORT IncomingDBusTubeChannel : public DBusTubeChannel { Q_OBJECT Q_DISABLE_COPY(IncomingDBusTubeChannel) public: static IncomingDBusTubeChannelPtr create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties); virtual ~IncomingDBusTubeChannel(); PendingDBusTubeConnection *acceptTube(bool allowOtherUsers = false); protected: IncomingDBusTubeChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties); private: struct Private; friend struct Private; Private *mPriv; }; } #endif telepathy-qt-0.9.3/TelepathyQt/ChannelInterfaceAnonymityInterface0000644000175200001440000000043112000056607027523 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelInterfaceAnonymityInterface_HEADER_GUARD_ #define _TelepathyQt_ChannelInterfaceAnonymityInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/AccountManagerInterface0000644000175200001440000000041312000056607025311 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_AccountManagerInterface_HEADER_GUARD_ #define _TelepathyQt_AccountManagerInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/ChannelTypeRoomListInterface0000644000175200001440000000041512000056607026327 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelTypeRoomListInterface_HEADER_GUARD_ #define _TelepathyQt_ChannelTypeRoomListInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/request-temporary-handler-internal.h0000644000175200001440000000617412000056607027776 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_request_temporary_handler_internal_h_HEADER_GUARD_ #define _TelepathyQt_request_temporary_handler_internal_h_HEADER_GUARD_ #include #include #include namespace Tp { class TP_QT_NO_EXPORT RequestTemporaryHandler : public QObject, public AbstractClientHandler { Q_OBJECT public: static SharedPtr create(const AccountPtr &account); ~RequestTemporaryHandler(); AccountPtr account() const { return mAccount; } ChannelPtr channel() const { return ChannelPtr(mChannel); } /** * Handlers we request ourselves never go through the approvers but this * handler shouldn't get any channels we didn't request - hence let's make * this always false to leave slightly less room for the CD to get confused and * give some channel we didn't request to us, without even asking an approver * first. Though if the CD isn't confused it shouldn't really matter - our filter * is empty anyway. */ bool bypassApproval() const { return false; } void handleChannels(const MethodInvocationContextPtr<> &context, const AccountPtr &account, const ConnectionPtr &connection, const QList &channels, const QList &requestsSatisfied, const QDateTime &userActionTime, const HandlerInfo &handlerInfo); void setQueueChannelReceived(bool queue); void setDBusHandlerInvoked(); void setDBusHandlerErrored(const QString &errorName, const QString &errorMessage); bool isDBusHandlerInvoked() const { return dbusHandlerInvoked; } Q_SIGNALS: void error(const QString &errorName, const QString &errorMessage); void channelReceived(const Tp::ChannelPtr &channel, const QDateTime &userActionTime, const Tp::ChannelRequestHints &requestHints); private: RequestTemporaryHandler(const AccountPtr &account); void processChannelReceivedQueue(); AccountPtr mAccount; WeakPtr mChannel; bool mQueueChannelReceived; QQueue > mChannelReceivedQueue; bool dbusHandlerInvoked; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/simple-observer-internal.h0000644000175200001440000002115212000056607025762 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include #include #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT SimpleObserver::Private { Private(SimpleObserver *parent, const AccountPtr &account, const ChannelClassSpecList &channelFilter, const QString &contactIdentifier, bool requiresNormalization, const QList &extraChannelFeatures); bool filterChannel(const AccountPtr &channelAccount, const ChannelPtr &channel); void insertChannels(const AccountPtr &channelsAccount, const QList &channels); void removeChannel(const AccountPtr &channelAccount, const ChannelPtr &channel, const QString &errorName, const QString &errorMessage); void processChannelsQueue(); void processNewChannelsQueue(); void processChannelsInvalidationQueue(); class FakeAccountFactory; class Observer; class ChannelWrapper; struct NewChannelsInfo; struct ChannelInvalidationInfo; SimpleObserver *parent; AccountPtr account; ChannelClassSpecList channelFilter; QString contactIdentifier; QString normalizedContactIdentifier; QList extraChannelFeatures; ClientRegistrarPtr cr; SharedPtr observer; QSet channels; QQueue channelsQueue; QQueue channelsInvalidationQueue; QQueue newChannelsQueue; static QHash >, WeakPtr > observers; static uint numObservers; }; class TP_QT_NO_EXPORT SimpleObserver::Private::FakeAccountFactory : public AccountFactory { Q_OBJECT public: static SharedPtr create(const QDBusConnection &bus) { return SharedPtr(new FakeAccountFactory(bus)); } ~FakeAccountFactory() { } private: friend class Observer; FakeAccountFactory(const QDBusConnection &bus) : AccountFactory(bus, Features()) { } AccountPtr construct(const QString &busName, const QString &objectPath, const ConnectionFactoryConstPtr &connFactory, const ChannelFactoryConstPtr &chanFactory, const ContactFactoryConstPtr &contactFactory) const { if (mAccounts.contains(objectPath)) { return mAccounts.value(objectPath); } return AccountFactory::construct(busName, objectPath, connFactory, chanFactory, contactFactory); } QHash accounts() const { return mAccounts; } void registerAccount(const AccountPtr &account) { mAccounts.insert(account->objectPath(), account); } QHash mAccounts; }; class TP_QT_NO_EXPORT SimpleObserver::Private::Observer : public QObject, public AbstractClientObserver { Q_OBJECT Q_DISABLE_COPY(Observer) public: struct ContextInfo { ContextInfo() {} ContextInfo(const MethodInvocationContextPtr<> &context, const AccountPtr &account, const QList &channels) : context(context), account(account), channels(channels) { } MethodInvocationContextPtr<> context; AccountPtr account; QList channels; }; Observer(const WeakPtr &cr, const SharedPtr &fakeAccountFactory, const ChannelClassSpecList &channelFilter, const QString &observerName); ~Observer(); WeakPtr clientRegistrar() const { return mCr; } SharedPtr fakeAccountFactory() const { return mFakeAccountFactory; } QString observerName() const { return mObserverName; } QSet extraChannelFeatures() const { return mExtraChannelFeatures; } void registerExtraChannelFeatures(const QList &features) { mExtraChannelFeatures.unite(features.toSet()); } QSet accounts() const { return mAccounts; } void registerAccount(const AccountPtr &account) { mAccounts.insert(account); mFakeAccountFactory->registerAccount(account); } QHash channels() const { return mChannels; } void observeChannels( const MethodInvocationContextPtr<> &context, const AccountPtr &account, const ConnectionPtr &connection, const QList &channels, const ChannelDispatchOperationPtr &dispatchOperation, const QList &requestsSatisfied, const ObserverInfo &observerInfo); Q_SIGNALS: void newChannels(const Tp::AccountPtr &channelsAccount, const QList &channels); void channelInvalidated(const Tp::AccountPtr &channelAccount, const Tp::ChannelPtr &channel, const QString &errorName, const QString &errorMessage); private Q_SLOTS: void onChannelInvalidated(const Tp::AccountPtr &channelAccount, const Tp::ChannelPtr &channel, const QString &errorName, const QString &errorMessage); void onChannelsReady(Tp::PendingOperation *op); private: Features featuresFor(const ChannelClassSpec &channelClass) const; WeakPtr mCr; SharedPtr mFakeAccountFactory; QString mObserverName; QSet mExtraChannelFeatures; QSet mAccounts; QHash mChannels; QHash mIncompleteChannels; QHash mObserveChannelsInfo; }; class TP_QT_NO_EXPORT SimpleObserver::Private::ChannelWrapper : public QObject { Q_OBJECT Q_DISABLE_COPY(ChannelWrapper) public: ChannelWrapper(const AccountPtr &channelAccount, const ChannelPtr &channel, const Features &extraChannelFeatures, QObject *parent); ~ChannelWrapper() { } AccountPtr channelAccount() const { return mChannelAccount; } ChannelPtr channel() const { return mChannel; } Features extraChannelFeatures() const { return mExtraChannelFeatures; } PendingOperation *becomeReady(); Q_SIGNALS: void channelInvalidated(const Tp::AccountPtr &channelAccount, const Tp::ChannelPtr &channel, const QString &errorName, const QString &errorMessage); private Q_SLOTS: void onChannelInvalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage); private: AccountPtr mChannelAccount; ChannelPtr mChannel; Features mExtraChannelFeatures; }; struct TP_QT_NO_EXPORT SimpleObserver::Private::NewChannelsInfo { NewChannelsInfo(); NewChannelsInfo(const AccountPtr &channelsAccount, const QList &channels) : channelsAccount(channelsAccount), channels(channels) { } AccountPtr channelsAccount; QList channels; }; struct TP_QT_NO_EXPORT SimpleObserver::Private::ChannelInvalidationInfo { ChannelInvalidationInfo(); ChannelInvalidationInfo(const AccountPtr &channelAccount, const ChannelPtr &channel, const QString &errorName, const QString &errorMessage) : channelAccount(channelAccount), channel(channel), errorName(errorName), errorMessage(errorMessage) { } AccountPtr channelAccount; ChannelPtr channel; QString errorName; QString errorMessage; }; } // Tp telepathy-qt-0.9.3/TelepathyQt/TelepathyQtService-uninstalled.pc.in0000644000175200001440000000111212000056607027711 0ustar00collabora-develusers00000000000000prefix=/nonexistent exec_prefix=/nonexistent abs_top_builddir=${CMAKE_BINARY_DIR} abs_top_srcdir=${CMAKE_SOURCE_DIR} Name: TelepathyQt${QT_VERSION_MAJOR}Service (uninstalled copy) Description: Qt Telepathy Service side bindings Version: ${PACKAGE_VERSION} Requires.private: QtCore >= ${QT_MIN_VERSION}, QtCore < ${QT_MAX_VERSION}, QtDBus >= ${QT_MIN_VERSION}, QtDBus < ${QT_MAX_VERSION}, TelepathyQt${QT_VERSION_MAJOR} = ${PACKAGE_VERSION} Libs: ${CMAKE_BINARY_DIR}/TelepathyQt/Farsight/libtelepathy-qt${QT_VERSION_MAJOR}-service.so Cflags: -I${CMAKE_SOURCE_DIR} -I${CMAKE_BINARY_DIR} telepathy-qt-0.9.3/TelepathyQt/debug.cpp0000644000175200001440000001055712000056607022462 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2009 Collabora Ltd. * @copyright Copyright (C) 2008-2009 Nokia Corporation * @license LGPL 2.1 * * 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 */ #define IN_TP_QT_HEADER #include "debug.h" #include "debug-internal.h" #include "config-version.h" /** * \defgroup debug Common debug support * * TelepathyQt has an internal mechanism for displaying debugging output. It * uses the Qt debugging subsystem, so if you want to redirect the messages, * use qInstallMsgHandler() from <QtGlobal>. * * Debugging output is divided into two categories: normal debug output and * warning messages. Normal debug output results in the normal operation of the * library, warning messages are output only when something goes wrong. Each * category can be invidually enabled. */ namespace Tp { /** * \fn void enableDebug(bool enable) * \ingroup debug * * Enable or disable normal debug output from the library. If the library is not * compiled with debug support enabled, this has no effect; no output is * produced in any case. * * The default is false ie. no debug output. * * \param enable Whether debug output should be enabled or not. */ /** * \fn void enableWarnings(bool enable) * \ingroup debug * * Enable or disable warning output from the library. If the library is not * compiled with debug support enabled, this has no effect; no output is * produced in any case. * * The default is true ie. warning output enabled. * * \param enable Whether warnings should be enabled or not. */ /** * \typedef DebugCallback * \ingroup debug * * \code * typedef QDebug (*DebugCallback)(const QString &libraryName, * const QString &libraryVersion, * QtMsgType type, * const QString &msg) * \endcode */ /** * \fn void setDebugCallback(DebugCallback cb) * \ingroup debug * * Set the callback method that will handle the debug output. * * If \p cb is NULL this method will set the defaultDebugCallback instead. * The default callback function will print the output using default Qt debug * system. * * \param cb A function pointer to the callback method or NULL. * \sa DebugCallback */ #ifdef ENABLE_DEBUG namespace { bool debugEnabled = false; bool warningsEnabled = true; DebugCallback debugCallback = NULL; } void enableDebug(bool enable) { debugEnabled = enable; } void enableWarnings(bool enable) { warningsEnabled = enable; } void setDebugCallback(DebugCallback cb) { debugCallback = cb; } Debug enabledDebug() { if (debugEnabled) { return Debug(QtDebugMsg); } else { return Debug(); } } Debug enabledWarning() { if (warningsEnabled) { return Debug(QtWarningMsg); } else { return Debug(); } } void Debug::invokeDebugCallback() { if (debugCallback) { debugCallback(QLatin1String("tp-qt"), QLatin1String(PACKAGE_VERSION), type, msg); } else { switch (type) { case QtDebugMsg: qDebug() << "tp-qt " PACKAGE_VERSION " DEBUG:" << qPrintable(msg); break; case QtWarningMsg: qWarning() << "tp-qt " PACKAGE_VERSION " WARN:" << qPrintable(msg); break; default: break; } } } #else /* !defined(ENABLE_DEBUG) */ void enableDebug(bool enable) { } void enableWarnings(bool enable) { } void setDebugCallback(DebugCallback cb) { } Debug enabledDebug() { return Debug(); } Debug enabledWarning() { return Debug(); } void Debug::invokeDebugCallback() { } #endif /* !defined(ENABLE_DEBUG) */ } // Tp telepathy-qt-0.9.3/TelepathyQt/AccountInterfaceStorageInterface0000644000175200001440000000042512000056607027167 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_AccountInterfaceStorageInterface_HEADER_GUARD_ #define _TelepathyQt_AccountInterfaceStorageInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/PendingStreamedMediaStreams0000644000175200001440000000043212000056607026152 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_PendingStreamedMediaStreams_HEADER_GUARD_ #define _TelepathyQt_PendingStreamedMediaStreams_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/async-model.dox0000644000175200001440000000555512000056607023621 0ustar00collabora-develusers00000000000000/* * This file is part of TelepathyQt * * @copyright Copyright (C) 2008 Collabora Ltd. * @copyright 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 */ /** * \page async_model Asynchronous Object Model * * \section async_model_overview Overview * * Telepathy-Qt uses \dbus to communicate with applications implementing the \telepathy_spec. * * When dealing with D-Bus, method calls can take some time to return, * and in this case is not desirable to make synchronous calls, * which could turn into applications hanging waiting for method returns. * In order to avoid this issue, all Telepathy-Qt high-level methods requiring * D-Bus method calls will return a \link Tp::PendingOperation \endlink which will * emit the signal \link Tp::PendingOperation::finished() \endlink when the operation * has ended. See individual methods' documentation for more details. * * Additionally Telepathy-Qt introduces a concept in which object features need * to be enabled before usage. Information corresponding to enabled features can be inspected * synchronously with no need for asynchronous D-Bus method calls and the associated * programming complexity. * * To avoid the complexity of doing asynchronous calls when making object features ready * Telepathy-Qt also provides so called factories for the main objects. * These object features can be enabled by constructing a corresponding factory and enabling the * desired features, and passing these factories to the objects responsible for creating * the objects whose features are required. * Doing that, applications are guaranteed that the specified features are ready in objects * signaled to them by the library. * * However, if a particular feature is only ever used in a specific circumstance, such as an user * opening some settings dialog separate from the general view of the application, * features can be later enabled as needed by calling becomeReady(), or in the * \link Tp::Contact \endlink case by calling \link Tp::ContactManager::upgradeContacts() \endlink, * with the additional features on the object, and waiting for the resulting PendingOperation to * finish. */ telepathy-qt-0.9.3/TelepathyQt/outgoing-stream-tube-channel-internal.h0000644000175200001440000000650512000056607030340 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @license LGPL 2.1 * * 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 _TelepathyQt_outgoing_stream_tube_channel_internal_h_HEADER_GUARD_ #define _TelepathyQt_outgoing_stream_tube_channel_internal_h_HEADER_GUARD_ #include #include namespace Tp { class PendingVoid; class TP_QT_NO_EXPORT PendingOpenTube : public PendingOperation { Q_OBJECT Q_DISABLE_COPY(PendingOpenTube) public: PendingOpenTube(PendingVoid *offerOperation, const QVariantMap ¶meters, const OutgoingStreamTubeChannelPtr &object); ~PendingOpenTube(); private Q_SLOTS: void onTubeStateChanged(Tp::TubeChannelState state); void onOfferFinished(Tp::PendingOperation *operation); private: struct Private; friend struct Private; Private *mPriv; }; class TP_QT_NO_EXPORT QueuedContactFactory : public QObject { Q_OBJECT Q_DISABLE_COPY(QueuedContactFactory) public: QueuedContactFactory(ContactManagerPtr contactManager, QObject* parent = 0); ~QueuedContactFactory(); QUuid appendNewRequest(const UIntList &handles); Q_SIGNALS: void contactsRetrieved(QUuid uuid, QList contacts); void queueCompleted(); private Q_SLOTS: void onPendingContactsFinished(Tp::PendingOperation *operation); void processNextRequest(); private: struct Entry { QUuid uuid; UIntList handles; }; bool m_isProcessing; ContactManagerPtr m_manager; QQueue m_queue; }; struct TP_QT_NO_EXPORT PendingOpenTube::Private { Private(const QVariantMap ¶meters, PendingOpenTube *parent); // Public object PendingOpenTube *parent; OutgoingStreamTubeChannelPtr tube; QVariantMap parameters; }; struct TP_QT_NO_EXPORT OutgoingStreamTubeChannel::Private { Private(OutgoingStreamTubeChannel *parent); OutgoingStreamTubeChannel *parent; QHash contactsForConnections; QHash, uint> connectionsForSourceAddresses; QHash connectionsForCredentials; QHash > pendingNewConnections; struct ClosedConnection { uint id; QString error, message; ClosedConnection() : id(~0U) {} ClosedConnection(uint id, const QString &error, const QString &message) : id(id), error(error), message(message) {} }; QHash pendingClosedConnections; QueuedContactFactory *queuedContactFactory; }; } #endif telepathy-qt-0.9.3/TelepathyQt/groups.dox0000644000175200001440000000765412000056607022727 0ustar00collabora-develusers00000000000000/* * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 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 */ /** * \defgroup clientsideproxies Client-side proxies * * Proxy objects representing remote service objects accessed via D-Bus. * * In addition to providing direct access to methods, signals and properties * exported by the remote objects, some of these proxies offer features like * automatic inspection of remote object capabilities, property tracking, * backwards compatibility helpers for older services and other utilities. */ /** * \defgroup clientaccount Account proxies * \ingroup clientsideproxies * * Proxy objects representing remote Telepathy account objects and their * optional interfaces. */ /** * \defgroup clientam Account manager proxies * \ingroup clientsideproxies * * Proxy objects representing remote Telepathy account manager objects and their * optional interfaces. */ /** * \defgroup clientchannel Channel proxies * \ingroup clientsideproxies * * Proxy objects representing remote Telepathy Channel objects and their * optional interfaces. */ /** * \defgroup clientchanneldispatcher ChannelDispatcher proxies * \ingroup clientsideproxies * * Proxy objects representing remote Telepathy ChannelDispatcher objects and * their optional interfaces. */ /** * \defgroup clientchanneldispatchoperation ChannelDispatchOperation proxies * \ingroup clientsideproxies * * Proxy objects representing remote Telepathy ChannelDispatchOperation objects * and their optional interfaces. */ /** * \defgroup clientchannelrequest ChannelRequest proxies * \ingroup clientsideproxies * * Proxy objects representing remote Telepathy ChannelRequest objects and their * optional interfaces. */ /** * \defgroup clientclient Client proxies * \ingroup clientsideproxies * * Proxy objects representing remote Telepathy Client objects (approvers, * handlers and observers) and their optional interfaces. */ /** * \defgroup clientcm Connection manager proxies * \ingroup clientsideproxies * * Proxy objects representing remote Telepathy ConnectionManager objects and * their optional interfaces. */ /** * \defgroup clientconn Connection proxies * \ingroup clientsideproxies * * Proxy objects representing remote Telepathy Connection objects and their * optional interfaces. */ /** * \defgroup servicesideimpl Service-side implementation * * Classes to implement service D-Bus objects. */ /** * \defgroup servicechannel Channel service implementation * \ingroup servicesideimpl * * Classes to implement Telepathy Channel objects and their * optional interfaces. */ /** * \defgroup servicecm Connection manager service implementation * \ingroup servicesideimpl * * Classes to implement Telepathy ConnectionManager objects and their * optional interfaces. */ /** * \defgroup serviceconn Connection service implementation * \ingroup servicesideimpl * * Classes to implement Telepathy Connection objects and their * optional interfaces. */ /** * \defgroup wrappers Wrapper classes * * Wrapper classes representing a Telepathy type. */ /** * \defgroup utils Utililty classes * * Utility classes. */ telepathy-qt-0.9.3/TelepathyQt/ConnectionInterfaceBalanceInterface0000644000175200001440000000043612000056607027615 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ConnectionInterfaceBalanceInterface_HEADER_GUARD_ #define _TelepathyQt_ConnectionInterfaceBalanceInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/text-channel.cpp0000644000175200001440000013347412000056607023772 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/text-channel.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include #include #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT TextChannel::Private { Private(TextChannel *parent); ~Private(); static void introspectMessageQueue(Private *self); static void introspectMessageCapabilities(Private *self); static void introspectMessageSentSignal(Private *self); static void enableChatStateNotifications(Private *self); void updateInitialMessages(); void updateCapabilities(); void processMessageQueue(); void processChatStateQueue(); void contactLost(uint handle); void contactFound(ContactPtr contact); // Public object TextChannel *parent; Client::ChannelTypeTextInterface *textInterface; Client::DBus::PropertiesInterface *properties; ReadinessHelper *readinessHelper; // FeatureMessageCapabilities and FeatureMessageQueue QVariantMap props; bool getAllInFlight; bool gotProperties; // requires FeatureMessageCapabilities QList supportedMessageTypes; QStringList supportedContentTypes; MessagePartSupportFlags messagePartSupport; DeliveryReportingSupportFlags deliveryReportingSupport; // FeatureMessageQueue bool initialMessagesReceived; struct MessageEvent { MessageEvent(const ReceivedMessage &message) : isMessage(true), message(message), removed(0) { } MessageEvent(uint removed) : isMessage(false), message(), removed(removed) { } bool isMessage; ReceivedMessage message; uint removed; }; QList messages; QList incompleteMessages; QHash acknowledgeBatches; // FeatureChatState struct ChatStateEvent { ChatStateEvent(uint contactHandle, uint state) : contactHandle(contactHandle), state(state) { } ContactPtr contact; uint contactHandle; uint state; }; QList chatStateQueue; QHash chatStates; QSet awaitingContacts; }; TextChannel::Private::Private(TextChannel *parent) : parent(parent), textInterface(parent->interface()), properties(parent->interface()), readinessHelper(parent->readinessHelper()), getAllInFlight(false), gotProperties(false), messagePartSupport(0), deliveryReportingSupport(0), initialMessagesReceived(false) { ReadinessHelper::Introspectables introspectables; ReadinessHelper::Introspectable introspectableMessageQueue( QSet() << 0, // makesSenseForStatuses Features() << Channel::FeatureCore, // dependsOnFeatures (core) QStringList(), // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::introspectMessageQueue, this); introspectables[FeatureMessageQueue] = introspectableMessageQueue; ReadinessHelper::Introspectable introspectableMessageCapabilities( QSet() << 0, // makesSenseForStatuses Features() << Channel::FeatureCore, // dependsOnFeatures (core) QStringList(), // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::introspectMessageCapabilities, this); introspectables[FeatureMessageCapabilities] = introspectableMessageCapabilities; ReadinessHelper::Introspectable introspectableMessageSentSignal( QSet() << 0, // makesSenseForStatuses Features() << Channel::FeatureCore, // dependsOnFeatures (core) QStringList(), // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::introspectMessageSentSignal, this); introspectables[FeatureMessageSentSignal] = introspectableMessageSentSignal; ReadinessHelper::Introspectable introspectableChatState( QSet() << 0, // makesSenseForStatuses Features() << Channel::FeatureCore, // dependsOnFeatures (core) QStringList() << TP_QT_IFACE_CHANNEL_INTERFACE_CHAT_STATE, // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::enableChatStateNotifications, this); introspectables[FeatureChatState] = introspectableChatState; readinessHelper->addIntrospectables(introspectables); } TextChannel::Private::~Private() { foreach (MessageEvent *e, incompleteMessages) { delete e; } foreach (ChatStateEvent *e, chatStateQueue) { delete e; } } void TextChannel::Private::introspectMessageQueue( TextChannel::Private *self) { TextChannel *parent = self->parent; if (parent->hasMessagesInterface()) { Client::ChannelInterfaceMessagesInterface *messagesInterface = parent->interface(); // FeatureMessageQueue needs signal connections + Get (but we // might as well do GetAll and reduce the number of code paths) parent->connect(messagesInterface, SIGNAL(MessageReceived(Tp::MessagePartList)), SLOT(onMessageReceived(Tp::MessagePartList))); parent->connect(messagesInterface, SIGNAL(PendingMessagesRemoved(Tp::UIntList)), SLOT(onPendingMessagesRemoved(Tp::UIntList))); if (!self->gotProperties && !self->getAllInFlight) { self->getAllInFlight = true; QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( self->properties->GetAll( TP_QT_IFACE_CHANNEL_INTERFACE_MESSAGES), parent); parent->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotProperties(QDBusPendingCallWatcher*))); } else if (self->gotProperties) { self->updateInitialMessages(); } } else { // FeatureMessageQueue needs signal connections + ListPendingMessages parent->connect(self->textInterface, SIGNAL(Received(uint,uint,uint,uint,uint,QString)), SLOT(onTextReceived(uint,uint,uint,uint,uint,const QString))); // we present SendError signals as if they were incoming // messages, to be consistent with Messages parent->connect(self->textInterface, SIGNAL(SendError(uint,uint,uint,QString)), SLOT(onTextSendError(uint,uint,uint,QString))); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( self->textInterface->ListPendingMessages(false), parent); parent->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotPendingMessages(QDBusPendingCallWatcher*))); } } void TextChannel::Private::introspectMessageCapabilities( TextChannel::Private *self) { TextChannel *parent = self->parent; if (parent->hasMessagesInterface()) { if (!self->gotProperties && !self->getAllInFlight) { self->getAllInFlight = true; QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( self->properties->GetAll( TP_QT_IFACE_CHANNEL_INTERFACE_MESSAGES), parent); parent->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotProperties(QDBusPendingCallWatcher*))); } else if (self->gotProperties) { self->updateCapabilities(); } } else { self->supportedContentTypes = (QStringList(QLatin1String("text/plain"))); parent->readinessHelper()->setIntrospectCompleted( FeatureMessageCapabilities, true); } } void TextChannel::Private::introspectMessageSentSignal( TextChannel::Private *self) { TextChannel *parent = self->parent; if (parent->hasMessagesInterface()) { Client::ChannelInterfaceMessagesInterface *messagesInterface = parent->interface(); parent->connect(messagesInterface, SIGNAL(MessageSent(Tp::MessagePartList,uint,QString)), SLOT(onMessageSent(Tp::MessagePartList,uint,QString))); } else { parent->connect(self->textInterface, SIGNAL(Sent(uint,uint,QString)), SLOT(onTextSent(uint,uint,QString))); } self->readinessHelper->setIntrospectCompleted(FeatureMessageSentSignal, true); } void TextChannel::Private::enableChatStateNotifications( TextChannel::Private *self) { TextChannel *parent = self->parent; Client::ChannelInterfaceChatStateInterface *chatStateInterface = parent->interface(); parent->connect(chatStateInterface, SIGNAL(ChatStateChanged(uint,uint)), SLOT(onChatStateChanged(uint,uint))); // FIXME fd.o#24882 - Download contacts' initial chat states self->readinessHelper->setIntrospectCompleted(FeatureChatState, true); } void TextChannel::Private::updateInitialMessages() { if (!readinessHelper->requestedFeatures().contains(FeatureMessageQueue) || readinessHelper->isReady(Features() << FeatureMessageQueue)) { return; } Q_ASSERT(!initialMessagesReceived); initialMessagesReceived = true; MessagePartListList messages = qdbus_cast( props[QLatin1String("PendingMessages")]); if (messages.isEmpty()) { debug() << "Message queue empty: FeatureMessageQueue is now ready"; readinessHelper->setIntrospectCompleted(FeatureMessageQueue, true); } else { foreach (const MessagePartList &message, messages) { parent->onMessageReceived(message); } } } void TextChannel::Private::updateCapabilities() { if (!readinessHelper->requestedFeatures().contains(FeatureMessageCapabilities) || readinessHelper->isReady(Features() << FeatureMessageCapabilities)) { return; } UIntList messageTypesAsUIntList = qdbus_cast(props[QLatin1String("MessageTypes")]); // Populate the list with the correct variable type supportedMessageTypes.clear(); foreach (uint messageType, messageTypesAsUIntList) { supportedMessageTypes.append(static_cast(messageType)); } supportedContentTypes = qdbus_cast( props[QLatin1String("SupportedContentTypes")]); if (supportedContentTypes.isEmpty()) { supportedContentTypes << QLatin1String("text/plain"); } messagePartSupport = MessagePartSupportFlags(qdbus_cast( props[QLatin1String("MessagePartSupportFlags")])); deliveryReportingSupport = DeliveryReportingSupportFlags( qdbus_cast(props[QLatin1String("DeliveryReportingSupport")])); readinessHelper->setIntrospectCompleted(FeatureMessageCapabilities, true); } void TextChannel::Private::processMessageQueue() { // Proceed as far as we can with the processing of incoming messages // and message-removal events; message IDs aren't necessarily globally // unique, so we need to process them in the correct order relative // to incoming messages while (!incompleteMessages.isEmpty()) { const MessageEvent *e = incompleteMessages.first(); debug() << "MessageEvent:" << reinterpret_cast(e); if (e->isMessage) { if (e->message.senderHandle() != 0 && !e->message.sender()) { // the message doesn't have a sender Contact, but needs one. // We'll have to stop processing here, and come back to it // when we have more Contact objects break; } // if we reach here, the message is ready debug() << "Message is usable, copying to main queue"; messages << e->message; emit parent->messageReceived(e->message); } else { // forget about the message(s) with ID e->removed (there should be // at most one under normal circumstances) int i = 0; while (i < messages.size()) { if (messages.at(i).pendingId() == e->removed) { ReceivedMessage removedMessage = messages.at(i); messages.removeAt(i); emit parent->pendingMessageRemoved(removedMessage); } else { i++; } } } debug() << "Dropping first event"; delete incompleteMessages.takeFirst(); } if (incompleteMessages.isEmpty()) { if (readinessHelper->requestedFeatures().contains(FeatureMessageQueue) && !readinessHelper->isReady(Features() << FeatureMessageQueue)) { debug() << "incompleteMessages empty for the first time: " "FeatureMessageQueue is now ready"; readinessHelper->setIntrospectCompleted(FeatureMessageQueue, true); } return; } // What Contact objects do we need in order to proceed, ignoring those // for which we've already sent a request? HandleIdentifierMap contactsRequired; foreach (const MessageEvent *e, incompleteMessages) { if (e->isMessage) { uint handle = e->message.senderHandle(); if (handle != 0 && !e->message.sender() && !awaitingContacts.contains(handle)) { contactsRequired.insert(handle, e->message.senderId()); } } } if (contactsRequired.isEmpty()) { return; } ConnectionPtr conn = parent->connection(); conn->lowlevel()->injectContactIds(contactsRequired); parent->connect(conn->contactManager()->contactsForHandles( contactsRequired.keys()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onContactsFinished(Tp::PendingOperation*))); awaitingContacts |= contactsRequired.keys().toSet(); } void TextChannel::Private::processChatStateQueue() { while (!chatStateQueue.isEmpty()) { const ChatStateEvent *e = chatStateQueue.first(); debug() << "ChatStateEvent:" << reinterpret_cast(e); if (e->contact.isNull()) { // the chat state Contact object wasn't retrieved yet, but needs // one. We'll have to stop processing here, and come back to it // when we have more Contact objects break; } chatStates.insert(e->contact, (ChannelChatState) e->state); // if we reach here, the Contact object is ready emit parent->chatStateChanged(e->contact, (ChannelChatState) e->state); debug() << "Dropping first event"; delete chatStateQueue.takeFirst(); } // What Contact objects do we need in order to proceed, ignoring those // for which we've already sent a request? QSet contactsRequired; foreach (const ChatStateEvent *e, chatStateQueue) { if (!e->contact && !awaitingContacts.contains(e->contactHandle)) { contactsRequired << e->contactHandle; } } if (contactsRequired.isEmpty()) { return; } // TODO: pass id hints to ContactManager if we ever gain support to retrieve contact ids // from ChatState. parent->connect(parent->connection()->contactManager()->contactsForHandles( contactsRequired.toList()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onContactsFinished(Tp::PendingOperation*))); awaitingContacts |= contactsRequired; } void TextChannel::Private::contactLost(uint handle) { // we're not going to get a Contact object for this handle, so mark the // messages from that handle as "unknown sender" foreach (MessageEvent *e, incompleteMessages) { if (e->isMessage && e->message.senderHandle() == handle && !e->message.sender()) { e->message.clearSenderHandle(); } } // there is no point in sending chat state notifications for unknown // contacts, removing chat state events from queue that refer to this handle foreach (ChatStateEvent *e, chatStateQueue) { if (e->contactHandle == handle) { chatStateQueue.removeOne(e); delete e; } } } void TextChannel::Private::contactFound(ContactPtr contact) { uint handle = contact->handle().at(0); foreach (MessageEvent *e, incompleteMessages) { if (e->isMessage && e->message.senderHandle() == handle && !e->message.sender()) { e->message.setSender(contact); } } foreach (ChatStateEvent *e, chatStateQueue) { if (e->contactHandle == handle) { e->contact = contact; } } } /** * \class TextChannel * \ingroup clientchannel * \headerfile TelepathyQt/text-channel.h * * \brief The TextChannel class represents a Telepathy channel of type Text. * * For more details, please refer to \telepathy_spec. * * See \ref async_model, \ref shared_ptr */ /** * Feature representing the core that needs to become ready to make the * TextChannel object usable. * * This is currently the same as Channel::FeatureCore, but may change to include more. * * When calling isReady(), becomeReady(), this feature is implicitly added * to the requested features. */ const Feature TextChannel::FeatureCore = Feature(QLatin1String(Channel::staticMetaObject.className()), 0, true); /** * Feature used in order to access the message queue info. * * See message queue methods' documentation for more details. * * \sa messageQueue(), messageReceived(), pendingMessageRemoved(), forget(), acknowledge() */ const Feature TextChannel::FeatureMessageQueue = Feature(QLatin1String(TextChannel::staticMetaObject.className()), 0); /** * Feature used in order to access message capabilities info. * * See message capabilities methods' documentation for more details. * * \sa supportedContentTypes(), messagePartSupport(), deliveryReportingSupport() */ const Feature TextChannel::FeatureMessageCapabilities = Feature(QLatin1String(TextChannel::staticMetaObject.className()), 1); /** * Feature used in order to receive notification when a message is sent. * * \sa messageSent() */ const Feature TextChannel::FeatureMessageSentSignal = Feature(QLatin1String(TextChannel::staticMetaObject.className()), 2); /** * Feature used in order to keep track of chat state changes. * * See chat state methods' documentation for more details. * * \sa chatState(), chatStateChanged() */ const Feature TextChannel::FeatureChatState = Feature(QLatin1String(TextChannel::staticMetaObject.className()), 3); /** * \fn void TextChannel::messageSent(const Tp::Message &message, * Tp::MessageSendingFlags flags, * const QString &sentMessageToken) * * Emitted when a message is sent, if the TextChannel::FeatureMessageSentSignal * has been enabled. * * This signal is emitted regardless of whether the message is sent by this * client, or another client using the same channel via D-Bus. * * \param message A message. This may differ slightly from what the client * requested to send, for instance if it has been altered due * to limitations of the instant messaging protocol used. * \param flags #MessageSendingFlags that were in effect when the message was * sent. Clients can use these in conjunction with * deliveryReportingSupport() to determine whether delivery * reporting can be expected. * \param sentMessageToken Either an empty QString, or an opaque token used * to match the message to any delivery reports. */ /** * \fn void TextChannel::messageReceived(const Tp::ReceivedMessage &message) * * Emitted when a message is added to messageQueue(), if the * TextChannel::FeatureMessageQueue Feature has been enabled. * * This occurs slightly later than the message being received over D-Bus; * see messageQueue() for details. * * \param message The message received. * \sa messageQueue(), acknowledge(), forget() */ /** * \fn void TextChannel::pendingMessageRemoved( * const Tp::ReceivedMessage &message) * * Emitted when a message is removed from messageQueue(), if the * TextChannel::FeatureMessageQueue Feature has been enabled. See messageQueue() for the * circumstances in which this happens. * * \param message The message removed. * \sa messageQueue(), acknowledge(), forget() */ /** * \fn void TextChannel::chatStateChanged(const Tp::ContactPtr &contact, * ChannelChatState state) * * Emitted when the state of a member of the channel has changed, if the * TextChannel::FeatureChatState feature has been enabled. * * Local state changes are also emitted here. * * \param contact The contact whose chat state changed. * \param state The new chat state for \a contact. * \sa chatState() */ /** * Create a new TextChannel object. * * \param connection Connection owning this channel, and specifying the * service. * \param objectPath The channel object path. * \param immutableProperties The channel immutable properties. * \return A TextChannelPtr object pointing to the newly created * TextChannel object. */ TextChannelPtr TextChannel::create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) { return TextChannelPtr(new TextChannel(connection, objectPath, immutableProperties, TextChannel::FeatureCore)); } /** * Construct a new TextChannel object. * * \param connection Connection owning this channel, and specifying the * service. * \param objectPath The channel object path. * \param immutableProperties The channel immutable properties. * \param coreFeature The core feature of the channel type, if any. The corresponding introspectable should * depend on TextChannel::FeatureCore. */ TextChannel::TextChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature) : Channel(connection, objectPath, immutableProperties, coreFeature), mPriv(new Private(this)) { } /** * Class destructor. */ TextChannel::~TextChannel() { delete mPriv; } /** * Return whether this channel supports the Messages interface. * * If the interface is not supported, some advanced functionality will be unavailable. * * This method requires TextChannel::FeatureCore to be ready. * * \return \c true if the Messages interface is supported, \c false otherwise. */ bool TextChannel::hasMessagesInterface() const { return interfaces().contains(TP_QT_IFACE_CHANNEL_INTERFACE_MESSAGES); } /** * Return whether this channel supports the ChatState interface. * * If the interface is not supported, requestChatState() will fail and all contacts' chat states * will appear to be #ChannelChatStateInactive. * * This method requires TextChannel::FeatureCore to be ready. * * \return \c true if the ChatState interface is supported, \c false otherwise. * \sa requestChatState(), chatStateChanged() */ bool TextChannel::hasChatStateInterface() const { return interfaces().contains(TP_QT_IFACE_CHANNEL_INTERFACE_CHAT_STATE); } /** * Return whether contacts can be invited into this channel using * inviteContacts() (which is equivalent to Channel::groupAddContacts()). * * Whether this is the case depends on the underlying protocol, the type of channel, * and the user's privileges (in some chatrooms, only a privileged user * can invite other contacts). * * This is an alias for Channel::groupCanAddContacts(), to indicate its meaning more * clearly for Text channels. * * This method requires Channel::FeatureCore to be ready. * * \return \c true if contacts can be invited, \c false otherwise. * \sa inviteContacts(), Channel::groupCanAddContacts(), Channel::groupAddContacts() */ bool TextChannel::canInviteContacts() const { return groupCanAddContacts(); } /* in the block below is used to escape the star-slash sequence */ /** * Return a list of supported MIME content types for messages on this channel. * * For a simple text channel this will be a list containing one item, * "text/plain". * * This list may contain the special value "*/*", which * indicates that any content type is supported. * * This method requires TextChannel::FeatureMessageCapabilities to be ready. * * \return The list of MIME content types. */ QStringList TextChannel::supportedContentTypes() const { return mPriv->supportedContentTypes; } /** * Return the message types supported by this channel. * * This method requires TextChannel::FeatureMessageCapabilities to be ready. * * \return The list of supported message types */ QList TextChannel::supportedMessageTypes() const { if (!isReady(FeatureMessageCapabilities)) { warning() << "TextChannel::supportedMessageTypes() used with " "FeatureMessageCapabilities not ready"; } return mPriv->supportedMessageTypes; } /** * Return whether the provided message type is supported. * * This method requires TextChannel::FeatureMessageCapabilities to be ready. * * \param messageType The message type to check. * \return \c true if supported, \c false otherwise */ bool TextChannel::supportsMessageType(ChannelTextMessageType messageType) const { if (!isReady(FeatureMessageCapabilities)) { warning() << "TextChannel::supportsMessageType() used with " "FeatureMessageCapabilities not ready"; } return mPriv->supportedMessageTypes.contains(messageType); } /** * Return a set of flags indicating support for multi-part messages on this * channel. * * This is zero on simple text channels, or greater than zero if * there is partial or full support for multi-part messages. * * This method requires TextChannel::FeatureMessageCapabilities to be ready. * * \return The flags as #MessagePartSupportFlags. */ MessagePartSupportFlags TextChannel::messagePartSupport() const { return mPriv->messagePartSupport; } /** * Return a set of flags indicating support for delivery reporting on this * channel. * * This is zero if there are no particular guarantees, or greater * than zero if delivery reports can be expected under certain circumstances. * * This method requires TextChannel::FeatureMessageCapabilities to be ready. * * \return The flags as #DeliveryReportingSupportFlags. */ DeliveryReportingSupportFlags TextChannel::deliveryReportingSupport() const { return mPriv->deliveryReportingSupport; } /** * Return a list of messages received in this channel. * * Messages are added to this list when they are received from the instant * messaging service; the messageReceived() signal is emitted. * * There is a small delay between the message being received over D-Bus and * becoming available to users of this C++ API, since a small amount of * additional information needs to be fetched. However, the relative ordering * of all the messages in a channel is preserved. * * Messages are removed from this list when they are acknowledged with the * acknowledge() or forget() methods. On channels where hasMessagesInterface() * returns \c true, they will also be removed when acknowledged by a different * client. In either case, the pendingMessageRemoved() signal is emitted. * * This method requires TextChannel::FeatureMessageQueue to be ready. * * \return A list of ReceivedMessage objects. * \sa messageReceived() */ QList TextChannel::messageQueue() const { return mPriv->messages; } /** * Return the current chat state for \a contact. * * If hasChatStateInterface() returns \c false, this method will always return * #ChannelChatStateInactive. * * This method requires TextChannel::FeatureChatState to be ready. * * \return The contact chat state as #ChannelChatState. */ ChannelChatState TextChannel::chatState(const ContactPtr &contact) const { if (!isReady(FeatureChatState)) { warning() << "TextChannel::chatState() used with " "FeatureChatState not ready"; return ChannelChatStateInactive; } if (mPriv->chatStates.contains(contact)) { return mPriv->chatStates.value(contact); } return ChannelChatStateInactive; } void TextChannel::onAcknowledgePendingMessagesReply( QDBusPendingCallWatcher *watcher) { UIntList ids = mPriv->acknowledgeBatches.value(watcher); QDBusPendingReply<> reply = *watcher; if (reply.isError()) { // One of the IDs was bad, and we can't know which one. Recover by // doing as much as possible, and hope for the best... debug() << "Recovering from AcknowledgePendingMessages failure for: " << ids; foreach (uint id, ids) { mPriv->textInterface->AcknowledgePendingMessages(UIntList() << id); } } mPriv->acknowledgeBatches.remove(watcher); watcher->deleteLater(); } /** * Acknowledge that received messages have been displayed to the user. * * Note that this method should only be called by the main handler of a channel, usually * meaning the user interface process that displays the channel to the user * (when a channel dispatcher is used, the handler must acknowledge messages, * and other approvers or observers must not acknowledge messages). * * Processes other than the main handler of a channel can free memory used * by the library by calling forget() instead. * * This method requires TextChannel::FeatureMessageQueue to be ready. * * \param messages A list of received messages that have now been displayed. * \sa forget(), messageQueue(), messageReceived(), pendingMessageRemoved() */ void TextChannel::acknowledge(const QList &messages) { UIntList ids; foreach (const ReceivedMessage &m, messages) { if (m.isFromChannel(TextChannelPtr(this))) { ids << m.pendingId(); } else { warning() << "message did not come from this channel, ignoring"; } } if (ids.isEmpty()) { return; } // we're going to acknowledge these messages (or as many as possible, if // we lose a race with another acknowledging process), so let's remove // them from the list immediately forget(messages); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( mPriv->textInterface->AcknowledgePendingMessages(ids), this); connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(onAcknowledgePendingMessagesReply(QDBusPendingCallWatcher*))); mPriv->acknowledgeBatches[watcher] = ids; } /** * Remove messages from the message queue without acknowledging them. * * Note that this method frees memory used by the library, but * does not free the corresponding memory in the CM process. * It should be used by clients that are not the main handler for a channel; * the main handler for a channel should use acknowledge() instead. * * This method requires TextChannel::FeatureMessageQueue to be ready. * * \param messages A list of received messages that have now been processed. * \sa acknowledge(), messageQueue(), messageReceived(), pendingMessageRemoved() */ void TextChannel::forget(const QList &messages) { foreach (const ReceivedMessage &m, messages) { if (!m.isFromChannel(TextChannelPtr(this))) { warning() << "message did not come from this channel, ignoring"; } else if (mPriv->messages.removeOne(m)) { emit pendingMessageRemoved(m); } } } /** * Request that a message be sent on this channel. * * When the message has been submitted for delivery, * this method will return and the messageSent() signal will be emitted. * * If the message cannot be submitted for delivery, the returned pending operation will fail and no * signal is emitted. * * This method requires TextChannel::FeatureCore to be ready. * * \param text The message body. * \param type The message type. * \param flags Flags affecting how the message is sent. * Note that the channel may ignore some or all flags, depending on * deliveryReportingSupport(); the flags that were handled by the CM are provided in * messageSent(). * \return A PendingOperation which will emit PendingOperation::finished * when the message has been submitted for delivery. * \sa messageSent() */ PendingSendMessage *TextChannel::send(const QString &text, ChannelTextMessageType type, MessageSendingFlags flags) { Message m(type, text); PendingSendMessage *op = new PendingSendMessage(TextChannelPtr(this), m); if (hasMessagesInterface()) { Client::ChannelInterfaceMessagesInterface *messagesInterface = interface(); connect(new QDBusPendingCallWatcher( messagesInterface->SendMessage(m.parts(), (uint) flags)), SIGNAL(finished(QDBusPendingCallWatcher*)), op, SLOT(onMessageSent(QDBusPendingCallWatcher*))); } else { connect(new QDBusPendingCallWatcher(mPriv->textInterface->Send(type, text)), SIGNAL(finished(QDBusPendingCallWatcher*)), op, SLOT(onTextSent(QDBusPendingCallWatcher*))); } return op; } /** * Request that a message be sent on this channel. * * When the message has been submitted for delivery, * this method will return and the messageSent() signal will be emitted. * * If the message cannot be submitted for delivery, the returned pending operation will fail and no * signal is emitted. * * This method requires TextChannel::FeatureCore to be ready. * * \param part The message parts. * \param flags Flags affecting how the message is sent. * Note that the channel may ignore some or all flags, depending on * deliveryReportingSupport(); the flags that were handled by the CM are provided in * messageSent(). * \return A PendingOperation which will emit PendingOperation::finished * when the message has been submitted for delivery. * \sa messageSent() */ PendingSendMessage *TextChannel::send(const MessagePartList &parts, MessageSendingFlags flags) { Message m(parts); PendingSendMessage *op = new PendingSendMessage(TextChannelPtr(this), m); if (hasMessagesInterface()) { Client::ChannelInterfaceMessagesInterface *messagesInterface = interface(); connect(new QDBusPendingCallWatcher( messagesInterface->SendMessage(m.parts(), (uint) flags)), SIGNAL(finished(QDBusPendingCallWatcher*)), op, SLOT(onMessageSent(QDBusPendingCallWatcher*))); } else { connect(new QDBusPendingCallWatcher(mPriv->textInterface->Send( m.messageType(), m.text())), SIGNAL(finished(QDBusPendingCallWatcher*)), op, SLOT(onTextSent(QDBusPendingCallWatcher*))); } return op; } /** * Set the local chat state and notify other members of the channel that it has * changed. * * Note that only the primary handler of the channel should set its chat * state. * * This method requires TextChannel::FeatureCore to be ready. * * \param state The new state. * \sa chatStateChanged() */ PendingOperation *TextChannel::requestChatState(ChannelChatState state) { if (!interfaces().contains(TP_QT_IFACE_CHANNEL_INTERFACE_CHAT_STATE)) { warning() << "TextChannel::requestChatState() used with no chat " "state interface"; return new PendingFailure(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("TextChannel does not support chat state interface"), TextChannelPtr(this)); } Client::ChannelInterfaceChatStateInterface *chatStateInterface = interface(); return new PendingVoid(chatStateInterface->SetChatState( (uint) state), TextChannelPtr(this)); } void TextChannel::onMessageSent(const MessagePartList &parts, uint flags, const QString &sentMessageToken) { emit messageSent(Message(parts), MessageSendingFlag(flags), sentMessageToken); } void TextChannel::onContactsFinished(PendingOperation *op) { PendingContacts *pc = qobject_cast(op); UIntList failed; Q_ASSERT(pc->isForHandles()); foreach (uint handle, pc->handles()) { mPriv->awaitingContacts -= handle; } if (pc->isError()) { warning().nospace() << "Gathering contacts failed: " << pc->errorName() << ": " << pc->errorMessage(); foreach (uint handle, pc->handles()) { mPriv->contactLost(handle); } } else { foreach (const ContactPtr &contact, pc->contacts()) { mPriv->contactFound(contact); } foreach (uint handle, pc->invalidHandles()) { mPriv->contactLost(handle); } } // all contacts for messages and chat state events we were asking about // should now be ready mPriv->processMessageQueue(); mPriv->processChatStateQueue(); } void TextChannel::onMessageReceived(const MessagePartList &parts) { if (!mPriv->initialMessagesReceived) { return; } mPriv->incompleteMessages << new Private::MessageEvent( ReceivedMessage(parts, TextChannelPtr(this))); mPriv->processMessageQueue(); } void TextChannel::onPendingMessagesRemoved(const UIntList &ids) { if (!mPriv->initialMessagesReceived) { return; } foreach (uint id, ids) { mPriv->incompleteMessages << new Private::MessageEvent(id); } mPriv->processMessageQueue(); } void TextChannel::onTextSent(uint timestamp, uint type, const QString &text) { emit messageSent(Message(timestamp, type, text), 0, QLatin1String("")); } void TextChannel::onTextReceived(uint id, uint timestamp, uint sender, uint type, uint flags, const QString &text) { if (!mPriv->initialMessagesReceived) { return; } MessagePart header; if (timestamp == 0) { timestamp = QDateTime::currentDateTime().toTime_t(); } header.insert(QLatin1String("message-received"), QDBusVariant(static_cast(timestamp))); header.insert(QLatin1String("pending-message-id"), QDBusVariant(id)); header.insert(QLatin1String("message-sender"), QDBusVariant(sender)); header.insert(QLatin1String("message-type"), QDBusVariant(type)); if (flags & ChannelTextMessageFlagScrollback) { header.insert(QLatin1String("scrollback"), QDBusVariant(true)); } if (flags & ChannelTextMessageFlagRescued) { header.insert(QLatin1String("rescued"), QDBusVariant(true)); } MessagePart body; body.insert(QLatin1String("content-type"), QDBusVariant(QLatin1String("text/plain"))); body.insert(QLatin1String("content"), QDBusVariant(text)); if (flags & ChannelTextMessageFlagTruncated) { header.insert(QLatin1String("truncated"), QDBusVariant(true)); } MessagePartList parts; parts << header; parts << body; ReceivedMessage m(parts, TextChannelPtr(this)); if (flags & ChannelTextMessageFlagNonTextContent) { // set the "you are not expected to understand this" flag m.setForceNonText(); } mPriv->incompleteMessages << new Private::MessageEvent(m); mPriv->processMessageQueue(); } void TextChannel::onTextSendError(uint error, uint timestamp, uint type, const QString &text) { if (!mPriv->initialMessagesReceived) { return; } MessagePart header; header.insert(QLatin1String("message-received"), QDBusVariant(static_cast( QDateTime::currentDateTime().toTime_t()))); header.insert(QLatin1String("message-type"), QDBusVariant(static_cast( ChannelTextMessageTypeDeliveryReport))); // we can't tell whether it's a temporary or permanent failure here, // so guess based on the delivery-error uint deliveryStatus; switch (error) { case ChannelTextSendErrorOffline: case ChannelTextSendErrorPermissionDenied: deliveryStatus = DeliveryStatusTemporarilyFailed; break; case ChannelTextSendErrorInvalidContact: case ChannelTextSendErrorTooLong: case ChannelTextSendErrorNotImplemented: deliveryStatus = DeliveryStatusPermanentlyFailed; break; case ChannelTextSendErrorUnknown: default: deliveryStatus = DeliveryStatusTemporarilyFailed; break; } header.insert(QLatin1String("delivery-status"), QDBusVariant(deliveryStatus)); header.insert(QLatin1String("delivery-error"), QDBusVariant(error)); MessagePart echoHeader; echoHeader.insert(QLatin1String("message-sent"), QDBusVariant(timestamp)); echoHeader.insert(QLatin1String("message-type"), QDBusVariant(type)); MessagePart echoBody; echoBody.insert(QLatin1String("content-type"), QDBusVariant(QLatin1String("text/plain"))); echoBody.insert(QLatin1String("content"), QDBusVariant(text)); MessagePartList echo; echo << echoHeader; echo << echoBody; header.insert(QLatin1String("delivery-echo"), QDBusVariant(QVariant::fromValue(echo))); MessagePartList parts; parts << header; } void TextChannel::gotProperties(QDBusPendingCallWatcher *watcher) { Q_ASSERT(mPriv->getAllInFlight); mPriv->getAllInFlight = false; mPriv->gotProperties = true; QDBusPendingReply reply = *watcher; if (reply.isError()) { warning().nospace() << "Properties::GetAll(Channel.Interface.Messages)" " failed with " << reply.error().name() << ": " << reply.error().message(); ReadinessHelper *readinessHelper = mPriv->readinessHelper; if (readinessHelper->requestedFeatures().contains(FeatureMessageQueue) && !readinessHelper->isReady(Features() << FeatureMessageQueue)) { readinessHelper->setIntrospectCompleted(FeatureMessageQueue, false, reply.error()); } if (readinessHelper->requestedFeatures().contains(FeatureMessageCapabilities) && !readinessHelper->isReady(Features() << FeatureMessageCapabilities)) { readinessHelper->setIntrospectCompleted(FeatureMessageCapabilities, false, reply.error()); } return; } debug() << "Properties::GetAll(Channel.Interface.Messages) returned"; mPriv->props = reply.value(); mPriv->updateInitialMessages(); mPriv->updateCapabilities(); watcher->deleteLater(); } void TextChannel::gotPendingMessages(QDBusPendingCallWatcher *watcher) { Q_ASSERT(!mPriv->initialMessagesReceived); mPriv->initialMessagesReceived = true; QDBusPendingReply reply = *watcher; if (reply.isError()) { warning().nospace() << "Properties::GetAll(Channel.Interface.Messages)" " failed with " << reply.error().name() << ": " << reply.error().message(); // TODO should we fail here? mPriv->readinessHelper->setIntrospectCompleted(FeatureMessageQueue, false, reply.error()); return; } debug() << "Text::ListPendingMessages returned"; PendingTextMessageList list = reply.value(); if (!list.isEmpty()) { foreach (const PendingTextMessage &message, list) { onTextReceived(message.identifier, message.unixTimestamp, message.sender, message.messageType, message.flags, message.text); } // processMessageQueue sets FeatureMessageQueue ready when the queue is empty for the first // time } else { mPriv->readinessHelper->setIntrospectCompleted(FeatureMessageQueue, true); } watcher->deleteLater(); } void TextChannel::onChatStateChanged(uint contactHandle, uint state) { mPriv->chatStateQueue.append(new Private::ChatStateEvent( contactHandle, state)); mPriv->processChatStateQueue(); } } // Tp telepathy-qt-0.9.3/TelepathyQt/pending-string-list.h0000644000175200001440000000334712000056607024741 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008 Collabora Ltd. * @copyright Copyright (C) 2008 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_pending_string_list_h_HEADER_GUARD_ #define _TelepathyQt_pending_string_list_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include namespace Tp { class TP_QT_EXPORT PendingStringList : public PendingOperation { Q_OBJECT Q_DISABLE_COPY(PendingStringList); public: PendingStringList(const SharedPtr &object); PendingStringList(QDBusPendingCall call, const SharedPtr &object); ~PendingStringList(); QStringList result() const; protected: void setResult(const QStringList &result); private Q_SLOTS: TP_QT_NO_EXPORT void watcherFinished(QDBusPendingCallWatcher *watcher); private: struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/connection-manager.h0000644000175200001440000001056712000056607024611 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2010 Collabora Ltd. * @copyright Copyright (C) 2008-2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_connection_manager_h_HEADER_GUARD_ #define _TelepathyQt_connection_manager_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include #include #include #include #include #include #include #include #include #include namespace Tp { class ConnectionManagerLowlevel; class PendingConnection; class PendingStringList; class TP_QT_EXPORT ConnectionManager : public StatelessDBusProxy, public OptionalInterfaceFactory { Q_OBJECT Q_DISABLE_COPY(ConnectionManager) Q_PROPERTY(QString name READ name) Q_PROPERTY(QStringList supportedProtocols READ supportedProtocols) Q_PROPERTY(ProtocolInfoList protocols READ protocols) public: static const Feature FeatureCore; static ConnectionManagerPtr create(const QDBusConnection &bus, const QString &name); static ConnectionManagerPtr create(const QString &name, const ConnectionFactoryConstPtr &connectionFactory = ConnectionFactory::create(QDBusConnection::sessionBus()), const ChannelFactoryConstPtr &channelFactory = ChannelFactory::create(QDBusConnection::sessionBus()), const ContactFactoryConstPtr &contactFactory = ContactFactory::create()); static ConnectionManagerPtr create(const QDBusConnection &bus, const QString &name, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory = ContactFactory::create()); virtual ~ConnectionManager(); QString name() const; ConnectionFactoryConstPtr connectionFactory() const; ChannelFactoryConstPtr channelFactory() const; ContactFactoryConstPtr contactFactory() const; QStringList supportedProtocols() const; const ProtocolInfoList &protocols() const; bool hasProtocol(const QString &protocolName) const; ProtocolInfo protocol(const QString &protocolName) const; static PendingStringList *listNames( const QDBusConnection &bus = QDBusConnection::sessionBus()); #if defined(BUILDING_TP_QT) || defined(TP_QT_ENABLE_LOWLEVEL_API) ConnectionManagerLowlevelPtr lowlevel(); ConnectionManagerLowlevelConstPtr lowlevel() const; #endif protected: ConnectionManager(const QDBusConnection &bus, const QString &name, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory); Client::ConnectionManagerInterface *baseInterface() const; private Q_SLOTS: TP_QT_NO_EXPORT void gotMainProperties(Tp::PendingOperation *op); TP_QT_NO_EXPORT void gotProtocolsLegacy(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void gotParametersLegacy(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void onProtocolReady(Tp::PendingOperation *watcher); private: friend class PendingConnection; struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/ConnectionInterfaceCapabilitiesInterface0000644000175200001440000000045012000056607030655 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ConnectionInterfaceCapabilitiesInterface_HEADER_GUARD_ #define _TelepathyQt_ConnectionInterfaceCapabilitiesInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/RequestableChannelClassSpecList0000644000175200001440000000045212000056607027006 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_RequestableChannelClassSpecList_HEADER_GUARD_ #define _TelepathyQt_RequestableChannelClassSpecList_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/object.h0000644000175200001440000000304412000056607022300 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_object_h_HEADER_GUARD_ #define _TelepathyQt_object_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include namespace Tp { class TP_QT_EXPORT Object : public QObject, public RefCounted { Q_OBJECT Q_DISABLE_COPY(Object) public: virtual ~Object(); Q_SIGNALS: void propertyChanged(const QString &propertyName); protected: Object(); void notify(const char *propertyName); private: struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/base-protocol.cpp0000644000175200001440000011705512000056607024146 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/base-protocol-internal.h" #include "TelepathyQt/_gen/base-protocol.moc.hpp" #include "TelepathyQt/_gen/base-protocol-internal.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT BaseProtocol::Private { Private(BaseProtocol *parent, const QDBusConnection &dbusConnection, const QString &name) : parent(parent), name(name), adaptee(new BaseProtocol::Adaptee(dbusConnection, parent)) { } BaseProtocol *parent; QString name; BaseProtocol::Adaptee *adaptee; QHash interfaces; QStringList connInterfaces; ProtocolParameterList parameters; RequestableChannelClassSpecList rccSpecs; QString vcardField; QString englishName; QString iconName; QStringList authTypes; CreateConnectionCallback createConnectionCb; IdentifyAccountCallback identifyAccountCb; NormalizeContactCallback normalizeContactCb; }; BaseProtocol::Adaptee::Adaptee(const QDBusConnection &dbusConnection, BaseProtocol *protocol) : QObject(protocol), mProtocol(protocol) { (void) new Service::ProtocolAdaptor(dbusConnection, this, protocol->dbusObject()); } BaseProtocol::Adaptee::~Adaptee() { } QStringList BaseProtocol::Adaptee::interfaces() const { QStringList ret; foreach (const AbstractProtocolInterfacePtr &iface, mProtocol->interfaces()) { ret << iface->interfaceName(); } return ret; } QStringList BaseProtocol::Adaptee::connectionInterfaces() const { return mProtocol->connectionInterfaces(); } ParamSpecList BaseProtocol::Adaptee::parameters() const { ParamSpecList ret; foreach (const ProtocolParameter ¶m, mProtocol->parameters()) { ParamSpec paramSpec = param.bareParameter(); if (!(paramSpec.flags & ConnMgrParamFlagHasDefault)) { // we cannot pass QVariant::Invalid over D-Bus, lets build a dummy value // that should be ignored according to the spec paramSpec.defaultValue = QDBusVariant( parseValueWithDBusSignature(QString(), paramSpec.signature)); } ret << paramSpec; } return ret; } RequestableChannelClassList BaseProtocol::Adaptee::requestableChannelClasses() const { return mProtocol->requestableChannelClasses().bareClasses(); } QString BaseProtocol::Adaptee::vcardField() const { return mProtocol->vcardField(); } QString BaseProtocol::Adaptee::englishName() const { return mProtocol->englishName(); } QString BaseProtocol::Adaptee::icon() const { return mProtocol->iconName(); } QStringList BaseProtocol::Adaptee::authenticationTypes() const { return mProtocol->authenticationTypes(); } void BaseProtocol::Adaptee::identifyAccount(const QVariantMap ¶meters, const Tp::Service::ProtocolAdaptor::IdentifyAccountContextPtr &context) { DBusError error; QString accountId; accountId = mProtocol->identifyAccount(parameters, &error); if (accountId.isEmpty()) { context->setFinishedWithError(error.name(), error.message()); return; } context->setFinished(accountId); } void BaseProtocol::Adaptee::normalizeContact(const QString &contactId, const Tp::Service::ProtocolAdaptor::NormalizeContactContextPtr &context) { DBusError error; QString normalizedContactId; normalizedContactId = mProtocol->normalizeContact(contactId, &error); if (normalizedContactId.isEmpty()) { context->setFinishedWithError(error.name(), error.message()); return; } context->setFinished(normalizedContactId); } /** * \class BaseProtocol * \ingroup servicecm * \headerfile TelepathyQt/base-protocol.h * * \brief Base class for protocol implementations. * * A Protocol is a D-Bus object that implements an IM protocol (for instance, jabber or msn). * The BaseProtocol class provides an easy way to implement a Protocol D-Bus object, * by providing the basic functionality itself and allowing you to extend it by setting * the appropriate properties and callbacks. * * A BaseProtocol instance cannot be registered by itself on the bus. You should add it * to a BaseConnectionManager instance using BaseConnectionManager::addProtocol(). When * the BaseConnectionManager is registered on the bus, all the BaseProtocol instances * will also be registered. */ /** * Constructs a new BaseProtocol object. * * \param dbusConnection The D-Bus connection to use. * \param name The name of this protocol. */ BaseProtocol::BaseProtocol(const QDBusConnection &dbusConnection, const QString &name) : DBusService(dbusConnection), mPriv(new Private(this, dbusConnection, name)) { } /** * Class destructor. */ BaseProtocol::~BaseProtocol() { delete mPriv; } /** * Return the protocol's name, as given on the constructor. * * \return The protocol's name. */ QString BaseProtocol::name() const { return mPriv->name; } /** * Return the immutable properties of this protocol object. * * Immutable properties cannot change after the object has been registered * on the bus with registerObject(). * * \return The immutable properties of this protocol object. */ QVariantMap BaseProtocol::immutableProperties() const { QVariantMap ret; foreach (const AbstractProtocolInterfacePtr &iface, mPriv->interfaces) { ret.unite(iface->immutableProperties()); } ret.insert(TP_QT_IFACE_PROTOCOL + QLatin1String(".Interfaces"), QVariant::fromValue(mPriv->adaptee->interfaces())); ret.insert(TP_QT_IFACE_PROTOCOL + QLatin1String(".Parameters"), QVariant::fromValue(mPriv->adaptee->parameters())); ret.insert(TP_QT_IFACE_PROTOCOL + QLatin1String(".ConnectionInterfaces"), QVariant::fromValue(mPriv->adaptee->connectionInterfaces())); ret.insert(TP_QT_IFACE_PROTOCOL + QLatin1String(".RequestableChannelClasses"), QVariant::fromValue(mPriv->adaptee->requestableChannelClasses())); ret.insert(TP_QT_IFACE_PROTOCOL + QLatin1String(".VCardField"), QVariant::fromValue(mPriv->adaptee->vcardField())); ret.insert(TP_QT_IFACE_PROTOCOL + QLatin1String(".EnglishName"), QVariant::fromValue(mPriv->adaptee->englishName())); ret.insert(TP_QT_IFACE_PROTOCOL + QLatin1String(".Icon"), QVariant::fromValue(mPriv->adaptee->icon())); ret.insert(TP_QT_IFACE_PROTOCOL + QLatin1String(".AuthenticationTypes"), QVariant::fromValue(mPriv->adaptee->authenticationTypes())); return ret; } /** * Return the list of interface names that have been set with * setConnectionInterfaces(). * * This list is exposed as the ConnectionInterfaces property of * this Protocol object on the bus and represents interface names * that might be in the Interfaces property of a Connection to this protocol. * * This property is immutable and cannot change after this Protocol * object has been registered on the bus with registerObject(). * * \return The list of interface names that have been set with * setConnectionInterfaces(). * \sa setConnectionInterfaces() */ QStringList BaseProtocol::connectionInterfaces() const { return mPriv->connInterfaces; } /** * Set the interface names that may appear on Connection objects of * this protocol. * * This property is immutable and cannot change after this Protocol * object has been registered on the bus with registerObject(). * * \param connInterfaces The list of interface names to set. * \sa connectionInterfaces() */ void BaseProtocol::setConnectionInterfaces(const QStringList &connInterfaces) { if (isRegistered()) { warning() << "BaseProtocol::setConnectionInterfaces: cannot change property after " "registration, immutable property"; return; } mPriv->connInterfaces = connInterfaces; } /** * Return the list of parameters that have been set with setParameters(). * * This list is exposed as the Parameters property of this Protocol object * on the bus and represents the parameters which may be specified in the * Parameters property of an Account for this protocol. * * This property is immutable and cannot change after this Protocol * object has been registered on the bus with registerObject(). * * \return The list of parameters that have been set with setParameters(). * \sa setParameters() */ ProtocolParameterList BaseProtocol::parameters() const { return mPriv->parameters; } /** * Set the parameters that may be specified in the Parameters property * of an Account for this protocol. * * This property is immutable and cannot change after this Protocol * object has been registered on the bus with registerObject(). * * \param parameters The list of parameters to set. * \sa parameters() */ void BaseProtocol::setParameters(const ProtocolParameterList ¶meters) { if (isRegistered()) { warning() << "BaseProtocol::setParameters: cannot change property after " "registration, immutable property"; return; } mPriv->parameters = parameters; } /** * Return the list of requestable channel classes that have been set * with setRequestableChannelClasses(). * * This list is exposed as the RequestableChannelClasses property of * this Protocol object on the bus and represents the channel classes * which might be requestable from a Connection to this protocol. * * This property is immutable and cannot change after this Protocol * object has been registered on the bus with registerObject(). * * \returns The list of requestable channel classes that have been set * with setRequestableChannelClasses() * \sa setRequestableChannelClasses() */ RequestableChannelClassSpecList BaseProtocol::requestableChannelClasses() const { return mPriv->rccSpecs; } /** * Set the channel classes which might be requestable from a Connection * to this protocol. * * This property is immutable and cannot change after this Protocol * object has been registered on the bus with registerObject(). * * \param rccSpecs The list of requestable channel classes to set. * \sa requestableChannelClasses() */ void BaseProtocol::setRequestableChannelClasses(const RequestableChannelClassSpecList &rccSpecs) { if (isRegistered()) { warning() << "BaseProtocol::setRequestableChannelClasses: cannot change property after " "registration, immutable property"; return; } mPriv->rccSpecs = rccSpecs; } /** * Return the name of the vcard field that has been set with setVCardField(). * * This is exposed as the VCardField property of this Protocol object on * the bus and represents the name of the most common vcard field used for * this protocol's contact identifiers, normalized to lower case. * * This property is immutable and cannot change after this Protocol * object has been registered on the bus with registerObject(). * * \return The name of the vcard field that has been set with setVCardField(). * \sa setVCardField() */ QString BaseProtocol::vcardField() const { return mPriv->vcardField; } /** * Set the name of the most common vcard field used for * this protocol's contact identifiers, normalized to lower case. * * For example, this would be x-jabber for Jabber/XMPP * (including Google Talk), or tel for the PSTN. * * This property is immutable and cannot change after this Protocol * object has been registered on the bus with registerObject(). * * \param vcardField The name of the vcard field to set. * \sa vcardField() */ void BaseProtocol::setVCardField(const QString &vcardField) { if (isRegistered()) { warning() << "BaseProtocol::setVCardField: cannot change property after " "registration, immutable property"; return; } mPriv->vcardField = vcardField; } /** * Return the name that has been set with setEnglishName(). * * This is exposed as the EnglishName property of this Protocol object on * the bus and represents the name of the protocol in a form suitable * for display to users, such as "AIM" or "Yahoo!". * * This property is immutable and cannot change after this Protocol * object has been registered on the bus with registerObject(). * * \return The name that has been set with setEnglishName(). * \sa setEnglishName() */ QString BaseProtocol::englishName() const { return mPriv->englishName; } /** * Set the name of the protocol in a form suitable for display to users, * such as "AIM" or "Yahoo!". * * This string should be in the C (english) locale. Clients are expected * to lookup a translation on their own translation catalogs and fall back * to this name if they have no translation for it. * * This property is immutable and cannot change after this Protocol * object has been registered on the bus with registerObject(). * * \param englishName The name to set. * \sa englishName() */ void BaseProtocol::setEnglishName(const QString &englishName) { if (isRegistered()) { warning() << "BaseProtocol::setEnglishName: cannot change property after " "registration, immutable property"; return; } mPriv->englishName = englishName; } /** * Return the icon name that has been set with setIconName(). * * This is exposed as the Icon property of this Protocol object on * the bus and represents the name of an icon in the system's icon * theme suitable for this protocol, such as "im-msn". * * This property is immutable and cannot change after this Protocol * object has been registered on the bus with registerObject(). * * \return The icon name set with setIconName(). * \sa setIconName() */ QString BaseProtocol::iconName() const { return mPriv->iconName; } /** * Set the name of an icon in the system's icon theme suitable * for this protocol, such as "im-msn". * * This property is immutable and cannot change after this Protocol * object has been registered on the bus with registerObject(). * * \param iconName The icon name to set. * \sa iconName() */ void BaseProtocol::setIconName(const QString &iconName) { if (isRegistered()) { warning() << "BaseProtocol::setIconName: cannot change property after " "registration, immutable property"; return; } mPriv->iconName = iconName; } /** * Return the list of interfaces that have been set with setAuthenticationTypes(). * * This is exposed as the AuthenticationTypes property of this Protocol object * on the bus and represents a list of D-Bus interfaces which provide * information as to what kind of authentication channels can possibly appear * before the connection reaches the CONNECTED state. * * This property is immutable and cannot change after this Protocol * object has been registered on the bus with registerObject(). * * \return The list of authentication types that have been * set with setAuthenticationTypes(). * \sa setAuthenticationTypes() */ QStringList BaseProtocol::authenticationTypes() const { return mPriv->authTypes; } /** * Set a list of D-Bus interfaces which provide information as to * what kind of authentication channels can possibly appear before * the connection reaches the CONNECTED state. * * This property is immutable and cannot change after this Protocol * object has been registered on the bus with registerObject(). * * \param authenticationTypes The list of interfaces to set. * \sa authenticationTypes() */ void BaseProtocol::setAuthenticationTypes(const QStringList &authenticationTypes) { if (isRegistered()) { warning() << "BaseProtocol::setAuthenticationTypes: cannot change property after " "registration, immutable property"; return; } mPriv->authTypes = authenticationTypes; } /** * Set a callback that will be called to create a new connection, when this * has been requested by a client. * * \param cb The callback to set. * \sa createConnection() */ void BaseProtocol::setCreateConnectionCallback(const CreateConnectionCallback &cb) { mPriv->createConnectionCb = cb; } /** * Create a new connection object by calling the callback that has been set * with setCreateConnectionCallback(). * * \param parameters The connection parameters. * \param error A pointer to a DBusError instance where any possible error * will be stored. * \return A pointer to the new connection, or a null BaseConnectionPtr if * no connection could be created, in which case \a error will contain an * appropriate error. * \sa setCreateConnectionCallback() */ BaseConnectionPtr BaseProtocol::createConnection(const QVariantMap ¶meters, Tp::DBusError *error) { if (!mPriv->createConnectionCb.isValid()) { error->set(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Not implemented")); return BaseConnectionPtr(); } return mPriv->createConnectionCb(parameters, error); } /** * Set a callback that will be called from a client to identify an account. * * This callback will be called when the IdentifyAccount method on the Protocol * D-Bus object has been called. * * \param cb The callback to set. * \sa identifyAccount() */ void BaseProtocol::setIdentifyAccountCallback(const IdentifyAccountCallback &cb) { mPriv->identifyAccountCb = cb; } /** * Return a string which uniquely identifies the account to which * the given parameters would connect, by calling the callback that * has been set with setIdentifyAccountCallback(). * * \param parameters The connection parameters, as they would * be provided to createConnection(). * \param error A pointer to a DBusError instance where any possible error * will be stored. * \return A string which uniquely identifies the account to which * the given parameters would connect, or an empty string if no callback * to create this string has been set with setIdentifyAccountCallback(). * \sa setIdentifyAccountCallback() */ QString BaseProtocol::identifyAccount(const QVariantMap ¶meters, Tp::DBusError *error) { if (!mPriv->identifyAccountCb.isValid()) { error->set(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Not implemented")); return QString(); } return mPriv->identifyAccountCb(parameters, error); } /** * Set a callback that will be called from a client to normalize a contact id. * * \param cb The callback to set. * \sa normalizeContact() */ void BaseProtocol::setNormalizeContactCallback(const NormalizeContactCallback &cb) { mPriv->normalizeContactCb = cb; } /** * Return a normalized version of the given \a contactId, by calling the callback * that has been set with setNormalizeContactCallback(). * * \param contactId The contact ID to normalize. * \param error A pointer to a DBusError instance where any possible error * will be stored. * \return A normalized version of the given \a contactId, or an empty string * if no callback to do the normalization has been set with setNormalizeContactCallback(). * \sa setNormalizeContactCallback() */ QString BaseProtocol::normalizeContact(const QString &contactId, Tp::DBusError *error) { if (!mPriv->normalizeContactCb.isValid()) { error->set(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Not implemented")); return QString(); } return mPriv->normalizeContactCb(contactId, error); } /** * Return a list of interfaces that have been plugged into this Protocol * D-Bus object with plugInterface(). * * This property is immutable and cannot change after this Protocol * object has been registered on the bus with registerObject(). * * \return A list containing all the Protocol interface implementation objects. * \sa plugInterface(), interface() */ QList BaseProtocol::interfaces() const { return mPriv->interfaces.values(); } /** * Return a pointer to the interface with the given name. * * \param interfaceName The D-Bus name of the interface, * ex. TP_QT_IFACE_PROTOCOL_INTERFACE_ADDRESSING. * \return A pointer to the AbstractProtocolInterface object that implements * the D-Bus interface with the given name, or a null pointer if such an interface * has not been plugged into this object. * \sa plugInterface(), interfaces() */ AbstractProtocolInterfacePtr BaseProtocol::interface(const QString &interfaceName) const { return mPriv->interfaces.value(interfaceName); } /** * Plug a new interface into this Protocol D-Bus object. * * This property is immutable and cannot change after this Protocol * object has been registered on the bus with registerObject(). * * \param interface An AbstractProtocolInterface instance that implements * the interface that is to be plugged. * \return \c true on success or \c false otherwise * \sa interfaces(), interface() */ bool BaseProtocol::plugInterface(const AbstractProtocolInterfacePtr &interface) { if (isRegistered()) { warning() << "Unable to plug protocol interface " << interface->interfaceName() << "- protocol already registered"; return false; } if (interface->isRegistered()) { warning() << "Unable to plug protocol interface" << interface->interfaceName() << "- interface already registered"; return false; } if (mPriv->interfaces.contains(interface->interfaceName())) { warning() << "Unable to plug protocol interface" << interface->interfaceName() << "- another interface with same name already plugged"; return false; } debug() << "Interface" << interface->interfaceName() << "plugged"; mPriv->interfaces.insert(interface->interfaceName(), interface); return true; } /** * Reimplemented from DBusService. */ bool BaseProtocol::registerObject(const QString &busName, const QString &objectPath, DBusError *error) { if (isRegistered()) { return true; } foreach (const AbstractProtocolInterfacePtr &iface, mPriv->interfaces) { if (!iface->registerInterface(dbusObject())) { // lets not fail if an optional interface fails registering, lets warn only warning() << "Unable to register interface" << iface->interfaceName() << "for protocol" << mPriv->name; } } return DBusService::registerObject(busName, objectPath, error); } /** * \class AbstractProtocolInterface * \ingroup servicecm * \headerfile TelepathyQt/base-protocol.h * * \brief Base class for all the Protocol object interface implementations. */ // AbstractProtocolInterface AbstractProtocolInterface::AbstractProtocolInterface(const QString &interfaceName) : AbstractDBusServiceInterface(interfaceName) { } AbstractProtocolInterface::~AbstractProtocolInterface() { } // Proto.I.Addressing BaseProtocolAddressingInterface::Adaptee::Adaptee(BaseProtocolAddressingInterface *interface) : QObject(interface), mInterface(interface) { } BaseProtocolAddressingInterface::Adaptee::~Adaptee() { } QStringList BaseProtocolAddressingInterface::Adaptee::addressableVCardFields() const { return mInterface->addressableVCardFields(); } QStringList BaseProtocolAddressingInterface::Adaptee::addressableURISchemes() const { return mInterface->addressableUriSchemes(); } void BaseProtocolAddressingInterface::Adaptee::normalizeVCardAddress(const QString& vcardField, const QString& vcardAddress, const Tp::Service::ProtocolInterfaceAddressingAdaptor::NormalizeVCardAddressContextPtr &context) { DBusError error; QString normalizedAddress; normalizedAddress = mInterface->normalizeVCardAddress(vcardField, vcardAddress, &error); if (normalizedAddress.isEmpty()) { context->setFinishedWithError(error.name(), error.message()); return; } context->setFinished(normalizedAddress); } void BaseProtocolAddressingInterface::Adaptee::normalizeContactURI(const QString& uri, const Tp::Service::ProtocolInterfaceAddressingAdaptor::NormalizeContactURIContextPtr &context) { DBusError error; QString normalizedUri; normalizedUri = mInterface->normalizeContactUri(uri, &error); if (normalizedUri.isEmpty()) { context->setFinishedWithError(error.name(), error.message()); return; } context->setFinished(normalizedUri); } struct TP_QT_NO_EXPORT BaseProtocolAddressingInterface::Private { Private(BaseProtocolAddressingInterface *parent) : adaptee(new BaseProtocolAddressingInterface::Adaptee(parent)) { } BaseProtocolAddressingInterface::Adaptee *adaptee; QStringList addressableVCardFields; QStringList addressableUriSchemes; NormalizeVCardAddressCallback normalizeVCardAddressCb; NormalizeContactUriCallback normalizeContactUriCb; }; /** * \class BaseProtocolAddressingInterface * \ingroup servicecm * \headerfile TelepathyQt/base-protocol.h * * \brief Base class for implementations of Protocol.Interface.Addressing */ /** * Class constructor. */ BaseProtocolAddressingInterface::BaseProtocolAddressingInterface() : AbstractProtocolInterface(TP_QT_IFACE_PROTOCOL_INTERFACE_ADDRESSING), mPriv(new Private(this)) { } /** * Class destructor. */ BaseProtocolAddressingInterface::~BaseProtocolAddressingInterface() { delete mPriv; } /** * Return the immutable properties of this interface. * * Immutable properties cannot change after the interface has been registered * on a service on the bus with registerInterface(). * * \return The immutable properties of this interface. */ QVariantMap BaseProtocolAddressingInterface::immutableProperties() const { // no immutable property return QVariantMap(); } /** * Return the list of addressable vcard fields that have been set with * setAddressableVCardFields(). * * This list is exposed as the AddressableVCardFields property of this * interface on the bus and represents the vcard fields that can be used * to request a contact for this protocol, normalized to lower case. * * \return The list of addressable vcard fields that have been set with * setAddressableVCardFields(). * \sa setAddressableVCardFields() */ QStringList BaseProtocolAddressingInterface::addressableVCardFields() const { return mPriv->addressableVCardFields; } /** * Set the list of vcard fields that can be used to request a contact for this protocol. * * All the field names should be normalized to lower case. * * \param vcardFields The list of vcard fields to set. * \sa addressableVCardFields() */ void BaseProtocolAddressingInterface::setAddressableVCardFields(const QStringList &vcardFields) { mPriv->addressableVCardFields = vcardFields; } /** * Return the list of URI schemes that have been set with * setAddressableUriSchemes(). * * This list is exposed as the AddressableURISchemes property of this interface * on the bus and represents the URI schemes that are supported by this * protocol, like "tel" or "sip". * * \return The list of addressable URI schemes that have been set with * setAddressableUriSchemes(). * \sa setAddressableUriSchemes() */ QStringList BaseProtocolAddressingInterface::addressableUriSchemes() const { return mPriv->addressableUriSchemes; } /** * Set the list of URI schemes that are supported by this protocol. * * \param uriSchemes The list of URI schemes to set. * \sa addressableUriSchemes() */ void BaseProtocolAddressingInterface::setAddressableUriSchemes(const QStringList &uriSchemes) { mPriv->addressableUriSchemes = uriSchemes; } /** * Set a callback that will be called from a client to normalize a given * vcard address. * * This callback will be called when the NormalizeVCardAddress method * on the Protocol.Interface.Addressing D-Bus interface has been called. * * \param cb The callback to set. * \sa normalizeVCardAddress() */ void BaseProtocolAddressingInterface::setNormalizeVCardAddressCallback( const NormalizeVCardAddressCallback &cb) { mPriv->normalizeVCardAddressCb = cb; } /** * Return a normalized version of the given \a vcardAddress, which corresponds * to the given \a vcardField, by calling the callback that has been set * with setNormalizeVCardAddressCallback(). * * \param vcardField The vcard field of the address we are normalizing. * \param vcardAddress The address to normalize, which is assumed to belong to a contact. * \param error A pointer to a DBusError instance where any possible error * will be stored. * \return A normalized version of the given \a vcardAddress, or an empty * string if no callback to do the normalization has been set with * setNormalizeVCardAddressCallback(). * \sa setNormalizeVCardAddressCallback() */ QString BaseProtocolAddressingInterface::normalizeVCardAddress(const QString &vcardField, const QString &vcardAddress, DBusError *error) { if (!mPriv->normalizeVCardAddressCb.isValid()) { error->set(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Not implemented")); return QString(); } return mPriv->normalizeVCardAddressCb(vcardField, vcardAddress, error); } /** * Set a callback that will be called from a client to normalize a given contact URI. * * This callback will be called when the NormalizeContactURI method * on the Protocol.Interface.Addressing D-Bus interface has been called. * * \param cb The callback to set. * \sa normalizeContactUri() */ void BaseProtocolAddressingInterface::setNormalizeContactUriCallback( const NormalizeContactUriCallback &cb) { mPriv->normalizeContactUriCb = cb; } /** * Return a normalized version of the given contact URI, \a uri, by calling * the callback that has been set with setNormalizeContactUriCallback(). * * \param uri The contact URI to normalize. * \param error A pointer to a DBusError instance where any possible error * will be stored. * \return A normalized version of the given \a uri, or an empty string if no * callback to do the normalization has been set with setNormalizeContactUriCallback(). * \sa setNormalizeContactUriCallback() */ QString BaseProtocolAddressingInterface::normalizeContactUri(const QString &uri, DBusError *error) { if (!mPriv->normalizeContactUriCb.isValid()) { error->set(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Not implemented")); return QString(); } return mPriv->normalizeContactUriCb(uri, error); } void BaseProtocolAddressingInterface::createAdaptor() { (void) new Service::ProtocolInterfaceAddressingAdaptor(dbusObject()->dbusConnection(), mPriv->adaptee, dbusObject()); } // Proto.I.Avatars BaseProtocolAvatarsInterface::Adaptee::Adaptee(BaseProtocolAvatarsInterface *interface) : QObject(interface), mInterface(interface) { } BaseProtocolAvatarsInterface::Adaptee::~Adaptee() { } QStringList BaseProtocolAvatarsInterface::Adaptee::supportedAvatarMIMETypes() const { return mInterface->avatarDetails().supportedMimeTypes(); } uint BaseProtocolAvatarsInterface::Adaptee::minimumAvatarHeight() const { return mInterface->avatarDetails().minimumHeight(); } uint BaseProtocolAvatarsInterface::Adaptee::minimumAvatarWidth() const { return mInterface->avatarDetails().minimumWidth(); } uint BaseProtocolAvatarsInterface::Adaptee::recommendedAvatarHeight() const { return mInterface->avatarDetails().recommendedHeight(); } uint BaseProtocolAvatarsInterface::Adaptee::recommendedAvatarWidth() const { return mInterface->avatarDetails().recommendedWidth(); } uint BaseProtocolAvatarsInterface::Adaptee::maximumAvatarHeight() const { return mInterface->avatarDetails().maximumHeight(); } uint BaseProtocolAvatarsInterface::Adaptee::maximumAvatarWidth() const { return mInterface->avatarDetails().maximumWidth(); } uint BaseProtocolAvatarsInterface::Adaptee::maximumAvatarBytes() const { return mInterface->avatarDetails().maximumBytes(); } struct TP_QT_NO_EXPORT BaseProtocolAvatarsInterface::Private { Private(BaseProtocolAvatarsInterface *parent) : adaptee(new BaseProtocolAvatarsInterface::Adaptee(parent)) { } BaseProtocolAvatarsInterface::Adaptee *adaptee; AvatarSpec avatarDetails; }; /** * \class BaseProtocolAvatarsInterface * \ingroup servicecm * \headerfile TelepathyQt/base-protocol.h * * \brief Base class for implementations of Protocol.Interface.Avatars */ /** * Class constructor. */ BaseProtocolAvatarsInterface::BaseProtocolAvatarsInterface() : AbstractProtocolInterface(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS), mPriv(new Private(this)) { } /** * Class destructor. */ BaseProtocolAvatarsInterface::~BaseProtocolAvatarsInterface() { delete mPriv; } /** * Return the immutable properties of this interface. * * Immutable properties cannot change after the interface has been registered * on a service on the bus with registerInterface(). * * \return The immutable properties of this interface. */ QVariantMap BaseProtocolAvatarsInterface::immutableProperties() const { QVariantMap ret; ret.insert(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".SupportedAvatarMIMETypes"), QVariant::fromValue(mPriv->adaptee->supportedAvatarMIMETypes())); ret.insert(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MinimumAvatarHeight"), QVariant::fromValue(mPriv->adaptee->minimumAvatarHeight())); ret.insert(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MinimumAvatarWidth"), QVariant::fromValue(mPriv->adaptee->minimumAvatarWidth())); ret.insert(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".RecommendedAvatarHeight"), QVariant::fromValue(mPriv->adaptee->recommendedAvatarHeight())); ret.insert(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".RecommendedAvatarWidth"), QVariant::fromValue(mPriv->adaptee->recommendedAvatarWidth())); ret.insert(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MaximumAvatarHeight"), QVariant::fromValue(mPriv->adaptee->maximumAvatarHeight())); ret.insert(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MaximumAvatarWidth"), QVariant::fromValue(mPriv->adaptee->maximumAvatarWidth())); ret.insert(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MaximumAvatarBytes"), QVariant::fromValue(mPriv->adaptee->maximumAvatarBytes())); return ret; } /** * Return the AvatarSpec that has been set with setAvatarDetails(). * * The contents of this AvatarSpec are exposed as the various properties * of this interface on the bus and represent the expected values of the * Connection.Interface.Avatars properties on connections of this protocol. * * This property is immutable and cannot change after this interface * has been registered on an object on the bus with registerInterface(). * * \return The AvatarSpec that has been set with setAvatarDetails(). * \sa setAvatarDetails() */ AvatarSpec BaseProtocolAvatarsInterface::avatarDetails() const { return mPriv->avatarDetails; } /** * Set the avatar details that will be exposed on the properties of this * interface on the bus. * * This property is immutable and cannot change after this interface * has been registered on an object on the bus with registerInterface(). * * \param details The details to set. * \sa avatarDetails() */ void BaseProtocolAvatarsInterface::setAvatarDetails(const AvatarSpec &details) { if (isRegistered()) { warning() << "BaseProtocolAvatarsInterface::setAvatarDetails: cannot change property after " "registration, immutable property"; return; } mPriv->avatarDetails = details; } void BaseProtocolAvatarsInterface::createAdaptor() { (void) new Service::ProtocolInterfaceAvatarsAdaptor(dbusObject()->dbusConnection(), mPriv->adaptee, dbusObject()); } // Proto.I.Presence BaseProtocolPresenceInterface::Adaptee::Adaptee(BaseProtocolPresenceInterface *interface) : QObject(interface), mInterface(interface) { } BaseProtocolPresenceInterface::Adaptee::~Adaptee() { } SimpleStatusSpecMap BaseProtocolPresenceInterface::Adaptee::statuses() const { return mInterface->statuses().bareSpecs(); } struct TP_QT_NO_EXPORT BaseProtocolPresenceInterface::Private { Private(BaseProtocolPresenceInterface *parent) : adaptee(new BaseProtocolPresenceInterface::Adaptee(parent)) { } BaseProtocolPresenceInterface::Adaptee *adaptee; PresenceSpecList statuses; }; /** * \class BaseProtocolPresenceInterface * \ingroup servicecm * \headerfile TelepathyQt/base-protocol.h * * \brief Base class for implementations of Protocol.Interface.Presence */ /** * Class constructor. */ BaseProtocolPresenceInterface::BaseProtocolPresenceInterface() : AbstractProtocolInterface(TP_QT_IFACE_PROTOCOL_INTERFACE_PRESENCE), mPriv(new Private(this)) { } /** * Class destructor. */ BaseProtocolPresenceInterface::~BaseProtocolPresenceInterface() { delete mPriv; } /** * Return the immutable properties of this interface. * * Immutable properties cannot change after the interface has been registered * on a service on the bus with registerInterface(). * * \return The immutable properties of this interface. */ QVariantMap BaseProtocolPresenceInterface::immutableProperties() const { QVariantMap map; map.insert(TP_QT_IFACE_PROTOCOL_INTERFACE_PRESENCE + QLatin1String(".Statuses"), QVariant::fromValue(mPriv->adaptee->statuses())); return map; } /** * Return the list of presence statuses that have been set with setStatuses(). * * This list is exposed as the Statuses property of this interface on the bus * and represents the statuses that might appear in the * Connection.Interface.SimplePresence.Statuses property on a connection to * this protocol that supports SimplePresence. * * This property is immutable and cannot change after this interface * has been registered on an object on the bus with registerInterface(). * * \return The list of presence statuses that have been set with setStatuses(). * \sa setStatuses() */ PresenceSpecList BaseProtocolPresenceInterface::statuses() const { return mPriv->statuses; } /** * Set the list of statuses that might appear in the * Connection.Interface.SimplePresence.Statuses property on a connection to * this protocol that supports SimplePresence. * * This property is immutable and cannot change after this interface * has been registered on an object on the bus with registerInterface(). * * \param statuses The statuses list to set. * \sa statuses() */ void BaseProtocolPresenceInterface::setStatuses(const PresenceSpecList &statuses) { if (isRegistered()) { warning() << "BaseProtocolPresenceInterface::setStatuses: cannot change property after " "registration, immutable property"; return; } mPriv->statuses = statuses; } void BaseProtocolPresenceInterface::createAdaptor() { (void) new Service::ProtocolInterfacePresenceAdaptor(dbusObject()->dbusConnection(), mPriv->adaptee, dbusObject()); } } telepathy-qt-0.9.3/TelepathyQt/future.cpp0000644000175200001440000000243312000056607022700 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include "TelepathyQt/future-internal.h" #include "TelepathyQt/_gen/future-channel-body.hpp" #include "TelepathyQt/_gen/future-channel.moc.hpp" #include "TelepathyQt/_gen/future-channel-dispatcher-body.hpp" #include "TelepathyQt/_gen/future-channel-dispatcher.moc.hpp" #include "TelepathyQt/_gen/future-misc-body.hpp" #include "TelepathyQt/_gen/future-misc.moc.hpp" telepathy-qt-0.9.3/TelepathyQt/Functors0000644000175200001440000000034612000056607022411 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_Functors_HEADER_GUARD_ #define _TelepathyQt_Functors_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/account-capability-filter.dox0000644000175200001440000000230012000056607026425 0ustar00collabora-develusers00000000000000/* * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 */ /** * \class Tp::AccountCapabilityFilter * \ingroup utils * \headerfile TelepathyQt/account-capability-filter.h * * \brief The AccountCapabilityFilter class provides a filter object to be used * to filter accounts by capabilities. */ telepathy-qt-0.9.3/TelepathyQt/outgoing-dbus-tube-channel.h0000644000175200001440000000346412000056607026171 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @license LGPL 2.1 * * 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 _TelepathyQt_outgoing_dbus_tube_channel_h_HEADER_GUARD_ #define _TelepathyQt_outgoing_dbus_tube_channel_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include namespace Tp { class PendingDBusTubeConnection; class TP_QT_EXPORT OutgoingDBusTubeChannel : public DBusTubeChannel { Q_OBJECT Q_DISABLE_COPY(OutgoingDBusTubeChannel) public: static OutgoingDBusTubeChannelPtr create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties); virtual ~OutgoingDBusTubeChannel(); PendingDBusTubeConnection *offerTube(const QVariantMap ¶meters, bool allowOtherUsers = false); protected: OutgoingDBusTubeChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties); private: struct Private; friend struct Private; Private *mPriv; }; } #endif telepathy-qt-0.9.3/TelepathyQt/pending-connection.h0000644000175200001440000000403012000056607024607 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008 Collabora Ltd. * @copyright Copyright (C) 2008 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_pending_connection_h_HEADER_GUARD_ #define _TelepathyQt_pending_connection_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include class QDBusPendingCallWatcher; namespace Tp { class ConnectionManager; class TP_QT_EXPORT PendingConnection : public PendingOperation { Q_OBJECT Q_DISABLE_COPY(PendingConnection); public: ~PendingConnection(); ConnectionManagerPtr manager() const; ConnectionPtr connection() const; private Q_SLOTS: TP_QT_NO_EXPORT void onCallFinished(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void onConnectionBuilt(Tp::PendingOperation *op); private: friend class ConnectionManagerLowlevel; TP_QT_NO_EXPORT PendingConnection(const ConnectionManagerPtr &manager, const QString &protocol, const QVariantMap ¶meters); TP_QT_NO_EXPORT PendingConnection(const QString &error, const QString &errorMessage); struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/ChannelTypeCallInterface0000644000175200001440000000040512000056607025431 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelTypeCallInterface_HEADER_GUARD_ #define _TelepathyQt_ChannelTypeCallInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/Object0000644000175200001440000000034012000056607022006 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_Object_HEADER_GUARD_ #define _TelepathyQt_Object_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/protocol-parameter.h0000644000175200001440000000546512000056607024662 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_protocol_parameter_h_HEADER_GUARD_ #define _TelepathyQt_protocol_parameter_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include #include #include #include namespace Tp { class TP_QT_EXPORT ProtocolParameter { public: ProtocolParameter(); ProtocolParameter(const ParamSpec &spec); ProtocolParameter(const QString &name, const QDBusSignature &dbusSignature, ConnMgrParamFlags flags, QVariant defaultValue = QVariant()); ProtocolParameter(const QString &name, const QString &dbusSignature, ConnMgrParamFlags flags, QVariant defaultValue = QVariant()); ProtocolParameter(const ProtocolParameter &other); ~ProtocolParameter(); bool isValid() const { return mPriv.constData() != 0; } ProtocolParameter &operator=(const ProtocolParameter &other); bool operator==(const ProtocolParameter &other) const; bool operator==(const QString &name) const; bool operator<(const ProtocolParameter &other) const; QString name() const; QDBusSignature dbusSignature() const; QVariant::Type type() const; QVariant defaultValue() const; bool isRequired() const; bool isSecret() const; bool isRequiredForRegistration() const; ParamSpec bareParameter() const; private: friend class ConnectionManager; friend class ProtocolInfo; struct Private; friend struct Private; QSharedDataPointer mPriv; }; typedef QList ProtocolParameterList; uint qHash(const ProtocolParameter ¶meter); } // Tp Q_DECLARE_METATYPE(Tp::ProtocolParameter); Q_DECLARE_METATYPE(Tp::ProtocolParameterList); #endif telepathy-qt-0.9.3/TelepathyQt/connection.cpp0000644000175200001440000026670112000056607023537 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2010 Collabora Ltd. * @copyright Copyright (C) 2008-2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include #include "TelepathyQt/connection-internal.h" #include "TelepathyQt/_gen/cli-connection.moc.hpp" #include "TelepathyQt/_gen/cli-connection-body.hpp" #include "TelepathyQt/_gen/connection.moc.hpp" #include "TelepathyQt/_gen/connection-internal.moc.hpp" #include "TelepathyQt/_gen/connection-lowlevel.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT Connection::Private { Private(Connection *parent, const ChannelFactoryConstPtr &chanFactory, const ContactFactoryConstPtr &contactFactory); ~Private(); void init(); static void introspectMain(Private *self); void introspectMainFallbackStatus(); void introspectMainFallbackInterfaces(); void introspectMainFallbackSelfHandle(); void introspectCapabilities(); void introspectContactAttributeInterfaces(); static void introspectSelfContact(Private *self); static void introspectSimplePresence(Private *self); static void introspectRoster(Private *self); static void introspectRosterGroups(Private *self); static void introspectBalance(Private *self); static void introspectConnected(Private *self); void continueMainIntrospection(); void setCurrentStatus(uint status); void forceCurrentStatus(uint status); void setInterfaces(const QStringList &interfaces); // Should always be used instead of directly using baseclass invalidate() void invalidateResetCaps(const QString &errorName, const QString &errorMessage); struct HandleContext; // Public object Connection *parent; ConnectionLowlevelPtr lowlevel; // Factories ChannelFactoryConstPtr chanFactory; ContactFactoryConstPtr contactFactory; // Instance of generated interface class Client::ConnectionInterface *baseInterface; // Mandatory properties interface proxy Client::DBus::PropertiesInterface *properties; // Optional interface proxies Client::ConnectionInterfaceSimplePresenceInterface *simplePresence; ReadinessHelper *readinessHelper; // Introspection QQueue introspectMainQueue; // FeatureCore // keep pendingStatus and pendingStatusReason until we emit statusChanged // so Connection::status() and Connection::statusReason() are consistent bool introspectingConnected; uint pendingStatus; uint pendingStatusReason; uint status; uint statusReason; ErrorDetails errorDetails; uint selfHandle; bool immortalHandles; ConnectionCapabilities caps; ContactManagerPtr contactManager; // FeatureSelfContact bool introspectingSelfContact; bool reintrospectSelfContactRequired; ContactPtr selfContact; QStringList contactAttributeInterfaces; // FeatureSimplePresence SimpleStatusSpecMap simplePresenceStatuses; uint maxPresenceStatusMessageLength; // FeatureAccountBalance CurrencyAmount accountBalance; // misc // (Bus connection name, service name) -> HandleContext static QHash, HandleContext *> handleContexts; static QMutex handleContextsLock; HandleContext *handleContext; QString cmName; QString protocolName; }; struct TP_QT_NO_EXPORT ConnectionLowlevel::Private { Private(Connection *conn) : conn(conn) { } WeakPtr conn; HandleIdentifierMap contactsIds; }; // Handle tracking struct TP_QT_NO_EXPORT Connection::Private::HandleContext { struct Type { QHash refcounts; QSet toRelease; uint requestsInFlight; bool releaseScheduled; Type() : requestsInFlight(0), releaseScheduled(false) { } }; HandleContext() : refcount(0) { } int refcount; QMutex lock; QHash types; }; Connection::Private::Private(Connection *parent, const ChannelFactoryConstPtr &chanFactory, const ContactFactoryConstPtr &contactFactory) : parent(parent), lowlevel(ConnectionLowlevelPtr(new ConnectionLowlevel(parent))), chanFactory(chanFactory), contactFactory(contactFactory), baseInterface(new Client::ConnectionInterface(parent)), properties(parent->interface()), simplePresence(0), readinessHelper(parent->readinessHelper()), introspectingConnected(false), pendingStatus((uint) -1), pendingStatusReason(ConnectionStatusReasonNoneSpecified), status((uint) -1), statusReason(ConnectionStatusReasonNoneSpecified), selfHandle(0), immortalHandles(false), contactManager(ContactManagerPtr(new ContactManager(parent))), introspectingSelfContact(false), reintrospectSelfContactRequired(false), maxPresenceStatusMessageLength(0), handleContext(0) { accountBalance.amount = 0; accountBalance.scale = 0; Q_ASSERT(properties != 0); if (chanFactory->dbusConnection().name() != parent->dbusConnection().name()) { warning() << " The D-Bus connection in the channel factory is not the proxy connection"; } init(); ReadinessHelper::Introspectables introspectables; ReadinessHelper::Introspectable introspectableCore( QSet() << (uint) -1 << ConnectionStatusDisconnected << ConnectionStatusConnected, // makesSenseForStatuses Features(), // dependsOnFeatures (none) QStringList(), // dependsOnInterfaces (none) (ReadinessHelper::IntrospectFunc) &Private::introspectMain, this); introspectables[FeatureCore] = introspectableCore; ReadinessHelper::Introspectable introspectableSelfContact( QSet() << ConnectionStatusConnected, // makesSenseForStatuses Features() << FeatureCore, // dependsOnFeatures (core) QStringList(), // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::introspectSelfContact, this); introspectables[FeatureSelfContact] = introspectableSelfContact; ReadinessHelper::Introspectable introspectableSimplePresence( QSet() << ConnectionStatusDisconnected << ConnectionStatusConnected, // makesSenseForStatuses Features() << FeatureCore, // dependsOnFeatures (core) QStringList() << TP_QT_IFACE_CONNECTION_INTERFACE_SIMPLE_PRESENCE, // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::introspectSimplePresence, this); introspectables[FeatureSimplePresence] = introspectableSimplePresence; ReadinessHelper::Introspectable introspectableRoster( QSet() << ConnectionStatusConnected, // makesSenseForStatuses Features() << FeatureCore, // dependsOnFeatures (core) QStringList() << TP_QT_IFACE_CONNECTION_INTERFACE_CONTACTS, // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::introspectRoster, this); introspectables[FeatureRoster] = introspectableRoster; ReadinessHelper::Introspectable introspectableRosterGroups( QSet() << ConnectionStatusConnected, // makesSenseForStatuses Features() << FeatureRoster, // dependsOnFeatures (core) QStringList() << TP_QT_IFACE_CONNECTION_INTERFACE_REQUESTS, // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::introspectRosterGroups, this); introspectables[FeatureRosterGroups] = introspectableRosterGroups; ReadinessHelper::Introspectable introspectableBalance( QSet() << ConnectionStatusConnected, // makesSenseForStatuses Features() << FeatureCore, // dependsOnFeatures (core) QStringList() << TP_QT_IFACE_CONNECTION_INTERFACE_BALANCE, // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::introspectBalance, this); introspectables[FeatureAccountBalance] = introspectableBalance; ReadinessHelper::Introspectable introspectableConnected( QSet() << (uint) -1 << ConnectionStatusDisconnected << ConnectionStatusConnecting << ConnectionStatusConnected, // makesSenseForStatuses Features() << FeatureCore, // dependsOnFeatures (none) QStringList(), // dependsOnInterfaces (none) (ReadinessHelper::IntrospectFunc) &Private::introspectConnected, this); introspectables[FeatureConnected] = introspectableConnected; readinessHelper->addIntrospectables(introspectables); readinessHelper->setCurrentStatus(status); parent->connect(readinessHelper, SIGNAL(statusReady(uint)), SLOT(onStatusReady(uint))); // FIXME: QRegExp probably isn't the most efficient possible way to parse // this :-) QRegExp rx(QLatin1String("^") + TP_QT_CONNECTION_OBJECT_PATH_BASE + QLatin1String( "([_A-Za-z][_A-Za-z0-9]*)" // cap(1) is the CM "/([_A-Za-z][_A-Za-z0-9]*)" // cap(2) is the protocol "/([_A-Za-z][_A-Za-z0-9]*)" // account-specific part )); if (rx.exactMatch(parent->objectPath())) { cmName = rx.cap(1); protocolName = rx.cap(2); } else { warning() << "Connection object path is not spec-compliant, " "trying again with a different account-specific part check"; rx = QRegExp(QLatin1String("^") + TP_QT_CONNECTION_OBJECT_PATH_BASE + QLatin1String( "([_A-Za-z][_A-Za-z0-9]*)" // cap(1) is the CM "/([_A-Za-z][_A-Za-z0-9]*)" // cap(2) is the protocol "/([_A-Za-z0-9]*)" // account-specific part )); if (rx.exactMatch(parent->objectPath())) { cmName = rx.cap(1); protocolName = rx.cap(2); } else { warning() << "Not a valid Connection object path:" << parent->objectPath(); } } } Connection::Private::~Private() { contactManager->resetRoster(); // Clear selfContact so its handle will be released cleanly before the // handleContext selfContact.reset(); QMutexLocker locker(&handleContextsLock); // All handle contexts locked, so safe if (!--handleContext->refcount) { if (!immortalHandles) { debug() << "Destroying HandleContext"; foreach (uint handleType, handleContext->types.keys()) { HandleContext::Type type = handleContext->types[handleType]; if (!type.refcounts.empty()) { debug() << " Still had references to" << type.refcounts.size() << "handles, releasing now"; baseInterface->ReleaseHandles(handleType, type.refcounts.keys()); } if (!type.toRelease.empty()) { debug() << " Was going to release" << type.toRelease.size() << "handles, doing that now"; baseInterface->ReleaseHandles(handleType, type.toRelease.toList()); } } } handleContexts.remove(qMakePair(baseInterface->connection().name(), parent->objectPath())); delete handleContext; } else { Q_ASSERT(handleContext->refcount > 0); } } void Connection::Private::init() { debug() << "Connecting to ConnectionError()"; parent->connect(baseInterface, SIGNAL(ConnectionError(QString,QVariantMap)), SLOT(onConnectionError(QString,QVariantMap))); debug() << "Connecting to StatusChanged()"; parent->connect(baseInterface, SIGNAL(StatusChanged(uint,uint)), SLOT(onStatusChanged(uint,uint))); debug() << "Connecting to SelfHandleChanged()"; parent->connect(baseInterface, SIGNAL(SelfHandleChanged(uint)), SLOT(onSelfHandleChanged(uint))); QMutexLocker locker(&handleContextsLock); QString busConnectionName = baseInterface->connection().name(); if (handleContexts.contains(qMakePair(busConnectionName, parent->objectPath()))) { debug() << "Reusing existing HandleContext for" << parent->objectPath(); handleContext = handleContexts[ qMakePair(busConnectionName, parent->objectPath())]; } else { debug() << "Creating new HandleContext for" << parent->objectPath(); handleContext = new HandleContext; handleContexts[ qMakePair(busConnectionName, parent->objectPath())] = handleContext; } // All handle contexts locked, so safe ++handleContext->refcount; } void Connection::Private::introspectMain(Connection::Private *self) { debug() << "Calling Properties::GetAll(Connection)"; QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( self->properties->GetAll(TP_QT_IFACE_CONNECTION), self->parent); self->parent->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotMainProperties(QDBusPendingCallWatcher*))); } void Connection::Private::introspectMainFallbackStatus() { debug() << "Calling GetStatus()"; QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(baseInterface->GetStatus(), parent); parent->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotStatus(QDBusPendingCallWatcher*))); } void Connection::Private::introspectMainFallbackInterfaces() { debug() << "Calling GetInterfaces()"; QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(baseInterface->GetInterfaces(), parent); parent->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotInterfaces(QDBusPendingCallWatcher*))); } void Connection::Private::introspectMainFallbackSelfHandle() { debug() << "Calling GetSelfHandle()"; QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(baseInterface->GetSelfHandle(), parent); parent->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotSelfHandle(QDBusPendingCallWatcher*))); } void Connection::Private::introspectCapabilities() { debug() << "Retrieving capabilities"; QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( properties->Get( TP_QT_IFACE_CONNECTION_INTERFACE_REQUESTS, QLatin1String("RequestableChannelClasses")), parent); parent->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotCapabilities(QDBusPendingCallWatcher*))); } void Connection::Private::introspectContactAttributeInterfaces() { debug() << "Retrieving contact attribute interfaces"; QDBusPendingCall call = properties->Get( TP_QT_IFACE_CONNECTION_INTERFACE_CONTACTS, QLatin1String("ContactAttributeInterfaces")); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, parent); parent->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotContactAttributeInterfaces(QDBusPendingCallWatcher*))); } void Connection::Private::introspectSelfContact(Connection::Private *self) { debug() << "Building self contact"; Q_ASSERT(!self->introspectingSelfContact); self->introspectingSelfContact = true; self->reintrospectSelfContactRequired = false; PendingContacts *contacts = self->contactManager->contactsForHandles( UIntList() << self->selfHandle); self->parent->connect(contacts, SIGNAL(finished(Tp::PendingOperation*)), SLOT(gotSelfContact(Tp::PendingOperation*))); } void Connection::Private::introspectSimplePresence(Connection::Private *self) { Q_ASSERT(self->properties != 0); debug() << "Calling Properties::Get(" "Connection.I.SimplePresence.Statuses)"; QDBusPendingCall call = self->properties->GetAll( TP_QT_IFACE_CONNECTION_INTERFACE_SIMPLE_PRESENCE); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, self->parent); self->parent->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotSimpleStatuses(QDBusPendingCallWatcher*))); } void Connection::Private::introspectRoster(Connection::Private *self) { debug() << "Introspecting roster"; PendingOperation *op = self->contactManager->introspectRoster(); self->parent->connect(op, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onIntrospectRosterFinished(Tp::PendingOperation*))); } void Connection::Private::introspectRosterGroups(Connection::Private *self) { debug() << "Introspecting roster groups"; PendingOperation *op = self->contactManager->introspectRosterGroups(); self->parent->connect(op, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onIntrospectRosterGroupsFinished(Tp::PendingOperation*))); } void Connection::Private::introspectBalance(Connection::Private *self) { debug() << "Introspecting balance"; // we already checked if balance interface exists, so bypass requests // interface checking Client::ConnectionInterfaceBalanceInterface *iface = self->parent->interface(); debug() << "Connecting to Balance.BalanceChanged"; self->parent->connect(iface, SIGNAL(BalanceChanged(Tp::CurrencyAmount)), SLOT(onBalanceChanged(Tp::CurrencyAmount))); debug() << "Retrieving balance"; QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( self->properties->Get( TP_QT_IFACE_CONNECTION_INTERFACE_BALANCE, QLatin1String("AccountBalance")), self->parent); self->parent->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotBalance(QDBusPendingCallWatcher*))); } void Connection::Private::introspectConnected(Connection::Private *self) { Q_ASSERT(!self->introspectingConnected); self->introspectingConnected = true; if (self->pendingStatus == ConnectionStatusConnected) { self->readinessHelper->setIntrospectCompleted(FeatureConnected, true); self->introspectingConnected = false; } } void Connection::Private::continueMainIntrospection() { if (!parent->isValid()) { debug() << parent << "stopping main introspection, as it has been invalidated"; return; } if (introspectMainQueue.isEmpty()) { readinessHelper->setIntrospectCompleted(FeatureCore, true); } else { (this->*(introspectMainQueue.dequeue()))(); } } void Connection::Private::setCurrentStatus(uint status) { // ReadinessHelper waits for all in-flight introspection ops to finish for the current status // before proceeding to a new one. // // Therefore we don't need any safeguarding here to prevent finishing introspection when there // is a pending status change. However, we can speed up the process slightly by canceling any // pending introspect ops from our local introspection queue when it's waiting for us. introspectMainQueue.clear(); if (introspectingConnected) { // On the other hand, we have to finish the Connected introspection for now, as // ReadinessHelper would otherwise wait indefinitely for it to land debug() << "Finishing FeatureConnected for status" << this->status << "to allow ReadinessHelper to introspect new status" << status; readinessHelper->setIntrospectCompleted(FeatureConnected, true); introspectingConnected = false; } readinessHelper->setCurrentStatus(status); } void Connection::Private::forceCurrentStatus(uint status) { // only update the status if we did not get it from StatusChanged if (pendingStatus == (uint) -1) { debug() << "Got status:" << status; pendingStatus = status; // No need to re-run introspection as we just received the status. Let // the introspection continue normally but update readinessHelper with // the correct status. readinessHelper->forceCurrentStatus(status); } } void Connection::Private::setInterfaces(const QStringList &interfaces) { debug() << "Got interfaces:" << interfaces; parent->setInterfaces(interfaces); readinessHelper->setInterfaces(interfaces); } void Connection::Private::invalidateResetCaps(const QString &error, const QString &message) { caps.updateRequestableChannelClasses(RequestableChannelClassList()); parent->invalidate(error, message); } /** * \class ConnectionLowlevel * \ingroup clientconn * \headerfile TelepathyQt/connection-lowlevel.h * * \brief The ConnectionLowlevel class extends Connection with support to * low-level features. */ ConnectionLowlevel::ConnectionLowlevel(Connection *conn) : mPriv(new Private(conn)) { } ConnectionLowlevel::~ConnectionLowlevel() { delete mPriv; } bool ConnectionLowlevel::isValid() const { return !(connection().isNull()); } ConnectionPtr ConnectionLowlevel::connection() const { return ConnectionPtr(mPriv->conn); } Connection::PendingConnect::PendingConnect(const ConnectionPtr &connection, const Features &requestedFeatures) : PendingReady(connection, requestedFeatures) { if (!connection) { // Called when the connection had already been destroyed return; } QDBusPendingCall call = connection->baseInterface()->Connect(); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(connection.data(), SIGNAL(invalidated(Tp::DBusProxy*,QString,QString)), this, SLOT(onConnInvalidated(Tp::DBusProxy*,QString,QString))); connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), this, SLOT(onConnectReply(QDBusPendingCallWatcher*))); } void Connection::PendingConnect::onConnectReply(QDBusPendingCallWatcher *watcher) { ConnectionPtr connection = ConnectionPtr::qObjectCast(proxy()); if (watcher->isError()) { debug() << "Connect failed with" << watcher->error().name() << ": " << watcher->error().message(); setFinishedWithError(watcher->error()); connection->disconnect( this, SLOT(onConnInvalidated(Tp::DBusProxy*,QString,QString))); } else { if (connection->status() == ConnectionStatusConnected) { onStatusChanged(ConnectionStatusConnected); } else { // Wait for statusChanged()! Connect returning just means that the connection has // started to connect - spec quoted for truth: // // Connect () -> nothing // Request that the connection be established. This will be done asynchronously and // errors will be returned by emitting StatusChanged signals. // // Which should actually say progress and/or errors IMO, but anyway... connect(connection.data(), SIGNAL(statusChanged(Tp::ConnectionStatus)), SLOT(onStatusChanged(Tp::ConnectionStatus))); } } watcher->deleteLater(); } void Connection::PendingConnect::onStatusChanged(ConnectionStatus newStatus) { ConnectionPtr connection = ConnectionPtr::qObjectCast(proxy()); if (newStatus == ConnectionStatusDisconnected) { debug() << "Connection became disconnected while a PendingConnect was underway"; setFinishedWithError(connection->invalidationReason(), connection->invalidationMessage()); connection->disconnect(this, SLOT(onConnInvalidated(Tp::DBusProxy*,QString,QString))); return; } if (newStatus == ConnectionStatusConnected) { // OK, the connection is Connected now - finally, we'll get down to business connect(connection->becomeReady(requestedFeatures()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onBecomeReadyReply(Tp::PendingOperation*))); } } void Connection::PendingConnect::onBecomeReadyReply(Tp::PendingOperation *op) { ConnectionPtr connection = ConnectionPtr::qObjectCast(proxy()); // We don't care about future disconnects even if they happen before we are destroyed // (which happens two mainloop iterations from now) connection->disconnect(this, SLOT(onStatusChanged(Tp::ConnectionStatus))); connection->disconnect(this, SLOT(onConnInvalidated(Tp::DBusProxy*,QString,QString))); if (op->isError()) { debug() << "Connection->becomeReady failed with" << op->errorName() << ": " << op->errorMessage(); setFinishedWithError(op->errorName(), op->errorMessage()); } else { debug() << "Connected"; if (connection->isValid()) { setFinished(); } else { debug() << " ... but the Connection was immediately invalidated!"; setFinishedWithError(connection->invalidationReason(), connection->invalidationMessage()); } } } void Connection::PendingConnect::onConnInvalidated(Tp::DBusProxy *proxy, const QString &error, const QString &message) { ConnectionPtr connection = ConnectionPtr::qObjectCast(this->proxy()); Q_ASSERT(proxy == connection.data()); if (!isFinished()) { debug() << "Unable to connect. Connection invalidated"; setFinishedWithError(error, message); } connection->disconnect(this, SLOT(onStatusChanged(Tp::ConnectionStatus))); } QHash, Connection::Private::HandleContext*> Connection::Private::handleContexts; QMutex Connection::Private::handleContextsLock; /** * \class Connection * \ingroup clientconn * \headerfile TelepathyQt/connection.h * * \brief The Connection class represents a Telepathy connection. * * This models a connection to a single user account on a communication service. * * Contacts, and server-stored lists (such as subscribed contacts, * block lists, or allow lists) on a service are all represented using the * ContactManager object on the connection, which is valid only for the lifetime * of the connection object. * * The remote object accessor functions on this object (status(), * statusReason(), and so on) don't make any D-Bus calls; instead, they return/use * values cached from a previous introspection run. The introspection process * populates their values in the most efficient way possible based on what the * service implements. * * To avoid unnecessary D-Bus traffic, some accessors only return valid * information after specific features have been enabled. * For instance, to retrieve the connection self contact, it is necessary to * enable the feature Connection::FeatureSelfContact. * See the individual methods descriptions for more details. * * Connection features can be enabled by constructing a ConnectionFactory and enabling * the desired features, and passing it to AccountManager, Account or ClientRegistrar * when creating them as appropriate. However, if a particular * feature is only ever used in a specific circumstance, such as an user opening * some settings dialog separate from the general view of the application, * features can be later enabled as needed by calling becomeReady() with the additional * features, and waiting for the resulting PendingOperation to finish. * * As an addition to accessors, signals are emitted to indicate that properties have changed, * for example statusChanged()(), selfContactChanged(), etc. * * \section conn_usage_sec Usage * * \subsection conn_create_sec Creating a connection object * * The easiest way to create connection objects is through Account. One can * just use the Account::connection method to get an account active connection. * * If you already know the object path, you can just call create(). * For example: * * \code ConnectionPtr conn = Connection::create(busName, objectPath); \endcode * * A ConnectionPtr object is returned, which will automatically keep * track of object lifetime. * * You can also provide a D-Bus connection as a QDBusConnection: * * \code * * ConnectionPtr conn = Connection::create(QDBusConnection::sessionBus(), * busName, objectPath); * * \endcode * * \subsection conn_ready_sec Making connection ready to use * * A Connection object needs to become ready before usage, meaning that the * introspection process finished and the object accessors can be used. * * To make the object ready, use becomeReady() and wait for the * PendingOperation::finished() signal to be emitted. * * \code * * class MyClass : public QObject * { * QOBJECT * * public: * MyClass(QObject *parent = 0); * ~MyClass() { } * * private Q_SLOTS: * void onConnectionReady(Tp::PendingOperation*); * * private: * ConnectionPtr conn; * }; * * MyClass::MyClass(const QString &busName, const QString &objectPath, * QObject *parent) * : QObject(parent) * conn(Connection::create(busName, objectPath)) * { * // connect and become ready * connect(conn->requestConnect(), * SIGNAL(finished(Tp::PendingOperation*)), * SLOT(onConnectionReady(Tp::PendingOperation*))); * } * * void MyClass::onConnectionReady(Tp::PendingOperation *op) * { * if (op->isError()) { * qWarning() << "Account cannot become ready:" << * op->errorName() << "-" << op->errorMessage(); * return; * } * * // Connection is now ready * } * * \endcode * * See \ref async_model, \ref shared_ptr */ /** * Feature representing the core that needs to become ready to make the * Connection object usable. * * Note that this feature must be enabled in order to use most Connection * methods. * See specific methods documentation for more details. * * When calling isReady(), becomeReady(), this feature is implicitly added * to the requested features. */ const Feature Connection::FeatureCore = Feature(QLatin1String(Connection::staticMetaObject.className()), 0, true); /** * Feature used to retrieve the connection self contact. * * See self contact specific methods' documentation for more details. * * \sa selfContact(), selfContactChanged() */ const Feature Connection::FeatureSelfContact = Feature(QLatin1String(Connection::staticMetaObject.className()), 1); /** * Feature used to retrieve/keep track of the connection self presence. * * See simple presence specific methods' documentation for more details. */ const Feature Connection::FeatureSimplePresence = Feature(QLatin1String(Connection::staticMetaObject.className()), 2); /** * Feature used to enable roster support on Connection::contactManager. * * See ContactManager roster specific methods' documentation for more details. * * \sa ContactManager::allKnownContacts() */ const Feature Connection::FeatureRoster = Feature(QLatin1String(Connection::staticMetaObject.className()), 4); /** * Feature used to enable roster groups support on Connection::contactManager. * * See ContactManager roster groups specific methods' documentation for more * details. * * \sa ContactManager::allKnownGroups() */ const Feature Connection::FeatureRosterGroups = Feature(QLatin1String(Connection::staticMetaObject.className()), 5); /** * Feature used to retrieve/keep track of the connection account balance. * * See account balance specific methods' documentation for more details. * * \sa accountBalance(), accountBalanceChanged() */ const Feature Connection::FeatureAccountBalance = Feature(QLatin1String(Connection::staticMetaObject.className()), 6); /** * When this feature is prepared, it means that the connection status() is * ConnectionStatusConnected. * * Note that if ConnectionFactory is being used with FeatureConnected set, Connection objects will * only be signalled by the library when the corresponding connection is in status() * ConnectionStatusConnected. */ const Feature Connection::FeatureConnected = Feature(QLatin1String(Connection::staticMetaObject.className()), 7); /** * Create a new connection object using QDBusConnection::sessionBus(). * * A warning is printed if the factories are not for QDBusConnection::sessionBus(). * * \param busName The connection well-known bus name (sometimes called a * "service name"). * \param objectPath The connection object path. * \param channelFactory The channel factory to use. * \param contactFactory The contact factory to use. * \return A ConnectionPtr object pointing to the newly created Connection object. */ ConnectionPtr Connection::create(const QString &busName, const QString &objectPath, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory) { return ConnectionPtr(new Connection(QDBusConnection::sessionBus(), busName, objectPath, channelFactory, contactFactory, Connection::FeatureCore)); } /** * Create a new connection object using the given \a bus. * * A warning is printed if the factories are not for \a bus. * * \param bus QDBusConnection to use. * \param busName The connection well-known bus name (sometimes called a * "service name"). * \param objectPath The connection object path. * \param channelFactory The channel factory to use. * \param contactFactory The contact factory to use. * \return A ConnectionPtr object pointing to the newly created Connection object. */ ConnectionPtr Connection::create(const QDBusConnection &bus, const QString &busName, const QString &objectPath, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory) { return ConnectionPtr(new Connection(bus, busName, objectPath, channelFactory, contactFactory, Connection::FeatureCore)); } /** * Construct a new connection object using the given \a bus. * * A warning is printed if the factories are not for \a bus. * * \param bus QDBusConnection to use. * \param busName The connection's well-known bus name (sometimes called a * "service name"). * \param objectPath The connection object path. * \param channelFactory The channel factory to use. * \param contactFactory The contact factory to use. * \param coreFeature The core feature of the Connection subclass. The corresponding introspectable * should depend on Connection::FeatureCore. */ Connection::Connection(const QDBusConnection &bus, const QString &busName, const QString &objectPath, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory, const Feature &coreFeature) : StatefulDBusProxy(bus, busName, objectPath, coreFeature), OptionalInterfaceFactory(this), mPriv(new Private(this, channelFactory, contactFactory)) { } /** * Class destructor. */ Connection::~Connection() { delete mPriv; } /** * Return the channel factory used by this connection. * * Only read access is provided. This allows constructing object instances and examining the object * construction settings, but not changing settings. Allowing changes would lead to tricky * situations where objects constructed at different times by the account would have unpredictably * different construction settings (eg. subclass). * * \return A read-only pointer to the ChannelFactory object. */ ChannelFactoryConstPtr Connection::channelFactory() const { return mPriv->chanFactory; } /** * Return the contact factory used by this connection. * * Only read access is provided. This allows constructing object instances and examining the object * construction settings, but not changing settings. Allowing changes would lead to tricky * situations where objects constructed at different times by the account would have unpredictably * different construction settings (eg. subclass). * * \return A read-only pointer to the ContactFactory object. */ ContactFactoryConstPtr Connection::contactFactory() const { return mPriv->contactFactory; } /** * Return the connection manager name of this connection. * * \return The connection manager name. */ QString Connection::cmName() const { return mPriv->cmName; } /** * Return the protocol name of this connection. * * \return The protocol name. */ QString Connection::protocolName() const { return mPriv->protocolName; } /** * Return the status of this connection. * * Change notification is via the statusChanged() signal. * * This method requires Connection::FeatureCore to be ready. * * \return The status as #ConnectionStatus. * \sa statusChanged(), statusReason(), errorDetails() */ ConnectionStatus Connection::status() const { return (ConnectionStatus) mPriv->status; } /** * Return the reason for this connection status. * * The validity and change rules are the same as for status(). * * The status reason should be only used as a fallback in error handling when the application * doesn't understand an error name given as the invalidation reason, which may in some cases be * domain/UI-specific. * * This method requires Connection::FeatureCore to be ready. * * \return The status reason as #ConnectionStatusReason. * \sa invalidated(), invalidationReason() */ ConnectionStatusReason Connection::statusReason() const { return (ConnectionStatusReason) mPriv->statusReason; } struct TP_QT_NO_EXPORT Connection::ErrorDetails::Private : public QSharedData { Private(const QVariantMap &details) : details(details) {} QVariantMap details; }; /** * \class Connection::ErrorDetails * \ingroup clientconn * \headerfile TelepathyQt/connection.h * * \brief The Connection::ErrorDetails class represents the details of a connection error. * * It contains detailed information about the reason for the connection going invalidated(). * * Some services may provide additional error information in the ConnectionError D-Bus signal, when * a Connection is disconnected / has become unusable. If the service didn't provide any, or has not * been invalidated yet, the instance will be invalid, as returned by isValid(). * * The information provided by invalidationReason() and this class should always be used in error * handling in preference to statusReason(). The status reason can be used as a fallback, however, * if the client doesn't understand what a particular value returned by invalidationReason() means, * as it may be domain-specific with some services. * * Connection::errorDetails() can be used to return the instance containing the details for * invalidating that connection after invalidated() has been emitted. */ /** * Constructs a new invalid ErrorDetails instance. */ Connection::ErrorDetails::ErrorDetails() : mPriv(0) { } /** * Construct a error details instance with the given details. The instance will indicate that * it is valid. */ Connection::ErrorDetails::ErrorDetails(const QVariantMap &details) : mPriv(new Private(details)) { } /** * Copy constructor. */ Connection::ErrorDetails::ErrorDetails(const ErrorDetails &other) : mPriv(other.mPriv) { } /** * Class destructor. */ Connection::ErrorDetails::~ErrorDetails() { } /** * Assigns all information (validity, details) from other to this. */ Connection::ErrorDetails &Connection::ErrorDetails::operator=( const ErrorDetails &other) { if (this->mPriv.constData() != other.mPriv.constData()) this->mPriv = other.mPriv; return *this; } /** * \fn bool Connection::ErrorDetails::isValid() const * * Return whether or not the details are valid (have actually been received from the service). * * \return \c true if valid, \c false otherwise. */ /** * \fn bool Connection::ErrorDetails::hasDebugMessage() const * * Return whether or not the details specify a debug message. * * If present, the debug message will likely be the same string as the one returned by * invalidationMessage(). * * The debug message is purely informational, offered for display for bug reporting purposes, and * should not be attempted to be parsed. * * \return \c true if debug message is present, \c false otherwise. * \sa debugMessage() */ /** * \fn QString Connection::ErrorDetails::debugMessage() const * * Return the debug message specified by the details, if any. * * If present, the debug message will likely be the same string as the one returned by * invalidationMessage(). * * The debug message is purely informational, offered for display for bug reporting purposes, and * should not be attempted to be parsed. * * \return The debug message, or an empty string if there is none. * \sa hasDebugMessage() */ /** * Return a map containing all details given in the low-level ConnectionError signal. * * This is useful for accessing domain-specific additional details. * * \return The details of the connection error as QVariantMap. */ QVariantMap Connection::ErrorDetails::allDetails() const { return isValid() ? mPriv->details : QVariantMap(); } /** * Return detailed information about the reason for the connection going invalidated(). * * Some services may provide additional error information in the ConnectionError D-Bus signal, when * a Connection is disconnected / has become unusable. If the service didn't provide any, or has not * been invalidated yet, an invalid instance is returned. * * The information provided by invalidationReason() and this method should always be used in error * handling in preference to statusReason(). The status reason can be used as a fallback, however, * if the client doesn't understand what a particular value returned by invalidationReason() means, * as it may be domain-specific with some services. * * \return The error details as a Connection::ErrorDetails object. * \sa status(), statusReason(), invalidationReason() */ const Connection::ErrorDetails &Connection::errorDetails() const { if (isValid()) { warning() << "Connection::errorDetails() used on" << objectPath() << "which is valid"; } return mPriv->errorDetails; } /** * Return the handle representing the user on this connection. * * Note that if the connection is not yet in the ConnectionStatusConnected state, * the value of this property may be zero. * * Change notification is via the selfHandleChanged() signal. * * This method requires Connection::FeatureCore to be ready. * * \return The user handle. * \sa selfHandleChanged(), selfContact() */ uint Connection::selfHandle() const { return mPriv->selfHandle; } /** * Return a dictionary of presence statuses valid for use in this connection. * * The value may have changed arbitrarily during the time the * Connection spends in status ConnectionStatusConnecting, * again staying fixed for the entire time in ConnectionStatusConnected. * * This method requires Connection::FeatureSimplePresence to be ready. * * \return The allowed statuses as a map from string identifiers to SimpleStatusSpec objects. */ SimpleStatusSpecMap ConnectionLowlevel::allowedPresenceStatuses() const { if (!isValid()) { warning() << "ConnectionLowlevel::selfHandle() " "called for a connection which is already destroyed"; return SimpleStatusSpecMap(); } ConnectionPtr conn(connection()); if (!conn->isReady(Connection::FeatureSimplePresence)) { warning() << "Trying to retrieve allowed presence statuses from connection, but " "simple presence is not supported or was not requested. " "Enable FeatureSimplePresence in this connection"; } return conn->mPriv->simplePresenceStatuses; } /** * Return the maximum length for a presence status message. * * The value may have changed arbitrarily during the time the * Connection spends in status ConnectionStatusConnecting, * again staying fixed for the entire time in ConnectionStatusConnected. * * This method requires Connection::FeatureSimplePresence to be ready. * * \return The maximum length, or 0 if there is no limit. */ uint ConnectionLowlevel::maxPresenceStatusMessageLength() const { if (!isValid()) { warning() << "ConnectionLowlevel::maxPresenceStatusMessageLength() " "called for a connection which is already destroyed"; return 0; } ConnectionPtr conn(connection()); if (!conn->isReady(Connection::FeatureSimplePresence)) { warning() << "Trying to retrieve max presence status message length connection, but " "simple presence is not supported or was not requested. " "Enable FeatureSimplePresence in this connection"; } return conn->mPriv->maxPresenceStatusMessageLength; } /** * Set the self presence status. * * This should generally only be called by an Account Manager. In typical usage, * Account::setRequestedPresence() should be used instead. * * \a status must be one of the allowed statuses returned by * allowedPresenceStatuses(). * * Note that clients SHOULD set the status message for the local user to the * empty string, unless the user has actually provided a specific message (i.e. * one that conveys more information than the ConnectionStatus). * * \param status The desired status. * \param statusMessage The desired status message. * \return A PendingOperation which will emit PendingOperation::finished * when the call has finished. * \sa allowedPresenceStatuses() */ PendingOperation *ConnectionLowlevel::setSelfPresence(const QString &status, const QString &statusMessage) { if (!isValid()) { warning() << "ConnectionLowlevel::selfHandle() called for a connection which is already destroyed"; return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection already destroyed"), ConnectionPtr()); } ConnectionPtr conn(connection()); if (!conn->interfaces().contains(TP_QT_IFACE_CONNECTION_INTERFACE_SIMPLE_PRESENCE)) { return new PendingFailure(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Connection does not support SimplePresence"), conn); } Client::ConnectionInterfaceSimplePresenceInterface *simplePresenceInterface = conn->interface(); return new PendingVoid( simplePresenceInterface->SetPresence(status, statusMessage), conn); } /** * Return the object representing the user on this connection. * * Note that if the connection is not yet in the ConnectionStatusConnected state, the value of this * property may be null. * * Change notification is via the selfContactChanged() signal. * * This method requires Connection::FeatureSelfContact to be ready. * * \return A pointer to the Contact object, or a null ContactPtr if unknown. * \sa selfContactChanged(), selfHandle() */ ContactPtr Connection::selfContact() const { if (!isReady(FeatureSelfContact)) { warning() << "Connection::selfContact() used, but becomeReady(FeatureSelfContact) " "hasn't been completed!"; } return mPriv->selfContact; } /** * Return the user's balance on the account corresponding to this connection. * * A negative amount may be possible on some services, and indicates that the user * owes money to the service provider. * * Change notification is via the accountBalanceChanged() signal. * * This method requires Connection::FeatureAccountBalance to be ready. * * \return The account balance as #CurrencyAmount. * \sa accountBalanceChanged() */ CurrencyAmount Connection::accountBalance() const { if (!isReady(FeatureAccountBalance)) { warning() << "Connection::accountBalance() used before connection " "FeatureAccountBalance is ready"; } return mPriv->accountBalance; } /** * Return the capabilities for this connection. * * User interfaces can use this information to show or hide UI components. * * This property cannot change after the connection has gone to state * ConnectionStatusConnected, so there is no change notification. * * This method requires Connection::FeatureCore to be ready. * * @return The capabilities of this connection. */ ConnectionCapabilities Connection::capabilities() const { if (!isReady(Connection::FeatureCore)) { warning() << "Connection::capabilities() used before connection " "FeatureCore is ready"; } return mPriv->caps; } void Connection::onStatusReady(uint status) { Q_ASSERT(status == mPriv->pendingStatus); if (mPriv->status == status) { return; } mPriv->status = status; mPriv->statusReason = mPriv->pendingStatusReason; if (isValid()) { emit statusChanged((ConnectionStatus) mPriv->status); } else { debug() << this << " not emitting statusChanged because it has been invalidated"; } } void Connection::onStatusChanged(uint status, uint reason) { debug() << "StatusChanged from" << mPriv->pendingStatus << "to" << status << "with reason" << reason; if (mPriv->pendingStatus == status) { warning() << "New status was the same as the old status! Ignoring" "redundant StatusChanged"; return; } uint oldStatus = mPriv->pendingStatus; mPriv->pendingStatus = status; mPriv->pendingStatusReason = reason; switch (status) { case ConnectionStatusConnected: debug() << "Performing introspection for the Connected status"; mPriv->setCurrentStatus(status); break; case ConnectionStatusConnecting: mPriv->setCurrentStatus(status); break; case ConnectionStatusDisconnected: { QString errorName = ConnectionHelper::statusReasonToErrorName( (ConnectionStatusReason) reason, (ConnectionStatus) oldStatus); // TODO should we signal statusChanged to Disconnected here or just // invalidate? // Also none of the pendingOperations will finish. The // user should just consider them to fail as the connection // is invalid onStatusReady(ConnectionStatusDisconnected); mPriv->invalidateResetCaps(errorName, QString(QLatin1String("ConnectionStatusReason = %1")).arg(uint(reason))); } break; default: warning() << "Unknown connection status" << status; break; } } void Connection::onConnectionError(const QString &error, const QVariantMap &details) { debug().nospace() << "Connection(" << objectPath() << ") got ConnectionError(" << error << ") with " << details.size() << " details"; mPriv->errorDetails = details; mPriv->invalidateResetCaps(error, details.value(QLatin1String("debug-message")).toString()); } void Connection::gotMainProperties(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; QVariantMap props; if (!reply.isError()) { props = reply.value(); } else { warning().nospace() << "Properties::GetAll(Connection) failed with " << reply.error().name() << ": " << reply.error().message(); // let's try to fallback first before failing } uint status = static_cast(-1); if (props.contains(QLatin1String("Status")) && ((status = qdbus_cast(props[QLatin1String("Status")])) <= ConnectionStatusDisconnected)) { mPriv->forceCurrentStatus(status); } else { // only introspect status if we did not got it from StatusChanged if (mPriv->pendingStatus == (uint) -1) { mPriv->introspectMainQueue.enqueue( &Private::introspectMainFallbackStatus); } } if (props.contains(QLatin1String("Interfaces"))) { mPriv->setInterfaces(qdbus_cast( props[QLatin1String("Interfaces")])); } else { mPriv->introspectMainQueue.enqueue( &Private::introspectMainFallbackInterfaces); } if (props.contains(QLatin1String("SelfHandle"))) { mPriv->selfHandle = qdbus_cast( props[QLatin1String("SelfHandle")]); } else { mPriv->introspectMainQueue.enqueue( &Private::introspectMainFallbackSelfHandle); } if (props.contains(QLatin1String("HasImmortalHandles"))) { mPriv->immortalHandles = qdbus_cast(props[QLatin1String("HasImmortalHandles")]); } if (hasInterface(TP_QT_IFACE_CONNECTION_INTERFACE_REQUESTS)) { mPriv->introspectMainQueue.enqueue( &Private::introspectCapabilities); } if (hasInterface(TP_QT_IFACE_CONNECTION_INTERFACE_CONTACTS)) { mPriv->introspectMainQueue.enqueue( &Private::introspectContactAttributeInterfaces); } mPriv->continueMainIntrospection(); watcher->deleteLater(); } void Connection::gotStatus(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (!reply.isError()) { mPriv->forceCurrentStatus(reply.value()); mPriv->continueMainIntrospection(); } else { warning().nospace() << "GetStatus() failed with " << reply.error().name() << ": " << reply.error().message(); mPriv->invalidateResetCaps(reply.error().name(), reply.error().message()); } watcher->deleteLater(); } void Connection::gotInterfaces(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (!reply.isError()) { mPriv->setInterfaces(reply.value()); } else { warning().nospace() << "GetInterfaces() failed with " << reply.error().name() << ": " << reply.error().message() << " - assuming no new interfaces"; // let's not fail if GetInterfaces fail } mPriv->continueMainIntrospection(); watcher->deleteLater(); } void Connection::gotSelfHandle(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (!reply.isError()) { mPriv->selfHandle = reply.value(); debug() << "Got self handle:" << mPriv->selfHandle; mPriv->continueMainIntrospection(); } else { warning().nospace() << "GetSelfHandle() failed with " << reply.error().name() << ": " << reply.error().message(); mPriv->readinessHelper->setIntrospectCompleted(FeatureCore, false, reply.error()); } watcher->deleteLater(); } void Connection::gotCapabilities(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (!reply.isError()) { debug() << "Got capabilities"; mPriv->caps.updateRequestableChannelClasses( qdbus_cast(reply.value().variant())); } else { warning().nospace() << "Getting capabilities failed with " << reply.error().name() << ": " << reply.error().message(); // let's not fail if retrieving capabilities fail } mPriv->continueMainIntrospection(); watcher->deleteLater(); } void Connection::gotContactAttributeInterfaces(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (!reply.isError()) { debug() << "Got contact attribute interfaces"; mPriv->contactAttributeInterfaces = qdbus_cast(reply.value().variant()); } else { warning().nospace() << "Getting contact attribute interfaces failed with " << reply.error().name() << ": " << reply.error().message(); // let's not fail if retrieving contact attribute interfaces fail // TODO should we remove Contacts interface from interfaces? } mPriv->continueMainIntrospection(); watcher->deleteLater(); } void Connection::gotSimpleStatuses(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (!reply.isError()) { QVariantMap props = reply.value(); mPriv->simplePresenceStatuses = qdbus_cast( props[QLatin1String("Statuses")]); mPriv->maxPresenceStatusMessageLength = qdbus_cast( props[QLatin1String("MaximumStatusMessageLength")]); debug() << "Got" << mPriv->simplePresenceStatuses.size() << "simple presence statuses - max status message length is" << mPriv->maxPresenceStatusMessageLength; mPriv->readinessHelper->setIntrospectCompleted(FeatureSimplePresence, true); } else { warning().nospace() << "Getting simple presence statuses failed with " << reply.error().name() << ":" << reply.error().message(); mPriv->readinessHelper->setIntrospectCompleted(FeatureSimplePresence, false, reply.error()); } watcher->deleteLater(); } void Connection::gotSelfContact(PendingOperation *op) { PendingContacts *pending = qobject_cast(op); if (pending->isValid()) { Q_ASSERT(pending->contacts().size() == 1); ContactPtr contact = pending->contacts()[0]; if (mPriv->selfContact != contact) { mPriv->selfContact = contact; if (!isReady(FeatureSelfContact)) { mPriv->readinessHelper->setIntrospectCompleted(FeatureSelfContact, true); } emit selfContactChanged(); } } else { warning().nospace() << "Getting self contact failed with " << pending->errorName() << ":" << pending->errorMessage(); // check if the feature is already there, and for some reason introspectSelfContact // failed when called the second time if (!isReady(FeatureSelfContact)) { mPriv->readinessHelper->setIntrospectCompleted(FeatureSelfContact, false, op->errorName(), op->errorMessage()); } if (mPriv->selfContact) { mPriv->selfContact.reset(); emit selfContactChanged(); } } mPriv->introspectingSelfContact = false; if (mPriv->reintrospectSelfContactRequired) { mPriv->introspectSelfContact(mPriv); } } void Connection::onIntrospectRosterFinished(PendingOperation *op) { if (op->isError()) { warning().nospace() << "Introspecting roster failed with " << op->errorName() << ": " << op->errorMessage(); mPriv->readinessHelper->setIntrospectCompleted(FeatureRoster, false, op->errorName(), op->errorMessage()); return; } debug() << "Introspecting roster finished"; mPriv->readinessHelper->setIntrospectCompleted(FeatureRoster, true); } void Connection::onIntrospectRosterGroupsFinished(PendingOperation *op) { if (op->isError()) { warning().nospace() << "Introspecting roster groups failed with " << op->errorName() << ": " << op->errorMessage(); mPriv->readinessHelper->setIntrospectCompleted(FeatureRosterGroups, false, op->errorName(), op->errorMessage()); return; } debug() << "Introspecting roster groups finished"; mPriv->readinessHelper->setIntrospectCompleted(FeatureRosterGroups, true); } void Connection::gotBalance(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (!reply.isError()) { debug() << "Got balance"; mPriv->accountBalance = qdbus_cast(reply.value()); mPriv->readinessHelper->setIntrospectCompleted(FeatureAccountBalance, true); } else { warning().nospace() << "Getting balance failed with " << reply.error().name() << ":" << reply.error().message(); mPriv->readinessHelper->setIntrospectCompleted(FeatureAccountBalance, false, reply.error().name(), reply.error().message()); } watcher->deleteLater(); } /** * Return the Client::ConnectionInterface interface proxy object for this connection. * This method is protected since the convenience methods provided by this * class should generally be used instead of calling D-Bus methods * directly. * * \return A pointer to the existing Client::ConnectionInterface object for this * Connection object. */ Client::ConnectionInterface *Connection::baseInterface() const { return mPriv->baseInterface; } /** * Same as \c createChannel(request, -1) */ PendingChannel *ConnectionLowlevel::createChannel(const QVariantMap &request) { return createChannel(request, -1); } /** * Asynchronously creates a channel satisfying the given request. * * In typical usage, only the Channel Dispatcher should call this. Ordinary * applications should use the Account::createChannel() family of methods * (which invoke the Channel Dispatcher's services). * * The request MUST contain the following keys: * org.freedesktop.Telepathy.Channel.ChannelType * org.freedesktop.Telepathy.Channel.TargetHandleType * * Upon completion, the reply to the request can be retrieved through the * returned PendingChannel object. The object also provides access to the * parameters with which the call was made and a signal to connect to get * notification of the request finishing processing. See the documentation * for that class for more info. * * \param request A dictionary containing the desirable properties. * \param timeout The D-Bus timeout in milliseconds used for the method call. * If timeout is -1, a default implementation-defined value that * is suitable for inter-process communications (generally, * 25 seconds) will be used. * \return A PendingChannel which will emit PendingChannel::finished * when the channel has been created, or an error occurred. * \sa PendingChannel, ensureChannel(), * Account::createChannel(), Account::createAndHandleChannel(), * Account::ensureChannel(), Account::ensureAndHandleChannel() */ PendingChannel *ConnectionLowlevel::createChannel(const QVariantMap &request, int timeout) { if (!isValid()) { return new PendingChannel(ConnectionPtr(), TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("The connection has been destroyed")); } ConnectionPtr conn(connection()); if (conn->mPriv->pendingStatus != ConnectionStatusConnected) { warning() << "Calling createChannel with connection not yet connected"; return new PendingChannel(conn, TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection not yet connected")); } if (!conn->interfaces().contains(TP_QT_IFACE_CONNECTION_INTERFACE_REQUESTS)) { warning() << "Requests interface is not support by this connection"; return new PendingChannel(conn, TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Connection does not support Requests Interface")); } if (!request.contains(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"))) { return new PendingChannel(conn, TP_QT_ERROR_INVALID_ARGUMENT, QLatin1String("Invalid 'request' argument")); } debug() << "Creating a Channel"; PendingChannel *channel = new PendingChannel(conn, request, true, timeout); return channel; } /** * Same as \c ensureChannel(request, -1) */ PendingChannel *ConnectionLowlevel::ensureChannel(const QVariantMap &request) { return ensureChannel(request, -1); } /** * Asynchronously ensures a channel exists satisfying the given request. * * In typical usage, only the Channel Dispatcher should call this. Ordinary * applications should use the Account::ensureChannel() family of methods * (which invoke the Channel Dispatcher's services). * * The request MUST contain the following keys: * org.freedesktop.Telepathy.Channel.ChannelType * org.freedesktop.Telepathy.Channel.TargetHandleType * * Upon completion, the reply to the request can be retrieved through the * returned PendingChannel object. The object also provides access to the * parameters with which the call was made and a signal to connect to get * notification of the request finishing processing. See the documentation * for that class for more info. * * \param request A dictionary containing the desirable properties. * \param timeout The D-Bus timeout in milliseconds used for the method call. * If timeout is -1, a default implementation-defined value that * is suitable for inter-process communications (generally, * 25 seconds) will be used. * \return A PendingChannel which will emit PendingChannel::finished * when the channel is ensured to exist, or an error occurred. * \sa PendingChannel, createChannel(), * Account::createChannel(), Account::createAndHandleChannel(), * Account::ensureChannel(), Account::ensureAndHandleChannel() */ PendingChannel *ConnectionLowlevel::ensureChannel(const QVariantMap &request, int timeout) { if (!isValid()) { return new PendingChannel(ConnectionPtr(), TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("The connection has been destroyed")); } ConnectionPtr conn(connection()); if (conn->mPriv->pendingStatus != ConnectionStatusConnected) { warning() << "Calling ensureChannel with connection not yet connected"; return new PendingChannel(conn, TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection not yet connected")); } if (!conn->interfaces().contains(TP_QT_IFACE_CONNECTION_INTERFACE_REQUESTS)) { warning() << "Requests interface is not support by this connection"; return new PendingChannel(conn, TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Connection does not support Requests Interface")); } if (!request.contains(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"))) { return new PendingChannel(conn, TP_QT_ERROR_INVALID_ARGUMENT, QLatin1String("Invalid 'request' argument")); } debug() << "Creating a Channel"; PendingChannel *channel = new PendingChannel(conn, request, false, timeout); return channel; } /** * Request handles of the given type for the given entities (contacts, * rooms, lists, etc.). * * Typically one doesn't need to request and use handles directly; instead, string identifiers * and/or Contact objects are used in most APIs. File a bug for APIs in which there is no * alternative to using handles. In particular however using low-level DBus interfaces for which * there is no corresponding high-level (or one is implementing that abstraction) functionality does * and will always require using bare handles. * * Upon completion, the reply to the request can be retrieved through the * returned PendingHandles object. The object also provides access to the * parameters with which the call was made and a signal to connect to to get * notification of the request finishing processing. See the documentation * for that class for more info. * * The returned PendingHandles object should be freed using * its QObject::deleteLater() method after it is no longer used. However, * all PendingHandles objects resulting from requests to a particular * Connection will be freed when the Connection itself is freed. Conversely, * this means that the PendingHandles object should not be used after the * Connection is destroyed. * * \param handleType Type for the handles to request, as specified in * #HandleType. * \param names Names of the entities to request handles for. * \return A PendingHandles which will emit PendingHandles::finished * when the handles have been requested, or an error occurred. * \sa PendingHandles */ PendingHandles *ConnectionLowlevel::requestHandles(HandleType handleType, const QStringList &names) { debug() << "Request for" << names.length() << "handles of type" << handleType; if (!isValid()) { return new PendingHandles(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("The connection has been destroyed")); } ConnectionPtr conn(connection()); if (!hasImmortalHandles()) { Connection::Private::HandleContext *handleContext = conn->mPriv->handleContext; QMutexLocker locker(&handleContext->lock); handleContext->types[handleType].requestsInFlight++; } PendingHandles *pending = new PendingHandles(conn, handleType, names); return pending; } /** * Request a reference to the given handles. Handles not explicitly * requested (via requestHandles()) but eg. observed in a signal need to be * referenced to guarantee them staying valid. * * Typically one doesn't need to reference and use handles directly; instead, string identifiers * and/or Contact objects are used in most APIs. File a bug for APIs in which there is no * alternative to using handles. In particular however using low-level DBus interfaces for which * there is no corresponding high-level (or one is implementing that abstraction) functionality does * and will always require using bare handles. * * Upon completion, the reply to the operation can be retrieved through the * returned PendingHandles object. The object also provides access to the * parameters with which the call was made and a signal to connect to to get * notification of the request finishing processing. See the documentation * for that class for more info. * * The returned PendingHandles object should be freed using * its QObject::deleteLater() method after it is no longer used. However, * all PendingHandles objects resulting from requests to a particular * Connection will be freed when the Connection itself is freed. Conversely, * this means that the PendingHandles object should not be used after the * Connection is destroyed. * * \sa PendingHandles * * \param handleType Type of the handles given, as specified in #HandleType. * \param handles Handles to request a reference to. * \return A PendingHandles which will emit PendingHandles::finished * when the handles have been referenced, or an error occurred. */ PendingHandles *ConnectionLowlevel::referenceHandles(HandleType handleType, const UIntList &handles) { debug() << "Reference of" << handles.length() << "handles of type" << handleType; if (!isValid()) { return new PendingHandles(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("The connection has been destroyed")); } ConnectionPtr conn(connection()); UIntList alreadyHeld; UIntList notYetHeld; if (!hasImmortalHandles()) { Connection::Private::HandleContext *handleContext = conn->mPriv->handleContext; QMutexLocker locker(&handleContext->lock); foreach (uint handle, handles) { if (handleContext->types[handleType].refcounts.contains(handle) || handleContext->types[handleType].toRelease.contains(handle)) { alreadyHeld.push_back(handle); } else { notYetHeld.push_back(handle); } } debug() << " Already holding" << alreadyHeld.size() << "of the handles -" << notYetHeld.size() << "to go"; } else { alreadyHeld = handles; } PendingHandles *pending = new PendingHandles(conn, handleType, handles, alreadyHeld, notYetHeld); return pending; } /** * Start an asynchronous request that the connection be connected. * * When using a full-fledged Telepathy setup with an Account Manager service, the Account methods * Account::setRequestedPresence() and Account::reconnect() must be used instead. * * The returned PendingOperation will finish successfully when the connection * has reached ConnectionStatusConnected and the requested \a features are all ready, or * finish with an error if a fatal error occurs during that process. * * \param requestedFeatures The features which should be enabled * \return A PendingReady which will emit PendingReady::finished * when the Connection has reached #ConnectionStatusConnected, and initial setup * for basic functionality, plus the given features, has succeeded or * failed. */ PendingReady *ConnectionLowlevel::requestConnect(const Features &requestedFeatures) { if (!isValid()) { Connection::PendingConnect *pending = new Connection::PendingConnect(ConnectionPtr(), requestedFeatures); pending->setFinishedWithError(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("The connection has been destroyed")); return pending; } return new Connection::PendingConnect(connection(), requestedFeatures); } /** * Start an asynchronous request that the connection be disconnected. * The returned PendingOperation object will signal the success or failure * of this request; under normal circumstances, it can be expected to * succeed. * * When using a full-fledged Telepathy setup with an Account Manager service, * Account::setRequestedPresence() with Presence::offline() as an argument should generally be used * instead. * * \return A PendingOperation which will emit PendingOperation::finished * when the request has been made. */ PendingOperation *ConnectionLowlevel::requestDisconnect() { if (!isValid()) { return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("The connection has been destroyed"), ConnectionPtr()); } ConnectionPtr conn(connection()); return new PendingVoid(conn->baseInterface()->Disconnect(), conn); } /** * Requests attributes for contacts. Optionally, the handles of the contacts * will be referenced automatically. Essentially, this method wraps * ConnectionInterfaceContactsInterface::GetContactAttributes(), integrating it * with the rest of the handle-referencing machinery. * * This is very low-level API the Contact/ContactManager API provides a higher level of abstraction * for the same functionality. * * Upon completion, the reply to the request can be retrieved through the * returned PendingContactAttributes object. The object also provides access to * the parameters with which the call was made and a signal to connect to to get * notification of the request finishing processing. See the documentation for * that class for more info. * * If the remote object doesn't support the Contacts interface (as signified by * the list returned by interfaces() not containing * #TP_QT_IFACE_CONNECTION_INTERFACE_CONTACTS), the returned * PendingContactAttributes instance will fail instantly with the error * #TP_QT_ERROR_NOT_IMPLEMENTED. * * Similarly, if the connection isn't both connected and ready * (status() == ConnectionStatusConnected && isReady(Connection::FeatureCore)), * the returned PendingContactAttributes instance will fail instantly with the * error #TP_QT_ERROR_NOT_AVAILABLE. * * This method requires Connection::FeatureCore to be ready. * * \sa PendingContactAttributes * * \param handles A list of handles of type HandleTypeContact * \param interfaces D-Bus interfaces for which the client requires information * \param reference Whether the handles should additionally be referenced. * \return A PendingContactAttributes which will emit PendingContactAttributes::fininshed * when the contact attributes have been retrieved, or an error occurred. */ PendingContactAttributes *ConnectionLowlevel::contactAttributes(const UIntList &handles, const QStringList &interfaces, bool reference) { debug() << "Request for attributes for" << handles.size() << "contacts"; if (!isValid()) { PendingContactAttributes *pending = new PendingContactAttributes(ConnectionPtr(), handles, interfaces, reference); pending->failImmediately(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("The connection has been destroyed")); return pending; } ConnectionPtr conn(connection()); PendingContactAttributes *pending = new PendingContactAttributes(conn, handles, interfaces, reference); if (!conn->isReady(Connection::FeatureCore)) { warning() << "ConnectionLowlevel::contactAttributes() used when not ready"; pending->failImmediately(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("The connection isn't ready")); return pending; } else if (conn->mPriv->pendingStatus != ConnectionStatusConnected) { warning() << "ConnectionLowlevel::contactAttributes() used with status" << conn->status() << "!= ConnectionStatusConnected"; pending->failImmediately(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("The connection isn't Connected")); return pending; } else if (!conn->interfaces().contains(TP_QT_IFACE_CONNECTION_INTERFACE_CONTACTS)) { warning() << "ConnectionLowlevel::contactAttributes() used without the remote object supporting" << "the Contacts interface"; pending->failImmediately(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("The connection doesn't support the Contacts interface")); return pending; } if (!hasImmortalHandles()) { Connection::Private::HandleContext *handleContext = conn->mPriv->handleContext; QMutexLocker locker(&handleContext->lock); handleContext->types[HandleTypeContact].requestsInFlight++; } Client::ConnectionInterfaceContactsInterface *contactsInterface = conn->interface(); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(contactsInterface->GetContactAttributes(handles, interfaces, reference)); pending->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(onCallFinished(QDBusPendingCallWatcher*))); return pending; } QStringList ConnectionLowlevel::contactAttributeInterfaces() const { if (!isValid()) { warning() << "ConnectionLowlevel::contactAttributeInterfaces() called for a destroyed Connection"; return QStringList(); } ConnectionPtr conn(connection()); if (conn->mPriv->pendingStatus != ConnectionStatusConnected) { warning() << "ConnectionLowlevel::contactAttributeInterfaces() used with status" << conn->status() << "!= ConnectionStatusConnected"; } else if (!conn->interfaces().contains(TP_QT_IFACE_CONNECTION_INTERFACE_CONTACTS)) { warning() << "ConnectionLowlevel::contactAttributeInterfaces() used without the remote object supporting" << "the Contacts interface"; } return conn->mPriv->contactAttributeInterfaces; } void ConnectionLowlevel::injectContactIds(const HandleIdentifierMap &contactIds) { if (!hasImmortalHandles()) { return; } for (HandleIdentifierMap::const_iterator i = contactIds.constBegin(); i != contactIds.constEnd(); ++i) { uint handle = i.key(); QString id = i.value(); if (!id.isEmpty()) { QString currentId = mPriv->contactsIds.value(handle); if (!currentId.isEmpty() && id != currentId) { warning() << "Trying to overwrite contact id from" << currentId << "to" << id << "for the same handle" << handle << ", ignoring"; } else { mPriv->contactsIds.insert(handle, id); } } } } void ConnectionLowlevel::injectContactId(uint handle, const QString &contactId) { HandleIdentifierMap contactIds; contactIds.insert(handle, contactId); injectContactIds(contactIds); } bool ConnectionLowlevel::hasContactId(uint handle) const { return mPriv->contactsIds.contains(handle); } QString ConnectionLowlevel::contactId(uint handle) const { return mPriv->contactsIds.value(handle); } /** * Return whether the handles last for the whole lifetime of the connection. * * \return \c true if handles are immortal, \c false otherwise. */ bool ConnectionLowlevel::hasImmortalHandles() const { return connection()->mPriv->immortalHandles; } /** * Return the ContactManager object for this connection. * * The contact manager is responsible for all contact handling in this * connection, including adding, removing, authorizing, etc. * * \return A pointer to the ContactManager object. */ ContactManagerPtr Connection::contactManager() const { return mPriv->contactManager; } ConnectionLowlevelPtr Connection::lowlevel() { return mPriv->lowlevel; } ConnectionLowlevelConstPtr Connection::lowlevel() const { return mPriv->lowlevel; } void Connection::refHandle(HandleType handleType, uint handle) { if (mPriv->immortalHandles) { return; } Private::HandleContext *handleContext = mPriv->handleContext; QMutexLocker locker(&handleContext->lock); if (handleContext->types[handleType].toRelease.contains(handle)) { handleContext->types[handleType].toRelease.remove(handle); } handleContext->types[handleType].refcounts[handle]++; } void Connection::unrefHandle(HandleType handleType, uint handle) { if (mPriv->immortalHandles) { return; } Private::HandleContext *handleContext = mPriv->handleContext; QMutexLocker locker(&handleContext->lock); Q_ASSERT(handleContext->types.contains(handleType)); Q_ASSERT(handleContext->types[handleType].refcounts.contains(handle)); if (!--handleContext->types[handleType].refcounts[handle]) { handleContext->types[handleType].refcounts.remove(handle); handleContext->types[handleType].toRelease.insert(handle); if (!handleContext->types[handleType].releaseScheduled) { if (!handleContext->types[handleType].requestsInFlight) { debug() << "Lost last reference to at least one handle of type" << handleType << "and no requests in flight for that type - scheduling a release sweep"; QMetaObject::invokeMethod(this, "doReleaseSweep", Qt::QueuedConnection, Q_ARG(uint, handleType)); handleContext->types[handleType].releaseScheduled = true; } } } } void Connection::doReleaseSweep(uint handleType) { if (mPriv->immortalHandles) { return; } Private::HandleContext *handleContext = mPriv->handleContext; QMutexLocker locker(&handleContext->lock); Q_ASSERT(handleContext->types.contains(handleType)); Q_ASSERT(handleContext->types[handleType].releaseScheduled); debug() << "Entering handle release sweep for type" << handleType; handleContext->types[handleType].releaseScheduled = false; if (handleContext->types[handleType].requestsInFlight > 0) { debug() << " There are requests in flight, deferring sweep to when they have been completed"; return; } if (handleContext->types[handleType].toRelease.isEmpty()) { debug() << " No handles to release - every one has been resurrected"; return; } debug() << " Releasing" << handleContext->types[handleType].toRelease.size() << "handles"; mPriv->baseInterface->ReleaseHandles(handleType, handleContext->types[handleType].toRelease.toList()); handleContext->types[handleType].toRelease.clear(); } void Connection::handleRequestLanded(HandleType handleType) { if (mPriv->immortalHandles) { return; } Private::HandleContext *handleContext = mPriv->handleContext; QMutexLocker locker(&handleContext->lock); Q_ASSERT(handleContext->types.contains(handleType)); Q_ASSERT(handleContext->types[handleType].requestsInFlight > 0); if (!--handleContext->types[handleType].requestsInFlight && !handleContext->types[handleType].toRelease.isEmpty() && !handleContext->types[handleType].releaseScheduled) { debug() << "All handle requests for type" << handleType << "landed and there are handles of that type to release - scheduling a release sweep"; QMetaObject::invokeMethod(this, "doReleaseSweep", Qt::QueuedConnection, Q_ARG(uint, handleType)); handleContext->types[handleType].releaseScheduled = true; } } void Connection::onSelfHandleChanged(uint handle) { if (mPriv->selfHandle == handle) { return; } if (mPriv->pendingStatus != ConnectionStatusConnected || !mPriv->selfHandle) { debug() << "Got a self handle change before we have the initial self handle, ignoring"; return; } debug() << "Connection self handle changed to" << handle; mPriv->selfHandle = handle; emit selfHandleChanged(handle); if (mPriv->introspectingSelfContact) { // We're currently introspecting the SelfContact feature, but have started building the // contact with the old handle, so we need to do it again with the new handle. debug() << "The self contact is being built, will rebuild with the new handle shortly"; mPriv->reintrospectSelfContactRequired = true; } else if (isReady(FeatureSelfContact)) { // We've already introspected the SelfContact feature, so we can reinvoke the introspection // logic directly to rebuild with the new handle. debug() << "Re-building self contact for handle" << handle; Private::introspectSelfContact(mPriv); } // If ReadinessHelper hasn't started introspecting SelfContact yet for the Connected state, we // don't need to do anything. When it does start the introspection, it will do so using the // correct handle. } void Connection::onBalanceChanged(const Tp::CurrencyAmount &value) { mPriv->accountBalance = value; emit accountBalanceChanged(value); } QString ConnectionHelper::statusReasonToErrorName(Tp::ConnectionStatusReason reason, Tp::ConnectionStatus oldStatus) { QString errorName; switch (reason) { case ConnectionStatusReasonNoneSpecified: errorName = TP_QT_ERROR_DISCONNECTED; break; case ConnectionStatusReasonRequested: errorName = TP_QT_ERROR_CANCELLED; break; case ConnectionStatusReasonNetworkError: errorName = TP_QT_ERROR_NETWORK_ERROR; break; case ConnectionStatusReasonAuthenticationFailed: errorName = TP_QT_ERROR_AUTHENTICATION_FAILED; break; case ConnectionStatusReasonEncryptionError: errorName = TP_QT_ERROR_ENCRYPTION_ERROR; break; case ConnectionStatusReasonNameInUse: if (oldStatus == ConnectionStatusConnected) { errorName = TP_QT_ERROR_CONNECTION_REPLACED; } else { errorName = TP_QT_ERROR_ALREADY_CONNECTED; } break; case ConnectionStatusReasonCertNotProvided: errorName = TP_QT_ERROR_CERT_NOT_PROVIDED; break; case ConnectionStatusReasonCertUntrusted: errorName = TP_QT_ERROR_CERT_UNTRUSTED; break; case ConnectionStatusReasonCertExpired: errorName = TP_QT_ERROR_CERT_EXPIRED; break; case ConnectionStatusReasonCertNotActivated: errorName = TP_QT_ERROR_CERT_NOT_ACTIVATED; break; case ConnectionStatusReasonCertHostnameMismatch: errorName = TP_QT_ERROR_CERT_HOSTNAME_MISMATCH; break; case ConnectionStatusReasonCertFingerprintMismatch: errorName = TP_QT_ERROR_CERT_FINGERPRINT_MISMATCH; break; case ConnectionStatusReasonCertSelfSigned: errorName = TP_QT_ERROR_CERT_SELF_SIGNED; break; case ConnectionStatusReasonCertOtherError: errorName = TP_QT_ERROR_CERT_INVALID; break; default: errorName = TP_QT_ERROR_DISCONNECTED; break; } return errorName; } /** * \fn void Connection::statusChanged(Tp::ConnectionStatus newStatus) * * Indicates that the connection's status has changed and that all previously requested features are * now ready to use for the new status. * * Legitimate uses for this signal, apart from waiting for a given connection status to be ready, * include updating an animation based on the connection being in ConnectionStatusConnecting, * ConnectionStatusConnected and ConnectionStatusDisconnected, and otherwise showing progress * indication to the user. It should, however, NEVER be used for error handling: * * This signal doesn't contain the status reason as an argument, because statusChanged() shouldn't * be used for error-handling. There are numerous cases in which a Connection may become unusable * without there being a status change to ConnectionStatusDisconnected. All of these cases, and * being disconnected itself, are signaled by invalidated() with appropriate error names. On the * other hand, the reason for the status going to ConnectionStatusConnecting or * ConnectionStatusConnected will always be ConnectionStatusReasonRequested, so signaling that would * be useless. * * The status reason, as returned by statusReason(), may however be used as a fallback for error * handling in slots connected to the invalidated() signal, if the client doesn't understand a * particular (likely domain-specific if so) error name given by invalidateReason(). * * \param newStatus The new status of the connection, as would be returned by status(). */ /** * \fn void Connection::selfHandleChanged(uint newHandle) * * Emitted when the value of selfHandle() changes. * * \param newHandle The new connection self handle. * \sa selfHandle() */ /** * \fn void Connection::selfContactChanged() * * Emitted when the value of selfContact() changes. * * \sa selfContact() */ /** * \fn void Connection::accountBalanceChanged(const Tp::CurrencyAmount &accountBalance) * * Emitted when the value of accountBalance() changes. * * \param accountBalance The new user's balance of this connection. * \sa accountBalance() */ } // Tp telepathy-qt-0.9.3/TelepathyQt/capabilities-base.cpp0000644000175200001440000003200312000056607024723 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009-2010 Collabora Ltd. * @copyright Copyright (C) 2009-2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include #include namespace Tp { struct TP_QT_NO_EXPORT CapabilitiesBase::Private : public QSharedData { Private(bool specificToContact); Private(const RequestableChannelClassSpecList &rccSpecs, bool specificToContact); RequestableChannelClassSpecList rccSpecs; bool specificToContact; }; CapabilitiesBase::Private::Private(bool specificToContact) : specificToContact(specificToContact) { } CapabilitiesBase::Private::Private(const RequestableChannelClassSpecList &rccSpecs, bool specificToContact) : rccSpecs(rccSpecs), specificToContact(specificToContact) { } /** * \class CapabilitiesBase * \ingroup clientconn * \headerfile TelepathyQt/capabilities-base.h * * \brief The CapabilitiesBase class represents the capabilities a Connection * or a Contact supports. */ /** * Construct a new CapabilitiesBase object. */ CapabilitiesBase::CapabilitiesBase() : mPriv(new Private(false)) { } /** * Construct a new CapabilitiesBase object. * * \param specificToContact Whether this object describes the capabilities of a * particular contact. */ CapabilitiesBase::CapabilitiesBase(bool specificToContact) : mPriv(new Private(specificToContact)) { } /** * Construct a new CapabilitiesBase object using the given \a rccs. * * \param rccs RequestableChannelClassList representing the capabilities of a * connection or contact. * \param specificToContact Whether this object describes the capabilities of a * particular contact. */ CapabilitiesBase::CapabilitiesBase(const RequestableChannelClassList &rccs, bool specificToContact) : mPriv(new Private(RequestableChannelClassSpecList(rccs), specificToContact)) { } /** * Construct a new CapabilitiesBase object using the given \a rccSpecs. * * \param rccSpecs RequestableChannelClassSpecList representing the capabilities of a * connection or contact. * \param specificToContact Whether this object describes the capabilities of a * particular contact. */ CapabilitiesBase::CapabilitiesBase(const RequestableChannelClassSpecList &rccSpecs, bool specificToContact) : mPriv(new Private(rccSpecs, specificToContact)) { } CapabilitiesBase::CapabilitiesBase(const CapabilitiesBase &other) : mPriv(other.mPriv) { } /** * Class destructor. */ CapabilitiesBase::~CapabilitiesBase() { } CapabilitiesBase &CapabilitiesBase::operator=(const CapabilitiesBase &other) { this->mPriv = other.mPriv; return *this; } /** * Return the list of requestable channel class spec representing the requests that can succeed. * * This can be used by advanced clients to determine whether an unusually * complex request would succeed. See the \telepathy_spec * for details of how to interpret the returned list. * * The higher-level methods like textChats() are likely to be more * useful to the majority of clients. * * \return A RequestableChannelClassSpecList indicating the parameters to * Account::createChannel, Account::ensureChannel, * Connection::createChannel and Connection::ensureChannel * that can be expected to work. */ RequestableChannelClassSpecList CapabilitiesBase::allClassSpecs() const { return mPriv->rccSpecs; } void CapabilitiesBase::updateRequestableChannelClasses( const RequestableChannelClassList &rccs) { mPriv->rccSpecs = RequestableChannelClassSpecList(rccs); } /** * Return whether this object accurately describes the capabilities of a * particular contact, or if it's only a guess based on the * capabilities of the underlying connection. * * In protocols like XMPP where each contact advertises their capabilities * to others, Contact::capabilities() will generally return an object where * this method returns true. * * In protocols like SIP where contacts' capabilities are not known, * Contact::capabilities() will return an object where this method returns * false, whose methods textChats() etc. are based on what the * underlying connection supports. * * This reflects the fact that the best assumption an application can make is * that every contact supports every channel type supported by the connection, * while indicating that requests to communicate might fail if the contact * does not actually have the necessary functionality. * * \return \c true if this object describes the capabilities of a particular * contact, \c false otherwise. */ bool CapabilitiesBase::isSpecificToContact() const { return mPriv->specificToContact; } /** * Return whether private text channels can be established by providing * a contact identifier. * * If the protocol is such that text chats can be established, but only via * a more elaborate D-Bus API than normal (because more information is needed), * then this method will return false. * * \return \c true if Account::ensureTextChat() can be expected to work, * \c false otherwise. */ bool CapabilitiesBase::textChats() const { foreach (const RequestableChannelClassSpec &rccSpec, mPriv->rccSpecs) { if (rccSpec.supports(RequestableChannelClassSpec::textChat())) { return true; } } return false; } bool CapabilitiesBase::audioCalls() const { foreach (const RequestableChannelClassSpec &rccSpec, mPriv->rccSpecs) { if (rccSpec.supports(RequestableChannelClassSpec::audioCall())) { return true; } } return false; } bool CapabilitiesBase::videoCalls() const { foreach (const RequestableChannelClassSpec &rccSpec, mPriv->rccSpecs) { if (rccSpec.supports(RequestableChannelClassSpec::videoCall())) { return true; } } return false; } bool CapabilitiesBase::videoCallsWithAudio() const { foreach (const RequestableChannelClassSpec &rccSpec, mPriv->rccSpecs) { if (rccSpec.supports(RequestableChannelClassSpec::videoCallWithAudioAllowed()) || rccSpec.supports(RequestableChannelClassSpec::audioCallWithVideoAllowed())) { return true; } } return false; } bool CapabilitiesBase::upgradingCalls() const { foreach (const RequestableChannelClassSpec &rccSpec, mPriv->rccSpecs) { if (rccSpec.channelType() == TP_QT_IFACE_CHANNEL_TYPE_CALL && rccSpec.allowsProperty(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".MutableContents"))) { return true; } } return false; } /** * Return whether private audio and/or video calls can be established by * providing a contact identifier. * * If the protocol is such that these calls can be established, but only via * a more elaborate D-Bus API than normal (because more information is needed), * then this method will return false. * * \return \c true if Account::ensureStreamedMediaCall() can be expected to work, * \c false otherwise. * \sa streamedMediaAudioCalls(), streamedMediaVideoCalls(), * streamedMediaVideoCallsWithAudio() */ bool CapabilitiesBase::streamedMediaCalls() const { foreach (const RequestableChannelClassSpec &rccSpec, mPriv->rccSpecs) { if (rccSpec.supports(RequestableChannelClassSpec::streamedMediaCall())) { return true; } } return false; } /** * Return whether private audio calls can be established by providing a * contact identifier. * * Call upgradingCalls() to determine whether such calls are * likely to be upgradable to have a video stream later. * * If the protocol is such that these calls can be established, but only via * a more elaborate D-Bus API than normal (because more information is needed), * then this method will return false. * * In some older connection managers, streamedMediaAudioCalls() and * streamedMediaVideoCalls() might both return false, even though streamedMediaCalls() returns * true. This indicates that only an older API is supported - clients of these connection managers * must call Account::ensureStreamedMediaCall() to get an empty call, then add audio and/or * video streams to it. * * \return \c true if Account::ensureStreamedMediaAudioCall() can be expected to work, * \c false otherwise. * \sa streamedMediaCalls(), streamedMediaVideoCalls(), streamedMediaVideoCallsWithAudio() */ bool CapabilitiesBase::streamedMediaAudioCalls() const { foreach (const RequestableChannelClassSpec &rccSpec, mPriv->rccSpecs) { if (rccSpec.supports(RequestableChannelClassSpec::streamedMediaAudioCall())) { return true; } } return false; } /** * Return whether private video calls can be established by providing a * contact identifier. * * The same comments as for streamedMediaAudioCalls() apply to this method. * * \return \c true if Account::ensureStreamedMediaVideoCall() can be expected to work, * if given \c false as \a withAudio parameter, \c false otherwise. * \sa streamedMediaCalls(), streamedMediaAudioCalls(), streamedMediaVideoCallsWithAudio() */ bool CapabilitiesBase::streamedMediaVideoCalls() const { foreach (const RequestableChannelClassSpec &rccSpec, mPriv->rccSpecs) { if (rccSpec.supports(RequestableChannelClassSpec::streamedMediaVideoCall())) { return true; } } return false; } /** * Return whether private video calls with audio can be established by providing a * contact identifier. * * The same comments as for streamedMediaAudioCalls() apply to this method. * * \return \c true if Account::ensureStreamedMediaVideoCall() can be expected to work, * if given \c true as \a withAudio parameter, \c false otherwise. * \sa streamedMediaCalls(), streamedMediaAudioCalls(), streamedMediaVideoCalls() */ bool CapabilitiesBase::streamedMediaVideoCallsWithAudio() const { foreach (const RequestableChannelClassSpec &rccSpec, mPriv->rccSpecs) { if (rccSpec.supports(RequestableChannelClassSpec::streamedMediaVideoCallWithAudio())) { return true; } } return false; } /** * Return whether the protocol supports adding streams of a different type * to ongoing media calls. * * In some protocols and clients (such as XMPP Jingle), all calls potentially * support both audio and video. This is indicated by returning true. * * In other protocols and clients (such as MSN, and the variant of XMPP Jingle * used by Google clients), the streams are fixed at the time the call is * started, so if you will ever want video, you have to ask for it at the * beginning, for instance with ensureStreamedMediaVideoCall(). This is indicated by * returning false. * * User interfaces can use this method as a UI hint. If it returns false, * then a UI wishing to support both audio and video calls will have to * provide separate "audio call" and "video call" buttons or menu items; * if it returns true, a single button that makes an audio call is sufficient, * because video can be added later. * * (The underlying Telepathy feature is the ImmutableStreams property; if this * method returns true, then ImmutableStreams is false, and vice versa). * * \return \c true if audio calls can be upgraded to audio + video, * \c false otherwise. */ bool CapabilitiesBase::upgradingStreamedMediaCalls() const { foreach (const RequestableChannelClassSpec &rccSpec, mPriv->rccSpecs) { if (rccSpec.channelType() == TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA && !rccSpec.allowsProperty(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".ImmutableStreams"))) { // TODO should we test all classes that have channelType // StreamedMedia or just one is fine? return true; } } return false; } /** * Return whether file transfer can be established by providing a contact identifier * * \return \c true if file transfers can be expected to work, * \c false otherwise. */ bool CapabilitiesBase::fileTransfers() const { foreach (const RequestableChannelClassSpec &rccSpec, mPriv->rccSpecs) { if (rccSpec.supports(RequestableChannelClassSpec::fileTransfer())) { return true; } } return false; } } // Tp telepathy-qt-0.9.3/TelepathyQt/ConnectionInterfaceMailNotificationInterface0000644000175200001440000000046012000056607031516 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ConnectionInterfaceMailNotificationInterface_HEADER_GUARD_ #define _TelepathyQt_ConnectionInterfaceMailNotificationInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/svc-connection.xml0000644000175200001440000000272412000056607024337 0ustar00collabora-develusers00000000000000 Connection interfaces telepathy-qt-0.9.3/TelepathyQt/pending-send-message.cpp0000644000175200001440000001052612000056607025365 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/pending-send-message.moc.hpp" #include #include #include namespace Tp { struct TP_QT_NO_EXPORT PendingSendMessage::Private { Private(const Message &message) : message(message) { } QString token; Message message; }; /** * \class PendingSendMessage * \ingroup clientchannel * \headerfile TelepathyQt/pending-send-message.h * * \brief The PendingSendMessage class represents the parameters of and the * reply to an asynchronous message send request. * * See \ref async_model */ PendingSendMessage::PendingSendMessage(const TextChannelPtr &channel, const Message &message) : PendingOperation(channel), mPriv(new Private(message)) { } PendingSendMessage::PendingSendMessage(const ContactMessengerPtr &messenger, const Message &message) : PendingOperation(messenger), mPriv(new Private(message)) { } PendingSendMessage::~PendingSendMessage() { delete mPriv; } /** * Return the channel used to send the message if this instance was created using * TextChannel. If it was created using ContactMessenger, return a null TextChannelPtr. * * \return A pointer to the TextChannel object, or a null TextChannelPtr if created using * ContactMessenger. */ TextChannelPtr PendingSendMessage::channel() const { return TextChannelPtr(qobject_cast((TextChannel*) object().data())); } /** * Return the contact messenger used to send the message if this instance was created using * ContactMessenger. If it was created using TextChannel, return a null ContactMessengerPtr. * * \return A pointer to the ContactMessenger object, or a null ContactMessengerPtr if created using * TextChannel. */ ContactMessengerPtr PendingSendMessage::messenger() const { return ContactMessengerPtr(qobject_cast((ContactMessenger*) object().data())); } QString PendingSendMessage::sentMessageToken() const { return mPriv->token; } Message PendingSendMessage::message() const { return mPriv->message; } void PendingSendMessage::onTextSent(QDBusPendingCallWatcher *watcher) { QDBusPendingReply<> reply = *watcher; if (reply.isError()) { setFinishedWithError(reply.error()); } else { setFinished(); } watcher->deleteLater(); } void PendingSendMessage::onMessageSent(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (reply.isError()) { setFinishedWithError(reply.error()); } else { mPriv->token = reply.value(); setFinished(); } watcher->deleteLater(); } void PendingSendMessage::onCDMessageSent(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (reply.isError()) { QDBusError error = reply.error(); if (error.name() == TP_QT_DBUS_ERROR_UNKNOWN_METHOD || error.name() == TP_QT_DBUS_ERROR_UNKNOWN_INTERFACE) { setFinishedWithError(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Channel Dispatcher implementation (e.g. mission-control), " "does not support interface CD.I.Messages")); } else { setFinishedWithError(error); } } else { mPriv->token = reply.value(); setFinished(); } watcher->deleteLater(); } } // Tp telepathy-qt-0.9.3/TelepathyQt/service-types.h0000644000175200001440000000373212000056607023640 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_service_types_h_HEADER_GUARD_ #define _TelepathyQt_service_types_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include namespace Tp { class AbstractProtocolInterface; class BaseConnection; class BaseConnectionManager; class BaseProtocol; class BaseProtocolAddressingInterface; class BaseProtocolAvatarsInterface; class BaseProtocolPresenceInterface; class DBusService; #ifndef DOXYGEN_SHOULD_SKIP_THIS typedef SharedPtr AbstractProtocolInterfacePtr; typedef SharedPtr BaseConnectionPtr; typedef SharedPtr BaseConnectionManagerPtr; typedef SharedPtr BaseProtocolPtr; typedef SharedPtr BaseProtocolAddressingInterfacePtr; typedef SharedPtr BaseProtocolAvatarsInterfacePtr; typedef SharedPtr BaseProtocolPresenceInterfacePtr; typedef SharedPtr DBusServicePtr; #endif /* DOXYGEN_SHOULD_SKIP_THIS */ } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/LocationInfo0000644000175200001440000000036312000056607023171 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_LocationInfo_HEADER_GUARD_ #define _TelepathyQt_LocationInfo_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/ProtocolInterfaceAvatarsInterface0000644000175200001440000000044212000056607027370 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ProtocolInterfaceAvatarsInterface_HEADER_GUARD_ #define _TelepathyQt_ProtocolInterfaceAvatarsInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/connection-capabilities.cpp0000644000175200001440000002251512000056607026157 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009-2010 Collabora Ltd. * @copyright Copyright (C) 2009-2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include #include namespace Tp { /** * \class ConnectionCapabilities * \ingroup clientconn * \headerfile TelepathyQt/connection-capabilities.h * * \brief The ConnectionCapabilities class represents the capabilities of a * Connection. */ /** * Construct a new ConnectionCapabilities object. */ ConnectionCapabilities::ConnectionCapabilities() : CapabilitiesBase() { } /** * Construct a new ConnectionCapabilities object using the give \a rccs. * * \param rccs RequestableChannelClassList representing the capabilities of a * Connection. */ ConnectionCapabilities::ConnectionCapabilities(const RequestableChannelClassList &rccs) : CapabilitiesBase(rccs, false) { } /** * Construct a new ConnectionCapabilities object using the give \a rccSpecs. * * \param rccSpecs RequestableChannelClassSpecList representing the capabilities of a * Connection. */ ConnectionCapabilities::ConnectionCapabilities(const RequestableChannelClassSpecList &rccSpecs) : CapabilitiesBase(rccSpecs, false) { } /** * Class destructor. */ ConnectionCapabilities::~ConnectionCapabilities() { } /** * Return true if named text chatrooms can be joined by providing a * chatroom identifier. * * If the protocol is such that chatrooms can be joined, but only via * a more elaborate D-Bus API than normal (because more information is needed), * then this method will return false. * * \return \c true if Account::ensureTextChatroom() can be expected to work. */ bool ConnectionCapabilities::textChatrooms() const { RequestableChannelClassSpecList rccSpecs = allClassSpecs(); foreach (const RequestableChannelClassSpec &rccSpec, rccSpecs) { if (rccSpec.supports(RequestableChannelClassSpec::textChatroom())) { return true; } } return false; } /** * Return whether creating conference media calls is supported. * * \return \c true if supported, \c false otherwise. */ bool ConnectionCapabilities::conferenceStreamedMediaCalls() const { RequestableChannelClassSpecList rccSpecs = allClassSpecs(); foreach (const RequestableChannelClassSpec &rccSpec, rccSpecs) { if (rccSpec.supports(RequestableChannelClassSpec::conferenceStreamedMediaCall())) { return true; } } return false; } /** * Return whether creating conference media calls is supported. * * This method will also check whether inviting new contacts when creating a conference media call * channel by providing additional members to initial invitees (as opposed to merging several * channels into one new conference channel) is supported. * * If providing additional members is supported, it is also possible to request conference media * calls with fewer than two (even zero) already established media calls. * * \return \c true if supported, \c false otherwise. */ bool ConnectionCapabilities::conferenceStreamedMediaCallsWithInvitees() const { RequestableChannelClassSpecList rccSpecs = allClassSpecs(); foreach (const RequestableChannelClassSpec &rccSpec, rccSpecs) { if (rccSpec.supports(RequestableChannelClassSpec::conferenceStreamedMediaCallWithInvitees())) { return true; } } return false; } /** * Return whether creating conference text chats is supported. * * \return \c true if supported, \c false otherwise. */ bool ConnectionCapabilities::conferenceTextChats() const { RequestableChannelClassSpecList rccSpecs = allClassSpecs(); foreach (const RequestableChannelClassSpec &rccSpec, rccSpecs) { if (rccSpec.supports(RequestableChannelClassSpec::conferenceTextChat())) { return true; } } return false; } /** * Return whether creating conference text chats is supported. * * This method will also check whether inviting new contacts when creating a conference text chat * channel by providing additional members to initial invitees (as opposed to merging several * channels into one new conference channel) is supported. * * If providing additional members is supported, it is also possible to request conference text * chats with fewer than two (even zero) already established text chats. * * \return \c true if supported, \c false otherwise. */ bool ConnectionCapabilities::conferenceTextChatsWithInvitees() const { RequestableChannelClassSpecList rccSpecs = allClassSpecs(); foreach (const RequestableChannelClassSpec &rccSpec, rccSpecs) { if (rccSpec.supports(RequestableChannelClassSpec::conferenceTextChatWithInvitees())) { return true; } } return false; } /** * Return whether creating conference text chat rooms is supported. * * \return \c true if supported, \c false otherwise. */ bool ConnectionCapabilities::conferenceTextChatrooms() const { RequestableChannelClassSpecList rccSpecs = allClassSpecs(); foreach (const RequestableChannelClassSpec &rccSpec, rccSpecs) { if (rccSpec.supports(RequestableChannelClassSpec::conferenceTextChatroom())) { return true; } } return false; } /** * Return whether creating conference text chat rooms is supported. * * This method will also check whether inviting new contacts when creating a conference text chat * room channel by providing additional members to initial invitees (as opposed to merging several * channels into one new conference channel) is supported. * * If providing additional members is supported, it is also possible to request conference text * chat rooms with fewer than two (even zero) already established text chat rooms. * * \return \c true if supported, \c false otherwise. */ bool ConnectionCapabilities::conferenceTextChatroomsWithInvitees() const { RequestableChannelClassSpecList rccSpecs = allClassSpecs(); foreach (const RequestableChannelClassSpec &rccSpec, rccSpecs) { if (rccSpec.supports(RequestableChannelClassSpec::conferenceTextChatroomWithInvitees())) { return true; } } return false; } /** * Return whether creating a ContactSearch channel is supported. * * \return \c true if supported, \c false otherwise. */ bool ConnectionCapabilities::contactSearches() const { RequestableChannelClassSpecList rccSpecs = allClassSpecs(); foreach (const RequestableChannelClassSpec &rccSpec, rccSpecs) { if (rccSpec.supports(RequestableChannelClassSpec::contactSearch())) { return true; } } return false; } /** * Return whether creating a ContactSearch channel specifying a server is supported. * * \return \c true if supported, \c false otherwise. */ bool ConnectionCapabilities::contactSearchesWithSpecificServer() const { RequestableChannelClassSpecList rccSpecs = allClassSpecs(); foreach (const RequestableChannelClassSpec &rccSpec, rccSpecs) { if (rccSpec.supports(RequestableChannelClassSpec::contactSearchWithSpecificServer())) { return true; } } return false; } /** * Return whether creating a ContactSearch channel specifying a limit is supported. * * \return \c true if supported, \c false otherwise. */ bool ConnectionCapabilities::contactSearchesWithLimit() const { RequestableChannelClassSpecList rccSpecs = allClassSpecs(); foreach (const RequestableChannelClassSpec &rccSpec, rccSpecs) { if (rccSpec.supports(RequestableChannelClassSpec::contactSearchWithLimit())) { return true; } } return false; } /** * Return whether creating a DBusTube channel by providing a contact identifier is supported. * * \return \c true if supported, \c false otherwise. */ bool ConnectionCapabilities::dbusTubes() const { RequestableChannelClassSpecList rccSpecs = allClassSpecs(); foreach (const RequestableChannelClassSpec &rccSpec, rccSpecs) { if (rccSpec.supports(RequestableChannelClassSpec::dbusTube())) { return true; } } return false; } /** * Return whether creating a StreamTube channel by providing a contact identifier is supported. * * \return \c true if supported, \c false otherwise. */ bool ConnectionCapabilities::streamTubes() const { RequestableChannelClassSpecList rccSpecs = allClassSpecs(); foreach (const RequestableChannelClassSpec &rccSpec, rccSpecs) { if (rccSpec.supports(RequestableChannelClassSpec::streamTube())) { return true; } } return false; } } // Tp telepathy-qt-0.9.3/TelepathyQt/ConnectionFactory0000644000175200001440000000040212000056607024226 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ConnectionFactory_HEADER_GUARD_ #define _TelepathyQt_ConnectionFactory_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/MediaSessionHandlerInterface0000644000175200001440000000043312000056607026305 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_MediaSessionHandlerInterface_HEADER_GUARD_ #define _TelepathyQt_MediaSessionHandlerInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/pending-operation.h0000644000175200001440000000425312000056607024457 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2009 Collabora Ltd. * @copyright Copyright (C) 2008-2009 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_pending_operation_h_HEADER_GUARD_ #define _TelepathyQt_pending_operation_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include class QDBusError; class QDBusPendingCall; class QDBusPendingCallWatcher; namespace Tp { class ReadinessHelper; class TP_QT_EXPORT PendingOperation : public QObject { Q_OBJECT Q_DISABLE_COPY(PendingOperation) public: virtual ~PendingOperation(); bool isFinished() const; bool isValid() const; bool isError() const; QString errorName() const; QString errorMessage() const; Q_SIGNALS: void finished(Tp::PendingOperation *operation); protected: PendingOperation(const SharedPtr &object); SharedPtr object() const; protected Q_SLOTS: void setFinished(); void setFinishedWithError(const QString &name, const QString &message); void setFinishedWithError(const QDBusError &error); private Q_SLOTS: TP_QT_NO_EXPORT void emitFinished(); private: friend class ContactManager; friend class ReadinessHelper; struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/dbus.h0000644000175200001440000000372312000056607021773 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008 Collabora Ltd. * @copyright Copyright (C) 2008 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_dbus_h_HEADER_GUARD_ #define _TelepathyQt_dbus_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif /** * \addtogroup clientsideproxies Client-side proxies * * Proxy objects representing remote service objects accessed via D-Bus. * * In addition to providing direct access to methods, signals and properties * exported by the remote objects, some of these proxies offer features like * automatic inspection of remote object capabilities, property tracking, * backwards compatibility helpers for older services and other utilities. */ /** * \defgroup clientdbus Generic D-Bus proxies * \ingroup clientsideproxies * * Proxy objects representing well-known generic D-Bus interfaces on remote * objects. Note that QDBus already has QDBusConnectionInterface for accessing * the bus daemon, so in the parts where there is an overlap in the * functionality, using the QDBus proxy should be given consideration instead * of blindly using the proxy provided here. */ #include #endif telepathy-qt-0.9.3/TelepathyQt/channel.h0000644000175200001440000002327112000056607022446 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008 Collabora Ltd. * @copyright Copyright (C) 2008 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_channel_h_HEADER_GUARD_ #define _TelepathyQt_channel_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include #include #include #include #include #include #include #include namespace Tp { class Connection; class PendingOperation; class PendingReady; class TP_QT_EXPORT Channel : public StatefulDBusProxy, public OptionalInterfaceFactory { Q_OBJECT Q_DISABLE_COPY(Channel) public: static const Feature FeatureCore; static const Feature FeatureConferenceInitialInviteeContacts; static ChannelPtr create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties); virtual ~Channel(); ConnectionPtr connection() const; QVariantMap immutableProperties() const; QString channelType() const; HandleType targetHandleType() const; uint targetHandle() const; QString targetId() const; ContactPtr targetContact() const; bool isRequested() const; ContactPtr initiatorContact() const; PendingOperation *requestClose(); PendingOperation *requestLeave(const QString &message = QString(), ChannelGroupChangeReason reason = ChannelGroupChangeReasonNone); ChannelGroupFlags groupFlags() const; bool groupCanAddContacts() const; bool groupCanAddContactsWithMessage() const; bool groupCanAcceptContactsWithMessage() const; PendingOperation *groupAddContacts(const QList &contacts, const QString &message = QString()); bool groupCanRescindContacts() const; bool groupCanRescindContactsWithMessage() const; bool groupCanRemoveContacts() const; bool groupCanRemoveContactsWithMessage() const; bool groupCanRejectContactsWithMessage() const; bool groupCanDepartWithMessage() const; PendingOperation *groupRemoveContacts(const QList &contacts, const QString &message = QString(), ChannelGroupChangeReason reason = ChannelGroupChangeReasonNone); Contacts groupContacts(bool includeSelfContact = true) const; Contacts groupLocalPendingContacts(bool includeSelfContact = true) const; Contacts groupRemotePendingContacts(bool includeSelfContact = true) const; class GroupMemberChangeDetails { public: GroupMemberChangeDetails(); GroupMemberChangeDetails(const GroupMemberChangeDetails &other); ~GroupMemberChangeDetails(); GroupMemberChangeDetails &operator=(const GroupMemberChangeDetails &other); bool isValid() const { return mPriv.constData() != 0; } bool hasActor() const; ContactPtr actor() const; bool hasReason() const { return allDetails().contains(QLatin1String("change-reason")); } ChannelGroupChangeReason reason() const { return (ChannelGroupChangeReason) qdbus_cast(allDetails().value(QLatin1String("change-reason"))); } bool hasMessage() const { return allDetails().contains(QLatin1String("message")); } QString message () const { return qdbus_cast(allDetails().value(QLatin1String("message"))); } bool hasError() const { return allDetails().contains(QLatin1String("error")); } QString error() const { return qdbus_cast(allDetails().value(QLatin1String("error"))); } bool hasDebugMessage() const { return allDetails().contains(QLatin1String("debug-message")); } QString debugMessage() const { return qdbus_cast(allDetails().value(QLatin1String("debug-message"))); } QVariantMap allDetails() const; private: friend class Channel; friend class Contact; friend class ContactManager; TP_QT_NO_EXPORT GroupMemberChangeDetails(const ContactPtr &actor, const QVariantMap &details); struct Private; friend struct Private; QSharedDataPointer mPriv; }; GroupMemberChangeDetails groupLocalPendingContactChangeInfo(const ContactPtr &contact) const; GroupMemberChangeDetails groupSelfContactRemoveInfo() const; bool groupAreHandleOwnersAvailable() const; HandleOwnerMap groupHandleOwners() const; bool groupIsSelfContactTracked() const; ContactPtr groupSelfContact() const; bool isConference() const; Contacts conferenceInitialInviteeContacts() const; QList conferenceChannels() const; QList conferenceInitialChannels() const; QHash conferenceOriginalChannels() const; bool supportsConferenceMerging() const; PendingOperation *conferenceMergeChannel(const ChannelPtr &channel); bool supportsConferenceSplitting() const; PendingOperation *conferenceSplitChannel(); Q_SIGNALS: void groupFlagsChanged(Tp::ChannelGroupFlags flags, Tp::ChannelGroupFlags added, Tp::ChannelGroupFlags removed); void groupCanAddContactsChanged(bool canAddContacts); void groupCanRemoveContactsChanged(bool canRemoveContacts); void groupCanRescindContactsChanged(bool canRescindContacts); void groupMembersChanged( const Tp::Contacts &groupMembersAdded, const Tp::Contacts &groupLocalPendingMembersAdded, const Tp::Contacts &groupRemotePendingMembersAdded, const Tp::Contacts &groupMembersRemoved, const Tp::Channel::GroupMemberChangeDetails &details); void groupHandleOwnersChanged(const Tp::HandleOwnerMap &owners, const Tp::UIntList &added, const Tp::UIntList &removed); void groupSelfContactChanged(); void conferenceChannelMerged(const Tp::ChannelPtr &channel); void conferenceChannelRemoved(const Tp::ChannelPtr &channel, const Tp::Channel::GroupMemberChangeDetails &details); protected: Channel(const ConnectionPtr &connection,const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature); Client::ChannelInterface *baseInterface() const; bool groupSelfHandleIsLocalPending() const; protected Q_SLOTS: PendingOperation *groupAddSelfHandle(); private Q_SLOTS: TP_QT_NO_EXPORT void gotMainProperties(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void gotChannelType(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void gotHandle(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void gotInterfaces(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void onClosed(); TP_QT_NO_EXPORT void onConnectionReady(Tp::PendingOperation *op); TP_QT_NO_EXPORT void onConnectionInvalidated(); TP_QT_NO_EXPORT void gotGroupProperties(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void gotGroupFlags(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void gotAllMembers(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void gotLocalPendingMembersWithInfo(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void gotSelfHandle(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void gotContacts(Tp::PendingOperation *op); TP_QT_NO_EXPORT void onGroupFlagsChanged(uint added, uint removed); TP_QT_NO_EXPORT void onMembersChanged(const QString &message, const Tp::UIntList &added, const Tp::UIntList &removed, const Tp::UIntList &localPending, const Tp::UIntList &remotePending, uint actor, uint reason); TP_QT_NO_EXPORT void onMembersChangedDetailed( const Tp::UIntList &added, const Tp::UIntList &removed, const Tp::UIntList &localPending, const Tp::UIntList &remotePending, const QVariantMap &details); TP_QT_NO_EXPORT void onHandleOwnersChanged(const Tp::HandleOwnerMap &added, const Tp::UIntList &removed); TP_QT_NO_EXPORT void onSelfHandleChanged(uint selfHandle); TP_QT_NO_EXPORT void gotConferenceProperties(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void gotConferenceInitialInviteeContacts(Tp::PendingOperation *op); TP_QT_NO_EXPORT void onConferenceChannelMerged(const QDBusObjectPath &channel, uint channelSpecificHandle, const QVariantMap &properties); TP_QT_NO_EXPORT void onConferenceChannelMerged(const QDBusObjectPath &channel); TP_QT_NO_EXPORT void onConferenceChannelRemoved(const QDBusObjectPath &channel, const QVariantMap &details); TP_QT_NO_EXPORT void onConferenceChannelRemoved(const QDBusObjectPath &channel); TP_QT_NO_EXPORT void gotConferenceChannelRemovedActorContact(Tp::PendingOperation *op); private: class PendingLeave; friend class PendingLeave; struct Private; friend struct Private; Private *mPriv; }; } // Tp Q_DECLARE_METATYPE(Tp::Channel::GroupMemberChangeDetails); #endif telepathy-qt-0.9.3/TelepathyQt/ClientApproverInterface0000644000175200001440000000040212000056607025355 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ClientApproverInterface_HEADER_GUARD_ #define _TelepathyQt_ClientApproverInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/key-file.h0000644000175200001440000000445712000056607022550 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008 Collabora Ltd. * @copyright Copyright (C) 2008 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_key_file_h_HEADER_GUARD_ #define _TelepathyQt_key_file_h_HEADER_GUARD_ #include #include #include class QString; class QStringList; #ifndef DOXYGEN_SHOULD_SKIP_THIS namespace Tp { class TP_QT_NO_EXPORT KeyFile { public: enum Status { None = 0, NoError, NotFoundError, AccessError, FormatError, }; KeyFile(); KeyFile(const KeyFile &other); KeyFile(const QString &fileName); ~KeyFile(); KeyFile &operator=(const KeyFile &other); void setFileName(const QString &fileName); QString fileName() const; Status status() const; void setGroup(const QString &group); QString group() const; QStringList allGroups() const; QStringList allKeys() const; QStringList keys() const; bool contains(const QString &key) const; QString rawValue(const QString &key) const; QString value(const QString &key) const; QStringList valueAsStringList(const QString &key) const; static bool unescapeString(const QByteArray &data, int from, int to, QString &result); static bool unescapeStringList(const QByteArray &data, int from, int to, QStringList &result); private: struct Private; friend struct Private; Private *mPriv; }; } Q_DECLARE_METATYPE(Tp::KeyFile); #endif /* DOXYGEN_SHOULD_SKIP_THIS */ #endif telepathy-qt-0.9.3/TelepathyQt/ChannelTypeDBusTubeInterface0000644000175200001440000000041512000056607026234 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelTypeDBusTubeInterface_HEADER_GUARD_ #define _TelepathyQt_ChannelTypeDBusTubeInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/call-content-media-description.xml0000644000175200001440000000104012000056607027356 0ustar00collabora-develusers00000000000000 Call misc interfaces, version 1 telepathy-qt-0.9.3/TelepathyQt/GenericPropertyFilter0000644000175200001440000000041712000056607025074 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_GenericPropertyFilter_HEADER_GUARD_ #define _TelepathyQt_GenericPropertyFilter_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/MediaStreamHandlerInterface0000644000175200001440000000043012000056607026112 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_MediaStreamHandlerInterface_HEADER_GUARD_ #define _TelepathyQt_MediaStreamHandlerInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/account-manager.h0000644000175200001440000001315212000056607024077 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2010 Collabora Ltd. * @copyright Copyright (C) 2008-2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_account_manager_h_HEADER_GUARD_ #define _TelepathyQt_account_manager_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace Tp { class PendingAccount; class TP_QT_EXPORT AccountManager : public StatelessDBusProxy, public OptionalInterfaceFactory { Q_OBJECT Q_DISABLE_COPY(AccountManager) public: static const Feature FeatureCore; static AccountManagerPtr create(const QDBusConnection &bus); static AccountManagerPtr create( const AccountFactoryConstPtr &accountFactory = AccountFactory::create(QDBusConnection::sessionBus(), Account::FeatureCore), const ConnectionFactoryConstPtr &connectionFactory = ConnectionFactory::create(QDBusConnection::sessionBus()), const ChannelFactoryConstPtr &channelFactory = ChannelFactory::create(QDBusConnection::sessionBus()), const ContactFactoryConstPtr &contactFactory = ContactFactory::create()); static AccountManagerPtr create(const QDBusConnection &bus, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory = ContactFactory::create()); virtual ~AccountManager(); AccountFactoryConstPtr accountFactory() const; ConnectionFactoryConstPtr connectionFactory() const; ChannelFactoryConstPtr channelFactory() const; ContactFactoryConstPtr contactFactory() const; QList allAccounts() const; AccountSetPtr validAccounts() const; AccountSetPtr invalidAccounts() const; AccountSetPtr enabledAccounts() const; AccountSetPtr disabledAccounts() const; AccountSetPtr onlineAccounts() const; AccountSetPtr offlineAccounts() const; AccountSetPtr textChatAccounts() const; AccountSetPtr textChatroomAccounts() const; AccountSetPtr audioCallAccounts() const; AccountSetPtr videoCallAccounts() const; TP_QT_DEPRECATED AccountSetPtr streamedMediaCallAccounts() const; TP_QT_DEPRECATED AccountSetPtr streamedMediaAudioCallAccounts() const; TP_QT_DEPRECATED AccountSetPtr streamedMediaVideoCallAccounts() const; TP_QT_DEPRECATED AccountSetPtr streamedMediaVideoCallWithAudioAccounts() const; AccountSetPtr fileTransferAccounts() const; AccountSetPtr accountsByProtocol(const QString &protocolName) const; AccountSetPtr filterAccounts(const AccountFilterConstPtr &filter) const; AccountSetPtr filterAccounts(const QVariantMap &filter) const; AccountPtr accountForObjectPath(const QString &path) const; TP_QT_DEPRECATED AccountPtr accountForPath(const QString &path) const; QList accountsForObjectPaths(const QStringList &paths) const; TP_QT_DEPRECATED QList accountsForPaths(const QStringList &paths) const; QStringList supportedAccountProperties() const; PendingAccount *createAccount(const QString &connectionManager, const QString &protocol, const QString &displayName, const QVariantMap ¶meters, const QVariantMap &properties = QVariantMap()); Q_SIGNALS: void newAccount(const Tp::AccountPtr &account); protected: AccountManager(const QDBusConnection &bus, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory, const Feature &coreFeature); Client::AccountManagerInterface *baseInterface() const; private Q_SLOTS: TP_QT_NO_EXPORT void introspectMain(); TP_QT_NO_EXPORT void gotMainProperties(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void onAccountReady(Tp::PendingOperation *op); TP_QT_NO_EXPORT void onAccountValidityChanged(const QDBusObjectPath &objectPath, bool valid); TP_QT_NO_EXPORT void onAccountRemoved(const QDBusObjectPath &objectPath); private: friend class PendingAccount; struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/ClientObserverInterface0000644000175200001440000000040212000056607025346 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ClientObserverInterface_HEADER_GUARD_ #define _TelepathyQt_ClientObserverInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/simple-text-observer.h0000644000175200001440000000512012000056607025127 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_simple_text_observer_h_HEADER_GUARD_ #define _TelepathyQt_simple_text_observer_h_HEADER_GUARD_ #include #include #include namespace Tp { class Message; class PendingOperation; class ReceivedMessage; class TP_QT_EXPORT SimpleTextObserver : public QObject, public RefCounted { Q_OBJECT Q_DISABLE_COPY(SimpleTextObserver) public: static SimpleTextObserverPtr create(const AccountPtr &account); static SimpleTextObserverPtr create(const AccountPtr &account, const ContactPtr &contact); static SimpleTextObserverPtr create(const AccountPtr &account, const QString &contactIdentifier); virtual ~SimpleTextObserver(); AccountPtr account() const; QString contactIdentifier() const; QList textChats() const; Q_SIGNALS: void messageSent(const Tp::Message &message, Tp::MessageSendingFlags flags, const QString &sentMessageToken, const Tp::TextChannelPtr &channel); void messageReceived(const Tp::ReceivedMessage &message, const Tp::TextChannelPtr &channel); private Q_SLOTS: TP_QT_NO_EXPORT void onNewChannels(const QList &channels); TP_QT_NO_EXPORT void onChannelInvalidated(const Tp::ChannelPtr &channel); private: TP_QT_NO_EXPORT static SimpleTextObserverPtr create(const AccountPtr &account, const QString &contactIdentifier, bool requiresNormalization); TP_QT_NO_EXPORT SimpleTextObserver(const AccountPtr &account, const QString &contactIdentifier, bool requiresNormalization); struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/profile-manager.cpp0000644000175200001440000002600412000056607024436 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/profile-manager.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include #include #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT ProfileManager::Private { Private(ProfileManager *parent, const QDBusConnection &bus); static void introspectMain(Private *self); static void introspectFakeProfiles(Private *self); ProfileManager *parent; ReadinessHelper *readinessHelper; QDBusConnection bus; QHash profiles; QList cms; }; ProfileManager::Private::Private(ProfileManager *parent, const QDBusConnection &bus) : parent(parent), readinessHelper(parent->readinessHelper()), bus(bus) { ReadinessHelper::Introspectables introspectables; ReadinessHelper::Introspectable introspectableCore( QSet() << 0, // makesSenseForStatuses Features(), // dependsOnFeatures QStringList(), // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::introspectMain, this); introspectables[FeatureCore] = introspectableCore; ReadinessHelper::Introspectable introspectableFakeProfiles( QSet() << 0, // makesSenseForStatuses Features() << FeatureCore, // dependsOnFeatures QStringList(), // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::introspectFakeProfiles, this); introspectables[FeatureFakeProfiles] = introspectableFakeProfiles; readinessHelper->addIntrospectables(introspectables); } void ProfileManager::Private::introspectMain(ProfileManager::Private *self) { QStringList searchDirs = Profile::searchDirs(); foreach (const QString searchDir, searchDirs) { QDir dir(searchDir); dir.setFilter(QDir::Files); QFileInfoList list = dir.entryInfoList(); for (int i = 0; i < list.size(); ++i) { QFileInfo fi = list.at(i); if (fi.completeSuffix() != QLatin1String("profile")) { continue; } QString fileName = fi.absoluteFilePath(); QString serviceName = fi.baseName(); if (self->profiles.contains(serviceName)) { debug() << "Profile for service" << serviceName << "already " "exists. Ignoring profile file:" << fileName; continue; } ProfilePtr profile = Profile::createForFileName(fileName); if (!profile->isValid()) { continue; } if (profile->type() != QLatin1String("IM")) { debug() << "Ignoring profile for service" << serviceName << ": type != IM. Profile file:" << fileName; continue; } debug() << "Found profile for service" << serviceName << "- profile file:" << fileName; self->profiles.insert(serviceName, profile); } } self->readinessHelper->setIntrospectCompleted(FeatureCore, true); } void ProfileManager::Private::introspectFakeProfiles(ProfileManager::Private *self) { PendingStringList *pendingCmNames = ConnectionManager::listNames(self->bus); self->parent->connect(pendingCmNames, SIGNAL(finished(Tp::PendingOperation *)), SLOT(onCmNamesRetrieved(Tp::PendingOperation *))); } /** * \class ProfileManager * \headerfile TelepathyQt/profile-manager.h * * \brief The ProfileManager class provides helper methods to retrieve Profile * objects. */ /** * Feature representing the core that needs to become ready to make the ProfileManager * object usable. * * Note that this feature must be enabled in order to use all ProfileManager methods. * * When calling isReady(), becomeReady(), this feature is implicitly added * to the requested features. */ const Feature ProfileManager::FeatureCore = Feature(QLatin1String(ProfileManager::staticMetaObject.className()), 0, true); /** * Enabling this feature will make ProfileManager create fake Profile objects to all protocols * supported on the installed connection managers, even if they don't have .profile files installed * making use of them. * * Fake profiles are identified by Profile::isFake() returning \c true. * * The fake profile will contain the following info: * - Profile::type() will return "IM" * - Profile::provider() will return an empty string * - Profile::serviceName() will return cmName-protocolName * - Profile::name() and Profile::protocolName() will return protocolName * - Profile::iconName() will return "im-protocolName" * - Profile::cmName() will return cmName * - Profile::parameters() will return a list matching CM default parameters for protocol with name * protocolName. * - Profile::presences() will return an empty list and * Profile::allowOtherPresences() will return \c true, meaning that CM * presences should be used * - Profile::unsupportedChannelClassSpecs() will return an empty list * * Where cmName and protocolName are the name of the connection manager and the name of the protocol * for which this fake Profile is created, respectively. */ const Feature ProfileManager::FeatureFakeProfiles = Feature(QLatin1String(ProfileManager::staticMetaObject.className()), 1); /** * Create a new ProfileManager object. */ ProfileManagerPtr ProfileManager::create(const QDBusConnection &bus) { return ProfileManagerPtr(new ProfileManager(bus)); } /** * Construct a new ProfileManager object. */ ProfileManager::ProfileManager(const QDBusConnection &bus) : Object(), ReadyObject(this, FeatureCore), mPriv(new Private(this, bus)) { } /** * Class destructor. */ ProfileManager::~ProfileManager() { delete mPriv; } /** * Return a list of all available profiles. * * \return A list of all available profiles. */ QList ProfileManager::profiles() const { return mPriv->profiles.values(); } /** * Return a list of all available profiles for a given connection manager. * * \param cmName Connection manager name. * \return A list of all available profiles for a given connection manager. */ QList ProfileManager::profilesForCM(const QString &cmName) const { QList ret; foreach (const ProfilePtr &profile, mPriv->profiles) { if (profile->cmName() == cmName) { ret << profile; } } return ret; } /** * Return a list of all available profiles for a given \a protocol. * * \param protocolName Protocol name. * \return A list of all available profiles for a given \a protocol. */ QList ProfileManager::profilesForProtocol( const QString &protocolName) const { QList ret; foreach (const ProfilePtr &profile, mPriv->profiles) { if (profile->protocolName() == protocolName) { ret << profile; } } return ret; } /** * Return the profile for a given \a service. * * \param serviceName Service name. * \return The profile for \a service. */ ProfilePtr ProfileManager::profileForService(const QString &serviceName) const { return mPriv->profiles.value(serviceName); } void ProfileManager::onCmNamesRetrieved(Tp::PendingOperation *op) { if (op->isError()) { warning().nospace() << "Getting available CMs failed with " << op->errorName() << ":" << op->errorMessage(); mPriv->readinessHelper->setIntrospectCompleted(FeatureFakeProfiles, false, op->errorName(), op->errorMessage()); return; } PendingStringList *pendingCmNames = qobject_cast(op); QStringList cmNames(pendingCmNames->result()); if (cmNames.isEmpty()) { mPriv->readinessHelper->setIntrospectCompleted(FeatureFakeProfiles, true); return; } QList ops; foreach (const QString &cmName, cmNames) { ConnectionManagerPtr cm = ConnectionManager::create(mPriv->bus, cmName); mPriv->cms.append(cm); ops.append(cm->becomeReady()); } PendingComposite *pc = new PendingComposite(ops, false, ProfileManagerPtr(this)); connect(pc, SIGNAL(finished(Tp::PendingOperation *)), SLOT(onCMsReady(Tp::PendingOperation *))); } void ProfileManager::onCMsReady(Tp::PendingOperation *op) { if (op->isError()) { warning() << "Failed introspecting all CMs, trying to create fake profiles anyway"; } ProfilePtr profile; foreach (const ConnectionManagerPtr &cm, mPriv->cms) { if (!cm->isReady()) { continue; } foreach (const QString &protocolName, cm->supportedProtocols()) { /* check if there is a profile whose service name is protocolName, and if found, * check if the profile is for cm, if not check if there is a profile whose service * name is cm-protocolName, and if not found create one named cm-protocolName. */ profile = profileForService(protocolName); if (profile && profile->cmName() == cm->name()) { continue; } QString serviceName = QString(QLatin1String("%1-%2")).arg(cm->name()).arg(protocolName); profile = profileForService(serviceName); if (profile) { continue; } profile = ProfilePtr(new Profile( serviceName, cm->name(), protocolName, cm->protocol(protocolName))); mPriv->profiles.insert(serviceName, profile); } } mPriv->readinessHelper->setIntrospectCompleted(FeatureFakeProfiles, true); } } // Tp telepathy-qt-0.9.3/TelepathyQt/fake-handler-manager-internal.cpp0000644000175200001440000001205612000056607027133 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include "TelepathyQt/fake-handler-manager-internal.h" #include "TelepathyQt/_gen/fake-handler-manager-internal.moc.hpp" #include namespace Tp { FakeHandler::FakeHandler(const QDBusConnection &bus) : QObject(), mBus(bus) { } FakeHandler::~FakeHandler() { } ObjectPathList FakeHandler::handledChannels() const { ObjectPathList ret; foreach (const Channel *channel, mChannels) { ret << QDBusObjectPath(channel->objectPath()); } return ret; } void FakeHandler::registerChannel(const ChannelPtr &channel) { if (mChannels.contains(channel.data())) { return; } mChannels.insert(channel.data()); connect(channel.data(), SIGNAL(invalidated(Tp::DBusProxy*,QString,QString)), SLOT(onChannelInvalidated(Tp::DBusProxy*))); connect(channel.data(), SIGNAL(destroyed(QObject*)), SLOT(onChannelDestroyed(QObject*))); } void FakeHandler::onChannelInvalidated(DBusProxy *channel) { disconnect(channel, SIGNAL(destroyed(QObject*)), this, SLOT(onChannelDestroyed(QObject*))); onChannelDestroyed(channel); } void FakeHandler::onChannelDestroyed(QObject *obj) { Channel *channel = reinterpret_cast(obj); Q_ASSERT(mChannels.contains(channel)); mChannels.remove(channel); if (mChannels.isEmpty()) { // emit invalidated here instead of relying on QObject::destroyed as FakeHandlerManager // may reuse this fake handler if FakeHandlerManager::registerChannel is called before the // slot from QObject::destroyed is invoked (deleteLater()). emit invalidated(this); deleteLater(); } } FakeHandlerManager *FakeHandlerManager::mInstance = 0; FakeHandlerManager *FakeHandlerManager::instance() { if (!mInstance) { mInstance = new FakeHandlerManager(); } return mInstance; } FakeHandlerManager::FakeHandlerManager() : QObject() { } FakeHandlerManager::~FakeHandlerManager() { mInstance = 0; } ObjectPathList FakeHandlerManager::handledChannels(const QDBusConnection &bus) const { QPair busUniqueId(bus.name(), bus.baseService()); if (mFakeHandlers.contains(busUniqueId)) { FakeHandler *fakeHandler = mFakeHandlers.value(busUniqueId); return fakeHandler->handledChannels(); } return ObjectPathList(); } void FakeHandlerManager::registerClientRegistrar(const ClientRegistrarPtr &cr) { QDBusConnection bus(cr->dbusConnection()); QPair busUniqueId(bus.name(), bus.baseService()); // keep one registrar around per bus so at least the handlers registered by it will be // around until all channels on that bus gets invalidated/destroyed if (!mClientRegistrars.contains(busUniqueId)) { mClientRegistrars.insert(busUniqueId, cr); } } void FakeHandlerManager::registerChannels(const QList &channels) { foreach (const ChannelPtr &channel, channels) { QDBusConnection bus(channel->dbusConnection()); QPair busUniqueId(bus.name(), bus.baseService()); FakeHandler *fakeHandler = mFakeHandlers.value(busUniqueId); if (!fakeHandler) { fakeHandler = new FakeHandler(bus); mFakeHandlers.insert(busUniqueId, fakeHandler); connect(fakeHandler, SIGNAL(invalidated(Tp::FakeHandler*)), SLOT(onFakeHandlerInvalidated(Tp::FakeHandler*))); } fakeHandler->registerChannel(channel); } } void FakeHandlerManager::onFakeHandlerInvalidated(FakeHandler *fakeHandler) { QDBusConnection bus(fakeHandler->dbusConnection()); QPair busUniqueId(bus.name(), bus.baseService()); mFakeHandlers.remove(busUniqueId); // all channels for the bus represented by busUniqueId were already destroyed/invalidated, // we can now free the CR (thus the handlers registered by it) registered for that bus mClientRegistrars.remove(busUniqueId); if (mFakeHandlers.isEmpty()) { // set mInstance to 0 here as we don't want instance() to return a already // deleted instance mInstance = 0; deleteLater(); } } } telepathy-qt-0.9.3/TelepathyQt/requestable-channel-class-spec.cpp0000644000175200001440000004775612000056607027364 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include namespace Tp { struct TP_QT_NO_EXPORT RequestableChannelClassSpec::Private : public QSharedData { Private(const RequestableChannelClass &rcc) : rcc(rcc) {} RequestableChannelClass rcc; }; /** * \class RequestableChannelClassSpec * \ingroup wrappers * \headerfile TelepathyQt/requestable-channel-class-spec.h * * \brief The RequestableChannelClassSpec class represents a Telepathy * requestable channel class. */ RequestableChannelClassSpec::RequestableChannelClassSpec(const RequestableChannelClass &rcc) : mPriv(new Private(rcc)) { } RequestableChannelClassSpec::RequestableChannelClassSpec() { } RequestableChannelClassSpec::RequestableChannelClassSpec(const RequestableChannelClassSpec &other) : mPriv(other.mPriv) { } RequestableChannelClassSpec::~RequestableChannelClassSpec() { } RequestableChannelClassSpec RequestableChannelClassSpec::textChat() { static RequestableChannelClassSpec spec; if (!spec.isValid()) { RequestableChannelClass rcc; rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_TEXT); rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) HandleTypeContact); spec = RequestableChannelClassSpec(rcc); } return spec; } RequestableChannelClassSpec RequestableChannelClassSpec::textChatroom() { static RequestableChannelClassSpec spec; if (!spec.isValid()) { RequestableChannelClass rcc; rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_TEXT); rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) HandleTypeRoom); spec = RequestableChannelClassSpec(rcc); } return spec; } RequestableChannelClassSpec RequestableChannelClassSpec::audioCall() { static RequestableChannelClassSpec spec; if (!spec.isValid()) { RequestableChannelClass rcc; rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_CALL); rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) HandleTypeContact); rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudio"), true); rcc.allowedProperties.append(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudioName")); spec = RequestableChannelClassSpec(rcc); } return spec; } RequestableChannelClassSpec RequestableChannelClassSpec::audioCallWithVideoAllowed() { static RequestableChannelClassSpec spec; if (!spec.isValid()) { RequestableChannelClass rcc; rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_CALL); rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) HandleTypeContact); rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudio"), true); rcc.allowedProperties.append(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudioName")); rcc.allowedProperties.append(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideo")); rcc.allowedProperties.append(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideoName")); spec = RequestableChannelClassSpec(rcc); } return spec; } RequestableChannelClassSpec RequestableChannelClassSpec::videoCall() { static RequestableChannelClassSpec spec; if (!spec.isValid()) { RequestableChannelClass rcc; rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_CALL); rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) HandleTypeContact); rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideo"), true); rcc.allowedProperties.append(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideoName")); spec = RequestableChannelClassSpec(rcc); } return spec; } RequestableChannelClassSpec RequestableChannelClassSpec::videoCallWithAudioAllowed() { static RequestableChannelClassSpec spec; if (!spec.isValid()) { RequestableChannelClass rcc; rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_CALL); rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) HandleTypeContact); rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideo"), true); rcc.allowedProperties.append(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideoName")); rcc.allowedProperties.append(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudio")); rcc.allowedProperties.append(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudioName")); spec = RequestableChannelClassSpec(rcc); } return spec; } RequestableChannelClassSpec RequestableChannelClassSpec::streamedMediaCall() { static RequestableChannelClassSpec spec; if (!spec.isValid()) { RequestableChannelClass rcc; rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA); rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) HandleTypeContact); spec = RequestableChannelClassSpec(rcc); } return spec; } RequestableChannelClassSpec RequestableChannelClassSpec::streamedMediaAudioCall() { static RequestableChannelClassSpec spec; if (!spec.isValid()) { RequestableChannelClass rcc; rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA); rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) HandleTypeContact); rcc.allowedProperties.append( TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialAudio")); spec = RequestableChannelClassSpec(rcc); } return spec; } RequestableChannelClassSpec RequestableChannelClassSpec::streamedMediaVideoCall() { static RequestableChannelClassSpec spec; if (!spec.isValid()) { RequestableChannelClass rcc; rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA); rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) HandleTypeContact); rcc.allowedProperties.append( TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialVideo")); spec = RequestableChannelClassSpec(rcc); } return spec; } RequestableChannelClassSpec RequestableChannelClassSpec::streamedMediaVideoCallWithAudio() { static RequestableChannelClassSpec spec; if (!spec.isValid()) { RequestableChannelClass rcc; rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA); rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) HandleTypeContact); rcc.allowedProperties.append( TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialAudio")); rcc.allowedProperties.append( TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialVideo")); spec = RequestableChannelClassSpec(rcc); } return spec; } RequestableChannelClassSpec RequestableChannelClassSpec::fileTransfer() { static RequestableChannelClassSpec spec; if (!spec.isValid()) { RequestableChannelClass rcc; rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_FILE_TRANSFER); rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) HandleTypeContact); spec = RequestableChannelClassSpec(rcc); } return spec; } RequestableChannelClassSpec RequestableChannelClassSpec::conferenceTextChat() { static RequestableChannelClassSpec spec; if (!spec.isValid()) { RequestableChannelClass rcc; rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_TEXT); rcc.allowedProperties.append( TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialChannels")); spec = RequestableChannelClassSpec(rcc); } return spec; } RequestableChannelClassSpec RequestableChannelClassSpec::conferenceTextChatWithInvitees() { static RequestableChannelClassSpec spec; if (!spec.isValid()) { RequestableChannelClass rcc; rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_TEXT); rcc.allowedProperties.append( TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialChannels")); rcc.allowedProperties.append( TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialInviteeHandles")); spec = RequestableChannelClassSpec(rcc); } return spec; } RequestableChannelClassSpec RequestableChannelClassSpec::conferenceTextChatroom() { static RequestableChannelClassSpec spec; if (!spec.isValid()) { RequestableChannelClass rcc; rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_TEXT); rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) HandleTypeRoom); rcc.allowedProperties.append( TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialChannels")); spec = RequestableChannelClassSpec(rcc); } return spec; } RequestableChannelClassSpec RequestableChannelClassSpec::conferenceTextChatroomWithInvitees() { static RequestableChannelClassSpec spec; if (!spec.isValid()) { RequestableChannelClass rcc; rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_TEXT); rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) HandleTypeRoom); rcc.allowedProperties.append( TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialChannels")); rcc.allowedProperties.append( TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialInviteeHandles")); spec = RequestableChannelClassSpec(rcc); } return spec; } RequestableChannelClassSpec RequestableChannelClassSpec::conferenceStreamedMediaCall() { static RequestableChannelClassSpec spec; if (!spec.isValid()) { RequestableChannelClass rcc; rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA); rcc.allowedProperties.append( TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialChannels")); spec = RequestableChannelClassSpec(rcc); } return spec; } RequestableChannelClassSpec RequestableChannelClassSpec::conferenceStreamedMediaCallWithInvitees() { static RequestableChannelClassSpec spec; if (!spec.isValid()) { RequestableChannelClass rcc; rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA); rcc.allowedProperties.append( TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialChannels")); rcc.allowedProperties.append( TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialInviteeHandles")); spec = RequestableChannelClassSpec(rcc); } return spec; } RequestableChannelClassSpec RequestableChannelClassSpec::contactSearch() { static RequestableChannelClassSpec spec; if (!spec.isValid()) { RequestableChannelClass rcc; rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH); spec = RequestableChannelClassSpec(rcc); } return spec; } RequestableChannelClassSpec RequestableChannelClassSpec::contactSearchWithSpecificServer() { static RequestableChannelClassSpec spec; if (!spec.isValid()) { RequestableChannelClass rcc; rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH); rcc.allowedProperties.append( TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH + QLatin1String(".Server")); spec = RequestableChannelClassSpec(rcc); } return spec; } RequestableChannelClassSpec RequestableChannelClassSpec::contactSearchWithLimit() { static RequestableChannelClassSpec spec; if (!spec.isValid()) { RequestableChannelClass rcc; rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH); rcc.allowedProperties.append( TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH + QLatin1String(".Limit")); spec = RequestableChannelClassSpec(rcc); } return spec; } RequestableChannelClassSpec RequestableChannelClassSpec::contactSearchWithSpecificServerAndLimit() { static RequestableChannelClassSpec spec; if (!spec.isValid()) { RequestableChannelClass rcc; rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH); rcc.allowedProperties.append( TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH + QLatin1String(".Server")); rcc.allowedProperties.append( TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH + QLatin1String(".Limit")); spec = RequestableChannelClassSpec(rcc); } return spec; } RequestableChannelClassSpec RequestableChannelClassSpec::dbusTube(const QString &serviceName) { static RequestableChannelClassSpec spec; if (!spec.isValid()) { RequestableChannelClass rcc; rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_DBUS_TUBE); rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) HandleTypeContact); spec = RequestableChannelClassSpec(rcc); } if (serviceName.isEmpty()) { return spec; } RequestableChannelClass rcc = spec.bareClass(); rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL_TYPE_DBUS_TUBE + QLatin1String(".ServiceName"), serviceName); return RequestableChannelClassSpec(rcc); } RequestableChannelClassSpec RequestableChannelClassSpec::streamTube(const QString &service) { static RequestableChannelClassSpec spec; if (!spec.isValid()) { RequestableChannelClass rcc; rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_STREAM_TUBE); rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) HandleTypeContact); spec = RequestableChannelClassSpec(rcc); } if (service.isEmpty()) { return spec; } RequestableChannelClass rcc = spec.bareClass(); rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL_TYPE_STREAM_TUBE + QLatin1String(".Service"), service); return RequestableChannelClassSpec(rcc); } RequestableChannelClassSpec &RequestableChannelClassSpec::operator=(const RequestableChannelClassSpec &other) { this->mPriv = other.mPriv; return *this; } bool RequestableChannelClassSpec::operator==(const RequestableChannelClassSpec &other) const { if (!isValid() || !other.isValid()) { if (!isValid() && !other.isValid()) { return true; } return false; } return mPriv->rcc == other.mPriv->rcc; } bool RequestableChannelClassSpec::supports(const RequestableChannelClassSpec &other) const { if (!isValid()) { return false; } if (mPriv->rcc.fixedProperties == other.fixedProperties()) { foreach (const QString &prop, other.allowedProperties()) { if (!mPriv->rcc.allowedProperties.contains(prop)) { return false; } } return true; } return false; } QString RequestableChannelClassSpec::channelType() const { if (!isValid()) { return QString(); } return qdbus_cast(mPriv->rcc.fixedProperties.value( TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"))); } bool RequestableChannelClassSpec::hasTargetHandleType() const { if (!isValid()) { return false; } return mPriv->rcc.fixedProperties.contains( TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType")); } HandleType RequestableChannelClassSpec::targetHandleType() const { if (!hasTargetHandleType()) { return (HandleType) -1; } return (HandleType) qdbus_cast(mPriv->rcc.fixedProperties.value( TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"))); } bool RequestableChannelClassSpec::hasFixedProperty(const QString &name) const { if (!isValid()) { return false; } return mPriv->rcc.fixedProperties.contains(name); } QVariant RequestableChannelClassSpec::fixedProperty(const QString &name) const { if (!isValid()) { return QVariant(); } return mPriv->rcc.fixedProperties.value(name); } QVariantMap RequestableChannelClassSpec::fixedProperties() const { if (!isValid()) { return QVariantMap(); } return mPriv->rcc.fixedProperties; } bool RequestableChannelClassSpec::allowsProperty(const QString &name) const { if (!isValid()) { return false; } return mPriv->rcc.allowedProperties.contains(name); } QStringList RequestableChannelClassSpec::allowedProperties() const { if (!isValid()) { return QStringList(); } return mPriv->rcc.allowedProperties; } RequestableChannelClass RequestableChannelClassSpec::bareClass() const { return isValid() ? mPriv->rcc : RequestableChannelClass(); } /** * \class RequestableChannelClassSpecList * \ingroup wrappers * \headerfile TelepathyQt/requestable-channel-class-spec.h * * \brief The RequestableChannelClassSpecList class represents a list of * RequestableChannelClassSpec. */ } // Tp telepathy-qt-0.9.3/TelepathyQt/optional-interface-factory.cpp0000644000175200001440000001201312000056607026611 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2009 Collabora Ltd. * @copyright Copyright (C) 2008-2009 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include #include "TelepathyQt/debug-internal.h" #include #include namespace Tp { #ifndef DOXYGEN_SHOULD_SKIP_THIS struct TP_QT_NO_EXPORT OptionalInterfaceCache::Private { QObject *proxy; QHash interfaces; Private(QObject *proxy); }; OptionalInterfaceCache::Private::Private(QObject *proxy) : proxy(proxy) { } /** * Class constructor. */ OptionalInterfaceCache::OptionalInterfaceCache(QObject *proxy) : mPriv(new Private(proxy)) { } /** * Class destructor. * * Frees all interface instances constructed by this factory. */ OptionalInterfaceCache::~OptionalInterfaceCache() { delete mPriv; } QObject *OptionalInterfaceCache::proxy() const { return mPriv->proxy; } AbstractInterface *OptionalInterfaceCache::getCached(const QString &name) const { if (mPriv->interfaces.contains(name)) { return mPriv->interfaces.value(name); } else { return 0; } } void OptionalInterfaceCache::cache(AbstractInterface *interface) const { QString name = interface->interface(); Q_ASSERT(!mPriv->interfaces.contains(name)); mPriv->interfaces[name] = interface; } #endif /* ifndef DOXYGEN_SHOULD_SKIP_THIS */ /** * \class OptionalInterfaceFactory * \ingroup clientsideproxies * \headerfile TelepathyQt/optional-interface-factory.h * * \brief The OptionalInterfaceFactory class is a helper class for * high-level D-Bus proxy classes willing to offer access to shared * instances of interface proxies for optional interfaces. * * To use this helper in a subclass of DBusProxy (say, ExampleObject), * ExampleObject should inherit from * OptionalInterfaceFactory, and call * OptionalInterfaceFactory(this) in its constructor's initialization list. * * \tparam DBusProxySubclass A subclass of DBusProxy */ /** * \enum OptionalInterfaceFactory::InterfaceSupportedChecking * * Specifies if the interface being supported by the remote object should be * checked by optionalInterface() and the convenience functions for it. * * \sa optionalInterface() */ /** * \var OptionalInterfaceFactory::InterfaceSupportedChecking OptionalInterfaceFactory::CheckInterfaceSupported * * Don't return an interface instance unless it can be guaranteed that the * remote object actually implements the interface. */ /** * \var OptionalInterfaceFactory::InterfaceSupportedChecking OptionalInterfaceFactory::BypassInterfaceCheck * * Return an interface instance even if it can't be verified that the remote * object supports the interface. */ /** * \fn OptionalInterfaceFactory::OptionalInterfaceFactory(DBusProxySubclass *this_) * * Class constructor. * * \param this_ The class to which this OptionalInterfaceFactory is * attached */ /** * \fn OptionalInterfaceFactory::~OptionalInterfaceFactory() * * Class destructor. * * Frees all interface instances constructed by this factory. */ /** * \fn OptionalInterfaceFactory::interfaces() const; * * Return a list of interfaces supported by this object. * * \return List of supported interfaces. */ /** * \fn template inline Interface *OptionalInterfaceFactory::interface() const * * Return a pointer to a valid instance of a interface class, associated * with the same remote object as the given main interface instance. The * given main interface must be of the class the optional interface is * generated for (for eg. ChannelInterfaceGroupInterface this means * ChannelInterface) or a subclass. * * First invocation of this method for a particular optional interface * class will construct the instance; subsequent calls will return a * pointer to the same instance. * * The returned instance is freed when the factory is destroyed; using * it after destroying the factory will likely produce a crash. As the * instance is shared, it should not be freed directly. * * \tparam Interface Class of the interface instance to get. * \return A pointer to an optional interface instance. */ } // Tp telepathy-qt-0.9.3/TelepathyQt/pending-channel.cpp0000644000175200001440000004722212000056607024425 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2010 Collabora Ltd. * @copyright Copyright (C) 2008-2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/pending-channel.moc.hpp" #include "TelepathyQt/debug-internal.h" #include "TelepathyQt/fake-handler-manager-internal.h" #include "TelepathyQt/request-temporary-handler-internal.h" #include #include #include #include #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT PendingChannel::Private { class FakeAccountFactory; ConnectionPtr connection; bool create; bool yours; QString channelType; uint handleType; uint handle; QVariantMap immutableProperties; ChannelPtr channel; ClientRegistrarPtr cr; SharedPtr handler; HandledChannelNotifier *notifier; static uint numHandlers; }; uint PendingChannel::Private::numHandlers = 0; class TP_QT_NO_EXPORT PendingChannel::Private::FakeAccountFactory : public AccountFactory { public: static AccountFactoryPtr create(const AccountPtr &account) { return AccountFactoryPtr(new FakeAccountFactory(account)); } ~FakeAccountFactory() { } AccountPtr account() const { return mAccount; } protected: AccountPtr construct(const QString &busName, const QString &objectPath, const ConnectionFactoryConstPtr &connFactory, const ChannelFactoryConstPtr &chanFactory, const ContactFactoryConstPtr &contactFactory) const { if (mAccount->objectPath() != objectPath) { warning() << "Account received by the fake factory is different from original account"; } return mAccount; } private: FakeAccountFactory(const AccountPtr &account) : AccountFactory(account->dbusConnection(), Features()), mAccount(account) { } AccountPtr mAccount; }; /** * \class PendingChannel * \ingroup clientchannel * \headerfile TelepathyQt/pending-channel.h * * \brief The PendingChannel class represents the parameters of and the reply to * an asynchronous channel request. * * Instances of this class cannot be constructed directly; the only way to get * one is trough Connection or Account. * * See \ref async_model */ /** * Construct a new PendingChannel object that will fail immediately. * * \param connection Connection to use. * \param errorName The error name. * \param errorMessage The error message. */ PendingChannel::PendingChannel(const ConnectionPtr &connection, const QString &errorName, const QString &errorMessage) : PendingOperation(connection), mPriv(new Private) { mPriv->connection = connection; mPriv->yours = false; mPriv->handleType = 0; mPriv->handle = 0; mPriv->notifier = 0; mPriv->create = false; setFinishedWithError(errorName, errorMessage); } /** * Construct a new PendingChannel object. * * \param connection Connection to use. * \param request A dictionary containing the desirable properties. * \param create Whether createChannel or ensureChannel should be called. */ PendingChannel::PendingChannel(const ConnectionPtr &connection, const QVariantMap &request, bool create, int timeout) : PendingOperation(connection), mPriv(new Private) { mPriv->connection = connection; mPriv->yours = create; mPriv->channelType = request.value(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType")).toString(); mPriv->handleType = request.value(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType")).toUInt(); mPriv->handle = request.value(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandle")).toUInt(); mPriv->notifier = 0; mPriv->create = create; Client::ConnectionInterfaceRequestsInterface *requestsInterface = connection->interface(); if (create) { QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( requestsInterface->CreateChannel(request, timeout), this); connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(onConnectionCreateChannelFinished(QDBusPendingCallWatcher*))); } else { QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( requestsInterface->EnsureChannel(request, timeout), this); connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(onConnectionEnsureChannelFinished(QDBusPendingCallWatcher*))); } } PendingChannel::PendingChannel(const AccountPtr &account, const QVariantMap &request, const QDateTime &userActionTime, bool create) : PendingOperation(account), mPriv(new Private) { mPriv->yours = true; mPriv->channelType = request.value(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType")).toString(); mPriv->handleType = request.value(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType")).toUInt(); mPriv->handle = request.value(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandle")).toUInt(); mPriv->cr = ClientRegistrar::create( Private::FakeAccountFactory::create(account), account->connectionFactory(), account->channelFactory(), account->contactFactory()); mPriv->handler = RequestTemporaryHandler::create(account); mPriv->notifier = 0; mPriv->create = create; QString handlerName = QString(QLatin1String("TpQtRaH_%1_%2")) .arg(account->dbusConnection().baseService() .replace(QLatin1String(":"), QLatin1String("_")) .replace(QLatin1String("."), QLatin1String("_"))) .arg(Private::numHandlers++); if (!mPriv->cr->registerClient(mPriv->handler, handlerName, false)) { warning() << "Unable to register handler" << handlerName; setFinishedWithError(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Unable to register handler")); return; } connect(mPriv->handler.data(), SIGNAL(error(QString,QString)), SLOT(onHandlerError(QString,QString))); connect(mPriv->handler.data(), SIGNAL(channelReceived(Tp::ChannelPtr,QDateTime,Tp::ChannelRequestHints)), SLOT(onHandlerChannelReceived(Tp::ChannelPtr))); handlerName = QString(QLatin1String("org.freedesktop.Telepathy.Client.%1")).arg(handlerName); debug() << "Requesting channel through account using handler" << handlerName; PendingChannelRequest *pcr; if (create) { pcr = account->createChannel(request, userActionTime, handlerName, ChannelRequestHints()); } else { pcr = account->ensureChannel(request, userActionTime, handlerName, ChannelRequestHints()); } connect(pcr, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onAccountCreateChannelFinished(Tp::PendingOperation*))); } /** * Construct a new PendingChannel object that will fail immediately. * * \param errorName The name of a D-Bus error. * \param errorMessage The error message. */ PendingChannel::PendingChannel(const QString &errorName, const QString &errorMessage) : PendingOperation(ConnectionPtr()), mPriv(new Private) { setFinishedWithError(errorName, errorMessage); } /** * Class destructor. */ PendingChannel::~PendingChannel() { delete mPriv; } /** * Return the connection through which the channel request was made. * * Note that if this channel request was created through Account, a null ConnectionPtr will be * returned. * * \return A pointer to the Connection object. */ ConnectionPtr PendingChannel::connection() const { return mPriv->connection; } /** * Return whether this channel belongs to this process. * * If \c false, the caller must assume that some other process is * handling this channel; if \c true, the caller should handle it * themselves or delegate it to another client. * * \return \c true if it belongs, \c false otherwise. */ bool PendingChannel::yours() const { if (!isFinished()) { warning() << "PendingChannel::yours called before finished, returning undefined value"; } else if (!isValid()) { warning() << "PendingChannel::yours called when not valid, returning undefined value"; } return mPriv->yours; } /** * Return the channel type specified in the channel request. * * \return The D-Bus interface name for the type of the channel. */ const QString &PendingChannel::channelType() const { return mPriv->channelType; } /** * If the channel request has finished, return the handle type of the resulting * channel. Otherwise, return the handle type that was requested. * * (One example of a request producing a different target handle type is that * on protocols like MSN, one-to-one conversations don't really exist, and if * you request a text channel with handle type HandleTypeContact, what you * will actually get is a text channel with handle type HandleTypeNone, with * the requested contact as a member.) * * \return The target handle type as #HandleType. * \sa targetHandle() */ uint PendingChannel::targetHandleType() const { return mPriv->handleType; } /** * If the channel request has finished, return the target handle of the * resulting channel. Otherwise, return the target handle that was requested * (which might be different in some situations - see targetHandleType()). * * \return An integer representing the target handle, which is of the type * targetHandleType() indicates. * \sa targetHandleType() */ uint PendingChannel::targetHandle() const { return mPriv->handle; } /** * If this channel request has finished, return the immutable properties of * the resulting channel. Otherwise, return an empty map. * * The keys and values in this map are defined by the \telepathy_spec, * or by third-party extensions to that specification. * These are the properties that cannot change over the lifetime of the * channel; they're announced in the result of the request, for efficiency. * This map should be passed to the constructor of Channel or its subclasses * (such as TextChannel). * * These properties can also be used to process channels in a way that does * not require the creation of a Channel object - for instance, a * ChannelDispatcher implementation should be able to classify and process * channels based on their immutable properties, without needing to create * Channel objects. * * \return The immutable properties as QVariantMap. */ QVariantMap PendingChannel::immutableProperties() const { QVariantMap props = mPriv->immutableProperties; // This is a reasonable guess - if it's Yours it's guaranteedly Requested by us, and if it's not // it could be either Requested by somebody else but also an incoming channel just as well. if (!props.contains(TP_QT_IFACE_CHANNEL + QLatin1String(".Requested"))) { debug() << "CM didn't provide Requested in channel immutable props, guessing" << mPriv->yours; props[TP_QT_IFACE_CHANNEL + QLatin1String(".Requested")] = mPriv->yours; } // Also, the spec says that if the channel was Requested by the local user, InitiatorHandle must // be the Connection's self handle if (!props.contains(TP_QT_IFACE_CHANNEL + QLatin1String(".InitiatorHandle"))) { if (qdbus_cast(props.value(TP_QT_IFACE_CHANNEL + QLatin1String(".Requested")))) { if (connection() && connection()->isReady(Connection::FeatureCore)) { debug() << "CM didn't provide InitiatorHandle in channel immutable props, but we " "know it's the conn's self handle (and have it)"; props[TP_QT_IFACE_CHANNEL + QLatin1String(".InitiatorHandle")] = connection()->selfHandle(); } } } return props; } /** * Return the channel resulting from the channel request. * * \return A pointer to the Channel object. */ ChannelPtr PendingChannel::channel() const { if (!isFinished()) { warning() << "PendingChannel::channel called before finished, returning 0"; return ChannelPtr(); } else if (!isValid()) { warning() << "PendingChannel::channel called when not valid, returning 0"; return ChannelPtr(); } return mPriv->channel; } /** * If this channel request has finished and was created through Account, * return a HandledChannelNotifier object that will keep track of channel() being re-requested. * * \return A HandledChannelNotifier instance, or 0 if an error occurred. */ HandledChannelNotifier *PendingChannel::handledChannelNotifier() const { if (!isFinished()) { warning() << "PendingChannel::handledChannelNotifier called before finished, returning 0"; return 0; } else if (!isValid()) { warning() << "PendingChannel::handledChannelNotifier called when not valid, returning 0"; return 0; } if (mPriv->cr && !mPriv->notifier) { mPriv->notifier = new HandledChannelNotifier(mPriv->cr, mPriv->handler); } return mPriv->notifier; } void PendingChannel::onConnectionCreateChannelFinished(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (!reply.isError()) { QString objectPath = reply.argumentAt<0>().path(); QVariantMap map = reply.argumentAt<1>(); debug() << "Got reply to Connection.CreateChannel - object path:" << objectPath; PendingReady *channelReady = connection()->channelFactory()->proxy(connection(), objectPath, map); mPriv->channel = ChannelPtr::qObjectCast(channelReady->proxy()); mPriv->immutableProperties = map; mPriv->channelType = map.value(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType")).toString(); mPriv->handleType = map.value(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType")).toUInt(); mPriv->handle = map.value(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandle")).toUInt(); connect(channelReady, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onChannelReady(Tp::PendingOperation*))); } else { debug().nospace() << "CreateChannel failed:" << reply.error().name() << ": " << reply.error().message(); setFinishedWithError(reply.error()); } watcher->deleteLater(); } void PendingChannel::onConnectionEnsureChannelFinished(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (!reply.isError()) { mPriv->yours = reply.argumentAt<0>(); QString objectPath = reply.argumentAt<1>().path(); QVariantMap map = reply.argumentAt<2>(); debug() << "Got reply to Connection.EnsureChannel - object path:" << objectPath; PendingReady *channelReady = connection()->channelFactory()->proxy(connection(), objectPath, map); mPriv->channel = ChannelPtr::qObjectCast(channelReady->proxy()); mPriv->immutableProperties = map; mPriv->channelType = map.value(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType")).toString(); mPriv->handleType = map.value(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType")).toUInt(); mPriv->handle = map.value(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandle")).toUInt(); connect(channelReady, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onChannelReady(Tp::PendingOperation*))); } else { debug().nospace() << "EnsureChannel failed:" << reply.error().name() << ": " << reply.error().message(); setFinishedWithError(reply.error()); } watcher->deleteLater(); } void PendingChannel::onChannelReady(PendingOperation *op) { if (!op->isError()) { setFinished(); } else { debug() << "Making the channel ready for" << this << "failed with" << op->errorName() << ":" << op->errorMessage(); setFinishedWithError(op->errorName(), op->errorMessage()); } } void PendingChannel::onHandlerError(const QString &errorName, const QString &errorMessage) { if (isFinished()) { return; } warning() << "Creating/ensuring channel failed with" << errorName << ":" << errorMessage; setFinishedWithError(errorName, errorMessage); } void PendingChannel::onHandlerChannelReceived(const ChannelPtr &channel) { if (isFinished()) { warning() << "Handler received the channel but this operation already finished due " "to failure in the channel request"; return; } mPriv->handleType = channel->targetHandleType(); mPriv->handle = channel->targetHandle(); mPriv->immutableProperties = channel->immutableProperties(); mPriv->channel = channel; // register the CR in FakeHandlerManager so that at least one handler per bus stays alive // until all channels requested using R&H gets invalidated/destroyed. // This is important in case Mission Control happens to restart while // the channel is still in use, since it will close each channel it // doesn't find a handler for it. FakeHandlerManager::instance()->registerClientRegistrar(mPriv->cr); setFinished(); } void PendingChannel::onAccountCreateChannelFinished(PendingOperation *op) { if (isFinished()) { if (isError()) { warning() << "Creating/ensuring channel finished with a failure after the internal " "handler already got a channel, ignoring"; } return; } if (op->isError()) { warning() << "Creating/ensuring channel failed with" << op->errorName() << ":" << op->errorMessage(); setFinishedWithError(op->errorName(), op->errorMessage()); return; } if (!mPriv->handler->isDBusHandlerInvoked()) { // Our handler hasn't be called but the channel request is complete. // That means another handler handled the channels so we don't own it. if (mPriv->create) { warning() << "Creating/ensuring channel failed with" << TP_QT_ERROR_SERVICE_CONFUSED << ":" << QLatin1String("CD.CreateChannel/WithHints returned successfully and " "the handler didn't receive the channel yet"); setFinishedWithError(TP_QT_ERROR_SERVICE_CONFUSED, QLatin1String("CD.CreateChannel/WithHints returned successfully and " "the handler didn't receive the channel yet")); } else { warning() << "Creating/ensuring channel failed with" << TP_QT_ERROR_NOT_YOURS << ":" << QLatin1String("Another handler is handling this channel"); setFinishedWithError(TP_QT_ERROR_NOT_YOURS, QLatin1String("Another handler is handling this channel")); } return; } } } // Tp telepathy-qt-0.9.3/TelepathyQt/AvatarSpec0000644000175200001440000000035012000056607022632 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_AvatarSpec_HEADER_GUARD_ #define _TelepathyQt_AvatarSpec_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/CallContentInterfaceDTMFInterface0000644000175200001440000000043412000056607027127 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_CallContentInterfaceDTMFInterface_HEADER_GUARD_ #define _TelepathyQt_CallContentInterfaceDTMFInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/AccountManager0000644000175200001440000000037112000056607023473 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_AccountManager_HEADER_GUARD_ #define _TelepathyQt_AccountManager_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/contact-manager.cpp0000644000175200001440000016460312000056607024441 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2010 Collabora Ltd. * @copyright Copyright (C) 2008-2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/contact-manager-internal.h" #include "TelepathyQt/_gen/contact-manager.moc.hpp" #include "TelepathyQt/debug-internal.h" #include "TelepathyQt/future-internal.h" #include #include #include #include #include #include #include #include #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT ContactManager::Private { Private(ContactManager *parent, Connection *connection); ~Private(); // avatar specific methods bool buildAvatarFileName(QString token, bool createDir, QString &avatarFileName, QString &mimeTypeFileName); Features realFeatures(const Features &features); QSet interfacesForFeatures(const Features &features); ContactManager *parent; WeakPtr connection; ContactManager::Roster *roster; QHash > contacts; QHash tracking; Features supportedFeatures; // avatar QSet requestAvatarsQueue; bool requestAvatarsIdle; // contact info PendingRefreshContactInfo *refreshInfoOp; }; ContactManager::Private::Private(ContactManager *parent, Connection *connection) : parent(parent), connection(connection), roster(new ContactManager::Roster(parent)), requestAvatarsIdle(false), refreshInfoOp(0) { } ContactManager::Private::~Private() { delete refreshInfoOp; delete roster; } bool ContactManager::Private::buildAvatarFileName(QString token, bool createDir, QString &avatarFileName, QString &mimeTypeFileName) { QString cacheDir = QString(QLatin1String(qgetenv("XDG_CACHE_HOME"))); if (cacheDir.isEmpty()) { cacheDir = QString(QLatin1String("%1/.cache")).arg(QLatin1String(qgetenv("HOME"))); } ConnectionPtr conn(parent->connection()); QString path = QString(QLatin1String("%1/telepathy/avatars/%2/%3")). arg(cacheDir).arg(conn->cmName()).arg(conn->protocolName()); if (createDir && !QDir().mkpath(path)) { return false; } avatarFileName = QString(QLatin1String("%1/%2")).arg(path).arg(escapeAsIdentifier(token)); mimeTypeFileName = QString(QLatin1String("%1.mime")).arg(avatarFileName); return true; } Features ContactManager::Private::realFeatures(const Features &features) { Features ret(features); ret.unite(parent->connection()->contactFactory()->features()); // FeatureAvatarData depends on FeatureAvatarToken if (ret.contains(Contact::FeatureAvatarData) && !ret.contains(Contact::FeatureAvatarToken)) { ret.insert(Contact::FeatureAvatarToken); } return ret; } QSet ContactManager::Private::interfacesForFeatures(const Features &features) { Features supported = parent->supportedFeatures(); QSet ret; foreach (const Feature &feature, features) { parent->ensureTracking(feature); if (supported.contains(feature)) { // Only query interfaces which are reported as supported to not get an error ret.insert(parent->featureToInterface(feature)); } } return ret; } ContactManager::PendingRefreshContactInfo::PendingRefreshContactInfo(const ConnectionPtr &conn) : PendingOperation(conn), mConn(conn) { } ContactManager::PendingRefreshContactInfo::~PendingRefreshContactInfo() { } void ContactManager::PendingRefreshContactInfo::addContact(Contact *contact) { mToRequest.insert(contact->handle()[0]); } void ContactManager::PendingRefreshContactInfo::refreshInfo() { Q_ASSERT(!mToRequest.isEmpty()); if (!mConn->isValid()) { setFinishedWithError(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection is invalid")); return; } if (!mConn->hasInterface(TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_INFO)) { setFinishedWithError(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Connection does not support ContactInfo interface")); return; } debug() << "Calling ContactInfo.RefreshContactInfo for" << mToRequest.size() << "handles"; Client::ConnectionInterfaceContactInfoInterface *contactInfoInterface = mConn->interface(); Q_ASSERT(contactInfoInterface); PendingVoid *nested = new PendingVoid( contactInfoInterface->RefreshContactInfo(mToRequest.toList()), mConn); connect(nested, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onRefreshInfoFinished(Tp::PendingOperation*))); } void ContactManager::PendingRefreshContactInfo::onRefreshInfoFinished(PendingOperation *op) { if (op->isError()) { warning() << "ContactInfo.RefreshContactInfo failed with" << op->errorName() << "-" << op->errorMessage(); setFinishedWithError(op->errorName(), op->errorMessage()); } else { debug() << "Got reply to ContactInfo.RefreshContactInfo"; setFinished(); } } /** * \class ContactManager * \ingroup clientconn * \headerfile TelepathyQt/contact-manager.h * * \brief The ContactManager class is responsible for managing contacts. * * See \ref async_model, \ref shared_ptr */ /** * Construct a new ContactManager object. * * \param connection The connection owning this ContactManager. */ ContactManager::ContactManager(Connection *connection) : Object(), mPriv(new Private(this, connection)) { } /** * Class destructor. */ ContactManager::~ContactManager() { delete mPriv; } /** * Return the connection owning this ContactManager. * * \return A pointer to the Connection object. */ ConnectionPtr ContactManager::connection() const { return ConnectionPtr(mPriv->connection); } /** * Return the features that are expected to work on contacts on this ContactManager connection. * * This method requires Connection::FeatureCore to be ready. * * \return The supported features as a set of Feature objects. */ Features ContactManager::supportedFeatures() const { if (mPriv->supportedFeatures.isEmpty() && connection()->interfaces().contains(TP_QT_IFACE_CONNECTION_INTERFACE_CONTACTS)) { Features allFeatures = Features() << Contact::FeatureAlias << Contact::FeatureAvatarToken << Contact::FeatureAvatarData << Contact::FeatureSimplePresence << Contact::FeatureCapabilities << Contact::FeatureLocation << Contact::FeatureInfo << Contact::FeatureRosterGroups << Contact::FeatureAddresses << Contact::FeatureClientTypes; QStringList interfaces = connection()->lowlevel()->contactAttributeInterfaces(); foreach (const Feature &feature, allFeatures) { if (interfaces.contains(featureToInterface(feature))) { mPriv->supportedFeatures.insert(feature); } } debug() << mPriv->supportedFeatures.size() << "contact features supported using" << this; } return mPriv->supportedFeatures; } /** * Return the progress made in retrieving the contact list. * * Change notification is via the stateChanged() signal. * * This method requires Connection::FeatureRoster to be ready. * * \return The contact list state as #ContactListState. * \sa stateChanged() */ ContactListState ContactManager::state() const { return mPriv->roster->state(); } /** * Return a list of relevant contacts (a reasonable guess as to what should * be displayed as "the contact list"). * * This may include any or all of: contacts whose presence the user receives, * contacts who are allowed to see the user's presence, contacts stored in * some persistent contact list on the server, contacts who the user * has blocked from communicating with them, or contacts who are relevant * in some other way. * * User interfaces displaying a contact list will probably want to filter this * list and display some suitable subset of it. * * On protocols where there is no concept of presence or a centrally-stored * contact list (like IRC), this method may return an empty list. * * Change notification is via the allKnownContactsChanged() signal. * * This method requires Connection::FeatureRoster to be ready. * * \return A set of pointers to the Contact objects. * \sa allKnownContactsChanged() */ Contacts ContactManager::allKnownContacts() const { if (!connection()->isReady(Connection::FeatureRoster)) { warning() << "Calling allKnownContacts() before FeatureRoster is ready"; return Contacts(); } return mPriv->roster->allKnownContacts(); } /** * Return a list of user-defined contact list groups' names. * * Change notification is via the groupAdded(), groupRemoved() and groupRenamed() signals. * * This method requires Connection::FeatureRosterGroups to be ready. * * \return The list of user-defined contact list groups names. * \sa groupMembersChanged(), groupAdded(), groupRemoved(), groupRenamed() */ QStringList ContactManager::allKnownGroups() const { if (!connection()->isReady(Connection::FeatureRosterGroups)) { return QStringList(); } return mPriv->roster->allKnownGroups(); } /** * Attempt to add an user-defined contact list group named \a group. * * On some protocols (e.g. XMPP) empty groups are not represented on the server, * so disconnecting from the server and reconnecting might cause empty groups to * vanish. * * The returned pending operation will finish successfully if the group already * exists. * * Change notification is via the groupAdded() signal. * * This method requires Connection::FeatureRosterGroups to be ready. * * \param group The group name. * \return A PendingOperation which will emit PendingOperation::finished * when an attempt has been made to add an user-defined contact list group. * \sa allKnownGroups(), groupAdded(), addContactsToGroup() */ PendingOperation *ContactManager::addGroup(const QString &group) { if (!connection()->isValid()) { return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection is invalid"), connection()); } else if (!connection()->isReady(Connection::FeatureRosterGroups)) { return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection::FeatureRosterGroups is not ready"), connection()); } return mPriv->roster->addGroup(group); } /** * Attempt to remove an user-defined contact list group named \a group. * * Change notification is via the groupRemoved() signal. * * This method requires Connection::FeatureRosterGroups to be ready. * * \param group The group name. * \return A PendingOperation which will emit PendingOperation::finished() * when an attempt has been made to remove an user-defined contact list group. * \sa allKnownGroups(), groupRemoved(), removeContactsFromGroup() */ PendingOperation *ContactManager::removeGroup(const QString &group) { if (!connection()->isValid()) { return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection is invalid"), connection()); } else if (!connection()->isReady(Connection::FeatureRosterGroups)) { return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection::FeatureRosterGroups is not ready"), connection()); } return mPriv->roster->removeGroup(group); } /** * Return the contacts in the given user-defined contact list group * named \a group. * * Change notification is via the groupMembersChanged() signal. * * This method requires Connection::FeatureRosterGroups to be ready. * * \param group The group name. * \return A set of pointers to the Contact objects, or an empty set if the group does not exist. * \sa allKnownGroups(), groupMembersChanged() */ Contacts ContactManager::groupContacts(const QString &group) const { if (!connection()->isReady(Connection::FeatureRosterGroups)) { return Contacts(); } return mPriv->roster->groupContacts(group); } /** * Attempt to add the given \a contacts to the user-defined contact list * group named \a group. * * Change notification is via the groupMembersChanged() signal. * * This method requires Connection::FeatureRosterGroups to be ready. * * \param group The group name. * \param contacts Contacts to add. * \return A PendingOperation which will emit PendingOperation::finished() * when an attempt has been made to add the contacts to the user-defined * contact list group. * \sa groupMembersChanged(), groupContacts() */ PendingOperation *ContactManager::addContactsToGroup(const QString &group, const QList &contacts) { if (!connection()->isValid()) { return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection is invalid"), connection()); } else if (!connection()->isReady(Connection::FeatureRosterGroups)) { return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection::FeatureRosterGroups is not ready"), connection()); } return mPriv->roster->addContactsToGroup(group, contacts); } /** * Attempt to remove the given \a contacts from the user-defined contact list * group named \a group. * * Change notification is via the groupMembersChanged() signal. * * This method requires Connection::FeatureRosterGroups to be ready. * * \param group The group name. * \param contacts Contacts to remove. * \return A PendingOperation which will PendingOperation::finished * when an attempt has been made to remove the contacts from the user-defined * contact list group. * \sa groupMembersChanged(), groupContacts() */ PendingOperation *ContactManager::removeContactsFromGroup(const QString &group, const QList &contacts) { if (!connection()->isValid()) { return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection is invalid"), connection()); } else if (!connection()->isReady(Connection::FeatureRosterGroups)) { return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection::FeatureRosterGroups is not ready"), connection()); } return mPriv->roster->removeContactsFromGroup(group, contacts); } /** * Return whether subscribing to additional contacts' presence is supported. * * In some protocols, the list of contacts whose presence can be seen is * fixed, so we can't subscribe to the presence of additional contacts. * * Notably, in link-local XMPP, you can see the presence of everyone on the * local network, and trying to add more subscriptions would be meaningless. * * This method requires Connection::FeatureRoster to be ready. * * \return \c true if Contact::requestPresenceSubscription() and * requestPresenceSubscription() are likely to succeed, \c false otherwise. * \sa requestPresenceSubscription(), subscriptionRequestHasMessage() */ bool ContactManager::canRequestPresenceSubscription() const { if (!connection()->isReady(Connection::FeatureRoster)) { return false; } return mPriv->roster->canRequestPresenceSubscription(); } /** * Return whether a message can be sent when subscribing to contacts' * presence. * * If no message will actually be sent, user interfaces should avoid prompting * the user for a message, and use an empty string for the message argument. * * This method requires Connection::FeatureRoster to be ready. * * \return \c true if the message argument to Contact::requestPresenceSubscription() and * requestPresenceSubscription() is actually used, \c false otherwise. * \sa canRemovePresenceSubscription(), requestPresenceSubscription() */ bool ContactManager::subscriptionRequestHasMessage() const { if (!connection()->isReady(Connection::FeatureRoster)) { return false; } return mPriv->roster->subscriptionRequestHasMessage(); } /** * Attempt to subscribe to the presence of the given contacts. * * This operation is sometimes called "adding contacts to the buddy * list" or "requesting authorization". * * On most protocols, the contacts will need to give permission * before the user will be able to receive their presence: if so, they will * be in presence state Contact::PresenceStateAsk until they authorize * or deny the request. * * The returned PendingOperation will return successfully when a request to * subscribe to the contacts' presence has been submitted, or fail if this * cannot happen. In particular, it does not wait for the contacts to give * permission for the presence subscription. * * This method requires Connection::FeatureRoster to be ready. * * \param contacts Contacts whose presence is desired * \param message A message from the user which is either transmitted to the * contacts, or ignored, depending on the protocol * \return A PendingOperation which will PendingOperation::finished() * when an attempt has been made to subscribe to the contacts' presence. * \sa canRequestPresenceSubscription(), subscriptionRequestHasMessage() */ PendingOperation *ContactManager::requestPresenceSubscription( const QList &contacts, const QString &message) { if (!connection()->isValid()) { return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection is invalid"), connection()); } else if (!connection()->isReady(Connection::FeatureRoster)) { return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection::FeatureRoster is not ready"), connection()); } return mPriv->roster->requestPresenceSubscription(contacts, message); } /** * Return whether the user can stop receiving the presence of a contact * whose presence they have subscribed to. * * This method requires Connection::FeatureRoster to be ready. * * \return \c true if Contact::removePresenceSubscription() and * removePresenceSubscription() are likely to succeed * for contacts with subscription state Contact::PresenceStateYes, * \c false otherwise. * \sa removePresenceSubscription(), subscriptionRemovalHasMessage() */ bool ContactManager::canRemovePresenceSubscription() const { if (!connection()->isReady(Connection::FeatureRoster)) { return false; } return mPriv->roster->canRemovePresenceSubscription(); } /** * Return whether a message can be sent when removing an existing subscription * to the presence of a contact. * * If no message will actually be sent, user interfaces should avoid prompting * the user for a message, and use an empty string for the message argument. * * This method requires Connection::FeatureRoster to be ready. * * \return \c true if the message argument to Contact::removePresenceSubscription() and * removePresenceSubscription() is actually used, * for contacts with subscription state Contact::PresenceStateYes, * \c false otherwise. * \sa canRemovePresencePublication(), removePresenceSubscription() */ bool ContactManager::subscriptionRemovalHasMessage() const { if (!connection()->isReady(Connection::FeatureRoster)) { return false; } return mPriv->roster->subscriptionRemovalHasMessage(); } /** * Return whether the user can cancel a request to subscribe to a contact's * presence before that contact has responded. * * This method requires Connection::FeatureRoster to be ready. * * \return \c true if Contact::removePresenceSubscription() and * removePresenceSubscription() are likely to succeed * for contacts with subscription state Contact::PresenceStateAsk, * \c false otherwise. * \sa removePresenceSubscription(), subscriptionRescindingHasMessage() */ bool ContactManager::canRescindPresenceSubscriptionRequest() const { if (!connection()->isReady(Connection::FeatureRoster)) { return false; } return mPriv->roster->canRescindPresenceSubscriptionRequest(); } /** * Return whether a message can be sent when cancelling a request to * subscribe to the presence of a contact. * * If no message will actually be sent, user interfaces should avoid prompting * the user for a message, and use an empty string for the message argument. * * This method requires Connection::FeatureRoster to be ready. * * \return \c true if the message argument to Contact::removePresenceSubscription() and * removePresenceSubscription() is actually used, * for contacts with subscription state Contact::PresenceStateAsk, * \c false otherwise. * \sa canRescindPresenceSubscriptionRequest(), removePresenceSubscription() */ bool ContactManager::subscriptionRescindingHasMessage() const { if (!connection()->isReady(Connection::FeatureRoster)) { return false; } return mPriv->roster->subscriptionRescindingHasMessage(); } /** * Attempt to stop receiving the presence of the given contacts, or cancel * a request to subscribe to their presence that was previously sent. * * This method requires Connection::FeatureRoster to be ready. * * \param contacts Contacts whose presence is no longer required * \message A message from the user which is either transmitted to the * contacts, or ignored, depending on the protocol * \return A PendingOperation which will PendingOperation::finished() * when an attempt has been made to remove any subscription to the contacts' presence. * \sa canRemovePresenceSubscription(), canRescindPresenceSubscriptionRequest(), * subscriptionRemovalHasMessage(), subscriptionRescindingHasMessage() */ PendingOperation *ContactManager::removePresenceSubscription( const QList &contacts, const QString &message) { if (!connection()->isValid()) { return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection is invalid"), connection()); } else if (!connection()->isReady(Connection::FeatureRoster)) { return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection::FeatureRoster is not ready"), connection()); } return mPriv->roster->removePresenceSubscription(contacts, message); } /** * Return true if the publication of the user's presence to contacts can be * authorized. * * This is always true, unless the protocol has no concept of authorizing * publication (in which case contacts' publication status can never be * Contact::PresenceStateAsk). * * This method requires Connection::FeatureRoster to be ready. * * \return \c true if Contact::authorizePresencePublication() and * authorizePresencePublication() are likely to succeed * for contacts with subscription state Contact::PresenceStateAsk, * \c false otherwise. * \sa publicationAuthorizationHasMessage(), authorizePresencePublication() */ bool ContactManager::canAuthorizePresencePublication() const { if (!connection()->isReady(Connection::FeatureRoster)) { return false; } return mPriv->roster->canAuthorizePresencePublication(); } /** * Return whether a message can be sent when authorizing a request from a * contact that the user's presence is published to them. * * If no message will actually be sent, user interfaces should avoid prompting * the user for a message, and use an empty string for the message argument. * * This method requires Connection::FeatureRoster to be ready. * * \return \c true if the message argument to Contact::authorizePresencePublication() and * authorizePresencePublication() is actually used, * for contacts with subscription state Contact::PresenceStateAsk, * \c false otherwise. * \sa canAuthorizePresencePublication(), authorizePresencePublication() */ bool ContactManager::publicationAuthorizationHasMessage() const { if (!connection()->isReady(Connection::FeatureRoster)) { return false; } return mPriv->roster->publicationAuthorizationHasMessage(); } /** * If the given contacts have asked the user to publish presence to them, * grant permission for this publication to take place. * * This method requires Connection::FeatureRoster to be ready. * * \param contacts Contacts who should be allowed to receive the user's * presence * \message A message from the user which is either transmitted to the * contacts, or ignored, depending on the protocol * \return A PendingOperation which will emit PendingOperation::fininshed * when an attempt has been made to authorize publication of the user's presence * to the contacts. * \sa canAuthorizePresencePublication(), publicationAuthorizationHasMessage() */ PendingOperation *ContactManager::authorizePresencePublication( const QList &contacts, const QString &message) { if (!connection()->isValid()) { return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection is invalid"), connection()); } else if (!connection()->isReady(Connection::FeatureRoster)) { return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection::FeatureRoster is not ready"), connection()); } return mPriv->roster->authorizePresencePublication(contacts, message); } /** * Return whether a message can be sent when rejecting a request from a * contact that the user's presence is published to them. * * If no message will actually be sent, user interfaces should avoid prompting * the user for a message, and use an empty string for the message argument. * * This method requires Connection::FeatureRoster to be ready. * * \return \c true if the message argument to Contact::removePresencePublication() and * removePresencePublication() is actually used, * for contacts with subscription state Contact::PresenceStateAsk, * \c false otherwise. * \sa canRemovePresencePublication(), removePresencePublication() */ bool ContactManager::publicationRejectionHasMessage() const { if (!connection()->isReady(Connection::FeatureRoster)) { return false; } return mPriv->roster->publicationRejectionHasMessage(); } /** * Return true if the publication of the user's presence to contacts can be * removed, even after permission has been given. * * (Rejecting requests for presence to be published is always allowed.) * * This method requires Connection::FeatureRoster to be ready. * * \return \c true if Contact::removePresencePublication() and * removePresencePublication() are likely to succeed * for contacts with subscription state Contact::PresenceStateYes, * \c false otherwise. * \sa publicationRemovalHasMessage(), removePresencePublication() */ bool ContactManager::canRemovePresencePublication() const { if (!connection()->isReady(Connection::FeatureRoster)) { return false; } return mPriv->roster->canRemovePresencePublication(); } /** * Return whether a message can be sent when revoking earlier permission * that the user's presence is published to a contact. * * If no message will actually be sent, user interfaces should avoid prompting * the user for a message, and use an empty string for the message argument. * * This method requires Connection::FeatureRoster to be ready. * * \return \c true if the message argument to Contact::removePresencePublication and * removePresencePublication() is actually used, * for contacts with subscription state Contact::PresenceStateYes, * \c false otherwise. * \sa canRemovePresencePublication(), removePresencePublication() */ bool ContactManager::publicationRemovalHasMessage() const { if (!connection()->isReady(Connection::FeatureRoster)) { return false; } return mPriv->roster->publicationRemovalHasMessage(); } /** * If the given contacts have asked the user to publish presence to them, * deny this request (this should always succeed, unless a network error * occurs). * * If the given contacts already have permission to receive * the user's presence, attempt to revoke that permission (this might not * be supported by the protocol - canRemovePresencePublication * indicates whether it is likely to succeed). * * This method requires Connection::FeatureRoster to be ready. * * \param contacts Contacts who should no longer be allowed to receive the * user's presence * \message A message from the user which is either transmitted to the * contacts, or ignored, depending on the protocol * \return A PendingOperation which will emit PendingOperation::finished() * when an attempt has been made to remove any publication of the user's presence to the * contacts. * \sa canRemovePresencePublication(), publicationRejectionHasMessage(), * publicationRemovalHasMessage() */ PendingOperation *ContactManager::removePresencePublication( const QList &contacts, const QString &message) { if (!connection()->isValid()) { return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection is invalid"), connection()); } else if (!connection()->isReady(Connection::FeatureRoster)) { return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection::FeatureRoster is not ready"), connection()); } return mPriv->roster->removePresencePublication(contacts, message); } /** * Remove completely contacts from the server. It has the same effect than * calling removePresencePublication() and removePresenceSubscription(), * but also remove from 'stored' list if it exists. * * This method requires Connection::FeatureRoster to be ready. * * \param contacts Contacts who should be removed * \message A message from the user which is either transmitted to the * contacts, or ignored, depending on the protocol * \return A PendingOperation which will emit PendingOperation::finished * when an attempt has been made to remove any publication of the user's presence to * the contacts. */ PendingOperation *ContactManager::removeContacts( const QList &contacts, const QString &message) { if (!connection()->isValid()) { return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection is invalid"), connection()); } else if (!connection()->isReady(Connection::FeatureRoster)) { return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection::FeatureRoster is not ready"), connection()); } return mPriv->roster->removeContacts(contacts, message); } /** * Return whether this protocol has a list of blocked contacts. * * This method requires Connection::FeatureRoster to be ready. * * \return \c true if blockContacts() is likely to succeed, \c false otherwise. */ bool ContactManager::canBlockContacts() const { if (!connection()->isReady(Connection::FeatureRoster)) { return false; } return mPriv->roster->canBlockContacts(); } /** * Return whether this protocol can report abusive contacts. * * This method requires Connection::FeatureRoster to be ready. * * \return \c true if reporting abuse when blocking contacts is supported, \c false otherwise. */ bool ContactManager::canReportAbuse() const { if (!connection()->isReady(Connection::FeatureRoster)) { return false; } return mPriv->roster->canReportAbuse(); } /** * Block the given contacts. Blocked contacts cannot send messages * to the user; depending on the protocol, blocking a contact may * have other effects. * * This method requires Connection::FeatureRoster to be ready. * * \param contacts Contacts that should be blocked. * \return A PendingOperation which will emit PendingOperation::finished() * when an attempt has been made to take the requested action. * \sa canBlockContacts(), unblockContacts(), blockContactsAndReportAbuse() */ PendingOperation *ContactManager::blockContacts(const QList &contacts) { return mPriv->roster->blockContacts(contacts, true, false); } /** * Block the given contacts and additionally report abusive behaviour * to the server. * * If reporting abusive behaviour is not supported by the protocol, * this method has the same effect as blockContacts(). * * This method requires Connection::FeatureRoster to be ready. * * \param contacts Contacts who should be added to the list of blocked contacts. * \return A PendingOperation which will emit PendingOperation::finished() * when an attempt has been made to take the requested action. * \sa canBlockContacts(), canReportAbuse(), blockContacts() */ PendingOperation *ContactManager::blockContactsAndReportAbuse( const QList &contacts) { return mPriv->roster->blockContacts(contacts, true, true); } /** * Unblock the given contacts. * * This method requires Connection::FeatureRoster to be ready. * * \param contacts Contacts that should be unblocked. * \return A PendingOperation which will emit PendingOperation::finished() * when an attempt has been made to take the requested action. * \sa canBlockContacts(), blockContacts(), blockContactsAndReportAbuse() */ PendingOperation *ContactManager::unblockContacts(const QList &contacts) { return mPriv->roster->blockContacts(contacts, false, false); } PendingContacts *ContactManager::contactsForHandles(const UIntList &handles, const Features &features) { QMap satisfyingContacts; QSet otherContacts; Features missingFeatures; if (!connection()->isValid()) { return new PendingContacts(ContactManagerPtr(this), handles, features, Features(), QStringList(), satisfyingContacts, otherContacts, TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection is invalid")); } else if (!connection()->isReady(Connection::FeatureCore)) { return new PendingContacts(ContactManagerPtr(this), handles, features, Features(), QStringList(), satisfyingContacts, otherContacts, TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection::FeatureCore is not ready")); } Features realFeatures = mPriv->realFeatures(features); ConnectionLowlevelPtr connLowlevel = connection()->lowlevel(); if (connLowlevel->hasImmortalHandles() && realFeatures.isEmpty()) { // try to avoid a roundtrip if all handles have an id set and no feature was requested foreach (uint handle, handles) { if (connLowlevel->hasContactId(handle)) { ContactPtr contact = ensureContact(handle, connLowlevel->contactId(handle), realFeatures); satisfyingContacts.insert(handle, contact); } } } foreach (uint handle, handles) { ContactPtr contact = lookupContactByHandle(handle); if (contact) { if ((realFeatures - contact->requestedFeatures()).isEmpty()) { // Contact exists and has all the requested features satisfyingContacts.insert(handle, contact); } else { // Contact exists but is missing features otherContacts.insert(handle); missingFeatures.unite(realFeatures - contact->requestedFeatures()); } } else { // Contact doesn't exist - we need to get all of the features (same as unite(features)) missingFeatures = realFeatures; otherContacts.insert(handle); } } QSet interfaces = mPriv->interfacesForFeatures(missingFeatures); PendingContacts *contacts = new PendingContacts(ContactManagerPtr(this), handles, features, missingFeatures, interfaces.toList(), satisfyingContacts, otherContacts); return contacts; } PendingContacts *ContactManager::contactsForHandles(const ReferencedHandles &handles, const Features &features) { return contactsForHandles(handles.toList(), features); } PendingContacts *ContactManager::contactsForHandles(const HandleIdentifierMap &handles, const Features &features) { connection()->lowlevel()->injectContactIds(handles); return contactsForHandles(handles.keys(), features); } PendingContacts *ContactManager::contactsForIdentifiers(const QStringList &identifiers, const Features &features) { if (!connection()->isValid()) { return new PendingContacts(ContactManagerPtr(this), identifiers, PendingContacts::ForIdentifiers, features, QStringList(), TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection is invalid")); } else if (!connection()->isReady(Connection::FeatureCore)) { return new PendingContacts(ContactManagerPtr(this), identifiers, PendingContacts::ForIdentifiers, features, QStringList(), TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection::FeatureCore is not ready")); } Features realFeatures = mPriv->realFeatures(features); PendingContacts *contacts = new PendingContacts(ContactManagerPtr(this), identifiers, PendingContacts::ForIdentifiers, realFeatures, QStringList()); return contacts; } /** * Request contacts and enable their \a features using a given field in their vcards. * * This method requires Connection::FeatureCore to be ready. * * \param vcardField The vcard field of the addresses we are requesting. * Supported fields can be found in ProtocolInfo::addressableVCardFields(). * \param vcardAddresses The addresses to get contacts for. The address types must match * the given vcard field. * \param features The Contact features to enable. * \return A PendingContacts, which will emit PendingContacts::finished * when the contacts are retrieved or an error occurred. * \sa contactsForHandles(), contactsForIdentifiers(), contactsForUris(), * ProtocolInfo::normalizeVCardAddress() */ PendingContacts *ContactManager::contactsForVCardAddresses(const QString &vcardField, const QStringList &vcardAddresses, const Features &features) { if (!connection()->isValid()) { return new PendingContacts(ContactManagerPtr(this), vcardField, vcardAddresses, features, QStringList(), TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection is invalid")); } else if (!connection()->isReady(Connection::FeatureCore)) { return new PendingContacts(ContactManagerPtr(this), vcardField, vcardAddresses, features, QStringList(), TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection::FeatureCore is not ready")); } Features realFeatures = mPriv->realFeatures(features); QSet interfaces = mPriv->interfacesForFeatures(realFeatures); PendingContacts *contacts = new PendingContacts(ContactManagerPtr(this), vcardField, vcardAddresses, realFeatures, interfaces.toList()); return contacts; } /** * Request contacts and enable their \a features using the given URI addresses. * * This method requires Connection::FeatureCore to be ready. * * \param uris The URI addresses to get contacts for. * Supported schemes can be found in ProtocolInfo::addressableUriSchemes(). * \param features The Contact features to enable. * \return A PendingContacts, which will emit PendingContacts::finished * when the contacts are retrieved or an error occurred. * \sa contactsForHandles(), contactsForIdentifiers(), contactsForVCardAddresses(), * ProtocolInfo::normalizeContactUri() */ PendingContacts *ContactManager::contactsForUris(const QStringList &uris, const Features &features) { if (!connection()->isValid()) { return new PendingContacts(ContactManagerPtr(this), uris, PendingContacts::ForUris, features, QStringList(), TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection is invalid")); } else if (!connection()->isReady(Connection::FeatureCore)) { return new PendingContacts(ContactManagerPtr(this), uris, PendingContacts::ForUris, features, QStringList(), TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection::FeatureCore is not ready")); } Features realFeatures = mPriv->realFeatures(features); QSet interfaces = mPriv->interfacesForFeatures(realFeatures); PendingContacts *contacts = new PendingContacts(ContactManagerPtr(this), uris, PendingContacts::ForUris, realFeatures, interfaces.toList()); return contacts; } PendingContacts *ContactManager::upgradeContacts(const QList &contacts, const Features &features) { if (!connection()->isValid()) { return new PendingContacts(ContactManagerPtr(this), contacts, features, TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection is invalid")); } else if (!connection()->isReady(Connection::FeatureCore)) { return new PendingContacts(ContactManagerPtr(this), contacts, features, TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection::FeatureCore is not ready")); } return new PendingContacts(ContactManagerPtr(this), contacts, features); } ContactPtr ContactManager::lookupContactByHandle(uint handle) { ContactPtr contact; if (mPriv->contacts.contains(handle)) { contact = ContactPtr(mPriv->contacts.value(handle)); if (!contact) { // Dangling weak pointer, remove it mPriv->contacts.remove(handle); } } return contact; } /** * Start a request to retrieve the avatar for the given \a contacts. * * Force the request of the avatar data. This method returns directly, emitting * Contact::avatarTokenChanged() and Contact::avatarDataChanged() signals once the token * and data are fetched from the server. * * This is only useful if the avatar token is unknown; see Contact::isAvatarTokenKnown(). * It happens in the case of offline XMPP contacts, because the server does not * send the token for them and an explicit request of the avatar data is needed. * * This method requires Contact::FeatureAvatarData to be ready. * * \sa Contact::avatarData(), Contact::avatarDataChanged(), * Contact::avatarToken(), Contact::avatarTokenChanged() */ void ContactManager::requestContactAvatars(const QList &contacts) { if (contacts.isEmpty()) { return; } if (!mPriv->requestAvatarsIdle) { mPriv->requestAvatarsIdle = true; QTimer::singleShot(0, this, SLOT(doRequestAvatars())); } mPriv->requestAvatarsQueue.unite(contacts.toSet()); } /** * Refresh information for the given contact. * * Once the information is retrieved infoFieldsChanged() will be emitted. * * This method requires Contact::FeatureInfo to be ready. * * \return A PendingOperation, which will emit PendingOperation::finished * when the call has finished. * \sa infoFieldsChanged() */ PendingOperation *ContactManager::refreshContactInfo(const QList &contacts) { if (!mPriv->refreshInfoOp) { mPriv->refreshInfoOp = new PendingRefreshContactInfo(connection()); QTimer::singleShot(0, this, SLOT(doRefreshInfo())); } foreach (const ContactPtr &contact, contacts) { mPriv->refreshInfoOp->addContact(contact.data()); } return mPriv->refreshInfoOp; } void ContactManager::onAliasesChanged(const AliasPairList &aliases) { debug() << "Got AliasesChanged for" << aliases.size() << "contacts"; foreach (AliasPair pair, aliases) { ContactPtr contact = lookupContactByHandle(pair.handle); if (contact) { contact->receiveAlias(pair.alias); } } } void ContactManager::doRequestAvatars() { Q_ASSERT(mPriv->requestAvatarsIdle); QSet contacts = mPriv->requestAvatarsQueue; Q_ASSERT(contacts.size() > 0); mPriv->requestAvatarsQueue.clear(); mPriv->requestAvatarsIdle = false; int found = 0; UIntList notFound; foreach (const ContactPtr &contact, contacts) { if (!contact) { continue; } QString avatarFileName; QString mimeTypeFileName; bool success = (contact->isAvatarTokenKnown() && mPriv->buildAvatarFileName(contact->avatarToken(), false, avatarFileName, mimeTypeFileName)); /* Check if the avatar is already in the cache */ if (success && QFile::exists(avatarFileName)) { QFile mimeTypeFile(mimeTypeFileName); mimeTypeFile.open(QIODevice::ReadOnly); QString mimeType = QString(QLatin1String(mimeTypeFile.readAll())); mimeTypeFile.close(); found++; contact->receiveAvatarData(AvatarData(avatarFileName, mimeType)); continue; } notFound << contact->handle()[0]; } if (found > 0) { debug() << "Avatar(s) found in cache for" << found << "contact(s)"; } if (found == contacts.size()) { return; } debug() << "Requesting avatar(s) for" << contacts.size() - found << "contact(s)"; Client::ConnectionInterfaceAvatarsInterface *avatarsInterface = connection()->interface(); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( avatarsInterface->RequestAvatars(notFound), this); connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), watcher, SLOT(deleteLater())); } void ContactManager::onAvatarUpdated(uint handle, const QString &token) { debug() << "Got AvatarUpdate for contact with handle" << handle; ContactPtr contact = lookupContactByHandle(handle); if (contact) { contact->receiveAvatarToken(token); } } void ContactManager::onAvatarRetrieved(uint handle, const QString &token, const QByteArray &data, const QString &mimeType) { QString avatarFileName; QString mimeTypeFileName; debug() << "Got AvatarRetrieved for contact with handle" << handle; bool success = mPriv->buildAvatarFileName(token, true, avatarFileName, mimeTypeFileName); if (success) { debug() << "Write avatar in cache for handle" << handle; debug() << "Filename:" << avatarFileName; debug() << "MimeType:" << mimeType; QTemporaryFile mimeTypeFile(mimeTypeFileName); mimeTypeFile.open(); mimeTypeFile.write(mimeType.toLatin1()); mimeTypeFile.setAutoRemove(false); mimeTypeFile.rename(mimeTypeFileName); QTemporaryFile avatarFile(avatarFileName); avatarFile.open(); avatarFile.write(data); avatarFile.setAutoRemove(false); avatarFile.rename(avatarFileName); } ContactPtr contact = lookupContactByHandle(handle); if (contact) { contact->setAvatarToken(token); contact->receiveAvatarData(AvatarData(avatarFileName, mimeType)); } } void ContactManager::onPresencesChanged(const SimpleContactPresences &presences) { debug() << "Got PresencesChanged for" << presences.size() << "contacts"; foreach (uint handle, presences.keys()) { ContactPtr contact = lookupContactByHandle(handle); if (contact) { contact->receiveSimplePresence(presences[handle]); } } } void ContactManager::onCapabilitiesChanged(const ContactCapabilitiesMap &caps) { debug() << "Got ContactCapabilitiesChanged for" << caps.size() << "contacts"; foreach (uint handle, caps.keys()) { ContactPtr contact = lookupContactByHandle(handle); if (contact) { contact->receiveCapabilities(caps[handle]); } } } void ContactManager::onLocationUpdated(uint handle, const QVariantMap &location) { debug() << "Got LocationUpdated for contact with handle" << handle; ContactPtr contact = lookupContactByHandle(handle); if (contact) { contact->receiveLocation(location); } } void ContactManager::onContactInfoChanged(uint handle, const Tp::ContactInfoFieldList &info) { debug() << "Got ContactInfoChanged for contact with handle" << handle; ContactPtr contact = lookupContactByHandle(handle); if (contact) { contact->receiveInfo(info); } } void ContactManager::onClientTypesUpdated(uint handle, const QStringList &clientTypes) { debug() << "Got ClientTypesUpdated for contact with handle" << handle; ContactPtr contact = lookupContactByHandle(handle); if (contact) { contact->receiveClientTypes(clientTypes); } } void ContactManager::doRefreshInfo() { PendingRefreshContactInfo *op = mPriv->refreshInfoOp; Q_ASSERT(op); mPriv->refreshInfoOp = 0; op->refreshInfo(); } ContactPtr ContactManager::ensureContact(const ReferencedHandles &handle, const Features &features, const QVariantMap &attributes) { uint bareHandle = handle[0]; ContactPtr contact = lookupContactByHandle(bareHandle); if (!contact) { contact = connection()->contactFactory()->construct(this, handle, features, attributes); mPriv->contacts.insert(bareHandle, contact); } contact->augment(features, attributes); return contact; } ContactPtr ContactManager::ensureContact(uint bareHandle, const QString &id, const Features &features) { ContactPtr contact = lookupContactByHandle(bareHandle); if (!contact) { QVariantMap attributes; attributes.insert(TP_QT_IFACE_CONNECTION + QLatin1String("/contact-id"), id); contact = connection()->contactFactory()->construct(this, ReferencedHandles(connection(), HandleTypeContact, UIntList() << bareHandle), features, attributes); mPriv->contacts.insert(bareHandle, contact); // do not call augment here as this is a fake contact } return contact; } QString ContactManager::featureToInterface(const Feature &feature) { if (feature == Contact::FeatureAlias) { return TP_QT_IFACE_CONNECTION_INTERFACE_ALIASING; } else if (feature == Contact::FeatureAvatarToken) { return TP_QT_IFACE_CONNECTION_INTERFACE_AVATARS; } else if (feature == Contact::FeatureAvatarData) { return TP_QT_IFACE_CONNECTION_INTERFACE_AVATARS; } else if (feature == Contact::FeatureSimplePresence) { return TP_QT_IFACE_CONNECTION_INTERFACE_SIMPLE_PRESENCE; } else if (feature == Contact::FeatureCapabilities) { return TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_CAPABILITIES; } else if (feature == Contact::FeatureLocation) { return TP_QT_IFACE_CONNECTION_INTERFACE_LOCATION; } else if (feature == Contact::FeatureInfo) { return TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_INFO; } else if (feature == Contact::FeatureRosterGroups) { return TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_GROUPS; } else if (feature == Contact::FeatureAddresses) { return TP_QT_IFACE_CONNECTION_INTERFACE_ADDRESSING; } else if (feature == Contact::FeatureClientTypes) { return TP_QT_IFACE_CONNECTION_INTERFACE_CLIENT_TYPES; } else { warning() << "ContactManager doesn't know which interface corresponds to feature" << feature; return QString(); } } void ContactManager::ensureTracking(const Feature &feature) { if (mPriv->tracking[feature]) { return; } ConnectionPtr conn(connection()); if (feature == Contact::FeatureAlias) { Client::ConnectionInterfaceAliasingInterface *aliasingInterface = conn->interface(); connect(aliasingInterface, SIGNAL(AliasesChanged(Tp::AliasPairList)), SLOT(onAliasesChanged(Tp::AliasPairList))); } else if (feature == Contact::FeatureAvatarData) { Client::ConnectionInterfaceAvatarsInterface *avatarsInterface = conn->interface(); connect(avatarsInterface, SIGNAL(AvatarRetrieved(uint,QString,QByteArray,QString)), SLOT(onAvatarRetrieved(uint,QString,QByteArray,QString))); } else if (feature == Contact::FeatureAvatarToken) { Client::ConnectionInterfaceAvatarsInterface *avatarsInterface = conn->interface(); connect(avatarsInterface, SIGNAL(AvatarUpdated(uint,QString)), SLOT(onAvatarUpdated(uint,QString))); } else if (feature == Contact::FeatureCapabilities) { Client::ConnectionInterfaceContactCapabilitiesInterface *contactCapabilitiesInterface = conn->interface(); connect(contactCapabilitiesInterface, SIGNAL(ContactCapabilitiesChanged(Tp::ContactCapabilitiesMap)), SLOT(onCapabilitiesChanged(Tp::ContactCapabilitiesMap))); } else if (feature == Contact::FeatureInfo) { Client::ConnectionInterfaceContactInfoInterface *contactInfoInterface = conn->interface(); connect(contactInfoInterface, SIGNAL(ContactInfoChanged(uint,Tp::ContactInfoFieldList)), SLOT(onContactInfoChanged(uint,Tp::ContactInfoFieldList))); } else if (feature == Contact::FeatureLocation) { Client::ConnectionInterfaceLocationInterface *locationInterface = conn->interface(); connect(locationInterface, SIGNAL(LocationUpdated(uint,QVariantMap)), SLOT(onLocationUpdated(uint,QVariantMap))); } else if (feature == Contact::FeatureSimplePresence) { Client::ConnectionInterfaceSimplePresenceInterface *simplePresenceInterface = conn->interface(); connect(simplePresenceInterface, SIGNAL(PresencesChanged(Tp::SimpleContactPresences)), SLOT(onPresencesChanged(Tp::SimpleContactPresences))); } else if (feature == Contact::FeatureClientTypes) { Client::ConnectionInterfaceClientTypesInterface *clientTypesInterface = conn->interface(); connect(clientTypesInterface, SIGNAL(ClientTypesUpdated(uint,QStringList)), SLOT(onClientTypesUpdated(uint,QStringList))); } else if (feature == Contact::FeatureRosterGroups || feature == Contact::FeatureAddresses) { // nothing to do here, but we don't want to warn ; } else { warning() << " Unknown feature" << feature << "when trying to figure out how to connect change notification!"; } mPriv->tracking[feature] = true; } PendingOperation *ContactManager::introspectRoster() { return mPriv->roster->introspect(); } PendingOperation *ContactManager::introspectRosterGroups() { return mPriv->roster->introspectGroups(); } void ContactManager::resetRoster() { mPriv->roster->reset(); } /** * \fn void ContactManager::presencePublicationRequested(const Tp::Contacts &contacts) * * Emitted whenever some contacts request for presence publication. * * \param contacts A set of contacts which requested presence publication. */ /** * \fn void ContactManager::groupAdded(const QString &group) * * Emitted when a new contact list group is created. * * \param group The group name. * \sa allKnownGroups() */ /** * \fn void ContactManager::groupRenamed(const QString &oldGroup, const QString &newGroup) * * Emitted when a new contact list group is renamed. * * \param oldGroup The old group name. * \param newGroup The new group name. * \sa allKnownGroups() */ /** * \fn void ContactManager::groupRemoved(const QString &group) * * Emitted when a contact list group is removed. * * \param group The group name. * \sa allKnownGroups() */ /** * \fn void ContactManager::groupMembersChanged(const QString &group, * const Tp::Contacts &groupMembersAdded, * const Tp::Contacts &groupMembersRemoved, * const Tp::Channel::GroupMemberChangeDetails &details) * * Emitted whenever some contacts got removed or added from * a group. * * \param group The name of the group that changed. * \param groupMembersAdded A set of contacts which were added to the group \a group. * \param groupMembersRemoved A set of contacts which were removed from the group \a group. * \param details The change details. * \sa groupContacts() */ /** * \fn void ContactManager::allKnownContactsChanged(const Tp::Contacts &contactsAdded, * const Tp::Contacts &contactsRemoved, * const Tp::Channel::GroupMemberChangeDetails &details) * * Emitted whenever some contacts got removed or added from * ContactManager's known contact list. It is useful for monitoring which contacts * are currently known by ContactManager. * * Note that, in some protocols, this signal could stream newly added contacts * with both presence subscription and publication state set to No. Be sure to watch * over publication and/or subscription state changes if that is the case. * * \param contactsAdded A set of contacts which were added to the known contact list. * \param contactsRemoved A set of contacts which were removed from the known contact list. * \param details The change details. * \sa allKnownContacts() */ } // Tp telepathy-qt-0.9.3/TelepathyQt/pending-contact-info.cpp0000644000175200001440000000725512000056607025403 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/pending-contact-info.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include namespace Tp { struct TP_QT_NO_EXPORT PendingContactInfo::Private { Contact::InfoFields info; }; /** * \class PendingContactInfo * \ingroup clientconn * \headerfile TelepathyQt/pending-contact-info.h * * \brief The PendingContactInfo class represents the parameters of and the * reply to an asynchronous contact info request. * * Instances of this class cannot be constructed directly; the only way to get * one is via Contact. * * See \ref async_model */ /** * Construct a new PendingContactInfo object. * * \param contact Contact to use. */ PendingContactInfo::PendingContactInfo(const ContactPtr &contact) : PendingOperation(contact), mPriv(new Private) { ConnectionPtr connection = contact->manager()->connection(); Client::ConnectionInterfaceContactInfoInterface *contactInfoInterface = connection->interface(); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( contactInfoInterface->RequestContactInfo( contact->handle()[0]), this); connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(onCallFinished(QDBusPendingCallWatcher*))); } /** * Class destructor. */ PendingContactInfo::~PendingContactInfo() { delete mPriv; } /** * Return the contact through which the request was made. * * \return A pointer to the Contact object. */ ContactPtr PendingContactInfo::contact() const { return ContactPtr(qobject_cast((Contact*) object().data())); } /** * Return the information for contact(). * * \return The contact infor as a Contact::InfoFields object. */ Contact::InfoFields PendingContactInfo::infoFields() const { if (!isFinished()) { warning() << "PendingContactInfo::info called before finished"; } else if (!isValid()) { warning() << "PendingContactInfo::info called when not valid"; } return mPriv->info; } void PendingContactInfo::onCallFinished(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (!reply.isError()) { mPriv->info = Contact::InfoFields(reply.value()); debug() << "Got reply to ContactInfo.RequestContactInfo"; setFinished(); } else { debug().nospace() << "ContactInfo.RequestContactInfo failed: " << reply.error().name() << ": " << reply.error().message(); setFinishedWithError(reply.error()); } watcher->deleteLater(); } } // Tp telepathy-qt-0.9.3/TelepathyQt/abstract-client.h0000644000175200001440000002265012000056607024115 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009-2010 Collabora Ltd. * @copyright Copyright (C) 2009-2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_abstract_client_h_HEADER_GUARD_ #define _TelepathyQt_abstract_client_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include #include #include #include #include namespace Tp { class ClientRegistrar; class ChannelClassSpecList; class TP_QT_EXPORT AbstractClient : public RefCounted { Q_DISABLE_COPY(AbstractClient) public: AbstractClient(); virtual ~AbstractClient(); bool isRegistered() const; private: friend class ClientRegistrar; void setRegistered(bool registered); struct Private; friend struct Private; Private *mPriv; }; class TP_QT_EXPORT AbstractClientObserver : public virtual AbstractClient { Q_DISABLE_COPY(AbstractClientObserver) public: class ObserverInfo { public: ObserverInfo(const QVariantMap &info = QVariantMap()); ObserverInfo(const ObserverInfo &other); ~ObserverInfo(); ObserverInfo &operator=(const ObserverInfo &other); bool isRecovering() const { return qdbus_cast(allInfo().value(QLatin1String("recovering"))); } QVariantMap allInfo() const; private: struct Private; QSharedDataPointer mPriv; }; virtual ~AbstractClientObserver(); ChannelClassSpecList observerFilter() const; bool shouldRecover() const; virtual void observeChannels(const MethodInvocationContextPtr<> &context, const AccountPtr &account, const ConnectionPtr &connection, const QList &channels, const ChannelDispatchOperationPtr &dispatchOperation, const QList &requestsSatisfied, const ObserverInfo &observerInfo) = 0; protected: AbstractClientObserver(const ChannelClassSpecList &channelFilter, bool shouldRecover = false); private: struct Private; friend struct Private; Private *mPriv; }; class TP_QT_EXPORT AbstractClientApprover : public virtual AbstractClient { Q_DISABLE_COPY(AbstractClientApprover) public: virtual ~AbstractClientApprover(); ChannelClassSpecList approverFilter() const; virtual void addDispatchOperation(const MethodInvocationContextPtr<> &context, const ChannelDispatchOperationPtr &dispatchOperation) = 0; protected: AbstractClientApprover(const ChannelClassSpecList &channelFilter); private: struct Private; friend struct Private; Private *mPriv; }; /* * TODO: use case specific subclasses: * - StreamTubeHandler(QString(List) protocol(s)) * - handleTube(DBusTubeChannelPtr, userActionTime) * - DBusTubeHandler(QString(List) serviceName(s)) * - handleTube(DBusTubeChannelPtr, userActionTime) */ class TP_QT_EXPORT AbstractClientHandler : public virtual AbstractClient { Q_DISABLE_COPY(AbstractClientHandler) public: class Capabilities { public: Capabilities(const QStringList &tokens = QStringList()); Capabilities(const Capabilities &other); ~Capabilities(); Capabilities &operator=(const Capabilities &other); bool hasGTalkP2PNATTraversalToken() const { return hasToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING + QLatin1String("/gtalk-p2p")); } void setGTalkP2PNATTraversalToken() { setToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING + QLatin1String("/gtalk-p2p")); } void unsetGTalkP2PNATTraversalToken() { unsetToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING + QLatin1String("/gtalk-p2p")); } bool hasICEUDPNATTraversalToken() const { return hasToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING + QLatin1String("/ice-udp")); } void setICEUDPNATTraversalToken() { setToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING + QLatin1String("/ice-udp")); } void unsetICEUDPNATTraversalToken() { unsetToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING + QLatin1String("/ice-udp")); } bool hasWLM85NATTraversalToken() const { return hasToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING + QLatin1String("/wlm-8.5")); } void setWLM85NATTraversalToken() { setToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING + QLatin1String("/wlm-8.5")); } void unsetWLM85NATTraversalToken() { unsetToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING + QLatin1String("/wlm-8.5")); } bool hasWLM2009NATTraversalToken() const { return hasToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING + QLatin1String("/wlm-2009")); } void setWLM2009NATTraversalToken() { setToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING + QLatin1String("/wlm-2009")); } void unsetWLM2009NATTraversalToken() { unsetToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING + QLatin1String("/wlm-2009")); } bool hasAudioCodecToken(const QString &mimeSubType) const { return hasToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING + QLatin1String("/audio/") + mimeSubType.toLower()); } void setAudioCodecToken(const QString &mimeSubType) { setToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING + QLatin1String("/audio/") + mimeSubType.toLower()); } void unsetAudioCodecToken(const QString &mimeSubType) { unsetToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING + QLatin1String("/audio/") + mimeSubType.toLower()); } bool hasVideoCodecToken(const QString &mimeSubType) const { return hasToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING + QLatin1String("/video/") + mimeSubType.toLower()); } void setVideoCodecToken(const QString &mimeSubType) { setToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING + QLatin1String("/video/") + mimeSubType.toLower()); } void unsetVideoCodecToken(const QString &mimeSubType) { unsetToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING + QLatin1String("/video/") + mimeSubType.toLower()); } bool hasToken(const QString &token) const; void setToken(const QString &token); void unsetToken(const QString &token); QStringList allTokens() const; private: struct Private; QSharedDataPointer mPriv; }; class HandlerInfo { public: HandlerInfo(const QVariantMap &info = QVariantMap()); HandlerInfo(const HandlerInfo &other); ~HandlerInfo(); HandlerInfo &operator=(const HandlerInfo &other); QVariantMap allInfo() const; private: struct Private; QSharedDataPointer mPriv; }; virtual ~AbstractClientHandler(); ChannelClassSpecList handlerFilter() const; Capabilities handlerCapabilities() const; virtual bool bypassApproval() const = 0; virtual void handleChannels(const MethodInvocationContextPtr<> &context, const AccountPtr &account, const ConnectionPtr &connection, const QList &channels, const QList &requestsSatisfied, const QDateTime &userActionTime, const HandlerInfo &handlerInfo) = 0; bool wantsRequestNotification() const; virtual void addRequest(const ChannelRequestPtr &request); virtual void removeRequest(const ChannelRequestPtr &request, const QString &errorName, const QString &errorMessage); protected: AbstractClientHandler(const ChannelClassSpecList &channelFilter, const Capabilities &capabilities = Capabilities(), bool wantsRequestNotification = false); private: struct Private; friend struct Private; Private *mPriv; }; } // Tp Q_DECLARE_METATYPE(Tp::AbstractClientObserver::ObserverInfo); Q_DECLARE_METATYPE(Tp::AbstractClientHandler::Capabilities); Q_DECLARE_METATYPE(Tp::AbstractClientHandler::HandlerInfo); #endif telepathy-qt-0.9.3/TelepathyQt/file-transfer-channel.cpp0000644000175200001440000005260312000056607025541 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/file-transfer-channel.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include namespace Tp { struct TP_QT_NO_EXPORT FileTransferChannel::Private { Private(FileTransferChannel *parent); ~Private(); static void introspectProperties(Private *self); void extractProperties(const QVariantMap &props); // Public object FileTransferChannel *parent; Client::ChannelTypeFileTransferInterface *fileTransferInterface; Client::DBus::PropertiesInterface *properties; ReadinessHelper *readinessHelper; // Introspection uint pendingState; uint pendingStateReason; uint state; uint stateReason; QString contentType; QString fileName; QString uri; QString contentHash; QString description; QDateTime lastModificationTime; FileHashType contentHashType; qulonglong initialOffset; qulonglong size; qulonglong transferredBytes; SupportedSocketMap availableSocketTypes; bool connected; bool finished; }; FileTransferChannel::Private::Private(FileTransferChannel *parent) : parent(parent), fileTransferInterface(parent->interface()), properties(parent->interface()), readinessHelper(parent->readinessHelper()), pendingState(FileTransferStateNone), pendingStateReason(FileTransferStateChangeReasonNone), state(pendingState), stateReason(pendingStateReason), contentHashType(FileHashTypeNone), initialOffset(0), size(0), transferredBytes(0), connected(false), finished(false) { parent->connect(fileTransferInterface, SIGNAL(InitialOffsetDefined(qulonglong)), SLOT(onInitialOffsetDefined(qulonglong))); parent->connect(fileTransferInterface, SIGNAL(FileTransferStateChanged(uint,uint)), SLOT(onStateChanged(uint,uint))); parent->connect(fileTransferInterface, SIGNAL(TransferredBytesChanged(qulonglong)), SLOT(onTransferredBytesChanged(qulonglong))); ReadinessHelper::Introspectables introspectables; ReadinessHelper::Introspectable introspectableCore( QSet() << 0, // makesSenseForStatuses Features() << Channel::FeatureCore, // dependsOnFeatures (core) QStringList(), // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::introspectProperties, this); introspectables[FeatureCore] = introspectableCore; readinessHelper->addIntrospectables(introspectables); } FileTransferChannel::Private::~Private() { } void FileTransferChannel::Private::introspectProperties( FileTransferChannel::Private *self) { QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( self->properties->GetAll( TP_QT_IFACE_CHANNEL_TYPE_FILE_TRANSFER), self->parent); self->parent->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotProperties(QDBusPendingCallWatcher*))); } void FileTransferChannel::Private::extractProperties(const QVariantMap &props) { pendingState = state = qdbus_cast(props[QLatin1String("State")]); contentType = qdbus_cast(props[QLatin1String("ContentType")]); fileName = qdbus_cast(props[QLatin1String("Filename")]); uri = qdbus_cast(props[QLatin1String("URI")]); contentHash = qdbus_cast(props[QLatin1String("ContentHash")]); description = qdbus_cast(props[QLatin1String("Description")]); lastModificationTime.setTime_t((uint) qdbus_cast(props[QLatin1String("Date")])); contentHashType = (FileHashType) qdbus_cast(props[QLatin1String("ContentHashType")]); initialOffset = qdbus_cast(props[QLatin1String("InitialOffset")]); size = qdbus_cast(props[QLatin1String("Size")]); transferredBytes = qdbus_cast(props[QLatin1String("TransferredBytes")]); availableSocketTypes = qdbus_cast(props[QLatin1String("AvailableSocketTypes")]); } /** * \class FileTransferChannel * \ingroup clientchannel * \headerfile TelepathyQt/file-transfer-channel.h * * \brief The FileTransferChannel class represents a Telepathy channel of type * FileTransfer. * * For more specialized file transfer classes, please refer to * OutgoingFileTransferChannel and IncomingFileTransferChannel. * * For more details, please refer to \telepathy_spec. * * See \ref async_model, \ref shared_ptr */ /** * Feature representing the core that needs to become ready to make the * FileTransferChannel object usable. * * Note that this feature must be enabled in order to use most * FileTransferChannel methods. * See specific methods documentation for more details. * * When calling isReady(), becomeReady(), this feature is implicitly added * to the requested features. */ const Feature FileTransferChannel::FeatureCore = Feature(QLatin1String(FileTransferChannel::staticMetaObject.className()), 0); /** * Create a new FileTransferChannel object. * * \param connection Connection owning this channel, and specifying the * service. * \param objectPath The channel object path. * \param immutableProperties The channel immutable properties. * \return A FileTransferChannelPtr object pointing to the newly created * FileTransferChannel object. */ FileTransferChannelPtr FileTransferChannel::create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) { return FileTransferChannelPtr(new FileTransferChannel(connection, objectPath, immutableProperties, FileTransferChannel::FeatureCore)); } /** * Construct a new FileTransferChannel object. * * \param connection Connection owning this channel, and specifying the * service. * \param objectPath The channel object path. * \param immutableProperties The channel immutable properties. * \param coreFeature The core feature of the channel type, if any. The corresponding introspectable should * depend on FileTransferChannel::FeatureCore. */ FileTransferChannel::FileTransferChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature) : Channel(connection, objectPath, immutableProperties, coreFeature), mPriv(new Private(this)) { } /** * Class destructor. */ FileTransferChannel::~FileTransferChannel() { delete mPriv; } /** * Return the state of the file transfer as described by #FileTransferState. * * Change notification is via the stateChanged() signal. * * This method requires FileTransferChannel::FeatureCore to be ready. * * \return The state as #FileTransferState. * \sa stateReason() */ FileTransferState FileTransferChannel::state() const { if (!isReady(FeatureCore)) { warning() << "FileTransferChannel::FeatureCore must be ready before " "calling state"; } return (FileTransferState) mPriv->state; } /** * Return the reason for the state change as described by the #FileTransferStateChangeReason. * * Change notification is via the stateChanged() signal. * * This method requires FileTransferChannel::FeatureCore to be ready. * * \return The state reason as #FileTransferStateChangeReason. * \sa state() */ FileTransferStateChangeReason FileTransferChannel::stateReason() const { if (!isReady(FeatureCore)) { warning() << "FileTransferChannel::FeatureCore must be ready before " "calling stateReason"; } return (FileTransferStateChangeReason) mPriv->stateReason; } /** * Return the name of the file on the sender's side. This is given as * a suggested filename for the receiver. * * This property should be the basename of the file being sent. For example, if * the sender sends the file /home/user/monkey.pdf then this property should be * set to monkey.pdf. * * This property cannot change once the channel has been created. * * This method requires FileTransferChannel::FeatureCore to be ready. * * \return The suggested filename for the receiver. */ QString FileTransferChannel::fileName() const { if (!isReady(FeatureCore)) { warning() << "FileTransferChannel::FeatureCore must be ready before " "calling fileName"; } return mPriv->fileName; } /** * Return the file's MIME type. * * This property cannot change once the channel has been created. * * This method requires FileTransferChannel::FeatureCore to be ready. * * \return The file's MIME type. */ QString FileTransferChannel::contentType() const { if (!isReady(FeatureCore)) { warning() << "FileTransferChannel::FeatureCore must be ready before " "calling contentType"; } return mPriv->contentType; } /** * Return the size of the file. * * Note that the size is not guaranteed to be exactly right for * incoming files. This is merely a hint and should not be used to know when the * transfer finished. * * For unknown sizes the return value can be UINT64_MAX. * * This property cannot change once the channel has been created. * * This method requires FileTransferChannel::FeatureCore to be ready. * * \return The file size. */ qulonglong FileTransferChannel::size() const { if (!isReady(FeatureCore)) { warning() << "FileTransferChannel::FeatureCore must be ready before " "calling size"; } return mPriv->size; } /** * Return the URI of the file. * * On outgoing file transfers, this property cannot change after the channel * is requested. For incoming file transfers, this property may be set by the * channel handler before calling AcceptFile to inform observers where the * incoming file will be saved. When the URI property is set, the signal * IncomingFileTransferChannel::uriDefined() is emitted. * * This method requires FileTransferChannel::FeatureCore to be ready. * * \return The file uri. * \sa IncomingFileTransferChannel::uriDefined() */ QString FileTransferChannel::uri() const { if (!isReady(FeatureCore)) { warning() << "FileTransferChannel::FeatureCore must be ready before " "calling uri"; } return mPriv->uri; } /** * Return the type of the contentHash(). * * This method requires FileTransferChannel::FeatureCore to be ready. * * \return The content hash type as #FileHashType. * \sa contentHash() */ FileHashType FileTransferChannel::contentHashType() const { if (!isReady(FeatureCore)) { warning() << "FileTransferChannel::FeatureCore must be ready before " "calling contentHashType"; } return mPriv->contentHashType; } /** * Return the hash of the contents of the file transfer, of type described in * the value of the contentHashType(). * * Its value MUST correspond to the appropriate type of the contentHashType(). * If the contentHashType() is set to #FileHashTypeNone, then the * returned value is an empty string. * * This method requires FileTransferChannel::FeatureCore to be ready. * * \return The hash of the contents. * \sa contentHashType() */ QString FileTransferChannel::contentHash() const { if (!isReady(FeatureCore)) { warning() << "FileTransferChannel::FeatureCore must be ready before " "calling contentHash"; } if (mPriv->contentHashType == FileHashTypeNone) { return QString(); } return mPriv->contentHash; } /** * Return the description of the file transfer. * * This property cannot change once the channel has been created. * * This method requires FileTransferChannel::FeatureCore to be ready. * * \return The description. */ QString FileTransferChannel::description() const { if (!isReady(FeatureCore)) { warning() << "FileTransferChannel::FeatureCore must be ready before " "calling description"; } return mPriv->description; } /** * Return the last modification time of the file being transferred. This cannot * change once the channel has been created. * * This method requires FileTransferChannel::FeatureCore to be ready. * * \return The file modification time as QDateTime. */ QDateTime FileTransferChannel::lastModificationTime() const { if (!isReady(FeatureCore)) { warning() << "FileTransferChannel::FeatureCore must be ready before " "calling lastModificationTime"; } return mPriv->lastModificationTime; } /** * Return the offset in bytes from which the file will be sent. * * This method requires FileTransferChannel::FeatureCore to be ready. * * \return The offset in bytes. * \sa initialOffsetDefined() */ qulonglong FileTransferChannel::initialOffset() const { if (!isReady(FeatureCore)) { warning() << "FileTransferChannel::FeatureCore must be ready before " "calling initialOffset"; } return mPriv->initialOffset; } /** * Return the number of bytes that have been transferred. * * Change notification is via the transferredBytesChanged() signal. * * This method requires FileTransferChannel::FeatureCore to be ready. * * \return The number of bytes. * \sa transferredBytesChanged() */ qulonglong FileTransferChannel::transferredBytes() const { if (!isReady(FeatureCore)) { warning() << "FileTransferChannel::FeatureCore must be ready before " "calling transferredBytes"; } return mPriv->transferredBytes; } /** * Return a mapping from address types (members of #SocketAddressType) to arrays * of access-control type (members of #SocketAccessControl) that the CM * supports for sockets with that address type. * * For simplicity, if a CM supports offering a particular type of file transfer, * it is assumed to support accepting it. All CMs support at least * SocketAddressTypeIPv4. * * This method requires FileTransferChannel::FeatureCore to be ready. * * \return The available socket types as a map from address types to arrays of access-control type. */ SupportedSocketMap FileTransferChannel::availableSocketTypes() const { if (!isReady(FeatureCore)) { warning() << "FileTransferChannel::FeatureCore must be ready before " "calling availableSocketTypes"; } return mPriv->availableSocketTypes; } /** * Cancel a file transfer. * * \return A PendingOperation object which will emit PendingOperation::finished * when the call has finished. */ PendingOperation *FileTransferChannel::cancel() { return requestClose(); } /** * Protected virtual method called when the state becomes * #FileTransferStateOpen. * * Specialized classes should reimplement this method and call setConnected() * when the connection is established. * * \sa setConnected() */ void FileTransferChannel::connectToHost() { // do nothing } /** * Return whether a connection has been established. * * \return \c true if the connections has been established, \c false otherwise. * \sa setConnected() */ bool FileTransferChannel::isConnected() const { return mPriv->connected; } /** * Indicate whether a connection has been established. * * Specialized classes that reimplement connectToHost() must call this method * once the connection has been established or setFinished() if an error * occurred. * * \sa isConnected(), connectToHost(), setFinished() */ void FileTransferChannel::setConnected() { mPriv->connected = true; } /** * Return whether sending/receiving has finished. * * \return \c true if sending/receiving has finished, \c false otherwise. */ bool FileTransferChannel::isFinished() const { return mPriv->finished; } /** * Protected virtual method called when an error occurred and the transfer * should finish. * * Specialized classes should reimplement this method and close the IO devices * and do all the needed cleanup. * * Note that for specialized classes that reimplement connectToHost() and set * isConnected() to true, the state will not change to * #FileTransferStateCompleted once the state change is received. * * When finished sending/receiving the specialized class MUST call this method * and then the state will change to the latest pending state. */ void FileTransferChannel::setFinished() { mPriv->finished = true; // do the actual state change, in case we are in // FileTransferStateCompleted pendingState changeState(); } void FileTransferChannel::gotProperties(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (!reply.isError()) { QVariantMap props = reply.value(); mPriv->extractProperties(props); debug() << "Got reply to Properties::GetAll(FileTransferChannel)"; mPriv->readinessHelper->setIntrospectCompleted(FeatureCore, true); } else { warning().nospace() << "Properties::GetAll(FileTransferChannel) failed " "with " << reply.error().name() << ": " << reply.error().message(); mPriv->readinessHelper->setIntrospectCompleted(FeatureCore, false, reply.error()); } } void FileTransferChannel::changeState() { if (mPriv->state == mPriv->pendingState) { return; } mPriv->state = mPriv->pendingState; mPriv->stateReason = mPriv->pendingStateReason; emit stateChanged((FileTransferState) mPriv->state, (FileTransferStateChangeReason) mPriv->stateReason); } void FileTransferChannel::onStateChanged(uint state, uint stateReason) { if (state == (uint) mPriv->pendingState) { return; } debug() << "File transfer state changed to" << state << "with reason" << stateReason; mPriv->pendingState = (FileTransferState) state; mPriv->pendingStateReason = (FileTransferStateChangeReason) stateReason; switch (state) { case FileTransferStateOpen: // try to connect to host, for handlers this // connect to host, as the user called Accept/ProvideFile // and have the host addr, for observers this will do nothing and // everything will keep working connectToHost(); changeState(); break; case FileTransferStateCompleted: //iIf already finished sending/receiving, just change the state, // if not completed will only be set when: // IncomingChannel: // - The input socket closes // OutgoingChannel: // - Input EOF is reached or the output socket is closed // // we also check for connected as observers will never be connected // and finished will never be set, but we need to work anyway. if (mPriv->finished || !mPriv->connected) { changeState(); } break; case FileTransferStateCancelled: // if already finished sending/receiving, just change the state, // if not finish now and change the state if (!mPriv->finished) { setFinished(); } else { changeState(); } break; default: changeState(); break; } } void FileTransferChannel::onInitialOffsetDefined(qulonglong initialOffset) { mPriv->initialOffset = initialOffset; emit initialOffsetDefined(initialOffset); } void FileTransferChannel::onTransferredBytesChanged(qulonglong count) { mPriv->transferredBytes = count; emit transferredBytesChanged(count); } void FileTransferChannel::onUriDefined(const QString &uri) { mPriv->uri = uri; // Signal is emitted only by IncomingFileTransferChannels } /** * \fn void FileTransferChannel::stateChanged(Tp::FileTransferState state, * Tp::FileTransferStateChangeReason reason) * * Emitted when the value of state() changes. * * \param state The new state of this file transfer channel. * \param reason The reason for the change of state. * \sa state() */ /** * \fn void FileTransferChannel::initialOffsetDefined(qulonglong initialOffset) * * Emitted when the initial offset for the file transfer is * defined. * * \param initialOffset The new initial offset for the file transfer. * \sa initialOffset() */ /** * \fn void FileTransferChannel::transferredBytesChanged(qulonglong count); * * Emitted when the value of transferredBytes() changes. * * \param count The new number of bytes transferred. * \sa transferredBytes() */ } // Tp telepathy-qt-0.9.3/TelepathyQt/TubeChannel0000644000175200001440000000036012000056607022772 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_TubeChannel_HEADER_GUARD_ #define _TelepathyQt_TubeChannel_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/PendingChannel0000644000175200001440000000037112000056607023461 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_PendingChannel_HEADER_GUARD_ #define _TelepathyQt_PendingChannel_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/SimpleObserver0000644000175200001440000000037112000056607023545 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_SimpleObserver_HEADER_GUARD_ #define _TelepathyQt_SimpleObserver_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/not-filter.h0000644000175200001440000000371512000056607023122 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_not_filter_h_HEADER_GUARD_ #define _TelepathyQt_not_filter_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include namespace Tp { template class NotFilter : public Filter { public: static SharedPtr > create( const SharedPtr > &filter = SharedPtr >()) { return SharedPtr >(new NotFilter(filter)); } inline virtual ~NotFilter() { } inline virtual bool isValid() const { return mFilter && mFilter->isValid(); } inline virtual bool matches(const SharedPtr &t) const { if (!isValid()) { return false; } return !mFilter->matches(t); } inline SharedPtr > filter() const { return mFilter; } private: NotFilter(const SharedPtr > &filter) : Filter(), mFilter(filter) { } SharedPtr > mFilter; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/stream-tube-server.h0000644000175200001440000001762212000056607024575 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_stream_tube_server_h_HEADER_GUARD_ #define _TelepathyQt_stream_tube_server_h_HEADER_GUARD_ #include #include #include #include #include #include #include #include class QHostAddress; class QTcpServer; namespace Tp { class TP_QT_EXPORT StreamTubeServer : public QObject, public RefCounted { Q_OBJECT Q_DISABLE_COPY(StreamTubeServer) class TubeWrapper; public: class ParametersGenerator { public: virtual QVariantMap nextParameters(const AccountPtr &account, const OutgoingStreamTubeChannelPtr &tube, const ChannelRequestHints &hints) = 0; protected: virtual ~ParametersGenerator() {} }; class RemoteContact : public QPair { public: RemoteContact(); RemoteContact(const AccountPtr &account, const ContactPtr &contact); RemoteContact(const RemoteContact &other); ~RemoteContact(); bool isValid() const { return mPriv.constData() != 0; } RemoteContact &operator=(const RemoteContact &other); const AccountPtr &account() const { return first; } const ContactPtr &contact() const { return second; } private: struct Private; friend struct Private; QSharedDataPointer mPriv; }; class Tube : public QPair { public: Tube(); Tube(const AccountPtr &account, const OutgoingStreamTubeChannelPtr &channel); Tube(const Tube &other); ~Tube(); bool isValid() const { return mPriv.constData() != 0; } Tube &operator=(const Tube &other); const AccountPtr &account() const { return first; } const OutgoingStreamTubeChannelPtr &channel() const { return second; } private: struct Private; friend struct Private; QSharedDataPointer mPriv; }; static StreamTubeServerPtr create( const QStringList &p2pServices, const QStringList &roomServices = QStringList(), const QString &clientName = QString(), bool monitorConnections = false, const AccountFactoryConstPtr &accountFactory = AccountFactory::create(QDBusConnection::sessionBus()), const ConnectionFactoryConstPtr &connectionFactory = ConnectionFactory::create(QDBusConnection::sessionBus()), const ChannelFactoryConstPtr &channelFactory = ChannelFactory::create(QDBusConnection::sessionBus()), const ContactFactoryConstPtr &contactFactory = ContactFactory::create()); static StreamTubeServerPtr create( const QDBusConnection &bus, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory, const QStringList &p2pServices, const QStringList &roomServices = QStringList(), const QString &clientName = QString(), bool monitorConnections = false); static StreamTubeServerPtr create( const AccountManagerPtr &accountManager, const QStringList &p2pServices, const QStringList &roomServices = QStringList(), const QString &clientName = QString(), bool monitorConnections = false); static StreamTubeServerPtr create( const ClientRegistrarPtr ®istrar, const QStringList &p2pServices, const QStringList &roomServices = QStringList(), const QString &clientName = QString(), bool monitorConnections = false); virtual ~StreamTubeServer(); ClientRegistrarPtr registrar() const; QString clientName() const; bool isRegistered() const; bool monitorsConnections() const; QPair exportedTcpSocketAddress() const; QVariantMap exportedParameters() const; void exportTcpSocket( const QHostAddress &address, quint16 port, const QVariantMap ¶meters = QVariantMap()); void exportTcpSocket( const QTcpServer *server, const QVariantMap ¶meters = QVariantMap()); void exportTcpSocket( const QHostAddress &address, quint16 port, ParametersGenerator *generator); void exportTcpSocket( const QTcpServer *server, ParametersGenerator *generator); QList tubes() const; QHash, RemoteContact> tcpConnections() const; Q_SIGNALS: void tubeRequested( const Tp::AccountPtr &account, const Tp::OutgoingStreamTubeChannelPtr &tube, const QDateTime &userActionTime, const Tp::ChannelRequestHints &hints); void tubeClosed( const Tp::AccountPtr &account, const Tp::OutgoingStreamTubeChannelPtr &tube, const QString &error, const QString &message); void newTcpConnection( const QHostAddress &sourceAddress, quint16 sourcePort, const Tp::AccountPtr &account, const Tp::ContactPtr &contact, const Tp::OutgoingStreamTubeChannelPtr &tube); void tcpConnectionClosed( const QHostAddress &sourceAddress, quint16 sourcePort, const Tp::AccountPtr &account, const Tp::ContactPtr &contact, const QString &error, const QString &message, const Tp::OutgoingStreamTubeChannelPtr &tube); private Q_SLOTS: TP_QT_NO_EXPORT void onInvokedForTube( const Tp::AccountPtr &account, const Tp::StreamTubeChannelPtr &tube, const QDateTime &userActionTime, const Tp::ChannelRequestHints &requestHints); TP_QT_NO_EXPORT void onOfferFinished( TubeWrapper *wrapper, Tp::PendingOperation *op); TP_QT_NO_EXPORT void onTubeInvalidated( Tp::DBusProxy *proxy, const QString &error, const QString &message); TP_QT_NO_EXPORT void onNewConnection( TubeWrapper *wrapper, uint conn); TP_QT_NO_EXPORT void onConnectionClosed( TubeWrapper *wrapper, uint conn, const QString &error, const QString &message); private: TP_QT_NO_EXPORT StreamTubeServer( const ClientRegistrarPtr ®istrar, const QStringList &p2pServices, const QStringList &roomServices, const QString &clientName, bool monitorConnections); struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/ChannelInterfaceDTMFInterface0000644000175200001440000000041712000056607026272 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelInterfaceDTMFInterface_HEADER_GUARD_ #define _TelepathyQt_ChannelInterfaceDTMFInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/pending-contact-info.h0000644000175200001440000000336112000056607025042 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_pending_contact_info_h_HEADER_GUARD_ #define _TelepathyQt_pending_contact_info_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include class QDBusPendingCallWatcher; namespace Tp { class TP_QT_EXPORT PendingContactInfo : public PendingOperation { Q_OBJECT Q_DISABLE_COPY(PendingContactInfo); public: ~PendingContactInfo(); ContactPtr contact() const; Contact::InfoFields infoFields() const; private Q_SLOTS: TP_QT_NO_EXPORT void onCallFinished(QDBusPendingCallWatcher *watcher); private: friend class Contact; TP_QT_NO_EXPORT PendingContactInfo(const ContactPtr &contact); struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/simple-observer.cpp0000644000175200001440000005535112000056607024513 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/simple-observer-internal.h" #include "TelepathyQt/_gen/simple-observer.moc.hpp" #include "TelepathyQt/_gen/simple-observer-internal.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include #include #include #include #include #include namespace Tp { QHash >, WeakPtr > SimpleObserver::Private::observers; uint SimpleObserver::Private::numObservers = 0; SimpleObserver::Private::Private(SimpleObserver *parent, const AccountPtr &account, const ChannelClassSpecList &channelFilter, const QString &contactIdentifier, bool requiresNormalization, const QList &extraChannelFeatures) : parent(parent), account(account), channelFilter(channelFilter), contactIdentifier(contactIdentifier), extraChannelFeatures(extraChannelFeatures) { QSet normalizedChannelFilter = channelFilter.toSet(); QPair > observerUniqueId( account->dbusConnection().baseService(), normalizedChannelFilter); observer = SharedPtr(observers.value(observerUniqueId)); if (!observer) { SharedPtr fakeAccountFactory = FakeAccountFactory::create( account->dbusConnection()); cr = ClientRegistrar::create( AccountFactoryPtr::qObjectCast(fakeAccountFactory), account->connectionFactory(), account->channelFactory(), account->contactFactory()); QString observerName = QString(QLatin1String("TpQtSO_%1_%2")) .arg(account->dbusConnection().baseService() .replace(QLatin1String(":"), QLatin1String("_")) .replace(QLatin1String("."), QLatin1String("_"))) .arg(numObservers++); observer = SharedPtr(new Observer(cr, fakeAccountFactory, normalizedChannelFilter.toList(), observerName)); if (!cr->registerClient(observer, observerName, false)) { warning() << "Unable to register observer" << observerName; observer.reset(); cr.reset(); return; } debug() << "Observer" << observerName << "registered"; observers.insert(observerUniqueId, observer); } else { debug() << "Observer" << observer->observerName() << "already registered and matches filter, using it"; cr = ClientRegistrarPtr(observer->clientRegistrar()); } observer->registerExtraChannelFeatures(extraChannelFeatures); observer->registerAccount(account); if (contactIdentifier.isEmpty() || !requiresNormalization) { normalizedContactIdentifier = contactIdentifier; } else { parent->connect(account.data(), SIGNAL(connectionChanged(Tp::ConnectionPtr)), SLOT(onAccountConnectionChanged(Tp::ConnectionPtr))); } parent->connect(observer.data(), SIGNAL(newChannels(Tp::AccountPtr,QList)), SLOT(onNewChannels(Tp::AccountPtr,QList))); parent->connect(observer.data(), SIGNAL(channelInvalidated(Tp::AccountPtr,Tp::ChannelPtr,QString,QString)), SLOT(onChannelInvalidated(Tp::AccountPtr,Tp::ChannelPtr,QString,QString))); } bool SimpleObserver::Private::filterChannel(const AccountPtr &channelAccount, const ChannelPtr &channel) { if (channelAccount != account) { return false; } if (contactIdentifier.isEmpty()) { return true; } QString targetId = channel->immutableProperties().value( TP_QT_IFACE_CHANNEL + QLatin1String(".TargetID")).toString(); if (targetId != normalizedContactIdentifier) { // we didn't filter per contact, let's filter here return false; } return true; } void SimpleObserver::Private::insertChannels(const AccountPtr &channelsAccount, const QList &newChannels) { QSet match; foreach (const ChannelPtr &channel, newChannels) { if (!channels.contains(channel) && filterChannel(channelsAccount, channel)) { match.insert(channel); } } if (match.isEmpty()) { return; } channels.unite(match); emit parent->newChannels(match.toList()); } void SimpleObserver::Private::removeChannel(const AccountPtr &channelAccount, const ChannelPtr &channel, const QString &errorName, const QString &errorMessage) { if (!channels.contains(channel) || !filterChannel(channelAccount, channel)) { return; } channels.remove(channel); emit parent->channelInvalidated(channel, errorName, errorMessage); } void SimpleObserver::Private::processChannelsQueue() { if (channelsQueue.isEmpty()) { return; } while (!channelsQueue.isEmpty()) { (this->*(channelsQueue.dequeue()))(); } } void SimpleObserver::Private::processNewChannelsQueue() { NewChannelsInfo info = newChannelsQueue.dequeue(); insertChannels(info.channelsAccount, info.channels); } void SimpleObserver::Private::processChannelsInvalidationQueue() { ChannelInvalidationInfo info = channelsInvalidationQueue.dequeue(); removeChannel(info.channelAccount, info.channel, info.errorName, info.errorMessage); } SimpleObserver::Private::Observer::Observer(const WeakPtr &cr, const SharedPtr &fakeAccountFactory, const ChannelClassSpecList &channelFilter, const QString &observerName) : AbstractClient(), QObject(), AbstractClientObserver(channelFilter, true), mCr(cr), mFakeAccountFactory(fakeAccountFactory), mObserverName(observerName) { } SimpleObserver::Private::Observer::~Observer() { // no need to delete channel wrappers here as they have 'this' as parent // no need to delete context infos here as this observer will never be deleted before all // PendingComposites finish (hold reference to this), which will properly delete them // no need to unregister this observer here as the client registrar destructor will // unregister it } void SimpleObserver::Private::Observer::observeChannels( const MethodInvocationContextPtr<> &context, const AccountPtr &account, const ConnectionPtr &connection, const QList &channels, const ChannelDispatchOperationPtr &dispatchOperation, const QList &requestsSatisfied, const ObserverInfo &observerInfo) { if (!mAccounts.contains(account)) { context->setFinished(); return; } QList readyOps; QList newChannels; foreach (const ChannelPtr &channel, channels) { if (mIncompleteChannels.contains(channel) || mChannels.contains(channel)) { // we are already observing this channel continue; } // this shouldn't happen, but in any case if (!channel->isValid()) { warning() << "Channel received to observe is invalid. " "Ignoring channel"; continue; } SimpleObserver::Private::ChannelWrapper *wrapper = new SimpleObserver::Private::ChannelWrapper(account, channel, featuresFor(ChannelClassSpec(channel->immutableProperties())), this); mIncompleteChannels.insert(channel, wrapper); connect(wrapper, SIGNAL(channelInvalidated(Tp::AccountPtr,Tp::ChannelPtr,QString,QString)), SLOT(onChannelInvalidated(Tp::AccountPtr,Tp::ChannelPtr,QString,QString))); newChannels.append(channel); readyOps.append(wrapper->becomeReady()); } if (readyOps.isEmpty()) { context->setFinished(); return; } PendingComposite *pc = new PendingComposite(readyOps, false /* failOnFirstError */, SharedPtr(this)); mObserveChannelsInfo.insert(pc, new ContextInfo(context, account, newChannels)); connect(pc, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onChannelsReady(Tp::PendingOperation*))); } void SimpleObserver::Private::Observer::onChannelInvalidated(const AccountPtr &channelAccount, const ChannelPtr &channel, const QString &errorName, const QString &errorMessage) { if (mIncompleteChannels.contains(channel)) { // we are still handling the channel, wait for onChannelsReady that will properly remove // it from mChannels return; } emit channelInvalidated(channelAccount, channel, errorName, errorMessage); Q_ASSERT(mChannels.contains(channel)); delete mChannels.take(channel); } void SimpleObserver::Private::Observer::onChannelsReady(PendingOperation *op) { ContextInfo *info = mObserveChannelsInfo.value(op); foreach (const ChannelPtr &channel, info->channels) { Q_ASSERT(mIncompleteChannels.contains(channel)); ChannelWrapper *wrapper = mIncompleteChannels.take(channel); mChannels.insert(channel, wrapper); } emit newChannels(info->account, info->channels); foreach (const ChannelPtr &channel, info->channels) { ChannelWrapper *wrapper = mChannels.value(channel); if (!channel->isValid()) { mChannels.remove(channel); emit channelInvalidated(info->account, channel, channel->invalidationReason(), channel->invalidationMessage()); delete wrapper; } } mObserveChannelsInfo.remove(op); info->context->setFinished(); delete info; } Features SimpleObserver::Private::Observer::featuresFor( const ChannelClassSpec &channelClass) const { Features features; foreach (const ChannelClassFeatures &spec, mExtraChannelFeatures) { if (spec.first.isSubsetOf(channelClass)) { features.unite(spec.second); } } return features; } SimpleObserver::Private::ChannelWrapper::ChannelWrapper(const AccountPtr &channelAccount, const ChannelPtr &channel, const Features &extraChannelFeatures, QObject *parent) : QObject(parent), mChannelAccount(channelAccount), mChannel(channel), mExtraChannelFeatures(extraChannelFeatures) { connect(channel.data(), SIGNAL(invalidated(Tp::DBusProxy*,QString,QString)), SLOT(onChannelInvalidated(Tp::DBusProxy*,QString,QString))); } PendingOperation *SimpleObserver::Private::ChannelWrapper::becomeReady() { PendingOperation *op; if (!mChannel->isReady(mExtraChannelFeatures)) { // The channel factory passed to the Account used by SimpleObserver does // not contain the extra features, request them op = mChannel->becomeReady(mExtraChannelFeatures); } else { op = new PendingSuccess(mChannel); } return op; } void SimpleObserver::Private::ChannelWrapper::onChannelInvalidated(DBusProxy *proxy, const QString &errorName, const QString &errorMessage) { Q_ASSERT(proxy == mChannel.data()); emit channelInvalidated(mChannelAccount, mChannel, errorName, errorMessage); } /** * \class SimpleObserver * \ingroup utils * \headerfile TelepathyQt/simple-observer.h * * \brief The SimpleObserver class provides an easy way to track channels * in an account and can be optionally filtered by a contact. */ /** * Create a new SimpleObserver object. * * Events will be signalled for all channels in \a account that match * \a channelFilter for all contacts. * * \param channelFilter A specification of the channels in which this observer * is interested. * \param account The account used to listen to events. * \param extraChannelFeatures Extra channel features to be enabled. All channels emitted in * newChannels() will have the extra features that match their * immutable properties enabled. * \return An SimpleObserverPtr object pointing to the newly created SimpleObserver object. */ SimpleObserverPtr SimpleObserver::create( const AccountPtr &account, const ChannelClassSpecList &channelFilter, const QList &extraChannelFeatures) { return create(account, channelFilter, extraChannelFeatures); } /** * Create a new SimpleObserver object. * * Events will be signalled for all channels in \a account established with * \a contact, if not null, and that match \a channelFilter. * * \param channelFilter A specification of the channels in which this observer * is interested. * \param account The account used to listen to events. * \param contact The contact used to filter events. * \param extraChannelFeatures Extra channel features to be enabled. All channels emitted in * newChannels() will have the extra features that match their * immutable properties enabled. * \return An SimpleObserverPtr object pointing to the newly created SimpleObserver object. */ SimpleObserverPtr SimpleObserver::create( const AccountPtr &account, const ChannelClassSpecList &channelFilter, const ContactPtr &contact, const QList &extraChannelFeatures) { if (contact) { return create(account, channelFilter, contact->id(), false, extraChannelFeatures); } return create(account, channelFilter, QString(), false, extraChannelFeatures); } /** * Create a new SimpleObserver object. * * Events will be signalled for all channels in \a account established * with a contact identified by \a contactIdentifier, if non-empty, and that match * \a channelFilter. * * \param channelFilter A specification of the channels in which this observer * is interested. * \param account The account used to listen to events. * \param contactIdentifier The identifier of the contact used to filter events. * \param extraChannelFeatures Extra channel features to be enabled. All channels emitted in * newChannels() will have the extra features that match their * immutable properties enabled. * \return An SimpleObserverPtr object pointing to the newly created SimpleObserver object. */ SimpleObserverPtr SimpleObserver::create( const AccountPtr &account, const ChannelClassSpecList &channelFilter, const QString &contactIdentifier, const QList &extraChannelFeatures) { return create(account, channelFilter, contactIdentifier, true, extraChannelFeatures); } SimpleObserverPtr SimpleObserver::create( const AccountPtr &account, const ChannelClassSpecList &channelFilter, const QString &contactIdentifier, bool requiresNormalization, const QList &extraChannelFeatures) { return SimpleObserverPtr(new SimpleObserver(account, channelFilter, contactIdentifier, requiresNormalization, extraChannelFeatures)); } /** * Construct a new SimpleObserver object. * * \param cr The ClientRegistrar used to register this observer. * \param channelFilter The channel filter used by this observer. * \param account The account used to listen to events. * \param extraChannelFeatures Extra channel features to be enabled. All channels emitted in * newChannels() will have the extra features that match their * immutable properties enabled. * \return An SimpleObserverPtr object pointing to the newly created SimpleObserver object. */ SimpleObserver::SimpleObserver(const AccountPtr &account, const ChannelClassSpecList &channelFilter, const QString &contactIdentifier, bool requiresNormalization, const QList &extraChannelFeatures) : mPriv(new Private(this, account, channelFilter, contactIdentifier, requiresNormalization, extraChannelFeatures)) { if (mPriv->observer) { // populate our channels list with current observer channels QHash > channels; foreach (const Private::ChannelWrapper *wrapper, mPriv->observer->channels()) { channels[wrapper->channelAccount()].append(wrapper->channel()); } QHash >::const_iterator it = channels.constBegin(); QHash >::const_iterator end = channels.constEnd(); for (; it != end; ++it) { onNewChannels(it.key(), it.value()); } if (requiresNormalization) { debug() << "Contact id requires normalization. " "Queueing events until it is normalized"; onAccountConnectionChanged(account->connection()); } } } /** * Class destructor. */ SimpleObserver::~SimpleObserver() { delete mPriv; } /** * Return the account used to listen to events. * * \return A pointer to the Account object. */ AccountPtr SimpleObserver::account() const { return mPriv->account; } /** * Return a specification of the channels that this observer is interested. * * \return The specification of the channels as a list of ChannelClassSpec objects. */ ChannelClassSpecList SimpleObserver::channelFilter() const { return mPriv->channelFilter; } /** * Return the extra channel features to be enabled based on the channels immutable properties. * * \return The features as a list of ChannelClassFeatures objects. */ QList SimpleObserver::extraChannelFeatures() const { return mPriv->extraChannelFeatures; } /** * Return the channels being observed. * * \return A list of pointers to Channel objects. */ QList SimpleObserver::channels() const { return mPriv->channels.toList(); } /** * Return the identifier of the contact used to filter events, or an empty string if none was * provided at construction. * * \return The identifier of the contact. */ QString SimpleObserver::contactIdentifier() const { return mPriv->contactIdentifier; } void SimpleObserver::onAccountConnectionChanged(const Tp::ConnectionPtr &connection) { if (connection) { connect(connection->becomeReady(Connection::FeatureConnected), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onAccountConnectionConnected())); } } void SimpleObserver::onAccountConnectionConnected() { ConnectionPtr conn = mPriv->account->connection(); // check here again as the account connection may have changed and the op failed if (!conn || conn->status() != ConnectionStatusConnected) { return; } debug() << "Normalizing contact id" << mPriv->contactIdentifier; ContactManagerPtr contactManager = conn->contactManager(); connect(contactManager->contactsForIdentifiers(QStringList() << mPriv->contactIdentifier), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onContactConstructed(Tp::PendingOperation*))); } void SimpleObserver::onContactConstructed(Tp::PendingOperation *op) { if (op->isError()) { // what should we do here? retry? wait for a new connection? warning() << "Normalizing contact id failed with" << op->errorName() << " : " << op->errorMessage(); return; } PendingContacts *pc = qobject_cast(op); Q_ASSERT((pc->contacts().size() + pc->invalidIdentifiers().size()) == 1); if (!pc->invalidIdentifiers().isEmpty()) { warning() << "Normalizing contact id failed with invalid id" << mPriv->contactIdentifier; return; } ContactPtr contact = pc->contacts().first(); debug() << "Contact id" << mPriv->contactIdentifier << "normalized to" << contact->id(); mPriv->normalizedContactIdentifier = contact->id(); mPriv->processChannelsQueue(); // disconnect all account signals we are handling disconnect(mPriv->account.data(), 0, this, 0); } void SimpleObserver::onNewChannels(const AccountPtr &channelsAccount, const QList &channels) { if (!mPriv->contactIdentifier.isEmpty() && mPriv->normalizedContactIdentifier.isEmpty()) { mPriv->newChannelsQueue.append(Private::NewChannelsInfo(channelsAccount, channels)); mPriv->channelsQueue.append(&SimpleObserver::Private::processNewChannelsQueue); return; } mPriv->insertChannels(channelsAccount, channels); } void SimpleObserver::onChannelInvalidated(const AccountPtr &channelAccount, const ChannelPtr &channel, const QString &errorName, const QString &errorMessage) { if (!mPriv->contactIdentifier.isEmpty() && mPriv->normalizedContactIdentifier.isEmpty()) { mPriv->channelsInvalidationQueue.append(Private::ChannelInvalidationInfo(channelAccount, channel, errorName, errorMessage)); mPriv->channelsQueue.append(&SimpleObserver::Private::processChannelsInvalidationQueue); return; } mPriv->removeChannel(channelAccount, channel, errorName, errorMessage); } /** * \fn void SimpleObserver::newChannels(const QList &channels) * * Emitted whenever new channels that match this observer's criteria are created. * * \param channels The new channels. */ /** * \fn void SimpleObserver::channelInvalidated(const Tp::ChannelPtr &channel, * const QString &errorName, const QString &errorMessage) * * Emitted whenever a channel that is being observed is invalidated. * * \param channel The channel that was invalidated. * \param errorName A D-Bus error name (a string in a subset * of ASCII, prefixed with a reversed domain name). * \param errorMessage A debugging message associated with the error. */ } // Tp telepathy-qt-0.9.3/TelepathyQt/protocol-parameter.cpp0000644000175200001440000001357112000056607025212 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/debug-internal.h" #include namespace Tp { struct TP_QT_NO_EXPORT ProtocolParameter::Private : public QSharedData { Private(const ParamSpec &sp) : spec(sp), type(variantTypeFromDBusSignature(spec.signature)) { init(); } Private(const QString &name, const QString &dbusSignature, ConnMgrParamFlags flags, const QVariant &defaultValue) : type(variantTypeFromDBusSignature(dbusSignature)) { spec.name = name; spec.flags = flags; spec.signature = dbusSignature; spec.defaultValue = QDBusVariant(defaultValue); init(); } void init() { if (spec.flags & ConnMgrParamFlagHasDefault) { if (spec.defaultValue.variant() == QVariant::Invalid) { // flags contains HasDefault but no default value is passed, // lets warn and build a default value from signature warning() << "Building ProtocolParameter with flags containing ConnMgrParamFlagHasDefault" " and no default value, generating a dummy one from signature"; spec.defaultValue = QDBusVariant( parseValueWithDBusSignature(QString(), spec.signature)); } } else { if (spec.defaultValue.variant() != QVariant::Invalid) { // flags does not contain HasDefault but a default value is passed, // lets add HasDefault to flags debug() << "Building ProtocolParameter with flags not containing ConnMgrParamFlagHasDefault" " and a default value, updating flags to contain ConnMgrParamFlagHasDefault"; spec.flags |= ConnMgrParamFlagHasDefault; } } } ParamSpec spec; QVariant::Type type; }; /** * \class ProtocolParameter * \ingroup clientcm * \headerfile TelepathyQt/protocol-parameter.h * * \brief The ProtocolParameter class represents a Telepathy protocol parameter. */ ProtocolParameter::ProtocolParameter() { } ProtocolParameter::ProtocolParameter(const ParamSpec &spec) : mPriv(new Private(spec)) { } ProtocolParameter::ProtocolParameter(const QString &name, const QDBusSignature &dbusSignature, ConnMgrParamFlags flags, QVariant defaultValue) : mPriv(new Private(name, dbusSignature.signature(), flags, defaultValue)) { } ProtocolParameter::ProtocolParameter(const QString &name, const QString &dbusSignature, ConnMgrParamFlags flags, QVariant defaultValue) : mPriv(new Private(name, dbusSignature, flags, defaultValue)) { } ProtocolParameter::ProtocolParameter(const ProtocolParameter &other) : mPriv(other.mPriv) { } ProtocolParameter::~ProtocolParameter() { } ProtocolParameter &ProtocolParameter::operator=(const ProtocolParameter &other) { this->mPriv = other.mPriv; return *this; } bool ProtocolParameter::operator==(const ProtocolParameter &other) const { if (!isValid() || !other.isValid()) { if (!isValid() && !other.isValid()) { return true; } return false; } return (mPriv->spec.name == other.name()); } bool ProtocolParameter::operator==(const QString &name) const { if (!isValid()) { return false; } return (mPriv->spec.name == name); } bool ProtocolParameter::operator<(const Tp::ProtocolParameter& other) const { return mPriv->spec.name < other.name(); } QString ProtocolParameter::name() const { if (!isValid()) { return QString(); } return mPriv->spec.name; } QDBusSignature ProtocolParameter::dbusSignature() const { if (!isValid()) { return QDBusSignature(); } return QDBusSignature(mPriv->spec.signature); } QVariant::Type ProtocolParameter::type() const { if (!isValid()) { return QVariant::Invalid; } return mPriv->type; } QVariant ProtocolParameter::defaultValue() const { if (!isValid()) { return QVariant(); } return mPriv->spec.defaultValue.variant(); } bool ProtocolParameter::isRequired() const { if (!isValid()) { return false; } return mPriv->spec.flags & ConnMgrParamFlagRequired; } bool ProtocolParameter::isSecret() const { if (!isValid()) { return false; } return mPriv->spec.flags & ConnMgrParamFlagSecret; } bool ProtocolParameter::isRequiredForRegistration() const { if (!isValid()) { return false; } return mPriv->spec.flags & ConnMgrParamFlagRegister; } ParamSpec ProtocolParameter::bareParameter() const { if (!isValid()) { return ParamSpec(); } return mPriv->spec; } uint qHash(const ProtocolParameter& parameter) { return qHash(parameter.name()); } } // Tp telepathy-qt-0.9.3/TelepathyQt/ChannelInterface0000644000175200001440000000036512000056607024000 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelInterface_HEADER_GUARD_ #define _TelepathyQt_ChannelInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/ChannelRequestHints0000644000175200001440000000040312000056607024527 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelRequestHints_HEADER_GUARD_ #define _TelepathyQt_ChannelRequestHints_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/base-connection.h0000644000175200001440000000662512000056607024111 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_base_connection_h_HEADER_GUARD_ #define _TelepathyQt_base_connection_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include class QString; namespace Tp { class TP_QT_EXPORT BaseConnection : public DBusService { Q_OBJECT Q_DISABLE_COPY(BaseConnection) public: static BaseConnectionPtr create(const QString &cmName, const QString &protocolName, const QVariantMap ¶meters) { return BaseConnectionPtr(new BaseConnection( QDBusConnection::sessionBus(), cmName, protocolName, parameters)); } template static SharedPtr create(const QString &cmName, const QString &protocolName, const QVariantMap ¶meters) { return SharedPtr(new BaseConnectionSubclass( QDBusConnection::sessionBus(), cmName, protocolName, parameters)); } static BaseConnectionPtr create(const QDBusConnection &dbusConnection, const QString &cmName, const QString &protocolName, const QVariantMap ¶meters) { return BaseConnectionPtr(new BaseConnection( dbusConnection, cmName, protocolName, parameters)); } template static SharedPtr create(const QDBusConnection &dbusConnection, const QString &cmName, const QString &protocolName, const QVariantMap ¶meters) { return SharedPtr(new BaseConnectionSubclass( dbusConnection, cmName, protocolName, parameters)); } virtual ~BaseConnection(); QString cmName() const; QString protocolName() const; QVariantMap parameters() const; QVariantMap immutableProperties() const; virtual QString uniqueName() const; bool registerObject(DBusError *error = NULL); Q_SIGNALS: void disconnected(); protected: BaseConnection(const QDBusConnection &dbusConnection, const QString &cmName, const QString &protocolName, const QVariantMap ¶meters); virtual bool registerObject(const QString &busName, const QString &objectPath, DBusError *error); private: class Adaptee; friend class Adaptee; class Private; friend class Private; Private *mPriv; }; } #endif telepathy-qt-0.9.3/TelepathyQt/ConnectionInterfaceAvatarsInterface0000644000175200001440000000043612000056607027671 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ConnectionInterfaceAvatarsInterface_HEADER_GUARD_ #define _TelepathyQt_ConnectionInterfaceAvatarsInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/captcha-authentication.h0000644000175200001440000000605612000056607025460 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_captcha_authentication_h_HEADER_GUARD_ #define _TelepathyQt_captcha_authentication_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include namespace Tp { class PendingCaptchaAnswer; class PendingCaptchaCancel; class PendingCaptchas; class TP_QT_EXPORT CaptchaAuthentication : public Tp::Object { Q_OBJECT Q_DISABLE_COPY(CaptchaAuthentication) public: enum ChallengeType { NoChallenge = 0, OCRChallenge = 1, AudioRecognitionChallenge = 2, PictureQuestionChallenge = 4, PictureRecognitionChallenge = 8, TextQuestionChallenge = 16, SpeechQuestionChallenge = 32, SpeechRecognitionChallenge = 64, VideoQuestionChallenge = 128, VideoRecognitionChallenge = 256, UnknownChallenge = 32768 }; Q_DECLARE_FLAGS(ChallengeTypes, ChallengeType) virtual ~CaptchaAuthentication(); ChannelPtr channel() const; bool canRetry() const; Tp::CaptchaStatus status() const; QString error() const; Connection::ErrorDetails errorDetails() const; Tp::PendingCaptchas *requestCaptchas(const QStringList &preferredMimeTypes = QStringList(), ChallengeTypes preferredTypes = ~ChallengeTypes(NoChallenge)); Tp::PendingOperation *answer(uint id, const QString &answer); Tp::PendingOperation *answer(const Tp::CaptchaAnswers &response); Q_SIGNALS: void statusChanged(Tp::CaptchaStatus status); public Q_SLOTS: Tp::PendingOperation *cancel(Tp::CaptchaCancelReason reason, const QString &message = QString()); private Q_SLOTS: TP_QT_NO_EXPORT void onPropertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties); private: TP_QT_NO_EXPORT CaptchaAuthentication(const ChannelPtr &parent); friend class ServerAuthenticationChannel; struct Private; friend struct Private; Private *mPriv; }; } // namespace Tp Q_DECLARE_OPERATORS_FOR_FLAGS(Tp::CaptchaAuthentication::ChallengeTypes) #endif telepathy-qt-0.9.3/TelepathyQt/message.h0000644000175200001440000001051312000056607022455 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_message_h_HEADER_GUARD_ #define _TelepathyQt_message_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include class QDateTime; namespace Tp { class Contact; class TextChannel; class TP_QT_EXPORT Message { public: Message(ChannelTextMessageType, const QString &); Message(const Message &other); ~Message(); Message &operator=(const Message &other); bool operator==(const Message &other) const; inline bool operator!=(const Message &other) const { return !(*this == other); } // Convenient access to headers QDateTime sent() const; ChannelTextMessageType messageType() const; bool isTruncated() const; bool hasNonTextContent() const; QString messageToken() const; bool isSpecificToDBusInterface() const; QString dbusInterface() const; QString text() const; // Direct access to the whole message (header and body) MessagePart header() const; int size() const; MessagePart part(uint index) const; MessagePartList parts() const; private: friend class ContactMessenger; friend class ReceivedMessage; friend class TextChannel; TP_QT_NO_EXPORT Message(); TP_QT_NO_EXPORT Message(const MessagePartList &parts); TP_QT_NO_EXPORT Message(uint, uint, const QString &); struct Private; friend struct Private; QSharedDataPointer mPriv; }; class TP_QT_EXPORT ReceivedMessage : public Message { public: class DeliveryDetails { public: DeliveryDetails(); DeliveryDetails(const DeliveryDetails &other); ~DeliveryDetails(); DeliveryDetails &operator=(const DeliveryDetails &other); bool isValid() const { return mPriv.constData() != 0; } DeliveryStatus status() const; bool hasOriginalToken() const; QString originalToken() const; bool isError() const; ChannelTextSendError error() const; bool hasDebugMessage() const; QString debugMessage() const; QString dbusError() const; bool hasEchoedMessage() const; Message echoedMessage() const; private: friend class ReceivedMessage; TP_QT_NO_EXPORT DeliveryDetails(const MessagePartList &parts); struct Private; friend struct Private; QSharedDataPointer mPriv; }; ReceivedMessage(const ReceivedMessage &other); ReceivedMessage &operator=(const ReceivedMessage &other); ~ReceivedMessage(); QDateTime received() const; ContactPtr sender() const; QString senderNickname() const; QString supersededToken() const; bool isScrollback() const; bool isRescued() const; bool isDeliveryReport() const; DeliveryDetails deliveryDetails() const; bool isFromChannel(const TextChannelPtr &channel) const; private: friend class TextChannel; TP_QT_NO_EXPORT ReceivedMessage(const MessagePartList &parts, const TextChannelPtr &channel); TP_QT_NO_EXPORT ReceivedMessage(); TP_QT_NO_EXPORT uint senderHandle() const; TP_QT_NO_EXPORT QString senderId() const; TP_QT_NO_EXPORT uint pendingId() const; TP_QT_NO_EXPORT void setForceNonText(); TP_QT_NO_EXPORT void clearSenderHandle(); TP_QT_NO_EXPORT void setSender(const ContactPtr &sender); }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/contact-messenger.cpp0000644000175200001440000002153112000056607025007 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/contact-messenger.moc.hpp" #include "TelepathyQt/debug-internal.h" #include "TelepathyQt/future-internal.h" #include #include #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT ContactMessenger::Private { Private(ContactMessenger *parent, const AccountPtr &account, const QString &contactIdentifier) : parent(parent), account(account), contactIdentifier(contactIdentifier), cdMessagesInterface(0) { } PendingSendMessage *sendMessage(const Message &message, MessageSendingFlags flags); ContactMessenger *parent; AccountPtr account; QString contactIdentifier; SimpleTextObserverPtr observer; TpFuture::Client::ChannelDispatcherInterfaceMessagesInterface *cdMessagesInterface; }; PendingSendMessage *ContactMessenger::Private::sendMessage(const Message &message, MessageSendingFlags flags) { if (!cdMessagesInterface) { cdMessagesInterface = new TpFuture::Client::ChannelDispatcherInterfaceMessagesInterface( account->dbusConnection(), TP_QT_CHANNEL_DISPATCHER_BUS_NAME, TP_QT_CHANNEL_DISPATCHER_OBJECT_PATH, parent); } PendingSendMessage *op = new PendingSendMessage(ContactMessengerPtr(parent), message); // TODO: is there a way to avoid this? Ideally TpFuture classes should use Tp types. TpFuture::MessagePartList parts; foreach (const Tp::MessagePart &part, message.parts()) { parts << static_cast >(part); } connect(new QDBusPendingCallWatcher( cdMessagesInterface->SendMessage(QDBusObjectPath(account->objectPath()), contactIdentifier, parts, (uint) flags)), SIGNAL(finished(QDBusPendingCallWatcher*)), op, SLOT(onCDMessageSent(QDBusPendingCallWatcher*))); return op; } /** * \class ContactMessenger * \ingroup clientaccount * \headerfile TelepathyQt/contact-messenger.h * * \brief The ContactMessenger class provides an easy way to send text messages to a contact * and also track sent/receive text messages from the same contact. */ /** * Create a new ContactMessenger object. * * \param account The account this messenger is communicating with. * \param contact The contact this messenger is communicating with. * \return An ContactMessengerPtr object pointing to the newly created ContactMessenger object, * or a null ContactMessengerPtr if \a contact is null. */ ContactMessengerPtr ContactMessenger::create(const AccountPtr &account, const ContactPtr &contact) { if (!contact) { warning() << "Contact used to create a ContactMessenger object must be " "valid"; return ContactMessengerPtr(); } return ContactMessengerPtr(new ContactMessenger(account, contact->id())); } /** * Create a new ContactMessenger object. * * \param account The account this messenger is communicating with. * \param contactIdentifier The identifier of the contact this messenger is communicating with. * \return An ContactMessengerPtr object pointing to the newly created ContactMessenger object, * or a null ContactMessengerPtr if \a contact is null. */ ContactMessengerPtr ContactMessenger::create(const AccountPtr &account, const QString &contactIdentifier) { if (contactIdentifier.isEmpty()) { warning() << "Contact identifier used to create a ContactMessenger object must be " "non-empty"; return ContactMessengerPtr(); } return ContactMessengerPtr(new ContactMessenger(account, contactIdentifier)); } /** * Construct a new ContactMessenger object. * * \param account The account this messenger is communicating with. * \param contactIdentifier The identifier of the contact this messenger is communicating with. */ ContactMessenger::ContactMessenger(const AccountPtr &account, const QString &contactIdentifier) : mPriv(new Private(this, account, contactIdentifier)) { mPriv->observer = SimpleTextObserver::create(account, contactIdentifier); connect(mPriv->observer.data(), SIGNAL(messageSent(Tp::Message,Tp::MessageSendingFlags,QString,Tp::TextChannelPtr)), SIGNAL(messageSent(Tp::Message,Tp::MessageSendingFlags,QString,Tp::TextChannelPtr))); connect(mPriv->observer.data(), SIGNAL(messageReceived(Tp::ReceivedMessage,Tp::TextChannelPtr)), SIGNAL(messageReceived(Tp::ReceivedMessage,Tp::TextChannelPtr))); } /** * Class destructor. */ ContactMessenger::~ContactMessenger() { delete mPriv; } /** * Return the account this messenger is communicating with. * * \return A pointer to the Account object. */ AccountPtr ContactMessenger::account() const { return mPriv->account; } /** * Return the identifier of the contact this messenger is communicating with. * * \return The identifier of the contact. */ QString ContactMessenger::contactIdentifier() const { return mPriv->contactIdentifier; } /** * Return the list of text chats currently being observed. * * \return A list of pointers to TextChannel objects. */ QList ContactMessenger::textChats() const { return mPriv->observer->textChats(); } /** * Send a message to the contact identified by contactIdentifier() using account(). * * Note that the return from this method isn't ordered in any sane way, meaning that * messageSent() can be signalled either before or after the returned PendingSendMessage object * finishes. * * \param text The message text. * \param type The message type. * \param flags The message flags. * \return A PendingSendMessage which will emit PendingSendMessage::finished * once the reply is received and that can be used to check whether sending the * message succeeded or not. */ PendingSendMessage *ContactMessenger::sendMessage(const QString &text, ChannelTextMessageType type, MessageSendingFlags flags) { Message message(type, text); return mPriv->sendMessage(message, flags); } /** * Send a message to the contact identified by contactIdentifier() using account(). * * Note that the return from this method isn't ordered in any sane way, meaning that * messageSent() can be signalled either before or after the returned PendingSendMessage object * finishes. * * \param parts The message parts. * \param flags The message flags. * \return A PendingSendMessage which will emit PendingSendMessage::finished * once the reply is received and that can be used to check whether sending the * message succeeded or not. */ PendingSendMessage *ContactMessenger::sendMessage(const MessageContentPartList &parts, MessageSendingFlags flags) { Message message(parts.bareParts()); return mPriv->sendMessage(message, flags); } /** * \fn void ContactMessenger::messageSent(const Tp::Message &message, * Tp::MessageSendingFlags flags, const QString &sentMessageToken, * const Tp::TextChannelPtr &channel); * * Emitted whenever a text message on account() is sent to the contact * identified by contactIdentifier(). * * \param message The message sent. * \param flags The flags of the message that was sent. * \param sentMessageToken The token of the message that was sent. * \param channel The channel from which the message was sent. */ /** * \fn void ContactMessenger::messageReceived(const Tp::ReceivedMessage &message, * const Tp::TextChannelPtr &channel); * * Emitted whenever a text message on account() is received from the contact * identified by contactIdentifier(). * * \param message The message received. * \param channel The channel from which the message was received. */ } // Tp telepathy-qt-0.9.3/TelepathyQt/debug-receiver.cpp0000644000175200001440000001504412000056607024260 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011-2012 Collabora Ltd. * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/debug-receiver.moc.hpp" #include "TelepathyQt/_gen/cli-debug-receiver-body.hpp" #include "TelepathyQt/_gen/cli-debug-receiver.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT DebugReceiver::Private { Private(DebugReceiver *parent); static void introspectCore(Private *self); DebugReceiver *parent; Client::DebugInterface *baseInterface; }; DebugReceiver::Private::Private(DebugReceiver *parent) : parent(parent), baseInterface(new Client::DebugInterface(parent)) { ReadinessHelper::Introspectables introspectables; ReadinessHelper::Introspectable introspectableCore( QSet() << 0, // makesSenseForStatuses Features(), // dependsOnFeatures (core) QStringList(), // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &DebugReceiver::Private::introspectCore, this); introspectables[DebugReceiver::FeatureCore] = introspectableCore; parent->readinessHelper()->addIntrospectables(introspectables); } void DebugReceiver::Private::introspectCore(DebugReceiver::Private *self) { // this is done only to verify that the object exists... PendingVariantMap *op = self->baseInterface->requestAllProperties(); self->parent->connect(op, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onRequestAllPropertiesFinished(Tp::PendingOperation*))); } /** * \class DebugReceiver * \ingroup clientsideproxies * \headerfile TelepathyQt/debug-receiver.h * * \brief The DebugReceiver class provides a D-Bus proxy for a Telepathy * Debug object. * * A Debug object provides debugging messages from services. */ /** * Feature representing the core that needs to become ready to make the DebugReceiver * object usable. * * Note that this feature must be enabled in order to use most DebugReceiver methods. * See specific methods documentation for more details. * * When calling isReady(), becomeReady(), this feature is implicitly added * to the requested features. */ const Feature DebugReceiver::FeatureCore = Feature(QLatin1String(DebugReceiver::staticMetaObject.className()), 0, true); DebugReceiverPtr DebugReceiver::create(const QString &busName, const QDBusConnection &bus) { return DebugReceiverPtr(new DebugReceiver(bus, busName)); } DebugReceiver::DebugReceiver(const QDBusConnection &bus, const QString &busName) : StatefulDBusProxy(bus, busName, TP_QT_DEBUG_OBJECT_PATH, DebugReceiver::FeatureCore), mPriv(new Private(this)) { } DebugReceiver::~DebugReceiver() { delete mPriv; } /** * Retrieves buffered debug messages. * * This method returns a list of buffered debug messages. Depending on the service side * implementation, this may not be the entire list of all messages received during the * service's lifetime. Use monitoring instead for getting all the messages being streamed * in realtime. * * \return A pending operation returning a list of buffered debug messages when finished. * * \sa setMonitoringEnabled */ PendingDebugMessageList *DebugReceiver::fetchMessages() { return new PendingDebugMessageList(mPriv->baseInterface->GetMessages(), DebugReceiverPtr(this)); } /** * Enables or disables the emission of newDebugMessage. * * This function either enables or disables the emission of newDebugMessage. If monitoring is * enabled, everytime a message will be received, newDebugMessage will be emitted carrying the * new message. * * Monitoring should be disabled when not needed, as it generates a high amount of traffic on * the bus. It is always disabled by default. * * This method requires FeatureCore to be enabled. * * \param enabled Whether to enable or disable monitoring. * * \return A pending operation returning whether the operation succeeded or not. * * \sa newDebugMessage */ PendingOperation *DebugReceiver::setMonitoringEnabled(bool enabled) { if (!isReady()) { warning() << "DebugReceiver::setMonitoringEnabled called without DebugReceiver being ready"; return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("FeatureCore is not ready"), DebugReceiverPtr(this)); } return mPriv->baseInterface->setPropertyEnabled(enabled); } void DebugReceiver::onRequestAllPropertiesFinished(Tp::PendingOperation *op) { if (op->isError()) { readinessHelper()->setIntrospectCompleted( FeatureCore, false, op->errorName(), op->errorMessage()); } else { connect(mPriv->baseInterface, SIGNAL(NewDebugMessage(double,QString,uint,QString)), SLOT(onNewDebugMessage(double,QString,uint,QString))); readinessHelper()->setIntrospectCompleted(FeatureCore, true); } } void DebugReceiver::onNewDebugMessage(double time, const QString &domain, uint level, const QString &message) { DebugMessage msg; msg.timestamp = time; msg.domain = domain; msg.level = level; msg.message = message; emit newDebugMessage(msg); } /** * \fn void DebugReceiver::newDebugMessage(const Tp::DebugMessage &msg) * * Emitted whenever a new debug message is available. This will be emitted only if * monitoring has been previously enabled. * * \param msg The new debug message. * * \sa setMonitoringEnabled */ } // Tp telepathy-qt-0.9.3/TelepathyQt/profile.h0000644000175200001440000001154312000056607022475 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_profile_h_HEADER_GUARD_ #define _TelepathyQt_profile_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include #include #include namespace Tp { class ProtocolInfo; class TP_QT_EXPORT Profile : public RefCounted { Q_DISABLE_COPY(Profile); public: static ProfilePtr createForServiceName(const QString &serviceName); static ProfilePtr createForFileName(const QString &fileName); ~Profile(); QString serviceName() const; bool isValid() const; bool isFake() const; QString type() const; QString provider() const; QString name() const; QString iconName() const; QString cmName() const; QString protocolName() const; class Parameter { public: Parameter(); Parameter(const Parameter &other); Parameter(const QString &name, const QDBusSignature &dbusSignature, const QVariant &value, const QString &label, bool mandatory); ~Parameter(); QString name() const; QDBusSignature dbusSignature() const; QVariant::Type type() const; QVariant value() const; QString label() const; bool isMandatory() const; // TODO Add matches(Tp::Presence) method Parameter &operator=(const Parameter &other); private: friend class Profile; TP_QT_NO_EXPORT void setName(const QString &name); TP_QT_NO_EXPORT void setDBusSignature(const QDBusSignature &dbusSignature); TP_QT_NO_EXPORT void setValue(const QVariant &value); TP_QT_NO_EXPORT void setLabel(const QString &label); TP_QT_NO_EXPORT void setMandatory(bool mandatory); struct Private; friend struct Private; Private *mPriv; }; typedef QList ParameterList; ParameterList parameters() const; bool hasParameter(const QString &name) const; Parameter parameter(const QString &name) const; class Presence { public: Presence(); Presence(const Presence &other); Presence(const QString &id, const QString &label, const QString &iconName, const QString &message, bool disabled); ~Presence(); QString id() const; QString label() const; QString iconName() const; bool canHaveStatusMessage() const; bool isDisabled() const; Presence &operator=(const Presence &other); private: friend class Profile; TP_QT_NO_EXPORT void setId(const QString &id); TP_QT_NO_EXPORT void setLabel(const QString &label); TP_QT_NO_EXPORT void setIconName(const QString &iconName); TP_QT_NO_EXPORT void setMessage(const QString &message); TP_QT_NO_EXPORT void setDisabled(bool disabled); struct Private; friend struct Private; Private *mPriv; }; typedef QList PresenceList; bool allowOtherPresences() const; PresenceList presences() const; bool hasPresence(const QString &id) const; Presence presence(const QString &id) const; RequestableChannelClassSpecList unsupportedChannelClassSpecs() const; private: friend class Account; friend class ProfileManager; TP_QT_NO_EXPORT Profile(); TP_QT_NO_EXPORT Profile(const QString &serviceName, const QString &cmName, const QString &protocolName, const ProtocolInfo &protocolInfo); TP_QT_NO_EXPORT void setServiceName(const QString &serviceName); TP_QT_NO_EXPORT void setFileName(const QString &fileName); TP_QT_NO_EXPORT static QStringList searchDirs(); struct Private; friend struct Private; Private *mPriv; }; } // Tp Q_DECLARE_METATYPE(Tp::Profile::Parameter); Q_DECLARE_METATYPE(Tp::Profile::Presence); #endif telepathy-qt-0.9.3/TelepathyQt/dbus-tube-channel.cpp0000644000175200001440000004457712000056607024705 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/dbus-tube-channel.moc.hpp" #include "TelepathyQt/debug-internal.h" #include "TelepathyQt/outgoing-stream-tube-channel-internal.h" #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT DBusTubeChannel::Private { Private(DBusTubeChannel *parent); void extractProperties(const QVariantMap &props); void extractParticipants(const Tp::DBusTubeParticipants &participants); static void introspectDBusTube(Private *self); static void introspectBusNamesMonitoring(Private *self); ReadinessHelper *readinessHelper; // Public object DBusTubeChannel *parent; // Properties UIntList accessControls; QString serviceName; QHash contactsForBusNames; QString address; QHash pendingNewBusNamesToAdd; QList pendingNewBusNamesToRemove; QueuedContactFactory *queuedContactFactory; }; DBusTubeChannel::Private::Private(DBusTubeChannel *parent) : parent(parent), queuedContactFactory(new QueuedContactFactory(parent->connection()->contactManager(), parent)) { parent->connect(queuedContactFactory, SIGNAL(contactsRetrieved(QUuid,QList)), SLOT(onContactsRetrieved(QUuid,QList))); // Initialize readinessHelper + introspectables here readinessHelper = parent->readinessHelper(); ReadinessHelper::Introspectables introspectables; ReadinessHelper::Introspectable introspectableDBusTube( QSet() << 0, // makesSenseForStatuses Features() << TubeChannel::FeatureCore, // dependsOnFeatures (core) QStringList(), // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::introspectDBusTube, this); introspectables[DBusTubeChannel::FeatureCore] = introspectableDBusTube; ReadinessHelper::Introspectable introspectableBusNamesMonitoring( QSet() << 0, // makesSenseForStatuses Features() << DBusTubeChannel::FeatureCore, // dependsOnFeatures (core) QStringList(), // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::introspectBusNamesMonitoring, this); introspectables[DBusTubeChannel::FeatureBusNameMonitoring] = introspectableBusNamesMonitoring; readinessHelper->addIntrospectables(introspectables); } void DBusTubeChannel::Private::extractProperties(const QVariantMap &props) { serviceName = qdbus_cast(props[TP_QT_IFACE_CHANNEL_TYPE_DBUS_TUBE + QLatin1String(".ServiceName")]); accessControls = qdbus_cast(props[TP_QT_IFACE_CHANNEL_TYPE_DBUS_TUBE + QLatin1String(".SupportedAccessControls")]); } void DBusTubeChannel::Private::extractParticipants(const Tp::DBusTubeParticipants &participants) { contactsForBusNames.clear(); for (DBusTubeParticipants::const_iterator i = participants.constBegin(); i != participants.constEnd(); ++i) { QUuid uuid = queuedContactFactory->appendNewRequest(UIntList() << i.key()); pendingNewBusNamesToAdd.insert(uuid, i.value()); } } void DBusTubeChannel::Private::introspectBusNamesMonitoring(DBusTubeChannel::Private *self) { DBusTubeChannel *parent = self->parent; Client::ChannelTypeDBusTubeInterface *dbusTubeInterface = parent->interface(); // It must be present Q_ASSERT(dbusTubeInterface); // It makes sense only if this is a room, if that's not the case just spit a warning if (parent->targetHandleType() == static_cast(Tp::HandleTypeRoom)) { parent->connect(dbusTubeInterface, SIGNAL(DBusNamesChanged(Tp::DBusTubeParticipants,Tp::UIntList)), parent, SLOT(onDBusNamesChanged(Tp::DBusTubeParticipants,Tp::UIntList))); // Request the current DBusNames property connect(dbusTubeInterface->requestPropertyDBusNames(), SIGNAL(finished(Tp::PendingOperation*)), parent, SLOT(onRequestPropertyDBusNamesFinished(Tp::PendingOperation*))); } else { debug() << "FeatureBusNameMonitoring does not make sense in a P2P context"; self->readinessHelper->setIntrospectCompleted(DBusTubeChannel::FeatureBusNameMonitoring, false); } } void DBusTubeChannel::Private::introspectDBusTube(DBusTubeChannel::Private *self) { DBusTubeChannel *parent = self->parent; debug() << "Introspect dbus tube properties"; if (parent->immutableProperties().contains(TP_QT_IFACE_CHANNEL_TYPE_DBUS_TUBE + QLatin1String(".ServiceName")) && parent->immutableProperties().contains(TP_QT_IFACE_CHANNEL_TYPE_DBUS_TUBE + QLatin1String(".SupportedAccessControls"))) { self->extractProperties(parent->immutableProperties()); self->readinessHelper->setIntrospectCompleted(DBusTubeChannel::FeatureCore, true); } else { Client::ChannelTypeDBusTubeInterface *dbusTubeInterface = parent->interface(); parent->connect(dbusTubeInterface->requestAllProperties(), SIGNAL(finished(Tp::PendingOperation*)), parent, SLOT(onRequestAllPropertiesFinished(Tp::PendingOperation*))); } } /** * \class DBusTubeChannel * \ingroup clientchannel * \headerfile TelepathyQt/dbus-tube-channel.h * * \brief The DBusTubeChannel class represents a Telepathy channel of type DBusTube. * * It provides a private bus which can be used as a peer-to-peer connection in case of a * Contact Channel, or as a full-fledged bus in case of a Room Channel. * * DBusTubeChannel is an intermediate base class; OutgoingDBusTubeChannel and * IncomingDBusTubeChannel are the specialized classes used for locally and remotely initiated * tubes respectively. * * For more details, please refer to \telepathy_spec. * * See \ref async_model, \ref shared_ptr */ // Features declaration and documentation /** * Feature representing the core that needs to become ready to make the * DBusTubeChannel object usable. * * Note that this feature must be enabled in order to use most * DBusTubeChannel methods. * See specific methods documentation for more details. */ const Feature DBusTubeChannel::FeatureCore = Feature(QLatin1String(DBusTubeChannel::staticMetaObject.className()), 0); /** * Feature used in order to monitor bus names in this DBus tube. * * See bus name monitoring specific methods' documentation for more details. * * \sa busNameAdded(), busNameRemoved() */ const Feature DBusTubeChannel::FeatureBusNameMonitoring = Feature(QLatin1String(DBusTubeChannel::staticMetaObject.className()), 1); /** * Create a new DBusTubeChannel channel. * * \param connection Connection owning this channel, and specifying the * service. * \param objectPath The object path of this channel. * \param immutableProperties The immutable properties of this channel. * \return A DBusTubeChannelPtr object pointing to the newly created * DBusTubeChannel object. */ DBusTubeChannelPtr DBusTubeChannel::create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) { return DBusTubeChannelPtr(new DBusTubeChannel(connection, objectPath, immutableProperties)); } /** * Construct a new DBusTubeChannel object. * * \param connection Connection owning this channel, and specifying the * service. * \param objectPath The object path of this channel. * \param immutableProperties The immutable properties of this channel. */ DBusTubeChannel::DBusTubeChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) : TubeChannel(connection, objectPath, immutableProperties), mPriv(new Private(this)) { } /** * Class destructor. */ DBusTubeChannel::~DBusTubeChannel() { delete mPriv; } /** * Returns the service name which will be used over the tube. This should be a * well-known and valid DBus service name, in the form "org.my.service". * * This method requires DBusTubeChannel::FeatureCore to be enabled. * * \return the service name that will be used over the tube */ QString DBusTubeChannel::serviceName() const { if (!isReady(FeatureCore)) { warning() << "DBusTubeChannel::service() used with " "FeatureCore not ready"; return QString(); } return mPriv->serviceName; } /** * Checks if this tube is capable to accept or offer a private bus which * will allow connections only from the current user * * This method is useful only if your appliance is really security-sensitive: * in general, this restriction is always enabled by default on all tubes offered * or accepted from Telepathy-Qt, falling back to a general connection allowance * if this feature is not available. * * If your application does not have specific needs regarding DBus credentials, * you can trust Telepathy-Qt to do the right thing - in any case, the most secure * method available will be used by default. * * This method requires DBusTubeChannel::FeatureCore to be enabled. * * \return Whether this DBus tube is capable to accept or offer a private bus * restricting access to it to the current user only. * * \sa IncomingDBusTubeChannel::acceptTube * \sa OutgoingDBusTubeChannel::offerTube */ bool DBusTubeChannel::supportsRestrictingToCurrentUser() const { if (!isReady(FeatureCore)) { warning() << "DBusTubeChannel::supportsRestrictingToCurrentUser() used with " "FeatureCore not ready"; return false; } return mPriv->accessControls.contains(static_cast(Tp::SocketAccessControlCredentials)); } /** * If the tube has been opened, this function returns the private bus address you should be connecting * to for using this tube. * * Please note this function will return a meaningful value only if the tube has already * been opened successfully: in case of failure or the tube being still pending, an empty QString will be * returned. * * \note If you plan to use QtDBus for the DBus connection, please note you should always use * QDBusConnection::connectToPeer(), regardless of the fact this tube is a p2p or a group one. * The above function has been introduced in Qt 4.8, previous versions of Qt do not allow the use * of DBus Tubes through QtDBus. * * \returns The address of the private bus opened by this tube */ QString DBusTubeChannel::address() const { if (state() != TubeChannelStateOpen) { warning() << "DBusTubeChannel::address() can be called only if " "the tube has already been opened"; return QString(); } return mPriv->address; } /** * This function returns all the known active bus names in this tube. It requires * FeatureBusNameMonitoring to be activated; however, even a late activation of the * feature will make this function return a full list of all the connected bus * names, including the ones which appeared before the activation of the feature * itself. * * This function will always return an empty hash in case the tube is p2p, even if * FeatureBusNameMonitoring has been activated. * * This method requires FeatureBusNameMonitoring to be enabled. * * \returns A list of active connection ids known to this tube */ QHash DBusTubeChannel::contactsForBusNames() const { if (!isReady(FeatureBusNameMonitoring)) { warning() << "DBusTubeChannel::contactsForBusNames() used with " "FeatureBusNameMonitoring not ready"; return QHash(); } return mPriv->contactsForBusNames; } void DBusTubeChannel::onRequestAllPropertiesFinished(PendingOperation *op) { if (!op->isError()) { debug() << "RequestAllProperties succeeded"; PendingVariantMap *result = qobject_cast(op); QVariantMap map = result->result(); QVariantMap qualifiedMap; for (QVariantMap::const_iterator i = map.constBegin(); i != map.constEnd(); ++i) { qualifiedMap.insert(TP_QT_IFACE_CHANNEL_TYPE_DBUS_TUBE + QLatin1Char('.') + i.key(), i.value()); } mPriv->extractProperties(qualifiedMap); mPriv->readinessHelper->setIntrospectCompleted(DBusTubeChannel::FeatureCore, true); } else { warning().nospace() << "RequestAllProperties failed " "with " << op->errorName() << ": " << op->errorMessage(); mPriv->readinessHelper->setIntrospectCompleted(DBusTubeChannel::FeatureCore, false); } } void DBusTubeChannel::onRequestPropertyDBusNamesFinished(PendingOperation *op) { if (!op->isError()) { debug() << "RequestPropertyDBusNames succeeded"; PendingVariant *result = qobject_cast(op); DBusTubeParticipants participants = qdbus_cast(result->result()); if (participants.isEmpty()) { // Nothing to do actually, simply mark the feature as ready. mPriv->readinessHelper->setIntrospectCompleted(DBusTubeChannel::FeatureBusNameMonitoring, true); } else { // Wait for the queue to complete connect(mPriv->queuedContactFactory, SIGNAL(queueCompleted()), this, SLOT(onQueueCompleted())); // Extract the participants, populating the QueuedContactFactory mPriv->extractParticipants(participants); } } else { warning().nospace() << "RequestPropertyDBusNames failed " "with " << op->errorName() << ": " << op->errorMessage(); mPriv->readinessHelper->setIntrospectCompleted(DBusTubeChannel::FeatureBusNameMonitoring, false); } } void DBusTubeChannel::onQueueCompleted() { debug() << "Queue was completed"; // Set the feature as completed, and disconnect the signal as it's no longer useful mPriv->readinessHelper->setIntrospectCompleted(DBusTubeChannel::FeatureBusNameMonitoring, true); disconnect(mPriv->queuedContactFactory, SIGNAL(queueCompleted()), this, SLOT(onQueueCompleted())); } void DBusTubeChannel::onDBusNamesChanged(const Tp::DBusTubeParticipants &added, const Tp::UIntList &removed) { for (DBusTubeParticipants::const_iterator i = added.constBegin(); i != added.constEnd(); ++i) { QUuid uuid = mPriv->queuedContactFactory->appendNewRequest(UIntList() << i.key()); // Add it to our hash as well mPriv->pendingNewBusNamesToAdd.insert(uuid, i.value()); } foreach (uint handle, removed) { QUuid uuid = mPriv->queuedContactFactory->appendNewRequest(UIntList() << handle); // Add it to pending removed as well mPriv->pendingNewBusNamesToRemove << uuid; } } void DBusTubeChannel::onContactsRetrieved(const QUuid &uuid, const QList &contacts) { // Retrieve our hash if (mPriv->pendingNewBusNamesToAdd.contains(uuid)) { QString busName = mPriv->pendingNewBusNamesToAdd.take(uuid); // Add it to our connections hash foreach (const Tp::ContactPtr &contact, contacts) { mPriv->contactsForBusNames.insert(busName, contact); // Time for us to emit the signal - if the feature is ready if (isReady(FeatureBusNameMonitoring)) { emit busNameAdded(busName, contact); } } } else if (mPriv->pendingNewBusNamesToRemove.contains(uuid)) { mPriv->pendingNewBusNamesToRemove.removeOne(uuid); // Remove it from our connections hash foreach (const Tp::ContactPtr &contact, contacts) { if (mPriv->contactsForBusNames.values().contains(contact)) { QString busName = mPriv->contactsForBusNames.key(contact); mPriv->contactsForBusNames.remove(busName); // Time for us to emit the signal - if the feature is ready if (isReady(FeatureBusNameMonitoring)) { emit busNameRemoved(busName, contact); } } else { warning() << "Trying to remove a bus name for contact " << contact->id() << " which has not been retrieved previously!"; } } } else { warning() << "Contacts retrieved but no pending bus names were found"; return; } } void DBusTubeChannel::setAddress(const QString& address) { mPriv->address = address; } // Signals documentation /** * \fn void DBusTubeChannel::busNameAdded(const QString &busName, const Tp::ContactPtr &contact) * * Emitted when a new participant joins this tube. * * This signal will be emitted only if the tube is a group tube (not p2p), and if the * FeatureBusNameMonitoring feature has been enabled. * * \param busName The bus name of the new participant * \param contact The ContactPtr identifying the participant */ /** * \fn void DBusTubeChannel::busNameRemoved(const QString &busName, const Tp::ContactPtr &contact) * * Emitted when a participant leaves this tube. * * This signal will be emitted only if the tube is a group tube (not p2p), and if the * FeatureBusNameMonitoring feature has been enabled. * * \param busName The bus name of the participant leaving * \param contact The ContactPtr identifying the participant */ } telepathy-qt-0.9.3/TelepathyQt/ChannelDispatcherInterface0000644000175200001440000000042412000056607026003 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelDispatcherInterface_HEADER_GUARD_ #define _TelepathyQt_ChannelDispatcherInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/DBus0000644000175200001440000000033212000056607021436 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_DBus_HEADER_GUARD_ #define _TelepathyQt_DBus_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/channel-factory.h0000644000175200001440000004013412000056607024110 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009-2010 Collabora Ltd. * @copyright Copyright (C) 2009-2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_channel_factory_h_HEADER_GUARD_ #define _TelepathyQt_channel_factory_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include // For Q_DISABLE_COPY #include #include #include class QDBusConnection; namespace Tp { class ChannelClassSpec; class TP_QT_EXPORT ChannelFactory : public DBusProxyFactory { Q_OBJECT Q_DISABLE_COPY(ChannelFactory) public: #ifndef DOXYGEN_SHOULD_SKIP_THIS struct TP_QT_EXPORT Constructor : public RefCounted { virtual ~Constructor() {} virtual ChannelPtr construct(const ConnectionPtr &conn, const QString &objectPath, const QVariantMap &immutableProperties) const = 0; }; typedef SharedPtr ConstructorPtr; typedef SharedPtr ConstructorConstPtr; #endif /* DOXYGEN_SHOULD_SKIP_THIS */ static ChannelFactoryPtr create(const QDBusConnection &bus); virtual ~ChannelFactory(); Features featuresForTextChats(const QVariantMap &additionalProps = QVariantMap()) const; void addFeaturesForTextChats(const Features &features, const QVariantMap &additionalProps = QVariantMap()); ConstructorConstPtr constructorForTextChats( const QVariantMap &additionalProps = QVariantMap()) const; template void setSubclassForTextChats(const QVariantMap &additionalProps = QVariantMap()) { setConstructorForTextChats(SubclassCtor::create(), additionalProps); } void setConstructorForTextChats(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps = QVariantMap()); Features featuresForTextChatrooms(const QVariantMap &additionalProps = QVariantMap()) const; void addFeaturesForTextChatrooms(const Features &features, const QVariantMap &additionalProps = QVariantMap()); ConstructorConstPtr constructorForTextChatrooms( const QVariantMap &additionalProps = QVariantMap()) const; template void setSubclassForTextChatrooms(const QVariantMap &additionalProps = QVariantMap()) { setConstructorForTextChatrooms(SubclassCtor::create(), additionalProps); } void setConstructorForTextChatrooms(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps = QVariantMap()); Features featuresForCalls(const QVariantMap &additionalProps = QVariantMap()) const; void addFeaturesForCalls(const Features &features, const QVariantMap &additionalProps = QVariantMap()); template void setSubclassForCalls(const QVariantMap &additionalProps = QVariantMap()) { setConstructorForCalls(SubclassCtor::create(), additionalProps); } void setConstructorForCalls(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps = QVariantMap()); TP_QT_DEPRECATED Features featuresForStreamedMediaCalls(const QVariantMap &additionalProps = QVariantMap()) const; TP_QT_DEPRECATED void addFeaturesForStreamedMediaCalls(const Features &features, const QVariantMap &additionalProps = QVariantMap()); TP_QT_DEPRECATED ConstructorConstPtr constructorForStreamedMediaCalls( const QVariantMap &additionalProps = QVariantMap()) const; template TP_QT_DEPRECATED void setSubclassForStreamedMediaCalls(const QVariantMap &additionalProps = QVariantMap()) { setConstructorForStreamedMediaCalls(SubclassCtor::create(), additionalProps); } TP_QT_DEPRECATED void setConstructorForStreamedMediaCalls(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps = QVariantMap()); Features featuresForRoomLists(const QVariantMap &additionalProps = QVariantMap()) const; void addFeaturesForRoomLists(const Features &features, const QVariantMap &additionalProps = QVariantMap()); ConstructorConstPtr constructorForRoomLists( const QVariantMap &additionalProps = QVariantMap()) const; template void setSubclassForRoomLists(const QVariantMap &additionalProps = QVariantMap()) { setConstructorForRoomLists(SubclassCtor::create(), additionalProps); } void setConstructorForRoomLists(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps = QVariantMap()); Features featuresForOutgoingFileTransfers(const QVariantMap &additionalProps = QVariantMap()) const; void addFeaturesForOutgoingFileTransfers(const Features &features, const QVariantMap &additionalProps = QVariantMap()); ConstructorConstPtr constructorForOutgoingFileTransfers( const QVariantMap &additionalProps = QVariantMap()) const; template void setSubclassForOutgoingFileTransfers(const QVariantMap &additionalProps = QVariantMap()) { setConstructorForOutgoingFileTransfers(SubclassCtor::create(), additionalProps); } void setConstructorForOutgoingFileTransfers(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps = QVariantMap()); Features featuresForIncomingFileTransfers(const QVariantMap &additionalProps = QVariantMap()) const; void addFeaturesForIncomingFileTransfers(const Features &features, const QVariantMap &additionalProps = QVariantMap()); ConstructorConstPtr constructorForIncomingFileTransfers( const QVariantMap &additionalProps = QVariantMap()) const; template void setSubclassForIncomingFileTransfers(const QVariantMap &additionalProps = QVariantMap()) { setConstructorForIncomingFileTransfers(SubclassCtor::create(), additionalProps); } void setConstructorForIncomingFileTransfers(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps = QVariantMap()); Features featuresForOutgoingStreamTubes(const QVariantMap &additionalProps = QVariantMap()) const; void addFeaturesForOutgoingStreamTubes(const Features &features, const QVariantMap &additionalProps = QVariantMap()); ConstructorConstPtr constructorForOutgoingStreamTubes( const QVariantMap &additionalProps = QVariantMap()) const; template void setSubclassForOutgoingStreamTubes(const QVariantMap &additionalProps = QVariantMap()) { setConstructorForOutgoingStreamTubes(SubclassCtor::create(), additionalProps); } void setConstructorForOutgoingStreamTubes(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps = QVariantMap()); Features featuresForIncomingStreamTubes(const QVariantMap &additionalProps = QVariantMap()) const; void addFeaturesForIncomingStreamTubes(const Features &features, const QVariantMap &additionalProps = QVariantMap()); ConstructorConstPtr constructorForIncomingStreamTubes( const QVariantMap &additionalProps = QVariantMap()) const; template void setSubclassForIncomingStreamTubes(const QVariantMap &additionalProps = QVariantMap()) { setConstructorForIncomingStreamTubes(SubclassCtor::create(), additionalProps); } void setConstructorForIncomingStreamTubes(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps = QVariantMap()); Features featuresForOutgoingRoomStreamTubes(const QVariantMap &additionalProps = QVariantMap()) const; void addFeaturesForOutgoingRoomStreamTubes(const Features &features, const QVariantMap &additionalProps = QVariantMap()); ConstructorConstPtr constructorForOutgoingRoomStreamTubes( const QVariantMap &additionalProps = QVariantMap()) const; template void setSubclassForOutgoingRoomStreamTubes(const QVariantMap &additionalProps = QVariantMap()) { setConstructorForOutgoingRoomStreamTubes(SubclassCtor::create(), additionalProps); } void setConstructorForOutgoingRoomStreamTubes(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps = QVariantMap()); Features featuresForIncomingRoomStreamTubes(const QVariantMap &additionalProps = QVariantMap()) const; void addFeaturesForIncomingRoomStreamTubes(const Features &features, const QVariantMap &additionalProps = QVariantMap()); ConstructorConstPtr constructorForIncomingRoomStreamTubes( const QVariantMap &additionalProps = QVariantMap()) const; template void setSubclassForIncomingRoomStreamTubes(const QVariantMap &additionalProps = QVariantMap()) { setConstructorForIncomingRoomStreamTubes(SubclassCtor::create(), additionalProps); } void setConstructorForIncomingRoomStreamTubes(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps = QVariantMap()); Features featuresForOutgoingDBusTubes(const QVariantMap &additionalProps = QVariantMap()) const; void addFeaturesForOutgoingDBusTubes(const Features &features, const QVariantMap &additionalProps = QVariantMap()); ConstructorConstPtr constructorForOutgoingDBusTubes( const QVariantMap &additionalProps = QVariantMap()) const; template void setSubclassForOutgoingDBusTubes(const QVariantMap &additionalProps = QVariantMap()) { setConstructorForOutgoingDBusTubes(SubclassCtor::create(), additionalProps); } void setConstructorForOutgoingDBusTubes(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps = QVariantMap()); Features featuresForIncomingDBusTubes(const QVariantMap &additionalProps = QVariantMap()) const; void addFeaturesForIncomingDBusTubes(const Features &features, const QVariantMap &additionalProps = QVariantMap()); ConstructorConstPtr constructorForIncomingDBusTubes( const QVariantMap &additionalProps = QVariantMap()) const; template void setSubclassForIncomingDBusTubes(const QVariantMap &additionalProps = QVariantMap()) { setConstructorForIncomingDBusTubes(SubclassCtor::create(), additionalProps); } void setConstructorForIncomingDBusTubes(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps = QVariantMap()); Features featuresForOutgoingRoomDBusTubes(const QVariantMap &additionalProps = QVariantMap()) const; void addFeaturesForOutgoingRoomDBusTubes(const Features &features, const QVariantMap &additionalProps = QVariantMap()); ConstructorConstPtr constructorForOutgoingRoomDBusTubes( const QVariantMap &additionalProps = QVariantMap()) const; template void setSubclassForOutgoingRoomDBusTubes(const QVariantMap &additionalProps = QVariantMap()) { setConstructorForOutgoingRoomDBusTubes(SubclassCtor::create(), additionalProps); } void setConstructorForOutgoingRoomDBusTubes(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps = QVariantMap()); Features featuresForIncomingRoomDBusTubes(const QVariantMap &additionalProps = QVariantMap()) const; void addFeaturesForIncomingRoomDBusTubes(const Features &features, const QVariantMap &additionalProps = QVariantMap()); ConstructorConstPtr constructorForIncomingRoomDBusTubes( const QVariantMap &additionalProps = QVariantMap()) const; template void setSubclassForIncomingRoomDBusTubes(const QVariantMap &additionalProps = QVariantMap()) { setConstructorForIncomingRoomDBusTubes(SubclassCtor::create(), additionalProps); } void setConstructorForIncomingRoomDBusTubes(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps = QVariantMap()); Features featuresForContactSearches(const QVariantMap &additionalProps = QVariantMap()) const; void addFeaturesForContactSearches(const Features &features, const QVariantMap &additionalProps = QVariantMap()); ConstructorConstPtr constructorForContactSearches( const QVariantMap &additionalProps = QVariantMap()) const; template void setSubclassForContactSearches(const QVariantMap &additionalProps = QVariantMap()) { setConstructorForContactSearches(SubclassCtor::create(), additionalProps); } void setConstructorForContactSearches(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps = QVariantMap()); Features featuresForServerAuthentication(const QVariantMap &additionalProps = QVariantMap()) const; void addFeaturesForServerAuthentication(const Features &features, const QVariantMap &additionalProps = QVariantMap()); ConstructorConstPtr constructorForServerAuthentication( const QVariantMap &additionalProps = QVariantMap()) const; template void setSubclassForServerAuthentication(const QVariantMap &additionalProps = QVariantMap()) { setConstructorForServerAuthentication(SubclassCtor::create(), additionalProps); } void setConstructorForServerAuthentication(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps = QVariantMap()); Features commonFeatures() const; void addCommonFeatures(const Features &features); ConstructorConstPtr fallbackConstructor() const; template void setFallbackSubclass() { setFallbackConstructor(SubclassCtor::create()); } void setFallbackConstructor(const ConstructorConstPtr &ctor); Features featuresFor(const ChannelClassSpec &channelClass) const; void addFeaturesFor(const ChannelClassSpec &channelClass, const Features &features); template void setSubclassFor(const ChannelClassSpec &channelClass) { setConstructorFor(channelClass, SubclassCtor::create()); } ConstructorConstPtr constructorFor(const ChannelClassSpec &channelClass) const; void setConstructorFor(const ChannelClassSpec &channelClass, const ConstructorConstPtr &ctor); PendingReady *proxy(const ConnectionPtr &connection, const QString &channelPath, const QVariantMap &immutableProperties) const; protected: ChannelFactory(const QDBusConnection &bus); #ifndef DOXYGEN_SHOULD_SKIP_THIS template struct SubclassCtor : public Constructor { static ConstructorPtr create() { return ConstructorPtr(new SubclassCtor()); } virtual ~SubclassCtor() {} ChannelPtr construct(const ConnectionPtr &conn, const QString &objectPath, const QVariantMap &immutableProperties) const { return Subclass::create(conn, objectPath, immutableProperties); } }; #endif /* DOXYGEN_SHOULD_SKIP_THIS */ virtual QString finalBusNameFrom(const QString &uniqueOrWellKnown) const; // Nothing we'd like to prepare() virtual Features featuresFor(const DBusProxyPtr &proxy) const; private: struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/main.dox0000644000175200001440000001076512000056607022331 0ustar00collabora-develusers00000000000000/* * This file is part of TelepathyQt * * @copyright Copyright (C) 2008 Collabora Ltd. * @copyright 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 */ /** * \mainpage Telepathy-Qt * * \section Introduction * * Telepathy-Qt is a Qt high-level binding for \telepathy. * * \telepathy is a \dbus framework for unifying real time communication, including instant * messaging, voice calls and video calls. It abstracts differences between protocols to * provide a unified interface for applications. * * Releases can be found here. * * Development is done in the git repository found here. * * \li All Classes * * \section getting_started Getting Started * \li \subpage installation * * \section examples Examples * * This is the list of examples in Telepathy-Qt's examples directory. * The examples demonstrate Telepathy-Qt features in small, self-contained * programs. They are not all designed to be impressive when you run them, * but their source code is carefully written to show good Telepathy-Qt * programming practices. * * \li \subpage accounts_example * \li \subpage contact_messenger_example * \li \subpage protocols_example * \li \subpage roster_example * * \section developer_resources Further Information * \li \subpage bugreport * \li \subpage mailing_lists * \li \subpage async_model * \li \subpage shared_ptr */ /** * \page installation Installation * * \section installation_from_source Installing from source on Linux * * \subsection installation_from_source_requirements Requirements * * Building Telepathy-Qt requires: * \li Qt, including QtDBus * \li GNU make * \li pkg-config * \li libxslt, xsltproc * \li Python * * For the full set of regression tests to run, you'll also need: * \li telepathy-glib * * and to build the example VoIP call UI (examples/call), you'll need: * \li telepathy-glib * \li telepathy-farsight * * \li GStreamer \n * * Building also requires the cmake build system. * * \subsection installation_from_source_building Building * * After installing all dependencies, run: * * \verbatim $ mkdir build; cd build $ cmake .. $ make $ make install \endverbatim */ /** * \page bugreport How to report a bug * * Before reporting a bug, please check the * Bug Tracker to see if the issue is already known. * * Always include the following information in your bug report: * \li The version of Telepathy-Qt you are using * * Please submit the bug report, feature request or "to-do" item * * here. */ /** * \page mailing_lists Mailing Lists * * General * discussion list\n * This list should be used for general discussion about \telepathy usage, * development. * * * Commits list\n * Subscribe to this list to follow the commits. * * * Bugs list\n * Subscribe to this list to follow the bug reports. */ telepathy-qt-0.9.3/TelepathyQt/connection-factory.cpp0000644000175200001440000001371112000056607025173 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include #include namespace Tp { /** * \class ConnectionFactory * \ingroup utils * \headerfile TelepathyQt/connection-factory.h * * \brief The ConnectionFactory class is responsible for constructing Connection * objects according to application-defined settings. * * The class is used by Account and other classes which construct Connection proxy * instances to enable sharing instances of application-defined Connection * subclasses with certain features always ready. */ /** * Create a new ConnectionFactory object. * * Optionally, the \a features to make ready on all constructed proxies can be specified. The * default is to make no features ready. It should be noted that unlike Connection::becomeReady(), * FeatureCore isn't assumed. If no features are specified, which is the default behavior, no * Connection::becomeReady() call is made at all and the proxy won't be Connection::isReady(). * * \param bus The QDBusConnection for proxies constructed using this factory to use. * \param features The features to make ready on constructed Connections. * \return A ConnectionFactoryPtr object pointing to the newly created * ConnectionFactory object. */ ConnectionFactoryPtr ConnectionFactory::create(const QDBusConnection &bus, const Features &features) { return ConnectionFactoryPtr(new ConnectionFactory(bus, features)); } /** * Construct a new ConnectionFactory object. * * As in create(), it should be noted that unlike Connection::becomeReady(), FeatureCore isn't * assumed. If no \a features are specified, no Connection::becomeReady() call is made at all and * the proxy won't be Connection::isReady(). * * \param bus The QDBusConnection for proxies constructed using this factory to use. * \param features The features to make ready on constructed Connections. */ ConnectionFactory::ConnectionFactory(const QDBusConnection &bus, const Features &features) : FixedFeatureFactory(bus) { addFeatures(features); } /** * Class destructor. */ ConnectionFactory::~ConnectionFactory() { } /** * Constructs a Connection proxy and begins making it ready. * * If a valid proxy already exists in the factory cache for the given combination of \a busName and * \a objectPath, it is returned instead. All newly created proxies are automatically cached until * they're either DBusProxy::invalidated() or the last reference to them outside the factory has * been dropped. * * The proxy can be accessed immediately after this function returns using PendingReady::proxy(). * The ready operation only finishes, however, when the features specified by features(), if any, * are made ready as much as possible. If the service doesn't support a given feature, they won't * obviously be ready even if the operation finished successfully, as is the case for * Connection::becomeReady(). * * \param busName The bus/service name of the D-Bus connection object the proxy is constructed for. * \param objectPath The object path of the connection. * \param chanFactory The channel factory to use for the Connection. * \param contactFactory The channel factory to use for the Connection. * \return A PendingReady operation with the proxy in PendingReady::proxy(). */ PendingReady *ConnectionFactory::proxy(const QString &busName, const QString &objectPath, const ChannelFactoryConstPtr &chanFactory, const ContactFactoryConstPtr &contactFactory) const { DBusProxyPtr proxy = cachedProxy(busName, objectPath); if (proxy.isNull()) { proxy = construct(busName, objectPath, chanFactory, contactFactory); } return nowHaveProxy(proxy); } /** * Can be used by subclasses to override the Connection subclass constructed by the factory. * * This is automatically called by proxy() to construct proxy instances if no valid cached proxy is * found. * * The default implementation constructs Tp::Connection objects. * * \param busName The bus/service name of the D-Bus Connection object the proxy is constructed for. * \param objectPath The object path of the connection. * \param chanFactory The channel factory to use for the Connection. * \param contactFactory The channel factory to use for the Connection. * \return A pointer to the constructed Connection object. */ ConnectionPtr ConnectionFactory::construct(const QString &busName, const QString &objectPath, const ChannelFactoryConstPtr &chanFactory, const ContactFactoryConstPtr &contactFactory) const { return Connection::create(dbusConnection(), busName, objectPath, chanFactory, contactFactory); } /** * Transforms well-known names to the corresponding unique names, as is appropriate for Connection * * \param uniqueOrWellKnown The name to transform. * \return The unique name corresponding to \a uniqueOrWellKnown (which may be it itself). */ QString ConnectionFactory::finalBusNameFrom(const QString &uniqueOrWellKnown) const { return StatefulDBusProxy::uniqueNameFrom(dbusConnection(), uniqueOrWellKnown); } } telepathy-qt-0.9.3/TelepathyQt/PendingFailure0000644000175200001440000000040312000056607023474 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_PendingFailure_HEADER_GUARD_ #define _TelepathyQt_PendingFailure_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/avatar.cpp0000644000175200001440000000733712000056607022654 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include namespace Tp { /** * \class AvatarData * \ingroup wrappers * \headerfile TelepathyQt/avatar.h * * \brief The AvatarData class represents a Telepathy avatar. */ struct TP_QT_NO_EXPORT AvatarSpec::Private : public QSharedData { Private(const QStringList &supportedMimeTypes, uint minHeight, uint maxHeight, uint recommendedHeight, uint minWidth, uint maxWidth, uint recommendedWidth, uint maxBytes) : supportedMimeTypes(supportedMimeTypes), minHeight(minHeight), maxHeight(maxHeight), recommendedHeight(recommendedHeight), minWidth(minWidth), maxWidth(maxWidth), recommendedWidth(recommendedWidth), maxBytes(maxBytes) { } QStringList supportedMimeTypes; uint minHeight; uint maxHeight; uint recommendedHeight; uint minWidth; uint maxWidth; uint recommendedWidth; uint maxBytes; }; /** * \class AvatarSpec * \ingroup wrappers * \headerfile TelepathyQt/avatar.h * * \brief The AvatarSpec class represents a Telepathy avatar information * supported by a protocol. */ AvatarSpec::AvatarSpec() { } AvatarSpec::AvatarSpec(const QStringList &supportedMimeTypes, uint minHeight, uint maxHeight, uint recommendedHeight, uint minWidth, uint maxWidth, uint recommendedWidth, uint maxBytes) : mPriv(new Private(supportedMimeTypes, minHeight, maxHeight, recommendedHeight, minWidth, maxWidth, recommendedWidth, maxBytes)) { } AvatarSpec::AvatarSpec(const AvatarSpec &other) : mPriv(other.mPriv) { } AvatarSpec::~AvatarSpec() { } AvatarSpec &AvatarSpec::operator=(const AvatarSpec &other) { this->mPriv = other.mPriv; return *this; } QStringList AvatarSpec::supportedMimeTypes() const { if (!isValid()) { return QStringList(); } return mPriv->supportedMimeTypes; } uint AvatarSpec::minimumHeight() const { if (!isValid()) { return 0; } return mPriv->minHeight; } uint AvatarSpec::maximumHeight() const { if (!isValid()) { return 0; } return mPriv->maxHeight; } uint AvatarSpec::recommendedHeight() const { if (!isValid()) { return 0; } return mPriv->recommendedHeight; } uint AvatarSpec::minimumWidth() const { if (!isValid()) { return 0; } return mPriv->minWidth; } uint AvatarSpec::maximumWidth() const { if (!isValid()) { return 0; } return mPriv->maxWidth; } uint AvatarSpec::recommendedWidth() const { if (!isValid()) { return 0; } return mPriv->recommendedWidth; } uint AvatarSpec::maximumBytes() const { if (!isValid()) { return 0; } return mPriv->maxBytes; } } // Tp telepathy-qt-0.9.3/TelepathyQt/connection-factory.h0000644000175200001440000000450712000056607024643 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_connection_factory_h_HEADER_GUARD_ #define _TelepathyQt_connection_factory_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include #include // For Q_DISABLE_COPY #include #include class QDBusConnection; namespace Tp { class PendingReady; class TP_QT_EXPORT ConnectionFactory : public FixedFeatureFactory { public: static ConnectionFactoryPtr create(const QDBusConnection &bus, const Features &features = Features()); virtual ~ConnectionFactory(); PendingReady *proxy(const QString &busName, const QString &objectPath, const ChannelFactoryConstPtr &chanFactory, const ContactFactoryConstPtr &contactFactory) const; protected: ConnectionFactory(const QDBusConnection &bus, const Features &features); virtual ConnectionPtr construct(const QString &busName, const QString &objectPath, const ChannelFactoryConstPtr &chanFactory, const ContactFactoryConstPtr &contactFactory) const; virtual QString finalBusNameFrom(const QString &uniqueOrWellKnown) const; // Nothing we'd like to prepare() // Fixed features private: struct Private; Private *mPriv; // Currently unused, just for future-proofing }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/outgoing-file-transfer-channel.h0000644000175200001440000000462112000056607027034 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_outgoing_file_transfer_channel_h_HEADER_GUARD_ #define _TelepathyQt_outgoing_file_transfer_channel_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include namespace Tp { class TP_QT_EXPORT OutgoingFileTransferChannel : public FileTransferChannel { Q_OBJECT Q_DISABLE_COPY(OutgoingFileTransferChannel) public: static const Feature FeatureCore; static OutgoingFileTransferChannelPtr create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties); virtual ~OutgoingFileTransferChannel(); PendingOperation *provideFile(QIODevice *input); protected: OutgoingFileTransferChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature = OutgoingFileTransferChannel::FeatureCore); private Q_SLOTS: TP_QT_NO_EXPORT void onProvideFileFinished(Tp::PendingOperation *op); TP_QT_NO_EXPORT void onSocketConnected(); TP_QT_NO_EXPORT void onSocketDisconnected(); TP_QT_NO_EXPORT void onSocketError(QAbstractSocket::SocketError error); TP_QT_NO_EXPORT void onInputAboutToClose(); TP_QT_NO_EXPORT void doTransfer(); private: TP_QT_NO_EXPORT void connectToHost(); TP_QT_NO_EXPORT void setFinished(); struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/CallContentInterface0000644000175200001440000000040212000056607024626 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_CallContentInterface_HEADER_GUARD_ #define _TelepathyQt_CallContentInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/contact-factory.h0000644000175200001440000000411012000056607024125 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_contact_factory_h_HEADER_GUARD_ #define _TelepathyQt_contact_factory_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include #include #include namespace Tp { class ContactManager; class ReferencedHandles; class TP_QT_EXPORT ContactFactory : public RefCounted { Q_DISABLE_COPY(ContactFactory) public: static ContactFactoryPtr create(const Features &features = Features()); virtual ~ContactFactory(); Features features() const; void addFeature(const Feature &feature); void addFeatures(const Features &features); protected: ContactFactory(const Features &features); virtual ContactPtr construct(ContactManager *manager, const ReferencedHandles &handle, const Features &features, const QVariantMap &attributes) const; virtual PendingOperation *prepare(const ContactPtr &contact) const; private: friend class ContactManager; friend class PendingContacts; struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/TelepathyQtConfig.cmake.in0000644000175200001440000000323412000056607025663 0ustar00collabora-develusers00000000000000# TelepathyQt@QT_VERSION_MAJOR@Config.cmake is generated by CMake from TelepathyQt/TelepathyQtConfig.cmake.in. # Any changed value in this file will be overwritten by CMake. if(NOT TelepathyQt@QT_VERSION_MAJOR@_FOUND) # set the version number set(TELEPATHY_QT@QT_VERSION_MAJOR@_VERSION_MAJOR @TP_QT_MAJOR_VERSION@) set(TELEPATHY_QT@QT_VERSION_MAJOR@_VERSION_MINOR @TP_QT_MINOR_VERSION@) set(TELEPATHY_QT@QT_VERSION_MAJOR@_VERSION_MICRO @TP_QT_MICRO_VERSION@) set(TELEPATHY_QT@QT_VERSION_MAJOR@_VERSION_NANO @TP_QT_NANO_VERSION@) set(TELEPATHY_QT@QT_VERSION_MAJOR@_VERSION @PACKAGE_VERSION@) # set the directories if(NOT TELEPATHY_QT@QT_VERSION_MAJOR@_INSTALL_DIR) set(TELEPATHY_QT@QT_VERSION_MAJOR@_INSTALL_DIR "@CMAKE_INSTALL_PREFIX@") endif(NOT TELEPATHY_QT@QT_VERSION_MAJOR@_INSTALL_DIR) set(TELEPATHY_QT@QT_VERSION_MAJOR@_INCLUDE_DIR "@TELEPATHY_QT_INCLUDE_DIR@") set(TELEPATHY_QT@QT_VERSION_MAJOR@_LIB_DIR "@TELEPATHY_QT_LIB_DIR@") set(TELEPATHY_QT@QT_VERSION_MAJOR@_SHARE_DIR "@TELEPATHY_QT_DATA_DIR@") # attempt to find the generated TelepathyQt4Targets.cmake in the same directory get_filename_component(_TPQT@QT_VERSION_MAJOR@_CONFIG_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) find_file(_TPQT@QT_VERSION_MAJOR@_TARGETS_FILE TelepathyQt@QT_VERSION_MAJOR@Targets.cmake PATHS ${_TPQT@QT_VERSION_MAJOR@_CONFIG_DIR} NO_DEFAULT_PATH) # set the TELEPATHY_QT@QT_VERSION_MAJOR@_LIBRARIES variable include(${_TPQT@QT_VERSION_MAJOR@_TARGETS_FILE}) set(TELEPATHY_QT@QT_VERSION_MAJOR@_LIBRARIES telepathy-qt@QT_VERSION_MAJOR@) endif(NOT TelepathyQt@QT_VERSION_MAJOR@_FOUND) telepathy-qt-0.9.3/TelepathyQt/PendingComposite0000644000175200001440000000040712000056607024053 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_PendingComposite_HEADER_GUARD_ #define _TelepathyQt_PendingComposite_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/ReferencedHandles0000644000175200001440000000035712000056607024151 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ReferencedHandles_HEADER_GUARD_ #define _TelepathyQt_ReferencedHandles_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif telepathy-qt-0.9.3/TelepathyQt/CallContent0000644000175200001440000000036012000056607023010 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_CallContent_HEADER_GUARD_ #define _TelepathyQt_CallContent_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/Client0000644000175200001440000000034012000056607022016 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_Client_HEADER_GUARD_ #define _TelepathyQt_Client_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/AuthenticationTLSCertificateInterface0000644000175200001440000000044712000056607030136 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_AuthenticationTLSCertificateInterface_HEADER_GUARD_ #define _TelepathyQt_AuthenticationTLSCertificateInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/stream-tube-server.cpp0000644000175200001440000012460612000056607025131 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/stream-tube-server-internal.h" #include "TelepathyQt/_gen/stream-tube-server.moc.hpp" #include "TelepathyQt/_gen/stream-tube-server-internal.moc.hpp" #include "TelepathyQt/debug-internal.h" #include "TelepathyQt/simple-stream-tube-handler.h" #include #include #include #include #include #include #include namespace Tp { /** * \class StreamTubeServer::ParametersGenerator * \ingroup serverclient * \headerfile TelepathyQt/stream-tube-server.h * * \brief The StreamTubeServer::ParametersGenerator abstract interface allows sending a different * set of parameters with each tube offer. * * %Tube parameters are arbitrary data sent with the tube offer, which can be retrieved in the * receiving end with IncomingStreamTubeChannel::parameters(). They can be used to transfer * e.g. session identification information, authentication credentials or alike, for bootstrapping * the protocol used for communicating over the tube. * * For usecases where the parameters don't need to change between each tube, just passing a fixed * set of parameters to a suitable StreamTubeServer::exportTcpSocket() overload is usually more * convenient than implementing a ParametersGenerator. Note that StreamTubeServer::exportTcpSocket() * can be called multiple times to change the parameters for future tubes when e.g. configuration * settings have been changed, so a ParametersGenerator only needs to be implemented if each and * every tube must have a different set of parameters. */ /** * \fn QVariantMap StreamTubeServer::ParametersGenerator::nextParameters(const AccountPtr &, const * OutgoingStreamTubeChannelPtr &, const ChannelRequestHints &) * * Return the parameters to send when offering the given \a tube. * * \param account The account from which the tube originates. * \param tube The tube channel which is going to be offered by the StreamTubeServer. * \param hints The hints associated with the request that led to the creation of this tube, if any. * * \return Parameters to send with the offer, or an empty QVariantMap if none are needed for this * tube. */ /** * \fn StreamTubeServer::ParametersGenerator::~ParametersGenerator * * Class destructor. Protected, because StreamTubeServer never deletes a ParametersGenerator passed * to it. */ class TP_QT_NO_EXPORT FixedParametersGenerator : public StreamTubeServer::ParametersGenerator { public: FixedParametersGenerator(const QVariantMap ¶ms) : mParams(params) {} QVariantMap nextParameters(const AccountPtr &, const OutgoingStreamTubeChannelPtr &, const ChannelRequestHints &) { return mParams; } private: QVariantMap mParams; }; struct TP_QT_NO_EXPORT StreamTubeServer::RemoteContact::Private : public QSharedData { // empty placeholder for now }; /** * \class StreamTubeServer::RemoteContact * \ingroup serverclient * \headerfile TelepathyQt/stream-tube-server.h * * \brief The StreamTubeServer::RemoteContact class represents a contact from which a socket * connection to our exported socket originates. */ /** * Constructs a new invalid RemoteContact instance. */ StreamTubeServer::RemoteContact::RemoteContact() { // invalid instance } /** * Constructs a new RemoteContact for the given \a contact object from the given \a account. * * \param account A pointer to the account which this contact can be reached through. * \param contact A pointer to the contact object. */ StreamTubeServer::RemoteContact::RemoteContact( const AccountPtr &account, const ContactPtr &contact) : QPair(account, contact), mPriv(new Private) { } /** * Copy constructor. */ StreamTubeServer::RemoteContact::RemoteContact( const RemoteContact &other) : QPair(other.account(), other.contact()), mPriv(other.mPriv) { } /** * Class destructor. */ StreamTubeServer::RemoteContact::~RemoteContact() { // mPriv deleted automatically } /** * Assignment operator. */ StreamTubeServer::RemoteContact &StreamTubeServer::RemoteContact::operator=( const RemoteContact &other) { if (&other == this) { return *this; } first = other.account(); second = other.contact(); mPriv = other.mPriv; return *this; } /** * \fn bool StreamTubeServer::RemoteContact::isValid() const * * Return whether or not the contact is valid or is just the null object created using the default * constructor. * * \return \c true if valid, \c false otherwise. */ /** * \fn AccountPtr StreamTubeServer::RemoteContact::account() const * * Return the account through which the contact can be reached. * * \return A pointer to the account object. */ /** * \fn ContactPtr StreamTubeServer::RemoteContact::contact() const * * Return the actual contact object. * * \return A pointer to the object. */ struct TP_QT_NO_EXPORT StreamTubeServer::Tube::Private : public QSharedData { // empty placeholder for now }; /** * \class StreamTubeServer::Tube * \ingroup serverclient * \headerfile TelepathyQt/stream-tube-server.h * * \brief The StreamTubeServer::Tube class represents a tube being handled by the server. */ /** * Constructs a new invalid Tube instance. */ StreamTubeServer::Tube::Tube() { // invalid instance } /** * Constructs a Tube instance for the given tube \a channel originating from the given \a account. * * \param account A pointer to the account object. * \param channel A pointer to the tube channel object. */ StreamTubeServer::Tube::Tube( const AccountPtr &account, const OutgoingStreamTubeChannelPtr &channel) : QPair(account, channel), mPriv(new Private) { } /** * Copy constructor. */ StreamTubeServer::Tube::Tube( const Tube &other) : QPair(other.account(), other.channel()), mPriv(other.mPriv) { } /** * Class destructor. */ StreamTubeServer::Tube::~Tube() { // mPriv deleted automatically } /** * Assignment operator. */ StreamTubeServer::Tube &StreamTubeServer::Tube::operator=( const Tube &other) { if (&other == this) { return *this; } first = other.account(); second = other.channel(); mPriv = other.mPriv; return *this; } /** * \fn bool StreamTubeServer::Tube::isValid() const * * Return whether or not the tube is valid or is just the null object created using the default * constructor. * * \return \c true if valid, \c false otherwise. */ /** * \fn AccountPtr StreamTubeServer::Tube::account() const * * Return the account from which the tube originates. * * \return A pointer to the account object. */ /** * \fn OutgoingStreamTubeChannelPtr StreamTubeServer::Tube::channel() const * * Return the actual tube channel. * * \return A pointer to the channel. */ struct StreamTubeServer::Private { Private(const ClientRegistrarPtr ®istrar, const QStringList &p2pServices, const QStringList &roomServices, const QString &maybeClientName, bool monitorConnections) : registrar(registrar), handler(SimpleStreamTubeHandler::create(p2pServices, roomServices, true, monitorConnections)), clientName(maybeClientName), isRegistered(false), exportedPort(0), generator(0) { if (clientName.isEmpty()) { clientName = QString::fromLatin1("TpQtSTubeServer_%1_%2") .arg(registrar->dbusConnection().baseService() .replace(QLatin1Char(':'), QLatin1Char('_')) .replace(QLatin1Char('.'), QLatin1Char('_'))) .arg((quintptr) this, 0, 16); } } void ensureRegistered() { if (isRegistered) { return; } debug() << "Register StreamTubeServer with name " << clientName; if (registrar->registerClient(handler, clientName)) { isRegistered = true; } else { warning() << "StreamTubeServer" << clientName << "registration failed"; } } ClientRegistrarPtr registrar; SharedPtr handler; QString clientName; bool isRegistered; QHostAddress exportedAddr; quint16 exportedPort; ParametersGenerator *generator; QScopedPointer fixedGenerator; QHash tubes; }; StreamTubeServer::TubeWrapper::TubeWrapper(const AccountPtr &acc, const OutgoingStreamTubeChannelPtr &tube, const QHostAddress &exportedAddr, quint16 exportedPort, const QVariantMap ¶ms, StreamTubeServer *parent) : QObject(parent), mAcc(acc), mTube(tube) { connect(tube->offerTcpSocket(exportedAddr, exportedPort, params), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onTubeOffered(Tp::PendingOperation*))); connect(tube.data(), SIGNAL(newConnection(uint)), SLOT(onNewConnection(uint))); connect(tube.data(), SIGNAL(connectionClosed(uint,QString,QString)), SLOT(onConnectionClosed(uint,QString,QString))); } void StreamTubeServer::TubeWrapper::onTubeOffered(Tp::PendingOperation *op) { emit offerFinished(this, op); } void StreamTubeServer::TubeWrapper::onNewConnection(uint conn) { emit newConnection(this, conn); } void StreamTubeServer::TubeWrapper::onConnectionClosed(uint conn, const QString &error, const QString &message) { emit connectionClosed(this, conn, error, message); } /** * \class StreamTubeServer * \ingroup serverclient * \headerfile TelepathyQt/stream-tube-server.h * * \brief The StreamTubeServer class is a Handler implementation for outgoing %Stream %Tube channels, * allowing an application to easily export a TCP network server over Telepathy Tubes without * worrying about the channel dispatching details. * * Telepathy Tubes is a technology for connecting arbitrary applications together through the IM * network (and sometimes with direct peer-to-peer connections), such that issues like firewall/NAT * traversal are automatically handled. Stream Tubes in particular offer properties similar to * SOCK_STREAM sockets. The StreamTubeServer class exports such a bytestream socket \b server over * the tubes it \em handles as a Telepathy Handler %Client; the StreamTubeClient class is the * counterpart, enabling TCP/UNIX socket clients to connect to services from such exported servers * offered to them via tubes. * * Both peer-to-peer (\c TargetHandleType == \ref HandleTypeContact) and group (\c TargetHandleType * == \ref HandleTypeRoom) channels are supported, and it's possible to specify the tube services to * handle for each separately. It is also possible to not advertise handling capability for ANY tube * service; instead just using the StreamTubeServer to handle tubes on an one-off basis by passing * its corresponding %Client service name as the \a preferredHandler when requesting tubes via the * Account::createStreamTube() methods (or equivalent). * * %Connection monitoring allows associating incoming connections on the exported server socket with * the corresponding remote contacts. This allows an application to show the details of and/or * initiate further communication with the remote contacts, without considering the actual tube * channels the connections are being made through at all (in particular, their * Channel::targetContact() accessor for peer-to-peer and the * OutgoingStreamTubeChannel::connectionsForSourceAddresses() accessor for group tubes). * * Enabling connection monitoring adds a small overhead and latency to handling each incoming tube * and signaling each new incoming connection over them, though, so use it only when needed. * Additionally, some protocol backends or environments they're running in might not support the * ::SocketAccessControlPort mechanism, in which case the source address won't be reported for * connections through them. Even in this case, the remote contacts can be associated by accepting * one incoming socket connection at a time, and waiting for the corresponding contact to be * signaled (although its source address will be invalid, it's the only possibility given its the * only accepted connection). However, it's not necessary to do this e.g. with the Gabble XMPP * backend, because it fully supports the required mechanism. * * A service activated Handler can be implemented using StreamTubeServer by passing a predefined \a * clientName manually to the chosen create() method, and installing Telepathy \c .client and D-Bus * \c .service files declaring the implemented tube services as channel classes and a path to the * executable. If this is not needed, the \a clientName can be omitted, in which case a random * unique client name is generated and used instead. * * StreamTubeServer shares Account, Connection and Channel proxies and Contact objects with the * rest of the application as long as a reference to the AccountManager, ClientRegistrar, or the * factories used elsewhere is passed to the create() method. A stand-alone tube service Handler can * get away without passing these however, or just passing select factories to make the desired * features prepared and subclasses employed for these objects for their own convenience. * * Whichever method is used, the ChannelFactory (perhaps indirectly) given must construct * OutgoingStreamTubeChannel instances or subclasses thereof for all channel classes corresponding * to the tube services to handle. This is the default; overriding it without obeying these * constraints using ChannelFactory::setSubclassForOutgoingStreamTubes() or the related methods * for room tubes prevents StreamTubeServer from operating correctly. * * \todo Coin up a small Python script or alike to easily generate the .client and .service files. * (fd.o #41614) * \todo Support exporting Unix sockets as well. (fd.o #41615) */ /** * Create a new StreamTubeServer, which will register itself on the session bus using an internal * ClientRegistrar and use the given factories. * * \param p2pServices Names of the tube services to handle on peer-to-peer tube channels. * \param roomServices Names of the tube services to handle on room/group tube channels. * \param clientName The client name (without the \c org.freedesktop.Telepathy.Client. prefix). * \param monitorConnections Whether to enable connection monitoring or not. * \param accountFactory The account factory to use. * \param connectionFactory The connection factory to use. * \param channelFactory The channel factory to use. * \param contactFactory The contact factory to use. */ StreamTubeServerPtr StreamTubeServer::create( const QStringList &p2pServices, const QStringList &roomServices, const QString &clientName, bool monitorConnections, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory) { return create( QDBusConnection::sessionBus(), accountFactory, connectionFactory, channelFactory, contactFactory, p2pServices, roomServices, clientName, monitorConnections); } /** * Create a new StreamTubeServer, which will register itself on the given \a bus using an internal * ClientRegistrar and use the given factories. * * The factories must all be created for the given \a bus. * * \param bus Connection to the bus to register on. * \param accountFactory The account factory to use. * \param connectionFactory The connection factory to use. * \param channelFactory The channel factory to use. * \param contactFactory The contact factory to use. * \param p2pServices Names of the tube services to handle on peer-to-peer tube channels. * \param roomServices Names of the tube services to handle on room/group tube channels. * \param clientName The client name (without the \c org.freedesktop.Telepathy.Client. prefix). * \param monitorConnections Whether to enable connection monitoring or not. */ StreamTubeServerPtr StreamTubeServer::create( const QDBusConnection &bus, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory, const QStringList &p2pServices, const QStringList &roomServices, const QString &clientName, bool monitorConnections) { return create( ClientRegistrar::create( bus, accountFactory, connectionFactory, channelFactory, contactFactory), p2pServices, roomServices, clientName, monitorConnections); } /** * Create a new StreamTubeServer, which will register itself on the bus of and share objects with * the given \a accountManager, creating an internal ClientRegistrar. * * \param accountManager A pointer to the account manager to link up with. * \param p2pServices Names of the tube services to handle on peer-to-peer tube channels. * \param roomServices Names of the tube services to handle on room/group tube channels. * \param clientName The client name (without the \c org.freedesktop.Telepathy.Client. prefix). * \param monitorConnections Whether to enable connection monitoring or not. */ StreamTubeServerPtr StreamTubeServer::create( const AccountManagerPtr &accountManager, const QStringList &p2pServices, const QStringList &roomServices, const QString &clientName, bool monitorConnections) { return create( accountManager->dbusConnection(), accountManager->accountFactory(), accountManager->connectionFactory(), accountManager->channelFactory(), accountManager->contactFactory(), p2pServices, roomServices, clientName, monitorConnections); } /** * Create a new StreamTubeServer, which will register itself on the bus of and using the given * client \a registrar, and share objects with it. * * \param registrar The client registrar to use. * \param p2pServices Names of the tube services to handle on peer-to-peer tube channels. * \param roomServices Names of the tube services to handle on room/group tube channels. * \param clientName The client name (without the \c org.freedesktop.Telepathy.Client. prefix). * \param monitorConnections Whether to enable connection monitoring or not. */ StreamTubeServerPtr StreamTubeServer::create( const ClientRegistrarPtr ®istrar, const QStringList &p2pServices, const QStringList &roomServices, const QString &clientName, bool monitorConnections) { return StreamTubeServerPtr( new StreamTubeServer(registrar, p2pServices, roomServices, clientName, monitorConnections)); } StreamTubeServer::StreamTubeServer( const ClientRegistrarPtr ®istrar, const QStringList &p2pServices, const QStringList &roomServices, const QString &clientName, bool monitorConnections) : mPriv(new Private(registrar, p2pServices, roomServices, clientName, monitorConnections)) { connect(mPriv->handler.data(), SIGNAL(invokedForTube( Tp::AccountPtr, Tp::StreamTubeChannelPtr, QDateTime, Tp::ChannelRequestHints)), SLOT(onInvokedForTube( Tp::AccountPtr, Tp::StreamTubeChannelPtr, QDateTime, Tp::ChannelRequestHints))); } /** * Class destructor. */ StreamTubeServer::~StreamTubeServer() { if (isRegistered()) { mPriv->registrar->unregisterClient(mPriv->handler); } delete mPriv; } /** * Return the client registrar used by the server to register itself as a Handler client. * * This is the registrar originally passed to * create(const ClientRegistrarPtr &, const QStringList &, const QStringList &, const QString &, bool) * if that was used, and an internally constructed one otherwise. In any case, it can be used to * e.g. register further clients like any other ClientRegistrar. * * \return A pointer to the registrar. */ ClientRegistrarPtr StreamTubeServer::registrar() const { return mPriv->registrar; } /** * Return the Telepathy %Client name of the server. * * \return The name, without the \c org.freedesktop.Telepathy.Client. prefix of the full D-Bus service name. */ QString StreamTubeServer::clientName() const { return mPriv->clientName; } /** * Return whether the server has been successfully registered or not. * * Registration is attempted, at the latest, when a socket is first exported using exportTcpSocket(). * It can fail e.g. because the connection to the bus has failed, or a predefined \a clientName has * been passed to create(), and a %Client with the same name is already registered. Typically, failure * registering would be a fatal error for a stand-alone tube handler, but only a warning event for * an application serving other purposes. In any case, a high-quality user of the API will check the * return value of this accessor after exporting their socket. * * \return \c true if the server has been successfully registered, \c false if not. */ bool StreamTubeServer::isRegistered() const { return mPriv->isRegistered; } /** * Return whether connection monitoring is enabled on this server. * * For technical reasons, connection monitoring can't be enabled when the server is already running, * so there is no corresponding setter method. It has to be enabled by passing \c true as the \a * monitorConnections parameter to the create() method. * * If connection monitoring isn't enabled, newTcpConnection() and tcpConnectionClosed() won't be * emitted and tcpConnections() won't be populated. * * \return \c true if monitoring is enabled, \c false if not. */ bool StreamTubeServer::monitorsConnections() const { return mPriv->handler->monitorsConnections(); } /** * Return the host address and port of the currently exported TCP socket, if any. * * QHostAddress::Null is reported as the address and 0 as the port if no TCP socket has yet been * successfully exported. * * \return The host address and port values in a pair structure. */ QPair StreamTubeServer::exportedTcpSocketAddress() const { return qMakePair(mPriv->exportedAddr, mPriv->exportedPort); } /** * Return the fixed parameters, if any, which are sent along when offering the exported socket on * all handled tubes. * * To prevent accidentally leaving the current parameters to be sent when offering a different * socket, or vice versa, the parameters can only be set together with the socket using * exportTcpSocket(). Parameters often contain sensitive information such as session identifiers or * authentication credentials, which could then be used to maliciously access the service listening * on the other socket. * * If a custom dynamic ParametersGenerator was passed to exportTcpSocket() instead of a set of fixed * parameters, an empty set of parameters is returned. * * \return The parameters in a string-variant map. */ QVariantMap StreamTubeServer::exportedParameters() const { if (!mPriv->generator) { return QVariantMap(); } FixedParametersGenerator *generator = dynamic_cast(mPriv->generator); if (generator) { return generator->nextParameters(AccountPtr(), OutgoingStreamTubeChannelPtr(), ChannelRequestHints()); } else { return QVariantMap(); } } /** * Set the server to offer the socket listening at the given (\a address, \a port) combination as the * local endpoint of tubes handled in the future. * * A fixed set of protocol bootstrapping \a parameters can optionally be set to be sent along with all * tube offers until the next call to exportTcpSocket(). See the ParametersGenerator documentation * for an in-depth description of the parameter transfer mechanism, and a more flexible way to vary * the parameters between each handled tube. * * The handler is registered on the bus at the latest when this method or another exportTcpSocket() * overload is called for the first time, so one should check the return value of isRegistered() at * that point to verify that was successful. * * \param address The listen address of the socket. * \param port The port of the socket. * \param parameters The bootstrapping parameters in a string-value map. */ void StreamTubeServer::exportTcpSocket( const QHostAddress &address, quint16 port, const QVariantMap ¶meters) { if (address.isNull() || port == 0) { warning() << "Attempted to export null TCP socket address or zero port, ignoring"; return; } mPriv->exportedAddr = address; mPriv->exportedPort = port; mPriv->generator = 0; if (!parameters.isEmpty()) { mPriv->fixedGenerator.reset(new FixedParametersGenerator(parameters)); mPriv->generator = mPriv->fixedGenerator.data(); } mPriv->ensureRegistered(); } /** * Set the StreamTubeServer to offer the already listening TCP \a server as the local endpoint of tubes * handled in the future. * * This is just a convenience wrapper around * exportTcpSocket(const QHostAddress &, quint16, const QVariantMap &) to be used when the TCP * server code is implemented using the QtNetwork facilities. * * A fixed set of protocol bootstrapping \a parameters can optionally be set to be sent along with all * tube offers until the next call to exportTcpSocket(). See the ParametersGenerator documentation * for an in-depth description of the parameter transfer mechanism, and a more flexible way to vary * the parameters between each handled tube. * * \param server A pointer to the TCP server. * \param parameters The bootstrapping parameters in a string-value map. */ void StreamTubeServer::exportTcpSocket( const QTcpServer *server, const QVariantMap ¶meters) { if (!server->isListening()) { warning() << "Attempted to export non-listening QTcpServer, ignoring"; return; } if (server->serverAddress() == QHostAddress::Any #if QT_VERSION >= 0x050000 || server->serverAddress() == QHostAddress::AnyIPv4 #endif ) { return exportTcpSocket(QHostAddress::LocalHost, server->serverPort(), parameters); } else if (server->serverAddress() == QHostAddress::AnyIPv6) { return exportTcpSocket(QHostAddress::LocalHostIPv6, server->serverPort(), parameters); } else { return exportTcpSocket(server->serverAddress(), server->serverPort(), parameters); } } /** * Set the server to offer the socket listening at the given \a address - \a port combination as the * local endpoint of tubes handled in the future, sending the parameters from the given \a generator * along with the offers. * * The handler is registered on the bus at the latest when this method or another exportTcpSocket() * overload is called for the first time, so one should check the return value of isRegistered() at * that point to verify that was successful. * * \param address The listen address of the socket. * \param port The port of the socket. * \param generator A pointer to the bootstrapping parameters generator. */ void StreamTubeServer::exportTcpSocket( const QHostAddress &address, quint16 port, ParametersGenerator *generator) { if (address.isNull() || port == 0) { warning() << "Attempted to export null TCP socket address or zero port, ignoring"; return; } mPriv->exportedAddr = address; mPriv->exportedPort = port; mPriv->generator = generator; mPriv->ensureRegistered(); } /** * Set the server to offer the already listening TCP \a server as the local endpoint of tubes * handled in the future, sending the parameters from the given \a generator along with the offers. * * This is just a convenience wrapper around * exportTcpSocket(const QHostAddress &, quint16, ParametersGenerator *) to be used when the TCP * server code is implemented using the QtNetwork facilities. * * \param server A pointer to the TCP server. * \param generator A pointer to the bootstrapping parameters generator. */ void StreamTubeServer::exportTcpSocket( const QTcpServer *server, ParametersGenerator *generator) { if (!server->isListening()) { warning() << "Attempted to export non-listening QTcpServer, ignoring"; return; } if (server->serverAddress() == QHostAddress::Any #if QT_VERSION >= 0x050000 || server->serverAddress() == QHostAddress::AnyIPv4 #endif ) { return exportTcpSocket(QHostAddress::LocalHost, server->serverPort(), generator); } else if (server->serverAddress() == QHostAddress::AnyIPv6) { return exportTcpSocket(QHostAddress::LocalHostIPv6, server->serverPort(), generator); } else { return exportTcpSocket(server->serverAddress(), server->serverPort(), generator); } } /** * Return the tubes currently handled by the server. * * \return A list of Tube structures containing pointers to the account and tube channel for each * tube. */ QList StreamTubeServer::tubes() const { QList tubes; foreach (TubeWrapper *wrapper, mPriv->tubes.values()) { tubes.push_back(Tube(wrapper->mAcc, wrapper->mTube)); } return tubes; } /** * Return the ongoing TCP connections over tubes handled by this server. * * The returned mapping has the connection source addresses as keys and the contacts along with the * accounts which can be used to reach them as values. Connections through protocol backends which * don't support SocketAccessControlPort will be included as the potentially many values for the * null source address key, the pair (\c QHostAddress::Null, 0). * * This is effectively a state recovery accessor corresponding to the change notification signals * newTcpConnection() and tcpConnectionClosed(). * * The mapping is only populated if connection monitoring was requested when creating the server (so * monitorsConnections() returns \c true). * * \return The connections in a mapping with pairs of their source host addresses and ports as keys * and structures containing pointers to the account and remote contacts they're from as values. */ QHash, StreamTubeServer::RemoteContact> StreamTubeServer::tcpConnections() const { QHash, RemoteContact> conns; if (!monitorsConnections()) { warning() << "StreamTubeServer::tcpConnections() used, but connection monitoring is disabled"; return conns; } foreach (const Tube &tube, tubes()) { // Ignore invalid and non-Open tubes to prevent a few useless warnings in corner cases where // a tube is still being opened, or has been invalidated but we haven't processed that event // yet. if (!tube.channel()->isValid() || tube.channel()->state() != TubeChannelStateOpen) { continue; } if (tube.channel()->addressType() != SocketAddressTypeIPv4 && tube.channel()->addressType() != SocketAddressTypeIPv6) { continue; } QHash, uint> srcAddrConns = tube.channel()->connectionsForSourceAddresses(); QHash connContacts = tube.channel()->contactsForConnections(); QPair srcAddr; foreach (srcAddr, srcAddrConns.keys()) { ContactPtr contact = connContacts.take(srcAddrConns.value(srcAddr)); conns.insert(srcAddr, RemoteContact(tube.account(), contact)); } // The remaining values in our copy of connContacts are those which didn't have a // corresponding source address, probably because the service doesn't properly implement // Port AC foreach (const ContactPtr &contact, connContacts.values()) { // Insert them with an invalid source address as the key conns.insertMulti(qMakePair(QHostAddress(QHostAddress::Null), quint16(0)), RemoteContact(tube.account(), contact)); } } return conns; } void StreamTubeServer::onInvokedForTube( const AccountPtr &acc, const StreamTubeChannelPtr &tube, const QDateTime &time, const ChannelRequestHints &hints) { Q_ASSERT(isRegistered()); // our SSTH shouldn't be receiving any channels unless it's registered Q_ASSERT(tube->isRequested()); Q_ASSERT(tube->isValid()); // SSTH won't emit invalid tubes OutgoingStreamTubeChannelPtr outgoing = OutgoingStreamTubeChannelPtr::qObjectCast(tube); if (outgoing) { emit tubeRequested(acc, outgoing, time, hints); } else { warning() << "The ChannelFactory used by StreamTubeServer must construct" << "OutgoingStreamTubeChannel subclasses for Requested=true StreamTubes"; tube->requestClose(); return; } if (!mPriv->tubes.contains(tube)) { debug().nospace() << "Offering socket " << mPriv->exportedAddr << ":" << mPriv->exportedPort << " on tube " << tube->objectPath(); QVariantMap params; if (mPriv->generator) { params = mPriv->generator->nextParameters(acc, outgoing, hints); } Q_ASSERT(!mPriv->exportedAddr.isNull() && mPriv->exportedPort != 0); TubeWrapper *wrapper = new TubeWrapper(acc, outgoing, mPriv->exportedAddr, mPriv->exportedPort, params, this); connect(wrapper, SIGNAL(offerFinished(TubeWrapper*,Tp::PendingOperation*)), SLOT(onOfferFinished(TubeWrapper*,Tp::PendingOperation*))); connect(tube.data(), SIGNAL(invalidated(Tp::DBusProxy*,QString,QString)), SLOT(onTubeInvalidated(Tp::DBusProxy*,QString,QString))); if (monitorsConnections()) { connect(wrapper, SIGNAL(newConnection(TubeWrapper*,uint)), SLOT(onNewConnection(TubeWrapper*,uint))); connect(wrapper, SIGNAL(connectionClosed(TubeWrapper*,uint,QString,QString)), SLOT(onConnectionClosed(TubeWrapper*,uint,QString,QString))); } mPriv->tubes.insert(outgoing, wrapper); } } void StreamTubeServer::onOfferFinished( TubeWrapper *wrapper, Tp::PendingOperation *op) { OutgoingStreamTubeChannelPtr tube = wrapper->mTube; if (op->isError()) { warning() << "Offer() failed, closing tube" << tube->objectPath() << '-' << op->errorName() << ':' << op->errorMessage(); if (wrapper->mTube->isValid()) { wrapper->mTube->requestClose(); } wrapper->mTube->disconnect(this); emit tubeClosed(wrapper->mAcc, wrapper->mTube, op->errorName(), op->errorMessage()); mPriv->tubes.remove(wrapper->mTube); wrapper->deleteLater(); } else { debug() << "Tube" << tube->objectPath() << "offered successfully"; } } void StreamTubeServer::onTubeInvalidated( Tp::DBusProxy *proxy, const QString &error, const QString &message) { OutgoingStreamTubeChannelPtr tube(qobject_cast(proxy)); Q_ASSERT(!tube.isNull()); TubeWrapper *wrapper = mPriv->tubes.value(tube); if (!wrapper) { // Offer finish with error already removed it return; } debug() << "Tube" << tube->objectPath() << "invalidated with" << error << ':' << message; emit tubeClosed(wrapper->mAcc, wrapper->mTube, error, message); mPriv->tubes.remove(tube); delete wrapper; } void StreamTubeServer::onNewConnection( TubeWrapper *wrapper, uint conn) { Q_ASSERT(monitorsConnections()); if (wrapper->mTube->addressType() == SocketAddressTypeIPv4 || wrapper->mTube->addressType() == SocketAddressTypeIPv6) { QHash, uint> srcAddrConns = wrapper->mTube->connectionsForSourceAddresses(); QHash connContacts = wrapper->mTube->contactsForConnections(); QPair srcAddr = srcAddrConns.key(conn); emit newTcpConnection(srcAddr.first, srcAddr.second, wrapper->mAcc, connContacts.value(conn), wrapper->mTube); } else { // No UNIX socket should ever have been offered yet Q_ASSERT(false); } } void StreamTubeServer::onConnectionClosed( TubeWrapper *wrapper, uint conn, const QString &error, const QString &message) { Q_ASSERT(monitorsConnections()); if (wrapper->mTube->addressType() == SocketAddressTypeIPv4 || wrapper->mTube->addressType() == SocketAddressTypeIPv6) { QHash, uint> srcAddrConns = wrapper->mTube->connectionsForSourceAddresses(); QHash connContacts = wrapper->mTube->contactsForConnections(); QPair srcAddr = srcAddrConns.key(conn); emit tcpConnectionClosed(srcAddr.first, srcAddr.second, wrapper->mAcc, connContacts.value(conn), error, message, wrapper->mTube); } else { // No UNIX socket should ever have been offered yet Q_ASSERT(false); } } /** * \fn void StreamTubeServer::tubeRequested(const AccountPtr &account, const * OutgoingStreamTubeChannelPtr &tube, const QDateTime &userActionTime, const ChannelRequestHints * &hints) * * Emitted when a tube has been requested for one of our services, and we've began handling it. * * This is emitted before invoking the ParametersGenerator, if any, for the tube. * * \param account A pointer to the account from which the tube was requested from. * \param tube A pointer to the actual tube channel. * \param userActionTime The time the request occurred at, if it was an user action. Should be used * for focus stealing prevention. * \param hints The hints passed to the request, if any. */ /** * \fn void StreamTubeServer::tubeClosed(const AccountPtr &account, const * OutgoingStreamTubeChannelPtr &tube, const QString &error, const QString &message) * * Emitted when a tube we've been handling (previously announced with tubeRequested()) has * encountered an error or has otherwise been closed from further communication. * * \param account A pointer to the account from which the tube was requested from. * \param tube A pointer to the actual tube channel. * \param error The D-Bus error name corresponding to the reason for the closure. * \param message A freeform debug message associated with the error. */ /** * \fn void StreamTubeServer::newTcpConnection(const QHostAddress &sourceAddress, quint16 * sourcePort, const AccountPtr &account, const ContactPtr &contact, const * OutgoingStreamTubeChannelPtr &tube) * * Emitted when we have picked up a new TCP connection to the (current or previous) exported server * socket. This can be used to associate connections the protocol backend relays to the exported * socket with the remote contact who originally initiated them in the other end of the tube. * * This is only emitted if connection monitoring was enabled when creating the StreamTubeServer. * Additionally, if the protocol backend the connection is from doesn't support the * ::SocketAccessControlPort mechanism, the source address and port will always be invalid. * * \param sourceAddress The source address of the connection, or QHostAddress::Null if it can't be * resolved. * \param sourcePort The source port of the connection, or 0 if it can't be resolved. * \param account A pointer to the account through which the remote contact can be reached. * \param contact A pointer to the remote contact object. * \param tube A pointer to the tube channel through which the connection has been made. */ /** * \fn void StreamTubeServer::tcpConnectionClosed(const QHostAddress &sourceAddress, quint16 * sourcePort, const AccountPtr &account, const ContactPtr &contact, conts QString &error, const * QString &message, const OutgoingStreamTubeChannelPtr &tube) * * Emitted when a TCP connection (previously announced with newTcpConnection()) through one of our * handled tubes has been closed due to an error or by a graceful disconnect (in which case the * error is ::TP_QT_ERROR_DISCONNECTED). * * This is only emitted if connection monitoring was enabled when creating the StreamTubeServer. * Additionally, if the protocol backend the connection is from doesn't support the * ::SocketAccessControlPort mechanism, the source address and port will always be invalid. * * \param sourceAddress The source address of the connection, or QHostAddress::Null if it couldn't * be resolved. * \param sourcePort The source port of the connection, or 0 if it couldn't be resolved. * \param account A pointer to the account through which the remote contact can be reached. * \param contact A pointer to the remote contact object. * \param error The D-Bus error name corresponding to the reason for the closure. * \param message A freeform debug message associated with the error. * \param tube A pointer to the tube channel through which the connection has been made. */ } // Tp telepathy-qt-0.9.3/TelepathyQt/outgoing-stream-tube-channel.cpp0000644000175200001440000010366112000056607027062 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010-2011 Collabora Ltd. * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/outgoing-stream-tube-channel-internal.h" #include "TelepathyQt/_gen/outgoing-stream-tube-channel.moc.hpp" #include "TelepathyQt/_gen/outgoing-stream-tube-channel-internal.moc.hpp" #include "TelepathyQt/debug-internal.h" #include "TelepathyQt/types-internal.h" #include #include #include #include #include #include #include #include namespace Tp { PendingOpenTube::Private::Private(const QVariantMap ¶meters, PendingOpenTube *parent) : parent(parent), parameters(parameters) { } PendingOpenTube::PendingOpenTube( PendingVoid *offerOperation, const QVariantMap ¶meters, const OutgoingStreamTubeChannelPtr &object) : PendingOperation(object), mPriv(new Private(parameters, this)) { mPriv->tube = object; // FIXME: connect to channel invalidation here also debug() << "Calling StreamTube.Offer"; if (offerOperation->isFinished()) { onOfferFinished(offerOperation); } else { // Connect the pending void connect(offerOperation, SIGNAL(finished(Tp::PendingOperation*)), this, SLOT(onOfferFinished(Tp::PendingOperation*))); } } PendingOpenTube::~PendingOpenTube() { delete mPriv; } void PendingOpenTube::onOfferFinished(PendingOperation *op) { if (op->isError()) { warning().nospace() << "StreamTube.Offer failed with " << op->errorName() << ": " << op->errorMessage(); setFinishedWithError(op->errorName(), op->errorMessage()); return; } debug() << "StreamTube.Offer returned successfully"; // It might have been already opened - check if (mPriv->tube->state() != TubeChannelStateOpen) { debug() << "Awaiting tube to be opened"; // Wait until the tube gets opened on the other side connect(mPriv->tube.data(), SIGNAL(stateChanged(Tp::TubeChannelState)), SLOT(onTubeStateChanged(Tp::TubeChannelState))); } onTubeStateChanged(mPriv->tube->state()); } void PendingOpenTube::onTubeStateChanged(TubeChannelState state) { if (state == TubeChannelStateOpen) { debug() << "Tube is now opened"; // Inject the parameters into the tube mPriv->tube->setParameters(mPriv->parameters); // The tube is ready: let's notify setFinished(); } else { if (state != TubeChannelStateRemotePending) { warning() << "Offering tube failed with" << TP_QT_ERROR_CONNECTION_REFUSED; // Something happened setFinishedWithError(TP_QT_ERROR_CONNECTION_REFUSED, QLatin1String("The connection to this tube was refused")); } else { debug() << "Awaiting remote to accept the tube"; } } } QueuedContactFactory::QueuedContactFactory(Tp::ContactManagerPtr contactManager, QObject* parent) : QObject(parent), m_isProcessing(false), m_manager(contactManager) { } QueuedContactFactory::~QueuedContactFactory() { } void QueuedContactFactory::processNextRequest() { if (m_isProcessing) { // Return, nothing to do return; } if (m_queue.isEmpty()) { // Queue completed, notify and return emit queueCompleted(); return; } m_isProcessing = true; Entry entry = m_queue.dequeue(); // TODO: pass id hints to ContactManager if we ever gain support to retrieve contact ids // from NewRemoteConnection. PendingContacts *pc = m_manager->contactsForHandles(entry.handles); pc->setProperty("__TpQt__QueuedContactFactoryUuid", entry.uuid.toString()); connect(pc, SIGNAL(finished(Tp::PendingOperation*)), this, SLOT(onPendingContactsFinished(Tp::PendingOperation*))); } QUuid QueuedContactFactory::appendNewRequest(const Tp::UIntList &handles) { // Create a new entry Entry entry; entry.uuid = QUuid::createUuid(); entry.handles = handles; m_queue.enqueue(entry); // Enqueue a process request in the event loop QTimer::singleShot(0, this, SLOT(processNextRequest())); // Return the UUID return entry.uuid; } void QueuedContactFactory::onPendingContactsFinished(PendingOperation *op) { PendingContacts *pc = qobject_cast(op); QUuid uuid = QUuid(pc->property("__TpQt__QueuedContactFactoryUuid").toString()); emit contactsRetrieved(uuid, pc->contacts()); // No longer processing m_isProcessing = false; // Go for next one processNextRequest(); } OutgoingStreamTubeChannel::Private::Private(OutgoingStreamTubeChannel *parent) : parent(parent), queuedContactFactory(new QueuedContactFactory(parent->connection()->contactManager(), parent)) { } /** * \class OutgoingStreamTubeChannel * \ingroup clientchannel * \headerfile TelepathyQt/outgoing-stream-tube-channel.h * * \brief The OutgoingStreamTubeChannel class represents an outgoing Telepathy channel * of type StreamTube. * * Outgoing (locally initiated/requested) tubes are initially in the #TubeChannelStateNotOffered state. The * various offer methods in this class can be used to offer a local listening TCP or Unix socket for * the tube's target to connect to, at which point the tube becomes #TubeChannelStateRemotePending. * If the target accepts the connection request, the state goes #TubeChannelStateOpen and the * connection manager will start tunneling any incoming connections from the recipient side to the * local service. */ /** * Feature representing the core that needs to become ready to make the * OutgoingStreamTubeChannel object usable. * * This is currently the same as StreamTubeChannel::FeatureCore, but may change to include more. * * When calling isReady(), becomeReady(), this feature is implicitly added * to the requested features. */ const Feature OutgoingStreamTubeChannel::FeatureCore = Feature(QLatin1String(StreamTubeChannel::staticMetaObject.className()), 0); // ST::FeatureCore /** * Create a new OutgoingStreamTubeChannel object. * * \param connection Connection owning this channel, and specifying the * service. * \param objectPath The channel object path. * \param immutableProperties The channel immutable properties. * \return A OutgoingStreamTubeChannelPtr object pointing to the newly created * OutgoingStreamTubeChannel object. */ OutgoingStreamTubeChannelPtr OutgoingStreamTubeChannel::create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) { return OutgoingStreamTubeChannelPtr(new OutgoingStreamTubeChannel(connection, objectPath, immutableProperties, OutgoingStreamTubeChannel::FeatureCore)); } /** * Construct a new OutgoingStreamTubeChannel object. * * \param connection Connection owning this channel, and specifying the * service. * \param objectPath The channel object path. * \param immutableProperties The channel immutable properties. * \param coreFeature The core feature of the channel type, if any. The corresponding introspectable should * depend on OutgoingStreamTubeChannel::FeatureCore. */ OutgoingStreamTubeChannel::OutgoingStreamTubeChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature) : StreamTubeChannel(connection, objectPath, immutableProperties, coreFeature), mPriv(new Private(this)) { connect(mPriv->queuedContactFactory, SIGNAL(contactsRetrieved(QUuid,QList)), this, SLOT(onContactsRetrieved(QUuid,QList))); } /** * Class destructor. */ OutgoingStreamTubeChannel::~OutgoingStreamTubeChannel() { delete mPriv; } /** * Offer a TCP socket over this stream tube. * * This method offers a TCP socket over this tube. The socket's address is given as * a QHostAddress and a numerical port in native byte order. * * If your application uses QTcpServer as the local TCP server implementation, you can use the * offerTcpSocket(const QTcpServer *, const QVariantMap &) overload instead to more easily pass the * server's listen address. * * It is guaranteed that when the PendingOperation returned by this method will be completed, * the tube will be opened and ready to be used. * * Connection managers adhering to the \telepathy_spec should always support offering IPv4 TCP * sockets. IPv6 sockets are only supported if supportsIPv6SocketsOnLocalhost() is \c true. * * Note that the library will try to use #SocketAccessControlPort access control whenever possible, * as it allows to map connections to users based on their source addresses. If * supportsIPv4SocketsWithSpecifiedAddress() or supportsIPv6SocketsWithSpecifiedAddress() for IPv4 * and IPv6 sockets respectively is \c false, this feature is not available, and the * connectionsForSourceAddresses() map won't contain useful distinct keys. * * Arbitrary parameters can be associated with the offer to bootstrap legacy protocols; these will * in particular be available as IncomingStreamTubeChannel::parameters() for a tube receiver * implemented using TelepathyQt in the other end. * * This method requires OutgoingStreamTubeChannel::FeatureCore to be ready. * * \param address A valid IPv4 or IPv6 address pointing to an existing socket. * \param port The port the socket is listening for connections to. * \param parameters A dictionary of arbitrary parameters to send with the tube offer. * \return A PendingOperation which will emit PendingOperation::finished * when the stream tube is ready to be used * (hence in the #TubeStateOpen state). */ PendingOperation *OutgoingStreamTubeChannel::offerTcpSocket( const QHostAddress &address, quint16 port, const QVariantMap ¶meters) { if (!isReady(OutgoingStreamTubeChannel::FeatureCore)) { warning() << "OutgoingStreamTubeChannel::FeatureCore must be ready before " "calling offerTube"; return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Channel not ready"), OutgoingStreamTubeChannelPtr(this)); } // The tube must be not offered if (state() != TubeChannelStateNotOffered) { warning() << "You can not expose more than a socket for each Stream Tube"; return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Channel busy"), OutgoingStreamTubeChannelPtr(this)); } SocketAccessControl accessControl = SocketAccessControlLocalhost; // Check if port is supported QHostAddress hostAddress = address; #if QT_VERSION >= 0x050000 if (hostAddress == QHostAddress::Any) { hostAddress = QHostAddress::AnyIPv4; } #endif // In this specific overload, we're handling an IPv4/IPv6 socket if (hostAddress.protocol() == QAbstractSocket::IPv4Protocol) { // IPv4 case SocketAccessControl accessControl; // Do some heuristics to find out the best access control.We always prefer port for tracking // connections and source addresses. if (supportsIPv4SocketsWithSpecifiedAddress()) { accessControl = SocketAccessControlPort; } else if (supportsIPv4SocketsOnLocalhost()) { accessControl = SocketAccessControlLocalhost; } else { // There are no combinations supported for this socket warning() << "You requested an address type/access control combination " "not supported by this channel"; return new PendingFailure(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("The requested address type/access control " "combination is not supported"), OutgoingStreamTubeChannelPtr(this)); } setAddressType(SocketAddressTypeIPv4); setAccessControl(accessControl); setIpAddress(qMakePair(hostAddress, port)); SocketAddressIPv4 addr; addr.address = hostAddress.toString(); addr.port = port; PendingVoid *pv = new PendingVoid( interface()->Offer( SocketAddressTypeIPv4, QDBusVariant(QVariant::fromValue(addr)), accessControl, parameters), OutgoingStreamTubeChannelPtr(this)); PendingOpenTube *op = new PendingOpenTube(pv, parameters, OutgoingStreamTubeChannelPtr(this)); return op; } else if (hostAddress.protocol() == QAbstractSocket::IPv6Protocol) { // IPv6 case // Do some heuristics to find out the best access control.We always prefer port for tracking // connections and source addresses. if (supportsIPv6SocketsWithSpecifiedAddress()) { accessControl = SocketAccessControlPort; } else if (supportsIPv6SocketsOnLocalhost()) { accessControl = SocketAccessControlLocalhost; } else { // There are no combinations supported for this socket warning() << "You requested an address type/access control combination " "not supported by this channel"; return new PendingFailure(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("The requested address type/access control " "combination is not supported"), OutgoingStreamTubeChannelPtr(this)); } setAddressType(SocketAddressTypeIPv6); setAccessControl(accessControl); setIpAddress(qMakePair(hostAddress, port)); SocketAddressIPv6 addr; addr.address = hostAddress.toString(); addr.port = port; PendingVoid *pv = new PendingVoid( interface()->Offer( SocketAddressTypeIPv6, QDBusVariant(QVariant::fromValue(addr)), accessControl, parameters), OutgoingStreamTubeChannelPtr(this)); PendingOpenTube *op = new PendingOpenTube(pv, parameters, OutgoingStreamTubeChannelPtr(this)); return op; } else { // We're handling an IPv4/IPv6 socket only warning() << "offerTube can be called only with a QHostAddress representing " "an IPv4 or IPv6 address"; return new PendingFailure(TP_QT_ERROR_INVALID_ARGUMENT, QLatin1String("Invalid host given"), OutgoingStreamTubeChannelPtr(this)); } } /** * Offer a TCP socket over this stream tube. * * Otherwise identical to offerTcpSocket(const QHostAddress &, quint16, const QVariantMap &), but * allows passing the local service's address in an already listening QTcpServer. * * \param server A valid QTcpServer, which should be already listening for incoming connections. * \param parameters A dictionary of arbitrary parameters to send with the tube offer. * \return A PendingOperation which will emit PendingOperation::finished * when the stream tube is ready to be used * (hence in the #TubeStateOpen state). */ PendingOperation *OutgoingStreamTubeChannel::offerTcpSocket( const QTcpServer *server, const QVariantMap ¶meters) { // In this overload, we're handling a superset of QHostAddress. // Let's redirect the call to QHostAddress's overload return offerTcpSocket(server->serverAddress(), server->serverPort(), parameters); } /** * Offer an Unix socket over this stream tube. * * This method offers an Unix socket over this stream tube. The socket address is given as a * a QString, which should contain the path to the socket. Abstract Unix sockets are also supported, * and are given as addresses prefixed with a \c NUL byte. * * If your application uses QLocalServer as the local Unix server implementation, you can use the * offerUnixSocket(const QLocalServer *, const QVariantMap &, bool) overload instead to more easily * pass the server's listen address. * * Note that only connection managers for which supportsUnixSocketsOnLocalhost() or * supportsAbstractUnixSocketsOnLocalhost() is \c true support exporting Unix sockets. * * If supportsUnixSocketsWithCredentials() or supportsAbstractUnixSocketsWithCredentials(), as * appropriate, returns \c true, the \c requireCredentials parameter can be set to \c true to make * the connection manager pass an SCM_CREDS or SCM_CREDENTIALS message as supported by the platform * when making a new connection. This enables preventing other local users from connecting to the * service, but might not be possible to use with all protocols as the message is in-band in the * data stream. * * Arbitrary parameters can be associated with the offer to bootstrap legacy protocols; these will * in particular be available as IncomingStreamTubeChannel::parameters() for a tube receiver * implemented using TelepathyQt in the other end. * * This method requires OutgoingStreamTubeChannel::FeatureCore to be ready. * * \param address A valid path to an existing Unix socket or abstract Unix socket. * \param parameters A dictionary of arbitrary parameters to send with the tube offer. * \param requireCredentials Whether the server requires a SCM_CREDS or SCM_CREDENTIALS message * upon connection. * \return A PendingOperation which will emit PendingOperation::finished * when the stream tube is ready to be used * (hence in the #TubeStateOpen state). */ PendingOperation *OutgoingStreamTubeChannel::offerUnixSocket( const QString &socketAddress, const QVariantMap ¶meters, bool requireCredentials) { SocketAccessControl accessControl = requireCredentials ? SocketAccessControlCredentials : SocketAccessControlLocalhost; if (!isReady(OutgoingStreamTubeChannel::FeatureCore)) { warning() << "OutgoingStreamTubeChannel::FeatureCore must be ready before " "calling offerTube"; return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Channel not ready"), OutgoingStreamTubeChannelPtr(this)); } // The tube must be not offered if (state() != TubeChannelStateNotOffered) { warning() << "You can not expose more than a socket for each Stream Tube"; return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Channel busy"), OutgoingStreamTubeChannelPtr(this)); } // In this specific overload, we're handling an Unix/AbstractUnix socket if (socketAddress.startsWith(QLatin1Char('\0'))) { // Abstract Unix socket case // Check if the combination type/access control is supported if ((accessControl == SocketAccessControlLocalhost && !supportsAbstractUnixSocketsOnLocalhost()) || (accessControl == SocketAccessControlCredentials && !supportsAbstractUnixSocketsWithCredentials()) ) { warning() << "You requested an address type/access control combination " "not supported by this channel"; return new PendingFailure(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("The requested address type/access control " "combination is not supported"), OutgoingStreamTubeChannelPtr(this)); } setAddressType(SocketAddressTypeAbstractUnix); setAccessControl(accessControl); setLocalAddress(socketAddress); PendingVoid *pv = new PendingVoid( interface()->Offer( SocketAddressTypeAbstractUnix, QDBusVariant(QVariant(socketAddress.toLatin1())), accessControl, parameters), OutgoingStreamTubeChannelPtr(this)); PendingOpenTube *op = new PendingOpenTube(pv, parameters, OutgoingStreamTubeChannelPtr(this)); return op; } else { // Unix socket case // Check if the combination type/access control is supported if ((accessControl == SocketAccessControlLocalhost && !supportsUnixSocketsOnLocalhost()) || (accessControl == SocketAccessControlCredentials && !supportsUnixSocketsWithCredentials()) || (accessControl != SocketAccessControlLocalhost && accessControl != SocketAccessControlCredentials) ) { warning() << "You requested an address type/access control combination " "not supported by this channel"; return new PendingFailure(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("The requested address type/access control " "combination is not supported"), OutgoingStreamTubeChannelPtr(this)); } setAddressType(SocketAddressTypeUnix); setAccessControl(accessControl); setLocalAddress(socketAddress); PendingVoid *pv = new PendingVoid( interface()->Offer( SocketAddressTypeUnix, QDBusVariant(QVariant(socketAddress.toLatin1())), accessControl, parameters), OutgoingStreamTubeChannelPtr(this)); PendingOpenTube *op = new PendingOpenTube(pv, parameters, OutgoingStreamTubeChannelPtr(this)); return op; } } /** * Offer an Unix socket over the tube. * * Otherwise identical to offerUnixSocket(const QString &, const QVariantMap &, bool), but allows * passing the local service's address as an already listening QLocalServer. * * This method requires OutgoingStreamTubeChannel::FeatureCore to be ready. * * \param server A valid QLocalServer, which should be already listening for incoming connections. * \param parameters A dictionary of arbitrary parameters to send with the tube offer. * \param requireCredentials Whether the server should require a SCM_CRED or SCM_CREDENTIALS message * upon connection. * \return A PendingOperation which will emit PendingOperation::finished * when the stream tube is ready to be used * (hence in the #TubeStateOpen state). * \sa StreamTubeChannel::supportsUnixSocketsOnLocalhost(), * StreamTubeChannel::supportsUnixSocketsWithCredentials(), * StreamTubeChannel::supportsAbstractUnixSocketsOnLocalhost(), * StreamTubeChannel::supportsAbstractUnixSocketsWithCredentials() */ PendingOperation *OutgoingStreamTubeChannel::offerUnixSocket( const QLocalServer *server, const QVariantMap ¶meters, bool requireCredentials) { // In this overload, we're handling a superset of a local socket // Let's redirect the call to QString's overload return offerUnixSocket(server->fullServerName(), parameters, requireCredentials); } /** * Return a map from a source address to the corresponding connections ids. * * The connection ids retrieved here can be used to map a source address * which connected to your socket to a connection ID (for error reporting) and further, to a contact * (by using contactsForConnections()). * * This method is only useful if a TCP socket was offered on this tube and the connection manager * supports #SocketAccessControlPort, which can be discovered using * supportsIPv4SocketsWithSpecifiedAddress() and supportsIPv6SocketsWithSpecifiedAddress() for IPv4 * and IPv6 sockets respectively. * * Note that this function will only return valid data after the tube has been opened. * * This method requires StreamTubeChannel::FeatureConnectionMonitoring to be ready. * * \return The map from source addresses as (QHostAddress, port in native byte order) pairs to the * corresponding connection ids. * \sa connectionsForCredentials() */ QHash, uint> OutgoingStreamTubeChannel::connectionsForSourceAddresses() const { if (addressType() != SocketAddressTypeIPv4 && addressType() != SocketAddressTypeIPv6) { warning() << "OutgoingStreamTubeChannel::connectionsForSourceAddresses() makes sense " "just when offering a TCP socket"; return QHash, uint>(); } if (isValid() || !isDroppingConnections() || !requestedFeatures().contains(StreamTubeChannel::FeatureConnectionMonitoring)) { if (!isReady(StreamTubeChannel::FeatureConnectionMonitoring)) { warning() << "StreamTubeChannel::FeatureConnectionMonitoring must be ready before " " calling connectionsForSourceAddresses"; return QHash, uint>(); } if (state() != TubeChannelStateOpen) { warning() << "OutgoingStreamTubeChannel::connectionsForSourceAddresses() makes sense " "just when the tube is open"; return QHash, uint>(); } } return mPriv->connectionsForSourceAddresses; } /** * Return a map from a credential byte to the corresponding connections ids. * * The connection ids retrieved here can be used to map a source address * which connected to your socket to a connection ID (for error reporting) and further, to a contact * (by using contactsForConnections()). * * This method is only useful if this tube was offered using an Unix socket and passing credential * bytes was enabled (\c requireCredentials == true). * * Note that this function will only return valid data after the tube has been opened. * * This method requires StreamTubeChannel::FeatureConnectionMonitoring to be ready. * * \return The map from credential bytes to the corresponding connection ids. * \sa connectionsForSourceAddresses() */ QHash OutgoingStreamTubeChannel::connectionsForCredentials() const { if (addressType() != SocketAddressTypeUnix && addressType() != SocketAddressTypeAbstractUnix) { warning() << "OutgoingStreamTubeChannel::connectionsForCredentials() makes sense " "just when offering an Unix socket"; return QHash(); } if (accessControl() != SocketAccessControlCredentials) { warning() << "OutgoingStreamTubeChannel::connectionsForCredentials() makes sense " "just when offering an Unix socket requiring credentials"; return QHash(); } if (isValid() || !isDroppingConnections() || !requestedFeatures().contains(StreamTubeChannel::FeatureConnectionMonitoring)) { if (!isReady(StreamTubeChannel::FeatureConnectionMonitoring)) { warning() << "StreamTubeChannel::FeatureConnectionMonitoring must be ready before " "calling OutgoingStreamTubeChannel::connectionsForCredentials()"; return QHash(); } if (state() != TubeChannelStateOpen) { warning() << "OutgoingStreamTubeChannel::connectionsForCredentials() makes sense " "just when the tube is opened"; return QHash(); } } return mPriv->connectionsForCredentials; } /** * Return a map from connection ids to the associated contact. * * Note that this function will only return valid data after the tube has been opened. * * This method requires StreamTubeChannel::FeatureConnectionMonitoring to be ready. * \return The map from connection ids to pointer to Contact objects. * \sa connectionsForSourceAddresses(), connectionsForCredentials(), * StreamTubeChannel::addressType() */ QHash OutgoingStreamTubeChannel::contactsForConnections() const { if (isValid() || !isDroppingConnections() || !requestedFeatures().contains(StreamTubeChannel::FeatureConnectionMonitoring)) { if (!isReady(StreamTubeChannel::FeatureConnectionMonitoring)) { warning() << "StreamTubeChannel::FeatureConnectionMonitoring must be ready before " "calling contactsForConnections"; return QHash(); } if (state() != TubeChannelStateOpen) { warning() << "OutgoingStreamTubeChannel::contactsForConnections() makes sense " "just when the tube is open"; return QHash(); } } return mPriv->contactsForConnections; } void OutgoingStreamTubeChannel::onNewRemoteConnection( uint contactId, const QDBusVariant ¶meter, uint connectionId) { // Request the handles from our queued contact factory QUuid uuid = mPriv->queuedContactFactory->appendNewRequest(UIntList() << contactId); // Add a pending connection mPriv->pendingNewConnections.insert(uuid, qMakePair(connectionId, parameter)); } void OutgoingStreamTubeChannel::onContactsRetrieved( const QUuid &uuid, const QList &contacts) { if (!isValid()) { debug() << "Invalidated OutgoingStreamTubeChannel not emitting queued connection event"; return; } if (!mPriv->pendingNewConnections.contains(uuid)) { if (mPriv->pendingClosedConnections.contains(uuid)) { // closed connection Private::ClosedConnection conn = mPriv->pendingClosedConnections.take(uuid); // First, do removeConnection() so connectionClosed is emitted, and anybody connected to it // (like StreamTubeServer) has a chance to recover the source address / contact removeConnection(conn.id, conn.error, conn.message); // Remove stuff from our hashes mPriv->contactsForConnections.remove(conn.id); QHash, uint>::iterator srcAddrIter = mPriv->connectionsForSourceAddresses.begin(); while (srcAddrIter != mPriv->connectionsForSourceAddresses.end()) { if (srcAddrIter.value() == conn.id) { srcAddrIter = mPriv->connectionsForSourceAddresses.erase(srcAddrIter); } else { ++srcAddrIter; } } QHash::iterator credIter = mPriv->connectionsForCredentials.begin(); while (credIter != mPriv->connectionsForCredentials.end()) { if (credIter.value() == conn.id) { credIter = mPriv->connectionsForCredentials.erase(credIter); } else { ++credIter; } } } else { warning() << "No pending connections found in OSTC" << objectPath() << "for contacts" << contacts; } return; } // new connection QPair connectionProperties = mPriv->pendingNewConnections.take(uuid); // Add it to our connections hash foreach (const Tp::ContactPtr &contact, contacts) { mPriv->contactsForConnections.insert(connectionProperties.first, contact); } QPair address; address.first = QHostAddress::Null; // Now let's try to track the parameter if (addressType() == SocketAddressTypeIPv4) { // Try a qdbus_cast to our address struct: we're shielded from crashes // thanks to our specification SocketAddressIPv4 addr = qdbus_cast(connectionProperties.second.variant()); address.first = QHostAddress(addr.address); address.second = addr.port; } else if (addressType() == SocketAddressTypeIPv6) { SocketAddressIPv6 addr = qdbus_cast(connectionProperties.second.variant()); address.first = QHostAddress(addr.address); address.second = addr.port; } else if (addressType() == SocketAddressTypeUnix || addressType() == SocketAddressTypeAbstractUnix) { if (accessControl() == SocketAccessControlCredentials) { uchar credentialByte = qdbus_cast(connectionProperties.second.variant()); mPriv->connectionsForCredentials.insertMulti(credentialByte, connectionProperties.first); } } if (address.first != QHostAddress::Null) { // We can map it to a source address as well mPriv->connectionsForSourceAddresses.insertMulti(address, connectionProperties.first); } // Time for us to emit the signal addConnection(connectionProperties.first); } // This replaces the base class onConnectionClosed() slot, but unlike a virtual function, is ABI // compatible void OutgoingStreamTubeChannel::onConnectionClosed(uint connectionId, const QString &errorName, const QString &errorMessage) { // Insert a fake request to our queued contact factory to make the close events properly ordered // with new connection events QUuid uuid = mPriv->queuedContactFactory->appendNewRequest(UIntList()); // Add a pending connection close mPriv->pendingClosedConnections.insert(uuid, Private::ClosedConnection(connectionId, errorName, errorMessage)); } } telepathy-qt-0.9.3/TelepathyQt/PendingStringList0000644000175200001440000000040312000056607024207 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_PendingStringList_HEADER_GUARD_ #define _TelepathyQt_PendingStringList_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/account.h0000644000175200001440000006610212000056607022472 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008 Collabora Ltd. * @copyright Copyright (C) 2008 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_account_h_HEADER_GUARD_ #define _TelepathyQt_account_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #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 PendingChannel; class PendingChannelRequest; class PendingConnection; class PendingOperation; class PendingReady; class PendingStringList; class TP_QT_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(AvatarSpec avatarRequirements READ avatarRequirements) 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); AvatarSpec avatarRequirements() const; // 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-qt 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; PresenceSpecList allowedPresenceStatuses(bool includeAllStatuses = false) const; uint maxPresenceStatusMessageLength() 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(); bool supportsRequestHints() const; bool requestsSucceedWithChannel() const; PendingChannelRequest *ensureTextChat( const QString &contactIdentifier, const QDateTime &userActionTime = QDateTime::currentDateTime(), const QString &preferredHandler = QString(), const ChannelRequestHints &hints = ChannelRequestHints()); PendingChannelRequest *ensureTextChat( const ContactPtr &contact, const QDateTime &userActionTime = QDateTime::currentDateTime(), const QString &preferredHandler = QString(), const ChannelRequestHints &hints = ChannelRequestHints()); PendingChannelRequest *ensureTextChatroom( const QString &roomName, const QDateTime &userActionTime = QDateTime::currentDateTime(), const QString &preferredHandler = QString(), const ChannelRequestHints &hints = ChannelRequestHints()); PendingChannelRequest *ensureAudioCall( const QString &contactIdentifier, const QString &initialAudioContentName = QString(), const QDateTime &userActionTime = QDateTime::currentDateTime(), const QString &preferredHandler = QString(), const ChannelRequestHints &hints = ChannelRequestHints()); PendingChannelRequest *ensureAudioCall( const ContactPtr &contact, const QString &initialAudioContentName = QString(), const QDateTime &userActionTime = QDateTime::currentDateTime(), const QString &preferredHandler = QString(), const ChannelRequestHints &hints = ChannelRequestHints()); PendingChannelRequest *ensureVideoCall( const QString &contactIdentifier, const QString &initialVideoContentName = QString(), const QDateTime &userActionTime = QDateTime::currentDateTime(), const QString &preferredHandler = QString(), const ChannelRequestHints &hints = ChannelRequestHints()); PendingChannelRequest *ensureVideoCall( const ContactPtr &contact, const QString &initialVideoContentName = QString(), const QDateTime &userActionTime = QDateTime::currentDateTime(), const QString &preferredHandler = QString(), const ChannelRequestHints &hints = ChannelRequestHints()); PendingChannelRequest *ensureAudioVideoCall( const QString &contactIdentifier, const QString &initialAudioContentName = QString(), const QString &initialVideoContentName = QString(), const QDateTime &userActionTime = QDateTime::currentDateTime(), const QString &preferredHandler = QString(), const ChannelRequestHints &hints = ChannelRequestHints()); PendingChannelRequest *ensureAudioVideoCall( const ContactPtr &contact, const QString &initialAudioContentName = QString(), const QString &initialVideoContentName = QString(), const QDateTime &userActionTime = QDateTime::currentDateTime(), const QString &preferredHandler = QString(), const ChannelRequestHints &hints = ChannelRequestHints()); TP_QT_DEPRECATED PendingChannelRequest *ensureStreamedMediaCall( const QString &contactIdentifier, const QDateTime &userActionTime = QDateTime::currentDateTime(), const QString &preferredHandler = QString(), const ChannelRequestHints &hints = ChannelRequestHints()); TP_QT_DEPRECATED PendingChannelRequest *ensureStreamedMediaCall( const ContactPtr &contact, const QDateTime &userActionTime = QDateTime::currentDateTime(), const QString &preferredHandler = QString(), const ChannelRequestHints &hints = ChannelRequestHints()); TP_QT_DEPRECATED PendingChannelRequest *ensureStreamedMediaAudioCall( const QString &contactIdentifier, const QDateTime &userActionTime = QDateTime::currentDateTime(), const QString &preferredHandler = QString(), const ChannelRequestHints &hints = ChannelRequestHints()); TP_QT_DEPRECATED PendingChannelRequest *ensureStreamedMediaAudioCall( const ContactPtr &contact, const QDateTime &userActionTime = QDateTime::currentDateTime(), const QString &preferredHandler = QString(), const ChannelRequestHints &hints = ChannelRequestHints()); TP_QT_DEPRECATED PendingChannelRequest *ensureStreamedMediaVideoCall( const QString &contactIdentifier, bool withAudio = true, const QDateTime &userActionTime = QDateTime::currentDateTime(), const QString &preferredHandler = QString(), const ChannelRequestHints &hints = ChannelRequestHints()); TP_QT_DEPRECATED PendingChannelRequest *ensureStreamedMediaVideoCall( const ContactPtr &contact, bool withAudio = false, const QDateTime &userActionTime = QDateTime::currentDateTime(), const QString &preferredHandler = QString(), const ChannelRequestHints &hints = ChannelRequestHints()); PendingChannelRequest *createFileTransfer( const QString &contactIdentifier, const FileTransferChannelCreationProperties &properties, const QDateTime &userActionTime = QDateTime::currentDateTime(), const QString &preferredHandler = QString(), const ChannelRequestHints &hints = ChannelRequestHints()); PendingChannelRequest *createFileTransfer( const ContactPtr &contact, const FileTransferChannelCreationProperties &properties, const QDateTime &userActionTime = QDateTime::currentDateTime(), const QString &preferredHandler = QString(), const ChannelRequestHints &hints = ChannelRequestHints()); PendingChannelRequest *createStreamTube( const QString &contactIdentifier, const QString &service, const QDateTime &userActionTime = QDateTime::currentDateTime(), const QString &preferredHandler = QString(), const ChannelRequestHints &hints = ChannelRequestHints()); PendingChannelRequest *createStreamTube( const ContactPtr &contact, const QString &service, const QDateTime &userActionTime = QDateTime::currentDateTime(), const QString &preferredHandler = QString(), const ChannelRequestHints &hints = ChannelRequestHints()); PendingChannelRequest *createDBusTube( const QString &contactIdentifier, const QString &serviceName, const QDateTime &userActionTime = QDateTime::currentDateTime(), const QString &preferredHandler = QString(), const ChannelRequestHints &hints = ChannelRequestHints()); PendingChannelRequest *createDBusTube( const ContactPtr &contact, const QString &serviceName, const QDateTime &userActionTime = QDateTime::currentDateTime(), const QString &preferredHandler = QString(), const ChannelRequestHints &hints = ChannelRequestHints()); TP_QT_DEPRECATED PendingChannelRequest *createConferenceStreamedMediaCall( const QList &channels, const QStringList &initialInviteeContactsIdentifiers = QStringList(), const QDateTime &userActionTime = QDateTime::currentDateTime(), const QString &preferredHandler = QString(), const ChannelRequestHints &hints = ChannelRequestHints()); TP_QT_DEPRECATED PendingChannelRequest *createConferenceStreamedMediaCall( const QList &channels, const QList &initialInviteeContacts = QList(), const QDateTime &userActionTime = QDateTime::currentDateTime(), const QString &preferredHandler = QString(), const ChannelRequestHints &hints = ChannelRequestHints()); PendingChannelRequest *createConferenceTextChat( const QList &channels, const QList &initialInviteeContacts = QList(), const QDateTime &userActionTime = QDateTime::currentDateTime(), const QString &preferredHandler = QString(), const ChannelRequestHints &hints = ChannelRequestHints()); PendingChannelRequest *createConferenceTextChat( const QList &channels, const QStringList &initialInviteeContactsIdentifiers = QStringList(), const QDateTime &userActionTime = QDateTime::currentDateTime(), const QString &preferredHandler = QString(), const ChannelRequestHints &hints = ChannelRequestHints()); PendingChannelRequest *createConferenceTextChatroom( const QString &roomName, const QList &channels, const QStringList &initialInviteeContactsIdentifiers = QStringList(), const QDateTime &userActionTime = QDateTime::currentDateTime(), const QString &preferredHandler = QString(), const ChannelRequestHints &hints = ChannelRequestHints()); PendingChannelRequest *createConferenceTextChatroom( const QString &roomName, const QList &channels, const QList &initialInviteeContacts = QList(), const QDateTime &userActionTime = QDateTime::currentDateTime(), const QString &preferredHandler = QString(), const ChannelRequestHints &hints = ChannelRequestHints()); PendingChannelRequest *createContactSearch( const QString &server, uint limit = 0, const QDateTime &userActionTime = QDateTime::currentDateTime(), const QString &preferredHandler = QString(), const ChannelRequestHints &hints = ChannelRequestHints()); PendingChannel *ensureAndHandleTextChat( const QString &contactIdentifier, const QDateTime &userActionTime = QDateTime::currentDateTime()); PendingChannel *ensureAndHandleTextChat( const ContactPtr &contact, const QDateTime &userActionTime = QDateTime::currentDateTime()); PendingChannel *ensureAndHandleTextChatroom( const QString &roomName, const QDateTime &userActionTime = QDateTime::currentDateTime()); PendingChannel *ensureAndHandleAudioCall( const QString &contactIdentifier, const QString &initialAudioContentName = QString(), const QDateTime &userActionTime = QDateTime::currentDateTime()); PendingChannel *ensureAndHandleAudioCall( const ContactPtr &contact, const QString &initialAudioContentName = QString(), const QDateTime &userActionTime = QDateTime::currentDateTime()); PendingChannel *ensureAndHandleVideoCall( const QString &contactIdentifier, const QString &initialVideoContentName = QString(), const QDateTime &userActionTime = QDateTime::currentDateTime()); PendingChannel *ensureAndHandleVideoCall( const ContactPtr &contact, const QString &initialVideoContentName = QString(), const QDateTime &userActionTime = QDateTime::currentDateTime()); PendingChannel *ensureAndHandleAudioVideoCall( const QString &contactIdentifier, const QString &initialAudioContentName = QString(), const QString &initialVideoContentName = QString(), const QDateTime &userActionTime = QDateTime::currentDateTime()); PendingChannel *ensureAndHandleAudioVideoCall( const ContactPtr &contact, const QString &initialAudioContentName = QString(), const QString &initialVideoContentName = QString(), const QDateTime &userActionTime = QDateTime::currentDateTime()); TP_QT_DEPRECATED PendingChannel *ensureAndHandleStreamedMediaCall( const QString &contactIdentifier, const QDateTime &userActionTime = QDateTime::currentDateTime()); TP_QT_DEPRECATED PendingChannel *ensureAndHandleStreamedMediaCall( const ContactPtr &contact, const QDateTime &userActionTime = QDateTime::currentDateTime()); TP_QT_DEPRECATED PendingChannel *ensureAndHandleStreamedMediaAudioCall( const QString &contactIdentifier, const QDateTime &userActionTime = QDateTime::currentDateTime()); TP_QT_DEPRECATED PendingChannel *ensureAndHandleStreamedMediaAudioCall( const ContactPtr &contact, const QDateTime &userActionTime = QDateTime::currentDateTime()); TP_QT_DEPRECATED PendingChannel *ensureAndHandleStreamedMediaVideoCall( const QString &contactIdentifier, bool withAudio = true, const QDateTime &userActionTime = QDateTime::currentDateTime()); TP_QT_DEPRECATED PendingChannel *ensureAndHandleStreamedMediaVideoCall( const ContactPtr &contact, bool withAudio = true, const QDateTime &userActionTime = QDateTime::currentDateTime()); PendingChannel *createAndHandleFileTransfer( const QString &contactIdentifier, const FileTransferChannelCreationProperties &properties, const QDateTime &userActionTime = QDateTime::currentDateTime()); PendingChannel *createAndHandleFileTransfer( const ContactPtr &contact, const FileTransferChannelCreationProperties &properties, const QDateTime &userActionTime = QDateTime::currentDateTime()); PendingChannel *createAndHandleStreamTube( const QString &contactIdentifier, const QString &service, const QDateTime &userActionTime = QDateTime::currentDateTime()); PendingChannel *createAndHandleStreamTube( const ContactPtr &contact, const QString &service, const QDateTime &userActionTime = QDateTime::currentDateTime()); PendingChannel *createAndHandleDBusTube( const QString &contactIdentifier, const QString &serviceName, const QDateTime &userActionTime = QDateTime::currentDateTime()); PendingChannel *createAndHandleDBusTube( const ContactPtr &contact, const QString &serviceName, const QDateTime &userActionTime = QDateTime::currentDateTime()); PendingChannel *createAndHandleConferenceTextChat( const QList &channels, const QList &initialInviteeContacts = QList(), const QDateTime &userActionTime = QDateTime::currentDateTime()); PendingChannel *createAndHandleConferenceTextChat( const QList &channels, const QStringList &initialInviteeContactsIdentifiers = QStringList(), const QDateTime &userActionTime = QDateTime::currentDateTime()); PendingChannel *createAndHandleConferenceTextChatroom( const QString &roomName, const QList &channels, const QStringList &initialInviteeContactsIdentifiers = QStringList(), const QDateTime &userActionTime = QDateTime::currentDateTime()); PendingChannel *createAndHandleConferenceTextChatroom( const QString &roomName, const QList &channels, const QList &initialInviteeContacts = QList(), const QDateTime &userActionTime = QDateTime::currentDateTime()); TP_QT_DEPRECATED PendingChannel *createAndHandleConferenceStreamedMediaCall( const QList &channels, const QStringList &initialInviteeContactsIdentifiers = QStringList(), const QDateTime &userActionTime = QDateTime::currentDateTime()); TP_QT_DEPRECATED PendingChannel *createAndHandleConferenceStreamedMediaCall( const QList &channels, const QList &initialInviteeContacts = QList(), const QDateTime &userActionTime = QDateTime::currentDateTime()); PendingChannel *createAndHandleContactSearch( const QString &server = QString(), uint limit = 0, const QDateTime &userActionTime = QDateTime::currentDateTime()); // advanced PendingChannelRequest *createChannel( const QVariantMap &requestedProperties, const QDateTime &userActionTime = QDateTime::currentDateTime(), const QString &preferredHandler = QString(), const ChannelRequestHints &hints = ChannelRequestHints()); PendingChannelRequest *ensureChannel( const QVariantMap &requestedProperties, const QDateTime &userActionTime = QDateTime::currentDateTime(), const QString &preferredHandler = QString(), const ChannelRequestHints &hints = ChannelRequestHints()); PendingChannel *createAndHandleChannel( const QVariantMap &requestedProperties, const QDateTime &userActionTime); PendingChannel *ensureAndHandleChannel( const QVariantMap &requestedProperties, const QDateTime &userActionTime); 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: friend class PendingChannelRequest; // to access dispatcherInterface() 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; Client::ChannelDispatcherInterface *dispatcherInterface() const; private Q_SLOTS: TP_QT_NO_EXPORT void onDispatcherIntrospected(Tp::PendingOperation *op); TP_QT_NO_EXPORT void gotMainProperties(QDBusPendingCallWatcher *); TP_QT_NO_EXPORT void gotAvatar(QDBusPendingCallWatcher *); TP_QT_NO_EXPORT void onAvatarChanged(); TP_QT_NO_EXPORT void onConnectionManagerReady(Tp::PendingOperation *); TP_QT_NO_EXPORT void onConnectionReady(Tp::PendingOperation *); TP_QT_NO_EXPORT void onPropertyChanged(const QVariantMap &delta); TP_QT_NO_EXPORT void onRemoved(); TP_QT_NO_EXPORT void onConnectionBuilt(Tp::PendingOperation *); private: struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/ready-object.cpp0000644000175200001440000001076112000056607023741 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/debug-internal.h" #include #include namespace Tp { struct TP_QT_NO_EXPORT ReadyObject::Private { Private(ReadyObject *parent, RefCounted *object, Feature featureCore); Private(ReadyObject *parent, DBusProxy *proxy, Feature featureCore); ~Private(); ReadyObject *parent; const Features coreFeatures; ReadinessHelper *readinessHelper; }; ReadyObject::Private::Private(ReadyObject *parent, RefCounted *object, Feature featureCore) : parent(parent), coreFeatures(Features() << featureCore), readinessHelper(new ReadinessHelper(object)) { } ReadyObject::Private::Private(ReadyObject *parent, DBusProxy *proxy, Feature featureCore) : parent(parent), coreFeatures(Features() << featureCore), readinessHelper(new ReadinessHelper(proxy)) { } ReadyObject::Private::~Private() { delete readinessHelper; } /** * \class ReadyObject * \ingroup clientreadiness * \headerfile TelepathyQt/ready-object.h> */ /** * Construct a new ReadyObject object. * * \param object The RefCounted the object refers to. * \param featureCore The core feature of the object. */ ReadyObject::ReadyObject(RefCounted *object, const Feature &featureCore) : mPriv(new Private(this, object, featureCore)) { } /** * Construct a new ReadyObject object. * * \param proxy The DBusProxy the object refers to. * \param featureCore The core feature of the object. */ ReadyObject::ReadyObject(DBusProxy *proxy, const Feature &featureCore) : mPriv(new Private(this, proxy, featureCore)) { } /** * Class destructor. */ ReadyObject::~ReadyObject() { delete mPriv; } /** * Return whether this object has finished its initial setup. * * This is mostly useful as a sanity check, in code that shouldn't be run * until the object is ready. To wait for the object to be ready, call * becomeReady() and connect to the finished signal on the result. * * \param features The features which should be tested * \return \c true if the object has finished its initial setup for basic * functionality plus the given features */ bool ReadyObject::isReady(const Features &features) const { if (features.isEmpty()) { return mPriv->readinessHelper->isReady(mPriv->coreFeatures); } return mPriv->readinessHelper->isReady(features); } /** * Return a pending operation which will succeed when this object finishes * its initial setup, or will fail if a fatal error occurs during this * initial setup. * * If an empty set is used FeatureCore will be considered as the requested * feature. * * \param requestedFeatures The features which should be enabled * \return A PendingReady object which will emit finished * when this object has finished or failed initial setup for basic * functionality plus the given features */ PendingReady *ReadyObject::becomeReady(const Features &requestedFeatures) { if (requestedFeatures.isEmpty()) { return mPriv->readinessHelper->becomeReady(mPriv->coreFeatures); } return mPriv->readinessHelper->becomeReady(requestedFeatures); } Features ReadyObject::requestedFeatures() const { return mPriv->readinessHelper->requestedFeatures(); } Features ReadyObject::actualFeatures() const { return mPriv->readinessHelper->actualFeatures(); } Features ReadyObject::missingFeatures() const { return mPriv->readinessHelper->missingFeatures(); } ReadinessHelper *ReadyObject::readinessHelper() const { return mPriv->readinessHelper; } } // Tp telepathy-qt-0.9.3/TelepathyQt/manager-file.h0000644000175200001440000000443512000056607023366 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2010 Collabora Ltd. * @copyright Copyright (C) 2008-2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_manager_file_h_HEADER_GUARD_ #define _TelepathyQt_manager_file_h_HEADER_GUARD_ #include #include #include #include #include #ifndef DOXYGEN_SHOULD_SKIP_THIS namespace Tp { class TP_QT_NO_EXPORT ManagerFile { public: ManagerFile(); ManagerFile(const ManagerFile &other); ManagerFile(const QString &cmName); ~ManagerFile(); ManagerFile &operator=(const ManagerFile &other); QString cmName() const; bool isValid() const; QStringList protocols() const; ParamSpecList parameters(const QString &protocol) const; QString vcardField(const QString &protocol) const; QString englishName(const QString &protocol) const; QString iconName(const QString &protocol) const; RequestableChannelClassList requestableChannelClasses( const QString &protocol) const; PresenceSpecList allowedPresenceStatuses(const QString &protocol) const; AvatarSpec avatarRequirements(const QString &protocol) const; QStringList addressableVCardFields(const QString &protocol) const; QStringList addressableUriSchemes(const QString &protocol) const; private: struct Private; friend struct Private; Private *mPriv; }; } Q_DECLARE_METATYPE(Tp::ManagerFile); #endif /* DOXYGEN_SHOULD_SKIP_THIS */ #endif telepathy-qt-0.9.3/TelepathyQt/dbus-object.cpp0000644000175200001440000000410612000056607023566 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/dbus-object.moc.hpp" #include namespace Tp { struct TP_QT_NO_EXPORT DBusObject::Private { Private(const QDBusConnection &dbusConnection) : dbusConnection(dbusConnection) { } QDBusConnection dbusConnection; }; /** * \class DBusObject * \ingroup servicesideimpl * \headerfile TelepathyQt/dbus-object.h * * \brief A QObject on which low-level D-Bus adaptors are plugged to provide a D-Bus object. */ /** * Construct a DBusObject that operates on the given \a dbusConnection. * * \param dbusConnection The D-Bus connection to use. * \param parent The QObject parent of this instance. */ DBusObject::DBusObject(const QDBusConnection &dbusConnection, QObject *parent) : QObject(parent), mPriv(new Private(dbusConnection)) { } /** * Class destructor. */ DBusObject::~DBusObject() { delete mPriv; } /** * Return the D-Bus connection associated with this object. * * \return The D-Bus connection associated with this object. */ QDBusConnection DBusObject::dbusConnection() const { return mPriv->dbusConnection; } } telepathy-qt-0.9.3/TelepathyQt/account-property-filter.cpp0000644000175200001440000000526012000056607026170 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/debug-internal.h" #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT AccountPropertyFilter::Private { Private() { if (supportedAccountProperties.isEmpty()) { const QMetaObject metaObject = Account::staticMetaObject; for (int i = metaObject.propertyOffset(); i < metaObject.propertyCount(); ++i) { supportedAccountProperties << QLatin1String(metaObject.property(i).name()); } } } static QStringList supportedAccountProperties; }; QStringList AccountPropertyFilter::Private::supportedAccountProperties; /** * \class Tp::AccountPropertyFilter * \ingroup utils * \headerfile TelepathyQt/account-property-filter.h * * \brief The AccountPropertyFilter class provides a filter object to be used * to filter accounts by properties. */ AccountPropertyFilter::AccountPropertyFilter() : GenericPropertyFilter(), mPriv(new Private()) { } AccountPropertyFilter::~AccountPropertyFilter() { delete mPriv; } bool AccountPropertyFilter::isValid() const { QVariantMap mFilter = filter(); if (mFilter.isEmpty()) { return false; } QVariantMap::const_iterator i = mFilter.constBegin(); QVariantMap::const_iterator end = mFilter.constEnd(); while (i != end) { QString propertyName = i.key(); if (!mPriv->supportedAccountProperties.contains(propertyName)) { warning() << "Invalid filter key" << propertyName << "while filtering account by properties"; return false; } ++i; } return true; } } // Tp telepathy-qt-0.9.3/TelepathyQt/channel.cpp0000644000175200001440000037644212000056607023014 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008 Collabora Ltd. * @copyright Copyright (C) 2008 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/channel-internal.h" #include "TelepathyQt/_gen/cli-channel-body.hpp" #include "TelepathyQt/_gen/cli-channel.moc.hpp" #include "TelepathyQt/_gen/channel.moc.hpp" #include "TelepathyQt/_gen/channel-internal.moc.hpp" #include "TelepathyQt/debug-internal.h" #include "TelepathyQt/future-internal.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace Tp { using TpFuture::Client::ChannelInterfaceMergeableConferenceInterface; using TpFuture::Client::ChannelInterfaceSplittableInterface; struct TP_QT_NO_EXPORT Channel::Private { Private(Channel *parent, const ConnectionPtr &connection, const QVariantMap &immutableProperties); ~Private(); static void introspectMain(Private *self); void introspectMainProperties(); void introspectMainFallbackChannelType(); void introspectMainFallbackHandle(); void introspectMainFallbackInterfaces(); void introspectGroup(); void introspectGroupFallbackFlags(); void introspectGroupFallbackMembers(); void introspectGroupFallbackLocalPendingWithInfo(); void introspectGroupFallbackSelfHandle(); void introspectConference(); static void introspectConferenceInitialInviteeContacts(Private *self); void continueIntrospection(); void extractMainProps(const QVariantMap &props); void extract0176GroupProps(const QVariantMap &props); void nowHaveInterfaces(); void nowHaveInitialMembers(); bool setGroupFlags(uint groupFlags); void buildContacts(); void doMembersChangedDetailed(const UIntList &, const UIntList &, const UIntList &, const UIntList &, const QVariantMap &); void processMembersChanged(); void updateContacts(const QList &contacts = QList()); bool fakeGroupInterfaceIfNeeded(); void setReady(); QString groupMemberChangeDetailsTelepathyError( const GroupMemberChangeDetails &details); inline ChannelInterfaceMergeableConferenceInterface *mergeableConferenceInterface( InterfaceSupportedChecking check = CheckInterfaceSupported) const { return parent->optionalInterface(check); } inline ChannelInterfaceSplittableInterface *splittableInterface( InterfaceSupportedChecking check = CheckInterfaceSupported) const { return parent->optionalInterface(check); } void processConferenceChannelRemoved(); struct GroupMembersChangedInfo; struct ConferenceChannelRemovedInfo; // Public object Channel *parent; // Instance of generated interface class Client::ChannelInterface *baseInterface; // Mandatory properties interface proxy Client::DBus::PropertiesInterface *properties; // Owning connection - it can be a SharedPtr as Connection does not cache // channels ConnectionPtr connection; QVariantMap immutableProperties; // Optional interface proxies Client::ChannelInterfaceGroupInterface *group; Client::ChannelInterfaceConferenceInterface *conference; ReadinessHelper *readinessHelper; // Introspection QQueue introspectQueue; // Introspected properties // Main interface QString channelType; uint targetHandleType; uint targetHandle; QString targetId; ContactPtr targetContact; bool requested; uint initiatorHandle; ContactPtr initiatorContact; // Group flags uint groupFlags; bool usingMembersChangedDetailed; // Group member introspection bool groupHaveMembers; bool buildingContacts; // Queue of received MCD signals to process QQueue groupMembersChangedQueue; GroupMembersChangedInfo *currentGroupMembersChangedInfo; // Pending from the MCD signal currently processed, but contacts not yet built QSet pendingGroupMembers; QSet pendingGroupLocalPendingMembers; QSet pendingGroupRemotePendingMembers; UIntList groupMembersToRemove; UIntList groupLocalPendingMembersToRemove; UIntList groupRemotePendingMembersToRemove; // Initial members UIntList groupInitialMembers; LocalPendingInfoList groupInitialLP; UIntList groupInitialRP; // Current members QHash groupContacts; QHash groupLocalPendingContacts; QHash groupRemotePendingContacts; // Stored change info QHash groupLocalPendingContactsChangeInfo; GroupMemberChangeDetails groupSelfContactRemoveInfo; // Group handle owners bool groupAreHandleOwnersAvailable; HandleOwnerMap groupHandleOwners; // Group self identity bool pendingRetrieveGroupSelfContact; bool groupIsSelfHandleTracked; uint groupSelfHandle; ContactPtr groupSelfContact; // Conference bool introspectingConference; QHash conferenceChannels; QHash conferenceInitialChannels; QString conferenceInvitationMessage; QHash conferenceOriginalChannels; UIntList conferenceInitialInviteeHandles; Contacts conferenceInitialInviteeContacts; QQueue conferenceChannelRemovedQueue; bool buildingConferenceChannelRemovedActorContact; static const QString keyActor; }; struct TP_QT_NO_EXPORT Channel::Private::GroupMembersChangedInfo { GroupMembersChangedInfo(const UIntList &added, const UIntList &removed, const UIntList &localPending, const UIntList &remotePending, const QVariantMap &details) : added(added), removed(removed), localPending(localPending), remotePending(remotePending), details(details), // TODO most of these probably should be removed once the rest of the code using them is sanitized actor(qdbus_cast(details.value(keyActor))), reason(qdbus_cast(details.value(keyChangeReason))), message(qdbus_cast(details.value(keyMessage))) { } UIntList added; UIntList removed; UIntList localPending; UIntList remotePending; QVariantMap details; uint actor; uint reason; QString message; static const QString keyChangeReason; static const QString keyMessage; static const QString keyContactIds; }; struct TP_QT_NO_EXPORT Channel::Private::ConferenceChannelRemovedInfo { ConferenceChannelRemovedInfo(const QDBusObjectPath &channelPath, const QVariantMap &details) : channelPath(channelPath), details(details) { } QDBusObjectPath channelPath; QVariantMap details; }; const QString Channel::Private::keyActor(QLatin1String("actor")); const QString Channel::Private::GroupMembersChangedInfo::keyChangeReason( QLatin1String("change-reason")); const QString Channel::Private::GroupMembersChangedInfo::keyMessage(QLatin1String("message")); const QString Channel::Private::GroupMembersChangedInfo::keyContactIds(QLatin1String("contact-ids")); Channel::Private::Private(Channel *parent, const ConnectionPtr &connection, const QVariantMap &immutableProperties) : parent(parent), baseInterface(new Client::ChannelInterface(parent)), properties(parent->interface()), connection(connection), immutableProperties(immutableProperties), group(0), conference(0), readinessHelper(parent->readinessHelper()), targetHandleType(0), targetHandle(0), requested(false), initiatorHandle(0), groupFlags(0), usingMembersChangedDetailed(false), groupHaveMembers(false), buildingContacts(false), currentGroupMembersChangedInfo(0), groupAreHandleOwnersAvailable(false), pendingRetrieveGroupSelfContact(false), groupIsSelfHandleTracked(false), groupSelfHandle(0), introspectingConference(false), buildingConferenceChannelRemovedActorContact(false) { debug() << "Creating new Channel:" << parent->objectPath(); if (connection->isValid()) { debug() << " Connecting to Channel::Closed() signal"; parent->connect(baseInterface, SIGNAL(Closed()), SLOT(onClosed())); debug() << " Connection to owning connection's lifetime signals"; parent->connect(connection.data(), SIGNAL(invalidated(Tp::DBusProxy*,QString,QString)), SLOT(onConnectionInvalidated())); } else { warning() << "Connection given as the owner for a Channel was " "invalid! Channel will be stillborn."; parent->invalidate(TP_QT_ERROR_INVALID_ARGUMENT, QLatin1String("Connection given as the owner of this channel was invalid")); } ReadinessHelper::Introspectables introspectables; // As Channel does not have predefined statuses let's simulate one (0) ReadinessHelper::Introspectable introspectableCore( QSet() << 0, // makesSenseForStatuses Features(), // dependsOnFeatures QStringList(), // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::introspectMain, this); introspectables[FeatureCore] = introspectableCore; // As Channel does not have predefined statuses let's simulate one (0) ReadinessHelper::Introspectable introspectableConferenceInitialInviteeContacts( QSet() << 0, // makesSenseForStatuses Features() << FeatureCore, // dependsOnFeatures QStringList() << TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE, // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::introspectConferenceInitialInviteeContacts, this); introspectables[FeatureConferenceInitialInviteeContacts] = introspectableConferenceInitialInviteeContacts; readinessHelper->addIntrospectables(introspectables); } Channel::Private::~Private() { delete currentGroupMembersChangedInfo; foreach (GroupMembersChangedInfo *info, groupMembersChangedQueue) { delete info; } foreach (ConferenceChannelRemovedInfo *info, conferenceChannelRemovedQueue) { delete info; } } void Channel::Private::introspectMain(Channel::Private *self) { // Make sure connection object is ready, as we need to use some methods that // are only available after connection object gets ready. debug() << "Calling Connection::becomeReady()"; self->parent->connect(self->connection->becomeReady(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onConnectionReady(Tp::PendingOperation*))); } void Channel::Private::introspectMainProperties() { QVariantMap props; QString key; bool needIntrospectMainProps = false; const unsigned numNames = 8; const static QString names[numNames] = { QLatin1String("ChannelType"), QLatin1String("Interfaces"), QLatin1String("TargetHandleType"), QLatin1String("TargetHandle"), QLatin1String("TargetID"), QLatin1String("Requested"), QLatin1String("InitiatorHandle"), QLatin1String("InitiatorID") }; const static QString qualifiedNames[numNames] = { TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL + QLatin1String(".Interfaces"), TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandle"), TP_QT_IFACE_CHANNEL + QLatin1String(".TargetID"), TP_QT_IFACE_CHANNEL + QLatin1String(".Requested"), TP_QT_IFACE_CHANNEL + QLatin1String(".InitiatorHandle"), TP_QT_IFACE_CHANNEL + QLatin1String(".InitiatorID") }; for (unsigned i = 0; i < numNames; ++i) { const QString &qualified = qualifiedNames[i]; if (!immutableProperties.contains(qualified)) { needIntrospectMainProps = true; break; } props.insert(names[i], immutableProperties.value(qualified)); } // Save Requested and InitiatorHandle here, so even if the GetAll return doesn't have them but // the given immutable props do (eg. due to the PendingChannel fallback guesses) we use them requested = qdbus_cast(props[QLatin1String("Requested")]); initiatorHandle = qdbus_cast(props[QLatin1String("InitiatorHandle")]); if (props.contains(QLatin1String("InitiatorID"))) { QString initiatorId = qdbus_cast(props[QLatin1String("InitiatorID")]); connection->lowlevel()->injectContactId(initiatorHandle, initiatorId); } if (needIntrospectMainProps) { debug() << "Calling Properties::GetAll(Channel)"; QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( properties->GetAll(TP_QT_IFACE_CHANNEL), parent); parent->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotMainProperties(QDBusPendingCallWatcher*))); } else { extractMainProps(props); continueIntrospection(); } } void Channel::Private::introspectMainFallbackChannelType() { debug() << "Calling Channel::GetChannelType()"; QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(baseInterface->GetChannelType(), parent); parent->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotChannelType(QDBusPendingCallWatcher*))); } void Channel::Private::introspectMainFallbackHandle() { debug() << "Calling Channel::GetHandle()"; QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(baseInterface->GetHandle(), parent); parent->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotHandle(QDBusPendingCallWatcher*))); } void Channel::Private::introspectMainFallbackInterfaces() { debug() << "Calling Channel::GetInterfaces()"; QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(baseInterface->GetInterfaces(), parent); parent->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotInterfaces(QDBusPendingCallWatcher*))); } void Channel::Private::introspectGroup() { Q_ASSERT(properties != 0); if (!group) { group = parent->interface(); Q_ASSERT(group != 0); } debug() << "Introspecting Channel.Interface.Group for" << parent->objectPath(); parent->connect(group, SIGNAL(GroupFlagsChanged(uint,uint)), SLOT(onGroupFlagsChanged(uint,uint))); parent->connect(group, SIGNAL(MembersChanged(QString,Tp::UIntList, Tp::UIntList,Tp::UIntList, Tp::UIntList,uint,uint)), SLOT(onMembersChanged(QString,Tp::UIntList, Tp::UIntList,Tp::UIntList, Tp::UIntList,uint,uint))); parent->connect(group, SIGNAL(MembersChangedDetailed(Tp::UIntList, Tp::UIntList,Tp::UIntList, Tp::UIntList,QVariantMap)), SLOT(onMembersChangedDetailed(Tp::UIntList, Tp::UIntList,Tp::UIntList, Tp::UIntList,QVariantMap))); parent->connect(group, SIGNAL(HandleOwnersChanged(Tp::HandleOwnerMap, Tp::UIntList)), SLOT(onHandleOwnersChanged(Tp::HandleOwnerMap, Tp::UIntList))); parent->connect(group, SIGNAL(SelfHandleChanged(uint)), SLOT(onSelfHandleChanged(uint))); debug() << "Calling Properties::GetAll(Channel.Interface.Group)"; QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( properties->GetAll(TP_QT_IFACE_CHANNEL_INTERFACE_GROUP), parent); parent->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotGroupProperties(QDBusPendingCallWatcher*))); } void Channel::Private::introspectGroupFallbackFlags() { Q_ASSERT(group != 0); debug() << "Calling Channel.Interface.Group::GetGroupFlags()"; QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(group->GetGroupFlags(), parent); parent->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotGroupFlags(QDBusPendingCallWatcher*))); } void Channel::Private::introspectGroupFallbackMembers() { Q_ASSERT(group != 0); debug() << "Calling Channel.Interface.Group::GetAllMembers()"; QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(group->GetAllMembers(), parent); parent->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotAllMembers(QDBusPendingCallWatcher*))); } void Channel::Private::introspectGroupFallbackLocalPendingWithInfo() { Q_ASSERT(group != 0); debug() << "Calling Channel.Interface.Group::GetLocalPendingMembersWithInfo()"; QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(group->GetLocalPendingMembersWithInfo(), parent); parent->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotLocalPendingMembersWithInfo(QDBusPendingCallWatcher*))); } void Channel::Private::introspectGroupFallbackSelfHandle() { Q_ASSERT(group != 0); debug() << "Calling Channel.Interface.Group::GetSelfHandle()"; QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(group->GetSelfHandle(), parent); parent->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotSelfHandle(QDBusPendingCallWatcher*))); } void Channel::Private::introspectConference() { Q_ASSERT(properties != 0); Q_ASSERT(conference == 0); debug() << "Introspecting Conference interface"; conference = parent->interface(); Q_ASSERT(conference != 0); introspectingConference = true; debug() << "Connecting to Channel.Interface.Conference.ChannelMerged/Removed"; parent->connect(conference, SIGNAL(ChannelMerged(QDBusObjectPath,uint,QVariantMap)), SLOT(onConferenceChannelMerged(QDBusObjectPath,uint,QVariantMap))); parent->connect(conference, SIGNAL(ChannelRemoved(QDBusObjectPath,QVariantMap)), SLOT(onConferenceChannelRemoved(QDBusObjectPath,QVariantMap))); debug() << "Calling Properties::GetAll(Channel.Interface.Conference)"; QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( properties->GetAll(TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE), parent); parent->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotConferenceProperties(QDBusPendingCallWatcher*))); } void Channel::Private::introspectConferenceInitialInviteeContacts(Private *self) { if (!self->conferenceInitialInviteeHandles.isEmpty()) { ContactManagerPtr manager = self->connection->contactManager(); PendingContacts *pendingContacts = manager->contactsForHandles( self->conferenceInitialInviteeHandles); self->parent->connect(pendingContacts, SIGNAL(finished(Tp::PendingOperation *)), SLOT(gotConferenceInitialInviteeContacts(Tp::PendingOperation *))); } else { self->readinessHelper->setIntrospectCompleted( FeatureConferenceInitialInviteeContacts, true); } } void Channel::Private::continueIntrospection() { if (introspectQueue.isEmpty()) { // this should always be true, but let's make sure if (!parent->isReady(Channel::FeatureCore)) { if (groupMembersChangedQueue.isEmpty() && !buildingContacts && !introspectingConference) { debug() << "Both the IS and the MCD queue empty for the first time. Ready."; setReady(); } else { debug() << "Introspection done before contacts done - contacts sets ready"; } } } else { (this->*(introspectQueue.dequeue()))(); } } void Channel::Private::extractMainProps(const QVariantMap &props) { const static QString keyChannelType(QLatin1String("ChannelType")); const static QString keyInterfaces(QLatin1String("Interfaces")); const static QString keyTargetHandle(QLatin1String("TargetHandle")); const static QString keyTargetHandleType(QLatin1String("TargetHandleType")); bool haveProps = props.size() >= 4 && props.contains(keyChannelType) && !qdbus_cast(props[keyChannelType]).isEmpty() && props.contains(keyInterfaces) && props.contains(keyTargetHandle) && props.contains(keyTargetHandleType); if (!haveProps) { warning() << "Channel properties specified in 0.17.7 not found"; introspectQueue.enqueue(&Private::introspectMainFallbackChannelType); introspectQueue.enqueue(&Private::introspectMainFallbackHandle); introspectQueue.enqueue(&Private::introspectMainFallbackInterfaces); } else { parent->setInterfaces(qdbus_cast(props[keyInterfaces])); readinessHelper->setInterfaces(parent->interfaces()); channelType = qdbus_cast(props[keyChannelType]); targetHandle = qdbus_cast(props[keyTargetHandle]); targetHandleType = qdbus_cast(props[keyTargetHandleType]); const static QString keyTargetId(QLatin1String("TargetID")); const static QString keyRequested(QLatin1String("Requested")); const static QString keyInitiatorHandle(QLatin1String("InitiatorHandle")); const static QString keyInitiatorId(QLatin1String("InitiatorID")); if (props.contains(keyTargetId)) { targetId = qdbus_cast(props[keyTargetId]); if (targetHandleType == HandleTypeContact) { connection->lowlevel()->injectContactId(targetHandle, targetId); } } if (props.contains(keyRequested)) { requested = qdbus_cast(props[keyRequested]); } if (props.contains(keyInitiatorHandle)) { initiatorHandle = qdbus_cast(props[keyInitiatorHandle]); } if (props.contains(keyInitiatorId)) { QString initiatorId = qdbus_cast(props[keyInitiatorId]); connection->lowlevel()->injectContactId(initiatorHandle, initiatorId); } if (!fakeGroupInterfaceIfNeeded() && !parent->interfaces().contains(TP_QT_IFACE_CHANNEL_INTERFACE_GROUP) && initiatorHandle) { // No group interface, so nobody will build the poor fellow for us. Will do it ourselves // out of pity for him. // TODO: needs testing. I would imagine some of the elaborate updateContacts logic // tripping over with just this. buildContacts(); } nowHaveInterfaces(); } debug() << "Have initiator handle:" << (initiatorHandle ? "yes" : "no"); } void Channel::Private::extract0176GroupProps(const QVariantMap &props) { const static QString keyGroupFlags(QLatin1String("GroupFlags")); const static QString keyHandleOwners(QLatin1String("HandleOwners")); const static QString keyLPMembers(QLatin1String("LocalPendingMembers")); const static QString keyMembers(QLatin1String("Members")); const static QString keyRPMembers(QLatin1String("RemotePendingMembers")); const static QString keySelfHandle(QLatin1String("SelfHandle")); bool haveProps = props.size() >= 6 && (props.contains(keyGroupFlags) && (qdbus_cast(props[keyGroupFlags]) & ChannelGroupFlagProperties)) && props.contains(keyHandleOwners) && props.contains(keyLPMembers) && props.contains(keyMembers) && props.contains(keyRPMembers) && props.contains(keySelfHandle); if (!haveProps) { warning() << " Properties specified in 0.17.6 not found"; warning() << " Handle owners and self handle tracking disabled"; introspectQueue.enqueue(&Private::introspectGroupFallbackFlags); introspectQueue.enqueue(&Private::introspectGroupFallbackMembers); introspectQueue.enqueue(&Private::introspectGroupFallbackLocalPendingWithInfo); introspectQueue.enqueue(&Private::introspectGroupFallbackSelfHandle); } else { debug() << " Found properties specified in 0.17.6"; groupAreHandleOwnersAvailable = true; groupIsSelfHandleTracked = true; setGroupFlags(qdbus_cast(props[keyGroupFlags])); groupHandleOwners = qdbus_cast(props[keyHandleOwners]); groupInitialMembers = qdbus_cast(props[keyMembers]); groupInitialLP = qdbus_cast(props[keyLPMembers]); groupInitialRP = qdbus_cast(props[keyRPMembers]); uint propSelfHandle = qdbus_cast(props[keySelfHandle]); // Don't overwrite the self handle we got from the Connection with 0 if (propSelfHandle) { groupSelfHandle = propSelfHandle; } nowHaveInitialMembers(); } } void Channel::Private::nowHaveInterfaces() { debug() << "Channel has" << parent->interfaces().size() << "optional interfaces:" << parent->interfaces(); QStringList interfaces = parent->interfaces(); if (interfaces.contains(TP_QT_IFACE_CHANNEL_INTERFACE_GROUP)) { introspectQueue.enqueue(&Private::introspectGroup); } if (interfaces.contains(TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE)) { introspectQueue.enqueue(&Private::introspectConference); } } void Channel::Private::nowHaveInitialMembers() { // Must be called with no contacts anywhere in the first place Q_ASSERT(!parent->isReady(Channel::FeatureCore)); Q_ASSERT(!buildingContacts); Q_ASSERT(pendingGroupMembers.isEmpty()); Q_ASSERT(pendingGroupLocalPendingMembers.isEmpty()); Q_ASSERT(pendingGroupRemotePendingMembers.isEmpty()); Q_ASSERT(groupContacts.isEmpty()); Q_ASSERT(groupLocalPendingContacts.isEmpty()); Q_ASSERT(groupRemotePendingContacts.isEmpty()); // Set groupHaveMembers so we start queueing fresh MCD signals Q_ASSERT(!groupHaveMembers); groupHaveMembers = true; // Synthesize MCD for current + RP groupMembersChangedQueue.enqueue(new GroupMembersChangedInfo( groupInitialMembers, // Members UIntList(), // Removed - obviously, none UIntList(), // LP - will be handled separately, see below groupInitialRP, // Remote pending QVariantMap())); // No details for members + RP // Synthesize one MCD for each initial LP member - they might have different details foreach (const LocalPendingInfo &info, groupInitialLP) { QVariantMap details; if (info.actor != 0) { details.insert(QLatin1String("actor"), info.actor); } if (info.reason != ChannelGroupChangeReasonNone) { details.insert(QLatin1String("change-reason"), info.reason); } if (!info.message.isEmpty()) { details.insert(QLatin1String("message"), info.message); } groupMembersChangedQueue.enqueue(new GroupMembersChangedInfo(UIntList(), UIntList(), UIntList() << info.toBeAdded, UIntList(), details)); } // At least our added MCD event to process processMembersChanged(); } bool Channel::Private::setGroupFlags(uint newGroupFlags) { if (groupFlags == newGroupFlags) { return false; } groupFlags = newGroupFlags; // this shouldn't happen but let's make sure if (!parent->interfaces().contains(TP_QT_IFACE_CHANNEL_INTERFACE_GROUP)) { return false; } if ((groupFlags & ChannelGroupFlagMembersChangedDetailed) && !usingMembersChangedDetailed) { usingMembersChangedDetailed = true; debug() << "Starting to exclusively listen to MembersChangedDetailed for" << parent->objectPath(); parent->disconnect(group, SIGNAL(MembersChanged(QString,Tp::UIntList, Tp::UIntList,Tp::UIntList, Tp::UIntList,uint,uint)), parent, SLOT(onMembersChanged(QString,Tp::UIntList, Tp::UIntList,Tp::UIntList, Tp::UIntList,uint,uint))); } else if (!(groupFlags & ChannelGroupFlagMembersChangedDetailed) && usingMembersChangedDetailed) { warning() << " Channel service did spec-incompliant removal of MCD from GroupFlags"; usingMembersChangedDetailed = false; parent->connect(group, SIGNAL(MembersChanged(QString,Tp::UIntList, Tp::UIntList,Tp::UIntList, Tp::UIntList,uint,uint)), parent, SLOT(onMembersChanged(QString,Tp::UIntList, Tp::UIntList,Tp::UIntList, Tp::UIntList,uint,uint))); } return true; } void Channel::Private::buildContacts() { buildingContacts = true; ContactManagerPtr manager = connection->contactManager(); UIntList toBuild = QSet(pendingGroupMembers + pendingGroupLocalPendingMembers + pendingGroupRemotePendingMembers).toList(); if (currentGroupMembersChangedInfo && currentGroupMembersChangedInfo->actor != 0) { toBuild.append(currentGroupMembersChangedInfo->actor); } if (!initiatorContact && initiatorHandle) { // No initiator contact, but Yes initiator handle - might do something about it with just // that information toBuild.append(initiatorHandle); } if (!targetContact && targetHandleType == HandleTypeContact && targetHandle != 0) { toBuild.append(targetHandle); } // always try to retrieve selfContact and check if it changed on // updateContacts or on gotContacts, in case we were not able to retrieve it if (groupSelfHandle) { toBuild.append(groupSelfHandle); } // group self handle changed to 0 <- strange but it may happen, and contacts // were being built at the time, so check now if (toBuild.isEmpty()) { if (!groupSelfHandle && groupSelfContact) { groupSelfContact.reset(); if (parent->isReady(Channel::FeatureCore)) { emit parent->groupSelfContactChanged(); } } buildingContacts = false; return; } PendingContacts *pendingContacts = manager->contactsForHandles( toBuild); parent->connect(pendingContacts, SIGNAL(finished(Tp::PendingOperation*)), SLOT(gotContacts(Tp::PendingOperation*))); } void Channel::Private::processMembersChanged() { Q_ASSERT(!buildingContacts); if (groupMembersChangedQueue.isEmpty()) { if (pendingRetrieveGroupSelfContact) { pendingRetrieveGroupSelfContact = false; // nothing queued but selfContact changed buildContacts(); return; } if (!parent->isReady(Channel::FeatureCore)) { if (introspectQueue.isEmpty()) { debug() << "Both the MCD and the introspect queue empty for the first time. Ready!"; if (initiatorHandle && !initiatorContact) { warning() << " Unable to create contact object for initiator with handle" << initiatorHandle; } if (targetHandleType == HandleTypeContact && targetHandle != 0 && !targetContact) { warning() << " Unable to create contact object for target with handle" << targetHandle; } if (groupSelfHandle && !groupSelfContact) { warning() << " Unable to create contact object for self handle" << groupSelfHandle; } continueIntrospection(); } else { debug() << "Contact queue empty but introspect queue isn't. IS will set ready."; } } return; } Q_ASSERT(pendingGroupMembers.isEmpty()); Q_ASSERT(pendingGroupLocalPendingMembers.isEmpty()); Q_ASSERT(pendingGroupRemotePendingMembers.isEmpty()); // always set this to false here, as buildContacts will always try to // retrieve the selfContact and updateContacts will check if the built // contact is the same as the current contact. pendingRetrieveGroupSelfContact = false; currentGroupMembersChangedInfo = groupMembersChangedQueue.dequeue(); foreach (uint handle, currentGroupMembersChangedInfo->added) { if (!groupContacts.contains(handle)) { pendingGroupMembers.insert(handle); } // the member was added to current members, check if it was in the // local/pending lists and if true, schedule for removal from that list if (groupLocalPendingContacts.contains(handle)) { groupLocalPendingMembersToRemove.append(handle); } else if(groupRemotePendingContacts.contains(handle)) { groupRemotePendingMembersToRemove.append(handle); } } foreach (uint handle, currentGroupMembersChangedInfo->localPending) { if (!groupLocalPendingContacts.contains(handle)) { pendingGroupLocalPendingMembers.insert(handle); } } foreach (uint handle, currentGroupMembersChangedInfo->remotePending) { if (!groupRemotePendingContacts.contains(handle)) { pendingGroupRemotePendingMembers.insert(handle); } } foreach (uint handle, currentGroupMembersChangedInfo->removed) { groupMembersToRemove.append(handle); } // Always go through buildContacts - we might have a self/initiator/whatever handle to build buildContacts(); } void Channel::Private::updateContacts(const QList &contacts) { Contacts groupContactsAdded; Contacts groupLocalPendingContactsAdded; Contacts groupRemotePendingContactsAdded; ContactPtr actorContact; bool selfContactUpdated = false; debug() << "Entering Chan::Priv::updateContacts() with" << contacts.size() << "contacts"; // FIXME: simplify. Some duplication of logic present. foreach (ContactPtr contact, contacts) { uint handle = contact->handle()[0]; if (pendingGroupMembers.contains(handle)) { groupContactsAdded.insert(contact); groupContacts[handle] = contact; } else if (pendingGroupLocalPendingMembers.contains(handle)) { groupLocalPendingContactsAdded.insert(contact); groupLocalPendingContacts[handle] = contact; // FIXME: should set the details and actor here too groupLocalPendingContactsChangeInfo[handle] = GroupMemberChangeDetails(); } else if (pendingGroupRemotePendingMembers.contains(handle)) { groupRemotePendingContactsAdded.insert(contact); groupRemotePendingContacts[handle] = contact; } if (groupSelfHandle == handle && groupSelfContact != contact) { groupSelfContact = contact; selfContactUpdated = true; } if (!initiatorContact && initiatorHandle == handle) { // No initiator contact stored, but there's a contact for the initiator handle // We can use that! initiatorContact = contact; } if (!targetContact && targetHandleType == HandleTypeContact && targetHandle == handle) { targetContact = contact; if (targetId.isEmpty()) { // For some reason, TargetID was missing from the property map. We can initialize it // here in that case. targetId = targetContact->id(); } } if (currentGroupMembersChangedInfo && currentGroupMembersChangedInfo->actor == contact->handle()[0]) { actorContact = contact; } } if (!groupSelfHandle && groupSelfContact) { groupSelfContact.reset(); selfContactUpdated = true; } pendingGroupMembers.clear(); pendingGroupLocalPendingMembers.clear(); pendingGroupRemotePendingMembers.clear(); // FIXME: This shouldn't be needed. Clearer would be to first scan for the actor being present // in the contacts supplied. foreach (ContactPtr contact, contacts) { uint handle = contact->handle()[0]; if (groupLocalPendingContactsChangeInfo.contains(handle)) { groupLocalPendingContactsChangeInfo[handle] = GroupMemberChangeDetails(actorContact, currentGroupMembersChangedInfo ? currentGroupMembersChangedInfo->details : QVariantMap()); } } Contacts groupContactsRemoved; ContactPtr contactToRemove; foreach (uint handle, groupMembersToRemove) { if (groupContacts.contains(handle)) { contactToRemove = groupContacts[handle]; groupContacts.remove(handle); } else if (groupLocalPendingContacts.contains(handle)) { contactToRemove = groupLocalPendingContacts[handle]; groupLocalPendingContacts.remove(handle); } else if (groupRemotePendingContacts.contains(handle)) { contactToRemove = groupRemotePendingContacts[handle]; groupRemotePendingContacts.remove(handle); } if (groupLocalPendingContactsChangeInfo.contains(handle)) { groupLocalPendingContactsChangeInfo.remove(handle); } if (contactToRemove) { groupContactsRemoved.insert(contactToRemove); } } groupMembersToRemove.clear(); // FIXME: drop the LPToRemove and RPToRemove sets - they're redundant foreach (uint handle, groupLocalPendingMembersToRemove) { groupLocalPendingContacts.remove(handle); } groupLocalPendingMembersToRemove.clear(); foreach (uint handle, groupRemotePendingMembersToRemove) { groupRemotePendingContacts.remove(handle); } groupRemotePendingMembersToRemove.clear(); if (!groupContactsAdded.isEmpty() || !groupLocalPendingContactsAdded.isEmpty() || !groupRemotePendingContactsAdded.isEmpty() || !groupContactsRemoved.isEmpty()) { GroupMemberChangeDetails details( actorContact, currentGroupMembersChangedInfo ? currentGroupMembersChangedInfo->details : QVariantMap()); if (currentGroupMembersChangedInfo && currentGroupMembersChangedInfo->removed.contains(groupSelfHandle)) { // Update groupSelfContactRemoveInfo with the proper actor in case // the actor was not available by the time onMembersChangedDetailed // was called. groupSelfContactRemoveInfo = details; } if (parent->isReady(Channel::FeatureCore)) { // Channel is ready, we can signal membership changes to the outside world without // confusing anyone's fragile logic. emit parent->groupMembersChanged( groupContactsAdded, groupLocalPendingContactsAdded, groupRemotePendingContactsAdded, groupContactsRemoved, details); } } delete currentGroupMembersChangedInfo; currentGroupMembersChangedInfo = 0; if (selfContactUpdated && parent->isReady(Channel::FeatureCore)) { emit parent->groupSelfContactChanged(); } processMembersChanged(); } bool Channel::Private::fakeGroupInterfaceIfNeeded() { if (parent->interfaces().contains(TP_QT_IFACE_CHANNEL_INTERFACE_GROUP)) { return false; } else if (targetHandleType != HandleTypeContact) { return false; } // fake group interface if (connection->selfHandle() && targetHandle) { // Fake groupSelfHandle and initial members, let the MCD handling take care of the rest // TODO connect to Connection::selfHandleChanged groupSelfHandle = connection->selfHandle(); groupInitialMembers = UIntList() << groupSelfHandle << targetHandle; debug().nospace() << "Faking a group on channel with self handle=" << groupSelfHandle << " and other handle=" << targetHandle; nowHaveInitialMembers(); } else { warning() << "Connection::selfHandle is 0 or targetHandle is 0, " "not faking a group on channel"; } return true; } void Channel::Private::setReady() { Q_ASSERT(!parent->isReady(Channel::FeatureCore)); debug() << "Channel fully ready"; debug() << " Channel type" << channelType; debug() << " Target handle" << targetHandle; debug() << " Target handle type" << targetHandleType; if (parent->interfaces().contains(TP_QT_IFACE_CHANNEL_INTERFACE_GROUP)) { debug() << " Group: flags" << groupFlags; if (groupAreHandleOwnersAvailable) { debug() << " Group: Number of handle owner mappings" << groupHandleOwners.size(); } else { debug() << " Group: No handle owners property present"; } debug() << " Group: Number of current members" << groupContacts.size(); debug() << " Group: Number of local pending members" << groupLocalPendingContacts.size(); debug() << " Group: Number of remote pending members" << groupRemotePendingContacts.size(); debug() << " Group: Self handle" << groupSelfHandle << "tracked:" << (groupIsSelfHandleTracked ? "yes" : "no"); } readinessHelper->setIntrospectCompleted(FeatureCore, true); } QString Channel::Private::groupMemberChangeDetailsTelepathyError( const GroupMemberChangeDetails &details) { QString error; uint reason = details.reason(); switch (reason) { case ChannelGroupChangeReasonOffline: error = TP_QT_ERROR_OFFLINE; break; case ChannelGroupChangeReasonKicked: error = TP_QT_ERROR_CHANNEL_KICKED; break; case ChannelGroupChangeReasonBanned: error = TP_QT_ERROR_CHANNEL_BANNED; break; case ChannelGroupChangeReasonBusy: error = TP_QT_ERROR_BUSY; break; case ChannelGroupChangeReasonNoAnswer: error = TP_QT_ERROR_NO_ANSWER; break; case ChannelGroupChangeReasonPermissionDenied: error = TP_QT_ERROR_PERMISSION_DENIED; break; case ChannelGroupChangeReasonInvalidContact: error = TP_QT_ERROR_DOES_NOT_EXIST; break; // The following change reason are being mapped to default // case ChannelGroupChangeReasonNone: // case ChannelGroupChangeReasonInvited: // shouldn't happen // case ChannelGroupChangeReasonError: // case ChannelGroupChangeReasonRenamed: // case ChannelGroupChangeReasonSeparated: // shouldn't happen default: // let's use the actor handle and selfHandle here instead of the // contacts, as the contacts may not be ready. error = ((qdbus_cast(details.allDetails().value(QLatin1String("actor"))) == groupSelfHandle) ? TP_QT_ERROR_CANCELLED : TP_QT_ERROR_TERMINATED); break; } return error; } void Channel::Private::processConferenceChannelRemoved() { if (buildingConferenceChannelRemovedActorContact || conferenceChannelRemovedQueue.isEmpty()) { return; } ConferenceChannelRemovedInfo *info = conferenceChannelRemovedQueue.first(); if (!conferenceChannels.contains(info->channelPath.path())) { info = conferenceChannelRemovedQueue.dequeue(); delete info; processConferenceChannelRemoved(); return; } buildingConferenceChannelRemovedActorContact = true; if (info->details.contains(keyActor)) { ContactManagerPtr manager = connection->contactManager(); PendingContacts *pendingContacts = manager->contactsForHandles( UIntList() << qdbus_cast(info->details.value(keyActor))); parent->connect(pendingContacts, SIGNAL(finished(Tp::PendingOperation*)), SLOT(gotConferenceChannelRemovedActorContact(Tp::PendingOperation*))); } else { parent->gotConferenceChannelRemovedActorContact(0); } } struct TP_QT_NO_EXPORT Channel::GroupMemberChangeDetails::Private : public QSharedData { Private(const ContactPtr &actor, const QVariantMap &details) : actor(actor), details(details) {} ContactPtr actor; QVariantMap details; }; /** * \class Channel::GroupMemberChangeDetails * \ingroup clientchannel * \headerfile TelepathyQt/channel.h * * \brief The Channel::GroupMemberChangeDetails class represents the details of a group membership * change. * * Extended information is not always available; this will be reflected by * the return value of isValid(). */ /** * Constructs a new invalid GroupMemberChangeDetails instance. */ Channel::GroupMemberChangeDetails::GroupMemberChangeDetails() { } /** * Copy constructor. */ Channel::GroupMemberChangeDetails::GroupMemberChangeDetails(const GroupMemberChangeDetails &other) : mPriv(other.mPriv) { } /** * Class destructor. */ Channel::GroupMemberChangeDetails::~GroupMemberChangeDetails() { } /** * Assigns all information (validity, details) from other to this. */ Channel::GroupMemberChangeDetails &Channel::GroupMemberChangeDetails::operator=( const GroupMemberChangeDetails &other) { this->mPriv = other.mPriv; return *this; } /** * \fn bool Channel::GroupMemberChangeDetails::isValid() const * * Return whether the details are valid (have actually been received from the service). * * \return \c true if valid, \c false otherwise. */ /** * Return whether the details specify an actor. * * If present, actor() will return the contact object representing the person who made the change. * * \return \c true if the actor is known, \c false otherwise. * \sa actor() */ bool Channel::GroupMemberChangeDetails::hasActor() const { return isValid() && !mPriv->actor.isNull(); } /** * Return the contact object representing the person who made the change (actor), if known. * * \return A pointer to the Contact object, or a null ContactPtr if the actor is unknown. * \sa hasActor() */ ContactPtr Channel::GroupMemberChangeDetails::actor() const { return isValid() ? mPriv->actor : ContactPtr(); } /** * \fn bool Channel::GroupMemberChangeDetails::hasReason() const * * Return whether the details specify the reason for the change. * * \return \c true if the reason is known, \c false otherwise. * \sa reason() */ /** * \fn ChannelGroupChangeReason Channel::GroupMemberChangeDetails::reason() const * * Return the reason for the change, if known. * * \return The change reason as #ChannelGroupChangeReason, or #ChannelGroupChangeReasonNone * if the reason is unknown. * \sa hasReason() */ /** * \fn bool Channel::GroupMemberChangeDetails::hasMessage() const * * Return whether the details specify a human-readable message from the contact represented by * actor() pertaining to the change. * * \return \c true if the message is known, \c false otherwise. * \sa message() */ /** * \fn QString Channel::GroupMemberChangeDetails::message() const * * Return a human-readable message from the contact represented by actor() pertaining to the change, * if known. * * \return The message, or an empty string if the message is unknown. * \sa hasMessage() */ /** * \fn bool Channel::GroupMemberChangeDetails::hasError() const * * Return whether the details specify a D-Bus error describing the change. * * \return \c true if the error is known, \c false otherwise. * \sa error() */ /** * \fn QString Channel::GroupMemberChangeDetails::error() const * * Return the D-Bus error describing the change, if known. * * The D-Bus error provides more specific information than the reason() and should be used if * applicable. * * \return A D-Bus error describing the change, or an empty string if the error is unknown. * \sa hasError() */ /** * \fn bool Channel::GroupMemberChangeDetails::hasDebugMessage() const * * Return whether the details specify a debug message. * * \return \c true if debug message is present, \c false otherwise. * \sa debugMessage() */ /** * \fn QString Channel::GroupMemberChangeDetails::debugMessage() const * * Return the debug message specified by the details, if any. * * The debug message is purely informational, offered for display for bug reporting purposes, and * should not be attempted to be parsed. * * \return The debug message, or an empty string if there is none. * \sa hasDebugMessage() */ /** * Return a map containing all details of the group members change. * * This is useful for accessing domain-specific additional details. * * \return The details of the group members change as QVariantMap. */ QVariantMap Channel::GroupMemberChangeDetails::allDetails() const { return isValid() ? mPriv->details : QVariantMap(); } Channel::GroupMemberChangeDetails::GroupMemberChangeDetails(const ContactPtr &actor, const QVariantMap &details) : mPriv(new Private(actor, details)) { } /** * \class Channel * \ingroup clientchannel * \headerfile TelepathyQt/channel.h * * \brief The Channel class represents a Telepathy channel. * * All communication in the Telepathy framework is carried out via channel * objects. Specialized classes for some specific channel types such as * StreamedMediaChannel, TextChannel, FileTransferChannel are provided. * * The remote object accessor functions on this object (channelType(), targetHandleType(), * and so on) don't make any D-Bus calls; instead, they return/use * values cached from a previous introspection run. The introspection process * populates their values in the most efficient way possible based on what the * service implements. * * To avoid unnecessary D-Bus traffic, some accessors only return valid * information after specific features have been enabled. * For instance, to retrieve the initial invitee contacts in a conference channel, * it is necessary to enable the feature Channel::FeatureConferenceInitialInviteeContacts. * See the individual methods descriptions for more details. * * Channel features can be enabled by constructing a ChannelFactory and enabling * the desired features, and passing it to AccountManager, Account or ClientRegistrar * when creating them as appropriate. However, if a particular * feature is only ever used in a specific circumstance, such as an user opening * some settings dialog separate from the general view of the application, * features can be later enabled as needed by calling becomeReady() with the additional * features, and waiting for the resulting PendingOperation to finish. * * Each channel is owned by a connection. If the Connection object becomes invalidated * the Channel object will also get invalidated. * * \section chan_usage_sec Usage * * \subsection chan_create_sec Creating a channel object * * Channel objects can be created in various ways, but the preferred way is * trough Account channel creation methods such as Account::ensureTextChat(), * Account::createFileTransfer(), which uses the channel dispatcher. * * If you already know the object path, you can just call create(). * For example: * * \code * * ChannelPtr chan = Channel::create(connection, objectPath, * immutableProperties); * * \endcode * * \subsection chan_ready_sec Making channel ready to use * * A Channel object needs to become ready before usage, meaning that the * introspection process finished and the object accessors can be used. * * To make the object ready, use becomeReady() and wait for the * PendingOperation::finished() signal to be emitted. * * \code * * class MyClass : public QObject * { * QOBJECT * * public: * MyClass(QObject *parent = 0); * ~MyClass() { } * * private Q_SLOTS: * void onChannelReady(Tp::PendingOperation*); * * private: * ChannelPtr chan; * }; * * MyClass::MyClass(const ConnectionPtr &connection, * const QString &objectPath, const QVariantMap &immutableProperties) * : QObject(parent) * chan(Channel::create(connection, objectPath, immutableProperties)) * { * connect(chan->becomeReady(), * SIGNAL(finished(Tp::PendingOperation*)), * SLOT(onChannelReady(Tp::PendingOperation*))); * } * * void MyClass::onChannelReady(Tp::PendingOperation *op) * { * if (op->isError()) { * qWarning() << "Channel cannot become ready:" << * op->errorName() << "-" << op->errorMessage(); * return; * } * * // Channel is now ready * } * * \endcode * * See \ref async_model, \ref shared_ptr */ /** * Feature representing the core that needs to become ready to make the Channel * object usable. * * Note that this feature must be enabled in order to use most Channel methods. * See specific methods documentation for more details. * * When calling isReady(), becomeReady(), this feature is implicitly added * to the requested features. */ const Feature Channel::FeatureCore = Feature(QLatin1String(Channel::staticMetaObject.className()), 0, true); /** * Feature used in order to access the conference initial invitee contacts info. * * \sa conferenceInitialInviteeContacts() */ const Feature Channel::FeatureConferenceInitialInviteeContacts = Feature(QLatin1String(Channel::staticMetaObject.className()), 1, true); /** * Create a new Channel object. * * \param connection Connection owning this channel, and specifying the * service. * \param objectPath The channel object path. * \param immutableProperties The channel immutable properties. * \return A ChannelPtr object pointing to the newly created Channel object. * * \todo \a immutableProperties should be used to populate the corresponding accessors (such as * channelType()) already on construction, not only when making FeatureCore ready (fd.o #41654) */ ChannelPtr Channel::create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) { return ChannelPtr(new Channel(connection, objectPath, immutableProperties, Channel::FeatureCore)); } /** * Construct a new Channel object. * * \param connection Connection owning this channel, and specifying the * service. * \param objectPath The channel object path. * \param immutableProperties The channel immutable properties. * \param coreFeature The core feature of the channel type. The corresponding introspectable should * depend on Channel::FeatureCore. */ Channel::Channel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature) : StatefulDBusProxy(connection->dbusConnection(), connection->busName(), objectPath, coreFeature), OptionalInterfaceFactory(this), mPriv(new Private(this, connection, immutableProperties)) { } /** * Class destructor. */ Channel::~Channel() { delete mPriv; } /** * Return the connection owning this channel. * * \return A pointer to the Connection object. */ ConnectionPtr Channel::connection() const { return mPriv->connection; } /** * Return the immutable properties of the channel. * * If the channel is ready (isReady(Channel::FeatureCore) returns true), the following keys are * guaranteed to be present: * org.freedesktop.Telepathy.Channel.ChannelType, * org.freedesktop.Telepathy.Channel.TargetHandleType, * org.freedesktop.Telepathy.Channel.TargetHandle and * org.freedesktop.Telepathy.Channel.Requested. * * The keys and values in this map are defined by the \telepathy_spec, * or by third-party extensions to that specification. * These are the properties that cannot change over the lifetime of the * channel; they're announced in the result of the request, for efficiency. * * \return The immutable properties as QVariantMap. */ QVariantMap Channel::immutableProperties() const { if (isReady(Channel::FeatureCore)) { QString key; key = TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"); if (!mPriv->immutableProperties.contains(key)) { mPriv->immutableProperties.insert(key, mPriv->channelType); } key = TP_QT_IFACE_CHANNEL + QLatin1String(".Interfaces"); if (!mPriv->immutableProperties.contains(key)) { mPriv->immutableProperties.insert(key, interfaces()); } key = TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"); if (!mPriv->immutableProperties.contains(key)) { mPriv->immutableProperties.insert(key, mPriv->targetHandleType); } key = TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandle"); if (!mPriv->immutableProperties.contains(key)) { mPriv->immutableProperties.insert(key, mPriv->targetHandle); } key = TP_QT_IFACE_CHANNEL + QLatin1String(".TargetID"); if (!mPriv->immutableProperties.contains(key)) { mPriv->immutableProperties.insert(key, mPriv->targetId); } key = TP_QT_IFACE_CHANNEL + QLatin1String(".Requested"); if (!mPriv->immutableProperties.contains(key)) { mPriv->immutableProperties.insert(key, mPriv->requested); } key = TP_QT_IFACE_CHANNEL + QLatin1String(".InitiatorHandle"); if (!mPriv->immutableProperties.contains(key)) { mPriv->immutableProperties.insert(key, mPriv->initiatorHandle); } key = TP_QT_IFACE_CHANNEL + QLatin1String(".InitiatorID"); if (!mPriv->immutableProperties.contains(key) && !mPriv->initiatorContact.isNull()) { mPriv->immutableProperties.insert(key, mPriv->initiatorContact->id()); } } return mPriv->immutableProperties; } /** * Return the D-Bus interface name for the type of this channel. * * This method requires Channel::FeatureCore to be ready. * * \return The D-Bus interface name for the type of the channel. */ QString Channel::channelType() const { // Similarly, we don't want warnings triggered when using the type interface // proxies internally. if (!isReady(Channel::FeatureCore) && mPriv->channelType.isEmpty()) { warning() << "Channel::channelType() before the channel type has " "been received"; } else if (!isValid()) { warning() << "Channel::channelType() used with channel closed"; } return mPriv->channelType; } /** * Return the type of the handle returned by targetHandle() as specified in * #HandleType. * * This method requires Channel::FeatureCore to be ready. * * \return The target handle type as #HandleType. * \sa targetHandle(), targetId() */ HandleType Channel::targetHandleType() const { if (!isReady(Channel::FeatureCore)) { warning() << "Channel::targetHandleType() used channel not ready"; } return (HandleType) mPriv->targetHandleType; } /** * Return the handle of the remote party with which this channel * communicates. * * This method requires Channel::FeatureCore to be ready. * * \return An integer representing the target handle, which is of the type * targetHandleType() indicates. * \sa targetHandleType(), targetId() */ uint Channel::targetHandle() const { if (!isReady(Channel::FeatureCore)) { warning() << "Channel::targetHandle() used channel not ready"; } return mPriv->targetHandle; } /** * Return the persistent unique ID of the remote party with which this channel communicates. * * If targetHandleType() is #HandleTypeContact, this will be the ID of the remote contact, and * similarly the unique ID of the room when targetHandleType() is #HandleTypeRoom. * * This is not necessarily the best identifier to display to the user, though. In particular, for * contacts, their alias should be displayed instead. It can be used for matching channels and UI * elements for them across reconnects, though, at which point the old channels and contacts are * invalidated. * * This method requires Channel::FeatureCore to be ready. * * \return The target identifier. * \sa targetHandle(), targetContact() */ QString Channel::targetId() const { if (!isReady(Channel::FeatureCore)) { warning() << "Channel::targetId() used, but the channel is not ready"; } return mPriv->targetId; } /** * Return the contact with which this channel communicates for its lifetime, if applicable. * * This method requires Channel::FeatureCore to be ready. * * \return A pointer to the Contact object, or a null ContactPtr if targetHandleType() is not * #HandleTypeContact. * \sa targetHandle(), targetId() */ ContactPtr Channel::targetContact() const { if (!isReady(Channel::FeatureCore)) { warning() << "Channel::targetContact() used, but the channel is not ready"; } else if (targetHandleType() != HandleTypeContact) { warning() << "Channel::targetContact() used with targetHandleType() != Contact"; } return mPriv->targetContact; } /** * Return whether this channel was created in response to a * local request. * * This method requires Channel::FeatureCore to be ready. * * \return \c true if the channel was created in response to a local request, * \c false otherwise. */ bool Channel::isRequested() const { if (!isReady(Channel::FeatureCore)) { warning() << "Channel::isRequested() used channel not ready"; } return mPriv->requested; } /** * Return the contact who initiated this channel. * * This method requires Channel::FeatureCore to be ready. * * \return A pointer to the Contact object representing the contact who initiated the channel, * or a null ContactPtr if it can't be retrieved. */ ContactPtr Channel::initiatorContact() const { if (!isReady(Channel::FeatureCore)) { warning() << "Channel::initiatorContact() used channel not ready"; } return mPriv->initiatorContact; } /** * Start an asynchronous request that this channel be closed. * * The returned PendingOperation object will signal the success or failure * of this request; under normal circumstances, it can be expected to * succeed. * * \return A PendingOperation which will emit PendingOperation::finished * when the call has finished. * \sa requestLeave() */ PendingOperation *Channel::requestClose() { // Closing a channel does not make sense if it is already closed, // just silently Return. if (!isValid()) { return new PendingSuccess(ChannelPtr(this)); } return new PendingVoid(mPriv->baseInterface->Close(), ChannelPtr(this)); } Channel::PendingLeave::PendingLeave(const ChannelPtr &chan, const QString &message, ChannelGroupChangeReason reason) : PendingOperation(chan) { Q_ASSERT(chan->mPriv->group != NULL); QDBusPendingCall call = chan->mPriv->group->RemoveMembersWithReason( UIntList() << chan->mPriv->groupSelfHandle, message, reason); connect(chan.data(), SIGNAL(invalidated(Tp::DBusProxy*,QString,QString)), this, SLOT(onChanInvalidated(Tp::DBusProxy*))); connect(new PendingVoid(call, chan), SIGNAL(finished(Tp::PendingOperation*)), this, SLOT(onRemoveFinished(Tp::PendingOperation*))); } void Channel::PendingLeave::onChanInvalidated(Tp::DBusProxy *proxy) { if (isFinished()) { return; } debug() << "Finishing PendingLeave successfully as the channel was invalidated"; setFinished(); } void Channel::PendingLeave::onRemoveFinished(Tp::PendingOperation *op) { if (isFinished()) { return; } ChannelPtr chan = ChannelPtr::staticCast(object()); if (op->isValid()) { debug() << "We left the channel" << chan->objectPath(); ContactPtr c = chan->groupSelfContact(); if (chan->groupContacts().contains(c) || chan->groupLocalPendingContacts().contains(c) || chan->groupRemotePendingContacts().contains(c)) { debug() << "Waiting for self remove to be picked up"; connect(chan.data(), SIGNAL(groupMembersChanged(Tp::Contacts,Tp::Contacts,Tp::Contacts,Tp::Contacts, Tp::Channel::GroupMemberChangeDetails)), this, SLOT(onMembersChanged(Tp::Contacts,Tp::Contacts,Tp::Contacts,Tp::Contacts))); } else { setFinished(); } return; } debug() << "Leave RemoveMembersWithReason failed with " << op->errorName() << op->errorMessage() << "- falling back to Close"; // If the channel has been closed or otherwise invalidated already in this mainloop iteration, // the requestClose() operation will early-succeed connect(chan->requestClose(), SIGNAL(finished(Tp::PendingOperation*)), this, SLOT(onCloseFinished(Tp::PendingOperation*))); } void Channel::PendingLeave::onMembersChanged(const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &removed) { if (isFinished()) { return; } ChannelPtr chan = ChannelPtr::staticCast(object()); ContactPtr c = chan->groupSelfContact(); if (removed.contains(c)) { debug() << "Leave event picked up for" << chan->objectPath(); setFinished(); } } void Channel::PendingLeave::onCloseFinished(Tp::PendingOperation *op) { if (isFinished()) { return; } ChannelPtr chan = ChannelPtr::staticCast(object()); if (op->isError()) { warning() << "Closing the channel" << chan->objectPath() << "as a fallback for leaving it failed with" << op->errorName() << op->errorMessage() << "- so didn't leave"; setFinishedWithError(op->errorName(), op->errorMessage()); } else { debug() << "We left (by closing) the channel" << chan->objectPath(); setFinished(); } } /** * Start an asynchronous request to leave this channel as gracefully as possible. * * If leaving any more gracefully is not possible, this will revert to the same as requestClose(). * In particular, this will be the case for channels with no group interface * (#TP_QT_IFACE_CHANNEL_INTERFACE_GROUP not in the list returned by interfaces()). * * The returned PendingOperation object will signal the success or failure * of this request; under normal circumstances, it can be expected to * succeed. * * A message and a reason may be provided along with the request, which will be sent to the server * if supported, which is indicated by #ChannelGroupFlagMessageDepart and/or * #ChannelGroupFlagMessageReject. * * Attempting to leave again when we have already left, either by our request or forcibly, will be a * no-op, with the returned PendingOperation immediately finishing successfully. * * \param message The message, which can be blank if desired. * \param reason A reason for leaving. * \return A PendingOperation which will emit PendingOperation::finished * when the call has finished. */ PendingOperation *Channel::requestLeave(const QString &message, ChannelGroupChangeReason reason) { // Leaving a channel does not make sense if it is already closed, // just silently Return. if (!isValid()) { return new PendingSuccess(ChannelPtr(this)); } if (!isReady(Channel::FeatureCore)) { return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Channel::FeatureCore must be ready to leave a channel"), ChannelPtr(this)); } if (!interfaces().contains(TP_QT_IFACE_CHANNEL_INTERFACE_GROUP)) { return requestClose(); } ContactPtr self = groupSelfContact(); if (!groupContacts().contains(self) && !groupLocalPendingContacts().contains(self) && !groupRemotePendingContacts().contains(self)) { debug() << "Channel::requestLeave() called for " << objectPath() << "which we aren't a member of"; return new PendingSuccess(ChannelPtr(this)); } return new PendingLeave(ChannelPtr(this), message, reason); } /** * \name Group interface * * Cached access to state of the group interface on the associated remote * object, if the interface is present. * * Some methods can be used when targetHandleType() == #HandleTypeContact, such * as groupFlags(), groupCanAddContacts(), groupCanRemoveContacts(), * groupSelfContact() and groupContacts(). * * As the group interface state can change freely during the lifetime of the * channel due to events like new contacts joining the group, the cached state * is automatically kept in sync with the remote object's state by hooking * to the change notification signals present in the D-Bus interface. * * As the cached value changes, change notification signals are emitted. * * Signals such as groupMembersChanged(), groupSelfContactChanged(), etc., are emitted to * indicate that properties have changed. * * Check the individual signals' descriptions for details. */ //@{ /** * Return a set of flags indicating the capabilities and behaviour of the * group on this channel. * * Change notification is via the groupFlagsChanged() signal. * * This method requires Channel::FeatureCore to be ready. * * \return The bitfield combination of flags as #ChannelGroupFlags. * \sa groupFlagsChanged() */ ChannelGroupFlags Channel::groupFlags() const { if (!isReady(Channel::FeatureCore)) { warning() << "Channel::groupFlags() used channel not ready"; } return (ChannelGroupFlags) mPriv->groupFlags; } /** * Return whether contacts can be added or invited to this channel. * * Change notification is via the groupCanAddContactsChanged() signal. * * This method requires Channel::FeatureCore to be ready. * * \return \c true if contacts can be added or invited to the channel, * \c false otherwise. * \sa groupFlags(), groupAddContacts() */ bool Channel::groupCanAddContacts() const { if (!isReady(Channel::FeatureCore)) { warning() << "Channel::groupCanAddContacts() used channel not ready"; } return mPriv->groupFlags & ChannelGroupFlagCanAdd; } /** * Return whether a message is expected when adding/inviting contacts, who * are not already members, to this channel. * * This method requires Channel::FeatureCore to be ready. * * \return \c true if a message is expected, \c false otherwise. * \sa groupFlags(), groupAddContacts() */ bool Channel::groupCanAddContactsWithMessage() const { if (!isReady(Channel::FeatureCore)) { warning() << "Channel::groupCanAddContactsWithMessage() used when channel not ready"; } return mPriv->groupFlags & ChannelGroupFlagMessageAdd; } /** * Return whether a message is expected when accepting contacts' requests to * join this channel. * * This method requires Channel::FeatureCore to be ready. * * \return \c true if a message is expected, \c false otherwise. * \sa groupFlags(), groupAddContacts() */ bool Channel::groupCanAcceptContactsWithMessage() const { if (!isReady(Channel::FeatureCore)) { warning() << "Channel::groupCanAcceptContactsWithMessage() used when channel not ready"; } return mPriv->groupFlags & ChannelGroupFlagMessageAccept; } /** * Add contacts to this channel. * * Contacts on the local pending list (those waiting for permission to join * the channel) can always be added. If groupCanAcceptContactsWithMessage() * returns \c true, an optional message is expected when doing this; if not, * the message parameter is likely to be ignored (so the user should not be * asked for a message, and the message parameter should be left empty). * * Other contacts can only be added if groupCanAddContacts() returns \c true. * If groupCanAddContactsWithMessage() returns \c true, an optional message is * expected when doing this, and if not, the message parameter is likely to be * ignored. * * This method requires Channel::FeatureCore to be ready. * * \param contacts Contacts to be added. * \param message A string message, which can be blank if desired. * \return A PendingOperation which will emit PendingOperation::finished * when the call has finished. * \sa groupCanAddContacts(), groupCanAddContactsWithMessage(), groupCanAcceptContactsWithMessage() */ PendingOperation *Channel::groupAddContacts(const QList &contacts, const QString &message) { if (!isReady(Channel::FeatureCore)) { warning() << "Channel::groupAddContacts() used channel not ready"; return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Channel not ready"), ChannelPtr(this)); } else if (contacts.isEmpty()) { warning() << "Channel::groupAddContacts() used with empty contacts param"; return new PendingFailure(TP_QT_ERROR_INVALID_ARGUMENT, QLatin1String("contacts cannot be an empty list"), ChannelPtr(this)); } foreach (const ContactPtr &contact, contacts) { if (!contact) { warning() << "Channel::groupAddContacts() used but contacts param contains " "invalid contact"; return new PendingFailure(TP_QT_ERROR_INVALID_ARGUMENT, QLatin1String("Unable to add invalid contacts"), ChannelPtr(this)); } } if (!interfaces().contains(TP_QT_IFACE_CHANNEL_INTERFACE_GROUP)) { warning() << "Channel::groupAddContacts() used with no group interface"; return new PendingFailure(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Channel does not support group interface"), ChannelPtr(this)); } UIntList handles; foreach (const ContactPtr &contact, contacts) { handles << contact->handle()[0]; } return new PendingVoid(mPriv->group->AddMembers(handles, message), ChannelPtr(this)); } /** * Return whether contacts in groupRemotePendingContacts() can be removed from * this channel (i.e. whether an invitation can be rescinded). * * Change notification is via the groupCanRescindContactsChanged() signal. * * This method requires Channel::FeatureCore to be ready. * * \return \c true if contacts can be removed, \c false otherwise. * \sa groupFlags(), groupRemoveContacts() */ bool Channel::groupCanRescindContacts() const { if (!isReady(Channel::FeatureCore)) { warning() << "Channel::groupCanRescindContacts() used channel not ready"; } return mPriv->groupFlags & ChannelGroupFlagCanRescind; } /** * Return whether a message is expected when removing contacts who are in * groupRemotePendingContacts() from this channel (i.e. rescinding an * invitation). * * This method requires Channel::FeatureCore to be ready. * * \return \c true if a message is expected, \c false otherwise. * \sa groupFlags(), groupRemoveContacts() */ bool Channel::groupCanRescindContactsWithMessage() const { if (!isReady(Channel::FeatureCore)) { warning() << "Channel::groupCanRescindContactsWithMessage() used when channel not ready"; } return mPriv->groupFlags & ChannelGroupFlagMessageRescind; } /** * Return if contacts in groupContacts() can be removed from this channel. * * Note that contacts in local pending lists, and the groupSelfContact(), can * always be removed from the channel. * * Change notification is via the groupCanRemoveContactsChanged() signal. * * This method requires Channel::FeatureCore to be ready. * * \return \c true if contacts can be removed, \c false otherwise. * \sa groupFlags(), groupRemoveContacts() */ bool Channel::groupCanRemoveContacts() const { if (!isReady(Channel::FeatureCore)) { warning() << "Channel::groupCanRemoveContacts() used channel not ready"; } return mPriv->groupFlags & ChannelGroupFlagCanRemove; } /** * Return whether a message is expected when removing contacts who are in * groupContacts() from this channel. * * This method requires Channel::FeatureCore to be ready. * * \return \c true if a message is expected, \c false otherwise. * \sa groupFlags(), groupRemoveContacts() */ bool Channel::groupCanRemoveContactsWithMessage() const { if (!isReady(Channel::FeatureCore)) { warning() << "Channel::groupCanRemoveContactsWithMessage() used when channel not ready"; } return mPriv->groupFlags & ChannelGroupFlagMessageRemove; } /** * Return whether a message is expected when removing contacts who are in * groupLocalPendingContacts() from this channel (i.e. rejecting a request to * join). * * This method requires Channel::FeatureCore to be ready. * * \return \c true if a message is expected, \c false otherwise. * \sa groupFlags(), groupRemoveContacts() */ bool Channel::groupCanRejectContactsWithMessage() const { if (!isReady(Channel::FeatureCore)) { warning() << "Channel::groupCanRejectContactsWithMessage() used when channel not ready"; } return mPriv->groupFlags & ChannelGroupFlagMessageReject; } /** * Return whether a message is expected when removing the groupSelfContact() * from this channel (i.e. departing from the channel). * * \return \c true if a message is expected, \c false otherwise. * \sa groupFlags(), groupRemoveContacts() */ bool Channel::groupCanDepartWithMessage() const { if (!isReady(Channel::FeatureCore)) { warning() << "Channel::groupCanDepartWithMessage() used when channel not ready"; } return mPriv->groupFlags & ChannelGroupFlagMessageDepart; } /** * Remove contacts from this channel. * * Contacts on the local pending list (those waiting for permission to join * the channel) can always be removed. If groupCanRejectContactsWithMessage() * returns \c true, an optional message is expected when doing this; if not, * the message parameter is likely to be ignored (so the user should not be * asked for a message, and the message parameter should be left empty). * * The groupSelfContact() can also always be removed, as a way to leave the * group with an optional departure message and/or departure reason indication. * If groupCanDepartWithMessage() returns \c true, an optional message is * expected when doing this, and if not, the message parameter is likely to * be ignored. * * Contacts in the group can only be removed (e.g. kicked) if * groupCanRemoveContacts() returns \c true. If * groupCanRemoveContactsWithMessage() returns \c true, an optional message is * expected when doing this, and if not, the message parameter is likely to be * ignored. * * Contacts in the remote pending list (those who have been invited to the * channel) can only be removed (have their invitations rescinded) if * groupCanRescindContacts() returns \c true. If * groupCanRescindContactsWithMessage() returns \c true, an optional message is * expected when doing this, and if not, the message parameter is likely to be * ignored. * * This method requires Channel::FeatureCore to be ready. * * \param contacts Contacts to be removed. * \param message A string message, which can be blank if desired. * \param reason Reason of the change, as specified in * #ChannelGroupChangeReason * \return A PendingOperation which will emit PendingOperation::finished * when the call has finished. * \sa groupCanRemoveContacts(), groupCanRemoveContactsWithMessage(), * groupCanRejectContactsWithMessage(), groupCanRescindContacts(), * groupCanRescindContacts(), groupCanRescindContactsWithMessage(), * groupCanDepartWithMessage() */ PendingOperation *Channel::groupRemoveContacts(const QList &contacts, const QString &message, ChannelGroupChangeReason reason) { if (!isReady(Channel::FeatureCore)) { warning() << "Channel::groupRemoveContacts() used channel not ready"; return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Channel not ready"), ChannelPtr(this)); } if (contacts.isEmpty()) { warning() << "Channel::groupRemoveContacts() used with empty contacts param"; return new PendingFailure(TP_QT_ERROR_INVALID_ARGUMENT, QLatin1String("contacts param cannot be an empty list"), ChannelPtr(this)); } foreach (const ContactPtr &contact, contacts) { if (!contact) { warning() << "Channel::groupRemoveContacts() used but contacts param contains " "invalid contact:"; return new PendingFailure(TP_QT_ERROR_INVALID_ARGUMENT, QLatin1String("Unable to remove invalid contacts"), ChannelPtr(this)); } } if (!interfaces().contains(TP_QT_IFACE_CHANNEL_INTERFACE_GROUP)) { warning() << "Channel::groupRemoveContacts() used with no group interface"; return new PendingFailure(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Channel does not support group interface"), ChannelPtr(this)); } UIntList handles; foreach (const ContactPtr &contact, contacts) { handles << contact->handle()[0]; } return new PendingVoid( mPriv->group->RemoveMembersWithReason(handles, message, reason), ChannelPtr(this)); } /** * Return the current contacts of the group. * * It is possible to omit the contact representing the local user, even if * the contact is in the set, by passing \c false as the parameter \a * includeSelfContact. * * Change notification is via the groupMembersChanged() signal. * * This method requires Channel::FeatureCore to be ready. * * \param includeSelfContact Whether to include the self contact in the returned set. * \return A set of pointers to the Contact objects. * \sa groupLocalPendingContacts(), groupRemotePendingContacts() */ Contacts Channel::groupContacts(bool includeSelfContact) const { if (!isReady(Channel::FeatureCore)) { warning() << "Channel::groupMembers() used channel not ready"; } Contacts ret = mPriv->groupContacts.values().toSet(); if (!includeSelfContact) { ret.remove(groupSelfContact()); } return ret; } /** * Return the contacts currently waiting for local approval to join the * group. * * It is possible to omit the contact representing the local user, even if * the contact is in the set, by passing \c false as the parameter \a * includeSelfContact. * * Change notification is via the groupMembersChanged() signal. * * This method requires Channel::FeatureCore to be ready. * * \param includeSelfContact Whether to include the self contact in the returned set. * \return A set of pointers to the Contact objects. * \sa groupContacts(), groupRemotePendingContacts() */ Contacts Channel::groupLocalPendingContacts(bool includeSelfContact) const { if (!isReady(Channel::FeatureCore)) { warning() << "Channel::groupLocalPendingContacts() used channel not ready"; } else if (!interfaces().contains(TP_QT_IFACE_CHANNEL_INTERFACE_GROUP)) { warning() << "Channel::groupLocalPendingContacts() used with no group interface"; } Contacts ret = mPriv->groupLocalPendingContacts.values().toSet(); if (!includeSelfContact) { ret.remove(groupSelfContact()); } return ret; } /** * Return the contacts currently waiting for remote approval to join the * group. * * It is possible to omit the contact representing the local user, even if * the contact is in the set, by passing \c false as the parameter \a * includeSelfContact. * * Change notification is via the groupMembersChanged() signal. * * This method requires Channel::FeatureCore to be ready. * * \param includeSelfContact Whether to include the self contact in the returned set. * \return A set of pointers to the Contact objects. * \sa groupContacts(), groupLocalPendingContacts() */ Contacts Channel::groupRemotePendingContacts(bool includeSelfContact) const { if (!isReady(Channel::FeatureCore)) { warning() << "Channel::groupRemotePendingContacts() used channel not ready"; } else if (!interfaces().contains(TP_QT_IFACE_CHANNEL_INTERFACE_GROUP)) { warning() << "Channel::groupRemotePendingContacts() used with no " "group interface"; } Contacts ret = mPriv->groupRemotePendingContacts.values().toSet(); if (!includeSelfContact) { ret.remove(groupSelfContact()); } return ret; } /** * Return information of a local pending contact change. If * no information is available, an object for which * GroupMemberChangeDetails::isValid() returns false is returned. * * This method requires Channel::FeatureCore to be ready. * * \param contact A Contact object that is on the local pending contacts list. * \return The change info as a GroupMemberChangeDetails object. */ Channel::GroupMemberChangeDetails Channel::groupLocalPendingContactChangeInfo( const ContactPtr &contact) const { if (!isReady(Channel::FeatureCore)) { warning() << "Channel::groupLocalPendingContactChangeInfo() used channel not ready"; } else if (!interfaces().contains(TP_QT_IFACE_CHANNEL_INTERFACE_GROUP)) { warning() << "Channel::groupLocalPendingContactChangeInfo() used with no group interface"; } else if (!contact) { warning() << "Channel::groupLocalPendingContactChangeInfo() used with null contact param"; return GroupMemberChangeDetails(); } uint handle = contact->handle()[0]; return mPriv->groupLocalPendingContactsChangeInfo.value(handle); } /** * Return information on the removal of the local user from the group. If * the user hasn't been removed from the group, an object for which * GroupMemberChangeDetails::isValid() returns false is returned. * * This method should be called only after you've left the channel. * This is useful for getting the remove information after missing the * corresponding groupMembersChanged() signal, as the local user being * removed usually causes the channel to be closed. * * The returned information is not guaranteed to be correct if * groupIsSelfHandleTracked() returns false and a self handle change has * occurred on the remote object. * * This method requires Channel::FeatureCore to be ready. * * \return The remove info as a GroupMemberChangeDetails object. */ Channel::GroupMemberChangeDetails Channel::groupSelfContactRemoveInfo() const { // Oftentimes, the channel will be closed as a result from being left - so checking a channel's // self remove info when it has been closed and hence invalidated is valid if (isValid() && !isReady(Channel::FeatureCore)) { warning() << "Channel::groupSelfContactRemoveInfo() used before Channel::FeatureCore is ready"; } else if (!interfaces().contains(TP_QT_IFACE_CHANNEL_INTERFACE_GROUP)) { warning() << "Channel::groupSelfContactRemoveInfo() used with " "no group interface"; } return mPriv->groupSelfContactRemoveInfo; } /** * Return whether globally valid handles can be looked up using the * channel-specific handle on this channel using this object. * * Handle owner lookup is only available if: *
    *
  • The object is ready *
  • The list returned by interfaces() contains #TP_QT_IFACE_CHANNEL_INTERFACE_GROUP
  • *
  • The set of flags returned by groupFlags() contains * #GroupFlagProperties and #GroupFlagChannelSpecificHandles
  • *
* * If this function returns \c false, the return value of * groupHandleOwners() is undefined and groupHandleOwnersChanged() will * never be emitted. * * The value returned by this function will stay fixed for the entire time * the object is ready, so no change notification is provided. * * This method requires Channel::FeatureCore to be ready. * * \return \c true if handle owner lookup functionality is available, \c false otherwise. */ bool Channel::groupAreHandleOwnersAvailable() const { if (!isReady(Channel::FeatureCore)) { warning() << "Channel::groupAreHandleOwnersAvailable() used channel not ready"; } else if (!interfaces().contains(TP_QT_IFACE_CHANNEL_INTERFACE_GROUP)) { warning() << "Channel::groupAreHandleOwnersAvailable() used with " "no group interface"; } return mPriv->groupAreHandleOwnersAvailable; } /** * Return a mapping of handles specific to this channel to globally valid * handles. * * The mapping includes at least all of the channel-specific handles in this * channel's members, local-pending and remote-pending sets as keys. Any * handle not in the keys of this mapping is not channel-specific in this * channel. Handles which are channel-specific, but for which the owner is * unknown, appear in this mapping with 0 as owner. * * Change notification is via the groupHandleOwnersChanged() signal. * * This method requires Channel::FeatureCore to be ready. * * \return A mapping from group-specific handles to globally valid handles. */ HandleOwnerMap Channel::groupHandleOwners() const { if (!isReady(Channel::FeatureCore)) { warning() << "Channel::groupHandleOwners() used channel not ready"; } else if (!interfaces().contains(TP_QT_IFACE_CHANNEL_INTERFACE_GROUP)) { warning() << "Channel::groupAreHandleOwnersAvailable() used with no " "group interface"; } else if (!groupAreHandleOwnersAvailable()) { warning() << "Channel::groupAreHandleOwnersAvailable() used, but handle " "owners not available"; } return mPriv->groupHandleOwners; } /** * Return whether the value returned by groupSelfContact() is guaranteed to * accurately represent the local user even after nickname changes, etc. * * This should always be \c true for new services implementing the group interface. * * Older services not providing group properties don't necessarily * emit the SelfHandleChanged signal either, so self contact changes can't be * reliably tracked. * * This method requires Channel::FeatureCore to be ready. * * \return \c true if changes to the self contact are tracked, \c false otherwise. */ bool Channel::groupIsSelfContactTracked() const { if (!isReady(Channel::FeatureCore)) { warning() << "Channel::groupIsSelfHandleTracked() used channel not ready"; } else if (!interfaces().contains(TP_QT_IFACE_CHANNEL_INTERFACE_GROUP)) { warning() << "Channel::groupIsSelfHandleTracked() used with " "no group interface"; } return mPriv->groupIsSelfHandleTracked; } /** * Return a Contact object representing the user in the group if at all possible, otherwise a * Contact object representing the user globally. * * Change notification is via the groupSelfContactChanged() signal. * * This method requires Channel::FeatureCore to be ready. * * \return A pointer to the Contact object. */ ContactPtr Channel::groupSelfContact() const { if (!isReady(Channel::FeatureCore)) { warning() << "Channel::groupSelfContact() used channel not ready"; } return mPriv->groupSelfContact; } /** * Return whether the local user is in the "local pending" state. This * indicates that the local user needs to take action to accept an invitation, * an incoming call, etc. * * This method requires Channel::FeatureCore to be ready. * * \return \c true if local user is in the channel's local-pending set, \c false otherwise. */ bool Channel::groupSelfHandleIsLocalPending() const { if (!isReady(Channel::FeatureCore)) { warning() << "Channel::groupSelfHandleIsLocalPending() used when " "channel not ready"; return false; } return mPriv->groupLocalPendingContacts.contains(mPriv->groupSelfHandle); } /** * Attempt to add the local user to this channel. In some channel types, * such as Text and StreamedMedia, this is used to accept an invitation or an * incoming call. * * This method requires Channel::FeatureCore to be ready. * * \return A PendingOperation which will emit PendingOperation::finished * when the call has finished. */ PendingOperation *Channel::groupAddSelfHandle() { if (!isReady(Channel::FeatureCore)) { warning() << "Channel::groupAddSelfHandle() used when channel not " "ready"; return new PendingFailure(TP_QT_ERROR_INVALID_ARGUMENT, QLatin1String("Channel object not ready"), ChannelPtr(this)); } UIntList handles; if (mPriv->groupSelfHandle == 0) { handles << mPriv->connection->selfHandle(); } else { handles << mPriv->groupSelfHandle; } return new PendingVoid( mPriv->group->AddMembers(handles, QLatin1String("")), ChannelPtr(this)); } //@} /** * Return whether this channel implements the conference interface * (#TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE is in the list returned by interfaces()). * * This method requires Channel::FeatureCore to be ready. * * \return \c true if the conference interface is supported, \c false otherwise. */ bool Channel::isConference() const { return hasInterface(TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE); } /** * Return a list of contacts invited to this conference when it was created. * * This method requires Channel::FeatureConferenceInitialInviteeContacts to be ready. * * \return A set of pointers to the Contact objects. */ Contacts Channel::conferenceInitialInviteeContacts() const { return mPriv->conferenceInitialInviteeContacts; } /** * Return the individual channels that are part of this conference. * * Change notification is via the conferenceChannelMerged() and * conferenceChannelRemoved() signals. * * Note that the returned channels are not guaranteed to be ready. Calling * Channel::becomeReady() may be needed. * * This method requires Channel::FeatureCore to be ready. * * \return A list of pointers to Channel objects containing all channels in the conference. * \sa conferenceInitialChannels(), conferenceOriginalChannels() */ QList Channel::conferenceChannels() const { return mPriv->conferenceChannels.values(); } /** * Return the initial value of conferenceChannels(). * * Note that the returned channels are not guaranteed to be ready. Calling * Channel::becomeReady() may be needed. * * This method requires Channel::FeatureCore to be ready. * * \return A list of pointers to Channel objects containing all channels that were initially * part of the conference. * \sa conferenceChannels(), conferenceOriginalChannels() */ QList Channel::conferenceInitialChannels() const { return mPriv->conferenceInitialChannels.values(); } /** * Return a map between channel specific handles and the corresponding channels of this conference. * * This method is only relevant on GSM conference calls where it is possible to have the same phone * number in a conference twice; for instance, it could be the number of a corporate switchboard. * This is represented using channel-specific handles; whether or not a channel uses * channel-specific handles is reported in groupFlags(). The groupHandleOwners() specifies the * mapping from opaque channel-specific handles to actual numbers; this property specifies the * original 1-1 channel corresponding to each channel-specific handle in the conference. * * In protocols where this situation cannot arise, such as XMPP, this method will return an empty * hash. * * Example, consider this situation: * 1. Place a call (with path /call/to/simon) to the contact +441234567890 (which is assigned the * handle h, say), and ask to be put through to Simon McVittie; * 2. Put that call on hold; * 3. Place another call (with path /call/to/jonny) to +441234567890, and ask to be put through to * Jonny Lamb; * 4. Request a new conference channel with initial channels: ['/call/to/simon', '/call/to/jonny']. * * The new channel will have the following properties, for some handles s and j: * * { * groupFlags(): ChannelGroupFlagChannelSpecificHandles | (other flags), * groupMembers(): [self handle, s, j], * groupHandleOwners(): { s: h, j: h }, * conferenceInitialChannels(): ['/call/to/simon', '/call/to/jonny'], * conferenceChannels(): ['/call/to/simon', '/call/to/jonny'], * conferenceOriginalChannels(): { s: '/call/to/simon', j: '/call/to/jonny' }, * # ... * } * * Note that the returned channels are not guaranteed to be ready. Calling * Channel::becomeReady() may be needed. * * This method requires Channel::FeatureCore to be ready. * * \return A map of channel specific handles to pointers to Channel objects. * \sa conferenceChannels(), conferenceInitialChannels() */ QHash Channel::conferenceOriginalChannels() const { return mPriv->conferenceOriginalChannels; } /** * Return whether this channel supports conference merging using conferenceMergeChannel(). * * This method requires Channel::FeatureCore to be ready. * * \return \c true if the interface is supported, \c false otherwise. * \sa conferenceMergeChannel() */ bool Channel::supportsConferenceMerging() const { return interfaces().contains(TP_QT_FUTURE_IFACE_CHANNEL_INTERFACE_MERGEABLE_CONFERENCE); } /** * Request that the given channel be incorporated into this channel. * * This method requires Channel::FeatureCore to be ready. * * \return A PendingOperation which will emit PendingOperation::finished * when the call has finished. * \sa supportsConferenceMerging() */ PendingOperation *Channel::conferenceMergeChannel(const ChannelPtr &channel) { if (!supportsConferenceMerging()) { return new PendingFailure(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Channel does not support MergeableConference interface"), ChannelPtr(this)); } return new PendingVoid(mPriv->mergeableConferenceInterface()->Merge( QDBusObjectPath(channel->objectPath())), ChannelPtr(this)); } /** * Return whether this channel supports splitting using conferenceSplitChannel(). * * This method requires Channel::FeatureCore to be ready. * * \return \c true if the interface is supported, \c false otherwise. * \sa conferenceSplitChannel() */ bool Channel::supportsConferenceSplitting() const { return interfaces().contains(TP_QT_FUTURE_IFACE_CHANNEL_INTERFACE_SPLITTABLE); } /** * Request that this channel is removed from any conference of which it is * a part. * * This method requires Channel::FeatureCore to be ready. * * \return A PendingOperation which will emit PendingOperation::finished * when the call has finished. * \sa supportsConferenceSplitting() */ PendingOperation *Channel::conferenceSplitChannel() { if (!supportsConferenceSplitting()) { return new PendingFailure(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Channel does not support Splittable interface"), ChannelPtr(this)); } return new PendingVoid(mPriv->splittableInterface()->Split(), ChannelPtr(this)); } /** * Return the Client::ChannelInterface interface proxy object for this channel. * This method is protected since the convenience methods provided by this * class should generally be used instead of calling D-Bus methods * directly. * * \return A pointer to the existing Client::ChannelInterface object for this * Channel object. */ Client::ChannelInterface *Channel::baseInterface() const { return mPriv->baseInterface; } void Channel::gotMainProperties(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; QVariantMap props; if (!reply.isError()) { debug() << "Got reply to Properties::GetAll(Channel)"; props = reply.value(); } else { warning().nospace() << "Properties::GetAll(Channel) failed with " << reply.error().name() << ": " << reply.error().message(); } mPriv->extractMainProps(props); mPriv->continueIntrospection(); } void Channel::gotChannelType(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (reply.isError()) { warning().nospace() << "Channel::GetChannelType() failed with " << reply.error().name() << ": " << reply.error().message() << ", Channel officially dead"; invalidate(reply.error()); return; } debug() << "Got reply to fallback Channel::GetChannelType()"; mPriv->channelType = reply.value(); mPriv->continueIntrospection(); } void Channel::gotHandle(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (reply.isError()) { warning().nospace() << "Channel::GetHandle() failed with " << reply.error().name() << ": " << reply.error().message() << ", Channel officially dead"; invalidate(reply.error()); return; } debug() << "Got reply to fallback Channel::GetHandle()"; mPriv->targetHandleType = reply.argumentAt<0>(); mPriv->targetHandle = reply.argumentAt<1>(); mPriv->continueIntrospection(); } void Channel::gotInterfaces(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (reply.isError()) { warning().nospace() << "Channel::GetInterfaces() failed with " << reply.error().name() << ": " << reply.error().message() << ", Channel officially dead"; invalidate(reply.error()); return; } debug() << "Got reply to fallback Channel::GetInterfaces()"; setInterfaces(reply.value()); mPriv->readinessHelper->setInterfaces(interfaces()); mPriv->nowHaveInterfaces(); mPriv->fakeGroupInterfaceIfNeeded(); mPriv->continueIntrospection(); } void Channel::onClosed() { debug() << "Got Channel::Closed"; QString error; QString message; if (mPriv->groupSelfContactRemoveInfo.isValid() && mPriv->groupSelfContactRemoveInfo.hasReason()) { error = mPriv->groupMemberChangeDetailsTelepathyError( mPriv->groupSelfContactRemoveInfo); message = mPriv->groupSelfContactRemoveInfo.message(); } else { error = TP_QT_ERROR_CANCELLED; message = QLatin1String("channel closed"); } invalidate(error, message); } void Channel::onConnectionReady(PendingOperation *op) { if (op->isError()) { invalidate(op->errorName(), op->errorMessage()); return; } // FIXME: should connect to selfHandleChanged and act accordingly, but that is a PITA for // keeping the Contacts built and even if we don't do it, the new code is better than the // old one anyway because earlier on we just wouldn't have had a self contact. // // besides, the only thing which breaks without connecting in the world likely is if you're // using idle and decide to change your nick, which I don't think we necessarily even have API // to do from tp-qt anyway (or did I make idle change the nick when setting your alias? can't // remember) // // Simply put, I just don't care ATM. // Will be overwritten by the group self handle, if we can discover any. Q_ASSERT(!mPriv->groupSelfHandle); mPriv->groupSelfHandle = mPriv->connection->selfHandle(); mPriv->introspectMainProperties(); } void Channel::onConnectionInvalidated() { debug() << "Owning connection died leaving an orphan Channel, " "changing to closed"; invalidate(TP_QT_ERROR_ORPHANED, QLatin1String("Connection given as the owner of this channel was invalidated")); } void Channel::gotGroupProperties(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; QVariantMap props; if (!reply.isError()) { debug() << "Got reply to Properties::GetAll(Channel.Interface.Group)"; props = reply.value(); } else { warning().nospace() << "Properties::GetAll(Channel.Interface.Group) " "failed with " << reply.error().name() << ": " << reply.error().message(); } mPriv->extract0176GroupProps(props); // Add extraction (and possible fallbacks) in similar functions, called from here mPriv->continueIntrospection(); } void Channel::gotGroupFlags(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (reply.isError()) { warning().nospace() << "Channel.Interface.Group::GetGroupFlags() failed with " << reply.error().name() << ": " << reply.error().message(); } else { debug() << "Got reply to fallback Channel.Interface.Group::GetGroupFlags()"; mPriv->setGroupFlags(reply.value()); if (mPriv->groupFlags & ChannelGroupFlagProperties) { warning() << " Reply included ChannelGroupFlagProperties, even " "though properties specified in 0.17.7 didn't work! - unsetting"; mPriv->groupFlags &= ~ChannelGroupFlagProperties; } } mPriv->continueIntrospection(); } void Channel::gotAllMembers(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (reply.isError()) { warning().nospace() << "Channel.Interface.Group::GetAllMembers() failed with " << reply.error().name() << ": " << reply.error().message(); } else { debug() << "Got reply to fallback Channel.Interface.Group::GetAllMembers()"; mPriv->groupInitialMembers = reply.argumentAt<0>(); mPriv->groupInitialRP = reply.argumentAt<2>(); foreach (uint handle, reply.argumentAt<1>()) { LocalPendingInfo info = {handle, 0, ChannelGroupChangeReasonNone, QLatin1String("")}; mPriv->groupInitialLP.push_back(info); } } mPriv->continueIntrospection(); } void Channel::gotLocalPendingMembersWithInfo(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (reply.isError()) { warning().nospace() << "Channel.Interface.Group::GetLocalPendingMembersWithInfo() " "failed with " << reply.error().name() << ": " << reply.error().message(); warning() << " Falling back to what GetAllMembers returned with no extended info"; } else { debug() << "Got reply to fallback " "Channel.Interface.Group::GetLocalPendingMembersWithInfo()"; // Overrides the previous vague list provided by gotAllMembers mPriv->groupInitialLP = reply.value(); } mPriv->continueIntrospection(); } void Channel::gotSelfHandle(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (reply.isError()) { warning().nospace() << "Channel.Interface.Group::GetSelfHandle() failed with " << reply.error().name() << ": " << reply.error().message(); } else { debug() << "Got reply to fallback Channel.Interface.Group::GetSelfHandle()"; // Don't overwrite the self handle we got from the connection with 0 if (reply.value()) { mPriv->groupSelfHandle = reply.value(); } } mPriv->nowHaveInitialMembers(); mPriv->continueIntrospection(); } void Channel::gotContacts(PendingOperation *op) { PendingContacts *pending = qobject_cast(op); mPriv->buildingContacts = false; QList contacts; if (pending->isValid()) { contacts = pending->contacts(); if (!pending->invalidHandles().isEmpty()) { warning() << "Unable to construct Contact objects for handles:" << pending->invalidHandles(); if (mPriv->groupSelfHandle && pending->invalidHandles().contains(mPriv->groupSelfHandle)) { warning() << "Unable to retrieve self contact"; mPriv->groupSelfContact.reset(); emit groupSelfContactChanged(); } } } else { warning().nospace() << "Getting contacts failed with " << pending->errorName() << ":" << pending->errorMessage(); } mPriv->updateContacts(contacts); } void Channel::onGroupFlagsChanged(uint added, uint removed) { debug().nospace() << "Got Channel.Interface.Group::GroupFlagsChanged(" << hex << added << ", " << removed << ")"; added &= ~(mPriv->groupFlags); removed &= mPriv->groupFlags; debug().nospace() << "Arguments after filtering (" << hex << added << ", " << removed << ")"; uint groupFlags = mPriv->groupFlags; groupFlags |= added; groupFlags &= ~removed; // just emit groupFlagsChanged and related signals if the flags really // changed and we are ready if (mPriv->setGroupFlags(groupFlags) && isReady(Channel::FeatureCore)) { debug() << "Emitting groupFlagsChanged with" << mPriv->groupFlags << "value" << added << "added" << removed << "removed"; emit groupFlagsChanged((ChannelGroupFlags) mPriv->groupFlags, (ChannelGroupFlags) added, (ChannelGroupFlags) removed); if (added & ChannelGroupFlagCanAdd || removed & ChannelGroupFlagCanAdd) { debug() << "Emitting groupCanAddContactsChanged"; emit groupCanAddContactsChanged(groupCanAddContacts()); } if (added & ChannelGroupFlagCanRemove || removed & ChannelGroupFlagCanRemove) { debug() << "Emitting groupCanRemoveContactsChanged"; emit groupCanRemoveContactsChanged(groupCanRemoveContacts()); } if (added & ChannelGroupFlagCanRescind || removed & ChannelGroupFlagCanRescind) { debug() << "Emitting groupCanRescindContactsChanged"; emit groupCanRescindContactsChanged(groupCanRescindContacts()); } } } void Channel::onMembersChanged(const QString &message, const UIntList &added, const UIntList &removed, const UIntList &localPending, const UIntList &remotePending, uint actor, uint reason) { // Ignore the signal if we're using the MCD signal to not duplicate events if (mPriv->usingMembersChangedDetailed) { return; } debug() << "Got Channel.Interface.Group::MembersChanged with" << added.size() << "added," << removed.size() << "removed," << localPending.size() << "moved to LP," << remotePending.size() << "moved to RP," << actor << "being the actor," << reason << "the reason and" << message << "the message"; debug() << " synthesizing a corresponding MembersChangedDetailed signal"; QVariantMap details; if (!message.isEmpty()) { details.insert(QLatin1String("message"), message); } if (actor != 0) { details.insert(QLatin1String("actor"), actor); } details.insert(QLatin1String("change-reason"), reason); mPriv->doMembersChangedDetailed(added, removed, localPending, remotePending, details); } void Channel::onMembersChangedDetailed( const UIntList &added, const UIntList &removed, const UIntList &localPending, const UIntList &remotePending, const QVariantMap &details) { // Ignore the signal if we aren't (yet) using MCD to not duplicate events if (!mPriv->usingMembersChangedDetailed) { return; } debug() << "Got Channel.Interface.Group::MembersChangedDetailed with" << added.size() << "added," << removed.size() << "removed," << localPending.size() << "moved to LP," << remotePending.size() << "moved to RP and with" << details.size() << "details"; mPriv->doMembersChangedDetailed(added, removed, localPending, remotePending, details); } void Channel::Private::doMembersChangedDetailed( const UIntList &added, const UIntList &removed, const UIntList &localPending, const UIntList &remotePending, const QVariantMap &details) { if (!groupHaveMembers) { debug() << "Still waiting for initial group members, " "so ignoring delta signal..."; return; } if (added.isEmpty() && removed.isEmpty() && localPending.isEmpty() && remotePending.isEmpty()) { debug() << "Nothing really changed, so skipping membersChanged"; return; } // let's store groupSelfContactRemoveInfo here as we may not have time // to build the contacts in case self contact is removed, // as Closed will be emitted right after if (removed.contains(groupSelfHandle)) { if (qdbus_cast(details.value(QLatin1String("change-reason"))) == ChannelGroupChangeReasonRenamed) { if (removed.size() != 1 || (added.size() + localPending.size() + remotePending.size()) != 1) { // spec-incompliant CM, ignoring members changed warning() << "Received MembersChangedDetailed with reason " "Renamed and removed.size != 1 or added.size + " "localPending.size + remotePending.size != 1. Ignoring"; return; } uint newHandle = 0; if (!added.isEmpty()) { newHandle = added.first(); } else if (!localPending.isEmpty()) { newHandle = localPending.first(); } else if (!remotePending.isEmpty()) { newHandle = remotePending.first(); } parent->onSelfHandleChanged(newHandle); return; } // let's try to get the actor contact from contact manager if available groupSelfContactRemoveInfo = GroupMemberChangeDetails( connection->contactManager()->lookupContactByHandle( qdbus_cast(details.value(QLatin1String("actor")))), details); } HandleIdentifierMap contactIds = qdbus_cast( details.value(GroupMembersChangedInfo::keyContactIds)); connection->lowlevel()->injectContactIds(contactIds); groupMembersChangedQueue.enqueue( new Private::GroupMembersChangedInfo( added, removed, localPending, remotePending, details)); if (!buildingContacts) { // if we are building contacts, we should wait it to finish so we don't // present the user with wrong information processMembersChanged(); } } void Channel::onHandleOwnersChanged(const HandleOwnerMap &added, const UIntList &removed) { debug() << "Got Channel.Interface.Group::HandleOwnersChanged with" << added.size() << "added," << removed.size() << "removed"; if (!mPriv->groupAreHandleOwnersAvailable) { debug() << "Still waiting for initial handle owners, so ignoring " "delta signal..."; return; } UIntList emitAdded; UIntList emitRemoved; for (HandleOwnerMap::const_iterator i = added.begin(); i != added.end(); ++i) { uint handle = i.key(); uint global = i.value(); if (!mPriv->groupHandleOwners.contains(handle) || mPriv->groupHandleOwners[handle] != global) { debug() << " +++/changed" << handle << "->" << global; mPriv->groupHandleOwners[handle] = global; emitAdded.append(handle); } } foreach (uint handle, removed) { if (mPriv->groupHandleOwners.contains(handle)) { debug() << " ---" << handle; mPriv->groupHandleOwners.remove(handle); emitRemoved.append(handle); } } // just emit groupHandleOwnersChanged if it really changed and // we are ready if ((emitAdded.size() || emitRemoved.size()) && isReady(Channel::FeatureCore)) { debug() << "Emitting groupHandleOwnersChanged with" << emitAdded.size() << "added" << emitRemoved.size() << "removed"; emit groupHandleOwnersChanged(mPriv->groupHandleOwners, emitAdded, emitRemoved); } } void Channel::onSelfHandleChanged(uint selfHandle) { debug().nospace() << "Got Channel.Interface.Group::SelfHandleChanged"; if (selfHandle != mPriv->groupSelfHandle) { mPriv->groupSelfHandle = selfHandle; debug() << " Emitting groupSelfHandleChanged with new self handle" << selfHandle; // FIXME: fix self contact building with no group mPriv->pendingRetrieveGroupSelfContact = true; } } void Channel::gotConferenceProperties(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; QVariantMap props; mPriv->introspectingConference = false; if (!reply.isError()) { debug() << "Got reply to Properties::GetAll(Channel.Interface.Conference)"; props = reply.value(); ConnectionPtr conn = connection(); ChannelFactoryConstPtr chanFactory = conn->channelFactory(); ObjectPathList channels = qdbus_cast(props[QLatin1String("Channels")]); foreach (const QDBusObjectPath &channelPath, channels) { if (mPriv->conferenceChannels.contains(channelPath.path())) { continue; } PendingReady *readyOp = chanFactory->proxy(conn, channelPath.path(), QVariantMap()); ChannelPtr channel(ChannelPtr::qObjectCast(readyOp->proxy())); Q_ASSERT(!channel.isNull()); mPriv->conferenceChannels.insert(channelPath.path(), channel); } ObjectPathList initialChannels = qdbus_cast(props[QLatin1String("InitialChannels")]); foreach (const QDBusObjectPath &channelPath, initialChannels) { if (mPriv->conferenceInitialChannels.contains(channelPath.path())) { continue; } PendingReady *readyOp = chanFactory->proxy(conn, channelPath.path(), QVariantMap()); ChannelPtr channel(ChannelPtr::qObjectCast(readyOp->proxy())); Q_ASSERT(!channel.isNull()); mPriv->conferenceInitialChannels.insert(channelPath.path(), channel); } mPriv->conferenceInitialInviteeHandles = qdbus_cast(props[QLatin1String("InitialInviteeHandles")]); QStringList conferenceInitialInviteeIds = qdbus_cast(props[QLatin1String("InitialInviteeIDs")]); if (mPriv->conferenceInitialInviteeHandles.size() == conferenceInitialInviteeIds.size()) { HandleIdentifierMap contactIds; int i = 0; foreach (uint handle, mPriv->conferenceInitialInviteeHandles) { contactIds.insert(handle, conferenceInitialInviteeIds.at(i++)); } mPriv->connection->lowlevel()->injectContactIds(contactIds); } mPriv->conferenceInvitationMessage = qdbus_cast(props[QLatin1String("InvitationMessage")]); ChannelOriginatorMap originalChannels = qdbus_cast( props[QLatin1String("OriginalChannels")]); for (ChannelOriginatorMap::const_iterator i = originalChannels.constBegin(); i != originalChannels.constEnd(); ++i) { PendingReady *readyOp = chanFactory->proxy(conn, i.value().path(), QVariantMap()); ChannelPtr channel(ChannelPtr::qObjectCast(readyOp->proxy())); Q_ASSERT(!channel.isNull()); mPriv->conferenceOriginalChannels.insert(i.key(), channel); } } else { warning().nospace() << "Properties::GetAll(Channel.Interface.Conference) " "failed with " << reply.error().name() << ": " << reply.error().message(); } mPriv->continueIntrospection(); } void Channel::gotConferenceInitialInviteeContacts(PendingOperation *op) { PendingContacts *pending = qobject_cast(op); if (pending->isValid()) { mPriv->conferenceInitialInviteeContacts = pending->contacts().toSet(); } else { warning().nospace() << "Getting conference initial invitee contacts " "failed with " << pending->errorName() << ":" << pending->errorMessage(); } mPriv->readinessHelper->setIntrospectCompleted( FeatureConferenceInitialInviteeContacts, true); } void Channel::onConferenceChannelMerged(const QDBusObjectPath &channelPath, uint channelSpecificHandle, const QVariantMap &properties) { if (mPriv->conferenceChannels.contains(channelPath.path())) { return; } ConnectionPtr conn = connection(); ChannelFactoryConstPtr chanFactory = conn->channelFactory(); PendingReady *readyOp = chanFactory->proxy(conn, channelPath.path(), properties); ChannelPtr channel(ChannelPtr::qObjectCast(readyOp->proxy())); Q_ASSERT(!channel.isNull()); mPriv->conferenceChannels.insert(channelPath.path(), channel); emit conferenceChannelMerged(channel); if (channelSpecificHandle != 0) { mPriv->conferenceOriginalChannels.insert(channelSpecificHandle, channel); } } void Channel::onConferenceChannelMerged(const QDBusObjectPath &channelPath) { onConferenceChannelMerged(channelPath, 0, QVariantMap()); } void Channel::onConferenceChannelRemoved(const QDBusObjectPath &channelPath, const QVariantMap &details) { if (!mPriv->conferenceChannels.contains(channelPath.path())) { return; } HandleIdentifierMap contactIds = qdbus_cast( details.value(Private::GroupMembersChangedInfo::keyContactIds)); mPriv->connection->lowlevel()->injectContactIds(contactIds); mPriv->conferenceChannelRemovedQueue.enqueue( new Private::ConferenceChannelRemovedInfo(channelPath, details)); mPriv->processConferenceChannelRemoved(); } void Channel::onConferenceChannelRemoved(const QDBusObjectPath &channelPath) { onConferenceChannelRemoved(channelPath, QVariantMap()); } void Channel::gotConferenceChannelRemovedActorContact(PendingOperation *op) { ContactPtr actorContact; if (op) { PendingContacts *pc = qobject_cast(op); if (pc->isValid()) { Q_ASSERT(pc->contacts().size() == 1); actorContact = pc->contacts().first(); } else { warning().nospace() << "Getting conference channel removed actor " "failed with " << pc->errorName() << ":" << pc->errorMessage(); } } Private::ConferenceChannelRemovedInfo *info = mPriv->conferenceChannelRemovedQueue.dequeue(); ChannelPtr channel = mPriv->conferenceChannels[info->channelPath.path()]; mPriv->conferenceChannels.remove(info->channelPath.path()); emit conferenceChannelRemoved(channel, GroupMemberChangeDetails(actorContact, info->details)); for (QHash::iterator i = mPriv->conferenceOriginalChannels.begin(); i != mPriv->conferenceOriginalChannels.end();) { if (i.value() == channel) { i = mPriv->conferenceOriginalChannels.erase(i); } else { ++i; } } delete info; mPriv->buildingConferenceChannelRemovedActorContact = false; mPriv->processConferenceChannelRemoved(); } /** * \fn void Channel::groupFlagsChanged(uint flags, uint added, uint removed) * * Emitted when the value of groupFlags() changes. * * \param flags The value which would now be returned by groupFlags(). * \param added Flags added compared to the previous value. * \param removed Flags removed compared to the previous value. */ /** * \fn void Channel::groupCanAddContactsChanged(bool canAddContacts) * * Emitted when the value of groupCanAddContacts() changes. * * \param canAddContacts Whether a contact can be added to this channel. * \sa groupCanAddContacts() */ /** * \fn void Channel::groupCanRemoveContactsChanged(bool canRemoveContacts) * * Emitted when the value of groupCanRemoveContacts() changes. * * \param canRemoveContacts Whether a contact can be removed from this channel. * \sa groupCanRemoveContacts() */ /** * \fn void Channel::groupCanRescindContactsChanged(bool canRescindContacts) * * Emitted when the value of groupCanRescindContacts() changes. * * \param canRescindContacts Whether contact invitations can be rescinded. * \sa groupCanRescindContacts() */ /** * \fn void Channel::groupMembersChanged( * const Tp::Contacts &groupMembersAdded, * const Tp::Contacts &groupLocalPendingMembersAdded, * const Tp::Contacts &groupRemotePendingMembersAdded, * const Tp::Contacts &groupMembersRemoved, * const Channel::GroupMemberChangeDetails &details) * * Emitted when the value returned by groupContacts(), groupLocalPendingContacts() or * groupRemotePendingContacts() changes. * * \param groupMembersAdded The contacts that were added to this channel. * \param groupLocalPendingMembersAdded The local pending contacts that were * added to this channel. * \param groupRemotePendingMembersAdded The remote pending contacts that were * added to this channel. * \param groupMembersRemoved The contacts removed from this channel. * \param details Additional details such as the contact requesting or causing * the change. */ /** * \fn void Channel::groupHandleOwnersChanged(const HandleOwnerMap &owners, * const Tp::UIntList &added, const Tp::UIntList &removed) * * Emitted when the value returned by groupHandleOwners() changes. * * \param owners The value which would now be returned by * groupHandleOwners(). * \param added Handles which have been added to the mapping as keys, or * existing handle keys for which the mapped-to value has changed. * \param removed Handles which have been removed from the mapping. */ /** * \fn void Channel::groupSelfContactChanged() * * Emitted when the value returned by groupSelfContact() changes. */ /** * \fn void Channel::conferenceChannelMerged(const Tp::ChannelPtr &channel) * * Emitted when a new channel is added to the value of conferenceChannels(). * * \param channel The channel that was added to conferenceChannels(). */ /** * \fn void Channel::conferenceChannelRemoved(const Tp::ChannelPtr &channel, * const Tp::Channel::GroupMemberChangeDetails &details) * * Emitted when a new channel is removed from the value of conferenceChannels(). * * \param channel The channel that was removed from conferenceChannels(). * \param details The change details. */ } // Tp telepathy-qt-0.9.3/TelepathyQt/contact-capabilities.cpp0000644000175200001440000001201312000056607025443 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009-2010 Collabora Ltd. * @copyright Copyright (C) 2009-2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include namespace Tp { /** * \class ContactCapabilities * \ingroup clientconn * \headerfile TelepathyQt/contact-capabilities.h * * \brief The ContactCapabilities class represents the capabilities of a * Contact. */ /** * Construct a new ContactCapabilities object. */ ContactCapabilities::ContactCapabilities() : CapabilitiesBase() { } /** * Construct a new ContactCapabilities object. */ ContactCapabilities::ContactCapabilities(bool specificToContact) : CapabilitiesBase(specificToContact) { } /** * Construct a new ContactCapabilities object using the give \a rccs. * * \param rccs RequestableChannelClassList representing the capabilities of a * contact. */ ContactCapabilities::ContactCapabilities(const RequestableChannelClassList &rccs, bool specificToContact) : CapabilitiesBase(rccs, specificToContact) { } /** * Construct a new ContactCapabilities object using the give \a rccSpecs. * * \param rccSpecs RequestableChannelClassList representing the capabilities of a * contact. */ ContactCapabilities::ContactCapabilities(const RequestableChannelClassSpecList &rccSpecs, bool specificToContact) : CapabilitiesBase(rccSpecs, specificToContact) { } /** * Class destructor. */ ContactCapabilities::~ContactCapabilities() { } /** * Returns whether creating a DBusTube channel with the given service targeting this contact is * expected to succeed. * * \return \c true if supported, \c false otherwise. */ bool ContactCapabilities::dbusTubes(const QString &serviceName) const { RequestableChannelClassSpec dbusTubeSpec = RequestableChannelClassSpec::dbusTube(serviceName); RequestableChannelClassSpecList rccSpecs = allClassSpecs(); foreach (const RequestableChannelClassSpec &rccSpec, rccSpecs) { if (rccSpec.supports(dbusTubeSpec)) { return true; } } return false; } /** * Return the supported DBusTube services. * * \return A list of supported DBusTube services. */ QStringList ContactCapabilities::dbusTubeServices() const { QSet ret; RequestableChannelClassSpecList rccSpecs = allClassSpecs(); foreach (const RequestableChannelClassSpec &rccSpec, rccSpecs) { if (rccSpec.channelType() == TP_QT_IFACE_CHANNEL_TYPE_DBUS_TUBE && rccSpec.targetHandleType() == HandleTypeContact && rccSpec.hasFixedProperty( TP_QT_IFACE_CHANNEL_TYPE_DBUS_TUBE + QLatin1String(".ServiceName"))) { ret << rccSpec.fixedProperty( TP_QT_IFACE_CHANNEL_TYPE_DBUS_TUBE + QLatin1String(".ServiceName")).toString(); } } return ret.toList(); } /** * Return whether creating a StreamTube channel, using the given \a service, by providing a * contact identifier is supported. * * \return \c true if supported, \c false otherwise. */ bool ContactCapabilities::streamTubes(const QString &service) const { RequestableChannelClassSpec streamTubeSpec = RequestableChannelClassSpec::streamTube(service); RequestableChannelClassSpecList rccSpecs = allClassSpecs(); foreach (const RequestableChannelClassSpec &rccSpec, rccSpecs) { if (rccSpec.supports(streamTubeSpec)) { return true; } } return false; } /** * Return the supported StreamTube services. * * \return A list of supported StreamTube services. */ QStringList ContactCapabilities::streamTubeServices() const { QSet ret; RequestableChannelClassSpecList rccSpecs = allClassSpecs(); foreach (const RequestableChannelClassSpec &rccSpec, rccSpecs) { if (rccSpec.channelType() == TP_QT_IFACE_CHANNEL_TYPE_STREAM_TUBE && rccSpec.targetHandleType() == HandleTypeContact && rccSpec.hasFixedProperty( TP_QT_IFACE_CHANNEL_TYPE_STREAM_TUBE + QLatin1String(".Service"))) { ret << rccSpec.fixedProperty( TP_QT_IFACE_CHANNEL_TYPE_STREAM_TUBE + QLatin1String(".Service")).toString(); } } return ret.toList(); } } // Tp telepathy-qt-0.9.3/TelepathyQt/properties.xml0000644000175200001440000000037512000056607023603 0ustar00collabora-develusers00000000000000 The Telepathy properties interface telepathy-qt-0.9.3/TelepathyQt/ChannelClassSpecList0000644000175200001440000000041012000056607024603 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelClassSpecList_HEADER_GUARD_ #define _TelepathyQt_ChannelClassSpecList_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/HandledChannelNotifier0000644000175200001440000000042212000056607025131 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_HandledChannelNotifier_HEADER_GUARD_ #define _TelepathyQt_HandledChannelNotifier_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/pending-variant-map.cpp0000644000175200001440000000503612000056607025231 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009-2010 Collabora Ltd. * @copyright Copyright (C) 2009-2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/pending-variant-map.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include namespace Tp { struct TP_QT_NO_EXPORT PendingVariantMap::Private { QVariantMap result; }; /** * \class PendingVariantMap * \ingroup utils * \headerfile TelepathyQt/pending-variant-map.h * * \brief The PendingVariantMap class is a generic subclass of PendingOperation * representing a pending D-Bus method call that returns a variant map. * * See \ref async_model */ PendingVariantMap::PendingVariantMap(QDBusPendingCall call, const SharedPtr &object) : PendingOperation(object), mPriv(new Private) { connect(new QDBusPendingCallWatcher(call), SIGNAL(finished(QDBusPendingCallWatcher*)), this, SLOT(watcherFinished(QDBusPendingCallWatcher*))); } /** * Class destructor. */ PendingVariantMap::~PendingVariantMap() { delete mPriv; } QVariantMap PendingVariantMap::result() const { return mPriv->result; } void PendingVariantMap::watcherFinished(QDBusPendingCallWatcher* watcher) { QDBusPendingReply reply = *watcher; if (!reply.isError()) { debug() << "Got reply to PendingVariantMap call"; mPriv->result = reply.value(); setFinished(); } else { debug().nospace() << "PendingVariantMap call failed: " << reply.error().name() << ": " << reply.error().message(); setFinishedWithError(reply.error()); } watcher->deleteLater(); } } // Tp telepathy-qt-0.9.3/TelepathyQt/server-authentication-channel.cpp0000644000175200001440000002574312000056607027330 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/server-authentication-channel.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include namespace Tp { struct TP_QT_NO_EXPORT ServerAuthenticationChannel::Private { Private(ServerAuthenticationChannel *parent); static void introspectMain(ServerAuthenticationChannel::Private *self); void extractServerAuthenticationProperties(const QVariantMap &props); // Public object ServerAuthenticationChannel *parent; ReadinessHelper *readinessHelper; // Introspection QString authMethod; CaptchaAuthenticationPtr captchaAuthentication; }; ServerAuthenticationChannel::Private::Private(ServerAuthenticationChannel *parent) : parent(parent), readinessHelper(parent->readinessHelper()) { ReadinessHelper::Introspectables introspectables; ReadinessHelper::Introspectable introspectableServerAuthentication( QSet() << 0, // makesSenseForStatuses Features() << Channel::FeatureCore, // dependsOnFeatures (core) QStringList(), // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &ServerAuthenticationChannel::Private::introspectMain, this); introspectables[ServerAuthenticationChannel::FeatureCore] = introspectableServerAuthentication; readinessHelper->addIntrospectables(introspectables); } void ServerAuthenticationChannel::Private::introspectMain(ServerAuthenticationChannel::Private *self) { ServerAuthenticationChannel *parent = self->parent; Client::ChannelTypeServerAuthenticationInterface *serverAuthenticationInterface = parent->interface(); PendingVariantMap *pvm = serverAuthenticationInterface->requestAllProperties(); parent->connect(pvm, SIGNAL(finished(Tp::PendingOperation*)), SLOT(gotServerAuthenticationProperties(Tp::PendingOperation*))); } /** * \class ServerAuthenticationChannel * \ingroup clientchannel * \headerfile TelepathyQt/server-authentication-channel.h * * \brief The ServerAuthenticationChannel class is a base class for all ServerAuthentication types. * * A ServerAuthentication is a mechanism for a connection to perform an authentication operation. * Such an authentication can happen in several ways (at the moment, only Captcha is supported) - this * channel will expose a high-level object representing the requested method, allowing a handler to carry on * the authentication procedure. * * Note that when an authentication procedure succeeds, you can expect this channel to be closed automatically. * Please refer to the methods' implementation docs for more details about this. * * See \ref async_model, \ref shared_ptr */ /** * Feature representing the core that needs to become ready to make the * ServerAuthenticationChannel object usable. * * Note that this feature must be enabled in order to use most * ServerAuthenticationChannel methods. * See specific methods documentation for more details. */ const Feature ServerAuthenticationChannel::FeatureCore = Feature(QLatin1String(ServerAuthenticationChannel::staticMetaObject.className()), 0); /** * Create a new ServerAuthenticationChannel channel. * * \param connection Connection owning this channel, and specifying the * service. * \param objectPath The channel object path. * \param immutableProperties The channel immutable properties. * \return A ServerAuthenticationChannelPtr object pointing to the newly created * ServerAuthenticationChannel object. */ ServerAuthenticationChannelPtr ServerAuthenticationChannel::create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) { return ServerAuthenticationChannelPtr(new ServerAuthenticationChannel(connection, objectPath, immutableProperties)); } /** * Construct a new ServerAuthenticationChannel object. * * \param connection Connection owning this channel, and specifying the * service. * \param objectPath The channel object path. * \param immutableProperties The channel immutable properties. * \param coreFeature The core feature of the channel type, if any. The corresponding introspectable should * depend on ServerAuthenticationChannel::FeatureCore. */ ServerAuthenticationChannel::ServerAuthenticationChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature) : Channel(connection, objectPath, immutableProperties, coreFeature), mPriv(new Private(this)) { } /** * Class destructor. */ ServerAuthenticationChannel::~ServerAuthenticationChannel() { delete mPriv; } /** * Return whether this ServerAuthenticationChannel implements Captcha as its authentication mechanism. * Should this be true, captchaAuthentication() can be safely accessed. * * This method requires ServerAuthenticationChannel::FeatureCore to be ready. * * \return \c true if this channel implements the Captcha interface, \c false otherwise. * \sa captchaAuthentication */ bool ServerAuthenticationChannel::hasCaptchaInterface() const { if (!isReady(ServerAuthenticationChannel::FeatureCore)) { warning() << "ServerAuthenticationChannel::hasCaptchaInterface() used with FeatureCore not ready"; return false; } return mPriv->authMethod == TP_QT_IFACE_CHANNEL_INTERFACE_CAPTCHA_AUTHENTICATION; } /* * Return whether this ServerAuthenticationChannel implements Sasl as its authentication mechanism. * * This method requires ServerAuthenticationChannel::FeatureCore to be ready. * * \return \c true if this channel implements the Sasl interface, \c false otherwise. * * TODO: Enable when high-level SASL Support will be in place bool ServerAuthenticationChannel::hasSaslInterface() const { if (!isReady(ServerAuthenticationChannel::FeatureCore)) { warning() << "ServerAuthenticationChannel::hasSaslInterface() used with FeatureCore not ready"; return false; } return mPriv->authMethod == TP_QT_IFACE_CHANNEL_INTERFACE_SASL_AUTHENTICATION; }*/ /** * Return the CaptchaAuthentication object for this channel, if the channel implements * the CaptchaAuthentication interface and is a ServerAuthentication Channel. * * Note that this method will return a meaningful value only if hasCaptchaInterface() * returns \c true. * * This method requires ServerAuthenticationChannel::FeatureCore to be ready. * * \return A shared pointer to the object representing the CaptchaAuthentication interface, * or a null shared pointer if the feature is not ready yet or the channel does not * implement Captcha interface. * \sa hasCaptchaInterface */ CaptchaAuthenticationPtr ServerAuthenticationChannel::captchaAuthentication() const { if (!isReady(ServerAuthenticationChannel::FeatureCore)) { warning() << "ServerAuthenticationChannel::captchaAuthentication() used with FeatureCore not ready"; return CaptchaAuthenticationPtr(); } return mPriv->captchaAuthentication; } void ServerAuthenticationChannel::gotCaptchaAuthenticationProperties(Tp::PendingOperation *op) { if (!op->isError()) { PendingVariantMap *pvm = qobject_cast(op); mPriv->captchaAuthentication->mPriv->extractCaptchaAuthenticationProperties(pvm->result()); debug() << "Got reply to Properties::GetAll(CaptchaAuthentication)"; mPriv->readinessHelper->setIntrospectCompleted(ServerAuthenticationChannel::FeatureCore, true); } else { warning().nospace() << "Properties::GetAll(CaptchaAuthentication) failed " "with " << op->errorName() << ": " << op->errorMessage(); mPriv->readinessHelper->setIntrospectCompleted(ServerAuthenticationChannel::FeatureCore, false, op->errorName(), op->errorMessage()); } } void ServerAuthenticationChannel::gotServerAuthenticationProperties(Tp::PendingOperation *op) { if (!op->isError()) { PendingVariantMap *pvm = qobject_cast(op); debug() << "Got reply to Properties::GetAll(ServerAuthentication)"; mPriv->authMethod = qdbus_cast(pvm->result()[QLatin1String("AuthenticationMethod")]); if (mPriv->authMethod == TP_QT_IFACE_CHANNEL_INTERFACE_CAPTCHA_AUTHENTICATION) { mPriv->captchaAuthentication = CaptchaAuthenticationPtr(new CaptchaAuthentication(ChannelPtr(this))); Client::ChannelInterfaceCaptchaAuthenticationInterface *captchaAuthenticationInterface = interface(); captchaAuthenticationInterface->setMonitorProperties(true); QObject::connect(captchaAuthenticationInterface, SIGNAL(propertiesChanged(QVariantMap,QStringList)), mPriv->captchaAuthentication.data(), SLOT(onPropertiesChanged(QVariantMap,QStringList))); PendingVariantMap *pvm = captchaAuthenticationInterface->requestAllProperties(); connect(pvm, SIGNAL(finished(Tp::PendingOperation*)), SLOT(gotCaptchaAuthenticationProperties(Tp::PendingOperation*))); } else { // We have nothing else to do here at the moment mPriv->readinessHelper->setIntrospectCompleted(ServerAuthenticationChannel::FeatureCore, true); } } else { warning().nospace() << "Properties::GetAll(ServerAuthentication) failed " "with " << op->errorName() << ": " << op->errorMessage(); mPriv->readinessHelper->setIntrospectCompleted(ServerAuthenticationChannel::FeatureCore, false, op->errorName(), op->errorMessage()); } } } // Tp telepathy-qt-0.9.3/TelepathyQt/ClientInterfaceRequestsInterface0000644000175200001440000000042412000056607027217 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ClientInterfaceRequestsInterface_HEADER_GUARD_ #define _TelepathyQt_ClientInterfaceRequestsInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/channel-request.h0000644000175200001440000001124412000056607024131 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_channel_request_h_HEADER_GUARD_ #define _TelepathyQt_channel_request_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include #include #include #include #include #include #include #include #include #include namespace Tp { class ChannelRequestHints; class PendingOperation; class TP_QT_EXPORT ChannelRequest : public StatefulDBusProxy, public OptionalInterfaceFactory { Q_OBJECT Q_DISABLE_COPY(ChannelRequest) public: static const Feature FeatureCore; static ChannelRequestPtr create(const QDBusConnection &bus, const QString &objectPath, const QVariantMap &immutableProperties, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory); static ChannelRequestPtr create(const AccountPtr &account, const QString &objectPath, const QVariantMap &immutableProperties); virtual ~ChannelRequest(); AccountPtr account() const; QDateTime userActionTime() const; QString preferredHandler() const; QualifiedPropertyValueMapList requests() const; ChannelRequestHints hints() const; QVariantMap immutableProperties() const; PendingOperation *cancel(); ChannelPtr channel() const; Q_SIGNALS: void failed(const QString &errorName, const QString &errorMessage); void succeeded(const Tp::ChannelPtr &channel); protected: ChannelRequest(const QDBusConnection &bus, const QString &objectPath, const QVariantMap &immutableProperties, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory); ChannelRequest(const AccountPtr &account, const QString &objectPath, const QVariantMap &immutableProperties); Client::ChannelRequestInterface *baseInterface() const; private Q_SLOTS: TP_QT_NO_EXPORT void gotMainProperties(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void onAccountReady(Tp::PendingOperation *op); TP_QT_NO_EXPORT void onLegacySucceeded(); TP_QT_NO_EXPORT void onSucceededWithChannel(const QDBusObjectPath &connPath, const QVariantMap &connProps, const QDBusObjectPath &chanPath, const QVariantMap &chanProps); TP_QT_NO_EXPORT void onChanBuilt(Tp::PendingOperation *op); private: friend class PendingChannelRequest; PendingOperation *proceed(); struct Private; friend struct Private; Private *mPriv; }; class TP_QT_EXPORT ChannelRequestHints { public: ChannelRequestHints(); ChannelRequestHints(const QVariantMap &hints); ChannelRequestHints(const ChannelRequestHints &other); ~ChannelRequestHints(); ChannelRequestHints &operator=(const ChannelRequestHints &other); bool isValid() const; bool hasHint(const QString &reversedDomain, const QString &localName) const; QVariant hint(const QString &reversedDomain, const QString &localName) const; void setHint(const QString &reversedDomain, const QString &localName, const QVariant &value); QVariantMap allHints() const; private: struct Private; friend struct Private; QSharedDataPointer mPriv; }; } // Tp Q_DECLARE_METATYPE(Tp::ChannelRequestHints); #endif telepathy-qt-0.9.3/TelepathyQt/PropertiesInterface0000644000175200001440000000037012000056607024560 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_PropertiesInterface_HEADER_GUARD_ #define _TelepathyQt_PropertiesInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/dbus-object.h0000644000175200001440000000276212000056607023241 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_dbus_object_h_HEADER_GUARD_ #define _TelepathyQt_dbus_object_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include class QDBusConnection; namespace Tp { class TP_QT_EXPORT DBusObject : public QObject { Q_OBJECT Q_DISABLE_COPY(DBusObject) public: DBusObject(const QDBusConnection &dbusConnection, QObject *parent = 0); virtual ~DBusObject(); QDBusConnection dbusConnection() const; private: class Private; friend class Private; Private *mPriv; }; } #endif telepathy-qt-0.9.3/TelepathyQt/dbus-tube-channel.h0000644000175200001440000000512212000056607024331 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @license LGPL 2.1 * * 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 _TelepathyQt_dbus_tube_channel_h_HEADER_GUARD_ #define _TelepathyQt_dbus_tube_channel_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include namespace Tp { class TP_QT_EXPORT DBusTubeChannel : public TubeChannel { Q_OBJECT Q_DISABLE_COPY(DBusTubeChannel) public: static const Feature FeatureCore; static const Feature FeatureBusNameMonitoring; static DBusTubeChannelPtr create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties); virtual ~DBusTubeChannel(); QString serviceName() const; bool supportsRestrictingToCurrentUser() const; QHash contactsForBusNames() const; QString address() const; protected: DBusTubeChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties); Q_SIGNALS: void busNameAdded(const QString &busName, const Tp::ContactPtr &contact); void busNameRemoved(const QString &busName, const Tp::ContactPtr &contact); private Q_SLOTS: TP_QT_NO_EXPORT void onRequestAllPropertiesFinished(Tp::PendingOperation*); TP_QT_NO_EXPORT void onRequestPropertyDBusNamesFinished(Tp::PendingOperation *op); TP_QT_NO_EXPORT void onDBusNamesChanged(const Tp::DBusTubeParticipants &added, const Tp::UIntList &removed); TP_QT_NO_EXPORT void onContactsRetrieved(const QUuid &uuid, const QList &contacts); TP_QT_NO_EXPORT void onQueueCompleted(); private: TP_QT_NO_EXPORT void setAddress(const QString &address); struct Private; friend struct PendingDBusTubeConnection; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/ProtocolInterfacePresenceInterface0000644000175200001440000000044412000056607027535 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ProtocolInterfacePresenceInterface_HEADER_GUARD_ #define _TelepathyQt_ProtocolInterfacePresenceInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/ProtocolInterfaceAddressingInterface0000644000175200001440000000045012000056607030051 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ProtocolInterfaceAddressingInterface_HEADER_GUARD_ #define _TelepathyQt_ProtocolInterfaceAddressingInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/Constants0000644000175200001440000000035112000056607022556 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_Constants_HEADER_GUARD_ #define _TelepathyQt_Constants_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/CallContentMediaDescriptionInterfaceRTCPFeedbackInterface0000644000175200001440000000053612000056607033721 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_CallContentMediaDescriptionInterfaceRTCPFeedbackInterface_HEADER_GUARD_ #define _TelepathyQt_CallContentMediaDescriptionInterfaceRTCPFeedbackInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/stream-tube-channel.h0000644000175200001440000000637312000056607024700 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010-2011 Collabora Ltd. * @license LGPL 2.1 * * 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 _TelepathyQt_stream_tube_channel_h_HEADER_GUARD_ #define _TelepathyQt_stream_tube_channel_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include class QHostAddress; namespace Tp { class TP_QT_EXPORT StreamTubeChannel : public TubeChannel { Q_OBJECT Q_DISABLE_COPY(StreamTubeChannel) public: static const Feature FeatureCore; static const Feature FeatureConnectionMonitoring; static StreamTubeChannelPtr create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties); virtual ~StreamTubeChannel(); QString service() const; bool supportsIPv4SocketsOnLocalhost() const; bool supportsIPv4SocketsWithSpecifiedAddress() const; bool supportsIPv6SocketsOnLocalhost() const; bool supportsIPv6SocketsWithSpecifiedAddress() const; bool supportsUnixSocketsOnLocalhost() const; bool supportsUnixSocketsWithCredentials() const; bool supportsAbstractUnixSocketsOnLocalhost() const; bool supportsAbstractUnixSocketsWithCredentials() const; QSet connections() const; SocketAddressType addressType() const; QPair< QHostAddress, quint16 > ipAddress() const; QString localAddress() const; Q_SIGNALS: void newConnection(uint connectionId); void connectionClosed(uint connectionId, const QString &errorName, const QString &errorMessage); protected: StreamTubeChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature = StreamTubeChannel::FeatureCore); void addConnection(uint connection); void removeConnection(uint connection, const QString &error, const QString &message); void setAddressType(SocketAddressType type); SocketAccessControl accessControl() const; void setAccessControl(SocketAccessControl accessControl); void setIpAddress(const QPair &address); void setLocalAddress(const QString &address); bool isDroppingConnections() const; private Q_SLOTS: TP_QT_NO_EXPORT void gotStreamTubeProperties(Tp::PendingOperation *op); TP_QT_NO_EXPORT void onConnectionClosed(uint, const QString &, const QString &); TP_QT_NO_EXPORT void dropConnections(); private: struct Private; friend struct Private; Private *mPriv; }; } #endif telepathy-qt-0.9.3/TelepathyQt/PendingString0000644000175200001440000000036612000056607023363 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_PendingString_HEADER_GUARD_ #define _TelepathyQt_PendingString_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/Farsight/0000755000175200001440000000000012000056607022427 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/TelepathyQt/Farsight/global.h0000644000175200001440000000326112000056607024042 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_Farsight_global_h_HEADER_GUARD_ #define _TelepathyQt_Farsight_global_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #ifdef BUILDING_TP_QT_FARSIGHT # define TP_QT_FS_EXPORT Q_DECL_EXPORT #else # define TP_QT_FS_EXPORT Q_DECL_IMPORT #endif #if !defined(Q_OS_WIN) && defined(QT_VISIBILITY_AVAILABLE) # define TP_QT_FS_NO_EXPORT __attribute__((visibility("hidden"))) #endif #ifndef TP_QT_FS_NO_EXPORT # define TP_QT_FS_NO_EXPORT #endif #ifndef TP_QT_FS_DEPRECATED # ifdef TP_QT_DEPRECATED_WARNINGS # ifdef BUILDING_TP_QT_FARSIGHT # define TP_QT_FS_DEPRECATED # else # define TP_QT_FS_DEPRECATED Q_DECL_DEPRECATED # endif # else # define TP_QT_FS_DEPRECATED # endif #endif #endif telepathy-qt-0.9.3/TelepathyQt/Farsight/channel.h0000644000175200001440000000251312000056607024211 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_Farsight_channel_h_HEADER_GUARD_ #define _TelepathyQt_Farsight_channel_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include typedef struct _TfChannel TfChannel; namespace Tp { TP_QT_FS_DEPRECATED TP_QT_FS_EXPORT TfChannel *createFarsightChannel(const StreamedMediaChannelPtr &channel); } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/Farsight/TelepathyQtFarsightConfig.cmake.in0000644000175200001440000000264512000056607031127 0ustar00collabora-develusers00000000000000# TelepathyQt@QT_VERSION_MAJOR@FarsightConfig.cmake is generated by CMake from TelepathyQt/TelepathyQtFarsightConfig.cmake.in. # Any changed value in this file will be overwritten by CMake. if(NOT TelepathyQt@QT_VERSION_MAJOR@Farsight_FOUND) # set the version number set(TELEPATHY_QT@QT_VERSION_MAJOR@_FARSIGHT_VERSION_MAJOR @TP_QT_MAJOR_VERSION@) set(TELEPATHY_QT@QT_VERSION_MAJOR@_FARSIGHT_VERSION_MINOR @TP_QT_MINOR_VERSION@) set(TELEPATHY_QT@QT_VERSION_MAJOR@_FARSIGHT_VERSION_MICRO @TP_QT_MICRO_VERSION@) set(TELEPATHY_QT@QT_VERSION_MAJOR@_FARSIGHT_VERSION_NANO @TP_QT_NANO_VERSION@) set(TELEPATHY_QT@QT_VERSION_MAJOR@_FARSIGHT_VERSION @PACKAGE_VERSION@) # set the directories if(NOT TELEPATHY_QT@QT_VERSION_MAJOR@_FARSIGHT_INSTALL_DIR) set(TELEPATHY_QT@QT_VERSION_MAJOR@_FARSIGHT_INSTALL_DIR "@CMAKE_INSTALL_PREFIX@") endif(NOT TELEPATHY_QT@QT_VERSION_MAJOR@_FARSIGHT_INSTALL_DIR) set(TELEPATHY_QT@QT_VERSION_MAJOR@_FARSIGHT_INCLUDE_DIR "@TELEPATHY_QT_INCLUDE_DIR@") set(TELEPATHY_QT@QT_VERSION_MAJOR@_FARSIGHT_LIB_DIR "@TELEPATHY_QT_LIB_DIR@") set(TELEPATHY_QT@QT_VERSION_MAJOR@_FARSIGHT_SHARE_DIR "@TELEPATHY_QT_DATA_DIR@") find_package(TelepathyQt@QT_VERSION_MAJOR@ REQUIRED) set(TELEPATHY_QT@QT_VERSION_MAJOR@_FARSIGHT_LIBRARIES telepathy-qt@QT_VERSION_MAJOR@-farsight) endif(NOT TelepathyQt@QT_VERSION_MAJOR@Farsight_FOUND) telepathy-qt-0.9.3/TelepathyQt/Farsight/channel.cpp0000644000175200001440000000551412000056607024550 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/debug-internal.h" #include #include #include #include #include #include #include #include namespace Tp { TfChannel *createFarsightChannel(const StreamedMediaChannelPtr &channel) { if (!channel->handlerStreamingRequired()) { warning() << "Handler streaming not required"; return 0; } TpDBusDaemon *dbus = tp_dbus_daemon_dup(0); if (!dbus) { warning() << "Unable to connect to D-Bus"; return 0; } ConnectionPtr connection = channel->connection(); TpSimpleClientFactory *factory = (TpSimpleClientFactory *) tp_automatic_client_factory_new (dbus); if (!factory) { warning() << "Unable to construct TpAutomaticClientFactory"; g_object_unref(dbus); return 0; } TpConnection *gconnection = tp_simple_client_factory_ensure_connection (factory, connection->objectPath().toAscii(), NULL, 0); g_object_unref(factory); factory = 0; g_object_unref(dbus); dbus = 0; if (!gconnection) { warning() << "Unable to construct TpConnection"; return 0; } TpChannel *gchannel = tp_channel_new(gconnection, channel->objectPath().toAscii(), TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA.latin1(), (TpHandleType) channel->targetHandleType(), channel->targetHandle(), 0); g_object_unref(gconnection); gconnection = 0; if (!gchannel) { warning() << "Unable to construct TpChannel"; return 0; } TfChannel *ret = tf_channel_new(gchannel); g_object_unref(gchannel); gchannel = 0; return ret; } } // Tp telepathy-qt-0.9.3/TelepathyQt/Farsight/TelepathyQtFarsight.pc.in0000644000175200001440000000144112000056607027314 0ustar00collabora-develusers00000000000000prefix=${CMAKE_INSTALL_PREFIX} exec_prefix=${CMAKE_INSTALL_PREFIX} libdir=${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR} includedir=${CMAKE_INSTALL_PREFIX}/${INCLUDE_INSTALL_DIR} Name: TelepathyQt${QT_VERSION_MAJOR}Farsight Description: Qt Telepathy Farsight utility library for the Telepathy framework Version: ${PACKAGE_VERSION} Requires.private: QtCore >= ${QT_MIN_VERSION}, QtCore < ${QT_MAX_VERSION}, QtDBus >= ${QT_MIN_VERSION}, QtDBus < ${QT_MAX_VERSION}, telepathy-glib >= ${TELEPATHY_GLIB_MIN_VERSION}, telepathy-farsight >= ${TELEPATHY_FARSIGHT_MIN_VERSION}, TelepathyQt${QT_VERSION_MAJOR} = ${PACKAGE_VERSION} Libs: -L${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR} -ltelepathy-qt${QT_VERSION_MAJOR}-farsight Cflags: -I${CMAKE_INSTALL_PREFIX}/${INCLUDE_INSTALL_DIR}/telepathy-qt${QT_VERSION_MAJOR} telepathy-qt-0.9.3/TelepathyQt/Farsight/Channel0000644000175200001440000000037612000056607023730 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_Farsight_Channel_HEADER_GUARD_ #define _TelepathyQt_Farsight_Channel_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/Farsight/CMakeLists.txt0000644000175200001440000001007712000056607025174 0ustar00collabora-develusers00000000000000if(FARSIGHT_COMPONENTS_FOUND) include_directories(${TELEPATHY_FARSIGHT_INCLUDE_DIR} ${GSTREAMER_INCLUDE_DIR} ${GLIB2_INCLUDE_DIR} ${LIBXML2_INCLUDE_DIR} ${DBUS_INCLUDE_DIR}) # It gets inherited from the previous directory, hence it has to be removed explicitely remove_definitions(-DBUILDING_TP_QT) # We are building Telepathy-Qt-Farsight add_definitions(-DBUILDING_TP_QT_FARSIGHT -DQT_NO_KEYWORDS) set(telepathy_qt_farsight_SRCS channel.cpp) set(telepathy_qt_farsight_HEADERS Channel channel.h global.h) # Create the library if (ENABLE_COMPILER_COVERAGE) add_library(telepathy-qt${QT_VERSION_MAJOR}-farsight STATIC ${telepathy_qt_farsight_SRCS}) else (ENABLE_COMPILER_COVERAGE) add_library(telepathy-qt${QT_VERSION_MAJOR}-farsight SHARED ${telepathy_qt_farsight_SRCS}) endif (ENABLE_COMPILER_COVERAGE) # Link target_link_libraries(telepathy-qt${QT_VERSION_MAJOR}-farsight ${QT_QTDBUS_LIBRARY} ${QT_QTCORE_LIBRARY} ${TELEPATHY_FARSIGHT_LIBRARIES} ${GSTREAMER_INTERFACE_LIBRARY} telepathy-qt${QT_VERSION_MAJOR} ${TP_QT_LIBRARY_LINKER_FLAGS}) # Set the correct version number set_target_properties(telepathy-qt${QT_VERSION_MAJOR}-farsight PROPERTIES SOVERSION ${TP_QT_ABI_VERSION} VERSION ${TP_QT_LIBRARY_VERSION}) # Install the library - watch out for the correct components if (WIN32) install(TARGETS telepathy-qt${QT_VERSION_MAJOR}-farsight EXPORT TelepathyQt${QT_VERSION_MAJOR}Targets RUNTIME DESTINATION ${LIB_INSTALL_DIR} COMPONENT farsight ARCHIVE DESTINATION ${LIB_INSTALL_DIR} COMPONENT farsight_libs) else (WIN32) install(TARGETS telepathy-qt${QT_VERSION_MAJOR}-farsight EXPORT TelepathyQt${QT_VERSION_MAJOR}Targets LIBRARY DESTINATION ${LIB_INSTALL_DIR} COMPONENT farsight ARCHIVE DESTINATION ${LIB_INSTALL_DIR} COMPONENT farsight_libs) endif (WIN32) # Install headers install(FILES ${telepathy_qt_farsight_HEADERS} DESTINATION ${INCLUDE_INSTALL_DIR}/telepathy-qt${QT_VERSION_MAJOR}/TelepathyQt/Farsight COMPONENT farsight_headers) # pkg-config files, only if not on windows if (NOT WIN32) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/TelepathyQtFarsight.pc.in ${CMAKE_CURRENT_BINARY_DIR}/TelepathyQt${QT_VERSION_MAJOR}Farsight.pc) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/TelepathyQtFarsight-uninstalled.pc.in ${CMAKE_CURRENT_BINARY_DIR}/TelepathyQt${QT_VERSION_MAJOR}Farsight-uninstalled.pc) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/TelepathyQt${QT_VERSION_MAJOR}Farsight.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig COMPONENT pkgconfig) endif (NOT WIN32) # Configure the actual Config file configure_file(TelepathyQtFarsightConfig.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/TelepathyQt${QT_VERSION_MAJOR}FarsightConfig.cmake" @ONLY) # this file is used by to check if the installed version can be used. macro_write_basic_cmake_version_file(${CMAKE_CURRENT_BINARY_DIR}/TelepathyQt${QT_VERSION_MAJOR}FarsightConfigVersion.cmake ${PACKAGE_VERSION}) if(USE_COMMON_CMAKE_PACKAGE_CONFIG_DIR) set(_TelepathyQtFarsightConfig_INSTALL_DIR ${LIB_INSTALL_DIR}/cmake/TelepathyQt${QT_VERSION_MAJOR}Farsight) else(USE_COMMON_CMAKE_PACKAGE_CONFIG_DIR) set(_TelepathyQtFarsightConfig_INSTALL_DIR ${LIB_INSTALL_DIR}/TelepathyQt${QT_VERSION_MAJOR}Farsight/cmake) endif(USE_COMMON_CMAKE_PACKAGE_CONFIG_DIR) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/TelepathyQt${QT_VERSION_MAJOR}FarsightConfigVersion.cmake ${CMAKE_CURRENT_BINARY_DIR}/TelepathyQt${QT_VERSION_MAJOR}FarsightConfig.cmake DESTINATION ${_TelepathyQtFarsightConfig_INSTALL_DIR} COMPONENT headers) endif(FARSIGHT_COMPONENTS_FOUND) telepathy-qt-0.9.3/TelepathyQt/Farsight/TelepathyQtFarsight-uninstalled.pc.in0000644000175200001440000000132512000056607031635 0ustar00collabora-develusers00000000000000prefix=/nonexistent exec_prefix=/nonexistent abs_top_builddir=${CMAKE_BINARY_DIR} abs_top_srcdir=${CMAKE_SOURCE_DIR} Name: TelepathyQt${QT_VERSION_MAJOR}Farsight (uninstalled copy) Description: Qt Telepathy Farsight utility library for the Telepathy framework Version: ${PACKAGE_VERSION} Requires.private: QtCore >= ${QT_MIN_VERSION}, QtCore < ${QT_MAX_VERSION}, QtDBus >= ${QT_MIN_VERSION}, QtDBus < ${QT_MAX_VERSION}, telepathy-glib >= ${TELEPATHY_GLIB_MIN_VERSION}, telepathy-farsight >= ${TELEPATHY_FARSIGHT_MIN_VERSION}, TelepathyQt${QT_VERSION_MAJOR} = ${PACKAGE_VERSION} Libs: ${CMAKE_BINARY_DIR}/TelepathyQt/Farsight/libtelepathy-qt${QT_VERSION_MAJOR}-farsight.so Cflags: -I${CMAKE_SOURCE_DIR} -I${CMAKE_BINARY_DIR} telepathy-qt-0.9.3/TelepathyQt/ConnectionInterfaceContactInfoInterface0000644000175200001440000000044612000056607030500 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ConnectionInterfaceContactInfoInterface_HEADER_GUARD_ #define _TelepathyQt_ConnectionInterfaceContactInfoInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/PendingStreamTubeConnection0000644000175200001440000000044212000056607026203 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_PendingStreamTubeConnection_HEADER_GUARD_ #define _TelepathyQt_PendingStreamTubeConnection_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/GenericCapabilityFilter0000644000175200001440000000042512000056607025330 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_GenericCapabilityFilter_HEADER_GUARD_ #define _TelepathyQt_GenericCapabilityFilter_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/Filter0000644000175200001440000000034012000056607022025 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_Filter_HEADER_GUARD_ #define _TelepathyQt_Filter_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/SimpleCallObserver0000644000175200001440000000040612000056607024340 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_SimpleCallObserver_HEADER_GUARD_ #define _TelepathyQt_SimpleCallObserver_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/ChannelInterfaceFileTransferMetadataInterface0000644000175200001440000000045712000056607031571 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelInterfaceFileTransferMetadataInterface_HEADER_GUARD_ #define _TelepathyQt_ChannelInterfaceFileTransferMetadataInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/connection-manager-lowlevel.h0000644000175200001440000000344312000056607026433 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2010 Collabora Ltd. * @copyright Copyright (C) 2008-2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_connection_manager_lowlevel_h_HEADER_GUARD_ #define _TelepathyQt_connection_manager_lowlevel_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include namespace Tp { class PendingConnection; class TP_QT_EXPORT ConnectionManagerLowlevel : public QObject, public RefCounted { Q_OBJECT Q_DISABLE_COPY(ConnectionManagerLowlevel) public: ~ConnectionManagerLowlevel(); bool isValid() const; ConnectionManagerPtr connectionManager() const; PendingConnection *requestConnection(const QString &protocolName, const QVariantMap ¶meters); private: friend class ConnectionManager; TP_QT_NO_EXPORT ConnectionManagerLowlevel(ConnectionManager *parent); struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/pending-send-message.h0000644000175200001440000000421212000056607025025 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_pending_send_message_h_HEADER_GUARD_ #define _TelepathyQt_pending_send_message_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include class QDBusPendingCallWatcher; class QString; namespace Tp { class Message; class TP_QT_EXPORT PendingSendMessage : public PendingOperation { Q_OBJECT Q_DISABLE_COPY(PendingSendMessage) public: ~PendingSendMessage(); TextChannelPtr channel() const; ContactMessengerPtr messenger() const; QString sentMessageToken() const; Message message() const; private Q_SLOTS: TP_QT_NO_EXPORT void onTextSent(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void onMessageSent(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void onCDMessageSent(QDBusPendingCallWatcher *watcher); private: friend class TextChannel; friend class ContactMessenger; TP_QT_NO_EXPORT PendingSendMessage(const TextChannelPtr &channel, const Message &message); TP_QT_NO_EXPORT PendingSendMessage(const ContactMessengerPtr &messenger, const Message &message); struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/utils.cpp0000644000175200001440000001424112000056607022526 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/key-file.h" #include #include /** * \defgroup utility functions */ namespace Tp { static inline bool isBad(char c, bool isFirst) { return ((c < 'a' || c > 'z') && (c < 'A' || c > 'Z') && (c < '0' || c > '9' || isFirst)); } /** * Escape an arbitrary string so it follows the rules for a C identifier, * and hence an object path component, interface element component, * bus name component or member name in D-Bus. * * This is a reversible encoding, so it preserves distinctness. * * The escaping consists of replacing all non-alphanumerics, and the first * character if it's a digit, with an underscore and two lower-case hex * digits: * * "0123abc_xyz\x01\xff" -> _30123abc_5fxyz_01_ff * * i.e. similar to URI encoding, but with _ taking the role of %, and a * smaller allowed set. As a special case, "" is escaped to "_" (just for * completeness, really). * * \param string The string to be escaped. * \return the escaped string. */ QString escapeAsIdentifier(const QString &string) { bool bad = false; QByteArray op; QByteArray utf8; const char *name; const char *ptr, *firstOk; /* This function is copy/pasted from tp_escape_as_identified from * telepathy-glib. */ /* fast path for empty name */ if (string.isEmpty()) { return QString::fromLatin1("_"); } utf8 = string.toUtf8(); name = utf8.constData(); for (ptr = name; *ptr; ptr++) { if (isBad(*ptr, ptr == name)) { bad = true; break; } } /* fast path if it's clean */ if (!bad) { return string; } /* If strictly less than ptr, firstOk is the first uncopied safe character. */ firstOk = name; for (ptr = name; *ptr; ptr++) { if (isBad(*ptr, ptr == name)) { char buf[4] = { 0, }; /* copy preceding safe characters if any */ if (firstOk < ptr) { op.append(firstOk, ptr - firstOk); } /* escape the unsafe character */ qsnprintf(buf, sizeof (buf), "_%02x", (unsigned char)(*ptr)); op.append(buf); /* restart after it */ firstOk = ptr + 1; } } /* copy trailing safe characters if any */ if (firstOk < ptr) { op.append(firstOk, ptr - firstOk); } return QString::fromLatin1(op.constData()); } bool checkValidProtocolName(const QString &protocolName) { if (protocolName.isEmpty()) { return false; } if (!protocolName[0].isLetter()) { return false; } int length = protocolName.length(); if (length <= 1) { return true; } QChar ch; for (int i = 1; i < length; ++i) { ch = protocolName[i]; if (!ch.isLetterOrNumber() && ch != QLatin1Char('-')) { return false; } } return true; } QVariant::Type variantTypeFromDBusSignature(const QString &signature) { QVariant::Type type; if (signature == QLatin1String("b")) { type = QVariant::Bool; } else if (signature == QLatin1String("n") || signature == QLatin1String("i")) { type = QVariant::Int; } else if (signature == QLatin1String("q") || signature == QLatin1String("u")) { type = QVariant::UInt; } else if (signature == QLatin1String("x")) { type = QVariant::LongLong; } else if (signature == QLatin1String("t")) { type = QVariant::ULongLong; } else if (signature == QLatin1String("d")) { type = QVariant::Double; } else if (signature == QLatin1String("as")) { type = QVariant::StringList; } else if (signature == QLatin1String("s") || signature == QLatin1String("o")) { type = QVariant::String; } else { type = QVariant::Invalid; } return type; } QVariant parseValueWithDBusSignature(const QString &value, const QString &dbusSignature) { QVariant::Type type = variantTypeFromDBusSignature(dbusSignature); if (type == QVariant::Invalid) { return QVariant(type); } switch (type) { case QVariant::Bool: { if (value.toLower() == QLatin1String("true") || value == QLatin1String("1")) { return QVariant(true); } else { return QVariant(false); } break; } case QVariant::Int: return QVariant(value.toInt()); case QVariant::UInt: return QVariant(value.toUInt()); case QVariant::LongLong: return QVariant(value.toLongLong()); case QVariant::ULongLong: return QVariant(value.toULongLong()); case QVariant::Double: return QVariant(value.toDouble()); case QVariant::StringList: { QStringList list; QByteArray rawValue = value.toAscii(); if (KeyFile::unescapeStringList(rawValue, 0, rawValue.size(), list)) { return QVariant(list); } else { return QVariant(QVariant::Invalid); } } default: break; } return QVariant(value); } } // Tp telepathy-qt-0.9.3/TelepathyQt/ChannelInterfaceChatStateInterface0000644000175200001440000000043112000056607027414 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelInterfaceChatStateInterface_HEADER_GUARD_ #define _TelepathyQt_ChannelInterfaceChatStateInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/CallStreamInterface0000644000175200001440000000037712000056607024462 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_CallStreamInterface_HEADER_GUARD_ #define _TelepathyQt_CallStreamInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/call-content-media-description.cpp0000644000175200001440000000215512000056607027350 0ustar00collabora-develusers00000000000000/* * This file is part of TelepathyQt4 * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/cli-call-content-media-description-body.hpp" #include "TelepathyQt/_gen/cli-call-content-media-description.moc.hpp" telepathy-qt-0.9.3/TelepathyQt/ChannelTypeContactSearchInterface0000644000175200001440000000042712000056607027303 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelTypeContactSearchInterface_HEADER_GUARD_ #define _TelepathyQt_ChannelTypeContactSearchInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/tube-channel.cpp0000644000175200001440000001767112000056607023745 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010-2011 Collabora Ltd. * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/tube-channel.moc.hpp" #include "TelepathyQt/debug-internal.h" #include namespace Tp { struct TP_QT_NO_EXPORT TubeChannel::Private { Private(TubeChannel *parent); static void introspectTube(TubeChannel::Private *self); void extractTubeProperties(const QVariantMap &props); // Public object TubeChannel *parent; ReadinessHelper *readinessHelper; // Introspection TubeChannelState state; QVariantMap parameters; }; TubeChannel::Private::Private(TubeChannel *parent) : parent(parent), readinessHelper(parent->readinessHelper()), state((TubeChannelState) -1) { ReadinessHelper::Introspectables introspectables; ReadinessHelper::Introspectable introspectableTube( QSet() << 0, // makesSenseForStatuses Features() << Channel::FeatureCore, // dependsOnFeatures (core) QStringList() << TP_QT_IFACE_CHANNEL_INTERFACE_TUBE, // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &TubeChannel::Private::introspectTube, this); introspectables[TubeChannel::FeatureCore] = introspectableTube; readinessHelper->addIntrospectables(introspectables); } void TubeChannel::Private::introspectTube(TubeChannel::Private *self) { TubeChannel *parent = self->parent; debug() << "Introspecting tube properties"; Client::ChannelInterfaceTubeInterface *tubeInterface = parent->interface(); parent->connect(tubeInterface, SIGNAL(TubeChannelStateChanged(uint)), SLOT(onTubeChannelStateChanged(uint))); PendingVariantMap *pvm = tubeInterface->requestAllProperties(); parent->connect(pvm, SIGNAL(finished(Tp::PendingOperation *)), SLOT(gotTubeProperties(Tp::PendingOperation *))); } void TubeChannel::Private::extractTubeProperties(const QVariantMap &props) { state = (Tp::TubeChannelState) qdbus_cast(props[QLatin1String("State")]); parameters = qdbus_cast(props[QLatin1String("Parameters")]); } /** * \class TubeChannel * \ingroup clientchannel * \headerfile TelepathyQt/tube-channel.h * * \brief The TubeChannel class is a base class for all tube types. * * A tube is a mechanism for arbitrary data transfer between two or more IM users, * used to allow applications on the users' systems to communicate without having * to establish network connections themselves. * * Note that TubeChannel should never be instantiated directly, instead one of its * subclasses (e.g. IncomingStreamTubeChannel or OutgoingStreamTubeChannel) should be used. * * See \ref async_model, \ref shared_ptr */ /** * Feature representing the core that needs to become ready to make the * TubeChannel object usable. * * Note that this feature must be enabled in order to use most * TubeChannel methods. * See specific methods documentation for more details. */ const Feature TubeChannel::FeatureCore = Feature(QLatin1String(TubeChannel::staticMetaObject.className()), 0); /** * Create a new TubeChannel channel. * * \param connection Connection owning this channel, and specifying the * service. * \param objectPath The channel object path. * \param immutableProperties The channel immutable properties. * \return A TubeChannelPtr object pointing to the newly created * TubeChannel object. */ TubeChannelPtr TubeChannel::create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) { return TubeChannelPtr(new TubeChannel(connection, objectPath, immutableProperties)); } /** * Construct a new TubeChannel object. * * \param connection Connection owning this channel, and specifying the * service. * \param objectPath The channel object path. * \param immutableProperties The channel immutable properties. * \param coreFeature The core feature of the channel type, if any. The corresponding introspectable should * depend on TubeChannel::FeatureCore. */ TubeChannel::TubeChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature) : Channel(connection, objectPath, immutableProperties, coreFeature), mPriv(new Private(this)) { } /** * Class destructor. */ TubeChannel::~TubeChannel() { delete mPriv; } /** * Return the parameters associated with this tube, if any. * * The parameters are populated when an outgoing tube is offered, but they are most useful in the * receiving end, where the parameters passed to the offer can be extracted for the tube's entire * lifetime to bootstrap legacy protocols. All parameters are passed unchanged. * * This method requires TubeChannel::FeatureCore to be ready. * * \return The parameters as QVariantMap. */ QVariantMap TubeChannel::parameters() const { if (!isReady(FeatureCore)) { warning() << "TubeChannel::parameters() used with FeatureCore not ready"; return QVariantMap(); } return mPriv->parameters; } /** * Return the state of this tube. * * Change notification is via the stateChanged() signal. * * This method requires TubeChannel::FeatureCore to be ready. * * \return The state as #TubeChannelState. * \sa stateChanged() */ TubeChannelState TubeChannel::state() const { if (!isReady(FeatureCore)) { warning() << "TubeChannel::state() used with FeatureCore not ready"; return TubeChannelStateNotOffered; } return mPriv->state; } void TubeChannel::setParameters(const QVariantMap ¶meters) { mPriv->parameters = parameters; } void TubeChannel::onTubeChannelStateChanged(uint newState) { if (newState == mPriv->state) { return; } uint oldState = mPriv->state; debug() << "Tube state changed to" << newState; mPriv->state = (Tp::TubeChannelState) newState; /* only emit stateChanged if we already received the state from initial introspection */ if (oldState != (uint) -1) { emit stateChanged((Tp::TubeChannelState) newState); } } void TubeChannel::gotTubeProperties(PendingOperation *op) { if (!op->isError()) { PendingVariantMap *pvm = qobject_cast(op); mPriv->extractTubeProperties(pvm->result()); debug() << "Got reply to Properties::GetAll(TubeChannel)"; mPriv->readinessHelper->setIntrospectCompleted(TubeChannel::FeatureCore, true); } else { warning().nospace() << "Properties::GetAll(TubeChannel) failed " "with " << op->errorName() << ": " << op->errorMessage(); mPriv->readinessHelper->setIntrospectCompleted(TubeChannel::FeatureCore, false, op->errorName(), op->errorMessage()); } } /** * \fn void TubeChannel::stateChanged(Tp::TubeChannelState state) * * Emitted when the value of state() changes. * * \sa state The new state of this tube. */ } // Tp telepathy-qt-0.9.3/TelepathyQt/CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface0000644000175200001440000000055412000056607035402 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface_HEADER_GUARD_ #define _TelepathyQt_CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/StatelessDBusProxy0000644000175200001440000000037412000056607024376 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_StatelessDBusProxy_HEADER_GUARD_ #define _TelepathyQt_StatelessDBusProxy_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/connection.h0000644000175200001440000001775312000056607023205 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2010 Collabora Ltd. * @copyright Copyright (C) 2008-2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_connection_h_HEADER_GUARD_ #define _TelepathyQt_connection_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace Tp { class Channel; class ConnectionCapabilities; class ConnectionLowlevel; class Contact; class ContactManager; class PendingChannel; class PendingContactAttributes; class PendingHandles; class PendingOperation; class PendingReady; class TP_QT_EXPORT Connection : public StatefulDBusProxy, public OptionalInterfaceFactory { Q_OBJECT Q_DISABLE_COPY(Connection) public: static const Feature FeatureCore; static const Feature FeatureSelfContact; static const Feature FeatureSimplePresence; static const Feature FeatureRoster; static const Feature FeatureRosterGroups; static const Feature FeatureAccountBalance; // TODO unit tests for this static const Feature FeatureConnected; static ConnectionPtr create(const QString &busName, const QString &objectPath, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory); static ConnectionPtr create(const QDBusConnection &bus, const QString &busName, const QString &objectPath, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory); virtual ~Connection(); ChannelFactoryConstPtr channelFactory() const; ContactFactoryConstPtr contactFactory() const; QString cmName() const; QString protocolName() const; ConnectionStatus status() const; ConnectionStatusReason statusReason() const; class ErrorDetails { public: ErrorDetails(); ErrorDetails(const QVariantMap &details); ErrorDetails(const ErrorDetails &other); ~ErrorDetails(); ErrorDetails &operator=(const ErrorDetails &other); bool isValid() const { return mPriv.constData() != 0; } bool hasDebugMessage() const { return allDetails().contains(QLatin1String("debug-message")); } QString debugMessage() const { return qdbus_cast(allDetails().value(QLatin1String("debug-message"))); } bool hasServerMessage() const { return allDetails().contains(QLatin1String("server-message")); } QString serverMessage() const { return qdbus_cast(allDetails().value(QLatin1String("server-message"))); } bool hasUserRequested() const { return allDetails().contains(QLatin1String("user-requested")); } bool userRequested() const { return qdbus_cast(allDetails().value(QLatin1String("user-requested"))); } bool hasExpectedHostname() const { return allDetails().contains(QLatin1String("expected-hostname")); } QString expectedHostname() const { return qdbus_cast(allDetails().value(QLatin1String("expected-hostname"))); } bool hasCertificateHostname() const { return allDetails().contains(QLatin1String("certificate-hostname")); } QString certificateHostname() const { return qdbus_cast(allDetails().value(QLatin1String("certificate-hostname"))); } QVariantMap allDetails() const; private: friend class Connection; struct Private; friend struct Private; QSharedDataPointer mPriv; }; const ErrorDetails &errorDetails() const; uint selfHandle() const; ContactPtr selfContact() const; CurrencyAmount accountBalance() const; ConnectionCapabilities capabilities() const; ContactManagerPtr contactManager() const; #if defined(BUILDING_TP_QT) || defined(TP_QT_ENABLE_LOWLEVEL_API) ConnectionLowlevelPtr lowlevel(); ConnectionLowlevelConstPtr lowlevel() const; #endif Q_SIGNALS: void statusChanged(Tp::ConnectionStatus newStatus); void selfHandleChanged(uint newHandle); // FIXME: might not need this when Renaming is fixed and mapped to Contacts void selfContactChanged(); void accountBalanceChanged(const Tp::CurrencyAmount &accountBalance); protected: Connection(const QDBusConnection &bus, const QString &busName, const QString &objectPath, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory, const Feature &coreFeature); Client::ConnectionInterface *baseInterface() const; private Q_SLOTS: TP_QT_NO_EXPORT void onStatusReady(uint status); TP_QT_NO_EXPORT void onStatusChanged(uint status, uint reason); TP_QT_NO_EXPORT void onConnectionError(const QString &error, const QVariantMap &details); TP_QT_NO_EXPORT void gotMainProperties(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void gotStatus(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void gotInterfaces(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void gotSelfHandle(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void gotCapabilities(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void gotContactAttributeInterfaces(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void gotSimpleStatuses(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void gotSelfContact(Tp::PendingOperation *op); TP_QT_NO_EXPORT void onIntrospectRosterFinished(Tp::PendingOperation *op); TP_QT_NO_EXPORT void onIntrospectRosterGroupsFinished(Tp::PendingOperation *op); TP_QT_NO_EXPORT void doReleaseSweep(uint handleType); TP_QT_NO_EXPORT void onSelfHandleChanged(uint); TP_QT_NO_EXPORT void gotBalance(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void onBalanceChanged(const Tp::CurrencyAmount &); private: class PendingConnect; friend class ConnectionLowlevel; friend class PendingChannel; friend class PendingConnect; friend class PendingContactAttributes; friend class PendingContacts; friend class PendingHandles; friend class ReferencedHandles; TP_QT_NO_EXPORT void refHandle(HandleType handleType, uint handle); TP_QT_NO_EXPORT void unrefHandle(HandleType handleType, uint handle); TP_QT_NO_EXPORT void handleRequestLanded(HandleType handleType); struct Private; friend struct Private; Private *mPriv; }; } // Tp Q_DECLARE_METATYPE(Tp::Connection::ErrorDetails); #endif telepathy-qt-0.9.3/TelepathyQt/OptionalInterfaceFactory0000644000175200001440000000043012000056607025536 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_OptionalInterfaceFactory_HEADER_GUARD_ #define _TelepathyQt_OptionalInterfaceFactory_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/test-backdoors.h0000644000175200001440000000370412000056607023761 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2009 Collabora Ltd. * @copyright Copyright (C) 2008-2009 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_test_backdoors_h_HEADER_GUARD_ #define _TelepathyQt_test_backdoors_h_HEADER_GUARD_ #ifdef IN_TP_QT_HEADER #error "This file is an internal header and should never be included by a public one" #endif #include #include #include #include #ifndef DOXYGEN_SHOULD_SKIP_THIS namespace Tp { class DBusProxy; // Exported so the tests can use it even if they link dynamically // The header is not installed though, so this should be considered private API struct TP_QT_EXPORT TestBackdoors { static void invalidateProxy(DBusProxy *proxy, const QString &reason, const QString &message); static ConnectionCapabilities createConnectionCapabilities( const RequestableChannelClassSpecList &rccSpecs); static ContactCapabilities createContactCapabilities( const RequestableChannelClassSpecList &rccSpecs, bool specificToContact); }; } // Tp #endif /* DOXYGEN_SHOULD_SKIP_THIS */ #endif telepathy-qt-0.9.3/TelepathyQt/client-registrar-internal.h0000644000175200001440000002724212000056607026130 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009-2010 Collabora Ltd. * @copyright Copyright (C) 2009-2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_client_registrar_internal_h_HEADER_GUARD_ #define _TelepathyQt_client_registrar_internal_h_HEADER_GUARD_ #include #include #include #include #include #include #include "TelepathyQt/fake-handler-manager-internal.h" namespace Tp { class PendingOperation; class TP_QT_NO_EXPORT ClientAdaptor : public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.freedesktop.Telepathy.Client") Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" "") Q_PROPERTY(QStringList Interfaces READ Interfaces) public: ClientAdaptor(ClientRegistrar *registrar, const QStringList &interfaces, QObject *parent); virtual ~ClientAdaptor(); inline const ClientRegistrar *registrar() const { return mRegistrar; } public: // Properties inline QStringList Interfaces() const { return mInterfaces; } private: ClientRegistrar *mRegistrar; QStringList mInterfaces; }; class TP_QT_NO_EXPORT ClientObserverAdaptor : public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.freedesktop.Telepathy.Client.Observer") Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" "") Q_PROPERTY(Tp::ChannelClassList ObserverChannelFilter READ ObserverChannelFilter) Q_PROPERTY(bool Recover READ Recover) public: ClientObserverAdaptor(ClientRegistrar *registrar, AbstractClientObserver *client, QObject *parent); virtual ~ClientObserverAdaptor(); inline const ClientRegistrar *registrar() const { return mRegistrar; } public: // Properties inline Tp::ChannelClassList ObserverChannelFilter() const { return mClient->observerFilter().bareClasses(); } inline bool Recover() const { return mClient->shouldRecover(); } public Q_SLOTS: // Methods void ObserveChannels(const QDBusObjectPath &account, const QDBusObjectPath &connection, const Tp::ChannelDetailsList &channels, const QDBusObjectPath &dispatchOperation, const Tp::ObjectPathList &requestsSatisfied, const QVariantMap &observerInfo, const QDBusMessage &message); private Q_SLOTS: void onReadyOpFinished(Tp::PendingOperation *); private: struct InvocationData : RefCounted { InvocationData() : readyOp(0) {} PendingOperation *readyOp; QString error, message; MethodInvocationContextPtr<> ctx; AccountPtr acc; ConnectionPtr conn; QList chans; ChannelDispatchOperationPtr dispatchOp; QList chanReqs; AbstractClientObserver::ObserverInfo observerInfo; }; QLinkedList > mInvocations; ClientRegistrar *mRegistrar; QDBusConnection mBus; AbstractClientObserver *mClient; }; class TP_QT_NO_EXPORT ClientApproverAdaptor : public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.freedesktop.Telepathy.Client.Approver") Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" "") Q_PROPERTY(Tp::ChannelClassList ApproverChannelFilter READ ApproverChannelFilter) public: ClientApproverAdaptor(ClientRegistrar *registrar, AbstractClientApprover *client, QObject *parent); virtual ~ClientApproverAdaptor(); inline const ClientRegistrar *registrar() const { return mRegistrar; } public: // Properties inline Tp::ChannelClassList ApproverChannelFilter() const { return mClient->approverFilter().bareClasses(); } public Q_SLOTS: // Methods void AddDispatchOperation(const Tp::ChannelDetailsList &channels, const QDBusObjectPath &dispatchOperation, const QVariantMap &properties, const QDBusMessage &message); private Q_SLOTS: void onReadyOpFinished(Tp::PendingOperation *); private: struct InvocationData : RefCounted { InvocationData() : readyOp(0) {} PendingOperation *readyOp; QString error, message; MethodInvocationContextPtr<> ctx; QList chans; ChannelDispatchOperationPtr dispatchOp; }; QLinkedList > mInvocations; private: ClientRegistrar *mRegistrar; QDBusConnection mBus; AbstractClientApprover *mClient; }; class TP_QT_NO_EXPORT ClientHandlerAdaptor : public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.freedesktop.Telepathy.Client.Handler") Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" "") Q_PROPERTY(Tp::ChannelClassList HandlerChannelFilter READ HandlerChannelFilter) Q_PROPERTY(bool BypassApproval READ BypassApproval) Q_PROPERTY(QStringList Capabilities READ Capabilities) Q_PROPERTY(Tp::ObjectPathList HandledChannels READ HandledChannels) public: ClientHandlerAdaptor(ClientRegistrar *registrar, AbstractClientHandler *client, QObject *parent); virtual ~ClientHandlerAdaptor(); inline const ClientRegistrar *registrar() const { return mRegistrar; } public: // Properties inline Tp::ChannelClassList HandlerChannelFilter() const { return mClient->handlerFilter().bareClasses(); } inline bool BypassApproval() const { return mClient->bypassApproval(); } inline QStringList Capabilities() const { return mClient->handlerCapabilities().allTokens(); } inline Tp::ObjectPathList HandledChannels() const { return FakeHandlerManager::instance()->handledChannels(mBus); } public Q_SLOTS: // Methods void HandleChannels(const QDBusObjectPath &account, const QDBusObjectPath &connection, const Tp::ChannelDetailsList &channels, const Tp::ObjectPathList &requestsSatisfied, qulonglong userActionTime, const QVariantMap &handlerInfo, const QDBusMessage &message); private Q_SLOTS: void onReadyOpFinished(Tp::PendingOperation *); private: struct InvocationData : RefCounted { InvocationData() : readyOp(0) {} PendingOperation *readyOp; QString error, message; MethodInvocationContextPtr<> ctx; AccountPtr acc; ConnectionPtr conn; QList chans; QList chanReqs; QDateTime time; AbstractClientHandler::HandlerInfo handlerInfo; }; QLinkedList > mInvocations; private: static void onContextFinished(const MethodInvocationContextPtr<> &context, const QList &channels, ClientHandlerAdaptor *self); ClientRegistrar *mRegistrar; QDBusConnection mBus; AbstractClientHandler *mClient; static QHash, QList > mAdaptorsForConnection; }; class TP_QT_NO_EXPORT ClientHandlerRequestsAdaptor : public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.freedesktop.Telepathy.Client.Interface.Requests") Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" "") public: ClientHandlerRequestsAdaptor(ClientRegistrar *registrar, AbstractClientHandler *client, QObject *parent); virtual ~ClientHandlerRequestsAdaptor(); inline const ClientRegistrar *registrar() const { return mRegistrar; } public Q_SLOTS: // Methods void AddRequest(const QDBusObjectPath &request, const QVariantMap &requestProperties, const QDBusMessage &message); void RemoveRequest(const QDBusObjectPath &request, const QString &errorName, const QString &errorMessage, const QDBusMessage &message); private: ClientRegistrar *mRegistrar; QDBusConnection mBus; AbstractClientHandler *mClient; }; } // Tp Q_DECLARE_METATYPE(Tp::ClientAdaptor*) Q_DECLARE_METATYPE(Tp::ClientApproverAdaptor*) Q_DECLARE_METATYPE(Tp::ClientHandlerAdaptor*) Q_DECLARE_METATYPE(Tp::ClientHandlerRequestsAdaptor*) Q_DECLARE_METATYPE(Tp::ClientObserverAdaptor*) #endif telepathy-qt-0.9.3/TelepathyQt/BaseProtocolAvatarsInterface0000644000175200001440000000042312000056607026341 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_BaseProtocolAvatarsInterface_HEADER_GUARD_ #define _TelepathyQt_BaseProtocolAvatarsInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/pending-channel-request.cpp0000644000175200001440000002353712000056607026116 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008 Collabora Ltd. * @copyright Copyright (C) 2008 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/pending-channel-request-internal.h" #include "TelepathyQt/_gen/pending-channel-request.moc.hpp" #include "TelepathyQt/_gen/pending-channel-request-internal.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include #include #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT PendingChannelRequest::Private { Private(const QDBusConnection &dbusConnection) : dbusConnection(dbusConnection), cancelOperation(0) { } QDBusConnection dbusConnection; ChannelRequestPtr channelRequest; PendingChannelRequestCancelOperation *cancelOperation; }; /** * \class PendingChannelRequest * \ingroup clientchannelrequest * \headerfile TelepathyQt/pending-channel-request.h * * \brief The PendingChannelRequest class represents the parameters of and * the reply to an asynchronous ChannelRequest request. * * Instances of this class cannot be constructed directly; the only way to get * one is trough Account. * * See \ref async_model */ /** * Construct a new PendingChannelRequest object. * * \param account Account to use. * \param requestedProperties A dictionary containing the desirable properties. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \param preferredHandler Either the well-known bus name (starting with * org.freedesktop.Telepathy.Client.) of the preferred * handler for this channel, or an empty string to * indicate that any handler would be acceptable. * \param create Whether createChannel or ensureChannel should be called. * \param account The account the request was made through. */ PendingChannelRequest::PendingChannelRequest(const AccountPtr &account, const QVariantMap &requestedProperties, const QDateTime &userActionTime, const QString &preferredHandler, bool create, const ChannelRequestHints &hints) : PendingOperation(account), mPriv(new Private(account->dbusConnection())) { QString channelDispatcherObjectPath = QString(QLatin1String("/%1")).arg(TP_QT_IFACE_CHANNEL_DISPATCHER); channelDispatcherObjectPath.replace(QLatin1String("."), QLatin1String("/")); Client::ChannelDispatcherInterface *channelDispatcherInterface = account->dispatcherInterface(); QDBusPendingCallWatcher *watcher = 0; if (create) { if (hints.isValid()) { if (account->supportsRequestHints()) { watcher = new QDBusPendingCallWatcher( channelDispatcherInterface->CreateChannelWithHints( QDBusObjectPath(account->objectPath()), requestedProperties, userActionTime.isNull() ? 0 : userActionTime.toTime_t(), preferredHandler, hints.allHints()), this); } else { warning() << "Hints passed to channel request won't have an effect" << "because the Channel Dispatcher service in use is too old"; } } if (!watcher) { watcher = new QDBusPendingCallWatcher( channelDispatcherInterface->CreateChannel( QDBusObjectPath(account->objectPath()), requestedProperties, userActionTime.isNull() ? 0 : userActionTime.toTime_t(), preferredHandler), this); } } else { if (hints.isValid()) { if (account->supportsRequestHints()) { watcher = new QDBusPendingCallWatcher( channelDispatcherInterface->EnsureChannelWithHints( QDBusObjectPath(account->objectPath()), requestedProperties, userActionTime.isNull() ? 0 : userActionTime.toTime_t(), preferredHandler, hints.allHints()), this); } else { warning() << "Hints passed to channel request won't have an effect" << "because the Channel Dispatcher service in use is too old"; } } if (!watcher) { watcher = new QDBusPendingCallWatcher( channelDispatcherInterface->EnsureChannel( QDBusObjectPath(account->objectPath()), requestedProperties, userActionTime.isNull() ? 0 : userActionTime.toTime_t(), preferredHandler), this); } } // TODO: This is a Qt bug fixed upstream, should be in the next Qt release. // We should not need to check watcher->isFinished() here, remove the // check when we depend on the fixed Qt version. if (watcher->isFinished()) { onWatcherFinished(watcher); } else { connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(onWatcherFinished(QDBusPendingCallWatcher*))); } } /** * Construct a new PendingChannelRequest object that always fails. * * \param account Account to use. * \param errorName The name of a D-Bus error. * \param errorMessage The error message. */ PendingChannelRequest::PendingChannelRequest(const AccountPtr &account, const QString &errorName, const QString &errorMessage) : PendingOperation(ConnectionPtr()), mPriv(new Private(account->dbusConnection())) { setFinishedWithError(errorName, errorMessage); } /** * Class destructor. */ PendingChannelRequest::~PendingChannelRequest() { delete mPriv; } /** * Return the account through which the request was made. * * \return A pointer to the Account object. */ AccountPtr PendingChannelRequest::account() const { return AccountPtr(qobject_cast((Account*) object().data())); } ChannelRequestPtr PendingChannelRequest::channelRequest() const { return mPriv->channelRequest; } PendingOperation *PendingChannelRequest::cancel() { if (isFinished()) { // CR has already succeeded or failed, so let's just fail here return new PendingFailure(TP_QT_DBUS_ERROR_UNKNOWN_METHOD, QLatin1String("ChannnelRequest already finished"), object()); } if (!mPriv->cancelOperation) { mPriv->cancelOperation = new PendingChannelRequestCancelOperation(); connect(mPriv->cancelOperation, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onCancelOperationFinished(Tp::PendingOperation*))); if (mPriv->channelRequest) { mPriv->cancelOperation->go(mPriv->channelRequest); } } return mPriv->cancelOperation; } void PendingChannelRequest::onWatcherFinished(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (!reply.isError()) { QDBusObjectPath objectPath = reply.argumentAt<0>(); debug() << "Got reply to ChannelDispatcher.Ensure/CreateChannel " "- object path:" << objectPath.path(); if (!account().isNull()) { mPriv->channelRequest = ChannelRequest::create(account(), objectPath.path(), QVariantMap()); } if (mPriv->cancelOperation) { mPriv->cancelOperation->go(mPriv->channelRequest); } else { emit channelRequestCreated(mPriv->channelRequest); connect(mPriv->channelRequest.data(), SIGNAL(failed(QString,QString)), SLOT(setFinishedWithError(QString,QString))); connect(mPriv->channelRequest.data(), SIGNAL(succeeded(Tp::ChannelPtr)), SLOT(setFinished())); connect(mPriv->channelRequest->proceed(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onProceedOperationFinished(Tp::PendingOperation*))); } } else { debug().nospace() << "Ensure/CreateChannel failed:" << reply.error().name() << ": " << reply.error().message(); setFinishedWithError(reply.error()); } watcher->deleteLater(); } void PendingChannelRequest::onProceedOperationFinished(PendingOperation *op) { if (op->isError()) { setFinishedWithError(op->errorName(), op->errorMessage()); } } void PendingChannelRequest::onCancelOperationFinished(PendingOperation *op) { mPriv->cancelOperation = 0; if (!isFinished()) { setFinishedWithError(TP_QT_ERROR_CANCELLED, QLatin1String("ChannelRequest cancelled")); } } } // Tp telepathy-qt-0.9.3/TelepathyQt/base-connection-manager.cpp0000644000175200001440000003256312000056607026054 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/base-connection-manager-internal.h" #include "TelepathyQt/_gen/base-connection-manager.moc.hpp" #include "TelepathyQt/_gen/base-connection-manager-internal.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT BaseConnectionManager::Private { Private(BaseConnectionManager *parent, const QDBusConnection &dbusConnection, const QString &name) : parent(parent), name(name), adaptee(new BaseConnectionManager::Adaptee(dbusConnection, parent)) { } BaseConnectionManager *parent; QString name; BaseConnectionManager::Adaptee *adaptee; QHash protocols; QSet connections; }; BaseConnectionManager::Adaptee::Adaptee(const QDBusConnection &dbusConnection, BaseConnectionManager *cm) : QObject(cm), mCM(cm) { mAdaptor = new Service::ConnectionManagerAdaptor(dbusConnection, this, cm->dbusObject()); } BaseConnectionManager::Adaptee::~Adaptee() { } QStringList BaseConnectionManager::Adaptee::interfaces() const { // No interfaces suitable for listing in this property are currently defined; // it's provided as a hook for possible future functionality. return QStringList(); } ProtocolPropertiesMap BaseConnectionManager::Adaptee::protocols() const { ProtocolPropertiesMap ret; foreach (const BaseProtocolPtr &protocol, mCM->protocols()) { ret.insert(protocol->name(), protocol->immutableProperties()); } return ret; } void BaseConnectionManager::Adaptee::getParameters(const QString &protocolName, const Tp::Service::ConnectionManagerAdaptor::GetParametersContextPtr &context) { if (!checkValidProtocolName(protocolName)) { context->setFinishedWithError(TP_QT_ERROR_INVALID_ARGUMENT, protocolName + QLatin1String(" is not a valid protocol name")); return; } if (!mCM->hasProtocol(protocolName)) { context->setFinishedWithError(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("unknown protocol ") + protocolName); return; } BaseProtocolPtr protocol = mCM->protocol(protocolName); ParamSpecList ret; foreach (const ProtocolParameter ¶m, protocol->parameters()) { ParamSpec paramSpec = param.bareParameter(); if (!(paramSpec.flags & ConnMgrParamFlagHasDefault)) { // we cannot pass QVariant::Invalid over D-Bus, lets build a dummy value // that should be ignored according to the spec paramSpec.defaultValue = QDBusVariant( parseValueWithDBusSignature(QString(), paramSpec.signature)); } ret << paramSpec; } context->setFinished(ret); } void BaseConnectionManager::Adaptee::listProtocols( const Tp::Service::ConnectionManagerAdaptor::ListProtocolsContextPtr &context) { QStringList ret; QList protocols = mCM->protocols(); foreach (const BaseProtocolPtr &protocol, protocols) { ret << protocol->name(); } context->setFinished(ret); } void BaseConnectionManager::Adaptee::requestConnection(const QString &protocolName, const QVariantMap ¶meters, const Tp::Service::ConnectionManagerAdaptor::RequestConnectionContextPtr &context) { if (!checkValidProtocolName(protocolName)) { context->setFinishedWithError(TP_QT_ERROR_INVALID_ARGUMENT, protocolName + QLatin1String(" is not a valid protocol name")); return; } if (!mCM->hasProtocol(protocolName)) { context->setFinishedWithError(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("unknown protocol ") + protocolName); return; } BaseProtocolPtr protocol = mCM->protocol(protocolName); DBusError error; BaseConnectionPtr connection; connection = protocol->createConnection(parameters, &error); if (!connection) { context->setFinishedWithError(error.name(), error.message()); return; } if (!connection->registerObject(&error)) { context->setFinishedWithError(error.name(), error.message()); return; } mCM->addConnection(connection); emit newConnection(connection->busName(), QDBusObjectPath(connection->objectPath()), protocol->name()); context->setFinished(connection->busName(), QDBusObjectPath(connection->objectPath())); } /** * \class BaseConnectionManager * \ingroup servicecm * \headerfile TelepathyQt/base-connection-manager.h * * \brief Base class for connection manager implementations. */ /** * Constructs a new BaseConnectionManager object that implements a connection manager * on the given \a dbusConnection and has the given \a name. * * \param dbusConnection The QDBusConnection to use. * \param name The name of the connection manager. */ BaseConnectionManager::BaseConnectionManager(const QDBusConnection &dbusConnection, const QString &name) : DBusService(dbusConnection), mPriv(new Private(this, dbusConnection, name)) { } /** * Class destructor. */ BaseConnectionManager::~BaseConnectionManager() { delete mPriv; } /** * Return the connection manager's name, as given on the constructor. * * \return The connection manager's name. */ QString BaseConnectionManager::name() const { return mPriv->name; } /** * Return the immutable properties of this connection manager object. * * Immutable properties cannot change after the object has been registered * on the bus with registerObject(). * * \return The immutable properties of this connection manager object. */ QVariantMap BaseConnectionManager::immutableProperties() const { QVariantMap ret; ret.insert(TP_QT_IFACE_CONNECTION_MANAGER + QLatin1String(".Protocols"), QVariant::fromValue(mPriv->adaptee->protocols())); return ret; } /** * Return a list of all protocols that this connection manager implements. * * This property is immutable and cannot change after the connection manager * has been registered on the bus with registerObject(). * * \return A list of all protocols that this connection manager implements. * \sa addProtocol(), hasProtocol(), protocol() */ QList BaseConnectionManager::protocols() const { return mPriv->protocols.values(); } /** * Return a pointer to the BaseProtocol instance that implements the protocol * with the given \a protocolName, or a null BaseProtocolPtr if no such * protocol has been added to the connection manager. * * \param protocolName The name of the protocol in interest. * \return The BaseProtocol instance that implements the protocol with * the given \a protocolName. * \sa hasProtocol(), protocols(), addProtocol() */ BaseProtocolPtr BaseConnectionManager::protocol(const QString &protocolName) const { return mPriv->protocols.value(protocolName); } /** * Return whether a protocol with the given \a protocolName has been * added to the connection manager. * * \param protocolName The name of the protocol in interest. * \return \c true if a protocol with the given \a protocolName has been * added to the connection manager, or \c false otherwise. * \sa addProtocol(), protocol(), protocols() */ bool BaseConnectionManager::hasProtocol(const QString &protocolName) const { return mPriv->protocols.contains(protocolName); } /** * Add a new \a protocol to the list of protocols that this connection * manager implements. * * Note that you cannot add new protocols after the connection manager * has been registered on the bus with registerObject(). In addition, * you cannot add two protocols with the same name. If any of these * conditions is not met, this function will return false and print * a suitable warning. * * \param protocol The protocol to add. * \return \c true on success or \c false otherwise. */ bool BaseConnectionManager::addProtocol(const BaseProtocolPtr &protocol) { if (isRegistered()) { warning() << "Unable to add protocol" << protocol->name() << "- CM already registered"; return false; } if (protocol->dbusConnection().name() != dbusConnection().name()) { warning() << "Unable to add protocol" << protocol->name() << "- protocol must have the same D-Bus connection as the owning CM"; return false; } if (protocol->isRegistered()) { warning() << "Unable to add protocol" << protocol->name() << "- protocol already registered"; return false; } if (mPriv->protocols.contains(protocol->name())) { warning() << "Unable to add protocol" << protocol->name() << "- another protocol with same name already added"; return false; } debug() << "Protocol" << protocol->name() << "added to CM"; mPriv->protocols.insert(protocol->name(), protocol); return true; } /** * Register this connection manager on the bus. * * A connection manager can only be registered once, and it * should be registered only after all the protocols it implements * have been added with addProtocol(). * * If \a error is passed, any D-Bus error that may occur will * be stored there. * * \param error A pointer to an empty DBusError where any * possible D-Bus error will be stored. * \return \c true on success and \c false if there was an error * or this connection manager is already registered. * \sa isRegistered() */ bool BaseConnectionManager::registerObject(DBusError *error) { if (isRegistered()) { return true; } QString busName = TP_QT_CONNECTION_MANAGER_BUS_NAME_BASE; busName.append(mPriv->name); QString objectPath = TP_QT_CONNECTION_MANAGER_OBJECT_PATH_BASE; objectPath.append(mPriv->name); DBusError _error; bool ret = registerObject(busName, objectPath, &_error); if (!ret && error) { error->set(_error.name(), _error.message()); } return ret; } /** * Reimplemented from DBusService. */ bool BaseConnectionManager::registerObject(const QString &busName, const QString &objectPath, DBusError *error) { if (isRegistered()) { return true; } // register protocols foreach (const BaseProtocolPtr &protocol, protocols()) { QString escapedProtocolName = protocol->name(); escapedProtocolName.replace(QLatin1Char('-'), QLatin1Char('_')); QString protoObjectPath = QString( QLatin1String("%1/%2")).arg(objectPath).arg(escapedProtocolName); debug() << "Registering protocol" << protocol->name() << "at path" << protoObjectPath << "for CM" << objectPath << "at bus name" << busName; if (!protocol->registerObject(busName, protoObjectPath, error)) { return false; } } debug() << "Registering CM" << objectPath << "at bus name" << busName; // Only call DBusService::registerObject after registering the protocols as we don't want to // advertise isRegistered if some protocol cannot be registered if (!DBusService::registerObject(busName, objectPath, error)) { return false; } return true; } /** * Return a list of all connections that have currently been made. * * \return A list of all connections that have currently been made. */ QList BaseConnectionManager::connections() const { return mPriv->connections.toList(); } void BaseConnectionManager::addConnection(const BaseConnectionPtr &connection) { Q_ASSERT(!mPriv->connections.contains(connection)); mPriv->connections.insert(connection); connect(connection.data(), SIGNAL(disconnected()), SLOT(removeConnection())); emit newConnection(connection); } void BaseConnectionManager::removeConnection() { BaseConnectionPtr connection = BaseConnectionPtr( qobject_cast(sender())); Q_ASSERT(connection); Q_ASSERT(mPriv->connections.contains(connection)); mPriv->connections.remove(connection); } /** * \fn void newConnection(const BaseConnectionPtr &connection) * * Emitted when a new connection has been requested by a client and * the connection object has been constructed. * * To handle the connection request before a connection has been created, * use BaseProtocol::setCreateConnectionCallback(). * * \param connection The newly created connection */ } telepathy-qt-0.9.3/TelepathyQt/channel-class-features.h0000644000175200001440000000253212000056607025362 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_channel_class_features_h_HEADER_GUARD_ #define _TelepathyQt_channel_class_features_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include namespace Tp { typedef QPair ChannelClassFeatures; } // Tp Q_DECLARE_METATYPE(Tp::ChannelClassFeatures); #endif telepathy-qt-0.9.3/TelepathyQt/Message0000644000175200001440000000034312000056607022167 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_Message_HEADER_GUARD_ #define _TelepathyQt_Message_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/ConnectionInterfaceAddressingInterface0000644000175200001440000000044412000056607030352 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ConnectionInterfaceAddressingInterface_HEADER_GUARD_ #define _TelepathyQt_ConnectionInterfaceAddressingInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/MediaSessionHandler0000644000175200001440000000041112000056607024460 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_MediaSessionHandler_HEADER_GUARD_ #define _TelepathyQt_MediaSessionHandler_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/feature.cpp0000644000175200001440000000404212000056607023017 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include namespace Tp { struct TP_QT_NO_EXPORT Feature::Private : public QSharedData { Private(bool critical) : critical(critical) {} bool critical; }; /** * \class Feature * \ingroup utils * \headerfile TelepathyQt/feature.h * * \brief The Feature class represents a feature that can be enabled * on demand. */ Feature::Feature() : QPair() { } Feature::Feature(const QString &className, uint id, bool critical) : QPair(className, id), mPriv(new Private(critical)) { } Feature::Feature(const Feature &other) : QPair(other.first, other.second), mPriv(other.mPriv) { } Feature::~Feature() { } Feature &Feature::operator=(const Feature &other) { *this = other; this->mPriv = other.mPriv; return *this; } bool Feature::isCritical() const { if (!isValid()) { return false; } return mPriv->critical; } /** * \class Features * \ingroup utils * \headerfile TelepathyQt/feature.h * * \brief The Features class represents a list of Feature. */ } // Tp telepathy-qt-0.9.3/TelepathyQt/types.cpp0000644000175200001440000000404412000056607022532 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008 Collabora Ltd. * @copyright Copyright (C) 2008 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include #include "TelepathyQt/_gen/types-body.hpp" #include "TelepathyQt/future-internal.h" #include "TelepathyQt/_gen/future-types-body.hpp" namespace Tp { /** * \\ingroup types * \headerfile TelepathyQt/types.h * * Register the types used by the library with the QtDBus type system. * * Call this function to register the types used before using anything else in * the library. */ void registerTypes() { qDBusRegisterMetaType(); Tp::_registerTypes(); TpFuture::_registerTypes(); } bool operator==(const SUSocketAddress& v1, const SUSocketAddress& v2) { return ((v1.address == v2.address) && (v1.port == v2.port) ); } QDBusArgument& operator<<(QDBusArgument& arg, const SUSocketAddress& val) { arg.beginStructure(); arg << val.address << val.port; arg.endStructure(); return arg; } const QDBusArgument& operator>>(const QDBusArgument& arg, SUSocketAddress& val) { arg.beginStructure(); arg >> val.address >> val.port; arg.endStructure(); return arg; } } telepathy-qt-0.9.3/TelepathyQt/ChannelTypeContactListInterface0000644000175200001440000000042312000056607027005 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelTypeContactListInterface_HEADER_GUARD_ #define _TelepathyQt_ChannelTypeContactListInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/PeerInterface0000644000175200001440000000035412000056607023321 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_PeerInterface_HEADER_GUARD_ #define _TelepathyQt_PeerInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/requestable-channel-class-spec.h0000644000175200001440000001174712000056607027020 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_requestable_channel_class_spec_h_HEADER_GUARD_ #define _TelepathyQt_requestable_channel_class_spec_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include namespace Tp { class TP_QT_EXPORT RequestableChannelClassSpec { public: RequestableChannelClassSpec(); RequestableChannelClassSpec(const RequestableChannelClass &rcc); RequestableChannelClassSpec(const RequestableChannelClassSpec &other); ~RequestableChannelClassSpec(); static RequestableChannelClassSpec textChat(); static RequestableChannelClassSpec textChatroom(); static RequestableChannelClassSpec audioCall(); static RequestableChannelClassSpec audioCallWithVideoAllowed(); static RequestableChannelClassSpec videoCall(); static RequestableChannelClassSpec videoCallWithAudioAllowed(); TP_QT_DEPRECATED static RequestableChannelClassSpec streamedMediaCall(); TP_QT_DEPRECATED static RequestableChannelClassSpec streamedMediaAudioCall(); TP_QT_DEPRECATED static RequestableChannelClassSpec streamedMediaVideoCall(); TP_QT_DEPRECATED static RequestableChannelClassSpec streamedMediaVideoCallWithAudio(); static RequestableChannelClassSpec fileTransfer(); static RequestableChannelClassSpec conferenceTextChat(); static RequestableChannelClassSpec conferenceTextChatWithInvitees(); static RequestableChannelClassSpec conferenceTextChatroom(); static RequestableChannelClassSpec conferenceTextChatroomWithInvitees(); TP_QT_DEPRECATED static RequestableChannelClassSpec conferenceStreamedMediaCall(); TP_QT_DEPRECATED static RequestableChannelClassSpec conferenceStreamedMediaCallWithInvitees(); static RequestableChannelClassSpec contactSearch(); static RequestableChannelClassSpec contactSearchWithSpecificServer(); static RequestableChannelClassSpec contactSearchWithLimit(); static RequestableChannelClassSpec contactSearchWithSpecificServerAndLimit(); static RequestableChannelClassSpec dbusTube(const QString &serviceName = QString()); static RequestableChannelClassSpec streamTube(const QString &service = QString()); bool isValid() const { return mPriv.constData() != 0; } RequestableChannelClassSpec &operator=(const RequestableChannelClassSpec &other); bool operator==(const RequestableChannelClassSpec &other) const; bool supports(const RequestableChannelClassSpec &spec) const; QString channelType() const; bool hasTargetHandleType() const; HandleType targetHandleType() const; bool hasFixedProperty(const QString &name) const; QVariant fixedProperty(const QString &name) const; QVariantMap fixedProperties() const; bool allowsProperty(const QString &name) const; QStringList allowedProperties() const; RequestableChannelClass bareClass() const; private: struct Private; friend struct Private; QSharedDataPointer mPriv; }; class TP_QT_EXPORT RequestableChannelClassSpecList : public QList { public: RequestableChannelClassSpecList() { } RequestableChannelClassSpecList(const RequestableChannelClass &rcc) { append(RequestableChannelClassSpec(rcc)); } RequestableChannelClassSpecList(const RequestableChannelClassList &rccs) { Q_FOREACH (const RequestableChannelClass &rcc, rccs) { append(RequestableChannelClassSpec(rcc)); } } RequestableChannelClassSpecList(const RequestableChannelClassSpec &rccSpec) { append(rccSpec); } RequestableChannelClassSpecList(const QList &other) : QList(other) { } RequestableChannelClassList bareClasses() const { RequestableChannelClassList list; Q_FOREACH (const RequestableChannelClassSpec &rccSpec, *this) { list.append(rccSpec.bareClass()); } return list; } }; } // Tp Q_DECLARE_METATYPE(Tp::RequestableChannelClassSpec); Q_DECLARE_METATYPE(Tp::RequestableChannelClassSpecList); #endif telepathy-qt-0.9.3/TelepathyQt/properties.h0000644000175200001440000000334712000056607023234 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008 Collabora Ltd. * @copyright Copyright (C) 2008 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_properties_h_HEADER_GUARD_ #define _TelepathyQt_properties_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif /** * \addtogroup clientsideproxies Client-side proxies * * Proxy objects representing remote service objects accessed via D-Bus. * * In addition to providing direct access to methods, signals and properties * exported by the remote objects, some of these proxies offer features like * automatic inspection of remote object capabilities, property tracking, * backwards compatibility helpers for older services and other utilities. */ /** * \defgroup clientprops Telepathy Properties proxy * \ingroup clientsideproxies * * Proxy object representing the Telepathy Properties interface on remote * objects. */ #include #endif telepathy-qt-0.9.3/TelepathyQt/incoming-file-transfer-channel.h0000644000175200001440000000473212000056607027007 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_incoming_file_transfer_channel_h_HEADER_GUARD_ #define _TelepathyQt_incoming_file_transfer_channel_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include namespace Tp { class TP_QT_EXPORT IncomingFileTransferChannel : public FileTransferChannel { Q_OBJECT Q_DISABLE_COPY(IncomingFileTransferChannel) public: static const Feature FeatureCore; static IncomingFileTransferChannelPtr create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties); virtual ~IncomingFileTransferChannel(); PendingOperation *setUri(const QString& uri); PendingOperation *acceptFile(qulonglong offset, QIODevice *output); Q_SIGNALS: void uriDefined(const QString &uri); protected: IncomingFileTransferChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature = IncomingFileTransferChannel::FeatureCore); private Q_SLOTS: TP_QT_NO_EXPORT void onAcceptFileFinished(Tp::PendingOperation *op); TP_QT_NO_EXPORT void onSocketConnected(); TP_QT_NO_EXPORT void onSocketDisconnected(); TP_QT_NO_EXPORT void onSocketError(QAbstractSocket::SocketError error); TP_QT_NO_EXPORT void doTransfer(); private: TP_QT_NO_EXPORT void connectToHost(); TP_QT_NO_EXPORT void setFinished(); struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/dbus-proxy-factory.h0000644000175200001440000000472512000056607024622 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_dbus_proxy_factory_h_HEADER_GUARD_ #define _TelepathyQt_dbus_proxy_factory_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include // For Q_DISABLE_COPY #include #include class QDBusConnection; namespace Tp { class Features; class PendingReady; class PendingOperation; class TP_QT_EXPORT DBusProxyFactory : public QObject, public RefCounted { Q_OBJECT Q_DISABLE_COPY(DBusProxyFactory) public: virtual ~DBusProxyFactory(); const QDBusConnection &dbusConnection() const; protected: DBusProxyFactory(const QDBusConnection &bus); DBusProxyPtr cachedProxy(const QString &busName, const QString &objectPath) const; PendingReady *nowHaveProxy(const DBusProxyPtr &proxy) const; // I don't want this to be non-pure virtual, because I want ALL subclasses to have to think // about whether or not they need to uniquefy the name or not. If a subclass doesn't implement // this while it should, matching with the cache for future requests and invalidation breaks. virtual QString finalBusNameFrom(const QString &uniqueOrWellKnown) const = 0; virtual PendingOperation *initialPrepare(const DBusProxyPtr &proxy) const; virtual PendingOperation *readyPrepare(const DBusProxyPtr &proxy) const; virtual Features featuresFor(const DBusProxyPtr &proxy) const = 0; private: class Cache; struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/properties.cpp0000644000175200001440000000206412000056607023562 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008 Collabora Ltd. * @copyright Copyright (C) 2008 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/cli-properties-body.hpp" #include "TelepathyQt/_gen/cli-properties.moc.hpp" telepathy-qt-0.9.3/TelepathyQt/DebugReceiver0000644000175200001440000000036612000056607023323 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_DebugReceiver_HEADER_GUARD_ #define _TelepathyQt_DebugReceiver_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/BaseProtocolPresenceInterface0000644000175200001440000000042512000056607026506 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_BaseProtocolPresenceInterface_HEADER_GUARD_ #define _TelepathyQt_BaseProtocolPresenceInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/AccountFilter0000644000175200001440000000036612000056607023352 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_AccountFilter_HEADER_GUARD_ #define _TelepathyQt_AccountFilter_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/pending-channel-request-internal.h0000644000175200001440000000416712000056607027373 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_pending_channel_request_internal_h_HEADER_GUARD_ #define _TelepathyQt_pending_channel_request_internal_h_HEADER_GUARD_ #include #include #include namespace Tp { class TP_QT_NO_EXPORT PendingChannelRequestCancelOperation : public PendingOperation { Q_OBJECT Q_DISABLE_COPY(PendingChannelRequestCancelOperation) public: PendingChannelRequestCancelOperation() : PendingOperation(SharedPtr()) { } ~PendingChannelRequestCancelOperation() { } void go(const ChannelRequestPtr &channelRequest) { Q_ASSERT(mChannelRequest.isNull()); mChannelRequest = channelRequest; connect(mChannelRequest->cancel(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onCancelOperationFinished(Tp::PendingOperation*))); } private Q_SLOTS: void onCancelOperationFinished(Tp::PendingOperation *op) { if (op->isError()) { setFinishedWithError(op->errorName(), op->errorMessage()); return; } setFinished(); } private: ChannelRequestPtr mChannelRequest; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/call-stream-endpoint.h0000644000175200001440000000222512000056607025054 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_call_stream_endpoint_h_HEADER_GUARD_ #define _TelepathyQt_call_stream_endpoint_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #endif telepathy-qt-0.9.3/TelepathyQt/test-backdoors.cpp0000644000175200001440000000315012000056607024307 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2009 Collabora Ltd. * @copyright Copyright (C) 2008-2009 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include namespace Tp { void TestBackdoors::invalidateProxy(DBusProxy *proxy, const QString &reason, const QString &message) { Q_ASSERT(proxy != 0); Q_ASSERT(proxy->isValid()); proxy->invalidate(reason, message); } ConnectionCapabilities TestBackdoors::createConnectionCapabilities( const RequestableChannelClassSpecList &rccSpecs) { return ConnectionCapabilities(rccSpecs); } ContactCapabilities TestBackdoors::createContactCapabilities( const RequestableChannelClassSpecList &rccSpecs, bool specificToContact) { return ContactCapabilities(rccSpecs, specificToContact); } } // Tp telepathy-qt-0.9.3/TelepathyQt/call-stream.xml0000644000175200001440000000046212000056607023610 0ustar00collabora-develusers00000000000000 Call Stream interfaces, version 1 telepathy-qt-0.9.3/TelepathyQt/profile.cpp0000644000175200001440000010235612000056607023033 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/debug-internal.h" #include "TelepathyQt/manager-file.h" #include #include #include #include #include #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT Profile::Private { Private(); void setServiceName(const QString &serviceName); void setFileName(const QString &fileName); void lookupProfile(); bool parse(QFile *file); void invalidate(); struct Data { Data(); void clear(); QString type; QString provider; QString name; QString iconName; QString cmName; QString protocolName; Profile::ParameterList parameters; bool allowOtherPresences; Profile::PresenceList presences; RequestableChannelClassSpecList unsupportedChannelClassSpecs; }; class XmlHandler; QString serviceName; bool valid; bool fake; bool allowNonIMType; Data data; }; Profile::Private::Data::Data() : allowOtherPresences(false) { } void Profile::Private::Data::clear() { type = QString(); provider = QString(); name = QString(); iconName = QString(); protocolName = QString(); parameters = Profile::ParameterList(); allowOtherPresences = false; presences = Profile::PresenceList(); unsupportedChannelClassSpecs = RequestableChannelClassSpecList(); } class TP_QT_NO_EXPORT Profile::Private::XmlHandler : public QXmlDefaultHandler { public: XmlHandler(const QString &serviceName, bool allowNonIMType, Profile::Private::Data *outputData); bool startElement(const QString &namespaceURI, const QString &localName, const QString &qName, const QXmlAttributes &attributes); bool endElement(const QString &namespaceURI, const QString &localName, const QString &qName); bool characters(const QString &str); bool fatalError(const QXmlParseException &exception); QString errorString() const; private: bool attributeValueAsBoolean(const QXmlAttributes &attributes, const QString &qName); QString mServiceName; bool allowNonIMType; Profile::Private::Data *mData; QStack mElements; QString mCurrentText; Profile::Parameter mCurrentParameter; RequestableChannelClass mCurrentCC; QString mCurrentPropertyName; QString mCurrentPropertyType; QString mErrorString; bool mMetServiceTag; static const QString xmlNs; static const QString elemService; static const QString elemName; static const QString elemParams; static const QString elemParam; static const QString elemPresences; static const QString elemPresence; static const QString elemUnsupportedCCs; static const QString elemCC; static const QString elemProperty; static const QString elemAttrId; static const QString elemAttrName; static const QString elemAttrType; static const QString elemAttrProvider; static const QString elemAttrManager; static const QString elemAttrProtocol; static const QString elemAttrIcon; static const QString elemAttrLabel; static const QString elemAttrMandatory; static const QString elemAttrAllowOthers; static const QString elemAttrMessage; static const QString elemAttrDisabled; }; const QString Profile::Private::XmlHandler::xmlNs = QLatin1String("http://telepathy.freedesktop.org/wiki/service-profile-v1"); const QString Profile::Private::XmlHandler::elemService = QLatin1String("service"); const QString Profile::Private::XmlHandler::elemName = QLatin1String("name"); const QString Profile::Private::XmlHandler::elemParams = QLatin1String("parameters"); const QString Profile::Private::XmlHandler::elemParam = QLatin1String("parameter"); const QString Profile::Private::XmlHandler::elemPresences = QLatin1String("presences"); const QString Profile::Private::XmlHandler::elemPresence = QLatin1String("presence"); const QString Profile::Private::XmlHandler::elemUnsupportedCCs = QLatin1String("unsupported-channel-classes"); const QString Profile::Private::XmlHandler::elemCC = QLatin1String("channel-class"); const QString Profile::Private::XmlHandler::elemProperty = QLatin1String("property"); const QString Profile::Private::XmlHandler::elemAttrId = QLatin1String("id"); const QString Profile::Private::XmlHandler::elemAttrName = QLatin1String("name"); const QString Profile::Private::XmlHandler::elemAttrType = QLatin1String("type"); const QString Profile::Private::XmlHandler::elemAttrProvider = QLatin1String("provider"); const QString Profile::Private::XmlHandler::elemAttrManager = QLatin1String("manager"); const QString Profile::Private::XmlHandler::elemAttrProtocol = QLatin1String("protocol"); const QString Profile::Private::XmlHandler::elemAttrLabel = QLatin1String("label"); const QString Profile::Private::XmlHandler::elemAttrMandatory = QLatin1String("mandatory"); const QString Profile::Private::XmlHandler::elemAttrAllowOthers = QLatin1String("allow-others"); const QString Profile::Private::XmlHandler::elemAttrIcon = QLatin1String("icon"); const QString Profile::Private::XmlHandler::elemAttrMessage = QLatin1String("message"); const QString Profile::Private::XmlHandler::elemAttrDisabled = QLatin1String("disabled"); Profile::Private::XmlHandler::XmlHandler(const QString &serviceName, bool allowNonIMType, Profile::Private::Data *outputData) : mServiceName(serviceName), allowNonIMType(allowNonIMType), mData(outputData), mMetServiceTag(false) { } bool Profile::Private::XmlHandler::startElement(const QString &namespaceURI, const QString &localName, const QString &qName, const QXmlAttributes &attributes) { if (!mMetServiceTag && qName != elemService) { mErrorString = QLatin1String("the file is not a profile file"); return false; } if (namespaceURI != xmlNs) { // ignore all elements with unknown xmlns debug() << "Ignoring unknown xmlns" << namespaceURI; return true; } #define CHECK_ELEMENT_IS_CHILD_OF(parentElement) \ if (mElements.top() != parentElement) { \ mErrorString = QString(QLatin1String("element '%1' is not a " \ "child of element '%2'")) \ .arg(qName) \ .arg(parentElement); \ return false; \ } #define CHECK_ELEMENT_ATTRIBUTES_COUNT(value) \ if (attributes.count() != value) { \ mErrorString = QString(QLatin1String("element '%1' contains more " \ "than %2 attributes")) \ .arg(qName) \ .arg(value); \ return false; \ } #define CHECK_ELEMENT_HAS_ATTRIBUTE(attribute) \ if (attributes.index(attribute) == -1) { \ mErrorString = QString(QLatin1String("mandatory attribute '%1' " \ "missing on element '%2'")) \ .arg(attribute) \ .arg(qName); \ return false; \ } #define CHECK_ELEMENT_ATTRIBUTES(allowedAttrs) \ for (int i = 0; i < attributes.count(); ++i) { \ bool valid = false; \ QString attrName = attributes.qName(i); \ foreach (const QString &allowedAttr, allowedAttrs) { \ if (attrName == allowedAttr) { \ valid = true; \ break; \ } \ } \ if (!valid) { \ mErrorString = QString(QLatin1String("invalid attribute '%1' on " \ "element '%2'")) \ .arg(attrName) \ .arg(qName); \ return false; \ } \ } if (qName == elemService) { CHECK_ELEMENT_HAS_ATTRIBUTE(elemAttrId); CHECK_ELEMENT_HAS_ATTRIBUTE(elemAttrType); CHECK_ELEMENT_HAS_ATTRIBUTE(elemAttrManager); CHECK_ELEMENT_HAS_ATTRIBUTE(elemAttrProtocol); QStringList allowedAttrs = QStringList() << elemAttrId << elemAttrType << elemAttrManager << elemAttrProtocol << elemAttrProvider << elemAttrIcon; CHECK_ELEMENT_ATTRIBUTES(allowedAttrs); if (attributes.value(elemAttrId) != mServiceName) { mErrorString = QString(QLatin1String("the '%1' attribute of the " "element '%2' does not match the file name")) .arg(elemAttrId) .arg(elemService); return false; } mMetServiceTag = true; mData->type = attributes.value(elemAttrType); if (mData->type != QLatin1String("IM") && !allowNonIMType) { mErrorString = QString(QLatin1String("unknown value of element " "'type': %1")) .arg(mCurrentText); return false; } mData->provider = attributes.value(elemAttrProvider); mData->cmName = attributes.value(elemAttrManager); mData->protocolName = attributes.value(elemAttrProtocol); mData->iconName = attributes.value(elemAttrIcon); } else if (qName == elemParams) { CHECK_ELEMENT_IS_CHILD_OF(elemService); CHECK_ELEMENT_ATTRIBUTES_COUNT(0); } else if (qName == elemParam) { CHECK_ELEMENT_IS_CHILD_OF(elemParams); CHECK_ELEMENT_HAS_ATTRIBUTE(elemAttrName); QStringList allowedAttrs = QStringList() << elemAttrName << elemAttrType << elemAttrMandatory << elemAttrLabel; CHECK_ELEMENT_ATTRIBUTES(allowedAttrs); QString paramType = attributes.value(elemAttrType); if (paramType.isEmpty()) { paramType = QLatin1String("s"); } mCurrentParameter.setName(attributes.value(elemAttrName)); mCurrentParameter.setDBusSignature(QDBusSignature(paramType)); mCurrentParameter.setLabel(attributes.value(elemAttrLabel)); mCurrentParameter.setMandatory(attributeValueAsBoolean(attributes, elemAttrMandatory)); } else if (qName == elemPresences) { CHECK_ELEMENT_IS_CHILD_OF(elemService); QStringList allowedAttrs = QStringList() << elemAttrAllowOthers; CHECK_ELEMENT_ATTRIBUTES(allowedAttrs); mData->allowOtherPresences = attributeValueAsBoolean(attributes, elemAttrAllowOthers); } else if (qName == elemPresence) { CHECK_ELEMENT_IS_CHILD_OF(elemPresences); CHECK_ELEMENT_HAS_ATTRIBUTE(elemAttrId); QStringList allowedAttrs = QStringList() << elemAttrId << elemAttrLabel << elemAttrIcon << elemAttrMessage << elemAttrDisabled; CHECK_ELEMENT_ATTRIBUTES(allowedAttrs); mData->presences.append(Profile::Presence( attributes.value(elemAttrId), attributes.value(elemAttrLabel), attributes.value(elemAttrIcon), attributes.value(elemAttrMessage), attributeValueAsBoolean(attributes, elemAttrDisabled))); } else if (qName == elemUnsupportedCCs) { CHECK_ELEMENT_IS_CHILD_OF(elemService); CHECK_ELEMENT_ATTRIBUTES_COUNT(0); } else if (qName == elemCC) { CHECK_ELEMENT_IS_CHILD_OF(elemUnsupportedCCs); CHECK_ELEMENT_ATTRIBUTES_COUNT(0); } else if (qName == elemProperty) { CHECK_ELEMENT_IS_CHILD_OF(elemCC); CHECK_ELEMENT_ATTRIBUTES_COUNT(2); CHECK_ELEMENT_HAS_ATTRIBUTE(elemAttrName); CHECK_ELEMENT_HAS_ATTRIBUTE(elemAttrType); mCurrentPropertyName = attributes.value(elemAttrName); mCurrentPropertyType = attributes.value(elemAttrType); } else { if (qName != elemName) { Tp::warning() << "Ignoring unknown element" << qName; } else { // check if we are inside CHECK_ELEMENT_IS_CHILD_OF(elemService); // no element here supports attributes CHECK_ELEMENT_ATTRIBUTES_COUNT(0); } } #undef CHECK_ELEMENT_IS_CHILD_OF #undef CHECK_ELEMENT_ATTRIBUTES_COUNT #undef CHECK_ELEMENT_HAS_ATTRIBUTE #undef CHECK_ELEMENT_ATTRIBUTES mElements.push(qName); mCurrentText.clear(); return true; } bool Profile::Private::XmlHandler::endElement(const QString &namespaceURI, const QString &localName, const QString &qName) { if (namespaceURI != xmlNs) { // ignore all elements with unknown xmlns debug() << "Ignoring unknown xmlns" << namespaceURI; return true; } else if (qName == elemName) { mData->name = mCurrentText; } else if (qName == elemParam) { mCurrentParameter.setValue(parseValueWithDBusSignature(mCurrentText, mCurrentParameter.dbusSignature().signature())); mData->parameters.append(Profile::Parameter(mCurrentParameter)); } else if (qName == elemCC) { mData->unsupportedChannelClassSpecs.append(RequestableChannelClassSpec(mCurrentCC)); mCurrentCC.fixedProperties.clear(); } else if (qName == elemProperty) { mCurrentCC.fixedProperties[mCurrentPropertyName] = parseValueWithDBusSignature(mCurrentText, mCurrentPropertyType); } mElements.pop(); return true; } bool Profile::Private::XmlHandler::characters(const QString &str) { mCurrentText += str; return true; } bool Profile::Private::XmlHandler::fatalError( const QXmlParseException &exception) { mErrorString = QString(QLatin1String("parse error at line %1, column %2: " "%3")) .arg(exception.lineNumber()) .arg(exception.columnNumber()) .arg(exception.message()); return false; } QString Profile::Private::XmlHandler::errorString() const { return mErrorString; } bool Profile::Private::XmlHandler::attributeValueAsBoolean( const QXmlAttributes &attributes, const QString &qName) { QString tmpStr = attributes.value(qName); if (tmpStr == QLatin1String("1") || tmpStr == QLatin1String("true")) { return true; } else { return false; } } Profile::Private::Private() : valid(false), fake(false), allowNonIMType(false) { } void Profile::Private::setServiceName(const QString &serviceName_) { invalidate(); allowNonIMType = false; serviceName = serviceName_; lookupProfile(); } void Profile::Private::setFileName(const QString &fileName) { invalidate(); allowNonIMType = true; QFileInfo fi(fileName); serviceName = fi.baseName(); debug() << "Loading profile file" << fileName; QFile file(fileName); if (!file.exists()) { warning() << QString(QLatin1String("Error parsing profile file %1: file does not exist")) .arg(file.fileName()); return; } if (!file.open(QFile::ReadOnly)) { warning() << QString(QLatin1String("Error parsing profile file %1: " "cannot open file for readonly access")) .arg(file.fileName()); return; } if (parse(&file)) { debug() << "Profile file" << fileName << "loaded successfully"; } } void Profile::Private::lookupProfile() { debug() << "Searching profile for service" << serviceName; QStringList searchDirs = Profile::searchDirs(); bool found = false; foreach (const QString searchDir, searchDirs) { QString fileName = searchDir + serviceName + QLatin1String(".profile"); QFile file(fileName); if (!file.exists()) { continue; } if (!file.open(QFile::ReadOnly)) { continue; } if (parse(&file)) { debug() << "Profile for service" << serviceName << "found:" << fileName; found = true; break; } } if (!found) { debug() << "Cannot find valid profile for service" << serviceName; } } bool Profile::Private::parse(QFile *file) { invalidate(); fake = false; QFileInfo fi(file->fileName()); XmlHandler xmlHandler(serviceName, allowNonIMType, &data); QXmlSimpleReader xmlReader; xmlReader.setContentHandler(&xmlHandler); xmlReader.setErrorHandler(&xmlHandler); QXmlInputSource xmlInputSource(file); if (!xmlReader.parse(xmlInputSource)) { warning() << QString(QLatin1String("Error parsing profile file %1: %2")) .arg(file->fileName()) .arg(xmlHandler.errorString()); invalidate(); return false; } valid = true; return true; } void Profile::Private::invalidate() { valid = false; data.clear(); } /** * \class Profile * \ingroup utils * \headerfile TelepathyQt/profile.h * * \brief The Profile class provides an easy way to read Telepathy profile * files according to http://telepathy.freedesktop.org/wiki/service-profile-v1. * * Note that profiles with xml element different than "IM" are considered * invalid. */ /** * Create a new Profile object used to read .profiles compliant files. * * \param serviceName The profile service name. * \return A ProfilePtr object pointing to the newly created Profile object. */ ProfilePtr Profile::createForServiceName(const QString &serviceName) { ProfilePtr profile = ProfilePtr(new Profile()); profile->setServiceName(serviceName); return profile; } /** * Create a new Profile object used to read .profiles compliant files. * * \param fileName The profile file name. * \return A ProfilePtr object pointing to the newly created Profile object. */ ProfilePtr Profile::createForFileName(const QString &fileName) { ProfilePtr profile = ProfilePtr(new Profile()); profile->setFileName(fileName); return profile; } /** * Construct a new Profile object used to read .profiles compliant files. * * \param serviceName The profile service name. */ Profile::Profile() : mPriv(new Private()) { } /** * Construct a fake profile using the given \a serviceName, \a cmName, * \a protocolName and \a protocolInfo. * * - isFake() will return \c true * - type() will return "IM" * - provider() will return an empty string * - serviceName() will return \a serviceName * - name() and protocolName() will return \a protocolName * - iconName() will return "im-\a protocolName" * - cmName() will return \a cmName * - parameters() will return a list matching CM default parameters * - presences() will return an empty list and allowOtherPresences will return * \c true, meaning that CM presences should be used * - unsupportedChannelClassSpecs() will return an empty list * * \param serviceName The service name. * \param cmName The connection manager name. * \param protocolName The protocol name. * \param protocolInfo The protocol info for the protocol \a protocolName. */ Profile::Profile(const QString &serviceName, const QString &cmName, const QString &protocolName, const ProtocolInfo &protocolInfo) : mPriv(new Private()) { mPriv->serviceName = serviceName; mPriv->data.type = QString(QLatin1String("IM")); // provider is empty mPriv->data.name = protocolName; mPriv->data.iconName = QString(QLatin1String("im-%1")).arg(protocolName); mPriv->data.cmName = cmName; mPriv->data.protocolName = protocolName; foreach (const ProtocolParameter &protocolParam, protocolInfo.parameters()) { if (!protocolParam.defaultValue().isNull()) { mPriv->data.parameters.append(Profile::Parameter( protocolParam.name(), protocolParam.dbusSignature(), protocolParam.defaultValue(), QString(), // label false)); // mandatory } } // parameters will be the same as CM parameters // set allow others to true meaning that the standard CM presences are // supported mPriv->data.allowOtherPresences = true; // presences will be the same as CM presences // unsupported channel classes is empty mPriv->valid = true; mPriv->fake = true; } /** * Class destructor. */ Profile::~Profile() { delete mPriv; } /** * Return the unique name of the service to which this profile applies. * * \return The unique name of the service. */ QString Profile::serviceName() const { return mPriv->serviceName; } /** * Return whether this profile is valid. * * \return \c true if valid, otherwise \c false. */ bool Profile::isValid() const { return mPriv->valid; } /** * Return whether this profile is fake. * * Fake profiles are profiles created for services not providing a .profile * file. * * \return \c true if fake, otherwise \c false. */ bool Profile::isFake() const { return mPriv->fake; } /** * Return the type of the service to which this profile applies. * * In general, services of interest of Telepathy should be of type 'IM'. * Other service types exist but are unlikely to affect Telepathy in any way. * * \return The type of the service. */ QString Profile::type() const { return mPriv->data.type; } /** * Return the name of the vendor/organisation/provider who actually runs the * service to which this profile applies. * * \return The provider of the service. */ QString Profile::provider() const { return mPriv->data.provider; } /** * Return the human-readable name for the service to which this profile applies. * * \return The Human-readable name of the service. */ QString Profile::name() const { return mPriv->data.name; } /** * Return the base name of the icon for the service to which this profile * applies. * * \return The base name of the icon for the service. */ QString Profile::iconName() const { return mPriv->data.iconName; } /** * Return the connection manager name for the service to which this profile * applies. * * \return The connection manager name for the service. */ QString Profile::cmName() const { return mPriv->data.cmName; } /** * Return the protocol name for the service to which this profile applies. * * \return The protocol name for the service. */ QString Profile::protocolName() const { return mPriv->data.protocolName; } /** * Return a list of parameters defined for the service to which this profile * applies. * * \return A list of Profile::Parameter. */ Profile::ParameterList Profile::parameters() const { return mPriv->data.parameters; } /** * Return whether this profile defines the parameter named \a name. * * \return \c true if parameter is defined, otherwise \c false. */ bool Profile::hasParameter(const QString &name) const { foreach (const Parameter ¶meter, mPriv->data.parameters) { if (parameter.name() == name) { return true; } } return false; } /** * Return the parameter for a given \a name. * * \return A Profile::Parameter. */ Profile::Parameter Profile::parameter(const QString &name) const { foreach (const Parameter ¶meter, mPriv->data.parameters) { if (parameter.name() == name) { return parameter; } } return Profile::Parameter(); } /** * Return whether the standard CM presences not defined in presences() are * supported. * * \return \c true if standard CM presences are supported, otherwise \c false. */ bool Profile::allowOtherPresences() const { return mPriv->data.allowOtherPresences; } /** * Return a list of presences defined for the service to which this profile * applies. * * \return A list of Profile::Presence. */ Profile::PresenceList Profile::presences() const { return mPriv->data.presences; } /** * Return whether this profile defines the presence with id \a id. * * \return \c true if presence is defined, otherwise \c false. */ bool Profile::hasPresence(const QString &id) const { foreach (const Presence &presence, mPriv->data.presences) { if (presence.id() == id) { return true; } } return false; } /** * Return the presence for a given \a id. * * \return A Profile::Presence. */ Profile::Presence Profile::presence(const QString &id) const { foreach (const Presence &presence, mPriv->data.presences) { if (presence.id() == id) { return presence; } } return Profile::Presence(); } /** * A list of channel classes not supported by the service to which this profile * applies. * * \return A list of RequestableChannelClassSpec. */ RequestableChannelClassSpecList Profile::unsupportedChannelClassSpecs() const { return mPriv->data.unsupportedChannelClassSpecs; } void Profile::setServiceName(const QString &serviceName) { mPriv->setServiceName(serviceName); } void Profile::setFileName(const QString &fileName) { mPriv->setFileName(fileName); } QStringList Profile::searchDirs() { QStringList ret; QString xdgDataHome = QString::fromLocal8Bit(qgetenv("XDG_DATA_HOME")); if (xdgDataHome.isEmpty()) { ret << QDir::homePath() + QLatin1String("/.local/share/data/telepathy/profiles/"); } else { ret << xdgDataHome + QLatin1String("/telepathy/profiles/"); } QString xdgDataDirsEnv = QString::fromLocal8Bit(qgetenv("XDG_DATA_DIRS")); if (xdgDataDirsEnv.isEmpty()) { ret << QLatin1String("/usr/local/share/telepathy/profiles/"); ret << QLatin1String("/usr/share/telepathy/profiles/"); } else { QStringList xdgDataDirs = xdgDataDirsEnv.split(QLatin1Char(':')); foreach (const QString xdgDataDir, xdgDataDirs) { ret << xdgDataDir + QLatin1String("/telepathy/profiles/"); } } return ret; } struct TP_QT_NO_EXPORT Profile::Parameter::Private { QString name; QDBusSignature dbusSignature; QVariant value; QString label; bool mandatory; }; /** * \class Profile::Parameter * \ingroup utils * \headerfile TelepathyQt/profile.h * * \brief The Profile::Parameter class represents a parameter defined in * .profile files. */ /** * Construct a new Profile::Parameter object. */ Profile::Parameter::Parameter() : mPriv(new Private) { mPriv->mandatory = false; } /** * Construct a new Profile::Parameter object that is a copy of \a other. */ Profile::Parameter::Parameter(const Parameter &other) : mPriv(new Private) { mPriv->name = other.mPriv->name; mPriv->dbusSignature = other.mPriv->dbusSignature; mPriv->value = other.mPriv->value; mPriv->label = other.mPriv->label; mPriv->mandatory = other.mPriv->mandatory; } /** * Construct a new Profile::Parameter object. * * \param name The parameter name. * \param dbusSignature The parameter D-Bus signature. * \param value The parameter value. * \param label The parameter label. * \param mandatory Whether this parameter is mandatory. */ Profile::Parameter::Parameter(const QString &name, const QDBusSignature &dbusSignature, const QVariant &value, const QString &label, bool mandatory) : mPriv(new Private) { mPriv->name = name; mPriv->dbusSignature = dbusSignature; mPriv->value = value; mPriv->label = label; mPriv->mandatory = mandatory; } /** * Class destructor. */ Profile::Parameter::~Parameter() { delete mPriv; } /** * Return the name of this parameter. * * \return The name of this parameter. */ QString Profile::Parameter::name() const { return mPriv->name; } void Profile::Parameter::setName(const QString &name) { mPriv->name = name; } /** * Return the D-Bus signature of this parameter. * * \return The D-Bus signature of this parameter. */ QDBusSignature Profile::Parameter::dbusSignature() const { return mPriv->dbusSignature; } void Profile::Parameter::setDBusSignature(const QDBusSignature &dbusSignature) { mPriv->dbusSignature = dbusSignature; } /** * Return the QVariant::Type of this parameter, constructed using * dbusSignature(). * * \return The QVariant::Type of this parameter. */ QVariant::Type Profile::Parameter::type() const { return variantTypeFromDBusSignature(mPriv->dbusSignature.signature()); } /** * Return the value of this parameter. * * If mandatory() returns \c true, the value must not be modified and should be * used as is when creating accounts for this profile. * * \return The value of this parameter. */ QVariant Profile::Parameter::value() const { return mPriv->value; } void Profile::Parameter::setValue(const QVariant &value) { mPriv->value = value; } /** * Return the human-readable label of this parameter. * * \return The human-readable label of this parameter. */ QString Profile::Parameter::label() const { return mPriv->label; } void Profile::Parameter::setLabel(const QString &label) { mPriv->label = label; } /** * Return whether this parameter is mandatory, or whether the value returned by * value() should be used as is when creating accounts for this profile. * * \return \c true if mandatory, otherwise \c false. */ bool Profile::Parameter::isMandatory() const { return mPriv->mandatory; } void Profile::Parameter::setMandatory(bool mandatory) { mPriv->mandatory = mandatory; } Profile::Parameter &Profile::Parameter::operator=(const Profile::Parameter &other) { mPriv->name = other.mPriv->name; mPriv->dbusSignature = other.mPriv->dbusSignature; mPriv->value = other.mPriv->value; mPriv->label = other.mPriv->label; mPriv->mandatory = other.mPriv->mandatory; return *this; } struct TP_QT_NO_EXPORT Profile::Presence::Private { QString id; QString label; QString iconName; QString message; bool disabled; }; /** * \class Profile::Presence * \ingroup utils * \headerfile TelepathyQt/profile.h * * \brief The Profile::Presence class represents a presence defined in * .profile files. */ /** * Construct a new Profile::Presence object. */ Profile::Presence::Presence() : mPriv(new Private) { mPriv->disabled = false; } /** * Construct a new Profile::Presence object that is a copy of \a other. */ Profile::Presence::Presence(const Presence &other) : mPriv(new Private) { mPriv->id = other.mPriv->id; mPriv->label = other.mPriv->label; mPriv->iconName = other.mPriv->iconName; mPriv->message = other.mPriv->message; mPriv->disabled = other.mPriv->disabled; } /** * Construct a new Profile::Presence object. * * \param id The presence id. * \param label The presence label. * \param iconName The presence icon name. * \param message The presence message. * \param disabled Whether this presence is supported. */ Profile::Presence::Presence(const QString &id, const QString &label, const QString &iconName, const QString &message, bool disabled) : mPriv(new Private) { mPriv->id = id; mPriv->label = label; mPriv->iconName = iconName; mPriv->message = message; mPriv->disabled = disabled; } /** * Class destructor. */ Profile::Presence::~Presence() { delete mPriv; } /** * Return the Telepathy presence id for this presence. * * \return The Telepathy presence id for this presence. */ QString Profile::Presence::id() const { return mPriv->id; } void Profile::Presence::setId(const QString &id) { mPriv->id = id; } /** * Return the label that should be used for this presence. * * \return The label for this presence. */ QString Profile::Presence::label() const { return mPriv->label; } void Profile::Presence::setLabel(const QString &label) { mPriv->label = label; } /** * Return the icon name of this presence. * * \return The icon name of this presence. */ QString Profile::Presence::iconName() const { return mPriv->iconName; } void Profile::Presence::setIconName(const QString &iconName) { mPriv->iconName = iconName; } /** * Return whether user-defined text-message can be attached to this presence. * * \return \c true if user-defined text-message can be attached to this presence, \c false * otherwise. */ bool Profile::Presence::canHaveStatusMessage() const { if (mPriv->message == QLatin1String("1") || mPriv->message == QLatin1String("true")) { return true; } return false; } void Profile::Presence::setMessage(const QString &message) { mPriv->message = message; } /** * Return whether this presence is supported for the service to which this * profile applies. * * \return \c true if supported, otherwise \c false. */ bool Profile::Presence::isDisabled() const { return mPriv->disabled; } void Profile::Presence::setDisabled(bool disabled) { mPriv->disabled = disabled; } Profile::Presence &Profile::Presence::operator=(const Profile::Presence &other) { mPriv->id = other.mPriv->id; mPriv->label = other.mPriv->label; mPriv->iconName = other.mPriv->iconName; mPriv->message = other.mPriv->message; mPriv->disabled = other.mPriv->disabled; return *this; } } // Tp telepathy-qt-0.9.3/TelepathyQt/client.h0000644000175200001440000000215312000056607022310 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_client_h_HEADER_GUARD_ #define _TelepathyQt_client_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #endif telepathy-qt-0.9.3/TelepathyQt/protocol-info.h0000644000175200001440000000651012000056607023625 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_protocol_info_h_HEADER_GUARD_ #define _TelepathyQt_protocol_info_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include #include #include #include #include namespace Tp { class ConnectionCapabilities; class PendingString; class TP_QT_EXPORT ProtocolInfo { public: ProtocolInfo(); ProtocolInfo(const ProtocolInfo &other); ~ProtocolInfo(); bool isValid() const { return mPriv.constData() != 0; } ProtocolInfo &operator=(const ProtocolInfo &other); QString cmName() const; QString name() const; ProtocolParameterList parameters() const; bool hasParameter(const QString &name) const; bool canRegister() const; ConnectionCapabilities capabilities() const; QString vcardField() const; QString englishName() const; QString iconName() const; PresenceSpecList allowedPresenceStatuses() const; AvatarSpec avatarRequirements() const; QStringList addressableVCardFields() const; QStringList addressableUriSchemes() const; PendingString *normalizeVCardAddress(const QString &vcardField, const QString &vcardAddress); PendingString *normalizeContactUri(const QString &uri); private: friend class ConnectionManager; TP_QT_NO_EXPORT ProtocolInfo(const ConnectionManagerPtr &cm, const QString &name); TP_QT_NO_EXPORT void addParameter(const ParamSpec &spec); TP_QT_NO_EXPORT void setVCardField(const QString &vcardField); TP_QT_NO_EXPORT void setEnglishName(const QString &englishName); TP_QT_NO_EXPORT void setIconName(const QString &iconName); TP_QT_NO_EXPORT void setRequestableChannelClasses(const RequestableChannelClassList &caps); TP_QT_NO_EXPORT void setAllowedPresenceStatuses(const PresenceSpecList &statuses); TP_QT_NO_EXPORT void setAvatarRequirements(const AvatarSpec &avatarRequirements); TP_QT_NO_EXPORT void setAddressableVCardFields(const QStringList &vcardFields); TP_QT_NO_EXPORT void setAddressableUriSchemes(const QStringList &uriSchemes); struct Private; friend struct Private; QSharedDataPointer mPriv; }; typedef QList ProtocolInfoList; } // Tp Q_DECLARE_METATYPE(Tp::ProtocolInfo); Q_DECLARE_METATYPE(Tp::ProtocolInfoList); #endif telepathy-qt-0.9.3/TelepathyQt/ServiceTypes0000644000175200001440000000036312000056607023232 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ServiceTypes_HEADER_GUARD_ #define _TelepathyQt_ServiceTypes_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/media-session-handler.xml0000644000175200001440000000036112000056607025555 0ustar00collabora-develusers00000000000000 Media session handler telepathy-qt-0.9.3/TelepathyQt/OrFilter0000644000175200001440000000034712000056607022335 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_OrFilter_HEADER_GUARD_ #define _TelepathyQt_OrFilter_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/PendingSendMessage0000644000175200001440000000040612000056607024306 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_PendingSendMessage_HEADER_GUARD_ #define _TelepathyQt_PendingSendMessage_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/pending-string-list.cpp0000644000175200001440000000532612000056607025273 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008 Collabora Ltd. * @copyright Copyright (C) 2008 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/pending-string-list.moc.hpp" #include "TelepathyQt/debug-internal.h" #include namespace Tp { struct TP_QT_NO_EXPORT PendingStringList::Private { QStringList result; }; /** * \class PendingStringList * \ingroup utils * \headerfile TelepathyQt/pending-string-list.h * * \brief The PendingStringList class is a generic subclass of PendingOperation * representing a pending D-Bus method call that returns a string list. * * See \ref async_model */ PendingStringList::PendingStringList(const SharedPtr &object) : PendingOperation(object), mPriv(new Private) { } PendingStringList::PendingStringList(QDBusPendingCall call, const SharedPtr &object) : PendingOperation(object), mPriv(new Private) { connect(new QDBusPendingCallWatcher(call), SIGNAL(finished(QDBusPendingCallWatcher*)), this, SLOT(watcherFinished(QDBusPendingCallWatcher*))); } /** * Class destructor. */ PendingStringList::~PendingStringList() { delete mPriv; } QStringList PendingStringList::result() const { return mPriv->result; } void PendingStringList::setResult(const QStringList &result) { mPriv->result = result; } void PendingStringList::watcherFinished(QDBusPendingCallWatcher* watcher) { QDBusPendingReply reply = *watcher; if (!reply.isError()) { debug() << "Got reply to PendingStringList call"; setResult(reply.value()); setFinished(); } else { debug().nospace() << "PendingStringList call failed: " << reply.error().name() << ": " << reply.error().message(); setFinishedWithError(reply.error()); } watcher->deleteLater(); } } // Tp telepathy-qt-0.9.3/TelepathyQt/ChannelDispatchOperationInterface0000644000175200001440000000045212000056607027336 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelDispatchOperationInterface_HEADER_GUARD_ #define _TelepathyQt_ChannelDispatchOperationInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/CallStreamEndpoint0000644000175200001440000000040612000056607024333 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_CallStreamEndpoint_HEADER_GUARD_ #define _TelepathyQt_CallStreamEndpoint_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/PropertiesInterfaceInterface0000644000175200001440000000042012000056607026375 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_PropertiesInterfaceInterface_HEADER_GUARD_ #define _TelepathyQt_PropertiesInterfaceInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/ConnectionInterfaceContactCapabilitiesInterface0000644000175200001440000000046612000056607032200 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ConnectionInterfaceContactCapabilitiesInterface_HEADER_GUARD_ #define _TelepathyQt_ConnectionInterfaceContactCapabilitiesInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/fake-handler-manager-internal.h0000644000175200001440000000470712000056607026604 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_fake_handler_manager_internal_h_HEADER_GUARD_ #define _TelepathyQt_fake_handler_manager_internal_h_HEADER_GUARD_ #include #include #include namespace Tp { #ifndef DOXYGEN_SHOULD_SKIP_THIS class FakeHandler : public QObject { Q_OBJECT Q_DISABLE_COPY(FakeHandler) public: FakeHandler(const QDBusConnection &bus); ~FakeHandler(); QDBusConnection dbusConnection() const { return mBus; } ObjectPathList handledChannels() const; void registerChannel(const ChannelPtr &channel); Q_SIGNALS: void invalidated(Tp::FakeHandler *self); private Q_SLOTS: void onChannelInvalidated(Tp::DBusProxy *channel); void onChannelDestroyed(QObject *channel); private: QDBusConnection mBus; QSet mChannels; }; class FakeHandlerManager : public QObject { Q_OBJECT Q_DISABLE_COPY(FakeHandlerManager) public: static FakeHandlerManager *instance(); ~FakeHandlerManager(); ObjectPathList handledChannels(const QDBusConnection &bus) const; void registerClientRegistrar(const ClientRegistrarPtr &cr); void registerChannels(const QList &channels); private Q_SLOTS: void onFakeHandlerInvalidated(Tp::FakeHandler *fakeHandler); private: FakeHandlerManager(); static FakeHandlerManager *mInstance; QHash, ClientRegistrarPtr> mClientRegistrars; QHash, FakeHandler *> mFakeHandlers; }; #endif // DOXYGEN_SHOULD_SKIP_THIS } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/Channel0000644000175200001440000000034312000056607022153 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_Channel_HEADER_GUARD_ #define _TelepathyQt_Channel_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/ChannelTypeServerAuthenticationInterface0000644000175200001440000000044512000056607030730 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelTypeServerAuthenticationInterface_HEADER_GUARD_ #define _TelepathyQt_ChannelTypeServerAuthenticationInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/utils.h0000644000175200001440000000275412000056607022201 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_utils_h_HEADER_GUARD_ #define _TelepathyQt_utils_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include namespace Tp { TP_QT_EXPORT QString escapeAsIdentifier(const QString &string); TP_QT_EXPORT bool checkValidProtocolName(const QString &protocolName); TP_QT_EXPORT QVariant::Type variantTypeFromDBusSignature(const QString &signature); TP_QT_EXPORT QVariant parseValueWithDBusSignature(const QString &value, const QString &dbusSignature); } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/PendingDBusTubeConnection0000644000175200001440000000043412000056607025606 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_PendingDBusTubeConnection_HEADER_GUARD_ #define _TelepathyQt_PendingDBusTubeConnection_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/PendingConnection0000644000175200001440000000040212000056607024203 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_PendingConnection_HEADER_GUARD_ #define _TelepathyQt_PendingConnection_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/DBusDaemonInterface0000644000175200001440000000037012000056607024405 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_DBusDaemonInterface_HEADER_GUARD_ #define _TelepathyQt_DBusDaemonInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/BaseProtocol0000644000175200001440000000036312000056607023201 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_BaseProtocol_HEADER_GUARD_ #define _TelepathyQt_BaseProtocol_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/client.xml0000644000175200001440000000065412000056607022665 0ustar00collabora-develusers00000000000000 Client interfaces telepathy-qt-0.9.3/TelepathyQt/media-stream-handler.cpp0000644000175200001440000000212012000056607025342 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008 Collabora Ltd. * @copyright Copyright (C) 2008 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/cli-media-stream-handler-body.hpp" #include "TelepathyQt/_gen/cli-media-stream-handler.moc.hpp" telepathy-qt-0.9.3/TelepathyQt/dbus-proxy-factory.cpp0000644000175200001440000002507412000056607025155 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/dbus-proxy-factory-internal.h" #include "TelepathyQt/_gen/dbus-proxy-factory.moc.hpp" #include "TelepathyQt/_gen/dbus-proxy-factory-internal.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT DBusProxyFactory::Private { Private(const QDBusConnection &bus) : bus(bus), cache(new Cache) { } ~Private() { delete cache; } QDBusConnection bus; Cache *cache; }; /** * \class DBusProxyFactory * \ingroup utils * \headerfile TelepathyQt/dbus-proxy-factory.h * * \brief The DBusProxyFactory class is a base class for all D-Bus proxy factory * classes. Handles proxy caching and making them ready as appropriate. */ /** * Construct a new DBusProxyFactory object. * * The intention for storing the bus here is that it generally doesn't make sense to construct * proxies for multiple buses in the same context. Allowing that would lead to more complex keying * needs in the cache, as well. * * \param bus The D-Bus bus connection for the objects constructed using this factory. */ DBusProxyFactory::DBusProxyFactory(const QDBusConnection &bus) : mPriv(new Private(bus)) { } /** * Class destructor. */ DBusProxyFactory::~DBusProxyFactory() { delete mPriv; } /** * Return the D-Bus connection all of the proxies from this factory communicate with. * * \return A QDBusConnection object. */ const QDBusConnection &DBusProxyFactory::dbusConnection() const { return mPriv->bus; } /** * Return a cached proxy with the given \a busName and \a objectPath. * * If a proxy has not been previously put into the cache by nowHaveProxy for those identifying * attributes, or a previously cached proxy has since been invalidated and/or destroyed, a \c Null * shared pointer is returned instead. * * \param busName Bus name of the proxy to return. * \param objectPath Object path of the proxy to return. * \return A pointer to the DBusProxy object, if any. */ DBusProxyPtr DBusProxyFactory::cachedProxy(const QString &busName, const QString &objectPath) const { QString finalName = finalBusNameFrom(busName); return mPriv->cache->get(Cache::Key(finalName, objectPath)); } /** * Should be called by subclasses when they have a proxy, be it a newly-constructed one or one from * the cache. * * This function will then do the rest of the factory work, including caching the proxy if it's not * cached already, doing any initialPrepare()/readyPrepare() work if appropriate, and making the * features from featuresFor() ready if they aren't already. * * The returned PendingReady only finishes when the initialPrepare() and readyPrepare() operations * for the proxy has completed, and the requested features have all been made ready (or found unable * to be made ready). Note that this might have happened already before calling this function, if * the proxy was not a newly created one, but was looked up from the cache. DBusProxyFactory handles * the necessary subleties for this to work. * * Access to the proxy instance is allowed as soon as this method returns through * PendingReady::proxy(), if the proxy is needed in a context where it's not required to be ready. * * \param proxy The proxy which the factory should now make sure is prepared and made ready. * \return A PendingReady operation which will emit PendingReady::finished * when the proxy is usable. */ PendingReady *DBusProxyFactory::nowHaveProxy(const DBusProxyPtr &proxy) const { Q_ASSERT(!proxy.isNull()); mPriv->cache->put(proxy); return new PendingReady(SharedPtr((DBusProxyFactory*) this), proxy, featuresFor(proxy)); } /** * \fn QString DBusProxyFactory::finalBusNameFrom(const QString &uniqueOrWellKnown) const * * "Normalize" a bus name according to the rules for the proxy class to construct. * * Should be implemented by subclasses to transform the application-specified name \a * uniqueOrWellKnown to whatever the proxy constructed for that name would have in its * DBusProxy::busName() in the end. * * For StatelessDBusProxy sub-classes this should mostly be an identity transform, while for * StatefulDBusProxy sub-classes StatefulDBusProxy::uniqueNameFrom() or an equivalent thereof should * be used in most cases. * * If this is not implemented correctly, caching won't work properly. * * \param uniqueOrWellKnown Any valid D-Bus service name, either unique or well-known. * \return Whatever that name would turn to, when a proxy is constructed for it. */ /** * Allows subclasses to do arbitrary manipulation on the proxy before it is attempted to be made * ready. * * If a non-\c NULL operation is returned, the completion of that operation is waited for before * starting to make the object ready whenever nowHaveProxy() is called the first time around for a * given proxy. * * \todo FIXME actually implement this... :) Currently just a vtable placeholder. * \param proxy The just-constructed proxy to be prepared. * \return \c NULL ie. nothing to do. */ PendingOperation *DBusProxyFactory::initialPrepare(const DBusProxyPtr &proxy) const { // Nothing we could think about needs doing return NULL; } /** * Allows subclasses to do arbitrary manipulation on the proxy after it has been made ready. * * If a non-\c NULL operation is returned, the completion of that operation is waited for before * signaling that the object is ready for use after ReadyObject::becomeReady() for it has finished * whenever nowHaveProxy() is called the first time around for a given proxy. * * \todo FIXME actually implement this... :) Currently just a vtable placeholder. * \param proxy The just-readified proxy to be prepared. * \return \c NULL ie. nothing to do. */ PendingOperation *DBusProxyFactory::readyPrepare(const DBusProxyPtr &proxy) const { // Nothing we could think about needs doing return NULL; } /** * \fn Features DBusProxyFactory::featuresFor(const SharedPtr &proxy) const * * Return the features which should be made ready on a given proxy. * * This can be used to implement instance-specific features based on arbitrary criteria. * FixedFeatureFactory implements this as a fixed set of features independent of the instance, * however. * * It should be noted that if an empty set of features is returned, ReadyObject::becomeReady() is * not called at all. In other words, any "core feature" is not automatically added to the requested * features. This is to enable setting a factory to not make proxies ready at all, which is useful * eg. in the case of account editing UIs which aren't interested in the state of Connection objects * for the Account objects they're editing. * * \param proxy The proxy on which the returned features will be made ready. * \return A list of Feature objects. */ DBusProxyFactory::Cache::Cache() { } DBusProxyFactory::Cache::~Cache() { } DBusProxyPtr DBusProxyFactory::Cache::get(const Key &key) const { DBusProxyPtr proxy(proxies.value(key)); if (proxy.isNull() || !proxy->isValid()) { // Weak pointer invalidated or proxy invalidated during this mainloop iteration and we still // haven't got the invalidated() signal for it return DBusProxyPtr(); } return proxy; } void DBusProxyFactory::Cache::put(const DBusProxyPtr &proxy) { if (proxy->busName().isEmpty()) { debug() << "Not inserting proxy" << proxy.data() << "with no bus name to factory cache"; return; } else if (!proxy->isValid()) { debug() << "Not inserting to factory cache invalid proxy - proxy is for" << proxy->busName() << ',' << proxy->objectPath(); return; } Key key(proxy->busName(), proxy->objectPath()); DBusProxyPtr existingProxy(proxies.value(key)); if (!existingProxy || existingProxy != proxy) { // Disconnect the invalidated signal from the proxy we're replacing, so it won't uselessly // cause the new (hopefully valid) proxy to be dropped from the cache if it arrives late. // // The window in which this makes a difference is very slim but existent; namely, somebody // must request a proxy from the factory in the same mainloop iteration as an otherwise // matching proxy has invalidated itself. The invalidation signal would be delivered and // processed only during the next mainloop iteration. if (existingProxy) { Q_ASSERT(!existingProxy->isValid()); existingProxy->disconnect( SIGNAL(invalidated(Tp::DBusProxy*,QString,QString)), this, SLOT(onProxyInvalidated(Tp::DBusProxy*))); debug() << "Replacing invalidated proxy" << existingProxy.data() << "in cache for name" << existingProxy->busName() << ',' << existingProxy->objectPath(); } connect(proxy.data(), SIGNAL(invalidated(Tp::DBusProxy*,QString,QString)), SLOT(onProxyInvalidated(Tp::DBusProxy*))); debug() << "Inserting to factory cache proxy for" << key; proxies.insert(key, proxy); } } void DBusProxyFactory::Cache::onProxyInvalidated(Tp::DBusProxy *proxy) { Key key(proxy->busName(), proxy->objectPath()); // Not having it would indicate invalidated() signaled twice for the same proxy, or us having // connected to two proxies with the same key, neither of which should happen Q_ASSERT(proxies.contains(key)); debug() << "Removing from factory cache invalidated proxy for" << key; proxies.remove(key); } } telepathy-qt-0.9.3/TelepathyQt/debug-internal.h0000644000175200001440000000633612000056607023741 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008 Collabora Ltd. * @copyright Copyright (C) 2008 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_debug_HEADER_GUARD_ #define _TelepathyQt_debug_HEADER_GUARD_ #include #include namespace Tp { class TP_QT_EXPORT Debug { public: inline Debug() : debug(0) { } inline Debug(QtMsgType type) : type(type), debug(new QDebug(&msg)) { } inline Debug(const Debug &a) : type(a.type), debug(a.debug ? new QDebug(&msg) : 0) { if (debug) { (*debug) << qPrintable(a.msg); } } inline Debug &operator=(const Debug &a) { if (this != &a) { type = a.type; delete debug; debug = 0; if (a.debug) { debug = new QDebug(&msg); (*debug) << qPrintable(a.msg); } } return *this; } inline ~Debug() { if (!msg.isEmpty()) { invokeDebugCallback(); } delete debug; } inline Debug &space() { if (debug) { debug->space(); } return *this; } inline Debug &nospace() { if (debug) { debug->nospace(); } return *this; } inline Debug &maybeSpace() { if (debug) { debug->maybeSpace(); } return *this; } template inline Debug &operator<<(T a) { if (debug) { (*debug) << a; } return *this; } private: QString msg; QtMsgType type; QDebug *debug; void invokeDebugCallback(); }; // The telepathy-farsight Qt 4 binding links to these - they're not API outside // this source tarball, but they *are* ABI TP_QT_EXPORT Debug enabledDebug(); TP_QT_EXPORT Debug enabledWarning(); #ifdef ENABLE_DEBUG inline Debug debug() { return enabledDebug(); } inline Debug warning() { return enabledWarning(); } #else /* #ifdef ENABLE_DEBUG */ struct NoDebug { template NoDebug& operator<<(const T&) { return *this; } NoDebug& space() { return *this; } NoDebug& nospace() { return *this; } NoDebug& maybeSpace() { return *this; } }; inline NoDebug debug() { return NoDebug(); } inline NoDebug warning() { return NoDebug(); } #endif /* #ifdef ENABLE_DEBUG */ } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/pending-stream-tube-connection.cpp0000644000175200001440000002047512000056607027403 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/pending-stream-tube-connection.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include "TelepathyQt/types-internal.h" namespace Tp { struct TP_QT_NO_EXPORT PendingStreamTubeConnection::Private { Private(PendingStreamTubeConnection *parent); ~Private(); // Public object PendingStreamTubeConnection *parent; IncomingStreamTubeChannelPtr tube; SocketAddressType type; QHostAddress hostAddress; quint16 port; QString socketPath; bool requiresCredentials; uchar credentialByte; }; PendingStreamTubeConnection::Private::Private(PendingStreamTubeConnection *parent) : parent(parent), requiresCredentials(false), credentialByte(0) { } PendingStreamTubeConnection::Private::~Private() { } /** * \class PendingStreamTubeConnection * \ingroup clientchannel * \headerfile TelepathyQt/incoming-stream-tube-channel.h * * \brief The PendingStreamTubeConnection class represents an asynchronous * operation for accepting an incoming stream tube. * * See \ref async_model */ PendingStreamTubeConnection::PendingStreamTubeConnection( PendingVariant *acceptOperation, SocketAddressType type, bool requiresCredentials, uchar credentialByte, const IncomingStreamTubeChannelPtr &channel) : PendingOperation(channel), mPriv(new Private(this)) { mPriv->tube = channel; mPriv->type = type; mPriv->requiresCredentials = requiresCredentials; mPriv->credentialByte = credentialByte; /* keep track of channel invalidation */ connect(channel.data(), SIGNAL(invalidated(Tp::DBusProxy*,QString,QString)), SLOT(onChannelInvalidated(Tp::DBusProxy*,QString,QString))); debug() << "Calling StreamTube.Accept"; if (acceptOperation->isFinished()) { onAcceptFinished(acceptOperation); } else { connect(acceptOperation, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onAcceptFinished(Tp::PendingOperation*))); } } PendingStreamTubeConnection::PendingStreamTubeConnection( const QString& errorName, const QString& errorMessage, const IncomingStreamTubeChannelPtr &channel) : PendingOperation(channel), mPriv(new PendingStreamTubeConnection::Private(this)) { setFinishedWithError(errorName, errorMessage); } /** * Class destructor. */ PendingStreamTubeConnection::~PendingStreamTubeConnection() { delete mPriv; } /** * Return the type of the opened stream tube socket. * * \return The socket type as #SocketAddressType. * \see localAddress(), ipAddress() */ SocketAddressType PendingStreamTubeConnection::addressType() const { return mPriv->tube->addressType(); } /** * Return the local address of the opened stream tube socket. * * This method will return a meaningful value only if the incoming stream tube * was accepted as an Unix socket. * * \return Unix socket address if using an Unix socket, * or an undefined value otherwise. * \see addressType(), ipAddress() */ QString PendingStreamTubeConnection::localAddress() const { return mPriv->tube->localAddress(); } /** * Return the IP address/port combination of the opened stream tube socket. * * This method will return a meaningful value only if the incoming stream tube * was accepted as a TCP socket. * * \return Pair of IP address as QHostAddress and port if using a TCP socket, * or an undefined value otherwise. * \see addressType(), localAddress() */ QPair PendingStreamTubeConnection::ipAddress() const { return mPriv->tube->ipAddress(); } /** * Return whether sending a credential byte once connecting to the socket is required. * * Note that if this method returns \c true, one should send a SCM_CREDS or SCM_CREDENTIALS * and the credentialByte() once connected. If SCM_CREDS or SCM_CREDENTIALS cannot be sent, * the credentialByte() should still be sent. * * \return \c true if sending credentials is required, \c false otherwise. * \sa credentialByte() */ bool PendingStreamTubeConnection::requiresCredentials() const { return mPriv->requiresCredentials; } /** * Return the credential byte to send once connecting to the socket if requiresCredentials() is \c * true. * * \return The credential byte. * \sa requiresCredentials() */ uchar PendingStreamTubeConnection::credentialByte() const { return mPriv->credentialByte; } void PendingStreamTubeConnection::onChannelInvalidated(DBusProxy *proxy, const QString &errorName, const QString &errorMessage) { Q_UNUSED(proxy); if (isFinished()) { return; } warning().nospace() << "StreamTube.Accept failed because channel was invalidated with " << errorName << ": " << errorMessage; setFinishedWithError(errorName, errorMessage); } void PendingStreamTubeConnection::onAcceptFinished(PendingOperation *op) { if (isFinished()) { return; } if (op->isError()) { warning().nospace() << "StreamTube.Accept failed with " << op->errorName() << ": " << op->errorMessage(); setFinishedWithError(op->errorName(), op->errorMessage()); return; } debug() << "StreamTube.Accept returned successfully"; PendingVariant *pv = qobject_cast(op); // Build the address if (mPriv->type == SocketAddressTypeIPv4) { SocketAddressIPv4 addr = qdbus_cast(pv->result()); debug().nospace() << "Got address " << addr.address << ":" << addr.port; mPriv->hostAddress = QHostAddress(addr.address); mPriv->port = addr.port; } else if (mPriv->type == SocketAddressTypeIPv6) { SocketAddressIPv6 addr = qdbus_cast(pv->result()); debug().nospace() << "Got address " << addr.address << ":" << addr.port; mPriv->hostAddress = QHostAddress(addr.address); mPriv->port = addr.port; } else { // Unix socket mPriv->socketPath = QLatin1String(qdbus_cast(pv->result())); debug() << "Got socket " << mPriv->socketPath; } // It might have been already opened - check if (mPriv->tube->state() == TubeChannelStateOpen) { onTubeStateChanged(mPriv->tube->state()); } else { // Wait until the tube gets opened on the other side connect(mPriv->tube.data(), SIGNAL(stateChanged(Tp::TubeChannelState)), this, SLOT(onTubeStateChanged(Tp::TubeChannelState))); } } void PendingStreamTubeConnection::onTubeStateChanged(TubeChannelState state) { debug() << "Tube state changed to " << state; if (state == TubeChannelStateOpen) { // The tube is ready, populate its properties if (mPriv->type == SocketAddressTypeIPv4 || mPriv->type == SocketAddressTypeIPv6) { mPriv->tube->setIpAddress(qMakePair(mPriv->hostAddress, mPriv->port)); } else { // Unix socket mPriv->tube->setLocalAddress(mPriv->socketPath); } // Mark the operation as finished setFinished(); } else if (state != TubeChannelStateLocalPending) { // Something happened setFinishedWithError(QLatin1String("Connection refused"), QLatin1String("The connection to this tube was refused")); } } } telepathy-qt-0.9.3/TelepathyQt/room-list-channel.h0000644000175200001440000000333012000056607024363 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_room_list_channel_h_HEADER_GUARD_ #define _TelepathyQt_room_list_channel_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include namespace Tp { class TP_QT_EXPORT RoomListChannel : public Channel { Q_OBJECT Q_DISABLE_COPY(RoomListChannel) public: static RoomListChannelPtr create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties); virtual ~RoomListChannel(); protected: RoomListChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature = Channel::FeatureCore); private: struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/abstract-interface.cpp0000644000175200001440000001631312000056607025131 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/abstract-interface.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT AbstractInterface::Private { Private(); QString mError; QString mMessage; bool monitorProperties; }; AbstractInterface::Private::Private() : monitorProperties(false) { } /** * \class AbstractInterface * \ingroup clientsideproxies * \headerfile TelepathyQt/abstract-interface.h * * \brief The AbstractInterface class is the base class for all client side * D-Bus interfaces, allowing access to remote methods/properties/signals. */ AbstractInterface::AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &dbusConnection, QObject *parent) : QDBusAbstractInterface(busName, path, interface.latin1(), dbusConnection, parent), mPriv(new Private) { } AbstractInterface::AbstractInterface(DBusProxy *parent, const QLatin1String &interface) : QDBusAbstractInterface(parent->busName(), parent->objectPath(), interface.latin1(), parent->dbusConnection(), parent), mPriv(new Private) { connect(parent, SIGNAL(invalidated(Tp::DBusProxy*,QString,QString)), this, SLOT(invalidate(Tp::DBusProxy*,QString,QString))); } AbstractInterface::~AbstractInterface() { delete mPriv; } bool AbstractInterface::isValid() const { return QDBusAbstractInterface::isValid() && mPriv->mError.isEmpty(); } QString AbstractInterface::invalidationReason() const { return mPriv->mError; } QString AbstractInterface::invalidationMessage() const { return mPriv->mMessage; } void AbstractInterface::invalidate(DBusProxy *proxy, const QString &error, const QString &message) { Q_ASSERT(!error.isEmpty()); if (mPriv->mError.isEmpty()) { mPriv->mError = error; mPriv->mMessage = message; } } PendingVariant *AbstractInterface::internalRequestProperty(const QString &name) const { QDBusMessage msg = QDBusMessage::createMethodCall(service(), path(), TP_QT_IFACE_PROPERTIES, QLatin1String("Get")); msg << interface() << name; QDBusPendingCall pendingCall = connection().asyncCall(msg); DBusProxy *proxy = qobject_cast(parent()); return new PendingVariant(pendingCall, DBusProxyPtr(proxy)); } PendingOperation *AbstractInterface::internalSetProperty(const QString &name, const QVariant &newValue) { QDBusMessage msg = QDBusMessage::createMethodCall(service(), path(), TP_QT_IFACE_PROPERTIES, QLatin1String("Set")); msg << interface() << name << QVariant::fromValue(QDBusVariant(newValue)); QDBusPendingCall pendingCall = connection().asyncCall(msg); DBusProxy *proxy = qobject_cast(parent()); return new PendingVoid(pendingCall, DBusProxyPtr(proxy)); } PendingVariantMap *AbstractInterface::internalRequestAllProperties() const { QDBusMessage msg = QDBusMessage::createMethodCall(service(), path(), TP_QT_IFACE_PROPERTIES, QLatin1String("GetAll")); msg << interface(); QDBusPendingCall pendingCall = connection().asyncCall(msg); DBusProxy *proxy = qobject_cast(parent()); return new PendingVariantMap(pendingCall, DBusProxyPtr(proxy)); } /** * Sets whether this abstract interface will be monitoring properties or not. If it's set to monitor, * the signal propertiesChanged will be emitted whenever a property on this interface will * change. * * By default, AbstractInterface does not monitor properties: you need to call this method * for this to happen. * * \param monitorProperties Whether this interface should monitor property changes or not. * \sa isMonitoringProperties * propertiesChanged() */ void AbstractInterface::setMonitorProperties(bool monitorProperties) { if (monitorProperties == mPriv->monitorProperties) { return; } QStringList argumentMatch; argumentMatch << interface(); bool success; if (monitorProperties) { success = connection().connect(service(), path(), TP_QT_IFACE_PROPERTIES, QLatin1String("PropertiesChanged"), argumentMatch, QString(), this, SLOT(onPropertiesChanged(QString,QVariantMap,QStringList))); } else { success = connection().disconnect(service(), path(), TP_QT_IFACE_PROPERTIES, QLatin1String("PropertiesChanged"), argumentMatch, QString(), this, SLOT(onPropertiesChanged(QString,QVariantMap,QStringList))); } if (!success) { warning() << "Connection or disconnection to " << TP_QT_IFACE_PROPERTIES << ".PropertiesChanged failed."; } } /** * Return whether this abstract interface is monitoring properties or not. If it's monitoring, * the signal propertiesChanged will be emitted whenever a property on this interface will * change. * * By default, AbstractInterface does not monitor properties: you need to call setMonitorProperties * for this to happen. * * \return \c true if the interface is monitoring for property changes, \c false otherwise. * \sa setMonitorProperties * propertiesChanged() */ bool AbstractInterface::isMonitoringProperties() const { return mPriv->monitorProperties; } void AbstractInterface::onPropertiesChanged(const QString &interface, const QVariantMap &changedProperties, const QStringList &invalidatedProperties) { emit propertiesChanged(changedProperties, invalidatedProperties); } /** * \fn void AbstractInterface::propertiesChanged(const QVariantMap &changedProperties, * const QStringList &invalidatedProperties) * * Emitted when one or more properties on this interface change or become invalidated. * This signal will be emitted only if the interface is monitoring properties. * * \param changedProperties A map of the changed properties with their new value, if any. * \param invalidatedProperties A list of the invalidated properties, if any. * \sa isMonitoringProperties() */ } // Tp telepathy-qt-0.9.3/TelepathyQt/ChannelTypeTubeInterface0000644000175200001440000000042312000056607025455 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_Client_ChannelTypeTubeInterface_HEADER_GUARD_ #define _TelepathyQt_Client_ChannelTypeTubeInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/account-manager.xml0000644000175200001440000000036012000056607024445 0ustar00collabora-develusers00000000000000 Account Manager interfaces telepathy-qt-0.9.3/TelepathyQt/BaseConnectionManager0000644000175200001440000000041712000056607024772 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_BaseConnectionManager_HEADER_GUARD_ #define _TelepathyQt_BaseConnectionManager_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/pending-variant.cpp0000644000175200001440000000474612000056607024465 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/pending-variant.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include namespace Tp { struct TP_QT_NO_EXPORT PendingVariant::Private { QVariant result; }; /** * \class PendingVariant * \ingroup utils * \headerfile TelepathyQt/pending-variant.h * * \brief The PendingVariant class is a generic subclass of PendingOperation * representing a pending D-Bus method call that returns a variant. * * See \ref async_model */ PendingVariant::PendingVariant(QDBusPendingCall call, const SharedPtr &object) : PendingOperation(object), mPriv(new Private) { connect(new QDBusPendingCallWatcher(call), SIGNAL(finished(QDBusPendingCallWatcher*)), this, SLOT(watcherFinished(QDBusPendingCallWatcher*))); } /** * Class destructor. */ PendingVariant::~PendingVariant() { delete mPriv; } QVariant PendingVariant::result() const { return mPriv->result; } void PendingVariant::watcherFinished(QDBusPendingCallWatcher* watcher) { QDBusPendingReply reply = *watcher; if (!reply.isError()) { debug() << "Got reply to PendingVariant call"; mPriv->result = reply.value().variant(); setFinished(); } else { debug().nospace() << "PendingVariant call failed: " << reply.error().name() << ": " << reply.error().message(); setFinishedWithError(reply.error()); } watcher->deleteLater(); } } // Tp telepathy-qt-0.9.3/TelepathyQt/PendingVoid0000644000175200001440000000037512000056607023016 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_PendingVoid_HEADER_GUARD_ #define _TelepathyQt_PendingVoid_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/Feature0000644000175200001440000000034312000056607022176 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_Feature_HEADER_GUARD_ #define _TelepathyQt_Feature_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/base-connection.cpp0000644000175200001440000001402512000056607024435 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/base-connection-internal.h" #include "TelepathyQt/_gen/base-connection.moc.hpp" #include "TelepathyQt/_gen/base-connection-internal.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT BaseConnection::Private { Private(BaseConnection *parent, const QDBusConnection &dbusConnection, const QString &cmName, const QString &protocolName, const QVariantMap ¶meters) : parent(parent), cmName(cmName), protocolName(protocolName), parameters(parameters), adaptee(new BaseConnection::Adaptee(dbusConnection, parent)) { } BaseConnection *parent; QString cmName; QString protocolName; QVariantMap parameters; BaseConnection::Adaptee *adaptee; }; BaseConnection::Adaptee::Adaptee(const QDBusConnection &dbusConnection, BaseConnection *connection) : QObject(connection), mConnection(connection) { mAdaptor = new Service::ConnectionAdaptor(dbusConnection, this, connection->dbusObject()); } BaseConnection::Adaptee::~Adaptee() { } /** * \class BaseConnection * \ingroup serviceconn * \headerfile TelepathyQt/base-connection.h * * \brief Base class for Connection implementations. */ /** * Construct a BaseConnection. * * \param dbusConnection The D-Bus connection that will be used by this object. * \param cmName The name of the connection manager associated with this connection. * \param protocolName The name of the protocol associated with this connection. * \param parameters The parameters of this connection. */ BaseConnection::BaseConnection(const QDBusConnection &dbusConnection, const QString &cmName, const QString &protocolName, const QVariantMap ¶meters) : DBusService(dbusConnection), mPriv(new Private(this, dbusConnection, cmName, protocolName, parameters)) { } /** * Class destructor. */ BaseConnection::~BaseConnection() { delete mPriv; } /** * Return the name of the connection manager associated with this connection. * * \return The name of the connection manager associated with this connection. */ QString BaseConnection::cmName() const { return mPriv->cmName; } /** * Return the name of the protocol associated with this connection. * * \return The name of the protocol associated with this connection. */ QString BaseConnection::protocolName() const { return mPriv->protocolName; } /** * Return the parameters of this connection. * * \return The parameters of this connection. */ QVariantMap BaseConnection::parameters() const { return mPriv->parameters; } /** * Return the immutable properties of this connection object. * * Immutable properties cannot change after the object has been registered * on the bus with registerObject(). * * \return The immutable properties of this connection object. */ QVariantMap BaseConnection::immutableProperties() const { // FIXME return QVariantMap(); } /** * Return a unique name for this connection. * * \return A unique name for this connection. */ QString BaseConnection::uniqueName() const { return QString(QLatin1String("_%1")).arg((quintptr) this, 0, 16); } /** * Register this connection object on the bus. * * If \a error is passed, any D-Bus error that may occur will * be stored there. * * \param error A pointer to an empty DBusError where any * possible D-Bus error will be stored. * \return \c true on success and \c false if there was an error * or this connection object is already registered. * \sa isRegistered() */ bool BaseConnection::registerObject(DBusError *error) { if (isRegistered()) { return true; } if (checkValidProtocolName(mPriv->protocolName)) { if (error) { error->set(TP_QT_ERROR_INVALID_ARGUMENT, mPriv->protocolName + QLatin1String("is not a valid protocol name")); } debug() << "Unable to register connection - invalid protocol name"; return false; } QString escapedProtocolName = mPriv->protocolName; escapedProtocolName.replace(QLatin1Char('-'), QLatin1Char('_')); QString name = uniqueName(); QString busName = QString(QLatin1String("%1.%2.%3.%4")) .arg(TP_QT_CONNECTION_BUS_NAME_BASE, mPriv->cmName, escapedProtocolName, name); QString objectPath = QString(QLatin1String("%1/%2/%3/%4")) .arg(TP_QT_CONNECTION_OBJECT_PATH_BASE, mPriv->cmName, escapedProtocolName, name); DBusError _error; bool ret = registerObject(busName, objectPath, &_error); if (!ret && error) { error->set(_error.name(), _error.message()); } return ret; } /** * Reimplemented from DBusService. */ bool BaseConnection::registerObject(const QString &busName, const QString &objectPath, DBusError *error) { return DBusService::registerObject(busName, objectPath, error); } /** * \fn void BaseConnection::disconnected() * * Emitted when this connection has been disconnected. */ } telepathy-qt-0.9.3/TelepathyQt/handled-channel-notifier.cpp0000644000175200001440000000631212000056607026210 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/handled-channel-notifier.moc.hpp" #include "TelepathyQt/debug-internal.h" #include "TelepathyQt/request-temporary-handler-internal.h" #include #include namespace Tp { struct TP_QT_NO_EXPORT HandledChannelNotifier::Private { Private(const ClientRegistrarPtr &cr, const SharedPtr &handler) : cr(cr), handler(handler), channel(handler->channel()) { } ClientRegistrarPtr cr; SharedPtr handler; ChannelPtr channel; // needed to keep channel alive, since RTH maintains only a weak ref }; /** * \class HandledChannelNotifier * \ingroup clientchannel * \headerfile TelepathyQt/handled-channel-notifier.h * * \brief The HandledChannelNotifier class can be used to keep track of * channel() being re-requested. * * Instances of this class cannot be constructed directly; the only way to get * one is trough PendingChannel. */ HandledChannelNotifier::HandledChannelNotifier(const ClientRegistrarPtr &cr, const SharedPtr &handler) : mPriv(new Private(cr, handler)) { connect(mPriv->channel.data(), SIGNAL(invalidated(Tp::DBusProxy*,QString,QString)), SLOT(onChannelInvalidated())); connect(handler.data(), SIGNAL(channelReceived(Tp::ChannelPtr,QDateTime,Tp::ChannelRequestHints)), SLOT(onChannelReceived(Tp::ChannelPtr,QDateTime,Tp::ChannelRequestHints))); } HandledChannelNotifier::~HandledChannelNotifier() { delete mPriv; } ChannelPtr HandledChannelNotifier::channel() const { return mPriv->channel; } void HandledChannelNotifier::onChannelReceived(const Tp::ChannelPtr &channel, const QDateTime &userActionTime, const Tp::ChannelRequestHints &requestHints) { emit handledAgain(userActionTime, requestHints); } void HandledChannelNotifier::onChannelInvalidated() { deleteLater(); } void HandledChannelNotifier::connectNotify(const char *signalName) { if (qstrcmp(signalName, SIGNAL(handledAgain(QDateTime,Tp::ChannelRequestHints))) == 0) { mPriv->handler->setQueueChannelReceived(false); } } } // Tp telepathy-qt-0.9.3/TelepathyQt/MediaStreamHandler0000644000175200001440000000040612000056607024274 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_MediaStreamHandler_HEADER_GUARD_ #define _TelepathyQt_MediaStreamHandler_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/pending-debug-message-list.cpp0000644000175200001440000000372012000056607026471 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011-2012 Collabora Ltd. * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/pending-debug-message-list.moc.hpp" #include namespace Tp { struct TP_QT_NO_EXPORT PendingDebugMessageList::Private { DebugMessageList result; }; PendingDebugMessageList::PendingDebugMessageList(const QDBusPendingCall &call, const SharedPtr &object) : PendingOperation(object), mPriv(new Private) { connect(new QDBusPendingCallWatcher(call), SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(watcherFinished(QDBusPendingCallWatcher*))); } PendingDebugMessageList::~PendingDebugMessageList() { delete mPriv; } DebugMessageList PendingDebugMessageList::result() const { return mPriv->result; } void PendingDebugMessageList::watcherFinished(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (reply.isError()) { setFinishedWithError(reply.error()); } else { mPriv->result = reply.value(); setFinished(); } watcher->deleteLater(); } } // Tp telepathy-qt-0.9.3/TelepathyQt/ConnectionInterfacePresenceInterface0000644000175200001440000000044012000056607030027 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ConnectionInterfacePresenceInterface_HEADER_GUARD_ #define _TelepathyQt_ConnectionInterfacePresenceInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/call-stream-endpoint.cpp0000644000175200001440000000212012000056607025401 0ustar00collabora-develusers00000000000000/* * This file is part of TelepathyQt4 * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/cli-call-stream-endpoint-body.hpp" #include "TelepathyQt/_gen/cli-call-stream-endpoint.moc.hpp" telepathy-qt-0.9.3/TelepathyQt/channel-internal.h0000644000175200001440000000327312000056607024260 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_channel_internal_h_HEADER_GUARD_ #define _TelepathyQt_channel_internal_h_HEADER_GUARD_ #include #include namespace Tp { class TP_QT_NO_EXPORT Channel::PendingLeave : public PendingOperation { Q_OBJECT public: PendingLeave(const ChannelPtr &channel, const QString &message, ChannelGroupChangeReason reason); private Q_SLOTS: TP_QT_NO_EXPORT void onChanInvalidated(Tp::DBusProxy *proxy); TP_QT_NO_EXPORT void onRemoveFinished(Tp::PendingOperation *); TP_QT_NO_EXPORT void onMembersChanged(const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &); TP_QT_NO_EXPORT void onCloseFinished(Tp::PendingOperation *); }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/debug.h0000644000175200001440000000275412000056607022127 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2009 Collabora Ltd. * @copyright Copyright (C) 2008-2009 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_debug_h_HEADER_GUARD_ #define _TelepathyQt_debug_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include namespace Tp { TP_QT_EXPORT void enableDebug(bool enable); TP_QT_EXPORT void enableWarnings(bool enable); typedef void (*DebugCallback)(const QString &libraryName, const QString &libraryVersion, QtMsgType type, const QString &msg); TP_QT_EXPORT void setDebugCallback(DebugCallback cb); } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/ChannelTypeStreamedMediaInterface0000644000175200001440000000042712000056607027266 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelTypeStreamedMediaInterface_HEADER_GUARD_ #define _TelepathyQt_ChannelTypeStreamedMediaInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/stream-tube-client.h0000644000175200001440000001617512000056607024547 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_stream_tube_client_h_HEADER_GUARD_ #define _TelepathyQt_stream_tube_client_h_HEADER_GUARD_ #include #include #include #include #include #include class QHostAddress; namespace Tp { class PendingStreamTubeConnection; class TP_QT_EXPORT StreamTubeClient : public QObject, public RefCounted { Q_OBJECT Q_DISABLE_COPY(StreamTubeClient) class TubeWrapper; public: class TcpSourceAddressGenerator { public: virtual QPair nextSourceAddress(const AccountPtr &account, const IncomingStreamTubeChannelPtr &tube) = 0; protected: virtual ~TcpSourceAddressGenerator() {} }; class Tube : public QPair { public: Tube(); Tube(const AccountPtr &account, const IncomingStreamTubeChannelPtr &channel); Tube(const Tube &other); ~Tube(); bool isValid() const { return mPriv.constData() != 0; } Tube &operator=(const Tube &other); const AccountPtr &account() const { return first; } const IncomingStreamTubeChannelPtr &channel() const { return second; } private: struct Private; friend struct Private; QSharedDataPointer mPriv; }; static StreamTubeClientPtr create( const QStringList &p2pServices, const QStringList &roomServices = QStringList(), const QString &clientName = QString(), bool monitorConnections = false, bool bypassApproval = false, const AccountFactoryConstPtr &accountFactory = AccountFactory::create(QDBusConnection::sessionBus()), const ConnectionFactoryConstPtr &connectionFactory = ConnectionFactory::create(QDBusConnection::sessionBus()), const ChannelFactoryConstPtr &channelFactory = ChannelFactory::create(QDBusConnection::sessionBus()), const ContactFactoryConstPtr &contactFactory = ContactFactory::create()); static StreamTubeClientPtr create( const QDBusConnection &bus, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory, const QStringList &p2pServices, const QStringList &roomServices = QStringList(), const QString &clientName = QString(), bool monitorConnections = false, bool bypassApproval = false); static StreamTubeClientPtr create( const AccountManagerPtr &accountManager, const QStringList &p2pServices, const QStringList &roomServices = QStringList(), const QString &clientName = QString(), bool monitorConnections = false, bool bypassApproval = false); static StreamTubeClientPtr create( const ClientRegistrarPtr ®istrar, const QStringList &p2pServices, const QStringList &roomServices = QStringList(), const QString &clientName = QString(), bool monitorConnections = false, bool bypassApproval = false); virtual ~StreamTubeClient(); ClientRegistrarPtr registrar() const; QString clientName() const; bool isRegistered() const; bool monitorsConnections() const; bool acceptsAsTcp() const; TcpSourceAddressGenerator *tcpGenerator() const; bool acceptsAsUnix() const; void setToAcceptAsTcp(TcpSourceAddressGenerator *generator = 0); void setToAcceptAsUnix(bool requireCredentials = false); QList tubes() const; QHash > connections() const; Q_SIGNALS: void tubeOffered( const Tp::AccountPtr &account, const Tp::IncomingStreamTubeChannelPtr &tube); void tubeClosed( const Tp::AccountPtr &account, const Tp::IncomingStreamTubeChannelPtr &tube, const QString &error, const QString &message); void tubeAcceptedAsTcp( const QHostAddress &listenAddress, quint16 listenPort, const QHostAddress &sourceAddress, quint16 sourcePort, const Tp::AccountPtr &account, const Tp::IncomingStreamTubeChannelPtr &tube); void tubeAcceptedAsUnix( const QString &listenAddress, bool requiresCredentials, uchar credentialByte, const Tp::AccountPtr &account, const Tp::IncomingStreamTubeChannelPtr &tube); void newConnection( const Tp::AccountPtr &account, const Tp::IncomingStreamTubeChannelPtr &tube, uint connectionId); void connectionClosed( const Tp::AccountPtr &account, const Tp::IncomingStreamTubeChannelPtr &tube, uint connectionId, const QString &error, const QString &message); private Q_SLOTS: TP_QT_NO_EXPORT void onInvokedForTube( const Tp::AccountPtr &account, const Tp::StreamTubeChannelPtr &tube, const QDateTime &userActionTime, const Tp::ChannelRequestHints &requestHints); TP_QT_NO_EXPORT void onAcceptFinished(TubeWrapper *, Tp::PendingStreamTubeConnection *); TP_QT_NO_EXPORT void onTubeInvalidated(Tp::DBusProxy *, const QString &, const QString &); TP_QT_NO_EXPORT void onNewConnection( TubeWrapper *wrapper, uint conn); TP_QT_NO_EXPORT void onConnectionClosed( TubeWrapper *wrapper, uint conn, const QString &error, const QString &message); private: TP_QT_NO_EXPORT StreamTubeClient( const ClientRegistrarPtr ®istrar, const QStringList &p2pServices, const QStringList &roomServices, const QString &clientName, bool monitorConnections, bool bypassApproval); struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/OutgoingDBusTubeChannel0000644000175200001440000000042612000056607025267 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_OutgoingDBusTubeChannel_HEADER_GUARD_ #define _TelepathyQt_OutgoingDBusTubeChannel_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/Debug0000644000175200001440000000033512000056607021632 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_Debug_HEADER_GUARD_ #define _TelepathyQt_Debug_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/ChannelTypeFileTransferInterface0000644000175200001440000000042512000056607027144 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelTypeFileTransferInterface_HEADER_GUARD_ #define _TelepathyQt_ChannelTypeFileTransferInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/PendingVariant0000644000175200001440000000037112000056607023515 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_PendingVariant_HEADER_GUARD_ #define _TelepathyQt_PendingVariant_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/protocol-info.cpp0000644000175200001440000003455212000056607024167 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT ProtocolInfo::Private : public QSharedData { Private() : dbusConnection(QDBusConnection::sessionBus()), // make the compiler happy addressingIface(0) { } Private(const ConnectionManagerPtr &cm, const QString &name) : dbusConnection(cm->dbusConnection()), busName(cm->busName()), cmName(cm->name()), name(name), iconName(QString(QLatin1String("im-%1")).arg(name)), addressingIface(0) { QString escapedProtocolName = name; escapedProtocolName.replace(QLatin1Char('-'), QLatin1Char('_')); objectPath = QString(QLatin1String("%1/%2")).arg(cm->objectPath()).arg(escapedProtocolName); } ~Private() { delete addressingIface; } Client::ProtocolInterfaceAddressingInterface *addressingInterface() { if (!addressingIface) { addressingIface = new Client::ProtocolInterfaceAddressingInterface( dbusConnection, busName, objectPath); } return addressingIface; } QDBusConnection dbusConnection; QString busName; QString objectPath; QString cmName; QString name; ProtocolParameterList params; ConnectionCapabilities caps; QString vcardField; QString englishName; QString iconName; PresenceSpecList statuses; AvatarSpec avatarRequirements; QStringList addressableVCardFields; QStringList addressableUriSchemes; Client::ProtocolInterfaceAddressingInterface *addressingIface; }; /** * \class ProtocolInfo * \ingroup clientcm * \headerfile TelepathyQt/protocol-info.h * * \brief The ProtocolInfo class represents a Telepathy Protocol. */ ProtocolInfo::ProtocolInfo() { } /** * Construct a new ProtocolInfo object. * * \param cm Connection manager owning this ProtocolInfo. * \param name Protocol name. */ ProtocolInfo::ProtocolInfo(const ConnectionManagerPtr &cm, const QString &name) : mPriv(new Private(cm, name)) { } ProtocolInfo::ProtocolInfo(const ProtocolInfo &other) : mPriv(other.mPriv) { } /** * Class destructor. */ ProtocolInfo::~ProtocolInfo() { } ProtocolInfo &ProtocolInfo::operator=(const ProtocolInfo &other) { this->mPriv = other.mPriv; return *this; } /** * Return the short name of the connection manager (e.g. "gabble") for this protocol. * * \return The name of the connection manager for this protocol. */ QString ProtocolInfo::cmName() const { if (!isValid()) { return QString(); } return mPriv->cmName; } /** * Return the string identifying this protocol as described in the \telepathy_spec * (e.g. "jabber"). * * This identifier is not intended to be displayed to users directly; user * interfaces are responsible for mapping them to localized strings. * * \return A string identifying this protocol. */ QString ProtocolInfo::name() const { if (!isValid()) { return QString(); } return mPriv->name; } /** * Return all supported parameters for this protocol. The parameters' names * may either be the well-known strings specified by the \telepathy_spec * (e.g. "account" and "password"), or implementation-specific strings. * * \return A list of parameters for this protocol. */ ProtocolParameterList ProtocolInfo::parameters() const { if (!isValid()) { return ProtocolParameterList(); } return mPriv->params; } /** * Return whether a given parameter can be passed to the connection * manager when creating a connection to this protocol. * * \param name The name of a parameter. * \return true if the given parameter exists. */ bool ProtocolInfo::hasParameter(const QString &name) const { if (!isValid()) { return false; } foreach (const ProtocolParameter ¶m, mPriv->params) { if (param.name() == name) { return true; } } return false; } /** * Return whether it might be possible to register new accounts on this * protocol, by setting the special parameter named * register to true. * * \return The same thing as hasParameter("register"). * \sa hasParameter() */ bool ProtocolInfo::canRegister() const { if (!isValid()) { return false; } return hasParameter(QLatin1String("register")); } /** * Return the capabilities that are expected to be available from a connection * to this protocol, i.e. those for which Connection::createChannel() can * reasonably be expected to succeed. * User interfaces can use this information to show or hide UI components. * * @return An object representing the capabilities expected to be available from * a connection to this protocol. */ ConnectionCapabilities ProtocolInfo::capabilities() const { if (!isValid()) { return ConnectionCapabilities(); } return mPriv->caps; } /** * Return the name of the most common vcard field used for this protocol's * contact identifiers, normalized to lower case. * * One valid use of this field is to answer the question: given a contact's * vcard containing an X-JABBER field, how can you communicate with the contact? * By iterating through protocols looking for an x-jabber VCardField, one can * build up a list of protocols that handle x-jabber, then offer the user a list * of accounts for those protocols and/or the option to create a new account for * one of those protocols. * It is not necessarily valid to interpret contacts' identifiers as values of * this vcard field. For instance, telepathy-sofiasip supports contacts whose * identifiers are of the form sip:jenny@example.com or tel:8675309, which would * not normally both be represented by any single vcard field. * * \return The most common vcard field used for this protocol's contact * identifiers, or an empty string if there is no such field. */ QString ProtocolInfo::vcardField() const { if (!isValid()) { return QString(); } return mPriv->vcardField; } /** * Return the English-language name of this protocol, such as "AIM" or "Yahoo!". * * The name can be used as a fallback if an application doesn't have a localized name for this * protocol. * * If the manager file or the CM service doesn't specify the english name, it is inferred from this * protocol name, such that for example "google-talk" becomes "Google Talk", but "local-xmpp" * becomes "Local Xmpp". * * \return An English-language name for this protocol. */ QString ProtocolInfo::englishName() const { if (!isValid()) { return QString(); } return mPriv->englishName; } /** * Return the name of an icon for this protocol in the system's icon theme, such as "im-msn". * * If the manager file or the CM service doesn't specify the icon name, "im-" is * assumed. * * \return The likely name of an icon for this protocol. */ QString ProtocolInfo::iconName() const { if (!isValid()) { return QString(); } return mPriv->iconName; } /** * Return a list of PresenceSpec representing the possible presence statuses * from a connection to this protocol. * * \return A list of PresenceSpec representing the possible presence statuses * from a connection to this protocol. */ PresenceSpecList ProtocolInfo::allowedPresenceStatuses() const { if (!isValid()) { return PresenceSpecList(); } return mPriv->statuses; } /** * Return the requirements (size limits, supported MIME types, etc) * for avatars used on to this protocol. * * \return The requirements for avatars used on this protocol. */ AvatarSpec ProtocolInfo::avatarRequirements() const { if (!isValid()) { return AvatarSpec(); } return mPriv->avatarRequirements; } /** * Return the vcard fields that can be used to request a contact with on this protocol, * normalized to lower case. * * \return The vcard fields normalized to lower case. * \sa addressableUriSchemes() */ QStringList ProtocolInfo::addressableVCardFields() const { if (!isValid()) { return QStringList(); } return mPriv->addressableVCardFields; } /** * Return the URI schemes that are supported by this protocol. * * \return The URI schemes. * \sa addressableVCardFields() */ QStringList ProtocolInfo::addressableUriSchemes() const { if (!isValid()) { return QStringList(); } return mPriv->addressableUriSchemes; } /** * Attempt to normalize the given \a vcardAddress. * * For example, a vcard TEL field formatted as +1 (206) 555 1234, * could be normalized to +12065551234. * * If a vcard address X would be normalized to Y, a successful ContactManager * contact request using ContactManager::contactsForVCardAddresses() for * vcard address X would result in a contact with Y reported as an * address that can identify it in Contact::vcardAddresses(). * * \param vcardField The vcard field the \a vcardAddress belongs to. * \param vcardAddress The address to normalize. * \return A PendingString which will emit PendingString::finished * when the address has been normalized or an error occurred. * \sa normalizeContactUri() */ PendingString *ProtocolInfo::normalizeVCardAddress(const QString &vcardField, const QString &vcardAddress) { if (!isValid()) { return new PendingString(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Protocol object is invalid")); } Client::ProtocolInterfaceAddressingInterface *iface = mPriv->addressingInterface(); if (!iface->isValid()) { // cm is still valid but no Protocol object found return new PendingString(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("ConnectionManager does not support Protocol.I.Addressing")); } return new PendingString(iface->NormalizeVCardAddress(vcardField, vcardAddress), SharedPtr()); } /** * Attempt to normalize the given contact \a uri. * * If the URI has extra information beyond what's necessary to identify a particular contact, such * as an XMPP resource or an action to carry out, this extra information wil be removed. * * An example would be xmpp:romeo@Example.Com/Empathy?message;body=Hello, which would be normalized * to xmpp:romeo@example.com. * * If a URI address X would be normalized to Y, a successful ContactManager * contact request using ContactManager::contactsForUris() for * URI address X would result in a contact with Y reported as an * address that can identify it in Contact::uris(). * * \param uri The URI to normalize. * \return A PendingString which will emit PendingString::finished * when the \a uri has been normalized or an error occurred. * \sa normalizeVCardAddress() */ PendingString *ProtocolInfo::normalizeContactUri(const QString &uri) { if (!isValid()) { return new PendingString(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Protocol object is invalid")); } Client::ProtocolInterfaceAddressingInterface *iface = mPriv->addressingInterface(); if (!iface->isValid()) { // cm is still valid but no Protocol object found return new PendingString(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("ConnectionManager does not support Protocol.I.Addressing")); } return new PendingString(iface->NormalizeContactURI(uri), SharedPtr()); } void ProtocolInfo::addParameter(const ParamSpec &spec) { if (!isValid()) { mPriv = new Private; } QVariant defaultValue; if (spec.flags & ConnMgrParamFlagHasDefault) { defaultValue = spec.defaultValue.variant(); } uint flags = spec.flags; if (spec.name.endsWith(QLatin1String("password"))) { flags |= ConnMgrParamFlagSecret; } ProtocolParameter param(spec.name, QDBusSignature(spec.signature), (ConnMgrParamFlag) flags, defaultValue); mPriv->params.append(param); } void ProtocolInfo::setVCardField(const QString &vcardField) { if (!isValid()) { mPriv = new Private; } mPriv->vcardField = vcardField; } void ProtocolInfo::setEnglishName(const QString &englishName) { if (!isValid()) { mPriv = new Private; } mPriv->englishName = englishName; } void ProtocolInfo::setIconName(const QString &iconName) { if (!isValid()) { mPriv = new Private; } mPriv->iconName = iconName; } void ProtocolInfo::setRequestableChannelClasses( const RequestableChannelClassList &caps) { if (!isValid()) { mPriv = new Private; } mPriv->caps.updateRequestableChannelClasses(caps); } void ProtocolInfo::setAllowedPresenceStatuses(const PresenceSpecList &statuses) { if (!isValid()) { mPriv = new Private; } mPriv->statuses = statuses; } void ProtocolInfo::setAvatarRequirements(const AvatarSpec &avatarRequirements) { if (!isValid()) { mPriv = new Private; } mPriv->avatarRequirements = avatarRequirements; } void ProtocolInfo::setAddressableVCardFields(const QStringList &vcardFields) { if (!isValid()) { mPriv = new Private; } mPriv->addressableVCardFields = vcardFields; } void ProtocolInfo::setAddressableUriSchemes(const QStringList &uriSchemes) { if (!isValid()) { mPriv = new Private; } mPriv->addressableUriSchemes = uriSchemes; } } // Tp telepathy-qt-0.9.3/TelepathyQt/and-filter.h0000644000175200001440000000445412000056607023065 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_and_filter_h_HEADER_GUARD_ #define _TelepathyQt_and_filter_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include namespace Tp { template class AndFilter : public Filter { public: static SharedPtr > create( const QList > > &filters = QList > >()) { return SharedPtr >(new AndFilter(filters)); } inline virtual ~AndFilter() { } inline virtual bool isValid() const { Q_FOREACH (const SharedPtr > &filter, mFilters) { if (!filter || !filter->isValid()) { return false; } } return true; } inline virtual bool matches(const SharedPtr &t) const { if (!isValid()) { return false; } Q_FOREACH (const SharedPtr > &filter, mFilters) { if (!filter->matches(t)) { return false; } } return true; } inline QList > > filters() const { return mFilters; } private: AndFilter(const QList > > &filters) : Filter(), mFilters(filters) { } QList > > mFilters; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/AbstractClient0000644000175200001440000000037112000056607023506 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_AbstractClient_HEADER_GUARD_ #define _TelepathyQt_AbstractClient_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/pending-handles.cpp0000644000175200001440000003761412000056607024437 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008 Collabora Ltd. * @copyright Copyright (C) 2008 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/pending-handles.moc.hpp" #include #include #include "TelepathyQt/debug-internal.h" namespace Tp { struct TP_QT_NO_EXPORT PendingHandles::Private { HandleType handleType; bool isRequest; QStringList namesRequested; UIntList handlesToReference; ReferencedHandles handles; ReferencedHandles alreadyHeld; UIntList invalidHandles; QStringList validNames; QHash > invalidNames; // one to one requests (ids) QHash handlesForWatchers; QHash idsForWatchers; QHash handlesForIds; int requestsFinished; }; /** * \class PendingHandles * \ingroup clientconn * \headerfile TelepathyQt/pending-handles.h * * \brief The PendingHandles class represents the parameters of and the reply to * an asynchronous handle request/hold. * * Instances of this class cannot be constructed directly; the only way to get * one is to use Connection::requestHandles() or Connection::referenceHandles(). * * See \ref async_model */ PendingHandles::PendingHandles(const ConnectionPtr &connection, HandleType handleType, const QStringList &names) : PendingOperation(connection), mPriv(new Private) { debug() << "PendingHandles(request)"; mPriv->handleType = handleType; mPriv->isRequest = true; mPriv->namesRequested = names; mPriv->requestsFinished = 0; // try to request all handles at once QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( connection->baseInterface()->RequestHandles(mPriv->handleType, names), this); connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(onRequestHandlesFinished(QDBusPendingCallWatcher*))); } PendingHandles::PendingHandles(const ConnectionPtr &connection, HandleType handleType, const UIntList &handles, const UIntList &alreadyHeld, const UIntList ¬YetHeld) : PendingOperation(connection), mPriv(new Private) { debug() << "PendingHandles(reference)"; mPriv->handleType = handleType; mPriv->isRequest = false; mPriv->handlesToReference = handles; mPriv->alreadyHeld = ReferencedHandles(connection, mPriv->handleType, alreadyHeld); mPriv->requestsFinished = 0; if (notYetHeld.isEmpty()) { debug() << " All handles already held, finishing up instantly"; mPriv->handles = mPriv->alreadyHeld; setFinished(); } else { debug() << " Calling HoldHandles"; QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( connection->baseInterface()->HoldHandles(mPriv->handleType, notYetHeld), this); connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(onHoldHandlesFinished(QDBusPendingCallWatcher*))); } } PendingHandles::PendingHandles(const QString &errorName, const QString &errorMessage) : PendingOperation(ConnectionPtr()), mPriv(new Private) { setFinishedWithError(errorName, errorMessage); } /** * Class destructor. */ PendingHandles::~PendingHandles() { delete mPriv; } /** * Return the connection through which the operation was made. * * \return A pointer to the Connection object. */ ConnectionPtr PendingHandles::connection() const { return ConnectionPtr(qobject_cast((Connection*) object().data())); } /** * Return the handle type specified in the operation. * * \return The target handle type as #HandleType. */ HandleType PendingHandles::handleType() const { return mPriv->handleType; } /** * Return whether the operation was a handle request (as opposed to a * reference of existing handles). * * \return \c true if the operation was a request (== !isReference()), \c false otherwise. * \sa isReference() */ bool PendingHandles::isRequest() const { return mPriv->isRequest; } /** * Return whether the operation was a handle reference (as opposed to a * request for new handles). * * \return \c true if the operation was a reference (== !isRequest()), \c false otherwise. * \sa isRequest() */ bool PendingHandles::isReference() const { return !mPriv->isRequest; } /** * If the operation was a request (as returned by isRequest()), returns the * names of the entities for which handles were requested for. Otherwise, * returns an empty list. * * \return Reference to a list of the names of the entities. */ const QStringList &PendingHandles::namesRequested() const { return mPriv->namesRequested; } QStringList PendingHandles::validNames() const { if (!isFinished()) { warning() << "PendingHandles::validNames called before finished"; return QStringList(); } else if (!isValid()) { warning() << "PendingHandles::validNames called when not valid"; return QStringList(); } return mPriv->validNames; } QHash > PendingHandles::invalidNames() const { if (!isFinished()) { warning() << "PendingHandles::invalidNames called before finished"; return QHash >(); } return mPriv->invalidNames; } /** * If the operation was a reference (as returned by isReference()), returns * the handles which were to be referenced. Otherwise, returns an empty * list. * * \return Reference to a list of the handles specified to be referenced. */ const UIntList &PendingHandles::handlesToReference() const { return mPriv->handlesToReference; } /** * Return the now-referenced handles resulting from the operation. If the * operation has not (yet) finished successfully (isFinished() returns * false), the return value is undefined. * * For requests of new handles, handles()[i] will be the handle * corresponding to the entity name namesToRequest()[i]. For * references of existing handles, handles()[i] == * handlesToReference()[i] will be true for any i. * * \return ReferencedHandles object containing the handles. */ ReferencedHandles PendingHandles::handles() const { if (!isFinished()) { warning() << "PendingHandles::handles() called before finished"; return ReferencedHandles(); } else if (!isValid()) { warning() << "PendingHandles::handles() called when not valid"; return ReferencedHandles(); } return mPriv->handles; } UIntList PendingHandles::invalidHandles() const { if (!isFinished()) { warning() << "PendingHandles::invalidHandles called before finished"; } return mPriv->invalidHandles; } void PendingHandles::onRequestHandlesFinished(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (reply.isError()) { QDBusError error = reply.error(); if (error.name() != TP_QT_ERROR_INVALID_HANDLE && error.name() != TP_QT_ERROR_INVALID_ARGUMENT && error.name() != TP_QT_ERROR_NOT_AVAILABLE) { // do not fallback foreach (const QString &name, mPriv->namesRequested) { mPriv->invalidNames.insert(name, QPair(error.name(), error.message())); } setFinishedWithError(error); connection()->handleRequestLanded(mPriv->handleType); watcher->deleteLater(); return; } if (mPriv->namesRequested.size() == 1) { debug().nospace() << " Failure: error " << reply.error().name() << ": " << reply.error().message(); mPriv->invalidNames.insert(mPriv->namesRequested.first(), QPair(error.name(), error.message())); setFinished(); connection()->handleRequestLanded(mPriv->handleType); watcher->deleteLater(); return; } // try to request one handles at a time foreach (const QString &name, mPriv->namesRequested) { QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( connection()->baseInterface()->RequestHandles( mPriv->handleType, QStringList() << name), this); connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(onRequestHandlesFallbackFinished(QDBusPendingCallWatcher*))); mPriv->idsForWatchers.insert(watcher, name); } } else { debug() << "Received reply to RequestHandles"; mPriv->handles = ReferencedHandles(connection(), mPriv->handleType, reply.value()); mPriv->validNames.append(mPriv->namesRequested); setFinished(); connection()->handleRequestLanded(mPriv->handleType); } } void PendingHandles::onHoldHandlesFinished(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; debug() << "Received reply to HoldHandles"; if (reply.isError()) { debug().nospace() << " Failure: error " << reply.error().name() << ": " << reply.error().message(); QDBusError error = reply.error(); if (error.name() != TP_QT_ERROR_INVALID_HANDLE && error.name() != TP_QT_ERROR_INVALID_ARGUMENT && error.name() != TP_QT_ERROR_NOT_AVAILABLE) { // do not fallback mPriv->invalidHandles = mPriv->handlesToReference; setFinishedWithError(error); watcher->deleteLater(); return; } if (mPriv->handlesToReference.size() == 1) { debug().nospace() << " Failure: error " << reply.error().name() << ": " << reply.error().message(); mPriv->invalidHandles = mPriv->handlesToReference; setFinished(); watcher->deleteLater(); return; } // try to request one handles at a time foreach (uint handle, mPriv->handlesToReference) { QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( connection()->baseInterface()->HoldHandles( mPriv->handleType, UIntList() << handle), this); connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(onHoldHandlesFallbackFinished(QDBusPendingCallWatcher*))); mPriv->handlesForWatchers.insert(watcher, handle); } } else { mPriv->handles = ReferencedHandles(connection(), mPriv->handleType, mPriv->handlesToReference); setFinished(); } watcher->deleteLater(); } void PendingHandles::onRequestHandlesFallbackFinished(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; Q_ASSERT(mPriv->idsForWatchers.contains(watcher)); QString id = mPriv->idsForWatchers.value(watcher); debug() << "Received reply to RequestHandles(" << id << ")"; if (reply.isError()) { debug().nospace() << " Failure: error " << reply.error().name() << ": " << reply.error().message(); // if the error is disconnected for example, fail immediately QDBusError error = reply.error(); if (error.name() != TP_QT_ERROR_INVALID_HANDLE && error.name() != TP_QT_ERROR_INVALID_ARGUMENT && error.name() != TP_QT_ERROR_NOT_AVAILABLE) { foreach (const QString &name, mPriv->namesRequested) { mPriv->invalidNames.insert(name, QPair(error.name(), error.message())); } setFinishedWithError(error); connection()->handleRequestLanded(mPriv->handleType); watcher->deleteLater(); return; } mPriv->invalidNames.insert(id, QPair(reply.error().name(), reply.error().message())); } else { Q_ASSERT(reply.value().size() == 1); uint handle = reply.value().first(); mPriv->handlesForIds.insert(id, handle); } if (++mPriv->requestsFinished == mPriv->namesRequested.size()) { if (mPriv->handlesForIds.size() == 0) { // all requests failed setFinished(); } else { // all requests either failed or finished successfully // we need to return the handles in the same order as requested UIntList handles; foreach (const QString &name, mPriv->namesRequested) { if (!mPriv->invalidNames.contains(name)) { Q_ASSERT(mPriv->handlesForIds.contains(name)); handles.append(mPriv->handlesForIds.value(name)); mPriv->validNames.append(name); } } mPriv->handles = ReferencedHandles(connection(), mPriv->handleType, handles); setFinished(); } debug() << " namesRequested:" << mPriv->namesRequested; debug() << " invalidNames :" << mPriv->invalidNames; debug() << " validNames :" << mPriv->validNames; connection()->handleRequestLanded(mPriv->handleType); } watcher->deleteLater(); } void PendingHandles::onHoldHandlesFallbackFinished(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; Q_ASSERT(mPriv->handlesForWatchers.contains(watcher)); uint handle = mPriv->handlesForWatchers.value(watcher); debug() << "Received reply to HoldHandles(" << handle << ")"; if (reply.isError()) { debug().nospace() << " Failure: error " << reply.error().name() << ": " << reply.error().message(); // if the error is disconnected for example, fail immediately QDBusError error = reply.error(); if (error.name() != TP_QT_ERROR_INVALID_HANDLE && error.name() != TP_QT_ERROR_INVALID_ARGUMENT && error.name() != TP_QT_ERROR_NOT_AVAILABLE) { mPriv->invalidHandles = mPriv->handlesToReference; setFinishedWithError(error); watcher->deleteLater(); return; } mPriv->invalidHandles.append(handle); } if (++mPriv->requestsFinished == mPriv->namesRequested.size()) { // we need to return the handles in the same order as requested UIntList handles; foreach (uint handle, mPriv->handlesToReference) { if (!mPriv->invalidHandles.contains(handle)) { handles.append(handle); } } if (handles.size() != 0) { mPriv->handles = ReferencedHandles(connection(), mPriv->handleType, handles); } setFinished(); } watcher->deleteLater(); } } // Tp telepathy-qt-0.9.3/TelepathyQt/simple-call-observer.h0000644000175200001440000000662512000056607025071 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_simple_call_observer_h_HEADER_GUARD_ #define _TelepathyQt_simple_call_observer_h_HEADER_GUARD_ #include #include #include namespace Tp { class PendingOperation; class TP_QT_EXPORT SimpleCallObserver : public QObject, public RefCounted { Q_OBJECT Q_DISABLE_COPY(SimpleCallObserver) Q_FLAGS(CallDirection CallDirections) public: enum CallDirection { CallDirectionIncoming = 0x01, CallDirectionOutgoing = 0x02, CallDirectionBoth = CallDirectionIncoming | CallDirectionOutgoing }; Q_DECLARE_FLAGS(CallDirections, CallDirection) static SimpleCallObserverPtr create(const AccountPtr &account, CallDirection direction = CallDirectionBoth); static SimpleCallObserverPtr create(const AccountPtr &account, const ContactPtr &contact, CallDirection direction = CallDirectionBoth); static SimpleCallObserverPtr create(const AccountPtr &account, const QString &contactIdentifier, CallDirection direction = CallDirectionBoth); virtual ~SimpleCallObserver(); AccountPtr account() const; QString contactIdentifier() const; CallDirection direction() const; QList calls() const; TP_QT_DEPRECATED QList streamedMediaCalls() const; Q_SIGNALS: void callStarted(const Tp::CallChannelPtr &channel); void callEnded(const Tp::CallChannelPtr &channel, const QString &errorName, const QString &errorMessage); void streamedMediaCallStarted(const Tp::StreamedMediaChannelPtr &channel); void streamedMediaCallEnded(const Tp::StreamedMediaChannelPtr &channel, const QString &errorName, const QString &errorMessage); private Q_SLOTS: TP_QT_NO_EXPORT void onNewChannels(const QList &channels); TP_QT_NO_EXPORT void onChannelInvalidated(const Tp::ChannelPtr &channel, const QString &errorName, const QString &errorMessage); private: TP_QT_NO_EXPORT static SimpleCallObserverPtr create( const AccountPtr &account, const QString &contactIdentifier, bool requiresNormalization, CallDirection direction); TP_QT_NO_EXPORT SimpleCallObserver(const AccountPtr &account, const QString &contactIdentifier, bool requiresNormalization, CallDirection direction); struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/IncomingDBusTubeChannel0000644000175200001440000000042612000056607025237 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_IncomingDBusTubeChannel_HEADER_GUARD_ #define _TelepathyQt_IncomingDBusTubeChannel_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/dbus-peer.xml0000644000175200001440000000063512000056607023274 0ustar00collabora-develusers00000000000000 D-Bus peer telepathy-qt-0.9.3/TelepathyQt/pending-contacts.h0000644000175200001440000001057212000056607024276 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2011 Collabora Ltd. * @copyright Copyright (C) 2008-2011 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_pending_contacts_h_HEADER_GUARD_ #define _TelepathyQt_pending_contacts_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include #include #include #include #include namespace Tp { class ContactManager; class TP_QT_EXPORT PendingContacts : public PendingOperation { Q_OBJECT Q_DISABLE_COPY(PendingContacts); public: ~PendingContacts(); ContactManagerPtr manager() const; Features features() const; bool isForHandles() const; UIntList handles() const; bool isForIdentifiers() const; QStringList identifiers() const; bool isForVCardAddresses() const; QString vcardField() const; QStringList vcardAddresses() const; bool isForUris() const; QStringList uris() const; bool isUpgrade() const; QList contactsToUpgrade() const; QList contacts() const; UIntList invalidHandles() const; QStringList validIdentifiers() const; QHash > invalidIdentifiers() const; QStringList validVCardAddresses() const; QStringList invalidVCardAddresses() const; QStringList validUris() const; QStringList invalidUris() const; private Q_SLOTS: TP_QT_NO_EXPORT void onAttributesFinished(Tp::PendingOperation *); TP_QT_NO_EXPORT void onRequestHandlesFinished(Tp::PendingOperation *); TP_QT_NO_EXPORT void onAddressingGetContactsFinished(Tp::PendingOperation *); TP_QT_NO_EXPORT void onReferenceHandlesFinished(Tp::PendingOperation *); TP_QT_NO_EXPORT void onNestedFinished(Tp::PendingOperation *); TP_QT_NO_EXPORT void onInspectHandlesFinished(QDBusPendingCallWatcher *); private: friend class ContactManager; enum RequestType { ForHandles, ForIdentifiers, ForVCardAddresses, ForUris, Upgrade }; // If errorName is non-empty, these will fail instantly TP_QT_NO_EXPORT PendingContacts(const ContactManagerPtr &manager, const UIntList &handles, const Features &features, const Features &missingFeatures, const QStringList &interfaces, const QMap &satisfyingContacts, const QSet &otherContacts, const QString &errorName = QString(), const QString &errorMessage = QString()); TP_QT_NO_EXPORT PendingContacts(const ContactManagerPtr &manager, const QStringList &list, RequestType requestType, const Features &features, const QStringList &interfaces, const QString &errorName = QString(), const QString &errorMessage = QString()); TP_QT_NO_EXPORT PendingContacts(const ContactManagerPtr &manager, const QString &vcardField, const QStringList &vcardAddresses, const Features &features, const QStringList &interfaces, const QString &errorName = QString(), const QString &errorMessage = QString()); TP_QT_NO_EXPORT PendingContacts(const ContactManagerPtr &manager, const QList &contacts, const Features &features, const QString &errorName = QString(), const QString &errorMessage = QString()); TP_QT_NO_EXPORT void allAttributesFetched(); struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/call-content-media-description.h0000644000175200001440000000226312000056607027015 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_call_content_media_description_h_HEADER_GUARD_ #define _TelepathyQt_call_content_media_description_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #endif telepathy-qt-0.9.3/TelepathyQt/svc-channel.xml0000644000175200001440000000353312000056607023607 0ustar00collabora-develusers00000000000000 Channel interfaces telepathy-qt-0.9.3/TelepathyQt/outgoing-dbus-tube-channel.cpp0000644000175200001440000001646212000056607026526 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/outgoing-dbus-tube-channel.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT OutgoingDBusTubeChannel::Private { Private(OutgoingDBusTubeChannel *parent); // Public object OutgoingDBusTubeChannel *parent; }; OutgoingDBusTubeChannel::Private::Private(OutgoingDBusTubeChannel *parent) : parent(parent) { } /** * \class OutgoingDBusTubeChannel * \ingroup clientchannel * \headerfile TelepathyQt/outgoing-dbus-tube-channel.h * * \brief The OutgoingDBusTubeChannel class represents an outgoing Telepathy channel * of type DBusTube. * * Outgoing (locally initiated/requested) tubes are initially in the #TubeChannelStateNotOffered state. * When offerTube is called, the connection manager takes care of instantiating a new DBus server, * at which point the tube state becomes #TubeChannelStateRemotePending. * * If the target accepts the connection request, the state goes #TubeChannelStateOpen and both sides * can start using the new private bus, the address of which can be retrieved from the completed * PendingDBusTubeConnection or from this class. * * \note If you plan to use QtDBus for the DBus connection, please note you should always use * QDBusConnection::connectToPeer(), regardless of the fact this tube is a p2p or a group one. * The above function has been introduced in Qt 4.8, previous versions of Qt do not allow the use * of DBus Tubes through QtDBus. * * For more details, please refer to \telepathy_spec. * * See \ref async_model, \ref shared_ptr */ /** * Create a new OutgoingDBusTubeChannel channel. * * \param connection Connection owning this channel, and specifying the * service. * \param objectPath The object path of this channel. * \param immutableProperties The immutable properties of this channel. * \return A OutgoingDBusTubeChannelPtr object pointing to the newly created * OutgoingDBusTubeChannel object. */ OutgoingDBusTubeChannelPtr OutgoingDBusTubeChannel::create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) { return OutgoingDBusTubeChannelPtr(new OutgoingDBusTubeChannel(connection, objectPath, immutableProperties)); } /** * Construct a new OutgoingDBusTubeChannel object. * * \param connection Connection owning this channel, and specifying the * service. * \param objectPath The object path of this channel. * \param immutableProperties The immutable properties of this channel. */ OutgoingDBusTubeChannel::OutgoingDBusTubeChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) : DBusTubeChannel(connection, objectPath, immutableProperties), mPriv(new Private(this)) { } /** * Class destructor. */ OutgoingDBusTubeChannel::~OutgoingDBusTubeChannel() { delete mPriv; } /** * Offer the tube * * This method sets up a private DBus connection to the channel target(s), and offers it through the tube. * * The %PendingDBusTubeConnection returned by this method will be completed as soon as the tube is * opened and ready to be used. * * This method requires DBusTubeChannel::FeatureCore to be enabled. * * \param parameters A dictionary of arbitrary Parameters to send with the tube offer. * The other end will receive this QVariantMap in the parameters() method * of the corresponding IncomingDBusTubeChannel. * \param allowOtherUsers Whether the server should allow other users to connect to this tube more * than just the current one. If your application has no specific needs, it is * advisable not to modify the default value of this argument. * * \note If allowOtherUsers == false, but one of the ends does not support current user restriction, * the tube will be offered regardless, falling back to allowing any connection. If your * application requires strictly this condition to be enforced, you should check * DBusTubeChannel::supportsRestrictingToCurrentUser before offering the tube, * and take action from there. * The tube is guaranteed either to be offered with the desired * restriction or to fail the accept phase if supportsRestrictingToCurrentUser is true * and allowOtherUsers is false. * * \returns A %PendingDBusTubeConnection which will finish as soon as the tube is ready to be used * (hence in the Open state) */ PendingDBusTubeConnection *OutgoingDBusTubeChannel::offerTube(const QVariantMap ¶meters, bool allowOtherUsers) { SocketAccessControl accessControl = allowOtherUsers ? SocketAccessControlLocalhost : SocketAccessControlCredentials; if (!isReady(DBusTubeChannel::FeatureCore)) { warning() << "DBusTubeChannel::FeatureCore must be ready before " "calling offerTube"; return new PendingDBusTubeConnection(QLatin1String(TP_QT_ERROR_NOT_AVAILABLE), QLatin1String("Channel not ready"), OutgoingDBusTubeChannelPtr(this)); } // The tube must be not offered if (state() != TubeChannelStateNotOffered) { warning() << "You can not expose more than a bus for each DBus Tube"; return new PendingDBusTubeConnection(QLatin1String(TP_QT_ERROR_NOT_AVAILABLE), QLatin1String("Channel busy"), OutgoingDBusTubeChannelPtr(this)); } // Let's offer the tube if (!allowOtherUsers && !supportsRestrictingToCurrentUser()) { warning() << "Current user restriction is not available for this tube, " "falling back to allowing any connection"; accessControl = SocketAccessControlLocalhost; } PendingString *ps = new PendingString( interface()->Offer( parameters, accessControl), OutgoingDBusTubeChannelPtr(this)); PendingDBusTubeConnection *op = new PendingDBusTubeConnection(ps, accessControl == SocketAccessControlLocalhost, parameters, OutgoingDBusTubeChannelPtr(this)); return op; } } telepathy-qt-0.9.3/TelepathyQt/connection.xml0000644000175200001440000000312612000056607023543 0ustar00collabora-develusers00000000000000 Connection interfaces telepathy-qt-0.9.3/TelepathyQt/outgoing-file-transfer-channel.cpp0000644000175200001440000002740712000056607027376 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/outgoing-file-transfer-channel.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include #include #include #include namespace Tp { static const int FT_BLOCK_SIZE = 16 * 1024; struct TP_QT_NO_EXPORT OutgoingFileTransferChannel::Private { Private(OutgoingFileTransferChannel *parent); ~Private(); // Public object OutgoingFileTransferChannel *parent; Client::ChannelTypeFileTransferInterface *fileTransferInterface; // Introspection QIODevice *input; QTcpSocket *socket; SocketAddressIPv4 addr; qint64 pos; }; OutgoingFileTransferChannel::Private::Private(OutgoingFileTransferChannel *parent) : parent(parent), fileTransferInterface(parent->interface()), input(0), socket(0), pos(0) { } OutgoingFileTransferChannel::Private::~Private() { } /** * \class OutgoingFileTransferChannel * \ingroup clientchannel * \headerfile TelepathyQt/outgoing-file-transfer-channel.h * * \brief The OutgoingFileTransferChannel class represents a Telepathy channel * of type FileTransfer for outgoing file transfers. * * For more details, please refer to \telepathy_spec. * * See \ref async_model, \ref shared_ptr */ /** * Feature representing the core that needs to become ready to make the * OutgoingFileTransferChannel object usable. * * This is currently the same as FileTransferChannel::FeatureCore, but may change to include more. * * When calling isReady(), becomeReady(), this feature is implicitly added * to the requested features. */ const Feature OutgoingFileTransferChannel::FeatureCore = Feature(QLatin1String(FileTransferChannel::staticMetaObject.className()), 0); // FT::FeatureCore /** * Create a new OutgoingFileTransferChannel object. * * \param connection Connection owning this channel, and specifying the * service. * \param objectPath The channel object path. * \param immutableProperties The channel immutable properties. * \return An OutgoingFileTransferChannelPtr object pointing to the newly created * OutgoingFileTransferChannel object. */ OutgoingFileTransferChannelPtr OutgoingFileTransferChannel::create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) { return OutgoingFileTransferChannelPtr(new OutgoingFileTransferChannel( connection, objectPath, immutableProperties, OutgoingFileTransferChannel::FeatureCore)); } /** * Construct a new OutgoingFileTransferChannel object. * * \param connection Connection owning this channel, and specifying the * service. * \param objectPath The channel object path. * \param immutableProperties The channel immutable properties. * \param coreFeature The core feature of the channel type, if any. The corresponding introspectable should * depend on OutgoingFileTransferChannel::FeatureCore. */ OutgoingFileTransferChannel::OutgoingFileTransferChannel( const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature) : FileTransferChannel(connection, objectPath, immutableProperties, coreFeature), mPriv(new Private(this)) { } /** * Class destructor. */ OutgoingFileTransferChannel::~OutgoingFileTransferChannel() { delete mPriv; } /** * Provide the file for an outgoing file transfer which has been offered. * * The state will change to #FileTransferStateOpen as soon as the transfer * starts. * The given input device should not be destroyed until the state() * changes to #FileTransferStateCompleted or #FileTransferStateCancelled. * If input is a sequential device QIODevice::isSequential(), it should be * closed when no more data is available, so that it's known when to stop reading. * * Only the primary handler of a file transfer channel may call this method. * * This method requires FileTransferChannel::FeatureCore to be ready. * * \param input A QIODevice object where the data will be read from. * \return A PendingOperation object which will emit PendingOperation::finished * when the call has finished. * \sa stateChanged(), state(), stateReason() */ PendingOperation *OutgoingFileTransferChannel::provideFile(QIODevice *input) { if (!isReady(FileTransferChannel::FeatureCore)) { warning() << "FileTransferChannel::FeatureCore must be ready before " "calling provideFile"; return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Channel not ready"), OutgoingFileTransferChannelPtr(this)); } // let's fail here direclty as we may only have one device to handle if (mPriv->input) { warning() << "File transfer can only be started once in the same " "channel"; return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("File transfer can only be started once in the same channel"), OutgoingFileTransferChannelPtr(this)); } if ((!input->isOpen() && !input->open(QIODevice::ReadOnly)) && !input->isReadable()) { warning() << "Unable to open IO device for reading"; return new PendingFailure(TP_QT_ERROR_PERMISSION_DENIED, QLatin1String("Unable to open IO device for reading"), OutgoingFileTransferChannelPtr(this)); } mPriv->input = input; connect(input, SIGNAL(aboutToClose()), SLOT(onInputAboutToClose())); PendingVariant *pv = new PendingVariant( mPriv->fileTransferInterface->ProvideFile( SocketAddressTypeIPv4, SocketAccessControlLocalhost, QDBusVariant(QVariant(QString()))), OutgoingFileTransferChannelPtr(this)); connect(pv, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onProvideFileFinished(Tp::PendingOperation*))); return pv; } void OutgoingFileTransferChannel::onProvideFileFinished(PendingOperation *op) { if (op->isError()) { warning() << "Error providing file transfer " << op->errorName() << ":" << op->errorMessage(); invalidate(op->errorName(), op->errorMessage()); return; } PendingVariant *pv = qobject_cast(op); mPriv->addr = qdbus_cast(pv->result()); debug().nospace() << "Got address " << mPriv->addr.address << ":" << mPriv->addr.port; if (state() == FileTransferStateOpen) { connectToHost(); } } void OutgoingFileTransferChannel::connectToHost() { if (isConnected() || mPriv->addr.address.isNull()) { return; } mPriv->socket = new QTcpSocket(this); connect(mPriv->socket, SIGNAL(connected()), SLOT(onSocketConnected())); connect(mPriv->socket, SIGNAL(disconnected()), SLOT(onSocketDisconnected())); connect(mPriv->socket, SIGNAL(error(QAbstractSocket::SocketError)), SLOT(onSocketError(QAbstractSocket::SocketError))); connect(mPriv->socket, SIGNAL(bytesWritten(qint64)), SLOT(doTransfer())); debug().nospace() << "Connecting to host " << mPriv->addr.address << ":" << mPriv->addr.port << "..."; mPriv->socket->connectToHost(mPriv->addr.address, mPriv->addr.port); } void OutgoingFileTransferChannel::onSocketConnected() { debug() << "Connected to host"; setConnected(); connect(mPriv->input, SIGNAL(readyRead()), SLOT(doTransfer())); // for non sequential devices, let's seek to the initialOffset if (!mPriv->input->isSequential()) { if (mPriv->input->seek(initialOffset())) { mPriv->pos = initialOffset(); } } debug() << "Starting transfer..."; doTransfer(); } void OutgoingFileTransferChannel::onSocketDisconnected() { debug() << "Disconnected from host"; setFinished(); } void OutgoingFileTransferChannel::onSocketError(QAbstractSocket::SocketError error) { debug() << "Socket error" << error; setFinished(); } void OutgoingFileTransferChannel::onInputAboutToClose() { debug() << "Input closed"; // read all remaining data from input device and write to output device if (isConnected()) { QByteArray data; data = mPriv->input->readAll(); mPriv->socket->write(data); // never fails } setFinished(); } void OutgoingFileTransferChannel::doTransfer() { // read FT_BLOCK_SIZE each time, as input can be a QFile, we don't want to // block reading the whole file char buffer[FT_BLOCK_SIZE]; char *p = buffer; memset(buffer, 0, sizeof(buffer)); qint64 len = mPriv->input->read(buffer, sizeof(buffer)); bool scheduleTransfer = false; if (((qulonglong) mPriv->pos < initialOffset()) && (len > 0)) { qint64 skip = (qint64) qMin(initialOffset() - mPriv->pos, (qulonglong) len); debug() << "skipping" << skip << "bytes"; if (skip == len) { // nothing to write, all data read was skipped // schedule a transfer, as readyRead may never be called and // bytesWriiten will not scheduleTransfer = true; goto end; } p += skip; len -= skip; } if (len > 0) { mPriv->socket->write(p, len); // never fails } end: if (len == -1 || (!mPriv->input->isSequential() && mPriv->input->atEnd())) { // error or EOF setFinished(); return; } mPriv->pos += len; if (scheduleTransfer) { QMetaObject::invokeMethod(this, SLOT(doTransfer()), Qt::QueuedConnection); } } void OutgoingFileTransferChannel::setFinished() { if (isFinished()) { // it shouldn't happen but let's make sure return; } if (mPriv->socket) { disconnect(mPriv->socket, SIGNAL(connected()), this, SLOT(onSocketConnected())); disconnect(mPriv->socket, SIGNAL(disconnected()), this, SLOT(onSocketDisconnected())); disconnect(mPriv->socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onSocketError(QAbstractSocket::SocketError))); disconnect(mPriv->socket, SIGNAL(bytesWritten(qint64)), this, SLOT(doTransfer())); mPriv->socket->close(); } if (mPriv->input) { disconnect(mPriv->input, SIGNAL(aboutToClose()), this, SLOT(onInputAboutToClose())); disconnect(mPriv->input, SIGNAL(readyRead()), this, SLOT(doTransfer())); mPriv->input->close(); } FileTransferChannel::setFinished(); } } // Tp telepathy-qt-0.9.3/TelepathyQt/or-filter.dox0000644000175200001440000000234512000056607023303 0ustar00collabora-develusers00000000000000/* * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 */ /** * \class Tp::OrFilter * \ingroup utils * \headerfile TelepathyQt/or-filter.h * * \brief The OrFilter class provides a generic filter object to be used * in conjunction of other filters. * * The OrFilter will match if any of its given list of filters matches * their criteria. */ telepathy-qt-0.9.3/TelepathyQt/PendingOperation0000644000175200001440000000037712000056607024057 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_PendingOperation_HEADER_GUARD_ #define _TelepathyQt_PendingOperation_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/RequestableChannelClassSpec0000644000175200001440000000044212000056607026151 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_RequestableChannelClassSpec_HEADER_GUARD_ #define _TelepathyQt_RequestableChannelClassSpec_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/pending-connection.cpp0000644000175200001440000001242112000056607025145 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008 Collabora Ltd. * @copyright Copyright (C) 2008 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/pending-connection.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT PendingConnection::Private { ConnectionPtr connection; }; /** * \class PendingConnection * \ingroup clientconn * \headerfile TelepathyQt/pending-connection.h * * \brief The PendingConnection class represents the parameters of and the reply * to an asynchronous connection request. * * Instances of this class cannot be constructed directly; the only way to get * one is via ConnectionManager. * * See \ref async_model */ /** * Construct a new PendingConnection object. * * \param manager ConnectionManager to use. * \param protocol Name of the protocol to create the connection for. * \param parameters Connection parameters. */ PendingConnection::PendingConnection(const ConnectionManagerPtr &manager, const QString &protocol, const QVariantMap ¶meters) : PendingOperation(manager), mPriv(new Private) { QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( manager->baseInterface()->RequestConnection(protocol, parameters), this); connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(onCallFinished(QDBusPendingCallWatcher*))); } /** * Construct a new PendingConnection object that will fail immediately. * * \param error Name of the error to fail with. * \param errorMessage Detail message for the error. */ PendingConnection::PendingConnection(const QString &error, const QString &errorMessage) : PendingOperation(ConnectionManagerPtr()), mPriv(new Private) { setFinishedWithError(error, errorMessage); } /** * Class destructor. */ PendingConnection::~PendingConnection() { delete mPriv; } /** * Return the connection manager through which the request was made. * * \return A pointer to the ConnectionManager object. */ ConnectionManagerPtr PendingConnection::manager() const { return ConnectionManagerPtr(qobject_cast((ConnectionManager*) object().data())); } /** * Return the connection resulting from the connection request. * * \return A pointer to the Connection object. */ ConnectionPtr PendingConnection::connection() const { if (!isFinished()) { warning() << "PendingConnection::connection called before finished, returning 0"; return ConnectionPtr(); } else if (!isValid()) { warning() << "PendingConnection::connection called when not valid, returning 0"; return ConnectionPtr(); } return mPriv->connection; } void PendingConnection::onCallFinished(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (!reply.isError()) { QString busName = reply.argumentAt<0>(); QString objectPath = reply.argumentAt<1>().path(); debug() << "Got reply to ConnectionManager.CreateConnection - bus name:" << busName << "- object path:" << objectPath; PendingReady *readyOp = manager()->connectionFactory()->proxy(busName, objectPath, manager()->channelFactory(), manager()->contactFactory()); mPriv->connection = ConnectionPtr::qObjectCast(readyOp->proxy()); connect(readyOp, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onConnectionBuilt(Tp::PendingOperation*))); } else { debug().nospace() << "CreateConnection failed: " << reply.error().name() << ": " << reply.error().message(); setFinishedWithError(reply.error()); } watcher->deleteLater(); } void PendingConnection::onConnectionBuilt(Tp::PendingOperation *op) { Q_ASSERT(op->isFinished()); if (op->isError()) { warning() << "Making connection ready using the factory failed:" << op->errorName() << op->errorMessage(); setFinishedWithError(op->errorName(), op->errorMessage()); } else { setFinished(); debug() << "New connection" << mPriv->connection->objectPath() << "built"; } } } // Tp telepathy-qt-0.9.3/TelepathyQt/account.xml0000644000175200001440000000062412000056607023040 0ustar00collabora-develusers00000000000000 Account interfaces telepathy-qt-0.9.3/TelepathyQt/generic-capability-filter.dox0000644000175200001440000000274112000056607026416 0ustar00collabora-develusers00000000000000/* * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 */ /** * \class Tp::GenericCapabilityFilter * \ingroup utils * \headerfile TelepathyQt/generic-capability-filter.h * * \brief The GenericCapabilityFilter class provides a generic filter object to * be used to filter objects by capabilities. * * The objects used in conjunction with this filter must implement a method * called capabilities() returning a CapabilitiesBase (or a subclass of it) * instance. * Specialized classes such as AccountCapabilityFilter are also provided and * should be used where appropriate. */ telepathy-qt-0.9.3/TelepathyQt/channel-factory.cpp0000644000175200001440000005763212000056607024456 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009-2010 Collabora Ltd. * @copyright Copyright (C) 2009-2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/channel-factory.moc.hpp" #include "TelepathyQt/_gen/future-constants.h" #include "TelepathyQt/debug-internal.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT ChannelFactory::Private { Private(); QList features; typedef QPair CtorPair; QList ctors; }; ChannelFactory::Private::Private() { } /** * \class ChannelFactory * \ingroup utils * \headerfile TelepathyQt/channel-factory.h * * \brief The ChannelFactory class is responsible for constructing Channel * objects according to application-defined settings. */ /** * Create a new ChannelFactory object. * * The returned factory will construct channel subclasses provided by TelepathyQt as appropriate * for the channel immutable properties, but not make any features ready. * * \param bus The QDBusConnection the proxies constructed using this factory should use. * \return An ChannelFactoryPtr pointing to the newly created factory. */ ChannelFactoryPtr ChannelFactory::create(const QDBusConnection &bus) { return ChannelFactoryPtr(new ChannelFactory(bus)); } /** * Construct a new ChannelFactory object. * * The constructed factory will construct channel subclasses provided by TelepathyQt as appropriate * for the channel immutable properties, but not make any features ready. * * \param bus The QDBusConnection the proxies constructed using this factory should use. */ ChannelFactory::ChannelFactory(const QDBusConnection &bus) : DBusProxyFactory(bus), mPriv(new Private) { setSubclassForTextChats(); setSubclassForTextChatrooms(); setSubclassForCalls(); setSubclassForStreamedMediaCalls(); setSubclassForRoomLists(); setSubclassForIncomingDBusTubes(); setSubclassForOutgoingDBusTubes(); setSubclassForIncomingRoomDBusTubes(); setSubclassForOutgoingRoomDBusTubes(); setSubclassForIncomingFileTransfers(); setSubclassForOutgoingFileTransfers(); setSubclassForIncomingStreamTubes(); setSubclassForOutgoingStreamTubes(); setSubclassForIncomingRoomStreamTubes(); setSubclassForOutgoingRoomStreamTubes(); setSubclassForContactSearches(); setSubclassForServerAuthentication(); setFallbackSubclass(); } /** * Class destructor. */ ChannelFactory::~ChannelFactory() { delete mPriv; } Features ChannelFactory::featuresForTextChats(const QVariantMap &additionalProps) const { return featuresFor(ChannelClassSpec::textChat(additionalProps)); } void ChannelFactory::addFeaturesForTextChats(const Features &features, const QVariantMap &additionalProps) { addFeaturesFor(ChannelClassSpec::textChat(additionalProps), features); addFeaturesFor(ChannelClassSpec::unnamedTextChat(additionalProps), features); } ChannelFactory::ConstructorConstPtr ChannelFactory::constructorForTextChats( const QVariantMap &additionalProps) const { return constructorFor(ChannelClassSpec::textChat(additionalProps)); } void ChannelFactory::setConstructorForTextChats(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps) { setConstructorFor(ChannelClassSpec::textChat(additionalProps), ctor); setConstructorFor(ChannelClassSpec::unnamedTextChat(additionalProps), ctor); } Features ChannelFactory::featuresForTextChatrooms(const QVariantMap &additionalProps) const { return featuresFor(ChannelClassSpec::textChatroom(additionalProps)); } void ChannelFactory::addFeaturesForTextChatrooms(const Features &features, const QVariantMap &additionalProps) { addFeaturesFor(ChannelClassSpec::textChatroom(additionalProps), features); } ChannelFactory::ConstructorConstPtr ChannelFactory::constructorForTextChatrooms( const QVariantMap &additionalProps) const { return constructorFor(ChannelClassSpec::textChatroom(additionalProps)); } void ChannelFactory::setConstructorForTextChatrooms(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps) { setConstructorFor(ChannelClassSpec::textChatroom(additionalProps), ctor); } Features ChannelFactory::featuresForCalls(const QVariantMap &additionalProps) const { return featuresFor(ChannelClassSpec::audioCall(additionalProps)); } void ChannelFactory::addFeaturesForCalls(const Features &features, const QVariantMap &additionalProps) { addFeaturesFor(ChannelClassSpec::audioCall(additionalProps), features); addFeaturesFor(ChannelClassSpec::videoCall(additionalProps), features); } void ChannelFactory::setConstructorForCalls(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps) { setConstructorFor(ChannelClassSpec::audioCall(additionalProps), ctor); setConstructorFor(ChannelClassSpec::videoCall(additionalProps), ctor); } Features ChannelFactory::featuresForStreamedMediaCalls(const QVariantMap &additionalProps) const { return featuresFor(ChannelClassSpec::streamedMediaCall(additionalProps)); } void ChannelFactory::addFeaturesForStreamedMediaCalls(const Features &features, const QVariantMap &additionalProps) { ChannelClassSpec smSpec = ChannelClassSpec::streamedMediaCall(additionalProps); ChannelClassSpec unnamedSMSpec = ChannelClassSpec::unnamedStreamedMediaCall(additionalProps); addFeaturesFor(smSpec, features); addFeaturesFor(unnamedSMSpec, features); } ChannelFactory::ConstructorConstPtr ChannelFactory::constructorForStreamedMediaCalls( const QVariantMap &additionalProps) const { return constructorFor(ChannelClassSpec::streamedMediaCall(additionalProps)); } void ChannelFactory::setConstructorForStreamedMediaCalls(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps) { ChannelClassSpec smSpec = ChannelClassSpec::streamedMediaCall(additionalProps); ChannelClassSpec unnamedSMSpec = ChannelClassSpec::unnamedStreamedMediaCall(additionalProps); setConstructorFor(smSpec, ctor); setConstructorFor(unnamedSMSpec, ctor); } Features ChannelFactory::featuresForRoomLists(const QVariantMap &additionalProps) const { return featuresFor(ChannelClassSpec::roomList(additionalProps)); } void ChannelFactory::addFeaturesForRoomLists(const Features &features, const QVariantMap &additionalProps) { addFeaturesFor(ChannelClassSpec::roomList(additionalProps), features); } ChannelFactory::ConstructorConstPtr ChannelFactory::constructorForRoomLists( const QVariantMap &additionalProps) const { return constructorFor(ChannelClassSpec::roomList(additionalProps)); } void ChannelFactory::setConstructorForRoomLists(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps) { setConstructorFor(ChannelClassSpec::roomList(additionalProps), ctor); } Features ChannelFactory::featuresForOutgoingFileTransfers(const QVariantMap &additionalProps) const { return featuresFor(ChannelClassSpec::outgoingFileTransfer(additionalProps)); } void ChannelFactory::addFeaturesForOutgoingFileTransfers(const Features &features, const QVariantMap &additionalProps) { addFeaturesFor(ChannelClassSpec::outgoingFileTransfer(additionalProps), features); } ChannelFactory::ConstructorConstPtr ChannelFactory::constructorForOutgoingFileTransfers( const QVariantMap &additionalProps) const { return constructorFor(ChannelClassSpec::outgoingFileTransfer(additionalProps)); } void ChannelFactory::setConstructorForOutgoingFileTransfers(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps) { setConstructorFor(ChannelClassSpec::outgoingFileTransfer(additionalProps), ctor); } Features ChannelFactory::featuresForIncomingFileTransfers(const QVariantMap &additionalProps) const { return featuresFor(ChannelClassSpec::incomingFileTransfer(additionalProps)); } void ChannelFactory::addFeaturesForIncomingFileTransfers(const Features &features, const QVariantMap &additionalProps) { addFeaturesFor(ChannelClassSpec::incomingFileTransfer(additionalProps), features); } ChannelFactory::ConstructorConstPtr ChannelFactory::constructorForIncomingFileTransfers( const QVariantMap &additionalProps) const { return constructorFor(ChannelClassSpec::incomingFileTransfer(additionalProps)); } void ChannelFactory::setConstructorForIncomingFileTransfers(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps) { setConstructorFor(ChannelClassSpec::incomingFileTransfer(additionalProps), ctor); } Features ChannelFactory::featuresForOutgoingStreamTubes(const QVariantMap &additionalProps) const { return featuresFor(ChannelClassSpec::outgoingStreamTube(QString(), additionalProps)); } void ChannelFactory::addFeaturesForOutgoingStreamTubes(const Features &features, const QVariantMap &additionalProps) { addFeaturesFor(ChannelClassSpec::outgoingStreamTube(QString(), additionalProps), features); } ChannelFactory::ConstructorConstPtr ChannelFactory::constructorForOutgoingStreamTubes( const QVariantMap &additionalProps) const { return constructorFor(ChannelClassSpec::outgoingStreamTube(QString(), additionalProps)); } void ChannelFactory::setConstructorForOutgoingStreamTubes(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps) { setConstructorFor(ChannelClassSpec::outgoingStreamTube(QString(), additionalProps), ctor); } Features ChannelFactory::featuresForIncomingStreamTubes(const QVariantMap &additionalProps) const { return featuresFor(ChannelClassSpec::incomingStreamTube(QString(), additionalProps)); } void ChannelFactory::addFeaturesForIncomingStreamTubes(const Features &features, const QVariantMap &additionalProps) { addFeaturesFor(ChannelClassSpec::incomingStreamTube(QString(), additionalProps), features); } ChannelFactory::ConstructorConstPtr ChannelFactory::constructorForIncomingStreamTubes( const QVariantMap &additionalProps) const { return constructorFor(ChannelClassSpec::incomingStreamTube(QString(), additionalProps)); } void ChannelFactory::setConstructorForIncomingStreamTubes(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps) { setConstructorFor(ChannelClassSpec::incomingStreamTube(QString(), additionalProps), ctor); } Features ChannelFactory::featuresForOutgoingRoomStreamTubes(const QVariantMap &additionalProps) const { return featuresFor(ChannelClassSpec::outgoingRoomStreamTube(QString(), additionalProps)); } void ChannelFactory::addFeaturesForOutgoingRoomStreamTubes(const Features &features, const QVariantMap &additionalProps) { addFeaturesFor(ChannelClassSpec::outgoingRoomStreamTube(QString(), additionalProps), features); } ChannelFactory::ConstructorConstPtr ChannelFactory::constructorForOutgoingRoomStreamTubes( const QVariantMap &additionalProps) const { return constructorFor(ChannelClassSpec::outgoingRoomStreamTube(QString(), additionalProps)); } void ChannelFactory::setConstructorForOutgoingRoomStreamTubes(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps) { setConstructorFor(ChannelClassSpec::outgoingRoomStreamTube(QString(), additionalProps), ctor); } Features ChannelFactory::featuresForIncomingRoomStreamTubes(const QVariantMap &additionalProps) const { return featuresFor(ChannelClassSpec::incomingRoomStreamTube(QString(), additionalProps)); } void ChannelFactory::addFeaturesForIncomingRoomStreamTubes(const Features &features, const QVariantMap &additionalProps) { addFeaturesFor(ChannelClassSpec::incomingRoomStreamTube(QString(), additionalProps), features); } ChannelFactory::ConstructorConstPtr ChannelFactory::constructorForIncomingRoomStreamTubes( const QVariantMap &additionalProps) const { return constructorFor(ChannelClassSpec::incomingRoomStreamTube(QString(), additionalProps)); } void ChannelFactory::setConstructorForIncomingRoomStreamTubes(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps) { setConstructorFor(ChannelClassSpec::incomingRoomStreamTube(QString(), additionalProps), ctor); } Features ChannelFactory::featuresForOutgoingDBusTubes(const QVariantMap &additionalProps) const { return featuresFor(ChannelClassSpec::outgoingDBusTube(QString(), additionalProps)); } void ChannelFactory::addFeaturesForOutgoingDBusTubes(const Features &features, const QVariantMap &additionalProps) { addFeaturesFor(ChannelClassSpec::outgoingDBusTube(QString(), additionalProps), features); } ChannelFactory::ConstructorConstPtr ChannelFactory::constructorForOutgoingDBusTubes( const QVariantMap &additionalProps) const { return constructorFor(ChannelClassSpec::outgoingDBusTube(QString(), additionalProps)); } void ChannelFactory::setConstructorForOutgoingDBusTubes(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps) { setConstructorFor(ChannelClassSpec::outgoingDBusTube(QString(), additionalProps), ctor); } Features ChannelFactory::featuresForIncomingDBusTubes(const QVariantMap &additionalProps) const { return featuresFor(ChannelClassSpec::incomingDBusTube(QString(), additionalProps)); } void ChannelFactory::addFeaturesForIncomingDBusTubes(const Features &features, const QVariantMap &additionalProps) { addFeaturesFor(ChannelClassSpec::incomingDBusTube(QString(), additionalProps), features); } ChannelFactory::ConstructorConstPtr ChannelFactory::constructorForIncomingDBusTubes( const QVariantMap &additionalProps) const { return constructorFor(ChannelClassSpec::incomingDBusTube(QString(), additionalProps)); } void ChannelFactory::setConstructorForIncomingDBusTubes(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps) { setConstructorFor(ChannelClassSpec::incomingDBusTube(QString(), additionalProps), ctor); } Features ChannelFactory::featuresForOutgoingRoomDBusTubes(const QVariantMap &additionalProps) const { return featuresFor(ChannelClassSpec::outgoingRoomDBusTube(QString(), additionalProps)); } void ChannelFactory::addFeaturesForOutgoingRoomDBusTubes(const Features &features, const QVariantMap &additionalProps) { addFeaturesFor(ChannelClassSpec::outgoingRoomDBusTube(QString(), additionalProps), features); } ChannelFactory::ConstructorConstPtr ChannelFactory::constructorForOutgoingRoomDBusTubes( const QVariantMap &additionalProps) const { return constructorFor(ChannelClassSpec::outgoingRoomDBusTube(QString(), additionalProps)); } void ChannelFactory::setConstructorForOutgoingRoomDBusTubes(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps) { setConstructorFor(ChannelClassSpec::outgoingRoomDBusTube(QString(), additionalProps), ctor); } Features ChannelFactory::featuresForIncomingRoomDBusTubes(const QVariantMap &additionalProps) const { return featuresFor(ChannelClassSpec::incomingRoomDBusTube(QString(), additionalProps)); } void ChannelFactory::addFeaturesForIncomingRoomDBusTubes(const Features &features, const QVariantMap &additionalProps) { addFeaturesFor(ChannelClassSpec::incomingRoomDBusTube(QString(), additionalProps), features); } ChannelFactory::ConstructorConstPtr ChannelFactory::constructorForIncomingRoomDBusTubes( const QVariantMap &additionalProps) const { return constructorFor(ChannelClassSpec::incomingRoomDBusTube(QString(), additionalProps)); } void ChannelFactory::setConstructorForIncomingRoomDBusTubes(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps) { setConstructorFor(ChannelClassSpec::incomingRoomDBusTube(QString(), additionalProps), ctor); } Features ChannelFactory::featuresForContactSearches(const QVariantMap &additionalProps) const { return featuresFor(ChannelClassSpec::contactSearch(additionalProps)); } void ChannelFactory::addFeaturesForContactSearches(const Features &features, const QVariantMap &additionalProps) { addFeaturesFor(ChannelClassSpec::contactSearch(additionalProps), features); } ChannelFactory::ConstructorConstPtr ChannelFactory::constructorForContactSearches( const QVariantMap &additionalProps) const { return constructorFor(ChannelClassSpec::contactSearch(additionalProps)); } void ChannelFactory::setConstructorForContactSearches(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps) { setConstructorFor(ChannelClassSpec::contactSearch(additionalProps), ctor); } Features ChannelFactory::featuresForServerAuthentication(const QVariantMap &additionalProps) const { return featuresFor(ChannelClassSpec::serverAuthentication(additionalProps)); } void ChannelFactory::addFeaturesForServerAuthentication(const Features &features, const QVariantMap &additionalProps) { addFeaturesFor(ChannelClassSpec::serverAuthentication(additionalProps), features); } ChannelFactory::ConstructorConstPtr ChannelFactory::constructorForServerAuthentication( const QVariantMap &additionalProps) const { return constructorFor(ChannelClassSpec::serverAuthentication(additionalProps)); } void ChannelFactory::setConstructorForServerAuthentication(const ConstructorConstPtr &ctor, const QVariantMap &additionalProps) { setConstructorFor(ChannelClassSpec::serverAuthentication(additionalProps), ctor); } Features ChannelFactory::commonFeatures() const { return featuresFor(ChannelClassSpec()); } void ChannelFactory::addCommonFeatures(const Features &features) { addFeaturesFor(ChannelClassSpec(), features); } ChannelFactory::ConstructorConstPtr ChannelFactory::fallbackConstructor() const { return constructorFor(ChannelClassSpec()); } void ChannelFactory::setFallbackConstructor(const ConstructorConstPtr &ctor) { setConstructorFor(ChannelClassSpec(), ctor); } Features ChannelFactory::featuresFor(const ChannelClassSpec &channelClass) const { Features features; foreach (const ChannelClassFeatures &pair, mPriv->features) { if (pair.first.isSubsetOf(channelClass)) { features.unite(pair.second); } } return features; } void ChannelFactory::addFeaturesFor(const ChannelClassSpec &channelClass, const Features &features) { QList::iterator i; for (i = mPriv->features.begin(); i != mPriv->features.end(); ++i) { if (channelClass.allProperties().size() > i->first.allProperties().size()) { break; } if (i->first == channelClass) { i->second.unite(features); return; } } // We ran out of feature specifications (for the given size/specificity of a channel class) // before finding a matching one, so let's create a new entry mPriv->features.insert(i, qMakePair(channelClass, features)); } ChannelFactory::ConstructorConstPtr ChannelFactory::constructorFor(const ChannelClassSpec &cc) const { QList::iterator i; for (i = mPriv->ctors.begin(); i != mPriv->ctors.end(); ++i) { if (i->first.isSubsetOf(cc)) { return i->second; } } // If this is reached, we didn't have a proper fallback constructor Q_ASSERT(false); return ConstructorConstPtr(); } void ChannelFactory::setConstructorFor(const ChannelClassSpec &channelClass, const ConstructorConstPtr &ctor) { if (ctor.isNull()) { warning().nospace() << "Tried to set a NULL ctor for ChannelClass(" << channelClass.channelType() << ", " << channelClass.targetHandleType() << ", " << channelClass.allProperties().size() << "props in total)"; return; } QList::iterator i; for (i = mPriv->ctors.begin(); i != mPriv->ctors.end(); ++i) { if (channelClass.allProperties().size() > i->first.allProperties().size()) { break; } if (i->first == channelClass) { i->second = ctor; return; } } // We ran out of constructors (for the given size/specificity of a channel class) // before finding a matching one, so let's create a new entry mPriv->ctors.insert(i, qMakePair(channelClass, ctor)); } /** * Constructs a Channel proxy and begins making it ready. * * If a valid proxy already exists in the factory cache for the given combination of \a busName and * \a objectPath, it is returned instead. All newly created proxies are automatically cached until * they're either DBusProxy::invalidated() or the last reference to them outside the factory has * been dropped. * * The proxy can be accessed immediately after this function returns using PendingReady::proxy(). * * \param connection Proxy for the owning connection of the channel. * \param channelPath The object path of the channel. * \param immutableProperties The immutable properties of the channel. * \return A PendingReady operation with the proxy in PendingReady::proxy(). */ PendingReady *ChannelFactory::proxy(const ConnectionPtr &connection, const QString &channelPath, const QVariantMap &immutableProperties) const { DBusProxyPtr proxy = cachedProxy(connection->busName(), channelPath); if (proxy.isNull()) { proxy = constructorFor(ChannelClassSpec(immutableProperties))->construct(connection, channelPath, immutableProperties); } return nowHaveProxy(proxy); } /** * Transforms well-known names to the corresponding unique names, as is appropriate for Channel * * \param uniqueOrWellKnown The name to transform. * \return The unique name corresponding to \a uniqueOrWellKnown (which may be it itself). */ QString ChannelFactory::finalBusNameFrom(const QString &uniqueOrWellKnown) const { return StatefulDBusProxy::uniqueNameFrom(dbusConnection(), uniqueOrWellKnown); } /** * Return features as configured for the channel class given by the Channel::immutableProperties() * of \a proxy. * * \param proxy The Channel proxy to determine the features for. * \return A list of Feature objects. */ Features ChannelFactory::featuresFor(const DBusProxyPtr &proxy) const { ChannelPtr chan = ChannelPtr::qObjectCast(proxy); Q_ASSERT(!chan.isNull()); return featuresFor(ChannelClassSpec(chan->immutableProperties())); } } // Tp telepathy-qt-0.9.3/TelepathyQt/not-filter.dox0000644000175200001440000000233412000056607023461 0ustar00collabora-develusers00000000000000/* * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 */ /** * \class Tp::NotFilter * \ingroup utils * \headerfile TelepathyQt/not-filter.h * * \brief The NotFilter class provides a generic filter object to be used * in conjunction of other filters. * * The NotFilter will match if its given filter does not match its criteria. */ telepathy-qt-0.9.3/TelepathyQt/call-channel.cpp0000644000175200001440000013034412000056607023712 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010-2012 Collabora Ltd. * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/call-channel.moc.hpp" #include #include #include #include #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT CallChannel::Private { Private(CallChannel *parent); ~Private(); static void introspectCore(Private *self); static void introspectCallState(Private *self); static void introspectCallMembers(Private *self); static void introspectContents(Private *self); static void introspectLocalHoldState(Private *self); void processCallMembersChanged(); struct CallMembersChangedInfo; // Public object CallChannel *parent; // Mandatory proxies Client::ChannelTypeCallInterface *callInterface; ReadinessHelper *readinessHelper; // Introspection uint state; uint flags; CallStateReason stateReason; QVariantMap stateDetails; CallMemberMap callMembers; QHash callMembersContacts; QQueue< QSharedPointer > callMembersChangedQueue; QSharedPointer currentCallMembersChangedInfo; bool hardwareStreaming; uint initialTransportType; bool initialAudio; bool initialVideo; QString initialAudioName; QString initialVideoName; bool mutableContents; CallContents contents; CallContents incompleteContents; uint localHoldState; uint localHoldStateReason; }; struct TP_QT_NO_EXPORT CallChannel::Private::CallMembersChangedInfo { CallMembersChangedInfo(const CallMemberMap &updates, const HandleIdentifierMap &identifiers, const UIntList &removed, const CallStateReason &reason) : updates(updates), identifiers(identifiers), removed(removed), reason(reason) { } static QSharedPointer create( const CallMemberMap &updates, const HandleIdentifierMap &identifiers, const UIntList &removed, const CallStateReason &reason) { CallMembersChangedInfo *info = new CallMembersChangedInfo( updates, identifiers, removed, reason); return QSharedPointer(info); } CallMemberMap updates; HandleIdentifierMap identifiers; UIntList removed; CallStateReason reason; }; CallChannel::Private::Private(CallChannel *parent) : parent(parent), callInterface(parent->interface()), readinessHelper(parent->readinessHelper()), state(CallStateUnknown), flags((uint) -1), hardwareStreaming(false), initialTransportType(StreamTransportTypeUnknown), initialAudio(false), initialVideo(false), mutableContents(false), localHoldState(LocalHoldStateUnheld), localHoldStateReason(LocalHoldStateReasonNone) { ReadinessHelper::Introspectables introspectables; ReadinessHelper::Introspectable introspectableCore( QSet() << 0, // makesSenseForStatuses Features() << Channel::FeatureCore, // dependsOnFeatures (core) QStringList(), // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::introspectCore, this); introspectables[FeatureCore] = introspectableCore; ReadinessHelper::Introspectable introspectableCallState( QSet() << 0, // makesSenseForStatuses Features() << CallChannel::FeatureCore, // dependsOnFeatures (core) QStringList(), // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::introspectCallState, this); introspectables[FeatureCallState] = introspectableCallState; ReadinessHelper::Introspectable introspectableCallMembers( QSet() << 0, // makesSenseForStatuses Features() << CallChannel::FeatureCore, // dependsOnFeatures (core) QStringList(), // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::introspectCallMembers, this); introspectables[FeatureCallMembers] = introspectableCallMembers; ReadinessHelper::Introspectable introspectableContents( QSet() << 0, // makesSenseForStatuses Features() << CallChannel::FeatureCore, // dependsOnFeatures (core) QStringList(), // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::introspectContents, this); introspectables[FeatureContents] = introspectableContents; ReadinessHelper::Introspectable introspectableLocalHoldState( QSet() << 0, // makesSenseForStatuses Features() << CallChannel::FeatureCore, // dependsOnFeatures (core) QStringList() << TP_QT_IFACE_CHANNEL_INTERFACE_HOLD, // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::introspectLocalHoldState, this); introspectables[FeatureLocalHoldState] = introspectableLocalHoldState; readinessHelper->addIntrospectables(introspectables); } CallChannel::Private::~Private() { } void CallChannel::Private::introspectCore(CallChannel::Private *self) { const static QString qualifiedNames[] = { TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".HardwareStreaming"), TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialTransport"), TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudio"), TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideo"), TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudioName"), TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideoName"), TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".MutableContents") }; CallChannel *parent = self->parent; QVariantMap immutableProperties = parent->immutableProperties(); bool needIntrospectMainProps = false; for (unsigned i = 0; i < sizeof(qualifiedNames)/sizeof(QString); ++i) { const QString &qualified = qualifiedNames[i]; if (!immutableProperties.contains(qualified)) { needIntrospectMainProps = true; break; } } if (needIntrospectMainProps) { debug() << "Introspecting immutable properties of CallChannel"; parent->connect(self->callInterface->requestAllProperties(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(gotMainProperties(Tp::PendingOperation*))); } else { self->hardwareStreaming = qdbus_cast(immutableProperties[ TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".HardwareStreaming")]); self->initialTransportType = qdbus_cast(immutableProperties[ TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialTransport")]); self->initialAudio = qdbus_cast(immutableProperties[ TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudio")]); self->initialVideo = qdbus_cast(immutableProperties[ TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideo")]); self->initialAudioName = qdbus_cast(immutableProperties[ TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudioName")]); self->initialVideoName = qdbus_cast(immutableProperties[ TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideoName")]); self->mutableContents = qdbus_cast(immutableProperties[ TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".MutableContents")]); self->readinessHelper->setIntrospectCompleted(FeatureCore, true); } } void CallChannel::Private::introspectCallState(CallChannel::Private *self) { CallChannel *parent = self->parent; parent->connect(self->callInterface, SIGNAL(CallStateChanged(uint,uint,Tp::CallStateReason,QVariantMap)), SLOT(onCallStateChanged(uint,uint,Tp::CallStateReason,QVariantMap))); parent->connect(self->callInterface->requestAllProperties(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(gotCallState(Tp::PendingOperation*))); } void CallChannel::Private::introspectCallMembers(CallChannel::Private *self) { CallChannel *parent = self->parent; parent->connect(self->callInterface, SIGNAL(CallMembersChanged(Tp::CallMemberMap,Tp::HandleIdentifierMap,Tp::UIntList,Tp::CallStateReason)), SLOT(onCallMembersChanged(Tp::CallMemberMap,Tp::HandleIdentifierMap,Tp::UIntList,Tp::CallStateReason))); parent->connect(self->callInterface->requestAllProperties(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(gotCallMembers(Tp::PendingOperation*))); } void CallChannel::Private::introspectContents(CallChannel::Private *self) { CallChannel *parent = self->parent; parent->connect(self->callInterface, SIGNAL(ContentAdded(QDBusObjectPath)), SLOT(onContentAdded(QDBusObjectPath))); parent->connect(self->callInterface, SIGNAL(ContentRemoved(QDBusObjectPath,Tp::CallStateReason)), SLOT(onContentRemoved(QDBusObjectPath,Tp::CallStateReason))); parent->connect(self->callInterface->requestPropertyContents(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(gotContents(Tp::PendingOperation*))); } void CallChannel::Private::introspectLocalHoldState(CallChannel::Private *self) { CallChannel *parent = self->parent; Client::ChannelInterfaceHoldInterface *holdInterface = parent->interface(); parent->connect(holdInterface, SIGNAL(HoldStateChanged(uint,uint)), SLOT(onLocalHoldStateChanged(uint,uint))); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( holdInterface->GetHoldState(), parent); parent->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotLocalHoldState(QDBusPendingCallWatcher*))); } void CallChannel::Private::processCallMembersChanged() { if (currentCallMembersChangedInfo) { // currently building contacts return; } if (callMembersChangedQueue.isEmpty()) { if (!parent->isReady(FeatureCallMembers)) { readinessHelper->setIntrospectCompleted(FeatureCallMembers, true); } return; } currentCallMembersChangedInfo = callMembersChangedQueue.dequeue(); QSet pendingCallMembers; for (ContactSendingStateMap::const_iterator i = currentCallMembersChangedInfo->updates.constBegin(); i != currentCallMembersChangedInfo->updates.constEnd(); ++i) { pendingCallMembers.insert(i.key()); } foreach(uint i, currentCallMembersChangedInfo->removed) { pendingCallMembers.insert(i); } if (!pendingCallMembers.isEmpty()) { ConnectionPtr connection = parent->connection(); connection->lowlevel()->injectContactIds(currentCallMembersChangedInfo->identifiers); ContactManagerPtr contactManager = connection->contactManager(); PendingContacts *contacts = contactManager->contactsForHandles( pendingCallMembers.toList()); parent->connect(contacts, SIGNAL(finished(Tp::PendingOperation*)), SLOT(gotCallMembersContacts(Tp::PendingOperation*))); } else { currentCallMembersChangedInfo.clear(); processCallMembersChanged(); } } /** * \class CallChannel * \ingroup clientchannel * \headerfile TelepathyQt/call-channel.h * * \brief The CallChannel class provides an object representing a * Telepathy channel of type Call. */ /** * Feature representing the core that needs to become ready to make the * CallChannel object usable. * * When calling isReady(), becomeReady(), this feature is implicitly added * to the requested features. */ const Feature CallChannel::FeatureCore = Feature(QLatin1String(CallChannel::staticMetaObject.className()), 0, true); /** * Feature used in order to access call state specific methods. * * See call state specific methods' documentation for more details. */ const Feature CallChannel::FeatureCallState = Feature(QLatin1String(CallChannel::staticMetaObject.className()), 1); /** * Feature used in order to access members specific methods. * * See local members specific methods' documentation for more details. */ const Feature CallChannel::FeatureCallMembers = Feature(QLatin1String(CallChannel::staticMetaObject.className()), 2); /** * Feature used in order to access content specific methods. * * See media content specific methods' documentation for more details. */ const Feature CallChannel::FeatureContents = Feature(QLatin1String(CallChannel::staticMetaObject.className()), 3); /** * Feature used in order to access local hold state info. * * See local hold state specific methods' documentation for more details. */ const Feature CallChannel::FeatureLocalHoldState = Feature(QLatin1String(CallChannel::staticMetaObject.className()), 4); /** * Create a new CallChannel object. * * \param connection Connection owning this channel, and specifying the * service. * \param objectPath The object path of this channel. * \param immutableProperties The immutable properties of this channel. * \return A CallChannelPtr object pointing to the newly created * CallChannel object. */ CallChannelPtr CallChannel::create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) { return CallChannelPtr(new CallChannel(connection, objectPath, immutableProperties)); } /** * Construct a new CallChannel associated with the given object on the same * service as the given connection. * * \param connection Connection owning this channel, and specifying the * service. * \param objectPath The object path of this channel. * \param immutableProperties The immutable properties of this channel. * \param coreFeature The core feature of the channel type. The corresponding introspectable * should depend on Channel::FeatureCore. */ CallChannel::CallChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature) : Channel(connection, objectPath, immutableProperties, coreFeature), mPriv(new Private(this)) { } /** * Class destructor. */ CallChannel::~CallChannel() { delete mPriv; } /** * Return the current high-level state of this call. * * This function requires CallChannel::FeatureCallState to be enabled. * * \return The current high-level state of this call. * \sa callStateChanged() */ CallState CallChannel::callState() const { if (!isReady(FeatureCallState)) { warning() << "CallChannel::callState() used with FeatureCallState not ready"; } return (CallState) mPriv->state; } /** * Return the flags representing the status of this call as a whole, providing more specific * information than callState(). * * This function requires CallChannel::FeatureCallState to be enabled. * * \return The flags representing the status of this call. * \sa callFlagsChanged() */ CallFlags CallChannel::callFlags() const { if (!isReady(FeatureCallState)) { warning() << "CallChannel::callFlags() used with FeatureCallState not ready"; } return (CallFlags) mPriv->flags; } /** * Return the reason for the last change to the callState() and/or callFlags(). * * This function requires CallChannel::FeatureCallState to be enabled. * * \return The reason for the last change to the callState() and/or callFlags(). * \sa callStateChanged(), callFlagsChanged() */ CallStateReason CallChannel::callStateReason() const { if (!isReady(FeatureCallState)) { warning() << "CallChannel::callStateReason() used with FeatureCallState not ready"; } return mPriv->stateReason; } /** * Return optional extensible details for the callState(), * callFlags() and/or callStateReason(). * * This function requires CallChannel::FeatureCallState to be enabled. * * \return The optional extensible details for the callState(), * callFlags() and/or callStateReason(). * \sa callStateChanged(), callFlagsChanged() */ QVariantMap CallChannel::callStateDetails() const { if (!isReady(FeatureCallState)) { warning() << "CallChannel::callStateDetails() used with FeatureCallState not ready"; } return mPriv->stateDetails; } /** * Return the remote members of this call. * * This function requires CallChannel::FeatureCallMembers to be enabled. * * \return The remote members of this call. * \sa remoteMemberFlags(), remoteMemberFlagsChanged(), remoteMembersRemoved() */ Contacts CallChannel::remoteMembers() const { if (!isReady(FeatureCallMembers)) { warning() << "CallChannel::remoteMembers() used with FeatureCallMembers not ready"; return Contacts(); } return mPriv->callMembersContacts.values().toSet(); } /** * Return the flags that describe the status of a given \a member of this call. * * This function requires CallChannel::FeatureCallMembers to be enabled. * * \param member The member of interest. * \return The flags that describe the status of the requested member. * \sa remoteMemberFlagsChanged(), remoteMembers(), remoteMembersRemoved() */ CallMemberFlags CallChannel::remoteMemberFlags(const ContactPtr &member) const { if (!isReady(FeatureCallMembers)) { warning() << "CallChannel::remoteMemberFlags() used with FeatureCallMembers not ready"; return (CallMemberFlags) 0; } if (!member) { return (CallMemberFlags) 0; } for (CallMemberMap::const_iterator i = mPriv->callMembers.constBegin(); i != mPriv->callMembers.constEnd(); ++i) { uint handle = i.key(); CallMemberFlags sendingState = (CallMemberFlags) i.value(); if (handle == member->handle()[0]) { return sendingState; } } return (CallMemberFlags) 0; } /** * Check whether media streaming by the handler is required for this channel. * * If \c false, all of the media streaming is done by some mechanism outside the scope * of Telepathy, otherwise the handler is responsible for doing the actual media streaming. * * \return \c true if required, \c false otherwise. */ bool CallChannel::handlerStreamingRequired() const { return !mPriv->hardwareStreaming; } /** * Return the initial transport type used for this call if set on a requested channel. * * Where not applicable, this property is defined to be #StreamTransportTypeUnknown, in * particular, on CMs with hardware streaming. * * \return The initial transport type used for this call. */ StreamTransportType CallChannel::initialTransportType() const { return (StreamTransportType) mPriv->initialTransportType; } /** * Return whether an audio content was requested at the channel's creation time. * * \return \c true if an audio content was requested, \c false otherwise. */ bool CallChannel::hasInitialAudio() const { return mPriv->initialAudio; } /** * Return whether a video content was requested at the channel's creation time. * * \return \c true if an video content was requested, \c false otherwise. */ bool CallChannel::hasInitialVideo() const { return mPriv->initialVideo; } /** * Return the name of the initial audio content if hasInitialAudio() returns \c true. * * \return The name of the initial audio content. */ QString CallChannel::initialAudioName() const { return mPriv->initialAudioName; } /** * Return the name of the initial video content if hasInitialVideo() returns \c true. * * \return The name of the initial video content. */ QString CallChannel::initialVideoName() const { return mPriv->initialVideoName; } /** * Return whether new contents can be added on the call after the Channel has * been requested. * * \return \c true if a new content can be added after the Channel has been * requested, \c false otherwise. * \sa requestContent() */ bool CallChannel::hasMutableContents() const { return mPriv->mutableContents; } /** * Indicate that the local user has been alerted about the incoming call. * * \return A PendingOperation which will emit PendingOperation::finished * when the call has finished. */ PendingOperation *CallChannel::setRinging() { return new PendingVoid(mPriv->callInterface->SetRinging(), CallChannelPtr(this)); } /** * Notify the CM that the local user is already in a call, so this * call has been put in a call-waiting style queue. * * \return A PendingOperation which will emit PendingOperation::finished * when the call has finished. */ PendingOperation *CallChannel::setQueued() { return new PendingVoid(mPriv->callInterface->SetQueued(), CallChannelPtr(this)); } /** * Accept an incoming call, or begin calling the remote contact on an outgoing call. * * \return A PendingOperation which will emit PendingOperation::finished * when the call has finished. */ PendingOperation *CallChannel::accept() { return new PendingVoid(mPriv->callInterface->Accept(), CallChannelPtr(this)); } /** * Request that the call is ended. * * \param reason A generic hangup reason. * \param detailedReason A more specific reason for the call hangup, if one is * available, or an empty string otherwise. * \param message A human-readable message to be sent to the remote contact(s). * \return A PendingOperation which will emit PendingOperation::finished * when the call has finished. */ PendingOperation *CallChannel::hangup(CallStateChangeReason reason, const QString &detailedReason, const QString &message) { return new PendingVoid(mPriv->callInterface->Hangup(reason, detailedReason, message), CallChannelPtr(this)); } /** * Return a list of media contents in this channel. * * This methods requires CallChannel::FeatureContents to be enabled. * * \return The contents in this channel. * \sa contentAdded(), contentRemoved(), contentsForType(), contentByName(), requestContent() */ CallContents CallChannel::contents() const { if (!isReady(FeatureContents)) { warning() << "CallChannel::contents() used with FeatureContents not ready"; return CallContents(); } return mPriv->contents; } /** * Return a list of media contents in this channel for the given type \a type. * * This methods requires CallChannel::FeatureContents to be enabled. * * \param type The interested type. * \return A list of media contents in this channel for the given type \a type. * \sa contentAdded(), contentRemoved(), contents(), contentByName(), requestContent() */ CallContents CallChannel::contentsForType(MediaStreamType type) const { if (!isReady(FeatureContents)) { warning() << "CallChannel::contents() used with FeatureContents not ready"; return CallContents(); } CallContents contents; foreach (const CallContentPtr &content, mPriv->contents) { if (content->type() == type) { contents.append(content); } } return contents; } /** * Return the media content in this channel that has the specified \a name. * * This methods requires CallChannel::FeatureContents to be enabled. * * \param name The interested name. * \return The media content in this channel that has the specified \a name. * \sa contentAdded(), contentRemoved(), contents(), contentsForType(), requestContent() */ CallContentPtr CallChannel::contentByName(const QString &contentName) const { if (!isReady(FeatureContents)) { warning() << "CallChannel::contentByName() used with FeatureContents not ready"; return CallContentPtr(); } foreach (const CallContentPtr &content, mPriv->contents) { if (content->name() == contentName) { return content; } } return CallContentPtr(); } /** * Request a new media content to be created to exchange the given type \a type * of media. * * This methods requires CallChannel::FeatureContents to be enabled. * * \return A PendingCallContent which will emit PendingCallContent::finished * when the call has finished. * \sa contentAdded(), contents(), contentsForType(), contentByName() */ PendingCallContent *CallChannel::requestContent(const QString &name, MediaStreamType type, MediaStreamDirection direction) { return new PendingCallContent(CallChannelPtr(this), name, type, direction); } /** * Return whether the local user has placed this channel on hold. * * This method requires CallChannel::FeatureHoldState to be enabled. * * \return The channel's local hold state. * \sa requestHold(), localHoldStateChanged() */ LocalHoldState CallChannel::localHoldState() const { if (!isReady(FeatureLocalHoldState)) { warning() << "CallChannel::localHoldState() used with FeatureLocalHoldState not ready"; } else if (!hasInterface(TP_QT_IFACE_CHANNEL_INTERFACE_HOLD)) { warning() << "CallChannel::localHoldStateReason() used with no hold interface"; } return (LocalHoldState) mPriv->localHoldState; } /** * Return the reason why localHoldState() changed to its current value. * * This method requires CallChannel::FeatureLocalHoldState to be enabled. * * \return The channel local hold state reason. * \sa requestHold(), localHoldStateChanged() */ LocalHoldStateReason CallChannel::localHoldStateReason() const { if (!isReady(FeatureLocalHoldState)) { warning() << "CallChannel::localHoldStateReason() used with FeatureLocalHoldState not ready"; } else if (!hasInterface(TP_QT_IFACE_CHANNEL_INTERFACE_HOLD)) { warning() << "CallChannel::localHoldStateReason() used with no hold interface"; } return (LocalHoldStateReason) mPriv->localHoldStateReason; } /** * Request that the channel be put on hold (be instructed not to send any media * streams to you) or be taken off hold. * * If the connection manager can immediately tell that the requested state * change could not possibly succeed, the resulting PendingOperation will fail * with error code #TP_QT_ERROR_NOT_AVAILABLE. * If the requested state is the same as the current state, the resulting * PendingOperation will finish successfully. * * Otherwise, the channel's local hold state will change to * Tp::LocalHoldStatePendingHold or Tp::LocalHoldStatePendingUnhold (as * appropriate), then the resulting PendingOperation will finish successfully. * * The eventual success or failure of the request is indicated by a subsequent * localHoldStateChanged() signal, changing the local hold state to * Tp::LocalHoldStateHeld or Tp::LocalHoldStateUnheld. * * If the channel has multiple streams, and the connection manager succeeds in * changing the hold state of one stream but fails to change the hold state of * another, it will attempt to revert all streams to their previous hold * states. * * If the channel does not support the #TP_QT_IFACE_CHANNEL_INTERFACE_HOLD * interface, the PendingOperation will fail with error code * #TP_QT_ERROR_NOT_IMPLEMENTED. * * \param hold A boolean indicating whether or not the channel should be on hold * \return A PendingOperation, which will emit PendingOperation::finished * when the request finishes. * \sa localHoldState(), localHoldStateReason(), localHoldStateChanged() */ PendingOperation *CallChannel::requestHold(bool hold) { if (!hasInterface(TP_QT_IFACE_CHANNEL_INTERFACE_HOLD)) { warning() << "CallChannel::requestHold() used with no hold interface"; return new PendingFailure(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("CallChannel does not support hold interface"), CallChannelPtr(this)); } Client::ChannelInterfaceHoldInterface *holdInterface = interface(); return new PendingVoid(holdInterface->RequestHold(hold), CallChannelPtr(this)); } void CallChannel::gotMainProperties(PendingOperation *op) { if (op->isError()) { warning().nospace() << "CallInterface::requestAllProperties() failed with " << op->errorName() << ": " << op->errorMessage(); mPriv->readinessHelper->setIntrospectCompleted(FeatureCore, false, op->errorName(), op->errorMessage()); return; } debug() << "Got reply to CallInterface::requestAllProperties()"; PendingVariantMap *pvm = qobject_cast(op); Q_ASSERT(pvm); QVariantMap props = pvm->result(); mPriv->hardwareStreaming = qdbus_cast(props[QLatin1String("HardwareStreaming")]); mPriv->initialTransportType = qdbus_cast(props[QLatin1String("InitialTransport")]); mPriv->initialAudio = qdbus_cast(props[QLatin1String("InitialAudio")]); mPriv->initialVideo = qdbus_cast(props[QLatin1String("InitialVideo")]); mPriv->initialAudioName = qdbus_cast(props[QLatin1String("InitialAudioName")]); mPriv->initialVideoName = qdbus_cast(props[QLatin1String("InitialVideoName")]); mPriv->mutableContents = qdbus_cast(props[QLatin1String("MutableContents")]); mPriv->readinessHelper->setIntrospectCompleted(FeatureCore, true); } void CallChannel::gotCallState(PendingOperation *op) { if (op->isError()) { warning().nospace() << "CallInterface::requestAllProperties() failed with " << op->errorName() << ": " << op->errorMessage(); mPriv->readinessHelper->setIntrospectCompleted(FeatureCallState, false, op->errorName(), op->errorMessage()); return; } debug() << "Got reply to CallInterface::requestAllProperties()"; PendingVariantMap *pvm = qobject_cast(op); Q_ASSERT(pvm); QVariantMap props = pvm->result(); mPriv->state = qdbus_cast(props[QLatin1String("CallState")]); mPriv->flags = qdbus_cast(props[QLatin1String("CallFlags")]); mPriv->stateReason = qdbus_cast(props[QLatin1String("CallStateReason")]); mPriv->stateDetails = qdbus_cast(props[QLatin1String("CallStateDetails")]); mPriv->readinessHelper->setIntrospectCompleted(FeatureCallState, true); } void CallChannel::onCallStateChanged(uint state, uint flags, const CallStateReason &stateReason, const QVariantMap &stateDetails) { if (mPriv->state == state && mPriv->flags == flags && mPriv->stateReason == stateReason && mPriv->stateDetails == stateDetails) { // nothing changed return; } uint oldState = mPriv->state; uint oldFlags = mPriv->flags; mPriv->state = state; mPriv->flags = flags; mPriv->stateReason = stateReason; mPriv->stateDetails = stateDetails; if (oldState != state) { emit callStateChanged((CallState) state); } if (oldFlags != flags) { emit callFlagsChanged((CallFlags) flags); } } void CallChannel::gotCallMembers(PendingOperation *op) { if (op->isError()) { warning().nospace() << "CallInterface::requestAllProperties() failed with " << op->errorName() << ": " << op->errorMessage(); mPriv->readinessHelper->setIntrospectCompleted(FeatureCallMembers, false, op->errorName(), op->errorMessage()); return; } debug() << "Got reply to CallInterface::requestAllProperties()"; PendingVariantMap *pvm = qobject_cast(op); Q_ASSERT(pvm); QVariantMap props = pvm->result(); HandleIdentifierMap ids = qdbus_cast(props[QLatin1String("MemberIdentifiers")]); CallMemberMap callMembers = qdbus_cast(props[QLatin1String("CallMembers")]); mPriv->callMembersChangedQueue.enqueue(Private::CallMembersChangedInfo::create( callMembers, ids, UIntList(), CallStateReason())); mPriv->processCallMembersChanged(); } void CallChannel::gotCallMembersContacts(PendingOperation *op) { PendingContacts *pc = qobject_cast(op); if (!pc->isValid()) { warning().nospace() << "Getting contacts failed with " << pc->errorName() << ":" << pc->errorMessage() << ", ignoring"; mPriv->currentCallMembersChangedInfo.clear(); mPriv->processCallMembersChanged(); return; } QHash removed; for (ContactSendingStateMap::const_iterator i = mPriv->currentCallMembersChangedInfo->updates.constBegin(); i != mPriv->currentCallMembersChangedInfo->updates.constEnd(); ++i) { mPriv->callMembers.insert(i.key(), i.value()); } foreach (const ContactPtr &contact, pc->contacts()) { mPriv->callMembersContacts.insert(contact->handle()[0], contact); } foreach (uint handle, mPriv->currentCallMembersChangedInfo->removed) { mPriv->callMembers.remove(handle); if (isReady(FeatureCallMembers) && mPriv->callMembersContacts.contains(handle)) { removed.insert(handle, mPriv->callMembersContacts[handle]); // make sure we don't have updates for removed contacts mPriv->currentCallMembersChangedInfo->updates.remove(handle); } mPriv->callMembersContacts.remove(handle); } foreach (uint handle, pc->invalidHandles()) { mPriv->callMembers.remove(handle); if (isReady(FeatureCallMembers) && mPriv->callMembersContacts.contains(handle)) { removed.insert(handle, mPriv->callMembersContacts[handle]); // make sure we don't have updates for invalid handles mPriv->currentCallMembersChangedInfo->updates.remove(handle); } mPriv->callMembersContacts.remove(handle); } if (isReady(FeatureCallMembers)) { QHash remoteMemberFlags; for (CallMemberMap::const_iterator i = mPriv->currentCallMembersChangedInfo->updates.constBegin(); i != mPriv->currentCallMembersChangedInfo->updates.constEnd(); ++i) { uint handle = i.key(); CallMemberFlags flags = (CallMemberFlags) i.value(); Q_ASSERT(mPriv->callMembersContacts.contains(handle)); remoteMemberFlags.insert(mPriv->callMembersContacts[handle], flags); mPriv->callMembers.insert(i.key(), i.value()); } if (!remoteMemberFlags.isEmpty()) { emit remoteMemberFlagsChanged(remoteMemberFlags, mPriv->currentCallMembersChangedInfo->reason); } if (!removed.isEmpty()) { emit remoteMembersRemoved(removed.values().toSet(), mPriv->currentCallMembersChangedInfo->reason); } } mPriv->currentCallMembersChangedInfo.clear(); mPriv->processCallMembersChanged(); } void CallChannel::onCallMembersChanged(const CallMemberMap &updates, const HandleIdentifierMap &identifiers, const UIntList &removed, const CallStateReason &reason) { if (updates.isEmpty() && removed.isEmpty()) { debug() << "Received Call::CallMembersChanged with 0 removals and updates, skipping it"; return; } debug() << "Received Call::CallMembersChanged with" << updates.size() << "updated and" << removed.size() << "removed"; mPriv->callMembersChangedQueue.enqueue( Private::CallMembersChangedInfo::create(updates, identifiers, removed, reason)); mPriv->processCallMembersChanged(); } void CallChannel::gotContents(PendingOperation *op) { if (op->isError()) { warning().nospace() << "CallInterface::requestPropertyContents() failed with " << op->errorName() << ": " << op->errorMessage(); mPriv->readinessHelper->setIntrospectCompleted(FeatureContents, false, op->errorName(), op->errorMessage()); return; } debug() << "Got reply to CallInterface::requestPropertyContents()"; PendingVariant *pv = qobject_cast(op); Q_ASSERT(pv); ObjectPathList contentsPaths = qdbus_cast(pv->result()); if (contentsPaths.size() > 0) { foreach (const QDBusObjectPath &contentPath, contentsPaths) { CallContentPtr content = lookupContent(contentPath); if (!content) { addContent(contentPath); } } } else { mPriv->readinessHelper->setIntrospectCompleted(FeatureContents, true); } } void CallChannel::onContentAdded(const QDBusObjectPath &contentPath) { debug() << "Received Call::ContentAdded for content" << contentPath.path(); if (lookupContent(contentPath)) { debug() << "Content already exists, ignoring"; return; } addContent(contentPath); } void CallChannel::onContentRemoved(const QDBusObjectPath &contentPath, const CallStateReason &reason) { debug() << "Received Call::ContentRemoved for content" << contentPath.path(); CallContentPtr content = lookupContent(contentPath); if (!content) { debug() << "Content does not exist, ignoring"; return; } bool incomplete = mPriv->incompleteContents.contains(content); if (incomplete) { mPriv->incompleteContents.removeOne(content); } else { mPriv->contents.removeOne(content); } if (isReady(FeatureContents) && !incomplete) { emit contentRemoved(content, reason); } // the content was added/removed before become ready if (!isReady(FeatureContents) && mPriv->contents.size() == 0 && mPriv->incompleteContents.size() == 0) { mPriv->readinessHelper->setIntrospectCompleted(FeatureContents, true); } } void CallChannel::onContentReady(PendingOperation *op) { PendingReady *pr = qobject_cast(op); CallContentPtr content = CallContentPtr::qObjectCast(pr->proxy()); if (op->isError()) { mPriv->incompleteContents.removeOne(content); if (!isReady(FeatureContents) && mPriv->incompleteContents.size() == 0) { // let's not fail because a content could not become ready mPriv->readinessHelper->setIntrospectCompleted(FeatureContents, true); } return; } // the content was removed before become ready if (!mPriv->incompleteContents.contains(content)) { if (!isReady(FeatureContents) && mPriv->incompleteContents.size() == 0) { mPriv->readinessHelper->setIntrospectCompleted(FeatureContents, true); } return; } mPriv->incompleteContents.removeOne(content); mPriv->contents.append(content); if (isReady(FeatureContents)) { emit contentAdded(content); } if (!isReady(FeatureContents) && mPriv->incompleteContents.size() == 0) { mPriv->readinessHelper->setIntrospectCompleted(FeatureContents, true); } } void CallChannel::gotLocalHoldState(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (reply.isError()) { warning().nospace() << "Call::Hold::GetHoldState() failed with " << reply.error().name() << ": " << reply.error().message(); debug() << "Ignoring error getting hold state and assuming we're not on hold"; onLocalHoldStateChanged(mPriv->localHoldState, mPriv->localHoldStateReason); watcher->deleteLater(); return; } debug() << "Got reply to Call::Hold::GetHoldState()"; onLocalHoldStateChanged(reply.argumentAt<0>(), reply.argumentAt<1>()); watcher->deleteLater(); } void CallChannel::onLocalHoldStateChanged(uint localHoldState, uint localHoldStateReason) { bool changed = false; if (mPriv->localHoldState != localHoldState || mPriv->localHoldStateReason != localHoldStateReason) { changed = true; } mPriv->localHoldState = localHoldState; mPriv->localHoldStateReason = localHoldStateReason; if (!isReady(FeatureLocalHoldState)) { mPriv->readinessHelper->setIntrospectCompleted(FeatureLocalHoldState, true); } else { if (changed) { emit localHoldStateChanged((LocalHoldState) mPriv->localHoldState, (LocalHoldStateReason) mPriv->localHoldStateReason); } } } CallContentPtr CallChannel::addContent(const QDBusObjectPath &contentPath) { CallContentPtr content = CallContentPtr( new CallContent(CallChannelPtr(this), contentPath)); mPriv->incompleteContents.append(content); connect(content->becomeReady(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onContentReady(Tp::PendingOperation*))); return content; } CallContentPtr CallChannel::lookupContent(const QDBusObjectPath &contentPath) const { foreach (const CallContentPtr &content, mPriv->contents) { if (content->objectPath() == contentPath.path()) { return content; } } foreach (const CallContentPtr &content, mPriv->incompleteContents) { if (content->objectPath() == contentPath.path()) { return content; } } return CallContentPtr(); } /** * \fn void CallChannel::callStateChanged(Tp::CallState state); * * This signal is emitted when the value of callState() changes. * * \param state The new state. */ /** * \fn void CallChannel::callFlagsChanged(Tp::CallFlags flags); * * This signal is emitted when the value of callFlags() changes. * * \param flags The new flags. */ /** * \fn void CallChannel::remoteMemberFlagsChanged(const QHash &remoteMemberFlags, const Tp::CallStateReason &reason); * * This signal is emitted when the flags of members of the call change, * or when new members are added in the call. * * \param remoteMemberFlags A maping of all the call members whose flags were * changed to their new flags, and of all the new members of the call to their initial flags. * \param reason The reason for this change. */ /** * \fn void CallChannel::remoteMembersRemoved(const Tp::Contacts &remoteMembers, const Tp::CallStateReason &reason); * * This signal is emitted when remote members are removed from the call. * * \param remoteMembers The members that were removed. * \param reason The reason for this removal. */ /** * \fn void CallChannel::contentAdded(const Tp::CallContentPtr &content); * * This signal is emitted when a media content is added to this channel. * * \param content The media content that was added. * \sa contents(), contentsForType() */ /** * \fn void CallChannel::contentRemoved(const Tp::CallContentPtr &content, const Tp::CallStateReason &reason); * * This signal is emitted when a media content is removed from this channel. * * \param content The media content that was removed. * \param reason The reason for this removal. * \sa contents(), contentsForType() */ /** * \fn void CallChannel::localHoldStateChanged(Tp::LocalHoldState state, Tp::LocalHoldStateReason reason); * * This signal is emitted when the local hold state of this channel changes. * * \param state The new local hold state of this channel. * \param reason The reason why the change occurred. * \sa localHoldState(), localHoldStateReason() */ } // Tp telepathy-qt-0.9.3/TelepathyQt/ContactCapabilities0000644000175200001440000000041012000056607024503 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ContactCapabilities_HEADER_GUARD_ #define _TelepathyQt_ContactCapabilities_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/presence.cpp0000644000175200001440000002720012000056607023171 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/debug-internal.h" namespace Tp { struct TP_QT_NO_EXPORT Presence::Private : public QSharedData { Private(const SimplePresence &sp) : sp(sp) { } Private(ConnectionPresenceType type, const QString &status, const QString &statusMessage) { sp.type = type; sp.status = status; sp.statusMessage = statusMessage; } SimplePresence sp; }; /** * \class Presence * \ingroup wrappers * \headerfile TelepathyQt/presence.h * * \brief The Presence class represents a Telepathy simple presence. */ Presence::Presence() { } Presence::Presence(const SimplePresence &sp) : mPriv(new Private(sp)) { } Presence::Presence(ConnectionPresenceType type, const QString &status, const QString &statusMessage) : mPriv(new Private(type, status, statusMessage)) { } Presence::Presence(const Presence &other) : mPriv(other.mPriv) { } Presence::~Presence() { } Presence Presence::available(const QString &statusMessage) { return Presence(ConnectionPresenceTypeAvailable, QLatin1String("available"), statusMessage); } Presence Presence::chat(const QString &statusMessage) { return Presence(ConnectionPresenceTypeAvailable, QLatin1String("chat"), statusMessage); } Presence Presence::away(const QString &statusMessage) { return Presence(ConnectionPresenceTypeAway, QLatin1String("away"), statusMessage); } Presence Presence::brb(const QString &statusMessage) { return Presence(ConnectionPresenceTypeAway, QLatin1String("brb"), statusMessage); } Presence Presence::busy(const QString &statusMessage) { return Presence(ConnectionPresenceTypeBusy, QLatin1String("busy"), statusMessage); } Presence Presence::dnd(const QString &statusMessage) { return Presence(ConnectionPresenceTypeBusy, QLatin1String("dnd"), statusMessage); } Presence Presence::xa(const QString &statusMessage) { return Presence(ConnectionPresenceTypeExtendedAway, QLatin1String("xa"), statusMessage); } Presence Presence::hidden(const QString &statusMessage) { return Presence(ConnectionPresenceTypeHidden, QLatin1String("hidden"), statusMessage); } Presence Presence::offline(const QString &statusMessage) { return Presence(ConnectionPresenceTypeOffline, QLatin1String("offline"), statusMessage); } Presence &Presence::operator=(const Presence &other) { this->mPriv = other.mPriv; return *this; } bool Presence::operator==(const Presence &other) const { if (!isValid() || !other.isValid()) { if (!isValid() && !other.isValid()) { return true; } return false; } return mPriv->sp == other.mPriv->sp; } bool Presence::operator!=(const Presence &other) const { if (!isValid() || !other.isValid()) { if (!isValid() && !other.isValid()) { return false; } return true; } return mPriv->sp != other.mPriv->sp; } ConnectionPresenceType Presence::type() const { if (!isValid()) { return ConnectionPresenceTypeUnknown; } return (ConnectionPresenceType) mPriv->sp.type; } QString Presence::status() const { if (!isValid()) { return QString(); } return mPriv->sp.status; } QString Presence::statusMessage() const { if (!isValid()) { return QString(); } return mPriv->sp.statusMessage; } // Sets all fields void Presence::setStatus(const SimplePresence &value) { if (!isValid()) { mPriv = new Private(value); return; } mPriv->sp = value; } // TODO: explain in proper docs that we don't have setStatusType and setStatus(QString status) // separately, because: // 1) type and status are tightly related with each other // 2) all statuses can't have status message so changing the status alone might make the presence // illegal if a message was left around void Presence::setStatus(ConnectionPresenceType type, const QString &status, const QString &statusMessage) { if (!isValid()) { mPriv = new Private(type, status, statusMessage); return; } mPriv->sp.type = type; mPriv->sp.status = status; mPriv->sp.statusMessage = statusMessage; } void Presence::setStatusMessage(const QString &statusMessage) { if (!isValid()) { return; } mPriv->sp.statusMessage = statusMessage; } SimplePresence Presence::barePresence() const { if (!isValid()) { return SimplePresence(); } return mPriv->sp; } struct TP_QT_NO_EXPORT PresenceSpec::Private : public QSharedData { Private(const QString &status, const SimpleStatusSpec &spec) : status(status), spec(spec) { } QString status; SimpleStatusSpec spec; }; /** * \class PresenceSpec * \ingroup wrappers * \headerfile TelepathyQt/presence.h * * \brief The PresenceSpec class represents a Telepathy presence information * supported by a protocol. */ PresenceSpec::PresenceSpec() { } PresenceSpec::PresenceSpec(const QString &status, const SimpleStatusSpec &spec) : mPriv(new Private(status, spec)) { } PresenceSpec::PresenceSpec(const PresenceSpec &other) : mPriv(other.mPriv) { } PresenceSpec::~PresenceSpec() { } PresenceSpec PresenceSpec::available(PresenceSpec::SimpleStatusFlags flags) { SimpleStatusSpec spec; spec.type = ConnectionPresenceTypeAvailable; spec.maySetOnSelf = flags & MaySetOnSelf; spec.canHaveMessage = flags & CanHaveStatusMessage; return PresenceSpec(QLatin1String("available"), spec); } PresenceSpec PresenceSpec::chat(PresenceSpec::SimpleStatusFlags flags) { SimpleStatusSpec spec; spec.type = ConnectionPresenceTypeAvailable; spec.maySetOnSelf = flags & MaySetOnSelf; spec.canHaveMessage = flags & CanHaveStatusMessage; return PresenceSpec(QLatin1String("chat"), spec); } PresenceSpec PresenceSpec::pstn(PresenceSpec::SimpleStatusFlags flags) { SimpleStatusSpec spec; spec.type = ConnectionPresenceTypeAvailable; spec.maySetOnSelf = flags & MaySetOnSelf; spec.canHaveMessage = flags & CanHaveStatusMessage; return PresenceSpec(QLatin1String("pstn"), spec); } PresenceSpec PresenceSpec::away(PresenceSpec::SimpleStatusFlags flags) { SimpleStatusSpec spec; spec.type = ConnectionPresenceTypeAway; spec.maySetOnSelf = flags & MaySetOnSelf; spec.canHaveMessage = flags & CanHaveStatusMessage; return PresenceSpec(QLatin1String("away"), spec); } PresenceSpec PresenceSpec::brb(PresenceSpec::SimpleStatusFlags flags) { SimpleStatusSpec spec; spec.type = ConnectionPresenceTypeAway; spec.maySetOnSelf = flags & MaySetOnSelf; spec.canHaveMessage = flags & CanHaveStatusMessage; return PresenceSpec(QLatin1String("brb"), spec); } PresenceSpec PresenceSpec::busy(PresenceSpec::SimpleStatusFlags flags) { SimpleStatusSpec spec; spec.type = ConnectionPresenceTypeBusy; spec.maySetOnSelf = flags & MaySetOnSelf; spec.canHaveMessage = flags & CanHaveStatusMessage; return PresenceSpec(QLatin1String("busy"), spec); } PresenceSpec PresenceSpec::dnd(PresenceSpec::SimpleStatusFlags flags) { SimpleStatusSpec spec; spec.type = ConnectionPresenceTypeBusy; spec.maySetOnSelf = flags & MaySetOnSelf; spec.canHaveMessage = flags & CanHaveStatusMessage; return PresenceSpec(QLatin1String("dnd"), spec); } PresenceSpec PresenceSpec::xa(PresenceSpec::SimpleStatusFlags flags) { SimpleStatusSpec spec; spec.type = ConnectionPresenceTypeExtendedAway; spec.maySetOnSelf = flags & MaySetOnSelf; spec.canHaveMessage = flags & CanHaveStatusMessage; return PresenceSpec(QLatin1String("xa"), spec); } PresenceSpec PresenceSpec::hidden(PresenceSpec::SimpleStatusFlags flags) { SimpleStatusSpec spec; spec.type = ConnectionPresenceTypeHidden; spec.maySetOnSelf = flags & MaySetOnSelf; spec.canHaveMessage = flags & CanHaveStatusMessage; return PresenceSpec(QLatin1String("hidden"), spec); } PresenceSpec PresenceSpec::offline(PresenceSpec::SimpleStatusFlags flags) { SimpleStatusSpec spec; spec.type = ConnectionPresenceTypeOffline; spec.maySetOnSelf = flags & MaySetOnSelf; spec.canHaveMessage = flags & CanHaveStatusMessage; return PresenceSpec(QLatin1String("offline"), spec); } PresenceSpec PresenceSpec::unknown(PresenceSpec::SimpleStatusFlags flags) { SimpleStatusSpec spec; spec.type = ConnectionPresenceTypeUnknown; spec.maySetOnSelf = flags & MaySetOnSelf; spec.canHaveMessage = flags & CanHaveStatusMessage; return PresenceSpec(QLatin1String("unknown"), spec); } PresenceSpec PresenceSpec::error(PresenceSpec::SimpleStatusFlags flags) { SimpleStatusSpec spec; spec.type = ConnectionPresenceTypeError; spec.maySetOnSelf = flags & MaySetOnSelf; spec.canHaveMessage = flags & CanHaveStatusMessage; return PresenceSpec(QLatin1String("error"), spec); } PresenceSpec &PresenceSpec::operator=(const PresenceSpec &other) { this->mPriv = other.mPriv; return *this; } bool PresenceSpec::operator==(const PresenceSpec &other) const { if (!isValid() || !other.isValid()) { if (!isValid() && !other.isValid()) { return true; } return false; } return (mPriv->status == other.mPriv->status) && (mPriv->spec == other.mPriv->spec); } bool PresenceSpec::operator!=(const PresenceSpec &other) const { if (!isValid() || !other.isValid()) { if (!isValid() && !other.isValid()) { return false; } return true; } return (mPriv->status != other.mPriv->status) && (mPriv->spec != other.mPriv->spec); } bool PresenceSpec::operator<(const PresenceSpec &other) const { if (!isValid()) { return false; } if (!other.isValid()) { return true; } return (mPriv->status < other.mPriv->status); } Presence PresenceSpec::presence(const QString &statusMessage) const { if (!isValid()) { return Presence(); } if (!canHaveStatusMessage() && !statusMessage.isEmpty()) { warning() << "Passing a status message to PresenceSpec with " "canHaveStatusMessage() being false"; } return Presence((ConnectionPresenceType) mPriv->spec.type, mPriv->status, statusMessage); } bool PresenceSpec::maySetOnSelf() const { if (!isValid()) { return false; } return mPriv->spec.maySetOnSelf; } bool PresenceSpec::canHaveStatusMessage() const { if (!isValid()) { return false; } return mPriv->spec.canHaveMessage; } SimpleStatusSpec PresenceSpec::bareSpec() const { if (!isValid()) { return SimpleStatusSpec(); } return mPriv->spec; } /** * \class PresenceSpecList * \ingroup wrappers * \headerfile TelepathyQt/presence.h * * \brief The PresenceSpecList class represents a list of PresenceSpec. */ } // Tp telepathy-qt-0.9.3/TelepathyQt/connection-manager-internal.h0000644000175200001440000001254112000056607026415 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2010 Collabora Ltd. * @copyright Copyright (C) 2008-2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_connection_manager_internal_h_HEADER_GUARD_ #define _TelepathyQt_connection_manager_internal_h_HEADER_GUARD_ #include #include #include #include #include #include namespace Tp { class ConnectionManager; class ReadinessHelper; struct TP_QT_NO_EXPORT ConnectionManager::Private { Private(ConnectionManager *parent, const QString &name, const ConnectionFactoryConstPtr &connFactory, const ChannelFactoryConstPtr &chanFactory, const ContactFactoryConstPtr &contactFactory); ~Private(); bool parseConfigFile(); static void introspectMain(Private *self); void introspectProtocolsLegacy(); void introspectParametersLegacy(); static QString makeBusName(const QString &name); static QString makeObjectPath(const QString &name); class PendingNames; class ProtocolWrapper; // Public object ConnectionManager *parent; ConnectionManagerLowlevelPtr lowlevel; QString name; // Instance of generated interface class Client::ConnectionManagerInterface *baseInterface; // Mandatory properties interface proxy Client::DBus::PropertiesInterface *properties; ReadinessHelper *readinessHelper; ConnectionFactoryConstPtr connFactory; ChannelFactoryConstPtr chanFactory; ContactFactoryConstPtr contactFactory; // Introspection QQueue parametersQueue; ProtocolInfoList protocols; QSet > wrappers; }; struct TP_QT_NO_EXPORT ConnectionManagerLowlevel::Private { Private(ConnectionManager *cm) : cm(cm) { } WeakPtr cm; }; class TP_QT_NO_EXPORT ConnectionManager::Private::PendingNames : public PendingStringList { Q_OBJECT public: PendingNames(const QDBusConnection &bus); ~PendingNames() {}; private Q_SLOTS: void onCallFinished(QDBusPendingCallWatcher *); void continueProcessing(); private: void invokeMethod(const QLatin1String &method); void parseResult(const QStringList &names); QQueue mMethodsQueue; QSet mResult; QDBusConnection mBus; }; class TP_QT_NO_EXPORT ConnectionManager::Private::ProtocolWrapper : public StatelessDBusProxy, public OptionalInterfaceFactory { Q_OBJECT public: static const Feature FeatureCore; ProtocolWrapper(const ConnectionManagerPtr &cm, const QString &objectPath, const QString &name, const QVariantMap &props); ~ProtocolWrapper(); ProtocolInfo info() const { return mInfo; } inline Client::ProtocolInterface *baseInterface() const { return interface(); } inline Client::ProtocolInterfaceAvatarsInterface *avatarsInterface() const { return interface(); } inline Client::ProtocolInterfacePresenceInterface *presenceInterface() const { return interface(); } inline Client::ProtocolInterfaceAddressingInterface *addressingInterface() const { return interface(); } private Q_SLOTS: void gotMainProperties(Tp::PendingOperation *op); void gotAvatarsProperties(Tp::PendingOperation *op); void gotPresenceProperties(Tp::PendingOperation *op); void gotAddressingProperties(Tp::PendingOperation *op); private: static void introspectMain(ProtocolWrapper *self); void introspectMainProperties(); void introspectInterfaces(); void introspectAvatars(); void introspectPresence(); void introspectAddressing(); void continueIntrospection(); QVariantMap qualifyProperties(const QString &ifaceName, const QVariantMap &unqualifiedProps); void fillRCCs(); bool extractImmutableProperties(); void extractMainProperties(const QVariantMap &props); void extractAvatarsProperties(const QVariantMap &props); void extractPresenceProperties(const QVariantMap &props); void extractAddressingProperties(const QVariantMap &props); ReadinessHelper *mReadinessHelper; ProtocolInfo mInfo; QVariantMap mImmutableProps; bool mHasMainProps; bool mHasAvatarsProps; bool mHasPresenceProps; bool mHasAddressingProps; QQueue introspectQueue; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/client.cpp0000644000175200001440000000205012000056607022637 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/cli-client-body.hpp" #include "TelepathyQt/_gen/cli-client.moc.hpp" telepathy-qt-0.9.3/TelepathyQt/NotFilter0000644000175200001440000000035212000056607022511 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_NotFilter_HEADER_GUARD_ #define _TelepathyQt_NotFilter_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/AccountSet0000644000175200001440000000035512000056607022656 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_AccountSet_HEADER_GUARD_ #define _TelepathyQt_AccountSet_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/TelepathyQt-uninstalled.pc.in0000644000175200001440000000117712000056607026403 0ustar00collabora-develusers00000000000000prefix=/nonexistent exec_prefix=/nonexistent abs_top_builddir=${CMAKE_BINARY_DIR} abs_top_srcdir=${CMAKE_SOURCE_DIR} Name: TelepathyQt${QT_VERSION_MAJOR} (uninstalled copy) Description: Qt utility library for the Telepathy framework Version: ${PACKAGE_VERSION} Requires.private: QtCore >= ${QT_MIN_VERSION}, QtCore < ${QT_MAX_VERSION}, QtDBus >= ${QT_MIN_VERSION}, QtDBus < ${QT_MAX_VERSION}, QtNetwork >= ${QT_MIN_VERSION}, QtNetwork < ${QT_MAX_VERSION}, QtXml >= ${QT_MIN_VERSION}, QtXml < ${QT_MAX_VERSION} Libs: ${CMAKE_BINARY_DIR}/TelepathyQt/libtelepathy-qt${QT_VERSION_MAJOR}.so Cflags: -I${CMAKE_SOURCE_DIR} -I${CMAKE_BINARY_DIR} telepathy-qt-0.9.3/TelepathyQt/contact-manager.h0000644000175200001440000001632212000056607024100 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2010 Collabora Ltd. * @copyright Copyright (C) 2008-2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_contact_manager_h_HEADER_GUARD_ #define _TelepathyQt_contact_manager_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include #include #include #include #include #include #include #include namespace Tp { class Connection; class PendingContacts; class PendingOperation; class TP_QT_EXPORT ContactManager : public Object { Q_OBJECT Q_DISABLE_COPY(ContactManager) public: virtual ~ContactManager(); ConnectionPtr connection() const; Features supportedFeatures() const; ContactListState state() const; Contacts allKnownContacts() const; QStringList allKnownGroups() const; PendingOperation *addGroup(const QString &group); PendingOperation *removeGroup(const QString &group); Contacts groupContacts(const QString &group) const; PendingOperation *addContactsToGroup(const QString &group, const QList &contacts); PendingOperation *removeContactsFromGroup(const QString &group, const QList &contacts); bool canRequestPresenceSubscription() const; bool subscriptionRequestHasMessage() const; PendingOperation *requestPresenceSubscription( const QList &contacts, const QString &message = QString()); bool canRemovePresenceSubscription() const; bool subscriptionRemovalHasMessage() const; bool canRescindPresenceSubscriptionRequest() const; bool subscriptionRescindingHasMessage() const; PendingOperation *removePresenceSubscription( const QList &contacts, const QString &message = QString()); bool canAuthorizePresencePublication() const; bool publicationAuthorizationHasMessage() const; PendingOperation *authorizePresencePublication( const QList &contacts, const QString &message = QString()); bool publicationRejectionHasMessage() const; bool canRemovePresencePublication() const; bool publicationRemovalHasMessage() const; PendingOperation *removePresencePublication( const QList &contacts, const QString &message = QString()); PendingOperation *removeContacts( const QList &contacts, const QString &message = QString()); bool canBlockContacts() const; bool canReportAbuse() const; PendingOperation *blockContacts(const QList &contacts); PendingOperation *blockContactsAndReportAbuse(const QList &contacts); PendingOperation *unblockContacts(const QList &contacts); PendingContacts *contactsForHandles(const UIntList &handles, const Features &features = Features()); PendingContacts *contactsForHandles(const ReferencedHandles &handles, const Features &features = Features()); PendingContacts *contactsForHandles(const HandleIdentifierMap &handles, const Features &features = Features()); PendingContacts *contactsForIdentifiers(const QStringList &identifiers, const Features &features = Features()); PendingContacts *contactsForVCardAddresses(const QString &vcardField, const QStringList &vcardAddresses, const Features &features = Features()); PendingContacts *contactsForUris(const QStringList &uris, const Features &features = Features()); PendingContacts *upgradeContacts(const QList &contacts, const Features &features); void requestContactAvatars(const QList &contacts); PendingOperation *refreshContactInfo(const QList &contact); Q_SIGNALS: void stateChanged(Tp::ContactListState state); void presencePublicationRequested(const Tp::Contacts &contacts); void groupAdded(const QString &group); void groupRenamed(const QString &oldGroup, const QString &newGroup); void groupRemoved(const QString &group); void groupMembersChanged(const QString &group, const Tp::Contacts &groupMembersAdded, const Tp::Contacts &groupMembersRemoved, const Tp::Channel::GroupMemberChangeDetails &details); void allKnownContactsChanged(const Tp::Contacts &contactsAdded, const Tp::Contacts &contactsRemoved, const Tp::Channel::GroupMemberChangeDetails &details); private Q_SLOTS: TP_QT_NO_EXPORT void onAliasesChanged(const Tp::AliasPairList &); TP_QT_NO_EXPORT void doRequestAvatars(); TP_QT_NO_EXPORT void onAvatarUpdated(uint, const QString &); TP_QT_NO_EXPORT void onAvatarRetrieved(uint, const QString &, const QByteArray &, const QString &); TP_QT_NO_EXPORT void onPresencesChanged(const Tp::SimpleContactPresences &); TP_QT_NO_EXPORT void onCapabilitiesChanged(const Tp::ContactCapabilitiesMap &); TP_QT_NO_EXPORT void onLocationUpdated(uint, const QVariantMap &); TP_QT_NO_EXPORT void onContactInfoChanged(uint, const Tp::ContactInfoFieldList &); TP_QT_NO_EXPORT void onClientTypesUpdated(uint, const QStringList &); TP_QT_NO_EXPORT void doRefreshInfo(); private: class PendingRefreshContactInfo; class Roster; friend class Channel; friend class Connection; friend class PendingContacts; friend class PendingRefreshContactInfo; friend class Roster; TP_QT_NO_EXPORT ContactManager(Connection *parent); TP_QT_NO_EXPORT ContactPtr lookupContactByHandle(uint handle); TP_QT_NO_EXPORT ContactPtr ensureContact(const ReferencedHandles &handle, const Features &features, const QVariantMap &attributes); TP_QT_NO_EXPORT ContactPtr ensureContact(uint bareHandle, const QString &id, const Features &features); TP_QT_NO_EXPORT static QString featureToInterface(const Feature &feature); TP_QT_NO_EXPORT void ensureTracking(const Feature &feature); TP_QT_NO_EXPORT PendingOperation *introspectRoster(); TP_QT_NO_EXPORT PendingOperation *introspectRosterGroups(); TP_QT_NO_EXPORT void resetRoster(); TP_QT_NO_EXPORT PendingOperation *refreshContactInfo(Contact *contact); struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/DBusService0000644000175200001440000000036012000056607022760 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_DBusService_HEADER_GUARD_ #define _TelepathyQt_DBusService_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/StreamedMediaStream0000644000175200001440000000041212000056607024460 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_StreamedMediaStream_HEADER_GUARD_ #define _TelepathyQt_StreamedMediaStream_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/pending-operation.cpp0000644000175200001440000002747612000056607025026 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2009 Collabora Ltd. * @copyright Copyright (C) 2008-2009 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #define IN_TP_QT_HEADER #include "simple-pending-operations.h" #undef IN_TP_QT_HEADER #include "TelepathyQt/_gen/pending-operation.moc.hpp" #include "TelepathyQt/_gen/simple-pending-operations.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include namespace Tp { struct TP_QT_NO_EXPORT PendingOperation::Private { Private(const SharedPtr &object) : object(object), finished(false) { } SharedPtr object; QString errorName; QString errorMessage; bool finished; }; /** * \class PendingOperation * \headerfile TelepathyQt/pending-operation.h * * \brief The PendingOperation class is a base class for pending asynchronous * operations. * * This class represents an incomplete asynchronous operation, such as a * D-Bus method call. When the operation has finished, it emits * finished(). The slot or slots connected to the finished() signal may obtain * additional information from the pending operation. * * In simple cases, like a D-Bus method with no 'out' arguments or for which * all 'out' arguments are to be ignored (so the possible results are * success with no extra information, or failure with an error code), the * trivial subclass PendingVoid can be used. * * For pending operations that produce a result, another subclass of * PendingOperation can be used, with additional methods that provide that * result to the library user. * * After finished() is emitted, the PendingOperation is automatically * deleted using deleteLater(), so library users must not explicitly * delete this object. * * The design is loosely based on KDE's KJob. * * See \ref async_model */ /** * Construct a new PendingOperation object. * * \param object The object on which this pending operation takes place. */ PendingOperation::PendingOperation(const SharedPtr &object) : QObject(), mPriv(new Private(object)) { } /** * Class destructor. */ PendingOperation::~PendingOperation() { if (!mPriv->finished) { warning() << this << "still pending when it was deleted - finished will " "never be emitted"; } delete mPriv; } /** * Return the object on which this pending operation takes place. * * \return A pointer to a RefCounted object. */ SharedPtr PendingOperation::object() const { return mPriv->object; } void PendingOperation::emitFinished() { Q_ASSERT(mPriv->finished); emit finished(this); deleteLater(); } /** * Record that this pending operation has finished successfully, and * emit the finished() signal next time the event loop runs. */ void PendingOperation::setFinished() { if (mPriv->finished) { if (!mPriv->errorName.isEmpty()) { warning() << this << "trying to finish with success, but already" " failed with" << mPriv->errorName << ":" << mPriv->errorMessage; } else { warning() << this << "trying to finish with success, but already" " succeeded"; } return; } mPriv->finished = true; Q_ASSERT(isValid()); QTimer::singleShot(0, this, SLOT(emitFinished())); } /** * Record that this pending operation has finished with an error, and * emit the finished() signal next time the event loop runs. * * \param name The D-Bus error name, which must be non-empty. * \param message The debugging message. */ void PendingOperation::setFinishedWithError(const QString &name, const QString &message) { if (mPriv->finished) { if (mPriv->errorName.isEmpty()) { warning() << this << "trying to fail with" << name << "but already failed with" << errorName() << ":" << errorMessage(); } else { warning() << this << "trying to fail with" << name << "but already succeeded"; } return; } if (name.isEmpty()) { warning() << this << "should be given a non-empty error name"; mPriv->errorName = QLatin1String("org.freedesktop.Telepathy.Qt.ErrorHandlingError"); } else { mPriv->errorName = name; } mPriv->errorMessage = message; mPriv->finished = true; Q_ASSERT(isError()); QTimer::singleShot(0, this, SLOT(emitFinished())); } /** * Record that this pending operation has finished with an error, and * emit the finished() signal next time the event loop runs. * * \param error The error. * \sa finished() */ void PendingOperation::setFinishedWithError(const QDBusError &error) { setFinishedWithError(error.name(), error.message()); } /** * Return whether or not the request completed successfully. If the * request has not yet finished processing (isFinished() returns * \c false), this cannot yet be known, and \c false * will be returned. * * Equivalent to (isFinished() && !isError()). * * \return \c true if the request has finished processing and * has completed successfully, \c false otherwise. */ bool PendingOperation::isValid() const { return (mPriv->finished && mPriv->errorName.isEmpty()); } /** * Return whether or not the request has finished processing. * * The signal finished() is emitted when this changes from \c false * to true. * * Equivalent to (isValid() || isError()). * * \return \c true if the request has finished, \c false otherwise. * \sa finished() */ bool PendingOperation::isFinished() const { return mPriv->finished; } /** * Return whether or not the request resulted in an error. * * If the request has not yet finished processing (isFinished() returns * \c false), this cannot yet be known, and \c false * will be returned. * * Equivalent to (isFinished() && !isValid()). * * \return \c true if the request has finished processing and * has resulted in an error, \c false otherwise. */ bool PendingOperation::isError() const { return (mPriv->finished && !mPriv->errorName.isEmpty()); } /** * If isError() returns \c true, returns the D-Bus error with which * the operation failed. If the operation succeeded or has not yet * finished, returns an empty string. * * \return A D-Bus error name, or an empty string. */ QString PendingOperation::errorName() const { return mPriv->errorName; } /** * If isError() would return \c true, returns a debugging message associated * with the error, which may be an empty string. Otherwise, return an * empty string. * * \return A debugging message, or an empty string. */ QString PendingOperation::errorMessage() const { return mPriv->errorMessage; } /** * \fn void PendingOperation::finished(Tp::PendingOperation* operation) * * Emitted when the pending operation finishes, i.e. when isFinished() * changes from \c false to \c true. * * \param operation This operation object, from which further information * may be obtained. */ /** * \class PendingSuccess * \ingroup utils * \headerfile TelepathyQt/simple-pending-operations.h * * \brief The PendingSuccess class represents PendingOperation that is always * successful. */ /** * \class PendingFailure * \ingroup utils * \headerfile TelepathyQt/simple-pending-operations.h * * \brief The PendingFailure class represents a PendingOperation that always * fails with the error passed to the constructor. */ /** * \class PendingVoid * \ingroup utils * \headerfile TelepathyQt/simple-pending-operations.h * * \brief The PendingVoid class is a generic subclass of PendingOperation * representing a pending D-Bus method call that does not return anything * (or returns a result that is not interesting). */ /** * Construct a new PendingVoid object. * * \param object The object on which this pending operation takes place. * \param call A pending call as returned by the auto-generated low level * Telepathy API; if the method returns anything, the return * value(s) will be ignored. */ PendingVoid::PendingVoid(QDBusPendingCall call, const SharedPtr &object) : PendingOperation(object) { connect(new QDBusPendingCallWatcher(call), SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(watcherFinished(QDBusPendingCallWatcher*))); } void PendingVoid::watcherFinished(QDBusPendingCallWatcher *watcher) { if (watcher->isError()) { setFinishedWithError(watcher->error()); } else { setFinished(); } watcher->deleteLater(); } struct TP_QT_NO_EXPORT PendingComposite::Private { Private(bool failOnFirstError, uint nOperations) : failOnFirstError(failOnFirstError), error(false), nOperations(nOperations), nOperationsFinished(0) { } bool failOnFirstError; bool error; QString errorName; QString errorMessage; uint nOperations; uint nOperationsFinished; }; /** * \class PendingComposite * \ingroup utils * \headerfile TelepathyQt/simple-pending-operations.h * * \brief The PendingComposite class is a PendingOperation that can be used * to track multiple pending operations at once. */ PendingComposite::PendingComposite(const QList &operations, const SharedPtr &object) : PendingOperation(object), mPriv(new Private(true, operations.size())) { foreach (PendingOperation *operation, operations) { connect(operation, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onOperationFinished(Tp::PendingOperation*))); } } PendingComposite::PendingComposite(const QList &operations, bool failOnFirstError, const SharedPtr &object) : PendingOperation(object), mPriv(new Private(failOnFirstError, operations.size())) { foreach (PendingOperation *operation, operations) { connect(operation, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onOperationFinished(Tp::PendingOperation*))); } } PendingComposite::~PendingComposite() { delete mPriv; } void PendingComposite::onOperationFinished(Tp::PendingOperation *op) { if (op->isError()) { if (mPriv->failOnFirstError) { setFinishedWithError(op->errorName(), op->errorMessage()); return; } else if (!mPriv->error) { /* only save the first error that will be used on setFinishedWithError when all * pending operations finish */ mPriv->error = true; mPriv->errorName = op->errorName(); mPriv->errorMessage = op->errorMessage(); } } if (++mPriv->nOperationsFinished == mPriv->nOperations) { if (!mPriv->error) { setFinished(); } else { setFinishedWithError(mPriv->errorName, mPriv->errorMessage); } } } } // Tp telepathy-qt-0.9.3/TelepathyQt/contact-search-channel-internal.h0000644000175200001440000000324212000056607027150 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_contact_search_channel_internal_h_HEADER_GUARD_ #define _TelepathyQt_contact_search_channel_internal_h_HEADER_GUARD_ #include #include namespace Tp { class TP_QT_NO_EXPORT ContactSearchChannel::PendingSearch : public PendingOperation { Q_OBJECT public: PendingSearch(const ContactSearchChannelPtr &chan, QDBusPendingCall call); private Q_SLOTS: TP_QT_NO_EXPORT void onSearchStateChanged(Tp::ChannelContactSearchState state, const QString &errorName, const Tp::ContactSearchChannel::SearchStateChangeDetails &details); TP_QT_NO_EXPORT void watcherFinished(QDBusPendingCallWatcher*); private: bool mFinished; QDBusError mError; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/channel-dispatcher.xml0000644000175200001440000000036512000056607025142 0ustar00collabora-develusers00000000000000 Channel Dispatcher interface telepathy-qt-0.9.3/TelepathyQt/room-list-channel.cpp0000644000175200001440000000624412000056607024725 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/room-list-channel.moc.hpp" #include "TelepathyQt/debug-internal.h" #include namespace Tp { struct TP_QT_NO_EXPORT RoomListChannel::Private { inline Private(); inline ~Private(); }; RoomListChannel::Private::Private() { } RoomListChannel::Private::~Private() { } /** * \class RoomListChannel * \ingroup clientchannel * \headerfile TelepathyQt/room-list-channel.h * * \brief The RoomListChannel class represents a Telepathy Channel of type RoomList. * * Note that this subclass of Channel will eventually provide a high-level API for the * RoomList interface. Until then, it's just a Channel. * * For more details, please refer to \telepathy_spec. * * See \ref async_model, \ref shared_ptr */ /** * Create a new RoomListChannel object. * * \param connection Connection owning this channel, and specifying the * service. * \param objectPath The channel object path. * \param immutableProperties The channel immutable properties. * \return A RoomListChannelPtr object pointing to the newly created * RoomListChannel object. */ RoomListChannelPtr RoomListChannel::create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) { return RoomListChannelPtr(new RoomListChannel(connection, objectPath, immutableProperties)); } /** * Construct a new RoomListChannel object. * * \param connection Connection owning this channel, and specifying the * service. * \param objectPath The channel object path. * \param immutableProperties The channel immutable properties. * \param coreFeature The core feature of the channel type, if any. The corresponding introspectable should * should depend on Channel::FeatureCore. */ RoomListChannel::RoomListChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature) : Channel(connection, objectPath, immutableProperties, coreFeature), mPriv(new Private()) { } /** * Class destructor. */ RoomListChannel::~RoomListChannel() { delete mPriv; } } // Tp telepathy-qt-0.9.3/TelepathyQt/dbus-error.cpp0000644000175200001440000000747112000056607023461 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include namespace Tp { struct TP_QT_NO_EXPORT DBusError::Private { Private(const QString &name, const QString &message) : name(name), message(message) { } QString name; QString message; }; /** * \class DBusError * \ingroup servicesideimpl * \headerfile TelepathyQt/dbus-error.h * * \brief Small container class, containing a D-Bus error */ /** * Construct an empty DBusError */ DBusError::DBusError() : mPriv(0) { } /** * Construct a DBusError with the given error \a name and \a message. * * \param name The D-Bus error name. * \param message A human-readable description of the error. */ DBusError::DBusError(const QString &name, const QString &message) : mPriv(new Private(name, message)) { } /** * Class destructor. */ DBusError::~DBusError() { } /** * Compare this error with another one. * * \param other The other error to compare to. * \return \c true if the two errors have the same name and message * or \c false otherwise. */ bool DBusError::operator==(const DBusError &other) const { if (!isValid() || !other.isValid()) { if (!isValid() && !other.isValid()) { return true; } return false; } return mPriv->name == other.mPriv->name && mPriv->message == other.mPriv->message; } /** * Compare this error with another one. * * \param other The other error to compare to. * \return \c false if the two errors have the same name and message * or \c true otherwise. */ bool DBusError::operator!=(const DBusError &other) const { if (!isValid() || !other.isValid()) { if (!isValid() && !other.isValid()) { return false; } return true; } return mPriv->name != other.mPriv->name || mPriv->message != other.mPriv->message; } /** * Return the D-Bus name of this error. * * \return The D-Bus name of this error. */ QString DBusError::name() const { if (!isValid()) { return QString(); } return mPriv->name; } /** * Return the human-readable description of the error. * * \return The human-readable description of the error. */ QString DBusError::message() const { if (!isValid()) { return QString(); } return mPriv->message; } /** * Set this DBusError to contain the given error \a name and \a message. * * \param name The D-Bus error name to set. * \param message The description of the error to set. */ void DBusError::set(const QString &name, const QString &message) { if (!isValid()) { mPriv = new Private(name, message); return; } mPriv->name = name; mPriv->message = message; } /** * \fn bool DBusError::isValid() const * * Return whether this DBusError is set to contain an error or not. * * \return \c true if the error name and message have been set, * or \c false otherwise. */ } // Tp telepathy-qt-0.9.3/TelepathyQt/channel-dispatcher.cpp0000644000175200001440000000211312000056607025115 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/cli-channel-dispatcher-body.hpp" #include "TelepathyQt/_gen/cli-channel-dispatcher.moc.hpp" telepathy-qt-0.9.3/TelepathyQt/DBusProxyFactory0000644000175200001440000000040012000056607024024 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_DBusProxyFactory_HEADER_GUARD_ #define _TelepathyQt_DBusProxyFactory_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/Types0000644000175200001440000000033512000056607021710 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_Types_HEADER_GUARD_ #define _TelepathyQt_Types_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/connection-internal.h0000644000175200001440000000356112000056607025007 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008 Collabora Ltd. * @copyright Copyright (C) 2008 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_connection_internal_h_HEADER_GUARD_ #define _TelepathyQt_connection_internal_h_HEADER_GUARD_ #include #include #include namespace Tp { class TP_QT_NO_EXPORT Connection::PendingConnect : public PendingReady { Q_OBJECT public: PendingConnect(const ConnectionPtr &connection, const Features &requestedFeatures); private Q_SLOTS: TP_QT_NO_EXPORT void onConnectReply(QDBusPendingCallWatcher *); TP_QT_NO_EXPORT void onStatusChanged(Tp::ConnectionStatus newStatus); TP_QT_NO_EXPORT void onBecomeReadyReply(Tp::PendingOperation *); TP_QT_NO_EXPORT void onConnInvalidated(Tp::DBusProxy *proxy, const QString &error, const QString &message); private: friend class ConnectionLowlevel; }; class ConnectionHelper { public: static QString statusReasonToErrorName(Tp::ConnectionStatusReason reason, Tp::ConnectionStatus oldStatus); }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/AndFilter0000644000175200001440000000035212000056607022453 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_AndFilter_HEADER_GUARD_ #define _TelepathyQt_AndFilter_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/ready-object.h0000644000175200001440000000360512000056607023405 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_ready_object_h_HEADER_GUARD_ #define _TelepathyQt_ready_object_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include namespace Tp { class DBusProxy; class PendingReady; class ReadinessHelper; class RefCounted; class TP_QT_EXPORT ReadyObject { Q_DISABLE_COPY(ReadyObject) public: ReadyObject(RefCounted *object, const Feature &featureCore); ReadyObject(DBusProxy *proxy, const Feature &featureCore); virtual ~ReadyObject(); virtual bool isReady(const Features &features = Features()) const; virtual PendingReady *becomeReady(const Features &requestedFeatures = Features()); virtual Features requestedFeatures() const; virtual Features actualFeatures() const; virtual Features missingFeatures() const; protected: ReadinessHelper *readinessHelper() const; private: struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/filter.h0000644000175200001440000000303612000056607022320 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_filter_h_HEADER_GUARD_ #define _TelepathyQt_filter_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include namespace Tp { template class Filter : public RefCounted { Q_DISABLE_COPY(Filter) public: virtual ~Filter() {} virtual bool isValid() const { return false; } virtual bool matches(const SharedPtr &t) const { Q_UNUSED(t); return false; } protected: Filter() {} private: struct Private; Private *mPriv; // Just a placeholder really }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/simple-text-observer.cpp0000644000175200001440000002476112000056607025476 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/simple-text-observer-internal.h" #include "TelepathyQt/_gen/simple-text-observer.moc.hpp" #include "TelepathyQt/_gen/simple-text-observer-internal.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include #include #include #include #include #include #include namespace Tp { SimpleTextObserver::Private::Private(SimpleTextObserver *parent, const AccountPtr &account, const QString &contactIdentifier, bool requiresNormalization) : parent(parent), account(account), contactIdentifier(contactIdentifier) { debug() << "Creating a new SimpleTextObserver"; ChannelClassSpec channelFilter = ChannelClassSpec::textChat(); observer = SimpleObserver::create(account, ChannelClassSpecList() << channelFilter, contactIdentifier, requiresNormalization, QList() << ChannelClassFeatures(channelFilter, TextChannel::FeatureMessageQueue | TextChannel::FeatureMessageSentSignal)); parent->connect(observer.data(), SIGNAL(newChannels(QList)), SLOT(onNewChannels(QList))); parent->connect(observer.data(), SIGNAL(channelInvalidated(Tp::ChannelPtr,QString,QString)), SLOT(onChannelInvalidated(Tp::ChannelPtr))); } SimpleTextObserver::Private::~Private() { foreach (TextChannelWrapper *wrapper, channels) { delete wrapper; } } SimpleTextObserver::Private::TextChannelWrapper::TextChannelWrapper(const TextChannelPtr &channel) : mChannel(channel) { connect(mChannel.data(), SIGNAL(messageSent(Tp::Message,Tp::MessageSendingFlags,QString)), SLOT(onChannelMessageSent(Tp::Message,Tp::MessageSendingFlags,QString))); connect(mChannel.data(), SIGNAL(messageReceived(Tp::ReceivedMessage)), SLOT(onChannelMessageReceived(Tp::ReceivedMessage))); } void SimpleTextObserver::Private::TextChannelWrapper::onChannelMessageSent( const Tp::Message &message, Tp::MessageSendingFlags flags, const QString &sentMessageToken) { emit channelMessageSent(message, flags, sentMessageToken, mChannel); } void SimpleTextObserver::Private::TextChannelWrapper::onChannelMessageReceived( const Tp::ReceivedMessage &message) { emit channelMessageReceived(message, mChannel); } /** * \class SimpleTextObserver * \ingroup utils * \headerfile TelepathyQt/simple-text-observer.h * * \brief The SimpleTextObserver class provides an easy way to track sent/received text messages * in an account and can be optionally filtered by a contact. */ /** * Create a new SimpleTextObserver object. * * Events will be signalled for all messages sent/received by all contacts in \a account. * * \param account The account used to listen to events. * \return An SimpleTextObserverPtr object pointing to the newly created SimpleTextObserver object. */ SimpleTextObserverPtr SimpleTextObserver::create(const AccountPtr &account) { return create(account, QString(), false); } /** * Create a new SimpleTextObserver object. * * If \a contact is not null, events will be signalled for all messages sent/received by \a * contact, otherwise this method works the same as create(const Tp::AccountPtr &). * * \param account The account used to listen to events. * \param contact The contact used to filter events. * \return An SimpleTextObserverPtr object pointing to the newly created SimpleTextObserver object. */ SimpleTextObserverPtr SimpleTextObserver::create(const AccountPtr &account, const ContactPtr &contact) { if (contact) { return create(account, contact->id(), false); } return create(account, QString(), false); } /** * Create a new SimpleTextObserver object. * * If \a contactIdentifier is non-empty, events will be signalled for all messages sent/received * by a contact identified by \a contactIdentifier, otherwise this method works the same as * create(const Tp::AccountPtr &). * * \param account The account used to listen to events. * \param contactIdentifier The identifier of the contact used to filter events. * \return An SimpleTextObserverPtr object pointing to the newly created SimpleTextObserver object. */ SimpleTextObserverPtr SimpleTextObserver::create(const AccountPtr &account, const QString &contactIdentifier) { return create(account, contactIdentifier, true); } SimpleTextObserverPtr SimpleTextObserver::create(const AccountPtr &account, const QString &contactIdentifier, bool requiresNormalization) { return SimpleTextObserverPtr( new SimpleTextObserver(account, contactIdentifier, requiresNormalization)); } /** * Construct a new SimpleTextObserver object. * * \param account The account used to listen to events. * \param contactIdentifier The identifier of the contact used to filter events. * \param requiresNormalization Whether \a contactIdentifier needs to be normalized. * \return An SimpleTextObserverPtr object pointing to the newly created SimpleTextObserver object. */ SimpleTextObserver::SimpleTextObserver(const AccountPtr &account, const QString &contactIdentifier, bool requiresNormalization) : mPriv(new Private(this, account, contactIdentifier, requiresNormalization)) { if (!mPriv->observer->channels().isEmpty()) { onNewChannels(mPriv->observer->channels()); } } /** * Class destructor. */ SimpleTextObserver::~SimpleTextObserver() { delete mPriv; } /** * Return the account used to listen to events. * * \return A pointer to the Account object. */ AccountPtr SimpleTextObserver::account() const { return mPriv->account; } /** * Return the identifier of the contact used to filter events, or an empty string if none was * provided at construction. * * \return The identifier of the contact. */ QString SimpleTextObserver::contactIdentifier() const { return mPriv->contactIdentifier; } /** * Return the list of text chats currently being observed. * * \return A list of pointers to TextChannel objects. */ QList SimpleTextObserver::textChats() const { QList ret; foreach (const ChannelPtr &channel, mPriv->observer->channels()) { TextChannelPtr textChannel = TextChannelPtr::qObjectCast(channel); if (textChannel) { ret << textChannel; } } return ret; } void SimpleTextObserver::onNewChannels(const QList &channels) { foreach (const ChannelPtr &channel, channels) { TextChannelPtr textChannel = TextChannelPtr::qObjectCast(channel); if (!textChannel) { if (channel->channelType() != TP_QT_IFACE_CHANNEL_TYPE_TEXT) { warning() << "Channel received to observe is not of type Text, service confused. " "Ignoring channel"; } else { warning() << "Channel received to observe is not a subclass of TextChannel. " "ChannelFactory set on this observer's account must construct TextChannel " "subclasses for channels of type Text. Ignoring channel"; } continue; } if (mPriv->channels.contains(channel)) { // we are already observing this channel continue; } Private::TextChannelWrapper *wrapper = new Private::TextChannelWrapper(textChannel); mPriv->channels.insert(channel, wrapper); connect(wrapper, SIGNAL(channelMessageSent(Tp::Message,Tp::MessageSendingFlags,QString,Tp::TextChannelPtr)), SIGNAL(messageSent(Tp::Message,Tp::MessageSendingFlags,QString,Tp::TextChannelPtr))); connect(wrapper, SIGNAL(channelMessageReceived(Tp::ReceivedMessage,Tp::TextChannelPtr)), SIGNAL(messageReceived(Tp::ReceivedMessage,Tp::TextChannelPtr))); foreach (const ReceivedMessage &message, textChannel->messageQueue()) { emit messageReceived(message, textChannel); } } } void SimpleTextObserver::onChannelInvalidated(const ChannelPtr &channel) { // it may happen that the channel received in onNewChannels is not a text channel somehow, thus // the channel won't be added to mPriv->channels if (mPriv->channels.contains(channel)) { delete mPriv->channels.take(channel); } } /** * \fn void SimpleTextObserver::messageSent(const Tp::Message &message, * Tp::MessageSendingFlags flags, const QString &sentMessageToken, * const Tp::TextChannelPtr &channel); * * Emitted whenever a text message on account() is sent. * If contactIdentifier() is non-empty, only messages sent to the contact identified by it will * be signalled. * * \param message The message sent. * \param flags The message flags, * \param sentMessageToken The message token. * \param channel The channel which received the message. */ /** * \fn void SimpleTextObserver::messageReceived(const Tp::ReceivedMessage &message, * const Tp::TextChannelPtr &channel); * * Emitted whenever a text message on account() is received. * If contactIdentifier() is non-empty, only messages received by the contact identified by it will * be signalled. * * \param message The message received. * \param channel The channel which received the message. */ } // Tp telepathy-qt-0.9.3/TelepathyQt/ConnectionInterfaceLocationInterface0000644000175200001440000000044012000056607030033 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ConnectionInterfaceLocationInterface_HEADER_GUARD_ #define _TelepathyQt_ConnectionInterfaceLocationInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/ChannelInterfaceTubeInterface0000644000175200001440000000041712000056607026437 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelInterfaceTubeInterface_HEADER_GUARD_ #define _TelepathyQt_ChannelInterfaceTubeInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/ChannelTypeStreamTubeInterface0000644000175200001440000000042112000056607026627 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelTypeStreamTubeInterface_HEADER_GUARD_ #define _TelepathyQt_ChannelTypeStreamTubeInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/stream-tube-client.cpp0000644000175200001440000012461112000056607025075 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/stream-tube-client-internal.h" #include "TelepathyQt/_gen/stream-tube-client.moc.hpp" #include "TelepathyQt/_gen/stream-tube-client-internal.moc.hpp" #include "TelepathyQt/debug-internal.h" #include "TelepathyQt/simple-stream-tube-handler.h" #include #include #include #include #include #include #include namespace Tp { /** * \class StreamTubeClient::TcpSourceAddressGenerator * \ingroup serverclient * \headerfile TelepathyQt/stream-tube-client.h * * \brief The StreamTubeClient::TcpSourceAddressGenerator abstract interface allows using socket * source address/port based access control for connecting to tubes accepted as TCP sockets. * * By default, every application on the local computer is allowed to connect to the socket created * by the protocol backend as the local endpoint of the tube. This is not always desirable, as that * includes even other users. * * Note that since every TCP connection must have an unique source address, only one simultaneous * connection can be made through each tube for which this type of access control has been used. */ /** * \fn QPair StreamTubeClient::TcpSourceAddressGenerator::nextSourceAddress(const AccountPtr &, const * IncomingStreamTubeChannelPtr &) * * Return the source address from which connections will be allowed to the given \a tube once it has * been accepted. * * Returning the pair (QHostAddress::Any, 0) (or alternatively (QHostAddress::AnyIPv4, 0) in Qt5) * makes the protocol backend allow connections from any address on the local computer. * This can be used on a tube-by-tube basis if for some tubes its known that multiple connections * need to be made, so a single source address doesn't suffice. * * The \a account and \a tube parameters can be inspected to make the decision; typically by looking * at the tube's service type, parameters and/or initiator contact. * * The general pattern for implementing this method is: *
    *
  1. Determine whether \a tube needs to allow multiple connections, and if so, skip source address * access control completely
  2. *
  3. Otherwise, create a socket and bind it to a free address
  4. *
  5. Return this socket's address
  6. *
  7. Keep the socket bound so that no other process can (accidentally or maliciously) take the * address until it's used to connect to the tube when StreamTubeClient::tubeAcceptedAsTcp() is * emitted for the tube
  8. *
* * \param account The account from which the tube originates. * \param tube The tube channel which is going to be accepted by the StreamTubeClient. * * \return A pair containing the host address and port allowed to connect. */ /** * \fn StreamTubeClient::TcpSourceAddressGenerator::~TcpSourceAddressGenerator * * Class destructor. Protected, because StreamTubeClient never deletes a TcpSourceAddressGenerator passed * to it. */ struct TP_QT_NO_EXPORT StreamTubeClient::Tube::Private : public QSharedData { // empty placeholder for now }; /** * \class StreamTubeClient::Tube * \ingroup serverclient * \headerfile TelepathyQt/stream-tube-client.h * * \brief The StreamTubeClient::Tube class represents a tube being handled by the client. */ /** * Constructs a new invalid Tube instance. */ StreamTubeClient::Tube::Tube() { // invalid instance } /** * Constructs a Tube instance for the given tube \a channel from the given \a account. * * \param account A pointer to the account the online connection of which the tube originates from. * \param channel A pointer to the tube channel object. */ StreamTubeClient::Tube::Tube( const AccountPtr &account, const IncomingStreamTubeChannelPtr &channel) : QPair(account, channel), mPriv(new Private) { } /** * Copy constructor. */ StreamTubeClient::Tube::Tube( const Tube &other) : QPair(other.account(), other.channel()), mPriv(other.mPriv) { } /** * Class destructor. */ StreamTubeClient::Tube::~Tube() { // mPriv deleted automatically } /** * Assignment operator. */ StreamTubeClient::Tube &StreamTubeClient::Tube::operator=( const Tube &other) { if (&other == this) { return *this; } first = other.account(); second = other.channel(); mPriv = other.mPriv; return *this; } /** * \fn bool StreamTubeClient::Tube::isValid() const * * Return whether or not the tube is valid or is just the null object created using the default * constructor. * * \return \c true if valid, \c false otherwise. */ /** * \fn AccountPtr StreamTubeClient::Tube::account() const * * Return the account from which the tube originates. * * \return A pointer to the account object. */ /** * \fn IncomingStreamTubeChannelPtr StreamTubeClient::Tube::channel() const * * Return the actual tube channel. * * \return A pointer to the channel. */ struct TP_QT_NO_EXPORT StreamTubeClient::Private { Private(const ClientRegistrarPtr ®istrar, const QStringList &p2pServices, const QStringList &roomServices, const QString &maybeClientName, bool monitorConnections, bool bypassApproval) : registrar(registrar), handler(SimpleStreamTubeHandler::create( p2pServices, roomServices, false, monitorConnections, bypassApproval)), clientName(maybeClientName), isRegistered(false), acceptsAsTcp(false), acceptsAsUnix(false), tcpGenerator(0), requireCredentials(false) { if (clientName.isEmpty()) { clientName = QString::fromLatin1("TpQtSTubeClient_%1_%2") .arg(registrar->dbusConnection().baseService() .replace(QLatin1Char(':'), QLatin1Char('_')) .replace(QLatin1Char('.'), QLatin1Char('_'))) .arg((quintptr) this, 0, 16); } } void ensureRegistered() { if (isRegistered) { return; } debug() << "Register StreamTubeClient with name " << clientName; if (registrar->registerClient(handler, clientName)) { isRegistered = true; } else { warning() << "StreamTubeClient" << clientName << "registration failed"; } } ClientRegistrarPtr registrar; SharedPtr handler; QString clientName; bool isRegistered; bool acceptsAsTcp, acceptsAsUnix; TcpSourceAddressGenerator *tcpGenerator; bool requireCredentials; QHash tubes; }; StreamTubeClient::TubeWrapper::TubeWrapper( const AccountPtr &acc, const IncomingStreamTubeChannelPtr &tube, const QHostAddress &sourceAddress, quint16 sourcePort, StreamTubeClient *parent) : QObject(parent), mAcc(acc), mTube(tube), mSourceAddress(sourceAddress), mSourcePort(sourcePort) { QHostAddress hostAddress = sourceAddress; if (sourcePort != 0) { #if QT_VERSION >= 0x050000 if (hostAddress == QHostAddress::Any || hostAddress == QHostAddress::LocalHost) { hostAddress = QHostAddress::AnyIPv4; } #endif if ((hostAddress.protocol() == QAbstractSocket::IPv4Protocol && !tube->supportsIPv4SocketsWithSpecifiedAddress()) || (hostAddress.protocol() == QAbstractSocket::IPv6Protocol && !tube->supportsIPv6SocketsWithSpecifiedAddress())) { debug() << "StreamTubeClient falling back to Localhost AC for tube" << tube->objectPath(); mSourceAddress = sourceAddress.protocol() == QAbstractSocket::IPv4Protocol ? QHostAddress::Any : QHostAddress::AnyIPv6; mSourcePort = 0; } } connect(tube->acceptTubeAsTcpSocket(mSourceAddress, mSourcePort), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onTubeAccepted(Tp::PendingOperation*))); connect(tube.data(), SIGNAL(newConnection(uint)), SLOT(onNewConnection(uint))); connect(tube.data(), SIGNAL(connectionClosed(uint,QString,QString)), SLOT(onConnectionClosed(uint,QString,QString))); } StreamTubeClient::TubeWrapper::TubeWrapper( const AccountPtr &acc, const IncomingStreamTubeChannelPtr &tube, bool requireCredentials, StreamTubeClient *parent) : QObject(parent), mAcc(acc), mTube(tube), mSourcePort(0) { if (requireCredentials && !tube->supportsUnixSocketsWithCredentials()) { debug() << "StreamTubeClient falling back to Localhost AC for tube" << tube->objectPath(); requireCredentials = false; } connect(tube->acceptTubeAsUnixSocket(requireCredentials), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onTubeAccepted(Tp::PendingOperation*))); connect(tube.data(), SIGNAL(newConnection(uint)), SLOT(onNewConnection(uint))); connect(tube.data(), SIGNAL(connectionClosed(uint,QString,QString)), SLOT(onConnectionClosed(uint,QString,QString))); } void StreamTubeClient::TubeWrapper::onTubeAccepted(Tp::PendingOperation *op) { emit acceptFinished(this, qobject_cast(op)); } void StreamTubeClient::TubeWrapper::onNewConnection(uint conn) { emit newConnection(this, conn); } void StreamTubeClient::TubeWrapper::onConnectionClosed(uint conn, const QString &error, const QString &message) { emit connectionClosed(this, conn, error, message); } /** * \class StreamTubeClient * \ingroup serverclient * \headerfile TelepathyQt/stream-tube-client.h * * \brief The StreamTubeClient class is a Handler implementation for incoming %Stream %Tube channels, * allowing an application to easily get notified about services they can connect to offered to them * over Telepathy Tubes without worrying about the channel dispatching details. * * Telepathy Tubes is a technology for connecting arbitrary applications together through the IM * network (and sometimes with direct peer-to-peer connections), such that issues like firewall/NAT * traversal are automatically handled. Stream Tubes in particular offer properties similar to * SOCK_STREAM sockets. The StreamTubeClient class negotiates tubes offered to us so that an * application can connect such bytestream sockets of theirs to them. The StreamTubeServer class is * the counterpart, offering services from a bytestream socket server to tubes requested to be * initiated. * * Both peer-to-peer (\c TargetHandleType == \ref HandleTypeContact) and group (\c TargetHandleType * == \ref HandleTypeRoom) channels are supported, and it's possible to specify the tube services to * handle for each separately. There must be at least one service in total declared, as it never * makes sense to handle stream tubes without considering the protocol of the service offered * through them. * * %Connection monitoring allows fine-grained error reporting for connections made through tubes, * and observing connections being made and broken even if the application code running * StreamTubeClient can't easily get this information from the code actually connecting through it. * Such a setting might occur e.g. when a wrapper application is developed to connect some existing * "black box" networked application through TCP tubes by launching it with the appropriate command * line arguments or alike for accepted tubes. * * Enabling connection monitoring adds a small overhead and latency to handling each incoming tube * and signaling each new incoming connection over them, though, so use it only when needed. * * A service activated Handler can be implemented using StreamTubeClient by passing a predefined \a * clientName manually to the chosen create() method, and installing Telepathy \c .client and D-Bus * \c .service files declaring the implemented tube services as channel classes and a path to the * executable. If this is not needed, the \a clientName can be omitted, in which case a random * unique client name is generated and used instead. However, then the tube client application must * already be running for remote contacts to be able to offer services to us over tubes. * * Whether the Handler application implemented using StreamTubeClient is service activatable or not, * incoming channels will typically first be given to an Approver, if there is one for tube services * corresponding to the tube in question. Only if the Approver decides that the tube communication * should be allowed (usually by asking the user), or if there is no matching Approver at all, is * the channel given to the actual Handler tube client. This can be overridden by setting \a * bypassApproval to \c true, which skips approval for the given services completely and directs * them straight to the Handler. * * StreamTubeClient shares Account, Connection and Channel proxies and Contact objects with the * rest of the application as long as a reference to the AccountManager, ClientRegistrar, or the * factories used elsewhere is passed to the create() method. A stand-alone tube client Handler can * get away without passing these however, or just passing select factories to make the desired * features prepared and subclasses employed for these objects for their own convenience. * * Whichever method is used, the ChannelFactory (perhaps indirectly) given must construct * IncomingStreamTubeChannel instances or subclasses thereof for all channel classes corresponding * to the tube services the client should be able to connect to. This is the default; overriding it * without obeying these constraints using ChannelFactory::setSubclassForIncomingStreamTubes() or * the related methods for room tubes prevents StreamTubeClient from operating correctly. * * \todo Coin up a small Python script or alike to easily generate the .client and .service files. * (fd.o #41614) */ /** * Create a new StreamTubeClient, which will register itself on the session bus using an internal * ClientRegistrar and use the given factories. * * \param p2pServices Names of the tube services to accept on peer-to-peer tube channels. * \param roomServices Names of the tube services to accept on room/group tube channels. * \param clientName The client name (without the \c org.freedesktop.Telepathy.Client. prefix). * \param monitorConnections Whether to enable connection monitoring or not. * \param bypassApproval \c true to skip approval, \c false to invoke an Approver for incoming * channels if there is one. * \param accountFactory The account factory to use. * \param connectionFactory The connection factory to use. * \param channelFactory The channel factory to use. * \param contactFactory The contact factory to use. */ StreamTubeClientPtr StreamTubeClient::create( const QStringList &p2pServices, const QStringList &roomServices, const QString &clientName, bool monitorConnections, bool bypassApproval, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory) { return create( QDBusConnection::sessionBus(), accountFactory, connectionFactory, channelFactory, contactFactory, p2pServices, roomServices, clientName, monitorConnections, bypassApproval); } /** * Create a new StreamTubeClient, which will register itself on the given \a bus using an internal * ClientRegistrar and use the given factories. * * The factories must all be created for the given \a bus. * * \param bus Connection to the bus to register on. * \param accountFactory The account factory to use. * \param connectionFactory The connection factory to use. * \param channelFactory The channel factory to use. * \param contactFactory The contact factory to use. * \param p2pServices Names of the tube services to handle on peer-to-peer tube channels. * \param roomServices Names of the tube services to handle on room/group tube channels. * \param clientName The client name (without the \c org.freedesktop.Telepathy.Client. prefix). * \param monitorConnections Whether to enable connection monitoring or not. * \param bypassApproval \c true to skip approval, \c false to invoke an Approver for incoming * channels if there is one. */ StreamTubeClientPtr StreamTubeClient::create( const QDBusConnection &bus, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory, const QStringList &p2pServices, const QStringList &roomServices, const QString &clientName, bool monitorConnections, bool bypassApproval) { return create( ClientRegistrar::create( bus, accountFactory, connectionFactory, channelFactory, contactFactory), p2pServices, roomServices, clientName, monitorConnections, bypassApproval); } /** * Create a new StreamTubeClient, which will register itself on the bus of and share objects with * the given \a accountManager, creating an internal ClientRegistrar. * * \param accountManager A pointer to the account manager to link up with. * \param p2pServices Names of the tube services to handle on peer-to-peer tube channels. * \param roomServices Names of the tube services to handle on room/group tube channels. * \param clientName The client name (without the \c org.freedesktop.Telepathy.Client. prefix). * \param monitorConnections Whether to enable connection monitoring or not. * \param bypassApproval \c true to skip approval, \c false to invoke an Approver for incoming * channels if there is one. */ StreamTubeClientPtr StreamTubeClient::create( const AccountManagerPtr &accountManager, const QStringList &p2pServices, const QStringList &roomServices, const QString &clientName, bool monitorConnections, bool bypassApproval) { return create( accountManager->dbusConnection(), accountManager->accountFactory(), accountManager->connectionFactory(), accountManager->channelFactory(), accountManager->contactFactory(), p2pServices, roomServices, clientName, monitorConnections, bypassApproval); } /** * Create a new StreamTubeClient, which will register itself on the bus of and using the given * client \a registrar, and share objects with it. * * \param registrar The client registrar to use. * \param p2pServices Names of the tube services to handle on peer-to-peer tube channels. * \param roomServices Names of the tube services to handle on room/group tube channels. * \param clientName The client name (without the \c org.freedesktop.Telepathy.Client. prefix). * \param monitorConnections Whether to enable connection monitoring or not. * \param bypassApproval \c true to skip approval, \c false to invoke an Approver for incoming * channels if there is one. */ StreamTubeClientPtr StreamTubeClient::create( const ClientRegistrarPtr ®istrar, const QStringList &p2pServices, const QStringList &roomServices, const QString &clientName, bool monitorConnections, bool bypassApproval) { if (p2pServices.isEmpty() && roomServices.isEmpty()) { warning() << "Tried to create a StreamTubeClient with no services, returning NULL"; return StreamTubeClientPtr(); } return StreamTubeClientPtr( new StreamTubeClient(registrar, p2pServices, roomServices, clientName, monitorConnections, bypassApproval)); } StreamTubeClient::StreamTubeClient( const ClientRegistrarPtr ®istrar, const QStringList &p2pServices, const QStringList &roomServices, const QString &clientName, bool monitorConnections, bool bypassApproval) : mPriv(new Private(registrar, p2pServices, roomServices, clientName, monitorConnections, bypassApproval)) { connect(mPriv->handler.data(), SIGNAL(invokedForTube( Tp::AccountPtr, Tp::StreamTubeChannelPtr, QDateTime, Tp::ChannelRequestHints)), SLOT(onInvokedForTube( Tp::AccountPtr, Tp::StreamTubeChannelPtr, QDateTime, Tp::ChannelRequestHints))); } /** * Class destructor. */ StreamTubeClient::~StreamTubeClient() { if (isRegistered()) { mPriv->registrar->unregisterClient(mPriv->handler); } delete mPriv; } /** * Return the client registrar used by the client to register itself as a Telepathy channel Handler * %Client. * * This is the registrar originally passed to * create(const ClientRegistrarPtr &, const QStringList &, const QStringList &, const QString &, bool, bool) * if that was used, and an internally constructed one otherwise. In any case, it can be used to * e.g. register further clients, just like any other ClientRegistrar. * * \return A pointer to the registrar. */ ClientRegistrarPtr StreamTubeClient::registrar() const { return mPriv->registrar; } /** * Return the Telepathy %Client name of the client. * * \return The name, without the \c org.freedesktop.Telepathy.Client. prefix of the full D-Bus service name. */ QString StreamTubeClient::clientName() const { return mPriv->clientName; } /** * Return whether the client has been successfully registered or not. * * Registration is attempted, at the latest, when the client is first set to accept incoming tubes, * either as TCP sockets (setToAcceptAsTcp()) or Unix ones (setToAcceptAsUnix()). It can fail e.g. * because the connection to the bus has failed, or a predefined \a clientName has been passed to * create(), and a %Client with the same name is already registered. Typically, failure registering * would be a fatal error for a stand-alone tube handler, but only a warning event for an * application serving other purposes. In any case, a high-quality user of the API will check the * return value of this accessor after choosing the desired address family. * * \return \c true if the client has been successfully registered, \c false if not. */ bool StreamTubeClient::isRegistered() const { return mPriv->isRegistered; } /** * Return whether connection monitoring is enabled on this client. * * For technical reasons, connection monitoring can't be enabled when the client is already running, * so there is no corresponding setter method. It has to be enabled by passing \c true as the \a * monitorConnections parameter to the create() method. * * If connection monitoring isn't enabled, newConnection() and connectionClosed() won't be * emitted and connections() won't be populated. * * \return \c true if monitoring is enabled, \c false if not. */ bool StreamTubeClient::monitorsConnections() const { return mPriv->handler->monitorsConnections(); } /** * Return whether the client is currently set to accept incoming tubes as TCP sockets. * * \return \c true if the client will accept tubes as TCP sockets, \c false if it will accept them * as Unix ones or hasn't been set to accept at all yet. */ bool StreamTubeClient::acceptsAsTcp() const { return mPriv->acceptsAsTcp; } /** * Return the TCP source address generator, if any, set by setToAcceptAsTcp() previously. * * \return A pointer to the generator instance. */ StreamTubeClient::TcpSourceAddressGenerator *StreamTubeClient::tcpGenerator() const { if (!acceptsAsTcp()) { warning() << "StreamTubeClient::tcpGenerator() used, but not accepting as TCP, returning 0"; return 0; } return mPriv->tcpGenerator; } /** * Return whether the client is currently set to accept incoming tubes as Unix sockets. * * \return \c true if the client will accept tubes as Unix sockets, \c false if it will accept them * as TCP ones or hasn't been set to accept at all yet. */ bool StreamTubeClient::acceptsAsUnix() const { return mPriv->acceptsAsUnix; } /** * Set the client to accept tubes received to handle in the future in a fashion which will yield a * TCP socket as the local endpoint to connect to. * * A source address generator can optionally be set. If non-null, it will be invoked for each new * tube received to handle and an attempt is made to restrict connections to the tube's local socket * endpoint to those from that source address. * * However, if the protocol backend doesn't actually support source address based access control, * tubeAcceptedAsTcp() will be emitted with QHostAddress::Any * as the allowed source address to signal that it doesn't matter where we connect from, but more * importantly, that anybody else on the same host could have, and can, connect to the tube. * The tube can be closed at this point if this would be unacceptable security-wise. * To totally prevent the tube from being accepted in the first place, one can close it already when * tubeOffered() is emitted for it - support for the needed security mechanism can be queried using * its supportsIPv4SocketsWithSpecifiedAddress() accessor. * * The handler is registered on the bus at the latest when this method or setToAcceptAsUnix() is * called for the first time, so one should check the return value of isRegistered() at that point * to verify that was successful. * * \param generator A pointer to the source address generator to use, or 0 to allow all * connections from the local host. * * \todo Make it possible to set the tube client to auto-close tubes if the desired access control * level is not achieved, as an alternative to the current best-effort behavior. */ void StreamTubeClient::setToAcceptAsTcp(TcpSourceAddressGenerator *generator) { mPriv->tcpGenerator = generator; mPriv->acceptsAsTcp = true; mPriv->acceptsAsUnix = false; mPriv->ensureRegistered(); } /** * Set the client to accept tubes received to handle in the future in a fashion which will yield a * Unix socket as the local endpoint to connect to. * * If that doesn't cause problems for the payload protocol, it's possible to increase security by * restricting the processes allowed to connect to the local endpoint socket to those from the same * user ID as the protocol backend is running as by setting \a requireCredentials to \c true. This * requires transmitting a single byte, signaled as the \a credentialByte parameter to the * tubeAcceptedAsUnix() signal, in a \c SCM_CREDS or SCM_CREDENTIALS message, whichever is supported * by the platform, as the first thing after having connected to the socket. Even if the platform * doesn't implement either concept, the byte must still be sent. * * However, not all protocol backends support the credential passing based access control on all the * platforms they can run on. If a tube is offered through such a backend, tubeAcceptedAsUnix() will * be emitted with \a requiresCredentials set to \c false, to signal that a credential byte should * NOT be sent for that tube, and that any local process can or could have connected to the tube * already. The tube can be closed at this point if this would be unacceptable security-wise. To * totally prevent the tube from being accepted in the first place, one can close it already when * tubeOffered() is emitted for it - support for the needed security mechanism can be queried using * its supportsIPv4SocketsWithSpecifiedAddress() * accessor. * * The handler is registered on the bus at the latest when this method or setToAcceptAsTcp() is * called for the first time, so one should check the return value of isRegistered() at that point * to verify that was successful. * * \param requireCredentials \c true to try and restrict connecting by UID, \c false to allow all * connections. * * \todo Make it possible to set the tube client to auto-close tubes if the desired access control * level is not achieved, as an alternative to the current best-effort behavior. */ void StreamTubeClient::setToAcceptAsUnix(bool requireCredentials) { mPriv->tcpGenerator = 0; mPriv->acceptsAsTcp = false; mPriv->acceptsAsUnix = true; mPriv->requireCredentials = requireCredentials; mPriv->ensureRegistered(); } /** * Return the tubes currently handled by the client. * * \return A list of Tube structures containing pointers to the account and tube channel for each * tube. */ QList StreamTubeClient::tubes() const { QList tubes; foreach (TubeWrapper *wrapper, mPriv->tubes.values()) { tubes.push_back(Tube(wrapper->mAcc, wrapper->mTube)); } return tubes; } /** * Return the ongoing connections established through tubes signaled by this client. * * The returned mapping has for each Tube a structure containing pointers to the account and tube * channel objects as keys, with the integer identifiers for the current connections on them as the * values. The IDs are unique amongst the connections active on a single tube at any given time, but * not globally. * * This is effectively a state recovery accessor corresponding to the change notification signals * newConnection() and connectionClosed(). * * The mapping is only populated if connection monitoring was requested when creating the client (so * monitorsConnections() returns \c true). * * \return The connections in a mapping with Tube structures containing pointers to the account and * channel objects for each tube as keys, and the sets of numerical IDs as values. */ QHash > StreamTubeClient::connections() const { QHash > conns; if (!monitorsConnections()) { warning() << "StreamTubeClient::connections() used, but connection monitoring is disabled"; return conns; } foreach (const Tube &tube, tubes()) { if (!tube.channel()->isValid()) { // The tube has been invalidated, so skip it to avoid warnings // We're going to get rid of the wrapper in the next mainloop iteration when we get the // invalidation signal continue; } QSet tubeConns = tube.channel()->connections(); if (!tubeConns.empty()) { conns.insert(tube, tubeConns); } } return conns; } void StreamTubeClient::onInvokedForTube( const AccountPtr &acc, const StreamTubeChannelPtr &tube, const QDateTime &time, const ChannelRequestHints &hints) { Q_ASSERT(isRegistered()); // our SSTH shouldn't be receiving any channels unless it's registered Q_ASSERT(!tube->isRequested()); Q_ASSERT(tube->isValid()); // SSTH won't emit invalid tubes if (mPriv->tubes.contains(tube)) { debug() << "Ignoring StreamTubeClient reinvocation for tube" << tube->objectPath(); return; } IncomingStreamTubeChannelPtr incoming = IncomingStreamTubeChannelPtr::qObjectCast(tube); if (!incoming) { warning() << "The ChannelFactory used by StreamTubeClient must construct" << "IncomingStreamTubeChannel subclasses for Requested=false StreamTubes"; tube->requestClose(); return; } TubeWrapper *wrapper = 0; if (mPriv->acceptsAsTcp) { QPair srcAddr = qMakePair(QHostAddress(QHostAddress::Any), quint16(0)); if (mPriv->tcpGenerator) { srcAddr = mPriv->tcpGenerator->nextSourceAddress(acc, incoming); } wrapper = new TubeWrapper(acc, incoming, srcAddr.first, srcAddr.second, this); } else { Q_ASSERT(mPriv->acceptsAsUnix); // we should only be registered when we're set to accept as either TCP or Unix wrapper = new TubeWrapper(acc, incoming, mPriv->requireCredentials, this); } connect(wrapper, SIGNAL(acceptFinished(TubeWrapper*,Tp::PendingStreamTubeConnection*)), SLOT(onAcceptFinished(TubeWrapper*,Tp::PendingStreamTubeConnection*))); connect(tube.data(), SIGNAL(invalidated(Tp::DBusProxy*,QString,QString)), SLOT(onTubeInvalidated(Tp::DBusProxy*,QString,QString))); if (monitorsConnections()) { connect(wrapper, SIGNAL(newConnection(TubeWrapper*,uint)), SLOT(onNewConnection(TubeWrapper*,uint))); connect(wrapper, SIGNAL(connectionClosed(TubeWrapper*,uint,QString,QString)), SLOT(onConnectionClosed(TubeWrapper*,uint,QString,QString))); } mPriv->tubes.insert(tube, wrapper); emit tubeOffered(acc, incoming); } void StreamTubeClient::onAcceptFinished(TubeWrapper *wrapper, PendingStreamTubeConnection *conn) { Q_ASSERT(wrapper != NULL); Q_ASSERT(conn != NULL); if (!mPriv->tubes.contains(wrapper->mTube)) { debug() << "StreamTubeClient ignoring Accept result for invalidated tube" << wrapper->mTube->objectPath(); return; } if (conn->isError()) { warning() << "StreamTubeClient couldn't accept tube" << wrapper->mTube->objectPath() << '-' << conn->errorName() << ':' << conn->errorMessage(); if (wrapper->mTube->isValid()) { wrapper->mTube->requestClose(); } wrapper->mTube->disconnect(this); emit tubeClosed(wrapper->mAcc, wrapper->mTube, conn->errorName(), conn->errorMessage()); mPriv->tubes.remove(wrapper->mTube); wrapper->deleteLater(); return; } debug() << "StreamTubeClient accepted tube" << wrapper->mTube->objectPath(); if (conn->addressType() == SocketAddressTypeIPv4 || conn->addressType() == SocketAddressTypeIPv6) { QPair addr = conn->ipAddress(); emit tubeAcceptedAsTcp(addr.first, addr.second, wrapper->mSourceAddress, wrapper->mSourcePort, wrapper->mAcc, wrapper->mTube); } else { emit tubeAcceptedAsUnix(conn->localAddress(), conn->requiresCredentials(), conn->credentialByte(), wrapper->mAcc, wrapper->mTube); } } void StreamTubeClient::onTubeInvalidated(Tp::DBusProxy *proxy, const QString &error, const QString &message) { StreamTubeChannelPtr tube(qobject_cast(proxy)); Q_ASSERT(!tube.isNull()); TubeWrapper *wrapper = mPriv->tubes.value(tube); if (!wrapper) { // Accept finish with error already removed it return; } debug() << "Client StreamTube" << tube->objectPath() << "invalidated - " << error << ':' << message; emit tubeClosed(wrapper->mAcc, wrapper->mTube, error, message); mPriv->tubes.remove(tube); delete wrapper; } void StreamTubeClient::onNewConnection( TubeWrapper *wrapper, uint conn) { Q_ASSERT(monitorsConnections()); emit newConnection(wrapper->mAcc, wrapper->mTube, conn); } void StreamTubeClient::onConnectionClosed( TubeWrapper *wrapper, uint conn, const QString &error, const QString &message) { Q_ASSERT(monitorsConnections()); emit connectionClosed(wrapper->mAcc, wrapper->mTube, conn, error, message); } /** * \fn void StreamTubeClient::tubeOffered(const AccountPtr &account, const * IncomingStreamTubeChannelPtr &tube) * * Emitted when one of the services we're interested in connecting to has been offered by us as a * tube, which we've began handling. * * This is emitted before invoking the TcpSourceAddressGenerator, if any, for the tube. * * \param account A pointer to the account through which the tube was offered. * \param tube A pointer to the actual tube channel. */ /** * \fn void StreamTubeClient::tubeAcceptedAsTcp(const QHostAddress &listenAddress, quint16 * listenPort, const QHostAddress &sourceAddress, quint16 sourcePort, const AccountPtr &account, * const IncomingStreamTubeChannelPtr &tube) * * Emitted when a tube offered to us (previously announced with tubeOffered()) has been successfully * accepted and a TCP socket established as the local endpoint, as specified by setToAcceptAsTcp(). * * The allowed source address and port are signaled here if there was a TcpSourceAddressGenerator set * at the time of accepting this tube, it yielded a non-zero address, and the protocol backend * supports source address based access control. This enables the application to use the correct one * of the sockets it currently has bound to the generated addresses. * * \param listenAddress The listen address of the local endpoint socket. * \param listenPort The listen port of the local endpoint socket. * \param sourceAddress The host address allowed to connect to the tube, or QHostAddress::Any * if source address based access control is not in use. * \param sourcePort The port from which connections are allowed to the tube, or 0 if source address * based access control is not in use. * \param account A pointer to the account object through which the tube was offered. * \param tube A pointer to the actual tube channel object. */ // Explicitly specifying Tp:: for this signal's argument types works around a doxygen bug causing it // to confuse the doc here being for StreamTubeServer::tubeClosed :/ /** * \fn void StreamTubeClient::tubeClosed(const Tp::AccountPtr &account, const * Tp::IncomingStreamTubeChannelPtr &tube, const QString &error, const QString &message) * * Emitted when a tube we've been handling (previously announced with tubeOffered()) has * encountered an error or has otherwise been closed from further communication. * * \param account A pointer to the account through which the tube was offered. * \param tube A pointer to the actual tube channel. * \param error The D-Bus error name corresponding to the reason for the closure. * \param message A freeform debug message associated with the error. */ /** * \fn void StreamTubeClient::tubeAcceptedAsUnix(const QHostAddress &listenAddress, quint16 * listenPort, const QHostAddress &sourceAddress, quint16 sourcePort, const AccountPtr &account, * const IncomingStreamTubeChannelPtr &tube) * * Emitted when a tube offered to us (previously announced with tubeOffered()) has been successfully * accepted and a Unix socket established as the local endpoint, as specified by setToAcceptAsUnix(). * * The credential byte which should be sent after connecting to the tube (in a SCM_CREDENTIALS or * SCM_CREDS message if supported by the platform) will be signaled here if the client was set to * attempt requiring credentials at the time of accepting this tube, and the protocol backend * supports credential passing based access control. Otherwise, \a requiresCredentials will be false * and no byte or associated out-of-band credentials metadata should be sent. * * \param listenAddress The listen address of the local endpoint socket. * \param requiresCredentials \c true if \a credentialByte should be sent after connecting to the * socket, \c false if not. * \param credentialByte The byte to send if \a requiresCredentials is \c true. * \param account A pointer to the account object through which the tube was offered. * \param tube A pointer to the actual tube channel object. */ /** * \fn void StreamTubeClient::newConnection(const AccountPtr &account, const * IncomingStreamTubeChannelPtr &tube, uint connectionId) * * Emitted when a new connection has been made to the local endpoint socket for \a tube. * * This can be used to later associate connection errors reported by connectionClosed() with the * corresponding application sockets. However, establishing the association generally requires * connecting only one socket at a time, waiting for newConnection() to be emitted, and only then * proceeding, as there is no identification for the connections unlike the incoming connections in * StreamTubeServer. * * Note that the connection IDs are only unique within a given tube, so identification of the tube * channel must also be recorded together with the ID to establish global uniqueness. Even then, the * a connection ID can be reused after the previous connection identified by it having been * signaled as closed with connectionClosed(). * * This is only emitted if connection monitoring was enabled when creating the StreamTubeClient. * * \param account A pointer to the account through which the tube was offered. * \param tube A pointer to the tube channel through which the connection has been made. * \param connectionId The integer ID of the new connection. */ /** * \fn void StreamTubeClient::connectionClosed(const AccountPtr &account, const * IncomingStreamTubeChannelPtr &tube, uint connectionId, const QString &error, const * QString &message) * * Emitted when a connection (previously announced with newConnection()) through one of our * handled tubes has been closed due to an error or by a graceful disconnect (in which case the * error is ::TP_QT_ERROR_CANCELLED). * * This is only emitted if connection monitoring was enabled when creating the StreamTubeClient. * * \param account A pointer to the account through which the tube was offered. * \param tube A pointer to the tube channel through which the connection had been made. * \param connectionId The integer ID of the connection closed. * \param error The D-Bus error name corresponding to the reason for the closure. * \param message A freeform debug message associated with the error. */ } // Tp telepathy-qt-0.9.3/TelepathyQt/callbacks.dox0000644000175200001440000001114012000056607023310 0ustar00collabora-develusers00000000000000/* * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 */ /** * \page callbacks Callbacks Usage * * \section callbacks_overview Overview * * Callbacks are used in Telepathy-Qt by the service side high-level APIs * to expose methods that may/should be overriden in implementations. * * Ideally we would use virtual methods for this, but as new methods * can be added freely (when interfaces change), we would not be able * to guarantee a stable API/ABI. Other options, such as virtual padding, * virtual_hook and Qt slots also have their own drawbacks. * * There are 8 Callback classes, Tp::Callback0 to Tp::Callback7, which * define a callback with 0 to 7 arguments respectively. The first template * argument is always the return value type and the rest template arguments * are the types of the callback arguments in the order that they are passed * to the callback. * * Callback classes can be constructed from a functor. To make it easy to * use function pointers as functors, Telepathy-Qt also provides two helper * functions, Tp::memFun and Tp::ptrFun. * * Here is an example of their usage: * \code * // assuming a member function QString MyImpl::myFunc(const QString & s, int i); * Tp::Callback2 cb = Tp::memFun(myObj, &MyImpl::myFunc); * * // assuming a non-member or static member function QString myFunc(const QString & s, int i); * Tp::Callback2 cb = Tp::ptrFun(&myFunc); * * // assuming Tp::BaseConnectionPtr MyProtocolImpl::createConnection(const QVariantMap ¶meters, DBusError *error); * myBaseProtocol->setCreateConnectionCallback(Tp::memFun(myProtocolImpl, &MyProtocolImpl::createConnection)); * \endcode * * You are also free to use any other mechanism for constructing functors, * such as boost::bind, C++11's module or even C++11 lambda functions. */ /** * \class Tp::BaseCallback * \ingroup utils * \headerfile TelepathyQt/callbacks.h * * \brief Base class for all the callback classes * * See \ref callbacks */ /** * \fn bool Tp::BaseCallback::isValid() const * * Return whether this callback object has a valid functor assigned to it * or if it's a default-constructed dummy callback object. * * \return \c false if this is a default-constructed callback or * \c true if this callback was constructed from a functor. */ /** * \class Tp::Callback0 * \ingroup utils * \headerfile TelepathyQt/callbacks.h * * \brief Callback with 0 arguments * * See \ref callbacks */ /** * \class Tp::Callback1 * \ingroup utils * \headerfile TelepathyQt/callbacks.h * * \brief Callback with 1 argument * * See \ref callbacks */ /** * \class Tp::Callback2 * \ingroup utils * \headerfile TelepathyQt/callbacks.h * * \brief Callback with 2 arguments * * See \ref callbacks */ /** * \class Tp::Callback3 * \ingroup utils * \headerfile TelepathyQt/callbacks.h * * \brief Callback with 3 arguments * * See \ref callbacks */ /** * \class Tp::Callback4 * \ingroup utils * \headerfile TelepathyQt/callbacks.h * * \brief Callback with 4 arguments * * See \ref callbacks */ /** * \class Tp::Callback5 * \ingroup utils * \headerfile TelepathyQt/callbacks.h * * \brief Callback with 5 arguments * * See \ref callbacks */ /** * \class Tp::Callback6 * \ingroup utils * \headerfile TelepathyQt/callbacks.h * * \brief Callback with 6 arguments * * See \ref callbacks */ /** * \class Tp::Callback7 * \ingroup utils * \headerfile TelepathyQt/callbacks.h * * \brief Callback with 7 arguments * * See \ref callbacks */ telepathy-qt-0.9.3/TelepathyQt/CMakeLists.txt0000644000175200001440000011113712000056607023424 0ustar00collabora-develusers00000000000000file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/_gen") # Set the required flags found in TelepathyDefaults set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${VISIBILITY_HIDDEN_FLAGS} ${COMPILER_COVERAGE_FLAGS} ${DEPRECATED_DECLARATIONS_FLAGS}") set(LD_FLAGS "${LD_FLAGS} ${VISIBILITY_HIDDEN_FLAGS} ${COMPILER_COVERAGE_FLAGS} ${DEPRECATED_DECLARATIONS_FLAGS}") # We are building Telepathy-Qt add_definitions(-DBUILDING_TP_QT) # Sources for Tp-Qt set(telepathy_qt_SRCS abstract-client.cpp abstract-interface.cpp account.cpp account-factory.cpp account-manager.cpp account-property-filter.cpp account-set.cpp account-set-internal.h avatar.cpp call-channel.cpp call-content.cpp call-stream.cpp capabilities-base.cpp call-content.cpp call-content-media-description.cpp call-stream.cpp call-stream-endpoint.cpp captcha.cpp captcha-authentication.cpp channel.cpp channel-class-spec.cpp channel-dispatcher.cpp channel-dispatch-operation.cpp channel-factory.cpp channel-internal.h channel-request.cpp client.cpp client-registrar.cpp client-registrar-internal.h connection.cpp connection-capabilities.cpp connection-factory.cpp connection-internal.h connection-manager.cpp connection-manager-internal.h contact.cpp contact-capabilities.cpp contact-factory.cpp contact-manager.cpp contact-manager-roster.cpp contact-messenger.cpp contact-search-channel.cpp dbus.cpp dbus-proxy.cpp dbus-proxy-factory.cpp dbus-proxy-factory-internal.h dbus-tube-channel.cpp debug.cpp debug-receiver.cpp debug-internal.h fake-handler-manager-internal.cpp fake-handler-manager-internal.h feature.cpp file-transfer-channel.cpp file-transfer-channel-creation-properties.cpp fixed-feature-factory.cpp future.cpp future-internal.h handled-channel-notifier.cpp incoming-dbus-tube-channel.cpp incoming-file-transfer-channel.cpp incoming-stream-tube-channel.cpp key-file.cpp key-file.h location-info.cpp manager-file.cpp manager-file.h media-session-handler.cpp media-stream-handler.cpp message.cpp message-content-part.cpp object.cpp optional-interface-factory.cpp outgoing-dbus-tube-channel.cpp outgoing-file-transfer-channel.cpp outgoing-stream-tube-channel.cpp pending-account.cpp pending-captchas.cpp pending-channel.cpp pending-channel-request.cpp pending-channel-request-internal.h pending-connection.cpp pending-contact-attributes.cpp pending-contact-info.cpp pending-contacts.cpp pending-dbus-tube-connection.cpp pending-debug-message-list.cpp pending-handles.cpp pending-operation.cpp pending-ready.cpp pending-send-message.cpp pending-string.cpp pending-string-list.cpp pending-stream-tube-connection.cpp pending-variant.cpp presence.cpp pending-variant-map.cpp profile.cpp profile-manager.cpp properties.cpp protocol-info.cpp protocol-parameter.cpp readiness-helper.cpp requestable-channel-class-spec.cpp ready-object.cpp referenced-handles.cpp request-temporary-handler-internal.cpp request-temporary-handler-internal.h room-list-channel.cpp server-authentication-channel.cpp simple-call-observer.cpp simple-observer.cpp simple-observer-internal.h simple-stream-tube-handler.cpp simple-text-observer.cpp simple-text-observer-internal.h stream-tube-channel.cpp stream-tube-client.cpp stream-tube-client-internal.h stream-tube-server.cpp stream-tube-server-internal.h streamed-media-channel.cpp text-channel.cpp tls-certificate.cpp tube-channel.cpp types.cpp types-internal.h utils.cpp) # Exported headers for Tp-Qt set(telepathy_qt_HEADERS AbstractClient AbstractClientApprover abstract-client.h AbstractClientHandler AbstractClientObserver AbstractInterface abstract-interface.h Account account.h AccountCapabilityFilter account-capability-filter.h AccountFactory account-factory.h AccountFilter account-filter.h AccountInterface AccountInterfaceAddressingInterface AccountInterfaceAvatarInterface AccountInterfaceStorageInterface AccountManager account-manager.h AccountManagerInterface account-property-filter.h AccountPropertyFilter AccountSet account-set.h AndFilter and-filter.h AuthenticationTLSCertificateInterface AvatarData AvatarSpec avatar.h CallChannel call-channel.h Callbacks callbacks.h CallContent CallContentInterface CallContentInterfaceAudioControlInterface CallContentInterfaceDTMFInterface CallContentInterfaceMediaInterface CallContentInterfaceVideoControlInterface call-content.h CallContentMediaDescription CallContentMediaDescriptionInterface CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface CallContentMediaDescriptionInterfaceRTCPFeedbackInterface CallContentMediaDescriptionInterfaceRTPHeaderExtensionsInterface call-content-media-description.h CallStream CallStreamInterface CallStreamInterfaceMediaInterface call-stream.h CallStreamEndpoint CallStreamEndpoint CallStreamEndpointInterface call-stream-endpoint.h CapabilitiesBase capabilities-base.h Captcha captcha.h CaptchaAuthentication captcha-authentication.h Channel channel.h ChannelClassFeatures channel-class-features.h ChannelClassSpec ChannelClassSpecList channel-class-spec.h ChannelDispatcher ChannelDispatcherInterface channel-dispatcher.h ChannelDispatchOperation channel-dispatch-operation.h ChannelDispatchOperationInterface ChannelFactory channel-factory.h ChannelInterface ChannelInterfaceAnonymityInterface ChannelInterfaceCaptchaAuthenticationInterface ChannelInterfaceCallStateInterface ChannelInterfaceChatStateInterface ChannelInterfaceConferenceInterface ChannelInterfaceDestroyableInterface ChannelInterfaceDTMFInterface ChannelInterfaceFileTransferMetadataInterface ChannelInterfaceGroupInterface ChannelInterfaceHoldInterface ChannelInterfaceMediaSignallingInterface ChannelInterfaceMessagesInterface ChannelInterfacePasswordInterface ChannelInterfaceSASLAuthenticationInterface ChannelInterfaceSecurableInterface ChannelInterfaceServicePointInterface ChannelInterfaceSMSInterface ChannelInterfaceTubeInterface ChannelRequest ChannelRequestHints channel-request.h ChannelRequestInterface ChannelTypeCallInterface ChannelTypeContactListInterface ChannelTypeContactSearchInterface ChannelTypeDBusTubeInterface ChannelTypeFileTransferInterface ChannelTypeRoomListInterface ChannelTypeServerAuthenticationInterface ChannelTypeServerTLSConnectionInterface ChannelTypeStreamedMediaInterface ChannelTypeStreamTubeInterface ChannelTypeTextInterface ChannelTypeTubeInterface ChannelTypeTubesInterface Client ClientApproverInterface client.h ClientHandlerInterface ClientInterface ClientInterfaceRequestsInterface ClientObserverInterface ClientRegistrar client-registrar.h Connection ConnectionCapabilities connection-capabilities.h connection.h ConnectionFactory connection-factory.h connection-lowlevel.h ConnectionInterface ConnectionInterfaceAddressingInterface ConnectionInterfaceAliasingInterface ConnectionInterfaceAnonymityInterface ConnectionInterfaceAvatarsInterface ConnectionInterfaceBalanceInterface ConnectionInterfaceCapabilitiesInterface ConnectionInterfaceCellularInterface ConnectionInterfaceContactBlockingInterface ConnectionInterfaceClientTypesInterface ConnectionInterfaceContactCapabilitiesInterface ConnectionInterfaceContactGroupsInterface ConnectionInterfaceContactInfoInterface ConnectionInterfaceContactListInterface ConnectionInterfaceContactsInterface ConnectionInterfaceLocationInterface ConnectionInterfaceMailNotificationInterface ConnectionInterfacePowerSavingInterface ConnectionInterfacePresenceInterface ConnectionInterfaceRequestsInterface ConnectionInterfaceServicePointInterface ConnectionInterfaceSimplePresenceInterface ConnectionLowlevel ConnectionManager connection-manager.h connection-manager-lowlevel.h ConnectionManagerInterface ConnectionManagerLowlevel Constants constants.h Contact contact.h ContactCapabilities contact-capabilities.h ContactFactory contact-factory.h ContactManager contact-manager.h ContactMessenger contact-messenger.h ContactSearchChannel contact-search-channel.h DBus DBusDaemonInterface dbus.h DBusProxy dbus-proxy.h DBusProxyFactory dbus-proxy-factory.h DBusTubeChannel dbus-tube-channel.h Debug debug.h DebugReceiver debug-receiver.h Feature Features feature.h FileTransferChannel FileTransferChannelCreationProperties file-transfer-channel-creation-properties.h file-transfer-channel.h Filter filter.h FixedFeatureFactory fixed-feature-factory.h Functors functors.h GenericCapabilityFilter generic-capability-filter.h GenericPropertyFilter generic-property-filter.h Global global.h HandledChannelNotifier handled-channel-notifier.h IncomingDBusTubeChannel incoming-dbus-tube-channel.h IncomingFileTransferChannel incoming-file-transfer-channel.h IncomingStreamTubeChannel incoming-stream-tube-channel.h IntrospectableInterface LocationInfo location-info.h MediaSessionHandler media-session-handler.h MediaSessionHandlerInterface MediaStreamHandler media-stream-handler.h MediaStreamHandlerInterface Message message.h MessageContentPart MessageContentPartList message-content-part.h MethodInvocationContext method-invocation-context.h NotFilter not-filter.h Object object.h OptionalInterfaceFactory optional-interface-factory.h OrFilter or-filter.h OutgoingDBusTubeChannel outgoing-dbus-tube-channel.h OutgoingFileTransferChannel outgoing-file-transfer-channel.h OutgoingStreamTubeChannel outgoing-stream-tube-channel.h PeerInterface PendingAccount pending-account.h PendingCallContent PendingCaptchas pending-captchas.h PendingChannel pending-channel.h PendingChannelRequest pending-channel-request.h PendingComposite PendingConnection pending-connection.h PendingContactAttributes pending-contact-attributes.h PendingContactInfo pending-contact-info.h PendingContacts pending-contacts.h PendingDBusTubeConnection pending-dbus-tube-connection.h PendingDebugMessageList pending-debug-message-list.h PendingFailure PendingHandles pending-handles.h PendingOperation pending-operation.h PendingReady pending-ready.h PendingSendMessage pending-send-message.h PendingStreamedMediaStreams PendingStreamTubeConnection pending-stream-tube-connection.h PendingString pending-string.h PendingStringList pending-string-list.h PendingSuccess PendingVariant pending-variant.h PendingVariantMap pending-variant-map.h PendingVoid Presence presence.h PresenceSpec PresenceSpecList Profile profile.h ProfileManager profile-manager.h Properties properties.h PropertiesInterface PropertiesInterfaceInterface ProtocolInfo ProtocolInfoList protocol-info.h ProtocolInterface ProtocolInterfaceAddressingInterface ProtocolInterfaceAvatarsInterface ProtocolInterfacePresenceInterface ProtocolParameter ProtocolParameterList protocol-parameter.h ReadinessHelper readiness-helper.h ReadyObject ready-object.h ReceivedMessage RefCounted ReferencedHandles referenced-handles.h ReferencedHandlesIterator requestable-channel-class-spec.h RequestableChannelClassSpec RequestableChannelClassSpecList RoomListChannel room-list-channel.h ServerAuthenticationChannel server-authentication-channel.h SharedPtr shared-ptr.h SimpleCallObserver simple-call-observer.h SimpleObserver simple-observer.h simple-pending-operations.h SimpleTextObserver simple-text-observer.h StatefulDBusProxy StatelessDBusProxy StreamTubeChannel StreamTubeClient StreamTubeServer stream-tube-channel.h stream-tube-client.h stream-tube-server.h StreamedMediaChannel streamed-media-channel.h StreamedMediaStream TextChannel text-channel.h tls-certificate.h TubeChannel tube-channel.h Types types.h Utils utils.h SharedPtr) # Generated headers which will be installed and exported set(telepathy_qt_gen_HEADERS ${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-account.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-account-manager.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-call-content.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-call-content-media-description.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-call-stream.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-call-stream-endpoint.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-channel.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-channel-dispatcher.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-channel-dispatch-operation.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-channel-request.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-client.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-connection.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-connection-manager.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-dbus.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-debug-receiver.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-media-session-handler.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-media-stream-handler.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-properties.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-tls-certificate.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/constants.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/types.h) # Headers file moc will be run on set(telepathy_qt_MOC_SRCS abstract-interface.h account.h account-factory.h account-manager.h account-set.h account-set-internal.h call-channel.h call-content.h call-stream.h captcha-authentication.h captcha-authentication-internal.h channel.h channel-dispatch-operation.h channel-dispatch-operation-internal.h channel-factory.h channel-internal.h channel-request.h client-registrar.h client-registrar-internal.h connection.h connection-internal.h connection-lowlevel.h connection-manager.h connection-manager-internal.h connection-manager-lowlevel.h contact.h contact-manager.h contact-manager-internal.h contact-messenger.h contact-search-channel.h contact-search-channel-internal.h dbus-proxy.h dbus-proxy-factory.h dbus-proxy-factory-internal.h debug-receiver.h dbus-tube-channel.h fake-handler-manager-internal.h file-transfer-channel.h fixed-feature-factory.h handled-channel-notifier.h incoming-dbus-tube-channel.h incoming-file-transfer-channel.h incoming-stream-tube-channel.h object.h outgoing-dbus-tube-channel.h outgoing-file-transfer-channel.h outgoing-stream-tube-channel.h outgoing-stream-tube-channel-internal.h pending-account.h pending-captchas.h pending-channel.h pending-channel-request.h pending-channel-request-internal.h pending-connection.h pending-contact-attributes.h pending-contact-info.h pending-contacts.h pending-contacts-internal.h pending-dbus-tube-connection.h pending-debug-message-list.h pending-handles.h pending-operation.h pending-ready.h pending-send-message.h pending-stream-tube-connection.h pending-string.h pending-string-list.h pending-variant.h pending-variant-map.h profile-manager.h readiness-helper.h request-temporary-handler-internal.h room-list-channel.h server-authentication-channel.h simple-call-observer.h simple-pending-operations.h simple-observer.h simple-observer-internal.h simple-stream-tube-handler.h simple-text-observer.h simple-text-observer-internal.h stream-tube-channel.h stream-tube-client.h stream-tube-client-internal.h stream-tube-server.h stream-tube-server-internal.h streamed-media-channel.h text-channel.h tube-channel.h) # Sources for test library, used by tests to test some unexported functionality set(telepathy_qt_test_backdoors_SRCS key-file.cpp manager-file.cpp test-backdoors.cpp utils.cpp) # Generate the spec files for both stable and future spec set(gen_stable_spec_xml ${CMAKE_CURRENT_BINARY_DIR}/_gen/stable-spec.xml) set(gen_future_spec_xml ${CMAKE_CURRENT_BINARY_DIR}/_gen/future-spec.xml) tpqt_xincludator(stable-ifaces-includator ${CMAKE_CURRENT_SOURCE_DIR}/stable-interfaces.xml ${gen_stable_spec_xml}) tpqt_xincludator(future-ifaces-includator ${CMAKE_CURRENT_SOURCE_DIR}/future-interfaces.xml ${gen_future_spec_xml}) add_custom_target(all-generated-sources) tpqt_constants_gen(stable-constants ${gen_stable_spec_xml} ${CMAKE_CURRENT_BINARY_DIR}/_gen/constants.h --namespace=Tp --define-prefix=TP_QT_ --must-define=IN_TP_QT_HEADER DEPENDS stable-ifaces-includator) tpqt_constants_gen(future-constants ${gen_future_spec_xml} ${CMAKE_CURRENT_BINARY_DIR}/_gen/future-constants.h --namespace=TpFuture --define-prefix=TP_QT_FUTURE_ DEPENDS future-ifaces-includator) tpqt_types_gen(stable-typesgen ${gen_stable_spec_xml} ${CMAKE_CURRENT_BINARY_DIR}/_gen/types.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/types-body.hpp Tp TelepathyQt/types.h TelepathyQt/Types --must-define=IN_TP_QT_HEADER --visibility=TP_QT_EXPORT DEPENDS stable-constants) tpqt_types_gen(future-typesgen ${gen_future_spec_xml} ${CMAKE_CURRENT_BINARY_DIR}/_gen/future-types.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/future-types-body.hpp TpFuture TelepathyQt/future-internal.h TelepathyQt/future-internal.h DEPENDS future-constants) # Add the generated types to the library's sources list(APPEND telepathy_qt_SRCS ${CMAKE_CURRENT_BINARY_DIR}/_gen/types.h) list(APPEND telepathy_qt_SRCS ${CMAKE_CURRENT_BINARY_DIR}/_gen/types-body.hpp) list(APPEND telepathy_qt_SRCS ${CMAKE_CURRENT_BINARY_DIR}/_gen/future-constants.h) list(APPEND telepathy_qt_SRCS ${CMAKE_CURRENT_BINARY_DIR}/_gen/future-types.h) list(APPEND telepathy_qt_SRCS ${CMAKE_CURRENT_BINARY_DIR}/_gen/future-types-body.hpp) # For each spec, both stable and future, generate a cli file and add it to the sources (including mocs). set(SPECS account account-manager call-content call-content-media-description call-stream call-stream-endpoint channel channel-dispatcher channel-dispatch-operation channel-request client connection connection-manager dbus debug-receiver media-session-handler media-stream-handler properties tls-certificate) foreach(spec ${SPECS}) tpqt_xincludator(${spec}-spec-xincludator ${CMAKE_CURRENT_SOURCE_DIR}/${spec}.xml ${CMAKE_CURRENT_BINARY_DIR}/_gen/spec-${spec}.xml DEPENDS stable-typesgen) set(NEW_FILES ${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-${spec}-body.hpp ${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-${spec}.moc.hpp) list(APPEND telepathy_qt_SRCS ${NEW_FILES}) list(APPEND telepathy_qt_generated_specs_mocs "moc-cli-${spec}.moc.hpp") set_source_files_properties(${NEW_FILES} PROPERTIES GENERATED true) endforeach(spec ${SPECS}) set(FUTURE_SPECS channel channel-dispatcher misc) foreach(spec ${FUTURE_SPECS}) tpqt_xincludator(${spec}-future-xincludator ${CMAKE_CURRENT_SOURCE_DIR}/future-${spec}.xml ${CMAKE_CURRENT_BINARY_DIR}/_gen/future-${spec}.xml DEPENDS stable-typesgen future-typesgen) set(NEW_FILES ${CMAKE_CURRENT_BINARY_DIR}/_gen/future-${spec}.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/future-${spec}-body.hpp ${CMAKE_CURRENT_BINARY_DIR}/_gen/future-${spec}.moc.hpp) list(APPEND telepathy_qt_SRCS ${NEW_FILES}) list(APPEND telepathy_qt_generated_specs_mocs "moc-future-${spec}.moc.hpp") set_source_files_properties(${NEW_FILES} PROPERTIES GENERATED true) endforeach(spec ${FUTURE_SPECS}) # The escape character in MSVC is ^ if(MSVC) set(TYPES_INCLUDE ^ ) else(MSVC) set(TYPES_INCLUDE '' ) endif(MSVC) # Use the client generator for generating headers out of specs tpqt_client_generator(account clientaccount AccountManager Tp::Client --mainiface=Tp::Client::AccountInterface DEPENDS account-spec-xincludator) tpqt_client_generator(account-manager clientam AccountManager Tp::Client --mainiface=Tp::Client::AccountManagerInterface DEPENDS account-manager-spec-xincludator) tpqt_client_generator(call-content clientcall CallContent Tp::Client --mainiface=Tp::Client::CallContentInterface DEPENDS call-content-spec-xincludator) tpqt_client_generator(call-content-media-description clientcall CallContentMediaDescriptionInterface Tp::Client --mainiface=Tp::Client::CallContentMediaDescriptionInterface DEPENDS call-content-media-description-spec-xincludator) tpqt_client_generator(call-stream clientcall CallStream Tp::Client --mainiface=Tp::Client::CallStreamInterface DEPENDS call-stream-spec-xincludator) tpqt_client_generator(call-stream-endpoint clientcall CallStreamEndpoint Tp::Client --mainiface=Tp::Client::CallStreamEndpointInterface DEPENDS call-stream-endpoint-spec-xincludator) tpqt_client_generator(channel clientchannel Channel Tp::Client --mainiface=Tp::Client::ChannelInterface DEPENDS channel-spec-xincludator) tpqt_client_generator(channel-dispatcher clientchanneldispatcher ChannelDispatcher Tp::Client --mainiface=Tp::Client::ChannelDispatcherInterface DEPENDS channel-dispatcher-spec-xincludator) tpqt_client_generator(channel-dispatch-operation clientchanneldispatchoperation ChannelDispatchOperation Tp::Client --mainiface=Tp::Client::ChannelDispatchOperationInterface DEPENDS channel-dispatch-operation-spec-xincludator) tpqt_client_generator(channel-request clientchannelrequest ChannelRequest Tp::Client --mainiface=Tp::Client::ChannelRequestInterface DEPENDS channel-request-spec-xincludator) tpqt_client_generator(client clientclient Client Tp::Client --mainiface=Tp::Client::ClientInterface DEPENDS client-spec-xincludator) tpqt_client_generator(connection clientconn Connection Tp::Client --mainiface=Tp::Client::ConnectionInterface DEPENDS connection-spec-xincludator) tpqt_client_generator(connection-manager clientcm ConnectionManager Tp::Client --mainiface=Tp::Client::ConnectionManagerInterface DEPENDS connection-manager-spec-xincludator) tpqt_client_generator(dbus clientdbus DBus Tp::Client::DBus DEPENDS dbus-spec-xincludator) tpqt_client_generator(debug-receiver clientdebug DebugReceiver Tp::Client --mainiface=Tp::Client::DebugInterface DEPENDS debug-receiver-spec-xincludator) tpqt_client_generator(media-session-handler clientmsesh MediaSessionHandler Tp::Client --mainiface=Tp::Client::MediaSessionHandlerInterface DEPENDS media-session-handler-spec-xincludator) tpqt_client_generator(media-stream-handler clientmstrh MediaStreamHandler Tp::Client --mainiface=Tp::Client::MediaStreamHandlerInterface DEPENDS media-stream-handler-spec-xincludator) tpqt_client_generator(properties clientprops Properties Tp::Client DEPENDS properties-spec-xincludator) tpqt_client_generator(tls-certificate clienttls TLSCertificate Tp::Client DEPENDS tls-certificate-spec-xincludator) tpqt_future_client_generator(channel TpFuture::Client --mainiface=Tp::Client::ChannelInterface DEPENDS channel-future-xincludator) tpqt_future_client_generator(channel-dispatcher TpFuture::Client --mainiface=Tp::Client::ChannelDispatcherInterface DEPENDS channel-dispatcher-future-xincludator) tpqt_future_client_generator(misc TpFuture::Client DEPENDS misc-future-xincludator) if (TARGET doxygen-doc) add_dependencies(doxygen-doc all-generated-sources) endif (TARGET doxygen-doc) # Create the library if (ENABLE_COMPILER_COVERAGE) add_library(telepathy-qt${QT_VERSION_MAJOR} STATIC ${telepathy_qt_SRCS}) else (ENABLE_COMPILER_COVERAGE) add_library(telepathy-qt${QT_VERSION_MAJOR} SHARED ${telepathy_qt_SRCS}) endif (ENABLE_COMPILER_COVERAGE) # Library used by tests to test some unexported functionality add_library(telepathy-qt-test-backdoors STATIC ${telepathy_qt_test_backdoors_SRCS}) add_dependencies(telepathy-qt-test-backdoors stable-constants) add_dependencies(telepathy-qt-test-backdoors stable-typesgen) # generate client moc files foreach(moc_src ${telepathy_qt_MOC_SRCS}) set(generated_file _gen/${moc_src}) string(REPLACE ".h" ".moc.hpp" generated_file ${generated_file}) tpqt_generate_moc_i_target_deps(${CMAKE_CURRENT_SOURCE_DIR}/${moc_src} ${CMAKE_CURRENT_BINARY_DIR}/${generated_file} ${telepathy_qt_generated_specs_mocs}) list(APPEND telepathy_qt_SRCS ${CMAKE_CURRENT_BINARY_DIR}/${generated_file}) string(REPLACE ".h" ".moc.hpp" moc_src ${moc_src}) add_dependencies(telepathy-qt${QT_VERSION_MAJOR} "moc-${moc_src}") endforeach(moc_src ${telepathy_qt_MOC_SRCS}) # Link target_link_libraries(telepathy-qt${QT_VERSION_MAJOR} ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} ${QT_QTNETWORK_LIBRARY} ${QT_QTXML_LIBRARY} ${TP_QT_LIBRARY_LINKER_FLAGS}) # Link - Library used by tests to test some unexported functionality target_link_libraries(telepathy-qt-test-backdoors ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} ${QT_QTNETWORK_LIBRARY} ${QT_QTXML_LIBRARY} ${TP_QT_LIBRARY_LINKER_FLAGS}) if (ENABLE_COMPILER_COVERAGE) target_link_libraries(telepathy-qt${QT_VERSION_MAJOR} gcov) target_link_libraries(telepathy-qt-test-backdoors gcov) endif (ENABLE_COMPILER_COVERAGE) # Set the correct version number set_target_properties(telepathy-qt${QT_VERSION_MAJOR} PROPERTIES SOVERSION ${TP_QT_ABI_VERSION} VERSION ${TP_QT_LIBRARY_VERSION}) # Install header files install(FILES ${telepathy_qt_HEADERS} DESTINATION ${INCLUDE_INSTALL_DIR}/telepathy-qt${QT_VERSION_MAJOR}/TelepathyQt COMPONENT headers) install(FILES ${telepathy_qt_gen_HEADERS} DESTINATION ${INCLUDE_INSTALL_DIR}/telepathy-qt${QT_VERSION_MAJOR}/TelepathyQt/_gen COMPONENT headers) # Install the library - watch out for the correct components if (WIN32) install(TARGETS telepathy-qt${QT_VERSION_MAJOR} EXPORT TelepathyQt${QT_VERSION_MAJOR}Targets RUNTIME DESTINATION ${LIB_INSTALL_DIR} COMPONENT mainlibrary ARCHIVE DESTINATION ${LIB_INSTALL_DIR} COMPONENT libs) else (WIN32) install(TARGETS telepathy-qt${QT_VERSION_MAJOR} EXPORT TelepathyQt${QT_VERSION_MAJOR}Targets LIBRARY DESTINATION ${LIB_INSTALL_DIR} COMPONENT mainlibrary ARCHIVE DESTINATION ${LIB_INSTALL_DIR} COMPONENT libs) endif (WIN32) # pkg-config files, only if we are not using windows if (NOT WIN32) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/TelepathyQt.pc.in ${CMAKE_CURRENT_BINARY_DIR}/TelepathyQt${QT_VERSION_MAJOR}.pc) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/TelepathyQt-uninstalled.pc.in ${CMAKE_CURRENT_BINARY_DIR}/TelepathyQt${QT_VERSION_MAJOR}-uninstalled.pc) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/TelepathyQt${QT_VERSION_MAJOR}.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig COMPONENT pkgconfig) endif (NOT WIN32) # CMake Version and config files include(MacroWriteBasicCMakeVersionFile) # all the following variables are put into TelepathyQt*Config.cmake, so # they are usable by projects using TelepathyQt. make_install_path_absolute(TELEPATHY_QT_INCLUDE_DIR ${INCLUDE_INSTALL_DIR}/telepathy-qt${QT_VERSION_MAJOR}) make_install_path_absolute(TELEPATHY_QT_LIB_DIR ${LIB_INSTALL_DIR}) make_install_path_absolute(TELEPATHY_QT_DATA_DIR ${DATA_INSTALL_DIR}) # Configure the actual Config file configure_file(TelepathyQtConfig.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/TelepathyQt${QT_VERSION_MAJOR}Config.cmake" @ONLY) # this file is used by to check if the installed version can be used. macro_write_basic_cmake_version_file(${CMAKE_CURRENT_BINARY_DIR}/TelepathyQt${QT_VERSION_MAJOR}ConfigVersion.cmake ${PACKAGE_VERSION}) # Find out the correct installation directory if (USE_COMMON_CMAKE_PACKAGE_CONFIG_DIR) set(_TelepathyQtConfig_INSTALL_DIR ${LIB_INSTALL_DIR}/cmake/TelepathyQt${QT_VERSION_MAJOR}) else (USE_COMMON_CMAKE_PACKAGE_CONFIG_DIR) set(_TelepathyQtConfig_INSTALL_DIR ${LIB_INSTALL_DIR}/TelepathyQt${QT_VERSION_MAJOR}/cmake) endif (USE_COMMON_CMAKE_PACKAGE_CONFIG_DIR) install(EXPORT TelepathyQt${QT_VERSION_MAJOR}Targets DESTINATION ${_TelepathyQtConfig_INSTALL_DIR} COMPONENT headers) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/TelepathyQt${QT_VERSION_MAJOR}ConfigVersion.cmake ${CMAKE_CURRENT_BINARY_DIR}/TelepathyQt${QT_VERSION_MAJOR}Config.cmake DESTINATION ${_TelepathyQtConfig_INSTALL_DIR} COMPONENT headers) add_subdirectory(Farsight) add_subdirectory(Farstream) if(ENABLE_EXPERIMENTAL_SERVICE_SUPPORT) # lets build tp-qt service side support as a separate library until we can guarantee API/ABI # stability set(telepathy_qt_service_SRCS base-connection-manager.cpp base-connection.cpp base-protocol.cpp dbus-error.cpp dbus-object.cpp dbus-service.cpp abstract-adaptor.cpp) set(telepathy_qt_service_HEADERS AbstractAdaptor abstract-adaptor.h AbstractDBusServiceInterface AbstractProtocolInterface BaseConnectionManager base-connection-manager.h BaseConnection base-connection.h BaseProtocol BaseProtocolAddressingInterface BaseProtocolAvatarsInterface BaseProtocolPresenceInterface base-protocol.h DBusError dbus-error.h DBusObject dbus-object.h DBusService dbus-service.h ServiceTypes service-types.h) # Generated headers which will be installed and exported set(telepathy_qt_service_gen_HEADERS ${CMAKE_CURRENT_BINARY_DIR}/_gen/svc-channel.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/svc-connection.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/svc-connection-manager.h) # Headers file moc will be run on set(telepathy_qt_service_MOC_SRCS abstract-adaptor.h base-connection-manager.h base-connection-manager-internal.h base-connection.h base-connection-internal.h base-protocol.h base-protocol-internal.h dbus-object.h dbus-service.h) add_custom_target(all-generated-service-sources) set(SPECS svc-channel svc-connection svc-connection-manager) foreach(spec ${SPECS}) tpqt_xincludator(${spec}-spec-xincludator ${CMAKE_CURRENT_SOURCE_DIR}/${spec}.xml ${CMAKE_CURRENT_BINARY_DIR}/_gen/spec-${spec}.xml DEPENDS stable-typesgen) set(NEW_FILES ${CMAKE_CURRENT_BINARY_DIR}/_gen/${spec}.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/${spec}.cpp ${CMAKE_CURRENT_BINARY_DIR}/_gen/${spec}.moc.hpp) list(APPEND telepathy_qt_service_SRCS ${NEW_FILES}) list(APPEND telepathy_qt_service_generated_specs_mocs "moc-${spec}.moc.hpp") set_source_files_properties(${NEW_FILES} PROPERTIES GENERATED true) endforeach(spec ${SPECS}) tpqt_service_generator(svc-channel servicechannel Channel Tp::Service DEPENDS svc-channel-spec-xincludator) tpqt_service_generator(svc-connection serviceconn Connection Tp::Service DEPENDS svc-connection-spec-xincludator) tpqt_service_generator(svc-connection-manager servicecm ConnectionManager Tp::Service DEPENDS svc-connection-manager-spec-xincludator) if (TARGET doxygen-doc) add_dependencies(doxygen-doc all-generated-service-sources) endif (TARGET doxygen-doc) # Create the library #if (ENABLE_COMPILER_COVERAGE) # add_library(telepathy-qt${QT_VERSION_MAJOR}-service STATIC ${telepathy_qt_service_SRCS}) #else (ENABLE_COMPILER_COVERAGE) # add_library(telepathy-qt${QT_VERSION_MAJOR}-service SHARED ${telepathy_qt_service_SRCS}) #endif (ENABLE_COMPILER_COVERAGE) # lets build a static only library until we have a stable API/ABI add_library(telepathy-qt${QT_VERSION_MAJOR}-service STATIC ${telepathy_qt_service_SRCS}) # generate service moc files foreach(moc_src ${telepathy_qt_service_MOC_SRCS}) set(generated_file _gen/${moc_src}) string(REPLACE ".h" ".moc.hpp" generated_file ${generated_file}) tpqt_generate_moc_i_target_deps(${CMAKE_CURRENT_SOURCE_DIR}/${moc_src} ${CMAKE_CURRENT_BINARY_DIR}/${generated_file} ${telepathy_qt_service_generated_specs_mocs}) list(APPEND telepathy_qt_service_SRCS ${CMAKE_CURRENT_BINARY_DIR}/${generated_file}) string(REPLACE ".h" ".moc.hpp" moc_src ${moc_src}) add_dependencies(telepathy-qt${QT_VERSION_MAJOR}-service "moc-${moc_src}") endforeach(moc_src ${telepathy_qt_service_MOC_SRCS}) # Link target_link_libraries(telepathy-qt${QT_VERSION_MAJOR}-service ${QT_QTDBUS_LIBRARY} ${QT_QTCORE_LIBRARY} telepathy-qt${QT_VERSION_MAJOR} ${TP_QT_LIBRARY_LINKER_FLAGS}) # Set the correct version number set_target_properties(telepathy-qt${QT_VERSION_MAJOR}-service PROPERTIES SOVERSION ${TP_QT_ABI_VERSION} VERSION ${TP_QT_LIBRARY_VERSION}) # Install the library - watch out for the correct components if (WIN32) install(TARGETS telepathy-qt${QT_VERSION_MAJOR}-service EXPORT TelepathyQt${QT_VERSION_MAJOR}Targets RUNTIME DESTINATION ${LIB_INSTALL_DIR} COMPONENT service ARCHIVE DESTINATION ${LIB_INSTALL_DIR} COMPONENT service_libs) else (WIN32) install(TARGETS telepathy-qt${QT_VERSION_MAJOR}-service EXPORT TelepathyQt${QT_VERSION_MAJOR}Targets LIBRARY DESTINATION ${LIB_INSTALL_DIR} COMPONENT service ARCHIVE DESTINATION ${LIB_INSTALL_DIR} COMPONENT service_libs) endif (WIN32) # Install headers install(FILES ${telepathy_qt_service_HEADERS} DESTINATION ${INCLUDE_INSTALL_DIR}/telepathy-qt${QT_VERSION_MAJOR}/TelepathyQt COMPONENT service_headers) install(FILES ${telepathy_qt_service_gen_HEADERS} DESTINATION ${INCLUDE_INSTALL_DIR}/telepathy-qt${QT_VERSION_MAJOR}/TelepathyQt/_gen COMPONENT service_headers) # pkg-config files, only if not on windows if (NOT WIN32) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/TelepathyQtService.pc.in ${CMAKE_CURRENT_BINARY_DIR}/TelepathyQt${QT_VERSION_MAJOR}Service.pc) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/TelepathyQtService-uninstalled.pc.in ${CMAKE_CURRENT_BINARY_DIR}/TelepathyQt${QT_VERSION_MAJOR}Service-uninstalled.pc) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/TelepathyQt${QT_VERSION_MAJOR}Service.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig COMPONENT pkgconfig) endif (NOT WIN32) # Configure the actual Config file configure_file(TelepathyQtServiceConfig.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/TelepathyQt${QT_VERSION_MAJOR}ServiceConfig.cmake" @ONLY) # this file is used by to check if the installed version can be used. macro_write_basic_cmake_version_file(${CMAKE_CURRENT_BINARY_DIR}/TelepathyQt${QT_VERSION_MAJOR}ServiceConfigVersion.cmake ${PACKAGE_VERSION}) if(USE_COMMON_CMAKE_PACKAGE_CONFIG_DIR) set(_TelepathyQtServiceConfig_INSTALL_DIR ${LIB_INSTALL_DIR}/cmake/TelepathyQt${QT_VERSION_MAJOR}Service) else(USE_COMMON_CMAKE_PACKAGE_CONFIG_DIR) set(_TelepathyQtServiceConfig_INSTALL_DIR ${LIB_INSTALL_DIR}/TelepathyQt${QT_VERSION_MAJOR}Service/cmake) endif(USE_COMMON_CMAKE_PACKAGE_CONFIG_DIR) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/TelepathyQt${QT_VERSION_MAJOR}ServiceConfigVersion.cmake ${CMAKE_CURRENT_BINARY_DIR}/TelepathyQt${QT_VERSION_MAJOR}ServiceConfig.cmake DESTINATION ${_TelepathyQtServiceConfig_INSTALL_DIR} COMPONENT headers) endif(ENABLE_EXPERIMENTAL_SERVICE_SUPPORT) telepathy-qt-0.9.3/TelepathyQt/AbstractDBusServiceInterface0000644000175200001440000000042212000056607026264 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_AbstractDBusServiceInterface_HEADER_GUARD_ #define _TelepathyQt_AbstractDBusServiceInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/pending-string.cpp0000644000175200001440000000531512000056607024320 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/pending-string.moc.hpp" #include "TelepathyQt/debug-internal.h" #include namespace Tp { struct TP_QT_NO_EXPORT PendingString::Private { QString result; }; /** * \class PendingString * \ingroup utils * \headerfile TelepathyQt/pending-string.h * * \brief The PendingString class is a generic subclass of PendingOperation * representing a pending D-Bus method call that returns a string. * * See \ref async_model */ PendingString::PendingString(QDBusPendingCall call, const SharedPtr &object) : PendingOperation(object), mPriv(new Private) { connect(new QDBusPendingCallWatcher(call), SIGNAL(finished(QDBusPendingCallWatcher*)), this, SLOT(watcherFinished(QDBusPendingCallWatcher*))); } PendingString::PendingString(const QString &errorName, const QString &errorMessage) : PendingOperation(SharedPtr()), mPriv(new Private) { setFinishedWithError(errorName, errorMessage); } /** * Class destructor. */ PendingString::~PendingString() { delete mPriv; } QString PendingString::result() const { return mPriv->result; } void PendingString::setResult(const QString &result) { mPriv->result = result; } void PendingString::watcherFinished(QDBusPendingCallWatcher* watcher) { QDBusPendingReply reply = *watcher; if (!reply.isError()) { debug() << "Got reply to PendingString call"; setResult(reply.value()); setFinished(); } else { debug().nospace() << "PendingString call failed: " << reply.error().name() << ": " << reply.error().message(); setFinishedWithError(reply.error()); } watcher->deleteLater(); } } // Tp telepathy-qt-0.9.3/TelepathyQt/captcha-authentication.cpp0000644000175200001440000003732112000056607026012 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include #include "TelepathyQt/debug-internal.h" #include "TelepathyQt/_gen/captcha-authentication.moc.hpp" #include "TelepathyQt/_gen/captcha-authentication-internal.moc.hpp" #include #include #include #include #include namespace Tp { // --- PendingCaptchaAnswer::PendingCaptchaAnswer(const QDBusPendingCall &call, const CaptchaAuthenticationPtr &object) : PendingOperation(object), mWatcher(new QDBusPendingCallWatcher(call, this)), mCaptcha(object), mChannel(mCaptcha->channel()) { debug() << "Calling Captcha.Answer"; if (mWatcher->isFinished()) { onAnswerFinished(); } else { // Connect the pending void connect(mWatcher, SIGNAL(finished(QDBusPendingCallWatcher*)), this, SLOT(onAnswerFinished())); } } PendingCaptchaAnswer::~PendingCaptchaAnswer() { } void PendingCaptchaAnswer::onAnswerFinished() { QDBusReply reply = mWatcher->reply(); if (!reply.isValid()) { warning().nospace() << "Captcha.Answer failed with " << reply.error().name() << ": " << reply.error().message(); setFinishedWithError(reply.error()); return; } debug() << "Captcha.Answer returned successfully"; // It might have been already opened - check if (mCaptcha->status() == CaptchaStatusLocalPending || mCaptcha->status() == CaptchaStatusRemotePending) { debug() << "Awaiting captcha to be answered from server"; // Wait until status becomes relevant connect(mCaptcha.data(), SIGNAL(statusChanged(Tp::CaptchaStatus)), SLOT(onCaptchaStatusChanged(Tp::CaptchaStatus))); } else { onCaptchaStatusChanged(mCaptcha->status()); } } void PendingCaptchaAnswer::onCaptchaStatusChanged(Tp::CaptchaStatus status) { if (status == CaptchaStatusSucceeded) { // Perfect. Close the channel now. connect(mChannel->requestClose(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onRequestCloseFinished(Tp::PendingOperation*))); } else if (status == CaptchaStatusFailed || status == CaptchaStatusTryAgain) { warning() << "Captcha status changed to" << status << ", failing"; setFinishedWithError(mCaptcha->error(), mCaptcha->errorDetails().debugMessage()); } } void PendingCaptchaAnswer::onRequestCloseFinished(Tp::PendingOperation *operation) { if (operation->isError()) { // We cannot really fail just because the channel didn't close. Throw a warning instead. warning() << "Could not close the channel after a successful captcha answer!!" << operation->errorMessage(); } setFinished(); } PendingCaptchaCancel::PendingCaptchaCancel(const QDBusPendingCall &call, const CaptchaAuthenticationPtr &object) : PendingOperation(object), mWatcher(new QDBusPendingCallWatcher(call, this)), mCaptcha(object), mChannel(mCaptcha->channel()) { debug() << "Calling Captcha.Cancel"; if (mWatcher->isFinished()) { onCancelFinished(); } else { // Connect the pending void connect(mWatcher, SIGNAL(finished(QDBusPendingCallWatcher*)), this, SLOT(onCancelFinished())); } } PendingCaptchaCancel::~PendingCaptchaCancel() { } void PendingCaptchaCancel::onCancelFinished() { QDBusReply reply = mWatcher->reply(); if (!reply.isValid()) { warning().nospace() << "Captcha.Answer failed with " << reply.error().name() << ": " << reply.error().message(); setFinishedWithError(reply.error()); return; } debug() << "Captcha.Cancel returned successfully"; // Perfect. Close the channel now. connect(mChannel->requestClose(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onRequestCloseFinished(Tp::PendingOperation*))); } void PendingCaptchaCancel::onRequestCloseFinished(Tp::PendingOperation *operation) { if (operation->isError()) { // We cannot really fail just because the channel didn't close. Throw a warning instead. warning() << "Could not close the channel after a successful captcha cancel!!" << operation->errorMessage(); } setFinished(); } // -- CaptchaAuthentication::Private::Private(CaptchaAuthentication *parent) : parent(parent) { } void CaptchaAuthentication::Private::extractCaptchaAuthenticationProperties(const QVariantMap &props) { canRetry = qdbus_cast(props[QLatin1String("CanRetryCaptcha")]); status = static_cast(qdbus_cast(props[QLatin1String("Status")])); } /** * \class CaptchaAuthentication * \ingroup clientchannel * \headerfile TelepathyQt/captcha-authentication.h * * \brief The CaptchaAuthentication class exposes CaptchaAuthentication's features for channels implementing it. * * A ServerAuthentication channel can implement a CaptchaAuthentication interface: this class exposes all the features * this interface provides in a high-level fashion. It is a mechanism for retrieving a captcha challenge from * a connection manager and answering it. * * This class is meant to be used just during authentication phase. It is useful just for platform-level handlers * which are meant to handle authentication - if you are implementing a client which is meant to live in a * Telepathy-aware platform, you probably won't need to handle this unless you have very special needs. * * Note that CaptchaAuthentication cannot be instantiated directly, instead the accessor method from * ServerAuthenticationChannel (ServerAuthenticationChannel::captchaAuthentication) should be used. * * See \ref async_model, \ref shared_ptr */ CaptchaAuthentication::CaptchaAuthentication(const ChannelPtr &channel) : Object(), mPriv(new Private(this)) { mPriv->channel = channel; } /** * Class destructor. */ CaptchaAuthentication::~CaptchaAuthentication() { delete mPriv; } /** * Return the channel associated with this captcha. * * CaptchaAuthentication is just a representation of an interface which can be implemented by * a ServerAuthentication channel. This function will return the channel implementing the interface * represented by this instance. * * Note that it is currently guaranteed the ChannelPtr returned by this function will be a ServerAuthenticationChannel. * * \return The channel implementing the CaptchaAuthentication interface represented by this instance. */ Tp::ChannelPtr CaptchaAuthentication::channel() const { return ChannelPtr(mPriv->channel); } /** * Return whether this channel supports updating its captchas or not. * * Some protocols allow their captchas to be reloaded providing new data to the user; for example, in case * the image provided is not easily readable. This function checks if this instance supports such a feature. * * Note that in case this function returns \c true, requestCaptchas can be called safely after a failed answer attempt. * * \return \c true if a new captcha can be fetched from this channel, \c false otherwise. */ bool CaptchaAuthentication::canRetry() const { return mPriv->canRetry; } /** * Return the current status of the captcha. * * \return The current status of the captcha. */ Tp::CaptchaStatus CaptchaAuthentication::status() const { return mPriv->status; } /** * Return the code of the last error happened on the interface. * * \return An error code describing the last error occurred. * \sa errorDetails */ QString CaptchaAuthentication::error() const { return mPriv->error; } /** * Return the details of the last error happened on the interface. * * \return Further details describing the last error occurred. * \sa error */ Connection::ErrorDetails CaptchaAuthentication::errorDetails() const { return Connection::ErrorDetails(mPriv->errorDetails); } /** * Request captcha challenges from the connection manager. * * Even if most protocols usually provide a single captcha challenge (OCR), for a variety * of reasons some of them could provide a number of different challenge types, requiring * one or more of them to be answered. * * This method initiates a request to the connection manager for obtaining the most compatible captcha * challenges available. It allows to supply a number of supported mimetypes and types, so that the * request will fail if the CM is unable to provide a challenge compatible with what the handler supports, * or will provide the best one available otherwise. * * Please note that all the challenges returned by this request must be answered in order for the authentication * to succeed. * * Note that if the CM supports retrying the captcha, this function can also be used to load a new set of captchas. * In general, if canRetry returns true, one can expect this function to always return a different set * of challenges which invalidates any other obtained previously. * * \param preferredMimeTypes A list of mimetypes supported by the handler, or an empty list if every * mimetype can be supported. * \param preferredTypes A list of challenge types supported by the handler. * \return A PendingCaptchas which will emit PendingCaptchas::finished when the request has been completed and all the payloads * have been downloaded. * \sa canRetry * \sa cancel * \sa answer */ PendingCaptchas *CaptchaAuthentication::requestCaptchas(const QStringList &preferredMimeTypes, ChallengeTypes preferredTypes) { // The captcha should be either LocalPending or TryAgain if (status() != CaptchaStatusLocalPending && status() != CaptchaStatusTryAgain) { warning() << "Status must be local pending or try again"; return new PendingCaptchas(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Channel busy"), CaptchaAuthenticationPtr(this)); } ChannelPtr serverAuthChannel = ChannelPtr(mPriv->channel); return new PendingCaptchas( serverAuthChannel->interface()->GetCaptchas(), preferredMimeTypes, preferredTypes, CaptchaAuthenticationPtr(this)); } /** * Overloaded function. Convenience method when just a single captcha requires to be answered. * * Note that you need to answer only the last set of challenges returned, in case requestCaptchas * was invoked multiple times. * * Please note that if this operation succeeds, the channel will be closed right after. * * \param id The id of the challenge being answered. * \param response The answer of this challenge. * \return A PendingOperation which will emit PendingOperation::finished upon the outcome of the answer procedure. * Upon success, the operation will complete once the channel is closed. * \sa requestCaptchas * \sa answer */ Tp::PendingOperation *CaptchaAuthentication::answer(uint id, const QString &response) { QMap answers; answers.insert(id, response); return answer(answers); } /** * Answer a set of challenges. * * Challenges obtained with requestCaptchas should be answered using this method. Note that * every challenge returned by the last invocation of requestCaptchas must be answered * in order for the operation to succeed. * * Usually, most protocols will require just a single challenge to be answered: if that is the * case, you can use the convenience overload. * * Note that you need to answer only the last set of challenges returned, in case requestCaptchas * was invoked multiple times. * * Please note that if this operation succeeds, the channel will be closed right after. * * \param response A set of answers mapped by their id to the challenges obtained previously * \return A PendingOperation which will emit PendingOperation::finished upon the outcome of the answer procedure. * Upon success, the operation will complete once the channel is closed. * \sa requestCaptchas * \sa answer */ Tp::PendingOperation *CaptchaAuthentication::answer(const Tp::CaptchaAnswers &response) { // The captcha should be LocalPending or TryAgain if (status() != CaptchaStatusLocalPending) { warning() << "Status must be local pending"; return new PendingCaptchas(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Channel busy"), CaptchaAuthenticationPtr(this)); } ChannelPtr serverAuthChannel = ChannelPtr(mPriv->channel); return new PendingCaptchaAnswer(serverAuthChannel->interface()->AnswerCaptchas(response), CaptchaAuthenticationPtr(this)); } /** * Cancel the current challenge. * * Please note that if this operation succeeds, the channel will be closed right after. * * Note that this function has not the same semantics as retry. The status of the CaptchaAuthentication * will change to Failed even if the channel supports retrying. This function should be called * only if the user refuses to answer any challenge. Instead, if the user wishes to retry, * you should just call requestCaptchas one more time. * * \param reason The reason why the challenge has been cancelled. * \param message A message detailing the cancel reason. * \return A PendingOperation which will emit PendingOperation::finished upon the outcome of the cancel procedure. * Upon success, the operation will complete once the channel is closed. * \sa requestCaptchas */ Tp::PendingOperation *CaptchaAuthentication::cancel(CaptchaCancelReason reason, const QString &message) { ChannelPtr serverAuthChannel = ChannelPtr(mPriv->channel); return new PendingCaptchaCancel(serverAuthChannel->interface()->CancelCaptcha( reason, message), CaptchaAuthenticationPtr(this)); } void CaptchaAuthentication::onPropertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties) { Q_UNUSED(invalidatedProperties); if (changedProperties.contains(QLatin1String("CaptchaStatus"))) { mPriv->status = static_cast(changedProperties.value(QLatin1String("CaptchaStatus")).value()); emit statusChanged(mPriv->status); } if (changedProperties.contains(QLatin1String("CaptchaErrorDetails"))) { mPriv->errorDetails = changedProperties.value(QLatin1String("CaptchaErrorDetails")).toMap(); } if (changedProperties.contains(QLatin1String("CaptchaError"))) { mPriv->error = changedProperties.value(QLatin1String("CaptchaError")).toString(); } } /** * \fn void CaptchaAuthentication::statusChanged(Tp::CaptchaStatus status) * * Emitted when the value of status() changes. * * \sa status The new status of this CaptchaAuthentication. */ } // Tp telepathy-qt-0.9.3/TelepathyQt/SharedPtr0000644000175200001440000000035212000056607022477 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_SharedPtr_HEADER_GUARD_ #define _TelepathyQt_SharedPtr_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/CallStreamInterfaceMediaInterface0000644000175200001440000000043312000056607027234 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_CallStreamInterfaceMediaInterface_HEADER_GUARD_ #define _TelepathyQt_CallStreamInterfaceMediaInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/ConnectionCapabilities0000644000175200001440000000042112000056607025211 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ConnectionCapabilities_HEADER_GUARD_ #define _TelepathyQt_ConnectionCapabilities_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/outgoing-stream-tube-channel.h0000644000175200001440000000613712000056607026527 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010-2011 Collabora Ltd. * @license LGPL 2.1 * * 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 _TelepathyQt_outgoing_stream_tube_channel_h_HEADER_GUARD_ #define _TelepathyQt_outgoing_stream_tube_channel_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include class QHostAddress; class QTcpServer; class QLocalServer; namespace Tp { class TP_QT_EXPORT OutgoingStreamTubeChannel : public StreamTubeChannel { Q_OBJECT Q_DISABLE_COPY(OutgoingStreamTubeChannel) public: static const Feature FeatureCore; static OutgoingStreamTubeChannelPtr create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties); virtual ~OutgoingStreamTubeChannel(); PendingOperation *offerTcpSocket(const QHostAddress &address, quint16 port, const QVariantMap ¶meters = QVariantMap()); PendingOperation *offerTcpSocket(const QTcpServer *server, const QVariantMap ¶meters = QVariantMap()); PendingOperation *offerUnixSocket(const QString &socketAddress, const QVariantMap ¶meters = QVariantMap(), bool requireCredentials = false); PendingOperation *offerUnixSocket(const QLocalServer *server, const QVariantMap ¶meters = QVariantMap(), bool requireCredentials = false); QHash contactsForConnections() const; QHash, uint> connectionsForSourceAddresses() const; QHash connectionsForCredentials() const; protected: OutgoingStreamTubeChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature = OutgoingStreamTubeChannel::FeatureCore); private Q_SLOTS: TP_QT_NO_EXPORT void onNewRemoteConnection(uint contactId, const QDBusVariant ¶meter, uint connectionId); TP_QT_NO_EXPORT void onContactsRetrieved(const QUuid &uuid, const QList &contacts); TP_QT_NO_EXPORT void onConnectionClosed(uint connectionId, const QString &errorName, const QString &errorMessage); private: struct Private; friend struct PendingOpenTube; friend struct Private; Private *mPriv; }; } #endif telepathy-qt-0.9.3/TelepathyQt/contact-search-channel.h0000644000175200001440000000742612000056607025346 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_contact_search_channel_h_HEADER_GUARD_ #define _TelepathyQt_contact_search_channel_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include namespace Tp { class TP_QT_EXPORT ContactSearchChannel : public Channel { Q_OBJECT Q_DISABLE_COPY(ContactSearchChannel) public: static const Feature FeatureCore; class SearchStateChangeDetails { public: SearchStateChangeDetails(); SearchStateChangeDetails(const SearchStateChangeDetails &other); ~SearchStateChangeDetails(); bool isValid() const { return mPriv.constData() != 0; } SearchStateChangeDetails &operator=(const SearchStateChangeDetails &other); bool hasDebugMessage() const { return allDetails().contains(QLatin1String("debug-message")); } QString debugMessage() const { return qdbus_cast(allDetails().value(QLatin1String("debug-message"))); } QVariantMap allDetails() const; private: friend class ContactSearchChannel; TP_QT_NO_EXPORT SearchStateChangeDetails(const QVariantMap &details); struct Private; friend struct Private; QSharedDataPointer mPriv; }; typedef QHash SearchResult; static ContactSearchChannelPtr create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties); virtual ~ContactSearchChannel(); ChannelContactSearchState searchState() const; uint limit() const; QStringList availableSearchKeys() const; QString server() const; PendingOperation *search(const QString &searchKey, const QString &searchTerm); PendingOperation *search(const ContactSearchMap &searchTerms); void continueSearch(); void stopSearch(); Q_SIGNALS: void searchStateChanged(Tp::ChannelContactSearchState state, const QString &errorName, const Tp::ContactSearchChannel::SearchStateChangeDetails &details); void searchResultReceived(const Tp::ContactSearchChannel::SearchResult &result); protected: ContactSearchChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature); private Q_SLOTS: TP_QT_NO_EXPORT void gotProperties(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void gotSearchState(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void onSearchStateChanged(uint state, const QString &error, const QVariantMap &details); TP_QT_NO_EXPORT void onSearchResultReceived(const Tp::ContactSearchResultMap &result); TP_QT_NO_EXPORT void gotSearchResultContacts(Tp::PendingOperation *op); private: class PendingSearch; struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/request-temporary-handler-internal.cpp0000644000175200001440000001056112000056607030324 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include "TelepathyQt/request-temporary-handler-internal.h" #include "TelepathyQt/_gen/request-temporary-handler-internal.moc.hpp" #include "TelepathyQt/debug-internal.h" #include namespace Tp { SharedPtr RequestTemporaryHandler::create(const AccountPtr &account) { return SharedPtr(new RequestTemporaryHandler(account)); } RequestTemporaryHandler::RequestTemporaryHandler(const AccountPtr &account) : AbstractClient(), QObject(), AbstractClientHandler(ChannelClassSpecList(), AbstractClientHandler::Capabilities(), false), mAccount(account), mQueueChannelReceived(true), dbusHandlerInvoked(false) { } RequestTemporaryHandler::~RequestTemporaryHandler() { } void RequestTemporaryHandler::handleChannels( const MethodInvocationContextPtr<> &context, const AccountPtr &account, const ConnectionPtr &connection, const QList &channels, const QList &requestsSatisfied, const QDateTime &userActionTime, const HandlerInfo &handlerInfo) { Q_ASSERT(dbusHandlerInvoked); QString errorMessage; ChannelPtr oldChannel = channel(); if (channels.size() != 1 || requestsSatisfied.size() != 1) { errorMessage = QLatin1String("Only one channel and one channel request should be given " "to HandleChannels"); } else if (account != mAccount) { errorMessage = QLatin1String("Account received is not the same as the account which made " "the request"); } else if (oldChannel && oldChannel != channels.first()) { errorMessage = QLatin1String("Received a channel that is not the same as the first " "one received"); } if (!errorMessage.isEmpty()) { warning() << "Handling channel failed with" << TP_QT_ERROR_SERVICE_CONFUSED << ":" << errorMessage; // Only emit error if we didn't receive any channel yet. if (!oldChannel) { emit error(TP_QT_ERROR_SERVICE_CONFUSED, errorMessage); } context->setFinishedWithError(TP_QT_ERROR_SERVICE_CONFUSED, errorMessage); return; } ChannelRequestPtr channelRequest = requestsSatisfied.first(); if (!oldChannel) { mChannel = WeakPtr(channels.first()); emit channelReceived(channel(), userActionTime, channelRequest->hints()); } else { if (mQueueChannelReceived) { mChannelReceivedQueue.enqueue(qMakePair(userActionTime, channelRequest->hints())); } else { emit channelReceived(oldChannel, userActionTime, channelRequest->hints()); } } context->setFinished(); } void RequestTemporaryHandler::setQueueChannelReceived(bool queue) { mQueueChannelReceived = queue; if (!queue) { processChannelReceivedQueue(); } } void RequestTemporaryHandler::setDBusHandlerInvoked() { dbusHandlerInvoked = true; } void RequestTemporaryHandler::setDBusHandlerErrored(const QString &errorName, const QString &errorMessage) { Q_ASSERT(dbusHandlerInvoked); if (!channel()) { emit error(errorName, errorMessage); } } void RequestTemporaryHandler::processChannelReceivedQueue() { while (!mChannelReceivedQueue.isEmpty()) { QPair info = mChannelReceivedQueue.dequeue(); emit channelReceived(channel(), info.first, info.second); } } } // Tp telepathy-qt-0.9.3/TelepathyQt/channel-request.cpp0000644000175200001440000006715412000056607024477 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/cli-channel-request-body.hpp" #include "TelepathyQt/_gen/cli-channel-request.moc.hpp" #include "TelepathyQt/_gen/channel-request.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT ChannelRequest::Private { Private(ChannelRequest *parent, const QVariantMap &immutableProperties, const AccountFactoryConstPtr &, const ConnectionFactoryConstPtr &, const ChannelFactoryConstPtr &, const ContactFactoryConstPtr &); ~Private(); static void introspectMain(Private *self); // \param lastCall Is this the last call to extractMainProps ie. should actions that only must // be done once be done in this call void extractMainProps(const QVariantMap &props, bool lastCall); // Public object ChannelRequest *parent; // Context AccountFactoryConstPtr accFact; ConnectionFactoryConstPtr connFact; ChannelFactoryConstPtr chanFact; ContactFactoryConstPtr contactFact; // Instance of generated interface class Client::ChannelRequestInterface *baseInterface; // Mandatory properties interface proxy Client::DBus::PropertiesInterface *properties; QVariantMap immutableProperties; ReadinessHelper *readinessHelper; // Introspection AccountPtr account; QDateTime userActionTime; QString preferredHandler; QualifiedPropertyValueMapList requests; ChannelRequestHints hints; bool propertiesDone; bool gotSWC; ChannelPtr chan; }; ChannelRequest::Private::Private(ChannelRequest *parent, const QVariantMap &immutableProperties, const AccountFactoryConstPtr &accFact, const ConnectionFactoryConstPtr &connFact, const ChannelFactoryConstPtr &chanFact, const ContactFactoryConstPtr &contactFact) : parent(parent), accFact(accFact), connFact(connFact), chanFact(chanFact), contactFact(contactFact), baseInterface(new Client::ChannelRequestInterface(parent)), properties(parent->interface()), immutableProperties(immutableProperties), readinessHelper(parent->readinessHelper()), propertiesDone(false), gotSWC(false) { debug() << "Creating new ChannelRequest:" << parent->objectPath(); parent->connect(baseInterface, SIGNAL(Failed(QString,QString)), SIGNAL(failed(QString,QString))); parent->connect(baseInterface, SIGNAL(Succeeded()), SLOT(onLegacySucceeded())); parent->connect(baseInterface, SIGNAL(SucceededWithChannel(QDBusObjectPath,QVariantMap,QDBusObjectPath,QVariantMap)), SLOT(onSucceededWithChannel(QDBusObjectPath,QVariantMap,QDBusObjectPath,QVariantMap))); ReadinessHelper::Introspectables introspectables; // As ChannelRequest does not have predefined statuses let's simulate one (0) ReadinessHelper::Introspectable introspectableCore( QSet() << 0, // makesSenseForStatuses Features(), // dependsOnFeatures QStringList(), // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::introspectMain, this); introspectables[FeatureCore] = introspectableCore; readinessHelper->addIntrospectables(introspectables); // For early access to the immutable properties through the friendly getters - will be called // again with lastCall = true eventually, if/when becomeReady is called, though QVariantMap mainProps; foreach (QString key, immutableProperties.keys()) { // The key.count thing is so that we don't match "org.fdo.Tp.CR.OptionalInterface.Prop" too if (key.startsWith(TP_QT_IFACE_CHANNEL_REQUEST + QLatin1String(".")) && key.count(QLatin1Char('.')) == QString(TP_QT_IFACE_CHANNEL_REQUEST + QLatin1String(".")).count(QLatin1Char('.'))) { QVariant value = immutableProperties.value(key); mainProps.insert(key.remove(TP_QT_IFACE_CHANNEL_REQUEST + QLatin1String(".")), value); } } extractMainProps(mainProps, false); } ChannelRequest::Private::~Private() { } void ChannelRequest::Private::introspectMain(ChannelRequest::Private *self) { QVariantMap props; QString key; bool needIntrospectMainProps = false; const char *propertiesNames[] = { "Account", "UserActionTime", "PreferredHandler", "Requests", "Interfaces", NULL }; for (unsigned i = 0; propertiesNames[i] != NULL; ++i) { key = TP_QT_IFACE_CHANNEL_REQUEST + QLatin1String("."); key += QLatin1String(propertiesNames[i]); if (!self->immutableProperties.contains(key)) { needIntrospectMainProps = true; break; } props.insert(QLatin1String(propertiesNames[i]), self->immutableProperties[key]); } if (needIntrospectMainProps) { debug() << "Calling Properties::GetAll(ChannelRequest)"; QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( self->properties->GetAll(TP_QT_IFACE_CHANNEL_REQUEST), self->parent); // FIXME: This is a Qt bug fixed upstream, should be in the next Qt release. // We should not need to check watcher->isFinished() here, remove the // check when a fixed Qt version is released. if (watcher->isFinished()) { self->parent->gotMainProperties(watcher); } else { self->parent->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotMainProperties(QDBusPendingCallWatcher*))); } } else { self->extractMainProps(props, true); } } void ChannelRequest::Private::extractMainProps(const QVariantMap &props, bool lastCall) { PendingReady *readyOp = 0; if (props.contains(QLatin1String("Account"))) { QDBusObjectPath accountObjectPath = qdbus_cast(props.value(QLatin1String("Account"))); if (!account.isNull()) { if (accountObjectPath.path() == account->objectPath()) { // Most often a no-op, but we want this to guarantee the old behavior in all cases readyOp = account->becomeReady(); } else { warning() << "The account" << accountObjectPath.path() << "was not the expected" << account->objectPath() << "for CR" << parent->objectPath(); // Construct a new one instead account.reset(); } } // We need to check again because we might have dropped the expected account just a sec ago if (account.isNull() && !accountObjectPath.path().isEmpty()) { if (!accFact.isNull()) { readyOp = accFact->proxy( TP_QT_ACCOUNT_MANAGER_BUS_NAME, accountObjectPath.path(), connFact, chanFact, contactFact); account = AccountPtr::qObjectCast(readyOp->proxy()); } else { account = Account::create( TP_QT_ACCOUNT_MANAGER_BUS_NAME, accountObjectPath.path(), connFact, chanFact, contactFact); readyOp = account->becomeReady(); } } } // FIXME See http://bugs.freedesktop.org/show_bug.cgi?id=21690 uint stamp = (uint) qdbus_cast(props.value(QLatin1String("UserActionTime"))); if (stamp != 0) { userActionTime = QDateTime::fromTime_t(stamp); } preferredHandler = qdbus_cast(props.value(QLatin1String("PreferredHandler"))); requests = qdbus_cast(props.value(QLatin1String("Requests"))); parent->setInterfaces(qdbus_cast(props[QLatin1String("Interfaces")])); readinessHelper->setInterfaces(parent->interfaces()); if (props.contains(QLatin1String("Hints"))) { hints = qdbus_cast(props.value(QLatin1String("Hints"))); } if (lastCall) { propertiesDone = true; } if (account) { parent->connect(readyOp, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onAccountReady(Tp::PendingOperation*))); } else if (lastCall) { warning() << "No account for ChannelRequest" << parent->objectPath(); readinessHelper->setIntrospectCompleted(FeatureCore, true); } } /** * \class ChannelRequest * \ingroup clientchannelrequest * \headerfile TelepathyQt/channel-request.h * * \brief The ChannelRequest class represents a Telepathy channel request. * * A channel request is an object in the channel dispatcher representing an * ongoing request for some channels to be created or found. There can be any * number of channel request objects at the same time. * * A channel request can be cancelled by any client (not just the one that * requested it). This means that the channel dispatcher will close the * resulting channel, or refrain from requesting it at all, rather than * dispatching it to a handler. * * See \ref async_model */ /** * Feature representing the core that needs to become ready to make the * ChannelRequest object usable. * * Note that this feature must be enabled in order to use most * ChannelRequest methods. * * When calling isReady(), becomeReady(), this feature is implicitly added * to the requested features. */ const Feature ChannelRequest::FeatureCore = Feature(QLatin1String(ChannelRequest::staticMetaObject.className()), 0, true); /** * Create a new channel request object using the given \a bus and the given factories. * * \param objectPath The channel request object path. * \param immutableProperties The channel request immutable properties. * \param accountFactory The account factory to use. * \param connectionFactory The connection factory to use. * \param channelFactory The channel factory to use. * \param contactFactory The contact factory to use. * \return A ChannelRequestPtr object pointing to the newly created ChannelRequest object. */ ChannelRequestPtr ChannelRequest::create(const QDBusConnection &bus, const QString &objectPath, const QVariantMap &immutableProperties, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory) { return ChannelRequestPtr(new ChannelRequest(bus, objectPath, immutableProperties, accountFactory, connectionFactory, channelFactory, contactFactory)); } /** * Create a new channel request object for the given \a account. * * The returned instance will use factories from the account. * * \param account The account that the request was made through. * \param objectPath The channel request object path. * \param immutableProperties The channel request immutable properties. * \return A ChannelRequestPtr object pointing to the newly created ChannelRequest object. */ ChannelRequestPtr ChannelRequest::create(const AccountPtr &account, const QString &objectPath, const QVariantMap &immutableProperties) { return ChannelRequestPtr(new ChannelRequest(account, objectPath, immutableProperties)); } /** * Construct a new channel request object using the given \a bus and the given factories. * * \param bus QDBusConnection to use. * \param objectPath The channel request object path. * \param accountFactory The account factory to use. * \param connectionFactory The connection factory to use. * \param channelFactory The channel factory to use. * \param contactFactory The contact factory to use. * \param immutableProperties The immutable properties of the channel request. * \return A ChannelRequestPtr object pointing to the newly created ChannelRequest. */ ChannelRequest::ChannelRequest(const QDBusConnection &bus, const QString &objectPath, const QVariantMap &immutableProperties, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory) : StatefulDBusProxy(bus, TP_QT_IFACE_CHANNEL_DISPATCHER, objectPath, FeatureCore), OptionalInterfaceFactory(this), mPriv(new Private(this, immutableProperties, accountFactory, connectionFactory, channelFactory, contactFactory)) { if (accountFactory->dbusConnection().name() != bus.name()) { warning() << " The D-Bus connection in the account factory is not the proxy connection"; } if (connectionFactory->dbusConnection().name() != bus.name()) { warning() << " The D-Bus connection in the connection factory is not the proxy connection"; } if (channelFactory->dbusConnection().name() != bus.name()) { warning() << " The D-Bus connection in the channel factory is not the proxy connection"; } } /** * Construct a new channel request object using the given \a account. * * The constructed instance will use the factories from the account. * * \param account Account to use. * \param objectPath The channel request object path. * \param immutableProperties The immutable properties of the channel request. * \return A ChannelRequestPtr object pointing to the newly created ChannelRequest. */ ChannelRequest::ChannelRequest(const AccountPtr &account, const QString &objectPath, const QVariantMap &immutableProperties) : StatefulDBusProxy(account->dbusConnection(), TP_QT_IFACE_CHANNEL_DISPATCHER, objectPath, FeatureCore), OptionalInterfaceFactory(this), mPriv(new Private(this, immutableProperties, AccountFactoryPtr(), account->connectionFactory(), account->channelFactory(), account->contactFactory())) { mPriv->account = account; } /** * Class destructor. */ ChannelRequest::~ChannelRequest() { delete mPriv; } /** * Return the account on which this request was made. * * This method can be used even before the ChannelRequest is ready, in which case the account object * corresponding to the immutable properties is returned. In this case, the Account object is not * necessarily ready either. This is useful for eg. matching ChannelRequests from * ClientHandlerInterface::addRequest() with existing accounts in the application: either by object * path, or if account factories are in use, even by object identity. * * If the account is not provided in the immutable properties, this will only return a non-\c NULL * AccountPtr once ChannelRequest::FeatureCore is ready on this object. * * \return A pointer to the Account object. */ AccountPtr ChannelRequest::account() const { return mPriv->account; } /** * Return the time at which the user action occurred, or 0 if this channel * request is for some reason not involving user action. * * Unix developers: this corresponds to the _NET_WM_USER_TIME property in EWMH. * * This property is set when the channel request is created, and can never * change. * * This method can be used even before the ChannelRequest is ready: in this case, the user action * time from the immutable properties, if any, is returned. * * \return The time at which the user action occurred as QDateTime. */ QDateTime ChannelRequest::userActionTime() const { return mPriv->userActionTime; } /** * Return either the well-known bus name (starting with * org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, * or an empty string to indicate that any handler would be acceptable. * * This property is set when the channel request is created, and can never * change. * * This method can be used even before the ChannelRequest is ready: in this case, the preferred * handler from the immutable properties, if any, is returned. * * \return The preferred handler, or an empty string if any handler would be * acceptable. */ QString ChannelRequest::preferredHandler() const { return mPriv->preferredHandler; } /** * Return the desirable properties for the channel or channels to be created, as specified when * placing the request in the first place. * * This property is set when the channel request is created, and can never * change. * * This method can be used even before the ChannelRequest is ready: in this case, the requested * channel properties from the immutable properties, if any, are returned. This is useful for e.g. * matching ChannelRequests from ClientHandlerInterface::addRequest() with existing requests in the * application (by the target ID or handle, most likely). * * \return The requested desirable channel properties as a list of * QualifiedPropertyValueMap objects. */ QualifiedPropertyValueMapList ChannelRequest::requests() const { return mPriv->requests; } /** * Return the dictionary of metadata provided by the channel requester when requesting the channel. * * This property is set when the channel request is created, and can never change. * * This method can be used even before the ChannelRequest is ready: in this case, the requested * channel properties from the immutable properties, if any, are returned. This is useful for e.g. * matching ChannelRequests from ClientHandlerInterface::addRequest() with existing requests in the * application (by the target ID or handle, most likely). * * \sa Account::supportsRequestHints() * \return The hints in the request as a ChannelRequestHints object, if any. */ ChannelRequestHints ChannelRequest::hints() const { return mPriv->hints; } /** * Return all of the immutable properties passed to this object when created. * * This is useful for e.g. getting to domain-specific properties of channel requests. * * \return The immutable properties as QVariantMap. */ QVariantMap ChannelRequest::immutableProperties() const { QVariantMap props = mPriv->immutableProperties; if (!account().isNull()) { props.insert(TP_QT_IFACE_CHANNEL_REQUEST + QLatin1String(".Account"), QVariant::fromValue(QDBusObjectPath(account()->objectPath()))); } if (userActionTime().isValid()) { props.insert(TP_QT_IFACE_CHANNEL_REQUEST + QLatin1String(".UserActionTime"), QVariant::fromValue(userActionTime().toTime_t())); } if (!preferredHandler().isNull()) { props.insert(TP_QT_IFACE_CHANNEL_REQUEST + QLatin1String(".PreferredHandler"), preferredHandler()); } if (!requests().isEmpty()) { props.insert(TP_QT_IFACE_CHANNEL_REQUEST + QLatin1String(".Requests"), QVariant::fromValue(requests())); } props.insert(TP_QT_IFACE_CHANNEL_REQUEST + QLatin1String(".Interfaces"), QVariant::fromValue(interfaces())); return props; } /** * Cancel the channel request. * * If failed() is emitted in response to this method, the error will be * #TP_QT_ERROR_CANCELLED. * * If the channel has already been dispatched to a handler, then it's too late * to call this method, and the channel request will no longer exist. * * \return A PendingOperation which will emit PendingOperation::finished * when the call has finished. */ PendingOperation *ChannelRequest::cancel() { return new PendingVoid(mPriv->baseInterface->Cancel(), ChannelRequestPtr(this)); } /** * Return the Channel which this request succeeded with, if any. * * This will only ever be populated if Account::requestsSucceedWithChannel() is \c true, and * succeeded() has already been emitted on this ChannelRequest. Note that a PendingChannelRequest * being successfully finished already implies succeeded() has been emitted. * * \return A pointer to the Channel object, or a null ChannelPtr if there isn't any. */ ChannelPtr ChannelRequest::channel() const { return mPriv->chan; } /** * Proceed with the channel request. * * The client that created this object calls this method when it has connected * signal handlers for succeeded() and failed(). Note that this is done * automatically when using PendingChannelRequest. * * \return A PendingOperation which will emit PendingOperation::finished * when the call has finished. */ PendingOperation *ChannelRequest::proceed() { return new PendingVoid(mPriv->baseInterface->Proceed(), ChannelRequestPtr(this)); } /** * Return the ChannelRequestInterface for this ChannelRequest class. This method is * protected since the convenience methods provided by this class should * always be used instead of the interface by users of the class. * * \return A pointer to the existing Client::ChannelRequestInterface object for this * ChannelRequest object. */ Client::ChannelRequestInterface *ChannelRequest::baseInterface() const { return mPriv->baseInterface; } void ChannelRequest::gotMainProperties(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; QVariantMap props; if (!reply.isError()) { debug() << "Got reply to Properties::GetAll(ChannelRequest)"; props = reply.value(); mPriv->extractMainProps(props, true); } else { mPriv->readinessHelper->setIntrospectCompleted(FeatureCore, false, reply.error()); warning().nospace() << "Properties::GetAll(ChannelRequest) failed with " << reply.error().name() << ": " << reply.error().message(); } watcher->deleteLater(); } void ChannelRequest::onAccountReady(PendingOperation *op) { if (op->isError()) { warning() << "Unable to make ChannelRequest.Account ready"; mPriv->readinessHelper->setIntrospectCompleted(FeatureCore, false, op->errorName(), op->errorMessage()); return; } if (mPriv->propertiesDone && !isReady()) { mPriv->readinessHelper->setIntrospectCompleted(FeatureCore, true); } } void ChannelRequest::onLegacySucceeded() { if (mPriv->gotSWC) { return; } emit succeeded(ChannelPtr()); } void ChannelRequest::onSucceededWithChannel( const QDBusObjectPath &connPath, const QVariantMap &connProps, const QDBusObjectPath &chanPath, const QVariantMap &chanProps) { if (mPriv->gotSWC) { warning().nospace() << "Got SucceededWithChannel again for CR(" << objectPath() << ")!"; return; } mPriv->gotSWC = true; QList readyOps; QString connBusName = connPath.path().mid(1).replace( QLatin1String("/"), QLatin1String(".")); PendingReady *connReady = mPriv->connFact->proxy(connBusName, connPath.path(), mPriv->chanFact, mPriv->contactFact); ConnectionPtr conn = ConnectionPtr::qObjectCast(connReady->proxy()); readyOps.append(connReady); PendingReady *chanReady = mPriv->chanFact->proxy(conn, chanPath.path(), chanProps); mPriv->chan = ChannelPtr::qObjectCast(chanReady->proxy()); readyOps.append(chanReady); connect(new PendingComposite(readyOps, ChannelRequestPtr(this)), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onChanBuilt(Tp::PendingOperation*))); } void ChannelRequest::onChanBuilt(Tp::PendingOperation *op) { if (op->isError()) { warning() << "Failed to build Channel which the ChannelRequest succeeded with," << "succeeding with NULL channel:" << op->errorName() << ',' << op->errorMessage(); mPriv->chan.reset(); } emit succeeded(mPriv->chan); } /** * \fn void ChannelRequest::failed(const QString &errorName, * const QString &errorMessage) * * Emitted when the channel request has failed. No further * methods must not be called on it. * * \param errorName The name of a D-Bus error. * \param errorMessage The error message. * \sa succeeded() */ /** * \fn void ChannelRequest::succeeded(const Tp::ChannelPtr &channel) * * Emitted when the channel request has succeeded. No further * methods must not be called on it. * * The \a channel parameter can be used to observe the channel resulting from the request (e.g. for * it getting closed). The pointer may be NULL if the Channel Dispatcher implementation is too old. * Whether a non-NULL channel can be expected can be checked with * Account::requestsSucceedWithChannel(). * * If there is a channel, it will be of the subclass determined by and made ready (or not) according * to the settings of the ChannelFactory on the Account the request was made through. * * \param channel Pointer to a proxy for the resulting channel, if the Channel Dispatcher reported it. * \sa failed() */ /** * \class ChannelRequestHints * \ingroup clientchannelrequest * \headerfile TelepathyQt/channel-request.h * * \brief The ChannelRequestHints class represents a dictionary of metadata * provided by the channel requester when requesting a channel. */ struct TP_QT_NO_EXPORT ChannelRequestHints::Private : public QSharedData { Private() {} Private(const QVariantMap &hints) : hints(hints) {} QVariantMap hints; }; ChannelRequestHints::ChannelRequestHints() { } ChannelRequestHints::ChannelRequestHints(const QVariantMap &hints) : mPriv(new Private(hints)) { } ChannelRequestHints::ChannelRequestHints(const ChannelRequestHints &crh) : mPriv(crh.mPriv) { } ChannelRequestHints::~ChannelRequestHints() { } ChannelRequestHints &ChannelRequestHints::operator=(const ChannelRequestHints &other) { if (this == &other) { return *this; } this->mPriv = other.mPriv; return *this; } bool ChannelRequestHints::isValid() const { return mPriv.constData() != 0; } bool ChannelRequestHints::hasHint(const QString &reversedDomain, const QString &localName) const { if (!isValid()) { return false; } const QString qualifiedName = reversedDomain + QLatin1Char('.') + localName; return mPriv->hints.contains(qualifiedName); } QVariant ChannelRequestHints::hint(const QString &reversedDomain, const QString &localName) const { if (!isValid()) { return QVariant(); } const QString qualifiedName = reversedDomain + QLatin1Char('.') + localName; return mPriv->hints.value(qualifiedName); } void ChannelRequestHints::setHint(const QString &reversedDomain, const QString &localName, const QVariant &value) { const QString qualifiedName = reversedDomain + QLatin1Char('.') + localName; if (!isValid()) { mPriv = new Private(); } mPriv->hints.insert(qualifiedName, value); } QVariantMap ChannelRequestHints::allHints() const { return isValid() ? mPriv->hints : QVariantMap(); } } // Tp telepathy-qt-0.9.3/TelepathyQt/stream-tube-server-internal.h0000644000175200001440000000355712000056607026411 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include namespace Tp { class TP_QT_NO_EXPORT StreamTubeServer::TubeWrapper : public QObject { Q_OBJECT Q_DISABLE_COPY(TubeWrapper) public: TubeWrapper(const AccountPtr &acc, const OutgoingStreamTubeChannelPtr &tube, const QHostAddress &exportedAddr, quint16 exportedPort, const QVariantMap ¶ms, StreamTubeServer *parent); ~TubeWrapper() { } AccountPtr mAcc; OutgoingStreamTubeChannelPtr mTube; Q_SIGNALS: void offerFinished(TubeWrapper *wrapper, Tp::PendingOperation *op); void newConnection(TubeWrapper *wrapper, uint conn); void connectionClosed(TubeWrapper *wrapper, uint conn, const QString &error, const QString &message); private Q_SLOTS: void onTubeOffered(Tp::PendingOperation *); void onNewConnection(uint); void onConnectionClosed(uint, const QString &, const QString &); }; } // Tp telepathy-qt-0.9.3/TelepathyQt/ConnectionInterfacePowerSavingInterface0000644000175200001440000000044612000056607030535 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ConnectionInterfacePowerSavingInterface_HEADER_GUARD_ #define _TelepathyQt_ConnectionInterfacePowerSavingInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/account-manager.cpp0000644000175200001440000012234012000056607024432 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2010 Collabora Ltd. * @copyright Copyright (C) 2008-2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/account-manager.moc.hpp" #include "TelepathyQt/_gen/cli-account-manager.moc.hpp" #include "TelepathyQt/_gen/cli-account-manager-body.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include #include #include #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT AccountManager::Private { Private(AccountManager *parent, const AccountFactoryConstPtr &accFactory, const ConnectionFactoryConstPtr &connFactory, const ChannelFactoryConstPtr &chanFactory, const ContactFactoryConstPtr &contactFactory); ~Private(); void init(); static void introspectMain(Private *self); void checkIntrospectionCompleted(); QSet getAccountPathsFromProp(const QVariant &prop); QSet getAccountPathsFromProps(const QVariantMap &props); void addAccountForPath(const QString &accountObjectPath); // Public object AccountManager *parent; // Instance of generated interface class Client::AccountManagerInterface *baseInterface; // Mandatory properties interface proxy Client::DBus::PropertiesInterface *properties; ReadinessHelper *readinessHelper; AccountFactoryConstPtr accFactory; ConnectionFactoryConstPtr connFactory; ChannelFactoryConstPtr chanFactory; ContactFactoryConstPtr contactFactory; // Introspection int reintrospectionRetries; bool gotInitialAccounts; QHash incompleteAccounts; QHash accounts; QStringList supportedAccountProperties; }; static const int maxReintrospectionRetries = 5; static const int reintrospectionRetryInterval = 3; AccountManager::Private::Private(AccountManager *parent, const AccountFactoryConstPtr &accFactory, const ConnectionFactoryConstPtr &connFactory, const ChannelFactoryConstPtr &chanFactory, const ContactFactoryConstPtr &contactFactory) : parent(parent), baseInterface(new Client::AccountManagerInterface(parent)), properties(parent->interface()), readinessHelper(parent->readinessHelper()), accFactory(accFactory), connFactory(connFactory), chanFactory(chanFactory), contactFactory(contactFactory), reintrospectionRetries(0), gotInitialAccounts(false) { debug() << "Creating new AccountManager:" << parent->busName(); if (accFactory->dbusConnection().name() != parent->dbusConnection().name()) { warning() << " The D-Bus connection in the account factory is not the proxy connection"; } if (connFactory->dbusConnection().name() != parent->dbusConnection().name()) { warning() << " The D-Bus connection in the connection factory is not the proxy connection"; } if (chanFactory->dbusConnection().name() != parent->dbusConnection().name()) { warning() << " The D-Bus connection in the channel factory is not the proxy connection"; } ReadinessHelper::Introspectables introspectables; // As AccountManager does not have predefined statuses let's simulate one (0) ReadinessHelper::Introspectable introspectableCore( QSet() << 0, // makesSenseForStatuses Features(), // dependsOnFeatures QStringList(), // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::introspectMain, this); introspectables[FeatureCore] = introspectableCore; readinessHelper->addIntrospectables(introspectables); readinessHelper->becomeReady(Features() << FeatureCore); init(); } AccountManager::Private::~Private() { delete baseInterface; } void AccountManager::Private::init() { if (!parent->isValid()) { return; } parent->connect(baseInterface, SIGNAL(AccountValidityChanged(QDBusObjectPath,bool)), SLOT(onAccountValidityChanged(QDBusObjectPath,bool))); parent->connect(baseInterface, SIGNAL(AccountRemoved(QDBusObjectPath)), SLOT(onAccountRemoved(QDBusObjectPath))); } void AccountManager::Private::introspectMain(AccountManager::Private *self) { debug() << "Calling Properties::GetAll(AccountManager)"; QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( self->properties->GetAll( TP_QT_IFACE_ACCOUNT_MANAGER), self->parent); self->parent->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotMainProperties(QDBusPendingCallWatcher*))); } void AccountManager::Private::checkIntrospectionCompleted() { if (!parent->isReady(FeatureCore) && incompleteAccounts.size() == 0) { readinessHelper->setIntrospectCompleted(FeatureCore, true); } } QSet AccountManager::Private::getAccountPathsFromProp( const QVariant &prop) { QSet set; ObjectPathList paths = qdbus_cast(prop); if (paths.size() == 0) { /* maybe the AccountManager is buggy, like Mission Control * 5.0.beta45, and returns an array of strings rather than * an array of object paths? */ QStringList wronglyTypedPaths = qdbus_cast(prop); if (wronglyTypedPaths.size() > 0) { warning() << "AccountManager returned wrong type for" "Valid/InvalidAccounts (expected 'ao', got 'as'); " "working around it"; foreach (QString path, wronglyTypedPaths) { set << path; } } } else { foreach (const QDBusObjectPath &path, paths) { set << path.path(); } } return set; } QSet AccountManager::Private::getAccountPathsFromProps( const QVariantMap &props) { return getAccountPathsFromProp(props[QLatin1String("ValidAccounts")]).unite( getAccountPathsFromProp(props[QLatin1String("InvalidAccounts")])); } void AccountManager::Private::addAccountForPath(const QString &path) { // Also check incompleteAccounts, because otherwise we end up introspecting an account twice // when getting an AccountValidityChanged signal for a new account before we get the initial // introspection accounts list from the GetAll return (the GetAll return function // unconditionally calls addAccountForPath if (accounts.contains(path) || incompleteAccounts.contains(path)) { return; } PendingReady *readyOp = accFactory->proxy(parent->busName(), path, connFactory, chanFactory, contactFactory); AccountPtr account(AccountPtr::qObjectCast(readyOp->proxy())); Q_ASSERT(!account.isNull()); parent->connect(readyOp, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onAccountReady(Tp::PendingOperation*))); incompleteAccounts.insert(path, account); } /** * \class AccountManager * \ingroup clientam * \headerfile TelepathyQt/account-manager.h * * \brief The AccountManager class represents a Telepathy account manager. * * The remote object accessor functions on this object (allAccounts(), * validAccounts(), and so on) don't make any D-Bus calls; instead, they return/use * values cached from a previous introspection run. The introspection process * populates their values in the most efficient way possible based on what the * service implements. * * To avoid unnecessary D-Bus traffic, some accessors only return valid * information after AccountManager::FeatureCore has been enabled. * See the individual methods descriptions for more details. * * AccountManager features can be enabled by calling becomeReady() * with the desired set of features as an argument (currently only AccountManager::FeatureCore is * supported), and waiting for the resulting PendingOperation to finish. * * All accounts returned by AccountManager are guaranteed to have the features set in the * AccountFactory used by it ready. * * A signal is emitted to indicate that accounts are added. See newCreated() for more details. * * \section am_usage_sec Usage * * \subsection am_create_sec Creating an AccountManager object * * One way to create an AccountManager object is to just call the create method. * For example: * * \code AccountManagerPtr am = AccountManager::create(); \endcode * * An AccountManagerPtr object is returned, which will automatically keep * track of object lifetime. * * You can also provide a D-Bus connection as a QDBusConnection: * * \code AccountManagerPtr am = AccountManager::create(QDBusConnection::sessionBus()); \endcode * * \subsection am_ready_sec Making AccountManager ready to use * * An AccountManager object needs to become ready before usage, meaning that the * introspection process finished and the object accessors can be used. * * To make the object ready, use becomeReady() and wait for the * PendingOperation::finished() signal to be emitted. * * \code * * class MyClass : public QObject * { * QOBJECT * * public: * MyClass(QObject *parent = 0); * ~MyClass() { } * * private Q_SLOTS: * void onAccountManagerReady(Tp::PendingOperation*); * * private: * AccountManagerPtr mAM; * }; * * MyClass::MyClass(QObject *parent) * : QObject(parent) * mAM(AccountManager::create()) * { * connect(mAM->becomeReady(), * SIGNAL(finished(Tp::PendingOperation*)), * SLOT(onAccountManagerReady(Tp::PendingOperation*))); * } * * void MyClass::onAccountManagerReady(Tp::PendingOperation *op) * { * if (op->isError()) { * qWarning() << "Account manager cannot become ready:" << * op->errorName() << "-" << op->errorMessage(); * return; * } * * // AccountManager is now ready * qDebug() << "All accounts:"; * foreach (const Tp::AccountPtr &acc, mAM->allAccounts()) { * qDebug() << " path:" << acc->objectPath(); * } * } * * \endcode * * See \ref async_model, \ref shared_ptr */ /** * Feature representing the core that needs to become ready to make the * AccountManager object usable. * * Note that this feature must be enabled in order to use most AccountManager * methods. * * When calling isReady(), becomeReady(), this feature is implicitly added * to the requested features. */ const Feature AccountManager::FeatureCore = Feature(QLatin1String(AccountManager::staticMetaObject.className()), 0, true); /** * Create a new AccountManager object using the given \a bus. * * The instance will use an account factory creating Tp::Account objects with Account::FeatureCore * ready, a connection factory creating Tp::Connection objects with no features ready, a channel * factory creating stock Tp::Channel subclasses, as appropriate, with no features ready, and a * contact factory creating Tp::Contact objects with no features ready. * * \param bus QDBusConnection to use. * \return An AccountManagerPtr object pointing to the newly created * AccountManager object. */ AccountManagerPtr AccountManager::create(const QDBusConnection &bus) { return AccountManagerPtr(new AccountManager(bus, AccountFactory::create(bus, Account::FeatureCore), ConnectionFactory::create(bus), ChannelFactory::create(bus), ContactFactory::create(), AccountManager::FeatureCore)); } /** * Create a new AccountManager using QDBusConnection::sessionBus() and the given factories. * * The connection, channel and contact factories are passed to any Account objects created by this * account manager object. In fact, they're not used directly by AccountManager at all. * * A warning is printed if the factories are for a bus different from QDBusConnection::sessionBus(). * * \param accountFactory The account factory to use. * \param connectionFactory The connection factory to use. * \param channelFactory The channel factory to use. * \param contactFactory The contact factory to use. * \return An AccountManagerPtr object pointing to the newly created * AccountManager object. */ AccountManagerPtr AccountManager::create(const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory) { return AccountManagerPtr(new AccountManager(QDBusConnection::sessionBus(), accountFactory, connectionFactory, channelFactory, contactFactory, AccountManager::FeatureCore)); } /** * Create a new AccountManager using the given \a bus and the given factories. * * The connection, channel and contact factories are passed to any Account objects created by this * account manager object. In fact, they're not used directly by AccountManager at all. * * A warning is printed if the factories are not for \a bus. * * \param bus QDBusConnection to use. * \param accountFactory The account factory to use. * \param connectionFactory The connection factory to use. * \param channelFactory The channel factory to use. * \param contactFactory The contact factory to use. * \return An AccountManagerPtr object pointing to the newly created * AccountManager object. */ AccountManagerPtr AccountManager::create(const QDBusConnection &bus, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory) { return AccountManagerPtr(new AccountManager(bus, accountFactory, connectionFactory, channelFactory, contactFactory, AccountManager::FeatureCore)); } /** * Construct a new AccountManager object using the given \a bus and the given factories. * * The connection, channel and contact factories are passed to any Account objects created by this * account manager object. In fact, they're not used directly by AccountManager at all. * * A warning is printed if the factories are not for \a bus. * * \param bus QDBusConnection to use. * \param accountFactory The account factory to use. * \param connectionFactory The connection factory to use. * \param channelFactory The channel factory to use. * \param contactFactory The contact factory to use. * \param coreFeature The core feature of the Account subclass. The corresponding introspectable * should depend on AccountManager::FeatureCore. */ AccountManager::AccountManager(const QDBusConnection &bus, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory, const Feature &coreFeature) : StatelessDBusProxy(bus, TP_QT_ACCOUNT_MANAGER_BUS_NAME, TP_QT_ACCOUNT_MANAGER_OBJECT_PATH, coreFeature), OptionalInterfaceFactory(this), mPriv(new Private(this, accountFactory, connectionFactory, channelFactory, contactFactory)) { } /** * Class destructor. */ AccountManager::~AccountManager() { delete mPriv; } /** * Return the account factory used by this account manager. * * Only read access is provided. This allows constructing object instances and examining the object * construction settings, but not changing settings. Allowing changes would lead to tricky * situations where objects constructed at different times by the manager would have unpredictably * different construction settings (eg. subclass). * * \return A read-only pointer to the AccountFactory object. */ AccountFactoryConstPtr AccountManager::accountFactory() const { return mPriv->accFactory; } /** * Return the connection factory used by this account manager. * * Only read access is provided. This allows constructing object instances and examining the object * construction settings, but not changing settings. Allowing changes would lead to tricky * situations where objects constructed at different times by the manager would have unpredictably * different construction settings (eg. subclass). * * \return A read-only pointer to the ConnectionFactory object. */ ConnectionFactoryConstPtr AccountManager::connectionFactory() const { return mPriv->connFactory; } /** * Return the channel factory used by this account manager. * * Only read access is provided. This allows constructing object instances and examining the object * construction settings, but not changing settings. Allowing changes would lead to tricky * situations where objects constructed at different times by the manager would have unpredictably * different construction settings (eg. subclass). * * \return A read-only pointer to the ChannelFactory object. */ ChannelFactoryConstPtr AccountManager::channelFactory() const { return mPriv->chanFactory; } /** * Return the contact factory used by this account manager. * * Only read access is provided. This allows constructing object instances and examining the object * construction settings, but not changing settings. Allowing changes would lead to tricky * situations where objects constructed at different times by the manager would have unpredictably * different construction settings (eg. subclass). * * \return A read-only pointer to the ContactFactory object. */ ContactFactoryConstPtr AccountManager::contactFactory() const { return mPriv->contactFactory; } /** * Return a list containing all accounts. * * Newly accounts added and/or discovered are signaled via newAccount(). * * This method requires AccountManager::FeatureCore to be ready. * * \return A list of pointers to Account objects. */ QList AccountManager::allAccounts() const { QList ret; foreach (const AccountPtr &account, mPriv->accounts) { ret << account; } return ret; } /** * Return a set of accounts containing all valid accounts. * * This method requires AccountManager::FeatureCore to be ready. * * \return A pointer to an AccountSet object containing the matching accounts. */ AccountSetPtr AccountManager::validAccounts() const { QVariantMap filter; filter.insert(QLatin1String("valid"), true); return filterAccounts(filter); } /** * Return a set of accounts containing all invalid accounts. * * This method requires AccountManager::FeatureCore to be ready. * * \return A pointer to an AccountSet object containing the matching accounts. */ AccountSetPtr AccountManager::invalidAccounts() const { QVariantMap filter; filter.insert(QLatin1String("valid"), false); return filterAccounts(filter); } /** * Return a set of accounts containing all enabled accounts. * * This method requires AccountManager::FeatureCore to be ready. * * \return A pointer to an AccountSet object containing the matching accounts. */ AccountSetPtr AccountManager::enabledAccounts() const { QVariantMap filter; filter.insert(QLatin1String("enabled"), true); return filterAccounts(filter); } /** * Return a set of accounts containing all disabled accounts. * * This method requires AccountManager::FeatureCore to be ready. * * \return A pointer to an AccountSet object containing the matching accounts. */ AccountSetPtr AccountManager::disabledAccounts() const { QVariantMap filter; filter.insert(QLatin1String("enabled"), false); return filterAccounts(filter); } /** * Return a set of accounts containing all online accounts. * * This method requires AccountManager::FeatureCore to be ready. * * \return A pointer to an AccountSet object containing the matching accounts. */ AccountSetPtr AccountManager::onlineAccounts() const { QVariantMap filter; filter.insert(QLatin1String("online"), true); return filterAccounts(filter); } /** * Return a set of accounts containing all offline accounts. * * This method requires AccountManager::FeatureCore to be ready. * * \return A pointer to an AccountSet object containing the matching accounts. */ AccountSetPtr AccountManager::offlineAccounts() const { QVariantMap filter; filter.insert(QLatin1String("online"), false); return filterAccounts(filter); } /** * Return a set of accounts containing all accounts that support text chats by * providing a contact identifier. * * For this method to work, you must use an AccountFactory which makes Account::FeatureCapabilities * ready. * * This method requires AccountManager::FeatureCore to be ready. * * \return A pointer to an AccountSet object containing the matching accounts. */ AccountSetPtr AccountManager::textChatAccounts() const { if (!accountFactory()->features().contains(Account::FeatureCapabilities)) { warning() << "Account filtering by capabilities can only be used with an AccountFactory" << "which makes Account::FeatureCapabilities ready"; return filterAccounts(AccountFilterConstPtr()); } AccountCapabilityFilterPtr filter = AccountCapabilityFilter::create(); filter->addRequestableChannelClassSubset(RequestableChannelClassSpec::textChat()); return filterAccounts(filter); } /** * Return a set of accounts containing all accounts that support text chat * rooms. * * For this method to work, you must use an AccountFactory which makes Account::FeatureCapabilities * ready. * * This method requires AccountManager::FeatureCore to be ready. * * \return A pointer to an AccountSet object containing the matching accounts. */ AccountSetPtr AccountManager::textChatroomAccounts() const { if (!accountFactory()->features().contains(Account::FeatureCapabilities)) { warning() << "Account filtering by capabilities can only be used with an AccountFactory" << "which makes Account::FeatureCapabilities ready"; return filterAccounts(AccountFilterConstPtr()); } AccountCapabilityFilterPtr filter = AccountCapabilityFilter::create(); filter->addRequestableChannelClassSubset(RequestableChannelClassSpec::textChatroom()); return filterAccounts(filter); } /** * Return a set of accounts containing all accounts that support audio calls (using the * Call interface) by providing a contact identifier. * * For this method to work, you must use an AccountFactory which makes Account::FeatureCapabilities * ready. * * This method requires AccountManager::FeatureCore to be ready. * * \return A pointer to an AccountSet object containing the matching accounts. */ AccountSetPtr AccountManager::audioCallAccounts() const { if (!accountFactory()->features().contains(Account::FeatureCapabilities)) { warning() << "Account filtering by capabilities can only be used with an AccountFactory" << "which makes Account::FeatureCapabilities ready"; return filterAccounts(AccountFilterConstPtr()); } AccountCapabilityFilterPtr filter = AccountCapabilityFilter::create(); filter->addRequestableChannelClassSubset(RequestableChannelClassSpec::audioCall()); return filterAccounts(filter); } /** * Return a set of accounts containing all accounts that support video calls (using the * Call interface) by providing a contact identifier. * * For this method to work, you must use an AccountFactory which makes Account::FeatureCapabilities * ready. * * This method requires AccountManager::FeatureCore to be ready. * * \return A pointer to an AccountSet object containing the matching accounts. */ AccountSetPtr AccountManager::videoCallAccounts() const { if (!accountFactory()->features().contains(Account::FeatureCapabilities)) { warning() << "Account filtering by capabilities can only be used with an AccountFactory" << "which makes Account::FeatureCapabilities ready"; return filterAccounts(AccountFilterConstPtr()); } AccountCapabilityFilterPtr filter = AccountCapabilityFilter::create(); filter->addRequestableChannelClassSubset(RequestableChannelClassSpec::videoCall()); return filterAccounts(filter); } /** * Return a set of accounts containing all accounts that support media calls (using the * StreamedMedia interface) by providing a contact identifier. * * For this method to work, you must use an AccountFactory which makes Account::FeatureCapabilities * ready. * * This method requires AccountManager::FeatureCore to be ready. * * \return A pointer to an AccountSet object containing the matching accounts. */ AccountSetPtr AccountManager::streamedMediaCallAccounts() const { if (!accountFactory()->features().contains(Account::FeatureCapabilities)) { warning() << "Account filtering by capabilities can only be used with an AccountFactory" << "which makes Account::FeatureCapabilities ready"; return filterAccounts(AccountFilterConstPtr()); } AccountCapabilityFilterPtr filter = AccountCapabilityFilter::create(); filter->addRequestableChannelClassSubset(RequestableChannelClassSpec::streamedMediaCall()); return filterAccounts(filter); } /** * Return a set of accounts containing all accounts that support audio calls (using the * StreamedMedia interface) by providing a contact identifier. * * For this method to work, you must use an AccountFactory which makes Account::FeatureCapabilities * ready. * * This method requires AccountManager::FeatureCore to be ready. * * \return A pointer to an AccountSet object containing the matching accounts. */ AccountSetPtr AccountManager::streamedMediaAudioCallAccounts() const { if (!accountFactory()->features().contains(Account::FeatureCapabilities)) { warning() << "Account filtering by capabilities can only be used with an AccountFactory" << "which makes Account::FeatureCapabilities ready"; return filterAccounts(AccountFilterConstPtr()); } AccountCapabilityFilterPtr filter = AccountCapabilityFilter::create(); filter->addRequestableChannelClassSubset(RequestableChannelClassSpec::streamedMediaAudioCall()); return filterAccounts(filter); } /** * Return a set of accounts containing all accounts that support video calls (using the * StreamedMedia interface) by providing a contact identifier. * * For this method to work, you must use an AccountFactory which makes Account::FeatureCapabilities * ready. * * This method requires AccountManager::FeatureCore to be ready. * * \return A pointer to an AccountSet object containing the matching accounts. */ AccountSetPtr AccountManager::streamedMediaVideoCallAccounts() const { if (!accountFactory()->features().contains(Account::FeatureCapabilities)) { warning() << "Account filtering by capabilities can only be used with an AccountFactory" << "which makes Account::FeatureCapabilities ready"; return filterAccounts(AccountFilterConstPtr()); } AccountCapabilityFilterPtr filter = AccountCapabilityFilter::create(); filter->addRequestableChannelClassSubset(RequestableChannelClassSpec::streamedMediaVideoCall()); return filterAccounts(filter); } /** * Return a set of accounts containing all accounts that support video calls with audio (using the * StreamedMedia interface) by providing a contact identifier. * * For this method to work, you must use an AccountFactory which makes Account::FeatureCapabilities * ready. * * This method requires AccountManager::FeatureCore to be ready. * * \return A pointer to an AccountSet object containing the matching accounts. */ AccountSetPtr AccountManager::streamedMediaVideoCallWithAudioAccounts() const { if (!accountFactory()->features().contains(Account::FeatureCapabilities)) { warning() << "Account filtering by capabilities can only be used with an AccountFactory" << "which makes Account::FeatureCapabilities ready"; return filterAccounts(AccountFilterConstPtr()); } AccountCapabilityFilterPtr filter = AccountCapabilityFilter::create(); filter->addRequestableChannelClassSubset( RequestableChannelClassSpec::streamedMediaVideoCallWithAudio()); return filterAccounts(filter); } /** * Return a set of accounts containing all accounts that support file transfers by * providing a contact identifier. * * For this method to work, you must use an AccountFactory which makes Account::FeatureCapabilities * ready. * * This method requires AccountManager::FeatureCore to be ready. * * \return A pointer to an AccountSet object containing the matching accounts. */ AccountSetPtr AccountManager::fileTransferAccounts() const { if (!accountFactory()->features().contains(Account::FeatureCapabilities)) { warning() << "Account filtering by capabilities can only be used with an AccountFactory" << "which makes Account::FeatureCapabilities ready"; return filterAccounts(AccountFilterConstPtr()); } AccountCapabilityFilterPtr filter = AccountCapabilityFilter::create(); filter->addRequestableChannelClassSubset(RequestableChannelClassSpec::fileTransfer()); return filterAccounts(filter); } /** * Return a set of accounts containing all accounts for the given \a * protocolName. * * This method requires AccountManager::FeatureCore to be ready. * * \param protocolName The name of the protocol used to filter accounts. * \return A pointer to an AccountSet object containing the matching accounts. */ AccountSetPtr AccountManager::accountsByProtocol( const QString &protocolName) const { if (!isReady(FeatureCore)) { warning() << "Account filtering requires AccountManager to be ready"; return filterAccounts(AccountFilterConstPtr()); } QVariantMap filter; filter.insert(QLatin1String("protocolName"), protocolName); return filterAccounts(filter); } /** * Return a set of accounts containing all accounts that match the given \a * filter criteria. * * For AccountCapabilityFilter filtering, an AccountFactory which makes * Account::FeatureCapabilities ready must be used. * * See AccountSet documentation for more details. * * This method requires AccountManager::FeatureCore to be ready. * * \param filter The desired filter. * \return A pointer to an AccountSet object containing the matching accounts. */ AccountSetPtr AccountManager::filterAccounts(const AccountFilterConstPtr &filter) const { if (!isReady(FeatureCore)) { warning() << "Account filtering requires AccountManager to be ready"; return AccountSetPtr(new AccountSet(AccountManagerPtr( (AccountManager *) this), AccountFilterConstPtr())); } return AccountSetPtr(new AccountSet(AccountManagerPtr( (AccountManager *) this), filter)); } /** * Return a set of accounts containing all accounts that match the given \a * filter criteria. * * The \a filter is composed by Account property names and values as map items. * * The following example will return all jabber accounts that are enabled: * * \code * * void MyClass::init() * { * mAM = AccountManager::create(); * connect(mAM->becomeReady(), * SIGNAL(finished(Tp::PendingOperation*)), * SLOT(onAccountManagerReady(Tp::PendingOperation*))); * } * * void MyClass::onAccountManagerReady(Tp::PendingOperation *op) * { * if (op->isError()) { * qWarning() << "Account manager cannot become ready:" << * op->errorName() << "-" << op->errorMessage(); * return; * } * * QVariantMap filter; * filter.insert(QLatin1String("protocolName"), QLatin1String("jabber")); * filter.insert(QLatin1String("enabled"), true); * filteredAccountSet = mAM->filterAccounts(filter); * // connect to AccountSet::accountAdded/accountRemoved signals * QList accounts = filteredAccountSet->accounts(); * // do something with accounts * } * * \endcode * * See AccountSet documentation for more details. * * This method requires AccountManager::FeatureCore to be ready. * * \param filter The desired filter. * \return A pointer to an AccountSet object containing the matching accounts. */ AccountSetPtr AccountManager::filterAccounts(const QVariantMap &filter) const { if (!isReady(FeatureCore)) { warning() << "Account filtering requires AccountManager to be ready"; return AccountSetPtr(new AccountSet(AccountManagerPtr( (AccountManager *) this), QVariantMap())); } return AccountSetPtr(new AccountSet(AccountManagerPtr( (AccountManager *) this), filter)); } /** * Return the account for the given \a path. * * This method requires AccountManager::FeatureCore to be ready. * * \param path The account object path. * \return A pointer to an AccountSet object containing the matching accounts. * \sa allAccounts(), accountsForObjectPaths() */ AccountPtr AccountManager::accountForObjectPath(const QString &path) const { if (!isReady(FeatureCore)) { return AccountPtr(); } return mPriv->accounts.value(path); } /** * \deprecated See accountForObjectPath() */ AccountPtr AccountManager::accountForPath(const QString &path) const { return accountForObjectPath(path); } /** * Return a list of accounts for the given \a paths. * * The returned list will have one AccountPtr object for each given path. If * a given path is invalid the returned AccountPtr object will point to 0. * AccountPtr::isNull() will return true. * * This method requires AccountManager::FeatureCore to be ready. * * \param paths List of accounts object paths. * \return A list of pointers to Account objects for the given * \a paths. Null AccountPtr objects will be used as list elements for each invalid path. * \sa allAccounts(), accountForObjectPath() */ QList AccountManager::accountsForObjectPaths(const QStringList &paths) const { if (!isReady(FeatureCore)) { return QList(); } QList result; foreach (const QString &path, paths) { result << accountForObjectPath(path); } return result; } /** * \deprecated See accountsForObjectPaths() */ QList AccountManager::accountsForPaths(const QStringList &paths) const { return accountsForObjectPaths(paths); } /** * Return a list of the fully qualified names of properties that can be set * when calling createAccount(). * * \return A list of fully qualified D-Bus property names, * such as "org.freedesktop.Telepathy.Account.Enabled". * \sa createAccount() */ QStringList AccountManager::supportedAccountProperties() const { return mPriv->supportedAccountProperties; } /** * Create an account with the given parameters. * * The optional \a properties argument can be used to set any property listed in * supportedAccountProperties() at the time the account is created. * * \param connectionManager The name of the connection manager to create the account * for. * \param protocol The name of the protocol to create the account for. * \param displayName The account display name. * \param parameters The account parameters. * \param properties An optional map from fully qualified D-Bus property * names such as "org.freedesktop.Telepathy.Account.Enabled" * to their values. * \return A PendingAccount object which will emit PendingAccount::finished * when the account has been created of failed its creation process. * \sa supportedAccountProperties() */ PendingAccount *AccountManager::createAccount(const QString &connectionManager, const QString &protocol, const QString &displayName, const QVariantMap ¶meters, const QVariantMap &properties) { return new PendingAccount(AccountManagerPtr(this), connectionManager, protocol, displayName, parameters, properties); } /** * Return the Client::AccountManagerInterface interface proxy object for this * account manager. This method is protected since the convenience methods * provided by this class should generally be used instead of calling D-Bus * methods directly. * * \return A pointer to the existing Client::AccountManagerInterface object for * this AccountManager object. */ Client::AccountManagerInterface *AccountManager::baseInterface() const { return mPriv->baseInterface; } void AccountManager::introspectMain() { mPriv->introspectMain(mPriv); } void AccountManager::gotMainProperties(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; QVariantMap props; if (!reply.isError()) { mPriv->gotInitialAccounts = true; debug() << "Got reply to Properties.GetAll(AccountManager)"; props = reply.value(); if (props.contains(QLatin1String("Interfaces"))) { setInterfaces(qdbus_cast(props[QLatin1String("Interfaces")])); mPriv->readinessHelper->setInterfaces(interfaces()); } if (props.contains(QLatin1String("SupportedAccountProperties"))) { mPriv->supportedAccountProperties = qdbus_cast(props[QLatin1String("SupportedAccountProperties")]); } QSet paths = mPriv->getAccountPathsFromProps(props); foreach (const QString &path, paths) { mPriv->addAccountForPath(path); } mPriv->checkIntrospectionCompleted(); } else { if (mPriv->reintrospectionRetries++ < maxReintrospectionRetries) { int retryInterval = reintrospectionRetryInterval; if (reply.error().type() == QDBusError::TimedOut) { retryInterval = 0; } QTimer::singleShot(retryInterval, this, SLOT(introspectMain())); } else { warning() << "GetAll(AccountManager) failed with" << reply.error().name() << ":" << reply.error().message(); mPriv->readinessHelper->setIntrospectCompleted(FeatureCore, false, reply.error()); } } watcher->deleteLater(); } void AccountManager::onAccountReady(Tp::PendingOperation *op) { PendingReady *pr = qobject_cast(op); AccountPtr account(AccountPtr::qObjectCast(pr->proxy())); QString path = account->objectPath(); /* Some error occurred or the account was removed before become ready */ if (op->isError() || !mPriv->incompleteAccounts.contains(path)) { mPriv->incompleteAccounts.remove(path); mPriv->checkIntrospectionCompleted(); return; } mPriv->incompleteAccounts.remove(path); // We shouldn't end up here twice for the same account - that would also mean newAccount being // emitted twice for an account, and AccountSets getting confused as a result Q_ASSERT(!mPriv->accounts.contains(path)); mPriv->accounts.insert(path, account); if (isReady(FeatureCore)) { emit newAccount(account); } mPriv->checkIntrospectionCompleted(); } void AccountManager::onAccountValidityChanged(const QDBusObjectPath &objectPath, bool valid) { if (!mPriv->gotInitialAccounts) { return; } QString path = objectPath.path(); if (!mPriv->incompleteAccounts.contains(path) && !mPriv->accounts.contains(path)) { debug() << "New account" << path; mPriv->addAccountForPath(path); } } void AccountManager::onAccountRemoved(const QDBusObjectPath &objectPath) { if (!mPriv->gotInitialAccounts) { return; } QString path = objectPath.path(); /* the account is either in mPriv->incompleteAccounts or mPriv->accounts */ if (mPriv->accounts.contains(path)) { mPriv->accounts.remove(path); if (isReady(FeatureCore)) { debug() << "Account" << path << "removed"; } else { debug() << "Account" << path << "removed while the AM " "was not completely introspected"; } } else if (mPriv->incompleteAccounts.contains(path)) { mPriv->incompleteAccounts.remove(path); debug() << "Account" << path << "was removed, but it was " "not completely introspected, ignoring"; } else { debug() << "Got AccountRemoved for unknown account" << path << ", ignoring"; } } /** * \fn void AccountManager::newAccount(const Tp::AccountPtr &account) * * Emitted when a new account is created. * * The new \a account will have the features set in the AccountFactory used by this * account manager ready and the same connection, channel and contact factories as used by this * account manager. * * \param account The newly created account. */ } // Tp telepathy-qt-0.9.3/TelepathyQt/ChannelInterfaceSecurableInterface0000644000175200001440000000043112000056607027441 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelInterfaceSecurableInterface_HEADER_GUARD_ #define _TelepathyQt_ChannelInterfaceSecurableInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/referenced-handles.h0000644000175200001440000001303712000056607024553 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2009 Collabora Ltd. * @copyright Copyright (C) 2008-2009 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_referenced_handles_h_HEADER_GUARD_ #define _TelepathyQt_referenced_handles_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #ifndef QT_NO_STL # include #endif #include #include #include #include namespace Tp { class Connection; class TP_QT_EXPORT ReferencedHandles { public: typedef UIntList::const_iterator const_iterator; typedef UIntList::ConstIterator ConstIterator; typedef UIntList::const_pointer const_pointer; typedef UIntList::const_reference const_reference; typedef UIntList::difference_type difference_type; typedef UIntList::pointer pointer; typedef UIntList::reference reference; typedef UIntList::size_type size_type; typedef UIntList::value_type value_type; ReferencedHandles(); ReferencedHandles(const ReferencedHandles &other); ~ReferencedHandles(); ConnectionPtr connection() const; HandleType handleType() const; uint at(int i) const; inline uint back() const { return last(); } inline uint first() const { return at(0); } inline uint front() const { return first(); } inline uint last() const { return at(size() - 1); } uint value(int i, uint defaultValue = 0) const; const_iterator begin() const; inline const_iterator constBegin() const { return begin(); } inline const_iterator constEnd() const { return end(); } const_iterator end() const; bool contains(uint handle) const; int count(uint handle) const; inline int count() const { return size(); } inline bool empty() const { return isEmpty(); } inline bool endsWith(uint handle) const { return !isEmpty() && last() == handle; } int indexOf(uint handle, int from = 0) const; bool isEmpty() const; int lastIndexOf(uint handle, int from = -1) const; inline int length() const { return count(); } ReferencedHandles mid(int pos, int length = -1) const; int size() const; inline bool startsWith(uint handle) const { return !isEmpty() && first() == handle; } inline void append(const ReferencedHandles& another) { *this = *this + another; } void clear(); void move(int from, int to); inline void pop_back() { return removeLast(); } inline void pop_front() { return removeFirst(); } int removeAll(uint handle); void removeAt(int i); inline void removeFirst() { return removeAt(0); } inline void removeLast() { return removeAt(size() - 1); } bool removeOne(uint handle); void swap(int i, int j); uint takeAt(int i); inline uint takeFirst() { return takeAt(0); } inline uint takeLast() { return takeAt(size() - 1); } bool operator!=(const ReferencedHandles& another) const { return !(*this == another); } bool operator!=(const UIntList& another) const { return !(*this == another); } ReferencedHandles operator+(const ReferencedHandles& another) const; inline ReferencedHandles& operator+=(const ReferencedHandles& another) { return *this = (*this + another); } ReferencedHandles& operator<<(const ReferencedHandles& another) { return *this += another; } ReferencedHandles& operator=(const ReferencedHandles& another); bool operator==(const ReferencedHandles& another) const; bool operator==(const UIntList& list) const; inline uint operator[](int i) const { return at(i); } UIntList toList() const; inline QSet toSet() const { return toList().toSet(); } #ifndef QT_NO_STL inline std::list toStdList() const { return toList().toStdList(); } #endif inline QVector toVector() const { return toList().toVector(); } private: // For access to the "prime" constructor friend class ContactManager; friend class PendingContactAttributes; friend class PendingContacts; friend class PendingHandles; TP_QT_NO_EXPORT ReferencedHandles(const ConnectionPtr &connection, HandleType handleType, const UIntList& handles); struct Private; friend struct Private; QSharedDataPointer mPriv; }; typedef QListIterator ReferencedHandlesIterator; } // Tp Q_DECLARE_METATYPE(Tp::ReferencedHandles); #endif telepathy-qt-0.9.3/TelepathyQt/MessageContentPartList0000644000175200001440000000041612000056607025206 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_MessageContentPartList_HEADER_GUARD_ #define _TelepathyQt_MessageContentPartList_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/ConnectionManager0000644000175200001440000000040212000056607024171 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ConnectionManager_HEADER_GUARD_ #define _TelepathyQt_ConnectionManager_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/capabilities-base.h0000644000175200001440000000522712000056607024400 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009-2010 Collabora Ltd. * @copyright Copyright (C) 2009-2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_capabilities_base_h_HEADER_GUARD_ #define _TelepathyQt_capabilities_base_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include namespace Tp { class TP_QT_EXPORT CapabilitiesBase { public: CapabilitiesBase(); CapabilitiesBase(const CapabilitiesBase &other); virtual ~CapabilitiesBase(); CapabilitiesBase &operator=(const CapabilitiesBase &other); RequestableChannelClassSpecList allClassSpecs() const; bool isSpecificToContact() const; bool textChats() const; bool audioCalls() const; bool videoCalls() const; bool videoCallsWithAudio() const; bool upgradingCalls() const; TP_QT_DEPRECATED bool streamedMediaCalls() const; TP_QT_DEPRECATED bool streamedMediaAudioCalls() const; TP_QT_DEPRECATED bool streamedMediaVideoCalls() const; TP_QT_DEPRECATED bool streamedMediaVideoCallsWithAudio() const; TP_QT_DEPRECATED bool upgradingStreamedMediaCalls() const; bool fileTransfers() const; // later: FIXME TODO why not now? // QList fileTransfersRequireHash() const; protected: CapabilitiesBase(bool specificToContact); CapabilitiesBase(const RequestableChannelClassList &rccs, bool specificToContact); CapabilitiesBase(const RequestableChannelClassSpecList &rccSpecs, bool specificToContact); virtual void updateRequestableChannelClasses( const RequestableChannelClassList &rccs); private: friend class Connection; friend class Contact; struct Private; friend struct Private; QSharedDataPointer mPriv; }; } // Tp Q_DECLARE_METATYPE(Tp::CapabilitiesBase); #endif telepathy-qt-0.9.3/TelepathyQt/pending-contact-attributes.h0000644000175200001440000000433212000056607026274 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008 Collabora Ltd. * @copyright Copyright (C) 2008 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_pending_contact_attributes_h_HEADER_GUARD_ #define _TelepathyQt_pending_contact_attributes_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include namespace Tp { class ReferencedHandles; class TP_QT_EXPORT PendingContactAttributes : public PendingOperation { Q_OBJECT Q_DISABLE_COPY(PendingContactAttributes) public: ~PendingContactAttributes(); ConnectionPtr connection() const; const UIntList &contactsRequested() const; const QStringList &interfacesRequested() const; bool shouldReference() const; ReferencedHandles validHandles() const; UIntList invalidHandles() const; ContactAttributesMap attributes() const; private Q_SLOTS: TP_QT_NO_EXPORT void onCallFinished(QDBusPendingCallWatcher *watcher); private: friend class ConnectionLowlevel; TP_QT_NO_EXPORT PendingContactAttributes(const ConnectionPtr &connection, const UIntList &handles, const QStringList &interfaces, bool reference); TP_QT_NO_EXPORT void failImmediately(const QString &error, const QString &errorMessage); struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/contact.h0000644000175200001440000001776312000056607022502 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2010 Collabora Ltd. * @copyright Copyright (C) 2008-2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_contact_h_HEADER_GUARD_ #define _TelepathyQt_contact_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include #include #include namespace Tp { struct AvatarData; class ContactCapabilities; class LocationInfo; class ContactManager; class PendingContactInfo; class PendingOperation; class PendingStringList; class Presence; class ReferencedHandles; class TP_QT_EXPORT Contact : public Object { Q_OBJECT Q_DISABLE_COPY(Contact) public: static const Feature FeatureAlias; static const Feature FeatureAvatarData; static const Feature FeatureAvatarToken; static const Feature FeatureCapabilities; static const Feature FeatureInfo; static const Feature FeatureLocation; static const Feature FeatureSimplePresence; static const Feature FeatureAddresses; static const Feature FeatureClientTypes; enum PresenceState { PresenceStateNo, PresenceStateAsk, PresenceStateYes }; class InfoFields { public: InfoFields(); InfoFields(const ContactInfoFieldList &fields); InfoFields(const InfoFields &other); ~InfoFields(); bool isValid() const { return mPriv.constData() != 0; } InfoFields &operator=(const InfoFields &other); ContactInfoFieldList fields(const QString &name) const; ContactInfoFieldList allFields() const; private: struct Private; friend struct Private; QSharedDataPointer mPriv; }; ~Contact(); ContactManagerPtr manager() const; ReferencedHandles handle() const; // TODO filter: exact, prefix, substring match QString id() const; Features requestedFeatures() const; Features actualFeatures() const; // TODO filter: exact, prefix, substring match QString alias() const; QMap vcardAddresses() const; QStringList uris() const; bool isAvatarTokenKnown() const; QString avatarToken() const; AvatarData avatarData() const; void requestAvatarData(); /* * TODO filter: * - exact match of presence().type(), presence().status() * - ANY 1 of a number of presence types/statuses * - presence().type() greater or less than a set value * - have/don't have presence().message() AND exact/prefix/substring */ Presence presence() const; // TODO filter: the same as Account filtering by caps ContactCapabilities capabilities() const; // TODO filter: is it available, how accurate, are they near me LocationInfo location() const; // TODO filter: having a specific field, having ANY field, // (field: exact, contents: exact/prefix/substring) bool isContactInfoKnown() const; InfoFields infoFields() const; PendingOperation *refreshInfo(); PendingContactInfo *requestInfo(); /* * Filters on exact values of these, but also the "in your contact list at all or not" usecase */ bool isSubscriptionStateKnown() const; bool isSubscriptionRejected() const; PresenceState subscriptionState() const; bool isPublishStateKnown() const; bool isPublishCancelled() const; PresenceState publishState() const; QString publishStateMessage() const; PendingOperation *requestPresenceSubscription(const QString &message = QString()); PendingOperation *removePresenceSubscription(const QString &message = QString()); PendingOperation *authorizePresencePublication(const QString &message = QString()); PendingOperation *removePresencePublication(const QString &message = QString()); /* * Filter on being blocked or not */ bool isBlocked() const; PendingOperation *block(); PendingOperation *blockAndReportAbuse(); PendingOperation *unblock(); /* * Filter on the groups they're in - to show a specific group only * * Also prefix/substring match on ANY of the groups of the contact */ QStringList groups() const; PendingOperation *addToGroup(const QString &group); PendingOperation *removeFromGroup(const QString &group); QStringList clientTypes() const; PendingStringList *requestClientTypes(); Q_SIGNALS: void aliasChanged(const QString &alias); void avatarTokenChanged(const QString &avatarToken); void avatarDataChanged(const Tp::AvatarData &avatarData); void presenceChanged(const Tp::Presence &presence); void capabilitiesChanged(const Tp::ContactCapabilities &caps); void locationUpdated(const Tp::LocationInfo &location); void infoFieldsChanged(const Tp::Contact::InfoFields &infoFields); void subscriptionStateChanged(Tp::Contact::PresenceState state); void publishStateChanged(Tp::Contact::PresenceState state, const QString &message); void blockStatusChanged(bool blocked); void addedToGroup(const QString &group); void removedFromGroup(const QString &group); void clientTypesChanged(const QStringList &clientTypes); // TODO: consider how the Renaming interface should work and map to Contacts // I guess it would be something like: // void renamedTo(Tp::ContactPtr) // with that contact getting the same features requested as the current one. Or would we rather // want to signal that change right away with a handle? protected: Contact(ContactManager *manager, const ReferencedHandles &handle, const Features &requestedFeatures, const QVariantMap &attributes); virtual void augment(const Features &requestedFeatures, const QVariantMap &attributes); private: static const Feature FeatureRosterGroups; TP_QT_NO_EXPORT void receiveAlias(const QString &alias); TP_QT_NO_EXPORT void receiveAvatarToken(const QString &avatarToken); TP_QT_NO_EXPORT void setAvatarToken(const QString &token); TP_QT_NO_EXPORT void receiveAvatarData(const AvatarData &); TP_QT_NO_EXPORT void receiveSimplePresence(const SimplePresence &presence); TP_QT_NO_EXPORT void receiveCapabilities(const RequestableChannelClassList &caps); TP_QT_NO_EXPORT void receiveLocation(const QVariantMap &location); TP_QT_NO_EXPORT void receiveInfo(const ContactInfoFieldList &info); TP_QT_NO_EXPORT void receiveAddresses(const QMap &addresses, const QStringList &uris); TP_QT_NO_EXPORT void receiveClientTypes(const QStringList &clientTypes); TP_QT_NO_EXPORT static PresenceState subscriptionStateToPresenceState(uint subscriptionState); TP_QT_NO_EXPORT void setSubscriptionState(SubscriptionState state); TP_QT_NO_EXPORT void setPublishState(SubscriptionState state, const QString &message = QString()); TP_QT_NO_EXPORT void setBlocked(bool value); TP_QT_NO_EXPORT void setAddedToGroup(const QString &group); TP_QT_NO_EXPORT void setRemovedFromGroup(const QString &group); struct Private; friend class Connection; friend class ContactFactory; friend class ContactManager; friend struct Private; Private *mPriv; }; } // Tp Q_DECLARE_METATYPE(Tp::Contact::InfoFields); #endif telepathy-qt-0.9.3/TelepathyQt/ChannelInterfaceSASLAuthenticationInterface0000644000175200001440000000045312000056607031202 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelInterfaceSASLAuthenticationInterface_HEADER_GUARD_ #define _TelepathyQt_ChannelInterfaceSASLAuthenticationInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/location-info.cpp0000644000175200001440000001206212000056607024126 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include namespace Tp { struct TP_QT_NO_EXPORT LocationInfo::Private : public QSharedData { QVariantMap location; }; /** * \class LocationInfo * \ingroup clientconn * \headerfile TelepathyQt/location-info.h * * \brief The LocationInfo class represents the location of a * Telepathy Contact. */ /** * Construct a new LocationInfo object. */ LocationInfo::LocationInfo() : mPriv(new Private) { } LocationInfo::LocationInfo(const QVariantMap &location) : mPriv(new Private) { mPriv->location = location; } LocationInfo::LocationInfo(const LocationInfo &other) : mPriv(other.mPriv) { } /** * Class destructor. */ LocationInfo::~LocationInfo() { } LocationInfo &LocationInfo::operator=(const LocationInfo &other) { this->mPriv = other.mPriv; return *this; } QString LocationInfo::countryCode() const { return qdbus_cast(mPriv->location.value( QLatin1String("countrycode"))); } QString LocationInfo::country() const { return qdbus_cast(mPriv->location.value( QLatin1String("country"))); } QString LocationInfo::region() const { return qdbus_cast(mPriv->location.value( QLatin1String("region"))); } QString LocationInfo::locality() const { return qdbus_cast(mPriv->location.value( QLatin1String("locality"))); } QString LocationInfo::area() const { return qdbus_cast(mPriv->location.value( QLatin1String("area"))); } QString LocationInfo::postalCode() const { return qdbus_cast(mPriv->location.value( QLatin1String("postalcode"))); } QString LocationInfo::street() const { return qdbus_cast(mPriv->location.value( QLatin1String("street"))); } QString LocationInfo::building() const { return qdbus_cast(mPriv->location.value( QLatin1String("building"))); } QString LocationInfo::floor() const { return qdbus_cast(mPriv->location.value( QLatin1String("floor"))); } QString LocationInfo::room() const { return qdbus_cast(mPriv->location.value( QLatin1String("room"))); } QString LocationInfo::text() const { return qdbus_cast(mPriv->location.value( QLatin1String("text"))); } QString LocationInfo::description() const { return qdbus_cast(mPriv->location.value( QLatin1String("description"))); } QString LocationInfo::uri() const { return qdbus_cast(mPriv->location.value( QLatin1String("uri"))); } QString LocationInfo::language() const { return qdbus_cast(mPriv->location.value( QLatin1String("language"))); } double LocationInfo::latitude() const { return qdbus_cast(mPriv->location.value( QLatin1String("lat"))); } double LocationInfo::longitude() const { return qdbus_cast(mPriv->location.value( QLatin1String("lon"))); } double LocationInfo::altitude() const { return qdbus_cast(mPriv->location.value( QLatin1String("alt"))); } double LocationInfo::accuracy() const { return qdbus_cast(mPriv->location.value( QLatin1String("accuracy"))); } double LocationInfo::speed() const { return qdbus_cast(mPriv->location.value( QLatin1String("speed"))); } double LocationInfo::bearing() const { return qdbus_cast(mPriv->location.value( QLatin1String("bearing"))); } QDateTime LocationInfo::timestamp() const { // FIXME See http://bugs.freedesktop.org/show_bug.cgi?id=21690 qlonglong t = qdbus_cast(mPriv->location.value( QLatin1String("timestamp"))); if (t != 0) { return QDateTime::fromTime_t((uint) t); } return QDateTime(); } QVariantMap LocationInfo::allDetails() const { return mPriv->location; } void LocationInfo::updateData(const QVariantMap &location) { if (!isValid()) { mPriv = new Private; } mPriv->location = location; } } // Tp telepathy-qt-0.9.3/TelepathyQt/presence.h0000644000175200001440000001326512000056607022644 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_presence_h_HEADER_GUARD_ #define _TelepathyQt_presence_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include namespace Tp { class TP_QT_EXPORT Presence { public: Presence(); Presence(const SimplePresence &sp); Presence(ConnectionPresenceType type, const QString &status, const QString &statusMessage); Presence(const Presence &other); ~Presence(); static Presence available(const QString &statusMessage = QString()); static Presence chat(const QString &statusMessage = QString()); static Presence away(const QString &statusMessage = QString()); static Presence brb(const QString &statusMessage = QString()); static Presence busy(const QString &statusMessage = QString()); static Presence dnd(const QString &statusMessage = QString()); static Presence xa(const QString &statusMessage = QString()); static Presence hidden(const QString &statusMessage = QString()); static Presence offline(const QString &statusMessage = QString()); bool isValid() const { return mPriv.constData() != 0; } Presence &operator=(const Presence &other); bool operator==(const Presence &other) const; bool operator!=(const Presence &other) const; ConnectionPresenceType type() const; QString status() const; QString statusMessage() const; void setStatus(const SimplePresence &value); void setStatus(ConnectionPresenceType type, const QString &status, const QString &statusMessage); void setStatusMessage(const QString &statusMessage); SimplePresence barePresence() const; private: struct Private; friend struct Private; QSharedDataPointer mPriv; }; class TP_QT_EXPORT PresenceSpec { public: enum SimpleStatusFlag { NoFlags = 0, MaySetOnSelf = 0x1, CanHaveStatusMessage = 0x2, AllFlags = MaySetOnSelf | CanHaveStatusMessage }; Q_DECLARE_FLAGS(SimpleStatusFlags, SimpleStatusFlag); PresenceSpec(); PresenceSpec(const QString &status, const SimpleStatusSpec &spec); PresenceSpec(const PresenceSpec &other); ~PresenceSpec(); static PresenceSpec available(SimpleStatusFlags flags = AllFlags); static PresenceSpec chat(SimpleStatusFlags flags = AllFlags); static PresenceSpec pstn(SimpleStatusFlags flags = CanHaveStatusMessage); static PresenceSpec away(SimpleStatusFlags flags = AllFlags); static PresenceSpec brb(SimpleStatusFlags flags = AllFlags); static PresenceSpec dnd(SimpleStatusFlags flags = AllFlags); static PresenceSpec busy(SimpleStatusFlags flags = AllFlags); static PresenceSpec xa(SimpleStatusFlags flags = AllFlags); static PresenceSpec hidden(SimpleStatusFlags flags = AllFlags); static PresenceSpec offline(SimpleStatusFlags flags = CanHaveStatusMessage); static PresenceSpec unknown(SimpleStatusFlags flags = CanHaveStatusMessage); static PresenceSpec error(SimpleStatusFlags flags = CanHaveStatusMessage); bool isValid() const { return mPriv.constData() != 0; } PresenceSpec &operator=(const PresenceSpec &other); bool operator==(const PresenceSpec &other) const; bool operator!=(const PresenceSpec &other) const; bool operator<(const PresenceSpec &other) const; Presence presence(const QString &statusMessage = QString()) const; bool maySetOnSelf() const; bool canHaveStatusMessage() const; SimpleStatusSpec bareSpec() const; private: struct Private; friend struct Private; QSharedDataPointer mPriv; }; class TP_QT_EXPORT PresenceSpecList : public QList { public: PresenceSpecList() { } PresenceSpecList(const SimpleStatusSpecMap &specMap) { SimpleStatusSpecMap::const_iterator i = specMap.constBegin(); SimpleStatusSpecMap::const_iterator end = specMap.end(); for (; i != end; ++i) { QString status = i.key(); SimpleStatusSpec spec = i.value(); append(PresenceSpec(status, spec)); } } PresenceSpecList(const QList &other) : QList(other) { } QMap toMap() const { QMap ret; Q_FOREACH (const PresenceSpec &spec, *this) { ret.insert(spec.presence().status(), spec); } return ret; } SimpleStatusSpecMap bareSpecs() const { SimpleStatusSpecMap ret; Q_FOREACH (const PresenceSpec &spec, *this) { ret.insert(spec.presence().status(), spec.bareSpec()); } return ret; } }; Q_DECLARE_OPERATORS_FOR_FLAGS(PresenceSpec::SimpleStatusFlags) } // Tp Q_DECLARE_METATYPE(Tp::Presence); Q_DECLARE_METATYPE(Tp::PresenceSpec); Q_DECLARE_METATYPE(Tp::PresenceSpecList); #endif telepathy-qt-0.9.3/TelepathyQt/AvatarData0000644000175200001440000000035012000056607022611 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_AvatarData_HEADER_GUARD_ #define _TelepathyQt_AvatarData_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/pending-contact-attributes.cpp0000644000175200001440000001576612000056607026644 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008 Collabora Ltd. * @copyright Copyright (C) 2008 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/pending-contact-attributes.moc.hpp" #include #include #include "TelepathyQt/debug-internal.h" namespace Tp { /** * \class PendingContactAttributes * \ingroup clientconn * \headerfile TelepathyQt/pending-contact-attributes.h * * \brief The PendingContactAttributes class represents the parameters of and * the reply to an asynchronous request for raw contact attributes, as used in * the ConnectionLowlevel::contactAttributes() low-level convenience method wrapping the * Client::ConnectionInterfaceContactsInterface::GetContactAttributes() D-Bus * method. * * See \ref async_model */ struct TP_QT_NO_EXPORT PendingContactAttributes::Private { UIntList contactsRequested; QStringList interfacesRequested; bool shouldReference; ReferencedHandles validHandles; UIntList invalidHandles; ContactAttributesMap attributes; }; PendingContactAttributes::PendingContactAttributes(const ConnectionPtr &connection, const UIntList &handles, const QStringList &interfaces, bool reference) : PendingOperation(connection), mPriv(new Private) { mPriv->contactsRequested = handles; mPriv->interfacesRequested = interfaces; mPriv->shouldReference = reference; } /** * Class destructor. */ PendingContactAttributes::~PendingContactAttributes() { delete mPriv; } /** * Return the connection through which the request was made. * * \return A pointer to the Connection object. */ ConnectionPtr PendingContactAttributes::connection() const { return ConnectionPtr(qobject_cast((Connection*) object().data())); } /** * Return the contacts for which attributes were requested. * * \return Reference to a list with the handles of the contacts. */ const UIntList &PendingContactAttributes::contactsRequested() const { return mPriv->contactsRequested; } /** * Return the interfaces the corresponding attributes of which were requested. * * \return Reference to a list of D-Bus interface names. */ const QStringList &PendingContactAttributes::interfacesRequested() const { return mPriv->interfacesRequested; } /** * Return whether it was requested that the contact handles should be referenced in addition to * fetching their attributes. This corresponds to the reference argument to * Connection::contactAttributes(). * * \return Whether the handles should be referenced or not. */ bool PendingContactAttributes::shouldReference() const { return mPriv->shouldReference; } /** * If referencing the handles was requested (as indicated by shouldReference()), returns the * now-referenced handles resulting from the operation. If the operation has not (yet) finished * successfully (isFinished() returns false), or referencing was not requested, the * return value is undefined. * * Even if referencing was requested, the list will not always contain all of the handles in * contactsRequested(), only the ones which were valid. The valid handles will be in the same order * as in contactsRequested(), though. * * \return ReferencedHandles instance containing the handles. */ ReferencedHandles PendingContactAttributes::validHandles() const { if (!isFinished()) { warning() << "PendingContactAttributes::validHandles() called before finished"; } else if (isError()) { warning() << "PendingContactAttributes::validHandles() called when errored"; } else if (!shouldReference()) { warning() << "PendingContactAttributes::validHandles() called but weren't asked to" << "reference handles"; } return mPriv->validHandles; } /** * Return the handles which were found to be invalid while processing the operation. If the * operation has not (yet) finished successfully (isFinished() returns false), the * return value is undefined. * * \return A list with the invalid handles. */ UIntList PendingContactAttributes::invalidHandles() const { if (!isFinished()) { warning() << "PendingContactAttributes::validHandles() called before finished"; } else if (isError()) { warning() << "PendingContactAttributes::validHandles() called when errored"; } return mPriv->invalidHandles; } /** * Return a dictionary mapping the valid contact handles in contactsRequested() (when also * referencing, this means the contents of validHandles()) to contact attributes. If the operation * has not (yet) finished successfully (isFinished() returns false), the return value * is undefined. * * \return Mapping from handles to variant maps containing the attributes. */ ContactAttributesMap PendingContactAttributes::attributes() const { if (!isFinished()) { warning() << "PendingContactAttributes::validHandles() called before finished"; } else if (isError()) { warning() << "PendingContactAttributes::validHandles() called when errored"; } return mPriv->attributes; } void PendingContactAttributes::onCallFinished(QDBusPendingCallWatcher* watcher) { QDBusPendingReply reply = *watcher; if (reply.isError()) { debug().nospace() << "GetCAs: error " << reply.error().name() << ": " << reply.error().message(); setFinishedWithError(reply.error()); } else { mPriv->attributes = reply.value(); UIntList validHandles; foreach (uint contact, mPriv->contactsRequested) { if (mPriv->attributes.contains(contact)) { validHandles << contact; } else { mPriv->invalidHandles << contact; } } if (shouldReference()) { mPriv->validHandles = ReferencedHandles(connection(), HandleTypeContact, validHandles); } setFinished(); } connection()->handleRequestLanded(HandleTypeContact); watcher->deleteLater(); } void PendingContactAttributes::failImmediately(const QString &error, const QString &errorMessage) { setFinishedWithError(error, errorMessage); } } // Tp telepathy-qt-0.9.3/TelepathyQt/ChannelInterfacePasswordInterface0000644000175200001440000000042712000056607027343 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelInterfacePasswordInterface_HEADER_GUARD_ #define _TelepathyQt_ChannelInterfacePasswordInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/ChannelClassFeatures0000644000175200001440000000041412000056607024637 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelClassFeatures_HEADER_GUARD_ #define _TelepathyQt_ChannelClassFeatures_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/readiness-helper.h0000644000175200001440000000753612000056607024276 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_readiness_helper_h_HEADER_GUARD_ #define _TelepathyQt_readiness_helper_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include #include class QDBusError; namespace Tp { class DBusProxy; class PendingOperation; class PendingReady; class RefCounted; class TP_QT_EXPORT ReadinessHelper : public QObject { Q_OBJECT Q_DISABLE_COPY(ReadinessHelper) public: typedef void (*IntrospectFunc)(void *data); struct Introspectable { public: Introspectable(); Introspectable(const QSet &makesSenseForStatuses, const Features &dependsOnFeatures, const QStringList &dependsOnInterfaces, IntrospectFunc introspectFunc, void *introspectFuncData, bool critical = false); Introspectable(const Introspectable &other); ~Introspectable(); Introspectable &operator=(const Introspectable &other); private: friend class ReadinessHelper; struct Private; friend struct Private; QSharedDataPointer mPriv; }; typedef QMap Introspectables; ReadinessHelper(RefCounted *object, uint currentStatus = 0, const Introspectables &introspectables = Introspectables(), QObject *parent = 0); ReadinessHelper(DBusProxy *proxy, uint currentStatus = 0, const Introspectables &introspectables = Introspectables(), QObject *parent = 0); ~ReadinessHelper(); void addIntrospectables(const Introspectables &introspectables); uint currentStatus() const; void setCurrentStatus(uint currentStatus); void forceCurrentStatus(uint currentStatus); QStringList interfaces() const; void setInterfaces(const QStringList &interfaces); Features requestedFeatures() const; Features actualFeatures() const; Features missingFeatures() const; bool isReady(const Feature &feature, QString *errorName = 0, QString *errorMessage = 0) const; bool isReady(const Features &features, QString *errorName = 0, QString *errorMessage = 0) const; PendingReady *becomeReady(const Features &requestedFeatures); void setIntrospectCompleted(const Feature &feature, bool success, const QString &errorName = QString(), const QString &errorMessage = QString()); void setIntrospectCompleted(const Feature &feature, bool success, const QDBusError &error); Q_SIGNALS: void statusReady(uint status); private Q_SLOTS: TP_QT_NO_EXPORT void iterateIntrospection(); TP_QT_NO_EXPORT void onProxyInvalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage); private: struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/simple-stream-tube-handler.h0000644000175200001440000000710612000056607026167 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_simple_stream_tube_handler_h_HEADER_GUARD_ #define _TelepathyQt_simple_stream_tube_handler_h_HEADER_GUARD_ #include #include #include #include #include #include #include #include #include namespace Tp { class PendingOperation; class TP_QT_NO_EXPORT SimpleStreamTubeHandler : public QObject, public AbstractClientHandler { Q_OBJECT Q_DISABLE_COPY(SimpleStreamTubeHandler) public: static SharedPtr create( const QStringList &p2pServices, const QStringList &roomServices, bool requested, bool monitorConnections, bool bypassApproval = false); ~SimpleStreamTubeHandler(); bool monitorsConnections() const { return mMonitorConnections; } bool bypassApproval() const { return mBypassApproval; } void handleChannels(const MethodInvocationContextPtr<> &context, const AccountPtr &account, const ConnectionPtr &connection, const QList &channels, const QList &requestsSatisfied, const QDateTime &userActionTime, const HandlerInfo &handlerInfo); Q_SIGNALS: void invokedForTube( const Tp::AccountPtr &account, const Tp::StreamTubeChannelPtr &tube, const QDateTime &userActionTime, const Tp::ChannelRequestHints &requestHints); void tubeInvalidated( const Tp::AccountPtr &account, const Tp::StreamTubeChannelPtr &tube, const QString &errorName, const QString &errorMessage); private Q_SLOTS: void onReadyOpFinished(Tp::PendingOperation *); void onTubeInvalidated(Tp::DBusProxy *, const QString &, const QString &); private: SimpleStreamTubeHandler( const QStringList &p2pServices, const QStringList &roomServices, bool requested, bool monitorConnections, bool bypassApproval); bool mMonitorConnections; struct InvocationData : RefCounted { InvocationData() : readyOp(0) {} PendingOperation *readyOp; QString error, message; MethodInvocationContextPtr<> ctx; AccountPtr acc; QList tubes; QDateTime time; ChannelRequestHints hints; }; QLinkedList > mInvocations; QHash mTubes; bool mBypassApproval; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/CallContentInterfaceVideoControlInterface0000644000175200001440000000045412000056607031006 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_CallContentInterfaceVideoControlInterface_HEADER_GUARD_ #define _TelepathyQt_CallContentInterfaceVideoControlInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/dbus-service.h0000644000175200001440000000501312000056607023423 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_dbus_service_h_HEADER_GUARD_ #define _TelepathyQt_dbus_service_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include #include #include class QDBusConnection; class QString; namespace Tp { class DBusObject; class TP_QT_EXPORT DBusService : public Object { Q_OBJECT Q_DISABLE_COPY(DBusService) public: DBusService(const QDBusConnection &dbusConnection); virtual ~DBusService(); virtual QVariantMap immutableProperties() const = 0; QDBusConnection dbusConnection() const; QString busName() const; QString objectPath() const; DBusObject *dbusObject() const; bool isRegistered() const; protected: virtual bool registerObject(const QString &busName, const QString &objectPath, DBusError *error); private: class Private; friend class Private; Private *mPriv; }; class TP_QT_EXPORT AbstractDBusServiceInterface : public Object { Q_OBJECT Q_DISABLE_COPY(AbstractDBusServiceInterface) public: AbstractDBusServiceInterface(const QString &interfaceName); virtual ~AbstractDBusServiceInterface(); QString interfaceName() const; virtual QVariantMap immutableProperties() const = 0; DBusObject *dbusObject() const; bool isRegistered() const; protected: virtual bool registerInterface(DBusObject *dbusObject); virtual void createAdaptor() = 0; private: class Private; friend class Private; Private *mPriv; }; } #endif telepathy-qt-0.9.3/TelepathyQt/Captcha0000644000175200001440000000034312000056607022146 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_Captcha_HEADER_GUARD_ #define _TelepathyQt_Captcha_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/CallChannel0000644000175200001440000000036012000056607022746 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_CallChannel_HEADER_GUARD_ #define _TelepathyQt_CallChannel_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/StatefulDBusProxy0000644000175200001440000000037212000056607024214 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_StatefulDBusProxy_HEADER_GUARD_ #define _TelepathyQt_StatefulDBusProxy_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/media-session-handler.h0000644000175200001440000000340112000056607025202 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008 Collabora Ltd. * @copyright Copyright (C) 2008 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_media_session_handler_h_HEADER_GUARD_ #define _TelepathyQt_media_session_handler_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif /** * \addtogroup clientsideproxies Client-side proxies * * Proxy objects representing remote service objects accessed via D-Bus. * * In addition to providing direct access to methods, signals and properties * exported by the remote objects, some of these proxies offer features like * automatic inspection of remote object capabilities, property tracking, * backwards compatibility helpers for older services and other utilities. */ /** * \defgroup clientmsesh Media session handler proxies * \ingroup clientsideproxies * * Proxy objects representing remote Telepathy MediaSessionHandler objects. */ #include #endif telepathy-qt-0.9.3/TelepathyQt/tube-channel.h0000644000175200001440000000401512000056607023376 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010-2011 Collabora Ltd. * @license LGPL 2.1 * * 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 _TelepathyQt_tube_channel_h_HEADER_GUARD_ #define _TelepathyQt_tube_channel_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include namespace Tp { class TP_QT_EXPORT TubeChannel : public Channel { Q_OBJECT Q_DISABLE_COPY(TubeChannel) public: static const Feature FeatureCore; static TubeChannelPtr create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties); virtual ~TubeChannel(); TubeChannelState state() const; QVariantMap parameters() const; Q_SIGNALS: void stateChanged(Tp::TubeChannelState state); protected: TubeChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature = TubeChannel::FeatureCore); void setParameters(const QVariantMap ¶meters); private Q_SLOTS: TP_QT_NO_EXPORT void onTubeChannelStateChanged(uint newstate); TP_QT_NO_EXPORT void gotTubeProperties(Tp::PendingOperation *op); private: struct Private; friend struct Private; Private *mPriv; }; } #endif telepathy-qt-0.9.3/TelepathyQt/Utils0000644000175200001440000000033512000056607021704 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_Utils_HEADER_GUARD_ #define _TelepathyQt_Utils_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/server-authentication-channel.h0000644000175200001440000000442312000056607026765 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_server_authentication_channel_h_HEADER_GUARD_ #define _TelepathyQt_server_authentication_channel_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include namespace Tp { class TP_QT_EXPORT ServerAuthenticationChannel : public Channel { Q_OBJECT Q_DISABLE_COPY(ServerAuthenticationChannel) public: static const Feature FeatureCore; static ServerAuthenticationChannelPtr create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties); virtual ~ServerAuthenticationChannel(); CaptchaAuthenticationPtr captchaAuthentication() const; // TODO: Add something for SASL here as well bool hasCaptchaInterface() const; // TODO: Enable when SASL high-level support is in // bool hasSaslInterface() const; protected: ServerAuthenticationChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature = ServerAuthenticationChannel::FeatureCore); private Q_SLOTS: TP_QT_NO_EXPORT void gotCaptchaAuthenticationProperties(Tp::PendingOperation *op); TP_QT_NO_EXPORT void gotServerAuthenticationProperties(Tp::PendingOperation *op); private: struct Private; friend struct Private; Private *mPriv; }; } #endif telepathy-qt-0.9.3/TelepathyQt/ChannelInterfaceHoldInterface0000644000175200001440000000041712000056607026426 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelInterfaceHoldInterface_HEADER_GUARD_ #define _TelepathyQt_ChannelInterfaceHoldInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/shared-ptr.h0000644000175200001440000001665012000056607023112 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009-2011 Collabora Ltd. * @copyright Copyright (C) 2009-2011 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_shared_ptr_h_HEADER_GUARD_ #define _TelepathyQt_shared_ptr_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include namespace Tp { class RefCounted; template class SharedPtr; template class WeakPtr; class TP_QT_EXPORT RefCounted { Q_DISABLE_COPY(RefCounted) class SharedCount { Q_DISABLE_COPY(SharedCount) public: SharedCount(RefCounted *d) : d(d), strongref(0), weakref(0) { } private: template friend class SharedPtr; template friend class WeakPtr; friend class RefCounted; RefCounted *d; mutable QAtomicInt strongref; mutable QAtomicInt weakref; }; public: inline RefCounted() : sc(new SharedCount(this)) { sc->weakref.ref(); } inline virtual ~RefCounted() { sc->d = 0; if (!sc->weakref.deref()) { delete sc; } } private: template friend class SharedPtr; template friend class WeakPtr; // TODO: Remove when Conn.I.ContactList, etc becomes mandatory. This is required to circumvent // a reference cycle when using contact list channels, due to the fact that Channels hold // strong references to their parent Connection, but not needed when using // Conn.I.ContactList and friends. friend class ContactManager; inline void ref() const { sc->strongref.ref(); } inline bool deref() const { return sc->strongref.deref(); } SharedCount *sc; }; template class SharedPtr { typedef bool (SharedPtr::*UnspecifiedBoolType)() const; public: inline SharedPtr() : d(0) { } explicit inline SharedPtr(T *d) : d(d) { if (d) { d->ref(); } } template inline SharedPtr(const SharedPtr &o) : d(o.data()) { if (d) { d->ref(); } } inline SharedPtr(const SharedPtr &o) : d(o.d) { if (d) { d->ref(); } } explicit inline SharedPtr(const WeakPtr &o) { RefCounted::SharedCount *sc = o.sc; if (sc) { // increase the strongref, but never up from zero // or less (negative is used on untracked objects) register int tmp = sc->strongref.fetchAndAddOrdered(0); while (tmp > 0) { // try to increment from "tmp" to "tmp + 1" if (sc->strongref.testAndSetRelaxed(tmp, tmp + 1)) { // succeeded break; } // failed, try again tmp = sc->strongref.fetchAndAddOrdered(0); } if (tmp > 0) { d = dynamic_cast(sc->d); Q_ASSERT(d != NULL); } else { d = 0; } } else { d = 0; } } inline ~SharedPtr() { if (d && !d->deref()) { T *saved = d; d = 0; delete saved; } } inline void reset() { SharedPtr().swap(*this); } inline T *data() const { return d; } inline const T *constData() const { return d; } inline T *operator->() { return d; } inline T *operator->() const { return d; } inline bool isNull() const { return !d; } inline bool operator!() const { return isNull(); } operator UnspecifiedBoolType() const { return !isNull() ? &SharedPtr::operator! : 0; } inline bool operator==(const SharedPtr &o) const { return d == o.d; } inline bool operator!=(const SharedPtr &o) const { return d != o.d; } inline bool operator==(const T *ptr) const { return d == ptr; } inline bool operator!=(const T *ptr) const { return d != ptr; } inline SharedPtr &operator=(const SharedPtr &o) { SharedPtr(o).swap(*this); return *this; } inline void swap(SharedPtr &o) { T *tmp = d; d = o.d; o.d = tmp; } template static inline SharedPtr staticCast(const SharedPtr &src) { return SharedPtr(static_cast(src.data())); } template static inline SharedPtr dynamicCast(const SharedPtr &src) { return SharedPtr(dynamic_cast(src.data())); } template static inline SharedPtr constCast(const SharedPtr &src) { return SharedPtr(const_cast(src.data())); } template static inline SharedPtr qObjectCast(const SharedPtr &src) { return SharedPtr(qobject_cast(src.data())); } private: friend class WeakPtr; T *d; }; template inline uint qHash(const SharedPtr &ptr) { return QT_PREPEND_NAMESPACE(qHash(ptr.data())); } template inline uint qHash(const WeakPtr &ptr); template class WeakPtr { typedef bool (WeakPtr::*UnspecifiedBoolType)() const; public: inline WeakPtr() : sc(0) { } explicit inline WeakPtr(T *d) { if (d) { sc = d->sc; sc->weakref.ref(); } else { sc = 0; } } inline WeakPtr(const WeakPtr &o) : sc(o.sc) { if (sc) { sc->weakref.ref(); } } inline WeakPtr(const SharedPtr &o) { if (o.d) { sc = o.d->sc; sc->weakref.ref(); } else { sc = 0; } } inline ~WeakPtr() { if (sc && !sc->weakref.deref()) { delete sc; } } inline bool isNull() const { return !sc || sc->strongref.fetchAndAddOrdered(0) <= 0; } inline bool operator!() const { return isNull(); } operator UnspecifiedBoolType() const { return !isNull() ? &WeakPtr::operator! : 0; } inline WeakPtr &operator=(const WeakPtr &o) { WeakPtr(o).swap(*this); return *this; } inline WeakPtr &operator=(const SharedPtr &o) { WeakPtr(o).swap(*this); return *this; } inline void swap(WeakPtr &o) { RefCounted::SharedCount *tmp = sc; sc = o.sc; o.sc = tmp; } SharedPtr toStrongRef() const { return SharedPtr(*this); } private: friend class SharedPtr; friend uint qHash(const WeakPtr &ptr); RefCounted::SharedCount *sc; }; template inline uint qHash(const WeakPtr &ptr) { T *actualPtr = ptr.sc ? ptr.sc.d : 0; return QT_PREPEND_NAMESPACE(qHash(actualPtr)); } } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/DBusProxy0000644000175200001440000000035212000056607022502 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_DBusProxy_HEADER_GUARD_ #define _TelepathyQt_DBusProxy_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/types-internal.h0000644000175200001440000001240112000056607024005 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @license LGPL 2.1 * * 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 _TelepathyQt_types_internal_h_HEADER_GUARD_ #define _TelepathyQt_types_internal_h_HEADER_GUARD_ #include #include #include namespace Tp { /** * Private structure used to circumvent QtDBus' strict demarshalling */ struct TP_QT_EXPORT SUSocketAddress { /** * A dotted-quad IPv4 address literal: four ASCII decimal numbers, each * between 0 and 255 inclusive, e.g. "192.168.0.1". */ QString address; /** * The TCP or UDP port number. */ uint port; }; TP_QT_EXPORT bool operator==(const SUSocketAddress& v1, const SUSocketAddress& v2); TP_QT_EXPORT inline bool operator!=(const SUSocketAddress& v1, const SUSocketAddress& v2) { return !operator==(v1, v2); } TP_QT_EXPORT QDBusArgument& operator<<(QDBusArgument& arg, const SUSocketAddress& val); TP_QT_EXPORT const QDBusArgument& operator>>(const QDBusArgument& arg, SUSocketAddress& val); } // Tp // specialise for Tp::SocketAddressIPv4, allowing it to be used in place of QDBusVariant template<> inline Tp::SocketAddressIPv4 qdbus_cast(const QDBusArgument &arg, Tp::SocketAddressIPv4 *) { if (arg.currentSignature() == QLatin1String("(su)")) { // Use Tp::SUSocketAddress Tp::SUSocketAddress saddr = qdbus_cast(arg); Tp::SocketAddressIPv4 addr; addr.address = saddr.address; addr.port = saddr.port; return addr; } else if (arg.currentSignature() == QLatin1String("(sq)")) { // Keep it standard Tp::SocketAddressIPv4 item; arg >> item; return item; } else { // This should never happen... return Tp::SocketAddressIPv4(); } } template<> inline Tp::SocketAddressIPv4 qdbus_cast(const QVariant &v, Tp::SocketAddressIPv4 *) { int id = v.userType(); if (id == qMetaTypeId()) { QDBusArgument arg = qvariant_cast(v); if (arg.currentSignature() == QLatin1String("(su)")) { // Use Tp::SUSocketAddress Tp::SUSocketAddress saddr = qdbus_cast(arg); Tp::SocketAddressIPv4 addr; addr.address = saddr.address; addr.port = saddr.port; return addr; } else if (arg.currentSignature() == QLatin1String("(sq)")) { // Keep it standard Tp::SocketAddressIPv4 item; arg >> item; return item; } else { // This should never happen... return Tp::SocketAddressIPv4(); } } else return qvariant_cast(v); } // specialise for Tp::SocketAddressIPv6, allowing it to be used in place of QDBusVariant template<> inline Tp::SocketAddressIPv6 qdbus_cast(const QDBusArgument &arg, Tp::SocketAddressIPv6 *) { if (arg.currentSignature() == QLatin1String("(su)")) { // Use Tp::SUSocketAddress Tp::SUSocketAddress saddr = qdbus_cast(arg); Tp::SocketAddressIPv6 addr; addr.address = saddr.address; addr.port = saddr.port; return addr; } else if (arg.currentSignature() == QLatin1String("(sq)")) { // Keep it standard Tp::SocketAddressIPv6 item; arg >> item; return item; } else { // This should never happen... return Tp::SocketAddressIPv6(); } } template<> inline Tp::SocketAddressIPv6 qdbus_cast(const QVariant &v, Tp::SocketAddressIPv6 *) { int id = v.userType(); if (id == qMetaTypeId()) { QDBusArgument arg = qvariant_cast(v); if (arg.currentSignature() == QLatin1String("(su)")) { // Use Tp::SUSocketAddress Tp::SUSocketAddress saddr = qdbus_cast(arg); Tp::SocketAddressIPv6 addr; addr.address = saddr.address; addr.port = saddr.port; return addr; } else if (arg.currentSignature() == QLatin1String("(sq)")) { // Keep it standard Tp::SocketAddressIPv6 item; arg >> item; return item; } else { // This should never happen... return Tp::SocketAddressIPv6(); } } else return qvariant_cast(v); } Q_DECLARE_METATYPE(Tp::SUSocketAddress) #endif telepathy-qt-0.9.3/TelepathyQt/callbacks.h0000644000175200001440000003456612000056607022766 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_callbacks_h_HEADER_GUARD_ #define _TelepathyQt_callbacks_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include namespace Tp { struct TP_QT_EXPORT AbstractFunctorCaller { typedef void *(*HookType)(void*); AbstractFunctorCaller(HookType invokeMethodHook) : invokeMethodHook(invokeMethodHook) {} virtual ~AbstractFunctorCaller() {} virtual AbstractFunctorCaller *clone() const = 0; HookType invokeMethodHook; private: AbstractFunctorCaller(const AbstractFunctorCaller &other); AbstractFunctorCaller &operator=(const AbstractFunctorCaller &other); }; template struct BaseFunctorCaller : public AbstractFunctorCaller { BaseFunctorCaller(const Functor &functor, AbstractFunctorCaller::HookType invokeMethodHook) : AbstractFunctorCaller(invokeMethodHook), functor(functor) {} virtual ~BaseFunctorCaller() {} virtual AbstractFunctorCaller *clone() const { return new T(functor); } Functor functor; }; struct TP_QT_EXPORT BaseCallback { BaseCallback() : caller(0) {} /* takes ownership of caller */ BaseCallback(AbstractFunctorCaller *caller) : caller(caller) {} BaseCallback(const BaseCallback &other) : caller(other.caller->clone()) {} virtual ~BaseCallback() { delete caller; } bool isValid() const { return caller != 0; } BaseCallback &operator=(const BaseCallback &other) { if (caller == other.caller) return *this; delete caller; caller = other.caller->clone(); return *this; } protected: /* may be null */ AbstractFunctorCaller *caller; }; template struct FunctorCaller0 : public BaseFunctorCaller, Functor> { typedef R ResultType; typedef R (*InvokeType)(AbstractFunctorCaller* ); explicit FunctorCaller0(const Functor &functor) : BaseFunctorCaller(functor, reinterpret_cast(&FunctorCaller0::invoke)) {} static ResultType invoke(AbstractFunctorCaller *call ) { typedef FunctorCaller0 Type; Type *typed = static_cast(call); return (typed->functor)(); } }; template struct Callback0 : public BaseCallback { typedef R (*FunctionType)(); typedef R ResultType; Callback0() {} template Callback0(const Functor &functor) : BaseCallback(new FunctorCaller0(functor)) {} ResultType operator()() const { if (caller) { typedef R (*InvokeType)(AbstractFunctorCaller* ); InvokeType invokeMethod = reinterpret_cast(caller->invokeMethodHook); return invokeMethod(caller ); } return ResultType(); } }; template struct FunctorCaller1 : public BaseFunctorCaller, Functor> { typedef R ResultType; typedef R (*InvokeType)(AbstractFunctorCaller* , Arg1); explicit FunctorCaller1(const Functor &functor) : BaseFunctorCaller(functor, reinterpret_cast(&FunctorCaller1::invoke)) {} static ResultType invoke(AbstractFunctorCaller *call , Arg1 a1) { typedef FunctorCaller1 Type; Type *typed = static_cast(call); return (typed->functor)(a1); } }; template struct Callback1 : public BaseCallback { typedef R (*FunctionType)(Arg1); typedef R ResultType; Callback1() {} template Callback1(const Functor &functor) : BaseCallback(new FunctorCaller1(functor)) {} ResultType operator()(Arg1 a1) const { if (caller) { typedef R (*InvokeType)(AbstractFunctorCaller* , Arg1); InvokeType invokeMethod = reinterpret_cast(caller->invokeMethodHook); return invokeMethod(caller , a1); } return ResultType(); } }; template struct FunctorCaller2 : public BaseFunctorCaller, Functor> { typedef R ResultType; typedef R (*InvokeType)(AbstractFunctorCaller* , Arg1, Arg2); explicit FunctorCaller2(const Functor &functor) : BaseFunctorCaller(functor, reinterpret_cast(&FunctorCaller2::invoke)) {} static ResultType invoke(AbstractFunctorCaller *call , Arg1 a1, Arg2 a2) { typedef FunctorCaller2 Type; Type *typed = static_cast(call); return (typed->functor)(a1, a2); } }; template struct Callback2 : public BaseCallback { typedef R (*FunctionType)(Arg1, Arg2); typedef R ResultType; Callback2() {} template Callback2(const Functor &functor) : BaseCallback(new FunctorCaller2(functor)) {} ResultType operator()(Arg1 a1, Arg2 a2) const { if (caller) { typedef R (*InvokeType)(AbstractFunctorCaller* , Arg1, Arg2); InvokeType invokeMethod = reinterpret_cast(caller->invokeMethodHook); return invokeMethod(caller , a1, a2); } return ResultType(); } }; template struct FunctorCaller3 : public BaseFunctorCaller, Functor> { typedef R ResultType; typedef R (*InvokeType)(AbstractFunctorCaller* , Arg1, Arg2, Arg3); explicit FunctorCaller3(const Functor &functor) : BaseFunctorCaller(functor, reinterpret_cast(&FunctorCaller3::invoke)) {} static ResultType invoke(AbstractFunctorCaller *call , Arg1 a1, Arg2 a2, Arg3 a3) { typedef FunctorCaller3 Type; Type *typed = static_cast(call); return (typed->functor)(a1, a2, a3); } }; template struct Callback3 : public BaseCallback { typedef R (*FunctionType)(Arg1, Arg2, Arg3); typedef R ResultType; Callback3() {} template Callback3(const Functor &functor) : BaseCallback(new FunctorCaller3(functor)) {} ResultType operator()(Arg1 a1, Arg2 a2, Arg3 a3) const { if (caller) { typedef R (*InvokeType)(AbstractFunctorCaller* , Arg1, Arg2, Arg3); InvokeType invokeMethod = reinterpret_cast(caller->invokeMethodHook); return invokeMethod(caller , a1, a2, a3); } return ResultType(); } }; template struct FunctorCaller4 : public BaseFunctorCaller, Functor> { typedef R ResultType; typedef R (*InvokeType)(AbstractFunctorCaller* , Arg1, Arg2, Arg3, Arg4); explicit FunctorCaller4(const Functor &functor) : BaseFunctorCaller(functor, reinterpret_cast(&FunctorCaller4::invoke)) {} static ResultType invoke(AbstractFunctorCaller *call , Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4) { typedef FunctorCaller4 Type; Type *typed = static_cast(call); return (typed->functor)(a1, a2, a3, a4); } }; template struct Callback4 : public BaseCallback { typedef R (*FunctionType)(Arg1, Arg2, Arg3, Arg4); typedef R ResultType; Callback4() {} template Callback4(const Functor &functor) : BaseCallback(new FunctorCaller4(functor)) {} ResultType operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4) const { if (caller) { typedef R (*InvokeType)(AbstractFunctorCaller* , Arg1, Arg2, Arg3, Arg4); InvokeType invokeMethod = reinterpret_cast(caller->invokeMethodHook); return invokeMethod(caller , a1, a2, a3, a4); } return ResultType(); } }; template struct FunctorCaller5 : public BaseFunctorCaller, Functor> { typedef R ResultType; typedef R (*InvokeType)(AbstractFunctorCaller* , Arg1, Arg2, Arg3, Arg4, Arg5); explicit FunctorCaller5(const Functor &functor) : BaseFunctorCaller(functor, reinterpret_cast(&FunctorCaller5::invoke)) {} static ResultType invoke(AbstractFunctorCaller *call , Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5) { typedef FunctorCaller5 Type; Type *typed = static_cast(call); return (typed->functor)(a1, a2, a3, a4, a5); } }; template struct Callback5 : public BaseCallback { typedef R (*FunctionType)(Arg1, Arg2, Arg3, Arg4, Arg5); typedef R ResultType; Callback5() {} template Callback5(const Functor &functor) : BaseCallback(new FunctorCaller5(functor)) {} ResultType operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5) const { if (caller) { typedef R (*InvokeType)(AbstractFunctorCaller* , Arg1, Arg2, Arg3, Arg4, Arg5); InvokeType invokeMethod = reinterpret_cast(caller->invokeMethodHook); return invokeMethod(caller , a1, a2, a3, a4, a5); } return ResultType(); } }; template struct FunctorCaller6 : public BaseFunctorCaller, Functor> { typedef R ResultType; typedef R (*InvokeType)(AbstractFunctorCaller* , Arg1, Arg2, Arg3, Arg4, Arg5, Arg6); explicit FunctorCaller6(const Functor &functor) : BaseFunctorCaller(functor, reinterpret_cast(&FunctorCaller6::invoke)) {} static ResultType invoke(AbstractFunctorCaller *call , Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6) { typedef FunctorCaller6 Type; Type *typed = static_cast(call); return (typed->functor)(a1, a2, a3, a4, a5, a6); } }; template struct Callback6 : public BaseCallback { typedef R (*FunctionType)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6); typedef R ResultType; Callback6() {} template Callback6(const Functor &functor) : BaseCallback(new FunctorCaller6(functor)) {} ResultType operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6) const { if (caller) { typedef R (*InvokeType)(AbstractFunctorCaller* , Arg1, Arg2, Arg3, Arg4, Arg5, Arg6); InvokeType invokeMethod = reinterpret_cast(caller->invokeMethodHook); return invokeMethod(caller , a1, a2, a3, a4, a5, a6); } return ResultType(); } }; template struct FunctorCaller7 : public BaseFunctorCaller, Functor> { typedef R ResultType; typedef R (*InvokeType)(AbstractFunctorCaller* , Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7); explicit FunctorCaller7(const Functor &functor) : BaseFunctorCaller(functor, reinterpret_cast(&FunctorCaller7::invoke)) {} static ResultType invoke(AbstractFunctorCaller *call , Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6, Arg7 a7) { typedef FunctorCaller7 Type; Type *typed = static_cast(call); return (typed->functor)(a1, a2, a3, a4, a5, a6, a7); } }; template struct Callback7 : public BaseCallback { typedef R (*FunctionType)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7); typedef R ResultType; Callback7() {} template Callback7(const Functor &functor) : BaseCallback(new FunctorCaller7(functor)) {} ResultType operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6, Arg7 a7) const { if (caller) { typedef R (*InvokeType)(AbstractFunctorCaller* , Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7); InvokeType invokeMethod = reinterpret_cast(caller->invokeMethodHook); return invokeMethod(caller , a1, a2, a3, a4, a5, a6, a7); } return ResultType(); } }; } #endif telepathy-qt-0.9.3/TelepathyQt/AccountCapabilityFilter0000644000175200001440000000042512000056607025350 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_AccountCapabilityFilter_HEADER_GUARD_ #define _TelepathyQt_AccountCapabilityFilter_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/pending-captchas.cpp0000644000175200001440000003232012000056607024574 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/debug-internal.h" #include "TelepathyQt/_gen/pending-captchas.moc.hpp" #include #include namespace Tp { struct TP_QT_NO_EXPORT PendingCaptchas::Private { Private(PendingCaptchas *parent); ~Private(); CaptchaAuthentication::ChallengeType stringToChallengeType(const QString &string) const; void appendCaptchaResult(const QString &mimeType, const QString &label, const QByteArray &data, CaptchaAuthentication::ChallengeType type, uint id); // Public object PendingCaptchas *parent; CaptchaAuthentication::ChallengeTypes preferredTypes; QStringList preferredMimeTypes; bool multipleRequired; QList captchas; int captchasLeft; CaptchaAuthenticationPtr captchaAuthentication; ChannelPtr channel; }; PendingCaptchas::Private::Private(PendingCaptchas *parent) : parent(parent) { } PendingCaptchas::Private::~Private() { } CaptchaAuthentication::ChallengeType PendingCaptchas::Private::stringToChallengeType(const QString &string) const { if (string == QLatin1String("audio_recog")) { return CaptchaAuthentication::AudioRecognitionChallenge; } else if (string == QLatin1String("ocr")) { return CaptchaAuthentication::OCRChallenge; } else if (string == QLatin1String("picture_q")) { return CaptchaAuthentication::PictureQuestionChallenge; } else if (string == QLatin1String("picture_recog")) { return CaptchaAuthentication::PictureRecognitionChallenge; } else if (string == QLatin1String("qa")) { return CaptchaAuthentication::TextQuestionChallenge; } else if (string == QLatin1String("speech_q")) { return CaptchaAuthentication::SpeechQuestionChallenge; } else if (string == QLatin1String("speech_recog")) { return CaptchaAuthentication::SpeechRecognitionChallenge; } else if (string == QLatin1String("video_q")) { return CaptchaAuthentication::VideoQuestionChallenge; } else if (string == QLatin1String("video_recog")) { return CaptchaAuthentication::VideoRecognitionChallenge; } // Not really making sense... return CaptchaAuthentication::UnknownChallenge; } void PendingCaptchas::Private::appendCaptchaResult(const QString &mimeType, const QString &label, const QByteArray &data, CaptchaAuthentication::ChallengeType type, uint id) { // Add to the list Captcha captchaItem(mimeType, label, data, type, id); captchas.append(captchaItem); --captchasLeft; if (!captchasLeft) { parent->setFinished(); } } /** * \class PendingCaptchas * \ingroup client * \headerfile TelepathyQt/pending-captchas.h * * \brief The PendingCaptchas class represents an asynchronous * operation for retrieving a captcha challenge from a connection manager. * * See \ref async_model */ PendingCaptchas::PendingCaptchas( const QDBusPendingCall &call, const QStringList &preferredMimeTypes, CaptchaAuthentication::ChallengeTypes preferredTypes, const CaptchaAuthenticationPtr &captchaAuthentication) : PendingOperation(captchaAuthentication), mPriv(new Private(this)) { mPriv->captchaAuthentication = captchaAuthentication; mPriv->channel = captchaAuthentication->channel(); mPriv->preferredMimeTypes = preferredMimeTypes; mPriv->preferredTypes = preferredTypes; /* keep track of channel invalidation */ connect(mPriv->channel.data(), SIGNAL(invalidated(Tp::DBusProxy*,QString,QString)), SLOT(onChannelInvalidated(Tp::DBusProxy*,QString,QString))); connect(new QDBusPendingCallWatcher(call), SIGNAL(finished(QDBusPendingCallWatcher*)), this, SLOT(onGetCaptchasWatcherFinished(QDBusPendingCallWatcher*))); } PendingCaptchas::PendingCaptchas( const QString& errorName, const QString& errorMessage, const CaptchaAuthenticationPtr &captchaAuthentication) : PendingOperation(captchaAuthentication), mPriv(new PendingCaptchas::Private(this)) { warning() << "PendingCaptchas created with instant failure"; setFinishedWithError(errorName, errorMessage); } /** * Class destructor. */ PendingCaptchas::~PendingCaptchas() { delete mPriv; } void PendingCaptchas::onChannelInvalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage) { Q_UNUSED(proxy); if (isFinished()) { return; } warning().nospace() << "PendingCaptchas failed because channel was invalidated with " << errorName << ": " << errorMessage; setFinishedWithError(errorName, errorMessage); } void PendingCaptchas::onGetCaptchasWatcherFinished(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (reply.isError()) { debug().nospace() << "PendingDBusCall failed: " << reply.error().name() << ": " << reply.error().message(); setFinishedWithError(reply.error()); watcher->deleteLater(); return; } debug() << "Got reply to PendingDBusCall"; Tp::CaptchaInfoList list = qdbus_cast(reply.argumentAt(0)); int howManyRequired = reply.argumentAt(1).toUInt(); // Compute which captchas are required QList > finalList; foreach (const Tp::CaptchaInfo &info, list) { // First of all, mimetype check QString mimeType; if (info.availableMIMETypes.isEmpty()) { // If it's one of the types which might not have a payload, go for it CaptchaAuthentication::ChallengeTypes noPayloadChallenges( CaptchaAuthentication::TextQuestionChallenge | CaptchaAuthentication::UnknownChallenge); if (mPriv->stringToChallengeType(info.type) & noPayloadChallenges) { // Ok, move on } else { // In this case, there's something wrong warning() << "Got a captcha with type " << info.type << " which does not " "expose any available mimetype for its payload. Something might be " "wrong with the connection manager."; continue; } } else if (mPriv->preferredMimeTypes.isEmpty()) { // No preference, let's take the first of the list mimeType = info.availableMIMETypes.first(); } else { QSet supportedMimeTypes = info.availableMIMETypes.toSet().intersect( mPriv->preferredMimeTypes.toSet()); if (supportedMimeTypes.isEmpty()) { // Apparently our handler does not support any of this captcha's mimetypes, skip continue; } // Ok, use the first one mimeType = *supportedMimeTypes.constBegin(); } // If it's required, easy if (info.flags & CaptchaFlagRequired) { finalList.append(qMakePair(info, mimeType)); continue; } // Otherwise, let's see if the mimetype matches if (mPriv->preferredTypes & mPriv->stringToChallengeType(info.type)) { finalList.append(qMakePair(info, mimeType)); } if (finalList.size() == howManyRequired) { break; } } if (finalList.size() != howManyRequired) { warning() << "No captchas available matching the specified preferences"; setFinishedWithError(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("No captchas matching the handler's request")); return; } // Now, get the infos for all the required captchas in our final list. mPriv->captchasLeft = finalList.size(); mPriv->multipleRequired = howManyRequired > 1 ? true : false; for (QList >::const_iterator i = finalList.constBegin(); i != finalList.constEnd(); ++i) { QString mimeType = (*i).second; Tp::CaptchaInfo captchaInfo = (*i).first; // If the captcha does not have a mimetype, we can add it straight if (mimeType.isEmpty()) { mPriv->appendCaptchaResult(mimeType, captchaInfo.label, QByteArray(), mPriv->stringToChallengeType(captchaInfo.type), captchaInfo.ID); continue; } QDBusPendingCall call = mPriv->channel->interface()->GetCaptchaData( captchaInfo.ID, mimeType); QDBusPendingCallWatcher *dataWatcher = new QDBusPendingCallWatcher(call); dataWatcher->setProperty("__Tp_Qt_CaptchaID", captchaInfo.ID); dataWatcher->setProperty("__Tp_Qt_CaptchaMimeType", mimeType); dataWatcher->setProperty("__Tp_Qt_CaptchaLabel", captchaInfo.label); dataWatcher->setProperty("__Tp_Qt_CaptchaType", mPriv->stringToChallengeType(captchaInfo.type)); connect(dataWatcher, SIGNAL(finished(QDBusPendingCallWatcher*)), this, SLOT(onGetCaptchaDataWatcherFinished(QDBusPendingCallWatcher*))); } watcher->deleteLater(); } void PendingCaptchas::onGetCaptchaDataWatcherFinished(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (reply.isError()) { debug().nospace() << "PendingDBusCall failed: " << reply.error().name() << ": " << reply.error().message(); setFinishedWithError(reply.error()); watcher->deleteLater(); return; } debug() << "Got reply to PendingDBusCall"; // Add to the list mPriv->appendCaptchaResult(watcher->property("__Tp_Qt_CaptchaMimeType").toString(), watcher->property("__Tp_Qt_CaptchaLabel").toString(), reply.value(), static_cast( watcher->property("__Tp_Qt_CaptchaType").toUInt()), watcher->property("__Tp_Qt_CaptchaID").toUInt()); watcher->deleteLater(); } /** * Return the main captcha of the request. This captcha is guaranteed to be compatible * with any constraint specified in CaptchaAuthentication::requestCaptchas(). * * This is a convenience method which should be used when requiresMultipleCaptchas() * is false - otherwise, you should use captchaList. * * The returned Captcha can be answered through CaptchaAuthentication::answer() by * using its id. * * This method will return a meaningful value only if the operation was completed * successfully. * * \return The main captcha for the pending request. * \sa captchaList() * CaptchaAuthentication::requestCaptchas() * requiresMultipleCaptchas() * CaptchaAuthentication::answer() */ Captcha PendingCaptchas::captcha() const { if (!isFinished()) { return Captcha(); } return mPriv->captchas.first(); } /** * Return all the captchas of the request. These captchas are guaranteed to be compatible * with any constraint specified in CaptchaAuthentication::requestCaptchas(). * * If requiresMultipleCaptchas() is false, you probably want to use the convenience method * captcha() instead. * * The returned Captchas can be answered through CaptchaAuthentication::answer() by * using their ids. * * This method will return a meaningful value only if the operation was completed * successfully. * * \return All the captchas for the pending request. * \sa captcha() * CaptchaAuthentication::requestCaptchas() * requiresMultipleCaptchas() * CaptchaAuthentication::answer() */ QList PendingCaptchas::captchaList() const { if (!isFinished()) { return QList(); } return mPriv->captchas; } /** * Return whether this request requires more than one captcha to be answered or not. * * This method should always be checked before answering to find out what the * connection manager expects. Depending on the result, you might want to use the * result from captcha() if just a single answer is required, or from captchaList() * otherwise. * * This method will return a meaningful value only if the operation was completed * successfully. * * \return The main captcha for the pending request. * \sa captcha() * captchaList() */ bool PendingCaptchas::requiresMultipleCaptchas() const { return mPriv->multipleRequired; } } telepathy-qt-0.9.3/TelepathyQt/call-stream-endpoint.xml0000644000175200001440000000037312000056607025427 0ustar00collabora-develusers00000000000000 Call misc interfaces, version 1 telepathy-qt-0.9.3/TelepathyQt/ChannelInterfaceSMSInterface0000644000175200001440000000041512000056607026200 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelInterfaceSMSInterface_HEADER_GUARD_ #define _TelepathyQt_ChannelInterfaceSMSInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/fixed-feature-factory.cpp0000644000175200001440000000625112000056607025565 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/fixed-feature-factory.moc.hpp" #include namespace Tp { struct TP_QT_NO_EXPORT FixedFeatureFactory::Private { Features features; }; /** * \class FixedFeatureFactory * \ingroup utils * \headerfile TelepathyQt/fixed-feature-factory.h * * \brief The FixedFeatureFactory class is a base class for all D-Bus proxy * factories which want the same set of features for all constructed proxies. */ /** * Class constructor. * * The intention for storing the bus here is that it generally doesn't make sense to construct * proxies for multiple buses in the same context. Allowing that would lead to more complex keying * needs in the cache, as well. * * \param bus The D-Bus bus connection for the objects constructed using this factory. */ FixedFeatureFactory::FixedFeatureFactory(const QDBusConnection &bus) : DBusProxyFactory(bus), mPriv(new Private) { } /** * Class destructor. */ FixedFeatureFactory::~FixedFeatureFactory() { delete mPriv; } /** * Gets the features this factory will make ready on constructed proxies. * * \return The set of features. */ Features FixedFeatureFactory::features() const { return mPriv->features; } /** * Adds a single feature this factory will make ready on further constructed proxies. * * No feature removal is provided, to guard against uncooperative modules removing features other * modules have set and depend on. * * \param feature The feature to add. */ void FixedFeatureFactory::addFeature(const Feature &feature) { addFeatures(Features(feature)); } /** * Adds a set of features this factory will make ready on further constructed proxies. * * No feature removal is provided, to guard against uncooperative modules removing features other * modules have set and depend on. * * \param features The features to add. */ void FixedFeatureFactory::addFeatures(const Features &features) { mPriv->features.unite(features); } /** * Fixed implementation of the per-proxy feature getter. * * \return features(), irrespective of the actual \a proxy. */ Features FixedFeatureFactory::featuresFor(const DBusProxyPtr &proxy) const { Q_UNUSED(proxy); return features(); } } telepathy-qt-0.9.3/TelepathyQt/call-content.xml0000644000175200001440000000100112000056607023755 0ustar00collabora-develusers00000000000000 Call Content interfaces, version 1 telepathy-qt-0.9.3/TelepathyQt/contact-search-channel.cpp0000644000175200001440000005561112000056607025700 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/contact-search-channel-internal.h" #include "TelepathyQt/_gen/contact-search-channel.moc.hpp" #include "TelepathyQt/_gen/contact-search-channel-internal.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT ContactSearchChannel::Private { Private(ContactSearchChannel *parent, const QVariantMap &immutableProperties); ~Private(); static void introspectMain(Private *self); void extractImmutableProperties(const QVariantMap &props); void processSignalsQueue(); void processSearchStateChangeQueue(); void processSearchResultQueue(); struct SearchStateChangeInfo { SearchStateChangeInfo(uint state, const QString &errorName, const Tp::ContactSearchChannel::SearchStateChangeDetails &details) : state(state), errorName(errorName), details(details) { } uint state; QString errorName; ContactSearchChannel::SearchStateChangeDetails details; }; // Public object ContactSearchChannel *parent; QVariantMap immutableProperties; Client::ChannelTypeContactSearchInterface *contactSearchInterface; Client::DBus::PropertiesInterface *properties; ReadinessHelper *readinessHelper; // Introspection uint searchState; uint limit; QStringList availableSearchKeys; QString server; QQueue signalsQueue; QQueue searchStateChangeQueue; QQueue searchResultQueue; bool processingSignalsQueue; }; ContactSearchChannel::Private::Private(ContactSearchChannel *parent, const QVariantMap &immutableProperties) : parent(parent), immutableProperties(immutableProperties), contactSearchInterface(parent->interface()), properties(parent->interface()), readinessHelper(parent->readinessHelper()), searchState(ChannelContactSearchStateNotStarted), limit(0), processingSignalsQueue(false) { ReadinessHelper::Introspectables introspectables; ReadinessHelper::Introspectable introspectableCore( QSet() << 0, // makesSenseForStatuses Features() << Channel::FeatureCore, // dependsOnFeatures (core) QStringList(), // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::introspectMain, this); introspectables[FeatureCore] = introspectableCore; readinessHelper->addIntrospectables(introspectables); } ContactSearchChannel::Private::~Private() { } void ContactSearchChannel::Private::introspectMain(ContactSearchChannel::Private *self) { /* we need to at least introspect SearchState here as it's not immutable */ self->parent->connect(self->contactSearchInterface, SIGNAL(SearchStateChanged(uint,QString,QVariantMap)), SLOT(onSearchStateChanged(uint,QString,QVariantMap))); self->parent->connect(self->contactSearchInterface, SIGNAL(SearchResultReceived(Tp::ContactSearchResultMap)), SLOT(onSearchResultReceived(Tp::ContactSearchResultMap))); QVariantMap props; bool needIntrospectMainProps = false; const unsigned numNames = 3; const static QString names[numNames] = { QLatin1String("Limit"), QLatin1String("AvailableSearchKeys"), QLatin1String("Server") }; const static QString qualifiedNames[numNames] = { TP_QT_IFACE_CHANNEL + QLatin1String(".Limit"), TP_QT_IFACE_CHANNEL + QLatin1String(".AvailableSearchKeys"), TP_QT_IFACE_CHANNEL + QLatin1String(".Server") }; for (unsigned i = 0; i < numNames; ++i) { const QString &qualified = qualifiedNames[i]; if (!self->immutableProperties.contains(qualified)) { needIntrospectMainProps = true; break; } props.insert(names[i], self->immutableProperties.value(qualified)); } if (needIntrospectMainProps) { QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( self->properties->GetAll( TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH), self->parent); self->parent->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotProperties(QDBusPendingCallWatcher*))); } else { self->extractImmutableProperties(props); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( self->properties->Get( TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH, QLatin1String("SearchState")), self->parent); self->parent->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotSearchState(QDBusPendingCallWatcher*))); } } void ContactSearchChannel::Private::extractImmutableProperties(const QVariantMap &props) { limit = qdbus_cast(props[QLatin1String("Limit")]); availableSearchKeys = qdbus_cast(props[QLatin1String("AvailableSearchKeys")]); server = qdbus_cast(props[QLatin1String("Server")]); } void ContactSearchChannel::Private::processSignalsQueue() { if (processingSignalsQueue || signalsQueue.isEmpty()) { return; } processingSignalsQueue = true; (this->*(signalsQueue.dequeue()))(); } void ContactSearchChannel::Private::processSearchStateChangeQueue() { const SearchStateChangeInfo &info = searchStateChangeQueue.dequeue(); searchState = info.state; emit parent->searchStateChanged( static_cast(info.state), info.errorName, SearchStateChangeDetails(info.details)); processingSignalsQueue = false; processSignalsQueue(); } void ContactSearchChannel::Private::processSearchResultQueue() { const ContactSearchResultMap &result = searchResultQueue.first(); if (!result.isEmpty()) { ContactManagerPtr manager = parent->connection()->contactManager(); PendingContacts *pendingContacts = manager->contactsForIdentifiers( result.keys()); parent->connect(pendingContacts, SIGNAL(finished(Tp::PendingOperation*)), SLOT(gotSearchResultContacts(Tp::PendingOperation*))); } else { searchResultQueue.dequeue(); emit parent->searchResultReceived(SearchResult()); processingSignalsQueue = false; processSignalsQueue(); } } struct TP_QT_NO_EXPORT ContactSearchChannel::SearchStateChangeDetails::Private : public QSharedData { Private(const QVariantMap &details) : details(details) {} QVariantMap details; }; ContactSearchChannel::SearchStateChangeDetails::SearchStateChangeDetails(const QVariantMap &details) : mPriv(new Private(details)) { } ContactSearchChannel::SearchStateChangeDetails::SearchStateChangeDetails() { } ContactSearchChannel::SearchStateChangeDetails::SearchStateChangeDetails( const ContactSearchChannel::SearchStateChangeDetails &other) : mPriv(other.mPriv) { } ContactSearchChannel::SearchStateChangeDetails::~SearchStateChangeDetails() { } ContactSearchChannel::SearchStateChangeDetails &ContactSearchChannel::SearchStateChangeDetails::operator=( const ContactSearchChannel::SearchStateChangeDetails &other) { this->mPriv = other.mPriv; return *this; } QVariantMap ContactSearchChannel::SearchStateChangeDetails::allDetails() const { return isValid() ? mPriv->details : QVariantMap(); } ContactSearchChannel::PendingSearch::PendingSearch(const ContactSearchChannelPtr &channel, QDBusPendingCall call) : PendingOperation(channel), mFinished(false) { connect(channel.data(), SIGNAL(searchStateChanged(Tp::ChannelContactSearchState, const QString &, const Tp::ContactSearchChannel::SearchStateChangeDetails &)), SLOT(onSearchStateChanged(Tp::ChannelContactSearchState, const QString &, const Tp::ContactSearchChannel::SearchStateChangeDetails &))); connect(new QDBusPendingCallWatcher(call), SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(watcherFinished(QDBusPendingCallWatcher*))); } void ContactSearchChannel::PendingSearch::onSearchStateChanged( Tp::ChannelContactSearchState state, const QString &errorName, const Tp::ContactSearchChannel::SearchStateChangeDetails &details) { if (state != ChannelContactSearchStateNotStarted) { if (mFinished) { if (mError.isValid()) { setFinishedWithError(mError); } else { setFinished(); } } mFinished = true; } } void ContactSearchChannel::PendingSearch::watcherFinished(QDBusPendingCallWatcher *watcher) { if (watcher->isError()) { if (mFinished) { setFinishedWithError(watcher->error()); } else { mError = watcher->error(); } } else { if (mFinished) { setFinished(); } } mFinished = true; watcher->deleteLater(); } /** * \class ContactSearchChannel * \ingroup clientchannel * \headerfile TelepathyQt/contact-search-channel.h * * \brief The ContactSearchChannel class represents a Telepathy channel of type * ContactSearch. */ /** * \class ContactSearchChannel::SearchStateChangeDetails * \ingroup wrappers * \headerfile TelepathyQt/contact-search-channel.h * * \brief The ContactSearchChannel::SearchStateChangeDetails class provides * a wrapper around the details for a search state change. * * \sa ContactSearchChannel */ /** * Feature representing the core that needs to become ready to make the * ContactSearchChannel object usable. * * Note that this feature must be enabled in order to use most * ContactSearchChannel methods. * See specific methods documentation for more details. * * When calling isReady(), becomeReady(), this feature is implicitly added * to the requested features. */ const Feature ContactSearchChannel::FeatureCore = Feature(QLatin1String(ContactSearchChannel::staticMetaObject.className()), 0); /** * Create a new ContactSearchChannel object. * * \param connection Connection owning this channel, and specifying the * service. * \param objectPath The channel object path. * \param immutableProperties The channel immutable properties. * \return A ContactSearchChannelPtr object pointing to the newly created * ContactSearchChannel object. */ ContactSearchChannelPtr ContactSearchChannel::create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) { return ContactSearchChannelPtr(new ContactSearchChannel(connection, objectPath, immutableProperties, ContactSearchChannel::FeatureCore)); } /** * Construct a new ContactSearchChannel object. * * \param connection Connection owning this channel, and specifying the * service. * \param objectPath The channel object path. * \param immutableProperties The channel immutable properties. * \param coreFeature The core feature of the channel type, if any. The corresponding introspectable should * depend on ContactSearchChannel::FeatureCore. */ ContactSearchChannel::ContactSearchChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature) : Channel(connection, objectPath, immutableProperties, coreFeature), mPriv(new Private(this, immutableProperties)) { } /** * Class destructor. */ ContactSearchChannel::~ContactSearchChannel() { delete mPriv; } /** * Return the current search state of this channel. * * Change notification is via the searchStateChanged() signal. * * This method requires ContactSearchChannel::FeatureCore to be ready. * * \return The current search state as #ChannelContactSearchState. * \sa searchStateChanged() */ ChannelContactSearchState ContactSearchChannel::searchState() const { return static_cast(mPriv->searchState); } /** * Return the maximum number of results that should be returned by calling search(), where * 0 represents no limit. * * For example, if the terms passed to search() match Antonius, Bridget and Charles and * this property is 2, the search service will only return Antonius and Bridget. * * This method requires ContactSearchChannel::FeatureCore to be ready. * * \return The maximum number of results, or 0 if there is no limit. * \sa availableSearchKeys(), search() */ uint ContactSearchChannel::limit() const { return mPriv->limit; } /** * Return the set of search keys supported by this channel. * * Example values include [""] (for protocols where several address fields are implicitly searched) * or ["x-n-given", "x-n-family", "nickname", "email"] (for XMPP XEP-0055, without extensibility via * Data Forms). * * This method requires ContactSearchChannel::FeatureCore to be ready. * * \return The supported search keys. * \sa limit(), search() */ QStringList ContactSearchChannel::availableSearchKeys() const { return mPriv->availableSearchKeys; } /** * Return the DNS name of the server being searched by this channel. * * This method requires ContactSearchChannel::FeatureCore to be ready. * * \return For protocols which support searching for contacts on multiple servers with different DNS * names (like XMPP), the DNS name of the server being searched by this channel, e.g. * "characters.shakespeare.lit". Otherwise, an empty string. */ QString ContactSearchChannel::server() const { return mPriv->server; } /** * Send a request to start a search for contacts on this connection. * * This may only be called while the searchState() is #ChannelContactSearchStateNotStarted; * a valid search request will cause the searchStateChanged() signal to be emitted with the * state #ChannelContactSearchStateInProgress. * * Search results are signalled by searchResultReceived(). * * This method requires ContactSearchChannel::FeatureCore to be ready. * * This is an overloaded method for search(const ContactSearchMap &searchTerms). * * \param searchKey The search key. * \param searchTerm The search term. * \return A PendingOperation which will emit PendingOperation::finished * when the search has started. * \sa searchState(), searchStateChanged(), searchResultReceived() */ PendingOperation *ContactSearchChannel::search(const QString &searchKey, const QString &searchTerm) { ContactSearchMap searchTerms; searchTerms.insert(searchKey, searchTerm); return search(searchTerms); } /** * Send a request to start a search for contacts on this connection. * * This may only be called while the searchState() is #ChannelContactSearchStateNotStarted; * a valid search request will cause the searchStateChanged() signal to be emitted with the * state #ChannelContactSearchStateInProgress. * * Search results are signalled by searchResultReceived(). * * This method requires ContactSearchChannel::FeatureCore to be ready. * * \param terms The search terms. * \return A PendingOperation which will emit PendingOperation::finished * when the search has started. * \sa searchState(), searchStateChanged(), searchResultReceived() */ PendingOperation *ContactSearchChannel::search(const ContactSearchMap &terms) { if (!isReady(FeatureCore)) { return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Channel not ready"), ContactSearchChannelPtr(this)); } if (searchState() != ChannelContactSearchStateNotStarted) { warning() << "ContactSearchChannel::search called with " "searchState() != ChannelContactSearchStateNotStarted. Doing nothing"; return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Search already started"), ContactSearchChannelPtr(this)); } return new PendingSearch(ContactSearchChannelPtr(this), mPriv->contactSearchInterface->Search(terms)); } /** * Request that a search which searchState() is ChannelContactSearchStateMoreAvailable * move back to state ChannelContactSearchStateInProgress and continue listing up to limit() * more results. */ void ContactSearchChannel::continueSearch() { if (!isReady(FeatureCore)) { return; } if (searchState() != ChannelContactSearchStateMoreAvailable) { warning() << "ContactSearchChannel::continueSearch called with " "searchState() != ChannelContactSearchStateMoreAvailable. Doing nothing"; return; } (void) new PendingVoid(mPriv->contactSearchInterface->More(), ContactSearchChannelPtr(this)); } /** * Stop the current search. * * This may not be called while the searchState() is #ChannelContactSearchStateNotStarted. * If called while the searchState() is #ChannelContactSearchStateInProgress, * searchStateChanged() will be emitted, with the state #ChannelContactSearchStateFailed and * the error #TP_QT_ERROR_CANCELLED. * * \return A PendingOperation which will emit PendingOperation::finished * when the call has finished. * \sa searchState(), searchStateChanged() */ void ContactSearchChannel::stopSearch() { if (!isReady(FeatureCore)) { return; } if (searchState() != ChannelContactSearchStateInProgress && searchState() != ChannelContactSearchStateMoreAvailable) { warning() << "ContactSearchChannel::stopSearch called with " "searchState() != ChannelContactSearchStateInProgress or " "ChannelContactSearchStateMoreAvailable. Doing nothing"; return; } (void) new PendingVoid(mPriv->contactSearchInterface->Stop(), ContactSearchChannelPtr(this)); } void ContactSearchChannel::gotProperties(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (!reply.isError()) { QVariantMap props = reply.value(); mPriv->extractImmutableProperties(props); mPriv->searchState = qdbus_cast(props[QLatin1String("SearchState")]); debug() << "Got reply to Properties::GetAll(ContactSearchChannel)"; mPriv->readinessHelper->setIntrospectCompleted(FeatureCore, true); } else { warning().nospace() << "Properties::GetAll(ContactSearchChannel) failed " "with " << reply.error().name() << ": " << reply.error().message(); mPriv->readinessHelper->setIntrospectCompleted(FeatureCore, false, reply.error()); } watcher->deleteLater(); } void ContactSearchChannel::gotSearchState(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (!reply.isError()) { mPriv->searchState = qdbus_cast(reply.value()); debug() << "Got reply to Properties::Get(SearchState)"; mPriv->readinessHelper->setIntrospectCompleted(FeatureCore, true); } else { warning().nospace() << "Properties::Get(SearchState) failed " "with " << reply.error().name() << ": " << reply.error().message(); mPriv->readinessHelper->setIntrospectCompleted(FeatureCore, false, reply.error()); } watcher->deleteLater(); } void ContactSearchChannel::onSearchStateChanged(uint state, const QString &error, const QVariantMap &details) { mPriv->searchStateChangeQueue.enqueue(Private::SearchStateChangeInfo(state, error, details)); mPriv->signalsQueue.enqueue(&Private::processSearchStateChangeQueue); mPriv->processSignalsQueue(); } void ContactSearchChannel::onSearchResultReceived(const ContactSearchResultMap &result) { mPriv->searchResultQueue.enqueue(result); mPriv->signalsQueue.enqueue(&Private::processSearchResultQueue); mPriv->processSignalsQueue(); } void ContactSearchChannel::gotSearchResultContacts(PendingOperation *op) { PendingContacts *pc = qobject_cast(op); const ContactSearchResultMap &result = mPriv->searchResultQueue.dequeue(); if (!pc->isValid()) { warning().nospace() << "Getting search result contacts " "failed with " << pc->errorName() << ":" << pc->errorMessage() << ". Ignoring search result"; mPriv->processingSignalsQueue = false; mPriv->processSignalsQueue(); return; } const QList &contacts = pc->contacts(); Q_ASSERT(result.count() == contacts.count()); SearchResult ret; uint i = 0; for (ContactSearchResultMap::const_iterator it = result.constBegin(); it != result.constEnd(); ++it, ++i) { ret.insert(contacts.at(i), Contact::InfoFields(it.value())); } emit searchResultReceived(ret); mPriv->processingSignalsQueue = false; mPriv->processSignalsQueue(); } /** * \fn void ContactSearchChannel::searchStateChanged(Tp::ChannelContactSearchState state, * const QString &errorName, * const Tp::ContactSearchChannel::SearchStateChangeDetails &details) * * Emitted when the value of searchState() changes. * * \param state The new state. * \param errorName The name of the error if any. * \param details The details for the state change. * \sa searchState() */ /** * \fn void ContactSearchChannel::searchResultReceived( * const Tp::ContactSearchChannel::SearchResult &result) * * Emitted when a result for a search is received. It can be emitted multiple times * until the searchState() goes to #ChannelContactSearchStateCompleted or * #ChannelContactSearchStateFailed. * * \param result The search result. * \sa searchState() */ } // Tp telepathy-qt-0.9.3/TelepathyQt/and-filter.dox0000644000175200001440000000235212000056607023423 0ustar00collabora-develusers00000000000000/* * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 */ /** * \class Tp::AndFilter * \ingroup utils * \headerfile TelepathyQt/and-filter.h * * \brief The AndFilter class provides a generic filter object to be used * in conjunction of other filters. * * The AndFilter will match if all of its given list of filters matches * their criteria. */ telepathy-qt-0.9.3/TelepathyQt/readiness-helper.cpp0000644000175200001440000005473312000056607024632 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/readiness-helper.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT ReadinessHelper::Introspectable::Private : public QSharedData { Private(const QSet &makesSenseForStatuses, const Features &dependsOnFeatures, const QStringList &dependsOnInterfaces, IntrospectFunc introspectFunc, void *introspectFuncData, bool critical) : makesSenseForStatuses(makesSenseForStatuses), dependsOnFeatures(dependsOnFeatures), dependsOnInterfaces(dependsOnInterfaces), introspectFunc(introspectFunc), introspectFuncData(introspectFuncData), critical(critical) {} QSet makesSenseForStatuses; Features dependsOnFeatures; QStringList dependsOnInterfaces; IntrospectFunc introspectFunc; void *introspectFuncData; bool critical; }; ReadinessHelper::Introspectable::Introspectable() : mPriv(new Private(QSet(), Features(), QStringList(), 0, 0, false)) { } ReadinessHelper::Introspectable::Introspectable(const QSet &makesSenseForStatuses, const Features &dependsOnFeatures, const QStringList &dependsOnInterfaces, IntrospectFunc introspectFunc, void *introspectFuncData, bool critical) : mPriv(new Private(makesSenseForStatuses, dependsOnFeatures, dependsOnInterfaces, introspectFunc, introspectFuncData, critical)) { } ReadinessHelper::Introspectable::Introspectable(const Introspectable &other) : mPriv(other.mPriv) { } ReadinessHelper::Introspectable::~Introspectable() { } ReadinessHelper::Introspectable &ReadinessHelper::Introspectable::operator=( const Introspectable &other) { mPriv = other.mPriv; return *this; } struct TP_QT_NO_EXPORT ReadinessHelper::Private { Private(ReadinessHelper *parent, RefCounted *object, uint currentStatus, const Introspectables &introspectables); Private(ReadinessHelper *parent, DBusProxy *proxy, uint currentStatus, const Introspectables &introspectables); ~Private(); void setCurrentStatus(uint newStatus); void setIntrospectCompleted(const Feature &feature, bool success, const QString &errorName = QString(), const QString &errorMessage = QString()); void iterateIntrospection(); Features depsFor(const Feature &feature); // Recursive dependencies for a feature void abortOperations(const QString &errorName, const QString &errorMessage); ReadinessHelper *parent; RefCounted *object; DBusProxy *proxy; uint currentStatus; QStringList interfaces; Introspectables introspectables; QSet supportedStatuses; Features supportedFeatures; Features satisfiedFeatures; Features requestedFeatures; Features missingFeatures; Features pendingFeatures; Features inFlightFeatures; QHash > missingFeaturesErrors; QList pendingOperations; bool pendingStatusChange; uint pendingStatus; }; ReadinessHelper::Private::Private( ReadinessHelper *parent, RefCounted *object, uint currentStatus, const Introspectables &introspectables) : parent(parent), object(object), proxy(0), currentStatus(currentStatus), introspectables(introspectables), pendingStatusChange(false), pendingStatus(-1) { for (Introspectables::const_iterator i = introspectables.constBegin(); i != introspectables.constEnd(); ++i) { Feature feature = i.key(); Introspectable introspectable = i.value(); Q_ASSERT(introspectable.mPriv->introspectFunc != 0); supportedStatuses += introspectable.mPriv->makesSenseForStatuses; supportedFeatures += feature; } } ReadinessHelper::Private::Private( ReadinessHelper *parent, DBusProxy *proxy, uint currentStatus, const Introspectables &introspectables) : parent(parent), object(proxy), proxy(proxy), currentStatus(currentStatus), introspectables(introspectables), pendingStatusChange(false), pendingStatus(-1) { Q_ASSERT(proxy != 0); for (Introspectables::const_iterator i = introspectables.constBegin(); i != introspectables.constEnd(); ++i) { Feature feature = i.key(); Introspectable introspectable = i.value(); Q_ASSERT(introspectable.mPriv->introspectFunc != 0); supportedStatuses += introspectable.mPriv->makesSenseForStatuses; supportedFeatures += feature; } } ReadinessHelper::Private::~Private() { const static QString messageDestroyed(QLatin1String("Destroyed")); abortOperations(TP_QT_ERROR_CANCELLED, messageDestroyed); } void ReadinessHelper::Private::setCurrentStatus(uint newStatus) { if (currentStatus == newStatus) { return; } if (inFlightFeatures.isEmpty()) { currentStatus = newStatus; satisfiedFeatures.clear(); missingFeatures.clear(); // Make all features that were requested for the new status pending again pendingFeatures = requestedFeatures; // becomeReady ensures that the recursive dependencies of the requested features are already // in the requested set, so we don't have to re-add them here if (supportedStatuses.contains(currentStatus)) { QTimer::singleShot(0, parent, SLOT(iterateIntrospection())); } else { emit parent->statusReady(currentStatus); } } else { debug() << "status changed while introspection process was running"; pendingStatusChange = true; pendingStatus = newStatus; } } void ReadinessHelper::Private::setIntrospectCompleted(const Feature &feature, bool success, const QString &errorName, const QString &errorMessage) { debug() << "ReadinessHelper::setIntrospectCompleted: feature:" << feature << "- success:" << success; if (pendingStatusChange) { debug() << "ReadinessHelper::setIntrospectCompleted called while there is " "a pending status change - ignoring"; inFlightFeatures.remove(feature); // ignore all introspection completed as the state changed if (!inFlightFeatures.isEmpty()) { return; } pendingStatusChange = false; setCurrentStatus(pendingStatus); return; } Q_ASSERT(pendingFeatures.contains(feature)); Q_ASSERT(inFlightFeatures.contains(feature)); if (success) { satisfiedFeatures.insert(feature); } else { missingFeatures.insert(feature); missingFeaturesErrors.insert(feature, QPair(errorName, errorMessage)); if (errorName.isEmpty()) { warning() << "ReadinessHelper::setIntrospectCompleted: Feature" << feature << "introspection failed but no error message was given"; } } pendingFeatures.remove(feature); inFlightFeatures.remove(feature); QTimer::singleShot(0, parent, SLOT(iterateIntrospection())); } void ReadinessHelper::Private::iterateIntrospection() { if (proxy && !proxy->isValid()) { debug() << "ReadinessHelper: not iterating as the proxy is invalidated"; return; } // When there's a pending status change, we MUST NOT // - finish PendingReadys (as they'd not be finished in the new status) // - claim a status as being ready (because the new one isn't) // and SHOULD NOT // - fire new introspection jobs (as that would just delay the pending status change even more) // and NEED NOT // - flag features as missing (as the completed features will be cleared anyway when starting // introspection for the new status) // // So we can safely skip the rest of this function here. if (pendingStatusChange) { debug() << "ReadinessHelper: not iterating as a status change is pending"; return; } // Flag the currently pending reverse dependencies of any previously discovered missing features // as missing foreach (const Feature &feature, pendingFeatures) { if (!depsFor(feature).intersect(missingFeatures).isEmpty()) { missingFeatures.insert(feature); missingFeaturesErrors.insert(feature, QPair(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Feature depends on other features that are not available"))); } } const Features completedFeatures = satisfiedFeatures + missingFeatures; // check if any pending operations for becomeReady should finish now // based on their requested features having nothing more than what // satisfiedFeatures + missingFeatures has QString errorName; QString errorMessage; foreach (PendingReady *operation, pendingOperations) { if ((operation->requestedFeatures() - completedFeatures).isEmpty()) { if (parent->isReady(operation->requestedFeatures(), &errorName, &errorMessage)) { operation->setFinished(); } else { operation->setFinishedWithError(errorName, errorMessage); } // Remove the operation from tracking, so we don't double-finish it // // Qt foreach makes a copy of the container, which will be detached at this point, so // this is perfectly safe pendingOperations.removeOne(operation); } } if ((requestedFeatures - completedFeatures).isEmpty()) { // Otherwise, we'd emit statusReady with currentStatus although we are supposed to be // introspecting the pendingStatus and only when that is complete, emit statusReady Q_ASSERT(!pendingStatusChange); // all requested features satisfied or missing emit parent->statusReady(currentStatus); return; } // update pendingFeatures with the difference of requested and // satisfied + missing pendingFeatures -= completedFeatures; // find out which features don't have dependencies that are still pending Features readyToIntrospect; foreach (const Feature &feature, pendingFeatures) { // missing doesn't have to be considered here anymore if ((introspectables[feature].mPriv->dependsOnFeatures - satisfiedFeatures).isEmpty()) { readyToIntrospect.insert(feature); } } // now readyToIntrospect should contain all the features which have // all their feature dependencies satisfied foreach (const Feature &feature, readyToIntrospect) { if (inFlightFeatures.contains(feature)) { continue; } inFlightFeatures.insert(feature); Introspectable introspectable = introspectables[feature]; if (!introspectable.mPriv->makesSenseForStatuses.contains(currentStatus)) { // No-op satisfy features for which nothing has to be done in // the current state setIntrospectCompleted(feature, true); return; // will be called with a single-shot soon again } foreach (const QString &interface, introspectable.mPriv->dependsOnInterfaces) { if (!interfaces.contains(interface)) { // If a feature is ready to introspect and depends on a interface // that is not present the feature can't possibly be satisfied debug() << "feature" << feature << "depends on interfaces" << introspectable.mPriv->dependsOnInterfaces << ", but interface" << interface << "is not present"; setIntrospectCompleted(feature, false, TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Feature depend on interfaces that are not available")); return; // will be called with a single-shot soon again } } // yes, with the dependency info, we can even parallelize // introspection of several features at once, reducing total round trip // time considerably with many independent features! (*(introspectable.mPriv->introspectFunc))(introspectable.mPriv->introspectFuncData); } } Features ReadinessHelper::Private::depsFor(const Feature &feature) { Features deps; foreach (Feature dep, introspectables[feature].mPriv->dependsOnFeatures) { deps += dep; deps += depsFor(dep); } return deps; } void ReadinessHelper::Private::abortOperations(const QString &errorName, const QString &errorMessage) { foreach (PendingReady *operation, pendingOperations) { operation->setFinishedWithError(errorName, errorMessage); } pendingOperations.clear(); } /** * \class ReadinessHelper * \ingroup utils * \headerfile TelepathyQt/readiness-helper.h * * \brief The ReadinessHelper class is a helper class used by the introspection * process. */ /** * \class ReadinessHelper::Introspectable * \ingroup utils * \headerfile TelepathyQt/readiness-helper.h * * \brief The ReadinessHelper::Introspectable class represents a introspectable * used by ReadinessHelper. */ ReadinessHelper::ReadinessHelper(RefCounted *object, uint currentStatus, const Introspectables &introspectables, QObject *parent) : QObject(parent), mPriv(new Private(this, object, currentStatus, introspectables)) { } ReadinessHelper::ReadinessHelper(DBusProxy *proxy, uint currentStatus, const Introspectables &introspectables, QObject *parent) : QObject(parent), mPriv(new Private(this, proxy, currentStatus, introspectables)) { } ReadinessHelper::~ReadinessHelper() { delete mPriv; } void ReadinessHelper::addIntrospectables(const Introspectables &introspectables) { // QMap::unite will create multiple items if the key is already in the map // so let's make sure we don't duplicate keys for (Introspectables::const_iterator i = introspectables.constBegin(); i != introspectables.constEnd(); ++i) { Feature feature = i.key(); if (mPriv->introspectables.contains(feature)) { warning() << "ReadinessHelper::addIntrospectables: trying to add an " "introspectable for feature" << feature << "but introspectable " "for this feature already exists"; } else { Introspectable introspectable = i.value(); mPriv->introspectables.insert(feature, introspectable); mPriv->supportedStatuses += introspectable.mPriv->makesSenseForStatuses; mPriv->supportedFeatures += feature; } } debug() << "ReadinessHelper: new supportedStatuses =" << mPriv->supportedStatuses; debug() << "ReadinessHelper: new supportedFeatures =" << mPriv->supportedFeatures; } uint ReadinessHelper::currentStatus() const { return mPriv->currentStatus; } void ReadinessHelper::setCurrentStatus(uint currentStatus) { mPriv->setCurrentStatus(currentStatus); } /** * Force the current internal status to \a currentStatus. * * Note that this method will not start a new introspection or restart the * current one in case one is running. * * This is useful for example when the status is unknown initially but it will * become known in the first introspection run and there is no need to re-run * the introspection. * * \param currentStatus The status to set. */ void ReadinessHelper::forceCurrentStatus(uint currentStatus) { mPriv->currentStatus = currentStatus; } QStringList ReadinessHelper::interfaces() const { return mPriv->interfaces; } void ReadinessHelper::setInterfaces(const QStringList &interfaces) { mPriv->interfaces = interfaces; } Features ReadinessHelper::requestedFeatures() const { return mPriv->requestedFeatures; } Features ReadinessHelper::actualFeatures() const { return mPriv->satisfiedFeatures; } Features ReadinessHelper::missingFeatures() const { return mPriv->missingFeatures; } bool ReadinessHelper::isReady(const Feature &feature, QString *errorName, QString *errorMessage) const { if (mPriv->proxy && !mPriv->proxy->isValid()) { if (errorName) { *errorName = mPriv->proxy->invalidationReason(); } if (errorMessage) { *errorMessage = mPriv->proxy->invalidationMessage(); } return false; } if (!mPriv->supportedFeatures.contains(feature)) { if (errorName) { *errorName = TP_QT_ERROR_INVALID_ARGUMENT; } if (errorMessage) { *errorMessage = QLatin1String("Unsupported feature"); } return false; } bool ret = true; if (feature.isCritical()) { if (!mPriv->satisfiedFeatures.contains(feature)) { ret = false; } } else { if (!mPriv->satisfiedFeatures.contains(feature) && !mPriv->missingFeatures.contains(feature)) { ret = false; } } if (!ret) { QPair error = mPriv->missingFeaturesErrors[feature]; if (errorName) { *errorName = error.first; } if (errorMessage) { *errorMessage = error.second; } } return ret; } bool ReadinessHelper::isReady(const Features &features, QString *errorName, QString *errorMessage) const { if (mPriv->proxy && !mPriv->proxy->isValid()) { if (errorName) { *errorName = mPriv->proxy->invalidationReason(); } if (errorMessage) { *errorMessage = mPriv->proxy->invalidationMessage(); } return false; } Q_ASSERT(!features.isEmpty()); foreach (const Feature &feature, features) { if (!isReady(feature, errorName, errorMessage)) { return false; } } return true; } PendingReady *ReadinessHelper::becomeReady(const Features &requestedFeatures) { Q_ASSERT(!requestedFeatures.isEmpty()); if (mPriv->proxy) { connect(mPriv->proxy, SIGNAL(invalidated(Tp::DBusProxy*,QString,QString)), this, SLOT(onProxyInvalidated(Tp::DBusProxy*,QString,QString)), Qt::UniqueConnection); if (!mPriv->proxy->isValid()) { PendingReady *operation = new PendingReady(SharedPtr(mPriv->object), requestedFeatures); operation->setFinishedWithError(mPriv->proxy->invalidationReason(), mPriv->proxy->invalidationMessage()); return operation; } } Features supportedFeatures = mPriv->supportedFeatures; if (supportedFeatures.intersect(requestedFeatures) != requestedFeatures) { warning() << "ReadinessHelper::becomeReady called with invalid features: requestedFeatures =" << requestedFeatures << "- supportedFeatures =" << mPriv->supportedFeatures; PendingReady *operation = new PendingReady(SharedPtr(mPriv->object), requestedFeatures); operation->setFinishedWithError( TP_QT_ERROR_INVALID_ARGUMENT, QLatin1String("Requested features contains unsupported feature")); return operation; } if (mPriv->proxy && !mPriv->proxy->isValid()) { PendingReady *operation = new PendingReady(SharedPtr(mPriv->object), requestedFeatures); operation->setFinishedWithError(mPriv->proxy->invalidationReason(), mPriv->proxy->invalidationMessage()); return operation; } PendingReady *operation; foreach (operation, mPriv->pendingOperations) { if (operation->requestedFeatures() == requestedFeatures) { return operation; } } // Insert the dependencies of the requested features too Features requestedWithDeps = requestedFeatures; foreach (const Feature &feature, requestedFeatures) { requestedWithDeps.unite(mPriv->depsFor(feature)); } mPriv->requestedFeatures += requestedWithDeps; mPriv->pendingFeatures += requestedWithDeps; // will be updated in iterateIntrospection operation = new PendingReady(SharedPtr(mPriv->object), requestedFeatures); mPriv->pendingOperations.append(operation); // Only we finish these PendingReadys, so we don't need destroyed or finished handling for them // - we already know when that happens, as we caused it! QTimer::singleShot(0, this, SLOT(iterateIntrospection())); return operation; } void ReadinessHelper::setIntrospectCompleted(const Feature &feature, bool success, const QString &errorName, const QString &errorMessage) { if (mPriv->proxy && !mPriv->proxy->isValid()) { // proxy became invalid, ignore here return; } mPriv->setIntrospectCompleted(feature, success, errorName, errorMessage); } void ReadinessHelper::setIntrospectCompleted(const Feature &feature, bool success, const QDBusError &error) { setIntrospectCompleted(feature, success, error.name(), error.message()); } void ReadinessHelper::iterateIntrospection() { mPriv->iterateIntrospection(); } void ReadinessHelper::onProxyInvalidated(DBusProxy *proxy, const QString &errorName, const QString &errorMessage) { // clear satisfied and missing features as we have public methods to get them mPriv->satisfiedFeatures.clear(); mPriv->missingFeatures.clear(); mPriv->abortOperations(errorName, errorMessage); } } // Tp telepathy-qt-0.9.3/TelepathyQt/PendingVariantMap0000644000175200001440000000040312000056607024147 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_PendingVariantMap_HEADER_GUARD_ #define _TelepathyQt_PendingVariantMap_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/ChannelDispatchOperation0000644000175200001440000000043012000056607025511 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelDispatchOperation_HEADER_GUARD_ #define _TelepathyQt_ChannelDispatchOperation_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/future-channel.xml0000644000175200001440000000064512000056607024327 0ustar00collabora-develusers00000000000000 Channel extensions from the future telepathy-qt-0.9.3/TelepathyQt/dbus-proxy.cpp0000644000175200001440000002650212000056607023505 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2010 Collabora Ltd. * @copyright Copyright (C) 2008-2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include "config.h" #include #include "TelepathyQt/_gen/dbus-proxy.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include #include #include namespace Tp { // ==== DBusProxy ====================================================== // Features in TpProxy but not here: // * tracking which interfaces we have (in tpqt, subclasses do that) // * being Introspectable, a Peer and a Properties implementation // * disconnecting from signals when invalidated (probably has to be in the // generated code) // * making methods always raise an error when called after invalidated // (has to be in the generated code) struct TP_QT_NO_EXPORT DBusProxy::Private { Private(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath); QDBusConnection dbusConnection; QString busName; QString objectPath; QString invalidationReason; QString invalidationMessage; }; DBusProxy::Private::Private(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath) : dbusConnection(dbusConnection), busName(busName), objectPath(objectPath) { debug() << "Creating new DBusProxy"; } /** * \class DBusProxy * \ingroup clientproxies * \headerfile TelepathyQt/dbus-proxy.h * * \brief The DBusProxy class is a base class representing a remote object available over D-Bus. * * All Telepathy-Qt client convenience classes that wrap Telepathy interfaces * inherit from this class in order to provide basic D-Bus interface * information. */ /** * Construct a new DBusProxy object. * * \param dbusConnection QDBusConnection to use. * \param busName D-Bus bus name of the service that provides the remote object. * \param objectPath The object path. * \param featureCore The object core feature. */ DBusProxy::DBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore) : Object(), ReadyObject(this, featureCore), mPriv(new Private(dbusConnection, busName, objectPath)) { if (!dbusConnection.isConnected()) { invalidate(TP_QT_ERROR_DISCONNECTED, QLatin1String("DBus connection disconnected")); } } /** * Class destructor. */ DBusProxy::~DBusProxy() { delete mPriv; } /** * Return the D-Bus connection through which the remote object is * accessed. * * \return A QDBusConnection object. */ QDBusConnection DBusProxy::dbusConnection() const { return mPriv->dbusConnection; } /** * Return the D-Bus object path of the remote object within the service. * * \return The D-Bus object path. */ QString DBusProxy::objectPath() const { return mPriv->objectPath; } /** * Return the D-Bus bus name (either a unique name or a well-known * name) of the service that provides the remote object. * * \return The D-Bus bus name. */ QString DBusProxy::busName() const { return mPriv->busName; } /** * Sets the D-Bus bus name. This is used by subclasses after converting * well-known names to unique names. * * \param busName The D-Bus bus name to set. */ void DBusProxy::setBusName(const QString &busName) { mPriv->busName = busName; } /** * Return whether this proxy is still valid (has not emitted invalidated()). * * \return \c true if still valid, \c false otherwise. */ bool DBusProxy::isValid() const { return mPriv->invalidationReason.isEmpty(); } /** * Return the error name indicating the reason this proxy became invalid. * * \return A D-Bus error name, or QString() if this object is still valid. */ QString DBusProxy::invalidationReason() const { return mPriv->invalidationReason; } /** * Return a debugging message indicating the reason this proxy became invalid. * * \return A debugging message, or QString() if this object is still valid. */ QString DBusProxy::invalidationMessage() const { return mPriv->invalidationMessage; } /** * Called by subclasses when the DBusProxy should become invalid. * * This method takes care of setting the invalidationReason, * invalidationMessage, and emitting the invalidated signal. * * \param reason A D-Bus error name (a string in a subset of ASCII, * prefixed with a reversed domain name) * \param message A debugging message associated with the error */ void DBusProxy::invalidate(const QString &reason, const QString &message) { if (!isValid()) { debug().nospace() << "Already invalidated by " << mPriv->invalidationReason << ", not replacing with " << reason << " \"" << message << "\""; return; } Q_ASSERT(!reason.isEmpty()); debug().nospace() << "proxy invalidated: " << reason << ": " << message; mPriv->invalidationReason = reason; mPriv->invalidationMessage = message; Q_ASSERT(!isValid()); // Defer emitting the invalidated signal until we next // return to the mainloop. QTimer::singleShot(0, this, SLOT(emitInvalidated())); } void DBusProxy::invalidate(const QDBusError &error) { invalidate(error.name(), error.message()); } void DBusProxy::emitInvalidated() { Q_ASSERT(!isValid()); emit invalidated(this, mPriv->invalidationReason, mPriv->invalidationMessage); } /** * \fn void DBusProxy::invalidated(Tp::DBusProxy *proxy, * const QString &errorName, const QString &errorMessage) * * Emitted when this object is no longer usable. * * After this signal is emitted, any D-Bus method calls on the object * will fail, but it may be possible to retrieve information that has * already been retrieved and cached. * * \param proxy This proxy. * \param errorName The name of a D-Bus error describing the reason for the invalidation. * \param errorMessage A debugging message associated with the error. */ // ==== StatefulDBusProxy ============================================== struct TP_QT_NO_EXPORT StatefulDBusProxy::Private { Private(const QString &originalName) : originalName(originalName) {} QString originalName; }; /** * \class StatefulDBusProxy * \ingroup clientproxies * \headerfile TelepathyQt/dbus-proxy.h * * \brief The StatefulDBusProxy class is a base class representing a remote object whose API is * stateful. * * These objects do not remain useful if the service providing them exits or * crashes, so they emit invalidated() if this happens. * * Examples include the Connection and Channel classes. */ /** * Construct a new StatefulDBusProxy object. * * \param dbusConnection QDBusConnection to use. * \param busName D-Bus bus name of the service that provides the remote object. * \param objectPath The object path. * \param featureCore The object core feature. */ StatefulDBusProxy::StatefulDBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore) : DBusProxy(dbusConnection, busName, objectPath, featureCore), mPriv(new Private(busName)) { QDBusServiceWatcher *serviceWatcher = new QDBusServiceWatcher(busName, dbusConnection, QDBusServiceWatcher::WatchForUnregistration, this); connect(serviceWatcher, SIGNAL(serviceOwnerChanged(QString,QString,QString)), SLOT(onServiceOwnerChanged(QString,QString,QString))); QString error, message; QString uniqueName = uniqueNameFrom(dbusConnection, busName, error, message); if (uniqueName.isEmpty()) { invalidate(error, message); return; } setBusName(uniqueName); } /** * Class destructor. */ StatefulDBusProxy::~StatefulDBusProxy() { delete mPriv; } QString StatefulDBusProxy::uniqueNameFrom(const QDBusConnection &bus, const QString &name) { QString error, message; QString uniqueName = uniqueNameFrom(bus, name, error, message); if (uniqueName.isEmpty()) { warning() << "StatefulDBusProxy::uniqueNameFrom(): Failed to get unique name of" << name; warning() << " error:" << error << "message:" << message; } return uniqueName; } QString StatefulDBusProxy::uniqueNameFrom(const QDBusConnection &bus, const QString &name, QString &error, QString &message) { if (name.startsWith(QLatin1String(":"))) { return name; } // For a stateful interface, it makes no sense to follow name-owner // changes, so we want to bind to the unique name. QDBusReply reply = bus.interface()->serviceOwner(name); if (reply.isValid()) { return reply.value(); } else { error = reply.error().name(); message = reply.error().message(); return QString(); } } void StatefulDBusProxy::onServiceOwnerChanged(const QString &name, const QString &oldOwner, const QString &newOwner) { // We only want to invalidate this object if it is not already invalidated, // and its (not any other object's) name owner changed signal is emitted. if (isValid() && name == mPriv->originalName && newOwner.isEmpty()) { invalidate(TP_QT_DBUS_ERROR_NAME_HAS_NO_OWNER, QLatin1String("Name owner lost (service crashed?)")); } } // ==== StatelessDBusProxy ============================================= /** * \class StatelessDBusProxy * \ingroup clientproxies * \headerfile TelepathyQt/dbus-proxy.h * * \brief The StatelessDBusProxy class is a base class representing a remote object whose API is * basically stateless. * * These objects can remain valid even if the service providing them exits * and is restarted. * * Examples include the AccountManager, Account and ConnectionManager. */ /** * Construct a new StatelessDBusProxy object. * * \param dbusConnection QDBusConnection to use. * \param busName D-Bus bus name of the service that provides the remote object. * \param objectPath The object path. * \param featureCore The object core feature. */ StatelessDBusProxy::StatelessDBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore) : DBusProxy(dbusConnection, busName, objectPath, featureCore), mPriv(0) { if (busName.startsWith(QLatin1String(":"))) { warning() << "Using StatelessDBusProxy for a unique name does not make sense"; } } /** * Class destructor. */ StatelessDBusProxy::~StatelessDBusProxy() { } } // Tp telepathy-qt-0.9.3/TelepathyQt/IntrospectableInterface0000644000175200001440000000040012000056607025374 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_IntrospectableInterface_HEADER_GUARD_ #define _TelepathyQt_IntrospectableInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/account-property-filter.h0000644000175200001440000000314712000056607025637 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_account_property_filter_h_HEADER_GUARD_ #define _TelepathyQt_account_property_filter_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include namespace Tp { class TP_QT_EXPORT AccountPropertyFilter : public GenericPropertyFilter { public: static AccountPropertyFilterPtr create() { return AccountPropertyFilterPtr(new AccountPropertyFilter); } ~AccountPropertyFilter(); bool isValid() const; private: AccountPropertyFilter(); struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/ChannelInterfaceMessagesInterface0000644000175200001440000000042712000056607027310 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelInterfaceMessagesInterface_HEADER_GUARD_ #define _TelepathyQt_ChannelInterfaceMessagesInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/WeakPtr0000644000175200001440000000034612000056607022163 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_WeakPtr_HEADER_GUARD_ #define _TelepathyQt_WeakPtr_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/incoming-dbus-tube-channel.cpp0000644000175200001440000001650312000056607026472 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/incoming-dbus-tube-channel.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT IncomingDBusTubeChannel::Private { public: Private(IncomingDBusTubeChannel *parent); // Public object IncomingDBusTubeChannel *parent; }; IncomingDBusTubeChannel::Private::Private(IncomingDBusTubeChannel *parent) : parent(parent) { } /** * \class IncomingDBusTubeChannel * \ingroup clientchannel * \headerfile TelepathyQt/incoming-dbus-tube-channel.h * * \brief The IncomingStreamTubeChannel class represents an incoming Telepathy channel * of type StreamTube. * * In particular, this class is meant to be used as a comfortable way for * accepting incoming DBus tubes. Unless a different behavior is specified, tubes * will be always accepted allowing connections just from the current user, unless this * or one of the other ends do not support that. Unless your application has specific needs, * you usually want to keep this behavior. * * Once a tube is successfully accepted and open (the PendingDBusTubeConnection returned from the * accepting methods has finished), the application can connect to the DBus server, the address of which * can be retrieved from PendingDBusTubeConnection::address(). * * \note If you plan to use QtDBus for the DBus connection, please note you should always use * QDBusConnection::connectToPeer(), regardless of the fact this tube is a p2p or a group one. * The above function has been introduced in Qt 4.8, previous versions of Qt do not allow the use * of DBus Tubes through QtDBus. * * For more details, please refer to \telepathy_spec. * * See \ref async_model, \ref shared_ptr */ /** * Create a new IncomingDBusTubeChannel channel. * * \param connection Connection owning this channel, and specifying the * service. * \param objectPath The object path of this channel. * \param immutableProperties The immutable properties of this channel. * \return A IncomingDBusTubeChannelPtr object pointing to the newly created * IncomingDBusTubeChannel object. */ IncomingDBusTubeChannelPtr IncomingDBusTubeChannel::create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) { return IncomingDBusTubeChannelPtr(new IncomingDBusTubeChannel(connection, objectPath, immutableProperties)); } /** * Construct a new IncomingDBusTubeChannel object. * * \param connection Connection owning this channel, and specifying the * service. * \param objectPath The object path of this channel. * \param immutableProperties The immutable properties of this channel. */ IncomingDBusTubeChannel::IncomingDBusTubeChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) : DBusTubeChannel(connection, objectPath, immutableProperties), mPriv(new Private(this)) { } /** * Class destructor. */ IncomingDBusTubeChannel::~IncomingDBusTubeChannel() { delete mPriv; } /** * Accepts an incoming DBus tube. * * This method accepts an incoming connection request for a DBus tube. It can be called * only if the tube is in the \c LocalPending state. * * Once called, this method will try opening the tube, and will create a new private DBus connection * which can be used to communicate with the other end. You can then * retrieve the address either from \c PendingDBusTubeConnection or from %address(). * * This method requires DBusTubeChannel::FeatureCore to be enabled. * * \param allowOtherUsers Whether the server should allow other users to connect to this tube more * than just the current one. If your application has no specific needs, it is * advisable not to modify the default value of this argument. * * \note If allowOtherUsers == false, but one of the ends does not support current user restriction, * the tube will be offered regardless, falling back to allowing any connection. If your * application requires strictly this condition to be enforced, you should check * DBusTubeChannel::supportsRestrictingToCurrentUser before accepting the tube, * and take action from there. * The tube is guaranteed either to be accepted with the desired * restriction or to fail the accept phase if supportsRestrictingToCurrentUser is true * and allowOtherUsers is false. * * \return A %PendingDBusTubeConnection which will finish as soon as the tube is ready to be used * (hence in the Open state) */ PendingDBusTubeConnection *IncomingDBusTubeChannel::acceptTube(bool allowOtherUsers) { SocketAccessControl accessControl = allowOtherUsers ? SocketAccessControlLocalhost : SocketAccessControlCredentials; if (!isReady(DBusTubeChannel::FeatureCore)) { warning() << "DBusTubeChannel::FeatureCore must be ready before " "calling acceptTube"; return new PendingDBusTubeConnection(QLatin1String(TP_QT_ERROR_NOT_AVAILABLE), QLatin1String("Channel not ready"), IncomingDBusTubeChannelPtr(this)); } // The tube must be in local pending state if (state() != TubeChannelStateLocalPending) { warning() << "You can accept tubes only when they are in LocalPending state"; return new PendingDBusTubeConnection(QLatin1String(TP_QT_ERROR_NOT_AVAILABLE), QLatin1String("Channel busy"), IncomingDBusTubeChannelPtr(this)); } // Let's accept the tube if (!allowOtherUsers && !supportsRestrictingToCurrentUser()) { warning() << "Current user restriction is not available for this tube, " "falling back to allowing any connection"; accessControl = SocketAccessControlLocalhost; } PendingString *ps = new PendingString( interface()->Accept( accessControl), IncomingDBusTubeChannelPtr(this)); PendingDBusTubeConnection *op = new PendingDBusTubeConnection(ps, accessControl == SocketAccessControlLocalhost, QVariantMap(), IncomingDBusTubeChannelPtr(this)); return op; } } telepathy-qt-0.9.3/TelepathyQt/ConnectionInterfaceContactBlockingInterface0000644000175200001440000000045612000056607031336 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ConnectionInterfaceContactBlockingInterface_HEADER_GUARD_ #define _TelepathyQt_ConnectionInterfaceContactBlockingInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/ConnectionInterfaceContactGroupsInterface0000644000175200001440000000045212000056607031061 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ConnectionInterfaceContactGroupsInterface_HEADER_GUARD_ #define _TelepathyQt_ConnectionInterfaceContactGroupsInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/account.cpp0000644000175200001440000060070612000056607023031 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2012 Collabora Ltd. * @copyright Copyright (C) 2008 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/account.moc.hpp" #include "TelepathyQt/_gen/cli-account.moc.hpp" #include "TelepathyQt/_gen/cli-account-body.hpp" #include "TelepathyQt/debug-internal.h" #include "TelepathyQt/connection-internal.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace Tp { namespace { struct PresenceStatusInfo { QString name; Tp::SimpleStatusSpec spec; }; Tp::ConnectionPresenceType presenceTypeForStatus(const QString &status, bool &maySetOnSelf) { static PresenceStatusInfo statuses[] = { { QLatin1String("available"), { Tp::ConnectionPresenceTypeAvailable, true, true } }, { QLatin1String("chat"), { Tp::ConnectionPresenceTypeAvailable, true, true } }, { QLatin1String("chatty"), { Tp::ConnectionPresenceTypeAvailable, true, true } }, { QLatin1String("away"), { Tp::ConnectionPresenceTypeAway, true, true } }, { QLatin1String("brb"), { Tp::ConnectionPresenceTypeAway, true, true } }, { QLatin1String("out-to-lunch"), { Tp::ConnectionPresenceTypeAway, true, true } }, { QLatin1String("xa"), { Tp::ConnectionPresenceTypeExtendedAway, true, true } }, { QLatin1String("hidden"), { Tp::ConnectionPresenceTypeHidden, true, true } }, { QLatin1String("invisible"), { Tp::ConnectionPresenceTypeHidden, true, true } }, { QLatin1String("offline"), { Tp::ConnectionPresenceTypeOffline, true, false } }, { QLatin1String("unknown"), { Tp::ConnectionPresenceTypeUnknown, false, false } }, { QLatin1String("error"), { Tp::ConnectionPresenceTypeError, false, false } } }; for (uint i = 0; i < sizeof(statuses) / sizeof(PresenceStatusInfo); ++i) { if (status == statuses[i].name) { maySetOnSelf = statuses[i].spec.maySetOnSelf; return (Tp::ConnectionPresenceType) statuses[i].spec.type; } } // fallback to type away if we don't know status maySetOnSelf = true; return Tp::ConnectionPresenceTypeAway; } Tp::PresenceSpec presenceSpecForStatus(const QString &status, bool canHaveStatusMessage) { Tp::SimpleStatusSpec spec; spec.type = presenceTypeForStatus(status, spec.maySetOnSelf); spec.canHaveMessage = canHaveStatusMessage; return Tp::PresenceSpec(status, spec); } QVariantMap textChatCommonRequest() { QVariantMap request; request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_TEXT); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) Tp::HandleTypeContact); return request; } QVariantMap textChatRequest(const QString &contactIdentifier) { QVariantMap request = textChatCommonRequest(); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetID"), contactIdentifier); return request; } QVariantMap textChatRequest(const Tp::ContactPtr &contact) { QVariantMap request = textChatCommonRequest(); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandle"), contact ? contact->handle().at(0) : (uint) 0); return request; } QVariantMap textChatroomRequest(const QString &roomName) { QVariantMap request; request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_TEXT); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) Tp::HandleTypeRoom); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetID"), roomName); return request; } QVariantMap callCommonRequest(bool withAudio, const QString &audioName, bool withVideo, const QString &videoName) { QVariantMap request; request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_CALL); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) Tp::HandleTypeContact); if (withAudio) { request.insert(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudio"), true); if (!audioName.isEmpty()) { request.insert(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudioName"), audioName); } } if (withVideo) { request.insert(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideo"), true); if (!videoName.isEmpty()) { request.insert(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideoName"), videoName); } } return request; } QVariantMap audioCallRequest(const QString &contactIdentifier, const QString &contentName) { QVariantMap request = callCommonRequest(true, contentName, false, QString()); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetID"), contactIdentifier); return request; } QVariantMap audioCallRequest(const Tp::ContactPtr &contact, const QString &contentName) { QVariantMap request = callCommonRequest(true, contentName, false, QString()); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandle"), contact ? contact->handle().at(0) : (uint) 0); return request; } QVariantMap videoCallRequest(const QString &contactIdentifier, const QString &contentName) { QVariantMap request = callCommonRequest(false, QString(), true, contentName); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetID"), contactIdentifier); return request; } QVariantMap videoCallRequest(const Tp::ContactPtr &contact, const QString &contentName) { QVariantMap request = callCommonRequest(false, QString(), true, contentName); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandle"), contact ? contact->handle().at(0) : (uint) 0); return request; } QVariantMap audioVideoCallRequest(const QString &contactIdentifier, const QString &audioName, const QString &videoName) { QVariantMap request = callCommonRequest(true, audioName, true, videoName); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetID"), contactIdentifier); return request; } QVariantMap audioVideoCallRequest(const Tp::ContactPtr &contact, const QString &audioName, const QString &videoName) { QVariantMap request = callCommonRequest(true, audioName, true, videoName); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandle"), contact ? contact->handle().at(0) : (uint) 0); return request; } QVariantMap streamedMediaCallCommonRequest() { QVariantMap request; request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) Tp::HandleTypeContact); return request; } QVariantMap streamedMediaCallRequest(const QString &contactIdentifier) { QVariantMap request = streamedMediaCallCommonRequest(); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetID"), contactIdentifier); return request; } QVariantMap streamedMediaCallRequest(const Tp::ContactPtr &contact) { QVariantMap request = streamedMediaCallCommonRequest(); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandle"), contact ? contact->handle().at(0) : (uint) 0); return request; } QVariantMap streamedMediaAudioCallRequest(const QString &contactIdentifier) { QVariantMap request = streamedMediaCallRequest(contactIdentifier); request.insert(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialAudio"), true); return request; } QVariantMap streamedMediaAudioCallRequest(const Tp::ContactPtr &contact) { QVariantMap request = streamedMediaCallRequest(contact); request.insert(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialAudio"), true); return request; } QVariantMap streamedMediaVideoCallRequest(const QString &contactIdentifier, bool withAudio) { QVariantMap request = streamedMediaCallRequest(contactIdentifier); request.insert(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialVideo"), true); if (withAudio) { request.insert(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialAudio"), true); } return request; } QVariantMap streamedMediaVideoCallRequest(const Tp::ContactPtr &contact, bool withAudio) { QVariantMap request = streamedMediaCallRequest(contact); request.insert(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialVideo"), true); if (withAudio) { request.insert(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialAudio"), true); } return request; } QVariantMap fileTransferCommonRequest(const Tp::FileTransferChannelCreationProperties &properties) { if (!properties.isValid()) { warning() << "Invalid file transfer creation properties"; return QVariantMap(); } QVariantMap request; request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_FILE_TRANSFER); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) Tp::HandleTypeContact); request.insert(TP_QT_IFACE_CHANNEL_TYPE_FILE_TRANSFER + QLatin1String(".Filename"), properties.suggestedFileName()); request.insert(TP_QT_IFACE_CHANNEL_TYPE_FILE_TRANSFER + QLatin1String(".ContentType"), properties.contentType()); request.insert(TP_QT_IFACE_CHANNEL_TYPE_FILE_TRANSFER + QLatin1String(".Size"), properties.size()); if (properties.hasContentHash()) { request.insert(TP_QT_IFACE_CHANNEL_TYPE_FILE_TRANSFER + QLatin1String(".ContentHashType"), (uint) properties.contentHashType()); request.insert(TP_QT_IFACE_CHANNEL_TYPE_FILE_TRANSFER + QLatin1String(".ContentHash"), properties.contentHash()); } if (properties.hasDescription()) { request.insert(TP_QT_IFACE_CHANNEL_TYPE_FILE_TRANSFER + QLatin1String(".Description"), properties.description()); } if (properties.hasLastModificationTime()) { request.insert(TP_QT_IFACE_CHANNEL_TYPE_FILE_TRANSFER + QLatin1String(".Date"), (qulonglong) properties.lastModificationTime().toTime_t()); } if (properties.hasUri()) { request.insert(TP_QT_IFACE_CHANNEL_TYPE_FILE_TRANSFER + QLatin1String(".URI"), properties.uri()); } return request; } QVariantMap fileTransferRequest(const QString &contactIdentifier, const Tp::FileTransferChannelCreationProperties &properties) { QVariantMap request = fileTransferCommonRequest(properties); if (!request.isEmpty()) { request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetID"), contactIdentifier); } return request; } QVariantMap fileTransferRequest(const Tp::ContactPtr &contact, const Tp::FileTransferChannelCreationProperties &properties) { QVariantMap request = fileTransferCommonRequest(properties); if (!request.isEmpty()) { request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandle"), contact ? contact->handle().at(0) : (uint) 0); } return request; } QVariantMap streamTubeCommonRequest(const QString &service) { QVariantMap request; request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_STREAM_TUBE); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) Tp::HandleTypeContact); request.insert(TP_QT_IFACE_CHANNEL_TYPE_STREAM_TUBE + QLatin1String(".Service"), service); return request; } QVariantMap streamTubeRequest(const QString &contactIdentifier, const QString &service) { QVariantMap request = streamTubeCommonRequest(service); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetID"), contactIdentifier); return request; } QVariantMap streamTubeRequest(const Tp::ContactPtr &contact, const QString &service) { QVariantMap request = streamTubeCommonRequest(service); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandle"), contact ? contact->handle().at(0) : (uint) 0); return request; } QVariantMap dbusTubeCommonRequest(const QString &serviceName) { QVariantMap request; request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_DBUS_TUBE); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) Tp::HandleTypeContact); request.insert(TP_QT_IFACE_CHANNEL_TYPE_DBUS_TUBE + QLatin1String(".ServiceName"), serviceName); return request; } QVariantMap dbusTubeRequest(const QString &contactIdentifier, const QString &serviceName) { QVariantMap request = dbusTubeCommonRequest(serviceName); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetID"), contactIdentifier); return request; } QVariantMap dbusTubeRequest(const Tp::ContactPtr &contact, const QString &serviceName) { QVariantMap request = dbusTubeCommonRequest(serviceName); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandle"), contact ? contact->handle().at(0) : (uint) 0); return request; } QVariantMap conferenceCommonRequest(const QString &channelType, Tp::HandleType targetHandleType, const QList &channels) { QVariantMap request; request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), channelType); if (targetHandleType != Tp::HandleTypeNone) { request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) targetHandleType); } Tp::ObjectPathList objectPaths; foreach (const Tp::ChannelPtr &channel, channels) { objectPaths << QDBusObjectPath(channel->objectPath()); } request.insert(TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialChannels"), qVariantFromValue(objectPaths)); return request; } QVariantMap conferenceRequest(const QString &channelType, Tp::HandleType targetHandleType, const QList &channels, const QStringList &initialInviteeContactsIdentifiers) { QVariantMap request = conferenceCommonRequest(channelType, targetHandleType, channels); if (!initialInviteeContactsIdentifiers.isEmpty()) { request.insert(TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialInviteeIDs"), initialInviteeContactsIdentifiers); } return request; } QVariantMap conferenceRequest(const QString &channelType, Tp::HandleType targetHandleType, const QList &channels, const QList &initialInviteeContacts) { QVariantMap request = conferenceCommonRequest(channelType, targetHandleType, channels); if (!initialInviteeContacts.isEmpty()) { Tp::UIntList handles; foreach (const Tp::ContactPtr &contact, initialInviteeContacts) { if (!contact) { continue; } handles << contact->handle()[0]; } if (!handles.isEmpty()) { request.insert(TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialInviteeHandles"), qVariantFromValue(handles)); } } return request; } QVariantMap conferenceTextChatRequest(const QList &channels, const QStringList &initialInviteeContactsIdentifiers) { QVariantMap request = conferenceRequest(TP_QT_IFACE_CHANNEL_TYPE_TEXT, Tp::HandleTypeNone, channels, initialInviteeContactsIdentifiers); return request; } QVariantMap conferenceTextChatRequest(const QList &channels, const QList &initialInviteeContacts) { QVariantMap request = conferenceRequest(TP_QT_IFACE_CHANNEL_TYPE_TEXT, Tp::HandleTypeNone, channels, initialInviteeContacts); return request; } QVariantMap conferenceTextChatroomRequest(const QString &roomName, const QList &channels, const QStringList &initialInviteeContactsIdentifiers) { QVariantMap request = conferenceRequest(TP_QT_IFACE_CHANNEL_TYPE_TEXT, Tp::HandleTypeRoom, channels, initialInviteeContactsIdentifiers); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetID"), roomName); return request; } QVariantMap conferenceTextChatroomRequest(const QString &roomName, const QList &channels, const QList &initialInviteeContacts) { QVariantMap request = conferenceRequest(TP_QT_IFACE_CHANNEL_TYPE_TEXT, Tp::HandleTypeRoom, channels, initialInviteeContacts); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetID"), roomName); return request; } QVariantMap conferenceStreamedMediaCallRequest(const QList &channels, const QStringList &initialInviteeContactsIdentifiers) { QVariantMap request = conferenceRequest(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA, Tp::HandleTypeNone, channels, initialInviteeContactsIdentifiers); return request; } QVariantMap conferenceStreamedMediaCallRequest(const QList &channels, const QList &initialInviteeContacts) { QVariantMap request = conferenceRequest(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA, Tp::HandleTypeNone, channels, initialInviteeContacts); return request; } QVariantMap contactSearchRequest(const ConnectionCapabilities &capabilities, const QString &server, uint limit) { QVariantMap request; request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH); if (capabilities.contactSearchesWithSpecificServer()) { request.insert(TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH + QLatin1String(".Server"), server); } else if (!server.isEmpty()) { warning() << "Ignoring Server parameter for contact search, since the protocol does not support it."; } if (capabilities.contactSearchesWithLimit()) { request.insert(TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH + QLatin1String(".Limit"), limit); } else if (limit > 0) { warning() << "Ignoring Limit parameter for contact search, since the protocol does not support it."; } return request; } } // anonymous namespace struct TP_QT_NO_EXPORT Account::Private { Private(Account *parent, const ConnectionFactoryConstPtr &connFactory, const ChannelFactoryConstPtr &chanFactory, const ContactFactoryConstPtr &contactFactory); ~Private(); void init(); static void introspectMain(Private *self); static void introspectAvatar(Private *self); static void introspectProtocolInfo(Private *self); static void introspectCapabilities(Private *self); void updateProperties(const QVariantMap &props); void retrieveAvatar(); bool processConnQueue(); bool checkCapabilitiesChanged(bool profileChanged); QString connectionObjectPath() const; // Public object Account *parent; // Factories ConnectionFactoryConstPtr connFactory; ChannelFactoryConstPtr chanFactory; ContactFactoryConstPtr contactFactory; // Instance of generated interface class Client::AccountInterface *baseInterface; // Mandatory properties interface proxy Client::DBus::PropertiesInterface *properties; ReadinessHelper *readinessHelper; // Introspection QVariantMap parameters; bool valid; bool enabled; bool connectsAutomatically; bool hasBeenOnline; bool changingPresence; QString cmName; QString protocolName; QString serviceName; ProfilePtr profile; QString displayName; QString nickname; QString iconName; QQueue connObjPathQueue; ConnectionPtr connection; bool mayFinishCore, coreFinished; QString normalizedName; Avatar avatar; ConnectionManagerPtr cm; ConnectionStatus connectionStatus; ConnectionStatusReason connectionStatusReason; QString connectionError; Connection::ErrorDetails connectionErrorDetails; Presence automaticPresence; Presence currentPresence; Presence requestedPresence; bool usingConnectionCaps; ConnectionCapabilities customCaps; // The contexts should never be removed from the map, to guarantee O(1) CD introspections per bus struct DispatcherContext; static QHash > dispatcherContexts; QSharedPointer dispatcherContext; }; struct Account::Private::DispatcherContext { DispatcherContext(const QDBusConnection &bus) : iface(new Client::ChannelDispatcherInterface(bus, TP_QT_CHANNEL_DISPATCHER_BUS_NAME, TP_QT_CHANNEL_DISPATCHER_OBJECT_PATH)), introspected(false), supportsHints(false) { } ~DispatcherContext() { delete iface; } Client::ChannelDispatcherInterface *iface; bool introspected, supportsHints; QWeakPointer introspectOp; private: DispatcherContext(const DispatcherContext &); void operator=(const DispatcherContext &); }; Account::Private::Private(Account *parent, const ConnectionFactoryConstPtr &connFactory, const ChannelFactoryConstPtr &chanFactory, const ContactFactoryConstPtr &contactFactory) : parent(parent), connFactory(connFactory), chanFactory(chanFactory), contactFactory(contactFactory), baseInterface(new Client::AccountInterface(parent)), properties(parent->interface()), readinessHelper(parent->readinessHelper()), valid(false), enabled(false), connectsAutomatically(false), hasBeenOnline(false), changingPresence(false), mayFinishCore(false), coreFinished(false), connectionStatus(ConnectionStatusDisconnected), connectionStatusReason(ConnectionStatusReasonNoneSpecified), usingConnectionCaps(false), dispatcherContext(dispatcherContexts.value(parent->dbusConnection().name())) { // FIXME: QRegExp probably isn't the most efficient possible way to parse // this :-) QRegExp rx(QLatin1String("^") + TP_QT_ACCOUNT_OBJECT_PATH_BASE + QLatin1String("/([_A-Za-z][_A-Za-z0-9]*)" // cap(1) is the CM "/([_A-Za-z][_A-Za-z0-9]*)" // cap(2) is the protocol "/([_A-Za-z][_A-Za-z0-9]*)" // account-specific part )); if (rx.exactMatch(parent->objectPath())) { cmName = rx.cap(1); protocolName = rx.cap(2).replace(QLatin1Char('_'), QLatin1Char('-')); } else { warning() << "Account object path is not spec-compliant, " "trying again with a different account-specific part check"; rx = QRegExp(QLatin1String("^") + TP_QT_ACCOUNT_OBJECT_PATH_BASE + QLatin1String("/([_A-Za-z][_A-Za-z0-9]*)" // cap(1) is the CM "/([_A-Za-z][_A-Za-z0-9]*)" // cap(2) is the protocol "/([_A-Za-z0-9]*)" // account-specific part )); if (rx.exactMatch(parent->objectPath())) { cmName = rx.cap(1); protocolName = rx.cap(2).replace(QLatin1Char('_'), QLatin1Char('-')); } else { warning() << "Not a valid Account object path:" << parent->objectPath(); } } ReadinessHelper::Introspectables introspectables; // As Account does not have predefined statuses let's simulate one (0) ReadinessHelper::Introspectable introspectableCore( QSet() << 0, // makesSenseForStatuses Features(), // dependsOnFeatures QStringList(), // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::introspectMain, this); introspectables[FeatureCore] = introspectableCore; ReadinessHelper::Introspectable introspectableAvatar( QSet() << 0, // makesSenseForStatuses Features() << FeatureCore, // dependsOnFeatures (core) QStringList() << TP_QT_IFACE_ACCOUNT_INTERFACE_AVATAR, // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::introspectAvatar, this); introspectables[FeatureAvatar] = introspectableAvatar; ReadinessHelper::Introspectable introspectableProtocolInfo( QSet() << 0, // makesSenseForStatuses Features() << FeatureCore, // dependsOnFeatures (core) QStringList(), // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::introspectProtocolInfo, this); introspectables[FeatureProtocolInfo] = introspectableProtocolInfo; ReadinessHelper::Introspectable introspectableCapabilities( QSet() << 0, // makesSenseForStatuses Features() << FeatureCore << FeatureProtocolInfo << FeatureProfile, // dependsOnFeatures QStringList(), // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::introspectCapabilities, this); introspectables[FeatureCapabilities] = introspectableCapabilities; readinessHelper->addIntrospectables(introspectables); if (connFactory->dbusConnection().name() != parent->dbusConnection().name()) { warning() << " The D-Bus connection in the conn factory is not the proxy connection for" << parent->objectPath(); } if (chanFactory->dbusConnection().name() != parent->dbusConnection().name()) { warning() << " The D-Bus connection in the channel factory is not the proxy connection for" << parent->objectPath(); } if (!dispatcherContext) { dispatcherContext = QSharedPointer(new DispatcherContext(parent->dbusConnection())); dispatcherContexts.insert(parent->dbusConnection().name(), dispatcherContext); } init(); } Account::Private::~Private() { } bool Account::Private::checkCapabilitiesChanged(bool profileChanged) { /* when the capabilities changed: * * - We were using the connection caps and now we don't have connection or * the connection we have is not connected (changed to CM caps) * - We were using the CM caps and now we have a connected connection * (changed to new connection caps) */ bool changed = false; if (usingConnectionCaps && (parent->connection().isNull() || connection->status() != ConnectionStatusConnected)) { usingConnectionCaps = false; changed = true; } else if (!usingConnectionCaps && !parent->connection().isNull() && connection->status() == ConnectionStatusConnected) { usingConnectionCaps = true; changed = true; } else if (!usingConnectionCaps && profileChanged) { changed = true; } if (changed && parent->isReady(FeatureCapabilities)) { emit parent->capabilitiesChanged(parent->capabilities()); } return changed; } QString Account::Private::connectionObjectPath() const { return !connection.isNull() ? connection->objectPath() : QString(); } QHash > Account::Private::dispatcherContexts; /** * \class Account * \ingroup clientaccount * \headerfile TelepathyQt/account.h * * \brief The Account class represents a Telepathy account. * * The remote object accessor functions on this object (isValidAccount(), * isEnabled(), and so on) don't make any D-Bus calls; instead, they return/use * values cached from a previous introspection run. The introspection process * populates their values in the most efficient way possible based on what the * service implements. * * To avoid unnecessary D-Bus traffic, some accessors only return valid * information after specific features have been enabled. * For instance, to retrieve the account protocol information, it is necessary to * enable the feature Account::FeatureProtocolInfo. * See the individual methods descriptions for more details. * * Account features can be enabled by constructing an AccountFactory and enabling * the desired features, and passing it to AccountManager or ClientRegistrar * when creating them as appropriate. However, if a particular * feature is only ever used in a specific circumstance, such as an user opening * some settings dialog separate from the general view of the application, * features can be later enabled as needed by calling becomeReady() with the additional * features, and waiting for the resulting PendingOperation to finish. * * As an addition to accessors, signals are emitted to indicate that properties have * changed, for example displayNameChanged(), iconNameChanged(), etc. * * Convenience methods to create channels using the channel dispatcher such as * ensureTextChat(), createFileTransfer() are also provided. * * If the account is deleted from the AccountManager, this object * will not be deleted automatically; however, it will emit invalidated() * with error code #TP_QT_ERROR_OBJECT_REMOVED and will cease to * be useful. * * \section account_usage_sec Usage * * \subsection account_create_sec Creating an account object * * The easiest way to create account objects is through AccountManager. One can * just use the AccountManager convenience methods such as * AccountManager::validAccounts() to get a list of account objects representing * valid accounts. * * If you already know the object path, you can just call create(). * For example: * * \code AccountPtr acc = Account::create(busName, objectPath); \endcode * * An AccountPtr object is returned, which will automatically keep * track of object lifetime. * * You can also provide a D-Bus connection as a QDBusConnection: * * \code * * AccountPtr acc = Account::create(QDBusConnection::sessionBus(), * busName, objectPath); * * \endcode * * \subsection account_ready_sec Making account ready to use * * An Account object needs to become ready before usage, meaning that the * introspection process finished and the object accessors can be used. * * To make the object ready, use becomeReady() and wait for the * PendingOperation::finished() signal to be emitted. * * \code * * class MyClass : public QObject * { * QOBJECT * * public: * MyClass(QObject *parent = 0); * ~MyClass() { } * * private Q_SLOTS: * void onAccountReady(Tp::PendingOperation*); * * private: * AccountPtr acc; * }; * * MyClass::MyClass(const QString &busName, const QString &objectPath, * QObject *parent) * : QObject(parent) * acc(Account::create(busName, objectPath)) * { * connect(acc->becomeReady(), * SIGNAL(finished(Tp::PendingOperation*)), * SLOT(onAccountReady(Tp::PendingOperation*))); * } * * void MyClass::onAccountReady(Tp::PendingOperation *op) * { * if (op->isError()) { * qWarning() << "Account cannot become ready:" << * op->errorName() << "-" << op->errorMessage(); * return; * } * * // Account is now ready * qDebug() << "Display name:" << acc->displayName(); * } * * \endcode * * See \ref async_model, \ref shared_ptr */ /** * Feature representing the core that needs to become ready to make the Account * object usable. * * Note that this feature must be enabled in order to use most Account methods. * See specific methods documentation for more details. * * When calling isReady(), becomeReady(), this feature is implicitly added * to the requested features. */ const Feature Account::FeatureCore = Feature(QLatin1String(Account::staticMetaObject.className()), 0, true); /** * Feature used in order to access account avatar info. * * See avatar specific methods' documentation for more details. * * \sa avatar(), avatarChanged() */ const Feature Account::FeatureAvatar = Feature(QLatin1String(Account::staticMetaObject.className()), 1); /** * Feature used in order to access account protocol info. * * See protocol info specific methods' documentation for more details. * * \sa protocolInfo() */ const Feature Account::FeatureProtocolInfo = Feature(QLatin1String(Account::staticMetaObject.className()), 2); /** * Feature used in order to access account capabilities. * * Enabling this feature will also enable FeatureProtocolInfo and FeatureProfile. * * See capabilities specific methods' documentation for more details. * * \sa capabilities(), capabilitiesChanged() */ const Feature Account::FeatureCapabilities = Feature(QLatin1String(Account::staticMetaObject.className()), 3); /** * Feature used in order to access account profile info. * * See profile specific methods' documentation for more details. * * \sa profile(), profileChanged() */ const Feature Account::FeatureProfile = FeatureProtocolInfo; // FeatureProfile is the same as FeatureProtocolInfo for now, as it only needs // the protocol info, cm name and protocol name to build a fake profile. Make it // a full-featured feature if needed later. /** * Create a new Account object using QDBusConnection::sessionBus() and the given factories. * * A warning is printed if the factories are not for QDBusConnection::sessionBus(). * * \param busName The account well-known bus name (sometimes called a "service * name"). This is usually the same as the account manager * bus name #TP_QT_ACCOUNT_MANAGER_BUS_NAME. * \param objectPath The account object path. * \param connectionFactory The connection factory to use. * \param channelFactory The channel factory to use. * \param contactFactory The contact factory to use. * \return An AccountPtr object pointing to the newly created Account object. */ AccountPtr Account::create(const QString &busName, const QString &objectPath, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory) { return AccountPtr(new Account(QDBusConnection::sessionBus(), busName, objectPath, connectionFactory, channelFactory, contactFactory, Account::FeatureCore)); } /** * Create a new Account object using the given \a bus and the given factories. * * A warning is printed if the factories are not for \a bus. * * \param bus QDBusConnection to use. * \param busName The account well-known bus name (sometimes called a "service * name"). This is usually the same as the account manager * bus name #TP_QT_ACCOUNT_MANAGER_BUS_NAME. * \param objectPath The account object path. * \param connectionFactory The connection factory to use. * \param channelFactory The channel factory to use. * \param contactFactory The contact factory to use. * \return An AccountPtr object pointing to the newly created Account object. */ AccountPtr Account::create(const QDBusConnection &bus, const QString &busName, const QString &objectPath, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory) { return AccountPtr(new Account(bus, busName, objectPath, connectionFactory, channelFactory, contactFactory, Account::FeatureCore)); } /** * Construct a new Account object using the given \a bus and the given factories. * * A warning is printed if the factories are not for \a bus. * * \param bus QDBusConnection to use. * \param busName The account well-known bus name (sometimes called a "service * name"). This is usually the same as the account manager * bus name #TP_QT_ACCOUNT_MANAGER_BUS_NAME. * \param objectPath The account object path. * \param connectionFactory The connection factory to use. * \param channelFactory The channel factory to use. * \param contactFactory The contact factory to use. * \param coreFeature The core feature of the Account subclass. The corresponding introspectable * should depend on Account::FeatureCore. */ Account::Account(const QDBusConnection &bus, const QString &busName, const QString &objectPath, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory, const Feature &coreFeature) : StatelessDBusProxy(bus, busName, objectPath, coreFeature), OptionalInterfaceFactory(this), mPriv(new Private(this, connectionFactory, channelFactory, contactFactory)) { } /** * Class destructor. */ Account::~Account() { delete mPriv; } /** * Return the connection factory used by this account. * * Only read access is provided. This allows constructing object instances and examining the object * construction settings, but not changing settings. Allowing changes would lead to tricky * situations where objects constructed at different times by the account would have unpredictably * different construction settings (eg. subclass). * * \return A read-only pointer to the ConnectionFactory object. */ ConnectionFactoryConstPtr Account::connectionFactory() const { return mPriv->connFactory; } /** * Return the channel factory used by this account. * * Only read access is provided. This allows constructing object instances and examining the object * construction settings, but not changing settings. Allowing changes would lead to tricky * situations where objects constructed at different times by the account would have unpredictably * different construction settings (eg. subclass). * * \return A read-only pointer to the ChannelFactory object. */ ChannelFactoryConstPtr Account::channelFactory() const { return mPriv->chanFactory; } /** * Return the contact factory used by this account. * * Only read access is provided. This allows constructing object instances and examining the object * construction settings, but not changing settings. Allowing changes would lead to tricky * situations where objects constructed at different times by the account would have unpredictably * different construction settings (eg. subclass). * * \return A read-only pointer to the ContactFactory object. */ ContactFactoryConstPtr Account::contactFactory() const { return mPriv->contactFactory; } /** * Return whether this account is valid. * * If \c true, this account is considered by the account manager to be complete * and usable. If \c false, user action is required to make it usable, and it will * never attempt to connect. For instance, this might be caused by the absence * or misconfiguration of a required parameter, in which case updateParameters() * may be used to properly set the parameters values. * * Change notification is via the validityChanged() signal. * * This method requires Account::FeatureCore to be ready. * * \return \c true if valid, \c false otherwise. * \sa validityChanged(), updateParameters() */ bool Account::isValidAccount() const { return mPriv->valid; } /** * Return whether this account is enabled. * * Change notification is via the stateChanged() signal. * * This method requires Account::FeatureCore to be ready. * * \return \c true if enabled, \c false otherwise. * \sa stateChanged(), setEnabled() */ bool Account::isEnabled() const { return mPriv->enabled; } /** * Set whether this account should be enabled or disabled. * * This gives users the possibility to prevent an account from * being used. * * Note that changing this property won't change the validity of the account. * * \param value Whether this account should be enabled or disabled. * \return A PendingOperation which will emit PendingOperation::finished * when the request has been made. * \sa stateChanged(), isEnabled() */ PendingOperation *Account::setEnabled(bool value) { return new PendingVoid( mPriv->properties->Set( TP_QT_IFACE_ACCOUNT, QLatin1String("Enabled"), QDBusVariant(value)), AccountPtr(this)); } /** * Return the connection manager name of this account. * * \return The connection manager name. */ QString Account::cmName() const { return mPriv->cmName; } /** * Return the protocol name of this account. * * \return The protocol name. */ QString Account::protocolName() const { return mPriv->protocolName; } /** * Return the service name of this account. * * Note that this method will fallback to protocolName() if service name * is not known. * * Change notification is via the serviceNameChanged() signal. * * This method requires Account::FeatureCore to be ready. * * \return The service name. * \sa serviceNameChanged(), setServiceName(), protocolName() */ QString Account::serviceName() const { if (mPriv->serviceName.isEmpty()) { return mPriv->protocolName; } return mPriv->serviceName; } /** * Set the service name of this account. * * Some protocols, like XMPP and SIP, are used by various different user-recognised brands, * such as Google Talk. On accounts for such services, this method can be used * to set the name describing the service, which must consist only of ASCII letters, numbers and * hyphen/minus signs, and start with a letter. * For the jabber protocol, one of the following service names should be used if possible: * * google-talk (for Google's IM service) * facebook (for Facebook's IM service) * lj-talk (for LiveJournal's IM service) * * The service name may also be set, if appropriate, when creating the account. See * AccountManager::createAccount() for more details. * * Note that changing this property may also change the profile() used by this account, * in which case profileChanged() will be emitted in addition to serviceNameChanged(), if * Account::FeatureProfile is enabled. * * \param value The service name of this account. * \return A PendingOperation which will emit PendingOperation::finished * when the request has been made. * \sa serviceNameChanged(), serviceName() */ PendingOperation *Account::setServiceName(const QString &value) { return new PendingVoid( mPriv->properties->Set( TP_QT_IFACE_ACCOUNT, QLatin1String("Service"), QDBusVariant(value)), AccountPtr(this)); } /** * Return the profile used by this account. * * Profiles are intended to describe variants of the basic protocols supported by Telepathy * connection managers. * An example of this would be Google Talk vs Facebook chat vs Jabber/XMPP. Google Talk is a * specific case of XMPP with well-known capabilities, quirks and settings, and Facebook chat is * a subset of the standard XMPP offering. * * This method will return the profile for this account based on the service used by it. * * Note that if a profile for serviceName() is not available, a fake profile * (Profile::isFake() is \c true) will be returned in case protocolInfo() is valid. * * The fake profile will contain the following info: * - Profile::type() will return "IM" * - Profile::provider() will return an empty string * - Profile::serviceName() will return "cmName()-serviceName()" * - Profile::name() and Profile::protocolName() will return protocolName() * - Profile::iconName() will return "im-protocolName()" * - Profile::cmName() will return cmName() * - Profile::parameters() will return a list matching CM default parameters for protocol with name * protocolName() * - Profile::presences() will return an empty list and * Profile::allowOtherPresences() will return \c true, meaning that CM * presences should be used * - Profile::unsupportedChannelClassSpecs() will return an empty list * * Change notification is via the profileChanged() signal. * * This method requires Account::FeatureProfile to be ready. * * \return A pointer to the Profile object. * \sa profileChanged(), serviceName() */ ProfilePtr Account::profile() const { if (!isReady(FeatureProfile)) { warning() << "Account::profile() requires Account::FeatureProfile to be ready"; return ProfilePtr(); } if (!mPriv->profile) { mPriv->profile = Profile::createForServiceName(serviceName()); if (!mPriv->profile->isValid()) { if (protocolInfo().isValid()) { mPriv->profile = ProfilePtr(new Profile( QString(QLatin1String("%1-%2")).arg(mPriv->cmName).arg(serviceName()), mPriv->cmName, mPriv->protocolName, protocolInfo())); } else { warning() << "Cannot create profile as neither a .profile is installed for service" << serviceName() << "nor protocol info can be retrieved"; } } } return mPriv->profile; } /** * Return the display name of this account. * * Change notification is via the displayNameChanged() signal. * * This method requires Account::FeatureCore to be ready. * * \return The display name. * \sa displayNameChanged(), setDisplayName() */ QString Account::displayName() const { return mPriv->displayName; } /** * Set the display name of this account. * * The display name is the user-visible name of this account. * This is usually chosen by the user at account creation time. * See AccountManager::createAccount() for more details. * * \param value The display name of this account. * \return A PendingOperation which will emit PendingOperation::finished * when the request has been made. * \sa displayNameChanged(), displayName() */ PendingOperation *Account::setDisplayName(const QString &value) { return new PendingVoid( mPriv->properties->Set( TP_QT_IFACE_ACCOUNT, QLatin1String("DisplayName"), QDBusVariant(value)), AccountPtr(this)); } /** * Return the icon name of this account. * * If the account has no icon, and Account::FeatureProfile is enabled, the icon from the result of * profile() will be used. * * If neither the account nor the profile has an icon, and Account::FeatureProtocolInfo is * enabled, the icon from protocolInfo() will be used if set. * * As a last resort, "im-" + protocolName() will be returned. * * This matches the fallbacks recommended by the \telepathy_spec. * * Change notification is via the iconNameChanged() signal. * * This method requires Account::FeatureCore to be ready. * * \return The icon name. * \sa iconNameChanged(), setIconName() */ QString Account::iconName() const { if (mPriv->iconName.isEmpty()) { if (isReady(FeatureProfile)) { ProfilePtr pr = profile(); if (pr && pr->isValid()) { QString iconName = pr->iconName(); if (!iconName.isEmpty()) { return iconName; } } } if (isReady(FeatureProtocolInfo) && protocolInfo().isValid()) { return protocolInfo().iconName(); } return QString(QLatin1String("im-%1")).arg(protocolName()); } return mPriv->iconName; } /** * Set the icon name of this account. * * \param value The icon name of this account. * \return A PendingOperation which will emit PendingOperation::finished * when the request has been made. * \sa iconNameChanged(), iconName() */ PendingOperation *Account::setIconName(const QString &value) { return new PendingVoid( mPriv->properties->Set( TP_QT_IFACE_ACCOUNT, QLatin1String("Icon"), QDBusVariant(value)), AccountPtr(this)); } /** * Return the nickname of this account. * * Change notification is via the nicknameChanged() signal. * * This method requires Account::FeatureCore to be ready. * * \return The nickname. * \sa nicknameChanged(), setNickname() */ QString Account::nickname() const { return mPriv->nickname; } /** * Set the nickname of this account as seen to other contacts. * * \param value The nickname of this account. * \return A PendingOperation which will emit PendingOperation::finished * when the request has been made. * \sa nicknameChanged(), nickname() */ PendingOperation *Account::setNickname(const QString &value) { return new PendingVoid( mPriv->properties->Set( TP_QT_IFACE_ACCOUNT, QLatin1String("Nickname"), QDBusVariant(value)), AccountPtr(this)); } /** * Return the avatar requirements (size limits, supported MIME types, etc) * for avatars passed to setAvatar() on this account. * * For now this method will only return the avatar requirements found in protocolInfo() if * Account::FeatureProtocolInfo is ready, otherwise an invalid AvatarSpec instance is returned. * * \return The requirements as an AvatarSpec object. * \sa avatar(), setAvatar() */ AvatarSpec Account::avatarRequirements() const { // TODO Once connection has support for avatar requirements use it if the connection is usable ProtocolInfo pi = protocolInfo(); if (pi.isValid()) { return pi.avatarRequirements(); } return AvatarSpec(); } /** * Return the avatar of this account. * * Change notification is via the avatarChanged() signal. * * This method requires Account::FeatureAvatar to be ready. * * \return The avatar as an Avatar object. * \sa avatarChanged(), setAvatar() */ const Avatar &Account::avatar() const { if (!isReady(Features() << FeatureAvatar)) { warning() << "Trying to retrieve avatar from account, but " "avatar is not supported or was not requested. " "Use becomeReady(FeatureAvatar)"; } return mPriv->avatar; } /** * Set avatar of this account as seen to other contacts. * * Note that \a avatar must match the requirements as returned by avatarRequirements(). * * \param avatar The avatar of this account. * \return A PendingOperation which will emit PendingOperation::finished * when the request has been made. * \sa avatarChanged(), avatar(), avatarRequirements() */ PendingOperation *Account::setAvatar(const Avatar &avatar) { if (!interfaces().contains(TP_QT_IFACE_ACCOUNT_INTERFACE_AVATAR)) { return new PendingFailure( TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Account does not support Avatar"), AccountPtr(this)); } return new PendingVoid( mPriv->properties->Set( TP_QT_IFACE_ACCOUNT_INTERFACE_AVATAR, QLatin1String("Avatar"), QDBusVariant(QVariant::fromValue(avatar))), AccountPtr(this)); } /** * Return the parameters of this account. * * The account parameters are represented as a map from connection manager parameter names * to their values. * * Change notification is via the parametersChanged() signal. * * This method requires Account::FeatureCore to be ready. * * \return The parameters as QVariantMap. * \sa parametersChanged(), updateParameters() */ QVariantMap Account::parameters() const { return mPriv->parameters; } /** * Update this account parameters. * * On success, the PendingOperation returned by this method will produce a * list of strings, which are the names of parameters whose changes will not * take effect until the account is disconnected and reconnected (for instance * by calling reconnect()). * * \param set Parameters to set. * \param unset Parameters to unset. * \return A PendingStringList which will emit PendingStringList::finished * when the request has been made * \sa parametersChanged(), parameters(), reconnect() */ PendingStringList *Account::updateParameters(const QVariantMap &set, const QStringList &unset) { return new PendingStringList( baseInterface()->UpdateParameters(set, unset), AccountPtr(this)); } /** * Return the protocol info of this account protocol. * * This method requires Account::FeatureProtocolInfo to be ready. * * \return The protocol info as a ProtocolInfo object. */ ProtocolInfo Account::protocolInfo() const { if (!isReady(Features() << FeatureProtocolInfo)) { warning() << "Trying to retrieve protocol info from account, but " "protocol info is not supported or was not requested. " "Use becomeReady(FeatureProtocolInfo)"; return ProtocolInfo(); } return mPriv->cm->protocol(mPriv->protocolName); } /** * Return the capabilities for this account. * * Note that this method will return the connection() capabilities if the * account is online and ready. If the account is disconnected, it will fallback * to return the subtraction of the protocolInfo() capabilities and the profile() unsupported * capabilities. * * Change notification is via the capabilitiesChanged() signal. * * This method requires Account::FeatureCapabilities to be ready. * * \return The capabilities as a ConnectionCapabilities object. * \sa capabilitiesChanged(), protocolInfo(), profile() */ ConnectionCapabilities Account::capabilities() const { if (!isReady(FeatureCapabilities)) { warning() << "Trying to retrieve capabilities from account, but " "FeatureCapabilities was not requested. " "Use becomeReady(FeatureCapabilities)"; return ConnectionCapabilities(); } // if the connection is online and ready use its caps if (mPriv->connection && mPriv->connection->status() == ConnectionStatusConnected) { return mPriv->connection->capabilities(); } // if we are here it means FeatureProtocolInfo and FeatureProfile are ready, as // FeatureCapabilities depend on them, so let's use the subtraction of protocol info caps rccs // and profile unsupported rccs. // // However, if we failed to introspect the CM (eg. this is a test), then let's not try to use // the protocolInfo because it'll be NULL! Profile may also be NULL in case a .profile for // serviceName() is not present and protocolInfo is NULL. ProtocolInfo pi = protocolInfo(); if (!pi.isValid()) { return ConnectionCapabilities(); } ProfilePtr pr; if (isReady(FeatureProfile)) { pr = profile(); } if (!pr || !pr->isValid()) { return pi.capabilities(); } RequestableChannelClassSpecList piClassSpecs = pi.capabilities().allClassSpecs(); RequestableChannelClassSpecList prUnsupportedClassSpecs = pr->unsupportedChannelClassSpecs(); RequestableChannelClassSpecList classSpecs; bool unsupported; foreach (const RequestableChannelClassSpec &piClassSpec, piClassSpecs) { unsupported = false; foreach (const RequestableChannelClassSpec &prUnsuportedClassSpec, prUnsupportedClassSpecs) { // Here we check the following: // - If the unsupported spec has no allowed property it means it does not support any // class whose fixed properties match. // E.g: Doesn't support any media calls, be it audio or video. // - If the unsupported spec has allowed properties it means it does not support a // specific class whose fixed properties and allowed properties should match. // E.g: Doesn't support video calls but does support audio calls. if (prUnsuportedClassSpec.allowedProperties().isEmpty()) { if (piClassSpec.fixedProperties() == prUnsuportedClassSpec.fixedProperties()) { unsupported = true; break; } } else { if (piClassSpec == prUnsuportedClassSpec) { unsupported = true; break; } } } if (!unsupported) { classSpecs.append(piClassSpec); } } mPriv->customCaps = ConnectionCapabilities(classSpecs); return mPriv->customCaps; } /** * Return whether this account should be put online automatically whenever * possible. * * Change notification is via the connectsAutomaticallyPropertyChanged() signal. * * This method requires Account::FeatureCore to be ready. * * \return \c true if it should try to connect automatically, \c false * otherwise. * \sa connectsAutomaticallyPropertyChanged(), setConnectsAutomatically() */ bool Account::connectsAutomatically() const { return mPriv->connectsAutomatically; } /** * Set whether this account should be put online automatically whenever * possible. * * \param value Value indicating if this account should be put online whenever * possible. * \return A PendingOperation which will emit PendingOperation::finished * when the request has been made. * \sa connectsAutomaticallyPropertyChanged(), connectsAutomatically() */ PendingOperation *Account::setConnectsAutomatically(bool value) { return new PendingVoid( mPriv->properties->Set( TP_QT_IFACE_ACCOUNT, QLatin1String("ConnectAutomatically"), QDBusVariant(value)), AccountPtr(this)); } /** * Return whether this account has ever been put online successfully. * * This property cannot change from \c true to \c false, only from \c false to \c true. * When the account successfully goes online for the first time, or when it * is detected that this has already happened, the firstOnline() signal is * emitted. * * This method requires Account::FeatureCore to be ready. * * \return \c true if ever been online, \c false otherwise. */ bool Account::hasBeenOnline() const { return mPriv->hasBeenOnline; } /** * Return the status of this account connection. * * Note that this method may return a different value from the one returned by Connection::status() * on this account connection. This happens because this value will change whenever the connection * status of this account connection changes and won't consider the Connection introspection * process. The same rationale also applies to connectionStatusReason() and * connectionErrorDetails(). * * A valid use case for this is for account creation UIs that wish to display the accounts * connection status and nothing else on the connections (e.g. retrieve the contact list). * * Change notification is via the connectionStatusChanged() signal. * * This method requires Account::FeatureCore to be ready. * * \return The connection status as #ConnectionStatus. * \sa connectionStatusChanged(), connectionStatusReason(), connectionError(), * connectionErrorDetails() */ ConnectionStatus Account::connectionStatus() const { return mPriv->connectionStatus; } /** * Return the reason for this account connection status. * * This represents the reason for the last change to connectionStatus(). * * Note that this method may return a different value from the one returned by * Connection::statusReason() on this account connection. * See connectionStatus() for more details. * * This method requires Account::FeatureCore to be ready. * * \return The connection status reason as #ConnectionStatusReason. * \sa connectionStatusChanged(), connectionStatus(), connectionError(), connectionErrorDetails() */ ConnectionStatusReason Account::connectionStatusReason() const { return mPriv->connectionStatusReason; } /** * Return the D-Bus error name for the last disconnection or connection failure, * (in particular, #TP_QT_ERROR_CANCELLED if it was disconnected by user * request), or an empty string if the account is connected. * * This method requires Account::FeatureCore to be ready. * * \return The D-Bus error name for the last disconnection or connection failure. * \sa connectionErrorDetails(), connectionStatus(), connectionStatusReason(), * connectionStatusChanged() */ QString Account::connectionError() const { return mPriv->connectionError; } /** * Return detailed information related to connectionError(). * * Note that this method may return a different value from the one returned by * Connection::errorDetails() on this account connection. * See connectionStatus() for more details. * * This method requires Account::FeatureCore to be ready. * * \return The connection error details as a Connection::ErrorDetails object. * \sa connectionError(), connectionStatus(), connectionStatusReason(), connectionStatusChanged(), * Connection::ErrorDetails. */ Connection::ErrorDetails Account::connectionErrorDetails() const { return mPriv->connectionErrorDetails; } /** * Return the object representing the connection of this account. * * Note that the Connection object returned by this method will have the * features set in the connectionFactory() used by this account ready. * * Change notification is via the connectionChanged() signal. * * This method requires Account::FeatureCore to be ready. * * \return A pointer to the Connection object, or a null ConnectionPtr if * there is no connection currently or if an error occurred. * \sa connectionChanged() */ ConnectionPtr Account::connection() const { return mPriv->connection; } /** * Return whether this account connection is changing presence. * * Change notification is via the changingPresence() signal. * * This method requires Account::FeatureCore to be ready. * * \return \c true if changing presence, \c false otherwise. * \sa changingPresence(), currentPresenceChanged(), setRequestedPresence() */ bool Account::isChangingPresence() const { return mPriv->changingPresence; } /** * Return a list of presences allowed by a connection to this account. * * In particular, for the statuses reported here it can be assumed that setting them as the * requested presence via setRequestedPresence() will eventually result in currentPresence() * changing to exactly said presence. Other statuses are only guaranteed to be matched as closely as * possible. * * The statuses can be also used for the automatic presence, as set by setAutomaticPresence(), with * the exception of any status specifications for which Presence::type() is * Tp::ConnectionPresenceTypeOffline for the Presence returned by PresenceSpec::presence(). * * However, the optional parameter can be used to allow reporting also other possible presence * statuses on this protocol besides the others that can be set on yourself. These are purely * informatory, for e.g. adjusting an UI to allow all possible remote contact statuses to be * displayed. * * An offline presence status is always included, because it's always valid to make an account * offline by setting the requested presence to an offline status. * * Full functionality requires Account::FeatureProtocolInfo and Account::FeatureProfile to be ready * as well as connection with Connection::FeatureSimplePresence enabled. If the connection is online * and Connection::FeatureSimplePresence is enabled, it will return the connection allowed statuses, * otherwise it will return a list os statuses based on profile() and protocolInfo() information * if the corresponding features are enabled. * * If there's a mismatch between the presence status info provided in the .profile file and/or the * .manager file and what an online Connection actually reports (for example, the said data files * are missing or too old to include presence information), the returned value can change, in * particular when connectionChanged() is emitted with a connection for which Connection::status() * is Tp::ConnectionStatusConnected. * * This method requires Account::FeatureCore to be ready. * * \param includeAllStatuses Whether the returned list will include all statuses or just the ones * that can be settable using setRequestedPresence(). * \return The allowed statuses as a list of PresenceSpec objects. */ PresenceSpecList Account::allowedPresenceStatuses(bool includeAllStatuses) const { QHash specMap; // if the connection is online and ready use it if (mPriv->connection && mPriv->connection->status() == ConnectionStatusConnected && mPriv->connection->actualFeatures().contains(Connection::FeatureSimplePresence)) { SimpleStatusSpecMap connectionAllowedPresences = mPriv->connection->lowlevel()->allowedPresenceStatuses(); SimpleStatusSpecMap::const_iterator i = connectionAllowedPresences.constBegin(); SimpleStatusSpecMap::const_iterator end = connectionAllowedPresences.constEnd(); for (; i != end; ++i) { PresenceSpec presence = PresenceSpec(i.key(), i.value()); specMap.insert(i.key(), presence); } } else { ProtocolInfo pi = protocolInfo(); if (pi.isValid()) { // add all ProtocolInfo presences to the returned map foreach (const PresenceSpec &piPresence, pi.allowedPresenceStatuses()) { QString piStatus = piPresence.presence().status(); specMap.insert(piStatus, piPresence); } } ProfilePtr pr; if (isReady(FeatureProfile)) { pr = profile(); } if (pr && pr->isValid()) { // add all Profile presences to the returned map foreach (const Profile::Presence &prPresence, pr->presences()) { QString prStatus = prPresence.id(); if (specMap.contains(prStatus)) { // we already got the presence from ProtocolInfo, just update // canHaveStatusMessage if needed PresenceSpec presence = specMap.value(prStatus); if (presence.canHaveStatusMessage() != prPresence.canHaveStatusMessage()) { SimpleStatusSpec spec; spec.type = presence.presence().type(); spec.maySetOnSelf = presence.maySetOnSelf(); spec.canHaveMessage = prPresence.canHaveStatusMessage(); specMap.insert(prStatus, PresenceSpec(prStatus, spec)); } } else { // presence not found in ProtocolInfo, adding it specMap.insert(prStatus, presenceSpecForStatus(prStatus, prPresence.canHaveStatusMessage())); } } // now remove all presences that are not in the Profile, if it does // not allow other presences, and the ones that are disabled QHash::iterator i = specMap.begin(); QHash::iterator end = specMap.end(); while (i != end) { PresenceSpec presence = i.value(); QString status = presence.presence().status(); bool hasPresence = pr->hasPresence(status); Profile::Presence prPresence = pr->presence(status); if ((!hasPresence && !pr->allowOtherPresences()) || (hasPresence && prPresence.isDisabled())) { i = specMap.erase(i); } else { ++i; } } } } // filter out presences that may not be set on self if includeAllStatuses is false if (!includeAllStatuses) { QHash::iterator i = specMap.begin(); QHash::iterator end = specMap.end(); while (i != end) { PresenceSpec presence = i.value(); if (!presence.maySetOnSelf()) { i = specMap.erase(i); } else { ++i; } } } if (!specMap.size()) { // If we didn't discover any statuses, either the protocol doesn't really support presence, // or we lack information (e.g. features not enabled or info not provided in the .manager or // .profile files). "available" - just the fact that you're online in the first place, is at // least a valid option for any protocol, so we'll include it as a fallback. specMap.insert(QLatin1String("available"), presenceSpecForStatus(QLatin1String("available"), false)); } // We'll always include "offline". It is always valid to make an account offline via // setRequestedPresence(). if (!specMap.contains(QLatin1String("offline"))) { specMap.insert(QLatin1String("offline"), presenceSpecForStatus(QLatin1String("offline"), false)); } return specMap.values(); } /** * Return the maximum length for a presence status message. * * If a status message set using setRequestedPresence() (or setAutomaticPresence()) is longer than * the maximum length allowed, the message will be truncated and * currentPresenceChanged() will be emitted (if setting the presence worked) * with the truncated message. * * Full functionality requires Connection with Connection::FeatureSimplePresence * enabled. If the connection is online and Connection::FeatureSimplePresence is * enabled, it will return the connection maximum status message length, * otherwise it will return 0. * * This method requires Account::FeatureCore to be ready. * * \return The maximum length, or 0 if there is no limit. */ uint Account::maxPresenceStatusMessageLength() const { // if the connection is online and ready use it if (mPriv->connection && mPriv->connection->status() == ConnectionStatusConnected && mPriv->connection->actualFeatures().contains(Connection::FeatureSimplePresence)) { return mPriv->connection->lowlevel()->maxPresenceStatusMessageLength(); } return 0; } /** * Return the presence status that this account will have set on it by the * account manager if it brings it online automatically. * * Change notification is via the automaticPresenceChanged() signal. * * This method requires Account::FeatureCore to be ready. * * \return The automatic presence as a Presence object. * \sa automaticPresenceChanged(), setAutomaticPresence() */ Presence Account::automaticPresence() const { return mPriv->automaticPresence; } /** * Set the presence status that this account should have if it is brought * online automatically by the account manager. * * Note that changing this property won't actually change the account's status * until the next time it is (re)connected for some reason. * * The value of this property must be one that would be acceptable for setRequestedPresence(), * as returned by allowedPresenceStatuses(), with the additional restriction that the offline * presence cannot be used. * * \param presence The presence to set when this account is brought * online automatically by the account manager. * \return A PendingOperation which will emit PendingOperation::finished * when the request has been made. * \sa automaticPresenceChanged(), automaticPresence(), setRequestedPresence() */ PendingOperation *Account::setAutomaticPresence(const Presence &presence) { return new PendingVoid( mPriv->properties->Set( TP_QT_IFACE_ACCOUNT, QLatin1String("AutomaticPresence"), QDBusVariant(QVariant::fromValue(presence.barePresence()))), AccountPtr(this)); } /** * Return the actual presence of this account. * * Change notification is via the currentPresenceChanged() signal. * * This method requires Account::FeatureCore to be ready. * * \return The current presence as a Presence object. * \sa currentPresenceChanged(), setRequestedPresence(), requestedPresence(), automaticPresence() */ Presence Account::currentPresence() const { return mPriv->currentPresence; } /** * Return the requested presence of this account. * * Change notification is via the requestedPresenceChanged() signal. * * This method requires Account::FeatureCore to be ready. * * \return The requested presence as a Presence object. * \sa requestedPresenceChanged(), setRequestedPresence(), currentPresence(), automaticPresence() */ Presence Account::requestedPresence() const { return mPriv->requestedPresence; } /** * Set the requested presence of this account. * * When the requested presence is changed, the account manager will attempt to * manipulate the connection to make currentPresence() match requestedPresence() * as closely as possible. * * \param presence The requested presence. * \return A PendingOperation which will emit PendingOperation::finished * when the request has been made. * \sa requestedPresenceChanged(), currentPresence(), automaticPresence(), setAutomaticPresence() */ PendingOperation *Account::setRequestedPresence(const Presence &presence) { return new PendingVoid( mPriv->properties->Set( TP_QT_IFACE_ACCOUNT, QLatin1String("RequestedPresence"), QDBusVariant(QVariant::fromValue(presence.barePresence()))), AccountPtr(this)); } /** * Return whether this account is online. * * Change notification is via the onlinenessChanged() signal. * * This method requires Account::FeatureCore to be ready. * * \return \c true if online, otherwise \c false. * \sa onlinenessChanged() */ bool Account::isOnline() const { return mPriv->currentPresence.type() != ConnectionPresenceTypeOffline; } /** * Return the unique identifier of this account. * * \return The unique identifier. */ QString Account::uniqueIdentifier() const { QString path = objectPath(); return path.right(path.length() - strlen("/org/freedesktop/Telepathy/Account/")); } /** * Return the normalized user ID of the local user of this account. * * It is unspecified whether this user ID is globally unique. * * As currently implemented, IRC user IDs are only unique within the same * IRCnet. On some saner protocols, the user ID includes a DNS name which * provides global uniqueness. * * If this value is not known yet (which will always be the case for accounts * that have never been online), it will be an empty string. * * It is possible that this value will change if the connection manager's * normalization algorithm changes. * * This method requires Account::FeatureCore to be ready. * * \return The normalized user ID of the local user. * \sa normalizedNameChanged() */ QString Account::normalizedName() const { return mPriv->normalizedName; } /** * If this account is currently connected, disconnect and reconnect it. If it * is currently trying to connect, cancel the attempt to connect and start * another. If it is currently disconnected, do nothing. * * \return A PendingOperation which will emit PendingOperation::finished * when the request has been made. */ PendingOperation *Account::reconnect() { return new PendingVoid(baseInterface()->Reconnect(), AccountPtr(this)); } /** * Delete this account. * * \return A PendingOperation which will emit PendingOperation::finished * when the request has been made. * \sa removed() */ PendingOperation *Account::remove() { return new PendingVoid(baseInterface()->Remove(), AccountPtr(this)); } /** * Return whether passing hints on channel requests on this account is known to be supported. * * This method requires Account::FeatureCore to be ready. * * \return \c true if supported, \c false otherwise. */ bool Account::supportsRequestHints() const { return mPriv->dispatcherContext->supportsHints; } /** * Return whether the ChannelRequest::succeeded(const Tp::ChannelPtr &channel) signal is expected to * be emitted with a non-NULL channel parameter for requests made using this account. * * This can be used as a run-time check for the Channel Dispatcher implementation being new enough. * In particular, similarly old Channel Dispatchers don't support request hints either, so the * return value for this function and Account::supportsRequestHints() will bet he same. * * This method requires Account::FeatureCore to be ready. * * \return \c true if supported, \c false otherwise. */ bool Account::requestsSucceedWithChannel() const { return supportsRequestHints(); } /** * Start a request to ensure that a text channel with the given * contact \a contactIdentifier exists, creating it if necessary. * * See ensureChannel() for more details. * * \param contactIdentifier The identifier of the contact to chat with. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \param preferredHandler Either the well-known bus name (starting with * org.freedesktop.Telepathy.Client.) of the preferred * handler for this channel, or an empty string to * indicate that any handler would be acceptable. * \param hints Arbitrary metadata which will be relayed to the handler if supported, * as indicated by supportsRequestHints(). * \return A PendingChannelRequest which will emit PendingChannelRequest::finished * when the request has been made. * \sa ensureChannel(), createChannel() */ PendingChannelRequest *Account::ensureTextChat( const QString &contactIdentifier, const QDateTime &userActionTime, const QString &preferredHandler, const ChannelRequestHints &hints) { QVariantMap request = textChatRequest(contactIdentifier); return new PendingChannelRequest(AccountPtr(this), request, userActionTime, preferredHandler, false, hints); } /** * Start a request to ensure that a text channel with the given * contact \a contact exists, creating it if necessary. * * See ensureChannel() for more details. * * \param contact The contact to chat with. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \param preferredHandler Either the well-known bus name (starting with * org.freedesktop.Telepathy.Client.) of the preferred * handler for this channel, or an empty string to * indicate that any handler would be acceptable. * \param hints Arbitrary metadata which will be relayed to the handler if supported, * as indicated by supportsRequestHints(). * \return A PendingChannelRequest which will emit PendingChannelRequest::finished * when the request has been made. * \sa ensureChannel(), createChannel() */ PendingChannelRequest *Account::ensureTextChat( const ContactPtr &contact, const QDateTime &userActionTime, const QString &preferredHandler, const ChannelRequestHints &hints) { QVariantMap request = textChatRequest(contact); return new PendingChannelRequest(AccountPtr(this), request, userActionTime, preferredHandler, false, hints); } /** * Start a request to ensure that a text chat room with the given * room name \a roomName exists, creating it if necessary. * * See ensureChannel() for more details. * * \param roomName The name of the chat room. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \param preferredHandler Either the well-known bus name (starting with * org.freedesktop.Telepathy.Client.) of the preferred * handler for this channel, or an empty string to * indicate that any handler would be acceptable. * \param hints Arbitrary metadata which will be relayed to the handler if supported, * as indicated by supportsRequestHints(). * \return A PendingChannelRequest which will emit PendingChannelRequest::finished * when the request has been made. * \sa ensureChannel(), createChannel() */ PendingChannelRequest *Account::ensureTextChatroom( const QString &roomName, const QDateTime &userActionTime, const QString &preferredHandler, const ChannelRequestHints &hints) { QVariantMap request = textChatroomRequest(roomName); return new PendingChannelRequest(AccountPtr(this), request, userActionTime, preferredHandler, false, hints); } /** * Start a request to ensure that an audio call channel with the given * contact \a contactIdentifier exists, creating it if necessary. * * See ensureChannel() for more details. * * \param contactIdentifier The identifier of the contact to call. * \param initialAudioContentName The name of the initial CallContent that will * be automatically added on the channel. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \param preferredHandler Either the well-known bus name (starting with * org.freedesktop.Telepathy.Client.) of the preferred * handler for this channel, or an empty string to * indicate that any handler would be acceptable. * \param hints Arbitrary metadata which will be relayed to the handler if supported, * as indicated by supportsRequestHints(). * \return A PendingChannelRequest which will emit PendingChannelRequest::finished * when the request has been made. * \sa ensureChannel(), createChannel() */ PendingChannelRequest *Account::ensureAudioCall( const QString &contactIdentifier, const QString &initialAudioContentName, const QDateTime &userActionTime, const QString &preferredHandler, const ChannelRequestHints &hints) { QVariantMap request = audioCallRequest(contactIdentifier, initialAudioContentName); return new PendingChannelRequest(AccountPtr(this), request, userActionTime, preferredHandler, false, hints); } /** * Start a request to ensure that an audio call channel with the given * contact \a contact exists, creating it if necessary. * * See ensureChannel() for more details. * * \param contact The contact to call. * \param initialAudioContentName The name of the initial audio CallContent that * will be automatically added on the channel. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \param preferredHandler Either the well-known bus name (starting with * org.freedesktop.Telepathy.Client.) of the preferred * handler for this channel, or an empty string to * indicate that any handler would be acceptable. * \param hints Arbitrary metadata which will be relayed to the handler if supported, * as indicated by supportsRequestHints(). * \return A PendingChannelRequest which will emit PendingChannelRequest::finished * when the request has been made. * \sa ensureChannel(), createChannel() */ PendingChannelRequest* Account::ensureAudioCall( const ContactPtr &contact, const QString &initialAudioContentName, const QDateTime &userActionTime, const QString &preferredHandler, const ChannelRequestHints &hints) { QVariantMap request = audioCallRequest(contact, initialAudioContentName); return new PendingChannelRequest(AccountPtr(this), request, userActionTime, preferredHandler, false, hints); } /** * Start a request to ensure that a video call channel with the given * contact \a contactIdentifier exists, creating it if necessary. * * See ensureChannel() for more details. * * \param contactIdentifier The identifier of the contact to call. * \param initialVideoContentName The name of the initial video CallContent that * will be automatically added on the channel. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \param preferredHandler Either the well-known bus name (starting with * org.freedesktop.Telepathy.Client.) of the preferred * handler for this channel, or an empty string to * indicate that any handler would be acceptable. * \param hints Arbitrary metadata which will be relayed to the handler if supported, * as indicated by supportsRequestHints(). * \return A PendingChannelRequest which will emit PendingChannelRequest::finished * when the request has been made. * \sa ensureChannel(), createChannel() */ PendingChannelRequest *Account::ensureVideoCall( const QString &contactIdentifier, const QString &initialVideoContentName, const QDateTime &userActionTime, const QString &preferredHandler, const ChannelRequestHints &hints) { QVariantMap request = videoCallRequest(contactIdentifier, initialVideoContentName); return new PendingChannelRequest(AccountPtr(this), request, userActionTime, preferredHandler, false, hints); } /** * Start a request to ensure that a video call channel with the given * contact \a contact exists, creating it if necessary. * * See ensureChannel() for more details. * * \param contact The contact to call. * \param initialVideoContentName The name of the initial video CallContent that * will be automatically added on the channel. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \param preferredHandler Either the well-known bus name (starting with * org.freedesktop.Telepathy.Client.) of the preferred * handler for this channel, or an empty string to * indicate that any handler would be acceptable. * \param hints Arbitrary metadata which will be relayed to the handler if supported, * as indicated by supportsRequestHints(). * \return A PendingChannelRequest which will emit PendingChannelRequest::finished * when the request has been made. * \sa ensureChannel(), createChannel() */ PendingChannelRequest *Account::ensureVideoCall( const ContactPtr &contact, const QString &initialVideoContentName, const QDateTime &userActionTime, const QString &preferredHandler, const ChannelRequestHints &hints) { QVariantMap request = videoCallRequest(contact, initialVideoContentName); return new PendingChannelRequest(AccountPtr(this), request, userActionTime, preferredHandler, false, hints); } /** * Start a request to ensure that an audio/video call channel with the given * contact \a contactIdentifier exists, creating it if necessary. * * See ensureChannel() for more details. * * \param contactIdentifier The identifier of the contact to call. * \param initialAudioContentName The name of the initial audio CallContent that * will be automatically added on the channel. * \param initialVideoContentName The name of the initial video CallContent that * will be automatically added on the channel. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \param preferredHandler Either the well-known bus name (starting with * org.freedesktop.Telepathy.Client.) of the preferred * handler for this channel, or an empty string to * indicate that any handler would be acceptable. * \param hints Arbitrary metadata which will be relayed to the handler if supported, * as indicated by supportsRequestHints(). * \return A PendingChannelRequest which will emit PendingChannelRequest::finished * when the request has been made. * \sa ensureChannel(), createChannel() */ PendingChannelRequest *Account::ensureAudioVideoCall( const QString &contactIdentifier, const QString &initialAudioContentName, const QString &initialVideoContentName, const QDateTime &userActionTime, const QString &preferredHandler, const ChannelRequestHints &hints) { QVariantMap request = audioVideoCallRequest(contactIdentifier, initialAudioContentName, initialVideoContentName); return new PendingChannelRequest(AccountPtr(this), request, userActionTime, preferredHandler, false, hints); } /** * Start a request to ensure that an audio/video call channel with the given * contact \a contact exists, creating it if necessary. * * See ensureChannel() for more details. * * \param contact The contact to call. * \param initialAudioContentName The name of the initial audio CallContent that * will be automatically added on the channel. * \param initialVideoContentName The name of the initial video CallContent that * will be automatically added on the channel. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \param preferredHandler Either the well-known bus name (starting with * org.freedesktop.Telepathy.Client.) of the preferred * handler for this channel, or an empty string to * indicate that any handler would be acceptable. * \param hints Arbitrary metadata which will be relayed to the handler if supported, * as indicated by supportsRequestHints(). * \return A PendingChannelRequest which will emit PendingChannelRequest::finished * when the request has been made. * \sa ensureChannel(), createChannel() */ PendingChannelRequest *Account::ensureAudioVideoCall( const ContactPtr &contact, const QString &initialAudioContentName, const QString &initialVideoContentName, const QDateTime &userActionTime, const QString &preferredHandler, const ChannelRequestHints &hints) { QVariantMap request = audioVideoCallRequest(contact, initialAudioContentName, initialVideoContentName); return new PendingChannelRequest(AccountPtr(this), request, userActionTime, preferredHandler, false, hints); } /** * Start a request to ensure that a media channel with the given * contact \a contactIdentifier exists, creating it if necessary. * * See ensureChannel() for more details. * * \param contactIdentifier The identifier of the contact to call. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \param preferredHandler Either the well-known bus name (starting with * org.freedesktop.Telepathy.Client.) of the preferred * handler for this channel, or an empty string to * indicate that any handler would be acceptable. * \param hints Arbitrary metadata which will be relayed to the handler if supported, * as indicated by supportsRequestHints(). * \return A PendingChannelRequest which will emit PendingChannelRequest::finished * when the request has been made. * \sa ensureChannel(), createChannel() */ PendingChannelRequest *Account::ensureStreamedMediaCall( const QString &contactIdentifier, const QDateTime &userActionTime, const QString &preferredHandler, const ChannelRequestHints &hints) { QVariantMap request = streamedMediaCallRequest(contactIdentifier); return new PendingChannelRequest(AccountPtr(this), request, userActionTime, preferredHandler, false, hints); } /** * Start a request to ensure that a media channel with the given * contact \a contact exists, creating it if necessary. * * See ensureChannel() for more details. * * \param contact The contact to call. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \param preferredHandler Either the well-known bus name (starting with * org.freedesktop.Telepathy.Client.) of the preferred * handler for this channel, or an empty string to * indicate that any handler would be acceptable. * \param hints Arbitrary metadata which will be relayed to the handler if supported, * as indicated by supportsRequestHints(). * \return A PendingChannelRequest which will emit PendingChannelRequest::finished * when the request has been made. * \sa ensureChannel(), createChannel() */ PendingChannelRequest *Account::ensureStreamedMediaCall( const ContactPtr &contact, const QDateTime &userActionTime, const QString &preferredHandler, const ChannelRequestHints &hints) { QVariantMap request = streamedMediaCallRequest(contact); return new PendingChannelRequest(AccountPtr(this), request, userActionTime, preferredHandler, false, hints); } /** * Start a request to ensure that an audio call with the given * contact \a contactIdentifier exists, creating it if necessary. * * See ensureChannel() for more details. * * This will only work on relatively modern connection managers, * like telepathy-gabble 0.9.0 or later. * * \param contactIdentifier The identifier of the contact to call. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \param preferredHandler Either the well-known bus name (starting with * org.freedesktop.Telepathy.Client.) of the preferred * handler for this channel, or an empty string to * indicate that any handler would be acceptable. * \param hints Arbitrary metadata which will be relayed to the handler if supported, * as indicated by supportsRequestHints(). * \return A PendingChannelRequest which will emit PendingChannelRequest::finished * when the request has been made. * \sa ensureChannel(), createChannel() */ PendingChannelRequest *Account::ensureStreamedMediaAudioCall( const QString &contactIdentifier, const QDateTime &userActionTime, const QString &preferredHandler, const ChannelRequestHints &hints) { QVariantMap request = streamedMediaAudioCallRequest(contactIdentifier); return new PendingChannelRequest(AccountPtr(this), request, userActionTime, preferredHandler, false, hints); } /** * Start a request to ensure that an audio call with the given * contact \a contact exists, creating it if necessary. * * See ensureChannel() for more details. * * This will only work on relatively modern connection managers, * like telepathy-gabble 0.9.0 or later. * * \param contact The contact to call. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \param preferredHandler Either the well-known bus name (starting with * org.freedesktop.Telepathy.Client.) of the preferred * handler for this channel, or an empty string to * indicate that any handler would be acceptable. * \param hints Arbitrary metadata which will be relayed to the handler if supported, * as indicated by supportsRequestHints(). * \return A PendingChannelRequest which will emit PendingChannelRequest::finished * when the request has been made. * \sa ensureChannel(), createChannel() */ PendingChannelRequest *Account::ensureStreamedMediaAudioCall( const ContactPtr &contact, const QDateTime &userActionTime, const QString &preferredHandler, const ChannelRequestHints &hints) { QVariantMap request = streamedMediaAudioCallRequest(contact); return new PendingChannelRequest(AccountPtr(this), request, userActionTime, preferredHandler, false, hints); } /** * Start a request to ensure that a video call with the given * contact \a contactIdentifier exists, creating it if necessary. * * See ensureChannel() for more details. * * This will only work on relatively modern connection managers, * like telepathy-gabble 0.9.0 or later. * * \param contactIdentifier The identifier of the contact to call. * \param withAudio true if both audio and video are required, false for a * video-only call. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \param preferredHandler Either the well-known bus name (starting with * org.freedesktop.Telepathy.Client.) of the preferred * handler for this channel, or an empty string to * indicate that any handler would be acceptable. * \param hints Arbitrary metadata which will be relayed to the handler if supported, * as indicated by supportsRequestHints(). * \return A PendingChannelRequest which will emit PendingChannelRequest::finished * when the request has been made. * \sa ensureChannel(), createChannel() */ PendingChannelRequest *Account::ensureStreamedMediaVideoCall( const QString &contactIdentifier, bool withAudio, const QDateTime &userActionTime, const QString &preferredHandler, const ChannelRequestHints &hints) { QVariantMap request = streamedMediaVideoCallRequest(contactIdentifier, withAudio); return new PendingChannelRequest(AccountPtr(this), request, userActionTime, preferredHandler, false, hints); } /** * Start a request to ensure that a video call with the given * contact \a contact exists, creating it if necessary. * * See ensureChannel() for more details. * * This will only work on relatively modern connection managers, * like telepathy-gabble 0.9.0 or later. * * \param contact The contact to call. * \param withAudio true if both audio and video are required, false for a * video-only call. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \param preferredHandler Either the well-known bus name (starting with * org.freedesktop.Telepathy.Client.) of the preferred * handler for this channel, or an empty string to * indicate that any handler would be acceptable. * \param hints Arbitrary metadata which will be relayed to the handler if supported, * as indicated by supportsRequestHints(). * \return A PendingChannelRequest which will emit PendingChannelRequest::finished * when the request has been made. * \sa ensureChannel(), createChannel() */ PendingChannelRequest *Account::ensureStreamedMediaVideoCall( const ContactPtr &contact, bool withAudio, const QDateTime &userActionTime, const QString &preferredHandler, const ChannelRequestHints &hints) { QVariantMap request = streamedMediaVideoCallRequest(contact, withAudio); return new PendingChannelRequest(AccountPtr(this), request, userActionTime, preferredHandler, false, hints); } /** * Start a request to create a file transfer channel with the given * contact \a contact. * * \param contactIdentifier The identifier of the contact to send a file. * \param properties The desired properties. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \param preferredHandler Either the well-known bus name (starting with * org.freedesktop.Telepathy.Client.) of the preferred * handler for this channel, or an empty string to * indicate that any handler would be acceptable. * \param hints Arbitrary metadata which will be relayed to the handler if supported, * as indicated by supportsRequestHints(). * \return A PendingChannelRequest which will emit PendingChannelRequest::finished * when the request has been made. * \sa ensureChannel(), createChannel() */ PendingChannelRequest *Account::createFileTransfer( const QString &contactIdentifier, const FileTransferChannelCreationProperties &properties, const QDateTime &userActionTime, const QString &preferredHandler, const ChannelRequestHints &hints) { QVariantMap request = fileTransferRequest(contactIdentifier, properties); if (request.isEmpty()) { return new PendingChannelRequest(AccountPtr(this), TP_QT_ERROR_INVALID_ARGUMENT, QLatin1String("Cannot create a file transfer with invalid parameters")); } return new PendingChannelRequest(AccountPtr(this), request, userActionTime, preferredHandler, true, hints); } /** * Start a request to create a file transfer channel with the given * contact \a contact. * * \param contact The contact to send a file. * \param properties The desired properties. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \param preferredHandler Either the well-known bus name (starting with * org.freedesktop.Telepathy.Client.) of the preferred * handler for this channel, or an empty string to * indicate that any handler would be acceptable. * \param hints Arbitrary metadata which will be relayed to the handler if supported, * as indicated by supportsRequestHints(). * \return A PendingChannelRequest which will emit PendingChannelRequest::finished * when the request has been made. * \sa ensureChannel(), createChannel() */ PendingChannelRequest *Account::createFileTransfer( const ContactPtr &contact, const FileTransferChannelCreationProperties &properties, const QDateTime &userActionTime, const QString &preferredHandler, const ChannelRequestHints &hints) { QVariantMap request = fileTransferRequest(contact, properties); if (request.isEmpty()) { return new PendingChannelRequest(AccountPtr(this), TP_QT_ERROR_INVALID_ARGUMENT, QLatin1String("Cannot create a file transfer with invalid parameters")); } return new PendingChannelRequest(AccountPtr(this), request, userActionTime, preferredHandler, true, hints); } /** * Start a request to create a stream tube channel with the given * contact identifier \a contactIdentifier. * * \param contactIdentifier The identifier of the contact to open a stream tube with. * \param service The stream tube service. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \param preferredHandler Either the well-known bus name (starting with * org.freedesktop.Telepathy.Client.) of the preferred * handler for this channel, or an empty string to * indicate that any handler would be acceptable. * \param hints Arbitrary metadata which will be relayed to the handler if supported, * as indicated by supportsRequestHints(). * \return A PendingChannelRequest which will emit PendingChannelRequest::finished * when the request has been made. * \sa ensureChannel(), createChannel() */ PendingChannelRequest *Account::createStreamTube( const QString &contactIdentifier, const QString &service, const QDateTime &userActionTime, const QString &preferredHandler, const ChannelRequestHints &hints) { QVariantMap request = streamTubeRequest(contactIdentifier, service); return new PendingChannelRequest(AccountPtr(this), request, userActionTime, preferredHandler, true, hints); } /** * Start a request to create a stream tube channel with the given * contact \a contact. * * \param contact The contact to open a stream tube with. * \param service The stream tube service. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \param preferredHandler Either the well-known bus name (starting with * org.freedesktop.Telepathy.Client.) of the preferred * handler for this channel, or an empty string to * indicate that any handler would be acceptable. * \param hints Arbitrary metadata which will be relayed to the handler if supported, * as indicated by supportsRequestHints(). * \return A PendingChannelRequest which will emit PendingChannelRequest::finished * when the request has been made. * \sa ensureChannel(), createChannel() */ PendingChannelRequest *Account::createStreamTube( const ContactPtr &contact, const QString &service, const QDateTime &userActionTime, const QString &preferredHandler, const ChannelRequestHints &hints) { QVariantMap request = streamTubeRequest(contact, service); return new PendingChannelRequest(AccountPtr(this), request, userActionTime, preferredHandler, true, hints); } /** * Start a request to create a DBus tube channel with the given * contact \a contactIdentifier. * * \param contactIdentifier The contact identifier of the contact to open a DBus tube with. * \param serviceName the service name that will be used over the * tube. It should be a well-known D-Bus service name, of the form * \c com.example.ServiceName * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \param preferredHandler Either the well-known bus name (starting with * org.freedesktop.Telepathy.Client.) of the preferred * handler for this channel, or an empty string to * indicate that any handler would be acceptable. * \param hints Arbitrary metadata which will be relayed to the handler if supported, * as indicated by supportsRequestHints(). * \return A PendingChannelRequest which will emit PendingChannelRequest::finished * when the call has finished. * \sa ensureChannel(), createChannel() */ PendingChannelRequest *Account::createDBusTube( const QString &contactIdentifier, const QString &serviceName, const QDateTime &userActionTime, const QString &preferredHandler, const ChannelRequestHints &hints) { QVariantMap request = dbusTubeRequest(contactIdentifier, serviceName); return new PendingChannelRequest(AccountPtr(this), request, userActionTime, preferredHandler, true, hints); } /** * Start a request to create a DBus tube channel with the given * contact \a contact. * * \param contact The contact to open a DBus tube with. * \param serviceName the service name that will be used over the * tube. It should be a well-known D-Bus service name, of the form * \c com.example.ServiceName * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \param preferredHandler Either the well-known bus name (starting with * org.freedesktop.Telepathy.Client.) of the preferred * handler for this channel, or an empty string to * indicate that any handler would be acceptable. * \param hints Arbitrary metadata which will be relayed to the handler if supported, * as indicated by supportsRequestHints(). * \return A PendingChannelRequest which will emit PendingChannelRequest::finished * when the call has finished. * \sa ensureChannel(), createChannel() */ PendingChannelRequest* Account::createDBusTube( const Tp::ContactPtr& contact, const QString& serviceName, const QDateTime& userActionTime, const QString& preferredHandler, const ChannelRequestHints &hints) { QVariantMap request = dbusTubeRequest(contact, serviceName); return new PendingChannelRequest(AccountPtr(this), request, userActionTime, preferredHandler, true, hints); } /** * Start a request to create a conference media call with the given * channels \a channels. * * \param channels The conference channels. * \param initialInviteeContactsIdentifiers A list of additional contacts * identifiers to be invited to this * conference when it is created. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \param preferredHandler Either the well-known bus name (starting with * org.freedesktop.Telepathy.Client.) of the preferred * handler for this channel, or an empty string to * indicate that any handler would be acceptable. * \param hints Arbitrary metadata which will be relayed to the handler if supported, * as indicated by supportsRequestHints(). * \return A PendingChannelRequest which will emit PendingChannelRequest::finished * when the request has been made. * \sa ensureChannel(), createChannel() */ PendingChannelRequest *Account::createConferenceStreamedMediaCall( const QList &channels, const QStringList &initialInviteeContactsIdentifiers, const QDateTime &userActionTime, const QString &preferredHandler, const ChannelRequestHints &hints) { QVariantMap request = conferenceStreamedMediaCallRequest(channels, initialInviteeContactsIdentifiers); return new PendingChannelRequest(AccountPtr(this), request, userActionTime, preferredHandler, true, hints); } /** * Start a request to create a conference media call with the given * channels \a channels. * * \param channels The conference channels. * \param initialInviteeContacts A list of additional contacts * to be invited to this * conference when it is created. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \param preferredHandler Either the well-known bus name (starting with * org.freedesktop.Telepathy.Client.) of the preferred * handler for this channel, or an empty string to * indicate that any handler would be acceptable. * \param hints Arbitrary metadata which will be relayed to the handler if supported, * as indicated by supportsRequestHints(). * \return A PendingChannelRequest which will emit PendingChannelRequest::finished * when the request has been made. * \sa ensureChannel(), createChannel() */ PendingChannelRequest *Account::createConferenceStreamedMediaCall( const QList &channels, const QList &initialInviteeContacts, const QDateTime &userActionTime, const QString &preferredHandler, const ChannelRequestHints &hints) { QVariantMap request = conferenceStreamedMediaCallRequest(channels, initialInviteeContacts); return new PendingChannelRequest(AccountPtr(this), request, userActionTime, preferredHandler, true, hints); } /** * Start a request to create a conference text chat with the given * channels \a channels. * * \param channels The conference channels. * \param initialInviteeContactsIdentifiers A list of additional contacts * identifiers to be invited to this * conference when it is created. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \param preferredHandler Either the well-known bus name (starting with * org.freedesktop.Telepathy.Client.) of the preferred * handler for this channel, or an empty string to * indicate that any handler would be acceptable. * \param hints Arbitrary metadata which will be relayed to the handler if supported, * as indicated by supportsRequestHints(). * \return A PendingChannelRequest which will emit PendingChannelRequest::finished * when the request has been made. * \sa ensureChannel(), createChannel() */ PendingChannelRequest *Account::createConferenceTextChat( const QList &channels, const QStringList &initialInviteeContactsIdentifiers, const QDateTime &userActionTime, const QString &preferredHandler, const ChannelRequestHints &hints) { QVariantMap request = conferenceTextChatRequest(channels, initialInviteeContactsIdentifiers); return new PendingChannelRequest(AccountPtr(this), request, userActionTime, preferredHandler, true, hints); } /** * Start a request to create a conference text chat with the given * channels \a channels. * * \param channels The conference channels. * \param initialInviteeContacts A list of additional contacts * to be invited to this * conference when it is created. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \param preferredHandler Either the well-known bus name (starting with * org.freedesktop.Telepathy.Client.) of the preferred * handler for this channel, or an empty string to * indicate that any handler would be acceptable. * \param hints Arbitrary metadata which will be relayed to the handler if supported, * as indicated by supportsRequestHints(). * \return A PendingChannelRequest which will emit PendingChannelRequest::finished * when the request has been made. * \sa ensureChannel(), createChannel() */ PendingChannelRequest *Account::createConferenceTextChat( const QList &channels, const QList &initialInviteeContacts, const QDateTime &userActionTime, const QString &preferredHandler, const ChannelRequestHints &hints) { QVariantMap request = conferenceTextChatRequest(channels, initialInviteeContacts); return new PendingChannelRequest(AccountPtr(this), request, userActionTime, preferredHandler, true, hints); } /** * Start a request to create a conference text chat room with the given * channels \a channels and room name \a roomName. * * \param roomName The room name. * \param channels The conference channels. * \param initialInviteeContactsIdentifiers A list of additional contacts * identifiers to be invited to this * conference when it is created. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \param preferredHandler Either the well-known bus name (starting with * org.freedesktop.Telepathy.Client.) of the preferred * handler for this channel, or an empty string to * indicate that any handler would be acceptable. * \param hints Arbitrary metadata which will be relayed to the handler if supported, * as indicated by supportsRequestHints(). * \return A PendingChannelRequest which will emit PendingChannelRequest::finished * when the request has been made. * \sa ensureChannel(), createChannel() */ PendingChannelRequest *Account::createConferenceTextChatroom( const QString &roomName, const QList &channels, const QStringList &initialInviteeContactsIdentifiers, const QDateTime &userActionTime, const QString &preferredHandler, const ChannelRequestHints &hints) { QVariantMap request = conferenceTextChatroomRequest(roomName, channels, initialInviteeContactsIdentifiers); return new PendingChannelRequest(AccountPtr(this), request, userActionTime, preferredHandler, true, hints); } /** * Start a request to create a conference text chat room with the given * channels \a channels and room name \a roomName. * * \param roomName The room name. * \param channels The conference channels. * \param initialInviteeContacts A list of additional contacts * to be invited to this * conference when it is created. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \param preferredHandler Either the well-known bus name (starting with * org.freedesktop.Telepathy.Client.) of the preferred * handler for this channel, or an empty string to * indicate that any handler would be acceptable. * \param hints Arbitrary metadata which will be relayed to the handler if supported, * as indicated by supportsRequestHints(). * \return A PendingChannelRequest which will emit PendingChannelRequest::finished * when the request has been made. * \sa ensureChannel(), createChannel() */ PendingChannelRequest *Account::createConferenceTextChatroom( const QString &roomName, const QList &channels, const QList &initialInviteeContacts, const QDateTime &userActionTime, const QString &preferredHandler, const ChannelRequestHints &hints) { QVariantMap request = conferenceTextChatroomRequest(roomName, channels, initialInviteeContacts); return new PendingChannelRequest(AccountPtr(this), request, userActionTime, preferredHandler, true, hints); } /** * Start a request to create a contact search channel with the given * server \a server and limit \a limit. * * \param server For protocols which support searching for contacts on multiple servers with * different DNS names (like XMPP), the DNS name of the server to be searched, * e.g. "characters.shakespeare.lit". Otherwise, an empty string. * \param limit The desired maximum number of results that should be returned by a doing a search. * If the protocol does not support specifying a limit for the number of results * returned at a time, this will be ignored. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \param preferredHandler Either the well-known bus name (starting with * org.freedesktop.Telepathy.Client.) of the preferred * handler for this channel, or an empty string to * indicate that any handler would be acceptable. * \param hints Arbitrary metadata which will be relayed to the handler if supported, * as indicated by supportsRequestHints(). * \return A PendingChannelRequest which will emit PendingChannelRequest::finished * when the request has been made. * \sa createChannel() */ PendingChannelRequest *Account::createContactSearch( const QString &server, uint limit, const QDateTime &userActionTime, const QString &preferredHandler, const ChannelRequestHints &hints) { QVariantMap request = contactSearchRequest(capabilities(), server, limit); return new PendingChannelRequest(AccountPtr(this), request, userActionTime, preferredHandler, true, hints); } /** * Start a request to ensure that a text channel with the given * contact \a contactIdentifier exists, creating it if necessary. * This initially just creates a PendingChannel object, * which can be used to track the success or failure of the request. * * \param contactIdentifier The identifier of the contact to chat with. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \return A PendingChannel which will emit PendingChannel::finished * successfully, when the Channel is available for handling using * PendingChannel::channel(), or with an error if one has been encountered. * \sa ensureAndHandleChannel(), createAndHandleChannel() */ PendingChannel *Account::ensureAndHandleTextChat( const QString &contactIdentifier, const QDateTime &userActionTime) { QVariantMap request = textChatRequest(contactIdentifier); return ensureAndHandleChannel(request, userActionTime); } /** * Start a request to ensure that a text channel with the given * contact \a contact exists, creating it if necessary. * This initially just creates a PendingChannel object, * which can be used to track the success or failure of the request. * * \param contact The contact to chat with. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \return A PendingChannel which will emit PendingChannel::finished * successfully, when the Channel is available for handling using * PendingChannel::channel(), or with an error if one has been encountered. * \sa ensureAndHandleChannel(), createAndHandleChannel() */ PendingChannel *Account::ensureAndHandleTextChat( const ContactPtr &contact, const QDateTime &userActionTime) { QVariantMap request = textChatRequest(contact); return ensureAndHandleChannel(request, userActionTime); } /** * Start a request to ensure that a text chat room with the given * room name \a roomName exists, creating it if necessary. * This initially just creates a PendingChannel object, * which can be used to track the success or failure of the request. * * \param roomName The name of the chat room. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \return A PendingChannel which will emit PendingChannel::finished * successfully, when the Channel is available for handling using * PendingChannel::channel(), or with an error if one has been encountered. * \sa ensureAndHandleChannel(), createAndHandleChannel() */ PendingChannel *Account::ensureAndHandleTextChatroom( const QString &roomName, const QDateTime &userActionTime) { QVariantMap request = textChatroomRequest(roomName); return ensureAndHandleChannel(request, userActionTime); } /** * Start a request to ensure that an audio call channel with the given * contact \a contactIdentifier exists, creating it if necessary. * This initially just creates a PendingChannel object, * which can be used to track the success or failure of the request. * * \param contactIdentifier The identifier of the contact to call. * \param initialAudioContentName The name of the initial audio CallContent that * will be automatically added on the channel. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \return A PendingChannel which will emit PendingChannel::finished * successfully, when the Channel is available for handling using * PendingChannel::channel(), or with an error if one has been encountered. * \sa ensureAndHandleChannel(), createAndHandleChannel() */ PendingChannel *Account::ensureAndHandleAudioCall( const QString &contactIdentifier, const QString &initialAudioContentName, const QDateTime &userActionTime) { QVariantMap request = audioCallRequest(contactIdentifier, initialAudioContentName); return ensureAndHandleChannel(request, userActionTime); } /** * Start a request to ensure that an audio call channel with the given * contact \a contact exists, creating it if necessary. * This initially just creates a PendingChannel object, * which can be used to track the success or failure of the request. * * \param contact The contact to call. * \param initialAudioContentName The name of the initial audio CallContent that * will be automatically added on the channel. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \return A PendingChannel which will emit PendingChannel::finished * successfully, when the Channel is available for handling using * PendingChannel::channel(), or with an error if one has been encountered. * \sa ensureAndHandleChannel(), createAndHandleChannel() */ PendingChannel *Account::ensureAndHandleAudioCall( const ContactPtr &contact, const QString &initialAudioContentName, const QDateTime &userActionTime) { QVariantMap request = audioCallRequest(contact, initialAudioContentName); return ensureAndHandleChannel(request, userActionTime); } /** * Start a request to ensure that a video call channel with the given * contact \a contactIdentifier exists, creating it if necessary. * This initially just creates a PendingChannel object, * which can be used to track the success or failure of the request. * * \param contactIdentifier The identifier of the contact to call. * \param initialVideoContentName The name of the initial video CallContent that * will be automatically added on the channel. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \return A PendingChannel which will emit PendingChannel::finished * successfully, when the Channel is available for handling using * PendingChannel::channel(), or with an error if one has been encountered. * \sa ensureAndHandleChannel(), createAndHandleChannel() */ PendingChannel *Account::ensureAndHandleVideoCall( const QString &contactIdentifier, const QString &initialVideoContentName, const QDateTime &userActionTime) { QVariantMap request = videoCallRequest(contactIdentifier, initialVideoContentName); return ensureAndHandleChannel(request, userActionTime); } /** * Start a request to ensure that a video call channel with the given * contact \a contact exists, creating it if necessary. * This initially just creates a PendingChannel object, * which can be used to track the success or failure of the request. * * \param contact The contact to call. * \param initialVideoContentName The name of the initial video CallContent that * will be automatically added on the channel. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \return A PendingChannel which will emit PendingChannel::finished * successfully, when the Channel is available for handling using * PendingChannel::channel(), or with an error if one has been encountered. * \sa ensureAndHandleChannel(), createAndHandleChannel() */ PendingChannel *Account::ensureAndHandleVideoCall( const ContactPtr &contact, const QString &initialVideoContentName, const QDateTime &userActionTime) { QVariantMap request = videoCallRequest(contact, initialVideoContentName); return ensureAndHandleChannel(request, userActionTime); } /** * Start a request to ensure that an audio/video call channel with the given * contact \a contactIdentifier exists, creating it if necessary. * This initially just creates a PendingChannel object, * which can be used to track the success or failure of the request. * * \param contactIdentifier The identifier of the contact to call. * \param initialAudioContentName The name of the initial audio CallContent that * will be automatically added on the channel. * \param initialVideoContentName The name of the initial video CallContent that * will be automatically added on the channel. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \return A PendingChannel which will emit PendingChannel::finished * successfully, when the Channel is available for handling using * PendingChannel::channel(), or with an error if one has been encountered. * \sa ensureAndHandleChannel(), createAndHandleChannel() */ PendingChannel *Account::ensureAndHandleAudioVideoCall( const QString &contactIdentifier, const QString &initialAudioContentName, const QString &initialVideoContentName, const QDateTime &userActionTime) { QVariantMap request = audioVideoCallRequest(contactIdentifier, initialAudioContentName, initialVideoContentName); return ensureAndHandleChannel(request, userActionTime); } /** * Start a request to ensure that an audio/video call channel with the given * contact \a contact exists, creating it if necessary. * This initially just creates a PendingChannel object, * which can be used to track the success or failure of the request. * * \param contact The contact to call. * \param initialAudioContentName The name of the initial audio CallContent that * will be automatically added on the channel. * \param initialVideoContentName The name of the initial video CallContent that * will be automatically added on the channel. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \return A PendingChannel which will emit PendingChannel::finished * successfully, when the Channel is available for handling using * PendingChannel::channel(), or with an error if one has been encountered. * \sa ensureAndHandleChannel(), createAndHandleChannel() */ PendingChannel *Account::ensureAndHandleAudioVideoCall( const ContactPtr &contact, const QString &initialAudioContentName, const QString &initialVideoContentName, const QDateTime &userActionTime) { QVariantMap request = audioVideoCallRequest(contact, initialAudioContentName, initialVideoContentName); return ensureAndHandleChannel(request, userActionTime); } /** * Start a request to ensure that a media channel with the given * contact \a contactIdentifier exists, creating it if necessary. * This initially just creates a PendingChannel object, * which can be used to track the success or failure of the request. * * \param contactIdentifier The identifier of the contact to call. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \return A PendingChannel which will emit PendingChannel::finished * successfully, when the Channel is available for handling using * PendingChannel::channel(), or with an error if one has been encountered. * \sa ensureAndHandleChannel(), createAndHandleChannel() */ PendingChannel *Account::ensureAndHandleStreamedMediaCall( const QString &contactIdentifier, const QDateTime &userActionTime) { QVariantMap request = streamedMediaCallRequest(contactIdentifier); return ensureAndHandleChannel(request, userActionTime); } /** * Start a request to ensure that a media channel with the given * contact \a contact exists, creating it if necessary. * This initially just creates a PendingChannel object, * which can be used to track the success or failure of the request. * * \param contact The contact to call. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \return A PendingChannel which will emit PendingChannel::finished * successfully, when the Channel is available for handling using * PendingChannel::channel(), or with an error if one has been encountered. * \sa ensureAndHandleChannel(), createAndHandleChannel() */ PendingChannel *Account::ensureAndHandleStreamedMediaCall( const ContactPtr &contact, const QDateTime &userActionTime) { QVariantMap request = streamedMediaCallRequest(contact); return ensureAndHandleChannel(request, userActionTime); } /** * Start a request to ensure that an audio call with the given * contact \a contactIdentifier exists, creating it if necessary. * This initially just creates a PendingChannel object, * which can be used to track the success or failure of the request. * * This will only work on relatively modern connection managers, * like telepathy-gabble 0.9.0 or later. * * \param contactIdentifier The identifier of the contact to call. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \return A PendingChannel which will emit PendingChannel::finished * successfully, when the Channel is available for handling using * PendingChannel::channel(), or with an error if one has been encountered. * \sa ensureAndHandleChannel(), createAndHandleChannel() */ PendingChannel *Account::ensureAndHandleStreamedMediaAudioCall( const QString &contactIdentifier, const QDateTime &userActionTime) { QVariantMap request = streamedMediaAudioCallRequest(contactIdentifier); return ensureAndHandleChannel(request, userActionTime); } /** * Start a request to ensure that an audio call with the given * contact \a contact exists, creating it if necessary. * This initially just creates a PendingChannel object, * which can be used to track the success or failure of the request. * * This will only work on relatively modern connection managers, * like telepathy-gabble 0.9.0 or later. * * \param contact The contact to call. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \return A PendingChannel which will emit PendingChannel::finished * successfully, when the Channel is available for handling using * PendingChannel::channel(), or with an error if one has been encountered. * \sa ensureAndHandleChannel(), createAndHandleChannel() */ PendingChannel *Account::ensureAndHandleStreamedMediaAudioCall( const ContactPtr &contact, const QDateTime &userActionTime) { QVariantMap request = streamedMediaAudioCallRequest(contact); return ensureAndHandleChannel(request, userActionTime); } /** * Start a request to ensure that a video call with the given * contact \a contactIdentifier exists, creating it if necessary. * This initially just creates a PendingChannel object, * which can be used to track the success or failure of the request. * * This will only work on relatively modern connection managers, * like telepathy-gabble 0.9.0 or later. * * \param contactIdentifier The identifier of the contact to call. * \param withAudio true if both audio and video are required, false for a * video-only call. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \return A PendingChannel which will emit PendingChannel::finished * successfully, when the Channel is available for handling using * PendingChannel::channel(), or with an error if one has been encountered. * \sa ensureAndHandleChannel(), createAndHandleChannel() */ PendingChannel *Account::ensureAndHandleStreamedMediaVideoCall( const QString &contactIdentifier, bool withAudio, const QDateTime &userActionTime) { QVariantMap request = streamedMediaVideoCallRequest(contactIdentifier, withAudio); return ensureAndHandleChannel(request, userActionTime); } /** * Start a request to ensure that a video call with the given * contact \a contact exists, creating it if necessary. * This initially just creates a PendingChannel object, * which can be used to track the success or failure of the request. * * This will only work on relatively modern connection managers, * like telepathy-gabble 0.9.0 or later. * * \param contact The contact to call. * \param withAudio true if both audio and video are required, false for a * video-only call. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \return A PendingChannel which will emit PendingChannel::finished * successfully, when the Channel is available for handling using * PendingChannel::channel(), or with an error if one has been encountered. * \sa ensureAndHandleChannel(), createAndHandleChannel() */ PendingChannel *Account::ensureAndHandleStreamedMediaVideoCall( const ContactPtr &contact, bool withAudio, const QDateTime &userActionTime) { QVariantMap request = streamedMediaVideoCallRequest(contact, withAudio); return ensureAndHandleChannel(request, userActionTime); } /** * Start a request to create a file transfer channel with the given * contact \a contactIdentifier. * This initially just creates a PendingChannel object, * which can be used to track the success or failure of the request. * * \param contactIdentifier The identifier of the contact to send a file. * \param properties The desired properties. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \return A PendingChannel which will emit PendingChannel::finished * successfully, when the Channel is available for handling using * PendingChannel::channel(), or with an error if one has been encountered. * \sa ensureAndHandleChannel(), createAndHandleChannel() */ PendingChannel *Account::createAndHandleFileTransfer( const QString &contactIdentifier, const FileTransferChannelCreationProperties &properties, const QDateTime &userActionTime) { QVariantMap request = fileTransferRequest(contactIdentifier, properties); if (request.isEmpty()) { return new PendingChannel(TP_QT_ERROR_INVALID_ARGUMENT, QLatin1String("Cannot create a file transfer with invalid parameters")); } return createAndHandleChannel(request, userActionTime); } /** * Start a request to create a file transfer channel with the given * contact \a contact. * This initially just creates a PendingChannel object, * which can be used to track the success or failure of the request. * * \param contact The contact to send a file. * \param properties The desired properties. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \return A PendingChannel which will emit PendingChannel::finished * successfully, when the Channel is available for handling using * PendingChannel::channel(), or with an error if one has been encountered. * \sa ensureAndHandleChannel(), createAndHandleChannel() */ PendingChannel *Account::createAndHandleFileTransfer( const ContactPtr &contact, const FileTransferChannelCreationProperties &properties, const QDateTime &userActionTime) { QVariantMap request = fileTransferRequest(contact, properties); if (request.isEmpty()) { return new PendingChannel(TP_QT_ERROR_INVALID_ARGUMENT, QLatin1String("Cannot create a file transfer with invalid parameters")); } return createAndHandleChannel(request, userActionTime); } /** * Start a request to create a stream tube channel with the given * contact identifier \a contactIdentifier. * This initially just creates a PendingChannel object, * which can be used to track the success or failure of the request. * * \param contactIdentifier The identifier of the contact to open a stream tube with. * \param service The stream tube service. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \return A PendingChannel which will emit PendingChannel::finished * successfully, when the Channel is available for handling using * PendingChannel::channel(), or with an error if one has been encountered. * \sa ensureAndHandleChannel(), createAndHandleChannel() */ PendingChannel *Account::createAndHandleStreamTube( const QString &contactIdentifier, const QString &service, const QDateTime &userActionTime) { QVariantMap request = streamTubeRequest(contactIdentifier, service); return createAndHandleChannel(request, userActionTime); } /** * Start a request to create a stream tube channel with the given * contact \a contact. * This initially just creates a PendingChannel object, * which can be used to track the success or failure of the request. * * \param contact The contact to open a stream tube with. * \param service The stream tube service. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \return A PendingChannel which will emit PendingChannel::finished * successfully, when the Channel is available for handling using * PendingChannel::channel(), or with an error if one has been encountered. * \sa ensureAndHandleChannel(), createAndHandleChannel() */ PendingChannel *Account::createAndHandleStreamTube( const ContactPtr &contact, const QString &service, const QDateTime &userActionTime) { QVariantMap request = streamTubeRequest(contact, service); return createAndHandleChannel(request, userActionTime); } /** * Start a request to create a DBus tube channel with the given * contact identifier \a contactIdentifier. * This initially just creates a PendingChannel object, * which can be used to track the success or failure of the request. * * \param contactIdentifier The identifier of the contact to open a DBus tube with. * \param serviceName The DBus tube service name. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \return A PendingChannel which will emit PendingChannel::finished * successfully, when the Channel is available for handling using * PendingChannel::channel(), or with an error if one has been encountered. * \sa ensureAndHandleChannel(), createAndHandleChannel() */ PendingChannel *Account::createAndHandleDBusTube( const QString &contactIdentifier, const QString &serviceName, const QDateTime &userActionTime) { QVariantMap request = dbusTubeRequest(contactIdentifier, serviceName); return createAndHandleChannel(request, userActionTime); } /** * Start a request to create a DBus tube channel with the given * contact \a contact. * This initially just creates a PendingChannel object, * which can be used to track the success or failure of the request. * * \param contact The contact to open a DBus tube with. * \param service The DBus tube service name. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \return A PendingChannel which will emit PendingChannel::finished * successfully, when the Channel is available for handling using * PendingChannel::channel(), or with an error if one has been encountered. * \sa ensureAndHandleChannel(), createAndHandleChannel() */ PendingChannel *Account::createAndHandleDBusTube( const ContactPtr &contact, const QString &serviceName, const QDateTime &userActionTime) { QVariantMap request = dbusTubeRequest(contact, serviceName); return createAndHandleChannel(request, userActionTime); } /** * Start a request to create a conference text chat with the given * channels \a channels. * This initially just creates a PendingChannel object, * which can be used to track the success or failure of the request. * * \param channels The conference channels. * \param initialInviteeContactsIdentifiers A list of additional contacts * identifiers to be invited to this * conference when it is created. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \return A PendingChannel which will emit PendingChannel::finished * successfully, when the Channel is available for handling using * PendingChannel::channel(), or with an error if one has been encountered. * \sa ensureAndHandleChannel(), createAndHandleChannel() */ PendingChannel *Account::createAndHandleConferenceTextChat( const QList &channels, const QStringList &initialInviteeContactsIdentifiers, const QDateTime &userActionTime) { QVariantMap request = conferenceTextChatRequest(channels, initialInviteeContactsIdentifiers); return createAndHandleChannel(request, userActionTime); } /** * Start a request to create a conference text chat with the given * channels \a channels. * This initially just creates a PendingChannel object, * which can be used to track the success or failure of the request. * * \param channels The conference channels. * \param initialInviteeContacts A list of additional contacts * to be invited to this * conference when it is created. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \return A PendingChannel which will emit PendingChannel::finished * successfully, when the Channel is available for handling using * PendingChannel::channel(), or with an error if one has been encountered. * \sa ensureAndHandleChannel(), createAndHandleChannel() */ PendingChannel *Account::createAndHandleConferenceTextChat( const QList &channels, const QList &initialInviteeContacts, const QDateTime &userActionTime) { QVariantMap request = conferenceTextChatRequest(channels, initialInviteeContacts); return createAndHandleChannel(request, userActionTime); } /** * Start a request to create a conference text chat room with the given * channels \a channels and room name \a roomName. * This initially just creates a PendingChannel object, * which can be used to track the success or failure of the request. * * \param roomName The room name. * \param channels The conference channels. * \param initialInviteeContactsIdentifiers A list of additional contacts * identifiers to be invited to this * conference when it is created. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \return A PendingChannel which will emit PendingChannel::finished * successfully, when the Channel is available for handling using * PendingChannel::channel(), or with an error if one has been encountered. * \sa ensureAndHandleChannel(), createAndHandleChannel() */ PendingChannel *Account::createAndHandleConferenceTextChatroom( const QString &roomName, const QList &channels, const QStringList &initialInviteeContactsIdentifiers, const QDateTime &userActionTime) { QVariantMap request = conferenceTextChatroomRequest(roomName, channels, initialInviteeContactsIdentifiers); return createAndHandleChannel(request, userActionTime); } /** * Start a request to create a conference text chat room with the given * channels \a channels and room name \a roomName. * This initially just creates a PendingChannel object, * which can be used to track the success or failure of the request. * * \param roomName The room name. * \param channels The conference channels. * \param initialInviteeContacts A list of additional contacts * to be invited to this * conference when it is created. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \return A PendingChannel which will emit PendingChannel::finished * successfully, when the Channel is available for handling using * PendingChannel::channel(), or with an error if one has been encountered. * \sa ensureAndHandleChannel(), createAndHandleChannel() */ PendingChannel *Account::createAndHandleConferenceTextChatroom( const QString &roomName, const QList &channels, const QList &initialInviteeContacts, const QDateTime &userActionTime) { QVariantMap request = conferenceTextChatroomRequest(roomName, channels, initialInviteeContacts); return createAndHandleChannel(request, userActionTime); } /** * Start a request to create a conference media call with the given * channels \a channels. * This initially just creates a PendingChannel object, * which can be used to track the success or failure of the request. * * \param channels The conference channels. * \param initialInviteeContactsIdentifiers A list of additional contacts * identifiers to be invited to this * conference when it is created. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \return A PendingChannel which will emit PendingChannel::finished * successfully, when the Channel is available for handling using * PendingChannel::channel(), or with an error if one has been encountered. * \sa ensureAndHandleChannel(), createAndHandleChannel() */ PendingChannel *Account::createAndHandleConferenceStreamedMediaCall( const QList &channels, const QStringList &initialInviteeContactsIdentifiers, const QDateTime &userActionTime) { QVariantMap request = conferenceStreamedMediaCallRequest(channels, initialInviteeContactsIdentifiers); return createAndHandleChannel(request, userActionTime); } /** * Start a request to create a conference media call with the given * channels \a channels. * This initially just creates a PendingChannel object, * which can be used to track the success or failure of the request. * * \param channels The conference channels. * \param initialInviteeContacts A list of additional contacts * to be invited to this * conference when it is created. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \return A PendingChannel which will emit PendingChannel::finished * successfully, when the Channel is available for handling using * PendingChannel::channel(), or with an error if one has been encountered. * \sa ensureAndHandleChannel(), createAndHandleChannel() */ PendingChannel *Account::createAndHandleConferenceStreamedMediaCall( const QList &channels, const QList &initialInviteeContacts, const QDateTime &userActionTime) { QVariantMap request = conferenceStreamedMediaCallRequest(channels, initialInviteeContacts); return createAndHandleChannel(request, userActionTime); } /** * Start a request to create a contact search channel with the given * server \a server and limit \a limit. * This initially just creates a PendingChannel object, * which can be used to track the success or failure of the request. * * \param server For protocols which support searching for contacts on multiple servers with * different DNS names (like XMPP), the DNS name of the server to be searched, * e.g. "characters.shakespeare.lit". Otherwise, an empty string. * If the protocol does not support specifying a search server, this will be ignored. * \param limit The desired maximum number of results that should be returned by a doing a search. * If the protocol does not support specifying a limit for the number of results * returned at a time, this will be ignored. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \return A PendingChannel which will emit PendingChannel::finished * successfully, when the Channel is available for handling using * PendingChannel::channel(), or with an error if one has been encountered. * \sa ensureAndHandleChannel(), createAndHandleChannel() */ PendingChannel *Account::createAndHandleContactSearch( const QString &server, uint limit, const QDateTime &userActionTime) { QVariantMap request = contactSearchRequest(capabilities(), server, limit); return createAndHandleChannel(request, userActionTime); } /** * Start a request to create a channel. * This initially just creates a PendingChannelRequest object, * which can be used to track the success or failure of the request, * or to cancel it. * * Helper methods for text chat, text chat room, media call and conference are * provided and should be used if appropriate. * * \param request A dictionary containing desirable properties. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \param preferredHandler Either the well-known bus name (starting with * org.freedesktop.Telepathy.Client.) of the preferred * handler for this channel, or an empty string to * indicate that any handler would be acceptable. * \param hints Arbitrary metadata which will be relayed to the handler if supported, * as indicated by supportsRequestHints(). * \return A PendingChannelRequest which will emit PendingChannelRequest::finished * when the request has been made. * \sa createChannel() */ PendingChannelRequest *Account::createChannel( const QVariantMap &request, const QDateTime &userActionTime, const QString &preferredHandler, const ChannelRequestHints &hints) { return new PendingChannelRequest(AccountPtr(this), request, userActionTime, preferredHandler, true, hints); } /** * Start a request to ensure that a channel exists, creating it if necessary. * This initially just creates a PendingChannelRequest object, * which can be used to track the success or failure of the request, * or to cancel it. * * Helper methods for text chat, text chat room, media call and conference are * provided and should be used if appropriate. * * \param request A dictionary containing desirable properties. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \param preferredHandler Either the well-known bus name (starting with * org.freedesktop.Telepathy.Client.) of the preferred * handler for this channel, or an empty string to * indicate that any handler would be acceptable. * \param hints Arbitrary metadata which will be relayed to the handler if supported, * as indicated by supportsRequestHints(). * \return A PendingChannelRequest which will emit PendingChannelRequest::finished * when the request has been made. * \sa createChannel() */ PendingChannelRequest *Account::ensureChannel( const QVariantMap &request, const QDateTime &userActionTime, const QString &preferredHandler, const ChannelRequestHints &hints) { return new PendingChannelRequest(AccountPtr(this), request, userActionTime, preferredHandler, false, hints); } /** * Start a request to create channel. * This initially just creates a PendingChannel object, * which can be used to track the success or failure of the request. * * Helper methods for text chat, text chat room, media call and conference are * provided and should be used if appropriate. * * The caller is responsible for closing the channel with * Channel::requestClose() or Channel::requestLeave() when it has finished handling it. * * A possible error returned by this method is #TP_QT_ERROR_NOT_AVAILABLE, in case a conflicting * channel that matches \a request already exists. * * \param request A dictionary containing desirable properties. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \return A PendingChannel which will emit PendingChannel::finished * successfully, when the Channel is available for handling using * PendingChannel::channel(), or with an error if one has been encountered. * \sa ensureAndHandleChannel() */ PendingChannel *Account::createAndHandleChannel( const QVariantMap &request, const QDateTime &userActionTime) { return new PendingChannel(AccountPtr(this), request, userActionTime, true); } /** * Start a request to ensure that a channel exists, creating it if necessary. * This initially just creates a PendingChannel object, * which can be used to track the success or failure of the request. * * Helper methods for text chat, text chat room, media call and conference are * provided and should be used if appropriate. * * The caller is responsible for closing the channel with * Channel::requestClose() or Channel::requestLeave() when it has finished handling it. * * A possible error returned by this method is #TP_QT_ERROR_NOT_YOURS, in case somebody else is * already handling a channel that matches \a request. * * \param request A dictionary containing desirable properties. * \param userActionTime The time at which user action occurred, or QDateTime() * if this channel request is for some reason not * involving user action. * \return A PendingChannel which will emit PendingChannel::finished * successfully, when the Channel is available for handling using * PendingChannel::channel(), or with an error if one has been encountered. * \sa createAndHandleChannel() */ PendingChannel *Account::ensureAndHandleChannel( const QVariantMap &request, const QDateTime &userActionTime) { return new PendingChannel(AccountPtr(this), request, userActionTime, false); } /** * Return the Client::AccountInterface interface proxy object for this account. * This method is protected since the convenience methods provided by this * class should generally be used instead of calling D-Bus methods * directly. * * \return A pointer to the existing Client::AccountInterface object for this * Account object. */ Client::AccountInterface *Account::baseInterface() const { return mPriv->baseInterface; } /** * Return the Client::ChannelDispatcherInterface interface proxy object to use for requesting * channels on this account. * * This method is protected since the convenience methods provided by this * class should generally be used instead of calling D-Bus methods * directly. * * \return A pointer to the existing Client::ChannelDispatcherInterface object for this * Account object. */ Client::ChannelDispatcherInterface *Account::dispatcherInterface() const { return mPriv->dispatcherContext->iface; } /**** Private ****/ void Account::Private::init() { if (!parent->isValid()) { return; } parent->connect(baseInterface, SIGNAL(Removed()), SLOT(onRemoved())); parent->connect(baseInterface, SIGNAL(AccountPropertyChanged(QVariantMap)), SLOT(onPropertyChanged(QVariantMap))); } void Account::Private::introspectMain(Account::Private *self) { if (self->dispatcherContext->introspected) { self->parent->onDispatcherIntrospected(0); return; } if (!self->dispatcherContext->introspectOp) { debug() << "Discovering if the Channel Dispatcher supports request hints"; self->dispatcherContext->introspectOp = self->dispatcherContext->iface->requestPropertySupportsRequestHints(); } connect(self->dispatcherContext->introspectOp.data(), SIGNAL(finished(Tp::PendingOperation*)), self->parent, SLOT(onDispatcherIntrospected(Tp::PendingOperation*))); } void Account::Private::introspectAvatar(Account::Private *self) { debug() << "Calling GetAvatar(Account)"; // we already checked if avatar interface exists, so bypass avatar interface // checking Client::AccountInterfaceAvatarInterface *iface = self->parent->interface(); // If we are here it means the user cares about avatar, so // connect to avatar changed signal, so we update the avatar // when it changes. self->parent->connect(iface, SIGNAL(AvatarChanged()), SLOT(onAvatarChanged())); self->retrieveAvatar(); } void Account::Private::introspectProtocolInfo(Account::Private *self) { Q_ASSERT(!self->cm); self->cm = ConnectionManager::create( self->parent->dbusConnection(), self->cmName, self->connFactory, self->chanFactory, self->contactFactory); self->parent->connect(self->cm->becomeReady(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onConnectionManagerReady(Tp::PendingOperation*))); } void Account::Private::introspectCapabilities(Account::Private *self) { if (!self->connection) { // there is no connection, just make capabilities ready self->readinessHelper->setIntrospectCompleted(FeatureCapabilities, true); return; } self->parent->connect(self->connection->becomeReady(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onConnectionReady(Tp::PendingOperation*))); } void Account::Private::updateProperties(const QVariantMap &props) { debug() << "Account::updateProperties: changed:"; if (props.contains(QLatin1String("Interfaces"))) { parent->setInterfaces(qdbus_cast(props[QLatin1String("Interfaces")])); debug() << " Interfaces:" << parent->interfaces(); } QString oldIconName = parent->iconName(); bool serviceNameChanged = false; bool profileChanged = false; if (props.contains(QLatin1String("Service")) && serviceName != qdbus_cast(props[QLatin1String("Service")])) { serviceNameChanged = true; serviceName = qdbus_cast(props[QLatin1String("Service")]); debug() << " Service Name:" << parent->serviceName(); /* use parent->serviceName() here as if the service name is empty we are going to use the * protocol name */ emit parent->serviceNameChanged(parent->serviceName()); parent->notify("serviceName"); /* if we had a profile and the service changed, it means the profile also changed */ if (parent->isReady(Account::FeatureProfile)) { /* service name changed, let's recreate profile */ profileChanged = true; profile.reset(); emit parent->profileChanged(parent->profile()); parent->notify("profile"); } } if (props.contains(QLatin1String("DisplayName")) && displayName != qdbus_cast(props[QLatin1String("DisplayName")])) { displayName = qdbus_cast(props[QLatin1String("DisplayName")]); debug() << " Display Name:" << displayName; emit parent->displayNameChanged(displayName); parent->notify("displayName"); } if ((props.contains(QLatin1String("Icon")) && oldIconName != qdbus_cast(props[QLatin1String("Icon")])) || serviceNameChanged) { if (props.contains(QLatin1String("Icon"))) { iconName = qdbus_cast(props[QLatin1String("Icon")]); } QString newIconName = parent->iconName(); if (oldIconName != newIconName) { debug() << " Icon:" << newIconName; emit parent->iconNameChanged(newIconName); parent->notify("iconName"); } } if (props.contains(QLatin1String("Nickname")) && nickname != qdbus_cast(props[QLatin1String("Nickname")])) { nickname = qdbus_cast(props[QLatin1String("Nickname")]); debug() << " Nickname:" << nickname; emit parent->nicknameChanged(nickname); parent->notify("nickname"); } if (props.contains(QLatin1String("NormalizedName")) && normalizedName != qdbus_cast(props[QLatin1String("NormalizedName")])) { normalizedName = qdbus_cast(props[QLatin1String("NormalizedName")]); debug() << " Normalized Name:" << normalizedName; emit parent->normalizedNameChanged(normalizedName); parent->notify("normalizedName"); } if (props.contains(QLatin1String("Valid")) && valid != qdbus_cast(props[QLatin1String("Valid")])) { valid = qdbus_cast(props[QLatin1String("Valid")]); debug() << " Valid:" << (valid ? "true" : "false"); emit parent->validityChanged(valid); parent->notify("valid"); } if (props.contains(QLatin1String("Enabled")) && enabled != qdbus_cast(props[QLatin1String("Enabled")])) { enabled = qdbus_cast(props[QLatin1String("Enabled")]); debug() << " Enabled:" << (enabled ? "true" : "false"); emit parent->stateChanged(enabled); parent->notify("enabled"); } if (props.contains(QLatin1String("ConnectAutomatically")) && connectsAutomatically != qdbus_cast(props[QLatin1String("ConnectAutomatically")])) { connectsAutomatically = qdbus_cast(props[QLatin1String("ConnectAutomatically")]); debug() << " Connects Automatically:" << (connectsAutomatically ? "true" : "false"); emit parent->connectsAutomaticallyPropertyChanged(connectsAutomatically); parent->notify("connectsAutomatically"); } if (props.contains(QLatin1String("HasBeenOnline")) && !hasBeenOnline && qdbus_cast(props[QLatin1String("HasBeenOnline")])) { hasBeenOnline = true; debug() << " HasBeenOnline changed to true"; // don't emit firstOnline unless we're already ready, that would be // misleading - we'd emit it just before any already-used account // became ready if (parent->isReady(Account::FeatureCore)) { emit parent->firstOnline(); } parent->notify("hasBeenOnline"); } if (props.contains(QLatin1String("Parameters")) && parameters != qdbus_cast(props[QLatin1String("Parameters")])) { parameters = qdbus_cast(props[QLatin1String("Parameters")]); emit parent->parametersChanged(parameters); parent->notify("parameters"); } if (props.contains(QLatin1String("AutomaticPresence")) && automaticPresence.barePresence() != qdbus_cast( props[QLatin1String("AutomaticPresence")])) { automaticPresence = Presence(qdbus_cast( props[QLatin1String("AutomaticPresence")])); debug() << " Automatic Presence:" << automaticPresence.type() << "-" << automaticPresence.status(); emit parent->automaticPresenceChanged(automaticPresence); parent->notify("automaticPresence"); } if (props.contains(QLatin1String("CurrentPresence")) && currentPresence.barePresence() != qdbus_cast( props[QLatin1String("CurrentPresence")])) { currentPresence = Presence(qdbus_cast( props[QLatin1String("CurrentPresence")])); debug() << " Current Presence:" << currentPresence.type() << "-" << currentPresence.status(); emit parent->currentPresenceChanged(currentPresence); parent->notify("currentPresence"); emit parent->onlinenessChanged(parent->isOnline()); parent->notify("online"); } if (props.contains(QLatin1String("RequestedPresence")) && requestedPresence.barePresence() != qdbus_cast( props[QLatin1String("RequestedPresence")])) { requestedPresence = Presence(qdbus_cast( props[QLatin1String("RequestedPresence")])); debug() << " Requested Presence:" << requestedPresence.type() << "-" << requestedPresence.status(); emit parent->requestedPresenceChanged(requestedPresence); parent->notify("requestedPresence"); } if (props.contains(QLatin1String("ChangingPresence")) && changingPresence != qdbus_cast( props[QLatin1String("ChangingPresence")])) { changingPresence = qdbus_cast( props[QLatin1String("ChangingPresence")]); debug() << " Changing Presence:" << changingPresence; emit parent->changingPresence(changingPresence); parent->notify("changingPresence"); } if (props.contains(QLatin1String("Connection"))) { QString path = qdbus_cast(props[QLatin1String("Connection")]).path(); if (path.isEmpty()) { debug() << " The map contains \"Connection\" but it's empty as a QDBusObjectPath!"; debug() << " Trying QString (known bug in some MC/dbus-glib versions)"; path = qdbus_cast(props[QLatin1String("Connection")]); } debug() << " Connection Object Path:" << path; if (path == QLatin1String("/")) { path = QString(); } connObjPathQueue.enqueue(path); if (connObjPathQueue.size() == 1) { processConnQueue(); } // onConnectionBuilt for a previous path will make sure the path we enqueued is processed if // the queue wasn't empty (so is now size() > 1) } bool connectionStatusChanged = false; if (props.contains(QLatin1String("ConnectionStatus")) || props.contains(QLatin1String("ConnectionStatusReason")) || props.contains(QLatin1String("ConnectionError")) || props.contains(QLatin1String("ConnectionErrorDetails"))) { ConnectionStatus oldConnectionStatus = connectionStatus; if (props.contains(QLatin1String("ConnectionStatus")) && connectionStatus != ConnectionStatus( qdbus_cast(props[QLatin1String("ConnectionStatus")]))) { connectionStatus = ConnectionStatus( qdbus_cast(props[QLatin1String("ConnectionStatus")])); debug() << " Connection Status:" << connectionStatus; connectionStatusChanged = true; } if (props.contains(QLatin1String("ConnectionStatusReason")) && connectionStatusReason != ConnectionStatusReason( qdbus_cast(props[QLatin1String("ConnectionStatusReason")]))) { connectionStatusReason = ConnectionStatusReason( qdbus_cast(props[QLatin1String("ConnectionStatusReason")])); debug() << " Connection StatusReason:" << connectionStatusReason; connectionStatusChanged = true; } if (connectionStatusChanged) { parent->notify("connectionStatus"); parent->notify("connectionStatusReason"); } if (props.contains(QLatin1String("ConnectionError")) && connectionError != qdbus_cast( props[QLatin1String("ConnectionError")])) { connectionError = qdbus_cast( props[QLatin1String("ConnectionError")]); debug() << " Connection Error:" << connectionError; connectionStatusChanged = true; } if (props.contains(QLatin1String("ConnectionErrorDetails")) && connectionErrorDetails.allDetails() != qdbus_cast( props[QLatin1String("ConnectionErrorDetails")])) { connectionErrorDetails = Connection::ErrorDetails(qdbus_cast( props[QLatin1String("ConnectionErrorDetails")])); debug() << " Connection Error Details:" << connectionErrorDetails.allDetails(); connectionStatusChanged = true; } if (connectionStatusChanged) { /* Something other than status changed, let's not emit connectionStatusChanged * and keep the error/errorDetails, for the next interaction. * It may happen if ConnectionError changes and in another property * change the status changes to Disconnected, so we use the error * previously signalled. If the status changes to something other * than Disconnected later, the error is cleared. */ if (oldConnectionStatus != connectionStatus) { /* We don't signal error for status other than Disconnected */ if (connectionStatus != ConnectionStatusDisconnected) { connectionError = QString(); connectionErrorDetails = Connection::ErrorDetails(); } else if (connectionError.isEmpty()) { connectionError = ConnectionHelper::statusReasonToErrorName( connectionStatusReason, oldConnectionStatus); } checkCapabilitiesChanged(profileChanged); emit parent->connectionStatusChanged(connectionStatus); parent->notify("connectionError"); parent->notify("connectionErrorDetails"); } else { connectionStatusChanged = false; } } } if (!connectionStatusChanged && profileChanged) { checkCapabilitiesChanged(profileChanged); } } void Account::Private::retrieveAvatar() { QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( parent->mPriv->properties->Get( TP_QT_IFACE_ACCOUNT_INTERFACE_AVATAR, QLatin1String("Avatar")), parent); parent->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotAvatar(QDBusPendingCallWatcher*))); } bool Account::Private::processConnQueue() { while (!connObjPathQueue.isEmpty()) { QString path = connObjPathQueue.head(); if (path.isEmpty()) { if (!connection.isNull()) { debug() << "Dropping connection for account" << parent->objectPath(); connection.reset(); emit parent->connectionChanged(connection); parent->notify("connection"); parent->notify("connectionObjectPath"); } connObjPathQueue.dequeue(); } else { debug() << "Building connection" << path << "for account" << parent->objectPath(); if (connection && connection->objectPath() == path) { debug() << " Connection already built"; connObjPathQueue.dequeue(); continue; } QString busName = path.mid(1).replace(QLatin1String("/"), QLatin1String(".")); parent->connect(connFactory->proxy(busName, path, chanFactory, contactFactory), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onConnectionBuilt(Tp::PendingOperation*))); // No dequeue here, but only in onConnectionBuilt, so we will queue future changes return false; // Only move on to the next paths when that build finishes } } return true; } void Account::onDispatcherIntrospected(Tp::PendingOperation *op) { if (!mPriv->dispatcherContext->introspected) { Tp::PendingVariant *pv = static_cast(op); Q_ASSERT(pv != NULL); // Only the first Account for a given dispatcher will enter this branch, and will // immediately make further created accounts skip the whole waiting for CD to get // introspected part entirely mPriv->dispatcherContext->introspected = true; if (pv->isValid()) { mPriv->dispatcherContext->supportsHints = qdbus_cast(pv->result()); debug() << "Discovered channel dispatcher support for request hints: " << mPriv->dispatcherContext->supportsHints; } else { if (pv->errorName() == TP_QT_ERROR_NOT_IMPLEMENTED) { debug() << "Channel Dispatcher does not implement support for request hints"; } else { warning() << "(Too old?) Channel Dispatcher failed to tell us whether" << "it supports request hints, assuming it doesn't:" << pv->errorName() << ':' << pv->errorMessage(); } mPriv->dispatcherContext->supportsHints = false; } } debug() << "Calling Properties::GetAll(Account) on " << objectPath(); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( mPriv->properties->GetAll( TP_QT_IFACE_ACCOUNT), this); connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotMainProperties(QDBusPendingCallWatcher*))); } void Account::gotMainProperties(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (!reply.isError()) { debug() << "Got reply to Properties.GetAll(Account) for" << objectPath(); mPriv->updateProperties(reply.value()); mPriv->readinessHelper->setInterfaces(interfaces()); mPriv->mayFinishCore = true; if (mPriv->connObjPathQueue.isEmpty()) { debug() << "Account basic functionality is ready"; mPriv->coreFinished = true; mPriv->readinessHelper->setIntrospectCompleted(FeatureCore, true); } else { debug() << "Deferring finishing Account::FeatureCore until the connection is built"; } } else { mPriv->readinessHelper->setIntrospectCompleted(FeatureCore, false, reply.error()); warning().nospace() << "GetAll(Account) failed: " << reply.error().name() << ": " << reply.error().message(); } watcher->deleteLater(); } void Account::gotAvatar(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (!reply.isError()) { debug() << "Got reply to GetAvatar(Account)"; mPriv->avatar = qdbus_cast(reply); // It could be in either of actual or missing from the first time in corner cases like the // object going away, so let's be prepared for both (only checking for actualFeatures here // actually used to trigger a rare bug) // // Anyway, the idea is to not do setIntrospectCompleted twice if (!mPriv->readinessHelper->actualFeatures().contains(FeatureAvatar) && !mPriv->readinessHelper->missingFeatures().contains(FeatureAvatar)) { mPriv->readinessHelper->setIntrospectCompleted(FeatureAvatar, true); } emit avatarChanged(mPriv->avatar); notify("avatar"); } else { // check if the feature is already there, and for some reason retrieveAvatar // failed when called the second time if (!mPriv->readinessHelper->actualFeatures().contains(FeatureAvatar) && !mPriv->readinessHelper->missingFeatures().contains(FeatureAvatar)) { mPriv->readinessHelper->setIntrospectCompleted(FeatureAvatar, false, reply.error()); } warning().nospace() << "GetAvatar(Account) failed: " << reply.error().name() << ": " << reply.error().message(); } watcher->deleteLater(); } void Account::onAvatarChanged() { debug() << "Avatar changed, retrieving it"; mPriv->retrieveAvatar(); } void Account::onConnectionManagerReady(PendingOperation *operation) { bool error = operation->isError(); if (!error) { error = !mPriv->cm->hasProtocol(mPriv->protocolName); } if (!error) { mPriv->readinessHelper->setIntrospectCompleted(FeatureProtocolInfo, true); } else { warning() << "Failed to find the protocol in the CM protocols for account" << objectPath(); mPriv->readinessHelper->setIntrospectCompleted(FeatureProtocolInfo, false, operation->errorName(), operation->errorMessage()); } } void Account::onConnectionReady(PendingOperation *op) { mPriv->checkCapabilitiesChanged(false); /* let's not fail if connection can't become ready, the caps will still * work, but return the CM caps instead. Also no need to call * setIntrospectCompleted if the feature was already set to complete once, * since this method will be called whenever the account connection * changes */ if (!isReady(FeatureCapabilities)) { mPriv->readinessHelper->setIntrospectCompleted(FeatureCapabilities, true); } } void Account::onPropertyChanged(const QVariantMap &delta) { mPriv->updateProperties(delta); } void Account::onRemoved() { mPriv->valid = false; mPriv->enabled = false; invalidate(TP_QT_ERROR_OBJECT_REMOVED, QLatin1String("Account removed from AccountManager")); emit removed(); } void Account::onConnectionBuilt(PendingOperation *op) { PendingReady *readyOp = qobject_cast(op); Q_ASSERT(readyOp != NULL); if (op->isError()) { warning() << "Building connection" << mPriv->connObjPathQueue.head() << "failed with" << op->errorName() << "-" << op->errorMessage(); if (!mPriv->connection.isNull()) { mPriv->connection.reset(); emit connectionChanged(mPriv->connection); notify("connection"); notify("connectionObjectPath"); } } else { ConnectionPtr prevConn = mPriv->connection; QString prevConnPath = mPriv->connectionObjectPath(); mPriv->connection = ConnectionPtr::qObjectCast(readyOp->proxy()); Q_ASSERT(mPriv->connection); debug() << "Connection" << mPriv->connectionObjectPath() << "built for" << objectPath(); if (prevConn != mPriv->connection) { notify("connection"); emit connectionChanged(mPriv->connection); } if (prevConnPath != mPriv->connectionObjectPath()) { notify("connectionObjectPath"); } } mPriv->connObjPathQueue.dequeue(); if (mPriv->processConnQueue() && !mPriv->coreFinished && mPriv->mayFinishCore) { debug() << "Account" << objectPath() << "basic functionality is ready (connections built)"; mPriv->coreFinished = true; mPriv->readinessHelper->setIntrospectCompleted(FeatureCore, true); } } /** * \fn void Account::removed() * * Emitted when this account is removed from the account manager it belonged. * * \sa remove(). */ /** * \fn void Account::validityChanged(bool validity) * * Emitted when the value of isValidAccount() changes. * * \param validity The new validity of this account. * \sa isValidAccount() */ /** * \fn void Account::stateChanged(bool state) * * Emitted when the value of isEnabled() changes. * * \param state The new state of this account. * \sa isEnabled() */ /** * \fn void Account::serviceNameChanged(const QString &serviceName) * * Emitted when the value of serviceName() changes. * * \param serviceName The new service name of this account. * \sa serviceName(), setServiceName() */ /** * \fn void Account::profileChanged(const Tp::ProfilePtr &profile) * * Emitted when the value of profile() changes. * * \param profile The new profile of this account. * \sa profile() */ /** * \fn void Account::displayNameChanged(const QString &displayName) * * Emitted when the value of displayName() changes. * * \param displayName The new display name of this account. * \sa displayName(), setDisplayName() */ /** * \fn void Account::iconNameChanged(const QString &iconName) * * Emitted when the value of iconName() changes. * * \param iconName The new icon name of this account. * \sa iconName(), setIconName() */ /** * \fn void Account::nicknameChanged(const QString &nickname) * * Emitted when the value of nickname() changes. * * \param nickname The new nickname of this account. * \sa nickname(), setNickname() */ /** * \fn void Account::normalizedNameChanged(const QString &normalizedName) * * Emitted when the value of normalizedName() changes. * * \param normalizedName The new normalized name of this account. * \sa normalizedName() */ /** * \fn void Account::capabilitiesChanged(const Tp::ConnectionCapabilities &capabilities) * * Emitted when the value of capabilities() changes. * * \param capabilities The new capabilities of this account. * \sa capabilities() */ /** * \fn void Account::connectsAutomaticallyPropertyChanged(bool connectsAutomatically) * * Emitted when the value of connectsAutomatically() changes. * * \param connectsAutomatically The new value of connects automatically property * of this account. * \sa isEnabled() */ /** * \fn void Account::firstOnline() * * Emitted when this account is first put online. * * \sa hasBeenOnline() */ /** * \fn void Account::parametersChanged(const QVariantMap ¶meters) * * Emitted when the value of parameters() changes. * * \param parameters The new parameters of this account. * \sa parameters() */ /** * \fn void Account::changingPresence(bool value) * * Emitted when the value of isChangingPresence() changes. * * \param value Whether this account's connection is changing presence. * \sa isChangingPresence() */ /** * \fn void Account::automaticPresenceChanged(const Tp::Presence &automaticPresence) * * Emitted when the value of automaticPresence() changes. * * \param automaticPresence The new value of automatic presence property of this * account. * \sa automaticPresence(), currentPresenceChanged() */ /** * \fn void Account::currentPresenceChanged(const Tp::Presence ¤tPresence) * * Emitted when the value of currentPresence() changes. * * \param currentPresence The new value of the current presence property of this * account. * \sa currentPresence() */ /** * \fn void Account::requestedPresenceChanged(const Tp::Presence &requestedPresence) * * Emitted when the value of requestedPresence() changes. * * \param requestedPresence The new value of the requested presence property of this * account. * \sa requestedPresence(), currentPresenceChanged() */ /** * \fn void Account::onlinenessChanged(bool online) * * Emitted when the value of isOnline() changes. * * \param online Whether this account is online. * \sa isOnline(), currentPresence() */ /** * \fn void Account::avatarChanged(const Tp::Avatar &avatar) * * Emitted when the value of avatar() changes. * * \param avatar The new avatar of this account. * \sa avatar() */ /** * \fn void Account::connectionStatusChanged(Tp::ConnectionStatus status) * * Emitted when the connection status changes. * * \param status The new status of this account connection. * \sa connectionStatus(), connectionStatusReason(), connectionError(), connectionErrorDetails(), * Connection::ErrorDetails */ /** * \fn void Account::connectionChanged(const Tp::ConnectionPtr &connection) * * Emitted when the value of connection() changes. * * The \a connection will have the features set in the ConnectionFactory used by this account ready * and the same channel and contact factories used by this account. * * \param connection A ConnectionPtr pointing to the new Connection object or a null ConnectionPtr * if there is no connection. * \sa connection() */ } // Tp telepathy-qt-0.9.3/TelepathyQt/PresenceSpecList0000644000175200001440000000036612000056607024023 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_PresenceSpecList_HEADER_GUARD_ #define _TelepathyQt_PresenceSpecList_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/optional-interface-factory.h0000644000175200001440000000775212000056607026274 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2009 Collabora Ltd. * @copyright Copyright (C) 2008-2009 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_optional_interface_factory_h_HEADER_GUARD_ #define _TelepathyQt_optional_interface_factory_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include namespace Tp { class AbstractInterface; #ifndef DOXYGEN_SHOULD_SKIP_THIS class TP_QT_EXPORT OptionalInterfaceCache { Q_DISABLE_COPY(OptionalInterfaceCache) public: explicit OptionalInterfaceCache(QObject *proxy); ~OptionalInterfaceCache(); protected: AbstractInterface *getCached(const QString &name) const; void cache(AbstractInterface *interface) const; QObject *proxy() const; private: struct Private; friend struct Private; Private *mPriv; }; #endif /* DOXYGEN_SHOULD_SKIP_THIS */ template class OptionalInterfaceFactory #ifndef DOXYGEN_SHOULD_SKIP_THIS : private OptionalInterfaceCache #endif { Q_DISABLE_COPY(OptionalInterfaceFactory) public: enum InterfaceSupportedChecking { CheckInterfaceSupported, BypassInterfaceCheck }; inline OptionalInterfaceFactory(DBusProxySubclass *this_) : OptionalInterfaceCache(this_) { } inline ~OptionalInterfaceFactory() { } inline QStringList interfaces() const { return mInterfaces; } inline bool hasInterface(const QString &name) const { return mInterfaces.contains(name); } template inline Interface *optionalInterface( InterfaceSupportedChecking check = CheckInterfaceSupported) const { // Check for the remote object supporting the interface // Note that extra whitespace on "name" declaration is significant to avoid // vexing-parse QString name( (QLatin1String(Interface::staticInterfaceName())) ); if (check == CheckInterfaceSupported && !mInterfaces.contains(name)) { return 0; } // If present or forced, delegate to OptionalInterfaceFactory return interface(); } template inline Interface *interface() const { AbstractInterface* interfaceMustBeASubclassOfAbstractInterface = static_cast(NULL); Q_UNUSED(interfaceMustBeASubclassOfAbstractInterface); // If there is a interface cached already, return it // Note that extra whitespace on "name" declaration is significant to avoid // vexing-parse QString name( (QLatin1String(Interface::staticInterfaceName())) ); AbstractInterface *cached = getCached(name); if (cached) return static_cast(cached); // Otherwise, cache and return a newly constructed proxy Interface *interface = new Interface( static_cast(proxy())); cache(interface); return interface; } protected: inline void setInterfaces(const QStringList &interfaces) { mInterfaces = interfaces; } private: QStringList mInterfaces; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/generic-capability-filter.h0000644000175200001440000000752612000056607026061 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_generic_capability_filter_h_HEADER_GUARD_ #define _TelepathyQt_generic_capability_filter_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include namespace Tp { template class GenericCapabilityFilter : public Filter { public: static SharedPtr > create( const RequestableChannelClassSpecList &rccSpecs = RequestableChannelClassSpecList()) { return SharedPtr >(new GenericCapabilityFilter( rccSpecs)); } inline virtual ~GenericCapabilityFilter() { } inline virtual bool isValid() const { return true; } inline virtual bool matches(const SharedPtr &t) const { bool supportedRcc; RequestableChannelClassSpecList objectRccSpecs = t->capabilities().allClassSpecs(); Q_FOREACH (const RequestableChannelClassSpec &filterRccSpec, mFilter) { supportedRcc = false; Q_FOREACH (const RequestableChannelClassSpec &objectRccSpec, objectRccSpecs) { /* check if fixed properties match */ if (filterRccSpec.fixedProperties() == objectRccSpec.fixedProperties()) { supportedRcc = true; /* check if all allowed properties in the filter RCC * are in the object RCC allowed properties */ Q_FOREACH (const QString &value, filterRccSpec.allowedProperties()) { if (!objectRccSpec.allowsProperty(value)) { /* one of the properties in the filter RCC * allowed properties is not in the object RCC * allowed properties */ supportedRcc = false; break; } } /* this RCC is supported, no need to check anymore */ if (supportedRcc) { break; } } } /* one of the filter RCC is not supported, this object * won't match filter */ if (!supportedRcc) { return false; } } return true; } inline RequestableChannelClassSpecList filter() const { return mFilter; } inline void addRequestableChannelClassSubset(const RequestableChannelClassSpec &rccSpec) { mFilter.append(rccSpec.bareClass()); } inline void setRequestableChannelClassesSubset(const RequestableChannelClassSpecList &rccSpecs) { mFilter = rccSpecs.bareClasses(); } private: GenericCapabilityFilter(const RequestableChannelClassSpecList &rccSpecs) : Filter(), mFilter(rccSpecs) { } RequestableChannelClassSpecList mFilter; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/future-internal.h0000644000175200001440000000256212000056607024162 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_future_internal_h_HEADER_GUARD_ #define _TelepathyQt_future_internal_h_HEADER_GUARD_ #include "TelepathyQt/_gen/future-constants.h" #include "TelepathyQt/_gen/future-types.h" #include "TelepathyQt/Channel" #include "TelepathyQt/ChannelDispatcher" #include "TelepathyQt/Connection" #include "TelepathyQt/_gen/future-channel.h" #include "TelepathyQt/_gen/future-channel-dispatcher.h" #include "TelepathyQt/_gen/future-misc.h" #endif telepathy-qt-0.9.3/TelepathyQt/PresenceSpec0000644000175200001440000000035612000056607023166 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_PresenceSpec_HEADER_GUARD_ #define _TelepathyQt_PresenceSpec_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/tls-certificate.cpp0000644000175200001440000000205212000056607024445 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @license LGPL 2.1 * * 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 */ #define IN_TP_QT_HEADER #include #include "TelepathyQt/_gen/cli-tls-certificate-body.hpp" #include "TelepathyQt/_gen/cli-tls-certificate.moc.hpp" telepathy-qt-0.9.3/TelepathyQt/PendingDebugMessageList0000644000175200001440000000042612000056607025301 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_PendingDebugMessageList_HEADER_GUARD_ #define _TelepathyQt_PendingDebugMessageList_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/DBusError0000644000175200001440000000035212000056607022452 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_DBusError_HEADER_GUARD_ #define _TelepathyQt_DBusError_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/feature.h0000644000175200001440000000454312000056607022472 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_feature_h_HEADER_GUARD_ #define _TelepathyQt_feature_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include #include #include namespace Tp { class TP_QT_EXPORT Feature : public QPair { public: Feature(); Feature(const QString &className, uint id, bool critical = false); Feature(const Feature &other); ~Feature(); bool isValid() const { return mPriv.constData() != 0; } Feature &operator=(const Feature &other); bool isCritical() const; private: struct Private; friend struct Private; QSharedDataPointer mPriv; }; class TP_QT_EXPORT Features : public QSet { public: Features() { } Features(const Feature &feature) { insert(feature); } Features(const QSet &s) : QSet(s) { } }; inline Features operator|(const Feature &feature1, const Feature &feature2) { return Features() << feature1 << feature2; } inline Features operator|(const Features &features, const Feature &feature) { return Features(features) << feature; } inline uint qHash(const Features &features) { int ret = 0; Q_FOREACH (const Feature &feature, features) { int h = qHash(feature); ret ^= h; } return ret; } } // Tp Q_DECLARE_METATYPE(Tp::Feature); Q_DECLARE_METATYPE(Tp::Features); #endif telepathy-qt-0.9.3/TelepathyQt/PendingChannelRequest0000644000175200001440000000041712000056607025033 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_PendingChannelRequest_HEADER_GUARD_ #define _TelepathyQt_PendingChannelRequest_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/ConnectionInterface0000644000175200001440000000037612000056607024531 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ConnectionInterface_HEADER_GUARD_ #define _TelepathyQt_ConnectionInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/debug-receiver.h0000644000175200001440000000420212000056607023717 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011-2012 Collabora Ltd. * @license LGPL 2.1 * * 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 _TelepathyQt_debug_receiver_h_HEADER_GUARD_ #define _TelepathyQt_debug_receiver_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include namespace Tp { class PendingDebugMessageList; class TP_QT_EXPORT DebugReceiver : public StatefulDBusProxy { Q_OBJECT Q_DISABLE_COPY(DebugReceiver) public: static const Feature FeatureCore; static DebugReceiverPtr create(const QString &busName, const QDBusConnection &bus = QDBusConnection::sessionBus()); virtual ~DebugReceiver(); PendingDebugMessageList *fetchMessages(); PendingOperation *setMonitoringEnabled(bool enabled); Q_SIGNALS: void newDebugMessage(const Tp::DebugMessage & message); protected: DebugReceiver(const QDBusConnection &bus, const QString &busName); private Q_SLOTS: TP_QT_NO_EXPORT void onRequestAllPropertiesFinished(Tp::PendingOperation *op); TP_QT_NO_EXPORT void onNewDebugMessage(double time, const QString &domain, uint level, const QString &message); private: struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/PendingContactInfo0000644000175200001440000000040612000056607024317 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_PendingContactInfo_HEADER_GUARD_ #define _TelepathyQt_PendingContactInfo_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/ReferencedHandlesIterator0000644000175200001440000000025712000056607025662 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ReferencedHandlesIterator_HEADER_GUARD_ #define _TelepathyQt_ReferencedHandlesIterator_HEADER_GUARD_ #include #endif telepathy-qt-0.9.3/TelepathyQt/media-session-handler.cpp0000644000175200001440000000212312000056607025535 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008 Collabora Ltd. * @copyright Copyright (C) 2008 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/cli-media-session-handler-body.hpp" #include "TelepathyQt/_gen/cli-media-session-handler.moc.hpp" telepathy-qt-0.9.3/TelepathyQt/ProtocolInterface0000644000175200001440000000040212000056607024221 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ProtocolInterface_HEADER_GUARD_ #define _TelepathyQt_ProtocolInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/abstract-interface.h0000644000175200001440000000517412000056607024601 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_abstract_interface_h_HEADER_GUARD_ #define _TelepathyQt_abstract_interface_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include namespace Tp { class DBusProxy; class PendingVariant; class PendingOperation; class PendingVariantMap; class TP_QT_EXPORT AbstractInterface : public QDBusAbstractInterface { Q_OBJECT Q_DISABLE_COPY(AbstractInterface) public: virtual ~AbstractInterface(); bool isValid() const; QString invalidationReason() const; QString invalidationMessage() const; void setMonitorProperties(bool monitorProperties); bool isMonitoringProperties() const; Q_SIGNALS: void propertiesChanged(const QVariantMap &changedProperties, const QStringList &invalidatedProperties); protected Q_SLOTS: virtual void invalidate(Tp::DBusProxy *proxy, const QString &error, const QString &message); protected: AbstractInterface(DBusProxy *proxy, const QLatin1String &interface); AbstractInterface(const QString &busName, const QString &path, const QLatin1String &interface, const QDBusConnection &connection, QObject *parent); PendingVariant *internalRequestProperty(const QString &name) const; PendingOperation *internalSetProperty(const QString &name, const QVariant &newValue); PendingVariantMap *internalRequestAllProperties() const; private Q_SLOTS: TP_QT_NO_EXPORT void onPropertiesChanged(const QString &interface, const QVariantMap &changedProperties, const QStringList &invalidatedProperties); private: struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/pending-dbus-tube-connection.h0000644000175200001440000000441712000056607026510 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @license LGPL 2.1 * * 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 _TelepathyQt_pending_dbus_tube_connection_h_HEADER_GUARD_ #define _TelepathyQt_pending_dbus_tube_connection_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include namespace Tp { class PendingString; class TP_QT_EXPORT PendingDBusTubeConnection : public PendingOperation { Q_OBJECT Q_DISABLE_COPY(PendingDBusTubeConnection) public: virtual ~PendingDBusTubeConnection(); QString address() const; bool allowsOtherUsers() const; private Q_SLOTS: TP_QT_NO_EXPORT void onConnectionFinished(Tp::PendingOperation *op); TP_QT_NO_EXPORT void onStateChanged(Tp::TubeChannelState state); TP_QT_NO_EXPORT void onChannelInvalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage); private: TP_QT_NO_EXPORT PendingDBusTubeConnection(PendingString *string, bool allowOtherUsers, const QVariantMap ¶meters, const DBusTubeChannelPtr &object); TP_QT_NO_EXPORT PendingDBusTubeConnection(const QString &errorName, const QString &errorMessage, const DBusTubeChannelPtr &object); struct Private; friend class OutgoingDBusTubeChannel; friend class IncomingDBusTubeChannel; friend struct Private; Private *mPriv; }; } #endif telepathy-qt-0.9.3/TelepathyQt/captcha-authentication-internal.h0000644000175200001440000000531712000056607027271 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_captcha_authentication_internal_h_HEADER_GUARD_ #define _TelepathyQt_captcha_authentication_internal_h_HEADER_GUARD_ #include #include namespace Tp { class PendingVoid; class TP_QT_NO_EXPORT PendingCaptchaAnswer : public PendingOperation { Q_OBJECT Q_DISABLE_COPY(PendingCaptchaAnswer) public: PendingCaptchaAnswer(const QDBusPendingCall &call, const CaptchaAuthenticationPtr &object); ~PendingCaptchaAnswer(); private Q_SLOTS: void onCaptchaStatusChanged(Tp::CaptchaStatus status); void onAnswerFinished(); void onRequestCloseFinished(Tp::PendingOperation *operation); private: // Public object PendingCaptchaAnswer *mParent; QDBusPendingCallWatcher *mWatcher; CaptchaAuthenticationPtr mCaptcha; ChannelPtr mChannel; }; class TP_QT_NO_EXPORT PendingCaptchaCancel : public PendingOperation { Q_OBJECT Q_DISABLE_COPY(PendingCaptchaCancel) public: PendingCaptchaCancel(const QDBusPendingCall &call, const CaptchaAuthenticationPtr &object); ~PendingCaptchaCancel(); private Q_SLOTS: void onCancelFinished(); void onRequestCloseFinished(Tp::PendingOperation *operation); private: // Public object PendingCaptchaCancel *mParent; QDBusPendingCallWatcher *mWatcher; CaptchaAuthenticationPtr mCaptcha; ChannelPtr mChannel; }; struct TP_QT_NO_EXPORT CaptchaAuthentication::Private { Private(CaptchaAuthentication *parent); void extractCaptchaAuthenticationProperties(const QVariantMap &props); // Public object CaptchaAuthentication *parent; WeakPtr channel; // Introspection bool canRetry; CaptchaStatus status; QString error; QVariantMap errorDetails; }; } #endif telepathy-qt-0.9.3/TelepathyQt/account-factory.cpp0000644000175200001440000001406712000056607024475 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/account-factory.moc.hpp" #include namespace Tp { /** * \class AccountFactory * \ingroup utils * \headerfile TelepathyQt/account-factory.h * * \brief The AccountFactory class is responsible for constructing Account * objects according to application-defined settings. * * The class is used by AccountManager and other classes which construct Account * proxy instances to enable sharing instances of application-defined Account * subclasses with certain features always ready. */ /** * Create a new AccountFactory object. * * Optionally, the \a features to make ready on all constructed proxies can be specified. The * default is to make no features ready. It should be noted that unlike Account::becomeReady(), * FeatureCore isn't assumed. If no features are specified, which is the default behavior, no * Account::becomeReady() call is made at all and the proxy won't be Account::isReady(). * * \param bus The QDBusConnection for proxies constructed using this factory to use. * \param features The features to make ready on constructed Accounts. * \return An AccountFactoryPtr object pointing to the newly created * AccountFactory object. */ AccountFactoryPtr AccountFactory::create(const QDBusConnection &bus, const Features &features) { return AccountFactoryPtr(new AccountFactory(bus, features)); } /** * Construct a new AccountFactory object. * * As in create(), it should be noted that unlike Account::becomeReady(), FeatureCore isn't assumed. * If no \a features are specified, no Account::becomeReady() call is made at all and the proxy * won't be Account::isReady(). * * \param bus The QDBusConnection for proxies constructed using this factory to use. * \param features The features to make ready on constructed Accounts. */ AccountFactory::AccountFactory(const QDBusConnection &bus, const Features &features) : FixedFeatureFactory(bus) { addFeatures(features); } /** * Class destructor. */ AccountFactory::~AccountFactory() { } /** * Constructs an Account proxy and begins making it ready. * * If a valid proxy already exists in the factory cache for the given combination of \a busName and * \a objectPath, it is returned instead. All newly created proxies are automatically cached until * they're either DBusProxy::invalidated() or the last reference to them outside the factory has * been dropped. * * The proxy can be accessed immediately after this function returns using PendingReady::proxy(). * The ready operation only finishes, however, when the features specified by features(), if any, * are made ready as much as possible. If the service doesn't support a given feature, they won't * obviously be ready even if the operation finished successfully, as is the case for * Account::becomeReady(). * * \param busName The bus/service name of the D-Bus account object the proxy is constructed for. * (Usually #TP_QT_ACCOUNT_MANAGER_BUS_NAME). * \param objectPath The object path of the account. * \param connFactory The connection factory to use for the Account. * \param chanFactory The channel factory to use for the Account. * \param contactFactory The channel factory to use for the Account. * \return A PendingReady operation with the proxy in PendingReady::proxy(). */ PendingReady *AccountFactory::proxy(const QString &busName, const QString &objectPath, const ConnectionFactoryConstPtr &connFactory, const ChannelFactoryConstPtr &chanFactory, const ContactFactoryConstPtr &contactFactory) const { DBusProxyPtr proxy = cachedProxy(busName, objectPath); if (proxy.isNull()) { proxy = construct(busName, objectPath, connFactory, chanFactory, contactFactory); } return nowHaveProxy(proxy); } /** * Can be used by subclasses to override the Account subclass constructed by the factory. * * This is automatically called by proxy() to construct proxy instances if no valid cached proxy is * found. * * The default implementation constructs Tp::Account objects. * * \param busName The bus/service name of the D-Bus account object the proxy is constructed for. * (Usually #TP_QT_ACCOUNT_MANAGER_BUS_NAME). * \param objectPath The object path of the account. * \param connFactory The connection factory to use for the Account. * \param chanFactory The channel factory to use for the Account. * \param contactFactory The channel factory to use for the Account. * \return A pointer to the constructed Account object. */ AccountPtr AccountFactory::construct(const QString &busName, const QString &objectPath, const ConnectionFactoryConstPtr &connFactory, const ChannelFactoryConstPtr &chanFactory, const ContactFactoryConstPtr &contactFactory) const { return Account::create(dbusConnection(), busName, objectPath, connFactory, chanFactory, contactFactory); } /** * Identity transform, as is appropriate for Account objects. * * \param uniqueOrWellKnown The name to transform. * \return \a uniqueOrWellKnown */ QString AccountFactory::finalBusNameFrom(const QString &uniqueOrWellKnown) const { return uniqueOrWellKnown; } } telepathy-qt-0.9.3/TelepathyQt/ChannelRequestInterface0000644000175200001440000000041312000056607025343 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelRequestInterface_HEADER_GUARD_ #define _TelepathyQt_ChannelRequestInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/dbus-properties.xml0000644000175200001440000000152312000056607024532 0ustar00collabora-develusers00000000000000 D-Bus Properties telepathy-qt-0.9.3/TelepathyQt/Contact0000644000175200001440000000034312000056607022176 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_Contact_HEADER_GUARD_ #define _TelepathyQt_Contact_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/StreamTubeChannel0000644000175200001440000000040312000056607024144 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_StreamTubeChannel_HEADER_GUARD_ #define _TelepathyQt_StreamTubeChannel_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/dbus-error.h0000644000175200001440000000320212000056607023112 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_dbus_error_h_HEADER_GUARD_ #define _TelepathyQt_dbus_error_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include namespace Tp { class TP_QT_EXPORT DBusError { Q_DISABLE_COPY(DBusError) public: DBusError(); DBusError(const QString &name, const QString &message); ~DBusError(); bool isValid() const { return mPriv != 0; } bool operator==(const DBusError &other) const; bool operator!=(const DBusError &other) const; QString name() const; QString message() const; void set(const QString &name, const QString &message); private: struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/ClientHandlerInterface0000644000175200001440000000040012000056607025132 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ClientHandlerInterface_HEADER_GUARD_ #define _TelepathyQt_ClientHandlerInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/incoming-stream-tube-channel.cpp0000644000175200001440000004263512000056607027035 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010-2011 Collabora Ltd. * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/incoming-stream-tube-channel.moc.hpp" #include "TelepathyQt/types-internal.h" #include "TelepathyQt/debug-internal.h" #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT IncomingStreamTubeChannel::Private { Private(IncomingStreamTubeChannel *parent); // Public object IncomingStreamTubeChannel *parent; static bool initRandom; }; bool IncomingStreamTubeChannel::Private::initRandom = true; IncomingStreamTubeChannel::Private::Private(IncomingStreamTubeChannel *parent) : parent(parent) { } /** * \class IncomingStreamTubeChannel * \ingroup clientchannel * \headerfile TelepathyQt/incoming-stream-tube-channel.h * * \brief The IncomingStreamTubeChannel class represents an incoming Telepathy channel * of type StreamTube. * * In particular, this class is meant to be used as a comfortable way for * accepting incoming stream tubes. Tubes can be accepted as TCP and/or Unix sockets with various * access control methods depending on what the service supports using the various overloads of * acceptTubeAsTcpSocket() and acceptTubeAsUnixSocket(). * * Once a tube is successfully accepted and open (the PendingStreamTubeConnection returned from the * accepting methods has finished), the application can connect to the socket the address of which * can be retrieved from PendingStreamTubeConnection::ipAddress() and/or * PendingStreamTubeConnection::localAddress() depending on which accepting method was used. * Connecting to this socket will open a tunneled connection to the service listening at the * offering end of the tube. * * For more details, please refer to \telepathy_spec. * * See \ref async_model, \ref shared_ptr */ /** * Feature representing the core that needs to become ready to make the * IncomingStreamTubeChannel object usable. * * This is currently the same as StreamTubeChannel::FeatureCore, but may change to include more. * * When calling isReady(), becomeReady(), this feature is implicitly added * to the requested features. */ const Feature IncomingStreamTubeChannel::FeatureCore = Feature(QLatin1String(StreamTubeChannel::staticMetaObject.className()), 0); // ST::FeatureCore /** * Create a new IncomingStreamTubeChannel object. * * \param connection Connection owning this channel, and specifying the * service. * \param objectPath The channel object path. * \param immutableProperties The channel immutable properties. * \return A IncomingStreamTubeChannelPtr object pointing to the newly created * IncomingStreamTubeChannel object. */ IncomingStreamTubeChannelPtr IncomingStreamTubeChannel::create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) { return IncomingStreamTubeChannelPtr(new IncomingStreamTubeChannel(connection, objectPath, immutableProperties, IncomingStreamTubeChannel::FeatureCore)); } /** * Construct a new IncomingStreamTubeChannel object. * * \param connection Connection owning this channel, and specifying the * service. * \param objectPath The channel object path. * \param immutableProperties The channel immutable properties. * \param coreFeature The core feature of the channel type, if any. The corresponding introspectable should * depend on IncomingStreamTubeChannel::FeatureCore. */ IncomingStreamTubeChannel::IncomingStreamTubeChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature) : StreamTubeChannel(connection, objectPath, immutableProperties, coreFeature), mPriv(new Private(this)) { } /** * Class destructor. */ IncomingStreamTubeChannel::~IncomingStreamTubeChannel() { delete mPriv; } /** * Accept an incoming stream tube as a TCP socket. * * This method accepts an incoming connection request for a stream tube. It can be called * only if the tube is in the #TubeStateLocalPending state. * * The connection manager will open a TCP socket for the application to connect to. The address of * the socket will be returned in PendingStreamTubeConnection::ipAddress() once the operation has * finished successfully. * * This overload lets you specify an allowed address/port combination for connecting to the CM * socket. Connections with other source addresses won't be accepted. The accessors * supportsIPv4SocketsWithSpecifiedAddress() and supportsIPv6SocketsWithSpecifiedAddress() can be * used to verify that the connection manager supports this kind of access control; otherwise, this * method will always fail unless QHostAddress::Any (or QHostAddress::AnyIPv4 in Qt5) or * QHostAddress::AnyIPv6 is passed, in which case the behavior is identical to the always supported * acceptTubeAsTcpSocket() overload. * * Note that when using QHostAddress::Any (or QHostAddress::AnyIPv4 in Qt5) or * QHostAddress::AnyIPv6, \a allowedPort is ignored. * * This method requires IncomingStreamTubeChannel::FeatureCore to be ready. * * \param allowedAddress An allowed address for connecting to the socket. * \param allowedPort An allowed port for connecting to the socket. * \return A PendingStreamTubeConnection which will emit PendingStreamTubeConnection::finished * when the stream tube is ready to be used * (hence in the #TubeStateOpen state). */ PendingStreamTubeConnection *IncomingStreamTubeChannel::acceptTubeAsTcpSocket( const QHostAddress &allowedAddress, quint16 allowedPort) { if (!isReady(IncomingStreamTubeChannel::FeatureCore)) { warning() << "IncomingStreamTubeChannel::FeatureCore must be ready before " "calling acceptTubeAsTcpSocket"; return new PendingStreamTubeConnection(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Channel not ready"), IncomingStreamTubeChannelPtr(this)); } // The tube must be in local pending state if (state() != TubeChannelStateLocalPending) { warning() << "You can accept tubes only when they are in LocalPending state"; return new PendingStreamTubeConnection(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Channel not ready"), IncomingStreamTubeChannelPtr(this)); } QVariant controlParameter; SocketAccessControl accessControl; QHostAddress hostAddress = allowedAddress; #if QT_VERSION >= 0x050000 if (hostAddress == QHostAddress::Any) { hostAddress = QHostAddress::AnyIPv4; } #endif // Now, let's check what we need to do with accessControl. There is just one special case, Port. if (hostAddress != QHostAddress::Any && #if QT_VERSION >= 0x050000 hostAddress != QHostAddress::AnyIPv4 && #endif hostAddress != QHostAddress::AnyIPv6) { // We need to have a valid QHostAddress AND Port. if (hostAddress.isNull() || allowedPort == 0) { warning() << "You have to set a valid allowed address+port to use Port access control"; return new PendingStreamTubeConnection(TP_QT_ERROR_INVALID_ARGUMENT, QLatin1String("The supplied allowed address and/or port was invalid"), IncomingStreamTubeChannelPtr(this)); } accessControl = SocketAccessControlPort; // IPv4 or IPv6? if (hostAddress.protocol() == QAbstractSocket::IPv4Protocol) { // IPv4 case SocketAddressIPv4 addr; addr.address = hostAddress.toString(); addr.port = allowedPort; controlParameter = QVariant::fromValue(addr); } else if (hostAddress.protocol() == QAbstractSocket::IPv6Protocol) { // IPv6 case SocketAddressIPv6 addr; addr.address = hostAddress.toString(); addr.port = allowedPort; controlParameter = QVariant::fromValue(addr); } else { // We're handling an IPv4/IPv6 socket only warning() << "acceptTubeAsTcpSocket can be called only with a QHostAddress " "representing an IPv4 or IPv6 address"; return new PendingStreamTubeConnection(TP_QT_ERROR_INVALID_ARGUMENT, QLatin1String("Invalid host given"), IncomingStreamTubeChannelPtr(this)); } } else { // We have to do no special stuff here accessControl = SocketAccessControlLocalhost; // Since QDBusMarshaller does not like null variants, just add an empty string. controlParameter = QVariant(QString()); } // Set the correct address type and access control setAddressType(hostAddress.protocol() == QAbstractSocket::IPv4Protocol ? SocketAddressTypeIPv4 : SocketAddressTypeIPv6); setAccessControl(accessControl); // Fail early if the combination is not supported if ((accessControl == SocketAccessControlLocalhost && addressType() == SocketAddressTypeIPv4 && !supportsIPv4SocketsOnLocalhost()) || (accessControl == SocketAccessControlPort && addressType() == SocketAddressTypeIPv4 && !supportsIPv4SocketsWithSpecifiedAddress()) || (accessControl == SocketAccessControlLocalhost && addressType() == SocketAddressTypeIPv6 && !supportsIPv6SocketsOnLocalhost()) || (accessControl == SocketAccessControlPort && addressType() == SocketAddressTypeIPv6 && !supportsIPv6SocketsWithSpecifiedAddress())) { warning() << "You requested an address type/access control combination " "not supported by this channel"; return new PendingStreamTubeConnection(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("The requested address type/access control " "combination is not supported"), IncomingStreamTubeChannelPtr(this)); } // Perform the actual call PendingVariant *pv = new PendingVariant( interface()->Accept( addressType(), accessControl, QDBusVariant(controlParameter)), IncomingStreamTubeChannelPtr(this)); PendingStreamTubeConnection *op = new PendingStreamTubeConnection(pv, addressType(), false, 0, IncomingStreamTubeChannelPtr(this)); return op; } /** * Accept an incoming stream tube as a TCP socket. * * This method accepts an incoming connection request for a stream tube. It can be called * only if the tube is in the #TubeStateLocalPending state. * * The connection manager will open a TCP socket for the application to connect to. The address of * the socket will be returned in PendingStreamTubeConnection::ipAddress() once the operation has * finished successfully. * * Using this overload, the connection manager will accept every incoming connection from localhost. * * This accept method must be supported by all connection managers adhering to the \telepathy_spec. * * This method requires IncomingStreamTubeChannel::FeatureCore to be ready. * * \return A PendingStreamTubeConnection which will emit PendingStreamTubeConnection::finished * when the stream tube is ready to be used * (hence in the #TubeStateOpen state). */ PendingStreamTubeConnection *IncomingStreamTubeChannel::acceptTubeAsTcpSocket() { return acceptTubeAsTcpSocket(QHostAddress::Any, 0); } /** * Accept an incoming stream tube as a Unix socket. * * This method accepts an incoming connection request for a stream tube. It can be called * only if the tube is in the #TubeStateLocalPending state. * * An Unix socket (can be used with QLocalSocket or alike) will be opened by the connection manager * as the local tube endpoint. This is only supported if supportsUnixSocketsOnLocalhost() is \c * true. * * You can also specify whether the CM should require an SCM_CREDS or SCM_CREDENTIALS message * upon connection instead of accepting every incoming connection from localhost. This provides * additional security, but requires sending the byte retrieved from * PendingStreamTubeConnection::credentialByte() in-line in the socket byte stream (in a credentials * message if available on the platform), which might not be compatible with all protocols or * libraries. Also, only connection managers for which supportsUnixSocketsWithCredentials() is \c * true support this type of access control. * * This method requires IncomingStreamTubeChannel::FeatureCore to be ready. * * \param requireCredentials Whether the CM should require an SCM_CREDS or SCM_CREDENTIALS message * upon connection. * \return A PendingStreamTubeConnection which will emit PendingStreamTubeConnection::finished * when the stream tube is ready to be used * (hence in the #TubeStateOpen state). * \sa StreamTubeChannel::supportsUnixSocketsOnLocalhost(), * StreamTubeChannel::supportsUnixSocketsWithCredentials(), * StreamTubeChannel::supportsAbstractUnixSocketsOnLocalhost(), * StreamTubeChannel::supportsAbstractUnixSocketsWithCredentials() */ PendingStreamTubeConnection *IncomingStreamTubeChannel::acceptTubeAsUnixSocket( bool requireCredentials) { if (!isReady(IncomingStreamTubeChannel::FeatureCore)) { warning() << "IncomingStreamTubeChannel::FeatureCore must be ready before " "calling acceptTubeAsUnixSocket"; return new PendingStreamTubeConnection(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Channel not ready"), IncomingStreamTubeChannelPtr(this)); } // The tube must be in local pending state if (state() != TubeChannelStateLocalPending) { warning() << "You can accept tubes only when they are in LocalPending state"; return new PendingStreamTubeConnection(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Channel not ready"), IncomingStreamTubeChannelPtr(this)); } SocketAccessControl accessControl = requireCredentials ? SocketAccessControlCredentials : SocketAccessControlLocalhost; setAddressType(SocketAddressTypeUnix); setAccessControl(accessControl); // Fail early if the combination is not supported if ((accessControl == SocketAccessControlLocalhost && addressType() == SocketAddressTypeUnix && !supportsUnixSocketsOnLocalhost()) || (accessControl == SocketAccessControlCredentials && addressType() == SocketAddressTypeUnix && !supportsUnixSocketsWithCredentials()) || (accessControl == SocketAccessControlLocalhost && addressType() == SocketAddressTypeAbstractUnix && !supportsAbstractUnixSocketsOnLocalhost()) || (accessControl == SocketAccessControlCredentials && addressType() == SocketAddressTypeAbstractUnix && !supportsAbstractUnixSocketsWithCredentials())) { warning() << "You requested an address type/access control combination " "not supported by this channel"; return new PendingStreamTubeConnection(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("The requested address type/access control " "combination is not supported"), IncomingStreamTubeChannelPtr(this)); } QDBusVariant accessControlParam; uchar credentialByte = 0; if (accessControl == SocketAccessControlLocalhost) { accessControlParam.setVariant(qVariantFromValue(static_cast(0))); } else if (accessControl == SocketAccessControlCredentials) { if (mPriv->initRandom) { qsrand(QTime::currentTime().msec()); mPriv->initRandom = false; } credentialByte = static_cast(qrand()); accessControlParam.setVariant(qVariantFromValue(credentialByte)); } else { Q_ASSERT(false); } // Perform the actual call PendingVariant *pv = new PendingVariant( interface()->Accept( addressType(), accessControl, accessControlParam), IncomingStreamTubeChannelPtr(this)); PendingStreamTubeConnection *op = new PendingStreamTubeConnection(pv, addressType(), requireCredentials, credentialByte, IncomingStreamTubeChannelPtr(this)); return op; } void IncomingStreamTubeChannel::onNewLocalConnection(uint connectionId) { addConnection(connectionId); } } telepathy-qt-0.9.3/TelepathyQt/Features0000644000175200001440000000034512000056607022363 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_Features_HEADER_GUARD_ #define _TelepathyQt_Features_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/pending-account.cpp0000644000175200001440000001371612000056607024452 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008 Collabora Ltd. * @copyright Copyright (C) 2008 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/pending-account.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT PendingAccount::Private { AccountPtr account; }; /** * \class PendingAccount * \ingroup clientaccount * \headerfile TelepathyQt/pending-account.h * * \brief The PendingAccount class represents the parameters of and the reply to * an asynchronous account request. * * Instances of this class cannot be constructed directly; the only way to get * one is via AccountManager. * * See \ref async_model */ /** * Construct a new PendingAccount object. * * \param manager AccountManager to use. * \param connectionManager Name of the connection manager to create the account * for. * \param protocol Name of the protocol to create the account for. * \param displayName Account display name. * \param parameters Account parameters. * \param properties An optional map from fully qualified D-Bus property * names such as "org.freedesktop.Telepathy.Account.Enabled" * to their values. */ PendingAccount::PendingAccount(const AccountManagerPtr &manager, const QString &connectionManager, const QString &protocol, const QString &displayName, const QVariantMap ¶meters, const QVariantMap &properties) : PendingOperation(manager), mPriv(new Private) { QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( manager->baseInterface()->CreateAccount(connectionManager, protocol, displayName, parameters, properties), this); connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(onCallFinished(QDBusPendingCallWatcher*))); } /** * Class destructor. */ PendingAccount::~PendingAccount() { delete mPriv; } /** * Return the account manager through which the request was made. * * \return A pointer to the AccountManager object. */ AccountManagerPtr PendingAccount::manager() const { return AccountManagerPtr(qobject_cast((AccountManager*) object().data())); } /** * Return the newly created account. * * \return A pointer to an Account object, or a null AccountPtr if an error occurred. */ AccountPtr PendingAccount::account() const { if (!isFinished()) { warning() << "PendingAccount::account called before finished, returning 0"; return AccountPtr(); } else if (!isValid()) { warning() << "PendingAccount::account called when not valid, returning 0"; return AccountPtr(); } return mPriv->account; } void PendingAccount::onCallFinished(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (!reply.isError()) { QString objectPath = reply.value().path(); debug() << "Got reply to AccountManager.CreateAccount - object path:" << objectPath; PendingReady *readyOp = manager()->accountFactory()->proxy(manager()->busName(), objectPath, manager()->connectionFactory(), manager()->channelFactory(), manager()->contactFactory()); mPriv->account = AccountPtr::qObjectCast(readyOp->proxy()); connect(readyOp, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onAccountBuilt(Tp::PendingOperation*))); } else { debug().nospace() << "CreateAccount failed: " << reply.error().name() << ": " << reply.error().message(); setFinishedWithError(reply.error()); } watcher->deleteLater(); } void PendingAccount::onAccountBuilt(Tp::PendingOperation *op) { Q_ASSERT(op->isFinished()); if (op->isError()) { warning() << "Making account ready using the factory failed:" << op->errorName() << op->errorMessage(); setFinishedWithError(op->errorName(), op->errorMessage()); } else { // AM is stateless, so the only way for it to become invalid is in the introspection phase, // and a PendingAccount should never be created if AM introspection hasn't succeeded Q_ASSERT(!manager().isNull() && manager()->isValid()); if (manager()->allAccounts().contains(mPriv->account)) { setFinished(); debug() << "New account" << mPriv->account->objectPath() << "built"; } else { // Have to wait for the AM to pick up the change and signal it so the world can be // assumed to be ~round when we finish connect(manager().data(), SIGNAL(newAccount(Tp::AccountPtr)), SLOT(onNewAccount(Tp::AccountPtr))); } } } void PendingAccount::onNewAccount(const AccountPtr &account) { if (account != mPriv->account) { return; } debug() << "Account" << account->objectPath() << "added to AM, finishing PendingAccount"; setFinished(); } } // Tp telepathy-qt-0.9.3/TelepathyQt/dbus-service.cpp0000644000175200001440000002122712000056607023763 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/dbus-service.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT DBusService::Private { Private(DBusService *parent, const QDBusConnection &dbusConnection) : parent(parent), dbusObject(new DBusObject(dbusConnection, parent)), registered(false) { } DBusService *parent; QString busName; QString objectPath; DBusObject *dbusObject; bool registered; }; /** * \class DBusService * \ingroup servicesideimpl * \headerfile TelepathyQt/dbus-service.h * * \brief Base class for D-Bus services. * * This class serves as a base for all the classes that are used to implement * D-Bus services. */ /** * Construct a DBusService that uses the given \a dbusConnection. * * \param dbusConnection The D-Bus connection that will be used by this service. */ DBusService::DBusService(const QDBusConnection &dbusConnection) : mPriv(new Private(this, dbusConnection)) { } /** * Class destructor. */ DBusService::~DBusService() { delete mPriv; } /** * Return the D-Bus connection associated with this service. * * \return the D-Bus connection associated with this service. */ QDBusConnection DBusService::dbusConnection() const { return mPriv->dbusObject->dbusConnection(); } /** * Return the D-Bus service name of this service. * * This is only valid after this service has been registered * on the bus using registerObject(). * * \return the D-Bus service name of this service. */ QString DBusService::busName() const { return mPriv->busName; } /** * Return the D-Bus object path of this service. * * This is only valid after this service has been registered * on the bus using registerObject(). * * \return the D-Bus object path of this service. */ QString DBusService::objectPath() const { return mPriv->objectPath; } /** * Return the DBusObject that is used for registering this service on the bus. * * The DBusObject is the object on which all the interface adaptors * for this service are plugged. * * \return a pointer to the DBusObject that is used for registering * this service on the bus. */ DBusObject *DBusService::dbusObject() const { return mPriv->dbusObject; } /** * Return whether this D-Bus service has been registered on the bus or not. * * \return \c true if the service has been registered, or \c false otherwise. */ bool DBusService::isRegistered() const { return mPriv->registered; } /** * Register this service object on the bus with the given \a busName and \a objectPath. * * \a error needs to be a valid pointer to a DBusError instance, where any * possible D-Bus error will be stored. * * A service may only be registered once in its lifetime. * Use isRegistered() to find out if it has already been registered or not. * * You normally don't need to use this method directly. * Subclasses should provide a simplified version of it. * * \param busName The D-Bus service name of this object. * \param objectPath The D-Bus object path of this object. * \param error A pointer to a valid DBusError instance, where any * possible D-Bus error will be stored. * \return \c true on success or \c false otherwise. */ bool DBusService::registerObject(const QString &busName, const QString &objectPath, DBusError *error) { if (mPriv->registered) { return true; } if (!mPriv->dbusObject->dbusConnection().registerService(busName)) { error->set(TP_QT_ERROR_INVALID_ARGUMENT, QString(QLatin1String("Name %1 already in use by another process")) .arg(busName)); warning() << "Unable to register service" << busName << "- name already registered by another process"; return false; } if (!mPriv->dbusObject->dbusConnection().registerObject(objectPath, mPriv->dbusObject)) { error->set(TP_QT_ERROR_INVALID_ARGUMENT, QString(QLatin1String("Object at path %1 already registered")) .arg(objectPath)); warning() << "Unable to register object" << objectPath << "- path already registered"; return false; } debug() << "Registered object" << objectPath << "at bus name" << busName; mPriv->busName = busName; mPriv->objectPath = objectPath; mPriv->registered = true; return true; } /** * \fn QVariantMap DBusService::immutableProperties() const * * Return the immutable properties of this D-Bus service object. * * Immutable properties cannot change after the object has been registered * on the bus with registerObject(). * * \return The immutable properties of this D-Bus service object. */ struct AbstractDBusServiceInterface::Private { Private(const QString &interfaceName) : interfaceName(interfaceName), dbusObject(0), registered(false) { } QString interfaceName; DBusObject *dbusObject; bool registered; }; /** * \class AbstractDBusServiceInterface * \ingroup servicesideimpl * \headerfile TelepathyQt/dbus-service.h * * \brief Base class for D-Bus service interfaces. * * This class serves as a base for all the classes that are used to implement * interfaces that sit on top of D-Bus services. */ /** * Construct an AbstractDBusServiceInterface that implements * the interface with the given \a interfaceName. * * \param interfaceName The name of the interface that this class implements. */ AbstractDBusServiceInterface::AbstractDBusServiceInterface(const QString &interfaceName) : mPriv(new Private(interfaceName)) { } /** * Class destructor. */ AbstractDBusServiceInterface::~AbstractDBusServiceInterface() { delete mPriv; } /** * Return the name of the interface that this class implements, * as given on the constructor. * * \return The name of the interface that this class implements. */ QString AbstractDBusServiceInterface::interfaceName() const { return mPriv->interfaceName; } /** * Return the DBusObject on which the adaptor of this interface is plugged. * * This is only accessible after the interface has been registered * with registerInterface(). * * \return a pointer to the DBusObject on which the adaptor * of this interface is plugged. * \sa DBusService::dbusObject() */ DBusObject *AbstractDBusServiceInterface::dbusObject() const { return mPriv->dbusObject; } /** * Return whether this interface has been registered. * * \return \c true if the service has been registered, or \c false otherwise. * \sa registerInterface() */ bool AbstractDBusServiceInterface::isRegistered() const { return mPriv->registered; } /** * Registers this interface by plugging its adaptor * on the given \a dbusObject. * * \param dbusObject The object on which to plug the adaptor. * \return \c false if the interface has already been registered, * or \a true otherwise. * \sa isRegistered() */ bool AbstractDBusServiceInterface::registerInterface(DBusObject *dbusObject) { if (mPriv->registered) { return true; } mPriv->dbusObject = dbusObject; createAdaptor(); mPriv->registered = true; return true; } /** * \fn QVariantMap AbstractDBusServiceInterface::immutableProperties() const * * Return the immutable properties of this interface. * * Immutable properties cannot change after the interface has been registered * on a service on the bus with registerInterface(). * * \return The immutable properties of this interface. */ /** * \fn void AbstractDBusServiceInterface::createAdaptor() * * Create the adaptor for this interface. * * Subclasses should reimplement this appropriately. */ } telepathy-qt-0.9.3/TelepathyQt/channel.xml0000644000175200001440000000400212000056607023006 0ustar00collabora-develusers00000000000000 Channel interfaces telepathy-qt-0.9.3/TelepathyQt/call-stream.h0000644000175200001440000000616512000056607023245 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010-2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_call_stream_h_HEADER_GUARD_ #define _TelepathyQt_call_stream_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include #include #include #include namespace Tp { typedef QList CallStreams; class TP_QT_EXPORT CallStream : public StatefulDBusProxy, public OptionalInterfaceFactory { Q_OBJECT Q_DISABLE_COPY(CallStream) public: ~CallStream(); CallContentPtr content() const; Contacts remoteMembers() const; bool canRequestReceiving() const; SendingState localSendingState() const; SendingState remoteSendingState(const ContactPtr &contact) const; PendingOperation *requestSending(bool send); PendingOperation *requestReceiving(const ContactPtr &contact, bool receive); Q_SIGNALS: void localSendingStateChanged(Tp::SendingState localSendingState, const Tp::CallStateReason &reason); void remoteSendingStateChanged( const QHash &remoteSendingStates, const Tp::CallStateReason &reason); void remoteMembersRemoved(const Tp::Contacts &remoteMembers, const Tp::CallStateReason &reason); private Q_SLOTS: TP_QT_NO_EXPORT void gotMainProperties(Tp::PendingOperation *op); TP_QT_NO_EXPORT void gotRemoteMembersContacts(Tp::PendingOperation *op); TP_QT_NO_EXPORT void onRemoteMembersChanged(const Tp::ContactSendingStateMap &updates, const Tp::HandleIdentifierMap &identifiers, const Tp::UIntList &removed, const Tp::CallStateReason &reason); TP_QT_NO_EXPORT void onLocalSendingStateChanged(uint, const Tp::CallStateReason &reason); private: friend class CallChannel; friend class CallContent; TP_QT_NO_EXPORT static const Feature FeatureCore; TP_QT_NO_EXPORT CallStream(const CallContentPtr &content, const QDBusObjectPath &streamPath); struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/base-connection-manager-internal.h0000644000175200001440000000435212000056607027326 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include "TelepathyQt/_gen/svc-connection-manager.h" #include #include #include #include #include #include #include namespace Tp { class TP_QT_NO_EXPORT BaseConnectionManager::Adaptee : public QObject { Q_OBJECT Q_PROPERTY(QStringList interfaces READ interfaces) Q_PROPERTY(Tp::ProtocolPropertiesMap protocols READ protocols) public: Adaptee(const QDBusConnection &dbusConnection, BaseConnectionManager *cm); ~Adaptee(); QStringList interfaces() const; Tp::ProtocolPropertiesMap protocols() const; Q_SIGNALS: void newConnection(const QString &busName, const QDBusObjectPath &objectPath, const QString &protocolName); private Q_SLOTS: void getParameters(const QString &protocolName, const Tp::Service::ConnectionManagerAdaptor::GetParametersContextPtr &context); void listProtocols( const Tp::Service::ConnectionManagerAdaptor::ListProtocolsContextPtr &context); void requestConnection(const QString &protocolName, const QVariantMap ¶meters, const Tp::Service::ConnectionManagerAdaptor::RequestConnectionContextPtr &context); public: BaseConnectionManager *mCM; Service::ConnectionManagerAdaptor *mAdaptor; }; } telepathy-qt-0.9.3/TelepathyQt/ChannelTypeTextInterface0000644000175200001440000000040512000056607025502 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelTypeTextInterface_HEADER_GUARD_ #define _TelepathyQt_ChannelTypeTextInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/account-set-internal.h0000644000175200001440000000522312000056607025072 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include namespace Tp { class ConnectionCapabilities; struct TP_QT_NO_EXPORT AccountSet::Private { class AccountWrapper; Private(AccountSet *parent, const AccountManagerPtr &accountManager, const AccountFilterConstPtr &filter); Private(AccountSet *parent, const AccountManagerPtr &accountManager, const QVariantMap &filter); void init(); void connectSignals(); void insertAccounts(); void insertAccount(const AccountPtr &account); void removeAccount(const AccountPtr &account); void wrapAccount(const AccountPtr &account); void filterAccount(const AccountPtr &account); bool accountMatchFilter(AccountWrapper *account); AccountSet *parent; AccountManagerPtr accountManager; AccountFilterConstPtr filter; QHash wrappers; QHash accounts; bool ready; }; class TP_QT_NO_EXPORT AccountSet::Private::AccountWrapper : public QObject { Q_OBJECT public: AccountWrapper(const AccountPtr &account, QObject *parent = 0); ~AccountWrapper(); AccountPtr account() const { return mAccount; } Q_SIGNALS: void accountRemoved(const Tp::AccountPtr &account); void accountPropertyChanged(const Tp::AccountPtr &account, const QString &propertyName); void accountCapabilitiesChanged(const Tp::AccountPtr &account, const Tp::ConnectionCapabilities &capabilities); private Q_SLOTS: TP_QT_NO_EXPORT void onAccountRemoved(); TP_QT_NO_EXPORT void onAccountPropertyChanged(const QString &propertyName); TP_QT_NO_EXPORT void onAccountCapalitiesChanged(const Tp::ConnectionCapabilities &capabilities); private: AccountPtr mAccount; }; } // Tp telepathy-qt-0.9.3/TelepathyQt/AbstractInterface0000644000175200001440000000040212000056607024163 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_AbstractInterface_HEADER_GUARD_ #define _TelepathyQt_AbstractInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/ReadyObject0000644000175200001440000000036012000056607022775 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ReadyObject_HEADER_GUARD_ #define _TelepathyQt_ReadyObject_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/future-interfaces.xml0000644000175200001440000000062712000056607025042 0ustar00collabora-develusers00000000000000 Extensions from the future telepathy-qt-0.9.3/TelepathyQt/ChannelInterfaceDestroyableInterface0000644000175200001440000000043512000056607030015 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelInterfaceDestroyableInterface_HEADER_GUARD_ #define _TelepathyQt_ChannelInterfaceDestroyableInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/pending-ready.cpp0000644000175200001440000001041312000056607024111 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009-2010 Collabora Ltd. * @copyright Copyright (C) 2009-2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/pending-ready.moc.hpp" #include "TelepathyQt/debug-internal.h" #include namespace Tp { struct TP_QT_NO_EXPORT PendingReady::Private { Private(const DBusProxyPtr &proxy, const Features &requestedFeatures) : proxy(proxy), requestedFeatures(requestedFeatures) { } DBusProxyPtr proxy; Features requestedFeatures; }; /** * \class PendingReady * \ingroup utils * \headerfile TelepathyQt/pending-ready.h * * \brief The PendingReady class represents the features requested and the reply * to a request for an object to become ready. * * Instances of this class cannot be constructed directly; the only way to get * one is via ReadyObject::becomeReady() or a DBusProxyFactory subclass. * * See \ref async_model */ /** * Construct a new PendingReady object. * * \todo Actually make it do the prepare ops. Currently they aren't taken into account in any way. * * \param object The object that will become ready. * \param requestedFeatures Features to be made ready on the object. */ PendingReady::PendingReady(const SharedPtr &object, const Features &requestedFeatures) : PendingOperation(object), mPriv(new Private(DBusProxyPtr(dynamic_cast((DBusProxy*) object.data())), requestedFeatures)) { // This is a PendingReady created by ReadinessHelper, and will be set ready by it - so should // not do anything ourselves here. } /** * Construct a new PendingReady object. * * \todo Actually make it do the prepare ops. Currently they aren't taken into account in any way. * * \param factory The factory the request was made with. * \param proxy The proxy that will become ready. * \param requestedFeatures Features to be made ready on the object. */ PendingReady::PendingReady(const SharedPtr &factory, const DBusProxyPtr &proxy, const Features &requestedFeatures) : PendingOperation(factory), mPriv(new Private(proxy, requestedFeatures)) { if (requestedFeatures.isEmpty()) { setFinished(); return; } connect(proxy->becomeReady(requestedFeatures), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onNestedFinished(Tp::PendingOperation*))); } /** * Class destructor. */ PendingReady::~PendingReady() { delete mPriv; } /** * Return the proxy that should become ready. * * \return A pointer to the DBusProxy object if the operation was * created by a proxy object or a DBusProxyFactory, * otherwise a null DBusProxyPtr. */ DBusProxyPtr PendingReady::proxy() const { return mPriv->proxy; } /** * Return the features that were requested to become ready on the * object. * * \return The requested features as a set of Feature objects. */ Features PendingReady::requestedFeatures() const { return mPriv->requestedFeatures; } void PendingReady::onNestedFinished(Tp::PendingOperation *nested) { Q_ASSERT(nested->isFinished()); if (nested->isValid()) { setFinished(); } else { warning() << "Nested PendingReady for" << object() << "failed with" << nested->errorName() << ":" << nested->errorMessage(); setFinishedWithError(nested->errorName(), nested->errorMessage()); } } } // Tp telepathy-qt-0.9.3/TelepathyQt/PendingCallContent0000644000175200001440000000037612000056607024324 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_PendingCallContent_HEADER_GUARD_ #define _TelepathyQt_PendingCallContent_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/stream-tube-channel.cpp0000644000175200001440000006715312000056607025236 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010-2011 Collabora Ltd. * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/stream-tube-channel.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT StreamTubeChannel::Private { Private(StreamTubeChannel *parent); static void introspectStreamTube(Private *self); static void introspectConnectionMonitoring(Private *self); void extractStreamTubeProperties(const QVariantMap &props); // Public object StreamTubeChannel *parent; ReadinessHelper *readinessHelper; // Introspection SupportedSocketMap socketTypes; QString serviceName; QSet connections; QPair ipAddress; QString unixAddress; SocketAddressType addressType; SocketAccessControl accessControl; bool droppingConnections; }; StreamTubeChannel::Private::Private(StreamTubeChannel *parent) : parent(parent), readinessHelper(parent->readinessHelper()), addressType(SocketAddressTypeUnix), accessControl(SocketAccessControlLocalhost), droppingConnections(false) { ReadinessHelper::Introspectables introspectables; ReadinessHelper::Introspectable introspectableStreamTube( QSet() << 0, // makesSenseForStatuses Features() << TubeChannel::FeatureCore, // dependsOnFeatures (core) QStringList(), // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &StreamTubeChannel::Private::introspectStreamTube, this); introspectables[StreamTubeChannel::FeatureCore] = introspectableStreamTube; ReadinessHelper::Introspectable introspectableConnectionMonitoring( QSet() << 0, // makesSenseForStatuses Features() << StreamTubeChannel::FeatureCore, // dependsOnFeatures (core) QStringList(), // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &StreamTubeChannel::Private::introspectConnectionMonitoring, this); introspectables[StreamTubeChannel::FeatureConnectionMonitoring] = introspectableConnectionMonitoring; parent->connect( parent, SIGNAL(invalidated(Tp::DBusProxy*,QString,QString)), SLOT(dropConnections())); readinessHelper->addIntrospectables(introspectables); } void StreamTubeChannel::Private::introspectStreamTube( StreamTubeChannel::Private *self) { StreamTubeChannel *parent = self->parent; debug() << "Introspecting stream tube properties"; Client::ChannelTypeStreamTubeInterface *streamTubeInterface = parent->interface(); PendingVariantMap *pvm = streamTubeInterface->requestAllProperties(); parent->connect(pvm, SIGNAL(finished(Tp::PendingOperation *)), SLOT(gotStreamTubeProperties(Tp::PendingOperation *))); } void StreamTubeChannel::Private::introspectConnectionMonitoring( StreamTubeChannel::Private *self) { StreamTubeChannel *parent = self->parent; Client::ChannelTypeStreamTubeInterface *streamTubeInterface = parent->interface(); parent->connect(streamTubeInterface, SIGNAL(ConnectionClosed(uint,QString,QString)), SLOT(onConnectionClosed(uint,QString,QString))); if (parent->isRequested()) { parent->connect(streamTubeInterface, SIGNAL(NewRemoteConnection(uint,QDBusVariant,uint)), SLOT(onNewRemoteConnection(uint,QDBusVariant,uint))); } else { parent->connect(streamTubeInterface, SIGNAL(NewLocalConnection(uint)), SLOT(onNewLocalConnection(uint))); } self->readinessHelper->setIntrospectCompleted( StreamTubeChannel::FeatureConnectionMonitoring, true); } void StreamTubeChannel::Private::extractStreamTubeProperties(const QVariantMap &props) { serviceName = qdbus_cast(props[QLatin1String("Service")]); socketTypes = qdbus_cast(props[QLatin1String("SupportedSocketTypes")]); } /** * \class StreamTubeChannel * \ingroup clientchannel * \headerfile TelepathyQt/stream-tube-channel.h * * \brief The StreamTubeChannel class represents a Telepathy channel of type StreamTube. * * It provides a transport for reliable and ordered data transfer, similar to SOCK_STREAM sockets. * * StreamTubeChannel is an intermediate base class; OutgoingStreamTubeChannel and * IncomingStreamTubeChannel are the specialized classes used for locally and remotely initiated * tubes respectively. * * For more details, please refer to \telepathy_spec. * * See \ref async_model, \ref shared_ptr */ /** * Feature representing the core that needs to become ready to make the * StreamTubeChannel object usable. * * Note that this feature must be enabled in order to use most * StreamTubeChannel methods. * See specific methods documentation for more details. */ const Feature StreamTubeChannel::FeatureCore = Feature(QLatin1String(StreamTubeChannel::staticMetaObject.className()), 0); /** * Feature used in order to monitor connections to this stream tube. * * See connection monitoring specific methods' documentation for more details. * * \sa newConnection(), connectionClosed() */ const Feature StreamTubeChannel::FeatureConnectionMonitoring = Feature(QLatin1String(StreamTubeChannel::staticMetaObject.className()), 1); /** * Create a new StreamTubeChannel channel. * * \param connection Connection owning this channel, and specifying the * service. * \param objectPath The channel object path. * \param immutableProperties The channel immutable properties. * \return A StreamTubeChannelPtr object pointing to the newly created * StreamTubeChannel object. */ StreamTubeChannelPtr StreamTubeChannel::create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) { return StreamTubeChannelPtr(new StreamTubeChannel(connection, objectPath, immutableProperties, StreamTubeChannel::FeatureCore)); } /** * Construct a new StreamTubeChannel object. * * \param connection Connection owning this channel, and specifying the * service. * \param objectPath The channel object path. * \param immutableProperties The channel immutable properties. * \param coreFeature The core feature of the channel type, if any. The corresponding introspectable should * depend on StreamTubeChannel::FeatureCore. */ StreamTubeChannel::StreamTubeChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature) : TubeChannel(connection, objectPath, immutableProperties, coreFeature), mPriv(new Private(this)) { } /** * Class destructor. */ StreamTubeChannel::~StreamTubeChannel() { delete mPriv; } /** * Return the service name which will be used over this stream tube. This should be a * well-known TCP service name, for instance "rsync" or "daap". * * This method requires StreamTubeChannel::FeatureCore to be ready. * * \return The service name. */ QString StreamTubeChannel::service() const { if (!isReady(FeatureCore)) { warning() << "StreamTubeChannel::service() used with " "FeatureCore not ready"; return QString(); } return mPriv->serviceName; } /** * Return whether this stream tube is capable to accept or offer an IPv4 socket accepting all * incoming connections coming from localhost. * * Note that the \telepathy_spec implies that any connection manager, if capable of providing * stream tubes, must at least support IPv4 sockets with localhost access control. * For this reason, this method should always return \c true. * * This method requires StreamTubeChannel::FeatureCore to be ready. * * \return \c true if the stream tube is capable to accept or offer an IPv4 socket * accepting all incoming connections coming from localhost, \c false otherwise. * \sa IncomingStreamTubeChannel::acceptTubeAsTcpSocket(), * OutgoingStreamTubeChannel::offerTcpSocket(), * supportsIPv4SocketsWithSpecifiedAddress() */ bool StreamTubeChannel::supportsIPv4SocketsOnLocalhost() const { if (!isReady(FeatureCore)) { warning() << "StreamTubeChannel::supportsIPv4SocketsOnLocalhost() used with " "FeatureCore not ready"; return false; } return mPriv->socketTypes.value(SocketAddressTypeIPv4).contains(SocketAccessControlLocalhost); } /** * Return whether this stream tube is capable to accept an IPv4 socket accepting all * incoming connections coming from a specific address for incoming tubes or whether * this stream tube is capable of mapping connections to the socket's source address for outgoing * tubes. * * For incoming tubes, when this capability is available, the stream tube can be accepted specifying * an IPv4 address. Every connection coming from any other address than the specified one will be * rejected. * * For outgoing tubes, when this capability is available, one can keep track of incoming connections * by enabling StreamTubeChannel::FeatureConnectionMonitoring (possibly before * opening the stream tube itself), and checking OutgoingStreamTubeChannel::contactsForConnections() * or OutgoingStreamTubeChannel::connectionsForSourceAddresses(). * * Note that it is strongly advised to call this method before attempting to call * IncomingStreamTubeChannel::acceptTubeAsTcpSocket() or * OutgoingStreamTubeChannel::offerTcpSocket() with a specified address to prevent failures, * as the spec implies this feature is not compulsory for connection managers. * * This method requires StreamTubeChannel::FeatureCore to be ready. * * \return \c true if the stream tube is capable to accept an IPv4 socket accepting all * incoming connections coming from a specific address for incoming tubes or * the stream tube is capable of mapping connections to the socket's source address for * outgoing tubes, \c false otherwise. * \sa IncomingStreamTubeChannel::acceptTubeAsTcpSocket(), * OutgoingStreamTubeChannel::offerTcpSocket(), * OutgoingStreamTubeChannel::connectionsForSourceAddresses(), * OutgoingStreamTubeChannel::contactsForConnections(), * supportsIPv4SocketsOnLocalhost() */ bool StreamTubeChannel::supportsIPv4SocketsWithSpecifiedAddress() const { if (!isReady(FeatureCore)) { warning() << "StreamTubeChannel::supportsIPv4SocketsWithSpecifiedAddress() used with " "FeatureCore not ready"; return false; } return mPriv->socketTypes.value(SocketAddressTypeIPv4).contains(SocketAccessControlPort); } /** * Return whether this stream tube is capable to accept or offer an IPv6 socket accepting all * incoming connections coming from localhost. * * Note that it is strongly advised to call this method before attempting to call * IncomingStreamTubeChannel::acceptTubeAsTcpSocket() or * OutgoingStreamTubeChannel::offerTcpSocket() with a specified address to prevent failures, * as the spec implies this feature is not compulsory for connection managers. * * This method requires StreamTubeChannel::FeatureCore to be ready. * * \return \c true if the stream tube is capable to accept or offer an IPv6 socket * accepting all incoming connections coming from localhost, \c false otherwise. * \sa IncomingStreamTubeChannel::acceptTubeAsTcpSocket(), * OutgoingStreamTubeChannel::offerTcpSocket(), * supportsIPv6SocketsWithSpecifiedAddress() */ bool StreamTubeChannel::supportsIPv6SocketsOnLocalhost() const { if (!isReady(FeatureCore)) { warning() << "StreamTubeChannel::supportsIPv6SocketsOnLocalhost() used with " "FeatureCore not ready"; return false; } return mPriv->socketTypes.value(SocketAddressTypeIPv6).contains(SocketAccessControlLocalhost); } /** * Return whether this stream tube is capable to accept an IPv6 socket accepting all * incoming connections coming from a specific address for incoming tubes or whether * this stream tube is capable of mapping connections to the socket's source address for outgoing * tubes. * * For incoming tubes, when this capability is available, the stream tube can be accepted specifying * an IPv6 address. Every connection coming from any other address than the specified one will be * rejected. * * For outgoing tubes, when this capability is available, one can keep track of incoming connections * by enabling StreamTubeChannel::FeatureConnectionMonitoring (possibly before * opening the stream tube itself), and checking OutgoingStreamTubeChannel::contactsForConnections() * or OutgoingStreamTubeChannel::connectionsForSourceAddresses(). * * Note that it is strongly advised to call this method before attempting to call * IncomingStreamTubeChannel::acceptTubeAsTcpSocket() or * OutgoingStreamTubeChannel::offerTcpSocket() with a specified address to prevent failures, * as the spec implies this feature is not compulsory for connection managers. * * This method requires StreamTubeChannel::FeatureCore to be ready. * * \return \c true if the stream tube is capable to accept an IPv6 socket accepting all * incoming connections coming from a specific address for incoming tubes or * the stream tube is capable of mapping connections to the socket's source address for * outgoing tubes, \c false otherwise. * \sa IncomingStreamTubeChannel::acceptTubeAsTcpSocket(), * OutgoingStreamTubeChannel::offerTcpSocket(), * OutgoingStreamTubeChannel::connectionsForSourceAddresses(), * OutgoingStreamTubeChannel::contactsForConnections(), * supportsIPv6SocketsOnLocalhost() */ bool StreamTubeChannel::supportsIPv6SocketsWithSpecifiedAddress() const { if (!isReady(FeatureCore)) { warning() << "StreamTubeChannel::supportsIPv6SocketsWithSpecifiedAddress() used with " "FeatureCore not ready"; return false; } return mPriv->socketTypes.value(SocketAddressTypeIPv6).contains(SocketAccessControlPort); } /** * Return whether this stream tube is capable to accept or offer an Unix socket accepting all * incoming connections coming from localhost. * * Note that it is strongly advised to call this method before attempting to call * IncomingStreamTubeChannel::acceptTubeAsUnixSocket() or * OutgoingStreamTubeChannel::offerUnixSocket() without credentials enabled, as the spec implies * this feature is not compulsory for connection managers. * * This method requires StreamTubeChannel::FeatureCore to be ready. * * \return \c true if the stream tube is capable to accept or offer an Unix socket * accepting all incoming connections coming from localhost, \c false otherwise. * \sa IncomingStreamTubeChannel::acceptTubeAsUnixSocket(), * OutgoingStreamTubeChannel::offerUnixSocket(), * supportsUnixSocketsWithCredentials() * supportsAbstractUnixSocketsOnLocalhost(), * supportsAbstractUnixSocketsWithCredentials(), */ bool StreamTubeChannel::supportsUnixSocketsOnLocalhost() const { if (!isReady(FeatureCore)) { warning() << "StreamTubeChannel::supportsUnixSocketsOnLocalhost() used with " "FeatureCore not ready"; return false; } return mPriv->socketTypes.value(SocketAddressTypeUnix).contains(SocketAccessControlLocalhost); } /** * Return whether this stream tube is capable to accept or offer an Unix socket which will require * credentials upon connection. * * When this capability is available and enabled, the connecting process must send a byte when * it first connects, which is not considered to be part of the data stream. * If the operating system uses sendmsg() with SCM_CREDS or SCM_CREDENTIALS to pass * credentials over sockets, the connecting process must do so if possible; * if not, it must still send the byte. * * The listening process will disconnect the connection unless it can determine * by OS-specific means that the connecting process has the same user ID as the listening process. * * Note that it is strongly advised to call this method before attempting to call * IncomingStreamTubeChannel::acceptTubeAsUnixSocket() or * OutgoingStreamTubeChannel::offerUnixSocket() with credentials enabled, as the spec implies * this feature is not compulsory for connection managers. * * This method requires StreamTubeChannel::FeatureCore to be ready. * * \return \c true if the stream tube is capable to accept or offer an Unix socket * which will require credentials upon connection, \c false otherwise. * \sa IncomingStreamTubeChannel::acceptTubeAsUnixSocket(), * OutgoingStreamTubeChannel::offerUnixSocket(), * supportsUnixSocketsOnLocalhost(), * supportsAbstractUnixSocketsOnLocalhost(), * supportsAbstractUnixSocketsWithCredentials(), */ bool StreamTubeChannel::supportsUnixSocketsWithCredentials() const { if (!isReady(FeatureCore)) { warning() << "StreamTubeChannel::supportsUnixSocketsWithCredentials() used with " "FeatureCore not ready"; return false; } return mPriv->socketTypes[SocketAddressTypeUnix].contains(SocketAccessControlCredentials); } /** * Return whether this stream tube is capable to accept or offer an abstract Unix socket accepting * all incoming connections coming from localhost. * * Note that it is strongly advised to call this method before attempting to call * IncomingStreamTubeChannel::acceptTubeAsUnixSocket() or * OutgoingStreamTubeChannel::offerUnixSocket() without credentials enabled, as the spec implies * this feature is not compulsory for connection managers. * * This method requires StreamTubeChannel::FeatureCore to be ready. * * \return \c true if the stream tube is capable to accept or offer an abstract Unix socket * accepting all incoming connections coming from localhost, \c false otherwise. * \sa IncomingStreamTubeChannel::acceptTubeAsUnixSocket(), * OutgoingStreamTubeChannel::offerUnixSocket(), * supportsUnixSocketsOnLocalhost(), * supportsUnixSocketsWithCredentials(), * supportsAbstractUnixSocketsWithCredentials() */ bool StreamTubeChannel::supportsAbstractUnixSocketsOnLocalhost() const { if (!isReady(FeatureCore)) { warning() << "StreamTubeChannel::supportsAbstractUnixSocketsOnLocalhost() used with " "FeatureCore not ready"; return false; } return mPriv->socketTypes[SocketAddressTypeAbstractUnix].contains(SocketAccessControlLocalhost); } /** * Return whether this stream tube is capable to accept or offer an abstract Unix socket which will * require credentials upon connection. * * When this capability is available and enabled, the connecting process must send a byte when * it first connects, which is not considered to be part of the data stream. * If the operating system uses sendmsg() with SCM_CREDS or SCM_CREDENTIALS to pass * credentials over sockets, the connecting process must do so if possible; * if not, it must still send the byte. * * The listening process will disconnect the connection unless it can determine * by OS-specific means that the connecting process has the same user ID as the listening process. * * Note that it is strongly advised to call this method before attempting to call * IncomingStreamTubeChannel::acceptTubeAsUnixSocket() or * OutgoingStreamTubeChannel::offerUnixSocket() with credentials enabled, as the spec implies * this feature is not compulsory for connection managers. * * This method requires StreamTubeChannel::FeatureCore to be ready. * * \return \c true if the stream tube is capable to accept or offer an abstract Unix socket * which will require credentials upon connection, \c false otherwise. * \sa IncomingStreamTubeChannel::acceptTubeAsUnixSocket(), * OutgoingStreamTubeChannel::offerUnixSocket(), * supportsUnixSocketsOnLocalhost(), * supportsUnixSocketsWithCredentials(), * supportsAbstractUnixSocketsOnLocalhost() */ bool StreamTubeChannel::supportsAbstractUnixSocketsWithCredentials() const { if (!isReady(FeatureCore)) { warning() << "StreamTubeChannel::supportsAbstractUnixSocketsWithCredentials() used with " "FeatureCore not ready"; return false; } return mPriv->socketTypes[SocketAddressTypeAbstractUnix].contains(SocketAccessControlCredentials); } /** * Return all the known active connections since StreamTubeChannel::FeatureConnectionMonitoring has * been enabled. * * For this method to return all known connections, you need to make * StreamTubeChannel::FeatureConnectionMonitoring ready before accepting or offering the stream * tube. * * This method requires StreamTubeChannel::FeatureConnectionMonitoring to be ready. * * \return The list of active connection ids. * \sa newConnection(), connectionClosed() */ QSet StreamTubeChannel::connections() const { if (!isReady(FeatureConnectionMonitoring)) { warning() << "StreamTubeChannel::connections() used with " "FeatureConnectionMonitoring not ready"; return QSet(); } return mPriv->connections; } /** * Return the type of the tube's local endpoint socket. * * Note that this function will return a valid value only after state() has gone #TubeStateOpen. * * \return The socket type as #SocketAddressType. * \sa localAddress(), ipAddress() */ SocketAddressType StreamTubeChannel::addressType() const { return mPriv->addressType; } /** * Return the access control used by this stream tube. * * Note that this function will only return a valid value after state() has gone #TubeStateOpen. * * \return The access control as #SocketAccessControl. * \sa addressType() */ SocketAccessControl StreamTubeChannel::accessControl() const { return mPriv->accessControl; } /** * Return the IP address/port combination used by this stream tube. * * This method will return a meaningful value only if the local endpoint socket for the tube is a * TCP socket, i.e. addressType() is #SocketAddressTypeIPv4 or #SocketAddressTypeIPv6. * * Note that this function will return a valid value only after state() has gone #TubeStateOpen. * * \return Pair of IP address as QHostAddress and port if using a TCP socket, * or an undefined value otherwise. * \sa localAddress() */ QPair StreamTubeChannel::ipAddress() const { if (state() != TubeChannelStateOpen) { warning() << "Tube not open, returning invalid IP address"; return qMakePair(QHostAddress::Null, 0); } return mPriv->ipAddress; } /** * Return the local address used by this stream tube. * * This method will return a meaningful value only if the local endpoint socket for the tube is an * UNIX socket, i.e. addressType() is #SocketAddressTypeUnix or #SocketAddressTypeAbstractUnix. * * Note that this function will return a valid value only after state() has gone #TubeStateOpen. * * \return Unix socket address if using an Unix socket, * or an undefined value otherwise. * \sa ipAddress() */ QString StreamTubeChannel::localAddress() const { if (state() != TubeChannelStateOpen) { warning() << "Tube not open, returning invalid local socket address"; return QString(); } return mPriv->unixAddress; } void StreamTubeChannel::addConnection(uint connection) { if (!mPriv->connections.contains(connection)) { mPriv->connections.insert(connection); emit newConnection(connection); } else { warning() << "Tried to add connection" << connection << "on StreamTube" << objectPath() << "but it already was there"; } } void StreamTubeChannel::removeConnection(uint connection, const QString &error, const QString &message) { if (mPriv->connections.contains(connection)) { mPriv->connections.remove(connection); emit connectionClosed(connection, error, message); } else { warning() << "Tried to remove connection" << connection << "from StreamTube" << objectPath() << "but it wasn't there"; } } void StreamTubeChannel::setAddressType(SocketAddressType type) { mPriv->addressType = type; } void StreamTubeChannel::setAccessControl(SocketAccessControl accessControl) { mPriv->accessControl = accessControl; } void StreamTubeChannel::setIpAddress(const QPair &address) { mPriv->ipAddress = address; } void StreamTubeChannel::setLocalAddress(const QString &address) { mPriv->unixAddress = address; } bool StreamTubeChannel::isDroppingConnections() const { return mPriv->droppingConnections; } void StreamTubeChannel::gotStreamTubeProperties(PendingOperation *op) { if (!op->isError()) { PendingVariantMap *pvm = qobject_cast(op); mPriv->extractStreamTubeProperties(pvm->result()); debug() << "Got reply to Properties::GetAll(StreamTubeChannel)"; mPriv->readinessHelper->setIntrospectCompleted(StreamTubeChannel::FeatureCore, true); } else { warning().nospace() << "Properties::GetAll(StreamTubeChannel) failed " "with " << op->errorName() << ": " << op->errorMessage(); mPriv->readinessHelper->setIntrospectCompleted(StreamTubeChannel::FeatureCore, false, op->errorName(), op->errorMessage()); } } void StreamTubeChannel::onConnectionClosed(uint connId, const QString &error, const QString &message) { removeConnection(connId, error, message); } void StreamTubeChannel::dropConnections() { if (!mPriv->connections.isEmpty()) { debug() << "StreamTubeChannel invalidated with" << mPriv->connections.size() << "connections remaining, synthesizing close events"; mPriv->droppingConnections = true; foreach (uint connId, mPriv->connections) { removeConnection(connId, TP_QT_ERROR_ORPHANED, QLatin1String("parent tube invalidated, streams closing")); } mPriv->droppingConnections = false; } } /** * \fn void StreamTubeChannel::connectionClosed(uint connectionId, * const QString &errorName, const QString &errorMessage) * * Emitted when a connection on this stream tube has been closed. * * \param connectionId The unique ID associated with the connection that was closed. * \param errorName The name of a D-Bus error describing the error that occurred. * \param errorMessage A debugging message associated with the error. * \sa newConnection(), connections() */ } // Tp telepathy-qt-0.9.3/TelepathyQt/MessageContentPart0000644000175200001440000000040612000056607024351 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_MessageContentPart_HEADER_GUARD_ #define _TelepathyQt_MessageContentPart_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/captcha.cpp0000644000175200001440000001022212000056607022764 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include namespace Tp { struct TP_QT_NO_EXPORT Captcha::Private : public QSharedData { Private(); Private(const Captcha::Private &other); ~Private(); QString mimeType; QString label; QByteArray captchaData; CaptchaAuthentication::ChallengeType type; uint id; }; Captcha::Private::Private() : type(CaptchaAuthentication::NoChallenge), id(0) { } Captcha::Private::Private(const Private &other) : QSharedData(other), mimeType(other.mimeType), label(other.label), captchaData(other.captchaData), type(other.type), id(other.id) { } Captcha::Private::~Private() { } /** * \class Captcha * \ingroup client * \headerfile TelepathyQt/captcha.h * * \brief The Captcha class represents a Captcha ready to be answered. * * It exposes all the parameters needed for a handler to present the user with a captcha. * * Please note this class is meant to be read-only. It is usually created by PendingCaptchas * once a Captcha request operation succeeds. * * Please note that this class is implicitly shared. */ /** * Default constructor. */ Captcha::Captcha() { } /** * Copy constructor. */ Captcha::Captcha(const Captcha &other) : mPriv(other.mPriv) { } Captcha::Captcha(const QString &mimeType, const QString &label, const QByteArray &data, CaptchaAuthentication::ChallengeType type, uint id) : mPriv(new Captcha::Private) { mPriv->mimeType = mimeType; mPriv->label = label; mPriv->captchaData = data; mPriv->type = type; mPriv->id = id; } /** * Class destructor. */ Captcha::~Captcha() { } Captcha &Captcha::operator=(const Captcha &rhs) { if (this==&rhs) { //Protect against self-assignment return *this; } mPriv = rhs.mPriv; return *this; } /** * Return the mimetype of the captcha. * * \return The captcha's mimetype. * \sa data() */ QString Captcha::mimeType() const { if (!isValid()) { return QString(); } return mPriv->mimeType; } /** * Return the label of the captcha. For some captcha types, such as * CaptchaAuthentication::TextQuestionChallenge, the label is also * the challenge the user has to answer * * \return The captcha's label. * \sa data() * type() */ QString Captcha::label() const { if (!isValid()) { return QString(); } return mPriv->label; } /** * Return the raw data of the captcha. The handler can check its type and * metatype to know how to parse the blob. * * \return The captcha's data. * \sa mimeType(), type() */ QByteArray Captcha::data() const { if (!isValid()) { return QByteArray(); } return mPriv->captchaData; } /** * Return the type of the captcha. * * \return The captcha's type. * \sa data() */ CaptchaAuthentication::ChallengeType Captcha::type() const { if (!isValid()) { return CaptchaAuthentication::NoChallenge; } return mPriv->type; } /** * Return the id of the captcha. This parameter should be used to identify * the captcha when answering its challenge. * * \return The captcha's id. * \sa CaptchaAuthentication::answer() */ uint Captcha::id() const { if (!isValid()) { return 0; } return mPriv->id; } } telepathy-qt-0.9.3/TelepathyQt/dbus.xml0000644000175200001440000000052312000056607022337 0ustar00collabora-develusers00000000000000 D-Bus interfaces telepathy-qt-0.9.3/TelepathyQt/pending-variant.h0000644000175200001440000000315412000056607024122 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_pending_variant_h_HEADER_GUARD_ #define _TelepathyQt_pending_variant_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include namespace Tp { class TP_QT_EXPORT PendingVariant : public PendingOperation { Q_OBJECT Q_DISABLE_COPY(PendingVariant); public: PendingVariant(QDBusPendingCall call, const SharedPtr &object); ~PendingVariant(); QVariant result() const; private Q_SLOTS: TP_QT_NO_EXPORT void watcherFinished(QDBusPendingCallWatcher*); private: struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/pending-account.h0000644000175200001440000000413412000056607024111 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008 Collabora Ltd. * @copyright Copyright (C) 2008 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_pending_account_h_HEADER_GUARD_ #define _TelepathyQt_pending_account_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include class QDBusPendingCallWatcher; namespace Tp { class AccountManager; class TP_QT_EXPORT PendingAccount : public PendingOperation { Q_OBJECT Q_DISABLE_COPY(PendingAccount); public: ~PendingAccount(); AccountManagerPtr manager() const; AccountPtr account() const; private Q_SLOTS: TP_QT_NO_EXPORT void onCallFinished(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void onAccountBuilt(Tp::PendingOperation *readyOp); TP_QT_NO_EXPORT void onNewAccount(const Tp::AccountPtr &account); private: friend class AccountManager; TP_QT_NO_EXPORT PendingAccount(const AccountManagerPtr &manager, const QString &connectionManager, const QString &protocol, const QString &displayName, const QVariantMap ¶meters, const QVariantMap &properties = QVariantMap()); struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/FileTransferChannel0000644000175200001440000000041112000056607024454 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_FileTransferChannel_HEADER_GUARD_ #define _TelepathyQt_FileTransferChannel_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/AccountPropertyFilter0000644000175200001440000000041712000056607025114 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_AccountPropertyFilter_HEADER_GUARD_ #define _TelepathyQt_AccountPropertyFilter_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/ClientRegistrar0000644000175200001440000000037412000056607023710 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ClientRegistrar_HEADER_GUARD_ #define _TelepathyQt_ClientRegistrar_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/client-registrar.h0000644000175200001440000000666212000056607024321 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009-2010 Collabora Ltd. * @copyright Copyright (C) 2009-2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_client_registrar_h_HEADER_GUARD_ #define _TelepathyQt_client_registrar_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include #include #include #include #include namespace Tp { class TP_QT_EXPORT ClientRegistrar : public Object { Q_OBJECT Q_DISABLE_COPY(ClientRegistrar) public: static ClientRegistrarPtr create(const QDBusConnection &bus); static ClientRegistrarPtr create( const AccountFactoryConstPtr &accountFactory = AccountFactory::create(QDBusConnection::sessionBus()), const ConnectionFactoryConstPtr &connectionFactory = ConnectionFactory::create(QDBusConnection::sessionBus()), const ChannelFactoryConstPtr &channelFactory = ChannelFactory::create(QDBusConnection::sessionBus()), const ContactFactoryConstPtr &contactFactory = ContactFactory::create()); static ClientRegistrarPtr create(const QDBusConnection &bus, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory); static ClientRegistrarPtr create(const AccountManagerPtr &accountManager); ~ClientRegistrar(); QDBusConnection dbusConnection() const; AccountFactoryConstPtr accountFactory() const; ConnectionFactoryConstPtr connectionFactory() const; ChannelFactoryConstPtr channelFactory() const; ContactFactoryConstPtr contactFactory() const; QList registeredClients() const; bool registerClient(const AbstractClientPtr &client, const QString &clientName, bool unique = false); bool unregisterClient(const AbstractClientPtr &client); void unregisterClients(); private: ClientRegistrar(const QDBusConnection &bus, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory); struct Private; friend struct Private; Private *mPriv; static QHash, ClientRegistrar *> registrarForConnection; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/functors.h0000644000175200001440000002513312000056607022700 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_functors_h_HEADER_GUARD_ #define _TelepathyQt_functors_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include namespace Tp { struct TP_QT_EXPORT BaseFunctor { }; template struct PtrFunctor0 : public BaseFunctor { typedef R (*FunctionType)(); typedef R ResultType; PtrFunctor0(FunctionType fn) : fn(fn) {} ResultType operator()() const { return fn(); } FunctionType fn; }; template struct MemberFunctor0 : public BaseFunctor { typedef R (T::*FunctionType)(); typedef R ResultType; MemberFunctor0(T *object, FunctionType fn) : object(object), fn(fn) {} ResultType operator()() const { return (object->*(fn))(); } T *object; FunctionType fn; }; template struct PtrFunctor1 : public BaseFunctor { typedef R (*FunctionType)(Arg1); typedef R ResultType; PtrFunctor1(FunctionType fn) : fn(fn) {} ResultType operator()(Arg1 a1) const { return fn(a1); } FunctionType fn; }; template struct MemberFunctor1 : public BaseFunctor { typedef R (T::*FunctionType)(Arg1); typedef R ResultType; MemberFunctor1(T *object, FunctionType fn) : object(object), fn(fn) {} ResultType operator()(Arg1 a1) const { return (object->*(fn))(a1); } T *object; FunctionType fn; }; template struct PtrFunctor2 : public BaseFunctor { typedef R (*FunctionType)(Arg1, Arg2); typedef R ResultType; PtrFunctor2(FunctionType fn) : fn(fn) {} ResultType operator()(Arg1 a1, Arg2 a2) const { return fn(a1, a2); } FunctionType fn; }; template struct MemberFunctor2 : public BaseFunctor { typedef R (T::*FunctionType)(Arg1, Arg2); typedef R ResultType; MemberFunctor2(T *object, FunctionType fn) : object(object), fn(fn) {} ResultType operator()(Arg1 a1, Arg2 a2) const { return (object->*(fn))(a1, a2); } T *object; FunctionType fn; }; template struct PtrFunctor3 : public BaseFunctor { typedef R (*FunctionType)(Arg1, Arg2, Arg3); typedef R ResultType; PtrFunctor3(FunctionType fn) : fn(fn) {} ResultType operator()(Arg1 a1, Arg2 a2, Arg3 a3) const { return fn(a1, a2, a3); } FunctionType fn; }; template struct MemberFunctor3 : public BaseFunctor { typedef R (T::*FunctionType)(Arg1, Arg2, Arg3); typedef R ResultType; MemberFunctor3(T *object, FunctionType fn) : object(object), fn(fn) {} ResultType operator()(Arg1 a1, Arg2 a2, Arg3 a3) const { return (object->*(fn))(a1, a2, a3); } T *object; FunctionType fn; }; template struct PtrFunctor4 : public BaseFunctor { typedef R (*FunctionType)(Arg1, Arg2, Arg3, Arg4); typedef R ResultType; PtrFunctor4(FunctionType fn) : fn(fn) {} ResultType operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4) const { return fn(a1, a2, a3, a4); } FunctionType fn; }; template struct MemberFunctor4 : public BaseFunctor { typedef R (T::*FunctionType)(Arg1, Arg2, Arg3, Arg4); typedef R ResultType; MemberFunctor4(T *object, FunctionType fn) : object(object), fn(fn) {} ResultType operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4) const { return (object->*(fn))(a1, a2, a3, a4); } T *object; FunctionType fn; }; template struct PtrFunctor5 : public BaseFunctor { typedef R (*FunctionType)(Arg1, Arg2, Arg3, Arg4, Arg5); typedef R ResultType; PtrFunctor5(FunctionType fn) : fn(fn) {} ResultType operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5) const { return fn(a1, a2, a3, a4, a5); } FunctionType fn; }; template struct MemberFunctor5 : public BaseFunctor { typedef R (T::*FunctionType)(Arg1, Arg2, Arg3, Arg4, Arg5); typedef R ResultType; MemberFunctor5(T *object, FunctionType fn) : object(object), fn(fn) {} ResultType operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5) const { return (object->*(fn))(a1, a2, a3, a4, a5); } T *object; FunctionType fn; }; template struct PtrFunctor6 : public BaseFunctor { typedef R (*FunctionType)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6); typedef R ResultType; PtrFunctor6(FunctionType fn) : fn(fn) {} ResultType operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6) const { return fn(a1, a2, a3, a4, a5, a6); } FunctionType fn; }; template struct MemberFunctor6 : public BaseFunctor { typedef R (T::*FunctionType)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6); typedef R ResultType; MemberFunctor6(T *object, FunctionType fn) : object(object), fn(fn) {} ResultType operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6) const { return (object->*(fn))(a1, a2, a3, a4, a5, a6); } T *object; FunctionType fn; }; template struct PtrFunctor7 : public BaseFunctor { typedef R (*FunctionType)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7); typedef R ResultType; PtrFunctor7(FunctionType fn) : fn(fn) {} ResultType operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6, Arg7 a7) const { return fn(a1, a2, a3, a4, a5, a6, a7); } FunctionType fn; }; template struct MemberFunctor7 : public BaseFunctor { typedef R (T::*FunctionType)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7); typedef R ResultType; MemberFunctor7(T *object, FunctionType fn) : object(object), fn(fn) {} ResultType operator()(Arg1 a1, Arg2 a2, Arg3 a3, Arg4 a4, Arg5 a5, Arg6 a6, Arg7 a7) const { return (object->*(fn))(a1, a2, a3, a4, a5, a6, a7); } T *object; FunctionType fn; }; // convenience methods // ptrFun template inline PtrFunctor0 ptrFun(R (*fn)() ) { return PtrFunctor0(fn); } template inline PtrFunctor1 ptrFun(R (*fn)(Arg1) ) { return PtrFunctor1(fn); } template inline PtrFunctor2 ptrFun(R (*fn)(Arg1, Arg2) ) { return PtrFunctor2(fn); } template inline PtrFunctor3 ptrFun(R (*fn)(Arg1, Arg2, Arg3) ) { return PtrFunctor3(fn); } template inline PtrFunctor4 ptrFun(R (*fn)(Arg1, Arg2, Arg3, Arg4) ) { return PtrFunctor4(fn); } template inline PtrFunctor5 ptrFun(R (*fn)(Arg1, Arg2, Arg3, Arg4, Arg5) ) { return PtrFunctor5(fn); } template inline PtrFunctor6 ptrFun(R (*fn)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6) ) { return PtrFunctor6(fn); } template inline PtrFunctor7 ptrFun(R (*fn)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7) ) { return PtrFunctor7(fn); } // memFun template inline MemberFunctor0 memFun(/**/ T *obj, R (T::*fn)() ) { return MemberFunctor0(obj, fn); } template inline MemberFunctor1 memFun(/**/ T *obj, R (T::*fn)(Arg1) ) { return MemberFunctor1(obj, fn); } template inline MemberFunctor2 memFun(/**/ T *obj, R (T::*fn)(Arg1, Arg2) ) { return MemberFunctor2(obj, fn); } template inline MemberFunctor3 memFun(/**/ T *obj, R (T::*fn)(Arg1, Arg2, Arg3) ) { return MemberFunctor3(obj, fn); } template inline MemberFunctor4 memFun(/**/ T *obj, R (T::*fn)(Arg1, Arg2, Arg3, Arg4) ) { return MemberFunctor4(obj, fn); } template inline MemberFunctor5 memFun(/**/ T *obj, R (T::*fn)(Arg1, Arg2, Arg3, Arg4, Arg5) ) { return MemberFunctor5(obj, fn); } template inline MemberFunctor6 memFun(/**/ T *obj, R (T::*fn)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6) ) { return MemberFunctor6(obj, fn); } template inline MemberFunctor7 memFun(/**/ T *obj, R (T::*fn)(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7) ) { return MemberFunctor7(obj, fn); } } #endif telepathy-qt-0.9.3/TelepathyQt/tls-certificate.xml0000644000175200001440000000036312000056607024466 0ustar00collabora-develusers00000000000000 TLSCertificate telepathy-qt-0.9.3/TelepathyQt/BaseConnection0000644000175200001440000000037112000056607023476 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_BaseConnection_HEADER_GUARD_ #define _TelepathyQt_BaseConnection_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/TelepathyQtServiceConfig.cmake.in0000644000175200001440000000236212000056607027205 0ustar00collabora-develusers00000000000000# TelepathyQt@QT_VERSION_MAJOR@ServiceConfig.cmake is generated by CMake from TelepathyQt/TelepathyQtServiceConfig.cmake.in. # Any changed value in this file will be overwritten by CMake. # set the version number set(TELEPATHY_QT@QT_VERSION_MAJOR@_SERVICE_VERSION_MAJOR @TP_QT_MAJOR_VERSION@) set(TELEPATHY_QT@QT_VERSION_MAJOR@_SERVICE_VERSION_MINOR @TP_QT_MINOR_VERSION@) set(TELEPATHY_QT@QT_VERSION_MAJOR@_SERVICE_VERSION_MICRO @TP_QT_MICRO_VERSION@) set(TELEPATHY_QT@QT_VERSION_MAJOR@_SERVICE_VERSION_NANO @TP_QT_NANO_VERSION@) set(TELEPATHY_QT@QT_VERSION_MAJOR@_SERVICE_VERSION @PACKAGE_VERSION@) # set the directories if(NOT TELEPATHY_QT@QT_VERSION_MAJOR@_SERVICE_INSTALL_DIR) set(TELEPATHY_QT@QT_VERSION_MAJOR@_SERVICE_INSTALL_DIR "@CMAKE_INSTALL_PREFIX@") endif(NOT TELEPATHY_QT@QT_VERSION_MAJOR@_SERVICE_INSTALL_DIR) set(TELEPATHY_QT@QT_VERSION_MAJOR@_SERVICE_INCLUDE_DIR "@TELEPATHY_QT_INCLUDE_DIR@") set(TELEPATHY_QT@QT_VERSION_MAJOR@_SERVICE_LIB_DIR "@TELEPATHY_QT_LIB_DIR@") set(TELEPATHY_QT@QT_VERSION_MAJOR@_SERVICE_SHARE_DIR "@TELEPATHY_QT_DATA_DIR@") find_package(TelepathyQt@QT_VERSION_MAJOR@ REQUIRED) set(TELEPATHY_QT@QT_VERSION_MAJOR@_SERVICE_LIBRARIES telepathy-qt@QT_VERSION_MAJOR@-service) telepathy-qt-0.9.3/TelepathyQt/svc-connection-manager.xml0000644000175200001440000000073012000056607025742 0ustar00collabora-develusers00000000000000 Connection Manager interfaces telepathy-qt-0.9.3/TelepathyQt/ClientInterface0000644000175200001440000000036212000056607023643 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ClientInterface_HEADER_GUARD_ #define _TelepathyQt_ClientInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/pending-contacts-internal.h0000644000175200001440000000521412000056607026105 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_pending_contacts_internal_h_HEADER_GUARD_ #define _TelepathyQt_pending_contacts_internal_h_HEADER_GUARD_ #include #include namespace Tp { class TP_QT_NO_EXPORT PendingAddressingGetContacts : public PendingOperation { Q_OBJECT Q_DISABLE_COPY(PendingAddressingGetContacts) public: PendingAddressingGetContacts(const ConnectionPtr &connection, const QString &vcardField, const QStringList &vcardAddresses, const QStringList &interfaces); PendingAddressingGetContacts(const ConnectionPtr &connection, const QStringList &uris, const QStringList &interfaces); ~PendingAddressingGetContacts(); UIntList validHandles() const { return mValidHandles; } bool isForVCardAddresses() const { return mRequestType == ForVCardAddresses; } QString vcardField() const { return mVCardField; } QStringList vcardAddresses() const { return mAddresses; } bool isForUris() const { return mRequestType == ForUris; } QStringList uris() const { return mAddresses; } QStringList validAddresses() const { return mValidAddresses; } QStringList invalidAddresses() const { return mInvalidAddresses; } ContactAttributesMap attributes() const { return mAttributes; } private Q_SLOTS: void onGetContactsFinished(QDBusPendingCallWatcher* watcher); private: enum RequestType { ForVCardAddresses, ForUris }; ConnectionPtr mConnection; RequestType mRequestType; UIntList mValidHandles; QString mVCardField; QStringList mAddresses; QStringList mValidAddresses; QStringList mInvalidAddresses; ContactAttributesMap mAttributes; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/PendingHandles0000644000175200001440000000037112000056607023467 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_PendingHandles_HEADER_GUARD_ #define _TelepathyQt_PendingHandles_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/constants.h0000644000175200001440000001346612000056607023057 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008 Collabora Ltd. * @copyright Copyright (C) 2008 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_constants_h_HEADER_GUARD_ #define _TelepathyQt_constants_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif /** * \addtogroup typesconstants Types and constants * * Enumerated, flag, structure, list and mapping types and utility constants. */ /** * \defgroup utilityconsts Utility string constants * \ingroup typesconstants * * Utility constants which aren't generated from the specification but are * useful for working with the Telepathy protocol. * @{ */ /** * The prefix for a connection manager's bus name, to which the CM's name (e.g. * "gabble") should be appended. */ #define TP_QT_CONNECTION_MANAGER_BUS_NAME_BASE QLatin1String("org.freedesktop.Telepathy.ConnectionManager.") /** * The prefix for a connection manager's object path, to which the CM's name * (e.g. "gabble") should be appended. */ #define TP_QT_CONNECTION_MANAGER_OBJECT_PATH_BASE QLatin1String("/org/freedesktop/Telepathy/ConnectionManager/") /** * The prefix for a connection's bus name, to which the CM's name (e.g. * "gabble"), the protocol (e.g. "jabber") and an element * representing the account should be appended. */ #define TP_QT_CONNECTION_BUS_NAME_BASE QLatin1String("org.freedesktop.Telepathy.Connection.") /** * The prefix for a connection's object path, to which the CM's name (e.g. * "gabble"), the protocol (e.g. "jabber") and an element * representing the account should be appended. */ #define TP_QT_CONNECTION_OBJECT_PATH_BASE QLatin1String("/org/freedesktop/Telepathy/Connection/") /** * The well-known bus name of the Account Manager. * * \see Tp::AccountManager */ #define TP_QT_ACCOUNT_MANAGER_BUS_NAME \ (QLatin1String("org.freedesktop.Telepathy.AccountManager")) /** * The object path of the Account Manager object. * * \see Tp::AccountManager */ #define TP_QT_ACCOUNT_MANAGER_OBJECT_PATH \ (QLatin1String("/org/freedesktop/Telepathy/AccountManager")) /** * The well-known bus name of the Channel Dispatcher. */ #define TP_QT_CHANNEL_DISPATCHER_BUS_NAME \ (QLatin1String("org.freedesktop.Telepathy.ChannelDispatcher")) /** * The object path of the Channel Dispatcherr object. */ #define TP_QT_CHANNEL_DISPATCHER_OBJECT_PATH \ (QLatin1String("/org/freedesktop/Telepathy/ChannelDispatcher")) /** * The prefix for an Account's object path, to which the CM's name (e.g. * "gabble"), the protocol (e.g. "jabber") and an element * identifying the particular account should be appended. * * \see Tp::Account */ #define TP_QT_ACCOUNT_OBJECT_PATH_BASE \ (QLatin1String("/org/freedesktop/Telepathy/Account")) /** * The object path of the Debug object of various services. */ #define TP_QT_DEBUG_OBJECT_PATH \ (QLatin1String("/org/freedesktop/Telepathy/debug")) /** * @} */ #include /** * \ingroup errorstrconsts * * The error name "org.freedesktop.DBus.Error.NameHasNoOwner" as a QLatin1String. * * Raised by the D-Bus daemon when looking up the owner of a well-known name, * if no process owns that name. * * Also used by DBusProxy to indicate that the owner of a well-known name * has disappeared (usually indicating that the process owning that name * exited or crashed). */ #define TP_QT_DBUS_ERROR_NAME_HAS_NO_OWNER \ (QLatin1String("org.freedesktop.DBus.Error.NameHasNoOwner")) /** * \ingroup errorstrconsts * * The error name "org.freedesktop.DBus.Error.UnknownInterface" as a QLatin1String. */ #define TP_QT_DBUS_ERROR_UNKNOWN_INTERFACE \ (QLatin1String("org.freedesktop.DBus.Error.UnknownInterface")) /** * \ingroup errorstrconsts * * The error name "org.freedesktop.DBus.Error.UnknownMethod" as a QLatin1String. * * Raised by the D-Bus daemon when the method name invoked isn't * known by the object you invoked it on. */ #define TP_QT_DBUS_ERROR_UNKNOWN_METHOD \ (QLatin1String("org.freedesktop.DBus.Error.UnknownMethod")) /** * \ingroup errorstrconsts * * The error name "org.freedesktop.Telepathy.Qt.Error.ObjectRemoved" as a QLatin1String. */ #define TP_QT_ERROR_OBJECT_REMOVED \ (QLatin1String("org.freedesktop.Telepathy.Qt.Error.ObjectRemoved")) /** * \ingroup errorstrconsts * * The error name "org.freedesktop.Telepathy.Qt.Error.Inconsistent" as a QLatin1String. */ #define TP_QT_ERROR_INCONSISTENT \ (QLatin1String("org.freedesktop.Telepathy.Qt.Error.Inconsistent")) /** * \ingroup errorstrconsts * * The error name "org.freedesktop.Telepathy.Qt.Error.Orphaned" as a QLatin1String. * * This error is used when the "parent" proxy of an object gets invalidated. For example, a Channel * whose corresponding Connection is invalidated invalidates itself with this error, as do leftover * StreamTube connections when their parent StreamTubeChannel is invalidated. The invalidation * reason of the parent proxy might provide more information on the cause of the error. */ #define TP_QT_ERROR_ORPHANED \ (QLatin1String("org.freedesktop.Telepathy.Qt.Error.Orphaned")) #endif telepathy-qt-0.9.3/TelepathyQt/Global0000644000175200001440000000034012000056607022000 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_Global_HEADER_GUARD_ #define _TelepathyQt_Global_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/pending-variant-map.h0000644000175200001440000000321512000056607024673 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009-2010 Collabora Ltd. * @copyright Copyright (C) 2009-2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_pending_variant_map_h_HEADER_GUARD_ #define _TelepathyQt_pending_variant_map_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include namespace Tp { class TP_QT_EXPORT PendingVariantMap : public PendingOperation { Q_OBJECT Q_DISABLE_COPY(PendingVariantMap); public: PendingVariantMap(QDBusPendingCall call, const SharedPtr &object); ~PendingVariantMap(); QVariantMap result() const; private Q_SLOTS: TP_QT_NO_EXPORT void watcherFinished(QDBusPendingCallWatcher*); private: struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/future-channel-dispatcher.xml0000644000175200001440000000123512000056607026447 0ustar00collabora-develusers00000000000000 Channel Dispatcher extensions from the future telepathy-qt-0.9.3/TelepathyQt/ProtocolParameterList0000644000175200001440000000041212000056607025076 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ProtocolParameterList_HEADER_GUARD_ #define _TelepathyQt_ProtocolParameterList_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/FixedFeatureFactory0000644000175200001440000000041112000056607024502 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_FixedFeatureFactory_HEADER_GUARD_ #define _TelepathyQt_FixedFeatureFactory_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface0000644000175200001440000000055412000056607035354 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface_HEADER_GUARD_ #define _TelepathyQt_CallContentMediaDescriptionInterfaceRTCPExtendedReportsInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/AbstractClientObserver0000644000175200001440000000041112000056607025211 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_AbstractClientObserver_HEADER_GUARD_ #define _TelepathyQt_AbstractClientObserver_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/CapabilitiesBase0000644000175200001440000000037712000056607023776 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_CapabilitiesBase_HEADER_GUARD_ #define _TelepathyQt_CapabilitiesBase_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/Farstream/0000755000175200001440000000000012000056607022604 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/TelepathyQt/Farstream/TelepathyQtFarstreamConfig.cmake.in0000644000175200001440000000266612000056607031464 0ustar00collabora-develusers00000000000000# TelepathyQt@QT_VERSION_MAJOR@FarstreamConfig.cmake is generated by CMake from TelepathyQt/TelepathyQtFarstreamConfig.cmake.in. # Any changed value in this file will be overwritten by CMake. if(NOT TelepathyQt@QT_VERSION_MAJOR@Farstream_FOUND) # set the version number set(TELEPATHY_QT@QT_VERSION_MAJOR@_FARSTREAM_VERSION_MAJOR @TP_QT_MAJOR_VERSION@) set(TELEPATHY_QT@QT_VERSION_MAJOR@_FARSTREAM_VERSION_MINOR @TP_QT_MINOR_VERSION@) set(TELEPATHY_QT@QT_VERSION_MAJOR@_FARSTREAM_VERSION_MICRO @TP_QT_MICRO_VERSION@) set(TELEPATHY_QT@QT_VERSION_MAJOR@_FARSTREAM_VERSION_NANO @TP_QT_NANO_VERSION@) set(TELEPATHY_QT@QT_VERSION_MAJOR@_FARSTREAM_VERSION @PACKAGE_VERSION@) # set the directories if(NOT TELEPATHY_QT@QT_VERSION_MAJOR@_FARSTREAM_INSTALL_DIR) set(TELEPATHY_QT@QT_VERSION_MAJOR@_FARSTREAM_INSTALL_DIR "@CMAKE_INSTALL_PREFIX@") endif(NOT TELEPATHY_QT@QT_VERSION_MAJOR@_FARSTREAM_INSTALL_DIR) set(TELEPATHY_QT@QT_VERSION_MAJOR@_FARSTREAM_INCLUDE_DIR "@TELEPATHY_QT_INCLUDE_DIR@") set(TELEPATHY_QT@QT_VERSION_MAJOR@_FARSTREAM_LIB_DIR "@TELEPATHY_QT_LIB_DIR@") set(TELEPATHY_QT@QT_VERSION_MAJOR@_FARSTREAM_SHARE_DIR "@TELEPATHY_QT_DATA_DIR@") find_package(TelepathyQt@QT_VERSION_MAJOR@ REQUIRED) set(TELEPATHY_QT@QT_VERSION_MAJOR@_FARSTREAM_LIBRARIES telepathy-qt@QT_VERSION_MAJOR@-farstream) endif(NOT TelepathyQt@QT_VERSION_MAJOR@Farstream_FOUND) telepathy-qt-0.9.3/TelepathyQt/Farstream/global.h0000644000175200001440000000263412000056607024222 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * Copyright (C) 2009-2012 Collabora Ltd. * Copyright (C) 2009 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 _TelepathyQt_Farstream_global_h_HEADER_GUARD_ #define _TelepathyQt_Farstream_global_h_HEADER_GUARD_ #ifndef IN_TP_QT_FARSTREAM_HEADER #error IN_TP_QT_FARSTREAM_HEADER #endif #include #ifdef BUILDING_TP_QT_FARSTREAM # define TP_QT_FS_EXPORT Q_DECL_EXPORT #else # define TP_QT_FS_EXPORT Q_DECL_IMPORT #endif #if !defined(Q_OS_WIN) && defined(QT_VISIBILITY_AVAILABLE) # define TP_QT_FS_NO_EXPORT __attribute__((visibility("hidden"))) #endif #ifndef TP_QT_FS_NO_EXPORT # define TP_QT_FS_NO_EXPORT #endif #endif telepathy-qt-0.9.3/TelepathyQt/Farstream/channel.h0000644000175200001440000000351312000056607024367 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * Copyright (C) 2009-2012 Collabora Ltd. * Copyright (C) 2009 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 _TelepathyQt_Farstream_channel_h_HEADER_GUARD_ #define _TelepathyQt_Farstream_channel_h_HEADER_GUARD_ #ifndef IN_TP_QT_FARSTREAM_HEADER #error IN_TP_QT_FARSTREAM_HEADER #endif #include #include #include #include typedef struct _TfChannel TfChannel; namespace Tp { namespace Farstream { class TP_QT_FS_EXPORT PendingChannel : public Tp::PendingOperation { Q_OBJECT Q_DISABLE_COPY(PendingChannel) public: ~PendingChannel(); TfChannel *tfChannel() const; CallChannelPtr callChannel() const; private: TP_QT_FS_NO_EXPORT PendingChannel(const CallChannelPtr &channel); friend PendingChannel *createChannel(const CallChannelPtr &channel); struct Private; friend struct Private; Private *mPriv; }; TP_QT_FS_EXPORT PendingChannel *createChannel(const CallChannelPtr &channel); } // Farstream } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/Farstream/PendingChannel0000644000175200001440000000045512000056607025410 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_Farstream_PendingChannel_HEADER_GUARD_ #define _TelepathyQt_Farstream_PendingChannel_HEADER_GUARD_ #ifndef IN_TP_QT_FARSTREAM_HEADER #define IN_TP_QT_FARSTREAM_HEADER #endif #include #undef IN_TP_QT_FARSTREAM_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/Farstream/channel.cpp0000644000175200001440000001210512000056607024717 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * Copyright © 2009-2012 Collabora Ltd. * Copyright © 2009 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 */ #include #include "TelepathyQt/Farstream/_gen/channel.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include #include #include #include namespace Tp { namespace Farstream { struct TP_QT_FS_NO_EXPORT PendingChannel::Private { Private() : mTfChannel(0) { } static void onTfChannelNewFinish(GObject *sourceObject, GAsyncResult *res, gpointer userData); TfChannel *mTfChannel; }; PendingChannel::PendingChannel(const CallChannelPtr &channel) : Tp::PendingOperation(channel), mPriv(new PendingChannel::Private) { if (!channel->handlerStreamingRequired()) { warning() << "Handler streaming not required"; setFinishedWithError(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Handler streaming not required")); return; } TpDBusDaemon *dbus = tp_dbus_daemon_dup(0); if (!dbus) { warning() << "Unable to connect to D-Bus"; setFinishedWithError(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Unable to connect to D-Bus")); return; } Tp::ConnectionPtr connection = channel->connection(); if (connection.isNull()) { warning() << "Connection not available"; setFinishedWithError(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection not available")); g_object_unref(dbus); return; } TpSimpleClientFactory *factory = (TpSimpleClientFactory *) tp_automatic_client_factory_new (dbus); if (!factory) { warning() << "Unable to construct TpAutomaticClientFactory"; setFinishedWithError(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Unable to construct TpAutomaticClientFactory")); g_object_unref(dbus); return; } TpConnection *gconnection = tp_simple_client_factory_ensure_connection (factory, connection->objectPath().toAscii(), NULL, 0); if (!gconnection) { warning() << "Unable to construct TpConnection"; setFinishedWithError(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Unable to construct TpConnection")); g_object_unref(factory); g_object_unref(dbus); return; } TpChannel *gchannel = (TpChannel*) g_object_new(TP_TYPE_CALL_CHANNEL, "bus-name", connection->busName().toAscii().constData(), "connection", gconnection, "dbus-daemon", dbus, "object-path", channel->objectPath().toAscii().constData(), NULL); g_object_unref(factory); factory = 0; g_object_unref(dbus); dbus = 0; g_object_unref(gconnection); gconnection = 0; if (!gchannel) { warning() << "Unable to construct TpChannel"; setFinishedWithError(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Unable to construct TpChannel")); return; } tf_channel_new_async(gchannel, PendingChannel::Private::onTfChannelNewFinish, this); g_object_unref(gchannel); } PendingChannel::~PendingChannel() { delete mPriv; } void PendingChannel::Private::onTfChannelNewFinish(GObject *sourceObject, GAsyncResult *res, gpointer userData) { PendingChannel *self = reinterpret_cast(userData); GError *error = NULL; TfChannel *ret = tf_channel_new_finish(sourceObject, res, &error); if (error) { warning() << "Fs::PendingChannel::Private::onTfChannelNewFinish: error " << error->message; self->setFinishedWithError(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String(error->message)); g_clear_error(&error); return; } self->mPriv->mTfChannel = ret; self->setFinished(); } TfChannel *PendingChannel::tfChannel() const { return mPriv->mTfChannel; } CallChannelPtr PendingChannel::callChannel() const { return CallChannelPtr::staticCast(object()); } PendingChannel *createChannel(const CallChannelPtr &channel) { PendingChannel *ptf = new PendingChannel(channel); return ptf; } } // Farstream } // Tp telepathy-qt-0.9.3/TelepathyQt/Farstream/Channel0000644000175200001440000000043712000056607024103 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_Farstream_Channel_HEADER_GUARD_ #define _TelepathyQt_Farstream_Channel_HEADER_GUARD_ #ifndef IN_TP_QT_FARSTREAM_HEADER #define IN_TP_QT_FARSTREAM_HEADER #endif #include #undef IN_TP_QT_FARSTREAM_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/Farstream/CMakeLists.txt0000644000175200001440000001136312000056607025350 0ustar00collabora-develusers00000000000000if(FARSTREAM_COMPONENTS_FOUND) include_directories(${TELEPATHY_FARSTREAM_INCLUDE_DIR} ${TELEPATHY_GLIB_INCLUDE_DIR} ${FARSTREAM_INCLUDE_DIR} ${GSTREAMER_INCLUDE_DIR} ${GLIB2_INCLUDE_DIR} ${LIBXML2_INCLUDE_DIR} ${DBUS_INCLUDE_DIR}) # It gets inherited from the previous directory, hence it has to be removed explicitely remove_definitions(-DBUILDING_TP_QT) # We are building Telepathy-Qt-Farstream add_definitions(-DBUILDING_TP_QT_FARSTREAM -DQT_NO_KEYWORDS) set(telepathy_qt_farstream_SRCS channel.cpp) set(telepathy_qt_farstream_HEADERS Channel channel.h Global global.h PendingChannel) set(telepathy_qt_farstream_MOC_SRCS channel.h) # generate client moc files tpqt_generate_mocs(${telepathy_qt_farstream_MOC_SRCS}) # Create the library if (ENABLE_COMPILER_COVERAGE) add_library(telepathy-qt${QT_VERSION_MAJOR}-farstream STATIC ${telepathy_qt_farstream_SRCS} ${telepathy_qt_farstream_MOC_SRCS}) else (ENABLE_COMPILER_COVERAGE) add_library(telepathy-qt${QT_VERSION_MAJOR}-farstream SHARED ${telepathy_qt_farstream_SRCS} ${telepathy_qt_farstream_MOC_SRCS}) endif (ENABLE_COMPILER_COVERAGE) # Link target_link_libraries(telepathy-qt${QT_VERSION_MAJOR}-farstream ${QT_QTDBUS_LIBRARY} ${QT_QTCORE_LIBRARY} ${TELEPATHY_FARSTREAM_LIBRARIES} ${TELEPATHY_GLIB_LIBRARIES} telepathy-qt${QT_VERSION_MAJOR} ${TP_QT_LIBRARY_LINKER_FLAGS}) if (ENABLE_COMPILER_COVERAGE) target_link_libraries(telepathy-qt${QT_VERSION_MAJOR}-farstream gcov) endif (ENABLE_COMPILER_COVERAGE) # Set the correct version number set_target_properties(telepathy-qt${QT_VERSION_MAJOR}-farstream PROPERTIES SOVERSION ${TP_QT_ABI_VERSION} VERSION ${TP_QT_LIBRARY_VERSION}) # Install the library - watch out for the correct components if (WIN32) install(TARGETS telepathy-qt${QT_VERSION_MAJOR}-farstream EXPORT TelepathyQt${QT_VERSION_MAJOR}Targets RUNTIME DESTINATION ${LIB_INSTALL_DIR} COMPONENT farstream ARCHIVE DESTINATION ${LIB_INSTALL_DIR} COMPONENT farstream_libs) else (WIN32) install(TARGETS telepathy-qt${QT_VERSION_MAJOR}-farstream EXPORT TelepathyQt${QT_VERSION_MAJOR}Targets LIBRARY DESTINATION ${LIB_INSTALL_DIR} COMPONENT farstream ARCHIVE DESTINATION ${LIB_INSTALL_DIR} COMPONENT farstream_libs) endif (WIN32) # Install headers install(FILES ${telepathy_qt_farstream_HEADERS} DESTINATION ${INCLUDE_INSTALL_DIR}/telepathy-qt${QT_VERSION_MAJOR}/TelepathyQt/Farstream COMPONENT farstream_headers) # pkg-config files, only if not on windows if (NOT WIN32) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/TelepathyQtFarstream.pc.in ${CMAKE_CURRENT_BINARY_DIR}/TelepathyQt${QT_VERSION_MAJOR}Farstream.pc) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/TelepathyQtFarstream-uninstalled.pc.in ${CMAKE_CURRENT_BINARY_DIR}/TelepathyQt${QT_VERSION_MAJOR}Farstream-uninstalled.pc) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/TelepathyQt${QT_VERSION_MAJOR}Farstream.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig COMPONENT pkgconfig) endif (NOT WIN32) # Configure the actual Config file configure_file(TelepathyQtFarstreamConfig.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/TelepathyQt${QT_VERSION_MAJOR}FarstreamConfig.cmake" @ONLY) # this file is used by to check if the installed version can be used. macro_write_basic_cmake_version_file(${CMAKE_CURRENT_BINARY_DIR}/TelepathyQt${QT_VERSION_MAJOR}FarstreamConfigVersion.cmake ${PACKAGE_VERSION}) if(USE_COMMON_CMAKE_PACKAGE_CONFIG_DIR) set(_TelepathyQtFarstreamConfig_INSTALL_DIR ${LIB_INSTALL_DIR}/cmake/TelepathyQt${QT_VERSION_MAJOR}Farstream) else(USE_COMMON_CMAKE_PACKAGE_CONFIG_DIR) set(_TelepathyQtFarstreamConfig_INSTALL_DIR ${LIB_INSTALL_DIR}/TelepathyQt${QT_VERSION_MAJOR}Farstream/cmake) endif(USE_COMMON_CMAKE_PACKAGE_CONFIG_DIR) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/TelepathyQt${QT_VERSION_MAJOR}FarstreamConfigVersion.cmake ${CMAKE_CURRENT_BINARY_DIR}/TelepathyQt${QT_VERSION_MAJOR}FarstreamConfig.cmake DESTINATION ${_TelepathyQtFarstreamConfig_INSTALL_DIR} COMPONENT headers) endif(FARSTREAM_COMPONENTS_FOUND) telepathy-qt-0.9.3/TelepathyQt/Farstream/TelepathyQtFarstream.pc.in0000644000175200001440000000144612000056607027653 0ustar00collabora-develusers00000000000000prefix=${CMAKE_INSTALL_PREFIX} exec_prefix=${CMAKE_INSTALL_PREFIX} libdir=${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR} includedir=${CMAKE_INSTALL_PREFIX}/${INCLUDE_INSTALL_DIR} Name: TelepathyQt${QT_VERSION_MAJOR}Farstream Description: Qt Telepathy Farstream utility library for the Telepathy framework Version: ${PACKAGE_VERSION} Requires.private: QtCore >= ${QT_MIN_VERSION}, QtCore < ${QT_MAX_VERSION}, QtDBus >= ${QT_MIN_VERSION}, QtDBus < ${QT_MAX_VERSION}, telepathy-glib >= ${TELEPATHY_GLIB_MIN_VERSION}, telepathy-farstream >= ${TELEPATHY_FARSTREAM_MIN_VERSION}, TelepathyQt${QT_VERSION_MAJOR} = ${PACKAGE_VERSION} Libs: -L${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR} -ltelepathy-qt${QT_VERSION_MAJOR}-farstream Cflags: -I${CMAKE_INSTALL_PREFIX}/${INCLUDE_INSTALL_DIR}/telepathy-qt${QT_VERSION_MAJOR} telepathy-qt-0.9.3/TelepathyQt/Farstream/Global0000644000175200001440000000043412000056607023730 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_Farstream_Global_HEADER_GUARD_ #define _TelepathyQt_Farstream_Global_HEADER_GUARD_ #ifndef IN_TP_QT_FARSTREAM_HEADER #define IN_TP_QT_FARSTREAM_HEADER #endif #include #undef IN_TP_QT_FARSTREAM_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/Farstream/TelepathyQtFarstream-uninstalled.pc.in0000644000175200001440000000135612000056607032173 0ustar00collabora-develusers00000000000000prefix=/nonexistent exec_prefix=/nonexistent abs_top_builddir=${CMAKE_BINARY_DIR} abs_top_srcdir=${CMAKE_SOURCE_DIR} Name: TelepathyQt${QT_VERSION_MAJOR}Farstream (uninstalled copy) Description: Qt Telepathy Farstream utility library for the Telepathy framework Version: ${PACKAGE_VERSION} Requires.private: QtCore >= ${QT_MIN_VERSION}, QtCore < ${QT_MAX_VERSION}, QtDBus >= ${QT_MIN_VERSION}, QtDBus < ${QT_MAX_VERSION}, telepathy-glib >= ${TELEPATHY_GLIB_MIN_VERSION}, telepathy-farstream >= ${TELEPATHY_FARSTREAM_MIN_VERSION}, TelepathyQt${QT_VERSION_MAJOR} = ${PACKAGE_VERSION} Libs: ${CMAKE_BINARY_DIR}/TelepathyQt${QT_VERSION_MAJOR}/Farstream/libtelepathy-qt${QT_VERSION_MAJOR}-farstream.so Cflags: -I${CMAKE_SOURCE_DIR} -I${CMAKE_BINARY_DIR} telepathy-qt-0.9.3/TelepathyQt/ConnectionInterfaceClientTypesInterface0000644000175200001440000000044612000056607030534 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ConnectionInterfaceClientTypesInterface_HEADER_GUARD_ #define _TelepathyQt_ConnectionInterfaceClientTypesInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/channel-request.xml0000644000175200001440000000035712000056607024505 0ustar00collabora-develusers00000000000000 Channel Request interface telepathy-qt-0.9.3/TelepathyQt/ChannelTypeServerTLSConnectionInterface0000644000175200001440000000044312000056607030431 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelTypeServerTLSConnectionInterface_HEADER_GUARD_ #define _TelepathyQt_ChannelTypeServerTLSConnectionInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/Presence0000644000175200001440000000034612000056607022352 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_Presence_HEADER_GUARD_ #define _TelepathyQt_Presence_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/pending-string.h0000644000175200001440000000340012000056607023756 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008 Collabora Ltd. * @copyright Copyright (C) 2008 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_pending_string_h_HEADER_GUARD_ #define _TelepathyQt_pending_string_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include namespace Tp { class TP_QT_EXPORT PendingString : public PendingOperation { Q_OBJECT Q_DISABLE_COPY(PendingString); public: PendingString(QDBusPendingCall call, const SharedPtr &object); ~PendingString(); QString result() const; protected: void setResult(const QString &result); private Q_SLOTS: TP_QT_NO_EXPORT void watcherFinished(QDBusPendingCallWatcher *watcher); private: friend class ProtocolInfo; TP_QT_NO_EXPORT PendingString(const QString &errorName, const QString &errorMessage); struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/pending-channel.h0000644000175200001440000000601212000056607024062 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2010 Collabora Ltd. * @copyright Copyright (C) 2008-2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_pending_channel_h_HEADER_GUARD_ #define _TelepathyQt_pending_channel_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include #include namespace Tp { class Connection; class HandledChannelNotifier; class TP_QT_EXPORT PendingChannel : public PendingOperation { Q_OBJECT Q_DISABLE_COPY(PendingChannel) public: ~PendingChannel(); ConnectionPtr connection() const; bool yours() const; const QString &channelType() const; uint targetHandleType() const; uint targetHandle() const; QVariantMap immutableProperties() const; ChannelPtr channel() const; HandledChannelNotifier *handledChannelNotifier() const; private Q_SLOTS: TP_QT_NO_EXPORT void onConnectionCreateChannelFinished( QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void onConnectionEnsureChannelFinished( QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void onChannelReady(Tp::PendingOperation *op); TP_QT_NO_EXPORT void onHandlerError(const QString &errorName, const QString &errorMessage); TP_QT_NO_EXPORT void onHandlerChannelReceived( const Tp::ChannelPtr &channel); TP_QT_NO_EXPORT void onAccountCreateChannelFinished( Tp::PendingOperation *op); private: friend class Account; friend class ConnectionLowlevel; TP_QT_NO_EXPORT PendingChannel(const ConnectionPtr &connection, const QString &errorName, const QString &errorMessage); TP_QT_NO_EXPORT PendingChannel(const ConnectionPtr &connection, const QVariantMap &request, bool create, int timeout = -1); TP_QT_NO_EXPORT PendingChannel(const AccountPtr &account, const QVariantMap &request, const QDateTime &userActionTime, bool create); TP_QT_NO_EXPORT PendingChannel(const QString &errorName, const QString &errorMessage); struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/CallContentMediaDescription0000644000175200001440000000044212000056607026155 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_CallContentMediaDescription_HEADER_GUARD_ #define _TelepathyQt_CallContentMediaDescription_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/filter.dox0000644000175200001440000000224712000056607022666 0ustar00collabora-develusers00000000000000/* * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 */ /** * \class Tp::Filter * \ingroup utils * \headerfile TelepathyQt/filter.h * * \brief The Filter class provides a base class to be used by specialized * filters such as GenericCapabilityFilter, GenericPropertyFilter, etc. */ telepathy-qt-0.9.3/TelepathyQt/simple-call-observer.cpp0000644000175200001440000003212612000056607025417 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/simple-call-observer.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include #include #include #include #include #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT SimpleCallObserver::Private { Private(SimpleCallObserver *parent, const AccountPtr &account, const QString &contactIdentifier, bool requiresNormalization, CallDirection direction); SimpleCallObserver *parent; AccountPtr account; QString contactIdentifier; CallDirection direction; SimpleObserverPtr observer; }; SimpleCallObserver::Private::Private(SimpleCallObserver *parent, const AccountPtr &account, const QString &contactIdentifier, bool requiresNormalization, CallDirection direction) : parent(parent), account(account), contactIdentifier(contactIdentifier), direction(direction) { debug() << "Creating a new SimpleCallObserver"; ChannelClassSpec channelFilterSMC = ChannelClassSpec::streamedMediaCall(); ChannelClassSpec channelFilterCall = ChannelClassSpec::mediaCall(); if (direction == CallDirectionIncoming) { channelFilterSMC.setRequested(false); channelFilterCall.setRequested(false); } else if (direction == CallDirectionOutgoing) { channelFilterSMC.setRequested(true); channelFilterCall.setRequested(true); } observer = SimpleObserver::create(account, ChannelClassSpecList() << channelFilterSMC << channelFilterCall, contactIdentifier, requiresNormalization, QList()); parent->connect(observer.data(), SIGNAL(newChannels(QList)), SLOT(onNewChannels(QList))); parent->connect(observer.data(), SIGNAL(channelInvalidated(Tp::ChannelPtr,QString,QString)), SLOT(onChannelInvalidated(Tp::ChannelPtr,QString,QString))); } /** * \class SimpleCallObserver * \ingroup utils * \headerfile TelepathyQt/simple-call-observer.h * * \brief The SimpleCallObserver class provides an easy way to track calls * in an account and can be optionally filtered by a contact and/or * call direction. */ /** * Create a new SimpleCallObserver object. * * Events will be signalled for all calls in \a account that respect \a direction. * * \param account The account used to listen to events. * \param direction The direction of the calls used to filter events. * \return An SimpleCallObserverPtr object pointing to the newly created * SimpleCallObserver object. */ SimpleCallObserverPtr SimpleCallObserver::create(const AccountPtr &account, CallDirection direction) { return create(account, QString(), false, direction); } /** * Create a new SimpleCallObserver object. * * Events will be signalled for all calls in \a account established with \a contact and * that respect \a direction. * * \param account The account used to listen to events. * \param contact The contact used to filter events. * \param direction The direction of the calls used to filter events. * \return An SimpleCallObserverPtr object pointing to the newly created * SimpleCallObserver object. */ SimpleCallObserverPtr SimpleCallObserver::create(const AccountPtr &account, const ContactPtr &contact, CallDirection direction) { if (contact) { return create(account, contact->id(), false, direction); } return create(account, QString(), false, direction); } /** * Create a new SimpleCallObserver object. * * Events will be signalled for all calls in \a account established with a contact identified by \a * contactIdentifier and that respect \a direction. * * \param account The account used to listen to events. * \param contactIdentifier The identifier of the contact used to filter events. * \param direction The direction of the calls used to filter events. * \return An SimpleCallObserverPtr object pointing to the newly created * SimpleCallObserver object. */ SimpleCallObserverPtr SimpleCallObserver::create(const AccountPtr &account, const QString &contactIdentifier, CallDirection direction) { return create(account, contactIdentifier, true, direction); } SimpleCallObserverPtr SimpleCallObserver::create(const AccountPtr &account, const QString &contactIdentifier, bool requiresNormalization, CallDirection direction) { return SimpleCallObserverPtr( new SimpleCallObserver(account, contactIdentifier, requiresNormalization, direction)); } /** * Construct a new SimpleCallObserver object. * * \param account The account used to listen to events. * \param contactIdentifier The identifier of the contact used to filter events. * \param requiresNormalization Whether \a contactIdentifier needs to be * normalized. * \param direction The direction of the calls used to filter events. * \return An SimpleCallObserverPtr object pointing to the newly created * SimpleCallObserver object. */ SimpleCallObserver::SimpleCallObserver(const AccountPtr &account, const QString &contactIdentifier, bool requiresNormalization, CallDirection direction) : mPriv(new Private(this, account, contactIdentifier, requiresNormalization, direction)) { } /** * Class destructor. */ SimpleCallObserver::~SimpleCallObserver() { delete mPriv; } /** * Return the account used to listen to events. * * \return A pointer to the Account object. */ AccountPtr SimpleCallObserver::account() const { return mPriv->account; } /** * Return the identifier of the contact used to filter events, or an empty string if none was * provided at construction. * * \return The identifier of the contact. */ QString SimpleCallObserver::contactIdentifier() const { return mPriv->contactIdentifier; } /** * Return the direction of the calls used to filter events. * * \return The direction of the calls as SimpleCallObserver::CallDirection. */ SimpleCallObserver::CallDirection SimpleCallObserver::direction() const { return mPriv->direction; } /** * Return the list of calls currently being observed. * * \return A list of pointers to CallChannel objects. */ QList SimpleCallObserver::calls() const { QList ret; foreach (const ChannelPtr &channel, mPriv->observer->channels()) { CallChannelPtr callChannel = CallChannelPtr::qObjectCast(channel); if (callChannel) { ret << callChannel; } } return ret; } /** * Return the list of streamed media calls currently being observed. * * \deprecated Use calls() instead. Modern clients shouldn't use StreamedMedia channels. * \return A list of pointers to StreamedMediaChannel objects. */ QList SimpleCallObserver::streamedMediaCalls() const { QList ret; foreach (const ChannelPtr &channel, mPriv->observer->channels()) { StreamedMediaChannelPtr smChannel = StreamedMediaChannelPtr::qObjectCast(channel); if (smChannel) { ret << smChannel; } } return ret; } void SimpleCallObserver::onNewChannels(const QList &channels) { foreach (const ChannelPtr &channel, channels) { if (channel->channelType() == TP_QT_IFACE_CHANNEL_TYPE_CALL) { CallChannelPtr callChannel = CallChannelPtr::qObjectCast(channel); if (!callChannel) { warning() << "Channel received to observe is not a subclass of " "CallChannel. ChannelFactory set on this observer's account must " "construct CallChannel subclasses for channels of type Call. " "Ignoring channel"; continue; } emit callStarted(callChannel); } else if (channel->channelType() == TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA) { StreamedMediaChannelPtr smChannel = StreamedMediaChannelPtr::qObjectCast(channel); if (!smChannel) { warning() << "Channel received to observe is not a subclass of " "StreamedMediaChannel. ChannelFactory set on this observer's account must " "construct StreamedMediaChannel subclasses for channels of type StreamedMedia. " "Ignoring channel"; continue; } emit streamedMediaCallStarted(smChannel); } else { warning() << "Channel received to observe is not of type Call or StreamedMedia, " "service confused. Ignoring channel"; continue; } } } void SimpleCallObserver::onChannelInvalidated(const ChannelPtr &channel, const QString &errorName, const QString &errorMessage) { if (channel->channelType() == TP_QT_IFACE_CHANNEL_TYPE_CALL) { CallChannelPtr callChannel = CallChannelPtr::qObjectCast(channel); if (!callChannel) { warning() << "Channel received to observe is not a subclass of " "CallChannel. ChannelFactory set on this observer's account must " "construct CallChannel subclasses for channels of type Call. " "Ignoring channel"; return; } emit callEnded(callChannel, errorName, errorMessage); } else if (channel->channelType() == TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA) { StreamedMediaChannelPtr smChannel = StreamedMediaChannelPtr::qObjectCast(channel); if (!smChannel) { warning() << "Channel received to observe is not a subclass of " "StreamedMediaChannel. ChannelFactory set on this observer's account must " "construct StreamedMediaChannel subclasses for channels of type StreamedMedia. " "Ignoring channel"; return; } emit streamedMediaCallEnded(smChannel, errorName, errorMessage); } else { warning() << "Channel received to observe is not of type Call or StreamedMedia, " "service confused. Ignoring channel"; } } /** * \fn void SimpleCallObserver::callStarted(const Tp::CallChannelPtr &channel) * * Emitted whenever a call that matches this observer's criteria is started. * * \param channel The channel representing the call that started. */ /** * \fn void SimpleCallObserver::callEnded(const Tp::CallChannelPtr &channel, * const QString &errorName, const QString &errorMessage) * * Emitted whenever a call that matches this observer's criteria has ended. * * \param channel The channel representing the call that ended. * \param errorName A D-Bus error name (a string in a subset * of ASCII, prefixed with a reversed domain name). * \param errorMessage A debugging message associated with the error. */ /** * \fn void SimpleCallObserver::streamedMediaCallStarted(const Tp::StreamedMediaChannelPtr &channel) * * Emitted whenever a streamed media call that matches this observer's criteria is * started. * * \param channel The channel representing the streamed media call that started. * \deprecated Use callStarted() instead. Modern clients shouldn't use StreamedMedia channels. */ /** * \fn void SimpleCallObserver::streamedMediaCallEnded(const Tp::StreamedMediaChannelPtr &channel, * const QString &errorName, const QString &errorMessage) * * Emitted whenever a streamed media call that matches this observer's criteria has * ended. * * \param channel The channel representing the streamed media call that ended. * \param errorName A D-Bus error name (a string in a subset * of ASCII, prefixed with a reversed domain name). * \param errorMessage A debugging message associated with the error. * \deprecated Use callEnded() instead. Modern clients shouldn't use StreamedMedia channels. */ } // Tp telepathy-qt-0.9.3/TelepathyQt/ConnectionInterfaceSimplePresenceInterface0000644000175200001440000000045412000056607031206 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ConnectionInterfaceSimplePresenceInterface_HEADER_GUARD_ #define _TelepathyQt_ConnectionInterfaceSimplePresenceInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/RoomListChannel0000644000175200001440000000037512000056607023651 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_RoomListChannel_HEADER_GUARD_ #define _TelepathyQt_RoomListChannel_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/TelepathyQtService.pc.in0000644000175200001440000000122612000056607025377 0ustar00collabora-develusers00000000000000prefix=${CMAKE_INSTALL_PREFIX} exec_prefix=${CMAKE_INSTALL_PREFIX} libdir=${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR} includedir=${CMAKE_INSTALL_PREFIX}/${INCLUDE_INSTALL_DIR} Name: TelepathyQt${QT_VERSION_MAJOR}Service Description: Qt Telepathy Service side bindings Version: ${PACKAGE_VERSION} Requires.private: QtCore >= ${QT_MIN_VERSION}, QtCore < ${QT_MAX_VERSION}, QtDBus >= ${QT_MIN_VERSION}, QtDBus < ${QT_MAX_VERSION}, TelepathyQt${QT_VERSION_MAJOR} = ${PACKAGE_VERSION} Libs: -L${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR} -ltelepathy-qt${QT_VERSION_MAJOR}-service Cflags: -I${CMAKE_INSTALL_PREFIX}/${INCLUDE_INSTALL_DIR}/telepathy-qt${QT_VERSION_MAJOR} telepathy-qt-0.9.3/TelepathyQt/TextChannel0000644000175200001440000000036012000056607023017 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_TextChannel_HEADER_GUARD_ #define _TelepathyQt_TextChannel_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/ConnectionInterfaceServicePointInterface0000644000175200001440000000045012000056607030676 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ConnectionInterfaceServicePointInterface_HEADER_GUARD_ #define _TelepathyQt_ConnectionInterfaceServicePointInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/RefCounted0000644000175200001440000000035412000056607022643 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_RefCounted_HEADER_GUARD_ #define _TelepathyQt_RefCounted_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/dbus-daemon.xml0000644000175200001440000000515312000056607023604 0ustar00collabora-develusers00000000000000 D-Bus Daemon telepathy-qt-0.9.3/TelepathyQt/AbstractAdaptor0000644000175200001440000000037412000056607023665 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_AbstractAdaptor_HEADER_GUARD_ #define _TelepathyQt_AbstractAdaptor_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/account-set.h0000644000175200001440000000446512000056607023267 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_account_set_h_HEADER_GUARD_ #define _TelepathyQt_account_set_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include #include #include namespace Tp { class TP_QT_EXPORT AccountSet : public Object { Q_OBJECT Q_DISABLE_COPY(AccountSet) Q_PROPERTY(AccountManagerPtr accountManager READ accountManager) Q_PROPERTY(AccountFilterConstPtr filter READ filter) Q_PROPERTY(QList accounts READ accounts) public: AccountSet(const AccountManagerPtr &accountManager, const AccountFilterConstPtr &filter); AccountSet(const AccountManagerPtr &accountManager, const QVariantMap &filter); virtual ~AccountSet(); AccountManagerPtr accountManager() const; AccountFilterConstPtr filter() const; QList accounts() const; Q_SIGNALS: void accountAdded(const Tp::AccountPtr &account); void accountRemoved(const Tp::AccountPtr &account); private Q_SLOTS: TP_QT_NO_EXPORT void onNewAccount(const Tp::AccountPtr &account); TP_QT_NO_EXPORT void onAccountRemoved(const Tp::AccountPtr &account); TP_QT_NO_EXPORT void onAccountChanged(const Tp::AccountPtr &account); private: struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/channel-dispatcher.h0000644000175200001440000000221712000056607024567 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_channel_dispatcher_h_HEADER_GUARD_ #define _TelepathyQt_channel_dispatcher_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #endif telepathy-qt-0.9.3/TelepathyQt/ConnectionInterfaceContactListInterface0000644000175200001440000000044612000056607030520 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ConnectionInterfaceContactListInterface_HEADER_GUARD_ #define _TelepathyQt_ConnectionInterfaceContactListInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/Callbacks0000644000175200001440000000035112000056607022461 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_Callbacks_HEADER_GUARD_ #define _TelepathyQt_Callbacks_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/ChannelInterfaceGroupInterface0000644000175200001440000000042112000056607026627 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelInterfaceGroupInterface_HEADER_GUARD_ #define _TelepathyQt_ChannelInterfaceGroupInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/debug-receiver.xml0000644000175200001440000000033312000056607024271 0ustar00collabora-develusers00000000000000 Debug interface telepathy-qt-0.9.3/TelepathyQt/abstract-adaptor.h0000644000175200001440000000307412000056607024270 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_abstract_adaptor_h_HEADER_GUARD_ #define _TelepathyQt_abstract_adaptor_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include class QDBusConnection; namespace Tp { class TP_QT_EXPORT AbstractAdaptor : public QDBusAbstractAdaptor { Q_OBJECT public: AbstractAdaptor(const QDBusConnection &connection, QObject *adaptee, QObject *parent); ~AbstractAdaptor(); QDBusConnection dbusConnection() const; QObject *adaptee() const; private: struct Private; friend struct Private; Private *mPriv; }; } #endif telepathy-qt-0.9.3/TelepathyQt/dbus-proxy.h0000644000175200001440000000654012000056607023152 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2010 Collabora Ltd. * @copyright Copyright (C) 2008-2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_dbus_proxy_h_HEADER_GUARD_ #define _TelepathyQt_dbus_proxy_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include class QDBusConnection; class QDBusError; namespace Tp { class TestBackdoors; class TP_QT_EXPORT DBusProxy : public Object, public ReadyObject { Q_OBJECT Q_DISABLE_COPY(DBusProxy) public: DBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore); virtual ~DBusProxy(); QDBusConnection dbusConnection() const; QString busName() const; QString objectPath() const; bool isValid() const; QString invalidationReason() const; QString invalidationMessage() const; Q_SIGNALS: void invalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage); protected: void setBusName(const QString &busName); void invalidate(const QString &reason, const QString &message); void invalidate(const QDBusError &error); private Q_SLOTS: TP_QT_NO_EXPORT void emitInvalidated(); private: friend class TestBackdoors; struct Private; friend struct Private; Private *mPriv; }; class TP_QT_EXPORT StatelessDBusProxy : public DBusProxy { Q_OBJECT Q_DISABLE_COPY(StatelessDBusProxy) public: StatelessDBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore); virtual ~StatelessDBusProxy(); private: struct Private; friend struct Private; Private *mPriv; }; class TP_QT_EXPORT StatefulDBusProxy : public DBusProxy { Q_OBJECT Q_DISABLE_COPY(StatefulDBusProxy) public: StatefulDBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath, const Feature &featureCore); virtual ~StatefulDBusProxy(); static QString uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique); static QString uniqueNameFrom(const QDBusConnection &bus, const QString &wellKnownOrUnique, QString &error, QString &message); private Q_SLOTS: TP_QT_NO_EXPORT void onServiceOwnerChanged(const QString &name, const QString &oldOwner, const QString &newOwner); private: struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/OutgoingStreamTubeChannel0000644000175200001440000000043412000056607025664 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_OutgoingStreamTubeChannel_HEADER_GUARD_ #define _TelepathyQt_OutgoingStreamTubeChannel_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/ContactSearchChannel0000644000175200001440000000041412000056607024614 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ContactSearchChannel_HEADER_GUARD_ #define _TelepathyQt_ContactSearchChannel_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/examples.dox0000644000175200001440000001026012000056607023211 0ustar00collabora-develusers00000000000000/* * This file is part of TelepathyQt * * @copyright Copyright (C) 2008 Collabora Ltd. * @copyright 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 */ /** * \page accounts_example Accounts Example * * \li \subpage accounts_example_account_item_cpp * \li \subpage accounts_example_account_item_h * \li \subpage accounts_example_accounts_window_cpp * \li \subpage accounts_example_accounts_window_h * \li \subpage accounts_example_main */ /** * \page accounts_example_account_item_cpp accounts/account-item.cpp * \include examples/accounts/account-item.cpp */ /** * \page accounts_example_account_item_h accounts/account-item.h * \include examples/accounts/account-item.h */ /** * \page accounts_example_accounts_window_cpp accounts/accounts-window.cpp * \include examples/accounts/accounts-window.cpp */ /** * \page accounts_example_accounts_window_h accounts/accounts-window.h * \include examples/accounts/accounts-window.h */ /** * \page accounts_example_main accounts/main.cpp * \include examples/accounts/main.cpp */ /** * \page contact_messenger_example Contact Messenger Example * * \li \subpage contact_messenger_example_sender_cpp * \li \subpage contact_messenger_example_sender_h */ /** * \page contact_messenger_example_sender_cpp contact-messenger/sender.cpp * \include examples/contact-messenger/sender.cpp */ /** * \page contact_messenger_example_sender_h contact-messenger/sender.h * \include examples/contact-messenger/sender.h */ /** * \page protocols_example Protocols Example * * \li \subpage protocols_example_main * \li \subpage protocols_example_cm_wrapper_cpp * \li \subpage protocols_example_cm_wrapper_h * \li \subpage protocols_example_protocols_cpp * \li \subpage protocols_example_protocols_h */ /** * \page protocols_example_main protocols/main.cpp * \include examples/protocols/main.cpp */ /** * \page protocols_example_cm_wrapper_cpp protocols/cm-wrapper.cpp * \include examples/protocols/cm-wrapper.cpp */ /** * \page protocols_example_cm_wrapper_h protocols/cm-wrapper.h * \include examples/protocols/cm-wrapper.h */ /** * \page protocols_example_protocols_cpp protocols/protocols.cpp * \include examples/protocols/protocols.cpp */ /** * \page protocols_example_protocols_h protocols/protocols.h * \include examples/protocols/protocols.h */ /** * \page roster_example Roster Example * * \li \subpage roster_example_main * \li \subpage roster_example_roster_item_cpp * \li \subpage roster_example_roster_item_h * \li \subpage roster_example_roster_widget_cpp * \li \subpage roster_example_roster_widget_h * \li \subpage roster_example_roster_window_cpp * \li \subpage roster_example_roster_window_h */ /** * \page roster_example_main roster/main.cpp * \include examples/roster/main.cpp */ /** * \page roster_example_roster_item_cpp roster/roster-item.cpp * \include examples/roster/roster-item.cpp */ /** * \page roster_example_roster_item_h roster/roster-item.h * \include examples/roster/roster-item.h */ /** * \page roster_example_roster_widget_cpp roster/roster-widget.cpp * \include examples/roster/roster-widget.cpp */ /** * \page roster_example_roster_widget_h roster/roster-widget.h * \include examples/roster/roster-widget.h */ /** * \page roster_example_roster_window_cpp roster/roster-window.cpp * \include examples/roster/roster-window.cpp */ /** * \page roster_example_roster_window_h roster/roster-window.h * \include examples/roster/roster-window.h */ telepathy-qt-0.9.3/TelepathyQt/account-filter.h0000644000175200001440000000226112000056607023751 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_account_filter_h_HEADER_GUARD_ #define _TelepathyQt_account_filter_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include namespace Tp { typedef Filter AccountFilter; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/AbstractProtocolInterface0000644000175200001440000000041512000056607025711 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_AbstractProtocolInterface_HEADER_GUARD_ #define _TelepathyQt_AbstractProtocolInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/avatar.h0000644000175200001440000000451712000056607022316 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010-2011 Collabora Ltd. * @copyright Copyright (C) 2010-2011 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_avatar_h_HEADER_GUARD_ #define _TelepathyQt_avatar_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include #include namespace Tp { struct TP_QT_EXPORT AvatarData { public: inline AvatarData(const QString &fileName, const QString &mimeType) : fileName(fileName), mimeType(mimeType) {} inline AvatarData() {} QString fileName; QString mimeType; }; class TP_QT_EXPORT AvatarSpec { public: AvatarSpec(); AvatarSpec(const QStringList &supportedMimeTypes, uint minHeight, uint maxHeight, uint recommendedHeight, uint minWidth, uint maxWidth, uint recommendedWidth, uint maxBytes); AvatarSpec(const AvatarSpec &other); ~AvatarSpec(); bool isValid() const { return mPriv.constData() != 0; } AvatarSpec &operator=(const AvatarSpec &other); QStringList supportedMimeTypes() const; uint minimumHeight() const; uint maximumHeight() const; uint recommendedHeight() const; uint minimumWidth() const; uint maximumWidth() const; uint recommendedWidth() const; uint maximumBytes() const; private: struct Private; friend struct Private; QSharedDataPointer mPriv; }; } // Tp Q_DECLARE_METATYPE(Tp::AvatarData); Q_DECLARE_METATYPE(Tp::AvatarSpec); #endif telepathy-qt-0.9.3/TelepathyQt/pending-stream-tube-connection.h0000644000175200001440000000477212000056607027052 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @license LGPL 2.1 * * 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 _TelepathyQt_pending_stream_tube_connection_h_HEADER_GUARD_ #define _TelepathyQt_pending_stream_tube_connection_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include class QHostAddress; namespace Tp { class PendingVariant; class IncomingStreamTubeChannel; class TP_QT_EXPORT PendingStreamTubeConnection : public PendingOperation { Q_OBJECT Q_DISABLE_COPY(PendingStreamTubeConnection) public: virtual ~PendingStreamTubeConnection(); SocketAddressType addressType() const; QPair ipAddress() const; QString localAddress() const; bool requiresCredentials() const; uchar credentialByte() const; private Q_SLOTS: TP_QT_NO_EXPORT void onChannelInvalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage); TP_QT_NO_EXPORT void onAcceptFinished(Tp::PendingOperation *op); TP_QT_NO_EXPORT void onTubeStateChanged(Tp::TubeChannelState state); private: TP_QT_NO_EXPORT PendingStreamTubeConnection(PendingVariant *acceptOperation, SocketAddressType type, bool requiresCredentials, uchar credentialByte, const IncomingStreamTubeChannelPtr &channel); TP_QT_NO_EXPORT PendingStreamTubeConnection( const QString &errorName, const QString &errorMessage, const IncomingStreamTubeChannelPtr &channel); struct Private; friend class IncomingStreamTubeChannel; friend struct Private; Private *mPriv; }; } #endif // TP_PENDING_STREAM_TUBE_CONNECTION_H telepathy-qt-0.9.3/TelepathyQt/ChannelClassSpec0000644000175200001440000000040012000056607023746 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelClassSpec_HEADER_GUARD_ #define _TelepathyQt_ChannelClassSpec_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/channel-class-spec.cpp0000644000175200001440000005002512000056607025031 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/future-constants.h" #include "TelepathyQt/debug-internal.h" namespace Tp { struct TP_QT_NO_EXPORT ChannelClassSpec::Private : public QSharedData { QVariantMap props; }; /** * \class ChannelClassSpec * \ingroup wrappers * \headerfile TelepathyQt/channel-class-spec.h * * \brief The ChannelClassSpec class represents a Telepathy channel class. */ ChannelClassSpec::ChannelClassSpec() { } ChannelClassSpec::ChannelClassSpec(const ChannelClass &cc) : mPriv(new Private) { foreach (QString key, cc.keys()) { setProperty(key, cc.value(key).variant()); } } ChannelClassSpec::ChannelClassSpec(const QVariantMap &props) : mPriv(new Private) { setChannelType(qdbus_cast( props.value(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType")))); setTargetHandleType((HandleType) qdbus_cast( props.value(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType")))); foreach (QString propName, props.keys()) { setProperty(propName, props.value(propName)); } } ChannelClassSpec::ChannelClassSpec(const QString &channelType, HandleType targetHandleType, const QVariantMap &otherProperties) : mPriv(new Private) { setChannelType(channelType); setTargetHandleType(targetHandleType); foreach (QString key, otherProperties.keys()) { setProperty(key, otherProperties.value(key)); } } ChannelClassSpec::ChannelClassSpec(const QString &channelType, HandleType targetHandleType, bool requested, const QVariantMap &otherProperties) : mPriv(new Private) { setChannelType(channelType); setTargetHandleType(targetHandleType); setRequested(requested); foreach (QString key, otherProperties.keys()) { setProperty(key, otherProperties.value(key)); } } ChannelClassSpec::ChannelClassSpec(const ChannelClassSpec &other, const QVariantMap &additionalProperties) : mPriv(other.mPriv) { if (!additionalProperties.isEmpty()) { foreach (QString key, additionalProperties.keys()) { setProperty(key, additionalProperties.value(key)); } } } ChannelClassSpec::~ChannelClassSpec() { } bool ChannelClassSpec::isValid() const { return mPriv.constData() != 0 && !(qdbus_cast( mPriv->props.value(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"))) .isEmpty()) && mPriv->props.contains(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType")); } ChannelClassSpec &ChannelClassSpec::operator=(const ChannelClassSpec &other) { if (this == &other) { return *this; } this->mPriv = other.mPriv; return *this; } bool ChannelClassSpec::isSubsetOf(const ChannelClassSpec &other) const { if (!mPriv) { // Invalid instances have no properties - hence they're subset of anything return true; } foreach (QString propName, mPriv->props.keys()) { if (!other.hasProperty(propName)) { return false; } else if (property(propName) != other.property(propName)) { return false; } } // other had all of the properties we have and they all had the same values return true; } bool ChannelClassSpec::matches(const QVariantMap &immutableProperties) const { // We construct a ChannelClassSpec for comparison so the StreamedMedia props are normalized // consistently etc return this->isSubsetOf(ChannelClassSpec(immutableProperties)); } bool ChannelClassSpec::hasProperty(const QString &qualifiedName) const { return mPriv.constData() != 0 ? mPriv->props.contains(qualifiedName) : false; } QVariant ChannelClassSpec::property(const QString &qualifiedName) const { return mPriv.constData() != 0 ? mPriv->props.value(qualifiedName) : QVariant(); } void ChannelClassSpec::setProperty(const QString &qualifiedName, const QVariant &value) { if (mPriv.constData() == 0) { mPriv = new Private; } mPriv->props.insert(qualifiedName, value); } void ChannelClassSpec::unsetProperty(const QString &qualifiedName) { if (mPriv.constData() == 0) { // No properties set for sure, so don't have to unset any return; } mPriv->props.remove(qualifiedName); } QVariantMap ChannelClassSpec::allProperties() const { return mPriv.constData() != 0 ? mPriv->props : QVariantMap(); } ChannelClass ChannelClassSpec::bareClass() const { ChannelClass cc; if (!isValid()) { warning() << "Tried to convert an invalid ChannelClassSpec to a ChannelClass"; return ChannelClass(); } QVariantMap props = mPriv->props; foreach (QString propName, props.keys()) { QVariant value = props.value(propName); cc.insert(propName, QDBusVariant(value)); } return cc; } ChannelClassSpec ChannelClassSpec::textChat(const QVariantMap &additionalProperties) { static ChannelClassSpec spec; if (!spec.mPriv.constData()) { spec = ChannelClassSpec(TP_QT_IFACE_CHANNEL_TYPE_TEXT, HandleTypeContact); } if (additionalProperties.isEmpty()) { return spec; } else { return ChannelClassSpec(spec, additionalProperties); } } ChannelClassSpec ChannelClassSpec::textChatroom(const QVariantMap &additionalProperties) { static ChannelClassSpec spec; if (!spec.mPriv.constData()) { spec = ChannelClassSpec(TP_QT_IFACE_CHANNEL_TYPE_TEXT, HandleTypeRoom); } if (additionalProperties.isEmpty()) { return spec; } else { return ChannelClassSpec(spec, additionalProperties); } } ChannelClassSpec ChannelClassSpec::unnamedTextChat(const QVariantMap &additionalProperties) { static ChannelClassSpec spec; if (!spec.mPriv.constData()) { spec = ChannelClassSpec(TP_QT_IFACE_CHANNEL_TYPE_TEXT, HandleTypeNone); } if (additionalProperties.isEmpty()) { return spec; } else { return ChannelClassSpec(spec, additionalProperties); } } ChannelClassSpec ChannelClassSpec::mediaCall(const QVariantMap &additionalProperties) { static ChannelClassSpec spec; if (!spec.isValid()) { spec = ChannelClassSpec(TP_QT_IFACE_CHANNEL_TYPE_CALL, HandleTypeContact); } if (additionalProperties.isEmpty()) { return spec; } else { return ChannelClassSpec(spec, additionalProperties); } } ChannelClassSpec ChannelClassSpec::audioCall(const QVariantMap &additionalProperties) { static ChannelClassSpec spec; if (!spec.isValid()) { spec = ChannelClassSpec(TP_QT_IFACE_CHANNEL_TYPE_CALL, HandleTypeContact); spec.setCallInitialAudioFlag(); } if (additionalProperties.isEmpty()) { return spec; } else { return ChannelClassSpec(spec, additionalProperties); } } ChannelClassSpec ChannelClassSpec::videoCall(const QVariantMap &additionalProperties) { static ChannelClassSpec spec; if (!spec.isValid()) { spec = ChannelClassSpec(TP_QT_IFACE_CHANNEL_TYPE_CALL, HandleTypeContact); spec.setCallInitialVideoFlag(); } if (additionalProperties.isEmpty()) { return spec; } else { return ChannelClassSpec(spec, additionalProperties); } } ChannelClassSpec ChannelClassSpec::videoCallWithAudio(const QVariantMap &additionalProperties) { static ChannelClassSpec spec; if (!spec.isValid()) { spec = ChannelClassSpec(TP_QT_IFACE_CHANNEL_TYPE_CALL, HandleTypeContact); spec.setCallInitialAudioFlag(); spec.setCallInitialVideoFlag(); } if (additionalProperties.isEmpty()) { return spec; } else { return ChannelClassSpec(spec, additionalProperties); } } ChannelClassSpec ChannelClassSpec::streamedMediaCall(const QVariantMap &additionalProperties) { static ChannelClassSpec spec; if (!spec.mPriv.constData()) { spec = ChannelClassSpec(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA, HandleTypeContact); } if (additionalProperties.isEmpty()) { return spec; } else { return ChannelClassSpec(spec, additionalProperties); } } ChannelClassSpec ChannelClassSpec::streamedMediaAudioCall(const QVariantMap &additionalProperties) { static ChannelClassSpec spec; if (!spec.mPriv.constData()) { spec = ChannelClassSpec(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA, HandleTypeContact); spec.setStreamedMediaInitialAudioFlag(); } if (additionalProperties.isEmpty()) { return spec; } else { return ChannelClassSpec(spec, additionalProperties); } } ChannelClassSpec ChannelClassSpec::streamedMediaVideoCall(const QVariantMap &additionalProperties) { static ChannelClassSpec spec; if (!spec.mPriv.constData()) { spec = ChannelClassSpec(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA, HandleTypeContact); spec.setStreamedMediaInitialVideoFlag(); } if (additionalProperties.isEmpty()) { return spec; } else { return ChannelClassSpec(spec, additionalProperties); } } ChannelClassSpec ChannelClassSpec::streamedMediaVideoCallWithAudio(const QVariantMap &additionalProperties) { static ChannelClassSpec spec; if (!spec.mPriv.constData()) { spec = ChannelClassSpec(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA, HandleTypeContact); spec.setStreamedMediaInitialAudioFlag(); spec.setStreamedMediaInitialVideoFlag(); } if (additionalProperties.isEmpty()) { return spec; } else { return ChannelClassSpec(spec, additionalProperties); } } ChannelClassSpec ChannelClassSpec::unnamedStreamedMediaCall(const QVariantMap &additionalProperties) { static ChannelClassSpec spec; if (!spec.mPriv.constData()) { spec = ChannelClassSpec(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA, HandleTypeNone); } if (additionalProperties.isEmpty()) { return spec; } else { return ChannelClassSpec(spec, additionalProperties); } } ChannelClassSpec ChannelClassSpec::unnamedStreamedMediaAudioCall(const QVariantMap &additionalProperties) { static ChannelClassSpec spec; if (!spec.mPriv.constData()) { spec = ChannelClassSpec(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA, HandleTypeNone); spec.setStreamedMediaInitialAudioFlag(); } if (additionalProperties.isEmpty()) { return spec; } else { return ChannelClassSpec(spec, additionalProperties); } } ChannelClassSpec ChannelClassSpec::unnamedStreamedMediaVideoCall(const QVariantMap &additionalProperties) { static ChannelClassSpec spec; if (!spec.mPriv.constData()) { spec = ChannelClassSpec(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA, HandleTypeNone); spec.setStreamedMediaInitialVideoFlag(); } if (additionalProperties.isEmpty()) { return spec; } else { return ChannelClassSpec(spec, additionalProperties); } } ChannelClassSpec ChannelClassSpec::unnamedStreamedMediaVideoCallWithAudio(const QVariantMap &additionalProperties) { static ChannelClassSpec spec; if (!spec.mPriv.constData()) { spec = ChannelClassSpec(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA, HandleTypeNone); spec.setStreamedMediaInitialAudioFlag(); spec.setStreamedMediaInitialVideoFlag(); } if (additionalProperties.isEmpty()) { return spec; } else { return ChannelClassSpec(spec, additionalProperties); } } Tp::ChannelClassSpec ChannelClassSpec::serverAuthentication(const QVariantMap &additionalProperties) { static Tp::ChannelClassSpec spec; if (!spec.mPriv.constData()) { spec = ChannelClassSpec(TP_QT_IFACE_CHANNEL_TYPE_SERVER_AUTHENTICATION, HandleTypeNone); } if (additionalProperties.isEmpty()) { return spec; } else { return ChannelClassSpec(spec, additionalProperties); } } ChannelClassSpec ChannelClassSpec::roomList(const QVariantMap &additionalProperties) { static ChannelClassSpec spec; if (!spec.mPriv.constData()) { spec = ChannelClassSpec(TP_QT_IFACE_CHANNEL_TYPE_ROOM_LIST, HandleTypeNone); } if (additionalProperties.isEmpty()) { return spec; } else { return ChannelClassSpec(spec, additionalProperties); } } ChannelClassSpec ChannelClassSpec::outgoingFileTransfer(const QVariantMap &additionalProperties) { static ChannelClassSpec spec; if (!spec.mPriv.constData()) { spec = ChannelClassSpec(TP_QT_IFACE_CHANNEL_TYPE_FILE_TRANSFER, HandleTypeContact, true); } if (additionalProperties.isEmpty()) { return spec; } else { return ChannelClassSpec(spec, additionalProperties); } } ChannelClassSpec ChannelClassSpec::incomingFileTransfer(const QVariantMap &additionalProperties) { static ChannelClassSpec spec; if (!spec.mPriv.constData()) { spec = ChannelClassSpec(TP_QT_IFACE_CHANNEL_TYPE_FILE_TRANSFER, HandleTypeContact, false); } if (additionalProperties.isEmpty()) { return spec; } else { return ChannelClassSpec(spec, additionalProperties); } } ChannelClassSpec ChannelClassSpec::outgoingStreamTube(const QString &service, const QVariantMap &additionalProperties) { static ChannelClassSpec spec; if (!spec.mPriv.constData()) { spec = ChannelClassSpec(TP_QT_IFACE_CHANNEL_TYPE_STREAM_TUBE, HandleTypeContact, true); } QVariantMap props = additionalProperties; if (!service.isEmpty()) { props.insert(TP_QT_IFACE_CHANNEL_TYPE_STREAM_TUBE + QLatin1String(".Service"), service); } if (props.isEmpty()) { return spec; } else { return ChannelClassSpec(spec, props); } } ChannelClassSpec ChannelClassSpec::incomingStreamTube(const QString &service, const QVariantMap &additionalProperties) { static ChannelClassSpec spec; if (!spec.mPriv.constData()) { spec = ChannelClassSpec(TP_QT_IFACE_CHANNEL_TYPE_STREAM_TUBE, HandleTypeContact, false); } QVariantMap props = additionalProperties; if (!service.isEmpty()) { props.insert(TP_QT_IFACE_CHANNEL_TYPE_STREAM_TUBE + QLatin1String(".Service"), service); } if (props.isEmpty()) { return spec; } else { return ChannelClassSpec(spec, props); } } ChannelClassSpec ChannelClassSpec::outgoingRoomStreamTube(const QString &service, const QVariantMap &additionalProperties) { static ChannelClassSpec spec; if (!spec.mPriv.constData()) { spec = ChannelClassSpec(TP_QT_IFACE_CHANNEL_TYPE_STREAM_TUBE, HandleTypeRoom, true); } QVariantMap props = additionalProperties; if (!service.isEmpty()) { props.insert(TP_QT_IFACE_CHANNEL_TYPE_STREAM_TUBE + QLatin1String(".Service"), service); } if (props.isEmpty()) { return spec; } else { return ChannelClassSpec(spec, props); } } ChannelClassSpec ChannelClassSpec::incomingRoomStreamTube(const QString &service, const QVariantMap &additionalProperties) { static ChannelClassSpec spec; if (!spec.mPriv.constData()) { spec = ChannelClassSpec(TP_QT_IFACE_CHANNEL_TYPE_STREAM_TUBE, HandleTypeRoom, false); } QVariantMap props = additionalProperties; if (!service.isEmpty()) { props.insert(TP_QT_IFACE_CHANNEL_TYPE_STREAM_TUBE + QLatin1String(".Service"), service); } if (props.isEmpty()) { return spec; } else { return ChannelClassSpec(spec, props); } } ChannelClassSpec ChannelClassSpec::outgoingDBusTube(const QString &serviceName, const QVariantMap &additionalProperties) { static ChannelClassSpec spec; if (!spec.isValid()) { spec = ChannelClassSpec(TP_QT_IFACE_CHANNEL_TYPE_DBUS_TUBE, HandleTypeContact, true); } if (!serviceName.isEmpty()) { spec.setProperty(TP_QT_IFACE_CHANNEL_TYPE_DBUS_TUBE + QLatin1String(".ServiceName"), serviceName); } if (additionalProperties.isEmpty()) { return spec; } else { return ChannelClassSpec(spec, additionalProperties); } } ChannelClassSpec ChannelClassSpec::incomingDBusTube(const QString &serviceName, const QVariantMap &additionalProperties) { static ChannelClassSpec spec; if (!spec.isValid()) { spec = ChannelClassSpec(TP_QT_IFACE_CHANNEL_TYPE_DBUS_TUBE, HandleTypeContact, false); } if (!serviceName.isEmpty()) { spec.setProperty(TP_QT_IFACE_CHANNEL_TYPE_DBUS_TUBE + QLatin1String(".ServiceName"), serviceName); } if (additionalProperties.isEmpty()) { return spec; } else { return ChannelClassSpec(spec, additionalProperties); } } ChannelClassSpec ChannelClassSpec::outgoingRoomDBusTube(const QString &serviceName, const QVariantMap &additionalProperties) { static ChannelClassSpec spec; if (!spec.mPriv.constData()) { spec = ChannelClassSpec(TP_QT_IFACE_CHANNEL_TYPE_DBUS_TUBE, HandleTypeRoom, true); } QVariantMap props = additionalProperties; if (!serviceName.isEmpty()) { props.insert(TP_QT_IFACE_CHANNEL_TYPE_DBUS_TUBE + QLatin1String(".ServiceName"), serviceName); } if (props.isEmpty()) { return spec; } else { return ChannelClassSpec(spec, props); } } ChannelClassSpec ChannelClassSpec::incomingRoomDBusTube(const QString &serviceName, const QVariantMap &additionalProperties) { static ChannelClassSpec spec; if (!spec.mPriv.constData()) { spec = ChannelClassSpec(TP_QT_IFACE_CHANNEL_TYPE_DBUS_TUBE, HandleTypeRoom, false); } QVariantMap props = additionalProperties; if (!serviceName.isEmpty()) { props.insert(TP_QT_IFACE_CHANNEL_TYPE_DBUS_TUBE + QLatin1String(".ServiceName"), serviceName); } if (props.isEmpty()) { return spec; } else { return ChannelClassSpec(spec, props); } } ChannelClassSpec ChannelClassSpec::contactSearch(const QVariantMap &additionalProperties) { static ChannelClassSpec spec; if (!spec.mPriv.constData()) { spec = ChannelClassSpec(TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH, HandleTypeNone); } if (additionalProperties.isEmpty()) { return spec; } else { return ChannelClassSpec(spec, additionalProperties); } } /** * \class ChannelClassSpecList * \ingroup wrappers * \headerfile TelepathyQt/channel-class-spec.h * * \brief The ChannelClassSpecList class represents a list of ChannelClassSpec. */ } // Tp telepathy-qt-0.9.3/TelepathyQt/call-content.h0000644000175200001440000000641012000056607023415 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010-2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_call_content_h_HEADER_GUARD_ #define _TelepathyQt_call_content_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include namespace Tp { typedef QList CallContents; class TP_QT_EXPORT CallContent : public StatefulDBusProxy, public OptionalInterfaceFactory { Q_OBJECT Q_DISABLE_COPY(CallContent) public: ~CallContent(); CallChannelPtr channel() const; QString name() const; MediaStreamType type() const; CallContentDisposition disposition() const; CallStreams streams() const; PendingOperation *remove(); bool supportsDTMF() const; PendingOperation *startDTMFTone(DTMFEvent event); PendingOperation *stopDTMFTone(); Q_SIGNALS: void streamAdded(const Tp::CallStreamPtr &stream); void streamRemoved(const Tp::CallStreamPtr &stream, const Tp::CallStateReason &reason); private Q_SLOTS: TP_QT_NO_EXPORT void gotMainProperties(Tp::PendingOperation *op); TP_QT_NO_EXPORT void onStreamsAdded(const Tp::ObjectPathList &streamPath); TP_QT_NO_EXPORT void onStreamsRemoved(const Tp::ObjectPathList &streamPath, const Tp::CallStateReason &reason); TP_QT_NO_EXPORT void onStreamReady(Tp::PendingOperation *op); private: friend class CallChannel; friend class PendingCallContent; TP_QT_NO_EXPORT static const Feature FeatureCore; TP_QT_NO_EXPORT CallContent(const CallChannelPtr &channel, const QDBusObjectPath &contentPath); struct Private; friend struct Private; Private *mPriv; }; class TP_QT_EXPORT PendingCallContent : public PendingOperation { Q_OBJECT Q_DISABLE_COPY(PendingCallContent) public: ~PendingCallContent(); CallContentPtr content() const; private Q_SLOTS: TP_QT_NO_EXPORT void gotContent(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void onContentReady(Tp::PendingOperation *op); TP_QT_NO_EXPORT void onContentRemoved(const Tp::CallContentPtr &content); private: friend class CallChannel; TP_QT_NO_EXPORT PendingCallContent(const CallChannelPtr &channel, const QString &contentName, MediaStreamType type, MediaStreamDirection direction); struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/ContactManager0000644000175200001440000000037112000056607023472 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ContactManager_HEADER_GUARD_ #define _TelepathyQt_ContactManager_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/future-misc.xml0000644000175200001440000000031412000056607023643 0ustar00collabora-develusers00000000000000 Miscellaneous extensions from the future telepathy-qt-0.9.3/TelepathyQt/simple-stream-tube-handler.cpp0000644000175200001440000002066112000056607026523 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include "TelepathyQt/simple-stream-tube-handler.h" #include "TelepathyQt/_gen/simple-stream-tube-handler.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include #include namespace Tp { namespace { ChannelClassSpecList buildFilter(const QStringList &p2pServices, const QStringList &roomServices, bool requested) { ChannelClassSpecList filter; // Convert to QSet to weed out duplicates foreach (const QString &service, p2pServices.toSet()) { filter.append(requested ? ChannelClassSpec::outgoingStreamTube(service) : ChannelClassSpec::incomingStreamTube(service)); } // Convert to QSet to weed out duplicates foreach (const QString &service, roomServices.toSet()) { filter.append(requested ? ChannelClassSpec::outgoingRoomStreamTube(service) : ChannelClassSpec::incomingRoomStreamTube(service)); } return filter; } } SharedPtr SimpleStreamTubeHandler::create( const QStringList &p2pServices, const QStringList &roomServices, bool requested, bool monitorConnections, bool bypassApproval) { return SharedPtr( new SimpleStreamTubeHandler( p2pServices, roomServices, requested, monitorConnections, bypassApproval)); } SimpleStreamTubeHandler::SimpleStreamTubeHandler( const QStringList &p2pServices, const QStringList &roomServices, bool requested, bool monitorConnections, bool bypassApproval) : AbstractClient(), AbstractClientHandler(buildFilter(p2pServices, roomServices, requested)), mMonitorConnections(monitorConnections), mBypassApproval(bypassApproval) { } SimpleStreamTubeHandler::~SimpleStreamTubeHandler() { if (!mTubes.empty()) { debug() << "~SSTubeHandler(): Closing" << mTubes.size() << "leftover tubes"; foreach (const StreamTubeChannelPtr &tube, mTubes.keys()) { tube->requestClose(); } } } void SimpleStreamTubeHandler::handleChannels( const MethodInvocationContextPtr<> &context, const AccountPtr &account, const ConnectionPtr &connection, const QList &channels, const QList &requestsSatisfied, const QDateTime &userActionTime, const HandlerInfo &handlerInfo) { debug() << "SimpleStreamTubeHandler::handleChannels() invoked for " << channels.size() << "channels on account" << account->objectPath(); SharedPtr invocation(new InvocationData()); QList readyOps; foreach (const ChannelPtr &chan, channels) { StreamTubeChannelPtr tube = StreamTubeChannelPtr::qObjectCast(chan); if (!tube) { // TODO: if Channel ever starts utilizing its immutable props for the immutable // accessors, use Channel::channelType() here const QString channelType = chan->immutableProperties()[TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType")].toString(); if (channelType != TP_QT_IFACE_CHANNEL_TYPE_STREAM_TUBE) { debug() << "We got a non-StreamTube channel" << chan->objectPath() << "of type" << channelType << ", ignoring"; } else { warning() << "The channel factory used for a simple StreamTube handler must" << "construct StreamTubeChannel subclasses for stream tubes"; } continue; } Features features = StreamTubeChannel::FeatureCore; if (mMonitorConnections) { features.insert(StreamTubeChannel::FeatureConnectionMonitoring); } readyOps.append(tube->becomeReady(features)); invocation->tubes.append(tube); } invocation->ctx = context; invocation->acc = account; invocation->time = userActionTime; if (!requestsSatisfied.isEmpty()) { invocation->hints = requestsSatisfied.first()->hints(); } mInvocations.append(invocation); if (invocation->tubes.isEmpty()) { warning() << "SSTH::HandleChannels got no suitable channels, admitting we're Confused"; invocation->readyOp = 0; invocation->error = TP_QT_ERROR_CONFUSED; invocation->message = QLatin1String("Got no suitable channels"); onReadyOpFinished(0); } else { invocation->readyOp = new PendingComposite(readyOps, SharedPtr(this)); connect(invocation->readyOp, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onReadyOpFinished(Tp::PendingOperation*))); } } void SimpleStreamTubeHandler::onReadyOpFinished(Tp::PendingOperation *op) { Q_ASSERT(!mInvocations.isEmpty()); Q_ASSERT(!op || op->isFinished()); for (QLinkedList >::iterator i = mInvocations.begin(); op != 0 && i != mInvocations.end(); ++i) { if ((*i)->readyOp != op) { continue; } (*i)->readyOp = 0; if (op->isError()) { warning() << "Preparing proxies for SSTubeHandler failed with" << op->errorName() << op->errorMessage(); (*i)->error = op->errorName(); (*i)->message = op->errorMessage(); } break; } while (!mInvocations.isEmpty() && !mInvocations.first()->readyOp) { SharedPtr invocation = mInvocations.takeFirst(); if (!invocation->error.isEmpty()) { // We guarantee that the proxies were ready - so we can't invoke the client if they // weren't made ready successfully. Fix the introspection code if this happens :) invocation->ctx->setFinishedWithError(invocation->error, invocation->message); continue; } debug() << "Emitting SSTubeHandler::invokedForTube for" << invocation->tubes.size() << "tubes"; foreach (const StreamTubeChannelPtr &tube, invocation->tubes) { if (!tube->isValid()) { debug() << "Skipping already invalidated tube" << tube->objectPath(); continue; } if (!mTubes.contains(tube)) { connect(tube.data(), SIGNAL(invalidated(Tp::DBusProxy*,QString,QString)), SLOT(onTubeInvalidated(Tp::DBusProxy*,QString,QString))); mTubes.insert(tube, invocation->acc); } emit invokedForTube( invocation->acc, tube, invocation->time, invocation->hints); } invocation->ctx->setFinished(); } } void SimpleStreamTubeHandler::onTubeInvalidated(DBusProxy *proxy, const QString &errorName, const QString &errorMessage) { StreamTubeChannelPtr tube(qobject_cast(proxy)); Q_ASSERT(!tube.isNull()); Q_ASSERT(mTubes.contains(tube)); debug() << "Tube" << tube->objectPath() << "invalidated - " << errorName << ':' << errorMessage; AccountPtr acc = mTubes.value(tube); mTubes.remove(tube); emit tubeInvalidated( acc, tube, errorName, errorMessage); } } // Tp telepathy-qt-0.9.3/TelepathyQt/ContactMessenger0000644000175200001440000000037712000056607024056 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ContactMessenger_HEADER_GUARD_ #define _TelepathyQt_ContactMessenger_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/profile-manager.h0000644000175200001440000000423112000056607024101 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_profile_manager_h_HEADER_GUARD_ #define _TelepathyQt_profile_manager_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include #include #include namespace Tp { class PendingOperation; class TP_QT_EXPORT ProfileManager : public Object, public ReadyObject { Q_OBJECT Q_DISABLE_COPY(ProfileManager); public: static const Feature FeatureCore; static const Feature FeatureFakeProfiles; static ProfileManagerPtr create(const QDBusConnection &bus = QDBusConnection::sessionBus()); ~ProfileManager(); QList profiles() const; QList profilesForCM(const QString &cmName) const; QList profilesForProtocol(const QString &protocolName) const; ProfilePtr profileForService(const QString &serviceName) const; private Q_SLOTS: TP_QT_NO_EXPORT void onCmNamesRetrieved(Tp::PendingOperation *op); TP_QT_NO_EXPORT void onCMsReady(Tp::PendingOperation *op); private: ProfileManager(const QDBusConnection &bus); struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/shared-ptr.dox0000644000175200001440000001252212000056607023447 0ustar00collabora-develusers00000000000000/* * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2011 Collabora Ltd. * @copyright Copyright (C) 2008-2011 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 */ /** * \page shared_ptr Shared Pointer Usage * * \section shared_ptr_overview Overview * * The Qt parent/child object model does not fit well with Telepathy-Qt object * model, where in some places we either don't know the object parent or we * can't use a parent, as the object can stay alive without it. * * To avoid memory leaks, caused by objects that got instantiated and don't have * any parent, we decided to make some of our objects reference counted, by * making them inherit RefCounted. * * Making the object reference counted, does not guarantee that it will get * deleted when nobody is referencing it. * * When instantiating new classes that inherits RefCounted the reference count * is 0, this is referred to as the floating state. Again this may lead to * memory leaks, caused by objects in the floating state that never get deleted. * * So the solution is to put the object in a SharedPtr as soon as possible, * letting the SharedPtr manage the object lifetime. * * The pattern used is that classes inherit RefCounted and are used * together with SharedPtr. When the reference count hits 0, the object * is deleted. * * In order to assure that the object is put in a SharedPtr as soon as possible, * our objects inheriting RefCounted will have the constructor either private * or protected, in case we want to support custom classes, and will have a * public static create method that will return a SharedPtr pointing to the * object instance. * * Note that when developing custom classes, this pattern should be followed, * to avoid objects in floating state, avoiding memory leaks. */ /** * \class Tp::RefCounted * \ingroup utils * \headerfile TelepathyQt/shared-ptr.h * * \brief The RefCounted class is a base class for shared objects used by * SharedPtr. * * See \ref shared_ptr */ /** * \class Tp::SharedPtr * \ingroup utils * \headerfile TelepathyQt/shared-ptr.h * * \brief The SharedPtr class is a pointer to an explicitly shared object. * * Note that from Telepathy-Qt >= 0.9.0, Tp::SharedPtr cannot be constructed from a QWeakPointer as * the conversion from a QWeakPointer to a Tp::SharedPtr can't be made thread-safe. * Tp::WeakPtr is reintroduced as a weak pointer class safely promoteable to a Tp::SharedPtr. * * See \ref shared_ptr */ /** * \fn static SharedPtr Tp::SharedPtr::dynamicCast(const SharedPtr &) * * Casts the pointer given by src to a pointer pointing to an object of type T. The cast will * succeed if the C++ runtime type identification mechanism considers the type T to be the actual * runtime type of the object pointed to by src or one of its (possibly indirect) parent classes. * Otherwise, a null pointer is returned. * * Note that this also allows down-casting a baseclass pointer to a subclass pointer. * * This cast method should not be used for QObject-derived classes, as Qt provides a more portable * and efficient type identification mechanism, which is used by qObjectCast(). * * This cast method requires the C++ dynamic runtime type identification facility to be enabled * (which might be disabled by eg. the -fno-rtti flag of the GNU G++ compiler). */ /** * \fn static SharedPtr Tp::SharedPtr::qObjectCast(const SharedPtr &) * * Casts the pointer given by src to a pointer pointing to an object of type T. The cast will * succeed if the Qt runtime type identification mechanism considers the type T to be the actual * runtime type of the object pointed to by src or one of its (possibly indirect) parent classes. * Otherwise, a null pointer is returned. * * Note that this also allows down-casting a baseclass pointer to a subclass pointer. * * This cast method MUST not be used for classes not derived from QObject. However, dynamicCast() * provides the same semantics for all classes, provided the C++ runtime type identification * facility is enabled. This method, on the other hand, doesn't require the standard C++ facility * and is probably also faster for the types it can be used with. */ /** * \class Tp::WeakPtr * \ingroup utils * \headerfile TelepathyQt/shared-ptr.h * * \brief The WeakPtr class holds a weak reference to an object managed by SharedPtr. * * Tp::WeakPtr is useful for example for breaking reference cycles which would result from * using a Tp::SharedPtr for both ends of a pair of mutually linked objects to refer to each other. * * See \ref shared_ptr */ telepathy-qt-0.9.3/TelepathyQt/TelepathyQt.pc.in0000644000175200001440000000132412000056607024055 0ustar00collabora-develusers00000000000000prefix=${CMAKE_INSTALL_PREFIX} exec_prefix=${CMAKE_INSTALL_PREFIX} libdir=${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR} includedir=${CMAKE_INSTALL_PREFIX}/${INCLUDE_INSTALL_DIR} Name: TelepathyQt${QT_VERSION_MAJOR} Description: Qt utility library for the Telepathy framework Version: ${PACKAGE_VERSION} Requires.private: QtCore >= ${QT_MIN_VERSION}, QtCore < ${QT_MAX_VERSION}, QtDBus >= ${QT_MIN_VERSION}, QtDBus < ${QT_MAX_VERSION}, QtNetwork >= ${QT_MIN_VERSION}, QtNetwork < ${QT_MAX_VERSION}, QtXml >= ${QT_MIN_VERSION}, QtXml < ${QT_MAX_VERSION} Libs: -L${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR} -ltelepathy-qt${QT_VERSION_MAJOR} Cflags: -I${CMAKE_INSTALL_PREFIX}/${INCLUDE_INSTALL_DIR}/telepathy-qt${QT_VERSION_MAJOR} telepathy-qt-0.9.3/TelepathyQt/ProtocolInfo0000644000175200001440000000036312000056607023222 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ProtocolInfo_HEADER_GUARD_ #define _TelepathyQt_ProtocolInfo_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/media-stream-handler.xml0000644000175200001440000000035712000056607025372 0ustar00collabora-develusers00000000000000 Media stream handler telepathy-qt-0.9.3/TelepathyQt/AbstractClientApprover0000644000175200001440000000041112000056607025220 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_AbstractClientApprover_HEADER_GUARD_ #define _TelepathyQt_AbstractClientApprover_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/dbus-proxy-factory-internal.h0000644000175200001440000000312312000056607026423 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 BUILDING_TP_QT #error "This file is a TpQt internal header not to be included by applications" #endif #include #include #include #include namespace Tp { class DBusProxy; class TP_QT_NO_EXPORT DBusProxyFactory::Cache : public QObject { Q_OBJECT public: typedef QPair Key; Cache(); ~Cache(); DBusProxyPtr get(const Key &key) const; void put(const DBusProxyPtr &proxy); private Q_SLOTS: void onProxyInvalidated(Tp::DBusProxy *proxy); // The error itself is not interesting private: QHash > proxies; }; } telepathy-qt-0.9.3/TelepathyQt/DBusTubeChannel0000644000175200001440000000037512000056607023556 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_DBusTubeChannel_HEADER_GUARD_ #define _TelepathyQt_DBusTubeChannel_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/PendingSuccess0000644000175200001440000000040312000056607023515 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_PendingSuccess_HEADER_GUARD_ #define _TelepathyQt_PendingSuccess_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/streamed-media-channel.h0000644000175200001440000001613312000056607025324 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_streamed_media_channel_h_HEADER_GUARD_ #define _TelepathyQt_streamed_media_channel_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include #include namespace Tp { class StreamedMediaChannel; typedef QList StreamedMediaStreams; class TP_QT_EXPORT_DEPRECATED PendingStreamedMediaStreams : public PendingOperation { Q_OBJECT Q_DISABLE_COPY(PendingStreamedMediaStreams) public: ~PendingStreamedMediaStreams(); StreamedMediaChannelPtr channel() const; StreamedMediaStreams streams() const; private Q_SLOTS: TP_QT_NO_EXPORT void gotStreams(QDBusPendingCallWatcher *op); TP_QT_NO_EXPORT void onStreamRemoved(const Tp::StreamedMediaStreamPtr &stream); TP_QT_NO_EXPORT void onStreamReady(Tp::PendingOperation *op); private: friend class StreamedMediaChannel; TP_QT_NO_EXPORT PendingStreamedMediaStreams(const StreamedMediaChannelPtr &channel, const ContactPtr &contact, const QList &types); struct Private; friend struct Private; Private *mPriv; }; class TP_QT_EXPORT_DEPRECATED StreamedMediaStream : public Object, private ReadyObject { Q_OBJECT Q_DISABLE_COPY(StreamedMediaStream) public: enum SendingState { SendingStateNone = 0, SendingStatePendingSend = 1, SendingStateSending = 2 }; ~StreamedMediaStream(); StreamedMediaChannelPtr channel() const; uint id() const; ContactPtr contact() const; MediaStreamState state() const; MediaStreamType type() const; SendingState localSendingState() const; SendingState remoteSendingState() const; bool sending() const; bool receiving() const; bool localSendingRequested() const; bool remoteSendingRequested() const; MediaStreamDirection direction() const; MediaStreamPendingSend pendingSend() const; PendingOperation *requestSending(bool send); PendingOperation *requestReceiving(bool receive); PendingOperation *requestDirection(MediaStreamDirection direction); PendingOperation *requestDirection(bool send, bool receive); PendingOperation *startDTMFTone(DTMFEvent event); PendingOperation *stopDTMFTone(); Q_SIGNALS: void localSendingStateChanged(Tp::StreamedMediaStream::SendingState localSendingState); void remoteSendingStateChanged(Tp::StreamedMediaStream::SendingState remoteSendingState); private Q_SLOTS: TP_QT_NO_EXPORT void gotContact(Tp::PendingOperation *op); private: friend class PendingStreamedMediaStreams; friend class StreamedMediaChannel; static const Feature FeatureCore; TP_QT_NO_EXPORT StreamedMediaStream(const StreamedMediaChannelPtr &channel, const MediaStreamInfo &info); TP_QT_NO_EXPORT void gotDirection(uint direction, uint pendingSend); TP_QT_NO_EXPORT void gotStreamState(uint state); struct Private; friend struct Private; Private *mPriv; }; class TP_QT_EXPORT_DEPRECATED StreamedMediaChannel : public Channel { Q_OBJECT Q_DISABLE_COPY(StreamedMediaChannel) Q_ENUMS(StateChangeReason) public: static const Feature FeatureCore; static const Feature FeatureStreams; static const Feature FeatureLocalHoldState; enum StateChangeReason { StateChangeReasonUnknown = 0, StateChangeReasonUserRequested = 1 }; static StreamedMediaChannelPtr create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties); virtual ~StreamedMediaChannel(); bool awaitingLocalAnswer() const; bool awaitingRemoteAnswer() const; PendingOperation *acceptCall(); PendingOperation *hangupCall(); StreamedMediaStreams streams() const; StreamedMediaStreams streamsForType(MediaStreamType type) const; PendingStreamedMediaStreams *requestStream(const ContactPtr &contact, MediaStreamType type); PendingStreamedMediaStreams *requestStreams(const ContactPtr &contact, QList types); PendingOperation *removeStream(const StreamedMediaStreamPtr &stream); PendingOperation *removeStreams(const StreamedMediaStreams &streams); bool handlerStreamingRequired() const; LocalHoldState localHoldState() const; LocalHoldStateReason localHoldStateReason() const; PendingOperation *requestHold(bool hold); Q_SIGNALS: void streamAdded(const Tp::StreamedMediaStreamPtr &stream); void streamRemoved(const Tp::StreamedMediaStreamPtr &stream); void streamDirectionChanged(const Tp::StreamedMediaStreamPtr &stream, Tp::MediaStreamDirection direction, Tp::MediaStreamPendingSend pendingSend); void streamStateChanged(const Tp::StreamedMediaStreamPtr &stream, Tp::MediaStreamState state); void streamError(const Tp::StreamedMediaStreamPtr &stream, Tp::MediaStreamError errorCode, const QString &errorMessage); void localHoldStateChanged(Tp::LocalHoldState state, Tp::LocalHoldStateReason reason); protected: StreamedMediaChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature = StreamedMediaChannel::FeatureCore); private Q_SLOTS: TP_QT_NO_EXPORT void onStreamReady(Tp::PendingOperation *op); TP_QT_NO_EXPORT void gotStreams(QDBusPendingCallWatcher *); TP_QT_NO_EXPORT void onStreamAdded(uint, uint, uint); TP_QT_NO_EXPORT void onStreamRemoved(uint); TP_QT_NO_EXPORT void onStreamDirectionChanged(uint, uint, uint); TP_QT_NO_EXPORT void onStreamStateChanged(uint streamId, uint streamState); TP_QT_NO_EXPORT void onStreamError(uint, uint, const QString &); TP_QT_NO_EXPORT void gotLocalHoldState(QDBusPendingCallWatcher *); TP_QT_NO_EXPORT void onLocalHoldStateChanged(uint, uint); private: friend class PendingStreamedMediaStreams; StreamedMediaStreamPtr addStream(const MediaStreamInfo &streamInfo); StreamedMediaStreamPtr lookupStreamById(uint streamId); struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/referenced-handles.cpp0000644000175200001440000002105512000056607025105 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2009 Collabora Ltd. * @copyright Copyright (C) 2008-2009 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/debug-internal.h" #include #include namespace Tp { struct TP_QT_NO_EXPORT ReferencedHandles::Private : public QSharedData { WeakPtr connection; HandleType handleType; UIntList handles; Private() { handleType = HandleTypeNone; } Private(const ConnectionPtr &conn, HandleType handleType, const UIntList &handles) : connection(conn), handleType(handleType), handles(handles) { Q_ASSERT(!conn.isNull()); Q_ASSERT(handleType != 0); foreach (uint handle, handles) { conn->refHandle(handleType, handle); } } Private(const Private &a) : QSharedData(a), connection(a.connection), handleType(a.handleType), handles(a.handles) { if (!handles.isEmpty()) { ConnectionPtr conn(connection); if (!conn) { debug() << " Destroyed after Connection, so the Connection " "has already released the handles"; return; } for (const_iterator i = handles.constBegin(); i != handles.constEnd(); ++i) { conn->refHandle(handleType, *i); } } } ~Private() { if (!handles.isEmpty()) { ConnectionPtr conn(connection); if (!conn) { debug() << " Destroyed after Connection, so the Connection " "has already released the handles"; return; } for (const_iterator i = handles.constBegin(); i != handles.constEnd(); ++i) { conn->unrefHandle(handleType, *i); } } } private: void operator=(const Private&); }; /** * \class ReferencedHandles * \ingroup clientconn * \headerfile TelepathyQt/referenced-handles.h * * \brief Helper container for safe management of handle lifetimes. Every handle * in a ReferencedHandles container is guaranteed to be valid (and stay valid, * as long it's in at least one ReferencedHandles container). * * The class offers a QList-style API. However, from the mutable operations, * only the operations for which the validity guarantees can be preserved are * provided. This means no functions which can add an arbitrary handle to the * container are included - the only way to add handles to the container is to * reference them using Connection::referenceHandles() and appending the * resulting ReferenceHandles instance. * * ReferencedHandles is a implicitly shared class. */ ReferencedHandles::ReferencedHandles() : mPriv(new Private) { } ReferencedHandles::ReferencedHandles(const ReferencedHandles &other) : mPriv(other.mPriv) { } ReferencedHandles::~ReferencedHandles() { } ConnectionPtr ReferencedHandles::connection() const { return ConnectionPtr(mPriv->connection); } HandleType ReferencedHandles::handleType() const { return mPriv->handleType; } uint ReferencedHandles::at(int i) const { return mPriv->handles[i]; } uint ReferencedHandles::value(int i, uint defaultValue) const { return mPriv->handles.value(i, defaultValue); } ReferencedHandles::const_iterator ReferencedHandles::begin() const { return mPriv->handles.begin(); } ReferencedHandles::const_iterator ReferencedHandles::end() const { return mPriv->handles.end(); } bool ReferencedHandles::contains(uint handle) const { return mPriv->handles.contains(handle); } int ReferencedHandles::count(uint handle) const { return mPriv->handles.count(handle); } int ReferencedHandles::indexOf(uint handle, int from) const { return mPriv->handles.indexOf(handle, from); } bool ReferencedHandles::isEmpty() const { return mPriv->handles.isEmpty(); } int ReferencedHandles::lastIndexOf(uint handle, int from) const { return mPriv->handles.lastIndexOf(handle, from); } ReferencedHandles ReferencedHandles::mid(int pos, int length) const { return ReferencedHandles(connection(), handleType(), mPriv->handles.mid(pos, length)); } int ReferencedHandles::size() const { return mPriv->handles.size(); } void ReferencedHandles::clear() { if (!mPriv->handles.empty()) { ConnectionPtr conn(mPriv->connection); if (conn) { foreach (uint handle, mPriv->handles) { conn->unrefHandle(handleType(), handle); } } else { warning() << "Connection already destroyed in " "ReferencedHandles::clear() so can't unref!"; } } mPriv->handles.clear(); } void ReferencedHandles::move(int from, int to) { mPriv->handles.move(from, to); } int ReferencedHandles::removeAll(uint handle) { int count = mPriv->handles.removeAll(handle); if (count > 0) { ConnectionPtr conn(mPriv->connection); if (conn) { for (int i = 0; i < count; ++i) { conn->unrefHandle(handleType(), handle); } } else { warning() << "Connection already destroyed in " "ReferencedHandles::removeAll() with handle ==" << handle << "so can't unref!"; } } return count; } void ReferencedHandles::removeAt(int i) { ConnectionPtr conn(mPriv->connection); if (conn) { conn->unrefHandle(handleType(), at(i)); } else { warning() << "Connection already destroyed in " "ReferencedHandles::removeAt() with i ==" << i << "so can't unref!"; } mPriv->handles.removeAt(i); } bool ReferencedHandles::removeOne(uint handle) { bool wasThere = mPriv->handles.removeOne(handle); if (wasThere) { ConnectionPtr conn(mPriv->connection); if (conn) { conn->unrefHandle(handleType(), handle); } else { warning() << "Connection already destroyed in " "ReferencedHandles::removeOne() with handle ==" << handle << "so can't unref!"; } } return wasThere; } void ReferencedHandles::swap(int i, int j) { mPriv->handles.swap(i, j); } uint ReferencedHandles::takeAt(int i) { ConnectionPtr conn(mPriv->connection); if (conn) { conn->unrefHandle(handleType(), at(i)); } else { warning() << "Connection already destroyed in " "ReferencedHandles::takeAt() with i ==" << i << "so can't unref!"; } return mPriv->handles.takeAt(i); } ReferencedHandles ReferencedHandles::operator+(const ReferencedHandles &another) const { if (connection() != another.connection() || handleType() != another.handleType()) { warning() << "Tried to concatenate ReferencedHandles instances " "with different connection and/or handle type"; return *this; } return ReferencedHandles(connection(), handleType(), mPriv->handles + another.mPriv->handles); } ReferencedHandles &ReferencedHandles::operator=( const ReferencedHandles &another) { mPriv = another.mPriv; return *this; } bool ReferencedHandles::operator==(const ReferencedHandles &another) const { return connection() == another.connection() && handleType() == another.handleType() && mPriv->handles == another.mPriv->handles; } bool ReferencedHandles::operator==(const UIntList &list) const { return mPriv->handles == list; } UIntList ReferencedHandles::toList() const { return mPriv->handles; } ReferencedHandles::ReferencedHandles(const ConnectionPtr &connection, HandleType handleType, const UIntList &handles) : mPriv(new Private(connection, handleType, handles)) { } } // Tp telepathy-qt-0.9.3/TelepathyQt/Profile0000644000175200001440000000034312000056607022203 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_Profile_HEADER_GUARD_ #define _TelepathyQt_Profile_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/PendingCaptchas0000644000175200001440000000037412000056607023642 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_PendingCaptchas_HEADER_GUARD_ #define _TelepathyQt_PendingCaptchas_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/base-connection-internal.h0000644000175200001440000000253412000056607025716 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include "TelepathyQt/_gen/svc-connection.h" #include #include #include namespace Tp { class TP_QT_NO_EXPORT BaseConnection::Adaptee : public QObject { Q_OBJECT public: Adaptee(const QDBusConnection &dbusConnection, BaseConnection *cm); ~Adaptee(); public: BaseConnection *mConnection; Service::ConnectionAdaptor *mAdaptor; }; } telepathy-qt-0.9.3/TelepathyQt/contact-manager-roster.cpp0000644000175200001440000023031212000056607025744 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2010 Collabora Ltd. * @copyright Copyright (C) 2008-2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include "TelepathyQt/contact-manager-internal.h" #include "TelepathyQt/_gen/contact-manager-internal.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include #include #include #include #include #include #include #include namespace Tp { ContactManager::Roster::Roster(ContactManager *contactManager) : QObject(), contactManager(contactManager), usingFallbackContactList(false), hasContactBlockingInterface(false), introspectPendingOp(0), introspectGroupsPendingOp(0), pendingContactListState((uint) -1), contactListState((uint) -1), canReportAbusive(false), gotContactBlockingInitialBlockedContacts(false), canChangeContactList(false), contactListRequestUsesMessage(false), gotContactListInitialContacts(false), gotContactListContactsChangedWithId(false), groupsReintrospectionRequired(false), contactListGroupPropertiesReceived(false), processingContactListChanges(false), contactListChannelsReady(0), featureContactListGroupsTodo(0), groupsSetSuccess(false) { } ContactManager::Roster::~Roster() { } ContactListState ContactManager::Roster::state() const { return (Tp::ContactListState) contactListState; } PendingOperation *ContactManager::Roster::introspect() { ConnectionPtr conn(contactManager->connection()); if (conn->hasInterface(TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_LIST)) { debug() << "Connection.ContactList found, using it"; usingFallbackContactList = false; if (conn->hasInterface(TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_BLOCKING)) { debug() << "Connection.ContactBlocking found. using it"; hasContactBlockingInterface = true; introspectContactBlocking(); } else { debug() << "Connection.ContactBlocking not found, falling back " "to contact list deny channel"; debug() << "Requesting handle for deny channel"; contactListChannels.insert(ChannelInfo::TypeDeny, ChannelInfo(ChannelInfo::TypeDeny)); PendingHandles *ph = conn->lowlevel()->requestHandles(HandleTypeList, QStringList() << ChannelInfo::identifierForType( ChannelInfo::TypeDeny)); connect(ph, SIGNAL(finished(Tp::PendingOperation*)), SLOT(gotContactListChannelHandle(Tp::PendingOperation*))); } } else { debug() << "Connection.ContactList not found, falling back to contact list channels"; usingFallbackContactList = true; for (uint i = 0; i < ChannelInfo::LastType; ++i) { QString channelId = ChannelInfo::identifierForType( (ChannelInfo::Type) i); debug() << "Requesting handle for" << channelId << "channel"; contactListChannels.insert(i, ChannelInfo((ChannelInfo::Type) i)); PendingHandles *ph = conn->lowlevel()->requestHandles(HandleTypeList, QStringList() << channelId); connect(ph, SIGNAL(finished(Tp::PendingOperation*)), SLOT(gotContactListChannelHandle(Tp::PendingOperation*))); } } Q_ASSERT(!introspectPendingOp); introspectPendingOp = new PendingOperation(conn); return introspectPendingOp; } PendingOperation *ContactManager::Roster::introspectGroups() { ConnectionPtr conn(contactManager->connection()); Q_ASSERT(!introspectGroupsPendingOp); if (conn->hasInterface(TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_LIST)) { if (!conn->hasInterface(TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_GROUPS)) { return new PendingFailure(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Roster groups not supported"), conn); } debug() << "Connection.ContactGroups found, using it"; if (!gotContactListInitialContacts) { debug() << "Initial ContactList contacts not retrieved. Postponing introspection"; groupsReintrospectionRequired = true; return new PendingSuccess(conn); } Client::ConnectionInterfaceContactGroupsInterface *iface = conn->interface(); connect(iface, SIGNAL(GroupsChanged(Tp::UIntList,QStringList,QStringList)), SLOT(onContactListGroupsChanged(Tp::UIntList,QStringList,QStringList))); connect(iface, SIGNAL(GroupsCreated(QStringList)), SLOT(onContactListGroupsCreated(QStringList))); connect(iface, SIGNAL(GroupRenamed(QString,QString)), SLOT(onContactListGroupRenamed(QString,QString))); connect(iface, SIGNAL(GroupsRemoved(QStringList)), SLOT(onContactListGroupsRemoved(QStringList))); PendingVariantMap *pvm = iface->requestAllProperties(); connect(pvm, SIGNAL(finished(Tp::PendingOperation*)), SLOT(gotContactListGroupsProperties(Tp::PendingOperation*))); } else { debug() << "Connection.ContactGroups not found, falling back to contact list group channels"; ++featureContactListGroupsTodo; // decremented in gotChannels // we already checked if requests interface exists, so bypass requests // interface checking Client::ConnectionInterfaceRequestsInterface *iface = conn->interface(); debug() << "Connecting to Requests.NewChannels"; connect(iface, SIGNAL(NewChannels(Tp::ChannelDetailsList)), SLOT(onNewChannels(Tp::ChannelDetailsList))); debug() << "Retrieving channels"; Client::DBus::PropertiesInterface *properties = contactManager->connection()->interface(); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( properties->Get( TP_QT_IFACE_CONNECTION_INTERFACE_REQUESTS, QLatin1String("Channels")), this); connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotChannels(QDBusPendingCallWatcher*))); } if (groupsReintrospectionRequired) { return NULL; } Q_ASSERT(!introspectGroupsPendingOp); introspectGroupsPendingOp = new PendingOperation(conn); return introspectGroupsPendingOp; } void ContactManager::Roster::reset() { contactListChannels.clear(); subscribeChannel.reset(); publishChannel.reset(); storedChannel.reset(); denyChannel.reset(); contactListGroupChannels.clear(); removedContactListGroupChannels.clear(); } Contacts ContactManager::Roster::allKnownContacts() const { return cachedAllKnownContacts; } QStringList ContactManager::Roster::allKnownGroups() const { if (usingFallbackContactList) { return contactListGroupChannels.keys(); } return cachedAllKnownGroups.toList(); } PendingOperation *ContactManager::Roster::addGroup(const QString &group) { ConnectionPtr conn(contactManager->connection()); if (usingFallbackContactList) { QVariantMap request; request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_CONTACT_LIST); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) Tp::HandleTypeGroup); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetID"), group); return conn->lowlevel()->ensureChannel(request); } if (!conn->hasInterface(TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_GROUPS)) { return new PendingFailure(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Not implemented"), conn); } Client::ConnectionInterfaceContactGroupsInterface *iface = conn->interface(); Q_ASSERT(iface); return queuedFinishVoid(iface->AddToGroup(group, UIntList())); } PendingOperation *ContactManager::Roster::removeGroup(const QString &group) { ConnectionPtr conn(contactManager->connection()); if (usingFallbackContactList) { if (!contactListGroupChannels.contains(group)) { return new PendingFailure(TP_QT_ERROR_INVALID_ARGUMENT, QLatin1String("Invalid group"), conn); } ChannelPtr channel = contactListGroupChannels[group]; return new RemoveGroupOp(channel); } if (!conn->hasInterface(TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_GROUPS)) { return new PendingFailure(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Not implemented"), conn); } Client::ConnectionInterfaceContactGroupsInterface *iface = conn->interface(); Q_ASSERT(iface); return queuedFinishVoid(iface->RemoveGroup(group)); } Contacts ContactManager::Roster::groupContacts(const QString &group) const { if (usingFallbackContactList) { if (!contactListGroupChannels.contains(group)) { return Contacts(); } ChannelPtr channel = contactListGroupChannels[group]; return channel->groupContacts(); } Contacts ret; foreach (const ContactPtr &contact, allKnownContacts()) { if (contact->groups().contains(group)) ret << contact; } return ret; } PendingOperation *ContactManager::Roster::addContactsToGroup(const QString &group, const QList &contacts) { ConnectionPtr conn(contactManager->connection()); if (usingFallbackContactList) { if (!contactListGroupChannels.contains(group)) { return new PendingFailure(TP_QT_ERROR_INVALID_ARGUMENT, QLatin1String("Invalid group"), conn); } ChannelPtr channel = contactListGroupChannels[group]; return channel->groupAddContacts(contacts); } if (!conn->hasInterface(TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_GROUPS)) { return new PendingFailure(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Not implemented"), conn); } UIntList handles; foreach (const ContactPtr &contact, contacts) { handles << contact->handle()[0]; } Client::ConnectionInterfaceContactGroupsInterface *iface = conn->interface(); Q_ASSERT(iface); return queuedFinishVoid(iface->AddToGroup(group, handles)); } PendingOperation *ContactManager::Roster::removeContactsFromGroup(const QString &group, const QList &contacts) { ConnectionPtr conn(contactManager->connection()); if (usingFallbackContactList) { if (!contactListGroupChannels.contains(group)) { return new PendingFailure(TP_QT_ERROR_INVALID_ARGUMENT, QLatin1String("Invalid group"), conn); } ChannelPtr channel = contactListGroupChannels[group]; return channel->groupRemoveContacts(contacts); } if (!conn->hasInterface(TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_GROUPS)) { return new PendingFailure(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Not implemented"), conn); } UIntList handles; foreach (const ContactPtr &contact, contacts) { handles << contact->handle()[0]; } Client::ConnectionInterfaceContactGroupsInterface *iface = conn->interface(); Q_ASSERT(iface); return queuedFinishVoid(iface->RemoveFromGroup(group, handles)); } bool ContactManager::Roster::canRequestPresenceSubscription() const { if (usingFallbackContactList) { return subscribeChannel && subscribeChannel->groupCanAddContacts(); } return canChangeContactList; } bool ContactManager::Roster::subscriptionRequestHasMessage() const { if (usingFallbackContactList) { return subscribeChannel && (subscribeChannel->groupFlags() & ChannelGroupFlagMessageAdd); } return contactListRequestUsesMessage; } PendingOperation *ContactManager::Roster::requestPresenceSubscription( const QList &contacts, const QString &message) { ConnectionPtr conn(contactManager->connection()); if (usingFallbackContactList) { if (!subscribeChannel) { return new PendingFailure(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Cannot subscribe to contacts' presence on this protocol"), conn); } return subscribeChannel->groupAddContacts(contacts, message); } UIntList handles; foreach (const ContactPtr &contact, contacts) { handles << contact->handle()[0]; } Client::ConnectionInterfaceContactListInterface *iface = conn->interface(); Q_ASSERT(iface); return queuedFinishVoid(iface->RequestSubscription(handles, message)); } bool ContactManager::Roster::canRemovePresenceSubscription() const { if (usingFallbackContactList) { return subscribeChannel && subscribeChannel->groupCanRemoveContacts(); } return canChangeContactList; } bool ContactManager::Roster::subscriptionRemovalHasMessage() const { if (usingFallbackContactList) { return subscribeChannel && (subscribeChannel->groupFlags() & ChannelGroupFlagMessageRemove); } return false; } bool ContactManager::Roster::canRescindPresenceSubscriptionRequest() const { if (usingFallbackContactList) { return subscribeChannel && subscribeChannel->groupCanRescindContacts(); } return canChangeContactList; } bool ContactManager::Roster::subscriptionRescindingHasMessage() const { if (usingFallbackContactList) { return subscribeChannel && (subscribeChannel->groupFlags() & ChannelGroupFlagMessageRescind); } return false; } PendingOperation *ContactManager::Roster::removePresenceSubscription( const QList &contacts, const QString &message) { ConnectionPtr conn(contactManager->connection()); if (usingFallbackContactList) { if (!subscribeChannel) { return new PendingFailure(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Cannot subscribe to contacts' presence on this protocol"), conn); } return subscribeChannel->groupRemoveContacts(contacts, message); } UIntList handles; foreach (const ContactPtr &contact, contacts) { handles << contact->handle()[0]; } Client::ConnectionInterfaceContactListInterface *iface = conn->interface(); Q_ASSERT(iface); return queuedFinishVoid(iface->Unsubscribe(handles)); } bool ContactManager::Roster::canAuthorizePresencePublication() const { if (usingFallbackContactList) { // do not check for Channel::groupCanAddContacts as all contacts in local // pending can be added, even if the Channel::groupFlags() does not contain // the flag CanAdd return (bool) publishChannel; } return canChangeContactList; } bool ContactManager::Roster::publicationAuthorizationHasMessage() const { if (usingFallbackContactList) { return subscribeChannel && (subscribeChannel->groupFlags() & ChannelGroupFlagMessageAccept); } return false; } PendingOperation *ContactManager::Roster::authorizePresencePublication( const QList &contacts, const QString &message) { ConnectionPtr conn(contactManager->connection()); if (usingFallbackContactList) { if (!publishChannel) { return new PendingFailure(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Cannot control publication of presence on this protocol"), conn); } return publishChannel->groupAddContacts(contacts, message); } UIntList handles; foreach (const ContactPtr &contact, contacts) { handles << contact->handle()[0]; } Client::ConnectionInterfaceContactListInterface *iface = conn->interface(); Q_ASSERT(iface); return queuedFinishVoid(iface->AuthorizePublication(handles)); } bool ContactManager::Roster::publicationRejectionHasMessage() const { if (usingFallbackContactList) { return subscribeChannel && (subscribeChannel->groupFlags() & ChannelGroupFlagMessageReject); } return false; } bool ContactManager::Roster::canRemovePresencePublication() const { if (usingFallbackContactList) { return publishChannel && publishChannel->groupCanRemoveContacts(); } return canChangeContactList; } bool ContactManager::Roster::publicationRemovalHasMessage() const { if (usingFallbackContactList) { return subscribeChannel && (subscribeChannel->groupFlags() & ChannelGroupFlagMessageRemove); } return false; } PendingOperation *ContactManager::Roster::removePresencePublication( const QList &contacts, const QString &message) { ConnectionPtr conn(contactManager->connection()); if (usingFallbackContactList) { if (!publishChannel) { return new PendingFailure(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Cannot control publication of presence on this protocol"), conn); } return publishChannel->groupRemoveContacts(contacts, message); } UIntList handles; foreach (const ContactPtr &contact, contacts) { handles << contact->handle()[0]; } Client::ConnectionInterfaceContactListInterface *iface = conn->interface(); Q_ASSERT(iface); return queuedFinishVoid(iface->Unpublish(handles)); } PendingOperation *ContactManager::Roster::removeContacts( const QList &contacts, const QString &message) { ConnectionPtr conn(contactManager->connection()); if (usingFallbackContactList) { /* If the CM implements stored channel correctly, it should have the * wanted behaviour. Otherwise we have to to remove from publish * and subscribe channels. */ if (storedChannel && storedChannel->groupCanRemoveContacts()) { debug() << "Removing contacts from stored list"; return storedChannel->groupRemoveContacts(contacts, message); } QList operations; if (canRemovePresenceSubscription()) { debug() << "Removing contacts from subscribe list"; operations << removePresenceSubscription(contacts, message); } if (canRemovePresencePublication()) { debug() << "Removing contacts from publish list"; operations << removePresencePublication(contacts, message); } if (operations.isEmpty()) { return new PendingFailure(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Cannot remove contacts on this protocol"), conn); } return new PendingComposite(operations, conn); } UIntList handles; foreach (const ContactPtr &contact, contacts) { handles << contact->handle()[0]; } Client::ConnectionInterfaceContactListInterface *iface = conn->interface(); Q_ASSERT(iface); return queuedFinishVoid(iface->RemoveContacts(handles)); } bool ContactManager::Roster::canBlockContacts() const { if (!usingFallbackContactList && hasContactBlockingInterface) { return true; } else { return (bool) denyChannel; } } bool ContactManager::Roster::canReportAbuse() const { return canReportAbusive; } PendingOperation *ContactManager::Roster::blockContacts( const QList &contacts, bool value, bool reportAbuse) { if (!contactManager->connection()->isValid()) { return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection is invalid"), contactManager->connection()); } else if (!contactManager->connection()->isReady(Connection::FeatureRoster)) { return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Connection::FeatureRoster is not ready"), contactManager->connection()); } if (!usingFallbackContactList && hasContactBlockingInterface) { ConnectionPtr conn(contactManager->connection()); Client::ConnectionInterfaceContactBlockingInterface *iface = conn->interface(); UIntList handles; foreach (const ContactPtr &contact, contacts) { handles << contact->handle()[0]; } Q_ASSERT(iface); if(value) { return queuedFinishVoid(iface->BlockContacts(handles, reportAbuse)); } else { return queuedFinishVoid(iface->UnblockContacts(handles)); } } else { ConnectionPtr conn(contactManager->connection()); if (!denyChannel) { return new PendingFailure(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Cannot block contacts on this protocol"), conn); } if (value) { return denyChannel->groupAddContacts(contacts); } else { return denyChannel->groupRemoveContacts(contacts); } } } void ContactManager::Roster::gotContactBlockingCapabilities(PendingOperation *op) { if (op->isError()) { warning() << "Getting ContactBlockingCapabilities property failed with" << op->errorName() << ":" << op->errorMessage(); introspectContactList(); return; } debug() << "Got ContactBlockingCapabilities property"; PendingVariant *pv = qobject_cast(op); uint contactBlockingCaps = pv->result().toUInt(); canReportAbusive = contactBlockingCaps & ContactBlockingCapabilityCanReportAbusive; introspectContactBlockingBlockedContacts(); } void ContactManager::Roster::gotContactBlockingBlockedContacts( QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (watcher->isError()) { warning() << "Getting initial ContactBlocking blocked " "contacts failed with" << watcher->error().name() << ":" << watcher->error().message(); introspectContactList(); return; } debug() << "Got initial ContactBlocking blocked contacts"; gotContactBlockingInitialBlockedContacts = true; ConnectionPtr conn(contactManager->connection()); HandleIdentifierMap contactIds = reply.value(); if (!contactIds.isEmpty()) { conn->lowlevel()->injectContactIds(contactIds); //fake change event where all the contacts are added contactListBlockedContactsChangedQueue.enqueue( BlockedContactsChangedInfo(contactIds, HandleIdentifierMap(), true)); contactListChangesQueue.enqueue( &ContactManager::Roster::processContactListBlockedContactsChanged); processContactListChanges(); } else { introspectContactList(); } } void ContactManager::Roster::onContactBlockingBlockedContactsChanged( const HandleIdentifierMap &added, const HandleIdentifierMap &removed) { if (!gotContactBlockingInitialBlockedContacts) { return; } ConnectionPtr conn(contactManager->connection()); conn->lowlevel()->injectContactIds(added); conn->lowlevel()->injectContactIds(removed); contactListBlockedContactsChangedQueue.enqueue( BlockedContactsChangedInfo(added, removed)); contactListChangesQueue.enqueue( &ContactManager::Roster::processContactListBlockedContactsChanged); processContactListChanges(); } void ContactManager::Roster::gotContactListProperties(PendingOperation *op) { if (op->isError()) { // We may have been in state Failure and then Success, and FeatureRoster is already ready if (introspectPendingOp) { introspectPendingOp->setFinishedWithError( op->errorName(), op->errorMessage()); introspectPendingOp = 0; } return; } debug() << "Got ContactList properties"; PendingVariantMap *pvm = qobject_cast(op); QVariantMap props = pvm->result(); canChangeContactList = qdbus_cast(props[QLatin1String("CanChangeContactList")]); contactListRequestUsesMessage = qdbus_cast(props[QLatin1String("RequestUsesMessage")]); // only update the status if we did not get it from ContactListStateChanged if (pendingContactListState == (uint) -1) { uint state = qdbus_cast(props[QLatin1String("ContactListState")]); onContactListStateChanged(state); } } void ContactManager::Roster::gotContactListContacts(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (watcher->isError()) { warning() << "Failed introspecting ContactList contacts"; contactListState = ContactListStateFailure; debug() << "Setting state to failure"; emit contactManager->stateChanged((Tp::ContactListState) contactListState); // We may have been in state Failure and then Success, and FeatureRoster is already ready if (introspectPendingOp) { introspectPendingOp->setFinishedWithError( reply.error()); introspectPendingOp = 0; } return; } debug() << "Got initial ContactList contacts"; gotContactListInitialContacts = true; ConnectionPtr conn(contactManager->connection()); ContactAttributesMap attrsMap = reply.value(); ContactAttributesMap::const_iterator begin = attrsMap.constBegin(); ContactAttributesMap::const_iterator end = attrsMap.constEnd(); for (ContactAttributesMap::const_iterator i = begin; i != end; ++i) { uint bareHandle = i.key(); QVariantMap attrs = i.value(); ContactPtr contact = contactManager->ensureContact(ReferencedHandles(conn, HandleTypeContact, UIntList() << bareHandle), conn->contactFactory()->features(), attrs); cachedAllKnownContacts.insert(contact); contactListContacts.insert(contact); } if (contactManager->connection()->requestedFeatures().contains( Connection::FeatureRosterGroups)) { groupsSetSuccess = true; } // We may have been in state Failure and then Success, and FeatureRoster is already ready // In any case, if we're going to reintrospect Groups, we only advance to state success once // that is finished. We connect to the op finishing already here to catch all the failure finish // cases as well. if (introspectPendingOp) { if (!groupsSetSuccess) { // Will emit stateChanged() signal when the op is finished in idle // callback. This is to ensure FeatureRoster (and Groups) is marked ready. connect(introspectPendingOp, SIGNAL(finished(Tp::PendingOperation *)), SLOT(setStateSuccess())); } introspectPendingOp->setFinished(); introspectPendingOp = 0; } else if (!groupsSetSuccess) { setStateSuccess(); } else { // Verify that Groups is actually going to set the state // As far as I can see, this will always be the case. Q_ASSERT(groupsReintrospectionRequired); } if (groupsReintrospectionRequired) { introspectGroups(); } } void ContactManager::Roster::setStateSuccess() { if (contactManager->connection()->isValid()) { debug() << "State is now success"; contactListState = ContactListStateSuccess; emit contactManager->stateChanged((Tp::ContactListState) contactListState); } } void ContactManager::Roster::onContactListStateChanged(uint state) { if (pendingContactListState == state) { // ignore redundant state changes return; } pendingContactListState = state; if (state == ContactListStateSuccess) { introspectContactListContacts(); return; } contactListState = state; if (state == ContactListStateFailure) { debug() << "State changed to failure, finishing roster introspection"; } emit contactManager->stateChanged((Tp::ContactListState) state); if (state == ContactListStateFailure) { // Consider it done here as the state may go from Failure to Success afterwards, in which // case the contacts will appear. Q_ASSERT(introspectPendingOp); introspectPendingOp->setFinished(); introspectPendingOp = 0; } } void ContactManager::Roster::onContactListContactsChangedWithId(const Tp::ContactSubscriptionMap &changes, const Tp::HandleIdentifierMap &ids, const Tp::HandleIdentifierMap &removals) { debug() << "Got ContactList.ContactsChangedWithID with" << changes.size() << "changes and" << removals.size() << "removals"; gotContactListContactsChangedWithId = true; if (!gotContactListInitialContacts) { debug() << "Ignoring ContactList changes until initial contacts are retrieved"; return; } ConnectionPtr conn(contactManager->connection()); conn->lowlevel()->injectContactIds(ids); contactListUpdatesQueue.enqueue(UpdateInfo(changes, ids, removals)); contactListChangesQueue.enqueue(&ContactManager::Roster::processContactListUpdates); processContactListChanges(); } void ContactManager::Roster::onContactListContactsChanged(const Tp::ContactSubscriptionMap &changes, const Tp::UIntList &removals) { if (gotContactListContactsChangedWithId) { return; } debug() << "Got ContactList.ContactsChanged with" << changes.size() << "changes and" << removals.size() << "removals"; if (!gotContactListInitialContacts) { debug() << "Ignoring ContactList changes until initial contacts are retrieved"; return; } HandleIdentifierMap removalsMap; foreach (uint handle, removals) { removalsMap.insert(handle, QString()); } contactListUpdatesQueue.enqueue(UpdateInfo(changes, HandleIdentifierMap(), removalsMap)); contactListChangesQueue.enqueue(&ContactManager::Roster::processContactListUpdates); processContactListChanges(); } void ContactManager::Roster::onContactListBlockedContactsConstructed(Tp::PendingOperation *op) { BlockedContactsChangedInfo info = contactListBlockedContactsChangedQueue.dequeue(); if (op->isError()) { if (info.continueIntrospectionWhenFinished) { introspectContactList(); } processingContactListChanges = false; processContactListChanges(); return; } Contacts newBlockedContacts; Contacts unblockedContacts; HandleIdentifierMap::const_iterator begin = info.added.constBegin(); HandleIdentifierMap::const_iterator end = info.added.constEnd(); for (HandleIdentifierMap::const_iterator i = begin; i != end; ++i) { uint bareHandle = i.key(); ContactPtr contact = contactManager->lookupContactByHandle(bareHandle); if (!contact) { warning() << "Unable to construct contact for handle" << bareHandle; continue; } debug() << "Contact" << contact->id() << "is now blocked"; blockedContacts.insert(contact); newBlockedContacts.insert(contact); contact->setBlocked(true); } begin = info.removed.constBegin(); end = info.removed.constEnd(); for (HandleIdentifierMap::const_iterator i = begin; i != end; ++i) { uint bareHandle = i.key(); ContactPtr contact = contactManager->lookupContactByHandle(bareHandle); if (!contact) { warning() << "Unable to construct contact for handle" << bareHandle; continue; } debug() << "Contact" << contact->id() << "is now unblocked"; blockedContacts.remove(contact); unblockedContacts.insert(contact); contact->setBlocked(false); } // Perform the needed computation for allKnownContactsChanged computeKnownContactsChanges(newBlockedContacts, Contacts(), Contacts(), unblockedContacts, Channel::GroupMemberChangeDetails()); if (info.continueIntrospectionWhenFinished) { introspectContactList(); } processingContactListChanges = false; processContactListChanges(); } void ContactManager::Roster::onContactListNewContactsConstructed(Tp::PendingOperation *op) { if (op->isError()) { contactListUpdatesQueue.dequeue(); processingContactListChanges = false; processContactListChanges(); return; } UpdateInfo info = contactListUpdatesQueue.dequeue(); Tp::Contacts added; Tp::Contacts removed; Tp::Contacts publishRequested; ContactSubscriptionMap::const_iterator begin = info.changes.constBegin(); ContactSubscriptionMap::const_iterator end = info.changes.constEnd(); for (ContactSubscriptionMap::const_iterator i = begin; i != end; ++i) { uint bareHandle = i.key(); ContactSubscriptions subscriptions = i.value(); ContactPtr contact = contactManager->lookupContactByHandle(bareHandle); if (!contact) { warning() << "Unable to construct contact for handle" << bareHandle; continue; } contactListContacts.insert(contact); added << contact; Contact::PresenceState oldContactPublishState = contact->publishState(); QString oldContactPublishStateMessage = contact->publishStateMessage(); contact->setSubscriptionState((SubscriptionState) subscriptions.subscribe); contact->setPublishState((SubscriptionState) subscriptions.publish, subscriptions.publishRequest); if (subscriptions.publish == SubscriptionStateAsk && (oldContactPublishState != Contact::PresenceStateAsk || oldContactPublishStateMessage != contact->publishStateMessage())) { Channel::GroupMemberChangeDetails publishRequestDetails; QVariantMap detailsMap; detailsMap.insert(QLatin1String("message"), subscriptions.publishRequest); publishRequestDetails = Channel::GroupMemberChangeDetails(ContactPtr(), detailsMap); publishRequested.insert(contact); } } if (!publishRequested.empty()) { emit contactManager->presencePublicationRequested(publishRequested); } foreach (uint bareHandle, info.removals.keys()) { ContactPtr contact = contactManager->lookupContactByHandle(bareHandle); if (!contact) { warning() << "Unable to find removed contact with handle" << bareHandle; continue; } if (!contactListContacts.contains(contact)) { warning() << "Contact" << contact->id() << "removed from ContactList " "but it wasn't present, ignoring."; continue; } contactListContacts.remove(contact); removed << contact; } computeKnownContactsChanges(added, Contacts(), Contacts(), removed, Channel::GroupMemberChangeDetails()); foreach (const Tp::ContactPtr &contact, removed) { contact->setSubscriptionState(SubscriptionStateNo); contact->setPublishState(SubscriptionStateNo); } processingContactListChanges = false; processContactListChanges(); } void ContactManager::Roster::onContactListGroupsChanged(const Tp::UIntList &contacts, const QStringList &added, const QStringList &removed) { Q_ASSERT(usingFallbackContactList == false); if (!contactListGroupPropertiesReceived) { return; } contactListGroupsUpdatesQueue.enqueue(GroupsUpdateInfo(contacts, added, removed)); contactListChangesQueue.enqueue(&ContactManager::Roster::processContactListGroupsUpdates); processContactListChanges(); } void ContactManager::Roster::onContactListGroupsCreated(const QStringList &names) { Q_ASSERT(usingFallbackContactList == false); if (!contactListGroupPropertiesReceived) { return; } contactListGroupsCreatedQueue.enqueue(names); contactListChangesQueue.enqueue(&ContactManager::Roster::processContactListGroupsCreated); processContactListChanges(); } void ContactManager::Roster::onContactListGroupRenamed(const QString &oldName, const QString &newName) { Q_ASSERT(usingFallbackContactList == false); if (!contactListGroupPropertiesReceived) { return; } contactListGroupRenamedQueue.enqueue(GroupRenamedInfo(oldName, newName)); contactListChangesQueue.enqueue(&ContactManager::Roster::processContactListGroupRenamed); processContactListChanges(); } void ContactManager::Roster::onContactListGroupsRemoved(const QStringList &names) { Q_ASSERT(usingFallbackContactList == false); if (!contactListGroupPropertiesReceived) { return; } contactListGroupsRemovedQueue.enqueue(names); contactListChangesQueue.enqueue(&ContactManager::Roster::processContactListGroupsRemoved); processContactListChanges(); } void ContactManager::Roster::onModifyFinished(Tp::PendingOperation *op) { ModifyFinishOp *returned = returnedModifyOps.take(op); // Finished twice, or we didn't add the returned op at all? Q_ASSERT(returned); if (op->isError()) { returned->setError(op->errorName(), op->errorMessage()); } modifyFinishQueue.enqueue(returned); contactListChangesQueue.enqueue(&ContactManager::Roster::processFinishedModify); processContactListChanges(); } void ContactManager::Roster::gotContactListChannelHandle(PendingOperation *op) { PendingHandles *ph = qobject_cast(op); Q_ASSERT(ph->namesRequested().size() == 1); QString channelId = ph->namesRequested().first(); uint type = ChannelInfo::typeForIdentifier(channelId); if (op->isError()) { // let's not fail, because the contact lists are not supported debug() << "Unable to retrieve handle for" << channelId << "channel, ignoring"; contactListChannels.remove(type); onContactListChannelReady(); return; } if (ph->invalidNames().size() == 1) { // let's not fail, because the contact lists are not supported debug() << "Unable to retrieve handle for" << channelId << "channel, ignoring"; contactListChannels.remove(type); onContactListChannelReady(); return; } Q_ASSERT(ph->handles().size() == 1); debug() << "Got handle for" << channelId << "channel"; if (!usingFallbackContactList) { Q_ASSERT(type == ChannelInfo::TypeDeny); } else { Q_ASSERT(type != (uint) -1 && type < ChannelInfo::LastType); } ReferencedHandles handle = ph->handles(); contactListChannels[type].handle = handle; debug() << "Requesting channel for" << channelId << "channel"; QVariantMap request; request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_CONTACT_LIST); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) HandleTypeList); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandle"), handle[0]); ConnectionPtr conn(contactManager->connection()); /* Request the channel passing INT_MAX as timeout (meaning no timeout), as * some CMs may take too long to return from ensureChannel when still * loading the contact list */ connect(conn->lowlevel()->ensureChannel(request, INT_MAX), SIGNAL(finished(Tp::PendingOperation*)), SLOT(gotContactListChannel(Tp::PendingOperation*))); } void ContactManager::Roster::gotContactListChannel(PendingOperation *op) { if (op->isError()) { debug() << "Unable to create channel, ignoring"; onContactListChannelReady(); return; } PendingChannel *pc = qobject_cast(op); ChannelPtr channel = pc->channel(); Q_ASSERT(channel); uint handle = pc->targetHandle(); Q_ASSERT(handle); for (uint i = 0; i < ChannelInfo::LastType; ++i) { if (contactListChannels.contains(i) && contactListChannels[i].handle.size() > 0 && contactListChannels[i].handle[0] == handle) { Q_ASSERT(!contactListChannels[i].channel); contactListChannels[i].channel = channel; // deref connection refcount here as connection will keep a ref to channel and we don't // want a contact list channel keeping a ref of connection, otherwise connection will // leak, thus the channels. channel->connection()->deref(); connect(channel->becomeReady(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onContactListChannelReady())); } } } void ContactManager::Roster::onContactListChannelReady() { if (!usingFallbackContactList) { setContactListChannelsReady(); updateContactsBlockState(); if (denyChannel) { cachedAllKnownContacts.unite(denyChannel->groupContacts()); } introspectContactList(); } else if (++contactListChannelsReady == ChannelInfo::LastType) { if (contactListChannels.isEmpty()) { contactListState = ContactListStateFailure; debug() << "State is failure, roster not supported"; emit contactManager->stateChanged((Tp::ContactListState) contactListState); Q_ASSERT(introspectPendingOp); introspectPendingOp->setFinishedWithError(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Roster not supported")); introspectPendingOp = 0; return; } setContactListChannelsReady(); updateContactsBlockState(); // Refresh the cache for the current known contacts foreach (const ChannelInfo &contactListChannel, contactListChannels) { ChannelPtr channel = contactListChannel.channel; if (!channel) { continue; } cachedAllKnownContacts.unite(channel->groupContacts()); cachedAllKnownContacts.unite(channel->groupLocalPendingContacts()); cachedAllKnownContacts.unite(channel->groupRemotePendingContacts()); } updateContactsPresenceState(); Q_ASSERT(introspectPendingOp); if (!contactManager->connection()->requestedFeatures().contains( Connection::FeatureRosterGroups)) { // Will emit stateChanged() signal when the op is finished in idle // callback. This is to ensure FeatureRoster is marked ready. connect(introspectPendingOp, SIGNAL(finished(Tp::PendingOperation *)), SLOT(setStateSuccess())); } else { Q_ASSERT(!groupsSetSuccess); groupsSetSuccess = true; } introspectPendingOp->setFinished(); introspectPendingOp = 0; } } void ContactManager::Roster::gotContactListGroupsProperties(PendingOperation *op) { Q_ASSERT(introspectGroupsPendingOp != NULL); if (groupsSetSuccess) { // Connect here, so we catch the following and the other failure cases connect(introspectGroupsPendingOp, SIGNAL(finished(Tp::PendingOperation *)), SLOT(setStateSuccess())); } if (op->isError()) { warning() << "Getting contact list groups properties failed:" << op->errorName() << '-' << op->errorMessage(); introspectGroupsPendingOp->setFinishedWithError( op->errorName(), op->errorMessage()); introspectGroupsPendingOp = 0; return; } debug() << "Got contact list groups properties"; PendingVariantMap *pvm = qobject_cast(op); QVariantMap props = pvm->result(); cachedAllKnownGroups = qdbus_cast(props[QLatin1String("Groups")]).toSet(); contactListGroupPropertiesReceived = true; processingContactListChanges = true; PendingContacts *pc = contactManager->upgradeContacts( contactManager->allKnownContacts().toList(), Contact::FeatureRosterGroups); connect(pc, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onContactListContactsUpgraded(Tp::PendingOperation*))); } void ContactManager::Roster::onContactListContactsUpgraded(PendingOperation *op) { Q_ASSERT(processingContactListChanges); processingContactListChanges = false; Q_ASSERT(introspectGroupsPendingOp != NULL); if (op->isError()) { warning() << "Upgrading contacts with group membership failed:" << op->errorName() << '-' << op->errorMessage(); introspectGroupsPendingOp->setFinishedWithError( op->errorName(), op->errorMessage()); introspectGroupsPendingOp = 0; processContactListChanges(); return; } introspectGroupsPendingOp->setFinished(); introspectGroupsPendingOp = 0; processContactListChanges(); } void ContactManager::Roster::onNewChannels(const Tp::ChannelDetailsList &channelDetailsList) { ConnectionPtr conn(contactManager->connection()); QString channelType; uint handleType; foreach (const ChannelDetails &channelDetails, channelDetailsList) { channelType = channelDetails.properties.value( TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType")).toString(); if (channelType != TP_QT_IFACE_CHANNEL_TYPE_CONTACT_LIST) { continue; } handleType = channelDetails.properties.value( TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType")).toUInt(); if (handleType != Tp::HandleTypeGroup) { continue; } ++featureContactListGroupsTodo; // decremented in onContactListGroupChannelReady ChannelPtr channel = Channel::create(conn, channelDetails.channel.path(), channelDetails.properties); pendingContactListGroupChannels.append(channel); // deref connection refcount here as connection will keep a ref to channel and we don't // want a contact list group channel keeping a ref of connection, otherwise connection will // leak, thus the channels. channel->connection()->deref(); connect(channel->becomeReady(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onContactListGroupChannelReady(Tp::PendingOperation*))); } } void ContactManager::Roster::onContactListGroupChannelReady(PendingOperation *op) { --featureContactListGroupsTodo; // incremented in onNewChannels ConnectionPtr conn(contactManager->connection()); if (introspectGroupsPendingOp) { checkContactListGroupsReady(); } else { PendingReady *pr = qobject_cast(op); ChannelPtr channel = ChannelPtr::qObjectCast(pr->proxy()); QString id = addContactListGroupChannel(channel); emit contactManager->groupAdded(id); pendingContactListGroupChannels.removeOne(channel); } } void ContactManager::Roster::gotChannels(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (!reply.isError()) { debug() << "Got channels"; onNewChannels(qdbus_cast(reply.value())); } else { warning().nospace() << "Getting channels failed with " << reply.error().name() << ":" << reply.error().message(); } --featureContactListGroupsTodo; // incremented in introspectRosterGroups checkContactListGroupsReady(); watcher->deleteLater(); } void ContactManager::Roster::onStoredChannelMembersChanged( const Contacts &groupMembersAdded, const Contacts &groupLocalPendingMembersAdded, const Contacts &groupRemotePendingMembersAdded, const Contacts &groupMembersRemoved, const Channel::GroupMemberChangeDetails &details) { if (!groupLocalPendingMembersAdded.isEmpty()) { warning() << "Found local pending contacts on stored list"; } if (!groupRemotePendingMembersAdded.isEmpty()) { warning() << "Found remote pending contacts on stored list"; } foreach (ContactPtr contact, groupMembersAdded) { debug() << "Contact" << contact->id() << "on stored list"; } foreach (ContactPtr contact, groupMembersRemoved) { debug() << "Contact" << contact->id() << "removed from stored list"; } // Perform the needed computation for allKnownContactsChanged computeKnownContactsChanges(groupMembersAdded, groupLocalPendingMembersAdded, groupRemotePendingMembersAdded, groupMembersRemoved, details); } void ContactManager::Roster::onSubscribeChannelMembersChanged( const Contacts &groupMembersAdded, const Contacts &groupLocalPendingMembersAdded, const Contacts &groupRemotePendingMembersAdded, const Contacts &groupMembersRemoved, const Channel::GroupMemberChangeDetails &details) { if (!groupLocalPendingMembersAdded.isEmpty()) { warning() << "Found local pending contacts on subscribe list"; } foreach (ContactPtr contact, groupMembersAdded) { debug() << "Contact" << contact->id() << "on subscribe list"; contact->setSubscriptionState(SubscriptionStateYes); } foreach (ContactPtr contact, groupRemotePendingMembersAdded) { debug() << "Contact" << contact->id() << "added to subscribe list"; contact->setSubscriptionState(SubscriptionStateAsk); } foreach (ContactPtr contact, groupMembersRemoved) { debug() << "Contact" << contact->id() << "removed from subscribe list"; contact->setSubscriptionState(SubscriptionStateNo); } // Perform the needed computation for allKnownContactsChanged computeKnownContactsChanges(groupMembersAdded, groupLocalPendingMembersAdded, groupRemotePendingMembersAdded, groupMembersRemoved, details); } void ContactManager::Roster::onPublishChannelMembersChanged( const Contacts &groupMembersAdded, const Contacts &groupLocalPendingMembersAdded, const Contacts &groupRemotePendingMembersAdded, const Contacts &groupMembersRemoved, const Channel::GroupMemberChangeDetails &details) { if (!groupRemotePendingMembersAdded.isEmpty()) { warning() << "Found remote pending contacts on publish list"; } foreach (ContactPtr contact, groupMembersAdded) { debug() << "Contact" << contact->id() << "on publish list"; contact->setPublishState(SubscriptionStateYes); } foreach (ContactPtr contact, groupLocalPendingMembersAdded) { debug() << "Contact" << contact->id() << "added to publish list"; contact->setPublishState(SubscriptionStateAsk, details.message()); } foreach (ContactPtr contact, groupMembersRemoved) { debug() << "Contact" << contact->id() << "removed from publish list"; contact->setPublishState(SubscriptionStateNo); } if (!groupLocalPendingMembersAdded.isEmpty()) { emit contactManager->presencePublicationRequested(groupLocalPendingMembersAdded); } // Perform the needed computation for allKnownContactsChanged computeKnownContactsChanges(groupMembersAdded, groupLocalPendingMembersAdded, groupRemotePendingMembersAdded, groupMembersRemoved, details); } void ContactManager::Roster::onDenyChannelMembersChanged( const Contacts &groupMembersAdded, const Contacts &groupLocalPendingMembersAdded, const Contacts &groupRemotePendingMembersAdded, const Contacts &groupMembersRemoved, const Channel::GroupMemberChangeDetails &details) { if (!groupLocalPendingMembersAdded.isEmpty()) { warning() << "Found local pending contacts on deny list"; } if (!groupRemotePendingMembersAdded.isEmpty()) { warning() << "Found remote pending contacts on deny list"; } foreach (ContactPtr contact, groupMembersAdded) { debug() << "Contact" << contact->id() << "added to deny list"; contact->setBlocked(true); } foreach (ContactPtr contact, groupMembersRemoved) { debug() << "Contact" << contact->id() << "removed from deny list"; contact->setBlocked(false); } // Perform the needed computation for allKnownContactsChanged computeKnownContactsChanges(groupMembersAdded, Contacts(), Contacts(), groupMembersRemoved, details); } void ContactManager::Roster::onContactListGroupMembersChanged( const Tp::Contacts &groupMembersAdded, const Tp::Contacts &groupLocalPendingMembersAdded, const Tp::Contacts &groupRemotePendingMembersAdded, const Tp::Contacts &groupMembersRemoved, const Tp::Channel::GroupMemberChangeDetails &details) { ChannelPtr contactListGroupChannel = ChannelPtr( qobject_cast(sender())); QString id = contactListGroupChannel->immutableProperties().value( TP_QT_IFACE_CHANNEL + QLatin1String(".TargetID")).toString(); foreach (const ContactPtr &contact, groupMembersAdded) { contact->setAddedToGroup(id); } foreach (const ContactPtr &contact, groupMembersRemoved) { contact->setRemovedFromGroup(id); } emit contactManager->groupMembersChanged(id, groupMembersAdded, groupMembersRemoved, details); } void ContactManager::Roster::onContactListGroupRemoved(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage) { Q_UNUSED(errorName); Q_UNUSED(errorMessage); // Is it correct to assume that if an user-defined contact list // gets invalidated it means it was removed? Spec states that if a // user-defined contact list gets closed it was removed, and Channel // invalidates itself when it gets closed. ChannelPtr contactListGroupChannel = ChannelPtr(qobject_cast(proxy)); QString id = contactListGroupChannel->immutableProperties().value( TP_QT_IFACE_CHANNEL + QLatin1String(".TargetID")).toString(); contactListGroupChannels.remove(id); removedContactListGroupChannels.append(contactListGroupChannel); disconnect(contactListGroupChannel.data(), 0, 0, 0); emit contactManager->groupRemoved(id); } void ContactManager::Roster::introspectContactBlocking() { debug() << "Requesting ContactBlockingCapabilities property"; ConnectionPtr conn(contactManager->connection()); Client::ConnectionInterfaceContactBlockingInterface *iface = conn->interface(); PendingVariant *pv = iface->requestPropertyContactBlockingCapabilities(); connect(pv, SIGNAL(finished(Tp::PendingOperation*)), SLOT(gotContactBlockingCapabilities(Tp::PendingOperation*))); } void ContactManager::Roster::introspectContactBlockingBlockedContacts() { ConnectionPtr conn(contactManager->connection()); Client::ConnectionInterfaceContactBlockingInterface *iface = conn->interface(); Q_ASSERT(iface); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( iface->RequestBlockedContacts(), contactManager); connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotContactBlockingBlockedContacts(QDBusPendingCallWatcher*))); connect(iface, SIGNAL(BlockedContactsChanged(Tp::HandleIdentifierMap,Tp::HandleIdentifierMap)), SLOT(onContactBlockingBlockedContactsChanged(Tp::HandleIdentifierMap,Tp::HandleIdentifierMap))); } void ContactManager::Roster::introspectContactList() { debug() << "Requesting ContactList properties"; ConnectionPtr conn(contactManager->connection()); Client::ConnectionInterfaceContactListInterface *iface = conn->interface(); connect(iface, SIGNAL(ContactListStateChanged(uint)), SLOT(onContactListStateChanged(uint))); connect(iface, SIGNAL(ContactsChangedWithID(Tp::ContactSubscriptionMap,Tp::HandleIdentifierMap,Tp::HandleIdentifierMap)), SLOT(onContactListContactsChangedWithId(Tp::ContactSubscriptionMap,Tp::HandleIdentifierMap,Tp::HandleIdentifierMap))); connect(iface, SIGNAL(ContactsChanged(Tp::ContactSubscriptionMap,Tp::UIntList)), SLOT(onContactListContactsChanged(Tp::ContactSubscriptionMap,Tp::UIntList))); PendingVariantMap *pvm = iface->requestAllProperties(); connect(pvm, SIGNAL(finished(Tp::PendingOperation*)), SLOT(gotContactListProperties(Tp::PendingOperation*))); } void ContactManager::Roster::introspectContactListContacts() { ConnectionPtr conn(contactManager->connection()); Client::ConnectionInterfaceContactListInterface *iface = conn->interface(); Features features(conn->contactFactory()->features()); Features supportedFeatures(contactManager->supportedFeatures()); QSet interfaces; foreach (const Feature &feature, features) { contactManager->ensureTracking(feature); if (supportedFeatures.contains(feature)) { // Only query interfaces which are reported as supported to not get an error interfaces.insert(contactManager->featureToInterface(feature)); } } interfaces.insert(TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_LIST); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( iface->GetContactListAttributes(interfaces.toList(), true), contactManager); connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotContactListContacts(QDBusPendingCallWatcher*))); } void ContactManager::Roster::processContactListChanges() { if (processingContactListChanges || contactListChangesQueue.isEmpty()) { return; } processingContactListChanges = true; (this->*(contactListChangesQueue.dequeue()))(); } void ContactManager::Roster::processContactListBlockedContactsChanged() { BlockedContactsChangedInfo info = contactListBlockedContactsChangedQueue.head(); UIntList contacts; HandleIdentifierMap::const_iterator begin = info.added.constBegin(); HandleIdentifierMap::const_iterator end = info.added.constEnd(); for (HandleIdentifierMap::const_iterator i = begin; i != end; ++i) { uint bareHandle = i.key(); contacts << bareHandle; } begin = info.removed.constBegin(); end = info.removed.constEnd(); for (HandleIdentifierMap::const_iterator i = begin; i != end; ++i) { uint bareHandle = i.key(); contacts << bareHandle; } Features features; if (contactManager->connection()->isReady(Connection::FeatureRosterGroups)) { features << Contact::FeatureRosterGroups; } PendingContacts *pc = contactManager->contactsForHandles(contacts, features); connect(pc, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onContactListBlockedContactsConstructed(Tp::PendingOperation*))); } void ContactManager::Roster::processContactListUpdates() { UpdateInfo info = contactListUpdatesQueue.head(); // construct Contact objects for all contacts in added to the contact list UIntList contacts; ContactSubscriptionMap::const_iterator begin = info.changes.constBegin(); ContactSubscriptionMap::const_iterator end = info.changes.constEnd(); for (ContactSubscriptionMap::const_iterator i = begin; i != end; ++i) { uint bareHandle = i.key(); contacts << bareHandle; } Features features; if (contactManager->connection()->isReady(Connection::FeatureRosterGroups)) { features << Contact::FeatureRosterGroups; } PendingContacts *pc = contactManager->contactsForHandles(contacts, features); connect(pc, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onContactListNewContactsConstructed(Tp::PendingOperation*))); } void ContactManager::Roster::processContactListGroupsUpdates() { GroupsUpdateInfo info = contactListGroupsUpdatesQueue.dequeue(); foreach (const QString &group, info.groupsAdded) { Contacts contacts; foreach (uint bareHandle, info.contacts) { ContactPtr contact = contactManager->lookupContactByHandle(bareHandle); if (!contact) { warning() << "contact with handle" << bareHandle << "was added to a group but " "never added to the contact list, ignoring"; continue; } contacts << contact; contact->setAddedToGroup(group); } emit contactManager->groupMembersChanged(group, contacts, Contacts(), Channel::GroupMemberChangeDetails()); } foreach (const QString &group, info.groupsRemoved) { Contacts contacts; foreach (uint bareHandle, info.contacts) { ContactPtr contact = contactManager->lookupContactByHandle(bareHandle); if (!contact) { warning() << "contact with handle" << bareHandle << "was removed from a group but " "never added to the contact list, ignoring"; continue; } contacts << contact; contact->setRemovedFromGroup(group); } emit contactManager->groupMembersChanged(group, Contacts(), contacts, Channel::GroupMemberChangeDetails()); } processingContactListChanges = false; processContactListChanges(); } void ContactManager::Roster::processContactListGroupsCreated() { QStringList names = contactListGroupsCreatedQueue.dequeue(); foreach (const QString &name, names) { cachedAllKnownGroups.insert(name); emit contactManager->groupAdded(name); } processingContactListChanges = false; processContactListChanges(); } void ContactManager::Roster::processContactListGroupRenamed() { GroupRenamedInfo info = contactListGroupRenamedQueue.dequeue(); cachedAllKnownGroups.remove(info.oldName); cachedAllKnownGroups.insert(info.newName); emit contactManager->groupRenamed(info.oldName, info.newName); processingContactListChanges = false; processContactListChanges(); } void ContactManager::Roster::processContactListGroupsRemoved() { QStringList names = contactListGroupsRemovedQueue.dequeue(); foreach (const QString &name, names) { cachedAllKnownGroups.remove(name); emit contactManager->groupRemoved(name); } processingContactListChanges = false; processContactListChanges(); } void ContactManager::Roster::processFinishedModify() { ModifyFinishOp *op = modifyFinishQueue.dequeue(); // Only continue processing changes (and thus, emitting change signals) when the op has signaled // finish (it'll only do this after we've returned to the mainloop) connect(op, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onModifyFinishSignaled())); op->finish(); } PendingOperation *ContactManager::Roster::queuedFinishVoid(const QDBusPendingCall &call) { PendingOperation *actual = new PendingVoid(call, contactManager->connection()); connect(actual, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onModifyFinished(Tp::PendingOperation*))); ModifyFinishOp *toReturn = new ModifyFinishOp(contactManager->connection()); returnedModifyOps.insert(actual, toReturn); return toReturn; } void ContactManager::Roster::onModifyFinishSignaled() { processingContactListChanges = false; processContactListChanges(); } void ContactManager::Roster::setContactListChannelsReady() { if (!usingFallbackContactList) { Q_ASSERT(!contactListChannels.contains(ChannelInfo::TypeSubscribe)); Q_ASSERT(!contactListChannels.contains(ChannelInfo::TypePublish)); Q_ASSERT(!contactListChannels.contains(ChannelInfo::TypeStored)); } if (contactListChannels.contains(ChannelInfo::TypeSubscribe)) { subscribeChannel = contactListChannels[ChannelInfo::TypeSubscribe].channel; } if (contactListChannels.contains(ChannelInfo::TypePublish)) { publishChannel = contactListChannels[ChannelInfo::TypePublish].channel; } if (contactListChannels.contains(ChannelInfo::TypeStored)) { storedChannel = contactListChannels[ChannelInfo::TypeStored].channel; } if (contactListChannels.contains(ChannelInfo::TypeDeny)) { denyChannel = contactListChannels[ChannelInfo::TypeDeny].channel; } uint type; ChannelPtr channel; const char *method; for (QHash::const_iterator i = contactListChannels.constBegin(); i != contactListChannels.constEnd(); ++i) { type = i.key(); channel = i.value().channel; if (!channel) { continue; } if (type == ChannelInfo::TypeStored) { method = SLOT(onStoredChannelMembersChanged( Tp::Contacts, Tp::Contacts, Tp::Contacts, Tp::Contacts, Tp::Channel::GroupMemberChangeDetails)); } else if (type == ChannelInfo::TypeSubscribe) { method = SLOT(onSubscribeChannelMembersChanged( Tp::Contacts, Tp::Contacts, Tp::Contacts, Tp::Contacts, Tp::Channel::GroupMemberChangeDetails)); } else if (type == ChannelInfo::TypePublish) { method = SLOT(onPublishChannelMembersChanged( Tp::Contacts, Tp::Contacts, Tp::Contacts, Tp::Contacts, Tp::Channel::GroupMemberChangeDetails)); } else if (type == ChannelInfo::TypeDeny) { method = SLOT(onDenyChannelMembersChanged( Tp::Contacts, Tp::Contacts, Tp::Contacts, Tp::Contacts, Tp::Channel::GroupMemberChangeDetails)); } else { continue; } connect(channel.data(), SIGNAL(groupMembersChanged( Tp::Contacts, Tp::Contacts, Tp::Contacts, Tp::Contacts, Tp::Channel::GroupMemberChangeDetails)), method); } } void ContactManager::Roster::updateContactsBlockState() { Q_ASSERT(!hasContactBlockingInterface); if (!denyChannel) { return; } Contacts denyContacts = denyChannel->groupContacts(); foreach (const ContactPtr &contact, denyContacts) { contact->setBlocked(true); } } void ContactManager::Roster::updateContactsPresenceState() { if (!subscribeChannel && !publishChannel) { return; } Contacts subscribeContacts; Contacts subscribeContactsRP; if (subscribeChannel) { subscribeContacts = subscribeChannel->groupContacts(); subscribeContactsRP = subscribeChannel->groupRemotePendingContacts(); } Contacts publishContacts; Contacts publishContactsLP; if (publishChannel) { publishContacts = publishChannel->groupContacts(); publishContactsLP = publishChannel->groupLocalPendingContacts(); } Contacts contacts = cachedAllKnownContacts; foreach (ContactPtr contact, contacts) { if (subscribeChannel) { // not in "subscribe" -> No, in "subscribe" lp -> Ask, in "subscribe" current -> Yes if (subscribeContacts.contains(contact)) { contact->setSubscriptionState(SubscriptionStateYes); } else if (subscribeContactsRP.contains(contact)) { contact->setSubscriptionState(SubscriptionStateAsk); } else { contact->setSubscriptionState(SubscriptionStateNo); } } if (publishChannel) { // not in "publish" -> No, in "subscribe" rp -> Ask, in "publish" current -> Yes if (publishContacts.contains(contact)) { contact->setPublishState(SubscriptionStateYes); } else if (publishContactsLP.contains(contact)) { contact->setPublishState(SubscriptionStateAsk, publishChannel->groupLocalPendingContactChangeInfo(contact).message()); } else { contact->setPublishState(SubscriptionStateNo); } } } } void ContactManager::Roster::computeKnownContactsChanges(const Tp::Contacts& added, const Tp::Contacts& pendingAdded, const Tp::Contacts& remotePendingAdded, const Tp::Contacts& removed, const Channel::GroupMemberChangeDetails &details) { // First of all, compute the real additions/removals based upon our cache Tp::Contacts realAdded; realAdded.unite(added); realAdded.unite(pendingAdded); realAdded.unite(remotePendingAdded); realAdded.subtract(cachedAllKnownContacts); Tp::Contacts realRemoved = removed; realRemoved.intersect(cachedAllKnownContacts); // Check if realRemoved have been _really_ removed from all lists foreach (const ChannelInfo &contactListChannel, contactListChannels) { ChannelPtr channel = contactListChannel.channel; if (!channel) { continue; } realRemoved.subtract(channel->groupContacts()); realRemoved.subtract(channel->groupLocalPendingContacts()); realRemoved.subtract(channel->groupRemotePendingContacts()); } // ...and from the Conn.I.ContactList / Conn.I.ContactBlocking contacts realRemoved.subtract(contactListContacts); realRemoved.subtract(blockedContacts); // Are there any real changes? if (!realAdded.isEmpty() || !realRemoved.isEmpty()) { // Yes, update our "cache" and emit the signal cachedAllKnownContacts.unite(realAdded); cachedAllKnownContacts.subtract(realRemoved); emit contactManager->allKnownContactsChanged(realAdded, realRemoved, details); } } void ContactManager::Roster::checkContactListGroupsReady() { if (featureContactListGroupsTodo != 0) { return; } if (groupsSetSuccess) { Q_ASSERT(contactManager->state() != ContactListStateSuccess); if (introspectGroupsPendingOp) { // Will emit stateChanged() signal when the op is finished in idle // callback. This is to ensure FeatureRosterGroups is marked ready. connect(introspectGroupsPendingOp, SIGNAL(finished(Tp::PendingOperation *)), SLOT(setStateSuccess())); } else { setStateSuccess(); } groupsSetSuccess = false; } setContactListGroupChannelsReady(); if (introspectGroupsPendingOp) { introspectGroupsPendingOp->setFinished(); introspectGroupsPendingOp = 0; } pendingContactListGroupChannels.clear(); } void ContactManager::Roster::setContactListGroupChannelsReady() { Q_ASSERT(usingFallbackContactList == true); Q_ASSERT(contactListGroupChannels.isEmpty()); foreach (const ChannelPtr &contactListGroupChannel, pendingContactListGroupChannels) { addContactListGroupChannel(contactListGroupChannel); } } QString ContactManager::Roster::addContactListGroupChannel(const ChannelPtr &contactListGroupChannel) { QString id = contactListGroupChannel->immutableProperties().value( TP_QT_IFACE_CHANNEL + QLatin1String(".TargetID")).toString(); contactListGroupChannels.insert(id, contactListGroupChannel); connect(contactListGroupChannel.data(), SIGNAL(groupMembersChanged( Tp::Contacts, Tp::Contacts, Tp::Contacts, Tp::Contacts, Tp::Channel::GroupMemberChangeDetails)), SLOT(onContactListGroupMembersChanged( Tp::Contacts, Tp::Contacts, Tp::Contacts, Tp::Contacts, Tp::Channel::GroupMemberChangeDetails))); connect(contactListGroupChannel.data(), SIGNAL(invalidated(Tp::DBusProxy*,QString,QString)), SLOT(onContactListGroupRemoved(Tp::DBusProxy*,QString,QString))); foreach (const ContactPtr &contact, contactListGroupChannel->groupContacts()) { contact->setAddedToGroup(id); } return id; } /**** ContactManager::Roster::ChannelInfo ****/ QString ContactManager::Roster::ChannelInfo::identifierForType(Type type) { static QString identifiers[LastType] = { QLatin1String("subscribe"), QLatin1String("publish"), QLatin1String("stored"), QLatin1String("deny"), }; return identifiers[type]; } uint ContactManager::Roster::ChannelInfo::typeForIdentifier(const QString &identifier) { static QHash types; if (types.isEmpty()) { types.insert(QLatin1String("subscribe"), TypeSubscribe); types.insert(QLatin1String("publish"), TypePublish); types.insert(QLatin1String("stored"), TypeStored); types.insert(QLatin1String("deny"), TypeDeny); } if (types.contains(identifier)) { return types[identifier]; } return (uint) -1; } /**** ContactManager::Roster::ModifyFinishOp ****/ ContactManager::Roster::ModifyFinishOp::ModifyFinishOp(const ConnectionPtr &conn) : PendingOperation(conn) { } void ContactManager::Roster::ModifyFinishOp::setError(const QString &errorName, const QString &errorMessage) { Q_ASSERT(this->errorName.isEmpty()); Q_ASSERT(this->errorMessage.isEmpty()); Q_ASSERT(!errorName.isEmpty()); this->errorName = errorName; this->errorMessage = errorMessage; } void ContactManager::Roster::ModifyFinishOp::finish() { if (errorName.isEmpty()) { setFinished(); } else { setFinishedWithError(errorName, errorMessage); } } /**** ContactManager::Roster::RemoveGroupOp ****/ ContactManager::Roster::RemoveGroupOp::RemoveGroupOp(const ChannelPtr &channel) : PendingOperation(channel) { Contacts contacts = channel->groupContacts(); if (!contacts.isEmpty()) { connect(channel->groupRemoveContacts(contacts.toList()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onContactsRemoved(Tp::PendingOperation*))); } else { connect(channel->requestClose(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onChannelClosed(Tp::PendingOperation*))); } } void ContactManager::Roster::RemoveGroupOp::onContactsRemoved(PendingOperation *op) { if (op->isError()) { setFinishedWithError(op->errorName(), op->errorMessage()); return; } // Let's ignore possible errors and try to remove the group ChannelPtr channel = ChannelPtr(qobject_cast((Channel *) object().data())); connect(channel->requestClose(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onChannelClosed(Tp::PendingOperation*))); } void ContactManager::Roster::RemoveGroupOp::onChannelClosed(PendingOperation *op) { if (!op->isError()) { setFinished(); } else { setFinishedWithError(op->errorName(), op->errorMessage()); } } } // Tp telepathy-qt-0.9.3/TelepathyQt/BaseProtocolAddressingInterface0000644000175200001440000000043112000056607027022 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_BaseProtocolAddressingInterface_HEADER_GUARD_ #define _TelepathyQt_BaseProtocolAddressingInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/generic-property-filter.dox0000644000175200001440000000246012000056607026157 0ustar00collabora-develusers00000000000000/* * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 */ /** * \class Tp::GenericPropertyFilter * \ingroup utils * \headerfile TelepathyQt/generic-property-filter.h * * \brief The GenericPropertyFilter class provides a generic filter object * to be used to filter objects by properties. * * Specialized classes such as AccountPropertyFilter are also provided and * should be used where appropriate. */ telepathy-qt-0.9.3/TelepathyQt/media-stream-handler.h0000644000175200001440000000337412000056607025023 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008 Collabora Ltd. * @copyright Copyright (C) 2008 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_media_stream_handler_h_HEADER_GUARD_ #define _TelepathyQt_media_stream_handler_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif /** * \addtogroup clientsideproxies Client-side proxies * * Proxy objects representing remote service objects accessed via D-Bus. * * In addition to providing direct access to methods, signals and properties * exported by the remote objects, some of these proxies offer features like * automatic inspection of remote object capabilities, property tracking, * backwards compatibility helpers for older services and other utilities. */ /** * \defgroup clientmstrh Media stream handler proxies * \ingroup clientsideproxies * * Proxy objects representing remote Telepathy MediaStreamHandler objects. */ #include #endif telepathy-qt-0.9.3/TelepathyQt/tls-certificate.h0000644000175200001440000000212312000056607024111 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @license LGPL 2.1 * * 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 _TelepathyQt_tls_certificate_h_HEADER_GUARD_ #define _TelepathyQt_tls_certificate_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #endif telepathy-qt-0.9.3/TelepathyQt/base-connection-manager.h0000644000175200001440000000656412000056607025523 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_base_connection_manager_h_HEADER_GUARD_ #define _TelepathyQt_base_connection_manager_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include class QString; namespace Tp { class TP_QT_EXPORT BaseConnectionManager : public DBusService { Q_OBJECT Q_DISABLE_COPY(BaseConnectionManager) public: static BaseConnectionManagerPtr create(const QString &name) { return BaseConnectionManagerPtr(new BaseConnectionManager( QDBusConnection::sessionBus(), name)); } template static SharedPtr create(const QString &name) { return SharedPtr(new BaseConnectionManagerSubclass( QDBusConnection::sessionBus(), name)); } static BaseConnectionManagerPtr create(const QDBusConnection &dbusConnection, const QString &name) { return BaseConnectionManagerPtr(new BaseConnectionManager(dbusConnection, name)); } template static SharedPtr create(const QDBusConnection &dbusConnection, const QString &name) { return SharedPtr(new BaseConnectionManagerSubclass( dbusConnection, name)); } virtual ~BaseConnectionManager(); QString name() const; QVariantMap immutableProperties() const; QList protocols() const; BaseProtocolPtr protocol(const QString &protocolName) const; bool hasProtocol(const QString &protocolName) const; bool addProtocol(const BaseProtocolPtr &protocol); bool registerObject(DBusError *error = NULL); QList connections() const; Q_SIGNALS: void newConnection(const BaseConnectionPtr &connection); protected: BaseConnectionManager(const QDBusConnection &dbusConnection, const QString &name); virtual bool registerObject(const QString &busName, const QString &objectPath, DBusError *error); private Q_SLOTS: TP_QT_NO_EXPORT void removeConnection(); private: TP_QT_NO_EXPORT void addConnection(const BaseConnectionPtr &connection); class Adaptee; friend class Adaptee; class Private; friend class Private; Private *mPriv; }; } #endif telepathy-qt-0.9.3/TelepathyQt/connection-manager.cpp0000644000175200001440000012376712000056607025153 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2010 Collabora Ltd. * @copyright Copyright (C) 2008-2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include #include "TelepathyQt/connection-manager-internal.h" #include "TelepathyQt/_gen/cli-connection-manager-body.hpp" #include "TelepathyQt/_gen/cli-connection-manager.moc.hpp" #include "TelepathyQt/_gen/connection-manager.moc.hpp" #include "TelepathyQt/_gen/connection-manager-internal.moc.hpp" #include "TelepathyQt/_gen/connection-manager-lowlevel.moc.hpp" #include "TelepathyQt/debug-internal.h" #include "TelepathyQt/manager-file.h" #include #include #include #include #include #include #include #include #include #include #include #include namespace Tp { ConnectionManager::Private::PendingNames::PendingNames(const QDBusConnection &bus) : PendingStringList(SharedPtr()), mBus(bus) { mMethodsQueue.enqueue(QLatin1String("ListNames")); mMethodsQueue.enqueue(QLatin1String("ListActivatableNames")); QTimer::singleShot(0, this, SLOT(continueProcessing())); } void ConnectionManager::Private::PendingNames::onCallFinished(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (!reply.isError()) { parseResult(reply.value()); continueProcessing(); } else { warning() << "Failure: error " << reply.error().name() << ": " << reply.error().message(); setFinishedWithError(reply.error()); } watcher->deleteLater(); } void ConnectionManager::Private::PendingNames::continueProcessing() { if (!mMethodsQueue.isEmpty()) { QLatin1String method = mMethodsQueue.dequeue(); invokeMethod(method); } else { debug() << "Success: list" << mResult; setResult(mResult.toList()); setFinished(); } } void ConnectionManager::Private::PendingNames::invokeMethod(const QLatin1String &method) { QDBusPendingCall call = mBus.interface()->asyncCallWithArgumentList( method, QList()); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(onCallFinished(QDBusPendingCallWatcher*))); } void ConnectionManager::Private::PendingNames::parseResult(const QStringList &names) { foreach (const QString name, names) { if (name.startsWith(TP_QT_IFACE_CONNECTION_MANAGER + QLatin1String("."))) { mResult << name.right(name.length() - 44); } } } const Feature ConnectionManager::Private::ProtocolWrapper::FeatureCore = Feature(QLatin1String(ConnectionManager::Private::ProtocolWrapper::staticMetaObject.className()), 0, true); ConnectionManager::Private::ProtocolWrapper::ProtocolWrapper( const ConnectionManagerPtr &cm, const QString &objectPath, const QString &name, const QVariantMap &props) : StatelessDBusProxy(cm->dbusConnection(), cm->busName(), objectPath, FeatureCore), OptionalInterfaceFactory(this), mReadinessHelper(readinessHelper()), mInfo(ProtocolInfo(cm, name)), mImmutableProps(props), mHasMainProps(false), mHasAvatarsProps(false), mHasPresenceProps(false), mHasAddressingProps(false) { fillRCCs(); ReadinessHelper::Introspectables introspectables; // As Protocol does not have predefined statuses let's simulate one (0) ReadinessHelper::Introspectable introspectableCore( QSet() << 0, // makesSenseForStatuses Features(), // dependsOnFeatures QStringList(), // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &ProtocolWrapper::introspectMain, this); introspectables[FeatureCore] = introspectableCore; mReadinessHelper->addIntrospectables(introspectables); } ConnectionManager::Private::ProtocolWrapper::~ProtocolWrapper() { } void ConnectionManager::Private::ProtocolWrapper::introspectMain( ConnectionManager::Private::ProtocolWrapper *self) { if (self->extractImmutableProperties()) { debug() << "Got everything we want from the immutable props for" << self->info().name(); self->continueIntrospection(); return; } if (!self->mHasMainProps) { self->introspectQueue.enqueue(&ProtocolWrapper::introspectMainProperties); } else { self->introspectInterfaces(); } self->continueIntrospection(); } void ConnectionManager::Private::ProtocolWrapper::introspectMainProperties() { Client::ProtocolInterface *protocol = baseInterface(); Q_ASSERT(protocol != 0); debug() << "Calling Properties::GetAll(Protocol) for" << info().name(); PendingVariantMap *pvm = protocol->requestAllProperties(); connect(pvm, SIGNAL(finished(Tp::PendingOperation*)), SLOT(gotMainProperties(Tp::PendingOperation*))); } void ConnectionManager::Private::ProtocolWrapper::introspectInterfaces() { if (!mHasAvatarsProps) { if (hasInterface(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS)) { introspectQueue.enqueue(&ProtocolWrapper::introspectAvatars); } else { debug() << "Full functionality requires CM support for the Protocol.Avatars interface"; } } if (!mHasPresenceProps) { if (hasInterface(TP_QT_IFACE_PROTOCOL_INTERFACE_PRESENCE)) { introspectQueue.enqueue(&ProtocolWrapper::introspectPresence); } else { debug() << "Full functionality requires CM support for the Protocol.Presence interface"; } } if (!mHasAddressingProps) { if (hasInterface(TP_QT_IFACE_PROTOCOL_INTERFACE_ADDRESSING)) { introspectQueue.enqueue(&ProtocolWrapper::introspectAddressing); } else { debug() << "Full functionality requires CM support for the Protocol.Addressing interface"; } } } void ConnectionManager::Private::ProtocolWrapper::introspectAvatars() { Client::ProtocolInterfaceAvatarsInterface *avatars = avatarsInterface(); Q_ASSERT(avatars != 0); debug() << "Calling Properties::GetAll(Protocol.Avatars) for" << info().name(); PendingVariantMap *pvm = avatars->requestAllProperties(); connect(pvm, SIGNAL(finished(Tp::PendingOperation*)), SLOT(gotAvatarsProperties(Tp::PendingOperation*))); } void ConnectionManager::Private::ProtocolWrapper::introspectPresence() { Client::ProtocolInterfacePresenceInterface *presence = presenceInterface(); Q_ASSERT(presence != 0); debug() << "Calling Properties::GetAll(Protocol.Presence) for" << info().name(); PendingVariantMap *pvm = presence->requestAllProperties(); connect(pvm, SIGNAL(finished(Tp::PendingOperation*)), SLOT(gotPresenceProperties(Tp::PendingOperation*))); } void ConnectionManager::Private::ProtocolWrapper::introspectAddressing() { Client::ProtocolInterfaceAddressingInterface *addressing = addressingInterface(); Q_ASSERT(addressing != 0); debug() << "Calling Properties::GetAll(Protocol.Addressing) for" << info().name(); PendingVariantMap *pvm = addressing->requestAllProperties(); connect(pvm, SIGNAL(finished(Tp::PendingOperation*)), SLOT(gotAddressingProperties(Tp::PendingOperation*))); } void ConnectionManager::Private::ProtocolWrapper::continueIntrospection() { if (introspectQueue.isEmpty()) { mReadinessHelper->setIntrospectCompleted(FeatureCore, true); } else { (this->*(introspectQueue.dequeue()))(); } } void ConnectionManager::Private::ProtocolWrapper::gotMainProperties( Tp::PendingOperation *op) { if (!op->isError()) { debug() << "Got reply to Properties.GetAll(Protocol)"; PendingVariantMap *pvm = qobject_cast(op); QVariantMap unqualifiedProps = pvm->result(); extractMainProperties(qualifyProperties(TP_QT_IFACE_PROTOCOL, unqualifiedProps)); introspectInterfaces(); } else { warning().nospace() << "Properties.GetAll(Protocol) failed: " << op->errorName() << ": " << op->errorMessage(); warning() << " Full functionality requires CM support for the Protocol interface"; } continueIntrospection(); } void ConnectionManager::Private::ProtocolWrapper::gotAvatarsProperties( Tp::PendingOperation *op) { if (!op->isError()) { debug() << "Got reply to Properties.GetAll(Protocol.Avatars)"; PendingVariantMap *pvm = qobject_cast(op); QVariantMap unqualifiedProps = pvm->result(); extractAvatarsProperties(qualifyProperties(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS, unqualifiedProps)); } else { warning().nospace() << "Properties.GetAll(Protocol.Avatars) failed: " << op->errorName() << ": " << op->errorMessage(); warning() << " Full functionality requires CM support for the Protocol.Avatars interface"; } continueIntrospection(); } void ConnectionManager::Private::ProtocolWrapper::gotPresenceProperties( Tp::PendingOperation *op) { if (!op->isError()) { debug() << "Got reply to Properties.GetAll(Protocol.Presence)"; PendingVariantMap *pvm = qobject_cast(op); QVariantMap unqualifiedProps = pvm->result(); extractPresenceProperties(qualifyProperties(TP_QT_IFACE_PROTOCOL_INTERFACE_PRESENCE, unqualifiedProps)); } else { warning().nospace() << "Properties.GetAll(Protocol.Presence) failed: " << op->errorName() << ": " << op->errorMessage(); warning() << " Full functionality requires CM support for the Protocol.Presence interface"; } continueIntrospection(); } void ConnectionManager::Private::ProtocolWrapper::gotAddressingProperties( Tp::PendingOperation *op) { QVariantMap unqualifiedProps; if (!op->isError()) { debug() << "Got reply to Properties.GetAll(Protocol.Addressing)"; PendingVariantMap *pvm = qobject_cast(op); QVariantMap unqualifiedProps = pvm->result(); extractAddressingProperties(qualifyProperties(TP_QT_IFACE_PROTOCOL_INTERFACE_ADDRESSING, unqualifiedProps)); } else { warning().nospace() << "Properties.GetAll(Protocol.Addressing) failed: " << op->errorName() << ": " << op->errorMessage(); warning() << " Full functionality requires CM support for the Protocol.Addressing interface"; } continueIntrospection(); } QVariantMap ConnectionManager::Private::ProtocolWrapper::qualifyProperties( const QString &ifaceName, const QVariantMap &unqualifiedProps) { QVariantMap qualifiedProps; foreach (const QString &unqualifiedProp, unqualifiedProps.keys()) { qualifiedProps.insert( QString(QLatin1String("%1.%2")). arg(ifaceName). arg(unqualifiedProp), unqualifiedProps.value(unqualifiedProp)); } return qualifiedProps; } void ConnectionManager::Private::ProtocolWrapper::fillRCCs() { RequestableChannelClassList classes; QVariantMap fixedProps; QStringList allowedProps; // Text chatrooms fixedProps.insert( TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_TEXT); fixedProps.insert( TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), static_cast(HandleTypeRoom)); RequestableChannelClass textChatroom = {fixedProps, allowedProps}; classes.append(textChatroom); // 1-1 text chats fixedProps[TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType")] = static_cast(HandleTypeContact); RequestableChannelClass text = {fixedProps, allowedProps}; classes.append(text); // Media calls fixedProps[TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType")] = TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA; RequestableChannelClass media = {fixedProps, allowedProps}; classes.append(media); // Initially audio-only calls allowedProps.push_back( TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialAudio")); RequestableChannelClass initialAudio = {fixedProps, allowedProps}; classes.append(initialAudio); // Initially AV calls allowedProps.push_back( TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialVideo")); RequestableChannelClass initialAV = {fixedProps, allowedProps}; classes.append(initialAV); // Initially video-only calls allowedProps.removeAll( TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialAudio")); RequestableChannelClass initialVideo = {fixedProps, allowedProps}; classes.append(initialVideo); // That also settles upgrading calls, because the media classes don't have ImmutableStreams mInfo.setRequestableChannelClasses(classes); } bool ConnectionManager::Private::ProtocolWrapper::extractImmutableProperties() { extractMainProperties(mImmutableProps); extractAvatarsProperties(mImmutableProps); extractPresenceProperties(mImmutableProps); extractAddressingProperties(mImmutableProps); return mHasMainProps && mHasAvatarsProps && mHasPresenceProps && mHasAddressingProps; } void ConnectionManager::Private::ProtocolWrapper::extractMainProperties(const QVariantMap &props) { mHasMainProps = props.contains(TP_QT_IFACE_PROTOCOL + QLatin1String(".Interfaces")) && props.contains(TP_QT_IFACE_PROTOCOL + QLatin1String(".Parameters")) && props.contains(TP_QT_IFACE_PROTOCOL + QLatin1String(".ConnectionInterfaces")) && props.contains(TP_QT_IFACE_PROTOCOL + QLatin1String(".RequestableChannelClasses")) && props.contains(TP_QT_IFACE_PROTOCOL + QLatin1String(".VCardField")) && props.contains(TP_QT_IFACE_PROTOCOL + QLatin1String(".EnglishName")) && props.contains(TP_QT_IFACE_PROTOCOL + QLatin1String(".Icon")); setInterfaces(qdbus_cast( props[TP_QT_IFACE_PROTOCOL + QLatin1String(".Interfaces")])); mReadinessHelper->setInterfaces(interfaces()); ParamSpecList parameters = qdbus_cast( props[TP_QT_IFACE_PROTOCOL + QLatin1String(".Parameters")]); foreach (const ParamSpec &spec, parameters) { mInfo.addParameter(spec); } mInfo.setVCardField(qdbus_cast( props[TP_QT_IFACE_PROTOCOL + QLatin1String(".VCardField")])); QString englishName = qdbus_cast( props[TP_QT_IFACE_PROTOCOL + QLatin1String(".EnglishName")]); if (englishName.isEmpty()) { QStringList words = mInfo.name().split(QLatin1Char('-')); for (int i = 0; i < words.size(); ++i) { words[i][0] = words[i].at(0).toUpper(); } englishName = words.join(QLatin1String(" ")); } mInfo.setEnglishName(englishName); QString iconName = qdbus_cast( props[TP_QT_IFACE_PROTOCOL + QLatin1String(".Icon")]); if (iconName.isEmpty()) { iconName = QString(QLatin1String("im-%1")).arg(mInfo.name()); } mInfo.setIconName(iconName); // Don't overwrite the everything-is-possible RCCs with an empty list if there is no RCCs key if (props.contains(TP_QT_IFACE_PROTOCOL + QLatin1String(".RequestableChannelClasses"))) { mInfo.setRequestableChannelClasses(qdbus_cast( props[TP_QT_IFACE_PROTOCOL + QLatin1String(".RequestableChannelClasses")])); } } void ConnectionManager::Private::ProtocolWrapper::extractAvatarsProperties(const QVariantMap &props) { mHasAvatarsProps = props.contains(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".SupportedAvatarMIMETypes")) && props.contains(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MinimumAvatarHeight")) && props.contains(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MaximumAvatarHeight")) && props.contains(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".RecommendedAvatarHeight")) && props.contains(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MinimumAvatarWidth")) && props.contains(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MaximumAvatarWidth")) && props.contains(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".RecommendedAvatarWidth")) && props.contains(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MaximumAvatarBytes")); QStringList supportedMimeTypes = qdbus_cast( props[TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".SupportedAvatarMIMETypes")]); uint minHeight = qdbus_cast( props[TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MinimumAvatarHeight")]); uint maxHeight = qdbus_cast( props[TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MaximumAvatarHeight")]); uint recommendedHeight = qdbus_cast( props[TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".RecommendedAvatarHeight")]); uint minWidth = qdbus_cast( props[TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MinimumAvatarWidth")]); uint maxWidth = qdbus_cast( props[TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MaximumAvatarWidth")]); uint recommendedWidth = qdbus_cast( props[TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".RecommendedAvatarWidth")]); uint maxBytes = qdbus_cast( props[TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MaximumAvatarBytes")]); mInfo.setAvatarRequirements(AvatarSpec(supportedMimeTypes, minHeight, maxHeight, recommendedHeight, minWidth, maxWidth, recommendedWidth, maxBytes)); } void ConnectionManager::Private::ProtocolWrapper::extractPresenceProperties(const QVariantMap &props) { mHasPresenceProps = props.contains(TP_QT_IFACE_PROTOCOL_INTERFACE_PRESENCE + QLatin1String(".Statuses")); mInfo.setAllowedPresenceStatuses(PresenceSpecList(qdbus_cast( props[TP_QT_IFACE_PROTOCOL_INTERFACE_PRESENCE + QLatin1String(".Statuses")]))); } void ConnectionManager::Private::ProtocolWrapper::extractAddressingProperties(const QVariantMap &props) { mHasAddressingProps = props.contains(TP_QT_IFACE_PROTOCOL_INTERFACE_ADDRESSING + QLatin1String(".AddressableVCardFields")) && props.contains(TP_QT_IFACE_PROTOCOL_INTERFACE_ADDRESSING + QLatin1String(".AddressableURISchemes")); QStringList vcardFields = qdbus_cast( props[TP_QT_IFACE_PROTOCOL_INTERFACE_ADDRESSING + QLatin1String(".AddressableVCardFields")]); QStringList uriSchemes = qdbus_cast( props[TP_QT_IFACE_PROTOCOL_INTERFACE_ADDRESSING + QLatin1String(".AddressableURISchemes")]); mInfo.setAddressableVCardFields(vcardFields); mInfo.setAddressableUriSchemes(uriSchemes); } ConnectionManager::Private::Private(ConnectionManager *parent, const QString &name, const ConnectionFactoryConstPtr &connFactory, const ChannelFactoryConstPtr &chanFactory, const ContactFactoryConstPtr &contactFactory) : parent(parent), lowlevel(ConnectionManagerLowlevelPtr(new ConnectionManagerLowlevel(parent))), name(name), baseInterface(new Client::ConnectionManagerInterface(parent)), properties(parent->interface()), readinessHelper(parent->readinessHelper()), connFactory(connFactory), chanFactory(chanFactory), contactFactory(contactFactory) { debug() << "Creating new ConnectionManager:" << parent->busName(); if (connFactory->dbusConnection().name() != parent->dbusConnection().name()) { warning() << " The D-Bus connection in the connection factory is not the proxy connection"; } if (chanFactory->dbusConnection().name() != parent->dbusConnection().name()) { warning() << " The D-Bus connection in the channel factory is not the proxy connection"; } ReadinessHelper::Introspectables introspectables; // As ConnectionManager does not have predefined statuses let's simulate one (0) ReadinessHelper::Introspectable introspectableCore( QSet() << 0, // makesSenseForStatuses Features(), // dependsOnFeatures QStringList(), // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::introspectMain, this); introspectables[FeatureCore] = introspectableCore; readinessHelper->addIntrospectables(introspectables); } ConnectionManager::Private::~Private() { delete baseInterface; } bool ConnectionManager::Private::parseConfigFile() { ManagerFile f(name); if (!f.isValid()) { return false; } foreach (const QString &protocol, f.protocols()) { ProtocolInfo info(ConnectionManagerPtr(parent), protocol); foreach (const ParamSpec &spec, f.parameters(protocol)) { info.addParameter(spec); } info.setRequestableChannelClasses( f.requestableChannelClasses(protocol)); info.setVCardField(f.vcardField(protocol)); info.setEnglishName(f.englishName(protocol)); info.setIconName(f.iconName(protocol)); info.setAllowedPresenceStatuses(f.allowedPresenceStatuses(protocol)); info.setAvatarRequirements(f.avatarRequirements(protocol)); info.setAddressableVCardFields(f.addressableVCardFields(protocol)); info.setAddressableUriSchemes(f.addressableUriSchemes(protocol)); protocols.append(info); } return true; } void ConnectionManager::Private::introspectMain(ConnectionManager::Private *self) { if (self->parseConfigFile()) { self->readinessHelper->setIntrospectCompleted(FeatureCore, true); return; } warning() << "Error parsing config file for connection manager" << self->name << "- introspecting"; debug() << "Calling Properties::GetAll(ConnectionManager)"; PendingVariantMap *pvm = self->baseInterface->requestAllProperties(); self->parent->connect(pvm, SIGNAL(finished(Tp::PendingOperation*)), SLOT(gotMainProperties(Tp::PendingOperation*))); } void ConnectionManager::Private::introspectProtocolsLegacy() { debug() << "Calling ConnectionManager::ListProtocols"; QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( baseInterface->ListProtocols(), parent); parent->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotProtocolsLegacy(QDBusPendingCallWatcher*))); } void ConnectionManager::Private::introspectParametersLegacy() { foreach (const QString &protocolName, parametersQueue) { debug() << "Calling ConnectionManager::GetParameters(" << protocolName << ")"; QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( baseInterface->GetParameters(protocolName), parent); parent->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotParametersLegacy(QDBusPendingCallWatcher*))); } } QString ConnectionManager::Private::makeBusName(const QString &name) { return QString(TP_QT_CONNECTION_MANAGER_BUS_NAME_BASE).append(name); } QString ConnectionManager::Private::makeObjectPath(const QString &name) { return QString(TP_QT_CONNECTION_MANAGER_OBJECT_PATH_BASE).append(name); } /** * \class ConnectionManagerLowlevel * \ingroup clientcm * \headerfile TelepathyQt/connection-manager-lowlevel.h * * \brief The ConnectionManagerLowlevel class extends ConnectionManager with * support to low-level features. */ ConnectionManagerLowlevel::ConnectionManagerLowlevel(ConnectionManager *cm) : mPriv(new Private(cm)) { } ConnectionManagerLowlevel::~ConnectionManagerLowlevel() { delete mPriv; } bool ConnectionManagerLowlevel::isValid() const { return !(connectionManager().isNull()); } ConnectionManagerPtr ConnectionManagerLowlevel::connectionManager() const { return ConnectionManagerPtr(mPriv->cm); } /** * \class ConnectionManager * \ingroup clientcm * \headerfile TelepathyQt/connection-manager.h * * \brief The ConnectionManager class represents a Telepathy connection manager. * * Connection managers allow connections to be made on one or more protocols. * * Most client applications should use this functionality via the * AccountManager, to allow connections to be shared between client * applications. */ /** * Feature representing the core that needs to become ready to make the * ConnectionManager object usable. * * Note that this feature must be enabled in order to use most ConnectionManager * methods. * See specific methods documentation for more details. * * When calling isReady(), becomeReady(), this feature is implicitly added * to the requested features. */ const Feature ConnectionManager::FeatureCore = Feature(QLatin1String(ConnectionManager::staticMetaObject.className()), 0, true); /** * Create a new ConnectionManager object. * * The instance will use a connection factory creating Tp::Connection objects with no features * ready, and a channel factory creating stock Telepathy-Qt channel subclasses, as appropriate, * with no features ready. * * \param bus QDBusConnection to use. * \param name Name of the connection manager. * \return A ConnectionManagerPtr object pointing to the newly created * ConnectionManager object. */ ConnectionManagerPtr ConnectionManager::create(const QDBusConnection &bus, const QString &name) { return ConnectionManagerPtr(new ConnectionManager(QDBusConnection::sessionBus(), name, ConnectionFactory::create(bus), ChannelFactory::create(bus), ContactFactory::create())); } /** * Create a new ConnectionManager using QDBusConnection::sessionBus() and the given factories. * * The channel factory is passed to any Connection objects created by this manager * object. In fact, they're not used directly by ConnectionManager at all. * * A warning is printed if the factories are for a bus different from QDBusConnection::sessionBus(). * * \param name Name of the connection manager. * \param connectionFactory The connection factory to use. * \param channelFactory The channel factory to use. * \param contactFactory The contact factory to use. * \return A ConnectionManagerPtr object pointing to the newly created * ConnectionManager object. */ ConnectionManagerPtr ConnectionManager::create(const QString &name, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory) { return ConnectionManagerPtr(new ConnectionManager(QDBusConnection::sessionBus(), name, connectionFactory, channelFactory, contactFactory)); } /** * Create a new ConnectionManager using the given \a bus and the given factories. * * The channel factory is passed to any Connection objects created by this manager * object. In fact, they're not used directly by ConnectionManager at all. * * A warning is printed if the factories are for a bus different from QDBusConnection::sessionBus(). * * \param bus QDBusConnection to use. * \param name Name of the connection manager. * \param connectionFactory The connection factory to use. * \param channelFactory The channel factory to use. * \param contactFactory The contact factory to use. * \return A ConnectionManagerPtr object pointing to the newly created * ConnectionManager object. */ ConnectionManagerPtr ConnectionManager::create(const QDBusConnection &bus, const QString &name, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory) { return ConnectionManagerPtr(new ConnectionManager(bus, name, connectionFactory, channelFactory, contactFactory)); } /** * Construct a new ConnectionManager object using the given \a bus. * * \param bus QDBusConnection to use. * \param name Name of the connection manager. */ ConnectionManager::ConnectionManager(const QDBusConnection &bus, const QString &name, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory) : StatelessDBusProxy(bus, Private::makeBusName(name), Private::makeObjectPath(name), FeatureCore), OptionalInterfaceFactory(this), mPriv(new Private(this, name, connectionFactory, channelFactory, contactFactory)) { } /** * Class destructor. */ ConnectionManager::~ConnectionManager() { delete mPriv; } /** * Return the short name of the connection manager (e.g. "gabble"). * * \return The name of the connection manager. */ QString ConnectionManager::name() const { return mPriv->name; } /** * Return the connection factory used by this manager. * * Only read access is provided. This allows constructing object instances and examining the object * construction settings, but not changing settings. Allowing changes would lead to tricky * situations where objects constructed at different times by the manager would have unpredictably * different construction settings (eg. subclass). * * \return A read-only pointer to the ConnectionFactory object. */ ConnectionFactoryConstPtr ConnectionManager::connectionFactory() const { return mPriv->connFactory; } /** * Return the channel factory used by this manager. * * Only read access is provided. This allows constructing object instances and examining the object * construction settings, but not changing settings. Allowing changes would lead to tricky * situations where objects constructed at different times by the manager would have unpredictably * different construction settings (eg. subclass). * * \return A read-only pointer to the ChannelFactory object. */ ChannelFactoryConstPtr ConnectionManager::channelFactory() const { return mPriv->chanFactory; } /** * Return the contact factory used by this manager. * * Only read access is provided. This allows constructing object instances and examining the object * construction settings, but not changing settings. Allowing changes would lead to tricky * situations where objects constructed at different times by the manager would have unpredictably * different construction settings (eg. subclass). * * \return A read-only pointer to the ContactFactory object. */ ContactFactoryConstPtr ConnectionManager::contactFactory() const { return mPriv->contactFactory; } /** * Return a list of strings identifying the protocols supported by this * connection manager, as described in the \telepathy_spec (e.g. "jabber"). * * These identifiers are not intended to be displayed to users directly; user * interfaces are responsible for mapping them to localized strings. * * This method requires ConnectionManager::FeatureCore to be ready. * * \return A list of supported protocols. */ QStringList ConnectionManager::supportedProtocols() const { QStringList protocols; foreach (const ProtocolInfo &info, mPriv->protocols) { protocols.append(info.name()); } return protocols; } /** * Return a list of protocols info for this connection manager. * * Note that the returned ProtocolInfoList contents should not be freed. * * This method requires ConnectionManager::FeatureCore to be ready. * * \return A list of ṔrotocolInfo. */ const ProtocolInfoList &ConnectionManager::protocols() const { return mPriv->protocols; } /** * Return whether this connection manager implements the protocol specified by * \a protocolName. * * This method requires ConnectionManager::FeatureCore to be ready. * * \return \c true if the protocol is supported, \c false otherwise. * \sa protocol(), protocols() */ bool ConnectionManager::hasProtocol(const QString &protocolName) const { foreach (const ProtocolInfo &info, mPriv->protocols) { if (info.name() == protocolName) { return true; } } return false; } /** * Return the ProtocolInfo object for the protocol specified by * \a protocolName. * * This method requires ConnectionManager::FeatureCore to be ready. * * \param protocolName The name of the protocol. * \return A ProtocolInfo object which will return \c for ProtocolInfo::isValid() if the protocol * specified by \a protocolName is not supported. * \sa hasProtocol() */ ProtocolInfo ConnectionManager::protocol(const QString &protocolName) const { foreach (const ProtocolInfo &info, mPriv->protocols) { if (info.name() == protocolName) { return info; } } return ProtocolInfo(); } /** * Request a Connection object representing a given account on a given protocol * with the given parameters. * * Return a pending operation representing the Connection object which will * succeed when the connection has been created or fail if an error occurred. * * \param protocol Name of the protocol to create the account for. * \param parameters Account parameters. * \return A PendingOperation which will emit PendingConnection::finished when * the account has been created of failed its creation process. */ PendingConnection *ConnectionManagerLowlevel::requestConnection(const QString &protocol, const QVariantMap ¶meters) { if (!isValid()) { return new PendingConnection(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("The connection manager has been destroyed already")); } return new PendingConnection(connectionManager(), protocol, parameters); } /** * Return a pending operation from which a list of all installed connection * manager short names (such as "gabble" or "haze") can be retrieved if it * succeeds. * * \return A PendingStringList which will emit PendingStringList::finished * when this object has finished or failed getting the connection * manager names. */ PendingStringList *ConnectionManager::listNames(const QDBusConnection &bus) { return new ConnectionManager::Private::PendingNames(bus); } ConnectionManagerLowlevelPtr ConnectionManager::lowlevel() { return mPriv->lowlevel; } ConnectionManagerLowlevelConstPtr ConnectionManager::lowlevel() const { return mPriv->lowlevel; } /** * Return the Client::ConnectionManagerInterface for this ConnectionManager. * This method is protected since the convenience methods provided by this * class should generally be used instead of calling D-Bus methods * directly. * * \return A pointer to the existing Client::ConnectionManagerInterface for this * ConnectionManager object. */ Client::ConnectionManagerInterface *ConnectionManager::baseInterface() const { return mPriv->baseInterface; } /**** Private ****/ void ConnectionManager::gotMainProperties(Tp::PendingOperation *op) { QVariantMap props; if (!op->isError()) { debug() << "Got reply to Properties.GetAll(ConnectionManager)"; PendingVariantMap *pvm = qobject_cast(op); props = pvm->result(); // If Interfaces is not supported, the spec says to assume it's // empty, so keep the empty list mPriv was initialized with if (props.contains(QLatin1String("Interfaces"))) { setInterfaces(qdbus_cast(props[QLatin1String("Interfaces")])); mPriv->readinessHelper->setInterfaces(interfaces()); } } else { warning().nospace() << "Properties.GetAll(ConnectionManager) failed: " << op->errorName() << ": " << op->errorMessage(); mPriv->readinessHelper->setIntrospectCompleted(FeatureCore, false, op->errorName(), op->errorMessage()); return; } ProtocolPropertiesMap protocolsMap = qdbus_cast(props[QLatin1String("Protocols")]); if (!protocolsMap.isEmpty()) { ProtocolPropertiesMap::const_iterator i = protocolsMap.constBegin(); ProtocolPropertiesMap::const_iterator end = protocolsMap.constEnd(); while (i != end) { QString protocolName = i.key(); if (!checkValidProtocolName(protocolName)) { warning() << "Protocol has an invalid name" << protocolName << "- ignoring"; continue; } QString escapedProtocolName = protocolName; escapedProtocolName.replace(QLatin1Char('-'), QLatin1Char('_')); QString protocolPath = QString( QLatin1String("%1/%2")).arg(objectPath()).arg(escapedProtocolName); SharedPtr wrapper = SharedPtr( new Private::ProtocolWrapper(ConnectionManagerPtr(this), protocolPath, protocolName, i.value())); connect(wrapper->becomeReady(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onProtocolReady(Tp::PendingOperation*))); mPriv->wrappers.insert(wrapper); ++i; } } else { mPriv->introspectProtocolsLegacy(); } } void ConnectionManager::gotProtocolsLegacy(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; QStringList protocolsNames; if (!reply.isError()) { debug() << "Got reply to ConnectionManager.ListProtocols"; protocolsNames = reply.value(); if (!protocolsNames.isEmpty()) { foreach (const QString &protocolName, protocolsNames) { mPriv->protocols.append(ProtocolInfo(ConnectionManagerPtr(this), protocolName)); mPriv->parametersQueue.enqueue(protocolName); } mPriv->introspectParametersLegacy(); } else { //no protocols - introspection finished mPriv->readinessHelper->setIntrospectCompleted(FeatureCore, true); } } else { mPriv->readinessHelper->setIntrospectCompleted(FeatureCore, false, reply.error()); warning().nospace() << "ConnectionManager.ListProtocols failed: " << reply.error().name() << ": " << reply.error().message(); // FIXME shouldn't this invalidate the CM? } watcher->deleteLater(); } void ConnectionManager::gotParametersLegacy(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; QString protocolName = mPriv->parametersQueue.dequeue(); bool found = false; int pos = 0; foreach (const ProtocolInfo &info, mPriv->protocols) { if (info.name() == protocolName) { found = true; break; } ++pos; } Q_ASSERT(found); if (!reply.isError()) { debug() << QString(QLatin1String("Got reply to ConnectionManager.GetParameters(%1)")).arg(protocolName); ParamSpecList parameters = reply.value(); ProtocolInfo &info = mPriv->protocols[pos]; foreach (const ParamSpec &spec, parameters) { debug() << "Parameter" << spec.name << "has flags" << spec.flags << "and signature" << spec.signature; info.addParameter(spec); } } else { // let's remove this protocol as we can't get the params mPriv->protocols.removeAt(pos); warning().nospace() << QString(QLatin1String("ConnectionManager.GetParameters(%1) failed: ")).arg(protocolName) << reply.error().name() << ": " << reply.error().message(); } if (mPriv->parametersQueue.isEmpty()) { if (!mPriv->protocols.isEmpty()) { mPriv->readinessHelper->setIntrospectCompleted(FeatureCore, true); } else { // we could not retrieve the params for any protocol, fail core. mPriv->readinessHelper->setIntrospectCompleted(FeatureCore, false, reply.error()); } } watcher->deleteLater(); } void ConnectionManager::onProtocolReady(Tp::PendingOperation *op) { PendingReady *pr = qobject_cast(op); SharedPtr wrapper = SharedPtr::qObjectCast(pr->proxy()); ProtocolInfo info = wrapper->info(); mPriv->wrappers.remove(wrapper); if (!op->isError()) { mPriv->protocols.append(info); } else { warning().nospace() << "Protocol(" << info.name() << ")::becomeReady " "failed: " << op->errorName() << ": " << op->errorMessage(); } if (mPriv->wrappers.isEmpty()) { if (!mPriv->protocols.isEmpty()) { mPriv->readinessHelper->setIntrospectCompleted(FeatureCore, true); } else { // we could not make any Protocol objects ready, fail core. mPriv->readinessHelper->setIntrospectCompleted(FeatureCore, false, op->errorName(), op->errorMessage()); } } } } // Tp telepathy-qt-0.9.3/TelepathyQt/abstract-client.cpp0000644000175200001440000010476712000056607024462 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009-2010 Collabora Ltd. * @copyright Copyright (C) 2009-2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT AbstractClient::Private { Private() : registered(false) { } bool registered; }; /** * \class AbstractClient * \ingroup clientclient * \headerfile TelepathyQt/abstract-client.h * * \brief The AbstractClient class represents a Telepathy client. * * Clients are programs used to process channels, approving, handling or * observing them. User interface processes are the obvious example of clients, * but they can provide other functionality, such as address-book * synchronization, message logging, etc. * * Each client is either an observer, an approver, a handler, or some * combination of these. * * Clients can be activatable services (those with a D-Bus .service file) * so that they can run in response to channel creation, or non-activatable * services (those that do not register a D-Bus .service file * for their well-known name, but do request it at runtime) so * that they can process channels, but only if they are already * running - for instance, a full-screen media center application might do this. * * As an optimization, service-activatable clients should install a file * $XDG_DATA_DIRS/telepathy/clients/clientname.client containing a cached version * of their immutable properties. The syntax of these files is documented in the * Telepathy specification. * * Non-activatable clients may install a .client file, but there's not much * point in them doing so. * * This is a base class and should not be used directly, use the * specialized classes AbstractClientObserver, AbstractClientApprover and * AbstractClientHandler instead. * * If the same process wants to be either a mix of observer, approver and * handler, or a combination of those it can multiple inherit the specialized * abstract classes. * * \sa AbstractClientObserver, AbstractClientApprover, AbstractClientHandler */ /** * Construct a new AbstractClient object. * * Note that this is a base class and should not be used directly, use the * specialized classes AbstractClientObserver, AbstractClientApprover and * AbstractClientHandler instead. */ AbstractClient::AbstractClient() : mPriv(new Private()) { } /** * Class destructor. */ AbstractClient::~AbstractClient() { delete mPriv; } /** * Return whether this client is registered. * * \return \c true if registered, \c false otherwise. */ bool AbstractClient::isRegistered() const { return mPriv->registered; } void AbstractClient::setRegistered(bool registered) { mPriv->registered = registered; } struct TP_QT_NO_EXPORT AbstractClientObserver::Private { Private(const ChannelClassList &channelFilter, bool shouldRecover) : channelFilter(channelFilter), shouldRecover(shouldRecover) { } ChannelClassList channelFilter; bool shouldRecover; }; /** * \class AbstractClientObserver * \ingroup clientclient * \headerfile TelepathyQt/abstract-client.h * * \brief The AbstractClientObserver class represents a Telepathy observer. * * Observers are clients that monitor the creation of new channels. * This functionality can be used for things like message logging. * * Observers should not modify the state of a channel except via user * interaction. * * Observers must not carry out actions that exactly one process must take * responsibility for (e.g. acknowledging text messages, or carrying out * the actual file transfer), since arbitrarily many observers can be * activated for each channel. The handler is responsible for such tasks. * * Handlers may, of course, delegate responsibility for these tasks to other * clients (including those run as observers), but this must be done * explicitly via a request from the handler to the observer. * * Whenever a collection of new channels is signalled, the channel dispatcher * will notify all running or activatable observers whose filter indicates that * they are interested in some of the channels. * * Observers are activated for all channels in which they have registered an * interest - incoming, outgoing or automatically created - although of course * the filter property can be set to filter specific channels. * * To become an observer one should inherit AbstractClientObserver and * implement the pure virtual observeChannels() method. After that the object * representing the observer must be registered using * ClientRegistrar::registerClient(). * * When new channels in which the observer has registered an interest are * announced, the method observeChannels() is invoked. All observers are * notified simultaneously. * * \section observer_usage_sec Usage * * \subsection observer_create_sec Implementing an observer * * \code * * class MyObserver : public AbstractClientObserver * { * public: * MyObserver(const ChannelClassSpecList &channelFilter); * ~MyObserver() { } * * void observeChannels(const MethodInvocationContextPtr<> &context, * const AccountPtr &account, * const ConnectionPtr &connection, * const QList &channels, * const ChannelDispatchOperationPtr &dispatchOperation, * const QList &requestsSatisfied, * const AbstractClientObserver::ObserverInfo &observerInfo); * }; * * MyObserver::MyObserver(const ChannelClassSpecList &channelFilter) * : AbstractClientObserver(channelFilter) * { * } * * void MyObserver::observeChannels(const MethodInvocationContextPtr<> &context, * const AccountPtr &account, * const ConnectionPtr &connection, * const QList &channels, * const ChannelDispatchOperationPtr &dispatchOperation, * const QList &requestsSatisfied, * const AbstractClientObserver::ObserverInfo &observerInfo) * { * // do something, log messages, ... * * context->setFinished(); * } * * \endcode * * \subsection observer_register_sec Registering an observer * * \code * * ClientRegistrar registrar = ClientRegistrar::create(); * AbstractClientPtr observer = AbstractClientPtr::dynamicCast( * SharedPtr(new MyObserver( * ChannelClassSpecList() << ChannelClassSpec::textChat()))); * registrar->registerClient(observer, "myobserver"); * * \endcode * * \sa AbstractClient */ /** * \class AbstractClientObserver::ObserverInfo * \ingroup clientclient * \headerfile TelepathyQt/abstract-client.h * * \brief The AbstractClientObserver::ObserverInfo class provides a wrapper * around the additional info about the channels passed to observeChannels(). * * \sa AbstractClientObserver */ struct TP_QT_NO_EXPORT AbstractClientObserver::ObserverInfo::Private : public QSharedData { Private(const QVariantMap &info) : info(info) {} QVariantMap info; }; AbstractClientObserver::ObserverInfo::ObserverInfo(const QVariantMap &info) : mPriv(new Private(info)) { } AbstractClientObserver::ObserverInfo::ObserverInfo(const ObserverInfo &other) : mPriv(other.mPriv) { } AbstractClientObserver::ObserverInfo::~ObserverInfo() { } AbstractClientObserver::ObserverInfo &AbstractClientObserver::ObserverInfo::operator=( const ObserverInfo &other) { if (this == &other) { return *this; } mPriv = other.mPriv; return *this; } QVariantMap AbstractClientObserver::ObserverInfo::allInfo() const { return mPriv->info; } /** * Construct a new AbstractClientObserver object. * * \param channelFilter A specification of the channels in which this observer * is interested. * \param shouldRecover Whether upon the startup of this observer, * observeChannels() will be called for every already * existing channel matching its observerChannelFilter(). */ AbstractClientObserver::AbstractClientObserver( const ChannelClassSpecList &channelFilter, bool shouldRecover) : mPriv(new Private(channelFilter.bareClasses(), shouldRecover)) // The channel filter is converted here to the low-level class so that any warnings are // emitted immediately rather than only when the CD introspects this Client { } /** * Class destructor. */ AbstractClientObserver::~AbstractClientObserver() { delete mPriv; } /** * Return the property containing a specification of the channels that this * channel observer is interested. The observeChannels() method should be called * by the channel dispatcher whenever any of the newly created channels match * this description. * * See * the Telepathy specification for documentation about the allowed * types and how to define filters. * * This property never changes while the observer process owns its client bus * name. If an observer wants to add extra channels to its list of interests at * runtime, it can register an additional client bus name using * ClientRegistrar::registerClient(). * To remove those filters, it can release the bus name using * ClientRegistrar::unregisterClient(). * * The same principle is applied to approvers and handlers. * * \return A specification of the channels that this channel observer is * interested as a list of ChannelClassSpec objects. * \sa observeChannels() */ ChannelClassSpecList AbstractClientObserver::observerFilter() const { return ChannelClassSpecList(mPriv->channelFilter); } /** * Return whether upon the startup of this observer, observeChannels() * will be called for every already existing channel matching its * observerChannelFilter(). * * \param \c true if this observer observerChannels() will be called for every * already existing channel matching its observerChannelFilter(), * \c false otherwise. */ bool AbstractClientObserver::shouldRecover() const { return mPriv->shouldRecover; } /** * \fn void AbstractClientObserver::observeChannels( * const MethodInvocationContextPtr<> &context, * const AccountPtr &account, * const ConnectionPtr &connection, * const QList &channels, * const ChannelDispatchOperationPtr &dispatchOperation, * const QList &requestsSatisfied, * const ObserverInfo &observerInfo); * * Called by the channel dispatcher when channels in which the observer has * registered an interest are announced. * * If the announced channels contains channels that match the * observerChannelFilter(), and some that do not, then only a subset of the * channels (those that do match the filter) are passed to this method. * * If the channel dispatcher will split up the channels from a single * announcement and dispatch them separately (for instance because no * installed handler can handle all of them), it will call this method * several times. * * The observer must not call MethodInvocationContext::setFinished() until it * is ready for a handler for the channel to run (which may change the * channel's state). For instance the received \a context object should be * stored until this method is finished processing and then * MethodInvocationContext::setFinished() or * MethodInvocationContext::setFinishedWithError() should be called on the * received \a context object. * * Specialized observers must reimplement this method. * * \param context A MethodInvocationContextPtr object that must be used to * indicate whether this method finished processing. * \param account The account with which the channels are associated. * \param connection The connection with which the channels are associated. * \param channels The channels to be observed. * \param dispatchOperation The dispatch operation for these channels. * The object will be invalid (DBusProxy::isValid() * will be false) if there is no dispatch * operation in place (because the channels were * requested, not incoming). * If the Observer calls * ChannelDispatchOperation::claim() or * ChannelDispatchOperation::handleWith() on this * object, it must be careful to avoid deadlock, since * these methods cannot return until the observer has * returned from observeChannels(). * \param requestsSatisfied The requests satisfied by these channels. * \param observerInfo Additional information about these channels. */ struct TP_QT_NO_EXPORT AbstractClientApprover::Private { Private(const ChannelClassList &channelFilter) : channelFilter(channelFilter) { } ChannelClassList channelFilter; }; /** * \class AbstractClientApprover * \ingroup clientclient * \headerfile TelepathyQt/abstract-client.h * * \brief The AbstractClientApprover class represents a Telepathy approver. * * Approvers are clients that notify the user that new channels have been * created, and allow the user to accept or reject those channels. * * Approvers can also select which channel handler will be used for the channel, * for instance by offering the user a list of possible handlers rather than * just an accept/reject choice. However, the channel dispatcher must be able to * prioritize possible handlers on its own using some reasonable heuristic, * probably based on user configuration. * * It is possible (and useful) to have an approver and a channel handler in the * same process; this is particularly useful if a channel handler wants to claim * responsibility for particular channels itself. * * All approvers are notified simultaneously. For instance, in a desktop system, * there might be one approver that displays a notification-area icon, one that * is part of a contact list window and highlights contacts there, and one that * is part of a full-screen media player. * * Any approver can approve the handling of a channel dispatch operation with a * particular channel handler by calling the * ChannelDispatchOperation::handleWith() method. Approvers can also attempt to * claim channels by calling ChannelDispatchOperation::claim(). If this * succeeds, the approver may handle the channels itself (if it is also a * handler), or close the channels in order to reject them. * * Approvers wishing to reject channels should call the * ChannelDispatchOperation::claim() method, then (if it succeeds) close the * channels in any way they see fit. * * The first approver to reply gets its decision acted on; any other approvers * that reply at approximately the same time will get an error, indicating that * the channel has already been dealt with. * * Approvers should usually prompt the user and ask for confirmation, rather * than dispatching the channel to a handler straight away. * * To become an approver one should inherit AbstractClientApprover and * implement the pure virtual addDispatchOperation() method. After that the * object representing the approver must be registered using * ClientRegistrar::registerClient(). * * When new channels in which the approver has registered an interest are * ready to be dispatched, the method addDispatchOperation() is invoked. * The new channels are represented by a ChannelDispatchOperation object, which * is passed to the addDispatchOperation() method. * All approvers are notified simultaneously. * * \section approver_usage_sec Usage * * \subsection approver_create_sec Implementing an approver * * \code * * class MyApprover : public AbstractClientApprover * { * public: * MyApprover(const ChannelClassSpecSpecList &channelFilter); * ~MyApprover() { } * * void addDispatchOperation(const MethodInvocationContextPtr<> &context, * const ChannelDispatchOperationPtr &dispatchOperation); * }; * * MyApprover::MyApprover(const ChannelClassSpecList &channelFilter) * : AbstractClientApprover(channelFilter) * { * } * * void MyApprover::addDispatchOperation( * const MethodInvocationContextPtr<> &context, * const ChannelDispatchOperationPtr &dispatchOperation) * { * // do something with dispatchOperation * * context->setFinished(); * } * * \endcode * * \subsection approver_register_sec Registering an approver * * \code * * ClientRegistrar registrar = ClientRegistrar::create(); * AbstractClientPtr approver = AbstractClientPtr::dynamicCast( * SharedPtr(new MyApprover( * ChannelClassSpecList() << ChannelClassSpec::textChat()))); * registrar->registerClient(approver, "myapprover"); * * \endcode * * \sa AbstractClient */ /** * Construct a new AbstractClientApprover object. * * \param channelFilter A specification of the channels in which this approver * is interested. */ AbstractClientApprover::AbstractClientApprover( const ChannelClassSpecList &channelFilter) : mPriv(new Private(channelFilter.bareClasses())) { } /** * Class destructor. */ AbstractClientApprover::~AbstractClientApprover() { delete mPriv; } /** * Return the property containing a specification of the channels that this * channel approver is interested. The addDispatchOperation() method should be * called by the channel dispatcher whenever at least one of the channels in * a channel dispatch operation matches this description. * * This method works in exactly the same way as the * AbstractClientObserver::observerChannelFilter() method. In particular, the * returned value cannot change while the handler process continues to own the * corresponding client bus name. * * In the .client file, represented in the same way as observer channel * filter, the group is #TP_QT_IFACE_CLIENT_APPROVER followed by * ApproverChannelFilter instead. * * \return A specification of the channels that this channel approver is * interested as a list of ChannelClassSpec objects. * \sa addDispatchOperation() */ ChannelClassSpecList AbstractClientApprover::approverFilter() const { return ChannelClassSpecList(mPriv->channelFilter); } /** * \fn void AbstractClientApprover::addDispatchOperation( * const MethodInvocationContextPtr<> &context, * const ChannelDispatchOperationPtr &dispatchOperation); * * Called by the channel dispatcher when a dispatch operation in which the * approver has registered an interest is created, or when the approver starts * up while such channel dispatch operations already exist. * * The received \a context object should be stored until this * method is finished processing and then MethodInvocationContext::setFinished() * or MethodInvocationContext::setFinishedWithError() should be called on the * received \a context object. * * Specialized approvers must reimplement this method. * * \param context A MethodInvocationContextPtr object that must be used to * indicate whether this method finished processing. * \param dispatchOperation The dispatch operation to be processed. */ struct TP_QT_NO_EXPORT AbstractClientHandler::Private { Private(const ChannelClassList &channelFilter, const Capabilities &capabilities, bool wantsRequestNotification) : channelFilter(channelFilter), capabilities(capabilities), wantsRequestNotification(wantsRequestNotification) { } ChannelClassList channelFilter; Capabilities capabilities; bool wantsRequestNotification; }; /** * \class AbstractClientHandler * \ingroup clientclient * \headerfile TelepathyQt/abstract-client.h * * \brief The AbstractClientHandler class represents a Telepathy handler. * * Handlers are the user interface for a channel. They turn an abstract * channel into something the user wants to see, like a text message * stream or an audio and/or video call. * * For its entire lifetime, each channel on a connection known to the channel * dispatcher is either being processed by the channel dispatcher, or being * handled by precisely one handler. * * Because each channel is only handled by one handler, handlers may perform * actions that only make sense to do once, such as acknowledging text messages, * transferring the file, etc. * * When a new incoming channel is offered to approvers by the channel * dispatcher, it also offers the approvers a list of all the running or * activatable handlers whose filter indicates that they are able to handle * the channel. The approvers can choose one of those channel handlers to * handle the channel. * * When a new outgoing channel appears, the channel dispatcher passes it to * an appropriate channel handler automatically. * * To become an handler one should inherit AbstractClientHandler and * implement the pure virtual bypassApproval() and handleChannels() methods. * After that the object representing the handler must be registered using * ClientRegistrar::registerClient(). * * When new channels in which the approver has registered an interest are * ready to be handled, the method handleChannels() is invoked. * * \section handler_usage_sec Usage * * \subsection handler_create_sec Implementing a handler * * \code * * class MyHandler : public AbstractClientHandler * { * public: * MyHandler(const ChannelClassSpecList &channelFilter); * ~MyHandler() { } * * void bypassApproval() const; * * void handleChannels(const MethodInvocationContextPtr<> &context, * const AccountPtr &account, * const ConnectionPtr &connection, * const QList &channels, * const QList &requestsSatisfied, * const QDateTime &userActionTime, * const AbstractClientHandler::HandlerInfo &handlerInfo); * }; * * MyHandler::MyHandler(const ChannelClassSpecList &channelFilter) * : AbstractClientHandler(channelFilter) * { * } * * void MyHandler::bypassApproval() const * { * return false; * } * * void MyHandler::handleChannels(const MethodInvocationContextPtr<> &context, * const AccountPtr &account, * const ConnectionPtr &connection, * const QList &channels, * const QList &requestsSatisfied, * const QDateTime &userActionTime, * const AbstractClientHandler::HandlerInfo &handlerInfo) * { * // do something * * context->setFinished(); * } * * \endcode * * \subsection handler_register_sec Registering a handler * * \code * * ClientRegistrar registrar = ClientRegistrar::create(); * AbstractClientPtr handler = AbstractClientPtr::dynamicCast( * SharedPtr(new MyHandler( * ChannelClassSpecList() << ChannelClassSpec::textChat()))); * registrar->registerClient(handler, "myhandler"); * * \endcode * * \sa AbstractClient */ /** * \class AbstractClientHandler::Capabilities * \ingroup clientclient * \headerfile TelepathyQt/abstract-client.h * * \brief The AbstractClientHandler::Capabilities class provides a wrapper * around the capabilities of a handler. * * \sa AbstractClientHandler */ /** * \class AbstractClientHandler::HandlerInfo * \ingroup clientclient * \headerfile TelepathyQt/abstract-client.h * * \brief The AbstractClientHandler::HandlerInfo class provides a wrapper * around the additional info about the channels passed to handleChannels(). * * \sa AbstractClientHandler */ struct TP_QT_NO_EXPORT AbstractClientHandler::Capabilities::Private : public QSharedData { Private(const QStringList &tokens) : tokens(QSet::fromList(tokens)) {} QSet tokens; }; AbstractClientHandler::Capabilities::Capabilities(const QStringList &tokens) : mPriv(new Private(tokens)) { } AbstractClientHandler::Capabilities::Capabilities(const Capabilities &other) : mPriv(other.mPriv) { } AbstractClientHandler::Capabilities::~Capabilities() { } AbstractClientHandler::Capabilities &AbstractClientHandler::Capabilities::operator=( const Capabilities &other) { if (this == &other) { return *this; } mPriv = other.mPriv; return *this; } bool AbstractClientHandler::Capabilities::hasToken(const QString &token) const { return mPriv->tokens.contains(token); } void AbstractClientHandler::Capabilities::setToken(const QString &token) { mPriv->tokens.insert(token); } void AbstractClientHandler::Capabilities::unsetToken(const QString &token) { mPriv->tokens.remove(token); } QStringList AbstractClientHandler::Capabilities::allTokens() const { return mPriv->tokens.toList(); } struct TP_QT_NO_EXPORT AbstractClientHandler::HandlerInfo::Private : public QSharedData { Private(const QVariantMap &info) : info(info) {} QVariantMap info; }; AbstractClientHandler::HandlerInfo::HandlerInfo(const QVariantMap &info) : mPriv(new Private(info)) { } AbstractClientHandler::HandlerInfo::HandlerInfo(const HandlerInfo &other) : mPriv(other.mPriv) { } AbstractClientHandler::HandlerInfo::~HandlerInfo() { } AbstractClientHandler::HandlerInfo &AbstractClientHandler::HandlerInfo::operator=( const HandlerInfo &other) { if (this == &other) { return *this; } mPriv = other.mPriv; return *this; } QVariantMap AbstractClientHandler::HandlerInfo::allInfo() const { return mPriv->info; } /** * Construct a new AbstractClientHandler object. * * \param channelFilter A specification of the channels in which this observer * is interested. * \param wantsRequestNotification Whether this handler wants to receive channel * requests notification via addRequest() and * removeRequest(). * \param capabilities The set of additional capabilities supported by this * handler. */ AbstractClientHandler::AbstractClientHandler(const ChannelClassSpecList &channelFilter, const Capabilities &capabilities, bool wantsRequestNotification) : mPriv(new Private(channelFilter.bareClasses(), capabilities, wantsRequestNotification)) { } /** * Class destructor. */ AbstractClientHandler::~AbstractClientHandler() { delete mPriv; } /** * Return the property containing a specification of the channels that this * channel handler can deal with. It will be offered to approvers as a potential * channel handler for bundles that contain only suitable channels, or for * suitable channels that must be handled separately. * * This method works in exactly the same way as the * AbstractClientObserver::observerChannelFilter() method. In particular, the * returned value cannot change while the handler process continues to own the * corresponding client bus name. * * In the .client file, represented in the same way as observer channel * filter, the group is #TP_QT_IFACE_CLIENT_HANDLER suffixed * by HandlerChannelFilter instead. * * \return A specification of the channels that this channel handler can deal * with as a list of ChannelClassSpec objects. */ ChannelClassSpecList AbstractClientHandler::handlerFilter() const { return ChannelClassSpecList(mPriv->channelFilter); } /** * Return the set of additional capabilities supported by this handler. * * \return The capabilities as an AbstractClientHandler::Capabilities object. */ AbstractClientHandler::Capabilities AbstractClientHandler::handlerCapabilities() const { return mPriv->capabilities; } /** * \fn bool AbstractClientHandler::bypassApproval() const; * * Return whether channels destined for this handler are automatically * handled, without invoking approvers. * * \return \c true if automatically handled, \c false otherwise. */ /** * \fn void AbstractClientHandler::handleChannels( * const MethodInvocationContextPtr<> &context, * const AccountPtr &account, * const ConnectionPtr &connection, * const QList &channels, * const QList &requestsSatisfied, * const QDateTime &userActionTime, * const HandlerInfo &handlerInfo); * * Called by the channel dispatcher when this handler should handle these * channels, or when this handler should present channels that it is already * handling to the user (e.g. bring them into the foreground). * * Clients are expected to know what channels they're already handling, and * which channel object corresponds to which window or tab. * * After handleChannels() replies successfully by calling * MethodInvocationContext::setFinished(), the client process is considered * to be responsible for the channel until it its unique name disappears from * the bus. * * If a process has multiple client bus names - some temporary and some * long-lived - and drops one of the temporary bus names in order to reduce the * set of channels that it will handle, any channels that it is already handling * will remain unaffected. * * The received \a context object should be stored until this * method is finished processing and then MethodInvocationContext::setFinished() * or MethodInvocationContext::setFinishedWithError() should be called on the * received \a context object. * * Specialized handlers must reimplement this method. * * \param context A MethodInvocationContextPtr object that must be used to * indicate whether this method finished processing. * \param account The account with which the channels are associated. * \param connection The connection with which the channels are associated. * \param channels The channels to be handled. * \param dispatchOperation The dispatch operation for these channels. * The object will be invalid (DBusProxy::isValid() * will be false) if there is no dispatch * operation in place (because the channels were * requested, not incoming). * \param requestsSatisfied The requests satisfied by these channels. * \param userActionTime The time at which user action occurred, or 0 if this * channel is to be handled for some reason not involving * user action. Handlers should use this for * focus-stealing prevention, if applicable. * \param handlerInfo Additional information about these channels. */ /** * Return whether this handler wants to receive notification of channel requests * via addRequest() and removeRequest(). * * This property is set by the constructor and cannot be changed after that. * * \return \c true if receiving channel requests notification is desired, * \c false otherwise. */ bool AbstractClientHandler::wantsRequestNotification() const { return mPriv->wantsRequestNotification; } /** * Called by the channel dispatcher to indicate that channels have been * requested, and that if the request is successful, they will probably be * handled by this handler. * * This allows the UI to start preparing to handle the channels in advance * (e.g. render a window with an "in progress" message), improving perceived * responsiveness. * * If the request succeeds and is given to the expected handler, the * requestsSatisfied parameter to handleChannels() can be used to match the * channel to a previous addRequest() call. * * This lets the UI direct the channels to the window that it already opened. * * If the request fails, the expected handler is notified by the channel * dispatcher calling its removeRequest() method. * * This lets the UI close the window or display the error. * * The channel dispatcher will attempt to ensure that handleChannels() is called * on the same handler that received addRequest(). If that isn't possible, * removeRequest() will be called on the handler that previously received * addRequest(), with the special error #TP_QT_ERROR_NOT_YOURS, which * indicates that some other handler received the channel instead. * * Expected handling is for the UI to close the window it previously opened. * * Specialized handlers that want to be notified of newly requested channel * should reimplement this method. * * \param channelRequest The newly created channel request. * \sa removeRequest() */ void AbstractClientHandler::addRequest( const ChannelRequestPtr &channelRequest) { // do nothing, subclasses that want to listen requests should reimplement // this method } /** * Called by the ChannelDispatcher to indicate that a request previously passed * to addRequest() has failed and should be disregarded. * * Specialized handlers that want to be notified of removed channel requests * should reimplement this method. * * \param channelRequest The channel request that failed. * \param errorName The name of the D-Bus error with which the request failed. * If this is #TP_QT_ERROR_NOT_YOURS, this indicates that * the request succeeded, but all the resulting channels were * given to some other handler. * \param errorMessage Any message supplied with the D-Bus error. */ void AbstractClientHandler::removeRequest( const ChannelRequestPtr &channelRequest, const QString &errorName, const QString &errorMessage) { // do nothing, subclasses that want to listen requests should reimplement // this method } } // Tp telepathy-qt-0.9.3/TelepathyQt/fixed-feature-factory.h0000644000175200001440000000342212000056607025227 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_fixed_feature_factory_h_HEADER_GUARD_ #define _TelepathyQt_fixed_feature_factory_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include class QDBusConnection; namespace Tp { class Feature; class Features; class TP_QT_EXPORT FixedFeatureFactory : public DBusProxyFactory { Q_OBJECT Q_DISABLE_COPY(FixedFeatureFactory) public: virtual ~FixedFeatureFactory(); Features features() const; void addFeature(const Feature &feature); void addFeatures(const Features &features); protected: FixedFeatureFactory(const QDBusConnection &bus); virtual Features featuresFor(const DBusProxyPtr &proxy) const; private: struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/ProtocolInfoList0000644000175200001440000000037312000056607024057 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ProtocolInfoList_HEADER_GUARD_ #define _TelepathyQt_ProtocolInfoList_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/contact.cpp0000644000175200001440000013230412000056607023022 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2010 Collabora Ltd. * @copyright Copyright (C) 2008-2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/contact.moc.hpp" #include "TelepathyQt/debug-internal.h" #include "TelepathyQt/future-internal.h" #include #include #include #include #include #include #include #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT Contact::Private { Private(Contact *parent, ContactManager *manager, const ReferencedHandles &handle) : parent(parent), manager(ContactManagerPtr(manager)), handle(handle), caps(manager->supportedFeatures().contains(Contact::FeatureCapabilities) ? ContactCapabilities(true) : ContactCapabilities( manager->connection()->capabilities().allClassSpecs(), false)), isContactInfoKnown(false), isAvatarTokenKnown(false), subscriptionState(SubscriptionStateUnknown), publishState(SubscriptionStateUnknown), blocked(false) { } void updateAvatarData(); Contact *parent; WeakPtr manager; ReferencedHandles handle; QString id; Features requestedFeatures; Features actualFeatures; QString alias; QMap vcardAddresses; QStringList uris; Presence presence; ContactCapabilities caps; LocationInfo location; bool isContactInfoKnown; InfoFields info; bool isAvatarTokenKnown; QString avatarToken; AvatarData avatarData; SubscriptionState subscriptionState; SubscriptionState publishState; QString publishStateMessage; bool blocked; QSet groups; QStringList clientTypes; }; void Contact::Private::updateAvatarData() { /* If token is NULL, it means that CM doesn't know the token. In that case we * have to request the avatar data to get the token. This happens with XMPP * for offline contacts. We don't want to bypass the avatar cache, so we won't * update avatar. */ if (avatarToken.isNull()) { return; } /* If token is empty (""), it means the contact has no avatar. */ if (avatarToken.isEmpty()) { debug() << "Contact" << parent->id() << "has no avatar"; avatarData = AvatarData(); emit parent->avatarDataChanged(avatarData); return; } parent->manager()->requestContactAvatars(QList() << ContactPtr(parent)); } struct TP_QT_NO_EXPORT Contact::InfoFields::Private : public QSharedData { Private(const ContactInfoFieldList &allFields) : allFields(allFields) {} ContactInfoFieldList allFields; }; /** * \class Contact::InfoFields * \ingroup clientconn * \headerfile TelepathyQt/contact.h * * \brief The Contact::InfoFields class represents the information of a * Telepathy contact. */ /** * Construct a info fields instance with the given fields. The instance will indicate that * it is valid. */ Contact::InfoFields::InfoFields(const ContactInfoFieldList &allFields) : mPriv(new Private(allFields)) { } /** * Constructs a new invalid InfoFields instance. */ Contact::InfoFields::InfoFields() { } /** * Copy constructor. */ Contact::InfoFields::InfoFields(const Contact::InfoFields &other) : mPriv(other.mPriv) { } /** * Class destructor. */ Contact::InfoFields::~InfoFields() { } /** * Assignment operator. */ Contact::InfoFields &Contact::InfoFields::operator=(const Contact::InfoFields &other) { this->mPriv = other.mPriv; return *this; } /** * Return a list containing all fields whose name are \a name. * * \param name The name used to match the fields. * \return A list of ContactInfoField objects. */ ContactInfoFieldList Contact::InfoFields::fields(const QString &name) const { if (!isValid()) { return ContactInfoFieldList(); } ContactInfoFieldList ret; foreach (const ContactInfoField &field, mPriv->allFields) { if (field.fieldName == name) { ret.append(field); } } return ret; } /** * Return a list containing all fields describing the contact information. * * \return The contact information as a list of ContactInfoField objects. */ ContactInfoFieldList Contact::InfoFields::allFields() const { return isValid() ? mPriv->allFields : ContactInfoFieldList(); } /** * \class Contact * \ingroup clientconn * \headerfile TelepathyQt/contact.h * * \brief The Contact class represents a Telepathy contact. * * The accessor functions on this object (id(), alias(), and so on) don't make any D-Bus calls; * instead, they return/use values cached from a previous introspection run. * The introspection process populates their values in the most efficient way possible based on what * the service implements. * * To avoid unnecessary D-Bus traffic, some accessors only return valid * information after specific features have been enabled. * For instance, to retrieve the contact avatar token, it is necessary to * enable the feature Contact::FeatureAvatarToken. * See the individual methods descriptions for more details. * * Contact features can be enabled by constructing a ContactFactory and enabling * the desired features, and passing it to AccountManager, Account or ClientRegistrar * when creating them as appropriate. However, if a particular * feature is only ever used in a specific circumstance, such as an user opening * some settings dialog separate from the general view of the application, * features can be later enabled as needed by calling ContactManager::upgradeContacts() with the * additional features, and waiting for the resulting PendingOperation to finish. * * As an addition to accessors, signals are emitted to indicate that properties have * changed, for example aliasChanged(), avatarTokenChanged(), etc. * * See \ref async_model, \ref shared_ptr */ /** * Feature used in order to access contact alias info. * * \sa alias(), aliasChanged() */ const Feature Contact::FeatureAlias = Feature(QLatin1String(Contact::staticMetaObject.className()), 0, false); /** * Feature used in order to access contact avatar data info. * * Enabling this feature will also enable FeatureAvatarToken. * * \sa avatarData(), avatarDataChanged() */ const Feature Contact::FeatureAvatarData = Feature(QLatin1String(Contact::staticMetaObject.className()), 1, false); /** * Feature used in order to access contact avatar token info. * * \sa isAvatarTokenKnown(), avatarToken(), avatarTokenChanged() */ const Feature Contact::FeatureAvatarToken = Feature(QLatin1String(Contact::staticMetaObject.className()), 2, false); /** * Feature used in order to access contact capabilities info. * * \sa capabilities(), capabilitiesChanged() */ const Feature Contact::FeatureCapabilities = Feature(QLatin1String(Contact::staticMetaObject.className()), 3, false); /** * Feature used in order to access contact info fields. * * \sa infoFields(), infoFieldsChanged() */ const Feature Contact::FeatureInfo = Feature(QLatin1String(Contact::staticMetaObject.className()), 4, false); /** * Feature used in order to access contact location info. * * \sa location(), locationUpdated() */ const Feature Contact::FeatureLocation = Feature(QLatin1String(Contact::staticMetaObject.className()), 5, false); /** * Feature used in order to access contact presence info. * * \sa presence(), presenceChanged() */ const Feature Contact::FeatureSimplePresence = Feature(QLatin1String(Contact::staticMetaObject.className()), 6, false); /** * Feature used in order to access contact roster groups. * * \sa groups(), addedToGroup(), removedFromGroup() */ const Feature Contact::FeatureRosterGroups = Feature(QLatin1String(Contact::staticMetaObject.className()), 7, false); /** * Feature used in order to access contact addressable addresses info. * * \sa vcardAddresses(), uris() */ const Feature Contact::FeatureAddresses = Feature(QLatin1String(Contact::staticMetaObject.className()), 8, false); /** * Feature used in order to access contact client types info. * * \sa clientTypes(), requestClientTypes(), clientTypesChanged() */ const Feature Contact::FeatureClientTypes = Feature(QLatin1String(Contact::staticMetaObject.className()), 9, false); /** * Construct a new Contact object. * * \param manager ContactManager owning this contact. * \param handle The contact handle. * \param requestedFeatures The contact requested features. * \param attributes The contact attributes. */ Contact::Contact(ContactManager *manager, const ReferencedHandles &handle, const Features &requestedFeatures, const QVariantMap &attributes) : Object(), mPriv(new Private(this, manager, handle)) { mPriv->requestedFeatures.unite(requestedFeatures); mPriv->id = qdbus_cast(attributes[ TP_QT_IFACE_CONNECTION + QLatin1String("/contact-id")]); } /** * Class destructor. */ Contact::~Contact() { debug() << "Contact" << id() << "destroyed"; delete mPriv; } /** * Return the contact nanager owning this contact. * * \return A pointer to the ContactManager object. */ ContactManagerPtr Contact::manager() const { return ContactManagerPtr(mPriv->manager); } /** * Return the handle of this contact. * * \return The handle as a ReferencedHandles object. */ ReferencedHandles Contact::handle() const { return mPriv->handle; } /** * Return the identifier of this contact. * * \return The identifier. */ QString Contact::id() const { return mPriv->id; } /** * Return the features requested on this contact. * * \return The requested features as a set of Feature objects. */ Features Contact::requestedFeatures() const { return mPriv->requestedFeatures; } /** * Return the features that are actually enabled on this contact. * * \return The actual features as a set of Feature objects. */ Features Contact::actualFeatures() const { return mPriv->actualFeatures; } /** * Return the alias of this contact. * * Change notification is via the aliasChanged() signal. * * This method requires Contact::FeatureAlias to be ready. * * \return The alias. */ QString Contact::alias() const { if (!mPriv->requestedFeatures.contains(FeatureAlias)) { warning() << "Contact::alias() used on" << this << "for which FeatureAlias hasn't been requested - returning id"; return id(); } return mPriv->alias; } /** * Return the various vcard addresses that identify this contact. * * This method requires Contact::FeatureAddresses to be ready. * * \return The vcard addresses identifying this contact. * \sa ContactManager::contactsForVCardAddresses(), uris() */ QMap Contact::vcardAddresses() const { return mPriv->vcardAddresses; } /** * Return the various URI addresses that identify this contact. * * This method requires Contact::FeatureAddresses to be ready. * * \return The URI addresses identifying this contact. * \sa ContactManager::contactsForUris(), vcardAddresses() */ QStringList Contact::uris() const { return mPriv->uris; } /** * Return whether the avatar token of this contact is known. * * This method requires Contact::FeatureAvatarToken to be ready. * * \return \c true if the avatar token is known, \c false otherwise. * \sa avatarToken() */ bool Contact::isAvatarTokenKnown() const { if (!mPriv->requestedFeatures.contains(FeatureAvatarToken)) { warning() << "Contact::isAvatarTokenKnown() used on" << this << "for which FeatureAvatarToken hasn't been requested - returning false"; return false; } return mPriv->isAvatarTokenKnown; } /** * Return the avatar token for this contact. * * Change notification is via the avatarTokenChanged() signal. * * This method requires Contact::FeatureAvatarToken to be ready. * * \return The avatar token. * \sa isAvatarTokenKnown(), avatarTokenChanged(), avatarData() */ QString Contact::avatarToken() const { if (!mPriv->requestedFeatures.contains(FeatureAvatarToken)) { warning() << "Contact::avatarToken() used on" << this << "for which FeatureAvatarToken hasn't been requested - returning \"\""; return QString(); } else if (!isAvatarTokenKnown()) { warning() << "Contact::avatarToken() used on" << this << "for which the avatar token is not (yet) known - returning \"\""; return QString(); } return mPriv->avatarToken; } /** * Return the actual avatar for this contact. * * Change notification is via the avatarDataChanged() signal. * * This method requires Contact::FeatureAvatarData to be ready. * * \return The avatar as an AvatarData object. * \sa avatarDataChanged(), avatarToken() */ AvatarData Contact::avatarData() const { if (!mPriv->requestedFeatures.contains(FeatureAvatarData)) { warning() << "Contact::avatarData() used on" << this << "for which FeatureAvatarData hasn't been requested - returning \"\""; return AvatarData(); } return mPriv->avatarData; } /** * Start a request to retrieve the avatar for this contact. * * Force the request of the avatar data. This method returns directly, emitting * avatarTokenChanged() and avatarDataChanged() signals once the token and data are * fetched from the server. * * This is only useful if the avatar token is unknown; see isAvatarTokenKnown(). * It happens in the case of offline XMPP contacts, because the server does not * send the token for them and an explicit request of the avatar data is needed. * * This method requires Contact::FeatureAvatarData to be ready. * * \sa avatarData(), avatarDataChanged(), avatarToken(), avatarTokenChanged() */ void Contact::requestAvatarData() { if (!mPriv->requestedFeatures.contains(FeatureAvatarData)) { warning() << "Contact::requestAvatarData() used on" << this << "for which FeatureAvatarData hasn't been requested - returning \"\""; return; } return manager()->requestContactAvatars(QList() << ContactPtr(this)); } /** * Return the actual presence of this contact. * * Change notification is via the presenceChanged() signal. * * This method requires Contact::FeatureSimplePresence to be ready. * * \return The presence as a Presence object. */ Presence Contact::presence() const { if (!mPriv->requestedFeatures.contains(FeatureSimplePresence)) { warning() << "Contact::presence() used on" << this << "for which FeatureSimplePresence hasn't been requested - returning Unknown"; return Presence(); } return mPriv->presence; } /** * Return the capabilities for this contact. * * User interfaces can use this information to show or hide UI components. * * If ContactManager::supportedFeatures() contains Contact::FeatureCapabilities, * the returned object will be a ContactCapabilities object, where * CapabilitiesBase::isSpecificToContact() will be \c true; if that feature * isn't present, this returned object is the subset of * Contact::manager()::connection()::capabilities() * and CapabilitiesBase::isSpecificToContact() will be \c false. * * Change notification is via the capabilitiesChanged() signal. * * This method requires Contact::FeatureCapabilities to be ready. * * @return An object representing the contact capabilities. */ ContactCapabilities Contact::capabilities() const { if (!mPriv->requestedFeatures.contains(FeatureCapabilities)) { warning() << "Contact::capabilities() used on" << this << "for which FeatureCapabilities hasn't been requested - returning 0"; return ContactCapabilities(false); } return mPriv->caps; } /** * Return the location for this contact. * * Change notification is via the locationUpdated() signal. * * This method requires Contact::FeatureLocation to be ready. * * \return The contact location as a LocationInfo object. */ LocationInfo Contact::location() const { if (!mPriv->requestedFeatures.contains(FeatureLocation)) { warning() << "Contact::location() used on" << this << "for which FeatureLocation hasn't been requested - returning 0"; return LocationInfo(); } return mPriv->location; } /** * Return whether the info card for this contact has been received. * * With some protocols (notably XMPP) information is not pushed from the server * and must be requested explicitely using refreshInfo() or requestInfo(). This * method can be used to know if the information is received from the server * or if an explicit request is needed. * * This method requires Contacat::FeatureInfo to be ready. * * \return \c true if the information is known; \c false otherwise. */ bool Contact::isContactInfoKnown() const { if (!mPriv->requestedFeatures.contains(FeatureInfo)) { warning() << "Contact::isContactInfoKnown() used on" << this << "for which FeatureInfo hasn't been requested - returning false"; return false; } return mPriv->isContactInfoKnown; } /** * Return the information for this contact. * * Note that this method only return cached information. In order to refresh the * information use refreshInfo(). * * Change notification is via the infoFieldsChanged() signal. * * This method requires Contact::FeatureInfo to be ready. * * \return The contact info as a Contact::InfoFields object. */ Contact::InfoFields Contact::infoFields() const { if (!mPriv->requestedFeatures.contains(FeatureInfo)) { warning() << "Contact::infoFields() used on" << this << "for which FeatureInfo hasn't been requested - returning empty " "InfoFields"; return InfoFields(); } return mPriv->info; } /** * Refresh information for the given contact. * * Once the information is retrieved infoFieldsChanged() will be emitted. * * This method requires Contact::FeatureInfo to be ready. * * \return A PendingOperation, which will emit PendingOperation::finished * when the call has finished. * \sa infoFieldsChanged() */ PendingOperation *Contact::refreshInfo() { ConnectionPtr conn = manager()->connection(); if (!mPriv->requestedFeatures.contains(FeatureInfo)) { warning() << "Contact::refreshInfo() used on" << this << "for which FeatureInfo hasn't been requested - failing"; return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("FeatureInfo needs to be ready in order to " "use this method"), ContactPtr(this)); } return manager()->refreshContactInfo(QList() << ContactPtr(this)); } /** * Start a request to retrieve the information for this contact. * * This method is useful for UIs that don't care about notification of changes * in the contact information but want to show the contact information * (e.g. right-click on a contact and show the contact info). * * \return A PendingContactInfo, which will emit PendingContactInfo::finished * when the information has been retrieved or an error occurred. */ PendingContactInfo *Contact::requestInfo() { return new PendingContactInfo(ContactPtr(this)); } /** * Return whether the presence subscription state of this contact is known. * * \return \c true if the presence subscription state is known, \c false otherwise. * \sa subscriptionState(), isSubscriptionRejected() */ bool Contact::isSubscriptionStateKnown() const { return mPriv->subscriptionState != SubscriptionStateUnknown; } /** * Return whether a request to see this contact's presence was denied. * * \return \c if the a request to see the presence subscription was denied, \c false otherwise. * \sa isSubscriptionStateKnown(), subscriptionState() */ bool Contact::isSubscriptionRejected() const { return mPriv->subscriptionState == SubscriptionStateRemovedRemotely; } /** * Return the presence subscription state of this contact (i.e. whether the local user can retrieve * information about this contact's presence). * * \return The presence subscription state as Contact::PresenceState. * \sa isSubscriptionStateKnown(), isSubscriptionRejected() */ Contact::PresenceState Contact::subscriptionState() const { return subscriptionStateToPresenceState(mPriv->subscriptionState); } /** * Return whether the presence publish state of this contact is known. * * \return \c true if the presence publish state is known, \c false otherwise. * \sa publishState(), isPublishCancelled() */ bool Contact::isPublishStateKnown() const { return mPriv->publishState != SubscriptionStateUnknown; } /** * Return whether a request to publish presence information to this contact was cancelled. * * \return \c true if a request to publish presence information was cancelled, * \c false otherwise. * \sa isPublishStateKnown(), publishState() */ bool Contact::isPublishCancelled() const { return mPriv->publishState == SubscriptionStateRemovedRemotely; } /** * Return the presence publish state of this contact (i.e. whether this contact can retrieve * information about the local user's presence). * * \return The presence publish state as Contact::PresenceState. * \sa isSubscriptionStateKnown(), isSubscriptionRejected() */ Contact::PresenceState Contact::publishState() const { return subscriptionStateToPresenceState(mPriv->publishState); } /** * If the publishState() is Contact::PresenceStateAsk, return an optional message that was sent * by the contact asking to receive the local user's presence; omitted if none was given. * * \return The message that was sent by the contact asking to receive the local user's presence. * \sa publishState() */ QString Contact::publishStateMessage() const { return mPriv->publishStateMessage; } /** * Start a request that this contact allow the local user to subscribe to their presence (i.e. that * this contact's subscribe attribute becomes Contact::PresenceStateYes) * * This method requires Connection::FeatureRoster to be ready. * * \return A PendingOperation which will emit PendingOperation::finished * when the request has been made. * \sa subscriptionState(), removePresenceSubscription() */ PendingOperation *Contact::requestPresenceSubscription(const QString &message) { return manager()->requestPresenceSubscription(QList() << ContactPtr(this), message); } /** * Start a request for the local user to stop receiving presence from this contact. * * This method requires Connection::FeatureRoster to be ready. * * \return A PendingOperation which will emit PendingOperation::finished * when the request has been made. * \sa subscriptionState(), requestPresenceSubscription() */ PendingOperation *Contact::removePresenceSubscription(const QString &message) { return manager()->removePresenceSubscription(QList() << ContactPtr(this), message); } /** * Start a request to authorize this contact's request to see the local user presence * (i.e. that this contact publish attribute becomes Contact::PresenceStateYes). * * This method requires Connection::FeatureRoster to be ready. * * \return A PendingOperation which will emit PendingOperation::finished * when the request has been made. * \sa publishState(), removePresencePublication() */ PendingOperation *Contact::authorizePresencePublication(const QString &message) { return manager()->authorizePresencePublication(QList() << ContactPtr(this), message); } /** * Start a request for the local user to stop sending presence to this contact. * * This method requires Connection::FeatureRoster to be ready. * * \return A PendingOperation which will emit PendingOperation::finished * when the request has been made. * \sa publishState(), authorizePresencePublication() */ PendingOperation *Contact::removePresencePublication(const QString &message) { return manager()->removePresencePublication(QList() << ContactPtr(this), message); } /** * Return whether this contact is blocked. * * Change notification is via the blockStatusChanged() signal. * * \return \c true if blocked, \c false otherwise. * \sa block() */ bool Contact::isBlocked() const { return mPriv->blocked; } /** * Block this contact. Blocked contacts cannot send messages to the user; * depending on the protocol, blocking a contact may have other effects. * * This method requires Connection::FeatureRoster to be ready. * * \return A PendingOperation which will emit PendingOperation::finished * when an attempt has been made to take the requested action. * \sa blockAndReportAbuse(), unblock() */ PendingOperation *Contact::block() { return manager()->blockContacts(QList() << ContactPtr(this)); } /** * Block this contact and additionally report abusive behaviour * to the server. * * If reporting abusive behaviour is not supported by the protocol, * this method has the same effect as block(). * * This method requires Connection::FeatureRoster to be ready. * * \return A PendingOperation which will emit PendingOperation::finished * when an attempt has been made to take the requested action. * \sa ContactManager::canReportAbuse(), block(), unblock() */ PendingOperation *Contact::blockAndReportAbuse() { return manager()->blockContactsAndReportAbuse(QList() << ContactPtr(this)); } /** * Unblock this contact. * * This method requires Connection::FeatureRoster to be ready. * * \return A PendingOperation which will emit PendingOperation::finished * when an attempt has been made to take the requested action. * \sa block(), blockAndReportAbuse() */ PendingOperation *Contact::unblock() { return manager()->unblockContacts(QList() << ContactPtr(this)); } /** * Return the names of the user-defined roster groups to which the contact * belongs. * * Change notification is via the addedToGroup() and removedFromGroup() signals. * * This method requires Connection::FeatureRosterGroups to be ready. * * \return A list of user-defined contact list groups names. * \sa addToGroup(), removedFromGroup() */ QStringList Contact::groups() const { return mPriv->groups.toList(); } /** * Attempt to add the contact to the user-defined contact list * group named \a group. * * This method requires Connection::FeatureRosterGroups to be ready. * * \param group The group name. * \return A PendingOperation which will emit PendingOperation::finished * when an attempt has been made to to add the contact to the user-defined contact * list group. * \sa groups(), removeFromGroup() */ PendingOperation *Contact::addToGroup(const QString &group) { return manager()->addContactsToGroup(group, QList() << ContactPtr(this)); } /** * Attempt to remove the contact from the user-defined contact list * group named \a group. * * This method requires Connection::FeatureRosterGroups to be ready. * * \param group The group name. * \return A PendingOperation which will emit PendingOperation::finished * when an attempt has been made to to remote the contact to the user-defined contact * list group. * \sa groups(), addToGroup() */ PendingOperation *Contact::removeFromGroup(const QString &group) { return manager()->removeContactsFromGroup(group, QList() << ContactPtr(this)); } /** * Return the client types of this contact, if known. * * Client types are represented using the values documented by the XMPP registrar, * with some additional types. A contact can set one or more client types, or can simply * advertise itself as unknown - in this case, an empty list is returned. * * This method returns cached information and is more appropriate for "lazy" * client type finding, for instance displaying the client types (if available) * of everyone in your contact list. For getting latest up-to-date information from * the server you should use requestClientTypes() instead. * * This method requires FeatureClientTypes to be ready. * * \return A list of the client types advertised by this contact. * \sa requestClientTypes(), clientTypesChanged() */ QStringList Contact::clientTypes() const { if (!mPriv->requestedFeatures.contains(FeatureClientTypes)) { warning() << "Contact::clientTypes() used on" << this << "for which FeatureClientTypes hasn't been requested - returning an empty list"; return QStringList(); } return mPriv->clientTypes; } /** * Return the current client types of the given contact. * * If necessary, this method will make a request to the server for up-to-date * information and wait for a reply. Therefore, this method is more appropriate * for use in a "Contact Information..." dialog; it can be used to show progress * information (while waiting for the method to return), and can distinguish * between various error conditions. * * This method requires FeatureClientTypes to be ready. * * \return A list of the client types advertised by this contact. * \sa clientTypes(), clientTypesChanged() */ PendingStringList *Contact::requestClientTypes() { if (!mPriv->requestedFeatures.contains(FeatureClientTypes)) { warning() << "Contact::requestClientTypes() used on" << this << "for which FeatureClientTypes hasn't been requested - the operation will fail"; } Client::ConnectionInterfaceClientTypesInterface *clientTypesInterface = manager()->connection()->interface(); return new PendingStringList( clientTypesInterface->RequestClientTypes(mPriv->handle.at(0)), ContactPtr(this)); } void Contact::augment(const Features &requestedFeatures, const QVariantMap &attributes) { mPriv->requestedFeatures.unite(requestedFeatures); mPriv->id = qdbus_cast(attributes[ TP_QT_IFACE_CONNECTION + QLatin1String("/contact-id")]); if (attributes.contains(TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_LIST + QLatin1String("/subscribe"))) { uint subscriptionState = qdbus_cast(attributes.value( TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_LIST + QLatin1String("/subscribe"))); setSubscriptionState((SubscriptionState) subscriptionState); } if (attributes.contains(TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_LIST + QLatin1String("/publish"))) { uint publishState = qdbus_cast(attributes.value( TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_LIST + QLatin1String("/publish"))); QString publishRequest = qdbus_cast(attributes.value( TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_LIST + QLatin1String("/publish-request"))); setPublishState((SubscriptionState) publishState, publishRequest); } foreach (const Feature &feature, requestedFeatures) { QString maybeAlias; SimplePresence maybePresence; RequestableChannelClassList maybeCaps; QVariantMap maybeLocation; ContactInfoFieldList maybeInfo; if (feature == FeatureAlias) { maybeAlias = qdbus_cast(attributes.value( TP_QT_IFACE_CONNECTION_INTERFACE_ALIASING + QLatin1String("/alias"))); if (!maybeAlias.isEmpty()) { receiveAlias(maybeAlias); } else if (mPriv->alias.isEmpty()) { mPriv->alias = mPriv->id; } } else if (feature == FeatureAvatarData) { if (manager()->supportedFeatures().contains(FeatureAvatarData)) { mPriv->actualFeatures.insert(FeatureAvatarData); mPriv->updateAvatarData(); } } else if (feature == FeatureAvatarToken) { if (attributes.contains( TP_QT_IFACE_CONNECTION_INTERFACE_AVATARS + QLatin1String("/token"))) { receiveAvatarToken(qdbus_cast(attributes.value( TP_QT_IFACE_CONNECTION_INTERFACE_AVATARS + QLatin1String("/token")))); } else { if (manager()->supportedFeatures().contains(FeatureAvatarToken)) { // AvatarToken being supported but not included in the mapping indicates // that the avatar token is not known - however, the feature is working fine mPriv->actualFeatures.insert(FeatureAvatarToken); } // In either case, the avatar token can't be known mPriv->isAvatarTokenKnown = false; mPriv->avatarToken = QLatin1String(""); } } else if (feature == FeatureCapabilities) { maybeCaps = qdbus_cast(attributes.value( TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_CAPABILITIES + QLatin1String("/capabilities"))); if (!maybeCaps.isEmpty()) { receiveCapabilities(maybeCaps); } else { if (manager()->supportedFeatures().contains(FeatureCapabilities) && mPriv->requestedFeatures.contains(FeatureCapabilities)) { // Capabilities being supported but not updated in the // mapping indicates that the capabilities is not known - // however, the feature is working fine. mPriv->actualFeatures.insert(FeatureCapabilities); } } } else if (feature == FeatureInfo) { maybeInfo = qdbus_cast(attributes.value( TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_INFO + QLatin1String("/info"))); if (!maybeInfo.isEmpty()) { receiveInfo(maybeInfo); } else { if (manager()->supportedFeatures().contains(FeatureInfo) && mPriv->requestedFeatures.contains(FeatureInfo)) { // Info being supported but not updated in the // mapping indicates that the info is not known - // however, the feature is working fine mPriv->actualFeatures.insert(FeatureInfo); } } } else if (feature == FeatureLocation) { maybeLocation = qdbus_cast(attributes.value( TP_QT_IFACE_CONNECTION_INTERFACE_LOCATION + QLatin1String("/location"))); if (!maybeLocation.isEmpty()) { receiveLocation(maybeLocation); } else { if (manager()->supportedFeatures().contains(FeatureLocation) && mPriv->requestedFeatures.contains(FeatureLocation)) { // Location being supported but not updated in the // mapping indicates that the location is not known - // however, the feature is working fine mPriv->actualFeatures.insert(FeatureLocation); } } } else if (feature == FeatureSimplePresence) { maybePresence = qdbus_cast(attributes.value( TP_QT_IFACE_CONNECTION_INTERFACE_SIMPLE_PRESENCE + QLatin1String("/presence"))); if (!maybePresence.status.isEmpty()) { receiveSimplePresence(maybePresence); } else { mPriv->presence.setStatus(ConnectionPresenceTypeUnknown, QLatin1String("unknown"), QLatin1String("")); } } else if (feature == FeatureRosterGroups) { QStringList groups = qdbus_cast(attributes.value( TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_GROUPS + QLatin1String("/groups"))); mPriv->groups = groups.toSet(); } else if (feature == FeatureAddresses) { VCardFieldAddressMap addresses = qdbus_cast(attributes.value( TP_QT_IFACE_CONNECTION_INTERFACE_ADDRESSING + QLatin1String("/addresses"))); QStringList uris = qdbus_cast(attributes.value( TP_QT_IFACE_CONNECTION_INTERFACE_ADDRESSING + QLatin1String("/uris"))); receiveAddresses(addresses, uris); } else if (feature == FeatureClientTypes) { QStringList maybeClientTypes = qdbus_cast(attributes.value( TP_QT_IFACE_CONNECTION_INTERFACE_CLIENT_TYPES + QLatin1String("/client-types"))); if (!maybeClientTypes.isEmpty()) { receiveClientTypes(maybeClientTypes); } else { if (manager()->supportedFeatures().contains(FeatureClientTypes) && mPriv->requestedFeatures.contains(FeatureClientTypes)) { // ClientTypes being supported but not updated in the // mapping indicates that the info is not known - // however, the feature is working fine mPriv->actualFeatures.insert(FeatureClientTypes); } } } else { warning() << "Unknown feature" << feature << "encountered when augmenting Contact"; } } } void Contact::receiveAlias(const QString &alias) { if (!mPriv->requestedFeatures.contains(FeatureAlias)) { return; } mPriv->actualFeatures.insert(FeatureAlias); if (mPriv->alias != alias) { mPriv->alias = alias; emit aliasChanged(alias); } } void Contact::receiveAvatarToken(const QString &token) { setAvatarToken(token); if (mPriv->actualFeatures.contains(FeatureAvatarData)) { mPriv->updateAvatarData(); } } void Contact::setAvatarToken(const QString &token) { if (!mPriv->requestedFeatures.contains(FeatureAvatarToken)) { return; } mPriv->actualFeatures.insert(FeatureAvatarToken); if (!mPriv->isAvatarTokenKnown || mPriv->avatarToken != token) { mPriv->isAvatarTokenKnown = true; mPriv->avatarToken = token; emit avatarTokenChanged(mPriv->avatarToken); } } void Contact::receiveAvatarData(const AvatarData &avatar) { if (mPriv->avatarData.fileName != avatar.fileName) { mPriv->avatarData = avatar; emit avatarDataChanged(mPriv->avatarData); } } void Contact::receiveSimplePresence(const SimplePresence &presence) { if (!mPriv->requestedFeatures.contains(FeatureSimplePresence)) { return; } mPriv->actualFeatures.insert(FeatureSimplePresence); if (mPriv->presence.status() != presence.status || mPriv->presence.statusMessage() != presence.statusMessage) { mPriv->presence.setStatus(presence); emit presenceChanged(mPriv->presence); } } void Contact::receiveCapabilities(const RequestableChannelClassList &caps) { if (!mPriv->requestedFeatures.contains(FeatureCapabilities)) { return; } mPriv->actualFeatures.insert(FeatureCapabilities); if (mPriv->caps.allClassSpecs().bareClasses() != caps) { mPriv->caps.updateRequestableChannelClasses(caps); emit capabilitiesChanged(mPriv->caps); } } void Contact::receiveLocation(const QVariantMap &location) { if (!mPriv->requestedFeatures.contains(FeatureLocation)) { return; } mPriv->actualFeatures.insert(FeatureLocation); if (mPriv->location.allDetails() != location) { mPriv->location.updateData(location); emit locationUpdated(mPriv->location); } } void Contact::receiveInfo(const ContactInfoFieldList &info) { if (!mPriv->requestedFeatures.contains(FeatureInfo)) { return; } mPriv->actualFeatures.insert(FeatureInfo); mPriv->isContactInfoKnown = true; if (mPriv->info.allFields() != info) { mPriv->info = InfoFields(info); emit infoFieldsChanged(mPriv->info); } } void Contact::receiveAddresses(const QMap &addresses, const QStringList &uris) { if (!mPriv->requestedFeatures.contains(FeatureAddresses)) { return; } mPriv->actualFeatures.insert(FeatureAddresses); mPriv->vcardAddresses = addresses; mPriv->uris = uris; } void Contact::receiveClientTypes(const QStringList &clientTypes) { if (!mPriv->requestedFeatures.contains(FeatureClientTypes)) { return; } mPriv->actualFeatures.insert(FeatureClientTypes); if (mPriv->clientTypes != clientTypes) { mPriv->clientTypes = clientTypes; emit clientTypesChanged(mPriv->clientTypes); } } Contact::PresenceState Contact::subscriptionStateToPresenceState(uint subscriptionState) { switch (subscriptionState) { case SubscriptionStateAsk: return PresenceStateAsk; case SubscriptionStateYes: return PresenceStateYes; default: return PresenceStateNo; } } void Contact::setSubscriptionState(SubscriptionState state) { if (mPriv->subscriptionState == state) { return; } mPriv->subscriptionState = state; emit subscriptionStateChanged(subscriptionStateToPresenceState(state)); } void Contact::setPublishState(SubscriptionState state, const QString &message) { if (mPriv->publishState == state && mPriv->publishStateMessage == message) { return; } mPriv->publishState = state; mPriv->publishStateMessage = message; emit publishStateChanged(subscriptionStateToPresenceState(state), message); } void Contact::setBlocked(bool value) { if (mPriv->blocked == value) { return; } mPriv->blocked = value; emit blockStatusChanged(value); } void Contact::setAddedToGroup(const QString &group) { if (!mPriv->groups.contains(group)) { mPriv->groups.insert(group); emit addedToGroup(group); } } void Contact::setRemovedFromGroup(const QString &group) { if (mPriv->groups.remove(group)) { emit removedFromGroup(group); } } /** * \fn void Contact::aliasChanged(const QString &alias) * * Emitted when the value of alias() changes. * * \param alias The new alias of this contact. * \sa alias() */ /** * \fn void Contact::avatarTokenChanged(const QString &avatarToken) * * Emitted when the value of avatarToken() changes. * * \param avatarToken The new avatar token of this contact. * \sa avatarToken() */ /** * \fn void Contact::avatarDataChanged(const QString &avatarToken) * * Emitted when the value of avatarData() changes. * * \param avatarData The new avatar of this contact. * \sa avatarData() */ /** * \fn void Contact::presenceChanged(const Tp::Presence &presence) * * Emitted when the value of presence() changes. * * \param presence The new presence of this contact. * \sa presence() */ /** * \fn void Contact::capabilitiesChanged(const Tp::ContactCapabilities &caps) * * Emitted when the value of capabilities() changes. * * \param caps The new capabilities of this contact. * \sa capabilities() */ /** * \fn void Contact::locationUpdated(const Tp::LocationInfo &location) * * Emitted when the value of location() changes. * * \param caps The new location of this contact. * \sa location() */ /** * \fn void Contact::infoFieldsChanged(const Tp::Contact::InfoFields &infoFields) * * Emitted when the value of infoFields() changes. * * \param InfoFields The new info of this contact. * \sa infoFields() */ /** * \fn void Contact::subscriptionStateChanged(Tp::Contact::PresenceState state) * * Emitted when the value of subscriptionState() changes. * * \param state The new subscription state of this contact. * \sa subscriptionState() */ /** * \fn void Contact::publishStateChanged(Tp::Contact::PresenceState state, const QString &message) * * Emitted when the value of publishState() changes. * * \param state The new publish state of this contact. * \sa publishState() */ /** * \fn void Contact::blockStatusChanged(bool blocked) * * Emitted when the value of isBlocked() changes. * * \param status The new block status of this contact. * \sa isBlocked() */ /** * \fn void Contact::addedToGroup(const QString &group) * * Emitted when this contact is added to \a group of the contact list. * * \param group The group name. * \sa groups(), removedFromGroup() */ /** * \fn void Contact::removedFromGroup(const QString &group) * * Emitted when this contact is removed from \a group of the contact list. * * \param group The group name. * \sa groups(), addedToGroup() */ /** * \fn void Contact::clientTypesChanged(const QStringList &clientTypes) * * Emitted when the client types of this contact change or become known. * * \param clientTypes The contact's client types * \sa clientTypes(), requestClientTypes() */ } // Tp telepathy-qt-0.9.3/TelepathyQt/CallStreamEndpointInterface0000644000175200001440000000043012000056607026151 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_CallStreamEndpointInterface_HEADER_GUARD_ #define _TelepathyQt_CallStreamEndpointInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/ChannelDispatcher0000644000175200001440000000040212000056607024156 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelDispatcher_HEADER_GUARD_ #define _TelepathyQt_ChannelDispatcher_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/pending-debug-message-list.h0000644000175200001440000000327012000056607026136 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011-2012 Collabora Ltd. * @license LGPL 2.1 * * 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 _TelepathyQt_pending_debug_message_list_h_HEADER_GUARD_ #define _TelepathyQt_pending_debug_message_list_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include namespace Tp { class TP_QT_EXPORT PendingDebugMessageList : public Tp::PendingOperation { Q_OBJECT Q_DISABLE_COPY(PendingDebugMessageList) public: virtual ~PendingDebugMessageList(); DebugMessageList result() const; private Q_SLOTS: TP_QT_NO_EXPORT void watcherFinished(QDBusPendingCallWatcher*); private: friend class DebugReceiver; TP_QT_NO_EXPORT PendingDebugMessageList(const QDBusPendingCall &call, const SharedPtr &object); struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/channel-class-spec.h0000644000175200001440000002651612000056607024506 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_channel_class_spec_h_HEADER_GUARD_ #define _TelepathyQt_channel_class_spec_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include #include #include #include namespace Tp { class TP_QT_EXPORT ChannelClassSpec { public: ChannelClassSpec(); ChannelClassSpec(const ChannelClass &cc); ChannelClassSpec(const QVariantMap &props); ChannelClassSpec(const QString &channelType, HandleType targetHandleType, const QVariantMap &otherProperties = QVariantMap()); ChannelClassSpec(const QString &channelType, HandleType targetHandleType, bool requested, const QVariantMap &otherProperties = QVariantMap()); ChannelClassSpec(const ChannelClassSpec &other, const QVariantMap &additionalProperties = QVariantMap()); ~ChannelClassSpec(); bool isValid() const; ChannelClassSpec &operator=(const ChannelClassSpec &other); bool operator==(const ChannelClassSpec &other) const { return this->allProperties() == other.allProperties(); } bool isSubsetOf(const ChannelClassSpec &other) const; bool matches(const QVariantMap &immutableProperties) const; QString channelType() const { return qdbus_cast( property(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"))); } void setChannelType(const QString &type) { setProperty(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), QVariant::fromValue(type)); } HandleType targetHandleType() const { return (HandleType) qdbus_cast( property( TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"))); } void setTargetHandleType(HandleType type) { setProperty(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), QVariant::fromValue((uint) type)); } bool hasRequested() const { return hasProperty(TP_QT_IFACE_CHANNEL + QLatin1String(".Requested")); } bool isRequested() const { return qdbus_cast( property(TP_QT_IFACE_CHANNEL + QLatin1String(".Requested"))); } void setRequested(bool requested) { setProperty(TP_QT_IFACE_CHANNEL + QLatin1String(".Requested"), QVariant::fromValue(requested)); } void unsetRequested() { unsetProperty(TP_QT_IFACE_CHANNEL + QLatin1String(".Requested")); } bool hasCallInitialAudioFlag() const { return qdbus_cast( property(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudio"))); } void setCallInitialAudioFlag() { setProperty(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudio"), QVariant::fromValue(true)); } void unsetCallInitialAudioFlag() { unsetProperty(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudio")); } bool hasCallInitialVideoFlag() const { return qdbus_cast( property(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideo"))); } void setCallInitialVideoFlag() { setProperty(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideo"), QVariant::fromValue(true)); } void unsetCallInitialVideoFlag() { unsetProperty(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideo")); } TP_QT_DEPRECATED bool hasStreamedMediaInitialAudioFlag() const { return qdbus_cast( property(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialAudio"))); } TP_QT_DEPRECATED void setStreamedMediaInitialAudioFlag() { setProperty(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialAudio"), QVariant::fromValue(true)); } TP_QT_DEPRECATED void unsetStreamedMediaInitialAudioFlag() { unsetProperty(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialAudio")); } TP_QT_DEPRECATED bool hasStreamedMediaInitialVideoFlag() const { return qdbus_cast( property(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialVideo"))); } TP_QT_DEPRECATED void setStreamedMediaInitialVideoFlag() { setProperty(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialVideo"), QVariant::fromValue(true)); } TP_QT_DEPRECATED void unsetStreamedMediaInitialVideoFlag() { unsetProperty(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialVideo")); } bool hasProperty(const QString &qualifiedName) const; QVariant property(const QString &qualifiedName) const; void setProperty(const QString &qualifiedName, const QVariant &value); void unsetProperty(const QString &qualifiedName); QVariantMap allProperties() const; ChannelClass bareClass() const; static ChannelClassSpec textChat(const QVariantMap &additionalProperties = QVariantMap()); static ChannelClassSpec textChatroom(const QVariantMap &additionalProperties = QVariantMap()); static ChannelClassSpec unnamedTextChat(const QVariantMap &additionalProperties = QVariantMap()); static ChannelClassSpec mediaCall(const QVariantMap &additionalProperties = QVariantMap()); static ChannelClassSpec audioCall(const QVariantMap &additionalProperties = QVariantMap()); static ChannelClassSpec videoCall(const QVariantMap &additionalProperties = QVariantMap()); static ChannelClassSpec videoCallWithAudio(const QVariantMap &additionalProperties = QVariantMap()); TP_QT_DEPRECATED static ChannelClassSpec streamedMediaCall(const QVariantMap &additionalProperties = QVariantMap()); TP_QT_DEPRECATED static ChannelClassSpec streamedMediaAudioCall(const QVariantMap &additionalProperties = QVariantMap()); TP_QT_DEPRECATED static ChannelClassSpec streamedMediaVideoCall(const QVariantMap &additionalProperties = QVariantMap()); TP_QT_DEPRECATED static ChannelClassSpec streamedMediaVideoCallWithAudio(const QVariantMap &additionalProperties = QVariantMap()); TP_QT_DEPRECATED static ChannelClassSpec unnamedStreamedMediaCall(const QVariantMap &additionalProperties = QVariantMap()); TP_QT_DEPRECATED static ChannelClassSpec unnamedStreamedMediaAudioCall(const QVariantMap &additionalProperties = QVariantMap()); TP_QT_DEPRECATED static ChannelClassSpec unnamedStreamedMediaVideoCall(const QVariantMap &additionalProperties = QVariantMap()); TP_QT_DEPRECATED static ChannelClassSpec unnamedStreamedMediaVideoCallWithAudio(const QVariantMap &additionalProperties = QVariantMap()); static ChannelClassSpec serverAuthentication(const QVariantMap &additionalProperties = QVariantMap()); static ChannelClassSpec roomList(const QVariantMap &additionalProperties = QVariantMap()); static ChannelClassSpec outgoingFileTransfer(const QVariantMap &additionalProperties = QVariantMap()); static ChannelClassSpec incomingFileTransfer(const QVariantMap &additionalProperties = QVariantMap()); static ChannelClassSpec outgoingStreamTube(const QString &service = QString(), const QVariantMap &additionalProperties = QVariantMap()); static ChannelClassSpec incomingStreamTube(const QString &service = QString(), const QVariantMap &additionalProperties = QVariantMap()); static ChannelClassSpec outgoingRoomStreamTube(const QString &service = QString(), const QVariantMap &additionalProperties = QVariantMap()); static ChannelClassSpec incomingRoomStreamTube(const QString &service = QString(), const QVariantMap &additionalProperties = QVariantMap()); static ChannelClassSpec outgoingDBusTube(const QString &serviceName = QString(), const QVariantMap &additionalProperties = QVariantMap()); static ChannelClassSpec incomingDBusTube(const QString &serviceName = QString(), const QVariantMap &additionalProperties = QVariantMap()); static ChannelClassSpec outgoingRoomDBusTube(const QString &serviceName = QString(), const QVariantMap &additionalProperties = QVariantMap()); static ChannelClassSpec incomingRoomDBusTube(const QString &serviceName = QString(), const QVariantMap &additionalProperties = QVariantMap()); static ChannelClassSpec contactSearch(const QVariantMap &additionalProperties = QVariantMap()); private: struct Private; friend struct Private; QSharedDataPointer mPriv; }; class TP_QT_EXPORT ChannelClassSpecList : public QList { public: ChannelClassSpecList() { } ChannelClassSpecList(const ChannelClassSpec &spec) { append(spec); } ChannelClassSpecList(const QList &other) : QList(other) { } ChannelClassSpecList(const ChannelClassList &classes) { // Why doesn't Qt have range constructors like STL... stupid, so stupid. Q_FOREACH (const ChannelClass &cc, classes) { append(cc); } } ChannelClassList bareClasses() const { ChannelClassList list; Q_FOREACH (const ChannelClassSpec &spec, *this) { list.append(spec.bareClass()); } return list; } }; inline uint qHash(const ChannelClassSpec &spec) { uint ret = 0; QVariantMap::const_iterator it = spec.allProperties().constBegin(); QVariantMap::const_iterator end = spec.allProperties().constEnd(); int i = spec.allProperties().size() + 1; for (; it != end; ++it) { // all D-Bus types should be convertible to QString QPair p(it.key(), it.value().toString()); int h = qHash(p); ret ^= ((h << (2 << i)) | (h >> (2 >> i))); i--; } return ret; } inline uint qHash(const QSet &specSet) { int ret = 0; Q_FOREACH (const ChannelClassSpec &spec, specSet) { int h = qHash(spec); ret ^= h; } return ret; } inline uint qHash(const ChannelClassSpecList &specList) { // Make it unique by converting to QSet QSet uniqueSet = specList.toSet(); return qHash(uniqueSet); } } // Tp Q_DECLARE_METATYPE(Tp::ChannelClassSpec); Q_DECLARE_METATYPE(Tp::ChannelClassSpecList); #endif telepathy-qt-0.9.3/TelepathyQt/ChannelInterfaceServicePointInterface0000644000175200001440000000043712000056607030154 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelInterfaceServicePointInterface_HEADER_GUARD_ #define _TelepathyQt_ChannelInterfaceServicePointInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/ProfileManager0000644000175200001440000000037112000056607023477 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ProfileManager_HEADER_GUARD_ #define _TelepathyQt_ProfileManager_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/connection-manager.xml0000644000175200001440000000073012000056607025151 0ustar00collabora-develusers00000000000000 Connection Manager interfaces telepathy-qt-0.9.3/TelepathyQt/pending-channel-request.h0000644000175200001440000000470212000056607025554 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_pending_channel_request_h_HEADER_GUARD_ #define _TelepathyQt_pending_channel_request_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include #include #include class QDBusPendingCallWatcher; namespace Tp { class Account; class ChannelRequestHints; class TP_QT_EXPORT PendingChannelRequest : public PendingOperation { Q_OBJECT Q_DISABLE_COPY(PendingChannelRequest) public: ~PendingChannelRequest(); AccountPtr account() const; ChannelRequestPtr channelRequest() const; PendingOperation *cancel(); Q_SIGNALS: void channelRequestCreated(const Tp::ChannelRequestPtr &channelRequest); private Q_SLOTS: TP_QT_NO_EXPORT void onWatcherFinished(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void onProceedOperationFinished(Tp::PendingOperation *op); TP_QT_NO_EXPORT void onCancelOperationFinished(Tp::PendingOperation *op); private: friend class Account; TP_QT_NO_EXPORT PendingChannelRequest(const AccountPtr &account, const QVariantMap &requestedProperties, const QDateTime &userActionTime, const QString &preferredHandler, bool create, const ChannelRequestHints &hints); TP_QT_NO_EXPORT PendingChannelRequest(const AccountPtr &account, const QString &errorName, const QString &errorMessage); struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/CallStream0000644000175200001440000000035512000056607022635 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_CallStream_HEADER_GUARD_ #define _TelepathyQt_CallStream_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/object.cpp0000644000175200001440000000320312000056607022630 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/object.moc.hpp" namespace Tp { /** * \class Object * \ingroup clientobject * \headerfile TelepathyQt/object.h * * \brief The Object class provides an object with property notification. */ /** * Construct a new Object object. */ Object::Object() : QObject() { } /** * Class destructor. */ Object::~Object() { } /** * Notify that a property named \a propertyName changed. * * This method will emit propertyChanged() for \a propertyName. * * \todo Use for more classes beyond Account. Most importantly Contact. */ void Object::notify(const char *propertyName) { emit propertyChanged(QLatin1String(propertyName)); } } // Tp telepathy-qt-0.9.3/TelepathyQt/connection-lowlevel.h0000644000175200001440000000602512000056607025022 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2010 Collabora Ltd. * @copyright Copyright (C) 2008-2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_connection_lowlevel_h_HEADER_GUARD_ #define _TelepathyQt_connection_lowlevel_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include namespace Tp { class Connection; class PendingChannel; class PendingContactAttributes; class PendingHandles; class PendingOperation; class PendingReady; class TP_QT_EXPORT ConnectionLowlevel : public QObject, public RefCounted { Q_OBJECT Q_DISABLE_COPY(ConnectionLowlevel) public: ~ConnectionLowlevel(); bool isValid() const; ConnectionPtr connection() const; PendingReady *requestConnect(const Features &requestedFeatures = Features()); PendingOperation *requestDisconnect(); SimpleStatusSpecMap allowedPresenceStatuses() const; uint maxPresenceStatusMessageLength() const; PendingOperation *setSelfPresence(const QString &status, const QString &statusMessage); PendingChannel *createChannel(const QVariantMap &request); PendingChannel *createChannel(const QVariantMap &request, int timeout); PendingChannel *ensureChannel(const QVariantMap &request); PendingChannel *ensureChannel(const QVariantMap &request, int timeout); PendingHandles *requestHandles(HandleType handleType, const QStringList &names); PendingHandles *referenceHandles(HandleType handleType, const UIntList &handles); PendingContactAttributes *contactAttributes(const UIntList &handles, const QStringList &interfaces, bool reference = true); QStringList contactAttributeInterfaces() const; void injectContactIds(const HandleIdentifierMap &contactIds); void injectContactId(uint handle, const QString &contactId); private: friend class Connection; friend class ContactManager; friend class PendingContacts; TP_QT_NO_EXPORT ConnectionLowlevel(Connection *parent); TP_QT_NO_EXPORT bool hasImmortalHandles() const; TP_QT_NO_EXPORT bool hasContactId(uint handle) const; TP_QT_NO_EXPORT QString contactId(uint handle) const; struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/or-filter.h0000644000175200001440000000444312000056607022741 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_or_filter_h_HEADER_GUARD_ #define _TelepathyQt_or_filter_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include namespace Tp { template class OrFilter : public Filter { public: static SharedPtr > create( const QList > > &filters = QList > >()) { return SharedPtr >(new OrFilter(filters)); } inline virtual ~OrFilter() { } inline virtual bool isValid() const { Q_FOREACH (const SharedPtr > &filter, mFilters) { if (!filter || !filter->isValid()) { return false; } } return true; } inline virtual bool matches(const SharedPtr &t) const { if (!isValid()) { return false; } Q_FOREACH (const SharedPtr > &filter, mFilters) { if (filter->matches(t)) { return true; } } return false; } inline QList > > filters() const { return mFilters; } private: OrFilter(const QList > > &filters) : Filter(), mFilters(filters) { } QList > > mFilters; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/ChannelRequest0000644000175200001440000000037112000056607023525 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelRequest_HEADER_GUARD_ #define _TelepathyQt_ChannelRequest_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/Account0000644000175200001440000000034312000056607022177 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_Account_HEADER_GUARD_ #define _TelepathyQt_Account_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/channel-dispatch-operation.xml0000644000175200001440000000040512000056607026604 0ustar00collabora-develusers00000000000000 Channel Dispatch Operation interface telepathy-qt-0.9.3/TelepathyQt/account-capability-filter.h0000644000175200001440000000236312000056607026073 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_account_capability_filter_h_HEADER_GUARD_ #define _TelepathyQt_account_capability_filter_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include namespace Tp { typedef GenericCapabilityFilter AccountCapabilityFilter; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/Connection0000644000175200001440000000035412000056607022704 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_Connection_HEADER_GUARD_ #define _TelepathyQt_Connection_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/ConnectionInterfaceAnonymityInterface0000644000175200001440000000044212000056607030254 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ConnectionInterfaceAnonymityInterface_HEADER_GUARD_ #define _TelepathyQt_ConnectionInterfaceAnonymityInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/contact-manager-internal.h0000644000175200001440000003233512000056607025714 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2010 Collabora Ltd. * @copyright Copyright (C) 2008-2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_contact_manager_internal_h_HEADER_GUARD_ #define _TelepathyQt_contact_manager_internal_h_HEADER_GUARD_ #include #include #include #include #include #include #include #include #include namespace Tp { class TP_QT_NO_EXPORT ContactManager::Roster : public QObject { Q_OBJECT public: Roster(ContactManager *manager); virtual ~Roster(); ContactListState state() const; PendingOperation *introspect(); PendingOperation *introspectGroups(); void reset(); Contacts allKnownContacts() const; QStringList allKnownGroups() const; PendingOperation *addGroup(const QString &group); PendingOperation *removeGroup(const QString &group); Contacts groupContacts(const QString &group) const; PendingOperation *addContactsToGroup(const QString &group, const QList &contacts); PendingOperation *removeContactsFromGroup(const QString &group, const QList &contacts); bool canRequestPresenceSubscription() const; bool subscriptionRequestHasMessage() const; PendingOperation *requestPresenceSubscription( const QList &contacts, const QString &message); bool canRemovePresenceSubscription() const; bool subscriptionRemovalHasMessage() const; bool canRescindPresenceSubscriptionRequest() const; bool subscriptionRescindingHasMessage() const; PendingOperation *removePresenceSubscription( const QList &contacts, const QString &message); bool canAuthorizePresencePublication() const; bool publicationAuthorizationHasMessage() const; PendingOperation *authorizePresencePublication( const QList &contacts, const QString &message); bool publicationRejectionHasMessage() const; bool canRemovePresencePublication() const; bool publicationRemovalHasMessage() const; PendingOperation *removePresencePublication( const QList &contacts, const QString &message); PendingOperation *removeContacts( const QList &contacts, const QString &message); bool canBlockContacts() const; bool canReportAbuse() const; PendingOperation *blockContacts(const QList &contacts, bool value, bool reportAbuse); private Q_SLOTS: void gotContactBlockingCapabilities(Tp::PendingOperation *op); void gotContactBlockingBlockedContacts(QDBusPendingCallWatcher *watcher); void onContactBlockingBlockedContactsChanged( const Tp::HandleIdentifierMap &added, const Tp::HandleIdentifierMap &removed); void gotContactListProperties(Tp::PendingOperation *op); void gotContactListContacts(QDBusPendingCallWatcher *watcher); void setStateSuccess(); void onContactListStateChanged(uint state); void onContactListContactsChangedWithId(const Tp::ContactSubscriptionMap &changes, const Tp::HandleIdentifierMap &ids, const Tp::HandleIdentifierMap &removals); void onContactListContactsChanged(const Tp::ContactSubscriptionMap &changes, const Tp::UIntList &removals); void onContactListBlockedContactsConstructed(Tp::PendingOperation *op); void onContactListNewContactsConstructed(Tp::PendingOperation *op); void onContactListGroupsChanged(const Tp::UIntList &contacts, const QStringList &added, const QStringList &removed); void onContactListGroupsCreated(const QStringList &names); void onContactListGroupRenamed(const QString &oldName, const QString &newName); void onContactListGroupsRemoved(const QStringList &names); void onModifyFinished(Tp::PendingOperation *op); void onModifyFinishSignaled(); void gotContactListChannelHandle(Tp::PendingOperation *op); void gotContactListChannel(Tp::PendingOperation *op); void onContactListChannelReady(); void gotContactListGroupsProperties(Tp::PendingOperation *op); void onContactListContactsUpgraded(Tp::PendingOperation *op); void onNewChannels(const Tp::ChannelDetailsList &channelDetailsList); void onContactListGroupChannelReady(Tp::PendingOperation *op); void gotChannels(QDBusPendingCallWatcher *watcher); void onStoredChannelMembersChanged( const Tp::Contacts &groupMembersAdded, const Tp::Contacts &groupLocalPendingMembersAdded, const Tp::Contacts &groupRemotePendingMembersAdded, const Tp::Contacts &groupMembersRemoved, const Tp::Channel::GroupMemberChangeDetails &details); void onSubscribeChannelMembersChanged( const Tp::Contacts &groupMembersAdded, const Tp::Contacts &groupLocalPendingMembersAdded, const Tp::Contacts &groupRemotePendingMembersAdded, const Tp::Contacts &groupMembersRemoved, const Tp::Channel::GroupMemberChangeDetails &details); void onPublishChannelMembersChanged( const Tp::Contacts &groupMembersAdded, const Tp::Contacts &groupLocalPendingMembersAdded, const Tp::Contacts &groupRemotePendingMembersAdded, const Tp::Contacts &groupMembersRemoved, const Tp::Channel::GroupMemberChangeDetails &details); void onDenyChannelMembersChanged( const Tp::Contacts &groupMembersAdded, const Tp::Contacts &groupLocalPendingMembersAdded, const Tp::Contacts &groupRemotePendingMembersAdded, const Tp::Contacts &groupMembersRemoved, const Tp::Channel::GroupMemberChangeDetails &details); void onContactListGroupMembersChanged( const Tp::Contacts &groupMembersAdded, const Tp::Contacts &groupLocalPendingMembersAdded, const Tp::Contacts &groupRemotePendingMembersAdded, const Tp::Contacts &groupMembersRemoved, const Tp::Channel::GroupMemberChangeDetails &details); void onContactListGroupRemoved(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage); private: struct ChannelInfo; struct BlockedContactsChangedInfo; struct UpdateInfo; struct GroupsUpdateInfo; struct GroupRenamedInfo; class ModifyFinishOp; class RemoveGroupOp; void introspectContactBlocking(); void introspectContactBlockingBlockedContacts(); void introspectContactList(); void introspectContactListContacts(); void processContactListChanges(); void processContactListBlockedContactsChanged(); void processContactListUpdates(); void processContactListGroupsUpdates(); void processContactListGroupsCreated(); void processContactListGroupRenamed(); void processContactListGroupsRemoved(); void processFinishedModify(); PendingOperation *queuedFinishVoid(const QDBusPendingCall &call); void setContactListChannelsReady(); void updateContactsBlockState(); void updateContactsPresenceState(); void computeKnownContactsChanges(const Contacts &added, const Contacts &pendingAdded, const Contacts &remotePendingAdded, const Contacts &removed, const Channel::GroupMemberChangeDetails &details); void checkContactListGroupsReady(); void setContactListGroupChannelsReady(); QString addContactListGroupChannel(const ChannelPtr &contactListGroupChannel); ContactManager *contactManager; Contacts cachedAllKnownContacts; bool usingFallbackContactList; bool hasContactBlockingInterface; PendingOperation *introspectPendingOp; PendingOperation *introspectGroupsPendingOp; uint pendingContactListState; uint contactListState; bool canReportAbusive; bool gotContactBlockingInitialBlockedContacts; bool canChangeContactList; bool contactListRequestUsesMessage; bool gotContactListInitialContacts; bool gotContactListContactsChangedWithId; bool groupsReintrospectionRequired; QSet cachedAllKnownGroups; bool contactListGroupPropertiesReceived; QQueue contactListChangesQueue; QQueue contactListBlockedContactsChangedQueue; QQueue contactListUpdatesQueue; QQueue contactListGroupsUpdatesQueue; QQueue contactListGroupsCreatedQueue; QQueue contactListGroupRenamedQueue; QQueue contactListGroupsRemovedQueue; bool processingContactListChanges; QHash returnedModifyOps; QQueue modifyFinishQueue; // old roster API uint contactListChannelsReady; QHash contactListChannels; ChannelPtr subscribeChannel; ChannelPtr publishChannel; ChannelPtr storedChannel; ChannelPtr denyChannel; // Number of things left to do before the Groups feature is ready // 1 for Get("Channels") + 1 per channel not ready uint featureContactListGroupsTodo; QList pendingContactListGroupChannels; QHash contactListGroupChannels; QList removedContactListGroupChannels; // If RosterGroups introspection completing should advance the ContactManager state to Success bool groupsSetSuccess; // Contact list contacts using the Conn.I.ContactList API Contacts contactListContacts; // Blocked contacts using the new ContactBlocking API Contacts blockedContacts; }; struct TP_QT_NO_EXPORT ContactManager::Roster::ChannelInfo { enum Type { TypeSubscribe = 0, TypePublish, TypeStored, TypeDeny, LastType }; ChannelInfo() : type((Type) -1) { } ChannelInfo(Type type) : type(type) { } static QString identifierForType(Type type); static uint typeForIdentifier(const QString &identifier); Type type; ReferencedHandles handle; ChannelPtr channel; }; struct TP_QT_NO_EXPORT ContactManager::Roster::BlockedContactsChangedInfo { BlockedContactsChangedInfo(const HandleIdentifierMap &added, const HandleIdentifierMap &removed, bool continueIntrospectionWhenFinished = false) : added(added), removed(removed), continueIntrospectionWhenFinished(continueIntrospectionWhenFinished) { } HandleIdentifierMap added; HandleIdentifierMap removed; bool continueIntrospectionWhenFinished; }; struct TP_QT_NO_EXPORT ContactManager::Roster::UpdateInfo { UpdateInfo(const ContactSubscriptionMap &changes, const HandleIdentifierMap &ids, const HandleIdentifierMap &removals) : changes(changes), ids(ids), removals(removals) { } ContactSubscriptionMap changes; HandleIdentifierMap ids; HandleIdentifierMap removals; }; struct TP_QT_NO_EXPORT ContactManager::Roster::GroupsUpdateInfo { GroupsUpdateInfo(const UIntList &contacts, const QStringList &groupsAdded, const QStringList &groupsRemoved) : contacts(contacts), groupsAdded(groupsAdded), groupsRemoved(groupsRemoved) { } UIntList contacts; QStringList groupsAdded; QStringList groupsRemoved; }; struct TP_QT_NO_EXPORT ContactManager::Roster::GroupRenamedInfo { GroupRenamedInfo(const QString &oldName, const QString &newName) : oldName(oldName), newName(newName) { } QString oldName; QString newName; }; class TP_QT_NO_EXPORT ContactManager::Roster::ModifyFinishOp : public PendingOperation { Q_OBJECT public: ModifyFinishOp(const ConnectionPtr &conn); ~ModifyFinishOp() {}; void setError(const QString &errorName, const QString &errorMessage); void finish(); private: QString errorName, errorMessage; }; class TP_QT_NO_EXPORT ContactManager::Roster::RemoveGroupOp : public PendingOperation { Q_OBJECT public: RemoveGroupOp(const ChannelPtr &channel); ~RemoveGroupOp() {}; private Q_SLOTS: void onContactsRemoved(Tp::PendingOperation *); void onChannelClosed(Tp::PendingOperation *); }; class TP_QT_NO_EXPORT ContactManager::PendingRefreshContactInfo : public PendingOperation { Q_OBJECT public: PendingRefreshContactInfo(const ConnectionPtr &conn); ~PendingRefreshContactInfo(); void addContact(Contact *contact); void refreshInfo(); private Q_SLOTS: void onRefreshInfoFinished(Tp::PendingOperation *op); private: ConnectionPtr mConn; QSet mToRequest; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/contact-capabilities.h0000644000175200001440000000402712000056607025116 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009-2010 Collabora Ltd. * @copyright Copyright (C) 2009-2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_contact_capabilities_h_HEADER_GUARD_ #define _TelepathyQt_contact_capabilities_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include namespace Tp { class TestBackdoors; class TP_QT_EXPORT ContactCapabilities : public CapabilitiesBase { public: ContactCapabilities(); virtual ~ContactCapabilities(); bool dbusTubes(const QString &serviceName) const; QStringList dbusTubeServices() const; bool streamTubes(const QString &service) const; QStringList streamTubeServices() const; // later: // bool dbusTubes(const QString &service) const; // QStringList dbusTubeServices() const; protected: friend class Contact; friend class TestBackdoors; ContactCapabilities(bool specificToContact); ContactCapabilities(const RequestableChannelClassList &rccs, bool specificToContact); ContactCapabilities(const RequestableChannelClassSpecList &rccSpecs, bool specificToContact); }; } // Tp Q_DECLARE_METATYPE(Tp::ContactCapabilities); #endif telepathy-qt-0.9.3/TelepathyQt/AbstractClientHandler0000644000175200001440000000040712000056607025004 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_AbstractClientHandler_HEADER_GUARD_ #define _TelepathyQt_AbstractClientHandler_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/StreamedMediaChannel0000644000175200001440000000041412000056607024577 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_StreamedMediaChannel_HEADER_GUARD_ #define _TelepathyQt_StreamedMediaChannel_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/incoming-file-transfer-channel.cpp0000644000175200001440000003263112000056607027341 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/incoming-file-transfer-channel.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT IncomingFileTransferChannel::Private { Private(IncomingFileTransferChannel *parent); ~Private(); // Public object IncomingFileTransferChannel *parent; Client::ChannelTypeFileTransferInterface *fileTransferInterface; QIODevice *output; QTcpSocket *socket; SocketAddressIPv4 addr; qulonglong requestedOffset; qint64 pos; }; IncomingFileTransferChannel::Private::Private(IncomingFileTransferChannel *parent) : parent(parent), fileTransferInterface(parent->interface()), output(0), socket(0), requestedOffset(0), pos(0) { parent->connect(fileTransferInterface, SIGNAL(URIDefined(QString)), SLOT(onUriDefined(QString))); parent->connect(fileTransferInterface, SIGNAL(URIDefined(QString)), SIGNAL(uriDefined(QString))); } IncomingFileTransferChannel::Private::~Private() { } /** * \class IncomingFileTransferChannel * \ingroup clientchannel * \headerfile TelepathyQt/incoming-file-transfer-channel.h * * \brief The IncomingFileTransferChannel class represents a Telepathy channel * of type FileTransfer for incoming file transfers. * * For more details, please refer to \telepathy_spec. * * See \ref async_model, \ref shared_ptr */ /** * Feature representing the core that needs to become ready to make the * IncomingFileTransferChannel object usable. * * This is currently the same as FileTransferChannel::FeatureCore, but may change to include more. * * When calling isReady(), becomeReady(), this feature is implicitly added * to the requested features. */ const Feature IncomingFileTransferChannel::FeatureCore = Feature(QLatin1String(FileTransferChannel::staticMetaObject.className()), 0); // FT::FeatureCore /** * Create a new IncomingFileTransferChannel object. * * \param connection Connection owning this channel, and specifying the * service. * \param objectPath The channel object path. * \param immutableProperties The channel immutable properties. * \return A IncomingFileTransferChannelPtr object pointing to the newly created * IncomingFileTransfer object. */ IncomingFileTransferChannelPtr IncomingFileTransferChannel::create( const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties) { return IncomingFileTransferChannelPtr(new IncomingFileTransferChannel( connection, objectPath, immutableProperties, IncomingFileTransferChannel::FeatureCore)); } /** * Construct a new IncomingFileTransferChannel object. * * \param connection Connection owning this channel, and specifying the * service. * \param objectPath The channel object path. * \param immutableProperties The channel immutable properties. * \param coreFeature The core feature of the channel type, if any. The corresponding introspectable should * depend on IncomingFileTransferChannel::FeatureCore. */ IncomingFileTransferChannel::IncomingFileTransferChannel( const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature) : FileTransferChannel(connection, objectPath, immutableProperties, coreFeature), mPriv(new Private(this)) { } /** * Class destructor. */ IncomingFileTransferChannel::~IncomingFileTransferChannel() { delete mPriv; } /** * Set the URI where the file will be saved. * * This property may be set by the channel handler before calling AcceptFile to inform observers * where the incoming file will be saved. When the URI property is set, the signal * uriDefined() is emitted. * * This method requires IncomingFileTransferChannel::FeatureCore to be ready. * * \param uri The URI where the file will be saved. * \return A PendingOperation object which will emit PendingOperation::finished * when the call has finished. * \sa FileTransferChannel::uri(), uriDefined() */ PendingOperation *IncomingFileTransferChannel::setUri(const QString& uri) { if (!isReady(FileTransferChannel::FeatureCore)) { warning() << "FileTransferChannel::FeatureCore must be ready before " "calling setUri"; return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Channel not ready"), IncomingFileTransferChannelPtr(this)); } if (state() != FileTransferStatePending) { warning() << "setUri must be called before calling acceptFile"; return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Cannot set URI after calling acceptFile"), IncomingFileTransferChannelPtr(this)); } return mPriv->fileTransferInterface->setPropertyURI(uri); } /** * Accept a file transfer that's in the #FileTransferStatePending state(). * * The state will change to #FileTransferStateOpen as soon as the transfer * starts. * The given output device should not be closed/destroyed until the state() * changes to #FileTransferStateCompleted or #FileTransferStateCancelled. * * Only the primary handler of a file transfer channel may call this method. * * This method requires IncomingFileTransferChannel::FeatureCore to be ready. * * \param offset The desired offset in bytes where the file transfer should * start. The offset is taken from the beginning of the file. * Specifying an offset of zero will start the transfer from the * beginning of the file. The offset that is actually given in the * initialOffset() method can differ from this argument where the * requested offset is not supported. (For example, some * protocols do not support offsets at all so the initialOffset() * will always be 0.). * \param output A QIODevice object where the data will be written to. The * device should be ready to use when the state() changes to * #FileTransferStateCompleted. * If the transfer is cancelled, state() becomes * #FileTransferStateCancelled, the data in \a output should be * ignored * \return A PendingOperation object which will emit PendingOperation::finished * when the call has finished. * \sa FileTransferChannel::stateChanged(), FileTransferChannel::state(), * FileTransferChannel::stateReason(), FileTransferChannel::initialOffset() */ PendingOperation *IncomingFileTransferChannel::acceptFile(qulonglong offset, QIODevice *output) { if (!isReady(FileTransferChannel::FeatureCore)) { warning() << "FileTransferChannel::FeatureCore must be ready before " "calling acceptFile"; return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("Channel not ready"), IncomingFileTransferChannelPtr(this)); } // let's fail here direclty as we may only have one device to handle if (mPriv->output) { warning() << "File transfer can only be started once in the same " "channel"; return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE, QLatin1String("File transfer can only be started once in the same channel"), IncomingFileTransferChannelPtr(this)); } if ((!output->isOpen() && !output->open(QIODevice::WriteOnly)) && (!output->isWritable())) { warning() << "Unable to open IO device for writing"; return new PendingFailure(TP_QT_ERROR_PERMISSION_DENIED, QLatin1String("Unable to open IO device for writing"), IncomingFileTransferChannelPtr(this)); } mPriv->output = output; mPriv->requestedOffset = offset; PendingVariant *pv = new PendingVariant( mPriv->fileTransferInterface->AcceptFile(SocketAddressTypeIPv4, SocketAccessControlLocalhost, QDBusVariant(QVariant(QString())), offset), IncomingFileTransferChannelPtr(this)); connect(pv, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onAcceptFileFinished(Tp::PendingOperation*))); return pv; } void IncomingFileTransferChannel::onAcceptFileFinished(PendingOperation *op) { if (op->isError()) { warning() << "Error accepting file transfer " << op->errorName() << ":" << op->errorMessage(); invalidate(op->errorName(), op->errorMessage()); return; } PendingVariant *pv = qobject_cast(op); mPriv->addr = qdbus_cast(pv->result()); debug().nospace() << "Got address " << mPriv->addr.address << ":" << mPriv->addr.port; if (state() == FileTransferStateOpen) { // now we have the address and we are already opened, // connect to host connectToHost(); } } void IncomingFileTransferChannel::connectToHost() { if (isConnected() || mPriv->addr.address.isNull()) { return; } // we already have initialOffsetDefined, called before State became Open, so // let's make sure everything is ok. if (initialOffset() > mPriv->requestedOffset) { // either the CM or the sender is doing something really wrong here, // cancel the transfer. warning() << "InitialOffset bigger than requested offset, " "cancelling the transfer"; cancel(); invalidate(TP_QT_ERROR_INCONSISTENT, QLatin1String("Initial offset bigger than requested offset")); return; } mPriv->pos = initialOffset(); mPriv->socket = new QTcpSocket(this); connect(mPriv->socket, SIGNAL(connected()), SLOT(onSocketConnected())); connect(mPriv->socket, SIGNAL(disconnected()), SLOT(onSocketDisconnected())); connect(mPriv->socket, SIGNAL(error(QAbstractSocket::SocketError)), SLOT(onSocketError(QAbstractSocket::SocketError))); connect(mPriv->socket, SIGNAL(readyRead()), SLOT(doTransfer())); debug().nospace() << "Connecting to host " << mPriv->addr.address << ":" << mPriv->addr.port << "..."; mPriv->socket->connectToHost(mPriv->addr.address, mPriv->addr.port); } void IncomingFileTransferChannel::onSocketConnected() { debug() << "Connected to host"; setConnected(); doTransfer(); } void IncomingFileTransferChannel::onSocketDisconnected() { debug() << "Disconnected from host"; setFinished(); } void IncomingFileTransferChannel::onSocketError(QAbstractSocket::SocketError error) { setFinished(); } void IncomingFileTransferChannel::doTransfer() { QByteArray data; while (mPriv->socket->bytesAvailable()) { data = mPriv->socket->readAll(); // skip until we reach requetedOffset and start writing from there if ((qulonglong) mPriv->pos < mPriv->requestedOffset) { if ((qulonglong) data.length() <= (mPriv->requestedOffset - mPriv->pos)) { break; } data = data.mid(mPriv->requestedOffset - mPriv->pos); } mPriv->output->write(data); // never fails } mPriv->pos += data.length(); } void IncomingFileTransferChannel::setFinished() { if (isFinished()) { // it shouldn't happen but let's make sure return; } if (mPriv->socket) { disconnect(mPriv->socket, SIGNAL(connected()), this, SLOT(onSocketConnected())); disconnect(mPriv->socket, SIGNAL(disconnected()), this, SLOT(onSocketDisconnected())); disconnect(mPriv->socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onSocketError(QAbstractSocket::SocketError))); disconnect(mPriv->socket, SIGNAL(readyRead()), this, SLOT(doTransfer())); mPriv->socket->close(); } if (mPriv->output) { mPriv->output->close(); } FileTransferChannel::setFinished(); } /** * \fn void IncomingFileTransferChannel::uriDefined(const QString &uri) * * Emitted when the value of uri() changes. * * \param uri The new URI of this file transfer channel. * \sa FileTransferChannel::uri(), setUri() */ } // Tp telepathy-qt-0.9.3/TelepathyQt/pending-handles.h0000644000175200001440000000541112000056607024072 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008 Collabora Ltd. * @copyright Copyright (C) 2008 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_pending_handles_h_HEADER_GUARD_ #define _TelepathyQt_pending_handles_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include #include #include #include namespace Tp { class PendingHandles; class ReferencedHandles; class TP_QT_EXPORT PendingHandles : public PendingOperation { Q_OBJECT Q_DISABLE_COPY(PendingHandles) public: ~PendingHandles(); ConnectionPtr connection() const; HandleType handleType() const; bool isRequest() const; bool isReference() const; const QStringList &namesRequested() const; QStringList validNames() const; QHash > invalidNames() const; const UIntList &handlesToReference() const; ReferencedHandles handles() const; UIntList invalidHandles() const; private Q_SLOTS: TP_QT_NO_EXPORT void onRequestHandlesFinished(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void onHoldHandlesFinished(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void onRequestHandlesFallbackFinished(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void onHoldHandlesFallbackFinished(QDBusPendingCallWatcher *watcher); private: friend class ConnectionLowlevel; TP_QT_NO_EXPORT PendingHandles(const ConnectionPtr &connection, HandleType handleType, const QStringList &names); TP_QT_NO_EXPORT PendingHandles(const ConnectionPtr &connection, HandleType handleType, const UIntList &handles, const UIntList &alreadyHeld, const UIntList ¬YetHeld); TP_QT_NO_EXPORT PendingHandles(const QString &errorName, const QString &errorMessage); struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/handled-channel-notifier.h0000644000175200001440000000410012000056607025646 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_handled_channel_notifier_h_HEADER_GUARD_ #define _TelepathyQt_handled_channel_notifier_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include namespace Tp { class ChannelRequestHints; class RequestTemporaryHandler; class TP_QT_EXPORT HandledChannelNotifier : public QObject { Q_OBJECT Q_DISABLE_COPY(HandledChannelNotifier) public: ~HandledChannelNotifier(); ChannelPtr channel() const; Q_SIGNALS: void handledAgain(const QDateTime &userActionTime, const Tp::ChannelRequestHints &requestHints); protected: void connectNotify(const char *); private Q_SLOTS: TP_QT_NO_EXPORT void onChannelReceived(const Tp::ChannelPtr &channel, const QDateTime &userActionTime, const Tp::ChannelRequestHints &requestHints); TP_QT_NO_EXPORT void onChannelInvalidated(); private: friend class PendingChannel; HandledChannelNotifier(const ClientRegistrarPtr &cr, const SharedPtr &handler); struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/text-channel.h0000644000175200001440000001120512000056607023422 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_text_channel_h_HEADER_GUARD_ #define _TelepathyQt_text_channel_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include namespace Tp { class Message; class ReceivedMessage; class TP_QT_EXPORT TextChannel : public Channel { Q_OBJECT Q_DISABLE_COPY(TextChannel) public: static const Feature FeatureCore; static const Feature FeatureMessageQueue; static const Feature FeatureMessageCapabilities; static const Feature FeatureMessageSentSignal; static const Feature FeatureChatState; static TextChannelPtr create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties); virtual ~TextChannel(); bool hasMessagesInterface() const; bool hasChatStateInterface() const; bool canInviteContacts() const; // requires FeatureMessageCapabilities bool supportsMessageType(ChannelTextMessageType messageType) const; QList supportedMessageTypes() const; QStringList supportedContentTypes() const; MessagePartSupportFlags messagePartSupport() const; DeliveryReportingSupportFlags deliveryReportingSupport() const; // requires FeatureMessageQueue QList messageQueue() const; // requires FeatureChatState ChannelChatState chatState(const ContactPtr &contact) const; public Q_SLOTS: void acknowledge(const QList &messages); void forget(const QList &messages); PendingSendMessage *send(const QString &text, ChannelTextMessageType type = ChannelTextMessageTypeNormal, MessageSendingFlags flags = 0); PendingSendMessage *send(const MessagePartList &parts, MessageSendingFlags flags = 0); inline PendingOperation *inviteContacts( const QList &contacts, const QString &message = QString()) { return groupAddContacts(contacts, message); } PendingOperation *requestChatState(ChannelChatState state); Q_SIGNALS: // FeatureMessageSentSignal void messageSent(const Tp::Message &message, Tp::MessageSendingFlags flags, const QString &sentMessageToken); // FeatureMessageQueue void messageReceived(const Tp::ReceivedMessage &message); void pendingMessageRemoved( const Tp::ReceivedMessage &message); // FeatureChatState void chatStateChanged(const Tp::ContactPtr &contact, Tp::ChannelChatState state); protected: TextChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature = TextChannel::FeatureCore); private Q_SLOTS: TP_QT_NO_EXPORT void onContactsFinished(Tp::PendingOperation *); TP_QT_NO_EXPORT void onAcknowledgePendingMessagesReply(QDBusPendingCallWatcher *); TP_QT_NO_EXPORT void onMessageSent(const Tp::MessagePartList &, uint, const QString &); TP_QT_NO_EXPORT void onMessageReceived(const Tp::MessagePartList &); TP_QT_NO_EXPORT void onPendingMessagesRemoved(const Tp::UIntList &); TP_QT_NO_EXPORT void onTextSent(uint, uint, const QString &); TP_QT_NO_EXPORT void onTextReceived(uint, uint, uint, uint, uint, const QString &); TP_QT_NO_EXPORT void onTextSendError(uint, uint, uint, const QString &); TP_QT_NO_EXPORT void gotProperties(QDBusPendingCallWatcher *); TP_QT_NO_EXPORT void gotPendingMessages(QDBusPendingCallWatcher *); TP_QT_NO_EXPORT void onChatStateChanged(uint, uint); private: struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/PendingContacts0000644000175200001440000000037412000056607023672 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_PendingContacts_HEADER_GUARD_ #define _TelepathyQt_PendingContacts_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/OutgoingFileTransferChannel0000644000175200001440000000044212000056607026174 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_OutgoingFileTransferChannel_HEADER_GUARD_ #define _TelepathyQt_OutgoingFileTransferChannel_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/incoming-stream-tube-channel.h0000644000175200001440000000446212000056607026476 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010-2011 Collabora Ltd. * @license LGPL 2.1 * * 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 _TelepathyQt_incoming_stream_tube_channel_h_HEADER_GUARD_ #define _TelepathyQt_incoming_stream_tube_channel_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include class QIODevice; namespace Tp { class PendingStreamTubeConnection; class TP_QT_EXPORT IncomingStreamTubeChannel : public StreamTubeChannel { Q_OBJECT Q_DISABLE_COPY(IncomingStreamTubeChannel) public: static const Feature FeatureCore; static IncomingStreamTubeChannelPtr create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties); virtual ~IncomingStreamTubeChannel(); PendingStreamTubeConnection *acceptTubeAsTcpSocket(); PendingStreamTubeConnection *acceptTubeAsTcpSocket(const QHostAddress &allowedAddress, quint16 allowedPort); PendingStreamTubeConnection *acceptTubeAsUnixSocket(bool requireCredentials = false); protected: IncomingStreamTubeChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature = IncomingStreamTubeChannel::FeatureCore); private Q_SLOTS: TP_QT_NO_EXPORT void onNewLocalConnection(uint connectionId); private: struct Private; friend class PendingStreamTubeConnection; friend struct Private; Private *mPriv; }; } #endif telepathy-qt-0.9.3/TelepathyQt/SimpleTextObserver0000644000175200001440000000040612000056607024411 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_SimpleTextObserver_HEADER_GUARD_ #define _TelepathyQt_SimpleTextObserver_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/client-registrar.cpp0000644000175200001440000011410012000056607024637 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009-2010 Collabora Ltd. * @copyright Copyright (C) 2009-2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/client-registrar-internal.h" #include "TelepathyQt/_gen/client-registrar.moc.hpp" #include "TelepathyQt/_gen/client-registrar-internal.moc.hpp" #include "TelepathyQt/channel-factory.h" #include "TelepathyQt/debug-internal.h" #include "TelepathyQt/request-temporary-handler-internal.h" #include #include #include #include #include #include #include #include #include namespace Tp { class HandleChannelsInvocationContext : public MethodInvocationContext<> { Q_DISABLE_COPY(HandleChannelsInvocationContext) public: typedef void (*FinishedCb)(const MethodInvocationContextPtr<> &context, const QList &channels, void *data); static MethodInvocationContextPtr<> create(const QDBusConnection &bus, const QDBusMessage &message, const QList &channels, FinishedCb finishedCb, void *finishedCbData) { return SharedPtr >( new HandleChannelsInvocationContext(bus, message, channels, finishedCb, finishedCbData)); } private: HandleChannelsInvocationContext(const QDBusConnection &connection, const QDBusMessage &message, const QList &channels, FinishedCb finishedCb, void *finishedCbData) : MethodInvocationContext<>(connection, message), mChannels(channels), mFinishedCb(finishedCb), mFinishedCbData(finishedCbData) { } void onFinished() { if (mFinishedCb) { mFinishedCb(MethodInvocationContextPtr<>(this), mChannels, mFinishedCbData); } } QList mChannels; FinishedCb mFinishedCb; void *mFinishedCbData; }; ClientAdaptor::ClientAdaptor(ClientRegistrar *registrar, const QStringList &interfaces, QObject *parent) : QDBusAbstractAdaptor(parent), mRegistrar(registrar), mInterfaces(interfaces) { } ClientAdaptor::~ClientAdaptor() { } ClientObserverAdaptor::ClientObserverAdaptor(ClientRegistrar *registrar, AbstractClientObserver *client, QObject *parent) : QDBusAbstractAdaptor(parent), mRegistrar(registrar), mBus(registrar->dbusConnection()), mClient(client) { } ClientObserverAdaptor::~ClientObserverAdaptor() { } void ClientObserverAdaptor::ObserveChannels(const QDBusObjectPath &accountPath, const QDBusObjectPath &connectionPath, const Tp::ChannelDetailsList &channelDetailsList, const QDBusObjectPath &dispatchOperationPath, const Tp::ObjectPathList &requestsSatisfied, const QVariantMap &observerInfo, const QDBusMessage &message) { debug() << "ObserveChannels: account:" << accountPath.path() << ", connection:" << connectionPath.path(); AccountFactoryConstPtr accFactory = mRegistrar->accountFactory(); ConnectionFactoryConstPtr connFactory = mRegistrar->connectionFactory(); ChannelFactoryConstPtr chanFactory = mRegistrar->channelFactory(); ContactFactoryConstPtr contactFactory = mRegistrar->contactFactory(); SharedPtr invocation(new InvocationData()); QList readyOps; PendingReady *accReady = accFactory->proxy(TP_QT_ACCOUNT_MANAGER_BUS_NAME, accountPath.path(), connFactory, chanFactory, contactFactory); invocation->acc = AccountPtr::qObjectCast(accReady->proxy()); readyOps.append(accReady); QString connectionBusName = connectionPath.path().mid(1).replace( QLatin1String("/"), QLatin1String(".")); PendingReady *connReady = connFactory->proxy(connectionBusName, connectionPath.path(), chanFactory, contactFactory); invocation->conn = ConnectionPtr::qObjectCast(connReady->proxy()); readyOps.append(connReady); foreach (const ChannelDetails &channelDetails, channelDetailsList) { PendingReady *chanReady = chanFactory->proxy(invocation->conn, channelDetails.channel.path(), channelDetails.properties); ChannelPtr channel = ChannelPtr::qObjectCast(chanReady->proxy()); invocation->chans.append(channel); readyOps.append(chanReady); } // Yes, we don't give the choice of making CDO and CR ready or not - however, readifying them is // 0-1 D-Bus calls each, for CR mostly 0 - and their constructors start making them ready // automatically, so we wouldn't save any D-Bus traffic anyway if (!dispatchOperationPath.path().isEmpty() && dispatchOperationPath.path() != QLatin1String("/")) { QVariantMap props; // TODO: push to tp spec having all of the CDO immutable props be contained in observerInfo // so we don't have to introspect the CDO either - then we can pretty much do: // // props = qdbus_cast( // observerInfo.value(QLatin1String("dispatch-operation-properties"))); // // Currently something like the following can be used for testing the CDO "we've got // everything we need" codepath: // // props.insert(TP_QT_IFACE_CHANNEL_DISPATCH_OPERATION + QLatin1String(".Account"), // QVariant::fromValue(QDBusObjectPath(accountPath.path()))); // props.insert(TP_QT_IFACE_CHANNEL_DISPATCH_OPERATION + QLatin1String(".Connection"), // QVariant::fromValue(QDBusObjectPath(connectionPath.path()))); // props.insert(TP_QT_IFACE_CHANNEL_DISPATCH_OPERATION + QLatin1String(".Interfaces"), // QVariant::fromValue(QStringList())); // props.insert(TP_QT_IFACE_CHANNEL_DISPATCH_OPERATION + QLatin1String(".PossibleHandlers"), // QVariant::fromValue(QStringList())); invocation->dispatchOp = ChannelDispatchOperation::create(mBus, dispatchOperationPath.path(), props, invocation->chans, accFactory, connFactory, chanFactory, contactFactory); readyOps.append(invocation->dispatchOp->becomeReady()); } invocation->observerInfo = AbstractClientObserver::ObserverInfo(observerInfo); ObjectImmutablePropertiesMap reqPropsMap = qdbus_cast( observerInfo.value(QLatin1String("request-properties"))); foreach (const QDBusObjectPath &reqPath, requestsSatisfied) { ChannelRequestPtr channelRequest = ChannelRequest::create(invocation->acc, reqPath.path(), reqPropsMap.value(reqPath)); invocation->chanReqs.append(channelRequest); readyOps.append(channelRequest->becomeReady()); } invocation->ctx = MethodInvocationContextPtr<>(new MethodInvocationContext<>(mBus, message)); invocation->readyOp = new PendingComposite(readyOps, invocation->ctx); connect(invocation->readyOp, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onReadyOpFinished(Tp::PendingOperation*))); mInvocations.append(invocation); debug() << "Preparing proxies for ObserveChannels of" << channelDetailsList.size() << "channels" << "for client" << mClient; } void ClientObserverAdaptor::onReadyOpFinished(Tp::PendingOperation *op) { Q_ASSERT(!mInvocations.isEmpty()); Q_ASSERT(op->isFinished()); for (QLinkedList >::iterator i = mInvocations.begin(); i != mInvocations.end(); ++i) { if ((*i)->readyOp != op) { continue; } (*i)->readyOp = 0; if (op->isError()) { warning() << "Preparing proxies for ObserveChannels failed with" << op->errorName() << op->errorMessage(); (*i)->error = op->errorName(); (*i)->message = op->errorMessage(); } break; } while (!mInvocations.isEmpty() && !mInvocations.first()->readyOp) { SharedPtr invocation = mInvocations.takeFirst(); if (!invocation->error.isEmpty()) { // We guarantee that the proxies were ready - so we can't invoke the client if they // weren't made ready successfully. Fix the introspection code if this happens :) invocation->ctx->setFinishedWithError(invocation->error, invocation->message); continue; } debug() << "Invoking application observeChannels with" << invocation->chans.size() << "channels on" << mClient; mClient->observeChannels(invocation->ctx, invocation->acc, invocation->conn, invocation->chans, invocation->dispatchOp, invocation->chanReqs, invocation->observerInfo); } } ClientApproverAdaptor::ClientApproverAdaptor(ClientRegistrar *registrar, AbstractClientApprover *client, QObject *parent) : QDBusAbstractAdaptor(parent), mRegistrar(registrar), mBus(registrar->dbusConnection()), mClient(client) { } ClientApproverAdaptor::~ClientApproverAdaptor() { } void ClientApproverAdaptor::AddDispatchOperation(const Tp::ChannelDetailsList &channelDetailsList, const QDBusObjectPath &dispatchOperationPath, const QVariantMap &properties, const QDBusMessage &message) { AccountFactoryConstPtr accFactory = mRegistrar->accountFactory(); ConnectionFactoryConstPtr connFactory = mRegistrar->connectionFactory(); ChannelFactoryConstPtr chanFactory = mRegistrar->channelFactory(); ContactFactoryConstPtr contactFactory = mRegistrar->contactFactory(); QList readyOps; QDBusObjectPath connectionPath = qdbus_cast( properties.value( TP_QT_IFACE_CHANNEL_DISPATCH_OPERATION + QLatin1String(".Connection"))); debug() << "addDispatchOperation: connection:" << connectionPath.path(); QString connectionBusName = connectionPath.path().mid(1).replace( QLatin1String("/"), QLatin1String(".")); PendingReady *connReady = connFactory->proxy(connectionBusName, connectionPath.path(), chanFactory, contactFactory); ConnectionPtr connection = ConnectionPtr::qObjectCast(connReady->proxy()); readyOps.append(connReady); SharedPtr invocation(new InvocationData); foreach (const ChannelDetails &channelDetails, channelDetailsList) { PendingReady *chanReady = chanFactory->proxy(connection, channelDetails.channel.path(), channelDetails.properties); invocation->chans.append(ChannelPtr::qObjectCast(chanReady->proxy())); readyOps.append(chanReady); } invocation->dispatchOp = ChannelDispatchOperation::create(mBus, dispatchOperationPath.path(), properties, invocation->chans, accFactory, connFactory, chanFactory, contactFactory); readyOps.append(invocation->dispatchOp->becomeReady()); invocation->ctx = MethodInvocationContextPtr<>(new MethodInvocationContext<>(mBus, message)); invocation->readyOp = new PendingComposite(readyOps, invocation->ctx); connect(invocation->readyOp, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onReadyOpFinished(Tp::PendingOperation*))); mInvocations.append(invocation); } void ClientApproverAdaptor::onReadyOpFinished(Tp::PendingOperation *op) { Q_ASSERT(!mInvocations.isEmpty()); Q_ASSERT(op->isFinished()); for (QLinkedList >::iterator i = mInvocations.begin(); i != mInvocations.end(); ++i) { if ((*i)->readyOp != op) { continue; } (*i)->readyOp = 0; if (op->isError()) { warning() << "Preparing proxies for AddDispatchOperation failed with" << op->errorName() << op->errorMessage(); (*i)->error = op->errorName(); (*i)->message = op->errorMessage(); } break; } while (!mInvocations.isEmpty() && !mInvocations.first()->readyOp) { SharedPtr invocation = mInvocations.takeFirst(); if (!invocation->error.isEmpty()) { // We guarantee that the proxies were ready - so we can't invoke the client if they // weren't made ready successfully. Fix the introspection code if this happens :) invocation->ctx->setFinishedWithError(invocation->error, invocation->message); continue; } debug() << "Invoking application addDispatchOperation with CDO" << invocation->dispatchOp->objectPath() << "on" << mClient; mClient->addDispatchOperation(invocation->ctx, invocation->dispatchOp); } } QHash, QList > ClientHandlerAdaptor::mAdaptorsForConnection; ClientHandlerAdaptor::ClientHandlerAdaptor(ClientRegistrar *registrar, AbstractClientHandler *client, QObject *parent) : QDBusAbstractAdaptor(parent), mRegistrar(registrar), mBus(registrar->dbusConnection()), mClient(client) { QList &handlerAdaptors = mAdaptorsForConnection[qMakePair(mBus.name(), mBus.baseService())]; handlerAdaptors.append(this); } ClientHandlerAdaptor::~ClientHandlerAdaptor() { QPair busId = qMakePair(mBus.name(), mBus.baseService()); QList &handlerAdaptors = mAdaptorsForConnection[busId]; handlerAdaptors.removeOne(this); if (handlerAdaptors.isEmpty()) { mAdaptorsForConnection.remove(busId); } } void ClientHandlerAdaptor::HandleChannels(const QDBusObjectPath &accountPath, const QDBusObjectPath &connectionPath, const Tp::ChannelDetailsList &channelDetailsList, const Tp::ObjectPathList &requestsSatisfied, qulonglong userActionTime_t, const QVariantMap &handlerInfo, const QDBusMessage &message) { debug() << "HandleChannels: account:" << accountPath.path() << ", connection:" << connectionPath.path(); AccountFactoryConstPtr accFactory = mRegistrar->accountFactory(); ConnectionFactoryConstPtr connFactory = mRegistrar->connectionFactory(); ChannelFactoryConstPtr chanFactory = mRegistrar->channelFactory(); ContactFactoryConstPtr contactFactory = mRegistrar->contactFactory(); SharedPtr invocation(new InvocationData()); QList readyOps; RequestTemporaryHandler *tempHandler = dynamic_cast(mClient); if (tempHandler) { debug() << " This is a temporary handler for the Request & Handle API," << "giving an early signal of the invocation"; tempHandler->setDBusHandlerInvoked(); } PendingReady *accReady = accFactory->proxy(TP_QT_ACCOUNT_MANAGER_BUS_NAME, accountPath.path(), connFactory, chanFactory, contactFactory); invocation->acc = AccountPtr::qObjectCast(accReady->proxy()); readyOps.append(accReady); QString connectionBusName = connectionPath.path().mid(1).replace( QLatin1String("/"), QLatin1String(".")); PendingReady *connReady = connFactory->proxy(connectionBusName, connectionPath.path(), chanFactory, contactFactory); invocation->conn = ConnectionPtr::qObjectCast(connReady->proxy()); readyOps.append(connReady); foreach (const ChannelDetails &channelDetails, channelDetailsList) { PendingReady *chanReady = chanFactory->proxy(invocation->conn, channelDetails.channel.path(), channelDetails.properties); ChannelPtr channel = ChannelPtr::qObjectCast(chanReady->proxy()); invocation->chans.append(channel); readyOps.append(chanReady); } invocation->handlerInfo = AbstractClientHandler::HandlerInfo(handlerInfo); ObjectImmutablePropertiesMap reqPropsMap = qdbus_cast( handlerInfo.value(QLatin1String("request-properties"))); foreach (const QDBusObjectPath &reqPath, requestsSatisfied) { ChannelRequestPtr channelRequest = ChannelRequest::create(invocation->acc, reqPath.path(), reqPropsMap.value(reqPath)); invocation->chanReqs.append(channelRequest); readyOps.append(channelRequest->becomeReady()); } // FIXME See http://bugs.freedesktop.org/show_bug.cgi?id=21690 if (userActionTime_t != 0) { invocation->time = QDateTime::fromTime_t((uint) userActionTime_t); } invocation->ctx = HandleChannelsInvocationContext::create(mBus, message, invocation->chans, reinterpret_cast( &ClientHandlerAdaptor::onContextFinished), this); invocation->readyOp = new PendingComposite(readyOps, invocation->ctx); connect(invocation->readyOp, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onReadyOpFinished(Tp::PendingOperation*))); mInvocations.append(invocation); debug() << "Preparing proxies for HandleChannels of" << channelDetailsList.size() << "channels" << "for client" << mClient; } void ClientHandlerAdaptor::onReadyOpFinished(Tp::PendingOperation *op) { Q_ASSERT(!mInvocations.isEmpty()); Q_ASSERT(op->isFinished()); for (QLinkedList >::iterator i = mInvocations.begin(); i != mInvocations.end(); ++i) { if ((*i)->readyOp != op) { continue; } (*i)->readyOp = 0; if (op->isError()) { warning() << "Preparing proxies for HandleChannels failed with" << op->errorName() << op->errorMessage(); (*i)->error = op->errorName(); (*i)->message = op->errorMessage(); } break; } while (!mInvocations.isEmpty() && !mInvocations.first()->readyOp) { SharedPtr invocation = mInvocations.takeFirst(); if (!invocation->error.isEmpty()) { RequestTemporaryHandler *tempHandler = dynamic_cast(mClient); if (tempHandler) { debug() << " This is a temporary handler for the Request & Handle API, indicating failure"; tempHandler->setDBusHandlerErrored(invocation->error, invocation->message); } // We guarantee that the proxies were ready - so we can't invoke the client if they // weren't made ready successfully. Fix the introspection code if this happens :) invocation->ctx->setFinishedWithError(invocation->error, invocation->message); continue; } debug() << "Invoking application handleChannels with" << invocation->chans.size() << "channels on" << mClient; mClient->handleChannels(invocation->ctx, invocation->acc, invocation->conn, invocation->chans, invocation->chanReqs, invocation->time, invocation->handlerInfo); } } void ClientHandlerAdaptor::onContextFinished( const MethodInvocationContextPtr<> &context, const QList &channels, ClientHandlerAdaptor *self) { if (!context->isError()) { debug() << "HandleChannels context finished successfully, " "updating handled channels"; // register the channels in FakeHandlerManager so we report HandledChannels correctly FakeHandlerManager::instance()->registerChannels(channels); } } ClientHandlerRequestsAdaptor::ClientHandlerRequestsAdaptor( ClientRegistrar *registrar, AbstractClientHandler *client, QObject *parent) : QDBusAbstractAdaptor(parent), mRegistrar(registrar), mBus(registrar->dbusConnection()), mClient(client) { } ClientHandlerRequestsAdaptor::~ClientHandlerRequestsAdaptor() { } void ClientHandlerRequestsAdaptor::AddRequest( const QDBusObjectPath &request, const QVariantMap &requestProperties, const QDBusMessage &message) { debug() << "AddRequest:" << request.path(); message.setDelayedReply(true); mBus.send(message.createReply()); mClient->addRequest(ChannelRequest::create(mBus, request.path(), requestProperties, mRegistrar->accountFactory(), mRegistrar->connectionFactory(), mRegistrar->channelFactory(), mRegistrar->contactFactory())); } void ClientHandlerRequestsAdaptor::RemoveRequest( const QDBusObjectPath &request, const QString &errorName, const QString &errorMessage, const QDBusMessage &message) { debug() << "RemoveRequest:" << request.path() << "-" << errorName << "-" << errorMessage; message.setDelayedReply(true); mBus.send(message.createReply()); mClient->removeRequest(ChannelRequest::create(mBus, request.path(), QVariantMap(), mRegistrar->accountFactory(), mRegistrar->connectionFactory(), mRegistrar->channelFactory(), mRegistrar->contactFactory()), errorName, errorMessage); } struct TP_QT_NO_EXPORT ClientRegistrar::Private { Private(const QDBusConnection &bus, const AccountFactoryConstPtr &accFactory, const ConnectionFactoryConstPtr &connFactory, const ChannelFactoryConstPtr &chanFactory, const ContactFactoryConstPtr &contactFactory) : bus(bus), accFactory(accFactory), connFactory(connFactory), chanFactory(chanFactory), contactFactory(contactFactory) { if (accFactory->dbusConnection().name() != bus.name()) { warning() << " The D-Bus connection in the account factory is not the proxy connection"; } if (connFactory->dbusConnection().name() != bus.name()) { warning() << " The D-Bus connection in the connection factory is not the proxy connection"; } if (chanFactory->dbusConnection().name() != bus.name()) { warning() << " The D-Bus connection in the channel factory is not the proxy connection"; } } QDBusConnection bus; AccountFactoryConstPtr accFactory; ConnectionFactoryConstPtr connFactory; ChannelFactoryConstPtr chanFactory; ContactFactoryConstPtr contactFactory; QHash clients; QHash clientObjects; QSet services; }; /** * \class ClientRegistrar * \ingroup serverclient * \headerfile TelepathyQt/client-registrar.h * * \brief The ClientRegistrar class is responsible for registering Telepathy * clients (Observer, Approver, Handler). * * Clients should inherit AbstractClientObserver, AbstractClientApprover, * AbstractClientHandler or some combination of these, by using multiple * inheritance, and register themselves using registerClient(). * * See the individual classes descriptions for more details. * * \section cr_usage_sec Usage * * \subsection cr_create_sec Creating a client registrar object * * One way to create a ClientRegistrar object is to just call the create method. * For example: * * \code ClientRegistrarPtr cr = ClientRegistrar::create(); \endcode * * You can also provide a D-Bus connection as a QDBusConnection: * * \code ClientRegistrarPtr cr = ClientRegistrar::create(QDBusConnection::systemBus()); \endcode * * \subsection cr_registering_sec Registering a client * * To register a client, just call registerClient() with a given AbstractClientPtr * pointing to a valid AbstractClient instance. * * \code * * class MyClient : public AbstractClientObserver, public AbstractClientHandler * { * ... * }; * * ... * * ClientRegistrarPtr cr = ClientRegistrar::create(); * SharedPtr client = SharedPtr(new MyClient(...)); * cr->registerClient(AbstractClientPtr::dynamicCast(client), "myclient"); * * \endcode * * \sa AbstractClientObserver, AbstractClientApprover, AbstractClientHandler * * See \ref async_model, \ref shared_ptr */ /** * Create a new client registrar object using the given \a bus. * * The instance will use an account factory creating Tp::Account objects with no features * ready, a connection factory creating Tp::Connection objects with no features ready, and a channel * factory creating stock Telepathy-Qt channel subclasses, as appropriate, with no features ready. * * \param bus QDBusConnection to use. * \return A ClientRegistrarPtr object pointing to the newly created ClientRegistrar object. */ ClientRegistrarPtr ClientRegistrar::create(const QDBusConnection &bus) { return create(bus, AccountFactory::create(bus), ConnectionFactory::create(bus), ChannelFactory::create(bus), ContactFactory::create()); } /** * Create a new client registrar object using QDBusConnection::sessionBus() and the given factories. * * \param accountFactory The account factory to use. * \param connectionFactory The connection factory to use. * \param channelFactory The channel factory to use. * \param contactFactory The contact factory to use. * \return A ClientRegistrarPtr object pointing to the newly created ClientRegistrar object. */ ClientRegistrarPtr ClientRegistrar::create( const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory) { return create(QDBusConnection::sessionBus(), accountFactory, connectionFactory, channelFactory, contactFactory); } /** * Create a new client registrar object using the given \a bus and the given factories. * * \param bus QDBusConnection to use. * \param accountFactory The account factory to use. * \param connectionFactory The connection factory to use. * \param channelFactory The channel factory to use. * \param contactFactory The contact factory to use. * \return A ClientRegistrarPtr object pointing to the newly created ClientRegistrar object. */ ClientRegistrarPtr ClientRegistrar::create(const QDBusConnection &bus, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory) { return ClientRegistrarPtr(new ClientRegistrar(bus, accountFactory, connectionFactory, channelFactory, contactFactory)); } /** * Create a new client registrar object using the bus and factories of the given Account \a manager. * * Using this create method will enable (like any other way of passing the same factories to an AM * and a registrar) getting the same Account/Connection etc. proxy instances from both * AccountManager and AbstractClient implementations. * * \param manager The AccountManager the bus and factories of which should be used. * \return A ClientRegistrarPtr object pointing to the newly ClientRegistrar object. */ ClientRegistrarPtr ClientRegistrar::create(const AccountManagerPtr &manager) { if (!manager) { return ClientRegistrarPtr(); } return create(manager->dbusConnection(), manager->accountFactory(), manager->connectionFactory(), manager->channelFactory(), manager->contactFactory()); } /** * Construct a new client registrar object using the given \a bus and the given factories. * * \param bus QDBusConnection to use. * \param accountFactory The account factory to use. * \param connectionFactory The connection factory to use. * \param channelFactory The channel factory to use. * \param contactFactory The contact factory to use. */ ClientRegistrar::ClientRegistrar(const QDBusConnection &bus, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory) : Object(), mPriv(new Private(bus, accountFactory, connectionFactory, channelFactory, contactFactory)) { } /** * Class destructor. */ ClientRegistrar::~ClientRegistrar() { unregisterClients(); delete mPriv; } /** * Return the D-Bus connection being used by this client registrar. * * \return A QDBusConnection object. */ QDBusConnection ClientRegistrar::dbusConnection() const { return mPriv->bus; } /** * Get the account factory used by this client registrar. * * Only read access is provided. This allows constructing object instances and examining the object * construction settings, but not changing settings. Allowing changes would lead to tricky * situations where objects constructed at different times by the registrar would have unpredictably * different construction settings (eg. subclass). * * \return A read-only pointer to the AccountFactory object. */ AccountFactoryConstPtr ClientRegistrar::accountFactory() const { return mPriv->accFactory; } /** * Get the connection factory used by this client registrar. * * Only read access is provided. This allows constructing object instances and examining the object * construction settings, but not changing settings. Allowing changes would lead to tricky * situations where objects constructed at different times by the registrar would have unpredictably * different construction settings (eg. subclass). * * \return A read-only pointer to the ConnectionFactory object. */ ConnectionFactoryConstPtr ClientRegistrar::connectionFactory() const { return mPriv->connFactory; } /** * Get the channel factory used by this client registrar. * * Only read access is provided. This allows constructing object instances and examining the object * construction settings, but not changing settings. Allowing changes would lead to tricky * situations where objects constructed at different times by the registrar would have unpredictably * different construction settings (eg. subclass). * * \return A read-only pointer to the ChannelFactory object. */ ChannelFactoryConstPtr ClientRegistrar::channelFactory() const { return mPriv->chanFactory; } /** * Get the contact factory used by this client registrar. * * Only read access is provided. This allows constructing object instances and examining the object * construction settings, but not changing settings. Allowing changes would lead to tricky * situations where objects constructed at different times by the registrar would have unpredictably * different construction settings (eg. subclass). * * \return A read-only pointer to the ContactFactory object. */ ContactFactoryConstPtr ClientRegistrar::contactFactory() const { return mPriv->contactFactory; } /** * Return the list of clients registered using registerClient() on this client * registrar. * * \return A list of pointers to AbstractClient objects. * \sa registerClient(), unregisterClient() */ QList ClientRegistrar::registeredClients() const { return mPriv->clients.keys(); } /** * Register a client on D-Bus. * * The client registrar will export the appropriate D-Bus interfaces, * based on the abstract classes subclassed by \param client. * * If each of a client instance should be able to manipulate channels * separately, set unique to true. * * The client name MUST be a non-empty string of ASCII digits, letters, dots * and/or underscores, starting with a letter, and without sets of * two consecutive dots or a dot followed by a digit. * * This method will do nothing if the client is already registered, and \c true * will be returned. * * To unregister a client use unregisterClient(). * * \param client The client to register. * \param clientName The client name used to register. * \param unique Whether each of a client instance is able to manipulate * channels separately. * \return \c true if \a client was successfully registered, \c false otherwise. * \sa registeredClients(), unregisterClient() */ bool ClientRegistrar::registerClient(const AbstractClientPtr &client, const QString &clientName, bool unique) { if (!client) { warning() << "Unable to register a null client"; return false; } if (mPriv->clients.contains(client)) { debug() << "Client already registered"; return true; } QString busName = QLatin1String("org.freedesktop.Telepathy.Client."); busName.append(clientName); if (unique) { // o.f.T.Client.clientName._ should be enough to identify // an unique identifier busName.append(QString(QLatin1String(".%1_%2")) .arg(mPriv->bus.baseService() .replace(QLatin1String(":"), QLatin1String("_")) .replace(QLatin1String("."), QLatin1String("_"))) .arg((quintptr) client.data(), 0, 16)); } if (mPriv->services.contains(busName) || !mPriv->bus.registerService(busName)) { warning() << "Unable to register client: busName" << busName << "already registered"; return false; } QObject *object = new QObject(this); QStringList interfaces; AbstractClientHandler *handler = dynamic_cast(client.data()); if (handler) { // export o.f.T.Client.Handler new ClientHandlerAdaptor(this, handler, object); interfaces.append( QLatin1String("org.freedesktop.Telepathy.Client.Handler")); if (handler->wantsRequestNotification()) { // export o.f.T.Client.Interface.Requests new ClientHandlerRequestsAdaptor(this, handler, object); interfaces.append( QLatin1String( "org.freedesktop.Telepathy.Client.Interface.Requests")); } } AbstractClientObserver *observer = dynamic_cast(client.data()); if (observer) { // export o.f.T.Client.Observer new ClientObserverAdaptor(this, observer, object); interfaces.append( QLatin1String("org.freedesktop.Telepathy.Client.Observer")); } AbstractClientApprover *approver = dynamic_cast(client.data()); if (approver) { // export o.f.T.Client.Approver new ClientApproverAdaptor(this, approver, object); interfaces.append( QLatin1String("org.freedesktop.Telepathy.Client.Approver")); } if (interfaces.isEmpty()) { warning() << "Client does not implement any known interface"; // cleanup mPriv->bus.unregisterService(busName); return false; } // export o.f.T.Client interface new ClientAdaptor(this, interfaces, object); QString objectPath = QString(QLatin1String("/%1")).arg(busName); objectPath.replace(QLatin1String("."), QLatin1String("/")); if (!mPriv->bus.registerObject(objectPath, object)) { // this shouldn't happen, but let's make sure warning() << "Unable to register client: objectPath" << objectPath << "already registered"; // cleanup delete object; mPriv->bus.unregisterService(busName); return false; } if (handler) { handler->setRegistered(true); } debug() << "Client registered - busName:" << busName << "objectPath:" << objectPath << "interfaces:" << interfaces; mPriv->services.insert(busName); mPriv->clients.insert(client, objectPath); mPriv->clientObjects.insert(client, object); return true; } /** * Unregister a client registered using registerClient() on this client * registrar. * * If \a client was not registered previously, \c false will be returned. * * \param client The client to unregister. * \return \c true if \a client was successfully unregistered, \c false otherwise. * \sa registeredClients(), registerClient() */ bool ClientRegistrar::unregisterClient(const AbstractClientPtr &client) { if (!mPriv->clients.contains(client)) { warning() << "Trying to unregister an unregistered client"; return false; } AbstractClientHandler *handler = dynamic_cast(client.data()); if (handler) { handler->setRegistered(false); } QString objectPath = mPriv->clients.value(client); mPriv->bus.unregisterObject(objectPath); mPriv->clients.remove(client); QObject *object = mPriv->clientObjects.value(client); // delete object here and it's children (adaptors), to make sure if adaptor // is keeping a static list of adaptors per connection, the list is updated. delete object; mPriv->clientObjects.remove(client); QString busName = objectPath.mid(1).replace(QLatin1String("/"), QLatin1String(".")); mPriv->bus.unregisterService(busName); mPriv->services.remove(busName); debug() << "Client unregistered - busName:" << busName << "objectPath:" << objectPath; return true; } /** * Unregister all clients registered using registerClient() on this client * registrar. * * \sa registeredClients(), registerClient(), unregisterClient() */ void ClientRegistrar::unregisterClients() { // copy the hash as it will be modified QHash clients = mPriv->clients; QHash::const_iterator end = clients.constEnd(); QHash::const_iterator it = clients.constBegin(); while (it != end) { unregisterClient(it.key()); ++it; } } } // Tp telepathy-qt-0.9.3/TelepathyQt/simple-observer.h0000644000175200001440000000746412000056607024162 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_simple_observer_h_HEADER_GUARD_ #define _TelepathyQt_simple_observer_h_HEADER_GUARD_ #include #include #include #include namespace Tp { class PendingOperation; class TP_QT_EXPORT SimpleObserver : public QObject, public RefCounted { Q_OBJECT Q_DISABLE_COPY(SimpleObserver) public: static SimpleObserverPtr create(const AccountPtr &account, const ChannelClassSpecList &channelFilter, const QList &extraChannelFeatures = QList()); static SimpleObserverPtr create(const AccountPtr &account, const ChannelClassSpecList &channelFilter, const ContactPtr &contact, const QList &extraChannelFeatures = QList()); static SimpleObserverPtr create(const AccountPtr &account, const ChannelClassSpecList &channelFilter, const QString &contactIdentifier, const QList &extraChannelFeatures = QList()); virtual ~SimpleObserver(); AccountPtr account() const; ChannelClassSpecList channelFilter() const; QString contactIdentifier() const; QList extraChannelFeatures() const; QList channels() const; Q_SIGNALS: void newChannels(const QList &channels); void channelInvalidated(const Tp::ChannelPtr &channel, const QString &errorName, const QString &errorMessage); private Q_SLOTS: TP_QT_NO_EXPORT void onAccountConnectionChanged(const Tp::ConnectionPtr &connection); TP_QT_NO_EXPORT void onAccountConnectionConnected(); TP_QT_NO_EXPORT void onContactConstructed(Tp::PendingOperation *op); TP_QT_NO_EXPORT void onNewChannels(const Tp::AccountPtr &channelsAccount, const QList &channels); TP_QT_NO_EXPORT void onChannelInvalidated(const Tp::AccountPtr &channelAccount, const Tp::ChannelPtr &channel, const QString &errorName, const QString &errorMessage); private: friend class SimpleCallObserver; friend class SimpleTextObserver; TP_QT_NO_EXPORT static SimpleObserverPtr create(const AccountPtr &account, const ChannelClassSpecList &channelFilter, const QString &contactIdentifier, bool requiresNormalization, const QList &extraChannelFeatures); TP_QT_NO_EXPORT SimpleObserver(const AccountPtr &account, const ChannelClassSpecList &channelFilter, const QString &contactIdentifier, bool requiresNormalization, const QList &extraChannelFeatures); struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/call-channel.h0000644000175200001440000001242612000056607023357 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2012 Collabora Ltd. * @license LGPL 2.1 * * 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 _TelepathyQt_call_channel_h_HEADER_GUARD_ #define _TelepathyQt_call_channel_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include namespace Tp { class TP_QT_EXPORT CallChannel : public Channel { Q_OBJECT Q_DISABLE_COPY(CallChannel) public: static const Feature FeatureCore; static const Feature FeatureCallState; static const Feature FeatureCallMembers; static const Feature FeatureContents; static const Feature FeatureLocalHoldState; static CallChannelPtr create(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties); virtual ~CallChannel(); bool handlerStreamingRequired() const; StreamTransportType initialTransportType() const; bool hasInitialAudio() const; bool hasInitialVideo() const; QString initialAudioName() const; QString initialVideoName() const; bool hasMutableContents() const; PendingOperation *setRinging(); PendingOperation *setQueued(); PendingOperation *accept(); PendingOperation *hangup(CallStateChangeReason reason = CallStateChangeReasonUserRequested, const QString &detailedReason = QString(), const QString &message = QString()); // FeatureCallState CallState callState() const; CallFlags callFlags() const; CallStateReason callStateReason() const; QVariantMap callStateDetails() const; // FeatureCallMembers Contacts remoteMembers() const; CallMemberFlags remoteMemberFlags(const ContactPtr &member) const; // FeatureContents CallContents contents() const; CallContents contentsForType(MediaStreamType type) const; CallContentPtr contentByName(const QString &contentName) const; PendingCallContent *requestContent(const QString &name, MediaStreamType type, MediaStreamDirection direction); // FeatureLocalHoldState LocalHoldState localHoldState() const; LocalHoldStateReason localHoldStateReason() const; PendingOperation *requestHold(bool hold); Q_SIGNALS: // FeatureCallState void callStateChanged(Tp::CallState state); void callFlagsChanged(Tp::CallFlags flags); // FeatureCallMembers void remoteMemberFlagsChanged( const QHash &remoteMemberFlags, const Tp::CallStateReason &reason); void remoteMembersRemoved(const Tp::Contacts &remoteMembers, const Tp::CallStateReason &reason); // FeatureContents void contentAdded(const Tp::CallContentPtr &content); void contentRemoved(const Tp::CallContentPtr &content, const Tp::CallStateReason &reason); // FeatureLocalHoldState void localHoldStateChanged(Tp::LocalHoldState state, Tp::LocalHoldStateReason reason); protected: CallChannel(const ConnectionPtr &connection, const QString &objectPath, const QVariantMap &immutableProperties, const Feature &coreFeature = CallChannel::FeatureCore); private Q_SLOTS: TP_QT_NO_EXPORT void gotMainProperties(Tp::PendingOperation *op); TP_QT_NO_EXPORT void gotCallState(Tp::PendingOperation *op); TP_QT_NO_EXPORT void onCallStateChanged(uint state, uint flags, const Tp::CallStateReason &stateReason, const QVariantMap &stateDetails); TP_QT_NO_EXPORT void gotCallMembers(Tp::PendingOperation *op); TP_QT_NO_EXPORT void gotCallMembersContacts(Tp::PendingOperation *op); TP_QT_NO_EXPORT void onCallMembersChanged(const Tp::CallMemberMap &updates, const Tp::HandleIdentifierMap &identifiers, const Tp::UIntList &removed, const Tp::CallStateReason &reason); TP_QT_NO_EXPORT void gotContents(Tp::PendingOperation *op); TP_QT_NO_EXPORT void onContentAdded(const QDBusObjectPath &contentPath); TP_QT_NO_EXPORT void onContentRemoved(const QDBusObjectPath &contentPath, const Tp::CallStateReason &reason); TP_QT_NO_EXPORT void onContentReady(Tp::PendingOperation *op); TP_QT_NO_EXPORT void gotLocalHoldState(QDBusPendingCallWatcher *); TP_QT_NO_EXPORT void onLocalHoldStateChanged(uint, uint); private: friend class PendingCallContent; TP_QT_NO_EXPORT CallContentPtr addContent(const QDBusObjectPath &contentPath); TP_QT_NO_EXPORT CallContentPtr lookupContent(const QDBusObjectPath &contentPath) const; struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/StreamTubeServer0000644000175200001440000000040012000056607024037 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_StreamTubeServer_HEADER_GUARD_ #define _TelepathyQt_StreamTubeServer_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/key-file.cpp0000644000175200001440000003554412000056607023104 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2009 Collabora Ltd. * @copyright Copyright (C) 2008-2009 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include "TelepathyQt/key-file.h" #include "TelepathyQt/debug-internal.h" #include #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT KeyFile::Private { Private(); Private(const QString &fName); void setFileName(const QString &fName); void setError(KeyFile::Status status, const QString &reason); bool read(); bool validateKey(const QByteArray &data, int from, int to, QString &result); QStringList allGroups() const; QStringList allKeys() const; QStringList keys() const; bool contains(const QString &key) const; QString rawValue(const QString &key) const; QString value(const QString &key) const; QStringList valueAsStringList(const QString &key) const; QString fileName; KeyFile::Status status; QHash > groups; QString currentGroup; }; KeyFile::Private::Private() : status(KeyFile::None) { } KeyFile::Private::Private(const QString &fName) : fileName(fName), status(KeyFile::NoError) { read(); } void KeyFile::Private::setFileName(const QString &fName) { fileName = fName; status = KeyFile::NoError; currentGroup = QString(); groups.clear(); read(); } void KeyFile::Private::setError(KeyFile::Status st, const QString &reason) { warning() << QString(QLatin1String("ERROR: filename(%1) reason(%2)")) .arg(fileName).arg(reason); status = st; groups.clear(); } bool KeyFile::Private::read() { QFile file(fileName); if (!file.exists()) { setError(KeyFile::NotFoundError, QLatin1String("file does not exist")); return false; } if (!file.open(QFile::ReadOnly)) { setError(KeyFile::AccessError, QLatin1String("cannot open file for readonly access")); return false; } QByteArray data; QByteArray group; QString currentGroup; QHash groupMap; QByteArray rawValue; int line = 0; int idx; while (!file.atEnd()) { data = file.readLine().trimmed(); line++; if (data.size() == 0) { // skip empty lines continue; } char ch = data.at(0); if (ch == '#') { // skip comments continue; } else if (ch == '[') { if (groupMap.size()) { groups[currentGroup] = groupMap; groupMap.clear(); } idx = data.indexOf(']'); if (idx == -1) { // line starts with [ and it's not a group setError(KeyFile::FormatError, QString(QLatin1String("invalid group at line %2 - missing ']'")) .arg(line)); return false; } group = data.mid(1, idx - 1).trimmed(); if (groups.contains(QLatin1String(group))) { setError(KeyFile::FormatError, QString(QLatin1String("duplicated group '%1' at line %2")) .arg(QLatin1String(group)).arg(line)); return false; } currentGroup = QLatin1String(""); if (!unescapeString(group, 0, group.size(), currentGroup)) { setError(KeyFile::FormatError, QString(QLatin1String("invalid group '%1' at line %2")) .arg(currentGroup).arg(line)); return false; } } else { idx = data.indexOf('='); if (idx == -1) { setError(KeyFile::FormatError, QString(QLatin1String("format error at line %1 - missing '='")) .arg(line)); return false; } // remove trailing spaces char ch; int idxKeyEnd = idx; while ((ch = data.at(idxKeyEnd - 1)) == ' ' || ch == '\t') { --idxKeyEnd; } QString key; if (!validateKey(data, 0, idxKeyEnd, key)) { setError(KeyFile::FormatError, QString(QLatin1String("invalid key '%1' at line %2")) .arg(key).arg(line)); return false; } if (groupMap.contains(key)) { setError(KeyFile::FormatError, QString(QLatin1String("duplicated key '%1' on group '%2' at line %3")) .arg(key).arg(currentGroup).arg(line)); return false; } data = data.mid(idx + 1).trimmed(); rawValue = data.mid(0, data.size()); groupMap[key] = rawValue; } } if (groupMap.size()) { groups[currentGroup] = groupMap; groupMap.clear(); } return true; } bool KeyFile::Private::validateKey(const QByteArray &data, int from, int to, QString &result) { int i = from; bool ret = true; while (i < to) { uint ch = data.at(i++); // as an extension to the Desktop Entry spec, we allow " ", "_", "." and "@" // as valid key characters - "_" and "." are needed for keys that are // D-Bus property names, and GKeyFile and KConfigIniBackend also accept // all four of those characters. if (!((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch >= '0' && ch <= '9') || (ch == ' ') || (ch == '-') || (ch == '_') || (ch == '.') || (ch == '@'))) { ret = false; } result += ch; } return ret; } QStringList KeyFile::Private::allGroups() const { return groups.keys(); } QStringList KeyFile::Private::allKeys() const { QStringList keys; QHash >::const_iterator itrGroups = groups.begin(); while (itrGroups != groups.end()) { keys << itrGroups.value().keys(); ++itrGroups; } return keys; } QStringList KeyFile::Private::keys() const { QHash groupMap = groups[currentGroup]; return groupMap.keys(); } bool KeyFile::Private::contains(const QString &key) const { QHash groupMap = groups[currentGroup]; return groupMap.contains(key); } QString KeyFile::Private::rawValue(const QString &key) const { QHash groupMap = groups[currentGroup]; QByteArray rawValue = groupMap.value(key); return QLatin1String(rawValue); } QString KeyFile::Private::value(const QString &key) const { QHash groupMap = groups[currentGroup]; QString result; QByteArray rawValue = groupMap.value(key); if (unescapeString(rawValue, 0, rawValue.size(), result)) { return result; } return QString(); } QStringList KeyFile::Private::valueAsStringList(const QString &key) const { QHash groupMap = groups[currentGroup]; QStringList result; QByteArray rawValue = groupMap.value(key); if (unescapeStringList(rawValue, 0, rawValue.size(), result)) { return result; } return QStringList(); } /** * \class KeyFile * \ingroup utils * \headerfile TelepathyQt/key-file.h * * \brief The KeyFile class provides an easy way to read key-pair files such as * INI style files and .desktop files. * * It follows the rules regarding string escaping as defined in * http://standards.freedesktop.org/desktop-entry-spec/latest/index.html */ /** * Create a KeyFile object used to read (key-pair) compliant files. * * The status will be KeyFile::None * \sa setFileName() */ KeyFile::KeyFile() : mPriv(new Private()) { } /** * Create a KeyFile object used to read (key-pair) compliant files. * * \param fileName Name of the file to be read. */ KeyFile::KeyFile(const QString &fileName) : mPriv(new Private(fileName)) { } /** * Create a KeyFile object used to read (key-pair) compliant files. */ KeyFile::KeyFile(const KeyFile &other) : mPriv(new Private()) { mPriv->fileName = other.mPriv->fileName; mPriv->status = other.mPriv->status; mPriv->groups = other.mPriv->groups; mPriv->currentGroup = other.mPriv->currentGroup; } /** * Class destructor. */ KeyFile::~KeyFile() { delete mPriv; } KeyFile &KeyFile::operator=(const KeyFile &other) { mPriv->fileName = other.mPriv->fileName; mPriv->status = other.mPriv->status; mPriv->groups = other.mPriv->groups; mPriv->currentGroup = other.mPriv->currentGroup; return *this; } /** * Set the name of the file to be read. * * \param fileName Name of the file to be read. */ void KeyFile::setFileName(const QString &fileName) { mPriv->setFileName(fileName); } /** * Return the name of the file associated with this object. * * \return Name of the file associated with this object. */ QString KeyFile::fileName() const { return mPriv->fileName; } /** * Return a status code indicating the first error that was met by #KeyFile, * or KeyFile::NoError if no error occurred. * * Make sure to use this method if you set the filename to be read using * setFileName(). * * \return Status code. * \sa setFileName() */ KeyFile::Status KeyFile::status() const { return mPriv->status; } /** * Set the current group to be used while reading keys. * * Query functions such as keys(), contains() and value() are based on this * group. * * By default a empty group is used as the group for global * keys and is used as the default group if none is set. * * \param group Name of the group to be used. * \sa group() */ void KeyFile::setGroup(const QString &group) { mPriv->currentGroup = group; } /** * Return the current group. * * \return Name of the current group. * \sa setGroup() */ QString KeyFile::group() const { return mPriv->currentGroup; } /** * Return all groups in the desktop file. * * Global keys will be added to a empty group. * * \return List of all groups in the desktop file. */ QStringList KeyFile::allGroups() const { return mPriv->allGroups(); } /** * Return all keys described in the desktop file. * * \return List of all keys in the desktop file. */ QStringList KeyFile::allKeys() const { return mPriv->allKeys(); } /** * Return a list of keys in the current group. * * \return List of all keys in the current group. * \sa group(), setGroup() */ QStringList KeyFile::keys() const { return mPriv->keys(); } /** * Check if the current group contains a key named \a key. * * \return true if \a key exists, false otherwise. * \sa group(), setGroup() */ bool KeyFile::contains(const QString &key) const { return mPriv->contains(key); } /** * Get the raw value for the key in the current group named \a key. * * The raw value is the value as is in the key file. * * \return Value of \a key, empty string if not found. * \sa group(), setGroup() */ QString KeyFile::rawValue(const QString &key) const { return mPriv->rawValue(key); } /** * Get the value for the key in the current group named \a key. * * Escape sequences in the value are interpreted as defined in: * http://standards.freedesktop.org/desktop-entry-spec/latest/ * * \return Value of \a key, empty string if not found or an error occurred. * \sa group(), setGroup() */ QString KeyFile::value(const QString &key) const { return mPriv->value(key); } /** * Get the value for the key in the current group named \a key as a list. * * Return a list containing all strings on this key separated by ';'. * Escape sequences in the value are interpreted as defined in: * http://standards.freedesktop.org/desktop-entry-spec/latest/ * * \return Value of \a key as a list, empty string list if not found or an error occurred. * \sa group(), setGroup() */ QStringList KeyFile::valueAsStringList(const QString &key) const { return mPriv->valueAsStringList(key); } bool KeyFile::unescapeString(const QByteArray &data, int from, int to, QString &result) { int i = from; while (i < to) { uint ch = data.at(i++); if (ch == '\\') { if (i == to) { result += QLatin1String("\\"); return true; } char nextCh = data.at(i++); switch (nextCh) { case 's': result += QLatin1String(" "); break; case 'n': result += QLatin1String("\n"); break; case 't': result += QLatin1String("\t"); break; case 'r': result += QLatin1String("\r"); break; case ';': result += QLatin1String(";"); break; case '\\': result += QLatin1String("\\"); break; default: return false; } } else { result += ch; } } return true; } bool KeyFile::unescapeStringList(const QByteArray &data, int from, int to, QStringList &result) { QByteArray value; QList valueList; int i = from; char ch; while (i < to) { ch = data.at(i++); if (ch == '\\') { value += ch; if (i < to) { value += data.at(i++); continue; } else { valueList << value; break; } } else if (ch == ';') { valueList << value; value = ""; } else { value += ch; if (i == to) { valueList << value; } } } foreach (value, valueList) { QString str; if (!unescapeString(value, 0, value.size(), str)) { return false; } result << str; } return true; } } // Tp telepathy-qt-0.9.3/TelepathyQt/call-content.cpp0000644000175200001440000004047112000056607023755 0ustar00collabora-develusers00000000000000/* * This file is part of TelepathyQt * * @copyright Copyright (C) 2010-2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/call-content.moc.hpp" #include "TelepathyQt/_gen/cli-call-content-body.hpp" #include "TelepathyQt/_gen/cli-call-content.moc.hpp" #include #include #include #include #include #include #include namespace Tp { /* ====== CallContent ====== */ struct TP_QT_NO_EXPORT CallContent::Private { Private(CallContent *parent, const CallChannelPtr &channel); static void introspectMainProperties(Private *self); void checkIntrospectionCompleted(); CallStreamPtr addStream(const QDBusObjectPath &streamPath); CallStreamPtr lookupStream(const QDBusObjectPath &streamPath); // Public object CallContent *parent; WeakPtr channel; // Mandatory proxies Client::CallContentInterface *contentInterface; ReadinessHelper *readinessHelper; // Introspection QString name; uint type; uint disposition; CallStreams streams; CallStreams incompleteStreams; }; CallContent::Private::Private(CallContent *parent, const CallChannelPtr &channel) : parent(parent), channel(channel.data()), contentInterface(parent->interface()), readinessHelper(parent->readinessHelper()) { ReadinessHelper::Introspectables introspectables; ReadinessHelper::Introspectable introspectableCore( QSet() << 0, // makesSenseForStatuses Features(), // dependsOnFeatures QStringList(), // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::introspectMainProperties, this); introspectables[FeatureCore] = introspectableCore; readinessHelper->addIntrospectables(introspectables); readinessHelper->becomeReady(FeatureCore); } void CallContent::Private::introspectMainProperties(CallContent::Private *self) { CallContent *parent = self->parent; CallChannelPtr channel = parent->channel(); parent->connect(self->contentInterface, SIGNAL(StreamsAdded(Tp::ObjectPathList)), SLOT(onStreamsAdded(Tp::ObjectPathList))); parent->connect(self->contentInterface, SIGNAL(StreamsRemoved(Tp::ObjectPathList,Tp::CallStateReason)), SLOT(onStreamsRemoved(Tp::ObjectPathList,Tp::CallStateReason))); parent->connect(self->contentInterface->requestAllProperties(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(gotMainProperties(Tp::PendingOperation*))); } void CallContent::Private::checkIntrospectionCompleted() { if (!parent->isReady(FeatureCore) && incompleteStreams.size() == 0) { readinessHelper->setIntrospectCompleted(FeatureCore, true); } } CallStreamPtr CallContent::Private::addStream(const QDBusObjectPath &streamPath) { CallStreamPtr stream = CallStreamPtr( new CallStream(CallContentPtr(parent), streamPath)); incompleteStreams.append(stream); parent->connect(stream->becomeReady(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onStreamReady(Tp::PendingOperation*))); return stream; } CallStreamPtr CallContent::Private::lookupStream(const QDBusObjectPath &streamPath) { foreach (const CallStreamPtr &stream, streams) { if (stream->objectPath() == streamPath.path()) { return stream; } } foreach (const CallStreamPtr &stream, incompleteStreams) { if (stream->objectPath() == streamPath.path()) { return stream; } } return CallStreamPtr(); } /** * \class CallContent * \ingroup clientchannel * \headerfile TelepathyQt/call-content.h * * \brief The CallContent class provides an object representing a Telepathy * Call.Content. * * Instances of this class cannot be constructed directly; the only way to get * one is via CallChannel. * * See \ref async_model */ /** * Feature representing the core that needs to become ready to make the * CallContent object usable. * * Note that this feature must be enabled in order to use most CallContent * methods. See specific methods documentation for more details. * * When calling isReady(), becomeReady(), this feature is implicitly added * to the requested features. */ const Feature CallContent::FeatureCore = Feature(QLatin1String(CallContent::staticMetaObject.className()), 0); /** * Construct a new CallContent object. * * \param channel The channel owning this media content. * \param name The object path of this media content. */ CallContent::CallContent(const CallChannelPtr &channel, const QDBusObjectPath &objectPath) : StatefulDBusProxy(channel->dbusConnection(), channel->busName(), objectPath.path(), FeatureCore), OptionalInterfaceFactory(this), mPriv(new Private(this, channel)) { } /** * Class destructor. */ CallContent::~CallContent() { delete mPriv; } /** * Return the channel owning this media content. * * \return The channel owning this media content. */ CallChannelPtr CallContent::channel() const { return CallChannelPtr(mPriv->channel); } /** * Return the name of this media content. * * \return The name of this media content. */ QString CallContent::name() const { return mPriv->name; } /** * Return the type of this media content. * * \return The type of this media content. */ MediaStreamType CallContent::type() const { return (MediaStreamType) mPriv->type; } /** * Return the disposition of this media content. * * \return The disposition of this media content. */ CallContentDisposition CallContent::disposition() const { return (CallContentDisposition) mPriv->disposition; } /** * Return the media streams of this media content. * * \return A list of media streams of this media content. * \sa streamAdded(), streamRemoved() */ CallStreams CallContent::streams() const { return mPriv->streams; } /** * Removes this media content from the call. * * \return A PendingOperation which will emit PendingOperation::finished * when the call has finished. */ PendingOperation *CallContent::remove() { return new PendingVoid(mPriv->contentInterface->Remove(), CallContentPtr(this)); } /** * Return whether sending DTMF events is supported on this content. * DTMF is only supported on audio contents that implement the * #TP_QT_IFACE_CALL_CONTENT_INTERFACE_DTMF interface. * * \returns \c true if DTMF is supported, or \c false otherwise. */ bool CallContent::supportsDTMF() const { return hasInterface(TP_QT_IFACE_CALL_CONTENT_INTERFACE_DTMF); } /** * Start sending a DTMF tone on this media stream. * * Where possible, the tone will continue until stopDTMFTone() is called. * On certain protocols, it may only be possible to send events with a predetermined * length. In this case, the implementation may emit a fixed-length tone, * and the stopDTMFTone() method call should return #TP_QT_ERROR_NOT_AVAILABLE. * * If this content does not support the #TP_QT_IFACE_CALL_CONTENT_INTERFACE_DTMF * interface, the resulting PendingOperation will fail with error code * #TP_QT_ERROR_NOT_IMPLEMENTED. * * \param event A numeric event code from the #DTMFEvent enum. * \return A PendingOperation which will emit PendingOperation::finished * when the request finishes. * \sa stopDTMFTone(), supportsDTMF() */ PendingOperation *CallContent::startDTMFTone(DTMFEvent event) { if (!supportsDTMF()) { warning() << "CallContent::startDTMFTone() used with no dtmf interface"; return new PendingFailure(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("This CallContent does not support the dtmf interface"), CallContentPtr(this)); } Client::CallContentInterfaceDTMFInterface *dtmfInterface = interface(); return new PendingVoid(dtmfInterface->StartTone(event), CallContentPtr(this)); } /** * Stop sending any DTMF tone which has been started using the startDTMFTone() * method. * * If there is no current tone, the resulting PendingOperation will * finish successfully. * * If this content does not support the #TP_QT_IFACE_CALL_CONTENT_INTERFACE_DTMF * interface, the resulting PendingOperation will fail with error code * #TP_QT_ERROR_NOT_IMPLEMENTED. * * \return A PendingOperation which will emit PendingOperation::finished * when the request finishes. * \sa startDTMFTone(), supportsDTMF() */ PendingOperation *CallContent::stopDTMFTone() { if (!supportsDTMF()) { warning() << "CallContent::stopDTMFTone() used with no dtmf interface"; return new PendingFailure(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("This CallContent does not support the dtmf interface"), CallContentPtr(this)); } Client::CallContentInterfaceDTMFInterface *dtmfInterface = interface(); return new PendingVoid(dtmfInterface->StopTone(), CallContentPtr(this)); } void CallContent::gotMainProperties(PendingOperation *op) { if (op->isError()) { warning().nospace() << "CallContentInterface::requestAllProperties() failed with" << op->errorName() << ": " << op->errorMessage(); mPriv->readinessHelper->setIntrospectCompleted(FeatureCore, false, op->errorName(), op->errorMessage()); return; } debug() << "Got reply to CallContentInterface::requestAllProperties()"; PendingVariantMap *pvm = qobject_cast(op); Q_ASSERT(pvm); QVariantMap props = pvm->result(); mPriv->name = qdbus_cast(props[QLatin1String("Name")]); mPriv->type = qdbus_cast(props[QLatin1String("Type")]); mPriv->disposition = qdbus_cast(props[QLatin1String("Disposition")]); ObjectPathList streamsPaths = qdbus_cast(props[QLatin1String("Streams")]); if (streamsPaths.size() != 0) { foreach (const QDBusObjectPath &streamPath, streamsPaths) { CallStreamPtr stream = mPriv->lookupStream(streamPath); if (!stream) { mPriv->addStream(streamPath); } } } else { mPriv->readinessHelper->setIntrospectCompleted(FeatureCore, true); } } void CallContent::onStreamsAdded(const ObjectPathList &streamsPaths) { foreach (const QDBusObjectPath &streamPath, streamsPaths) { debug() << "Received Call::Content::StreamAdded for stream" << streamPath.path(); if (mPriv->lookupStream(streamPath)) { debug() << "Stream already exists, ignoring"; return; } mPriv->addStream(streamPath); } } void CallContent::onStreamsRemoved(const ObjectPathList &streamsPaths, const CallStateReason &reason) { foreach (const QDBusObjectPath &streamPath, streamsPaths) { debug() << "Received Call::Content::StreamRemoved for stream" << streamPath.path(); CallStreamPtr stream = mPriv->lookupStream(streamPath); if (!stream) { debug() << "Stream does not exist, ignoring"; return; } bool incomplete = mPriv->incompleteStreams.contains(stream); if (incomplete) { mPriv->incompleteStreams.removeOne(stream); } else { mPriv->streams.removeOne(stream); } if (isReady(FeatureCore) && !incomplete) { emit streamRemoved(stream, reason); } mPriv->checkIntrospectionCompleted(); } } void CallContent::onStreamReady(PendingOperation *op) { PendingReady *pr = qobject_cast(op); CallStreamPtr stream = CallStreamPtr::qObjectCast(pr->proxy()); if (op->isError() || !mPriv->incompleteStreams.contains(stream)) { mPriv->incompleteStreams.removeOne(stream); mPriv->checkIntrospectionCompleted(); return; } mPriv->incompleteStreams.removeOne(stream); mPriv->streams.append(stream); if (isReady(FeatureCore)) { emit streamAdded(stream); } mPriv->checkIntrospectionCompleted(); } /** * \fn void CallContent::streamAdded(const Tp::CallStreamPtr &stream); * * This signal is emitted when a new media stream is added to this media * content. * * \param stream The media stream that was added. * \sa streams() */ /** * \fn void CallContent::streamRemoved(const Tp::CallStreamPtr &stream, const Tp::CallStateReason &reason); * * This signal is emitted when a new media stream is removed from this media * content. * * \param stream The media stream that was removed. * \param reason The reason for this removal. * \sa streams() */ /* ====== PendingCallContent ====== */ struct TP_QT_NO_EXPORT PendingCallContent::Private { Private(PendingCallContent *parent, const CallChannelPtr &channel) : parent(parent), channel(channel) { } PendingCallContent *parent; CallChannelPtr channel; CallContentPtr content; }; PendingCallContent::PendingCallContent(const CallChannelPtr &channel, const QString &name, MediaStreamType type, MediaStreamDirection direction) : PendingOperation(channel), mPriv(new Private(this, channel)) { Client::ChannelTypeCallInterface *callInterface = channel->interface(); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( callInterface->AddContent(name, type, direction), this); connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotContent(QDBusPendingCallWatcher*))); } PendingCallContent::~PendingCallContent() { delete mPriv; } CallContentPtr PendingCallContent::content() const { if (!isFinished() || !isValid()) { return CallContentPtr(); } return mPriv->content; } void PendingCallContent::gotContent(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (reply.isError()) { warning().nospace() << "Call::AddContent failed with " << reply.error().name() << ": " << reply.error().message(); setFinishedWithError(reply.error()); watcher->deleteLater(); return; } QDBusObjectPath contentPath = reply.value(); CallChannelPtr channel(mPriv->channel); CallContentPtr content = channel->lookupContent(contentPath); if (!content) { content = channel->addContent(contentPath); } connect(content->becomeReady(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onContentReady(Tp::PendingOperation*))); connect(channel.data(), SIGNAL(contentRemoved(Tp::CallContentPtr,Tp::CallStateReason)), SLOT(onContentRemoved(Tp::CallContentPtr))); mPriv->content = content; watcher->deleteLater(); } void PendingCallContent::onContentReady(PendingOperation *op) { if (op->isError()) { setFinishedWithError(op->errorName(), op->errorMessage()); return; } setFinished(); } void PendingCallContent::onContentRemoved(const CallContentPtr &content) { if (isFinished()) { return; } if (mPriv->content == content) { // the content was removed before becoming ready setFinishedWithError(TP_QT_ERROR_CANCELLED, QLatin1String("Content removed before ready")); } } } // Tp telepathy-qt-0.9.3/TelepathyQt/base-protocol-internal.h0000644000175200001440000001137412000056607025422 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include "TelepathyQt/_gen/svc-connection-manager.h" #include #include #include #include #include #include #include namespace Tp { class TP_QT_NO_EXPORT BaseProtocol::Adaptee : public QObject { Q_OBJECT Q_PROPERTY(QStringList interfaces READ interfaces) Q_PROPERTY(Tp::ParamSpecList parameters READ parameters) Q_PROPERTY(QStringList connectionInterfaces READ connectionInterfaces) Q_PROPERTY(Tp::RequestableChannelClassList requestableChannelClasses READ requestableChannelClasses) Q_PROPERTY(QString vcardField READ vcardField) Q_PROPERTY(QString englishName READ englishName) Q_PROPERTY(QString icon READ icon) Q_PROPERTY(QStringList authenticationTypes READ authenticationTypes) public: Adaptee(const QDBusConnection &dbusConnection, BaseProtocol *protocol); ~Adaptee(); QStringList interfaces() const; QStringList connectionInterfaces() const; ParamSpecList parameters() const; RequestableChannelClassList requestableChannelClasses() const; QString vcardField() const; QString englishName() const; QString icon() const; QStringList authenticationTypes() const; private Q_SLOTS: void identifyAccount(const QVariantMap ¶meters, const Tp::Service::ProtocolAdaptor::IdentifyAccountContextPtr &context); void normalizeContact(const QString &contactId, const Tp::Service::ProtocolAdaptor::NormalizeContactContextPtr &context); public: BaseProtocol *mProtocol; }; class TP_QT_NO_EXPORT BaseProtocolAddressingInterface::Adaptee : public QObject { Q_OBJECT Q_PROPERTY(QStringList addressableVCardFields READ addressableVCardFields) Q_PROPERTY(QStringList addressableURISchemes READ addressableURISchemes) public: Adaptee(BaseProtocolAddressingInterface *interface); ~Adaptee(); QStringList addressableVCardFields() const; QStringList addressableURISchemes() const; private Q_SLOTS: void normalizeVCardAddress(const QString &vcardField, const QString &vcardAddress, const Tp::Service::ProtocolInterfaceAddressingAdaptor::NormalizeVCardAddressContextPtr &context); void normalizeContactURI(const QString &uri, const Tp::Service::ProtocolInterfaceAddressingAdaptor::NormalizeContactURIContextPtr &context); public: BaseProtocolAddressingInterface *mInterface; }; class TP_QT_NO_EXPORT BaseProtocolAvatarsInterface::Adaptee : public QObject { Q_OBJECT Q_PROPERTY(QStringList supportedAvatarMIMETypes READ supportedAvatarMIMETypes) Q_PROPERTY(uint minimumAvatarHeight READ minimumAvatarHeight) Q_PROPERTY(uint minimumAvatarWidth READ minimumAvatarWidth) Q_PROPERTY(uint recommendedAvatarHeight READ recommendedAvatarHeight) Q_PROPERTY(uint recommendedAvatarWidth READ recommendedAvatarWidth) Q_PROPERTY(uint maximumAvatarHeight READ maximumAvatarHeight) Q_PROPERTY(uint maximumAvatarWidth READ maximumAvatarWidth) Q_PROPERTY(uint maximumAvatarBytes READ maximumAvatarBytes) public: Adaptee(BaseProtocolAvatarsInterface *interface); ~Adaptee(); QStringList supportedAvatarMIMETypes() const; uint minimumAvatarHeight() const; uint minimumAvatarWidth() const; uint recommendedAvatarHeight() const; uint recommendedAvatarWidth() const; uint maximumAvatarHeight() const; uint maximumAvatarWidth() const; uint maximumAvatarBytes() const; public: BaseProtocolAvatarsInterface *mInterface; }; class TP_QT_NO_EXPORT BaseProtocolPresenceInterface::Adaptee : public QObject { Q_OBJECT Q_PROPERTY(Tp::SimpleStatusSpecMap statuses READ statuses) public: Adaptee(BaseProtocolPresenceInterface *interface); ~Adaptee(); SimpleStatusSpecMap statuses() const; public: BaseProtocolPresenceInterface *mInterface; }; } telepathy-qt-0.9.3/TelepathyQt/AccountInterfaceAddressingInterface0000644000175200001440000000043312000056607027645 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_AccountInterfaceAddressingInterface_HEADER_GUARD_ #define _TelepathyQt_AccountInterfaceAddressingInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/types.h0000644000175200001440000001723412000056607022204 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2012 Collabora Ltd. * @copyright Copyright (C) 2008-2012 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_types_h_HEADER_GUARD_ #define _TelepathyQt_types_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include #include namespace Tp { TP_QT_EXPORT void registerTypes(); template class Filter; template class GenericCapabilityFilter; template class GenericPropertyFilter; class AbstractClient; class AbstractClientApprover; class AbstractClientHandler; class AbstractClientObserver; class Account; typedef GenericCapabilityFilter AccountCapabilityFilter; class AccountFactory; typedef Filter AccountFilter; class AccountManager; class AccountPropertyFilter; class AccountSet; class CallChannel; class CallContent; class CallStream; class CaptchaAuthentication; class Channel; class ChannelDispatchOperation; class ChannelFactory; class ChannelRequest; class ClientObject; class ClientRegistrar; class Connection; class ConnectionFactory; class ConnectionLowlevel; class ConnectionManager; class ConnectionManagerLowlevel; class Contact; class ContactFactory; class ContactManager; class ContactMessenger; class ContactSearchChannel; class DBusProxy; class DebugReceiver; class DBusTubeChannel; class FileTransferChannel; class IncomingDBusTubeChannel; class IncomingFileTransferChannel; class IncomingStreamTubeChannel; class OutgoingDBusTubeChannel; class OutgoingFileTransferChannel; class OutgoingStreamTubeChannel; class Profile; class ProfileManager; class RoomListChannel; class ServerAuthenticationChannel; class SimpleObserver; class SimpleCallObserver; class SimpleTextObserver; class StreamedMediaChannel; class StreamedMediaStream; class StreamTubeChannel; class StreamTubeClient; class StreamTubeServer; class TextChannel; class TubeChannel; #ifndef DOXYGEN_SHOULD_SKIP_THIS typedef SharedPtr AbstractClientPtr; typedef SharedPtr AbstractClientApproverPtr; typedef SharedPtr AbstractClientHandlerPtr; typedef SharedPtr AbstractClientObserverPtr; typedef SharedPtr AccountPtr; typedef SharedPtr AccountCapabilityFilterPtr; typedef SharedPtr AccountCapabilityFilterConstPtr; typedef SharedPtr AccountFactoryPtr; typedef SharedPtr AccountFactoryConstPtr; typedef SharedPtr AccountFilterPtr; typedef SharedPtr AccountFilterConstPtr; typedef SharedPtr AccountManagerPtr; typedef SharedPtr AccountPropertyFilterPtr; typedef SharedPtr AccountPropertyFilterConstPtr; typedef SharedPtr AccountSetPtr; typedef SharedPtr CallChannelPtr; typedef SharedPtr CallContentPtr; typedef SharedPtr CallStreamPtr; typedef SharedPtr CaptchaAuthenticationPtr; typedef SharedPtr ChannelPtr; typedef SharedPtr ChannelDispatchOperationPtr; typedef SharedPtr ChannelFactoryPtr; typedef SharedPtr ChannelFactoryConstPtr; typedef SharedPtr ChannelRequestPtr; typedef SharedPtr ClientObjectPtr; typedef SharedPtr ClientRegistrarPtr; typedef SharedPtr ConnectionPtr; typedef SharedPtr ConnectionFactoryPtr; typedef SharedPtr ConnectionFactoryConstPtr; typedef SharedPtr ConnectionLowlevelPtr; typedef SharedPtr ConnectionLowlevelConstPtr; typedef SharedPtr ConnectionManagerPtr; typedef SharedPtr ConnectionManagerLowlevelPtr; typedef SharedPtr ConnectionManagerLowlevelConstPtr; typedef SharedPtr ContactPtr; typedef QSet Contacts; typedef SharedPtr ContactFactoryPtr; typedef SharedPtr ContactFactoryConstPtr; typedef SharedPtr ContactManagerPtr; typedef SharedPtr ContactMessengerPtr; typedef SharedPtr ContactSearchChannelPtr; typedef SharedPtr DBusProxyPtr; typedef SharedPtr DBusTubeChannelPtr; typedef SharedPtr DebugReceiverPtr; typedef SharedPtr FileTransferChannelPtr; typedef SharedPtr IncomingDBusTubeChannelPtr; typedef SharedPtr IncomingFileTransferChannelPtr; typedef SharedPtr IncomingStreamTubeChannelPtr; typedef SharedPtr OutgoingDBusTubeChannelPtr; typedef SharedPtr OutgoingFileTransferChannelPtr; typedef SharedPtr OutgoingStreamTubeChannelPtr; typedef SharedPtr ProfilePtr; typedef SharedPtr ProfileManagerPtr; typedef SharedPtr RoomListChannelPtr; typedef SharedPtr ServerAuthenticationChannelPtr; typedef SharedPtr SimpleObserverPtr; typedef SharedPtr SimpleCallObserverPtr; typedef SharedPtr SimpleTextObserverPtr; typedef TP_QT_DEPRECATED SharedPtr StreamedMediaChannelPtr; typedef TP_QT_DEPRECATED SharedPtr StreamedMediaStreamPtr; typedef SharedPtr StreamTubeChannelPtr; typedef SharedPtr StreamTubeClientPtr; typedef SharedPtr StreamTubeServerPtr; typedef SharedPtr TextChannelPtr; typedef SharedPtr TubeChannelPtr; template class MethodInvocationContextPtr : public SharedPtr > { public: inline MethodInvocationContextPtr() { } explicit inline MethodInvocationContextPtr(MethodInvocationContext *d) : SharedPtr >(d) { } inline MethodInvocationContextPtr(const SharedPtr > &o) : SharedPtr >(o) { } }; #endif /* DOXYGEN_SHOULD_SKIP_THIS */ } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/ReceivedMessage0000644000175200001440000000036312000056607023640 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ReceivedMessage_HEADER_GUARD_ #define _TelepathyQt_ReceivedMessage_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/ChannelInterfaceCaptchaAuthenticationInterface0000644000175200001440000000046112000056607032002 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelInterfaceCaptchaAuthenticationInterface_HEADER_GUARD_ #define _TelepathyQt_ChannelInterfaceCaptchaAuthenticationInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/captcha.h0000644000175200001440000000346512000056607022444 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_captcha_h_HEADER_GUARD_ #define _TelepathyQt_captcha_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include namespace Tp { class PendingCaptchas; class TP_QT_EXPORT Captcha { public: Captcha(); Captcha(const Captcha &other); ~Captcha(); bool isValid() const { return mPriv.constData() != 0; } Captcha &operator=(const Captcha &rhs); QString mimeType() const; QString label() const; QByteArray data() const; CaptchaAuthentication::ChallengeType type() const; uint id() const; private: struct Private; friend struct Private; friend class PendingCaptchas; Captcha(const QString &mimeType, const QString &label, const QByteArray &data, CaptchaAuthentication::ChallengeType type, uint id); QSharedDataPointer mPriv; }; } #endif telepathy-qt-0.9.3/TelepathyQt/message-content-part.cpp0000644000175200001440000000462112000056607025427 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include namespace Tp { struct TP_QT_NO_EXPORT MessageContentPart::Private : public QSharedData { Private(const MessagePart &mp) : mp(mp) {} MessagePart mp; }; /** * \class MessageContentPart * \ingroup wrappers * \headerfile TelepathyQt/message-content-part.h * * \brief The MessageContentPart class represents a Telepathy message part. */ MessageContentPart::MessageContentPart() { } MessageContentPart::MessageContentPart(const MessagePart &mp) : mPriv(new Private(mp)) { } MessageContentPart::MessageContentPart(const MessageContentPart &other) : mPriv(other.mPriv) { } MessageContentPart::~MessageContentPart() { } MessageContentPart &MessageContentPart::operator=(const MessageContentPart &other) { this->mPriv = other.mPriv; return *this; } bool MessageContentPart::operator==(const MessageContentPart &other) const { if (!isValid() || !other.isValid()) { if (!isValid() && !other.isValid()) { return true; } return false; } return mPriv->mp == other.mPriv->mp; } MessagePart MessageContentPart::barePart() const { return isValid() ? mPriv->mp : MessagePart(); } /** * \class MessageContentPartList * \ingroup wrappers * \headerfile TelepathyQt/message-content-part.h * * \brief The MessageContentPartList class represents a list of * MessageContentPart. */ } // Tp telepathy-qt-0.9.3/TelepathyQt/ChannelInterfaceMediaSignallingInterface0000644000175200001440000000044512000056607030570 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelInterfaceMediaSignallingInterface_HEADER_GUARD_ #define _TelepathyQt_ChannelInterfaceMediaSignallingInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/method-invocation-context.h0000644000175200001440000001277312000056607026154 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_method_invocation_context_h_HEADER_GUARD_ #define _TelepathyQt_method_invocation_context_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include namespace Tp { #ifndef DOXYGEN_SHOULD_SKIP_THIS namespace MethodInvocationContextTypes { struct Nil { }; template struct Select { typedef Select Next; typedef typename Next::Type Type; }; template struct Select<0, T1, T2, T3, T4, T5, T6, T7, T8> { typedef T1 Type; }; template struct ForEach { typedef ForEach Next; enum { Total = Next::Total + 1 }; }; template<> struct ForEach { enum { Total = 0 }; }; } #endif /* DOXYGEN_SHOULD_SKIP_THIS */ template class MethodInvocationContext : public RefCounted { #ifndef DOXYGEN_SHOULD_SKIP_THIS template struct Select : MethodInvocationContextTypes::Select { }; typedef MethodInvocationContextTypes::ForEach ForEach; enum { Count = ForEach::Total }; #endif /* DOXYGEN_SHOULD_SKIP_THIS */ public: MethodInvocationContext(const QDBusConnection &bus, const QDBusMessage &message) : mBus(bus), mMessage(message), mFinished(false) { mMessage.setDelayedReply(true); } virtual ~MethodInvocationContext() { if (!mFinished) { setFinishedWithError(QString(), QString()); } } bool isFinished() const { return mFinished; } bool isError() const { return !mErrorName.isEmpty(); } QString errorName() const { return mErrorName; } QString errorMessage() const { return mErrorMessage; } void setFinished(const T1 &t1 = T1(), const T2 &t2 = T2(), const T3 &t3 = T3(), const T4 &t4 = T4(), const T5 &t5 = T5(), const T6 &t6 = T6(), const T7 &t7 = T7(), const T8 &t8 = T8()) { if (mFinished) { return; } mFinished = true; setReplyValue(0, qVariantFromValue(t1)); setReplyValue(1, qVariantFromValue(t2)); setReplyValue(2, qVariantFromValue(t3)); setReplyValue(3, qVariantFromValue(t4)); setReplyValue(4, qVariantFromValue(t5)); setReplyValue(5, qVariantFromValue(t6)); setReplyValue(6, qVariantFromValue(t7)); setReplyValue(7, qVariantFromValue(t8)); if (mReply.isEmpty()) { mBus.send(mMessage.createReply()); } else { mBus.send(mMessage.createReply(mReply)); } onFinished(); } void setFinishedWithError(const QString &errorName, const QString &errorMessage) { if (mFinished) { return; } mFinished = true; if (errorName.isEmpty()) { mErrorName = QLatin1String("org.freedesktop.Telepathy.Qt.ErrorHandlingError"); } else { mErrorName = errorName; } mErrorMessage = errorMessage; mBus.send(mMessage.createErrorReply(mErrorName, mErrorMessage)); onFinished(); } template inline typename Select::Type argumentAt() const { Q_ASSERT(Index >= 0 && Index < Count); return qdbus_cast::Type>(mReply.value(Index)); } protected: virtual void onFinished() {} private: Q_DISABLE_COPY(MethodInvocationContext) void setReplyValue(int index, const QVariant &value) { if (index >= Count) { return; } mReply.insert(index, value); } QDBusConnection mBus; QDBusMessage mMessage; bool mFinished; QList mReply; QString mErrorName; QString mErrorMessage; }; } // Tp Q_DECLARE_METATYPE(Tp::MethodInvocationContextTypes::Nil) #endif telepathy-qt-0.9.3/TelepathyQt/channel-dispatch-operation-internal.h0000644000175200001440000000317212000056607030051 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_channel_dispatch_operation_internal_h_HEADER_GUARD_ #define _TelepathyQt_channel_dispatch_operation_internal_h_HEADER_GUARD_ #include #include namespace Tp { class TP_QT_NO_EXPORT ChannelDispatchOperation::PendingClaim : public PendingOperation { Q_OBJECT public: PendingClaim(const ChannelDispatchOperationPtr &op, const AbstractClientHandlerPtr &handler = AbstractClientHandlerPtr()); ~PendingClaim(); private Q_SLOTS: TP_QT_NO_EXPORT void onClaimFinished(Tp::PendingOperation *op); private: ChannelDispatchOperationPtr mDispatchOp; AbstractClientHandlerPtr mHandler; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/dbus-introspectable.xml0000644000175200001440000000056612000056607025362 0ustar00collabora-develusers00000000000000 D-Bus introspectable object telepathy-qt-0.9.3/TelepathyQt/PendingReady0000644000175200001440000000036312000056607023156 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_PendingReady_HEADER_GUARD_ #define _TelepathyQt_PendingReady_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/channel-dispatch-operation.cpp0000644000175200001440000006040512000056607026574 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/channel-dispatch-operation-internal.h" #include "TelepathyQt/_gen/cli-channel-dispatch-operation-body.hpp" #include "TelepathyQt/_gen/cli-channel-dispatch-operation.moc.hpp" #include "TelepathyQt/_gen/channel-dispatch-operation.moc.hpp" #include "TelepathyQt/_gen/channel-dispatch-operation-internal.moc.hpp" #include "TelepathyQt/debug-internal.h" #include "TelepathyQt/fake-handler-manager-internal.h" #include #include #include #include #include #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT ChannelDispatchOperation::Private { Private(ChannelDispatchOperation *parent); ~Private(); static void introspectMain(Private *self); void extractMainProps(const QVariantMap &props, bool immutableProperties); // Public object ChannelDispatchOperation *parent; // Context AccountFactoryConstPtr accFactory; ConnectionFactoryConstPtr connFactory; ChannelFactoryConstPtr chanFactory; ContactFactoryConstPtr contactFactory; // Instance of generated interface class Client::ChannelDispatchOperationInterface *baseInterface; // Mandatory properties interface proxy Client::DBus::PropertiesInterface *properties; ReadinessHelper *readinessHelper; // Introspection QVariantMap immutableProperties; ConnectionPtr connection; AccountPtr account; QList channels; QStringList possibleHandlers; bool gotPossibleHandlers; }; ChannelDispatchOperation::Private::Private(ChannelDispatchOperation *parent) : parent(parent), baseInterface(new Client::ChannelDispatchOperationInterface(parent)), properties(parent->interface()), readinessHelper(parent->readinessHelper()), gotPossibleHandlers(false) { debug() << "Creating new ChannelDispatchOperation:" << parent->objectPath(); parent->connect(baseInterface, SIGNAL(Finished()), SLOT(onFinished())); parent->connect(baseInterface, SIGNAL(ChannelLost(QDBusObjectPath,QString,QString)), SLOT(onChannelLost(QDBusObjectPath,QString,QString))); ReadinessHelper::Introspectables introspectables; // As ChannelDispatchOperation does not have predefined statuses let's simulate one (0) ReadinessHelper::Introspectable introspectableCore( QSet() << 0, // makesSenseForStatuses Features(), // dependsOnFeatures QStringList(), // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::introspectMain, this); introspectables[FeatureCore] = introspectableCore; readinessHelper->addIntrospectables(introspectables); } ChannelDispatchOperation::Private::~Private() { } void ChannelDispatchOperation::Private::introspectMain(ChannelDispatchOperation::Private *self) { QVariantMap mainProps; foreach (QString key, self->immutableProperties.keys()) { if (key.startsWith(TP_QT_IFACE_CHANNEL_DISPATCH_OPERATION + QLatin1String("."))) { QVariant value = self->immutableProperties.value(key); mainProps.insert( key.remove(TP_QT_IFACE_CHANNEL_DISPATCH_OPERATION + QLatin1String(".")), value); } } if (!self->channels.isEmpty() && mainProps.contains(QLatin1String("Account")) && mainProps.contains(QLatin1String("Connection")) && mainProps.contains(QLatin1String("Interfaces")) && mainProps.contains(QLatin1String("PossibleHandlers"))) { debug() << "Supplied properties were sufficient, not introspecting" << self->parent->objectPath(); self->extractMainProps(mainProps, true); return; } debug() << "Calling Properties::GetAll(ChannelDispatchOperation)"; QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( self->properties->GetAll(TP_QT_IFACE_CHANNEL_DISPATCH_OPERATION), self->parent); self->parent->connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(gotMainProperties(QDBusPendingCallWatcher*))); } void ChannelDispatchOperation::Private::extractMainProps(const QVariantMap &props, bool immutableProperties) { parent->setInterfaces(qdbus_cast(props.value(QLatin1String("Interfaces")))); QList readyOps; if (!connection && props.contains(QLatin1String("Connection"))) { QDBusObjectPath connectionObjectPath = qdbus_cast(props.value(QLatin1String("Connection"))); QString connectionBusName = connectionObjectPath.path().mid(1).replace(QLatin1String("/"), QLatin1String(".")); PendingReady *readyOp = connFactory->proxy(connectionBusName, connectionObjectPath.path(), chanFactory, contactFactory); connection = ConnectionPtr::qObjectCast(readyOp->proxy()); readyOps.append(readyOp); } if (!account && props.contains(QLatin1String("Account"))) { QDBusObjectPath accountObjectPath = qdbus_cast(props.value(QLatin1String("Account"))); PendingReady *readyOp = accFactory->proxy(TP_QT_ACCOUNT_MANAGER_BUS_NAME, accountObjectPath.path(), connFactory, chanFactory, contactFactory); account = AccountPtr::qObjectCast(readyOp->proxy()); readyOps.append(readyOp); } if (!immutableProperties) { // If we're here, it means we had to introspect the object, and now for sure have the // correct channels list, so let's overwrite the initial channels - but keep the refs around // for a while as an optimization enabling the factory to still return the same ones instead // of constructing everything anew. Note that this is not done at all in the case the // immutable props and initial channels etc were sufficient. QList saveChannels = channels; channels.clear(); ChannelDetailsList channelDetailsList = qdbus_cast(props.value(QLatin1String("Channels"))); ChannelPtr channel; foreach (const ChannelDetails &channelDetails, channelDetailsList) { PendingReady *readyOp = chanFactory->proxy(connection, channelDetails.channel.path(), channelDetails.properties); channels.append(ChannelPtr::qObjectCast(readyOp->proxy())); readyOps.append(readyOp); } // saveChannels goes out of scope now, so any initial channels which don't exist anymore are // freed } if (props.contains(QLatin1String("PossibleHandlers"))) { possibleHandlers = qdbus_cast(props.value(QLatin1String("PossibleHandlers"))); gotPossibleHandlers = true; } if (readyOps.isEmpty()) { debug() << "No proxies to prepare for CDO" << parent->objectPath(); readinessHelper->setIntrospectCompleted(FeatureCore, true); } else { parent->connect(new PendingComposite(readyOps, ChannelDispatchOperationPtr(parent)), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onProxiesPrepared(Tp::PendingOperation*))); } } ChannelDispatchOperation::PendingClaim::PendingClaim(const ChannelDispatchOperationPtr &op, const AbstractClientHandlerPtr &handler) : PendingOperation(op), mDispatchOp(op), mHandler(handler) { debug() << "Invoking CDO.Claim"; connect(new PendingVoid(op->baseInterface()->Claim(), op), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onClaimFinished(Tp::PendingOperation*))); } ChannelDispatchOperation::PendingClaim::~PendingClaim() { } void ChannelDispatchOperation::PendingClaim::onClaimFinished( PendingOperation *op) { if (!op->isError()) { debug() << "CDO.Claim returned successfully, updating HandledChannels"; if (mHandler) { // register the channels in HandledChannels FakeHandlerManager::instance()->registerChannels( mDispatchOp->channels()); } setFinished(); } else { warning() << "CDO.Claim failed with" << op->errorName() << "-" << op->errorMessage(); setFinishedWithError(op->errorName(), op->errorMessage()); } } /** * \class ChannelDispatchOperation * \ingroup clientchanneldispatchoperation * \headerfile TelepathyQt/channel-dispatch-operation.h * * \brief The ChannelDispatchOperation class represents a Telepathy channel * dispatch operation. * * One of the channel dispatcher's functions is to offer incoming channels to * Approver clients for approval. An approver should generally ask the user * whether they want to participate in the requested communication channels * (join the chat or chatroom, answer the call, accept the file transfer, or * whatever is appropriate). A collection of channels offered in this way * is represented by a ChannelDispatchOperation object. * * If the user wishes to accept the communication channels, the approver * should call handleWith() to indicate the user's or approver's preferred * handler for the channels (the empty string indicates no particular * preference, and will cause any suitable handler to be used). * * If the user wishes to reject the communication channels, or if the user * accepts the channels and the approver will handle them itself, the approver * should call claim(). If the resulting PendingOperation succeeds, the approver * immediately has control over the channels as their primary handler, * and may do anything with them (in particular, it may close them in whatever * way seems most appropriate). * * There are various situations in which the channel dispatch operation will * be closed, causing the DBusProxy::invalidated() signal to be emitted. If this * happens, the approver should stop prompting the user. * * Because all approvers are launched simultaneously, the user might respond * to another approver; if this happens, the invalidated signal will be * emitted with the error code #TP_QT_ERROR_OBJECT_REMOVED. * * If a channel closes, the signal channelLost() is emitted. If all channels * close, there is nothing more to dispatch, so the invalidated signal will be * emitted with the error code #TP_QT_ERROR_OBJECT_REMOVED. * * If the channel dispatcher crashes or exits, the invalidated * signal will be emitted with the error code * #TP_QT_DBUS_ERROR_NAME_HAS_NO_OWNER. In a high-quality implementation, * the dispatcher should be restarted, at which point it will create new * channel dispatch operations for any undispatched channels, and the approver * will be notified again. */ /** * Feature representing the core that needs to become ready to make the * ChannelDispatchOperation object usable. * * Note that this feature must be enabled in order to use most * ChannelDispatchOperation methods. * * When calling isReady(), becomeReady(), this feature is implicitly added * to the requested features. */ const Feature ChannelDispatchOperation::FeatureCore = Feature(QLatin1String(ChannelDispatchOperation::staticMetaObject.className()), 0, true); /** * Create a new channel dispatch operation object using the given \a bus, the given factories and * the given initial channels. * * \param bus QDBusConnection to use. * \param objectPath The channel dispatch operation object path. * \param immutableProperties The channel dispatch operation immutable properties. * \param initialChannels The channels this CDO has initially (further tracking is done internally). * \param accountFactory The account factory to use. * \param connectionFactory The connection factory to use. * \param channelFactory The channel factory to use. * \param contactFactory The contact factory to use. * \return A ChannelDispatchOperationPtr object pointing to the newly created * ChannelDispatchOperation object. */ ChannelDispatchOperationPtr ChannelDispatchOperation::create(const QDBusConnection &bus, const QString &objectPath, const QVariantMap &immutableProperties, const QList &initialChannels, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory) { return ChannelDispatchOperationPtr(new ChannelDispatchOperation( bus, objectPath, immutableProperties, initialChannels, accountFactory, connectionFactory, channelFactory, contactFactory)); } /** * Construct a new channel dispatch operation object using the given \a bus, the given factories and * the given initial channels. * * \param bus QDBusConnection to use * \param objectPath The channel dispatch operation object path. * \param immutableProperties The channel dispatch operation immutable properties. * \param initialChannels The channels this CDO has initially (further tracking is done internally). * \param accountFactory The account factory to use. * \param connectionFactory The connection factory to use. * \param channelFactory The channel factory to use. * \param contactFactory The contact factory to use. */ ChannelDispatchOperation::ChannelDispatchOperation(const QDBusConnection &bus, const QString &objectPath, const QVariantMap &immutableProperties, const QList &initialChannels, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory) : StatefulDBusProxy(bus, TP_QT_IFACE_CHANNEL_DISPATCHER, objectPath, FeatureCore), OptionalInterfaceFactory(this), mPriv(new Private(this)) { if (accountFactory->dbusConnection().name() != bus.name()) { warning() << " The D-Bus connection in the account factory is not the proxy connection"; } if (connectionFactory->dbusConnection().name() != bus.name()) { warning() << " The D-Bus connection in the connection factory is not the proxy connection"; } if (channelFactory->dbusConnection().name() != bus.name()) { warning() << " The D-Bus connection in the channel factory is not the proxy connection"; } mPriv->channels = initialChannels; mPriv->accFactory = accountFactory; mPriv->connFactory = connectionFactory; mPriv->chanFactory = channelFactory; mPriv->contactFactory = contactFactory; mPriv->immutableProperties = immutableProperties; } /** * Class destructor. */ ChannelDispatchOperation::~ChannelDispatchOperation() { delete mPriv; } /** * Return the connection with which the channels for this dispatch * operation are associated. * * This method requires ChannelDispatchOperation::FeatureCore to be ready. * * \return A pointer to the Connection object. */ ConnectionPtr ChannelDispatchOperation::connection() const { return mPriv->connection; } /** * Return the account with which the connection and channels for this dispatch * operation are associated. * * This method requires ChannelDispatchOperation::FeatureCore to be ready. * * \return A pointer to the Account object. */ AccountPtr ChannelDispatchOperation::account() const { return mPriv->account; } /** * Return the channels to be dispatched. * * This method requires ChannelDispatchOperation::FeatureCore to be ready. * * \return A list of pointers to Channel objects. */ QList ChannelDispatchOperation::channels() const { if (!isReady()) { warning() << "ChannelDispatchOperation::channels called with channel " "not ready"; } return mPriv->channels; } /** * Return the well known bus names (starting with * org.freedesktop.Telepathy.Client.) of the possible Handlers for this * dispatch operation channels with the preferred handlers first. * * As a result, approvers should use the first handler by default, unless they * have a reason to do otherwise. * * This method requires ChannelDispatchOperation::FeatureCore to be ready. * * \return List of possible handlers names. */ QStringList ChannelDispatchOperation::possibleHandlers() const { return mPriv->possibleHandlers; } /** * Called by an approver to accept a channel bundle and request that the given * handler be used to handle it. * * If successful, this method will cause the ChannelDispatchOperation object to * disappear, emitting invalidated with error * #TP_QT_ERROR_OBJECT_REMOVED. * * However, this method may fail because the dispatch has already been completed * and the object has already gone. If this occurs, it indicates that another * approver has asked for the bundle to be handled by a particular handler. The * approver must not attempt to interact with the channels further in this case, * unless it is separately invoked as the handler. * * Approvers which are also channel handlers should use claim() instead of * this method to request that they can handle a channel bundle themselves. * * \param handler The well-known bus name (starting with * org.freedesktop.Telepathy.Client.) of the channel handler that * should handle the channel, or an empty string if * the client has no preferred channel handler. * \return A PendingOperation which will emit PendingOperation::finished * when the call has finished. */ PendingOperation *ChannelDispatchOperation::handleWith(const QString &handler) { return new PendingVoid( mPriv->baseInterface->HandleWith(handler), ChannelDispatchOperationPtr(this)); } /** * Called by an approver to claim channels for closing them. * * \return A PendingOperation which will emit PendingOperation::finished * when the call has finished. */ PendingOperation *ChannelDispatchOperation::claim() { return new PendingClaim(ChannelDispatchOperationPtr(this)); } /** * Called by an approver to claim channels for handling internally. If this * method is called successfully, the \a handler becomes the * handler for the channel, but does not have the * AbstractClientHandler::handleChannels() method called on it. * * Approvers wishing to reject channels must call this method to claim ownership * of them, and must not call requestClose() on the channels unless/until this * method returns successfully. * * The channel dispatcher can't know how best to close arbitrary channel types, * so it leaves it up to the approver to do so. For instance, for text channels * it is necessary to acknowledge any messages that have already been displayed * to the user first - ideally, the approver would display and then acknowledge * the messages - or to call Channel::requestClose() if the destructive * behaviour of that method is desired. * * Similarly, an approver for streamed media channels can close the channel with * a reason (e.g. "busy") if desired. The channel dispatcher, which is designed * to have no specific knowledge of particular channel types, can't do that. * * If successful, this method will cause the ChannelDispatchOperation object to * disappear, emitting Finished, in the same way as for handleWith(). * * This method may fail because the dispatch operation has already been * completed. Again, see handleWith() for more details. The approver must not * attempt to interact with the channels further in this case. * * \param handler The channel handler, that should remain registered during the * lifetime of channels(), otherwise dispatching will fail if the * channel dispatcher restarts. * \return A PendingOperation which will emit PendingOperation::finished * when the call has finished. * \sa claim(), handleWith() */ PendingOperation *ChannelDispatchOperation::claim(const AbstractClientHandlerPtr &handler) { if (!handler->isRegistered()) { return new PendingFailure(TP_QT_ERROR_INVALID_ARGUMENT, QLatin1String("Handler must be registered for using claim(handler)"), ChannelDispatchOperationPtr(this)); } return new PendingClaim(ChannelDispatchOperationPtr(this), handler); } /** * \fn void ChannelDispatchOperation::channelLost(const ChannelPtr &channel, * const QString &errorName, const QString &errorMessage); * * Emitted when a channel has closed before it could be claimed or handled. If this is * emitted for the last remaining channel in a channel dispatch operation, it * will immediately be followed by invalidated() with error * #TP_QT_ERROR_OBJECT_REMOVED. * * \param channel The channel that was closed. * \param error The name of a D-Bus error indicating why the channel closed. * \param errorMessage The error message. */ /** * Return the ChannelDispatchOperationInterface for this ChannelDispatchOperation * class. This method is protected since the convenience methods provided by * this class should always be used instead of the interface by users of the * class. * * \return A pointer to the existing Client::ChannelDispatchOperationInterface object for this * ChannelDispatchOperation object. */ Client::ChannelDispatchOperationInterface *ChannelDispatchOperation::baseInterface() const { return mPriv->baseInterface; } void ChannelDispatchOperation::onFinished() { debug() << "ChannelDispatchOperation finished and was removed"; invalidate(TP_QT_ERROR_OBJECT_REMOVED, QLatin1String("ChannelDispatchOperation finished and was removed")); } void ChannelDispatchOperation::gotMainProperties(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; // Watcher is NULL if we didn't have to introspect at all if (!reply.isError()) { debug() << "Got reply to Properties::GetAll(ChannelDispatchOperation)"; mPriv->extractMainProps(reply.value(), false); } else { mPriv->readinessHelper->setIntrospectCompleted(FeatureCore, false, reply.error()); warning().nospace() << "Properties::GetAll(ChannelDispatchOperation) failed with " << reply.error().name() << ": " << reply.error().message(); } } void ChannelDispatchOperation::onChannelLost( const QDBusObjectPath &channelObjectPath, const QString &errorName, const QString &errorMessage) { foreach (const ChannelPtr &channel, mPriv->channels) { if (channel->objectPath() == channelObjectPath.path()) { emit channelLost(channel, errorName, errorMessage); mPriv->channels.removeOne(channel); return; } } } void ChannelDispatchOperation::onProxiesPrepared(Tp::PendingOperation *op) { if (op->isError()) { warning() << "Preparing proxies for CDO" << objectPath() << "failed with" << op->errorName() << ":" << op->errorMessage(); mPriv->readinessHelper->setIntrospectCompleted(FeatureCore, false); } else { mPriv->readinessHelper->setIntrospectCompleted(FeatureCore, true); } } } // Tp telepathy-qt-0.9.3/TelepathyQt/message-content-part.h0000644000175200001440000000515112000056607025073 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_message_content_part_h_HEADER_GUARD_ #define _TelepathyQt_message_content_part_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include namespace Tp { class TP_QT_EXPORT MessageContentPart { public: MessageContentPart(); MessageContentPart(const MessagePart &mp); MessageContentPart(const MessageContentPart &other); ~MessageContentPart(); bool isValid() const { return mPriv.constData() != 0; } MessageContentPart &operator=(const MessageContentPart &other); bool operator==(const MessageContentPart &other) const; MessagePart barePart() const; private: struct Private; friend struct Private; QSharedDataPointer mPriv; }; class TP_QT_EXPORT MessageContentPartList : public QList { public: MessageContentPartList() { } MessageContentPartList(const MessagePart &mp) { append(MessageContentPart(mp)); } MessageContentPartList(const MessagePartList &mps) { Q_FOREACH (const MessagePart &mp, mps) { append(MessageContentPart(mp)); } } MessageContentPartList(const MessageContentPart &mcp) { append(mcp); } MessageContentPartList(const QList &other) : QList(other) { } MessagePartList bareParts() const { MessagePartList list; Q_FOREACH (const MessageContentPart &mcp, *this) { list.append(mcp.barePart()); } return list; } }; } // Tp Q_DECLARE_METATYPE(Tp::MessageContentPart); Q_DECLARE_METATYPE(Tp::MessageContentPartList); #endif telepathy-qt-0.9.3/TelepathyQt/StreamTubeClient0000644000175200001440000000040012000056607024007 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_StreamTubeClient_HEADER_GUARD_ #define _TelepathyQt_StreamTubeClient_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/pending-contacts.cpp0000644000175200001440000005740512000056607024637 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2011 Collabora Ltd. * @copyright Copyright (C) 2008-2011 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/pending-contacts-internal.h" #include "TelepathyQt/_gen/pending-contacts.moc.hpp" #include "TelepathyQt/_gen/pending-contacts-internal.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include #include #include #include // FIXME: Refactor PendingContacts code to make it more readable/maintainable and reuse common code // when appropriate. namespace Tp { struct TP_QT_NO_EXPORT PendingContacts::Private { Private(PendingContacts *parent, const ContactManagerPtr &manager, const UIntList &handles, const Features &features, const Features &missingFeatures, const QMap &satisfyingContacts) : parent(parent), manager(manager), features(features), missingFeatures(missingFeatures), satisfyingContacts(satisfyingContacts), requestType(PendingContacts::ForHandles), handles(handles), nested(0) { } Private(PendingContacts *parent, const ContactManagerPtr &manager, const QStringList &list, PendingContacts::RequestType type, const Features &features) : parent(parent), manager(manager), features(features), missingFeatures(features), requestType(type), addresses(list), nested(0) { if (type != PendingContacts::ForIdentifiers && type != PendingContacts::ForUris) { Q_ASSERT(false); } } Private(PendingContacts *parent, const ContactManagerPtr &manager, const QString &vcardField, const QStringList &vcardAddresses, const Features &features) : parent(parent), manager(manager), features(features), missingFeatures(features), requestType(PendingContacts::ForVCardAddresses), addresses(vcardAddresses), vcardField(vcardField), nested(0) { } Private(PendingContacts *parent, const ContactManagerPtr &manager, const QList &contactsToUpgrade, const Features &features) : parent(parent), manager(manager), features(features), requestType(PendingContacts::Upgrade), contactsToUpgrade(contactsToUpgrade), nested(0) { } void setFinished(); bool checkRequestTypeAndState(const char *methodName, const char *debug, RequestType type); // Public object PendingContacts *parent; // Generic parameters ContactManagerPtr manager; Features features; Features missingFeatures; QMap satisfyingContacts; // Request type specific parameters RequestType requestType; UIntList handles; QStringList addresses; QString vcardField; QList contactsToUpgrade; PendingContacts *nested; // Results QList contacts; UIntList invalidHandles; QStringList validIds; QHash > invalidIds; QStringList validAddresses; QStringList invalidAddresses; ReferencedHandles handlesToInspect; }; void PendingContacts::Private::setFinished() { ConnectionLowlevelPtr connLowlevel = manager->connection()->lowlevel(); UIntList handles = invalidHandles; foreach (uint handle, handles) { if (connLowlevel->hasContactId(handle)) { satisfyingContacts.insert(handle, manager->ensureContact(handle, connLowlevel->contactId(handle), missingFeatures)); invalidHandles.removeOne(handle); } } parent->setFinished(); } bool PendingContacts::Private::checkRequestTypeAndState(const char *methodName, const char *debug, RequestType type) { if (!parent->isFinished()) { warning().nospace() << "PendingContacts::" << methodName << "() called before finished"; return false; } else if (parent->isError()) { warning().nospace() << "PendingContacts::" << methodName << "() called when errored"; return false; } else if (requestType != type) { warning().nospace() << "PendingContacts::" << methodName << "() called for" << this << "which is not for " << debug; return false; } return true; } /** * \class PendingContacts * \ingroup clientconn * \headerfile TelepathyQt/pending-contacts.h * * \brief The PendingContacts class is used by ContactManager when * creating/updating Contact objects. * * See \ref async_model */ PendingContacts::PendingContacts(const ContactManagerPtr &manager, const UIntList &handles, const Features &features, const Features &missingFeatures, const QStringList &interfaces, const QMap &satisfyingContacts, const QSet &otherContacts, const QString &errorName, const QString &errorMessage) : PendingOperation(manager->connection()), mPriv(new Private(this, manager, handles, features, missingFeatures, satisfyingContacts)) { if (!errorName.isEmpty()) { setFinishedWithError(errorName, errorMessage); return; } if (!otherContacts.isEmpty()) { ConnectionPtr conn = manager->connection(); if (conn->interfaces().contains(TP_QT_IFACE_CONNECTION_INTERFACE_CONTACTS)) { PendingContactAttributes *attributes = conn->lowlevel()->contactAttributes(otherContacts.toList(), interfaces, true); connect(attributes, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onAttributesFinished(Tp::PendingOperation*))); } else { // fallback to just create the contacts PendingHandles *handles = conn->lowlevel()->referenceHandles(HandleTypeContact, otherContacts.toList()); connect(handles, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onReferenceHandlesFinished(Tp::PendingOperation*))); } } else { allAttributesFetched(); } } PendingContacts::PendingContacts(const ContactManagerPtr &manager, const QStringList &list, RequestType type, const Features &features, const QStringList &interfaces, const QString &errorName, const QString &errorMessage) : PendingOperation(manager->connection()), mPriv(new Private(this, manager, list, type, features)) { if (!errorName.isEmpty()) { setFinishedWithError(errorName, errorMessage); return; } ConnectionPtr conn = manager->connection(); if (type == ForIdentifiers) { Q_ASSERT(interfaces.isEmpty()); PendingHandles *handles = conn->lowlevel()->requestHandles(HandleTypeContact, list); connect(handles, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onRequestHandlesFinished(Tp::PendingOperation*))); } else if (type == ForUris) { Client::ConnectionInterfaceAddressingInterface *connAddressingIface = conn->optionalInterface( OptionalInterfaceFactory::CheckInterfaceSupported); if (!connAddressingIface) { setFinishedWithError(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Connection does not support Addressing interface")); return; } PendingAddressingGetContacts *pa = new PendingAddressingGetContacts(conn, list, interfaces); connect(pa, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onAddressingGetContactsFinished(Tp::PendingOperation*))); } } PendingContacts::PendingContacts(const ContactManagerPtr &manager, const QString &vcardField, const QStringList &vcardAddresses, const Features &features, const QStringList &interfaces, const QString &errorName, const QString &errorMessage) : PendingOperation(manager->connection()), mPriv(new Private(this, manager, vcardField, vcardAddresses, features)) { if (!errorName.isEmpty()) { setFinishedWithError(errorName, errorMessage); return; } ConnectionPtr conn = manager->connection(); Client::ConnectionInterfaceAddressingInterface *connAddressingIface = conn->optionalInterface( OptionalInterfaceFactory::CheckInterfaceSupported); if (!connAddressingIface) { setFinishedWithError(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Connection does not support Addressing interface")); return; } PendingAddressingGetContacts *pa = new PendingAddressingGetContacts(conn, vcardField, vcardAddresses, interfaces); connect(pa, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onAddressingGetContactsFinished(Tp::PendingOperation*))); } PendingContacts::PendingContacts(const ContactManagerPtr &manager, const QList &contacts, const Features &features, const QString &errorName, const QString &errorMessage) : PendingOperation(manager->connection()), mPriv(new Private(this, manager, contacts, features)) { if (!errorName.isEmpty()) { setFinishedWithError(errorName, errorMessage); return; } UIntList handles; foreach (const ContactPtr &contact, contacts) { handles.push_back(contact->handle()[0]); } mPriv->nested = manager->contactsForHandles(handles, features); connect(mPriv->nested, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onNestedFinished(Tp::PendingOperation*))); } /** * Class destructor. */ PendingContacts::~PendingContacts() { delete mPriv; } ContactManagerPtr PendingContacts::manager() const { return mPriv->manager; } Features PendingContacts::features() const { return mPriv->features; } bool PendingContacts::isForHandles() const { return mPriv->requestType == ForHandles; } UIntList PendingContacts::handles() const { if (!isForHandles()) { warning() << "Tried to get handles from" << this << "which is not for handles!"; } return mPriv->handles; } bool PendingContacts::isForIdentifiers() const { return mPriv->requestType == ForIdentifiers; } QStringList PendingContacts::identifiers() const { if (!isForIdentifiers()) { warning() << "Tried to get identifiers from" << this << "which is not for identifiers!"; return QStringList(); } return mPriv->addresses; } bool PendingContacts::isForVCardAddresses() const { return mPriv->requestType == ForVCardAddresses; } QString PendingContacts::vcardField() const { if (!isForVCardAddresses()) { warning() << "Tried to get vcard field from" << this << "which is not for vcard addresses!"; } return mPriv->vcardField; } QStringList PendingContacts::vcardAddresses() const { if (!isForVCardAddresses()) { warning() << "Tried to get vcard addresses from" << this << "which is not for vcard addresses!"; return QStringList(); } return mPriv->addresses; } bool PendingContacts::isForUris() const { return mPriv->requestType == ForUris; } QStringList PendingContacts::uris() const { if (!isForUris()) { warning() << "Tried to get uris from" << this << "which is not for uris!"; return QStringList(); } return mPriv->addresses; } bool PendingContacts::isUpgrade() const { return mPriv->requestType == Upgrade; } QList PendingContacts::contactsToUpgrade() const { if (!isUpgrade()) { warning() << "Tried to get contacts to upgrade from" << this << "which is not an upgrade!"; } return mPriv->contactsToUpgrade; } QList PendingContacts::contacts() const { if (!isFinished()) { warning() << "PendingContacts::contacts() called before finished"; } else if (isError()) { warning() << "PendingContacts::contacts() called when errored"; } return mPriv->contacts; } UIntList PendingContacts::invalidHandles() const { if (!mPriv->checkRequestTypeAndState("invalidHandles", "handles", ForHandles)) { return UIntList(); } return mPriv->invalidHandles; } QStringList PendingContacts::validIdentifiers() const { if (!mPriv->checkRequestTypeAndState("validIdentifiers", "IDs", ForIdentifiers)) { return QStringList(); } return mPriv->validIds; } QHash > PendingContacts::invalidIdentifiers() const { if (!mPriv->checkRequestTypeAndState("invalidIdentifiers", "IDs", ForIdentifiers)) { return QHash >(); } return mPriv->invalidIds; } QStringList PendingContacts::validVCardAddresses() const { if (!mPriv->checkRequestTypeAndState("validVCardAddresses", "vcard addresses", ForVCardAddresses)) { return QStringList(); } return mPriv->validAddresses; } QStringList PendingContacts::invalidVCardAddresses() const { if (!mPriv->checkRequestTypeAndState("invalidVCardAddresses", "vcard addresses", ForVCardAddresses)) { return QStringList(); } return mPriv->invalidAddresses; } QStringList PendingContacts::validUris() const { if (!mPriv->checkRequestTypeAndState("validUris", "URIS", ForUris)) { return QStringList(); } return mPriv->validAddresses; } QStringList PendingContacts::invalidUris() const { if (!mPriv->checkRequestTypeAndState("invalidUris", "URIS", ForUris)) { return QStringList(); } return mPriv->invalidAddresses; } void PendingContacts::onAttributesFinished(PendingOperation *operation) { PendingContactAttributes *pendingAttributes = qobject_cast(operation); if (pendingAttributes->isError()) { debug() << "PendingAttrs error" << pendingAttributes->errorName() << "message" << pendingAttributes->errorMessage(); setFinishedWithError(pendingAttributes->errorName(), pendingAttributes->errorMessage()); return; } ReferencedHandles validHandles = pendingAttributes->validHandles(); ContactAttributesMap attributes = pendingAttributes->attributes(); foreach (uint handle, mPriv->handles) { if (!mPriv->satisfyingContacts.contains(handle)) { int indexInValid = validHandles.indexOf(handle); if (indexInValid >= 0) { ReferencedHandles referencedHandle = validHandles.mid(indexInValid, 1); QVariantMap handleAttributes = attributes[handle]; mPriv->satisfyingContacts.insert(handle, manager()->ensureContact(referencedHandle, mPriv->missingFeatures, handleAttributes)); } else { mPriv->invalidHandles.push_back(handle); } } } allAttributesFetched(); } void PendingContacts::onRequestHandlesFinished(PendingOperation *operation) { PendingHandles *pendingHandles = qobject_cast(operation); mPriv->validIds = pendingHandles->validNames(); mPriv->invalidIds = pendingHandles->invalidNames(); if (pendingHandles->isError()) { debug() << "RequestHandles error" << operation->errorName() << "message" << operation->errorMessage(); setFinishedWithError(operation->errorName(), operation->errorMessage()); return; } mPriv->nested = manager()->contactsForHandles(pendingHandles->handles(), features()); connect(mPriv->nested, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onNestedFinished(Tp::PendingOperation*))); } void PendingContacts::onAddressingGetContactsFinished(PendingOperation *operation) { PendingAddressingGetContacts *pa = qobject_cast(operation); Q_ASSERT(pa->isForUris() || pa->isForVCardAddresses()); mPriv->validAddresses = pa->validAddresses(); mPriv->invalidAddresses = pa->invalidAddresses(); if (pa->isError()) { setFinishedWithError(operation->errorName(), operation->errorMessage()); return; } ConnectionPtr conn = mPriv->manager->connection(); ContactAttributesMap attributes = pa->attributes(); UIntList handles = attributes.keys(); ReferencedHandles referencedHandles(conn, HandleTypeContact, handles); foreach (uint handle, handles) { int indexInValid = referencedHandles.indexOf(handle); Q_ASSERT(indexInValid >= 0); ReferencedHandles referencedHandle = referencedHandles.mid(indexInValid, 1); QVariantMap handleAttributes = attributes[handle]; ContactPtr contact = mPriv->manager->ensureContact(referencedHandle, mPriv->missingFeatures, handleAttributes); mPriv->contacts.push_back(contact); } setFinished(); } void PendingContacts::onReferenceHandlesFinished(PendingOperation *operation) { PendingHandles *pendingHandles = qobject_cast(operation); if (pendingHandles->isError()) { debug() << "ReferenceHandles error" << operation->errorName() << "message" << operation->errorMessage(); setFinishedWithError(operation->errorName(), operation->errorMessage()); return; } ReferencedHandles validHandles = pendingHandles->handles(); UIntList invalidHandles = pendingHandles->invalidHandles(); ConnectionPtr conn = mPriv->manager->connection(); mPriv->handlesToInspect = ReferencedHandles(conn, HandleTypeContact, UIntList()); foreach (uint handle, mPriv->handles) { if (!mPriv->satisfyingContacts.contains(handle)) { int indexInValid = validHandles.indexOf(handle); if (indexInValid >= 0) { ReferencedHandles referencedHandle = validHandles.mid(indexInValid, 1); mPriv->handlesToInspect.append(referencedHandle); } else { mPriv->invalidHandles.push_back(handle); } } } QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( conn->baseInterface()->InspectHandles(HandleTypeContact, mPriv->handlesToInspect.toList()), this); connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(onInspectHandlesFinished(QDBusPendingCallWatcher*))); } void PendingContacts::onNestedFinished(PendingOperation *operation) { Q_ASSERT(operation == mPriv->nested); if (operation->isError()) { debug() << " error" << operation->errorName() << "message" << operation->errorMessage(); setFinishedWithError(operation->errorName(), operation->errorMessage()); return; } mPriv->contacts = mPriv->nested->contacts(); mPriv->nested = 0; mPriv->setFinished(); } void PendingContacts::onInspectHandlesFinished(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (reply.isError()) { debug().nospace() << "InspectHandles: error " << reply.error().name() << ": " << reply.error().message(); setFinishedWithError(reply.error()); return; } QStringList names = reply.value(); int i = 0; ConnectionPtr conn = mPriv->manager->connection(); foreach (uint handle, mPriv->handlesToInspect) { QVariantMap handleAttributes; handleAttributes.insert(TP_QT_IFACE_CONNECTION + QLatin1String("/contact-id"), names[i++]); ReferencedHandles referencedHandle(conn, HandleTypeContact, UIntList() << handle); mPriv->satisfyingContacts.insert(handle, manager()->ensureContact(referencedHandle, mPriv->missingFeatures, handleAttributes)); } allAttributesFetched(); watcher->deleteLater(); } void PendingContacts::allAttributesFetched() { foreach (uint handle, mPriv->handles) { if (mPriv->satisfyingContacts.contains(handle)) { mPriv->contacts.push_back(mPriv->satisfyingContacts[handle]); } } mPriv->setFinished(); } PendingAddressingGetContacts::PendingAddressingGetContacts(const ConnectionPtr &connection, const QString &vcardField, const QStringList &vcardAddresses, const QStringList &interfaces) : PendingOperation(connection), mConnection(connection), mRequestType(ForVCardAddresses), mVCardField(vcardField), mAddresses(vcardAddresses) { // no check for the interface here again, we expect this interface to be used only when // Conn.I.Addressing is available Client::ConnectionInterfaceAddressingInterface *connAddressingIface = connection->optionalInterface( OptionalInterfaceFactory::BypassInterfaceCheck); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( connAddressingIface->GetContactsByVCardField(vcardField, vcardAddresses, interfaces)); connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(onGetContactsFinished(QDBusPendingCallWatcher*))); } PendingAddressingGetContacts::PendingAddressingGetContacts(const ConnectionPtr &connection, const QStringList &uris, const QStringList &interfaces) : PendingOperation(connection), mConnection(connection), mRequestType(ForUris), mAddresses(uris) { // no check for the interface here again, we expect this interface to be used only when // Conn.I.Addressing is available Client::ConnectionInterfaceAddressingInterface *connAddressingIface = connection->optionalInterface( OptionalInterfaceFactory::BypassInterfaceCheck); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( connAddressingIface->GetContactsByURI(uris, interfaces)); connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), SLOT(onGetContactsFinished(QDBusPendingCallWatcher*))); } PendingAddressingGetContacts::~PendingAddressingGetContacts() { } void PendingAddressingGetContacts::onGetContactsFinished(QDBusPendingCallWatcher* watcher) { QDBusPendingReply reply = *watcher; if (!reply.isError()) { AddressingNormalizationMap requested = reply.argumentAt<0>(); mValidHandles = requested.values(); mValidAddresses = requested.keys(); mInvalidAddresses = mAddresses.toSet().subtract(mValidAddresses.toSet()).toList(); mAttributes = reply.argumentAt<1>(); setFinished(); } else { debug().nospace() << "GetContactsBy* failed: " << reply.error().name() << ": " << reply.error().message(); setFinishedWithError(reply.error()); } watcher->deleteLater(); } } // Tp telepathy-qt-0.9.3/TelepathyQt/manager-file.cpp0000644000175200001440000004512612000056607023723 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2010 Collabora Ltd. * @copyright Copyright (C) 2008-2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include "TelepathyQt/manager-file.h" #include "TelepathyQt/debug-internal.h" #include "TelepathyQt/key-file.h" #include #include #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT ManagerFile::Private { Private(); Private(const QString &cnName); void init(); bool parse(const QString &fileName); bool isValid() const; bool hasParameter(const QString &protocol, const QString ¶mName) const; ParamSpec *getParameter(const QString &protocol, const QString ¶mName); QStringList protocols() const; ParamSpecList parameters(const QString &protocol) const; QVariant valueForKey(const QString ¶m, const QString &dbusSignature); struct ProtocolInfo { ProtocolInfo() {} ProtocolInfo(const ParamSpecList ¶ms, const PresenceSpecList &statuses) : params(params), statuses(statuses) { } ParamSpecList params; QString vcardField; QString englishName; QString iconName; RequestableChannelClassList rccs; PresenceSpecList statuses; AvatarSpec avatarRequirements; QStringList addressableVCardFields; QStringList addressableUriSchemes; }; QString cmName; KeyFile keyFile; QHash protocolsMap; bool valid; }; ManagerFile::Private::Private() : valid(false) { } ManagerFile::Private::Private(const QString &cmName) : cmName(cmName), valid(false) { init(); } void ManagerFile::Private::init() { // TODO: should we cache the configDirs anywhere? QStringList configDirs; QString xdgDataHome = QString::fromLocal8Bit(qgetenv("XDG_DATA_HOME")); if (xdgDataHome.isEmpty()) { configDirs << QDir::homePath() + QLatin1String("/.local/share/data/telepathy/managers/"); } else { configDirs << xdgDataHome + QLatin1String("/telepathy/managers/"); } QString xdgDataDirsEnv = QString::fromLocal8Bit(qgetenv("XDG_DATA_DIRS")); if (xdgDataDirsEnv.isEmpty()) { configDirs << QLatin1String("/usr/local/share/telepathy/managers/"); configDirs << QLatin1String("/usr/share/telepathy/managers/"); } else { QStringList xdgDataDirs = xdgDataDirsEnv.split(QLatin1Char(':')); foreach (const QString xdgDataDir, xdgDataDirs) { configDirs << xdgDataDir + QLatin1String("/telepathy/managers/"); } } foreach (const QString configDir, configDirs) { QString fileName = configDir + cmName + QLatin1String(".manager"); if (QFile::exists(fileName)) { debug() << "parsing manager file" << fileName; protocolsMap.clear(); if (!parse(fileName)) { warning() << "error parsing manager file" << fileName; continue; } valid = true; return; } } } bool ManagerFile::Private::parse(const QString &fileName) { keyFile.setFileName(fileName); if (keyFile.status() != KeyFile::NoError) { return false; } /* read supported protocols and parameters */ QString protocol; QStringList groups = keyFile.allGroups(); foreach (const QString group, groups) { if (group.startsWith(QLatin1String("Protocol "))) { protocol = group.right(group.length() - 9); keyFile.setGroup(group); ParamSpecList paramSpecList; SimpleStatusSpecMap statuses; QString param; QStringList params = keyFile.keys(); foreach (param, params) { ParamSpec spec; SimpleStatusSpec status; spec.flags = 0; QStringList values = keyFile.value(param).split(QLatin1String(" ")); if (param.startsWith(QLatin1String("param-"))) { spec.name = param.right(param.length() - 6); if (values.length() == 0) { warning() << "param" << spec.name << "set but no signature defined"; return false; } if (spec.name.endsWith(QLatin1String("password"))) { spec.flags |= ConnMgrParamFlagSecret; } spec.signature = values[0]; if (values.contains(QLatin1String("secret"))) { spec.flags |= ConnMgrParamFlagSecret; } if (values.contains(QLatin1String("dbus-property"))) { spec.flags |= ConnMgrParamFlagDBusProperty; } if (values.contains(QLatin1String("required"))) { spec.flags |= ConnMgrParamFlagRequired; } if (values.contains(QLatin1String("register"))) { spec.flags |= ConnMgrParamFlagRegister; } paramSpecList.append(spec); } else if (param.startsWith(QLatin1String("status-"))) { QString statusName = param.right(param.length() - 7); if (values.length() == 0) { warning() << "status" << statusName << "set but no type defined"; return false; } bool ok; status.type = values[0].toUInt(&ok); if (!ok) { warning() << "status" << statusName << "set but type is not an uint"; return false; } if (values.contains(QLatin1String("settable"))) { status.maySetOnSelf = true; } else { status.maySetOnSelf = false; } if (values.contains(QLatin1String("message"))) { status.canHaveMessage = true; } else { status.canHaveMessage = false; } if (statuses.contains(statusName)) { warning() << "status" << statusName << "defined more than once, " "replacing it"; } statuses.insert(statusName, status); } } protocolsMap.insert(protocol, ProtocolInfo(paramSpecList, PresenceSpecList(statuses))); /* now that we have all param-* created, let's find their default values */ foreach (param, params) { if (param.startsWith(QLatin1String("default-"))) { QString paramName = param.right(param.length() - 8); if (!hasParameter(protocol, paramName)) { warning() << "param" << paramName << "has default value set, but not a definition"; continue; } ParamSpec *spec = getParameter(protocol, paramName); spec->flags |= ConnMgrParamFlagHasDefault; /* map based on the param dbus signature, otherwise use * QString */ QVariant value = valueForKey(param, spec->signature); if (value.type() == QVariant::Invalid) { warning() << "param" << paramName << "has invalid signature"; protocolsMap.clear(); return false; } spec->defaultValue = QDBusVariant(value); } } ProtocolInfo &info = protocolsMap[protocol]; info.vcardField = keyFile.value(QLatin1String("VCardField")); info.englishName = keyFile.value(QLatin1String("EnglishName")); if (info.englishName.isEmpty()) { QStringList words = protocol.split(QLatin1Char('-')); for (int i = 0; i < words.size(); ++i) { words[i][0] = words[i].at(0).toUpper(); } info.englishName = words.join(QLatin1String(" ")); } info.iconName = keyFile.value(QLatin1String("Icon")); if (info.iconName.isEmpty()) { info.iconName = QString(QLatin1String("im-%1")).arg(protocol); } QStringList supportedMimeTypes = keyFile.valueAsStringList( QLatin1String("SupportedAvatarMIMETypes")); uint minHeight = keyFile.value(QLatin1String("MinimumAvatarHeight")).toUInt(); uint maxHeight = keyFile.value(QLatin1String("MaximumAvatarHeight")).toUInt(); uint recommendedHeight = keyFile.value( QLatin1String("RecommendedAvatarHeight")).toUInt(); uint minWidth = keyFile.value(QLatin1String("MinimumAvatarWidth")).toUInt(); uint maxWidth = keyFile.value(QLatin1String("MaximumAvatarWidth")).toUInt(); uint recommendedWidth = keyFile.value( QLatin1String("RecommendedAvatarWidth")).toUInt(); uint maxBytes = keyFile.value(QLatin1String("MaximumAvatarBytes")).toUInt(); info.avatarRequirements = AvatarSpec(supportedMimeTypes, minHeight, maxHeight, recommendedHeight, minWidth, maxWidth, recommendedWidth, maxBytes); info.addressableVCardFields = keyFile.valueAsStringList( QLatin1String("AddressableVCardFields")); info.addressableUriSchemes = keyFile.valueAsStringList( QLatin1String("AddressableURISchemes")); QStringList rccGroups = keyFile.valueAsStringList( QLatin1String("RequestableChannelClasses")); RequestableChannelClass rcc; foreach (const QString &rccGroup, rccGroups) { keyFile.setGroup(rccGroup); foreach (const QString &key, keyFile.keys()) { int spaceIdx = key.indexOf(QLatin1String(" ")); if (spaceIdx == -1) { continue; } QString propertyName = key.mid(0, spaceIdx); QString signature = key.mid(spaceIdx + 1); QString param = keyFile.value(key); QVariant value = valueForKey(key, signature); rcc.fixedProperties.insert(propertyName, value); } rcc.allowedProperties = keyFile.valueAsStringList( QLatin1String("allowed")); info.rccs.append(rcc); rcc.fixedProperties.clear(); rcc.allowedProperties.clear(); } } } return true; } bool ManagerFile::Private::isValid() const { return ((keyFile.status() == KeyFile::NoError) && (valid)); } bool ManagerFile::Private::hasParameter(const QString &protocol, const QString ¶mName) const { ParamSpecList paramSpecList = protocolsMap[protocol].params; foreach (const ParamSpec ¶mSpec, paramSpecList) { if (paramSpec.name == paramName) { return true; } } return false; } ParamSpec *ManagerFile::Private::getParameter(const QString &protocol, const QString ¶mName) { ParamSpecList ¶mSpecList = protocolsMap[protocol].params; for (int i = 0; i < paramSpecList.size(); ++i) { ParamSpec ¶mSpec = paramSpecList[i]; if (paramSpec.name == paramName) { return ¶mSpec; } } return NULL; } QStringList ManagerFile::Private::protocols() const { return protocolsMap.keys(); } ParamSpecList ManagerFile::Private::parameters(const QString &protocol) const { return protocolsMap.value(protocol).params; } QVariant ManagerFile::Private::valueForKey(const QString ¶m, const QString &dbusSignature) { QString value = keyFile.rawValue(param); return parseValueWithDBusSignature(value, dbusSignature); } /** * \class ManagerFile * \ingroup utils * \headerfile TelepathyQt/manager-file.h * * \brief The ManagerFile class provides an easy way to read Telepathy manager * files according to the \telepathy_spec. */ /** * Create a ManagerFile object used to read .manager compliant files. */ ManagerFile::ManagerFile() : mPriv(new Private()) { } /** * Create a ManagerFile object used to read .manager compliant files. * * \param cmName Name of the connection manager to read the file for. */ ManagerFile::ManagerFile(const QString &cmName) : mPriv(new Private(cmName)) { } /** * Create a ManagerFile object used to read .manager compliant files. */ ManagerFile::ManagerFile(const ManagerFile &other) : mPriv(new Private()) { mPriv->cmName = other.mPriv->cmName; mPriv->keyFile = other.mPriv->keyFile; mPriv->protocolsMap = other.mPriv->protocolsMap; mPriv->valid = other.mPriv->valid; } /** * Class destructor. */ ManagerFile::~ManagerFile() { delete mPriv; } ManagerFile &ManagerFile::operator=(const ManagerFile &other) { mPriv->cmName = other.mPriv->cmName; mPriv->keyFile = other.mPriv->keyFile; mPriv->protocolsMap = other.mPriv->protocolsMap; mPriv->valid = other.mPriv->valid; return *this; } /** * Check whether or not a ManagerFile object is valid. If the file for the * specified connection manager cannot be found it will be considered invalid. * * \return true if valid, false otherwise. */ bool ManagerFile::isValid() const { return mPriv->isValid(); } /** * Return a list of all protocols defined in the manager file. * * \return List of all protocols defined in the file. */ QStringList ManagerFile::protocols() const { return mPriv->protocols(); } /** * Return a list of parameters for the given \a protocol. * * \param protocol Name of the protocol to look for. * \return List of ParamSpec of a specific protocol defined in the file, or an * empty list if the protocol is not defined. */ ParamSpecList ManagerFile::parameters(const QString &protocol) const { return mPriv->parameters(protocol); } /** * Return the name of the most common vcard field used for the given \a protocol's * contact identifiers, normalized to lower case. * * \param protocol Name of the protocol to look for. * \return The most common vcard field used for the given protocol's contact * identifiers, or an empty string if there is no such field or the * protocol is not defined. */ QString ManagerFile::vcardField(const QString &protocol) const { return mPriv->protocolsMap.value(protocol).vcardField; } QStringList ManagerFile::addressableVCardFields(const QString &protocol) const { return mPriv->protocolsMap.value(protocol).addressableVCardFields; } QStringList ManagerFile::addressableUriSchemes(const QString &protocol) const { return mPriv->protocolsMap.value(protocol).addressableUriSchemes; } /** * Return the English-language name of the given \a protocol, such as "AIM" or "Yahoo!". * * The name can be used as a fallback if an application doesn't have a localized name for the * protocol. * * If the manager file doesn't specify the english name, it is inferred from the protocol name, such * that for example "google-talk" becomes "Google Talk", but "local-xmpp" becomes "Local Xmpp". * * \param protocol Name of the protocol to look for. * \return An English-language name for the given \a protocol. */ QString ManagerFile::englishName(const QString &protocol) const { return mPriv->protocolsMap.value(protocol).englishName; } /** * Return the name of an icon for the given \a protocol in the system's icon * theme, such as "im-msn". * * If the manager file doesn't specify the icon name, "im-" is assumed. * * \param protocol Name of the protocol to look for. * \return The likely name of an icon for the given \a protocol. */ QString ManagerFile::iconName(const QString &protocol) const { return mPriv->protocolsMap.value(protocol).iconName; } /** * Return a list of channel classes which might be requestable from a connection * to the given \a protocol. * * \param protocol Name of the protocol to look for. * \return A list of channel classes which might be requestable from a * connection to the given \a protocol or a default constructed * RequestableChannelClassList instance if the protocol is not defined. */ RequestableChannelClassList ManagerFile::requestableChannelClasses( const QString &protocol) const { return mPriv->protocolsMap.value(protocol).rccs; } /** * Return a list of PresenceSpec representing the possible presence statuses * from a connection to the given \a protocol. * * \param protocol Name of the protocol to look for. * \return A list of PresenceSpec representing the possible presence statuses * from a connection to the given \a protocol or an empty list * if the protocol is not defined. */ PresenceSpecList ManagerFile::allowedPresenceStatuses(const QString &protocol) const { return mPriv->protocolsMap.value(protocol).statuses; } /** * Return the requirements (size limits, supported MIME types, etc) * for avatars used on the given \a protocol. * * \param protocol Name of the protocol to look for. * \return The requirements for avatars used on the given \a protocol or an invalid * AvatarSpec if the protocol is not defined. */ AvatarSpec ManagerFile::avatarRequirements(const QString &protocol) const { return mPriv->protocolsMap.value(protocol).avatarRequirements; } } // Tp telepathy-qt-0.9.3/TelepathyQt/location-info.h0000644000175200001440000000460512000056607023577 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_location_info_h_HEADER_GUARD_ #define _TelepathyQt_location_info_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include #include namespace Tp { class TP_QT_EXPORT LocationInfo { public: LocationInfo(); LocationInfo(const QVariantMap &location); LocationInfo(const LocationInfo &other); virtual ~LocationInfo(); bool isValid() const { return mPriv.constData() != 0; } LocationInfo &operator=(const LocationInfo &other); QString countryCode() const; QString country() const; QString region() const; QString locality() const; QString area() const; QString postalCode() const; QString street() const; QString building() const; QString floor() const; QString room() const; QString text() const; QString description() const; QString uri() const; QString language() const; double latitude() const; double longitude() const; double altitude() const; double accuracy() const; double speed() const; double bearing() const; QDateTime timestamp() const; QVariantMap allDetails() const; private: friend class Contact; TP_QT_NO_EXPORT void updateData(const QVariantMap &location); struct Private; friend struct Private; QSharedDataPointer mPriv; }; } // Tp Q_DECLARE_METATYPE(Tp::LocationInfo); #endif telepathy-qt-0.9.3/TelepathyQt/ChannelTypeTubesInterface0000644000175200001440000000040712000056607025642 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ChannelTypeTubesInterface_HEADER_GUARD_ #define _TelepathyQt_ChannelTypeTubesInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/CallContentInterfaceAudioControlInterface0000644000175200001440000000045412000056607031001 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_CallContentInterfaceAudioControlInterface_HEADER_GUARD_ #define _TelepathyQt_CallContentInterfaceAudioControlInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/pending-dbus-tube-connection.cpp0000644000175200001440000001513712000056607027044 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/pending-dbus-tube-connection.moc.hpp" #include "TelepathyQt/debug-internal.h" #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT PendingDBusTubeConnection::Private { Private(PendingDBusTubeConnection *parent); // Public object PendingDBusTubeConnection *parent; DBusTubeChannelPtr tube; bool allowOtherUsers; QVariantMap parameters; }; PendingDBusTubeConnection::Private::Private(PendingDBusTubeConnection *parent) : parent(parent), allowOtherUsers(false) { } /** * \class PendingDBusTubeConnection * \ingroup clientchannel * \headerfile TelepathyQt/pending-dbus-tube-connection.h * * A pending operation for accepting or offering a DBus tube * * This class represents an asynchronous operation for accepting or offering a DBus tube. * Upon completion, the address of the opened tube is returned as a QString. */ PendingDBusTubeConnection::PendingDBusTubeConnection( PendingString* string, bool allowOtherUsers, const QVariantMap& parameters, const DBusTubeChannelPtr& object) : PendingOperation(object) , mPriv(new Private(this)) { mPriv->tube = object; mPriv->allowOtherUsers = allowOtherUsers; mPriv->parameters = parameters; connect(mPriv->tube.data(), SIGNAL(invalidated(Tp::DBusProxy*,QString,QString)), this, SLOT(onChannelInvalidated(Tp::DBusProxy*,QString,QString))); if (string->isFinished()) { onConnectionFinished(string); } else { // Connect the pending void connect(string, SIGNAL(finished(Tp::PendingOperation*)), this, SLOT(onConnectionFinished(Tp::PendingOperation*))); } } PendingDBusTubeConnection::PendingDBusTubeConnection( const QString &errorName, const QString &errorMessage, const DBusTubeChannelPtr &object) : PendingOperation(object) , mPriv(new PendingDBusTubeConnection::Private(this)) { setFinishedWithError(errorName, errorMessage); } /** * Class destructor */ PendingDBusTubeConnection::~PendingDBusTubeConnection() { delete mPriv; } /** * When the operation has been completed successfully, returns the address of the opened DBus connection. * * Please note this function will return a meaningful value only if the operation has already * been completed successfully: in case of failure or non-completion, an empty QString will be * returned. * * \note If you plan to use QtDBus for the DBus connection, please note you should always use * QDBusConnection::connectToPeer(), regardless of the fact this tube is a p2p or a group one. * The above function has been introduced in Qt 4.8, previous versions of Qt do not allow the use * of DBus Tubes through QtDBus. * * \returns The address of the opened DBus connection. */ QString PendingDBusTubeConnection::address() const { return mPriv->tube->address(); } /** * Return whether this tube allows other users more than the current one to connect to the * private bus created by the tube. * * Note that even if the tube was accepted or offered specifying not to allow other users, this * method might still return true if one of the ends did not support such a restriction. * * In fact, if one of the ends does not support current user restriction, * the tube will be offered regardless, falling back to allowing any connection. If your * application requires strictly this condition to be enforced, you should check * DBusTubeChannel::supportsRestrictingToCurrentUser before offering the tube, * and take action from there. * * This function, however, is guaranteed to return the same value of the given allowOtherUsers * parameter when accepting or offering a tube if supportsRestrictingToCurrentUser is true. * * \return \c true if any user is allow to connect, \c false otherwise. */ bool PendingDBusTubeConnection::allowsOtherUsers() const { return mPriv->allowOtherUsers; } void PendingDBusTubeConnection::onConnectionFinished(PendingOperation *op) { if (isFinished()) { // The operation has already failed return; } if (op->isError()) { // Fail setFinishedWithError(op->errorName(), op->errorMessage()); return; } debug() << "Accept/Offer tube finished successfully"; // Now get the address and set it PendingString *ps = qobject_cast(op); debug() << "Got address " << ps->result(); mPriv->tube->setAddress(ps->result()); // It might have been already opened - check if (mPriv->tube->state() == TubeChannelStateOpen) { onStateChanged(mPriv->tube->state()); } else { // Wait until the tube gets opened on the other side connect(mPriv->tube.data(), SIGNAL(stateChanged(Tp::TubeChannelState)), this, SLOT(onStateChanged(Tp::TubeChannelState))); } } void PendingDBusTubeConnection::onStateChanged(TubeChannelState state) { debug() << "Tube state changed to " << state; if (state == TubeChannelStateOpen) { if (!mPriv->parameters.isEmpty()) { // Inject the parameters into the tube mPriv->tube->setParameters(mPriv->parameters); } // The tube is ready: mark the operation as finished setFinished(); } } void PendingDBusTubeConnection::onChannelInvalidated(DBusProxy* proxy, const QString& errorName, const QString& errorMessage) { Q_UNUSED(proxy); if (isFinished()) { // The operation has already finished return; } setFinishedWithError(errorName, errorMessage); } } telepathy-qt-0.9.3/TelepathyQt/ReadinessHelper0000644000175200001440000000037412000056607023664 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ReadinessHelper_HEADER_GUARD_ #define _TelepathyQt_ReadinessHelper_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/method-invocation-context.dox0000644000175200001440000000345312000056607026512 0ustar00collabora-develusers00000000000000/* * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 */ /** * \class Tp::MethodInvocationContext * \ingroup utils * \headerfile TelepathyQt/method-invocation-context.h * * \brief The MethodInvocationContext class provides a way for the service implementation to * respond to method calls. * * The methods setFinished() and setFinishedWithError() can be used to indicate * whether the method call succeeded or failed. * * If neither setFinished() nor setFinishedWithError() is called explicitly, * the method call will be considered to have failed. * " In case an asynchronous operation needs to be performed when implementing a method call * receiving a MethodInvocationContextPtr object, a reference to this object may be kept around * until all asynchronous operations finish, and the appropriate finish method * should be called to indicate whether the method call succeeded or failed later. */ telepathy-qt-0.9.3/TelepathyQt/pending-captchas.h0000644000175200001440000000452512000056607024247 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_pending_captcha_h_HEADER_GUARD_ #define _TelepathyQt_pending_captcha_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include namespace Tp { class Captcha; class TP_QT_EXPORT PendingCaptchas : public PendingOperation { Q_OBJECT Q_DISABLE_COPY(PendingCaptchas) public: virtual ~PendingCaptchas(); Captcha captcha() const; QList captchaList() const; bool requiresMultipleCaptchas() const; private Q_SLOTS: TP_QT_NO_EXPORT void onChannelInvalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage); TP_QT_NO_EXPORT void onGetCaptchasWatcherFinished(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void onGetCaptchaDataWatcherFinished(QDBusPendingCallWatcher *watcher); private: TP_QT_NO_EXPORT PendingCaptchas(const QDBusPendingCall &call, const QStringList &preferredMimeTypes, CaptchaAuthentication::ChallengeTypes preferredTypes, const CaptchaAuthenticationPtr &channel); TP_QT_NO_EXPORT PendingCaptchas( const QString &errorName, const QString &errorMessage, const CaptchaAuthenticationPtr &channel); struct Private; friend class CaptchaAuthentication; friend struct Private; Private *mPriv; }; } #endif // TP_PENDING_CAPTCHA_H telepathy-qt-0.9.3/TelepathyQt/AccountInterface0000644000175200001440000000036512000056607024024 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_AccountInterface_HEADER_GUARD_ #define _TelepathyQt_AccountInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/file-transfer-channel-creation-properties.h0000644000175200001440000000613712000056607031203 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_file_transfer_channel_creation_properties_h_HEADER_GUARD_ #define _TelepathyQt_file_transfer_channel_creation_properties_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include #include #include namespace Tp { class TP_QT_EXPORT FileTransferChannelCreationProperties { public: FileTransferChannelCreationProperties(); FileTransferChannelCreationProperties(const QString &suggestedFileName, const QString &contentType, qulonglong size); FileTransferChannelCreationProperties(const QString &path, const QString &contentType); FileTransferChannelCreationProperties( const FileTransferChannelCreationProperties &other); ~FileTransferChannelCreationProperties(); bool isValid() const { return mPriv.constData() != 0; } FileTransferChannelCreationProperties &operator=( const FileTransferChannelCreationProperties &other); bool operator==(const FileTransferChannelCreationProperties &other) const; FileTransferChannelCreationProperties &setContentHash( FileHashType contentHashType, const QString &contentHash); FileTransferChannelCreationProperties &setDescription( const QString &description); FileTransferChannelCreationProperties &setLastModificationTime( const QDateTime &lastModificationTime); FileTransferChannelCreationProperties &setUri(const QString &uri); /* mandatory parameters */ QString suggestedFileName() const; QString contentType() const; qulonglong size() const; /* optional parameters */ bool hasContentHash() const; FileHashType contentHashType() const; QString contentHash() const; bool hasDescription() const; QString description() const; bool hasLastModificationTime() const; QDateTime lastModificationTime() const; bool hasUri() const; QString uri() const; private: struct Private; friend struct Private; QSharedDataPointer mPriv; }; } // Tp Q_DECLARE_METATYPE(Tp::FileTransferChannelCreationProperties); #endif telepathy-qt-0.9.3/TelepathyQt/ProtocolParameter0000644000175200001440000000040212000056607024241 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ProtocolParameter_HEADER_GUARD_ #define _TelepathyQt_ProtocolParameter_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/IncomingStreamTubeChannel0000644000175200001440000000043412000056607025634 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_IncomingStreamTubeChannel_HEADER_GUARD_ #define _TelepathyQt_IncomingStreamTubeChannel_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/account-factory.h0000644000175200001440000000466712000056607024147 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_account_factory_h_HEADER_GUARD_ #define _TelepathyQt_account_factory_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include #include #include class QDBusConnection; namespace Tp { class PendingReady; class TP_QT_EXPORT AccountFactory : public FixedFeatureFactory { Q_OBJECT Q_DISABLE_COPY(AccountFactory) public: static AccountFactoryPtr create(const QDBusConnection &bus, const Features &features = Features()); virtual ~AccountFactory(); PendingReady *proxy(const QString &busName, const QString &objectPath, const ConnectionFactoryConstPtr &connFactory, const ChannelFactoryConstPtr &chanFactory, const ContactFactoryConstPtr &contactFactory) const; protected: AccountFactory(const QDBusConnection &bus, const Features &features); virtual AccountPtr construct(const QString &busName, const QString &objectPath, const ConnectionFactoryConstPtr &connFactory, const ChannelFactoryConstPtr &chanFactory, const ContactFactoryConstPtr &contactFactory) const; virtual QString finalBusNameFrom(const QString &uniqueOrWellKnown) const; // Nothing we'd like to prepare() // Fixed features private: struct Private; Private *mPriv; // Currently unused, just for future-proofing }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/pending-ready.h0000644000175200001440000000377212000056607023570 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009-2010 Collabora Ltd. * @copyright Copyright (C) 2009-2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_pending_ready_h_HEADER_GUARD_ #define _TelepathyQt_pending_ready_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include #include namespace Tp { class TP_QT_EXPORT PendingReady: public PendingOperation { Q_OBJECT Q_DISABLE_COPY(PendingReady); public: ~PendingReady(); DBusProxyPtr proxy() const; Features requestedFeatures() const; private Q_SLOTS: TP_QT_NO_EXPORT void onNestedFinished(Tp::PendingOperation *); private: friend class Connection; friend class DBusProxyFactory; friend class ReadinessHelper; TP_QT_NO_EXPORT PendingReady(const SharedPtr &object, const Features &requestedFeatures); TP_QT_NO_EXPORT PendingReady(const SharedPtr &factory, const DBusProxyPtr &proxy, const Features &requestedFeatures); struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/AccountInterfaceAvatarInterface0000644000175200001440000000042312000056607026777 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_AccountInterfaceAvatarInterface_HEADER_GUARD_ #define _TelepathyQt_AccountInterfaceAvatarInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/channel-dispatch-operation.h0000644000175200001440000000727312000056607026245 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_channel_dispatch_operation_h_HEADER_GUARD_ #define _TelepathyQt_channel_dispatch_operation_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include #include #include #include #include #include #include #include #include #include namespace Tp { class PendingOperation; class TP_QT_EXPORT ChannelDispatchOperation : public StatefulDBusProxy, public OptionalInterfaceFactory { Q_OBJECT Q_DISABLE_COPY(ChannelDispatchOperation) public: static const Feature FeatureCore; static ChannelDispatchOperationPtr create(const QDBusConnection &bus, const QString &objectPath, const QVariantMap &immutableProperties, const QList &initialChannels, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory); virtual ~ChannelDispatchOperation(); ConnectionPtr connection() const; AccountPtr account() const; QList channels() const; QStringList possibleHandlers() const; PendingOperation *handleWith(const QString &handler); PendingOperation *claim(); PendingOperation *claim(const AbstractClientHandlerPtr &handler); Q_SIGNALS: void channelLost(const Tp::ChannelPtr &channel, const QString &errorName, const QString &errorMessage); protected: ChannelDispatchOperation(const QDBusConnection &bus, const QString &objectPath, const QVariantMap &immutableProperties, const QList &initialChannels, const AccountFactoryConstPtr &accountFactory, const ConnectionFactoryConstPtr &connectionFactory, const ChannelFactoryConstPtr &channelFactory, const ContactFactoryConstPtr &contactFactory); Client::ChannelDispatchOperationInterface *baseInterface() const; private Q_SLOTS: TP_QT_NO_EXPORT void onFinished(); TP_QT_NO_EXPORT void gotMainProperties(QDBusPendingCallWatcher *watcher); TP_QT_NO_EXPORT void onChannelLost(const QDBusObjectPath &channelObjectPath, const QString &errorName, const QString &errorMessage); TP_QT_NO_EXPORT void onProxiesPrepared(Tp::PendingOperation *op); private: class PendingClaim; friend class PendingClaim; struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/CallContentMediaDescriptionInterface0000644000175200001440000000046412000056607030002 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_CallContentMediaDescriptionInterface_HEADER_GUARD_ #define _TelepathyQt_CallContentMediaDescriptionInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/contact-factory.cpp0000644000175200001440000001017112000056607024464 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include namespace Tp { struct TP_QT_NO_EXPORT ContactFactory::Private { Features features; }; /** * \class ContactFactory * \ingroup utils * \headerfile TelepathyQt/contact-factory.h * * \brief The ContactFactory class is responsible for constructing Contact * objects according to application-defined settings. */ /** * Creates a new ContactFactory. * * \param features The features to make ready on constructed contacts. * \returns A pointer to the created factory. */ ContactFactoryPtr ContactFactory::create(const Features &features) { return ContactFactoryPtr(new ContactFactory(features)); } /** * Class constructor. * * \param features The features to make ready on constructed contacts. */ ContactFactory::ContactFactory(const Features &features) : mPriv(new Private) { addFeatures(features); } /** * Class destructor. */ ContactFactory::~ContactFactory() { delete mPriv; } /** * Gets the features this factory will make ready on constructed contacts. * * \return The set of features. */ Features ContactFactory::features() const { Features features = mPriv->features; // FeatureAvatarData depends on FeatureAvatarToken if (features.contains(Contact::FeatureAvatarData) && !features.contains(Contact::FeatureAvatarToken)) { features.insert(Contact::FeatureAvatarToken); } return features; } /** * Adds a single feature this factory will make ready on further constructed contacts. * * No feature removal is provided, to guard against uncooperative modules removing features other * modules have set and depend on. * * \param feature The feature to add. */ void ContactFactory::addFeature(const Feature &feature) { addFeatures(Features(feature)); } /** * Adds a set of features this factory will make ready on further constructed contacts. * * No feature removal is provided, to guard against uncooperative modules removing features other * modules have set and depend on. * * \param features The features to add. */ void ContactFactory::addFeatures(const Features &features) { mPriv->features.unite(features); } /** * Can be used by subclasses to override the Contact subclass constructed by the factory. * * The default implementation constructs Tp::Contact objects. * * \param manager The contact manager this contact belongs. * \param handle The contact handle. * \param features The desired contact features. * \param attributes The desired contact attributes. * \return A pointer to the constructed contact. */ ContactPtr ContactFactory::construct(Tp::ContactManager *manager, const ReferencedHandles &handle, const Features &features, const QVariantMap &attributes) const { ContactPtr contact = ContactPtr(new Contact(manager, handle, features, attributes)); return contact; } /** * Can be used by subclasses to do arbitrary manipulation on constructed Contact objects. * * The default implementation does nothing. * * \param contact The contact to be prepared. * \return A PendingOperation used to prepare the contact or NULL if there is nothing to prepare. */ PendingOperation *ContactFactory::prepare(const ContactPtr &contact) const { return NULL; } } telepathy-qt-0.9.3/TelepathyQt/PendingContactAttributes0000644000175200001440000000043012000056607025547 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_PendingContactAttributes_HEADER_GUARD_ #define _TelepathyQt_PendingContactAttributes_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/Properties0000644000175200001440000000035412000056607022741 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_Properties_HEADER_GUARD_ #define _TelepathyQt_Properties_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/DBusObject0000644000175200001440000000035512000056607022572 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_DBusObject_HEADER_GUARD_ #define _TelepathyQt_DBusObject_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/MethodInvocationContext0000644000175200001440000000042512000056607025423 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_MethodInvocationContext_HEADER_GUARD_ #define _TelepathyQt_MethodInvocationContext_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/contact-messenger.h0000644000175200001440000000473012000056607024456 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_contact_messenger_h_HEADER_GUARD_ #define _TelepathyQt_contact_messenger_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include #include namespace Tp { class PendingSendMessage; class MessageContentPartList; class TP_QT_EXPORT ContactMessenger : public QObject, public RefCounted { Q_OBJECT Q_DISABLE_COPY(ContactMessenger) public: static ContactMessengerPtr create(const AccountPtr &account, const ContactPtr &contact); static ContactMessengerPtr create(const AccountPtr &account, const QString &contactIdentifier); virtual ~ContactMessenger(); AccountPtr account() const; QString contactIdentifier() const; QList textChats() const; PendingSendMessage *sendMessage(const QString &text, ChannelTextMessageType type = ChannelTextMessageTypeNormal, MessageSendingFlags flags = 0); PendingSendMessage *sendMessage(const MessageContentPartList &parts, MessageSendingFlags flags = 0); Q_SIGNALS: void messageSent(const Tp::Message &message, Tp::MessageSendingFlags flags, const QString &sentMessageToken, const Tp::TextChannelPtr &channel); void messageReceived(const Tp::ReceivedMessage &message, const Tp::TextChannelPtr &channel); private: TP_QT_NO_EXPORT ContactMessenger(const AccountPtr &account, const QString &contactIdentifier); struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/AccountFactory0000644000175200001440000000037112000056607023530 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_AccountFactory_HEADER_GUARD_ #define _TelepathyQt_AccountFactory_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/ConnectionInterfaceAliasingInterface0000644000175200001440000000044012000056607030012 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ConnectionInterfaceAliasingInterface_HEADER_GUARD_ #define _TelepathyQt_ConnectionInterfaceAliasingInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/call-stream.cpp0000644000175200001440000004202012000056607023566 0ustar00collabora-develusers00000000000000/* * This file is part of TelepathyQt * * @copyright Copyright (C) 2010-2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include "TelepathyQt/_gen/call-stream.moc.hpp" #include "TelepathyQt/_gen/cli-call-stream-body.hpp" #include "TelepathyQt/_gen/cli-call-stream.moc.hpp" #include #include #include #include #include #include #include #include #include #include namespace Tp { struct TP_QT_NO_EXPORT CallStream::Private { Private(CallStream *parent, const CallContentPtr &content); static void introspectMainProperties(Private *self); void processRemoteMembersChanged(); struct RemoteMembersChangedInfo; // Public object CallStream *parent; WeakPtr content; // Mandatory proxies Client::CallStreamInterface *streamInterface; ReadinessHelper *readinessHelper; // Introspection uint localSendingState; ContactSendingStateMap remoteMembers; QHash remoteMembersContacts; bool canRequestReceiving; QQueue< QSharedPointer > remoteMembersChangedQueue; QSharedPointer currentRemoteMembersChangedInfo; }; struct TP_QT_NO_EXPORT CallStream::Private::RemoteMembersChangedInfo { RemoteMembersChangedInfo(const ContactSendingStateMap &updates, const HandleIdentifierMap &identifiers, const UIntList &removed, const CallStateReason &reason) : updates(updates), identifiers(identifiers), removed(removed), reason(reason) { } static QSharedPointer create( const ContactSendingStateMap &updates, const HandleIdentifierMap &identifiers, const UIntList &removed, const CallStateReason &reason) { RemoteMembersChangedInfo *info = new RemoteMembersChangedInfo( updates, identifiers, removed, reason); return QSharedPointer(info); } ContactSendingStateMap updates; HandleIdentifierMap identifiers; UIntList removed; CallStateReason reason; }; CallStream::Private::Private(CallStream *parent, const CallContentPtr &content) : parent(parent), content(content.data()), streamInterface(parent->interface()), readinessHelper(parent->readinessHelper()), localSendingState(SendingStateNone), canRequestReceiving(true) { ReadinessHelper::Introspectables introspectables; ReadinessHelper::Introspectable introspectableCore( QSet() << 0, // makesSenseForStatuses Features(), // dependsOnFeatures QStringList(), // dependsOnInterfaces (ReadinessHelper::IntrospectFunc) &Private::introspectMainProperties, this); introspectables[FeatureCore] = introspectableCore; readinessHelper->addIntrospectables(introspectables); readinessHelper->becomeReady(FeatureCore); } void CallStream::Private::introspectMainProperties(CallStream::Private *self) { CallStream *parent = self->parent; parent->connect(self->streamInterface, SIGNAL(LocalSendingStateChanged(uint,Tp::CallStateReason)), SLOT(onLocalSendingStateChanged(uint,Tp::CallStateReason))); parent->connect(self->streamInterface, SIGNAL(RemoteMembersChanged(Tp::ContactSendingStateMap,Tp::HandleIdentifierMap,Tp::UIntList,Tp::CallStateReason)), SLOT(onRemoteMembersChanged(Tp::ContactSendingStateMap,Tp::HandleIdentifierMap,Tp::UIntList,Tp::CallStateReason))); parent->connect(self->streamInterface->requestAllProperties(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(gotMainProperties(Tp::PendingOperation*))); } void CallStream::Private::processRemoteMembersChanged() { if (currentRemoteMembersChangedInfo) { // currently building contacts return; } if (remoteMembersChangedQueue.isEmpty()) { if (!parent->isReady(FeatureCore)) { readinessHelper->setIntrospectCompleted(FeatureCore, true); } return; } currentRemoteMembersChangedInfo = remoteMembersChangedQueue.dequeue(); QSet pendingRemoteMembers; for (ContactSendingStateMap::const_iterator i = currentRemoteMembersChangedInfo->updates.constBegin(); i != currentRemoteMembersChangedInfo->updates.constEnd(); ++i) { pendingRemoteMembers.insert(i.key()); } foreach(uint i, currentRemoteMembersChangedInfo->removed) { pendingRemoteMembers.insert(i); } if (!pendingRemoteMembers.isEmpty()) { ConnectionPtr connection = parent->content()->channel()->connection(); connection->lowlevel()->injectContactIds(currentRemoteMembersChangedInfo->identifiers); ContactManagerPtr contactManager = connection->contactManager(); PendingContacts *contacts = contactManager->contactsForHandles( pendingRemoteMembers.toList()); parent->connect(contacts, SIGNAL(finished(Tp::PendingOperation*)), SLOT(gotRemoteMembersContacts(Tp::PendingOperation*))); } else { currentRemoteMembersChangedInfo.clear(); processRemoteMembersChanged(); } } /** * \class CallStream * \ingroup clientchannel * \headerfile TelepathyQt/call-stream.h * * \brief The CallStream class provides an object representing a Telepathy * Call.Stream. * * Instances of this class cannot be constructed directly; the only way to get * one is via CallContent. * * See \ref async_model */ /** * Feature representing the core that needs to become ready to make the * CallStream object usable. * * Note that this feature must be enabled in order to use most CallStream * methods. See specific methods documentation for more details. * * When calling isReady(), becomeReady(), this feature is implicitly added * to the requested features. */ const Feature CallStream::FeatureCore = Feature(QLatin1String(CallStream::staticMetaObject.className()), 0); /** * Construct a new CallStream object. * * \param content The content owning this call stream. * \param objectPath The object path of this call stream. */ CallStream::CallStream(const CallContentPtr &content, const QDBusObjectPath &objectPath) : StatefulDBusProxy(content->dbusConnection(), content->busName(), objectPath.path(), FeatureCore), OptionalInterfaceFactory(this), mPriv(new Private(this, content)) { } /** * Class destructor. */ CallStream::~CallStream() { delete mPriv; } /** * Return the content owning this call stream. * * \return The content owning this call stream. */ CallContentPtr CallStream::content() const { return CallContentPtr(mPriv->content); } /** * Returns whether the user can request that a remote contact starts * sending on this stream. Not all protocols allow the user to ask * the other side to start sending media. * * \return true if the user can request that a remote contact starts * sending on this stream, or false otherwise. * \sa requestReceiving() */ bool CallStream::canRequestReceiving() const { return mPriv->canRequestReceiving; } /** * Return the contacts whose the call stream is with. * * \return The contacts whose the call stream is with. * \sa remoteMembersRemoved() */ Contacts CallStream::remoteMembers() const { return mPriv->remoteMembersContacts.values().toSet(); } /** * Return the call stream local sending state. * * \return The call stream local sending state. * \sa localSendingStateChanged() */ SendingState CallStream::localSendingState() const { return (SendingState) mPriv->localSendingState; } /** * Return the call stream remote sending state for a given \a contact. * * \return The call stream remote sending state for a contact. * \sa remoteSendingStateChanged() */ SendingState CallStream::remoteSendingState(const ContactPtr &contact) const { if (!contact) { return SendingStateNone; } for (ContactSendingStateMap::const_iterator i = mPriv->remoteMembers.constBegin(); i != mPriv->remoteMembers.constEnd(); ++i) { uint handle = i.key(); SendingState sendingState = (SendingState) i.value(); if (handle == contact->handle()[0]) { return sendingState; } } return SendingStateNone; } /** * Request that media starts or stops being sent on this call stream. * * \return A PendingOperation which will emit PendingOperation::finished * when the call has finished. * \sa localSendingStateChanged() */ PendingOperation *CallStream::requestSending(bool send) { return new PendingVoid(mPriv->streamInterface->SetSending(send), CallStreamPtr(this)); } /** * Request that a remote \a contact stops or starts sending on this call stream. * * \return A PendingOperation which will emit PendingOperation::finished * when the call has finished. * \sa remoteSendingStateChanged() */ PendingOperation *CallStream::requestReceiving(const ContactPtr &contact, bool receive) { if (!contact) { return new PendingFailure(TP_QT_ERROR_INVALID_ARGUMENT, QLatin1String("Invalid contact"), CallStreamPtr(this)); } else if (!mPriv->canRequestReceiving && receive) { return new PendingFailure(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Requesting the other side to start sending media " "is not allowed by this protocol"), CallStreamPtr(this)); } return new PendingVoid(mPriv->streamInterface->RequestReceiving(contact->handle()[0], receive), CallStreamPtr(this)); } void CallStream::gotMainProperties(PendingOperation *op) { if (op->isError()) { warning().nospace() << "CallStreamInterface::requestAllProperties() failed with " << op->errorName() << ": " << op->errorMessage(); mPriv->readinessHelper->setIntrospectCompleted(FeatureCore, false, op->errorName(), op->errorMessage()); return; } debug() << "Got reply to CallStreamInterface::requestAllProperties()"; PendingVariantMap *pvm = qobject_cast(op); Q_ASSERT(pvm); QVariantMap props = pvm->result(); mPriv->canRequestReceiving = qdbus_cast(props[QLatin1String("CanRequestReceiving")]); mPriv->localSendingState = qdbus_cast(props[QLatin1String("LocalSendingState")]); ContactSendingStateMap remoteMembers = qdbus_cast(props[QLatin1String("RemoteMembers")]); HandleIdentifierMap remoteMemberIdentifiers = qdbus_cast(props[QLatin1String("RemoteMemberIdentifiers")]); mPriv->remoteMembersChangedQueue.enqueue(Private::RemoteMembersChangedInfo::create( remoteMembers, remoteMemberIdentifiers, UIntList(), CallStateReason())); mPriv->processRemoteMembersChanged(); } void CallStream::gotRemoteMembersContacts(PendingOperation *op) { PendingContacts *pc = qobject_cast(op); if (!pc->isValid()) { warning().nospace() << "Getting contacts failed with " << pc->errorName() << ":" << pc->errorMessage() << ", ignoring"; mPriv->currentRemoteMembersChangedInfo.clear(); mPriv->processRemoteMembersChanged(); return; } QMap removed; for (ContactSendingStateMap::const_iterator i = mPriv->currentRemoteMembersChangedInfo->updates.constBegin(); i != mPriv->currentRemoteMembersChangedInfo->updates.constEnd(); ++i) { mPriv->remoteMembers.insert(i.key(), i.value()); } foreach (const ContactPtr &contact, pc->contacts()) { mPriv->remoteMembersContacts.insert(contact->handle()[0], contact); } foreach (uint handle, mPriv->currentRemoteMembersChangedInfo->removed) { mPriv->remoteMembers.remove(handle); if (isReady(FeatureCore) && mPriv->remoteMembersContacts.contains(handle)) { removed.insert(handle, mPriv->remoteMembersContacts[handle]); // make sure we don't have updates for removed contacts mPriv->currentRemoteMembersChangedInfo->updates.remove(handle); } mPriv->remoteMembersContacts.remove(handle); } foreach (uint handle, pc->invalidHandles()) { mPriv->remoteMembers.remove(handle); if (isReady(FeatureCore) && mPriv->remoteMembersContacts.contains(handle)) { removed.insert(handle, mPriv->remoteMembersContacts[handle]); // make sure we don't have updates for invalid handles mPriv->currentRemoteMembersChangedInfo->updates.remove(handle); } mPriv->remoteMembersContacts.remove(handle); } if (isReady(FeatureCore)) { CallChannelPtr channel(content()->channel()); QHash remoteSendingStates; for (ContactSendingStateMap::const_iterator i = mPriv->currentRemoteMembersChangedInfo->updates.constBegin(); i != mPriv->currentRemoteMembersChangedInfo->updates.constEnd(); ++i) { uint handle = i.key(); SendingState sendingState = (SendingState) i.value(); Q_ASSERT(mPriv->remoteMembersContacts.contains(handle)); remoteSendingStates.insert(mPriv->remoteMembersContacts[handle], sendingState); mPriv->remoteMembers.insert(i.key(), i.value()); } if (!remoteSendingStates.isEmpty()) { emit remoteSendingStateChanged(remoteSendingStates, mPriv->currentRemoteMembersChangedInfo->reason); } if (!removed.isEmpty()) { emit remoteMembersRemoved(removed.values().toSet(), mPriv->currentRemoteMembersChangedInfo->reason); } } mPriv->currentRemoteMembersChangedInfo.clear(); mPriv->processRemoteMembersChanged(); } void CallStream::onLocalSendingStateChanged(uint state, const CallStateReason &reason) { mPriv->localSendingState = state; emit localSendingStateChanged((SendingState) state, reason); } void CallStream::onRemoteMembersChanged(const ContactSendingStateMap &updates, const HandleIdentifierMap &identifiers, const UIntList &removed, const CallStateReason &reason) { if (updates.isEmpty() && removed.isEmpty()) { debug() << "Received Call::Stream::RemoteMembersChanged with 0 removals and " "updates, skipping it"; return; } debug() << "Received Call::Stream::RemoteMembersChanged with" << updates.size() << "updated and" << removed.size() << "removed"; mPriv->remoteMembersChangedQueue.enqueue( Private::RemoteMembersChangedInfo::create(updates, identifiers, removed, reason)); mPriv->processRemoteMembersChanged(); } /** * \fn void CallStream::localSendingStateChanged(Tp::SendingState localSendingState, const Tp::CallStateReason &reason); * * This signal is emitted when the local sending state of this call stream * changes. * * \param localSendingState The new local sending state of this call stream. * \param reason The reason that caused this change * \sa localSendingState() */ /** * \fn void CallStream::remoteSendingStateChanged(const QHash &remoteSendingStates, const Tp::CallStateReason &reason); * * This signal is emitted when any remote sending state of this call stream * changes. * * \param remoteSendingStates The new remote sending states of this call stream. * \param reason The reason that caused these changes * \sa remoteSendingState() */ /** * \fn void CallStream::remoteMembersRemoved(const Tp::Contacts &members, const Tp::CallStateReason &reason); * * This signal is emitted when one or more members of this stream are removed. * * \param members The members that were removed from this call stream. * \param reason The reason for that caused these removals * \sa remoteMembers() */ } // Tp telepathy-qt-0.9.3/TelepathyQt/ConnectionManagerInterface0000644000175200001440000000042412000056607026016 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ConnectionManagerInterface_HEADER_GUARD_ #define _TelepathyQt_ConnectionManagerInterface_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/TelepathyQt/simple-pending-operations.h0000644000175200001440000000547712000056607026142 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2008-2009 Collabora Ltd. * @copyright Copyright (C) 2008-2009 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_pending_operations_h_HEADER_GUARD_ #define _TelepathyQt_pending_operations_h_HEADER_GUARD_ #ifndef IN_TP_QT_HEADER #error IN_TP_QT_HEADER #endif #include #include namespace Tp { class TP_QT_EXPORT PendingSuccess : public PendingOperation { Q_OBJECT Q_DISABLE_COPY(PendingSuccess) public: PendingSuccess(const SharedPtr &object) : PendingOperation(object) { setFinished(); } }; class TP_QT_EXPORT PendingFailure : public PendingOperation { Q_OBJECT Q_DISABLE_COPY(PendingFailure) public: PendingFailure(const QString &name, const QString &message, const SharedPtr &object) : PendingOperation(object) { setFinishedWithError(name, message); } PendingFailure(const QDBusError &error, const SharedPtr &object) : PendingOperation(object) { setFinishedWithError(error); } }; class TP_QT_EXPORT PendingVoid : public PendingOperation { Q_OBJECT Q_DISABLE_COPY(PendingVoid) public: PendingVoid(QDBusPendingCall call, const SharedPtr &object); private Q_SLOTS: TP_QT_NO_EXPORT void watcherFinished(QDBusPendingCallWatcher*); private: struct Private; friend struct Private; Private *mPriv; }; class TP_QT_EXPORT PendingComposite : public PendingOperation { Q_OBJECT Q_DISABLE_COPY(PendingComposite) public: PendingComposite(const QList &operations, const SharedPtr &object); PendingComposite(const QList &operations, bool failOnFirstError, const SharedPtr &object); ~PendingComposite(); private Q_SLOTS: TP_QT_NO_EXPORT void onOperationFinished(Tp::PendingOperation *); private: struct Private; friend struct Private; Private *mPriv; }; } // Tp #endif telepathy-qt-0.9.3/TelepathyQt/ConnectionManagerLowlevel0000644000175200001440000000043112000056607025705 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_ConnectionManagerLowlevel_HEADER_GUARD #define _TelepathyQt_ConnectionManagerLowlevel_HEADER_GUARD #ifndef IN_TP_QT_HEADER #define IN_TP_QT_HEADER #endif #include #undef IN_TP_QT_HEADER #endif // vim:set ft=cpp: telepathy-qt-0.9.3/examples/0000755000175200001440000000000012000056607020232 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/examples/cm/0000755000175200001440000000000012000056607020631 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/examples/cm/main.cpp0000644000175200001440000000134712000056607022266 0ustar00collabora-develusers00000000000000#include #include #include #include #include #include #include "protocol.h" using namespace Tp; int main(int argc, char **argv) { QCoreApplication app(argc, argv); Tp::registerTypes(); Tp::enableDebug(true); Tp::enableWarnings(true); BaseProtocolPtr proto = BaseProtocol::create( QDBusConnection::sessionBus(), QLatin1String("example-proto")); BaseConnectionManagerPtr cm = BaseConnectionManager::create( QDBusConnection::sessionBus(), QLatin1String("TpQtExampleCM")); cm->addProtocol(proto); cm->registerObject(); return app.exec(); } telepathy-qt-0.9.3/examples/cm/protocol.cpp0000644000175200001440000001076512000056607023207 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include "protocol.h" #include "_gen/protocol.moc.hpp" #include #include #include #include #include #include #include using namespace Tp; Protocol::Protocol(const QDBusConnection &dbusConnection, const QString &name) : BaseProtocol(dbusConnection, name) { setParameters(ProtocolParameterList() << ProtocolParameter(QLatin1String("example-param"), QLatin1String("s"), ConnMgrParamFlagRequired)); setRequestableChannelClasses( RequestableChannelClassSpecList() << RequestableChannelClassSpec::textChat()); setEnglishName(QLatin1String("ExampleProto")); setIconName(QLatin1String("example-icon")); setVCardField(QLatin1String("x-example")); // callbacks setCreateConnectionCallback(memFun(this, &Protocol::createConnection)); setIdentifyAccountCallback(memFun(this, &Protocol::identifyAccount)); setNormalizeContactCallback(memFun(this, &Protocol::normalizeContact)); addrIface = BaseProtocolAddressingInterface::create(); addrIface->setAddressableVCardFields(QStringList() << QLatin1String("x-example-vcard-field")); addrIface->setAddressableUriSchemes(QStringList() << QLatin1String("example-uri-scheme")); addrIface->setNormalizeVCardAddressCallback(memFun(this, &Protocol::normalizeVCardAddress)); addrIface->setNormalizeContactUriCallback(memFun(this, &Protocol::normalizeContactUri)); plugInterface(AbstractProtocolInterfacePtr::dynamicCast(addrIface)); avatarsIface = BaseProtocolAvatarsInterface::create(); avatarsIface->setAvatarDetails(AvatarSpec(QStringList() << QLatin1String("image/png"), 16, 64, 32, 16, 64, 32, 1024)); plugInterface(AbstractProtocolInterfacePtr::dynamicCast(avatarsIface)); SimpleStatusSpec spAvailable; spAvailable.type = ConnectionPresenceTypeAvailable; spAvailable.maySetOnSelf = true; spAvailable.canHaveMessage = true; SimpleStatusSpec spOffline; spOffline.type = ConnectionPresenceTypeOffline; spOffline.maySetOnSelf = true; spOffline.canHaveMessage = false; SimpleStatusSpecMap specs; specs.insert(QLatin1String("available"), spAvailable); specs.insert(QLatin1String("offline"), spOffline); presenceIface = BaseProtocolPresenceInterface::create(); presenceIface->setStatuses(PresenceSpecList(specs)); plugInterface(AbstractProtocolInterfacePtr::dynamicCast(presenceIface)); } Protocol::~Protocol() { } BaseConnectionPtr Protocol::createConnection(const QVariantMap ¶meters, Tp::DBusError *error) { error->set(QLatin1String("CreateConnection.Error.Test"), QLatin1String("")); return BaseConnectionPtr(); } QString Protocol::identifyAccount(const QVariantMap ¶meters, Tp::DBusError *error) { error->set(QLatin1String("IdentifyAccount.Error.Test"), QLatin1String("")); return QString(); } QString Protocol::normalizeContact(const QString &contactId, Tp::DBusError *error) { error->set(QLatin1String("NormalizeContact.Error.Test"), QLatin1String("")); return QString(); } QString Protocol::normalizeVCardAddress(const QString &vcardField, const QString vcardAddress, Tp::DBusError *error) { error->set(QLatin1String("NormalizeVCardAddress.Error.Test"), QLatin1String("")); return QString(); } QString Protocol::normalizeContactUri(const QString &uri, Tp::DBusError *error) { error->set(QLatin1String("NormalizeContactUri.Error.Test"), QLatin1String("")); return QString(); } telepathy-qt-0.9.3/examples/cm/CMakeLists.txt0000644000175200001440000000106512000056607023373 0ustar00collabora-develusers00000000000000if(ENABLE_EXPERIMENTAL_SERVICE_SUPPORT) set(cm_SRCS protocol.h protocol.cpp main.cpp) set(cm_MOC_SRCS protocol.h) tpqt_generate_mocs(${cm_MOC_SRCS}) add_executable(cm ${cm_SRCS} ${cm_MOC_SRCS}) target_link_libraries(cm ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} ${QT_QTNETWORK_LIBRARY} ${QT_QTXML_LIBRARY} telepathy-qt${QT_VERSION_MAJOR} telepathy-qt${QT_VERSION_MAJOR}-service ${TP_QT_EXECUTABLE_LINKER_FLAGS}) endif(ENABLE_EXPERIMENTAL_SERVICE_SUPPORT) telepathy-qt-0.9.3/examples/cm/protocol.h0000644000175200001440000000364212000056607022650 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2012 Collabora Ltd. * @copyright Copyright (C) 2012 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_examples_cm_protocol_h_HEADER_GUARD_ #define _TelepathyQt_examples_cm_protocol_h_HEADER_GUARD_ #include class Protocol : public Tp::BaseProtocol { Q_OBJECT Q_DISABLE_COPY(Protocol) public: Protocol(const QDBusConnection &dbusConnection, const QString &name); virtual ~Protocol(); private: Tp::BaseConnectionPtr createConnection(const QVariantMap ¶meters, Tp::DBusError *error); QString identifyAccount(const QVariantMap ¶meters, Tp::DBusError *error); QString normalizeContact(const QString &contactId, Tp::DBusError *error); // Proto.I.Addressing QString normalizeVCardAddress(const QString &vCardField, const QString vCardAddress, Tp::DBusError *error); QString normalizeContactUri(const QString &uri, Tp::DBusError *error); Tp::BaseProtocolAddressingInterfacePtr addrIface; Tp::BaseProtocolAvatarsInterfacePtr avatarsIface; Tp::BaseProtocolPresenceInterfacePtr presenceIface; }; #endif telepathy-qt-0.9.3/examples/protocols/0000755000175200001440000000000012000056607022256 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/examples/protocols/main.cpp0000644000175200001440000000055212000056607023710 0ustar00collabora-develusers00000000000000#include #include #include #include #include #include "protocols.h" int main(int argc, char **argv) { QCoreApplication app(argc, argv); Tp::registerTypes(); Tp::enableDebug(false); Tp::enableWarnings(false); Protocols protocols; return app.exec(); } telepathy-qt-0.9.3/examples/protocols/CMakeLists.txt0000644000175200001440000000076212000056607025023 0ustar00collabora-develusers00000000000000set(protocols_SRCS main.cpp cm-wrapper.cpp protocols.cpp) set(protocols_MOC_SRCS cm-wrapper.h protocols.h) tpqt_generate_mocs(${protocols_MOC_SRCS}) add_executable(protocols ${protocols_SRCS} ${protocols_MOC_SRCS}) target_link_libraries(protocols ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTNETWORK_LIBRARY} ${QT_QTWIDGETS_LIBRARY} ${QT_QTXML_LIBRARY} telepathy-qt${QT_VERSION_MAJOR} ${TP_QT_EXECUTABLE_LINKER_FLAGS}) telepathy-qt-0.9.3/examples/protocols/protocols.h0000644000175200001440000000274312000056607024461 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_examples_protocols_protocols_h_HEADER_GUARD_ #define _TelepathyQt_examples_protocols_protocols_h_HEADER_GUARD_ #include #include "cm-wrapper.h" #include #include using namespace Tp; namespace Tp { class PendingOperation; } class Protocols : public QObject { Q_OBJECT public: Protocols(); ~Protocols(); private Q_SLOTS: void onListNamesFinished(Tp::PendingOperation *op); void onCMWrapperFinished(); private: QList mCMWrappers; int cmWrappersFinished; }; #endif telepathy-qt-0.9.3/examples/protocols/cm-wrapper.h0000644000175200001440000000301212000056607024500 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_examples_protocols_cm_wrapper_h_HEADER_GUARD_ #define _TelepathyQt_examples_protocols_cm_wrapper_h_HEADER_GUARD_ #include #include #include using namespace Tp; namespace Tp { class ConnectionManager; class PendingOperation; } class CMWrapper : public QObject { Q_OBJECT public: CMWrapper(const QString &cmName, QObject *parent = 0); ~CMWrapper(); ConnectionManagerPtr cm() const; Q_SIGNALS: void finished(); private Q_SLOTS: void onCMReady(Tp::PendingOperation *op); private: ConnectionManagerPtr mCM; }; #endif telepathy-qt-0.9.3/examples/protocols/protocols.cpp0000644000175200001440000000422312000056607025007 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include "protocols.h" #include "_gen/protocols.moc.hpp" #include #include #include #include #include Protocols::Protocols() : cmWrappersFinished(0) { qDebug() << "Listing names"; connect(ConnectionManager::listNames(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(onListNamesFinished(Tp::PendingOperation *))); } Protocols::~Protocols() { } void Protocols::onListNamesFinished(PendingOperation *op) { if (op->isError()) { qWarning() << "Error listing connection manager names -" << op->errorName() << ": " << op->errorMessage(); return; } PendingStringList *ps = qobject_cast(op); qDebug() << "Supported CMs:" << ps->result(); foreach (const QString &cmName, ps->result()) { CMWrapper *cmWrapper = new CMWrapper(cmName, this); mCMWrappers.append(cmWrapper); connect(cmWrapper, SIGNAL(finished()), SLOT(onCMWrapperFinished())); } } void Protocols::onCMWrapperFinished() { if (++cmWrappersFinished == mCMWrappers.size()) { QCoreApplication::quit(); } } telepathy-qt-0.9.3/examples/protocols/cm-wrapper.cpp0000644000175200001440000000363012000056607025041 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2010 Collabora Ltd. * @copyright Copyright (C) 2010 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include "cm-wrapper.h" #include "_gen/cm-wrapper.moc.hpp" #include #include #include #include CMWrapper::CMWrapper(const QString &cmName, QObject *parent) : QObject(parent), mCM(ConnectionManager::create(cmName)) { connect(mCM->becomeReady(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(onCMReady(Tp::PendingOperation *))); } CMWrapper::~CMWrapper() { } ConnectionManagerPtr CMWrapper::cm() const { return mCM; } void CMWrapper::onCMReady(PendingOperation *op) { if (op->isError()) { qWarning() << "CM" << mCM->name() << "cannot become ready -" << op->errorName() << ": " << op->errorMessage(); return; } qDebug() << "CM" << mCM->name() << "ready!"; qDebug() << "Supported protocols:"; foreach (const QString &protocol, mCM->supportedProtocols()) { qDebug() << "\t" << protocol; } emit finished(); } telepathy-qt-0.9.3/examples/contact-messenger/0000755000175200001440000000000012000056607023653 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/examples/contact-messenger/sender.cpp0000644000175200001440000000502512000056607025641 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include "sender.h" #include "_gen/sender.moc.hpp" #include #include #include #include #include #include #include Sender::Sender(const QString &accountPath, const QString &contactIdentifier, const QString &message) { Tp::AccountPtr acc = Tp::Account::create(TP_QT_ACCOUNT_MANAGER_BUS_NAME, accountPath); messenger = Tp::ContactMessenger::create(acc, contactIdentifier); connect(messenger->sendMessage(message), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onSendMessageFinished(Tp::PendingOperation*))); } Sender::~Sender() { } void Sender::onSendMessageFinished(Tp::PendingOperation *op) { if (op->isError()) { qDebug() << "Error sending message:" << op->errorName() << "-" << op->errorMessage(); QCoreApplication::exit(1); return; } Tp::PendingSendMessage *psm = qobject_cast(op); qDebug() << "Message sent, token is" << psm->sentMessageToken(); QCoreApplication::exit(0); } int main(int argc, char **argv) { QCoreApplication app(argc, argv); Tp::registerTypes(); Tp::enableDebug(true); Tp::enableWarnings(true); if (argc < 4) { qDebug() << "Usage: contact-messenger account_path contact_id message"; return -1; } Sender *sender = new Sender(QLatin1String(argv[1]), QLatin1String(argv[2]), QLatin1String(argv[3])); int ret = app.exec(); delete sender; return ret; } telepathy-qt-0.9.3/examples/contact-messenger/CMakeLists.txt0000644000175200001440000000067012000056607026416 0ustar00collabora-develusers00000000000000set(messenger-sender_SRCS sender.cpp) set(messenger-sender_MOC_SRCS sender.h) tpqt_generate_mocs(${messenger-sender_MOC_SRCS}) add_executable(messenger-sender ${messenger-sender_SRCS} ${messenger-sender_MOC_SRCS}) target_link_libraries(messenger-sender ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} ${QT_QTNETWORK_LIBRARY} ${QT_QTXML_LIBRARY} telepathy-qt${QT_VERSION_MAJOR} ${TP_QT_EXECUTABLE_LINKER_FLAGS}) telepathy-qt-0.9.3/examples/contact-messenger/sender.h0000644000175200001440000000272712000056607025314 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2011 Collabora Ltd. * @copyright Copyright (C) 2011 Nokia Corporation * @license LGPL 2.1 * * 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 _TelepathyQt_examples_contact_messenger_sender_h_HEADER_GUARD_ #define _TelepathyQt_examples_contact_messenger_sender_h_HEADER_GUARD_ #include #include #include namespace Tp { class PendingOperation; } class Sender : public QObject { Q_OBJECT public: Sender(const QString &accountPath, const QString &contactIdentifier, const QString &message); ~Sender(); private Q_SLOTS: void onSendMessageFinished(Tp::PendingOperation *op); private: Tp::ContactMessengerPtr messenger; }; #endif telepathy-qt-0.9.3/examples/file-transfer/0000755000175200001440000000000012000056607022773 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/examples/file-transfer/pending-file-receive.cpp0000644000175200001440000000516012000056607027462 0ustar00collabora-develusers00000000000000/* * This file is part of TelepathyQt * * Copyright (C) 2011 Collabora Ltd. * Copyright (C) 2011 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 */ #include "pending-file-receive.h" #include "_gen/pending-file-receive.moc.hpp" #include #include #include #include #include PendingFileReceive::PendingFileReceive(const IncomingFileTransferChannelPtr &chan, const SharedPtr &object) : PendingFileTransfer(FileTransferChannelPtr::qObjectCast(chan), object), mReceivingFile(false) { // connect/call onTransferStateChanged here as now we are constructed, otherwise doing it in the base // class would only invoke the base class slot connect(chan.data(), SIGNAL(stateChanged(Tp::FileTransferState,Tp::FileTransferStateChangeReason)), SLOT(onTransferStateChanged(Tp::FileTransferState,Tp::FileTransferStateChangeReason))); onTransferStateChanged(chan->state(), chan->stateReason()); } PendingFileReceive::~PendingFileReceive() { mFile.close(); } void PendingFileReceive::onTransferStateChanged(FileTransferState state, FileTransferStateChangeReason stateReason) { PendingFileTransfer::onTransferStateChanged(state, stateReason); if (state == FileTransferStatePending) { Q_ASSERT(!mReceivingFile); mReceivingFile = true; IncomingFileTransferChannelPtr chan = IncomingFileTransferChannelPtr::qObjectCast(channel()); Q_ASSERT(chan); QString fileName(QLatin1String("TpQtExampleFTReceiver_") + chan->fileName()); fileName.replace(QLatin1String("/"), QLatin1String("_")); mFile.setFileName(fileName); qDebug() << "Receiving" << chan->fileName() << "from" << chan->targetId() << ", saving as" << fileName; chan->acceptFile(0, &mFile); } } telepathy-qt-0.9.3/examples/file-transfer/file-receiver.h0000644000175200001440000000257612000056607025677 0ustar00collabora-develusers00000000000000/* * This file is part of TelepathyQt * * Copyright (C) 2011 Collabora Ltd. * Copyright (C) 2011 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 _TelepathyQt_examples_file_transfer_file_receiver_h_HEADER_GUARD_ #define _TelepathyQt_examples_file_transfer_file_receiver_h_HEADER_GUARD_ #include #include #include "file-receiver-handler.h" using namespace Tp; class FileReceiver : public QObject { Q_OBJECT Q_DISABLE_COPY(FileReceiver) public: FileReceiver(QObject *parent); ~FileReceiver(); private: ClientRegistrarPtr mCR; SharedPtr mHandler; }; #endif telepathy-qt-0.9.3/examples/file-transfer/pending-file-transfer.cpp0000644000175200001440000000564712000056607027676 0ustar00collabora-develusers00000000000000/* * This file is part of TelepathyQt * * Copyright (C) 2011 Collabora Ltd. * Copyright (C) 2011 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 */ #include "pending-file-transfer.h" #include "_gen/pending-file-transfer.moc.hpp" #include #include #include #include #include #include PendingFileTransfer::PendingFileTransfer(const FileTransferChannelPtr &chan, const SharedPtr &object) : PendingOperation(object), mChannel(chan) { connect(chan.data(), SIGNAL(invalidated(Tp::DBusProxy*,QString,QString)), SLOT(onChannelInvalidated(Tp::DBusProxy*,QString,QString))); connect(chan.data(), SIGNAL(transferredBytesChanged(qulonglong)), SLOT(onTransferredBytesChanged(qulonglong))); } PendingFileTransfer::~PendingFileTransfer() { } void PendingFileTransfer::onChannelInvalidated(DBusProxy *proxy, const QString &errorName, const QString &errorMessage) { Q_UNUSED(proxy); qWarning() << "Error sending file, channel invalidated -" << errorName << "-" << errorMessage; setFinishedWithError(errorName, errorMessage); } void PendingFileTransfer::onTransferStateChanged(FileTransferState state, FileTransferStateChangeReason stateReason) { qDebug() << "File transfer channel state changed to" << state << "with reason" << stateReason; switch (state) { case FileTransferStatePending: case FileTransferStateOpen: break; case FileTransferStateAccepted: qDebug() << "Transfer accepted!"; break; case FileTransferStateCompleted: qDebug() << "Transfer completed!"; setFinished(); break; case FileTransferStateCancelled: qDebug() << "Transfer cancelled"; setFinished(); return; default: Q_ASSERT(false); } } void PendingFileTransfer::onTransferredBytesChanged(qulonglong count) { qDebug().nospace() << "Transferred bytes " << count << " - " << ((int) (((double) count / mChannel->size()) * 100)) << "% done"; } telepathy-qt-0.9.3/examples/file-transfer/file-receiver.cpp0000644000175200001440000000503712000056607026225 0ustar00collabora-develusers00000000000000/* * This file is part of TelepathyQt * * Copyright (C) 2011 Collabora Ltd. * Copyright (C) 2011 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 */ #include "file-receiver.h" #include #include #include #include #include #include #include #include #include FileReceiver::FileReceiver(QObject *parent) : QObject(parent) { QDBusConnection bus(QDBusConnection::sessionBus()); AccountFactoryPtr accountFactory = AccountFactory::create(bus); ConnectionFactoryPtr connectionFactory = ConnectionFactory::create(bus); ChannelFactoryPtr channelFactory = ChannelFactory::create(bus); channelFactory->addCommonFeatures(Channel::FeatureCore); channelFactory->addFeaturesForIncomingFileTransfers(IncomingFileTransferChannel::FeatureCore); mCR = ClientRegistrar::create(accountFactory, connectionFactory, channelFactory); qDebug() << "Registering incoming file transfer handler"; mHandler = FileReceiverHandler::create(); QString handlerName(QLatin1String("TpQtExampleFileReceiverHandler")); if (!mCR->registerClient(AbstractClientPtr::dynamicCast(mHandler), handlerName)) { qWarning() << "Unable to register incoming file transfer handler, aborting"; QCoreApplication::exit(1); return; } qDebug() << "Awaiting file transfers"; } FileReceiver::~FileReceiver() { } int main(int argc, char **argv) { QCoreApplication app(argc, argv); Tp::registerTypes(); Tp::enableDebug(false); Tp::enableWarnings(true); new FileReceiver(&app); return app.exec(); } #include "_gen/file-receiver.moc.hpp" telepathy-qt-0.9.3/examples/file-transfer/file-receiver-handler.h0000644000175200001440000000403712000056607027304 0ustar00collabora-develusers00000000000000/* * This file is part of TelepathyQt * * Copyright (C) 2011 Collabora Ltd. * Copyright (C) 2011 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 _TelepathyQt_examples_file_transfer_file_receiver_handler_h_HEADER_GUARD_ #define _TelepathyQt_examples_file_transfer_file_receiver_handler_h_HEADER_GUARD_ #include #include #include #include using namespace Tp; class FileReceiverHandler : public QObject, public AbstractClientHandler { Q_OBJECT Q_DISABLE_COPY(FileReceiverHandler) public: static SharedPtr create() { return SharedPtr(new FileReceiverHandler()); } ~FileReceiverHandler(); bool bypassApproval() const; void handleChannels(const MethodInvocationContextPtr<> &context, const AccountPtr &account, const ConnectionPtr &connection, const QList &channels, const QList &requestsSatisfied, const QDateTime &userActionTime, const HandlerInfo &handlerInfo); private Q_SLOTS: void onReceiveFinished(Tp::PendingOperation *op); private: FileReceiverHandler(); QSet mReceiveOps; }; #endif telepathy-qt-0.9.3/examples/file-transfer/file-receiver-handler.cpp0000644000175200001440000000667412000056607027650 0ustar00collabora-develusers00000000000000/* * This file is part of TelepathyQt * * Copyright (C) 2011 Collabora Ltd. * Copyright (C) 2011 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 */ #include "file-receiver-handler.h" #include "_gen/file-receiver-handler.moc.hpp" #include "pending-file-receive.h" #include #include #include #include #include #include #include #include #include FileReceiverHandler::FileReceiverHandler() : QObject(), AbstractClientHandler(ChannelClassSpecList() << ChannelClassSpec::incomingFileTransfer(), AbstractClientHandler::Capabilities(), false) { } FileReceiverHandler::~FileReceiverHandler() { } bool FileReceiverHandler::bypassApproval() const { return false; } void FileReceiverHandler::handleChannels(const MethodInvocationContextPtr<> &context, const AccountPtr &account, const ConnectionPtr &connection, const QList &channels, const QList &requestsSatisfied, const QDateTime &userActionTime, const HandlerInfo &handlerInfo) { // We should always receive one channel to handle, // otherwise either MC or tp-qt itself is bogus, so let's assert in case they are Q_ASSERT(channels.size() == 1); ChannelPtr chan = channels.first(); if (!chan->isValid()) { qWarning() << "Channel received to handle is invalid, ignoring channel"; context->setFinishedWithError(TP_QT_ERROR_INVALID_ARGUMENT, QLatin1String("Channel received to handle is invalid")); return; } // We should always receive incoming channels of type FileTransfer, as set by our filter, // otherwise either MC or tp-qt itself is bogus, so let's assert in case they are Q_ASSERT(chan->channelType() == TP_QT_IFACE_CHANNEL_TYPE_FILE_TRANSFER); Q_ASSERT(!chan->isRequested()); IncomingFileTransferChannelPtr transferChannel = IncomingFileTransferChannelPtr::qObjectCast(chan); Q_ASSERT(transferChannel); context->setFinished(); PendingFileReceive *receiveOperation = new PendingFileReceive(transferChannel, SharedPtr::dynamicCast(AbstractClientPtr(this))); connect(receiveOperation, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onReceiveFinished(Tp::PendingOperation*))); } void FileReceiverHandler::onReceiveFinished(PendingOperation *op) { PendingFileReceive *receiveOperation = qobject_cast(op); qDebug() << "Closing channel"; receiveOperation->channel()->requestClose(); } telepathy-qt-0.9.3/examples/file-transfer/pending-file-transfer.h0000644000175200001440000000356712000056607027342 0ustar00collabora-develusers00000000000000/* * This file is part of TelepathyQt * * Copyright (C) 2011 Collabora Ltd. * Copyright (C) 2011 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 _TelepathyQt_examples_file_transfer_pending_file_transfer_h_HEADER_GUARD_ #define _TelepathyQt_examples_file_transfer_pending_file_transfer_h_HEADER_GUARD_ #include #include #include using namespace Tp; class PendingFileTransfer : public PendingOperation { Q_OBJECT Q_DISABLE_COPY(PendingFileTransfer) public: PendingFileTransfer(const FileTransferChannelPtr &chan, const SharedPtr &object); ~PendingFileTransfer(); FileTransferChannelPtr channel() const { return mChannel; } protected Q_SLOTS: void onTransferStateChanged(Tp::FileTransferState state, Tp::FileTransferStateChangeReason stateReason); private Q_SLOTS: void onChannelInvalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage); void onTransferredBytesChanged(qulonglong count); private: FileTransferChannelPtr mChannel; }; #endif telepathy-qt-0.9.3/examples/file-transfer/file-sender.cpp0000644000175200001440000002234712000056607025704 0ustar00collabora-develusers00000000000000/* * This file is part of TelepathyQt * * Copyright (C) 2011 Collabora Ltd. * Copyright (C) 2011 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 */ #include "file-sender.h" #include "pending-file-send.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include FileSender::FileSender(const QString &accountName, const QString &receiver, const QString &filePath, QObject *parent) : QObject(parent), mAccountName(accountName), mReceiver(receiver), mFilePath(filePath), mTransferRequested(false) { qDebug() << "Retrieving account from AccountManager"; QDBusConnection bus(QDBusConnection::sessionBus()); // Let's not prepare any account feature as we only care about one account, thus no need to // prepare features for all accounts AccountFactoryPtr accountFactory = AccountFactory::create(bus); // We only care about CONNECTED connections, so let's specify that in a Connection Factory ConnectionFactoryPtr connectionFactory = ConnectionFactory::create(bus, Connection::FeatureCore | Connection::FeatureConnected); ChannelFactoryPtr channelFactory = ChannelFactory::create(bus); channelFactory->addCommonFeatures(Channel::FeatureCore); channelFactory->addFeaturesForOutgoingFileTransfers(OutgoingFileTransferChannel::FeatureCore); ContactFactoryPtr contactFactory = ContactFactory::create(); mAM = AccountManager::create(bus, accountFactory, connectionFactory, channelFactory, contactFactory); connect(mAM->becomeReady(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onAMReady(Tp::PendingOperation*))); } FileSender::~FileSender() { } void FileSender::onAMReady(PendingOperation *op) { if (op->isError()) { qWarning() << "AccountManager cannot become ready -" << op->errorName() << '-' << op->errorMessage(); QCoreApplication::exit(1); return; } PendingReady *pr = qobject_cast(op); Q_ASSERT(pr != NULL); qDebug() << "AccountManager ready"; mAccount = mAM->accountForObjectPath( TP_QT_ACCOUNT_OBJECT_PATH_BASE + QLatin1Char('/') + mAccountName); if (!mAccount) { qWarning() << "The account given does not exist"; QCoreApplication::exit(1); } Q_ASSERT(!mAccount->isReady()); connect(mAccount->becomeReady(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onAccountReady(Tp::PendingOperation*))); } void FileSender::onAccountReady(PendingOperation *op) { if (op->isError()) { qWarning() << "Account cannot become ready -" << op->errorName() << '-' << op->errorMessage(); QCoreApplication::exit(1); return; } PendingReady *pr = qobject_cast(op); Q_ASSERT(pr != NULL); qDebug() << "Account ready"; qDebug() << "Checking if account is online..."; connect(mAccount.data(), SIGNAL(connectionChanged(Tp::ConnectionPtr)), SLOT(onAccountConnectionChanged(Tp::ConnectionPtr))); onAccountConnectionChanged(mAccount->connection()); } void FileSender::onAccountConnectionChanged(const ConnectionPtr &conn) { if (!conn) { qDebug() << "The account given has no connection. " "Please set it online to continue"; return; } Q_ASSERT(conn->isValid()); Q_ASSERT(conn->status() == ConnectionStatusConnected); qDebug() << "Account online, got a connected connection!"; mConnection = conn; qDebug() << "Creating contact object for receiver" << mReceiver; connect(mConnection->contactManager()->contactsForIdentifiers(QStringList() << mReceiver, Contact::FeatureCapabilities), SIGNAL(finished(Tp::PendingOperation *)), SLOT(onContactRetrieved(Tp::PendingOperation *))); } void FileSender::onContactRetrieved(PendingOperation *op) { if (op->isError()) { qWarning() << "Unable to create contact object for receiver" << mReceiver << "-" << op->errorName() << "-" << op->errorMessage(); QCoreApplication::exit(1); return; } PendingContacts *pc = qobject_cast(op); Q_ASSERT(pc->contacts().size() == 1); mContact = pc->contacts().first(); qDebug() << "Checking contact capabilities..."; connect(mContact.data(), SIGNAL(capabilitiesChanged(Tp::ContactCapabilities)), SLOT(onContactCapabilitiesChanged())); #if 0 qDebug() << "Contact capabilities:"; Q_FOREACH (const RequestableChannelClassSpec &spec, mContact->capabilities().allClassSpecs()) { qDebug() << " fixed:" << spec.fixedProperties(); qDebug() << " allowed:" << spec.allowedProperties(); } #endif if (mContact->capabilities().fileTransfers()) { onContactCapabilitiesChanged(); } else { qDebug() << "The receiver needs to be online and support file transfers to continue"; } } void FileSender::onContactCapabilitiesChanged() { if (mTransferRequested) { return; } if (mContact->capabilities().fileTransfers()) { qDebug() << "The remote contact is capable of receiving file transfers. " "Requesting file transfer channel"; mTransferRequested = true; FileTransferChannelCreationProperties ftProps(mFilePath, QLatin1String("application/octet-stream")); connect(mAccount->createAndHandleFileTransfer(mContact, ftProps), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onTransferRequestFinished(Tp::PendingOperation*))); } } void FileSender::onTransferRequestFinished(PendingOperation *op) { if (op->isError()) { qWarning() << "Unable to request stream tube channel -" << op->errorName() << ": " << op->errorMessage(); QCoreApplication::exit(1); return; } qDebug() << "File transfer channel request finished successfully!"; PendingChannel *pc = qobject_cast(op); Q_ASSERT(pc); ChannelPtr chan = pc->channel(); if (!chan->isValid()) { qWarning() << "Channel received to handle is invalid, aborting file transfer"; QCoreApplication::exit(1); return; } // We should always receive outgoing channels of type FileTransfer, as requested, // otherwise either MC or tp-qt itself is bogus, so let's assert in case they are Q_ASSERT(chan->channelType() == TP_QT_IFACE_CHANNEL_TYPE_FILE_TRANSFER); Q_ASSERT(chan->isRequested()); OutgoingFileTransferChannelPtr transferChannel = OutgoingFileTransferChannelPtr::qObjectCast(chan); Q_ASSERT(transferChannel); // We just passed the URI when requesting the channel, so it has to be set Q_ASSERT(!transferChannel->uri().isEmpty()); PendingFileSend *sendOperation = new PendingFileSend(transferChannel, SharedPtr()); connect(sendOperation, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onSendFinished(Tp::PendingOperation*))); } void FileSender::onSendFinished(PendingOperation *op) { PendingFileSend *sendOperation = qobject_cast(op); qDebug() << "Closing channel"; sendOperation->channel()->requestClose(); QCoreApplication::exit(0); } int main(int argc, char **argv) { QCoreApplication app(argc, argv); if (argc != 4) { qDebug() << "usage:" << argv[0] << " "; return 1; } QString filePath = QLatin1String(argv[3]); QFileInfo fileInfo(filePath); if (!fileInfo.exists()) { qWarning() << "File" << filePath << "does not exist"; return 1; } Tp::registerTypes(); Tp::enableDebug(false); Tp::enableWarnings(true); new FileSender(QLatin1String(argv[1]), QLatin1String(argv[2]), filePath, &app); return app.exec(); } #include "_gen/file-sender.moc.hpp" telepathy-qt-0.9.3/examples/file-transfer/CMakeLists.txt0000644000175200001440000000211512000056607025532 0ustar00collabora-develusers00000000000000set(ft-receiver_SRCS file-receiver.cpp file-receiver-handler.cpp pending-file-receive.cpp pending-file-transfer.cpp) set(ft-receiver_MOC_SRCS file-receiver.h file-receiver-handler.h pending-file-receive.h pending-file-transfer.h) tpqt_generate_mocs(${ft-receiver_MOC_SRCS}) add_executable(ft-receiver ${ft-receiver_SRCS} ${ft-receiver_MOC_SRCS}) target_link_libraries(ft-receiver ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} ${QT_QTNETWORK_LIBRARY} ${QT_QTXML_LIBRARY} telepathy-qt${QT_VERSION_MAJOR} ${TP_QT_EXECUTABLE_LINKER_FLAGS}) set(ft-sender_SRCS file-sender.cpp pending-file-send.cpp pending-file-transfer.cpp) set(ft-sender_MOC_SRCS file-sender.h pending-file-send.h pending-file-transfer.h) tpqt_generate_mocs(${ft-sender_MOC_SRCS}) add_executable(ft-sender ${ft-sender_SRCS} ${ft-sender_MOC_SRCS}) target_link_libraries(ft-sender ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} ${QT_QTNETWORK_LIBRARY} ${QT_QTXML_LIBRARY} telepathy-qt${QT_VERSION_MAJOR} ${TP_QT_EXECUTABLE_LINKER_FLAGS}) telepathy-qt-0.9.3/examples/file-transfer/pending-file-send.h0000644000175200001440000000320212000056607026431 0ustar00collabora-develusers00000000000000/* * This file is part of TelepathyQt * * Copyright (C) 2011 Collabora Ltd. * Copyright (C) 2011 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 _TelepathyQt_examples_file_transfer_pending_file_send_h_HEADER_GUARD_ #define _TelepathyQt_examples_file_transfer_pending_file_send_h_HEADER_GUARD_ #include #include #include #include "pending-file-transfer.h" using namespace Tp; class PendingFileSend : public PendingFileTransfer { Q_OBJECT Q_DISABLE_COPY(PendingFileSend) public: PendingFileSend(const OutgoingFileTransferChannelPtr &chan, const SharedPtr &object); ~PendingFileSend(); private Q_SLOTS: void onTransferStateChanged(Tp::FileTransferState state, Tp::FileTransferStateChangeReason stateReason); private: bool mSendingFile; QFile mFile; }; #endif telepathy-qt-0.9.3/examples/file-transfer/pending-file-receive.h0000644000175200001440000000322612000056607027130 0ustar00collabora-develusers00000000000000/* * This file is part of TelepathyQt * * Copyright (C) 2011 Collabora Ltd. * Copyright (C) 2011 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 _TelepathyQt_examples_file_transfer_pending_file_receive_h_HEADER_GUARD_ #define _TelepathyQt_examples_file_transfer_pending_file_receive_h_HEADER_GUARD_ #include #include #include #include "pending-file-transfer.h" using namespace Tp; class PendingFileReceive : public PendingFileTransfer { Q_OBJECT Q_DISABLE_COPY(PendingFileReceive) public: PendingFileReceive(const IncomingFileTransferChannelPtr &chan, const SharedPtr &object); ~PendingFileReceive(); private Q_SLOTS: void onTransferStateChanged(Tp::FileTransferState state, Tp::FileTransferStateChangeReason stateReason); private: bool mReceivingFile; QFile mFile; }; #endif telepathy-qt-0.9.3/examples/file-transfer/file-sender.h0000644000175200001440000000374512000056607025352 0ustar00collabora-develusers00000000000000/* * This file is part of TelepathyQt * * Copyright (C) 2011 Collabora Ltd. * Copyright (C) 2011 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 _TelepathyQt_examples_file_transfer_file_sender_h_HEADER_GUARD_ #define _TelepathyQt_examples_file_transfer_file_sender_h_HEADER_GUARD_ #include #include using namespace Tp; namespace Tp { class PendingOperation; } class FileSender : public QObject { Q_OBJECT Q_DISABLE_COPY(FileSender) public: FileSender(const QString &accountName, const QString &receiverID, const QString &filePath, QObject *parent); ~FileSender(); private Q_SLOTS: void onAMReady(Tp::PendingOperation *op); void onAccountReady(Tp::PendingOperation *op); void onAccountConnectionChanged(const Tp::ConnectionPtr &conn); void onContactRetrieved(Tp::PendingOperation *op); void onContactCapabilitiesChanged(); void onTransferRequestFinished(Tp::PendingOperation *op); void onSendFinished(Tp::PendingOperation *op); private: QString mAccountName; QString mReceiver; QString mFilePath; bool mTransferRequested; AccountManagerPtr mAM; AccountPtr mAccount; ConnectionPtr mConnection; ContactPtr mContact; }; #endif telepathy-qt-0.9.3/examples/file-transfer/pending-file-send.cpp0000644000175200001440000000535712000056607027001 0ustar00collabora-develusers00000000000000/* * This file is part of TelepathyQt * * Copyright (C) 2011 Collabora Ltd. * Copyright (C) 2011 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 */ #include "pending-file-send.h" #include "_gen/pending-file-send.moc.hpp" #include #include #include #include #include #include PendingFileSend::PendingFileSend(const OutgoingFileTransferChannelPtr &chan, const SharedPtr &object) : PendingFileTransfer(FileTransferChannelPtr::qObjectCast(chan), object), mSendingFile(false) { // connect/call onTransferStateChanged here as now we are constructed, otherwise doing it in the base // class would only invoke the base class slot connect(chan.data(), SIGNAL(stateChanged(Tp::FileTransferState,Tp::FileTransferStateChangeReason)), SLOT(onTransferStateChanged(Tp::FileTransferState,Tp::FileTransferStateChangeReason))); onTransferStateChanged(chan->state(), chan->stateReason()); } PendingFileSend::~PendingFileSend() { mFile.close(); } void PendingFileSend::onTransferStateChanged(FileTransferState state, FileTransferStateChangeReason stateReason) { PendingFileTransfer::onTransferStateChanged(state, stateReason); if (state == FileTransferStateAccepted) { Q_ASSERT(!mSendingFile); mSendingFile = true; OutgoingFileTransferChannelPtr chan = OutgoingFileTransferChannelPtr::qObjectCast(channel()); Q_ASSERT(chan); QString uri = chan->uri(); mFile.setFileName(QUrl(uri).toLocalFile()); if (!mFile.open(QIODevice::ReadOnly)) { qWarning() << "Unable to open" << uri << "for reading, aborting transfer"; setFinishedWithError(TP_QT_ERROR_INVALID_ARGUMENT, QLatin1String("Unable to open file for reading")); return; } qDebug() << "Sending" << uri << "to" << chan->targetId(); chan->provideFile(&mFile); } } telepathy-qt-0.9.3/examples/extensions/0000755000175200001440000000000012000056607022431 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/examples/extensions/cli-connection.h0000644000175200001440000000021412000056607025503 0ustar00collabora-develusers00000000000000#ifndef _Example_Client_Connection_HEADER_GUARD_ #define _Example_Client_Connection_HEADER_GUARD_ #include "_gen/cli-connection.h" #endif telepathy-qt-0.9.3/examples/extensions/cli-connection.cpp0000644000175200001440000000010312000056607026033 0ustar00collabora-develusers00000000000000#include "cli-connection.h" #include "_gen/cli-connection.moc.hpp" telepathy-qt-0.9.3/examples/extensions/all.xml0000644000175200001440000000105012000056607023717 0ustar00collabora-develusers00000000000000 Extensions for 'extended' examples telepathy-qt-0.9.3/examples/extensions/types.cpp0000644000175200001440000000003712000056607024301 0ustar00collabora-develusers00000000000000#include "_gen/types-body.hpp" telepathy-qt-0.9.3/examples/extensions/Connection_Interface_Hats.xml0000644000175200001440000001450712000056607030220 0ustar00collabora-develusers00000000000000 Copyright (C) 2007 Collabora Ltd. Copyright (C) 2007 Nokia Corporation Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This interface is an example of how Telepathy can be extended. For the purposes of this example, we pretend we're an organisation example.com that's adding a proprietary extension to Telepathy, so the extension is not in the main Telepathy namespace. A data structure representing a contact and their hat. The contact wearing the hat. The color of the hat The style of the hat Optional key-value pairs describing extended properties of the hat. There is no hat. color MUST be the empty string and properties MUST be an empty mapping. An unspecified type of hat. A fedora, which MAY be red. A knitted hat, with or without a bobble. A bowler hat, as worn by stereotypical English businessmen. A hat with protective qualities. Emitted when the contact's hat has changed. The handle representing the contact's ID on the server The color of the contact's hat. The style of the contact's hat. There's always an a{sv}. Perhaps there's some special religious reason. Request a list of the hats worn by the given contacts. The handles of the contacts whose hats are requested A list of contacts and their hats. Indicate that the hat currently being worn by the local user has changed. The color of the contact's hat. The style of the contact's hat. There's always an a{sv}... Request the prices of a contact's current hat. The handle of the contact whose hat we're interested in purchasing. The price of the hat. This hat is not for sale. Get your own style, you trend-follower! telepathy-qt-0.9.3/examples/extensions/connection.xml0000644000175200001440000000040412000056607025310 0ustar00collabora-develusers00000000000000 Connection extensions for 'extended' example telepathy-qt-0.9.3/examples/extensions/CMakeLists.txt0000644000175200001440000000756412000056607025205 0ustar00collabora-develusers00000000000000# This directory is an example of how to build extensions to the spec. # Typically this would be in a top-level extensions/ directory. # In this example we build an optional interface for Telepathy Connections, # so we specify Tp::Client::ConnectionInterface as the main interface for the # generated proxies with "--mainiface=Tp::Client::ConnectionInterface'. The # generated proxies will have a convenience constructors for associating the # proxy with the same remote object an instance of the main interface class # is associated with. We could instead have made an optional interface for any # other class, or by leaving that option out entirely we could have made an # extension that will work on QDBusAbstractInterface or any subclass of it. # # For stand-alone interfaces (for which the interface itself should be considered # the main interface) --mainiface should be specified as fully namespaced name # of the interface class itself. set(example_extensions_SRCS cli-connection.cpp cli-connection.h types.cpp) file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/_gen) set(generated_all_xml ${CMAKE_CURRENT_BINARY_DIR}/_gen/all.xml) tpqt_xincludator(example-extensions-includator ${CMAKE_CURRENT_SOURCE_DIR}/all.xml ${generated_all_xml}) tpqt_constants_gen(example-extensions-constants ${generated_all_xml} ${CMAKE_CURRENT_BINARY_DIR}/_gen/constants.h --namespace=Example --str-constant-prefix=EXAMPLE_ DEPENDS example-extensions-includator) if(MSVC) set(TYPES_INCLUDE ^) else(MSVC) set(TYPES_INCLUDE '') endif(MSVC) tpqt_types_gen(example-extensions-typesgen ${generated_all_xml} ${CMAKE_CURRENT_BINARY_DIR}/_gen/types.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/types-body.hpp Example types.h types.h --extraincludes=${TYPES_INCLUDE} DEPENDS example-extensions-constants) set(connection_generated_xml ${CMAKE_CURRENT_BINARY_DIR}/_gen/connection.xml) tpqt_xincludator(example-extensions-connection-includator ${CMAKE_CURRENT_SOURCE_DIR}/connection.xml ${connection_generated_xml}) if(MSVC) set(ESCAPED_QUOTES \"\"\") set(connection_include ^) else(MSVC) set(ESCAPED_QUOTES \\\") set(connection_include '') endif(MSVC) add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-connection-body.hpp ${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-connection.h COMMAND ${PYTHON_EXECUTABLE} ARGS ${CMAKE_SOURCE_DIR}/tools/qt-client-gen.py --namespace=Example::Client --typesnamespace=Example --headerfile=${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-connection.h --implfile=${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-connection-body.hpp --realinclude=${CMAKE_CURRENT_SRC_DIR}/cli-connection.h --specxml=${generated_all_xml} --ifacexml=${connection_generated_xml} --extraincludes=${connection_include},${ESCAPED_QUOTES}types.h${ESCAPED_QUOTES} --mainiface=Tp::Client::ConnectionInterface) add_custom_target(example-extensions-connection-generation) add_dependencies(example-extensions-connection-generation example-extensions-connection-includator example-extensions-typesgen) list(APPEND example_extensions_SRCS ${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-connection-body.hpp ${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-connection.h) tpqt_generate_moc_i(${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-connection.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-connection.moc.hpp) list(APPEND example_extensions_SRCS ${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-connection.moc.hpp) add_library(example_extensions STATIC ${example_extensions_SRCS}) add_dependencies(example_extensions example-extensions-connection-generation) target_link_libraries(example_extensions ${QT_QTDBUS_LIBRARY} ${QT_QTCORE_LIBRARY} telepathy-qt${QT_VERSION_MAJOR} ${TP_QT_LIBRARY_LINKER_FLAGS}) telepathy-qt-0.9.3/examples/extensions/types.h0000644000175200001440000000015312000056607023745 0ustar00collabora-develusers00000000000000#ifndef _Example_Types_HEADER_GUARD_ #define _Example_Types_HEADER_GUARD_ #include "_gen/types.h" #endif telepathy-qt-0.9.3/examples/roster/0000755000175200001440000000000012000056607021550 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/examples/roster/roster-window.h0000644000175200001440000000304312000056607024544 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009-2011 Collabora Ltd. * @license LGPL 2.1 * * 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 _TelepathyQt_examples_roster_roster_window_h_HEADER_GUARD_ #define _TelepathyQt_examples_roster_roster_window_h_HEADER_GUARD_ #include #include #include namespace Tp { class PendingOperation; } class RosterWidget; class RosterWindow : public QMainWindow { Q_OBJECT public: RosterWindow(const QString &accountName, QWidget *parent = 0); virtual ~RosterWindow(); private Q_SLOTS: void onAccountReady(Tp::PendingOperation *op); void onAccountConnectionChanged(const Tp::ConnectionPtr &conn); private: void setupGui(); Tp::AccountPtr mAccount; RosterWidget *mRoster; }; #endif telepathy-qt-0.9.3/examples/roster/main.cpp0000644000175200001440000000264012000056607023202 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009-2011 Collabora Ltd. * @license LGPL 2.1 * * 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 */ #include #include #include #include #include #include "roster-window.h" int main(int argc, char **argv) { QApplication app(argc, argv); if (argc < 2) { qDebug() << "usage:" << argv[0] << ""; return 1; } Tp::registerTypes(); Tp::enableDebug(true); Tp::enableWarnings(true); QString accountPath = QLatin1String(argv[1]); RosterWindow w(accountPath); w.show(); return app.exec(); } telepathy-qt-0.9.3/examples/roster/roster-item.h0000644000175200001440000000273112000056607024176 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @license LGPL 2.1 * * 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 _TelepathyQt_examples_roster_roster_item_h_HEADER_GUARD_ #define _TelepathyQt_examples_roster_roster_item_h_HEADER_GUARD_ #include #include #include #include class RosterItem : public QObject, public QListWidgetItem { Q_OBJECT public: RosterItem(const Tp::ContactPtr &contact, QListWidget *parent = 0); ~RosterItem(); Tp::ContactPtr contact() const { return mContact; } Q_SIGNALS: void changed(); private Q_SLOTS: void onContactChanged(); private: Tp::ContactPtr mContact; }; #endif telepathy-qt-0.9.3/examples/roster/roster-window.cpp0000644000175200001440000000632212000056607025102 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009-2011 Collabora Ltd. * @license LGPL 2.1 * * 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 */ #include "roster-window.h" #include "_gen/roster-window.moc.hpp" #include "roster-widget.h" #include #include #include #include #include #include #include #include using namespace Tp; RosterWindow::RosterWindow(const QString &accountName, QWidget *parent) : QMainWindow(parent) { setWindowTitle(QLatin1String("Roster")); setupGui(); ChannelFactoryPtr channelFactory = ChannelFactory::create( QDBusConnection::sessionBus()); ConnectionFactoryPtr connectionFactory = ConnectionFactory::create( QDBusConnection::sessionBus(), Connection::FeatureConnected | Connection::FeatureRoster | Connection::FeatureRosterGroups); ContactFactoryPtr contactFactory = ContactFactory::create( Contact::FeatureAlias | Contact::FeatureSimplePresence); mAccount = Account::create(TP_QT_ACCOUNT_MANAGER_BUS_NAME, TP_QT_ACCOUNT_OBJECT_PATH_BASE + QLatin1Char('/') + accountName, connectionFactory, channelFactory, contactFactory); connect(mAccount->becomeReady(Account::FeatureCore), SIGNAL(finished(Tp::PendingOperation *)), SLOT(onAccountReady(Tp::PendingOperation *))); resize(240, 320); } RosterWindow::~RosterWindow() { } void RosterWindow::setupGui() { mRoster = new RosterWidget(); setCentralWidget(mRoster); } void RosterWindow::onAccountReady(Tp::PendingOperation *op) { if (op->isError()) { qWarning() << "Account cannot become ready - " << op->errorName() << '-' << op->errorMessage(); QCoreApplication::exit(1); return; } qDebug() << "Account ready"; connect(mAccount.data(), SIGNAL(connectionChanged(Tp::ConnectionPtr)), SLOT(onAccountConnectionChanged(Tp::ConnectionPtr))); if (mAccount->connection().isNull()) { qDebug() << "The account given has no Connection. Please set it online to continue."; } onAccountConnectionChanged(mAccount->connection()); } void RosterWindow::onAccountConnectionChanged(const ConnectionPtr &conn) { if (conn) { mRoster->setConnection(conn); } else { mRoster->unsetConnection(); } } telepathy-qt-0.9.3/examples/roster/CMakeLists.txt0000644000175200001440000000207312000056607024312 0ustar00collabora-develusers00000000000000set(roster_SRCS main.cpp roster-window.cpp roster-item.cpp roster-widget.cpp) set(roster_MOC_SRCS roster-window.h roster-item.h roster-widget.h) tpqt_generate_mocs(${roster_MOC_SRCS}) add_executable(roster ${roster_SRCS} ${roster_MOC_SRCS}) target_link_libraries(roster ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTNETWORK_LIBRARY} ${QT_QTWIDGETS_LIBRARY} ${QT_QTXML_LIBRARY} telepathy-qt${QT_VERSION_MAJOR} ${TP_QT_EXECUTABLE_LINKER_FLAGS}) set(telepathy_qt_examples_roster_SRCS roster-item.cpp roster-widget.cpp ${CMAKE_CURRENT_BINARY_DIR}/_gen/roster-item.moc.hpp ${CMAKE_CURRENT_BINARY_DIR}/_gen/roster-widget.moc.hpp) add_library(telepathy-qt-examples-roster ${telepathy_qt_examples_roster_SRCS}) target_link_libraries(telepathy-qt-examples-roster ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTNETWORK_LIBRARY} ${QT_QTWIDGETS_LIBRARY} ${QT_QTXML_LIBRARY} telepathy-qt${QT_VERSION_MAJOR} ${TP_QT_LIBRARY_LINKER_FLAGS}) telepathy-qt-0.9.3/examples/roster/roster-widget.cpp0000644000175200001440000002645512000056607025067 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009-2011 Collabora Ltd. * @license LGPL 2.1 * * 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 */ #include "roster-widget.h" #include "_gen/roster-widget.moc.hpp" #include "roster-item.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace Tp; RosterWidget::RosterWidget(QWidget *parent) : QWidget(parent) { setWindowTitle(QLatin1String("Roster")); createActions(); setupGui(); } RosterWidget::~RosterWidget() { } void RosterWidget::setConnection(const ConnectionPtr &conn) { if (mConn) { unsetConnection(); } mConn = conn; connect(conn->contactManager().data(), SIGNAL(presencePublicationRequested(const Tp::Contacts &)), SLOT(onPresencePublicationRequested(const Tp::Contacts &))); // TODO listen to allKnownContactsChanged connect(conn->contactManager().data(), SIGNAL(stateChanged(Tp::ContactListState)), SLOT(onContactManagerStateChanged(Tp::ContactListState))); onContactManagerStateChanged(conn->contactManager()->state()); } void RosterWidget::unsetConnection() { while (mList->count() > 0) { RosterItem *item = (RosterItem *) mList->item(0); mList->takeItem(0); delete item; } mConn.reset(); updateActions(); mAddBtn->setEnabled(false); } void RosterWidget::createActions() { mAuthAction = new QAction(QLatin1String("Authorize Contact"), this); mAuthAction->setEnabled(false); connect(mAuthAction, SIGNAL(triggered(bool)), SLOT(onAuthActionTriggered(bool))); mDenyAction = new QAction(QLatin1String("Deny Contact"), this); mDenyAction->setEnabled(false); connect(mDenyAction, SIGNAL(triggered(bool)), SLOT(onDenyActionTriggered(bool))); mRemoveAction = new QAction(QLatin1String("Remove Contact"), this); mRemoveAction->setEnabled(false); connect(mRemoveAction, SIGNAL(triggered(bool)), SLOT(onRemoveActionTriggered(bool))); mBlockAction = new QAction(QLatin1String("Block Contact"), this); mBlockAction->setEnabled(false); mBlockAction->setCheckable(true); connect(mBlockAction, SIGNAL(triggered(bool)), SLOT(onBlockActionTriggered(bool))); } void RosterWidget::setupGui() { QVBoxLayout *vbox = new QVBoxLayout; mList = new QListWidget; connect(mList, SIGNAL(itemSelectionChanged()), SLOT(onItemSelectionChanged())); vbox->addWidget(mList); mList->setContextMenuPolicy(Qt::ActionsContextMenu); mList->addAction(mAuthAction); mList->addAction(mDenyAction); mList->addAction(mRemoveAction); mList->addAction(mBlockAction); QHBoxLayout *hbox = new QHBoxLayout; mAddBtn = new QPushButton(QLatin1String("+")); mAddBtn->setEnabled(false); connect(mAddBtn, SIGNAL(clicked(bool)), SLOT(onAddButtonClicked())); hbox->addWidget(mAddBtn); hbox->addStretch(1); vbox->addLayout(hbox); setLayout(vbox); mAddDlg = new QDialog(this); mAddDlg->setWindowTitle(QLatin1String("Add Contact")); QVBoxLayout *addDlgVBox = new QVBoxLayout; QHBoxLayout *addDlgEntryHBox = new QHBoxLayout; QLabel *label = new QLabel(QLatin1String("Username")); addDlgEntryHBox->addWidget(label); mAddDlgEdt = new QLineEdit(); addDlgEntryHBox->addWidget(mAddDlgEdt); addDlgVBox->addLayout(addDlgEntryHBox); QDialogButtonBox *addDlgBtnBox = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal); connect(addDlgBtnBox, SIGNAL(accepted()), mAddDlg, SLOT(accept())); connect(addDlgBtnBox, SIGNAL(rejected()), mAddDlg, SLOT(reject())); addDlgVBox->addWidget(addDlgBtnBox); mAddDlg->setLayout(addDlgVBox); } RosterItem *RosterWidget::createItemForContact(const ContactPtr &contact, bool &exists) { RosterItem *item; exists = false; for (int i = 0; i < mList->count(); ++i) { item = dynamic_cast(mList->item(i)); if (item->contact() == contact) { exists = true; return item; } } return new RosterItem(contact, mList); } void RosterWidget::onContactManagerStateChanged(ContactListState state) { if (state == ContactListStateSuccess) { qDebug() << "Loading contacts"; RosterItem *item; bool exists; foreach (const ContactPtr &contact, mConn->contactManager()->allKnownContacts()) { exists = false; item = createItemForContact(contact, exists); if (!exists) { connect(item, SIGNAL(changed()), SLOT(updateActions())); } } mAddBtn->setEnabled(true); } } void RosterWidget::onPresencePublicationRequested(const Contacts &contacts) { qDebug() << "Presence publication requested"; RosterItem *item; bool exists; foreach (const ContactPtr &contact, contacts) { exists = false; item = createItemForContact(contact, exists); if (!exists) { connect(item, SIGNAL(changed()), SLOT(updateActions())); } } } void RosterWidget::onItemSelectionChanged() { updateActions(); } void RosterWidget::onAddButtonClicked() { mAddDlgEdt->clear(); int ret = mAddDlg->exec(); if (ret == QDialog::Rejected) { return; } QString username = mAddDlgEdt->text(); PendingContacts *pcontacts = mConn->contactManager()->contactsForIdentifiers( QStringList() << username); connect(pcontacts, SIGNAL(finished(Tp::PendingOperation *)), SLOT(onContactRetrieved(Tp::PendingOperation *))); } void RosterWidget::onAuthActionTriggered(bool checked) { Q_UNUSED(checked); QList selectedItems = mList->selectedItems(); if (selectedItems.isEmpty()) { return; } Q_ASSERT(selectedItems.size() == 1); RosterItem *item = dynamic_cast(selectedItems.first()); if (item->contact()->publishState() != Contact::PresenceStateYes) { item->contact()->authorizePresencePublication(); } } void RosterWidget::onDenyActionTriggered(bool checked) { Q_UNUSED(checked); QList selectedItems = mList->selectedItems(); if (selectedItems.isEmpty()) { return; } Q_ASSERT(selectedItems.size() == 1); RosterItem *item = dynamic_cast(selectedItems.first()); if (item->contact()->publishState() != Contact::PresenceStateNo) { // The contact can't see my presence item->contact()->removePresencePublication(); } } void RosterWidget::onRemoveActionTriggered(bool checked) { Q_UNUSED(checked); QList selectedItems = mList->selectedItems(); if (selectedItems.isEmpty()) { return; } Q_ASSERT(selectedItems.size() == 1); RosterItem *item = dynamic_cast(selectedItems.first()); if (item->contact()->subscriptionState() != Contact::PresenceStateNo) { // The contact can't see my presence and I can't see his/her presence item->contact()->removePresencePublication(); item->contact()->removePresenceSubscription(); } } void RosterWidget::onBlockActionTriggered(bool checked) { QList selectedItems = mList->selectedItems(); if (selectedItems.isEmpty()) { return; } Q_ASSERT(selectedItems.size() == 1); RosterItem *item = dynamic_cast(selectedItems.first()); if (checked) { item->contact()->block(); } else { item->contact()->unblock(); } } void RosterWidget::onContactRetrieved(Tp::PendingOperation *op) { PendingContacts *pcontacts = qobject_cast(op); QList contacts = pcontacts->contacts(); Q_ASSERT(pcontacts->identifiers().size() == 1); QString username = pcontacts->identifiers().first(); if (contacts.size() != 1 || !contacts.first()) { QMessageBox msgBox; msgBox.setText(QString(QLatin1String("Unable to add contact \"%1\"")).arg(username)); msgBox.exec(); return; } ContactPtr contact = contacts.first(); qDebug() << "Request presence subscription for contact" << username; bool exists = false; RosterItem *item = createItemForContact(contact, exists); if (!exists) { connect(item, SIGNAL(changed()), SLOT(updateActions())); } contact->requestPresenceSubscription(); } void RosterWidget::updateActions() { QList selectedItems = mList->selectedItems(); if (selectedItems.isEmpty()) { mAuthAction->setEnabled(false); mDenyAction->setEnabled(false); mRemoveAction->setEnabled(false); mBlockAction->setEnabled(false); updateActions(0); return; } Q_ASSERT(selectedItems.size() == 1); RosterItem *item = dynamic_cast(selectedItems.first()); ContactPtr contact = item->contact(); ContactManagerPtr manager = contact->manager(); qDebug() << "Contact" << contact->id() << "selected"; qDebug() << " subscription state:" << contact->subscriptionState(); qDebug() << " publish state :" << contact->publishState(); qDebug() << " blocked :" << contact->isBlocked(); if (manager->canAuthorizePresencePublication() && contact->publishState() == Contact::PresenceStateAsk) { mAuthAction->setEnabled(true); } else { mAuthAction->setEnabled(false); } if (manager->canRemovePresencePublication() && contact->publishState() != Contact::PresenceStateNo) { mDenyAction->setEnabled(true); } else { mDenyAction->setEnabled(false); } if (manager->canRemovePresenceSubscription() && contact->subscriptionState() != Contact::PresenceStateNo) { mRemoveAction->setEnabled(true); } else { mRemoveAction->setEnabled(false); } if (manager->canBlockContacts() && contact->publishState() == Contact::PresenceStateYes) { mBlockAction->setEnabled(true); } else { mBlockAction->setEnabled(false); } mBlockAction->setChecked(contact->isBlocked()); updateActions(item); } telepathy-qt-0.9.3/examples/roster/roster-widget.h0000644000175200001440000000500212000056607024515 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009-2011 Collabora Ltd. * @license LGPL 2.1 * * 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 _TelepathyQt_examples_roster_roster_widget_h_HEADER_GUARD_ #define _TelepathyQt_examples_roster_roster_widget_h_HEADER_GUARD_ #include #include #include namespace Tp { class Connection; class PendingOperation; } class QAction; class QDialog; class QLineEdit; class QListWidget; class QListWidgetItem; class QPushButton; class RosterItem; class RosterWidget : public QWidget { Q_OBJECT public: RosterWidget(QWidget *parent = 0); virtual ~RosterWidget(); Tp::ConnectionPtr connection() const { return mConn; } void setConnection(const Tp::ConnectionPtr &conn); void unsetConnection(); QListWidget *listWidget() const { return mList; } protected: virtual RosterItem *createItemForContact( const Tp::ContactPtr &contact, bool &exists); virtual void updateActions(RosterItem *item) { } private Q_SLOTS: void onContactManagerStateChanged(Tp::ContactListState state); void onPresencePublicationRequested(const Tp::Contacts &); void onItemSelectionChanged(); void onAddButtonClicked(); void onAuthActionTriggered(bool); void onDenyActionTriggered(bool); void onRemoveActionTriggered(bool); void onBlockActionTriggered(bool); void onContactRetrieved(Tp::PendingOperation *op); void updateActions(); private: void createActions(); void setupGui(); Tp::ConnectionPtr mConn; QAction *mAuthAction; QAction *mRemoveAction; QAction *mDenyAction; QAction *mBlockAction; QListWidget *mList; QPushButton *mAddBtn; QDialog *mAddDlg; QLineEdit *mAddDlgEdt; }; #endif telepathy-qt-0.9.3/examples/roster/roster-item.cpp0000644000175200001440000000542012000056607024527 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009-2011 Collabora Ltd. * @license LGPL 2.1 * * 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 */ #include "roster-item.h" #include "_gen/roster-item.moc.hpp" #include using namespace Tp; RosterItem::RosterItem(const ContactPtr &contact, QListWidget *parent) : QObject(parent), QListWidgetItem(parent), mContact(contact) { onContactChanged(); connect(contact.data(), SIGNAL(aliasChanged(QString)), SLOT(onContactChanged())); connect(contact.data(), SIGNAL(presenceChanged(Tp::Presence)), SLOT(onContactChanged())); connect(contact.data(), SIGNAL(subscriptionStateChanged(Tp::Contact::PresenceState)), SLOT(onContactChanged())); connect(contact.data(), SIGNAL(publishStateChanged(Tp::Contact::PresenceState,QString)), SLOT(onContactChanged())); connect(contact.data(), SIGNAL(blockStatusChanged(bool)), SLOT(onContactChanged())); } RosterItem::~RosterItem() { } void RosterItem::onContactChanged() { QString status = mContact->presence().status(); // I've asked to see the contact presence if (mContact->subscriptionState() == Contact::PresenceStateAsk) { setText(QString(QLatin1String("%1 (%2) (awaiting approval)")).arg(mContact->id()).arg(status)); // The contact asked to see my presence } else if (mContact->publishState() == Contact::PresenceStateAsk) { setText(QString(QLatin1String("%1 (%2) (pending approval)")).arg(mContact->id()).arg(status)); } else if (mContact->subscriptionState() == Contact::PresenceStateNo && mContact->publishState() == Contact::PresenceStateNo) { setText(QString(QLatin1String("%1 (unknown)")).arg(mContact->id())); } else { setText(QString(QLatin1String("%1 (%2)")).arg(mContact->id()).arg(status)); } if (mContact->isBlocked()) { setText(QString(QLatin1String("%1 (blocked)")).arg(text())); } emit changed(); } telepathy-qt-0.9.3/examples/accounts/0000755000175200001440000000000012000056607022051 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/examples/accounts/main.cpp0000644000175200001440000000057212000056607023505 0ustar00collabora-develusers00000000000000#include #include #include #include #include #include "accounts-window.h" int main(int argc, char **argv) { QApplication app(argc, argv); Tp::registerTypes(); Tp::enableDebug(true); Tp::enableWarnings(true); AccountsWindow w; w.show(); return app.exec(); } telepathy-qt-0.9.3/examples/accounts/account-item.cpp0000644000175200001440000001537712000056607025162 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @license LGPL 2.1 * * 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 */ #include "account-item.h" #include "_gen/account-item.moc.hpp" #include #include #include #include #include AccountItem::AccountItem(Tp::AccountPtr acc, QTableWidget *table, int row, QObject *parent) : QObject(parent), mAcc(acc), mTable(table), mRow(row) { init(); } AccountItem::~AccountItem() { } void AccountItem::setupGui() { mTable->setItem(mRow, ColumnValid, new QTableWidgetItem(mAcc->isValid() ? QLatin1String("true") : QLatin1String("false"))); mTable->setItem(mRow, ColumnEnabled, new QTableWidgetItem(mAcc->isEnabled() ? QLatin1String("true") : QLatin1String("false"))); mTable->setItem(mRow, ColumnConnectionManager, new QTableWidgetItem(mAcc->cmName())); mTable->setItem(mRow, ColumnProtocol, new QTableWidgetItem(mAcc->protocolName())); mTable->setItem(mRow, ColumnDisplayName, new QTableWidgetItem(mAcc->displayName())); mTable->setItem(mRow, ColumnNickname, new QTableWidgetItem(mAcc->nickname())); mTable->setItem(mRow, ColumnConnectsAutomatically, new QTableWidgetItem(mAcc->connectsAutomatically() ? QLatin1String("true") : QLatin1String("false"))); mTable->setItem(mRow, ColumnAutomaticPresence, new QTableWidgetItem(mAcc->automaticPresence().status())); mTable->setItem(mRow, ColumnCurrentPresence, new QTableWidgetItem(mAcc->currentPresence().status())); mTable->setItem(mRow, ColumnRequestedPresence, new QTableWidgetItem(mAcc->requestedPresence().status())); mTable->setItem(mRow, ColumnChangingPresence, new QTableWidgetItem(mAcc->isChangingPresence() ? QLatin1String("true") : QLatin1String("false"))); mTable->setItem(mRow, ColumnConnectionStatus, new QTableWidgetItem(QString::number(mAcc->connectionStatus()))); mTable->setItem(mRow, ColumnConnection, new QTableWidgetItem( mAcc->connection().isNull() ? QLatin1String("") : mAcc->connection()->objectPath())); } void AccountItem::init() { setupGui(); Tp::Account *acc = mAcc.data(); connect(acc, SIGNAL(validityChanged(bool)), SLOT(onValidityChanged(bool))); connect(acc, SIGNAL(stateChanged(bool)), SLOT(onStateChanged(bool))); connect(acc, SIGNAL(displayNameChanged(const QString &)), SLOT(onDisplayNameChanged(const QString &))); connect(acc, SIGNAL(nicknameChanged(const QString &)), SLOT(onNicknameChanged(const QString &))); connect(acc, SIGNAL(connectsAutomaticallyPropertyChanged(bool)), SLOT(onConnectsAutomaticallyPropertyChanged(bool))); connect(acc, SIGNAL(changingPresence(bool)), SLOT(onChangingPresenceChanged(bool))); connect(acc, SIGNAL(automaticPresenceChanged(const Tp::SimplePresence &)), SLOT(onAutomaticPresenceChanged(const Tp::SimplePresence &))); connect(acc, SIGNAL(currentPresenceChanged(const Tp::SimplePresence &)), SLOT(onCurrentPresenceChanged(const Tp::SimplePresence &))); connect(acc, SIGNAL(requestedPresenceChanged(const Tp::SimplePresence &)), SLOT(onRequestedPresenceChanged(const Tp::SimplePresence &))); connect(acc, SIGNAL(statusChanged(Tp::ConnectionStatus, Tp::ConnectionStatusReason, const QString &, const QVariantMap &)), SLOT(onStatusChanged(Tp::ConnectionStatus, Tp::ConnectionStatusReason, const QString &, const QVariantMap &))); connect(acc, SIGNAL(haveConnectionChanged(bool)), SLOT(onHaveConnectionChanged(bool))); } void AccountItem::onValidityChanged(bool valid) { QTableWidgetItem *item = mTable->item(mRow, ColumnValid); item->setText((valid ? QLatin1String("true") : QLatin1String("false"))); } void AccountItem::onStateChanged(bool enabled) { QTableWidgetItem *item = mTable->item(mRow, ColumnEnabled); item->setText((enabled ? QLatin1String("true") : QLatin1String("false"))); } void AccountItem::onDisplayNameChanged(const QString &name) { QTableWidgetItem *item = mTable->item(mRow, ColumnDisplayName); item->setText(name); } void AccountItem::onNicknameChanged(const QString &name) { QTableWidgetItem *item = mTable->item(mRow, ColumnNickname); item->setText(name); } void AccountItem::onConnectsAutomaticallyPropertyChanged(bool value) { QTableWidgetItem *item = mTable->item(mRow, ColumnConnectsAutomatically); item->setText((value ? QLatin1String("true") : QLatin1String("false"))); } void AccountItem::onChangingPresenceChanged(bool value) { QTableWidgetItem *item = mTable->item(mRow, ColumnChangingPresence); item->setText((value ? QLatin1String("true") : QLatin1String("false"))); } void AccountItem::onAutomaticPresenceChanged(const Tp::SimplePresence &presence) { QTableWidgetItem *item = mTable->item(mRow, ColumnAutomaticPresence); item->setText(presence.status); } void AccountItem::onCurrentPresenceChanged(const Tp::SimplePresence &presence) { QTableWidgetItem *item = mTable->item(mRow, ColumnCurrentPresence); item->setText(presence.status); } void AccountItem::onRequestedPresenceChanged(const Tp::SimplePresence &presence) { QTableWidgetItem *item = mTable->item(mRow, ColumnRequestedPresence); item->setText(presence.status); } void AccountItem::onStatusChanged(Tp::ConnectionStatus status, Tp::ConnectionStatusReason reason, const QString &error, const QVariantMap &errorDetails) { QTableWidgetItem *item = mTable->item(mRow, ColumnConnectionStatus); item->setText(QString::number(status)); } void AccountItem::onHaveConnectionChanged(bool haveConnection) { QTableWidgetItem *item = mTable->item(mRow, ColumnConnection); item->setText(mAcc->connection().isNull() ? QLatin1String("") : mAcc->connection()->objectPath()); } telepathy-qt-0.9.3/examples/accounts/CMakeLists.txt0000644000175200001440000000104412000056607024610 0ustar00collabora-develusers00000000000000set(accounts_SRCS main.cpp account-item.cpp account-item.h accounts-window.cpp accounts-window.h) set(accounts_MOC_SRCS account-item.h accounts-window.h) tpqt_generate_mocs(${accounts_MOC_SRCS}) add_executable(accounts ${accounts_SRCS} ${accounts_MOC_SRCS}) target_link_libraries(accounts ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTNETWORK_LIBRARY} ${QT_QTWIDGETS_LIBRARY} ${QT_QTXML_LIBRARY} telepathy-qt${QT_VERSION_MAJOR} ${TP_QT_EXECUTABLE_LINKER_FLAGS}) telepathy-qt-0.9.3/examples/accounts/accounts-window.h0000644000175200001440000000275612000056607025360 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @license LGPL 2.1 * * 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 _TelepathyQt_examples_accounts_accounts_window_h_HEADER_GUARD_ #define _TelepathyQt_examples_accounts_accounts_window_h_HEADER_GUARD_ #include #include namespace Tp { class PendingOperation; } class QTableWidget; class QTableWidgetItem; class AccountsWindow : public QMainWindow { Q_OBJECT public: AccountsWindow(QWidget *parent = 0); virtual ~AccountsWindow(); private Q_SLOTS: void onAMReady(Tp::PendingOperation *); void onNewAccount(const Tp::AccountPtr &); private: void setupGui(); Tp::AccountManagerPtr mAM; QTableWidget *mTable; }; #endif telepathy-qt-0.9.3/examples/accounts/account-item.h0000644000175200001440000000513512000056607024616 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @license LGPL 2.1 * * 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 _TelepathyQt_examples_accounts_account_item_h_HEADER_GUARD_ #define _TelepathyQt_examples_accounts_account_item_h_HEADER_GUARD_ #include #include #include #include namespace Tp { class AccountManager; class PendingOperation; } class QTableWidget; class AccountItem : public QObject { Q_OBJECT public: enum Columns { ColumnValid = 0, ColumnEnabled, ColumnConnectionManager, ColumnProtocol, ColumnDisplayName, ColumnNickname, ColumnConnectsAutomatically, ColumnChangingPresence, ColumnAutomaticPresence, ColumnCurrentPresence, ColumnRequestedPresence, ColumnConnectionStatus, ColumnConnection, NumColumns }; Q_ENUMS(Columns) AccountItem(Tp::AccountPtr acc, QTableWidget *table, int row, QObject *parent = 0); virtual ~AccountItem(); int row() const { return mRow; } private Q_SLOTS: void onValidityChanged(bool); void onStateChanged(bool); void onDisplayNameChanged(const QString &); void onNicknameChanged(const QString &); void onConnectsAutomaticallyPropertyChanged(bool); void onChangingPresenceChanged(bool); void onAutomaticPresenceChanged(const Tp::SimplePresence &); void onCurrentPresenceChanged(const Tp::SimplePresence &); void onRequestedPresenceChanged(const Tp::SimplePresence &); void onStatusChanged(Tp::ConnectionStatus, Tp::ConnectionStatusReason, const QString &error, const QVariantMap &errorDetails); void onHaveConnectionChanged(bool); private: void init(); void setupGui(); Tp::AccountPtr mAcc; QTableWidget *mTable; int mRow; }; #endif telepathy-qt-0.9.3/examples/accounts/accounts-window.cpp0000644000175200001440000000611512000056607025704 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @license LGPL 2.1 * * 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 */ #include "accounts-window.h" #include "_gen/accounts-window.moc.hpp" #include "account-item.h" #include #include #include #include #include #include #include #include #include #include #include #include AccountsWindow::AccountsWindow(QWidget *parent) : QMainWindow(parent) { setupGui(); mAM = Tp::AccountManager::create(Tp::AccountFactory::create(QDBusConnection::sessionBus(), Tp::Account::FeatureCore)); connect(mAM->becomeReady(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(onAMReady(Tp::PendingOperation *))); connect(mAM.data(), SIGNAL(newAccount(const Tp::AccountPtr &)), SLOT(onNewAccount(const Tp::AccountPtr &))); } AccountsWindow::~AccountsWindow() { } void AccountsWindow::setupGui() { mTable = new QTableWidget; mTable->setColumnCount(AccountItem::NumColumns); QStringList headerLabels; headerLabels << QLatin1String("Valid") << QLatin1String("Enabled") << QLatin1String("Connection Manager") << QLatin1String("Protocol Name") << QLatin1String("Display Name") << QLatin1String("Nickname") << QLatin1String("Connects Automatically") << QLatin1String("Changing Presence") << QLatin1String("Automatic Presence") << QLatin1String("Current Presence") << QLatin1String("Requested Presence") << QLatin1String("Connection Status") << QLatin1String("Connection"); mTable->setHorizontalHeaderLabels(headerLabels); setCentralWidget(mTable); } void AccountsWindow::onAMReady(Tp::PendingOperation *op) { mTable->setRowCount(mAM->allAccounts().count()); int row = 0; foreach (const Tp::AccountPtr &acc, mAM->allAccounts()) { (void) new AccountItem(acc, mTable, row++, this); } } void AccountsWindow::onNewAccount(const Tp::AccountPtr &acc) { int row = mTable->rowCount(); mTable->insertRow(row); (void) new AccountItem(acc, mTable, row, this); } telepathy-qt-0.9.3/examples/CMakeLists.txt0000644000175200001440000000064212000056607022774 0ustar00collabora-develusers00000000000000# Set the required flags found in TelepathyDefaults set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${DEPRECATED_DECLARATIONS_FLAGS}") set(LD_FLAGS "${LD_FLAGS} ${DEPRECATED_DECLARATIONS_FLAGS}") add_subdirectory(accounts) add_subdirectory(contact-messenger) add_subdirectory(cm) add_subdirectory(extensions) add_subdirectory(file-transfer) add_subdirectory(protocols) add_subdirectory(roster) add_subdirectory(stream-tubes) telepathy-qt-0.9.3/examples/stream-tubes/0000755000175200001440000000000012000056607022645 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/examples/stream-tubes/CMakeLists.txt0000644000175200001440000000153512000056607025411 0ustar00collabora-develusers00000000000000set(tubereceiver_SRCS tube-receiver.cpp) set(tubereceiver_MOC_SRCS tube-receiver.h) tpqt_generate_mocs(${tubereceiver_MOC_SRCS}) add_executable(tubereceiver ${tubereceiver_SRCS} ${tubereceiver_MOC_SRCS}) target_link_libraries(tubereceiver ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} ${QT_QTNETWORK_LIBRARY} ${QT_QTXML_LIBRARY} telepathy-qt${QT_VERSION_MAJOR} ${TP_QT_EXECUTABLE_LINKER_FLAGS}) set(tubeinitiator_SRCS tube-initiator.cpp) set(tubeinitiator_MOC_SRCS tube-initiator.h) tpqt_generate_mocs(${tubeinitiator_MOC_SRCS}) add_executable(tubeinitiator ${tubeinitiator_SRCS} ${tubeinitiator_MOC_SRCS}) target_link_libraries(tubeinitiator ${QT_QTDBUS_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTNETWORK_LIBRARY} ${QT_QTXML_LIBRARY} telepathy-qt${QT_VERSION_MAJOR} ${TP_QT_EXECUTABLE_LINKER_FLAGS}) telepathy-qt-0.9.3/examples/stream-tubes/tube-initiator.h0000644000175200001440000000474112000056607025763 0ustar00collabora-develusers00000000000000/* * This file is part of TelepathyQt * * Copyright (C) 2009-2011 Collabora Ltd. * Copyright (C) 2009,2011 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 _TelepathyQt_examples_stream_tubes_tube_initiator_h_HEADER_GUARD_ #define _TelepathyQt_examples_stream_tubes_tube_initiator_h_HEADER_GUARD_ #include #include #include #include #include #include class QTcpServer; using namespace Tp; namespace Tp { class ChannelRequestHints; class PendingOperation; } class TubeInitiator : public QObject { Q_OBJECT public: TubeInitiator(const QString &accountName, const QString &receiver, QObject *parent); ~TubeInitiator(); private Q_SLOTS: void onAccountReady(Tp::PendingOperation *op); void onAccountConnectionChanged(const Tp::ConnectionPtr &); void onContactRetrieved(Tp::PendingOperation *op); void onContactCapabilitiesChanged(); void onTubeRequestFinished(Tp::PendingOperation *op); void onTubeNewConnection(const QHostAddress &sourceAddress, quint16 sourcePort, const Tp::AccountPtr &account, const Tp::ContactPtr &contact); void onTubeConnectionClosed(const QHostAddress &sourceAddress, quint16 sourcePort, const Tp::AccountPtr &account, const Tp::ContactPtr &contact, const QString &error, const QString &errorMessage); void onTcpServerNewConnection(); void onDataFromSocket(); private: void createStreamTubeChannel(); QString mReceiver; QTcpServer *mServer; StreamTubeServerPtr mTubeServer; AccountPtr mAccount; ConnectionPtr mConn; ContactPtr mContact; bool mTubeRequested; QHash, QString> mConnAliases; }; #endif telepathy-qt-0.9.3/examples/stream-tubes/tube-receiver.cpp0000644000175200001440000000606212000056607026116 0ustar00collabora-develusers00000000000000/* * This file is part of TelepathyQt * * Copyright (C) 2009-2011 Collabora Ltd. * Copyright (C) 2009,2011 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 */ #include "tube-receiver.h" #include #include #include #include #include #include TubeReceiver::TubeReceiver(QObject *parent) : QObject(parent) { mTubeClient = StreamTubeClient::create(QStringList() << QLatin1String("tp-qt-stube-example")); connect(mTubeClient.data(), SIGNAL(tubeAcceptedAsUnix(QString,bool,uchar,Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr)), SLOT(onTubeAccepted(QString))); mTubeClient->setToAcceptAsUnix(false); // no SCM_CREDENTIALS required } TubeReceiver::~TubeReceiver() { } void TubeReceiver::onTubeAccepted(const QString &listenAddress) { qDebug() << "Stream tube channel accepted and opened, listening at" << listenAddress; mDevice = new QLocalSocket(this); mDevice->connectToServer(listenAddress); connect(mDevice, SIGNAL(stateChanged(QLocalSocket::LocalSocketState)), this, SLOT(onStateChanged(QLocalSocket::LocalSocketState))); onStateChanged(mDevice->state()); } void TubeReceiver::onStateChanged(QLocalSocket::LocalSocketState state) { if (state == QLocalSocket::ConnectedState) { qDebug() << "Local socket connected and ready"; connect(mDevice, SIGNAL(readyRead()), this, SLOT(onDataFromSocket())); mDevice->write(QByteArray("Hi there!!\n")); // Throw in some stuff QTimer *timer = new QTimer(this); timer->setInterval(2000); connect(timer, SIGNAL(timeout()), this, SLOT(onTimerTimeout())); timer->start(); } else { qDebug() << "Socket in state " << state; } } void TubeReceiver::onDataFromSocket() { QIODevice *source = qobject_cast(sender()); QString data = QLatin1String(source->readLine()); data.remove(QLatin1Char('\n')); qDebug() << "New data from socket: " << data; } void TubeReceiver::onTimerTimeout() { mDevice->write(QByteArray("ping, I'm alive\n")); } int main(int argc, char **argv) { QCoreApplication app(argc, argv); Tp::registerTypes(); new TubeReceiver(&app); return app.exec(); } #include "_gen/tube-receiver.moc.hpp" telepathy-qt-0.9.3/examples/stream-tubes/tube-initiator.cpp0000644000175200001440000002440712000056607026317 0ustar00collabora-develusers00000000000000/* * This file is part of TelepathyQt * * Copyright (C) 2010-2011 Collabora Ltd. * Copyright (C) 2011 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 */ #include "tube-initiator.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include TubeInitiator::TubeInitiator(const QString &accountName, const QString &receiver, QObject *parent) : QObject(parent), mReceiver(receiver), mTubeRequested(false) { mServer = new QTcpServer(this); connect(mServer, SIGNAL(newConnection()), this, SLOT(onTcpServerNewConnection())); mServer->listen(); AccountFactoryPtr accountFactory = AccountFactory::create( QDBusConnection::sessionBus(), Account::FeatureCore); // We only care about CONNECTED connections, so let's specify that in a Connection Factory ConnectionFactoryPtr connectionFactory = ConnectionFactory::create( QDBusConnection::sessionBus(), Connection::FeatureCore | Connection::FeatureConnected); ChannelFactoryPtr channelFactory = ChannelFactory::create(QDBusConnection::sessionBus()); ContactFactoryPtr contactFactory = ContactFactory::create(Contact::FeatureAlias); mTubeServer = StreamTubeServer::create( QStringList() << QLatin1String("tp-qt-stube-example"), /* one peer-to-peer service */ QStringList(), /* no Room tube services */ QString(), /* autogenerated Client name */ true, /* do monitor connections */ accountFactory, connectionFactory, channelFactory, contactFactory); connect(mTubeServer.data(), SIGNAL(newTcpConnection(QHostAddress,quint16,Tp::AccountPtr,Tp::ContactPtr,Tp::OutgoingStreamTubeChannelPtr)), SLOT(onTubeNewConnection(QHostAddress,quint16,Tp::AccountPtr,Tp::ContactPtr))); connect(mTubeServer.data(), SIGNAL(tcpConnectionClosed(QHostAddress,quint16,Tp::AccountPtr,Tp::ContactPtr,QString,QString,Tp::OutgoingStreamTubeChannelPtr)), SLOT(onTubeConnectionClosed(QHostAddress,quint16,Tp::AccountPtr,Tp::ContactPtr,QString,QString))); mTubeServer->exportTcpSocket(mServer); Q_ASSERT(mTubeServer->isRegistered()); connect(accountFactory->proxy( TP_QT_ACCOUNT_MANAGER_BUS_NAME, TP_QT_ACCOUNT_OBJECT_PATH_BASE + QLatin1Char('/') + accountName, connectionFactory, mTubeServer->registrar()->channelFactory(), mTubeServer->registrar()->contactFactory()), SIGNAL(finished(Tp::PendingOperation *)), SLOT(onAccountReady(Tp::PendingOperation *))); } TubeInitiator::~TubeInitiator() { } void TubeInitiator::onAccountReady(Tp::PendingOperation *op) { if (op->isError()) { qWarning() << "Account cannot become ready - " << op->errorName() << '-' << op->errorMessage(); QCoreApplication::exit(1); return; } PendingReady *ready = qobject_cast(op); Q_ASSERT(ready != NULL); mAccount = AccountPtr::qObjectCast(ready->proxy()); qDebug() << "Account ready"; connect(mAccount.data(), SIGNAL(connectionChanged(Tp::ConnectionPtr)), SLOT(onAccountConnectionChanged(Tp::ConnectionPtr))); if (mAccount->connection().isNull()) { qDebug() << "The account given has no Connection. Please set it online to continue."; } else { onAccountConnectionChanged(mAccount->connection()); } } void TubeInitiator::onAccountConnectionChanged(const ConnectionPtr &conn) { if (!conn) { return; } // Connection::FeatureConnected being in the Connection Factory means that we shouldn't get // pre-Connected Connections Q_ASSERT(conn->isValid()); Q_ASSERT(conn->status() == ConnectionStatusConnected); qDebug() << "Got a Connected Connection!"; mConn = conn; qDebug() << "Creating contact object for receiver" << mReceiver; connect(mConn->contactManager()->contactsForIdentifiers(QStringList() << mReceiver, Features(Contact::FeatureCapabilities)), SIGNAL(finished(Tp::PendingOperation *)), SLOT(onContactRetrieved(Tp::PendingOperation *))); } void TubeInitiator::onContactRetrieved(PendingOperation *op) { if (op->isError()) { qWarning() << "Unable to create contact object for receiver" << mReceiver << "-" << op->errorName() << ": " << op->errorMessage(); return; } PendingContacts *pc = qobject_cast(op); Q_ASSERT(pc->contacts().size() == 1); mContact = pc->contacts().first(); qDebug() << "Checking contact capabilities..."; connect(mContact.data(), SIGNAL(capabilitiesChanged(Tp::ContactCapabilities)), SLOT(onContactCapabilitiesChanged())); if (mContact->capabilities().streamTubes(QLatin1String("tp-qt-stube-example"))) { onContactCapabilitiesChanged(); } else { qDebug() << "The remote contact needs to be online and have the receiver application running to continue"; } } void TubeInitiator::onContactCapabilitiesChanged() { if (mTubeRequested) { return; } if (mContact->capabilities().streamTubes(QLatin1String("tp-qt-stube-example"))) { qDebug() << "The remote contact is capable of receiving tubes with service tp-qt-stube-example now"; mTubeRequested = true; connect(mAccount->createStreamTube( mContact->id(), QLatin1String("tp-qt-stube-example")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onTubeRequestFinished(Tp::PendingOperation*))); } } void TubeInitiator::onTubeRequestFinished(PendingOperation *op) { if (op->isError()) { qWarning() << "Unable to request stream tube channel -" << op->errorName() << ": " << op->errorMessage(); return; } qDebug() << "Stream tube channel request finished successfully!"; } void TubeInitiator::onTubeNewConnection( const QHostAddress &srcAddr, quint16 srcPort, const Tp::AccountPtr &account, const Tp::ContactPtr &contact) { qDebug() << "Source port" << srcPort << "is" << contact->alias(); mConnAliases.insert(qMakePair(srcAddr, srcPort), contact->alias()); } void TubeInitiator::onTubeConnectionClosed( const QHostAddress &srcAddr, quint16 srcPort, const Tp::AccountPtr &account, const Tp::ContactPtr &contact, const QString &error, const QString &message) { qDebug() << "Connection from source port" << srcPort << "closed with" << error << ':' << message; mConnAliases.remove(qMakePair(srcAddr, srcPort)); } void TubeInitiator::onTcpServerNewConnection() { qDebug() << "Pending connection found"; QTcpSocket *socket = mServer->nextPendingConnection(); connect(socket, SIGNAL(readyRead()), this, SLOT(onDataFromSocket())); } void TubeInitiator::onDataFromSocket() { QAbstractSocket *source = qobject_cast(sender()); QString data = QLatin1String(source->readLine()); data.remove(QLatin1Char('\n')); // Look up the alias of the remote sending us data based on the tube connection tracking. Of // course, this is slightly overengineered; given that this example uses one-to-one tubes (not // group/MUC tubes), all remote connections are always from the same contact we opened the tube // to in the first place. QPair peerAddr(source->peerAddress(), source->peerPort()); if (mConnAliases.contains(peerAddr)) { qDebug() << "New data from contact" << mConnAliases.value(peerAddr) << ':' << data; } else { // We haven't found out the identity for this connection yet. This may happen, because the // TCP server listen socket and the D-Bus connection are on separate sockets and have no // mutual ordering guarantees. // // A GUI application would likely use a placeholder item and lazily replace it with a // representation of the contact when newTcpConnection for this source address has been // received. A non-interactive daemon or alike might, in turn, queue incoming data until the // contact is known, or just carry on if the contact's details aren't needed (yet). qDebug() << "New data from source port" << peerAddr.second << ':' << data; } if (data == QLatin1String("Hi there!!")) { source->write(QByteArray("Hey back mate.\n")); } else { source->write(QByteArray("Sorry, I have no time for you right now.\n")); } } int main(int argc, char **argv) { QCoreApplication app(argc, argv); if (argc != 3) { qDebug() << "usage:" << argv[0] << " "; return 1; } Tp::registerTypes(); new TubeInitiator(QLatin1String(argv[1]), QLatin1String(argv[2]), &app); return app.exec(); } #include "_gen/tube-initiator.moc.hpp" telepathy-qt-0.9.3/examples/stream-tubes/tube-receiver.h0000644000175200001440000000303312000056607025556 0ustar00collabora-develusers00000000000000/* * This file is part of TelepathyQt * * Copyright (C) 2009-2011 Collabora Ltd. * Copyright (C) 2009,2011 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 _TelepathyQt_examples_stream_tubes_tube_receiver_h_HEADER_GUARD_ #define _TelepathyQt_examples_stream_tubes_tube_receiver_h_HEADER_GUARD_ #include #include using namespace Tp; namespace Tp { class PendingOperation; } class TubeReceiver : public QObject { Q_OBJECT public: TubeReceiver(QObject *parent); ~TubeReceiver(); private Q_SLOTS: void onTubeAccepted(const QString &listenAddress); void onStateChanged(QLocalSocket::LocalSocketState newState); void onTimerTimeout(); void onDataFromSocket(); private: StreamTubeClientPtr mTubeClient; QLocalSocket *mDevice; }; #endif telepathy-qt-0.9.3/config.h.in0000644000175200001440000000004612000056607020437 0ustar00collabora-develusers00000000000000#define PACKAGE_NAME "@PACKAGE_NAME@" telepathy-qt-0.9.3/config-version.h.in0000644000175200001440000000005412000056607022121 0ustar00collabora-develusers00000000000000#define PACKAGE_VERSION "@PACKAGE_VERSION@" telepathy-qt-0.9.3/doxygen-header.html0000644000175200001440000000165212000056607022211 0ustar00collabora-develusers00000000000000 $title
   Home · All Classes · All Namespaces · Modules · Functions · Files
telepathy-qt-0.9.3/README0000644000175200001440000001137612000056607017304 0ustar00collabora-develusers00000000000000============= telepathy-qt ============= This is a library for Qt-based Telepathy clients. Telepathy is a D-Bus framework for unifying real time communication, including instant messaging, voice calls and video calls. It abstracts differences between protocols to provide a unified interface for applications. See the Telepathy website for more information: http://telepathy.freedesktop.org/ Telepathy specification ======================= The copy of the Telepathy specification in the spec/ directory indicates the specification that this library claims to implement. The HTML documentation for the latest version of the specification can be viewed at: http://telepathy.freedesktop.org/spec/ Requirements ============ Building telepathy-qt requires: Qt, QtDBus, QtNetwork and QtXml (QtGui and QtWidgets are required for some examples) GNU make pkg-config libxslt, xsltproc Python For the full set of regression tests to run, you'll also need: telepathy-glib For building the Farsight convenience library, you'll need: telepathy-glib telepathy-farsight GStreamer and to build the Farstream convenience library, you'll need: telepathy-glib telepathy-farstream farstream GStreamer See CMakeLists.txt for full details, including versions required. Of the packages listed above, only Qt libraries are required at runtime. Building also requires the cmake build system. Qt 5 alpha release contains some build issues that should be addressed in order to build telepathy-qt against it: - When running 'configure' in Qt 5 alpha, the pkg-config files are properly generated, but when 'make' is executed, these files are replaced with empty ones. So, to build telepathy-qt against it one must either backup the pkg-config files generated during the 'configure' phase before running 'make' and replace them afterwards, or re-run 'configure' with the same parameters after building it. - If Qt 5 alpha is built with -reduce-relocations enabled, one must add the keyword "reduce_relocations" to qtbase/lib/pkgconfig/QtCore.pc in the qt_config section, so that telepathy-qt knows when to use -fPIC/PIE at linking stage accordingly. Both issues were reported and should be fixed when beta is out. Bugs, feature requests and to-do list ===================================== Report all bugs, feature requests and "to-do" items here: Running "make check" will produce FIXME.out, which lists all the mentions of FIXME, TODO or XXX in the source code. Ideally, all of these should be in Bugzilla, but sometimes they're not. API stability policy ==================== We use an "odd/even" versioning scheme where the minor version (the y in x.y.z) determines stability - stable branches have y even, development branches have y odd. In a stable (even) branch, we will not make incompatible API or ABI changes between one release tarball and the next. In a development (odd) branch, if we make incompatible ABI changes between one release tarball and the next, we will change the SONAME of the library; we will attempt to avoid incompatible API or ABI changes. Unreleased builds straight from git identify themselves as version "x.y.z.1". We DO NOT make any API guarantees about unreleased builds: any binary relying on new functionality from an unreleased build is not guaranteed to work with any subsequent release or unreleased build, and on platforms with versioned symbols (mainly Linux) it definitely won't work with subsequent releases (you'll have to at least relink the binary). We do not increment SONAMEs on the basis of unreleased changes. Unreleased builds are compiled with -Werror, so they might stop working if your gcc version issues more warnings than ours. If this is a problem for you, use a release tarball. Contact info ============ This library is maintained by the Telepathy project: Telepathy development is supported by Collabora Ltd. . Hacking ======= See HACKING for version control, coding style and patch submission information. telepathy-qt-0.9.3/AUTHORS0000644000175200001440000000025412000056607017465 0ustar00collabora-develusers00000000000000Andre Moreira Magalhaes (andrunko) Olli Salli (oggis) Simon McVittie (smcv) telepathy-qt-0.9.3/.gitignore0000644000175200001440000000042112000056607020401 0ustar00collabora-develusers00000000000000# For a project mostly in C, the following would be a good set of # Lines that start with '#' are comments. # exclude patterns (uncomment them if you want to use them): # git-ls-files --others --exclude-from=.git/info/exclude *.directory *.py[co] *~ .*.sw[p,o] /build tags telepathy-qt-0.9.3/doxygen-footer.html0000644000175200001440000000051012000056607022247 0ustar00collabora-develusers00000000000000


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt $projectnumber
telepathy-qt-0.9.3/COPYING0000644000175200001440000006363712000056607017466 0ustar00collabora-develusers00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 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 Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! telepathy-qt-0.9.3/CMakeLists.txt0000644000175200001440000003205312000056607021157 0ustar00collabora-develusers00000000000000project(TelepathyQt) cmake_minimum_required(VERSION 2.6) # CMake policies are used for backwards compatibilty. Setting a policy to a behavior lets newer # CMake versions where some behaviors changed behave in a way or another. In our specific case, # From CMake's documentation: # # In CMake 2.6.2 and below, CMake Policy settings in scripts loaded by # the include() and find_package() commands would affect the includer. # Explicit invocations of cmake_policy(PUSH) and cmake_policy(POP) were # required to isolate policy changes and protect the includer. While # some scripts intend to affect the policies of their includer, most do # not. In CMake 2.6.3 and above, include() and find_package() by # default PUSH and POP an entry on the policy stack around an included # script, but provide a NO_POLICY_SCOPE option to disable it. This # policy determines whether or not to imply NO_POLICY_SCOPE for # compatibility. The OLD behavior for this policy is to imply # NO_POLICY_SCOPE for include() and find_package() commands. The NEW # behavior for this policy is to allow the commands to do their default # cmake_policy PUSH and POP. # # This policy was introduced in CMake version 2.6.3. CMake version # 2.8.2 warns when the policy is not set and uses OLD behavior. Use the # cmake_policy command to set it to OLD or NEW explicitly. # # Whenever our cmake_minimum_required version bumps up to 2.7 or 2.6.3, this policy setting can # hence be removed. if(POLICY CMP0011) cmake_policy(SET CMP0011 NEW) endif(POLICY CMP0011) # Making releases: # set the new version number: # odd minor -> development series # even minor -> stable series # increment micro for each release within a series # set nano_version to 0 # make the release, tag it # set nano_version to 1 set(TP_QT_MAJOR_VERSION 0) set(TP_QT_MINOR_VERSION 9) set(TP_QT_MICRO_VERSION 3) set(TP_QT_NANO_VERSION 0) set(PACKAGE_NAME telepathy-qt) if (${TP_QT_NANO_VERSION} EQUAL 0) set(PACKAGE_VERSION ${TP_QT_MAJOR_VERSION}.${TP_QT_MINOR_VERSION}.${TP_QT_MICRO_VERSION}) else (${TP_QT_NANO_VERSION} EQUAL 0) set(PACKAGE_VERSION ${TP_QT_MAJOR_VERSION}.${TP_QT_MINOR_VERSION}.${TP_QT_MICRO_VERSION}.${TP_QT_NANO_VERSION}) endif (${TP_QT_NANO_VERSION} EQUAL 0) # where to look first for cmake modules, before ${CMAKE_ROOT}/Modules/ is # checked set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules") # Default build type is RelWithDebInfo for release versions and Debug for developement # versions if(NOT CMAKE_BUILD_TYPE) if(TP_QT_NANO_VERSION EQUAL 0) set(CMAKE_BUILD_TYPE RelWithDebInfo) else(TP_QT_NANO_VERSION EQUAL 0) set(CMAKE_BUILD_TYPE Debug) endif(TP_QT_NANO_VERSION EQUAL 0) endif(NOT CMAKE_BUILD_TYPE) # This file contains all the needed initialization macros include(TelepathyDefaults) # This file contains all the tpqt macros used in the buildsystem include(TpQtMacros) include(MacroLogFeature) # external dependencies # Required dependencies # Find qt4 version >= 4.6 or qt5 >= 5.0.0 set(QT4_MIN_VERSION "4.6.0") set(QT4_MAX_VERSION "5.0.0") set(QT5_MIN_VERSION "5.0.0") set(QT5_MAX_VERSION "6.0.0") find_package(Qt REQUIRED) foreach(flag ${QT_CONFIG_FLAGS}) if (${flag} MATCHES "reduce_relocations") set(TP_QT_EXECUTABLE_LINKER_FLAGS "-fPIE") set(TP_QT_LIBRARY_LINKER_FLAGS "-fPIC") endif (${flag} MATCHES "reduce_relocations") endforeach(flag ${QT_CONFIG_FLAGS}) # This value contains the library's SOVERSION. This value is to be increased everytime an API/ABI break # occurs, and will be used for the SOVERSION of the generated shared libraries. if (${QT_VERSION_MAJOR} EQUAL 4) set(TP_QT_ABI_VERSION 2) else (${QT_VERSION_MAJOR} EQUAL 4) set(TP_QT_ABI_VERSION 0) endif (${QT_VERSION_MAJOR} EQUAL 4) # This variable is used for the library's long version. It is generated dynamically, so don't change its # value! Change TP_QT_ABI_VERSION and TP_QT_*_VERSION instead. if (${TP_QT_NANO_VERSION} EQUAL 0) set(TP_QT_LIBRARY_VERSION ${TP_QT_ABI_VERSION}.${TP_QT_MAJOR_VERSION}.${TP_QT_MINOR_VERSION}.${TP_QT_MICRO_VERSION}) else (${TP_QT_NANO_VERSION} EQUAL 0) set(TP_QT_LIBRARY_VERSION ${TP_QT_ABI_VERSION}.${TP_QT_MAJOR_VERSION}.${TP_QT_MINOR_VERSION}.${TP_QT_MICRO_VERSION}.${TP_QT_NANO_VERSION}) endif (${TP_QT_NANO_VERSION} EQUAL 0) # Add an option for compiling tp-qt-service option(ENABLE_EXPERIMENTAL_SERVICE_SUPPORT "Enable compilation of experimental and unstable service side bindings for Telepathy-Qt" FALSE) # Add an option for compiling examples option(ENABLE_EXAMPLES "Enable compilation of examples for Telepathy-Qt" TRUE) # Add an option for compiling Farsight (disabled by default) option(ENABLE_FARSIGHT "Enable compilation of Farsight bindings (deprecated)" FALSE) # Add an option for compiling Farstream option(ENABLE_FARSTREAM "Enable compilation of Farstream bindings" TRUE) # Add an option for building tests option(ENABLE_TESTS "Enable compilation of automated tests" TRUE) if (ENABLE_EXPERIMENTAL_SERVICE_SUPPORT) message(STATUS "You have enabled experimental service support for Telepathy-Qt. Be aware there are no guarantees of API stability yet for service-side classes.") endif (ENABLE_EXPERIMENTAL_SERVICE_SUPPORT) # The doxygen macro requires Qt to have been looked up to enable crosslinking include(Doxygen) include_directories(${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ${QT_INCLUDES}) add_definitions(-DQT_NO_CAST_FROM_ASCII) set(ENABLE_DEBUG_OUTPUT ON CACHE BOOL "If activated, compiles support for printing debug output to stderr") if (ENABLE_DEBUG_OUTPUT) add_definitions(-DENABLE_DEBUG) endif (ENABLE_DEBUG_OUTPUT) # Check for Qt Glib support include(CheckCXXSourceCompiles) set(CMAKE_REQUIRED_INCLUDES ${QT_INCLUDES}) set(CMAKE_REQUIRED_DEFINITIONS "") # set the flags (-fPIE) here so that CHECK_CXX_SOURCE_COMPILES works properly if qt5 was built with # -reduce-locations set(CMAKE_REQUIRED_FLAGS "${TP_QT_EXECUTABLE_LINKER_FLAGS}") CHECK_CXX_SOURCE_COMPILES(" #include int main() { #if defined(QT_NO_GLIB) #error \"Qt was compiled with Glib disabled\" #endif return 0; }" QT_GLIB_SUPPORT) macro_log_feature(QT_GLIB_SUPPORT "Qt Glib Support" "QtCore library using Glib's main event loop" "http://qt.nokia.com/" FALSE "" "Needed, together with Telepathy-Glib, to build most of the unit tests") # reset flags set(CMAKE_REQUIRED_FLAGS "") # Find python version >= 2.5 find_package(PythonLibrary REQUIRED) set(REQUIRED_PY 2.5) if(${PYTHON_SHORT_VERSION} VERSION_GREATER ${REQUIRED_PY} OR ${PYTHON_SHORT_VERSION} VERSION_EQUAL ${REQUIRED_PY}) message(STATUS "Python ${PYTHON_SHORT_VERSION} found") else(${PYTHON_SHORT_VERSION} VERSION_GREATER ${REQUIRED_PY} OR ${PYTHON_SHORT_VERSION} VERSION_EQUAL ${REQUIRED_PY}) message(SEND_ERROR "Python >= ${REQUIRED_PY} is required") endif(${PYTHON_SHORT_VERSION} VERSION_GREATER ${REQUIRED_PY} OR ${PYTHON_SHORT_VERSION} VERSION_EQUAL ${REQUIRED_PY}) # Check for dbus-python execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import dbus.mainloop.glib" RESULT_VARIABLE PYTHON_DBUS_RESULT) if(PYTHON_DBUS_RESULT EQUAL 0) set(HAVE_TEST_PYTHON 1) else(PYTHON_DBUS_RESULT EQUAL 0) set(HAVE_TEST_PYTHON 0) endif(PYTHON_DBUS_RESULT EQUAL 0) macro_log_feature(HAVE_TEST_PYTHON "dbus-python" "GLib-based Python DBus support" "http://www.python.org/" FALSE "" "Needed to build some additional unit tests") if(ENABLE_TESTS OR ENABLE_FARSTREAM OR ENABLE_FARSIGHT) # Find telepathy-glib set(TELEPATHY_GLIB_MIN_VERSION 0.17.5) find_package(TelepathyGlib) macro_log_feature(TELEPATHYGLIB_FOUND "Telepathy-glib" "Glib bindings for Telepathy" "http://telepathy.freedesktop.org/" FALSE ${TELEPATHY_GLIB_MIN_VERSION} "Needed, together with Qt Glib integration, to build most of the unit tests") find_program(GLIB_GENMARSHAL glib-genmarshal) # Find GLib2, GObject, DBus and LibXml2 # Those are needed for the insane include dir dependency hell find_package(GLIB2) find_package(GObject) find_package(GIO) find_package(GIOUnix) find_package(DBus) find_package(DBusGLib) find_package(LibXml2) endif() if(ENABLE_FARSIGHT) # Find tp-farsight set(TELEPATHY_FARSIGHT_MIN_VERSION "0.0.4") find_package(TelepathyFarsight) macro_log_feature(TELEPATHYFARSIGHT_FOUND "Telepathy-Farsight" "A Framework for dealing with audio/video conferencing protocols" "http://farsight.freedesktop.org/wiki/" FALSE "${TELEPATHY_FARSIGHT_MIN_VERSION}" "Needed, together with GStreamer, to build telepathy-qt-farsight and some additional examples") endif() if(ENABLE_FARSTREAM) # Find tp-farstream set(FARSTREAM_MIN_VERSION "0.1.0") find_package(Farstream) macro_log_feature(FARSTREAM_FOUND "Farstream" "A Framework for dealing with audio/video conferencing protocols" "http://www.freedesktop.org/wiki/Software/Farstream" FALSE "${FARSTREAM_MIN_VERSION}" "Needed, together with GStreamer and Telepathy-Farstream, to build telepathy-qt-farstream") # Find tp-farstream set(TELEPATHY_FARSTREAM_MIN_VERSION "0.2.2") find_package(TelepathyFarstream) macro_log_feature(TELEPATHYFARSTREAM_FOUND "Telepathy-Farstream" "A Framework for dealing with audio/video conferencing protocols" "http://telepathy.freedesktop.org/wiki/" FALSE "${TELEPATHY_FARSTREAM_MIN_VERSION}" "Needed, together with GStreamer and Farstream, to build telepathy-qt-farstream") endif() if(ENABLE_FARSTREAM OR ENABLE_FARSIGHT) # Find GStreamer find_package(GStreamer) macro_log_feature(GSTREAMER_FOUND "GStreamer" "An open source multimedia framework" "Needed, together with Tp-Farsight, to build telepathy-qt-farsight and some additional examples" "http://www.gstreamer.net/" FALSE) endif() # Build TelepathyQt-Farsight only if GStreamer, TelepathyFarsight and all of their dependencies were found if (TELEPATHYFARSIGHT_FOUND AND GSTREAMER_FOUND AND GLIB2_FOUND AND GOBJECT_FOUND AND DBUS_FOUND AND LIBXML2_FOUND AND TELEPATHYGLIB_FOUND AND ENABLE_FARSIGHT) set (FARSIGHT_COMPONENTS_FOUND 1) else (TELEPATHYFARSIGHT_FOUND AND GSTREAMER_FOUND AND GLIB2_FOUND AND GOBJECT_FOUND AND DBUS_FOUND AND LIBXML2_FOUND AND TELEPATHYGLIB_FOUND AND ENABLE_FARSIGHT) set (FARSIGHT_COMPONENTS_FOUND 0) endif (TELEPATHYFARSIGHT_FOUND AND GSTREAMER_FOUND AND GLIB2_FOUND AND GOBJECT_FOUND AND DBUS_FOUND AND LIBXML2_FOUND AND TELEPATHYGLIB_FOUND AND ENABLE_FARSIGHT) # Build TelepathyQt-Farstream only if GStreamer, TelepathyFarstream and all of their dependencies were found if (TELEPATHYFARSTREAM_FOUND AND FARSTREAM_FOUND AND GSTREAMER_FOUND AND GLIB2_FOUND AND GOBJECT_FOUND AND DBUS_FOUND AND LIBXML2_FOUND AND TELEPATHYGLIB_FOUND AND ENABLE_FARSTREAM) set (FARSTREAM_COMPONENTS_FOUND 1) else (TELEPATHYFARSTREAM_FOUND AND FARSTREAM_FOUND AND GSTREAMER_FOUND AND GLIB2_FOUND AND GOBJECT_FOUND AND DBUS_FOUND AND LIBXML2_FOUND AND TELEPATHYGLIB_FOUND AND ENABLE_FARSTREAM) set (FARSTREAM_COMPONENTS_FOUND 0) endif (TELEPATHYFARSTREAM_FOUND AND FARSTREAM_FOUND AND GSTREAMER_FOUND AND GLIB2_FOUND AND GOBJECT_FOUND AND DBUS_FOUND AND LIBXML2_FOUND AND TELEPATHYGLIB_FOUND AND ENABLE_FARSTREAM) if (ENABLE_TESTS) # Enable glib-based tests only if Qt has GLib support and Telepathy-glib was found if(QT_GLIB_SUPPORT AND TELEPATHYGLIB_FOUND AND GLIB2_FOUND AND DBUS_FOUND) # Disable GLib deprecation warnings for now; GValueArray is deprecated but we # need it for telepathy-glib. add_definitions(-DGLIB_DISABLE_DEPRECATION_WARNINGS) set(ENABLE_TP_GLIB_TESTS 1) if(GIO_FOUND AND GIOUNIX_FOUND) set(ENABLE_TP_GLIB_GIO_TESTS 1) else(GIO_FOUND AND GIOUNIX_FOUND) set(ENABLE_TP_GLIB_GIO_TESTS 0) endif(GIO_FOUND AND GIOUNIX_FOUND) else(QT_GLIB_SUPPORT AND TELEPATHYGLIB_FOUND AND GLIB2_FOUND AND DBUS_FOUND) set(ENABLE_TP_GLIB_TESTS 0) set(ENABLE_TP_GLIB_GIO_TESTS 0) endif(QT_GLIB_SUPPORT AND TELEPATHYGLIB_FOUND AND GLIB2_FOUND AND DBUS_FOUND) endif(ENABLE_TESTS) # Add the source subdirectories add_subdirectory(TelepathyQt) if(ENABLE_EXAMPLES) add_subdirectory(examples) endif() if(ENABLE_TESTS) add_subdirectory(tests) endif() add_subdirectory(tools) # Generate config.h and config-version.h configure_file(${CMAKE_SOURCE_DIR}/config.h.in ${CMAKE_BINARY_DIR}/config.h) configure_file(${CMAKE_SOURCE_DIR}/config-version.h.in ${CMAKE_BINARY_DIR}/config-version.h) # Create the uninstall target configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY) add_custom_target(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") # Display the feature log macro_display_feature_log() # Always keep it last: CPack definitions file include(TelepathyDist) telepathy-qt-0.9.3/cmake_uninstall.cmake.in0000644000175200001440000000165412000056607023202 0ustar00collabora-develusers00000000000000IF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") MESSAGE(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"") ENDIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) STRING(REGEX REPLACE "\n" ";" files "${files}") FOREACH(file ${files}) MESSAGE(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"") IF(EXISTS "$ENV{DESTDIR}${file}") EXEC_PROGRAM( "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" OUTPUT_VARIABLE rm_out RETURN_VALUE rm_retval ) IF(NOT "${rm_retval}" STREQUAL 0) MESSAGE(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"") ENDIF(NOT "${rm_retval}" STREQUAL 0) ELSE(EXISTS "$ENV{DESTDIR}${file}") MESSAGE(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.") ENDIF(EXISTS "$ENV{DESTDIR}${file}") ENDFOREACH(file) telepathy-qt-0.9.3/ChangeLog0000644000175200001440001111245712000060457020200 0ustar00collabora-develusers00000000000000commit 939a14b3878eaed64cb0d757de3cea5b67d5ddec Author: Dario Freddi Date: Fri Jul 13 19:40:23 2012 +0200 Prepare release 0.9.3 CMakeLists.txt | 4 ++-- NEWS | 6 ++---- 2 files changed, 4 insertions(+), 6 deletions(-) commit 58c3df98442b68d141b2ba575ac28cdbdb26392c Author: Dario Freddi Date: Fri Jul 13 19:36:55 2012 +0200 Update NEWS NEWS | 3 +++ 1 file changed, 3 insertions(+) commit 3969c8de50336d37bc9996cdc5d0f654cc92bac2 Merge: 3ed6682 90295f0 Author: Dario Freddi Date: Fri Jul 13 19:33:11 2012 +0200 Merge branch 'deprecate-stream' Reviewed-by: George Kiagiadakis Reviewed-by: Dario Freddi commit 90295f0e806f189b6eeb0ba5965191b2f97095ed Author: George Kiagiadakis Date: Fri Jul 13 19:19:21 2012 +0300 AccountManager: Add audioCallAccounts() / videoCallAccounts() methods TelepathyQt/account-manager.cpp | 48 +++++++++++++++++++++++++++++++++++++++ TelepathyQt/account-manager.h | 3 +++ 2 files changed, 51 insertions(+) commit 10cd2eec3c4d6cd317adaee924d762e80d77772c Author: George Kiagiadakis Date: Fri Jul 13 19:02:51 2012 +0300 SimpleCallObserver: Handle Call1 channels and deprecate usage of the StreamedMedia methods TelepathyQt/simple-call-observer.cpp | 111 +++++++++++++++++++++++++++------- TelepathyQt/simple-call-observer.h | 7 ++- 2 files changed, 96 insertions(+), 22 deletions(-) commit 1083491c611196246bfc0d4b203be95c6bd0b9d7 Author: George Kiagiadakis Date: Fri Jul 13 18:43:11 2012 +0300 ChannelClassSpec: Add mediaCall() method. This can be useful for observers that wish to observe both audio and video calls. Using this method, they won't have to have two channel filters, one for audio and one for video. TelepathyQt/channel-class-spec.cpp | 15 +++++++++++++++ TelepathyQt/channel-class-spec.h | 7 +++---- 2 files changed, 18 insertions(+), 4 deletions(-) commit 3dd7cb3921f0a4a1a8724541887e3c9ef48a2b1e Author: Dario Freddi Date: Fri Jul 13 17:43:40 2012 +0200 Farsight: Deprecate Farsight TelepathyQt/Farsight/channel.h | 2 +- TelepathyQt/Farsight/global.h | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) commit 28128b76904503b3a308372439b177ecd58c9b62 Author: Dario Freddi Date: Fri Jul 13 17:41:56 2012 +0200 Deprecate in one single run every occurrence of StreamedMediaChannel TelepathyQt/account-manager.h | 8 +++---- TelepathyQt/account.h | 32 +++++++++++++------------- TelepathyQt/capabilities-base.h | 10 ++++---- TelepathyQt/channel-class-spec.h | 28 +++++++++++----------- TelepathyQt/channel-factory.h | 10 ++++---- TelepathyQt/connection-capabilities.h | 4 ++-- TelepathyQt/requestable-channel-class-spec.h | 12 +++++----- TelepathyQt/streamed-media-channel.h | 6 ++--- TelepathyQt/types.h | 4 ++-- 9 files changed, 57 insertions(+), 57 deletions(-) commit f55876feb630d3fc3f82f3fee0127544c696b8f9 Author: Dario Freddi Date: Fri Jul 13 17:41:18 2012 +0200 global.h: Fix the TP_QT_DEPRECATED macro to have no effect when building the library. Add a new TP_QT_EXPORT_DEPRECATED macro to cope with moc. TelepathyQt/global.h | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) commit 3ed6682d07402e0ff2a8e9bbb0c38949b4b3cf75 Author: George Kiagiadakis Date: Fri Jul 13 18:22:21 2012 +0300 Update NEWS NEWS | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 0418dd11219f3802e08980761a4bd6a1ca2e317b Author: George Kiagiadakis Date: Fri Jul 13 18:11:24 2012 +0300 Farsight/Farstream: Use tp_simple_client_factory_ensure_connection() instead of the deprecated tp_connection_new() Reviewed-by: Dario Freddi TelepathyQt/Farsight/channel.cpp | 17 +++++++++++++---- TelepathyQt/Farstream/channel.cpp | 20 ++++++++++++++++---- 2 files changed, 29 insertions(+), 8 deletions(-) commit 492821581f2d9feae9b5fd5d71b5433630cbc7fb Author: Dario Freddi Date: Fri Jul 13 16:27:50 2012 +0200 Update NEWS NEWS | 1 + 1 file changed, 1 insertion(+) commit 23ada7c2c8ca11afa94c543b627874a65f00a6ae Author: Dario Freddi Date: Fri Jul 13 16:18:05 2012 +0200 tests: Sync util.* from tp-glib to avoid deprecation warnings Reviewed-by: George Kiagiadakis tests/lib/glib/util.c | 288 ++++++++++++++++++++++++++++++++++++++++++++++--- tests/lib/glib/util.h | 35 +++++- 2 files changed, 305 insertions(+), 18 deletions(-) commit e25458dbb1a87aa07e075960e28b744e4ed19d8b Author: Dario Freddi Date: Fri Jul 13 16:25:53 2012 +0200 Update NEWS NEWS | 1 + 1 file changed, 1 insertion(+) commit ae352a1eb7f27396b902fc1fa8722aadeb0a52fa Author: Dario Freddi Date: Fri Jul 13 16:23:50 2012 +0200 tests: Remove occurrences of tp_handle_unref Reviewed-by: George Kiagiadakis tests/dbus/dbus-tube-chan.cpp | 5 ----- 1 file changed, 5 deletions(-) commit 037822c82a9495b237bfc805f06bcaddbdf02b49 Author: George Kiagiadakis Date: Thu Jul 12 21:33:14 2012 +0300 Update NEWS NEWS | 1 + 1 file changed, 1 insertion(+) commit 2e797d4bf9ecc27dcac3387c5d5e1229e7cb6eed Author: George Kiagiadakis Date: Thu Jul 12 21:29:55 2012 +0300 tp-glib-tests: link to the dbus-1 library, as it is used in the dbus tubes test CM Reviewed-by: Dario Freddi tests/lib/glib/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) commit 7cecbe6a7591e9c29b6ac3ead8d4d78512692a05 Author: Dario Freddi Date: Mon Jul 9 20:58:05 2012 +0200 Update NEWS NEWS | 1 + 1 file changed, 1 insertion(+) commit 7852ffed739adb21b73c20461b99406bbfb6f949 Merge: efab4a9 75767cb Author: Dario Freddi Date: Mon Jul 9 20:57:02 2012 +0200 Merge branch 'fix-cmake-again' George Kiagiadakis commit 75767cb22a8b86f33b40bf4e239cf7d7b5368e56 Author: Dario Freddi Date: Mon Jul 9 20:50:36 2012 +0200 cmake: Use options correctly cmake/modules/CompilerWarnings.cmake | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit efab4a9e16cb6282c8fbcf6e99c332a7ddc0b979 Author: Dario Freddi Date: Thu Jul 5 15:05:28 2012 +0200 Update NEWS NEWS | 1 + 1 file changed, 1 insertion(+) commit 7fe1498cf9806207822de870ee858dd8d790aebf Merge: 2a16fb8 2139107 Author: Dario Freddi Date: Thu Jul 5 14:42:40 2012 +0200 Merge branch 'client-types' Reviewed-by: Dario Freddi commit 213910763aa2d3d6b4906b61ed2cf9caa3635f41 Author: George Kiagiadakis Date: Thu Jul 5 14:41:11 2012 +0300 Contact: Complete client-types documentation TelepathyQt/contact.cpp | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) commit f4e6d194141ef9f8fb53d6e27a008010c8cd6752 Author: Dario Freddi Date: Thu Jul 5 13:22:16 2012 +0200 Contact: Add documentation for clientTypes TelepathyQt/contact.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 9a2fff3aa2375ab36a539c623f268e9789131ea0 Author: Dario Freddi Date: Thu Jul 5 12:55:56 2012 +0200 Contact: check for enabled features in methods related to ClientTypes TelepathyQt/contact.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) commit fe864deae2f4892953bad03cf12c7e0ee40dbd20 Author: George Kiagiadakis Date: Thu Jul 5 14:05:05 2012 +0300 tests: add test for retrieving client types using contact attributes tests/dbus/contacts-client-types.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) commit 30df9cbb5c0c03492c47cf03b0192dd31e6ba716 Author: George Kiagiadakis Date: Thu Jul 5 13:29:31 2012 +0300 tests: add test for Contact Conn.I.ClientTypes support tests/dbus/CMakeLists.txt | 1 + tests/dbus/contacts-client-types.cpp | 170 ++++++++++++++++++++++++++++++++++ 2 files changed, 171 insertions(+) commit 2613690ce569ed89a51a9791a4630ac4d74cdb30 Author: George Kiagiadakis Date: Thu Jul 5 13:29:02 2012 +0300 contacts-conn CM: Implement proper Conn.I.ClientTypes support tests/lib/glib/contacts-conn.c | 88 +++++++++++++++++++++++++++++++++++----- tests/lib/glib/contacts-conn.h | 5 ++- 2 files changed, 80 insertions(+), 13 deletions(-) commit 0d9bd907813a913c380cbd9d478375d96ffffbbc Author: George Kiagiadakis Date: Wed Jul 4 18:48:19 2012 +0300 contacts-conn CM: sync client-types interface support from tp-glib tests/lib/glib/contacts-conn.c | 23 +++++++++++++++++++++++ tests/lib/glib/contacts-conn.h | 2 ++ 2 files changed, 25 insertions(+) commit c8dc3548e0eee04517c0cef7eb4cfe38bd5bcf07 Author: George Kiagiadakis Date: Wed Jul 4 18:33:10 2012 +0300 Contact: expose information from Conn.I.ClientTypes TelepathyQt/contact-manager.cpp | 23 +++++++++++++++- TelepathyQt/contact-manager.h | 1 + TelepathyQt/contact.cpp | 58 +++++++++++++++++++++++++++++++++++++++ TelepathyQt/contact.h | 8 ++++++ 4 files changed, 89 insertions(+), 1 deletion(-) commit 2a16fb80a9ab69739e706880ef6f1feb89bd17bb Author: Dario Freddi Date: Thu Jul 5 12:27:50 2012 +0200 Update NEWS NEWS | 1 + 1 file changed, 1 insertion(+) commit 8de6c2d54d7f9d64ecea386d62c401f065fb0d86 Merge: 52f6832 3ae8113 Author: Dario Freddi Date: Thu Jul 5 12:27:06 2012 +0200 Merge branch 'tp-glib-0.19' Reviewed-by: Dario Freddi commit 3ae81137bad8882fa4e83a2d9c8b87ffb8a68d68 Author: George Kiagiadakis Date: Wed Jul 4 17:27:22 2012 +0300 dbus-tube-test CM: remove stuff that are deprecated in tp-glib 0.19 tests/lib/glib/dbus-tube-chan.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) commit 52f6832d0a7033aac10f0bbcfb099035fb0a94e9 Author: George Kiagiadakis Date: Wed Jul 4 15:18:07 2012 +0300 Start 0.9.3 development CMakeLists.txt | 2 +- NEWS | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) commit 9a177bfe33d9e549be51d66bbf2f77664e03eaf7 Author: Dario Freddi Date: Wed Jul 4 13:38:35 2012 +0200 While wondering how I could have gone wrong in the first release, obviously something happened. Fix release date. NEWS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit df9a9e01949b0b10f32633131ab372718cd5f3be Author: Dario Freddi Date: Wed Jul 4 12:29:05 2012 +0200 Prepare release 0.9.2 CMakeLists.txt | 4 ++-- NEWS | 4 +--- 2 files changed, 3 insertions(+), 5 deletions(-) commit 88a15078ad0febb29afa180d062a6ef59d5aa333 Author: Dario Freddi Date: Wed Jul 4 12:53:59 2012 +0200 Update NEWS NEWS | 1 + 1 file changed, 1 insertion(+) commit 8e630f526bf9c2d13780509d436ff34489f9bf64 Author: Dario Freddi Date: Wed Jul 4 12:53:12 2012 +0200 cmake: Fix PkgConfig handling cmake/modules/FindDBus.cmake | 6 +++--- cmake/modules/FindDBusGLib.cmake | 6 +++--- cmake/modules/FindTelepathyGlib.cmake | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) commit 82b68e7d6827d067906b21e1a151ec716a343c89 Merge: e3f3bbe 7e80451 Author: Dario Freddi Date: Wed Jul 4 12:23:30 2012 +0200 Merge branch 'trivia' Reviewed-by: Dario Freddi commit 7e80451869146725f68e39e8be0bdd5bed6e8dd8 Author: George Kiagiadakis Date: Tue Jul 3 12:23:21 2012 +0300 Update NEWS NEWS | 4 ++++ 1 file changed, 4 insertions(+) commit 4dfce2b1ccca35a93127b8d1cf931c68dd4c6834 Author: George Kiagiadakis Date: Tue Jul 3 12:19:58 2012 +0300 cmake: pass -fvisibility-inlines-hidden to the compiler if it's supported This flag allows most inline functions to be hidden from the exported symbol table to avoid symbol table pollution. cmake/modules/TelepathyDefaults.cmake | 5 +++++ 1 file changed, 5 insertions(+) commit e3f3bbe052bc7923f32fac293cc8dc2900aea8d4 Author: Dario Freddi Date: Wed Jul 4 00:01:49 2012 +0200 Update NEWS NEWS | 1 + 1 file changed, 1 insertion(+) commit 0823b3097377f3675ac500b2646f6b7c5c4187b0 Merge: ab332ee a63f94b Author: Dario Freddi Date: Tue Jul 3 23:58:14 2012 +0200 Merge branch 'dbus-tubes' Reviewed-by: George Kiagiadakis Reviewed-by: Andre Moreira Magalhaes commit a63f94b88c1d89b7aacf7b322e05f42aa592ccd0 Author: Dario Freddi Date: Tue Jul 3 23:57:07 2012 +0200 dbus-tubes: Minor nitpicking on style and docs TelepathyQt/account.cpp | 10 +++++----- TelepathyQt/dbus-tube-channel.cpp | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) commit 4208b2432ff4619e42299188801e2bdaee153547 Author: Dario Freddi Date: Tue Jul 3 23:38:48 2012 +0200 dbus-tubes: Use dbus* instead of dBus* TelepathyQt/account.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) commit d4aa2998ec50f76bfcd25b38b6daec428c73a842 Author: George Kiagiadakis Date: Mon Jul 2 19:11:43 2012 +0300 dbus-tubes: update/fix copyright headers TelepathyQt/dbus-tube-channel.cpp | 2 +- TelepathyQt/dbus-tube-channel.h | 5 +++-- TelepathyQt/incoming-dbus-tube-channel.cpp | 2 +- TelepathyQt/incoming-dbus-tube-channel.h | 5 +++-- TelepathyQt/outgoing-dbus-tube-channel.cpp | 2 +- TelepathyQt/outgoing-dbus-tube-channel.h | 5 +++-- TelepathyQt/pending-dbus-tube-connection.cpp | 2 +- TelepathyQt/pending-dbus-tube-connection.h | 5 +++-- 8 files changed, 16 insertions(+), 12 deletions(-) commit 7551b4f5157954fd6ec1c42d8d99d7a3f397cefa Author: George Kiagiadakis Date: Mon Jul 2 18:44:41 2012 +0300 dbus-tubes: remove the unused pending-dbus-tube.* files TelepathyQt/pending-dbus-tube.cpp | 200 ------------------------------------- TelepathyQt/pending-dbus-tube.h | 71 ------------- 2 files changed, 271 deletions(-) commit 2cc843d26b61f4a6d227c481e244a5a835859fd5 Author: George Kiagiadakis Date: Mon Jul 2 18:40:29 2012 +0300 dbus-tubes: Remove ranom unused/wrong stuff TelepathyQt/dbus-tube-channel.h | 2 -- TelepathyQt/incoming-dbus-tube-channel.cpp | 3 --- TelepathyQt/outgoing-dbus-tube-channel.h | 2 +- 3 files changed, 1 insertion(+), 6 deletions(-) commit 12867e6834d5945d9c02293388c679ca5416d83f Author: George Kiagiadakis Date: Mon Jul 2 18:40:08 2012 +0300 dbus-tubes: Make DBusTubeChannel::setAddress() private TelepathyQt/dbus-tube-channel.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 5b4bf9e16c29e998930b0b3d870c797b16f7a92a Author: George Kiagiadakis Date: Mon Jul 2 18:39:30 2012 +0300 dbus-tubes: Remove useless destructors from Private classes TelepathyQt/dbus-tube-channel.cpp | 5 ----- TelepathyQt/incoming-dbus-tube-channel.cpp | 5 ----- TelepathyQt/outgoing-dbus-tube-channel.cpp | 5 ----- TelepathyQt/pending-dbus-tube-connection.cpp | 5 ----- TelepathyQt/pending-dbus-tube.cpp | 5 ----- 5 files changed, 25 deletions(-) commit 0f4984dda62c3731fb9eb12e29200e082c8c0469 Author: George Kiagiadakis Date: Mon Jul 2 18:31:53 2012 +0300 dbus-tubes: document DBusTubeChannel::busNameRemoved() TelepathyQt/dbus-tube-channel.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit 497a4e7b463bf68664bc49ad9ae8b79280ace8f0 Author: George Kiagiadakis Date: Mon Jul 2 18:31:05 2012 +0300 dbus-tubes: Move signal connection in Private TelepathyQt/dbus-tube-channel.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 6eafc3bf22b717dc61866d7310c666649bbb0986 Author: Daniele E. Domenichelli Date: Wed Apr 4 20:36:22 2012 +0200 dbus-tubes: Fix warning and comment TelepathyQt/incoming-dbus-tube-channel.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 317c86af80dbe1184afd4e22a029c254c4d4b36d Author: Daniele E. Domenichelli Date: Sat Mar 31 13:50:50 2012 +0200 dbus-tubes: Fix documentation TelepathyQt/dbus-tube-channel.cpp | 10 +++------- TelepathyQt/pending-dbus-tube-connection.cpp | 2 +- TelepathyQt/pending-dbus-tube.cpp | 2 +- TelepathyQt/pending-dbus-tube.h | 2 +- 4 files changed, 6 insertions(+), 10 deletions(-) commit 1524490b8cd7f121a8b4275bcbfef8866f5d6f6c Author: Dario Freddi Date: Sat Nov 12 00:29:42 2011 +0100 dbus-tubes: Update and improve the API documentation TelepathyQt/dbus-tube-channel.cpp | 85 +++++++++++---------- TelepathyQt/incoming-dbus-tube-channel.cpp | 105 ++++++++------------------ TelepathyQt/outgoing-dbus-tube-channel.cpp | 79 ++++++++----------- TelepathyQt/pending-dbus-tube-connection.cpp | 31 ++++++-- 4 files changed, 132 insertions(+), 168 deletions(-) commit 6ad490f2021335867c4129d66f283ee9a5b80872 Author: Dario Freddi Date: Fri Nov 11 23:36:31 2011 +0100 dbus-tubes: Use more sensible naming for autotest's variables tests/dbus/dbus-tube-chan.cpp | 56 ++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 28 deletions(-) commit c3977453476780e60a3c9809b72f2228ed7cd3c7 Author: Dario Freddi Date: Fri Nov 11 23:32:34 2011 +0100 dbus-tubes: Invert the mapping Contact->Bus Name This makes the API more consistent with Stream tubes. Also, split the busNamesChanged signal into two separate signals, giving out more details. TelepathyQt/dbus-tube-channel.cpp | 43 ++++++++-------- TelepathyQt/dbus-tube-channel.h | 5 +- tests/dbus/dbus-tube-chan.cpp | 97 +++++++++++++++++++++---------------- 3 files changed, 80 insertions(+), 65 deletions(-) commit c3fb6ef81c21c255764ef1acb639c1779476d634 Author: Dario Freddi Date: Fri Nov 11 22:50:37 2011 +0100 dbus-tubes: Rework credentials handling, inverting the logic and adopting credentials by default. In case credentials are not available, the tube will fall back to localhost. The D-Bus wire protocol always has one '\0' byte at the very beginning of the stream, which is not part of the authentication handshake (text-based SASL) and also not part of any of the subsequent D-Bus messages (binary). libdbus, GDBus etc. assume that this byte will always be present. If credentials-passing via SCM_CREDS (FreeBSD) or SCM_CREDENTIALS (Linux) is supported, the credentials accompany that '\0' byte. If the platform can't pass credentials (Windows) or can pass/get credentials without sending a byte (Linux and OpenBSD via SO_PEERCRED, some other platforms (Solaris?) via getpeereid or getpeerucred), it must still send the '\0' byte. On OSs where you can choose whether to send credentials out-of-band (LOCAL_CREDS), D-Bus expects you to say "yes" to LOCAL_CREDS too. For this reason why now default to credentials, and just warn if they are unsupported. With the new API, people really needing stringent security can either assert (forgoing tubes support these platforms) or otherwise check the capability accessor (supportsRestrictingToCurrentUser) before trying to accept / offer the tube. A check in the PendingDBusTube operation is also available. Thanks to Simon McVittie and Olli Salli for their help in analyzing and solving the issue. TelepathyQt/dbus-tube-channel.cpp | 4 +- TelepathyQt/dbus-tube-channel.h | 2 +- TelepathyQt/incoming-dbus-tube-channel.cpp | 38 ++++++------------- TelepathyQt/incoming-dbus-tube-channel.h | 2 +- TelepathyQt/outgoing-dbus-tube-channel.cpp | 23 ++++++------ TelepathyQt/outgoing-dbus-tube-channel.h | 2 +- TelepathyQt/pending-dbus-tube-connection.cpp | 51 +++---------------------- TelepathyQt/pending-dbus-tube-connection.h | 8 +--- tests/dbus/dbus-tube-chan.cpp | 52 +++++++++++--------------- 9 files changed, 57 insertions(+), 125 deletions(-) commit 61788f9d4b6d937d2f15ae781f61f8e84334cabb Author: Dario Freddi Date: Fri Nov 11 21:36:12 2011 +0100 dbus-tubes: Fix leaks in dbus tubes service tests/lib/glib/dbus-tube-chan.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) commit 2a994c6eedf10eae3e7320e276dfdd268de87b3a Author: Dario Freddi Date: Fri Nov 11 21:35:49 2011 +0100 dbus-tubes: Fix leaks in dbus test tests/dbus/dbus-tube-chan.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) commit 5bf3b0637dea687bf282619d808d33e2347f4815 Author: Dario Freddi Date: Fri Nov 11 00:40:20 2011 +0100 dbus-tubes: Expand testAcceptTwice into a full fledged corner cases test tests/dbus/dbus-tube-chan.cpp | 81 ++++++++++++++++++++++++++--------------- 1 file changed, 51 insertions(+), 30 deletions(-) commit 862e243250a25518191f205abb0328e09d4e9316 Author: Dario Freddi Date: Fri Nov 11 00:32:57 2011 +0100 dbus-tubes: Test corner cases in offering tests/dbus/dbus-tube-chan.cpp | 71 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) commit 3e873121045aeb3cc53eab3391d6aa0bbfc8b922 Author: Dario Freddi Date: Fri Nov 11 00:31:58 2011 +0100 dbus-tubes: Test the late activation of BusNamesMonitoring tests/dbus/dbus-tube-chan.cpp | 65 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) commit 5e32aa281dbe52f84b4a763ec664d74b599aa207 Author: Dario Freddi Date: Fri Nov 11 00:29:28 2011 +0100 dbus-tubes: Fix the test service by returning the correct DBUS_NAMES property tests/lib/glib/dbus-tube-chan.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) commit 10d69cacd948b543e5b1376dcedf28a17ad2c811 Author: Dario Freddi Date: Fri Nov 11 00:28:26 2011 +0100 dbus-tubes: Check the address in the pending connection as well tests/dbus/dbus-tube-chan.cpp | 4 ++++ 1 file changed, 4 insertions(+) commit 901d48eeb6592890866721c984cec2ccce1f5197 Author: Dario Freddi Date: Thu Nov 10 23:58:09 2011 +0100 dbus-tubes: Don't emit the busNamesChanged signal if we're just handling property construction for a late-enabled feature TelepathyQt/dbus-tube-channel.cpp | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) commit 934026b59f1b3043bd2d4c1158d371c0c3a214d5 Author: Dario Freddi Date: Fri Nov 4 22:03:15 2011 +0100 dbus-tubes: This test does not require GIO in the end. Although, it does require Qt 4.8 due to its new DBus API. tests/dbus/CMakeLists.txt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit d5a9a619c67f69d252ab188df8e4ab7ae841164e Author: Dario Freddi Date: Fri Nov 4 21:47:57 2011 +0100 dbus-tubes: Compare the expected handle/service combination when bus names change tests/dbus/dbus-tube-chan.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) commit a023b6309e2691a81829ea615924a7c3cdfecc63 Author: Dario Freddi Date: Fri Nov 4 21:44:41 2011 +0100 dbus-tubes: Clean up the test case and the test service tests/dbus/dbus-tube-chan.cpp | 62 +++++++-------------------------------- tests/lib/glib/dbus-tube-chan.c | 41 -------------------------- 2 files changed, 10 insertions(+), 93 deletions(-) commit 020fef3ad2c8144fd94ea1d76b6333b310576503 Author: Dario Freddi Date: Fri Nov 4 21:21:09 2011 +0100 dbus-tubes: Make all tests pass tests/dbus/dbus-tube-chan.cpp | 29 ++++++++--------------------- 1 file changed, 8 insertions(+), 21 deletions(-) commit c744a12074dd9793aabfd222f87d16375d7bef37 Author: Dario Freddi Date: Fri Nov 4 20:52:06 2011 +0100 dbus-tubes: Make offerSuccess pass tests/dbus/dbus-tube-chan.cpp | 86 +++++++++++++++++---------------------- tests/lib/glib/dbus-tube-chan.c | 57 +++++++++++++++++++++++--- tests/lib/glib/dbus-tube-chan.h | 9 ++++ 3 files changed, 99 insertions(+), 53 deletions(-) commit 97d1e301ad27be733d1b0f88a90426d2d1b08420 Author: Dario Freddi Date: Fri Nov 4 20:51:49 2011 +0100 dbus-tubes: Inject parameters in case the tube is offered TelepathyQt/outgoing-dbus-tube-channel.cpp | 2 +- TelepathyQt/pending-dbus-tube-connection.cpp | 31 ++++++++++++++++++++++++++ TelepathyQt/pending-dbus-tube-connection.h | 3 +++ 3 files changed, 35 insertions(+), 1 deletion(-) commit 5d92fa653ca321f35b8b7d1aca942766e1fe7896 Author: Dario Freddi Date: Fri Nov 4 19:51:14 2011 +0100 dbus-tubes: As the logic was already implemented, just enable the corresponding function to make testAcceptSuccess pass tests/dbus/dbus-tube-chan.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b6777083768ca450c66985b6a5447a24f0f5fee2 Author: Dario Freddi Date: Fri Nov 4 19:48:59 2011 +0100 dbus-tubes: Implement accept service-side, and have testAcceptSuccess working TelepathyQt/pending-dbus-tube-connection.cpp | 1 + tests/dbus/dbus-tube-chan.cpp | 22 +- tests/lib/glib/CMakeLists.txt | 3 +- tests/lib/glib/dbus-tube-chan.c | 276 +++++++++++++++++++++++++- 4 files changed, 271 insertions(+), 31 deletions(-) commit fa5734340248052e918638a5a4f17c381eb3ed3f Author: Dario Freddi Date: Thu Nov 3 22:49:09 2011 +0100 dbus-tubes: Add basic logic for accepting and offering a tube, implementing the full interface. testAcceptTwice now passes. tests/lib/glib/dbus-tube-chan.c | 118 +++++++++++++++++++++++++++++++++++++-- tests/lib/glib/dbus-tube-chan.h | 4 ++ 2 files changed, 117 insertions(+), 5 deletions(-) commit 767c9c758e23115a79e8904851d836d1dc2ae503 Author: Dario Freddi Date: Thu Nov 3 22:02:55 2011 +0100 dbus-tubes: Add an initial version of the DBus Tubes autotest. It's mostly a copy-paste from the STube one, to allow testing similar features in a similar ways. At the moment, the test is not functional, but compiles and passes the first basic steps. tests/dbus/CMakeLists.txt | 1 + tests/dbus/dbus-tube-chan.cpp | 695 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 696 insertions(+) commit 0c8db3e3a3e6769ae6bb60df81522bf577d29892 Author: Dario Freddi Date: Thu Nov 3 22:02:29 2011 +0100 dbus-tubes: Make immutable properties writable in the test service tests/lib/glib/dbus-tube-chan.c | 75 +++++++++++++++++++++++++++++---------- 1 file changed, 56 insertions(+), 19 deletions(-) commit dc3af232e83effe29435176046f70089d0946751 Author: Dario Freddi Date: Thu Nov 3 22:01:58 2011 +0100 dbus-tubes: Rename FeatureDBusTube into FeatureCore TelepathyQt/dbus-tube-channel.cpp | 24 ++++++++++++------------ TelepathyQt/dbus-tube-channel.h | 2 +- TelepathyQt/incoming-dbus-tube-channel.cpp | 8 ++++---- TelepathyQt/outgoing-dbus-tube-channel.cpp | 6 +++--- 4 files changed, 20 insertions(+), 20 deletions(-) commit cbe223d583136d68edea17a7e420dbd991fdb9cc Author: Dario Freddi Date: Thu Nov 3 17:56:36 2011 +0100 dbus-tubes: Rename to PendingDBusTubeConnection TelepathyQt/CMakeLists.txt | 8 +- TelepathyQt/PendingDBusTube | 13 -- TelepathyQt/PendingDBusTubeConnection | 13 ++ TelepathyQt/dbus-tube-channel.h | 2 +- TelepathyQt/incoming-dbus-tube-channel.cpp | 20 +-- TelepathyQt/incoming-dbus-tube-channel.h | 4 +- TelepathyQt/outgoing-dbus-tube-channel.cpp | 16 +- TelepathyQt/outgoing-dbus-tube-channel.h | 4 +- TelepathyQt/pending-dbus-tube-connection.cpp | 205 ++++++++++++++++++++++++++ TelepathyQt/pending-dbus-tube-connection.h | 71 +++++++++ 10 files changed, 316 insertions(+), 40 deletions(-) commit 3ad1c46263cd4a0e11dbfcaf33c78c96bfe9e883 Author: Dario Freddi Date: Tue Nov 1 23:12:25 2011 +0100 dbus-tubes: Implement proper handling of SCM_CREDENTIALS TelepathyQt/incoming-dbus-tube-channel.cpp | 23 ++++++++++++++-- TelepathyQt/outgoing-dbus-tube-channel.cpp | 3 ++- TelepathyQt/pending-dbus-tube.cpp | 39 +++++++++++++++++++++++++++- TelepathyQt/pending-dbus-tube.h | 11 +++++--- 4 files changed, 69 insertions(+), 7 deletions(-) commit 85fc52b4f74a788dd03230382be32a564d988084 Author: Dario Freddi Date: Tue Nov 1 23:10:47 2011 +0100 dbus-tubes: Add room specs for DBus tube channels TelepathyQt/channel-class-spec.cpp | 46 ++++++++++++++++++++++++++++++++++ TelepathyQt/channel-class-spec.h | 4 +++ TelepathyQt/channel-factory.cpp | 48 ++++++++++++++++++++++++++++++++++++ TelepathyQt/channel-factory.h | 32 ++++++++++++++++++++++++ 4 files changed, 130 insertions(+) commit 271e1635c2f6182bad815325ca1f75dd17c2c1b4 Author: Dario Freddi Date: Tue Nov 1 20:59:42 2011 +0100 dbus-tubes: Add autotests library from tp-glib tests/lib/glib/CMakeLists.txt | 3 +- tests/lib/glib/dbus-tube-chan.c | 325 +++++++++++++++++++++++++++++++++++++++ tests/lib/glib/dbus-tube-chan.h | 121 +++++++++++++++ 3 files changed, 448 insertions(+), 1 deletion(-) commit 3ba36e4a18b1db15a5889a76979ca80a25530cb1 Author: Dario Freddi Date: Thu Jun 30 11:31:50 2011 +0200 dbus-tubes: Before taking any action, check if the operation is still running (and hence if no action has been taken yet) TelepathyQt/pending-dbus-tube.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 31dc0ea3ea2796cdd1eb5ff38de21ef87e348979 Author: Dario Freddi Date: Thu Jun 16 14:37:15 2011 +0200 dbus-tubes: Print contact id as a debug info TelepathyQt/dbus-tube-channel.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 5b39773fc284fb9eafaa05f1cc99c474e3e2826d Author: Dario Freddi Date: Thu Jun 16 14:35:09 2011 +0200 dbus-tubes: Handle property names correctly TelepathyQt/dbus-tube-channel.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) commit dc7e28cce51de2e0f55edac758f4eba25c18f47f Author: Dario Freddi Date: Thu Jun 16 14:14:19 2011 +0200 dbus-tubes: Handle the contact queue properly in every case, and make the feature ready just after the whole queue has been introspected. TelepathyQt/dbus-tube-channel.cpp | 24 ++++++++++++++++++-- TelepathyQt/dbus-tube-channel.h | 1 + .../outgoing-stream-tube-channel-internal.h | 4 ++-- TelepathyQt/outgoing-stream-tube-channel.cpp | 12 +++++++--- 4 files changed, 34 insertions(+), 7 deletions(-) commit d8bfda6eac4ed61c741fb33773733867efd0f7f7 Author: Dario Freddi Date: Thu Jun 16 14:00:22 2011 +0200 dbus-tubes: If the handle type is not Room, simply finish the feature. TelepathyQt/dbus-tube-channel.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) commit 8f6d6be925da5d3d96fc190c29fe9ddcc5995ebc Author: Dario Freddi Date: Tue Jun 14 15:35:03 2011 +0200 dbus-tubes: Use requestAllProperties instead of GetAll TelepathyQt/dbus-tube-channel.cpp | 45 ++++++++++++++++++------------------- TelepathyQt/dbus-tube-channel.h | 2 +- 2 files changed, 23 insertions(+), 24 deletions(-) commit 0cec6fcd0cb272da9ebe76df167767adb3d1bd07 Author: Dario Freddi Date: Tue Jun 14 15:22:33 2011 +0200 dbus-tubes: Move the instrospection of DBusNames to the correct feature. TelepathyQt/dbus-tube-channel.cpp | 20 ++++++++++++++++++-- TelepathyQt/dbus-tube-channel.h | 1 + 2 files changed, 19 insertions(+), 2 deletions(-) commit f006f9530b01a5ddc2c52c1e7323cfce7df58dbe Author: Dario Freddi Date: Tue Jun 14 14:49:21 2011 +0200 dbus-tubes: Fix comments TelepathyQt/contact-capabilities.cpp | 4 ++-- TelepathyQt/dbus-tube-channel.cpp | 3 +-- TelepathyQt/incoming-dbus-tube-channel.cpp | 20 ++++++-------------- TelepathyQt/outgoing-dbus-tube-channel.cpp | 20 ++++++-------------- 4 files changed, 15 insertions(+), 32 deletions(-) commit 6e807b401b48a6b870e1c8f385c5ef70d6faa3bb Author: Dario Freddi Date: Tue Jun 14 14:44:53 2011 +0200 dbus-tubes: Merge the constructors in PendingDBusTube TelepathyQt/pending-dbus-tube.cpp | 19 +------------------ TelepathyQt/pending-dbus-tube.h | 3 +-- 2 files changed, 2 insertions(+), 20 deletions(-) commit 6f0844304e2e7479332c21b2257f1065257f73a7 Author: Dario Freddi Date: Thu Jun 9 16:59:16 2011 +0200 dbus-tubes: Don't emit a signal if the service is misbehaving; instead, print out a warning. TelepathyQt/dbus-tube-channel.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit fbf59fe4d4eb1bcca98aedf7b4743724b36e1c11 Author: Dario Freddi Date: Thu Jun 9 16:59:07 2011 +0200 dbus-tubes: Don't use insertMulti TelepathyQt/dbus-tube-channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit bbdcb504b9eb0ac8243b31e4f73f60644c71ff37 Author: Dario Freddi Date: Thu Jun 9 16:55:29 2011 +0200 dbus-tubes: Add dbusTubes in {Contact,Connection}Capabilities TelepathyQt/connection-capabilities.cpp | 16 ++++++++++++ TelepathyQt/connection-capabilities.h | 1 + TelepathyQt/contact-capabilities.cpp | 41 +++++++++++++++++++++++++++++++ TelepathyQt/contact-capabilities.h | 3 +++ 4 files changed, 61 insertions(+) commit f26ef38d1f6e8f7e151993aabc74c7131cfc64ff Author: Dario Freddi Date: Thu Jun 9 16:46:59 2011 +0200 dbus-tubes: Rather than relying on a tube state change, use invalidated() to detect errors correctly. TelepathyQt/pending-dbus-tube.cpp | 15 +++++++++++---- TelepathyQt/pending-dbus-tube.h | 3 +++ 2 files changed, 14 insertions(+), 4 deletions(-) commit a9b4d2c813df13fb18ba5447a639e0fac1bbd0c6 Author: Dario Freddi Date: Thu Jun 9 16:40:26 2011 +0200 dbus-tubes: Merge onAcceptFinished and onOfferFinished TelepathyQt/pending-dbus-tube.cpp | 36 ++++++------------------------------ TelepathyQt/pending-dbus-tube.h | 3 +-- 2 files changed, 7 insertions(+), 32 deletions(-) commit 4f5bf8fa028626755f4405af63a78dfa6d5cfa21 Author: Dario Freddi Date: Thu Jun 9 16:29:31 2011 +0200 dbus-tubes: Report the D-Bus event that causes logic to be run before running the logic. That way there's a hint that we're crashing in the response handling if the extraction is buggy. TelepathyQt/dbus-tube-channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 64ada2c89a61a03350a89f05cf99213f1c8d8d19 Author: Dario Freddi Date: Thu Jun 9 16:28:48 2011 +0200 dbus-tubes: Promote use of qObjectCast TelepathyQt/incoming-dbus-tube-channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d136d0f8e1b59babc13a3822cfafe7d3b2d84cc3 Author: Dario Freddi Date: Thu Jun 9 16:26:25 2011 +0200 dbus-tubes: Improve comments, and fix a variety of typos TelepathyQt/dbus-tube-channel.cpp | 21 +++++++++++++-------- TelepathyQt/outgoing-dbus-tube-channel.cpp | 5 +++-- TelepathyQt/pending-dbus-tube.cpp | 2 +- TelepathyQt/requestable-channel-class-spec.cpp | 2 +- 4 files changed, 18 insertions(+), 12 deletions(-) commit 653076ab8eed7c2353aa4ccb747432cd0e54d6df Author: Dario Freddi Date: Sat Jun 4 00:32:11 2011 +0200 dbus-tubes: Implement QueuedContactFactory for DBusTubeChannel as well TelepathyQt/dbus-tube-channel.cpp | 66 ++++++++++++++++++++++++++++--------- TelepathyQt/dbus-tube-channel.h | 1 + 2 files changed, 52 insertions(+), 15 deletions(-) commit fd01ca8dd407eebbb9796a6a13b973c98cc29bcb Author: Dario Freddi Date: Fri Jun 3 23:41:58 2011 +0200 dbus-tubes: Remove dbus-tube-channel-internal.h and add protected methods for fulfilling that TelepathyQt/dbus-tube-channel-internal.h | 54 ------------------------------ TelepathyQt/dbus-tube-channel.cpp | 29 +++++++++++++++- TelepathyQt/dbus-tube-channel.h | 2 ++ TelepathyQt/pending-dbus-tube.cpp | 5 ++- 4 files changed, 32 insertions(+), 58 deletions(-) commit 29be2a2f7b7571ece1b2a9cdea3804e9d11745ed Author: Dario Freddi Date: Fri Jun 3 23:35:07 2011 +0200 dbus-tubes: Add DBusTubeChannel to RequestableChannelClassSpec TelepathyQt/requestable-channel-class-spec.cpp | 23 +++++++++++++++++++++++ TelepathyQt/requestable-channel-class-spec.h | 1 + 2 files changed, 24 insertions(+) commit b69bb13a893b7eae109cff2c0c5e66caaf77c6de Author: Dario Freddi Date: Fri Jun 3 23:29:04 2011 +0200 dbus-tubes: Use a single implementation for pending DBus Tubes TelepathyQt/CMakeLists.txt | 12 +- TelepathyQt/PendingDBusTube | 13 ++ TelepathyQt/PendingDBusTubeAccept | 13 -- TelepathyQt/PendingDBusTubeOffer | 13 -- TelepathyQt/dbus-tube-channel.h | 3 +- TelepathyQt/incoming-dbus-tube-channel.cpp | 20 +-- TelepathyQt/incoming-dbus-tube-channel.h | 4 +- TelepathyQt/outgoing-dbus-tube-channel.cpp | 16 +-- TelepathyQt/outgoing-dbus-tube-channel.h | 4 +- TelepathyQt/pending-dbus-tube-accept.cpp | 150 --------------------- TelepathyQt/pending-dbus-tube-accept.h | 62 --------- TelepathyQt/pending-dbus-tube-offer.cpp | 151 ---------------------- TelepathyQt/pending-dbus-tube-offer.h | 62 --------- TelepathyQt/pending-dbus-tube.cpp | 193 ++++++++++++++++++++++++++++ TelepathyQt/pending-dbus-tube.h | 65 ++++++++++ 15 files changed, 298 insertions(+), 483 deletions(-) commit 858c2e9d4d75a40fbfb6fb96ac65b1261be3c2a5 Author: Dario Freddi Date: Fri Jun 3 22:59:42 2011 +0200 dbus-tubes: Rename FeatureBusNamesMonitoring to FeatureBusNameMonitoring TelepathyQt/dbus-tube-channel.cpp | 12 ++++++------ TelepathyQt/dbus-tube-channel.h | 2 +- TelepathyQt/outgoing-dbus-tube-channel.cpp | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) commit 3baebebe49de4dfe6f7c39c2011db48410bff154 Author: Dario Freddi Date: Thu Mar 17 14:55:15 2011 +0100 dbus-tubes: Code style fixes TelepathyQt/dbus-tube-channel.cpp | 15 ++++++--------- TelepathyQt/incoming-dbus-tube-channel.cpp | 5 ++--- TelepathyQt/outgoing-dbus-tube-channel.cpp | 3 +-- 3 files changed, 9 insertions(+), 14 deletions(-) commit 1c7624b633a34200428d80cd6f27cf2c28f1b5c1 Author: Dario Freddi Date: Tue Mar 15 18:22:25 2011 +0100 dbus-tubes: Move methods implementations in the right position TelepathyQt/dbus-tube-channel.cpp | 89 +++++++++++++++--------------- TelepathyQt/pending-dbus-tube-accept.cpp | 28 +++++----- TelepathyQt/pending-dbus-tube-offer.cpp | 28 +++++----- 3 files changed, 72 insertions(+), 73 deletions(-) commit 535b5f82ca055886c5232866dbc36ee93c815f43 Author: Dario Freddi Date: Tue Mar 15 18:17:28 2011 +0100 dbus-tubes: Remove the address() method in DBusTubeChannel's subclasses, and have one in DBusTubeChannel only TelepathyQt/dbus-tube-channel-internal.h | 54 +++++++++++++++++++++ TelepathyQt/dbus-tube-channel.cpp | 31 +++--------- TelepathyQt/dbus-tube-channel.h | 2 + TelepathyQt/incoming-dbus-tube-channel-internal.h | 43 ---------------- TelepathyQt/incoming-dbus-tube-channel.cpp | 31 ++++-------- TelepathyQt/incoming-dbus-tube-channel.h | 3 -- TelepathyQt/outgoing-dbus-tube-channel-internal.h | 42 ---------------- TelepathyQt/outgoing-dbus-tube-channel.cpp | 39 +++++++-------- TelepathyQt/outgoing-dbus-tube-channel.h | 3 -- TelepathyQt/pending-dbus-tube-accept.cpp | 4 +- TelepathyQt/pending-dbus-tube-offer.cpp | 5 +- 11 files changed, 95 insertions(+), 162 deletions(-) commit 00c66e9870e50c687daac61ce922793c454e1546 Author: Dario Freddi Date: Tue Mar 15 18:07:10 2011 +0100 dbus-tubes: Remove unneeded function TelepathyQt/dbus-tube-channel.cpp | 5 ----- TelepathyQt/dbus-tube-channel.h | 2 -- TelepathyQt/incoming-dbus-tube-channel.cpp | 2 +- TelepathyQt/outgoing-dbus-tube-channel.cpp | 2 +- 4 files changed, 2 insertions(+), 9 deletions(-) commit f49bc410e586dc1968a8274c83f9b2fe009da7e0 Author: Dario Freddi Date: Tue Mar 15 18:03:04 2011 +0100 dbus-tubes: Create/Improve Documentation TelepathyQt/dbus-tube-channel.cpp | 72 ++++++++++++----- TelepathyQt/incoming-dbus-tube-channel.cpp | 121 +++++++++++++++++++++++----- TelepathyQt/outgoing-dbus-tube-channel.cpp | 87 +++++++++++++++----- TelepathyQt/pending-dbus-tube-accept.cpp | 86 ++++++++++++-------- TelepathyQt/pending-dbus-tube-offer.cpp | 86 ++++++++++++-------- 5 files changed, 327 insertions(+), 125 deletions(-) commit adf30f38dbe46d96918e6f9f82e13e1f1457cc3d Author: Dario Freddi Date: Sat Mar 12 16:19:27 2011 +0100 dbus-tubes: Fix code style and conventions TelepathyQt/dbus-tube-channel.cpp | 37 ++++++++++----------- TelepathyQt/dbus-tube-channel.h | 10 +++--- TelepathyQt/incoming-dbus-tube-channel.cpp | 12 +++---- TelepathyQt/outgoing-dbus-tube-channel-internal.h | 4 +-- TelepathyQt/outgoing-dbus-tube-channel.cpp | 21 ++++-------- TelepathyQt/pending-dbus-tube-accept.cpp | 12 +++---- TelepathyQt/pending-dbus-tube-accept.h | 3 +- TelepathyQt/pending-dbus-tube-offer.cpp | 12 +++---- TelepathyQt/pending-dbus-tube-offer.h | 11 +++--- 9 files changed, 54 insertions(+), 68 deletions(-) commit d9ed4a2297e858e27c40b1e43eed5957d02e0a86 Author: Dario Freddi Date: Mon Dec 5 20:18:39 2011 +0100 dbus-tubes: Move the PendingOperations out to dedicated headers/impl files TelepathyQt/CMakeLists.txt | 6 + TelepathyQt/PendingDBusTubeAccept | 13 +++ TelepathyQt/PendingDBusTubeOffer | 13 +++ TelepathyQt/incoming-dbus-tube-channel-internal.h | 43 +++++++ TelepathyQt/incoming-dbus-tube-channel.cpp | 113 +----------------- TelepathyQt/incoming-dbus-tube-channel.h | 33 +----- TelepathyQt/outgoing-dbus-tube-channel-internal.h | 42 +++++++ TelepathyQt/outgoing-dbus-tube-channel.cpp | 115 +----------------- TelepathyQt/outgoing-dbus-tube-channel.h | 35 +----- TelepathyQt/pending-dbus-tube-accept.cpp | 128 +++++++++++++++++++++ TelepathyQt/pending-dbus-tube-accept.h | 63 ++++++++++ TelepathyQt/pending-dbus-tube-offer.cpp | 128 +++++++++++++++++++++ TelepathyQt/pending-dbus-tube-offer.h | 63 ++++++++++ TelepathyQt4/PendingDBusTubeAccept | 13 --- TelepathyQt4/PendingDBusTubeOffer | 13 --- 15 files changed, 508 insertions(+), 313 deletions(-) commit ccdd91ea8d506023b17de41f052f0286da1a0711 Author: Dario Freddi Date: Sat Mar 12 14:49:45 2011 +0100 dbus-tubes: Remove private inheritance, and references to unimplemented Qt API. As with Stream Tubes, now DBus tubes return the bare DBus address instead of a QDBusConnection or a QDBusServer. TelepathyQt/dbus-tube-channel-internal.h | 62 ------------- TelepathyQt/dbus-tube-channel.cpp | 134 +++++++++++++--------------- TelepathyQt/dbus-tube-channel.h | 18 ++-- TelepathyQt/incoming-dbus-tube-channel.cpp | 64 +++++-------- TelepathyQt/incoming-dbus-tube-channel.h | 13 +-- TelepathyQt/outgoing-dbus-tube-channel.cpp | 58 +++++------- TelepathyQt/outgoing-dbus-tube-channel.h | 12 +-- 7 files changed, 127 insertions(+), 234 deletions(-) commit 25e909053f670292da94052f9ba2dedfcd0dd9ff Author: Dario Freddi Date: Fri Jun 11 13:00:30 2010 +0200 dbus-tubes: Add missing pretty headers TelepathyQt/CMakeLists.txt | 2 ++ TelepathyQt4/PendingDBusTubeAccept | 13 +++++++++++++ TelepathyQt4/PendingDBusTubeOffer | 13 +++++++++++++ 3 files changed, 28 insertions(+) commit d064d2c2b31334c965c513b15551e3d0ef451f3e Author: Dario Freddi Date: Fri Jun 11 12:44:45 2010 +0200 dbus-tubes: Naming conventions: remove __k__ TelepathyQt/dbus-tube-channel-internal.h | 4 ++-- TelepathyQt/dbus-tube-channel.cpp | 8 ++++---- TelepathyQt/dbus-tube-channel.h | 4 ++-- TelepathyQt/incoming-dbus-tube-channel.cpp | 16 ++++++++-------- TelepathyQt/incoming-dbus-tube-channel.h | 4 ++-- TelepathyQt/outgoing-dbus-tube-channel.cpp | 16 ++++++++-------- TelepathyQt/outgoing-dbus-tube-channel.h | 4 ++-- 7 files changed, 28 insertions(+), 28 deletions(-) commit dd282ce93dd59ea01281ef860365f21ad95c9acf Author: Dario Freddi Date: Fri May 28 18:30:40 2010 +0200 dbus-tubes: Enabling high level DBus tubes in ChannelFactory TelepathyQt/channel-class-spec.cpp | 44 +++++++++++++++++++++++++++++++ TelepathyQt/channel-class-spec.h | 5 +++- TelepathyQt/channel-factory.cpp | 50 ++++++++++++++++++++++++++++++++++++ TelepathyQt/channel-factory.h | 32 +++++++++++++++++++++++ 4 files changed, 130 insertions(+), 1 deletion(-) commit b37715fbb40c9a1d4067524fb82f008f8612d21b Author: Dario Freddi Date: Fri May 28 18:28:02 2010 +0200 dbus-tubes: Adding an IncomingDBusTubeChannel class TelepathyQt/CMakeLists.txt | 4 + TelepathyQt/IncomingDBusTubeChannel | 13 ++ TelepathyQt/incoming-dbus-tube-channel.cpp | 303 ++++++++++++++++++++++++++++ TelepathyQt/incoming-dbus-tube-channel.h | 89 ++++++++ TelepathyQt/types.h | 2 + 5 files changed, 411 insertions(+) commit 0d16a01fe0c0aa9f33fac54ca894719159a20b16 Author: Dario Freddi Date: Fri May 28 18:01:41 2010 +0200 dbus-tubes: Add an OutgoingDBusTubeChannel class for handling servers. TelepathyQt/CMakeLists.txt | 4 + TelepathyQt/DBusTubeChannel | 2 +- TelepathyQt/OutgoingDBusTubeChannel | 13 ++ TelepathyQt/outgoing-dbus-tube-channel.cpp | 302 ++++++++++++++++++++++++++++ TelepathyQt/outgoing-dbus-tube-channel.h | 89 ++++++++ TelepathyQt/types.h | 2 + 6 files changed, 411 insertions(+), 1 deletion(-) commit c23da3ca5f118b69be65e3f01af7850be6e5b399 Author: Dario Freddi Date: Mon Dec 5 18:54:27 2011 +0100 dbus-tubes: Implementing the base DBusTubeChannel class TelepathyQt/CMakeLists.txt | 4 + TelepathyQt/DBusTubeChannel | 13 ++ TelepathyQt/account.cpp | 149 ++++++++++++ TelepathyQt/account.h | 22 ++ TelepathyQt/dbus-tube-channel-internal.h | 62 +++++ TelepathyQt/dbus-tube-channel.cpp | 366 ++++++++++++++++++++++++++++++ TelepathyQt/dbus-tube-channel.h | 85 +++++++ TelepathyQt/types.h | 2 + 8 files changed, 703 insertions(+) commit ab332eec3ebe2c36a2f3dcc6d4d3e160629600e8 Author: Dario Freddi Date: Mon Jul 2 17:52:11 2012 +0200 Update NEWS NEWS | 3 +++ 1 file changed, 3 insertions(+) commit c9d803117900e110bc4dd4c1c3b28499763d4a06 Merge: fbc8228 2062d6d Author: Dario Freddi Date: Mon Jul 2 17:50:24 2012 +0200 Merge branch 'cmake' Reviewed-by: Dario Freddi Reviewed-by: George Kiagiadakis commit 2062d6dd986e6f626f06b4d9c82e99bdbf569eab Author: Dario Freddi Date: Mon Jul 2 17:13:18 2012 +0200 cmake: Adding options for selectively compile components. This commit enables an option for compiling Farstream, Farsight, Examples and Tests CMakeLists.txt | 168 ++++++++++++++++++++++++++++++++------------------------ 1 file changed, 95 insertions(+), 73 deletions(-) commit 70f6c9f613145c37426087e2aa882ab888e72923 Author: George Kiagiadakis Date: Mon Jul 2 17:10:45 2012 +0300 cmake: rewrite FindDBus.cmake to do things in a more modern and consistent way cmake/modules/FindDBus.cmake | 73 +++++++++++++----------------------------- 1 file changed, 22 insertions(+), 51 deletions(-) commit fbc8228d96b6ab11077c6d33b6157f2819e11887 Author: Dario Freddi Date: Mon Jul 2 17:45:11 2012 +0200 Update NEWS NEWS | 1 + 1 file changed, 1 insertion(+) commit 710808598e8efbf33b94bf2235be0a53fdbe84da Merge: d424f10 5128eb6 Author: Dario Freddi Date: Mon Jul 2 16:52:44 2012 +0200 Merge branch 'debug-receiver' Reviewed-by: Dario Freddi Reviewed-by: Andre Moreira Magalhaes commit 5128eb6ba4a71b6e09109dead29941db3a557573 Author: Dario Freddi Date: Mon Jul 2 16:47:44 2012 +0200 DebugReceiver: Add missing documentation to public methods and signals TelepathyQt/debug-receiver.cpp | 41 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) commit c5907005aca35d33eaf36ad2dde6f94d657d9711 Author: Dario Freddi Date: Mon Jul 2 16:47:12 2012 +0200 DebugReceiver: Add spaces in comments TelepathyQt/debug-receiver.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c47e93c0159b62e4910faa11dcc5ed7c510536b0 Author: George Kiagiadakis Date: Sun Jul 1 16:47:25 2012 +0300 PendingDebugMessageList: Fix some coding style issues TelepathyQt/pending-debug-message-list.cpp | 7 ++++--- TelepathyQt/pending-debug-message-list.h | 11 +++++++---- 2 files changed, 11 insertions(+), 7 deletions(-) commit b2f09f8005a0d102edbd2da91fad81e96c241e26 Author: George Kiagiadakis Date: Sun Jul 1 16:36:20 2012 +0300 DebugReceiver: un-const-ify fetchMessages() TelepathyQt/debug-receiver.cpp | 7 +++---- TelepathyQt/debug-receiver.h | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) commit 6fb90ee135abbbdcfe87c30ae976f7b7705721a9 Author: George Kiagiadakis Date: Sun Jul 1 16:28:02 2012 +0300 DebugReceiver: Improve the API and fix some coding style issues TelepathyQt/constants.h | 6 ++ TelepathyQt/debug-receiver.cpp | 153 ++++++++++++++++------------------------ TelepathyQt/debug-receiver.h | 14 ++-- 3 files changed, 71 insertions(+), 102 deletions(-) commit 312a7e4779eae969b48d335256e32451a81bc222 Author: George Kiagiadakis Date: Sun Dec 11 19:44:42 2011 +0200 debug-receiver: Implement DebugReceiver TelepathyQt/debug-receiver.cpp | 125 +++++++++++++++++++++++++++++++++++++++- TelepathyQt/debug-receiver.h | 14 +++++ 2 files changed, 138 insertions(+), 1 deletion(-) commit 99968e5736c0690b332dd0f0d44a710f8f442d50 Author: George Kiagiadakis Date: Sun Dec 11 19:43:51 2011 +0200 debug-receiver: Add class PendingDebugMessageList TelepathyQt/CMakeLists.txt | 4 ++ TelepathyQt/PendingDebugMessageList | 13 ++++++ TelepathyQt/pending-debug-message-list.cpp | 67 ++++++++++++++++++++++++++++ TelepathyQt/pending-debug-message-list.h | 56 +++++++++++++++++++++++ 4 files changed, 140 insertions(+) commit 913c5bb23f694e9d523a2dfb892c1bfd437618a5 Author: George Kiagiadakis Date: Sat Dec 10 23:32:17 2011 +0200 debug-receiver: Add basic skeleton for the new Tp::DebugReceiver class. TelepathyQt/CMakeLists.txt | 4 +++ TelepathyQt/DebugReceiver | 13 ++++++++ TelepathyQt/debug-receiver.cpp | 68 ++++++++++++++++++++++++++++++++++++++++ TelepathyQt/debug-receiver.h | 63 +++++++++++++++++++++++++++++++++++++ TelepathyQt/types.h | 2 ++ 5 files changed, 150 insertions(+) commit 2ed75525f4ef92319afbda66a9bdf27a7b5d7f26 Author: George Kiagiadakis Date: Sat Dec 10 22:32:11 2011 +0200 debug-receiver: Enable generation of low level bindings for the o.f.T.Debug interface. TelepathyQt/CMakeLists.txt | 3 +++ TelepathyQt/debug-receiver.xml | 9 +++++++++ TelepathyQt/stable-interfaces.xml | 1 + 3 files changed, 13 insertions(+) commit d424f10ad898f87cff786d8177688e7e81a68b2e Merge: 22a5b05 2050756 Author: Dario Freddi Date: Mon Jul 2 15:54:58 2012 +0200 Merge branch 'optimize-qmap' Reviewed-by: George Kiagiadakis commit 20507563649ef3053398a709770c0a8e3d44113b Author: Dario Freddi Date: Sun Apr 29 16:07:21 2012 +0200 contact-manager: Change QMap to QHash where possible TelepathyQt/contact-manager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 68de1c4efaf1e5499028c21c16bbe7ecc18732e0 Author: Dario Freddi Date: Sun Apr 29 16:07:00 2012 +0200 optional-interface-factory: Change QMap to QHash where possible TelepathyQt/optional-interface-factory.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 383f731cb1932288b37f6755168d1c698ec0d3f2 Author: Dario Freddi Date: Sun Apr 29 16:05:49 2012 +0200 contact-manager-roster: Change QMap to QHash where possible TelepathyQt/contact-manager-internal.h | 7 +++---- TelepathyQt/contact-manager-roster.cpp | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) commit c35aa1bbd819b2b1cb3dc2105d1088a5094f0458 Author: Dario Freddi Date: Sun Apr 29 16:05:12 2012 +0200 connection: Change QMap to QHash where possible TelepathyQt/connection.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) commit 150282cee07f36ede17a77efdd67b9a83ad4cbe6 Author: Dario Freddi Date: Sun Apr 29 16:04:50 2012 +0200 call-channel: Change QMap to QHash where possible TelepathyQt/call-channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 476c59236fd579a89596b0528b182efd8b37b70c Author: Dario Freddi Date: Sun Apr 29 16:04:18 2012 +0200 account: Change QMap to QHash where possible TelepathyQt/account.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) commit 22a5b05e3d0b488892f1d20880ad69d41f000433 Merge: b263299 3b68bf1 Author: George Kiagiadakis Date: Wed May 23 15:41:48 2012 +0300 Merge branch 'tp-glib-0.19' Reviewed-by: Dario Freddi commit 3b68bf14960970434edf2e785d48efc70de9425a Author: George Kiagiadakis Date: Wed May 23 15:24:17 2012 +0300 tests/lib/glib: Remove the csh CM - it's unused and uses deprecated API. tests/lib/glib/CMakeLists.txt | 2 - tests/lib/glib/csh/CMakeLists.txt | 15 - tests/lib/glib/csh/conn.c | 292 -------------- tests/lib/glib/csh/conn.h | 58 --- tests/lib/glib/csh/connection-manager.c | 133 ------ tests/lib/glib/csh/connection-manager.h | 61 --- tests/lib/glib/csh/manager-file.py | 23 -- tests/lib/glib/csh/room-manager.c | 384 ------------------ tests/lib/glib/csh/room-manager.h | 55 --- tests/lib/glib/csh/room.c | 673 ------------------------------- tests/lib/glib/csh/room.h | 64 --- 11 files changed, 1760 deletions(-) commit 5cf2d1a911b2e57a888574b7e2b7f7a546435051 Author: George Kiagiadakis Date: Wed May 23 15:20:03 2012 +0300 tests/lib/glib/util.c: Remove tp_tests_connection_run_request_contact_handle This method uses deprecated API and it's not used anywhere, so it's not worth porting. tests/lib/glib/util.c | 44 -------------------------------------------- 1 file changed, 44 deletions(-) commit 291346312c256b237f14de67092c4a8e64a179b0 Author: George Kiagiadakis Date: Wed May 23 15:18:01 2012 +0300 textchan-null/textchan-group test CMs: Ignore deprecations for the moment These two service-side channel implementations are still using the deprecated TpTextMixin. In the future, we should get rid of them and use the echo2 CM as a replacement in the tests that use them. tests/lib/glib/textchan-group.c | 5 +++++ tests/lib/glib/textchan-null.c | 5 +++++ 2 files changed, 10 insertions(+) commit 1c30a3e09f19fcd91b332abbbff0ce531f8afe0e Author: George Kiagiadakis Date: Wed May 23 15:16:14 2012 +0300 text-chan test: Ignore deprecations to use TpTextMixin for compatibility functionality testing tests/dbus/text-chan.cpp | 3 +++ tests/lib/glib/echo/chan.c | 3 +++ 2 files changed, 6 insertions(+) commit 29809eef841dc6e057f67ce8468b1d0106514ffa Author: George Kiagiadakis Date: Wed May 23 15:03:43 2012 +0300 stream-tube-chan test CM: Don't use TpTextMixin - it's not needed and it's deprecated. tests/lib/glib/stream-tube-chan.c | 3 --- tests/lib/glib/stream-tube-chan.h | 3 --- 2 files changed, 6 deletions(-) commit 37d7a65b775c9c34ead38ba7312bef5b04a74913 Author: George Kiagiadakis Date: Tue May 22 18:44:55 2012 +0300 echo2 test CM: Replace tp_message_new/tp_message_set_handle with tp_cm_message_new/tp_cm_message_set_sender tests/lib/glib/echo2/chan.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) commit 510219be635008efb62e7ea80a1584763ee6fe1e Author: George Kiagiadakis Date: Tue May 22 18:02:46 2012 +0300 tests: Remove all occurencies of tp_handle_ref/unref. These methods are now deprecated and they have been no-op for a while, so it is safe to simply remove them. tests/dbus/account-channel-dispatcher.cpp | 2 -- tests/dbus/chan-conference.cpp | 4 ---- tests/dbus/client-factories.cpp | 2 -- tests/dbus/client.cpp | 2 -- tests/dbus/contact-messenger.cpp | 6 ------ tests/dbus/simple-observer.cpp | 2 -- tests/dbus/stream-tube-chan.cpp | 5 ----- tests/dbus/stream-tube-handlers.cpp | 5 ----- tests/dbus/text-chan.cpp | 2 -- tests/lib/glib/callable/media-channel.c | 8 ------- tests/lib/glib/callable/media-stream.c | 16 -------------- tests/lib/glib/contact-list-manager.c | 2 -- tests/lib/glib/contactlist/contact-list-manager.c | 16 -------------- tests/lib/glib/contactlist/contact-list.c | 6 ------ tests/lib/glib/contactlist2/contact-list.c | 13 +---------- tests/lib/glib/csh/room.c | 23 -------------------- tests/lib/glib/echo/chan.c | 22 ------------------- tests/lib/glib/echo2/chan.c | 24 --------------------- tests/lib/glib/future/conn-addressing/conn.c | 2 -- tests/lib/glib/simple-conn.c | 3 --- tests/lib/glib/textchan-null.c | 5 ----- 21 files changed, 1 insertion(+), 169 deletions(-) commit 7bd28f2d29a6aaa656de7ff9291698a713c5c61f Author: George Kiagiadakis Date: Tue May 22 17:43:08 2012 +0300 tests/lib/glib: Replace TP_ERRORS with TP_ERROR, as TP_ERRORS is now deprecated. tests/lib/glib/call/call-channel.c | 4 +-- tests/lib/glib/call/call-manager.c | 4 +-- tests/lib/glib/call/protocol.c | 4 +-- tests/lib/glib/callable/conn.c | 2 +- tests/lib/glib/callable/media-channel.c | 26 ++++++++++---------- tests/lib/glib/callable/media-manager.c | 2 +- tests/lib/glib/contact-search-chan.c | 6 ++--- tests/lib/glib/contactlist/conn.c | 4 +-- tests/lib/glib/contactlist/contact-list-manager.c | 6 ++--- tests/lib/glib/contactlist/contact-list.c | 4 +-- tests/lib/glib/contactlist2/protocol.c | 4 +-- tests/lib/glib/csh/conn.c | 16 ++++++------ tests/lib/glib/csh/connection-manager.c | 6 ++--- tests/lib/glib/csh/room-manager.c | 2 +- tests/lib/glib/csh/room.c | 2 +- tests/lib/glib/echo/conn.c | 2 +- tests/lib/glib/echo/im-manager.c | 2 +- tests/lib/glib/echo2/chan.c | 2 +- tests/lib/glib/echo2/connection-manager.c | 2 +- tests/lib/glib/echo2/im-manager.c | 2 +- tests/lib/glib/echo2/protocol.c | 12 ++++----- tests/lib/glib/future/conn-addressing/conn.c | 6 ++--- tests/lib/glib/params-cm.c | 4 +-- tests/lib/glib/simple-channel-dispatch-operation.c | 2 +- tests/lib/glib/simple-client.c | 2 +- tests/lib/glib/simple-conn.c | 4 +-- tests/lib/glib/stream-tube-chan.c | 8 +++--- 27 files changed, 70 insertions(+), 70 deletions(-) commit b2632998374b45af488b6c3a5a6fe330d23bb799 Author: George Kiagiadakis Date: Wed May 2 17:34:47 2012 +0300 Use quintptr instead of intptr_t. This fixes FTBFS with gcc-4.7, which requires to be included for intptr_t to be available. However, since stdint.h is not part of the C++03 standard, it is better to use Qt's types. Reviewed-by: Andre Moreira Magalhaes (andrunko) TelepathyQt/base-connection.cpp | 2 +- TelepathyQt/client-registrar.cpp | 2 +- TelepathyQt/stream-tube-client.cpp | 2 +- TelepathyQt/stream-tube-server.cpp | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) commit 861eb5f86a44c00e79de8c721110680e594c2eef Author: George Kiagiadakis Date: Fri Apr 13 22:05:22 2012 +0300 tests: Fix a race condition with createAccount() in test-account-basics and test-dbus-properties Reviewed-by: Andre Moreira Magalhaes (andrunko) tests/dbus/account-basics.cpp | 10 +++++++++- tests/dbus/dbus-properties.cpp | 9 ++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) commit 606c2c8255f354397e642aa3eb457fe54a8c7321 Author: George Kiagiadakis Date: Fri Apr 13 21:28:00 2012 +0300 Update NEWS NEWS | 7 +++++++ 1 file changed, 7 insertions(+) commit f15df8c845e8b21bcc0127ee22b320d9fd87250e Author: George Kiagiadakis Date: Fri Apr 13 21:07:08 2012 +0300 AccountManager: Rename accountForPath and accountsForPaths to accountForObjectPath and accountsForObjectPaths respectively. It turns out that the accountForPath name is not very intuitive, when the path is accessed from the objectPath() method. Reviewed-by: Andre Moreira Magalhaes (andrunko) TelepathyQt/account-manager.cpp | 26 +++++++++++++++++++++----- TelepathyQt/account-manager.h | 6 ++++-- examples/file-transfer/file-sender.cpp | 2 +- tests/dbus/account-basics.cpp | 2 +- 4 files changed, 27 insertions(+), 9 deletions(-) commit b2325ec9580ae6620901a8aa950fb5f00f2d8df0 Merge: 93625b6 ec2162d Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 13 14:37:56 2012 -0300 Merge branch 'svc-fixes' Reviewed-by: George Kiagiadakis commit ec2162d96988a773b48861c6bcd19c46bcdf6b23 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 13 14:01:33 2012 -0300 Only generate adaptors for non-deprecated stable interfaces. TelepathyQt/CMakeLists.txt | 22 ++++++++++++---------- cmake/modules/TpQtMacros.cmake | 3 ++- 2 files changed, 14 insertions(+), 11 deletions(-) commit 37fde05498e2f6df1c3b9b705444f4c7f3025327 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 13 14:04:27 2012 -0300 qt-svc-gen.py: Properly generate adaptee methods/signals/properties names in lowerCamelCase. Also renamed all places using vCard to vcard for consistency as the generated code will generate vcard for VCard when appropriate. TelepathyQt/base-protocol-internal.h | 6 ++-- TelepathyQt/base-protocol.cpp | 62 ++++++++++++++++---------------- TelepathyQt/base-protocol.h | 6 ++-- TelepathyQt/contact-manager.cpp | 6 ++-- TelepathyQt/contact.cpp | 4 +-- TelepathyQt/manager-file.cpp | 4 +-- TelepathyQt/protocol-info.cpp | 22 ++++++------ TelepathyQt/svc-channel.xml | 38 ++++++++++++++++++++ TelepathyQt/svc-connection-manager.xml | 13 +++++++ TelepathyQt/svc-connection.xml | 29 +++++++++++++++ examples/cm/protocol.cpp | 2 +- tests/dbus/base-protocol.cpp | 30 ++++++++-------- tools/qt-svc-gen.py | 17 +++++---- 13 files changed, 159 insertions(+), 80 deletions(-) commit 93625b67732094b922791280848d70077f1c5d1b Merge: 9cd3b18 240f9c0 Author: George Kiagiadakis Date: Fri Apr 13 19:11:22 2012 +0300 Merge branch 'cmake-fixes' Reviewed-by: Andre Moreira Magalhaes (andrunko) commit 240f9c038a0cc2b27d8a42b4bd53c1a959800bfc Author: George Kiagiadakis Date: Fri Apr 13 19:08:18 2012 +0300 cmake: Fix service-side compilation with -jX TelepathyQt/CMakeLists.txt | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) commit 9cd3b18be5b410d60f20c4bd066054698e304a3d Merge: b85446e b47b911 Author: George Kiagiadakis Date: Fri Apr 13 17:49:44 2012 +0300 Merge branch 'presence-additions' Reviewed-by: Andre Moreira Magalhaes (andrunko) commit b85446e1ee7a75de412f0de8e948139b31579532 Merge: 8c3a44b d3e13a2 Author: George Kiagiadakis Date: Fri Apr 13 17:49:05 2012 +0300 Merge branch 'test-base-protocol' Reviewed-by: Andre Moreira Magalhaes (andrunko) commit 8c3a44bc23a87e288a2f076734879d17c1be5104 Merge: 1c9933c aa817e4 Author: George Kiagiadakis Date: Fri Apr 13 17:47:37 2012 +0300 Merge branch 'test-base-cm' Reviewed-by: Andre Moreira Magalhaes (andrunko) commit b47b911b7bb1d3298be0be1f2a3cafe43169d6f5 Author: George Kiagiadakis Date: Fri Apr 13 15:51:21 2012 +0300 PresenceSpecList: Declare metatype TelepathyQt/presence.h | 1 + 1 file changed, 1 insertion(+) commit a1cc4a980d47aaf2a86442a1507368eb77bf3349 Author: George Kiagiadakis Date: Fri Apr 13 15:42:14 2012 +0300 test-base-protocol: Properly test the presence interface tests/dbus/base-protocol.cpp | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) commit 02f3c6f6d37a413b5ad394a216db43caad98e6b8 Author: George Kiagiadakis Date: Fri Apr 13 15:36:22 2012 +0300 test-presence: Test the new Presence constructors tests/presence.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 2a9e3cc01ff743e9fa40bad32b43ded76726cea5 Author: George Kiagiadakis Date: Fri Apr 13 15:35:22 2012 +0300 Presence: Add constructors for the rest of the possible presence statuses TelepathyQt/presence.cpp | 10 ++++++++++ TelepathyQt/presence.h | 2 ++ 2 files changed, 12 insertions(+) commit 0da6c17808341aacb3c303c49a88296febb031c3 Author: George Kiagiadakis Date: Fri Apr 13 13:36:41 2012 +0300 test-presence: Add tests for the high-level constructors of PresenceSpec tests/presence.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) commit c92ab27fd5d03dade4c3feda0d3d107c224ca278 Author: George Kiagiadakis Date: Fri Apr 13 13:35:29 2012 +0300 PresenceSpec: Add high-level API for easily creating PresenceSpec objects The default flags are based on telepathy-gabble's PresenceSpec flags. TelepathyQt/presence.cpp | 108 ++++++++++++++++++++++++++++++++++++++++++++++ TelepathyQt/presence.h | 23 ++++++++++ 2 files changed, 131 insertions(+) commit d3e13a20bad5c272cb1b6b2cb4f047ee6c3ad228 Author: George Kiagiadakis Date: Thu Apr 12 17:48:55 2012 +0300 tests: Add a unit test for BaseProtocol and its interfaces tests/dbus/CMakeLists.txt | 1 + tests/dbus/base-protocol.cpp | 666 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 667 insertions(+) commit fbb98da15c07b16b0417da5eb6c5cf9ed71b0d91 Author: George Kiagiadakis Date: Thu Apr 12 16:42:13 2012 +0300 BaseProtocolPresenceInterface: Add Statuses as immutable property TelepathyQt/base-protocol.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 68d97d44bf0c48cecdeba0cbb81fac1c8f52230c Author: George Kiagiadakis Date: Thu Apr 12 16:32:44 2012 +0300 Base*::immutableProperties: Re-wrap lines for readability and use QVariant::fromValue() qVariantFromValue() is obsolete since Qt 4.8 TelepathyQt/base-connection-manager.cpp | 3 +- TelepathyQt/base-protocol.cpp | 48 ++++++++++++++++++++----------- 2 files changed, 34 insertions(+), 17 deletions(-) commit 40ad90845d772accdec22d23b168b697ac4f9bc3 Author: George Kiagiadakis Date: Wed Apr 11 18:08:10 2012 +0300 Make the create() methods of the service-side API return a SharedPtr This avoids unnecessary casting after the new instance has been created. TelepathyQt/base-connection-manager.h | 9 +++++---- TelepathyQt/base-connection.h | 10 +++++----- TelepathyQt/base-protocol.h | 25 +++++++++++++++---------- 3 files changed, 25 insertions(+), 19 deletions(-) commit e14eda73fb5bbdd3a200ba4b7198acebff91c2c1 Author: George Kiagiadakis Date: Wed Apr 11 17:57:02 2012 +0300 BaseProtocol: Add missing Q_OBJECT macro in the protocol interface classes TelepathyQt/base-protocol.h | 4 ++++ 1 file changed, 4 insertions(+) commit 34fa155da0c204af7c5d6d7f94d09d9cd5c58811 Author: George Kiagiadakis Date: Wed Apr 11 17:54:30 2012 +0300 BaseProtocol: Add a new convenience interface(interfaceName) method TelepathyQt/base-protocol.cpp | 19 +++++++++++++++++-- TelepathyQt/base-protocol.h | 1 + 2 files changed, 18 insertions(+), 2 deletions(-) commit 20f343b3dc5b1fa3c9eb7c90ca9e51a52338155d Author: George Kiagiadakis Date: Mon Apr 9 20:56:14 2012 +0300 ProtocolParameter: Fix typo in the constructor arguments - flags should be of the respective QFlags type, not the enum type TelepathyQt/protocol-parameter.cpp | 6 +++--- TelepathyQt/protocol-parameter.h | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) commit 39a083a71ea9b1f6e295b9e02ecc2c83020d2c8f Author: George Kiagiadakis Date: Mon Apr 9 20:55:34 2012 +0300 BaseProtocol interfaces: Create adaptee classes earlier than adaptors This is better practice than having mPriv->adaptee be NULL before the interface has been registered and prevents a crash in BaseProtocolAvatarsInterface::immutableProperties() if this gets called with adaptee being NULL. We could also make immutableProperties() return an empty map if the adaptee has not been created, but it's probably safer for the future to always create the adaptee object and don't bother to check if it's NULL or not. TelepathyQt/base-protocol-internal.h | 9 +++---- TelepathyQt/base-protocol.cpp | 45 ++++++++++++++-------------------- 2 files changed, 21 insertions(+), 33 deletions(-) commit aa817e46ab60120084e82926caf0c1cef8dcaacf Author: George Kiagiadakis Date: Tue Apr 10 23:04:30 2012 +0300 TestThreadHelper: Start the thread after entering the event loop, as the code actually intended to do. tests/lib/test-thread-helper.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 5bf254fc18c499f578f7863c7a954bae4c99fddb Author: George Kiagiadakis Date: Tue Apr 10 22:15:37 2012 +0300 test-base-cm: Port to use TestThreadHelper tests/dbus/base-cm.cpp | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) commit 11feef12ef5138c703f9974bbd9a35c670cfcc76 Author: George Kiagiadakis Date: Tue Apr 10 20:44:48 2012 +0300 tests-lib: Add a new TestThreadHelper class This class allows us to run parts of a unit test in a different thread context, while being in sync with the unit test flow. This is useful to run connection manager implementations in a different thread, to overcome the shortcomings of the QtDBus local-loop optimizations. tests/lib/CMakeLists.txt | 22 ++++++++++- tests/lib/test-thread-helper.cpp | 36 ++++++++++++++++++ tests/lib/test-thread-helper.h | 77 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 133 insertions(+), 2 deletions(-) commit a1e4147a4677293164eed80e056f812309c6a33a Author: George Kiagiadakis Date: Mon Apr 9 17:52:05 2012 +0300 test-base-cm: Add test for the protocol-related methods of BaseCM tests/dbus/base-cm.cpp | 64 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) commit 9f7c332174554ebf821f9490e2463a666a7842ab Author: George Kiagiadakis Date: Mon Apr 9 17:19:15 2012 +0300 ConnectionManager: Finish introspection sucessfully when no protocols are found on the CM TelepathyQt/connection-manager.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) commit 5872ea5f62c6eff9d55e50941824f3ade55ec5fd Author: George Kiagiadakis Date: Mon Apr 9 17:18:54 2012 +0300 BaseConnection: Fix QString args replacement in registerObject() TelepathyQt/base-connection.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit df0621ea1b0ae7896edf69087790b4cd750d5ce0 Author: George Kiagiadakis Date: Mon Apr 9 17:17:29 2012 +0300 DBusService: Fix QString args replacement in registerObject() TelepathyQt/dbus-service.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit a3ebacbc33eb4c026a90e1191ac8da9c38aebcac Author: George Kiagiadakis Date: Mon Apr 9 17:12:12 2012 +0300 tests: Add a new test for testing BaseConnectionManager The test currently contains an adaptation of tp-glib's example-no-protocols test. tests/dbus/CMakeLists.txt | 4 ++ tests/dbus/base-cm.cpp | 92 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+) commit 1c9933cd7dc509779abcc22fd4622cb353798711 Merge: 63ce37b 542e0bc Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 6 14:01:43 2012 -0300 Merge branch 'svc-fixes' Reviewed-by: George Kiagiadakis commit 542e0bcb0da2ed461f250f03602b516b3942b6ee Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 6 13:51:48 2012 -0300 Move service side specific types from types.h to service-types.h as they are in separate libraries. The files will be merged in types.h once the libraries are merged. TelepathyQt/CMakeLists.txt | 4 ++- TelepathyQt/ServiceTypes | 13 ++++++++++ TelepathyQt/dbus-service.h | 1 + TelepathyQt/service-types.h | 59 +++++++++++++++++++++++++++++++++++++++++++ TelepathyQt/types.h | 20 ++------------- 5 files changed, 78 insertions(+), 19 deletions(-) commit b33642d78d4629b5b44776d12f2069d1afed42b3 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 6 13:16:24 2012 -0300 Revert "MethodInvocationContext: Add setFinishedWithError overload receiving a DBusError." This reverts commit 383213037d594cbbc3aa92681c75a0e40e6760ed. DBusError is part of telepathy-qt-service library and cannot be a dependency for the main telepathy-qt library. We may re-add it once we merge both libraries. TelepathyQt/base-connection-manager.cpp | 4 ++-- TelepathyQt/base-protocol.cpp | 8 ++++---- TelepathyQt/method-invocation-context.h | 9 +-------- 3 files changed, 7 insertions(+), 14 deletions(-) commit 63ce37b2c1a712892486d208b93a8ca3f44bc1ab Merge: c5979f9 b189cbb Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 6 13:38:59 2012 -0300 Merge remote-tracking branch 'gkiagia/svc-fixes' Reviewed-by: Andre Moreira Magalhaes (andrunko) commit b189cbb146e46360d956d91ac3c931bdac0bbfab Author: George Kiagiadakis Date: Fri Apr 6 01:28:40 2012 +0300 DBusObject: Add missing Q_OBJECT macro TelepathyQt/CMakeLists.txt | 1 + TelepathyQt/dbus-object.cpp | 2 ++ TelepathyQt/dbus-object.h | 1 + 3 files changed, 4 insertions(+) commit 24209de4511f1a5610e465a4b1be682fd4e1de23 Author: George Kiagiadakis Date: Fri Apr 6 01:20:33 2012 +0300 Do not install global.h twice. TelepathyQt/CMakeLists.txt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) commit c5979f96c48c756a47720580fc931ea3784e8192 Merge: b802ffe c9ddd40 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 5 12:23:50 2012 -0300 Merge remote-tracking branch 'gkiagia/service-side-docs' Reviewed-by: Andre Moreira Magalhaes (andrunko) commit c9ddd406ea8c0f3d992e8d17df5e10e4c5d5d39d Author: George Kiagiadakis Date: Thu Apr 5 18:01:52 2012 +0300 DBusObject: Add documentation TelepathyQt/dbus-object.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) commit 7f37fa32582941cf0168573aa7d4c2d6584bdc34 Author: George Kiagiadakis Date: Thu Apr 5 17:56:36 2012 +0300 AbstractAdaptor: Add documentation TelepathyQt/abstract-adaptor.cpp | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) commit 9c2cfb2feef1388e5a17ba3d23313f355203c133 Author: George Kiagiadakis Date: Thu Apr 5 17:36:11 2012 +0300 DBusError: Add documentation TelepathyQt/dbus-error.cpp | 59 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) commit 135b9e0fbd5b821f755f977e7985d0d27a1ec916 Author: George Kiagiadakis Date: Thu Apr 5 16:44:07 2012 +0300 AbstractDBusServiceInterface: Add missing doc for immutableProperties() TelepathyQt/dbus-service.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) commit 30c9feb1c4dba935072ab08c1990c233d75fefe5 Author: George Kiagiadakis Date: Thu Apr 5 16:43:06 2012 +0300 Document the callbacks system TelepathyQt/callbacks.dox | 161 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 161 insertions(+) commit 63494b734a7236b56657b9010483f04a5fae1efc Author: George Kiagiadakis Date: Wed Apr 4 18:53:22 2012 +0300 BaseProtocol: Add documentation TelepathyQt/base-protocol.cpp | 502 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 502 insertions(+) commit c1930718d2367ba2f5499cc01d373d6d47db3d8d Author: George Kiagiadakis Date: Wed Apr 4 18:03:58 2012 +0300 BaseConnection: Add documentation TelepathyQt/base-connection.cpp | 68 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) commit ef41d3bf4c44de194941df63f0415f443150bd18 Author: George Kiagiadakis Date: Wed Apr 4 17:51:02 2012 +0300 BaseConnectionManager: Add documentation TelepathyQt/base-connection-manager.cpp | 108 +++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) commit 5da412dc564a0c43cf8417b7935f431f4c250b38 Author: George Kiagiadakis Date: Wed Apr 4 17:45:19 2012 +0300 DBusService: Add documentation TelepathyQt/dbus-service.cpp | 142 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) commit 6f6d089589b25520fd6b2afdb7e026fa6ddc30f5 Author: George Kiagiadakis Date: Wed Apr 4 17:27:45 2012 +0300 groups.dox: Add new documentation groups for the service-side bindings TelepathyQt/groups.dox | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) commit b802ffe840ad89ea18e98b2a2d69577917ec66bf Merge: fe8b98f 54b8da6 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 5 12:21:51 2012 -0300 Merge branch 'service-side' Reviewed-by: George Kiagiadakis Reviewed-by: Dario Freddi commit 54b8da6d1cbcfd80c20227b1db41e7a28dcf9607 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 5 12:18:20 2012 -0300 Update README and add notes on how to build against Qt 5 alpha. README | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) commit 6d542c5859d94eb1511caaf05236a2e3331a74f8 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 5 11:44:15 2012 -0300 AbstractAdaptor: Remove setAdaptee. Changing adaptees at runtime is not desirable and generated adaptors will only connect to adaptee signals (relay) on construction. TelepathyQt/abstract-adaptor.cpp | 5 ----- TelepathyQt/abstract-adaptor.h | 1 - 2 files changed, 6 deletions(-) commit a3ee81009ccc62035aa2b7d6b20aeb95c2589dc1 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 5 09:37:46 2012 -0300 BaseProtocol: Properly make mPriv private. TelepathyQt/base-protocol.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f87b7484d122f5f6cd027267fd5707d03758078a Author: Andre Moreira Magalhaes (andrunko) Date: Wed Apr 4 17:36:37 2012 -0300 Properly build against Qt 5 alpha. Qt 5 alpha release has some build issues that should be addressed in order to build tp-qt against it: - When running configure in Qt 5 alpha, the pkgconfig files are properly generated, but when make is executed, the files are replaced with empty ones, so to build tp-qt one must either backup the pkgconfig files generated during the configure phase before running make and replace them afterwards, or re-run configure with the same parameters after building it. (reported and should be fixed when beta is out) - If Qt 5 alpha is built with -reduce-relocations enabled, one must add the keyword "reduce_relocations" to qtbase/lib/pkgconfig/QtCore.pc in the qt_config section, so that tp-qt knows when to use -fPIC/PIE accordingly. (reported and should be fixed when beta is out) CMakeLists.txt | 14 +++++++++++++- TelepathyQt/CMakeLists.txt | 9 ++++++--- TelepathyQt/Farsight/CMakeLists.txt | 3 ++- TelepathyQt/Farstream/CMakeLists.txt | 3 ++- cmake/modules/FindQt5.cmake | 9 ++++++++- cmake/modules/TpQtMacros.cmake | 4 ++-- examples/accounts/CMakeLists.txt | 3 ++- examples/cm/CMakeLists.txt | 3 ++- examples/contact-messenger/CMakeLists.txt | 3 ++- examples/extensions/CMakeLists.txt | 3 ++- examples/file-transfer/CMakeLists.txt | 6 ++++-- examples/protocols/CMakeLists.txt | 3 ++- examples/roster/CMakeLists.txt | 6 ++++-- examples/stream-tubes/CMakeLists.txt | 6 ++++-- 14 files changed, 55 insertions(+), 20 deletions(-) commit 7e993408ddaf5ead064f86a5cfe59f1be3a93329 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Apr 4 11:17:39 2012 -0300 DBusService: Use DBusObject. TelepathyQt/base-connection-manager.cpp | 1 + TelepathyQt/base-connection.cpp | 1 + TelepathyQt/base-protocol.cpp | 39 ++++++++++++++++--------------- TelepathyQt/base-protocol.h | 32 ++++++++++++------------- TelepathyQt/dbus-service.cpp | 35 +++++++++++---------------- TelepathyQt/dbus-service.h | 11 +++++---- examples/cm/protocol.cpp | 6 ++--- 7 files changed, 60 insertions(+), 65 deletions(-) commit 6c258da57b40dab608c31b6abdff93d2792bf9c0 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Apr 4 11:16:15 2012 -0300 DBusObject: Add utility class holding a QDBusConnection. TelepathyQt/CMakeLists.txt | 3 +++ TelepathyQt/DBusObject | 13 ++++++++++ TelepathyQt/dbus-object.cpp | 56 ++++++++++++++++++++++++++++++++++++++++++ TelepathyQt/dbus-object.h | 57 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 129 insertions(+) commit 10e13da5825e28e0f3ac9bfd8b387b5bcf4d499d Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 3 18:55:01 2012 -0300 BaseConnectionManager: Fix debug string. TelepathyQt/base-connection-manager.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit b70932d4b9502dceb5b45ea522243d585a3d03f7 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 3 18:54:44 2012 -0300 BaseConnection: Add cmName accessor. TelepathyQt/base-connection.cpp | 5 +++++ TelepathyQt/base-connection.h | 1 + 2 files changed, 6 insertions(+) commit 575067ad597d2cf324a9f711b16fe2e0a6ce4119 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 3 18:53:53 2012 -0300 *DBusService*: Add public immutableProperties virtual method to be reimplemented by services and optinal interfaces. TelepathyQt/base-connection-manager.cpp | 7 +++++ TelepathyQt/base-connection-manager.h | 2 ++ TelepathyQt/base-connection.cpp | 6 ++++ TelepathyQt/base-connection.h | 2 ++ TelepathyQt/base-protocol.cpp | 50 ++++++++++++++++++++++++++----- TelepathyQt/base-protocol.h | 6 ++++ TelepathyQt/dbus-service.h | 5 ++++ 7 files changed, 71 insertions(+), 7 deletions(-) commit 9c168d5dd156ae8a4dc1d452373ebe936572075b Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 3 18:50:23 2012 -0300 BaseProtocol: Add more checks in plugInterface. TelepathyQt/base-protocol.cpp | 31 +++++++++++++++++++++++++------ TelepathyQt/base-protocol.h | 2 +- 2 files changed, 26 insertions(+), 7 deletions(-) commit f3195b924e18de5d1cd1a9432fb9823a61452338 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 3 18:49:18 2012 -0300 BaseConnectionManager: Check if protocol is already registered in registerObject. TelepathyQt/base-connection-manager.cpp | 6 ++++++ 1 file changed, 6 insertions(+) commit 555aa2fc85587ebc2d9935f7d4396b1c9fa42bf3 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 3 18:48:40 2012 -0300 BaseConnection: Check for isRegistered on registerObject. TelepathyQt/base-connection.cpp | 4 ++++ 1 file changed, 4 insertions(+) commit 452dc304c698f15a5a7b43149320b40ef3318820 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 3 18:48:14 2012 -0300 BaseConnectionManager: Check for isRegistered on registerObject. TelepathyQt/base-connection-manager.cpp | 4 ++++ 1 file changed, 4 insertions(+) commit 7711932beeac265620a7e73bdf37898e44beacaf Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 3 18:46:11 2012 -0300 BaseProtocol: Check for isRegistered in registerObject. TelepathyQt/base-protocol.cpp | 4 ++++ 1 file changed, 4 insertions(+) commit 28827058019699a323f57ef2351f1776a9be8e93 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 3 18:42:41 2012 -0300 AbstractDBusServiceInterface: Change how registration works to allow interfaces to check whether they are already registered. TelepathyQt/base-protocol.cpp | 52 +++++++++++++++-------------------------- TelepathyQt/base-protocol.h | 40 +++++++++++++++---------------- TelepathyQt/dbus-service.cpp | 42 +++++++++++++++++++++++++++++---- TelepathyQt/dbus-service.h | 9 +++++-- examples/cm/protocol.cpp | 6 ++--- 5 files changed, 86 insertions(+), 63 deletions(-) commit eaae5d521eeb8faca0ff2f43a8b06b9ade48d389 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 3 15:24:59 2012 -0300 BaseProtocol*: Warn and return if trying to change immutable property after object registration. TelepathyQt/base-protocol.cpp | 45 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) commit 9115a02301124d3b4ea60f7a811b42498a087850 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 3 15:11:13 2012 -0300 BaseProtocol: No point in keeping adaptor pointers around in adaptee instances. TelepathyQt/base-protocol-internal.h | 4 ---- TelepathyQt/base-protocol.cpp | 8 ++++---- 2 files changed, 4 insertions(+), 8 deletions(-) commit 40b4d6f147427b4c7fe7d1474e208b2e6532882e Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 3 15:09:37 2012 -0300 BaseProtocol*Interface: Warn if createAdaptor is called more than once. TelepathyQt/base-protocol.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) commit e92210fc716e86b1dd76910f07004a1418f3a8aa Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 3 15:09:30 2012 -0300 BaseProtocol*Interface: Use interface as parent for adaptees. TelepathyQt/base-protocol.cpp | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) commit c33bde0226ee543e65ff14024744946d68fa07e9 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 3 14:57:47 2012 -0300 AbstractDBusServiceInterface: Use QString instead of QLatin1String to store interface name. TelepathyQt/base-protocol.cpp | 2 +- TelepathyQt/base-protocol.h | 2 +- TelepathyQt/dbus-service.cpp | 8 ++++---- TelepathyQt/dbus-service.h | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) commit 4a7760b4810bb9b2d42536ca7bdeeaeea6d94c82 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 3 14:54:20 2012 -0300 AbstractDBusServiceInterface: Export it and add Q_OBJECT macro. TelepathyQt/dbus-service.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit fcd3df7d370c69f5fef16f5203540060b87a2a54 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 3 14:53:23 2012 -0300 DBusError: Fix copyright notice. TelepathyQt/dbus-error.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 165bc8dcfefe126a68412792724c1e077157cda7 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 3 14:50:09 2012 -0300 BaseCallback: No need to check pointer before calling delete when we guarantee the pointer is properly nullfied when appropriate. TelepathyQt/callbacks.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) commit 44e9877271e3f6fbbf2212c9ad563b1aca37ef82 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 3 14:44:21 2012 -0300 BaseConnectionManager: Unexport add/removeConnection. TelepathyQt/base-connection-manager.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 6763cc95ca7976bf3b0e5f2f4cf8d6ec9c6da245 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 2 10:28:27 2012 -0300 qt-svc-gen.py: Improve props docs. tools/qt-svc-gen.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 94fb8f7e048cbacf261c2fa89d83f91dc1c401c5 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 2 10:25:21 2012 -0300 cm example: Add example for BaseProtocolPresenceInterface usage. examples/cm/protocol.cpp | 18 ++++++++++++++++++ examples/cm/protocol.h | 1 + 2 files changed, 19 insertions(+) commit 124975bc160784805a06abc35065db7c2208bd89 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 2 10:32:08 2012 -0300 BaseProtocolPresenceInterface: Add support for Proto.I.Presence. TelepathyQt/BaseProtocolPresenceInterface | 13 +++++++ TelepathyQt/CMakeLists.txt | 1 + TelepathyQt/base-protocol-internal.h | 17 ++++++++ TelepathyQt/base-protocol.cpp | 60 +++++++++++++++++++++++++++++ TelepathyQt/base-protocol.h | 25 +++++++++--- TelepathyQt/types.h | 2 + 6 files changed, 113 insertions(+), 5 deletions(-) commit 8c11d02d62a8b6dc492c26a634e0039f4a5dece0 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 2 10:04:18 2012 -0300 cm example: Add example for BaseProtocolAvatarsInterface usage. examples/cm/protocol.cpp | 5 +++++ examples/cm/protocol.h | 1 + 2 files changed, 6 insertions(+) commit 0fa688f5bece65969a8686bbf5919cc9ee5dc956 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 2 10:32:00 2012 -0300 BaseProtocolAvatarsInterface: Add support for Proto.I.Avatars. TelepathyQt/BaseProtocolAvatarsInterface | 13 ++++ TelepathyQt/CMakeLists.txt | 1 + TelepathyQt/base-protocol-internal.h | 31 ++++++++++ TelepathyQt/base-protocol.cpp | 97 ++++++++++++++++++++++++++++++ TelepathyQt/base-protocol.h | 27 +++++++-- TelepathyQt/types.h | 2 + 6 files changed, 166 insertions(+), 5 deletions(-) commit 6e8d06d5ce57603a327129c508dea7a8a3669781 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 2 09:41:07 2012 -0300 cm example: Add example for BaseProtocolAddressingInterface usage. examples/cm/protocol.cpp | 32 +++++++++++++++++++++++--------- examples/cm/protocol.h | 9 ++++++++- 2 files changed, 31 insertions(+), 10 deletions(-) commit 8a408ee686e6a75861376bdbfbf2c2acacc8ebe0 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 2 09:40:18 2012 -0300 BaseProtocolAddressingInterface: Add support for Proto.I.Addressing. TelepathyQt/BaseProtocolAddressingInterface | 13 +++ TelepathyQt/CMakeLists.txt | 1 + TelepathyQt/base-protocol-internal.h | 25 +++++ TelepathyQt/base-protocol.cpp | 135 +++++++++++++++++++++++++++ TelepathyQt/base-protocol.h | 34 +++++-- TelepathyQt/types.h | 2 + 6 files changed, 203 insertions(+), 7 deletions(-) commit b412bae468047952d9d45341a7fcfe2cbae901a9 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 2 09:37:02 2012 -0300 BaseProtocol: Add support for optional interfaces. TelepathyQt/base-protocol.cpp | 29 ++++++++++++++++++++++++++--- TelepathyQt/base-protocol.h | 3 +++ 2 files changed, 29 insertions(+), 3 deletions(-) commit 60c94fe0d40612b14f2f796319449e94624cbbc4 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 2 09:35:23 2012 -0300 AbstractProtocolInterface: Add base class (abstract) for BaseProtocol optional interfaces. TelepathyQt/AbstractProtocolInterface | 13 +++++++++++++ TelepathyQt/CMakeLists.txt | 1 + TelepathyQt/base-protocol.cpp | 9 +++++++++ TelepathyQt/base-protocol.h | 18 ++++++++++++++++++ TelepathyQt/types.h | 2 ++ 5 files changed, 43 insertions(+) commit a4c73115e63bb4df160e17d4b48db8f05cd728e9 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 2 09:26:41 2012 -0300 AbstractDBusServiceInterface: Add base class (abstract) for DBusService optional interfaces. TelepathyQt/AbstractDBusServiceInterface | 13 +++++++++++++ TelepathyQt/CMakeLists.txt | 1 + TelepathyQt/dbus-service.cpp | 25 +++++++++++++++++++++++++ TelepathyQt/dbus-service.h | 19 +++++++++++++++++++ 4 files changed, 58 insertions(+) commit 2169b5b50ac788719930930e627b323adf14c1db Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 2 10:31:00 2012 -0300 BaseProtocol: Add more convenience methods for create. TelepathyQt/base-protocol.h | 8 ++++++++ 1 file changed, 8 insertions(+) commit d70953cef69f3ca41107c912d0cb5f541b230556 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 2 09:41:49 2012 -0300 BaseConnection: Add more convenience methods for create. TelepathyQt/base-connection.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) commit 27f36c08c01d2acd72db075c4acf11cae0360291 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 2 08:20:47 2012 -0300 qt-svc-gen.py: Generate docs for signals. tools/qt-svc-gen.py | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) commit 38df46fe7e43f32764bd342e96e754e0e5ac67f2 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 2 07:54:55 2012 -0300 qt-svc-gen.py: Generate docs for methods. tools/qt-svc-gen.py | 57 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 53 insertions(+), 4 deletions(-) commit be7687fc803adbc04beb31802915e10d40f6ffee Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 2 07:21:30 2012 -0300 qt-svc-gen.py: Generate docs for properties. tools/qt-svc-gen.py | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) commit 0743f89d3f8e90aef6d1d62f86e4076af34f59ea Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 2 07:09:22 2012 -0300 qt-svc-gen.py: Use lowerCamelCase for adaptee properties names/methods/signals. TelepathyQt/base-connection-manager-internal.h | 4 +- TelepathyQt/base-protocol-internal.h | 20 ++++----- TelepathyQt/base-protocol.cpp | 16 +++---- TelepathyQt/base-protocol.h | 4 +- tools/qt-svc-gen.py | 54 ++++++++++++++++-------- 5 files changed, 59 insertions(+), 39 deletions(-) commit 0156f3d42a7cb600fbc5612ea89d9202c8a57743 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 15 15:11:40 2012 -0300 BaseProtocol: Use callbacks. TelepathyQt/base-connection-manager.cpp | 6 +--- TelepathyQt/base-protocol.cpp | 60 +++++++++++++++++++------------ TelepathyQt/base-protocol.h | 18 +++++++--- examples/cm/protocol.cpp | 5 +++ 4 files changed, 57 insertions(+), 32 deletions(-) commit 0ece8e40bbf697960c035032618e997fbca655a4 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 15 15:10:38 2012 -0300 BaseCallback: Add isValid accessor. TelepathyQt/callbacks.h | 2 ++ 1 file changed, 2 insertions(+) commit b2bf8263c1ee5bf05bfb9a51bd7274a74535e018 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 15 15:06:27 2012 -0300 BaseProtocol: Fix getParameters to not send QVariant::Invalid for ParamSpec::defaultValue. TelepathyQt/base-protocol.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) commit 2b52121da07bd513631affc80f041d45136d5bfb Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 15 15:04:58 2012 -0300 BaseConnectionManager: Fix getParameters to not send QVariant::Invalid for ParamSpec::defaultValue. TelepathyQt/base-connection-manager.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) commit 6b05068474c98286f1aec6827200968abc121551 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 15 01:04:52 2012 -0300 callbacks test: Add initial tests for the callback system. tests/CMakeLists.txt | 1 + tests/callbacks.cpp | 261 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 262 insertions(+) commit 5a5094d0e28545f3f74b6e89635d77b01c63ba1d Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 15 00:18:02 2012 -0300 Add classes for the callback system. The callback system will be used initially by service side high-level APIs to expose methods that may/should be overriden in implementations. Ideally we'd use virtual methods for this, but as new methods can be added freely (when interfaces changes), we would not be able to guarantee a stable API/ABI. Other options were also analysed, such as virtual padding, virtual_hook as well as using Qt slots override mechanism with QMetaObject calls, but in the end they all have their own issues and we decided to go with callbacks. Usage example: // expects a method with the following signature: // void method(); Tp::Callback0 cb = memFun(myObj, &MyImpl::method); // or Tp::Callback0 cb = ptrFun(&method); // expects a method with the following signature: // char *index(const char *s, char c); Tp::Callback2 cb = memFun(myObj, &MyImpl::index); // or Tp::Callback2 cb = ptrFun(&index); TelepathyQt/CMakeLists.txt | 4 + TelepathyQt/Callbacks | 13 ++ TelepathyQt/Functors | 13 ++ TelepathyQt/callbacks.h | 386 ++++++++++++++++++++++++++++++++++++++++++++ TelepathyQt/functors.h | 343 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 759 insertions(+) commit f821bc8dc3f8fc7d57c437503eb56375451b7046 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 15 01:40:55 2012 -0300 BaseProtocol: Add skeleton (commented) protocol interfaces. TelepathyQt/base-protocol.h | 60 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) commit 635f804067487717adc0360872f093ed97c68c1f Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 15 01:40:19 2012 -0300 DBusService: No need to check for error in registerObject as the param is mandatory. TelepathyQt/dbus-service.cpp | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) commit 295a56130d95c79a6f84edc2dd5a11fe55b76e33 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 15 01:39:00 2012 -0300 BaseConnectionManager: Always pass error to DBusService::registerObject. TelepathyQt/base-connection-manager.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit 8b770593792082e9de48ddbd340e3ba53c052e7a Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 15 01:38:15 2012 -0300 BaseConnection: Always pass error to DBusService::registerObject. TelepathyQt/base-connection.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit 2a99ef01b3fc99602894081c655b4783a89f500e Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 15 01:36:31 2012 -0300 BaseConnection: Add default param to registerObject. TelepathyQt/base-connection.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 9813aa845089286454405d125d725f44efc319f6 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 15 01:36:00 2012 -0300 BaseProtocol: No need to check for error in callbacks as they are mandatory. TelepathyQt/base-protocol.cpp | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) commit 1a1ff8851c7a7cfcced8a26f162af474e397f22e Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 15 01:07:04 2012 -0300 DBusError: Disable copy. TelepathyQt/dbus-error.cpp | 14 ++------------ TelepathyQt/dbus-error.h | 13 ++++--------- 2 files changed, 6 insertions(+), 21 deletions(-) commit a4b05b4af7c06e3cbc050b1c3d0297c001309b63 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 2 19:05:23 2012 -0300 cm example: Reimplement BaseProtocol::identifyAccount/normalizeContact. TelepathyQt/utils.cpp | 4 ++++ examples/cm/protocol.cpp | 16 ++++++++++++++++ examples/cm/protocol.h | 4 ++-- 3 files changed, 22 insertions(+), 2 deletions(-) commit 8e714dff1697cc95b3e08e68e7169b2d39903b33 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 2 18:58:06 2012 -0300 BaseProtocol: Add Q_UNUSED(parameters) to default createConnection. TelepathyQt/base-protocol.cpp | 1 + 1 file changed, 1 insertion(+) commit e78e7f07c02f711542cbedec741268e82ced14d2 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 2 18:57:40 2012 -0300 BaseProtocol: Implement Protocol.NormalizeContact support. TelepathyQt/base-protocol-internal.h | 2 +- TelepathyQt/base-protocol.cpp | 26 ++++++++++++++++++++++---- TelepathyQt/base-protocol.h | 2 +- 3 files changed, 24 insertions(+), 6 deletions(-) commit 536ef9bc9c70a1d5c4235e367f76bc3fe8fff045 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 2 18:56:51 2012 -0300 BaseProtocol: Implement Protocol.IdentifyAccount support. TelepathyQt/base-protocol.cpp | 24 +++++++++++++++++++++--- TelepathyQt/base-protocol.h | 2 +- 2 files changed, 22 insertions(+), 4 deletions(-) commit 23659b7588b6e0eba5f7925173797167ec411a93 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 2 18:33:42 2012 -0300 cm example: Add basic support for protocols. examples/cm/CMakeLists.txt | 9 ++++++- examples/cm/main.cpp | 9 +++++-- examples/cm/protocol.cpp | 60 ++++++++++++++++++++++++++++++++++++++++++++ examples/cm/protocol.h | 43 +++++++++++++++++++++++++++++++ 4 files changed, 118 insertions(+), 3 deletions(-) commit cd0e47214302124bd226a2acb7a4cc4984d13ab4 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 2 18:32:35 2012 -0300 BaseConnectionManager: Implement ConnectionManager.RequestConnection support. TelepathyQt/base-connection-manager-internal.h | 2 +- TelepathyQt/base-connection-manager.cpp | 69 ++++++++++++++++++++++-- TelepathyQt/base-connection-manager.h | 10 ++++ 3 files changed, 75 insertions(+), 6 deletions(-) commit 44adc6c2fbd70371dd797ee8b28c72c2d587981e Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 2 18:27:19 2012 -0300 BaseConnectionManager: Properly validate protocolName on ConnectionManager.GetParameters. TelepathyQt/base-connection-manager.cpp | 6 ++++++ 1 file changed, 6 insertions(+) commit 383213037d594cbbc3aa92681c75a0e40e6760ed Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 2 18:26:15 2012 -0300 MethodInvocationContext: Add setFinishedWithError overload receiving a DBusError. TelepathyQt/method-invocation-context.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) commit 7ec41e9558c3580269d6bef2506c366e59352787 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 2 18:21:35 2012 -0300 BaseProtocol: Add createConnection "virtual" slot. TelepathyQt/base-protocol.cpp | 9 +++++++++ TelepathyQt/base-protocol.h | 1 + 2 files changed, 10 insertions(+) commit 52902b5a400eb133349a6eeb8478c0519788d11a Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 2 18:24:20 2012 -0300 BaseConnection: Add skeleton class. TelepathyQt/BaseConnection | 13 ++++ TelepathyQt/CMakeLists.txt | 5 ++ TelepathyQt/base-connection-internal.h | 45 +++++++++++ TelepathyQt/base-connection.cpp | 128 ++++++++++++++++++++++++++++++++ TelepathyQt/base-connection.h | 92 +++++++++++++++++++++++ TelepathyQt/types.h | 2 + 6 files changed, 285 insertions(+) commit c358bd350baeb5e719139f7182763bd2b1b8f8f7 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 2 18:17:34 2012 -0300 BaseProtocol: Reimplement DBusService::registerObject. TelepathyQt/base-protocol.cpp | 6 ++++++ TelepathyQt/base-protocol.h | 3 +++ 2 files changed, 9 insertions(+) commit 934c73f963b4d6b02572eda7f442cd87fc7700bc Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 2 18:15:54 2012 -0300 DBusService: Add optional error parameter to registerObject protected method. Also add the error parameter to BaseConnectionManager::registerObject public method. TelepathyQt/base-connection-manager.cpp | 12 ++++++------ TelepathyQt/base-connection-manager.h | 5 +++-- TelepathyQt/dbus-service.cpp | 23 ++++++++++++++++++----- TelepathyQt/dbus-service.h | 4 +++- 4 files changed, 30 insertions(+), 14 deletions(-) commit fce7836b5811396acaaa05af2eeda44090df1de5 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 2 18:11:19 2012 -0300 DBusError: Add class representing a D-Bus error. TelepathyQt/CMakeLists.txt | 3 ++ TelepathyQt/DBusError | 13 +++++ TelepathyQt/dbus-error.cpp | 121 ++++++++++++++++++++++++++++++++++++++++++++ TelepathyQt/dbus-error.h | 66 ++++++++++++++++++++++++ 4 files changed, 203 insertions(+) commit 6a0021449b57743c4e1f53986e08e3ae7087944f Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 2 18:29:06 2012 -0300 BaseConnectionManager: Implement ConnectionManager.ListProtocols support. TelepathyQt/base-connection-manager.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit d765d997f5d79d97b5620d60c6da2aafd6f0cb32 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 2 13:11:02 2012 -0300 BaseConnectionManager: Implement ConnectionManager.GetParameters support. TelepathyQt/base-connection-manager-internal.h | 2 +- TelepathyQt/base-connection-manager.cpp | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) commit 24090b17bdd8a62a3870b8de124a19f0cf5f76d6 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 2 13:10:13 2012 -0300 BaseConnectionManager: Implement ConnectionManager.Interfaces property support. TelepathyQt/base-connection-manager.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 91917fff5557aefb15457a4c89813400382dc13a Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 2 13:07:57 2012 -0300 BaseConnectionManager: Add hasProtocol/protocol convenience methods. TelepathyQt/base-connection-manager.cpp | 10 ++++++++++ TelepathyQt/base-connection-manager.h | 2 ++ 2 files changed, 12 insertions(+) commit 79f80712cf1f08918d116e2dd80b24e2c48a4230 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 2 12:24:40 2012 -0300 BaseConnectionManager: Implement ConnectionManager.Protocols property support. TelepathyQt/base-connection-manager.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 8f4f5edbf793db7a6b08351e9b92b82a1a8ca0e6 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 2 12:23:06 2012 -0300 BaseProtocol: Add dummy immutableProperties() accessor. TelepathyQt/base-protocol.cpp | 7 +++++++ TelepathyQt/base-protocol.h | 2 ++ 2 files changed, 9 insertions(+) commit 8cf52cc0b94e64022eddef9c3f0116faf28d3c7b Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 2 11:26:08 2012 -0300 BaseConnectionManager: Add protocols/addProtocol methods. TelepathyQt/base-connection-manager.cpp | 44 +++++++++++++++++++++++++++++++ TelepathyQt/base-connection-manager.h | 3 +++ TelepathyQt/base-protocol.h | 1 + 3 files changed, 48 insertions(+) commit 49842b93f9c9577a4e08222db980c087f9f57b0a Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 2 05:17:51 2012 -0300 Add initial BaseProtocol class. TelepathyQt/BaseProtocol | 13 ++ TelepathyQt/CMakeLists.txt | 5 + TelepathyQt/base-protocol-internal.h | 73 +++++++++++ TelepathyQt/base-protocol.cpp | 223 ++++++++++++++++++++++++++++++++++ TelepathyQt/base-protocol.h | 104 ++++++++++++++++ TelepathyQt/types.h | 2 + 6 files changed, 420 insertions(+) commit 625a0729a3a3407290586d9c3f5dbc3c4392a081 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 2 04:18:05 2012 -0300 qt-svc-gen.py: Make adaptee property names match the spec property names. TelepathyQt/base-connection-manager-internal.h | 4 ++-- tools/qt-svc-gen.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit 7bbfcc2c76f2dadc2fdf2e0a8aae140b83a192da Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 2 04:09:13 2012 -0300 Types: Define DBusServicePtr. TelepathyQt/types.h | 2 ++ 1 file changed, 2 insertions(+) commit 4983148213e9b971a50205baed1715a2954770fa Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 2 04:07:59 2012 -0300 BaseConnectionManager: Make it a shared ptr. TelepathyQt/base-connection-manager.h | 30 ++++++++++++++++++++++++++++-- TelepathyQt/types.h | 2 ++ examples/cm/main.cpp | 2 +- 3 files changed, 31 insertions(+), 3 deletions(-) commit 112ec8ecf9bdb5d62e3379ed73a9a26d4b29b36c Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 2 04:05:50 2012 -0300 BaseConnectionManager: Add check for IN_TP_QT_HEADER. TelepathyQt/base-connection-manager.h | 4 ++++ 1 file changed, 4 insertions(+) commit 44fa1595937a6c89f92a55157e38611e16845891 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 2 04:03:42 2012 -0300 BaseConnectionManager: Use DBusService. TelepathyQt/CMakeLists.txt | 1 + TelepathyQt/base-connection-manager-internal.h | 4 +- TelepathyQt/base-connection-manager.cpp | 61 +++++++++--------------- TelepathyQt/base-connection-manager.h | 13 +++-- 4 files changed, 35 insertions(+), 44 deletions(-) commit 402014c335bb5791990c3d9feb24a0a14f84d9cc Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 2 03:57:49 2012 -0300 DBusService: Add initial base class for services. TelepathyQt/CMakeLists.txt | 10 ++-- TelepathyQt/DBusService | 13 +++++ TelepathyQt/dbus-service.cpp | 114 ++++++++++++++++++++++++++++++++++++++++++ TelepathyQt/dbus-service.h | 67 +++++++++++++++++++++++++ 4 files changed, 201 insertions(+), 3 deletions(-) commit 8f71dce9986940f69a7c39a777e454d76c4d8d37 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 29 18:18:44 2012 -0300 BaseConnectionManager: Add name and isRegistered accessors. TelepathyQt/base-connection-manager.cpp | 25 ++++++++++++++++++------- TelepathyQt/base-connection-manager.h | 4 +++- 2 files changed, 21 insertions(+), 8 deletions(-) commit 50d6f0dc13c2d4c1c5a86371de612004f59c843c Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 29 18:09:01 2012 -0300 Properly install service generated headers. TelepathyQt/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) commit 2defc720c08392d38ed58556d87d5b1ea20c3340 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 29 17:57:17 2012 -0300 Remove separation from client and service side high-level APIs. To be more consitent with how client side is implemented, the service side high-level classes are now moved to the TelepathyQt dir, removing the separate Service dir. Library specific globals (TP_QT_EXPORT, etc) are now shared between tp-qt-service and tp-qt. The plan is to merge both libraries into tp-qt in the future, when the service side bindings are API/ABI stable. TelepathyQt/AbstractAdaptor | 13 ++ TelepathyQt/BaseConnectionManager | 13 ++ TelepathyQt/CMakeLists.txt | 128 +++++++++++++++- TelepathyQt/Service/AbstractAdaptor | 13 -- TelepathyQt/Service/BaseConnectionManager | 13 -- TelepathyQt/Service/CMakeLists.txt | 131 ----------------- TelepathyQt/Service/Global | 13 -- .../Service/TelepathyQtService-uninstalled.pc.in | 11 -- TelepathyQt/Service/TelepathyQtService.pc.in | 11 -- .../Service/TelepathyQtServiceConfig.cmake.in | 22 --- TelepathyQt/Service/abstract-adaptor.cpp | 77 ---------- TelepathyQt/Service/abstract-adaptor.h | 64 -------- .../Service/base-connection-manager-internal.h | 70 --------- TelepathyQt/Service/base-connection-manager.cpp | 153 -------------------- TelepathyQt/Service/base-connection-manager.h | 57 -------- TelepathyQt/Service/global.h | 46 ------ TelepathyQt/TelepathyQtService-uninstalled.pc.in | 11 ++ TelepathyQt/TelepathyQtService.pc.in | 11 ++ TelepathyQt/TelepathyQtServiceConfig.cmake.in | 22 +++ TelepathyQt/abstract-adaptor.cpp | 74 ++++++++++ TelepathyQt/abstract-adaptor.h | 61 ++++++++ TelepathyQt/base-connection-manager-internal.h | 66 +++++++++ TelepathyQt/base-connection-manager.cpp | 150 +++++++++++++++++++ TelepathyQt/base-connection-manager.h | 54 +++++++ cmake/modules/TpQtMacros.cmake | 10 +- examples/cm/CMakeLists.txt | 22 +-- examples/cm/main.cpp | 3 +- tools/qt-svc-gen.py | 24 +-- 28 files changed, 633 insertions(+), 710 deletions(-) commit ab36ec6f15e8ab2af32be862bcc6a13d4bffaf88 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 16 01:51:10 2012 -0200 qt-svc-gen.py: Automatically raise NotImplemented when adaptee does not implement a method. tools/qt-svc-gen.py | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) commit 7d9b4b9e6cb2ad5281d58b0e9312f415456ae86c Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 16 01:21:18 2012 -0200 qt-svc-gen.py: Properly indent properties setter declarations. tools/qt-svc-gen.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 839a95f7eed803433aba69759c6a8a4a5d88c2bb Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 16 01:16:48 2012 -0200 Generate adaptors for Connection and Channel interfaces. TelepathyQt/Service/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) commit 9a2cd057c158a4490988ce9e1a5ea845c713a98f Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 16 01:16:21 2012 -0200 qt-svc-gen.py: No need to "return void()" in void methods. tools/qt-svc-gen.py | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) commit 3ae56c1bf70ca62070990ff48b0316cc77b9afbd Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 16 01:14:36 2012 -0200 qt-svc-gen.py: Rename QDBusMessage &message param to dbusMessage to avoid (lower risk of) conflicts with method argument names. tools/qt-svc-gen.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 01fdb414d26edcd7bbad228a705f514ec498b929 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 16 01:13:48 2012 -0200 qt-svc-gen.py: Properly declarate property setter. tools/qt-svc-gen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 8fb63e3de0a14e18d353974983b6d08b2dd03619 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 16 01:12:49 2012 -0200 qt-svc-gen.py: Properly generate MethodInvocationContext typedef for void methods. tools/qt-svc-gen.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 239ea2b13bab93b2f86f2fee92b1d40e60816bbf Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 16 00:36:16 2012 -0200 cm example: Add basic example using BaseConnectionManager. examples/CMakeLists.txt | 1 + examples/cm/CMakeLists.txt | 11 +++++++++++ examples/cm/main.cpp | 26 ++++++++++++++++++++++++++ 3 files changed, 38 insertions(+) commit 918f20db36de932cb7ef7f42a085ceb75ef4f2f7 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 16 00:35:33 2012 -0200 Add initial BaseConnectionManager class. TelepathyQt/Service/BaseConnectionManager | 13 ++ TelepathyQt/Service/CMakeLists.txt | 6 +- .../Service/base-connection-manager-internal.h | 70 +++++++++ TelepathyQt/Service/base-connection-manager.cpp | 153 ++++++++++++++++++++ TelepathyQt/Service/base-connection-manager.h | 57 ++++++++ 5 files changed, 298 insertions(+), 1 deletion(-) commit 2a76999fbfacfb6549c699e303ce8b9c1d9e292b Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 16 00:33:07 2012 -0200 Service: Add dependencies to doxygen-doc target. TelepathyQt/Service/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) commit 157f8b4282d7d7c8959468d5d954b237eed1f294 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 16 00:32:37 2012 -0200 Service: Generate adaptors for ConnectionManager interfaces. TelepathyQt/Service/CMakeLists.txt | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) commit 17cf6add7988a9d28ca91a899cc96114c1151ae5 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 16 00:28:31 2012 -0200 TpQtMacros.cmake: Add macro for generating service side adaptors. cmake/modules/TpQtMacros.cmake | 43 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) commit bf93df3ba69dc91b7f23dce0d099f3c420401ba3 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 16 00:25:52 2012 -0200 qt-svc-gen.py: Add initial service side (adaptors) generator. tools/qt-svc-gen.py | 598 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 598 insertions(+) commit 08f33874b393f0fbbf4ff3543b1c6a9aadbbad3c Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 16 00:25:20 2012 -0200 libqtcodegen.py: Allow prettyinclude to be optional in get_headerfile_cmd. tools/libqtcodegen.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit d2efdca99517ae6906d3f1d35cf3edb55939890c Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 16 00:23:11 2012 -0200 Service: Do not define QT_NO_KEYWORDS. TelepathyQt/Service/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a114d09e0f516232fea63721ac015dad0fa1c980 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 16 00:20:56 2012 -0200 TpQtMacros.cmake: Remove redundant call to append generated file to telepathy_qt_SRCS. cmake/modules/TpQtMacros.cmake | 1 - 1 file changed, 1 deletion(-) commit 5ce108ed5b2ca19f241b2c8664ea4f40dbcaeed9 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 3 16:59:22 2012 -0200 Service/AbstractAdaptor: Add QDBusConnection constructor param and accessor. TelepathyQt/Service/abstract-adaptor.cpp | 18 ++++++++++++++---- TelepathyQt/Service/abstract-adaptor.h | 6 +++++- 2 files changed, 19 insertions(+), 5 deletions(-) commit 0be680ffb5aed2d454c383c54f9dcf54107f8bc7 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 3 13:19:11 2012 -0200 Service: Remove stub class. TelepathyQt/Service/stub.cpp | 7 ------- 1 file changed, 7 deletions(-) commit 3fd500b326c229ed6dc928e76d5fa705c0f1a7f7 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 3 13:16:39 2012 -0200 Service/AbstractAdaptor: Add base class for autogenerated adaptors. TelepathyQt/Service/AbstractAdaptor | 13 ++++++ TelepathyQt/Service/CMakeLists.txt | 23 +++++++++- TelepathyQt/Service/abstract-adaptor.cpp | 67 ++++++++++++++++++++++++++++++ TelepathyQt/Service/abstract-adaptor.h | 60 ++++++++++++++++++++++++++ 4 files changed, 161 insertions(+), 2 deletions(-) commit 5ce6997fb51a774e6e86a0efb0bf3c0ad36ede0e Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 3 12:44:39 2012 -0200 Service/Global: Fix header guard. TelepathyQt/Service/Global | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 59b8363b2f9c8b53020b0e732f2f0d6069bdc115 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 3 12:44:23 2012 -0200 Service/global.h: Update copyright notice. TelepathyQt/Service/global.h | 1 + 1 file changed, 1 insertion(+) commit 226a32b99c5ce19622a445a6095cbc4808a08b1e Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 3 13:15:10 2012 -0200 Service: Build only a static telepathy-qt*-service library until we have a stable API/ABI. TelepathyQt/Service/CMakeLists.txt | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) commit 1bd6152ab0ca641cb9cfc4bb2be17294905d64e6 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 3 13:11:30 2012 -0200 debug-internal: Properly #include to use TP_QT_EXPORT. TelepathyQt/debug-internal.h | 2 ++ 1 file changed, 2 insertions(+) commit e4476d316bbe4919d36fdd638b5349b12850a2ea Author: Dario Freddi Date: Mon Jan 30 16:09:11 2012 +0100 Include the correct path in Global TelepathyQt/Service/Global | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 9fb669e3107f7254033e57318b078d51f6aeb478 Author: Dario Freddi Date: Mon Jan 30 15:59:09 2012 +0100 Add a stub for the Service library TelepathyQt/CMakeLists.txt | 1 + TelepathyQt/Service/CMakeLists.txt | 74 ++++++++++++++++++++ TelepathyQt/Service/Global | 13 ++++ .../Service/TelepathyQtService-uninstalled.pc.in | 11 +++ TelepathyQt/Service/TelepathyQtService.pc.in | 11 +++ .../Service/TelepathyQtServiceConfig.cmake.in | 22 ++++++ TelepathyQt/Service/global.h | 45 ++++++++++++ TelepathyQt/Service/stub.cpp | 7 ++ 8 files changed, 184 insertions(+) commit 77cc2188ed70f1e15b5d21269f035c1507e97185 Author: Dario Freddi Date: Mon Jan 30 15:38:26 2012 +0100 Add an option for enabling experimental service-side support CMakeLists.txt | 7 +++++++ 1 file changed, 7 insertions(+) commit 1bf4422e80d7a817f7252c666a47488d9471692f Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 15 15:09:39 2012 -0300 Utils: Export variantTypeFromDBusSignature and parseValueWithDBusSignature to be used by service side bindings. TelepathyQt/manager-file.cpp | 73 +--------------------------------------- TelepathyQt/manager-file.h | 5 --- TelepathyQt/profile.cpp | 8 ++--- TelepathyQt/utils.cpp | 76 +++++++++++++++++++++++++++++++++++++++++- TelepathyQt/utils.h | 5 +++ 5 files changed, 85 insertions(+), 82 deletions(-) commit 1b4815531288feaba5c543485a7b5b198e53c39e Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 29 18:10:12 2012 -0300 Utils: Export checkValidProtocolName to be used by service side bindings. TelepathyQt/connection-manager.cpp | 28 +--------------------------- TelepathyQt/utils.cpp | 22 ++++++++++++++++++++++ TelepathyQt/utils.h | 2 ++ 3 files changed, 25 insertions(+), 27 deletions(-) commit 64272ca772b53428db7c971133eac93854494b65 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 2 10:25:36 2012 -0300 PresenceSpecList: Add bareSpecs convenience method. TelepathyQt/presence.h | 9 +++++++++ 1 file changed, 9 insertions(+) commit 5ab3a2c5f57dcfc4ca427289491c4c178f50d257 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 15 01:43:24 2012 -0300 ProtocolParameter: Expose constructors and add new constructor/accessor using ParamSpec. TelepathyQt/protocol-info.cpp | 4 +- TelepathyQt/protocol-parameter.cpp | 100 +++++++++++++++++++++++++++--------- TelepathyQt/protocol-parameter.h | 17 ++++-- 3 files changed, 91 insertions(+), 30 deletions(-) commit fe8b98f52a2fed0b9f07bb7c85d1a66902598ad9 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 23 11:08:38 2012 -0300 Start 0.9.2 development CMakeLists.txt | 2 +- NEWS | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) commit 50d668ff9eaca2c54e6e8057304ecbae065f5322 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 23 10:53:19 2012 -0300 Prepare release 0.9.1 CMakeLists.txt | 4 ++-- NEWS | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit 615a3773587ad8ff36befd3dc9a0c671c6323240 Merge: 19fb762 bda2cdb Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 22 20:21:33 2012 -0300 Merge remote-tracking branch 'gkiagia/farstream-fix' Reviewed-by: Andre Moreira Magalhaes (andrunko) commit bda2cdb72b77b2d3cbb705b9ebe49efe6bf6f663 Author: George Kiagiadakis Date: Thu Mar 22 23:33:26 2012 +0200 farstream: Fix TpCallChannel creation. Apparently tp_channel_new does not create a TpCallChannel subclass, but tp-farstream, unlike tp-farsight, explicitly requires a TpCallChannel. TelepathyQt/Farstream/channel.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) commit 19fb762b183e701666f76521c59c63132777cf9c Merge: ab7b024 a439c6e Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 22 12:36:13 2012 -0300 Merge branch 'chan-group-test-fix' Reviewed-by: Dario Freddi commit ab7b02446184b746e8645cc62f77514c1f41a38c Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 22 12:35:26 2012 -0300 Update NEWS NEWS | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit a439c6ea1ca03736934dbe88a6dd64938257338c Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 22 12:22:54 2012 -0300 chan-group test: Fix bug where test was failing with tp-glib >= 0.16.2. tests/dbus/CMakeLists.txt | 2 +- tests/dbus/chan-group.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) commit 862bda590b0e169ae6b941e4226af2433d008b8c Merge: 283b8b1 2af0dc5 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 22 11:41:21 2012 -0300 Merge remote-tracking branch 'gkiagia/call1' Reviewed-by: Andre Moreira Magalhaes (andrunko) commit 2af0dc5d73c9234337d8ec3130a0a2df9201505f Author: George Kiagiadakis Date: Thu Mar 22 15:02:36 2012 +0200 cmake: Allow *Config.cmake scripts to be executed twice, the second time without any effect This is because: 1) cmake fails to import the same targets twice (in TelepathyQt4Config.cmake), which breaks for sure TpQtFsConfig.cmake in case you try to do this: find_package(TelepathyQt4 REQUIRED) find_package(TelepathyQt4Farstream REQUIRED) 2) there is no need to add extra overhead to the execution of cmake if the project is asking to find TpQt more than once. .../Farsight/TelepathyQtFarsightConfig.cmake.in | 32 ++++++++-------- .../Farstream/TelepathyQtFarstreamConfig.cmake.in | 32 ++++++++-------- TelepathyQt/TelepathyQtConfig.cmake.in | 40 ++++++++++---------- 3 files changed, 55 insertions(+), 49 deletions(-) commit 05d224ce86089cc167229b08f37118ffbc466e55 Author: George Kiagiadakis Date: Wed Mar 21 17:24:57 2012 +0200 CallChannel: Introspect immutable properties if they are not passed on the constructor TelepathyQt/call-channel.cpp | 121 +++++++++++++++++++++++++++++++++--------- TelepathyQt/call-channel.h | 4 +- tests/dbus/call-channel.cpp | 65 ++++++++++++++++++++--- 3 files changed, 157 insertions(+), 33 deletions(-) commit ee1eb6668ab42a2ab0bafb5284352c216ebb6658 Author: George Kiagiadakis Date: Wed Mar 21 15:57:44 2012 +0200 farstream: Fix namespace opening coding style TelepathyQt/Farstream/channel.cpp | 6 ++++-- TelepathyQt/Farstream/channel.h | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) commit a92fa56b4de87acf4f90cc93ff2697035209c3a1 Author: George Kiagiadakis Date: Wed Mar 21 15:53:34 2012 +0200 farstream: Add some debug warnings in early returns TelepathyQt/Farstream/channel.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit e6f4bd8b085f75f8fe25bd705b6e9755a9676f57 Author: George Kiagiadakis Date: Wed Mar 21 15:46:56 2012 +0200 Farstream/CMakeLists.txt: remove yell relic from comment TelepathyQt/Farstream/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 52e6f44ca951ac7f10142b24e48473ee270c203d Author: George Kiagiadakis Date: Wed Mar 21 15:46:18 2012 +0200 pkgconfig: Do not hardcode the tp-glib and tp-fs versions in the .pc.in files .../Farsight/TelepathyQtFarsight-uninstalled.pc.in | 2 +- TelepathyQt/Farsight/TelepathyQtFarsight.pc.in | 2 +- .../TelepathyQtFarstream-uninstalled.pc.in | 2 +- TelepathyQt/Farstream/TelepathyQtFarstream.pc.in | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) commit 0c6aa1a07ce3392e99398125fc7f71ab2b4a749d Author: George Kiagiadakis Date: Wed Mar 21 15:45:12 2012 +0200 CMakeLists.txt: Do not hardcode required min version in the macro_log_feature messages CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit ee6a410072e1e9587d28c537c1dcbc9e35f7b9eb Author: George Kiagiadakis Date: Mon Mar 19 19:22:59 2012 +0200 call1: Use *Interface::requestAllProperties/requestPropertyFoo instead of Properties::Get* TelepathyQt/call-channel.cpp | 105 ++++++++++++++++++------------------------ TelepathyQt/call-channel.h | 6 +-- TelepathyQt/call-content.cpp | 35 ++++++-------- TelepathyQt/call-content.h | 2 +- TelepathyQt/call-stream.cpp | 36 ++++++--------- TelepathyQt/call-stream.h | 2 +- 6 files changed, 79 insertions(+), 107 deletions(-) commit 4e36e7c4128602d94fb73265ff209707a5951775 Author: George Kiagiadakis Date: Thu Mar 15 13:31:21 2012 +0200 farstream: Put everything in the Farstream namespace and strip Tf from names. TelepathyQt/Farstream/CMakeLists.txt | 2 +- TelepathyQt/Farstream/PendingChannel | 13 +++++++++++++ TelepathyQt/Farstream/PendingTfChannel | 13 ------------- TelepathyQt/Farstream/channel.cpp | 29 +++++++++++++++-------------- TelepathyQt/Farstream/channel.h | 17 +++++++++-------- 5 files changed, 38 insertions(+), 36 deletions(-) commit c16ff427fde0461d667c46c3dbeb77f42c6cce2d Author: George Kiagiadakis Date: Thu Mar 15 13:15:59 2012 +0200 farstream: Remove the Farstream/Types and Farstream/types.h headers. TelepathyQt/Farstream/CMakeLists.txt | 4 +--- TelepathyQt/Farstream/Types | 13 ------------ TelepathyQt/Farstream/channel.h | 2 +- TelepathyQt/Farstream/types.h | 39 ---------------------------------- 4 files changed, 2 insertions(+), 56 deletions(-) commit 008eed6067edd388a9f6b662dab0cabae8e38e36 Author: George Kiagiadakis Date: Thu Mar 15 12:58:20 2012 +0200 PendingTfChannel: Add a callChannel() method to return the CallChannel. TelepathyQt/Farstream/channel.cpp | 5 +++++ TelepathyQt/Farstream/channel.h | 1 + 2 files changed, 6 insertions(+) commit b7b3ff7727d2c00d971e1c7d118b1222e52fd47d Author: George Kiagiadakis Date: Thu Mar 15 12:57:37 2012 +0200 farstream: Remove the FarstreamChannelFactory class to make the api simpler. TelepathyQt/Farstream/channel.cpp | 35 +++++++++-------------------------- TelepathyQt/Farstream/channel.h | 22 +++------------------- 2 files changed, 12 insertions(+), 45 deletions(-) commit 68fe68373c8ead43f954d947797c193ce7597e0c Author: George Kiagiadakis Date: Wed Mar 14 18:47:16 2012 +0200 Farstream/Channel: Use tf_channel_new_finish() from tp-fs 0.2.2. CMakeLists.txt | 4 ++-- TelepathyQt/Farstream/channel.cpp | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) commit 485f57a2626672f8c697946bdaf6ae872b41983f Author: George Kiagiadakis Date: Wed Mar 14 18:46:24 2012 +0200 farstream: s/qDebug/debug/ and remove useless debug messages TelepathyQt/Farstream/channel.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) commit 5ad2d0c3a0776f4bb8619aaf07975ca70620e724 Author: George Kiagiadakis Date: Wed Mar 14 16:37:20 2012 +0200 farstream: Port the farstream lib away from tp-qt4-yell and integrate it into the build system. CMakeLists.txt | 23 ++++++ TelepathyQt/CMakeLists.txt | 2 +- TelepathyQt/Farstream/CMakeLists.txt | 80 +++++++++++++++----- TelepathyQt/Farstream/Channel | 12 +-- TelepathyQt/Farstream/Global | 12 +-- TelepathyQt/Farstream/PendingTfChannel | 12 +-- .../TelepathyQt4YellFarstream-uninstalled.pc.in | 11 --- .../Farstream/TelepathyQt4YellFarstream.pc.in | 11 --- .../TelepathyQtFarstream-uninstalled.pc.in | 11 +++ TelepathyQt/Farstream/TelepathyQtFarstream.pc.in | 11 +++ .../Farstream/TelepathyQtFarstreamConfig.cmake.in | 22 ++++++ TelepathyQt/Farstream/Types | 12 +-- TelepathyQt/Farstream/channel.cpp | 26 +++---- TelepathyQt/Farstream/channel.h | 28 +++---- TelepathyQt/Farstream/global.h | 26 +++---- TelepathyQt/Farstream/types.h | 20 ++--- cmake/modules/FindFarstream.cmake | 50 ++++++++++++ cmake/modules/FindTelepathyFarstream.cmake | 50 ++++++++++++ 18 files changed, 300 insertions(+), 119 deletions(-) commit 3853ee8f1c98385117b4d12346e8dcc35b539c61 Author: George Kiagiadakis Date: Wed Mar 14 15:29:52 2012 +0200 farstream: Import the farstream library from telepathy-qt4-yell. TelepathyQt/Farstream/CMakeLists.txt | 66 ++++++++ TelepathyQt/Farstream/Channel | 13 ++ TelepathyQt/Farstream/Global | 13 ++ TelepathyQt/Farstream/PendingTfChannel | 13 ++ .../TelepathyQt4YellFarstream-uninstalled.pc.in | 11 ++ .../Farstream/TelepathyQt4YellFarstream.pc.in | 11 ++ TelepathyQt/Farstream/Types | 13 ++ TelepathyQt/Farstream/channel.cpp | 164 ++++++++++++++++++++ TelepathyQt/Farstream/channel.h | 80 ++++++++++ TelepathyQt/Farstream/global.h | 45 ++++++ TelepathyQt/Farstream/types.h | 39 +++++ 11 files changed, 468 insertions(+) commit 5a37d43187405029d6c3d138d0ce2619d8531e0b Author: George Kiagiadakis Date: Thu Mar 15 13:12:45 2012 +0200 call1: s/MediaCall/Call/g in all the call-related methods of ChannelFactory/ChannelClassSpec TelepathyQt/channel-class-spec.cpp | 8 ++++---- TelepathyQt/channel-class-spec.h | 12 ++++++------ TelepathyQt/channel-factory.cpp | 8 ++++---- TelepathyQt/channel-factory.h | 10 +++++----- 4 files changed, 19 insertions(+), 19 deletions(-) commit e9fc97977962d654969f1adee1c0fb9ac68d013d Author: George Kiagiadakis Date: Wed Mar 14 13:11:01 2012 +0200 account.cpp: Update copyright TelepathyQt/account.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 79d7d6d2c5a86ad5650f19771cf434cd89019e53 Author: George Kiagiadakis Date: Wed Mar 14 12:35:30 2012 +0200 CallContent: Use hasInterface() instead of interfaces().contains() in supportsDTMF(). TelepathyQt/call-content.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 1559e6c0ad1a4d21c7b9b5d2f538d36f4565f400 Author: George Kiagiadakis Date: Wed Mar 14 12:30:47 2012 +0200 call1: Remove unnecessary use of QLatin1String() with TP_QT_* constants. TelepathyQt/call-channel.cpp | 8 +++----- TelepathyQt/call-content.cpp | 3 +-- 2 files changed, 4 insertions(+), 7 deletions(-) commit 8a6df5994736572db7d7e96622800e0026865349 Author: George Kiagiadakis Date: Wed Mar 14 12:11:54 2012 +0200 Account: Fix copy/paste mistake: s/audioName/videoName/g TelepathyQt/account.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit e72eae06b47946ce9caacf737a45346633a687d7 Author: George Kiagiadakis Date: Wed Mar 14 12:10:31 2012 +0200 call1: Add PendingCallContent pretty header. TelepathyQt/CMakeLists.txt | 1 + TelepathyQt/PendingCallContent | 13 +++++++++++++ 2 files changed, 14 insertions(+) commit aacb5b8e39171597f33012a716f291dabc767c47 Author: George Kiagiadakis Date: Wed Mar 14 12:07:53 2012 +0200 call1: Move PendingCallContent to call-content.{h,cpp} TelepathyQt/call-channel.cpp | 98 ------------------------------------------ TelepathyQt/call-channel.h | 27 ------------ TelepathyQt/call-content.cpp | 98 ++++++++++++++++++++++++++++++++++++++++++ TelepathyQt/call-content.h | 27 ++++++++++++ 4 files changed, 125 insertions(+), 125 deletions(-) commit 45278044e9f53ee800b36b3b066e1a34e994e320 Author: George Kiagiadakis Date: Thu Feb 23 01:05:47 2012 +0200 test-call-channel: add unit test for CallContent's DTMF methods tests/dbus/call-channel.cpp | 77 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) commit 4f87f7855fa1af6ad098c80107a964446dbae55c Author: George Kiagiadakis Date: Thu Feb 23 01:05:33 2012 +0200 CallContent: add DTMF methods TelepathyQt/call-content.cpp | 72 ++++++++++++++++++++++++++++++++++++++++++ TelepathyQt/call-content.h | 4 +++ 2 files changed, 76 insertions(+) commit 1d502d0300c57480634b9dd50215f93050959657 Author: George Kiagiadakis Date: Wed Feb 22 23:55:47 2012 +0200 CallChannel: update documentation TelepathyQt/call-channel.cpp | 135 ++++++++++++++++++++++++++++++------------ 1 file changed, 97 insertions(+), 38 deletions(-) commit a0d6d35c02cabfec82325b7c7f89ce2463d2309d Author: George Kiagiadakis Date: Wed Feb 22 22:05:37 2012 +0200 CallChannel: add a contentByName() method Since the name of contents is significant and can even be requested when creating the channel for the initial contents, it is probably useful to be able to retrieve a content given its name. TelepathyQt/call-channel.cpp | 24 ++++++++++++++++++++++++ TelepathyQt/call-channel.h | 1 + tests/dbus/call-channel.cpp | 1 + 3 files changed, 26 insertions(+) commit 4fcff359b6a5737d91edbc6ca5b17d7613575e85 Author: George Kiagiadakis Date: Wed Feb 22 21:54:49 2012 +0200 test-call-channel: test FeatureCallMembers tests/dbus/call-channel.cpp | 142 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) commit 8c6ae1508fb5e71954f2698615dbb57901989eb8 Author: George Kiagiadakis Date: Wed Feb 22 21:50:40 2012 +0200 CallStream: merge back from CallChannel the changes in remote member handling The code that handles remote members in CallChannel was originally copied from CallStream, but was modified a bit to fix some mistakes. This commit merges back those changes to CallStream, so that the logic is identical. TelepathyQt/call-stream.cpp | 48 +++++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 22 deletions(-) commit d9dd246228a8c4d8e7cfb93c07d7e210310d4d74 Author: George Kiagiadakis Date: Wed Feb 22 21:49:12 2012 +0200 CallChannel: implement FeatureCallMembers TelepathyQt/call-channel.cpp | 275 +++++++++++++++++++++++++++++++++++++++++- TelepathyQt/call-channel.h | 21 +++- 2 files changed, 290 insertions(+), 6 deletions(-) commit 85755b41410c0c90e505c970e305a750042ef1ac Author: George Kiagiadakis Date: Wed Feb 22 17:37:54 2012 +0200 Account: add methods to ensure/create Call channels TelepathyQt/account.cpp | 470 ++++++++++++++++++++++++++++++++++++++++++++ TelepathyQt/account.h | 66 +++++++ TelepathyQt/call-channel.h | 1 - 3 files changed, 536 insertions(+), 1 deletion(-) commit 1e53279abb0c7fa23b65faa03e008cc1e3f29675 Author: George Kiagiadakis Date: Tue Feb 21 19:26:29 2012 +0200 tests: add unit test for the Call* classes tests/dbus/CMakeLists.txt | 1 + tests/dbus/call-channel.cpp | 694 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 695 insertions(+) commit 3c6faf52cd88ed1db72609014e83bd3de5f9ea3f Author: George Kiagiadakis Date: Tue Feb 21 19:25:36 2012 +0200 tests: import the example call CM from tp-glib tests/lib/glib/CMakeLists.txt | 2 + tests/lib/glib/call/CMakeLists.txt | 20 + tests/lib/glib/call/call-channel.c | 841 ++++++++++++++++++++++++++++++ tests/lib/glib/call/call-channel.h | 67 +++ tests/lib/glib/call/call-content.c | 103 ++++ tests/lib/glib/call/call-content.h | 82 +++ tests/lib/glib/call/call-manager.c | 536 +++++++++++++++++++ tests/lib/glib/call/call-manager.h | 71 +++ tests/lib/glib/call/call-stream.c | 481 +++++++++++++++++ tests/lib/glib/call/call-stream.h | 80 +++ tests/lib/glib/call/cm.c | 82 +++ tests/lib/glib/call/cm.h | 73 +++ tests/lib/glib/call/conn.c | 427 +++++++++++++++ tests/lib/glib/call/conn.h | 80 +++ tests/lib/glib/call/example_call.manager | 25 + tests/lib/glib/call/protocol.c | 186 +++++++ tests/lib/glib/call/protocol.h | 64 +++ 17 files changed, 3220 insertions(+) commit 9e721a9cb329b7b042b59a511e6f6c53ecf9763e Author: George Kiagiadakis Date: Tue Feb 21 18:51:04 2012 +0200 CallChannel: print warnings when methods are called without their required features being ready TelepathyQt/call-channel.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) commit 9a1e5262888fabc17cf1b9ae9373c98ffb5c4293 Author: George Kiagiadakis Date: Tue Feb 21 18:38:47 2012 +0200 CallChannel: Get immutable properties directly from the constructor and reduce FeatureCore to a stub TelepathyQt/call-channel.cpp | 82 ++++++++++++------------------------------ TelepathyQt/call-channel.h | 2 -- 2 files changed, 23 insertions(+), 61 deletions(-) commit 4fe334219c5371d796aecf7415df7c5bb56ca223 Author: George Kiagiadakis Date: Tue Feb 21 13:18:36 2012 +0200 CallContent: add remove() method TelepathyQt/call-content.cpp | 12 ++++++++++++ TelepathyQt/call-content.h | 4 ++-- 2 files changed, 14 insertions(+), 2 deletions(-) commit e4c6ce30f639905a35031aece103b93c18dc2d5e Author: George Kiagiadakis Date: Mon Feb 20 22:19:36 2012 +0200 ChannelFactory: add missing methods and fix details related to CallChannel TelepathyQt/channel-factory.cpp | 17 ++++++++++++++++- TelepathyQt/channel-factory.h | 4 ++++ 2 files changed, 20 insertions(+), 1 deletion(-) commit 178a7fa7af5b248f8e179de67073ac1513cadcee Author: George Kiagiadakis Date: Mon Feb 20 22:15:05 2012 +0200 call1: fix the channel class specs and capabilities to comply with the spec According to the spec, Call1 channels are not allowed to have neither InitialAudio nor InitialVideo and the RequestableChannelClasses must either have InitialVideo fixed and InitialAudio allowed or vice versa. TelepathyQt/capabilities-base.cpp | 22 +---- TelepathyQt/capabilities-base.h | 1 - TelepathyQt/channel-class-spec.cpp | 15 ---- TelepathyQt/channel-class-spec.h | 1 - TelepathyQt/requestable-channel-class-spec.cpp | 104 +++--------------------- TelepathyQt/requestable-channel-class-spec.h | 13 +-- 6 files changed, 19 insertions(+), 137 deletions(-) commit c9d12315b0383e75fa81919516224b331888ac01 Author: George Kiagiadakis Date: Mon Feb 20 20:48:15 2012 +0200 call1: hide all the private symbols from the Call* classes TelepathyQt/call-channel.h | 31 ++++++++++++++++--------------- TelepathyQt/call-content.h | 13 +++++++------ TelepathyQt/call-stream.h | 12 ++++++------ 3 files changed, 29 insertions(+), 27 deletions(-) commit 50b38d0bcf104904031ec8535d3517d2d3e097c6 Author: George Kiagiadakis Date: Mon Feb 20 20:28:53 2012 +0200 CallChannel: prepend "call" to all the state-related methods' names This change was made because state() and flags() are too generic names and could possibly clash with functions with the same name in a superclass or subclass in the future. TelepathyQt/call-channel.cpp | 12 ++++++------ TelepathyQt/call-channel.h | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) commit a9dbf1d091606ef80db8253bde2bc0f0a4be97b0 Author: George Kiagiadakis Date: Mon Feb 20 20:20:59 2012 +0200 CallChannel: sort out the various Features This adds 2 new features whose functionality was previously in FeatureContents: * FeatureCore: introspects the immutable properties * FeatureCallState: introspects the properties related to the call state and enables the stateChanged / flagsChanged signals. TelepathyQt/call-channel.cpp | 193 ++++++++++++++++++++++++++++++++---------- TelepathyQt/call-channel.h | 32 +++++-- 2 files changed, 171 insertions(+), 54 deletions(-) commit e761e2a00e4ae834fdbf0c8faa9d8ec4899511d6 Author: George Kiagiadakis Date: Mon Feb 20 19:29:06 2012 +0200 CallChannel: add a flagsChanged() signal TelepathyQt/call-channel.cpp | 12 +++++++++++- TelepathyQt/call-channel.h | 1 + 2 files changed, 12 insertions(+), 1 deletion(-) commit e551ac4c1c9d91ccb62890eff463023d13faad6b Author: George Kiagiadakis Date: Mon Feb 20 17:18:39 2012 +0200 CallChannel: add reason in contentRemoved() TelepathyQt/call-channel.cpp | 7 ++++--- TelepathyQt/call-channel.h | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) commit 2918fb721a600693e1f23b6886a7b634bb10e3b5 Author: George Kiagiadakis Date: Mon Feb 20 12:29:33 2012 +0200 CallContent: fix header name in the documentation TelepathyQt/call-content.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e399695bfd6ff5a0684aa62ad758d956a8e0e282 Author: George Kiagiadakis Date: Mon Feb 20 12:29:11 2012 +0200 CallContent: add reason in streamRemoved() TelepathyQt/call-content.cpp | 5 +++-- TelepathyQt/call-content.h | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) commit e9f8b448e8483b918ae08e48dc84158479f29ae7 Author: George Kiagiadakis Date: Thu Feb 16 14:17:26 2012 +0200 CallStream: bind and use the CanRequestReceiving property TelepathyQt/call-stream.cpp | 22 ++++++++++++++++++++++ TelepathyQt/call-stream.h | 1 + 2 files changed, 23 insertions(+) commit 16d203edc4eae0501c9fb38e5eb5ffdb7105151a Author: George Kiagiadakis Date: Thu Feb 16 14:00:43 2012 +0200 CallStream: make use of RemoteMemberIdentifiers TelepathyQt/call-stream.cpp | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) commit 14dd2012a069622dadcc3f45e978f5c58340c4c4 Author: George Kiagiadakis Date: Thu Feb 16 13:47:52 2012 +0200 CallStream: update documentation TelepathyQt/call-stream.cpp | 53 ++++++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 28 deletions(-) commit 8db158f1d409cccefe00917c5436896dd39fbeb0 Author: George Kiagiadakis Date: Thu Feb 16 13:46:57 2012 +0200 CallStream: rename members() to remoteMembers() This is to make it more clear that this set does not include the self contact. TelepathyQt/call-stream.cpp | 2 +- TelepathyQt/call-stream.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 2ae6538bbe589d090ee1640853e8a4b9dd39d881 Author: George Kiagiadakis Date: Thu Feb 16 13:45:49 2012 +0200 CallStream: fix memory leak TelepathyQt/call-stream.cpp | 7 +++++++ 1 file changed, 7 insertions(+) commit 9bf9f7a95a0594e0f06e48e442dc15864861611d Author: George Kiagiadakis Date: Thu Feb 16 13:44:49 2012 +0200 CallStream: make use of the CallStateReason in the signals TelepathyQt/call-stream.cpp | 22 +++++++++++++++------- TelepathyQt/call-stream.h | 9 ++++++--- 2 files changed, 21 insertions(+), 10 deletions(-) commit 041895960a78d80b678875d1e4aaa0c4087c6b96 Author: George Kiagiadakis Date: Thu Feb 16 13:31:36 2012 +0200 call1: replace qDebug()/qWarning() with debug()/warning() in the code imported from yell TelepathyQt/call-channel.cpp | 32 +++++++++++++++++--------------- TelepathyQt/call-content.cpp | 14 ++++++++------ TelepathyQt/call-stream.cpp | 12 +++++++----- 3 files changed, 32 insertions(+), 26 deletions(-) commit 51f7291c8e7603ac490bb98a8d33ab3e843993ad Author: George Kiagiadakis Date: Thu Feb 16 00:08:00 2012 +0200 CallChannel: Add default parameters in the hangup() method Normally a handler should call hangup() with these parameters, except in very special cases. TelepathyQt/call-channel.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 641b23c58335c31949c178239004d96f16c9d06b Author: George Kiagiadakis Date: Thu Feb 16 00:01:15 2012 +0200 CallChannel: Add the setRinging()/setQueued() methods TelepathyQt/call-channel.cpp | 17 +++++++++++++++++ TelepathyQt/call-channel.h | 2 ++ 2 files changed, 19 insertions(+) commit afe69384ac57824f6bd25664b048e7cbd085c427 Author: George Kiagiadakis Date: Wed Feb 15 22:18:35 2012 +0200 call1: update existing classes to work with the latest Call1 spec TelepathyQt/call-channel.cpp | 24 +++++++++++++----------- TelepathyQt/call-channel.h | 7 ++++--- TelepathyQt/call-content.cpp | 7 ++++--- TelepathyQt/call-content.h | 2 +- TelepathyQt/call-stream.cpp | 15 +++++++++------ TelepathyQt/call-stream.h | 6 ++++-- 6 files changed, 35 insertions(+), 26 deletions(-) commit 2bfaaa10165f6c7132ed3a5db69052a983e998d5 Author: George Kiagiadakis Date: Wed Feb 15 22:05:13 2012 +0200 call1: move CallContent/CallStream to separate source files This also removes the CallChannel::removeContent() method together with its helper private class, since it is not going to be used in Call1 and causes compilation failure here. TelepathyQt/CMakeLists.txt | 6 +- TelepathyQt/call-channel-internal.h | 171 -------- TelepathyQt/call-channel.cpp | 782 +++-------------------------------- TelepathyQt/call-channel.h | 106 +---- TelepathyQt/call-content.cpp | 335 ++++++++++++++- TelepathyQt/call-content.h | 53 ++- TelepathyQt/call-stream.cpp | 433 ++++++++++++++++++- TelepathyQt/call-stream.h | 62 ++- 8 files changed, 936 insertions(+), 1012 deletions(-) commit a8b6517cb49d2f45c8dcb47f8d7853f93af46b94 Author: George Kiagiadakis Date: Tue Feb 14 18:46:18 2012 +0200 call1: Add the Call* classes to the build system TelepathyQt/CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) commit e1de1a5d521c89922873f027a85e9c8321b7415c Author: George Kiagiadakis Date: Tue Feb 14 17:43:48 2012 +0200 call1: merge the remaining call-related bits from tp-qt4-yell TelepathyQt/capabilities-base.cpp | 56 ++++++++ TelepathyQt/capabilities-base.h | 6 + TelepathyQt/channel-class-spec.cpp | 64 ++++++++++ TelepathyQt/channel-class-spec.h | 43 ++++++- TelepathyQt/channel-factory.cpp | 6 + TelepathyQt/channel-factory.h | 9 ++ TelepathyQt/requestable-channel-class-spec.cpp | 162 ++++++++++++++++++++++++ TelepathyQt/requestable-channel-class-spec.h | 10 ++ 8 files changed, 355 insertions(+), 1 deletion(-) commit c9ac6a61f6def1a15a17d7741164b8174c8b2f53 Author: George Kiagiadakis Date: Tue Feb 14 17:42:31 2012 +0200 call1: un-yell-ify the Call* classes TelepathyQt/CallChannel | 12 +- TelepathyQt/call-channel-internal.h | 42 +++---- TelepathyQt/call-channel.cpp | 218 +++++++++++++++++------------------ TelepathyQt/call-channel.h | 98 ++++++++-------- 4 files changed, 183 insertions(+), 187 deletions(-) commit 1b89d8d21010a3ee5af51c65fb8e36322d0aea26 Author: George Kiagiadakis Date: Tue Feb 14 16:14:13 2012 +0200 call1: Import CallChannel/CallContent/CallStream from telepathy-qt4-yell TelepathyQt/CallChannel | 13 + TelepathyQt/call-channel-internal.h | 171 ++++ TelepathyQt/call-channel.cpp | 1522 +++++++++++++++++++++++++++++++++++ TelepathyQt/call-channel.h | 241 ++++++ TelepathyQt/types.h | 6 + 5 files changed, 1953 insertions(+) commit 283b8b1d574c265b6789aaf867ebaf9b4b1004d1 Merge: a88fb6b cf64e96 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 16 15:46:51 2012 -0300 Merge branch 'trivia' Reviewed-by: Dario Freddi commit cf64e968dbc3cf787c825f0984f6e0c125c0e680 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 2 05:15:10 2012 -0300 Add missing pretty headers for ProtocolInfoList and ProtocolParameterList. TelepathyQt/CMakeLists.txt | 2 ++ TelepathyQt/ProtocolInfoList | 13 +++++++++++++ TelepathyQt/ProtocolParameterList | 13 +++++++++++++ 3 files changed, 28 insertions(+) commit 1276ee717742ffba3e13b2750c5c4b05d0e12e4b Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 15 01:43:37 2012 -0300 Bump tp-glib dependency to 0.17.5 (for Captcha support). CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a88fb6b929a23397f709497454600f649d917dce Author: Dario Freddi Date: Tue Mar 13 14:39:09 2012 +0100 Update NEWS NEWS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f9aedcb8ddb75dc3471229aacfa889f9523ca6aa Merge: 7c28bc4 3c41300 Author: Dario Freddi Date: Tue Mar 13 14:32:35 2012 +0100 Merge branch 'captcha-authentication' Reviewed-by: Andre Moreira Magalhaes (andrunko) commit 3c4130092c86a354d5fccec20df04137a2ea1606 Author: Dario Freddi Date: Tue Mar 13 11:26:33 2012 +0100 captcha-autentication: Fix and refine docs TelepathyQt/captcha-authentication.cpp | 60 ++++++++++++------------- TelepathyQt/captcha.cpp | 2 +- TelepathyQt/pending-captchas.cpp | 3 -- TelepathyQt/server-authentication-channel.cpp | 13 +++--- TelepathyQt/server-authentication-channel.h | 2 +- 5 files changed, 36 insertions(+), 44 deletions(-) commit ff15b48962133b37ef46b5f945816ee3da0f3bc1 Author: Dario Freddi Date: Tue Mar 13 10:46:57 2012 +0100 captcha-authentication: Use AuthenticationMethod property to determine which interface ServerAuthenticationChannel implements The spec advertises this property to be the only reliable way to find out which interface is implemented on a given ServerAuthentication channel. Instead of checking if the channel has one of them, just introspect its properties first, and determine which method the channel implements by reading AuthenticationMethod. TelepathyQt/server-authentication-channel.cpp | 76 ++++++++++++++++--------- TelepathyQt/server-authentication-channel.h | 1 + 2 files changed, 49 insertions(+), 28 deletions(-) commit 7fdf576f8613c330803be75c927da0350260af2f Author: Dario Freddi Date: Tue Mar 13 10:30:47 2012 +0100 captcha-authentication: s/introspectServerAuthentication/introspectMain TelepathyQt/server-authentication-channel.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit e9830fc15c718ecd42103e2ae3ae68c0113d6199 Author: Dario Freddi Date: Tue Mar 13 10:29:27 2012 +0100 captcha-authentication: Adhere to code style TelepathyQt/captcha-authentication.cpp | 66 ++++++++++++++++---------------- TelepathyQt/captcha-authentication.h | 4 +- TelepathyQt/captcha.cpp | 3 +- TelepathyQt/pending-captchas.cpp | 3 +- 4 files changed, 39 insertions(+), 37 deletions(-) commit 8315c51828f94bf8d9a99fa74665d01f2290915e Author: Dario Freddi Date: Tue Mar 13 10:14:15 2012 +0100 captcha-authentication: Comment out any mention of SASL until an implementation comes TelepathyQt/server-authentication-channel.cpp | 8 +++++--- TelepathyQt/server-authentication-channel.h | 3 ++- tests/dbus/captcha-authentication.cpp | 4 ++-- 3 files changed, 9 insertions(+), 6 deletions(-) commit b1c06340ba5ec381a00862104c5abf86d29bb735 Author: Dario Freddi Date: Tue Mar 13 10:13:41 2012 +0100 captcha-authentication: For clarity, use temporary variables to identify members of a hash when iterating TelepathyQt/pending-captchas.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) commit 7ef44712e3a55ef088ff98795a28dda54a16e435 Author: Dario Freddi Date: Tue Mar 13 10:12:05 2012 +0100 captcha-authentication: Use error() and errorDetails() when channel status change makes an operation fail In case an operation fails with due to a channel status change, the error data in the interface should already be filled. Given this case, expose CaptchaAuthentication's error instead of a new one. TelepathyQt/captcha-authentication.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 3d439b4ab34e1cbf502e71f5d25a6d16a683e16e Author: Dario Freddi Date: Tue Mar 13 10:11:23 2012 +0100 captcha-authentication: Remove leftovers from previous implementations TelepathyQt/captcha-authentication-internal.h | 2 -- TelepathyQt/captcha-authentication.h | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) commit ca1f8c5a8850365335245431a5ece20092b62c41 Author: Dario Freddi Date: Tue Mar 13 10:10:51 2012 +0100 captcha-authentication: Use keywords instead of Q_* macros TelepathyQt/abstract-interface.cpp | 2 +- TelepathyQt/pending-captchas.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 6f02b9b5248c1afcb08f32fd3867a11c9178a07f Author: Dario Freddi Date: Thu Mar 8 20:40:12 2012 +0100 captcha-authentication: Remove empty lines TelepathyQt/captcha-authentication.cpp | 3 +-- TelepathyQt/captcha-authentication.h | 2 -- 2 files changed, 1 insertion(+), 4 deletions(-) commit 9a35bbeb85baf99566bb47293ac80563bcca4399 Author: Dario Freddi Date: Thu Mar 8 19:34:42 2012 +0100 captcha-authentication: Use QDBusPendingCall instead of PendingVoid in internal classes TelepathyQt/captcha-authentication-internal.h | 10 +++-- TelepathyQt/captcha-authentication.cpp | 54 ++++++++++++------------- 2 files changed, 32 insertions(+), 32 deletions(-) commit f5c4889c42e9603b0d4cf0152e454b5f79d761ce Author: Dario Freddi Date: Thu Mar 8 19:23:26 2012 +0100 captcha-authentication: Tp-Qtify Captcha's implementation Have a struct instead of a class for the Private member, and use isValid() to avoid creating a data member for the default constructor. TelepathyQt/captcha.cpp | 38 ++++++++++++++++++++++++++++---------- TelepathyQt/captcha.h | 7 +++++-- 2 files changed, 33 insertions(+), 12 deletions(-) commit 927e2c01b276d9abf299fe81d3017dbb516d74b0 Author: Dario Freddi Date: Thu Mar 8 19:10:02 2012 +0100 captcha-authentication: Hold a strong reference to CaptchaAuthentication in any pending operation on it TelepathyQt/captcha-authentication-internal.h | 2 ++ TelepathyQt/captcha-authentication.cpp | 29 +++++++++++++++++++------ TelepathyQt/captcha-authentication.h | 5 ++--- TelepathyQt/pending-captchas.cpp | 22 +++++++++---------- 4 files changed, 36 insertions(+), 22 deletions(-) commit f008f71164277bc8b69dcc078fc552f46f56b348 Author: Dario Freddi Date: Thu Mar 8 12:51:47 2012 +0100 captcha-authentication: Doc improvements TelepathyQt/captcha-authentication.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 038844417a263f187c4160f9e9d5e0f92b53b49b Author: Dario Freddi Date: Wed Mar 7 19:24:50 2012 +0100 captcha-authentication: Be more verbose with errors TelepathyQt/captcha-authentication.cpp | 4 +++- TelepathyQt/pending-captchas.cpp | 5 +++-- 2 files changed, 6 insertions(+), 3 deletions(-) commit 5b806f33c34f211b7f9fb9e12b69c9966929146f Author: Dario Freddi Date: Wed Mar 7 19:14:33 2012 +0100 captcha-authentication: Fill empty Captcha objects with default values TelepathyQt/captcha.cpp | 2 ++ tests/dbus/captcha-authentication.cpp | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) commit fe0b0123a0fd9a73ecdc9075f353dd64faef757d Author: Dario Freddi Date: Wed Mar 7 19:09:14 2012 +0100 captcha-authentication: Keep a weak ref of the Channel into CaptchaAuthentication Keeping a strong reference caused a leak since a strong-ref loop was triggered by the "parenting" of the two objects, which held a strong ref one towards the other. TelepathyQt/captcha-authentication-internal.h | 2 +- TelepathyQt/captcha-authentication.cpp | 20 +++++++++++++++----- TelepathyQt/pending-captchas.cpp | 8 ++++++-- 3 files changed, 22 insertions(+), 8 deletions(-) commit 0a288f2282d1b6329036a2f77df5b5c755177a3e Author: Dario Freddi Date: Wed Mar 7 18:31:15 2012 +0100 captcha-authentication: Clean up forward declarations and comments TelepathyQt/captcha-authentication.h | 1 - TelepathyQt/captcha.h | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) commit 1f8c446d7a926d56ad46944b2d5124d2f9838aef Author: Dario Freddi Date: Wed Mar 7 18:29:45 2012 +0100 captcha-authentication: Rename lastError* to error* TelepathyQt/captcha-authentication.cpp | 8 ++++---- TelepathyQt/captcha-authentication.h | 4 ++-- tests/dbus/captcha-authentication.cpp | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) commit 94427fcc4838cd4eb2a685132e1e3a32e45df713 Author: Dario Freddi Date: Wed Mar 7 18:26:43 2012 +0100 captcha-authentication: Don't use d-pointers for private classes TelepathyQt/captcha-authentication-internal.h | 26 ++++--------------------- TelepathyQt/captcha-authentication.cpp | 22 ++++++++------------- 2 files changed, 12 insertions(+), 36 deletions(-) commit 11ed0c73027dc3571b03f4084e9ea28a7fcf2c98 Author: Dario Freddi Date: Wed Mar 7 18:20:48 2012 +0100 captcha-authentication: Add Nokia copyright TelepathyQt/captcha-authentication-internal.h | 1 + TelepathyQt/captcha-authentication.cpp | 1 + TelepathyQt/captcha-authentication.h | 1 + TelepathyQt/captcha.cpp | 1 + TelepathyQt/captcha.h | 1 + TelepathyQt/pending-captchas.cpp | 1 + TelepathyQt/pending-captchas.h | 1 + TelepathyQt/server-authentication-channel.cpp | 1 + TelepathyQt/server-authentication-channel.h | 1 + 9 files changed, 9 insertions(+) commit 8c0950b53be40d414ec6593eca3436f79b8b0e8c Author: Dario Freddi Date: Wed Mar 7 15:31:45 2012 +0100 captcha-authentication: Improvements to documentation TelepathyQt/captcha-authentication.cpp | 20 ++++++------ TelepathyQt/pending-captchas.cpp | 1 + TelepathyQt/server-authentication-channel.cpp | 41 ++++++++++++++++++++----- 3 files changed, 44 insertions(+), 18 deletions(-) commit 96a7ca03196b137e76488160bdfc638878398183 Author: Dario Freddi Date: Wed Mar 7 15:23:41 2012 +0100 captcha-authentication: Instead of using a type(), just have a check for each interface TelepathyQt/server-authentication-channel.cpp | 22 ++++++++++++++-------- TelepathyQt/server-authentication-channel.h | 9 ++------- tests/dbus/captcha-authentication.cpp | 6 ++++-- 3 files changed, 20 insertions(+), 17 deletions(-) commit 6d1f0b5c40672a0b855bb6e4f4a47ef2e6a741e1 Author: Dario Freddi Date: Tue Mar 6 16:05:05 2012 +0100 captcha-authentication: Update the test to cover failure in fetching data due to the property not being ready tests/dbus/captcha-authentication.cpp | 4 ++++ 1 file changed, 4 insertions(+) commit 54a7d6c00d21259f6a60fbb0561e284564e27c60 Author: Dario Freddi Date: Tue Mar 6 16:04:43 2012 +0100 captcha-authentication: Update channel class spec and factory to handle ServerAuthentication channels TelepathyQt/channel-class-spec.cpp | 24 +----------------------- TelepathyQt/channel-class-spec.h | 4 +--- TelepathyQt/channel-factory.cpp | 25 +++++++++++++++++++++++++ TelepathyQt/channel-factory.h | 16 ++++++++++++++++ 4 files changed, 43 insertions(+), 26 deletions(-) commit 6657ac899f536bac39e796058a8b90932bfd9e12 Author: Dario Freddi Date: Tue Mar 6 12:56:25 2012 +0100 captcha-authentication: Move captcha logic out of Channel and into a new ServerAuthenticationChannel TelepathyQt/CMakeLists.txt | 4 + TelepathyQt/ServerAuthenticationChannel | 13 ++ TelepathyQt/captcha-authentication.h | 2 +- TelepathyQt/channel.cpp | 83 ---------- TelepathyQt/channel.h | 4 - TelepathyQt/server-authentication-channel.cpp | 221 +++++++++++++++++++++++++ TelepathyQt/server-authentication-channel.h | 75 +++++++++ TelepathyQt/types.h | 2 + tests/dbus/captcha-authentication.cpp | 10 +- 9 files changed, 322 insertions(+), 92 deletions(-) commit 7fb046aee619ecf8632f3f124cc234b751f49657 Author: Dario Freddi Date: Wed Feb 29 18:47:24 2012 +0100 captcha-authentication: Add docs for CaptchaAuthentication TelepathyQt/captcha-authentication.cpp | 148 ++++++++++++++++++++++++++------ 1 file changed, 124 insertions(+), 24 deletions(-) commit 8f0b08a42f9baddea0b0188fafa5a9d3798729f2 Author: Dario Freddi Date: Wed Feb 29 18:47:09 2012 +0100 captcha-authentication: Use internal tp-qt debug TelepathyQt/captcha-authentication.cpp | 12 ++++++------ TelepathyQt/channel.cpp | 2 +- TelepathyQt/pending-captchas.cpp | 14 ++++++++------ 3 files changed, 15 insertions(+), 13 deletions(-) commit d31f5cb18dd63f8f705795da4d7e5dcf7f0b4a9e Author: Dario Freddi Date: Wed Feb 29 17:23:42 2012 +0100 captcha-authentication: When cancelling, close the channel upon success. TelepathyQt/captcha-authentication-internal.h | 30 ++++++++++++++ TelepathyQt/captcha-authentication.cpp | 53 ++++++++++++++++++++++++- TelepathyQt/captcha-authentication.h | 2 + 3 files changed, 84 insertions(+), 1 deletion(-) commit f63353eac420c114882635618d7e62260e61016d Author: Dario Freddi Date: Wed Feb 29 16:56:44 2012 +0100 captcha-authentication: When answering, close the channel upon success. TelepathyQt/captcha-authentication-internal.h | 1 + TelepathyQt/captcha-authentication.cpp | 19 ++++++++++++++++--- TelepathyQt/captcha-authentication.h | 2 ++ 3 files changed, 19 insertions(+), 3 deletions(-) commit 8113e60499c0357ad51bddc05f5770cdba74a152 Author: Dario Freddi Date: Thu Feb 23 18:12:38 2012 +0100 captcha-authentication: Cast the correct type tests/dbus/captcha-authentication.cpp | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) commit 739c8ecb2d690dbe192af77c875a6d4c458d6b78 Author: Dario Freddi Date: Thu Feb 23 18:10:21 2012 +0100 captcha-authentication: Also check the signal has been emitted correctly tests/dbus/captcha-authentication.cpp | 7 +++++++ 1 file changed, 7 insertions(+) commit 06154be16ea79ea6bbb1c206f408eae98d76dc2d Author: Dario Freddi Date: Wed Feb 22 22:26:22 2012 +0100 captcha-authentication: Add more tests to bring coverage up to 90% tests/dbus/captcha-authentication.cpp | 154 ++++++++++++++++++++++++++++----- tests/lib/glib/captcha-chan.c | 27 +++++- 2 files changed, 159 insertions(+), 22 deletions(-) commit 3eda275c3cadc28aedbb50b5ff1da5dbe3c6b6f4 Author: Dario Freddi Date: Wed Feb 22 22:26:10 2012 +0100 captcha-authentication: UnknownChallenge cannot be 0 TelepathyQt/captcha-authentication.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit e7de892bca9c048c6d949f4b5f568c40e38317ce Author: Dario Freddi Date: Wed Feb 22 21:49:09 2012 +0100 captcha-authentication: Fix flag declaration, and a logic error TelepathyQt/captcha-authentication.h | 2 +- TelepathyQt/pending-captchas.cpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) commit 508cd07c2aab0e985ba5387551cedb37db45e095 Author: Dario Freddi Date: Wed Feb 22 21:30:18 2012 +0100 captcha-authentication: Don't destroy the connection when cancelling tests/lib/glib/captcha-chan.c | 9 --------- 1 file changed, 9 deletions(-) commit ef3845965d9d0ad7400b4a4d80c078498b4db614 Author: Dario Freddi Date: Wed Feb 22 21:16:30 2012 +0100 captcha-authentication: Don't check if the feature is enabled - when CaptchaAuthentication is created it is guaranteed that the feature will be ready. TelepathyQt/captcha-authentication.cpp | 25 ------------------------- TelepathyQt/captcha-authentication.h | 3 ++- 2 files changed, 2 insertions(+), 26 deletions(-) commit ced62c4d7e17830134c065a54a6f61fb341b732e Author: Dario Freddi Date: Wed Feb 22 20:10:01 2012 +0100 captcha-authentication: Make can-retry-captcha configurable in the service test tests/dbus/captcha-authentication.cpp | 5 +++-- tests/lib/glib/captcha-chan.c | 23 ++++++++++++++++++----- 2 files changed, 21 insertions(+), 7 deletions(-) commit 80b718632470a88c62d200ac5c1d3e472e9ea1eb Author: Dario Freddi Date: Wed Feb 22 18:49:15 2012 +0100 captcha-authentication: Add a basic test case tests/dbus/CMakeLists.txt | 1 + tests/dbus/captcha-authentication.cpp | 193 +++++++++++++++++++++++++++++++++ 2 files changed, 194 insertions(+) commit 30d8ff444735fee65173f9ef2a635507a124eaeb Author: Dario Freddi Date: Wed Feb 22 18:49:04 2012 +0100 captcha-authentication: Multiple fixes to the glib service for Captcha tests/lib/glib/captcha-chan.c | 51 +++++++++++++++++++---------------------- tests/lib/glib/captcha-chan.h | 3 +-- 2 files changed, 24 insertions(+), 30 deletions(-) commit 264381444fd6cb0530d9b8ccde2743a112a8c2ea Author: Dario Freddi Date: Wed Feb 22 17:30:55 2012 +0100 captcha-authentication: First iteration of a captcha channel tests/lib/glib/CMakeLists.txt | 2 + tests/lib/glib/captcha-chan.c | 547 +++++++++++++++++++++++++++++++++++++++++ tests/lib/glib/captcha-chan.h | 65 +++++ 3 files changed, 614 insertions(+) commit 2a96ebe4d03a55a0226bf941ea21ae1ec2cbe83f Author: Dario Freddi Date: Wed Feb 22 00:29:25 2012 +0100 captcha-authentication: Fix casting and property names TelepathyQt/captcha-authentication.cpp | 4 ++-- TelepathyQt/pending-captchas.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit aaa405d80ac51dc875b69c0820c39868ad76d24d Author: Jeremy Whiting Date: Wed Feb 22 00:22:57 2012 +0100 captcha-authentication: Fix property key we are watching for status changes. TelepathyQt/captcha-authentication.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 38862a6b7effd79d1c1fbc079a7992f30e2a188c Author: Dario Freddi Date: Mon Feb 20 16:07:53 2012 +0100 captcha-authentication: Compile the new files, by fixing non-TpQtism in them TelepathyQt/CMakeLists.txt | 6 +++++ TelepathyQt/captcha-authentication-internal.h | 4 ++-- TelepathyQt/captcha-authentication.cpp | 20 +++++++++-------- TelepathyQt/captcha-authentication.h | 14 +++++------- TelepathyQt/captcha.cpp | 6 +---- TelepathyQt/captcha.h | 11 +++++----- TelepathyQt/pending-captchas.cpp | 29 ++++++++++++------------- TelepathyQt/pending-captchas.h | 13 +++++------ 8 files changed, 49 insertions(+), 54 deletions(-) commit d5a654a7d039a330f0ad25c2b34630bd43bd41b4 Author: Dario Freddi Date: Mon Feb 20 16:06:59 2012 +0100 captcha-authentication: Add new logic to channel for returning a CaptchaAuthenticationPtr TelepathyQt/channel.cpp | 83 +++++++++++++++++++++++++++++++++++++++++++++++ TelepathyQt/channel.h | 4 +++ 2 files changed, 87 insertions(+) commit ac3a15c2e5332f456da48f0c4ebe8cb341ba646f Author: Dario Freddi Date: Mon Feb 20 16:06:30 2012 +0100 captcha-authentication: Add new type for CaptchaAuthenticationPtr TelepathyQt/types.h | 2 ++ 1 file changed, 2 insertions(+) commit d7acb6ee4ab2283f761a3bbb9175f9e5423060c7 Author: Dario Freddi Date: Mon Feb 20 15:25:43 2012 +0100 captcha-authentication: Use a qdbus_cast for custom types to prevent the QVariant conversion from failing TelepathyQt/pending-captchas.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5d916d5b79c90dfbf5d4eaaa71c176f1b5c4efae Author: Dario Freddi Date: Mon Feb 20 15:23:22 2012 +0100 captcha-authentication: Assignment operator, to prevent captcha from failing to build when using stricter rules TelepathyQt/captcha.cpp | 11 +++++++++++ TelepathyQt/captcha.h | 2 ++ 2 files changed, 13 insertions(+) commit e84e1475f3026e03c60785ece765e79f7dbe6aa4 Author: Dario Freddi Date: Mon Feb 13 17:37:43 2012 +0100 captcha-authentication: Add a ChannelClassSpec for captcha auth TelepathyQt/channel-class-spec.cpp | 19 +++++++++++++++++++ TelepathyQt/channel-class-spec.h | 2 ++ 2 files changed, 21 insertions(+) commit edc7d713e464e30418ad92a231e17951f8a7e9a0 Author: Dario Freddi Date: Mon Feb 13 17:34:01 2012 +0100 captcha-authentication: Add pretty headers and install them TelepathyQt/CMakeLists.txt | 6 ++++++ TelepathyQt/Captcha | 13 +++++++++++++ TelepathyQt/CaptchaAuthentication | 13 +++++++++++++ TelepathyQt/PendingCaptchas | 13 +++++++++++++ 4 files changed, 45 insertions(+) commit e173dc32d17d5a877ada23ec932f489c43689e8c Author: Dario Freddi Date: Mon Feb 13 16:45:39 2012 +0100 captcha-authentication: Connect to the correct channel TelepathyQt/pending-captchas.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 706ccbe0e52874fe865738e4f423de59e07ef7d9 Author: Dario Freddi Date: Mon Feb 13 16:06:41 2012 +0100 captcha-authentication: GetCaptchaData is returning just a QByteArray TelepathyQt/pending-captchas.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 425cdde204867c56b01759803b55ebc9c8a2da6c Author: Dario Freddi Date: Fri Feb 10 14:48:01 2012 +0100 captcha-authentication: Move Captcha to its own header TelepathyQt/captcha.cpp | 171 ++++++++++++++++++++++++++++++++++++++ TelepathyQt/captcha.h | 61 ++++++++++++++ TelepathyQt/pending-captchas.cpp | 142 +------------------------------ TelepathyQt/pending-captchas.h | 22 +---- 4 files changed, 234 insertions(+), 162 deletions(-) commit 4d60c9aacb5f082acebd913f44bf597d4df26e80 Author: Dario Freddi Date: Fri Feb 10 14:39:18 2012 +0100 captcha-authentication: Use Connection::ErrorDetails instead of QVariantMap TelepathyQt/captcha-authentication.cpp | 4 ++-- TelepathyQt/captcha-authentication.h | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) commit a2ca9a770501bc8cb6d7844a49cf18029dcd0029 Author: Dario Freddi Date: Fri Feb 10 12:58:47 2012 +0100 captcha-authentication: Implement error handling by exposing a lastError set of methods in CaptchaAuthentication TelepathyQt/captcha-authentication-internal.h | 2 ++ TelepathyQt/captcha-authentication.cpp | 17 ++++++++++++++++- TelepathyQt/captcha-authentication.h | 3 +++ 3 files changed, 21 insertions(+), 1 deletion(-) commit db0589a8020875dc511247ad147fc68c85a62a54 Author: Dario Freddi Date: Fri Feb 10 12:34:07 2012 +0100 captcha-authentication: Implement bindings for cancelling captcha TelepathyQt/captcha-authentication.cpp | 9 +++++++++ TelepathyQt/captcha-authentication.h | 4 ++++ 2 files changed, 13 insertions(+) commit 79c7b9461a659361fc17f0e51b9440e6aa0d3f0e Author: Dario Freddi Date: Fri Feb 10 12:06:41 2012 +0100 captcha-authentication: id is now a uint everywhere TelepathyQt/pending-captchas.cpp | 12 ++++++------ TelepathyQt/pending-captchas.h | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) commit f6d7cc93be86bb5f07ba1191a53d0bf95c2506c1 Author: Dario Freddi Date: Fri Feb 10 12:03:59 2012 +0100 captcha-authentication: Some captchas don't have a payload. Handle those in the right way TelepathyQt/pending-captchas.cpp | 53 +++++++++++++++++++++++++++++++------- 1 file changed, 43 insertions(+), 10 deletions(-) commit f88eeda3f0ac656ccd865fb417895dd784177128 Author: Dario Freddi Date: Fri Feb 10 11:48:11 2012 +0100 captcha-authentication: Implement the label property in Captcha TelepathyQt/pending-captchas.cpp | 23 +++++++++++++++++++++-- TelepathyQt/pending-captchas.h | 3 ++- 2 files changed, 23 insertions(+), 3 deletions(-) commit 2227428425d12b2edd77b653379a72d467b33f08 Author: Dario Freddi Date: Fri Feb 10 11:22:50 2012 +0100 captcha-authentication: Port the internals to the new spec logic TelepathyQt/captcha-authentication.cpp | 2 +- TelepathyQt/pending-captchas.cpp | 33 +++++++++++++++++++++++++------- 2 files changed, 27 insertions(+), 8 deletions(-) commit 74326aa48a6c7799bf6e7ac3c67e45db4be339b9 Author: Dario Freddi Date: Fri Feb 10 10:59:17 2012 +0100 captcha-authentication: Update the spec to newest version TelepathyQt/pending-captchas.h | 1 + 1 file changed, 1 insertion(+) commit 269941c4d4ca2280fd074cb81fbaad88cf15476c Author: Dario Freddi Date: Fri Feb 10 10:58:24 2012 +0100 captcha-authentication: Add initial documentation for PendingCaptcha TelepathyQt/pending-captchas.cpp | 119 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 114 insertions(+), 5 deletions(-) commit 1e09b297c355b06ed5295aa938799908dd8e0c17 Author: Dario Freddi Date: Thu Feb 9 17:52:28 2012 +0100 captcha-authentication: Cleanup duplicate types TelepathyQt/captcha-authentication.cpp | 6 ++---- TelepathyQt/captcha-authentication.h | 4 +--- 2 files changed, 3 insertions(+), 7 deletions(-) commit 6f1c87d32b5f50bbc3a7c918e8a9b31e2483e335 Author: Dario Freddi Date: Thu Feb 9 17:35:44 2012 +0100 captcha-authentication: Use the brand new facilities from AbstractInterface to monitor Status for real TelepathyQt/captcha-authentication.cpp | 11 ++++------- TelepathyQt/captcha-authentication.h | 3 +-- 2 files changed, 5 insertions(+), 9 deletions(-) commit 5485a475a24da07587d3ed9b0acdcae06a47e9d9 Author: Dario Freddi Date: Thu Feb 9 17:24:44 2012 +0100 captcha-authentication: Move Captcha to an implicitly shared implementation outside of CaptchaAuthentication TelepathyQt/captcha-authentication.h | 7 --- TelepathyQt/pending-captchas.cpp | 93 ++++++++++++++++++++++++++++++---- TelepathyQt/pending-captchas.h | 24 ++++++++- 3 files changed, 104 insertions(+), 20 deletions(-) commit 3abeafd98155de024f325c94fd5f9bd3c6a6b650 Author: Dario Freddi Date: Thu Feb 9 17:00:34 2012 +0100 captcha-authentication: Rework the way Challenge types are handled, making way more sense than before TelepathyQt/captcha-authentication.cpp | 4 +-- TelepathyQt/captcha-authentication.h | 18 ++++++++--- TelepathyQt/pending-captchas.cpp | 54 +++++++++++++++++++++----------- TelepathyQt/pending-captchas.h | 2 +- 4 files changed, 53 insertions(+), 25 deletions(-) commit 382d10bb077a7ef3ad97a2583cc96848bfb08d1e Author: Dario Freddi Date: Thu Feb 9 12:20:05 2012 +0100 captcha-authentication: Change the request API to carry on preferred mimetypes & type when calling. TelepathyQt/captcha-authentication-internal.h | 3 --- TelepathyQt/captcha-authentication.cpp | 25 ++++--------------------- TelepathyQt/captcha-authentication.h | 9 ++------- TelepathyQt/pending-captchas.cpp | 11 +++++++++-- TelepathyQt/pending-captchas.h | 2 ++ 5 files changed, 17 insertions(+), 33 deletions(-) commit 2fe20a0f7dc89bcf5858a2b6458ab13917d5d38c Author: Dario Freddi Date: Thu Feb 9 12:03:47 2012 +0100 captcha-authentication: Rename PendingCaptcha to PendingCaptchas TelepathyQt/captcha-authentication.cpp | 14 +- TelepathyQt/captcha-authentication.h | 6 +- TelepathyQt/pending-captchas.cpp | 245 ++++++++++++++++++++++++++++++++ TelepathyQt/pending-captchas.h | 74 ++++++++++ 4 files changed, 329 insertions(+), 10 deletions(-) commit 12d9e574551138d99bddb624025107f23ebf7d09 Author: Dario Freddi Date: Thu Feb 9 10:59:06 2012 +0100 captcha-authentication: Add a way to monitor PropertiesChanged in CaptchaAuthentication to watch over status TelepathyQt/captcha-authentication.cpp | 14 +++++++++++--- TelepathyQt/captcha-authentication.h | 4 +++- 2 files changed, 14 insertions(+), 4 deletions(-) commit 4884f6d7897b1c62335da8fcde94537d5c8318c6 Author: Dario Freddi Date: Tue Feb 7 17:44:27 2012 +0100 captcha-authentication: Fix permissions TelepathyQt/captcha-authentication.h | 1 + 1 file changed, 1 insertion(+) commit 9ef12ab1c8bbcefb2c7dd66cc0a0b1bda59f7c37 Author: Dario Freddi Date: Tue Feb 7 17:03:42 2012 +0100 captcha-authentication: Add a channelfuture extension, and make captcha a mere interface TelepathyQt/captcha-authentication-internal.h | 20 +++++ TelepathyQt/captcha-authentication.cpp | 119 +++---------------------- TelepathyQt/captcha-authentication.h | 13 ++- 3 files changed, 36 insertions(+), 116 deletions(-) commit 8d97ba85a9067b86b31f0e1932f91116a044544a Author: Dario Freddi Date: Tue Feb 7 16:31:30 2012 +0100 captcha-authentication: Rename to CaptchaAuthentication TelepathyQt/captcha-authentication-internal.h | 65 +++++ TelepathyQt/captcha-authentication.cpp | 357 +++++++++++++++++++++++++ TelepathyQt/captcha-authentication.h | 102 +++++++ 3 files changed, 524 insertions(+) commit 7c28bc4a251d0ad6c6cd2943cb0b1258e11a4021 Author: Dario Freddi Date: Tue Mar 13 14:31:03 2012 +0100 Update NEWS NEWS | 1 + 1 file changed, 1 insertion(+) commit 5b2c18f732b512e539a3bf69c21420d719a20e0a Author: David Edmundson Date: Tue Mar 13 14:04:00 2012 +0100 TextChannel: Emit pendingMessagesRemoved after the pending message has actually been removed. When call acknowledge and removed in another client than the main handler, pendingMessagesRemoved is emitted before it the messages is deleted from the queue, so messageQueue.size() remains 1 instead of 0. (in TextChannel::Private::processMessageQueue()) This patch fixes this behavior. This commit fixes bug fd.o#45755 Reviewed-by: Dario Freddi TelepathyQt/text-channel.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 4a3fa692ecea92845ad5d77c349aa5797192e112 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 21 15:25:43 2012 -0200 Update NEWS NEWS | 2 ++ 1 file changed, 2 insertions(+) commit 435f760ee9e39140bb935aa639eb8ca662e2af95 Merge: 61a5b53 a024126 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 21 15:24:47 2012 -0200 Merge branch 'spec-0.25.2' Reviewed-by: Dario Freddi commit a0241265d075952d9f27c2bed52b1bd07be8c343 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 21 15:04:05 2012 -0200 Update to spec 0.25.2 Changes in this commit: - Update all interfaces to spec 0.25.2 - As this spec renames Conn.I.Addressing.DRAFT to Conn.I.Addressing1 as final version and we don't want to break the build, the changes to support Addressing1 are already included in this commit - Add all missing pretty headers - Generate proxy for Channel.I.CaptchaAuthentication - Generate proxies for Call1 interfaces. To avoid breaking the build, the support for Conn.I.Addressing TelepathyQt/AccountInterfaceStorageInterface | 13 + TelepathyQt/CMakeLists.txt | 51 +- TelepathyQt/CallContent | 13 + TelepathyQt/CallContentInterface | 13 + .../CallContentInterfaceAudioControlInterface | 13 + TelepathyQt/CallContentInterfaceDTMFInterface | 13 + TelepathyQt/CallContentInterfaceMediaInterface | 13 + .../CallContentInterfaceVideoControlInterface | 13 + TelepathyQt/CallContentMediaDescription | 13 + TelepathyQt/CallContentMediaDescriptionInterface | 13 + ...escriptionInterfaceRTCPExtendedReportsInterface | 13 + ...tMediaDescriptionInterfaceRTCPFeedbackInterface | 13 + ...escriptionInterfaceRTPHeaderExtensionsInterface | 13 + TelepathyQt/CallStream | 13 + TelepathyQt/CallStreamEndpoint | 13 + TelepathyQt/CallStreamEndpointInterface | 13 + TelepathyQt/CallStreamInterface | 13 + TelepathyQt/CallStreamInterfaceMediaInterface | 13 + .../ChannelInterfaceCaptchaAuthenticationInterface | 13 + TelepathyQt/ChannelInterfaceDestroyableInterface | 13 + .../ChannelInterfaceSASLAuthenticationInterface | 4 +- TelepathyQt/ChannelTypeCallInterface | 13 + TelepathyQt/ChannelTypeDBusTubeInterface | 13 + TelepathyQt/ChannelTypeStreamTubeInterface | 4 +- TelepathyQt/ConnectionInterfaceAddressingInterface | 13 + TelepathyQt/ProtocolAddressingInterface | 13 - TelepathyQt/ProtocolAvatarsInterface | 13 - TelepathyQt/ProtocolInterfaceAddressingInterface | 13 + TelepathyQt/ProtocolInterfaceAvatarsInterface | 13 + TelepathyQt/ProtocolInterfacePresenceInterface | 13 + TelepathyQt/ProtocolPresenceInterface | 13 - TelepathyQt/call-content-media-description.cpp | 26 + TelepathyQt/call-content-media-description.h | 32 ++ TelepathyQt/call-content-media-description.xml | 12 + TelepathyQt/call-content.cpp | 26 + TelepathyQt/call-content.h | 32 ++ TelepathyQt/call-content.xml | 13 + TelepathyQt/call-stream-endpoint.cpp | 26 + TelepathyQt/call-stream-endpoint.h | 32 ++ TelepathyQt/call-stream-endpoint.xml | 9 + TelepathyQt/call-stream.cpp | 26 + TelepathyQt/call-stream.h | 32 ++ TelepathyQt/call-stream.xml | 10 + TelepathyQt/channel.xml | 2 + TelepathyQt/connection.xml | 1 + TelepathyQt/contact-manager.cpp | 2 +- TelepathyQt/contact.cpp | 6 +- TelepathyQt/future-connection.xml | 26 - TelepathyQt/future-interfaces.xml | 1 - TelepathyQt/future-internal.h | 1 - TelepathyQt/future.cpp | 3 - TelepathyQt/pending-contacts.cpp | 21 +- TelepathyQt/stable-interfaces.xml | 5 + spec/Account.xml | 34 +- spec/Account_Manager.xml | 2 + spec/Call_Content.xml | 16 +- spec/Call_Content_Interface_Audio_Control.xml | 5 +- spec/Call_Content_Interface_DTMF.xml | 229 +++++++++ spec/Call_Content_Interface_Media.xml | 33 +- spec/Call_Content_Interface_Video_Control.xml | 5 +- spec/Call_Content_Media_Description.xml | 7 +- ...Description_Interface_RTCP_Extended_Reports.xml | 5 +- ...t_Media_Description_Interface_RTCP_Feedback.xml | 5 +- ...Description_Interface_RTP_Header_Extensions.xml | 5 +- spec/Call_Interface_Mute.xml | 2 +- spec/Call_Stream.xml | 5 +- spec/Call_Stream_Endpoint.xml | 12 +- spec/Call_Stream_Interface_Media.xml | 32 +- spec/Channel.xml | 4 +- spec/Channel_Interface_Addressing.xml | 2 +- spec/Channel_Interface_Captcha_Authentication.xml | 505 ++++++++++++++++++++ spec/Channel_Interface_DTMF.xml | 15 +- spec/Channel_Type_Call.xml | 107 ++--- spec/Connection_Interface_Addressing.xml | 25 +- spec/Connection_Interface_Contact_List.xml | 44 ++ spec/Connection_Manager.xml | 7 +- spec/Protocol.xml | 2 +- spec/Protocol_Interface_Addressing.xml | 16 +- spec/all.xml | 6 +- spec/errors.xml | 10 + spec/generic-types.xml | 8 + tests/dbus/conn-addressing.cpp | 2 +- 82 files changed, 1644 insertions(+), 273 deletions(-) commit 61a5b530dec334b4edcc5e05095f862ebc529338 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 14 13:36:02 2012 -0200 Update NEWS NEWS | 1 + 1 file changed, 1 insertion(+) commit d8bbc547bc2701c42dd58490281b8139a0ee4015 Author: Alberto Villa Date: Tue Feb 14 13:31:46 2012 -0200 Fixing vexing parse issues with clang. Reviewed-by: Andre Moreira Magalhaes (andrunko) Reviewed-by: Rohan Garg Tested-by: Rohan Garg TelepathyQt/optional-interface-factory.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit 91eae81a116144184c997ebd6aabe11e80b55d3b Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 13 12:10:46 2012 -0200 Update NEWS NEWS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 70bf52bcd40a49e0a729c347b1b94c26bb4bb54a Merge: f2db804 d58864a Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 13 12:07:45 2012 -0200 Merge branch 'glib-disable-deprecation-warnings' Reviewed-by: Dario Freddi commit d58864a7a0ee4045b59a78659a5e09a78f40bd85 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 13 11:41:39 2012 -0200 Disable GLib deprecation warnings for now; GValueArray is deprecated but we need it for telepathy-glib. CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) commit f2db804380ad0054129652f5bab251d6f437e2f7 Author: Dario Freddi Date: Fri Feb 10 15:21:47 2012 +0100 Update NEWS NEWS | 1 + 1 file changed, 1 insertion(+) commit e9c25bb228fedae3da5c16bcad41be3998e8a7cc Author: Dario Freddi Date: Fri Feb 10 15:20:31 2012 +0100 ChannelClassSpec: Add a method for retrieving a class spec for a SASL Server Authentication channel TelepathyQt/channel-class-spec.cpp | 19 +++++++++++++++++++ TelepathyQt/channel-class-spec.h | 3 +++ 2 files changed, 22 insertions(+) commit 8d4cfb41d5e123c98446ac1930f044ce6183563d Author: Dario Freddi Date: Fri Feb 10 14:29:04 2012 +0100 AbstractInterface: Fix a typo in setMonitorProperties, and add a warning should the call to QDBusConnection::(dis)connect fail TelepathyQt/abstract-interface.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) commit 403a0f078aff28bb6d568af74813cc0e88f98915 Author: Dario Freddi Date: Thu Feb 9 16:54:19 2012 +0100 Update NEWS NEWS | 2 ++ 1 file changed, 2 insertions(+) commit 260a8940da384fd57095b56c2a899fe19873578f Merge: 6673539 a29173d Author: Dario Freddi Date: Thu Feb 9 16:52:43 2012 +0100 Merge branch 'monitor-properties' Reviewed-by: Andre Moreira Magalhaes (andrunko) commit a29173d0b5043192b243bd4dcaa695b7e9220f56 Author: Dario Freddi Date: Thu Feb 9 16:51:42 2012 +0100 monitor-properties: Cleanup the test tests/dbus/properties.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) commit f8bae0dcc4d555f3c19dc9ecc9f71b7b219a5603 Author: Dario Freddi Date: Thu Feb 9 16:49:28 2012 +0100 monitor-properties: Initialize private members inside Private TelepathyQt/abstract-interface.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit f63482e68a647ff1df733e1cb7c2dab49f7c3d60 Author: Dario Freddi Date: Thu Feb 9 16:25:39 2012 +0100 monitor-properties: Add documentation TelepathyQt/abstract-interface.cpp | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) commit e2527b04b25ddeca2f5a0067707d26dfc4d9e463 Author: Dario Freddi Date: Thu Feb 9 16:11:15 2012 +0100 monitor-properties: Remove redundant test tests/dbus/properties.cpp | 21 --------------------- 1 file changed, 21 deletions(-) commit aa947c86dedf0bf566ab2e85fda1532696fd9380 Author: Dario Freddi Date: Thu Feb 9 16:08:59 2012 +0100 monitor-properties: Check the invalid interface before the other one tests/dbus/properties.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit 8bcd2b1e9e4f6a2fb9bcea099a0110e8d7afd9a3 Author: Dario Freddi Date: Thu Feb 9 16:05:56 2012 +0100 monitor-properties: Unify signatures TelepathyQt/abstract-interface.cpp | 2 +- TelepathyQt/abstract-interface.h | 4 ++-- tests/dbus/properties.cpp | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) commit 25feb3ac3c90f2e048f7a4489daedc947e00bffb Author: Dario Freddi Date: Thu Feb 9 15:44:06 2012 +0100 monitor-properties: Add a basic unit test tests/dbus/CMakeLists.txt | 1 + tests/dbus/properties.cpp | 165 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 166 insertions(+) commit 4ca9827cb599aad0f0143e51c9d84d6d350dc8ff Author: Dario Freddi Date: Thu Feb 9 14:42:58 2012 +0100 monitor-properties: Add methods and signals in AbstractInterface for monitoring property changes TelepathyQt/abstract-interface.cpp | 37 ++++++++++++++++++++++++++++++++++++ TelepathyQt/abstract-interface.h | 12 ++++++++++++ 2 files changed, 49 insertions(+) commit 6673539b3e39a8f9d3ab0a1db5dcd87aa5c9d4cc Author: Alban Crequy Date: Wed Feb 8 14:01:50 2012 +0000 Tests: use QCoreApplication::applicationFilePath instead of hardcoded binary names Reviewed-by: Andre Moreira Magalhaes (andrunko) tests/dbus/account-channel-dispatcher.cpp | 2 +- .../file-transfer-channel-creation-properties.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 662da02395052cd3db0456d10804b76579fdcdb1 Author: Dario Freddi Date: Thu Feb 2 14:31:38 2012 +0100 Master Qt5 now fixes the issues we had with QHostAddress - re-enable Stream tube tests for Qt5 tests/dbus/CMakeLists.txt | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) commit 89fababff211f74da2dda39290d60dfbd894c239 Merge: 86ec1d6 614a2d9 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jan 27 11:58:17 2012 -0200 Merge branch 'tests-linkage-fix' commit 614a2d9bc001d728f48fa55f17d27bb8d584b4d8 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jan 27 11:50:41 2012 -0200 Fix tests linkage with future/ convenience libraries. tests/dbus/CMakeLists.txt | 4 ++-- tests/lib/glib/CMakeLists.txt | 4 +--- tests/lib/glib/future/conference/CMakeLists.txt | 1 + .../lib/glib/future/conn-addressing/CMakeLists.txt | 1 + 4 files changed, 5 insertions(+), 5 deletions(-) commit 86ec1d65849acd730c9faf5a651ad210a59b56c2 Author: Olli Salli Date: Fri Dec 30 20:49:32 2011 +0200 Update NEWS NEWS | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit a015ae27e7a9ca727a06488c843f4716e596968b Author: Olli Salli Date: Fri Dec 30 20:47:44 2011 +0200 Add explanation to Presence::setStatus To be translated to proper documentation when the class is documented in general TelepathyQt/presence.cpp | 6 ++++++ 1 file changed, 6 insertions(+) commit 6fe5e533ef7694770df652886a5c5ea18888a1a4 Author: Martin Klapetek Date: Fri Dec 30 20:43:46 2011 +0200 Add Tp::Presence::setStatusMessage() Reviewed-by: Olli Salli TelepathyQt/presence.cpp | 9 +++++++++ TelepathyQt/presence.h | 1 + 2 files changed, 10 insertions(+) commit b37682d809459466e726af2c830d57745af5e1eb Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 21 13:14:05 2011 -0200 Start 0.9.1 development CMakeLists.txt | 2 +- NEWS | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) commit d50b79b0fe9c6fb38d267e74301284bbb676f60d Author: Andre Moreira Magalhaes (andrunko) Date: Tue Dec 20 18:33:46 2011 -0200 Prepare release 0.9.0 CMakeLists.txt | 6 +++--- NEWS | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) commit e670b841a1278904159e17f136e03a3897336e58 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Dec 20 18:27:40 2011 -0200 Update NEWS NEWS | 4 ++++ 1 file changed, 4 insertions(+) commit e87e9365e55a5f105ec782a2c4bf7b7fc2ec0a62 Merge: 1e8084f 651948b Author: Andre Moreira Magalhaes (andrunko) Date: Tue Dec 20 18:25:23 2011 -0200 Merge branch 'disable-tests-qt46' Reviewed-by: Olli Salli (oggis) commit 651948b25e2c7919ef6cf87266472e3cf8c000e7 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Dec 20 17:41:59 2011 -0200 Disable tests failing in Qt 4.6. tests/dbus/CMakeLists.txt | 43 +++++++++++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 16 deletions(-) commit 1e8084f879afa2735f3912976ddd0d7b31002b0c Author: Andre Moreira Magalhaes (andrunko) Date: Tue Dec 20 13:15:29 2011 -0200 Update NEWS NEWS | 1 + 1 file changed, 1 insertion(+) commit acdfa4478751a5ee7487d0824f87dd3af68334e3 Merge: 35cbd30 8a12620 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Dec 20 13:11:46 2011 -0200 Merge branch 'fdo-37748' Reviewed-by: Olli Salli (oggis) commit 8a126209bd2e19a00fabf27fad28898ac70629ba Author: Andre Moreira Magalhaes (andrunko) Date: Tue Dec 20 13:08:48 2011 -0200 ContactManager: Make lookupContactByHandle private. TelepathyQt/contact-manager.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 35cbd30f6786ef2917bdf216f15e9bcb9531cb85 Merge: 1d0cbab 414205a Author: Andre Moreira Magalhaes (andrunko) Date: Mon Dec 19 13:46:37 2011 -0200 Merge branch 'trivia' Reviewed-by: Olli Salli (oggis) commit 1d0cbab74539ca347725a42deab6516f551d4a2a Author: Andre Moreira Magalhaes (andrunko) Date: Mon Dec 19 13:45:42 2011 -0200 Update NEWS NEWS | 2 ++ 1 file changed, 2 insertions(+) commit 61c6769b263bff1667466e7e3b4c6d3afc06b5ab Merge: db28c27 8364f3c Author: Andre Moreira Magalhaes (andrunko) Date: Mon Dec 19 13:44:08 2011 -0200 Merge branch 'conn-addressing' Reviewed-by: Olli Salli (oggis) commit db28c27a556f067255a733a3c66213cb1ee5a5b5 Merge: 9a04494 a7b82da Author: Andre Moreira Magalhaes (andrunko) Date: Mon Dec 19 13:43:57 2011 -0200 Merge branch 'proto-addressing' Reviewed-by: Olli Salli (oggis) commit a7b82da5198101f85a588e1ea3ac32d3644f9f92 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Dec 19 13:40:01 2011 -0200 cm-protocol test: Use an instance variable to hold introspection counters. tests/dbus/cm-protocol.cpp | 73 ++++++++++++++++---------------------------- 1 file changed, 26 insertions(+), 47 deletions(-) commit 8364f3c131e7f132c719331847005df895bdb437 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Dec 19 11:40:11 2011 -0200 Contact: Update docs for features to remove redundancy. TelepathyQt/contact.cpp | 18 ------------------ 1 file changed, 18 deletions(-) commit 53f99a457dd9ef4abd9dbc61792f87ee49278b6e Author: Andre Moreira Magalhaes (andrunko) Date: Mon Dec 19 11:38:33 2011 -0200 PendingContacts: Add FIXME to refactor implementation in the future. TelepathyQt/pending-contacts.cpp | 3 +++ 1 file changed, 3 insertions(+) commit dea7116dd065c022901716b45dc92a9b8d050a55 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 15 22:27:18 2011 -0200 ProtocolInfo: Update docs for normalize* methods. TelepathyQt/protocol-info.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 7404dac3b697044003ddd932d4c7e6c62d52aaf3 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 15 22:26:31 2011 -0200 Contact: Update docs for vcardAddresses/uris accessors. TelepathyQt/contact.cpp | 8 -------- 1 file changed, 8 deletions(-) commit b21a17eeed63b8a58877a417db2f4e637fc87ac6 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 15 22:21:52 2011 -0200 PendingContacts: Move common code to check for errors on accessors to a utility function. TelepathyQt/pending-contacts.cpp | 84 +++++++++++++------------------------- 1 file changed, 28 insertions(+), 56 deletions(-) commit bccfdeceb86ba2897a2be4587b3ccd9e33521e96 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 15 21:59:16 2011 -0200 Contact: Rename addressableVCardAddresses/addressableUris to vCardAddresses/uris. TelepathyQt/contact.cpp | 22 +++++++++++----------- TelepathyQt/contact.h | 4 ++-- TelepathyQt/protocol-info.cpp | 4 ++-- tests/dbus/conn-addressing.cpp | 12 ++++++------ 4 files changed, 21 insertions(+), 21 deletions(-) commit d019d8f5ab1f4b1366b4e9b935ed91198957929a Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 15 21:56:47 2011 -0200 ContactManager: Move common code to get real features from features and interfaces from features to utility functions. TelepathyQt/contact-manager.cpp | 94 ++++++++++++++++----------------------- 1 file changed, 38 insertions(+), 56 deletions(-) commit 1a7e6aadcc936301b7860232b8ec1d59f49ff6c2 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 15 21:45:32 2011 -0200 future/conn-addressing: Use TpTests instead of Example as the namespace. tests/dbus/conn-addressing.cpp | 2 +- tests/lib/glib/future/conn-addressing/conn.c | 20 +++++------ tests/lib/glib/future/conn-addressing/conn.h | 48 +++++++++++++------------- 3 files changed, 35 insertions(+), 35 deletions(-) commit a0bd5fed856702d41ec8f4f9cc7afa312b58a4f3 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 15 21:40:05 2011 -0200 cmake: Update FindDBusGlib.cmake to merge DBUS_GLIB_INCLUDE_DIR and DBUS_GLIB_LOWLEVEL_INCLUDE_DIR into DBUS_GLIB_INCLUDE_DIRS. cmake/modules/FindDBusGLib.cmake | 4 ++-- .../lib/glib/future/conn-addressing/CMakeLists.txt | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) commit d9eaf0848b43901465407d1b0b5b6c601498d4e7 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 14 23:15:25 2011 -0200 ProtocolInfo: Update docs for normalizeVCardAddress/normalizeContactUri. TelepathyQt/contact-manager.cpp | 6 ++++-- TelepathyQt/protocol-info.cpp | 10 ++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) commit 0db45377b3c5635446fed0edcc7a0c5e5b136846 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 14 22:53:04 2011 -0200 ContactManager: Add docs for contactsForVCardAddresses/contactsForUris. TelepathyQt/contact-manager.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) commit ba14c28f480c03bb49ab90c4494b60fb2fa7b5a0 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 14 22:52:07 2011 -0200 Contact: Add docs for addressableVCardAddresses/addressableUris/FeatureAddresses. TelepathyQt/contact.cpp | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) commit 25ce62c5971f5de2bbf8dc63a99bce7afe4dd692 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 14 22:29:27 2011 -0200 contacts test: Add test to check that Conn.I.Addressing support is reportedly not available when the connection does not support it. tests/dbus/contacts.cpp | 3 +++ 1 file changed, 3 insertions(+) commit 482cc5c28ffdbe27259cd469adac1ee3b60ef394 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 14 22:27:47 2011 -0200 PendingContacts: Do not make unnecessary D-Bus round trips when requesting contacts by vcard addresses/uris. TelepathyQt/contact-manager.cpp | 54 +++++++++++++++++++++++++------ TelepathyQt/pending-contacts-internal.h | 10 ++++-- TelepathyQt/pending-contacts.cpp | 43 +++++++++++++++++------- TelepathyQt/pending-contacts.h | 2 ++ 4 files changed, 86 insertions(+), 23 deletions(-) commit b674f09f7c06aac0b0f173f928d1deef9977e8ad Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 14 22:06:58 2011 -0200 PendingContacts: Use the same slot to handle the return of Conn.I.Addressing GetContactsByVCardField and GetContactsByURI. TelepathyQt/pending-contacts.cpp | 27 ++++----------------------- TelepathyQt/pending-contacts.h | 3 +-- 2 files changed, 5 insertions(+), 25 deletions(-) commit c5bba4ee35e5f85263fe757c2abbb5b2d871ad0e Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 14 20:09:05 2011 -0200 conn-addressing test: Add test for Conn.I.Addressing support. tests/dbus/CMakeLists.txt | 4 +- tests/dbus/conn-addressing.cpp | 403 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 406 insertions(+), 1 deletion(-) commit 7342dbabd6db6cea5d104bf6edfaca149d349cd8 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 14 13:47:11 2011 -0200 future/conn-addressing: Add test glib connection implementing Conn.I.Addressing. tests/lib/glib/CMakeLists.txt | 3 +- tests/lib/glib/future/CMakeLists.txt | 1 + .../lib/glib/future/conn-addressing/CMakeLists.txt | 15 + tests/lib/glib/future/conn-addressing/conn.c | 359 ++++++++++++++++++++ tests/lib/glib/future/conn-addressing/conn.h | 57 ++++ 5 files changed, 434 insertions(+), 1 deletion(-) commit ae2e1e574b0d3e235f4b40ba663e0acc435771b5 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 14 13:44:03 2011 -0200 cmake: Also export DBUS_GLIB_LOWLEVEL_INCLUDE_DIR so one can include . cmake/modules/FindDBusGLib.cmake | 7 +++++++ 1 file changed, 7 insertions(+) commit 093c8a4c5f9fbe55cb13d746b6213fda388b3ca2 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 14 13:43:01 2011 -0200 cmake: Fix FindDBusGLib.cmake to properly search for dbus-glib-1 instead of dbus-glib. cmake/modules/FindDBusGLib.cmake | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit 1088fd94794099008c74dab5a32375f7d6b63a0b Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 14 13:45:36 2011 -0200 Generate glib code for Conn.I.Addressing to be used by tests. tests/lib/glib/future/extensions/CMakeLists.txt | 5 +++++ tests/lib/glib/future/extensions/all.xml | 1 + tests/lib/glib/future/extensions/connection.xml | 9 +++++++++ tests/lib/glib/future/extensions/extensions.h | 2 ++ 4 files changed, 17 insertions(+) commit 09c8050a223b3564c26aff5da8510dfbe4f76d28 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 14 10:44:09 2011 -0200 Contact: Rename FeatureAddressing to FeatureAddresses. Also rename internal receiveAddressing to receiveAddresses. TelepathyQt/contact-manager.cpp | 6 +++--- TelepathyQt/contact.cpp | 12 ++++++------ TelepathyQt/contact.h | 4 ++-- 3 files changed, 11 insertions(+), 11 deletions(-) commit 9ad8b0aa48797ea0afa0713b4f2ead8b55d62c82 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 14 20:07:55 2011 -0200 PendingContacts: Properly use namespace for slots params. TelepathyQt/pending-contacts.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 28df97656140ca4ab40988930cc6d505b0202f32 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 14 20:24:50 2011 -0200 PendingAddressingGetContacts: Use the same internal variable to represent requested vcard addresses/uris. TelepathyQt/pending-contacts-internal.h | 22 ++++++++++++------- TelepathyQt/pending-contacts.cpp | 36 ++++++++----------------------- 2 files changed, 23 insertions(+), 35 deletions(-) commit 4040fc272acfc2f7bb864b0488d3b9e6a5d0a8d7 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 14 10:40:16 2011 -0200 PendingContacts: Use the same internal variable to represent (in)valid vcard addresses/uris. TelepathyQt/pending-contacts-internal.h | 13 +++----- TelepathyQt/pending-contacts.cpp | 53 +++++++++++++++++++++---------- 2 files changed, 42 insertions(+), 24 deletions(-) commit f4c2a2ba05828b1685f39c46a52491512f81ab34 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 14 10:29:44 2011 -0200 PendingContacts: Use the same internal variable to represent requested ids/vcard addresses/uris. TelepathyQt/pending-contacts.cpp | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) commit 68ed2ab674f74132f215bb28f1ddab34cbaa7866 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 14 10:22:03 2011 -0200 PendingContacts: Remove internal ListType enum in favour of RequestType that is now exposed. TelepathyQt/contact-manager.cpp | 12 +++++------ TelepathyQt/pending-contacts.cpp | 43 +++++++++++++++----------------------- TelepathyQt/pending-contacts.h | 12 +++++++---- 3 files changed, 31 insertions(+), 36 deletions(-) commit 6a284a799bf81220e153e23907c4a437ad6bcdbe Author: Andre Moreira Magalhaes (andrunko) Date: Fri Dec 9 12:36:30 2011 -0200 Contact: Add accessors for Conn.I.Addressing contact attributes. TelepathyQt/contact-manager.cpp | 8 ++++++-- TelepathyQt/contact.cpp | 33 +++++++++++++++++++++++++++++++++ TelepathyQt/contact.h | 6 ++++++ 3 files changed, 45 insertions(+), 2 deletions(-) commit 873afedbbde2f1076a61b22b5d590614b67081b9 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 8 20:16:50 2011 -0200 PendingContacts: Actually implement support for retrieving contacts using Conn.I.Addressing. TelepathyQt/pending-contacts.cpp | 140 +++++++++++++++++++++++++++++++++++--- TelepathyQt/pending-contacts.h | 6 ++ 2 files changed, 138 insertions(+), 8 deletions(-) commit def408f3f413333cafd01e3ebd3b4c40f451998f Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 8 20:15:07 2011 -0200 PendingContacts: Add internal pending operation to handle Conn.I.Addressing GetContactsBy*. TelepathyQt/CMakeLists.txt | 1 + TelepathyQt/pending-contacts-internal.h | 78 +++++++++++++++++++++++++++ TelepathyQt/pending-contacts.cpp | 89 ++++++++++++++++++++++++++++++- 3 files changed, 166 insertions(+), 2 deletions(-) commit 15b9a9e8a53e6fed63c9ffe1d817f2b0bd22f31e Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 8 18:53:13 2011 -0200 ContactManager: Add skeleton high-level API for Conn.I.Addressing GetContactsByVCardField and GetContactsByURI. TelepathyQt/contact-manager.cpp | 50 ++++++++++++++++-- TelepathyQt/contact-manager.h | 6 +++ TelepathyQt/pending-contacts.cpp | 104 +++++++++++++++++++++++++++++++++----- TelepathyQt/pending-contacts.h | 24 +++++++-- 4 files changed, 166 insertions(+), 18 deletions(-) commit 0a89f69e5d33733116740588897e6697c7962531 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 8 17:27:31 2011 -0200 Generate low-level bindings for Conn.I.Addressing. TelepathyQt/CMakeLists.txt | 2 ++ TelepathyQt/future-connection.xml | 26 ++++++++++++++++++++++++++ TelepathyQt/future-interfaces.xml | 1 + TelepathyQt/future-internal.h | 2 ++ TelepathyQt/future.cpp | 3 +++ 5 files changed, 34 insertions(+) commit abf6bcaa42216fcd1209e026ba467f125250cd99 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 15 21:04:04 2011 -0200 cm-protocol test: Add specific test for Protocol support. tests/dbus/CMakeLists.txt | 1 + tests/dbus/cm-protocol.cpp | 752 +++++++++++++++++++++++++++++ tests/telepathy/managers/protocol.manager | 35 ++ 3 files changed, 788 insertions(+) commit 7de4b5985d6bb5757574c26ae82e1da4b69ddc75 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 15 21:01:36 2011 -0200 ConnectionManager: Properly check for Protocol interfaces when introspecting. TelepathyQt/connection-manager-internal.h | 1 + TelepathyQt/connection-manager.cpp | 53 ++++++++++++++++------------- 2 files changed, 31 insertions(+), 23 deletions(-) commit a1136705f9f49c7a5d5efb8514c02272d474f0fc Author: Andre Moreira Magalhaes (andrunko) Date: Tue Dec 13 20:31:53 2011 -0200 ConnectionManager: Don't return a bool value on extract*Properties methods. TelepathyQt/connection-manager-internal.h | 8 ++++---- TelepathyQt/connection-manager.cpp | 28 ++++++++-------------------- 2 files changed, 12 insertions(+), 24 deletions(-) commit 370d8a607e61192a58535f28b91851f5146be047 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Dec 13 20:28:47 2011 -0200 ConnectionManager: Rename methods parsing immutable properties to have "extract" instead of "load" as prefix. TelepathyQt/connection-manager-internal.h | 10 +++++----- TelepathyQt/connection-manager.cpp | 28 ++++++++++++++-------------- 2 files changed, 19 insertions(+), 19 deletions(-) commit aa63ff74f80ca4771cad2aac8bbab80476a52e9b Author: Andre Moreira Magalhaes (andrunko) Date: Tue Dec 13 20:24:43 2011 -0200 ProtocolInfo: More small doc fixes. TelepathyQt/protocol-info.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit da02d15ab5836bfeba3964976b04adee8e5f6f54 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Dec 9 20:01:20 2011 -0200 ProtocolInfo: Remove connectionManager accessor. TelepathyQt/protocol-info.cpp | 41 ++++++++++++++++------------------------- TelepathyQt/protocol-info.h | 4 +--- 2 files changed, 17 insertions(+), 28 deletions(-) commit cf37a455d3ee6cc0c2ced65512886a60f70ca0c7 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Dec 9 19:48:23 2011 -0200 ConnectionManager: Use requestAllProperties when requesting main properties and Protocol properties. TelepathyQt/connection-manager-internal.h | 27 ++++-- TelepathyQt/connection-manager.cpp | 141 ++++++++++++----------------- TelepathyQt/connection-manager.h | 8 +- 3 files changed, 83 insertions(+), 93 deletions(-) commit 686806c017db9661ebeb8c84796b8bae65adbb2c Author: Andre Moreira Magalhaes (andrunko) Date: Fri Dec 9 19:15:04 2011 -0200 ProtocolInfo: Fix some small doc issues. TelepathyQt/protocol-info.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit 55134a5ad8fc20ef93da0cca5155e5bfa5593b6d Author: Andre Moreira Magalhaes (andrunko) Date: Fri Dec 9 19:11:12 2011 -0200 ConnectionManager: Only introspect Protocol interfaces if immutable properties are not sufficient. TelepathyQt/connection-manager-internal.h | 14 +- TelepathyQt/connection-manager.cpp | 231 +++++++++++++++++++---------- 2 files changed, 168 insertions(+), 77 deletions(-) commit 414205a4217184903f8047919930fb8d2bb6747b Author: Andre Moreira Magalhaes (andrunko) Date: Fri Dec 9 13:14:18 2011 -0200 shared-ptr.dox: Update docs to refer to RefCounted instead of SharedData. TelepathyQt/shared-ptr.dox | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 9a04494b8905ac5427c8cc7d427b6f63b41e88aa Author: Dario Freddi Date: Fri Dec 9 14:28:05 2011 +0100 Update NEWS NEWS | 2 ++ 1 file changed, 2 insertions(+) commit f3166fa78a09adc0c5960f797436c5b10d736926 Merge: 08747ed eea66db Author: Dario Freddi Date: Fri Dec 9 14:27:44 2011 +0100 Merge branch 'install-cmake-files' Reviewed-by: Andre Moreira Magalhaes (andrunko) Reviewed-by: George Kiagiadakis (gkiagia) commit eea66db69598bbd02c78aeccbca39b3f308d80fa Author: Dario Freddi Date: Thu Dec 8 16:20:50 2011 +0100 install-cmake-files: Fix include path directory TelepathyQt/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 13f4c05e3b12ed02080768256b9dc88c9df2f6a0 Author: Dario Freddi Date: Thu Dec 8 15:15:22 2011 +0100 install-cmake-files: Fix component names TelepathyQt/CMakeLists.txt | 2 +- TelepathyQt/Farsight/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 351cd1539eb6eb825eea36a8f57930537e91734c Author: Dario Freddi Date: Thu Dec 8 14:57:38 2011 +0100 install-cmake-files: Add config files for both libraries, generating dynamically TpQt4 or TpQt5 files. TelepathyQt/CMakeLists.txt | 43 ++++++++++++++++++-- TelepathyQt/Farsight/CMakeLists.txt | 31 ++++++++++++-- .../Farsight/TelepathyQtFarsightConfig.cmake.in | 22 ++++++++++ TelepathyQt/TelepathyQtConfig.cmake.in | 26 ++++++++++++ 4 files changed, 114 insertions(+), 8 deletions(-) commit 5e0093611c475f67a523d5424547d39aa9faf4cb Author: Dario Freddi Date: Thu Dec 8 12:10:16 2011 +0100 install-cmake-files: Add macros for building version files, and for installation of config files cmake/modules/BasicFindPackageVersion.cmake.in | 30 ++++++++++++++++++++ .../modules/MacroWriteBasicCMakeVersionFile.cmake | 21 ++++++++++++++ cmake/modules/TelepathyDefaults.cmake | 5 ++++ cmake/modules/TpQtMacros.cmake | 15 ++++++++++ 4 files changed, 71 insertions(+) commit 825da5b76de787afbc8df9e4c3272fd97b318a09 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 8 16:05:50 2011 -0200 cm-basics test: Add tests for ProtocolInfo::normalizeVCardAddress and normalizeContactUri. tests/dbus/cm-basics.cpp | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) commit 71ecc04cf049b417c902bfaca7fa0bc393694dc1 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 8 15:53:23 2011 -0200 ProtocolInfo: Add high-level API for Protocol.I.Addressing NormalizeVCardAddress and NormalizeContactURI methods. TelepathyQt/protocol-info.cpp | 94 ++++++++++++++++++++++++++++++++++++++++- TelepathyQt/protocol-info.h | 4 ++ 2 files changed, 97 insertions(+), 1 deletion(-) commit 6a31309e78cfab18e45493b3b6ee7b48993b307c Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 8 15:51:12 2011 -0200 ProtocolInfo: Add connectionManager() accessor and make isValid() check if CM is still valid. TelepathyQt/connection-manager-internal.h | 4 ++-- TelepathyQt/connection-manager.cpp | 19 +++++++++---------- TelepathyQt/protocol-info.cpp | 25 ++++++++++++++++++------- TelepathyQt/protocol-info.h | 6 ++++-- 4 files changed, 33 insertions(+), 21 deletions(-) commit 576648fff476bedb1978ce9f3b25a8ab4b266d45 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 8 14:38:57 2011 -0200 PendingString: Add new generic pending operation for method calls returning a string. TelepathyQt/CMakeLists.txt | 4 ++ TelepathyQt/PendingString | 13 ++++++ TelepathyQt/pending-string.cpp | 101 ++++++++++++++++++++++++++++++++++++++++ TelepathyQt/pending-string.h | 66 ++++++++++++++++++++++++++ 4 files changed, 184 insertions(+) commit 5dcb2d710a0e9c1d0741679587e422de4daeb3c1 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 8 14:24:53 2011 -0200 cm-basics test: Test Protocol.I.Addressing support. tests/dbus/cm-basics.cpp | 5 +++++ 1 file changed, 5 insertions(+) commit f05e98c014cc33033c8be4cbf324478e6cbba1c1 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 8 14:24:32 2011 -0200 echo2 cm: Add support for Protocol.I.Addressing. CMakeLists.txt | 4 +- tests/lib/glib/echo2/protocol.c | 93 +++++++++++++++++++++++++++++++++++++-- 2 files changed, 92 insertions(+), 5 deletions(-) commit 9d05c67f73bcd2bce9c887527ef3be27ffbf0cb8 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 8 14:23:24 2011 -0200 ConnectionManager: Add support for Protocol.I.Addressing. TelepathyQt/connection-manager-internal.h | 2 ++ TelepathyQt/connection-manager.cpp | 50 +++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) commit f15fb5656daf29113c1e06d8b9e0ae473f843abe Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 8 14:22:49 2011 -0200 manager-file test: Test Protocol.I.Addressing properties parsing. tests/manager-file.cpp | 5 +++++ tests/telepathy/managers/test-manager-file.manager | 3 +++ 2 files changed, 8 insertions(+) commit 74d9c34c0b7d606a3e61d878590724adad0e0690 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 8 14:22:10 2011 -0200 ManagerFile: Add support for Protocol.I.Addressing properties. TelepathyQt/manager-file.cpp | 17 +++++++++++++++++ TelepathyQt/manager-file.h | 2 ++ 2 files changed, 19 insertions(+) commit fa6e5dc34deb782d3c19ef910d50ea6d10de3f0a Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 8 14:21:41 2011 -0200 ProtocolInfo: Add accessors for Protocol.I.Addressing properties. TelepathyQt/protocol-info.cpp | 51 +++++++++++++++++++++++++++++++++++++++++ TelepathyQt/protocol-info.h | 5 ++++ 2 files changed, 56 insertions(+) commit 30eebf1778869a17b12ea638385527c622aadb9e Author: Dario Freddi Date: Thu Dec 8 12:05:06 2011 +0100 install-cmake-files: Don't install pkgconfig files on windows TelepathyQt/CMakeLists.txt | 10 ++++++---- TelepathyQt/Farsight/CMakeLists.txt | 10 ++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) commit 3cd8c402fefb52675560a10242688f28e422b6c5 Author: Dario Freddi Date: Thu Dec 8 11:54:30 2011 +0100 install-cmake-files: Move tp-fs pc files in the Farsight/ directory TelepathyQt/CMakeLists.txt | 7 ------- TelepathyQt/Farsight/CMakeLists.txt | 5 +++++ .../Farsight/TelepathyQtFarsight-uninstalled.pc.in | 11 +++++++++++ TelepathyQt/Farsight/TelepathyQtFarsight.pc.in | 11 +++++++++++ TelepathyQt/TelepathyQtFarsight-uninstalled.pc.in | 11 ----------- TelepathyQt/TelepathyQtFarsight.pc.in | 11 ----------- 6 files changed, 27 insertions(+), 29 deletions(-) commit 45ccb8e6ebfd0f0456310f821064f9052f0d0af1 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Dec 6 13:16:40 2011 -0200 ConnectionManager: Small refactoring for the introspection of Protocol interfaces. TelepathyQt/connection-manager-internal.h | 1 + TelepathyQt/connection-manager.cpp | 46 ++++++++++++----------------- 2 files changed, 20 insertions(+), 27 deletions(-) commit 08747ed39d72b0a8c6a6ce04629fe725d08f1fdd Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 8 11:09:12 2011 -0200 Fix pkgconfig files cflags to properly point to include dir. Reviewed-by: Olli Salli (oggis) TelepathyQt/TelepathyQt.pc.in | 2 +- TelepathyQt/TelepathyQtFarsight.pc.in | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 7fa1218b0b261f03b7c575a320c7719b90bfe603 Author: Dario Freddi Date: Thu Dec 8 10:17:12 2011 +0100 Update NEWS NEWS | 2 ++ 1 file changed, 2 insertions(+) commit dd79bae817ef261b52db8598812211b5c3b5be75 Author: Dario Freddi Date: Thu Dec 8 10:14:30 2011 +0100 Forward-declare TfChannel in TelepathyQt/Farsight. This way, TelepathyQtFarsight does not depend directly in its interface from tp-farsight and all of its dependencies. This way we can track cmake find files more efficiently. Reviewed-by: Olli Salli (oggis) TelepathyQt/Farsight/channel.cpp | 2 ++ TelepathyQt/Farsight/channel.h | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) commit 81757710fd525c665f224f15d8a2b5acd9a11787 Merge: a15938d be0cdd1 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 7 18:29:58 2011 -0200 Merge branch 'spec-0.25.1' Reviewed-by: Olli Salli (oggis) commit a15938daf968eb96566934b9cae9e6a7f574f842 Merge: 23a9833 e125025 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 7 17:56:31 2011 -0200 Merge branch 'trivia' Reviewed-by: Olli Salli (oggis) commit be0cdd10431c1eda979710c500f10ac23bc336b1 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 7 17:10:39 2011 -0200 Generate low-level bindings for Protocol.I.Addressing and add missing ProtocolInterface* pretty headers. TelepathyQt/CMakeLists.txt | 4 ++++ TelepathyQt/ProtocolAddressingInterface | 13 +++++++++++++ TelepathyQt/ProtocolAvatarsInterface | 13 +++++++++++++ TelepathyQt/ProtocolInterface | 13 +++++++++++++ TelepathyQt/ProtocolPresenceInterface | 13 +++++++++++++ TelepathyQt/connection-manager.xml | 1 + 6 files changed, 57 insertions(+) commit df340586c4e610fbf8f06284124cbbb4b0abbdd5 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 7 17:53:05 2011 -0200 Generate low-level bindings for Chan.I.FileTransferMetadata/SMS. TelepathyQt/CMakeLists.txt | 2 ++ .../ChannelInterfaceFileTransferMetadataInterface | 13 +++++++++++++ TelepathyQt/ChannelInterfaceSMSInterface | 13 +++++++++++++ TelepathyQt/channel.xml | 2 ++ 4 files changed, 30 insertions(+) commit e125025b2c40ed789f4993428e71a4d02a622d39 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 7 17:19:26 2011 -0200 Small fix on generated proxy documentation. tools/qt-client-gen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 2e4b476e1a627934d5cb05232e6d98c8fabc7afb Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 7 13:55:44 2011 -0200 Update to spec 0.25.1. spec/Account.xml | 2 + spec/Account_Interface_Avatar.xml | 3 + spec/Account_Manager.xml | 26 +- spec/Call_Content.xml | 138 ++-- spec/Call_Content_Interface_Audio_Control.xml | 111 +++ spec/Call_Content_Interface_Media.xml | 562 +++++++++++----- spec/Call_Content_Interface_Video_Control.xml | 7 +- spec/Call_Content_Media_Description.xml | 236 +++++++ ...Description_Interface_RTCP_Extended_Reports.xml | 145 ++++ ...t_Media_Description_Interface_RTCP_Feedback.xml | 61 ++ ...Description_Interface_RTP_Header_Extensions.xml | 73 ++ spec/Call_Interface_Mute.xml | 146 ++++ spec/Call_Stream.xml | 110 ++- spec/Call_Stream_Endpoint.xml | 284 +++++++- spec/Call_Stream_Interface_Media.xml | 395 +++++++++-- spec/Channel_Dispatcher.xml | 203 +++++- spec/Channel_Interface_DTMF.xml | 4 +- spec/Channel_Interface_File_Transfer_Metadata.xml | 98 +++ spec/Channel_Interface_Group.xml | 86 +++ spec/Channel_Interface_Hold.xml | 16 +- spec/Channel_Interface_Media_Signalling.xml | 50 +- spec/Channel_Interface_Messages.xml | 63 +- spec/Channel_Interface_Password.xml | 26 +- spec/Channel_Interface_Picture.xml | 198 ++++++ spec/Channel_Interface_Room.xml | 119 ++-- spec/Channel_Interface_Room_Config.xml | 267 ++++++++ spec/Channel_Interface_SMS.xml | 110 ++- spec/Channel_Interface_Subject.xml | 128 ++++ spec/Channel_Interface_Tube.xml | 53 +- spec/Channel_Request.xml | 44 +- spec/Channel_Type_Call.xml | 710 ++++++++++++-------- spec/Channel_Type_Contact_List.xml | 3 + spec/Channel_Type_Contact_Search.xml | 23 +- spec/Channel_Type_DBus_Tube.xml | 12 +- spec/Channel_Type_File_Transfer.xml | 25 +- spec/Channel_Type_Room_List.xml | 8 +- spec/Channel_Type_Text.xml | 135 ++-- spec/Connection.xml | 12 + spec/Connection_Interface_Addressing.xml | 94 ++- spec/Connection_Interface_Balance.xml | 20 + spec/Connection_Interface_Forwarding.xml | 2 +- spec/Connection_Interface_Location.xml | 2 +- spec/Connection_Interface_Requests.xml | 5 +- spec/Connection_Interface_Simple_Presence.xml | 107 ++- spec/Connection_Manager.xml | 22 +- spec/Media_Stream_Handler.xml | 203 +++++- spec/Properties_Interface.xml | 2 + spec/Protocol.xml | 15 +- spec/Protocol_Interface_Addressing.xml | 79 ++- spec/Protocol_Interface_Avatars.xml | 16 +- spec/all.xml | 20 +- spec/errors.xml | 60 +- spec/template.xml | 2 +- 53 files changed, 4260 insertions(+), 1081 deletions(-) commit 23a9833698cf34f1df543b6c94166f151a1f76b7 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Dec 6 14:20:27 2011 -0200 Update NEWS NEWS | 4 ++++ 1 file changed, 4 insertions(+) commit d81ba55a37f9ac1e344e850f2a1cef51fdca19b1 Merge: f3c9172 878b416 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Dec 6 14:16:47 2011 -0200 Merge branch 'shared-ptr' Reviewed-by: Olli Salli (oggis) commit f3c9172a9150f88ea5ee5ee0a8b0f070358960b1 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Dec 6 14:09:52 2011 -0200 Update NEWS NEWS | 1 + 1 file changed, 1 insertion(+) commit 4f23d1941a57c9d0daa2bea90aa91de3094e4d73 Merge: ea1d3b0 cf870c9 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Dec 6 14:12:02 2011 -0200 Merge branch 'key-manager-file-internal' Reviewed-by: Olli Salli (oggis) commit 878b41671b9b9ab5d009f26c3a6d696a56bc59ca Author: Andre Moreira Magalhaes (andrunko) Date: Tue Dec 6 13:44:52 2011 -0200 WeakPtr: Improve docs. TelepathyQt/shared-ptr.dox | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 5afb91381f2aad9bfc0551d052b0936ca5cfd826 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Dec 6 13:41:01 2011 -0200 SharedPtr: Make SharedCount an internal class of RefCounted. TelepathyQt/shared-ptr.h | 44 ++++++++++++++++++++------------------------ 1 file changed, 20 insertions(+), 24 deletions(-) commit cf870c984c02f918a1779f889da461ee710beb2f Author: Andre Moreira Magalhaes (andrunko) Date: Tue Dec 6 12:46:17 2011 -0200 ManagerFile: Unexport. TelepathyQt/manager-file.h | 2 +- tests/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit cd08965e640b50aee8f82d587f812601ec7928da Author: Andre Moreira Magalhaes (andrunko) Date: Tue Dec 6 12:46:00 2011 -0200 KeyFile: Unexport. TelepathyQt/key-file.h | 2 +- tests/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit a39e19981a5885a8ae49a7eb3cea6e9153a21b2d Author: Andre Moreira Magalhaes (andrunko) Date: Tue Dec 6 12:44:54 2011 -0200 Do not include test-backdoors.* in the main library. TelepathyQt/CMakeLists.txt | 2 -- tests/CMakeLists.txt | 2 +- tests/dbus/CMakeLists.txt | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) commit d07b554077861780003c08d8362fc5ba63d97123 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Dec 6 12:43:46 2011 -0200 Add static (internal) library to be used by tests to test unexported symbols. TelepathyQt/CMakeLists.txt | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) commit ec6fc494cf07377f305e769ca48585692e49ee85 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 24 19:12:40 2011 -0200 Make ManagerFile an internal class. TelepathyQt/CMakeLists.txt | 3 +-- TelepathyQt/ManagerFile | 13 ------------- TelepathyQt/connection-manager.cpp | 2 +- TelepathyQt/manager-file.cpp | 5 +---- TelepathyQt/manager-file.h | 8 ++++---- TelepathyQt/profile.cpp | 2 +- TelepathyQt/protocol-parameter.cpp | 2 +- tests/manager-file.cpp | 2 +- 8 files changed, 10 insertions(+), 27 deletions(-) commit e1c6a180e9123cae2c05a21e088d593985a59438 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 24 19:05:10 2011 -0200 Make KeyFile an internal class. TelepathyQt/CMakeLists.txt | 3 +-- TelepathyQt/KeyFile | 13 ------------- TelepathyQt/key-file.cpp | 6 +----- TelepathyQt/key-file.h | 8 ++++---- TelepathyQt/manager-file.cpp | 2 +- tests/key-file.cpp | 2 +- 6 files changed, 8 insertions(+), 26 deletions(-) commit ea1d3b02c661ce4c20d931b91aba758521246c24 Author: Dario Freddi Date: Mon Dec 5 18:35:25 2011 +0100 Update NEWS NEWS | 2 ++ 1 file changed, 2 insertions(+) commit 60702e3a2c74c9595ce34a4e74ccb0d040962ea2 Merge: abc7b13 1bc89f4 Author: Dario Freddi Date: Mon Dec 5 18:32:12 2011 +0100 Merge branch 'available-message-types' Reviewed-by: Andre Moreira Magalhaes (andrunko) commit 1bc89f4be4b575ff494aa009a03cd31085fa689e Author: Dario Freddi Date: Mon Dec 5 18:15:15 2011 +0100 available-message-types: Check for every supported type in the unit test tests/dbus/text-chan.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit db3f089c48afb960f5fc2065096d9c9e2bb4e577 Author: Dario Freddi Date: Mon Dec 5 18:09:55 2011 +0100 available-message-types: Use foreach instead of Q_FOREACH TelepathyQt/text-channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit fa02781a147b7dc10f3e3d3664e63826c0ecccd5 Author: Dario Freddi Date: Mon Dec 5 18:09:01 2011 +0100 available-message-types: Check for the correct feature TelepathyQt/text-channel.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 0074738ea236a5e9bb717b41a5238a6477fe9a00 Author: Dario Freddi Date: Mon Dec 5 17:03:20 2011 +0100 available-message-types: Add relevant unit test tests/dbus/text-chan.cpp | 2 ++ 1 file changed, 2 insertions(+) commit 546a2d48322d2895f47564d0eb66dc1390cdaacc Author: Dario Freddi Date: Mon Dec 5 15:55:52 2011 +0100 available-message-types: Implement supportedMessageTypes TelepathyQt/text-channel.cpp | 17 +++++++++++++++++ TelepathyQt/text-channel.h | 1 + 2 files changed, 18 insertions(+) commit efbec929ef4b7a1770f5536bb63ea28236bfa490 Author: Dario Freddi Date: Mon Dec 5 15:54:55 2011 +0100 available-message-types: Use a list of ChannelTextMessageTypes instead of a UIntList TelepathyQt/text-channel.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) commit 15ba71fd169a595ad2af963a71fe595fbadf0852 Author: Dario Freddi Date: Mon Dec 5 15:46:50 2011 +0100 available-message-types: Rename variable to supportedMessageTypes TelepathyQt/text-channel.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit da130c91c2168026f55beef9f7118d062f9221b6 Author: Dario Freddi Date: Mon Dec 5 15:46:14 2011 +0100 available-message-types: Check if feature is available TelepathyQt/text-channel.cpp | 5 +++++ 1 file changed, 5 insertions(+) commit 53037d11c1ff51fad9a6687d1492018ab2dd5564 Author: Dario Freddi Date: Mon Dec 5 15:45:53 2011 +0100 available-message-types: Update documentation TelepathyQt/text-channel.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) commit aaa15f3a8f16b11b371fef1864aeb1dcc18d1397 Author: David Edmundson Date: Wed Sep 28 18:35:50 2011 +0100 available-message-types: Add a method to find available message types for a text channel. TelepathyQt/text-channel.cpp | 12 ++++++++++++ TelepathyQt/text-channel.h | 1 + 2 files changed, 13 insertions(+) commit abc7b13c51e8b2b24e3733ce9b6c761b9fdc7d3e Author: Andre Moreira Magalhaes (andrunko) Date: Mon Dec 5 14:52:45 2011 -0200 Update NEWS NEWS | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) commit c68d2507006bfe06369352bed94269ff3ddeb87f Merge: cf07b76 9c3f3a8 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Dec 5 14:49:05 2011 -0200 Merge branch 'deprecations' Reviewed-by: Olli Salli (oggis) commit cf07b765692131d93f53ea5935b9534d5e788344 Merge: 6f0c193 4530ffc Author: Andre Moreira Magalhaes (andrunko) Date: Mon Dec 5 14:30:36 2011 -0200 Merge branch 'qt5' Reviewed-by: Olli Salli (oggis) commit ec19516a02ed1831e6b607b5e37feabf17bc8c13 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Dec 5 13:46:44 2011 -0200 SharedPtr: Update docs. TelepathyQt/shared-ptr.dox | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) commit 4b366f5ea0198293e6f4d2c8c725065886abb703 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Dec 5 13:34:27 2011 -0200 ptr test: Improve tests for thread safety. tests/ptr.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) commit e1e14134ff816afc38fd0a602303309c041decef Author: Andre Moreira Magalhaes (andrunko) Date: Mon Dec 5 13:20:16 2011 -0200 WeakPtr: Add constructor receiving a bare pointer. TelepathyQt/connection-manager-internal.h | 2 +- TelepathyQt/connection-manager.cpp | 2 +- TelepathyQt/connection.cpp | 4 ++-- TelepathyQt/contact-manager.cpp | 4 ++-- TelepathyQt/shared-ptr.h | 9 +++++++++ 5 files changed, 15 insertions(+), 6 deletions(-) commit 3ee2bbefb77b280743fda9621040ea4886ae6ac5 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Dec 5 13:04:56 2011 -0200 RefCounted: Make ref/deref private. Note that ContactManager uses ref/deref directly to circumvent a reference cycle when using contact list channels, due to the fact that Channels hold strong references to their parent Connection, but not needed when using Conn.I.ContactList and friends. So remove the "friend class ContactManager" when Conn.I.ContactList becomes mandatory. TelepathyQt/shared-ptr.h | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) commit 3991207f5ad5c8523d39c77a3d069d897b615682 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Dec 5 12:37:30 2011 -0200 Make RefCounted and SharedCount members private. TelepathyQt/shared-ptr.h | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) commit 245ebe5b4e1f9ad23295674bc9ca04611531254d Author: Andre Moreira Magalhaes (andrunko) Date: Fri Dec 2 14:37:21 2011 -0200 SharedPtr: Make doxygen skip SharedCount internal class. TelepathyQt/shared-ptr.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit 6ad301a052933eb4c6cefc2969767b78af96460f Author: Andre Moreira Magalhaes (andrunko) Date: Fri Dec 2 14:31:25 2011 -0200 SharedPtr: Add blank lines before destructors. TelepathyQt/shared-ptr.h | 2 ++ 1 file changed, 2 insertions(+) commit b4e6267dd8728cd92932fa096ef80d88ef2ccfdd Author: Andre Moreira Magalhaes (andrunko) Date: Fri Dec 2 14:28:46 2011 -0200 Properly use QWeakPointer/WeakPtr where appropriate and remove usage of QPointer. TelepathyQt/channel-dispatch-operation.cpp | 2 -- TelepathyQt/connection-manager-internal.h | 2 +- TelepathyQt/connection-manager.cpp | 5 ++-- TelepathyQt/connection.cpp | 37 +++++++++++----------------- TelepathyQt/contact-manager.cpp | 4 +-- TelepathyQt/message.cpp | 1 - TelepathyQt/referenced-handles.cpp | 1 - TelepathyQt/streamed-media-channel.cpp | 4 +-- tests/dbus/streamed-media-chan.cpp | 6 ++--- 9 files changed, 24 insertions(+), 38 deletions(-) commit c601691d7cb0c81ffaf32907dad5e7385034f9ab Author: Andre Moreira Magalhaes (andrunko) Date: Fri Dec 2 01:17:32 2011 -0200 ptr: Add test to check for thread safety. tests/ptr.cpp | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) commit d370549c8eb9a5c67c6e938e9bad80bdb8815979 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Dec 2 01:20:49 2011 -0200 ptr test: Reinstate WeakPtr tests. tests/ptr.cpp | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) commit 399da2c89e9f7ea43804d4afbd094ee17e3dc649 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Dec 2 01:20:14 2011 -0200 Reinstate WeakPtr and make Shared/WeakPtr thread-safe. TelepathyQt/CMakeLists.txt | 3 +- TelepathyQt/WeakPtr | 13 ++ TelepathyQt/connection-manager-internal.h | 5 +- TelepathyQt/connection-manager.cpp | 2 +- TelepathyQt/connection.cpp | 6 +- TelepathyQt/contact-manager.cpp | 9 +- TelepathyQt/contact.cpp | 4 +- TelepathyQt/dbus-proxy-factory-internal.h | 2 +- TelepathyQt/dbus-proxy-factory.cpp | 2 +- TelepathyQt/message.cpp | 4 +- TelepathyQt/referenced-handles.cpp | 4 +- TelepathyQt/request-temporary-handler-internal.cpp | 2 +- TelepathyQt/request-temporary-handler-internal.h | 4 +- TelepathyQt/shared-ptr.h | 135 ++++++++++++++++++-- TelepathyQt/simple-observer-internal.h | 8 +- TelepathyQt/simple-observer.cpp | 8 +- 16 files changed, 166 insertions(+), 45 deletions(-) commit 9c3f3a8d7b34b1b63818ba9f82c434558b3073c8 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Nov 25 13:32:16 2011 -0200 Channel: Elaborate a bit more on the docs for groupContacts/LocalPendingContacts/RemotePendingContacts. TelepathyQt/channel.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) commit 0f93c56e3d8173d57cc8e889e36ac329e98513e3 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Nov 25 13:01:19 2011 -0200 Channel: Refactor groupContacts/LocalPendingContacts/RemotePendingContacts handling of includeSelfContact param and properly document the param. TelepathyQt/channel.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) commit a8425e4ffadd0cc93771e9659ea2546d54e52122 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Nov 25 12:57:55 2011 -0200 AbstractClient: Do not leak mPriv. TelepathyQt/abstract-client.cpp | 1 + 1 file changed, 1 insertion(+) commit dc5a51ce618ad7e9f4357c2a19a659ce660b4e49 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 24 19:47:10 2011 -0200 StreamTubeChannel: Return a QSet instead of a UIntList on connections(). TelepathyQt/stream-tube-channel.cpp | 6 +++--- TelepathyQt/stream-tube-channel.h | 3 +-- TelepathyQt/stream-tube-client.cpp | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) commit 5435a7f610aaff10dd54f5e19f55bcfa0e53bd5c Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 24 19:46:10 2011 -0200 Channel: Add includeSelfContact param to groupContacts and groupLocal/RemotePendingContacts. TelepathyQt/channel.cpp | 15 ++++++++++++--- TelepathyQt/channel.h | 10 +++------- 2 files changed, 15 insertions(+), 10 deletions(-) commit bba1a7425031caeef46e3c3a9b511418efdb65e7 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 24 19:45:16 2011 -0200 AbstractClient: Move AbstractClientHandler::set/isRegistered to AbstractClient and add priv member. TelepathyQt/abstract-client.cpp | 46 ++++++++++++++++++++++++--------------- TelepathyQt/abstract-client.h | 18 +++++++++------ 2 files changed, 39 insertions(+), 25 deletions(-) commit 3760fbc87677ac648a0a9e9bc9718d2695c84003 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 24 17:57:58 2011 -0200 Account: Collapse create/ensure* overload methods without a hints arg with the corresponding hints versions. TelepathyQt/account.cpp | 207 ----------------------------------------------- TelepathyQt/account.h | 178 ++++++++++------------------------------ 2 files changed, 42 insertions(+), 343 deletions(-) commit ff72667e7dc182e6bfcf5f4bc582b3d2c8fdc916 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 22 17:47:58 2011 -0200 PendingOperation: Update doc for object(). TelepathyQt/pending-operation.cpp | 4 ---- 1 file changed, 4 deletions(-) commit 1b2edb7c1245955793f8b60d60100c1da50f0f05 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 22 17:47:38 2011 -0200 Contact: Remove docs for deprecated methods. TelepathyQt/contact.cpp | 21 --------------------- 1 file changed, 21 deletions(-) commit 18ac4af1dec24d84f5696781a7c4c5d19968f987 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 22 17:47:27 2011 -0200 ContactManager: Remove docs for deprecated methods. TelepathyQt/contact-manager.cpp | 20 -------------------- 1 file changed, 20 deletions(-) commit 2b84d429e38fbbad91f4a6d641b062a924fa67fe Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 22 17:44:38 2011 -0200 ChannelRequest: Remove deprecated signals. TelepathyQt/channel-request.cpp | 15 --------------- TelepathyQt/channel-request.h | 5 ----- 2 files changed, 20 deletions(-) commit 84fa2b8bc9fc8b47d2111e82f665cb582dbfd218 Author: Jeremy Whiting Date: Fri Nov 11 19:31:35 2011 -0700 Contact: Remove deprecated signals. TelepathyQt/contact.cpp | 13 ------------- TelepathyQt/contact.h | 8 -------- tests/dbus/conn-roster-legacy.cpp | 6 +++--- tests/dbus/conn-roster.cpp | 6 +++--- 4 files changed, 6 insertions(+), 27 deletions(-) commit cd02d4099aed0b2750c9c2f72b1f1c1152948146 Author: Jeremy Whiting Date: Fri Nov 11 19:06:51 2011 -0700 ContactManager::Roster: Remove deprecated signals. ContactManager: Remove deprecated connectNotify method. TelepathyQt/contact-manager-roster.cpp | 10 ---------- TelepathyQt/contact-manager.cpp | 9 --------- TelepathyQt/contact-manager.h | 9 --------- tests/dbus/conn-roster.cpp | 2 +- 4 files changed, 1 insertion(+), 29 deletions(-) commit 7a01a68f49d735cb817e3b1b488e625749598f2f Author: Jeremy Whiting Date: Fri Nov 11 19:03:23 2011 -0700 IncomingStreamTubeChannel: Remove deprecated localAddress and ipAddress methods. TelepathyQt/incoming-stream-tube-channel.cpp | 32 -------------------------- TelepathyQt/incoming-stream-tube-channel.h | 4 ---- 2 files changed, 36 deletions(-) commit c2d502b033be011c30c8bd21f97bdb54b65d4cca Author: Jeremy Whiting Date: Fri Nov 11 18:59:32 2011 -0700 TubeChannel: Remove deprecated connectNotify method. TubeChannel: Remove deprecated tubeStateChanged signal. TelepathyQt/simple-stream-tube-handler.cpp | 2 +- TelepathyQt/stream-tube-channel.cpp | 5 ----- TelepathyQt/stream-tube-channel.h | 2 -- TelepathyQt/tube-channel.cpp | 21 --------------------- TelepathyQt/tube-channel.h | 6 ------ 5 files changed, 1 insertion(+), 35 deletions(-) commit 5176d1db49d28259a0d7663e29fd552a68a26c3b Author: Jeremy Whiting Date: Fri Nov 11 18:59:08 2011 -0700 Contact: Remove deprecated connectNotify method. TelepathyQt/contact.cpp | 11 ----------- TelepathyQt/contact.h | 3 --- 2 files changed, 14 deletions(-) commit 20238d32a252a94ab749c33c87836110b1e0b7e6 Author: Jeremy Whiting Date: Thu Nov 10 14:39:20 2011 -0700 PendingOperation: Removed deprecated public object method. PendingOperation: Renamed protected _object() to _object(). TelepathyQt/channel.cpp | 6 +++--- TelepathyQt/contact-manager-roster.cpp | 2 +- TelepathyQt/pending-account.cpp | 2 +- TelepathyQt/pending-channel-request.cpp | 4 ++-- TelepathyQt/pending-connection.cpp | 2 +- TelepathyQt/pending-contact-attributes.cpp | 2 +- TelepathyQt/pending-contact-info.cpp | 2 +- TelepathyQt/pending-handles.cpp | 2 +- TelepathyQt/pending-operation.cpp | 6 ------ TelepathyQt/pending-operation.h | 4 +--- TelepathyQt/pending-ready.cpp | 2 +- TelepathyQt/pending-send-message.cpp | 4 ++-- TelepathyQt/streamed-media-channel.cpp | 2 +- tests/dbus/dbus-proxy-factory.cpp | 14 -------------- 14 files changed, 16 insertions(+), 38 deletions(-) commit 1c6962eb62e90f755e23060be1b7d6b227408e61 Author: Jeremy Whiting Date: Tue Nov 8 20:38:36 2011 -0700 StreamTubeChannel: Remove deprecated methods. TelepathyQt/stream-tube-channel.cpp | 16 ---------------- TelepathyQt/stream-tube-channel.h | 2 -- 2 files changed, 18 deletions(-) commit 2e8c8216974f98b4f8f1d8299bcc4b41dbb02477 Author: Jeremy Whiting Date: Tue Nov 8 20:38:17 2011 -0700 TubeChannel: Remove deprecated methods. TelepathyQt/tube-channel.cpp | 8 -------- TelepathyQt/tube-channel.h | 1 - 2 files changed, 9 deletions(-) commit f651e839b31ef1d804256ca2facfed0f8eaf0a84 Author: Jeremy Whiting Date: Tue Nov 8 20:38:00 2011 -0700 Contact: Remove deprecated methods. TelepathyQt/contact.cpp | 9 --------- TelepathyQt/contact.h | 1 - 2 files changed, 10 deletions(-) commit ff0d03db39c48ffd5257dd4a257b4ed9f183e952 Author: Jeremy Whiting Date: Tue Nov 8 20:37:39 2011 -0700 ContactManager: Remove deprecated methods. Fix test. TelepathyQt/contact-manager.cpp | 20 -------------------- TelepathyQt/contact-manager.h | 3 --- tests/dbus/conn-roster-groups-legacy.cpp | 6 +++--- 3 files changed, 3 insertions(+), 26 deletions(-) commit 98cedd09523ba633f78a0f653f96ff42211f23fe Author: Jeremy Whiting Date: Tue Nov 8 20:36:44 2011 -0700 Connection-Capabilities: Remove deprecated methods. Fix test. TelepathyQt/connection-capabilities.cpp | 24 ------------------------ TelepathyQt/connection-capabilities.h | 4 ---- tests/capabilities.cpp | 15 --------------- 3 files changed, 43 deletions(-) commit 02c77f73dff0439037ac68bbb6854809388de88f Author: Jeremy Whiting Date: Tue Nov 8 20:36:04 2011 -0700 Profile: Remove deprecated methods. TelepathyQt/profile.cpp | 8 -------- TelepathyQt/profile.h | 1 - 2 files changed, 9 deletions(-) commit fc3c4e2ebfebf7749f9f9d625f44df76eec1677a Author: Jeremy Whiting Date: Tue Nov 8 20:35:39 2011 -0700 Account: Remove deprecated methods. TelepathyQt/account.cpp | 26 -------------------------- TelepathyQt/account.h | 12 ------------ 2 files changed, 38 deletions(-) commit 4530ffc84bff124877b5390e59a06b51278cdc65 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Nov 25 12:40:05 2011 -0200 Mention Qt bugs in the comments for disabling tubes tests if building against Qt5. tests/dbus/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) commit 512406295c52a4705652795109b8f932b441af6f Author: Andre Moreira Magalhaes (andrunko) Date: Fri Nov 25 12:34:17 2011 -0200 StreamTubeCLient: Update docs mentioning QHostAddress::AnyIPv4. TelepathyQt/stream-tube-client.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit bc880afea2091968f7b2c39988219bc001dff256 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 24 19:47:41 2011 -0200 Remove already fixed TODO. TelepathyQt/channel-class-spec.h | 1 - 1 file changed, 1 deletion(-) commit 76b0076c552b0a023bcf75990297f42ce5083d68 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 24 18:51:42 2011 -0200 FIXME: Temporarily disable tube tests until Qt5 QHostAddress bugs are fixed. tests/dbus/CMakeLists.txt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) commit b206f7368c4f2b5973221016b3ab3e683e5e0cc6 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 24 18:46:58 2011 -0200 Fix docs mentioning QHostAddress::AnyIPv4. TelepathyQt/incoming-stream-tube-channel.cpp | 4 ++-- TelepathyQt/stream-tube-client.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) commit 70478034525f500bce7ecc2bfd538a4f4409268e Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 24 18:46:33 2011 -0200 Properly check for MIN/MAX Qt versions in pkg-config files. TelepathyQt/TelepathyQt-uninstalled.pc.in | 2 +- TelepathyQt/TelepathyQt.pc.in | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 328eb296e19067fb00fe30f8bacfd2e184538589 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 24 18:40:04 2011 -0200 Remove the hack to avoid using QHostAddress operator==(SpecialAddress). Qt should be fixed instead. TelepathyQt/incoming-stream-tube-channel.cpp | 8 ++++---- TelepathyQt/outgoing-stream-tube-channel.cpp | 2 +- TelepathyQt/stream-tube-client.cpp | 4 ++-- TelepathyQt/stream-tube-server.cpp | 12 ++++++------ 4 files changed, 13 insertions(+), 13 deletions(-) commit df6d4fcdabe82fd018e6bfebd2f06d32e0d36138 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 24 18:03:10 2011 -0200 StreamTubeChannel: Actually make it work with Qt5 when handling QHostAddress::Any*. TelepathyQt/incoming-stream-tube-channel.cpp | 25 ++++++++++++++++--------- TelepathyQt/outgoing-stream-tube-channel.cpp | 19 +++++++++++++------ TelepathyQt/stream-tube-client.cpp | 15 ++++++++++++--- TelepathyQt/stream-tube-server.cpp | 12 ++++++------ 4 files changed, 47 insertions(+), 24 deletions(-) commit 6d31094eed4ffd4cf7bab6a4ba693c1221d7fe84 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 24 16:17:58 2011 -0200 Also set a Qt max version as Requires.private in pkg-config files. This is to avoid having TelepathyQt4.pc pick Qt5 instead of Qt4. CMakeLists.txt | 2 ++ TelepathyQt/TelepathyQt-uninstalled.pc.in | 2 +- TelepathyQt/TelepathyQt.pc.in | 2 +- TelepathyQt/TelepathyQtFarsight-uninstalled.pc.in | 2 +- TelepathyQt/TelepathyQtFarsight.pc.in | 2 +- cmake/modules/FindQt.cmake | 2 ++ 6 files changed, 8 insertions(+), 4 deletions(-) commit cbe9beffacabd2029a325813d085336b81693be2 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 24 16:09:28 2011 -0200 Revert change to bump Qt4 dependency to 4.8. CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit a12afb4ea8a96ca1a40cb3a4b4d14bc2ee57ecf9 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 24 16:01:39 2011 -0200 Install separate headers and pkgconfig files depending on the version of Qt being used. TelepathyQt/CMakeLists.txt | 20 ++++++++++---------- TelepathyQt/Farsight/CMakeLists.txt | 18 +++++++++--------- TelepathyQt/TelepathyQt-uninstalled.pc.in | 2 +- TelepathyQt/TelepathyQt.pc.in | 2 +- TelepathyQt/TelepathyQtFarsight-uninstalled.pc.in | 4 ++-- TelepathyQt/TelepathyQtFarsight.pc.in | 4 ++-- 6 files changed, 25 insertions(+), 25 deletions(-) commit 69708dfc3bfe03c17948d4c385ef82712f079759 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 24 15:23:38 2011 -0200 Generate libtelepathy-qt4 and libtelepathy-qt5 depending on the version of Qt being used. CMakeLists.txt | 33 ++++++++++----------- TelepathyQt/CMakeLists.txt | 16 +++++----- TelepathyQt/Farsight/CMakeLists.txt | 14 ++++----- TelepathyQt/TelepathyQt-uninstalled.pc.in | 2 +- TelepathyQt/TelepathyQt.pc.in | 2 +- TelepathyQt/TelepathyQtFarsight-uninstalled.pc.in | 2 +- TelepathyQt/TelepathyQtFarsight.pc.in | 2 +- cmake/modules/TpQtMacros.cmake | 4 +-- examples/accounts/CMakeLists.txt | 2 +- examples/contact-messenger/CMakeLists.txt | 2 +- examples/extensions/CMakeLists.txt | 2 +- examples/file-transfer/CMakeLists.txt | 4 +-- examples/protocols/CMakeLists.txt | 2 +- examples/roster/CMakeLists.txt | 4 +-- examples/stream-tubes/CMakeLists.txt | 4 +-- tests/lib/CMakeLists.txt | 2 +- tests/lib/glib-helpers/CMakeLists.txt | 2 +- 17 files changed, 48 insertions(+), 51 deletions(-) commit 4565ee9f5b4b1191d1889c9b628456d43c2f0bab Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 24 14:37:24 2011 -0200 StreamTubeChannel: Handle QHostAddress::Any as QHostAddress::AnyIPv4 when using Qt5. TelepathyQt/incoming-stream-tube-channel.cpp | 14 +++++--------- TelepathyQt/stream-tube-client.cpp | 21 ++++++--------------- TelepathyQt/stream-tube-server.cpp | 12 ++++++------ tests/dbus/stream-tube-chan.cpp | 8 -------- tests/dbus/stream-tube-handlers.cpp | 8 -------- 5 files changed, 17 insertions(+), 46 deletions(-) commit ceee628a9e90440d20953906c258ebb9f95c7237 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 23 20:48:58 2011 -0200 StreamTubeChannel: Properly handle QHostAddress::Any/IPv4. Qt5 changed the semantics of QHostAddress::Any to mean either IPv4 or IPv6, and added a new enum QHostAddress::AnyIPv4 for IPv4 only. TelepathyQt/incoming-stream-tube-channel.cpp | 16 +++++++++++--- TelepathyQt/stream-tube-client.cpp | 30 +++++++++++++++++--------- TelepathyQt/stream-tube-server.cpp | 8 +++++++ tests/dbus/stream-tube-chan.cpp | 10 ++++++++- tests/dbus/stream-tube-handlers.cpp | 8 +++++++ 5 files changed, 58 insertions(+), 14 deletions(-) commit 82d132c33a62d3e36efd7893003abc4da8d813c8 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 23 21:31:56 2011 -0200 Properly pass moc flags, options to QT4/5_CREATE_MOC_COMMAND. cmake/modules/FindQt.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 955d6a22b4df59a2871d929c8c99ec4851295511 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 23 20:54:27 2011 -0200 Add Qt5 support. CMakeLists.txt | 29 +++++++++++++++++++---------- cmake/modules/TpQtMacros.cmake | 16 ++++++++-------- 2 files changed, 27 insertions(+), 18 deletions(-) commit d18a8284c433a9c1929f60ebe83933a0b6e57da2 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 23 20:53:18 2011 -0200 Update pkg-config files Requires.private to check for proper Qt version. TelepathyQt/TelepathyQt-uninstalled.pc.in | 2 +- TelepathyQt/TelepathyQt.pc.in | 2 +- TelepathyQt/TelepathyQtFarsight-uninstalled.pc.in | 2 +- TelepathyQt/TelepathyQtFarsight.pc.in | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) commit 1e1034a8f929f3a15e4c35d176bd393975ec5ba0 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 23 20:51:48 2011 -0200 Add FindQt.cmake to help searching for Qt4 or Qt5. cmake/modules/FindQt.cmake | 83 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) commit da19121a0744253f0ad2818c340491e4c6ba4505 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 23 20:50:30 2011 -0200 Add temporary FindQt5/Qt5Macros.cmake files to find Qt5. Once Qt5 or cmake provides support for finding Qt5, these files will not be needed and should be deleted. cmake/modules/FindQt5.cmake | 157 +++++++++++++++++++++++++++++++++++++++++ cmake/modules/Qt5Macros.cmake | 63 +++++++++++++++++ 2 files changed, 220 insertions(+) commit ea0cfcd30d2d479f28a010509edea3362f0efe61 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 23 20:47:03 2011 -0200 shared-ptr: Do not use deprecated Qt5 method QAtomicInt::operator int(). TelepathyQt/shared-ptr.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 3ca21aa285473373f673bb0bee596be4de5dc429 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 23 20:46:33 2011 -0200 global: Change doxygen group for macros. TelepathyQt/global.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6b17778ac18dc28316a97bb2dbd99fee3524c160 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 23 20:45:49 2011 -0200 accounts example: Include QApplication header as it's not part of QtGui in Qt5. examples/accounts/main.cpp | 1 + 1 file changed, 1 insertion(+) commit 2a3e2afb5f1f24038b29cbfecc34d1064e09801d Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 23 20:45:08 2011 -0200 roster example: Include QApplication header as it's not part of QtGui in Qt5. examples/roster/main.cpp | 1 + 1 file changed, 1 insertion(+) commit 14926bf18068bf579c0f828c727064412b55e846 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 23 20:43:53 2011 -0200 Properly link telepathy-qt library to Qt libraries. TelepathyQt/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit da6cf83f0fde7a604110429f37b7ffb137e01ddc Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 23 20:43:35 2011 -0200 stream-tubes example: Properly link to Qt libraries. examples/stream-tubes/CMakeLists.txt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit b9255df03f4a36dd06b65e16e2dafedde3d252e9 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 23 20:43:19 2011 -0200 roster example: Properly link to Qt libraries. examples/roster/CMakeLists.txt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit fcafd7799013907811525903e598930d1eb3ec74 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 23 20:43:01 2011 -0200 protocols example: Properly link to Qt libraries. examples/protocols/CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 58b1ba7048e6b65534be3f54daa6e57a3c3b5a91 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 23 20:42:44 2011 -0200 file-transfer example: Properly link to Qt libraries. examples/file-transfer/CMakeLists.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 14905ecefcc71780413d81295ab5b7ecdb3bf1a1 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 23 20:42:23 2011 -0200 contact-messenger example: Properly link to Qt libraries. examples/contact-messenger/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 73ccd464c77ead0aa2a124950f1c6962ed8d73e6 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 23 20:41:54 2011 -0200 accounts example: Properly link to Qt libraries. examples/accounts/CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 64f2fb1d8406000815294b81035228af041358e0 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 22 18:39:46 2011 -0200 Only generate QLatin1String macros for errors/constants. TelepathyQt/CMakeLists.txt | 2 - TelepathyQt/Farsight/channel.cpp | 2 +- TelepathyQt/account-manager.cpp | 2 +- TelepathyQt/account.cpp | 142 ++++++++++++------------ TelepathyQt/channel-class-spec.cpp | 50 ++++----- TelepathyQt/channel-class-spec.h | 32 +++--- TelepathyQt/channel-dispatch-operation.cpp | 8 +- TelepathyQt/channel-request.cpp | 24 ++-- TelepathyQt/channel.cpp | 116 ++++++++++--------- TelepathyQt/client-registrar.cpp | 10 +- TelepathyQt/connection-manager.cpp | 50 ++++----- TelepathyQt/connection.cpp | 88 +++++++-------- TelepathyQt/contact-manager-roster.cpp | 60 +++++----- TelepathyQt/contact-manager.cpp | 52 ++++----- TelepathyQt/contact-search-channel.cpp | 14 +-- TelepathyQt/contact.cpp | 20 ++-- TelepathyQt/dbus-proxy.cpp | 2 +- TelepathyQt/file-transfer-channel.cpp | 2 +- TelepathyQt/incoming-file-transfer-channel.cpp | 10 +- TelepathyQt/incoming-stream-tube-channel.cpp | 16 +-- TelepathyQt/outgoing-file-transfer-channel.cpp | 6 +- TelepathyQt/outgoing-stream-tube-channel.cpp | 18 +-- TelepathyQt/pending-channel-request.cpp | 4 +- TelepathyQt/pending-channel.cpp | 34 +++--- TelepathyQt/pending-contacts.cpp | 4 +- TelepathyQt/pending-handles.cpp | 24 ++-- TelepathyQt/readiness-helper.cpp | 8 +- TelepathyQt/requestable-channel-class-spec.cpp | 6 +- TelepathyQt/simple-stream-tube-handler.cpp | 3 +- TelepathyQt/streamed-media-channel.cpp | 28 ++--- TelepathyQt/text-channel.cpp | 16 ++- TelepathyQt/tube-channel.cpp | 2 +- spec/errors.xml | 2 +- tests/dbus/account-basics.cpp | 4 +- tests/dbus/account-channel-dispatcher.cpp | 64 +++++------ tests/dbus/account-connection-factory.cpp | 2 +- tests/dbus/account-set.cpp | 10 +- tests/dbus/client-factories.cpp | 32 +++--- tests/dbus/client.cpp | 23 ++-- tests/dbus/conn-basics.cpp | 2 +- tests/dbus/conn-requests.cpp | 16 +-- tests/dbus/contact-messenger.cpp | 4 +- tests/dbus/contacts.cpp | 8 +- tests/dbus/dbus-properties.cpp | 2 +- tests/dbus/simple-observer.cpp | 2 +- tests/dbus/stream-tube-handlers.cpp | 4 +- tests/dbus/streamed-media-chan.cpp | 6 +- tests/lib/glib-helpers/test-conn-helper.cpp | 36 +++--- tests/manager-file.cpp | 22 ++-- 49 files changed, 540 insertions(+), 554 deletions(-) commit c9201a5bb28ac31e21762b468e8814cae081d78f Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 22 17:35:47 2011 -0200 Make TP_QT_CONNECTION_OBJECT_PATH_BASE a QLatin1String. TelepathyQt/connection.cpp | 4 ++-- TelepathyQt/constants.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) commit 5c15021b4628555421cfdb44c58c7a40f52ee97e Author: Jeremy Whiting Date: Fri Nov 11 14:24:01 2011 -0700 Rename qt4 to qt in spec files. HACKING | 2 +- spec/Connection_Interface_Contact_Capabilities.xml | 2 +- spec/errors.xml | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) commit d7ab60b9e19016feff3ec2508e756e7f59fddf6a Author: Jeremy Whiting Date: Fri Nov 11 14:21:30 2011 -0700 Rename tp-qt4 to tp-qt in example code strings and comments. examples/file-transfer/file-receiver-handler.cpp | 4 ++-- examples/file-transfer/file-sender.cpp | 2 +- examples/stream-tubes/tube-initiator.cpp | 10 +++++----- examples/stream-tubes/tube-receiver.cpp | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) commit 6879f313547d52a860d4703ed2411f02ecccc067 Author: Jeremy Whiting Date: Fri Nov 11 14:17:59 2011 -0700 Rename qt4 comments to qt. TelepathyQt/account.h | 2 +- TelepathyQt/channel.cpp | 2 +- TelepathyQt/main.dox | 8 ++++---- doxygen.cfg.in | 2 +- tests/dbus/stream-tube-handlers.cpp | 2 +- tests/dbus/streamed-media-chan.cpp | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) commit 6d7d7ca5ec2d45ed784a9d48280f47af6cbc6fbb Author: Jeremy Whiting Date: Fri Nov 11 14:07:16 2011 -0700 Remove deprecated header files. TelepathyQt/CMakeLists.txt | 4 ---- TelepathyQt/ConnectionInterfaceClientTypes | 17 ----------------- TelepathyQt/ConnectionInterfaceContactGroups | 17 ----------------- TelepathyQt/ConnectionInterfaceContactList | 17 ----------------- TelepathyQt/ConnectionInterfacePowerSaving | 17 ----------------- 5 files changed, 72 deletions(-) commit 78b5f63e1f86f5d918c040913231c757696be4be Author: Jeremy Whiting Date: Fri Nov 11 13:07:33 2011 -0700 Rename library from telepathy-qt4 to telepathy-qt. CMakeLists.txt | 6 +- HACKING | 20 +- README | 6 +- TelepathyQt/dbus-proxy-factory-internal.h | 2 +- TelepathyQt/debug.cpp | 8 +- TelepathyQt/global.h | 2 +- TelepathyQt/outgoing-stream-tube-channel.cpp | 4 +- TelepathyQt/pending-channel.cpp | 2 +- TelepathyQt/simple-observer.cpp | 2 +- TelepathyQt/stream-tube-client.cpp | 2 +- TelepathyQt/stream-tube-server.cpp | 2 +- cmake/modules/TpQtMacros.cmake | 50 +- examples/accounts/CMakeLists.txt | 2 +- examples/contact-messenger/CMakeLists.txt | 2 +- examples/extensions/CMakeLists.txt | 4 +- examples/file-transfer/CMakeLists.txt | 4 +- examples/file-transfer/file-receiver.cpp | 2 +- examples/file-transfer/pending-file-receive.cpp | 2 +- examples/protocols/CMakeLists.txt | 2 +- examples/roster/CMakeLists.txt | 10 +- examples/stream-tubes/CMakeLists.txt | 4 +- tests/dbus/CMakeLists.txt | 48 +- tests/dbus/chan-group.cpp | 4 +- tests/dbus/simple-observer.cpp | 2 +- tests/lib/CMakeLists.txt | 4 +- tests/lib/glib-helpers/CMakeLists.txt | 6 +- tools/CMakeLists.txt | 12 +- tools/libqt4codegen.py | 499 -------------------- tools/libqtcodegen.py | 499 ++++++++++++++++++++ tools/qt-client-gen.py | 547 ++++++++++++++++++++++ tools/qt-constants-gen.py | 310 +++++++++++++ tools/qt-types-gen.py | 557 +++++++++++++++++++++++ tools/qt4-client-gen.py | 547 ---------------------- tools/qt4-constants-gen.py | 310 ------------- tools/qt4-types-gen.py | 557 ----------------------- tools/tp-qt-tests.supp | 53 +++ tools/tp-qt4-tests.supp | 53 --- 37 files changed, 2073 insertions(+), 2073 deletions(-) commit d0e664bf2ea436d6447a0992e1604b8c8b0fb609 Author: Jeremy Whiting Date: Thu Nov 10 16:01:10 2011 -0700 Renamed TpQt4Macros.cmake TpQtMacros.cmake. CMakeLists.txt | 2 +- TelepathyQt/CMakeLists.txt | 60 ++--- TelepathyQt/Farsight/CMakeLists.txt | 22 +- TelepathyQt/async-model.dox | 8 +- TelepathyQt/client-registrar.cpp | 2 +- TelepathyQt/connection-manager.cpp | 2 +- TelepathyQt/dbus-proxy.cpp | 2 +- TelepathyQt/main.dox | 14 +- TelepathyQt/shared-ptr.dox | 2 +- cmake/modules/TelepathyDefaults.cmake | 4 +- cmake/modules/TelepathyDist.cmake | 2 +- cmake/modules/TpQt4Macros.cmake | 435 --------------------------------- cmake/modules/TpQtMacros.cmake | 435 +++++++++++++++++++++++++++++++++ doxygen-footer.html | 2 +- 14 files changed, 496 insertions(+), 496 deletions(-) commit 98c89fddfa8175d226d84f6631ec4377a5522fd0 Author: Jeremy Whiting Date: Thu Nov 10 15:32:03 2011 -0700 Rename dbus object paths from Telepathy.Qt4 to Telepathy.Qt. TelepathyQt/constants.h | 12 ++++++------ TelepathyQt/method-invocation-context.h | 2 +- TelepathyQt/pending-operation.cpp | 2 +- doxygen.cfg.in | 2 +- spec/errors.xml | 2 +- tests/dbus/stateful-proxy.cpp | 4 ++-- 6 files changed, 12 insertions(+), 12 deletions(-) commit be40b6f313c8d7b1f0fb59fd06ea87b0934e4bad Author: Jeremy Whiting Date: Thu Nov 10 15:21:06 2011 -0700 Renamed TelepathyQt4 directory to TelepathyQt. CMakeLists.txt | 6 +- HACKING | 2 +- TelepathyQt/AbstractClient | 13 + TelepathyQt/AbstractClientApprover | 13 + TelepathyQt/AbstractClientHandler | 13 + TelepathyQt/AbstractClientObserver | 13 + TelepathyQt/AbstractInterface | 13 + TelepathyQt/Account | 13 + TelepathyQt/AccountCapabilityFilter | 13 + TelepathyQt/AccountFactory | 13 + TelepathyQt/AccountFilter | 13 + TelepathyQt/AccountInterface | 13 + TelepathyQt/AccountInterfaceAddressingInterface | 13 + TelepathyQt/AccountInterfaceAvatarInterface | 13 + TelepathyQt/AccountManager | 13 + TelepathyQt/AccountManagerInterface | 13 + TelepathyQt/AccountPropertyFilter | 13 + TelepathyQt/AccountSet | 13 + TelepathyQt/AndFilter | 13 + TelepathyQt/AuthenticationTLSCertificateInterface | 13 + TelepathyQt/AvatarData | 13 + TelepathyQt/AvatarSpec | 13 + TelepathyQt/CMakeLists.txt | 694 +++ TelepathyQt/CapabilitiesBase | 13 + TelepathyQt/Channel | 13 + TelepathyQt/ChannelClassFeatures | 13 + TelepathyQt/ChannelClassSpec | 13 + TelepathyQt/ChannelClassSpecList | 13 + TelepathyQt/ChannelDispatchOperation | 13 + TelepathyQt/ChannelDispatchOperationInterface | 13 + TelepathyQt/ChannelDispatcher | 13 + TelepathyQt/ChannelDispatcherInterface | 13 + TelepathyQt/ChannelFactory | 13 + TelepathyQt/ChannelInterface | 13 + TelepathyQt/ChannelInterfaceAnonymityInterface | 13 + TelepathyQt/ChannelInterfaceCallStateInterface | 13 + TelepathyQt/ChannelInterfaceChatStateInterface | 13 + TelepathyQt/ChannelInterfaceConferenceInterface | 13 + TelepathyQt/ChannelInterfaceDTMFInterface | 13 + TelepathyQt/ChannelInterfaceGroupInterface | 13 + TelepathyQt/ChannelInterfaceHoldInterface | 13 + .../ChannelInterfaceMediaSignallingInterface | 13 + TelepathyQt/ChannelInterfaceMessagesInterface | 13 + TelepathyQt/ChannelInterfacePasswordInterface | 13 + .../ChannelInterfaceSASLAuthenticationInterface | 13 + TelepathyQt/ChannelInterfaceSecurableInterface | 13 + TelepathyQt/ChannelInterfaceServicePointInterface | 13 + TelepathyQt/ChannelInterfaceTubeInterface | 13 + TelepathyQt/ChannelRequest | 13 + TelepathyQt/ChannelRequestHints | 13 + TelepathyQt/ChannelRequestInterface | 13 + TelepathyQt/ChannelTypeContactListInterface | 13 + TelepathyQt/ChannelTypeContactSearchInterface | 13 + TelepathyQt/ChannelTypeFileTransferInterface | 13 + TelepathyQt/ChannelTypeRoomListInterface | 13 + .../ChannelTypeServerAuthenticationInterface | 13 + .../ChannelTypeServerTLSConnectionInterface | 13 + TelepathyQt/ChannelTypeStreamTubeInterface | 13 + TelepathyQt/ChannelTypeStreamedMediaInterface | 13 + TelepathyQt/ChannelTypeTextInterface | 13 + TelepathyQt/ChannelTypeTubeInterface | 13 + TelepathyQt/ChannelTypeTubesInterface | 13 + TelepathyQt/Client | 13 + TelepathyQt/ClientApproverInterface | 13 + TelepathyQt/ClientHandlerInterface | 13 + TelepathyQt/ClientInterface | 13 + TelepathyQt/ClientInterfaceRequestsInterface | 13 + TelepathyQt/ClientObserverInterface | 13 + TelepathyQt/ClientRegistrar | 13 + TelepathyQt/Connection | 13 + TelepathyQt/ConnectionCapabilities | 13 + TelepathyQt/ConnectionFactory | 13 + TelepathyQt/ConnectionInterface | 13 + TelepathyQt/ConnectionInterfaceAliasingInterface | 13 + TelepathyQt/ConnectionInterfaceAnonymityInterface | 13 + TelepathyQt/ConnectionInterfaceAvatarsInterface | 13 + TelepathyQt/ConnectionInterfaceBalanceInterface | 13 + .../ConnectionInterfaceCapabilitiesInterface | 13 + TelepathyQt/ConnectionInterfaceCellularInterface | 13 + TelepathyQt/ConnectionInterfaceClientTypes | 17 + .../ConnectionInterfaceClientTypesInterface | 13 + .../ConnectionInterfaceContactBlockingInterface | 13 + ...ConnectionInterfaceContactCapabilitiesInterface | 13 + TelepathyQt/ConnectionInterfaceContactGroups | 17 + .../ConnectionInterfaceContactGroupsInterface | 13 + .../ConnectionInterfaceContactInfoInterface | 13 + TelepathyQt/ConnectionInterfaceContactList | 17 + .../ConnectionInterfaceContactListInterface | 13 + TelepathyQt/ConnectionInterfaceContactsInterface | 13 + TelepathyQt/ConnectionInterfaceLocationInterface | 13 + .../ConnectionInterfaceMailNotificationInterface | 13 + TelepathyQt/ConnectionInterfacePowerSaving | 17 + .../ConnectionInterfacePowerSavingInterface | 13 + TelepathyQt/ConnectionInterfacePresenceInterface | 13 + TelepathyQt/ConnectionInterfaceRequestsInterface | 13 + .../ConnectionInterfaceServicePointInterface | 13 + .../ConnectionInterfaceSimplePresenceInterface | 13 + TelepathyQt/ConnectionLowlevel | 13 + TelepathyQt/ConnectionManager | 13 + TelepathyQt/ConnectionManagerInterface | 13 + TelepathyQt/ConnectionManagerLowlevel | 13 + TelepathyQt/Constants | 13 + TelepathyQt/Contact | 13 + TelepathyQt/ContactCapabilities | 13 + TelepathyQt/ContactFactory | 13 + TelepathyQt/ContactManager | 13 + TelepathyQt/ContactMessenger | 13 + TelepathyQt/ContactSearchChannel | 13 + TelepathyQt/DBus | 13 + TelepathyQt/DBusDaemonInterface | 13 + TelepathyQt/DBusProxy | 13 + TelepathyQt/DBusProxyFactory | 13 + TelepathyQt/Debug | 13 + TelepathyQt/Farsight/CMakeLists.txt | 52 + TelepathyQt/Farsight/Channel | 13 + TelepathyQt/Farsight/channel.cpp | 87 + TelepathyQt/Farsight/channel.h | 43 + TelepathyQt/Farsight/global.h | 46 + TelepathyQt/Feature | 13 + TelepathyQt/Features | 13 + TelepathyQt/FileTransferChannel | 13 + TelepathyQt/FileTransferChannelCreationProperties | 13 + TelepathyQt/Filter | 13 + TelepathyQt/FixedFeatureFactory | 13 + TelepathyQt/GenericCapabilityFilter | 13 + TelepathyQt/GenericPropertyFilter | 13 + TelepathyQt/Global | 13 + TelepathyQt/HandledChannelNotifier | 13 + TelepathyQt/IncomingFileTransferChannel | 13 + TelepathyQt/IncomingStreamTubeChannel | 13 + TelepathyQt/IntrospectableInterface | 13 + TelepathyQt/KeyFile | 13 + TelepathyQt/LocationInfo | 13 + TelepathyQt/ManagerFile | 13 + TelepathyQt/MediaSessionHandler | 13 + TelepathyQt/MediaSessionHandlerInterface | 13 + TelepathyQt/MediaStreamHandler | 13 + TelepathyQt/MediaStreamHandlerInterface | 13 + TelepathyQt/Message | 13 + TelepathyQt/MessageContentPart | 13 + TelepathyQt/MessageContentPartList | 13 + TelepathyQt/MethodInvocationContext | 13 + TelepathyQt/NotFilter | 13 + TelepathyQt/Object | 13 + TelepathyQt/OptionalInterfaceFactory | 13 + TelepathyQt/OrFilter | 13 + TelepathyQt/OutgoingFileTransferChannel | 13 + TelepathyQt/OutgoingStreamTubeChannel | 13 + TelepathyQt/PeerInterface | 13 + TelepathyQt/PendingAccount | 13 + TelepathyQt/PendingChannel | 13 + TelepathyQt/PendingChannelRequest | 13 + TelepathyQt/PendingComposite | 13 + TelepathyQt/PendingConnection | 13 + TelepathyQt/PendingContactAttributes | 13 + TelepathyQt/PendingContactInfo | 13 + TelepathyQt/PendingContacts | 13 + TelepathyQt/PendingFailure | 13 + TelepathyQt/PendingHandles | 13 + TelepathyQt/PendingOperation | 13 + TelepathyQt/PendingReady | 13 + TelepathyQt/PendingSendMessage | 13 + TelepathyQt/PendingStreamTubeConnection | 13 + TelepathyQt/PendingStreamedMediaStreams | 13 + TelepathyQt/PendingStringList | 13 + TelepathyQt/PendingSuccess | 13 + TelepathyQt/PendingVariant | 13 + TelepathyQt/PendingVariantMap | 13 + TelepathyQt/PendingVoid | 13 + TelepathyQt/Presence | 13 + TelepathyQt/PresenceSpec | 13 + TelepathyQt/PresenceSpecList | 13 + TelepathyQt/Profile | 13 + TelepathyQt/ProfileManager | 13 + TelepathyQt/Properties | 13 + TelepathyQt/PropertiesInterface | 13 + TelepathyQt/PropertiesInterfaceInterface | 13 + TelepathyQt/ProtocolInfo | 13 + TelepathyQt/ProtocolParameter | 13 + TelepathyQt/ReadinessHelper | 13 + TelepathyQt/ReadyObject | 13 + TelepathyQt/ReceivedMessage | 13 + TelepathyQt/RefCounted | 13 + TelepathyQt/ReferencedHandles | 12 + TelepathyQt/ReferencedHandlesIterator | 6 + TelepathyQt/RequestableChannelClassSpec | 13 + TelepathyQt/RequestableChannelClassSpecList | 13 + TelepathyQt/RoomListChannel | 13 + TelepathyQt/SharedPtr | 13 + TelepathyQt/SimpleCallObserver | 13 + TelepathyQt/SimpleObserver | 13 + TelepathyQt/SimpleTextObserver | 13 + TelepathyQt/StatefulDBusProxy | 13 + TelepathyQt/StatelessDBusProxy | 13 + TelepathyQt/StreamTubeChannel | 13 + TelepathyQt/StreamTubeClient | 13 + TelepathyQt/StreamTubeServer | 13 + TelepathyQt/StreamedMediaChannel | 13 + TelepathyQt/StreamedMediaStream | 13 + TelepathyQt/TelepathyQt-uninstalled.pc.in | 11 + TelepathyQt/TelepathyQt.pc.in | 11 + TelepathyQt/TelepathyQtFarsight-uninstalled.pc.in | 11 + TelepathyQt/TelepathyQtFarsight.pc.in | 11 + TelepathyQt/TextChannel | 13 + TelepathyQt/TubeChannel | 13 + TelepathyQt/Types | 13 + TelepathyQt/Utils | 13 + TelepathyQt/abstract-client.cpp | 988 +++++ TelepathyQt/abstract-client.h | 323 ++ TelepathyQt/abstract-interface.cpp | 136 + TelepathyQt/abstract-interface.h | 76 + TelepathyQt/account-capability-filter.dox | 30 + TelepathyQt/account-capability-filter.h | 39 + TelepathyQt/account-factory.cpp | 157 + TelepathyQt/account-factory.h | 79 + TelepathyQt/account-filter.h | 39 + TelepathyQt/account-manager.cpp | 1115 +++++ TelepathyQt/account-manager.h | 152 + TelepathyQt/account-manager.xml | 9 + TelepathyQt/account-property-filter.cpp | 94 + TelepathyQt/account-property-filter.h | 59 + TelepathyQt/account-set-internal.h | 82 + TelepathyQt/account-set.cpp | 418 ++ TelepathyQt/account-set.h | 79 + TelepathyQt/account.cpp | 4472 ++++++++++++++++++++ TelepathyQt/account.h | 598 +++ TelepathyQt/account.xml | 13 + TelepathyQt/and-filter.dox | 33 + TelepathyQt/and-filter.h | 83 + TelepathyQt/async-model.dox | 56 + TelepathyQt/avatar.cpp | 172 + TelepathyQt/avatar.h | 86 + TelepathyQt/capabilities-base.cpp | 348 ++ TelepathyQt/capabilities-base.h | 85 + TelepathyQt/channel-class-features.h | 45 + TelepathyQt/channel-class-spec.cpp | 555 +++ TelepathyQt/channel-class-spec.h | 277 ++ TelepathyQt/channel-dispatch-operation-internal.h | 51 + TelepathyQt/channel-dispatch-operation.cpp | 623 +++ TelepathyQt/channel-dispatch-operation.h | 114 + TelepathyQt/channel-dispatch-operation.xml | 9 + TelepathyQt/channel-dispatcher.cpp | 26 + TelepathyQt/channel-dispatcher.h | 32 + TelepathyQt/channel-dispatcher.xml | 9 + TelepathyQt/channel-factory.cpp | 529 +++ TelepathyQt/channel-factory.h | 305 ++ TelepathyQt/channel-internal.h | 50 + TelepathyQt/channel-request.cpp | 803 ++++ TelepathyQt/channel-request.h | 154 + TelepathyQt/channel-request.xml | 9 + TelepathyQt/channel.cpp | 3596 ++++++++++++++++ TelepathyQt/channel.h | 256 ++ TelepathyQt/channel.xml | 37 + TelepathyQt/client-registrar-internal.h | 365 ++ TelepathyQt/client-registrar.cpp | 1038 +++++ TelepathyQt/client-registrar.h | 97 + TelepathyQt/client.cpp | 26 + TelepathyQt/client.h | 32 + TelepathyQt/client.xml | 14 + TelepathyQt/connection-capabilities.cpp | 303 ++ TelepathyQt/connection-capabilities.h | 77 + TelepathyQt/connection-factory.cpp | 150 + TelepathyQt/connection-factory.h | 78 + TelepathyQt/connection-internal.h | 61 + TelepathyQt/connection-lowlevel.h | 96 + TelepathyQt/connection-manager-internal.h | 159 + TelepathyQt/connection-manager-lowlevel.h | 64 + TelepathyQt/connection-manager.cpp | 1076 +++++ TelepathyQt/connection-manager.h | 125 + TelepathyQt/connection-manager.xml | 12 + TelepathyQt/connection.cpp | 2578 +++++++++++ TelepathyQt/connection.h | 249 ++ TelepathyQt/connection.xml | 30 + TelepathyQt/constants.h | 178 + TelepathyQt/contact-capabilities.cpp | 127 + TelepathyQt/contact-capabilities.h | 66 + TelepathyQt/contact-factory.cpp | 146 + TelepathyQt/contact-factory.h | 76 + TelepathyQt/contact-manager-internal.h | 389 ++ TelepathyQt/contact-manager-roster.cpp | 2217 ++++++++++ TelepathyQt/contact-manager.cpp | 1592 +++++++ TelepathyQt/contact-manager.h | 201 + TelepathyQt/contact-messenger.cpp | 257 ++ TelepathyQt/contact-messenger.h | 78 + TelepathyQt/contact-search-channel-internal.h | 52 + TelepathyQt/contact-search-channel.cpp | 676 +++ TelepathyQt/contact-search-channel.h | 114 + TelepathyQt/contact.cpp | 1352 ++++++ TelepathyQt/contact.h | 246 ++ TelepathyQt/dbus-daemon.xml | 80 + TelepathyQt/dbus-introspectable.xml | 16 + TelepathyQt/dbus-peer.xml | 19 + TelepathyQt/dbus-properties.xml | 29 + TelepathyQt/dbus-proxy-factory-internal.h | 58 + TelepathyQt/dbus-proxy-factory.cpp | 295 ++ TelepathyQt/dbus-proxy-factory.h | 85 + TelepathyQt/dbus-proxy.cpp | 393 ++ TelepathyQt/dbus-proxy.h | 122 + TelepathyQt/dbus.cpp | 26 + TelepathyQt/dbus.h | 54 + TelepathyQt/dbus.xml | 12 + TelepathyQt/debug-internal.h | 170 + TelepathyQt/debug.cpp | 187 + TelepathyQt/debug.h | 46 + TelepathyQt/examples.dox | 154 + TelepathyQt/fake-handler-manager-internal.cpp | 165 + TelepathyQt/fake-handler-manager-internal.h | 90 + TelepathyQt/feature.cpp | 89 + TelepathyQt/feature.h | 94 + .../file-transfer-channel-creation-properties.cpp | 433 ++ .../file-transfer-channel-creation-properties.h | 96 + TelepathyQt/file-transfer-channel.cpp | 703 +++ TelepathyQt/file-transfer-channel.h | 108 + TelepathyQt/filter.dox | 30 + TelepathyQt/filter.h | 63 + TelepathyQt/fixed-feature-factory.cpp | 116 + TelepathyQt/fixed-feature-factory.h | 69 + TelepathyQt/future-channel-dispatcher.xml | 20 + TelepathyQt/future-channel.xml | 13 + TelepathyQt/future-interfaces.xml | 14 + TelepathyQt/future-internal.h | 36 + TelepathyQt/future-misc.xml | 7 + TelepathyQt/future.cpp | 32 + TelepathyQt/generic-capability-filter.dox | 36 + TelepathyQt/generic-capability-filter.h | 114 + TelepathyQt/generic-property-filter.dox | 33 + TelepathyQt/generic-property-filter.h | 77 + TelepathyQt/global.h | 103 + TelepathyQt/groups.dox | 115 + TelepathyQt/handled-channel-notifier.cpp | 103 + TelepathyQt/handled-channel-notifier.h | 75 + TelepathyQt/incoming-file-transfer-channel.cpp | 390 ++ TelepathyQt/incoming-file-transfer-channel.h | 81 + TelepathyQt/incoming-stream-tube-channel.cpp | 435 ++ TelepathyQt/incoming-stream-tube-channel.h | 80 + TelepathyQt/key-file.cpp | 582 +++ TelepathyQt/key-file.h | 91 + TelepathyQt/location-info.cpp | 221 + TelepathyQt/location-info.h | 95 + TelepathyQt/main.dox | 133 + TelepathyQt/manager-file.cpp | 618 +++ TelepathyQt/manager-file.h | 78 + TelepathyQt/media-session-handler.cpp | 26 + TelepathyQt/media-session-handler.h | 50 + TelepathyQt/media-session-handler.xml | 9 + TelepathyQt/media-stream-handler.cpp | 26 + TelepathyQt/media-stream-handler.h | 50 + TelepathyQt/media-stream-handler.xml | 9 + TelepathyQt/message-content-part.cpp | 96 + TelepathyQt/message-content-part.h | 96 + TelepathyQt/message.cpp | 911 ++++ TelepathyQt/message.h | 173 + TelepathyQt/method-invocation-context.dox | 41 + TelepathyQt/method-invocation-context.h | 192 + TelepathyQt/not-filter.dox | 32 + TelepathyQt/not-filter.h | 73 + TelepathyQt/object.cpp | 65 + TelepathyQt/object.h | 63 + TelepathyQt/optional-interface-factory.cpp | 178 + TelepathyQt/optional-interface-factory.h | 140 + TelepathyQt/or-filter.dox | 33 + TelepathyQt/or-filter.h | 83 + TelepathyQt/outgoing-file-transfer-channel.cpp | 371 ++ TelepathyQt/outgoing-file-transfer-channel.h | 78 + .../outgoing-stream-tube-channel-internal.h | 122 + TelepathyQt/outgoing-stream-tube-channel.cpp | 821 ++++ TelepathyQt/outgoing-stream-tube-channel.h | 89 + TelepathyQt/pending-account.cpp | 184 + TelepathyQt/pending-account.h | 75 + TelepathyQt/pending-channel-request-internal.h | 73 + TelepathyQt/pending-channel-request.cpp | 276 ++ TelepathyQt/pending-channel-request.h | 84 + TelepathyQt/pending-channel.cpp | 555 +++ TelepathyQt/pending-channel.h | 103 + TelepathyQt/pending-connection.cpp | 171 + TelepathyQt/pending-connection.h | 73 + TelepathyQt/pending-contact-attributes.cpp | 219 + TelepathyQt/pending-contact-attributes.h | 77 + TelepathyQt/pending-contact-info.cpp | 128 + TelepathyQt/pending-contact-info.h | 66 + TelepathyQt/pending-contacts.cpp | 468 ++ TelepathyQt/pending-contacts.h | 108 + TelepathyQt/pending-handles.cpp | 490 +++ TelepathyQt/pending-handles.h | 96 + TelepathyQt/pending-operation.cpp | 424 ++ TelepathyQt/pending-operation.h | 89 + TelepathyQt/pending-ready.cpp | 148 + TelepathyQt/pending-ready.h | 71 + TelepathyQt/pending-send-message.cpp | 153 + TelepathyQt/pending-send-message.h | 77 + TelepathyQt/pending-stream-tube-connection.cpp | 272 ++ TelepathyQt/pending-stream-tube-connection.h | 81 + TelepathyQt/pending-string-list.cpp | 100 + TelepathyQt/pending-string-list.h | 63 + TelepathyQt/pending-variant-map.cpp | 91 + TelepathyQt/pending-variant-map.h | 60 + TelepathyQt/pending-variant.cpp | 91 + TelepathyQt/pending-variant.h | 60 + TelepathyQt/presence.cpp | 335 ++ TelepathyQt/presence.h | 135 + TelepathyQt/profile-manager.cpp | 332 ++ TelepathyQt/profile-manager.h | 75 + TelepathyQt/profile.cpp | 1216 ++++++ TelepathyQt/profile.h | 176 + TelepathyQt/properties.cpp | 26 + TelepathyQt/properties.h | 51 + TelepathyQt/properties.xml | 9 + TelepathyQt/protocol-info.cpp | 374 ++ TelepathyQt/protocol-info.h | 102 + TelepathyQt/protocol-parameter.cpp | 176 + TelepathyQt/protocol-parameter.h | 87 + TelepathyQt/readiness-helper.cpp | 684 +++ TelepathyQt/readiness-helper.h | 130 + TelepathyQt/ready-object.cpp | 161 + TelepathyQt/ready-object.h | 69 + TelepathyQt/referenced-handles.cpp | 333 ++ TelepathyQt/referenced-handles.h | 264 ++ TelepathyQt/request-temporary-handler-internal.cpp | 135 + TelepathyQt/request-temporary-handler-internal.h | 91 + TelepathyQt/requestable-channel-class-spec.cpp | 494 +++ TelepathyQt/requestable-channel-class-spec.h | 134 + TelepathyQt/room-list-channel.cpp | 106 + TelepathyQt/room-list-channel.h | 59 + TelepathyQt/shared-ptr.dox | 111 + TelepathyQt/shared-ptr.h | 152 + TelepathyQt/simple-call-observer.cpp | 298 ++ TelepathyQt/simple-call-observer.h | 95 + TelepathyQt/simple-observer-internal.h | 261 ++ TelepathyQt/simple-observer.cpp | 643 +++ TelepathyQt/simple-observer.h | 105 + TelepathyQt/simple-pending-operations.h | 110 + TelepathyQt/simple-stream-tube-handler.cpp | 254 ++ TelepathyQt/simple-stream-tube-handler.h | 120 + TelepathyQt/simple-text-observer-internal.h | 70 + TelepathyQt/simple-text-observer.cpp | 298 ++ TelepathyQt/simple-text-observer.h | 80 + TelepathyQt/stable-interfaces.xml | 26 + TelepathyQt/stream-tube-channel.cpp | 740 ++++ TelepathyQt/stream-tube-channel.h | 108 + TelepathyQt/stream-tube-client-internal.h | 61 + TelepathyQt/stream-tube-client.cpp | 1048 +++++ TelepathyQt/stream-tube-client.h | 217 + TelepathyQt/stream-tube-server-internal.h | 56 + TelepathyQt/stream-tube-server.cpp | 1134 +++++ TelepathyQt/stream-tube-server.h | 253 ++ TelepathyQt/streamed-media-channel.cpp | 1539 +++++++ TelepathyQt/streamed-media-channel.h | 228 + TelepathyQt/test-backdoors.cpp | 50 + TelepathyQt/test-backdoors.h | 59 + TelepathyQt/text-channel.cpp | 1277 ++++++ TelepathyQt/text-channel.h | 139 + TelepathyQt/tls-certificate.cpp | 26 + TelepathyQt/tls-certificate.h | 31 + TelepathyQt/tls-certificate.xml | 9 + TelepathyQt/tube-channel.cpp | 281 ++ TelepathyQt/tube-channel.h | 80 + TelepathyQt/types-internal.h | 156 + TelepathyQt/types.cpp | 73 + TelepathyQt/types.h | 171 + TelepathyQt/utils.cpp | 120 + TelepathyQt/utils.h | 41 + TelepathyQt4/AbstractClient | 13 - TelepathyQt4/AbstractClientApprover | 13 - TelepathyQt4/AbstractClientHandler | 13 - TelepathyQt4/AbstractClientObserver | 13 - TelepathyQt4/AbstractInterface | 13 - TelepathyQt4/Account | 13 - TelepathyQt4/AccountCapabilityFilter | 13 - TelepathyQt4/AccountFactory | 13 - TelepathyQt4/AccountFilter | 13 - TelepathyQt4/AccountInterface | 13 - TelepathyQt4/AccountInterfaceAddressingInterface | 13 - TelepathyQt4/AccountInterfaceAvatarInterface | 13 - TelepathyQt4/AccountManager | 13 - TelepathyQt4/AccountManagerInterface | 13 - TelepathyQt4/AccountPropertyFilter | 13 - TelepathyQt4/AccountSet | 13 - TelepathyQt4/AndFilter | 13 - TelepathyQt4/AuthenticationTLSCertificateInterface | 13 - TelepathyQt4/AvatarData | 13 - TelepathyQt4/AvatarSpec | 13 - TelepathyQt4/CMakeLists.txt | 694 --- TelepathyQt4/CapabilitiesBase | 13 - TelepathyQt4/Channel | 13 - TelepathyQt4/ChannelClassFeatures | 13 - TelepathyQt4/ChannelClassSpec | 13 - TelepathyQt4/ChannelClassSpecList | 13 - TelepathyQt4/ChannelDispatchOperation | 13 - TelepathyQt4/ChannelDispatchOperationInterface | 13 - TelepathyQt4/ChannelDispatcher | 13 - TelepathyQt4/ChannelDispatcherInterface | 13 - TelepathyQt4/ChannelFactory | 13 - TelepathyQt4/ChannelInterface | 13 - TelepathyQt4/ChannelInterfaceAnonymityInterface | 13 - TelepathyQt4/ChannelInterfaceCallStateInterface | 13 - TelepathyQt4/ChannelInterfaceChatStateInterface | 13 - TelepathyQt4/ChannelInterfaceConferenceInterface | 13 - TelepathyQt4/ChannelInterfaceDTMFInterface | 13 - TelepathyQt4/ChannelInterfaceGroupInterface | 13 - TelepathyQt4/ChannelInterfaceHoldInterface | 13 - .../ChannelInterfaceMediaSignallingInterface | 13 - TelepathyQt4/ChannelInterfaceMessagesInterface | 13 - TelepathyQt4/ChannelInterfacePasswordInterface | 13 - .../ChannelInterfaceSASLAuthenticationInterface | 13 - TelepathyQt4/ChannelInterfaceSecurableInterface | 13 - TelepathyQt4/ChannelInterfaceServicePointInterface | 13 - TelepathyQt4/ChannelInterfaceTubeInterface | 13 - TelepathyQt4/ChannelRequest | 13 - TelepathyQt4/ChannelRequestHints | 13 - TelepathyQt4/ChannelRequestInterface | 13 - TelepathyQt4/ChannelTypeContactListInterface | 13 - TelepathyQt4/ChannelTypeContactSearchInterface | 13 - TelepathyQt4/ChannelTypeFileTransferInterface | 13 - TelepathyQt4/ChannelTypeRoomListInterface | 13 - .../ChannelTypeServerAuthenticationInterface | 13 - .../ChannelTypeServerTLSConnectionInterface | 13 - TelepathyQt4/ChannelTypeStreamTubeInterface | 13 - TelepathyQt4/ChannelTypeStreamedMediaInterface | 13 - TelepathyQt4/ChannelTypeTextInterface | 13 - TelepathyQt4/ChannelTypeTubeInterface | 13 - TelepathyQt4/ChannelTypeTubesInterface | 13 - TelepathyQt4/Client | 13 - TelepathyQt4/ClientApproverInterface | 13 - TelepathyQt4/ClientHandlerInterface | 13 - TelepathyQt4/ClientInterface | 13 - TelepathyQt4/ClientInterfaceRequestsInterface | 13 - TelepathyQt4/ClientObserverInterface | 13 - TelepathyQt4/ClientRegistrar | 13 - TelepathyQt4/Connection | 13 - TelepathyQt4/ConnectionCapabilities | 13 - TelepathyQt4/ConnectionFactory | 13 - TelepathyQt4/ConnectionInterface | 13 - TelepathyQt4/ConnectionInterfaceAliasingInterface | 13 - TelepathyQt4/ConnectionInterfaceAnonymityInterface | 13 - TelepathyQt4/ConnectionInterfaceAvatarsInterface | 13 - TelepathyQt4/ConnectionInterfaceBalanceInterface | 13 - .../ConnectionInterfaceCapabilitiesInterface | 13 - TelepathyQt4/ConnectionInterfaceCellularInterface | 13 - TelepathyQt4/ConnectionInterfaceClientTypes | 17 - .../ConnectionInterfaceClientTypesInterface | 13 - .../ConnectionInterfaceContactBlockingInterface | 13 - ...ConnectionInterfaceContactCapabilitiesInterface | 13 - TelepathyQt4/ConnectionInterfaceContactGroups | 17 - .../ConnectionInterfaceContactGroupsInterface | 13 - .../ConnectionInterfaceContactInfoInterface | 13 - TelepathyQt4/ConnectionInterfaceContactList | 17 - .../ConnectionInterfaceContactListInterface | 13 - TelepathyQt4/ConnectionInterfaceContactsInterface | 13 - TelepathyQt4/ConnectionInterfaceLocationInterface | 13 - .../ConnectionInterfaceMailNotificationInterface | 13 - TelepathyQt4/ConnectionInterfacePowerSaving | 17 - .../ConnectionInterfacePowerSavingInterface | 13 - TelepathyQt4/ConnectionInterfacePresenceInterface | 13 - TelepathyQt4/ConnectionInterfaceRequestsInterface | 13 - .../ConnectionInterfaceServicePointInterface | 13 - .../ConnectionInterfaceSimplePresenceInterface | 13 - TelepathyQt4/ConnectionLowlevel | 13 - TelepathyQt4/ConnectionManager | 13 - TelepathyQt4/ConnectionManagerInterface | 13 - TelepathyQt4/ConnectionManagerLowlevel | 13 - TelepathyQt4/Constants | 13 - TelepathyQt4/Contact | 13 - TelepathyQt4/ContactCapabilities | 13 - TelepathyQt4/ContactFactory | 13 - TelepathyQt4/ContactManager | 13 - TelepathyQt4/ContactMessenger | 13 - TelepathyQt4/ContactSearchChannel | 13 - TelepathyQt4/DBus | 13 - TelepathyQt4/DBusDaemonInterface | 13 - TelepathyQt4/DBusProxy | 13 - TelepathyQt4/DBusProxyFactory | 13 - TelepathyQt4/Debug | 13 - TelepathyQt4/Farsight/CMakeLists.txt | 52 - TelepathyQt4/Farsight/Channel | 13 - TelepathyQt4/Farsight/channel.cpp | 87 - TelepathyQt4/Farsight/channel.h | 43 - TelepathyQt4/Farsight/global.h | 46 - TelepathyQt4/Feature | 13 - TelepathyQt4/Features | 13 - TelepathyQt4/FileTransferChannel | 13 - TelepathyQt4/FileTransferChannelCreationProperties | 13 - TelepathyQt4/Filter | 13 - TelepathyQt4/FixedFeatureFactory | 13 - TelepathyQt4/GenericCapabilityFilter | 13 - TelepathyQt4/GenericPropertyFilter | 13 - TelepathyQt4/Global | 13 - TelepathyQt4/HandledChannelNotifier | 13 - TelepathyQt4/IncomingFileTransferChannel | 13 - TelepathyQt4/IncomingStreamTubeChannel | 13 - TelepathyQt4/IntrospectableInterface | 13 - TelepathyQt4/KeyFile | 13 - TelepathyQt4/LocationInfo | 13 - TelepathyQt4/ManagerFile | 13 - TelepathyQt4/MediaSessionHandler | 13 - TelepathyQt4/MediaSessionHandlerInterface | 13 - TelepathyQt4/MediaStreamHandler | 13 - TelepathyQt4/MediaStreamHandlerInterface | 13 - TelepathyQt4/Message | 13 - TelepathyQt4/MessageContentPart | 13 - TelepathyQt4/MessageContentPartList | 13 - TelepathyQt4/MethodInvocationContext | 13 - TelepathyQt4/NotFilter | 13 - TelepathyQt4/Object | 13 - TelepathyQt4/OptionalInterfaceFactory | 13 - TelepathyQt4/OrFilter | 13 - TelepathyQt4/OutgoingFileTransferChannel | 13 - TelepathyQt4/OutgoingStreamTubeChannel | 13 - TelepathyQt4/PeerInterface | 13 - TelepathyQt4/PendingAccount | 13 - TelepathyQt4/PendingChannel | 13 - TelepathyQt4/PendingChannelRequest | 13 - TelepathyQt4/PendingComposite | 13 - TelepathyQt4/PendingConnection | 13 - TelepathyQt4/PendingContactAttributes | 13 - TelepathyQt4/PendingContactInfo | 13 - TelepathyQt4/PendingContacts | 13 - TelepathyQt4/PendingFailure | 13 - TelepathyQt4/PendingHandles | 13 - TelepathyQt4/PendingOperation | 13 - TelepathyQt4/PendingReady | 13 - TelepathyQt4/PendingSendMessage | 13 - TelepathyQt4/PendingStreamTubeConnection | 13 - TelepathyQt4/PendingStreamedMediaStreams | 13 - TelepathyQt4/PendingStringList | 13 - TelepathyQt4/PendingSuccess | 13 - TelepathyQt4/PendingVariant | 13 - TelepathyQt4/PendingVariantMap | 13 - TelepathyQt4/PendingVoid | 13 - TelepathyQt4/Presence | 13 - TelepathyQt4/PresenceSpec | 13 - TelepathyQt4/PresenceSpecList | 13 - TelepathyQt4/Profile | 13 - TelepathyQt4/ProfileManager | 13 - TelepathyQt4/Properties | 13 - TelepathyQt4/PropertiesInterface | 13 - TelepathyQt4/PropertiesInterfaceInterface | 13 - TelepathyQt4/ProtocolInfo | 13 - TelepathyQt4/ProtocolParameter | 13 - TelepathyQt4/ReadinessHelper | 13 - TelepathyQt4/ReadyObject | 13 - TelepathyQt4/ReceivedMessage | 13 - TelepathyQt4/RefCounted | 13 - TelepathyQt4/ReferencedHandles | 12 - TelepathyQt4/ReferencedHandlesIterator | 6 - TelepathyQt4/RequestableChannelClassSpec | 13 - TelepathyQt4/RequestableChannelClassSpecList | 13 - TelepathyQt4/RoomListChannel | 13 - TelepathyQt4/SharedPtr | 13 - TelepathyQt4/SimpleCallObserver | 13 - TelepathyQt4/SimpleObserver | 13 - TelepathyQt4/SimpleTextObserver | 13 - TelepathyQt4/StatefulDBusProxy | 13 - TelepathyQt4/StatelessDBusProxy | 13 - TelepathyQt4/StreamTubeChannel | 13 - TelepathyQt4/StreamTubeClient | 13 - TelepathyQt4/StreamTubeServer | 13 - TelepathyQt4/StreamedMediaChannel | 13 - TelepathyQt4/StreamedMediaStream | 13 - TelepathyQt4/TelepathyQt4-uninstalled.pc.in | 11 - TelepathyQt4/TelepathyQt4.pc.in | 11 - .../TelepathyQt4Farsight-uninstalled.pc.in | 11 - TelepathyQt4/TelepathyQt4Farsight.pc.in | 11 - TelepathyQt4/TextChannel | 13 - TelepathyQt4/TubeChannel | 13 - TelepathyQt4/Types | 13 - TelepathyQt4/Utils | 13 - TelepathyQt4/abstract-client.cpp | 988 ----- TelepathyQt4/abstract-client.h | 323 -- TelepathyQt4/abstract-interface.cpp | 136 - TelepathyQt4/abstract-interface.h | 76 - TelepathyQt4/account-capability-filter.dox | 30 - TelepathyQt4/account-capability-filter.h | 39 - TelepathyQt4/account-factory.cpp | 157 - TelepathyQt4/account-factory.h | 79 - TelepathyQt4/account-filter.h | 39 - TelepathyQt4/account-manager.cpp | 1115 ----- TelepathyQt4/account-manager.h | 152 - TelepathyQt4/account-manager.xml | 9 - TelepathyQt4/account-property-filter.cpp | 94 - TelepathyQt4/account-property-filter.h | 59 - TelepathyQt4/account-set-internal.h | 82 - TelepathyQt4/account-set.cpp | 418 -- TelepathyQt4/account-set.h | 79 - TelepathyQt4/account.cpp | 4472 -------------------- TelepathyQt4/account.h | 598 --- TelepathyQt4/account.xml | 13 - TelepathyQt4/and-filter.dox | 33 - TelepathyQt4/and-filter.h | 83 - TelepathyQt4/async-model.dox | 56 - TelepathyQt4/avatar.cpp | 172 - TelepathyQt4/avatar.h | 86 - TelepathyQt4/capabilities-base.cpp | 348 -- TelepathyQt4/capabilities-base.h | 85 - TelepathyQt4/channel-class-features.h | 45 - TelepathyQt4/channel-class-spec.cpp | 555 --- TelepathyQt4/channel-class-spec.h | 277 -- TelepathyQt4/channel-dispatch-operation-internal.h | 51 - TelepathyQt4/channel-dispatch-operation.cpp | 623 --- TelepathyQt4/channel-dispatch-operation.h | 114 - TelepathyQt4/channel-dispatch-operation.xml | 9 - TelepathyQt4/channel-dispatcher.cpp | 26 - TelepathyQt4/channel-dispatcher.h | 32 - TelepathyQt4/channel-dispatcher.xml | 9 - TelepathyQt4/channel-factory.cpp | 529 --- TelepathyQt4/channel-factory.h | 305 -- TelepathyQt4/channel-internal.h | 50 - TelepathyQt4/channel-request.cpp | 803 ---- TelepathyQt4/channel-request.h | 154 - TelepathyQt4/channel-request.xml | 9 - TelepathyQt4/channel.cpp | 3596 ---------------- TelepathyQt4/channel.h | 256 -- TelepathyQt4/channel.xml | 37 - TelepathyQt4/client-registrar-internal.h | 365 -- TelepathyQt4/client-registrar.cpp | 1038 ----- TelepathyQt4/client-registrar.h | 97 - TelepathyQt4/client.cpp | 26 - TelepathyQt4/client.h | 32 - TelepathyQt4/client.xml | 14 - TelepathyQt4/connection-capabilities.cpp | 303 -- TelepathyQt4/connection-capabilities.h | 77 - TelepathyQt4/connection-factory.cpp | 150 - TelepathyQt4/connection-factory.h | 78 - TelepathyQt4/connection-internal.h | 61 - TelepathyQt4/connection-lowlevel.h | 96 - TelepathyQt4/connection-manager-internal.h | 159 - TelepathyQt4/connection-manager-lowlevel.h | 64 - TelepathyQt4/connection-manager.cpp | 1076 ----- TelepathyQt4/connection-manager.h | 125 - TelepathyQt4/connection-manager.xml | 12 - TelepathyQt4/connection.cpp | 2578 ----------- TelepathyQt4/connection.h | 249 -- TelepathyQt4/connection.xml | 30 - TelepathyQt4/constants.h | 178 - TelepathyQt4/contact-capabilities.cpp | 127 - TelepathyQt4/contact-capabilities.h | 66 - TelepathyQt4/contact-factory.cpp | 146 - TelepathyQt4/contact-factory.h | 76 - TelepathyQt4/contact-manager-internal.h | 389 -- TelepathyQt4/contact-manager-roster.cpp | 2217 ---------- TelepathyQt4/contact-manager.cpp | 1592 ------- TelepathyQt4/contact-manager.h | 201 - TelepathyQt4/contact-messenger.cpp | 257 -- TelepathyQt4/contact-messenger.h | 78 - TelepathyQt4/contact-search-channel-internal.h | 52 - TelepathyQt4/contact-search-channel.cpp | 676 --- TelepathyQt4/contact-search-channel.h | 114 - TelepathyQt4/contact.cpp | 1352 ------ TelepathyQt4/contact.h | 246 -- TelepathyQt4/dbus-daemon.xml | 80 - TelepathyQt4/dbus-introspectable.xml | 16 - TelepathyQt4/dbus-peer.xml | 19 - TelepathyQt4/dbus-properties.xml | 29 - TelepathyQt4/dbus-proxy-factory-internal.h | 58 - TelepathyQt4/dbus-proxy-factory.cpp | 295 -- TelepathyQt4/dbus-proxy-factory.h | 85 - TelepathyQt4/dbus-proxy.cpp | 393 -- TelepathyQt4/dbus-proxy.h | 122 - TelepathyQt4/dbus.cpp | 26 - TelepathyQt4/dbus.h | 54 - TelepathyQt4/dbus.xml | 12 - TelepathyQt4/debug-internal.h | 170 - TelepathyQt4/debug.cpp | 187 - TelepathyQt4/debug.h | 46 - TelepathyQt4/examples.dox | 154 - TelepathyQt4/fake-handler-manager-internal.cpp | 165 - TelepathyQt4/fake-handler-manager-internal.h | 90 - TelepathyQt4/feature.cpp | 89 - TelepathyQt4/feature.h | 94 - .../file-transfer-channel-creation-properties.cpp | 433 -- .../file-transfer-channel-creation-properties.h | 96 - TelepathyQt4/file-transfer-channel.cpp | 703 --- TelepathyQt4/file-transfer-channel.h | 108 - TelepathyQt4/filter.dox | 30 - TelepathyQt4/filter.h | 63 - TelepathyQt4/fixed-feature-factory.cpp | 116 - TelepathyQt4/fixed-feature-factory.h | 69 - TelepathyQt4/future-channel-dispatcher.xml | 20 - TelepathyQt4/future-channel.xml | 13 - TelepathyQt4/future-interfaces.xml | 14 - TelepathyQt4/future-internal.h | 36 - TelepathyQt4/future-misc.xml | 7 - TelepathyQt4/future.cpp | 32 - TelepathyQt4/generic-capability-filter.dox | 36 - TelepathyQt4/generic-capability-filter.h | 114 - TelepathyQt4/generic-property-filter.dox | 33 - TelepathyQt4/generic-property-filter.h | 77 - TelepathyQt4/global.h | 103 - TelepathyQt4/groups.dox | 115 - TelepathyQt4/handled-channel-notifier.cpp | 103 - TelepathyQt4/handled-channel-notifier.h | 75 - TelepathyQt4/incoming-file-transfer-channel.cpp | 390 -- TelepathyQt4/incoming-file-transfer-channel.h | 81 - TelepathyQt4/incoming-stream-tube-channel.cpp | 435 -- TelepathyQt4/incoming-stream-tube-channel.h | 80 - TelepathyQt4/key-file.cpp | 582 --- TelepathyQt4/key-file.h | 91 - TelepathyQt4/location-info.cpp | 221 - TelepathyQt4/location-info.h | 95 - TelepathyQt4/main.dox | 133 - TelepathyQt4/manager-file.cpp | 618 --- TelepathyQt4/manager-file.h | 78 - TelepathyQt4/media-session-handler.cpp | 26 - TelepathyQt4/media-session-handler.h | 50 - TelepathyQt4/media-session-handler.xml | 9 - TelepathyQt4/media-stream-handler.cpp | 26 - TelepathyQt4/media-stream-handler.h | 50 - TelepathyQt4/media-stream-handler.xml | 9 - TelepathyQt4/message-content-part.cpp | 96 - TelepathyQt4/message-content-part.h | 96 - TelepathyQt4/message.cpp | 911 ---- TelepathyQt4/message.h | 173 - TelepathyQt4/method-invocation-context.dox | 41 - TelepathyQt4/method-invocation-context.h | 192 - TelepathyQt4/not-filter.dox | 32 - TelepathyQt4/not-filter.h | 73 - TelepathyQt4/object.cpp | 65 - TelepathyQt4/object.h | 63 - TelepathyQt4/optional-interface-factory.cpp | 178 - TelepathyQt4/optional-interface-factory.h | 140 - TelepathyQt4/or-filter.dox | 33 - TelepathyQt4/or-filter.h | 83 - TelepathyQt4/outgoing-file-transfer-channel.cpp | 371 -- TelepathyQt4/outgoing-file-transfer-channel.h | 78 - .../outgoing-stream-tube-channel-internal.h | 122 - TelepathyQt4/outgoing-stream-tube-channel.cpp | 821 ---- TelepathyQt4/outgoing-stream-tube-channel.h | 89 - TelepathyQt4/pending-account.cpp | 184 - TelepathyQt4/pending-account.h | 75 - TelepathyQt4/pending-channel-request-internal.h | 73 - TelepathyQt4/pending-channel-request.cpp | 276 -- TelepathyQt4/pending-channel-request.h | 84 - TelepathyQt4/pending-channel.cpp | 555 --- TelepathyQt4/pending-channel.h | 103 - TelepathyQt4/pending-connection.cpp | 171 - TelepathyQt4/pending-connection.h | 73 - TelepathyQt4/pending-contact-attributes.cpp | 219 - TelepathyQt4/pending-contact-attributes.h | 77 - TelepathyQt4/pending-contact-info.cpp | 128 - TelepathyQt4/pending-contact-info.h | 66 - TelepathyQt4/pending-contacts.cpp | 468 -- TelepathyQt4/pending-contacts.h | 108 - TelepathyQt4/pending-handles.cpp | 490 --- TelepathyQt4/pending-handles.h | 96 - TelepathyQt4/pending-operation.cpp | 424 -- TelepathyQt4/pending-operation.h | 89 - TelepathyQt4/pending-ready.cpp | 148 - TelepathyQt4/pending-ready.h | 71 - TelepathyQt4/pending-send-message.cpp | 153 - TelepathyQt4/pending-send-message.h | 77 - TelepathyQt4/pending-stream-tube-connection.cpp | 272 -- TelepathyQt4/pending-stream-tube-connection.h | 81 - TelepathyQt4/pending-string-list.cpp | 100 - TelepathyQt4/pending-string-list.h | 63 - TelepathyQt4/pending-variant-map.cpp | 91 - TelepathyQt4/pending-variant-map.h | 60 - TelepathyQt4/pending-variant.cpp | 91 - TelepathyQt4/pending-variant.h | 60 - TelepathyQt4/presence.cpp | 335 -- TelepathyQt4/presence.h | 135 - TelepathyQt4/profile-manager.cpp | 332 -- TelepathyQt4/profile-manager.h | 75 - TelepathyQt4/profile.cpp | 1216 ------ TelepathyQt4/profile.h | 176 - TelepathyQt4/properties.cpp | 26 - TelepathyQt4/properties.h | 51 - TelepathyQt4/properties.xml | 9 - TelepathyQt4/protocol-info.cpp | 374 -- TelepathyQt4/protocol-info.h | 102 - TelepathyQt4/protocol-parameter.cpp | 176 - TelepathyQt4/protocol-parameter.h | 87 - TelepathyQt4/readiness-helper.cpp | 684 --- TelepathyQt4/readiness-helper.h | 130 - TelepathyQt4/ready-object.cpp | 161 - TelepathyQt4/ready-object.h | 69 - TelepathyQt4/referenced-handles.cpp | 333 -- TelepathyQt4/referenced-handles.h | 264 -- .../request-temporary-handler-internal.cpp | 135 - TelepathyQt4/request-temporary-handler-internal.h | 91 - TelepathyQt4/requestable-channel-class-spec.cpp | 494 --- TelepathyQt4/requestable-channel-class-spec.h | 134 - TelepathyQt4/room-list-channel.cpp | 106 - TelepathyQt4/room-list-channel.h | 59 - TelepathyQt4/shared-ptr.dox | 111 - TelepathyQt4/shared-ptr.h | 152 - TelepathyQt4/simple-call-observer.cpp | 298 -- TelepathyQt4/simple-call-observer.h | 95 - TelepathyQt4/simple-observer-internal.h | 261 -- TelepathyQt4/simple-observer.cpp | 643 --- TelepathyQt4/simple-observer.h | 105 - TelepathyQt4/simple-pending-operations.h | 110 - TelepathyQt4/simple-stream-tube-handler.cpp | 254 -- TelepathyQt4/simple-stream-tube-handler.h | 120 - TelepathyQt4/simple-text-observer-internal.h | 70 - TelepathyQt4/simple-text-observer.cpp | 298 -- TelepathyQt4/simple-text-observer.h | 80 - TelepathyQt4/stable-interfaces.xml | 26 - TelepathyQt4/stream-tube-channel.cpp | 740 ---- TelepathyQt4/stream-tube-channel.h | 108 - TelepathyQt4/stream-tube-client-internal.h | 61 - TelepathyQt4/stream-tube-client.cpp | 1048 ----- TelepathyQt4/stream-tube-client.h | 217 - TelepathyQt4/stream-tube-server-internal.h | 56 - TelepathyQt4/stream-tube-server.cpp | 1134 ----- TelepathyQt4/stream-tube-server.h | 253 -- TelepathyQt4/streamed-media-channel.cpp | 1539 ------- TelepathyQt4/streamed-media-channel.h | 228 - TelepathyQt4/test-backdoors.cpp | 50 - TelepathyQt4/test-backdoors.h | 59 - TelepathyQt4/text-channel.cpp | 1277 ------ TelepathyQt4/text-channel.h | 139 - TelepathyQt4/tls-certificate.cpp | 26 - TelepathyQt4/tls-certificate.h | 31 - TelepathyQt4/tls-certificate.xml | 9 - TelepathyQt4/tube-channel.cpp | 281 -- TelepathyQt4/tube-channel.h | 80 - TelepathyQt4/types-internal.h | 156 - TelepathyQt4/types.cpp | 73 - TelepathyQt4/types.h | 171 - TelepathyQt4/utils.cpp | 120 - TelepathyQt4/utils.h | 41 - cmake/modules/TelepathyDist.cmake | 20 +- cmake/modules/TpQt4Macros.cmake | 24 +- doxygen.cfg.in | 6 +- examples/accounts/account-item.cpp | 6 +- examples/accounts/account-item.h | 12 +- examples/accounts/accounts-window.cpp | 14 +- examples/accounts/accounts-window.h | 8 +- examples/accounts/main.cpp | 6 +- examples/contact-messenger/sender.cpp | 14 +- examples/contact-messenger/sender.h | 8 +- examples/extensions/CMakeLists.txt | 8 +- examples/file-transfer/file-receiver-handler.cpp | 16 +- examples/file-transfer/file-receiver-handler.h | 14 +- examples/file-transfer/file-receiver.cpp | 18 +- examples/file-transfer/file-receiver.h | 10 +- examples/file-transfer/file-sender.cpp | 42 +- examples/file-transfer/file-sender.h | 10 +- examples/file-transfer/pending-file-receive.cpp | 8 +- examples/file-transfer/pending-file-receive.h | 12 +- examples/file-transfer/pending-file-send.cpp | 8 +- examples/file-transfer/pending-file-send.h | 12 +- examples/file-transfer/pending-file-transfer.cpp | 8 +- examples/file-transfer/pending-file-transfer.h | 12 +- examples/protocols/cm-wrapper.cpp | 8 +- examples/protocols/cm-wrapper.h | 8 +- examples/protocols/main.cpp | 6 +- examples/protocols/protocols.cpp | 8 +- examples/protocols/protocols.h | 8 +- examples/roster/main.cpp | 6 +- examples/roster/roster-item.cpp | 4 +- examples/roster/roster-item.h | 10 +- examples/roster/roster-widget.cpp | 16 +- examples/roster/roster-widget.h | 10 +- examples/roster/roster-window.cpp | 16 +- examples/roster/roster-window.h | 10 +- examples/stream-tubes/tube-initiator.cpp | 42 +- examples/stream-tubes/tube-initiator.h | 12 +- examples/stream-tubes/tube-receiver.cpp | 8 +- examples/stream-tubes/tube-receiver.h | 8 +- tests/capabilities.cpp | 16 +- tests/channel-class-spec.cpp | 8 +- tests/dbus/account-basics.cpp | 20 +- tests/dbus/account-channel-dispatcher.cpp | 28 +- tests/dbus/account-connection-factory.cpp | 12 +- tests/dbus/account-set.cpp | 24 +- tests/dbus/chan-basics.cpp | 20 +- tests/dbus/chan-conference.cpp | 4 +- tests/dbus/chan-group.cpp | 14 +- tests/dbus/client-factories.cpp | 66 +- tests/dbus/client.cpp | 34 +- tests/dbus/cm-basics.cpp | 10 +- tests/dbus/conn-basics.cpp | 14 +- tests/dbus/conn-capabilities.cpp | 4 +- tests/dbus/conn-introspect-cornercases.cpp | 14 +- tests/dbus/conn-requests.cpp | 12 +- tests/dbus/conn-roster-groups-legacy.cpp | 18 +- tests/dbus/conn-roster-groups.cpp | 18 +- tests/dbus/conn-roster-legacy.cpp | 8 +- tests/dbus/conn-roster.cpp | 12 +- tests/dbus/contact-factory.cpp | 6 +- tests/dbus/contact-messenger.cpp | 32 +- tests/dbus/contact-search-chan.cpp | 6 +- tests/dbus/contacts-avatar.cpp | 10 +- tests/dbus/contacts-capabilities.cpp | 10 +- tests/dbus/contacts-info.cpp | 10 +- tests/dbus/contacts-location.cpp | 10 +- tests/dbus/contacts.cpp | 26 +- tests/dbus/dbus-properties.cpp | 14 +- tests/dbus/dbus-proxy-factory.cpp | 18 +- tests/dbus/handles.cpp | 8 +- tests/dbus/profile-manager.cpp | 4 +- tests/dbus/simple-observer.cpp | 24 +- tests/dbus/stateful-proxy.cpp | 12 +- tests/dbus/stream-tube-chan.cpp | 14 +- tests/dbus/stream-tube-handlers.cpp | 30 +- tests/dbus/streamed-media-chan.cpp | 14 +- tests/dbus/text-chan.cpp | 10 +- tests/dbus/types.cpp | 6 +- tests/features.cpp | 8 +- .../file-transfer-channel-creation-properties.cpp | 2 +- tests/key-file.cpp | 2 +- tests/lib/glib-helpers/test-conn-helper.cpp | 16 +- tests/lib/glib-helpers/test-conn-helper.h | 12 +- tests/lib/test.cpp | 12 +- tests/lib/test.h | 12 +- tests/manager-file.cpp | 6 +- tests/presence.cpp | 8 +- tests/profile.cpp | 4 +- tests/ptr.cpp | 2 +- tests/rccspec.cpp | 2 +- tests/utils.cpp | 2 +- tools/CMakeLists.txt | 4 +- tools/qt4-client-gen.py | 6 +- tools/qt4-types-gen.py | 2 +- 1014 files changed, 68333 insertions(+), 68333 deletions(-) commit aafde57c570a56bb98df4103a4ee38ed25b91897 Author: Jeremy Whiting Date: Thu Nov 10 15:03:02 2011 -0700 Rename TPQT4 cmake macros to TPQT. CMakeLists.txt | 2 +- TelepathyQt4/CMakeLists.txt | 52 +++++----- TelepathyQt4/dbus-proxy.cpp | 2 +- cmake/modules/TpQt4Macros.cmake | 156 ++++++++++++++--------------- examples/accounts/CMakeLists.txt | 2 +- examples/contact-messenger/CMakeLists.txt | 2 +- examples/extensions/CMakeLists.txt | 10 +- examples/file-transfer/CMakeLists.txt | 4 +- examples/protocols/CMakeLists.txt | 2 +- examples/roster/CMakeLists.txt | 2 +- examples/stream-tubes/CMakeLists.txt | 4 +- tests/CMakeLists.txt | 20 ++-- tests/dbus/CMakeLists.txt | 76 +++++++------- tests/dbus/conn-basics.cpp | 6 +- tests/lib/CMakeLists.txt | 2 +- tests/lib/glib-helpers/CMakeLists.txt | 2 +- tests/lib/glib/callable/CMakeLists.txt | 2 +- tests/lib/glib/contactlist/CMakeLists.txt | 2 +- tests/lib/glib/csh/CMakeLists.txt | 2 +- tests/lib/glib/echo/CMakeLists.txt | 2 +- tests/lib/glib/echo2/CMakeLists.txt | 2 +- 21 files changed, 177 insertions(+), 177 deletions(-) commit c852994b80c35a173d1409adf23381aa7fb022b8 Author: Jeremy Whiting Date: Thu Nov 10 14:20:05 2011 -0700 Rename TELEPATHY_QT4_DEPRECATED to TP_QT_DEPRECATED. TelepathyQt4/ConnectionInterfaceClientTypes | 2 +- TelepathyQt4/ConnectionInterfaceContactGroups | 2 +- TelepathyQt4/ConnectionInterfaceContactList | 2 +- TelepathyQt4/ConnectionInterfacePowerSaving | 2 +- TelepathyQt4/account.h | 4 +-- TelepathyQt4/connection-capabilities.h | 6 ++--- TelepathyQt4/contact-manager.h | 4 +-- TelepathyQt4/contact.h | 2 +- TelepathyQt4/global.h | 36 ++++++++++++------------- TelepathyQt4/pending-operation.h | 2 +- TelepathyQt4/profile.h | 2 +- TelepathyQt4/stream-tube-channel.h | 4 +-- TelepathyQt4/tube-channel.h | 2 +- cmake/modules/TelepathyDefaults.cmake | 2 +- 14 files changed, 36 insertions(+), 36 deletions(-) commit 62af6daa073e0f10159d1dcc367574d305f9572f Author: Jeremy Whiting Date: Thu Nov 10 13:55:29 2011 -0700 Rename TP_QT4 cmake variables to TP_QT. CMakeLists.txt | 38 ++++++++++++++++----------------- TelepathyQt4/CMakeLists.txt | 4 ++-- TelepathyQt4/Farsight/CMakeLists.txt | 4 ++-- TelepathyQt4/channel-class-spec.h | 2 +- cmake/modules/TelepathyDefaults.cmake | 6 +++--- cmake/modules/TelepathyDist.cmake | 6 +++--- 6 files changed, 30 insertions(+), 30 deletions(-) commit 0559c647435962437048e13f11fd60932e5c5602 Author: Jeremy Whiting Date: Thu Nov 10 13:49:17 2011 -0700 Rename TELEPATHY_QT4_FS_NO_EXPORT to TP_QT_FS_NO_EXPORT. TelepathyQt4/Farsight/global.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit a7f2bf48b2052cb047acb2a53d5f7d77a194517d Author: Jeremy Whiting Date: Thu Nov 10 13:47:06 2011 -0700 Rename TELEPATHY_QT4_FS_EXPORT to TP_QT_FS_EXPORT. TelepathyQt4/Farsight/channel.h | 2 +- TelepathyQt4/Farsight/global.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) commit cd88a442d0335bbbed8d0e5fa11052ae8cd04cbb Author: Jeremy Whiting Date: Wed Nov 9 17:22:33 2011 -0700 Rename TP_QT4_ENABLE_LOWLEVEL_API to TP_QT_ENABLE_LOWLEVEL_API. TelepathyQt4/connection-manager.h | 2 +- TelepathyQt4/connection.h | 2 +- tests/dbus/account-channel-dispatcher.cpp | 2 +- tests/dbus/chan-basics.cpp | 2 +- tests/dbus/client-factories.cpp | 2 +- tests/dbus/client.cpp | 2 +- tests/dbus/conn-basics.cpp | 2 +- tests/dbus/conn-introspect-cornercases.cpp | 2 +- tests/dbus/conn-requests.cpp | 2 +- tests/dbus/conn-roster-groups-legacy.cpp | 2 +- tests/dbus/conn-roster-groups.cpp | 4 ++-- tests/dbus/contact-messenger.cpp | 2 +- tests/dbus/contacts.cpp | 2 +- tests/dbus/handles.cpp | 2 +- tests/dbus/simple-observer.cpp | 2 +- tests/dbus/streamed-media-chan.cpp | 2 +- tests/lib/glib-helpers/test-conn-helper.cpp | 2 +- 17 files changed, 18 insertions(+), 18 deletions(-) commit 9812689163867968f1a6ec95dfa788592a609917 Author: Jeremy Whiting Date: Tue Nov 8 17:56:01 2011 -0700 Rename TP_QT4 to TP_QT in generated constants.h. TelepathyQt4/CMakeLists.txt | 4 +- TelepathyQt4/abstract-client.cpp | 8 +- TelepathyQt4/abstract-client.h | 36 +++--- TelepathyQt4/abstract-interface.cpp | 6 +- TelepathyQt4/account.cpp | 22 ++-- TelepathyQt4/capabilities-base.cpp | 4 +- TelepathyQt4/channel-class-spec.cpp | 4 +- TelepathyQt4/channel-dispatch-operation.cpp | 2 +- TelepathyQt4/channel-request.cpp | 2 +- TelepathyQt4/channel.cpp | 16 +-- TelepathyQt4/connection-manager.cpp | 18 +-- TelepathyQt4/connection.cpp | 26 ++-- TelepathyQt4/contact-capabilities.cpp | 6 +- TelepathyQt4/contact-manager-roster.cpp | 22 ++-- TelepathyQt4/contact-manager.cpp | 22 ++-- TelepathyQt4/contact-search-channel.cpp | 2 +- TelepathyQt4/contact.cpp | 12 +- TelepathyQt4/message.cpp | 12 +- TelepathyQt4/outgoing-stream-tube-channel.cpp | 4 +- TelepathyQt4/pending-channel.cpp | 10 +- TelepathyQt4/pending-send-message.cpp | 2 +- TelepathyQt4/readiness-helper.cpp | 2 +- .../request-temporary-handler-internal.cpp | 6 +- TelepathyQt4/requestable-channel-class-spec.cpp | 128 ++++++++++---------- TelepathyQt4/simple-call-observer.cpp | 4 +- TelepathyQt4/simple-observer.cpp | 2 +- TelepathyQt4/simple-stream-tube-handler.cpp | 4 +- TelepathyQt4/simple-text-observer.cpp | 2 +- TelepathyQt4/stream-tube-server.cpp | 2 +- TelepathyQt4/streamed-media-channel.cpp | 20 +-- examples/file-transfer/file-receiver-handler.cpp | 4 +- examples/file-transfer/file-sender.cpp | 2 +- examples/file-transfer/pending-file-send.cpp | 2 +- tests/channel-class-spec.cpp | 18 +-- tests/dbus/account-channel-dispatcher.cpp | 12 +- tests/dbus/chan-basics.cpp | 14 +-- tests/dbus/chan-conference.cpp | 2 +- tests/dbus/chan-group.cpp | 12 +- tests/dbus/client.cpp | 2 +- tests/dbus/contact-messenger.cpp | 8 +- tests/dbus/simple-observer.cpp | 8 +- tests/dbus/stream-tube-handlers.cpp | 42 +++---- tests/dbus/streamed-media-chan.cpp | 18 +-- tests/dbus/text-chan.cpp | 4 +- tests/rccspec.cpp | 72 +++++------ 45 files changed, 315 insertions(+), 315 deletions(-) commit 74156c9b06b396cd4d3a0ca90d53970108824bd0 Author: Jeremy Whiting Date: Tue Nov 8 17:06:41 2011 -0700 Rename error code macros in constants.h. TelepathyQt4/account.cpp | 4 ++-- TelepathyQt4/channel-dispatch-operation.cpp | 10 +++++----- TelepathyQt4/channel.cpp | 2 +- TelepathyQt4/constants.h | 22 +++------------------- TelepathyQt4/incoming-file-transfer-channel.cpp | 2 +- TelepathyQt4/stream-tube-channel.cpp | 2 +- TelepathyQt4/stream-tube-client.cpp | 2 +- tests/dbus/account-set.cpp | 2 +- tests/dbus/chan-basics.cpp | 2 +- tests/dbus/stream-tube-handlers.cpp | 4 ++-- 10 files changed, 18 insertions(+), 34 deletions(-) commit 77452b30a34d3c5b95cbdf07cf732ca5689b76e4 Author: Jeremy Whiting Date: Tue Nov 8 13:39:32 2011 -0700 Rename TELEPATHY_DBUS macros to TP_QT_DBUS. TelepathyQt4/channel-dispatch-operation.cpp | 2 +- TelepathyQt4/constants.h | 40 ++------------------------- TelepathyQt4/dbus-proxy.cpp | 2 +- TelepathyQt4/pending-channel-request.cpp | 2 +- TelepathyQt4/pending-send-message.cpp | 4 +-- tests/dbus/contact-messenger.cpp | 2 +- tests/dbus/stateful-proxy.cpp | 4 +-- 7 files changed, 11 insertions(+), 45 deletions(-) commit 9dc4619bd80470bcd29dea8c39c1f04e1d23b4b6 Author: Jeremy Whiting Date: Tue Nov 8 12:13:37 2011 -0700 Rename TELEPATHY_ACCOUNT macros to TP_QT_ACCOUNT. TelepathyQt4/account.cpp | 8 ++++---- TelepathyQt4/constants.h | 12 +----------- examples/file-transfer/file-sender.cpp | 2 +- examples/roster/roster-window.cpp | 2 +- examples/stream-tubes/tube-initiator.cpp | 2 +- 5 files changed, 8 insertions(+), 18 deletions(-) commit 62a30fa64ceeed04214b9331af0524cdb6c9a347 Author: Jeremy Whiting Date: Mon Nov 7 21:25:36 2011 -0700 Rename TELEPATHY_CHANNEL_DISPATCHER to TP_QT_CHANNEL_DISPATCHER. TelepathyQt4/account.cpp | 2 +- TelepathyQt4/constants.h | 16 ++-------------- TelepathyQt4/contact-messenger.cpp | 2 +- tests/dbus/stream-tube-handlers.cpp | 2 +- 4 files changed, 5 insertions(+), 17 deletions(-) commit 6b36aef52852f7459ec251814589b84a9820aacc Author: Jeremy Whiting Date: Mon Nov 7 21:08:45 2011 -0700 Rename TELEPATHY_ACCOUNT_MANAGER macros to TP_QT_ACCOUNT_MANAGER. TelepathyQt4/account-factory.cpp | 4 ++-- TelepathyQt4/account-manager.cpp | 4 ++-- TelepathyQt4/account.cpp | 6 +++--- TelepathyQt4/channel-dispatch-operation.cpp | 2 +- TelepathyQt4/channel-request.cpp | 4 ++-- TelepathyQt4/client-registrar.cpp | 4 ++-- TelepathyQt4/constants.h | 20 ++------------------ examples/contact-messenger/sender.cpp | 2 +- examples/roster/roster-window.cpp | 2 +- examples/stream-tubes/tube-initiator.cpp | 2 +- 10 files changed, 17 insertions(+), 33 deletions(-) commit 109433454ee116f26b124c15dccfe91f2c76240c Author: Jeremy Whiting Date: Mon Nov 7 20:44:44 2011 -0700 Rename TELEPATHY_CONNECTION macros to TP_QT_CONNECTION. TelepathyQt4/connection.cpp | 4 ++-- TelepathyQt4/constants.h | 11 ++--------- 2 files changed, 4 insertions(+), 11 deletions(-) commit e9fb6c25b5ede7e6af3136de27ffbd347c4561fe Author: Jeremy Whiting Date: Mon Nov 7 20:26:29 2011 -0700 Rename TELEPATHY_CONNECTION_MANAGER to TP_QT_CONNECTION_MANAGER. TelepathyQt4/connection-manager.cpp | 6 ++---- TelepathyQt4/constants.h | 16 ++-------------- 2 files changed, 4 insertions(+), 18 deletions(-) commit eca5a43c556509cb4cefdeb50783fb0f0f54129c Author: Jeremy Whiting Date: Mon Nov 7 17:07:33 2011 -0700 Rename TELEPATHY_QT4_NO_EXPORT to TP_QT_NO_EXPORT. TelepathyQt4/abstract-client.cpp | 12 ++-- TelepathyQt4/abstract-interface.cpp | 2 +- TelepathyQt4/account-manager.cpp | 2 +- TelepathyQt4/account-manager.h | 10 ++-- TelepathyQt4/account-property-filter.cpp | 2 +- TelepathyQt4/account-set-internal.h | 10 ++-- TelepathyQt4/account-set.h | 6 +- TelepathyQt4/account.cpp | 2 +- TelepathyQt4/account.h | 18 +++--- TelepathyQt4/avatar.cpp | 2 +- TelepathyQt4/capabilities-base.cpp | 2 +- TelepathyQt4/channel-class-spec.cpp | 4 +- TelepathyQt4/channel-dispatch-operation-internal.h | 4 +- TelepathyQt4/channel-dispatch-operation.cpp | 2 +- TelepathyQt4/channel-dispatch-operation.h | 8 +-- TelepathyQt4/channel-factory.cpp | 2 +- TelepathyQt4/channel-internal.h | 10 ++-- TelepathyQt4/channel-request.cpp | 4 +- TelepathyQt4/channel-request.h | 10 ++-- TelepathyQt4/channel.cpp | 8 +-- TelepathyQt4/channel.h | 58 ++++++++++---------- TelepathyQt4/client-registrar-internal.h | 10 ++-- TelepathyQt4/client-registrar.cpp | 2 +- TelepathyQt4/connection-internal.h | 10 ++-- TelepathyQt4/connection-lowlevel.h | 8 +-- TelepathyQt4/connection-manager-internal.h | 8 +-- TelepathyQt4/connection-manager-lowlevel.h | 2 +- TelepathyQt4/connection-manager.h | 8 +-- TelepathyQt4/connection.cpp | 8 +-- TelepathyQt4/connection.h | 40 +++++++------- TelepathyQt4/contact-factory.cpp | 2 +- TelepathyQt4/contact-manager-internal.h | 18 +++--- TelepathyQt4/contact-manager.cpp | 2 +- TelepathyQt4/contact-manager.h | 36 ++++++------ TelepathyQt4/contact-messenger.cpp | 2 +- TelepathyQt4/contact-messenger.h | 2 +- TelepathyQt4/contact-search-channel-internal.h | 6 +- TelepathyQt4/contact-search-channel.cpp | 4 +- TelepathyQt4/contact-search-channel.h | 12 ++-- TelepathyQt4/contact.cpp | 4 +- TelepathyQt4/contact.h | 32 +++++------ TelepathyQt4/dbus-proxy-factory-internal.h | 2 +- TelepathyQt4/dbus-proxy-factory.cpp | 2 +- TelepathyQt4/dbus-proxy.cpp | 4 +- TelepathyQt4/dbus-proxy.h | 4 +- TelepathyQt4/feature.cpp | 2 +- .../file-transfer-channel-creation-properties.cpp | 2 +- TelepathyQt4/file-transfer-channel.cpp | 2 +- TelepathyQt4/file-transfer-channel.h | 12 ++-- TelepathyQt4/fixed-feature-factory.cpp | 2 +- TelepathyQt4/global.h | 6 +- TelepathyQt4/handled-channel-notifier.cpp | 2 +- TelepathyQt4/handled-channel-notifier.h | 4 +- TelepathyQt4/incoming-file-transfer-channel.cpp | 4 +- TelepathyQt4/incoming-file-transfer-channel.h | 14 ++--- TelepathyQt4/incoming-stream-tube-channel.cpp | 2 +- TelepathyQt4/incoming-stream-tube-channel.h | 2 +- TelepathyQt4/key-file.cpp | 2 +- TelepathyQt4/location-info.cpp | 2 +- TelepathyQt4/location-info.h | 2 +- TelepathyQt4/manager-file.cpp | 2 +- TelepathyQt4/message-content-part.cpp | 2 +- TelepathyQt4/message.cpp | 4 +- TelepathyQt4/message.h | 24 ++++---- TelepathyQt4/optional-interface-factory.cpp | 2 +- TelepathyQt4/outgoing-file-transfer-channel.cpp | 2 +- TelepathyQt4/outgoing-file-transfer-channel.h | 16 +++--- .../outgoing-stream-tube-channel-internal.h | 8 +-- TelepathyQt4/outgoing-stream-tube-channel.h | 6 +- TelepathyQt4/pending-account.cpp | 2 +- TelepathyQt4/pending-account.h | 8 +-- TelepathyQt4/pending-channel-request-internal.h | 2 +- TelepathyQt4/pending-channel-request.cpp | 2 +- TelepathyQt4/pending-channel-request.h | 10 ++-- TelepathyQt4/pending-channel.cpp | 4 +- TelepathyQt4/pending-channel.h | 20 +++---- TelepathyQt4/pending-connection.cpp | 2 +- TelepathyQt4/pending-connection.h | 8 +-- TelepathyQt4/pending-contact-attributes.cpp | 2 +- TelepathyQt4/pending-contact-attributes.h | 6 +- TelepathyQt4/pending-contact-info.cpp | 2 +- TelepathyQt4/pending-contact-info.h | 4 +- TelepathyQt4/pending-contacts.cpp | 2 +- TelepathyQt4/pending-contacts.h | 18 +++--- TelepathyQt4/pending-handles.cpp | 2 +- TelepathyQt4/pending-handles.h | 14 ++--- TelepathyQt4/pending-operation.cpp | 4 +- TelepathyQt4/pending-operation.h | 4 +- TelepathyQt4/pending-ready.cpp | 2 +- TelepathyQt4/pending-ready.h | 6 +- TelepathyQt4/pending-send-message.cpp | 2 +- TelepathyQt4/pending-send-message.h | 10 ++-- TelepathyQt4/pending-stream-tube-connection.cpp | 2 +- TelepathyQt4/pending-stream-tube-connection.h | 10 ++-- TelepathyQt4/pending-string-list.cpp | 2 +- TelepathyQt4/pending-string-list.h | 2 +- TelepathyQt4/pending-variant-map.cpp | 2 +- TelepathyQt4/pending-variant-map.h | 2 +- TelepathyQt4/pending-variant.cpp | 2 +- TelepathyQt4/pending-variant.h | 2 +- TelepathyQt4/presence.cpp | 4 +- TelepathyQt4/profile-manager.cpp | 2 +- TelepathyQt4/profile-manager.h | 4 +- TelepathyQt4/profile.cpp | 8 +-- TelepathyQt4/profile.h | 30 +++++----- TelepathyQt4/protocol-info.cpp | 2 +- TelepathyQt4/protocol-info.h | 18 +++--- TelepathyQt4/protocol-parameter.cpp | 2 +- TelepathyQt4/protocol-parameter.h | 2 +- TelepathyQt4/readiness-helper.cpp | 4 +- TelepathyQt4/readiness-helper.h | 4 +- TelepathyQt4/ready-object.cpp | 2 +- TelepathyQt4/referenced-handles.cpp | 2 +- TelepathyQt4/referenced-handles.h | 2 +- TelepathyQt4/request-temporary-handler-internal.h | 2 +- TelepathyQt4/requestable-channel-class-spec.cpp | 2 +- TelepathyQt4/room-list-channel.cpp | 2 +- TelepathyQt4/simple-call-observer.cpp | 2 +- TelepathyQt4/simple-call-observer.h | 8 +-- TelepathyQt4/simple-observer-internal.h | 12 ++-- TelepathyQt4/simple-observer.h | 14 ++--- TelepathyQt4/simple-pending-operations.h | 4 +- TelepathyQt4/simple-stream-tube-handler.h | 2 +- TelepathyQt4/simple-text-observer-internal.h | 4 +- TelepathyQt4/simple-text-observer.h | 8 +-- TelepathyQt4/stream-tube-channel.cpp | 2 +- TelepathyQt4/stream-tube-channel.h | 6 +- TelepathyQt4/stream-tube-client-internal.h | 2 +- TelepathyQt4/stream-tube-client.cpp | 4 +- TelepathyQt4/stream-tube-client.h | 12 ++-- TelepathyQt4/stream-tube-server-internal.h | 2 +- TelepathyQt4/stream-tube-server.cpp | 8 +-- TelepathyQt4/stream-tube-server.h | 12 ++-- TelepathyQt4/streamed-media-channel.cpp | 6 +- TelepathyQt4/streamed-media-channel.h | 34 ++++++------ TelepathyQt4/text-channel.cpp | 2 +- TelepathyQt4/text-channel.h | 22 ++++---- TelepathyQt4/tube-channel.cpp | 2 +- TelepathyQt4/tube-channel.h | 4 +- cmake/modules/TpQt4Macros.cmake | 2 +- doxygen.cfg.in | 2 +- tools/qt4-types-gen.py | 2 +- 142 files changed, 481 insertions(+), 481 deletions(-) commit e787c4422154da00c9867447c34629896f109785 Author: Jeremy Whiting Date: Mon Nov 7 12:25:22 2011 -0700 Rename TELEPATHY_QT4_EXPORT to TP_QT_EXPORT. HACKING | 4 ++-- TelepathyQt4/CMakeLists.txt | 2 +- TelepathyQt4/abstract-client.h | 8 ++++---- TelepathyQt4/abstract-interface.h | 2 +- TelepathyQt4/account-factory.h | 2 +- TelepathyQt4/account-manager.h | 2 +- TelepathyQt4/account-property-filter.h | 2 +- TelepathyQt4/account-set.h | 2 +- TelepathyQt4/account.h | 2 +- TelepathyQt4/avatar.h | 4 ++-- TelepathyQt4/capabilities-base.h | 2 +- TelepathyQt4/channel-class-spec.h | 4 ++-- TelepathyQt4/channel-dispatch-operation.h | 2 +- TelepathyQt4/channel-factory.h | 4 ++-- TelepathyQt4/channel-request.h | 4 ++-- TelepathyQt4/channel.h | 2 +- TelepathyQt4/client-registrar.h | 2 +- TelepathyQt4/connection-capabilities.h | 2 +- TelepathyQt4/connection-factory.h | 2 +- TelepathyQt4/connection-lowlevel.h | 2 +- TelepathyQt4/connection-manager-lowlevel.h | 2 +- TelepathyQt4/connection-manager.h | 2 +- TelepathyQt4/connection.h | 2 +- TelepathyQt4/contact-capabilities.h | 2 +- TelepathyQt4/contact-factory.h | 2 +- TelepathyQt4/contact-manager.h | 2 +- TelepathyQt4/contact-messenger.h | 2 +- TelepathyQt4/contact-search-channel.h | 2 +- TelepathyQt4/contact.h | 2 +- TelepathyQt4/dbus-proxy-factory.h | 2 +- TelepathyQt4/dbus-proxy.h | 6 +++--- TelepathyQt4/debug-internal.h | 6 +++--- TelepathyQt4/debug.h | 6 +++--- TelepathyQt4/feature.h | 4 ++-- .../file-transfer-channel-creation-properties.h | 2 +- TelepathyQt4/file-transfer-channel.h | 2 +- TelepathyQt4/fixed-feature-factory.h | 2 +- TelepathyQt4/global.h | 4 ++-- TelepathyQt4/handled-channel-notifier.h | 2 +- TelepathyQt4/incoming-file-transfer-channel.h | 2 +- TelepathyQt4/incoming-stream-tube-channel.h | 2 +- TelepathyQt4/key-file.h | 2 +- TelepathyQt4/location-info.h | 2 +- TelepathyQt4/manager-file.h | 2 +- TelepathyQt4/message-content-part.h | 4 ++-- TelepathyQt4/message.h | 4 ++-- TelepathyQt4/object.h | 2 +- TelepathyQt4/optional-interface-factory.h | 2 +- TelepathyQt4/outgoing-file-transfer-channel.h | 2 +- TelepathyQt4/outgoing-stream-tube-channel.h | 2 +- TelepathyQt4/pending-account.h | 2 +- TelepathyQt4/pending-channel-request.h | 2 +- TelepathyQt4/pending-channel.h | 2 +- TelepathyQt4/pending-connection.h | 2 +- TelepathyQt4/pending-contact-attributes.h | 2 +- TelepathyQt4/pending-contact-info.h | 2 +- TelepathyQt4/pending-contacts.h | 2 +- TelepathyQt4/pending-handles.h | 2 +- TelepathyQt4/pending-operation.h | 2 +- TelepathyQt4/pending-ready.h | 2 +- TelepathyQt4/pending-send-message.h | 2 +- TelepathyQt4/pending-stream-tube-connection.h | 2 +- TelepathyQt4/pending-string-list.h | 2 +- TelepathyQt4/pending-variant-map.h | 2 +- TelepathyQt4/pending-variant.h | 2 +- TelepathyQt4/presence.h | 6 +++--- TelepathyQt4/profile-manager.h | 2 +- TelepathyQt4/profile.h | 2 +- TelepathyQt4/protocol-info.h | 2 +- TelepathyQt4/protocol-parameter.h | 2 +- TelepathyQt4/readiness-helper.h | 2 +- TelepathyQt4/ready-object.h | 2 +- TelepathyQt4/referenced-handles.h | 2 +- TelepathyQt4/requestable-channel-class-spec.h | 4 ++-- TelepathyQt4/room-list-channel.h | 2 +- TelepathyQt4/shared-ptr.h | 2 +- TelepathyQt4/simple-call-observer.h | 2 +- TelepathyQt4/simple-observer.h | 2 +- TelepathyQt4/simple-pending-operations.h | 8 ++++---- TelepathyQt4/simple-text-observer.h | 2 +- TelepathyQt4/stream-tube-channel.h | 2 +- TelepathyQt4/stream-tube-client.h | 2 +- TelepathyQt4/stream-tube-server.h | 2 +- TelepathyQt4/streamed-media-channel.h | 6 +++--- TelepathyQt4/test-backdoors.h | 2 +- TelepathyQt4/text-channel.h | 2 +- TelepathyQt4/tube-channel.h | 2 +- TelepathyQt4/types-internal.h | 10 +++++----- TelepathyQt4/types.h | 2 +- TelepathyQt4/utils.h | 2 +- cmake/modules/TpQt4Macros.cmake | 2 +- doxygen.cfg.in | 2 +- 92 files changed, 122 insertions(+), 122 deletions(-) commit ec69a6dca62e2af1cca8dec6caa5b069a1f8293b Author: Jeremy Whiting Date: Mon Nov 7 11:53:14 2011 -0700 Rename BUILDING_TELEPATHY_QT4 to BUILDING_TP_QT. TelepathyQt4/CMakeLists.txt | 2 +- TelepathyQt4/Farsight/CMakeLists.txt | 4 ++-- TelepathyQt4/Farsight/global.h | 2 +- TelepathyQt4/connection-manager.h | 2 +- TelepathyQt4/connection.h | 2 +- TelepathyQt4/dbus-proxy-factory-internal.h | 2 +- TelepathyQt4/global.h | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) commit e514b7c360d0672593c38f30c89234b00cef7b7d Author: Jeremy Whiting Date: Mon Nov 7 11:32:08 2011 -0700 Rename IN_TELEPATHY_QT4_HEADER to IN_TP_QT_HEADER. TelepathyQt4/AbstractClient | 6 +++--- TelepathyQt4/AbstractClientApprover | 6 +++--- TelepathyQt4/AbstractClientHandler | 6 +++--- TelepathyQt4/AbstractClientObserver | 6 +++--- TelepathyQt4/AbstractInterface | 6 +++--- TelepathyQt4/Account | 6 +++--- TelepathyQt4/AccountCapabilityFilter | 6 +++--- TelepathyQt4/AccountFactory | 6 +++--- TelepathyQt4/AccountFilter | 6 +++--- TelepathyQt4/AccountInterface | 6 +++--- TelepathyQt4/AccountInterfaceAddressingInterface | 6 +++--- TelepathyQt4/AccountInterfaceAvatarInterface | 6 +++--- TelepathyQt4/AccountManager | 6 +++--- TelepathyQt4/AccountManagerInterface | 6 +++--- TelepathyQt4/AccountPropertyFilter | 6 +++--- TelepathyQt4/AccountSet | 6 +++--- TelepathyQt4/AndFilter | 6 +++--- TelepathyQt4/AuthenticationTLSCertificateInterface | 6 +++--- TelepathyQt4/AvatarData | 6 +++--- TelepathyQt4/AvatarSpec | 6 +++--- TelepathyQt4/CMakeLists.txt | 4 ++-- TelepathyQt4/CapabilitiesBase | 6 +++--- TelepathyQt4/Channel | 6 +++--- TelepathyQt4/ChannelClassFeatures | 6 +++--- TelepathyQt4/ChannelClassSpec | 6 +++--- TelepathyQt4/ChannelClassSpecList | 6 +++--- TelepathyQt4/ChannelDispatchOperation | 6 +++--- TelepathyQt4/ChannelDispatchOperationInterface | 6 +++--- TelepathyQt4/ChannelDispatcher | 6 +++--- TelepathyQt4/ChannelDispatcherInterface | 6 +++--- TelepathyQt4/ChannelFactory | 6 +++--- TelepathyQt4/ChannelInterface | 6 +++--- TelepathyQt4/ChannelInterfaceAnonymityInterface | 6 +++--- TelepathyQt4/ChannelInterfaceCallStateInterface | 6 +++--- TelepathyQt4/ChannelInterfaceChatStateInterface | 6 +++--- TelepathyQt4/ChannelInterfaceConferenceInterface | 6 +++--- TelepathyQt4/ChannelInterfaceDTMFInterface | 6 +++--- TelepathyQt4/ChannelInterfaceGroupInterface | 6 +++--- TelepathyQt4/ChannelInterfaceHoldInterface | 6 +++--- .../ChannelInterfaceMediaSignallingInterface | 6 +++--- TelepathyQt4/ChannelInterfaceMessagesInterface | 6 +++--- TelepathyQt4/ChannelInterfacePasswordInterface | 6 +++--- .../ChannelInterfaceSASLAuthenticationInterface | 6 +++--- TelepathyQt4/ChannelInterfaceSecurableInterface | 6 +++--- TelepathyQt4/ChannelInterfaceServicePointInterface | 6 +++--- TelepathyQt4/ChannelInterfaceTubeInterface | 6 +++--- TelepathyQt4/ChannelRequest | 6 +++--- TelepathyQt4/ChannelRequestHints | 6 +++--- TelepathyQt4/ChannelRequestInterface | 6 +++--- TelepathyQt4/ChannelTypeContactListInterface | 6 +++--- TelepathyQt4/ChannelTypeContactSearchInterface | 6 +++--- TelepathyQt4/ChannelTypeFileTransferInterface | 6 +++--- TelepathyQt4/ChannelTypeRoomListInterface | 6 +++--- .../ChannelTypeServerAuthenticationInterface | 6 +++--- .../ChannelTypeServerTLSConnectionInterface | 6 +++--- TelepathyQt4/ChannelTypeStreamTubeInterface | 6 +++--- TelepathyQt4/ChannelTypeStreamedMediaInterface | 6 +++--- TelepathyQt4/ChannelTypeTextInterface | 6 +++--- TelepathyQt4/ChannelTypeTubeInterface | 6 +++--- TelepathyQt4/ChannelTypeTubesInterface | 6 +++--- TelepathyQt4/Client | 6 +++--- TelepathyQt4/ClientApproverInterface | 6 +++--- TelepathyQt4/ClientHandlerInterface | 6 +++--- TelepathyQt4/ClientInterface | 6 +++--- TelepathyQt4/ClientInterfaceRequestsInterface | 6 +++--- TelepathyQt4/ClientObserverInterface | 6 +++--- TelepathyQt4/ClientRegistrar | 6 +++--- TelepathyQt4/Connection | 6 +++--- TelepathyQt4/ConnectionCapabilities | 6 +++--- TelepathyQt4/ConnectionFactory | 6 +++--- TelepathyQt4/ConnectionInterface | 6 +++--- TelepathyQt4/ConnectionInterfaceAliasingInterface | 6 +++--- TelepathyQt4/ConnectionInterfaceAnonymityInterface | 6 +++--- TelepathyQt4/ConnectionInterfaceAvatarsInterface | 6 +++--- TelepathyQt4/ConnectionInterfaceBalanceInterface | 6 +++--- .../ConnectionInterfaceCapabilitiesInterface | 6 +++--- TelepathyQt4/ConnectionInterfaceCellularInterface | 6 +++--- TelepathyQt4/ConnectionInterfaceClientTypes | 6 +++--- .../ConnectionInterfaceClientTypesInterface | 6 +++--- .../ConnectionInterfaceContactBlockingInterface | 6 +++--- ...ConnectionInterfaceContactCapabilitiesInterface | 6 +++--- TelepathyQt4/ConnectionInterfaceContactGroups | 6 +++--- .../ConnectionInterfaceContactGroupsInterface | 6 +++--- .../ConnectionInterfaceContactInfoInterface | 6 +++--- TelepathyQt4/ConnectionInterfaceContactList | 6 +++--- .../ConnectionInterfaceContactListInterface | 6 +++--- TelepathyQt4/ConnectionInterfaceContactsInterface | 6 +++--- TelepathyQt4/ConnectionInterfaceLocationInterface | 6 +++--- .../ConnectionInterfaceMailNotificationInterface | 6 +++--- TelepathyQt4/ConnectionInterfacePowerSaving | 6 +++--- .../ConnectionInterfacePowerSavingInterface | 6 +++--- TelepathyQt4/ConnectionInterfacePresenceInterface | 6 +++--- TelepathyQt4/ConnectionInterfaceRequestsInterface | 6 +++--- .../ConnectionInterfaceServicePointInterface | 6 +++--- .../ConnectionInterfaceSimplePresenceInterface | 6 +++--- TelepathyQt4/ConnectionLowlevel | 6 +++--- TelepathyQt4/ConnectionManager | 6 +++--- TelepathyQt4/ConnectionManagerInterface | 6 +++--- TelepathyQt4/ConnectionManagerLowlevel | 6 +++--- TelepathyQt4/Constants | 6 +++--- TelepathyQt4/Contact | 6 +++--- TelepathyQt4/ContactCapabilities | 6 +++--- TelepathyQt4/ContactFactory | 6 +++--- TelepathyQt4/ContactManager | 6 +++--- TelepathyQt4/ContactMessenger | 6 +++--- TelepathyQt4/ContactSearchChannel | 6 +++--- TelepathyQt4/DBus | 6 +++--- TelepathyQt4/DBusDaemonInterface | 6 +++--- TelepathyQt4/DBusProxy | 6 +++--- TelepathyQt4/DBusProxyFactory | 6 +++--- TelepathyQt4/Debug | 6 +++--- TelepathyQt4/Farsight/Channel | 6 +++--- TelepathyQt4/Farsight/channel.h | 4 ++-- TelepathyQt4/Farsight/global.h | 4 ++-- TelepathyQt4/Feature | 6 +++--- TelepathyQt4/Features | 6 +++--- TelepathyQt4/FileTransferChannel | 6 +++--- TelepathyQt4/FileTransferChannelCreationProperties | 6 +++--- TelepathyQt4/Filter | 6 +++--- TelepathyQt4/FixedFeatureFactory | 6 +++--- TelepathyQt4/GenericCapabilityFilter | 6 +++--- TelepathyQt4/GenericPropertyFilter | 6 +++--- TelepathyQt4/Global | 6 +++--- TelepathyQt4/HandledChannelNotifier | 6 +++--- TelepathyQt4/IncomingFileTransferChannel | 6 +++--- TelepathyQt4/IncomingStreamTubeChannel | 6 +++--- TelepathyQt4/IntrospectableInterface | 6 +++--- TelepathyQt4/KeyFile | 6 +++--- TelepathyQt4/LocationInfo | 6 +++--- TelepathyQt4/ManagerFile | 6 +++--- TelepathyQt4/MediaSessionHandler | 6 +++--- TelepathyQt4/MediaSessionHandlerInterface | 6 +++--- TelepathyQt4/MediaStreamHandler | 6 +++--- TelepathyQt4/MediaStreamHandlerInterface | 6 +++--- TelepathyQt4/Message | 6 +++--- TelepathyQt4/MessageContentPart | 6 +++--- TelepathyQt4/MessageContentPartList | 6 +++--- TelepathyQt4/MethodInvocationContext | 6 +++--- TelepathyQt4/NotFilter | 6 +++--- TelepathyQt4/Object | 6 +++--- TelepathyQt4/OptionalInterfaceFactory | 6 +++--- TelepathyQt4/OrFilter | 6 +++--- TelepathyQt4/OutgoingFileTransferChannel | 6 +++--- TelepathyQt4/OutgoingStreamTubeChannel | 6 +++--- TelepathyQt4/PeerInterface | 6 +++--- TelepathyQt4/PendingAccount | 6 +++--- TelepathyQt4/PendingChannel | 6 +++--- TelepathyQt4/PendingChannelRequest | 6 +++--- TelepathyQt4/PendingComposite | 6 +++--- TelepathyQt4/PendingConnection | 6 +++--- TelepathyQt4/PendingContactAttributes | 6 +++--- TelepathyQt4/PendingContactInfo | 6 +++--- TelepathyQt4/PendingContacts | 6 +++--- TelepathyQt4/PendingFailure | 6 +++--- TelepathyQt4/PendingHandles | 6 +++--- TelepathyQt4/PendingOperation | 6 +++--- TelepathyQt4/PendingReady | 6 +++--- TelepathyQt4/PendingSendMessage | 6 +++--- TelepathyQt4/PendingStreamTubeConnection | 6 +++--- TelepathyQt4/PendingStreamedMediaStreams | 6 +++--- TelepathyQt4/PendingStringList | 6 +++--- TelepathyQt4/PendingSuccess | 6 +++--- TelepathyQt4/PendingVariant | 6 +++--- TelepathyQt4/PendingVariantMap | 6 +++--- TelepathyQt4/PendingVoid | 6 +++--- TelepathyQt4/Presence | 6 +++--- TelepathyQt4/PresenceSpec | 6 +++--- TelepathyQt4/PresenceSpecList | 6 +++--- TelepathyQt4/Profile | 6 +++--- TelepathyQt4/ProfileManager | 6 +++--- TelepathyQt4/Properties | 6 +++--- TelepathyQt4/PropertiesInterface | 6 +++--- TelepathyQt4/PropertiesInterfaceInterface | 6 +++--- TelepathyQt4/ProtocolInfo | 6 +++--- TelepathyQt4/ProtocolParameter | 6 +++--- TelepathyQt4/ReadinessHelper | 6 +++--- TelepathyQt4/ReadyObject | 6 +++--- TelepathyQt4/ReceivedMessage | 6 +++--- TelepathyQt4/RefCounted | 6 +++--- TelepathyQt4/ReferencedHandles | 6 +++--- TelepathyQt4/RequestableChannelClassSpec | 6 +++--- TelepathyQt4/RequestableChannelClassSpecList | 6 +++--- TelepathyQt4/RoomListChannel | 6 +++--- TelepathyQt4/SharedPtr | 6 +++--- TelepathyQt4/SimpleCallObserver | 6 +++--- TelepathyQt4/SimpleObserver | 6 +++--- TelepathyQt4/SimpleTextObserver | 6 +++--- TelepathyQt4/StatefulDBusProxy | 6 +++--- TelepathyQt4/StatelessDBusProxy | 6 +++--- TelepathyQt4/StreamTubeChannel | 6 +++--- TelepathyQt4/StreamTubeClient | 6 +++--- TelepathyQt4/StreamTubeServer | 6 +++--- TelepathyQt4/StreamedMediaChannel | 6 +++--- TelepathyQt4/StreamedMediaStream | 6 +++--- TelepathyQt4/TextChannel | 6 +++--- TelepathyQt4/TubeChannel | 8 ++++---- TelepathyQt4/Types | 6 +++--- TelepathyQt4/Utils | 6 +++--- TelepathyQt4/abstract-client.h | 4 ++-- TelepathyQt4/abstract-interface.h | 4 ++-- TelepathyQt4/account-capability-filter.h | 4 ++-- TelepathyQt4/account-factory.h | 4 ++-- TelepathyQt4/account-filter.h | 4 ++-- TelepathyQt4/account-manager.h | 4 ++-- TelepathyQt4/account-property-filter.h | 4 ++-- TelepathyQt4/account-set.h | 4 ++-- TelepathyQt4/account.h | 4 ++-- TelepathyQt4/and-filter.h | 4 ++-- TelepathyQt4/avatar.h | 4 ++-- TelepathyQt4/capabilities-base.h | 4 ++-- TelepathyQt4/channel-class-features.h | 4 ++-- TelepathyQt4/channel-class-spec.h | 4 ++-- TelepathyQt4/channel-dispatch-operation.h | 4 ++-- TelepathyQt4/channel-dispatcher.h | 4 ++-- TelepathyQt4/channel-factory.h | 4 ++-- TelepathyQt4/channel-request.h | 4 ++-- TelepathyQt4/channel.h | 4 ++-- TelepathyQt4/client-registrar.h | 4 ++-- TelepathyQt4/client.h | 4 ++-- TelepathyQt4/connection-capabilities.h | 4 ++-- TelepathyQt4/connection-factory.h | 4 ++-- TelepathyQt4/connection-lowlevel.h | 4 ++-- TelepathyQt4/connection-manager-lowlevel.h | 4 ++-- TelepathyQt4/connection-manager.h | 4 ++-- TelepathyQt4/connection.h | 4 ++-- TelepathyQt4/constants.h | 4 ++-- TelepathyQt4/contact-capabilities.h | 4 ++-- TelepathyQt4/contact-factory.h | 4 ++-- TelepathyQt4/contact-manager.h | 4 ++-- TelepathyQt4/contact-messenger.h | 4 ++-- TelepathyQt4/contact-search-channel.h | 4 ++-- TelepathyQt4/contact.h | 4 ++-- TelepathyQt4/dbus-proxy-factory.h | 4 ++-- TelepathyQt4/dbus-proxy.h | 4 ++-- TelepathyQt4/dbus.h | 4 ++-- TelepathyQt4/debug.cpp | 2 +- TelepathyQt4/debug.h | 4 ++-- TelepathyQt4/feature.h | 4 ++-- .../file-transfer-channel-creation-properties.h | 4 ++-- TelepathyQt4/file-transfer-channel.h | 4 ++-- TelepathyQt4/filter.h | 4 ++-- TelepathyQt4/fixed-feature-factory.h | 4 ++-- TelepathyQt4/generic-capability-filter.h | 4 ++-- TelepathyQt4/generic-property-filter.h | 4 ++-- TelepathyQt4/global.h | 10 +++++----- TelepathyQt4/handled-channel-notifier.h | 4 ++-- TelepathyQt4/incoming-file-transfer-channel.h | 4 ++-- TelepathyQt4/incoming-stream-tube-channel.h | 4 ++-- TelepathyQt4/key-file.h | 4 ++-- TelepathyQt4/location-info.h | 4 ++-- TelepathyQt4/manager-file.h | 4 ++-- TelepathyQt4/media-session-handler.h | 4 ++-- TelepathyQt4/media-stream-handler.h | 4 ++-- TelepathyQt4/message-content-part.h | 4 ++-- TelepathyQt4/message.h | 4 ++-- TelepathyQt4/method-invocation-context.h | 4 ++-- TelepathyQt4/not-filter.h | 4 ++-- TelepathyQt4/object.h | 4 ++-- TelepathyQt4/optional-interface-factory.h | 4 ++-- TelepathyQt4/or-filter.h | 4 ++-- TelepathyQt4/outgoing-file-transfer-channel.h | 4 ++-- TelepathyQt4/outgoing-stream-tube-channel.h | 4 ++-- TelepathyQt4/pending-account.h | 4 ++-- TelepathyQt4/pending-channel-request.h | 4 ++-- TelepathyQt4/pending-channel.h | 4 ++-- TelepathyQt4/pending-connection.h | 4 ++-- TelepathyQt4/pending-contact-attributes.h | 4 ++-- TelepathyQt4/pending-contact-info.h | 4 ++-- TelepathyQt4/pending-contacts.h | 4 ++-- TelepathyQt4/pending-handles.h | 4 ++-- TelepathyQt4/pending-operation.cpp | 4 ++-- TelepathyQt4/pending-operation.h | 4 ++-- TelepathyQt4/pending-ready.h | 4 ++-- TelepathyQt4/pending-send-message.h | 4 ++-- TelepathyQt4/pending-stream-tube-connection.h | 4 ++-- TelepathyQt4/pending-string-list.h | 4 ++-- TelepathyQt4/pending-variant-map.h | 4 ++-- TelepathyQt4/pending-variant.h | 4 ++-- TelepathyQt4/presence.h | 4 ++-- TelepathyQt4/profile-manager.h | 4 ++-- TelepathyQt4/profile.h | 4 ++-- TelepathyQt4/properties.h | 4 ++-- TelepathyQt4/protocol-info.h | 4 ++-- TelepathyQt4/protocol-parameter.h | 4 ++-- TelepathyQt4/readiness-helper.h | 4 ++-- TelepathyQt4/ready-object.h | 4 ++-- TelepathyQt4/referenced-handles.h | 4 ++-- TelepathyQt4/requestable-channel-class-spec.h | 4 ++-- TelepathyQt4/room-list-channel.h | 4 ++-- TelepathyQt4/shared-ptr.h | 4 ++-- TelepathyQt4/simple-pending-operations.h | 4 ++-- TelepathyQt4/stream-tube-channel.h | 4 ++-- TelepathyQt4/streamed-media-channel.h | 4 ++-- TelepathyQt4/test-backdoors.h | 2 +- TelepathyQt4/text-channel.h | 4 ++-- TelepathyQt4/tls-certificate.cpp | 2 +- TelepathyQt4/tls-certificate.h | 4 ++-- TelepathyQt4/tube-channel.h | 4 ++-- TelepathyQt4/types.h | 4 ++-- TelepathyQt4/utils.h | 4 ++-- cmake/modules/TpQt4Macros.cmake | 2 +- 301 files changed, 797 insertions(+), 797 deletions(-) commit 6f0c193354cbfb572ad39577ef52c3ae2b73c48c Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 10 18:15:16 2011 -0200 Make master lead to 0.9.0 CMakeLists.txt | 4 ++-- NEWS | 19 ++++++++++--------- 2 files changed, 12 insertions(+), 11 deletions(-) commit 236dbb8eca9972e343443b8a42df25c539813ee6 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 10 17:47:06 2011 -0200 Prepare release 0.8.0 CMakeLists.txt | 6 +++--- NEWS | 10 +++++++++- 2 files changed, 12 insertions(+), 4 deletions(-) commit 461803e4ba8792c37aedb933fdd0c342efb7d0ff Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 10 17:26:36 2011 -0200 Update NEWS NEWS | 1 + 1 file changed, 1 insertion(+) commit d0c404fa14a52e1cfa9297e3efb3b513c39c3916 Merge: 0f328cb dc86734 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 10 17:22:56 2011 -0200 Merge branch 'conn-noroster' Reviewed-by: Olli Salli (oggis) commit dc867344a983146cc66f4f2667c87bc6a76e4208 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 9 11:58:25 2011 -0200 ContactManager::Roster: Properly "fail" introspecting Connection::FeatureRoster if roster is not supported. TelepathyQt4/contact-manager-roster.cpp | 4 ++- tests/dbus/conn-introspect-cornercases.cpp | 49 ++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) commit 70609dd3498be1081910e0cd1441473453e0060e Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 9 11:57:09 2011 -0200 contacts-noroster-conn: Add test connection to be used to check whether Connection::FeatureRoster is properly introspected when there is no roster. tests/lib/glib/CMakeLists.txt | 2 ++ tests/lib/glib/contacts-noroster-conn.c | 50 +++++++++++++++++++++++++++++ tests/lib/glib/contacts-noroster-conn.h | 52 +++++++++++++++++++++++++++++++ 3 files changed, 104 insertions(+) commit 0f328cb69120f2b25360e58928f53b7106a7c4f4 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 11 12:04:26 2011 -0300 Update NEWS NEWS | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 6d0e07d52ed345450850b1d611a784b6914899b4 Merge: f0ce196 aaaf9c9 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 11 12:03:23 2011 -0300 Merge branch 'contact-info-refresh' Reviewed-by: Olli Salli (oggis) commit aaaf9c9b660a51742e175dabecdb3409620706f4 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 11 11:58:42 2011 -0300 contacts-avatar test: Use common nomenclature for member variables. tests/dbus/contacts-avatar.cpp | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) commit 3fbffe5446333692c4b55cff0536837107b76c03 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 11 11:39:15 2011 -0300 contacts-avatar test: Test ContactManager::requestContactAvatars with no contact. tests/dbus/contacts-avatar.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) commit 8d7d4cd5d74c267223b07c7ee103d426a3a6b1a2 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 11 11:34:24 2011 -0300 ContactManager: Update doc for deprecated requestContactAvatar. TelepathyQt4/contact-manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 4d922bec2cfbebd9097ba0d18499087fa5864560 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 11 11:33:52 2011 -0300 ContactManager: Early return in requestContactAvatars if no contact was given. TelepathyQt4/contact-manager.cpp | 4 ++++ 1 file changed, 4 insertions(+) commit f0ce196fe83b10051d1b8923c9c68bb0c7ba39a8 Author: Olli Salli Date: Mon Oct 10 19:32:25 2011 +0300 Update NEWS NEWS | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit d084aaffd3fc35036274204e9717f9d59e6a0135 Merge: fd1583b 3981453 Author: Olli Salli Date: Mon Oct 10 19:29:40 2011 +0300 Merge branch 'stube-handlers' Reviewed-by: Andre Magalhaes (andrunko) commit 3981453f4308233cef5a2c1fb98a348a808cbc09 Author: Olli Salli Date: Mon Oct 10 19:28:00 2011 +0300 Link to ST[SC]::isRegistered() from the methods after which it should be checked TelepathyQt4/stream-tube-client.cpp | 8 ++++++++ TelepathyQt4/stream-tube-server.cpp | 8 ++++++++ 2 files changed, 16 insertions(+) commit e90712845cda1cd92a099a6475e97d68c9e1f0b2 Author: Olli Salli Date: Mon Oct 10 19:23:35 2011 +0300 Explain what ST[SC]::monitorsConnections() affects better TelepathyQt4/stream-tube-client.cpp | 6 +++++- TelepathyQt4/stream-tube-server.cpp | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) commit ad8972e9c0da42abb3e447d22bca928c03a09d27 Author: Olli Salli Date: Mon Oct 10 18:35:57 2011 +0300 Indicate corrent prefix for Client service names in ST[CS]::clientName() dox TelepathyQt4/stream-tube-client.cpp | 2 +- TelepathyQt4/stream-tube-server.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 59836c82ec4932f61a70667d9832d17fc06f3bc3 Author: Olli Salli Date: Mon Oct 10 17:51:08 2011 +0300 STC dox: s/an tube-by-tube basis/a tube.../ TelepathyQt4/stream-tube-client.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 8bf8779f269711a7f48f506a6d6356f76df8f32d Author: Olli Salli Date: Mon Oct 10 17:50:26 2011 +0300 Make STC::TcpSrcAddrGen talk about itself, not a STC::ParamsGen which doesn't exist TelepathyQt4/stream-tube-client.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 58cbb24fb90f2ce1a671a307cae325ae842bc0b2 Author: Olli Salli Date: Mon Oct 10 17:19:09 2011 +0300 Make STS::Tube ctor dox wording a bit less convoluted TelepathyQt4/stream-tube-server.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit f783da05dcbbe82e2be628f360f22ed676a4105a Author: Olli Salli Date: Sun Oct 9 20:08:06 2011 +0300 Doxyment StreamTubeClient TelepathyQt4/stream-tube-client.cpp | 364 +++++++++++++++++++++++++++++++++++ TelepathyQt4/stream-tube-client.h | 29 +-- 2 files changed, 372 insertions(+), 21 deletions(-) commit 7f238899663b7ec2f758f8d6ccebba330829621c Author: Olli Salli Date: Sun Oct 9 19:48:36 2011 +0300 STS dox: Fix the (sensible) doxygen warnings TelepathyQt4/stream-tube-server.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) commit a7de8597bd0df33b4eb34205a066f1befe955cf6 Author: Olli Salli Date: Sun Oct 9 17:50:53 2011 +0300 Doxyment StreamTubeServer TelepathyQt4/stream-tube-server.cpp | 320 ++++++++++++++++++++++++++++++++++- TelepathyQt4/stream-tube-server.h | 38 +---- 2 files changed, 319 insertions(+), 39 deletions(-) commit f76f89c190f1c8291e17c0aca2a3f4eb094bde97 Author: Olli Salli Date: Sun Oct 9 15:04:08 2011 +0300 Make StreamTubeServer report TCP conns through CMs with no Port AC support too, with a null src addr TelepathyQt4/stream-tube-server.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) commit 22fb5054e15a2f40fc1996ca72be6bfe7a90d8a0 Author: Olli Salli Date: Sun Oct 9 12:54:07 2011 +0300 Improve STC::TcpSrcAddrGen dox with a transcription of the original header comments TelepathyQt4/stream-tube-client.cpp | 5 ++++- TelepathyQt4/stream-tube-client.h | 9 +-------- 2 files changed, 5 insertions(+), 9 deletions(-) commit 894f59b1e6217a9be4e085d38cd58db01460d711 Author: Olli Salli Date: Sat Oct 8 21:10:14 2011 +0300 Doxyment STC::TcpSrcAddrGen TelepathyQt4/stream-tube-client.cpp | 51 +++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) commit 27c9acd9bd959868a34e65e0e974e09cf61bf289 Author: Olli Salli Date: Sat Oct 8 15:59:33 2011 +0300 Doxyment STS::ParamsGen TelepathyQt4/stream-tube-server.cpp | 42 +++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) commit 00d27688afd4ab13ea7b8c15eea80096e0f73294 Author: Olli Salli Date: Sat Oct 8 15:38:51 2011 +0300 Doxyment ST[SC] pair wrapper types TelepathyQt4/stream-tube-client.cpp | 51 +++++++++++++++++ TelepathyQt4/stream-tube-server.cpp | 103 +++++++++++++++++++++++++++++++++++ 2 files changed, 154 insertions(+) commit 1f6daaf29e288fe85ce816cdaa275eb9557906e3 Author: Olli Salli Date: Tue Sep 27 22:08:11 2011 +0300 Call the source parameter other instead of a in ST[CS] pair wrapper copy ctors and operator=s TelepathyQt4/stream-tube-client.cpp | 15 ++++++++------- TelepathyQt4/stream-tube-client.h | 4 ++-- TelepathyQt4/stream-tube-server.cpp | 29 +++++++++++++++-------------- TelepathyQt4/stream-tube-server.h | 8 ++++---- 4 files changed, 29 insertions(+), 27 deletions(-) commit 05241c765ba15fc1ab095b10377a559204bc274f Author: Olli Salli Date: Tue Sep 27 21:44:29 2011 +0300 Even more similarly, add a STC::Tube, using it both for connections() and tubes() TelepathyQt4/stream-tube-client.cpp | 60 +++++++++++++++++++++++++++++------ TelepathyQt4/stream-tube-client.h | 32 +++++++++++++++++-- tests/dbus/stream-tube-handlers.cpp | 27 ++++++++-------- 3 files changed, 93 insertions(+), 26 deletions(-) commit af726e04327a2b275c46fed6bca5b5fbf282361c Author: Olli Salli Date: Tue Sep 27 17:48:51 2011 +0300 Similarly, simplify STS::tubes() by adding STS::Tube TelepathyQt4/stream-tube-server.cpp | 63 +++++++++++++++++++++++++++++------ TelepathyQt4/stream-tube-server.h | 30 ++++++++++++++++- tests/dbus/stream-tube-handlers.cpp | 6 ++-- 3 files changed, 84 insertions(+), 15 deletions(-) commit 9c1db8818b8f78c818d71030fc921e6dd6371845 Author: Olli Salli Date: Tue Sep 27 17:33:27 2011 +0300 Make StreamTubeServer::tcpConnections() usage more readable by adding a helper value type TelepathyQt4/stream-tube-server.cpp | 50 ++++++++++++++++++++++++++++++++--- TelepathyQt4/stream-tube-server.h | 35 +++++++++++++++++++++++- tests/dbus/stream-tube-handlers.cpp | 6 ++--- 3 files changed, 83 insertions(+), 8 deletions(-) commit b67328c9a5c39cbbf2015213cb74516d408fa3f2 Author: Olli Salli Date: Sun Sep 25 20:16:59 2011 +0300 StreamTube examples: Make all slot arguments have names in declarations examples/stream-tubes/tube-initiator.h | 9 +++++---- examples/stream-tubes/tube-receiver.h | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) commit ae222e367f520306c63f7c6fbbcdf533a11307f2 Author: Olli Salli Date: Sun Sep 25 20:13:47 2011 +0300 Fix too much indent in a connect call in TubeInitiator::onContactsRetrieved examples/stream-tubes/tube-initiator.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 84fece1a78e3cacb6b186bcfee082cf711b771e4 Author: Olli Salli Date: Sun Sep 25 20:12:46 2011 +0300 StreamTube examples: Drop verbose debug While it was useful when developing the examples, it's overtly verbose for somebody just experimenting with them. examples/stream-tubes/tube-initiator.cpp | 5 ++--- examples/stream-tubes/tube-receiver.cpp | 1 - 2 files changed, 2 insertions(+), 4 deletions(-) commit b81c93f2d3be837e8a55927fdf7a63b85ef09702 Author: Olli Salli Date: Sun Sep 25 20:03:38 2011 +0300 STC: Skip invalid tubes in connections() to avoid warnings, like STS, and document the STS check TelepathyQt4/stream-tube-client.cpp | 7 +++++++ TelepathyQt4/stream-tube-server.cpp | 3 +++ 2 files changed, 10 insertions(+) commit 86a414f0ad7d59988411631ae5ee3233c8c94d59 Author: Olli Salli Date: Sun Sep 25 19:43:22 2011 +0300 Unexport ST[CS] ctors as they're private TelepathyQt4/stream-tube-client.h | 2 +- TelepathyQt4/stream-tube-server.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit ca9efb7c55f5d96deefb630350d227f4d178f610 Author: Olli Salli Date: Sun Sep 25 19:42:52 2011 +0300 Line-wrap ST[CS] TubeWrapper ctor decls TelepathyQt4/stream-tube-client-internal.h | 6 ++++-- TelepathyQt4/stream-tube-server-internal.h | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-) commit ce0cde71c0b6fcac3c1098300426d7f722f7715d Author: Olli Salli Date: Sun Sep 25 19:10:42 2011 +0300 SimpleStreamTubeHandler: Weed out duplicate services when building filter TelepathyQt4/simple-stream-tube-handler.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 49b0a36a66df222d9d750afcc92fa26cfc8d0fb8 Author: Olli Salli Date: Thu Sep 22 20:27:54 2011 +0300 TubeInitiator example: Document why we can assert that the conns are connected examples/stream-tubes/tube-initiator.cpp | 2 ++ 1 file changed, 2 insertions(+) commit 60b6c9f7d8dfb6457beb71992d12c3b19e6922d9 Author: Olli Salli Date: Thu Sep 22 20:26:20 2011 +0300 Fix TubeReceiver example connect to accept signal to follow the latest arg order examples/stream-tubes/tube-receiver.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) commit 3b9bed03aa098b47e18133284686e6183a50adb7 Author: Olli Salli Date: Thu Sep 22 20:24:14 2011 +0300 TubeReceiver example: remove useless account param examples/stream-tubes/tube-receiver.cpp | 9 ++------- examples/stream-tubes/tube-receiver.h | 2 +- 2 files changed, 3 insertions(+), 8 deletions(-) commit 802fb1f1a510ec8c9cf5910937d8b8c0f5d9b933 Author: Olli Salli Date: Fri Sep 16 21:33:46 2011 +0300 Test bypassApproval param to StreamTubeClient tests/dbus/stream-tube-handlers.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) commit c70a55ac5b020c94224c5509984d196f9162aceb Author: Olli Salli Date: Fri Sep 16 21:27:00 2011 +0300 Update copyright years for stube example examples/stream-tubes/tube-initiator.cpp | 3 ++- examples/stream-tubes/tube-initiator.h | 4 ++-- examples/stream-tubes/tube-receiver.cpp | 4 ++-- examples/stream-tubes/tube-receiver.h | 4 ++-- 4 files changed, 8 insertions(+), 7 deletions(-) commit 69f9b67fc1896d3a85cc5b9accd3b9fd170f9a9b Author: Olli Salli Date: Fri Sep 16 21:26:50 2011 +0300 Ditto for STS::ParamsGen TelepathyQt4/stream-tube-server.cpp | 12 ++++++------ TelepathyQt4/stream-tube-server.h | 6 +++--- tests/dbus/stream-tube-handlers.cpp | 4 ++-- 3 files changed, 11 insertions(+), 11 deletions(-) commit 7b9190cf987cba11012b0c7511598f24e9672886 Author: Olli Salli Date: Fri Sep 16 21:21:04 2011 +0300 Admit that STC::TcpSrcAddrGens need to modify their state for generating TelepathyQt4/stream-tube-client.cpp | 6 +++--- TelepathyQt4/stream-tube-client.h | 6 +++--- tests/dbus/stream-tube-handlers.cpp | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) commit 95ec0179c45f4d6b53a265e34dc24afc00d8fdaa Author: Olli Salli Date: Fri Sep 16 21:15:08 2011 +0300 Test StreamTubeClient connection monitoring STC line coverage 91.0% tests/dbus/stream-tube-handlers.cpp | 228 +++++++++++++++++++++++++++++++++++ 1 file changed, 228 insertions(+) commit 16c23ea7d443aa323273f5c8cc1cde4c1d68d69a Author: Olli Salli Date: Tue Sep 13 17:18:59 2011 +0300 Test StreamTubeClient basic Unix operation Line coverage 80.9%. Testing connection monitoring should make that around 90%. tests/dbus/stream-tube-handlers.cpp | 200 +++++++++++++++++++++++++++++++++++ 1 file changed, 200 insertions(+) commit 52d1e410e28afc208041f7b0100c3dfdd105be6e Author: Olli Salli Date: Tue Sep 13 17:12:01 2011 +0300 Similarly to TCP, fall back to Localhost AC in STC if Creds is not supported for Unix TelepathyQt4/stream-tube-client.cpp | 5 +++++ 1 file changed, 5 insertions(+) commit 96ca370632a4cd7afeb54dd9e0eda69034465876 Author: Olli Salli Date: Tue Sep 13 16:34:37 2011 +0300 Indent *StreamTube* ctor initializer lists correctly TelepathyQt4/simple-stream-tube-handler.cpp | 2 +- TelepathyQt4/stream-tube-client.cpp | 2 +- TelepathyQt4/stream-tube-server.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) commit 5176fedb3a2e84c815d85f80ef715baeea81031d Author: Olli Salli Date: Tue Sep 13 16:22:25 2011 +0300 Indent FixedParametersGenerator body correctly (not at all) TelepathyQt4/stream-tube-server.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) commit 27b59b00214d6008e8e88a0cd830e9a7c84c4381 Author: Olli Salli Date: Tue Sep 13 15:07:45 2011 +0300 Rename STC::generator() to more explicit tcpGenerator() TelepathyQt4/stream-tube-client.cpp | 4 ++-- TelepathyQt4/stream-tube-client.h | 2 +- tests/dbus/stream-tube-handlers.cpp | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) commit 4e3ff5c0b3c11951eccbafd22bb8aaaa7c03e454 Author: Olli Salli Date: Tue Sep 13 14:55:08 2011 +0300 Remove trailing WS from an empty line in stream-tube-client.cpp TelepathyQt4/stream-tube-client.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 389a5292e5d467d03ed2863437eb469ff38a8921 Author: Olli Salli Date: Tue Sep 13 14:54:03 2011 +0300 Add rationale to the "being registered" asserts in ST[SC]::onInvokedForTube TelepathyQt4/stream-tube-client.cpp | 2 +- TelepathyQt4/stream-tube-server.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 03d5b7ee4cc86f6d1005f2f155c94c1b5ca79ae8 Author: Olli Salli Date: Tue Sep 13 14:45:27 2011 +0300 Make ST[SC] the QObject parent of their tube wrappers so we don't need to manually delete them TelepathyQt4/stream-tube-client-internal.h | 4 ++-- TelepathyQt4/stream-tube-client.cpp | 18 ++++++++---------- TelepathyQt4/stream-tube-server-internal.h | 2 +- TelepathyQt4/stream-tube-server.cpp | 10 +++------- 4 files changed, 14 insertions(+), 20 deletions(-) commit 318d8b91e32031c5e1964fa6db522611da11918d Author: Olli Salli Date: Tue Sep 13 14:43:10 2011 +0300 Add header guards to simple-stream-tube-handler.h TelepathyQt4/simple-stream-tube-handler.h | 5 +++++ 1 file changed, 5 insertions(+) commit bf6b16f3b95d380ba8d0501bf3eba9c2164e128b Author: Olli Salli Date: Tue Sep 13 14:23:15 2011 +0300 SSTH: Add a TODO to use Channel::channelType() in handleChannels whenever that becomes possible TelepathyQt4/simple-stream-tube-handler.cpp | 2 ++ 1 file changed, 2 insertions(+) commit a8d0ca8d5bfcc247b3e1545c03c0ee27dafcc4ae Author: Olli Salli Date: Tue Sep 13 14:13:47 2011 +0300 Make it possible for STS to have an empty filter, and a checkable error for STC to have an empty one TelepathyQt4/simple-stream-tube-handler.cpp | 2 -- TelepathyQt4/stream-tube-client.cpp | 5 +++++ tests/dbus/stream-tube-handlers.cpp | 24 +++++++++++++++++++++++- 3 files changed, 28 insertions(+), 3 deletions(-) commit e57c17ea4eb8b2820436492977ea72ed160e6b3e Author: Olli Salli Date: Tue Sep 13 13:18:06 2011 +0300 STS/STC internals: Use const refs for foreach var wherever we can for non-primitive types TelepathyQt4/simple-stream-tube-handler.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit 45d13d326f48edba4026d05c748a91c23b60cdfe Author: Olli Salli Date: Tue Sep 13 13:17:45 2011 +0300 PendingOperation: Remove interim StreamTubeServer friend-ing hack TelepathyQt4/pending-operation.h | 1 - 1 file changed, 1 deletion(-) commit 0cf277918e9495dfcdd3337e889de69dd46d3641 Author: Olli Salli Date: Mon Sep 12 21:20:31 2011 +0300 Test StreamTubeClient common and TCP side, except for connection monitoring Line coverage 72.3%. Next up Unix basics, then conn monitoring. tests/dbus/stream-tube-handlers.cpp | 390 +++++++++++++++++++++++++++++++++-- 1 file changed, 369 insertions(+), 21 deletions(-) commit 04049bb94975a7632eb8b4bd803bf936feef03c7 Author: Olli Salli Date: Mon Sep 12 21:08:30 2011 +0300 STC: Don't attempt to use Port access control if it's not supported Note that it's still possible for a client to reject the tube if the fallback path is hit, if they absolutely require Port. This can be done simply by closing the tube. TelepathyQt4/stream-tube-client.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) commit 425001bf0e0080127480dc061001333bc79865da Author: Olli Salli Date: Mon Sep 12 20:48:15 2011 +0300 Make the dtor of STC::TcpSrcAddrGen virtual TelepathyQt4/stream-tube-client.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 9588d4b785c3af44c8b7d80871ac373c9886544d Author: Olli Salli Date: Mon Sep 12 20:47:55 2011 +0300 STC: Reorder most important args of the accepted* signals first TelepathyQt4/stream-tube-client.cpp | 8 ++++---- TelepathyQt4/stream-tube-client.h | 12 ++++++------ examples/stream-tubes/tube-receiver.cpp | 5 ++--- examples/stream-tubes/tube-receiver.h | 2 +- 4 files changed, 13 insertions(+), 14 deletions(-) commit c89159d86e610e5d6ff6aa18a622369f29534204 Author: Olli Salli Date: Mon Sep 12 20:02:41 2011 +0300 STC: Remove stale TODO TelepathyQt4/stream-tube-client.cpp | 5 ----- 1 file changed, 5 deletions(-) commit dbde3abbf69f272896f61a92231a0798abec864a Author: Olli Salli Date: Sat Sep 10 15:39:44 2011 +0300 TestStreamTubeHandlers: Remove stale TODO comment tests/dbus/stream-tube-handlers.cpp | 1 - 1 file changed, 1 deletion(-) commit fc62d554dbd36e2a6212ce456ecf6f2d38a43952 Author: Olli Salli Date: Sat Sep 10 14:26:17 2011 +0300 Call AbstractClient virtual base class constructor in our concrete Client impls As AbstractClient is inherited virtually, nothing calls the ctor automatically. I noticed the pointer to the AC base class is as reported by gdb for all our concrete Client implementations. This hasn't caused any problems so far however, because the base class is actually empty, so the pointer is not used for anything. It will be used in the near future however when we move the isRegistered stuff from Andre's cd-claim branch to the AbstracClient base class in an ABI break. .../request-temporary-handler-internal.cpp | 3 ++- TelepathyQt4/simple-observer.cpp | 3 ++- TelepathyQt4/simple-stream-tube-handler.cpp | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) commit de68c54d117b19c3c82543c3fba0419ff8cfa169 Author: Olli Salli Date: Sat Sep 10 14:25:09 2011 +0300 Actually delete private structure, and therefore registrar, handler etc in ST[SC] Whoops... As now a couple more destructors are run, STS test cov 83.3%, STC 28.1%, SSTH 97.0%! TelepathyQt4/stream-tube-client.cpp | 2 ++ TelepathyQt4/stream-tube-server.cpp | 2 ++ 2 files changed, 4 insertions(+) commit 20507230e6c25031632b810934dffc4539a3c0de Author: Olli Salli Date: Thu Sep 1 19:09:19 2011 +0300 STS & STC: Remove some dead branches redundant with SSTH checks STS line coverage 81.8%, where it stays STC line coverage 27.3%, which is OK given that is has no actual tests yet :P TelepathyQt4/stream-tube-client.cpp | 7 +++---- TelepathyQt4/stream-tube-server.cpp | 19 ++++++------------- 2 files changed, 9 insertions(+), 17 deletions(-) commit ced029db9bee39e197811b8bfe1a8de61c0e0b38 Author: Olli Salli Date: Thu Sep 1 19:08:45 2011 +0300 STS & STC: {} around all if then blocks TelepathyQt4/stream-tube-client.cpp | 3 ++- TelepathyQt4/stream-tube-server.cpp | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) commit 9d021e5a2ebee8d22a9be5b56b7c32d848d7cc19 Author: Olli Salli Date: Thu Sep 1 18:53:34 2011 +0300 StreamTubeServer: Ignore invalid and non-Open tubes in tcpConnections() This prevents a few useless warnings in corner cases where a tube is still being opened, or has been invalidated but we haven't processed that event yet. TelepathyQt4/stream-tube-server.cpp | 4 ++++ 1 file changed, 4 insertions(+) commit 0c041ece01c357fa4c9cf006943b385c5c10708e Author: Olli Salli Date: Thu Sep 1 20:22:10 2011 +0300 TestStreamTubeHandlers: Test that implied connection closes are emitted for a closed tube tests/dbus/stream-tube-handlers.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) commit 5b44b803e0bc107bbdf01864c94b12529342dfdb Author: Olli Salli Date: Thu Sep 1 00:03:44 2011 +0300 Test StreamTubeServer connection monitoring more thoroughly Doesn't increase test coverage though. I still want the behavior of (Outgoing)StreamTubeChannel to change when there are ongoing connections and the tube channel is closed. tests/dbus/stream-tube-handlers.cpp | 48 ++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) commit 4e85990c8be624a54c1fd6ef2ff5381847a19bb8 Author: Olli Salli Date: Wed Aug 31 14:38:16 2011 +0300 Test STS connection monitoring in a rudimentary way STS line coverage now 80.2%, the rest is error branches, but I still want to test a more complex case of connection monitoring (simultaneous connections) even though that won't increase the apparent coverage. tests/dbus/stream-tube-handlers.cpp | 194 +++++++++++++++++++++++++++++++++++ 1 file changed, 194 insertions(+) commit 27c231010110f360b50369bba852cf147bc7d5fd Author: Olli Salli Date: Wed Aug 31 14:37:42 2011 +0300 Early return properly in TestStreamTubeHandlers slot error cases tests/dbus/stream-tube-handlers.cpp | 3 +++ 1 file changed, 3 insertions(+) commit 9236ed49c53b336990108df551c5af29ddf55a3a Author: Olli Salli Date: Wed Aug 31 12:24:52 2011 +0300 Test failed StreamTubeServer Offer STS line coverage 65.6% tests/dbus/stream-tube-handlers.cpp | 85 ++++++++++++++++++++++++++++------- 1 file changed, 69 insertions(+), 16 deletions(-) commit 5af43be72c28f6d795fbcb52f853b67e0d0dba60 Author: Olli Salli Date: Tue Aug 30 21:08:02 2011 +0300 Further test that STS successfully offers a tube and correctly signals when it's closed STS line coverage 61.8% Next up testing a failed offer and finally connection tracking, which should bring this to >= ~90%. tests/dbus/stream-tube-handlers.cpp | 72 +++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) commit 26587225dca618aeae4fd43ceba677ab6904a10f Author: Olli Salli Date: Tue Aug 30 21:06:24 2011 +0300 Test StreamTubeServer setting recovery accessors tests/dbus/stream-tube-handlers.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) commit bdc804264a15642ec20ff4551c9267e7965c66b6 Author: Olli Salli Date: Tue Aug 30 19:27:26 2011 +0300 Test that SimpleStreamTubeHandler doesn't get wedged from improper invocations/usage SSTH line coverage 90.0% tests/dbus/stream-tube-handlers.cpp | 145 ++++++++++++++++++++++++++++++----- 1 file changed, 127 insertions(+), 18 deletions(-) commit 55ac5aaa69202e3fc936185c44be008c162dc227 Author: Olli Salli Date: Tue Aug 30 19:07:52 2011 +0300 SimpleStreamTubeHandler: Finish completely irrational invocations with TP_QT4_ERROR_CONFUSED Previously, they'd just linger around in the invocation queue, even preventing further invocations from being signaled. TelepathyQt4/simple-stream-tube-handler.cpp | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) commit 14236422e94aa5f4bf7af31031c3b924b8aa335e Author: Olli Salli Date: Tue Aug 30 17:40:34 2011 +0300 SimpleStreamTubeHandler: Remove dead weight accountForTube() and tubes() The equivalent is now done internally in the public ST[SC] classes SSTH line coverage 74.5% TelepathyQt4/simple-stream-tube-handler.cpp | 16 ---------------- TelepathyQt4/simple-stream-tube-handler.h | 3 --- 2 files changed, 19 deletions(-) commit 27b6b3a0ac152e7ed6ee7fb781f0d3ca6d625fd5 Author: Olli Salli Date: Fri Aug 26 15:37:35 2011 +0300 Test basic StreamTubeServer export/handle operation SSTHandler coverage 70%, STS 43% tests/dbus/stream-tube-handlers.cpp | 396 ++++++++++++++++++++++++++++++++--- 1 file changed, 367 insertions(+), 29 deletions(-) commit 8713b848d4bc5a0894120cd26ec91016d384cda7 Author: Olli Salli Date: Thu Aug 25 15:29:39 2011 +0300 Test ST[CS] registration Coverage 15-25% tests/dbus/stream-tube-handlers.cpp | 118 ++++++++++++++++++++++++++++++++++- 1 file changed, 117 insertions(+), 1 deletion(-) commit 830d07b06ebff8785a4500b4f03e55b7aee2da2a Author: Olli Salli Date: Thu Aug 25 15:04:01 2011 +0300 StreamTubeClient: Add isRegistered() for verifying registration was successful Also fixes trying to unregister non-registered handlers on destruction TelepathyQt4/stream-tube-client.cpp | 7 ++++++- TelepathyQt4/stream-tube-client.h | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) commit 3adb66601109e83c88a678b631f6744efb2e1514 Author: Olli Salli Date: Wed Aug 24 18:46:14 2011 +0300 Add skeleton test for the simple stream tube handlers tests/dbus/CMakeLists.txt | 1 + tests/dbus/stream-tube-handlers.cpp | 183 +++++++++++++++++++++++++++++++++++ 2 files changed, 184 insertions(+) commit e0b1e09bbff7601155a81276862dba1541747057 Author: Olli Salli Date: Wed Aug 24 18:24:21 2011 +0300 StreamTubeServer::TubeWrapper: Remove (in the end) useless mParams storing TelepathyQt4/stream-tube-server-internal.h | 1 - TelepathyQt4/stream-tube-server.cpp | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) commit 4448da716fcfcde3aef3079ae48b54bc3ca2a0c6 Author: Olli Salli Date: Wed Aug 24 18:24:07 2011 +0300 StreamTubeClient::TubeWrapper: Make member naming consistent TelepathyQt4/stream-tube-client-internal.h | 4 ++-- TelepathyQt4/stream-tube-client.cpp | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) commit 150d576d1531426f2d1deabcc881ca5a0833ba4c Author: Olli Salli Date: Wed Aug 24 18:10:33 2011 +0300 StreamTube{Client,Server}: Support being a Handler for Room stream tubes TelepathyQt4/simple-stream-tube-handler.cpp | 25 +++++++++++++----- TelepathyQt4/simple-stream-tube-handler.h | 6 +++-- TelepathyQt4/stream-tube-client.cpp | 37 +++++++++++++++++---------- TelepathyQt4/stream-tube-client.h | 15 +++++++---- TelepathyQt4/stream-tube-server.cpp | 37 +++++++++++++++++---------- TelepathyQt4/stream-tube-server.h | 15 +++++++---- examples/stream-tubes/tube-initiator.cpp | 3 ++- 7 files changed, 90 insertions(+), 48 deletions(-) commit 78bf0a712728e5ef96806c2602accefda9a6ef69 Author: Olli Salli Date: Mon Aug 22 22:04:14 2011 +0300 StreamTubeClient: Implement connection monitoring TelepathyQt4/stream-tube-client-internal.h | 5 +++ TelepathyQt4/stream-tube-client.cpp | 51 ++++++++++++++++++++++++++++ TelepathyQt4/stream-tube-client.h | 12 ++++++- 3 files changed, 67 insertions(+), 1 deletion(-) commit 3ce59efbd5d4b960bc34225a4dd6cfa9a176465a Author: Olli Salli Date: Mon Aug 22 21:28:02 2011 +0300 StreamTubeServer: Remove tube requested/closed slots StreamTube Channels getting opened and closed is a lower level concept and not as interesting to the average user of this API as exporting sockets and connection tracking. Also, channels getting dispatched and closed is not a tubes-specific mechanism, but common to all channels. examples/stream-tubes/tube-initiator.cpp | 25 ------------------------- examples/stream-tubes/tube-initiator.h | 4 ---- 2 files changed, 29 deletions(-) commit 1b77f30f2a0693357673cc631dac215927ea6a54 Author: Olli Salli Date: Mon Aug 22 21:25:42 2011 +0300 Tube initiator example: Demonstrate connection monitoring examples/stream-tubes/tube-initiator.cpp | 75 ++++++++++++++++++++++-------- examples/stream-tubes/tube-initiator.h | 11 ++++- 2 files changed, 65 insertions(+), 21 deletions(-) commit 58840bc9dc2c486c09da681108b130c94dfb59db Author: Olli Salli Date: Mon Aug 22 21:21:18 2011 +0300 StreamTubeServer: Implement connection monitoring TelepathyQt4/stream-tube-server-internal.h | 5 +- TelepathyQt4/stream-tube-server.cpp | 72 +++++++++++++++++++++++++++- TelepathyQt4/stream-tube-server.h | 9 ++++ 3 files changed, 84 insertions(+), 2 deletions(-) commit 4b99d563442961bc78e4da2a138072f97f0f1c7c Author: Olli Salli Date: Fri Aug 19 14:51:54 2011 +0300 STS: Implement tubes(), connections() TelepathyQt4/stream-tube-server.cpp | 43 +++++++++++++++++++++++++++++++++++ TelepathyQt4/stream-tube-server.h | 2 +- 2 files changed, 44 insertions(+), 1 deletion(-) commit 5fe720ee275b397b7b2c80ff471b97550956a2fc Author: Olli Salli Date: Fri Aug 19 14:40:00 2011 +0300 STC: Implement tubes(), connections() TelepathyQt4/stream-tube-client.cpp | 31 +++++++++++++++++++++++++++++++ TelepathyQt4/stream-tube-client.h | 2 +- 2 files changed, 32 insertions(+), 1 deletion(-) commit 1e49302a5d3c67728deed2a7e91c9958396edcdc Author: Olli Salli Date: Fri Aug 19 14:26:17 2011 +0300 STC: Reorder acceptsAsUnix() impl to correct position TelepathyQt4/stream-tube-client.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit b70ec85b2b677774499427260238ca10e5961484 Author: Olli Salli Date: Thu Aug 18 22:29:03 2011 +0300 STC: Make it possible to set BypassApproval=True Wouldn't be useful for STS, as it exclusively handles requested channels, which don't go through the approver anyway. TelepathyQt4/simple-stream-tube-handler.cpp | 12 ++++++---- TelepathyQt4/simple-stream-tube-handler.h | 9 +++++--- TelepathyQt4/stream-tube-client.cpp | 32 ++++++++++++++++++--------- TelepathyQt4/stream-tube-client.h | 15 ++++++++----- 4 files changed, 45 insertions(+), 23 deletions(-) commit d174ea82415564dce6f19a1b99c5184a9e229614 Author: Olli Salli Date: Thu Aug 18 20:49:15 2011 +0300 StreamTubeServer: Make it possible to specify Offer parameters per-tube TelepathyQt4/stream-tube-server.cpp | 119 +++++++++++++++++++++++++++++------ TelepathyQt4/stream-tube-server.h | 20 ++++++ 2 files changed, 121 insertions(+), 18 deletions(-) commit e2044b14ac74032c1f3d38906191c175e35b43d2 Author: Olli Salli Date: Thu Aug 18 14:42:22 2011 +0300 StreamTubeServer: Implement using wrappers, similarly to STC Important for the next few additions TelepathyQt4/CMakeLists.txt | 2 + TelepathyQt4/stream-tube-server-internal.h | 52 +++++++++++++ TelepathyQt4/stream-tube-server.cpp | 113 ++++++++++++++++------------ TelepathyQt4/stream-tube-server.h | 8 +- 4 files changed, 125 insertions(+), 50 deletions(-) commit ef35dddd397b05468a9bd29c5b50751109363c7b Author: Olli Salli Date: Thu Aug 18 14:41:38 2011 +0300 StreamTubeClient: Delete wrapper immediately on tube invalidate TelepathyQt4/stream-tube-client.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c3d698eb9802e6d1e21125f60de2ee4370eac7a8 Author: Olli Salli Date: Thu Aug 18 14:41:14 2011 +0300 StreamTubeClient: Only close tube on accept failure if not closed already TelepathyQt4/stream-tube-client.cpp | 4 ++++ 1 file changed, 4 insertions(+) commit 311b5f1395362a6d67dbc527b8ac63bdb2ac1c94 Author: Olli Salli Date: Fri Aug 12 16:32:16 2011 +0300 tube-receiver example: Port to StreamTubeClient examples/stream-tubes/tube-receiver.cpp | 146 +++---------------------------- examples/stream-tubes/tube-receiver.h | 15 +--- 2 files changed, 15 insertions(+), 146 deletions(-) commit cb990d8e2573f3b3bdc626de8215c1834dd95728 Author: Olli Salli Date: Fri Aug 12 16:31:27 2011 +0300 StreamTubeClient: Implement basic operation TelepathyQt4/CMakeLists.txt | 2 + TelepathyQt4/stream-tube-client-internal.h | 54 ++++++++ TelepathyQt4/stream-tube-client.cpp | 204 +++++++++++++++++++++++++--- TelepathyQt4/stream-tube-client.h | 16 ++- 4 files changed, 253 insertions(+), 23 deletions(-) commit efa46f32f5f32aea9ed1945a758e8d3b296fe42b Author: Olli Salli Date: Wed Aug 10 17:51:50 2011 +0300 TubeInitiator example: Fire up tube when the remote contact has the capability to receive examples/stream-tubes/tube-initiator.cpp | 121 ++++++------------------------ examples/stream-tubes/tube-initiator.h | 10 +-- 2 files changed, 26 insertions(+), 105 deletions(-) commit 781f9cf6fa0bbcf423cc88911dce70e8861ab594 Author: Olli Salli Date: Mon Aug 8 14:07:39 2011 +0300 StreamTubeServer: only register the Client once a socket has been exported Otherwise there's a race condition where the Client can be invoked before it has anything to do with the tubes. TelepathyQt4/stream-tube-server.cpp | 33 +++++++++++++++++------------- TelepathyQt4/stream-tube-server.h | 1 + examples/stream-tubes/tube-initiator.cpp | 1 + 3 files changed, 21 insertions(+), 14 deletions(-) commit 28e8e74feeb5bdd213d389e5655e4aceb6f2acec Author: Olli Salli Date: Tue Jul 26 18:53:01 2011 +0300 StreamTubeServer: Implement tubeRequested, tubeClosed TelepathyQt4/pending-operation.h | 1 + TelepathyQt4/simple-stream-tube-handler.cpp | 7 ++- TelepathyQt4/simple-stream-tube-handler.h | 1 + TelepathyQt4/stream-tube-server.cpp | 77 +++++++++++++++++++++++++-- TelepathyQt4/stream-tube-server.h | 10 +++- examples/stream-tubes/tube-initiator.cpp | 31 ++++++++++- examples/stream-tubes/tube-initiator.h | 5 ++ 7 files changed, 125 insertions(+), 7 deletions(-) commit c40f9fe9e885d48c8946350900941cf71130b89e Author: Olli Salli Date: Thu May 5 14:17:07 2011 +0300 Draft StreamTubeClient API and implement common bits TelepathyQt4/CMakeLists.txt | 4 + TelepathyQt4/StreamTubeClient | 13 ++ TelepathyQt4/stream-tube-client.cpp | 224 +++++++++++++++++++++++++++++++++++ TelepathyQt4/stream-tube-client.h | 180 ++++++++++++++++++++++++++++ TelepathyQt4/types.h | 2 + 5 files changed, 423 insertions(+) commit ea72adf73ea8b108634a22c15e184b99995eddb8 Author: Olli Salli Date: Wed May 4 14:18:20 2011 +0300 TubeInitiator example: Fix remote contact presence handling The signal it was trying to connect to was removed in 0.5. examples/stream-tubes/tube-initiator.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) commit ed7d11d697151091f692019275cdee9f7b6f176f Author: Olli Salli Date: Wed May 4 14:17:01 2011 +0300 TubeInitiator example: Use StreamTubeServer to export the service examples/stream-tubes/tube-initiator.cpp | 104 ++++++++++-------------------- examples/stream-tubes/tube-initiator.h | 6 +- 2 files changed, 37 insertions(+), 73 deletions(-) commit 46bdd6718ee806bf812ed9cde55891ebd5ab4ec9 Author: Olli Salli Date: Wed May 4 14:13:08 2011 +0300 StreamTubeServer: Implement handling by offering connections Still missing connection tracking and tracking the tube lifetime, though. TelepathyQt4/stream-tube-server.cpp | 230 +++++++++++++++++++++++++++++++++++ TelepathyQt4/stream-tube-server.h | 11 +- 2 files changed, 238 insertions(+), 3 deletions(-) commit 1eec300dc55659d6cee3f7bce54860dd29bf0069 Author: Olli Salli Date: Wed May 4 14:11:43 2011 +0300 SimpleStreamTubeHandler: Be a bit more graceful handling non-matching channels This is needed because Gabble always gives us a bundle with an old-style Tubes channel, which we don't want to trip on. TelepathyQt4/simple-stream-tube-handler.cpp | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) commit 1633499e05313ecc539cb3fc55d063bde9d16d10 Author: Olli Salli Date: Tue May 3 23:00:22 2011 +0300 StreamTubeServer: Add registrar() and clientName() accessors TelepathyQt4/stream-tube-server.h | 2 ++ 1 file changed, 2 insertions(+) commit d62dae901997a31ff9f1b9719247efdad6888fbe Author: Olli Salli Date: Tue May 3 21:55:35 2011 +0300 StreamTubeServer: Add namespace to signal args TelepathyQt4/stream-tube-server.h | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) commit 4f8391c8eed8c06c0cab99dc69636442341e2de7 Author: Olli Salli Date: Tue May 3 21:06:42 2011 +0300 Add SimpleStreamTubeHandler implementation helper Internal for now. Could perhaps be generalized to a generic "simple handler"... but it's a slightly risky public class, as the user has to make sure they somehow handle all emitted channels and don't ignore some. TelepathyQt4/CMakeLists.txt | 2 + TelepathyQt4/simple-stream-tube-handler.cpp | 241 +++++++++++++++++++++++++++ TelepathyQt4/simple-stream-tube-handler.h | 112 +++++++++++++ 3 files changed, 355 insertions(+) commit 5947c8fafdb6d63ecb814c25b363e00edf61a631 Author: Olli Salli Date: Mon May 2 22:12:46 2011 +0300 StreamTubeServer: Make it possible to handle multiple services TelepathyQt4/stream-tube-server.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit d1bdc2cd4802e46fecf1cbe82a50a1c764f212f7 Author: Olli Salli Date: Mon May 2 21:45:38 2011 +0300 StreamTubeServer: Make compile TelepathyQt4/CMakeLists.txt | 4 ++++ TelepathyQt4/StreamTubeServer | 13 ++++++++++++ TelepathyQt4/stream-tube-server.cpp | 37 +++++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+) commit 88dbb78644fc51394873e0a18b1f8492bb9002f0 Author: Olli Salli Date: Fri Apr 29 22:04:06 2011 +0300 Make the usage of accounts in the roster example similar to the tubes example Specific improvements: - You specify the account name as would be reported by mc-tool list, not a full D-Bus object path - There are helpful messages when one gives an invalid or valid but offline account examples/roster/main.cpp | 2 +- examples/roster/roster-window.cpp | 16 ++++++++++++---- examples/roster/roster-window.h | 2 +- 3 files changed, 14 insertions(+), 6 deletions(-) commit 941a41c29d3983833c6b70cfe04fdc164fb95838 Author: Olli Salli Date: Fri Apr 29 21:57:28 2011 +0300 Tubes example: Use Accounts from the AM rather than poking CMs directly Unfortunately, as we're using MC for the accounts, and haven't implemented a proper Handler yet, MC closes the tube channels as they don't have any proper handlers. So the example doesn't quite work yet. examples/stream-tubes/tube-initiator.cpp | 89 +++++++++++++----------------- examples/stream-tubes/tube-initiator.h | 12 ++-- examples/stream-tubes/tube-receiver.cpp | 85 ++++++++++++---------------- examples/stream-tubes/tube-receiver.h | 10 ++-- 4 files changed, 82 insertions(+), 114 deletions(-) commit 115df65775c9faddd6e3a519e692a5eae276e471 Author: Olli Salli Date: Fri Apr 29 20:51:47 2011 +0300 Import Dario Freddi's old low-level stream tubes example I'll use this as a basis for testing and demonstrating the new tubes convenience API. As the first thing I'll port it to use an Account, not ConnectionManager connection requesting directly. When the tube handling convenience API is done, I'll make it an exemplary user of that API: requesting the tubes from the Account and handling them using StreamTubeServer/StreamTubeClient. examples/CMakeLists.txt | 1 + examples/stream-tubes/CMakeLists.txt | 29 +++ examples/stream-tubes/tube-initiator.cpp | 343 ++++++++++++++++++++++++++++++ examples/stream-tubes/tube-initiator.h | 80 +++++++ examples/stream-tubes/tube-receiver.cpp | 242 +++++++++++++++++++++ examples/stream-tubes/tube-receiver.h | 68 ++++++ 6 files changed, 763 insertions(+) commit f9149bacc82b069d20c522d0e9a50805c91bec4f Author: Olli Salli Date: Tue Apr 26 17:43:05 2011 +0300 StreamTubeServer: Identify tubes by (account, channel) pairs, not just channel TelepathyQt4/stream-tube-server.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit e86c6c66ee8d0ee17245ba32c29523aa8ba97208 Author: Olli Salli Date: Tue Apr 26 17:42:35 2011 +0300 StreamTubeServer: Make dtor virtual TelepathyQt4/stream-tube-server.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 2c2dec66fb81eb4ac5def1b117e4f7068f10e74f Author: Olli Salli Date: Tue Apr 26 15:12:36 2011 +0300 StreamTubeServer: Change tubeCreated -> tubeRequested and add params This is to emphasis the fact that it's legal (although unexpected) that it's going to be emitted multiple times for a single tube, if EnsureChannel has been used, in which case we want the new user action time and hints to be passed to the handler. TelepathyQt4/stream-tube-server.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit e1e212c6fbd057cbad8580dcdf9b605c4c2746e3 Author: Olli Salli Date: Mon Apr 25 23:38:42 2011 +0300 StreamTubeServer: Add monitorsConnections() getter TelepathyQt4/stream-tube-server.h | 2 ++ 1 file changed, 2 insertions(+) commit f02c4751e6272a6fef7a9843a9d57536891e74ae Author: Olli Salli Date: Mon Apr 25 23:38:13 2011 +0300 StreamTubeServer: Have a sensible clientName param in each create() overload TelepathyQt4/stream-tube-server.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) commit fb825cd022f3e2c9e391ba515340072936339c1c Author: Olli Salli Date: Mon Apr 25 23:20:56 2011 +0300 Draft StreamTubeServer API TelepathyQt4/stream-tube-server.h | 152 +++++++++++++++++++++++++++++++++++++ TelepathyQt4/types.h | 2 + 2 files changed, 154 insertions(+) commit fd1583bc7d6456a050782455529150291cdd6995 Author: Olli Salli Date: Mon Oct 10 19:17:27 2011 +0300 Update NEWS NEWS | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 48eadfeac28d9bad76816ac46fec290326ddcd23 Merge: 0758e40 4495535 Author: Olli Salli Date: Mon Oct 10 19:14:18 2011 +0300 Merge branch 'stale-todo-comments' Reviewed-by: Andre Magalhaes (andrunko) commit 44955355dc52790901f60a3782f81bb0e10e86ad Author: Olli Salli Date: Mon Oct 10 19:13:08 2011 +0300 Put the \todo for using propertyChanged() for more classes in the signal doc, not Object overview TelepathyQt4/object.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit bc4493dc425808ec4480688a56c66744769f2285 Author: Olli Salli Date: Mon Oct 10 19:08:13 2011 +0300 Migrate from the separate TODO file to using doxygen \todos Everything formerly in the TODO file is now a \todo, except for most of it which was out of date and already fixed. Oh well, shows that the separate file wasn't a very good idea. HACKING | 3 +++ TODO | 22 ---------------------- 2 files changed, 3 insertions(+), 22 deletions(-) commit 4665982782456a9c7e6340f4d6bf1f457831ed72 Author: Olli Salli Date: Mon Oct 10 19:06:19 2011 +0300 Tp::Object: Add \todo to use for more classes TelepathyQt4/object.cpp | 2 ++ 1 file changed, 2 insertions(+) commit c979d00f78a58e1f9d493fbdc2b72b2be3ff5a10 Author: Olli Salli Date: Mon Oct 10 19:03:51 2011 +0300 Add \todos about removing KeyFile and possibly ManagerFile from our public API TelepathyQt4/key-file.cpp | 4 ++++ TelepathyQt4/manager-file.cpp | 3 +++ 2 files changed, 7 insertions(+) commit e31c9b41a56c2ee3e886bb88051f35db078c7354 Author: Olli Salli Date: Mon Oct 10 18:57:51 2011 +0300 Add TODO to Channel about extracting immutable props on construction already TelepathyQt4/channel.cpp | 3 +++ 1 file changed, 3 insertions(+) commit b18220e798cd50b8cbf1d713ce6fb2c16ff585cc Author: Olli Salli Date: Mon Oct 10 18:43:23 2011 +0300 Remove two stale doxygen \todos in ChannelFactory TelepathyQt4/channel-factory.cpp | 4 ---- 1 file changed, 4 deletions(-) commit 09c1e6b724ed479373ba20b44b59ff0636c50bce Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 7 03:26:05 2011 -0300 contacts-avatar: Add test for ContactManager::requestContactAvatars. tests/dbus/contacts-avatar.cpp | 95 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 94 insertions(+), 1 deletion(-) commit d970515d014d61a268d360ba82baca3226329c60 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 7 03:25:04 2011 -0300 ContactManager: Refactor request avatar handling and add test for requestContactAvatars. TelepathyQt4/contact-manager.cpp | 91 ++++++++++++++++++++++---------------- 1 file changed, 53 insertions(+), 38 deletions(-) commit 72e4a94e698d92bb44a39f074e0c284e81d83426 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 7 02:53:19 2011 -0300 contacts-conn example cm: Allow to change avatar without emitting AvatarUpdated. tests/dbus/contacts-avatar.cpp | 2 +- tests/lib/glib/contacts-conn.c | 10 +++++++--- tests/lib/glib/contacts-conn.h | 3 ++- 3 files changed, 10 insertions(+), 5 deletions(-) commit 3e1970561eb48cd0d0c3f5797ad9d57e2f09315e Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 7 01:02:09 2011 -0300 Contact: Use ContactPtr(this) instead of ContactManager::lookupContactByHandle(selfHandle). TelepathyQt4/contact.cpp | 44 +++++++++++++++----------------------------- 1 file changed, 15 insertions(+), 29 deletions(-) commit 8fb5ca1842046a46847ebfb61ca876943e399bd1 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 7 01:00:24 2011 -0300 ContactManager: Rename refreshContactsInfo to refreshContactInfo. TelepathyQt4/contact-manager.cpp | 2 +- TelepathyQt4/contact-manager.h | 2 +- TelepathyQt4/contact.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) commit 9b06c800ed63878554206fb72b012525e307a21c Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 7 00:59:02 2011 -0300 ContactManager: Elaborate a bit more in the requestContactAvatars docs. TelepathyQt4/contact-manager.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 885f5c3add59579a244900a7ec51f652a5e892ea Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 7 00:58:43 2011 -0300 ContactManager: Rename requestContactsAvatar to requestContactAvatars. TelepathyQt4/contact-manager.cpp | 4 ++-- TelepathyQt4/contact-manager.h | 2 +- TelepathyQt4/contact.cpp | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) commit 0758e40c02d0f2769696e501750b5743832bc50b Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 7 00:26:16 2011 -0300 Start 0.7.4 development CMakeLists.txt | 2 +- NEWS | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) commit b4e9eab2a1442ceee21094820fcb14af488a40a6 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 7 00:14:20 2011 -0300 Prepare release 0.7.3 CMakeLists.txt | 4 ++-- NEWS | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit 27064f7c42efa0716e6a8cae3228bc531b8cfe3a Author: Olli Salli Date: Thu Oct 6 23:16:28 2011 +0300 Update NEWS NEWS | 2 ++ 1 file changed, 2 insertions(+) commit 01c911b73c9d89a656ae55704c112815d560afe0 Merge: 47afaff 3af1b3c Author: Olli Salli Date: Thu Oct 6 23:14:29 2011 +0300 Merge branch 'drdanz_logging' Reviewed-by: Olli Salli (oggis) commit 3af1b3c29bf11f9b90d5aedaad3795812a7c548c Author: Olli Salli Date: Thu Oct 6 23:13:18 2011 +0300 Use the typedef for declaring the debug callback global variable TelepathyQt4/debug.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6d5c9dadd13e7cdedcf2c45347d9ec40f43ab1b5 Author: Daniele E. Domenichelli Date: Fri Sep 30 21:17:33 2011 +0100 Add documentation for enhancements in debug system TelepathyQt4/debug.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) commit bd2b85e4879b26436a7bc8993d71a66ad27d8288 Author: Daniele E. Domenichelli Date: Fri Sep 30 21:16:42 2011 +0100 Enhance debug system Add a new method Tp::setDebugCallback that allows to set a method that will be called to get the output stream for debugging information. This allows to redirect debug output to other logging system (i.e. KDebug) TelepathyQt4/debug-internal.h | 21 +++++++++++++++++---- TelepathyQt4/debug.cpp | 36 ++++++++++++++++++++++++++++++++++-- TelepathyQt4/debug.h | 6 ++++++ 3 files changed, 57 insertions(+), 6 deletions(-) commit 47afaffcb4ffb7b282c3af1109917625a03c2760 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 5 10:54:59 2011 -0300 Update NEWS NEWS | 2 ++ 1 file changed, 2 insertions(+) commit 81f95f315aa1b90f9b94f244b763b4aea1971ff2 Merge: cfc19d3 3f56048 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 5 10:54:11 2011 -0300 Merge branch 'stube-channel-api-break-fix' Reviewed-by: Olli Salli (oggis) commit 3f56048f77d68bcf6d539ca1efd47d47c2f7367a Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 5 10:18:09 2011 -0300 StreamTubeChannel: Reintroduce exported protected method setBaseTubeType. TelepathyQt4/stream-tube-channel.cpp | 9 +++++++++ TelepathyQt4/stream-tube-channel.h | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) commit cfc19d377d7ce14e750b3fbc0e80a2ed588f6067 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 3 14:38:40 2011 -0300 Update NEWS NEWS | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit c2c80680f6794e003d0e2ee659d55687e42b2e52 Merge: b492683 46a1d8b Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 3 14:33:31 2011 -0300 Merge branch 'socket-addr-tests' Reviewed-by: Olli Salli (oggis) commit b4926838f56b5563508ffd2327d71c8378ee728b Merge: 79d26c7 19041ba Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 3 14:33:22 2011 -0300 Merge branch 'other-tests' Reviewed-by: Olli Salli (oggis) commit 79d26c7756caeddada6073a3f8e26d8c8cfc20db Merge: dc76294 74ea460 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 3 14:33:11 2011 -0300 Merge branch 'channel-factory-tests' Reviewed-by: Olli Salli (oggis) commit dc76294529bc7f41c40adb13951d0a9ff7e8f8d7 Merge: 45817cd 687675c Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 3 14:32:53 2011 -0300 Merge branch 'caps-tests' Reviewed-by: Olli Salli (oggis) commit 46a1d8b3f6b1cd85e187c9c45429426dca1cff97 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 3 12:18:13 2011 -0300 types-internal.h: Export SUSocketAddress so tests can actually test it. TelepathyQt4/types-internal.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit ca26f2c63e2e35cad4ad6ef3c77c6389233f4887 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 30 13:53:03 2011 -0300 ContactManager: Remove private refreshContactInfo in favour of public refreshContactsInfo. TelepathyQt4/contact-manager.cpp | 37 +++++++++++++++++++++++++------------ TelepathyQt4/contact-manager.h | 3 ++- TelepathyQt4/contact.cpp | 3 ++- 3 files changed, 29 insertions(+), 14 deletions(-) commit 1c0dc995aef7add9ad622e6c5d204443a547d9e4 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 30 12:00:21 2011 -0300 ContactManager: Deprecated public requestContactAvatar in favour of requestContactsAvatar. TelepathyQt4/contact-manager.cpp | 76 +++++++++++++++++++++++++------------- TelepathyQt4/contact-manager.h | 3 +- TelepathyQt4/contact.cpp | 6 ++- 3 files changed, 57 insertions(+), 28 deletions(-) commit 6e8f1ed5cf72cb17fe9c70c432854e08c1e7d707 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 30 10:32:14 2011 -0300 ContactManager: Make debug less verbose when calling RefreshContactInfo. TelepathyQt4/contact-manager.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 907a75662f50272571ef98cb32755f1da0e19a3f Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 29 20:30:07 2011 -0300 contacts-info test: Check that Contact::refreshInfo operation returns succesfully. tests/dbus/contacts-info.cpp | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) commit 856432a7d6ab21069d6323de34f9acc404b53ed2 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 29 20:20:30 2011 -0300 Contact: Retain the contact as the parent of the PendingFailure when calling refreshInfo with FeatureInfo not requested. TelepathyQt4/contact.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 9c46cea00ce70160bd43841546843e921b2c00a7 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 29 20:17:21 2011 -0300 ContactManager: Use a better variable name for the pending refresh info operation. TelepathyQt4/contact-manager.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) commit 2ca30f167da3c4db60a16796425b70cce3d24636 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 29 20:15:01 2011 -0300 ContactManager: Add debug/warning for invoking RefreshContactInfo. TelepathyQt4/contact-manager.cpp | 4 ++++ 1 file changed, 4 insertions(+) commit cf5eb05a3f30f982463fb4886de7a3e7b76b206c Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 28 15:46:27 2011 -0300 Contact: Use ContactManager::requestContactInfo() on requestInfo(). TelepathyQt4/contact.cpp | 19 ++++--------------- tests/dbus/contacts-info.cpp | 2 +- 2 files changed, 5 insertions(+), 16 deletions(-) commit c79e4de31f07d34276e58f7f4f5472d7457ac989 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 28 15:45:56 2011 -0300 ContactManager: Add requestContactInfo() private API to be used by Contact. TelepathyQt4/contact-manager.cpp | 27 ++++++++++++++++++++++++++- TelepathyQt4/contact-manager.h | 4 ++++ 2 files changed, 30 insertions(+), 1 deletion(-) commit c2ec26978907f383ac537789223c80ae193b5883 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 28 15:44:57 2011 -0300 ContactManager: Add internal pending operation to refresh contacts info in batch. TelepathyQt4/contact-manager-internal.h | 20 ++++++++++++ TelepathyQt4/contact-manager.cpp | 51 +++++++++++++++++++++++++++++++ TelepathyQt4/contact-manager.h | 2 ++ 3 files changed, 73 insertions(+) commit 7e832ab608012184e43dbab0dedeed89062857e1 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 28 15:43:32 2011 -0300 contacts-info test: Add test to check how many times RefreshContactInfo is called. tests/dbus/contacts-info.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) commit 8d85b636b61e1cf74bba771f0c518da4c77dcfef Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 28 15:35:11 2011 -0300 contacts-conn example cm: Make RefreshContactInfo replaces the user info with the default info. This is specially useful when checking that Contact::infoFieldsChanged was emitted in response of Contact::refreshInfo. tests/dbus/contacts-info.cpp | 26 +++++++++++++++++++++++--- tests/lib/glib/contacts-conn.c | 9 ++++++--- 2 files changed, 29 insertions(+), 6 deletions(-) commit e7d79bdbde8a250a103d0bebde344c2a2c4bfc5f Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 28 15:34:18 2011 -0300 contacts-conn example cm: Add a backdoor to check how many times RefreshContactInfo is called. tests/lib/glib/contacts-conn.c | 2 ++ tests/lib/glib/contacts-conn.h | 2 ++ 2 files changed, 4 insertions(+) commit 5e3dfc28356233dca94150c56a9bd876cb60031a Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 28 15:30:50 2011 -0300 contacts-info test: Fix double free. tests/dbus/contacts-info.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) commit d310b0164342d9197c885d7790545252e7dfeb9d Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 28 15:29:52 2011 -0300 contacts-info test: Fix signal disconnection. tests/dbus/contacts-info.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 687675cbfa3b55af159a737b7b8a85c470f2b117 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 29 13:38:14 2011 -0300 capabilities test: Add more tests for ContactCapabilities::*tube*. tests/capabilities.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) commit 4cf73193b5c3310702203ec2c033922ec672c491 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 29 13:15:30 2011 -0300 capabilities test: Add more tests for ConnectionCapabilities::*textChat*. tests/capabilities.cpp | 99 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) commit 837546df3aeb008da9b0dbca4018ed105ee44f5f Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 29 13:03:50 2011 -0300 capabilities test: Add more tests for ConnectionCapabilities::*streamedMedia*. tests/capabilities.cpp | 74 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) commit 9c8447c1cc05f4e511680b0eb7706410dab9a1db Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 28 20:40:01 2011 -0300 capabilities test: Add ContactCapabilities specific tests. tests/capabilities.cpp | 68 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) commit 50cd94638e359258f15a4c4581df0d1c4eae2672 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 28 20:32:41 2011 -0300 capabilities test: Add test for ConnectionCapabilities. tests/CMakeLists.txt | 1 + tests/capabilities.cpp | 135 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 136 insertions(+) commit 9f960da8471f7baf19f6c936d3d6e47c648cb9f9 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 28 20:31:53 2011 -0300 TestBackdoors: Add backdoor to create Contact/ConnectionCapabilities instances from tests. TelepathyQt4/connection-capabilities.h | 3 +++ TelepathyQt4/contact-capabilities.h | 3 +++ TelepathyQt4/test-backdoors.cpp | 12 ++++++++++++ TelepathyQt4/test-backdoors.h | 7 +++++++ 4 files changed, 25 insertions(+) commit 19041babac86a14fcf1afe2ed405711c8dd2fd74 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 28 19:53:05 2011 -0300 presence test: Add PresenceSpec specific tests. tests/presence.cpp | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) commit c8037847f10759e009de6d9e9a6dc5c7160658f3 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 28 19:28:53 2011 -0300 presence test: Add test for Presence. tests/CMakeLists.txt | 1 + tests/presence.cpp | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+) commit e1d8566eea2ba40dd6cd531edd3e1d3660707c74 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 28 19:11:41 2011 -0300 cm-basics test: Test ProtocolParameter default values. tests/dbus/cm-basics.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 74ea46059edb74b859a70135c90904ccfd2c47d3 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 28 18:52:23 2011 -0300 client-factories test: Add more specific tests for ChannelFactory::featuresFor*. tests/dbus/client-factories.cpp | 51 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) commit 72bac8b25529c866c0de16f08e2f720c36ce4703 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 28 17:56:46 2011 -0300 client-factories test: Test individual ChannelFactory::featuresFor* accessors. tests/dbus/client-factories.cpp | 92 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) commit ef45ecb4be666514e005e551dd1d4a7e6b93c1f1 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 28 17:35:41 2011 -0300 client-factories test: Test if channel factories common features are properly added to featuresFor*. tests/dbus/client-factories.cpp | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) commit b277b9c37e9838addefb634f1006602604914c15 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 28 16:55:03 2011 -0300 client-factories test: Check that ChannelFactory::featuresFor* accessors return sensible defaults. tests/dbus/client-factories.cpp | 41 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) commit 12ff250344d5a0c6ef21315c425697b73f459b98 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 30 10:34:30 2011 -0300 types test: Properly capitalize IPv4/6. tests/dbus/types.cpp | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) commit caa88f05c4a40f898b371d2e50cb6f17d489a94f Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 29 21:31:21 2011 -0300 types test: Add tests for SUSocketAddress/SocketAddressIPv4/SocketAddressIPv6 conversions. tests/dbus/CMakeLists.txt | 1 + tests/dbus/types.cpp | 141 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 142 insertions(+) commit 45817cd7e9d8ce73d48fb7289c7e77df4eb982fa Author: Rohan Garg Date: Thu Sep 29 22:03:22 2011 -0300 Presence/Spec: Add operator!= support. Reviewed-by: Andre Magalhaes (andrunko) TelepathyQt4/presence.cpp | 25 +++++++++++++++++++++++++ TelepathyQt4/presence.h | 2 ++ 2 files changed, 27 insertions(+) commit a59d4d45daa5299bc452e8e95ab4e781a824d720 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 23 20:28:42 2011 -0300 Update NEWS NEWS | 1 + 1 file changed, 1 insertion(+) commit 7c46ea1ba94b7343b22795baa5b105bb9d1a0691 Merge: 6549cdf 76f9470 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 23 20:28:16 2011 -0300 Merge branch 'channel-tests' Reviewed-by: Olli Salli (oggis) commit 76f947092a0517ad103159f8d085719f4e931a9d Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 23 20:08:26 2011 -0300 echo2 cm: Add support for message supersedes, message token, scrollback. tests/dbus/text-chan.cpp | 22 +++++++++++++++++++--- tests/lib/glib/echo2/chan.c | 6 ++++++ 2 files changed, 25 insertions(+), 3 deletions(-) commit 3e5b0fd4b779bc67cb3ae75201f2e5b3bbf1bb92 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 23 19:52:25 2011 -0300 echo2 cm: Add delivery-token support for delivery reports. tests/dbus/text-chan.cpp | 4 ++-- tests/lib/glib/echo2/chan.c | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) commit e8a894576c3b6de0a2623142b1c88b518a95ed74 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 23 19:47:11 2011 -0300 chan-conference test: Comment out tests for Channel::FeatureConferenceInitialInviteeContacts as no test CM implements it. tests/dbus/chan-conference.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 76322e7842cdb483104ea5eb6f37eaa224931ce6 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 23 19:46:28 2011 -0300 chan-group test: Properly test TextChannel::canInviteContacts. tests/dbus/chan-group.cpp | 2 ++ 1 file changed, 2 insertions(+) commit e2a1aee10bf307deee6ea8c2f6634a44200f785b Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 23 19:44:47 2011 -0300 chan-group test: Add tests for Channel::groupFlagsChanged. tests/dbus/chan-group.cpp | 71 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 70 insertions(+), 1 deletion(-) commit fa3693b701c0cd061491d5468d93f422b56fdf09 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 23 19:41:45 2011 -0300 textchan-null: Properly advertise channel interfaces. tests/lib/glib/textchan-null.c | 16 ++++++++++++++-- tests/lib/glib/textchan-null.h | 2 ++ 2 files changed, 16 insertions(+), 2 deletions(-) commit 66ae018b74983faab223af66639d91bbafc6ae1e Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 23 18:19:31 2011 -0300 text-chan test: Properly check the error when requestChatState fails with no interface support. tests/dbus/text-chan.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) commit 02696a3777cd6ca32537b74f215d6a5ff58174db Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 23 18:15:59 2011 -0300 chan-conference test: Properly check the error when conferenceSpĺitChannel fails with no interface support. tests/dbus/chan-conference.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 14ecabb69f5340e51c1d293910363f947f30aa7c Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 23 18:07:08 2011 -0300 chan-basics test: Properly check the error when groupAddContacts fails. tests/dbus/chan-basics.cpp | 6 ++++-- tests/dbus/chan-group.cpp | 18 ++++++++++++------ 2 files changed, 16 insertions(+), 8 deletions(-) commit d0d5cc1308081c059943d13a69148bd30e61119f Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 23 18:04:41 2011 -0300 chan-basics test: Properly check the error when becomeReady in a invalid channel fails. tests/dbus/chan-basics.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 08b1a49092a77383dd6f8c488757015409984675 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 23 17:25:42 2011 -0300 test helper: Add properies to retrieve last error received in expectFailure. tests/lib/test.cpp | 7 ++++++- tests/lib/test.h | 4 ++++ 2 files changed, 10 insertions(+), 1 deletion(-) commit 4afa72822a97001a82ffcf895d0dc57505fb0bde Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 23 16:39:58 2011 -0300 text-chan test: Add tests for delivery report support. tests/dbus/text-chan.cpp | 50 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) commit 704b5ab2e576cc5ee4a571d06d86bd988b522dbf Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 23 16:39:46 2011 -0300 text-chan test: Add more Message tests. tests/dbus/text-chan.cpp | 3 +++ 1 file changed, 3 insertions(+) commit 99b02084fa483d4769bd92accd1074e168dc142a Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 23 16:38:17 2011 -0300 echo2 cm: Add delivery report support. tests/lib/glib/echo2/chan.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) commit d910a32f280434b108941d7cd8b6b5023a468df1 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 23 14:01:50 2011 -0300 text-chan test: Add more tests for Channel.ChatState support. tests/dbus/text-chan.cpp | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) commit 39366f0fec0e6f035b1a55c9586fb3e55d05d33f Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 23 14:01:30 2011 -0300 echo2 cm: Add Channel.ChatState support. tests/dbus/text-chan.cpp | 22 +++++++++++++++++++--- tests/lib/glib/echo2/chan.c | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 3 deletions(-) commit fb3baa32001ccef9b50933015f0a0d1506b4202e Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 23 13:23:39 2011 -0300 echo2 cm: Properly adverise supported interface Channel.Destroyable. tests/lib/glib/echo2/chan.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 9e5d95b9ac9e0fdcfd8f999bab76880f87aef591 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 23 13:18:01 2011 -0300 chan-basics/group tests: Add more tests for Channel::groupAddContacts(). tests/dbus/chan-basics.cpp | 6 ++++++ tests/dbus/chan-group.cpp | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+) commit 5b73842391b6ed9d3eaab233393f8ab47477abc1 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 23 13:08:39 2011 -0300 chan-basics test: Test Channel fallback code for GetHandle/ChannelType/Interfaces. tests/dbus/chan-basics.cpp | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) commit 9589c67048ccdc018cfe719fdaf209d7aa20832f Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 20:07:27 2011 -0300 chan-conference: Test that Channel::conferenceSplitChannel() fails if splitting is not supported. tests/dbus/chan-conference.cpp | 4 ++++ 1 file changed, 4 insertions(+) commit 3d91f2d40a618ff0e6d26c65259d3b01c4c9959b Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 20:01:49 2011 -0300 chan-conference: Add more tests to check conference support. tests/dbus/chan-conference.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) commit 389a568b8092f34dac1a17ee9732096155d83de4 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 19:55:17 2011 -0300 chan-group: Add test for Channel::groupIsSelfContactTracked(). tests/dbus/chan-group.cpp | 2 ++ 1 file changed, 2 insertions(+) commit 99ee4389cd56097e09b64021cad6f171ed4e163d Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 19:41:30 2011 -0300 chan-group: Add tests for Channel group flags accessors. tests/dbus/chan-group.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) commit cd16626c57246c3577340322da206375c58a919a Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 19:29:12 2011 -0300 chan-basics test: Add tests for Channel::channelType(). tests/dbus/chan-basics.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit 3eeddbc9be33d8b9c27e4a919338eb6686f79429 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 19:23:24 2011 -0300 chan-basics test: Check that the channel is correctly invalid when creating a channel from an invalid connection. tests/dbus/chan-basics.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) commit 0202730e4f6deb32a428e51ae8b0fde2060cb2f3 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 19:13:53 2011 -0300 chan-conference test: Add test for Channel::FeatureConferenceInitialInviteeContacts. tests/dbus/chan-conference.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) commit 23e9ec7fb4b3f60bb9777e1025decfaffc7c676b Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 19:01:29 2011 -0300 text-chan test: Add test for TextChannel::canInviteContacts(). tests/dbus/text-chan.cpp | 2 ++ 1 file changed, 2 insertions(+) commit 048725eb463213c7d7084fc31b08e26e28545b26 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 19:04:44 2011 -0300 text-chan test: Also check that TextChannel::requestChatState() fails when the interface is not supported. tests/dbus/text-chan.cpp | 5 +++++ 1 file changed, 5 insertions(+) commit 80e3d0dd640a5e8e998a1864417358477bf989d3 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 18:59:54 2011 -0300 text-chan test: Add tests for TextChannel ChatState support. Note that this will only test that the ChatState interface is not supported and that the accessors return sensible data when the interface is not available as no test CM supports the interface. tests/dbus/text-chan.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) commit af051c6a29e9a45961bed585171585a4302b8065 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Sep 6 15:29:56 2011 -0300 chan-basics test: Test redundant calls to Channel::requestClose(). tests/dbus/chan-basics.cpp | 7 +++++++ 1 file changed, 7 insertions(+) commit 6549cdf5086313805e2fdf7a65bf9c103a28f200 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 23 17:46:37 2011 -0300 Update NEWS NEWS | 1 + 1 file changed, 1 insertion(+) commit 388cf5f1abeedde777d0e882527d12d3ad069339 Merge: 2fe00c9 8a7c6ae Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 23 17:45:32 2011 -0300 Merge branch 'examples' Reviewed-by: Olli Salli (oggis) commit 8a7c6ae637501d306d419461af2843655b7336a7 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 23 17:28:52 2011 -0300 file-transfer example: Do not use a virtual slot on PendingFileTransfer. examples/file-transfer/pending-file-receive.cpp | 5 ++++- examples/file-transfer/pending-file-send.cpp | 5 ++++- examples/file-transfer/pending-file-transfer.cpp | 5 ----- examples/file-transfer/pending-file-transfer.h | 4 ++-- 4 files changed, 10 insertions(+), 9 deletions(-) commit 98d9a60ffa15646d52751ffa3773e621349669f2 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 23 17:04:23 2011 -0300 file-transfer example: Rename rop/sop to receive/SendOperation. examples/file-transfer/file-receiver-handler.cpp | 8 ++++---- examples/file-transfer/file-sender.cpp | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) commit 0463a49177f1f826e877cf264da54be6f4c1c103 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 23 16:57:47 2011 -0300 file-transfer example: Rename ift/oftChan to transferChannel for clarity. examples/file-transfer/file-receiver-handler.cpp | 6 +++--- examples/file-transfer/file-sender.cpp | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) commit f56088ac60448f145063c65829146da0af9fffb5 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 23 16:48:10 2011 -0300 file-transfer example: Remove leftover comment. examples/file-transfer/file-receiver.cpp | 1 - 1 file changed, 1 deletion(-) commit e09ffd38682ad46eb9200182f3bd1849449effe5 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 18:17:37 2011 -0300 file-transfer example: Use the R&H API for the sender example. examples/file-transfer/CMakeLists.txt | 2 - examples/file-transfer/file-sender-handler.cpp | 100 ------------------------ examples/file-transfer/file-sender-handler.h | 63 --------------- examples/file-transfer/file-sender.cpp | 54 +++++++++---- examples/file-transfer/file-sender.h | 7 +- 5 files changed, 40 insertions(+), 186 deletions(-) commit ad67044209588c974a07d933b565327cb5173750 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 18:04:34 2011 -0300 file-transfer example: Only enable the needed features in the receiver ClientRegistrar. examples/file-transfer/file-receiver.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) commit eff0d6688046a25b50cb6f703a08362aa0e7e1ff Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 18:00:09 2011 -0300 file-transfer example: Rename mConn/Chan to mConnection/Channel. examples/file-transfer/file-sender.cpp | 4 ++-- examples/file-transfer/file-sender.h | 2 +- examples/file-transfer/pending-file-transfer.cpp | 4 ++-- examples/file-transfer/pending-file-transfer.h | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) commit 710789cb66abaf44a24d3d91cc7b6700a0d0b578 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 17:55:28 2011 -0300 file-transfer example: Rename FT to Transfer where appropriate. examples/file-transfer/file-sender.cpp | 10 +++++----- examples/file-transfer/file-sender.h | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) commit 8383bad94e5caaa25a8f197390b2cbb4e8f4dcfc Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 17:53:18 2011 -0300 file-transfer example: Add comments to asserts in the receiver handler. examples/file-transfer/file-receiver-handler.cpp | 4 ++++ 1 file changed, 4 insertions(+) commit 19a55e2a31a76136bdbbf97f932b6359b49518c1 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 17:48:05 2011 -0300 file-transfer example: Use PendingFileTransfer in PendingFileSend. examples/file-transfer/CMakeLists.txt | 6 +- examples/file-transfer/pending-file-send.cpp | 81 +++++++------------------- examples/file-transfer/pending-file-send.h | 12 ++-- 3 files changed, 29 insertions(+), 70 deletions(-) commit 4ff1f83951afda25e8197ddef17744058eb7295c Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 17:47:34 2011 -0300 file-transfer example: Use PendingFileTransfer in PendingFileReceive. examples/file-transfer/CMakeLists.txt | 6 +- examples/file-transfer/pending-file-receive.cpp | 76 ++++++----------------- examples/file-transfer/pending-file-receive.h | 12 ++-- 3 files changed, 26 insertions(+), 68 deletions(-) commit 697e67213fd51362e478ac8c9ecde12d95469e49 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 17:45:55 2011 -0300 file-transfer example: Add base class for send/receive pending operations. examples/file-transfer/pending-file-transfer.cpp | 98 ++++++++++++++++++++++ examples/file-transfer/pending-file-transfer.h | 56 +++++++++++++ 2 files changed, 154 insertions(+) commit 0da75454310fe14373b0279d4da80760dcf3bd3d Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 14:25:50 2011 -0300 file-transfer example: Rename FTReceiverHandler to FileReceiverHandler. examples/file-transfer/CMakeLists.txt | 4 +- examples/file-transfer/file-receiver-handler.cpp | 92 ++++++++++++++++++++++ examples/file-transfer/file-receiver-handler.h | 64 +++++++++++++++ examples/file-transfer/file-receiver.cpp | 4 +- examples/file-transfer/file-receiver.h | 4 +- examples/file-transfer/ft-receiver-handler.cpp | 92 ---------------------- examples/file-transfer/ft-receiver-handler.h | 64 --------------- 7 files changed, 162 insertions(+), 162 deletions(-) commit 116f8f88ed39eb9b2a8e50b77ef0a318674795ce Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 14:24:09 2011 -0300 file-transfer example: Rename FTReceiver to FileReceiver. examples/file-transfer/CMakeLists.txt | 4 +- examples/file-transfer/file-receiver.cpp | 81 ++++++++++++++++++++++++++++++ examples/file-transfer/file-receiver.h | 46 +++++++++++++++++ examples/file-transfer/ft-receiver.cpp | 81 ------------------------------ examples/file-transfer/ft-receiver.h | 46 ----------------- 5 files changed, 129 insertions(+), 129 deletions(-) commit 1e75c1cb9602b8f261ae5f1f21ec4a6432bcac8e Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 14:22:13 2011 -0300 file-transfer example: Rename FTReceiverHandler to PendingFileReceive. examples/file-transfer/CMakeLists.txt | 4 +- examples/file-transfer/ft-receive-op.cpp | 108 ----------------------- examples/file-transfer/ft-receive-op.h | 55 ------------ examples/file-transfer/ft-receiver-handler.cpp | 6 +- examples/file-transfer/pending-file-receive.cpp | 108 +++++++++++++++++++++++ examples/file-transfer/pending-file-receive.h | 55 ++++++++++++ 6 files changed, 168 insertions(+), 168 deletions(-) commit e7736a61e1dc64dcc3da557967ba2f1864ecc2ee Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 14:19:15 2011 -0300 file-transfer example: Rename FTSenderHandler to FileSenderHandler. examples/file-transfer/CMakeLists.txt | 4 +- examples/file-transfer/file-sender-handler.cpp | 100 ++++++++++++++++++++++++ examples/file-transfer/file-sender-handler.h | 63 +++++++++++++++ examples/file-transfer/file-sender.cpp | 4 +- examples/file-transfer/file-sender.h | 4 +- examples/file-transfer/ft-sender-handler.cpp | 100 ------------------------ examples/file-transfer/ft-sender-handler.h | 63 --------------- 7 files changed, 169 insertions(+), 169 deletions(-) commit addaadf30c4671e9ad8487008282b0d07a97c5fb Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 14:11:33 2011 -0300 file-transfer example: Rename FTSender to FileSender. examples/file-transfer/CMakeLists.txt | 4 +- examples/file-transfer/file-sender.cpp | 249 ++++++++++++++++++++++++++++++++ examples/file-transfer/file-sender.h | 71 +++++++++ examples/file-transfer/ft-sender.cpp | 249 -------------------------------- examples/file-transfer/ft-sender.h | 71 --------- 5 files changed, 322 insertions(+), 322 deletions(-) commit b1d4d4723e345d2213e5f8e0c46fdc0329b952c5 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 14:06:56 2011 -0300 file-transfer example: Rename FTSendOp to PendingFileSend. examples/file-transfer/CMakeLists.txt | 4 +- examples/file-transfer/ft-send-op.cpp | 112 -------------------------- examples/file-transfer/ft-send-op.h | 55 ------------- examples/file-transfer/ft-sender-handler.cpp | 6 +- examples/file-transfer/pending-file-send.cpp | 112 ++++++++++++++++++++++++++ examples/file-transfer/pending-file-send.h | 55 +++++++++++++ 6 files changed, 172 insertions(+), 172 deletions(-) commit b8141878fa7e9ac20695dcef02222daf24c790b6 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 14:02:55 2011 -0300 file-transfer example: Be less verbose on slot names. examples/file-transfer/ft-send-op.cpp | 10 +++++----- examples/file-transfer/ft-send-op.h | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) commit 6fc8508f82559f15185c4dc8039f3fde3e01f69f Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 13:59:18 2011 -0300 file-transfer example: Raise an error if outgoing file transfer channel received does not have the URI set. examples/file-transfer/ft-sender-handler.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 1816f885390602d023b3b44853ec0e361095c64a Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 13:57:33 2011 -0300 file-transfer example: Assert if outgoing file transfer channel received is not the one expected. examples/file-transfer/ft-sender-handler.cpp | 27 +++++--------------------- 1 file changed, 5 insertions(+), 22 deletions(-) commit 9505ad37ea8c4d5d344a87a3060328ce22da8608 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 13:54:59 2011 -0300 file-transfer example: Do not try to close invalid channels, and raise an error when an invalid channel is received on sender handler. examples/file-transfer/ft-sender-handler.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit 551efec8eb5aa9d60bd37da6fedcd7a50c10abd8 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 13:52:00 2011 -0300 file-transfer example: Set an empty filter on the sender handler. examples/file-transfer/ft-sender-handler.cpp | 6 ++++-- examples/file-transfer/ft-sender-handler.h | 6 +++--- examples/file-transfer/ft-sender.cpp | 4 +--- 3 files changed, 8 insertions(+), 8 deletions(-) commit 4576302b759de81fa9857a2acc654f91a5ed0b5e Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 13:37:27 2011 -0300 file-transfer example: Make sender handle file transfers for all accounts. examples/file-transfer/ft-sender-handler.cpp | 11 ++--------- examples/file-transfer/ft-sender-handler.h | 9 +++------ examples/file-transfer/ft-sender.cpp | 2 +- 3 files changed, 6 insertions(+), 16 deletions(-) commit 1de659f7d7b2f2fb88361a5e8597edb3f41f252e Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 13:34:16 2011 -0300 file-transfer example: Do not prepare all accounts on sender if we only care about one. examples/file-transfer/ft-sender.cpp | 23 +++++++++++++++++++++-- examples/file-transfer/ft-sender.h | 1 + 2 files changed, 22 insertions(+), 2 deletions(-) commit 3ba7bdd05e926a0556669cce9c987411c1ffb09e Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 13:29:32 2011 -0300 file-transfer example: Be less verbose on slot names. examples/file-transfer/ft-receive-op.cpp | 10 +++++----- examples/file-transfer/ft-receive-op.h | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) commit f62b01e3c6352b858912f554937a5e6f6151fa78 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 13:25:13 2011 -0300 file-transfer example: Assert if incoming file transfer channel received is not the one expected. examples/file-transfer/ft-receiver-handler.cpp | 27 +++++------------------- 1 file changed, 5 insertions(+), 22 deletions(-) commit c54c47feff051914799d647d4c9d7ea03524f79f Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 13:18:10 2011 -0300 file-transfer example: Do not try to close invalid channels, and raise an error when an invalid channel is received on receiver handler. examples/file-transfer/ft-receiver-handler.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit 9a3de766e7024c3bb0bb39b44aed86aa424423ee Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 13:15:21 2011 -0300 file-transfer example: Do not bypass approval when receiving file transfers. examples/file-transfer/ft-receiver-handler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit fc58d1da56321f09c5630bb09053959e9ca3b74d Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 13:14:35 2011 -0300 file-transfer example: Make receiver handler set its own filter. examples/file-transfer/ft-receiver-handler.cpp | 7 +++++-- examples/file-transfer/ft-receiver-handler.h | 6 +++--- examples/file-transfer/ft-receiver.cpp | 6 +----- 3 files changed, 9 insertions(+), 10 deletions(-) commit 96e92d5d70a044faf889bf4e4bc0dabfdb586a9d Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 13:11:33 2011 -0300 file-transfer example: Make receiver handle file transfers for all accounts. examples/file-transfer/ft-receiver-handler.cpp | 11 +--- examples/file-transfer/ft-receiver-handler.h | 8 +-- examples/file-transfer/ft-receiver.cpp | 73 +++--------------------- examples/file-transfer/ft-receiver.h | 16 +----- 4 files changed, 13 insertions(+), 95 deletions(-) commit 6489b62582c3ed43e89fa9e0594cd040ec1fc999 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 21 18:47:55 2011 -0300 file-transfer example: Add new sender example using AbstractClientHandler. examples/file-transfer/CMakeLists.txt | 10 +- examples/file-transfer/ft-send-op.cpp | 112 +++++++++++++ examples/file-transfer/ft-send-op.h | 55 ++++++ examples/file-transfer/ft-sender-handler.cpp | 118 +++++++++++++ examples/file-transfer/ft-sender-handler.h | 66 ++++++++ examples/file-transfer/ft-sender.cpp | 232 ++++++++++++++++++++++++++ examples/file-transfer/ft-sender.h | 70 ++++++++ 7 files changed, 661 insertions(+), 2 deletions(-) commit d9e609fc7057fe1fec060671c7020ce5746392e7 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 21 18:47:15 2011 -0300 file-transfer example: Add new receiver example using AbstractClientHandler. examples/file-transfer/CMakeLists.txt | 10 +- examples/file-transfer/ft-receive-op.cpp | 108 ++++++++++++++++++ examples/file-transfer/ft-receive-op.h | 55 +++++++++ examples/file-transfer/ft-receiver-handler.cpp | 111 ++++++++++++++++++ examples/file-transfer/ft-receiver-handler.h | 66 +++++++++++ examples/file-transfer/ft-receiver.cpp | 144 ++++++++++++++++++++++++ examples/file-transfer/ft-receiver.h | 60 ++++++++++ 7 files changed, 552 insertions(+), 2 deletions(-) commit 3d67dd328cab5711a549bc01c377cb4f59f6e395 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 21 18:46:28 2011 -0300 file-transfer example: Remove outdated examples. examples/file-transfer/CMakeLists.txt | 14 +- examples/file-transfer/receiver-channel.cpp | 102 -------- examples/file-transfer/receiver-channel.h | 63 ----- examples/file-transfer/receiver.cpp | 179 -------------- examples/file-transfer/receiver.h | 62 ----- examples/file-transfer/sender.cpp | 333 --------------------------- examples/file-transfer/sender.h | 81 ------- 7 files changed, 4 insertions(+), 830 deletions(-) commit 2fe00c9425cfc4c5aa366dc120b3020f919f30bd Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 18:33:33 2011 -0300 Update NEWS NEWS | 2 ++ 1 file changed, 2 insertions(+) commit 9d5ec7c961ee02680f2ec08c0fc07ed0c0aba98a Merge: 58f494d 4e646bc Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 18:31:41 2011 -0300 Merge branch 'feature-checks' Reviewed-by: Olli Salli (oggis) commit 58f494d6870afd6eb93e1553511e10e3f61b4bd8 Author: Olli Salli Date: Thu Sep 22 17:40:08 2011 +0300 Update NEWS NEWS | 2 ++ 1 file changed, 2 insertions(+) commit 72f2fc0004725e13400290e422f4fa921ed18aee Merge: eedcede 543b2de Author: Olli Salli Date: Thu Sep 22 17:38:08 2011 +0300 Merge branch 'tls' Reviewed-by: Olli Salli (oggis) Reviewed-by: Andre Magalhaes (andrunko) commit 543b2de3ecf6cfb87089d972d41be69f21ae23a0 Author: Olli Salli Date: Thu Sep 22 17:13:55 2011 +0300 Make the TLSCert iface build by allowing using arrays of as, ay and av in spec generated stuff tools/libqt4codegen.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit 19157cf85b59fbd4e906524dffb83575acde2ca4 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 22 10:45:02 2011 -0300 Add AuthenticationTLSCertificate interface to autogen. TelepathyQt4/AuthenticationTLSCertificateInterface | 13 ++++++++ TelepathyQt4/CMakeLists.txt | 8 ++++- TelepathyQt4/stable-interfaces.xml | 1 + TelepathyQt4/tls-certificate.cpp | 26 ++++++++++++++++ TelepathyQt4/tls-certificate.h | 31 ++++++++++++++++++++ TelepathyQt4/tls-certificate.xml | 9 ++++++ 6 files changed, 87 insertions(+), 1 deletion(-) commit 4e646bc79f900df55330bc67a08256ee63c91b01 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 21 18:37:55 2011 -0300 Connection: Properly check if FeatureCore is ready. When calling ReadyObject::isReady() without arguments the core feature passed to the ReadyObject constructor is implicitly added to the list of features being checked. Thus for connection subclasses when calling connectionObject->isReady(), what is being checked is whether the core feature of the subclass is ready, not Connection::FeatureCore, thus explicitly passing Connection::FeatureCore when checking if this specific feature is ready is needed. TelepathyQt4/connection.cpp | 8 ++++---- TelepathyQt4/pending-channel.cpp | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) commit 4b4450144d7f1cd1b6901b8e672629ad6bd50f7c Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 21 18:36:48 2011 -0300 Account: Properly check if FeatureCore is ready. When calling ReadyObject::isReady() without arguments the core feature passed to the ReadyObject constructor is implicitly added to the list of features being checked. Thus for account subclasses when calling accountObject->isReady(), what is being checked is whether the core feature of the subclass is ready, not Account::FeatureCore, thus explicitly passing Account::FeatureCore when checking if this specific feature is ready is needed. TelepathyQt4/account.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6698a764abb0f44926c8fb34cab0706d73cb8766 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 21 17:29:56 2011 -0300 Channel: Properly check if FeatureCore is ready. When calling ReadyObject::isReady() without arguments the core feature passed to the ReadyObject constructor is implicitly added to the list of features being checked. Thus for channel subclasses when calling channelObject->isReady(), what is being checked is whether the core feature of the subclass is ready, not Channel::FeatureCore, thus explicitly passing Channel::FeatureCore when checking if this specific feature is ready is needed. TelepathyQt4/channel.cpp | 80 +++++++++++++++++++++++----------------------- 1 file changed, 40 insertions(+), 40 deletions(-) commit eedcede4edc7d95bab3f0bee84298cfb31ba950a Merge: 8a56e5c d5faf15 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 14 16:39:20 2011 +0100 Merge branch 'account-tests' Reviewed-by: Olli Salli (oggis) commit d5faf15f432d211de063840d8eac9fa06870df31 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 14 16:33:30 2011 +0100 profile test: Properly check the presences count now that test-profile.profile was updated. tests/profile.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 494cd36ff36c3b94bc34f9b1e4927cc8668216c9 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 14 16:22:39 2011 +0100 Account: Fix doc referring to non-existing setCurrentPresence(). TelepathyQt4/account.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit de256310fc77d4e9296f23896289100a1c4f7bf8 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Sep 12 15:46:53 2011 +0100 account-basics test: Properly test allowedPresenceStatuses(). tests/dbus/account-basics.cpp | 81 +++++++++++++------------ tests/telepathy/managers/spurious.manager | 5 ++ tests/telepathy/profiles/test-profile.profile | 3 +- 3 files changed, 49 insertions(+), 40 deletions(-) commit f9f18db179b14591f720e9c461e3ae46b9b75026 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Sep 12 15:46:10 2011 +0100 Account: Fixed typo in allowedPresenceStatuses() docs. TelepathyQt4/account.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d845b58d7d7e716afed057d5bc06d8365f42e0e9 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Sep 12 15:06:02 2011 +0100 PresenceSpec: Add operator<. TelepathyQt4/presence.cpp | 13 +++++++++++++ TelepathyQt4/presence.h | 1 + 2 files changed, 14 insertions(+) commit cee857dc4041cf6d2d6f6e24849c223e1a34f590 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 9 02:52:01 2011 -0300 account-basics test: Test that ProtocolInfo does not report bogus parameters. tests/dbus/account-basics.cpp | 2 ++ 1 file changed, 2 insertions(+) commit 092cc35dc6f4f970eb7c212c097d34b9f50038f1 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 9 02:51:33 2011 -0300 account-basics test: Properly test Account::allowedPresenceStatuses(). tests/dbus/account-basics.cpp | 39 +++++++++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 12 deletions(-) commit ef92b859866322bde0bab572e8fd73306c160006 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 9 02:41:43 2011 -0300 account-basics test: Use QVERIFY instead of QCOMPARE for boolean expressions. tests/dbus/account-basics.cpp | 170 ++++++++++++++++++++--------------------- 1 file changed, 85 insertions(+), 85 deletions(-) commit 0ce35ef94d374cde1e29793e4b333438fe513e31 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 9 02:30:01 2011 -0300 account-basics test: Simplify how property related tests are written. tests/dbus/account-basics.cpp | 81 +++++++++-------------------------------- 1 file changed, 17 insertions(+), 64 deletions(-) commit 28d22e1ac616b884a70b23223cba823655134c2d Author: Andre Moreira Magalhaes (andrunko) Date: Mon Sep 5 03:47:02 2011 -0300 account-basics test: Add more tests for Account::allowedPresenceStatuses(). tests/dbus/account-basics.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) commit 1a89f937c59094eae5ca380ed7618787caa07dce Author: Andre Moreira Magalhaes (andrunko) Date: Mon Sep 5 03:45:48 2011 -0300 account-basics test: Test that changing the service name will also update the icon name. tests/dbus/account-basics.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit 27bdece0f35adb854f61af45c66023b1bb05541a Author: Andre Moreira Magalhaes (andrunko) Date: Mon Sep 5 03:44:12 2011 -0300 account-basics test: Add tests for Account.Automatic/Requested/CurrentPresence. tests/dbus/account-basics.cpp | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) commit 9e3aaca341a16cb54abd03bdfc2f951d116bc5c3 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Sep 5 03:42:25 2011 -0300 account-basics test: Add test for Account.ConnectsAutomatically. tests/dbus/account-basics.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 33b839dcc3f8e0edfecf3a4a7fd6ad00d38cf45b Author: Andre Moreira Magalhaes (andrunko) Date: Mon Sep 5 03:40:44 2011 -0300 account-basics test: Add test for Account.Parameters. tests/dbus/account-basics.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) commit 1fad5e0f46985924eca22bcd6b6eefa87dac9db5 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Sep 5 03:37:22 2011 -0300 account-basics test: Add test for Account.Nickname. tests/dbus/account-basics.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) commit 49e789fa9f87ed27e410c120c8a0bcf16672ccbb Author: Andre Moreira Magalhaes (andrunko) Date: Mon Sep 5 03:35:05 2011 -0300 account-basics test: Add test for Account.DisplayName. tests/dbus/account-basics.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) commit 2951ee85cbfd2159d806c77700b75d5b7e8e5049 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Sep 5 03:32:33 2011 -0300 account-basics test: Add more tests to Account::protocolInfo(). tests/dbus/account-basics.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) commit fa03ee6ed0e3a8b46146499ff07359b70fa2318c Author: Andre Moreira Magalhaes (andrunko) Date: Mon Sep 5 03:30:23 2011 -0300 account-basics test: Group profile tests together. tests/dbus/account-basics.cpp | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) commit fe1c95e4ed4dacacad1e40b223f1f6c6a696136c Author: Andre Moreira Magalhaes (andrunko) Date: Mon Sep 5 03:23:13 2011 -0300 account-basics test: Add more tests for initial state download. tests/dbus/account-basics.cpp | 76 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 75 insertions(+), 1 deletion(-) commit 1b11e30c620deccd4cf4821f77947a19b21ab67b Author: Andre Moreira Magalhaes (andrunko) Date: Mon Sep 5 03:21:46 2011 -0300 account-basics test: Check that accounts advertised by the AM have the factory features ready. tests/dbus/account-basics.cpp | 3 +++ 1 file changed, 3 insertions(+) commit 48076a4b797a4551af3dd16dee428041a1ab8f49 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Sep 5 03:15:41 2011 -0300 account-basics test: Use macro to test properties. tests/dbus/account-basics.cpp | 244 +++++++++++++---------------------------- 1 file changed, 75 insertions(+), 169 deletions(-) commit 09724354508d7ec245cb8f2a8dfe98471fe7d850 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Sep 5 02:55:58 2011 -0300 account-basics test: Add test for AccountManager::accountForPaths(). tests/dbus/account-basics.cpp | 5 +++++ 1 file changed, 5 insertions(+) commit 0f32b45ec0da88e1736e9b0b51d12237b4246779 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Sep 5 02:49:08 2011 -0300 account-basics test: Move test for AccountManager::interfaces(). tests/dbus/account-basics.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 797800c7fe40f5a51fc2009aac6a47c956e75c13 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Sep 5 02:48:12 2011 -0300 account-basics test: Add test for AccountManager::supportedAccountProperties(). tests/dbus/account-basics.cpp | 2 ++ 1 file changed, 2 insertions(+) commit fea3fe14bb68ef8467deeaa4467a3b670cb963b0 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Sep 5 02:34:43 2011 -0300 account-basics test: Add macro to easily test properties. tests/dbus/account-basics.cpp | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) commit 15a47ca31f79a49fe4b994c08ae2da8803ee0865 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Sep 5 02:21:44 2011 -0300 account-basics test: Rename pathsForAccount[Set|List] to pathsForAccounts. tests/dbus/account-basics.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) commit ee0b7e33fd838ca96d9dc50f603ca80c3362428d Author: Andre Moreira Magalhaes (andrunko) Date: Mon Sep 5 02:15:25 2011 -0300 account-basics test: Remove AccountSet specific tests in favour of account-set test. tests/dbus/account-basics.cpp | 162 ----------------------------------------- 1 file changed, 162 deletions(-) commit cb653f35762f0991ae4ea5c632524cb1a0840262 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Sep 5 01:56:34 2011 -0300 account-channel-dispatcher test: Improve test coverage. All Account::ensure/create* methods are now tested with and without passing hints. Relevant methods receiving a ContactPtr as param are now also tested. tests/dbus/account-channel-dispatcher.cpp | 175 ++++++++++++++++++++++++----- 1 file changed, 147 insertions(+), 28 deletions(-) commit 4f2734e3cfc4fbb51df38430601697697bd7e7f8 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Sep 5 01:50:24 2011 -0300 account-channel-dispatcher test: Use TestConnHelper. tests/dbus/account-channel-dispatcher.cpp | 161 +++++++++-------------------- 1 file changed, 50 insertions(+), 111 deletions(-) commit 73a7481a5868befcb4d0aecdde12e6e18675029c Author: Andre Moreira Magalhaes (andrunko) Date: Sun Sep 4 22:55:20 2011 -0300 test-profile.profile: Allow presences to have status message. tests/telepathy/profiles/test-profile.profile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit fb2fc06e19b990fc437cb2bc8a19189fe60ef349 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Sep 4 22:54:43 2011 -0300 account-manager.py: Fake putting account online/offline when setting requested presence. tests/dbus/account-basics.cpp | 14 +------ tests/lib/python/account-manager.py | 73 +++++++++++++++++++++++++++++++---- 2 files changed, 68 insertions(+), 19 deletions(-) commit 6771f374316201f0d51f198c5b8a1a5c4edb3e14 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Sep 4 22:50:27 2011 -0300 account-manager.py: Set non empty AM.SupportedAccountProperties. tests/lib/python/account-manager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 948452ac822b97bea11f46e88576a38494857708 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Sep 4 22:37:02 2011 -0300 account-manager.py: Add HasBeenOnline support (always false for now). tests/lib/python/account-manager.py | 2 ++ 1 file changed, 2 insertions(+) commit bbb62f08a34f0148e653d77ba5dfb8453d008403 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Sep 4 22:33:18 2011 -0300 account-manager.py: Group presence related properties together. tests/lib/python/account-manager.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit c3197e720aea71ad7806652cc6c64080040be008 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Sep 4 22:25:56 2011 -0300 account-manager.py: Default to Account.ConnectionAutomatically=false. tests/lib/python/account-manager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 2463fb1f6984325da8d937168833d00750e6183b Author: Andre Moreira Magalhaes (andrunko) Date: Sun Sep 4 22:12:14 2011 -0300 account-manager.py: Make default service name empty, so we can check fallback code. tests/dbus/account-basics.cpp | 3 +-- tests/lib/python/account-manager.py | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) commit d285149c3f1e62213eea8f6aae768f8424604577 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Sep 4 22:11:17 2011 -0300 account-manager.py: Only remove account from D-Bus after emitting Account.Removed. tests/lib/python/account-manager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 22a103aae748cdc116435d9f8bfb0d4c2382afc4 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Sep 4 22:19:37 2011 -0300 account-set test: Add specific test for AccountSet. tests/dbus/CMakeLists.txt | 3 +- tests/dbus/account-set.cpp | 416 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 418 insertions(+), 1 deletion(-) commit edca63ba593bf7426cf5122f94391a54cc689e4b Author: Andre Moreira Magalhaes (andrunko) Date: Sun Sep 4 22:22:05 2011 -0300 Account: Properly check if profile is invalid before using it. TelepathyQt4/account.cpp | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) commit 71c116a8f8d05e7cf32fc7106554f32dae87f7f1 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Sep 4 22:21:43 2011 -0300 Account: Add warning for using profile() without FeatureProfile enabled. TelepathyQt4/account.cpp | 1 + 1 file changed, 1 insertion(+) commit 8a56e5cb48cdb67dd3f9b178003341855237a7b4 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 14 14:13:56 2011 +0100 Update NEWS NEWS | 3 +++ 1 file changed, 3 insertions(+) commit 91f453c004e975ed8eb13846a4974048e5198600 Merge: 5e25dff 792704e Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 14 14:09:46 2011 +0100 Merge branch 'cd-claim' Reviewed-by: Olli Salli (oggis) commit 5e25dffdf9150725e5ced0f13fb89bb17c85de05 Merge: a136da8 0e64d77 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 14 14:07:58 2011 +0100 Merge branch 'trivia' Reviewed-by: Olli Salli (oggis) commit 0e64d77a5eec356e0b5e70326dc4c35f544fa5de Author: Andre Moreira Magalhaes (andrunko) Date: Sun Sep 4 22:23:20 2011 -0300 PresenceSpec: Add operator==. TelepathyQt4/presence.cpp | 13 +++++++++++++ TelepathyQt4/presence.h | 1 + 2 files changed, 14 insertions(+) commit b6a16148901b39026ce1326dbd620e99132f035e Author: Andre Moreira Magalhaes (andrunko) Date: Sun Sep 4 22:23:02 2011 -0300 Presence: Add operator==. TelepathyQt4/presence.cpp | 12 ++++++++++++ TelepathyQt4/presence.h | 1 + 2 files changed, 13 insertions(+) commit 792704e699a9a1e1256d2bb2cee8e88fbd04ccc4 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 14 14:02:45 2011 +0100 client test: Fixed typo. tests/dbus/client.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit e267536c52cc781f228ba10577d46802a117d3c0 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Sep 11 22:40:25 2011 -0300 client test: Check that trying to register a client with an already existing name and using a different object fails. tests/dbus/client.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) commit 8868f769a0d57556e09d788633ae7ad66bbf3119 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Sep 11 22:39:08 2011 -0300 client test: Check that CDO::claim(handler) properly populates HandledChannels. tests/dbus/client.cpp | 49 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) commit 4966db21d0ad9c5334ce7e488ee89350b077c297 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Sep 11 22:36:55 2011 -0300 ChannelDispatchOperation: Add debug messages for claim(). TelepathyQt4/channel-dispatch-operation.cpp | 3 +++ 1 file changed, 3 insertions(+) commit 9c7bd88d564107a648846208e77e013ddbd12b89 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Sep 11 22:36:01 2011 -0300 AbstractClient: Add API/ABI FIXME. TelepathyQt4/abstract-client.h | 1 + 1 file changed, 1 insertion(+) commit 8bcfcaaf09bac5026170f8fc6fdc4d2104be268f Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 9 13:38:25 2011 -0300 AbstractClient: Remove isApprover/ObserverRegistered and renamed isHandlerRegistered to isRegistered. TelepathyQt4/abstract-client.cpp | 42 +++------------------------ TelepathyQt4/abstract-client.h | 16 ++-------- TelepathyQt4/channel-dispatch-operation.cpp | 2 +- TelepathyQt4/client-registrar.cpp | 24 ++------------- tests/dbus/client.cpp | 16 +++------- 5 files changed, 13 insertions(+), 87 deletions(-) commit 9db452d88fdb10c61404271575ca80758fd7de50 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 9 01:27:19 2011 -0300 client test: Test accessors to check whether the client is registered. tests/dbus/client.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) commit 979cab84ef20074e7c12cff31ecc5880953b4eaa Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 9 01:23:01 2011 -0300 ChannelDispatchOperation: Fail if the handler passed to claim() is unregistered. TelepathyQt4/channel-dispatch-operation.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) commit 6ec5349093d2da482a3896e4b8035e384cd0077a Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 9 01:22:27 2011 -0300 ClientRegistrar: Properly update client registration info on register/unregisterClient. TelepathyQt4/client-registrar.cpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) commit eedd709108203c7d288a1473dc24328013e1b5d3 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 9 01:21:35 2011 -0300 AbstractClient*: Add API to check whether the client is registered. TelepathyQt4/abstract-client.cpp | 76 ++++++++++++++++++++++++++++++++++---- TelepathyQt4/abstract-client.h | 19 ++++++++++ 2 files changed, 88 insertions(+), 7 deletions(-) commit 0a3c573eb9ddf0357d42b72adcaad39a8d1e6a9f Author: Andre Moreira Magalhaes (andrunko) Date: Tue Sep 6 13:36:01 2011 -0300 ChannelDispatchOperation: Use PendingVoid on claim(). TelepathyQt4/channel-dispatch-operation.cpp | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) commit 679d762c7aff6d94f1df58132955185017cfa735 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Sep 6 13:31:51 2011 -0300 ChannelDispatchOperation: Do not close channels automatically on claim(). TelepathyQt4/channel-dispatch-operation.cpp | 11 ----------- 1 file changed, 11 deletions(-) commit 58311b45a58aefe47d28d7e5de6e5e3f52b38839 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Sep 6 13:21:36 2011 -0300 ChannelDispatchOperation: Allow claim to be used by approvers to handle channels. Also change the current claim behaviour to close channels on deletion if they were not closed. TelepathyQt4/CMakeLists.txt | 1 + TelepathyQt4/channel-dispatch-operation-internal.h | 51 +++++++++++++ TelepathyQt4/channel-dispatch-operation.cpp | 77 ++++++++++++++++++-- TelepathyQt4/channel-dispatch-operation.h | 4 + 4 files changed, 125 insertions(+), 8 deletions(-) commit 711e58ab12e26b83cbbbc6796dceb52c7d41960b Author: Andre Moreira Magalhaes (andrunko) Date: Tue Sep 6 13:21:03 2011 -0300 types.h: Add types for AbstractClientApprover/Handler/Observer. TelepathyQt4/types.h | 6 ++++++ 1 file changed, 6 insertions(+) commit a136da80e7510e1647cf04ed239c068564b03821 Merge: b71f896 d1ebdda Author: Olli Salli Date: Mon Sep 5 18:31:48 2011 +0300 Merge branch 'stube-fixes' Reviewed-by: Andre Magalhaes (andrunko) commit d1ebdda22415a15b1729b719b279d8392f568304 Author: Olli Salli Date: Mon Sep 5 18:31:10 2011 +0300 StreamTubeChannel: We don't need to be friends with Channel TelepathyQt4/stream-tube-channel.h | 2 -- 1 file changed, 2 deletions(-) commit b71f896be91e5dd360d9b281682c610fee18a5b6 Author: Olli Salli Date: Mon Sep 5 18:24:31 2011 +0300 Update NEWS NEWS | 2 ++ 1 file changed, 2 insertions(+) commit 685d5110b2a6aa3d24602681a8bb91d4fa46c704 Merge: e3d76e7 172f3ca Author: Olli Salli Date: Mon Sep 5 18:21:23 2011 +0300 Merge branch 'cclass-optimize' Reviewed-by: Andre Magalhaes (andrunko) commit 172f3ca7a57f1c9e9e50b98fa6e12e6a416c5a68 Author: Olli Salli Date: Sat Sep 3 12:10:41 2011 +0300 Further optimize ChannelClassSpec Test suite with coverage down to 2.51s TelepathyQt4/channel-class-spec.cpp | 44 ++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 21 deletions(-) commit 801fc5befed8bce20d22f8d68a2e622b95bc3232 Author: Olli Salli Date: Sat Sep 3 11:33:46 2011 +0300 Replace all-too-clever ChannelClassSpec::operator== with equivalent but faster impl Test suite (built with coverage enabled so a bit slow) 2.66sec -> 2.54sec TelepathyQt4/channel-class-spec.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 7f42b8ff4f1618166591e5118a2cca26f59b770f Author: Olli Salli Date: Thu Sep 1 20:00:36 2011 +0300 OSTC: Ensure connection events are not emitted for an invalidated tube TelepathyQt4/outgoing-stream-tube-channel.cpp | 5 +++++ 1 file changed, 5 insertions(+) commit 164d2a436cbd653046d0ef8f02884a4d8b47ec57 Author: Olli Salli Date: Sat Sep 3 20:02:02 2011 +0300 Make OSTC::connsFor{SrcAddrs,Creds} and contactsForConns() usable through synthesizing conn drops So one can recover the attributes of the connections TelepathyQt4/outgoing-stream-tube-channel.cpp | 53 +++++++++++++++---------- TelepathyQt4/stream-tube-channel.cpp | 11 ++++- TelepathyQt4/stream-tube-channel.h | 1 + 3 files changed, 42 insertions(+), 23 deletions(-) commit 9372fa290b2fb15b919f412b34dab6127a73c3a4 Author: Olli Salli Date: Thu Sep 1 20:22:51 2011 +0300 StreamTubeChannel: Synthesize connection close events for connections remaining on closed tubes Closing a tube implies closing its connections, but this is rather confusing from an API user POV, so we synthesize an explicit event. TelepathyQt4/channel.cpp | 1 + TelepathyQt4/constants.h | 4 +++- TelepathyQt4/stream-tube-channel.cpp | 17 +++++++++++++++++ TelepathyQt4/stream-tube-channel.h | 3 +++ 4 files changed, 24 insertions(+), 1 deletion(-) commit 57104084a82ba57709ae8879996254d8223bf13c Author: Olli Salli Date: Wed Aug 24 14:37:58 2011 +0300 OutgoingStreamTubeChannel: Fix connectionClosed event ordering to be consistent with newConnection() .../outgoing-stream-tube-channel-internal.h | 10 +++ TelepathyQt4/outgoing-stream-tube-channel.cpp | 75 ++++++++++++-------- TelepathyQt4/outgoing-stream-tube-channel.h | 2 +- 3 files changed, 55 insertions(+), 32 deletions(-) commit 9a1559d34241af456331068070d33780f9386d1f Author: Olli Salli Date: Tue Aug 23 22:55:08 2011 +0300 Stream tubes: Modify connections() in-place with protected accessors rather than replacing the list This makes the code nicer but also considerably faster (O(n) for n connections added instead of O(n^2) previously) Also fixes a bug, where outgoing tubes would only ever report one connection... sigh TelepathyQt4/incoming-stream-tube-channel.cpp | 7 +------ TelepathyQt4/outgoing-stream-tube-channel.cpp | 9 ++------- TelepathyQt4/stream-tube-channel.cpp | 26 +++++++++++++++++++++++-- TelepathyQt4/stream-tube-channel.h | 5 ++++- 4 files changed, 31 insertions(+), 16 deletions(-) commit f3c4c75f97a0ac1f9a68607f9e8f0bd54fe478a0 Author: Olli Salli Date: Tue Aug 23 22:19:56 2011 +0300 Use the types-internal.h workaround for PendingStreamTubeConnection too It side-steps the incredibly naive QDBus demarshaller tripping into something slightly wrong given to it by the dbus-glib powered service side, crashing and burning. I'll have to move forward on fixing that QDBus bug though, it means every qdbus using app can be easily crashed by sending them something they don't exactly expect in variants. TelepathyQt4/pending-stream-tube-connection.cpp | 1 + 1 file changed, 1 insertion(+) commit bdca470654ef5b0150fb5bdc1905b063791b8901 Author: Olli Salli Date: Tue Aug 23 18:44:50 2011 +0300 TestStreamTubeChan: Test that newConnection() and connectionClosed() are properly ordered They aren't currently, on outgoing tubes! But that's to be fixed after taking care of something completely different for an hour or two... tests/dbus/stream-tube-chan.cpp | 71 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) commit e7dac56fc708a137c5670074f321af110c2efd6d Author: Olli Salli Date: Tue Aug 23 18:19:43 2011 +0300 OutgoingStreamTubeChannel: Make the parameters arg to the offer fns optional Most tube apps don't seem to use the parameters at all, so it doesn't seem useful to require passing them. To be clear: this is both API and ABI backwards compatible, as C++ optional arguments are a compile time feature and we're just adding possibilities here. TelepathyQt4/outgoing-stream-tube-channel.h | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) commit fe6645e6cfc371fcb0511d778b63de68f9e23eee Author: Olli Salli Date: Tue Aug 23 13:03:29 2011 +0300 StreamTubeChannel: Remove connections from connections() when they are removed (duh) This makes the tests pass again, but there are still bugs with possible event reordering in corner cases with OutgoingStreamTubeChannel TelepathyQt4/outgoing-stream-tube-channel.cpp | 4 ++-- TelepathyQt4/outgoing-stream-tube-channel.h | 4 ++-- TelepathyQt4/stream-tube-channel.cpp | 17 +++++++++++++---- TelepathyQt4/stream-tube-channel.h | 2 ++ 4 files changed, 19 insertions(+), 8 deletions(-) commit b54498794c0d7c180257055d67857f67bcaffdfb Author: Olli Salli Date: Tue Aug 23 12:30:11 2011 +0300 TestStreamTubeChan: Verify that connections() is updated correctly It currently isn't on removals!! tests/dbus/stream-tube-chan.cpp | 4 ++++ 1 file changed, 4 insertions(+) commit e3d76e7d21d2ddabc9995d8eff15def372e62c9b Author: Olli Salli Date: Sat Sep 3 20:59:00 2011 +0300 Update NEWS NEWS | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 734d03b7be1d3d4059f286fe3da5306cf9182f42 Merge: 9dda602 b01ac74 Author: Olli Salli Date: Sat Sep 3 20:56:26 2011 +0300 Merge branch 'stube-cclasses' Reviewed-by: Andre Magalhaes (andrunko) commit b01ac74acc288832dd47b344bd50e92ba8e103e4 Author: Olli Salli Date: Fri Aug 26 14:57:24 2011 +0300 ChannelClassSpec: Fix the tube service property leaking through the singleton instance Comes with a test! TelepathyQt4/channel-class-spec.cpp | 36 +++++++++++++++++++---------------- tests/channel-class-spec.cpp | 28 +++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 16 deletions(-) commit eca44296b9483bc31ade078d46224ce18fdd3c86 Author: Olli Salli Date: Wed Aug 24 18:02:58 2011 +0300 ChannelFactory: Add room stream tubes TelepathyQt4/channel-factory.cpp | 48 ++++++++++++++++++++++++++++++++++++++ TelepathyQt4/channel-factory.h | 32 +++++++++++++++++++++++++ 2 files changed, 80 insertions(+) commit ce6b6461357859909b55c8111de5bb86cc5888a1 Author: Olli Salli Date: Wed Aug 24 17:40:27 2011 +0300 ChannelClassSpec: Add group stream tube classes TelepathyQt4/channel-class-spec.cpp | 44 +++++++++++++++++++++++++++++++++++ TelepathyQt4/channel-class-spec.h | 4 ++++ 2 files changed, 48 insertions(+) commit 9dda60285c07cdf8c358fe32c7840d252a074234 Author: Olli Salli Date: Sat Sep 3 19:11:11 2011 +0300 Update NEWS NEWS | 6 ++++++ 1 file changed, 6 insertions(+) commit 2b0dd4ab5d3d41ed352c0c1a8df7e564318dd3c4 Merge: 77556e2 ccb0e1f Author: Olli Salli Date: Sat Sep 3 19:07:24 2011 +0300 Merge branch 'misc-fixes' Reviewed-by: Andre Magalhaes (andrunko) commit ccb0e1f8895bbbf1c5c4359eab9183d2c72600f0 Author: Olli Salli Date: Sat Sep 3 18:30:51 2011 +0300 Deprecate external usage of PendingOperation::object() The object() mechanism's sole purpose should be to keep the necessary parent object hierarchy alive, and for the operation's internal code to have access to it. It's not suitable for public use, because: We don't guarantee which object is actually returned in any case, and even if we did, it would require awkward type conversions AND checking their results to safely use the accessor for accessing the object. TelepathyQt4/channel.cpp | 6 +++--- TelepathyQt4/contact-manager-roster.cpp | 2 +- TelepathyQt4/pending-account.cpp | 2 +- TelepathyQt4/pending-channel-request.cpp | 4 ++-- TelepathyQt4/pending-connection.cpp | 2 +- TelepathyQt4/pending-contact-attributes.cpp | 2 +- TelepathyQt4/pending-contact-info.cpp | 2 +- TelepathyQt4/pending-handles.cpp | 2 +- TelepathyQt4/pending-operation.cpp | 10 ++++++++++ TelepathyQt4/pending-operation.h | 3 ++- TelepathyQt4/pending-ready.cpp | 2 +- TelepathyQt4/pending-send-message.cpp | 4 ++-- TelepathyQt4/streamed-media-channel.cpp | 2 +- 13 files changed, 27 insertions(+), 16 deletions(-) commit 815cfc5a1ddee91d862650951d5bce16c94f86a2 Author: Olli Salli Date: Thu Sep 1 20:04:08 2011 +0300 PendingContacts: Use the connection as the parent, not the contact manager This is to avoid crashes I've seen occasionally in corner cases when developing tests, resulting from the PendingContacts using the connection during some of the async contact build steps, but the manager and thus the operation only having a weak pointer to it, and the conn being destroyed before those steps. Making the connection the parent keeps it alive for all of the steps and because the conn holds a strong ref to the manager, it's kept alive at least as long as before as well. TelepathyQt4/pending-contacts.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 77556e2504cb497281e085446209f44ecd75cf55 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Aug 30 12:47:02 2011 -0300 Update NEWS NEWS | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit a0b1488fc482330c9dd7ebf884cb0daeef3f7dac Merge: c62125b 3808e47 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Aug 30 12:46:13 2011 -0300 Merge branch 'ensure-channel-hints-fix' Reviewed-by: Olli Salli (oggis) commit 3808e472fcf18c7d8735c0e85afed6a5e0d6a5c0 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Aug 29 18:45:35 2011 -0300 account-channel-dispatcher test: Check that the proper CD methods are being called when creating/ensuring channels. tests/dbus/account-channel-dispatcher.cpp | 33 +++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) commit 2240b6614cd07b1778176f4b06669a99d080d6ce Author: Andre Moreira Magalhaes (andrunko) Date: Mon Aug 29 16:57:42 2011 -0300 PendingChannelRequest: Properly call EnsureChannelWithHints when requested. TelepathyQt4/pending-channel-request.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c62125bead89ed6ec0114a545ec25cf18061ba3a Author: Olli Salli Date: Thu Aug 4 21:09:23 2011 +0300 Start 0.7.3 dev CMakeLists.txt | 2 +- NEWS | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) commit 226ffde7e1846b05455d48afd0466bf1e410edcf Author: Olli Salli Date: Thu Aug 4 20:45:08 2011 +0300 Prepare release 0.7.2 CMakeLists.txt | 4 ++-- NEWS | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit cebf6276be66cef2494e9c3d80a3ccf4e820d1da Author: Olli Salli Date: Thu Aug 4 19:57:28 2011 +0300 Update NEWS NEWS | 4 ++++ 1 file changed, 4 insertions(+) commit 8eddbd39b041fec1a5f972ca24c22109bb7c9980 Merge: b560b36 7b56111 Author: Olli Salli Date: Thu Aug 4 19:56:09 2011 +0300 Merge branch 'stable-ifaces' commit b560b367cb958abf1c93c67b6d3f93e07ecada91 Merge: 4944978 393a6c8 Author: Olli Salli Date: Thu Aug 4 19:49:26 2011 +0300 Merge branch 'gen-docs' Reviewed-by: Andre Magalhaes (andrunko) commit 393a6c8789c89fd38f039278867774767c1d4c80 Author: Olli Salli Date: Thu Aug 4 01:15:58 2011 +0300 codegen: Print out better warnings for unresolved member-ref/dbus-refs tools/libqt4codegen.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) commit 7b5611178830151a4551e0aa9f34c3dbeea25630 Author: Olli Salli Date: Thu Aug 4 00:55:50 2011 +0300 Add Chan.I.Destroyable to autogen TelepathyQt4/channel.xml | 1 + 1 file changed, 1 insertion(+) commit 9f0c74e923d013e7ced0333693ec7430e922b3a8 Author: Olli Salli Date: Thu Aug 4 00:55:41 2011 +0300 Add Chan.T.DBusTube to autogen TelepathyQt4/channel.xml | 1 + 1 file changed, 1 insertion(+) commit 16c40f0891df09e83808f5409e20997b3bba8d70 Author: Olli Salli Date: Thu Aug 4 00:51:18 2011 +0300 Add Acc.I.Storage to autogen TelepathyQt4/account.xml | 1 + 1 file changed, 1 insertion(+) commit 4cc0ec8878cfad61611edb9375e29c4f9eeacc69 Author: Olli Salli Date: Thu Aug 4 00:31:57 2011 +0300 Pretty-print both member-refs and dbus-refs perfectly in generated docs tools/libqt4codegen.py | 108 +++++++++++++++++++++++++++++++++++--------- tools/qt4-client-gen.py | 24 +++++----- tools/qt4-constants-gen.py | 13 +++--- tools/qt4-types-gen.py | 9 ++-- 4 files changed, 112 insertions(+), 42 deletions(-) commit 7913ee057d5f2ecb6cd87513e6d0845f3e1cc36d Author: Olli Salli Date: Tue Aug 2 00:01:00 2011 +0300 Tidy up D-Bus method, property and signal names in generated proxy member brief descriptions tools/qt4-client-gen.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit dedcd8fedab6f3be8f17df361fb22f75aee653d6 Author: Olli Salli Date: Mon Aug 1 23:54:02 2011 +0300 Make tp:member-refs in generated docs link properly to the members tools/libqt4codegen.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) commit a6f2171113a942fbd40086eafaf9ffb7667f82f9 Author: Olli Salli Date: Mon Aug 1 23:39:05 2011 +0300 format_docstring: Escape backslashes in full tp:docstring XML subtree, not after toxml() This allows us to insert doxygen commands to the subtree. Previously, their leading '\' would be converted to '\\' as well. tools/libqt4codegen.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) commit 9f15eb70bc4eac47639ee54a54c82dff51fd7d42 Author: Olli Salli Date: Mon Aug 1 22:50:14 2011 +0300 Use a single
for s in generated docs, and style it fully in CSS This allows easily including similar
sections in hand-written docs too and achieve an identical look. doxygen.css | 11 +++++++++++ tools/libqt4codegen.py | 21 ++++----------------- 2 files changed, 15 insertions(+), 17 deletions(-) commit ba81f24931ddd2ae483c0cd09c1cbf7658709c65 Author: Olli Salli Date: Mon Aug 1 22:49:25 2011 +0300 Surround XHTML docstrings with \htmlonly \endhtmlonly This allows more complex HTML to be not mutilated by Doxygen. In particular the rationale divs generated by the next commit. tools/libqt4codegen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 4944978e8c7b624bac0ef582efd5f23862afed55 Author: Olli Salli Date: Mon Aug 1 16:27:02 2011 +0300 Update NEWS NEWS | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit d332146b186e3946ac3bad59d24920ca821fc012 Author: Olli Salli Date: Mon Aug 1 16:25:25 2011 +0300 Update NEWS NEWS | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 69c98d276e47b4dcf74096138dd786f78977ada4 Merge: df57c66 97f8570 Author: Olli Salli Date: Mon Aug 1 16:22:06 2011 +0300 Merge branch 'docs' Reviewed-by: Andre Magalhaes (andrunko) Reviewed-by: Olli Salli (oggis) commit 97f85708ba7d2b717b0d57ab9605abfc69e768f8 Author: Olli Salli Date: Mon Aug 1 16:10:49 2011 +0300 TubeChannel: clean up docs TelepathyQt4/tube-channel.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) commit 81260ef597e0642129eea956c8fdeb3aa31491bb Author: Olli Salli Date: Mon Aug 1 16:04:16 2011 +0300 OutgoingStreamTubeChannel: further improve docs TelepathyQt4/outgoing-stream-tube-channel.cpp | 150 +++++++++++-------------- 1 file changed, 67 insertions(+), 83 deletions(-) commit b75081457bff1282e1340ff675c188e2246bd505 Author: Olli Salli Date: Mon Aug 1 13:40:10 2011 +0300 IncomingStreamTubeChannel: Further improve docs TelepathyQt4/incoming-stream-tube-channel.cpp | 61 ++++++++++++++++--------- 1 file changed, 40 insertions(+), 21 deletions(-) commit dee2f327acadd6b1db8d20ed51bcacdf6f920a5a Author: Olli Salli Date: Wed Jul 27 13:50:44 2011 +0300 StreamTubeChannel: Further improve docs TelepathyQt4/stream-tube-channel.cpp | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) commit 28b7f7e8f7be84fcc01936d6c043f60516773f70 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:51:20 2011 -0300 PendingVariant: Update docs. TelepathyQt4/pending-variant.cpp | 2 ++ 1 file changed, 2 insertions(+) commit ce06c8bd40228e5fe0b382bd44109fff42accc63 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:51:20 2011 -0300 PendingVariantMap: Update docs. TelepathyQt4/pending-variant-map.cpp | 2 ++ 1 file changed, 2 insertions(+) commit e9f78fcddc6084030aa07724dc8cc315c79b1811 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:51:19 2011 -0300 PendingStringList: Update docs. TelepathyQt4/pending-string-list.cpp | 2 ++ 1 file changed, 2 insertions(+) commit e88a4b2236e98be56514ab4c76afdd1e5ce618f7 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:10:28 2011 -0300 PendingStreamTubeConnection: Update docs. TelepathyQt4/pending-stream-tube-connection.cpp | 26 ++++++++++------------- 1 file changed, 11 insertions(+), 15 deletions(-) commit 897f4c2b4e7f3c074141de18b1f46d75ccddfa42 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:51:19 2011 -0300 PendingSendMessage: Update docs. TelepathyQt4/pending-send-message.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 2498938860342e21965a920ad9e7b0f0c5693b50 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:51:19 2011 -0300 PendingReady: Update docs. TelepathyQt4/pending-ready.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) commit ac37af47245d11ebb8138ba535558c6c25d53690 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:51:19 2011 -0300 PendingOperation: Update docs. TelepathyQt4/pending-operation.cpp | 71 ++++++++++++++++++++---------------- 1 file changed, 40 insertions(+), 31 deletions(-) commit 9e17ea8c371a1c3768fcbf53ba6d429a23a5bedb Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:51:19 2011 -0300 PendingHandles: Update docs. TelepathyQt4/pending-handles.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) commit 4896332bc1b6260b0c568650703e677c6e79d372 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:51:19 2011 -0300 PendingContacts: Update docs. TelepathyQt4/pending-contacts.cpp | 2 ++ 1 file changed, 2 insertions(+) commit f668270851b608818a615be416d53a7c9a140798 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:51:19 2011 -0300 PendingContactInfo: Update docs. TelepathyQt4/pending-contact-info.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 23c2d334edb6ceaad7242c1862277ff7c8d1dfe4 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:51:19 2011 -0300 PendingContactAttributes: Update docs. TelepathyQt4/pending-contact-attributes.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit f2519dde16bd7b3020674390796dcb7e7a3a3970 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:51:19 2011 -0300 PendingConnection: Update docs. TelepathyQt4/pending-connection.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) commit 93226dca6c39cd96693b3aa412f796d704892941 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:51:19 2011 -0300 PendingChannel: Update docs. TelepathyQt4/pending-channel.cpp | 45 ++++++++++++++++---------------------- 1 file changed, 19 insertions(+), 26 deletions(-) commit 2ebeefefefe183bf0fb962816d8c5782a37901a7 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:51:19 2011 -0300 PendingChannelRequest: Update docs. TelepathyQt4/pending-channel-request.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit aa4f9b0874bde2583fe458c6d30804dc475e8225 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:51:19 2011 -0300 PendingAccount: Update docs. TelepathyQt4/pending-account.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) commit 48848dd11d2718b7b63dcaf8daa71b567ae159b8 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:11:14 2011 -0300 TextChannel: Update docs. TelepathyQt4/text-channel.cpp | 101 +++++++++++++++++++++++++++++++++-------- 1 file changed, 81 insertions(+), 20 deletions(-) commit 10175104a4c5397beb7157df3c59b7813b63072b Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:10:47 2011 -0300 StreamedMediaChannel: Update docs. TelepathyQt4/streamed-media-channel.cpp | 68 +++++++++++++++++-------------- 1 file changed, 37 insertions(+), 31 deletions(-) commit 037e59e969a1a44ec90528b4091e8a99c1fe84c3 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 16:54:38 2011 -0300 RoomListChannel: Update docs. TelepathyQt4/room-list-channel.cpp | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) commit d86b28efa9210af249b52ac79a2ac7dcd50c4134 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:10:10 2011 -0300 OutgoingFileTransferChannel: Update docs. TelepathyQt4/outgoing-file-transfer-channel.cpp | 35 ++++++++++++++--------- 1 file changed, 21 insertions(+), 14 deletions(-) commit 3bcf55f191820595f541acec059d44a30474875b Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:09:48 2011 -0300 Message: Update docs. TelepathyQt4/message.cpp | 64 ++++++++++++++++++++++++++++++---------------- 1 file changed, 42 insertions(+), 22 deletions(-) commit cc8035b5e9e9ee71e8ef06aafb5488c96d2a9f88 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:09:32 2011 -0300 IncomingFileTransferChannel: Move signals docs to the bottom of the class implementation. TelepathyQt4/incoming-file-transfer-channel.cpp | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) commit 54a09b51ec3dc2a3f20beb81d72da17fe87f7301 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:09:18 2011 -0300 IncomingFileTransferChannel: Update docs. TelepathyQt4/incoming-file-transfer-channel.cpp | 39 ++++++++++++++--------- 1 file changed, 24 insertions(+), 15 deletions(-) commit 9bbc07a6c114896d8020a017dc4178dcdc045412 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:08:39 2011 -0300 FileTransferChannel: Move signals docs to the bottom of the class implementation. TelepathyQt4/file-transfer-channel.cpp | 60 ++++++++++++++++---------------- 1 file changed, 30 insertions(+), 30 deletions(-) commit 36611b05174c925be683469b5e21df88b423f4ef Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:08:27 2011 -0300 FileTransferChannel: Update docs. TelepathyQt4/file-transfer-channel.cpp | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) commit d19fdeeeb352c1879b8d99e64709d8fa14846bd9 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 16:52:53 2011 -0300 DBusProxyFactory: Update docs. TelepathyQt4/dbus-proxy-factory.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 45fd75c7570cc6bdb98b050ee56260b4eba2a132 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:07:56 2011 -0300 DBusProxy: Move signals docs to the bottom of the class implementation. TelepathyQt4/dbus-proxy.cpp | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) commit 683cbfb7cede1515d4dad63081b50cf1d370cbef Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:07:43 2011 -0300 DBusProxy: Update docs. TelepathyQt4/dbus-proxy.cpp | 82 ++++++++++++++++++++++++++++--------------- 1 file changed, 53 insertions(+), 29 deletions(-) commit 8eafc051007ca91cf0c85ce5c6dd2eab0e5e7b2f Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:05:50 2011 -0300 ContactSearchChannel: Move signals docs to the bottom of the class implementation. TelepathyQt4/contact-search-channel.cpp | 50 +++++++++++++++---------------- 1 file changed, 25 insertions(+), 25 deletions(-) commit 7154badc6f5dc703420e663da8b5b8299979a545 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:05:38 2011 -0300 ContactSearchChannel: Update docs. TelepathyQt4/contact-search-channel.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) commit 58b29279d139d9b27f4f0b65696f79c0b86dee18 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 16:17:10 2011 -0300 ContactManager: Update docs. TelepathyQt4/contact-manager.cpp | 351 ++++++++++++++++++++++++-------------- 1 file changed, 223 insertions(+), 128 deletions(-) commit a8bf4070767651a30e27d77d526eb5e78bbecbf4 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:06:07 2011 -0300 Contact: Update docs. TelepathyQt4/contact.cpp | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) commit aacc4b1f44101ef3eb7cf269dee683d7c8339ee2 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:04:58 2011 -0300 ConnectionManager: Update docs. TelepathyQt4/connection-manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e52ac4c6c855ac35b62d0885b191a749b0ed5047 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 16:49:39 2011 -0300 ConnectionFactory: Update docs. TelepathyQt4/connection-factory.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 9e01ba49b11274932414a7b62a1a70646365d45d Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:05:10 2011 -0300 Connection: Update docs. TelepathyQt4/connection.cpp | 2 -- 1 file changed, 2 deletions(-) commit 77e3f86f6293cd33f6816917649f9a2811ac2d9b Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:04:45 2011 -0300 ClientRegistrar: Update docs. TelepathyQt4/client-registrar.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 9514dbbaa4d5c794783f8860322503150bc23259 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:04:10 2011 -0300 ChannelRequest: Move signals docs to the bottom of the class implementation. TelepathyQt4/channel-request.cpp | 72 +++++++++++++++++++------------------- 1 file changed, 36 insertions(+), 36 deletions(-) commit f43bb4c889351c5c59fd8152439f179eb6fb82d5 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:04:00 2011 -0300 ChannelRequest: Update docs. TelepathyQt4/channel-request.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit fbb2056ba8d873de5e453ac23c0198eee0e45d98 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:03:38 2011 -0300 ChannelDispatchOperation: Update docs. TelepathyQt4/channel-dispatch-operation.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) commit 58f893b57b31f46c4297d02d59a7730f6bbbee79 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 16:45:34 2011 -0300 ChannelFactory: Update docs. TelepathyQt4/channel-factory.cpp | 4 ++-- TelepathyQt4/channel-request.cpp | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) commit 5d172f4aba1d42d8925ec01684aad233a06055b1 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:49:02 2011 -0300 Channel: Update docs. TelepathyQt4/channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 9293ab05cf501a06fddbfaa0f3acd00dc59d61cd Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 16:42:07 2011 -0300 AccountSet: Update docs. TelepathyQt4/account-set.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 49644b84f34364ccd304d57f2d6239cfe1c83305 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 16:42:21 2011 -0300 AccountFactory: Update docs. TelepathyQt4/account-factory.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 5f662250203ea5dd478284aa2302779f5e693ea4 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:03:20 2011 -0300 Account: Update docs. TelepathyQt4/account.cpp | 2 ++ 1 file changed, 2 insertions(+) commit f0f1bbb87709055d39fe992f8339e0be3f929b4a Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 17:00:25 2011 -0300 Properly refer to 'ready' instead of 'enabled' when referring to features required. Also make sure the methods refer to the required features. TelepathyQt4/account-manager.cpp | 38 ++++++------ TelepathyQt4/account.cpp | 56 ++++++++--------- TelepathyQt4/channel-dispatch-operation.cpp | 8 +-- TelepathyQt4/channel.cpp | 76 +++++++++++------------ TelepathyQt4/connection-manager.cpp | 8 +-- TelepathyQt4/connection.cpp | 18 +++--- TelepathyQt4/contact-search-channel.cpp | 12 ++-- TelepathyQt4/contact.cpp | 42 ++++++++----- TelepathyQt4/file-transfer-channel.cpp | 26 ++++---- TelepathyQt4/incoming-file-transfer-channel.cpp | 4 +- TelepathyQt4/incoming-stream-tube-channel.cpp | 6 +- TelepathyQt4/outgoing-file-transfer-channel.cpp | 2 +- TelepathyQt4/outgoing-stream-tube-channel.cpp | 14 ++--- TelepathyQt4/stream-tube-channel.cpp | 20 +++--- TelepathyQt4/streamed-media-channel.cpp | 26 +++++--- TelepathyQt4/text-channel.cpp | 14 ++++- TelepathyQt4/tube-channel.cpp | 4 +- 17 files changed, 207 insertions(+), 167 deletions(-) commit 04bec4b6d57c46b0ab37b36f7cb80b927d8dc63b Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 16:40:34 2011 -0300 Make signal docs consistent. TelepathyQt4/account-manager.cpp | 2 +- TelepathyQt4/account-set.cpp | 12 ++++--- TelepathyQt4/account.cpp | 42 ++++++++++++------------ TelepathyQt4/channel-dispatch-operation.cpp | 2 +- TelepathyQt4/channel-request.cpp | 15 ++++----- TelepathyQt4/channel.cpp | 14 ++++---- TelepathyQt4/connection.cpp | 6 ++-- TelepathyQt4/contact-messenger.cpp | 4 +-- TelepathyQt4/contact-search-channel.cpp | 16 ++++----- TelepathyQt4/contact.cpp | 28 ++++++++-------- TelepathyQt4/dbus-proxy.cpp | 11 +++---- TelepathyQt4/file-transfer-channel.cpp | 18 ++++++---- TelepathyQt4/simple-call-observer.cpp | 4 +-- TelepathyQt4/simple-observer.cpp | 4 +-- TelepathyQt4/simple-text-observer.cpp | 4 +-- TelepathyQt4/streamed-media-channel.cpp | 47 +++++++++++++++------------ 16 files changed, 122 insertions(+), 107 deletions(-) commit 550a4cc3e7fa263ae165f3d7ce5a8b0581f78972 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 16:19:31 2011 -0300 Properly document the form of the data returned. TelepathyQt4/abstract-client.cpp | 13 +- TelepathyQt4/account-factory.cpp | 5 +- TelepathyQt4/account-manager.cpp | 56 ++++---- TelepathyQt4/account-set.cpp | 7 +- TelepathyQt4/account.cpp | 72 +++++----- TelepathyQt4/channel-dispatch-operation.cpp | 16 +-- TelepathyQt4/channel-factory.cpp | 4 +- TelepathyQt4/channel-request.cpp | 33 ++--- TelepathyQt4/channel.cpp | 89 ++++++------- TelepathyQt4/client-registrar.cpp | 28 ++-- TelepathyQt4/connection-factory.cpp | 5 +- TelepathyQt4/connection-manager.cpp | 6 +- TelepathyQt4/connection.cpp | 76 +++++------ TelepathyQt4/contact-messenger.cpp | 6 +- TelepathyQt4/contact-search-channel.cpp | 19 ++- TelepathyQt4/contact.cpp | 74 ++++++----- TelepathyQt4/dbus-proxy-factory.cpp | 16 ++- TelepathyQt4/dbus-proxy.cpp | 29 ++-- TelepathyQt4/file-transfer-channel.cpp | 85 ++++++------ TelepathyQt4/incoming-file-transfer-channel.cpp | 10 +- TelepathyQt4/incoming-stream-tube-channel.cpp | 21 +-- TelepathyQt4/message.cpp | 160 +++++++++++++++++++---- TelepathyQt4/outgoing-stream-tube-channel.cpp | 26 ++-- TelepathyQt4/pending-account.cpp | 2 +- TelepathyQt4/pending-channel.cpp | 2 +- TelepathyQt4/pending-connection.cpp | 2 +- TelepathyQt4/pending-contact-attributes.cpp | 12 +- TelepathyQt4/pending-contact-info.cpp | 2 +- TelepathyQt4/pending-handles.cpp | 10 +- TelepathyQt4/pending-operation.cpp | 6 +- TelepathyQt4/pending-stream-tube-connection.cpp | 52 +++----- TelepathyQt4/simple-call-observer.cpp | 8 +- TelepathyQt4/simple-observer.cpp | 10 +- TelepathyQt4/simple-text-observer.cpp | 6 +- TelepathyQt4/stream-tube-channel.cpp | 58 ++++---- TelepathyQt4/streamed-media-channel.cpp | 77 ++++++----- TelepathyQt4/text-channel.cpp | 107 +++++++-------- TelepathyQt4/tube-channel.cpp | 4 +- 38 files changed, 656 insertions(+), 558 deletions(-) commit 4838df632ea79c0d9bc13cce3153888e17478dbb Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 15:09:18 2011 -0300 Refer to TP_QT4 string constants in docs. TelepathyQt4/abstract-client.cpp | 8 +++---- TelepathyQt4/account-factory.cpp | 4 ++-- TelepathyQt4/channel-dispatch-operation.cpp | 10 ++++----- TelepathyQt4/channel-request.cpp | 2 +- TelepathyQt4/contact-search-channel.cpp | 8 +++---- TelepathyQt4/streamed-media-channel.cpp | 31 ++++++++++++++------------- 6 files changed, 32 insertions(+), 31 deletions(-) commit 9e6cf2a65d2892fea70e8a41fe66bf960ee2ba6b Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 14:49:50 2011 -0300 libqt4codegen: Generate
...
for spec rationales in the generated doc. tools/libqt4codegen.py | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) commit 930afad28d1a09fbd530268778860a61c8773fef Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 14:49:17 2011 -0300 doxygen.css: Add a new CSS style for div class rationale. doxygen.css | 6 ++++++ 1 file changed, 6 insertions(+) commit a13bc7d57ab38012f79035c8b681365df3b34040 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 14:48:51 2011 -0300 StreamedMediaStream: Add missing pretty header. TelepathyQt4/CMakeLists.txt | 1 + TelepathyQt4/StreamedMediaStream | 13 +++++++++++++ 2 files changed, 14 insertions(+) commit 7cc6348c9e3cc4a68eb98a37d71d23461eedf645 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 15 14:47:57 2011 -0300 PendingStreamedMediaStreams: Add missing pretty header. TelepathyQt4/CMakeLists.txt | 1 + TelepathyQt4/PendingStreamedMediaStreams | 13 +++++++++++++ 2 files changed, 14 insertions(+) commit df57c6660048adbe3bf3a555bf0b0366ff483925 Merge: a78c2ba 5b8e0b8 Author: Dario Freddi Date: Thu Jul 14 17:00:49 2011 +0200 Merge branch 'gkiagia/compilation-fix' Reviewed-by: Dario Freddi (drf) Reviewed-by: Andre Moreira Magalhaes (andrunko) commit 5b8e0b854a6a8baea0f882c20defd507cf2076f9 Author: George Kiagiadakis Date: Thu Jul 14 17:51:27 2011 +0300 Do not FTBFS if doxygen is not installed. TelepathyQt4/CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit a78c2bae5180dbffb463be76500262ec16a71fda Merge: 117a7b8 6d2a583 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 8 00:04:40 2011 -0300 Merge branch 'stubes' Reviewed-by: Olli Salli (oggis) commit 6d2a583571cad137e0799310d4414e2169baa265 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 7 15:11:49 2011 -0300 PendingStreamTubeConnection: Make sure the slot from accept is called even if the received op is already finished. TelepathyQt4/pending-stream-tube-connection.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) commit 73260b964a12e2cd114731484450b5783bbf6b8a Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 7 14:06:34 2011 -0300 StreamTubeChannel: Update docs. TelepathyQt4/stream-tube-channel.cpp | 12 ------------ 1 file changed, 12 deletions(-) commit 453ce8735c2ca48161cb17af50e399c6e3c14e25 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 7 14:03:50 2011 -0300 PendingStreamTubeConnection: Improve debugs. TelepathyQt4/pending-stream-tube-connection.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) commit 41d85999e13a83591f210c8adb1ab54763986ade Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 7 13:59:26 2011 -0300 TubeChannel: Update signals docs. TelepathyQt4/tube-channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c8c8fe6ad043c349a78fe6fab428f8c41188eef4 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 7 13:59:16 2011 -0300 StreamTubeChannel: Update signals docs. TelepathyQt4/stream-tube-channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 19f84c5bbd21bf51baaa7e4060faae0793c963df Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 7 13:57:28 2011 -0300 IncomingStreamTubeChannel: Handle QHostAddress::AnyIPv6 on accept. TelepathyQt4/incoming-stream-tube-channel.cpp | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) commit b9a6254fe5aa8daa0289f5656a6730442edcf6a3 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 7 13:56:08 2011 -0300 StreamTubeChannel: Remove virtual processConnectionClosed and use Qt::QueuedConnection instead. TelepathyQt4/outgoing-stream-tube-channel.cpp | 8 +++++--- TelepathyQt4/outgoing-stream-tube-channel.h | 5 ++--- TelepathyQt4/stream-tube-channel.cpp | 16 +--------------- TelepathyQt4/stream-tube-channel.h | 5 ----- tests/dbus/stream-tube-chan.cpp | 4 ++++ 5 files changed, 12 insertions(+), 26 deletions(-) commit 37ec643f030ff24c6b4732b7ec91de430f4ec6bc Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 6 15:30:50 2011 -0300 TubeChannel: Add state/Changed and deprecated tubeState/Changed for consistency. TelepathyQt4/incoming-stream-tube-channel.cpp | 4 +-- TelepathyQt4/outgoing-stream-tube-channel.cpp | 16 +++++----- TelepathyQt4/pending-stream-tube-connection.cpp | 6 ++-- TelepathyQt4/stream-tube-channel.cpp | 12 +++---- TelepathyQt4/tube-channel.cpp | 39 +++++++++++++++++++---- TelepathyQt4/tube-channel.h | 9 ++++-- tests/dbus/stream-tube-chan.cpp | 24 +++++++------- 7 files changed, 70 insertions(+), 40 deletions(-) commit 9e2c3cc6a740f537629ad0387ba92b896991a9da Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 6 15:00:30 2011 -0300 Incoming/OutgoingStreamTubeChannel: Add FeatureCore for consistency. TelepathyQt4/incoming-stream-tube-channel.cpp | 30 ++++++++++++++++------- TelepathyQt4/incoming-stream-tube-channel.h | 4 +++- TelepathyQt4/outgoing-stream-tube-channel.cpp | 32 +++++++++++++++++-------- TelepathyQt4/outgoing-stream-tube-channel.h | 4 +++- tests/dbus/stream-tube-chan.cpp | 24 +++++++++---------- 5 files changed, 61 insertions(+), 33 deletions(-) commit 19527b4bead34c0b282713a8960e29ec32ea8288 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 6 14:47:27 2011 -0300 StreamTubeChannel: Add FeatureCore replacing FeatureTube ("deprecated") for consistency. TelepathyQt4/incoming-stream-tube-channel.cpp | 18 +++--- TelepathyQt4/incoming-stream-tube-channel.h | 2 +- TelepathyQt4/outgoing-stream-tube-channel.cpp | 20 +++---- TelepathyQt4/outgoing-stream-tube-channel.h | 2 +- TelepathyQt4/stream-tube-channel.cpp | 73 +++++++++++++------------ TelepathyQt4/stream-tube-channel.h | 4 +- tests/dbus/stream-tube-chan.cpp | 24 ++++---- 7 files changed, 75 insertions(+), 68 deletions(-) commit 1c0b0908e73f940ecb5f831ec64466b12f981e5e Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 6 14:16:49 2011 -0300 TubeChannel: Add FeatureCore replacing FeatureTube ("deprecated") for consistency. TelepathyQt4/stream-tube-channel.cpp | 2 +- TelepathyQt4/tube-channel.cpp | 27 ++++++++++++++++----------- TelepathyQt4/tube-channel.h | 2 ++ 3 files changed, 19 insertions(+), 12 deletions(-) commit ff51394d139aff1c5d7c38a7c05fa3ae696dbe60 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 6 14:08:41 2011 -0300 TubeChannel: Update docs. TelepathyQt4/tube-channel.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 816e2962a83aafb0fccdfdcc72ddef34795de39a Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 6 14:08:26 2011 -0300 OutgoingStreamTubeChannel: Update docs. TelepathyQt4/outgoing-stream-tube-channel.cpp | 268 ++++++++++--------------- 1 file changed, 101 insertions(+), 167 deletions(-) commit a4f23c1772b3c55d8f251f1f4f342793cac2af3c Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 6 14:08:06 2011 -0300 IncomingStreamTubeChannel: Update docs. TelepathyQt4/incoming-stream-tube-channel.cpp | 220 ++++++------------------- 1 file changed, 53 insertions(+), 167 deletions(-) commit db3848d766166db7db83f487b568c991ca95f078 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 6 13:23:44 2011 -0300 StreamTubeChannel: Improve docs. TelepathyQt4/stream-tube-channel.cpp | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) commit 33475690cbe753130a0e204d7b8e8472f521f85b Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 1 03:42:23 2011 -0300 IncomingStreamTubeChannel: Add API/ABI break FIXME. TelepathyQt4/incoming-stream-tube-channel.h | 1 + 1 file changed, 1 insertion(+) commit 7c4f418f6ba12255888c7213c18a5f1f9b08181c Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 1 03:37:57 2011 -0300 TubeChannel: Fix cross reference on docs. TelepathyQt4/tube-channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 29c125567f233310f4c2c41d47d6f32210a20c1c Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 1 03:31:59 2011 -0300 StreamTubeChannel: Improve docs. TelepathyQt4/stream-tube-channel.cpp | 362 +++++++++++++++++----------------- 1 file changed, 182 insertions(+), 180 deletions(-) commit 10e49f69cc565c7f3f7f191007ade996c2a10aed Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 1 02:43:42 2011 -0300 StreamTubeChannel: Remove useless private destructor impl. TelepathyQt4/stream-tube-channel.cpp | 5 ----- 1 file changed, 5 deletions(-) commit 6d0e8660a32045741cd68d6cfc4524657591f99f Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 1 02:43:36 2011 -0300 TubeChannel: Remove useless private destructor impl. TelepathyQt4/tube-channel.cpp | 5 ----- 1 file changed, 5 deletions(-) commit 659b7d727e5a51a45e557d590d82ceb0483ce68a Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 1 02:40:50 2011 -0300 OutgoingStreamTubeChannel: Remove useless private destructor impls. .../outgoing-stream-tube-channel-internal.h | 2 -- TelepathyQt4/outgoing-stream-tube-channel.cpp | 10 ---------- 2 files changed, 12 deletions(-) commit 4e0f84efc3b3869dd52dac228354a45e39245e96 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 1 02:40:29 2011 -0300 IncomingStreamTubeChannel: Remove useless private destructor impl. TelepathyQt4/incoming-stream-tube-channel.cpp | 5 ----- 1 file changed, 5 deletions(-) commit 2d4414f7ea97475376845c2c541f9b50de9954d1 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 1 02:16:39 2011 -0300 stream-tube-chan test: Make sure the event queue is empty before running the next test. tests/dbus/stream-tube-chan.cpp | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) commit 6538e8842c2cbbbb618fd1705967be57a76245fb Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 1 02:51:28 2011 -0300 StreamTubeChannel: Make accessControl accessor protected. TelepathyQt4/outgoing-stream-tube-channel.cpp | 10 ++++------ TelepathyQt4/stream-tube-channel.h | 2 +- 2 files changed, 5 insertions(+), 7 deletions(-) commit 8fe5b0e119cbd0c46d889139bbf7ef6255149eb1 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 1 02:08:03 2011 -0300 stream-tube-chan test: Test that accept fails if the channel is invalidated before StreamTube.Accept returns. tests/dbus/stream-tube-chan.cpp | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) commit 96d6de71ba68dd0c65143e94006ea1d20716ce9c Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 1 02:07:37 2011 -0300 stream-tube-chan test chan: Add backdoor API to close the channel on accept. tests/lib/glib/stream-tube-chan.c | 16 ++++++++++++++++ tests/lib/glib/stream-tube-chan.h | 4 ++++ 2 files changed, 20 insertions(+) commit ab7722df7d84a2a6fb2fb1db106ef626d72ad9d6 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 1 02:06:15 2011 -0300 PendingStreamTubeConnection: Make sure the operation fails if the channel is invalidated before we got a reply to StreamTube.Accept. TelepathyQt4/pending-stream-tube-connection.cpp | 38 ++++++++++++++++++----- TelepathyQt4/pending-stream-tube-connection.h | 13 +++++--- 2 files changed, 38 insertions(+), 13 deletions(-) commit ec73777220081a55f206974c23817c891149fb61 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 1 01:29:18 2011 -0300 stream-tube-channel test: Add test for connectionClosed. tests/dbus/stream-tube-chan.cpp | 48 +++++++++++++++++++++++++++++++++++---- 1 file changed, 44 insertions(+), 4 deletions(-) commit 3f089f015367621968effee2efafee160bbf8977 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 1 01:22:56 2011 -0300 OutgoingStreamTubeChannel: Properly handle connection closed. TelepathyQt4/outgoing-stream-tube-channel.cpp | 10 ++++------ TelepathyQt4/outgoing-stream-tube-channel.h | 10 +++++++--- TelepathyQt4/stream-tube-channel.cpp | 12 ++++++++++-- TelepathyQt4/stream-tube-channel.h | 10 +++++++--- 4 files changed, 28 insertions(+), 14 deletions(-) commit fddfce407f2242f8a5abfbb00ab35821a74652b6 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 1 00:20:55 2011 -0300 stream-tube-chan test: Check that OutgoingStreamTubeChannel::connectionsFor*/contactsFor* maps are populated at the proper time. tests/dbus/stream-tube-chan.cpp | 138 ++++++++++++++++++++++++++++----------- 1 file changed, 99 insertions(+), 39 deletions(-) commit 58a59b58fc393975d5f677674ac0eabe7e1e0951 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 29 15:07:38 2011 -0300 StreamTubeChannel: Implement methods in the same order as declared. TelepathyQt4/stream-tube-channel.cpp | 110 +++++++++++++++++----------------- TelepathyQt4/stream-tube-channel.h | 2 +- 2 files changed, 56 insertions(+), 56 deletions(-) commit d648b8675ed59a301f2ad445b7a49b27c9526bda Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 29 15:05:55 2011 -0300 StreamTubeChannel: Refactor to conform with other parts of the library. TelepathyQt4/stream-tube-channel.cpp | 69 +++++++++++++--------------------- TelepathyQt4/stream-tube-channel.h | 4 +- 2 files changed, 29 insertions(+), 44 deletions(-) commit 2e2cd7c03a1f85b1ac73db90769805fecfddd5ed Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 29 15:05:12 2011 -0300 OutgoingStreamTubeChannel: Update copyright. TelepathyQt4/outgoing-stream-tube-channel.cpp | 2 +- TelepathyQt4/outgoing-stream-tube-channel.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit e03ec405c6aad0c5e24162609a6e6c4ec0ff1484 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 29 15:04:40 2011 -0300 IncomingStreamTubeChannel: Update copyright. TelepathyQt4/incoming-stream-tube-channel.cpp | 2 +- TelepathyQt4/incoming-stream-tube-channel.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit dbdbe2a551c308ef1dd559b176ff4f848b7a8a7e Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 29 14:51:39 2011 -0300 StreamTubeChannel: Remove useless definition of base tube type. TelepathyQt4/incoming-stream-tube-channel.cpp | 1 - TelepathyQt4/outgoing-stream-tube-channel.cpp | 2 -- TelepathyQt4/stream-tube-channel.cpp | 43 ++++++++----------------- TelepathyQt4/stream-tube-channel.h | 1 - 4 files changed, 14 insertions(+), 33 deletions(-) commit 97b70ca84509850736b126b681a58fcbde122375 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 29 14:44:46 2011 -0300 TubeChannel: Improve docs. TelepathyQt4/tube-channel.cpp | 46 +++++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 20 deletions(-) commit 50048e04fb1cdb7c4e52e47e8a472dfd3ebff963 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 29 14:42:40 2011 -0300 stream-tube-chan test chan: Properly set parameters to what was received by offer. tests/dbus/stream-tube-chan.cpp | 20 ++++++++++---------- tests/lib/glib/stream-tube-chan.c | 27 +++++++++++++++++++++------ 2 files changed, 31 insertions(+), 16 deletions(-) commit 64505ff37e8e8742810ed0123dd9d29b1b8cfc28 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 29 14:12:58 2011 -0300 TubeChannel: Only emit tubeStateChanged if we already received the state from initial introspection. TelepathyQt4/tube-channel.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) commit 13e80c51e0b7cabfb611a659586a750ed4c1f9ab Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 29 13:49:10 2011 -0300 TubeChannel: Refactor to conform with other parts of the library. TelepathyQt4/tube-channel.cpp | 102 ++++++++++++++++------------------------- TelepathyQt4/tube-channel.h | 4 +- 2 files changed, 42 insertions(+), 64 deletions(-) commit c26773028e605a82e8e80287a2200a00aa50c7a4 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 29 13:24:36 2011 -0300 stream-tube-chan test: Enable tests for OutgoingStreamTubeChannel::connectionsForCredentials. tests/dbus/stream-tube-chan.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) commit 683f3c6cb909bc3ec89848d24b88a65b24cc26ab Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 29 13:24:11 2011 -0300 OutgoingStreamTubeChannel: Add connectionsForCredentials method. .../outgoing-stream-tube-channel-internal.h | 1 + TelepathyQt4/outgoing-stream-tube-channel.cpp | 77 ++++++++++++++++++-- TelepathyQt4/outgoing-stream-tube-channel.h | 3 +- 3 files changed, 74 insertions(+), 7 deletions(-) commit 278a2a22353c18391b5e776d5df1f7f1235d6e40 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 29 13:23:51 2011 -0300 OutgoingStreamTubeChannel: Fix coding style. TelepathyQt4/outgoing-stream-tube-channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 4425b817b834016fb2440fc5199b156c15928566 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 29 13:23:21 2011 -0300 StreamTubeChannel: Add accessControl accessor. TelepathyQt4/incoming-stream-tube-channel.cpp | 3 +++ TelepathyQt4/outgoing-stream-tube-channel.cpp | 4 ++++ TelepathyQt4/stream-tube-channel.cpp | 22 +++++++++++++++++++++- TelepathyQt4/stream-tube-channel.h | 2 ++ 4 files changed, 30 insertions(+), 1 deletion(-) commit d6d7b210da62ba83431c7cae7e615fb19bd01f28 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 28 13:55:33 2011 -0300 stream-tube-chan test: Add tests for tube offering. tests/dbus/stream-tube-chan.cpp | 198 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 195 insertions(+), 3 deletions(-) commit 31f7fd58f84ecafd5099c3ea92a6045f9664033b Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 28 13:54:21 2011 -0300 stream-tube-chan test chan: Add method to simulate a peer connecting to an offered tube without using GIOStream. tests/lib/glib/stream-tube-chan.c | 17 +++++++++++++++++ tests/lib/glib/stream-tube-chan.h | 4 ++++ 2 files changed, 21 insertions(+) commit 30724301bf228b49fe62f5725536d3126fa6a31f Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 28 13:53:39 2011 -0300 OutgoingStreamTubeChannel: Sanitize offering handling. TelepathyQt4/outgoing-stream-tube-channel.cpp | 34 +++++++++++++++---------- 1 file changed, 21 insertions(+), 13 deletions(-) commit 5f6a03764dd6a16d8f712aa0b4ab12460c35197b Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 28 13:53:02 2011 -0300 TubeChannel: Remove useless debug. TelepathyQt4/tube-channel.cpp | 1 - 1 file changed, 1 deletion(-) commit bd0a81a3e52cf221e2cae051cb189d3a52240c3e Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 28 11:38:37 2011 -0300 stream-tube-chan: Use expectFailure where appropriate. tests/dbus/stream-tube-chan.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 3ef29e9610ccbceebe7e3e50c9167ef184b3d8c2 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 28 11:30:23 2011 -0300 stream-tube-chan test chan: Use guint instead of guint16 to retrieve the port from the access control param. tests/lib/glib/stream-tube-chan.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c56e60cde2e9f702b1250514e8291235551c6beb Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 27 16:48:41 2011 -0300 PendingStreamTubeConnection: Rename requireCredentials to requiresCredentials. TelepathyQt4/pending-stream-tube-connection.cpp | 16 ++++++++-------- TelepathyQt4/pending-stream-tube-connection.h | 4 ++-- tests/dbus/stream-tube-chan.cpp | 16 ++++++++-------- 3 files changed, 18 insertions(+), 18 deletions(-) commit 3b330e64d6288de6d7999b189942082d190bd992 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 27 16:45:46 2011 -0300 IncomingStreamTubeChannel: Only initialize random number generator once. TelepathyQt4/incoming-stream-tube-channel.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit 8f37fa17adddaef5a9d91968f51f3f2a4f0a8517 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 27 16:38:22 2011 -0300 stream-tube-chan test: Enable tests for Port access control. tests/dbus/stream-tube-chan.cpp | 131 +++++++++++++++++++++++++++++++++------ 1 file changed, 111 insertions(+), 20 deletions(-) commit c676937afff8617de40b4e326bbe5b7f34ba6b83 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 27 16:37:46 2011 -0300 stream-tube-chan test chan: Properly check access control param when using Port access control. tests/lib/glib/stream-tube-chan.c | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) commit 724d0c51a8a1fb46afe1f08185691738fae3d521 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 15 17:13:43 2011 -0300 stream-tube-chan test: Add initial test for *StreamTubeChannel. tests/dbus/CMakeLists.txt | 4 + tests/dbus/stream-tube-chan.cpp | 389 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 393 insertions(+) commit 1789707879995db1921d5549e9c49b980d274d9a Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 15 17:11:55 2011 -0300 Import stream-tube-chan.[ch] from tp-glib. tests/lib/glib/CMakeLists.txt | 8 +- tests/lib/glib/stream-tube-chan.c | 720 +++++++++++++++++++++++++++++++++++++ tests/lib/glib/stream-tube-chan.h | 133 +++++++ 3 files changed, 860 insertions(+), 1 deletion(-) commit 11961b25199f8209aad81a236838953f03f260ae Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 15 17:10:17 2011 -0300 cmake: Set ENABLE_TP_GLIB_GIO_TESTS if tp-glib tests are enabled and gio is found. CMakeLists.txt | 8 ++++++++ 1 file changed, 8 insertions(+) commit 7ff56aa1ada8608c15ebc8158912614242095371 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 15 17:09:45 2011 -0300 cmake: Add FindGIO/Unix.cmake. cmake/modules/FindGIO.cmake | 37 +++++++++++++++++++++++++++++++++++++ cmake/modules/FindGIOUnix.cmake | 31 +++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) commit 786349e705646b95e3b6ccc941776c5984db45ee Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 15 17:09:01 2011 -0300 PendingStreamTubeConnection: Add requireCredentials/credentialByte methods. TelepathyQt4/incoming-stream-tube-channel.cpp | 4 +-- TelepathyQt4/pending-stream-tube-connection.cpp | 38 +++++++++++++++++++++-- TelepathyQt4/pending-stream-tube-connection.h | 8 +++-- 3 files changed, 44 insertions(+), 6 deletions(-) commit f2d8ef1284c7458b7777d6b0ea1740e20a5d2996 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 15 17:07:29 2011 -0300 IncomingStreamTubeChannel: Properly pass access control param when calling accept on unix sockets. TelepathyQt4/incoming-stream-tube-channel.cpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) commit 3391a6d7d03f6414c68ca1325e4dc58541bdf8f4 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 15 17:05:50 2011 -0300 TubeChannel: Fix typo in debug message. TelepathyQt4/tube-channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f3c94b87cfed85daeef6401259cb34ff2e575756 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 15 17:04:49 2011 -0300 StreamTubeChannel: Fix supportsUnixSocketsWithCredentials. TelepathyQt4/stream-tube-channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 1aac85233965a9051f2561564d5c383fe708eeee Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 15 17:03:31 2011 -0300 StreamTubeChannel: Make introspectable do not depend on Channel.Type.StreamTube. TelepathyQt4/stream-tube-channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 117a7b8e965287502c0c9ac0537f1f9f602fed34 Author: Olli Salli Date: Mon Jun 13 16:05:47 2011 +0300 Update NEWS NEWS | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 0a76a4d1fecf71c26147ec98f6b57db2d7a8c513 Merge: 65e362d 8b066a6 Author: Olli Salli Date: Mon Jun 13 15:53:24 2011 +0300 Merge branch 'streamtube-address' Reviewed-by: George Kiagiadakis (gkiagia) commit 8b066a6f688257b20c2bf772198ca1e372df898c Author: Olli Salli Date: Sun Jun 12 12:22:15 2011 +0300 Remove connect() to non-existant slot from acceptTubeAsUnixSocket TelepathyQt4/incoming-stream-tube-channel.cpp | 2 -- 1 file changed, 2 deletions(-) commit 011dc9129286cb8d652354536e97287f113a3d08 Author: Olli Salli Date: Sat Jun 11 15:29:53 2011 +0300 Remove duplicated (and conflicting) mechanism to populate address for accepted StreamTubes TelepathyQt4/incoming-stream-tube-channel.cpp | 26 ++----------------------- TelepathyQt4/incoming-stream-tube-channel.h | 1 - 2 files changed, 2 insertions(+), 25 deletions(-) commit f50b8fbf99edc18041ba987bf6cc2bef0eb424b6 Author: Olli Salli Date: Sat Jun 11 15:25:30 2011 +0300 StreamTubeChannel: Add warnings to early-out in address accessors TelepathyQt4/stream-tube-channel.cpp | 2 ++ 1 file changed, 2 insertions(+) commit 65e362d14128efdb1e6a237ce8f75c233e26587c Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 9 16:14:45 2011 -0300 Start 0.7.2 development CMakeLists.txt | 2 +- NEWS | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) commit ff8ab4457eeb5b9802c17bc0fa087c29d3e78cca Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 9 15:46:01 2011 -0300 Prepare release 0.7.1 CMakeLists.txt | 4 ++-- NEWS | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit b4f6d01be1d7f9e7c948cc269a43eb284987d2de Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 9 15:53:43 2011 -0300 Update NEWS NEWS | 2 ++ 1 file changed, 2 insertions(+) commit f9adea93b485e2a6b8b72c46f155e6fa12bb27f6 Merge: 930b9a5 f5a45e2 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 9 15:50:09 2011 -0300 Merge remote-tracking branch 'oggis/doxygen-trivia' Reviewed-by: Andre Magalhaes (andrunko) commit 930b9a55d68030e46a4b3ba79caecfbf15d4f27b Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 9 15:44:43 2011 -0300 Update NEWS NEWS | 2 ++ 1 file changed, 2 insertions(+) commit bd4cba37aea3caf3f184af020f8586cdec2771be Merge: 9b524b5 d4449e1 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 9 15:33:07 2011 -0300 Merge branch 'tests-cleanup' Reviewed-by: Olli Salli (oggis) commit 9b524b545d25046c9a2d44f4bdf89ba7cf06097b Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 9 15:31:59 2011 -0300 Update NEWS NEWS | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 0767ee3fc6a56472a6e1d255e85d7f698f07acc3 Merge: 0df289b c5de61d Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 9 15:28:46 2011 -0300 Merge remote-tracking branch 'drdanz/fix-docs' Reviewed-by: Andre Magalhaes (andrunko) commit d4449e18a9f2f9822bc1a7515c4c6c036d3e6324 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 9 12:55:58 2011 -0300 TestConnHelper: Remove disconnectWithDBusError. tests/lib/glib-helpers/test-conn-helper.cpp | 18 ------------------ tests/lib/glib-helpers/test-conn-helper.h | 2 -- 2 files changed, 20 deletions(-) commit 5fce3d80d426bbf4bbf020586607cbb7ecae5c29 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 9 12:54:43 2011 -0300 streamed-media-chan test: Use TEST_VERIFY_OP tests/dbus/streamed-media-chan.cpp | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) commit 7830df016a7cddebd9d7bf8b3b6ba33acbdde567 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 8 13:51:59 2011 -0300 handles test: Use TEST_VERIFY_OP tests/dbus/handles.cpp | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) commit 5de4e12124f6fc64387faf91dd0eafe0afd85cc0 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 8 13:51:59 2011 -0300 contacts test: Use TEST_VERIFY_OP tests/dbus/contacts.cpp | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) commit 4c81b57e96aaa0b0697e539fc5f3f8eed32d992c Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 8 13:51:59 2011 -0300 contact-search-chan test: Use TEST_VERIFY_OP tests/dbus/contact-search-chan.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 6eb71c57b923eaeff4e207abd89b4f7d53b7e00d Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 8 13:51:59 2011 -0300 contact-messenger test: Use TEST_VERIFY_OP tests/dbus/contact-messenger.cpp | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) commit 857148615034da7859cc923ac88a0accdbe10e23 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 9 12:35:25 2011 -0300 conn-roster test: Use TEST_VERIFY_OP tests/dbus/conn-roster.cpp | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) commit b611137b92959016c31eb31efec8691ac7b45933 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 9 12:35:24 2011 -0300 conn-roster-legacy test: Use TEST_VERIFY_OP tests/dbus/conn-roster-legacy.cpp | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) commit d626e7d6678e5b44a31d70a37e8b75b5de5fc339 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 8 13:51:59 2011 -0300 conn-requests test: Use TEST_VERIFY_OP tests/dbus/conn-requests.cpp | 60 +++--------------------------------------- 1 file changed, 4 insertions(+), 56 deletions(-) commit a3cb4c21f974fc590e3da06fd3683fd1115410e5 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 8 13:51:59 2011 -0300 cm-basics test: Use TEST_VERIFY_OP tests/dbus/cm-basics.cpp | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) commit 27296e6aa509e5930d2731587e98945f663e3c99 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 8 13:51:58 2011 -0300 chan-basics test: Use TEST_VERIFY_OP tests/dbus/chan-basics.cpp | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) commit febf4dfc49ea5bd0e49fa1bb5a94a0a1ae9dcb9f Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 8 13:51:22 2011 -0300 test.h: Add macro to verify that a PendingOperation finished successfully. tests/lib/test.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) commit 51eecc3330d1196269a5326da525fdcf9d7629e3 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 8 13:51:00 2011 -0300 TestConnHelper: Add helper method to upgrade contacts. tests/lib/glib-helpers/test-conn-helper.cpp | 27 +++++++++++++++++++++++++++ tests/lib/glib-helpers/test-conn-helper.h | 3 +++ 2 files changed, 30 insertions(+) commit 73a7dc7f416290eb3ca1f0a217f70a0ab8443f28 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 8 13:50:24 2011 -0300 TestConnHelper: Check that features are actually requested when building contacts. tests/lib/glib-helpers/test-conn-helper.cpp | 7 +++++++ tests/lib/glib-helpers/test-conn-helper.h | 2 ++ 2 files changed, 9 insertions(+) commit 4053a8ebe5085666295d367f722f7bfeb106108f Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 8 13:10:43 2011 -0300 TestConnHelper: Add more tests when building contacts. tests/lib/glib-helpers/test-conn-helper.cpp | 33 ++++++++++++++++++++++----- tests/lib/glib-helpers/test-conn-helper.h | 10 +++++++- 2 files changed, 36 insertions(+), 7 deletions(-) commit 309efb25e230b7175e5ec7d79cb065aa3a830059 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 8 12:23:59 2011 -0300 streamed-media-chan test: Use TestConnHelper::create/ensureChannel() tests/dbus/streamed-media-chan.cpp | 146 +++++------------------------------- 1 file changed, 18 insertions(+), 128 deletions(-) commit 01c158772a84bd587704530304f3dbd314725883 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 8 12:23:59 2011 -0300 chan-group test: Use TestConnHelper::create/ensureChannel() tests/dbus/chan-group.cpp | 61 +++++---------------------------------------- 1 file changed, 6 insertions(+), 55 deletions(-) commit 41730dc3fa71a3e09344e931cc7e7e82a9635b63 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 8 12:23:59 2011 -0300 chan-basics test: Use TestConnHelper::create/ensureChannel() tests/dbus/chan-basics.cpp | 91 ++++---------------------------------------- 1 file changed, 8 insertions(+), 83 deletions(-) commit f3a24f76187a058cedb7321ab40b670a79fd15c4 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 8 12:23:23 2011 -0300 TestConnHelper: Add helper methods to create/ensure channels. tests/lib/glib-helpers/test-conn-helper.cpp | 137 +++++++++++++++++++++++++++ tests/lib/glib-helpers/test-conn-helper.h | 17 ++++ 2 files changed, 154 insertions(+) commit 7e52bac03be85074dd85d37830a5132c4c10d35b Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 8 11:45:15 2011 -0300 streamed-media-chan test: Use TestConnHelper::contacts() tests/dbus/streamed-media-chan.cpp | 157 +++++++++--------------------------- 1 file changed, 38 insertions(+), 119 deletions(-) commit 1903663fab8fbe4330c71edf2bc6fcc0cfbcb391 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 8 11:45:15 2011 -0300 contacts-location test: Use TestConnHelper::contacts() tests/dbus/contacts-location.cpp | 50 ++++++-------------------------------- 1 file changed, 7 insertions(+), 43 deletions(-) commit 5abe5419300ae60ad15805a88f7e6c5599445d4e Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 8 11:45:15 2011 -0300 contacts-info test: Use TestConnHelper::contacts() tests/dbus/contacts-info.cpp | 56 ++++++++---------------------------------- 1 file changed, 10 insertions(+), 46 deletions(-) commit 3af37fb6fdd5acbcecf05fa2d0c8f5133ed78ff6 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 8 11:45:15 2011 -0300 contacts-capabilities test: Use TestConnHelper::contacts() tests/dbus/contacts-capabilities.cpp | 45 +++------------------------------- 1 file changed, 4 insertions(+), 41 deletions(-) commit d57f8c70b74a87f36f44b78c7edea479296bbf05 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 8 11:45:14 2011 -0300 contacts-avatar test: Use TestConnHelper::contacts() tests/dbus/contacts-avatar.cpp | 38 ++------------------------------------ 1 file changed, 2 insertions(+), 36 deletions(-) commit 65e36d1eb04a84e39c024d640a69cfadac8e8a48 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 8 11:45:14 2011 -0300 conn-roster test: Use TestConnHelper::contacts() tests/dbus/conn-roster.cpp | 104 +++++++++++++------------------------------- 1 file changed, 31 insertions(+), 73 deletions(-) commit a90599042a7d5261c6b425054d81765c82405836 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 8 11:45:14 2011 -0300 conn-roster-legacy test: Use TestConnHelper::contacts() tests/dbus/conn-roster-legacy.cpp | 101 +++++++++++-------------------------- 1 file changed, 30 insertions(+), 71 deletions(-) commit ae5037621a082305b984099d9399f77c1b366da0 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 8 11:45:14 2011 -0300 chan-group test: Use TestConnHelper::contacts() tests/dbus/chan-group.cpp | 55 +++++++-------------------------------------- 1 file changed, 8 insertions(+), 47 deletions(-) commit 69af67e8c3b979a8c1adc07620ab4abe7544fb41 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 8 11:42:45 2011 -0300 TestConnHelper: Add helper methods to build contacts. tests/lib/glib-helpers/test-conn-helper.cpp | 49 +++++++++++++++++++++++++++ tests/lib/glib-helpers/test-conn-helper.h | 9 +++++ 2 files changed, 58 insertions(+) commit 9bb7e0a9846f098f321474f846f86909c97f8557 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 7 23:04:45 2011 -0300 chan-conference test: Properly set test name. tests/dbus/chan-conference.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit cc0d0e960b907892de1343559a4e3c10016c609f Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 7 23:03:35 2011 -0300 Rename chan-contact-search test to contact-search-chan to follow SM/Text chan tests. tests/dbus/CMakeLists.txt | 2 +- tests/dbus/chan-contact-search.cpp | 309 ------------------------------------ tests/dbus/contact-search-chan.cpp | 309 ++++++++++++++++++++++++++++++++++++ 3 files changed, 310 insertions(+), 310 deletions(-) commit e806b21a5f263ac3d08fa5db0825718de05f96bd Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 7 22:58:02 2011 -0300 contacts-avatar test: Reorder methods implementation. tests/dbus/contacts-avatar.cpp | 100 ++++++++++++++++++++-------------------- 1 file changed, 49 insertions(+), 51 deletions(-) commit bf01c0c40254d8b0fea38d646448c0a164bc29f4 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 7 22:55:29 2011 -0300 cm-basics test: Add test for ConnectionManager::listNames(). tests/dbus/cm-basics.cpp | 58 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 46 insertions(+), 12 deletions(-) commit 3cd2eac97ef97d78191efcca3dad93bbe5a067f1 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 7 22:55:00 2011 -0300 text-chan test: Use TestConnHelper. tests/dbus/CMakeLists.txt | 2 +- tests/dbus/text-chan.cpp | 123 ++++++++++----------------------------------- 2 files changed, 27 insertions(+), 98 deletions(-) commit fe25ef8a6b894ebc465589cb298848396eab3ff9 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 7 22:54:45 2011 -0300 streamed-media-channel test: Use TestConnHelper. tests/dbus/CMakeLists.txt | 2 +- tests/dbus/streamed-media-chan.cpp | 155 ++++++++++++------------------------ 2 files changed, 53 insertions(+), 104 deletions(-) commit 548c93483ad4412caadde7f515fe5328877c5d75 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 7 22:54:19 2011 -0300 handles test: Use TestConnHelper. tests/dbus/CMakeLists.txt | 2 +- tests/dbus/handles.cpp | 123 +++++---------------------------------------- 2 files changed, 14 insertions(+), 111 deletions(-) commit 3c4bc4160eccc73c371ad170387128140ffd8b93 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 7 22:53:34 2011 -0300 contacts-location test: Use TestConnHelper. tests/dbus/CMakeLists.txt | 2 +- tests/dbus/contacts-location.cpp | 97 +++++++++----------------------------- 2 files changed, 22 insertions(+), 77 deletions(-) commit 705be5a82ccea54aee3f676acade978322b33b11 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 7 22:53:06 2011 -0300 contacts-info test: Use TestConnHelper. tests/dbus/CMakeLists.txt | 2 +- tests/dbus/contacts-info.cpp | 100 ++++++++++-------------------------------- 2 files changed, 24 insertions(+), 78 deletions(-) commit f5973b321890b917e3b356867b0ea3dea1f59d4a Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 7 22:52:26 2011 -0300 contacts-capabilities test: Use TestConnHelper. tests/dbus/CMakeLists.txt | 2 +- tests/dbus/contacts-capabilities.cpp | 97 ++++++++-------------------------- 2 files changed, 22 insertions(+), 77 deletions(-) commit 1f05541d210bbc344065694a6c1b20392d1b0ae8 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 7 22:51:48 2011 -0300 contacts-avatar test: Use TestConnHelper. tests/dbus/CMakeLists.txt | 2 +- tests/dbus/contacts-avatar.cpp | 104 ++++++++++------------------------------ 2 files changed, 25 insertions(+), 81 deletions(-) commit 37cf06e64ade0a93f0339aeb9a91c268634ad52c Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 7 22:50:44 2011 -0300 contact-factory test: Use TestConnHelper. tests/dbus/CMakeLists.txt | 2 +- tests/dbus/contact-factory.cpp | 87 +++++++++------------------------------- 2 files changed, 21 insertions(+), 68 deletions(-) commit 596cb8012416bd330423656be97b72c37aa2ab6d Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 7 22:50:01 2011 -0300 conn-roster test: Use TestConnHelper. tests/dbus/CMakeLists.txt | 2 +- tests/dbus/conn-roster.cpp | 116 ++++++++++---------------------------------- 2 files changed, 26 insertions(+), 92 deletions(-) commit 3c76203de447a02d076bbf2c47b10d0e9d561ee8 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 7 22:49:34 2011 -0300 conn-roster-legacy test: Use TestConnHelper. tests/dbus/CMakeLists.txt | 2 +- tests/dbus/conn-roster-legacy.cpp | 116 ++++++++----------------------------- 2 files changed, 24 insertions(+), 94 deletions(-) commit a7db9cbc3fe5b648a2a71e4f9b522bc45423b38d Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 7 22:48:47 2011 -0300 conn-requests test: Use TestConnHelper. tests/dbus/CMakeLists.txt | 2 +- tests/dbus/conn-requests.cpp | 91 +++++++----------------------------------- 2 files changed, 15 insertions(+), 78 deletions(-) commit 3eef8530cdc1a3f2619678720eb4203c93f7523b Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 7 22:47:46 2011 -0300 conn-capabilities test: Use TestConnHelper. tests/dbus/CMakeLists.txt | 2 +- tests/dbus/conn-capabilities.cpp | 153 ++++++++++---------------------------- 2 files changed, 41 insertions(+), 114 deletions(-) commit 496235f309aa4c1baafab9f5601d054f76471184 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 7 22:46:19 2011 -0300 client test: Use TestConnHelper. tests/dbus/CMakeLists.txt | 2 +- tests/dbus/client.cpp | 95 +++++++++++++-------------------------------- 2 files changed, 27 insertions(+), 70 deletions(-) commit 0f8753e051f1883fc24759f2dc31b431df1f0d17 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 7 22:45:44 2011 -0300 chan-group test: Use TestConnHelper. tests/dbus/CMakeLists.txt | 2 +- tests/dbus/chan-group.cpp | 113 ++++++++++----------------------------------- 2 files changed, 25 insertions(+), 90 deletions(-) commit 7750ede7f9a16c055068752387d821d95090f122 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 7 22:44:59 2011 -0300 chan-contact-search test: Use TestConnHelper. tests/dbus/CMakeLists.txt | 2 +- tests/dbus/chan-contact-search.cpp | 102 +++++++----------------------------- 2 files changed, 19 insertions(+), 85 deletions(-) commit a7e6df209a5e5db14f9bf50540ed2ca569552c85 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 7 22:44:17 2011 -0300 chan-conference test: Use TestConnHelper. tests/dbus/CMakeLists.txt | 2 +- tests/dbus/chan-conference.cpp | 117 ++++++++-------------------------------- 2 files changed, 24 insertions(+), 95 deletions(-) commit 0dbbf70d8ffbd7617b73617af74be04737668ae4 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 7 22:43:17 2011 -0300 chan-basics test: Use TestConnHelper. tests/dbus/CMakeLists.txt | 2 +- tests/dbus/chan-basics.cpp | 135 +++++++------------------------------------- 2 files changed, 21 insertions(+), 116 deletions(-) commit 6a9e30a7e93a855aa5481003e5d6d33ab97d4336 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 7 22:42:14 2011 -0300 account-connection-factory test: Use TestConnHelper. tests/dbus/CMakeLists.txt | 2 +- tests/dbus/account-connection-factory.cpp | 126 +++++++++++------------------ 2 files changed, 49 insertions(+), 79 deletions(-) commit 96708718ec942c1572bef85ba81dc67139b5a7a1 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 7 22:41:15 2011 -0300 account-basics test: Use TestConnHelper. tests/dbus/CMakeLists.txt | 2 +- tests/dbus/account-basics.cpp | 91 ++++++++--------------------------------- 2 files changed, 19 insertions(+), 74 deletions(-) commit ed1df43166f8d2b3d524dd123b19d94db2ce95b0 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 7 22:39:12 2011 -0300 test.h: Add header guard. tests/lib/test.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit bdf2fe110fd495681371cd1a94ccc6f63c3e643d Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 7 22:38:36 2011 -0300 glib-helpers: Add TestConnHelper helper class. tests/lib/CMakeLists.txt | 1 + tests/lib/glib-helpers/CMakeLists.txt | 22 +++ tests/lib/glib-helpers/test-conn-helper.cpp | 192 +++++++++++++++++++++++++++ tests/lib/glib-helpers/test-conn-helper.h | 65 +++++++++ 4 files changed, 280 insertions(+) commit c5de61d440cc912298a3f51bca23c100b7648165 Author: Daniele E. Domenichelli Date: Wed Jun 8 15:46:39 2011 +0200 Small fix to Tp::Contact documentation TelepathyQt4/contact.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit f5a45e21d9616c03398015834ee92615a428a6d1 Author: Olli Salli Date: Sun Jun 5 20:53:58 2011 +0300 Make doxygen-doc depend on all generated sources So that they're actually built and can be included in the docs in an up-to-date shape. TelepathyQt4/CMakeLists.txt | 4 ++++ cmake/modules/TpQt4Macros.cmake | 4 ++++ 2 files changed, 8 insertions(+) commit 58115637a117cd2e8882cbce9a18daec634c4e45 Author: Olli Salli Date: Sun Jun 5 20:35:43 2011 +0300 Fix trivial syntax error in doxygen.cfg doxygen.cfg.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b2eaa8e473f932b83017c1c792c4fec61f311070 Author: Olli Salli Date: Sun Jun 5 20:27:06 2011 +0300 cmake: Move Doxygen include after Qt package lookup Otherwise crosslinking doesn't work on a fresh build, because QT_DOC_DIR hasn't yet been set CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 0df289bbea7123055f3b8c36e9101f65419ae97c Author: Olli Salli Date: Sun Jun 5 20:05:45 2011 +0300 Update NEWS NEWS | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit c4aab8653facd9270c89217d836c03fb41ab32ae Merge: 8959aac ed6b67a Author: Olli Salli Date: Sun Jun 5 20:03:38 2011 +0300 Merge remote-tracking branch 'drdanz/filetransfer-uri' Reviewed-by: Olli Salli (oggis) commit ed6b67a061a237277d3778d852f3cc322f07b06d Author: Daniele E. Domenichelli Date: Sun Jun 5 15:19:16 2011 +0200 Small fix to documentation TelepathyQt4/pending-channel-request.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5e31b274fd5a779be4ff73837432c0ffca8de0f6 Author: Daniele E. Domenichelli Date: Thu Jun 2 20:30:17 2011 +0200 Add unit tests for Account::createFileTransfer() and createAndHandleFileTransfer() tests/dbus/account-channel-dispatcher.cpp | 132 ++++++++++++++++++++++++++--- 1 file changed, 122 insertions(+), 10 deletions(-) commit c9881f1e3803cb9541222e239808dc84ea1e09a1 Author: Daniele E. Domenichelli Date: Fri Jun 3 23:13:32 2011 +0200 Do not try to create a file transfer channel if parameters are invalid TelepathyQt4/account.cpp | 41 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) commit 0cc9259c5c37aeff563a2c46b6423540d72ba05a Author: Daniele E. Domenichelli Date: Fri Jun 3 23:12:41 2011 +0200 Add error constructor in PendingChannel TelepathyQt4/pending-channel.cpp | 11 +++++++++++ TelepathyQt4/pending-channel.h | 2 ++ 2 files changed, 13 insertions(+) commit 51569d262b1e6dea8d15be07a9af691ae5eed865 Author: Daniele E. Domenichelli Date: Fri Jun 3 23:12:21 2011 +0200 Add error constructor in PendingChannelRequest TelepathyQt4/pending-channel-request.cpp | 15 +++++++++++++++ TelepathyQt4/pending-channel-request.h | 2 ++ 2 files changed, 17 insertions(+) commit 596295a082a1a22f7a26582378c4300742f351b8 Author: Daniele E. Domenichelli Date: Wed Jun 1 13:14:21 2011 +0200 Add missing documentation to FileTransferChannel (signals) TelepathyQt4/file-transfer-channel.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) commit 6e5a98a4b64d2720bdfaa963d21799c8df2efc33 Author: Daniele E. Domenichelli Date: Sun May 29 16:46:17 2011 +0200 Support URI property in FileTransferChannel and IncomingFileTransferChannel Add public methods: - QString FileTransferChannel::uri() const; - PendingOperation *IncomingFileTransferChannel::setUri(const QString& uri); Add signal: - void IncomingFileTransferChannel::uriDefined(const QString &uri); TelepathyQt4/file-transfer-channel.cpp | 31 +++++++++++++++ TelepathyQt4/file-transfer-channel.h | 4 ++ TelepathyQt4/incoming-file-transfer-channel.cpp | 47 +++++++++++++++++++++++ TelepathyQt4/incoming-file-transfer-channel.h | 4 ++ 4 files changed, 86 insertions(+) commit 9e7311be8fc79a0c5fc9a6d6666f4af13b2debd7 Author: Daniele E. Domenichelli Date: Thu Jun 2 20:31:16 2011 +0200 Add unit tests for FileTransferChannelCreationProperties tests/CMakeLists.txt | 1 + .../file-transfer-channel-creation-properties.cpp | 145 ++++++++++++++++++++ 2 files changed, 146 insertions(+) commit 7fe2dd76c319dedf1cbd645b80ef11de3c66b97d Author: Daniele E. Domenichelli Date: Sun May 29 17:21:17 2011 +0200 Add documentation for class FileTransferChannelCreationProperties .../file-transfer-channel-creation-properties.cpp | 140 +++++++++++++++++++- 1 file changed, 139 insertions(+), 1 deletion(-) commit 8e2339b490ab9ab6cbfba89ec78808c6155dc351 Author: Daniele E. Domenichelli Date: Sat May 28 12:45:46 2011 +0200 Add constructor that sets properties from path to a local file to FileTransferChannelCreationProperties Add public method - FileTransferChannelCreationProperties(const QString &path, const QString &contentType); .../file-transfer-channel-creation-properties.cpp | 32 ++++++++++++++++++++ .../file-transfer-channel-creation-properties.h | 2 ++ 2 files changed, 34 insertions(+) commit 3f7c3f637a34529a2dde18e7f0300ce93d204b7d Author: Daniele E. Domenichelli Date: Fri May 13 01:59:48 2011 +0200 Support the URI property in FileTransferChannelCreationProperties Add public methods - FileTransferChannelCreationProperties &FileTransferChannelCreationProperties::setUri(const QString &uri) - bool FileTransferChannelCreationProperties::hasUri() TelepathyQt4/account.cpp | 6 ++++ .../file-transfer-channel-creation-properties.cpp | 32 ++++++++++++++++++++ .../file-transfer-channel-creation-properties.h | 4 +++ 3 files changed, 42 insertions(+) commit ac3dc02b6a9fa0b7030726d89e40cb2533670e97 Author: Daniele E. Domenichelli Date: Sun May 29 20:44:53 2011 +0200 Do not use bool variables to remember if FileTransferChannelCreationProperties has properties .../file-transfer-channel-creation-properties.cpp | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) commit 352b079112ccbb20d684e6b8901670c8e92dbde0 Author: Daniele E. Domenichelli Date: Sat May 28 12:28:44 2011 +0200 Clean suggestedFileName when it is stored instead of when it is used in FileTransferChannelCreationProperties TelepathyQt4/account.cpp | 3 +-- .../file-transfer-channel-creation-properties.cpp | 6 ++++-- 2 files changed, 5 insertions(+), 4 deletions(-) commit 8959aacbfdd70d4865e55a51640cc1a5ad2e8b9c Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 1 16:23:03 2011 -0300 Start 0.7.1 development CMakeLists.txt | 2 +- NEWS | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) commit ad9da43b7c731de3e192a17dc116c2f8183584f5 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 1 16:04:29 2011 -0300 Prepare release 0.7.0 CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 5598a9b8bcbb949aa8ae3c439f7b3eeb0acf5f7f Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 1 16:04:16 2011 -0300 Update NEWS NEWS | 3 +++ 1 file changed, 3 insertions(+) commit eb0ffe3215ba82eb5af4579c68fa7ff490c71acc Merge: 7a532ff aee044f Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 1 16:03:04 2011 -0300 Merge branch 'docs-0.7' Reviewed-by: Olli Salli (oggis) commit aee044f6e2fd77e51fefe921c93a1654ebbbd9cb Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 1 11:53:37 2011 -0300 ProtocolInfo: Fix class documentation. TelepathyQt4/protocol-info.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 70a0ffb6524dd69169fa07578cb6b9396b8239b9 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 1 11:45:16 2011 -0300 Connection: Fix doc for errorDetails(). TelepathyQt4/connection.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 8e4e17f8667ac8de0dccf8efd94f6320c74418cc Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 1 11:43:10 2011 -0300 Account: Fix doc for connectionErrorDetails. TelepathyQt4/account.cpp | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) commit c8b94c85d194f0700e158d5b4e2fd40322ed6d5b Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 1 11:42:55 2011 -0300 TubeChannel: Fix class description. TelepathyQt4/tube-channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f86731d010dd3d9c8b274973c745328bca063d9f Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 1 11:42:38 2011 -0300 ProtocolInfo: Link to the spec. TelepathyQt4/protocol-info.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 0b02054b50083b2d26c93559b26282ae010abf90 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 1 11:20:22 2011 -0300 Properly mention Telepathy and the spec where appropriate. TelepathyQt4/abstract-client.cpp | 6 +++--- TelepathyQt4/account.cpp | 10 ++++------ TelepathyQt4/async-model.dox | 5 +---- TelepathyQt4/capabilities-base.cpp | 2 +- TelepathyQt4/channel.cpp | 4 ++-- TelepathyQt4/connection-manager.cpp | 3 +-- TelepathyQt4/dbus-proxy.cpp | 2 +- TelepathyQt4/main.dox | 14 ++++++-------- TelepathyQt4/manager-file.cpp | 4 ++-- TelepathyQt4/message.cpp | 16 ++++++++-------- TelepathyQt4/pending-channel.cpp | 4 ++-- TelepathyQt4/profile.cpp | 12 ++++++------ TelepathyQt4/protocol-info.cpp | 11 +++++------ TelepathyQt4/stream-tube-channel.cpp | 6 ++---- TelepathyQt4/tube-channel.cpp | 6 ++---- doxygen.cfg.in | 1 + 16 files changed, 47 insertions(+), 59 deletions(-) commit 6bdc2ee13c5a661bc503d9ad16a4268a6f69e586 Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 31 18:12:39 2011 -0300 examples.dox: Add contact-messenger example. TelepathyQt4/examples.dox | 17 +++++++++++++++++ TelepathyQt4/main.dox | 1 + 2 files changed, 18 insertions(+) commit 3e372dfb8e636daf6bd340e1d79ae35c76caff7a Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 31 17:39:00 2011 -0300 TextChannel: Improve docs for features. TelepathyQt4/text-channel.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) commit 8c435fa088a9a15885555c7a97065c98f5d10823 Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 31 17:38:50 2011 -0300 Contact: Improve docs. Conflicts: TelepathyQt4/contact.cpp TelepathyQt4/contact.cpp | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) commit 7d1adf7171b554554a85aa7bb3938ecb014e9717 Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 31 17:38:18 2011 -0300 Connection: Improve docs. TelepathyQt4/connection.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) commit 88a0253b965dd3bb12d71984115d584c9c7d26e6 Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 31 17:38:03 2011 -0300 Channel: Improve docs. TelepathyQt4/channel.cpp | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) commit 7e3eba601a1f8ebe122802e55dbfc95bb4f3e335 Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 31 17:37:22 2011 -0300 Account: Improve docs for features. TelepathyQt4/account.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) commit a92507476aa10160f70d787238c939a4520f1474 Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 31 17:36:51 2011 -0300 async-model.dox: Improve docs. TelepathyQt4/async-model.dox | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) commit 188b2fa39199dcd5e55221550c68ae6377f513b9 Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 31 16:35:48 2011 -0300 examples.dox: Add protocols example. TelepathyQt4/examples.dox | 35 +++++++++++++++++++++++++++++++++++ TelepathyQt4/main.dox | 1 + 2 files changed, 36 insertions(+) commit 624531e6262e707e57c11d1585f13f1dd8c2a4ca Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 31 16:10:04 2011 -0300 async-model.dox: Update rationale. TelepathyQt4/async-model.dox | 45 +++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 23 deletions(-) commit 73ac2477abef067d901544712c043f732e812495 Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 31 14:15:56 2011 -0300 Connection: Improve docs. TelepathyQt4/connection.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) commit 3b2a39a0caa88fe8b2ce98af27c47aebb469ecd0 Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 31 14:15:23 2011 -0300 Contact: Improve docs. Conflicts: TelepathyQt4/contact.cpp TelepathyQt4/contact.cpp | 391 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 365 insertions(+), 26 deletions(-) commit b5959b56b525550a32cd23534d2a95a42a5843a5 Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 31 12:38:48 2011 -0300 doxygen-header.html: Remove tags. doxygen-header.html | 2 -- 1 file changed, 2 deletions(-) commit c201c810199aece4f27f6f62cf6a0e48909faacd Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 31 12:45:27 2011 -0300 Channel: Move signals docs to the bottom of the class implementation. TelepathyQt4/channel.cpp | 190 +++++++++++++++++++++++----------------------- 1 file changed, 95 insertions(+), 95 deletions(-) commit ab7c7d3d6b4e377804c3dc1aa88ae25d130d2cdc Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 31 14:50:56 2011 -0300 Channel: Update docs. TelepathyQt4/channel.cpp | 386 +++++++++++++++++++++++++++++----------------- 1 file changed, 245 insertions(+), 141 deletions(-) commit 1b220b846034a3fe2defce35ea58b49cec8e5be2 Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 31 14:49:55 2011 -0300 Channel: Move GroupMemberChangeDetails docs to where they belong. TelepathyQt4/channel.cpp | 118 ++++++++++++++++++++++------------------------ 1 file changed, 57 insertions(+), 61 deletions(-) commit e27278d7699edda4e3eab3529df4c56fe8c35335 Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 31 14:46:06 2011 -0300 Channel: Move GroupMemberChangeDetails implementation to a proper place so their docs are properly generated. TelepathyQt4/channel.cpp | 100 +++++++++++++++++++++++----------------------- 1 file changed, 50 insertions(+), 50 deletions(-) commit 3d1ecd86017c7e0d8b587d2c0df2136817f14405 Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 31 12:38:04 2011 -0300 Connection: Update docs. TelepathyQt4/connection.cpp | 72 ++++++++++++++++++++++++------------------- 1 file changed, 40 insertions(+), 32 deletions(-) commit bb5af17db7319d6907efbf097bdc851b7b26626f Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 31 12:37:37 2011 -0300 Account: Update docs. TelepathyQt4/account.cpp | 79 +++++++++++++++++++--------------------------- 1 file changed, 33 insertions(+), 46 deletions(-) commit edb7ba0cc4594202233d19720b915cc6ed898cdd Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 31 12:37:17 2011 -0300 AccountManager: Update docs. TelepathyQt4/account-manager.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) commit 4284f06cbe1a851676a7091cfb953ced82a68bf9 Author: Andre Moreira Magalhaes (andrunko) Date: Thu May 26 23:24:58 2011 -0300 Connection: Improve docs. TelepathyQt4/connection.cpp | 168 ++++++++++++++++++++++++++++--------------- 1 file changed, 110 insertions(+), 58 deletions(-) commit 203b14499fe21437665f9ae16bc6cf4a4bb74ecd Author: Andre Moreira Magalhaes (andrunko) Date: Thu May 26 23:24:43 2011 -0300 AccountManager: Improve docs. TelepathyQt4/account-manager.cpp | 59 +++++++++++++++++++++++++------------- 1 file changed, 39 insertions(+), 20 deletions(-) commit 01f6bba20ee6229bcee9c2a4f58164e23dac77c7 Author: Andre Moreira Magalhaes (andrunko) Date: Thu May 26 23:24:33 2011 -0300 Account: Improve docs. TelepathyQt4/account.cpp | 710 +++++++++++++++++++++++++++------------------- 1 file changed, 411 insertions(+), 299 deletions(-) commit 1bfb5227236f55edcc9d79e5b4de1abd2cad6f4f Author: Andre Moreira Magalhaes (andrunko) Date: Thu May 26 23:24:12 2011 -0300 doxygen.css: Properly align titles. doxygen.css | 7 +++++++ 1 file changed, 7 insertions(+) commit 7a532ffbd86ae12d4c37926916dbbd550f48fd00 Author: Olli Salli Date: Wed Jun 1 19:11:18 2011 +0300 Update NEWS NEWS | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) commit 4206201e22220f54e5863901a3234fa4c149af81 Merge: 5ec82e3 b62edd0 Author: Olli Salli Date: Mon May 30 13:15:47 2011 +0300 Merge remote-tracking branch 'gkiagia/blocking' Reviewed-by: Olli Salli (oggis) commit b62edd004f511d84fb15b5082e56262156d17da9 Author: George Kiagiadakis Date: Thu May 26 12:58:33 2011 +0300 Bump tp-glib dependency to 0.15.1. Required to build the contactlist2 cm with ContactBlocking support. CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 5ec82e3726e6c8d0537f564dedfeeb59a0646482 Merge: b348f69 63b66df Author: Olli Salli Date: Wed May 25 18:28:36 2011 +0300 Merge branch 'doxygen-trivia-0.7' Reviewed-by: Andre Magalhaes (andrunko) commit 63b66df2597093e15868b4da42d71a90ba792c37 Author: Olli Salli Date: Wed May 25 18:10:55 2011 +0300 Make doxygen skip OptionalInterfaceCache completely TelepathyQt4/optional-interface-factory.cpp | 4 ++++ TelepathyQt4/optional-interface-factory.h | 2 ++ 2 files changed, 6 insertions(+) commit 5f5f8e3c78f7dc9d32e7a3131614b3484b42c4ee Author: Olli Salli Date: Wed May 25 18:00:49 2011 +0300 Fix pkg name reference in generated tagfile and name it like Qt does This makes it also uploaded with the rest of the docs, just like Qt has it. doxygen.cfg.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 25cf160fb837ca96fccf8035bafa069056928de0 Author: Olli Salli Date: Wed May 25 17:55:59 2011 +0300 Make Qt crosslinks in uploaded docs point to doc.qt.nokia.com cmake/modules/Doxygen.cmake | 10 ++++++++-- doxygen.cfg.in | 2 +- tools/CMakeLists.txt | 15 ++++++++++++++- 3 files changed, 23 insertions(+), 4 deletions(-) commit 05630f91b0cbdd9392b6a0f081b0512b8b716a53 Author: Olli Salli Date: Wed May 25 16:56:50 2011 +0300 Crosslink our doxygen docs to Qt documentation cmake/modules/Doxygen.cmake | 7 +++++++ doxygen.cfg.in | 5 ++++- 2 files changed, 11 insertions(+), 1 deletion(-) commit b348f69481e72f3239a38027ee7b59506ab1b5f1 Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 16 20:58:51 2011 -0300 Update NEWS NEWS | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 12da0f97507d22a9c56518690075606ce33f3bfa Merge: 5df04b0 731cae9 Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 16 20:57:56 2011 -0300 Merge branch 'message-accessors' Reviewed-by: Olli Salli (oggis) commit 731cae95bbc4e2187be69b07fd3cd791c504d1c7 Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 16 14:56:47 2011 -0300 Message: Rename supersedes to supersededToken. TelepathyQt4/message.cpp | 2 +- TelepathyQt4/message.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 78f95ef4c34995125d4af4d6dd1b06bafea9a47d Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 16 14:55:59 2011 -0300 Message: Rename DeliveryDetails errorMessage/hasErrorMessage to debugMessage/hasDebugMessage for consistency. TelepathyQt4/message.cpp | 4 ++-- TelepathyQt4/message.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit 870afaaae63e5c9b403ce49350e750a8b1589bb5 Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 16 14:50:25 2011 -0300 Message: Remove DeliveryDetails::hasDBusError as now have a fallback code for "delivery-dbus-error". TelepathyQt4/message.cpp | 8 -------- TelepathyQt4/message.h | 1 - 2 files changed, 9 deletions(-) commit 622ac791af4dced19e19b31d0be42b970b1d0b22 Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 16 14:49:12 2011 -0300 Message: Rename DeliveryDetails token/hasToken to originalToken/hasOriginalToken. TelepathyQt4/message.cpp | 4 ++-- TelepathyQt4/message.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit 2c6c32b759b0ddb5518c17190ec7d441d376e035 Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 16 14:45:26 2011 -0300 Message: Remove DeliveryStatus::hasStatus() as "delivery-status" is mandatory. TelepathyQt4/message.cpp | 8 -------- TelepathyQt4/message.h | 1 - 2 files changed, 9 deletions(-) commit 9cac9434efff8b200663de4c56a601151a02f747 Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 16 14:42:37 2011 -0300 Message: Fallback to sender->alias() if on senderNickname() if "sender-nickname" is not present or empty. TelepathyQt4/message.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 85803b43273892a26121333f3019cd04b8d523cf Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 16 14:34:52 2011 -0300 Message: Rename DeliveryDetails echo/hasEcho to echoedMessage/hasEchoedMessage. TelepathyQt4/message.cpp | 4 ++-- TelepathyQt4/message.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit e100b21206fbb9c65e4bdc1a1d2d79ce377e428b Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 16 14:02:15 2011 -0300 Message: Change hasError to isError. TelepathyQt4/message.cpp | 5 +++-- TelepathyQt4/message.h | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) commit e8aa53d9991fca400b131319c7e75f6770f27486 Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 16 13:50:41 2011 -0300 Message: Add fallback code for DeliveryDetails::dbusError() if not present. TelepathyQt4/message.cpp | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) commit 63f6fb2faf5be578ed79f86c6e9071c9b038ea5e Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 16 13:46:01 2011 -0300 Message: Return ChannelTextSendError instead of QString for DeliveryDetails::error(). TelepathyQt4/message.cpp | 6 +++--- TelepathyQt4/message.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) commit 1fe876f22762bc90e2e73d47caf201fa9879f845 Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 16 13:40:43 2011 -0300 Message: Use static_cast instead of C-style casts. TelepathyQt4/message.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 919af5157fde23521720d892759245b791685697 Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 16 12:58:30 2011 -0300 Message: Add accessors for sender-nickname and supersedes. TelepathyQt4/message.cpp | 25 +++++++++++++++++++++++++ TelepathyQt4/message.h | 3 +++ 2 files changed, 28 insertions(+) commit 4aa27e1c17b0bc50693c690dddb895a315bd0c42 Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 16 12:37:55 2011 -0300 Message: Add accessors for delivery report. TelepathyQt4/message.cpp | 171 ++++++++++++++++++++++++++++++++++++++++++++++ TelepathyQt4/message.h | 43 ++++++++++++ 2 files changed, 214 insertions(+) commit b76307413e887eb914d69f44a409a9bb6d6f9e30 Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 16 12:36:06 2011 -0300 Message: Move utility fns to an anon namespace. TelepathyQt4/message.cpp | 114 +++++++++++++++++++++++----------------------- 1 file changed, 56 insertions(+), 58 deletions(-) commit 120e37d3cd132677087701a27e3cea902b8362d1 Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 16 12:33:01 2011 -0300 Message: Sanitize includes. TelepathyQt4/message.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 5df04b02a9addce5d9fd3ce313c0504f78be76e3 Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 16 13:18:05 2011 -0300 Update NEWS NEWS | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 8a266cad2c72393254b3f8162b3ae76a4bcc1659 Merge: 7559b33 4b7e0ad Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 16 13:17:04 2011 -0300 Merge branch 'rah-mc-restart' Reviewed-by: Olli Salli (oggis) commit bb9e166d053b678f21d81451c2ae63554d8f5adc Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 16 13:05:54 2011 -0300 Update NEWS NEWS | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 559209b9c501b4477fb9a70ac58de6df9f6485a8 Merge: 75d0210 4b7e0ad Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 16 13:04:07 2011 -0300 Merge branch 'rah-mc-restart' into telepathy-qt4-0.6 commit 4b7e0ad4d39cea25ad343c9e51012e3f0d12b8f6 Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 16 10:57:36 2011 -0300 FakeHandlerManager: Do not use C-style casts. TelepathyQt4/fake-handler-manager-internal.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) commit 5ce89c4cb7ff740ba28f5d3cefcca87ffd238736 Author: George Kiagiadakis Date: Sun May 15 20:35:13 2011 +0300 ContactManager::Roster: Fix sanity check to check the correct list of contacts TelepathyQt4/contact-manager-roster.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 8d507cf0e593f1c51baca31140fd9294dce53f76 Author: George Kiagiadakis Date: Sun May 15 19:25:35 2011 +0300 conn-roster (& -legacy) tests: Verify that when a contact is removed from the roster but it is still blocked, it stays in allKnownContacts() tests/dbus/conn-roster-legacy.cpp | 28 +++++++++++++++++++++++----- tests/dbus/conn-roster.cpp | 28 +++++++++++++++++++++++----- 2 files changed, 46 insertions(+), 10 deletions(-) commit cd88fa985b25e371cf524292f1ce3a75d5cacb8d Author: George Kiagiadakis Date: Sun May 15 19:20:35 2011 +0300 ContactManager::Roster: Substract ContactBlocking contacts from the ones that are to be removed from allKnownContacts This is because if a contact has been removed from the Conn.I.ContactList roster but it is still in the Conn.I.ContactBlocking roster, it should not be removed from cachedAllKnownContacts. TelepathyQt4/contact-manager-roster.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 1291661b6a48372a42d66a37be8ce23f1d1ef7db Author: George Kiagiadakis Date: Sun May 15 19:14:00 2011 +0300 ContactManager::Roster: Use computeAllKnownContactsChanged() in onContactListNewContactsConstructed() This allows us to have complete control of changes in cachedAllKnownContacts, especially removals, from just one function: computeAllKnownContactsChanged(). This is useful for controlling cases where the contact must stay in cachedAllKnownContacts because it is also in some other list (ex. the deny list). TelepathyQt4/contact-manager-roster.cpp | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) commit 599076ed09bf92fdacb1ecbc08b3c95b6385594f Author: George Kiagiadakis Date: Thu Apr 28 15:10:37 2011 +0300 conn-roster test: Sync contact blocking tests with the conn-roster-legacy test The new tests are more correct, since they do not expect, for example, allKnownContactsChanged() to be emitted only once after doing changes in the roster or they do not expect contacts to be blocked when the blockContacts() / unblockContacts() pending operations finish (they might get blocked later). tests/dbus/conn-roster.cpp | 113 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 95 insertions(+), 18 deletions(-) commit 1c011727658491cef76b4102eb46e4b13073bf26 Author: George Kiagiadakis Date: Thu Apr 28 15:08:33 2011 +0300 conn-roster-legacy test: Add tests for contact blocking These tests are from now on going to test the legacy deny lists code, since conn-roster is now using Conn.I.ContactBlocking. tests/dbus/conn-roster-legacy.cpp | 208 ++++++++++++++++++++++++++++++++++++- 1 file changed, 207 insertions(+), 1 deletion(-) commit 0de81a55e0a6819f4320797de7ca29b74110752c Author: George Kiagiadakis Date: Thu Apr 28 15:07:33 2011 +0300 contactlist (legacy) cm: Implement a deny channel to use it with the conn-roster-legacy test tests/lib/glib/contactlist/contact-list-manager.c | 141 +++++++++++++++++++-- tests/lib/glib/contactlist/contact-list-manager.h | 1 + tests/lib/glib/contactlist/contact-list.c | 4 + 3 files changed, 138 insertions(+), 8 deletions(-) commit 39d02ed90ec1f0abcb240b4947f035965050f576 Author: George Kiagiadakis Date: Thu Apr 28 00:23:48 2011 +0300 conn-roster test: Extend the test to verify that unblocked contacts that are not in other lists do not remain in allKnownContacts() tests/dbus/conn-roster.cpp | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) commit 9272c8fd09caf4c16a76df7648a75acfcae059b1 Author: George Kiagiadakis Date: Thu Apr 28 00:09:52 2011 +0300 ContactManager::Roster: Remove unblocked contacts from allKnownContacts() unless they are in some other list This was a mistake in the previous commits; contacts that are not in any of the stored/subscribe/publish/deny lists should not appear in allKnownContacts(), so after unblocking we have to compute changes to allKnownContacts() by marking the unblocked contacts as removed. TelepathyQt4/contact-manager-roster.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) commit d0f0fab5812c1605261c9d5021ae670dae6fe157 Author: George Kiagiadakis Date: Wed Apr 27 22:13:00 2011 +0300 ContactManager::Roster: Introduce a new contactListContacts set to keep track of the Conn.I.ContactList contacts TelepathyQt4/contact-manager-internal.h | 2 ++ TelepathyQt4/contact-manager-roster.cpp | 4 ++++ 2 files changed, 6 insertions(+) commit 12b2fd646dcde0770d92bba4c4dcf5d68ed37491 Author: George Kiagiadakis Date: Thu Apr 21 13:23:34 2011 +0300 conn-roster test: Adjust the tests to verify that allKnownContacts() contains blocked contacts. tests/dbus/conn-roster.cpp | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) commit 15b34199c052ca0083a058911e5f6374bd1f3472 Author: George Kiagiadakis Date: Thu Apr 21 13:16:52 2011 +0300 ContactManager::Roster: Ensure that allKnownContacts() contains blocked contacts This patch ensures that all the initially blocked contacts are inserted in cachedAllKnownContacts and that all contacts that are later blocked or unblocked are also inserted in cachedAllKnownContacts, if they were not already there. TelepathyQt4/contact-manager-roster.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) commit 6ecf10c33085578afd53892f03759f644fe335e1 Author: George Kiagiadakis Date: Tue Apr 19 12:04:26 2011 +0300 ContactManager::Roster: Introspect the contact list after ContactBlocking has finished introspection This ensures that FeatureRoster will not become ready before ContactBlocking has finished introspection. TelepathyQt4/contact-manager-internal.h | 7 +++++-- TelepathyQt4/contact-manager-roster.cpp | 18 ++++++++++++------ 2 files changed, 17 insertions(+), 8 deletions(-) commit 58af7913e059b6c4ab2a097545465968939f47d8 Author: George Kiagiadakis Date: Mon Apr 18 14:25:17 2011 +0300 conn-roster test: Improve the contact blocking tests tests/dbus/conn-roster.cpp | 98 ++++++++++++++++++-------------------------- 1 file changed, 41 insertions(+), 57 deletions(-) commit e75433c86666e4b130a6fd6a4e2c3838cdf4b5b6 Author: George Kiagiadakis Date: Mon Apr 18 12:40:09 2011 +0300 ContactManager::Roster: Add debug messages for debugging contact blocking TelepathyQt4/contact-manager-roster.cpp | 2 ++ 1 file changed, 2 insertions(+) commit 79f55b62d7a0d21e6eedbc864b688225e4ffb37c Author: George Kiagiadakis Date: Sun Apr 17 13:15:51 2011 +0300 contactlist2 cm: Implement the ContactBlocking interface tests/lib/glib/contactlist2/conn.c | 3 +++ 1 file changed, 3 insertions(+) commit 06584fc4d5d8f7639f47417ab7be2f6fce1ee853 Author: George Kiagiadakis Date: Sun Apr 17 12:41:26 2011 +0300 ContactManager::Roster: Handle the initial blocked contacts using a fake change event TelepathyQt4/contact-manager-roster.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) commit f016227dd04f7b401b428cdbf8f5b7e83039a753 Author: George Kiagiadakis Date: Thu Apr 14 13:48:03 2011 +0300 Contact/ContactManager: Improve the public interface for blocking/unblocking contacts. TelepathyQt4/contact-manager-roster.cpp | 10 +++++ TelepathyQt4/contact-manager.cpp | 67 ++++++++++++++++++++++--------- TelepathyQt4/contact-manager.h | 9 +++-- TelepathyQt4/contact.cpp | 50 +++++++++++++++++++---- TelepathyQt4/contact.h | 6 ++- examples/roster/roster-widget.cpp | 6 ++- tests/dbus/conn-roster.cpp | 8 ++-- 7 files changed, 119 insertions(+), 37 deletions(-) commit 0409800dab913978f208bb44d4dafaaff89371e3 Author: George Kiagiadakis Date: Thu Apr 14 12:53:45 2011 +0300 ContactManager::Roster: Request only the ContactBlockingCapabilities property from the ContactBlocking interface TelepathyQt4/contact-manager-internal.h | 2 +- TelepathyQt4/contact-manager-roster.cpp | 22 ++++++++++------------ 2 files changed, 11 insertions(+), 13 deletions(-) commit 202a2c9a0760d6d9a985e73bd6e51fd46eb0ff08 Author: George Kiagiadakis Date: Thu Apr 14 12:42:10 2011 +0300 ContactManager::Roster: Finish the implementation of Conn.I.ContactBlocking introspection TelepathyQt4/contact-manager-internal.h | 20 +++++- TelepathyQt4/contact-manager-roster.cpp | 111 ++++++++++++++++++++++++++----- 2 files changed, 112 insertions(+), 19 deletions(-) commit 5385fe2cda102a78a4495f4855ea8863a70f90e2 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Apr 13 20:16:11 2011 +0300 Contact: Improve the documentation regarding the contact blocking methods TelepathyQt4/contact.cpp | 28 +++++++++++++++++----------- TelepathyQt4/contact.h | 2 +- 2 files changed, 18 insertions(+), 12 deletions(-) commit a9bebcb6044bb22139989ec03f372b134b85a3bf Author: Andre Moreira Magalhaes (andrunko) Date: Wed Apr 13 20:15:15 2011 +0300 ContactManager: Improve the documentation regarding the contact blocking methods TelepathyQt4/contact-manager.cpp | 26 +++++++++++--------------- TelepathyQt4/contact-manager.h | 6 +++--- 2 files changed, 14 insertions(+), 18 deletions(-) commit 4c216fd034a5ae099a26b3426c9441791692560b Author: Andre Moreira Magalhaes (andrunko) Date: Wed Apr 13 20:10:58 2011 +0300 ContactManager::Roster: Improve the Conn.I.ContactBlocking handling code TelepathyQt4/contact-manager-internal.h | 16 ++- TelepathyQt4/contact-manager-roster.cpp | 186 ++++++++++++++++--------------- 2 files changed, 106 insertions(+), 96 deletions(-) commit 6a52b10fc68a878f238891cd1183834e545ddf4d Author: Alvaro Soliverez Date: Fri Mar 25 04:08:15 2011 -0300 conn-roster test: Add tests for Connection.ContactBlocking. tests/dbus/conn-roster.cpp | 99 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) commit 0b9f0c6a2d94e89b61be94e0a13d2edd7235cfbb Author: Alvaro Soliverez Date: Tue Mar 15 20:10:52 2011 -0700 ContactManager: Implement contact blocking and report abuse using Connection.ContactBlocking. TelepathyQt4/contact-manager-internal.h | 14 ++- TelepathyQt4/contact-manager-roster.cpp | 184 +++++++++++++++++++++++++++---- TelepathyQt4/contact-manager.cpp | 34 +++++- TelepathyQt4/contact-manager.h | 3 + TelepathyQt4/contact.cpp | 17 ++- TelepathyQt4/contact.h | 1 + 6 files changed, 229 insertions(+), 24 deletions(-) commit d09634bb81452dab0f7e395ad10a67f71a6bef82 Author: Andre Moreira Magalhaes (andrunko) Date: Thu May 12 16:39:34 2011 -0300 FakeHandlerManager: Keep only one FakeHandler per bus. TelepathyQt4/client-registrar-internal.h | 20 +---- TelepathyQt4/client-registrar.cpp | 26 +----- TelepathyQt4/fake-handler-manager-internal.cpp | 105 ++++++++++++++++++------ TelepathyQt4/fake-handler-manager-internal.h | 26 ++++-- TelepathyQt4/pending-channel.cpp | 10 +-- tests/dbus/account-channel-dispatcher.cpp | 5 +- tests/dbus/client-factories.cpp | 8 ++ tests/dbus/client.cpp | 8 ++ 8 files changed, 129 insertions(+), 79 deletions(-) commit 02e3d46630dc3677a619642af13ba5399fea5e94 Author: Andre Moreira Magalhaes (andrunko) Date: Wed May 11 11:32:51 2011 -0300 account-channel-dispatcher test: Improve test for HandledChannels. tests/dbus/account-channel-dispatcher.cpp | 148 +++++++++++++++++++++++++---- 1 file changed, 130 insertions(+), 18 deletions(-) commit aca21b13930d065f70ebfe866e5de949cc96095d Author: Andre Moreira Magalhaes (andrunko) Date: Wed May 11 11:32:26 2011 -0300 FakeHandlerManager: Use QObject::destroyed instead of our own invalidated signal. TelepathyQt4/fake-handler-manager-internal.cpp | 9 +++++---- TelepathyQt4/fake-handler-manager-internal.h | 5 +---- 2 files changed, 6 insertions(+), 8 deletions(-) commit 31687b84575217409d32db129b0bc0000d0c4797 Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 10 15:55:15 2011 -0300 account-channel-dispatcher test: Improve test for HandledChannels. tests/dbus/account-channel-dispatcher.cpp | 101 +++++++++++++++++------------ 1 file changed, 60 insertions(+), 41 deletions(-) commit 0ccdbeab668d36d024d511aa798d4a5442a6bc88 Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 10 15:38:34 2011 -0300 FakeHandlerManager: Register FakeHandler per registrar, not per dbus connection. TelepathyQt4/fake-handler-manager-internal.cpp | 73 +++++++++++++----------- TelepathyQt4/fake-handler-manager-internal.h | 27 ++++++--- TelepathyQt4/pending-channel.cpp | 5 +- 3 files changed, 62 insertions(+), 43 deletions(-) commit 4287c588366cb8f7cc927cb3682284ed9614ab1c Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 10 14:58:25 2011 -0300 FakeHandlerManager: Rename header/source file to include -internal in the name and fixed coding style. TelepathyQt4/CMakeLists.txt | 5 +- TelepathyQt4/fake-handler-manager-internal.cpp | 95 ++++++++++++++++++++++++ TelepathyQt4/fake-handler-manager-internal.h | 70 +++++++++++++++++ TelepathyQt4/fake-handler-manager.cpp | 68 ----------------- TelepathyQt4/fake-handler-manager.h | 80 -------------------- TelepathyQt4/pending-channel.cpp | 2 +- 6 files changed, 169 insertions(+), 151 deletions(-) commit d54f88b5fa28633b97d009ec72524f881c522515 Author: Paolo Capriotti Date: Mon May 9 12:30:51 2011 +0100 Add test to check that a channel created with RaH is contained in the HandledChannels property of some handler. tests/dbus/account-channel-dispatcher.cpp | 72 +++++++++++++++++++++++++---- 1 file changed, 64 insertions(+), 8 deletions(-) commit c2eb116c2ac27a5443392fae6fdd6705997dc45a Author: Paolo Capriotti Date: Fri May 6 12:04:25 2011 +0100 ClientHandlerAdaptor: store handled channels as bare pointers. TelepathyQt4/client-registrar-internal.h | 7 ++++--- TelepathyQt4/client-registrar.cpp | 15 +++++++++++++-- 2 files changed, 17 insertions(+), 5 deletions(-) commit c81083b63108ac9d34f445603b6e317e59df5452 Author: Paolo Capriotti Date: Mon May 9 09:38:49 2011 +0100 Delete FakeHandler instances when all their channels are invalidated. TelepathyQt4/fake-handler-manager.cpp | 12 ++++++++---- TelepathyQt4/fake-handler-manager.h | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) commit 4cd861f2b1f3b5327d7f50f8a27d5aff4af9e5e4 Author: Paolo Capriotti Date: Fri May 6 11:50:12 2011 +0100 RequestTemporaryHandler: use a weak reference to channel. RTH may be kept alive through the whole lifetime of its channel if it happens to be stored in FakeHandlerManager, so its reference to the channel should be weak to allow the channel to be destroyed. TelepathyQt4/handled-channel-notifier.cpp | 11 +++++++---- TelepathyQt4/pending-channel.cpp | 2 +- .../request-temporary-handler-internal.cpp | 18 ++++++++++-------- TelepathyQt4/request-temporary-handler-internal.h | 6 ++++-- 4 files changed, 22 insertions(+), 15 deletions(-) commit 4fbf37aaee4c47bfd41c3d3d3720afab6b603dd7 Author: Paolo Capriotti Date: Fri May 6 10:35:11 2011 +0100 FakeHandlerManager: fix leak when a channel is destroyed before being invalidated. TelepathyQt4/fake-handler-manager.cpp | 9 +++++++++ TelepathyQt4/fake-handler-manager.h | 1 + 2 files changed, 10 insertions(+) commit 9acf07063eb24de341eab579ed10038f4ebf7ae6 Author: Paolo Capriotti Date: Fri May 6 10:28:25 2011 +0100 FakeHandlerManager: use (name, baseService) to indentify a dbus connection. TelepathyQt4/fake-handler-manager.cpp | 6 +++--- TelepathyQt4/fake-handler-manager.h | 4 ++-- TelepathyQt4/pending-channel.cpp | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) commit 006d2eedee81a93e8b48fb5f54906147b0c867c5 Author: Paolo Capriotti Date: Fri May 6 10:01:38 2011 +0100 Keep RequestTemporaryHandler alive through the lifetime of an R&H channel. TelepathyQt4/CMakeLists.txt | 2 + TelepathyQt4/fake-handler-manager.cpp | 55 +++++++++++++++++++++++ TelepathyQt4/fake-handler-manager.h | 79 +++++++++++++++++++++++++++++++++ TelepathyQt4/pending-channel.cpp | 12 +++++ 4 files changed, 148 insertions(+) commit 30b5a728bdf4524f045581487ac2b371bd59de8c Author: Paolo Capriotti Date: Fri May 6 09:32:00 2011 +0100 Ignore Server and Limit parameters for ContactSearch if not supported. TelepathyQt4/account.cpp | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) commit 173713aec484ad4e89c22a95e998de3d145bebe5 Author: Paolo Capriotti Date: Mon May 9 09:12:43 2011 +0100 account.cpp: move anonymous namespace inside Tp. TelepathyQt4/account.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 7559b3388229b3f12a0c8cf9a7c3c51beeeb1722 Author: Olli Salli Date: Fri May 6 19:40:45 2011 +0300 Make master lead to 0.7.0 CMakeLists.txt | 2 +- NEWS | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) commit 75d0210fa19df34c1b5c996a443a422717e5004d Author: Olli Salli Date: Fri May 6 19:37:49 2011 +0300 Set up 0.6 stable branch CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6d5f4fa647cd4ee96cb1f80678b7262c0560515d Author: Andre Moreira Magalhaes (andrunko) Date: Fri May 6 11:25:55 2011 -0300 Update NEWS NEWS | 1 + 1 file changed, 1 insertion(+) commit 95743a641a03d68ebdf66f5a814aa810f74dc9a9 Merge: 8e4082a 602fa47 Author: Andre Moreira Magalhaes (andrunko) Date: Fri May 6 11:24:37 2011 -0300 Merge branch 'balance' Reviewed-by: Olli Salli (oggis) commit 8e4082ae09b175b8647577d55a07bb94eadd411c Author: Olli Salli Date: Fri May 6 17:22:40 2011 +0300 Update NEWS NEWS | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) commit 03f93689fdd7211bdb0e9e593d39650df280fd1e Author: Olli Salli Date: Fri May 6 14:43:41 2011 +0300 Pass new values for D-Bus properties boxed in variants, not raw The python test service used in the DBusProperties test is lenient enough to allow passing unboxed values, but services in general aren't. Reviewed-by: Andre Magalhaes (andrunko) TelepathyQt4/abstract-interface.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 602fa4752c6d33e4039b6bf5f7163da7ac50ad46 Author: Andre Moreira Magalhaes (andrunko) Date: Fri May 6 11:09:42 2011 -0300 Connection: Initialize accountBalance private member. TelepathyQt4/connection.cpp | 3 +++ 1 file changed, 3 insertions(+) commit 823c106bcca27a0b4dfdd91eddc37b5a41531619 Author: Andre Moreira Magalhaes (andrunko) Date: Sun May 1 18:56:43 2011 -0300 Start 0.5.17 development CMakeLists.txt | 2 +- NEWS | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) commit edf471b92dda095dd0464a508a02f0d8dda06b5b Author: Andre Moreira Magalhaes (andrunko) Date: Sun May 1 18:42:29 2011 -0300 Prepare release 0.5.16 CMakeLists.txt | 4 ++-- NEWS | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) commit 2005bf8379e1fb3e757553470486dbac5dcce22d Author: Andre Moreira Magalhaes (andrunko) Date: Sun May 1 18:40:14 2011 -0300 Update NEWS NEWS | 5 +++++ 1 file changed, 5 insertions(+) commit d554e9dedafd33796183c1bb6e198cded73f6b5a Merge: cba8c2a c38fb3d Author: Andre Moreira Magalhaes (andrunko) Date: Sun May 1 18:34:42 2011 -0300 Merge branch 'observers' Reviewed-by: Olli Salli (oggis) commit c38fb3d06ec54b1f36b8774b1ce9154bb51e6c00 Author: Andre Moreira Magalhaes (andrunko) Date: Sun May 1 18:29:23 2011 -0300 simple-observer test: Add some code comments. tests/dbus/simple-observer.cpp | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) commit 2703d094510919d301bd7cda22171ece70e1b755 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 29 18:44:56 2011 -0300 SimpleTextObserver: Add a debug on construction. TelepathyQt4/simple-text-observer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b7d8aaf6831205a8bf5bad2f529cb8742ad3b1c0 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 29 18:44:46 2011 -0300 SimpleCallObserver: Add a debug on construction. TelepathyQt4/simple-call-observer.cpp | 1 + 1 file changed, 1 insertion(+) commit 03da83ed0cd5fbc0c2b183eec5a634be60268967 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 29 18:28:56 2011 -0300 SimpleObserver: Print the name of the observer being used. TelepathyQt4/simple-observer-internal.h | 7 ++++++- TelepathyQt4/simple-observer.cpp | 17 +++++++++-------- 2 files changed, 15 insertions(+), 9 deletions(-) commit 5f929186c4784d9b3f4f6db63964a4fe7b676b67 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 29 00:56:58 2011 -0300 simple-observer test: Add test for simple observers. tests/dbus/CMakeLists.txt | 1 + tests/dbus/simple-observer.cpp | 711 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 712 insertions(+) commit ebde78312759338d10b5a86c1b662ab8d753e662 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 29 18:29:40 2011 -0300 test lib: Use different loop exit codes for expectSuccessfulProperty return, to properly check waitForProperty actually worked. tests/lib/test.cpp | 4 ++-- tests/lib/test.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) commit 966c5a338ebb53075de04912c6ff34cc5a702be7 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 28 22:15:30 2011 -0300 contact-messenger test: Enable test for observers memory leak. tests/dbus/contact-messenger.cpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) commit eb431cebd2ea66091a56538add5ff882bdf09f18 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 28 22:14:28 2011 -0300 SimpleObserver: Fix memory leak. TelepathyQt4/simple-observer-internal.h | 9 +++++---- TelepathyQt4/simple-observer.cpp | 24 +++++++++++------------- 2 files changed, 16 insertions(+), 17 deletions(-) commit 6e98ea05e26bdafa1f8b4c4dd47728438e148731 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 28 20:53:48 2011 -0300 SimpleObserver: Export it :P. TelepathyQt4/simple-observer.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5b7edb1676e70c88b73e47bac2ed507872199406 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 28 20:19:28 2011 -0300 SimpleObserver: Avoid emitting redundant signals. TelepathyQt4/simple-observer.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) commit 07f7a9adf329218615dbfe00957e1f5bfd3f1186 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Apr 27 18:46:21 2011 -0300 Properly install channel-class-features.h. TelepathyQt4/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) commit 8016440337c4f5eb99c515811d959e230ef96978 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 26 15:39:26 2011 -0300 SimpleObserver: Only filter channels once contact id is normalized and make sure channels() only return the channels we are interested. Also populate the internal list of channels with current internal observer channels on construction. TelepathyQt4/simple-observer-internal.h | 20 +++++-- TelepathyQt4/simple-observer.cpp | 100 +++++++++++++++++++++---------- 2 files changed, 83 insertions(+), 37 deletions(-) commit dd883d015f83415b622d2b36fa65db33f3121ebb Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 26 13:25:35 2011 -0300 Properly install ChannelCLassFeatures instead of ChannelFeatureSpec. TelepathyQt4/CMakeLists.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 0e50f6c992fb8a8ebff9fc0448cce5c63b41e89e Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 26 13:20:49 2011 -0300 SimpleObserver: Enable fast lookup on registered accounts by using QHash/QSet instead of QList. TelepathyQt4/simple-observer-internal.h | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) commit 9be17fb028cd3db22eddf22b27da941e2b48b6fb Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 26 13:16:16 2011 -0300 SimpleObserver: Properly handle extra channel features in shared observers. TelepathyQt4/simple-observer-internal.h | 13 +++++++++---- TelepathyQt4/simple-observer.cpp | 9 ++++----- 2 files changed, 13 insertions(+), 9 deletions(-) commit af74d00b2c904ce33c74ad063bce3aee3e91dc95 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 26 13:14:49 2011 -0300 features test: Test qHash(features). tests/CMakeLists.txt | 1 + tests/features.cpp | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) commit d90fad4d01964f96501bb27dfebc8ba730970418 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 26 12:55:14 2011 -0300 Features: Add qHash. TelepathyQt4/feature.h | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 71fde88a8e2ff694ea7a3849e74c9c880ae4374b Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 26 12:16:25 2011 -0300 SimpleObserver: Cache using QSet instead of ChannelClassSpecList. TelepathyQt4/simple-observer-internal.h | 3 ++- TelepathyQt4/simple-observer.cpp | 9 +++++---- 2 files changed, 7 insertions(+), 5 deletions(-) commit bd1cb03a15c3ec25e5699b3d23f32d9d9a03cd30 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 26 12:15:31 2011 -0300 ChannelClassSpec: Add qHash(QSet). TelepathyQt4/channel-class-spec.h | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) commit 34c0a44bcefb3398c966747134e9083cd5b9714d Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 26 11:04:34 2011 -0300 channel-class-spec test: Stress test qHash(ChannelClassSpecList). tests/channel-class-spec.cpp | 54 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) commit b87452fde4e572c2ff5f540cf42b1949baecd08a Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 26 11:04:17 2011 -0300 ChannelClassSpecList: Fix qHash. TelepathyQt4/channel-class-spec.h | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) commit e400bd4b564ec21d5a89320fbc88eaedc564a8f3 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 25 23:14:32 2011 -0300 SimpleObserver: Enable recover. TelepathyQt4/simple-observer.cpp | 2 +- tests/dbus/contact-messenger.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit beada1ed1e1634e3535a7b368524981acf1d0f8a Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 25 22:49:54 2011 -0300 SimpleObserver: Fixed typo in ChannelInvalidationInfo. TelepathyQt4/simple-observer-internal.h | 10 +++++----- TelepathyQt4/simple-observer.cpp | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) commit 3f041dc9729782f609ae75a5a93bfda5b8262525 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 25 22:36:06 2011 -0300 ContactMessenger: Add textChats accessor. TelepathyQt4/contact-messenger.cpp | 11 +++++++++++ TelepathyQt4/contact-messenger.h | 2 ++ 2 files changed, 13 insertions(+) commit 768ca41435e2b129dae3f9d1646473fe051d4132 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 25 21:21:27 2011 -0300 SimpleObserver: Cache internal observers. TelepathyQt4/simple-observer-internal.h | 115 ++++++++++++++--------- TelepathyQt4/simple-observer.cpp | 156 ++++++++++++++++++------------- TelepathyQt4/simple-observer.h | 7 +- 3 files changed, 167 insertions(+), 111 deletions(-) commit ae7b42dd7638ada83e81f4bc95c325fdc48061c7 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 25 22:27:48 2011 -0300 channel-class-spec test: Test hash methods. tests/CMakeLists.txt | 3 +- tests/channel-class-spec.cpp | 71 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+), 1 deletion(-) commit 639a2e098c1fa371a27de918d1a40727994d41f6 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 25 22:26:49 2011 -0300 ChannelClassSpec/List: Add qHash allowing usage with QHash/QSet/QPair. TelepathyQt4/channel-class-spec.h | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) commit fd0d074b235451e526fbe0e30de359cd1726cc04 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 25 22:25:57 2011 -0300 FixedFeatureFactory: Add Q_OBJECT macro to allow usage of qobject_cast. TelepathyQt4/CMakeLists.txt | 1 + TelepathyQt4/fixed-feature-factory.cpp | 2 ++ TelepathyQt4/fixed-feature-factory.h | 3 +++ 3 files changed, 6 insertions(+) commit 996226b7ae8355a78cde7b5be2e5da27bbbc4901 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 25 22:25:32 2011 -0300 ChannelFactory: Add Q_OBJECT macro to allow usage of qobject_cast. TelepathyQt4/CMakeLists.txt | 1 + TelepathyQt4/channel-factory.cpp | 2 ++ TelepathyQt4/channel-factory.h | 1 + 3 files changed, 4 insertions(+) commit 98f102fa0753c0cfcea1d99664e718553ad0dcc0 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 25 22:24:55 2011 -0300 AccountFactory: Add Q_OBJECT macro to allow usage of qobject_cast. TelepathyQt4/CMakeLists.txt | 1 + TelepathyQt4/account-factory.cpp | 2 ++ TelepathyQt4/account-factory.h | 3 +++ 3 files changed, 6 insertions(+) commit 29e7453e3dc6651038e24dfda6d9f411f8c3514f Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 25 19:57:38 2011 -0300 SimpleCallObserver: Remove support for filtering by call type. TelepathyQt4/simple-call-observer.cpp | 60 +++++++++++---------------------- TelepathyQt4/simple-call-observer.h | 23 +++---------- 2 files changed, 24 insertions(+), 59 deletions(-) commit 9e5d6581116b68e0fa76bd3e583bafd74be8135e Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 25 19:51:40 2011 -0300 SimpleTextObserver: Fix crash opportunity. TelepathyQt4/simple-text-observer.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 760cb444004f98cde1089a514c182faa80494213 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 25 19:50:47 2011 -0300 SimpleCallObserver: Warn and ignore channel if channel received is not a SM channel. TelepathyQt4/simple-call-observer.cpp | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) commit ebf7e0d1e5566f0df7947b61581d12cac2f99fea Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 25 19:40:30 2011 -0300 SimpleCallObserver: Add error name/message to streamedMediaCallEnded signal. TelepathyQt4/simple-call-observer.cpp | 8 +++++--- TelepathyQt4/simple-call-observer.h | 3 ++- 2 files changed, 7 insertions(+), 4 deletions(-) commit b20c5f1eb333ee31d14ee5ef0e0a34f6a2bd8a1d Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 25 19:37:57 2011 -0300 SimpleObserver: Remove timestamp from signals. TelepathyQt4/simple-call-observer.cpp | 25 ++++++--------- TelepathyQt4/simple-call-observer.h | 13 +++----- TelepathyQt4/simple-observer-internal.h | 24 +++++--------- TelepathyQt4/simple-observer.cpp | 52 +++++++++++-------------------- TelepathyQt4/simple-observer.h | 12 +++---- TelepathyQt4/simple-text-observer.cpp | 4 +-- 6 files changed, 46 insertions(+), 84 deletions(-) commit 12091697a087d8648e5d21af7a66ab5f265a7dd8 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 25 19:30:29 2011 -0300 Rename ChannelFeatureSpec to ChannelClassFeatures. TelepathyQt4/ChannelClassFeatures | 13 +++++++++ TelepathyQt4/ChannelFeatureSpec | 13 --------- TelepathyQt4/channel-class-features.h | 45 +++++++++++++++++++++++++++++++ TelepathyQt4/channel-factory.cpp | 8 +++--- TelepathyQt4/channel-feature-spec.h | 45 ------------------------------- TelepathyQt4/simple-call-observer.cpp | 2 +- TelepathyQt4/simple-observer-internal.h | 8 +++--- TelepathyQt4/simple-observer.cpp | 18 ++++++------- TelepathyQt4/simple-observer.h | 20 +++++++------- TelepathyQt4/simple-text-observer.cpp | 2 +- 10 files changed, 87 insertions(+), 87 deletions(-) commit eae30e415b31ec7c0842205e882c72cbf6d8d884 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 21 07:32:22 2011 -0300 SimpleTextObserver: Add textChats accessor. TelepathyQt4/simple-text-observer.cpp | 17 +++++++++++++++++ TelepathyQt4/simple-text-observer.h | 2 ++ 2 files changed, 19 insertions(+) commit 3495655ab0ac984cf9f4c42a1d764793a9518fb4 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 21 07:32:06 2011 -0300 SimpleCallObserver: Add streamedMediaCalls accessor. TelepathyQt4/simple-call-observer.cpp | 31 +++++++++++++++++++++++++------ TelepathyQt4/simple-call-observer.h | 2 ++ 2 files changed, 27 insertions(+), 6 deletions(-) commit 50754b4037b1c6eda20090ed07ddb1fc4d6e4dc3 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 21 07:04:42 2011 -0300 ChannelFactory: Use ChannelFeatureSpec. TelepathyQt4/channel-factory.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 735473fe9813fe527f8639f9e651f039027907e6 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 21 06:24:56 2011 -0300 SimpleTextObserver: Use SimpleObserver. TelepathyQt4/simple-observer.h | 1 + TelepathyQt4/simple-text-observer-internal.h | 132 +--------- TelepathyQt4/simple-text-observer.cpp | 350 +++++--------------------- TelepathyQt4/simple-text-observer.h | 13 +- 4 files changed, 66 insertions(+), 430 deletions(-) commit 21767e47af1e92dbb8b1fc46f747292c729b7228 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 21 05:58:33 2011 -0300 Add SimpleCallObserver helper class for observing calls. TelepathyQt4/CMakeLists.txt | 4 + TelepathyQt4/SimpleCallObserver | 13 ++ TelepathyQt4/simple-call-observer.cpp | 277 +++++++++++++++++++++++++++++++++ TelepathyQt4/simple-call-observer.h | 110 +++++++++++++ TelepathyQt4/simple-observer.h | 2 + TelepathyQt4/types.h | 2 + 6 files changed, 408 insertions(+) commit 701e9ad5fd7389d49350eb508a7428ec820d2649 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 21 05:30:04 2011 -0300 SimpleObserver: Add support for filtering channels by contact. TelepathyQt4/simple-observer-internal.h | 50 +++++- TelepathyQt4/simple-observer.cpp | 289 +++++++++++++++++++++++++++---- TelepathyQt4/simple-observer.h | 34 ++++ 3 files changed, 338 insertions(+), 35 deletions(-) commit d7d7df6026ea81d99cde43440c68116fd60f4685 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 21 04:44:02 2011 -0300 Add SimpleObserver helper class for observing channels. TelepathyQt4/CMakeLists.txt | 6 + TelepathyQt4/SimpleObserver | 13 ++ TelepathyQt4/simple-observer-internal.h | 171 ++++++++++++++ TelepathyQt4/simple-observer.cpp | 375 +++++++++++++++++++++++++++++++ TelepathyQt4/simple-observer.h | 71 ++++++ TelepathyQt4/types.h | 2 + 6 files changed, 638 insertions(+) commit 51a87d2914d3a5a194d522be347e7d681b68e922 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 21 04:34:28 2011 -0300 Add ChannelFeatureSpec type to be used by SimpleObserver. TelepathyQt4/CMakeLists.txt | 8 ++++--- TelepathyQt4/ChannelFeatureSpec | 13 ++++++++++ TelepathyQt4/channel-feature-spec.h | 45 +++++++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+), 3 deletions(-) commit cba8c2ad8059c4627c62904848c748e04b24cb6f Author: Olli Salli Date: Mon Apr 25 16:56:45 2011 +0300 Update NEWS NEWS | 2 ++ 1 file changed, 2 insertions(+) commit f3328b3f63c139d8f54871dd39f4c69662b85f4d Merge: 62ace22 18f6cc2 Author: Olli Salli Date: Mon Apr 25 16:54:18 2011 +0300 Merge branch 'useless-feature-check' Reviewed-by: Martin Klapetek (mck182) Reviewed-by: Andre Magalhaes (andrunko) commit 18f6cc2e4c1dc203270043fd0de77619808aa9db Author: Olli Salli Date: Mon Apr 25 15:47:22 2011 +0300 Remove QDBusServiceWatcher feature check Redundant as we depend on Qt 4.6 nowadays. CMakeLists.txt | 15 --------------- TelepathyQt4/dbus-proxy.cpp | 8 -------- config.h.in | 2 -- 3 files changed, 25 deletions(-) commit 53876bd4000c5e1375d9abbcb84ed1d3f4d592a9 Author: Olli Salli Date: Mon Apr 25 15:44:24 2011 +0300 Remove QDBusVariant operator== feature check Redundant as we depend on Qt 4.6 nowadays. CMakeLists.txt | 9 --------- TelepathyQt4/types.cpp | 13 ------------- config.h.in | 1 - 3 files changed, 23 deletions(-) commit 62ace223e9b4a268edcb4d1783a8766eef3526f4 Author: Olli Salli Date: Mon Apr 25 14:59:42 2011 +0300 Update NEWS NEWS | 6 ++++++ 1 file changed, 6 insertions(+) commit a85d6b341d7752ec5c70f19a29309a987341aca1 Merge: 0bc545c 2051a17 Author: Olli Salli Date: Mon Apr 25 14:54:10 2011 +0300 Merge branch 'racy-groups' Reviewed-by: Andre Magalhaes (andrunko) commit 2051a1760d4086a80528e22837fec474cbcee09b Author: Olli Salli Date: Mon Apr 25 13:52:46 2011 +0300 RosterGroups tests: Test preparing FeatureRosterGroups after StateSuccess is reached tests/dbus/conn-roster-groups-legacy.cpp | 79 ++++++++++++++++++++++++++++++ tests/dbus/conn-roster-groups.cpp | 79 ++++++++++++++++++++++++++++++ 2 files changed, 158 insertions(+) commit 7b1c48da69e1e7d6be270dddb549b9e6efb907af Author: Olli Salli Date: Mon Apr 25 00:13:40 2011 +0300 ContactList roster: Make roster groups actually work The roster code failed to query the contact attributes telling their groups correctly, because ContactManager::supportedFeatures() didn't know about the corresponding Contact feature. The unit test for roster groups was interesting. It had the following paradigm: - create group B - copy all contacts which were in group A to group B - verify that group A and B have the same contacts This, however, passes even if the code fails to discover ANY contacts in group A (because an empty group is equal to another empty group). TelepathyQt4/contact-manager.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 705f955bda265bb2a87ac6dbc6982cc4be0279ec Author: Olli Salli Date: Sun Apr 24 23:59:30 2011 +0300 ContactList roster: only enter StateSuccess when groups are done, if requested TelepathyQt4/contact-manager-roster.cpp | 37 +++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 7 deletions(-) commit 7967002f1fb2e5199c3e9f01d728b87968fd6cc1 Author: Olli Salli Date: Sun Apr 24 23:48:37 2011 +0300 ContactList roster: Fix SIGSEGV crash when Groups property fetch fails This allows the updated test to proceed further. Which uncovers the fact, that ContactGroups didn't actually ever discover initial contact groups correctly with CMs implementing the new ContactList API in any of the last 13 tp-qt4 releases, ever since we supposedly gained support for the interface. TelepathyQt4/contact-manager-roster.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) commit e5977a41b17cab32db17b5cbc49297bf91206054 Author: Olli Salli Date: Sun Apr 24 23:44:39 2011 +0300 ContactList roster: Test StateSuccess ordering Uncovers the fact that similarly to legacy roster, Groups aren't waited for... but also uncovers a SIGSEGV crash! tests/dbus/conn-roster-groups.cpp | 101 +++++++++++++++++++++++++++++++++++++ tests/dbus/conn-roster.cpp | 3 ++ 2 files changed, 104 insertions(+) commit 50760e2d586ed9606e1ca44891f32a2c9e97c9c5 Author: Olli Salli Date: Sun Apr 24 22:12:39 2011 +0300 Legacy roster: Enter StateSuccess only once both roster and groups are introspected, if requested TelepathyQt4/contact-manager-internal.h | 3 +++ TelepathyQt4/contact-manager-roster.cpp | 38 ++++++++++++++++++++++++++----- 2 files changed, 35 insertions(+), 6 deletions(-) commit 6479c604abb5ad8db69dea7bac2d1d4f7880789f Author: Olli Salli Date: Sun Apr 24 22:11:02 2011 +0300 Legacy roster: Test that StateSuccess is entered at a sane time Shows that it doesn't actually wait for roster groups introspection to finish (!) tests/dbus/conn-roster-groups-legacy.cpp | 98 ++++++++++++++++++++++++++++++ tests/dbus/conn-roster-legacy.cpp | 3 + 2 files changed, 101 insertions(+) commit 945b531eedb5608409c2f9fd7205070ccbecfaec Author: Olli Salli Date: Sun Apr 24 22:07:46 2011 +0300 TestConnRosterGroups(Legacy): Make cleanup() more foolproof In particular, allows tests which don't fully wait for a connection to get connected and finish Connected introspection. tests/dbus/conn-roster-groups-legacy.cpp | 27 ++++++++++----------------- tests/dbus/conn-roster-groups.cpp | 27 ++++++++++----------------- 2 files changed, 20 insertions(+), 34 deletions(-) commit 0bc545c849ab02d229ddc21cf2b3cb2033b99dfa Author: Andre Moreira Magalhaes (andrunko) Date: Sun Apr 24 15:50:01 2011 -0300 Update NEWS NEWS | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit fbfee9933bef792209dd430d5d573b7618ae01d4 Merge: 0063c79 62ebe3d Author: Andre Moreira Magalhaes (andrunko) Date: Sun Apr 24 15:45:24 2011 -0300 Merge branch 'features' Reviewed-by: Olli Salli (oggis) commit 0063c79b4b192acae0b4427e801fa442aed375d9 Merge: d93f0b5 a17358c Author: Andre Moreira Magalhaes (andrunko) Date: Sun Apr 24 15:45:03 2011 -0300 Merge branch 'presence-status-max' Reviewed-by: Olli Salli (oggis) commit a17358c2629c8a0c2bad6f41c1c2236dc037925a Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 22 17:24:45 2011 -0300 Bump tp-glib dep to >= 0.14.5 CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 2981083aaf9652286a84ee9d49d38434d8b98942 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 22 17:14:28 2011 -0300 ConnectionLowlevel: Improved debugs for allowedPresenceStatuses and maxPresenceStatusMessageLength. TelepathyQt4/connection.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 29b42880db7dc5895094b3e74b10678fac5676d6 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 22 17:14:07 2011 -0300 ConnectionLowlevel: Update docs for maxPresenceStatusMessageLength. TelepathyQt4/connection.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) commit b91aec609e3ca7a6c3071f198c748b7d0bb04eb0 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 22 17:12:07 2011 -0300 Account: Update docs for maxPresenceStatusMessageLength. TelepathyQt4/account.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) commit 3351eb068befaeefabf95e7137ce418216da89c3 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 22 17:04:43 2011 -0300 ConnectionLowlevel/Account: Rename maximumPresenceStatusMessageLength to maxPresenceStatusMessageLength. TelepathyQt4/account.cpp | 4 ++-- TelepathyQt4/account.h | 2 +- TelepathyQt4/connection-lowlevel.h | 2 +- TelepathyQt4/connection.cpp | 4 ++-- tests/dbus/conn-basics.cpp | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) commit e664783dcfc0f4005e187774a127f8e0624f9178 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 14 03:20:06 2011 -0300 conn-basics test: Add test for Conn.SimplePresence.MaximumStatusMessageLength. tests/dbus/conn-basics.cpp | 2 ++ 1 file changed, 2 insertions(+) commit 26a17f28a50f587a01b3d1c12a77df6c54827b8a Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 14 03:14:48 2011 -0300 contacts-conn example cm: Update from tp-glib tests/lib/glib/CMakeLists.txt | 2 + tests/lib/glib/contact-list-manager.c | 745 +++++++++++++++++++++++++++++++++ tests/lib/glib/contact-list-manager.h | 69 +++ tests/lib/glib/contacts-conn.c | 85 +++- tests/lib/glib/contacts-conn.h | 6 +- 5 files changed, 903 insertions(+), 4 deletions(-) commit 45ea0862a54c8a40de48c0b3062d0695ad272d74 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 14 02:13:39 2011 -0300 Account: Add method to return the maximum allowed length for presence status messages. TelepathyQt4/account.cpp | 28 ++++++++++++++++++++++++++++ TelepathyQt4/account.h | 1 + 2 files changed, 29 insertions(+) commit 39020cc5027da9ef45cad7b856f3a8c270651975 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 14 02:13:09 2011 -0300 Connection: Add support for Conn.SimplePresence.MaximumStatusMessageLength. TelepathyQt4/connection-lowlevel.h | 2 ++ TelepathyQt4/connection.cpp | 54 ++++++++++++++++++++++++++++++++---- 2 files changed, 50 insertions(+), 6 deletions(-) commit d93f0b5215b7e5d791f56674d054d68a544673d3 Author: Olli Salli Date: Sun Apr 24 15:30:05 2011 +0300 Update NEWS NEWS | 2 ++ 1 file changed, 2 insertions(+) commit 1fbe74d2d0ff17d808e785079a1cf4fda0c82709 Merge: 50507dd e68e707 Author: Olli Salli Date: Sun Apr 24 15:21:58 2011 +0300 Merge remote-tracking branch 'andrunko/contact-sanitize' Reviewed-by: Olli Salli (oggis) commit 50507ddc4cf373609fffd4f3d79b54fbd232b4ef Author: Olli Salli Date: Sun Apr 24 15:21:28 2011 +0300 Update NEWS NEWS | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) commit 890800ba1565941d339d2505e91bf670054777e0 Merge: eb93b18 db83e71 Author: Olli Salli Date: Sun Apr 24 15:11:56 2011 +0300 Merge branch 'conn-botchup' Reviewed-by: Andre Magalhaes (andrunko) commit db83e71583cf5686c242d0e508d7bf210091bd4f Author: Olli Salli Date: Sun Apr 24 15:07:43 2011 +0300 Fix Qt 4.7 race in ConnIntrospectCornerCases tests/dbus/conn-introspect-cornercases.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 77b1549dce67dcd0db7e50a675a3d61fe59744d2 Author: Olli Salli Date: Sun Apr 24 12:51:02 2011 +0300 Connection: Fix crash on consecutive self handle changes TelepathyQt4/connection.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) commit 4d4bb14cda8d8dc067cd05921b8ebf885324336d Author: Olli Salli Date: Sun Apr 24 12:12:14 2011 +0300 Test consecutive self handle changes tests/dbus/conn-introspect-cornercases.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) commit eb93b18e70c086983fe1ef1bef0f566edc2bd39e Author: Andre Moreira Magalhaes (andrunko) Date: Sat Apr 23 16:43:28 2011 -0300 Update NEWS NEWS | 6 ++++++ 1 file changed, 6 insertions(+) commit bdede71c94f423eb33b3c00a8625da1e35260c4c Merge: ae3e939 73ebcc2 Author: Andre Moreira Magalhaes (andrunko) Date: Sat Apr 23 16:41:50 2011 -0300 Merge branch 'trivia' Reviewed-by: Olli Salli (oggis) commit ae3e9399c23c3fd2d437d98de7c9e24423dea511 Merge: cf6997e c7808ef Author: Andre Moreira Magalhaes (andrunko) Date: Sat Apr 23 16:41:25 2011 -0300 Merge branch 'spec-0.22.0' Reviewed-by: Olli Salli (oggis) commit 73ebcc2ce785e717dd0084e0c262a6c73412c1ba Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 21 18:33:21 2011 -0300 Add correct connection interface pretty headers and warn when building if the wrong ones are used. Pretty headers for Conn.ClientTypes/ContactGroups/ContactList/Saving were missing the Interface suffix. TelepathyQt4/CMakeLists.txt | 4 ++++ TelepathyQt4/ConnectionInterfaceClientTypes | 8 ++++++-- .../ConnectionInterfaceClientTypesInterface | 13 +++++++++++++ TelepathyQt4/ConnectionInterfaceContactGroups | 8 ++++++-- .../ConnectionInterfaceContactGroupsInterface | 13 +++++++++++++ TelepathyQt4/ConnectionInterfaceContactList | 8 ++++++-- .../ConnectionInterfaceContactListInterface | 13 +++++++++++++ TelepathyQt4/ConnectionInterfacePowerSaving | 8 ++++++-- .../ConnectionInterfacePowerSavingInterface | 13 +++++++++++++ 9 files changed, 80 insertions(+), 8 deletions(-) commit 0da20c738b9834a226569128aba26b5e592564a6 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 14 02:14:07 2011 -0300 Connection: Coding style fixes. TelepathyQt4/connection.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 546f4ad2a3f655f4e4b872179427f3351e4c60f5 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Apr 13 23:21:55 2011 -0300 MethodInvocationContext: Document class. TelepathyQt4/method-invocation-context.dox | 41 ++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) commit c3f6705a17919127ac507e808504a7d2e2df73bb Merge: e37145c c7808ef Author: Andre Moreira Magalhaes (andrunko) Date: Sat Apr 23 16:28:01 2011 -0300 Merge branch 'spec-0.22.0' Reviewed-by: Olli Salli (oggis) commit d8bb41e5104ccec3c2f72040fd44f07438e48db4 Author: Olli Salli Date: Sat Apr 23 21:34:57 2011 +0300 Further test connection self handle changes Now the only branch not covered in the self handle codepaths is the one for the self contact build failing, which looks simple enough, and would be quite hard to get covered. tests/dbus/conn-introspect-cornercases.cpp | 116 +++++++++++++++++++++++++++- 1 file changed, 114 insertions(+), 2 deletions(-) commit 7617ebaa87a4a20d8bb91215db00c893d7f2a3e1 Author: Olli Salli Date: Sat Apr 23 19:46:34 2011 +0300 Fix the crash for self handle changing when the status is Connecting Otherwise clears up the logic with reintrospecting the self contact as well. More testing to follow. TelepathyQt4/connection.cpp | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) commit e83487c5001beee81c067ded1adb258f37f8ce01 Author: Olli Salli Date: Sat Apr 23 19:46:12 2011 +0300 Test self handle change in Connecting state Triggers a crash (!) tests/dbus/conn-introspect-cornercases.cpp | 80 +++++++++++++++++++++++++++- 1 file changed, 79 insertions(+), 1 deletion(-) commit 62ebe3d8412bcba28d4760ae8849fe5d32ce4908 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 22 16:20:24 2011 -0300 roster example: Use FeatA | FeatB | FeatC. examples/roster/roster-window.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) commit d9c4f63040b85b40b010465a90938de92bb977c9 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 22 16:20:07 2011 -0300 Features: Add operator|(Features, Feature). TelepathyQt4/feature.h | 5 +++++ 1 file changed, 5 insertions(+) commit e68e7072d3a778c31e579327b11f899cad0f34d1 Author: Andre Moreira Magalhaes (andrunko) Date: Sat Apr 23 11:59:18 2011 -0300 roster example: Only load contacts when ContactManager state is Success. examples/roster/roster-widget.cpp | 34 ++++++++++++++++++++++------------ examples/roster/roster-widget.h | 1 + 2 files changed, 23 insertions(+), 12 deletions(-) commit cf6997ed0c450a7615a3993a2e3b5f3151d7eef5 Author: Olli Salli Date: Sat Apr 23 17:42:13 2011 +0300 Update NEWS NEWS | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit e05ef70026aed2849cb932f13939d4f9112bb10d Merge: e37145c 4925793 Author: Olli Salli Date: Sat Apr 23 17:39:17 2011 +0300 Merge branch 'channel-props' Reviewed-by: Andre Magalhaes (andrunko) commit 4925793931ddf74ea6153777bf13ef74ad9644ea Author: Olli Salli Date: Sat Apr 23 17:12:44 2011 +0300 Add Channel::targetContact() TelepathyQt4/channel.cpp | 41 +++++++++++++++++++++++++++++++++++++++++ TelepathyQt4/channel.h | 1 + tests/dbus/chan-basics.cpp | 4 ++++ tests/dbus/chan-group.cpp | 4 ++++ 4 files changed, 50 insertions(+) commit f3cf445ae4996111babc1784b5fdfd05ad3126e0 Author: Olli Salli Date: Sat Apr 23 16:32:29 2011 +0300 Channel: Avoid injecting empty id for initiator handle if the real ID is not in the initial props TelepathyQt4/channel.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 77878806fe1870b66447637cf8eb687859720e3b Author: Olli Salli Date: Sat Apr 23 16:24:40 2011 +0300 Channel: Add TargetID and InitiatorID to guaranteed immutable props TelepathyQt4/channel.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 1663a259b71fb05c9c040bcaad0ac67a7fcb801f Author: Olli Salli Date: Sat Apr 23 16:14:10 2011 +0300 Channel: Inject TargetID as TargetHandle's ID if available Test suite goes from 1.95s to 1.90s avg. TelepathyQt4/channel.cpp | 4 ++++ 1 file changed, 4 insertions(+) commit 81f78c9d77238abe23ce3d5096c05c97f60907c3 Author: Olli Salli Date: Sat Apr 23 16:03:18 2011 +0300 Channel: Add targetId() accessor TelepathyQt4/channel.cpp | 37 ++++++++++++++++++++++++++++++++++--- TelepathyQt4/channel.h | 1 + tests/dbus/chan-basics.cpp | 1 + 3 files changed, 36 insertions(+), 3 deletions(-) commit d4a57867b32097b18c16fe656fb9aa4390e07d96 Author: Olli Salli Date: Sat Apr 23 15:23:51 2011 +0300 Make the Channel main property extract fn more appropriately named I originally planned to have one extraction function for each set of properties introduced in new spec releases, queuing appropriate fallbacks if the properties introduced in that version weren't found. Somebody didn't follow that plan, which would be useless to try and attempt now, so remove the confusing references to it. TelepathyQt4/channel.cpp | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) commit c7808effdd7a4b12a77c8dc9e8e44f4f659d84b4 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 25 03:53:29 2011 -0300 Connection: Add accessors for ConnectionError details server-message, user-requested, expected-hostname and certificate-hostname. TelepathyQt4/connection.h | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) commit 95d48f1ef94730e9d0a718de5e6399cc239f454d Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 25 03:52:48 2011 -0300 Auto generate code for Connection.ContactBlocking. TelepathyQt4/CMakeLists.txt | 1 + .../ConnectionInterfaceContactBlockingInterface | 13 +++++++++++++ TelepathyQt4/connection.xml | 1 + 3 files changed, 15 insertions(+) commit 8a5ec49510f83738ff887f7d8685a41b83c0f895 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 25 03:39:17 2011 -0300 Update to spec 0.22.0 spec/Account.xml | 58 ++---- spec/Account_Interface_Avatar.xml | 4 - ...Account_Interface_External_Password_Storage.xml | 58 ++++++ spec/Account_Interface_Hidden.xml | 65 ++++++ spec/Account_Manager_Interface_Hidden.xml | 100 ++++++++++ spec/Call_Content.xml | 36 ---- spec/Call_Content_Interface_Media.xml | 36 ++++ spec/Call_Content_Interface_Video_Control.xml | 137 +++++++++++++ spec/Call_Stream_Endpoint.xml | 10 +- spec/Call_Stream_Interface_Media.xml | 36 +++- spec/Channel_Interface_Credentials_Storage.xml | 59 ++++++ spec/Channel_Interface_SASL_Authentication.xml | 19 ++ spec/Channel_Request.xml | 13 +- spec/Channel_Type_Call.xml | 14 +- spec/Channel_Type_File_Transfer.xml | 49 +++++ spec/Channel_Type_Server_TLS_Connection.xml | 60 +++++- spec/Client_Approver.xml | 4 + spec/Client_Observer.xml | 68 +++++++ spec/Connection.xml | 6 + spec/Connection_Interface_Cellular.xml | 40 +++- spec/Connection_Interface_Contact_Blocking.xml | 207 ++++++++++++++++++++ spec/Connection_Manager.xml | 17 +- ...onnection_Manager_Interface_Account_Storage.xml | 120 ++++++++++++ spec/all.xml | 25 ++- spec/errors.xml | 37 ++++ 25 files changed, 1150 insertions(+), 128 deletions(-) commit 1e8401f0926e9c4f0ed7107a4546bf8c4dc6e192 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 22 16:12:12 2011 -0300 roster example: Updated example to use Account and factories. Also properly connect to contact signals. examples/roster/main.cpp | 32 ++++++++--- examples/roster/roster-item.cpp | 26 ++++----- examples/roster/roster-widget.cpp | 86 ++++++++++++------------------ examples/roster/roster-widget.h | 11 ++-- examples/roster/roster-window.cpp | 106 ++++++++++++------------------------- examples/roster/roster-window.h | 23 +++----- 6 files changed, 118 insertions(+), 166 deletions(-) commit 050eab6898dc7a769e1f41eaa316c54517779570 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 22 14:40:01 2011 -0300 ContactManager: Do not replace known Contact data with invalid data when upgrading contacts. TelepathyQt4/contact-manager.cpp | 14 ++++++++------ TelepathyQt4/pending-contacts.cpp | 16 ++++++++++------ TelepathyQt4/pending-contacts.h | 1 + 3 files changed, 19 insertions(+), 12 deletions(-) commit d5b427216bfc2cb00d8a356f293cb0ec9a6c3a79 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 22 14:53:48 2011 -0300 contacts test: Add test for multiple ContactManager::upgradeContacts calls. tests/dbus/contacts.cpp | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) commit e37145cce893e4e4338d331be093da6d65aa6179 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 18 11:12:13 2011 -0300 Update NEWS NEWS | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 54dfdf832e964146e4bccb6d44850dacaf4002c0 Merge: 68cb618 f02733f Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 18 11:07:54 2011 -0300 Merge branch 'self-contact' Reviewed-by: Olli Salli (oggis) commit 68cb618ad60945de6253af09dd77650fced584f1 Merge: 46f2722 bb136b5 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 15 15:57:03 2011 -0300 Merge branch 'contactlist-timeout' Reviewed-by: Olli Salli (oggis) commit bb136b52830f082b13e53d240c9908a32fca0012 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 15 15:53:54 2011 -0300 Connection: Improve the timeout param docs for ensure/createChannel. TelepathyQt4/connection.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) commit 4124be90a75d75b8bf2d1f26d1f2c6c9f57cecc6 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Apr 13 23:06:41 2011 -0300 ContactManager::Roster: Pass timeout INT_MAX (no timeout) when ensuring contact list channels. TelepathyQt4/contact-manager-roster.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit beee55c26d977e4869bb7add146d43aa578aa3d2 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Apr 13 23:05:32 2011 -0300 Connection: Add support for passing timeout on ensure/createChannel. This will be used by ContactManager when ensuring contact list channels, as some CMs may timeout when loading the contact list. TelepathyQt4/connection-lowlevel.h | 2 ++ TelepathyQt4/connection.cpp | 60 +++++++++++++++++++----------------- TelepathyQt4/pending-channel.cpp | 6 ++-- TelepathyQt4/pending-channel.h | 2 +- 4 files changed, 38 insertions(+), 32 deletions(-) commit f02733f6fc434723238016b433b2318adb39c1a1 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Apr 13 13:14:32 2011 -0300 Connection: Avoid crash when constructing self contact. TelepathyQt4/connection.cpp | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) commit 46f2722f5ba1be7300320364d5d0da6c93626e9b Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 12 01:04:34 2011 -0300 Start 0.5.16 development CMakeLists.txt | 2 +- NEWS | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) commit 1b9f7f0397d821ed1d0f127d567978ba86870d12 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 12 00:50:22 2011 -0300 Prepare release 0.5.15 CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit a8dce5f3debea0adb3c2565504c31560d1601d2f Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 12 00:49:38 2011 -0300 Update NEWS NEWS | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 10bebd65a06c57f6ab5aa5cd9f784537beeed95c Merge: c976f07 6fad1bf Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 12 00:48:06 2011 -0300 Merge branch 'docs' Reviewed-by: Olli Salli (oggis) commit 6fad1bf772aece777a94edf45c62ca9c721b9e89 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 12 00:43:18 2011 -0300 Add/standardize/improve docs. TelepathyQt4/account-factory.cpp | 11 ++-- TelepathyQt4/channel-factory.cpp | 9 ++-- TelepathyQt4/channel-factory.h | 4 ++ TelepathyQt4/channel-request.cpp | 11 +++- TelepathyQt4/connection-factory.cpp | 11 ++-- TelepathyQt4/connection-manager.cpp | 9 ++++ TelepathyQt4/connection.cpp | 9 ++++ TelepathyQt4/contact-factory.cpp | 4 +- TelepathyQt4/dbus-proxy-factory.cpp | 6 +-- TelepathyQt4/feature.cpp | 17 ++++++ .../file-transfer-channel-creation-properties.cpp | 9 ++++ TelepathyQt4/fixed-feature-factory.cpp | 10 ++-- TelepathyQt4/handled-channel-notifier.cpp | 12 +++++ TelepathyQt4/key-file.cpp | 1 + TelepathyQt4/manager-file.cpp | 1 + TelepathyQt4/method-invocation-context.h | 6 +++ TelepathyQt4/optional-interface-factory.cpp | 57 ++++++++++---------- TelepathyQt4/optional-interface-factory.h | 4 ++ TelepathyQt4/pending-account.cpp | 4 +- TelepathyQt4/pending-channel-request.cpp | 8 +-- TelepathyQt4/pending-channel.cpp | 10 ++-- TelepathyQt4/pending-connection.cpp | 8 +-- TelepathyQt4/pending-contact-attributes.cpp | 6 +-- TelepathyQt4/pending-contact-info.cpp | 6 +-- TelepathyQt4/pending-contacts.cpp | 9 ++++ TelepathyQt4/pending-handles.cpp | 9 ++-- TelepathyQt4/pending-operation.cpp | 41 ++++++++------ TelepathyQt4/pending-ready.cpp | 9 ++-- TelepathyQt4/pending-send-message.cpp | 11 ++++ TelepathyQt4/pending-stream-tube-connection.cpp | 12 +++-- TelepathyQt4/pending-string-list.cpp | 4 ++ TelepathyQt4/pending-variant-map.cpp | 4 ++ TelepathyQt4/pending-variant.cpp | 4 ++ TelepathyQt4/presence.cpp | 25 +++++++++ TelepathyQt4/profile.cpp | 6 ++- TelepathyQt4/protocol-info.cpp | 4 +- TelepathyQt4/protocol-parameter.cpp | 9 ++++ TelepathyQt4/shared-ptr.dox | 11 ++++ TelepathyQt4/test-backdoors.h | 4 ++ TelepathyQt4/types.h | 4 ++ 40 files changed, 294 insertions(+), 105 deletions(-) commit 9a55c79b0567c6ab6f014bd55c1d2c1b7a94bd0b Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 12 00:42:31 2011 -0300 Features/PresenceSpecList: Add pretty header. TelepathyQt4/CMakeLists.txt | 2 ++ TelepathyQt4/Features | 13 +++++++++++++ TelepathyQt4/PresenceSpecList | 13 +++++++++++++ 3 files changed, 28 insertions(+) commit 9df5a71484e281e0e293e13a42caba2443051469 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 11 14:24:34 2011 -0300 SharedPtr: Update docs. TelepathyQt4/shared-ptr.dox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c7058155881a901501d8e7dfd002990709595004 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 11 14:23:09 2011 -0300 Standardize \class docs. TelepathyQt4/abstract-client.cpp | 26 +++++++++-------------- TelepathyQt4/account-manager.cpp | 3 +-- TelepathyQt4/account-set.cpp | 4 ++-- TelepathyQt4/account.cpp | 2 +- TelepathyQt4/avatar.cpp | 6 +++--- TelepathyQt4/capabilities-base.cpp | 4 ++-- TelepathyQt4/channel-class-spec.cpp | 6 ++---- TelepathyQt4/channel-dispatch-operation.cpp | 4 ++-- TelepathyQt4/channel-request.cpp | 3 +-- TelepathyQt4/channel.cpp | 2 +- TelepathyQt4/connection-capabilities.cpp | 4 ++-- TelepathyQt4/connection-manager.cpp | 3 +-- TelepathyQt4/connection.cpp | 3 +-- TelepathyQt4/contact-capabilities.cpp | 4 ++-- TelepathyQt4/contact-search-channel.cpp | 10 ++++----- TelepathyQt4/contact.cpp | 6 +++--- TelepathyQt4/file-transfer-channel.cpp | 4 ++-- TelepathyQt4/incoming-file-transfer-channel.cpp | 4 ++-- TelepathyQt4/incoming-stream-tube-channel.cpp | 12 ++++++----- TelepathyQt4/location-info.cpp | 4 ++-- TelepathyQt4/message-content-part.cpp | 5 ++--- TelepathyQt4/outgoing-file-transfer-channel.cpp | 4 ++-- TelepathyQt4/outgoing-stream-tube-channel.cpp | 12 ++++++----- TelepathyQt4/requestable-channel-class-spec.cpp | 8 +++---- TelepathyQt4/streamed-media-channel.cpp | 8 +++---- TelepathyQt4/text-channel.cpp | 3 +-- 26 files changed, 72 insertions(+), 82 deletions(-) commit 7b53805e003ee2cd567a9b73704674ff52c627b2 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 7 14:26:52 2011 -0300 Filter: Remove old TODO TelepathyQt4/filter.h | 7 ------- 1 file changed, 7 deletions(-) commit 3868cc9faf390a0194c40e57b855d182a3b658a2 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 7 14:26:33 2011 -0300 LocationInfo: Fix headerfile doc TelepathyQt4/location-info.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a493c53e11625031e2ef3c75687f9db585033370 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 7 14:26:19 2011 -0300 SharedPtr: Document class TelepathyQt4/shared-ptr.dox | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) commit bc6c59eaa58907b841373e7e39314a4ac7055a60 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 7 14:25:59 2011 -0300 ReadinessHelper: Document classes TelepathyQt4/readiness-helper.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) commit c1073a51cf9cd6bab8c96b1a45b91f147b3e6305 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 7 14:25:19 2011 -0300 MessageContentPart: Document classes TelepathyQt4/message-content-part.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) commit 25858b9c351181462b3871ce73776db537ba11c2 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 7 14:25:04 2011 -0300 Contact: Document classes TelepathyQt4/contact.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) commit c923ac382f6e62d9da94effce4b597d6090c6654 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 7 14:24:51 2011 -0300 ContactSearchChannel: Document missing classes TelepathyQt4/contact-search-channel.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) commit dd291072f32b326f10b21e47d4fc63c73a9a89a8 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 7 14:24:29 2011 -0300 RequestableChannelClassSpec/List: Document classes TelepathyQt4/requestable-channel-class-spec.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) commit e7f8edb7613cdefe638998d1d4fb4433c1944bc9 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 7 14:24:22 2011 -0300 ChannelClassSpec/List: Document classes TelepathyQt4/channel-class-spec.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) commit df31d447fd175eb0d6b5d0768e19e534530419ec Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 7 14:24:03 2011 -0300 AvatarData/Spec: Document classes TelepathyQt4/avatar.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) commit b09fa2a993d0b523b36da750f9de0d1969818893 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 7 14:23:37 2011 -0300 AbstractInterface: Document class TelepathyQt4/abstract-interface.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) commit bcab56dcebe4dae355483d0e3d7aebeb20a65a07 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 7 14:23:26 2011 -0300 AbstractClient: Document missing classes TelepathyQt4/abstract-client.cpp | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) commit b9c8fcec15ff651ba545de83b55e88879c3ef314 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 7 14:22:46 2011 -0300 AccountPropertyFilter: Document class TelepathyQt4/account-property-filter.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) commit 8995d09409d703f3708049b11d320c1df26c0af1 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 7 14:22:37 2011 -0300 AccountCapabilityFilter: Document class TelepathyQt4/account-capability-filter.dox | 30 ++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) commit 63c82f6a23abf601938c652c5e06028c7b8ebc46 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 7 14:22:19 2011 -0300 GenericPropertyFilter: Document class TelepathyQt4/generic-property-filter.dox | 33 ++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) commit 323914e031983f6fe9c871963ad13f89428c688d Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 7 14:22:11 2011 -0300 GenericCapabilityFilter: Document class TelepathyQt4/generic-capability-filter.dox | 36 ++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) commit dba292ab6be95e58b731396158b95cc50c9fbd79 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 7 14:21:59 2011 -0300 NotFilter: Document class TelepathyQt4/not-filter.dox | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) commit 36d005375ee7df591554ce850f69a3bf800f2a0c Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 7 14:21:54 2011 -0300 OrFilter: Document class TelepathyQt4/or-filter.dox | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) commit 87846dbfbdf5f302cca4e2de227eb990dbbe1dab Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 7 14:21:50 2011 -0300 AndFilter: Document class TelepathyQt4/and-filter.dox | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) commit ca65730471a4f8d1463a3da35c7b41c731614c7e Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 7 14:21:09 2011 -0300 Filter: Document class TelepathyQt4/filter.dox | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) commit 0a64943112099984947efe43040f4c7f267ea280 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 7 14:27:07 2011 -0300 Add new doc groups TelepathyQt4/groups.dox | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit 946d12ed8080d50892d7f2d2bb0b3ac8f042205e Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 31 23:48:17 2011 -0300 Update documentation main page. TelepathyQt4/examples.dox | 13 ------------- TelepathyQt4/main.dox | 46 ++++++++++++++++++++++----------------------- 2 files changed, 23 insertions(+), 36 deletions(-) commit c976f07431c7355e27f00967f35afb6a000ad454 Author: Olli Salli Date: Mon Apr 11 18:45:40 2011 +0300 Update NEWS NEWS | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) commit 9ca05d42eca6930aae92b3e2aec7fa437d0771aa Merge: d845985 ebc2a9a Author: Olli Salli Date: Mon Apr 11 18:37:55 2011 +0300 Merge branch 'conn-introspection-further' Reviewed-by: Andre Magalhaes (andrunko) commit ebc2a9aaf118729e94f1aa1ae3de61d2e5c47cbb Author: Olli Salli Date: Mon Apr 11 18:27:39 2011 +0300 Add an additional safeguard to ReadinessHelper TelepathyQt4/readiness-helper.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) commit 8529ed934bd9b9f9e26c359636c1f5d298ff41a4 Author: Olli Salli Date: Mon Apr 11 16:01:45 2011 +0300 Abort connection main introspection when it becomes invalidated TelepathyQt4/connection.cpp | 5 +++++ 1 file changed, 5 insertions(+) commit 3268003ae2d01a83cdcf3d2359123ce727f38f05 Author: Olli Salli Date: Mon Apr 11 14:04:31 2011 +0300 Connection: Remove superfluous introspection status change guard This was as far as I can see totally redundant with the ReadinessHelper mechanism to wait for the current status to be introspected fully before moving to the new one. It might also have had a race condition causing the assert hit crashes reported recently, although I can't spot or reproduce it. TelepathyQt4/connection.cpp | 65 ++++++++++++++----------------------------- 1 file changed, 21 insertions(+), 44 deletions(-) commit c9e778c0a43e0fd38aba6921b13f31b87fd92e15 Author: Olli Salli Date: Mon Apr 11 13:19:35 2011 +0300 ReadinessHelper: Add a minor sanity check for when we emit statusReady There are disturbingly many bug reports about crashes in Connection introspection with the ReadinessHelper emitting statusReady with some status the Conn isn't expecting. This is an attempt to narrow that down to either ReadinessHelper acting wonky or the Conn internally screwing up its expectations. TelepathyQt4/readiness-helper.cpp | 4 ++++ 1 file changed, 4 insertions(+) commit 4b00a1254b04315f024f11bf0baaedcf54d8be6d Author: Olli Salli Date: Mon Apr 11 13:15:52 2011 +0300 ReadinessHelper: Remove messy PendingReady finished/destroyed tracking We finish all of the PendingReadys we create, so we know exactly when they're finished and eventually destroyed. Hence we don't need this separate feedback loop. TelepathyQt4/readiness-helper.cpp | 36 ++++++++---------------------------- TelepathyQt4/readiness-helper.h | 2 -- 2 files changed, 8 insertions(+), 30 deletions(-) commit 6816f032f3c6080a5d96b9ac7a4ca9fcfecbb441 Author: Olli Salli Date: Mon Apr 11 12:54:17 2011 +0300 ReadinessHelper: Make missing feature rdep flagging cleaner and faster Test suite 1.90s -> 1.88s TelepathyQt4/readiness-helper.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) commit 84f13254be07f14af0d6eaa3ed499b3701925580 Author: Olli Salli Date: Mon Apr 11 12:40:49 2011 +0300 ReadinessHelper: Make feature dep handling a bit cleaner and faster Test suite goes from 1.98sec to 1.90sec with these changes. TelepathyQt4/readiness-helper.cpp | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) commit 8fa2bb6e9c953669ccc2dfe7ec9402be52871880 Author: Olli Salli Date: Sun Apr 10 20:09:31 2011 +0300 Test conn status change during introspection tests/dbus/conn-introspect-cornercases.cpp | 83 ++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) commit 5febfe2f8684bb30e2b90b070dcaad0036bf3ebe Author: Olli Salli Date: Sun Apr 10 20:08:46 2011 +0300 Fix deadlock on conn status changes when introspecting FeatureConnected TelepathyQt4/connection.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) commit 14297925bac9a16e54c10c22fc38c2d66d81dc79 Author: Olli Salli Date: Sun Apr 10 20:07:23 2011 +0300 Enable Connection::FeatureSimplePresence for ConnectionStatusDisconnected The spec says: While the connection is in the DISCONNECTED state, it contains the set of presence statuses allowed to be set before connecting. TelepathyQt4/connection.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit f787ba932a4516b938563a601d10475934f38aaf Author: Olli Salli Date: Sun Apr 10 19:09:23 2011 +0300 Test connection introspection slow-path tests/dbus/conn-introspect-cornercases.cpp | 47 ++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) commit e7723ea74fc7e5cd8d99d5f6fea508b9f4a9dd9a Author: Olli Salli Date: Sun Apr 10 19:09:00 2011 +0300 Import bug16307-conn.[ch] from tp-glib tests/lib/glib/CMakeLists.txt | 2 + tests/lib/glib/bug16307-conn.c | 220 ++++++++++++++++++++++++++++++++++++++++ tests/lib/glib/bug16307-conn.h | 61 +++++++++++ 3 files changed, 283 insertions(+) commit 4473018a984b9ec7c835d7b7920011037ed87ed1 Author: Olli Salli Date: Sun Apr 10 19:07:47 2011 +0300 Connection: reject invalid statuses in introspected props TelepathyQt4/connection.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit b91be14d970b52c7faf4e8beb007d7a2baa7ab71 Author: Olli Salli Date: Sun Apr 10 18:16:36 2011 +0300 Update TpTestsSimpleConn and TpTestsTextChannelNull from tp-glib tests/lib/glib/simple-conn.c | 184 +++++++++++++++++++++++++++++++++++++++- tests/lib/glib/simple-conn.h | 11 +++ tests/lib/glib/textchan-null.c | 43 +++++++++- tests/lib/glib/textchan-null.h | 2 + 4 files changed, 236 insertions(+), 4 deletions(-) commit a9711878868bceabddf7847ded06782869506817 Author: Olli Salli Date: Sun Apr 10 13:00:10 2011 +0300 Add empty test skeleton ConnIntrospectCornercases tests/dbus/CMakeLists.txt | 1 + tests/dbus/conn-introspect-cornercases.cpp | 119 ++++++++++++++++++++++++++++ 2 files changed, 120 insertions(+) commit d84598588530deb959d1ef478df114f875bda422 Author: Olli Salli Date: Thu Apr 7 14:30:34 2011 +0300 Update NEWS NEWS | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit eca42ead2d4d47655013f39760a719492b10a18b Merge: 1fb1ee4 f42d026 Author: Olli Salli Date: Thu Apr 7 14:28:54 2011 +0300 Merge branch 'request-props-scope' Reviewed-by: Kai Vehmanen commit f42d026e71b59bb94acf532ea2e3cf66be19061d Author: Olli Salli Date: Tue Apr 5 15:56:22 2011 +0300 Fix Initial{Audio,Video} property scope in Account channel request methods TelepathyQt4/account.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit 1fb1ee44f83b3547f65f2c262bf596c01068f37e Author: Olli Salli Date: Tue Apr 5 14:14:32 2011 +0300 Start 0.5.15 development CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit df248aad2d39e7fc95f6bf3e0b136571323413d0 Author: Olli Salli Date: Tue Apr 5 13:59:05 2011 +0300 Prepare release 0.5.14 CMakeLists.txt | 4 ++-- NEWS | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) commit 01b38b1e4cd23c1c609b2f4867cee8fd0b30cb46 Merge: c184fa4 bdcaaad Author: Olli Salli Date: Tue Apr 5 13:55:13 2011 +0300 Merge branch 'manager-file-rccs' Reviewed-by: Xavier Claessens (xclaesse) commit bdcaaad98a261b0ee8ec4b7e36fef141e52863d0 Author: Olli Salli Date: Tue Apr 5 13:34:05 2011 +0300 ManagerFile: Prevent RCC fixed properties from leaking between RCCs TelepathyQt4/manager-file.cpp | 3 +++ 1 file changed, 3 insertions(+) commit 7cdb9e94d565103633e497b38cc68c654e369e78 Author: Olli Salli Date: Tue Apr 5 13:32:18 2011 +0300 TestManagerFile: test RCC parsing more extensively tests/manager-file.cpp | 39 ++++++++++++++++---- tests/telepathy/managers/test-manager-file.manager | 8 +++- 2 files changed, 39 insertions(+), 8 deletions(-) commit c184fa49321f45891be18684efa2ea953a4c6fca Author: Olli Salli Date: Tue Apr 5 12:57:56 2011 +0300 Update NEWS NEWS | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit e1f54f820cf18681bbe7091f7e359ad5dc5ec1ee Author: Olli Salli Date: Mon Apr 4 16:36:00 2011 +0300 StreamedMediaChannel::onStreamAdded: fix defaults for stream direction From the spec: ... clients SHOULD assume that the initial Media_Stream_Direction of a newly added stream is Receive, and that the initial Media_Stream_Pending_Send is Pending_Local_Send. ... Reviewed-by: Andre Magalhaes (andrunko) TelepathyQt4/streamed-media-channel.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit e16f4ea0174bba577a0f32ade72783c1d91bb0ba Merge: dab9c87 0764484 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 1 12:16:38 2011 -0300 Merge remote-tracking branch 'mbatle/callcaps' Reviewed-by: Andre Moreira Magalhaes (andrunko) commit 0764484d428129f17773f0062968f47348c33c67 Author: Mateu Batle Date: Tue Mar 29 16:42:32 2011 -0500 Caps: Changed ConnectionCapabilities to protected and export constructors TelepathyQt4/connection-capabilities.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit aa67d3412f85d7955d21fdf364e8596946abc3c0 Author: Mateu Batle Date: Tue Mar 29 12:20:48 2011 -0500 Fix export of Contact Capabilities constructors TelepathyQt4/contact-capabilities.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit ab4a0a8c92854981f8acf40582d6ad985974109f Author: Mateu Batle Date: Tue Mar 29 11:42:01 2011 -0500 Caps: Change private to protected in ContactCapabilities (needed for tp-qt4-yell) TelepathyQt4/contact-capabilities.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit dab9c8739e8c3c50b5b34d5531ed4dc357ab0863 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 23 22:32:54 2011 -0300 AccountManager: Properly connect to reintrospection slot. TelepathyQt4/account-manager.cpp | 20 +++++++++----------- TelepathyQt4/account-manager.h | 1 + 2 files changed, 10 insertions(+), 11 deletions(-) commit a85342d7c3b56425bb38c2f497ab5dbd47329961 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 23 22:21:43 2011 -0300 Update NEWS NEWS | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 5186253fd7129de905002fc5aa74553777647369 Merge: 1ffa9ca bd55baf Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 23 22:20:36 2011 -0300 Merge branch 'am-reintrospection' Reviewed-by: Marco Barisione (barisione) commit bd55baf01b09e297d1121b68314d1eac25165300 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 23 15:03:07 2011 -0300 AccountManager: Retry introspection 5 times with a 3 seconds interval (or immediately if error is Timeout) if the introspection failed. It will also fail becomeReady() if there is still an error after all tries. TelepathyQt4/account-manager.cpp | 52 +++++++++++++++++++++++++++++++------- 1 file changed, 43 insertions(+), 9 deletions(-) commit 1ffa9cad211ad5e05b5c8477dc19abb1849cbf27 Author: Olli Salli Date: Wed Mar 23 16:32:20 2011 +0200 Update NEWS NEWS | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 1b442bcddecb4e4e6a930e321351848a64027d8f Merge: ab2ff92 69ac83c Author: Olli Salli Date: Wed Mar 23 16:24:02 2011 +0200 Merge branch 'fix-rh-invalidated' Reviewed-by: Andre Magalhaes (andrunko) commit 69ac83c0f27f5630dd29e48b0f91b1f1219b4f2a Author: Olli Salli Date: Wed Mar 23 16:07:31 2011 +0200 ReadinessHelper: Only connect to DBusProxy::invalidated when it has been constructed TelepathyQt4/readiness-helper.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) commit c32a3d46cb9e63f0c1dfee7ce4f0e04f26480392 Author: Olli Salli Date: Wed Mar 23 16:06:52 2011 +0200 Bump Qt dependency to 4.6.0 CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit ab2ff922413c31d22484319bb348ee785800f850 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 23 02:09:55 2011 -0300 Start 0.5.14 development CMakeLists.txt | 2 +- NEWS | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) commit 03e66a8f954186c6748bda33b0ace103362ad6ec Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 23 01:52:12 2011 -0300 Prepare release 0.5.13 CMakeLists.txt | 4 ++-- NEWS | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit a787c9d282d2797d9339cc749be5a54687e825cd Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 23 01:57:03 2011 -0300 contact-messenger example: Properly create account. examples/contact-messenger/sender.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 34b446f2de1fe26f54155fd87d7a8644682456a6 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 23 01:46:12 2011 -0300 Update NEWS NEWS | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit cfc709873177429ab9daa36515741bedfd791f94 Merge: 67b36e2 2ce89dc Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 23 01:43:56 2011 -0300 Merge branch 'contact-messenger-example' Reviewed-by: Olli Salli (oggis) commit 67b36e2969b0954b55213ac42040459ada3464b9 Merge: 698a764 144c02a Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 23 01:43:00 2011 -0300 Merge branch 'sto-normalize-contact' Reviewed-by: Olli Salli (oggis) commit 2ce89dc560379424d85655f069156008788b2fa8 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 23 01:39:06 2011 -0300 file-transfer example: Add prefix ft- to executable names. examples/file-transfer/CMakeLists.txt | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) commit f1c9ee1c36b8813b32b06509b1e84a9208459f09 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 18 16:21:08 2011 -0300 contact-messenger example: Add simple example to send messages using ContactMessenger. examples/CMakeLists.txt | 1 + examples/contact-messenger/CMakeLists.txt | 14 +++++ examples/contact-messenger/sender.cpp | 81 +++++++++++++++++++++++++++++ examples/contact-messenger/sender.h | 51 ++++++++++++++++++ 4 files changed, 147 insertions(+) commit 144c02a32c23d6cfedb03198092cad4cb11f38b8 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 23 01:35:35 2011 -0300 SimpleTextObserver: Add more debug messages. TelepathyQt4/simple-text-observer.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) commit 27008d2a62547eaccdfd20ab00a377aa20812efe Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 22 11:38:32 2011 -0300 SimpleTextObserver: Do not crash if normalizing contact failed but the pending operation succeeded. TelepathyQt4/simple-text-observer.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) commit 698a764da74ad09e5dff100f65a21280b11f9edf Author: Olli Salli Date: Tue Mar 22 16:20:18 2011 +0200 Update NEWS NEWS | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit ba7b2821d4b699115fe6992f8cb7a90c2fe355ca Author: Olli Salli Date: Tue Mar 22 16:11:52 2011 +0200 ReadinessHelper: Don't connect to proxy invalidated multiple times TelepathyQt4/readiness-helper.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) commit 7722397aebcceaca9b525aa12d5caf0930dafc40 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 17 19:28:03 2011 -0300 RequestableChannelClassSpecList: Add missing pretty header. Reviewed-by: Olli Salli (oggis) TelepathyQt4/CMakeLists.txt | 1 + TelepathyQt4/RequestableChannelClassSpecList | 13 +++++++++++++ 2 files changed, 14 insertions(+) commit 44bb8dc5511e494ca12b58468c41aa7808aa8c32 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 18 20:22:00 2011 -0300 Start 0.5.13 development CMakeLists.txt | 2 +- NEWS | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) commit 119683c012cdb932421d6176fd86202a56a6e645 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 18 20:10:19 2011 -0300 Prepare release 0.5.12 CMakeLists.txt | 4 ++-- NEWS | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) commit 106848204fe8801525f276ff438ee6d9fb4ae5cd Merge: aabc6de eeb5e68 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 18 20:05:42 2011 -0300 Merge branch 'contact-messenger-tests' Reviewed-by: Andre Moreira Magalhaes (andrunko) commit aabc6de0190110537a319d39560e4205c85c1332 Merge: 7a41e5f fe1695c Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 18 20:04:52 2011 -0300 Merge branch 'simple-send-receive' Reviewed-by: Olli Salli (oggis) commit 7a41e5fce2c2ebcf14b954a48728f879d1c7c235 Merge: 21c3a4f 0bd988d Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 18 20:04:41 2011 -0300 Merge branch 'CD.I.Messages' Reviewed-by: Olli Salli (oggis) commit eeb5e6869c6767ec4a634d21411e372951bd7a8b Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 18 19:58:19 2011 -0300 contact-messenger test: Fix testReceived and added testReceivedFromContact. tests/dbus/contact-messenger.cpp | 87 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 84 insertions(+), 3 deletions(-) commit 26eb6c69eae1c96cc3a538e29210cc406d6456ff Author: Olli Salli Date: Sat Mar 19 00:11:37 2011 +0200 Correctly check that the observers are unregistered tests/dbus/contact-messenger.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 57714187cdb95f45a1876e38ffe3bef7a25d09d1 Author: Olli Salli Date: Sat Mar 19 00:00:58 2011 +0200 Update NEWS NEWS | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit 8ffa5ac350b1c5f7df880306d51cd28f44e2f7e5 Author: Olli Salli Date: Fri Mar 18 23:56:01 2011 +0200 TestContactMessenger: Test receiving messages tests/dbus/contact-messenger.cpp | 146 +++++++++++++++++++++++++++++++++----- 1 file changed, 127 insertions(+), 19 deletions(-) commit 6ebc9bdc9940beabfa734865c471ab037d098524 Author: Olli Salli Date: Fri Mar 18 23:28:15 2011 +0200 Bump tp-glib dep to 0.13.10 CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e6e57e0510d6267b5ac568185ecc341766c9dd8a Author: Olli Salli Date: Fri Mar 18 23:02:15 2011 +0200 TestContactMessenger: Expand test to be able to test sending with real service tests/dbus/contact-messenger.cpp | 215 +++++++++++++++++++++++++++++++++----- 1 file changed, 191 insertions(+), 24 deletions(-) commit 0a9aa103f9e6c1b7d22282f0e86ee75a9abd6fcc Author: Olli Salli Date: Fri Mar 18 19:01:04 2011 +0200 TestContactMessenger: Add conn service tests/dbus/contact-messenger.cpp | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) commit 2203d2a9b5a9394ca82f42d6c2a50bfb71f3e832 Author: Olli Salli Date: Fri Mar 18 19:00:47 2011 +0200 TestContactMessenger: Don't require per-contact observers tests/dbus/contact-messenger.cpp | 67 ++++++++++++++++++++++++-------------- 1 file changed, 42 insertions(+), 25 deletions(-) commit 384afa56232b71d88826688c57ddd7a4b04c72bd Author: Olli Salli Date: Thu Mar 17 21:10:16 2011 +0200 TestContactMessenger: Check that a suitable observer is registered for ContactMessenger tests/dbus/contact-messenger.cpp | 70 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) commit 556c4c76ea740d9c8fcd376cd16778742b246140 Author: Olli Salli Date: Thu Mar 17 20:07:53 2011 +0200 TestContactMessenger: Test for no CD support tests/dbus/contact-messenger.cpp | 75 +++++++++++++++++++++++++++++++++++++- 1 file changed, 74 insertions(+), 1 deletion(-) commit c6523b67c992cea2de10c8e028e69213dca1f53e Author: Olli Salli Date: Thu Mar 17 19:20:57 2011 +0200 Add stub test for ContactMessenger tests/dbus/CMakeLists.txt | 1 + tests/dbus/contact-messenger.cpp | 158 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 159 insertions(+) commit fe1695c8babfa5171b5a98566d4465e4eb9592fc Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 18 19:44:55 2011 -0300 SimpleTextObserver: Make sure FeatureCore is ready before calling contactsForIdentifiers. TelepathyQt4/simple-text-observer.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) commit 06b2ec38fb667fbbcd4e4a74a00491f954046644 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 18 18:59:17 2011 -0300 SimpleTextObserver: Do not call slot that use mPriv in mPriv constructor. TelepathyQt4/simple-text-observer.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit e59ce88665f974fa012666f62244afbd20b96e1d Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 18 18:01:34 2011 -0300 SimpleTextObserver: Only set context as finished in observeChannels after the channels are ready to use. TelepathyQt4/simple-text-observer-internal.h | 4 +++ TelepathyQt4/simple-text-observer.cpp | 36 +++++++++++++++++++++++--- 2 files changed, 37 insertions(+), 3 deletions(-) commit b52cef463e8eb53f15e489701ddd714ee607f1c0 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 18 17:17:09 2011 -0300 SimpleTextObserver: Properly connect to signals. TelepathyQt4/simple-text-observer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit c2b4e96489502818de5e2b93d1048faed4d76c45 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 18 15:33:11 2011 -0300 PendingSendMessage: Finish with NOT_IMPLEMENTED if the CD.I.Messages.SendMessage call returned UNKNOWN_INTERFACE. TelepathyQt4/pending-send-message.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit ef7e5625d4d38fe39862bc61fc7b0fb549fcdcd2 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 18 15:32:30 2011 -0300 Add define for org.freedesktop.DBus.Error.UnknownInterface. TelepathyQt4/constants.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) commit de777dcc0c381ed492c6c7e51e2582ade86760bc Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 18 15:04:39 2011 -0300 ClientRegistrar: Add Q_PROPERTY for Recover in Observer adaptor. TelepathyQt4/client-registrar-internal.h | 1 + 1 file changed, 1 insertion(+) commit bdc90940cd674ee4b22ae52bcc86dbff5d8d9389 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 18 15:02:20 2011 -0300 SimpleTextObserver: Delete internal observer when last ref is released. TelepathyQt4/simple-text-observer-internal.h | 3 +-- TelepathyQt4/simple-text-observer.cpp | 15 ++++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) commit 388d2a4b799953756927af7e70cb18159e4a9384 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 18 15:00:25 2011 -0300 SharedPtr: Allow usage of SharedPtr(this) in destructor without crashing. TelepathyQt4/shared-ptr.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 58b559045451da4b77f5e97c2f5c1b9300f2f47f Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 18 14:48:55 2011 -0300 PendingSendMessage: Finish with NOT_IMPLEMENTED if the CD.I.Messages.SendMessage call returned UNKNOWN_METHOD. TelepathyQt4/contact-messenger.cpp | 2 +- TelepathyQt4/pending-send-message.cpp | 19 +++++++++++++++++++ TelepathyQt4/pending-send-message.h | 5 +++-- 3 files changed, 23 insertions(+), 3 deletions(-) commit acef3583d4b77db3dfbfd24525c6c4d09a47865f Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 18 14:14:54 2011 -0300 SimpleTextObserver: Move AbstractClientObserver code to an internal class and share observers per account. TelepathyQt4/simple-text-observer-internal.h | 48 ++++- TelepathyQt4/simple-text-observer.cpp | 244 ++++++++++++++------------ TelepathyQt4/simple-text-observer.h | 22 +-- 3 files changed, 176 insertions(+), 138 deletions(-) commit ef04f16e729ba9e285a58528e9c8ba03fe2d63ac Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 18 13:22:33 2011 -0300 ContactMessenger: Improve docs. TelepathyQt4/contact-messenger.cpp | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) commit 96fe186adc647ce5cca4f98c5b219ca6f4fa8675 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 18 13:12:23 2011 -0300 SimpleTextObserver: Normalize contact id when needed. TelepathyQt4/simple-text-observer-internal.h | 45 +++++++- TelepathyQt4/simple-text-observer.cpp | 154 +++++++++++++++++++++++--- TelepathyQt4/simple-text-observer.h | 16 ++- 3 files changed, 199 insertions(+), 16 deletions(-) commit 9b4c04ed90729e1c34117b6bc806dab5f0d58a2f Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 18 12:00:15 2011 -0300 ContactMessenger: Add \class doc. TelepathyQt4/contact-messenger.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) commit 8c72a203817f75bbab0b276463e0a23aca408b3b Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 18 12:00:04 2011 -0300 SimpleTextObserver: Add \class doc. TelepathyQt4/simple-text-observer.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) commit edc8003d59b96374d09be4bc7e02286aab9215ee Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 18 11:44:52 2011 -0300 PendingSendMessage: Add accessor for ContactMessenger. TelepathyQt4/pending-send-message.cpp | 11 +++++++++++ TelepathyQt4/pending-send-message.h | 2 ++ 2 files changed, 13 insertions(+) commit 71ba726070bcac7d2c1022d392e8c721dc014b2f Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 18 11:39:09 2011 -0300 ContactMessenger: Add docs. TelepathyQt4/contact-messenger.cpp | 89 ++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) commit 0eaf383c13d372a4d1783e36faddf0797c99efcd Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 18 11:23:11 2011 -0300 ContactMessenger: Warn if invalid params are passed to create. TelepathyQt4/contact-messenger.cpp | 4 ++++ 1 file changed, 4 insertions(+) commit a56db82e057ed5e040890e456afa853b551fc23e Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 18 11:23:00 2011 -0300 ContactMessenger: Add overload create method taking a ContactPtr as param. TelepathyQt4/contact-messenger.cpp | 11 +++++++++++ TelepathyQt4/contact-messenger.h | 1 + 2 files changed, 12 insertions(+) commit fd61f9856a4ff32df9d11f48d2e355b84c3b592f Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 18 11:15:04 2011 -0300 SimpleTextObserver: Do not set recover to true as the observer not service-activatable. TelepathyQt4/simple-text-observer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit ac30370654c7747e05b985fca3206ffcaae89d34 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 18 11:14:02 2011 -0300 SimpleTextObserver: Add docs. TelepathyQt4/simple-text-observer.cpp | 71 +++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) commit 028ca8d1ac1a3682095982777cfbb3fbc678086a Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 18 11:04:30 2011 -0300 SimpleTextObserver: Just relay signals from TextChannelWrapper. TelepathyQt4/simple-text-observer.cpp | 16 ++-------------- TelepathyQt4/simple-text-observer.h | 4 ---- 2 files changed, 2 insertions(+), 18 deletions(-) commit 2817c147b031affe6582ccf010e34c73fda893bd Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 18 11:03:52 2011 -0300 SimpleTextObserver: Implement accessors for account and contactIdentifier. TelepathyQt4/simple-text-observer.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 06d106f079db27f6ae1a200bd8491801b85f9e0b Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 18 10:47:18 2011 -0300 SimpleTextObserver: Add some warnings. TelepathyQt4/simple-text-observer.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) commit 2650f4723d8e9dcaef7f3cb844577cdb2a874bda Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 17 23:32:28 2011 -0300 ContactMessenger: Implement sending support. TelepathyQt4/contact-messenger.cpp | 50 +++++++++++++++++++++++++++++++----- TelepathyQt4/message.h | 3 ++- 2 files changed, 46 insertions(+), 7 deletions(-) commit 28896b67f40790716b8f8e443744065bf437c329 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 17 23:31:07 2011 -0300 PendingSendMessage: Add constructor taking a ContactMessenger. TelepathyQt4/pending-send-message.cpp | 12 ++++++++++++ TelepathyQt4/pending-send-message.h | 2 ++ 2 files changed, 14 insertions(+) commit d0cac4d39787d83bbe5277d1103f58877a5e99fe Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 17 23:29:12 2011 -0300 PendingSendMessage: Move to it's own header. TextChannel now includes PendingSendMessage so apps using TextChannel pretty header only can still use PendingSendMessage. TelepathyQt4/CMakeLists.txt | 3 ++ TelepathyQt4/PendingSendMessage | 2 +- TelepathyQt4/pending-send-message.cpp | 96 +++++++++++++++++++++++++++++++++ TelepathyQt4/pending-send-message.h | 72 +++++++++++++++++++++++++ TelepathyQt4/text-channel.cpp | 69 ++---------------------- TelepathyQt4/text-channel.h | 30 +---------- 6 files changed, 176 insertions(+), 96 deletions(-) commit 83c7fb588185a8dcbfb3654da5287645d379e11c Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 17 22:31:04 2011 -0300 ContactMessenger: Use SimpleTextObserver. TelepathyQt4/contact-messenger.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) commit b7a4385d7c119ac306d5bd2d860170198ff0670a Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 17 22:30:23 2011 -0300 SimpleTextObserver: Add class to observe text channels. TelepathyQt4/CMakeLists.txt | 6 + TelepathyQt4/SimpleTextObserver | 13 ++ TelepathyQt4/simple-text-observer-internal.h | 112 +++++++++++++ TelepathyQt4/simple-text-observer.cpp | 230 ++++++++++++++++++++++++++ TelepathyQt4/simple-text-observer.h | 87 ++++++++++ TelepathyQt4/types.h | 2 + 6 files changed, 450 insertions(+) commit b1b6b193e97c59312aac7da23d5e1f5683cb3f73 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 16 18:15:22 2011 -0300 ContactMessenger: Add stub class for simple send/receive text API. TelepathyQt4/CMakeLists.txt | 4 ++ TelepathyQt4/ContactMessenger | 13 ++++++ TelepathyQt4/contact-messenger.cpp | 87 ++++++++++++++++++++++++++++++++++++ TelepathyQt4/contact-messenger.h | 75 +++++++++++++++++++++++++++++++ TelepathyQt4/types.h | 2 + 5 files changed, 181 insertions(+) commit a5ca0867af63d32c524feed5075c32cb54a63c1c Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 16 18:13:50 2011 -0300 MessageContentPart: Add high-level API for MessagePart. TelepathyQt4/CMakeLists.txt | 4 ++ TelepathyQt4/MessageContentPart | 13 +++++ TelepathyQt4/MessageContentPartList | 13 +++++ TelepathyQt4/message-content-part.cpp | 79 +++++++++++++++++++++++++++ TelepathyQt4/message-content-part.h | 96 +++++++++++++++++++++++++++++++++ 5 files changed, 205 insertions(+) commit 121468d2754d120e20eccf01c3e0d75b74a35abe Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 16 18:12:57 2011 -0300 PendingSendMessage: Add missing pretty header. TelepathyQt4/CMakeLists.txt | 1 + TelepathyQt4/PendingSendMessage | 13 +++++++++++++ 2 files changed, 14 insertions(+) commit 0bd988deca05046a94014b24202af27400bdde79 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 17 22:47:01 2011 -0300 Generate bindings for CD.I.Message (internal). TelepathyQt4/CMakeLists.txt | 2 ++ TelepathyQt4/future-channel-dispatcher.xml | 20 ++++++++++++++++++++ TelepathyQt4/future-interfaces.xml | 1 + TelepathyQt4/future-internal.h | 2 ++ TelepathyQt4/future.cpp | 3 +++ 5 files changed, 28 insertions(+) commit 452471b1dffb602a0c5050167559172a59ef5eb4 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 17 22:43:52 2011 -0300 Import CD.I.Messages interface. spec/Channel_Dispatcher_Interface_Messages.xml | 49 ++++++++++++++++++++++++ spec/all.xml | 1 + 2 files changed, 50 insertions(+) commit 21c3a4f6dc6a63c57b0497ca5f43fd6a1fa43f86 Author: Olli Salli Date: Thu Mar 17 18:57:28 2011 +0200 Update NEWS NEWS | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 940018c5ebaac56d7091a46441e5fbe5579eb54f Author: Olli Salli Date: Thu Mar 17 12:21:21 2011 +0200 Don't fail R&H operations if the CR Succeeds while we're introspecting the Channel Reviewed-by: Andre Magalhaes (andrunko) TelepathyQt4/client-registrar.cpp | 14 ++++++++++++++ TelepathyQt4/pending-channel.cpp | 2 +- .../request-temporary-handler-internal.cpp | 18 +++++++++++++++++- TelepathyQt4/request-temporary-handler-internal.h | 6 ++++++ 4 files changed, 38 insertions(+), 2 deletions(-) commit 2db3767ce19426139e92008979cce88da8bf1e64 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 15 16:49:55 2011 -0300 Start 0.5.12 development CMakeLists.txt | 2 +- NEWS | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) commit 70379fbe8840a84b369538de0fdf3f4c738c4e31 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 15 16:41:13 2011 -0300 Update NEWS NEWS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit af63ce4468244769db7e6ad4d8e645d7bdbe56aa Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 15 16:12:54 2011 -0300 Prepare release 0.5.11 CMakeLists.txt | 4 ++-- NEWS | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) commit 1d9c4e0a4907cfd20bc113d8e7f6a4e481dc2729 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 15 15:50:59 2011 -0300 Update NEWS NEWS | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit c76a35ace65536bec7bcba128e337886b12f9420 Merge: 289798c 24d5fe8 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 15 15:45:55 2011 -0300 Merge branch 'create-contact-fallback' Reviewed-by: Olli Salli (oggis) commit 24d5fe8437d95a621633de857150a9616103d7b0 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 15 15:43:37 2011 -0300 Channel: Use injectContactId instead of injectContactIds where appropriate. TelepathyQt4/channel.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) commit a5bb217dc67eba6f5f7c91f69ffb55ccd90d4004 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 15 15:40:58 2011 -0300 ConnectionLowlevel: Add singular version of injectContactIds. TelepathyQt4/connection-lowlevel.h | 3 ++- TelepathyQt4/connection.cpp | 13 ++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) commit 29e672b7f06511740922272b4f7c5e10e4938e4f Author: Andre Moreira Magalhaes (andrunko) Date: Sun Mar 13 15:13:25 2011 -0300 ContactManager::Roster: Bind ContactList.ContactsChangedWithID. TelepathyQt4/contact-manager-internal.h | 10 ++++++-- TelepathyQt4/contact-manager-roster.cpp | 38 +++++++++++++++++++++++++++++-- 2 files changed, 44 insertions(+), 4 deletions(-) commit 65069b8afe195c1c170bf0339e5e134ffa899754 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Mar 13 14:55:21 2011 -0300 StreamedMediaChannel: Add TODO to pass id hints to ContactManager when/if available. TelepathyQt4/streamed-media-channel.cpp | 2 ++ 1 file changed, 2 insertions(+) commit 331a5de3a0c158a220fd4aa4ad4df6a86f9da18a Author: Andre Moreira Magalhaes (andrunko) Date: Sun Mar 13 14:54:47 2011 -0300 OutgoingStreamTubeChannel: Add TODO to pass id hints to ContactManager when/if available. TelepathyQt4/outgoing-stream-tube-channel.cpp | 2 ++ 1 file changed, 2 insertions(+) commit 15076d7904666cdbec1f88fbed93fc201123890d Author: Andre Moreira Magalhaes (andrunko) Date: Sun Mar 13 14:55:31 2011 -0300 TextChannel: Add TODO to pass id hints to ContactManager when/if available. TelepathyQt4/text-channel.cpp | 2 ++ 1 file changed, 2 insertions(+) commit 1757af8b8d5de31b92ac920d3120a8ab254382df Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 14 20:02:59 2011 -0300 TextChannel: Inject contact ids when available. TelepathyQt4/text-channel.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) commit 83fdfdbb10169fb440e9a29090d6b1b332b0b927 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Mar 13 14:42:55 2011 -0300 ReceivedMessage: Add support for retrieving the message sender id. TelepathyQt4/message.cpp | 11 +++++++++++ TelepathyQt4/message.h | 1 + 2 files changed, 12 insertions(+) commit 2b810376175e0e7c7f139983acf22551406e78d2 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 14 19:55:06 2011 -0300 Channel: Inject contact ids when available. TelepathyQt4/channel.cpp | 41 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) commit 9cd509ea38dc66ab19f05892133c731f75ec50e9 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Mar 13 13:28:20 2011 -0300 ContactManager: Added mechanism to build contacts when using immortal handles if the contact handle and id is known even if the contact disappeared before finishing introspection. TelepathyQt4/connection-lowlevel.h | 7 ++++++ TelepathyQt4/connection.cpp | 35 ++++++++++++++++++++++++++++++ TelepathyQt4/contact-manager.cpp | 41 ++++++++++++++++++++++++++++++++++++ TelepathyQt4/contact-manager.h | 6 +++++- TelepathyQt4/pending-contacts.cpp | 21 ++++++++++++++++-- 5 files changed, 107 insertions(+), 3 deletions(-) commit 7ad3522e87f7099d34485602ae7a2e5dd6d54e88 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Mar 13 13:26:26 2011 -0300 Contact: Make it subclassable. TelepathyQt4/contact-manager.cpp | 4 ++-- TelepathyQt4/contact.cpp | 4 +++- TelepathyQt4/contact.h | 10 +++++----- 3 files changed, 10 insertions(+), 8 deletions(-) commit 289798cf207d272aa248995b0df12b6cbc4d70fa Merge: 37fc9a3 dd38138 Author: Xavier Claessens Date: Thu Mar 10 15:28:33 2011 +0100 Merge branch 'trivial' Rev-By andrunko commit dd38138bbb5eed363715705e928ca9fa3616ba0e Author: Xavier Claessens Date: Thu Mar 10 15:25:14 2011 +0100 Connect finished() signal before calling setFinished() In case we change setFinished() to emit the signal right away instead of in an idle callback. TelepathyQt4/contact-manager-roster.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 37fc9a33bb2d4080b0d2b8de449b8cb5240fdb4a Merge: 07ed33c dbec42d Author: Xavier Claessens Date: Thu Mar 10 14:00:42 2011 +0100 Merge branch 'fallback' Rev-By Oggis commit dbec42d66c5ff06301c11e91355cc1c4c28119cd Author: Xavier Claessens Date: Thu Mar 10 12:56:56 2011 +0100 Wait for FeatureRoster to be ready before setting ContactManager's state to Success even in fallback mode TelepathyQt4/contact-manager-roster.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) commit 07ed33cd32447f3dec99ef7820f3a704c03207d7 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 9 12:16:05 2011 -0300 Start 0.5.11 development CMakeLists.txt | 2 +- NEWS | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) commit e4abe0414565578aa923130dbb701aacff3c87bf Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 9 11:20:58 2011 -0300 Prepare release 0.5.10 CMakeLists.txt | 4 ++-- NEWS | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit 5e56cf4e7f83fd0ce019a7675c4844ececa6b714 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 8 14:38:36 2011 -0300 Update documentation with new repositories. TelepathyQt4/main.dox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 1c51b73fa630ba0ac31359f11ee12a9e957367e9 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 8 14:38:14 2011 -0300 Update HACKING with new repositories. HACKING | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit 896b318db4b75af95c8e70d88bbbd06ac109f3fc Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 8 14:33:34 2011 -0300 Update NEWS NEWS | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit 43226df7e2076404735318be4a2c129dd3fcf696 Merge: f41fbc3 0e74d6b Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 8 14:27:46 2011 -0300 Merge branch 'connection-connected' Reviewed-by: Olli Salli (oggis) commit 0e74d6b2abfe5abad3b6dc41ce48c9ab65213cb5 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 8 14:25:50 2011 -0300 Connection: Improve FeatureConnected documentation. TelepathyQt4/connection.cpp | 4 ++++ 1 file changed, 4 insertions(+) commit 859ecbee1ee589d33e4e19f7ba379622b2413f8d Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 8 13:55:01 2011 -0300 conn-basics test: Test Connection::FeatureConnected. tests/dbus/conn-basics.cpp | 59 +++++++++++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 23 deletions(-) commit 6e33dd8d5cd0cb37c2fd7ec158be5520742797ea Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 8 13:54:44 2011 -0300 Connection: Add feature FeatureConnected. TelepathyQt4/connection.cpp | 25 +++++++++++++++++++++++++ TelepathyQt4/connection.h | 1 + 2 files changed, 26 insertions(+) commit f41fbc37bacbd0ca56543c3b05f028f83560ec0a Author: Xavier Claessens Date: Tue Mar 8 17:15:18 2011 +0100 Ensure FeatureRoster is ready before setting ContactManager state to success TelepathyQt4/contact-manager-internal.h | 1 + TelepathyQt4/contact-manager-roster.cpp | 20 ++++++++++++++++---- TelepathyQt4/contact-manager.cpp | 1 + 3 files changed, 18 insertions(+), 4 deletions(-) commit 85417838404804917f1a0b495a6e33761ab7f788 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 7 19:02:29 2011 -0300 Start 0.5.10 development CMakeLists.txt | 2 +- NEWS | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) commit 2855767b87fbeeb8dad2e7ebf9070ef5b20f0ea2 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 7 14:41:55 2011 -0300 Prepare release 0.5.9 CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 3bed9a03a101025f67643962aaf535e4c9f15c73 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 7 17:39:51 2011 -0300 Use @copyright and @license tags. TelepathyQt4/Farsight/channel.cpp | 7 ++++--- TelepathyQt4/Farsight/channel.h | 7 ++++--- TelepathyQt4/Farsight/global.h | 7 ++++--- TelepathyQt4/abstract-client.cpp | 7 ++++--- TelepathyQt4/abstract-client.h | 7 ++++--- TelepathyQt4/abstract-interface.cpp | 8 +++++--- TelepathyQt4/abstract-interface.h | 8 +++++--- TelepathyQt4/account-capability-filter.h | 7 ++++--- TelepathyQt4/account-factory.cpp | 7 ++++--- TelepathyQt4/account-factory.h | 7 ++++--- TelepathyQt4/account-filter.h | 7 ++++--- TelepathyQt4/account-manager.cpp | 7 ++++--- TelepathyQt4/account-manager.h | 7 ++++--- TelepathyQt4/account-property-filter.cpp | 7 ++++--- TelepathyQt4/account-property-filter.h | 7 ++++--- TelepathyQt4/account-set-internal.h | 7 ++++--- TelepathyQt4/account-set.cpp | 7 ++++--- TelepathyQt4/account-set.h | 7 ++++--- TelepathyQt4/account.cpp | 7 ++++--- TelepathyQt4/account.h | 7 ++++--- TelepathyQt4/and-filter.h | 7 ++++--- TelepathyQt4/async-model.dox | 4 ++-- TelepathyQt4/avatar.cpp | 7 ++++--- TelepathyQt4/avatar.h | 7 ++++--- TelepathyQt4/capabilities-base.cpp | 7 ++++--- TelepathyQt4/capabilities-base.h | 7 ++++--- TelepathyQt4/channel-class-spec.cpp | 7 ++++--- TelepathyQt4/channel-class-spec.h | 7 ++++--- TelepathyQt4/channel-dispatch-operation.cpp | 7 ++++--- TelepathyQt4/channel-dispatch-operation.h | 7 ++++--- TelepathyQt4/channel-dispatcher.cpp | 7 ++++--- TelepathyQt4/channel-dispatcher.h | 7 ++++--- TelepathyQt4/channel-factory.cpp | 7 ++++--- TelepathyQt4/channel-factory.h | 7 ++++--- TelepathyQt4/channel-internal.h | 7 ++++--- TelepathyQt4/channel-request.cpp | 7 ++++--- TelepathyQt4/channel-request.h | 7 ++++--- TelepathyQt4/channel.cpp | 7 ++++--- TelepathyQt4/channel.h | 7 ++++--- TelepathyQt4/client-registrar-internal.h | 7 ++++--- TelepathyQt4/client-registrar.cpp | 7 ++++--- TelepathyQt4/client-registrar.h | 7 ++++--- TelepathyQt4/client.cpp | 7 ++++--- TelepathyQt4/client.h | 7 ++++--- TelepathyQt4/connection-capabilities.cpp | 7 ++++--- TelepathyQt4/connection-capabilities.h | 7 ++++--- TelepathyQt4/connection-factory.cpp | 7 ++++--- TelepathyQt4/connection-factory.h | 7 ++++--- TelepathyQt4/connection-internal.h | 7 ++++--- TelepathyQt4/connection-lowlevel.h | 7 ++++--- TelepathyQt4/connection-manager-internal.h | 7 ++++--- TelepathyQt4/connection-manager-lowlevel.h | 7 ++++--- TelepathyQt4/connection-manager.cpp | 7 ++++--- TelepathyQt4/connection-manager.h | 7 ++++--- TelepathyQt4/connection.cpp | 7 ++++--- TelepathyQt4/connection.h | 7 ++++--- TelepathyQt4/constants.h | 7 ++++--- TelepathyQt4/contact-capabilities.cpp | 7 ++++--- TelepathyQt4/contact-capabilities.h | 7 ++++--- TelepathyQt4/contact-factory.cpp | 7 ++++--- TelepathyQt4/contact-factory.h | 7 ++++--- TelepathyQt4/contact-manager-internal.h | 7 ++++--- TelepathyQt4/contact-manager-roster.cpp | 7 ++++--- TelepathyQt4/contact-manager.cpp | 7 ++++--- TelepathyQt4/contact-manager.h | 7 ++++--- TelepathyQt4/contact-search-channel-internal.h | 7 ++++--- TelepathyQt4/contact-search-channel.cpp | 7 ++++--- TelepathyQt4/contact-search-channel.h | 7 ++++--- TelepathyQt4/contact.cpp | 7 ++++--- TelepathyQt4/contact.h | 7 ++++--- TelepathyQt4/dbus-proxy-factory-internal.h | 7 ++++--- TelepathyQt4/dbus-proxy-factory.cpp | 7 ++++--- TelepathyQt4/dbus-proxy-factory.h | 7 ++++--- TelepathyQt4/dbus-proxy.cpp | 7 ++++--- TelepathyQt4/dbus-proxy.h | 7 ++++--- TelepathyQt4/dbus.cpp | 7 ++++--- TelepathyQt4/dbus.h | 7 ++++--- TelepathyQt4/debug-internal.h | 7 ++++--- TelepathyQt4/debug.cpp | 7 ++++--- TelepathyQt4/debug.h | 7 ++++--- TelepathyQt4/examples.dox | 4 ++-- TelepathyQt4/feature.cpp | 7 ++++--- TelepathyQt4/feature.h | 7 ++++--- .../file-transfer-channel-creation-properties.cpp | 7 ++++--- .../file-transfer-channel-creation-properties.h | 7 ++++--- TelepathyQt4/file-transfer-channel.cpp | 7 ++++--- TelepathyQt4/file-transfer-channel.h | 7 ++++--- TelepathyQt4/filter.h | 7 ++++--- TelepathyQt4/fixed-feature-factory.cpp | 7 ++++--- TelepathyQt4/fixed-feature-factory.h | 7 ++++--- TelepathyQt4/future-internal.h | 7 ++++--- TelepathyQt4/future.cpp | 7 ++++--- TelepathyQt4/generic-capability-filter.h | 7 ++++--- TelepathyQt4/generic-property-filter.h | 7 ++++--- TelepathyQt4/global.h | 7 ++++--- TelepathyQt4/groups.dox | 4 ++-- TelepathyQt4/handled-channel-notifier.cpp | 7 ++++--- TelepathyQt4/handled-channel-notifier.h | 7 ++++--- TelepathyQt4/incoming-file-transfer-channel.cpp | 7 ++++--- TelepathyQt4/incoming-file-transfer-channel.h | 7 ++++--- TelepathyQt4/incoming-stream-tube-channel.cpp | 5 +++-- TelepathyQt4/incoming-stream-tube-channel.h | 5 +++-- TelepathyQt4/key-file.cpp | 7 ++++--- TelepathyQt4/key-file.h | 7 ++++--- TelepathyQt4/location-info.cpp | 7 ++++--- TelepathyQt4/location-info.h | 7 ++++--- TelepathyQt4/main.dox | 4 ++-- TelepathyQt4/manager-file.cpp | 7 ++++--- TelepathyQt4/manager-file.h | 7 ++++--- TelepathyQt4/media-session-handler.cpp | 7 ++++--- TelepathyQt4/media-session-handler.h | 7 ++++--- TelepathyQt4/media-stream-handler.cpp | 7 ++++--- TelepathyQt4/media-stream-handler.h | 7 ++++--- TelepathyQt4/message.cpp | 8 +++++--- TelepathyQt4/message.h | 8 +++++--- TelepathyQt4/method-invocation-context.h | 7 ++++--- TelepathyQt4/not-filter.h | 7 ++++--- TelepathyQt4/object.cpp | 7 ++++--- TelepathyQt4/object.h | 7 ++++--- TelepathyQt4/optional-interface-factory.cpp | 7 ++++--- TelepathyQt4/optional-interface-factory.h | 7 ++++--- TelepathyQt4/or-filter.h | 7 ++++--- TelepathyQt4/outgoing-file-transfer-channel.cpp | 7 ++++--- TelepathyQt4/outgoing-file-transfer-channel.h | 7 ++++--- .../outgoing-stream-tube-channel-internal.h | 5 +++-- TelepathyQt4/outgoing-stream-tube-channel.cpp | 5 +++-- TelepathyQt4/outgoing-stream-tube-channel.h | 5 +++-- TelepathyQt4/pending-account.cpp | 7 ++++--- TelepathyQt4/pending-account.h | 7 ++++--- TelepathyQt4/pending-channel-request-internal.h | 7 ++++--- TelepathyQt4/pending-channel-request.cpp | 7 ++++--- TelepathyQt4/pending-channel-request.h | 7 ++++--- TelepathyQt4/pending-channel.cpp | 7 ++++--- TelepathyQt4/pending-channel.h | 7 ++++--- TelepathyQt4/pending-connection.cpp | 7 ++++--- TelepathyQt4/pending-connection.h | 7 ++++--- TelepathyQt4/pending-contact-attributes.cpp | 7 ++++--- TelepathyQt4/pending-contact-attributes.h | 7 ++++--- TelepathyQt4/pending-contact-info.cpp | 7 ++++--- TelepathyQt4/pending-contact-info.h | 7 ++++--- TelepathyQt4/pending-contacts.cpp | 7 ++++--- TelepathyQt4/pending-contacts.h | 7 ++++--- TelepathyQt4/pending-handles.cpp | 7 ++++--- TelepathyQt4/pending-handles.h | 7 ++++--- TelepathyQt4/pending-operation.cpp | 7 ++++--- TelepathyQt4/pending-operation.h | 7 ++++--- TelepathyQt4/pending-ready.cpp | 7 ++++--- TelepathyQt4/pending-ready.h | 7 ++++--- TelepathyQt4/pending-stream-tube-connection.cpp | 5 +++-- TelepathyQt4/pending-stream-tube-connection.h | 5 +++-- TelepathyQt4/pending-string-list.cpp | 7 ++++--- TelepathyQt4/pending-string-list.h | 7 ++++--- TelepathyQt4/pending-variant-map.cpp | 7 ++++--- TelepathyQt4/pending-variant-map.h | 7 ++++--- TelepathyQt4/pending-variant.cpp | 7 ++++--- TelepathyQt4/pending-variant.h | 7 ++++--- TelepathyQt4/presence.cpp | 7 ++++--- TelepathyQt4/presence.h | 7 ++++--- TelepathyQt4/profile-manager.cpp | 7 ++++--- TelepathyQt4/profile-manager.h | 7 ++++--- TelepathyQt4/profile.cpp | 7 ++++--- TelepathyQt4/profile.h | 7 ++++--- TelepathyQt4/properties.cpp | 7 ++++--- TelepathyQt4/properties.h | 7 ++++--- TelepathyQt4/protocol-info.cpp | 7 ++++--- TelepathyQt4/protocol-info.h | 7 ++++--- TelepathyQt4/protocol-parameter.cpp | 7 ++++--- TelepathyQt4/protocol-parameter.h | 7 ++++--- TelepathyQt4/readiness-helper.cpp | 7 ++++--- TelepathyQt4/readiness-helper.h | 7 ++++--- TelepathyQt4/ready-object.cpp | 7 ++++--- TelepathyQt4/ready-object.h | 7 ++++--- TelepathyQt4/referenced-handles.cpp | 7 ++++--- TelepathyQt4/referenced-handles.h | 7 ++++--- .../request-temporary-handler-internal.cpp | 7 ++++--- TelepathyQt4/request-temporary-handler-internal.h | 7 ++++--- TelepathyQt4/requestable-channel-class-spec.cpp | 7 ++++--- TelepathyQt4/requestable-channel-class-spec.h | 7 ++++--- TelepathyQt4/room-list-channel.cpp | 8 +++++--- TelepathyQt4/room-list-channel.h | 8 +++++--- TelepathyQt4/shared-ptr.dox | 4 ++-- TelepathyQt4/shared-ptr.h | 7 ++++--- TelepathyQt4/simple-pending-operations.h | 7 ++++--- TelepathyQt4/stream-tube-channel.cpp | 5 +++-- TelepathyQt4/stream-tube-channel.h | 5 +++-- TelepathyQt4/streamed-media-channel.cpp | 8 +++++--- TelepathyQt4/streamed-media-channel.h | 8 +++++--- TelepathyQt4/test-backdoors.cpp | 7 ++++--- TelepathyQt4/test-backdoors.h | 7 ++++--- TelepathyQt4/text-channel.cpp | 8 +++++--- TelepathyQt4/text-channel.h | 8 +++++--- TelepathyQt4/tube-channel.cpp | 5 +++-- TelepathyQt4/tube-channel.h | 5 +++-- TelepathyQt4/types-internal.h | 5 +++-- TelepathyQt4/types.cpp | 7 ++++--- TelepathyQt4/types.h | 7 ++++--- TelepathyQt4/utils.cpp | 7 ++++--- TelepathyQt4/utils.h | 7 ++++--- doxygen-footer.html | 2 +- examples/accounts/account-item.cpp | 5 +++-- examples/accounts/account-item.h | 5 +++-- examples/accounts/accounts-window.cpp | 5 +++-- examples/accounts/accounts-window.h | 5 +++-- examples/file-transfer/receiver-channel.cpp | 7 ++++--- examples/file-transfer/receiver-channel.h | 7 ++++--- examples/file-transfer/receiver.cpp | 7 ++++--- examples/file-transfer/receiver.h | 7 ++++--- examples/file-transfer/sender.cpp | 7 ++++--- examples/file-transfer/sender.h | 7 ++++--- examples/protocols/cm-wrapper.cpp | 7 ++++--- examples/protocols/cm-wrapper.h | 7 ++++--- examples/protocols/protocols.cpp | 7 ++++--- examples/protocols/protocols.h | 7 ++++--- examples/roster/roster-item.cpp | 5 +++-- examples/roster/roster-item.h | 5 +++-- examples/roster/roster-widget.cpp | 5 +++-- examples/roster/roster-widget.h | 5 +++-- examples/roster/roster-window.cpp | 5 +++-- examples/roster/roster-window.h | 5 +++-- tests/dbus/stateful-proxy.cpp | 7 ++++--- 220 files changed, 855 insertions(+), 631 deletions(-) commit d0056394033b38bc45f382eb0e842004cadd7842 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 7 14:38:40 2011 -0300 Update NEWS NEWS | 3 +++ 1 file changed, 3 insertions(+) commit 81f05f622b779f8a3519d32be07da91b4788f1fb Merge: 3704661 f3e2ed8 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 7 14:36:00 2011 -0300 Merge branch 'contact-removal' Reviewed-by: Olli Salli (oggis) commit 3704661537b830d12f91afe776171e773afe60c9 Merge: 42dcec6 9c869f6 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 7 14:35:35 2011 -0300 Merge branch 'stream-tubes' Reviewed-by: Olli Salli (oggis) commit 42dcec6b63f27e78d8debdd3da49416b70b4d882 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 7 14:35:22 2011 -0300 Update NEWS NEWS | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 3e2bd54f279e5ceb162c52882bec2d9ba32d5ecf Merge: a74c42f e8619e2 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 7 14:33:04 2011 -0300 Merge branch 'trivia' Reviewed-by: Olli Salli (oggis) commit 9c869f624db354785bb024aa9b7963f436b0721d Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 7 14:22:45 2011 -0300 ContactCapabilities: Also check for channel type and target handle type in streamTubeServices(). TelepathyQt4/contact-capabilities.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit c344370413bea4441d1d09bfb67d5fdb69c6e819 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 7 14:06:25 2011 -0300 StreamTubeChannel: Improve docs. TelepathyQt4/stream-tube-channel.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit c2c6e684764b237ac6b742d458762532042f1fe2 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 7 14:06:11 2011 -0300 OutgoingStreamTubeChannel: Improve docs. TelepathyQt4/outgoing-stream-tube-channel.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit a4ecf39971f2aa4be13fab602d90936460a15ec1 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 7 14:05:57 2011 -0300 IncomingStreamTubeChannel: Improve docs. TelepathyQt4/incoming-stream-tube-channel.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit 630dd5b418674172713fad2325c2831c72979eeb Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 7 14:05:30 2011 -0300 Account: Add methods to request and handle stream tubes and also improve docs. TelepathyQt4/account.cpp | 138 ++++++++++++++++++++++++++++++++++------------ TelepathyQt4/account.h | 9 +++ 2 files changed, 111 insertions(+), 36 deletions(-) commit 281e9991eea122785d3b9d6bf54a1bfb1b5493fc Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 7 13:15:15 2011 -0300 CapabilitiesBase: Remove commented code. TelepathyQt4/capabilities-base.h | 3 --- 1 file changed, 3 deletions(-) commit 32e2dd0ae08655bd25d9cc073638c98ecc97610f Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 7 13:14:59 2011 -0300 ConnectionCapabilities: Add method to check whether StreamTube channels is supported. TelepathyQt4/connection-capabilities.cpp | 16 ++++++++++++++++ TelepathyQt4/connection-capabilities.h | 2 ++ 2 files changed, 18 insertions(+) commit eb458ddd3e15c1c593e9186da12c74a100f1f6b6 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 7 13:13:55 2011 -0300 ContactCapabilities: Add methods to check whether StreamTube channels is supported and what services are supported. TelepathyQt4/contact-capabilities.cpp | 39 +++++++++++++++++++++++++++++++++ TelepathyQt4/contact-capabilities.h | 5 ++++- 2 files changed, 43 insertions(+), 1 deletion(-) commit 4bc6f90669c603221f28789159d84988cccf7aad Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 7 13:13:15 2011 -0300 RequestableChannelClassSpec: Add method to return a RCC spec for StreamTube channels. TelepathyQt4/requestable-channel-class-spec.cpp | 23 +++++++++++++++++++++++ TelepathyQt4/requestable-channel-class-spec.h | 2 ++ 2 files changed, 25 insertions(+) commit e8619e25a02b5a0500ccf9c12faf19bbb98cba02 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 7 14:06:56 2011 -0300 Account: Improve docs. TelepathyQt4/account.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 84eb2f568b7ce386365c94e001e9ff75b3e60d1a Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 7 12:57:53 2011 -0300 ConnectionCapabilities: Make contact search related methods names plural as used in the rest of the API. Also mark the new contactSearchs method as const, not the case of the singular version. TelepathyQt4/connection-capabilities.cpp | 30 +++++++++++++++++++++++++++--- TelepathyQt4/connection-capabilities.h | 10 +++++++--- 2 files changed, 34 insertions(+), 6 deletions(-) commit f3e2ed817f9fcda279b4b434d3c68a1efc7abbab Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 7 14:09:03 2011 -0300 ContactManager::Roster: Only change contact publication/subscription to No after emitting that the contact was removed. To avoid useless updates in app code when checking for contact publication/subscription only change contact publication/subscription to No after emitting that the contact was removed. TelepathyQt4/contact-manager-roster.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit a74c42f0b5d4355be90b131644a8b8a28748a019 Author: Olli Salli Date: Mon Mar 7 17:16:39 2011 +0200 Update NEWS NEWS | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) commit d00bc5de956b8b1f0c526df7d152a4aa743d241d Merge: 429f9e3 87767d2 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 7 11:37:05 2011 -0300 Merge remote-tracking branch 'drf/high-level-tubes-0.5' Reviewed-by: Andre Moreira Magalhaes (andrunko) Reviewed-by: Olli Salli (oggis) commit 429f9e3c9c8512404343e452ca8218e002dac447 Merge: 2d9c8d7 6bf145a Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 7 11:36:49 2011 -0300 Merge branch 'request-and-handle' Reviewed-by: Olli Salli (oggis) commit 2d9c8d75d87aa43f6e2a2c7fb468a9d22b4b49b1 Merge: ee7d723 e1900bd Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 7 11:36:04 2011 -0300 Merge branch 'trivia' Reviewed-by: Olli Salli (oggis) commit 6bf145a3720bbee9f87c717e65931c8f1f89e6bf Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 7 11:29:44 2011 -0300 Link against QtXml. TelepathyQt4/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 37fb58581c986d3bb22a96bd39760bc39065ebc3 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 7 11:28:52 2011 -0300 PendingChannel: Finish with SERVICE_CONFUSED if CreateChannel was used and the CR finished successfully without the handler getting a channel. TelepathyQt4/pending-channel.cpp | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) commit 599317c032756d92e65e90fc0e23da961bb395a8 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 7 11:27:21 2011 -0300 account-channel-dispatcher test: Use ensureAndHandleChannel to test NOT_YOURS failure case. tests/dbus/account-channel-dispatcher.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit bc7141b393658ca0d10420612a226d66385b236a Author: Andre Moreira Magalhaes (andrunko) Date: Sun Mar 6 15:15:38 2011 -0300 account-channel-dispatcher test: Test Account request and handle support. tests/dbus/account-channel-dispatcher.cpp | 301 +++++++++++++++++++++++++++-- 1 file changed, 280 insertions(+), 21 deletions(-) commit 10fc7b89e1ad077a7ca59d883c0f3110811607a1 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Mar 6 15:15:13 2011 -0300 HandledChannelNotifier: Properly connect to RequestTemporaryHandler::channelReceived signal. TelepathyQt4/handled-channel-notifier.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit beaa0969489160cae1acffb875410f6c730324f8 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Mar 6 14:07:32 2011 -0300 ClientRegistrar: Fix debug message when calling AbstractClientHandler::handleChannels. TelepathyQt4/client-registrar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 7e96861144c6a0725bbd8f7687cb2017fa0c231d Author: Andre Moreira Magalhaes (andrunko) Date: Sun Mar 6 14:06:50 2011 -0300 PendingChannel: Properly connect to RequestTemporaryHandler::channelReceived signal. TelepathyQt4/pending-channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e18e1d06488ff6c26117b91536db7de22eb8513a Author: Andre Moreira Magalhaes (andrunko) Date: Sun Mar 6 12:02:05 2011 -0300 RequestTemporaryHandler/HandledChannelNotifier: Move request hints to last param in channelReceived/handledAgain signals. TelepathyQt4/handled-channel-notifier.cpp | 10 +++++----- TelepathyQt4/handled-channel-notifier.h | 4 ++-- TelepathyQt4/pending-channel.cpp | 2 +- .../request-temporary-handler-internal.cpp | 8 ++++---- TelepathyQt4/request-temporary-handler-internal.h | 6 +++--- 5 files changed, 15 insertions(+), 15 deletions(-) commit b3a59f5ee300c5a9b326829c51f1d05015f2dad6 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Mar 6 11:53:58 2011 -0300 PendingChannel: Properly finish with error NOT_YOURS if the channel request has finished and the handler was not called. TelepathyQt4/pending-channel-request.cpp | 2 +- TelepathyQt4/pending-channel.cpp | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) commit 87767d25846d1f7606b9825b4132d725ae15ee12 Author: Dario Freddi Date: Sun Mar 6 17:17:53 2011 +0100 high-level-tubes: Remove the current example, as it uses legacy and misleading APIs. examples/CMakeLists.txt | 1 - examples/stream-tubes/CMakeLists.txt | 29 --- examples/stream-tubes/tube-initiator.cpp | 343 ------------------------------ examples/stream-tubes/tube-initiator.h | 80 ------- examples/stream-tubes/tube-receiver.cpp | 242 --------------------- examples/stream-tubes/tube-receiver.h | 68 ------ 6 files changed, 763 deletions(-) commit 4b67e2e843beee75df5aec63b19a1243dfca6ad5 Author: Dario Freddi Date: Sun Mar 6 17:17:06 2011 +0100 high-level-tubes: Use the correct DBus property name in ChannelClassSpec TelepathyQt4/channel-class-spec.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 6bdc88fcee661c3ad79f05c0d4b5492bb363fb13 Author: Dario Freddi Date: Sun Mar 6 15:59:18 2011 +0100 high-level-tubes: Do not export private slots TelepathyQt4/incoming-stream-tube-channel.h | 4 ++-- TelepathyQt4/outgoing-stream-tube-channel.h | 6 +++--- TelepathyQt4/pending-stream-tube-connection.h | 4 ++-- TelepathyQt4/stream-tube-channel.h | 4 ++-- TelepathyQt4/tube-channel.h | 4 ++-- 5 files changed, 11 insertions(+), 11 deletions(-) commit e133213aa34293258ee37371f67a202adeba9ae8 Author: Dario Freddi Date: Sun Mar 6 15:51:50 2011 +0100 high-level-tubes: Instead of offering a QIODevice when accepting tubes, provide just the addresses. Some applications need to use the bare address, because they use a protocol library which doesn't communicate over QIODevices, but rather take the address as a parameter and use internal implementation means to actually establish a socket connection accordingly. This is because libraries usually aim to be as generic as possible, while QIODevices require e.g. running the Qt event loop. TelepathyQt4/incoming-stream-tube-channel.cpp | 48 +++++++++++---- TelepathyQt4/incoming-stream-tube-channel.h | 3 +- TelepathyQt4/pending-stream-tube-connection.cpp | 72 ++--------------------- TelepathyQt4/pending-stream-tube-connection.h | 6 -- examples/stream-tubes/tube-receiver.cpp | 31 +++++++--- examples/stream-tubes/tube-receiver.h | 5 +- 6 files changed, 69 insertions(+), 96 deletions(-) commit a07c88170054d47902b9e84483e5bbfc6e398e41 Author: Dario Freddi Date: Sun Mar 6 15:24:27 2011 +0100 high-level-tubes: Const'ify pointer arguments when offering a tube TelepathyQt4/outgoing-stream-tube-channel.cpp | 4 ++-- TelepathyQt4/outgoing-stream-tube-channel.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit 3632ffffe35588cfa883e4beff2aaf91b113f912 Author: Dario Freddi Date: Sun Mar 6 15:17:59 2011 +0100 high-level-tubes: Rename Account's parameter for specifying the service name to "service" instead of "serviceName" TelepathyQt4/account.cpp | 8 ++++---- TelepathyQt4/account.h | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) commit 21e631777695373eedd10de309a5741ec4edfc96 Author: Dario Freddi Date: Sun Mar 6 15:05:16 2011 +0100 high-level-tubes: Add a service field to channel-class-spec for specifying the service the newly created stream tube will handle. This is because most often ChannelClassSpec will be used when specifying Handler filters, and trying to be a Handler for all possible services on stream tubes makes no sense (as the Handler does the actual service-specific communication over the tube), so it should be convenient to specify the service. TelepathyQt4/channel-class-spec.cpp | 14 ++++++++++++-- TelepathyQt4/channel-class-spec.h | 6 ++++-- TelepathyQt4/channel-factory.cpp | 16 ++++++++-------- 3 files changed, 24 insertions(+), 12 deletions(-) commit d22e9ea5c035ed5eca15038c4fc147e666e19c37 Author: Dario Freddi Date: Sun Mar 6 15:05:03 2011 +0100 high-level-tubes: Remove obsolete comments in code TelepathyQt4/channel-factory.h | 2 -- 1 file changed, 2 deletions(-) commit e1900bdfcb4e7a54dbfa31b9e0795fd3baae4556 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 4 14:49:21 2011 -0300 ClientRegistrar: Properly set unique client name when registering a client with unique=true. TelepathyQt4/client-registrar.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 302601a55f7ac6c663429df25d0e986b5bbf862a Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 1 19:37:36 2011 -0300 Account: Improve docs. TelepathyQt4/account.cpp | 82 ++++++++++++++++++++++++---------------------- 1 file changed, 43 insertions(+), 39 deletions(-) commit 05499a1c5d116b0834ba4a950a58d500ec7f3667 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 4 14:38:42 2011 -0300 PendingChannel: Properly remove "." from D-Bus connection unique name when building client name. TelepathyQt4/pending-channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 4ca04e2dbe869825769bcd1976e5726ec36b4c6e Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 4 14:36:59 2011 -0300 Account: Add helper method for request and handle. TelepathyQt4/account.cpp | 491 ++++++++++++++++++++++++++++++++++++++++++++++ TelepathyQt4/account.h | 77 ++++++++ 2 files changed, 568 insertions(+) commit 0fd682ae8e10848c8bba49b09942e2a55b73074d Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 4 13:44:55 2011 -0300 Account: Refactor ensure/create helper methods so that the requests can be re-used by request and handle helper methods. TelepathyQt4/account.cpp | 569 ++++++++++++++++++++++++---------------------- 1 file changed, 300 insertions(+), 269 deletions(-) commit a4d6f51d0393e4e3fc32b24e1e12e5a3bb7bea38 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 4 13:44:28 2011 -0300 FileTransferChannelCreationProperties: Make accessors public. .../file-transfer-channel-creation-properties.h | 24 +++++++++----------- 1 file changed, 11 insertions(+), 13 deletions(-) commit 53ada621e3ea804e267d23e485f13bb99d3f5ce3 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 4 12:34:31 2011 -0300 HandledChannelNotifier: Make RequestTemporaryHandler stop queueing channelReceived signals once the user has connected to handledAgain. TelepathyQt4/handled-channel-notifier.cpp | 7 +++++++ TelepathyQt4/handled-channel-notifier.h | 3 +++ 2 files changed, 10 insertions(+) commit 98e5a748e89c8114dba448102f673571a8e9f0be Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 4 12:33:56 2011 -0300 RequestTemporaryHandler: Add option to queue channelReceived signals. .../request-temporary-handler-internal.cpp | 33 +++++++++++++++++--- TelepathyQt4/request-temporary-handler-internal.h | 6 ++++ 2 files changed, 35 insertions(+), 4 deletions(-) commit 4c268521d88b23ea5c8418ebdc5c1187b78bc98d Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 4 12:09:42 2011 -0300 Account: Improve create/ensureAndHandleChannel documentation. TelepathyQt4/account.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) commit c127990e69558e35c9705a290dfbb4bc5e33908d Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 4 11:59:54 2011 -0300 Account: Do not pass hints to create/ensureAndHandleChannel methods. TelepathyQt4/account.cpp | 14 ++++---------- TelepathyQt4/account.h | 6 ++---- TelepathyQt4/pending-channel.cpp | 5 ++--- TelepathyQt4/pending-channel.h | 3 +-- 4 files changed, 9 insertions(+), 19 deletions(-) commit 62902b5736735a086f450a0dfa51918edc5777fe Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 4 11:53:56 2011 -0300 PendingChannel: Warn if pending channel request fails after we received the channel. TelepathyQt4/pending-channel.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit e215928234532229e3a3fcae9349d2bb1e2c84f5 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 4 11:51:08 2011 -0300 PendingChannel: Do not assert on data received from D-Bus. TelepathyQt4/pending-channel.cpp | 1 - 1 file changed, 1 deletion(-) commit bf886c95b417cf6c0add2cbb1fd638122c77e8e4 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 4 11:49:34 2011 -0300 PendingChannel: Always return true on yours accessor if the request was created through Account. TelepathyQt4/pending-channel.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 7e67caca57deee1ef89c015a62179a7773540b69 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 4 11:46:13 2011 -0300 PendingChannel: Return NULL on connection accessor if the request was created through Account. TelepathyQt4/pending-channel.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 608a7cee3de10dde35000771b3cd94c2bc1b0915 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 4 11:37:54 2011 -0300 PendingChannel: Make sure temporary handler name is unique. TelepathyQt4/pending-channel.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 3f2547bfc3a8e2d87e558f81dac03557e11524b2 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 4 11:30:51 2011 -0300 PendingChannel: Warn if account requested to be constructed in FakeAccountFactory is different from the one passed on its constructor. TelepathyQt4/pending-channel.cpp | 3 +++ 1 file changed, 3 insertions(+) commit 859dc95461701c8f8e7c1c01ec2ebe99444a5f66 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 4 11:23:19 2011 -0300 PendingChannel: Remove useless ChannelClassSpecList include. TelepathyQt4/pending-channel.cpp | 1 - 1 file changed, 1 deletion(-) commit 32187988cd6e02d137947774dc19ec77b3b75040 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 4 11:21:28 2011 -0300 PendingChannel: Only construct HandledChannelNotifier on accessor. TelepathyQt4/pending-channel.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 95ef237ca4e479b25e666140e084a30cc3fa6676 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 4 11:14:52 2011 -0300 HandledChannelNotifier: Carry hints and user action time params in handledAgain. TelepathyQt4/handled-channel-notifier.cpp | 8 +++++++- TelepathyQt4/handled-channel-notifier.h | 5 ++++- 2 files changed, 11 insertions(+), 2 deletions(-) commit 71a3321a145e4d738ed1e2dcd5e3d8ead27e6dd5 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 4 11:12:14 2011 -0300 HandledChannelNotifier: Do not export private slots. TelepathyQt4/handled-channel-notifier.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit fee20414838223222a8d6b4a00d16ab121c6a831 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 4 11:09:27 2011 -0300 HandledChannelNotifier: Remove finished signal in favour of Channel::invalidated/QObject::destroyed. TelepathyQt4/handled-channel-notifier.cpp | 1 - TelepathyQt4/handled-channel-notifier.h | 1 - 2 files changed, 2 deletions(-) commit 9b208fc466308d3faa9a217e10f9e6a64d786ae2 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 4 11:07:02 2011 -0300 RequestTemporaryHandler: Do not assert on service errors. .../request-temporary-handler-internal.cpp | 33 ++++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) commit cbe895512c1e41bc7b7978e9eefa0fc670539a77 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 4 10:43:17 2011 -0300 RequestTemporaryHandler: Carry hints and user action time params in channelReceived. TelepathyQt4/handled-channel-notifier.cpp | 5 +++-- TelepathyQt4/pending-channel.cpp | 2 +- .../request-temporary-handler-internal.cpp | 3 ++- TelepathyQt4/request-temporary-handler-internal.h | 3 ++- 4 files changed, 8 insertions(+), 5 deletions(-) commit ac13b333478d83844d0bac6499dca5797b5b822b Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 4 10:29:03 2011 -0300 RequestTemporaryHandler: Return false in bypassApproval as we don't want others' channels if the CD is confused. TelepathyQt4/request-temporary-handler-internal.h | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) commit 3e31cd9307e2b64f4129ddefd3a0fc23251fad3f Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 4 10:23:34 2011 -0300 Renamed SimpleHandler to RequestTemporaryHandler. Let's use a more specific name for the handler used by request and handle as SimpleHandler is a quite generic name that could be used later by some exported class in the library. TelepathyQt4/CMakeLists.txt | 6 +- TelepathyQt4/handled-channel-notifier.cpp | 8 +-- TelepathyQt4/handled-channel-notifier.h | 4 +- TelepathyQt4/pending-channel.cpp | 6 +- .../request-temporary-handler-internal.cpp | 76 ++++++++++++++++++++ TelepathyQt4/request-temporary-handler-internal.h | 67 +++++++++++++++++ TelepathyQt4/simple-handler-internal.cpp | 76 -------------------- TelepathyQt4/simple-handler-internal.h | 67 ----------------- 8 files changed, 155 insertions(+), 155 deletions(-) commit d976646ab8f79cd670a9c98ab1260152f0080e85 Author: Dario Freddi Date: Thu Mar 3 19:02:16 2011 +0100 high-level-tubes: Make Private::device a QWeakPointer, to prevent memleaks on error. TelepathyQt4/pending-stream-tube-connection.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) commit 7d4db45fadedf7f782b0b61dc8e3c5f334c82a96 Author: Dario Freddi Date: Thu Mar 3 19:00:13 2011 +0100 high-level-tubes: Use errorString() to provide a detailed description of the error TelepathyQt4/pending-stream-tube-connection.cpp | 25 ++++++++--------------- TelepathyQt4/pending-stream-tube-connection.h | 3 +-- 2 files changed, 10 insertions(+), 18 deletions(-) commit 6b51971df5eae77f32a100c3b703bd71b876b0a8 Author: Dario Freddi Date: Thu Mar 3 18:47:52 2011 +0100 high-level-tubes: Don't make destructors virtual if unneeded TelepathyQt4/pending-stream-tube-connection.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6a888f6ab2a6e3b8eb428f2abe4e46f09169ec7c Author: Dario Freddi Date: Thu Mar 3 18:45:06 2011 +0100 high-level-tubes: Code style: move friend declaration before d-pointer declaration. TelepathyQt4/incoming-stream-tube-channel.h | 4 +--- TelepathyQt4/outgoing-stream-tube-channel.h | 3 +-- TelepathyQt4/pending-stream-tube-connection.h | 3 +-- TelepathyQt4/stream-tube-channel.h | 1 - TelepathyQt4/tube-channel.h | 1 - 5 files changed, 3 insertions(+), 9 deletions(-) commit 14f717f331b715e38c6f67a57db778a4059ec486 Author: Dario Freddi Date: Thu Mar 3 18:40:34 2011 +0100 high-level-tubes: Don't use const on d-pointers TelepathyQt4/incoming-stream-tube-channel.h | 2 +- TelepathyQt4/outgoing-stream-tube-channel.h | 2 +- TelepathyQt4/stream-tube-channel.h | 2 +- TelepathyQt4/tube-channel.h | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) commit d1077641a94c5508b2ab5e699f7759b6a8038419 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 1 19:38:36 2011 -0300 Account: Added methods to create/ensure and handle channels directly without the need to implement a handler. TelepathyQt4/account.cpp | 59 ++++++++++++++++++++++++++++++++++++++++++++++ TelepathyQt4/account.h | 10 ++++++++ 2 files changed, 69 insertions(+) commit 23eee627f95a3ae58bb8f6a0571e9ae34825a406 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 1 20:43:57 2011 -0300 PendingChannel: Added support to request and handle channels using account. TelepathyQt4/pending-channel.cpp | 184 ++++++++++++++++++++++++++++++++++++-- TelepathyQt4/pending-channel.h | 21 ++++- 2 files changed, 196 insertions(+), 9 deletions(-) commit bfe9f01d659643b323df7cc39e770f9f78e52f74 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 1 20:39:54 2011 -0300 HandledChannelNotifier: Added class used to track channels when using request and handle support. TelepathyQt4/CMakeLists.txt | 4 ++ TelepathyQt4/HandledChannelNotifier | 13 +++++ TelepathyQt4/handled-channel-notifier.cpp | 74 +++++++++++++++++++++++++++++ TelepathyQt4/handled-channel-notifier.h | 69 +++++++++++++++++++++++++++ 4 files changed, 160 insertions(+) commit fe2ddcb0e4fde1dfe245714d8b43d3dffbda0079 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 1 20:38:10 2011 -0300 SimpleHandler: Added internal class to implement a simple handler which will be used by request and handle support. TelepathyQt4/CMakeLists.txt | 3 ++ TelepathyQt4/simple-handler-internal.cpp | 76 ++++++++++++++++++++++++++++++ TelepathyQt4/simple-handler-internal.h | 67 ++++++++++++++++++++++++++ 3 files changed, 146 insertions(+) commit 37e2c5188ae3d37c76d12375453468c5eb42b9fd Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 1 19:39:52 2011 -0300 ChannelRequest: Remove blank line. TelepathyQt4/channel-request.h | 1 - 1 file changed, 1 deletion(-) commit d3234c26b32ec70cab61180743d1740804b8a75d Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 1 19:39:29 2011 -0300 Account: Do not print Parameters as it can contain the user password. TelepathyQt4/account.cpp | 1 - 1 file changed, 1 deletion(-) commit 82fc0eec7eadd9627f72874a4c328a9473e45a1d Author: Dario Freddi Date: Tue Mar 1 18:18:06 2011 +0100 high-level-tubes: Const'ify where needed TelepathyQt4/incoming-stream-tube-channel.cpp | 2 +- TelepathyQt4/incoming-stream-tube-channel.h | 2 +- TelepathyQt4/pending-stream-tube-connection.cpp | 2 +- TelepathyQt4/pending-stream-tube-connection.h | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) commit 3ee8d06c88cc404e9b09bd34556a8ad031852da6 Author: Dario Freddi Date: Tue Mar 1 18:14:23 2011 +0100 high-level-tubes: Extend and improve documentation TelepathyQt4/incoming-stream-tube-channel.cpp | 13 +++++--- TelepathyQt4/outgoing-stream-tube-channel.cpp | 10 +++--- TelepathyQt4/pending-stream-tube-connection.cpp | 39 +++++++++++++++++++---- TelepathyQt4/stream-tube-channel.cpp | 20 +++++++++--- TelepathyQt4/tube-channel.cpp | 5 ++- 5 files changed, 67 insertions(+), 20 deletions(-) commit b5aa69fc278f0098cace3d729658cdeca00ec3be Author: Dario Freddi Date: Tue Mar 1 17:53:45 2011 +0100 high-level-tubes: Move signal documentation to the bottom of the classes TelepathyQt4/incoming-stream-tube-channel.cpp | 18 +++++++++--------- TelepathyQt4/stream-tube-channel.cpp | 24 ++++++++++++------------ TelepathyQt4/tube-channel.cpp | 16 ++++++++-------- 3 files changed, 29 insertions(+), 29 deletions(-) commit 03d08a211fd878670d9892bdf47a187a9679b6b9 Author: Dario Freddi Date: Tue Mar 1 17:47:20 2011 +0100 high-level-tubes: Change templates to not have a whitespace after < and before > wherever possible TelepathyQt4/incoming-stream-tube-channel.cpp | 8 ++--- .../outgoing-stream-tube-channel-internal.h | 10 +++--- TelepathyQt4/outgoing-stream-tube-channel.cpp | 32 ++++++++++---------- TelepathyQt4/outgoing-stream-tube-channel.h | 4 +-- TelepathyQt4/pending-stream-tube-connection.cpp | 4 +-- TelepathyQt4/pending-stream-tube-connection.h | 2 +- TelepathyQt4/stream-tube-channel.cpp | 8 ++--- TelepathyQt4/stream-tube-channel.h | 2 +- 8 files changed, 35 insertions(+), 35 deletions(-) commit b248581f0957cf0401fdb05c702883ad5790bd3f Author: Dario Freddi Date: Tue Mar 1 17:05:13 2011 +0100 high-level-tubes: Name variables also in slot declarations TelepathyQt4/incoming-stream-tube-channel.cpp | 2 +- TelepathyQt4/incoming-stream-tube-channel.h | 4 ++-- .../outgoing-stream-tube-channel-internal.h | 4 ++-- TelepathyQt4/outgoing-stream-tube-channel.h | 6 +++--- TelepathyQt4/pending-stream-tube-connection.h | 8 ++++---- TelepathyQt4/stream-tube-channel.h | 4 ++-- TelepathyQt4/tube-channel.h | 4 ++-- 7 files changed, 16 insertions(+), 16 deletions(-) commit 211fa11b5a860737a15fa530f44ed35b1ca939ba Author: Dario Freddi Date: Tue Mar 1 16:56:49 2011 +0100 high-level-tubes: Remove unneeded newline TelepathyQt4/stream-tube-channel.h | 1 - 1 file changed, 1 deletion(-) commit 4f5e7cdd93417be5626973488dc8246841483c49 Author: Dario Freddi Date: Tue Mar 1 16:54:46 2011 +0100 high-level-tubes: Add a newline after forward declarations TelepathyQt4/incoming-stream-tube-channel.h | 1 + .../outgoing-stream-tube-channel-internal.h | 1 + TelepathyQt4/outgoing-stream-tube-channel.h | 1 + TelepathyQt4/stream-tube-channel.h | 1 + 4 files changed, 4 insertions(+) commit 17b41050a1d7d549149f26913600201b46d50036 Author: Dario Freddi Date: Tue Mar 1 16:50:45 2011 +0100 high-level-tubes: Code style: place the comma on the same line when initializing variables in constructors TelepathyQt4/incoming-stream-tube-channel.cpp | 8 ++++---- TelepathyQt4/outgoing-stream-tube-channel.cpp | 22 +++++++++++----------- TelepathyQt4/pending-stream-tube-connection.cpp | 12 ++++++------ TelepathyQt4/stream-tube-channel.cpp | 10 +++++----- 4 files changed, 26 insertions(+), 26 deletions(-) commit 66051544046a5f17387103dfda7451f3d0cc43c3 Author: Dario Freddi Date: Tue Mar 1 16:45:52 2011 +0100 high-level-tubes: Remove unneeded method declarations TelepathyQt4/incoming-stream-tube-channel.cpp | 4 ---- 1 file changed, 4 deletions(-) commit 529493ab59d4f7929d28b4ee6eb9f08ec57ac1ff Author: Dario Freddi Date: Wed Dec 1 20:31:45 2010 +0100 high-level-tubes: Fix typos in documentation TelepathyQt4/account.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 1dc339af5693b4a816aa6c81e1dc016608d3bca8 Author: Dario Freddi Date: Wed Dec 1 20:12:31 2010 +0100 high-level-tubes: Replace SharedPtr with specific subclasses to avoid casting .../outgoing-stream-tube-channel-internal.h | 2 +- TelepathyQt4/outgoing-stream-tube-channel.cpp | 4 ++-- TelepathyQt4/pending-stream-tube-connection.cpp | 6 +++--- TelepathyQt4/pending-stream-tube-connection.h | 5 +++-- 4 files changed, 9 insertions(+), 8 deletions(-) commit 97ce2d15663194a63cd2fe6048f47ebd1d73beb2 Author: Dario Freddi Date: Wed Dec 1 19:42:43 2010 +0100 high-level-tubes: code style: Fix indentation TelepathyQt4/incoming-stream-tube-channel.cpp | 54 +++++++++--------- TelepathyQt4/incoming-stream-tube-channel.h | 2 +- TelepathyQt4/outgoing-stream-tube-channel.cpp | 40 ++++++------- TelepathyQt4/outgoing-stream-tube-channel.h | 4 +- TelepathyQt4/pending-stream-tube-connection.cpp | 6 +- TelepathyQt4/pending-stream-tube-connection.h | 4 +- TelepathyQt4/stream-tube-channel.cpp | 68 +++++++++++------------ TelepathyQt4/stream-tube-channel.h | 3 +- TelepathyQt4/tube-channel.cpp | 31 ++++++----- TelepathyQt4/tube-channel.h | 4 +- 10 files changed, 110 insertions(+), 106 deletions(-) commit 0cf0d69e15d476e766eadffa16021a51c1822048 Author: Dario Freddi Date: Thu Sep 23 16:17:48 2010 +0200 high-level-tubes: code style: Proper positioning of & and * TelepathyQt4/account.cpp | 20 +++++++------- TelepathyQt4/incoming-stream-tube-channel.cpp | 28 ++++++++++---------- TelepathyQt4/outgoing-stream-tube-channel.cpp | 32 +++++++++++------------ TelepathyQt4/pending-stream-tube-connection.cpp | 8 +++--- TelepathyQt4/stream-tube-channel.cpp | 16 ++++++------ TelepathyQt4/tube-channel.cpp | 8 +++--- TelepathyQt4/tube-channel.h | 1 - 7 files changed, 56 insertions(+), 57 deletions(-) commit 8eee5b14bfae38f8d942f6399bc0d6eea22f578b Author: Dario Freddi Date: Thu Sep 23 16:00:04 2010 +0200 high-level-tubes: code style: Have always namespace Tp\n{ TelepathyQt4/incoming-stream-tube-channel.h | 3 ++- .../outgoing-stream-tube-channel-internal.h | 3 ++- TelepathyQt4/outgoing-stream-tube-channel.h | 3 ++- TelepathyQt4/stream-tube-channel.h | 3 ++- TelepathyQt4/tube-channel.h | 4 ++-- 5 files changed, 10 insertions(+), 6 deletions(-) commit abb3520e655629da269217cd64ef7f8bce107182 Author: Dario Freddi Date: Thu Sep 23 15:57:54 2010 +0200 high-level-tubes: code style: Have max 100 char per line wherever possible TelepathyQt4/incoming-stream-tube-channel.cpp | 51 ++++--- TelepathyQt4/outgoing-stream-tube-channel.cpp | 97 ++++++++----- TelepathyQt4/pending-stream-tube-connection.cpp | 9 +- TelepathyQt4/pending-stream-tube-connection.h | 6 +- TelepathyQt4/stream-tube-channel.cpp | 172 +++++++++++++---------- TelepathyQt4/tube-channel.cpp | 3 +- 6 files changed, 196 insertions(+), 142 deletions(-) commit 01e1d7ea77de3bd668e3c6d6319d492c44442c75 Author: Dario Freddi Date: Thu Sep 23 15:52:21 2010 +0200 high-level-tubes: code style: put moc include in the right position TelepathyQt4/stream-tube-channel.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit f84a25fec9183fc36fae74ab8a8d3bf6850fe588 Author: Dario Freddi Date: Thu Sep 23 15:51:23 2010 +0200 high-level-tubes: code style: Remove unneeded newlines TelepathyQt4/incoming-stream-tube-channel.cpp | 6 ------ TelepathyQt4/outgoing-stream-tube-channel.cpp | 7 ------- TelepathyQt4/pending-stream-tube-connection.cpp | 2 -- TelepathyQt4/stream-tube-channel.cpp | 11 ----------- 4 files changed, 26 deletions(-) commit 3151ac6e65fae37156c7d257188104e79652cfdb Author: Dario Freddi Date: Mon Sep 20 16:21:26 2010 +0200 high-level-tubes: Remove Q_PRIVATE_SLOT TelepathyQt4/incoming-stream-tube-channel.cpp | 36 ++-- TelepathyQt4/incoming-stream-tube-channel.h | 8 +- .../outgoing-stream-tube-channel-internal.h | 16 +- TelepathyQt4/outgoing-stream-tube-channel.cpp | 171 +++++++++--------- TelepathyQt4/outgoing-stream-tube-channel.h | 12 +- TelepathyQt4/pending-stream-tube-connection.cpp | 187 ++++++++++---------- TelepathyQt4/pending-stream-tube-connection.h | 15 +- TelepathyQt4/stream-tube-channel.cpp | 56 +++--- TelepathyQt4/stream-tube-channel.h | 14 +- TelepathyQt4/tube-channel.cpp | 59 +++--- TelepathyQt4/tube-channel.h | 12 +- 11 files changed, 279 insertions(+), 307 deletions(-) commit 6b8588347fb7746e55d0cea095c247065e765b65 Author: Dario Freddi Date: Mon Sep 20 15:20:45 2010 +0200 high-level-tubes: Remove now useless -internal files .../incoming-stream-tube-channel-internal.h | 48 ------------- TelepathyQt4/incoming-stream-tube-channel.cpp | 21 +++++- TelepathyQt4/stream-tube-channel-internal.h | 71 -------------------- TelepathyQt4/stream-tube-channel.cpp | 46 ++++++++++++- TelepathyQt4/tube-channel-internal.h | 56 --------------- TelepathyQt4/tube-channel.cpp | 31 ++++++++- 6 files changed, 89 insertions(+), 184 deletions(-) commit b6e56ca5a9652651eaa6aa7b84d126b7ad720164 Author: Dario Freddi Date: Mon Sep 20 15:14:07 2010 +0200 high-level-tubes: Remove useless includes and friendship .../incoming-stream-tube-channel-internal.h | 1 - .../outgoing-stream-tube-channel-internal.h | 2 -- TelepathyQt4/stream-tube-channel-internal.h | 4 ---- 3 files changed, 7 deletions(-) commit 32a441b5a574a8d441f3ecef3c5b52d4182d35b1 Author: Dario Freddi Date: Mon Sep 20 15:13:34 2010 +0200 high-level-tubes: Don't put virtual methods in private classes .../incoming-stream-tube-channel-internal.h | 2 +- .../outgoing-stream-tube-channel-internal.h | 6 +++--- TelepathyQt4/stream-tube-channel-internal.h | 4 ++-- TelepathyQt4/tube-channel-internal.h | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) commit e1ce160094f0c2ac29708a0b3dd44bd6e5b3e4a3 Author: Dario Freddi Date: Mon Sep 20 14:56:23 2010 +0200 high-level-tubes: Move PendingStreamTubeConnection to its own header TelepathyQt4/CMakeLists.txt | 3 + TelepathyQt4/PendingStreamTubeConnection | 2 +- .../incoming-stream-tube-channel-internal.h | 24 -- TelepathyQt4/incoming-stream-tube-channel.cpp | 223 +--------------- TelepathyQt4/incoming-stream-tube-channel.h | 41 +-- TelepathyQt4/pending-stream-tube-connection.cpp | 281 ++++++++++++++++++++ TelepathyQt4/pending-stream-tube-connection.h | 77 ++++++ examples/stream-tubes/tube-receiver.cpp | 1 + 8 files changed, 366 insertions(+), 286 deletions(-) commit 63bc5123daf636bae2a7de002fcb32e337547325 Author: Dario Freddi Date: Sun Sep 19 00:05:14 2010 +0200 high-level-tubes: Fix the stream tubes example examples/stream-tubes/tube-receiver.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) commit 66203bb78312e73581d1a827d1f6bfbb14e793cd Author: Dario Freddi Date: Sat Sep 18 19:47:42 2010 +0200 high-level-tubes: Removed private classes inheritance to remove Q_Q and Q_D TelepathyQt4/CMakeLists.txt | 1 - .../incoming-stream-tube-channel-internal.h | 15 +- TelepathyQt4/incoming-stream-tube-channel.cpp | 87 +++++---- TelepathyQt4/incoming-stream-tube-channel.h | 21 ++- .../outgoing-stream-tube-channel-internal.h | 63 +++++-- TelepathyQt4/outgoing-stream-tube-channel.cpp | 142 ++++++++++----- TelepathyQt4/outgoing-stream-tube-channel.h | 15 +- TelepathyQt4/stream-tube-channel-internal.h | 54 ++---- TelepathyQt4/stream-tube-channel.cpp | 190 ++++++-------------- TelepathyQt4/stream-tube-channel.h | 23 ++- TelepathyQt4/tube-channel-internal.h | 16 +- TelepathyQt4/tube-channel.cpp | 59 +++--- TelepathyQt4/tube-channel.h | 18 +- 13 files changed, 341 insertions(+), 363 deletions(-) commit 1e8c8476261b58fb53903894e01dff7a55a866f0 Author: Dario Freddi Date: Sun Aug 15 20:05:13 2010 +0200 high-level-tubes: Vastly improve documentation TelepathyQt4/incoming-stream-tube-channel.cpp | 97 ++++++++++- TelepathyQt4/outgoing-stream-tube-channel.cpp | 156 ++++++++++++----- TelepathyQt4/stream-tube-channel.cpp | 222 +++++++++++++++++++------ TelepathyQt4/tube-channel.cpp | 14 +- 4 files changed, 392 insertions(+), 97 deletions(-) commit e9f6e3ba9c80577755842cfee3096f6318f66499 Author: Dario Freddi Date: Sun Aug 15 18:23:28 2010 +0200 high-level-tubes: Reformat Qt includes .../incoming-stream-tube-channel-internal.h | 2 +- TelepathyQt4/incoming-stream-tube-channel.cpp | 4 ++-- TelepathyQt4/outgoing-stream-tube-channel.cpp | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) commit 0c676aa17983b29b52408460576a9f143765ef22 Author: Dario Freddi Date: Sun Aug 15 18:21:31 2010 +0200 high-level-tubes: Remove connectNotifys around TelepathyQt4/stream-tube-channel.cpp | 17 ----------------- TelepathyQt4/stream-tube-channel.h | 2 -- TelepathyQt4/tube-channel.cpp | 11 ----------- TelepathyQt4/tube-channel.h | 2 -- 4 files changed, 32 deletions(-) commit 7e70fe2c5fea7932ef5dafa5c8d9e9c86beb87f5 Author: Dario Freddi Date: Sun Aug 15 18:17:54 2010 +0200 high-level-tubes: Make includes consistent with the rest of the library. This required a bit of move-arounds. .../incoming-stream-tube-channel-internal.h | 76 ++++++++++++++++++++ TelepathyQt4/incoming-stream-tube-channel.cpp | 58 ++------------- TelepathyQt4/outgoing-stream-tube-channel.cpp | 13 ++-- TelepathyQt4/stream-tube-channel.cpp | 7 +- TelepathyQt4/tube-channel.cpp | 6 +- 5 files changed, 97 insertions(+), 63 deletions(-) commit 61ea04cf5812ebd0f842725815abe3b3d10d53ff Author: Dario Freddi Date: Sat Aug 14 14:56:04 2010 +0200 high-level-tubes: Use \return instead of \returns TelepathyQt4/incoming-stream-tube-channel.cpp | 16 +++++++-------- TelepathyQt4/outgoing-stream-tube-channel.cpp | 12 ++++++------ TelepathyQt4/stream-tube-channel.cpp | 26 ++++++++++++------------- TelepathyQt4/tube-channel.cpp | 4 ++-- 4 files changed, 29 insertions(+), 29 deletions(-) commit e2ce2a68318ebc88ea256bdfee977a5247892184 Author: Dario Freddi Date: Fri Jun 11 12:09:54 2010 +0200 high-level-tubes: Fix behavior of acceptTubeAsTcpSocket, and add an additional overload for using Localhost access control explicitely. TelepathyQt4/incoming-stream-tube-channel.cpp | 43 +++++++++++++++++++++---- TelepathyQt4/incoming-stream-tube-channel.h | 5 +-- 2 files changed, 40 insertions(+), 8 deletions(-) commit 52b4627956117783ebe404da8b042d3eb3a8941a Author: Dario Freddi Date: Fri Jun 11 11:58:50 2010 +0200 high-level-tubes: Add missing pretty headers TelepathyQt4/CMakeLists.txt | 1 + TelepathyQt4/PendingStreamTubeConnection | 13 +++++++++++++ 2 files changed, 14 insertions(+) commit bb6a45bd96b8de6c8b4c25307050047e1b05ada4 Author: Dario Freddi Date: Sun Jun 6 14:47:24 2010 +0200 high-level-tubes: API change: AllowedAddress->SpecifiedAddress, and update relevant documentation TelepathyQt4/incoming-stream-tube-channel.cpp | 4 ++-- TelepathyQt4/outgoing-stream-tube-channel.cpp | 26 ++++++++++++--------- TelepathyQt4/stream-tube-channel.cpp | 30 ++++++++++++++++--------- TelepathyQt4/stream-tube-channel.h | 4 ++-- 4 files changed, 38 insertions(+), 26 deletions(-) commit 3a47792cd54b667910b723168c2cef63d2e92853 Author: Dario Freddi Date: Sun Jun 6 14:29:08 2010 +0200 high-level-tubes: Simplify the update of parameters, and let them be updated before offer finishes. Update docs accordingly. .../outgoing-stream-tube-channel-internal.h | 17 +++++---- TelepathyQt4/outgoing-stream-tube-channel.cpp | 38 +++++++------------- TelepathyQt4/outgoing-stream-tube-channel.h | 3 +- TelepathyQt4/tube-channel-internal.h | 3 -- TelepathyQt4/tube-channel.cpp | 35 +++++------------- TelepathyQt4/tube-channel.h | 1 - 6 files changed, 34 insertions(+), 63 deletions(-) commit 6ef7e1392ca770f406bb37f5c1eb9b7a1a0d1406 Author: Dario Freddi Date: Thu Jun 3 23:40:22 2010 +0200 high-level-tubes: Remove __k__ prefix from every private slot TelepathyQt4/incoming-stream-tube-channel.cpp | 48 ++++++++++---------- TelepathyQt4/incoming-stream-tube-channel.h | 14 +++--- .../outgoing-stream-tube-channel-internal.h | 16 +++---- TelepathyQt4/outgoing-stream-tube-channel.cpp | 32 ++++++------- TelepathyQt4/outgoing-stream-tube-channel.h | 8 ++-- TelepathyQt4/stream-tube-channel-internal.h | 4 +- TelepathyQt4/stream-tube-channel.cpp | 12 ++--- TelepathyQt4/stream-tube-channel.h | 4 +- TelepathyQt4/tube-channel-internal.h | 6 +-- TelepathyQt4/tube-channel.cpp | 12 ++--- TelepathyQt4/tube-channel.h | 6 +-- 11 files changed, 81 insertions(+), 81 deletions(-) commit ecb8be62d849c06820b029cec6b026a3a81a3583 Author: Dario Freddi Date: Thu Jun 3 23:35:10 2010 +0200 high-level-tubes: Merge newLocalConnection and newRemoteConnection into StreamTubeChannel::newConnection TelepathyQt4/incoming-stream-tube-channel.cpp | 13 +------------ TelepathyQt4/incoming-stream-tube-channel.h | 5 ----- TelepathyQt4/outgoing-stream-tube-channel.cpp | 13 +------------ TelepathyQt4/outgoing-stream-tube-channel.h | 5 ----- TelepathyQt4/stream-tube-channel.cpp | 9 +++++++-- TelepathyQt4/stream-tube-channel.h | 1 + examples/stream-tubes/tube-initiator.cpp | 6 +++--- examples/stream-tubes/tube-initiator.h | 2 +- 8 files changed, 14 insertions(+), 40 deletions(-) commit 515d05709046503a2a70cd8b3fb96bcd3c05baaa Author: Dario Freddi Date: Thu Jun 3 02:22:07 2010 +0200 high-level-tubes: Some fixes to documentation TelepathyQt4/incoming-stream-tube-channel.cpp | 46 ++++++++++++++++---- TelepathyQt4/outgoing-stream-tube-channel.cpp | 56 ++++++++++++++++++++++--- 2 files changed, 87 insertions(+), 15 deletions(-) commit c2fc4414e2487c6c42d9226b021037b4f02b64c7 Author: Dario Freddi Date: Thu Jun 3 01:30:32 2010 +0200 high-level-tubes: Use a custom FIFO Queue for handling connection tracking correctly. Add some new methods in OutgoingStreamTubeChannel to track connections through source address and/or contact ID. TelepathyQt4/CMakeLists.txt | 1 + TelepathyQt4/incoming-stream-tube-channel.cpp | 1 + .../outgoing-stream-tube-channel-internal.h | 7 + TelepathyQt4/outgoing-stream-tube-channel.cpp | 155 ++++++++++++++++++-- TelepathyQt4/outgoing-stream-tube-channel.h | 8 +- TelepathyQt4/stream-tube-channel-internal.h | 31 ++++ TelepathyQt4/stream-tube-channel.cpp | 73 ++++++++- examples/stream-tubes/tube-initiator.cpp | 11 +- examples/stream-tubes/tube-initiator.h | 2 +- 9 files changed, 267 insertions(+), 22 deletions(-) commit 502134f1976f87f69466d286ecedaba18c5b43d9 Author: Dario Freddi Date: Wed Jun 2 13:00:20 2010 +0200 high-level-tubes: Use QString instead of QByteArray for unix sockets' addresses TelepathyQt4/incoming-stream-tube-channel.cpp | 8 ++++---- TelepathyQt4/incoming-stream-tube-channel.h | 2 +- TelepathyQt4/outgoing-stream-tube-channel.cpp | 14 +++++++------- TelepathyQt4/outgoing-stream-tube-channel.h | 2 +- TelepathyQt4/stream-tube-channel-internal.h | 2 +- TelepathyQt4/stream-tube-channel.cpp | 4 ++-- TelepathyQt4/stream-tube-channel.h | 2 +- 7 files changed, 17 insertions(+), 17 deletions(-) commit 39624981960119d2c593dfd3de5dba0580edd6cd Author: Dario Freddi Date: Wed Jun 2 12:51:06 2010 +0200 high-level-tubes: Improve the API for socket support, and use it everywhere for consistency TelepathyQt4/incoming-stream-tube-channel.cpp | 37 +++++- TelepathyQt4/outgoing-stream-tube-channel.cpp | 11 +- TelepathyQt4/stream-tube-channel.cpp | 159 ++++++++++++++++++------- TelepathyQt4/stream-tube-channel.h | 21 ++-- 4 files changed, 164 insertions(+), 64 deletions(-) commit bd3c28f02d37eef9b73ea564341b5a1e279e266b Author: Dario Freddi Date: Wed Jun 2 12:07:44 2010 +0200 high-level-tubes: API Refactoring: offerTubeAs*Socket -> offer*Socket TelepathyQt4/outgoing-stream-tube-channel.cpp | 12 ++++++------ TelepathyQt4/outgoing-stream-tube-channel.h | 12 ++++++------ examples/stream-tubes/tube-initiator.cpp | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) commit a1cc393b50d7b26fa767841f0ff3545171eec66b Author: Dario Freddi Date: Wed Jun 2 12:01:52 2010 +0200 high-level-tubes: Let parameters be updated when the tube is successfully offered. Add a new private class inheritance to avoid exposing protected symbols. .../outgoing-stream-tube-channel-internal.h | 1 + TelepathyQt4/outgoing-stream-tube-channel.cpp | 16 +++ TelepathyQt4/outgoing-stream-tube-channel.h | 2 +- TelepathyQt4/stream-tube-channel-internal.h | 11 +- TelepathyQt4/stream-tube-channel.cpp | 24 ++-- TelepathyQt4/stream-tube-channel.h | 2 - TelepathyQt4/tube-channel-internal.h | 63 +++++++++++ TelepathyQt4/tube-channel.cpp | 118 ++++++++++++-------- TelepathyQt4/tube-channel.h | 24 ++-- 9 files changed, 180 insertions(+), 81 deletions(-) commit c0322210dfff5245ff84ef806419bbcfd6f478fc Author: Dario Freddi Date: Mon May 17 16:26:36 2010 +0200 high-level-tubes: A round of fixes to make everything work properly TelepathyQt4/incoming-stream-tube-channel.cpp | 16 ++++++++-------- TelepathyQt4/outgoing-stream-tube-channel.cpp | 10 +++++----- TelepathyQt4/outgoing-stream-tube-channel.h | 5 +++-- TelepathyQt4/stream-tube-channel-internal.h | 2 ++ TelepathyQt4/stream-tube-channel.cpp | 23 ++++++++++++++++++----- TelepathyQt4/tube-channel.cpp | 1 + examples/stream-tubes/tube-initiator.cpp | 3 ++- examples/stream-tubes/tube-receiver.cpp | 3 ++- 8 files changed, 41 insertions(+), 22 deletions(-) commit 3d6e3655db8d1605ccba49e2096a3fb80dd6e173 Author: Dario Freddi Date: Fri May 14 18:17:18 2010 +0200 high-level-tubes: Hide the access control parameter by adding overloads, making the whole API nicer. Also, handle the supported socket types in a more friendly way. TelepathyQt4/incoming-stream-tube-channel.cpp | 166 ++++++++++++------------- TelepathyQt4/incoming-stream-tube-channel.h | 11 +- TelepathyQt4/outgoing-stream-tube-channel.cpp | 54 ++++---- TelepathyQt4/outgoing-stream-tube-channel.h | 15 ++- TelepathyQt4/stream-tube-channel.cpp | 98 ++++++++++++++- TelepathyQt4/stream-tube-channel.h | 15 ++- examples/stream-tubes/tube-initiator.cpp | 2 +- examples/stream-tubes/tube-receiver.cpp | 2 +- 8 files changed, 226 insertions(+), 137 deletions(-) commit 9a61be98cf5b59a6fbcc02361cd188730f5a9370 Author: Dario Freddi Date: Thu May 13 01:20:45 2010 +0200 high-level-tubes: Add an example for stream tubes examples/CMakeLists.txt | 1 + examples/stream-tubes/CMakeLists.txt | 29 +++ examples/stream-tubes/tube-initiator.cpp | 341 ++++++++++++++++++++++++++++++ examples/stream-tubes/tube-initiator.h | 80 +++++++ examples/stream-tubes/tube-receiver.cpp | 214 +++++++++++++++++++ examples/stream-tubes/tube-receiver.h | 65 ++++++ 6 files changed, 730 insertions(+) commit 6e72fe6a956b993e3a8dd1242842f759babf7af2 Author: Dario Freddi Date: Thu May 13 01:10:17 2010 +0200 high-level-tubes: Add the necessary code for generating stream tubes to ChannelFactory TelepathyQt4/channel-class-spec.cpp | 32 ++++++++++++++++++++++ TelepathyQt4/channel-class-spec.h | 4 ++- TelepathyQt4/channel-factory.cpp | 51 +++++++++++++++++++++++++++++++++++ TelepathyQt4/channel-factory.h | 32 ++++++++++++++++++++++ 4 files changed, 118 insertions(+), 1 deletion(-) commit 32e7e0f9a2e6f8ac7235337d4db4fab6f0f18224 Author: Dario Freddi Date: Fri Apr 30 00:43:13 2010 +0200 high-level-tubes: Completing the implementation of StreamTubes by adding IncomingStreamTube TelepathyQt4/CMakeLists.txt | 4 + TelepathyQt4/IncomingStreamTubeChannel | 13 + TelepathyQt4/incoming-stream-tube-channel.cpp | 602 +++++++++++++++++++++++++ TelepathyQt4/incoming-stream-tube-channel.h | 115 +++++ TelepathyQt4/types.h | 2 + 5 files changed, 736 insertions(+) commit d36ef36ad7a55deb1e6aea3128658acfba3cd8d7 Author: Dario Freddi Date: Thu Apr 29 23:19:54 2010 +0200 high-level-tubes: Add OutgoingStreamTubeChannel to allow exporting tubes and offering sockets TelepathyQt4/CMakeLists.txt | 5 + TelepathyQt4/OutgoingStreamTubeChannel | 13 + .../outgoing-stream-tube-channel-internal.h | 78 ++++ TelepathyQt4/outgoing-stream-tube-channel.cpp | 478 ++++++++++++++++++++ TelepathyQt4/outgoing-stream-tube-channel.h | 74 +++ TelepathyQt4/types.h | 3 +- 6 files changed, 650 insertions(+), 1 deletion(-) commit 91ba6fc9fab267a0f0037e4c8fbb7a46b2f0c935 Author: Dario Freddi Date: Thu Apr 29 19:58:33 2010 +0200 high-level-tubes: Adding a base StreamTubeChannel class TelepathyQt4/CMakeLists.txt | 4 + TelepathyQt4/StreamTubeChannel | 13 + TelepathyQt4/stream-tube-channel-internal.h | 73 ++++++ TelepathyQt4/stream-tube-channel.cpp | 355 +++++++++++++++++++++++++++ TelepathyQt4/stream-tube-channel.h | 85 +++++++ TelepathyQt4/types.h | 3 + 6 files changed, 533 insertions(+) commit f2233737d4b6c2381e9279c5698a240fcc79fb1c Author: Dario Freddi Date: Thu Apr 29 18:34:06 2010 +0200 high-level-tubes: Start adding a bare TubeChannel class, implementing the base logic for all tubes. Add also some basic convenience methods to account. TelepathyQt4/CMakeLists.txt | 6 +- TelepathyQt4/TubeChannel | 13 +++ TelepathyQt4/account.cpp | 78 +++++++++++++ TelepathyQt4/account.h | 13 +++ TelepathyQt4/tube-channel.cpp | 248 +++++++++++++++++++++++++++++++++++++++++ TelepathyQt4/tube-channel.h | 71 ++++++++++++ TelepathyQt4/types.h | 2 + 7 files changed, 430 insertions(+), 1 deletion(-) commit ee7d723fa5a1f85c8650b1fa363c1691fa219a08 Author: Olli Salli Date: Tue Mar 1 16:15:57 2011 +0200 Update NEWS NEWS | 2 ++ 1 file changed, 2 insertions(+) commit fca0da5708fdbe4dc91022eedfb1b8fff0a50354 Merge: f0ab68c 44fd0cc Author: Olli Salli Date: Tue Mar 1 16:10:43 2011 +0200 Merge branch 'no-export-private-fns' Reviewed-by: Andre Magalhaes (andrunko) commit 44fd0cc024f7ee1e59e318a59ab128010f7ee7fc Author: Olli Salli Date: Tue Mar 1 15:51:00 2011 +0200 Mark all private slots and methods with NO_EXPORT TelepathyQt4/account-manager.h | 8 +-- TelepathyQt4/account-set-internal.h | 6 +- TelepathyQt4/account-set.h | 6 +- TelepathyQt4/account.h | 18 +++--- TelepathyQt4/channel-dispatch-operation.h | 8 +-- TelepathyQt4/channel-internal.h | 8 +-- TelepathyQt4/channel-request.h | 10 ++-- TelepathyQt4/channel.h | 58 ++++++++++---------- TelepathyQt4/connection-capabilities.h | 4 +- TelepathyQt4/connection-internal.h | 8 +-- TelepathyQt4/connection-lowlevel.h | 4 +- TelepathyQt4/connection-manager-lowlevel.h | 2 +- TelepathyQt4/connection-manager.h | 8 +-- TelepathyQt4/connection.h | 40 +++++++------- TelepathyQt4/contact-capabilities.h | 6 +- TelepathyQt4/contact-manager.h | 30 +++++----- TelepathyQt4/contact-search-channel-internal.h | 4 +- TelepathyQt4/contact-search-channel.h | 12 ++-- TelepathyQt4/contact.h | 32 +++++------ TelepathyQt4/dbus-proxy.h | 4 +- .../file-transfer-channel-creation-properties.h | 20 +++---- TelepathyQt4/file-transfer-channel.h | 10 ++-- TelepathyQt4/incoming-file-transfer-channel.h | 14 ++--- TelepathyQt4/location-info.h | 2 +- TelepathyQt4/message.h | 20 +++---- TelepathyQt4/outgoing-file-transfer-channel.h | 16 +++--- TelepathyQt4/pending-account.h | 8 +-- TelepathyQt4/pending-channel-request.h | 8 +-- TelepathyQt4/pending-channel.h | 10 ++-- TelepathyQt4/pending-connection.h | 8 +-- TelepathyQt4/pending-contact-attributes.h | 6 +- TelepathyQt4/pending-contact-info.h | 4 +- TelepathyQt4/pending-contacts.h | 18 +++--- TelepathyQt4/pending-handles.h | 14 ++--- TelepathyQt4/pending-operation.h | 2 +- TelepathyQt4/pending-ready.h | 6 +- TelepathyQt4/pending-string-list.h | 2 +- TelepathyQt4/pending-variant-map.h | 2 +- TelepathyQt4/pending-variant.h | 2 +- TelepathyQt4/profile-manager.h | 4 +- TelepathyQt4/profile.h | 30 +++++----- TelepathyQt4/protocol-info.h | 18 +++--- TelepathyQt4/protocol-parameter.h | 2 +- TelepathyQt4/readiness-helper.h | 8 +-- TelepathyQt4/referenced-handles.h | 2 +- TelepathyQt4/simple-pending-operations.h | 4 +- TelepathyQt4/streamed-media-channel.h | 34 ++++++------ TelepathyQt4/text-channel.h | 28 +++++----- 48 files changed, 289 insertions(+), 289 deletions(-) commit 8fcc3c976ce3c6ddfd04f5237c4738ad5cbee352 Author: Olli Salli Date: Tue Mar 1 14:54:28 2011 +0200 Avoid introducing a symbol in the .so for TextChannel private struct debug operations TelepathyQt4/text-channel.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 24ed2dc33e7a2258e373afb89a08dd1ee06d9edf Author: Olli Salli Date: Tue Mar 1 14:24:17 2011 +0200 Add missing NO_EXPORT directives to private structs TelepathyQt4/abstract-client.cpp | 6 +++--- TelepathyQt4/account-set-internal.h | 2 +- TelepathyQt4/channel-factory.cpp | 2 +- TelepathyQt4/connection.cpp | 2 +- TelepathyQt4/dbus-proxy-factory.cpp | 2 +- TelepathyQt4/dbus-proxy.cpp | 2 +- TelepathyQt4/fixed-feature-factory.cpp | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) commit f0ab68c1866d0ae97928f9a27375f6ddc089957b Author: Olli Salli Date: Mon Feb 28 15:38:22 2011 +0200 Update NEWS NEWS | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) commit ded226847f6cd74c9ae0d16d6ae8c754980148dd Merge: 07ec87a 0d1e318 Author: Olli Salli Date: Mon Feb 28 15:34:15 2011 +0200 Merge branch 'allowed-presence-statuses' Reviewed-by: Florian Reinhard (freinhard) commit 0d1e318fef09ac3663ab97d26488290a848034be Author: Olli Salli Date: Mon Feb 28 12:53:30 2011 +0200 Always have "offline" in Account::allowedPresenceStatuses(), and also "available" if there are none TelepathyQt4/account.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) commit c177a6a7b93a5a03ca6bf7587fd2a6fc65c6d2c3 Author: Olli Salli Date: Mon Feb 28 12:53:13 2011 +0200 Enhance Account::allowedPresenceStatuses() doxymentation TelepathyQt4/account.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) commit 07ec87a9bdaeb484d42d925c274536241e780d8b Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 25 15:42:21 2011 -0300 Update NEWS NEWS | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 22e692505f837762cdd425ea1f926c7b03ed7d83 Merge: c7d5271 c5aee02 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 25 15:43:25 2011 -0300 Merge branch 'introspection' Reviewed-by: Olli Salli (oggis) commit c5aee0236c4ff45ae8b5647dc9a6890bb422df6c Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 25 14:31:06 2011 -0300 ReadinessHelper: Properly satisfy features if the current status is not supported. Properly satisfy features but do not call the introspection methods if current status is not supported, TelepathyQt4/readiness-helper.cpp | 6 ------ 1 file changed, 6 deletions(-) commit c7d5271d803cfa032fdeaa3895162dfed1844a34 Merge: 6b98195 e5199ae Author: Xavier Claessens Date: Fri Feb 25 14:18:08 2011 +0100 Merge branch 'avatar' commit e5199aefd985a05f5e32dbe9976c05f8033e2bb4 Author: Xavier Claessens Date: Fri Feb 25 10:49:39 2011 +0100 Do not emit avatarDataChanged() if it didn't change TelepathyQt4/contact.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 6b981958763e2caf2a3a528c70831aec1a2245a2 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 22 15:57:12 2011 -0300 Start 0.5.9 development CMakeLists.txt | 2 +- NEWS | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) commit 1fefb62fd879d477c814337f1f0d52cdd0542a6a Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 22 15:38:03 2011 -0300 Prepare release 0.5.8 CMakeLists.txt | 4 ++-- NEWS | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit 5947b9a2a6e44ce457678b2794a9d35a83ec6437 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 22 15:35:36 2011 -0300 Update NEWS NEWS | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) commit 196dd50377e07cf853312d6597d478840c2e042e Merge: d67b810 82a8ee0 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 22 15:21:17 2011 -0300 Merge branch 'account-connection' Reviewed-by: Xavier Claessens (xclaesse) commit d67b81063481568ee3a7755e5e294631f782f9bb Merge: 76eec19 2ded036 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 22 15:20:38 2011 -0300 Merge branch 'trivia' Reviewed-by: Xavier Claessens (xclaesse) commit 82a8ee0d818524b86e227bfa75693cb6d36ccfd1 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 22 13:58:04 2011 -0300 ContactManager::Roster: Print state change debug messages before emitting signal. TelepathyQt4/contact-manager-roster.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit 6c4e03f6c4a2ceb7936a36a20a91a680b7957ab4 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 22 13:52:40 2011 -0300 Account: Properly process the connection queue if connection didn't change. TelepathyQt4/account.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 0612931bb8a3f32724d91d3df403e7a929406e54 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 22 13:30:40 2011 -0300 ContactManager: Add accessor to get the progress made in retrieving the contact list (state). TelepathyQt4/contact-manager-internal.h | 3 +++ TelepathyQt4/contact-manager-roster.cpp | 42 +++++++++++++++++++++++++------ TelepathyQt4/contact-manager.cpp | 11 ++++++++ TelepathyQt4/contact-manager.h | 4 +++ 4 files changed, 53 insertions(+), 7 deletions(-) commit eb60031fdca67f027d466729e4ada5da822bade1 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 22 12:35:49 2011 -0300 ContactManager::Roster: Add debug for when the ContactList state changes. TelepathyQt4/contact-manager-roster.cpp | 4 ++++ 1 file changed, 4 insertions(+) commit 43e54e6c977175c93da7d33e1aafdd0e33afaac7 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 22 12:29:39 2011 -0300 ContactManager::Roster: Fail introspection if roster channels is not supported. TelepathyQt4/contact-manager-roster.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) commit e76643b6372d826fccf0f18fdf7108b9d5472e9d Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 22 12:18:35 2011 -0300 Account: Do not build multiple connections for the same connection object path. TelepathyQt4/account.cpp | 6 ++++++ 1 file changed, 6 insertions(+) commit 2ded0365e60a61387d1212103b164965d6c94424 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 21 18:09:03 2011 -0300 Account: Replace _ with - when parsing object path for protocol name. TelepathyQt4/account.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 76eec19589a12740a0a4abec72a870fda16312d5 Merge: 92d0abf 515bce7 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 18 13:26:32 2011 -0200 Merge branch 'trivia' Reviewed-by: Xavier Claessens (xclaesse) commit 515bce79f092bffebc5ad5e02ddcfcb90cef56fb Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 18 13:23:41 2011 -0200 Profile: Also debug if profile created with createForFileName loads successfully. TelepathyQt4/profile.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit b770d665fe50ff42f334ce290c88ae06a40577ae Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 18 13:14:20 2011 -0200 Account: Do not warn if ChannelDispatcher.SupportsRequestHints is not implemented. TelepathyQt4/account.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) commit 345c0ee080105141f7e0e2046f7109cd8528a130 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 18 13:13:18 2011 -0200 profile test: Enable debug/warnings. tests/profile.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) commit 4068aa6020d04c2ce9b30f350e5e4996bd929300 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 18 13:13:04 2011 -0200 Profile: Improve debug messages. TelepathyQt4/profile.cpp | 86 +++++++++++++++++++++++++++++----------------- 1 file changed, 54 insertions(+), 32 deletions(-) commit 92d0abfd0d4803a30920616c0c27dbfbf0019c2b Author: Xavier Claessens Date: Wed Feb 16 17:02:05 2011 +0100 Also remove useless QIODevice include TelepathyQt4/debug.cpp | 2 -- 1 file changed, 2 deletions(-) commit bc0aaea02b20d01109265142eafe09f22653e54d Author: Xavier Claessens Date: Wed Feb 16 16:31:46 2011 +0100 Remove unused DiscardDevice class TelepathyQt4/debug.cpp | 16 ---------------- 1 file changed, 16 deletions(-) commit 2534ff85b3d97cc98c37917e49d8a7c1148c0e98 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 16 12:52:21 2011 -0200 debug-internal.h: Remove trailing spaces. TelepathyQt4/debug-internal.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit ff87c2b3ef4034f0989f3ee65c0b29241d1aba38 Merge: 2e0cae8 b62f3c6 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 15 23:45:57 2011 -0200 Merge branch 'trivia' Reviewed-by: Olli Salli (oggis) commit 2e0cae8d4b1b7bd25d0575912456b7fd433f35c7 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 15 21:54:08 2011 -0200 Start 0.5.8 development CMakeLists.txt | 2 +- NEWS | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) commit 91ddb5a3ae836af381eafbae128f6bd5a88cb1b3 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 15 21:38:20 2011 -0200 Prepare release 0.5.7 CMakeLists.txt | 4 ++-- NEWS | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) commit 347df2534424641509230fc21e885b79811d5757 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 15 21:37:32 2011 -0200 Update NEWS NEWS | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) commit 39409b5cc7044ec1b498bfaf8ae48492b8a18dce Merge: 1a76b03 6d7ad42 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 15 21:29:34 2011 -0200 Merge branch 'account-presence' Reviewed-by: Olli Salli (oggis) commit 1a76b038ef83e477cce95ffc81645791d6e9a502 Author: Olli Salli Date: Tue Feb 15 21:35:49 2011 +0200 Install ChannelRequestHints pretty header TelepathyQt4/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) commit 9ec5a5bdd960a8db6f0f232795ae68468fa5a3c0 Author: Olli Salli Date: Tue Feb 15 21:33:57 2011 +0200 Update NEWS NEWS | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 88e737f5fae39c1ed465b184bf94d0eb0316b748 Merge: 1076058 296dc53 Author: Olli Salli Date: Tue Feb 15 21:29:33 2011 +0200 Merge branch 'fdo-33117' Reviewed-by: Andre Magalhaes (andrunko) commit 296dc53e558752eaef1e61856e20028fbae7496b Author: Olli Salli Date: Tue Feb 15 21:19:13 2011 +0200 Test ChannelRequest.SucceededWithChannel support tests/dbus/account-channel-dispatcher.cpp | 66 +++++++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 4 deletions(-) commit c84d012d9abc20fba1587a6240d20efcaf68482b Author: Olli Salli Date: Tue Feb 15 20:48:24 2011 +0200 Add support for ChannelRequest.SucceededWithChannel TelepathyQt4/account.cpp | 17 +++++ TelepathyQt4/account.h | 1 + TelepathyQt4/channel-request.cpp | 104 +++++++++++++++++++++++++++++- TelepathyQt4/channel-request.h | 14 +++- TelepathyQt4/pending-channel-request.cpp | 2 +- 5 files changed, 134 insertions(+), 4 deletions(-) commit 243f97e4d3ab440c937157d38a091deb7e7544ca Author: Olli Salli Date: Tue Feb 15 20:10:29 2011 +0200 Q_DECLARE_METATYPE ChannelRequestHints TelepathyQt4/channel-request.h | 2 ++ 1 file changed, 2 insertions(+) commit b086a3dc1d320cdb932cb7343887375df71d272f Author: Olli Salli Date: Tue Feb 15 19:19:02 2011 +0200 TestAccountChannelDispatcher: Test passing hints to channel requests tests/dbus/account-channel-dispatcher.cpp | 61 ++++++++++++++++++++++++++--- 1 file changed, 55 insertions(+), 6 deletions(-) commit 6571c8794ad304a3a15dd1e45a3df93af3ef1d7d Author: Olli Salli Date: Tue Feb 15 19:01:49 2011 +0200 Test that SupportsRequestHints introspection works tests/dbus/account-channel-dispatcher.cpp | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) commit 1dcfdff42a7919946a628ba758fdb29e09ddb664 Author: Olli Salli Date: Tue Feb 15 18:51:37 2011 +0200 Expose ChannelRequest.Hints TelepathyQt4/channel-request.cpp | 23 +++++++++++++++++++++++ TelepathyQt4/channel-request.h | 1 + 2 files changed, 24 insertions(+) commit 3f1aeb11614fd6599675333c091b28e245cc2e9e Author: Olli Salli Date: Tue Feb 15 18:47:37 2011 +0200 Use ChannelRequestHints for specifying request hints TelepathyQt4/account.cpp | 120 +++++++++++++++--------------- TelepathyQt4/account.h | 41 +++++----- TelepathyQt4/pending-channel-request.cpp | 11 +-- TelepathyQt4/pending-channel-request.h | 3 +- 4 files changed, 89 insertions(+), 86 deletions(-) commit fb7344256885c9d0e46345795c6c4e170f57dd99 Author: Olli Salli Date: Tue Feb 15 18:13:35 2011 +0200 Add ChannelRequestHints QVariantMap wrapper class TelepathyQt4/ChannelRequestHints | 13 +++++++ TelepathyQt4/channel-request.cpp | 78 ++++++++++++++++++++++++++++++++++++++ TelepathyQt4/channel-request.h | 27 +++++++++++++ 3 files changed, 118 insertions(+) commit 107605889a3d384f0c31618019dd97980dc532e6 Author: Olli Salli Date: Tue Feb 15 16:29:17 2011 +0200 Update NEWS NEWS | 2 ++ 1 file changed, 2 insertions(+) commit 1507ca85d916063d301674e836661b39c0dd9670 Merge: eaaad72 be90f83 Author: Olli Salli Date: Tue Feb 15 16:21:34 2011 +0200 Merge branch 'request-with-hints' Reviewed-by: Andre Magalhaes (andrunko) commit be90f83a9f15f2f3efe6dec67c338af50ad76240 Author: Olli Salli Date: Tue Feb 15 16:05:24 2011 +0200 Add C string literal versions of CD bus name / object path constants TelepathyQt4/constants.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit 902cdb6ddc87083ca03307186f5edd068a4130d9 Author: Olli Salli Date: Mon Feb 14 22:14:02 2011 +0200 TestAccountConnectionFactory: Try to trigger any races in the CD introspection tests/dbus/account-connection-factory.cpp | 31 +++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) commit 42d4dfd51292ace33e3b96e8ecea6ed81fd704d0 Author: Olli Salli Date: Mon Feb 14 22:13:40 2011 +0200 PendingChannelRequest: Use Account::supportsRequestHints() TelepathyQt4/pending-channel-request.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit bf0e0e599bce38bc15a8109c972c85b63dc73383 Author: Olli Salli Date: Mon Feb 14 22:12:27 2011 +0200 Account: Introspect the CD to see whether it supports request hints TelepathyQt4/account.cpp | 131 ++++++++++++++++++++++++++++++++++++---------- TelepathyQt4/account.h | 3 ++ 2 files changed, 107 insertions(+), 27 deletions(-) commit 5f7a0d74b45b4a3fbd99306dfa56be1d500b7500 Author: Olli Salli Date: Mon Feb 14 20:38:10 2011 +0200 Account: Share the ChannelDispatcherInterface for all channel requests on a bus TelepathyQt4/account.cpp | 52 +++++++++++++++++++++++++++++- TelepathyQt4/account.h | 4 +++ TelepathyQt4/pending-channel-request.cpp | 5 +-- 3 files changed, 56 insertions(+), 5 deletions(-) commit 03ef58451c44bdadac3925b67f8630d2cd3ba2a5 Author: Olli Salli Date: Mon Feb 14 20:38:36 2011 +0200 Add TP_QT4_CHANNEL_DISPATCHER_{BUS_NAME,OBJECT_PATH) constants TelepathyQt4/constants.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit df6995bdfb8008a8dd07cd480ddbcdf0ca8fc486 Author: Olli Salli Date: Mon Feb 14 16:26:28 2011 +0200 Account: Add support for passing Hints when requesting channels TelepathyQt4/account.cpp | 366 ++++++++++++++++++++++++++---- TelepathyQt4/account.h | 129 ++++++++++- TelepathyQt4/pending-channel-request.cpp | 70 ++++-- TelepathyQt4/pending-channel-request.h | 2 +- 4 files changed, 498 insertions(+), 69 deletions(-) commit eaaad7237fe20873cbccf555c8973fa28fa71339 Author: Xavier Claessens Date: Tue Feb 15 09:48:04 2011 +0100 Write avatar temp file into the same location than the avatar cache This is to avoid issues when /tmp is on another FS than /home TelepathyQt4/contact-manager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 4b66a140cbc12c6c8ea9377855da8dc1558352ef Merge: f2a1faa 3273897 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 14 17:36:42 2011 -0200 Merge branch 'protocol-avatars' Reviewed-by: Olli Salli (oggis) commit 3273897869c9264f2163a14dfac451058cc4572d Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 14 17:27:30 2011 -0200 Account: Add method to return the avatar requirements. TelepathyQt4/account.cpp | 19 +++++++++++++++++++ TelepathyQt4/account.h | 2 ++ 2 files changed, 21 insertions(+) commit d5bef83cc310007e057f4dcf52f96796b8769290 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 14 17:27:21 2011 -0200 ProtocolInfo: Fix doc for avatarRequirements(). TelepathyQt4/protocol-info.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 7cba0a35cd739502502d84d99640798cabf60316 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 14 17:27:01 2011 -0200 ManagerFile: Fix doc for avatarRequirements(). TelepathyQt4/manager-file.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 6d7ad42f8a80bc9b063637a247e02e644dba240f Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 14 16:55:54 2011 -0200 Account: Refactor allowedPresenceStatuses according to Olli's suggestions. TelepathyQt4/account.cpp | 131 ++++++++++++++++++---------------------------- 1 file changed, 51 insertions(+), 80 deletions(-) commit 9b0f305267866c14dde9f0fcabf1dc81de8f8d42 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 14 10:11:10 2011 -0200 Account: Add method to return the list of allowed presence status. TelepathyQt4/account.cpp | 176 +++++++++++++++++++++++++++++++++++++++++++++- TelepathyQt4/account.h | 3 + 2 files changed, 178 insertions(+), 1 deletion(-) commit b5de22ccc8c39ae1182df257faa5ed86ee589685 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 14 12:30:17 2011 -0200 PreseceSpecList: Added toMap method. TelepathyQt4/presence.h | 9 +++++++++ 1 file changed, 9 insertions(+) commit 7ef8f0a8a005749498d7ebca2541ad87e32162bc Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 14 10:10:06 2011 -0200 Profile: Deprecated Presence::message in favour of newly added Presence::canHaveStatusMessage. TelepathyQt4/profile.cpp | 18 ++++++++++++++++-- TelepathyQt4/profile.h | 3 ++- 2 files changed, 18 insertions(+), 3 deletions(-) commit f2a1faac64fdcd143591c10871c9af1e1db9ca11 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 14 10:13:13 2011 -0200 Update NEWS NEWS | 2 ++ 1 file changed, 2 insertions(+) commit 74e72ee82e493740fc3e6cf526f324b395a49fbf Merge: 33bae44 4c71acd Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 14 10:11:50 2011 -0200 Merge branch 'protocol' Reviewed-by: Olli Salli (oggis) commit b62f3c6c391478d665bcd1dd95bab8a5938b071d Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 18:21:14 2011 -0200 Filter: Make compiler happy by using Q_UNUSED(t) on matches(t). TelepathyQt4/filter.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit 4c71acdb4d606aa6ffb7f9e99c914ecaaa30bb0b Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 17:36:15 2011 -0200 ManagerFile: Make sure statuses with same name are not added twice to allowedPresenceStatuses(). TelepathyQt4/manager-file.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) commit ea85bbaca8909446c081dd998ffa861c33d6782b Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 17:31:04 2011 -0200 PresenceSpec: Rename canHaveMessage to canHaveStatusMessage for consistency. TelepathyQt4/presence.cpp | 7 ++++--- TelepathyQt4/presence.h | 2 +- tests/dbus/cm-basics.cpp | 6 +++--- tests/manager-file.cpp | 6 +++--- 4 files changed, 11 insertions(+), 10 deletions(-) commit ab30f9a923093bd936d9a3ac51fcb16ef4fed196 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 17:28:56 2011 -0200 PresenceSpec: Add support for passing a status message when calling presence(). TelepathyQt4/presence.cpp | 14 ++++++++++---- TelepathyQt4/presence.h | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) commit dfe43b685eca2766cbe21115037df49ca67cbc5d Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 16:57:18 2011 -0200 ManagerFile: Use QHash::value() instead of operator[] for accessors. TelepathyQt4/manager-file.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit e67a2c92d444c354eb53c6816237d0aec3ea0957 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 16:44:35 2011 -0200 cm-basics test: Add test for Protocol.Avatars. tests/dbus/cm-basics.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) commit b1fda7930c179cdaee4efac1f283d102364f6ecc Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 16:40:15 2011 -0200 ConnectionManager: Bind Protocol.Avatars. TelepathyQt4/connection-manager-internal.h | 2 + TelepathyQt4/connection-manager.cpp | 63 ++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) commit ecc25c426c1346447e84690c13d6de168dcc97ce Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 16:31:05 2011 -0200 ConnectionManager: Refactor ProtocolWrapper introspection code in preparation for Protocol.Avatars support. TelepathyQt4/connection-manager-internal.h | 3 +++ TelepathyQt4/connection-manager.cpp | 21 ++++++++++++++++----- 2 files changed, 19 insertions(+), 5 deletions(-) commit 53f77f3dc897294982bda40b1cd7ba93472c1ed2 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 16:25:40 2011 -0200 ConnectionManager: Use avatar information from manager file. TelepathyQt4/connection-manager.cpp | 1 + 1 file changed, 1 insertion(+) commit 853a3b69f6f719029bb175f7e28156540e6ab83b Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 16:24:31 2011 -0200 ProtocolInfo: Add avatar information support. TelepathyQt4/protocol-info.cpp | 25 +++++++++++++++++++++++++ TelepathyQt4/protocol-info.h | 4 ++++ 2 files changed, 29 insertions(+) commit 68e90dd12b7dab8efef3345b75c732ae1ad53512 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 15:56:58 2011 -0200 manager-file test: Add test for avatar information. tests/manager-file.cpp | 14 ++++++++++++++ tests/telepathy/managers/test-manager-file.manager | 10 ++++++++++ 2 files changed, 24 insertions(+) commit 8083bd9d790e0eb3b7872cee651e1dba05ba093a Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 15:39:37 2011 -0200 ManagerFile: Parse avatar information. TelepathyQt4/manager-file.cpp | 30 ++++++++++++++++++++++++++++++ TelepathyQt4/manager-file.h | 4 +++- 2 files changed, 33 insertions(+), 1 deletion(-) commit 05a82fb8018712c9dc9dd798402240492d34c081 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 15:26:16 2011 -0200 AvatarSpec: Add class to represent Protocol.Avatars properties. TelepathyQt4/AvatarSpec | 13 ++++ TelepathyQt4/CMakeLists.txt | 2 + TelepathyQt4/avatar.cpp | 154 +++++++++++++++++++++++++++++++++++++++++++ TelepathyQt4/avatar.h | 33 ++++++++++ 4 files changed, 202 insertions(+) commit 0fe4107498c9a53544f793081512c007817510bd Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 15:14:36 2011 -0200 AvatarData: Declare Qt metatype and properly export class. TelepathyQt4/avatar.h | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) commit 2acb3a08eb57fdb652959ebf7caef86838a9d53a Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 15:06:51 2011 -0200 Rename avatar-data.h to avatar.h as a preparation for inclusion of AvatarSpec. TelepathyQt4/AvatarData | 2 +- TelepathyQt4/CMakeLists.txt | 2 +- TelepathyQt4/avatar-data.h | 47 ------------------------------------------- TelepathyQt4/avatar.h | 47 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 49 insertions(+), 49 deletions(-) commit 2032efa67607888aa5546e5c040d1f9f0d6e1054 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 14:58:01 2011 -0200 Auto-generate code for Protocol.Avatars. TelepathyQt4/connection-manager.xml | 1 + 1 file changed, 1 insertion(+) commit 61c3d567352df8898bd0034504a82890abdb78e3 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 16:41:43 2011 -0200 ManagerFile: Improve check for keys starting with param- and status-. TelepathyQt4/manager-file.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) commit c17011e01c8f851049b8025d0124165cf3b4131d Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 16:20:29 2011 -0200 cm-basics test: Enable Protocol.Presence test. tests/dbus/cm-basics.cpp | 38 ++++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 20 deletions(-) commit fdabaa7fa05272b2055f3b212d9fc4f4be2f1b1b Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 16:19:47 2011 -0200 ConnectionManager: Fix handling of Properties.GetAll(Protocol.Presence). TelepathyQt4/connection-manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 0c7f4b0a1e76ef49e282abc5933bfe27a27baa4d Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 16:19:24 2011 -0200 ConnectionManager: Properly parse Protocol.Interfaces property. TelepathyQt4/connection-manager.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 4939ff1edbd6f59de20b7566653da352cafc2f89 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 16:18:22 2011 -0200 echo2 cm: Properly create TpPresenceStatusSpec with "canHaveMessage" set. tests/lib/glib/echo2/protocol.c | 2 ++ 1 file changed, 2 insertions(+) commit cda9a2258d49d9d48a0ae804b562567ed75fe798 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 14:41:17 2011 -0200 Use PresenceSpec/List in favour of SimpleStatusSpec/Map. TelepathyQt4/connection-manager.cpp | 4 +- TelepathyQt4/manager-file.cpp | 18 ++++---- TelepathyQt4/manager-file.h | 3 +- TelepathyQt4/protocol-info.cpp | 15 ++++-- TelepathyQt4/protocol-info.h | 5 +- tests/dbus/cm-basics.cpp | 46 ++++++++++++------ tests/manager-file.cpp | 87 +++++++++++++++++++++-------------- 7 files changed, 112 insertions(+), 66 deletions(-) commit f5fd3bbf04640187df1c77c01adc5e9f60d9b990 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 14:03:31 2011 -0200 PresenceSpec: Add high-level API for SimpleStatusSpec. TelepathyQt4/CMakeLists.txt | 1 + TelepathyQt4/PresenceSpec | 13 ++++++++ TelepathyQt4/presence.cpp | 72 +++++++++++++++++++++++++++++++++++++++++++ TelepathyQt4/presence.h | 45 +++++++++++++++++++++++++++ 4 files changed, 131 insertions(+) commit a7069b998d98938f665dd188b3cc08424cfca616 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 13:45:21 2011 -0200 cm-basics test: Add test for Protocol.Presence. The code is commented due to an issue with tp-glib usage. Check comment in the code. tests/dbus/cm-basics.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) commit 5d5719d65aff38a1d22dac1e28f2ba690da642b3 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 13:26:23 2011 -0200 echo2 cm: Add support for Protocol.Presence. tests/lib/glib/echo2/protocol.c | 75 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) commit 24186cc2fdfab4c75ae105552be0eeb109c52275 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 12:36:45 2011 -0200 echo2 cm: Import protocol.c from tp-glib. tests/lib/glib/echo2/protocol.c | 57 +++++++++++++++++++++++++++++++++------ 1 file changed, 49 insertions(+), 8 deletions(-) commit c20cf4695a881ed9bdacef6473b1c710220df024 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 12:40:16 2011 -0200 Bump tp-glib dependency to 0.13.7 due to Protocol.Presence/Avatars. CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 62c747587b08cf80672710c27cf6b4cb11befb6d Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 12:30:08 2011 -0200 ConnectionManager: Bind Protocol.Presence. TelepathyQt4/connection-manager-internal.h | 4 +- TelepathyQt4/connection-manager.cpp | 55 ++++++++++++++++++++++++++-- 2 files changed, 54 insertions(+), 5 deletions(-) commit ba8b9b2f006646d6b22375ace9eecd37eedc0d86 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 12:09:09 2011 -0200 ConnectionManager: Use presence status information from manager file. TelepathyQt4/connection-manager.cpp | 1 + 1 file changed, 1 insertion(+) commit b82062cf9dc259914927007c069571674bf8c898 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 12:08:20 2011 -0200 ProtocolInfo: Add presence status information support. TelepathyQt4/protocol-info.cpp | 19 +++++++++++++++++++ TelepathyQt4/protocol-info.h | 3 +++ 2 files changed, 22 insertions(+) commit 979c46dc579bafc0d3b11349634663ece80e6123 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 11:09:30 2011 -0200 ProtocolInfo: Re-order methods declaration to match implementation. TelepathyQt4/protocol-info.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit be2096abef0593412df9b26381ea2b96d2e2825e Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 12:06:30 2011 -0200 manager-file test: Add test for presence status. tests/manager-file.cpp | 26 ++++++++++++++++++++ tests/telepathy/managers/test-manager-file.manager | 3 +++ 2 files changed, 29 insertions(+) commit 036a530446731fb74785042ed9c49748e5a0c8a5 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 11:48:47 2011 -0200 ManagerFile: Parse presence status information. TelepathyQt4/manager-file.cpp | 68 ++++++++++++++++++++++++++++++++++++++--- TelepathyQt4/manager-file.h | 1 + 2 files changed, 64 insertions(+), 5 deletions(-) commit 7af4a3912c49ff26bd59de057589f956d3ca64d3 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 12:29:00 2011 -0200 Auto-generate code for Protocol.Presence. TelepathyQt4/connection-manager.xml | 1 + 1 file changed, 1 insertion(+) commit 389b80a97f629e7ee2f2b652bd5c7c5696a1830f Author: Andre Moreira Magalhaes (andrunko) Date: Sun Feb 13 14:40:57 2011 -0200 ProtocolInfo: Improve documentation. TelepathyQt4/protocol-info.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) commit 33bae44be2b9d2ae82540beebab8dcce533b9cfe Author: Olli Salli Date: Sat Feb 12 17:39:41 2011 +0200 Update NEWS NEWS | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 8f367e1efd3dae39dd2661f8c768129383a54d1a Author: Olli Salli Date: Sat Feb 12 16:21:44 2011 +0200 Make debug subsys more no-op when disabled at runtime Reviewed-by: Andre Magalhaes (andrunko) TelepathyQt4/debug-internal.h | 77 ++++++++++++++++++++++++++++++++++++++--- TelepathyQt4/debug.cpp | 20 +++++------ 2 files changed, 83 insertions(+), 14 deletions(-) commit 959437388baf00e22d04dc78f3dbb0d791399507 Author: Olli Salli Date: Fri Feb 11 18:40:50 2011 +0200 Update NEWS NEWS | 2 ++ 1 file changed, 2 insertions(+) commit 39dc9ac26a30123329ae0884b64de4544d0a85a1 Author: Olli Salli Date: Fri Feb 11 18:33:26 2011 +0200 Channel: Avoid crashes in updateContacts when just the self handle changed Reviewed-by: Andre Magalhaes (andrunko) TelepathyQt4/channel.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit 18d5da6cb5c7f4ea73348443c7d3aea4b6228db6 Author: Olli Salli Date: Fri Feb 11 17:55:20 2011 +0200 AccountSet::Private::filterValid variable isn't used, remove it Reviewed-by: Andre Magalhaes (andrunko) TelepathyQt4/account-set-internal.h | 1 - 1 file changed, 1 deletion(-) commit 1f8ee692f8b06fd5ac99a9107cd3d2bba70a9d12 Author: Olli Salli Date: Fri Feb 11 14:02:36 2011 +0200 Update NEWS NEWS | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 76a33cbcab9e3a02f178e4b1f4ff22d67cc0b38c Author: Olli Salli Date: Thu Feb 10 19:56:12 2011 +0200 Don't install future headers They're not API stable! Also, we don't install the future-internal.h required by them so they don't work anyway. Reviewed-by: Andre Magalhaes (andrunko) TelepathyQt4/CMakeLists.txt | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) commit d18563249d7460ac1f64814c202751a2893ea648 Author: Xavier Claessens Date: Wed Feb 2 11:12:49 2011 +0100 Initialize requestAvatarsIdle to false at construction TelepathyQt4/contact-manager.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 1916776df9da558969761e580687109fd4431981 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 27 15:14:12 2011 -0200 Start 0.5.7 development CMakeLists.txt | 2 +- NEWS | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) commit 0318aafda275c681b3d3048d5425a343832d422c Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 27 15:03:13 2011 -0200 Prepare release 0.5.6 CMakeLists.txt | 4 ++-- NEWS | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit 3bdb836daa942e257399f6083964d72350e6c065 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 27 14:59:43 2011 -0200 Update NEWS NEWS | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit cd3bad820290f020381e45f7a3a81e32c4b88cca Merge: ad43fed 3dad653 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 27 14:58:23 2011 -0200 Merge branch 'spec-0.21.8' Reviewed-by: Olli Salli (oggis) commit ad43fedc580857f92c472f0d162b8c79daad6f55 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 27 14:49:52 2011 -0200 Do not link tests and examples/file-transfer against QtGui. Reviewed-by: Olli Salli (oggis) cmake/modules/TpQt4Macros.cmake | 4 ++-- examples/file-transfer/CMakeLists.txt | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) commit 9287580af0653b13c0240dcea4219d1e79c138f2 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 27 14:44:02 2011 -0200 Update NEWS NEWS | 2 ++ 1 file changed, 2 insertions(+) commit 165c2a91dd6bdcdf361b5ab36317d58555843355 Merge: a146a9a efeaf3f Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 27 14:41:08 2011 -0200 Merge branch 'contact' Reviewed-by: Olli Salli (oggis) commit a146a9a7a4f74c51221dbc8c72973db3237e3a38 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 27 14:38:59 2011 -0200 Update NEWS NEWS | 1 + 1 file changed, 1 insertion(+) commit 58dab1461d66469c1b3092e91f78958ee133af94 Author: Jonathan Riddell Date: Thu Jan 27 14:35:20 2011 -0200 Properly link against QtXml. Reviewed-by: Andre Moreira Magalhaes (andrunko) cmake/modules/TpQt4Macros.cmake | 4 ++-- examples/accounts/CMakeLists.txt | 1 + examples/file-transfer/CMakeLists.txt | 2 ++ examples/protocols/CMakeLists.txt | 1 + examples/roster/CMakeLists.txt | 2 ++ 5 files changed, 8 insertions(+), 2 deletions(-) commit ae5d89febc980733243eac72fa932830238b2d85 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 27 14:24:34 2011 -0200 Update NEWS NEWS | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit c7bd938c5fd8d7ab12bbdf4902c9396abb7ac6d5 Merge: c5e3c16 c234fbd Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 27 14:22:19 2011 -0200 Merge branch 'protocol' Reviewed-by: Olli Salli (oggis) commit efeaf3f6d4d27f35881122ea37b57c7ef91b713f Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 27 14:17:43 2011 -0200 ContactManager::Roster: Properly emit presencePublicationRequested. TelepathyQt4/contact-manager-roster.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit 3dad653778f50940b4e79b7269daa882d6f919a7 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jan 26 16:53:20 2011 -0200 Generate code for all stable interfaces and added missing fancy-header files. TelepathyQt4/AccountInterfaceAddressingInterface | 13 +++++++++++++ TelepathyQt4/AccountInterfaceAvatarInterface | 13 +++++++++++++ TelepathyQt4/CMakeLists.txt | 15 ++++++++++++++- TelepathyQt4/ChannelInterfaceAnonymityInterface | 13 +++++++++++++ TelepathyQt4/ChannelInterfaceConferenceInterface | 13 +++++++++++++ TelepathyQt4/ChannelInterfaceMessagesInterface | 13 +++++++++++++ .../ChannelInterfaceSASLAuthenticationInterface | 13 +++++++++++++ TelepathyQt4/ChannelInterfaceSecurableInterface | 13 +++++++++++++ TelepathyQt4/ChannelInterfaceServicePointInterface | 13 +++++++++++++ TelepathyQt4/ChannelInterfaceTubeInterface | 13 +++++++++++++ TelepathyQt4/ChannelTypeFileTransferInterface | 13 +++++++++++++ .../ChannelTypeServerAuthenticationInterface | 13 +++++++++++++ .../ConnectionInterfaceMailNotificationInterface | 13 +++++++++++++ TelepathyQt4/account.xml | 1 + TelepathyQt4/channel.xml | 9 ++++++--- TelepathyQt4/connection.xml | 3 ++- 16 files changed, 179 insertions(+), 5 deletions(-) commit 86c77f8a86163eba8652c9cb0accfab1c1ace76f Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jan 14 14:14:32 2011 -0200 Update to spec 0.21.8. spec/Account_Interface_Addressing.xml | 76 ++ spec/Call_Content.xml | 257 +++++-- spec/Call_Content_Codec_Offer.xml | 48 +- spec/Call_Content_Interface_Media.xml | 234 ++++-- spec/Call_Content_Interface_Mute.xml | 26 +- spec/Call_Stream.xml | 165 +++-- spec/Call_Stream_Endpoint.xml | 127 +++- spec/Call_Stream_Interface_Media.xml | 263 ++++--- spec/Channel.xml | 8 +- spec/Channel_Dispatcher.xml | 220 +++++- ...Channel_Dispatcher_Interface_Operation_List.xml | 4 +- spec/Channel_Interface_Conference.xml | 17 +- spec/Channel_Interface_DTMF.xml | 93 ++- spec/Channel_Interface_Hold.xml | 5 +- spec/Channel_Interface_Mergeable_Conference.xml | 6 +- spec/Channel_Interface_Messages.xml | 216 ++++-- spec/Channel_Interface_SASL_Authentication.xml | 704 ++++++++++++++++++ spec/Channel_Interface_SMS.xml | 94 ++- spec/Channel_Interface_Securable.xml | 78 ++ spec/Channel_Interface_Splittable.xml | 4 +- spec/Channel_Request.xml | 86 +++ spec/Channel_Type_Call.xml | 776 ++++++++++++++++---- spec/Channel_Type_Contact_Search.xml | 31 +- spec/Channel_Type_Server_Authentication.xml | 121 +++ spec/Channel_Type_Text.xml | 193 +++-- spec/Client_Handler.xml | 3 +- spec/Client_Handler_Future.xml | 23 + spec/Client_Interface_Requests.xml | 4 +- spec/Connection.xml | 184 ++++- spec/Connection_Interface_Anonymity.xml | 40 +- spec/Connection_Interface_Cellular.xml | 92 +-- spec/Connection_Interface_Communication_Policy.xml | 4 +- spec/Connection_Interface_Contact_Info.xml | 30 + spec/Connection_Interface_Contact_List.xml | 90 ++- spec/Connection_Interface_Contacts.xml | 13 +- spec/Connection_Interface_Keepalive.xml | 73 ++ spec/Connection_Interface_Location.xml | 50 +- spec/Connection_Interface_Mail_Notification.xml | 82 +-- spec/Connection_Interface_Power_Saving.xml | 7 +- spec/Connection_Manager.xml | 142 ++-- spec/Media_Stream_Handler.xml | 89 ++- spec/Protocol.xml | 75 +- spec/Protocol_Interface_Avatars.xml | 5 +- spec/Protocol_Interface_Presence.xml | 5 +- spec/all.xml | 151 +++- spec/errors.xml | 53 ++ spec/template.xml | 2 +- 47 files changed, 4059 insertions(+), 1010 deletions(-) commit c234fbd04f4dd30bdad29039c3b3274dc7660b72 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jan 26 12:50:19 2011 -0200 ConnectionManager: Ignore protocols with invalid names. TelepathyQt4/connection-manager.cpp | 37 +++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) commit 62558b649efc3f2ae504ceda6edc98bb67953446 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jan 26 12:32:11 2011 -0200 ConnectionManager: Properly escape protocol name with "-". TelepathyQt4/connection-manager.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit c5e3c16891e1fbbd2c8257be20f324c4ec5abdb6 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 25 17:22:56 2011 -0200 Start 0.5.6 development CMakeLists.txt | 2 +- NEWS | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) commit dee006590984a05d911906969d14c33e85968567 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 25 16:21:37 2011 -0200 Prepare release 0.5.5 CMakeLists.txt | 4 ++-- NEWS | 13 +++++++++---- 2 files changed, 11 insertions(+), 6 deletions(-) commit a216007626dab4824c901f7ac6e6720dcd50613d Merge: b5f2b70 54eddc5 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 25 16:10:33 2011 -0200 Merge branch 'contactlist' Reviewed-by: Olli Salli (oggis) commit 54eddc5fe4d733eaed4210dcc197ac47af68c54d Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 25 15:11:54 2011 -0200 Renamed contact-manager-roster-internal.{h,cpp} to connection-manager-internal.h/connection-manager-roster.cpp TelepathyQt4/CMakeLists.txt | 4 +- TelepathyQt4/contact-manager-internal.h | 318 ++++ TelepathyQt4/contact-manager-roster-internal.cpp | 1795 ---------------------- TelepathyQt4/contact-manager-roster-internal.h | 318 ---- TelepathyQt4/contact-manager-roster.cpp | 1795 ++++++++++++++++++++++ TelepathyQt4/contact-manager.cpp | 2 +- 6 files changed, 2116 insertions(+), 2116 deletions(-) commit b4bc4b6617fc1cb0b8ae43ba909c400a3891482c Author: Olli Salli Date: Tue Jan 25 19:03:36 2011 +0200 Emit publish state change signals if and only if something changed TelepathyQt4/contact-manager-roster-internal.cpp | 4 +++- TelepathyQt4/contact.cpp | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) commit 5f6b9f4e74d71ab4a2c776022efa6546e31b1b23 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 25 12:18:05 2011 -0200 ContactManager: Make sure FeatureAvatarToken is added to feature if FeatureAvatarData is requested even if the ContactFactory does not contain FeatureAvatarData. TelepathyQt4/contact-manager.cpp | 5 +++++ 1 file changed, 5 insertions(+) commit d8f3612723300cf73b4ae47f7279fd8863f7df7d Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 25 12:16:35 2011 -0200 ContactManager::Roster: Simplify introspectGroups code by using PendingSuccess/Failure. TelepathyQt4/contact-manager-roster-internal.cpp | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) commit b5f2b703574194901608e9bf77be4c659b68a92b Author: Xavier Claessens Date: Tue Jan 25 13:47:35 2011 +0100 AvatarData: Make atomic-write in the cache Create a temporary file and then rename it, to make sure file writing is not racy with other process updating the avatar at the same time. Fixes bug #33457 TelepathyQt4/contact-manager.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) commit 49d1e52320026b3d0ced7b4e7ad5d426395f25a8 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 24 23:50:41 2011 -0200 ContactManager::Roster: Properly reintrospect group when needed. TelepathyQt4/contact-manager-roster-internal.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit d9f15da24cf49ac543d956b5eafca20948e852dd Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 24 21:06:12 2011 -0200 ContactManager::Roster: Make sure FeatureRosterGroup introspection is finished before processing changes. TelepathyQt4/contact-manager-roster-internal.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit acf2aaebd81ec84ebbeccfc78db7fa1cb187bc45 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 24 20:54:05 2011 -0200 conn-roster test: Check that ContactFactory::features() are properly requested for ContactList contacts. tests/dbus/conn-roster.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 23ac62291163748425a21a0e73fb62ad69a707be Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 24 20:50:59 2011 -0200 ContactManager::Roster: Make sure ContactFactory::features() is requested for ContactList contacts. TelepathyQt4/contact-manager-roster-internal.cpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) commit c2a53c7c759006c02503ba2263c25b54b542f980 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 24 20:50:03 2011 -0200 ContactManager: Move ensureTracking to the public class, so it can be used by ContactManager::Roster. TelepathyQt4/contact-manager.cpp | 147 ++++++++++++++++++-------------------- TelepathyQt4/contact-manager.h | 1 + 2 files changed, 70 insertions(+), 78 deletions(-) commit d67b3b32ba6f1d333f3f9b7788ceb4943a73673e Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 24 20:49:06 2011 -0200 ContactManager: No need to add FeatureAvatarToken to the list returned by ContactFactory::features() as ContactFactory already does it. TelepathyQt4/contact-manager.cpp | 5 ----- 1 file changed, 5 deletions(-) commit 766432a21dd643343fba5bd87dcff654a2c4a34a Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 24 20:48:10 2011 -0200 ContactFactory: Make sure FeatureAvatarToken is added to features if FeatureAvatarData is requested. TelepathyQt4/contact-factory.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) commit d2fb744c47cc3648dc1d3495d1b574b239ac0f03 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 24 20:12:45 2011 -0200 Use ContactManager::Roster. Simplify ContactManager/Connection code by using ContactManager::Roster. TelepathyQt4/CMakeLists.txt | 3 +- TelepathyQt4/connection.cpp | 450 +--------- TelepathyQt4/connection.h | 16 +- TelepathyQt4/contact-manager-internal.h | 61 -- TelepathyQt4/contact-manager.cpp | 1444 ++----------------------------- TelepathyQt4/contact-manager.h | 102 +-- TelepathyQt4/pending-operation.h | 4 +- 7 files changed, 111 insertions(+), 1969 deletions(-) commit 02a16489cf8056739de347778678df78477ad30b Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 24 20:10:59 2011 -0200 Added specialized class to manage roster code. All the code comes from Connection/ContactManager with minor tweaks to work in a separate class. TelepathyQt4/contact-manager-roster-internal.cpp | 1775 ++++++++++++++++++++++ TelepathyQt4/contact-manager-roster-internal.h | 318 ++++ 2 files changed, 2093 insertions(+) commit 783f02da13be7342b5dc315ccdbcaa024f5a2d73 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jan 21 13:51:15 2011 -0200 Connection/ContactManager: Only introspect FeatureRosterGroups if FeatureRoster initial contacts are ready. TelepathyQt4/connection.cpp | 55 +++++++++++++++++++++++++++++--------- TelepathyQt4/contact-manager.cpp | 12 +-------- 2 files changed, 44 insertions(+), 23 deletions(-) commit f2ad812b02b080125bd520436d9b4c5a984088ec Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jan 21 13:04:38 2011 -0200 Connection/ContactManager: Ignore ContactList changes until initial contacts are retrieved. TelepathyQt4/connection.cpp | 5 +++++ TelepathyQt4/contact-manager.cpp | 12 ++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) commit 7be0e05b49820b0891038ff39f299363426b4d55 Author: Alvaro Soliverez Date: Mon Jan 24 11:06:25 2011 -0800 Added convenience method to check file transfer capabilities Reviewed-by: Andre Magalhaes (andrunko) TelepathyQt4/capabilities-base.cpp | 16 ++++++++++++++++ TelepathyQt4/capabilities-base.h | 3 ++- 2 files changed, 18 insertions(+), 1 deletion(-) commit 786a97b89cefa6426a852864e3c5afda9dcd8c9d Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 24 17:26:24 2011 -0200 Start 0.5.5 development CMakeLists.txt | 2 +- NEWS | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) commit 6430855cb70d9f8894b3b1732703d94d0988affa Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 20 13:12:41 2011 -0200 Prepare release 0.5.4 CMakeLists.txt | 4 ++-- NEWS | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit 90a83bd781aa459525d8779ab4c73ea91406c308 Author: Olli Salli Date: Thu Jan 20 16:58:03 2011 +0200 Update NEWS NEWS | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 57579d5b856a653f5658690a0acd08c52f129113 Merge: a6af7f9 11527a2 Author: Olli Salli Date: Thu Jan 20 16:55:33 2011 +0200 Merge branch 'pub-req-sanity' Reviewed-by: Andre Magalhaes (andrunko) commit a6af7f9fb3426332229817b3fd8418918cdcf2ab Merge: 88d3771 509084b Author: Olli Salli Date: Thu Jan 20 16:45:48 2011 +0200 Merge branch 'separate-version' Reviewed-by: Andre Magalhaes (andrunko) commit 88d3771bcbeeb6771810679185c488f26df94089 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 20 12:23:13 2011 -0200 Update NEWS NEWS | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 42278d90c793436765a1542322f940795287bce7 Merge: 94fd7fb d0d13f4 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 20 12:18:39 2011 -0200 Merge branch 'contactlist' Reviewed-by: Olli Salli (oggis) commit 11527a255f889e5fc50e0e7e95b9a6fffbc71d21 Author: Olli Salli Date: Thu Jan 20 13:26:31 2011 +0200 presencePublicationRequested(Contacts), which carries multiple contacts The details are to be extracted from the individual contacts. TelepathyQt4/contact-manager.cpp | 29 +++++++++++++++++++++++++---- TelepathyQt4/contact-manager.h | 4 +++- tests/dbus/conn-roster.cpp | 10 ++++------ 3 files changed, 32 insertions(+), 11 deletions(-) commit 5c4c382723348fd0b6b584a78127f72d9ac6054f Author: Olli Salli Date: Thu Jan 20 13:17:00 2011 +0200 ContactManager: Set Contact state consistently before signaling presencePublicationRequested TelepathyQt4/contact-manager.cpp | 4 ++-- tests/dbus/conn-roster.cpp | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) commit 0d25a164d1684da5e127582e514c3e7b132a9c4d Merge: 509084b d0d13f4 Author: Olli Salli Date: Thu Jan 20 13:02:13 2011 +0200 Merge branch 'contactlist' of git+ssh://dhansak.collabora.co.uk/home/andrunko/public_html/git/telepathy-qt4 into pub-req-sanity commit 509084b10bc34f5963af53a6eab86f32d937f1db Author: Olli Salli Date: Thu Jan 20 11:16:16 2011 +0200 Prevent full library recompiles when the library version number is changed Also speeds up the library slightly when debugging is disabled. We could make that yet better though by reimplementing QDebug's API. CMakeLists.txt | 3 ++- TelepathyQt4/debug-internal.h | 10 ++-------- TelepathyQt4/debug.cpp | 6 ++++-- config-version.h.in | 1 + config.h.in | 1 - 5 files changed, 9 insertions(+), 12 deletions(-) commit 94fd7fba851d1b14835294485a40fa1dd3143b07 Merge: 626ef34 2eed544 Author: Olli Salli Date: Thu Jan 20 10:57:08 2011 +0200 Merge branch 'master' of git+ssh://git.collabora.co.uk/git/telepathy-qt4 commit d0d13f4a6174b6b950353824ff47f7fd893be30c Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jan 19 14:09:56 2011 -0200 ContactManager: Only process contact list changes once the initial contactlist contacts are received. TelepathyQt4/contact-manager.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) commit 04fc79ff5f147d2d07e7aeba6c665f4e689be1a0 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jan 19 13:53:57 2011 -0200 conn-roster test: Check that ContactManager::presencePublicationRequested is properly emitted. tests/dbus/conn-roster.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) commit c012e4acc7edf321df1c259382e9ed91af171cd8 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jan 19 11:13:09 2011 -0200 ContactManager: Always emit presencePublicationRequest if publish state is Ask even if there is no message. TelepathyQt4/contact-manager.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 2eed544a91b6aa012972464a109bd237bd4f445c Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 17 11:20:52 2011 -0200 Start 0.5.4 development CMakeLists.txt | 2 +- NEWS | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) commit ae69b2e6634d9152a3edb277662e37483128c15a Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 17 10:47:33 2011 -0200 Prepare release 0.5.3 CMakeLists.txt | 4 ++-- NEWS | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit 57eda30434ed0f17750840c1188977b919ff6987 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 17 10:47:24 2011 -0200 Update NEWS. NEWS | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit a72b1c92eca836169e3babfc8ade26a0fc1a59b4 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 17 10:23:59 2011 -0200 ProtocolParameter: Moved qHash to namespace Tp. Reviewed-by: Olli Salli (oggis) TelepathyQt4/protocol-parameter.cpp | 6 +++--- TelepathyQt4/protocol-parameter.h | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) commit a6b79dfda19d44e53ddac85694524b481fea862e Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 17 10:20:44 2011 -0200 Update NEWS NEWS | 3 +++ 1 file changed, 3 insertions(+) commit a21e9f83de9bd2c0260a4ec93d3f0779b1d67836 Merge: 5a195e3 59b3652 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 17 10:17:58 2011 -0200 Merge branch 'contact-factory' Reviewed-by: Olli Salli (oggis) commit 5a195e35570db207b823c9b19ca5d5c500048eb0 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 17 10:17:51 2011 -0200 Update NEWS NEWS | 1 + 1 file changed, 1 insertion(+) commit 3a2ff3fec9392e8729e315dad06e3355ef3773c1 Merge: acd7674 c19f3d6 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 17 10:16:24 2011 -0200 Merge branch 'immortal-handles' Reviewed-by: Olli Salli (oggis) commit 59b365236a93607024dd149a0e656d32b9f3cbc0 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 17 09:12:52 2011 -0200 ContactFactory: Do no add a new prepare method taking a list of contacts. TelepathyQt4/contact-factory.cpp | 15 +-------------- TelepathyQt4/contact-factory.h | 1 - 2 files changed, 1 insertion(+), 15 deletions(-) commit 7f294625060d2814b218748c382128512b30aa4e Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 17 09:11:53 2011 -0200 PendingContacts: Do not call ContactFactory::prepare for now. TelepathyQt4/pending-contacts.cpp | 31 ++----------------------------- TelepathyQt4/pending-contacts.h | 1 - 2 files changed, 2 insertions(+), 30 deletions(-) commit 41c744c5f4d6a56c20d381e624e0a66a61b6be60 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jan 12 17:02:02 2011 -0200 contact-factory test: Added test for ContactFactory. tests/dbus/CMakeLists.txt | 1 + tests/dbus/contact-factory.cpp | 134 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 135 insertions(+) commit c09d002945b6e101a5b3ddb61ecb3ac6c697591b Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jan 14 11:28:47 2011 -0200 ContactManager: Implicitly add contact factory features to contact features when requesting contacts. TelepathyQt4/contact-manager.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit f00df843d8f7729fdc44c26d06a09b4b9d12f37a Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jan 12 16:09:06 2011 -0200 PendingContacts: Use ContactFactory. TelepathyQt4/pending-contacts.cpp | 57 ++++++++++++++++++++++++++++++------- TelepathyQt4/pending-contacts.h | 1 + 2 files changed, 47 insertions(+), 11 deletions(-) commit 6b633733b8877ad7b9cabbfc6b0a833aa0fb6d30 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jan 12 16:08:53 2011 -0200 ContactManager: Use ContactFactory. TelepathyQt4/contact-manager.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 186355b3a256d25e87d2caab1a30e4baec3fc599 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jan 12 16:06:44 2011 -0200 ContactFactory: Stub no more. TelepathyQt4/contact-factory.cpp | 82 +++++++++++++++++++++++++++++++++----- TelepathyQt4/contact-factory.h | 16 ++++++-- TelepathyQt4/contact.h | 1 + 3 files changed, 86 insertions(+), 13 deletions(-) commit 97dae15bd9194d9e7b9694181fbc7a768522c492 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jan 12 15:32:33 2011 -0200 PendingContacts: Sanitize methods declaration/implementation. TelepathyQt4/pending-contacts.cpp | 168 ++++++++++++++++++------------------- 1 file changed, 84 insertions(+), 84 deletions(-) commit c19f3d6d76fd74c6b8613c6bf5bd1f7a3e5f6c0e Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 17 09:05:40 2011 -0200 Connection: Consider all handles held if immortal handles is true when calling referenceHandles. TelepathyQt4/connection.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b7ce9b772252305a797c5a76f60e964771af548f Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 17 09:03:56 2011 -0200 Connection: Always delete handleContext. TelepathyQt4/connection.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit a03df68a1bfb203ae2e0007c65428a31a7310707 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 17 09:03:36 2011 -0200 Connection: Properly initialize Private::immortalHandles. TelepathyQt4/connection.cpp | 1 + 1 file changed, 1 insertion(+) commit 44e33daf88e4d9bc0752f233b805cdffed421503 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jan 14 15:35:50 2011 -0200 Connection: Move hasImmortalHandles to ConnectionLowlevel and make it private. TelepathyQt4/connection-lowlevel.h | 2 ++ TelepathyQt4/connection.cpp | 38 +++++++++++++++++++----------------- TelepathyQt4/connection.h | 2 -- 3 files changed, 22 insertions(+), 20 deletions(-) commit bfef48533e4f49d96b983a168fdaba76794e4033 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jan 14 12:33:07 2011 -0200 Connection: Use ImmortalHandles property. TelepathyQt4/connection.cpp | 71 +++++++++++++++++++++++++++---------------- 1 file changed, 44 insertions(+), 27 deletions(-) commit bbdcc522333853e02e759c88e5e06a689b81e14b Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jan 14 12:32:45 2011 -0200 Connection: Added hasImmortalHandles method. TelepathyQt4/connection.cpp | 16 ++++++++++++++++ TelepathyQt4/connection.h | 2 ++ 2 files changed, 18 insertions(+) commit 626ef34bcea467727616d838ca5a0870d580425c Author: Olli Salli Date: Thu Jan 13 22:34:15 2011 +0200 Add default bus parameter to Tp::ProfileManager::create() TelepathyQt4/profile-manager.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit acd7674bead70e5eb7e57e995a35223d5a7afbb0 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 11 15:58:47 2011 -0200 Update NEWS NEWS | 1 + 1 file changed, 1 insertion(+) commit 936d6da2c553d5de7d1d592b09f0777aac8f1962 Author: Dominik Schmidt Date: Tue Jan 11 15:51:33 2011 -0200 Add qHash(ProtocolParameter) support. TelepathyQt4/protocol-parameter.cpp | 5 +++++ TelepathyQt4/protocol-parameter.h | 2 ++ 2 files changed, 7 insertions(+) commit 24b7a2264ca71119b99914e89fab279467941ab6 Author: Dominik Schmidt Date: Tue Jan 11 15:50:17 2011 -0200 Add ProtocolParameter::operator< support. TelepathyQt4/protocol-parameter.cpp | 5 +++++ TelepathyQt4/protocol-parameter.h | 1 + 2 files changed, 6 insertions(+) commit 2124621c10936bee56b51634508892a13fc06c4f Author: Xavier Claessens Date: Mon Jan 10 17:11:27 2011 +0100 Update NEWS NEWS | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit cc068fcc2b66965d8106a43e87bca74644bd4bb8 Author: Xavier Claessens Date: Mon Jan 10 14:18:25 2011 +0100 Add Tp::Contact::isContactInfoKnown() This is useful to know if ContactInfo is received. For protocols like XMPP that does not push the VCard, an explicit request is then needed using refreshInfo() or requestInfo(). TelepathyQt4/contact.cpp | 26 +++++++++++++++++++++++++- TelepathyQt4/contact.h | 1 + 2 files changed, 26 insertions(+), 1 deletion(-) commit 3cc82768eb0293f16d6e84c183e99fa85bdaa6c9 Author: Xavier Claessens Date: Mon Jan 10 14:17:10 2011 +0100 Add Tp::Contact::requestAvatarData() It force the avatar request in the case the token is unknown, has it happens for offline XMPP contacts TelepathyQt4/contact-manager.cpp | 6 +++--- TelepathyQt4/contact.cpp | 22 ++++++++++++++++++++++ TelepathyQt4/contact.h | 1 + 3 files changed, 26 insertions(+), 3 deletions(-) commit a10ad9c3b5ecbec1ae2d036d7ecac1bcff840f76 Author: Olli Salli Date: Mon Jan 10 16:00:45 2011 +0200 Update NEWS NEWS | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 7392aef2ad2f47f5bd0c16b40c27a42c8d9a6fe4 Merge: 3eebbce acc7353 Author: Olli Salli Date: Mon Jan 10 16:00:10 2011 +0200 Merge branch 'no-add-needed' Reviewed-by: Andre Magalhaes (andrunko) Reviewed-by: Xavier Claessens (xclaesse) commit acc7353b178196b75d5f2c7adde32e2bfb25e4a1 Author: Olli Salli Date: Mon Jan 10 15:37:34 2011 +0200 Link development builds with -Wl,--no-add-needed This increases forwards compatibility with distros using gold as the linker or otherwise using --no-add-needed/--no-copy-dt-needed-entries CMakeLists.txt | 1 + cmake/modules/FindDBusGLib.cmake | 48 +++++++++++++++++++++++++++++++++ cmake/modules/TelepathyDefaults.cmake | 8 ++++++ tests/dbus/CMakeLists.txt | 6 +++-- tests/lib/glib/CMakeLists.txt | 20 ++++++++------ 5 files changed, 73 insertions(+), 10 deletions(-) commit 6fdb82fd34788ec349405d78447a1cae90a09e69 Author: Olli Salli Date: Mon Jan 10 15:37:04 2011 +0200 Fix Werror etc disable mechanism to check for a release version number directly cmake/modules/TelepathyDefaults.cmake | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit c0e571e03b9ef33ede8c6429fcea4a3ea94a5858 Author: Olli Salli Date: Mon Jan 10 14:31:05 2011 +0200 Include QtCore explicitly in libraries for qt feature tests CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 3eebbce7ab0958c999315afdd49023907dd9a9f3 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 3 19:23:08 2011 -0200 Start 0.5.3 development CMakeLists.txt | 2 +- NEWS | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) commit 3bde637a9bf3ed80e245214819558c13b890a0ce Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 3 19:04:03 2011 -0200 Prepare release 0.5.2 CMakeLists.txt | 4 ++-- NEWS | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit 8d3bddcfc0792c96c5fbc43f24124c6d5f143c21 Author: Olli Salli Date: Mon Jan 3 16:55:08 2011 +0200 Update NEWS NEWS | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 75575aac40dd3feb2c7b29b2669b8bf3358b0916 Author: Olli Salli Date: Mon Jan 3 16:36:15 2011 +0200 Update NEWS NEWS | 3 +++ 1 file changed, 3 insertions(+) commit b11e7e339c930af46f7ca4a71013d9c93153f247 Merge: e805895 105a380 Author: Olli Salli Date: Mon Jan 3 16:34:20 2011 +0200 Merge branch 'roster-consistency' Reviewed-by: Andre Magalhaes (andrunko) commit 105a3801fa4669e42319cea889566136847b42ff Author: Olli Salli Date: Mon Jan 3 16:33:30 2011 +0200 function begin brace tests/dbus/conn-roster-groups.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit c9cc696567ce6d633405bcfc02cf50fef699e316 Author: Olli Salli Date: Mon Jan 3 16:25:46 2011 +0200 Make TestConnRosterGroups fake congestion less fscking slow tests/dbus/conn-roster-groups.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c8e9e5a194b483bc5f5777870ffd0911d0f2919e Author: Olli Salli Date: Mon Jan 3 16:24:30 2011 +0200 ContactManager: Use queued finish for all roster operations with new D-Bus API TelepathyQt4/contact-manager.cpp | 40 ++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 17 deletions(-) commit fc3a5f2285897b8e1188e7f45ae77e11614b0e9c Author: Olli Salli Date: Mon Jan 3 16:11:35 2011 +0200 Make TestConnRosterGroups very anal about event order consistency tests/dbus/conn-roster-groups.cpp | 116 +++++++++++++++++++++++++++---------- 1 file changed, 87 insertions(+), 29 deletions(-) commit a053aea1072f1b241cd06af3c598d29830519069 Author: Olli Salli Date: Mon Jan 3 14:59:12 2011 +0200 Order removePresenceSubscription finishes consistently with other roster events TelepathyQt4/contact-manager-internal.h | 15 +++++++ TelepathyQt4/contact-manager.cpp | 74 ++++++++++++++++++++++++++++++- TelepathyQt4/contact-manager.h | 3 ++ 3 files changed, 91 insertions(+), 1 deletion(-) commit a1594809eb4afddf97453e16c06969cbb3b91041 Author: Olli Salli Date: Mon Jan 3 14:58:08 2011 +0200 Conn.I.ContactList test CM: don't accept subscription requests if they're canceled tests/lib/glib/contactlist2/contact-list.c | 4 ++++ 1 file changed, 4 insertions(+) commit e805895e3dd77dc92ebf83295e44d60c78d6ca21 Merge: 8c07764 4ce8ec6 Author: Olli Salli Date: Mon Jan 3 12:53:24 2011 +0200 Merge branch 'roster-race' Reviewed-by: Andre Magalhaes (andrunko) commit 8c0776411f2465fce1c97db75685b1947b353635 Author: Olli Salli Date: Mon Jan 3 12:53:09 2011 +0200 Update NEWS NEWS | 2 ++ 1 file changed, 2 insertions(+) commit 6f952675848690bba9ab7814045b6ee3e3a745fe Merge: 1c08841 7f53919 Author: Olli Salli Date: Mon Jan 3 12:51:40 2011 +0200 Merge branch 'leave' Reviewed-by: Andre Magalhaes (andrunko) commit 4ce8ec6db65b62e0b73655a70010a8e87f2a07b4 Author: Olli Salli Date: Sat Jan 1 22:34:24 2011 +0200 TestConnRosterGroups: remove stale workaround for racy roster semantics fixed in the new API tests/dbus/conn-roster-groups.cpp | 9 --------- 1 file changed, 9 deletions(-) commit 063f1028a2ae3e76a4508ca0dcdf6ec697e75df4 Author: Olli Salli Date: Sat Jan 1 22:33:36 2011 +0200 TestConnRosterGroups: Wait for synthesized "accept auth request" event so it won't ruin things later tests/dbus/conn-roster-groups.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit 7f5391900be01a5c6be25b8fe8a00f36a806adec Author: Olli Salli Date: Sat Jan 1 20:53:04 2011 +0200 Make the requestLeave "already left" check more sensible TelepathyQt4/channel.cpp | 8 +++++--- tests/dbus/chan-group.cpp | 6 ++++++ 2 files changed, 11 insertions(+), 3 deletions(-) commit cba954bb2215de9412deddae44e380f7efb9ae5e Author: Olli Salli Date: Sat Jan 1 20:40:31 2011 +0200 Guard against leaking events between tests in TestChanGroup tests/dbus/chan-group.cpp | 5 +++++ 1 file changed, 5 insertions(+) commit 606b622176e736b3715215e01513b0f49f2808a3 Author: Olli Salli Date: Fri Dec 31 16:29:52 2010 +0200 Make PendingLeave ensure the member remove event has been picked up before finishing TelepathyQt4/channel-internal.h | 2 ++ TelepathyQt4/channel.cpp | 33 ++++++++++++++++++++++++++++++++- tests/dbus/chan-group.cpp | 20 +++----------------- 3 files changed, 37 insertions(+), 18 deletions(-) commit f34da7ebe26a127c4dfab575ff429dc0da1c4c14 Author: Olli Salli Date: Fri Dec 31 15:12:39 2010 +0200 Make StreamedMediaChannel::hangupCall use requestLeave TelepathyQt4/streamed-media-channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5a61354ac8d66065a90b8c3e5a471501746ff557 Author: Olli Salli Date: Fri Dec 31 14:49:06 2010 +0200 Add tests for leaving a Group tests/dbus/chan-group.cpp | 116 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 115 insertions(+), 1 deletion(-) commit e5bc23796aa76fd087cb3f015263c0146418f350 Author: Olli Salli Date: Fri Dec 31 14:48:20 2010 +0200 Make checking a channel's self remove info after it's closed not warn TelepathyQt4/channel.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 8ed37c6b0da009155aeb740dc03f1363ea47f3a2 Author: Olli Salli Date: Fri Dec 31 13:35:31 2010 +0200 Implement falling back to Close in Channel::requestLeave TelepathyQt4/CMakeLists.txt | 6 ++- TelepathyQt4/channel-internal.h | 47 +++++++++++++++++++++ TelepathyQt4/channel.cpp | 87 ++++++++++++++++++++++++++++++++++++--- TelepathyQt4/channel.h | 3 ++ 4 files changed, 136 insertions(+), 7 deletions(-) commit b8cd97e01ef22990c731dd7df4cda2a4ce28e90d Author: Olli Salli Date: Fri Dec 31 12:26:21 2010 +0200 Make requestLeave early-succeed if already left TelepathyQt4/channel.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) commit 37b8e3197c7455c79df6d83810bfdc2e612bc5a1 Author: Olli Salli Date: Thu Dec 30 20:41:50 2010 +0200 Add Channel::requestLeave for gracefully leaving channels TelepathyQt4/channel.cpp | 46 ++++++++++++++++++++++++++++++++++++++++++++++ TelepathyQt4/channel.h | 2 ++ 2 files changed, 48 insertions(+) commit 484fa9bf1d9aa5cc1ad77a757196f938f355568c Author: Olli Salli Date: Thu Dec 30 20:33:58 2010 +0200 Remove public channel-factory.h header from SRCS TelepathyQt4/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) commit 7787f7477577728fdd9c46af007368f23a573693 Author: Olli Salli Date: Thu Dec 30 19:25:18 2010 +0200 Update NEWS NEWS | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 1c08841fe6b25c6bafe1afa3f9cfc68d6d9ad01f Author: Andre Moreira Magalhaes (andrunko) Date: Fri Dec 31 11:31:15 2010 -0200 Update NEWS NEWS | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 58a450dad4c5706fa73282f01b6511cbd0f749a8 Merge: 994a3c1 5162f29 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Dec 31 11:22:31 2010 -0200 Merge branch 'conn-roster-leak' Reviewed-by: Olli Salli (oggis) commit 994a3c140969fab694288e9252dc31bcf09f73f9 Merge: 5e2e943 a398ff8 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Dec 31 11:22:05 2010 -0200 Merge branch 'contactlist' Reviewed-by: Olli Salli (oggis) commit 5162f291c8c4df953286868abec7ad8876d9f543 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 30 14:46:38 2010 -0200 Connection: Don't leak contact list group channels. TelepathyQt4/connection.cpp | 6 ++++++ TelepathyQt4/contact-manager.cpp | 14 ++++++++++++++ TelepathyQt4/contact-manager.h | 2 ++ 3 files changed, 22 insertions(+) commit fbbcd582657e5f863df981d91cfee7750b6fa68c Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 30 13:38:56 2010 -0200 Connection: Don't leak contact list channels. TelepathyQt4/connection.cpp | 4 ++++ 1 file changed, 4 insertions(+) commit 4968d0204fdcba2a9c3d9a7749623e9d1b26269f Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 30 13:38:15 2010 -0200 Connection: No need to keep a ref for connection in PendingConnect, use proxy() instead. TelepathyQt4/connection-internal.h | 2 -- TelepathyQt4/connection.cpp | 6 +++++- 2 files changed, 5 insertions(+), 3 deletions(-) commit d01975b318fc56191b4e658abd7a968935530b89 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 30 13:36:59 2010 -0200 Connection: Don't emit redundant statusChanged. TelepathyQt4/connection.cpp | 4 ++++ 1 file changed, 4 insertions(+) commit a398ff89229a9599e0d21f5976cb00f2a459eca2 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Dec 31 11:20:08 2010 -0200 Contact/Manager: Properly implement connectNotify. TelepathyQt4/contact-manager.cpp | 8 ++---- TelepathyQt4/contact.cpp | 53 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 53 insertions(+), 8 deletions(-) commit 548dcabc1d5d5ed62f3e38fdaef2135e3a6a7751 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 30 15:41:37 2010 -0200 Contact/Manager: Do not use details for publish/subscribe/block signals and use message for publish signals. TelepathyQt4/contact-manager.cpp | 57 ++++++++++++++++++++++++++++---------- TelepathyQt4/contact-manager.h | 6 ++++ TelepathyQt4/contact.cpp | 56 ++++++++++++++++++++++++------------- TelepathyQt4/contact.h | 23 ++++++++++----- 4 files changed, 101 insertions(+), 41 deletions(-) commit 284b22eb721e3f99a2e927b4aec874364f7d952b Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 30 14:58:23 2010 -0200 Contact: publish/subscription state is known unless they are set to SubscriptionStateUnknown. TelepathyQt4/contact.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) commit 6e42077552bb3a4603764679da70f6a8694c22fb Author: Andre Moreira Magalhaes (andrunko) Date: Mon Dec 20 10:28:46 2010 -0200 ContactManager: Ignore contact list group events until the initial groups are received. TelepathyQt4/contact-manager.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) commit 9ce3709ffd3091a384bbc462b093a600c87f027b Author: Andre Moreira Magalhaes (andrunko) Date: Mon Dec 20 10:23:06 2010 -0200 Renamed conn-roster2/conn-roster-groups2 to conn-roster/conn-roster-groups. tests/dbus/CMakeLists.txt | 4 +- tests/dbus/conn-roster-groups.cpp | 621 ++++++++++++++++++++++++++++++++++++ tests/dbus/conn-roster-groups2.cpp | 621 ------------------------------------ tests/dbus/conn-roster.cpp | 376 ++++++++++++++++++++++ tests/dbus/conn-roster2.cpp | 376 ---------------------- 5 files changed, 999 insertions(+), 999 deletions(-) commit 8db3a2f4c235c142c5f57e2b68e7395174126026 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Dec 20 10:21:05 2010 -0200 Renamed conn-roster/conn-roster-groups to conn-roster/conn-roster-groups-legacy. tests/dbus/CMakeLists.txt | 4 +- tests/dbus/conn-roster-groups-legacy.cpp | 679 ++++++++++++++++++++++++++++++ tests/dbus/conn-roster-groups.cpp | 679 ------------------------------ tests/dbus/conn-roster-legacy.cpp | 376 +++++++++++++++++ tests/dbus/conn-roster.cpp | 376 ----------------- 5 files changed, 1057 insertions(+), 1057 deletions(-) commit f114e62bb340a7840ea5a2d8f3fc0513776bcc50 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Dec 20 10:15:17 2010 -0200 Contact: Added new accessors to check if publish/subscription state is known/rejected/cancelled. TelepathyQt4/contact-manager.cpp | 35 ++++++++++++++--------------- TelepathyQt4/contact.cpp | 46 ++++++++++++++++++++++++++++---------- TelepathyQt4/contact.h | 12 ++++++---- 3 files changed, 59 insertions(+), 34 deletions(-) commit 8f19b7c7440225d65d1ca07be7061f5df3a0153f Author: Andre Moreira Magalhaes (andrunko) Date: Mon Dec 20 09:51:07 2010 -0200 ContactManager: Guarantee that contact list/group events are ordered using the same queue for all events. TelepathyQt4/contact-manager.cpp | 75 ++++++++++++++++++++++++++++++++------ 1 file changed, 64 insertions(+), 11 deletions(-) commit 5e2e943a37f4ae525ad7a69e73d47a1fb87f7148 Author: Olli Salli Date: Sun Dec 19 20:56:02 2010 +0200 Update NEWS NEWS | 3 +++ 1 file changed, 3 insertions(+) commit adad5e3701adc2811cbfea5f0ea5d85d8fca6a55 Merge: 388aaf5 c781044 Author: Olli Salli Date: Sun Dec 19 20:54:41 2010 +0200 Merge branch 'channel-close-reason' Reviewed-by: Andre Magalhaes (andrunko) commit 388aaf5559565a730e7396db7d10f30bd3bb2be7 Author: Olli Salli Date: Sun Dec 19 20:30:36 2010 +0200 Update NEWS NEWS | 2 ++ 1 file changed, 2 insertions(+) commit 113c4d08568a26938f95627266f6ec0236888bc2 Merge: 2d03494 9d93f12 Author: Olli Salli Date: Sun Dec 19 20:28:55 2010 +0200 Merge branch 'avoid-useless-cache-drop' Reviewed-by: Andre Magalhaes (andrunko) commit 9d93f12e06074dfea65960a7f41c21c631e30418 Author: Olli Salli Date: Sun Dec 19 20:03:06 2010 +0200 DBusProxyFactory: prevent useless cache drops from a race condition TelepathyQt4/dbus-proxy-factory.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) commit c781044b64b4abd4ed67ada73e4ffc62657318dd Author: Olli Salli Date: Sun Dec 19 19:35:21 2010 +0200 TestChanBasics: Test that the Channel invalidates itself with a reasonable error tests/dbus/chan-basics.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) commit 90763ff7b2f677dd2f40e403137623e1432031cd Author: Olli Salli Date: Sun Dec 19 19:33:51 2010 +0200 Use Cancelled as the default invalidation reason when a channel is Closed TelepathyQt4/channel.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) commit 1624ae180a4a0bf4f2e2358a557acd389426974e Author: Olli Salli Date: Sun Dec 19 19:15:28 2010 +0200 Make TestChanBasics less ridiculous tests/dbus/chan-basics.cpp | 109 ++++++++++++++++++++++---------------------- 1 file changed, 54 insertions(+), 55 deletions(-) commit 4d46c26ca96d1deef1c91d0771e42a4763b7cd6c Author: Olli Salli Date: Sun Dec 19 18:56:40 2010 +0200 Use a new error TP_QT4_ERROR_ORPHANED when a Channel's parent Conn dies TelepathyQt4/channel.cpp | 4 ++-- TelepathyQt4/constants.h | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) commit 0a361e3495b7586b90797f13c8dfbff5b7e59709 Author: Olli Salli Date: Sun Dec 19 18:40:17 2010 +0200 Guard all QLatin1String string constant macro expansions from unwanted XYZQLatin1String errors TelepathyQt4/constants.h | 14 +++++++------- tools/qt4-constants-gen.py | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) commit 2caf0468265bbf265957d9f0a62ea1242e19e595 Author: Olli Salli Date: Sun Dec 19 17:54:36 2010 +0200 Add QLatin1String versions of hand-written string constants TelepathyQt4/constants.h | 87 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) commit a160bc5b6f07ebd94088f2fc835db3b9cc0c3a22 Author: Olli Salli Date: Wed Dec 15 08:57:17 2010 +0200 Channel: Remove connection destroyed handling A channel holds a strong ref to its Connection, so by definition that won't be destroyed during the Channel's lifetime. This is probably clutter from the bad old times when there was only a weak ref. TelepathyQt4/channel.cpp | 12 ------------ TelepathyQt4/channel.h | 1 - 2 files changed, 13 deletions(-) commit 9b9d19ecb985a0dfb3530a559008811e8c5e3cf8 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Dec 17 13:40:26 2010 -0200 ContactManager: Remove dubious/wrong code to check if setUseFallbackContactList is called more than once. TelepathyQt4/contact-manager.cpp | 6 ------ 1 file changed, 6 deletions(-) commit ade2be7e54e052fce76197911fc6558bf0a23d6f Author: Andre Moreira Magalhaes (andrunko) Date: Fri Dec 17 12:46:40 2010 -0200 ContactManager: Call contactForHandles for all contacts that changed in the ContactList to avoid that they are deleted while new contacts are constructed. TelepathyQt4/contact-manager.cpp | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) commit 484ea2b29fded3eecd476eca1d33835e21d0913a Author: Andre Moreira Magalhaes (andrunko) Date: Fri Dec 17 12:38:38 2010 -0200 Connection: Remove debug used for development. TelepathyQt4/connection.cpp | 1 - 1 file changed, 1 deletion(-) commit ec7319012c922b5e692cf156b9ceac9349a615b7 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Dec 17 12:26:20 2010 -0200 Contact: Added publishStateDetails accessor. TelepathyQt4/contact.cpp | 7 +++++++ TelepathyQt4/contact.h | 1 + 2 files changed, 8 insertions(+) commit adc61f23c7981a68f2d5e9cab87aca51c67b0d05 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Dec 17 12:18:01 2010 -0200 Connection: Use deny channel for blocking when using Conn.Iface.ContactList. TelepathyQt4/connection.cpp | 60 ++++++++++++++++------- TelepathyQt4/contact-manager.cpp | 98 ++++++++++++++++++-------------------- TelepathyQt4/contact-manager.h | 5 +- 3 files changed, 91 insertions(+), 72 deletions(-) commit 19fafbc4bb771b4db863717829ac2cc74e862832 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 15 21:58:00 2010 -0200 conn-roster-groups2 test: Added test for Conn.Iface.ContactGroups. tests/dbus/CMakeLists.txt | 1 + tests/dbus/conn-roster-groups2.cpp | 621 ++++++++++++++++++++++++++++++++++++ 2 files changed, 622 insertions(+) commit 714552024f7f77407fc5d1c0b14a8a18f6578f49 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 15 21:57:24 2010 -0200 Connection/ContactManager/Contact: Added support for Conn.Iface.ContactGroups. TelepathyQt4/connection.cpp | 101 +++++++++++--- TelepathyQt4/connection.h | 2 + TelepathyQt4/contact-manager.cpp | 275 ++++++++++++++++++++++++++++++-------- TelepathyQt4/contact-manager.h | 9 ++ TelepathyQt4/contact.cpp | 5 + TelepathyQt4/contact.h | 3 + 6 files changed, 318 insertions(+), 77 deletions(-) commit dfa8224ba9df935e9560d09d6407e105f85a2b9e Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 15 20:16:44 2010 -0200 Fixed tests to work with tp-glib implementing immortal handles. tests/dbus/contacts.cpp | 39 --------------------------------------- tests/dbus/handles.cpp | 6 ------ 2 files changed, 45 deletions(-) commit d494cfb3a0c0194e79267ab8b5f5797ac23f0d35 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 15 20:09:24 2010 -0200 conn-roster2 test: Added test for Conn.Iface.ContactList. tests/dbus/CMakeLists.txt | 1 + tests/dbus/conn-roster2.cpp | 376 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 377 insertions(+) commit 5a965869f68b44a6358ae0e6577d43d3b370792c Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 15 20:00:17 2010 -0200 Imported contactlist example implementing Conn.Iface.ContactList from tp-glib. CMakeLists.txt | 4 +- tests/lib/glib/CMakeLists.txt | 1 + tests/lib/glib/contactlist2/CMakeLists.txt | 14 + tests/lib/glib/contactlist2/conn.c | 601 +++++++ tests/lib/glib/contactlist2/conn.h | 68 + tests/lib/glib/contactlist2/connection-manager.c | 73 + tests/lib/glib/contactlist2/connection-manager.h | 62 + tests/lib/glib/contactlist2/contact-list.c | 1731 ++++++++++++++++++++ tests/lib/glib/contactlist2/contact-list.h | 78 + .../glib/contactlist2/example_contact_list.manager | 23 + tests/lib/glib/contactlist2/protocol.c | 186 +++ tests/lib/glib/contactlist2/protocol.h | 68 + 12 files changed, 2907 insertions(+), 2 deletions(-) commit 5c88e695d15405f1fd5cfa2d6c78a1407660c2a9 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 15 19:57:57 2010 -0200 Connection/ContactManager/Contact: Added support for Conn.Iface.ContactList. TelepathyQt4/channel.h | 2 + TelepathyQt4/connection.cpp | 146 +++++++++++++++++--- TelepathyQt4/connection.h | 9 +- TelepathyQt4/contact-manager.cpp | 271 +++++++++++++++++++++++++++++++------ TelepathyQt4/contact-manager.h | 9 ++ TelepathyQt4/contact.cpp | 34 +++++ TelepathyQt4/contact.h | 1 + TelepathyQt4/referenced-handles.h | 1 + 8 files changed, 413 insertions(+), 60 deletions(-) commit 3eb738bec30aec83dc02409bfadea5960f536323 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 15 13:32:37 2010 -0200 ContactManager: Prepare to support Conn.Iface.ContactList. TelepathyQt4/connection.cpp | 6 +- TelepathyQt4/contact-manager.cpp | 600 ++++++++++++++++++++++++++++---------- TelepathyQt4/contact-manager.h | 21 +- 3 files changed, 454 insertions(+), 173 deletions(-) commit 2d034940507e6f722e15a95fd7bf6e5040f4e3c0 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Dec 17 10:56:29 2010 -0200 Update NEWS NEWS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit ff81fbc9af89cc5ae234658411f0bf0ae1875d8b Merge: e07a978 2226ce2 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Dec 17 10:53:28 2010 -0200 Merge branch 'filters' Reviewed-by: Olli Salli (oggis) commit e07a978b22b6131b2179105b1dc0f0d553f55e4c Merge: 4c9d8c0 4362905 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Dec 17 10:53:17 2010 -0200 Merge branch 'contact-sanitize' Reviewed-by: Olli Salli (oggis) commit 4c9d8c0e36aa6ccde48cb8595dacb08bb1ff934f Merge: 591f6ef 336cc7f Author: Andre Moreira Magalhaes (andrunko) Date: Fri Dec 17 10:52:40 2010 -0200 Merge branch 'trivia' Reviewed-by: Olli Salli (oggis) commit 591f6efafa8b3ffdaf7cfa4cb654b35149da79cf Author: Andre Moreira Magalhaes (andrunko) Date: Fri Dec 17 10:19:22 2010 -0200 Update NEWS NEWS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 30a280e08f3271ffed57fbc776dd3ec5a86c2c30 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Dec 17 10:16:14 2010 -0200 Install ConnectionManagerLowLevel header file. TelepathyQt4/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) commit 4362905adca6e756ca2b0bddd78a6bfc11199195 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 15 12:28:42 2010 -0200 Contact: Sanitize methods declaration/implementation. TelepathyQt4/contact.cpp | 98 +++++++++++++++++++++++----------------------- 1 file changed, 50 insertions(+), 48 deletions(-) commit 5f9a50494e8abab1fcc1ee86fb9f0b754b86f03b Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 15 12:23:39 2010 -0200 Contact: Updated copyright. TelepathyQt4/contact.cpp | 4 ++-- TelepathyQt4/contact.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit c739934ca133cee37b2166b595090b4bd9858727 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 15 11:38:43 2010 -0200 ContactManager: Sanitize methods declaration/implementation. TelepathyQt4/contact-manager.cpp | 687 +++++++++++++++++++------------------- TelepathyQt4/contact-manager.h | 2 +- 2 files changed, 348 insertions(+), 341 deletions(-) commit 336cc7fd4542267cd277179c6d4888ad1dfed013 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Dec 15 11:46:12 2010 -0200 Do not use deprecated tp_get_bus. tests/lib/glib/contact-search-chan.c | 6 +++--- tests/lib/glib/future/conference/chan.c | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) commit 2226ce29350d76f8935fff00671a3272c0eb3723 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 16 12:22:49 2010 -0200 account-basics test: Test Or/NotFilter. tests/dbus/account-basics.cpp | 6 ++++++ 1 file changed, 6 insertions(+) commit de0ab074ea7a1906863d91e60bcb5162e1a12a35 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 16 12:19:14 2010 -0200 Added NotFilter class. TelepathyQt4/CMakeLists.txt | 2 ++ TelepathyQt4/NotFilter | 13 ++++++++ TelepathyQt4/not-filter.h | 72 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 87 insertions(+) commit ed2de858b363caa5ef5e646ec200e480bdbfc52f Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 16 12:16:53 2010 -0200 Added OrFilter class. TelepathyQt4/CMakeLists.txt | 2 ++ TelepathyQt4/OrFilter | 13 +++++++ TelepathyQt4/or-filter.h | 82 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 97 insertions(+) commit 38874e096210aa313ada3908f6bfd21849d5b77f Author: Olli Salli Date: Wed Dec 8 18:08:32 2010 +0200 Start 0.5.2 dev CMakeLists.txt | 2 +- NEWS | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) commit ebcb8f9b62eed24d430e01f23dfa8d6b1ed58f66 Author: Olli Salli Date: Wed Dec 8 16:48:57 2010 +0200 Prepare release 0.5.1 CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 5e1df3e855d6e4846dbf4151a34db382b0fb00cd Author: Olli Salli Date: Wed Dec 8 15:40:15 2010 +0200 Update NEWS NEWS | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) commit b8fbd6e3704610517070dd3dc6b3189d571d27b7 Author: Olli Salli Date: Wed Dec 8 15:38:25 2010 +0200 Fix CDO::channelLost arg type names to include the Tp namespace TelepathyQt4/channel-dispatch-operation.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit ef97479bcbc1819111e35d7ebf9518cc98711ca4 Author: Olli Salli Date: Wed Dec 8 15:12:51 2010 +0200 AccountSet: Disconnect wrapper signals when we remove the wrapper If we don't, if the account object path is reused quickly, we might get a property change for the new account at that path before the old proxy realises it should invalidate itself and stop emitting signals. We get the properties to filter on correctly when the account is signaled as being re-added (after a new proxy is built), at which point AccountSet just checks all properties on the new proxy, so we don't lose any important events doing this. Reviewed-by: Andre Magalhaes (andrunko) TelepathyQt4/account-set.cpp | 1 + 1 file changed, 1 insertion(+) commit 2a913af254bad4767e0753370c0322533bb6b327 Author: Olli Salli Date: Wed Dec 8 14:52:36 2010 +0200 Update NEWS NEWS | 1 + 1 file changed, 1 insertion(+) commit 6cabc7f307eddf10935374db1657b89338feee52 Merge: 6061954 814c70d Author: Olli Salli Date: Mon Dec 6 20:16:03 2010 +0200 Merge branch 'memory-leaks' commit 814c70d8951292362e456c22db2c3b208e8e0c08 Author: Olli Salli Date: Mon Dec 6 20:15:24 2010 +0200 Add two additional tp-glib O(not a lot) "possibly lost" suppressions tools/tp-qt4-tests.supp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) commit e58aef0c56f4189feaae10786726ba56a870a11f Author: Olli Salli Date: Mon Dec 6 00:09:46 2010 +0200 Don't leak the TextChannel Acknowledge QDPCWatcher even if it doesn't finish TelepathyQt4/text-channel.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 77a63090cdafbd184431171435df35920e087999 Author: Olli Salli Date: Mon Dec 6 00:02:23 2010 +0200 Run the mainloop to auto-delete PendingReadys in TestProfileManager tests/dbus/profile-manager.cpp | 3 +++ 1 file changed, 3 insertions(+) commit c74903bdaaf53d0fb6b117181a58844e29c36c71 Author: Olli Salli Date: Sun Dec 5 23:57:19 2010 +0200 Don't leak unfinished PendingReady in TestDBusProxyFactory tests/dbus/dbus-proxy-factory.cpp | 5 +++++ 1 file changed, 5 insertions(+) commit 70aedd67d9d8c7b0911fc5d2d4ef10cf8e03b7f9 Author: Olli Salli Date: Sun Dec 5 23:53:23 2010 +0200 Don't leak contact info pointer arrays in TestContactsInfo tests/dbus/contacts-info.cpp | 2 ++ 1 file changed, 2 insertions(+) commit ef771926ec91d0229f9a88d641b0c251ba2f83bc Author: Olli Salli Date: Sun Dec 5 23:47:48 2010 +0200 Make the QDBus not calling dbus_shutdown suppression even less specific tools/tp-qt4-tests.supp | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) commit ca611d14e56c876f4799639be1b52c768dc3cec9 Author: Olli Salli Date: Sun Dec 5 23:46:39 2010 +0200 Don't leak avatar data in TestContactsAvatar tests/dbus/contacts-avatar.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit f08f668573988d51c674edd51c28a74042d7a662 Author: Olli Salli Date: Sun Dec 5 23:24:44 2010 +0200 Ignore tp-glib BaseConnectionManager legacy protocol object leak tools/tp-qt4-tests.supp | 11 +++++++++++ 1 file changed, 11 insertions(+) commit 10d92e066b29f7f5d30b11410ce207e3508b6424 Author: Olli Salli Date: Sun Dec 5 23:08:37 2010 +0200 Make processDBusQueue do an extra mainloop iteration so the PendingVoid is not reported as a leak tests/lib/test.cpp | 3 +++ 1 file changed, 3 insertions(+) commit bdd6d0601cb73aa147aaac31710eff5c3201e996 Author: Olli Salli Date: Sun Dec 5 23:05:27 2010 +0200 Add more tp-qt4 specific suppressions tools/tp-qt4-tests.supp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) commit 9ee344d73724e7d87a49da95983a177fa60e2068 Author: Olli Salli Date: Sun Dec 5 22:37:00 2010 +0200 Don't leak conference path C strings in TestChanConference tests/dbus/chan-conference.cpp | 1 + 1 file changed, 1 insertion(+) commit 35200ed8936831bc11e17f5d68aa95a0c64c429f Author: Olli Salli Date: Sun Dec 5 22:32:25 2010 +0200 Add valgrind suppressions (mostly from tp-glib) cmake/modules/TpQt4Macros.cmake | 2 + tools/telepathy-glib.supp | 390 +++++++++++++++++++++++++++++++++++++++ tools/tp-qt4-tests.supp | 10 + 3 files changed, 402 insertions(+) commit 69037cae011a7fe1b52f2d704723821f4e70772f Author: Olli Salli Date: Sun Dec 5 21:46:31 2010 +0200 Clear the event queue in Test shutdown code This enables pending operations which weren't yet finished/deleted to get deleted and not reported as leaks. tests/lib/test.cpp | 2 ++ 1 file changed, 2 insertions(+) commit ec4a8cb25e3e71d82421b3d504118a6e0a0a84b5 Author: Olli Salli Date: Tue Nov 30 23:01:15 2010 +0200 Don't leak caps hash table in TestContactsCapabilities tests/dbus/contacts-capabilities.cpp | 1 + 1 file changed, 1 insertion(+) commit ac9a23ca432b82c2ba676b9b9b6939db4aa021c3 Author: Olli Salli Date: Tue Nov 30 22:59:19 2010 +0200 Don't leak avatar data array in TestContactsAvatar tests/dbus/contacts-avatar.cpp | 2 ++ 1 file changed, 2 insertions(+) commit 1d374d092a3483a04dfde4585643f5a894e7d470 Author: Olli Salli Date: Tue Nov 30 22:17:03 2010 +0200 Don't leak the initial channels array in TestConferenceChan tests/dbus/chan-conference.cpp | 2 ++ 1 file changed, 2 insertions(+) commit f93e12278bb0d2431d6b5b02b7173f5e4dd9e02a Author: Olli Salli Date: Tue Nov 30 22:04:06 2010 +0200 Don't leak a useless GHashTable in conference test cm mergeable_conference_merge tests/lib/glib/future/conference/chan.c | 2 -- 1 file changed, 2 deletions(-) commit 97503ca1561aaef4393197112e7bab110270215b Author: Olli Salli Date: Tue Nov 30 22:02:16 2010 +0200 Don't leak old (initial) channels arrays in test cm conference channel tests/lib/glib/future/conference/chan.c | 3 +++ 1 file changed, 3 insertions(+) commit 5d4dab21e6ee1d48dcee65e00bfc8e2ac90a57fa Author: Olli Salli Date: Tue Nov 30 22:01:53 2010 +0200 Don't leak successive haveConnections (from connectionChanged) in TestAccountConnFact tests/dbus/account-connection-factory.cpp | 4 ++++ 1 file changed, 4 insertions(+) commit dedcec0142e2df23eb1a66f0f4a39edbff3cb840 Author: Olli Salli Date: Tue Nov 30 21:24:36 2010 +0200 Don't leak AccountSet's Private struct TelepathyQt4/account-set.cpp | 1 + 1 file changed, 1 insertion(+) commit 7e90b2a886a51ffe9b9dde3207a571e9db3d6ac2 Author: Olli Salli Date: Tue Nov 30 21:16:57 2010 +0200 Don't leak the Connect watcher in PendingConnect TelepathyQt4/connection.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 6061954d137e2c41d9803c4ac89b4ae893e2209f Author: Olli Salli Date: Mon Nov 22 16:11:44 2010 +0200 Update NEWS NEWS | 2 ++ 1 file changed, 2 insertions(+) commit 59e7a495a4d903983337c589ec355326ba8b6102 Merge: 85ee545 448cecc Author: Olli Salli Date: Mon Nov 22 16:10:46 2010 +0200 Merge branch '0.5-smchan-redundant-signals' Reviewed-by: Andre Magalhaes (andrunko) commit 448cecc2c50897360da68ba185a855760092cdb1 Author: Olli Salli Date: Mon Nov 22 16:08:47 2010 +0200 Fix coding style for added SMChannel test event handlers Conflicts: tests/dbus/streamed-media-chan.cpp tests/dbus/streamed-media-chan.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 02fe15d2e8598572c45e43e76077c89b7a669c8c Author: Olli Salli Date: Mon Nov 22 16:02:08 2010 +0200 Don't emit redundant SMChannel::{local,remote}SendingStateChanged (from 0.4) Conflicts: TelepathyQt4/streamed-media-channel.cpp TelepathyQt4/streamed-media-channel.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) commit b7a94d66bb123b64e6c5de31712ae11221ad4bac Author: Olli Salli Date: Mon Nov 22 15:36:59 2010 +0200 Test that only the correct StreamedMediaChan::[rl]SSC signals are emitted Conflicts: tests/dbus/streamed-media-chan.cpp tests/dbus/streamed-media-chan.cpp | 38 ++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) commit 85ee54512e94617371b45c89bfa9ce202c1643de Author: Olli Salli Date: Thu Nov 18 22:12:27 2010 +0200 Update NEWS NEWS | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 5b6c74b9cfa874bc7e6baae0139b53045321454d Author: Olli Salli Date: Thu Nov 18 22:10:24 2010 +0200 Begin 0.5.1 development CMakeLists.txt | 2 +- NEWS | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) commit a947bab40e306e236b87dc993645d056286fbf17 Author: Olli Salli Date: Thu Nov 18 21:19:50 2010 +0200 Fix crash using dangling (const!) iterator after remove in Conference code Reviewed-by: Will Thompson (wjt) TelepathyQt4/channel.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit 3c59989c5923b4c7874b9da9229fb91f5245d256 Author: Olli Salli Date: Tue Nov 16 21:00:03 2010 +0200 Actually make maintainer-upload-release work tools/CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit d3072e9927d0c9adce55c54ca78549264b55b775 Author: Olli Salli Date: Tue Nov 16 19:41:17 2010 +0200 Bump the ver to 0.5.0 and sover to 1 CMakeLists.txt | 14 ++++++-------- NEWS | 2 +- 2 files changed, 7 insertions(+), 9 deletions(-) commit c9b0ef8d9d6da417c38abd2dbfc86c8e21771d2b Author: Olli Salli Date: Tue Nov 16 19:26:59 2010 +0200 Update NEWS NEWS | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 90 insertions(+), 2 deletions(-) commit e6a1d05f01c805fc0e7c8a21105c26ebef2a7c8f Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 16 12:16:20 2010 -0200 AndFilter: Return false in matches if isValid returns false. Reviewed-by: Olli Salli (oggis) TelepathyQt4/and-filter.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit ba55e37158df810072d206364199dd04ff57c78e Merge: 810433e 87ab230 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 16 11:40:59 2010 -0200 Merge branch '0_5_0_approver' Reviewed-by: Olli Salli (oggis) commit 810433e1e7ab9d2c3fbca4c3b92b3315d7dcf701 Merge: 9b3aa6f 75dc1c1 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 16 11:32:31 2010 -0200 Merge branch '0_5_0_filters' Conflicts: tests/dbus/account-basics.cpp Reviewed-by: Olli Salli (oggis) commit 9b3aa6f5bd75b7101c783ea531c624e03c67dee0 Merge: 87bb8bc 0745321 Author: Olli Salli Date: Tue Nov 16 15:25:28 2010 +0200 Merge branch 'override-core-feature' Reviewed-by: Andre Magalhaes (andrunko) commit 074532110bcd117d3547974d008a4149bafaae70 Author: Olli Salli Date: Tue Nov 16 15:24:43 2010 +0200 Fix copy-pasta in AM ctor doc comment TelepathyQt4/account-manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b2d4fedb1f6c0e8e45c1f6efc3f21cc3f8cb1df0 Author: Olli Salli Date: Tue Nov 16 15:23:37 2010 +0200 Core feature override for AM TelepathyQt4/account-manager.cpp | 16 +++++++++++----- TelepathyQt4/account-manager.h | 3 ++- 2 files changed, 13 insertions(+), 6 deletions(-) commit 73bcfbe43803b015525978fd0a155b0857782758 Author: Olli Salli Date: Tue Nov 16 15:15:52 2010 +0200 Make it possible (and mandatory) to override the Connection implicit core feature TelepathyQt4/connection.cpp | 13 +++++++++---- TelepathyQt4/connection.h | 3 ++- 2 files changed, 11 insertions(+), 5 deletions(-) commit eca6a90b07db9c06365221c1cbbb8421a66a1603 Author: Olli Salli Date: Tue Nov 16 15:10:41 2010 +0200 Make it possible (and mandatory) to override the Account implicit core feature TelepathyQt4/account.cpp | 11 +++++++---- TelepathyQt4/account.h | 3 ++- 2 files changed, 9 insertions(+), 5 deletions(-) commit c460a8b8c13c79c8583229abd58c95603ae407ac Author: Olli Salli Date: Tue Nov 16 14:59:51 2010 +0200 Update I/OFTC::FeatureCore doc comment to indicate they're just delegating placeholders TelepathyQt4/incoming-file-transfer-channel.cpp | 4 +--- TelepathyQt4/outgoing-file-transfer-channel.cpp | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) commit 56fc6d0c2e4c63e994f5dafc415fdbaacdb04d92 Author: Olli Salli Date: Tue Nov 16 14:58:51 2010 +0200 Test that channel core feature override works tests/dbus/chan-contact-search.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 0a7266e4ef7f37a6759ef367d4908cbc94ad1e43 Author: Olli Salli Date: Tue Nov 16 14:58:28 2010 +0200 Copy-paste the FeatureCore runes for the placeholders delegating to them to prevent static init woes TelepathyQt4/incoming-file-transfer-channel.cpp | 2 +- TelepathyQt4/outgoing-file-transfer-channel.cpp | 2 +- TelepathyQt4/streamed-media-channel.cpp | 2 +- TelepathyQt4/text-channel.cpp | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) commit 76bd6381de5bd32791c425f715eb8aa85cea304e Author: Olli Salli Date: Tue Nov 16 14:58:09 2010 +0200 Don't forget to pass coreFeature in Channel ctor TelepathyQt4/channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 8f87119ee98d4eb7fe1204d7e45b974da38e95ec Author: Olli Salli Date: Tue Nov 16 14:45:42 2010 +0200 Fix copy-pasta in OutgoingFileTransferChannel::create doxygen comment TelepathyQt4/outgoing-file-transfer-channel.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 4c206ac2be3ac8af68e1be65e2a6eb087006231c Author: Olli Salli Date: Tue Nov 16 14:45:06 2010 +0200 Make it possible (and mandatory) to override the implicit core feature in Channel subclasses TelepathyQt4/channel.cpp | 8 ++++++-- TelepathyQt4/channel.h | 2 +- TelepathyQt4/contact-search-channel.cpp | 9 ++++++--- TelepathyQt4/contact-search-channel.h | 2 +- TelepathyQt4/file-transfer-channel.cpp | 9 ++++++--- TelepathyQt4/file-transfer-channel.h | 3 ++- TelepathyQt4/incoming-file-transfer-channel.cpp | 7 +++++-- TelepathyQt4/incoming-file-transfer-channel.h | 3 ++- TelepathyQt4/outgoing-file-transfer-channel.cpp | 7 +++++-- TelepathyQt4/outgoing-file-transfer-channel.h | 3 ++- TelepathyQt4/room-list-channel.cpp | 7 +++++-- TelepathyQt4/room-list-channel.h | 3 ++- TelepathyQt4/streamed-media-channel.cpp | 9 ++++++--- TelepathyQt4/streamed-media-channel.h | 3 ++- TelepathyQt4/text-channel.cpp | 9 ++++++--- TelepathyQt4/text-channel.h | 3 ++- 16 files changed, 59 insertions(+), 28 deletions(-) commit def4cc032eb1e72973d140a59950acf5dcd9630d Author: Olli Salli Date: Tue Nov 16 14:43:32 2010 +0200 Make {{I/O)FT,Text,SM}Channel::FeatureCore proper delegators to their parent class FeatureCore TelepathyQt4/incoming-file-transfer-channel.cpp | 2 +- TelepathyQt4/outgoing-file-transfer-channel.cpp | 2 +- TelepathyQt4/streamed-media-channel.cpp | 6 ++++++ TelepathyQt4/streamed-media-channel.h | 1 + TelepathyQt4/text-channel.cpp | 5 +++++ TelepathyQt4/text-channel.h | 1 + 6 files changed, 15 insertions(+), 2 deletions(-) commit 75dc1c17fdb3a866537fa0ada30fd873416772f2 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 16 10:41:00 2010 -0200 AccountManager/Set: Use Filter instead of List now that we have AndFilter. TelepathyQt4/account-manager.cpp | 40 +++++--------------- TelepathyQt4/account-manager.h | 1 - TelepathyQt4/account-set-internal.h | 7 ++-- TelepathyQt4/account-set.cpp | 70 +++++++++++++++-------------------- TelepathyQt4/account-set.h | 5 ++- tests/dbus/account-basics.cpp | 11 +++--- 6 files changed, 53 insertions(+), 81 deletions(-) commit 284df4df600d9eea0c8fdf0ca1390d495baec1ed Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 16 10:06:34 2010 -0200 Added AndFilter class. TelepathyQt4/AndFilter | 13 ++++++++ TelepathyQt4/CMakeLists.txt | 2 ++ TelepathyQt4/and-filter.h | 78 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 93 insertions(+) commit 87ab2302d98da52fc26f36566b31aa5b07083e62 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 16 10:02:24 2010 -0200 AbstractClientApprover: Remove addDispatchOperation channels arg in favor of CDO::channels. TelepathyQt4/abstract-client.cpp | 18 ------------------ TelepathyQt4/abstract-client.h | 1 - TelepathyQt4/client-registrar.cpp | 6 ++---- tests/dbus/client-factories.cpp | 3 +-- tests/dbus/client.cpp | 3 +-- 5 files changed, 4 insertions(+), 27 deletions(-) commit 87bb8bc7477c03f4ac0407bf2f4c72bb762d9324 Merge: a750555 0fa639b Author: Olli Salli Date: Tue Nov 16 13:42:04 2010 +0200 Merge branch 'lowlevel-sidecars' Reviewed-by: Will Thompson (wjt) Reviewed-by: Andre Magalhaes (andrunko) commit a750555e3ebec02d28b20677e890bfbfe4ef8ef5 Merge: 2d4782c 61c4445 Author: Olli Salli Date: Mon Nov 15 22:19:32 2010 +0200 Merge branch 'test-suite-deja-vu' Reviewed-by: Will Thompson (wjt) commit 0fa639bf81e1c6ba516c534cb4cc535e4f868bcc Author: Olli Salli Date: Mon Nov 15 22:07:48 2010 +0200 Fix crash possibilities in handle and connect Connection lowlevel methods when !isValid() TelepathyQt4/connection.cpp | 16 +++++++--------- TelepathyQt4/pending-handles.cpp | 6 ++++++ TelepathyQt4/pending-handles.h | 1 + 3 files changed, 14 insertions(+), 9 deletions(-) commit 4973fe7ad5a674e26f3fe6af6fca1e7600cdae5f Author: Olli Salli Date: Mon Nov 15 22:00:46 2010 +0200 Make examples build with Conn and CM lowlevel methods moved to the sidecars examples/file-transfer/receiver.cpp | 10 ++++++++-- examples/file-transfer/sender.cpp | 12 +++++++++--- examples/roster/roster-window.cpp | 11 ++++++++--- 3 files changed, 25 insertions(+), 8 deletions(-) commit 6e45d89b9b1f8ed662b1c0f99f7a3799ea24e770 Author: Olli Salli Date: Mon Nov 15 22:00:23 2010 +0200 Move CM::requestConnection to ConnectionManagerLowlevel TelepathyQt4/CMakeLists.txt | 2 + TelepathyQt4/ConnectionManagerLowlevel | 13 ++++++ TelepathyQt4/connection-manager-internal.h | 12 ++++++ TelepathyQt4/connection-manager-lowlevel.h | 63 ++++++++++++++++++++++++++++ TelepathyQt4/connection-manager.cpp | 42 ++++++++++++++++++- TelepathyQt4/connection-manager.h | 10 +++-- TelepathyQt4/pending-connection.cpp | 13 ++++++ TelepathyQt4/pending-connection.h | 3 +- TelepathyQt4/types.h | 3 ++ 9 files changed, 154 insertions(+), 7 deletions(-) commit a68b67c85cb033255c318782dacd5b499a98c4d9 Author: Olli Salli Date: Mon Nov 15 21:38:45 2010 +0200 Mark ConnectionLowlevel::Private as NO_EXPORT TelepathyQt4/connection.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 97ba98a44d73bc8ba1f96b3c3f01cadb9d5c4dd3 Author: Olli Salli Date: Mon Nov 15 21:28:26 2010 +0200 Properly install connection-lowlevel.h TelepathyQt4/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit ad27b53238edd9cdc54b0900fce4110720090f22 Author: Olli Salli Date: Mon Nov 15 02:13:48 2010 +0200 Move request(Dis)Connect to ConnectionLowlevel TelepathyQt4/connection-internal.h | 2 ++ TelepathyQt4/connection-lowlevel.h | 3 +++ TelepathyQt4/connection.cpp | 31 ++++++++++++++++++++++++++----- TelepathyQt4/connection.h | 3 --- tests/dbus/account-basics.cpp | 7 +++++-- tests/dbus/chan-basics.cpp | 4 ++-- tests/dbus/chan-conference.cpp | 7 +++++-- tests/dbus/chan-contact-search.cpp | 7 +++++-- tests/dbus/chan-group.cpp | 6 ++---- tests/dbus/client-factories.cpp | 5 ++++- tests/dbus/client.cpp | 7 ++++--- tests/dbus/conn-basics.cpp | 2 +- tests/dbus/conn-capabilities.cpp | 9 ++++++--- tests/dbus/conn-requests.cpp | 4 ++-- tests/dbus/conn-roster-groups.cpp | 11 +++++++---- tests/dbus/conn-roster.cpp | 7 +++++-- tests/dbus/contacts-avatar.cpp | 7 +++++-- tests/dbus/contacts-capabilities.cpp | 7 +++++-- tests/dbus/contacts-info.cpp | 7 +++++-- tests/dbus/contacts-location.cpp | 7 +++++-- tests/dbus/contacts.cpp | 8 +++----- tests/dbus/handles.cpp | 6 ++---- tests/dbus/streamed-media-chan.cpp | 4 ++-- tests/dbus/text-chan.cpp | 9 +++++---- 24 files changed, 111 insertions(+), 59 deletions(-) commit 20983ebfec5a946383571eba4ef8b21eafa97cb1 Author: Olli Salli Date: Mon Nov 15 01:34:54 2010 +0200 Move the handle request/reference API to ConnectionLowlevel TelepathyQt4/connection-lowlevel.h | 3 +++ TelepathyQt4/connection.cpp | 48 ++++++++++++++++++++++++++++++------ TelepathyQt4/connection.h | 3 --- TelepathyQt4/pending-contacts.cpp | 4 +-- TelepathyQt4/pending-handles.h | 2 +- tests/dbus/chan-basics.cpp | 2 +- tests/dbus/conn-requests.cpp | 2 +- tests/dbus/handles.cpp | 5 +++- 8 files changed, 52 insertions(+), 17 deletions(-) commit f5f84c4162ae422fa3b87416e57b608a6893ac4f Author: Olli Salli Date: Mon Nov 15 01:14:16 2010 +0200 Move Conn.I.Contacts low-level functionality from Connection to ConnectionLowlevel TelepathyQt4/connection-lowlevel.h | 4 +++ TelepathyQt4/connection.cpp | 54 ++++++++++++++++++++--------- TelepathyQt4/connection.h | 3 -- TelepathyQt4/contact-manager.cpp | 2 +- TelepathyQt4/pending-contact-attributes.h | 2 +- TelepathyQt4/pending-contacts.cpp | 3 +- tests/dbus/contacts.cpp | 13 ++++--- 7 files changed, 53 insertions(+), 28 deletions(-) commit ff403b8b54fb3944852693939fc0d9958d1d53fd Author: Olli Salli Date: Mon Nov 15 00:21:21 2010 +0200 Move Connection::{create,ensure}Channel to ConnectionLowlevel TelepathyQt4/connection-lowlevel.h | 3 ++ TelepathyQt4/connection.cpp | 53 +++++++++++++++++++++++++----------- TelepathyQt4/connection.h | 3 -- TelepathyQt4/contact-manager.cpp | 3 +- TelepathyQt4/pending-channel.h | 2 +- tests/dbus/chan-basics.cpp | 7 +++-- tests/dbus/chan-group.cpp | 5 +++- tests/dbus/conn-requests.cpp | 7 +++-- tests/dbus/streamed-media-chan.cpp | 18 ++++++------ 9 files changed, 66 insertions(+), 35 deletions(-) commit 68442f35f79cec44e4dc6fbf4cf93889bbf505e2 Author: Olli Salli Date: Sun Nov 14 23:51:38 2010 +0200 Move direct self presence access from Connection to ConnectionLowlevel TelepathyQt4/CMakeLists.txt | 5 ++- TelepathyQt4/ConnectionLowlevel | 13 ++++++ TelepathyQt4/channel.cpp | 1 + TelepathyQt4/connection-lowlevel.h | 68 ++++++++++++++++++++++++++++++ TelepathyQt4/connection.cpp | 80 +++++++++++++++++++++++++++++++----- TelepathyQt4/connection.h | 10 +++-- TelepathyQt4/pending-channel.cpp | 1 + TelepathyQt4/types.h | 3 ++ tests/dbus/conn-basics.cpp | 5 ++- tests/dbus/streamed-media-chan.cpp | 7 +++- 10 files changed, 176 insertions(+), 17 deletions(-) commit 61c4445dea34e4b9a45bf7dc143f822048b04821 Author: Olli Salli Date: Sun Nov 14 22:31:42 2010 +0200 Actually initialize PendingStreamedMediaStreams::streamsReady Otherwise the pending op won't reliably finish! The test suite was showing it not being initialized and hence the PendingStreamedMediaStreams never finishing occasionally (when the memory location in question didn't happen to be 0 already by accident). TelepathyQt4/streamed-media-channel.cpp | 1 + 1 file changed, 1 insertion(+) commit 37d815551b164fbc27276a101e8a999211aeb4b7 Author: Olli Salli Date: Sun Nov 14 22:24:12 2010 +0200 Eliminate races in TestConnRoster caused by the new stored list tracking code... N.B. The current roster test connection must be rewritten as soon as possible to not synthesize events arbitrarily - the replacement must have backdoors to trigger contacts accepting/rejecting/inviting/etc which can be used to reliably trigger roster events, so we can actually properly test the roster functionality. tests/dbus/conn-roster.cpp | 46 +++++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 18 deletions(-) commit 6654cba31eae278013f42b23ab3167e14dcdbc91 Author: Olli Salli Date: Sun Nov 14 21:50:26 2010 +0200 Make Test::processDBusQueue less vulnerable to leaked events exiting the mainloop early tests/lib/test.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) commit cc4bbea85b8efe13ea6e168287209be7d51408c5 Author: Olli Salli Date: Sun Nov 14 21:22:38 2010 +0200 Empty D-Bus queue between tests in TestConnBasics Otherwise the nameOwnerChanged from an earlier testcase might invalidate our new proxy! TelepathyQt4/connection.cpp | 7 ++++++- tests/dbus/conn-basics.cpp | 4 ++++ 2 files changed, 10 insertions(+), 1 deletion(-) commit c692017a0d4a2b43f6499e931a8a14368ad61240 Author: Olli Salli Date: Sun Nov 14 21:09:27 2010 +0200 Correctly initialize ReadinessHelper::Private::proxy Previously, it was always NULL as the ReadyObject base class which constructs ReadinessHelper is constructed before DBusProxy that inherits it - and hence dynamic_cast will state it's not a DBusProxy. Now has two distinct constructors, the one for DBusProxy is picked at compile time with static type information. TelepathyQt4/readiness-helper.cpp | 59 ++++++++++++++++++++++++++++++++----- TelepathyQt4/readiness-helper.h | 4 +++ TelepathyQt4/ready-object.cpp | 20 +++++++++++++ TelepathyQt4/ready-object.h | 1 + 4 files changed, 76 insertions(+), 8 deletions(-) commit 8ffa6541ed0daba9be77c20981defba0ba44abcb Author: Olli Salli Date: Sun Nov 14 21:08:24 2010 +0200 Make PendingConnect not wait for duplicate events TelepathyQt4/connection-internal.h | 3 +++ TelepathyQt4/connection.cpp | 32 +++++++++++++++++++++++++++++--- 2 files changed, 32 insertions(+), 3 deletions(-) commit 2d4782c7269e10563685fd2604084186d1b353cf Merge: fa1988f 6d4fc3d Author: Andre Moreira Magalhaes (andrunko) Date: Sat Nov 13 11:32:41 2010 -0200 Merge branch '0_5_0_misc' Reviewed-by: Will Thompson (wjt) commit fa1988fb5585a19a50bec126ce6601a72b72ff1d Merge: eefac35 f34d50e Author: Andre Moreira Magalhaes (andrunko) Date: Sat Nov 13 11:32:30 2010 -0200 Merge branch '0_5_0_contact_manager_sharedptr' Reviewed-by: Will Thompson (wjt) commit eefac35fb1b796bbb87f80afde04f6af9de3297a Merge: 0c23620 e329d7b Author: Andre Moreira Magalhaes (andrunko) Date: Sat Nov 13 11:31:44 2010 -0200 Merge branch '0_5_0_pending_op' Reviewed-by: Olli Salli (oggis) Reviewed-by: Will Thompson (wjt) commit 0c2362002090a8b66407442d3a92f0cd45bb7ff6 Merge: b50116b 1fdd40c Author: Andre Moreira Magalhaes (andrunko) Date: Sat Nov 13 11:31:32 2010 -0200 Merge branch '0_5_0_rename_contact_location' Reviewed-by: Will Thompson (wjt) commit b50116bd12a4be3b8dd1c371aabb0f9ae1bb9e5f Merge: 953a192 145cad7 Author: Andre Moreira Magalhaes (andrunko) Date: Sat Nov 13 11:31:03 2010 -0200 Merge branch '0_5_0_operator_equals' Reviewed-by: Will Thompson (wjt) commit 953a192cb91d793c3f6d57360ea3ba72ca125fdb Merge: d1ee0d2 6c66e79 Author: Andre Moreira Magalhaes (andrunko) Date: Sat Nov 13 11:30:49 2010 -0200 Merge branch '0_5_0_acc_factory_no_default_acc_feature' Reviewed-by: Will Thompson (wjt) commit d1ee0d2f53e63a31ef25de8052ca4375ec2eb563 Merge: e260f69 8b35b6b Author: Andre Moreira Magalhaes (andrunko) Date: Sat Nov 13 11:30:17 2010 -0200 Merge branch '0_5_0_trivia' Reviewed-by: Will Thompson (wjt) commit f34d50e6dad1b1d71c161a6fdb47b44efd44f733 Author: Andre Moreira Magalhaes (andrunko) Date: Sat Nov 13 11:29:36 2010 -0200 PendingContacts: Use connection manager as parent. TelepathyQt4/pending-contacts.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 6c66e798219b72d73ab0e58af5c98269523abbc2 Author: Andre Moreira Magalhaes (andrunko) Date: Sat Nov 13 11:27:02 2010 -0200 AccountManager: Enable Account::FeatureCore per default for create(bus) and create method that does not take bus. TelepathyQt4/account-manager.cpp | 4 ++-- TelepathyQt4/account-manager.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) commit 8b35b6bcfae50a495f65285ca3fb29b4c6bce7dc Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 11 20:05:40 2010 -0200 Account: Remove now fixed API/ABI break comment. TelepathyQt4/account.cpp | 3 --- 1 file changed, 3 deletions(-) commit fd4851a5cb78d20f084437dbb64eb18919759cf6 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 11 20:05:08 2010 -0200 ReadinessHelper: Use TP_QT4_ERROR_CANCELLED constant. TelepathyQt4/readiness-helper.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) commit 1fdd40c3fbbee43d0c3a851fd7ef470fd6b4f782 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 11 19:13:58 2010 -0200 Renamed ContactLocation to LocationInfo. TelepathyQt4/CMakeLists.txt | 6 +- TelepathyQt4/ContactLocation | 13 --- TelepathyQt4/LocationInfo | 13 +++ TelepathyQt4/contact-location.cpp | 220 ------------------------------------- TelepathyQt4/contact-location.h | 94 ---------------- TelepathyQt4/contact.cpp | 10 +- TelepathyQt4/contact.h | 6 +- TelepathyQt4/location-info.cpp | 220 +++++++++++++++++++++++++++++++++++++ TelepathyQt4/location-info.h | 94 ++++++++++++++++ tests/dbus/contacts-location.cpp | 10 +- 10 files changed, 343 insertions(+), 343 deletions(-) commit 145cad7af197f50580c2d0e82cbfa368bcc0860d Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 11 19:21:51 2010 -0200 ProtocolParameter: Return true in operator== if both instances are invalid and false if only one of them is. TelepathyQt4/protocol-parameter.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 1199fb2dcb3a9991f0a7a6e0579c18e6b0519bbf Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 11 19:18:12 2010 -0200 RequestableChannelClassSpec: Return true in operator== if both instances are invalid and false if only one of them is. TelepathyQt4/requestable-channel-class-spec.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 6d4fc3dcdd307768766f420a37ae22b211436289 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 11 20:01:54 2010 -0200 PendingChannel: Remove objectPath. TelepathyQt4/pending-channel.cpp | 20 -------------------- TelepathyQt4/pending-channel.h | 2 -- 2 files changed, 22 deletions(-) commit 0954ac436677b06f0a32036ad9e1ffde0b7655bb Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 11 20:01:42 2010 -0200 PendingAccount: Remove objectPath. TelepathyQt4/pending-account.cpp | 34 +++++++--------------------------- TelepathyQt4/pending-account.h | 2 -- 2 files changed, 7 insertions(+), 29 deletions(-) commit fb5cd860d029c73b19cc10918b89ebafaf140aa1 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 11 20:01:17 2010 -0200 PendingConnection: Remove busName/objectPath now that we always have a connection. TelepathyQt4/pending-connection.cpp | 43 ----------------------------------- TelepathyQt4/pending-connection.h | 4 ---- 2 files changed, 47 deletions(-) commit dae121c91f86205711225e2d94a735f92b8c72fd Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 11 20:00:05 2010 -0200 PendingConnection: Use factories. TelepathyQt4/pending-connection.cpp | 46 +++++++++++++++++++++-------------- TelepathyQt4/pending-connection.h | 1 + 2 files changed, 29 insertions(+), 18 deletions(-) commit 8d572421dc29d4f27f0e213f1e3e1ed341dd8b17 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 11 19:53:56 2010 -0200 ConnectionManager: Use factories. TelepathyQt4/account.cpp | 4 +- TelepathyQt4/connection-manager-internal.h | 9 +- TelepathyQt4/connection-manager.cpp | 126 ++++++++++++++++++++++++---- TelepathyQt4/connection-manager.h | 31 +++++-- 4 files changed, 143 insertions(+), 27 deletions(-) commit 0c9f61995f86d3c86e9547757a7f8cc2d9fe58d6 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 11 19:02:28 2010 -0200 ContactManager: Make it an Object and use ContactManagerPtr everywhere. TelepathyQt4/channel.cpp | 6 ++-- TelepathyQt4/connection.cpp | 10 +++--- TelepathyQt4/connection.h | 2 +- TelepathyQt4/contact-manager.cpp | 51 ++++++++++++-------------- TelepathyQt4/contact-manager.h | 20 ++++++----- TelepathyQt4/contact-search-channel.cpp | 2 +- TelepathyQt4/contact.cpp | 60 +++++++++++-------------------- TelepathyQt4/contact.h | 2 +- TelepathyQt4/pending-contacts.cpp | 16 ++++----- TelepathyQt4/pending-contacts.h | 8 ++--- TelepathyQt4/streamed-media-channel.cpp | 2 +- TelepathyQt4/types.h | 2 ++ examples/roster/roster-widget.cpp | 4 +-- tests/dbus/conn-roster-groups.cpp | 14 ++++---- tests/dbus/conn-roster.cpp | 2 +- 15 files changed, 90 insertions(+), 111 deletions(-) commit e329d7b757339bd7113ceedc67d0f10415389052 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 11 18:24:31 2010 -0200 AbstractInterface: Keep a ref to the parent if a proxy in the PendingOperations. TelepathyQt4/abstract-interface.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) commit a3465749b60ba54a116d97affb25e1b2dc1c104a Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 11 18:19:15 2010 -0200 PendingReady: Add a new proxy() method and make object() return the factory when using a factory. TelepathyQt4/account-manager.cpp | 5 +- TelepathyQt4/account.cpp | 5 +- TelepathyQt4/channel-dispatch-operation.cpp | 18 +++---- TelepathyQt4/channel-request.cpp | 2 +- TelepathyQt4/channel.cpp | 12 ++--- TelepathyQt4/client-registrar.cpp | 16 +++--- TelepathyQt4/connection-manager.cpp | 5 +- TelepathyQt4/connection.cpp | 8 ++- TelepathyQt4/dbus-proxy-factory.cpp | 3 +- TelepathyQt4/pending-account.cpp | 6 +-- TelepathyQt4/pending-channel.cpp | 4 +- TelepathyQt4/pending-ready.cpp | 71 ++++++++++++++++++--------- TelepathyQt4/pending-ready.h | 11 +++-- TelepathyQt4/streamed-media-channel.cpp | 3 +- tests/dbus/client-factories.cpp | 4 +- tests/dbus/dbus-proxy-factory.cpp | 38 +++++++++----- 16 files changed, 121 insertions(+), 90 deletions(-) commit 993e0f9fc501a2bd644b6056da52693658156c0b Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 11 01:15:02 2010 -0200 Make pending operations ref the object passed in the constructor. TelepathyQt4/abstract-interface.cpp | 6 +- TelepathyQt4/account-manager.cpp | 4 +- TelepathyQt4/account.cpp | 110 ++++++++++++----------- TelepathyQt4/channel-dispatch-operation.cpp | 13 +-- TelepathyQt4/channel-request.cpp | 6 +- TelepathyQt4/channel.cpp | 57 +++++++----- TelepathyQt4/client-registrar.cpp | 22 ++--- TelepathyQt4/connection-internal.h | 2 +- TelepathyQt4/connection-manager-internal.h | 2 +- TelepathyQt4/connection-manager.cpp | 25 ++---- TelepathyQt4/connection.cpp | 62 ++++++------- TelepathyQt4/contact-manager-internal.h | 6 +- TelepathyQt4/contact-manager.cpp | 97 ++++++++++++-------- TelepathyQt4/contact-search-channel-internal.h | 1 - TelepathyQt4/contact-search-channel.cpp | 17 ++-- TelepathyQt4/contact.cpp | 8 +- TelepathyQt4/dbus-proxy-factory.cpp | 2 +- TelepathyQt4/incoming-file-transfer-channel.cpp | 10 ++- TelepathyQt4/outgoing-file-transfer-channel.cpp | 10 ++- TelepathyQt4/pending-account.cpp | 20 ++--- TelepathyQt4/pending-channel-request-internal.h | 4 +- TelepathyQt4/pending-channel-request.cpp | 51 +++++------ TelepathyQt4/pending-channel-request.h | 11 ++- TelepathyQt4/pending-channel.cpp | 29 +++--- TelepathyQt4/pending-channel.h | 2 +- TelepathyQt4/pending-connection.cpp | 17 ++-- TelepathyQt4/pending-contact-attributes.cpp | 10 +-- TelepathyQt4/pending-contact-info.cpp | 12 +-- TelepathyQt4/pending-contacts.cpp | 8 +- TelepathyQt4/pending-handles.cpp | 31 +++---- TelepathyQt4/pending-operation.cpp | 33 ++++--- TelepathyQt4/pending-operation.h | 6 +- TelepathyQt4/pending-ready.cpp | 103 ++++++--------------- TelepathyQt4/pending-ready.h | 15 ++-- TelepathyQt4/pending-string-list.cpp | 8 +- TelepathyQt4/pending-string-list.h | 6 +- TelepathyQt4/pending-variant-map.cpp | 4 +- TelepathyQt4/pending-variant-map.h | 2 +- TelepathyQt4/pending-variant.cpp | 4 +- TelepathyQt4/pending-variant.h | 2 +- TelepathyQt4/profile-manager.cpp | 2 +- TelepathyQt4/readiness-helper.cpp | 24 ++--- TelepathyQt4/readiness-helper.h | 3 +- TelepathyQt4/ready-object.cpp | 10 +-- TelepathyQt4/ready-object.h | 3 +- TelepathyQt4/simple-pending-operations.h | 18 ++-- TelepathyQt4/streamed-media-channel.cpp | 63 +++++++------ TelepathyQt4/streamed-media-channel.h | 2 + TelepathyQt4/text-channel.cpp | 18 ++-- TelepathyQt4/text-channel.h | 5 +- examples/roster/roster-widget.cpp | 3 +- examples/roster/roster-window.cpp | 3 +- tests/dbus/account-basics.cpp | 65 ++++++++------ tests/dbus/client-factories.cpp | 2 +- tests/dbus/dbus-proxy-factory.cpp | 48 +++++----- tests/dbus/streamed-media-chan.cpp | 40 ++++++--- tests/lib/test.cpp | 4 +- 57 files changed, 582 insertions(+), 569 deletions(-) commit 528e876f455ad6398536c5065ed19f0733574cd4 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 11 19:30:25 2010 -0200 AccountFactory: Do not enable Account::FeatureCore per default. TelepathyQt4/account-factory.cpp | 4 ++-- TelepathyQt4/account-factory.h | 2 +- TelepathyQt4/account-manager.cpp | 2 +- TelepathyQt4/client-registrar.cpp | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) commit e260f697918ab9341751574e1b5ea4068b0ed973 Merge: 2607acb 9585fbf Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 11 20:23:35 2010 -0200 Merge branch 'contact_search_init_private_members' Reviewed-by: Will Thompson (wjt) commit 9585fbf030177ff37d29f04f5abb330acb2a94a0 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 11 19:06:04 2010 -0200 ContactSearchChannel: Properly initialize private members. TelepathyQt4/contact-search-channel.cpp | 2 ++ 1 file changed, 2 insertions(+) commit 2607acbacee833f459f065489e1c454316c7b626 Merge: 880cb3b 352bb9a Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 11 13:06:18 2010 -0200 Merge branch '0_5_0_channel_request_fix' Reviewed-by: Olli Salli (oggis) commit 352bb9ae862e61fdfbd456dc31c9cccb0d1c40c6 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 11 01:03:37 2010 -0200 ChannelRequest: Only create account if property account is non-empty. TelepathyQt4/channel-request.cpp | 2 +- tests/dbus/client.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 880cb3bc727315cb58d38899ff47719a2a4f4f14 Merge: 363d00e a5b8d7c Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 11 12:56:22 2010 -0200 Merge branch '0_5_0_contact_details' Reviewed-by: Olli Salli (oggis) commit a5b8d7c132183f1dc7b27f3a87f06bb8487151e2 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 11 12:55:51 2010 -0200 conn-roster test: Properly connect to Contact::subscription/publish/block change signals. tests/dbus/conn-roster.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 4be54fcb10201289e8c1b62f9a617707a94cdd2f Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 11 12:46:11 2010 -0200 roster example: Properly connect to Contact::subscription/publish/block change signals. examples/roster/roster-item.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit fc0465fc10ee9951c8f66d79f86dcab1a0a872ac Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 11 12:34:13 2010 -0200 Contact: Add details to subscription/publish/blockStateChanged signals. TelepathyQt4/channel.h | 3 +-- TelepathyQt4/contact-manager.cpp | 18 ++++++++---------- TelepathyQt4/contact-search-channel.h | 2 ++ TelepathyQt4/contact.cpp | 14 ++++++++------ TelepathyQt4/contact.h | 20 ++++++++++++-------- TelepathyQt4/types.h | 1 + 6 files changed, 32 insertions(+), 26 deletions(-) commit 363d00e365973889d887f7b195b4e16e4b70eca3 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 10 18:03:39 2010 -0200 file-transfer sender example: Properly build with contact changes. examples/file-transfer/sender.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 3e0726c56b6ccef9d66dd00e5ba85cd5a7d3b3fb Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 10 18:03:19 2010 -0200 accounts example: Properly build with account presence changes. examples/accounts/account-item.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit d05a22c0a73fc7ea3c4dc914231aae34138f76e1 Merge: bde7093 433582a Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 10 17:53:03 2010 -0200 Merge branch '0_5_0_remove_conf_draft' Conflicts: tests/dbus/chan-conference-draft.cpp Reviewed-by: Olli Salli (oggis) commit bde70932da3196bf5bf9e376813da30ed2e385ec Merge: 47dcdde 552d1ec Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 10 17:52:35 2010 -0200 Merge branch '0_5_0_fdo_28797' Reviewed-by: Olli Salli (oggis) commit 47dcddefad29bff798e0214a02f1f4175046eb5a Merge: 6a9149a 54d3dba Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 10 17:52:12 2010 -0200 Merge branch '0_5_0_fdo_27204' Reviewed-by: Olli Salli (oggis) commit 552d1ecb717b5787bbe27a89dfa80a6f4a4c32ae Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 10 17:46:00 2010 -0200 qt4-client-gen.py: Make staticInterfaceName() return a QLatin1String. TelepathyQt4/abstract-interface.cpp | 8 ++++---- TelepathyQt4/abstract-interface.h | 4 ++-- tools/qt4-client-gen.py | 8 ++++---- 3 files changed, 10 insertions(+), 10 deletions(-) commit 6a9149a9134cf6504971cd5c78096cdb22faf9bf Merge: 8d01f45 35c5b8d Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 10 17:42:11 2010 -0200 Merge branch '0_5_0_cr' Reviewed-by: Olli Salli (oggis) commit 35c5b8d4dcbe15d34b5bdfa52aa7a547f836c7f6 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 10 17:41:21 2010 -0200 AbstractClientObserver: Removed ObserverInfo::hasRecovering. TelepathyQt4/abstract-client.h | 1 - 1 file changed, 1 deletion(-) commit 8d01f456bdc326ce24daebaeef2a34c6c121dc53 Merge: e2bd0d9 efb1504 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 10 17:23:29 2010 -0200 Merge branch '0_5_0_presence' Conflicts: TelepathyQt4/account.cpp Reviewed-by: Olli Salli (oggis) commit e2bd0d9fef6f82a83279d179ecdde3848667cb47 Merge: b80c3d5 e52223f Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 10 17:22:42 2010 -0200 Merge branch '0_5_0_own_header' Reviewed-by: Olli Salli (oggis) commit b80c3d5d8e1bcac6c31bfd6d7e5a637c391e66c4 Merge: 12ce6b5 b4544a3 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 10 17:22:28 2010 -0200 Merge branch '0_5_0_remove_weakptr' Reviewed-by: Olli Salli (oggis) commit 12ce6b5970f90802fbac7264337e4832c9b61905 Merge: 9bd0ee3 e7b122f Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 10 17:22:14 2010 -0200 Merge branch '0_5_0_contact' Reviewed-by: Olli Salli (oggis) commit 9bd0ee3e49d4776b7567104db71fad4c2ebd1b64 Merge: c6ae8ed 733d2c0 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 10 17:21:30 2010 -0200 Merge branch '0_5_0_misc' Reviewed-by: Olli Salli (oggis) commit 8c0b6e122bcb49106a081abdffe27d6e1cabe625 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 10 17:06:02 2010 -0200 qt4-client-gen.py: Make the autogenerated interfaces actually use the timeout. tools/qt4-client-gen.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) commit 54d3dbafcb435a00aa60c88c836ea06d60474d5f Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 10 16:26:01 2010 -0200 qt4-constants-gen.py: Use singular or value-prefix for flag enum names and fallback to name - 's' if singular or value-prefix are not defined and name ends with 's'. tools/qt4-constants-gen.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) commit 0e2493d825d30d038d4d10795d5dae50d50170a3 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 10 13:29:21 2010 -0200 AbstractClientObserver: Use ObserverInfo. TelepathyQt4/abstract-client.cpp | 12 ++++-------- TelepathyQt4/abstract-client.h | 3 +-- TelepathyQt4/client-registrar-internal.h | 2 +- TelepathyQt4/client-registrar.cpp | 5 +---- tests/dbus/client-factories.cpp | 4 ++-- tests/dbus/client.cpp | 4 ++-- 6 files changed, 11 insertions(+), 19 deletions(-) commit bdf218a85d82833c62f2cdafb9e5d8e3a7c0f460 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 10 13:25:44 2010 -0200 AbstractClientObserver: Added high-level class for observer info. TelepathyQt4/abstract-client.cpp | 38 ++++++++++++++++++++++++++++++++++++++ TelepathyQt4/abstract-client.h | 20 ++++++++++++++++++++ 2 files changed, 58 insertions(+) commit 1920c1078676b561ff4dfa8c316de9d1e9dfbfd9 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 10 13:20:47 2010 -0200 AbstractClientHandler: Use HandlerInfo. TelepathyQt4/abstract-client.cpp | 12 ++++-------- TelepathyQt4/abstract-client.h | 3 +-- TelepathyQt4/client-registrar-internal.h | 2 +- TelepathyQt4/client-registrar.cpp | 19 ++++++------------- tests/dbus/client-factories.cpp | 4 ++-- tests/dbus/client.cpp | 4 ++-- 6 files changed, 16 insertions(+), 28 deletions(-) commit 2571dbea4da24d57718d1932586edc38af6c9c18 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 10 13:09:06 2010 -0200 AbstractClientHandler: Added high-level class for handler info. TelepathyQt4/abstract-client.cpp | 38 ++++++++++++++++++++++++++++++++++++++ TelepathyQt4/abstract-client.h | 17 +++++++++++++++++ 2 files changed, 55 insertions(+) commit 1d29fa4a538fe2b43ce0c2740c8a28acd5feb5d2 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 10 13:08:51 2010 -0200 AbstractClientHandler: Declare metatype for Capabilities. TelepathyQt4/abstract-client.h | 2 ++ 1 file changed, 2 insertions(+) commit b9ac619b63e2a8f1f699456471b86872afdf6fd8 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 10 13:06:21 2010 -0200 AbstractClientHandler: Follow coding style. TelepathyQt4/abstract-client.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit a26edff2da524af0925b3106b23b9e0b45c82f86 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 10 13:05:41 2010 -0200 AbstractClientHandler: Properly indent Capabilities definition. TelepathyQt4/abstract-client.h | 249 ++++++++++++++++++++-------------------- 1 file changed, 124 insertions(+), 125 deletions(-) commit 8edf29fe2e6b3990891568efc88f6a52563ad039 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 10 12:45:01 2010 -0200 ClientRegistrar: Remove singleton guarantees. TelepathyQt4/client-registrar.cpp | 60 +++---------------------------------- TelepathyQt4/client-registrar.h | 1 - 2 files changed, 4 insertions(+), 57 deletions(-) commit 422b17c327fed790065ef557dbe54b045024e78b Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 10 12:41:00 2010 -0200 ClientRegistrar: Remove API/ABI break comment. TelepathyQt4/client-registrar.cpp | 5 ----- 1 file changed, 5 deletions(-) commit 733d2c02acbc18bbc8ff5981170593cd8a6154e5 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 10 12:24:41 2010 -0200 Account: Added NOTIFY to connectionStatus property. TelepathyQt4/account.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a77ccccdfae580aa47cf780969702a48e4636ebe Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 10 12:20:06 2010 -0200 Account: Use Connection::ErrorDetails. TelepathyQt4/account.cpp | 14 +++++++------- TelepathyQt4/account.h | 6 ++---- 2 files changed, 9 insertions(+), 11 deletions(-) commit 713936493f361b19faf6622e309fa4dec87a90b8 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 10 12:12:25 2010 -0200 Connection: Remove Connection::Status. TelepathyQt4/account.cpp | 10 ++-- TelepathyQt4/account.h | 4 +- TelepathyQt4/connection-internal.h | 2 +- TelepathyQt4/connection.cpp | 93 +++++++++++++++++----------------- TelepathyQt4/connection.h | 12 +---- tests/dbus/account-basics.cpp | 2 +- tests/dbus/chan-basics.cpp | 22 ++++---- tests/dbus/chan-conference-draft.cpp | 2 +- tests/dbus/chan-conference.cpp | 2 +- tests/dbus/chan-contact-search.cpp | 2 +- tests/dbus/chan-group.cpp | 2 +- tests/dbus/client-factories.cpp | 2 +- tests/dbus/client.cpp | 2 +- tests/dbus/conn-basics.cpp | 22 ++++---- tests/dbus/conn-capabilities.cpp | 4 +- tests/dbus/conn-requests.cpp | 2 +- tests/dbus/conn-roster-groups.cpp | 8 +-- tests/dbus/conn-roster.cpp | 2 +- tests/dbus/contacts-avatar.cpp | 2 +- tests/dbus/contacts-capabilities.cpp | 2 +- tests/dbus/contacts-info.cpp | 2 +- tests/dbus/contacts-location.cpp | 2 +- tests/dbus/contacts.cpp | 22 ++++---- tests/dbus/handles.cpp | 22 ++++---- tests/dbus/streamed-media-chan.cpp | 2 +- tests/dbus/text-chan.cpp | 2 +- 26 files changed, 121 insertions(+), 130 deletions(-) commit 433582abbe004381dc441b1fc4af0cc77305076e Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 10 11:48:17 2010 -0200 Remove Conference.DRAFT interface definition. TelepathyQt4/future-channel.xml | 1 - spec/Channel_Interface_Conference_DRAFT.xml | 428 --------------------------- 2 files changed, 429 deletions(-) commit bd411965904fb0374aaec12b0077160559a668cc Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 10 11:48:06 2010 -0200 tests: Remove Conference.DRAFT support. tests/dbus/CMakeLists.txt | 1 - tests/dbus/chan-conference-draft.cpp | 324 ---------- tests/lib/glib/CMakeLists.txt | 3 +- tests/lib/glib/future/CMakeLists.txt | 1 - .../glib/future/conference-draft/CMakeLists.txt | 12 - tests/lib/glib/future/conference-draft/chan.c | 647 -------------------- tests/lib/glib/future/conference-draft/chan.h | 80 --- tests/lib/glib/future/extensions/channel.xml | 1 - 8 files changed, 1 insertion(+), 1068 deletions(-) commit 46af9639ee5a8cc12de155df7ffe20820b8694d1 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 10 11:47:42 2010 -0200 ConnectionCapabilities: Remove Conference.DRAFT support. TelepathyQt4/connection-capabilities.cpp | 34 ++++++------------------------ 1 file changed, 6 insertions(+), 28 deletions(-) commit d00f763779c801af340e5e498b2860082c356d41 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 10 11:47:19 2010 -0200 Channel: Remove Conference.DRAFT support. TelepathyQt4/channel.cpp | 138 ++++++++++++---------------------------------- 1 file changed, 35 insertions(+), 103 deletions(-) commit b03bdc66344daa1a839fb5f59c162b76c8e12142 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 10 11:46:59 2010 -0200 Account: Remove Conference.DRAFT support. TelepathyQt4/account.cpp | 62 ++++++---------------------------------------- 1 file changed, 8 insertions(+), 54 deletions(-) commit b4544a3a7ba3015aaae4d779d9ece7dbce0292ce Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 10 11:44:51 2010 -0200 Removed WeakPtr. TelepathyQt4/CMakeLists.txt | 3 +- TelepathyQt4/WeakPtr | 13 ---- TelepathyQt4/contact-manager.cpp | 4 +- TelepathyQt4/dbus-proxy-factory-internal.h | 3 +- TelepathyQt4/dbus-proxy-factory.cpp | 2 +- TelepathyQt4/message.cpp | 4 +- TelepathyQt4/referenced-handles.cpp | 10 +-- TelepathyQt4/shared-ptr.h | 104 ++-------------------------- TelepathyQt4/types.h | 2 - tests/ptr.cpp | 97 -------------------------- 10 files changed, 18 insertions(+), 224 deletions(-) commit e7b122f95f8b7d756298c0a95b8cbe6994b42f16 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 9 14:12:19 2010 -0200 Contact: Use Tp::Feature. TelepathyQt4/contact-factory.cpp | 6 +- TelepathyQt4/contact-factory.h | 14 +-- TelepathyQt4/contact-manager.cpp | 214 ++++++++++++++++------------------ TelepathyQt4/contact-manager.h | 12 +- TelepathyQt4/contact.cpp | 202 +++++++++++++++----------------- TelepathyQt4/contact.h | 26 ++--- TelepathyQt4/pending-contacts.cpp | 16 +-- TelepathyQt4/pending-contacts.h | 8 +- tests/dbus/conn-roster-groups.cpp | 6 +- tests/dbus/contacts-avatar.cpp | 2 +- tests/dbus/contacts-capabilities.cpp | 8 +- tests/dbus/contacts-info.cpp | 8 +- tests/dbus/contacts-location.cpp | 8 +- tests/dbus/contacts.cpp | 20 ++-- 14 files changed, 263 insertions(+), 287 deletions(-) commit 9975b22304fed6d242c1c208254a5ea0207fd940 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 9 13:10:54 2010 -0200 Contact: Make it a Object. TelepathyQt4/channel.cpp | 6 +++--- TelepathyQt4/connection.cpp | 2 +- TelepathyQt4/contact-manager.cpp | 6 +++--- TelepathyQt4/contact.cpp | 3 ++- TelepathyQt4/contact.h | 13 +++---------- TelepathyQt4/types.h | 2 +- tests/dbus/conn-roster-groups.cpp | 2 +- 7 files changed, 14 insertions(+), 20 deletions(-) commit 71c8ccfcbc2f9c0e09ff961af5df6058b31cd788 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Nov 5 18:54:49 2010 -0200 Fix fd.o#27204 - Codegen erroneously uses enums' value-prefix as the name for the C++ enum. tools/qt4-constants-gen.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit fc43ae4e303c92d4e224a7e6902cac2c33daea0e Author: Andre Moreira Magalhaes (andrunko) Date: Fri Nov 5 20:03:48 2010 -0200 Implement fd.o#28797 - generated client code should be able to set a non-default timeout. tools/qt4-client-gen.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit efb1504f67a78116e66036f401d82cfaa3bcdc4a Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 3 23:22:24 2010 -0200 Account: Use Presence. TelepathyQt4/account.cpp | 73 +++++++++++++++++++++------------------------- TelepathyQt4/account.h | 29 ++++++++---------- 2 files changed, 45 insertions(+), 57 deletions(-) commit e52223fc20632ffb6b4b7203e02cff5a3ff0fc00 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 3 20:18:33 2010 -0200 AvatarData: Move it to its own header. TelepathyQt4/AvatarData | 13 +++++++++++ TelepathyQt4/CMakeLists.txt | 2 ++ TelepathyQt4/avatar-data.h | 47 ++++++++++++++++++++++++++++++++++++++ TelepathyQt4/contact-manager.cpp | 1 + TelepathyQt4/contact.cpp | 1 + TelepathyQt4/contact.h | 1 + TelepathyQt4/types.h | 10 -------- tests/dbus/contacts-avatar.cpp | 1 + 8 files changed, 66 insertions(+), 10 deletions(-) commit bc0d7d931dcee287acaa35b58f91c81dd551bc43 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 3 19:47:38 2010 -0200 Added missing AccountFilter fancy header and make the inclusion of the fancy headers sufficient to use Account*Filter. TelepathyQt4/AccountCapabilityFilter | 2 +- TelepathyQt4/AccountFilter | 13 ++++++++++ TelepathyQt4/CMakeLists.txt | 5 +++- TelepathyQt4/account-capability-filter.h | 38 ++++++++++++++++++++++++++++++ TelepathyQt4/account-filter.h | 38 ++++++++++++++++++++++++++++++ TelepathyQt4/account-manager.cpp | 1 + TelepathyQt4/account-set.cpp | 1 + 7 files changed, 96 insertions(+), 2 deletions(-) commit c6ae8ed77d596b354a66153f9991fa301cb46c56 Merge: 7c28194 735c7a2 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 9 16:24:10 2010 -0200 Merge branch '0_5_0_remove_deprecated_autogen_props' Reviewed-by: Olli Salli (oggis) commit 7c28194f3025b277a7eca5d11eba6a7bbece9877 Merge: cf37c18 06691fb Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 9 16:15:53 2010 -0200 Merge branch '0_5_0_shared_ptr_bool' Reviewed-by: Olli Salli (oggis) commit cf37c18f566a838c3c161fdbea22383ca5e92e4b Merge: b5f562e 62df1aa Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 9 16:12:09 2010 -0200 Merge branch '0_5_0_shared' Conflicts: TelepathyQt4/connection-manager.h Reviewed-by: Olli Salli (oggis) commit b5f562e7ea40ea775db7b3b769dffe472c260dc1 Merge: 29c0b2a eb3709a Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 9 16:09:36 2010 -0200 Merge branch '0_5_0_object' Reviewed-by: Olli Salli (oggis) commit 29c0b2ad3a454d9ed171ddce3a000c66ec08de6b Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 9 16:07:16 2010 -0200 Account: Remove createConferenceMediaCall deprecated methods. TelepathyQt4/account.cpp | 26 -------------------------- TelepathyQt4/account.h | 10 ---------- 2 files changed, 36 deletions(-) commit d9837b9ddb30dc28ee1ece77ee4fbb18e8e88f24 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 9 14:20:27 2010 -0200 Account: Deprecate createConferenceMediaCall and added new createConferenceStreamedMediaCall. TelepathyQt4/account.cpp | 30 ++++++++++++++++++++++++++++-- TelepathyQt4/account.h | 14 ++++++++++++-- 2 files changed, 40 insertions(+), 4 deletions(-) commit eb3709a269bb79c3e6d9e44cb9ff2427aff7792c Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 9 16:05:05 2010 -0200 DBusProxyFactory: Make it a QObject. TelepathyQt4/CMakeLists.txt | 1 + TelepathyQt4/dbus-proxy-factory.cpp | 1 + TelepathyQt4/dbus-proxy-factory.h | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) commit 0519badf6e6ceb4ca6d66ea9b89bd0272dc9da4f Merge: bed85cf 8591850 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 9 14:37:14 2010 -0200 Merge branch '0_5_0_drop_call_support' Reviewed-by: Olli Salli (oggis) commit 06691fbc5feba4cfc770d2ce9d7af45788d5a8da Author: Marco Barisione Date: Tue Nov 9 12:53:24 2010 -0200 Fix the implicit bool conversion and make shared pointers usable in hash tables. Updated-by: Andre Moreira Magalhaes (andrunko) Reviewed-by: Andre Moreira Magalhaes (andrunko) TelepathyQt4/shared-ptr.h | 25 ++++- tests/CMakeLists.txt | 1 + tests/ptr.cpp | 248 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 272 insertions(+), 2 deletions(-) commit d1cda6a4322a20f4615f0e3cf8c7a1443482ec5e Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 9 12:10:24 2010 -0200 AccountSet: Make it an Object. TelepathyQt4/account-set.cpp | 4 ++-- TelepathyQt4/account-set.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit 5914ff03c2b67ba48a18aa29ed95ad16b7324c1d Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 9 12:10:05 2010 -0200 Account: Remove notify/propertyChanged. TelepathyQt4/account.cpp | 5 ----- TelepathyQt4/account.h | 6 ------ 2 files changed, 11 deletions(-) commit 65a694377ef0a68f3f5a22e5f7d7147edd218c80 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 9 12:00:05 2010 -0200 Factories: Use DBusProxyPtr and remove ugly casts. TelepathyQt4/account-factory.cpp | 4 +- TelepathyQt4/channel-factory.cpp | 11 +++-- TelepathyQt4/channel-factory.h | 6 ++- TelepathyQt4/connection-factory.cpp | 4 +- TelepathyQt4/dbus-proxy-factory-internal.h | 6 +-- TelepathyQt4/dbus-proxy-factory.cpp | 61 +++++++++++----------------- TelepathyQt4/dbus-proxy-factory.h | 13 +++--- TelepathyQt4/fixed-feature-factory.cpp | 2 +- TelepathyQt4/fixed-feature-factory.h | 2 +- TelepathyQt4/pending-channel.cpp | 2 +- 10 files changed, 49 insertions(+), 62 deletions(-) commit 4fcaae010f00fd9f43712215f4a4fe4b9f64c609 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 9 11:54:57 2010 -0200 PendingReady: Use DBusProxyPtr. TelepathyQt4/dbus-proxy-factory.cpp | 6 +++++- TelepathyQt4/pending-ready.cpp | 23 +++++++---------------- TelepathyQt4/pending-ready.h | 5 ++--- 3 files changed, 14 insertions(+), 20 deletions(-) commit 3389f3b9a05e5f48c150eccec1ee1dc9eafc4806 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 9 11:54:47 2010 -0200 Added new type DBusProxyPtr. TelepathyQt4/types.h | 2 ++ 1 file changed, 2 insertions(+) commit d1a8854bffcdfe0deb13b8d51bd39ac7a79ec662 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 9 11:28:54 2010 -0200 StreamedMediaChannel: Make StreamedMediaStream inherit Object. TelepathyQt4/streamed-media-channel.cpp | 2 +- TelepathyQt4/streamed-media-channel.h | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) commit 192a83c524322e792a8b9c5244dd7afd4d0d8221 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 9 11:10:09 2010 -0200 ClientRegistrar: Inherit Object. TelepathyQt4/client-registrar.cpp | 3 ++- TelepathyQt4/client-registrar.h | 5 ++--- 2 files changed, 4 insertions(+), 4 deletions(-) commit 987fc9bd664209fa5593c4f75e1faa86d7da0adc Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 9 11:08:23 2010 -0200 DBusProxy: Make it a Object and ReadyObject. TelepathyQt4/account-manager.cpp | 3 +-- TelepathyQt4/account-manager.h | 5 +---- TelepathyQt4/account.cpp | 3 +-- TelepathyQt4/account.h | 6 +----- TelepathyQt4/channel-dispatch-operation.cpp | 3 +-- TelepathyQt4/channel-dispatch-operation.h | 5 +---- TelepathyQt4/channel-request.cpp | 6 ++---- TelepathyQt4/channel-request.h | 5 +---- TelepathyQt4/channel.cpp | 3 +-- TelepathyQt4/channel.h | 5 +---- TelepathyQt4/connection-manager-internal.h | 4 +--- TelepathyQt4/connection-manager.cpp | 9 +++------ TelepathyQt4/connection-manager.h | 7 ++----- TelepathyQt4/connection.cpp | 3 +-- TelepathyQt4/connection.h | 5 +---- TelepathyQt4/dbus-proxy.cpp | 28 ++++++++++++++------------- TelepathyQt4/dbus-proxy.h | 20 ++++++++----------- TelepathyQt4/profile-manager.cpp | 2 +- TelepathyQt4/profile-manager.h | 5 ++--- tests/dbus/stateful-proxy.cpp | 5 ++--- 20 files changed, 47 insertions(+), 85 deletions(-) commit 0b30c5ae6e117fcd27c4fe42d1d168d0e08e1734 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 9 10:29:19 2010 -0200 Object: Added Object class, base class for all tp-qt4 QObject based classes. TelepathyQt4/CMakeLists.txt | 4 +++ TelepathyQt4/Object | 13 +++++++++ TelepathyQt4/object.cpp | 62 +++++++++++++++++++++++++++++++++++++++++++ TelepathyQt4/object.h | 62 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 141 insertions(+) commit bed85cf749ebc8d82ff42af50a66ba359a327163 Author: Xavier Claessens Date: Tue Nov 9 13:35:08 2010 +0100 Add back a Q_UNUSED removed by error in previous commit TelepathyQt4/contact-manager.cpp | 2 ++ 1 file changed, 2 insertions(+) commit 9ebed1f6377942dd2439f1264b91d6c01b7ea949 Author: Xavier Claessens Date: Tue Nov 9 13:08:41 2010 +0100 Remove wrong Q_UNUSED() TelepathyQt4/contact-manager.cpp | 8 -------- 1 file changed, 8 deletions(-) commit 8e36d74f80bf918e78d94b923b70c3e97c898570 Author: Xavier Claessens Date: Tue Nov 9 13:03:14 2010 +0100 Check for updates in the stored list, to update allKnownContacts correctly TelepathyQt4/contact-manager.cpp | 41 +++++++++++++++++++++++++++++++++++++- TelepathyQt4/contact-manager.h | 6 ++++++ 2 files changed, 46 insertions(+), 1 deletion(-) commit 62df1aa746054e5ea07094df09462b15c842007e Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 8 21:22:43 2010 -0200 ProtocolParameter: Declare metatype. TelepathyQt4/protocol-parameter.cpp | 40 +++++++++++++++++++++++++++++++++++ TelepathyQt4/protocol-parameter.h | 6 ++++++ 2 files changed, 46 insertions(+) commit d4341a0943ab6f62c7e6643429efd5d397034e56 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 8 21:22:28 2010 -0200 ProtocolInfo: Declare metatype. TelepathyQt4/protocol-info.h | 3 +++ 1 file changed, 3 insertions(+) commit 5c2a8b2d289e482085d555b8897918f3da7c9dca Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 8 21:22:04 2010 -0200 FileTransferChannelCreationProperties: Declare metatype. .../file-transfer-channel-creation-properties.cpp | 67 ++++++++++++++++++-- .../file-transfer-channel-creation-properties.h | 14 ++-- 2 files changed, 70 insertions(+), 11 deletions(-) commit 94b056c77027c600b2cf4e5e2142651446b7e072 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 8 21:20:59 2010 -0200 RequestableChannelClassSpec: Let's not crash if operator== and supports method are called from an invalid instance. TelepathyQt4/requestable-channel-class-spec.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) commit 074120b7893d37c5cbe821c81e5c5c8bd7bd872d Author: Kevin Ottens Date: Mon Nov 8 23:22:48 2010 +0100 Make it build with QT_STRICT_ITERATORS. Reviewed-by: Dario Freddi Reviewed-by: Andre Moreira Magalhaes TelepathyQt4/referenced-handles.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit d688b696b69b3eca55b946ce037c92dc991adea9 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 3 22:36:57 2010 -0200 Moved ProtocolInfo/Parameter to their own header/source files. TelepathyQt4/CMakeLists.txt | 6 +- TelepathyQt4/ProtocolInfo | 2 +- TelepathyQt4/ProtocolParameter | 2 +- TelepathyQt4/connection-manager.cpp | 377 ----------------------------------- TelepathyQt4/connection-manager.h | 88 +------- TelepathyQt4/protocol-info.cpp | 322 ++++++++++++++++++++++++++++++ TelepathyQt4/protocol-info.h | 90 +++++++++ TelepathyQt4/protocol-parameter.cpp | 113 +++++++++++ TelepathyQt4/protocol-parameter.h | 77 +++++++ 9 files changed, 613 insertions(+), 464 deletions(-) commit 1cec7549a84eb235d5d12a98e0c775cf6b756709 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 3 22:21:53 2010 -0200 ProtocolInfo: Make it implicit shared and use ProtocolInfo everywhere instead of ProtocolInfo *. TelepathyQt4/account.cpp | 35 ++---- TelepathyQt4/account.h | 7 +- TelepathyQt4/connection-manager-internal.h | 6 +- TelepathyQt4/connection-manager.cpp | 180 ++++++++++++++++++---------- TelepathyQt4/connection-manager.h | 14 ++- TelepathyQt4/profile.cpp | 4 +- TelepathyQt4/profile.h | 2 +- tests/dbus/account-basics.cpp | 12 +- tests/dbus/cm-basics.cpp | 82 ++++++------- 9 files changed, 196 insertions(+), 146 deletions(-) commit 9816668fddace5e2908ec44dee72a2b9dc793f0e Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 3 21:28:13 2010 -0200 ProtocolParameter: Make it implicit shared and use ProtocolParameter everywhere instead of ProtocolParameter *. TelepathyQt4/connection-manager.cpp | 57 ++++++++++++----------------------- TelepathyQt4/connection-manager.h | 11 ++++--- TelepathyQt4/profile.cpp | 10 +++--- tests/dbus/cm-basics.cpp | 36 +++++++++++----------- 4 files changed, 49 insertions(+), 65 deletions(-) commit 0cea1b81edea02685a44d1873485b43d4e675dcf Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 3 21:23:42 2010 -0200 Use ContactLocation everywhere instead of ContactLocation *. TelepathyQt4/contact.cpp | 23 +++++++---------------- TelepathyQt4/contact.h | 6 ++---- tests/dbus/contacts-location.cpp | 18 ++++++++---------- 3 files changed, 17 insertions(+), 30 deletions(-) commit 709cc04fa08e611e7156c55fc142917d52042fce Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 3 21:12:10 2010 -0200 Use Connection/ContactCapabilities everywhere instead of Connection/ContactCapabilities *. TelepathyQt4/account-set-internal.h | 6 ++-- TelepathyQt4/account-set.cpp | 23 +++------------ TelepathyQt4/account.cpp | 40 +++++++------------------- TelepathyQt4/account.h | 8 +++--- TelepathyQt4/connection-capabilities.cpp | 4 --- TelepathyQt4/connection-capabilities.h | 4 --- TelepathyQt4/connection-manager.cpp | 12 ++------ TelepathyQt4/connection-manager.h | 2 +- TelepathyQt4/connection.cpp | 14 ++++------ TelepathyQt4/connection.h | 3 +- TelepathyQt4/contact-capabilities.cpp | 4 --- TelepathyQt4/contact-capabilities.h | 4 --- TelepathyQt4/contact.cpp | 35 ++++++++++------------- TelepathyQt4/contact.h | 6 ++-- TelepathyQt4/generic-capability-filter.h | 4 +-- tests/dbus/account-basics.cpp | 33 ++++++++++------------ tests/dbus/cm-basics.cpp | 35 +++++++++++------------ tests/dbus/conn-capabilities.cpp | 45 ++++++++++++++---------------- tests/dbus/contacts-capabilities.cpp | 13 ++++----- 19 files changed, 106 insertions(+), 189 deletions(-) commit b6deab754f3190ae2889923d3dec30a23db1a56b Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 3 20:05:24 2010 -0200 ContactLocation: Make it implicit shared. TelepathyQt4/contact-location.cpp | 34 +++++++++++++++++++++------------- TelepathyQt4/contact-location.h | 13 +++++++++---- TelepathyQt4/contact.cpp | 2 +- 3 files changed, 31 insertions(+), 18 deletions(-) commit 2e9cc2096ced3b2b1a1adc43ec3a03c9b2eea5d1 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 3 14:00:29 2010 -0200 ContactCapabilities: Changed mPriv to be a QSharedDataPointer. TelepathyQt4/contact-capabilities.cpp | 4 ++++ TelepathyQt4/contact-capabilities.h | 3 +-- 2 files changed, 5 insertions(+), 2 deletions(-) commit ff042a6b5d6900c1aa6d7eeb065521bd7d541647 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 3 14:00:04 2010 -0200 ConnectionCapabilities: Changed mPriv to be a QSharedDataPointer. TelepathyQt4/connection-capabilities.cpp | 4 ++++ TelepathyQt4/connection-capabilities.h | 3 +-- 2 files changed, 5 insertions(+), 2 deletions(-) commit 4c6020e838b22b8082aee5eafa21939b194fa0bf Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 3 13:58:51 2010 -0200 CapabilitiesBase: Make it implicit shared. TelepathyQt4/capabilities-base.cpp | 16 +++------------- TelepathyQt4/capabilities-base.h | 3 +-- 2 files changed, 4 insertions(+), 15 deletions(-) commit 735c7a23adb44ebc4793e1914fccfeebd6c4e828 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Nov 5 05:34:51 2010 -0200 Do not generate synchronous getter/setters for properties. tests/dbus/dbus-properties.cpp | 2 -- tools/qt4-client-gen.py | 73 ++-------------------------------------- 2 files changed, 2 insertions(+), 73 deletions(-) commit 8591850f031edef7430840cadcb07ed0382d7e0a Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 8 18:59:54 2010 -0200 StreamedMediaChannel: Renamed MediaStreams to StreamedMediaStreams. TelepathyQt4/streamed-media-channel.cpp | 200 +++++++++++++++---------------- TelepathyQt4/streamed-media-channel.h | 57 +++++---- TelepathyQt4/types.h | 4 +- tests/dbus/streamed-media-chan.cpp | 64 +++++----- 4 files changed, 162 insertions(+), 163 deletions(-) commit cdd899c6c39ee86d118490087ad7a74bbf595d05 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Nov 5 07:33:28 2010 -0200 StreamedMediaChannel: Moved private classes declarations to .cpp and removed internal header. TelepathyQt4/CMakeLists.txt | 2 - TelepathyQt4/streamed-media-channel-internal.h | 92 ------------------------ TelepathyQt4/streamed-media-channel.cpp | 63 +++++++++++++++- 3 files changed, 61 insertions(+), 96 deletions(-) commit e8998096bd0d875cc7edb57105612fa4ea3caf80 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Nov 5 07:30:44 2010 -0200 Remove Call.DRAFT support completely. TelepathyQt4/channel-class-spec.cpp | 39 +++-------------------------------- TelepathyQt4/channel-factory.cpp | 22 -------------------- TelepathyQt4/future-channel.xml | 2 -- TelepathyQt4/future-misc.xml | 7 ------- 4 files changed, 3 insertions(+), 67 deletions(-) commit da4ad61a874f09eda201e12231406346777eb5a7 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Nov 5 07:23:30 2010 -0200 StreamedMediaChannel: Removed Call support. TelepathyQt4/streamed-media-channel-internal.h | 189 +-- TelepathyQt4/streamed-media-channel.cpp | 2117 +++--------------------- TelepathyQt4/streamed-media-channel.h | 216 +-- TelepathyQt4/types.h | 2 - tests/dbus/CMakeLists.txt | 1 - tests/dbus/streamed-media-chan-call.cpp | 918 ---------- tests/dbus/streamed-media-chan.cpp | 1 - tests/lib/glib/CMakeLists.txt | 1 - tests/lib/glib/future/CMakeLists.txt | 1 - tests/lib/glib/future/call/CMakeLists.txt | 23 - tests/lib/glib/future/call/call-channel.c | 1647 ------------------ tests/lib/glib/future/call/call-channel.h | 74 - tests/lib/glib/future/call/call-content.c | 412 ----- tests/lib/glib/future/call/call-content.h | 81 - tests/lib/glib/future/call/call-manager.c | 537 ------ tests/lib/glib/future/call/call-manager.h | 71 - tests/lib/glib/future/call/call-stream.c | 708 -------- tests/lib/glib/future/call/call-stream.h | 82 - tests/lib/glib/future/call/cm.c | 129 -- tests/lib/glib/future/call/cm.h | 73 - tests/lib/glib/future/call/conn.c | 421 ----- tests/lib/glib/future/call/conn.h | 78 - tests/lib/glib/future/call/manager-file.py | 23 - 23 files changed, 289 insertions(+), 7516 deletions(-) commit bad7a761c7249eed0ff4bd6f7668f669050645d4 Merge: 665c528 a9a971d Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 8 18:37:55 2010 -0200 Merge branch '0_5_0_enums' Reviewed-by: Olli Salli (oggis) commit 665c5289a2f1c15ccd51bd99a80377b2732ea686 Merge: bf03043 ef306be Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 8 18:37:32 2010 -0200 Merge branch '0_5_0_misc' Reviewed-by: Olli Salli (oggis) commit a9a971d534d5be12ab32558b55c04b28a86f9e4d Author: Andre Moreira Magalhaes (andrunko) Date: Fri Nov 5 18:49:57 2010 -0200 Properly indent enums. tools/qt4-constants-gen.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) commit 8f6a8180e02c8125dca3b3efeb5c22026cb77dbe Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 01:50:19 2010 -0200 Use enums instead of uint where appropriate. TelepathyQt4/account.cpp | 18 +++--- TelepathyQt4/channel-class-spec.cpp | 38 ++++++------ TelepathyQt4/channel-class-spec.h | 16 ++--- TelepathyQt4/channel.cpp | 25 ++++---- TelepathyQt4/channel.h | 30 +++++----- TelepathyQt4/connection.cpp | 73 ++++++++++++----------- TelepathyQt4/connection.h | 12 ++-- TelepathyQt4/pending-handles.cpp | 14 ++--- TelepathyQt4/pending-handles.h | 11 ++-- TelepathyQt4/referenced-handles.cpp | 10 ++-- TelepathyQt4/referenced-handles.h | 6 +- TelepathyQt4/requestable-channel-class-spec.cpp | 6 +- TelepathyQt4/requestable-channel-class-spec.h | 3 +- tests/profile.cpp | 2 +- tests/rccspec.cpp | 16 ++--- 15 files changed, 140 insertions(+), 140 deletions(-) commit dd6e20c2114f2c426a7110a80116364c0aceff80 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 01:50:06 2010 -0200 Added padding for all enums. tools/qt4-constants-gen.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) commit ef306bee02304ef439a206db45873fb2d6894436 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 11:53:08 2010 -0200 ClientRegistrar: Enable account FeatureCore in the create(bus) method. TelepathyQt4/client-registrar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5bb7ddb49ab651265c2883b974bc7dc05b8a8b92 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 11:53:01 2010 -0200 ClientRegistrar: Make create method taking factories have all default params. TelepathyQt4/client-registrar.h | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) commit fcebb3ceeb400cf6264949c59301deef7e40dff6 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 11:32:06 2010 -0200 TextChannel: Use full-qualified namespace for chatStateChanged signal. TelepathyQt4/text-channel.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 74b96c5f3dc075a4bd5f68a0386c2fb9671888d3 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 00:21:23 2010 -0200 Contact: Reorder destructor declaration. TelepathyQt4/contact.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 21e14589e100cfd01f6b9733549dc5649b7f185b Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 3 19:48:24 2010 -0200 Properly order types alphabetically. TelepathyQt4/types.h | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) commit bf030437ca852dde4f6c9faf330a44839df5a923 Merge: e409c4a eb3e11c Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 8 18:35:19 2010 -0200 Merge branch '0_5_0_cleanup' Reviewed-by: Olli Salli (oggis) commit eb3e11c4e6500de9b4a504724dff5049990a8d17 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 8 17:51:25 2010 -0200 client/client-factories tests: Properly sort capabilities when comparing. tests/dbus/client-factories.cpp | 4 +++- tests/dbus/client.cpp | 17 ++++++++++++----- 2 files changed, 15 insertions(+), 6 deletions(-) commit 371d58a024edaded987d4b2432946317fd649189 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 3 23:12:16 2010 -0200 StreamedMediaChannel: Do not use typeInterface. TelepathyQt4/streamed-media-channel-internal.h | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) commit 8cf056d9ab9b54eec055eaa55e372454dd96e2ef Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 02:21:59 2010 -0200 PendingContactInfo: Removed deprecated methods. TelepathyQt4/pending-contact-info.cpp | 18 ------------------ TelepathyQt4/pending-contact-info.h | 1 - 2 files changed, 19 deletions(-) commit c0d7696b6b44e26433749b85db6a0e1b6581fa4b Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 02:15:30 2010 -0200 Profile: Removed deprecated methods. TelepathyQt4/profile.cpp | 17 ----------------- TelepathyQt4/profile.h | 1 - tests/dbus/account-basics.cpp | 1 - tests/profile.cpp | 19 +++++++------------ 4 files changed, 7 insertions(+), 31 deletions(-) commit baf791b92d81617b87578dcddd218e037ecc9e83 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 02:14:39 2010 -0200 OptionalInterfaceFactory: Removed deprecated methods and made hasInterface(QString) const. TelepathyQt4/optional-interface-factory.h | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) commit 278cac5bfe73f840645ff62a65816cddb2581923 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 02:09:37 2010 -0200 PendingChannelRequest: Removed deprecated methods. TelepathyQt4/pending-channel-request.cpp | 74 +----------------------------- TelepathyQt4/pending-channel-request.h | 8 ---- 2 files changed, 1 insertion(+), 81 deletions(-) commit abadad38d98c6ba84da032ff12ccf391e07066c4 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 3 19:55:04 2010 -0200 GenericCapabilityFilter: Remove deprecated methods. TelepathyQt4/generic-capability-filter.h | 47 +++++++++--------------------- 1 file changed, 14 insertions(+), 33 deletions(-) commit de400468a03332f129ebc9ec1548b39457c17a07 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 3 23:12:06 2010 -0200 ConnectionManager: Removed optional interface convenience methods. TelepathyQt4/connection-manager.cpp | 9 --------- TelepathyQt4/connection-manager.h | 5 ----- 2 files changed, 14 deletions(-) commit 806f7d9f86859b732374456bff518400bc879b0a Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 00:24:16 2010 -0200 ConnectionManager: Removed deprecated signals. TelepathyQt4/contact-manager.cpp | 44 -------------------------------------- TelepathyQt4/contact-manager.h | 17 +-------------- 2 files changed, 1 insertion(+), 60 deletions(-) commit 9904b202453fb0d448434ebd24181f849da50d6d Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 3 22:53:36 2010 -0200 Contact: Removed deprecated methods/signals. TelepathyQt4/contact.cpp | 84 ------------------------------------------ TelepathyQt4/contact.h | 28 +++++--------- tests/dbus/contacts-info.cpp | 42 ++++++--------------- tests/dbus/contacts.cpp | 59 +++++++++++++++-------------- 4 files changed, 49 insertions(+), 164 deletions(-) commit 37b745ade8599ffc14cda28fe950d28968bfee29 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 3 23:11:07 2010 -0200 Connection: Removed optional interface convenience methods. TelepathyQt4/connection.cpp | 99 ---------------------------- TelepathyQt4/connection.h | 107 ------------------------------- tests/dbus/chan-basics.cpp | 2 - tests/dbus/conn-capabilities.cpp | 3 - tests/dbus/conn-requests.cpp | 2 - tests/dbus/contacts-avatar.cpp | 5 +- tests/dbus/streamed-media-chan-call.cpp | 6 +- tests/dbus/streamed-media-chan.cpp | 6 +- 8 files changed, 14 insertions(+), 216 deletions(-) commit bc01950a06e97c41d9f4291de827b1d86c4e6ac8 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 00:03:39 2010 -0200 Connection: Removed deprecated methods/signals. TelepathyQt4/connection.cpp | 111 ------------------------------------------- TelepathyQt4/connection.h | 14 ------ 2 files changed, 125 deletions(-) commit 61eaeec5358e38358ebfd3efbb59379e2df3db00 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 02:21:31 2010 -0200 ClientRegistrar: Removed deprecated methods. TelepathyQt4/client-registrar.cpp | 19 ------------------- TelepathyQt4/client-registrar.h | 1 - 2 files changed, 20 deletions(-) commit ba6a1413149cc280d4b2d4c08bab15f3b369a074 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 02:49:29 2010 -0200 ChannelRequest: Removed some unneeded logic now that we removed the deprecated methods. TelepathyQt4/channel-request.cpp | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) commit 9a2f2293eca2591291cb048b3ad5d6da714fe342 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 3 23:11:50 2010 -0200 ChannelRequest: Removed optional interface convenience methods. TelepathyQt4/channel-request.cpp | 11 ----------- TelepathyQt4/channel-request.h | 5 ----- 2 files changed, 16 deletions(-) commit ae6b301599e584a0709a17c6631242cdd58861ef Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 02:12:53 2010 -0200 ChannelRequest: Removed deprecated methods. TelepathyQt4/channel-request.cpp | 59 -------------------------------------- TelepathyQt4/channel-request.h | 8 ------ 2 files changed, 67 deletions(-) commit 1d1474b020781a39a08841c5ef22322f551cebc1 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 3 23:11:40 2010 -0200 ChannelDispatchOperation: Removed optional interface convenience methods. TelepathyQt4/channel-dispatch-operation.cpp | 13 ------------- TelepathyQt4/channel-dispatch-operation.h | 5 ----- 2 files changed, 18 deletions(-) commit bc90f7b7667f68ddf3da36997f4ac722830a6b13 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 02:11:35 2010 -0200 ChannelDispatchOperation: Removed deprecated methods. TelepathyQt4/channel-dispatch-operation.cpp | 80 --------------------------- TelepathyQt4/channel-dispatch-operation.h | 8 --- 2 files changed, 88 deletions(-) commit 7c331027e6dc5b92f4f6ea418c4c82df411eed38 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 3 14:12:12 2010 -0200 Capabilities: Removed deprecated methods. TelepathyQt4/capabilities-base.cpp | 55 ------------------------- TelepathyQt4/capabilities-base.h | 11 +---- TelepathyQt4/connection-capabilities.cpp | 66 ------------------------------ TelepathyQt4/connection-capabilities.h | 10 ----- tests/dbus/account-basics.cpp | 10 ----- tests/dbus/cm-basics.cpp | 14 ------- tests/dbus/conn-capabilities.cpp | 21 ---------- tests/dbus/contacts-capabilities.cpp | 6 --- 8 files changed, 1 insertion(+), 192 deletions(-) commit 52754be096c7a1052c544a65c7b381818900ab07 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 3 23:11:19 2010 -0200 Channel: Removed optional interface convenience methods. TelepathyQt4/channel.cpp | 188 ---------------------------------------------- TelepathyQt4/channel.h | 139 ---------------------------------- 2 files changed, 327 deletions(-) commit 48a8d317b8772fdb42c9be353f6f9019d38c2288 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 00:17:36 2010 -0200 Channel: Removed deprecated methods/signals. TelepathyQt4/channel.cpp | 115 +--------------------------------- TelepathyQt4/channel.h | 10 --- tests/dbus/chan-conference-draft.cpp | 22 ++----- tests/dbus/chan-conference.cpp | 22 ++----- 4 files changed, 10 insertions(+), 159 deletions(-) commit f2b3f7a474af55144f77a5bf5ce68db5e9fa7c64 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 02:25:16 2010 -0200 AccountSet: Removed deprecated methods. TelepathyQt4/account-set.cpp | 73 ----------------------------------------- TelepathyQt4/account-set.h | 15 --------- tests/dbus/account-basics.cpp | 22 ------------- 3 files changed, 110 deletions(-) commit 9a7271ba8d79c61d9848fadd22eb173584f51d75 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 3 23:10:46 2010 -0200 Account: Removed optional interface convenience methods. TelepathyQt4/account.cpp | 26 -------------------------- TelepathyQt4/account.h | 11 ----------- tests/dbus/account-basics.cpp | 11 +++++++---- 3 files changed, 7 insertions(+), 41 deletions(-) commit f0f3ffda96e6584537950862ba3429c07114adc1 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 3 23:49:20 2010 -0200 Account: Removed deprecated methods/signals. TelepathyQt4/account.cpp | 370 +---------------------------- TelepathyQt4/account.h | 80 +------ tests/dbus/account-basics.cpp | 11 +- tests/dbus/account-channel-dispatcher.cpp | 6 +- tests/dbus/account-connection-factory.cpp | 44 ++-- tests/dbus/dbus-properties.cpp | 2 +- 6 files changed, 36 insertions(+), 477 deletions(-) commit e662c03fa9db2f31a9958671c43282e8567e69c4 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 3 14:08:10 2010 -0200 AccountManager: Removed deprecated methods, updated docs and renamed methods returning AccountSet to not have a Set suffix. TelepathyQt4/account-manager.cpp | 463 ++++++++++++-------------------------- TelepathyQt4/account-manager.h | 94 +++----- tests/dbus/account-basics.cpp | 46 ++-- 3 files changed, 189 insertions(+), 414 deletions(-) commit 876b896648950fb7bbeaa45732e3d4a19b0480cc Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 02:09:58 2010 -0200 AbstractClient: Removed deprecated methods. TelepathyQt4/abstract-client.cpp | 223 ++------------------------------------ TelepathyQt4/abstract-client.h | 16 --- tests/dbus/client.cpp | 40 +++---- 3 files changed, 27 insertions(+), 252 deletions(-) commit e409c4a6f883b4fd565ea15da6a89c80e7fa63aa Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 8 18:32:50 2010 -0200 Account: Added NOTIFY to connection property. TelepathyQt4/account.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d0309c70bb0664a8f4a95921d1d4871455687cbd Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 8 18:15:37 2010 -0200 Channel: Deprecated hasFooConferenceInterface methods and add alternative methods. TelepathyQt4/channel.cpp | 65 ++++++++++++++++++++++++++++++++++++++++++++-- TelepathyQt4/channel.h | 12 ++++++--- 2 files changed, 71 insertions(+), 6 deletions(-) commit 10b910090b09af2b808c92e0016de65f398a2ca2 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 8 18:04:23 2010 -0200 AccountSet: Deprecated filters. TelepathyQt4/account-set.cpp | 22 +++++++++++++--------- TelepathyQt4/account-set.h | 5 +++-- 2 files changed, 16 insertions(+), 11 deletions(-) commit dae9720d77731847fbfd770e7bab02724f936e3b Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 8 17:59:41 2010 -0200 Account: Deprecated haveConnection. TelepathyQt4/account-set.cpp | 2 +- TelepathyQt4/account.cpp | 17 ++++++++++++----- TelepathyQt4/account.h | 5 +++-- 3 files changed, 16 insertions(+), 8 deletions(-) commit 4bf6d11def5fd9e40953483e2f2c3f16280b1fb9 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 8 11:30:05 2010 -0200 Start 0.5.0 development CMakeLists.txt | 4 ++-- NEWS | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) commit e6dcfe7707b4c41e66d9fe47a71f5c56b220394f Merge: a19786e 6b84ed7 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 8 11:28:21 2010 -0200 Merge branch 'trivia' Reviewed-by: Olli Salli (oggis) commit 6b84ed723b56ab525f743460f904a3de04ce544d Author: Andre Moreira Magalhaes (andrunko) Date: Fri Nov 5 20:07:47 2010 -0200 Remove extra blank line from auto generated methods. tools/qt4-client-gen.py | 1 - 1 file changed, 1 deletion(-) commit 7da255a8f1bd948eedd929db90264927747a00b0 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Nov 5 18:30:38 2010 -0200 StreamedMediaChannel: Added hangupCall(void) and deprecated hangupCall with arguments. TelepathyQt4/streamed-media-channel.cpp | 19 +++++++++++++++++++ TelepathyQt4/streamed-media-channel.h | 3 ++- 2 files changed, 21 insertions(+), 1 deletion(-) commit 2bd6c085bc98f520d5346216be101f1bf4718e3a Author: Andre Moreira Magalhaes (andrunko) Date: Fri Nov 5 18:30:21 2010 -0200 Account: Added createContactSearch and deprecated createContactSearchChannel. TelepathyQt4/account.cpp | 14 +++++++++++++- TelepathyQt4/account.h | 7 ++++++- 2 files changed, 19 insertions(+), 2 deletions(-) commit ee8e3e432449158593701b3df4abc9a74afebeff Author: Andre Moreira Magalhaes (andrunko) Date: Fri Nov 5 13:42:01 2010 -0200 Updated build instructions docs to properly refer to cmake. TelepathyQt4/main.dox | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 752ed312e1c39f2c6a621044eda7d6fdf613c502 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Nov 5 13:41:36 2010 -0200 Removed reference to call example from docs now that call example is removed. TelepathyQt4/examples.dox | 84 --------------------------------------------- 1 file changed, 84 deletions(-) commit 866b9e7b096a1407e06aabb704137a83026b993c Author: Andre Moreira Magalhaes (andrunko) Date: Fri Nov 5 13:38:54 2010 -0200 AccountManager: Document deprecated signals as deprecated. TelepathyQt4/account-manager.cpp | 6 ++++++ 1 file changed, 6 insertions(+) commit a19786edbfd81b4c9751588dca5c4816533be8cc Author: Andre Moreira Magalhaes (andrunko) Date: Fri Nov 5 08:05:03 2010 -0200 Start 0.3.15 development CMakeLists.txt | 4 ++-- NEWS | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) commit 2dbd4cd687a55ec5d8e373ceebc36cfb4458f748 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Nov 5 07:48:08 2010 -0200 Prepare release 0.3.14 CMakeLists.txt | 2 +- NEWS | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) commit b82a5800c8cd6be34f509fbd7575245bf1c5a00c Author: Andre Moreira Magalhaes (andrunko) Date: Fri Nov 5 07:44:58 2010 -0200 Properly install pending-variant-map.h. TelepathyQt4/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 735c45e80d0134df2b54e35bf692b87f055c5a6c Author: Andre Moreira Magalhaes (andrunko) Date: Fri Nov 5 06:01:03 2010 -0200 Update NEWS NEWS | 2 ++ 1 file changed, 2 insertions(+) commit afc86cfb6b6e94d604318a2b2959ceef232807dd Author: Olli Salli Date: Fri Nov 5 09:11:50 2010 +0200 Update NEWS NEWS | 8 ++++++++ 1 file changed, 8 insertions(+) commit 068181558c9a7a5d3e220485a5631db9d3b2e1dc Merge: 25d714d 0abfd05 Author: Olli Salli Date: Fri Nov 5 09:08:11 2010 +0200 Merge branch 'conference-mess' Reviewed-by: Andre Magalhaes (andrunko) commit 25d714d935c736fa2c587724e3287d8c1afaddcd Merge: e6c8cfd 034ccab Author: Andre Moreira Magalhaes (andrunko) Date: Fri Nov 5 05:04:18 2010 -0200 Merge branch 'presence' Reviewed-by: Olli Salli (oggis) commit e6c8cfd6ddf65046bfdbe2b565a4e121e917946b Merge: bd6b4ec f0be07d Author: Andre Moreira Magalhaes (andrunko) Date: Fri Nov 5 05:03:56 2010 -0200 Merge branch 'metatype' Reviewed-by: Olli Salli (oggis) commit 0abfd0512879919aa472ecd415a22f3282504351 Author: Olli Salli Date: Fri Nov 5 00:40:59 2010 +0200 Add unnamed channel classes to the ChannelFactory mapping too TelepathyQt4/channel-factory.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) commit c9da4514a45f54a9308a08c3bd32fdac10a2a271 Author: Olli Salli Date: Fri Nov 5 00:31:27 2010 +0200 Add generic ChannelFactory::setSubclassFor TelepathyQt4/channel-factory.h | 6 ++++++ 1 file changed, 6 insertions(+) commit af552ab5c6738ef6b00e950f8e0b16361b59f666 Author: Olli Salli Date: Fri Nov 5 00:24:10 2010 +0200 Add empty line missing from channel-class-spec.cpp TelepathyQt4/channel-class-spec.cpp | 1 + 1 file changed, 1 insertion(+) commit d7a3a8f9eac2ce76066374a65db5bd6428a9bff7 Author: Olli Salli Date: Thu Nov 4 21:07:44 2010 +0200 ChannelClassSpec: Add unnamed (THT == None) variants for the static instances where it makes sense TelepathyQt4/channel-class-spec.cpp | 83 +++++++++++++++++++++++++++++++++++ TelepathyQt4/channel-class-spec.h | 12 +++++ 2 files changed, 95 insertions(+) commit 40e2292eb175cc9f49713cad923255652af7910e Author: Olli Salli Date: Thu Nov 4 20:19:46 2010 +0200 ConnCaps: Fix conference handling TelepathyQt4/connection-capabilities.cpp | 4 ---- 1 file changed, 4 deletions(-) commit dd66b017412ac561c9ab39bb32b8db99ec9a9ca9 Author: Olli Salli Date: Thu Nov 4 20:10:10 2010 +0200 ConnCaps: Use RCCSpec static const instances TelepathyQt4/connection-capabilities.cpp | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) commit b2b9b23fb93a5a3d1529989d19875bb248823a64 Author: Olli Salli Date: Thu Nov 4 20:01:02 2010 +0200 CapabilitiesBase: use RCCSpec static const instances TelepathyQt4/capabilities-base.cpp | 39 +++++------------------------------- 1 file changed, 5 insertions(+), 34 deletions(-) commit 156459681c65a47a8e04bd7f10162f41175c9811 Author: Olli Salli Date: Thu Nov 4 19:55:28 2010 +0200 Sanitize RCCSpec handling of conferences TelepathyQt4/requestable-channel-class-spec.cpp | 16 ++-------------- tests/rccspec.cpp | 14 ++++---------- 2 files changed, 6 insertions(+), 24 deletions(-) commit bd6b4ece51d271a52fb877c4b851d5a4b82ac648 Author: Olli Salli Date: Thu Nov 4 18:40:37 2010 +0200 Update NEWS NEWS | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) commit bb6fd79cb76e34b9ecff8bb0d715bf1584182548 Merge: efd7307 7502531 Author: Olli Salli Date: Thu Nov 4 18:33:07 2010 +0200 Merge branch 'new-props-api' Reviewed-by: Olli Salli (oggis) Reviewed-by: Andre Magalhaes (andrunko) commit 750253170c43466e553b652ed7377a4e59c9ee8d Author: Olli Salli Date: Thu Nov 4 18:28:21 2010 +0200 Fine-tune generated interface requestAllProperties documentation tools/qt4-client-gen.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 051df0e16f30722c84d4821406291072a97adebd Author: Olli Salli Date: Thu Nov 4 18:27:48 2010 +0200 Use QL1S interface constants in AbstractInterface::internal*Propert* TelepathyQt4/abstract-interface.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 379f0904ffb467a4d40e56e6452462611eea437b Author: Olli Salli Date: Thu Nov 4 18:18:42 2010 +0200 Have the property request API in AbstractInterface take QStrings instead of C strings TelepathyQt4/abstract-interface.cpp | 8 ++++---- TelepathyQt4/abstract-interface.h | 4 ++-- tools/qt4-client-gen.py | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) commit eed958689529c94e133fa4eea7af50435962e23b Author: Olli Salli Date: Thu Nov 4 18:12:48 2010 +0200 Make new async interface property getters const-qualified TelepathyQt4/abstract-interface.cpp | 4 ++-- TelepathyQt4/abstract-interface.h | 4 ++-- tools/qt4-client-gen.py | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) commit eda8fee82f3eee494507cc831f269844d7414e6a Author: Olli Salli Date: Thu Nov 4 18:02:39 2010 +0200 Fix copyright years in PendingVariantMap TelepathyQt4/pending-variant-map.cpp | 4 ++-- TelepathyQt4/pending-variant-map.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit 034ccab8b1800d65eb6ec3cdf4639998bd9ccef6 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 3 23:22:06 2010 -0200 Presence: Added barePresence method. TelepathyQt4/presence.cpp | 9 +++++++++ TelepathyQt4/presence.h | 2 ++ 2 files changed, 11 insertions(+) commit 758338f35b9a502350dbb96468f10e646a9697d1 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 3 20:12:20 2010 -0200 Contact: Do not include Presence in the public header. TelepathyQt4/contact.cpp | 1 + TelepathyQt4/contact.h | 2 +- examples/file-transfer/sender.cpp | 1 + examples/roster/roster-item.cpp | 2 ++ 4 files changed, 5 insertions(+), 1 deletion(-) commit f0be07dca20614fd036a422262496b1d06673335 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 12:48:34 2010 -0200 RequestableChannelClassSpec: Declare Qt metatype. TelepathyQt4/requestable-channel-class-spec.h | 3 +++ 1 file changed, 3 insertions(+) commit 6c4800c4210a0c7287955a4657c0adb18701b139 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 12:48:22 2010 -0200 ReferencedHandles: Declare Qt metatype. TelepathyQt4/referenced-handles.h | 2 ++ 1 file changed, 2 insertions(+) commit 68dd71f5f2fccf7d599d0ac085f2cce57f192ad8 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 12:48:15 2010 -0200 Profile: Declare Qt metatype. TelepathyQt4/profile.h | 3 +++ 1 file changed, 3 insertions(+) commit 1f671f10e93f7566c53f834bf3812833be4f16df Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 12:48:07 2010 -0200 Presence: Declare Qt metatype. TelepathyQt4/presence.h | 2 ++ 1 file changed, 2 insertions(+) commit aa9f31bfff0508aa20f08d9c99793b21b6b92dc5 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 12:48:00 2010 -0200 Feature: Declare Qt metatype. TelepathyQt4/feature.cpp | 9 +++++++++ TelepathyQt4/feature.h | 7 +++++++ 2 files changed, 16 insertions(+) commit 77638a33dde107b04a38cd697fcc5d333f32ca0b Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 12:47:53 2010 -0200 Contact: Declare Qt metatype. TelepathyQt4/contact.h | 2 ++ 1 file changed, 2 insertions(+) commit 376f1fef86d5ea65061bbecc418eaf2e30b31c59 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 12:47:21 2010 -0200 ManagerFile: Declare Qt metatype. TelepathyQt4/manager-file.cpp | 35 +++++++++++++++++++++++++++++++++++ TelepathyQt4/manager-file.h | 13 ++++++++----- 2 files changed, 43 insertions(+), 5 deletions(-) commit 47259c31f2342aee72ea85aa342808d9c5e70057 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 12:47:11 2010 -0200 KeyFile: Declare Qt metatype. TelepathyQt4/key-file.cpp | 31 ++++++++++++++++++++++++++----- TelepathyQt4/key-file.h | 8 ++++++-- 2 files changed, 32 insertions(+), 7 deletions(-) commit 7d5694007b54a7d1d6c29252bb4efbaa364dbc70 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 12:47:01 2010 -0200 ContactCapabilities: Declare Qt metatype. TelepathyQt4/contact-capabilities.cpp | 8 ++++++++ TelepathyQt4/contact-capabilities.h | 3 +++ 2 files changed, 11 insertions(+) commit c9c512c7bcbc0ab652dc6f44a20340533157a73d Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 12:46:49 2010 -0200 Connection: Declare Qt metatype. TelepathyQt4/connection.h | 2 ++ 1 file changed, 2 insertions(+) commit f00e4259592c39d2a4f0ca35aab341e8a40b9b5a Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 12:46:39 2010 -0200 ContactLocation: Declare Qt metatype. TelepathyQt4/contact-location.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 9177eaae3d09165ee6a21eaacdfe8d9c393af323 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 12:46:25 2010 -0200 ConnectionCapabilities: Declare Qt metatype. TelepathyQt4/connection-capabilities.cpp | 2 +- TelepathyQt4/connection-capabilities.h | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) commit 155efc0724d3c527dab5ad07d0aa4b4a2b7642ea Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 12:46:11 2010 -0200 ChannelClassSpec: Declare Qt metatype. TelepathyQt4/channel-class-spec.h | 3 +++ 1 file changed, 3 insertions(+) commit 0d065a80e4aa2b69321b648b2e3b968fb270364c Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 12:45:44 2010 -0200 CapabilitiesBase: Declare Qt metatype. TelepathyQt4/capabilities-base.cpp | 8 ++++++++ TelepathyQt4/capabilities-base.h | 3 +++ 2 files changed, 11 insertions(+) commit 5a8abcf6c3a0dce801ea9740f252f8be7aaf2ee7 Author: Olli Salli Date: Thu Nov 4 15:51:37 2010 +0200 Don't accidentally make the new props api private tools/qt4-client-gen.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit efd7307e6483fc4d8551f01da1f36e8ba7d81a3f Merge: 9f9dd90 3e4a976 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 11:38:55 2010 -0200 Merge branch 'filter' Reviewed-by: Olli Salli (oggis) commit 9f9dd907fb482074f9bfacf212636306b9f4728e Merge: 5ccdf99 5bc845e Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 4 11:38:47 2010 -0200 Merge branch 'TODO' Reviewed-by: Olli Salli (oggis) commit 3e4a976e0c6df27c44c8274164fea2c84d7e16f0 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 3 19:49:35 2010 -0200 AccountManager: Warn if filtering is used when not ready. TelepathyQt4/account-manager.cpp | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) commit 693ce96de67037ba25fa4e15171d83001cb8cbe5 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 3 19:48:39 2010 -0200 AccountPropertyFilter: Consider itself invalid if empty filter is provided. TelepathyQt4/account-property-filter.cpp | 4 ++++ 1 file changed, 4 insertions(+) commit 54737045b3c0e4df6d590f85f23fc7cc3a9d8e48 Author: Olli Salli Date: Thu Nov 4 15:28:50 2010 +0200 Remove duplicate TestAccountBasics target tests/dbus/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) commit 77ab787423ba94d4506164238e49264a06ad281f Author: Marco Barisione Date: Thu Oct 14 13:34:53 2010 +0100 Test the requestAllProperties() method on generated interfaces tests/dbus/dbus-properties.cpp | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) commit 7ff8cecfb5447fc8e6a6ff0975e41c3eba8ba74f Author: Marco Barisione Date: Thu Oct 14 13:33:40 2010 +0100 Generate a requestAllProperties() to retrieve all the DBus properties The method is generated only if there are properties on the interface and returns a PendingVariantMap*. tools/qt4-client-gen.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) commit 410adfa45da3d5a82facc47707a2f509f1f924eb Author: Marco Barisione Date: Thu Oct 14 13:24:46 2010 +0100 Add AbstractInterface::internalRequestAllProperties() to retrieve properties The method will be used by generated classes to asynchronously get a dictionary of all the DBus properties. TelepathyQt4/abstract-interface.cpp | 10 ++++++++++ TelepathyQt4/abstract-interface.h | 2 ++ 2 files changed, 12 insertions(+) commit 4cfb67885aff8b10543895ccbb894e8b3219850e Author: Marco Barisione Date: Thu Oct 14 13:30:42 2010 +0100 PendingVariantMap: Add PendingVariantMap class PendingVariantMap is a new PendingOperation that can handle QDBusPendingCalls that return a QVariantMap. It behaves mostly like PendingVariant, but it's more convenient to use with methods that return a QVariantMap. TelepathyQt4/CMakeLists.txt | 4 ++ TelepathyQt4/PendingVariantMap | 13 ++++++ TelepathyQt4/pending-variant-map.cpp | 84 ++++++++++++++++++++++++++++++++++ TelepathyQt4/pending-variant-map.h | 59 ++++++++++++++++++++++++ 4 files changed, 160 insertions(+) commit 6e05fec7a05b2b12e5fecb506480b28e9c186bcc Author: Marco Barisione Date: Wed Oct 13 19:00:41 2010 +0100 Test asynchronous setters for DBus properties tests/dbus/dbus-properties.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 2c7786f5f7af159d6ec9198fdee3fc62d6fe1348 Author: Marco Barisione Date: Wed Oct 13 18:58:55 2010 +0100 Generate asynchronous setters for DBus properties The new setters are named setPropertyFoo, where Foo is the property name, and return a Tp::PendingOperation. They will completely replace synchronous setters after the API break. tools/qt4-client-gen.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) commit cdf0b1a59ece163223973ee3a8f1fda6cdefd4e0 Author: Marco Barisione Date: Wed Oct 13 18:56:26 2010 +0100 Add AbstractInterface::internalSetProperty() to set DBus properties The method will be used by generated classes to asynchronously set the value of DBus properties. TelepathyQt4/abstract-interface.cpp | 11 +++++++++++ TelepathyQt4/abstract-interface.h | 2 ++ 2 files changed, 13 insertions(+) commit bfe986803ce947c450fadcaab753c25e42f6abe6 Author: Marco Barisione Date: Wed Oct 13 18:47:32 2010 +0100 Add a test for setting and retrieving DBus properties tests/dbus/CMakeLists.txt | 5 ++ tests/dbus/dbus-properties.cpp | 132 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 137 insertions(+) commit a00ca1615595c56d8f4de0411cb02d8c8785f491 Author: Marco Barisione Date: Wed Oct 13 13:56:19 2010 +0100 Use the new asynchronous property getters in the tests tests/dbus/client-factories.cpp | 18 +++++++++++------- tests/dbus/client.cpp | 19 ++++++++++++------- 2 files changed, 23 insertions(+), 14 deletions(-) commit 62035c6eebe7c38a23f0e692b85fe02e7ee0c0bf Author: Marco Barisione Date: Wed Oct 13 13:55:17 2010 +0100 Add utility functions to test the value of DBus properties tests/lib/test.cpp | 14 ++++++++++++++ tests/lib/test.h | 25 +++++++++++++++++++++++++ 2 files changed, 39 insertions(+) commit 5588ad363da490025cba6ac3c95d0d1754937835 Author: Marco Barisione Date: Wed Oct 13 13:51:47 2010 +0100 Generate asynchronous getters for DBus properties The new getters are named requestPropertyFoo, where Foo is the property name, and return a Tp::PendingVariant. They will replace completely the synchronous getters after the API break. tools/qt4-client-gen.py | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) commit e60224cc0c377f498c4d00d8f273fa15b7075f57 Author: Marco Barisione Date: Wed Oct 13 13:45:44 2010 +0100 Add AbstractInterface::internalRequestProperty() to retrieve DBus properties The method will be used by generated classes to asynchronously get the value of DBus properties. TelepathyQt4/abstract-interface.cpp | 13 +++++++++++++ TelepathyQt4/abstract-interface.h | 3 +++ 2 files changed, 16 insertions(+) commit 5ccdf99198a52fca55056a5666ee08b69d81db30 Author: Olli Salli Date: Thu Nov 4 15:18:41 2010 +0200 Don't try to use QString::path() which doesn't exist. TelepathyQt4/account-manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 620c7081988cbafca68c160518098a8876db2522 Merge: f4b65fc 1270dba Author: Olli Salli Date: Thu Nov 4 14:35:51 2010 +0200 Merge branch 'sanify-am' Reviewed-by: Andre Magalhaes (andrunko) commit 1270dbafdae58f1cc751a6866253155067305e33 Author: Olli Salli Date: Thu Nov 4 14:19:30 2010 +0200 Add some useful debug to AM TelepathyQt4/account-manager.cpp | 3 +++ 1 file changed, 3 insertions(+) commit 1767cddf6065906e25a09886d1aed18f47d29ba1 Author: Olli Salli Date: Thu Nov 4 14:14:59 2010 +0200 Don't use QMap::operator[] in AccountManager::accountForPath TelepathyQt4/account-manager.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) commit c6ea9a0ef5b6d9cacbbec4ab7fae90c219c5d976 Author: Olli Salli Date: Thu Nov 4 14:10:42 2010 +0200 Add TODO to make certain AM accessors const TelepathyQt4/account-manager.h | 3 +++ 1 file changed, 3 insertions(+) commit 5bc845eeaced5114e2df381ef83b8082f2612946 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 3 12:51:31 2010 -0200 AccountManager: Properly use bus param on create(bus) method. TelepathyQt4/account-manager.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 1dc139e77081bab2d4840c00c8ce4f9264f87d65 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 15:10:16 2010 -0200 ChannelClassSpec: Added API/ABI break comments. TelepathyQt4/channel-class-spec.h | 5 +++++ 1 file changed, 5 insertions(+) commit ffd8c020d5c288dac674440c1595de95fd3656d3 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 15:10:00 2010 -0200 RequestableChannelClassSpec: Added API/ABI break comments. TelepathyQt4/requestable-channel-class-spec.h | 1 + 1 file changed, 1 insertion(+) commit f4b65fc85828017393438293c8f722770b14fe0d Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 3 13:36:08 2010 -0200 roster example: Build with new deprecated methods. examples/roster/roster-item.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a4a3a0e5eb0e6d7490e3fbb47fbddf26640d0020 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 3 13:35:53 2010 -0200 file-transfer example: Build with new deprecated methods. examples/file-transfer/receiver.cpp | 9 +++++++-- examples/file-transfer/sender.cpp | 8 ++++---- 2 files changed, 11 insertions(+), 6 deletions(-) commit 1e22c5753ecc4c9926363287baa7a494f5e152d2 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Nov 3 13:35:34 2010 -0200 Contact: Added missing presence method. TelepathyQt4/contact.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) commit 48a76e07be09a749635e33c6e61f50e961c37ab7 Merge: 4b4880a 634e0b6 Author: Xavier Claessens Date: Wed Nov 3 14:04:48 2010 +0100 Merge branch 'remove' commit 634e0b6851fac42e261348c3d063374b7f74f56a Author: Xavier Claessens Date: Wed Nov 3 14:04:13 2010 +0100 Small wording fixes TelepathyQt4/contact-manager.cpp | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) commit 8ff6e310e274e796c1cc61d864ac9a3849c4f092 Author: Xavier Claessens Date: Tue Nov 2 15:44:09 2010 +0100 Add Tp::ContactManager::removeContacts() TelepathyQt4/contact-manager.cpp | 53 ++++++++++++++++++++++++++++++++++++++ TelepathyQt4/contact-manager.h | 3 +++ 2 files changed, 56 insertions(+) commit 4b4880ae0307d9ea969ec8cc87241a554b8edea1 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 15:18:52 2010 -0200 Update NEWS NEWS | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit 4b88bc282857aea8db4c86eda2edbcc5b13166a6 Merge: 3e75f32 1fef4de Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 14:59:37 2010 -0200 Merge branch 'deprecate-interfaces-accessors' Reviewed-by: Olli Salli (oggis) commit 3e75f322ccba1ed265b64ba526272bde39353975 Merge: 183c251 ae4086e Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 14:55:55 2010 -0200 Merge branch 'smchannel-deprecate-call-support' Reviewed-by: Olli Salli (oggis) commit 183c2516fa8ad2f565812b2f656a031cd0982760 Merge: e0fa3a1 dc76a50 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 14:55:46 2010 -0200 Merge branch 'contact-todo' Reviewed-by: Olli Salli (oggis) commit e0fa3a12fc6c68f715f4a31e634035aabd6ae86b Merge: c54e9e7 174201a Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 14:55:35 2010 -0200 Merge branch 'presence' Reviewed-by: Olli Salli (oggis) commit c54e9e74f4d19a1f6c4b3c2d58b5656f9d2c112c Merge: 1aee904 f42d398 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 14:55:22 2010 -0200 Merge branch 'oif-deprecate-has-interface-char-pointer' Reviewed-by: Olli Salli (oggis) commit 1aee9044a3d10c7b2e524d3fffa4504e1fed6113 Merge: 9d57aec 644ef05 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 14:55:08 2010 -0200 Merge branch 'TODO' Reviewed-by: Olli Salli (oggis) commit 1fef4de5e2db95a10c723c3c2bbcd7dd76d9a3ca Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 14:53:00 2010 -0200 Do not use optionalInterface if not needed and "deprecate" typeInterface. TelepathyQt4/account-manager.cpp | 3 +-- TelepathyQt4/account.cpp | 6 ++--- TelepathyQt4/channel-dispatch-operation.cpp | 3 +-- TelepathyQt4/channel-request.cpp | 3 +-- TelepathyQt4/channel.cpp | 17 +++++------- TelepathyQt4/channel.h | 1 + TelepathyQt4/connection-manager.cpp | 3 +-- TelepathyQt4/connection.cpp | 14 ++++------ TelepathyQt4/contact-manager.cpp | 21 +++++---------- TelepathyQt4/contact-search-channel.cpp | 6 ++--- TelepathyQt4/contact.cpp | 3 +-- TelepathyQt4/file-transfer-channel.cpp | 6 ++--- TelepathyQt4/incoming-file-transfer-channel.cpp | 3 +-- TelepathyQt4/outgoing-file-transfer-channel.cpp | 3 +-- TelepathyQt4/pending-channel.cpp | 3 +-- TelepathyQt4/pending-contact-info.cpp | 3 +-- TelepathyQt4/streamed-media-channel.cpp | 33 +++++++++-------------- TelepathyQt4/text-channel.cpp | 18 ++++++------- 18 files changed, 56 insertions(+), 93 deletions(-) commit 9d57aecc2092a5ecc8a2d4350f5090b9c70eeb5d Author: Senko Rasic Date: Tue Nov 2 17:20:04 2010 +0100 append to instead of overwriting supplied CMAKE_CXX_FLAGS/CMAKE_C_FLAGS cmake/modules/TelepathyDefaults.cmake | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit dc76a504cce25d1a95300d0397a8e21499313613 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 14:16:03 2010 -0200 Contact: Properly warn if deprecated signal infoChanged is used. TelepathyQt4/contact.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) commit f0d2152fe0ac39b2bbaaf0d39eab82984dd53e78 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 14:08:05 2010 -0200 Contact: Added more API/ABI break comments. TelepathyQt4/contact.h | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) commit 2849b63f23b1ee83243989f68a5cfaa557950083 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 14:07:19 2010 -0200 ContactLocation: Added API/ABI break TODO comment. TelepathyQt4/contact-location.h | 1 + 1 file changed, 1 insertion(+) commit 174201a8cf0b020d6eea2357ece97f2d75b3f696 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 14:12:51 2010 -0200 Account: Added TODO comment to add a usablePresences method. TelepathyQt4/account.h | 2 ++ 1 file changed, 2 insertions(+) commit 38562b82babc91634edcdd141190adb029cd528a Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 14:11:44 2010 -0200 Contact: Implemented signals deprecation mechanism. TelepathyQt4/contact.cpp | 7 +++++++ TelepathyQt4/contact.h | 4 ++++ 2 files changed, 11 insertions(+) commit d0cdf00c0026a672d6593ecf608f90c90721d173 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 14:06:22 2010 -0200 Profile: Added TODO comment to add a matches method to Profile::Presence. TelepathyQt4/profile.h | 2 ++ 1 file changed, 2 insertions(+) commit 44a461b87de5f79d58aede9785f855253ed65fac Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 14:02:13 2010 -0200 Account: Added TODO comment to set presence from a Profile presence. TelepathyQt4/account.h | 1 + 1 file changed, 1 insertion(+) commit eca8d7e48a4a284d9efabd2bf512c8aa01c63853 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 13:39:14 2010 -0200 Account: Added API/ABI break comment to use Presence instead of SimplePresence. TelepathyQt4/account.h | 1 + 1 file changed, 1 insertion(+) commit 8c21cfd1fca9ab267af0c960def686a8c86ca652 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 13:38:05 2010 -0200 Presence: Removed operator==. TelepathyQt4/presence.cpp | 5 ----- TelepathyQt4/presence.h | 1 - 2 files changed, 6 deletions(-) commit 247b31ed9854aa3b5129e576f87f53dd834e5a10 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 13:36:46 2010 -0200 Contact: Use Presence class and deprecate usage of SimplePresence. TelepathyQt4/contact.cpp | 39 ++++++++++++++++++++++++++++----------- TelepathyQt4/contact.h | 18 ++++++++++++------ 2 files changed, 40 insertions(+), 17 deletions(-) commit 258456975747ed8094c94043b4a5805fcf1fe5e6 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 12:46:49 2010 -0200 Added high-level class for SimplePresence. TelepathyQt4/CMakeLists.txt | 3 + TelepathyQt4/Presence | 13 ++++ TelepathyQt4/presence.cpp | 163 +++++++++++++++++++++++++++++++++++++++++++ TelepathyQt4/presence.h | 72 +++++++++++++++++++ 4 files changed, 251 insertions(+) commit ae4086e68cabf86ca982dff30eae7717cb0ecb40 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 12:20:44 2010 -0200 StreamedMediaChannel: Deprecate all methods that use workarounds to properly work for SM type channels. TelepathyQt4/streamed-media-channel.cpp | 117 +++++++++++++++++++++++++++++-- TelepathyQt4/streamed-media-channel.h | 35 ++++++--- 2 files changed, 137 insertions(+), 15 deletions(-) commit 644ef05f8b659fd93d910002218c5544a4033c03 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 01:49:47 2010 -0200 TextChannel: Added API/ABI break TODO comment. TelepathyQt4/text-channel.h | 1 + 1 file changed, 1 insertion(+) commit f42d3982628c954ff72092fd7c87766897b21494 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 01:48:56 2010 -0200 OptionalInterfaceFactory: Deprecated hasInterface method taking const char * as param. TelepathyQt4/optional-interface-factory.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) commit 57869d19f37b6d21792010fd6ecfc952d641fae5 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 01:48:44 2010 -0200 Connection: Do not use OIF::hasInterface method taking const char * as param. TelepathyQt4/connection.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit c8d29b9c04ad38945a09c6b8f9506034584e7156 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 01:48:18 2010 -0200 Channel: Do not use OIF::hasInterface method taking const char * as param. TelepathyQt4/channel.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) commit 5d7de4f08a76006488d8aaa4e887f0427561e837 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 01:38:51 2010 -0200 ChannelRequest: Deprecate optional interface convenience methods. TelepathyQt4/channel-request.cpp | 14 +++++--------- TelepathyQt4/channel-request.h | 2 +- 2 files changed, 6 insertions(+), 10 deletions(-) commit 762d4013a7de2d9da531ae62021bf815546375f5 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 01:38:34 2010 -0200 ConnectionManager: Deprecate optional interface convenience methods. TelepathyQt4/connection-manager-internal.h | 3 +++ TelepathyQt4/connection-manager.cpp | 7 +++---- TelepathyQt4/connection-manager.h | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) commit 56f77c2b90aa64be56ffb59253e90e86e66af9d9 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 01:29:58 2010 -0200 Connection: Deprecate optional interface convenience methods. TelepathyQt4/connection.cpp | 31 +++++++++++++++++++++++++------ TelepathyQt4/connection.h | 36 ++++++++++++++++++------------------ 2 files changed, 43 insertions(+), 24 deletions(-) commit 8d25c8c7f42f847f7441531a071a6caf35cc3134 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 01:29:43 2010 -0200 PendingContactInfo: Do not use optional interface convenience methods. TelepathyQt4/pending-contact-info.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 4cbedee14b0217af88fd3eba374f34a50650a39e Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 01:29:35 2010 -0200 PendingChannel: Do not use optional interface convenience methods. TelepathyQt4/pending-channel.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit 8c43f9c8f7ba6ffd943467f990cd462adc30ae79 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 01:29:26 2010 -0200 Contact: Do not use optional interface convenience methods. TelepathyQt4/contact.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) commit 02f1cab6ff7700f0bc8aa1fe7fed58c5168beaeb Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 01:29:15 2010 -0200 ContactManager: Do not use optional interface convenience methods. TelepathyQt4/contact-manager.cpp | 39 ++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) commit 8e62abdd1a45680ad83a12330b4c44a206b3226c Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 01:06:23 2010 -0200 Channel: Deprecate optional interface convenience methods. TelepathyQt4/channel.cpp | 42 +++++++++++++++++++++++++++++++++--------- TelepathyQt4/channel.h | 42 +++++++++++++++++++++--------------------- 2 files changed, 54 insertions(+), 30 deletions(-) commit 9fec378daa9ec1f57aac208e5ede88c709c37cbc Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 01:05:18 2010 -0200 TextChannel: Do not use optional interface convenience methods. TelepathyQt4/text-channel.cpp | 56 ++++++++++++++++++++++++++++------------- 1 file changed, 39 insertions(+), 17 deletions(-) commit 489dc56643ff98cd780a33a5087a9e7510ff0bff Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 01:04:59 2010 -0200 StreamedMediaChannel: Do not use optional interface convenience methods. TelepathyQt4/streamed-media-channel-internal.h | 3 ++ TelepathyQt4/streamed-media-channel.cpp | 61 ++++++++++++++++++------ 2 files changed, 50 insertions(+), 14 deletions(-) commit e4036fd99f47586e49648320c92d8bd6f778f4a4 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 01:04:39 2010 -0200 OutgoingFileTransferChannel: Do not use optional interface convenience methods. TelepathyQt4/outgoing-file-transfer-channel.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 1edd1dfa225c6565dcacd3f651bb236a1286e2f9 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 01:04:31 2010 -0200 IncomingFileTransferChannel: Do not use optional interface convenience methods. TelepathyQt4/incoming-file-transfer-channel.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit e02095aaae98bf06de5a688349bb400a07704488 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 01:04:21 2010 -0200 FileTransferChannel: Do not use optional interface convenience methods. TelepathyQt4/file-transfer-channel.cpp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) commit f5b9f837b63217bc05d726354a52df1c80631a5e Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 2 01:03:39 2010 -0200 ContactSearchChannel: Do not use optional interface convenience methods. TelepathyQt4/contact-search-channel.cpp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) commit b55f7657bf1ab518bb41e9f3d9f04748e8e6f67f Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 1 19:05:41 2010 -0200 Start 0.3.14 development CMakeLists.txt | 4 ++-- NEWS | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) commit 7a13fb70e9da3af73fe61e690a9cf02ba2b40b7f Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 1 18:46:40 2010 -0200 Prepare release 0.3.13 CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b0397e408f7968d3792d895e18a15d806c4f22bf Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 1 18:45:52 2010 -0200 Update NEWS NEWS | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) commit defa0be324837dc9741ee090ee922d9b36c551cd Merge: 37cd319 e8b1c64 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 1 18:35:06 2010 -0200 Merge branch 'signals-deprecation' Reviewed-by: Olli Salli (oggis) commit e8b1c64d39052d792161d0d9fbbcfd781184812d Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 1 18:25:25 2010 -0200 Channel: Warn if deprecated signals are used. TelepathyQt4/channel.cpp | 21 +++++++++++++++++++-- TelepathyQt4/channel.h | 5 ++++- 2 files changed, 23 insertions(+), 3 deletions(-) commit fe43f7ecc81ee9330e09f58372ee0424206aec49 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 1 18:19:02 2010 -0200 ContactManager: Warn if deprecated signals are used and document signals. TelepathyQt4/contact-manager.cpp | 88 +++++++++++++++++++++++++++++++++++++- TelepathyQt4/contact-manager.h | 35 ++++++++------- 2 files changed, 103 insertions(+), 20 deletions(-) commit 37cd319500f51e6be822d85feda64c585cd6d53f Merge: befce96 e726857 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 1 17:58:50 2010 -0200 Merge branch 'rcc-high-level' Reviewed-by: Olli Salli (oggis) commit e726857f4a9436374a949adcccb3667d1ef9d949 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 1 17:49:00 2010 -0200 AccountManager: Added API/ABI break TODO. TelepathyQt4/account-manager.h | 4 ++++ 1 file changed, 4 insertions(+) commit befce96e76b48aedf6e221cc3d70a1f4ea7b7f27 Author: Olli Salli Date: Mon Nov 1 21:48:52 2010 +0200 Update NEWS NEWS | 5 +++++ 1 file changed, 5 insertions(+) commit 517439a63afc63df71db4463430dd012bea7c966 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 1 17:45:32 2010 -0200 AccountManager: Do not use deprecated GenericCapability filter methods. TelepathyQt4/account-manager.cpp | 80 +++++--------------------------------- 1 file changed, 10 insertions(+), 70 deletions(-) commit b8515c648529711bdcc27f3fda2156ca6a47f344 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 1 17:45:14 2010 -0200 RequestableChannelClassSpec: Added convenience method to build a spec for FileTransfer channels. TelepathyQt4/requestable-channel-class-spec.cpp | 16 ++++++++++++++++ TelepathyQt4/requestable-channel-class-spec.h | 2 ++ 2 files changed, 18 insertions(+) commit 713a70b1f11a96d246acc68719d1654a0c6e6c8e Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 1 17:31:39 2010 -0200 GenericCapabilityFilter: Deprecate methods using bare RequestableChannelClass/List. TelepathyQt4/generic-capability-filter.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit b92ca146dff440f7c08c63dfb873e54585aa40b1 Merge: dfcc1d0 fa865d5 Author: Olli Salli Date: Mon Nov 1 21:31:18 2010 +0200 Merge branch 'channel-factory' Reviewed-by: Andre Magalhaes (andrunko) commit fa865d51e1fcc618fd40736f836a2ace745956cd Author: Olli Salli Date: Mon Nov 1 21:16:48 2010 +0200 Explicitly indicate that the ACH::Caps accessors check/set/unset Tokens TelepathyQt4/abstract-client.h | 36 ++++++++++++++++++------------------ tests/dbus/client-factories.cpp | 4 ++-- 2 files changed, 20 insertions(+), 20 deletions(-) commit 2bd8b03c4ea8d9f1d9ac834bbb6b8d7f597e9295 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 1 12:24:14 2010 -0200 Connection: Warn if deprecated signals are used. TelepathyQt4/connection.cpp | 7 +++++++ TelepathyQt4/connection.h | 3 +++ 2 files changed, 10 insertions(+) commit 36de2e0ec2000cfa42b1788bf1ba6f955195c6eb Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 29 15:37:58 2010 -0200 Account: connectionStatusChanged signal now has only the status as param, as done by Connection::statusChanged. TelepathyQt4/account.cpp | 19 ++++++------------- TelepathyQt4/account.h | 4 +--- 2 files changed, 7 insertions(+), 16 deletions(-) commit 1bbf79e6132f69e6a1292c3c6428442b50fece65 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 29 13:30:21 2010 -0200 Account: Warn if deprecated signals are used. TelepathyQt4/account.cpp | 13 +++++++++++++ TelepathyQt4/account.h | 3 +++ 2 files changed, 16 insertions(+) commit e38e5fa987c238f3bd1d2a02d63f5378cd1637a6 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 29 13:29:49 2010 -0200 Account: Added new signals connectionStatusChanged and connectionChanged. TelepathyQt4/account.cpp | 58 +++++++++++++++++++++++++++++++++++++--------- TelepathyQt4/account.h | 15 +++++++----- 2 files changed, 56 insertions(+), 17 deletions(-) commit 3187102342be27e41b762e7157f8299dfaf771fc Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 29 13:28:18 2010 -0200 AccountManager: Warn if deprecated signals are used. TelepathyQt4/account-manager.cpp | 11 +++++++++++ TelepathyQt4/account-manager.h | 3 +++ 2 files changed, 14 insertions(+) commit 381f2b55abc085159e9fdb54b046b2ff33762449 Author: Olli Salli Date: Mon Nov 1 21:07:18 2010 +0200 Update accordingly with the recent StreamedMedia related method naming changes TelepathyQt4/channel-class-spec.cpp | 28 +++++++++++++++++++++++----- TelepathyQt4/channel-class-spec.h | 20 +++++++++++--------- TelepathyQt4/channel-factory.cpp | 24 +++++++++++++----------- TelepathyQt4/channel-factory.h | 12 ++++++------ tests/dbus/client-factories.cpp | 2 +- 5 files changed, 54 insertions(+), 32 deletions(-) commit 8a64df69c109fa59aca69af27f4058cc750784fb Author: Olli Salli Date: Mon Nov 1 20:42:12 2010 +0200 Clean up ChannelClassSpec Call.DRAFT hacks TelepathyQt4/channel-class-spec.cpp | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) commit 7066ea6b9af167bfa96e4184dc291fcdc224a5b5 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 1 17:00:22 2010 -0200 Contact: Do not use deprecated CapabilitiesBase::requestableChannelClasses method. TelepathyQt4/contact.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 880ad12b34e513e0625c2e369695f4bc2c9e8760 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 1 17:00:06 2010 -0200 Account: Do not use deprecated CapabilitiesBase::requestableChannelClasses method. TelepathyQt4/account.cpp | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) commit 1858e05cd59d64766da3d40cc20abf564af68c80 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 1 16:48:29 2010 -0200 GenericCapabilityFilter: Use RCCSpec. TelepathyQt4/generic-capability-filter.h | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) commit d991a20d33ce7b528ede4067b3baf7129d040d1a Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 1 16:48:01 2010 -0200 RequestableChannelClassSpecList: Added bareClasses method. TelepathyQt4/requestable-channel-class-spec.h | 9 +++++++++ 1 file changed, 9 insertions(+) commit a388a0e58b035ad48c5a786e0225ac6262150541 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 1 15:25:29 2010 -0200 RequestableChannelClassSpec: Cache return value of convenience methods returning known RCCS. TelepathyQt4/requestable-channel-class-spec.cpp | 352 ++++++++++++++--------- 1 file changed, 224 insertions(+), 128 deletions(-) commit 4fdde53fbac71611d214d7784dd4fce2e7fa7bea Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 1 15:10:56 2010 -0200 RequestableChannelClassSpec: Modify SM related methods to contain StreamedMedia in the name. TelepathyQt4/requestable-channel-class-spec.cpp | 12 ++++++------ TelepathyQt4/requestable-channel-class-spec.h | 12 ++++++------ tests/rccspec.cpp | 21 ++++++++++++--------- 3 files changed, 24 insertions(+), 21 deletions(-) commit e51d60bd0f2a0c66c65eeb683745c7404e5392c7 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 1 15:06:48 2010 -0200 Profile: Renamed unsupportedClassSpecs to unsupportedChannelClassSpecs and fixed typo in Account::capabilities(). TelepathyQt4/account.cpp | 6 +++--- TelepathyQt4/profile-manager.cpp | 2 +- TelepathyQt4/profile.cpp | 18 ++++++++---------- TelepathyQt4/profile.h | 2 +- tests/dbus/account-basics.cpp | 1 + 5 files changed, 14 insertions(+), 15 deletions(-) commit fd7d6327ed24a81b1253f5eb8254ebc1e87ee284 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 29 16:54:31 2010 -0200 Account: Use RequestableChannelClassSpec when building caps and properly deduct unsupported rccs. TelepathyQt4/account.cpp | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) commit 8b6569f85f6c2572a8e8fcd014c4911a3a23acdd Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 29 16:35:14 2010 -0200 Profile: Use RequestableChannelClassSpec. TelepathyQt4/account.cpp | 2 +- TelepathyQt4/profile-manager.cpp | 2 +- TelepathyQt4/profile.cpp | 29 ++++++++++++++++++++++++----- TelepathyQt4/profile.h | 4 +++- 4 files changed, 29 insertions(+), 8 deletions(-) commit d61a10d0b6ece5b10ba1c4f25bb39935ca2e4653 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 29 16:30:19 2010 -0200 rccspec test: Added test for RequestableChannelClassSpec. tests/CMakeLists.txt | 1 + tests/rccspec.cpp | 144 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 145 insertions(+) commit b891a2733a0b042845c6e1269d61d6fc88e08ee0 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 29 16:12:07 2010 -0200 ConnectionCapabilities: Properly check TargetHandleType in conference methods. TelepathyQt4/connection-capabilities.cpp | 4 ++++ 1 file changed, 4 insertions(+) commit 878f5c8146b3fe06871cc964f917a51a4861cf22 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 29 16:11:40 2010 -0200 RequestableChannelClassSpec: Added helper methods to build known specs. TelepathyQt4/requestable-channel-class-spec.cpp | 192 +++++++++++++++++++++++ TelepathyQt4/requestable-channel-class-spec.h | 20 +++ 2 files changed, 212 insertions(+) commit 205ce78ba5afbd4991707922e184854766a47c21 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 29 15:50:23 2010 -0200 RequestableChannelClassSpec: Added operator== and supports method. TelepathyQt4/requestable-channel-class-spec.cpp | 18 ++++++++++++++++++ TelepathyQt4/requestable-channel-class-spec.h | 3 +++ 2 files changed, 21 insertions(+) commit 2402e2a539c7da79e2819e6b417502d3048a5e13 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 29 10:41:49 2010 -0200 ConnectionCapabilities: Properly check rcc fixedProperties size. TelepathyQt4/connection-capabilities.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 923fde4110de2b919e06e041ab62747d114fda4e Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 29 10:40:43 2010 -0200 CapabilitiesBase: Properly check rcc fixedProperties size. TelepathyQt4/capabilities-base.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit 7180542660b2f95c6aace50aa6544f8fd38e7750 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 27 19:55:49 2010 -0200 ConnectionCapabilities: Use new macros. TelepathyQt4/connection-capabilities.cpp | 60 +++++++++++++++--------------- 1 file changed, 30 insertions(+), 30 deletions(-) commit f9bc6806de5e184659d0ff3346112cb7fc9fab1b Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 27 19:46:03 2010 -0200 Capabilities: Updated copyright. TelepathyQt4/capabilities-base.cpp | 26 +++++++++++++------------- TelepathyQt4/capabilities-base.h | 4 ++-- TelepathyQt4/connection-capabilities.cpp | 4 ++-- TelepathyQt4/connection-capabilities.h | 4 ++-- TelepathyQt4/contact-capabilities.cpp | 4 ++-- TelepathyQt4/contact-capabilities.h | 4 ++-- 6 files changed, 23 insertions(+), 23 deletions(-) commit 421ea8c5f88dab1af7491e162f32505048c2d55a Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 27 12:32:39 2010 -0200 CapabilitiesBase: Make it copyable. TelepathyQt4/capabilities-base.cpp | 20 ++++++++++++++++++++ TelepathyQt4/capabilities-base.h | 4 ++++ 2 files changed, 24 insertions(+) commit 0f8c22fe332753a6a4b8e56192497772aecc2259 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 27 12:04:55 2010 -0200 Capabilities: Added new constructors that take a RCCSpecList. TelepathyQt4/capabilities-base.cpp | 14 ++++++++++++++ TelepathyQt4/capabilities-base.h | 6 ++++-- TelepathyQt4/connection-capabilities.cpp | 21 ++++++++++++++++----- TelepathyQt4/connection-capabilities.h | 3 ++- TelepathyQt4/contact-capabilities.cpp | 23 +++++++++++++++++------ TelepathyQt4/contact-capabilities.h | 4 +++- 6 files changed, 56 insertions(+), 15 deletions(-) commit 4cb0a20b1cadfe1c0612be5d0d51e1762dab0119 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 27 12:06:16 2010 -0200 CapabilitiesBase: Renamed requestableChannelClassSpecList to allClassSpecs. TelepathyQt4/capabilities-base.cpp | 4 ++-- TelepathyQt4/capabilities-base.h | 2 +- TelepathyQt4/connection-capabilities.cpp | 20 ++++++++++---------- 3 files changed, 13 insertions(+), 13 deletions(-) commit 31d2176100d585eb16e0320395f63c6f6af9b595 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 27 12:06:25 2010 -0200 RequestableChannelClassSpec: Removed methods receiving char *, fixed/allowedPropertiesCount and hasChannelType from RCCSpec and use new constants. TelepathyQt4/capabilities-base.cpp | 44 +++++++------- TelepathyQt4/connection-capabilities.cpp | 68 ++++++++++----------- TelepathyQt4/requestable-channel-class-spec.cpp | 72 ++--------------------- TelepathyQt4/requestable-channel-class-spec.h | 18 ++---- 4 files changed, 66 insertions(+), 136 deletions(-) commit 7492b5262f4722d18b7b3dfa87e943f28371fcb5 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 19 20:40:34 2010 -0200 ConnectionCapabilities: Use RequestableChannelClassSpecList. TelepathyQt4/connection-capabilities.cpp | 147 +++++++++++------------------- 1 file changed, 54 insertions(+), 93 deletions(-) commit b298d82287e7b380440dd6d96b304a69c10dab6b Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 19 20:30:54 2010 -0200 CapabilitiesBase: Use RequestableChannelClassSpecList and deprecate usage of RequestableChannelClassList. TelepathyQt4/capabilities-base.cpp | 141 +++++++++++++++--------------------- TelepathyQt4/capabilities-base.h | 6 +- 2 files changed, 61 insertions(+), 86 deletions(-) commit ede17f323e5d06acaf9ae4b280150cb4c65c9258 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 19 20:30:17 2010 -0200 RequestableChannelClassSpec: Added more helper methods. TelepathyQt4/requestable-channel-class-spec.cpp | 52 +++++++++++++++++++++++ TelepathyQt4/requestable-channel-class-spec.h | 8 ++++ 2 files changed, 60 insertions(+) commit 9d6101f7730dcd99d60adc73198eca1ed5f9eb0e Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 19 20:03:06 2010 -0200 RequestableChannelClassSpecList: Added class to represent a list of RequestableChannelClassSpec. TelepathyQt4/requestable-channel-class-spec.h | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) commit f1e4967d104372ab79f8b98f356fdd0ae0f37723 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 19 19:56:59 2010 -0200 RequestableChannelClassSpec: Added helper methods. TelepathyQt4/requestable-channel-class-spec.cpp | 75 +++++++++++++++++++++++ TelepathyQt4/requestable-channel-class-spec.h | 15 +++++ 2 files changed, 90 insertions(+) commit de7e3ece8c0ace22af6850916316a1717f0de888 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 19 19:39:59 2010 -0200 RequestableChannelClassSpec: Added initial wrapper class for RequestableChannelClass. TelepathyQt4/CMakeLists.txt | 3 ++ TelepathyQt4/RequestableChannelClassSpec | 13 +++++ TelepathyQt4/requestable-channel-class-spec.cpp | 64 +++++++++++++++++++++++ TelepathyQt4/requestable-channel-class-spec.h | 56 ++++++++++++++++++++ 4 files changed, 136 insertions(+) commit 389f6f46e3dcef03aa2b2e3a1e6184530f77acb2 Author: Olli Salli Date: Mon Nov 1 20:16:21 2010 +0200 Update copyrights in the files the ChannelFactory work touches TelepathyQt4/abstract-client.cpp | 4 ++-- TelepathyQt4/abstract-client.h | 4 ++-- TelepathyQt4/channel-factory.cpp | 4 ++-- TelepathyQt4/channel-factory.h | 4 ++-- TelepathyQt4/client-registrar-internal.h | 4 ++-- TelepathyQt4/client-registrar.cpp | 4 ++-- TelepathyQt4/client-registrar.h | 4 ++-- TelepathyQt4/pending-channel.cpp | 4 ++-- TelepathyQt4/pending-channel.h | 4 ++-- 9 files changed, 18 insertions(+), 18 deletions(-) commit c2763b9353b23515cb7315a456690a69fe7cf2c1 Author: Olli Salli Date: Sun Oct 31 20:31:44 2010 +0200 Deprecate AbstractClientHandler::capabilities() with high-level handlerCapabilities() TelepathyQt4/abstract-client.cpp | 13 +++++++++++++ TelepathyQt4/abstract-client.h | 3 ++- TelepathyQt4/client-registrar-internal.h | 2 +- 3 files changed, 16 insertions(+), 2 deletions(-) commit e1a3088a2d87c28c6393f5450b5154badb402a90 Author: Olli Salli Date: Sun Oct 31 20:26:31 2010 +0200 Deprecate bare Client.Handler capabilities with AbstractClientHandler::Capabilities TelepathyQt4/abstract-client.cpp | 61 +++++++++++++- TelepathyQt4/abstract-client.h | 134 +++++++++++++++++++++++++++++- TelepathyQt4/client-registrar-internal.h | 1 + tests/dbus/client-factories.cpp | 22 +++-- 4 files changed, 203 insertions(+), 15 deletions(-) commit 4c71aa3a3b4c4cb29ebe2ff64763a6e18ce1f46a Author: Olli Salli Date: Sun Oct 31 20:25:57 2010 +0200 Add Client filter accessors returning ChannelClassSpecs TelepathyQt4/abstract-client.cpp | 76 ++++++++++++++++++++++++++++++ TelepathyQt4/abstract-client.h | 12 ++--- TelepathyQt4/client-registrar-internal.h | 6 +-- 3 files changed, 85 insertions(+), 9 deletions(-) commit a9baed70d7419ca7dda7c37236eafbd1f0bef960 Author: Olli Salli Date: Sun Oct 31 19:25:23 2010 +0200 Make Client channel filters specified using ChannelClassSpec TelepathyQt4/abstract-client.cpp | 55 ++++++++++++++++++++++++++++++++++++++ TelepathyQt4/abstract-client.h | 28 ++++++++++--------- tests/dbus/client-factories.cpp | 22 +++++---------- 3 files changed, 77 insertions(+), 28 deletions(-) commit c1467bbd1ecdf067c3a85c375e3c928e3b3a5c02 Author: Olli Salli Date: Sun Oct 31 19:24:01 2010 +0200 Add ChannelClassSpecList::bareClasses() TelepathyQt4/channel-class-spec.h | 9 +++++++++ 1 file changed, 9 insertions(+) commit 758143dbd82fdb8615a4f19511085660c88c0813 Author: Olli Salli Date: Sun Oct 31 18:46:36 2010 +0200 Use the requested-taking constructor in forming the static FileTransfer ChannelClassSpecs TelepathyQt4/channel-class-spec.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) commit 46e494cb5718a0506d719c0583dea90cddbacdc0 Author: Olli Salli Date: Sun Oct 31 18:45:22 2010 +0200 Remove the old static mapping from ChannelFactory TelepathyQt4/channel-factory.cpp | 40 -------------------------------------- TelepathyQt4/channel-factory.h | 10 ---------- 2 files changed, 50 deletions(-) commit 86be3ac0d67acbac8b8bbc935d3b268ae2f22fc9 Author: Olli Salli Date: Sun Oct 31 18:21:26 2010 +0200 Make PendingChannel use ChannelFactory TelepathyQt4/pending-channel.cpp | 53 ++++++++++++++++++++++++-------------- TelepathyQt4/pending-channel.h | 1 + 2 files changed, 35 insertions(+), 19 deletions(-) commit 4921979a0fa76a7a814b9bad5c467255b379cee6 Author: Olli Salli Date: Sun Oct 31 17:49:46 2010 +0200 Add RoomList and ContactSearch to ChannelFactory TelepathyQt4/channel-factory.cpp | 64 +++++++++++++++++++++++++++++++++----- TelepathyQt4/channel-factory.h | 44 ++++++++++++++++++++++---- 2 files changed, 94 insertions(+), 14 deletions(-) commit 2cdd299520293ec7e3037310e17195d8c2109c43 Author: Olli Salli Date: Sun Oct 31 15:49:51 2010 +0200 Add ChannelClassSpec::contactSearch() TelepathyQt4/channel-class-spec.cpp | 16 ++++++++++++++++ TelepathyQt4/channel-class-spec.h | 1 + 2 files changed, 17 insertions(+) commit 4d648724abe38e9431d9089bdcdc54f74659ad31 Author: Olli Salli Date: Sun Oct 31 15:45:54 2010 +0200 Implement subclass / constructor specification in ChannelFactory TelepathyQt4/channel-factory.cpp | 131 +++++++++++++++++++++++++++++++++++++- TelepathyQt4/channel-factory.h | 100 +++++++++++++++++++++++++++++ 2 files changed, 230 insertions(+), 1 deletion(-) commit 717ad003870b9c4f03bfa64a5e5fd013f844263b Author: Olli Salli Date: Sat Oct 30 22:21:16 2010 +0300 Enable channel factory in TestClientFactories tests/dbus/client-factories.cpp | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) commit 4dcfdfaf920996fa4fddb6e5be5447bc510f3c37 Author: Olli Salli Date: Sat Oct 30 22:07:17 2010 +0300 Make ChannelFactory::addFeaturesForMediaCalls() also set the Call.DRAFT features TelepathyQt4/channel-factory.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) commit 83131f366580a3808cf76067f80cbdf395b5a78f Author: Olli Salli Date: Sat Oct 30 21:57:39 2010 +0300 Implement the ChannelFactory friendly feature specification wrappers TelepathyQt4/channel-factory.cpp | 68 ++++++++++++++++++++++++++++++++++++-- TelepathyQt4/channel-factory.h | 15 ++++++--- 2 files changed, 76 insertions(+), 7 deletions(-) commit dc08396272ee2af820e8333cdacc10472033237e Author: Olli Salli Date: Sat Oct 30 21:57:20 2010 +0300 Remove bogus TODO from Channel::immutableProperties() TelepathyQt4/channel.cpp | 3 --- 1 file changed, 3 deletions(-) commit b3ef2932198131c3022bd458083c0a1fbd2d9ede Author: Olli Salli Date: Sat Oct 30 21:44:54 2010 +0300 Don't make channel-factory.h depend on channel-class-spec.h TelepathyQt4/channel-factory.cpp | 1 + TelepathyQt4/channel-factory.h | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) commit c8c68370257d8edbfec539e18a5c5efaa44938e4 Author: Olli Salli Date: Sat Oct 30 21:43:25 2010 +0300 Make empty ChannelClassSpecs comparable TelepathyQt4/channel-class-spec.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 10e009268b371d512cb03aa66a21aa80ba5f6634 Author: Olli Salli Date: Sat Oct 30 21:30:19 2010 +0300 Use ChannelClassSpec in ChannelFactory TelepathyQt4/channel-factory.cpp | 36 ++++++++---------------------------- TelepathyQt4/channel-factory.h | 31 +++++++++++++------------------ 2 files changed, 21 insertions(+), 46 deletions(-) commit 6420eec1fca6a4eb612a555d352b50f980187ee0 Author: Olli Salli Date: Sat Oct 30 21:29:18 2010 +0300 Add ChannelClassSpec(immutableProps) ctor TelepathyQt4/channel-class-spec.cpp | 19 ++++++++++++++----- TelepathyQt4/channel-class-spec.h | 1 + 2 files changed, 15 insertions(+), 5 deletions(-) commit 319602b532ea99afca1c4575851df358bf57f694 Author: Olli Salli Date: Sat Oct 30 19:44:54 2010 +0300 Use setProperty for otherProperties too in ChannelClassSpec ctors Gives us the streamedmedia vs call normalization TelepathyQt4/channel-class-spec.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) commit ea299fa6f32bc61ed7962d8af3e04fb6eb65efc1 Author: Olli Salli Date: Mon Oct 25 16:33:19 2010 +0300 Change the static ChannelClassSpec instance naming to be more consistent TelepathyQt4/channel-class-spec.cpp | 14 ++++++-------- TelepathyQt4/channel-class-spec.h | 12 ++++++------ 2 files changed, 12 insertions(+), 14 deletions(-) commit 8bad481bf56ab5ac9ea5bba3b043513904b61f88 Author: Olli Salli Date: Mon Oct 25 16:16:34 2010 +0300 Remove the misleading ChannelClassSpec comparison operators, we can't have a linear ordering for CCS TelepathyQt4/channel-class-spec.cpp | 4 ++-- TelepathyQt4/channel-class-spec.h | 21 +++------------------ 2 files changed, 5 insertions(+), 20 deletions(-) commit 1f81c1caa9881852faff1360a181778078d778a8 Author: Olli Salli Date: Mon Oct 25 13:52:07 2010 +0300 Add tentative ChannelClassSpec API TelepathyQt4/CMakeLists.txt | 4 + TelepathyQt4/ChannelClassSpec | 13 ++ TelepathyQt4/ChannelClassSpecList | 13 ++ TelepathyQt4/channel-class-spec.cpp | 350 +++++++++++++++++++++++++++++++++++ TelepathyQt4/channel-class-spec.h | 220 ++++++++++++++++++++++ 5 files changed, 600 insertions(+) commit 8178430448e2bfaba04b1b28877d86f7a3e4e117 Author: Olli Salli Date: Sun Oct 10 23:23:19 2010 +0300 Start implementing ChannelFactory feature specification TelepathyQt4/channel-factory.cpp | 74 ++++++++++++++++++++++++++++++++++++-- TelepathyQt4/channel-factory.h | 29 +++++++++++++++ TelepathyQt4/channel.cpp | 3 ++ 3 files changed, 103 insertions(+), 3 deletions(-) commit dfcc1d05a474bcf941a7b5ceb4171e2b9d23adc9 Author: Olli Salli Date: Mon Nov 1 20:02:57 2010 +0200 Update NEWS NEWS | 2 ++ 1 file changed, 2 insertions(+) commit 6408d4518410f87431254f75b64db141e3b88056 Merge: a897ef6 3c51726 Author: Olli Salli Date: Mon Nov 1 19:55:38 2010 +0200 Merge branch 'fix-text-channel-legacy-introspection' Reviewed-by: Andre Magalhaes (andrunko) commit a897ef68830348bb44bea3df5d4aae159f97210c Merge: f1c6edf 7b35f36 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 1 15:37:04 2010 -0200 Merge branch 'sm-naming' Reviewed-by: Olli Salli (oggis) commit 7b35f36b9baab0cdab0679871b37b025decbec18 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 1 15:16:23 2010 -0200 ConnectionCapabilities: Also renamed conference media related methods to contain StreamedMedia in the name. TelepathyQt4/connection-capabilities.cpp | 11 ++++++----- TelepathyQt4/connection-capabilities.h | 4 ++-- 2 files changed, 8 insertions(+), 7 deletions(-) commit 5b17af5d3c2c9f49fc57bfbf437d3d8647c6c516 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 1 12:59:28 2010 -0200 Renamed methods related to StreamedMedia channels to contain StreamedMedia in the name. TelepathyQt4/account.cpp | 80 +++++++++++++++++++++++++++++++--- TelepathyQt4/account.h | 41 ++++++++++++++--- TelepathyQt4/capabilities-base.cpp | 59 +++++++++++++------------ TelepathyQt4/capabilities-base.h | 10 ++--- tests/dbus/account-basics.cpp | 10 ++--- tests/dbus/cm-basics.cpp | 20 ++++----- tests/dbus/conn-capabilities.cpp | 30 ++++++------- tests/dbus/contacts-capabilities.cpp | 10 ++--- 8 files changed, 179 insertions(+), 81 deletions(-) commit f1c6edfb52bfd432eaf5b5e58015d3a6c0c21ed5 Merge: 7e13056 633666d Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 1 11:17:01 2010 -0200 Merge branch 'TODO' Reviewed-by: Olli Salli (oggis) commit 7e13056c768f17c77f90c5686375162f3841191a Merge: 1a399c3 5090c32 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 1 11:16:49 2010 -0200 Merge branch 'caps-renaming' Reviewed-by: Olli Salli (oggis) commit 1a399c3c994abe0fe77b8191754a6e0a14011c52 Merge: b1db599 e7c9029 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 1 11:16:37 2010 -0200 Merge branch 'unexport-susockaddr-operators' Reviewed-by: Olli Salli (oggis) commit b1db599fbfc94d45eaacc254ec93fc0bb4a0ce15 Merge: dc0bd7a 518c93e Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 1 11:16:15 2010 -0200 Merge branch 'examples-enable-deprecation-warns' Reviewed-by: Olli Salli (oggis) commit dc0bd7a1efdd0511190d64e3657bc1979f2b9d89 Merge: 11b5932 fdaff67 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 1 11:15:46 2010 -0200 Merge branch 'lib-enable-deprecation-warns' Reviewed-by: Olli Salli (oggis) commit fdaff67277cf4f61c79cb0935846f1c84636a607 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 1 11:14:00 2010 -0200 Use _deprecated_ instead of __deprecated_. TelepathyQt4/account-set.cpp | 8 ++++---- TelepathyQt4/account-set.h | 8 ++++---- TelepathyQt4/account.cpp | 2 +- TelepathyQt4/account.h | 4 ++-- tools/qt4-client-gen.py | 12 ++++++------ 5 files changed, 17 insertions(+), 17 deletions(-) commit 3c5172678cd80df3768a8261d0ba7271d132d995 Author: Olli Salli Date: Sat Oct 30 23:42:13 2010 +0300 TextChannel: Finish pre-Messages FeatureMessageQueue even if there are no initial messages TelepathyQt4/text-channel.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) commit e24edb22306b629f500b299e047332e8c411d4c2 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 29 17:13:11 2010 -0200 Channel: Fixed typo in docs. TelepathyQt4/channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 518c93ebaf97708cc3e9e985c9aee9ca51499695 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 29 10:23:07 2010 -0200 Build examples with deprecation warnings enabled. examples/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) commit ebf93a4898eef0aa9a4bb0e744022b532595b0ec Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 29 10:22:51 2010 -0200 accounts example: Do not use deprecated methods. examples/accounts/account-item.cpp | 18 ++++++++---------- examples/accounts/account-item.h | 5 ++--- examples/accounts/accounts-window.cpp | 18 ++++++++++-------- examples/accounts/accounts-window.h | 2 +- 4 files changed, 21 insertions(+), 22 deletions(-) commit 5e42540dbe454ef4cccef48641f3f0d5a9adac5d Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 29 10:22:02 2010 -0200 Removed call example. The example is bogus, not really exemplary and uses the old StreamedMediaChannel API that is full of deprecated methods. examples/CMakeLists.txt | 1 - examples/call/CMakeLists.txt | 37 --- examples/call/call-handler.cpp | 172 ------------ examples/call/call-handler.h | 59 ----- examples/call/call-roster-widget.cpp | 91 ------- examples/call/call-roster-widget.h | 61 ----- examples/call/call-widget.cpp | 483 ---------------------------------- examples/call/call-widget.h | 104 -------- examples/call/call-window.cpp | 171 ------------ examples/call/call-window.h | 67 ----- examples/call/farsight-channel.cpp | 308 ---------------------- examples/call/farsight-channel.h | 72 ----- examples/call/main.cpp | 39 --- examples/call/video-widget.cpp | 165 ------------ examples/call/video-widget.h | 56 ---- 15 files changed, 1886 deletions(-) commit 7da78c94dd402d048f6fa779d221d98559bbaf4f Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 29 15:33:46 2010 -0200 StreamedMediaChannel: Un-deprecate all methods. It does not make sense to deprecate methods specific to one type of channel in SMChannel if the other type uses it. So let's un-deprecate everything now and split the class in 2 classes specific to each type of channel (Call, StreamedMedia) in 0.5.0. TelepathyQt4/streamed-media-channel.cpp | 88 ++++--------------------------- TelepathyQt4/streamed-media-channel.h | 41 ++++++-------- 2 files changed, 27 insertions(+), 102 deletions(-) commit 52388e3d12f7bc288f77ba40768564c5ed87c1ff Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 29 15:31:00 2010 -0200 AccountSet: Renamed deprecated methods starting with __ to start with __deprecated_. From the 2003 C++ Standard: Each name that contains a double underscore (__) or begins with an underscore followed by an uppercase letter (2.11) is reserved to the implementation for any use. TelepathyQt4/account-set.cpp | 8 ++++---- TelepathyQt4/account-set.h | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) commit 3865870fad2471fb9c310048842c9bdbd92a32bd Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 29 15:30:23 2010 -0200 Account: Renamed deprecated methods starting with __ to start with __deprecated_. From the 2003 C++ Standard: Each name that contains a double underscore (__) or begins with an underscore followed by an uppercase letter (2.11) is reserved to the implementation for any use. TelepathyQt4/account.cpp | 2 +- TelepathyQt4/account.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) commit 86c20a6befa16cdc8cbbe1249239535b59f7f8c2 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 29 15:27:21 2010 -0200 qt4-client-gen.py: Renamed deprecated autogenerated methods starting with __ to start with __deprecated_. From the 2003 C++ Standard: Each name that contains a double underscore (__) or begins with an underscore followed by an uppercase letter (2.11) is reserved to the implementation for any use. tools/qt4-client-gen.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) commit dd1af064669cfef41755d985eb7f8e81327ee40f Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 29 14:48:23 2010 -0200 AccountManager: Un-deprecate create method taking bus as param. TelepathyQt4/account-manager.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 633666daf2a038847104ccf6bc27add8996c56ce Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 29 13:37:39 2010 -0200 ContactCapabilities: Added API/ABI break comment. TelepathyQt4/contact-capabilities.h | 1 + 1 file changed, 1 insertion(+) commit ed8ad08e1856d70121f2550cf2f4a4af8d3f24e5 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 29 13:37:22 2010 -0200 ConnectionCapabilities: Added API/ABI break comment. TelepathyQt4/connection-capabilities.h | 1 + 1 file changed, 1 insertion(+) commit e7c9029fcc29f86d6da9a2599c652fb19a303ce4 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 29 13:33:56 2010 -0200 Do not export operators for SUSocketAddress. TelepathyQt4/types.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit aea6fe91b29ccd0bbd3c383a430c3d17e06ef5e2 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 29 09:39:25 2010 -0200 AbstractInterface: Un-deprecate validity related accessors. TelepathyQt4/abstract-interface.cpp | 17 +---------------- TelepathyQt4/abstract-interface.h | 7 +++---- 2 files changed, 4 insertions(+), 20 deletions(-) commit 050e26165805434f9dba51a18f7cd92f4f8d438e Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 27 22:26:48 2010 -0200 Properly build library with deprecation warnings enabled. Added more deprecated methods, removed some, added docs for all deprecated methods, ... TelepathyQt4/CMakeLists.txt | 4 +- TelepathyQt4/abstract-interface.cpp | 9 +++ TelepathyQt4/abstract-interface.h | 15 ++--- TelepathyQt4/account-manager.cpp | 41 ++++++++++--- TelepathyQt4/account-manager.h | 14 +++-- TelepathyQt4/account-set.cpp | 14 +++++ TelepathyQt4/account-set.h | 11 +++- TelepathyQt4/account.cpp | 87 ++++++++++++++++++-------- TelepathyQt4/account.h | 17 ++++-- TelepathyQt4/channel-dispatch-operation.cpp | 39 ++++++++---- TelepathyQt4/channel-dispatch-operation.h | 2 +- TelepathyQt4/channel-factory.h | 2 +- TelepathyQt4/channel-request.cpp | 18 ++++-- TelepathyQt4/channel.cpp | 5 +- TelepathyQt4/client-registrar.cpp | 2 + TelepathyQt4/connection-manager.cpp | 3 +- TelepathyQt4/connection-manager.h | 3 + TelepathyQt4/connection.cpp | 20 ++++-- TelepathyQt4/connection.h | 10 +-- TelepathyQt4/pending-channel-request.cpp | 13 +++- TelepathyQt4/pending-connection.cpp | 9 ++- TelepathyQt4/streamed-media-channel.cpp | 88 +++++++++++++++++++++++---- TelepathyQt4/streamed-media-channel.h | 11 ++++ tests/dbus/stateful-proxy.cpp | 5 -- 24 files changed, 330 insertions(+), 112 deletions(-) commit 77dfe02882075b0fd1b3b65346dd3f8260ae8f86 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 27 22:26:16 2010 -0200 qt4-client-gen.py: Properly deprecated interface property getters/setters. tools/qt4-client-gen.py | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) commit 11b5932565a92fa86d4d3f6e691281db45942e19 Author: Olli Salli Date: Fri Oct 29 16:28:52 2010 +0300 Update NEWS NEWS | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 50559ec95f03a8d720ca113cd16e462f511d1702 Merge: 064bae9 5f5cba3 Author: Olli Salli Date: Fri Oct 29 16:23:13 2010 +0300 Merge branch 'fdo-31087' Reviewed-by: Andre Magalhaes (andrunko) commit 5f5cba3d4d70a8ec1b5cc75b9cea02e9287a42b4 Author: Olli Salli Date: Fri Oct 29 16:11:25 2010 +0300 Fix ChannelRequest immutable property extraction to not rely on undefined behavior TelepathyQt4/channel-request.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 5090c32f4686b7ef79b913782254cc57d82a4cd8 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 27 10:36:06 2010 -0200 CapabilitiesBase: Fixed typo in documentation where refering to upgradingCalls method. TelepathyQt4/capabilities-base.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 57017e2366525bfcda9fb327332629a708139e8d Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 19 19:29:07 2010 -0200 Updated tests to also test the non-deprecated capabilities methods. tests/dbus/account-basics.cpp | 10 ++++++++++ tests/dbus/cm-basics.cpp | 14 ++++++++++++++ tests/dbus/conn-capabilities.cpp | 22 +++++++++++++++++++++- tests/dbus/contacts-capabilities.cpp | 6 ++++++ 4 files changed, 51 insertions(+), 1 deletion(-) commit 4fbae7c51bd20d0cc60c53cec8b2f11642d269b2 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 19 19:22:00 2010 -0200 ConnectionCapabilities: Split all conferenceXXX(withInitialInvitees) in 2 methods, conferenceXXX and conferenceXXXWithInvitees. TelepathyQt4/connection-capabilities.cpp | 160 +++++++++++++++++++++--------- TelepathyQt4/connection-capabilities.h | 9 +- 2 files changed, 118 insertions(+), 51 deletions(-) commit e00044a6a5b4ebb5ba98c3e43fa1a2343ee673b7 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 19 19:06:35 2010 -0200 CapabilitiesBase: Split videoCalls(withAudio) in 2 methods, videoCalls and videoCallsWithAudio. TelepathyQt4/capabilities-base.cpp | 55 ++++++++++++++++++++++++++++-------- TelepathyQt4/capabilities-base.h | 3 +- 2 files changed, 46 insertions(+), 12 deletions(-) commit b466132a744d798c41b9d9aed8b0d781fc2e02f9 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 19 18:54:26 2010 -0200 ContactCapabilities: Updated comment to properly name methods without supports prefix. TelepathyQt4/contact-capabilities.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit c833bc0b86b0cc3709d677012056ec1f01103b9a Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 19 18:54:03 2010 -0200 ConnectionCapabilities: Deprecate supportsXXX methods and provide XXX methods as alternative. TelepathyQt4/connection-capabilities.cpp | 70 +++++++++++++++++++++++++++--- TelepathyQt4/connection-capabilities.h | 25 +++++++---- 2 files changed, 80 insertions(+), 15 deletions(-) commit 5cd197710edce6c5dc31d296427f7e10b0c366d6 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 19 18:53:13 2010 -0200 CapabilitiesBase: Deprecate supportsXXX methods and provide XXX methods as alternative. TelepathyQt4/capabilities-base.cpp | 69 ++++++++++++++++++++++++++++-------- TelepathyQt4/capabilities-base.h | 24 ++++++++----- 2 files changed, 69 insertions(+), 24 deletions(-) commit 064bae9a71d8231ac554860d3322038512c536d0 Merge: 9a5ab2a a080081 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 29 09:47:46 2010 -0200 Merge branch 'new-constants' Reviewed-by: Olli Salli (oggis) commit a08008146e93528679fb12570810db9407ea6103 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 29 09:46:59 2010 -0200 qt4-constants-gen.py: Improved docs for new macros expanding to QLatin1String. tools/qt4-constants-gen.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 78883759218488c6c51b43db3259b8dda944ce93 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 27 19:41:14 2010 -0200 Changed defines to have TP_QT4 as prefix and kept old params in qt4-constants-gen.py unmodified, adding a new define-prefix param. TelepathyQt4/CMakeLists.txt | 8 ++++---- tools/qt4-constants-gen.py | 45 +++++++++++++------------------------------ 2 files changed, 17 insertions(+), 36 deletions(-) commit c9fe73b99d1612c0c1c6642a02d4a5233f4d46bc Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 27 10:50:35 2010 -0200 Added new constants for iface and error names that define both a QLatin1String version and a char * version using the same prefix. TelepathyQt4/CMakeLists.txt | 6 +++-- tools/qt4-constants-gen.py | 63 ++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 64 insertions(+), 5 deletions(-) commit 9a5ab2aa0c5f97605254d783a9f8d102c660af7d Merge: 45f5808 015ea4d Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 27 19:57:20 2010 -0200 Merge branch 'cmake' Reviewed-by: Olli Salli (oggis) commit 015ea4d8b50ad712a9c0e498f74fa2a4065ed60a Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 27 15:37:41 2010 -0200 cmake: Also depend on libqt4codegen.py when using qt4-{client/constants/types}-gen.py. cmake/modules/TpQt4Macros.cmake | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) commit 6f8a8ab61ec07cadfef818b45ed0e1ad90750470 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 27 15:22:47 2010 -0200 cmake: Fixed some dependency problems. cmake/modules/TpQt4Macros.cmake | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) commit 76cd81f1a18e86082d49ea6e40078ec49f003d1b Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 27 15:22:13 2010 -0200 cmake: Added DEPRECATED_DECLARATIONS_FLAGS to be used to compile the library and examples. cmake/modules/TelepathyDefaults.cmake | 7 +++++++ 1 file changed, 7 insertions(+) commit 45f5808c70f06074da944f4658e8885f056da56f Author: Olli Salli Date: Mon Oct 25 15:49:45 2010 +0300 Update NEWS NEWS | 2 ++ 1 file changed, 2 insertions(+) commit 8e73093b636afb453db45a593ebc1e8113284151 Merge: 84b9246 fe15f9b Author: Olli Salli Date: Mon Oct 25 15:48:39 2010 +0300 Merge branch 'pending-ready-fixes' Reviewed-by: Andre Magalhaes (andrunko) commit 84b9246885c433b990e106d8bb0394440680bf84 Author: Olli Salli Date: Mon Oct 25 15:45:59 2010 +0300 Update NEWS NEWS | 3 +++ 1 file changed, 3 insertions(+) commit 90a2b759c19e0b47aada5fe8789a2c86e24cfb24 Merge: 9d72711 4f67673 Author: Olli Salli Date: Mon Oct 25 15:36:01 2010 +0300 Merge branch 'account-handling-fixes' Reviewed-by: Andre Magalhaes (andrunko) commit 4f67673936ab30c7aacb1e4d2388f31ea10ce687 Author: Olli Salli Date: Sun Oct 24 21:21:55 2010 +0300 AccountSet: Don't leave wrappers around when accounts are removed Otherwise they conflict if the account is readded and the AM decides to reuse the object path (which it can do according to the spec). TelepathyQt4/account-set.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 729e1092d910271b11ea1d609a8d1d42dc3956ed Author: Olli Salli Date: Sun Oct 24 20:43:29 2010 +0300 Make AccountManager more robust against unfortunate D-Bus event ordering when introspecting TelepathyQt4/account-manager.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) commit fe15f9b542ae6159c809a19d762cf0053e373d31 Author: Olli Salli Date: Fri Oct 22 21:06:45 2010 +0300 Remove the half-implemented prepare() implementation in PendingReady to make the code cleaner This was also triggering some warnings from static code analysis tools, though in the end it seems they were false alarms after all. TelepathyQt4/pending-ready.cpp | 48 ++++++++++++++-------------------------- TelepathyQt4/pending-ready.h | 1 - 2 files changed, 16 insertions(+), 33 deletions(-) commit 680bdfdf60f7b8b779ebe3f24e0469392324688a Author: Olli Salli Date: Fri Oct 22 20:00:05 2010 +0300 Make TODO comments about unifying the two ways PendingReady is currently used TelepathyQt4/pending-ready.cpp | 6 ++++++ 1 file changed, 6 insertions(+) commit 9d7271107eca796abd3e6a66ff44219b970d1135 Merge: 7356b53 2a470c1 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 19 11:41:16 2010 -0200 Merge branch 'TODO' Reviewed-by: Olli Salli (oggis) commit 2a470c119688ff68d7a0ceb0fe26b7a168a3f11d Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 19 11:40:41 2010 -0200 Capabilities: Added more API/ABI break comments. TelepathyQt4/capabilities-base.h | 1 + TelepathyQt4/connection-capabilities.h | 1 + 2 files changed, 2 insertions(+) commit 31afbffd90ccbe93f404f848b973ee0506f10d62 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 19 11:37:35 2010 -0200 AccountManager: Let's not rename filterAccount(QVariantMap). TelepathyQt4/account-manager.h | 1 - 1 file changed, 1 deletion(-) commit 26e9a7e4fc5d8bf3080ffc5ebcca7a97db9d8e06 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 18 14:06:31 2010 -0200 Account: Added more API/ABI break comments. TelepathyQt4/account.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit b84419aacf0eece0aa64e6569f83f77ecf868218 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 18 13:20:22 2010 -0200 AccountManager: Do not deprecate constructors if they can be used the same way after being removed (using new constructors with default params). TelepathyQt4/account-manager.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit d8fc71884029599c7e982638c4eca83c25b00ad5 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 18 13:20:00 2010 -0200 Account: Do not deprecate constructors if they can be used the same way after being removed (using new constructors with default params). TelepathyQt4/account.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 98efebe5d46f7ac25e0cf5fa563ae4906eca812c Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 18 13:14:54 2010 -0200 AbstractInterface: Properly deprecate slots and renamed parent in the constructor to proxy. TelepathyQt4/abstract-interface.h | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) commit f805660d11b1bbbea42f55baebed1be4891317c2 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 18 13:09:22 2010 -0200 AbstractClient: Do not deprecate constructors if they can be used the same way after being removed (using new constructors with default params). TelepathyQt4/abstract-client.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 1bbd66e2b97a2e042e4c11f3687bcbb60b175fb4 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 6 02:26:07 2010 -0300 OptionalInterfaceFactory: Added TODO to hasInterface methods to make them const in the API break. TelepathyQt4/optional-interface-factory.h | 2 ++ 1 file changed, 2 insertions(+) commit e1fa6b3b6045cf88a17ee71614bbd49a1fb3bc0b Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 16 20:02:23 2010 +0100 Update TODO. TODO | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 3c52d1e03f45d9548c4c7d394ab8a750411f15cb Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 16 19:59:40 2010 +0100 ChannelDispatchOperation: Deprecate some methods. TelepathyQt4/channel-dispatch-operation.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 51477e650a8aeb9ee4804f0931f7ffc09bc6a9f4 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 16 19:58:10 2010 +0100 CapabilitiesBase: Added API/ABI break comments. TelepathyQt4/capabilities-base.h | 1 + 1 file changed, 1 insertion(+) commit ee20fa7b0d8c598ccb286dbe6ee559e2e87083e5 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 16 19:43:04 2010 +0100 Added TODO with general comments about improvements/fixes and API/ABI break. TODO | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) commit 4f138309128cd680f1b82314da5ce644e60a9b31 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 16 19:28:40 2010 +0100 AccountManager: Added API/ABI break comments and deprecated methods. TelepathyQt4/account-manager.h | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) commit bea8dbdd76839a16249219d8172215b09c0ad470 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 16 19:05:12 2010 +0100 Account: Added API/ABI break comments and deprecated methods. TelepathyQt4/account.h | 45 ++++++++++++++++++++++++++++++++------------- 1 file changed, 32 insertions(+), 13 deletions(-) commit d270cb872ccda55086fdd0d9222aee4a18c2ccbb Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 16 18:25:02 2010 +0100 AbstractInterface: Added API/ABI break comments and deprecated methods. TelepathyQt4/abstract-interface.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit 6ce2d07fcaed7699b3b6f8ebc092e1336b74d88f Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 16 18:01:51 2010 +0100 AbstractClient*: Added API/ABI break comments and deprecated methods. TelepathyQt4/abstract-client.h | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) commit 7356b537150170688217dfdbadd8c9322eaa9458 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 18 14:31:57 2010 -0200 Update NEWS NEWS | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit fcd52efb228edb35e518ad4d204aa6fa88803b66 Merge: c5eb46e 268345f Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 18 14:31:04 2010 -0200 Merge branch 'trivia' Reviewed-by: Olli Salli (oggis) commit c5eb46e266fea171c0a714ba78a8d101652b2105 Author: Olli Salli Date: Mon Oct 18 19:00:33 2010 +0300 Update NEWS NEWS | 7 +++++++ 1 file changed, 7 insertions(+) commit 1ea2640d73254d95b70c0cea59b2fd2b71510a5b Merge: cac37d7 b5bb673 Author: Olli Salli Date: Mon Oct 18 18:01:04 2010 +0300 Merge remote branch 'bari/external-type' Reviewed-by: Olli Salli (oggis) commit 268345f00f857632c13395de6fb5f7a75c173669 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 18 13:02:43 2010 -0200 ContactSearchChannel: Properly document signals. TelepathyQt4/contact-search-channel.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit cac37d72f7770db3acf741cd9900ed0614b2419f Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 18 09:02:16 2010 -0200 Update NEWS. NEWS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 70e9957ee66e927edea2e3b99a8a986adf8efea0 Merge: bca4e94 0e81174 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 18 09:01:39 2010 -0200 Merge remote branch 'gkiagia/compile-fixes' Reviewed-by: Andre Moreira Magalhaes (andrunko) commit 0e811745f04712af33827628c879f10ef21c5c75 Author: George Kiagiadakis Date: Sat Oct 16 15:47:06 2010 +0300 Require telepathy-glib 0.11.16 for Channel.Interface.Conference. CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 14a67846e3724d692a3d9afe4cea8fe943773d10 Author: George Kiagiadakis Date: Sat Oct 16 15:40:50 2010 +0300 Use guint instead of uint in glib code. Fixes compilation of the glib tests. tests/lib/glib/contact-search-chan.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit bca4e94046759ba6cd9261e4f378f12cba67b88f Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 15 21:16:57 2010 -0300 Start 0.3.13 development CMakeLists.txt | 4 ++-- NEWS | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) commit 493cbc68c5b4c179074dadb1dc083ed7c90b487b Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 15 20:58:44 2010 -0300 Prepare release 0.3.12 CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 37a934112b0e8556c1b39c816f37195660be177d Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 15 20:56:26 2010 -0300 Update NEWS NEWS | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) commit 0151d2a8960ecf9c47b734557b4cef0959445239 Merge: 1e8b3ff cc4a845 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 15 16:02:44 2010 -0300 Merge branch 'contact-search' Reviewed-by: Olli Salli (oggis) commit cc4a8459496634d32bbb797ebecd7d3b2105d55b Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 15 15:56:49 2010 -0300 ContactSearchChannel: Added docs for signals. TelepathyQt4/contact-search-channel.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) commit 0657e68d0b4682f3f9806f4c7cc6107c7f754463 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 15 15:43:38 2010 -0300 chan-contact-search test: Test that the pending operation returned from search only finishes when the state changes. tests/dbus/chan-contact-search.cpp | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) commit e84a11f3203819ad0ef1e33aa3db6d8447d72b0c Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 15 15:35:57 2010 -0300 ContactSearchChannel: Updated docs. TelepathyQt4/contact-search-channel.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit aeb5e2810c1183f94442c26c51db3d949be87c75 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 15 15:31:55 2010 -0300 ContactSearchChannel: Added overloaded search method to take a key and term to search. TelepathyQt4/contact-search-channel.cpp | 26 ++++++++++++++++++++++++++ TelepathyQt4/contact-search-channel.h | 3 ++- tests/dbus/chan-contact-search.cpp | 4 +--- 3 files changed, 29 insertions(+), 4 deletions(-) commit 2fb682daa3f5af330b31b122310f7fa238d3d0ae Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 15 15:19:07 2010 -0300 ContactSearchChannel: Return PendingOperation * in search and guarantees that it will return after the state changes. TelepathyQt4/CMakeLists.txt | 1 + TelepathyQt4/contact-search-channel-internal.h | 52 +++++++++++++++++++ TelepathyQt4/contact-search-channel.cpp | 63 ++++++++++++++++++++++-- TelepathyQt4/contact-search-channel.h | 4 +- 4 files changed, 115 insertions(+), 5 deletions(-) commit 6df0e832a515fe1944e7d48ec5d70e6b20af4410 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 15 14:37:59 2010 -0300 chan-contact-search test: Test when the search result is empty. tests/dbus/chan-contact-search.cpp | 126 ++++++++++++++++++++++++++++-------- 1 file changed, 98 insertions(+), 28 deletions(-) commit 7e88d31c522771aae4c77ed08a2875b646d376a7 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 15 14:05:27 2010 -0300 chan-contact-search test: Make sure the state is correct when receiving the search result. tests/dbus/chan-contact-search.cpp | 1 + 1 file changed, 1 insertion(+) commit 4c6cb432d194e81756b78ea97db19f6f0b406cf8 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 15 14:03:08 2010 -0300 ContactSearchChannel: Added a queue of signals to guarantee signal emission order. TelepathyQt4/contact-search-channel.cpp | 71 +++++++++++++++++++++++-------- 1 file changed, 54 insertions(+), 17 deletions(-) commit 1deaa5847e71a0fb34a6af2b282f8c4173253937 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 15 13:42:22 2010 -0300 Contact: Removed InfoFields::setAllFields method. TelepathyQt4/contact.cpp | 12 +----------- TelepathyQt4/contact.h | 5 ----- TelepathyQt4/pending-contact-info.cpp | 5 ++--- 3 files changed, 3 insertions(+), 19 deletions(-) commit 0ab8d9fe5cecb8e298646fd5e1a0ad366e4c22b3 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 15 12:52:52 2010 -0300 contacts-info test: Test Contact::infoFields. tests/dbus/contacts-info.cpp | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) commit 0ba2b33f2c308ed2e4628509330362ede4ac3cb2 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 15 12:52:03 2010 -0300 PendingContactInfo: Use Contact::InfoFields to represent contact info. TelepathyQt4/contact.h | 1 + TelepathyQt4/pending-contact-info.cpp | 27 +++++++++++++++++++++++---- TelepathyQt4/pending-contact-info.h | 3 ++- 3 files changed, 26 insertions(+), 5 deletions(-) commit 7447374c54c1476eb8ccaad26930024d5b5f637a Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 15 12:44:05 2010 -0300 ContactSearchChannel: Use Contact::InfoFields instead of ContactInfoFieldList for search results map. TelepathyQt4/contact-search-channel.cpp | 2 +- TelepathyQt4/contact-search-channel.h | 2 +- tests/dbus/chan-contact-search.cpp | 5 +++-- 3 files changed, 5 insertions(+), 4 deletions(-) commit a82239b92d258f0c07b3dfed9d8ee04a2f7f6dcb Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 15 12:40:53 2010 -0300 Contact: Added wrapper for ContactInfoFieldList. TelepathyQt4/contact.cpp | 113 ++++++++++++++++++++++++++++++++++++++++++---- TelepathyQt4/contact.h | 30 +++++++++++- 2 files changed, 132 insertions(+), 11 deletions(-) commit 0ba98550f9d5e8f96b59c5ce316c9704af400ca2 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 14 20:42:12 2010 -0300 chan-contact-search test: Added test for ContactSearchChannel. tests/dbus/CMakeLists.txt | 1 + tests/dbus/chan-contact-search.cpp | 276 ++++++++++++++++++++++++++++++++++++ 2 files changed, 277 insertions(+) commit 31bca40d271a963d559234dde05e46e506a14f90 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 14 20:41:26 2010 -0300 ContactSearchChannel: Fixed slot declaration by properly adding Tp namespace to PendingOperation. TelepathyQt4/contact-search-channel.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit fa3f3e9f4928bac39904eb45caa61626235ef93a Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 14 18:55:37 2010 -0300 contact-search-chan test: Added test channel for ContactSearch iface. tests/lib/glib/CMakeLists.txt | 2 + tests/lib/glib/contact-search-chan.c | 708 ++++++++++++++++++++++++++++++++++ tests/lib/glib/contact-search-chan.h | 74 ++++ 3 files changed, 784 insertions(+) commit 5e5a1c42a04d44c1a26efe8085947ff8272fdc54 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 14 14:29:07 2010 -0300 ConnectionCapabilities: Added methods to check if ContactSearch channel is supported. TelepathyQt4/connection-capabilities.cpp | 60 ++++++++++++++++++++++++++++++ TelepathyQt4/connection-capabilities.h | 4 ++ 2 files changed, 64 insertions(+) commit ae7f3db3258e5d2402bf73f16669e3b4b372333a Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 14 13:59:17 2010 -0300 PendingOperation: Make PendingVoid delete the watcher after finished. TelepathyQt4/pending-operation.cpp | 2 ++ 1 file changed, 2 insertions(+) commit 249bdcedf732575ee4bed490b69617ffb5f4f033 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 14 13:54:00 2010 -0300 ContactSearchChannel: Use PendingVoid for search/continueSearch/stopSearch so we don't leak the watchers. TelepathyQt4/contact-search-channel.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 9cc891ae96b6798bbd4848272865f3b194636047 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 14 13:45:27 2010 -0300 ContactSearchChannel: Make the search/continueSearch/stopSearch methods return void. TelepathyQt4/contact-search-channel.cpp | 47 +++++++++++++++++++------------ TelepathyQt4/contact-search-channel.h | 6 ++-- 2 files changed, 32 insertions(+), 21 deletions(-) commit 4ae10982345fcffacbf224c84931309028fa83c7 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 14 13:27:35 2010 -0300 Account: Properly use and document the limit param when creating a contact search channel. TelepathyQt4/account.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit ee3abf180f03114a1a24fb829ce7a90965dc47eb Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 14 13:26:33 2010 -0300 ContactSearchChannel: Properly declare searchStateChanged signal with namespace where appropriate. TelepathyQt4/contact-search-channel.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 94f2ea406d0f08c846d1e943002f697b6654e197 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 14 13:22:40 2010 -0300 ContactSearchChannel: Added a wrapper from ContactPtr to contact info in the search results. TelepathyQt4/contact-search-channel.cpp | 70 +++++++++++++++++++++++++++++-- TelepathyQt4/contact-search-channel.h | 5 ++- 2 files changed, 71 insertions(+), 4 deletions(-) commit aa1d56343bf36e434873bee384a3c4ed2f294e9c Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 14 12:21:29 2010 -0300 ContactSearchChannel: Bind Search/More/Stop. TelepathyQt4/contact-search-channel.cpp | 70 +++++++++++++++++++++++++++++++ TelepathyQt4/contact-search-channel.h | 6 +++ 2 files changed, 76 insertions(+) commit 5b3bc365a0890b16679c59921986f8cbb111d228 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 14 10:58:07 2010 -0300 ContactSearchChannel: Fixed copy/paste debug message. TelepathyQt4/contact-search-channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 242e3e5cf6888a0bf449cee4cfeaccf53aca518f Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 14 10:21:32 2010 -0300 ContactSearchChannel: Added accessors for properties. TelepathyQt4/contact-search-channel.cpp | 229 ++++++++++++++++++++++++++++++- TelepathyQt4/contact-search-channel.h | 40 ++++++ 2 files changed, 265 insertions(+), 4 deletions(-) commit 2f858b1baa105348d5df5d524ecc07413db3eeef Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 14 09:44:58 2010 -0300 ChannelFactory: Handle ContactSearch channels. TelepathyQt4/channel-factory.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit 97ad03ec0062a66928b496e56f153f93b8923bc4 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 14 09:40:15 2010 -0300 Account: Added createContactSearchChannel method. TelepathyQt4/account.cpp | 38 ++++++++++++++++++++++++++++++++++++++ TelepathyQt4/account.h | 6 ++++++ 2 files changed, 44 insertions(+) commit 8f57ab795babe9a0dc47ea89809c26e182ec446f Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 14 09:27:39 2010 -0300 ContactSearchChannel: Added skeleton class. TelepathyQt4/CMakeLists.txt | 4 + TelepathyQt4/ContactSearchChannel | 13 +++ TelepathyQt4/contact-search-channel.cpp | 139 +++++++++++++++++++++++++++++++ TelepathyQt4/contact-search-channel.h | 59 +++++++++++++ TelepathyQt4/types.h | 2 + 5 files changed, 217 insertions(+) commit 1e8b3ff9af352667cf604f182ac39a3cd1265579 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 14 08:39:29 2010 -0300 Updated NEWS. NEWS | 4 ++++ 1 file changed, 4 insertions(+) commit 950f081e4dd85ab0553bf90cdf3ce162fd887bd6 Merge: e2aec29 e7821c6 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 14 08:36:09 2010 -0300 Merge branch 'conference' Reviewed-by: Olli Salli (oggis) commit e7821c6a43b0354ccffccc8d496eb69fcd21d34f Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 14 08:33:07 2010 -0300 Renamed conference test channels from Example to TpTests namespace. tests/dbus/chan-conference-draft.cpp | 8 +-- tests/dbus/chan-conference.cpp | 8 +-- tests/lib/glib/future/conference-draft/chan.c | 56 ++++++++++---------- tests/lib/glib/future/conference-draft/chan.h | 70 ++++++++++++------------- tests/lib/glib/future/conference/chan.c | 56 ++++++++++---------- tests/lib/glib/future/conference/chan.h | 70 ++++++++++++------------- 6 files changed, 134 insertions(+), 134 deletions(-) commit 858d4eb6d6267ce586fd26409c0d9cd6a4b279c7 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 14 08:26:40 2010 -0300 conference tests: Check if channel removal updates Channel::conferenceChannels(). tests/dbus/chan-conference-draft.cpp | 8 ++++++++ tests/dbus/chan-conference.cpp | 8 ++++++++ 2 files changed, 16 insertions(+) commit 39a5d22aaeda7d523d66dfa52233ebefa46c96bf Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 14 08:17:41 2010 -0300 chan-conference-draft test: Properly set name using g_set_prgname. tests/dbus/chan-conference-draft.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5adbbb0f71e1e3ef3f4f3a15bc8f0d75f123c851 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 14 08:16:16 2010 -0300 profile test: Updated to last changes in test-profile.profile. tests/profile.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit aafef0f4d6df9eb27ae492480d40ad0452e6c9f3 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 14 03:05:04 2010 -0300 account-basics test: Added test for capabilities(). tests/dbus/CMakeLists.txt | 5 +- tests/dbus/account-basics.cpp | 213 ++++++++++++++++++++++++- tests/telepathy/profiles/test-profile.profile | 8 +- 3 files changed, 220 insertions(+), 6 deletions(-) commit 8bf583b49babead9414bfb9c067b623530b37d9a Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 14 03:04:02 2010 -0300 account-manager example: Add option to set Connection and ConnectionStatus. tests/lib/python/account-manager.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) commit c0830d98e8d531cba655af0e61a65d22ae89dc0b Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 14 03:02:01 2010 -0300 Account: Only warn if unable to create a profile in profile(). TelepathyQt4/account.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) commit 526bc2f56a8455453921f96882e7c4e9ee8abeed Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 14 01:08:13 2010 -0300 Do not leak memory in conference example cms if a channel is removed from the conference. tests/lib/glib/future/conference-draft/chan.c | 3 ++- tests/lib/glib/future/conference/chan.c | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) commit 256e00407d0961cf25f1917304daab1a6c509d13 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 14 01:06:07 2010 -0300 chan-conference test: Added test for Conference interface. tests/dbus/CMakeLists.txt | 1 + tests/dbus/chan-conference.cpp | 333 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 334 insertions(+) commit 9b2c65203ec48d1d20c6ded759ae52e7b2fd8928 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 14 01:05:23 2010 -0300 conference example cm: Added example cm to test Conference interface. tests/lib/glib/CMakeLists.txt | 1 + tests/lib/glib/future/CMakeLists.txt | 1 + tests/lib/glib/future/conference/CMakeLists.txt | 12 + tests/lib/glib/future/conference/chan.c | 663 +++++++++++++++++++++++ tests/lib/glib/future/conference/chan.h | 80 +++ 5 files changed, 757 insertions(+) commit 351d425a1f35f20e3af3137bfc46771107d55a63 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 14 01:04:23 2010 -0300 chan-conference-draft test: Test conference channel removal and supportsNonMerges support. tests/dbus/chan-conference-draft.cpp | 43 ++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) commit 0533b30fa23a719b9788553494f8f0eef9314290 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 14 01:03:39 2010 -0300 conference-draft example cm: Added method to remove a channel from a conference. tests/lib/glib/future/conference-draft/chan.c | 18 ++++++++++++++++++ tests/lib/glib/future/conference-draft/chan.h | 3 ++- 2 files changed, 20 insertions(+), 1 deletion(-) commit 7c6a1421927d0df08b9c8f03aebcf37b09e6695b Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 13 20:12:56 2010 -0300 Channel: Updated conferenceOriginalChannels() documentation. TelepathyQt4/channel.cpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) commit 8ab4dc509ccff7210acb2862f193914d7d208f2a Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 13 20:02:31 2010 -0300 Account: Updated capabilities() documentation. TelepathyQt4/account.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit f76d6bfbf7f4961f6e7da71a80da137010778dd2 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 13 19:50:55 2010 -0300 ConnectionCapabilities: Updated documentation for methods to check conference support. TelepathyQt4/connection-capabilities.cpp | 39 +++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 12 deletions(-) commit 1b6ea73d944e3c7fc1be3c4c221b8e627136a590 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 13 19:29:47 2010 -0300 Channel: Use immutableProperties when creating conference channel objects, if available. TelepathyQt4/channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f30a2d0679873fd3f61ddc681d0c15ebba0ab031 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 13 19:28:21 2010 -0300 Renamed Conference.DRAFT related tests to include draft in the name as a preparation to include support for the non-draft version. tests/dbus/CMakeLists.txt | 2 +- tests/dbus/chan-conference-draft.cpp | 291 +++++++++ tests/dbus/chan-conference.cpp | 291 --------- tests/lib/glib/CMakeLists.txt | 2 +- tests/lib/glib/future/CMakeLists.txt | 2 +- .../glib/future/conference-draft/CMakeLists.txt | 12 + tests/lib/glib/future/conference-draft/chan.c | 628 ++++++++++++++++++++ tests/lib/glib/future/conference-draft/chan.h | 79 +++ tests/lib/glib/future/conference/CMakeLists.txt | 12 - tests/lib/glib/future/conference/chan.c | 628 -------------------- tests/lib/glib/future/conference/chan.h | 79 --- 11 files changed, 1013 insertions(+), 1013 deletions(-) commit 7b3c23a5fa3eb188019b713c50b9f5bef5e30c32 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 13 19:27:34 2010 -0300 Channel: Include ChannelFactory now that connection.h does not include it anymore. TelepathyQt4/channel.cpp | 1 + 1 file changed, 1 insertion(+) commit 49e50f6ef2e9f4b7b4c335f1428671e30f241e4c Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 11 02:40:40 2010 -0300 Account: Use Conference or Conference.DRAFT when requesting conference channelsas according to what is supported. Also fixed a bug where Conf.InitialInviteeHandles was being added to the request parameters as object paths instead of handles. TelepathyQt4/account.cpp | 189 +++++++++++++++++++++++++++++++--------------- 1 file changed, 130 insertions(+), 59 deletions(-) commit 1a337834a55ab9bc9dfceaee0959000682a31452 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 11 01:43:27 2010 -0300 Account: Make capabilities() use Profile::unsupportedRccs if any. Also make sure capabilitiesChanged is emitted if the profile changes and the caps is not using the connection caps. TelepathyQt4/account.cpp | 145 ++++++++++++++++++++++---------- TelepathyQt4/connection-capabilities.h | 1 + 2 files changed, 100 insertions(+), 46 deletions(-) commit 953364e6dcf3a494ffd790ac46bd4090b9008bf2 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 11 00:40:50 2010 -0300 Channel: Build contact for conference channel removed actor. TelepathyQt4/channel.cpp | 102 +++++++++++++++++++++++++++++++++++++++++----- TelepathyQt4/channel.h | 1 + 2 files changed, 92 insertions(+), 11 deletions(-) commit 404cbc868d04d407e8c7acc0fff0b2237b25605d Author: Andre Moreira Magalhaes (andrunko) Date: Sun Oct 10 23:37:51 2010 -0300 Channel: Expose Conference.OriginalChannels as a map of handles to channel objects. TelepathyQt4/channel.cpp | 44 ++++++++++++++++++++++++++++++++++++++------ TelepathyQt4/channel.h | 1 + 2 files changed, 39 insertions(+), 6 deletions(-) commit 52be9b602a9877eda9d0ff935fe2b787882672d4 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Oct 10 23:37:27 2010 -0300 Channel: Use ChannelFactory when instantiating conference channels. TelepathyQt4/channel.cpp | 72 +++++++++++++++++++++++++++------------------- 1 file changed, 43 insertions(+), 29 deletions(-) commit 3029ddb0c41a1310deb6940ede68e8b14263360f Author: Andre Moreira Magalhaes (andrunko) Date: Sun Oct 10 23:36:35 2010 -0300 Channel: Fixed conference methods' documentation. TelepathyQt4/channel.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit 167e380088eb7c7e2fe65660afa8f4504e0033a9 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 11 00:44:37 2010 -0300 ConnectionCapabilities: Added methods to check if conference is supported. TelepathyQt4/connection-capabilities.cpp | 92 ++++++++++++++++++++++++++++++ TelepathyQt4/connection-capabilities.h | 4 ++ 2 files changed, 96 insertions(+) commit f9f8de50b7041caa1c0b2e8c7c10c5d44124095d Author: Andre Moreira Magalhaes (andrunko) Date: Sun Oct 10 21:43:25 2010 -0300 Channel: Always return false in conferenceSupportsNonMerges if Conference interface is supported. TelepathyQt4/channel.cpp | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) commit b7fbe11614999952eb4050048857bf6c8fe08e6a Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 6 02:24:59 2010 -0300 Account: Added TODO of what to do when creating conference channels now that we support both Conference and Conference.DRAFT. TelepathyQt4/account.cpp | 5 +++++ 1 file changed, 5 insertions(+) commit f4c55bd5c69dd6838c89f606dc3ef9e088ba7e4f Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 6 02:24:24 2010 -0300 Channel: Added support for Conference interface (keep support for Conference.DRAFT for now). TelepathyQt4/channel.cpp | 153 ++++++++++++++++++++++++++++++++++++++-------- TelepathyQt4/channel.h | 14 ++++- TelepathyQt4/channel.xml | 1 + 3 files changed, 140 insertions(+), 28 deletions(-) commit e2aec29d179abd56bb56ad8aa6a353e23682ab6c Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 13 14:47:32 2010 -0300 Updated NEWS. NEWS | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) commit fe1ed8485cd48380c8eac21c6252e7c2a05f72c6 Merge: 49607cc b8502d4 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 13 14:17:48 2010 -0300 Merge branch 'spec-0.21.1' Reviewed-by: Olli Salli (oggis) commit 49607cc5173336d93250d1b0efed8dae25112d22 Merge: dd2fc01 86ddb2b Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 13 14:17:29 2010 -0300 Merge branch 'smchan-improvements' Reviewed-by: Olli Salli (oggis) commit b8502d4f7ceaeb0db84830a736b2b809c1568bd1 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 13 13:49:36 2010 -0300 client test: Check if CR::immutableProperties is being set correctly when passing ObserverInfo::request-properties. tests/dbus/client.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) commit 86ddb2bac8d472833ea821f666c7af3efd801379 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 13 12:54:26 2010 -0300 StreamedMediaChannel: No need to fallback to Connection::selfHandle as Channel::groupSelfContact is always available. TelepathyQt4/streamed-media-channel.cpp | 57 +++++++++---------------------- 1 file changed, 16 insertions(+), 41 deletions(-) commit 2f61851e176546f0ed8286567b00f2442f32b2f4 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 13 12:36:50 2010 -0300 client test: Test usage of ObserverInfo::request-properties. tests/dbus/client.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) commit c587bf4053dbf66593cb37cb44bd63b975efcc9b Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 13 12:36:15 2010 -0300 ClientRegistrar: Make use of ObserverInfo::request-properties. TelepathyQt4/client-registrar.cpp | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) commit dd2fc013f9b900e9f1d1412a363d43e770d84d5d Merge: 76abe3f db0a8d4 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 13 11:54:49 2010 -0300 Merge remote branch 'origin/conn-caps-doc-fix' Reviewed-by: Olli Salli (oggis) commit 76abe3f4b13b7bb018867f4e5d498ce8203cdbdf Merge: a49f5d0 6ed9a51 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 13 11:54:41 2010 -0300 Merge remote branch 'origin/am-undeprecate-acc-for-path' Reviewed-by: Olli Salli (oggis) commit 6ed9a51f2dd6354180fbe96611d665aaf20ec647 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 11 10:29:50 2010 -0300 AccountManager: Un-deprecate methods to get an account given a path. TelepathyQt4/account-manager.cpp | 12 ++++++++++++ TelepathyQt4/account-manager.h | 4 ++-- 2 files changed, 14 insertions(+), 2 deletions(-) commit b5bb67325e314dd7eba18afef55dd49096215efd Author: Marco Barisione Date: Mon Oct 11 11:46:30 2010 +0100 Don't ignore the namespace in libqt4codegen's binding_from_decl() Ignoring the namespace means that the codegen thinks the spec is broken when we use external types: the type "Foo" is expected to be provided, while the spec actually provides "Tp::Foo". tools/libqt4codegen.py | 6 +++++- tools/qt4-types-gen.py | 5 ++++- 2 files changed, 9 insertions(+), 2 deletions(-) commit 405e5898a4cdbd4caec9428a51da43b583c11e88 Author: Marco Barisione Date: Mon Oct 11 11:48:24 2010 +0100 libqt4codegen: get the Tp type of external types from the name attribute In the spec the Telepathy type is the value of the "name" attribute of "", but we were trying to use the non-existing "tp:type" attribute. Fixes: fd.o#30223 - telepathy-qt4's codegen doesn't deal with tp:external-type properly tools/libqt4codegen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5e05c5e061fc46aa4545d227facfe07cdb9e0906 Author: Will Thompson Date: Thu Sep 9 11:27:39 2010 +0100 Use an external type that is not mapped to a Qt type in the example Use Telepathy's CurrencyAmount in the ConnectionInterfaceHats example, thus breaking the compilation as the only external types that work at the moment are the ones that are mapped to Qt types (like contact handles that are mapped to uints). examples/extensions/Connection_Interface_Hats.xml | 27 +++++++++++++++++++++ examples/extensions/all.xml | 2 ++ 2 files changed, 29 insertions(+) commit 234dfb1b3a9350829083a9ea941b938dba2fd5a2 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 11 06:25:22 2010 -0300 StreamedMediaChannel: Improved test coverage. tests/dbus/streamed-media-chan-call.cpp | 223 ++++++++++++++++++++++++++++--- tests/dbus/streamed-media-chan.cpp | 10 ++ 2 files changed, 218 insertions(+), 15 deletions(-) commit 04a748588aec41fa09535976a220b79e60284dc3 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 11 06:23:04 2010 -0300 future call channel: Added support for Content.Remove. tests/lib/glib/future/call/call-channel.c | 29 ++++++++++++++++++++ tests/lib/glib/future/call/call-content.c | 41 +++++++++++++++++++++++++++-- 2 files changed, 68 insertions(+), 2 deletions(-) commit fa732138d84a004c02cf4c3f64d2ea82949e9b6d Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 11 06:22:25 2010 -0300 Channel: Fixed debug messages. TelepathyQt4/channel.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) commit ac45b1814f8ad6832e0565cbf6e3061a535c9e43 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 11 06:21:31 2010 -0300 StreamedMediaChannel: requestDirection when using Call should not change receive for self contact. TelepathyQt4/streamed-media-channel.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) commit c5be5b35950228e262532461027c185e4ef2c172 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 11 06:20:43 2010 -0300 StreamedMediaChannel: updateSMDirection don't need to change the current direction as send/receive are passed as params. TelepathyQt4/streamed-media-channel.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) commit a49f5d01d7e6340d7db18f998e1bc28955868f0c Author: Olli Salli Date: Sun Oct 10 23:36:56 2010 +0300 Don't make connection.h depend on ChannelFactory and ContactFactory Reviewed-by: Andre Magalhaes (andrunko) TelepathyQt4/connection.cpp | 2 ++ TelepathyQt4/connection.h | 2 -- tests/dbus/chan-basics.cpp | 2 ++ tests/dbus/chan-conference.cpp | 2 ++ tests/dbus/chan-group.cpp | 2 ++ tests/dbus/conn-basics.cpp | 2 ++ tests/dbus/conn-capabilities.cpp | 2 ++ tests/dbus/conn-requests.cpp | 2 ++ tests/dbus/conn-roster-groups.cpp | 2 ++ tests/dbus/conn-roster.cpp | 2 ++ tests/dbus/contacts-avatar.cpp | 2 ++ tests/dbus/contacts-capabilities.cpp | 3 +++ tests/dbus/contacts-info.cpp | 2 ++ tests/dbus/contacts-location.cpp | 2 ++ tests/dbus/contacts.cpp | 2 ++ tests/dbus/handles.cpp | 2 ++ tests/dbus/streamed-media-chan-call.cpp | 2 ++ tests/dbus/streamed-media-chan.cpp | 2 ++ tests/dbus/text-chan.cpp | 2 ++ 19 files changed, 37 insertions(+), 2 deletions(-) commit b767c147e04843b7556b617720152e19fcebe41a Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 7 14:46:32 2010 -0300 StreamedMediaChannel: Fix fd.o#30386 - Regression: StreamedMediaChannel::streamAdded is not emitted when one requests a new stream using a StreamedMedia channel type. TelepathyQt4/streamed-media-channel.cpp | 3 +++ 1 file changed, 3 insertions(+) commit 926311d88c674121123177782c1162e590c4ba30 Merge: 1ee56aa 57cb4bb Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 11 03:34:44 2010 -0300 Merge branch 'factories' Reviewed-by: Olli Salli (oggis) commit 1ee56aa15be0e484496d7e3116208d00b4ebd3f5 Merge: a6a193d 9ed06fe Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 11 03:33:53 2010 -0300 Merge branch 'tp-qt4-farsight-install-fix' Reviewed-by: Olli Salli (oggis) commit a6a193d06204bd9f14137b76507fe2b096cc6a3a Merge: cf3c473 c71389b Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 11 03:32:35 2010 -0300 Merge branch 'account-doc-fix' Reviewed-by: Olli Salli (oggis) commit e9d3b64f6833aaa67355cd871756386d8bb39037 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 11 03:28:08 2010 -0300 Added auto generated classes for new Conn.ClientTypes/ContactGroups/ContactList/PowerSaving and Chan.ServerTLSConnection. TelepathyQt4/CMakeLists.txt | 5 ++++ .../ChannelTypeServerTLSConnectionInterface | 13 +++++++++ TelepathyQt4/ConnectionInterfaceClientTypes | 13 +++++++++ TelepathyQt4/ConnectionInterfaceContactGroups | 13 +++++++++ TelepathyQt4/ConnectionInterfaceContactList | 13 +++++++++ TelepathyQt4/ConnectionInterfacePowerSaving | 13 +++++++++ TelepathyQt4/channel.h | 6 ++++ TelepathyQt4/channel.xml | 1 + TelepathyQt4/connection.h | 30 ++++++++++++++++++-- TelepathyQt4/connection.xml | 4 +++ 10 files changed, 108 insertions(+), 3 deletions(-) commit db0a8d4bca3d150b896f55ba35925b6153e9def8 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 11 00:44:45 2010 -0300 ConnectionCapabilities: Fix doc for supportsTextChatRooms. TelepathyQt4/connection-capabilities.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 9ed06feed035eb8c99f568e9195cfb4842e9dd81 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 8 16:04:43 2010 -0300 Install TelepathyQt4/Farsight/global.h. TelepathyQt4/Farsight/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 79a914e7832d4086790fd20fe58630387310e864 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 6 00:25:08 2010 -0300 Update to spec 0.21.1 TelepathyQt4/channel.cpp | 9 +- TelepathyQt4/future-channel.xml | 2 +- spec/Account.xml | 31 +- spec/Account_Interface_Minimum_Presence.xml | 108 +++++ spec/Authentication_TLS_Certificate.xml | 195 ++++---- spec/Channel.xml | 11 +- spec/Channel_Dispatcher_Future.xml | 377 +++++++++++++++ spec/Channel_Interface_Addressing.xml | 107 +++++ spec/Channel_Interface_Conference.xml | 491 +++++++++++++------ spec/Channel_Interface_Conference_DRAFT.xml | 428 +++++++++++++++++ spec/Channel_Interface_DTMF.xml | 9 + spec/Channel_Interface_Mergeable_Conference.xml | 6 +- spec/Channel_Interface_SMS.xml | 93 ++++ spec/Channel_Interface_Splittable.xml | 9 +- spec/Channel_Request_Future.xml | 98 ++++ spec/Channel_Type_Call.xml | 13 + spec/Channel_Type_Server_TLS_Connection.xml | 19 +- spec/Channel_Type_Streamed_Media.xml | 6 +- spec/Client_Handler.xml | 20 +- spec/Client_Handler_Future.xml | 4 +- spec/Client_Interface_Requests.xml | 4 +- spec/Client_Observer.xml | 11 +- spec/Connection.xml | 6 +- spec/Connection_Interface_Addressing.xml | 258 ++++++++++ spec/Connection_Interface_Cellular.xml | 53 ++- spec/Connection_Interface_Client_Types.xml | 47 +- spec/Connection_Interface_Communication_Policy.xml | 163 +++++++ spec/Connection_Interface_Contact_Groups.xml | 164 +++++-- spec/Connection_Interface_Contact_List.xml | 492 +++++++++++++------- spec/Connection_Interface_Power_Saving.xml | 110 +++++ spec/Connection_Interface_Resources.xml | 212 +++++++++ spec/Connection_Interface_Simple_Presence.xml | 131 +++++- spec/Protocol.xml | 24 +- spec/Protocol_Interface_Addressing.xml | 300 ++++++++++++ spec/all.xml | 12 +- spec/errors.xml | 10 +- spec/generic-types.xml | 17 + tests/lib/glib/future/extensions/channel.xml | 2 +- 38 files changed, 3524 insertions(+), 528 deletions(-) commit c71389bb1224f89ef78cb8728700e43719574338 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 8 16:00:35 2010 -0300 Account: Fixed documentation for create and constructor methods. TelepathyQt4/account.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 57cb4bbbf0a4330d6f64b24c4588e4e7b55cbf3d Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 8 15:58:24 2010 -0300 Make all tests use the non-deprecated Connection::create methods that takes factories as params. tests/dbus/chan-basics.cpp | 4 +++- tests/dbus/chan-conference.cpp | 4 +++- tests/dbus/chan-group.cpp | 4 +++- tests/dbus/client.cpp | 4 +++- tests/dbus/conn-basics.cpp | 4 +++- tests/dbus/conn-capabilities.cpp | 4 +++- tests/dbus/conn-requests.cpp | 4 +++- tests/dbus/conn-roster-groups.cpp | 8 ++++++-- tests/dbus/conn-roster.cpp | 4 +++- tests/dbus/contacts-avatar.cpp | 4 +++- tests/dbus/contacts-capabilities.cpp | 4 +++- tests/dbus/contacts-info.cpp | 4 +++- tests/dbus/contacts-location.cpp | 4 +++- tests/dbus/contacts.cpp | 8 ++++++-- tests/dbus/handles.cpp | 4 +++- tests/dbus/streamed-media-chan-call.cpp | 4 +++- tests/dbus/streamed-media-chan.cpp | 4 +++- tests/dbus/text-chan.cpp | 4 +++- 18 files changed, 60 insertions(+), 20 deletions(-) commit 53b1c2c731efae776f9a5bd7c2bc114e810d6fe5 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 8 15:33:26 2010 -0300 Connection: Added constructors/accessors for using Factories. TelepathyQt4/connection-factory.cpp | 3 +- TelepathyQt4/connection.cpp | 134 +++++++++++++++++++++++++++++++++-- TelepathyQt4/connection.h | 24 ++++++- 3 files changed, 153 insertions(+), 8 deletions(-) commit 7f5de6fc8aa71c37073d0fbbb5271aefd9d0e7c0 Author: Will Thompson Date: Tue Sep 7 14:28:21 2010 +0100 qt4-types-gen: improve broken spec error reporting. This is partly just me being a bit OCD, but it makes the error output way easier to read. Previously, if the generator hit (for instance) an undefined type, it'd spit out: GEN _gen/types-body.hpp Traceback (most recent call last): File "../../../tools/qt4-types-gen.py", line 490, in Generator(dict(options))() File "../../../tools/qt4-types-gen.py", line 171, in __call__ self.provide_all() File "../../../tools/qt4-types-gen.py", line 312, in provide_all assert not self.required_custom, 'These required types were not provided by the spec: ' + ', '.join(self.required_custom) AssertionError: These required types were not provided by the spec: CurrencyAmount But now it produces: GEN _gen/types.h Your spec is broken, dear developer! The following types were used, but not provided by the spec or by declarations in all.xml: CurrencyAmount A more informative error, and 100% less backtrace cruft. Of course, it'd be better if we could report the locations where the unknown types were used, but that seems to be non-trivial. tools/qt4-types-gen.py | 80 ++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 71 insertions(+), 9 deletions(-) commit cf3c473a72596dcc29527da0dfebf7b5cbffd79c Merge: fa5c91e 2587734 Author: Dario Freddi Date: Wed Oct 6 18:00:54 2010 +0200 Merge branch 'update-xml-files' Reviewed-by: Andre Magalhaes (andrunko) commit 25877348f4fd4371cef07d3468125982b99f0169 Author: Dario Freddi Date: Wed Oct 6 17:06:07 2010 +0200 Have all the macros affecting spec files depend on them cmake/modules/TpQt4Macros.cmake | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) commit fa5c91e60438fc2808315dfaa598d798f61603af Author: Olli Salli Date: Mon Oct 4 21:27:25 2010 +0300 Start 0.3.12 development CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 7c95738d866df0ad9ce1a9df94a034de3a5a98ae Author: Olli Salli Date: Mon Oct 4 21:15:13 2010 +0300 Prepare release 0.3.11 CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit a7daf452a6f2ac8e155f500308460f6f432db92b Author: Olli Salli Date: Mon Oct 4 21:01:11 2010 +0300 Update NEWS NEWS | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) commit c4f4170667a08879038965c4977556e6f0d7f4de Merge: b4d7176 2b3c4c8 Author: Olli Salli Date: Mon Oct 4 20:33:09 2010 +0300 Merge branch 'cr-enhancements' Reviewed-by: Andre Magalhaes (andrunko) commit 2b3c4c87bdc74c13647c6d2b9b8be217803a301f Author: Olli Salli Date: Fri Oct 1 22:58:28 2010 +0300 Test ChannelRequest::immutableProperties() tests/dbus/client-factories.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) commit 69d29f5670631397887a0226b2d9dd1c7ac1efd8 Author: Olli Salli Date: Fri Oct 1 22:21:24 2010 +0300 Add accessor for all immutable properties passed to ChannelRequest TelepathyQt4/channel-request.cpp | 37 +++++++++++++++++++++++++++++++++++++ TelepathyQt4/channel-request.h | 5 ++--- 2 files changed, 39 insertions(+), 3 deletions(-) commit 2351f04aa57162cdfbbf7d560c4c64674cab7b5f Author: Olli Salli Date: Fri Oct 1 22:14:23 2010 +0300 Doxyment that ChannelRequest immutable accessors are usable before it's ready TelepathyQt4/channel-request.cpp | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) commit 15fe8226b537e3387cb464a593cc5c2180273f8f Author: Olli Salli Date: Fri Oct 1 22:10:34 2010 +0300 Make ChannelRequest getters for immutable properties usable right after it's created TelepathyQt4/channel-request.cpp | 74 +++++++++++++++++++++++++++----------- tests/dbus/client-factories.cpp | 12 +++++-- 2 files changed, 62 insertions(+), 24 deletions(-) commit b4d7176e8c8062fa9a159e4e395741dfc3f21755 Merge: 1faeb2f 6884c8f Author: Olli Salli Date: Fri Oct 1 19:50:49 2010 +0300 Merge branch 'optimize' Reviewed-by: Andre Magalhaes (andrunko) commit 6884c8fdd6ce21417efa95763e362590a335226e Author: Olli Salli Date: Fri Oct 1 19:49:45 2010 +0300 Avoid creating a Features set for every ReadyObject::isReady() call TelepathyQt4/ready-object.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 4d6d7a6f8dc590de6bb979d25dc8bd9cd4bf7509 Author: Olli Salli Date: Fri Oct 1 19:49:15 2010 +0300 Change the optimization QString constants naming to kneelingCamel TelepathyQt4/channel.cpp | 102 ++++++++++++++++++------------------- TelepathyQt4/readiness-helper.cpp | 6 +-- 2 files changed, 54 insertions(+), 54 deletions(-) commit a9b90df3e53d289e41c29dbb929de904da022e88 Author: Olli Salli Date: Fri Oct 1 18:21:24 2010 +0300 Optimization: Create less redundant temporary QSets in ReadinessHelper Cuts down the number of Feature sets created eg. when running TestStreamedMediaChannel five-fold. TelepathyQt4/readiness-helper.cpp | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) commit 1faeb2fd6320337c05063b255f284e05125b5efe Merge: 3447faa 37d03c5 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 1 12:07:40 2010 -0300 Merge branch 'test-conn-roster-fix' Reviewed-by: Olli Salli (oggis) commit 500960beacdd3f33e087ca5ce2afeeb9980ff679 Author: Olli Salli Date: Mon Sep 20 15:40:01 2010 +0300 Weed out useless QString constructions/latin1 conversions for common constant uses TelepathyQt4/channel.cpp | 111 ++++++++++++++++++++++++------------- TelepathyQt4/readiness-helper.cpp | 6 +- 2 files changed, 79 insertions(+), 38 deletions(-) commit 3447faa63a8a28552582795479d6d47786ed2c9d Merge: fa007df c255066 Author: Olli Salli Date: Fri Oct 1 18:04:11 2010 +0300 Merge branch 'unbreak-makecheck' Reviewed-by: Andre Magalhaes (andrunko) commit 37d03c53000968e4bda3552702b19cc7304bd6f8 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 1 12:02:36 2010 -0300 conn-roster test: Fixed race condition when checking if the user authorized presence publication. tests/dbus/conn-roster.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit c2550668bbd3bd0986a77eec1d22a522daeb3a63 Author: Olli Salli Date: Fri Oct 1 18:02:12 2010 +0300 Un-break regular make check again :O cmake/modules/TpQt4Macros.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit fa007df42582de727f87eb77ccdfd6b385c011de Merge: fa2d3be d3bf4aa Author: Olli Salli Date: Fri Oct 1 17:54:00 2010 +0300 Merge branch 'cmake-fixes' Reviewed-by: Andre Magalhaes (andrunko) commit d3bf4aad5ff0b451915104bbd118d85bea0f213e Merge: 5225ada 10c7463 Author: Olli Salli Date: Fri Oct 1 17:52:25 2010 +0300 Merge remote branch 'drf/fix-cmake-soversion-target' into cmake-fixes Reviewed-by: Olli Salli (oggis) commit 5225ada3a3c9b9b4fca59002eface260b12de626 Author: Olli Salli Date: Fri Oct 1 17:39:04 2010 +0300 Install pretty header ProtocolParameter instead of Parameter, which doesn't exist TelepathyQt4/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f726518059fa6801433f44212d41fba37ef8d4b0 Author: Olli Salli Date: Fri Oct 1 17:35:03 2010 +0300 Actually check for memory errors/slowness in *tpqt4/the test*, not /bin/sh This was totally ridiculous...! cmake/modules/TpQt4Macros.cmake | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit 7c2bcc8f3aa78333429ec801c5964e2ffc3571ca Author: Olli Salli Date: Fri Oct 1 17:03:09 2010 +0300 Make the valgrind/callgrind output/log files have more useful names cmake/modules/TpQt4Macros.cmake | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit bb97eee877638161d1ae9535bf097ad8f53ebf54 Author: Olli Salli Date: Fri Oct 1 17:02:02 2010 +0300 Sanitize .gitignore now that we exclusively do out-of-tree builds with CMake .gitignore | 62 ------------------------------------------------------------ 1 file changed, 62 deletions(-) commit fa2d3bef6951b736007a15b591fab90e21ae5090 Merge: f277950 3e0cc5a Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 1 09:48:35 2010 -0300 Merge branch 'profiles' Reviewed-by: Olli Salli (oggis) commit 3e0cc5abd6cba5864f21850384fdc38ea68c77d7 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 30 15:33:53 2010 -0300 account-basics test: Added test to check if profile changes when service name changes. tests/dbus/account-basics.cpp | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) commit 4005e5f832e949921cdd2c9d3e080c0108f4b548 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 30 15:11:20 2010 -0300 Account: Emit iconName and profile change notifications if needed when the profile changes. TelepathyQt4/account.cpp | 50 +++++++++++++++++++++++++++++++++-------- TelepathyQt4/account.h | 3 ++- tests/dbus/account-basics.cpp | 2 +- 3 files changed, 44 insertions(+), 11 deletions(-) commit 11e418bddaf909665d3f10995fba6e289c9d88a5 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 30 15:10:31 2010 -0300 profile test: Added test to check when icon and provider are not provided in the .profile file. tests/profile.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) commit dd04f9253df7ed06aebd3b09552db80afc75d432 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 30 14:26:14 2010 -0300 Profile: Make "service" icon and provider attributes optional. TelepathyQt4/profile.cpp | 8 +++++--- tests/dbus/profile-manager.cpp | 8 ++++---- .../test-profile-no-icon-and-provider.profile | 7 +++++++ 3 files changed, 16 insertions(+), 7 deletions(-) commit a328f67e965b52d82ebb4362d2df8337d9a060df Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 30 14:25:18 2010 -0300 Account: Use profile icon for iconName() if needed and updated docs accordingly. TelepathyQt4/account.cpp | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) commit df4e9682f5897af946fac469fbaf4a1ad5e38861 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 30 14:01:03 2010 -0300 ProfileManager: Check if CM became ready before using it while creating fake profiles. TelepathyQt4/profile-manager.cpp | 4 ++++ 1 file changed, 4 insertions(+) commit 0ef2851b13b1437f2f0712a16db2497289580d10 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 30 14:00:12 2010 -0300 Account: Improve documentation for Account::profile regarding fake profiles. TelepathyQt4/account.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 4e2b5133bbe0dc80879964b3b049e97d15abf1d5 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 30 13:59:59 2010 -0300 ProfileManager: Improve documentation about FeatureFakeProfiles. TelepathyQt4/profile-manager.cpp | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) commit f2779500989f488dd6f242298247f215040adc65 Merge: e786087 fada5b1 Author: Dario Freddi Date: Thu Sep 30 15:30:22 2010 +0200 Merge branch 'cmake-fixes' Reviewed-by: Andre Moreira Magalhaes (andrunko) commit fada5b13b365849f94833eb67e6a5ddf97b40ed8 Author: Dario Freddi Date: Thu Sep 30 15:25:12 2010 +0200 Have make lcov-check build all the dependencies (hence all the tests) before running cmake/modules/TpQt4Macros.cmake | 3 +++ tests/CMakeLists.txt | 13 +++++++++++++ tools/CMakeLists.txt | 13 ------------- 3 files changed, 16 insertions(+), 13 deletions(-) commit 30527da909edc0a4eb9e1a86abe2d9f2abe75b92 Author: Dario Freddi Date: Thu Sep 30 15:14:08 2010 +0200 Fix typo: do not set the CXX flags to the linker flags TelepathyQt4/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6707977628752447d6df9d6573a0f6f573140d5b Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 29 12:15:57 2010 -0300 Moved ManagerFile/KeyFile specific functions to the classes itself. TelepathyQt4/connection-manager.cpp | 3 +- TelepathyQt4/key-file.cpp | 83 ++++++++++++++++++ TelepathyQt4/key-file.h | 5 ++ TelepathyQt4/manager-file.cpp | 53 +++++++++++- TelepathyQt4/manager-file.h | 6 +- TelepathyQt4/profile.cpp | 11 +-- TelepathyQt4/utils.cpp | 160 ----------------------------------- TelepathyQt4/utils.h | 13 --- 8 files changed, 148 insertions(+), 186 deletions(-) commit a3ea87b6465bce13324e5ab6576ba1a55d870db5 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 29 11:56:01 2010 -0300 Account: Construct fake profiles service name the same way as done by ProfileManager. TelepathyQt4/account.cpp | 4 ++-- tests/dbus/account-basics.cpp | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) commit 2ff02befd4f4ead39df414c7a9504992ad02faec Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 29 11:55:37 2010 -0300 ProfileManager: Added support to create fake profiles. TelepathyQt4/profile-manager.cpp | 109 +++++++++++++++++++++++++++++++++++--- TelepathyQt4/profile-manager.h | 16 ++++-- tests/CMakeLists.txt | 1 - tests/dbus/CMakeLists.txt | 2 + tests/dbus/profile-manager.cpp | 83 +++++++++++++++++++++++++++++ tests/profile-manager.cpp | 40 -------------- 6 files changed, 199 insertions(+), 52 deletions(-) commit 278dfd8bdf442a6ed86c7ae0bf40b58f9fc4d3e2 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 29 11:53:30 2010 -0300 PendingComposite: Added option to not fail when first pending operation fails. TelepathyQt4/pending-operation.cpp | 42 +++++++++++++++++++++++++----- TelepathyQt4/simple-pending-operations.h | 2 ++ 2 files changed, 38 insertions(+), 6 deletions(-) commit f846117d1f26a294e95dfddc1a5e33a826fe2c73 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 29 10:28:04 2010 -0300 ProfileManager: Make ProfileManager a ReadyObject as a preparation to support creating fake profiles. TelepathyQt4/CMakeLists.txt | 1 + TelepathyQt4/profile-manager.cpp | 47 +++++++++++++++++++++++++++++++------- TelepathyQt4/profile-manager.h | 8 ++++++- tests/profile-manager.cpp | 11 ++++++++- 4 files changed, 57 insertions(+), 10 deletions(-) commit 9fc23c0a4d96b2d5e534801b5b3ea8f9b92138e7 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 29 10:24:47 2010 -0300 Profile: Changed parsing to support new format as agreed in fd.o#24897 comment #7. Additionally it also makes "icon" an attribute of "service", to be consistent with . TelepathyQt4/profile.cpp | 59 +++++++++----------- .../test-profile-invalid-service-id.profile | 16 +++--- .../profiles/test-profile-malformed.profile | 4 +- .../profiles/test-profile-non-im-type.profile | 15 ++--- tests/telepathy/profiles/test-profile.profile | 15 +++-- 5 files changed, 51 insertions(+), 58 deletions(-) commit 14443c9643e1095e093701b2437a3ce17b5fa74a Author: Andre Moreira Magalhaes (andrunko) Date: Fri Aug 20 16:25:53 2010 -0300 profile test: Removed duplicated test. tests/profile.cpp | 3 --- 1 file changed, 3 deletions(-) commit 258c007345f9ed637f24637d0de4aa52e98fc11d Author: Andre Moreira Magalhaes (andrunko) Date: Fri Aug 20 16:21:29 2010 -0300 ProfileManager: Ignore profiles with type != IM. TelepathyQt4/profile-manager.cpp | 6 ++++++ tests/profile-manager.cpp | 1 + 2 files changed, 7 insertions(+) commit 7f1b9ed9e92713154b06cc357a8cb07702dd0268 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Aug 20 16:21:16 2010 -0300 Profile: Don't fail if type != IM when using createForFileName. TelepathyQt4/profile.cpp | 15 +++++++++++---- tests/profile.cpp | 13 ++++++++++++- .../profiles/test-profile-invalid-type.profile | 10 ---------- .../profiles/test-profile-non-im-type.profile | 10 ++++++++++ 4 files changed, 33 insertions(+), 15 deletions(-) commit f23a70bb60675b07a7999aaeeefc08212f29af30 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Aug 20 11:41:32 2010 -0300 Profile: Ignore elements with type != IM. TelepathyQt4/profile.cpp | 11 ++++++++++- tests/profile.cpp | 3 +++ .../profiles/test-profile-invalid-type.profile | 10 ++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) commit 4f400c4ef61a7e9ee11cccfbb34be936e8cc4ee3 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Aug 20 01:33:54 2010 -0300 Profile: Added docs. TelepathyQt4/profile.cpp | 211 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 211 insertions(+) commit 74007703ac1f9877163f6c8892398bc01c32a017 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Aug 20 01:01:45 2010 -0300 acount-basics test: Added tests for Account profile support. tests/dbus/account-basics.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) commit 0a0c0eb41bdc58df074abd23f63c5a5c7cc0b8f4 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Aug 20 00:49:46 2010 -0300 Profile: Don't fail parsing for unknown elements, just warn about them. TelepathyQt4/profile.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) commit 3d378dc6ad3f7448e896d68c0b91149359325ae2 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Aug 20 00:37:29 2010 -0300 Account: Updated profile method documentation with info about fake profiles. TelepathyQt4/account.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) commit 360877e5b3fc099d0e8a47458cf4aa2d61be0d4c Author: Andre Moreira Magalhaes (andrunko) Date: Fri Aug 20 00:37:14 2010 -0300 Profile: Renamed allowOthersPresences to allowOtherPresences. TelepathyQt4/profile.cpp | 17 ++++++++--------- TelepathyQt4/profile.h | 2 +- 2 files changed, 9 insertions(+), 10 deletions(-) commit 69aafc9d8a0b0b4830f6814830499361ef28630d Author: Andre Moreira Magalhaes (andrunko) Date: Fri Aug 20 00:28:17 2010 -0300 Account: Added fake profiles support. Added FeatureProfile that for now is the same as FeatureProtocolInfo, but represented as a new feature, so it can be changed later in case new info other than the ones provided by FeatureProtocolInfo is needed. TelepathyQt4/account.cpp | 24 +++++++++++++++++------- TelepathyQt4/account.h | 1 + 2 files changed, 18 insertions(+), 7 deletions(-) commit 0c61cdd84bcbc1db25b4060313cba46c1b214fac Author: Andre Moreira Magalhaes (andrunko) Date: Fri Aug 20 00:23:34 2010 -0300 Profile: Added isFake method to indicate whether this is a fake profile. TelepathyQt4/profile.cpp | 11 ++++++++++- TelepathyQt4/profile.h | 2 ++ 2 files changed, 12 insertions(+), 1 deletion(-) commit 6cda83d1005bbb605c24695c08423205846fbaa6 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Aug 20 00:21:45 2010 -0300 Profile: Added new constructor used to create fake profiles. TelepathyQt4/profile.cpp | 58 ++++++++++++++++++++++++++++++++++++++++++++++ TelepathyQt4/profile.h | 5 ++++ 2 files changed, 63 insertions(+) commit b04d0e13cbed2f7eb60294485f7c268367cdbdf9 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Aug 20 00:21:10 2010 -0300 Added missing ProtocolInfo/Parameter fancy headers. TelepathyQt4/CMakeLists.txt | 2 ++ TelepathyQt4/ProtocolInfo | 13 +++++++++++++ TelepathyQt4/ProtocolParameter | 13 +++++++++++++ 3 files changed, 28 insertions(+) commit 53fcd1fb8db31e4df963c6dfcb34690dff755a49 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 19 23:26:35 2010 -0300 Profile: Renamed create(serviceName) to createForServiceName and added createForFileName. TelepathyQt4/account.cpp | 2 +- TelepathyQt4/profile-manager.cpp | 9 ++-- TelepathyQt4/profile.cpp | 108 +++++++++++++++++++++----------------- TelepathyQt4/profile.h | 5 +- tests/profile.cpp | 8 +-- 5 files changed, 72 insertions(+), 60 deletions(-) commit f4e431d8054e2538124c4f4e699e48549169412d Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 19 05:07:29 2010 -0300 profile-manager test: Added ProfileManager test. tests/CMakeLists.txt | 1 + tests/profile-manager.cpp | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) commit 29b0d1ace1ffdd4b132bfb4922cb89f67fc703d1 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 19 04:49:45 2010 -0300 ProfileManager: Added class to manage Profile objects (create objects for each profile file found). This class is useful for UIs that want to know what profiles are installed. It also contains some helper methods to filter profiles by CM, service and protocol. TelepathyQt4/CMakeLists.txt | 3 + TelepathyQt4/ProfileManager | 13 +++ TelepathyQt4/profile-manager.cpp | 176 ++++++++++++++++++++++++++++++++++++++ TelepathyQt4/profile-manager.h | 61 +++++++++++++ TelepathyQt4/profile.cpp | 82 ++++++++++++++---- TelepathyQt4/profile.h | 7 ++ TelepathyQt4/types.h | 2 + 7 files changed, 325 insertions(+), 19 deletions(-) commit 3239aceef94583ed7da4ff0ed3aad88a4918c1ec Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 19 04:35:00 2010 -0300 profile test: Added test for isValid(). tests/profile.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) commit 8dba76639623431556640796e77c2bfd509476dd Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 19 04:34:40 2010 -0300 Added more profile test files to test invalid profiles. .../test-profile-invalid-service-id.profile | 33 ++++++++++++++++++++ .../profiles/test-profile-malformed.profile | 4 +++ 2 files changed, 37 insertions(+) commit 8ce546847030be157d02010d254ccb0fe0b8bc78 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 19 04:29:10 2010 -0300 profile test: Added test for unsupported-channel-classes. tests/profile.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) commit 13fc7b46147200adb91d98a09bb820bbed4d59cc Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 19 04:17:51 2010 -0300 profile test: Added test for presences. tests/profile.cpp | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) commit 7cf9a347060cc611dc48d382ec58f96d2ed6a172 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 19 04:01:37 2010 -0300 profile test: Added test for parameters. tests/profile.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) commit 8c902e9a9cb52227580a5d916c6fb46fd6310a19 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 19 03:59:23 2010 -0300 Profile: Added hasPresence method. TelepathyQt4/profile.cpp | 10 ++++++++++ TelepathyQt4/profile.h | 1 + 2 files changed, 11 insertions(+) commit 919718efcad5bdc150b6a4dfe1ffab0b720c375e Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 19 03:58:40 2010 -0300 Profile: Added hasParameter method. TelepathyQt4/profile.cpp | 10 ++++++++++ TelepathyQt4/profile.h | 1 + 2 files changed, 11 insertions(+) commit cd7f514b5475d68a07a4761ad068657b5e026cae Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 19 03:32:22 2010 -0300 Profile: Added presence method to get a presence by id. TelepathyQt4/profile.cpp | 10 ++++++++++ TelepathyQt4/profile.h | 1 + 2 files changed, 11 insertions(+) commit 71c929bb1aae82fd7519aec1ca9e401237e3378d Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 19 03:32:03 2010 -0300 Profile: Added parameter method to get a parameter by name. TelepathyQt4/profile.cpp | 10 ++++++++++ TelepathyQt4/profile.h | 1 + 2 files changed, 11 insertions(+) commit c81e8e27c19b48e4e4b20c9ffb633d7cbc04e063 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 19 03:24:06 2010 -0300 .gitignore: Added all tests/test-* to gitignore. .gitignore | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) commit ffa6c878179d8b3df27e87632147335b36dc8cd0 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 19 03:23:38 2010 -0300 profile test: Added basic profile test. tests/CMakeLists.txt | 1 + tests/profile.cpp | 29 ++++++++++++++++++++++ tests/telepathy/profiles/test-profile.profile | 33 +++++++++++++++++++++++++ 3 files changed, 63 insertions(+) commit 0248a24e8f47796768f996738aae2088baefb4c8 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 19 02:45:57 2010 -0300 Account: Initial profile support. TelepathyQt4/account.cpp | 28 ++++++++++++++++++++++++++++ TelepathyQt4/account.h | 3 +++ 2 files changed, 31 insertions(+) commit a69cc49df1681b5fdc2dc3b1a7480788860d013f Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 19 02:45:36 2010 -0300 Profile: Make it a SharedPtr object. TelepathyQt4/profile.cpp | 13 +++++++++++++ TelepathyQt4/profile.h | 7 +++++-- TelepathyQt4/types.h | 2 ++ 3 files changed, 20 insertions(+), 2 deletions(-) commit 39aa5eb41c3a8ab9a91cc8cf2191779d9eb344c0 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 19 02:33:46 2010 -0300 Profile: Implemented parsing. TelepathyQt4/profile.cpp | 697 +++++++++++++++++++++++++++++++++++++++++++++- TelepathyQt4/profile.h | 86 +++++- 2 files changed, 769 insertions(+), 14 deletions(-) commit eff4fcfce2eefc2b200570c797c7622d002e2504 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Aug 18 02:26:27 2010 -0300 Profile: Added skeleton class used to read .profile files. TelepathyQt4/CMakeLists.txt | 3 ++ TelepathyQt4/Profile | 13 ++++++ TelepathyQt4/profile.cpp | 102 +++++++++++++++++++++++++++++++++++++++++++ TelepathyQt4/profile.h | 68 +++++++++++++++++++++++++++++ 4 files changed, 186 insertions(+) commit 565b33d085b92d36c90714671a0bac7b4bc1d843 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 19 12:40:43 2010 -0300 utils: Renamed methods to get QVariant type and value. Renamed variantTypeFromDBusSignature to variantTypeForSignature and variantFromValueWithDBusSignature to parseValueWithSignature. TelepathyQt4/utils.h | 1 - 1 file changed, 1 deletion(-) commit 66013ad7450f311882c2ec2b0af67afe3f2e7be8 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 19 02:28:24 2010 -0300 Added utils.h containing some utility functions that will be used by Profiles. The methods are copied from ManagerFile/KeyFile with slightly modifications. TelepathyQt4/utils.h | 1 + 1 file changed, 1 insertion(+) commit 4dfca8f1173b96afa1710f23b4f3708cf00375fb Author: Andre Moreira Magalhaes (andrunko) Date: Fri Aug 20 11:24:35 2010 -0300 ManagerFile: Fixed Private::valueForKey. Use the raw value when parsing value as string list. TelepathyQt4/manager-file.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e450b725fddeec3b6e87e6e267500d169fc83bc0 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 19 12:40:43 2010 -0300 utils: Renamed methods to get QVariant type and value. Renamed variantTypeFromDBusSignature to variantTypeForSignature and variantFromValueWithDBusSignature to parseValueWithSignature. TelepathyQt4/connection-manager.cpp | 2 +- TelepathyQt4/manager-file.cpp | 2 +- TelepathyQt4/utils.cpp | 6 +++--- TelepathyQt4/utils.h | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) commit e76fff54cd84a55e50635421993376c30328a29d Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 19 12:36:52 2010 -0300 utils: Coding style fixes. TelepathyQt4/utils.cpp | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) commit a5d9ffc0eae06126ce748b86487df77bdc5ea728 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 19 02:33:13 2010 -0300 ConnectionManager: Use method export in utils.h in favor of deprecated one. TelepathyQt4/connection-manager.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 6b9eb4bcfebde29808bd76c918dab21e8f1c3f39 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 19 02:31:25 2010 -0300 ManagerFile: Deprecate method used to return a QVariant from a value+dbus signature, which is now exported in utils.h. TelepathyQt4/manager-file.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 72879d1d079e79f722007774f6ec6235ccc25648 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 19 02:31:04 2010 -0300 ManagerFile: Use methods now exported in utils.h. TelepathyQt4/manager-file.cpp | 65 +++++------------------------------------ 1 file changed, 7 insertions(+), 58 deletions(-) commit 1d8574971328494b25b5755e6ffd1645d0fc96a9 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 19 02:30:11 2010 -0300 KeyFile: Remove methods now exported in utils.h. TelepathyQt4/key-file.cpp | 95 ++------------------------------------------- 1 file changed, 4 insertions(+), 91 deletions(-) commit 3765fe1fbc140d6fcb91945911b6c63a38b64579 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 19 02:28:24 2010 -0300 Added utils.h containing some utility functions that will be used by Profiles. The methods are copied from ManagerFile/KeyFile with slightly modifications. TelepathyQt4/utils.cpp | 166 ++++++++++++++++++++++++++++++++++++++++++++++++ TelepathyQt4/utils.h | 18 +++++- 2 files changed, 182 insertions(+), 2 deletions(-) commit 10c746302708432e59280f6b1a01b2b38d07d70a Author: Dario Freddi Date: Tue Sep 21 19:13:19 2010 +0200 cmake: Add two new variables, tp_qt4_abi_version and tp_qt4_library_version for handling correctly library versioning. Differently from libtool, we're no longer bound to AGE/CURRENT/REVISION, so the full version is used for the VERSION property of the library. As suggested by Simon, a .99 has been added as the second version number for differentiating it from the autotools build. This is meant to be removed as soon as the abi_version increases. CMakeLists.txt | 23 ++++++++++++----------- TelepathyQt4/CMakeLists.txt | 4 ++-- TelepathyQt4/Farsight/CMakeLists.txt | 4 ++-- 3 files changed, 16 insertions(+), 15 deletions(-) commit e7860872745f96115edcf0c8f1165ef8ca82f684 Author: Dario Freddi Date: Mon Sep 20 17:18:50 2010 +0200 Update NEWS NEWS | 4 ++++ 1 file changed, 4 insertions(+) commit e148fb0b0e6b86eb53e2bd5321928d7a16ccd994 Merge: 02882fa 68c64c2 Author: Dario Freddi Date: Mon Sep 20 17:13:49 2010 +0200 Merge branch 'cmake' Reviewed-by: Olli Salli (oggis) Reviewed-by: Andre Moreira Magalhaes (andrunko) commit 68c64c281796ee0c6e5fbc2253b60bfcc6aeeb8f Author: Dario Freddi Date: Mon Sep 20 16:35:55 2010 +0200 cmake: Removing the autotools build system files Makefile.am | 42 -- TelepathyQt4/Farsight/Makefile.am | 39 -- TelepathyQt4/Makefile.am | 659 -------------------------- autogen.sh | 37 -- configure.ac | 328 ------------- doxygen.am | 186 -------- examples/Makefile.am | 6 - examples/accounts/Makefile.am | 40 -- examples/call/Makefile.am | 58 --- examples/extensions/Makefile.am | 114 ----- examples/file-transfer/Makefile.am | 53 --- examples/protocols/Makefile.am | 40 -- examples/roster/Makefile.am | 57 --- m4/Makefile.am | 6 - m4/compiler.m4 | 72 --- m4/doxygen.m4 | 312 ------------ m4/linker.m4 | 83 ---- m4/tp-compiler-flag.m4 | 36 -- m4/tp-compiler-warnings.m4 | 40 -- m4/tp-visibility-hidden.m4 | 55 --- spec/Makefile.am | 1 - tests/Makefile.am | 94 ---- tests/dbus/Makefile.am | 215 --------- tests/lib/Makefile.am | 35 -- tests/lib/glib/Makefile.am | 59 --- tests/lib/glib/callable/Makefile.am | 48 -- tests/lib/glib/contactlist/Makefile.am | 46 -- tests/lib/glib/csh/Makefile.am | 47 -- tests/lib/glib/echo/Makefile.am | 44 -- tests/lib/glib/echo2/Makefile.am | 46 -- tests/lib/glib/future/Makefile.am | 1 - tests/lib/glib/future/call/Makefile.am | 51 -- tests/lib/glib/future/conference/Makefile.am | 16 - tests/lib/glib/future/extensions/Makefile.am | 104 ---- tests/lib/python/Makefile.am | 2 - tools/Makefile.am | 64 --- tools/check-coding-style.mk | 12 - tools/lcov.am | 21 - tools/telepathy-qt4.mk | 4 - tools/telepathy.am | 27 -- tools/valgrind.mk | 11 - 41 files changed, 3211 deletions(-) commit e91b4bd2e2e093da412e2d4295d202aec5319b0b Author: Dario Freddi Date: Mon Sep 20 13:24:56 2010 +0200 cmake: Set the correct version properties and so numbers for the exported libraries TelepathyQt4/CMakeLists.txt | 6 ++++++ TelepathyQt4/Farsight/CMakeLists.txt | 5 +++++ 2 files changed, 11 insertions(+) commit 03d85e5dab6f49a8c29652cbfd1808f0a5a27e50 Author: Dario Freddi Date: Mon Sep 20 13:24:33 2010 +0200 cmake: Add the correct linker flags for profiling cmake/modules/TelepathyDefaults.cmake | 3 +++ 1 file changed, 3 insertions(+) commit d1dfeef553f48d16e5fc6cff8490f878d416e998 Author: Dario Freddi Date: Mon Sep 20 13:11:18 2010 +0200 cmake: Add documentation for the new _tpqt4_add_check_targets() internal macro cmake/modules/TpQt4Macros.cmake | 7 +++++++ 1 file changed, 7 insertions(+) commit 57c86add6c3c09b4bf97192ca1a3b57c949673ed Author: Dario Freddi Date: Mon Sep 20 13:06:34 2010 +0200 cmake: Add a new set of check- targets through a new internal macro. Currently the following execution methods are supported: - Normal execution (make check-$testname for running a single test, make check for running all tests) - Execution through Valgrind (make check-valgrind-$testname for running a single test, make check-valgrind for running all tests) - Execution through Callgrind (make check-callgrind-$testname for running a single test, make check-callgrind for running all tests) Upon Andre's suggestion, Valgrind and Callgrind tests behave slightly differently: instead of printing Valgrind's output to the terminal, they save it into a log file in the test's binary directory. cmake/modules/TpQt4Macros.cmake | 52 +++++++++++++++++++++++++++++++++++++++ tests/CMakeLists.txt | 4 +++ 2 files changed, 56 insertions(+) commit f9638dc8ad31d944847b685f3b18a40f7cb18e70 Author: Dario Freddi Date: Mon Sep 20 11:55:52 2010 +0200 cmake: Remove commented lines which set the generated property to files: they are definitely not needed cmake/modules/TpQt4Macros.cmake | 12 ------------ 1 file changed, 12 deletions(-) commit 986586c112301e385b54001f6961308addaa9358 Author: Dario Freddi Date: Mon Sep 20 11:55:17 2010 +0200 cmake: Vastly improve documentation of the macros, which also includes keeping up with the new macros design cmake/modules/TpQt4Macros.cmake | 48 +++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 19 deletions(-) commit 117d3b38edfac6e299b9224b6fa0fae38acc5b42 Author: Dario Freddi Date: Mon Sep 20 11:54:29 2010 +0200 cmake: Make the client generator macros more consistent with the rest of the library. They are also more powerful now. TelepathyQt4/CMakeLists.txt | 30 +++++++++++++++--------------- cmake/modules/TpQt4Macros.cmake | 33 ++++++++++++++++++--------------- 2 files changed, 33 insertions(+), 30 deletions(-) commit 11b1a4c909a6c9888e55b99842e607c1c5268eb8 Author: Dario Freddi Date: Sun Sep 19 21:05:00 2010 +0200 cmake: Have the macro generate real targets to let compilations with a lot of batch jobs succeed TelepathyQt4/CMakeLists.txt | 60 ++++++++++++++++--------------- cmake/modules/TpQt4Macros.cmake | 69 +++++++++++++++++++----------------- examples/extensions/CMakeLists.txt | 20 ++++++----- 3 files changed, 79 insertions(+), 70 deletions(-) commit aefa7623b47182d1b214a8fcb01206d31bc3dd08 Author: Dario Freddi Date: Sun Sep 19 17:02:09 2010 +0200 cmake: Improve documentation of tpqt4's functions/macros cmake/modules/TpQt4Macros.cmake | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) commit 0268d18954301bac9a1ac0c3ee6eb4400eff8189 Author: Dario Freddi Date: Sun Sep 19 16:40:58 2010 +0200 cmake: Set the c/cxx flags to more sensible values for our build profiles cmake/modules/TelepathyDefaults.cmake | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) commit 6a0080e175fdddb53d32cd26b3c7ddfd88d544c3 Author: Dario Freddi Date: Sun Sep 19 16:40:24 2010 +0200 cmake: Make ENABLE_DEBUG optional, and have QT_NO_CAST_FROM_ASCII be defined for all platforms CMakeLists.txt | 7 +++++++ 1 file changed, 7 insertions(+) commit 716aa376967f77e7793411b53ff9f1a6716609c1 Author: Dario Freddi Date: Sun Sep 19 00:05:33 2010 +0200 cmake: Fix the pc files by adding the cmake install prefix TelepathyQt4/TelepathyQt4.pc.in | 8 ++++---- TelepathyQt4/TelepathyQt4Farsight.pc.in | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) commit bfb2f90cab316a7dd4fe1cc4fedba2a228030b8a Author: Dario Freddi Date: Sat Sep 18 20:28:16 2010 +0200 cmake: Fix wording: s/test cases/unit tests CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit b5d02e75e978899f5a66d0a0a9f61c08d0f238e2 Author: Dario Freddi Date: Sat Sep 18 20:27:52 2010 +0200 cmake: Add documentation to cmake_policy CMakeLists.txt | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) commit a7dad3b4108f74900dbb9f4640793569efc84014 Author: Dario Freddi Date: Sat Sep 18 19:57:53 2010 +0200 cmake: Add QT_NO_KEYWORDS to code which might conflict with glib's signals definitions TelepathyQt4/Farsight/CMakeLists.txt | 2 +- examples/call/CMakeLists.txt | 1 + tests/dbus/CMakeLists.txt | 2 ++ 3 files changed, 4 insertions(+), 1 deletion(-) commit e1c0abda35d843e2ffb8fe0923f33105e373431b Author: Dario Freddi Date: Sat Sep 18 13:48:23 2010 +0200 cmake: Some random fixes to messages, fix the version generation, and add some goodies to the maintainer check target CMakeLists.txt | 13 +++++++++---- cmake/modules/FindPythonLibrary.cmake | 1 - tools/CMakeLists.txt | 8 +++++--- 3 files changed, 14 insertions(+), 8 deletions(-) commit fe4c4fc8c639d32a989a667405629e122cb1a026 Author: Dario Freddi Date: Sat Sep 18 13:16:16 2010 +0200 cmake: Have the check target depend on all tests. For doing this, turn the add test functions to macros, and move the check target to the tests/dbus dir cmake/modules/TpQt4Macros.cmake | 32 +++++++++++++++++--------------- tests/CMakeLists.txt | 5 ----- tests/dbus/CMakeLists.txt | 6 ++++++ 3 files changed, 23 insertions(+), 20 deletions(-) commit 8d88a8224535726c1cf6939e4d87823c24509ae1 Author: Dario Freddi Date: Sat Sep 18 11:03:10 2010 +0200 cmake: Fix some stuff in default flags, and create a real check target which does what we want cmake/modules/TelepathyDefaults.cmake | 4 ++-- cmake/modules/TelepathyDist.cmake | 3 --- tests/CMakeLists.txt | 5 +++++ 3 files changed, 7 insertions(+), 5 deletions(-) commit 9cb2e552622d252fd896990dee0a7442e128dca6 Author: Dario Freddi Date: Fri Sep 17 18:23:22 2010 +0200 cmake: Small fix to tools, add comments to various targets, and add an ENABLE_CPACK switch cmake/modules/TelepathyDist.cmake | 146 +++++++++++++++++++------------------ tools/CMakeLists.txt | 18 +++-- 2 files changed, 87 insertions(+), 77 deletions(-) commit 4bcd3608ee42aaa0201d0d31e7d914b77a7adad4 Author: Dario Freddi Date: Fri Sep 17 18:21:16 2010 +0200 cmake: Add lcov compiler coverage through a new variable, ENABLE_COMPILER_COVERAGE, turned off by default TelepathyQt4/CMakeLists.txt | 15 ++++++++++++--- TelepathyQt4/Farsight/CMakeLists.txt | 6 +++++- cmake/modules/TelepathyDefaults.cmake | 26 ++++++++++++++++++++++++++ tests/CMakeLists.txt | 4 +++- tools/CMakeLists.txt | 13 +++++++++++++ 5 files changed, 59 insertions(+), 5 deletions(-) commit 6e251913f247394bab7b9f2b63016519d56e6de2 Author: Dario Freddi Date: Fri Sep 17 17:42:36 2010 +0200 cmake: Sync with master TelepathyQt4/CMakeLists.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 42f3095547e5627689692c428c80fadb37e65ba7 Author: Dario Freddi Date: Fri Sep 17 15:58:31 2010 +0200 cmake: Implement distcheck correctly, and fix a pair of bugs spotted through it cmake/modules/TelepathyDist.cmake | 16 ++++++---------- tools/CMakeLists.txt | 15 ++++++++++----- 2 files changed, 16 insertions(+), 15 deletions(-) commit 4377ca88b15bf60a34c2079563824dbe46af31f4 Author: Dario Freddi Date: Thu Sep 16 22:37:38 2010 +0200 cmake: Make make dist behave like autotools' make dist, and port all the tools target to CMake as well CMakeLists.txt | 1 + cmake/modules/TelepathyDist.cmake | 32 ++++++++++-- tools/CMakeLists.txt | 100 +++++++++++++++++++++++++++++++++++++ 3 files changed, 130 insertions(+), 3 deletions(-) commit 0fd26a8297caa6134d70771b719c15cc5c531ab6 Author: Dario Freddi Date: Thu Sep 16 22:01:20 2010 +0200 cmake: Update tests tests/dbus/CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) commit 5e5043a93aba9c5551475cb938453b476345ccdc Author: Dario Freddi Date: Thu Sep 16 02:47:56 2010 +0200 cmake: Refactor and fix some macros to make them more cmake-ish, add tpqt4_ prefix to EVERY macro, and document decently all the macros and the hot paths of the buildsystem CMakeLists.txt | 12 ++- TelepathyQt4/CMakeLists.txt | 48 +++++---- TelepathyQt4/Farsight/CMakeLists.txt | 5 + cmake/modules/TpQt4Macros.cmake | 183 +++++++++++++++++++++++++++------- examples/extensions/CMakeLists.txt | 4 +- tests/dbus/CMakeLists.txt | 7 +- tests/lib/CMakeLists.txt | 2 +- 7 files changed, 196 insertions(+), 65 deletions(-) commit ff262e8bcbfbc7f8237841d4015108ad0c549141 Author: Dario Freddi Date: Wed Sep 15 21:47:16 2010 +0200 cmake: Big revamp. Standardized TpQt4 macros with tpqt4_ prefix, added some new macros to clean up the code, and moved all the macros to a separate file. Now the whole buildsystem looks extremely clean. CMakeLists.txt | 54 +-------- TelepathyQt4/CMakeLists.txt | 208 +++++++------------------------ cmake/modules/TpQt4Macros.cmake | 215 +++++++++++++++++++++++++++++++++ examples/accounts/CMakeLists.txt | 9 +- examples/call/CMakeLists.txt | 9 +- examples/extensions/CMakeLists.txt | 39 ++---- examples/file-transfer/CMakeLists.txt | 18 +-- examples/protocols/CMakeLists.txt | 9 +- examples/roster/CMakeLists.txt | 9 +- tests/CMakeLists.txt | 10 +- tests/dbus/CMakeLists.txt | 47 +++---- tests/lib/glib/CMakeLists.txt | 21 ---- 12 files changed, 302 insertions(+), 346 deletions(-) commit 5c3743d6aaea0fdf0a5a2b6cd7b15f82085b5273 Author: Dario Freddi Date: Wed Sep 15 20:02:41 2010 +0200 cmake: Squash test generators into a function tests/lib/glib/CMakeLists.txt | 22 ++++++++++++++++++++++ tests/lib/glib/callable/CMakeLists.txt | 11 +---------- tests/lib/glib/contactlist/CMakeLists.txt | 11 +---------- tests/lib/glib/csh/CMakeLists.txt | 11 +---------- tests/lib/glib/echo/CMakeLists.txt | 11 +---------- tests/lib/glib/echo2/CMakeLists.txt | 11 +---------- tests/lib/glib/future/call/CMakeLists.txt | 11 +---------- 7 files changed, 28 insertions(+), 60 deletions(-) commit b4a16fb72cb2e8b78e4a74054d38d1303805ead1 Author: Dario Freddi Date: Wed Sep 15 19:15:31 2010 +0200 cmake: Upgrade CMake policy CMP0011 to NEW, given that the old behavior is not required (anymore). Also, while I'm at it, move it to the proper location. CMakeLists.txt | 4 ++++ cmake/modules/TelepathyDefaults.cmake | 6 ------ 2 files changed, 4 insertions(+), 6 deletions(-) commit bed32823e83901833b5804e197fc8266c5faf579 Author: Dario Freddi Date: Wed Sep 15 19:03:58 2010 +0200 cmake: Add CPack support, so that binary and source packages can be instantly built. While I was at it, I also removed the hardcoding of CMAKE_INSTALL_PREFIX in the install paths. It is not required and it's harmful for CPack. CMakeLists.txt | 2 + TelepathyQt4/CMakeLists.txt | 17 ++++++--- TelepathyQt4/Farsight/CMakeLists.txt | 12 +++++- cmake/modules/TelepathyDefaults.cmake | 8 ++-- cmake/modules/TelepathyDist.cmake | 67 +++++++++++++++++++++++++++++++++ 5 files changed, 94 insertions(+), 12 deletions(-) commit df527cf42b64b917fd3ec5b75deaa8db875ab1f8 Author: Dario Freddi Date: Wed Sep 15 18:13:23 2010 +0200 cmake: Rush for making the cmake branch track 1:1 with the master branch. It is now ready to be merged. CMakeLists.txt | 28 +++++++++++++++++++++- TelepathyQt4/CMakeLists.txt | 42 +++++++++++++++++++++++++++------ TelepathyQt4/Farsight/CMakeLists.txt | 4 ++++ cmake/modules/TelepathyDefaults.cmake | 6 +++++ config.h.in | 1 + tests/lib/glib/csh/CMakeLists.txt | 10 ++++++++ tests/lib/glib/echo/CMakeLists.txt | 15 +++++++++++- tests/lib/glib/echo2/CMakeLists.txt | 14 ++++++++++- 8 files changed, 110 insertions(+), 10 deletions(-) commit 795691082691bbac0b9d2d85e4ab7078caf9fced Author: Dario Freddi Date: Sat Aug 14 14:27:30 2010 +0200 cmake: Fix FindTelepathyGlib.cmake by letting it fail correctly if the version is < than the specified one. cmake/modules/FindTelepathyGlib.cmake | 41 ++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 18 deletions(-) commit b9a15279c4c25632824824747706d5a9c5b14823 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 1 13:17:30 2010 -0300 TEMPORARY, STILL WORKING ON IT. CMakeLists.txt | 6 +++--- TelepathyQt4/CMakeLists.txt | 20 +++++++++++++++++++- tests/lib/glib/CMakeLists.txt | 18 +++++++++++++++++- tests/lib/glib/csh/CMakeLists.txt | 2 ++ tests/lib/glib/echo2/CMakeLists.txt | 2 ++ 5 files changed, 43 insertions(+), 5 deletions(-) commit cb784ab9b678695ebba1451044d2096bfa03c6be Author: Dario Freddi Date: Wed May 19 17:35:49 2010 +0200 Fix GObject detection, and use a better FindGLIB2.cmake CMakeLists.txt | 9 ++--- cmake/modules/FindGLIB2.cmake | 27 +++++++------- cmake/modules/FindGObject.cmake | 75 +++++++++++++++++++++++++++++++++++++++ tests/lib/glib/CMakeLists.txt | 1 + 4 files changed, 93 insertions(+), 19 deletions(-) commit 98d54f12842db001c090aaf880f26855197484f8 Author: Dario Freddi Date: Fri Apr 16 21:30:06 2010 +0200 Do a big cleanup of useless include_directory() directives: CMake automatically cascades include directories down to every subdirectory, so it's not needed to include a directory which has already been included in a top-level CMakeLists.txt file. CMakeLists.txt | 4 ++++ TelepathyQt4/CMakeLists.txt | 4 ---- TelepathyQt4/Farsight/CMakeLists.txt | 5 +---- examples/accounts/CMakeLists.txt | 5 ----- examples/call/CMakeLists.txt | 3 --- examples/extensions/CMakeLists.txt | 5 ----- examples/file-transfer/CMakeLists.txt | 5 ----- examples/protocols/CMakeLists.txt | 5 ----- examples/roster/CMakeLists.txt | 5 ----- tests/CMakeLists.txt | 5 ----- tests/dbus/CMakeLists.txt | 4 ---- tests/lib/CMakeLists.txt | 5 +---- tests/lib/glib/CMakeLists.txt | 2 -- tests/lib/glib/callable/CMakeLists.txt | 4 ---- tests/lib/glib/contactlist/CMakeLists.txt | 4 ---- tests/lib/glib/csh/CMakeLists.txt | 4 ---- tests/lib/glib/echo/CMakeLists.txt | 4 ---- tests/lib/glib/echo2/CMakeLists.txt | 4 ---- tests/lib/glib/future/call/CMakeLists.txt | 4 +--- tests/lib/glib/future/conference/CMakeLists.txt | 4 +--- tests/lib/glib/future/extensions/CMakeLists.txt | 4 ---- 21 files changed, 8 insertions(+), 81 deletions(-) commit ab524b4a940bc30d8163ab31bcaaf8cb84895f8b Author: Dario Freddi Date: Fri Apr 16 21:21:06 2010 +0200 Use macro_log_feature to display in a nice way all additional features instead of relying on custom messages CMakeLists.txt | 33 +++++--- cmake/modules/MacroLogFeature.cmake | 146 +++++++++++++++++++++++++++++++++++ 2 files changed, 169 insertions(+), 10 deletions(-) commit 2d325bea46aba04487d86c30499fc26580b03091 Author: Dario Freddi Date: Fri Apr 16 20:55:08 2010 +0200 Avoid using PkgConfig directly - in CMake this is never a good idea as the whole buildsystem is supposed to work also on systems which have no pkgconfig installed. Move the relevant stuff to some Find*.cmake file, add some, and change the relevant link/include dirs to make everything build correctly just like before. CMakeLists.txt | 37 ++++++++----- TelepathyQt4/CMakeLists.txt | 4 +- TelepathyQt4/Farsight/CMakeLists.txt | 13 +++-- cmake/modules/FindDBus.cmake | 72 ++++++++++++++++++++++++++ cmake/modules/FindGLIB2.cmake | 55 ++++++++++++++++++++ cmake/modules/FindGStreamer.cmake | 80 +++++++++++++++++++++++++++++ cmake/modules/FindLibXml2.cmake | 57 ++++++++++++++++++++ cmake/modules/FindTelepathyFarsight.cmake | 49 ++++++++++++++++++ cmake/modules/FindTelepathyGlib.cmake | 49 ++++++++++++++++++ examples/call/CMakeLists.txt | 11 ++-- tests/dbus/CMakeLists.txt | 4 +- tests/lib/glib/CMakeLists.txt | 6 ++- 12 files changed, 411 insertions(+), 26 deletions(-) commit 51450c871e1d295d3472680b4ddf18a162e4d48f Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 23 16:19:28 2010 -0300 cmake: Updated version CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 3558285563b650ac349e8bb0f942401e2f65b19b Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 22 11:43:42 2010 -0300 cmake: Updated to latest upstream changes. TelepathyQt4/CMakeLists.txt | 7 +++++-- tests/dbus/CMakeLists.txt | 1 + 2 files changed, 6 insertions(+), 2 deletions(-) commit a039ff376b17c011d4bea3dcb480f4fdd52d0816 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Apr 7 10:31:06 2010 -0300 cmake: Make D-Bus specific tests proper use custom session.conf. tests/dbus/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 360789bc69794a8e10dfb26016668b695c67eac4 Author: Dario Freddi Date: Wed Apr 7 00:35:47 2010 +0200 After a painful run, finally make tp-qt4 build with make -j>1. Now all targets are handled nicely and the dependencies successfully cascade one another, so it should be also decently future proof. CMakeLists.txt | 43 +++++++++++++++++++++++++++++++++++++++++++ TelepathyQt4/CMakeLists.txt | 42 ++++++++++++++++++++++++++++++++++-------- 2 files changed, 77 insertions(+), 8 deletions(-) commit de03f735ec96172588aafc9b892ec9a6b845c54f Author: Andre Moreira Magalhaes (andrunko) Date: Wed Apr 7 10:20:03 2010 -0300 cmake: Added file-transfer and protocols examples to build system. examples/CMakeLists.txt | 2 ++ examples/file-transfer/CMakeLists.txt | 46 +++++++++++++++++++++++++++++++++ examples/protocols/CMakeLists.txt | 27 +++++++++++++++++++ 3 files changed, 75 insertions(+) commit e8dcd07984e2e2db2a3366853983294747e57331 Author: Dario Freddi Date: Fri Apr 2 21:48:18 2010 +0200 Using Qt's way of setting a min version Signed-off-by: Dario Freddi CMakeLists.txt | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) commit 75ce01e4335c75f3f290fc00f7135e745ae25799 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 6 15:42:09 2010 -0300 cmake: Proper generate session.conf and set env variables to run tests. tests/CMakeLists.txt | 6 +++--- tests/dbus-1/CMakeLists.txt | 4 ++++ tests/dbus-1/services/CMakeLists.txt | 1 + tests/dbus-1/services/spurious.service | 3 --- tests/dbus-1/services/spurious.service.in | 3 +++ 5 files changed, 11 insertions(+), 6 deletions(-) commit 0e224e8b4fd02fc64c7661799c2709582c9fd836 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 19 11:30:40 2010 -0300 cmake: Updated version to latest upstream version. CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 7247b48f11162f9b2dec79a9c978196d14b50f6e Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 19 11:30:20 2010 -0300 cmake: Bump tp-glib dependency to >= 0.10.0 CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a45aa561da3335f21fc7192069e1c0e7b2be1c51 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 17 14:00:16 2010 -0300 cmake: Make QT_NO_CAST_FROM_ASCII mandatory. cmake/modules/TelepathyDefaults.cmake | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit 8f1f5c48fc8aed31c7a87c12a93a1f96adc1aa55 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 16 22:42:19 2010 -0300 cmake: Updated to latest upstream changes. CMakeLists.txt | 29 +++--- TelepathyQt4/CMakeLists.txt | 126 +++++++++++++++++++++-- config.h.in | 2 + tests/dbus/CMakeLists.txt | 4 + tests/lib/CMakeLists.txt | 25 +---- tests/lib/callable/CMakeLists.txt | 30 ------ tests/lib/contactlist/CMakeLists.txt | 28 ----- tests/lib/csh/CMakeLists.txt | 16 --- tests/lib/echo/CMakeLists.txt | 18 ---- tests/lib/echo2/CMakeLists.txt | 16 --- tests/lib/glib/CMakeLists.txt | 33 ++++++ tests/lib/glib/callable/CMakeLists.txt | 30 ++++++ tests/lib/glib/contactlist/CMakeLists.txt | 28 +++++ tests/lib/glib/csh/CMakeLists.txt | 16 +++ tests/lib/glib/echo/CMakeLists.txt | 18 ++++ tests/lib/glib/echo2/CMakeLists.txt | 16 +++ tests/lib/glib/future/CMakeLists.txt | 5 + tests/lib/glib/future/call/CMakeLists.txt | 34 ++++++ tests/lib/glib/future/conference/CMakeLists.txt | 14 +++ tests/lib/glib/future/extensions/CMakeLists.txt | 122 ++++++++++++++++++++++ 20 files changed, 456 insertions(+), 154 deletions(-) commit 9296f3c5772a7864c8ed653c48558048a27bb23f Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 19 20:04:44 2009 -0300 cmake: Updated to latest upstream version. TelepathyQt4/CMakeLists.txt | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) commit 5261c8f8f3c602312a82cf9ea3e241bc1774ad7c Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 19 20:04:25 2009 -0300 cmake: Removed pinocchio from build system. tests/CMakeLists.txt | 1 - tests/pinocchio/CMakeLists.txt | 33 --------------------------------- 2 files changed, 34 deletions(-) commit b0a4425e5f1670b82ffa322ae7e569da6f08a1ae Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 24 00:56:28 2009 -0300 Bump version. CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c4b0747197d3ebe8f947d607dcf06ed542e50807 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 24 00:46:15 2009 -0300 cmake: Updated to latest changes. TelepathyQt4/CMakeLists.txt | 18 ++++++++++-------- tests/dbus/CMakeLists.txt | 1 + 2 files changed, 11 insertions(+), 8 deletions(-) commit eed38a8cd8e69f1100455ee2a0a1e08b5d2a8add Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jun 12 16:34:52 2009 -0300 cmake: Removed double entry on Doxygen.cmake. cmake/modules/Doxygen.cmake | 1 - 1 file changed, 1 deletion(-) commit c6b73f93bc923478492513f172a2fe0e655a8019 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jun 12 16:20:46 2009 -0300 cmake: Force decompression even if file already exists on make distcheck. cmake/modules/TelepathyDist.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c32565d9017464b89686baa1d4784f4df283326c Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jun 12 16:17:13 2009 -0300 cmake: Update to latest changes. TelepathyQt4/CMakeLists.txt | 13 +++++++++++++ tests/dbus/CMakeLists.txt | 1 + 2 files changed, 14 insertions(+) commit 401db8f9bf6dc79d8597bcfe43605e573526be32 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 4 02:57:33 2009 -0300 doxygen: Use short file names. doxygen.cfg.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5435ce17ebd26f0f5b2c9e3f10ff5776f660cb89 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 3 23:54:40 2009 -0300 cmake: Updated to latest changes. CMakeLists.txt | 2 +- TelepathyQt4/CMakeLists.txt | 53 +++++++++++++++++++- TelepathyQt4/Farsight/CMakeLists.txt | 8 +-- TelepathyQt4/TelepathyQt4-uninstalled.pc.in | 10 ++-- .../TelepathyQt4Farsight-uninstalled.pc.in | 12 ++--- TelepathyQt4/TelepathyQt4Farsight.pc.in | 16 +++--- examples/call/CMakeLists.txt | 1 + tests/dbus/CMakeLists.txt | 4 ++ 8 files changed, 78 insertions(+), 28 deletions(-) commit b02bae4f3bf084c318f325e994341ddd58677f66 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 28 12:04:46 2009 -0300 cmake: Renamed SharedData to RefCounted. TelepathyQt4/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5746fd5217df25316c683b1b088ee59ab6636dc2 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 21 14:32:41 2009 -0300 cmake: Added TelepathyQt4Farsight support. TelepathyQt4/CMakeLists.txt | 1 + TelepathyQt4/Farsight/CMakeLists.txt | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) commit ad3fdbf509c056f1866ee3604b40ab81168958f0 Author: Andre Moreira Magalhaes (andrunko) Date: Sat Apr 18 20:40:37 2009 -0300 cmake: Added DATA_INSTALL_DIR define. cmake/modules/TelepathyDefaults.cmake | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit d29c5ba8acbb279b034d3007bd86b656c180e5ea Author: Ian Monroe Date: Thu Apr 16 09:52:13 2009 -0500 fixed logic for compiler warnings, -Werror should be disabled if one of the -Wno flags is not available cmake/modules/CompilerWarnings.cmake | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) commit 464240db8493ff3e960caade13785c8eff333809 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 16 12:26:06 2009 -0300 cmake: Improved make dist/distcheck. - Use git-archive to generate package. - Removed distcheck.py cmake/modules/TelepathyDist.cmake | 20 +++++---- cmake/modules/distcheck.py | 83 ------------------------------------- 2 files changed, 13 insertions(+), 90 deletions(-) commit aa32280e5da32cf8cdbaa285fe60c2778e9447a0 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 16 11:40:49 2009 -0300 cmake: Default to RelWithDebInfo (release with -g enabled) for release mode. CMakeLists.txt | 4 ++-- autogen.sh | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) commit 1c0e3ee99256c51d28064418de118726f0cdc8d7 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 14 13:17:10 2009 -0300 cmake: Updated documentation. TelepathyQt4/main.dox | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) commit 6703724947b4501ca0a82f719346aa14c95374cf Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 14 03:22:28 2009 -0300 autogen.sh: Added some command line args that simulate autotools configure script. Added support --enable-debug/disable-debug/enable-compiler-coverage/prefix. autogen.sh | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) commit 64e21516c8ade999fe81b11360147e9acdba08c9 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 14 02:59:13 2009 -0300 cmake: Added generated files to .gitignore. .gitignore | 2 ++ 1 file changed, 2 insertions(+) commit 984f55fd998802544f0359e2c414841601fc166a Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 14 02:50:16 2009 -0300 cmake: Updated README. README | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) commit 259ff3a57527dbe8190a2898b6ab963ecd6bea89 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 14 02:40:34 2009 -0300 cmake: Added -Wnon-virtual-dtor to compiler warnings. cmake/modules/TelepathyDefaults.cmake | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit d82377308608b88443a729917252830a06bf2284 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 14 02:27:52 2009 -0300 cmake: Use _ instead of - in variable names. examples/roster/CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 781f769b3f8529e46ddb9efa2a46a8394168a0f6 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 14 02:27:21 2009 -0300 cmake: Fixed generation of account-manager.service. tests/dbus-1/services/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit f5332c262ffc4d5ecbd30babe374486f03d887ef Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 14 02:15:22 2009 -0300 cmake: Moved external tests dependencies checks to top-level CMakeLists.txt. CMakeLists.txt | 60 +++++++++++++++++++++++++++++++++++++--- tests/CMakeLists.txt | 41 --------------------------- tests/pinocchio/CMakeLists.txt | 3 -- 3 files changed, 56 insertions(+), 48 deletions(-) commit 826729fae0acec64939b2506a41036544893854d Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 14 02:04:16 2009 -0300 cmake: Moved tp-farsight and gstreamer checks to top-level CMakeLists.txt. CMakeLists.txt | 12 ++++++++++++ examples/call/CMakeLists.txt | 7 ------- 2 files changed, 12 insertions(+), 7 deletions(-) commit abc29da9c51a22a1665fe238390fc27da457f8d6 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 14 01:54:52 2009 -0300 cmake: Moved compiler flags checks to GNU compilers only. cmake/modules/TelepathyDefaults.cmake | 77 +++++++++++++++++---------------- 1 file changed, 39 insertions(+), 38 deletions(-) commit c3d6d2a5e15bd27a90756d95e9a5e8fedb6b4030 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 14 01:53:00 2009 -0300 cmake: Removed trailing spaces on CompilerWarnings.cmake. cmake/modules/CompilerWarnings.cmake | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit d5285a92ee2c84b643f2032e04c074bcb2cc9fdf Author: Ian Monroe Date: Mon Apr 13 18:40:08 2009 -0500 ported TP_COMPILER_WARNINGS from m4 to cmake. cmake/modules/CompilerWarnings.cmake | 53 +++++++++++++++++++++++++++++++++ cmake/modules/TelepathyDefaults.cmake | 40 +++++++++++++++++++++++-- 2 files changed, 91 insertions(+), 2 deletions(-) commit 307e7e8fb42f1a0c0d0fe520528c4a4a602d2a70 Author: Ian Monroe Date: Mon Apr 13 14:53:30 2009 -0500 switch autogen.sh to cmake autogen.sh | 33 +++------------------------------ 1 file changed, 3 insertions(+), 30 deletions(-) commit 57658488f07b45d2057a0fa5a78df8f7c85f5fee Author: Ian Monroe Date: Fri Apr 10 16:22:01 2009 -0500 Added the CMake build system files. This allows telepathy-qt4 to be built on Windows. .gitignore | 1 + CMakeLists.txt | 74 ++++++++ TelepathyQt4/CMakeLists.txt | 332 +++++++++++++++++++++++++++++++++ TelepathyQt4/TelepathyQt4.pc.in | 14 +- TelepathyQt4/pending-operation.h | 3 + cmake/modules/Doxygen.cmake | 25 +++ cmake/modules/FindLibPython.py | 12 ++ cmake/modules/FindPythonLibrary.cmake | 84 +++++++++ cmake/modules/TelepathyDefaults.cmake | 62 ++++++ cmake/modules/TelepathyDist.cmake | 10 + cmake/modules/distcheck.py | 83 +++++++++ cmake_uninstall.cmake.in | 21 +++ config.h.in | 2 + doxygen.cfg.in | 53 +++--- examples/CMakeLists.txt | 4 + examples/accounts/CMakeLists.txt | 29 +++ examples/call/CMakeLists.txt | 47 +++++ examples/extensions/CMakeLists.txt | 98 ++++++++++ examples/roster/CMakeLists.txt | 42 +++++ tests/CMakeLists.txt | 72 +++++++ tests/dbus-1/services/CMakeLists.txt | 3 + tests/dbus/CMakeLists.txt | 38 ++++ tests/lib/CMakeLists.txt | 35 ++++ tests/lib/callable/CMakeLists.txt | 30 +++ tests/lib/contactlist/CMakeLists.txt | 28 +++ tests/lib/csh/CMakeLists.txt | 16 ++ tests/lib/echo/CMakeLists.txt | 18 ++ tests/lib/echo2/CMakeLists.txt | 16 ++ tests/pinocchio/CMakeLists.txt | 36 ++++ 29 files changed, 1255 insertions(+), 33 deletions(-) commit 02882fa8091e78f9a067210ee97e50a00ac94e04 Merge: a92cfc1 1c73440 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Sep 20 12:26:12 2010 +0100 Merge remote branch 'oggis/normalize' Reviewed-by: Andre Magalhaes (andrunko) commit 1c73440f9d22cb467b4b5d26102dd6b8aaffee8c Author: Olli Salli Date: Sun Sep 19 21:39:52 2010 +0300 Normalize QObject signal connections everywhere TelepathyQt4/abstract-interface.cpp | 4 +- TelepathyQt4/account-manager.cpp | 16 ++-- TelepathyQt4/account-set.cpp | 24 +++--- TelepathyQt4/account.cpp | 20 ++--- TelepathyQt4/channel-dispatch-operation.cpp | 4 +- TelepathyQt4/channel-request.cpp | 8 +- TelepathyQt4/channel.cpp | 75 +++++++++--------- TelepathyQt4/client-registrar.cpp | 5 +- TelepathyQt4/connection-manager.cpp | 24 +++--- TelepathyQt4/connection.cpp | 46 +++++------ TelepathyQt4/contact-manager.cpp | 94 +++++++++++------------ TelepathyQt4/dbus-proxy.cpp | 8 +- TelepathyQt4/file-transfer-channel.cpp | 8 +- TelepathyQt4/pending-account.cpp | 4 +- TelepathyQt4/pending-channel-request.cpp | 12 +-- TelepathyQt4/pending-channel.cpp | 8 +- TelepathyQt4/pending-connection.cpp | 4 +- TelepathyQt4/pending-contact-info.cpp | 4 +- TelepathyQt4/pending-contacts.cpp | 4 +- TelepathyQt4/pending-handles.cpp | 16 ++-- TelepathyQt4/readiness-helper.cpp | 4 +- TelepathyQt4/streamed-media-channel.cpp | 110 +++++++++++++-------------- TelepathyQt4/text-channel.cpp | 70 +++++++++-------- 23 files changed, 283 insertions(+), 289 deletions(-) commit a92cfc1e60f858281b0b283c00584541bc9b5936 Merge: 1da7f8c 324026c Author: Olli Salli Date: Sun Sep 19 21:40:24 2010 +0300 Merge branch 'todo' Reviewed-by: Andre Magalhaes (andrunko) commit 324026cc8a4bc453b3ccb21bf86a3f14a61f34b2 Author: Olli Salli Date: Sun Sep 19 17:50:28 2010 +0300 Add generic filter combinator stuff TODO TelepathyQt4/filter.h | 7 +++++++ 1 file changed, 7 insertions(+) commit 6fd84ce8c0b30ae80d2b5be1ecd9ad5f3ff043a4 Author: Olli Salli Date: Sun Sep 19 17:50:17 2010 +0300 Add contact filtering TODO considerations TelepathyQt4/contact.h | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) commit 48c1441de00ec6582d39adf9a3c348f074fcea19 Author: Olli Salli Date: Sun Sep 19 17:49:35 2010 +0300 Add TODO about CapabilitiesBase::supportsFileTransfers() TelepathyQt4/capabilities-base.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit acb22cb305370b3111404ecbe55efd7da9261525 Author: Olli Salli Date: Sun Sep 19 17:43:46 2010 +0300 TODO about AbstractClientHandler subclasses TelepathyQt4/abstract-client.h | 7 +++++++ 1 file changed, 7 insertions(+) commit 1da7f8c41fbef8bcfc8d22dd5504b57214409cc1 Author: Olli Salli Date: Sat Sep 18 19:42:44 2010 +0300 Add TODO to Channel to add a "includeSelfContact" parameter to groupContacts() etc TelepathyQt4/channel.h | 4 ++++ 1 file changed, 4 insertions(+) commit cceb6b2be837657b48b5b104b0b21cb7544eef1e Author: Olli Salli Date: Fri Sep 17 18:45:51 2010 +0300 Fix a race possibility triggered by Qt 4.7+ in TestAccountBasics tests/dbus/account-basics.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) commit 25569cc3a9effb75f7d377a599fa58c73accb67d Author: Olli Salli Date: Fri Sep 17 03:27:01 2010 +0300 Start 0.3.11 development NEWS | 9 +++++++++ configure.ac | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) commit 5a535b85f6c5a16d970074cfe749bd003b96e848 Author: Olli Salli Date: Fri Sep 17 02:57:02 2010 +0300 Prepare version 0.3.10 NEWS | 2 +- configure.ac | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) commit 98dd738538f739257f1b7ed8f2649710d93587d3 Author: Olli Salli Date: Fri Sep 17 02:52:25 2010 +0300 Remove the useless AccountManager::FeatureFilterByCapabilites "proxy feature" TelepathyQt4/account-manager.cpp | 173 +++++++++++--------------------------- TelepathyQt4/account-manager.h | 2 - 2 files changed, 51 insertions(+), 124 deletions(-) commit db561102a8b1683f0bfc0fa716111d501c27ebc6 Author: Olli Salli Date: Fri Sep 17 02:27:51 2010 +0300 Update NEWS NEWS | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) commit 6611e92894fd4e2f8cc793c29db43e9f1692e7e1 Merge: 0acc1a2 0ca92f8 Author: Olli Salli Date: Fri Sep 17 02:08:08 2010 +0300 Merge branch 'acc-filter' Reviewed-by: Andre Magalhaes (andrunko) commit 0acc1a282ddc1c78a44d84b9e649a62deb8aa5a4 Merge: bb6ba4e 6853103 Author: Olli Salli Date: Fri Sep 17 02:02:46 2010 +0300 Merge branch 'account-avatar-introspection' Reviewed-by: Andre Magalhaes (andrunko) commit 685310323a89a8991087924ec8b21dc83fd87855 Author: Olli Salli Date: Fri Sep 17 02:00:31 2010 +0300 Fix a rare bug with doing double setIntrospectCompleted in account avatar introspection TelepathyQt4/account.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) commit 0ca92f805d4e80a8b66cdfaa501457418dd2bc30 Author: Olli Salli Date: Thu Sep 16 22:20:32 2010 +0300 Adapt the tests for the new OO account filtering API tests/dbus/account-basics.cpp | 47 +++++++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 20 deletions(-) commit b77dab80c7848d47213d17bef53ce605ceee9316 Author: Olli Salli Date: Thu Sep 16 22:10:14 2010 +0300 Don't use foreach in the generic-capability-filter public header TelepathyQt4/generic-capability-filter.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit f87d73446078f8a3c1ad8c28e4513613e50e7531 Author: Olli Salli Date: Thu Sep 16 22:09:54 2010 +0300 Add an optional RCCs parameter to GenericCapabilityFilter::create() TelepathyQt4/generic-capability-filter.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit 3ad85641e0005bebed0121ab8ffd5e98f7edbead Author: Olli Salli Date: Thu Sep 16 22:04:42 2010 +0300 Make Account::capabilities() not crash even if the protocol info couldn't be introspected TelepathyQt4/account.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit 60dc42cbabea7e1c0352adc1ee7fd74cf12721f2 Author: Olli Salli Date: Thu Sep 16 22:03:07 2010 +0300 Export AccountPropertyFilter TelepathyQt4/account-property-filter.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 559051e1ac80e6824dd196cf4598d92c5381de95 Author: Olli Salli Date: Thu Sep 16 21:11:15 2010 +0300 Make sure PendingAccount only finishes when the account has appeared in the AM too TelepathyQt4/pending-account.cpp | 26 ++++++++++++++++++++++++-- TelepathyQt4/pending-account.h | 1 + 2 files changed, 25 insertions(+), 2 deletions(-) commit 01d8da6302c8809b2a2257edbef726861d5a47c1 Author: Olli Salli Date: Thu Sep 16 21:10:30 2010 +0300 Replace a while loop gone wrong (again...) in GenericPropertyFilter by a for loop TelepathyQt4/generic-property-filter.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) commit b16c9f18fef28013547640954ad28599e3411ae4 Author: Olli Salli Date: Thu Sep 16 21:09:44 2010 +0300 Make AccountSet::isFilterValid() actually work again TelepathyQt4/account-set.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) commit 4e2cc157e7a97ed6b88ccffd5135d9872b01df1f Author: Olli Salli Date: Thu Sep 16 20:52:05 2010 +0300 Fix inverted logic in AccountPropertyFilter TelepathyQt4/account-property-filter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 40b2557555aa393cff076606919f3e263e6ca5f8 Author: Olli Salli Date: Thu Sep 16 20:51:22 2010 +0300 Make the Filter objects be RefCounteds so we don't have to slice them by value TelepathyQt4/AccountCapabilityFilter | 2 +- TelepathyQt4/Makefile.am | 2 -- TelepathyQt4/account-capability-filter.cpp | 42 ----------------------- TelepathyQt4/account-capability-filter.h | 51 ---------------------------- TelepathyQt4/account-manager.cpp | 30 ++++++++-------- TelepathyQt4/account-manager.h | 4 +-- TelepathyQt4/account-property-filter.cpp | 6 ---- TelepathyQt4/account-property-filter.h | 9 +++-- TelepathyQt4/account-set-internal.h | 4 +-- TelepathyQt4/account-set.cpp | 32 ++++++++--------- TelepathyQt4/account-set.h | 6 ++-- TelepathyQt4/filter.h | 16 ++++++--- TelepathyQt4/generic-capability-filter.h | 9 ++--- TelepathyQt4/generic-property-filter.h | 9 ++--- TelepathyQt4/types.h | 13 +++++++ 15 files changed, 79 insertions(+), 156 deletions(-) commit 68f5d682009ce74c746cb9cb36efc4360a37d7cd Author: Olli Salli Date: Thu Sep 16 19:07:54 2010 +0300 Don't have double-plurals in AccountManager::*AccountsSet() names TelepathyQt4/account-manager.cpp | 12 ++++++------ TelepathyQt4/account-manager.h | 12 ++++++------ tests/dbus/account-basics.cpp | 26 +++++++++++++------------- 3 files changed, 25 insertions(+), 25 deletions(-) commit 03a33b22f1c1e2782d9b0aa8c0f228ba7171566f Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 12 05:25:18 2010 -0300 AccountManager: Use AccountCapabilityFilter instead of rccSubset to filter by caps. TelepathyQt4/account-manager.cpp | 43 +++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 24 deletions(-) commit 6837410e885b9852a4361244004d1c704f37f1df Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 12 05:24:49 2010 -0300 AccountManager: Added methods to filter accounts using filter objects. TelepathyQt4/account-manager.cpp | 39 ++++++++++++++++++++++++++++++++++++++ TelepathyQt4/account-manager.h | 3 +++ 2 files changed, 42 insertions(+) commit b7e19f65325a9ae6d4b1f6b350edd6beef1c29ca Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 12 05:13:29 2010 -0300 AccountManager: Remove "supports" from filtering methods. TelepathyQt4/account-manager.cpp | 12 ++++++------ TelepathyQt4/account-manager.h | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) commit 2ac304c2ccdd0f5d4d8e7f4e38668537ab41d0a1 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 12 05:03:07 2010 -0300 AccountManager: Updated docs to be in compliance with latest changes regarding filtering accounts. TelepathyQt4/account-manager.cpp | 57 +++++++++++++++++++++++++------------- 1 file changed, 38 insertions(+), 19 deletions(-) commit fa7950e8e5972a12973f079d04b2bb7c1826969b Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 12 05:08:33 2010 -0300 Revert "AccountManager: Added additionalFilter param to helper methods to filter accounts by RCC." This reverts commit 6dbf3a03956c5a3a8e6e7fddc8bbc736e0c23e64. TelepathyQt4/account-manager.cpp | 105 +++++++++++++++----------------------- TelepathyQt4/account-manager.h | 18 +++---- 2 files changed, 47 insertions(+), 76 deletions(-) commit 0afe31088a8b373cb26242c932b5b8be19b9f211 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 12 05:08:25 2010 -0300 Revert "account-basics test: Added tests for additionalFilter support in AM helper methods to filter accounts by RCC." This reverts commit 171e1fba64e8da436d0f20ab87001c12d61b67c1. tests/dbus/account-basics.cpp | 12 ------------ 1 file changed, 12 deletions(-) commit b050de51ff37fb9553896b4a3a024381331a5231 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 12 05:08:18 2010 -0300 Revert "AccountManager: Updated docs to indicate rccSubset is a valid filter key." This reverts commit 89904634a248c322a174a81b91f3281433f3696f. TelepathyQt4/account-manager.cpp | 3 --- 1 file changed, 3 deletions(-) commit 2ed9b872844247240e05f9b3ab853960b27c3c99 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 12 04:49:09 2010 -0300 AccountSet: Use filter objects to represent filters instead of using QVariantMap. The QVariantMap version is still there and marked as deprecated and when using it only filtering by property will be used. TelepathyQt4/account-set-internal.h | 14 ++- TelepathyQt4/account-set.cpp | 208 +++++++++++++++++------------------ TelepathyQt4/account-set.h | 10 +- 3 files changed, 121 insertions(+), 111 deletions(-) commit 782b9e88df5aa8f44f808d981a6d866da41e0997 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 12 03:46:20 2010 -0300 Added specialized class used to filter accounts by capabilities. TelepathyQt4/AccountCapabilityFilter | 13 +++++++ TelepathyQt4/Makefile.am | 3 ++ TelepathyQt4/account-capability-filter.cpp | 42 +++++++++++++++++++++++ TelepathyQt4/account-capability-filter.h | 51 ++++++++++++++++++++++++++++ 4 files changed, 109 insertions(+) commit 7b4653090a08fc6ad145483f7d26e7b69939989e Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 12 03:43:53 2010 -0300 Added specialized class used to filter accounts by properties. TelepathyQt4/AccountPropertyFilter | 13 +++++ TelepathyQt4/Makefile.am | 3 ++ TelepathyQt4/account-property-filter.cpp | 86 ++++++++++++++++++++++++++++++ TelepathyQt4/account-property-filter.h | 53 ++++++++++++++++++ 4 files changed, 155 insertions(+) commit 4ad0c582f41a6bc615795ffb633e3fbe04399471 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 12 03:42:04 2010 -0300 Added generic filter class used to filter objects by capability. TelepathyQt4/GenericCapabilityFilter | 13 ++++ TelepathyQt4/Makefile.am | 2 + TelepathyQt4/generic-capability-filter.h | 111 ++++++++++++++++++++++++++++++ 3 files changed, 126 insertions(+) commit 479ed6e89ad904cc2989e541f0421ef17a6cb1b4 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 12 03:40:30 2010 -0300 Added generic filter class used to filter objects by property. TelepathyQt4/GenericPropertyFilter | 13 ++++++ TelepathyQt4/Makefile.am | 2 + TelepathyQt4/generic-property-filter.h | 80 ++++++++++++++++++++++++++++++++ 3 files changed, 95 insertions(+) commit 5733875bebe6e8ca22f52ae187e2584b9645c3dd Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 12 03:39:11 2010 -0300 Added Filter class - base class for all filtering classes. TelepathyQt4/Filter | 13 ++++++++++ TelepathyQt4/Makefile.am | 2 ++ TelepathyQt4/account-set-internal.h | 3 ++- TelepathyQt4/filter.h | 49 +++++++++++++++++++++++++++++++++++ 4 files changed, 66 insertions(+), 1 deletion(-) commit 6fcd5311f218f71df1bbe9023131822f22d70896 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 12 03:37:21 2010 -0300 AccountManager: Added FeatureFilterByCapabilities. The feature will enable accounts features used to filter accounts by capabilities. TelepathyQt4/account-manager.cpp | 45 ++++++++++++++++++++++++++++++++++++++ TelepathyQt4/account-manager.h | 2 ++ 2 files changed, 47 insertions(+) commit 7e9ac8218a2b5a9923d8ef91674e994142d643b3 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 12 02:23:46 2010 -0300 AccountSet: Use Account::capabilitiesChanged over custom implementation. TelepathyQt4/account-set-internal.h | 4 +-- TelepathyQt4/account-set.cpp | 47 ++++++----------------------------- 2 files changed, 8 insertions(+), 43 deletions(-) commit 99f7ec27af993c3eebb830bd798749c150440df2 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 12 02:17:36 2010 -0300 Account: Added missing protocolInfo property. TelepathyQt4/account.h | 1 + 1 file changed, 1 insertion(+) commit 91004e586a5aaeaaca8bd4acbaa6fb1e16f39fa1 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Aug 11 12:05:50 2010 -0300 Account: Added capabilities support (accessor, property, signal). TelepathyQt4/account.cpp | 118 ++++++++++++++++++++++++++++++++++++++++- TelepathyQt4/account.h | 6 +++ tests/dbus/account-basics.cpp | 2 +- 3 files changed, 124 insertions(+), 2 deletions(-) commit 3d46abfc311aa6a626ada8b6e810c914206efe60 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 15 20:56:13 2010 -0300 AccountManager: Updated docs to indicate rccSubset is a valid filter key. TelepathyQt4/account-manager.cpp | 3 +++ 1 file changed, 3 insertions(+) commit f1d351157bc58158639d3891d2fd56cc84343757 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 15 20:53:12 2010 -0300 AccountSet: Updated docs to indicate rccSubset is a valid filter key. TelepathyQt4/account-set.cpp | 3 +++ 1 file changed, 3 insertions(+) commit 31e68f0486a985b678037d5c4f12ce9cc2ca8075 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 15 20:38:46 2010 -0300 account-basics test: Added tests for additionalFilter support in AM helper methods to filter accounts by RCC. tests/dbus/account-basics.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit 2c481750c509285360daea9653dd6a2f77c1e100 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 15 20:37:35 2010 -0300 AccountManager: Added additionalFilter param to helper methods to filter accounts by RCC. TelepathyQt4/account-manager.cpp | 105 +++++++++++++++++++++++--------------- TelepathyQt4/account-manager.h | 18 ++++--- 2 files changed, 76 insertions(+), 47 deletions(-) commit e2d0dac62a4b85955b95c638c9ac67b226468726 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 15 18:38:23 2010 -0300 account-basics test: Added test for AM helper methods to filter accounts by RCC. tests/dbus/account-basics.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) commit 6e4e51dcbc7ad5d3eebbda67b606c278f891bdb0 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 15 18:54:26 2010 -0300 AccountSet: Improved check for valid filter. TelepathyQt4/account-set.cpp | 2 -- tests/dbus/account-basics.cpp | 3 ++- 2 files changed, 2 insertions(+), 3 deletions(-) commit 96ef8239707a14b65881060466c171a98629c638 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 15 18:07:12 2010 -0300 AccountManager: Added helper methods to filter accounts by RCC. Added helper methods to filter accounts that supports Text/TextChatRooms/Media/Audio/Video/FileTransfer channels. TelepathyQt4/account-manager.cpp | 174 ++++++++++++++++++++++++++++++++++++++ TelepathyQt4/account-manager.h | 7 ++ 2 files changed, 181 insertions(+) commit 42c24fa238afd908ffa0f4f4c4fd21562cba3a9b Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 15 18:10:50 2010 -0300 AccountManager: Updated docs to indicate accounts returned by AM have FeatureProtocolInfo ready. TelepathyQt4/account-manager.cpp | 40 +++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 13 deletions(-) commit fd25ffaf1e875a35fcc84897c2d716bbf8b58fb0 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 15 18:12:18 2010 -0300 account-basics test: Added tests for filter accounts by RCC support. tests/dbus/account-basics.cpp | 109 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) commit 5fe001da7f9bcc9c80400a52e34ccec98c813115 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 15 18:11:55 2010 -0300 spurious.manager: Added RCC definition to be used by tests. tests/telepathy/managers/spurious.manager | 7 +++++++ 1 file changed, 7 insertions(+) commit dacca32ee365078404f1175c9b191f641e97b22b Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 15 16:40:05 2010 -0300 AccountSet: Added support to filter accounts by RCC. TelepathyQt4/account-set-internal.h | 12 ++- TelepathyQt4/account-set.cpp | 151 ++++++++++++++++++++++++++++++++--- TelepathyQt4/account-set.h | 3 +- 3 files changed, 149 insertions(+), 17 deletions(-) commit bb6ba4ef0797a70410a3e0dd34433173273e89d5 Author: Olli Salli Date: Thu Sep 16 03:42:55 2010 +0300 Update NEWS NEWS | 4 ++++ 1 file changed, 4 insertions(+) commit e6f33f24669e48e8ee3101e308ded78003f78774 Merge: 2059437 4eac900 Author: Olli Salli Date: Thu Sep 16 03:39:52 2010 +0300 Merge branch 'request-details' Reviewed-by: Andre Magalhaes (andrunko) commit 2059437eedf98d37ca92b3375abfc5e7070bcb78 Author: Olli Salli Date: Thu Sep 16 03:37:21 2010 +0300 PendingConnect: Handle connection invalidation TelepathyQt4/connection-internal.h | 1 + TelepathyQt4/connection.cpp | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) commit 2055e2f54bf93d9297429da2a56a5de9922bd115 Author: Olli Salli Date: Thu Sep 16 03:23:14 2010 +0300 Update NEWS NEWS | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) commit 2bb119560a17860c06b258448c0067db76a6f20d Merge: 42d2dd5 c13f123 Author: Olli Salli Date: Thu Sep 16 03:12:54 2010 +0300 Merge branch 'client-industrialisation' Reviewed-by: Andre Magalhaes (andrunko) commit c13f1232d372870ac4fee0ebf0afc725bd0a811d Author: Olli Salli Date: Thu Sep 16 03:12:13 2010 +0300 Add an API/ABI break TODO comment to PendingChannelRequest TelepathyQt4/pending-channel-request.cpp | 2 ++ 1 file changed, 2 insertions(+) commit 0ffd61abf8317ae5d58c2b24bf3195f4ed2164cd Author: Olli Salli Date: Thu Sep 16 03:10:18 2010 +0300 Put the opening curlies in their rightful place in some ClientRegistrar internal fns TelepathyQt4/client-registrar.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) commit c7c62a5b2d32c33a5ad0f254935a77dace4e916a Author: Olli Salli Date: Thu Sep 16 02:59:44 2010 +0300 consistency: s/invocations/mInvocations in ClientRegistrar adaptors TelepathyQt4/client-registrar-internal.h | 6 ++--- TelepathyQt4/client-registrar.cpp | 36 +++++++++++++++--------------- 2 files changed, 21 insertions(+), 21 deletions(-) commit 4eac9005d6bb382c0b04cd54a9eb8003c61a6dc6 Author: Olli Salli Date: Thu Sep 16 02:37:05 2010 +0300 Test details in ContactManager::allKnownContactsChanged() tests/dbus/conn-roster.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) commit b62822f6fb7bf1f1455daec832b40f4875006a6b Author: Olli Salli Date: Thu Sep 16 02:36:04 2010 +0300 Add details variants for other signals in ContactManager too TelepathyQt4/contact-manager.cpp | 14 ++++++++------ TelepathyQt4/contact-manager.h | 14 +++++++++++--- 2 files changed, 19 insertions(+), 9 deletions(-) commit b7c9ee60ca4a8f43a2afb86a540f2f2ebc7d8ebc Author: Olli Salli Date: Thu Sep 16 01:23:10 2010 +0300 Improve ChannelDispatchOperation test coverage a bit tests/dbus/client-factories.cpp | 7 +++++++ 1 file changed, 7 insertions(+) commit cf510e980202b6abb1592971fd64e158f0807170 Author: Olli Salli Date: Thu Sep 16 01:22:36 2010 +0300 Actually have the test CDOAdaptor PossibleHandlers prob be a "as" tests/dbus/client-factories.cpp | 22 ++++++++++++---------- tests/dbus/client.cpp | 14 +++++++------- 2 files changed, 19 insertions(+), 17 deletions(-) commit 4c42ac2c8e061ef8c3e664deaa37b620cea86c4f Author: Olli Salli Date: Thu Sep 16 01:21:47 2010 +0300 Refactor the CDO introspection to be a bit clearer TelepathyQt4/channel-dispatch-operation.cpp | 98 ++++++++++++--------------- TelepathyQt4/client-registrar.cpp | 25 +++++-- 2 files changed, 61 insertions(+), 62 deletions(-) commit ed0a141dd73d8ed6c7ce7547a98ea82d16d0aedd Author: Olli Salli Date: Thu Sep 16 00:35:55 2010 +0300 Use a proper PossibleHandler object path for TestClient too tests/dbus/client-factories.cpp | 2 +- tests/dbus/client.cpp | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) commit 598bbe1ef09edd1f3604a832eb68ff7e2b9f70ab Author: Olli Salli Date: Wed Sep 15 21:42:03 2010 +0300 Remove extra debug from CDO TelepathyQt4/channel-dispatch-operation.cpp | 2 -- 1 file changed, 2 deletions(-) commit c00bb7b79fa8422d1ddc0335436d232e23faf28f Author: Olli Salli Date: Wed Sep 15 21:41:41 2010 +0300 Declare complex properties in the way QDBus expects in test adaptors tests/dbus/client-factories.cpp | 12 +++++++----- tests/dbus/client.cpp | 6 +++--- 2 files changed, 10 insertions(+), 8 deletions(-) commit c60a33597468ede1b9abcfff0e0a019f43c26c9d Author: Olli Salli Date: Wed Sep 15 20:20:07 2010 +0300 Use chanFactory instead of chanFact etc in CDO for consistency TelepathyQt4/channel-dispatch-operation.cpp | 36 ++++++++++++++------------- 1 file changed, 19 insertions(+), 17 deletions(-) commit af5d939b08e6e58fa0ebbdcff2fe6b7888352a0d Author: Olli Salli Date: Wed Sep 15 20:11:47 2010 +0300 Remove extra debug from CDO TelepathyQt4/channel-dispatch-operation.cpp | 2 -- 1 file changed, 2 deletions(-) commit 2b29dfb54c25bbb392e514a143042491fc280df5 Author: Olli Salli Date: Wed Sep 15 19:53:50 2010 +0300 Make ChannelDispatchOperation use factories TelepathyQt4/channel-dispatch-operation.cpp | 308 ++++++++++++++++++--------- TelepathyQt4/channel-dispatch-operation.h | 42 ++-- TelepathyQt4/client-registrar.cpp | 27 ++- tests/dbus/client-factories.cpp | 30 ++- tests/dbus/client.cpp | 21 +- 5 files changed, 288 insertions(+), 140 deletions(-) commit 239745869240b82ac1e2618bb21cc0a7a94f8a4b Author: Olli Salli Date: Wed Sep 15 12:42:24 2010 +0300 Include the Account and Connection props in the fake CDO in TestClient* tests/dbus/client-factories.cpp | 23 ++++++++++++++++++++--- tests/dbus/client.cpp | 23 ++++++++++++++++++++--- 2 files changed, 40 insertions(+), 6 deletions(-) commit de2e7f27578a6e00adf0e936f60544f8689dc08a Author: Olli Salli Date: Tue Sep 14 20:21:30 2010 +0300 Test that CR doesn't construct accounts anew tests/dbus/account-channel-dispatcher.cpp | 1 + 1 file changed, 1 insertion(+) commit 42d2dd5c4457e49a49d7f805e136b2e80c116110 Merge: e1e417c dccf3cc Author: Andre Moreira Magalhaes (andrunko) Date: Mon Sep 13 15:22:25 2010 +0100 Merge branch 'account-initialize-changing-presence' Reviewed-by: Simon McVittie (smcv) commit dccf3ccecbab4f22a107f61d214fb08e185f6704 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Sep 13 15:18:37 2010 +0100 Account: Properly initialize changingPresence. TelepathyQt4/account.cpp | 1 + 1 file changed, 1 insertion(+) commit e813f80c5f02b2b9955d818710b3d1d034c49cc8 Author: Olli Salli Date: Mon Sep 13 08:24:54 2010 +0300 Make it possible to specify the account for a ChannelRequest in advance TelepathyQt4/channel-request.cpp | 91 +++++++++++++++++++++++++----- TelepathyQt4/channel-request.h | 6 ++ TelepathyQt4/client-registrar.cpp | 10 ++-- TelepathyQt4/pending-channel-request.cpp | 3 +- 4 files changed, 89 insertions(+), 21 deletions(-) commit d118276f657bc00bdb7eebb7fc1eea9bcf58ab15 Author: Olli Salli Date: Mon Sep 13 08:06:06 2010 +0300 ChannelRequest: don't mess up the ordering between the ctors TelepathyQt4/channel-request.cpp | 44 +++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 22 deletions(-) commit 7e8e87321dc4d80f38a276e49e28ed9093fab7da Author: Olli Salli Date: Mon Sep 13 00:10:22 2010 +0300 Use factories in ChannelRequest TelepathyQt4/channel-request.cpp | 91 ++++++++++++++++++++++++++++-- TelepathyQt4/channel-request.h | 20 ++++++- TelepathyQt4/client-registrar.cpp | 18 ++++-- TelepathyQt4/pending-channel-request.cpp | 10 +++- tests/dbus/client-factories.cpp | 10 ++++ 5 files changed, 136 insertions(+), 13 deletions(-) commit 82480b5f112a7069e483a108f562c622044a5e0c Author: Olli Salli Date: Sun Sep 12 23:33:40 2010 +0300 Make PendingChannelRequest hold a ref to its Account TelepathyQt4/account.cpp | 76 +++++++++++++++--------------- TelepathyQt4/pending-channel-request.cpp | 72 +++++++++++++++++++++++++++- TelepathyQt4/pending-channel-request.h | 10 +++- 3 files changed, 118 insertions(+), 40 deletions(-) commit 0fbe0f0889c66a870540ebeac96fe1446a22045d Author: Olli Salli Date: Sun Sep 12 22:37:53 2010 +0300 Defer calling handleChannels until all proxies are prepared (factorified) TelepathyQt4/client-registrar-internal.h | 19 +++++ TelepathyQt4/client-registrar.cpp | 116 ++++++++++++++++++++++++------ tests/dbus/client-factories.cpp | 20 ++++++ 3 files changed, 132 insertions(+), 23 deletions(-) commit 18e7731fe988b14e8917573a9e7cb62e62a9f817 Author: Olli Salli Date: Sun Sep 12 17:24:28 2010 +0300 Defer calling addDispatchOperation until the proxies are prepared (factorified) TelepathyQt4/client-registrar-internal.h | 17 +++++++ TelepathyQt4/client-registrar.cpp | 80 ++++++++++++++++++++++++------ tests/dbus/client-factories.cpp | 6 +++ 3 files changed, 89 insertions(+), 14 deletions(-) commit 09592c1cdb1d84ca5dc9cc26e3ce3c3a2914b685 Author: Olli Salli Date: Sun Sep 12 17:08:05 2010 +0300 Add a FIXME regarding API stupidity with ChannelDispatchOperation TelepathyQt4/channel-dispatch-operation.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) commit 0faf5b30701644f54e4277be08cbdc2df4d0879a Author: Olli Salli Date: Sun Sep 12 17:07:33 2010 +0300 Actually pass a ChannelDispatchOperation in the AddChannelDispatchOperation testing (?!?!) tests/dbus/client-factories.cpp | 83 +++++++++++++++++++++++++++++++++----- tests/dbus/client.cpp | 84 ++++++++++++++++++++++++++++++++++----- 2 files changed, 145 insertions(+), 22 deletions(-) commit 711ff8a25a32bad7cebe89765561f7f10cd3621e Author: Olli Salli Date: Sat Sep 11 21:55:34 2010 +0300 Describe how ObserveChannels impl could be improved when we have spec 0.19.12 TelepathyQt4/client-registrar.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) commit 7be9ea1bb244b8191122578e2317356bc0e3f68d Author: Olli Salli Date: Sat Sep 11 21:50:05 2010 +0300 Don't discard the observer info when doing ObserveChannels TelepathyQt4/client-registrar.cpp | 2 ++ 1 file changed, 2 insertions(+) commit 2ea78f4ffa1ca0fca776a4d6324fa74381f2f477 Author: Olli Salli Date: Sat Sep 11 21:43:06 2010 +0300 Remove stale account creation code from PendingAccount TelepathyQt4/pending-account.cpp | 6 ------ 1 file changed, 6 deletions(-) commit 6171dd7fa69e2862188d0422c9a86b8834e93681 Author: Olli Salli Date: Sat Sep 11 21:39:24 2010 +0300 Test that the factories have done their work before observeChannels is called tests/dbus/client-factories.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) commit 5bc9051c08960822dbe7540ff8f13bc2bb2ea21b Author: Olli Salli Date: Sat Sep 11 21:36:48 2010 +0300 Use the AM factories for ClientRegistrar in TestClientFactories tests/dbus/client-factories.cpp | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) commit d50186c5461609aafb9fcb30821da05014644c3b Author: Olli Salli Date: Sat Sep 11 21:31:57 2010 +0300 Make PendingAccount use the manager's factories TelepathyQt4/pending-account.cpp | 23 ++++++++++++++++++++++- TelepathyQt4/pending-account.h | 1 + 2 files changed, 23 insertions(+), 1 deletion(-) commit a8c99a862fad24457b78b6142eeb3c0ee5e8fa46 Author: Olli Salli Date: Sat Sep 11 21:30:33 2010 +0300 Make Connection::requestConnect actually wait for the conn to connect :) It used to not wait for the connection to connect at all, which was especially evident if the connection had already been made ready in the newly created state (before connecting). In that case it just finished ~straight away and the connection actually only got connected sometime later. TelepathyQt4/connection-internal.h | 1 + TelepathyQt4/connection.cpp | 35 +++++++++++++++++++++++++++++++++-- 2 files changed, 34 insertions(+), 2 deletions(-) commit b2d64390235cc6c07f9842876fe41892944ee889 Author: Olli Salli Date: Sat Sep 11 21:03:02 2010 +0300 Fix PendingAccount::objectPath() debug to not say ::account() TelepathyQt4/pending-account.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 799a65b0706fff837b41bb6547c329714ebfe8d9 Author: Olli Salli Date: Sat Sep 11 20:02:51 2010 +0300 Don't leak PendingComposite::Private TelepathyQt4/pending-operation.cpp | 5 +++++ TelepathyQt4/simple-pending-operations.h | 1 + 2 files changed, 6 insertions(+) commit b3a1e02cbe6475761a901253760c1ba189214d3c Author: Olli Salli Date: Sat Sep 11 20:02:30 2010 +0300 Work around QDBusMessage memory leak triggered by ClientHandlerRequestsAdaptor TelepathyQt4/client-registrar.cpp | 2 ++ 1 file changed, 2 insertions(+) commit b4a6ba004b04c21638d5eafd1acd343786f3c9dc Author: Olli Salli Date: Sat Sep 11 19:18:45 2010 +0300 Defer calling AbstractClientObserver::observeChannels() until all proxies are prepared TelepathyQt4/client-registrar-internal.h | 6 ++- TelepathyQt4/client-registrar.cpp | 65 ++++++++++++++++++++++++++++-- 2 files changed, 66 insertions(+), 5 deletions(-) commit 2b9db91d5500a12749baa78c7dfa8f7c0c8d514b Author: Olli Salli Date: Sat Sep 11 19:17:42 2010 +0300 Make TestClient(Factories) not expect a CDO object when there is none tests/dbus/client-factories.cpp | 2 +- tests/dbus/client.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 495307fd126f9ec9c14b101efabf3cb9f0b12467 Author: Olli Salli Date: Sat Sep 11 17:35:24 2010 +0300 Use factories for constructing proxies for ObserveChannels TelepathyQt4/client-registrar.cpp | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) commit e7b2272b43f121ae6d2a312b0c421d8ab51554e0 Author: Olli Salli Date: Sat Sep 11 17:25:00 2010 +0300 Make ObserveChannels deferrable TelepathyQt4/client-registrar-internal.h | 16 ++++++++++++ TelepathyQt4/client-registrar.cpp | 41 +++++++++++++++++------------- 2 files changed, 39 insertions(+), 18 deletions(-) commit e3bcad55587c5535963e2095564c4bd73e0c4cb4 Author: Olli Salli Date: Sat Sep 11 14:01:52 2010 +0300 Make the ClientRegistrar adaptors aware of the registrar that created them TelepathyQt4/client-registrar-internal.h | 43 ++++++++++++++++++++++++------ TelepathyQt4/client-registrar.cpp | 33 +++++++++++++---------- 2 files changed, 54 insertions(+), 22 deletions(-) commit 22b9a0686d7b8a9ea30968ed79ccbc7cda1b2492 Author: Olli Salli Date: Sat Sep 11 12:55:59 2010 +0300 Start testing factory-specific functionality in Client stuff tests/dbus/Makefile.am | 9 +- tests/dbus/client-factories.cpp | 735 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 742 insertions(+), 2 deletions(-) commit efc6a21409da998138f254c56e4dfaec447eed40 Author: Olli Salli Date: Sat Sep 11 12:37:05 2010 +0300 Add API to specify the factories to ClientRegistrar They're not yet used in any way, though. TelepathyQt4/client-registrar.cpp | 213 ++++++++++++++++++++++++++++++++++++- TelepathyQt4/client-registrar.h | 33 +++++- 2 files changed, 241 insertions(+), 5 deletions(-) commit e1e417c258bc379900a48e62ea9c15bd4de7e6cf Author: Olli Salli Date: Fri Sep 10 17:27:05 2010 +0300 Start 0.3.10 development NEWS | 9 +++++++++ configure.ac | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) commit 5726576b52731d89ec3e9dc7490e2e965771bb6c Author: Olli Salli Date: Fri Sep 10 17:14:45 2010 +0300 Prepare release 0.3.9 NEWS | 2 ++ configure.ac | 8 ++++---- 2 files changed, 6 insertions(+), 4 deletions(-) commit c6eafaec158a38579a2fca2a6d15e537f4fd97b6 Author: Olli Salli Date: Fri Sep 10 17:05:06 2010 +0300 Trivial: only convert from WeakPtr from SharedPtr if there are refs TelepathyQt4/shared-ptr.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit eac6edb97068b929760a726ad6e654d475d12b61 Author: Olli Salli Date: Fri Sep 10 16:08:31 2010 +0300 Updated NEWS NEWS | 2 ++ 1 file changed, 2 insertions(+) commit a578f6e1095dfcd3171c871a53be5fbb9ade2f2c Merge: 5a42c34 4fd0513 Author: Olli Salli Date: Fri Sep 10 15:57:34 2010 +0300 Merge branch 'planned-parenthood' Reviewed-by: Andre Magalhaes (andrunko) commit 4fd0513512ad71c3750e6bc0586432661d467493 Author: Olli Salli Date: Fri Sep 10 14:20:07 2010 +0300 Make PendingMedia{Streams,Content} hold a strong ref to the StreamedMediaChannel TelepathyQt4/streamed-media-channel-internal.h | 4 ++-- TelepathyQt4/streamed-media-channel.cpp | 10 +++++----- tests/dbus/streamed-media-chan.cpp | 2 ++ 3 files changed, 9 insertions(+), 7 deletions(-) commit 263fb0d3465496119d543feba0f48165e5ab7d27 Author: Olli Salli Date: Fri Sep 10 14:19:01 2010 +0300 Fix conn destroyed checks in ReferencedHandles TelepathyQt4/referenced-handles.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) commit 3a99b922e78dcf9a080e2bf7f79e7ecba40aa23f Author: Olli Salli Date: Fri Sep 10 14:16:54 2010 +0300 Don't make the Conn the parent of PendingHandles, we already hold a strong ref to it TelepathyQt4/pending-handles.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit bd7dcebb60d29699622364320fe116cbc50b4f44 Author: Olli Salli Date: Fri Sep 10 14:15:06 2010 +0300 Make PendingContactInfo hold a strong ref to the Contact TelepathyQt4/pending-contact-info.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 5f9815997877888aa9692c8d323e599cc1503d5e Author: Olli Salli Date: Fri Sep 10 14:14:41 2010 +0300 Don't make the Connection the parent in PendingCAI, we already hold a strong ref TelepathyQt4/pending-contact-attributes.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5c1fde07b70ce1a950ee4da178afab7acf52f6bd Author: Olli Salli Date: Fri Sep 10 14:13:21 2010 +0300 Hold a strong ref to the manager in PendingAccount TelepathyQt4/pending-account.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 617c9c1a7c3953f6101a77fd1cd3e0813b87d215 Author: Olli Salli Date: Fri Sep 10 13:27:53 2010 +0300 Don't have the manager as a parent to PendingConnection, hold a strong ref to it instead TelepathyQt4/pending-connection.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 7e9351b9aaad54cac367df9b51a035bdf84a2172 Author: Olli Salli Date: Fri Sep 10 13:22:08 2010 +0300 Don't pass the conn as a parent in PendingChannel, hold a strong ref to it instead TelepathyQt4/pending-channel.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 5a42c3447f20d1cb991360fc44aa97951da2d80a Author: Olli Salli Date: Fri Sep 10 13:16:43 2010 +0300 Update NEWS NEWS | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) commit ec5cd8933e7f6ba15dc9a3012ae30800790b7949 Author: Olli Salli Date: Fri Sep 10 12:59:20 2010 +0300 Updated NEWS NEWS | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 086c630507b4fa592201ff2769a45d70a73d96f1 Merge: f1d587f 80856fe Author: Olli Salli Date: Fri Sep 10 12:48:45 2010 +0300 Merge branch 'servicewatcher' Reviewed-by: Will Thompson (wjt) Reviewed-by: Simon McVittie (smcv) commit 80856fe1eba5d03383d47e1dfffb2a9fefe73e14 Author: Olli Salli Date: Fri Sep 10 12:41:53 2010 +0300 configure.ac: Comment that we don't have to check for QDBusServiceWatcher with Qt 4.6 configure.ac | 2 ++ 1 file changed, 2 insertions(+) commit 131ac1d3a6113eee380a00b36ab6788e5500a23a Author: Olli Salli Date: Fri Sep 10 12:16:40 2010 +0300 StatefulDBusProxy: Forgo the complicated unique name tracking In favor of tracking the well-known name :) This is functionally equivalent. The well-known name is stored in a private variable so all external code (eg. the actual proxies) will still use the uniquified name from DBusProxy::busName(). TelepathyQt4/dbus-proxy.cpp | 81 ++++++++++++++----------------------------- 1 file changed, 26 insertions(+), 55 deletions(-) commit e17c59307789f26215122b9f8b5486681adb7ca8 Author: Olli Salli Date: Fri Sep 10 11:50:16 2010 +0300 Add AC_MSG_CHECKING for the QDBusServiceWatcher check configure.ac | 4 ++++ 1 file changed, 4 insertions(+) commit 653908fa7fb3e5950dc051383adca9c40ece2eb4 Author: Olli Salli Date: Fri Sep 10 11:50:09 2010 +0300 Fix make distcheck TelepathyQt4/Makefile.am | 1 + 1 file changed, 1 insertion(+) commit a71f362d56bf6122fa2da1dcba2443229300a489 Author: Olli Salli Date: Fri Sep 10 11:30:54 2010 +0300 Add testcase checking that a bogus service name doesn't screw up DBusProxy(Factory) tests/dbus/dbus-proxy-factory.cpp | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) commit 936615039378a95cc203fa3d57e9d2201c10a231 Author: Olli Salli Date: Fri Sep 10 11:30:36 2010 +0300 Don't even cache already-invalid proxies in DBusProxyFactories TelepathyQt4/dbus-proxy-factory.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) commit 7aa23e88168361e96865f29216a5de1d115428f3 Author: Olli Salli Date: Fri Sep 10 11:29:57 2010 +0300 Guard against race conditions in the name owner change tracking code in StatefulDBusProxy TelepathyQt4/dbus-proxy.cpp | 64 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 52 insertions(+), 12 deletions(-) commit 8727c1b97634cd7758a55eb9ec4e880daf3e2761 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Aug 27 17:28:47 2010 +0300 DBusProxy: Added support to use QDBusServiceWatcher if available. It fixes https://bugs.freedesktop.org/show_bug.cgi?id=29409. TelepathyQt4/dbus-proxy.cpp | 24 +++++++++++++++++++----- configure.ac | 15 +++++++++++++++ 2 files changed, 34 insertions(+), 5 deletions(-) commit f1d587f6a3754308f3c1096a3893c47c238500c8 Author: Olli Salli Date: Fri Sep 10 10:13:49 2010 +0300 Update NEWS NEWS | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) commit 215dca7c855915af63ea2fdd47866c15f7b7e0af Merge: 6738c4a 0c7877f Author: Olli Salli Date: Fri Sep 10 09:33:46 2010 +0300 Merge branch 'factory-goodness' Reviewed-by: Andre Magalhaes (andrunko) commit 0c7877f482a6197f8a241952055db03430d34149 Author: Olli Salli Date: Fri Sep 10 09:32:13 2010 +0300 Make TestAccountConnectionFactory compile with QT_NO_KEYWORDS tests/dbus/account-connection-factory.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b7fe091a7c8807fb3d7e25e476f41fde8c3f285e Author: Olli Salli Date: Fri Sep 10 08:44:31 2010 +0300 Add a dedicated test for DBusProxyFactory/ConnectionFactory tests/dbus/Makefile.am | 5 + tests/dbus/dbus-proxy-factory.cpp | 313 +++++++++++++++++++++++++++++++++++++ 2 files changed, 318 insertions(+) commit 1cdce46da48797b83ecb4e758bf34e596acecdfa Author: Olli Salli Date: Fri Sep 10 08:43:28 2010 +0300 Add a TestBackdoors class with invalidateProxy() to enable better invalidation testing TelepathyQt4/Makefile.am | 2 ++ TelepathyQt4/dbus-proxy.h | 4 ++++ TelepathyQt4/test-backdoors.cpp | 37 ++++++++++++++++++++++++++++++ TelepathyQt4/test-backdoors.h | 47 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 90 insertions(+) commit 54dd9760444d50e9a22ba9417725a57d2c01b66b Author: Olli Salli Date: Thu Sep 9 23:02:34 2010 +0300 Conn: Key handle context mapping by object path instead of the (uniquefied) bus name... This is a bit embarrassing to say the least. Wonder why nobody ever hit any bugs because of this? Probably because they always (indirectly) used GetCAI which holds by itself. TelepathyQt4/connection.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) commit 388d2487e613c3098d7a48651f0a4c26d505fdef Author: Olli Salli Date: Tue Sep 7 20:19:07 2010 +0300 Add a placeholder ContactFactory TelepathyQt4/ContactFactory | 13 ++++++ TelepathyQt4/Makefile.am | 3 ++ TelepathyQt4/account-factory.cpp | 13 ++++-- TelepathyQt4/account-factory.h | 6 ++- TelepathyQt4/account-manager.cpp | 49 +++++++++++++++----- TelepathyQt4/account-manager.h | 13 ++++-- TelepathyQt4/account.cpp | 49 +++++++++++++++----- TelepathyQt4/account.h | 13 ++++-- TelepathyQt4/connection-factory.cpp | 13 ++++-- TelepathyQt4/connection-factory.h | 6 ++- TelepathyQt4/contact-factory.cpp | 85 +++++++++++++++++++++++++++++++++++ TelepathyQt4/contact-factory.h | 68 ++++++++++++++++++++++++++++ TelepathyQt4/types.h | 3 ++ 13 files changed, 293 insertions(+), 41 deletions(-) commit 6ec6e741458256cde2be4bcada8cc3758e42dc29 Author: Olli Salli Date: Tue Sep 7 18:45:20 2010 +0300 Split the DBusProxyFactory::prepare() hook into initialPrepare() and readyPrepare() TelepathyQt4/dbus-proxy-factory.cpp | 49 +++++++++++++++++++---------------- TelepathyQt4/dbus-proxy-factory.h | 3 ++- TelepathyQt4/pending-ready.cpp | 30 +++++++++++---------- TelepathyQt4/pending-ready.h | 6 +++-- 4 files changed, 50 insertions(+), 38 deletions(-) commit 916e483670b431e401925587c5e58703f819492b Author: Olli Salli Date: Tue Sep 7 18:01:47 2010 +0300 Doxyment the factory PendingReady additions TelepathyQt4/pending-ready.cpp | 27 ++++++++++++++++++++++----- TelepathyQt4/pending-ready.h | 1 + 2 files changed, 23 insertions(+), 5 deletions(-) commit 8b5c6b243854d8c854a521b16d67e3bb05a4874a Author: Olli Salli Date: Tue Sep 7 17:52:39 2010 +0300 Doxyment ChannelFactory TelepathyQt4/channel-factory.cpp | 56 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) commit f62d7e3bb8b9bfe09936c71be8a81c8b3d9f9f68 Author: Olli Salli Date: Tue Sep 7 17:52:30 2010 +0300 Generate TODO lists in doxygen doxygen.cfg.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 7c7d11c0b8d9b0f0388edc8d7fc6294b9dd88014 Author: Olli Salli Date: Tue Sep 7 16:51:51 2010 +0300 Fix the ConnectionFactory doc group TelepathyQt4/connection-factory.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 32e344049c5dfbf0645ae3d4f67603782b564a8a Author: Olli Salli Date: Tue Sep 7 16:51:29 2010 +0300 Link up TELEPATHY_ACCOUNT_MANAGER_BUS_NAME from the AccountFactory docs TelepathyQt4/account-factory.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 9ab38ef100dcb7af23cb24a874ca1de9666c5884 Author: Olli Salli Date: Tue Sep 7 16:41:31 2010 +0300 Doxyment ConnectionFactory TelepathyQt4/account-factory.cpp | 2 + TelepathyQt4/connection-factory.cpp | 75 +++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) commit ef18b4effb7365e0eb062c0b42733bb95a149083 Author: Olli Salli Date: Tue Sep 7 16:26:35 2010 +0300 Doxyment AccountFactory::finalBusNameFrom() params TelepathyQt4/account-factory.cpp | 3 +++ 1 file changed, 3 insertions(+) commit 2dea95db3f0d73d9a04e285d3bd1d0182dc3a1fa Author: Olli Salli Date: Tue Sep 7 16:23:56 2010 +0300 Reorder AccountFactory::{construct,finalBusNameFrom} impls to be consistent with the header TelepathyQt4/account-factory.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) commit a65cc7f26a11c21313e192f3b528b8b223dc573b Author: Olli Salli Date: Tue Sep 7 16:18:57 2010 +0300 Doxyment AccountFactory TelepathyQt4/account-factory.cpp | 74 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) commit 6503e0b26e445e8f2485b260c014a7c471eb6809 Author: Olli Salli Date: Tue Sep 7 15:37:06 2010 +0300 Doxyment the "no features" case for DBusProxyFactory::featuresFor() better TelepathyQt4/dbus-proxy-factory.cpp | 6 ++++++ 1 file changed, 6 insertions(+) commit 8a6c02c16ec4b09cee8547ac7b804d7a42f332d3 Author: Olli Salli Date: Tue Sep 7 09:52:08 2010 +0300 Doxyment FixedFeatureFactory TelepathyQt4/fixed-feature-factory.cpp | 47 ++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) commit 0dfc77b84afd372f681ecb998834086dcc0f4220 Author: Olli Salli Date: Mon Sep 6 20:01:31 2010 +0300 Make Acc/ConnFact subclasses able to specify the actual proxy class to construct I forgot this after refactoring the factory classes, which is a bit absurd given the initial need for factories in the first place :O TelepathyQt4/account-factory.cpp | 9 ++++++++- TelepathyQt4/account-factory.h | 3 +++ TelepathyQt4/connection-factory.cpp | 8 +++++++- TelepathyQt4/connection-factory.h | 2 ++ 4 files changed, 20 insertions(+), 2 deletions(-) commit 78703b440da0d51ca99cbdd2332852d52478ab05 Author: Olli Salli Date: Mon Sep 6 18:19:29 2010 +0300 Change ChannelFactory::stockFreshFactory to create() and document it accordingly TelepathyQt4/account-manager.cpp | 4 ++-- TelepathyQt4/account-manager.h | 2 +- TelepathyQt4/account.cpp | 4 ++-- TelepathyQt4/account.h | 2 +- TelepathyQt4/channel-factory.cpp | 11 ++++++++++- TelepathyQt4/channel-factory.h | 5 +---- tests/dbus/account-connection-factory.cpp | 6 +++--- 7 files changed, 20 insertions(+), 14 deletions(-) commit 88f796a903ae7d5573fe475fbe4ca4bc64e63086 Author: Olli Salli Date: Mon Sep 6 18:19:06 2010 +0300 Eliminate code duplication in Account updateProperties and onConnectionBuilt TelepathyQt4/account.cpp | 92 +++++++++++++++++++--------------------------- 1 file changed, 37 insertions(+), 55 deletions(-) commit b967440c94a9d9f0b4b5f3ca35c0d0b84e9b9bc6 Author: Olli Salli Date: Mon Sep 6 17:47:39 2010 +0300 Remove trailing whitespace from a dbus-proxy-factory.cpp doc comment TelepathyQt4/dbus-proxy-factory.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 1ad07c128a91cf2ba3eeb0894ddf45530e192772 Author: Olli Salli Date: Mon Sep 6 17:45:13 2010 +0300 Doxyment Account(Manager) factory accessors TelepathyQt4/account-manager.cpp | 30 ++++++++++++++++++++++++++++++ TelepathyQt4/account.cpp | 20 ++++++++++++++++++++ 2 files changed, 50 insertions(+) commit 4fc1c08a7bb47b84f14917dda17b966d9bde51e2 Author: Olli Salli Date: Mon Sep 6 17:44:50 2010 +0300 Make Account ctors and create() fns consistent with how the AM ones are now TelepathyQt4/account-factory.cpp | 2 +- TelepathyQt4/account.cpp | 87 ++++++++++++++++++++++------- TelepathyQt4/account.h | 18 ++++-- tests/dbus/account-connection-factory.cpp | 12 ++-- 4 files changed, 85 insertions(+), 34 deletions(-) commit 52832c171e79028799501a7afbb69b019ad35fef Author: Olli Salli Date: Mon Sep 6 17:27:31 2010 +0300 Doxyment the factory behavior of the old AccountManager create() and ctor variants TelepathyQt4/account-manager.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) commit e8ef4ed909f0fa96ebfbc503e4f1c73a93241bee Author: Olli Salli Date: Mon Sep 6 17:19:33 2010 +0300 Make the order the factories are specified for AccountManager more logical vs. more convenient for common use-cases TelepathyQt4/account-manager.cpp | 94 ++++++++++++++++++++++++++++---------- TelepathyQt4/account-manager.h | 24 ++++++---- 2 files changed, 85 insertions(+), 33 deletions(-) commit 973bd2a03afb0e1f9e2717dc6a687e41ab748cb8 Author: Olli Salli Date: Mon Sep 6 16:58:55 2010 +0300 Make {Account,Connection}Factory ctors take a Features param TelepathyQt4/account-factory.cpp | 7 +++---- TelepathyQt4/account-factory.h | 2 +- TelepathyQt4/connection-factory.cpp | 9 +++------ TelepathyQt4/connection-factory.h | 2 +- 4 files changed, 8 insertions(+), 12 deletions(-) commit bbc3abaf6dae14f0c34c87913bb1575cae99b1ba Author: Olli Salli Date: Fri Sep 3 19:51:40 2010 +0300 Make the factory-created object classes not make their core ready automatically This is so that we can also have an "don't make it ready at all" option in factories instead of the current "make it ready even if I ask you not to, but don't tell me about doing so" behavior. TelepathyQt4/account.cpp | 1 - TelepathyQt4/channel.cpp | 1 - TelepathyQt4/connection.cpp | 2 -- 3 files changed, 4 deletions(-) commit 8fedec5b2f710e4826059b3f156aeb74c0fadec5 Author: Olli Salli Date: Fri Sep 3 20:34:24 2010 +0300 Make introspectable dependencies actually work (just in time for their 2nd birthday, *sigh*) TelepathyQt4/readiness-helper.cpp | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) commit 0fd06e501a74e7442858d78fcec4f2c3dd868bb7 Author: Olli Salli Date: Fri Sep 3 20:04:26 2010 +0300 Expand DBusProxyFactory documentation TelepathyQt4/dbus-proxy-factory.cpp | 35 +++++++++++++++++++++++++++++++++-- TelepathyQt4/dbus-proxy-factory.h | 2 +- 2 files changed, 34 insertions(+), 3 deletions(-) commit 0322a4d6b051ddd894903c995b53f7b71aa4dd50 Author: Olli Salli Date: Fri Sep 3 19:44:14 2010 +0300 Warn in DBusProxyFactory docs that prepare() is not currently really used TelepathyQt4/dbus-proxy-factory.cpp | 1 + 1 file changed, 1 insertion(+) commit 77bc2c30a9a90313684e5c83d84788d6cb4779b5 Author: Olli Salli Date: Fri Sep 3 19:36:26 2010 +0300 Remove the error-prone created param from DBusProxyFactory::nowHaveProxy TelepathyQt4/account-factory.cpp | 7 +++---- TelepathyQt4/channel-factory.cpp | 7 +++---- TelepathyQt4/connection-factory.cpp | 7 +++---- TelepathyQt4/dbus-proxy-factory-internal.h | 2 +- TelepathyQt4/dbus-proxy-factory.cpp | 26 +++++++++----------------- TelepathyQt4/dbus-proxy-factory.h | 2 +- 6 files changed, 20 insertions(+), 31 deletions(-) commit 7a00d7a568cbe0a95cf46beb5f9d5e049de9e097 Author: Olli Salli Date: Fri Sep 3 19:30:49 2010 +0300 Don't ever double-connect to proxy invalidated in DBusProxyFactory::cache TelepathyQt4/dbus-proxy-factory.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) commit 97c58208fb17429207d3eeb3397102b20e837ef8 Author: Olli Salli Date: Fri Sep 3 19:24:24 2010 +0300 Add basic docs for DBusProxyFactory TelepathyQt4/dbus-proxy-factory.cpp | 68 +++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) commit 2664f43f38ce1d141d4d117a167c23585706c0cf Author: Olli Salli Date: Fri Sep 3 18:33:35 2010 +0300 Add a test for Account connection factory code tests/dbus/Makefile.am | 5 + tests/dbus/account-connection-factory.cpp | 452 +++++++++++++++++++++++++++++ 2 files changed, 457 insertions(+) commit d54cf6e1084f5df136d316530980f68f76421ba8 Author: Olli Salli Date: Fri Sep 3 18:33:03 2010 +0300 Reorder AM factory getter implementations to be consistent with the header TelepathyQt4/account-manager.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit fc2c86938ab078eabd0556aac10e15ece480de8b Author: Olli Salli Date: Fri Sep 3 18:32:33 2010 +0300 Make it possible to specify {Connection,Channel}Factories for an Account TelepathyQt4/account-factory.cpp | 2 +- TelepathyQt4/account.cpp | 228 +++++++++++++++++++++++++++++++++----- TelepathyQt4/account.h | 16 +++ 3 files changed, 216 insertions(+), 30 deletions(-) commit 507c97e8671ccf7e849c6e7ffddbb571f348b2bb Author: Olli Salli Date: Fri Sep 3 18:21:09 2010 +0300 Allow DBusProxyFactory::Cache::put() to override an existing cache item If there is an item, but it has been invalidated in the same mainloop iteration (and consequently we yet haven't got the invalidation signal), we want to overwrite it with a new valid one. TelepathyQt4/dbus-proxy-factory.cpp | 2 -- 1 file changed, 2 deletions(-) commit c6b675e34c0605c87104c4dea9fe7aabf858acf7 Author: Olli Salli Date: Fri Sep 3 18:19:48 2010 +0300 Don't set the proxy as a parent for the DBusProxyFactory::proxy() PendingReadys Otherwise they'll blow up with double free madness in certain otherwise correct application code sequences. TelepathyQt4/dbus-proxy-factory.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit eb570459699001aa5d7cb75fecd7d071745cc575 Author: Olli Salli Date: Fri Sep 3 18:19:03 2010 +0300 Make {Account,Connection}Factory::create() have a features param TelepathyQt4/account-factory.cpp | 13 +++---------- TelepathyQt4/account-factory.h | 6 ++++-- TelepathyQt4/account-manager.cpp | 4 ++-- TelepathyQt4/account-manager.h | 2 +- TelepathyQt4/connection-factory.cpp | 9 +++++++-- TelepathyQt4/connection-factory.h | 4 +++- 6 files changed, 20 insertions(+), 18 deletions(-) commit b5279f152b91a961fdba1486159cc9121df0502e Author: Olli Salli Date: Fri Sep 3 12:18:52 2010 +0300 Actually implement AccountManager::*factory() accessors TelepathyQt4/account-manager.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) commit 0905810778b243853b8599403e4b7b79db3f4f3d Author: Olli Salli Date: Thu Sep 2 21:46:02 2010 +0300 Combine the AccountManager factory constructor variants TelepathyQt4/account-manager.cpp | 20 ++++++-------------- TelepathyQt4/account-manager.h | 14 ++++++-------- 2 files changed, 12 insertions(+), 22 deletions(-) commit 239b2f3e9024417d972de6df290fbf0e21f15fa8 Author: Olli Salli Date: Thu Sep 2 21:22:15 2010 +0300 Make AccountManager warn if the factories are for a different bus than the proxy itself TelepathyQt4/account-manager.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit d7b0d616dd060e6c4a59a0165aa38bafac64dd34 Author: Olli Salli Date: Thu Sep 2 21:11:34 2010 +0300 Make ChannelFactory::create private and deprecated (soon to be removed from internal use too) TelepathyQt4/channel-factory.h | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) commit f9127e11394590785fddbda4999dde3de4b4b168 Author: Olli Salli Date: Thu Sep 2 20:57:48 2010 +0300 Remove superfluous DBusProxyFactory forward-declaration from types.h TelepathyQt4/types.h | 1 - 1 file changed, 1 deletion(-) commit db187a3521829e6cdda204a5ddf25f6009e1c094 Author: Olli Salli Date: Thu Sep 2 20:48:13 2010 +0300 Split FixedFeature/Account/ConnectionFactory into their own source/header files TelepathyQt4/AccountFactory | 2 +- TelepathyQt4/ConnectionFactory | 2 +- TelepathyQt4/FixedFeatureFactory | 2 +- TelepathyQt4/Makefile.am | 6 ++ TelepathyQt4/account-factory.cpp | 70 +++++++++++++++++ TelepathyQt4/account-factory.h | 68 +++++++++++++++++ TelepathyQt4/connection-factory.cpp | 61 +++++++++++++++ TelepathyQt4/connection-factory.h | 71 ++++++++++++++++++ TelepathyQt4/dbus-proxy-factory-internal.h | 2 + TelepathyQt4/dbus-proxy-factory.cpp | 112 ---------------------------- TelepathyQt4/dbus-proxy-factory.h | 70 ----------------- TelepathyQt4/fixed-feature-factory.cpp | 66 ++++++++++++++++ TelepathyQt4/fixed-feature-factory.h | 65 ++++++++++++++++ 13 files changed, 412 insertions(+), 185 deletions(-) commit 77b318bb048e44184e2b8163af6e591ac027d4f1 Author: Olli Salli Date: Thu Sep 2 19:15:13 2010 +0300 Assert on the DBusProxyFactory dynamic_casts succeeding as appropriate TelepathyQt4/dbus-proxy-factory.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) commit 0804b3b53fb2093e99a1b76e0ff201f5a9c7e8df Author: Olli Salli Date: Thu Sep 2 19:07:40 2010 +0300 Remove extra indentation from DBusProxyFactory::Cache TelepathyQt4/dbus-proxy-factory-internal.h | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) commit 85b4d7b5f50f9479098427a89d7c4dcd040ce487 Author: Olli Salli Date: Thu Sep 2 19:05:22 2010 +0300 Substitute spaces for an accidental tab in TelepathyQt4/Makefile.am TelepathyQt4/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a1b9bff70750bc770c7e6b5e879970625a8f0990 Author: Olli Salli Date: Thu Sep 2 19:02:14 2010 +0300 Reorder create methods/ctors/dtors in DBusProxyFactory etc to be consistent with the rest of the lib TelepathyQt4/channel-factory.cpp | 16 +++++----- TelepathyQt4/channel-factory.h | 4 +-- TelepathyQt4/dbus-proxy-factory.cpp | 60 +++++++++++++++++------------------ TelepathyQt4/dbus-proxy-factory.h | 8 ++--- 4 files changed, 44 insertions(+), 44 deletions(-) commit c2d69fb4134f3e73de0ebbdabef4d6cedab5e1a8 Author: Olli Salli Date: Thu Sep 2 18:45:46 2010 +0300 Reorder FixedFeatureFactory::features() to be before the corresponding add* functions TelepathyQt4/dbus-proxy-factory.cpp | 10 +++++----- TelepathyQt4/dbus-proxy-factory.h | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) commit 85b693df1d8de3feb1360dd1bd597dc7ee5db774 Author: Olli Salli Date: Thu Sep 2 18:43:17 2010 +0300 Removed "get" from DBusProxyFactory (and its subclasses) method names TelepathyQt4/account-manager.cpp | 2 +- TelepathyQt4/channel-factory.cpp | 4 ++-- TelepathyQt4/channel-factory.h | 2 +- TelepathyQt4/dbus-proxy-factory.cpp | 10 +++++----- TelepathyQt4/dbus-proxy-factory.h | 6 +++--- 5 files changed, 12 insertions(+), 12 deletions(-) commit bd9356a66349c3f8f7223f5701ae11b54de3290c Author: Olli Salli Date: Thu Sep 2 18:33:03 2010 +0300 Add missing blank line after namespace begin in dbus-proxy-factory.cpp TelepathyQt4/dbus-proxy-factory.cpp | 1 + 1 file changed, 1 insertion(+) commit 26bb3ed2168fbb596d0bea16a29d9210f272c5ec Author: Olli Salli Date: Thu Sep 2 18:32:42 2010 +0300 Fix typo I introduced in SharedPtr docs TelepathyQt4/shared-ptr.dox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 3688f4e8d4531d32b9138a435916697a36f2014a Author: Olli Salli Date: Mon Aug 30 15:43:42 2010 +0300 Make it possible to specific Account(and other) factories to use on a AccountManager TelepathyQt4/account-manager.cpp | 74 +++++++++++++++++++++++++++++++++----- TelepathyQt4/account-manager.h | 23 ++++++++++++ 2 files changed, 88 insertions(+), 9 deletions(-) commit c4b59e4c69ee87b2cd2969fbdd60196b700d895b Author: Olli Salli Date: Mon Aug 30 15:42:51 2010 +0300 Make PendingReady able to hold a ref to the proxy it's making ready Otherwise we'd need to return a pair from factories. TelepathyQt4/dbus-proxy-factory.cpp | 20 +++++++++----------- TelepathyQt4/pending-ready.cpp | 19 +++++++++++++------ TelepathyQt4/pending-ready.h | 7 +++++-- 3 files changed, 27 insertions(+), 19 deletions(-) commit f598cdc80994cd91ed0b63d1b24f2f18e3bbf9ca Author: Olli Salli Date: Mon Aug 30 15:12:40 2010 +0300 Add const variants for RefCounted::ref() & deref() so that pointer-to-const can be used TelepathyQt4/shared-ptr.h | 5 +++++ TelepathyQt4/types.h | 2 ++ 2 files changed, 7 insertions(+) commit 1310bb41dc6e6d8a7d1b73f8383b5b26ccc94617 Author: Olli Salli Date: Mon Aug 30 14:29:09 2010 +0300 Make ChannelFactory a (still a stub placeholder) DBusProxyFactory TelepathyQt4/ChannelFactory | 13 +++++++++++++ TelepathyQt4/Makefile.am | 2 ++ TelepathyQt4/channel-factory.cpp | 37 +++++++++++++++++++++++++++++++++++++ TelepathyQt4/channel-factory.h | 33 +++++++++++++++++++++++++++++++-- 4 files changed, 83 insertions(+), 2 deletions(-) commit 843b69b01d6f86392db53e23971c2c290b3d2717 Author: Olli Salli Date: Mon Aug 30 14:26:20 2010 +0300 Refactor DBusProxyFactory a bit to make it more saner for ChannelFactory TelepathyQt4/FixedFeatureFactory | 13 +++ TelepathyQt4/dbus-proxy-factory.cpp | 171 ++++++++++++++++++----------------- TelepathyQt4/dbus-proxy-factory.h | 111 +++++++++++++---------- TelepathyQt4/types.h | 3 + 4 files changed, 168 insertions(+), 130 deletions(-) commit 1eac380827cdfd4e9304cbc3760afbe9b48d6750 Author: Olli Salli Date: Sun Aug 29 23:58:51 2010 +0300 Use the SharedPtr upcasting constructor everywhere TelepathyQt4/channel-factory.cpp | 30 ++++++++++-------------------- TelepathyQt4/client-registrar.cpp | 5 ++--- TelepathyQt4/dbus-proxy-factory.cpp | 19 +++++++++++++++---- TelepathyQt4/dbus-proxy-factory.h | 5 +++++ 4 files changed, 32 insertions(+), 27 deletions(-) commit db1ae546b8b1a64cce0015f87a5aab714cb59871 Author: Olli Salli Date: Sun Aug 29 21:39:55 2010 +0300 Add AccountFactory::coreFactory corresponding to the old default AM behavior TelepathyQt4/dbus-proxy-factory.cpp | 9 +++++++++ TelepathyQt4/dbus-proxy-factory.h | 1 + 2 files changed, 10 insertions(+) commit b0205d9a4cc3c18ef2cb529eda65f79be1266718 Author: Olli Salli Date: Sun Aug 29 21:33:32 2010 +0300 Make {Account,Connection}Factory more proper RefCounteds TelepathyQt4/dbus-proxy-factory.cpp | 22 ++++++++++++++++------ TelepathyQt4/dbus-proxy-factory.h | 15 +++++++++++---- TelepathyQt4/types.h | 5 +++++ 3 files changed, 32 insertions(+), 10 deletions(-) commit 49a13008664bb50af3ae5ad45d5709ceff0451aa Author: Olli Salli Date: Sun Aug 29 21:13:40 2010 +0300 Future-proof {Account,Connection}Factory a bit with a currently unused mPriv TelepathyQt4/dbus-proxy-factory.h | 8 ++++++++ 1 file changed, 8 insertions(+) commit 70ec2dfa134829fc6ebdd2d5ddd64476975b2918 Author: Olli Salli Date: Sun Aug 29 11:11:02 2010 +0300 Export the DBusProxyFactory public classes TelepathyQt4/dbus-proxy-factory.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit fad0fdff48ed42ca47440f7203e1da7629722cfe Author: Olli Salli Date: Sun Aug 29 11:07:01 2010 +0300 Add {Account,Connection}Factory TelepathyQt4/AccountFactory | 13 ++++++++++ TelepathyQt4/ConnectionFactory | 13 ++++++++++ TelepathyQt4/Makefile.am | 2 ++ TelepathyQt4/dbus-proxy-factory.cpp | 48 +++++++++++++++++++++++++++++++++++ TelepathyQt4/dbus-proxy-factory.h | 28 ++++++++++++++++++++ 5 files changed, 104 insertions(+) commit 6a7f9ce2d7afd5a31d22af05fbc5e51df7695fc0 Author: Olli Salli Date: Sun Aug 29 11:06:24 2010 +0300 Add an upcasting ctor to SharedPtr TelepathyQt4/shared-ptr.h | 2 ++ 1 file changed, 2 insertions(+) commit 69a8fbdb4ca065685196f067154e3e3ad132ce99 Author: Olli Salli Date: Sun Aug 29 11:05:54 2010 +0300 Add StatefulDBusProxy::uniqueNameFrom() TelepathyQt4/dbus-proxy.cpp | 47 ++++++++++++++++++++++++++++++++----------- TelepathyQt4/dbus-proxy.h | 4 ++++ 2 files changed, 39 insertions(+), 12 deletions(-) commit 719e472e42d208174fbba2df4d4d9f212f2f1483 Author: Olli Salli Date: Sun Aug 29 10:12:26 2010 +0300 Add DBusProxyFactory::bus() TelepathyQt4/dbus-proxy-factory.cpp | 7 ++++++- TelepathyQt4/dbus-proxy-factory.h | 7 +++++-- 2 files changed, 11 insertions(+), 3 deletions(-) commit 0afaec7bbcb971d462c6200221916220ad136ac9 Author: Olli Salli Date: Sat Aug 28 10:20:18 2010 +0300 Implement DBusProxyFactory::getProxy() TelepathyQt4/dbus-proxy-factory.cpp | 73 +++++++++++++++++++++++++++-------- TelepathyQt4/dbus-proxy-factory.h | 8 +++- TelepathyQt4/pending-ready.cpp | 67 ++++++++++++++++++++++++++++++++ TelepathyQt4/pending-ready.h | 7 ++++ 4 files changed, 137 insertions(+), 18 deletions(-) commit e35e53653253473acb1fe4e20dbf319790d4006d Author: Olli Salli Date: Fri Aug 27 21:09:53 2010 +0300 Add the cache to DBusProxyFactory TelepathyQt4/Makefile.am | 2 + TelepathyQt4/dbus-proxy-factory-internal.h | 56 +++++++++++++++++++++++++++ TelepathyQt4/dbus-proxy-factory.cpp | 58 ++++++++++++++++++++++++++-- TelepathyQt4/dbus-proxy-factory.h | 2 + 4 files changed, 114 insertions(+), 4 deletions(-) commit f4f137bd50de33576ad550b6610de8c92953d5b2 Author: Olli Salli Date: Fri Aug 27 18:42:36 2010 +0300 Add a DBusProxyFactory base-class stub TelepathyQt4/DBusProxyFactory | 13 +++++ TelepathyQt4/Makefile.am | 3 ++ TelepathyQt4/dbus-proxy-factory.cpp | 93 +++++++++++++++++++++++++++++++++++ TelepathyQt4/dbus-proxy-factory.h | 82 ++++++++++++++++++++++++++++++ 4 files changed, 191 insertions(+) commit 8254ce81637b1e0e3c261ce53bd6505cfaddf57a Author: Olli Salli Date: Fri Aug 27 17:48:59 2010 +0300 Use SharedPtr::qObjectCast for all pointer to QObject casts examples/file-transfer/sender.cpp | 2 +- tests/dbus/streamed-media-chan-call.cpp | 2 +- tests/dbus/streamed-media-chan.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) commit 621207d5b70c7eaf2d368b39df1c1d18c4034d1f Author: Olli Salli Date: Fri Aug 27 17:48:00 2010 +0300 Add SharedPtr::qObjectCast Using dynamic_cast for QObject types is sub-optimal. TelepathyQt4/shared-ptr.dox | 33 +++++++++++++++++++++++++++++++++ TelepathyQt4/shared-ptr.h | 6 ++++++ 2 files changed, 39 insertions(+) commit 3785c0847c0ca15605e90b0d881e72760d1f1b88 Author: Will Thompson Date: Thu Sep 9 11:38:34 2010 +0100 Add a presencePublicationRequested variant with details This is needed to get attributes like the message associated with the request. TelepathyQt4/contact-manager.cpp | 2 ++ TelepathyQt4/contact-manager.h | 2 ++ 2 files changed, 4 insertions(+) commit 6738c4a02aba136fdd565412dc05323aeb371e1e Merge: be41ef4 73cdd2a Author: Xavier Claessens Date: Wed Sep 8 13:44:40 2010 +0200 Merge branch 'avatar-cache' Reviewed-by: Andre Moreira Magalhaes (andrunko) commit 73cdd2a97f78508cb333356adef04f9761f6b3ad Author: Xavier Claessens Date: Wed Sep 8 13:44:15 2010 +0200 Add NEWS entry for the avatar cache NEWS | 2 ++ 1 file changed, 2 insertions(+) commit 6067257046c6ec5cd4345ba232b41c1934b32334 Author: Xavier Claessens Date: Wed Sep 8 13:35:19 2010 +0200 Fix QString usage TelepathyQt4/contact-manager.cpp | 12 ++++++------ tests/dbus/contacts-avatar.cpp | 20 +++++++++----------- 2 files changed, 15 insertions(+), 17 deletions(-) commit 8197e3a2d922dc748c4d56bbb80e958871d00e54 Author: Xavier Claessens Date: Wed Sep 8 10:51:35 2010 +0200 Fix various coding styles TelepathyQt4/contact-manager.cpp | 11 ++++---- tests/dbus/contacts-avatar.cpp | 52 +++++++++++++++++++------------------- 2 files changed, 31 insertions(+), 32 deletions(-) commit 62c8e43bcb1bfff964f928081ad0a34de11f9820 Author: Xavier Claessens Date: Wed Sep 8 10:08:22 2010 +0200 Avoid possible infinite loop in tests tests/dbus/contacts-avatar.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) commit c1336528284cb7a4f8812ed7a8e473c0f2f0b190 Author: Xavier Claessens Date: Tue Sep 7 16:15:40 2010 +0200 Fix review comments TelepathyQt4/contact-manager.cpp | 15 +++++++++++---- TelepathyQt4/contact.cpp | 4 ++-- 2 files changed, 13 insertions(+), 6 deletions(-) commit d9e7f7e034ddcd6c60b1b31bb1e5bbc49598357e Author: Xavier Claessens Date: Tue Sep 7 13:47:20 2010 +0200 Add unit tests for the avatar cache tests/dbus/Makefile.am | 5 + tests/dbus/contacts-avatar.cpp | 304 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 309 insertions(+) commit 1d40548a6248f238df577117dca71779b32e307e Author: Xavier Claessens Date: Tue Sep 7 13:46:33 2010 +0200 Implement FeatureAvatarData on Tp::Contact using an avatar cache TelepathyQt4/contact-manager.cpp | 137 ++++++++++++++++++++++++++++++++++++-- TelepathyQt4/contact-manager.h | 4 ++ TelepathyQt4/contact.cpp | 74 ++++++++++++++++++-- TelepathyQt4/contact.h | 5 ++ TelepathyQt4/types.h | 10 +++ 5 files changed, 216 insertions(+), 14 deletions(-) commit bc346e19780ff4d7dd45c62af366e32644dbff3d Author: Xavier Claessens Date: Tue Sep 7 13:46:16 2010 +0200 Add cmName() and protocolName() on Connection by parsing its object path TelepathyQt4/connection.cpp | 44 +++++++++++++++++++++++++++++++++++++++++++ TelepathyQt4/connection.h | 3 +++ 2 files changed, 47 insertions(+) commit 8e7aa0be072db38464d947566715992f079ab8ae Author: Xavier Claessens Date: Thu Sep 2 11:18:11 2010 +0200 Copy tp_escape_as_identifier from telepathy-glib .gitignore | 1 + TelepathyQt4/Makefile.am | 7 ++- TelepathyQt4/Utils | 13 ++++++ TelepathyQt4/utils.cpp | 116 ++++++++++++++++++++++++++++++++++++++++++++++ TelepathyQt4/utils.h | 39 ++++++++++++++++ tests/Makefile.am | 9 +++- tests/utils.cpp | 34 ++++++++++++++ 7 files changed, 215 insertions(+), 4 deletions(-) commit be41ef4d85d738e2e7bae9c21bbf23ee9dd91e58 Author: Senko Rasic Date: Mon Sep 6 16:09:34 2010 +0200 do-nothing test: use Q_SLOTS macro instead of slots keyword The keyword might be undefined tests/dbus/do-nothing.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 0685f73e9b29b58a2083ac02100753b8e14dc39f Author: Xavier Claessens Date: Thu Sep 2 11:17:23 2010 +0200 Fix build error, forgot to replace a "slots" to "Q_SLOTS" tests/dbus/do-nothing.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 8e00db655b75bc08f881ebc8b87c7f2764f640a1 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 1 14:02:28 2010 +0300 Updated NEWS with bug number for build error with glib 2.25. NEWS | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit b2b933cf4663d4bb06c701e9330c701c27fecabd Author: Xavier Claessens Date: Wed Sep 1 12:54:23 2010 +0200 Update NEWS NEWS | 2 ++ 1 file changed, 2 insertions(+) commit 42fbacd1af1d9282a4b3cac2c23f06c652cc3a92 Author: Xavier Claessens Date: Wed Sep 1 12:39:45 2010 +0200 Fix build with glib >= 2.25 With glib 2.25.x gio headers uses "signals" in a struct member. But qt does #define signals protecteed. That makes g++ fail to build files that use gio and qt together. configure.ac | 2 ++ examples/call/call-handler.cpp | 2 +- examples/call/call-widget.cpp | 4 ++-- examples/call/call-window.cpp | 2 +- examples/call/farsight-channel.cpp | 6 +++--- tests/dbus/account-basics.cpp | 4 ++-- tests/dbus/account-channel-dispatcher.cpp | 4 ++-- tests/dbus/chan-basics.cpp | 4 ++-- tests/dbus/chan-conference.cpp | 6 +++--- tests/dbus/chan-group.cpp | 12 ++++++------ tests/dbus/client.cpp | 6 +++--- tests/dbus/conn-basics.cpp | 2 +- tests/dbus/conn-roster-groups.cpp | 14 +++++++------- tests/dbus/conn-roster.cpp | 8 ++++---- tests/dbus/contacts-info.cpp | 2 +- tests/dbus/contacts.cpp | 2 +- tests/dbus/streamed-media-chan-call.cpp | 2 +- tests/dbus/streamed-media-chan.cpp | 2 +- 18 files changed, 43 insertions(+), 41 deletions(-) commit 89cfa04cb59831ddb0fdf296d5c4c78aa9390f71 Author: Olli Salli Date: Thu Aug 26 18:15:02 2010 +0300 TestConnBasics: Destroy the conn proxy at the end of each test so events don't leak tests/dbus/conn-basics.cpp | 2 ++ 1 file changed, 2 insertions(+) commit 0b1b54f22acada2db2224c853c2db7c623c19727 Author: Olli Salli Date: Thu Aug 26 16:50:46 2010 +0300 Updated NEWS NEWS | 4 ++++ 1 file changed, 4 insertions(+) commit 562965a27951b6110257e21600a5e70ab7f558ed Merge: 798182d 4a9eef4 Author: Olli Salli Date: Thu Aug 26 16:37:47 2010 +0300 Merge branch 'connection-error-details' Reviewed-by: Andre Magalhaes (andrunko) commit 4a9eef4e7d05a119e4a2fae0dfd1580f84772da6 Author: Olli Salli Date: Thu Aug 26 16:36:06 2010 +0300 Make Connection::ErrorDetails class doc comment more consistent with other classes TelepathyQt4/connection.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) commit 4e98b3ddad6b84ba3bb969bae80937217022de70 Author: Olli Salli Date: Thu Aug 26 16:35:44 2010 +0300 Remove old cruft from Connection class doc comment TelepathyQt4/connection.cpp | 8 -------- 1 file changed, 8 deletions(-) commit 29fbe920a4085ea703b69778ca2f5c37484d9a94 Author: Olli Salli Date: Thu Aug 26 16:29:42 2010 +0300 Missing braces in Connection::errorDetails() TelepathyQt4/connection.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 446ee353fbd11dca8794589615439b9ad5cdf794 Author: Olli Salli Date: Thu Aug 26 16:24:13 2010 +0300 Make Connection::ErrorDetails usable stand-alone to wrap old APIs TelepathyQt4/account.cpp | 12 ++++++++++-- TelepathyQt4/account.h | 1 + TelepathyQt4/connection.cpp | 17 ++++++++++++----- TelepathyQt4/connection.h | 3 +-- 4 files changed, 24 insertions(+), 9 deletions(-) commit 2ea7c5fc666d0ebf83b097ed8d3038707e0ae6a9 Author: Olli Salli Date: Thu Aug 26 15:36:16 2010 +0300 Deprecate Connection::statusChanged(status, reason) and add a new one without the reason param. The error name given in invalidated() should be the primary means of error handling, with the reason only used as a fallback if a client doesn't understand the error name, so we must make the API force the clients to use invalidated() as the only error handling -triggering signal as much as we can. TelepathyQt4/connection.cpp | 37 +++++++++++++++++++++++++++++++++++++ TelepathyQt4/connection.h | 3 ++- 2 files changed, 39 insertions(+), 1 deletion(-) commit c569c9be4ce1628acb0460aa5fcb86606823c86d Author: Olli Salli Date: Thu Aug 26 15:14:05 2010 +0300 Doxyment Connection::ErrorDetails TelepathyQt4/connection.cpp | 90 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 89 insertions(+), 1 deletion(-) commit 109383653f5a3d349af753a9c0a7cde9b5905290 Author: Olli Salli Date: Thu Aug 26 15:13:41 2010 +0300 Connection::ErrorDetails: Don't include the draft TLS keys just yet TelepathyQt4/connection.h | 6 ++++++ tests/dbus/conn-basics.cpp | 3 +++ 2 files changed, 9 insertions(+) commit 40d308a1fe54bb23f8006ccb453490480495a523 Author: Olli Salli Date: Thu Aug 26 14:55:52 2010 +0300 Test Connection::errorDetails() tests/dbus/conn-basics.cpp | 50 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 39 insertions(+), 11 deletions(-) commit 75773edabe60db8344906c752f251b09c8a14249 Author: Olli Salli Date: Thu Aug 26 14:55:32 2010 +0300 Add Connection::errorDetails() TelepathyQt4/connection.cpp | 52 ++++++++++++++++++++++++++++++++++++++++ TelepathyQt4/connection.h | 55 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 107 insertions(+) commit 798182ddc33d8fc6f1887b7e0087cb82e2a06a8d Merge: 4afd025 2777344 Author: Olli Salli Date: Thu Aug 26 00:34:56 2010 +0300 Merge branch 'oneliner-braces' Reviewed-by: Andre Magalhaes (andrunko) commit 2777344035b666a24b0ab6f18b5b46d3b8c0674d Author: Olli Salli Date: Thu Aug 26 00:27:24 2010 +0300 Make sure all if/for/while/else bodies have {}, even oneliners TelepathyQt4/account.cpp | 5 +++-- TelepathyQt4/channel.cpp | 15 ++++++++++----- TelepathyQt4/connection-manager.cpp | 3 ++- TelepathyQt4/debug.cpp | 10 ++++++---- TelepathyQt4/manager-file.cpp | 22 ++++++++++++---------- tests/dbus/account-channel-dispatcher.cpp | 10 ++++++---- tests/dbus/conn-roster-groups.cpp | 6 ++++-- tests/dbus/conn-roster.cpp | 3 ++- tests/dbus/streamed-media-chan-call.cpp | 9 ++++++--- tests/dbus/streamed-media-chan.cpp | 13 +++++++++---- 10 files changed, 60 insertions(+), 36 deletions(-) commit 4afd0257b1d26cb64d5dc3c4478a1fbd16807611 Author: Olli Salli Date: Thu Aug 26 00:02:06 2010 +0300 Updated NEWS NEWS | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) commit 854ee0caa1fafff794cfd6ce6a7911aed9ef0bdd Merge: a6b59c3 139f992 Author: Olli Salli Date: Wed Aug 25 23:50:19 2010 +0300 Merge remote branch 'oggis/channel' Reviewed-by: Andre Magalhaes (andrunko) commit 139f992c494ed9ab7d02026c94e5f951541c90b0 Author: Olli Salli Date: Wed Aug 25 23:48:06 2010 +0300 Properly transfer the PendingChannel fallbacks to actual Channel variables TelepathyQt4/channel.cpp | 5 +++++ 1 file changed, 5 insertions(+) commit 51addbeaf83f83f098cc6e6cde37534f1016d00c Author: Olli Salli Date: Wed Aug 25 22:39:50 2010 +0300 Channel:: Refactor the onMC / onMCD code a bit to be cleaner TelepathyQt4/channel.cpp | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) commit 751a9f1fb476c8fc22e9e7c85b37f52ada9ebad4 Author: Olli Salli Date: Wed Aug 25 20:40:11 2010 +0300 TestChanGroup: test an actual membership change for the MCD tests tests/dbus/chan-group.cpp | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) commit d55a61a94a55bd5b572ec6ea51c235e0fa2e899b Author: Olli Salli Date: Wed Aug 25 20:35:37 2010 +0300 Make Channel::groupSelfContact() always have some non-NULL contact if ready This has the side effect of making emitting groupMembersChanged with people only in the removed set work (again, I hope) even if the local user is not a member of the group. Actually... that bug has probably made contact list groups totally suck, with them never reporting removed members! (We of course usually aren't a member on the list of our contact groups, unless we consider extremely lonely users the norm). TelepathyQt4/channel.cpp | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) commit c6ff8172515aac6a92cef63a6a69e215aa9af75c Author: Olli Salli Date: Wed Aug 25 18:53:51 2010 +0300 TestChanGroup: Test a group which has no spec 0.17.6 Group properties tests/dbus/chan-group.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) commit 81e900527c5c1e52d8f35ab8a81169d4ee6792c8 Author: Olli Salli Date: Wed Aug 25 18:28:05 2010 +0300 Test Channel with a MCD-enabled service as well tests/dbus/chan-group.cpp | 63 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) commit 2e6e9d8b9a254e36b2bc0681f0827f32b47e648c Author: Olli Salli Date: Wed Aug 25 18:27:03 2010 +0300 Add fallbacks for services missing Channel.{Requested,InitiatorHandle} TelepathyQt4/channel.cpp | 14 ++++++++++---- TelepathyQt4/pending-channel.cpp | 29 +++++++++++++++++++++++++++-- 2 files changed, 37 insertions(+), 6 deletions(-) commit 820cad80d6a5c7a3747614011d0a377d3c700833 Author: Olli Salli Date: Wed Aug 25 14:26:16 2010 +0300 Updated NEWS NEWS | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 3b0d93b5c51d6623c536d09d723bddc601464798 Author: Olli Salli Date: Wed Aug 25 13:32:56 2010 +0300 Fix a race condition where Channel could in rare cases miss a MembersChangedDetailed signal TelepathyQt4/channel.cpp | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) commit 2c4f14c22053cc4d969a014459eaead117d57475 Author: Olli Salli Date: Wed Aug 25 13:20:56 2010 +0300 Make Channel debug slightly cleaner Now the Channel is identified by the object path in some of the debug, and some redundant ones are removed. TelepathyQt4/channel.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit a6b59c355c80622c468068f312f63376edce1378 Author: Olli Salli Date: Wed Aug 25 12:50:51 2010 +0300 Updated NEWS NEWS | 6 ++++++ 1 file changed, 6 insertions(+) commit d9ee5edc57f4b9d3bd645c74f3a8599fcd33f25c Author: Olli Salli Date: Wed Aug 25 12:48:31 2010 +0300 Move the NEWS set tw=80 out of the way to the EOF NEWS | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 0a4fc5836ab66508b916615589c1e551da05ca9f Author: Olli Salli Date: Wed Aug 25 12:37:23 2010 +0300 Reformat NEWS with tw=80 so it better suits sending by mail NEWS | 55 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 27 deletions(-) commit 14c4182020954589d195fdbec73a009aa250e043 Author: Olli Salli Date: Wed Aug 25 12:17:00 2010 +0300 TestConnRosterGroups: make sure the conn invalidation from the 1st case doesn't leak to the 2nd tests/dbus/conn-roster-groups.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit af93fff8f448007efd774646e1e92ee2cb1fa0f4 Author: Olli Salli Date: Wed Aug 25 12:16:23 2010 +0300 TestConnRosterGroup: Remove duplicate simulation delay arg from test service constructor call tests/dbus/conn-roster-groups.cpp | 1 - 1 file changed, 1 deletion(-) commit 4a7c125cbb0d737b7f62cf07f4a3e7a4c287ba54 Author: Olli Salli Date: Tue Aug 24 21:30:35 2010 +0300 Bump nano version (now 0.3.8.1) configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit cf0483529c14b29e12f8f58df2330ba5ab3039cd Author: Olli Salli Date: Tue Aug 24 21:07:14 2010 +0300 REALLY prepare release 0.3.8 - previously i didn't increment the libtool revision configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 28e4b5acf028069e0efb7c367595cc3256150d19 Author: Olli Salli Date: Tue Aug 24 20:01:30 2010 +0300 Prepare release 0.3.8 NEWS | 2 +- configure.ac | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) commit 618b7bea9e0aa8a4c28a80fe98aa34df6d558593 Author: Olli Salli Date: Tue Aug 24 20:33:21 2010 +0300 Updated NEWS NEWS | 2 ++ 1 file changed, 2 insertions(+) commit dbec2abc9b39dd074043bb20b633f11597eb6ba8 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Aug 24 20:27:31 2010 +0300 ChannelRequest: Assert if extractMainProps is called more than once. TelepathyQt4/channel-request.cpp | 2 ++ 1 file changed, 2 insertions(+) commit 549d6ad4cf8c3ff38c7ca7e7e3364eadc1e93fa1 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Aug 24 20:22:15 2010 +0300 ChannelRequest: Removed duplicated call to setInterfaces. TelepathyQt4/channel-request.cpp | 2 -- 1 file changed, 2 deletions(-) commit 479e921ed0bf62a1a8b97bc0174594a9e93b0534 Author: Olli Salli Date: Tue Aug 24 19:59:10 2010 +0300 Updated NEWS NEWS | 1 + 1 file changed, 1 insertion(+) commit 3a63917e79b3727a1d89e79b3a93efa34885cbac Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 22 18:36:44 2010 -0300 Account: Only parse connection object path on ::connection when needed. TelepathyQt4/account.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit 651ce3e34d5dea28ef0578642a5552830de1ab55 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Aug 24 20:08:29 2010 +0300 ChannelRequest: Delete watcher once we are done with it. TelepathyQt4/channel-request.cpp | 2 ++ 1 file changed, 2 insertions(+) commit 5cd2141e525995dd0295c180906d06c0f990e5f7 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Aug 24 20:04:10 2010 +0300 ChannelRequest: Properly use immutable properties. TelepathyQt4/channel-request.cpp | 87 ++++++++++++++++++++++++-------------- 1 file changed, 56 insertions(+), 31 deletions(-) commit b4fde95b21e2220fc4cc6c0ce41f1dd866b2497f Author: Olli Salli Date: Tue Aug 24 19:46:06 2010 +0300 Update NEWS NEWS | 1 + 1 file changed, 1 insertion(+) commit 883813a88b5d9fc0567c316c813f087032966098 Author: Olli Salli Date: Tue Aug 24 19:32:56 2010 +0300 Update the future/call test service CM from tp-glib This adds the usual "Interfaces" property to the media stream and content objects on the CM. tests/lib/glib/future/call/call-content.c | 13 +++++++++++++ tests/lib/glib/future/call/call-stream.c | 13 +++++++++++++ 2 files changed, 26 insertions(+) commit e7e20030d5db7ab4315394bb9871cc2bb916ae86 Author: Olli Salli Date: Tue Aug 24 18:06:51 2010 +0300 Pull in XML from spec 0.19.11 spec/Authentication_TLS_Certificate.xml | 304 ++++++++++++++++++++++ spec/Call_Content.xml | 13 + spec/Call_Stream.xml | 11 + spec/Channel_Interface_Call_State.xml | 14 + spec/Channel_Interface_Room.xml | 373 +++++++++++++++++++++++++++ spec/Channel_Type_Room_List.xml | 17 +- spec/Channel_Type_Server_TLS_Connection.xml | 60 +++++ spec/Channel_Type_Text.xml | 14 +- spec/Connection.xml | 44 +++- spec/Connection_Interface_Client_Types.xml | 203 +++++++++++++++ spec/Protocol.xml | 65 ++++- spec/all.xml | 16 +- spec/errors.xml | 72 +++++- 13 files changed, 1182 insertions(+), 24 deletions(-) commit 6f7402e4cd5ce8419b0fa692711518318bd414a9 Author: Olli Salli Date: Tue Aug 24 16:28:24 2010 +0300 Update NEWS NEWS | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 74d3ae16cb90b166b3ef2b7e6acac09a0fc7a6c1 Author: Olli Salli Date: Tue Aug 24 15:44:57 2010 +0300 Settle some already fixed FIXMEs in Connection TelepathyQt4/connection.cpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) commit d37dcd1ab0570c4ddce3370e8f7521a314dbb1d1 Author: Olli Salli Date: Tue Aug 24 15:31:27 2010 +0300 Bring Connection test coverage up a bit (now 75.2% of lines) TelepathyQt4/connection.h | 2 +- tests/dbus/conn-basics.cpp | 68 +++++++++++++++++++++++++++++++++++++------- 2 files changed, 59 insertions(+), 11 deletions(-) commit 12f08d18dd7a66c9e8e2e85dc37eaa558e3cc5d9 Author: Olli Salli Date: Tue Aug 24 13:41:51 2010 +0300 Remove useless ensuring the props iface is there in Conn::P::introspectSimplePresence() TelepathyQt4/connection.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) commit 41ff3726c678a5f4c66f730a02cb57f93fd3c072 Author: Olli Salli Date: Tue Aug 24 13:37:53 2010 +0300 Test that connection->capabilities() isn't a death-trap tests/dbus/conn-capabilities.cpp | 50 +++++++++++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 3 deletions(-) commit 2595a722e60343860d4f9b6ef3cddbf956606782 Author: Olli Salli Date: Tue Aug 24 13:31:11 2010 +0300 Make Connection::capabilities() less of a death-trap similarly to ::contactManager() TelepathyQt4/connection.cpp | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) commit ac75a467a430eba80391cdcb8c2fdd238da354e5 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 30 03:37:44 2010 -0300 chan-conference test: Reset channels when finished to avoid channels trying to make a destroyed connection ready. tests/dbus/chan-conference.cpp | 3 +++ 1 file changed, 3 insertions(+) commit 70445aeed7e6d08112ecf9d6948e125107d8accf Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 30 03:32:37 2010 -0300 Connection: General improvement and add support to retrieve properties using GetAll. - Reorder methods by features (maintainance++) - Use GetAll to retrieve properties and fallback to GetInterfaces/Status/SelfHandle when needed. - Improved logic to run FeatureCore introspection using an introspection queue. TelepathyQt4/connection.cpp | 514 +++++++++++++++++++++++++++---------------- TelepathyQt4/connection.h | 23 +- 2 files changed, 331 insertions(+), 206 deletions(-) commit 87031ff484c6350982551f384e0a193f68573648 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 30 03:29:49 2010 -0300 ReadinessHelper: Added method to force introspection status without re-running the introspection process. This method will be used by connection to avoid re-run introspection when the status is retrieved for the first time. TelepathyQt4/readiness-helper.cpp | 21 +++++++++++++++++++++ TelepathyQt4/readiness-helper.h | 1 + 2 files changed, 22 insertions(+) commit 66a75efba8437d33c17779789b2c29adbdc162c6 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 30 03:28:48 2010 -0300 OptionalInterfaceFactory: Added helper methods to check if an interface is present. TelepathyQt4/optional-interface-factory.h | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 400eef679e75071298d55241c4be8dad162f05c5 Author: Olli Salli Date: Tue Aug 24 11:21:28 2010 +0300 Remove tabs I just introduced to Account::icon(Name)() NEWS | 53 +++++++++++++++++++++++----------------------- TelepathyQt4/account.cpp | 14 ++++++------ 2 files changed, 34 insertions(+), 33 deletions(-) commit 126667117d2551b6c775fdb0e753b318e7e33c13 Author: Olli Salli Date: Tue Aug 24 01:30:19 2010 +0300 Don't make up a bogus feature fail reason if the CM initial introspection GetAll fails It used to say "don't support pre-getall CMs currently" but actually we never will support those, and I believe that nobody actually attempts using such CMs nowadays, hence hitting that condition most often actually means the CM is not there / is broken. TelepathyQt4/connection-manager.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) commit d0e477bcdbf4027c79ab64d7842ab981018b36ac Author: Olli Salli Date: Tue Aug 24 01:15:09 2010 +0300 Yet another TestStreamedMediaChanCall race fix... This is a previously identified one actually but the fix wasn't sufficient in all cases. The new one should be. tests/dbus/streamed-media-chan-call.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit 2662a72de9650dd46704c6b98ed5c1fda30bf44a Author: Olli Salli Date: Tue Aug 24 01:00:25 2010 +0300 Test that Account::iconName() always returns a sensible non-empty value tests/dbus/account-basics.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) commit 1f251264c02bf0a67d784b1c1ec8bf704bb80d9e Author: Olli Salli Date: Tue Aug 24 00:59:58 2010 +0300 Implement the Account::icon() improvement to Account::iconName() too TelepathyQt4/account.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) commit 586e5caaa1f1f7d45fd3c7d81b54e4067cd9a48d Author: Olli Salli Date: Tue Aug 24 00:24:43 2010 +0300 Add test for protocol introspection on a legacy CM without Protocol objects support tests/dbus/cm-basics.cpp | 82 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) commit 6f5aed42ffae79e917c761756e64eefce509af65 Author: Olli Salli Date: Tue Aug 24 00:24:24 2010 +0300 Extend CM test coverage tests/dbus/cm-basics.cpp | 85 ++++++++++++++++++++++++++-------------------- 1 file changed, 48 insertions(+), 37 deletions(-) commit a1edc9537ab98c5f3985830732aa8f6239408520 Author: Olli Salli Date: Tue Aug 24 00:23:30 2010 +0300 Make CM::protocolInfo()->capabilities() claim support for everything for legacy CMs TelepathyQt4/connection-manager-internal.h | 1 + TelepathyQt4/connection-manager.cpp | 66 +++++++++++++++++++++++++++- 2 files changed, 66 insertions(+), 1 deletion(-) commit 2a887f2e20497f18d8c68670d73c0ce57dedd0f8 Author: Olli Salli Date: Tue Aug 24 00:22:48 2010 +0300 Make ConnectionManager Protocol introspection use the immutable properties map TelepathyQt4/connection-manager-internal.h | 5 +- TelepathyQt4/connection-manager.cpp | 100 +++++++++++++++++++--------- 2 files changed, 71 insertions(+), 34 deletions(-) commit 945086369ae253695b5dcf049072ecff6b163a26 Author: Olli Salli Date: Mon Aug 23 22:38:01 2010 +0300 If the Account Icon is not set, return the icon from the protocol, if available, and im- otherwise TelepathyQt4/account.cpp | 7 +++++++ 1 file changed, 7 insertions(+) commit 1fe947902babe05562a6b04205a68ae76d56c179 Author: Olli Salli Date: Mon Aug 23 22:11:50 2010 +0300 Invalidate the CM if it can't answer to GetAll properly instead of just never finishing TelepathyQt4/connection-manager.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit ee6766689149664360f50e32f6311bf2bc705f83 Author: Olli Salli Date: Mon Aug 23 22:10:55 2010 +0300 Remove tabs inserted by a stupid vim user (me) TelepathyQt4/connection-manager.cpp | 8 ++++---- TelepathyQt4/manager-file.cpp | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) commit fa5d580c45e5053733506961ef758edf4b747046 Author: Olli Salli Date: Mon Aug 23 21:12:30 2010 +0300 Document that ProtocolInfo returned by the public API shouldn't be deleted TelepathyQt4/account.cpp | 3 +++ TelepathyQt4/connection-manager.cpp | 3 +++ 2 files changed, 6 insertions(+) commit 9e9bb4960ae2e6c0b94b175f5f775f44487b8b50 Author: Olli Salli Date: Mon Aug 23 21:09:20 2010 +0300 Implement a more useful fallback for {ProtocolInfo,ManagerFile}::englishName() TelepathyQt4/connection-manager.cpp | 26 ++++++++++++++++++-------- TelepathyQt4/manager-file.cpp | 25 ++++++++++++++++--------- 2 files changed, 34 insertions(+), 17 deletions(-) commit f60c0382aa8ba6f408d9351b4d9730db40bbfd78 Author: Olli Salli Date: Mon Aug 23 20:22:15 2010 +0300 Fix yet one more race in TestStreamedMediaChan... tests/dbus/streamed-media-chan.cpp | 41 ++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) commit 4201cf7e6b5de61c09813b4b63044260ba592039 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Aug 16 13:18:01 2010 -0300 Make sure we build with QT_NO_CAST_FROM_ASCII enabled. TelepathyQt4/connection-manager.cpp | 4 ++-- TelepathyQt4/manager-file.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit 347d9558b30d61fe10d70f90a007ca50c785d295 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Aug 16 13:11:25 2010 -0300 ConnectionManager: Added protocol name for warning when protocol failed introspection. TelepathyQt4/connection-manager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 201f37bf37da4c39f24a07c741f83166cd68c737 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Aug 16 13:11:02 2010 -0300 ConnectionManager: Improved documentation for ProtocolInfo::vcardField. TelepathyQt4/connection-manager.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) commit 7ad48b020e265165117e8d36fb915da24c46ddb3 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Aug 16 13:10:29 2010 -0300 ConnectionManager: Always return non-empty ProtocolInfo::englishName and iconName strings. Build strings for english name and icon name if absent using im-protocol for icon name and protocol for english name. TelepathyQt4/connection-manager.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) commit eebd50919824dd13e87614cfea201ab44bf2e94e Author: Andre Moreira Magalhaes (andrunko) Date: Mon Aug 16 13:09:10 2010 -0300 ManagerFile: Always return non-empty englishName and iconName strings. Build strings for english name and icon name if absent using im-protocol for icon name and protocol for english name. TelepathyQt4/manager-file.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) commit ecc137c32cb7a0c223fd56bb800ec234cf98baf7 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Aug 4 01:09:27 2010 -0300 Bump tp-glib dependency to >= 0.11.11 configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b31cde039b85b4b13b322797255c4a9c3f70bb38 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Aug 4 01:08:48 2010 -0300 echo2 cm: Updated from tp-glib 0.11.11 tests/lib/glib/echo2/im-manager.c | 27 ++++----------------------- tests/lib/glib/echo2/im-manager.h | 2 -- tests/lib/glib/echo2/protocol.c | 23 ++++++++++++++++------- 3 files changed, 20 insertions(+), 32 deletions(-) commit 43962207792a3fb7df673efc1b947439c581216b Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 29 22:01:46 2010 -0300 cm-basics test: Test Protocol support. tests/dbus/cm-basics.cpp | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) commit b1ddfdd4f91a38886c4e962044f8d253cdad4ba3 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 29 22:00:06 2010 -0300 echo2 cm: Updated from smcv's tp-glib Protocol support. Use smcv's unreleased tp-glib Protocol support changes to write the test cases. tests/lib/glib/echo2/Makefile.am | 4 +- tests/lib/glib/echo2/conn.c | 29 ++--- tests/lib/glib/echo2/conn.h | 5 + tests/lib/glib/echo2/connection-manager.c | 59 +++++----- tests/lib/glib/echo2/im-manager.c | 19 ++++ tests/lib/glib/echo2/im-manager.h | 2 + tests/lib/glib/echo2/manager-file.py | 2 +- tests/lib/glib/echo2/protocol.c | 166 +++++++++++++++++++++++++++++ tests/lib/glib/echo2/protocol.h | 67 ++++++++++++ 9 files changed, 305 insertions(+), 48 deletions(-) commit f11c07c104a75e812e769b5183791eb568ce5d1f Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 29 21:59:16 2010 -0300 tools/manager-file.py: Updated from latest tp-glib version. tools/manager-file.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) commit c72fc0210b92cc713e77c38273117fed6b89eab1 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 29 00:28:06 2010 -0300 ConnectionManager: Updated copyright. TelepathyQt4/connection-manager-internal.h | 4 ++-- TelepathyQt4/connection-manager.cpp | 4 ++-- TelepathyQt4/connection-manager.h | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) commit 1f380912739dcc9fde06892641c1aa02f24e6a15 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 29 04:15:02 2010 -0300 ConnectionManager: Improved documentation. Updated docs to indicate what methods require FeatureCore to be enabled and standardization. TelepathyQt4/connection-manager.cpp | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) commit b095251c4526a3160ed1aa37092f098aff6b15d1 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 29 21:56:11 2010 -0300 ConnectionManager: Fixed indentation. TelepathyQt4/connection-manager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 70e16b2069e47bf0d1c77b137a19d1a1a422517a Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 29 21:53:57 2010 -0300 ConnectionManager: Fixed crash when deleting protocol wrapper. Do not call delete on ::Private::ProtocolWrapper on the ready slot, as the PendingOperation is a child of it. TelepathyQt4/connection-manager.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit 041c90a4abd12cadf3d6ea48082e5c252a9ab8fb Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 29 21:53:34 2010 -0300 ConnectionManager: Proper read Icon property from Protocol. TelepathyQt4/connection-manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit bdeaf5c186f12ed27203fff7a06c464a52683a66 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 29 21:52:40 2010 -0300 ConnectionManager: Properly call ::Private::ProtocolWrapper::instrospectMain instead of ::Private::instrospectMain. Properly call ::Private::ProtocolWrapper::instrospectMain instead of ::Private::instrospectMain when instrospecting ProtocolWrapper. TelepathyQt4/connection-manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 07982c9bea99bdf3ecfedda0f4642d832e696463 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 29 04:13:09 2010 -0300 ConnectionManager: Added helper methods to check whether a protocol is supported and return a protocol object for a given protocol. TelepathyQt4/connection-manager.cpp | 39 +++++++++++++++++++++++++++++++++++ TelepathyQt4/connection-manager.h | 4 +++- 2 files changed, 42 insertions(+), 1 deletion(-) commit 466bee681f7a0cb6f570e769ef860a59da5d1ac7 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 29 04:01:21 2010 -0300 ConnectionManager: Use ProtocolWrapper if ConnectionManager.Protocols is supported. TelepathyQt4/connection-manager-internal.h | 1 + TelepathyQt4/connection-manager.cpp | 55 +++++++++++++++++++++++++++- TelepathyQt4/connection-manager.h | 1 + 3 files changed, 56 insertions(+), 1 deletion(-) commit ea16f94cb9da9685be44ca6cdaba0ce6b68655de Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 29 03:56:30 2010 -0300 ConnectionManager: Added ::Private::ProtocolWrapper. Added class to wrap a Protocol object to be used in CMs implementing Protocol. TelepathyQt4/connection-manager-internal.h | 33 +++++++++++ TelepathyQt4/connection-manager.cpp | 87 ++++++++++++++++++++++++++++ 2 files changed, 120 insertions(+) commit f8d79d5fe08c7de1bc635b4b110c5b4a63f632fc Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 29 03:52:52 2010 -0300 ConnectionManager: Renamed methods to retrieve protocol info. Added Legacy suffix to methods to retrieve protocol info as new API will be added for new CMs implementing Protocol. TelepathyQt4/connection-manager-internal.h | 4 ++-- TelepathyQt4/connection-manager.cpp | 16 ++++++++-------- TelepathyQt4/connection-manager.h | 4 ++-- 3 files changed, 12 insertions(+), 12 deletions(-) commit 8cb0a6cf063be376bc1d3197666f572e8e350262 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 29 03:57:36 2010 -0300 ConnectionManager: Add new info returned by ManagerFile to ProtocolInfo objects. TelepathyQt4/connection-manager.cpp | 5 +++++ 1 file changed, 5 insertions(+) commit f48e27c966ea971e2ebb39920382923886372e1e Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 29 00:31:42 2010 -0300 ConnectionManager: Added new methods to ProtocolInfo to support Protocol properties. TelepathyQt4/connection-capabilities.h | 1 + TelepathyQt4/connection-manager.cpp | 87 +++++++++++++++++++++++++++++++- TelepathyQt4/connection-manager.h | 13 +++++ 3 files changed, 100 insertions(+), 1 deletion(-) commit 2f0222aaf99adb367d1f98c045e901ef6d3d16e2 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 28 15:04:46 2010 -0300 ConnectionManager: Moved private methods implementations to where it belongs. TelepathyQt4/connection-manager.cpp | 154 +++++++++++++++++------------------ 1 file changed, 77 insertions(+), 77 deletions(-) commit 56619fdf44f5930864f345b000e62f918e2743ff Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 29 19:52:05 2010 -0300 manager-file test: Added test for new properties defined in Protocol. tests/manager-file.cpp | 19 +++++++++++++++++++ tests/telepathy/managers/test-manager-file.manager | 10 ++++++++++ 2 files changed, 29 insertions(+) commit 1508333cdaef24c696f4beaaddc59145f800a826 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 29 03:44:44 2010 -0300 ManagerFile: Support new properties defined in Protocol. TelepathyQt4/manager-file.cpp | 125 +++++++++++++++++++++++++++++++++++++---- TelepathyQt4/manager-file.h | 9 ++- 2 files changed, 121 insertions(+), 13 deletions(-) commit 617e461c26aee000f600f8b335a3bf3d3a39c220 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 29 01:41:14 2010 -0300 ManagerFile: Moved ::Private members decl to where it belongs. TelepathyQt4/manager-file.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit a14193bf8cdfe006b4b628d5bb19d0a8f1653957 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 29 04:00:58 2010 -0300 Generate bindings for Protocol iface. TelepathyQt4/connection-manager.xml | 1 + 1 file changed, 1 insertion(+) commit 9c87474af1797433a34708203e842505e260126d Author: Olli Salli Date: Mon Aug 23 16:43:58 2010 +0300 Updated NEWS NEWS | 1 + 1 file changed, 1 insertion(+) commit 370c1e6b64759ff025134e22a6a3e9cd195882b9 Author: Olli Salli Date: Mon Aug 23 16:38:27 2010 +0300 Add files generated by lcov-check and check-valgrind to .gitignore .gitignore | 2 ++ 1 file changed, 2 insertions(+) commit c10a958e18d2d94529cc5024b823e002e81a398f Author: Olli Salli Date: Mon Aug 23 16:35:56 2010 +0300 Disable building the shared library if using --enable-compiler-coverage GCov doesn't really work with shared libraries. m4/compiler.m4 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit c3251734fe417f69326d9aafbe66893e90379478 Author: Olli Salli Date: Mon Aug 23 14:01:47 2010 +0300 Updated NEWS NEWS | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) commit 4c6d33d4a207561b5c5b18f86d8e4812d83734e0 Author: Olli Salli Date: Mon Aug 23 06:36:50 2010 +0300 Fix yet more StreamedMediaChan(Call) races which were discovered with 1ms simulation delay tests/dbus/streamed-media-chan-call.cpp | 118 ++++++++++++++++++++----------- tests/dbus/streamed-media-chan.cpp | 37 ++++++++-- 2 files changed, 106 insertions(+), 49 deletions(-) commit 2b52d85072c75d96431e68975890b5cb51bdda21 Author: Olli Salli Date: Mon Aug 23 03:58:30 2010 +0300 Set the test simulation delay to 1ms in g_object_new instead of modifying the service code This reverts commit ce159df2a4d508500052f9bf0c74e0ded05df0e9. We shouldn't modify code which is copy-paste updated from tp-glib. tests/dbus/chan-group.cpp | 1 + tests/dbus/conn-roster-groups.cpp | 1 + tests/dbus/conn-roster.cpp | 1 + tests/dbus/streamed-media-chan-call.cpp | 1 + tests/dbus/streamed-media-chan.cpp | 1 + tests/lib/glib/callable/conn.c | 2 +- tests/lib/glib/callable/connection-manager.c | 2 +- tests/lib/glib/callable/manager-file.py | 2 +- tests/lib/glib/callable/media-channel.c | 3 ++- tests/lib/glib/callable/media-manager.c | 2 +- tests/lib/glib/callable/media-stream.c | 2 +- tests/lib/glib/contactlist/conn.c | 2 +- tests/lib/glib/contactlist/contact-list-manager.c | 2 +- tests/lib/glib/contactlist/manager-file.py | 2 +- tests/lib/glib/csh/conn.c | 2 +- tests/lib/glib/csh/manager-file.py | 2 +- tests/lib/glib/csh/room-manager.c | 2 +- tests/lib/glib/csh/room.c | 2 +- tests/lib/glib/future/call/call-channel.c | 3 ++- tests/lib/glib/future/call/call-manager.c | 2 +- tests/lib/glib/future/call/call-stream.c | 2 +- tests/lib/glib/future/call/cm.c | 2 +- tests/lib/glib/future/call/conn.c | 2 +- tests/lib/glib/future/call/manager-file.py | 2 +- 24 files changed, 26 insertions(+), 19 deletions(-) commit 10f53196978d37990a44af2e5d8645f13e7bb398 Author: Olli Salli Date: Mon Aug 23 03:56:40 2010 +0300 Fix a race expecting Text::Sent() to have been emitted quickly in TestTextChan I believe this was the last race \o/ tests/dbus/text-chan.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) commit 0c3ff88d34a077cfa6239e8850925366581f79e4 Author: Olli Salli Date: Mon Aug 23 03:20:27 2010 +0300 Reduce amount of useless library debug My head almost exploded while trying to parse the useful information out of the test logs when fixing the test race conditions. This patch removes some of the most common "guaranteedly boring" debug prints and shortens the common debug print prefix a bit to make debug output more readable. TelepathyQt4/contact-manager.cpp | 13 ------------- TelepathyQt4/debug-internal.h | 4 ++-- TelepathyQt4/optional-interface-factory.cpp | 3 --- TelepathyQt4/pending-contact-attributes.cpp | 9 +-------- TelepathyQt4/pending-contacts.cpp | 28 ++++----------------------- TelepathyQt4/readiness-helper.cpp | 4 +--- 6 files changed, 8 insertions(+), 53 deletions(-) commit af14b1ee14785f16a444de608c2e175ed81e7aff Author: Olli Salli Date: Mon Aug 23 02:32:41 2010 +0300 Modify repeat-tests.sh to be able to run any command instead of just make targets This is useful for running individual tests by directly invoking the test executable. tools/repeat-tests.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit a3389f10ac9d0a189afc00b89aff28a10756abed Author: Olli Salli Date: Mon Aug 23 02:17:00 2010 +0300 (Hopefully) fix all of the remaining races in TestStreamedMediaChan This required a lot of elaborate event state machine logic to be robust against unexpected event orderings. This really sucks. Time to rethink the StreamedMediaChan semantics sometime soon... tests/dbus/streamed-media-chan.cpp | 247 +++++++++++++++++++++++++++++------- 1 file changed, 204 insertions(+), 43 deletions(-) commit 705fd77629f3f31dc8e0cfcb3351a99035db45ce Author: Olli Salli Date: Sun Aug 22 23:43:22 2010 +0300 Fix races in TestStreamedMediaChanCall::testOutgoingCall The race was because the simulation connection service decides to start sending us video or stop doing that based on the exact timing when we stop sending from our end after initiating the call. The fix is to make sure we're neither sending nor receiving before starting to poke the stream back and forth to ensure we don't eg. try to make it receive and wait for it do start doing so when it is already in fact doing that. tests/dbus/streamed-media-chan-call.cpp | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) commit e3a4aaf05076dfd842578820b92dd9737c890e4c Author: Olli Salli Date: Sun Aug 22 22:49:00 2010 +0300 Rewrite all while (i != end) loops as for loops Such while loops with manual i increment somewhere in the loop body are extremely error-prone. Sure enough, 8 of the loops (all in MediaStream public API functions) were either prone to or always did busy-loop. TelepathyQt4/account-set.cpp | 12 +--- TelepathyQt4/contact-manager.cpp | 6 +- TelepathyQt4/readiness-helper.cpp | 19 ++---- TelepathyQt4/streamed-media-channel.cpp | 107 ++++++++++++++----------------- 4 files changed, 57 insertions(+), 87 deletions(-) commit fd33d4ba5ac04ea9c64269ce4da85e27adc0ae28 Author: Olli Salli Date: Sun Aug 22 19:07:39 2010 +0300 Add progress debug to TestStreamedMediaChanCall::testOutgoingCall() That testcase is currently terribly racy; with this debug output it will be possible to detect the point at which the races actually occur. tests/dbus/streamed-media-chan-call.cpp | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) commit 96ced4c13454778b4b7e14d400df587a141bf430 Author: Olli Salli Date: Sun Aug 22 18:15:52 2010 +0300 Rename the test in s-m-c-call.cpp so it can be distinguished from its sibling in test output They both used to be called TestStreamedMediaChan probably due to copy-paste (I know, right!). tests/dbus/streamed-media-chan-call.cpp | 38 +++++++++++++++---------------- 1 file changed, 19 insertions(+), 19 deletions(-) commit efa967abc23cf9d03729d07d61de4ac265c58a8a Author: Olli Salli Date: Sun Aug 22 18:06:15 2010 +0300 Fix race in TestStreamedMediaChan::testOutgoingCallTerminate() This required writing a fairly elaborate state machine, because the requestStreams pending operation can finish anywhere between starting the call, the remote contact being added to RP, them answering, and them terminating the call. Should this be considered a bug, making applications write error-prone code? Probably not, as I don't think the applications need to care about whether the group membership changes happen before or after the call starting being signaled. They'll probably just use the membership change signals to show a participant list, if anything. However, if they want to display a widget with the remote's avatar, for example, when the PendingOp finishes, then indeed this should be considered a bug. (They could do so anyway reliably though, by storing the contact they use to make the requestStreams call in the first place, which is the most logical way to do it). testOutgoingCall() itself is still racy, fixing it next. tests/dbus/streamed-media-chan.cpp | 170 ++++++++++++++++++++++++++++++------ 1 file changed, 145 insertions(+), 25 deletions(-) commit c16694c2da4c1373e4a2b413af668a98268904ca Author: Olli Salli Date: Sun Aug 22 17:53:08 2010 +0300 Fix race in TestStreamedMediaChan::testOutgoingCallBusy Tp-qt4 may have already noticed the remote is busy and invalidated the channel, so we should only start waiting for the channel to become invalid unless it is still valid. Otherwise there's a probablity (which is quite high under valgrind) that the test will hang, because it doesn't execute fast enough to reach starting to wait for the invalidation before the channel has already been invalidated. tests/dbus/streamed-media-chan.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) commit 7e42feb003bccf1902e4b398b48a643a2018d8d9 Author: Olli Salli Date: Sun Aug 22 14:41:32 2010 +0300 Fix yet another race in the roster test The previous fixes only really fixed the first contact in the request presence subscription test, which does eventually accept our request. The second contact refuses our request, which, if it happened before the test got to checking if it had asked for the subscription in the first place, caused the test to fail (because it wasn't anymore in the "asked for subscription" state, but "not subscribed"). This race only happened when running under valgrind, not without it even with some concurrent CPU load. tests/dbus/conn-roster.cpp | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) commit aa7992d92078525410d513508e6487500684f210 Author: Olli Salli Date: Sat Aug 21 21:07:43 2010 +0300 Add a conservative 10 minute watchdog to all tests The primary purpose is to detect infinite waiting for events and busyloops in tests. 10 minutes should be plenty for any test to run even under heavy load. Let's increase it if it causes problems. As a reference 10 seconds is enough on my computer for any of the current tests even with a few concurrent CPU hog processes, so we should be pretty safe. tests/lib/test.cpp | 9 +++++++++ tests/lib/test.h | 1 + 2 files changed, 10 insertions(+) commit ce173b50f47758cc43e99dd8564636a1a237cb1a Author: Olli Salli Date: Sat Aug 21 21:02:46 2010 +0300 Fix race in testRoster() where we might make too few mainloop iterations if the contact is quick to accept the presence request tests/dbus/conn-roster.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 92d3216a6e6077d6b8a490f815b2b231a7b8b540 Author: Olli Salli Date: Sat Aug 21 20:36:42 2010 +0300 Add some FIXME to ContactManager about broken semantics TelepathyQt4/contact-manager.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) commit 9ca59c8d16811feb21a173323f4fc8289ada44d3 Author: Olli Salli Date: Sat Aug 21 20:36:09 2010 +0300 Add test verifying the ContactManager deathtrap is gone tests/dbus/conn-roster-groups.cpp | 383 +++++++++++++++++++++++++++++++++++-- 1 file changed, 369 insertions(+), 14 deletions(-) commit 35f67f768ad8a54bcc8cb8db215221e388b972a5 Author: Olli Salli Date: Sat Aug 21 20:26:03 2010 +0300 Test lib: add Test::expectFailure, which can be used to expect a PendingOperation fail tests/lib/test.cpp | 11 +++++++++++ tests/lib/test.h | 1 + 2 files changed, 12 insertions(+) commit ee652401bb23b76b872102eb2644ed12cbd39b76 Author: Olli Salli Date: Sat Aug 21 20:25:08 2010 +0300 Plug memory leak in TestContacts::testSelfContactFallback() tests/dbus/contacts.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) commit 4ccfa85189edb76694b3c02fc003c1e1693fa33c Author: Olli Salli Date: Sat Aug 21 20:17:48 2010 +0300 Make the Roster and RosterGroups ops on ContactManager early-fail on invalid conn too TelepathyQt4/contact-manager.cpp | 84 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) commit 5bbafcc162cfe97cb796c2d27d6225edfaf93976 Author: Olli Salli Date: Sat Aug 21 14:45:28 2010 +0300 Make Connection::contactManager() less of a death-trap Previously the accessor used to return NULL if the Connection Core wasn't ready. This is less of a problem for the case of the Connection not being ready *yet* but very much one due to the fact that when the Connection goes invalid it's not considered ready anymore. When the conn goes invalid, application code (actually, in this case, the Channel internals) should react by not making any more calls to the Connection - when it gets the signal! However, if it's executing its own code calling Connection *when* the Conn gets invalidated, it won't get the signal in time to prevent doing so (it will only get the signal when it returns to the mainloop). With the previous NULL return behavior, applications would crash with a SIGSEGV in this case. Even if the signal is caught in time preventing all further calls to avoid SIGSEGV will be VERY hard, for any non-trivial application anyway. This affected eg. the conference channel test, which disconnects the connection and runs a mainloop until it emits invalidated. However, at this point it still has Channel objects for the same connection, which haven't all completed introspecting themselves. The Channel introspection process will make calls to ContactManager to construct contacts for its participants. If this happens in the same mainloop iteration as the connection invalidation, but before the channels get the invalidated signal, the channels' call to ContactManager will cause the application to crash with a SIGSEGV. This patch makes Connection::contactManager() always return a non-NULL value, but will make ContactManager::contactsFor{Handles,Identifiers}() and ContactManager::upgradeContacts() fail instantly with TELEPATHY_ERROR_NOT_AVAILABLE and a descriptive debug message, if the connection has been invalidated or never has been made ready. TelepathyQt4/connection.cpp | 10 +--------- TelepathyQt4/contact-manager.cpp | 39 +++++++++++++++++++++++++++++++++---- TelepathyQt4/contact-manager.h | 2 +- TelepathyQt4/pending-contacts.cpp | 25 +++++++++++++++++++++--- TelepathyQt4/pending-contacts.h | 13 ++++++++++--- 5 files changed, 69 insertions(+), 20 deletions(-) commit 666fbfcccbc822199debd23fd3a9ed3154e443de Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 30 03:32:00 2010 -0300 Channel: Do not continue introspecting if owning connection failed becoming ready. TelepathyQt4/channel.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 60a635520d18192ae8676a9f8ba8e07fe37d7cb7 Author: Olli Salli Date: Sat Aug 21 11:50:41 2010 +0300 Fix TestAccountBasics race expecting avatarChanged The avatarChanged signal might have already been caught when we were making FeatureAvatar ready for the second time or when making the SetAvatar call in the first place, so only start waiting for it if we haven't got it already. This fixes a test hang which happens quite often with higher CPU load and check-valgrind (when the test itself runs slower, and the avatar may change faster than the test is able to catch it). tests/dbus/account-basics.cpp | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) commit cf1c52ed0cb9b3589f7bb3d65e8fb72757d8e686 Author: Olli Salli Date: Sat Aug 21 11:23:01 2010 +0300 Remove --verbose from check-valgrind, we're not particularly interested in overtly verbose symbol binding info etc This has no effect on the verbosity of reporting the actual memory errors. tools/valgrind.mk | 1 - 1 file changed, 1 deletion(-) commit bc259ea12de5f0f9beaf14019bdb19c2d2741c7d Author: Olli Salli Date: Fri Aug 20 22:36:33 2010 +0300 Make TestConnRoster not fail if the remote has accepted our invitation already tests/dbus/conn-roster.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit ce159df2a4d508500052f9bf0c74e0ded05df0e9 Author: Olli Salli Date: Fri Aug 20 22:35:03 2010 +0300 Cut the test simulation delay to 1% of what it was This speeds up tests immensely, but also uncovers race condition bugs in them which otherwise were only occasional (but happened quite often especially under high system load). tests/lib/glib/callable/conn.c | 2 +- tests/lib/glib/callable/connection-manager.c | 2 +- tests/lib/glib/callable/manager-file.py | 2 +- tests/lib/glib/callable/media-channel.c | 2 +- tests/lib/glib/callable/media-manager.c | 2 +- tests/lib/glib/callable/media-stream.c | 2 +- tests/lib/glib/contactlist/conn.c | 2 +- tests/lib/glib/contactlist/contact-list-manager.c | 2 +- tests/lib/glib/contactlist/manager-file.py | 2 +- tests/lib/glib/csh/conn.c | 2 +- tests/lib/glib/csh/manager-file.py | 2 +- tests/lib/glib/csh/room-manager.c | 2 +- tests/lib/glib/csh/room.c | 2 +- tests/lib/glib/future/call/call-channel.c | 2 +- tests/lib/glib/future/call/call-manager.c | 2 +- tests/lib/glib/future/call/call-stream.c | 2 +- tests/lib/glib/future/call/cm.c | 2 +- tests/lib/glib/future/call/conn.c | 2 +- tests/lib/glib/future/call/manager-file.py | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) commit 42bd91f43d0bd1cae6f7bdf5b95abf66a0e9204d Author: Olli Salli Date: Fri Aug 20 19:23:31 2010 +0300 Add a script to automatically re-run tests for a number of times .gitignore | 1 + tools/repeat-tests.sh | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) commit cce40a1ca36409e0c258f451f02f68a4cd8830ad Author: Olli Salli Date: Fri Aug 20 18:17:06 2010 +0300 Always use NULL instead of 0 in vararg lists While 0 works fine in real C++ APIs which have, like, typing (:O), in vararg lists putting 0 as an argument will just push a 32 bits zero integer on amd64, although it should be a pointer argument of 64 bits. This will a) mess up the following arguments b) if used as the last argument, half of it will be zero and half of it uninitialized which is bad for eg. g_object_new which may then go happily scanning for more arguments since it's not really an all-zero pointer necessarily. Detected by check-valgrind. tests/dbus/chan-basics.cpp | 2 +- tests/dbus/chan-conference.cpp | 2 +- tests/dbus/chan-group.cpp | 2 +- tests/dbus/client.cpp | 2 +- tests/dbus/conn-basics.cpp | 2 +- tests/dbus/conn-capabilities.cpp | 2 +- tests/dbus/conn-requests.cpp | 2 +- tests/dbus/conn-roster-groups.cpp | 2 +- tests/dbus/conn-roster.cpp | 2 +- tests/dbus/contacts-capabilities.cpp | 2 +- tests/dbus/contacts-info.cpp | 2 +- tests/dbus/contacts-location.cpp | 2 +- tests/dbus/contacts.cpp | 4 ++-- tests/dbus/handles.cpp | 2 +- tests/dbus/streamed-media-chan-call.cpp | 2 +- tests/dbus/streamed-media-chan.cpp | 2 +- tests/dbus/text-chan.cpp | 2 +- 17 files changed, 18 insertions(+), 18 deletions(-) commit a8fd1b6bbc68c9190c08f664c53138b0ede64bfc Author: Olli Salli Date: Fri Aug 20 17:56:00 2010 +0300 Initialize Account::{automatic,requested,current}Presence Initialize the presence values to (Unknown, "unknown", "") to prevent AccountBasics being reported as doing uninitialized conditional jump by valgrind when it's filling them from the introspect data. TelepathyQt4/account.cpp | 5 +++++ 1 file changed, 5 insertions(+) commit 974c9f5b22aea56c3260ced6e231c764a26014c2 Author: Olli Salli Date: Fri Aug 20 17:08:41 2010 +0300 Add some FIXMEs to CM introspection TelepathyQt4/connection-manager.cpp | 4 ++++ 1 file changed, 4 insertions(+) commit 9c96a574133f50b5c104474eed48fdc8d29d77d5 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Aug 6 12:15:41 2010 -0300 Updated NEWS NEWS | 1 + 1 file changed, 1 insertion(+) commit e3527454bb3e9b28162acdcf46793919638795b2 Merge: b9015a5 5ae4c25 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Aug 6 12:10:59 2010 -0300 Merge branch 'spec-0.19.10' Reviewed-by: Simon McVittie (smcv) commit 5ae4c25b8f48b9ae43b020fe70f61679940e2bc0 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Aug 4 15:46:22 2010 -0300 Channel: Added accessor method for ContactSearch interface. TelepathyQt4/channel.h | 6 ++++++ 1 file changed, 6 insertions(+) commit 6c16ec2c240456cd8cacdf1cc75869fc987e628d Author: Andre Moreira Magalhaes (andrunko) Date: Wed Aug 4 15:45:17 2010 -0300 Added auto generated classes for Channel.Type.ContactSearch interface. TelepathyQt4/ChannelTypeContactSearchInterface | 13 +++++++++++++ TelepathyQt4/Makefile.am | 1 + TelepathyQt4/channel.xml | 1 + 3 files changed, 15 insertions(+) commit f8d1afbc77a3ad27398fe615dce696ae58ce9b77 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Aug 4 01:10:35 2010 -0300 Update to spec 0.19.10 spec/Account.xml | 30 ++++-- spec/Channel.xml | 67 ++++++++---- spec/Channel_Interface_Group.xml | 28 ++++- spec/Channel_Interface_Messages.xml | 12 +++ spec/Channel_Type_Contact_Search.xml | 55 +++++----- spec/Channel_Type_Streamed_Media.xml | 168 ++++++++++++++++++++++-------- spec/Connection_Interface_Anonymity.xml | 32 +++--- spec/Connection_Interface_Cellular.xml | 81 ++++++++------ spec/Connection_Interface_Forwarding.xml | 10 ++ spec/Connection_Manager.xml | 4 +- spec/Protocol.xml | 5 +- spec/Protocol_Interface_Avatars.xml | 2 +- spec/Protocol_Interface_Presence.xml | 2 +- spec/all.xml | 2 +- 14 files changed, 351 insertions(+), 147 deletions(-) commit b9015a51478fcedc8ad6d1c50135975bbddb2db1 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 30 03:51:00 2010 -0300 Updated NEWS NEWS | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 11bbe428af7eb1f7bd50e1abe0b48e59d7f9aef4 Merge: b93fade 781c9a3 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 30 03:49:27 2010 -0300 Merge remote branch 'wjt/new-account-removed' Reviewed-by: Andre Moreira Magalhaes (andrunko) commit b93fadeba77d3c6d0ecf2632d17f762ea1021069 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 22 18:44:04 2010 -0300 Updated NEWS NEWS | 1 + 1 file changed, 1 insertion(+) commit c15570724a3d22a7a14c96630a63483233e515f5 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 22 18:41:16 2010 -0300 file-transfer example: Updated receiver to properly advertise capabilities. Fixes: fd.o#28651 - Cannot receive files using gabble 0.9 Author: Daniele E. Domenichelli Reviewed-by: Andre Moreira Magalhaes (andrunko) examples/file-transfer/receiver.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) commit 781c9a3b3dac6e65c2921e4f29057cad6163568c Author: Will Thompson Date: Mon Jul 19 13:59:40 2010 +0100 Only emit AccountSet::accountRemoved for accounts in the set Previously creating a new non-matching account would cause a spurious emission of AccountSet::accountRemoved(). Fixes: fd.o#29145 TelepathyQt4/account-set.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) commit a221a5bbe17e3a7e0877f4e6be95c65fa4da6522 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 15 18:26:42 2010 -0300 Updated NEWS NEWS | 1 + 1 file changed, 1 insertion(+) commit 1f906ea6e40a708614d893e0c1410f001e87e12d Merge: 856e3d4 2a86da6 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 15 18:25:31 2010 -0300 Merge branch 'am-filter-accounts-docs-fix' Reviewed-by: Will Thompson (wjt) commit 856e3d4ff2bf1f72e3841d7e7e429a813136bb4a Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 15 18:24:12 2010 -0300 Updated NEWS NEWS | 3 +++ 1 file changed, 3 insertions(+) commit 9e6258f6ad7b0ce1b3afd6b42123612987ab13a0 Merge: 3f61251 db52d35 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 15 18:17:12 2010 -0300 Merge branch 'account-set-improvements' Reviewed-by: Will Thompson (wjt) commit db52d3546e267d5e510c90ff42278d3d4a6a1afb Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 15 18:15:38 2010 -0300 AccountSet: Fixed example code in documentation that was adding wrong filter key 'protocol'. TelepathyQt4/account-set.cpp | 1 - 1 file changed, 1 deletion(-) commit 2a86da65a492df22d9149e6d3f3ddb6d99603861 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 7 14:11:32 2010 -0300 AccountManager: Fixed documentation for ::filterAccounts. Proper format and improve example code for AccountManager::filterAccounts doc. TelepathyQt4/account-manager.cpp | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) commit 65bebf3c3cf3d52c5df45755ae8e199c391e498d Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 7 15:42:42 2010 -0300 account-basics test: Added tests for AccountManager/AccountSet integration. tests/dbus/account-basics.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) commit 9e3aa8c286852dd9b43e684c058b2ee760a40e7f Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 7 15:38:15 2010 -0300 AccountSet: Added filterValid Qt property. TelepathyQt4/account-set.h | 1 + 1 file changed, 1 insertion(+) commit 06a26c3f1711e6343fad83fe20e982fa91c66c21 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 7 15:36:41 2010 -0300 AccountSet: Reorder AccountSet isFilterValid method to be placed next to filter method. TelepathyQt4/account-set.cpp | 20 ++++++++++---------- TelepathyQt4/account-set.h | 4 ++-- 2 files changed, 12 insertions(+), 12 deletions(-) commit 2c52e806ef712fc1992b32c1b445439dd4ddd79f Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 7 14:49:12 2010 -0300 AccountSet: Added missing docs for methods/signals. TelepathyQt4/account-set.cpp | 157 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) commit 3f61251ff13bbbd8685566366d3393c5f4b0e540 Author: Will Thompson Date: Mon Jul 12 19:12:45 2010 +0100 Start 0.3.8 development NEWS | 5 +++++ configure.ac | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) commit c8e8f81733b4b0bca43680fd451e39db1d227c54 Author: Will Thompson Date: Mon Jul 12 19:09:24 2010 +0100 Fix uploading documentation rsyncing the docs during make maintainer-upload-release failed: rsync: failed to set times on "/srv/telepathy.freedesktop.org/www/doc/telepathy-qt4/.": Operation not permitted (1) This turns out to be because I can write to the directory, but don't own it. Passing the -O option to rsync stops it trying to update times on directories, fixing this. Pre-instareviewed-by: Simon McVittie Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e3be0284e340857b78a9c6783dd372f1fb342626 Author: Will Thompson Date: Mon Jul 12 18:42:26 2010 +0100 Version 0.3.7 configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit e2458c61bf1a3902514fdd788cda0579fb8ccfd0 Author: Will Thompson Date: Mon Jul 12 18:42:08 2010 +0100 NEWS for 0.3.7 NEWS | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) commit 3fdc09c246ebe0f51f21ef03984b3dd4c1863246 Author: Will Thompson Date: Mon Jul 12 18:30:34 2010 +0100 Update to spec 0.19.9 spec/Channel_Interface_Messages.xml | 98 +++++++++++++++++++++++++++------ spec/Connection_Interface_Balance.xml | 50 +++++++++-------- spec/all.xml | 2 +- 3 files changed, 110 insertions(+), 40 deletions(-) commit cb589f89d8b6e55c95b5d57379263781e6374efe Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 7 14:35:40 2010 -0300 Updated NEWS. NEWS | 8 ++++++++ 1 file changed, 8 insertions(+) commit 5a99a149a5fba9dbaf459f5fb50a16254cff8df7 Merge: 7fab7cd 483cba3 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 7 14:19:46 2010 -0300 Merge branch 'account-set-check-filter' Reviewed-by: Will Thompson (wjt) commit 7fab7cd135c183467ab165634517392de1538bc3 Merge: a3c0117 5f246e3 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 7 14:16:17 2010 -0300 Merge branch 'am-filter-by-protocol-fix' Reviewed-by: Will Thompson (wjt) commit 483cba3c1ef0448ac678877e26c8695a6508d08f Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 7 12:35:05 2010 -0300 account-basics test: Added test for AccountSet::isFilterValid(). tests/dbus/account-basics.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) commit ea57a539cf3c7e3cece4ef2b24e121ebbaa929f2 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 7 12:34:46 2010 -0300 AccountSet: Added isFilterValid method to indicate whether the filter used is valid. TelepathyQt4/account-set-internal.h | 3 +++ TelepathyQt4/account-set.cpp | 43 +++++++++++++++++++++++++++++++++++ TelepathyQt4/account-set.h | 2 ++ 3 files changed, 48 insertions(+) commit a3c011724bb34ed0f8480db38b205cb7e5e1cce5 Author: Will Thompson Date: Wed Jul 7 11:25:03 2010 +0100 Refresh HACKING and README • Move all information on contributing and coding styles into HACKING, and refer there from README; • Update Bugzilla component from telepathy-qt4 to tp-qt4; • Mention the 'patch' keyword, and link to the review procedure; • Remove dire warnings about ABI/API stability, since Tp-Qt4 is now stable. Reviewed-by: André Moreira Magalhães HACKING | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++------- README | 28 ++++++++-------------------- 2 files changed, 65 insertions(+), 27 deletions(-) commit 5f246e3fe38cad51e9be19edfc45430a6d33a68a Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 7 10:49:28 2010 -0300 AccountManager: Proper use protocolName Account property when filtering accounts by protocol. TelepathyQt4/account-manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit cc22b16033c8fe43b7bc9a7d20b892569ace4d7c Merge: 401065c 3710213 Author: Will Thompson Date: Tue Jul 6 14:32:41 2010 +0100 Merge branch 'more-chan-ifaces' Reviewed-by: André Moreira Magalhães commit 371021349a4a68fe6fab6ed06d700ef4179f7b8e Author: Will Thompson Date: Tue Jul 6 10:47:46 2010 +0100 Generate code for Channel.Interface.ServicePoint. TelepathyQt4/channel.h | 6 ++++++ TelepathyQt4/channel.xml | 1 + 2 files changed, 7 insertions(+) commit 2f5896e9a4c5d15d3849ee28e3bc4a33137386a5 Author: Will Thompson Date: Tue Jul 6 10:23:03 2010 +0100 Generate code for Channel.Interface.Anonymity. TelepathyQt4/channel.h | 6 ++++++ TelepathyQt4/channel.xml | 1 + 2 files changed, 7 insertions(+) commit 401065c420c90ac02e947fc90ef761ac4600ffa3 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 1 23:43:59 2010 -0300 Start 0.3.7 development NEWS | 5 +++++ configure.ac | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) commit 0c5ece4546e6efadfabbb32f75812e5191b9f016 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 1 21:17:17 2010 -0300 Prepare release 0.3.6 NEWS | 32 ++++++++++++++++++++++++++++++-- configure.ac | 8 ++++---- 2 files changed, 34 insertions(+), 6 deletions(-) commit f8bdfd47b3da4daeb97be9403e2e89cb0c5c5a39 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 1 23:24:02 2010 -0300 distcheck: Added missing account-set-internal.h. TelepathyQt4/Makefile.am | 1 + 1 file changed, 1 insertion(+) commit 955879942b52f42c66bb7018509fcddf70a46345 Merge: 89a1274 465ae6a Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 1 13:11:21 2010 -0300 Merge branch 'account-service' Reviewed-by: Will Thompson (wjt) commit 465ae6a33d54555870a45ce5cdf0269e28dfbe85 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 1 12:45:46 2010 -0300 account-basics test: Added test for Account.Service support. tests/dbus/account-basics.cpp | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) commit 89a1274eb911570ffa536c4d2022eba40d0602d8 Merge: e9e76df ca16d17 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 1 12:53:27 2010 -0300 Merge branch 'key-file-fixes' Reviewed-by: Will Thompson (wjt) commit c086fd16e998425e8ed4fd260c9897944b2f9da7 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 1 12:43:51 2010 -0300 account-manager test am: Added Account.Service support. tests/lib/python/account-manager.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 5b9e8a537e42b794f73954980622fcd0c8da93a6 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 1 12:44:50 2010 -0300 Account: Improved serviceName() documentation. Indicate that serviceName() will fallback to protocolName() if service name is not known in the docs. TelepathyQt4/account.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit ca16d17d98549ee06ebed47dbaadce10163fc924 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 30 10:39:50 2010 -0300 key-file test: Added tests for all keys found in test-manager-file.manager "somewhat-pathological" group. tests/key-file.cpp | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) commit 0c78db98c9f14cf38991912d75c9fae60884acb6 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 30 10:39:30 2010 -0300 KeyFile: Fixed code comment. TelepathyQt4/key-file.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e221563a9625e6b52aa42d4d70fded51856004f3 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 29 19:47:06 2010 -0300 KeyFile: Proper parse string lists even if ; is not the last char. TelepathyQt4/key-file.cpp | 3 +++ 1 file changed, 3 insertions(+) commit 463a3c09328881016b71eada8bd593f853d10e82 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 29 19:46:27 2010 -0300 KeyFile: Accept space as key names, so we can parse RequestableChannelClasses in manager files using KeyFile. TelepathyQt4/key-file.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 59d703cb1abc545b91de62a19800c0a626252ccd Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 30 09:47:02 2010 -0300 Account: Fallback to protocol name when service name is empty on ::serviceName(). TelepathyQt4/account.cpp | 3 +++ 1 file changed, 3 insertions(+) commit 3ba131ac0313e8e71efd53d4c144dcf02fd13e4d Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 29 17:31:51 2010 -0300 Account: Added Account.Service support. TelepathyQt4/account.cpp | 50 ++++++++++++++++++++++++++++++++++++++++++++++ TelepathyQt4/account.h | 5 +++++ 2 files changed, 55 insertions(+) commit e9e76df3307d749124940f0c2edf0e4ff72cd427 Merge: 9a915eb 0e2c824 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 1 11:41:03 2010 -0300 Merge branch 'conn-cellular' Reviewed-by: Simon McVittie (smcv) commit 9a915ebef0311905b69d78e5686729e188d97377 Merge: f7fca31 05d79c9 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 1 11:40:40 2010 -0300 Merge branch 'spec-0.19.8' Reviewed-by: Simon McVittie (smcv) commit 0e2c82494f256bb28929d84e267f58e2a7bb45bc Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 30 17:32:13 2010 -0300 Connection: Added accessor method for Cellular interface. TelepathyQt4/connection.h | 6 ++++++ 1 file changed, 6 insertions(+) commit e776a46c069a4a8573d304eea0e7d505af2d175b Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 30 17:31:31 2010 -0300 Added auto generated classes for Connection.Cellular interface. TelepathyQt4/ConnectionInterfaceCellularInterface | 13 +++++++++++++ TelepathyQt4/Makefile.am | 1 + TelepathyQt4/connection.xml | 1 + 3 files changed, 15 insertions(+) commit 05d79c910b8598a6cbeb82deedfc4b3545b2fe61 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 30 17:25:39 2010 -0300 Update to spec 0.19.8 spec/Account.xml | 58 ++- spec/Account_Interface_Storage.xml | 169 +++++++ spec/Channel_Interface_Messages.xml | 654 ++++++++++++++------------ spec/Channel_Type_Text.xml | 8 +- spec/Connection_Interface_Capabilities.xml | 7 + spec/Connection_Interface_Cellular.xml | 31 +- spec/Connection_Interface_Contact_Groups.xml | 71 ++- spec/Connection_Interface_Contact_List.xml | 58 ++- spec/Connection_Interface_Requests.xml | 10 + spec/Connection_Manager.xml | 77 ++- spec/Protocol.xml | 370 +++++++++++++++ spec/Protocol_Interface_Avatars.xml | 158 +++++++ spec/Protocol_Interface_Presence.xml | 114 +++++ spec/all.xml | 28 +- 14 files changed, 1449 insertions(+), 364 deletions(-) commit f7fca3192e91d71a55a35da4d1169a4eaa84e16d Merge: 67c42c4 3acc79b Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 30 17:53:15 2010 -0300 Merge branch 'cm-properties' Reviewed-by: Simon McVittie (smcv) commit 67c42c4af2156a247374031eb5f62aaa2f54b8d2 Merge: 0edc196 49e4889 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 30 17:47:36 2010 -0300 Merge branch 'valgrind-support' Reviewed-by: Simon McVittie (smcv) commit 49e48891fb1d17dae6f41f2023e617abe9fd405e Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 29 21:57:33 2010 -0300 Added valgrind support when running tests. Makefile.am | 3 +++ tests/Makefile.am | 14 ++++++++++++++ tests/dbus/Makefile.am | 13 +++++++++++++ tools/valgrind.mk | 12 ++++++++++++ 4 files changed, 42 insertions(+) commit 3acc79b6c69ec7d7e8e5a2f0864dcfa74d9cfe66 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 29 21:56:25 2010 -0300 ConnectionManager: Added Qt properties support. TelepathyQt4/connection-manager.h | 3 +++ 1 file changed, 3 insertions(+) commit 0edc196817b04233ea761a273eb7b36fbd940d4d Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 29 22:31:29 2010 -0300 Start 0.3.6 development (delayed) NEWS | 5 +++++ configure.ac | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) commit 7d2e48966bf66cedc63d2a709757c424c2cb0bd3 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 29 17:38:56 2010 -0300 Account: Moved methods to the place they belong. Move some methods declaration/implementations to where it belongs. TelepathyQt4/account.cpp | 34 +++++++++++++++++----------------- TelepathyQt4/account.h | 5 ++--- 2 files changed, 19 insertions(+), 20 deletions(-) commit ed8f2055022d346d358a0b0f532e90873daa5555 Merge: 7dfae95 bc58e4f Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 29 15:35:43 2010 -0300 Merge branch 'tests-improved' Reviewed-by: Will Thompson (wjt) commit 7dfae95bafd2ac53ddcfa908b7bbaab9841cb32d Merge: 9a4d67f db069d5 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 29 15:35:26 2010 -0300 Merge branch 'fixes' Reviewed-by: Will Thompson (wjt) commit bc58e4f9396ff4d2a9b9261b53b063013d12e71b Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 29 15:27:56 2010 -0300 tests: Merge tests/example CMs from latest tp-glib and update tests accordingly. Now all tests pass again and the tp-glib tests/examples are copied verbatim. tests/dbus/chan-basics.cpp | 4 +- tests/dbus/chan-group.cpp | 389 ++------------ tests/dbus/client.cpp | 6 +- tests/dbus/cm-basics.cpp | 2 +- tests/dbus/conn-basics.cpp | 6 +- tests/dbus/conn-roster-groups.cpp | 5 +- tests/dbus/contacts-capabilities.cpp | 74 ++- tests/dbus/contacts-info.cpp | 30 +- tests/dbus/contacts-location.cpp | 8 +- tests/dbus/contacts.cpp | 52 +- tests/dbus/handles.cpp | 6 +- tests/dbus/text-chan.cpp | 6 +- tests/lib/glib/Makefile.am | 22 +- tests/lib/glib/callable/Makefile.am | 22 +- tests/lib/glib/callable/conn.c | 4 +- tests/lib/glib/callable/media-channel.c | 14 +- tests/lib/glib/callable/media-manager.c | 28 +- tests/lib/glib/contactlist/Makefile.am | 10 +- tests/lib/glib/contactlist/conn.c | 24 +- tests/lib/glib/contactlist/connection-manager.c | 5 +- tests/lib/glib/contactlist/contact-list-manager.c | 157 ++++-- tests/lib/glib/contactlist/contact-list.c | 11 +- tests/lib/glib/contactlist/manager-file.py | 4 + tests/lib/glib/contacts-conn.c | 444 +++++++++++----- tests/lib/glib/contacts-conn.h | 213 ++++---- tests/lib/glib/csh/Makefile.am | 25 +- tests/lib/glib/csh/conn.c | 92 +--- tests/lib/glib/csh/conn.h | 12 +- tests/lib/glib/csh/connection-manager.c | 133 +++++ tests/lib/glib/csh/connection-manager.h | 61 +++ tests/lib/glib/csh/manager-file.py | 23 + tests/lib/glib/csh/room-manager.c | 117 ++--- tests/lib/glib/csh/room-manager.h | 7 - tests/lib/glib/csh/room.c | 290 +++-------- tests/lib/glib/csh/room.h | 33 -- tests/lib/glib/echo/Makefile.am | 19 + tests/lib/glib/echo/chan.c | 11 +- tests/lib/glib/echo/conn.c | 4 +- tests/lib/glib/echo/connection-manager.c | 14 +- tests/lib/glib/echo/connection-manager.h | 8 +- tests/lib/glib/echo/im-manager.c | 43 +- tests/lib/glib/echo/manager-file.py | 19 + tests/lib/glib/echo2/Makefile.am | 28 +- tests/lib/glib/echo2/chan.c | 12 +- tests/lib/glib/echo2/conn.c | 11 +- tests/lib/glib/echo2/conn.h | 5 +- tests/lib/glib/echo2/connection-manager.c | 88 ++++ tests/lib/glib/echo2/connection-manager.h | 64 +++ tests/lib/glib/echo2/im-manager.c | 42 +- tests/lib/glib/echo2/manager-file.py | 19 + tests/lib/glib/future/call/Makefile.am | 6 + tests/lib/glib/future/call/call-channel.c | 15 +- tests/lib/glib/future/call/call-content.c | 13 +- tests/lib/glib/future/call/call-stream.c | 16 +- tests/lib/glib/future/conference/Makefile.am | 3 + tests/lib/glib/params-cm.c | 208 ++++++++ tests/lib/glib/params-cm.h | 95 ++++ tests/lib/glib/simple-account-manager.c | 180 +++++++ tests/lib/glib/simple-account-manager.h | 58 +++ tests/lib/glib/simple-account.c | 301 +++++++++++ tests/lib/glib/simple-account.h | 56 +++ tests/lib/glib/simple-channel-dispatch-operation.c | 297 +++++++++++ tests/lib/glib/simple-channel-dispatch-operation.h | 74 +++ tests/lib/glib/simple-client.c | 243 +++++++++ tests/lib/glib/simple-client.h | 59 +++ tests/lib/glib/simple-conn.c | 107 ++-- tests/lib/glib/simple-conn.h | 59 ++- tests/lib/glib/simple-manager.c | 26 +- tests/lib/glib/simple-manager.h | 51 +- tests/lib/glib/textchan-group.c | 439 ++++++++++++++++ tests/lib/glib/textchan-group.h | 65 +++ tests/lib/glib/textchan-null.c | 529 ++++++++++++++++++++ tests/lib/glib/textchan-null.h | 135 +++++ tests/lib/glib/util.c | 249 +++++++++ tests/lib/glib/util.h | 51 ++ 75 files changed, 4675 insertions(+), 1386 deletions(-) commit db069d5924b2fe2787def7a3f2b86f80ef475742 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 29 15:25:04 2010 -0300 Contact: Proper parse /capabilities attr. Let's not fail FeatureCapabilities if /capabilities is empty. TelepathyQt4/contact.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) commit 9d68e16c94ba93a092a071c49e6ea819371405f8 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 29 15:24:50 2010 -0300 Contact: Fixed indentation, header include placement. TelepathyQt4/contact.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 483db8ae18fe28df673a904e4fbb6ce41aadabbe Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 29 15:23:11 2010 -0300 Connection: Fixed wrong copy/paste while defining FeatureAccountBalance. TelepathyQt4/connection.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e5941e890c607dad1f3e22f70703f04456a6d2ce Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 29 15:22:13 2010 -0300 Channel: Proper use immutable properties when available. Immutable properties are prefixed with the iface name where the properties received by GetAll are not, so let's remove the prefix before parsing the immutable properties. TelepathyQt4/channel.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 9a4d67f53cda4a350d2fc46e876fff581defa886 Merge: 8911605 da4f760 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 29 04:18:21 2010 -0300 Merge branch 'account-improvements' Reviewed-by: Will Thompson (wjt) commit da4f7608e7d966f8a4577362f7571da336a0dd35 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 23 16:16:26 2010 -0300 account-basics test: Removed usage of deprecated methods/signals. tests/dbus/account-basics.cpp | 45 +++++++++++++++++++++++++++++++---------- 1 file changed, 34 insertions(+), 11 deletions(-) commit 5a5e379f0f088b0053fa0955530aaf5ef2613a8b Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 23 16:16:10 2010 -0300 AccountManager: Deprecated accountForPath/s methods. TelepathyQt4/account-manager.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 15c00d53c5cffd86b7096b856821bb968169e7d8 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 23 16:15:50 2010 -0300 accounts example: Use new statusChanged signal. Replaced the usage of the deprecated connectionStatusChanged signal with the new statusChanged signal. examples/accounts/account-item.cpp | 11 +++++++---- examples/accounts/account-item.h | 4 ++-- 2 files changed, 9 insertions(+), 6 deletions(-) commit 2b7fe2c57d3e6dec63adfb0e085590c6ed4c6bad Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 23 16:15:24 2010 -0300 Account: Added new methods/signals iconName/setIconName/iconNameChanged and deprecated old ones icon/setIcon/iconChanged. Also changed property name iconName instead of icon. TelepathyQt4/account.cpp | 57 +++++++++++++++++++++++++++++++++++++++------- TelepathyQt4/account.h | 11 +++++---- 2 files changed, 56 insertions(+), 12 deletions(-) commit b3eaa0d16a6f9cfbc4b6c72996eb212598b98c94 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 23 16:15:04 2010 -0300 Account: Added new method protocolName and deprecated old method protocol. Also changed property name to protocolName instead of protocol. TelepathyQt4/account.cpp | 22 +++++++++++++++++----- TelepathyQt4/account.h | 5 +++-- examples/accounts/account-item.cpp | 2 +- examples/accounts/accounts-window.cpp | 2 +- 4 files changed, 22 insertions(+), 9 deletions(-) commit 5303239fe4950f46f44a0e5751c9f47caa652348 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 23 16:14:48 2010 -0300 AccountManager: Updated FIXMEs. TelepathyQt4/account-manager.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) commit edc75265bf34054ad39b52a83e142b2b1399fecc Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 23 16:14:30 2010 -0300 AccountManager: Deprecate methods that represent accounts as object paths. TelepathyQt4/account-manager.h | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) commit 8fbc111a4b3399112d29cd99c6955be1ceced792 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 23 16:14:11 2010 -0300 AccountSet: Use new API to check when accounts are created/removed. TelepathyQt4/account-set-internal.h | 6 +++-- TelepathyQt4/account-set.cpp | 41 ++++++++++++++++++++--------------- TelepathyQt4/account-set.h | 4 ++-- 3 files changed, 30 insertions(+), 21 deletions(-) commit 8e7a8c279aceaaeab641219d64ae5981f5be2d5b Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 23 16:13:54 2010 -0300 AccountSet: Properly connect to signals using namespace Tp:: where appropriate. TelepathyQt4/account-set.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 0b7fba429414338d86b2dd878af19364258a16c7 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 23 16:13:31 2010 -0300 AccountSet: Properly use namespace Tp:: in signals params where appropriate. TelepathyQt4/account-set.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit f1058c04daa6ea26664fadbca15fd40a03bd8e16 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 23 16:13:06 2010 -0300 Account: Added removed signal. TelepathyQt4/account.cpp | 1 + TelepathyQt4/account.h | 1 + 2 files changed, 2 insertions(+) commit 073400a172e6d05a41884be36bf2e7f7615afb86 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 23 16:12:47 2010 -0300 AccountManager: Added newAccount signal that uses AccountPtr instead of object path to represent the account. TelepathyQt4/account-manager.cpp | 3 ++- TelepathyQt4/account-manager.h | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) commit 875cbcdfad2e29d264070c94136c511aec874e0c Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 23 16:08:58 2010 -0300 AccountManager: Added helper methods to return account sets for valid/invalid accounts. TelepathyQt4/account-manager.cpp | 30 ++++++++++++++++++++++++++++++ TelepathyQt4/account-manager.h | 3 +++ 2 files changed, 33 insertions(+) commit 9555bade07e40264ff38804c49c3af9cb670e4a4 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 23 16:08:26 2010 -0300 AccountManager: Renamed new helper methods to include a Set suffix. Renamed new helper methods to include a Set suffix, so we can keep the old methods and add new methods like validAccountsSet, ... without breaking API. TelepathyQt4/account-manager.cpp | 8 ++++---- TelepathyQt4/account-manager.h | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) commit 69984015a1b63f01c0be4f6e79c72d0d72839dea Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 23 16:07:56 2010 -0300 AccountManager: Fixed typo. TelepathyQt4/account-manager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 1356323447f05e5b4a9547f01ef04904ff9b7285 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 23 16:07:13 2010 -0300 Account: Proper check if account is online. Proper check if account is online even is SimplePresence is not supported. TelepathyQt4/account.cpp | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) commit 23b6a8381d832007d94d9ef60a0d0d1a6f8fd626 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 15 00:57:41 2010 -0300 AccountManager: Updated copyright. TelepathyQt4/account-manager.cpp | 4 ++-- TelepathyQt4/account-manager.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit 0b0948165a382f58e8a0a1f7cb5f1d760ab8a64b Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 15 00:23:39 2010 -0300 AccountManager: Added helper methods to filter accounts by state/presence/protocol/properties. TelepathyQt4/account-manager.cpp | 100 ++++++++++++++++++++++++++++++++++++++ TelepathyQt4/account-manager.h | 13 ++++- 2 files changed, 111 insertions(+), 2 deletions(-) commit 5a17fc49c325a85329c05cce3537e2f784c35c04 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 14 20:49:58 2010 -0300 AccountManager: Return ready accounts for all helper methods. Now all accounts returned by AccountManager have the Account::FeatureCore enabled, making it easier to use for API users. TelepathyQt4/account-manager.cpp | 295 ++++++++++++++++++++++++-------------- TelepathyQt4/account-manager.h | 1 + tests/dbus/account-basics.cpp | 24 +++- 3 files changed, 210 insertions(+), 110 deletions(-) commit 74a3238bcc787322f3701a1924a3b2599ff28ed7 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jun 18 16:10:18 2010 -0300 AccountSet: Added class to represent a set of accounts filtered by a given criteria. TelepathyQt4/AccountSet | 13 +++ TelepathyQt4/Makefile.am | 5 + TelepathyQt4/account-set-internal.h | 67 ++++++++++++ TelepathyQt4/account-set.cpp | 191 +++++++++++++++++++++++++++++++++++ TelepathyQt4/account-set.h | 76 ++++++++++++++ TelepathyQt4/types.h | 2 + 6 files changed, 354 insertions(+) commit 77376b1eb17dbbfaa92225568118e497f967f3d9 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jun 18 11:17:03 2010 -0300 Account: Added helper method/signal/property to check whether the account is online. TelepathyQt4/account.cpp | 32 ++++++++++++++++++++++++++++++++ TelepathyQt4/account.h | 4 ++++ 2 files changed, 36 insertions(+) commit ce4f1a94919f7a44dbda29382464c6dcbe5b4c14 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jun 18 16:12:58 2010 -0300 Account: Added propertyChanged signal to indicate when a property changed. This signal will be used by AccountSet to determine whether to update the set. TelepathyQt4/account.cpp | 26 ++++++++++++++++++++++++++ TelepathyQt4/account.h | 5 +++++ 2 files changed, 31 insertions(+) commit ef4f9f2923b36c71a3f1bc840f16f4c301af9efc Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jun 18 11:05:20 2010 -0300 Account: Added Qt properties. Added Qt properties so we can use them to filter accounts among other benefits. TelepathyQt4/account.h | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) commit 8911605f84525fc8a0fa432dd1d2e0f5d152ffe0 Merge: a0eebec 0220372 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 24 11:55:53 2010 -0300 Merge branch 'channel-immutable-props' Reviewed-by: Will Thompson (wjt) commit a0eebec87fe2acb0751043a42549b177f4bcc249 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 21 10:09:58 2010 -0300 Prepare release 0.3.5 NEWS | 18 ++++++++++++++++-- configure.ac | 8 ++++---- 2 files changed, 20 insertions(+), 6 deletions(-) commit f6d073417d013894ea9449d3854ec734fc1d9ed0 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 21 09:53:42 2010 -0300 .gitignore: Added protocols example. .gitignore | 1 + 1 file changed, 1 insertion(+) commit 0220372b374d9b575204391fdd0b11de92a438a2 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 17 16:12:49 2010 -0300 Channel: Use immutable properties if available. Channel now uses immutable properties if they are available instead of introspecting the channel main properties. TelepathyQt4/channel.cpp | 48 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 37 insertions(+), 11 deletions(-) commit c681785900ec3665f09cc4bba9d6b6ac45b44fb5 Merge: 08ef702 33ac042 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 16 11:19:43 2010 -0300 Merge branch 'account-connection-error' Reviewed-by: Will Thompson (wjt) commit 08ef7022015b5092cfb3840d97eed23611fa29ab Merge: f71be18 86d7598 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 16 11:19:29 2010 -0300 Merge branch 'account-changing-presence' Reviewed-by: Will Thompson (wjt) commit f71be186677b1dba4fcc4ff0a6b9fc7e673b76a2 Merge: 9ef24ce 5042a1a Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 16 11:18:47 2010 -0300 Merge branch 'spec-0.19.7' Reviewed-by: Will Thompson (wjt) commit 33ac04280d079c7268ebe0f0e30ec1567cc06c76 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 16 10:29:53 2010 -0300 Account: Proper handle changes in ConnectionError/ErrorDetails even if status did not change. TelepathyQt4/account.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) commit c2add9f6d7cfc24c620780f88a433bbb2e119be3 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 15 14:03:55 2010 -0300 Account: Added Account.ConnectionError/Details support. Also added a new signal statusChanged that contains the connection status and the connection error in the same signal and deprecated the older signal connectionStatusChanged. TelepathyQt4/account.cpp | 97 ++++++++++++++++++++++++++++++++++++++++++++++ TelepathyQt4/account.h | 7 +++- 2 files changed, 103 insertions(+), 1 deletion(-) commit 44e843b9f6437068679a20f8b90f74dff2c6ad06 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 15 14:01:55 2010 -0300 Connection: Added ConnectionHelper class. ConnectionHelper class will provide helper methods that can be used by other classes such as statusReasonToErrorName that converts a connection status reason to a D-Bus error name. TelepathyQt4/connection-internal.h | 7 ++ TelepathyQt4/connection.cpp | 162 +++++++++++++++++++----------------- 2 files changed, 94 insertions(+), 75 deletions(-) commit 86d759836c0ae60de727bb0a1aae5ba5d892c2da Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 29 04:06:06 2010 -0300 account example: Added Account.ChangingPresence support. examples/accounts/account-item.cpp | 11 +++++++++++ examples/accounts/account-item.h | 2 ++ examples/accounts/accounts-window.cpp | 1 + 3 files changed, 14 insertions(+) commit 992824dbb0467ba52e8ffd66071e1c0d356b3b19 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 29 04:05:50 2010 -0300 Account: Added Account.ChangingPresence support. TelepathyQt4/account.cpp | 33 +++++++++++++++++++++++++++++++++ TelepathyQt4/account.h | 3 +++ 2 files changed, 36 insertions(+) commit 5042a1a5536b4023fc1b05ae4489f22ec013362f Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 15 12:03:40 2010 -0300 Added missing pretty include headers for Connection interfaces Balance, ContactCapabilities, ContactInfo and Location. TelepathyQt4/ConnectionInterfaceBalanceInterface | 13 +++++++++++++ ...ConnectionInterfaceContactCapabilitiesInterface | 13 +++++++++++++ .../ConnectionInterfaceContactInfoInterface | 13 +++++++++++++ TelepathyQt4/ConnectionInterfaceLocationInterface | 13 +++++++++++++ TelepathyQt4/Makefile.am | 4 ++++ 5 files changed, 56 insertions(+) commit a88cee4411e41138237fb86ca058f169cf62dd9a Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 15 12:01:49 2010 -0300 Connection: Added accessor method for ServicePoint interface. TelepathyQt4/connection.h | 6 ++++++ 1 file changed, 6 insertions(+) commit 7f0ccd39ccdb5a40b06eef9fa02ca21dc5dcd364 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 15 12:01:40 2010 -0300 Added auto generated classes for Connection.ServicePoint interface. .../ConnectionInterfaceServicePointInterface | 13 +++++++++++++ TelepathyQt4/Makefile.am | 1 + TelepathyQt4/connection.xml | 1 + 3 files changed, 15 insertions(+) commit d61919fd3f523795af6b4434abe1149fa7d5cd3d Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 15 12:01:00 2010 -0300 Connection: Added accessor method for Anonimity interface. TelepathyQt4/connection.h | 6 ++++++ 1 file changed, 6 insertions(+) commit 57e1e526b0142e042cb723481cc1e496c8978f4a Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 15 12:00:37 2010 -0300 Added auto generated classes for Connection.Anonymity interface. TelepathyQt4/ConnectionInterfaceAnonymityInterface | 13 +++++++++++++ TelepathyQt4/Makefile.am | 1 + TelepathyQt4/connection.xml | 1 + 3 files changed, 15 insertions(+) commit 6c4172a882188c391ad3365e452bba4cb8d8aedd Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 15 11:39:22 2010 -0300 Update to spec 0.19.7 spec/Account.xml | 90 +++ spec/Call_Content_Interface_Mute.xml | 83 +++ spec/Channel_Dispatch_Operation.xml | 66 ++ spec/Channel_Dispatcher.xml | 4 +- spec/Channel_Interface_Anonymity.xml | 68 ++ spec/Channel_Interface_Chat_State.xml | 43 ++ spec/Channel_Interface_DTMF.xml | 179 ++++- spec/Channel_Interface_Messages.xml | 4 + spec/Channel_Interface_Service_Point.xml | 86 +++ spec/Channel_Request.xml | 5 +- spec/Channel_Type_Call.xml | 19 + spec/Client_Handler.xml | 10 + spec/Client_Interface_Requests.xml | 6 +- spec/Client_Observer.xml | 25 +- spec/Connection_Interface_Anonymity.xml | 187 +++++ spec/Connection_Interface_Capabilities.xml | 2 +- spec/Connection_Interface_Cellular.xml | 110 +++ spec/Connection_Interface_Contact_Groups.xml | 412 +++++++++++ spec/Connection_Interface_Contact_Info.xml | 11 + spec/Connection_Interface_Contact_List.xml | 837 +++++++++++++++++++++++ spec/Connection_Interface_Forwarding.xml | 366 ++++++++-- spec/Connection_Interface_Location.xml | 36 +- spec/Connection_Interface_Mail_Notification.xml | 14 +- spec/Connection_Interface_Service_Point.xml | 136 ++++ spec/all.xml | 13 +- spec/errors.xml | 38 +- spec/generic-types.xml | 30 + spec/template.xml | 33 + 28 files changed, 2808 insertions(+), 105 deletions(-) commit 9ef24ce0b24a703a1e25e7da44c3c5dfcdb6c089 Merge: 9c4b970 758cf29 Author: Alban Crequy Date: Thu Jun 10 18:50:42 2010 +0100 Merge branch 'fix-doc' Reviewed-by: Andre Moreira Magalhaes (andrunko) commit 758cf295838097791dd90524f7671e58cae29a63 Author: Alban Crequy Date: Thu Jun 10 18:40:59 2010 +0100 Fix documentation of AbstractClient: use QLatin1String in the pseudo code TelepathyQt4/abstract-client.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 9c4b970dd540fc30fc817c5b57cfa42091f935fb Merge: 6bec069 8cc693d Author: Alban Crequy Date: Thu Jun 10 12:18:59 2010 +0100 Merge branch 'support-old-tp-glib' Reviewed-by: Andre Moreira Magalhaes (andrunko) commit 8cc693de4c9a00204817f7616cef34b89ae9e396 Author: Alban Crequy Date: Wed Jun 9 16:39:11 2010 +0100 Dependency on tp-glib 0.8.1 is enough for tp-qt4-farsight Requires tp-glib 0.11.3 for the tests but only 0.8.1 for tp-qt4-farsight configure.ac | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 6bec0699b3c14f510051c8f1c91e66fc7aedd525 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jun 4 16:38:00 2010 -0300 call-widget example: Make coverity happy replacing assert with return. examples/call/call-widget.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit 7c9dca4d9d4dc2ed804e9768b123902634ad0b8a Author: Simon McVittie Date: Wed May 26 10:50:21 2010 +0100 Update with-session-bus.sh from telepathy-glib, fixing a bashism Reviewed-by: Guillaume Desmottes Bug: https://bugs.freedesktop.org/show_bug.cgi?id=28258 tools/with-session-bus.sh | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) commit 606e42b5f521dfd35852c29ed2c7226d90ef7387 Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 24 00:06:33 2010 -0300 Start 0.3.5 development NEWS | 5 +++++ configure.ac | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) commit e68b285a479f4c7406b2e6699d6deb88c964be33 Author: Andre Moreira Magalhaes (andrunko) Date: Sun May 23 23:28:54 2010 -0300 Prepare release 0.3.4 NEWS | 11 +++++++++-- configure.ac | 8 ++++---- 2 files changed, 13 insertions(+), 6 deletions(-) commit 2cd44e12899d7a2b2cb7e60bcc6782f651ff8389 Author: Andre Moreira Magalhaes (andrunko) Date: Sun May 23 23:51:04 2010 -0300 Fixed dist (Added types-internal.h to build system). TelepathyQt4/Makefile.am | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 1b0d2dc1054a19f82cece45995c443c6a50eef69 Merge: 5115a19 fcf2bd5 Author: Andre Moreira Magalhaes (andrunko) Date: Sun May 23 23:50:13 2010 -0300 Merge remote branch 'drf/fix-socket-crash' Reviewed-by: Andre Moreira Magalhaes (andrunko) commit 5115a19dc775b6956a8e039aaa223e31fb62f0c1 Merge: b1fca86 f994160 Author: Andre Moreira Magalhaes (andrunko) Date: Thu May 20 10:09:55 2010 -0300 Merge branch 'balance' Reviewed-by: Will Thompson (wjt) commit fcf2bd52c9db261f9253f768dcf59e210f490cef Author: Dario Freddi Date: Wed May 19 17:30:31 2010 +0200 Fix strict QtDBus demarshalling which was causing crashes when qdbus_casting from a SocketAddressIP*. A specification for qdbus_cast was implemented which checks for the incoming type signature: if the incoming struct is (su), it uses a private helper structure which is then converted to the requested type. It also prevents crashes in case the signature is not the expected one. The nice thing is that no code modification are required: you just need to include the brand new types-internal.h. TelepathyQt4/incoming-file-transfer-channel.cpp | 1 + TelepathyQt4/outgoing-file-transfer-channel.cpp | 1 + TelepathyQt4/types-internal.h | 155 +++++++++++++++++++++++ TelepathyQt4/types.cpp | 32 ++++- 4 files changed, 188 insertions(+), 1 deletion(-) commit f994160d2c04accf7555340ccfc037590c33541f Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 11 20:31:08 2010 -0300 Connection: Added FeatureAccountBalance and accessors. TelepathyQt4/connection.cpp | 94 +++++++++++++++++++++++++++++++++++++++++++ TelepathyQt4/connection.h | 8 ++++ 2 files changed, 102 insertions(+) commit ae65d9c635149a9a4566b7171a226da5fff5fc73 Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 11 20:10:44 2010 -0300 Connection: Added accessor method for Balance interface. TelepathyQt4/connection.h | 6 ++++++ 1 file changed, 6 insertions(+) commit 40c3bc55a5db3059f4906500a2eb39613f496859 Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 11 20:10:12 2010 -0300 Added auto generated classes for Connection.Balance interface. TelepathyQt4/connection.xml | 1 + 1 file changed, 1 insertion(+) commit b1fca867c3ccd35a92655a42a5e6b3374c29be87 Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 10 00:04:51 2010 -0300 Start 0.3.4 development NEWS | 5 +++++ configure.ac | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) commit 9ecd8a34748f1e34534af4194d1c97496e0ddc1e Author: Andre Moreira Magalhaes (andrunko) Date: Sun May 9 23:48:43 2010 -0300 Prepare release 0.3.3 NEWS | 14 ++++++++++++-- configure.ac | 8 ++++---- 2 files changed, 16 insertions(+), 6 deletions(-) commit cfdc6748f0daab4512792c4cbacf09ecc37be669 Merge: 665ccc9 87952d4 Author: Andre Moreira Magalhaes (andrunko) Date: Sun May 9 23:25:59 2010 -0300 Merge branch 'call-content-remove' Reviewed-by: Will Thompson (wjt) commit 665ccc9c76c8eaa8a9989313cfcbbb4da264f050 Merge: 5143a69 759efd2 Author: Andre Moreira Magalhaes (andrunko) Date: Sun May 9 23:25:49 2010 -0300 Merge branch 'got-capabilities-leak' Reviewed-by: Will Thompson (wjt) commit 5143a691cd060679d42b68301322bfd9628d054a Merge: 2b9a124 ee26706 Author: Andre Moreira Magalhaes (andrunko) Date: Sun May 9 23:25:23 2010 -0300 Merge branch 'account-unique-identifier' Reviewed-by: Will Thompson (wjt) commit 759efd2623662ad95b78fcec13d9d280a228e3f1 Author: Andre Moreira Magalhaes (andrunko) Date: Fri May 7 10:54:03 2010 -0300 Connection: Properly delete caps object on destructor (it was leaking). TelepathyQt4/connection.cpp | 2 ++ 1 file changed, 2 insertions(+) commit ee26706ab820811a35f11941a3b90ccfab7d6ccc Author: Andre Moreira Magalhaes (andrunko) Date: Thu May 6 05:31:40 2010 -0300 Account: Correctly remove object path from Account::uniqueIdentifier. TelepathyQt4/account.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 87952d41bff111e746af71410c3f079a1e03e80a Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 3 19:44:45 2010 -0300 StreamedMediaChannel: Added support for Call.Content.Remove (StreamedMedia::removeContent/Stream/Streams). TelepathyQt4/streamed-media-channel.cpp | 37 ++++++++++++++++++++++++------- TelepathyQt4/streamed-media-channel.h | 1 + 2 files changed, 30 insertions(+), 8 deletions(-) commit 2b9a12436243df4f617654aa2f7f9309a36e1bec Merge: 200220c 90ccadf Author: Andre Moreira Magalhaes (andrunko) Date: Thu May 6 05:33:40 2010 -0300 Merge branch 'contact-info' Reviewed-by: Ian Monroe (eean) commit 90ccadf8732bdbca3436868b61d30fb8bcd6cba8 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 30 17:24:36 2010 -0300 contacts-conn example cm: Updated copyright notice. tests/lib/glib/contacts-conn.c | 4 ++-- tests/lib/glib/contacts-conn.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit c61ec18b1cee8a3623bfcf475bddde4e78e7bbd2 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 30 17:55:04 2010 -0300 contacts-info test: Added test for Tp::Contact::requestInfo(). tests/dbus/contacts-info.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) commit 9360b393de500bd27e720bb248beab1ed34341b3 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 30 17:54:45 2010 -0300 contacts-conn example cm: Added ContactInfo.RequestContactInfo support. tests/lib/glib/contacts-conn.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) commit d1f0348dd04abed1fba0fe9c08e7f6191bef86cf Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 30 17:53:54 2010 -0300 PendingContactInfo: Added pending operation to represent a contact info request (ContactInfo.RequestContactInfo). TelepathyQt4/Makefile.am | 4 + TelepathyQt4/PendingContactInfo | 13 ++++ TelepathyQt4/contact.cpp | 18 +++++ TelepathyQt4/contact.h | 2 + TelepathyQt4/pending-contact-info.cpp | 131 +++++++++++++++++++++++++++++++++ TelepathyQt4/pending-contact-info.h | 65 ++++++++++++++++ 6 files changed, 233 insertions(+) commit b83526d14783f50b004fed2b526fcc2bc52b8614 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 30 16:51:07 2010 -0300 contacts-info test: Added test for contacts contact info support. tests/dbus/Makefile.am | 5 + tests/dbus/contacts-info.cpp | 275 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 280 insertions(+) commit 045d5b49b6dbec96e511abea4b041757ac176978 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 30 16:50:04 2010 -0300 contacts-conn example cm: Add initial ContactInfo support. tests/lib/glib/contacts-conn.c | 115 +++++++++++++++++++++++++++++++++++++++- tests/lib/glib/contacts-conn.h | 5 ++ 2 files changed, 119 insertions(+), 1 deletion(-) commit 22dfd78e62efba6d378eafbd65fc06c903b7919c Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 30 16:49:28 2010 -0300 Increate tp-glib dependency to >= 0.11.3 so we can use the ContactInfo interface definitions to write tests. configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit babd56ba7b52148d3c419b0676aae3a9838a3ed3 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 30 17:01:13 2010 -0300 Contact: Proper depend on FeatureInfo for method refreshInfo. This is needed because refreshInfo emits the new info trough ContactInfoChanged signal that is only handled when FeatureInfo is requested. TelepathyQt4/contact.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 09de10c998721517e8d1277566bcc33971749bd1 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 30 15:38:25 2010 -0300 Contact: Added method to refresh contact info. TelepathyQt4/contact.cpp | 21 +++++++++++++++++++++ TelepathyQt4/contact.h | 1 + 2 files changed, 22 insertions(+) commit 5ab3d9f4b58188eebc042ddf447d8bcafad57df3 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 30 15:29:17 2010 -0300 Contact: Added initial contact info support. TelepathyQt4/contact-manager.cpp | 25 +++++++++++++++++- TelepathyQt4/contact-manager.h | 1 + TelepathyQt4/contact.cpp | 54 ++++++++++++++++++++++++++++++++++++++ TelepathyQt4/contact.h | 5 ++++ 4 files changed, 84 insertions(+), 1 deletion(-) commit ba30b76e759f49de05e6dca17a9ee33f8fcddb6b Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 30 15:28:31 2010 -0300 Connection: Added accessor method for ContactInfo interface. TelepathyQt4/connection.h | 6 ++++++ 1 file changed, 6 insertions(+) commit 5ef0c4f57a8818d201c43a56542129d693fccd54 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 29 12:16:49 2010 -0300 Added auto generated classes for Connection.ContactInfo interface. TelepathyQt4/connection.xml | 1 + 1 file changed, 1 insertion(+) commit 200220c7bf8ee01b7fa8ee41fcd572670a9b529a Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 23 16:18:54 2010 -0300 Start 0.3.3 development NEWS | 5 +++++ configure.ac | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) commit 7bf381d306680ec8329dc8f8236b8b4d40bf788b Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 23 15:21:15 2010 -0300 Prepare release 0.3.2 NEWS | 19 +++++++++++++++++-- configure.ac | 8 ++++---- 2 files changed, 21 insertions(+), 6 deletions(-) commit 2115d5bf6aebd799644960b4943e59bbed3dc513 Merge: 7d7d79b 47d629a Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 22 11:40:25 2010 -0300 Merge branch 'others-location' Reviewed-by: Simon McVittie (smcv) commit 7d7d79bf5ad85934e144506b833359d47ec923cb Merge: 2525801 4136295 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 22 11:40:03 2010 -0300 Merge branch 'location' Reviewed-by: Simon McVittie (smcv) commit 25258010f21a5915edb4436f76236085a196a6bd Author: George Goldberg Date: Wed Apr 21 18:05:24 2010 +0100 Include future-*.xml files in dist as they were left out of tpqt4 0.3.1, breaking compilation. TelepathyQt4/Makefile.am | 3 +++ 1 file changed, 3 insertions(+) commit 47d629acdf7f2fad0c1d2254947218ef97069fe7 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 22 10:58:53 2010 -0300 Contact: Updated docs for location() explaining about the returned object lifetime. TelepathyQt4/contact.cpp | 3 +++ 1 file changed, 3 insertions(+) commit 0aff31c02f1d3723f5f496b993ed0b1efdbe9c87 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 16 11:38:19 2010 -0300 contacts-location test: Added test for contacts location support. tests/dbus/Makefile.am | 5 + tests/dbus/contacts-location.cpp | 235 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 240 insertions(+) commit 46305cdef6e1261e420c1ea4c831ce0597adf0d8 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 16 10:55:50 2010 -0300 contacts-conn example cm: Updated from latest telepathy-glib (0.11.2). tests/lib/glib/contacts-conn.c | 343 +++++++++++++++++++++++++++------------- tests/lib/glib/contacts-conn.h | 44 ++++++ 2 files changed, 274 insertions(+), 113 deletions(-) commit b66c39c8d34f5f5a837663b8d6963a4aa5baacc3 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 15 16:24:46 2010 -0300 Contact: Use ContactLocation class to represent location. TelepathyQt4/contact.cpp | 16 +++++++++++----- TelepathyQt4/contact.h | 5 +++-- 2 files changed, 14 insertions(+), 7 deletions(-) commit abec880b14ba5d4cd6d4f5ad0f65fa3545bb96d3 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 15 12:36:03 2010 -0300 ContactLocation: Added class to represent a contact location. TelepathyQt4/ContactLocation | 13 +++ TelepathyQt4/Makefile.am | 3 + TelepathyQt4/contact-location.cpp | 212 +++++++++++++++++++++++++++++++++++++ TelepathyQt4/contact-location.h | 87 +++++++++++++++ 4 files changed, 315 insertions(+) commit 5416912a35b3aa28b505ffd42f3d157696db5256 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 15 12:05:59 2010 -0300 Contact: Added initial location support. TelepathyQt4/contact-manager.cpp | 24 +++++++++++++++++- TelepathyQt4/contact-manager.h | 1 + TelepathyQt4/contact.cpp | 52 ++++++++++++++++++++++++++++++++++++++ TelepathyQt4/contact.h | 5 ++++ 4 files changed, 81 insertions(+), 1 deletion(-) commit 413629510eb0fc171ddab18c893b9b5ac92788c2 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 15 12:04:33 2010 -0300 Connection: Added accessor method for Location interface. TelepathyQt4/connection.h | 6 ++++++ 1 file changed, 6 insertions(+) commit cf5f4476c6afa4e88160fc3caccba4b138124f84 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 15 12:03:56 2010 -0300 Added auto generated classes for Connection.Location interface. TelepathyQt4/connection.xml | 1 + 1 file changed, 1 insertion(+) commit e2cbaa20ca2a9c9eb6d46ad23de39ea498e9a1bb Merge: 410e80c 784961c Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 16 10:31:32 2010 -0300 Merge branch 'observer-recover' Reviewed-by: Simon McVittie (smcv) commit 410e80ce1909bb6ced73bd259af387b2ab363ab8 Merge: b0cf397 6f26de2 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 16 10:31:09 2010 -0300 Merge branch 'spec-0.19.5' Reviewed-by: Simon McVittie (smcv) commit 784961c9dc02d17ae234a604c744922557a2a645 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 16 10:24:22 2010 -0300 AbstractClientObserver: Moved Private members initialization to the Private class constructor. TelepathyQt4/abstract-client.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) commit c32f94ea930129138d7853fc5f3b00987dd792d4 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 16 10:22:36 2010 -0300 AbstractClientObserver: Renamed recover method to shouldRecover. Renamed recover method to shouldRecover to make it explicit that it is an accessor to check whether the observer should set the Observer.Recover flag instead of actually doing any recover itself. TelepathyQt4/abstract-client.cpp | 24 ++++++++++++------------ TelepathyQt4/abstract-client.h | 4 ++-- TelepathyQt4/client-registrar-internal.h | 2 +- 3 files changed, 15 insertions(+), 15 deletions(-) commit c048d27d77c0ff725f54c8588d9118395276db22 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 15 19:08:48 2010 -0300 AbstractClientObserver: Added Observer.Recover property support. TelepathyQt4/abstract-client.cpp | 37 ++++++++++++++++++++++++++++++ TelepathyQt4/abstract-client.h | 4 ++++ TelepathyQt4/client-registrar-internal.h | 6 +++++ 3 files changed, 47 insertions(+) commit 6f26de2f8fb59964932e55ae63e6ca8428c565f9 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 15 18:45:26 2010 -0300 Added missing tp:type definitions to make code generator happy. spec/Call_Content_Interface_Media.xml | 2 +- spec/Channel_Type_Call.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 6dd617b45704098857c9e7e7a271eda884427e1d Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 15 18:09:49 2010 -0300 Update to spec 0.19.5 spec/Call_Content.xml | 14 ++ spec/Call_Content_Interface_Media.xml | 2 +- spec/Channel.xml | 23 ++- spec/Channel_Interface_Conference.xml | 54 +++++-- spec/Channel_Interface_Media_Signalling.xml | 20 +-- spec/Channel_Interface_Messages.xml | 130 +++++++++++++--- spec/Channel_Type_Call.xml | 76 +++++---- spec/Channel_Type_Contact_Search.xml | 4 +- spec/Channel_Type_Streamed_Media.xml | 48 ++++++ spec/Client_Observer.xml | 69 +++++++-- spec/Connection.xml | 72 ++++++--- spec/Connection_Interface_Contact_Capabilities.xml | 21 ++- spec/Connection_Interface_Contact_Info.xml | 162 +++++++++++++++----- spec/Connection_Interface_Contacts.xml | 28 ++-- spec/Connection_Interface_Mail_Notification.xml | 23 ++- spec/Connection_Manager.xml | 12 +- spec/all.xml | 8 +- 17 files changed, 579 insertions(+), 187 deletions(-) commit b0cf3979448d05e342d9e98709ebed0def699440 Author: Dario Freddi Date: Wed Apr 7 19:26:00 2010 +0200 Fix text-chan test: it is not guaranteed that the signal would be streamed upon removal, so wait until we get a pendingMessageRemoved signal before going on Reviewed-by: Andre Moreira Magalhaes (andrunko) tests/dbus/text-chan.cpp | 30 +++++++++--------------------- 1 file changed, 9 insertions(+), 21 deletions(-) commit 0652690b8b239a0f1783deed5f0b0d243ee8ac25 Author: Will Thompson Date: Thu Apr 15 15:30:24 2010 +0100 qt4-constants-gen: correctly handle UTF-8 I documented an error code with a Unicode ellipsis and Python got upset. tools/qt4-constants-gen.py | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) commit b268ad75d759a8eacf5bde09877d4fff30d78aba Author: Andre Moreira Magalhaes (andrunko) Date: Wed Apr 7 10:52:40 2010 -0300 Fixed example/protocols/Makefile.am (missing separator). examples/protocols/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 23cbf7220244adddb6f17b3cfba12977fd772314 Merge: 02ce1ae 68bc54e Author: Andre Moreira Magalhaes (andrunko) Date: Wed Apr 7 09:41:09 2010 -0300 Merge branch 'example-protocols' Reviewed-by: Simon McVittie (smcv) commit 02ce1ae4e216b0d0fb230d1172931aa885ca1ceb Author: Dario Freddi Date: Fri Apr 2 21:32:03 2010 +0200 Fixing compilation (more specific, moc generation). The current code triggered QTBUG #2151, where a QObject having some Q_PROPERTYs and not declared as a metatype generated a faulty moc, breaking compilation. The issue is not completely solved: building with more than one batch job still breaks. I'll be on that later. Signed-off-by: Dario Freddi Reviewed-by: Andre Moreira Magalhaes (andrunko) TelepathyQt4/client-registrar-internal.h | 6 ++++++ tools/qt4-client-gen.py | 5 +++++ 2 files changed, 11 insertions(+) commit 68bc54e4d72bdf4ab68981c03626a5bcc028b805 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 1 15:59:35 2010 -0300 Added example application to list all supported protocols. configure.ac | 1 + examples/Makefile.am | 4 +-- examples/protocols/Makefile.am | 40 +++++++++++++++++++++ examples/protocols/cm-wrapper.cpp | 64 +++++++++++++++++++++++++++++++++ examples/protocols/cm-wrapper.h | 58 ++++++++++++++++++++++++++++++ examples/protocols/main.cpp | 21 +++++++++++ examples/protocols/protocols.cpp | 72 +++++++++++++++++++++++++++++++++++++ examples/protocols/protocols.h | 56 +++++++++++++++++++++++++++++ 8 files changed, 314 insertions(+), 2 deletions(-) commit cab9407df672aec1e49863aeb7e6d646b1184428 Author: Dario Freddi Date: Thu Apr 1 12:21:21 2010 -0300 ContactManager: Add a new signal, allKnownContactsChanged, to monitor contact addition/removal. Reviewed-by: Olli Salli Reviewed-by: Andre Moreira Magalhaes (andrunko) TelepathyQt4/contact-manager.cpp | 53 ++++++++++++++++++++++++++++++++++++++ TelepathyQt4/contact-manager.h | 14 ++++++++++ tests/dbus/conn-roster.cpp | 41 +++++++++++++++++++++++++++++ 3 files changed, 108 insertions(+) commit 42d51f27f897e9c2ac7219fe567d747e4b19010a Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 02:05:11 2010 -0300 Start 0.3.2 development NEWS | 5 +++++ configure.ac | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) commit 2ce129b2f570c0d8fe8de5adadf9e90583798bed Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:58:44 2010 -0300 Prepare release 0.3.1 NEWS | 13 +++++++++++-- configure.ac | 4 ++-- 2 files changed, 13 insertions(+), 4 deletions(-) commit e61c2f1d35c3e939dcb30c2b19f2d4fb0219ae0b Merge: e1b525b c3047e7 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:51:37 2010 -0300 Merge branch 'docs' commit c3047e739dad6403463c4f65f2a659f9f2239d9d Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:45:00 2010 -0300 Updated AUTHORS with the main authors. AUTHORS | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit c37896ac805db948e5b97ad4a4200b4134092d0f Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:40:00 2010 -0300 text-channel: Improve documentation (bugfixes+additions) TelepathyQt4/text-channel.cpp | 62 ++++++++++++++++++++++------------------- 1 file changed, 33 insertions(+), 29 deletions(-) commit f6e1437ce89d63303307b7ca6678215f1b32f717 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:40:00 2010 -0300 streamed-media-channel: Improve documentation (bugfixes+additions) TelepathyQt4/streamed-media-channel.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5bdc2616c518d6de2c28f3171afb3e5ae19550dd Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:40:00 2010 -0300 streamed-media-channel: Improve documentation (bugfixes+additions) TelepathyQt4/streamed-media-channel.cpp | 541 ++++++++++++++++++++++++++----- 1 file changed, 460 insertions(+), 81 deletions(-) commit 8efb8330e8708a0321bd6d24713d3afea7c9d48f Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:40:00 2010 -0300 referenced-handles: Improve documentation (bugfixes+additions) TelepathyQt4/referenced-handles.cpp | 27 ++++----------------------- 1 file changed, 4 insertions(+), 23 deletions(-) commit 8f2234e294cdc05489745bd07e0ec769f1aaae8a Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:40:00 2010 -0300 pending-variant: Improve documentation (bugfixes+additions) TelepathyQt4/pending-variant.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 91a22ae8224d9b2558eb011bcf2512f9c7f9da7f Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:40:00 2010 -0300 pending-string-list: Improve documentation (bugfixes+additions) TelepathyQt4/pending-string-list.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 833b13d0bc52906de257fc82ef9640f69d1d0e5b Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:40:00 2010 -0300 pending-ready: Improve documentation (bugfixes+additions) TelepathyQt4/pending-ready.cpp | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) commit 627b363868debaf3b7228e6ad664c7fb677ce283 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:40:00 2010 -0300 pending-operation: Improve documentation (bugfixes+additions) TelepathyQt4/pending-operation.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) commit fadb66efdda561359cc7fa4a3b63b2c74f54a5e5 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:40:00 2010 -0300 pending-handles: Improve documentation (bugfixes+additions) TelepathyQt4/pending-handles.cpp | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) commit 2a1d95d170782917ab432978d682ea1c9cce7972 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:40:00 2010 -0300 pending-contact-attributes: Improve documentation (bugfixes+additions) TelepathyQt4/pending-contact-attributes.cpp | 29 ++++++--------------------- 1 file changed, 6 insertions(+), 23 deletions(-) commit e7ef59915014da6bc145a5ddfc64cb2ece7b93b0 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:40:00 2010 -0300 pending-connection: Improve documentation (bugfixes+additions) TelepathyQt4/pending-connection.cpp | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) commit 27956caa10142a056bb99f079b7dbbdaa6614299 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:39:59 2010 -0300 pending-channel: Improve documentation (bugfixes+additions) TelepathyQt4/pending-channel.cpp | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) commit 742604677ad4855f0c3e2934a7d7c9090518adf1 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:39:59 2010 -0300 pending-channel-request: Improve documentation (bugfixes+additions) TelepathyQt4/pending-channel-request.cpp | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) commit 88ae265776a93497b8eb51a4fe56c47f038b3171 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:39:59 2010 -0300 pending-account: Improve documentation (bugfixes+additions) TelepathyQt4/pending-account.cpp | 49 +++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 25 deletions(-) commit bd2d58a6621305012ccf2b900ee8feb76fed10eb Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:39:59 2010 -0300 outgoing-file-transfer-channel: Improve documentation (bugfixes+additions) TelepathyQt4/outgoing-file-transfer-channel.cpp | 30 +++++++++++++++++------ 1 file changed, 23 insertions(+), 7 deletions(-) commit 5538822837fe42b69e106f1e7f55261ed12fd37e Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:39:59 2010 -0300 optional-interface-factory: Improve documentation (bugfixes+additions) TelepathyQt4/optional-interface-factory.cpp | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) commit e343a157dc6d831112a1a818a352267239f158ad Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:39:59 2010 -0300 message: Improve documentation (bugfixes+additions) TelepathyQt4/message.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) commit dae70ac18b22ffbe1e5f8f34c252807595a2840c Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:39:59 2010 -0300 manager-file: Improve documentation (bugfixes+additions) TelepathyQt4/manager-file.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 496f583d4354881a4082d06d38e5e0793ae8bf08 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:39:59 2010 -0300 key-file: Improve documentation (bugfixes+additions) TelepathyQt4/key-file.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit a6ae2a14c40c0dc99f408f33bb9c91d283419792 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:39:59 2010 -0300 incoming-file-transfer-channel: Improve documentation (bugfixes+additions) TelepathyQt4/incoming-file-transfer-channel.cpp | 40 ++++++++++++++++------- 1 file changed, 28 insertions(+), 12 deletions(-) commit 1a52cd1cf6844bb864240d064319381723d5d2f7 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:39:59 2010 -0300 file-transfer-channel: Improve documentation (bugfixes+additions) TelepathyQt4/file-transfer-channel.cpp | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) commit 5a8f765458b3b8bbf6a714ec4b0802e49d8dd4f0 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:39:59 2010 -0300 contact-manager: Improve documentation (bugfixes+additions) TelepathyQt4/contact-manager.cpp | 22 +++------------------- 1 file changed, 3 insertions(+), 19 deletions(-) commit 78e5301e74f680a14dc204c6f57d0b607b86f94d Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:39:59 2010 -0300 contact-capabilities: Improve documentation (bugfixes+additions) TelepathyQt4/contact-capabilities.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit e663e24a15917a1266b06084b21fb36ba5764ae0 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:39:59 2010 -0300 connection: Improve documentation (bugfixes+additions) TelepathyQt4/connection.cpp | 302 ++++++++++++++++++++++++++++++++----------- 1 file changed, 225 insertions(+), 77 deletions(-) commit f25967e46903ba7f1f340d7935aca259ec92935e Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:39:59 2010 -0300 connection-manager: Improve documentation (bugfixes+additions) TelepathyQt4/connection-manager.cpp | 54 +++++++++++++++++++++-------------- 1 file changed, 32 insertions(+), 22 deletions(-) commit 48d22b7ed1fb3b8fab0652a30274691735c5450d Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:39:59 2010 -0300 connection-capabilities: Improve documentation (bugfixes+additions) TelepathyQt4/connection-capabilities.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit c9a676f238d724e0a84c6caa76325fbdae4cdb87 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:39:59 2010 -0300 client-registrar: Improve documentation (bugfixes+additions) TelepathyQt4/client-registrar.cpp | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) commit b0c8dcd4d5d1dc87dbd1e58a71a8efdc92ab2e33 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:39:59 2010 -0300 channel: Improve documentation (bugfixes+additions) TelepathyQt4/channel.cpp | 295 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 217 insertions(+), 78 deletions(-) commit 8429e2b31438d0274388085774347cca761853ed Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:39:59 2010 -0300 channel-request: Improve documentation (bugfixes+additions) TelepathyQt4/channel-request.cpp | 163 +++++++++++++++++++++++++++++++++----- 1 file changed, 141 insertions(+), 22 deletions(-) commit 71bf3c9b2d6602bd2320d5d021e444acd865c287 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:39:59 2010 -0300 channel-dispatch-operation: Improve documentation (bugfixes+additions) TelepathyQt4/channel-dispatch-operation.cpp | 189 +++++++++++++++++++++++---- 1 file changed, 163 insertions(+), 26 deletions(-) commit 3a14dd437f04fed8df707853e0cbb2a9c87ea733 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:39:59 2010 -0300 capabilities-base: Improve documentation (bugfixes+additions) TelepathyQt4/capabilities-base.cpp | 56 +++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 26 deletions(-) commit 7d27a81d73012d338c07c509f0d0cc0f3f624981 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:39:59 2010 -0300 account: Improve documentation (bugfixes+additions) TelepathyQt4/account.h | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) commit 53dc40748ff7b8b0dce79c32d42e32541e7b448d Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:39:59 2010 -0300 account: Improve documentation (bugfixes+additions) TelepathyQt4/account.cpp | 738 ++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 610 insertions(+), 128 deletions(-) commit 1de805ca59a68e965d5c23773bd8f9c771b8b183 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:39:59 2010 -0300 account-manager: Improve documentation (bugfixes+additions) TelepathyQt4/account-manager.cpp | 145 ++++++++++++++++---------------------- 1 file changed, 62 insertions(+), 83 deletions(-) commit 83ea3dca9b73eef5db20602206705ebdefebae7e Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:39:59 2010 -0300 abstract-client: Improve documentation (bugfixes+additions) TelepathyQt4/abstract-client.cpp | 702 +++++++++++++++++++++++++++++++++++++- 1 file changed, 701 insertions(+), 1 deletion(-) commit da386a20dc9dadcb4801ead14542d54151a8179d Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 29 01:11:50 2010 -0300 groups.dox: Added groups definition. Let's have one place where all groups are defined to avoid duplication. TelepathyQt4/groups.dox | 103 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) commit c6099b62e8bff5d9b94778b7a01f59a7bd986706 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Mar 28 23:20:58 2010 -0300 doxygen.css: Make Class Index fit screen and decreased h2 font size. doxygen.css | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 82863d653c9e728c7aeb4a296c8d7f52d12c68c3 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Mar 28 23:02:37 2010 -0300 doxygen.css: Fixed alignment of version in main page. doxygen.css | 5 +++++ 1 file changed, 5 insertions(+) commit 9af69e5f63f2c7618f5a5dba41f80d3546ae4797 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Mar 28 23:20:00 2010 -0300 doxygen.cfg.in: Do not generate docs for future (internal) stuff. doxygen.cfg.in | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 4ad4d214b7939d4ca8370312ea202e58687e0f84 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Mar 28 23:00:17 2010 -0300 doxygen-footer.html: Updated copyright notice. doxygen-footer.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e1b525bb24149f279add19cab2283ba9098745b8 Merge: 66db2f6 969968f Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 30 01:38:16 2010 -0300 Merge branch 'sm-fix' Reviewed-by: Simon McVittie (smcv) commit 969968f9e582b745ddf4d4c3d58dcd97ed1a8c61 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 29 09:52:18 2010 -0300 StreamedMediaChannel: Proper finish PendingMediaStreams operation when all streams/contents are ready. TelepathyQt4/streamed-media-channel.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 66db2f65e9f9d0d05f2c2a2af6321cb400f5564c Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 19 11:27:32 2010 -0300 Start 0.3.1 development NEWS | 5 +++++ configure.ac | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) commit 833098a24e39801becc8faff19ec5f736eccdbd1 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 18 16:35:45 2010 -0300 Prepare release 0.3.0 NEWS | 28 ++++++++++++++++++++++++++-- configure.ac | 10 +++++----- 2 files changed, 31 insertions(+), 7 deletions(-) commit e354889fedef5c5342d4a865a39f3286a9445c0e Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 18 16:18:27 2010 -0300 Bump tp-glib dependency to >= 0.10.0 This is needed cause tests/lib/glib/future/call depends on tp-glib >= 0.10.0 configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d324507210bfd9b40738a38465e61837acdc8e9a Merge: 6ac9068 074c8be Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 18 12:23:06 2010 -0300 Merge branch 'fix-docs-gen' Reviewed-by: Will Thompson (wjt) commit 6ac9068893b3820331f6c7a895dc0ecbfcd0aa97 Merge: 0e33de1 c38cdfe Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 18 12:22:40 2010 -0300 Merge branch 'qstring-from-ascii-no-more' Reviewed-by: Simon McVittie (smcv) commit 074c8beb7e9e605eb7bbb669756d98a3d814a2f0 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 15 21:02:14 2010 -0300 Generate docs properly. Make sure doxygen skips some macros such as TELEPATHY_QT4_EXPORT properly. Also some minor tweaks. doxygen.cfg.in | 78 ++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 65 insertions(+), 13 deletions(-) commit c38cdfe4f54f562ef7a13d5306396217f71dc9e4 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 17 00:42:28 2010 -0300 Removed usage of QString::fromAscii. Replace usage of QString::fromAscii with QLatin1String. TelepathyQt4/connection-manager.cpp | 8 +++--- TelepathyQt4/message.cpp | 20 +++++++------- TelepathyQt4/text-channel.cpp | 44 +++++++++++++++---------------- tests/dbus/chan-conference.cpp | 4 +-- tests/dbus/client.cpp | 4 +-- tests/dbus/cm-basics.cpp | 2 +- tests/dbus/stateful-proxy.cpp | 12 ++++----- tests/dbus/streamed-media-chan-call.cpp | 4 +-- tests/dbus/streamed-media-chan.cpp | 4 +-- tests/dbus/text-chan.cpp | 38 +++++++++++++------------- 10 files changed, 70 insertions(+), 70 deletions(-) commit 0e33de19dce092a3a82f83687dc10c0fddd50d6a Merge: 4b89d90 7f3671c Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 17 14:05:19 2010 -0300 Merge branch 'qt-no-cast-from-ascii-support' Reviewed-by: Simon McVittie (smcv) commit 7f3671cac89bad564f0302057b560c3c37bb1e44 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 17 13:51:16 2010 -0300 Make QT_NO_CAST_FROM_ASCII mandatory. configure.ac | 1 + 1 file changed, 1 insertion(+) commit 6104d58bd98e3ca2e2310b630934f947f3b4b632 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 17 13:51:01 2010 -0300 Removed AM_CFLAGS from cpp specific makefiles. tests/lib/Makefile.am | 1 - 1 file changed, 1 deletion(-) commit 1a4d5c7dd2fc5a3acb5830ccdbbffc4c36190740 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 17 13:50:36 2010 -0300 Removed AM_CXXFLAGS from glib specific makefiles. tests/lib/glib/Makefile.am | 1 - tests/lib/glib/callable/Makefile.am | 2 -- 2 files changed, 3 deletions(-) commit be5cce2182171896cf70884d7f25fa198035a07e Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 17 03:30:42 2010 -0300 Added support to QT_NO_CAST_FROM_ASCII. TelepathyQt4/account-manager.cpp | 21 ++- TelepathyQt4/account.cpp | 224 ++++++++++++----------- TelepathyQt4/capabilities-base.cpp | 10 +- TelepathyQt4/channel-dispatch-operation.cpp | 29 +-- TelepathyQt4/channel-factory.cpp | 10 +- TelepathyQt4/channel-request.cpp | 20 +- TelepathyQt4/channel.cpp | 212 ++++++++++----------- TelepathyQt4/channel.h | 18 +- TelepathyQt4/client-registrar.cpp | 29 +-- TelepathyQt4/connection-capabilities.cpp | 2 +- TelepathyQt4/connection-manager.cpp | 17 +- TelepathyQt4/connection.cpp | 100 +++++----- TelepathyQt4/contact-manager.cpp | 45 +++-- TelepathyQt4/contact.cpp | 27 +-- TelepathyQt4/dbus-proxy.cpp | 14 +- TelepathyQt4/file-transfer-channel.cpp | 26 +-- TelepathyQt4/incoming-file-transfer-channel.cpp | 18 +- TelepathyQt4/key-file.cpp | 42 ++--- TelepathyQt4/manager-file.cpp | 43 ++--- TelepathyQt4/method-invocation-context.h | 2 +- TelepathyQt4/optional-interface-factory.h | 4 +- TelepathyQt4/outgoing-file-transfer-channel.cpp | 14 +- TelepathyQt4/pending-channel-request.cpp | 14 +- TelepathyQt4/pending-contacts.cpp | 5 +- TelepathyQt4/pending-handles.cpp | 24 +-- TelepathyQt4/pending-operation.cpp | 2 +- TelepathyQt4/readiness-helper.cpp | 6 +- TelepathyQt4/streamed-media-channel.cpp | 118 ++++++------ TelepathyQt4/text-channel.cpp | 28 +-- examples/accounts/account-item.cpp | 15 +- examples/accounts/accounts-window.cpp | 24 +-- examples/call/call-handler.cpp | 10 +- examples/call/call-widget.cpp | 16 +- examples/call/call-window.cpp | 19 +- examples/call/main.cpp | 4 +- examples/file-transfer/receiver-channel.cpp | 2 +- examples/file-transfer/receiver.cpp | 16 +- examples/file-transfer/sender.cpp | 16 +- examples/roster/main.cpp | 5 +- examples/roster/roster-item.cpp | 10 +- examples/roster/roster-widget.cpp | 10 +- examples/roster/roster-window.cpp | 11 +- tests/dbus/account-basics.cpp | 44 ++--- tests/dbus/account-channel-dispatcher.cpp | 28 +-- tests/dbus/chan-basics.cpp | 24 +-- tests/dbus/chan-group.cpp | 78 ++++---- tests/dbus/client.cpp | 55 +++--- tests/dbus/cm-basics.cpp | 14 +- tests/dbus/conn-basics.cpp | 4 +- tests/dbus/conn-capabilities.cpp | 4 +- tests/dbus/conn-requests.cpp | 10 +- tests/dbus/conn-roster-groups.cpp | 30 +-- tests/dbus/conn-roster.cpp | 27 +-- tests/dbus/contacts-capabilities.cpp | 7 +- tests/dbus/contacts.cpp | 121 ++++++------ tests/dbus/handles.cpp | 7 +- tests/dbus/stateful-proxy.cpp | 12 +- tests/dbus/streamed-media-chan-call.cpp | 24 +-- tests/dbus/streamed-media-chan.cpp | 42 ++--- tests/dbus/text-chan.cpp | 4 +- tests/key-file.cpp | 35 ++-- tests/manager-file.cpp | 68 +++---- 62 files changed, 1000 insertions(+), 920 deletions(-) commit 4b89d907015b3e5493f7cd9b4f03c1d37d95b569 Merge: 626569c ce6e2bb Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 15 19:23:08 2010 -0300 Merge branch 'call' Reviewed-by: Senko Rasic (ptlo) commit ce6e2bb388510823d93567086a497a143655d971 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 24 00:10:50 2010 -0300 streamed-media-chan-call test: Added tests for StreamedMediaChannel Call support. tests/dbus/Makefile.am | 5 + tests/dbus/streamed-media-chan-call.cpp | 640 +++++++++++++++++++++++++++++++ 2 files changed, 645 insertions(+) commit 4b2e86f5aa734276b754bc0b83c3eaa35d7a1f11 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 23 22:18:47 2010 -0300 streamed-media-channel: Use const and full qualified param for MediaStream::remoteSendingStateChanged signal. TelepathyQt4/streamed-media-channel.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e1dd7f69c2e0eba43983d983eac0520d467441fa Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 24 00:45:49 2010 -0300 streamed-media-channel: Make sure we don't create contents with the same name (at least contents created internally). TelepathyQt4/streamed-media-channel-internal.h | 2 ++ TelepathyQt4/streamed-media-channel.cpp | 8 +++++--- 2 files changed, 7 insertions(+), 3 deletions(-) commit a33f9fb436d244db01779fb7e9feaaf6b89aaf86 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 24 00:46:48 2010 -0300 streamed-media-channel: Added requestStream/s support (Call support). TelepathyQt4/streamed-media-channel-internal.h | 8 +++ TelepathyQt4/streamed-media-channel.cpp | 67 +++++++++++++++++++++--- TelepathyQt4/streamed-media-channel.h | 5 ++ 3 files changed, 74 insertions(+), 6 deletions(-) commit a022d38ae4c0930f82174e60eec447e37cc5dbee Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 23 22:05:33 2010 -0300 streamed-media-channel: Added requestContent support (Call support). TelepathyQt4/streamed-media-channel-internal.h | 8 ++++ TelepathyQt4/streamed-media-channel.cpp | 51 +++++++++++++++++++++++- TelepathyQt4/streamed-media-channel.h | 6 +++ 3 files changed, 63 insertions(+), 2 deletions(-) commit d998490cc09a575ef20e62a3bd970a2f0467569a Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 23 22:04:47 2010 -0300 streamed-media-channel: Proper handle Call.Stream.SendersChanged. TelepathyQt4/streamed-media-channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e74b0d88c3918df1452c740e62c51830149df98e Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 23 22:04:35 2010 -0300 streamed-media-channel: Added debug to Call.Stream.SendersChanged slot. TelepathyQt4/streamed-media-channel.cpp | 2 ++ 1 file changed, 2 insertions(+) commit f30cfa9098102c13eb014b7af5564f08dd64de16 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 16 16:24:17 2010 -0200 streamed-media-channel: Implemented MediaStream::requestDirection (Call support). TelepathyQt4/streamed-media-channel.cpp | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) commit e65ee9084dbd163068bd3c49d175a79b9027ec74 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 16 16:21:27 2010 -0200 pending-operation: Added new PendingComposite operation which is a composition of 1-N pending operations. TelepathyQt4/Makefile.am | 1 + TelepathyQt4/PendingComposite | 13 +++++++++++ TelepathyQt4/pending-operation.cpp | 36 ++++++++++++++++++++++++++++++ TelepathyQt4/simple-pending-operations.h | 17 ++++++++++++++ 4 files changed, 67 insertions(+) commit a892733979f7587780c2d52f3b01a1e97d1403c3 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 16 16:00:38 2010 -0200 streamed-media-channel: Added proxy class to forward MediaStream.Call.SendersChanged signal which uses internally declared structs from tp-future. TelepathyQt4/streamed-media-channel-internal.h | 22 ++++++++++++ TelepathyQt4/streamed-media-channel.cpp | 45 ++++++++++++------------ TelepathyQt4/streamed-media-channel.h | 2 -- 3 files changed, 44 insertions(+), 25 deletions(-) commit adc31469a550eed67cb60fb46c9c2e9e1849d97e Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 16 15:57:46 2010 -0200 streamed-media-channel: Moved Private struct/class declaration to streamed-media-channel-internal.h. This change is needed as we need to create a proxy QObject to forward slots/signals from internal tp-future which cannot be declared in a public header (see next-commit). TelepathyQt4/Makefile.am | 3 + TelepathyQt4/streamed-media-channel-internal.h | 206 ++++++++++++++++++++++++ TelepathyQt4/streamed-media-channel.cpp | 178 +------------------- 3 files changed, 211 insertions(+), 176 deletions(-) commit 9695e3d6c7165da7ebdf44f89bb49c09c7e91e57 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 16 15:24:18 2010 -0200 channel-factory: ChannelFactory now creates StreamedMediaChannel objects for channels of type Call. TelepathyQt4/channel-factory.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit af0dbfa95b30ecd0b965480218c1e24665a65274 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 16 15:17:39 2010 -0200 streamed-media-channel: Avoid adding the same SM stream more than once. TelepathyQt4/streamed-media-channel.cpp | 37 ++++++++++++++++++++++--------- TelepathyQt4/streamed-media-channel.h | 1 + 2 files changed, 27 insertions(+), 11 deletions(-) commit 7c1d6d922cf78ab3850014d93478c4c927d4d3cf Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 16 15:17:17 2010 -0200 streamed-media-channel: Proper connect contentRemoved signal. TelepathyQt4/streamed-media-channel.cpp | 4 ++-- TelepathyQt4/streamed-media-channel.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) commit 8b89d88a1a008ed82610b5807394661a313e21b7 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 26 06:04:42 2010 -0300 Add 'future/call-cm' example CM from telepathy-glib configure.ac | 1 + tests/lib/glib/Makefile.am | 1 + tests/lib/glib/future/Makefile.am | 2 +- tests/lib/glib/future/call/Makefile.am | 45 + tests/lib/glib/future/call/call-channel.c | 1624 ++++++++++++++++++++++++++ tests/lib/glib/future/call/call-channel.h | 74 ++ tests/lib/glib/future/call/call-content.c | 369 ++++++ tests/lib/glib/future/call/call-content.h | 81 ++ tests/lib/glib/future/call/call-manager.c | 537 +++++++++ tests/lib/glib/future/call/call-manager.h | 71 ++ tests/lib/glib/future/call/call-stream.c | 705 +++++++++++ tests/lib/glib/future/call/call-stream.h | 82 ++ tests/lib/glib/future/call/cm.c | 129 ++ tests/lib/glib/future/call/cm.h | 73 ++ tests/lib/glib/future/call/conn.c | 421 +++++++ tests/lib/glib/future/call/conn.h | 78 ++ tests/lib/glib/future/call/manager-file.py | 23 + tests/lib/glib/future/extensions/channel.xml | 2 + tests/lib/glib/future/extensions/misc.xml | 7 + 19 files changed, 4324 insertions(+), 1 deletion(-) commit 96b30edec077564e4aadff49d8ccec8677849902 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 2 15:18:18 2010 -0200 streamed-media-channel: Let's not deprecate some useful methods. TelepathyQt4/streamed-media-channel.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit 442ac4eec710c223610b9c67886591ccfad57712 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 28 13:27:35 2010 -0200 streamed-media-channel: Implemented StreamedMediaChannel::handlerStreamingRequired (Call support). TelepathyQt4/streamed-media-channel.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) commit 6f0ff116c56b06cc647b3c31a07978ddd873df24 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 28 13:16:21 2010 -0200 streamed-media-channel: Implemented StreamedMediaChannel::hangupCall and updated params to fit Call.Hangup (Call support). TelepathyQt4/streamed-media-channel.cpp | 7 ++++--- TelepathyQt4/streamed-media-channel.h | 3 ++- 2 files changed, 6 insertions(+), 4 deletions(-) commit 3a34487c7a1f7f2b8c665e40e10d12779255ef60 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 28 13:12:30 2010 -0200 streamed-media-channel: Added StreamedMediaChannel::StateChangeReason enum to mimic CallStateChangeReason enum defined in future-constants.h (Call support). TelepathyQt4/streamed-media-channel.h | 6 ++++++ 1 file changed, 6 insertions(+) commit 3a5eaf9226d01494e72badbdeede762e4f8da1a7 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 28 13:07:45 2010 -0200 streamed-media-channel: Implemented StreamedMediaChannel::acceptCall (Call support). TelepathyQt4/streamed-media-channel.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 6844f2c47e8b610a89949713c6a4bd49cfc3d6c6 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 28 13:07:34 2010 -0200 streamed-media-channel: Return PendingFailure for StreamedMediaChannel::removeStream/s and updated TODO (Call support). TelepathyQt4/streamed-media-channel.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) commit a22f6943b2cf65a557490182364872911e598506 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 28 12:57:46 2010 -0200 streamed-media-channel: Implemented some missing MediaStream methods (Call support). TelepathyQt4/streamed-media-channel.cpp | 192 ++++++++++++++++++++++++++----- 1 file changed, 163 insertions(+), 29 deletions(-) commit ac6bfd53e9a374fd1d03afe626daaaa215cd4ef4 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 28 11:58:34 2010 -0200 streamed-media-channel: Added initial Call interface support. TelepathyQt4/streamed-media-channel.cpp | 677 +++++++++++++++++++++++++++++-- TelepathyQt4/streamed-media-channel.h | 27 ++ 2 files changed, 679 insertions(+), 25 deletions(-) commit cba18ceed7250faa7e3519245f8558acd60e6cdb Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 25 13:44:33 2010 -0200 streamed-media-channel: Use const & where possible without breaking API/ABI. TelepathyQt4/streamed-media-channel.cpp | 4 ++-- TelepathyQt4/streamed-media-channel.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit f0b04e50bf08c25858becbf074c2b3d9dd0c573a Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 19 11:57:15 2010 -0200 streamed-media-channel: Mark deprecated methods as deprecated. The warnings are not activated yet. Missing build flag TELEPATHY_QT4_DEPRECATED_WARNINGS. TelepathyQt4/streamed-media-channel.h | 41 ++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 19 deletions(-) commit d715c7f2b61643e055f54dae81b38910d99a7eb7 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Jan 17 18:16:46 2010 -0200 global.h: Added TELEPATHY_QT4_DEPRECATED macro. TelepathyQt4/global.h | 57 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) commit 05a4048a227889724724be5379fa1c370a85ce71 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Dec 21 00:06:38 2009 -0200 streamed-media-channel: Refactor to allow Call interface support to be added. TelepathyQt4/streamed-media-channel.cpp | 1281 ++++++++++++++++++++++++------- TelepathyQt4/streamed-media-channel.h | 171 ++++- TelepathyQt4/types.h | 2 + 3 files changed, 1126 insertions(+), 328 deletions(-) commit b8369ad4c2e89d5e2bd9f960e256d38a1901f76c Author: Andre Moreira Magalhaes (andrunko) Date: Sun Dec 20 23:56:16 2009 -0200 streamed-media-channel: Moved Private::callInterface declaration to where it belongs. TelepathyQt4/streamed-media-channel.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit 1e24f3a433e47267416be880795630ef84be4f95 Author: Simon McVittie Date: Thu Dec 3 18:57:42 2009 +0000 StreamedMediaChannel: hook up the future Call interface, to check that it links correctly TelepathyQt4/streamed-media-channel.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) commit a400e17f925518ed5a1ca5a502287e94bdf7bd8b Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 26 05:19:19 2010 -0300 Generate bindings for Call interface. TelepathyQt4/future-channel.xml | 2 ++ TelepathyQt4/future-misc.xml | 7 +++++++ 2 files changed, 9 insertions(+) commit 626569cc126a7562649b03f3681a366c1c34856f Merge: c57b9c3 d9caff2 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 15 10:45:25 2010 -0300 Merge branch 'conference' Reviewed-by: Senko Rasic (ptlo) commit d9caff2b6d4ab1b6b1bd691f7e665147736673a0 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 8 14:57:16 2010 -0300 Removed usage of telepathy-glib.h (not included in old tp-glib versions). tests/lib/glib/future/conference/chan.c | 6 ++++-- tests/lib/glib/future/conference/chan.h | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) commit 1f00b5b93fbca7bd570c47207363fb200e11b360 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 5 15:43:18 2010 -0300 chan-conference test: Improved test coverage. tests/dbus/chan-conference.cpp | 67 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 65 insertions(+), 2 deletions(-) commit 78fb5465d0a9ae0e3aca252ee35c6b7bf9c8c566 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 5 15:42:25 2010 -0300 channel: Proper emit conferenceChannelMerged/Removed signals. TelepathyQt4/channel.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit 21b9a369d332d66aba31bf216648837fbd4d2890 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 5 12:36:08 2010 -0300 future conference channel: Moved private members initialization to constructed. Moved private members initialization to constructed in case they weren't already set. tests/lib/glib/future/conference/chan.c | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) commit 578810cb522b789c3413bc81eab76c8a2a82960d Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 5 12:10:43 2010 -0300 future conference channel: Remove Splittable support. tests/lib/glib/future/conference/chan.c | 23 ----------------------- 1 file changed, 23 deletions(-) commit 7b39db8885f8cbc2f5bb9800a6576aebc99f6dbb Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 5 11:53:06 2010 -0300 future conference channel: Added Conference immutable properties to D-Bus properties. tests/lib/glib/future/conference/chan.c | 6 ++++++ 1 file changed, 6 insertions(+) commit 9c3a7b2569610978311d984306dc4beb529608b6 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 5 11:22:17 2010 -0300 channel: Added docs to conference methods. TelepathyQt4/channel.cpp | 99 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) commit 000c11fa8b2ab58034e90fe308509b936a18bc59 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 3 15:21:39 2010 -0300 channel: Renamed ConferenceInitialContacts to ConferenceInitialInviteeContacts where appropriate. TelepathyQt4/channel.cpp | 21 +++++++++++---------- TelepathyQt4/channel.h | 4 ++-- 2 files changed, 13 insertions(+), 12 deletions(-) commit 9a68556c0bae90ef0bf2c41de5ec05c51701e63d Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 3 15:16:17 2010 -0300 channel: Introspecting Conference initial invitee contacts is now a feature (FeatureConferenceInitialContacts). TelepathyQt4/channel.cpp | 64 +++++++++++++++++++++++----------------------- TelepathyQt4/channel.h | 3 ++- 2 files changed, 34 insertions(+), 33 deletions(-) commit 60ae1b05cd720a9b52ff48dbb236f43b8702e837 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 3 15:00:19 2010 -0300 account: Added InitialInviteeHandles/IDs support to convenience API to create conference channels. TelepathyQt4/account.cpp | 141 +++++++++++++++++++++++++++++++++++++++------- TelepathyQt4/account.h | 21 +++++++ 2 files changed, 141 insertions(+), 21 deletions(-) commit c0b0e57dd36d3a3f0137792f7b29edb5a68cd16a Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 2 21:48:55 2010 -0300 chan-conference test: Added test cases for Conference support. tests/dbus/Makefile.am | 5 + tests/dbus/chan-conference.cpp | 221 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 226 insertions(+) commit 5fa23c9e7e2ae7109b61e549e0cacfcbbe7a5a0a Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 2 13:52:27 2010 -0300 Added glib conference channel example implementation. This implementation can be used by tests that want to test the conference support. configure.ac | 1 + tests/lib/glib/Makefile.am | 1 + tests/lib/glib/future/Makefile.am | 2 +- tests/lib/glib/future/conference/Makefile.am | 13 + tests/lib/glib/future/conference/chan.c | 631 ++++++++++++++++++++++++++ tests/lib/glib/future/conference/chan.h | 79 ++++ 6 files changed, 726 insertions(+), 1 deletion(-) commit 0c168331ce4898e7aed580d2dcab9dbc3be3ca86 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 2 13:51:58 2010 -0300 Generate glib service side code for Conference/MergeableConference/Splittable interfaces. tests/lib/glib/future/extensions/channel.xml | 4 ++++ 1 file changed, 4 insertions(+) commit da28649cbc0a925d20120153a5f44e0b3b3fe930 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 2 21:38:22 2010 -0300 channel: Fixed/Added debug. TelepathyQt4/channel.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit eaaa81331f84925e0fce5832b46626f3a9c2742a Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 2 21:38:05 2010 -0300 channel: Initialize Private::conference member. TelepathyQt4/channel.cpp | 1 + 1 file changed, 1 insertion(+) commit 974a259dada3663344fe54035f269603dfa9a035 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 2 13:50:39 2010 -0300 channel: Use full-qualified names for conference related signals. TelepathyQt4/channel.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 8beefa69ca6cb0b851ea071c60bf252b91ecf77a Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 2 10:49:37 2010 -0300 account: Added convenience API to create conference channels. TelepathyQt4/account.cpp | 69 ++++++++++++++++++++++++++++++++++++++++++++++ TelepathyQt4/account.h | 14 ++++++++++ 2 files changed, 83 insertions(+) commit ac0013af991b0eec4e712706572545aeb3d70ce2 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 1 13:52:13 2010 -0300 channel: Renamed conferenceInitialContacts to conferenceInitialInviteeContacts. TelepathyQt4/channel.cpp | 2 +- TelepathyQt4/channel.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 8ab273eb05cfec92fc7f9a371cc24ad9477f0108 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 1 13:51:08 2010 -0300 channel: Implemented conferenceInitialContacts. TelepathyQt4/channel.cpp | 50 ++++++++++++++++++++++++++++++++++++++++++++-- TelepathyQt4/channel.h | 1 + 2 files changed, 49 insertions(+), 2 deletions(-) commit abc5eb19f9d766ae2bb17f18488ea5761c5dd12f Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 1 12:48:12 2010 -0300 channel: Renamed hasConferenceMergeableInterface to hasMergeableConferenceInterface. Renamed hasConferenceMergeableInterface to hasMergeableConferenceInterface to follow the interface name. TelepathyQt4/channel.cpp | 4 ++-- TelepathyQt4/channel.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) commit 21f68161dc479cfa16de3736d72993dcf0eaa65c Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 1 12:43:33 2010 -0300 channel: Implemented splitChannel. TelepathyQt4/channel.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit 9325ccbb70e7fd4a5f89e3ef41925f34f4ac62e0 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 1 12:43:14 2010 -0300 channel: Implemented conferenceMergeChannel. TelepathyQt4/channel.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) commit 7fb32636b7c0e726cd0677b70f3cda9f4e299443 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 1 12:36:55 2010 -0300 channel: Splittable.Split does not receive any param, updating splitChannel method signature. TelepathyQt4/channel.cpp | 2 +- TelepathyQt4/channel.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 9723ea2187b9f69ce6350b9fb927f49b040af536 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 1 12:34:44 2010 -0300 channel: Implemented conferenceInitialChannels. TelepathyQt4/channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b9e072c421a36ea534a364fcbbc532e6dd4bcc4a Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 1 12:34:26 2010 -0300 channel: Implemented conferenceChannels. TelepathyQt4/channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 30ac718f4e3c192f4fd0d37f1438849ff39be062 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 1 12:34:11 2010 -0300 channel: Implemented conferenceSupportsNonMerges. TelepathyQt4/channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b29172d38bb07af3ddccef99c2310afb876fc5ad Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 1 12:28:24 2010 -0300 channel: Implemented conference introspection (missing retrieving initial contacts). TelepathyQt4/channel.cpp | 107 +++++++++++++++++++++++++++++++++++++++++++++- TelepathyQt4/channel.h | 4 ++ 2 files changed, 110 insertions(+), 1 deletion(-) commit e9ec8607698e4c299ce7fca305a50107f605a387 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 1 12:31:56 2010 -0300 channel: Implemented hasSplittableInterface. TelepathyQt4/channel.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit bdc9849021b50cb3bcc9618158be92a05fe5b8f6 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 1 12:31:39 2010 -0300 channel: Implemented hasConferenceMergeableInterface. TelepathyQt4/channel.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit be53eddac752c029483a450cbccceb571a689b05 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 1 12:31:24 2010 -0300 channel: Implemented hasConferenceInterface. TelepathyQt4/channel.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 6ab006bc3e63e32b67c8b533425871f8fc6b18b2 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 26 01:13:43 2010 -0300 Channel: Only set ready if Conference is not being introspected. TelepathyQt4/channel.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) commit dd036a0020d2d8142044016efa47632a83e911bb Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 26 01:11:40 2010 -0300 Channel: Added stub Private::introspectConference method and add it to introspection queue if Conference is supported. TelepathyQt4/channel.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) commit 35b467aab725eedad35b9a5349bc7990b81b290a Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 26 01:09:52 2010 -0300 Channel: Added Private::splittableInterface method. This methods should be moved to Channel when Splittable gets undrafted. TelepathyQt4/channel.cpp | 7 +++++++ 1 file changed, 7 insertions(+) commit a678cd97ec58d7f9a7079ee0292cb3b3c1258847 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 26 01:08:26 2010 -0300 Channel: Added Private::mergeableConferenceInterface method. This methods should be moved to Channel when MergeableConference gets undrafted. TelepathyQt4/channel.cpp | 7 +++++++ 1 file changed, 7 insertions(+) commit e50856e449753c1697feb01c26db6a11949a2257 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 26 01:05:29 2010 -0300 Channel: Added Private::conferenceInterface method. This methods should be moved to Channel when Conference gets undrafted. TelepathyQt4/channel.cpp | 7 +++++++ 1 file changed, 7 insertions(+) commit f93b6d63fbd31c0470059c08078018cffaddb590 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 25 12:46:39 2010 -0300 Channel: Splittable is not an interface on the Conference interface. TelepathyQt4/channel.cpp | 4 ++-- TelepathyQt4/channel.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit f1e6698f69a6088d9cf5626205cb5e0c15d2c989 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 25 12:23:36 2010 -0300 Channel: Added stub Conference/Mergeable/Splittable support methods. TelepathyQt4/channel.cpp | 51 +++++++++++++++++++++++++++++++++++++++ TelepathyQt4/channel.h | 15 ++++++++++++ TelepathyQt4/future-channel.xml | 6 ++--- 3 files changed, 69 insertions(+), 3 deletions(-) commit 67ceb434e2d8117a15ae0bb8215d2e18e6bf7d4f Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 26 06:45:11 2010 -0300 Generate service-side code for the future Conference/Splittable/Mergeable interfaces. TelepathyQt4/future-channel.xml | 7 +++++++ 1 file changed, 7 insertions(+) commit c57b9c314aca8657e6c71e9eccd9b06e1d69c383 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 8 14:52:05 2010 -0300 Proper create _gen dir before touch future-stamp. TelepathyQt4/Makefile.am | 1 + 1 file changed, 1 insertion(+) commit 374b174b0e5201819135d6a59e0d5f9596aed7b8 Merge: bc17df4 91928b8 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 5 15:21:31 2010 -0300 Merge branch 'channel-racy' Reviewed-by: Will Thompson (wjt) commit 91928b86ddee2ae7e9de762316b1b436573a0fd3 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 5 15:15:43 2010 -0300 channel: Fixed bug when channel was never getting ready. If buildContacts was called and there were no contacts to build, the buildingContacts member was never being updated, causing the channel to never become ready. TelepathyQt4/channel.cpp | 2 ++ 1 file changed, 2 insertions(+) commit bc17df40918d1a360787fd10db2c1e818ed272df Merge: 70773d0 6b4002a Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 3 15:34:36 2010 -0300 Merge branch 'channel-refactoring' Reviewed-by: Simon McVittie (smcv) commit 70773d060f7c2e63d493ff5d099095d03c916142 Merge: 934525a 7a2cb26 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 3 15:34:29 2010 -0300 Merge branch 'future-support' Reviewed-by: Simon McVittie (smcv) commit 934525aa2aac1b04e33c2badeef06d05e07c4e3c Merge: 2a5cbaf 6c33cb6 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 3 15:34:18 2010 -0300 Merge branch 'glib-tests-extensions' Reviewed-by: Simon McVittie (smcv) commit 2a5cbaf14c93060085b8b586ff922fc1a9ee0308 Merge: 33c15cb 18ed126 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 3 15:34:10 2010 -0300 Merge branch 'codegen-improvements' Reviewed-by: Simon McVittie (smcv) commit 33c15cb7d6cc2052be6c25212d02a7f8dca9b18d Merge: 259c175 eb7657a Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 3 15:33:57 2010 -0300 Merge branch 'tests-dirs-reorganization' Reviewed-by: Simon McVittie (smcv) commit 259c175d9870bf777aca2b6f8ccf9d334dea01eb Merge: 6ce196d 8f1c98a Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 3 15:33:30 2010 -0300 Merge branch 'spec-0.19.1' Reviewed-by: Simon McVittie (smcv) commit 6b4002aa1b9f348c3b13e0171da25762b71106c9 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 26 01:02:28 2010 -0300 Channel: Moved continueIntrospection to Private::continueIntrospection. TelepathyQt4/channel.cpp | 56 ++++++++++++++++++++++++---------------------- TelepathyQt4/channel.h | 2 -- 2 files changed, 29 insertions(+), 29 deletions(-) commit 4e3268eb008ccfff72a91f36fde38dc7dd9bbc56 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 26 00:49:38 2010 -0300 Channel: Let's call setReady from only one place, so it's easier to track when the introspection finished. TelepathyQt4/channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 7a2cb2678e6d128dcfde93e93206fdd553d325c7 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 26 05:18:13 2010 -0300 spec: Add some missing types that trip up the Qt4 codegen. Needs to update spec to include this. Patch from Simon McVittie (smcv) spec/Call_Content_Interface_Media.xml | 2 +- spec/Channel_Type_Call.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 79a7512527ac92f0942339214c5a191a22fdfaf8 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 26 05:10:21 2010 -0300 Added support for generating code for draft interfaces. The classes that want to implement draft interfaces should use future-* to do so and update future-*.xml accordingly. Patch from Simon McVittie (smcv) TelepathyQt4/Makefile.am | 77 +++++++++++++++++++++++++++++++++++- TelepathyQt4/future-channel.xml | 7 ++++ TelepathyQt4/future-interfaces.xml | 13 ++++++ TelepathyQt4/future-internal.h | 33 ++++++++++++++++ TelepathyQt4/future-misc.xml | 7 ++++ TelepathyQt4/future.cpp | 28 +++++++++++++ TelepathyQt4/types.cpp | 18 +++++++++ TelepathyQt4/types.h | 2 + tests/lib/glib/Makefile.am | 3 +- tools/qt4-types-gen.py | 26 ++++-------- 10 files changed, 193 insertions(+), 21 deletions(-) commit 6c33cb6a63f2a5115c28f6c1e1e94efee966b06c Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 26 03:26:43 2010 -0300 Added glib tests future extensions library. The library is intended to be used by regression tests wanting to test new features not included in telepathy-glib upstream. Patch from Simon McVittie (smcv) configure.ac | 6 ++ tests/lib/glib/Makefile.am | 5 +- tests/lib/glib/future/Makefile.am | 1 + tests/lib/glib/future/extensions/Makefile.am | 104 +++++++++++++++++++++++++ tests/lib/glib/future/extensions/all.xml | 11 +++ tests/lib/glib/future/extensions/channel.xml | 7 ++ tests/lib/glib/future/extensions/extensions.c | 6 ++ tests/lib/glib/future/extensions/extensions.h | 18 +++++ tests/lib/glib/future/extensions/misc.xml | 7 ++ 9 files changed, 163 insertions(+), 2 deletions(-) commit 8829d7208422a423e77fef6290592da95c774ff5 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 26 03:22:50 2010 -0300 Added glib gen tools so we can generate code for glib regression tests extensions. Patch from Simon McVittie (smcv) tools/Makefile.am | 27 ++ tools/c-constants-gen.py | 154 +++++++ tools/glib-ginterface-gen.py | 802 +++++++++++++++++++++++++++++++++++++ tools/glib-gtypes-generator.py | 291 ++++++++++++++ tools/glib-interfaces-gen.py | 119 ++++++ tools/glib-signals-marshal-gen.py | 55 +++ tools/libglibcodegen.py | 172 ++++++++ 7 files changed, 1620 insertions(+) commit 18ed126f1098462fcd21d20a0898ba099e178fb5 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 26 03:51:06 2010 -0300 libtpcodegen.py: Added get_deprecated method. Patch from Simon McVittie (smcv) tools/libtpcodegen.py | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 9fedfea1504432b6fe0ca3796fb4a2429e2730d9 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 26 03:50:44 2010 -0300 libtpcodegen.py: Removed unused methods. Patch from Simon McVittie (smcv) tools/libtpcodegen.py | 26 -------------------------- 1 file changed, 26 deletions(-) commit eb7657a7119609ef7b65d1648ebaf42dde959265 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 26 04:34:22 2010 -0300 Fix distcheck. tests/lib/glib/csh/Makefile.am | 1 + tests/lib/glib/echo2/Makefile.am | 1 + 2 files changed, 2 insertions(+) commit 3f22f562ef51b0cf9682f193e1eb522138460f3d Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 26 02:29:56 2010 -0300 Reorganize tests library directory structure. Put all glib test example cms into tests/lib/glib and the python example account-manager.py into tests/lib/python. Also makes all tests that depends on glib link against libtp-glib-tests.la instead of linking to individual example cms. configure.ac | 12 +- tests/dbus-1/services/account-manager.service.in | 2 +- tests/dbus/Makefile.am | 35 +- tests/dbus/chan-basics.cpp | 2 +- tests/dbus/chan-group.cpp | 2 +- tests/dbus/client.cpp | 4 +- tests/dbus/cm-basics.cpp | 2 +- tests/dbus/conn-basics.cpp | 2 +- tests/dbus/conn-capabilities.cpp | 2 +- tests/dbus/conn-requests.cpp | 2 +- tests/dbus/conn-roster-groups.cpp | 2 +- tests/dbus/conn-roster.cpp | 2 +- tests/dbus/contacts-capabilities.cpp | 2 +- tests/dbus/contacts.cpp | 4 +- tests/dbus/handles.cpp | 2 +- tests/dbus/streamed-media-chan.cpp | 2 +- tests/dbus/text-chan.cpp | 6 +- tests/lib/Makefile.am | 48 +- tests/lib/account-manager.py | 322 ----- tests/lib/callable/Makefile.am | 48 - tests/lib/callable/conn.c | 423 ------ tests/lib/callable/conn.h | 78 - tests/lib/callable/connection-manager.c | 130 -- tests/lib/callable/connection-manager.h | 73 - tests/lib/callable/manager-file.py | 23 - tests/lib/callable/media-channel.c | 1460 ------------------- tests/lib/callable/media-channel.h | 74 - tests/lib/callable/media-manager.c | 500 ------- tests/lib/callable/media-manager.h | 71 - tests/lib/callable/media-stream.c | 650 --------- tests/lib/callable/media-stream.h | 88 -- tests/lib/contactlist/Makefile.am | 38 - tests/lib/contactlist/conn.c | 590 -------- tests/lib/contactlist/conn.h | 65 - tests/lib/contactlist/connection-manager.c | 116 -- tests/lib/contactlist/connection-manager.h | 62 - tests/lib/contactlist/contact-list-manager.c | 1580 --------------------- tests/lib/contactlist/contact-list-manager.h | 107 -- tests/lib/contactlist/contact-list.c | 635 --------- tests/lib/contactlist/contact-list.h | 118 -- tests/lib/contactlist/manager-file.py | 19 - tests/lib/contacts-conn.c | 769 ---------- tests/lib/contacts-conn.h | 122 -- tests/lib/csh/Makefile.am | 25 - tests/lib/csh/conn.c | 340 ----- tests/lib/csh/conn.h | 66 - tests/lib/csh/room-manager.c | 431 ------ tests/lib/csh/room-manager.h | 62 - tests/lib/csh/room.c | 854 ----------- tests/lib/csh/room.h | 97 -- tests/lib/debug.h | 3 - tests/lib/echo/Makefile.am | 25 - tests/lib/echo/chan.c | 531 ------- tests/lib/echo/chan.h | 58 - tests/lib/echo/conn.c | 194 --- tests/lib/echo/conn.h | 55 - tests/lib/echo/connection-manager.c | 95 -- tests/lib/echo/connection-manager.h | 53 - tests/lib/echo/im-manager.c | 389 ----- tests/lib/echo/im-manager.h | 54 - tests/lib/echo2/Makefile.am | 25 - tests/lib/echo2/chan.c | 589 -------- tests/lib/echo2/chan.h | 58 - tests/lib/echo2/conn.c | 198 --- tests/lib/echo2/conn.h | 55 - tests/lib/echo2/im-manager.c | 389 ----- tests/lib/echo2/im-manager.h | 54 - tests/lib/glib/Makefile.am | 38 + tests/lib/glib/callable/Makefile.am | 48 + tests/lib/glib/callable/conn.c | 423 ++++++ tests/lib/glib/callable/conn.h | 78 + tests/lib/glib/callable/connection-manager.c | 130 ++ tests/lib/glib/callable/connection-manager.h | 73 + tests/lib/glib/callable/manager-file.py | 23 + tests/lib/glib/callable/media-channel.c | 1460 +++++++++++++++++++ tests/lib/glib/callable/media-channel.h | 74 + tests/lib/glib/callable/media-manager.c | 500 +++++++ tests/lib/glib/callable/media-manager.h | 71 + tests/lib/glib/callable/media-stream.c | 650 +++++++++ tests/lib/glib/callable/media-stream.h | 88 ++ tests/lib/glib/contactlist/Makefile.am | 38 + tests/lib/glib/contactlist/conn.c | 590 ++++++++ tests/lib/glib/contactlist/conn.h | 65 + tests/lib/glib/contactlist/connection-manager.c | 116 ++ tests/lib/glib/contactlist/connection-manager.h | 62 + tests/lib/glib/contactlist/contact-list-manager.c | 1580 +++++++++++++++++++++ tests/lib/glib/contactlist/contact-list-manager.h | 107 ++ tests/lib/glib/contactlist/contact-list.c | 635 +++++++++ tests/lib/glib/contactlist/contact-list.h | 118 ++ tests/lib/glib/contactlist/manager-file.py | 19 + tests/lib/glib/contacts-conn.c | 769 ++++++++++ tests/lib/glib/contacts-conn.h | 122 ++ tests/lib/glib/csh/Makefile.am | 23 + tests/lib/glib/csh/conn.c | 340 +++++ tests/lib/glib/csh/conn.h | 66 + tests/lib/glib/csh/room-manager.c | 431 ++++++ tests/lib/glib/csh/room-manager.h | 62 + tests/lib/glib/csh/room.c | 854 +++++++++++ tests/lib/glib/csh/room.h | 97 ++ tests/lib/glib/debug.h | 3 + tests/lib/glib/echo/Makefile.am | 25 + tests/lib/glib/echo/chan.c | 531 +++++++ tests/lib/glib/echo/chan.h | 58 + tests/lib/glib/echo/conn.c | 194 +++ tests/lib/glib/echo/conn.h | 55 + tests/lib/glib/echo/connection-manager.c | 95 ++ tests/lib/glib/echo/connection-manager.h | 53 + tests/lib/glib/echo/im-manager.c | 389 +++++ tests/lib/glib/echo/im-manager.h | 54 + tests/lib/glib/echo2/Makefile.am | 23 + tests/lib/glib/echo2/chan.c | 589 ++++++++ tests/lib/glib/echo2/chan.h | 58 + tests/lib/glib/echo2/conn.c | 198 +++ tests/lib/glib/echo2/conn.h | 55 + tests/lib/glib/echo2/im-manager.c | 389 +++++ tests/lib/glib/echo2/im-manager.h | 54 + tests/lib/glib/simple-conn.c | 226 +++ tests/lib/glib/simple-conn.h | 59 + tests/lib/glib/simple-manager.c | 95 ++ tests/lib/glib/simple-manager.h | 55 + tests/lib/python/Makefile.am | 2 + tests/lib/python/account-manager.py | 322 +++++ tests/lib/simple-conn.c | 226 --- tests/lib/simple-conn.h | 59 - tests/lib/simple-manager.c | 95 -- tests/lib/simple-manager.h | 55 - 126 files changed, 13387 insertions(+), 13374 deletions(-) commit 8f1c98a9df5a6cf934c524250e40e07c392d51a2 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 26 01:43:38 2010 -0300 Update to spec 0.19.1 Updated to spec 0.19.1 and include missing interfaces. Let's keep the spec dir in sync with telepathy-spec, so it's easier to keep track os spec changes. Also removed deprecated Channel_Interface_Call_Merging.xml. spec/Account_Manager.xml | 12 +- spec/Call_Content.xml | 141 +++ spec/Call_Content_Codec_Offer.xml | 57 ++ spec/Call_Content_Interface_Media.xml | 229 +++++ spec/Call_Stream.xml | 167 ++++ spec/Call_Stream_Endpoint.xml | 95 ++ spec/Call_Stream_Interface_Media.xml | 402 +++++++++ spec/Channel_Dispatcher.xml | 17 +- spec/Channel_Interface_Call_Merging.xml | 80 -- spec/Channel_Interface_Chat_State.xml | 3 +- spec/Channel_Interface_Conference.xml | 400 +++++++++ spec/Channel_Interface_Mergeable_Conference.xml | 110 +++ spec/Channel_Interface_Password.xml | 4 +- spec/Channel_Interface_Splittable.xml | 74 ++ spec/Channel_Type_Call.xml | 931 ++++++++++++++++++++ spec/Channel_Type_Streamed_Media.xml | 12 +- spec/Client_Handler_Future.xml | 65 ++ spec/Client_Observer.xml | 4 +- spec/Connection.xml | 18 +- spec/Connection_Future.xml | 110 +++ spec/Connection_Interface_Balance.xml | 105 +++ spec/Connection_Interface_Contact_Capabilities.xml | 60 +- spec/Connection_Interface_Mail_Notification.xml | 653 ++++++++++++++ spec/Connection_Manager.xml | 24 +- spec/all.xml | 20 +- 25 files changed, 3687 insertions(+), 106 deletions(-) commit 6ce196dc222a97e08aefe29e02db0944be4b6b8a Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 22 13:45:33 2010 -0300 Nano version (might lead to 0.2.3 or 0.3.0) NEWS | 6 ++++++ configure.ac | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) commit 54b0341f4874aff3d5d1a18606cd87d792426960 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 22 12:19:37 2010 -0300 Prepare release 0.2.2 NEWS | 12 ++++++++++-- configure.ac | 8 ++++---- 2 files changed, 14 insertions(+), 6 deletions(-) commit 724b11d1ee68b327bc0c44bfa92bed9a6866871e Merge: c81b938 85b3387 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 22 11:32:02 2010 -0300 Merge branch 'handler_caps_test' Reviewed-by: Simon McVittie (smcv) commit 85b3387abdce6a746322e684293f8918c3b25e42 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 22 11:29:30 2010 -0300 client test: Added Handler.Capabilities test. tests/dbus/client.cpp | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) commit c81b9386fbf2d4c355bc310cc1c6f4d254093367 Merge: 79a0eba 6a93bac Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 22 11:02:04 2010 -0300 Merge branch 'delayed_client_response' Reviewed-by: Simon McVittie (smcv) commit 79a0eba8812875945a5e40af9bd3e1765d56372e Merge: f810336 0df0872 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 22 11:01:41 2010 -0300 Merge branch 'handler_caps' Reviewed-by: Simon McVittie (smcv) commit 6a93bacdcebbeed35f51d8663284aec1ca2be03b Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 22 10:54:52 2010 -0300 MethodInvocationContext: Allow delayed replies. TelepathyQt4/method-invocation-context.h | 1 + 1 file changed, 1 insertion(+) commit 0df0872eaf0fa56fc7344098cc33ca82e2224459 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 22 10:52:06 2010 -0300 AbstractClientHandler: Added Handler.Capabilities property support. TelepathyQt4/abstract-client.cpp | 17 +++++++++++++++++ TelepathyQt4/abstract-client.h | 6 ++++++ TelepathyQt4/client-registrar-internal.h | 7 +++++++ 3 files changed, 30 insertions(+) commit f8103366540732de2362dbed1b7327300c0c8088 Author: Will Thompson Date: Wed Jan 13 13:56:08 2010 +0000 Fix compilation with Automake <= 1.11 TPQT4_V_MOC_ was defined in terms of $(AM_DEFAULT_VERBOSITY) which is of course not defined with older automakes, so expanded to nothing, so TPQT4_V_MOC_ was defined to be … itself. This patch effectively defaults $(AM_DEFAULT_VERBOSITY) to 0 in older Automakes. I tried to make all the definitions conditional on $(AM_DEFAULT_VERBOSITY) being defined, but failed because this Makefile is included by .am files, so Automake sees the 'ifdef' / 'endif' pair, doesn't recognise 'ifdef' but does recognise 'endif' so gets upset. Reviewed-by: André Moreira Magalhães tools/telepathy-qt4.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c396589f14f7dbe880195a9638bd14c3a8cb8804 Author: Simon McVittie Date: Tue Jan 12 13:30:13 2010 +0000 fd.o#26002: only build tests if we have telepathy-glib >= 0.8.0 Strictly speaking, 0.7.37 should be sufficient for ContactCapabilities, but 0.8.x is a stable branch. configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 491951f39afcf20ee1a199d3cb6c15e95be3187e Author: Simon McVittie Date: Fri Dec 4 17:15:30 2009 +0000 Nano version (might lead to 0.2.2 or 0.3.0) NEWS | 5 +++++ configure.ac | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) commit 42a71efa0b0528a135fdee8a1d7abb4d335df906 Author: Simon McVittie Date: Fri Dec 4 16:03:33 2009 +0000 Prepare version 0.2.1 NEWS | 30 +++++++++++++++++++++++++++++- configure.ac | 8 ++++---- 2 files changed, 33 insertions(+), 5 deletions(-) commit ac63e5cb22d876e4ebbcd58c5e228f5849e99673 Author: Simon McVittie Date: Fri Dec 4 15:51:16 2009 +0000 telepathy-qt4-farsight: compile with -fvisibility=hidden, and warnings In practice, there's only one symbol, and we export it :-) Still, it's good to be consistent about these things. TelepathyQt4/Farsight/Makefile.am | 4 ++++ 1 file changed, 4 insertions(+) commit f7ec4302647082df09fb0eb7c1d74e57b98cc5e7 Author: Simon McVittie Date: Fri Dec 4 15:50:04 2009 +0000 Farsight binding: introduce TELEPATHY_QT4_FS_EXPORT, TELEPATHY_QT4_FS_NO_EXPORT macros Because Windows distinguishes between Q_DECL_EXPORT and Q_DECL_IMPORT, we need one macro like this per shared library - telepathy-qt4-farsight needs to export its own symbols with Q_DECL_EXPORT, while importing telepathy-qt4's symbols with Q_DECL_IMPORT. TelepathyQt4/Farsight/Makefile.am | 4 +++- TelepathyQt4/Farsight/channel.h | 4 +++- TelepathyQt4/Farsight/global.h | 45 +++++++++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 2 deletions(-) commit 0de4c7c92abe4b451b5c65b9b23bbc8d6fb68b98 Author: Simon McVittie Date: Fri Dec 4 15:39:53 2009 +0000 Use -fvisibility=hidden for telepathy-qt4 main library No public symbols disappear as a result; the following command (which assumes a 32-bit platform, but is easy to adapt) gives identical output before and after. nm libtelepathy-qt4.so | c++filt | sort -k3| sed -e 's/^........ //' TelepathyQt4/Makefile.am | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 420b928a675044ea4c38a8a586c33d51b481d367 Author: Simon McVittie Date: Fri Dec 4 15:36:17 2009 +0000 Add an autoconf macro to detect gcc's -fvisibility=hidden option configure.ac | 1 + m4/Makefile.am | 1 + m4/tp-visibility-hidden.m4 | 55 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+) commit 5c9170aa5e06ec0294e0b50ffc28ca22f2166905 Author: Simon McVittie Date: Fri Dec 4 15:34:48 2009 +0000 Export enabledDebug(), enabledWarning() even in non-debug builds The debug(), warning() inlines mean they won't actually be invoked, so it doesn't matter if there's some trivial cost in terms of function calls. TelepathyQt4/debug-internal.h | 9 ++++++--- TelepathyQt4/debug.cpp | 20 +++++++++++++++++--- 2 files changed, 23 insertions(+), 6 deletions(-) commit 5627da9918f7c23301d9b3487c4e8b1d0a4bb0df Author: Simon McVittie Date: Fri Dec 4 15:30:51 2009 +0000 Give generated types' operators the same visibility as the type tools/qt4-types-gen.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) commit a16f9086ddd6f1bb7bbf4b5728918407ee247d4f Author: Simon McVittie Date: Fri Dec 4 15:16:00 2009 +0000 Explicitly export ConnectionCapabilities, ContactCapabilities TelepathyQt4/connection-capabilities.h | 2 +- TelepathyQt4/contact-capabilities.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 5966bdea999bbd737dd3ef5edeef6a5aca6d3e9e Author: Simon McVittie Date: Fri Dec 4 14:08:34 2009 +0000 .gitignore: ignore session.conf .gitignore | 1 + 1 file changed, 1 insertion(+) commit 96a20b678da37d1b76da981d814ecb5612523951 Merge: 5893357 a1a8fec Author: Simon McVittie Date: Fri Dec 4 12:23:05 2009 +0000 Merge branch 'buildsys' Reviewed-by: Andre Moreira Magalhaes (andrunko) commit a1a8fec02587a3ee612094448591af785427de38 Author: Simon McVittie Date: Thu Dec 3 17:42:01 2009 +0000 qt4-client-gen: allow visibility of generated classes to be controlled TelepathyQt4/Makefile.am | 1 + tools/qt4-client-gen.py | 10 +++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) commit 32d2038a9c97c5ecef7bc8896be478018fee4aed Author: Simon McVittie Date: Thu Dec 3 18:05:47 2009 +0000 qt4-types-gen.py: make it possible to change the types' symbol visibility TelepathyQt4/Makefile.am | 1 + tools/qt4-types-gen.py | 25 ++++++++++++++++++------- 2 files changed, 19 insertions(+), 7 deletions(-) commit da32026168e99a18605bef5021b17215a3b6d181 Author: Simon McVittie Date: Thu Dec 3 17:58:51 2009 +0000 qt4-constants-gen.py: cope with Unicode in the spec tools/qt4-constants-gen.py | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) commit 3641232f2cc981a5811e6915cfed83245c04d207 Author: Simon McVittie Date: Thu Dec 3 21:01:39 2009 +0000 Avoid the real AccountManager being service-activated during distcheck tests/Makefile.am | 9 ++++++++- tests/dbus-1/session.conf.in | 30 ++++++++++++++++++++++++++++++ tests/dbus/Makefile.am | 3 ++- 3 files changed, 40 insertions(+), 2 deletions(-) commit 5893357d19394a9d7967134a6a4d4c5db3f6870a Author: Will Thompson Date: Wed Dec 2 18:10:30 2009 +0000 Enable Automake 1.11 silent building This includes an extra macro to silence moc invocations, in tools/telepathy-qt4.mk Reviewed-by: Simon McVittie TelepathyQt4/Makefile.am | 22 ++++++++++++---------- autogen.sh | 13 +++++++------ configure.ac | 2 ++ examples/accounts/Makefile.am | 6 ++++-- examples/call/Makefile.am | 6 ++++-- examples/extensions/Makefile.am | 21 +++++++++++++-------- examples/file-transfer/Makefile.am | 6 ++++-- examples/roster/Makefile.am | 6 ++++-- tests/Makefile.am | 6 ++++-- tests/dbus/Makefile.am | 6 ++++-- tests/lib/Makefile.am | 6 ++++-- tests/lib/callable/Makefile.am | 4 ++-- tests/lib/contactlist/Makefile.am | 4 ++-- tools/telepathy-qt4.mk | 4 ++++ 14 files changed, 70 insertions(+), 42 deletions(-) commit d1d4963951e46bc3c6ac50970d94734f71c4b4e8 Author: Will Thompson Date: Wed Dec 2 17:18:46 2009 +0000 Remove debugging output from qt4-types-gen Reviewed-by: Simon McVittie tools/qt4-types-gen.py | 2 -- 1 file changed, 2 deletions(-) commit 5c7100108507924532a547e6cd3002918189173e Merge: 99a5d93 e935e4b Author: Will Thompson Date: Wed Dec 2 17:16:47 2009 +0000 Merge branch 'cope-with-utf8-spec' Reviewed-by: Simon McVittie commit e935e4bb156bf88f0d4655cdc7e1a22cb2390ff8 Author: Will Thompson Date: Mon Nov 30 12:52:18 2009 +0000 Cope with UTF-8 in spec XML tools/qt4-types-gen.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit e74787bdafeb810060b4023ca8c974a99adde3ca Author: Will Thompson Date: Mon Nov 30 12:49:25 2009 +0000 Ignore tag files .gitignore | 3 +++ 1 file changed, 3 insertions(+) commit 99a5d9311edfbb473d7ec7ea48a1d1dece159f3f Author: Simon McVittie Date: Fri Nov 13 17:26:16 2009 +0000 update NEWS NEWS | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 40f0cf11bda9044d5e5ddab9bde8ec702c41419b Author: Simon McVittie Date: Thu Nov 12 18:53:17 2009 +0000 Move workaround for missing QVariant::operator== from types.h to .cpp Because a public header can't #include config.h, HAVE_QDBUSVARIANT_OPERATOR_EQUAL was never defined in types.h even if the user's Qt version has QVariant::operator==, so we produced a duplicate definition in any such Qt version. To avoid causing this conflict, limit the scope of our workaround to types.cpp, which means tp-qt4 itself can compile, without polluting our public headers. Some tp-qt4 users might have to apply the same workaround themselves. Reviewed-by: Andre Moreira Magalhaes TelepathyQt4/types.cpp | 13 +++++++++++++ TelepathyQt4/types.h | 12 ------------ 2 files changed, 13 insertions(+), 12 deletions(-) commit ab6115b8ed68400fda8233bf5dadcb3e6bec601c Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 10 12:05:00 2009 -0300 Start 0.3.0 development NEWS | 5 +++++ configure.ac | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) commit d9498140bf94403c0f9a2951641ad1a4a4815fa3 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 10 10:53:16 2009 -0300 Prepare release 0.2.0 NEWS | 15 +++++++++++++-- configure.ac | 6 +++--- 2 files changed, 16 insertions(+), 5 deletions(-) commit c0efbab13333371e703e312e8d3cb370390187c2 Merge: f07642b b19ea41 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 10 10:17:48 2009 -0300 Merge branch 'shared' Reviewed-by: Simon McVittie (smcv) commit f07642b676c39ffbb584da34acacdacdbf0dfc69 Merge: 0b42512 33c459b Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 10 10:17:37 2009 -0300 Merge branch 'connection' Reviewed-by: Simon McVittie (smcv) commit 0b425125372ededf6eb34bdeed7995694a2b27db Merge: 8110b1c fc6b19c Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 10 10:17:26 2009 -0300 Merge branch 'bug24422' Reviewed-by: Simon McVittie (smcv) commit 8110b1c522653cad8e5e7dfccca04237ff7a7398 Merge: c0ef389 17be4a1 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 10 10:16:44 2009 -0300 Merge branch 'bug23370' Reviewed-by: Simon McVittie (smcv) commit 33c459b8726f640e4830887f108b878f1c1cdee5 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 9 18:23:50 2009 -0300 Connection: Changed status/statusReason/statusChanged to use enums Tp::Connection::Status and ConnectionStatusReason. TelepathyQt4/connection.cpp | 15 ++++++++------- TelepathyQt4/connection.h | 7 ++++--- tests/dbus/chan-basics.cpp | 15 ++++++++------- tests/dbus/chan-group.cpp | 15 ++++++++------- tests/dbus/conn-basics.cpp | 15 ++++++++------- tests/dbus/conn-capabilities.cpp | 2 +- tests/dbus/conn-requests.cpp | 2 +- tests/dbus/conn-roster-groups.cpp | 3 +-- tests/dbus/conn-roster.cpp | 2 +- tests/dbus/contacts-capabilities.cpp | 2 +- tests/dbus/contacts.cpp | 15 ++++++++------- tests/dbus/handles.cpp | 15 ++++++++------- 12 files changed, 57 insertions(+), 51 deletions(-) commit ae6e39567b61f8599343fa85b15fdfd9f7408946 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 9 17:57:37 2009 -0300 Connection: Renamed getContactAttributes method to contactAttributes. TelepathyQt4/connection.cpp | 8 ++++---- TelepathyQt4/connection.h | 2 +- TelepathyQt4/pending-contact-attributes.cpp | 4 ++-- TelepathyQt4/pending-contacts.cpp | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) commit b19ea413db4dbda455012132d805d16cb2b217b4 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 10 09:52:18 2009 -0300 Build shared libraries. TelepathyQt4/Farsight/Makefile.am | 2 +- TelepathyQt4/Makefile.am | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 17be4a12eab00bd1b84c9e5bb3a7c642e1fdfb26 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 10 09:37:46 2009 -0300 Connection: Bind to ConnectionError signal. TelepathyQt4/connection.cpp | 10 ++++++++++ TelepathyQt4/connection.h | 1 + 2 files changed, 11 insertions(+) commit 2ae16416edd817e886074d9ba6683eb24dd8f0a2 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 10 09:32:28 2009 -0300 Connection: Better map status change reason to D-Bus errors. TelepathyQt4/connection.cpp | 49 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 8 deletions(-) commit fc6b19ceae992b5b9fdd362c9dc195e1627d99bf Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 9 18:28:43 2009 -0300 Account: Use TELEPATHY_QT4_ERROR_OBJECT_REMOVED as error code for invalidation when the account is removed. TelepathyQt4/account.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit c0ef389ead8a5fa5f02b4f8b1cc71727b3779468 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 5 14:03:03 2009 -0300 Start 0.2.0 development NEWS | 6 ++++++ configure.ac | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) commit 55e8d969dacfbfd83b0d6dea9cbd4a477da8daec Author: Andre Moreira Magalhaes (andrunko) Date: Thu Nov 5 13:44:01 2009 -0300 Prepare release 0.1.12. NEWS | 17 +++++++++++++++-- configure.ac | 4 ++-- 2 files changed, 17 insertions(+), 4 deletions(-) commit 61bf6db9f77accf63a57e4499c8a461dd8f0697d Merge: 78d434e ff6897b Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 3 15:36:07 2009 -0300 Merge branch 'text-chan-chat-state' Reviewed-by: Simon McVittie (smcv) commit ff6897b383d26ca4afbec2107739fd8de17a1c08 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 3 15:35:35 2009 -0300 TextChannel: Updated FIXME. TelepathyQt4/text-channel.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) commit 90542403baf7bcd075720c699463245d817425c1 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 3 15:35:23 2009 -0300 TextChannel: Fixed doc for chatState. TelepathyQt4/text-channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit ec17b39662e19e18415f744d0abf55b054186862 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 3 15:27:32 2009 -0300 TextChannel: Improved docs for chat state methods. TelepathyQt4/text-channel.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 99c518cfe4facf7e1633f952afa079af4d3c16c4 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 3 15:25:56 2009 -0300 TextChannel: Renamed setChatState to requestChatState. TelepathyQt4/text-channel.cpp | 4 ++-- TelepathyQt4/text-channel.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) commit 1bd203a56aa2818ed1f1e8e0856a94d682dcfa2c Author: Andre Moreira Magalhaes (andrunko) Date: Tue Nov 3 15:24:09 2009 -0300 TextChannel: Added chatState method for retrieving contacts current chat state. TelepathyQt4/text-channel.cpp | 31 +++++++++++++++++++++++++++++++ TelepathyQt4/text-channel.h | 3 +++ 2 files changed, 34 insertions(+) commit 9682075ff17844f40786ae625bc9cced134c1a72 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 2 14:32:39 2009 -0300 TextChannel: Improved docs for setChatState. TelepathyQt4/text-channel.cpp | 3 +++ 1 file changed, 3 insertions(+) commit 6f3fad8a3e143ca205d4e77070d397249f8e98b5 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 2 14:32:21 2009 -0300 TextChannel: Added hasChatStateInterface method. TelepathyQt4/text-channel.cpp | 16 ++++++++++++++++ TelepathyQt4/text-channel.h | 1 + 2 files changed, 17 insertions(+) commit f4bd81c3d7e647c185d3c3894451ba4da8f88108 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 2 14:26:12 2009 -0300 TextChannel: Make sure contactsForHandles is not called when not needed. TelepathyQt4/text-channel.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) commit 26eeb42c1eeb68dd3f5042ee7444d28cf95839a3 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 2 13:01:04 2009 -0300 TextChannel: Reorder Private::awaitingContacts declaration as it is not specific to FeatureMessageQueue anymore. TelepathyQt4/text-channel.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit ba8516cdfa7cd810fcaccc43a677ae5ec90ac445 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 2 12:55:28 2009 -0300 TextChannel: Added support for setting local chat state. TelepathyQt4/text-channel.cpp | 21 +++++++++++++++++++++ TelepathyQt4/text-channel.h | 2 ++ 2 files changed, 23 insertions(+) commit 848bacd6cde66c6fd5b72765f0ddbf1737c22f0d Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 2 12:55:04 2009 -0300 TextChannel: Added support for receiving chat state notifications. TelepathyQt4/text-channel.cpp | 123 ++++++++++++++++++++++++++++++++++++++++- TelepathyQt4/text-channel.h | 7 +++ 2 files changed, 129 insertions(+), 1 deletion(-) commit 2aa0e45f52b6658dfffdc240e136a765ec08ab9c Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 2 12:50:30 2009 -0300 TextChannel: Make sure we won't leak if the channel is deleted and the message queue is not empty. TelepathyQt4/text-channel.cpp | 3 +++ 1 file changed, 3 insertions(+) commit de3b69ab9539824ab131e583c2ffa7adb365d3de Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 2 12:15:48 2009 -0300 TextChannel: Renamed Private::QueuedEvent to Private::MessageEvent as the queue is specific to messages. TelepathyQt4/text-channel.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) commit e81022ff5144f3648dcd58390a137851fca28218 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 2 12:09:39 2009 -0300 TextChannel: Reorder private methods implementation to fit declaration. TelepathyQt4/text-channel.cpp | 192 ++++++++++++++++++++--------------------- 1 file changed, 96 insertions(+), 96 deletions(-) commit ba6454e7ac177c9db845fe0e523dcb6055b61fc8 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 2 12:07:21 2009 -0300 TextChannel: Reorder contactLost/contactFound methods declaration with other Private methods. TelepathyQt4/text-channel.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit fe44f3e52fe80dc9de5c3f834fb9aab68144575a Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 2 12:06:12 2009 -0300 TextChannel: Renamed Private::processQueue to Private::processMessageQueue. TelepathyQt4/text-channel.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit 1d0d3d8c5daff73762cd2af723b3d401c0dd4463 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 2 12:03:53 2009 -0300 TextChannel: Moved processQueue to Private::processQueue. TelepathyQt4/text-channel.cpp | 46 +++++++++++++++++++++-------------------- TelepathyQt4/text-channel.h | 2 -- 2 files changed, 24 insertions(+), 24 deletions(-) commit 78d434e63c18cbb00a35c009615a853b6e6ffb72 Merge: de3a007 9d345fc Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 2 13:06:55 2009 -0300 Merge branch 'text-chan-delivery-reports' Reviewed-by: Simon McVittie (smcv) commit 9d345fce7d52574119dab9d63bf6c16b74475d56 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Nov 2 10:58:59 2009 -0300 TextChannel: Added flags param to send method, enabling support for delivery reports. TelepathyQt4/text-channel.cpp | 11 +++++++---- TelepathyQt4/text-channel.h | 6 ++++-- 2 files changed, 11 insertions(+), 6 deletions(-) commit de3a0076e956e7f18fc29d802b7f0ff8af34767e Merge: a870e58 1ef887d Author: Andre Moreira Magalhaes (andrunko) Date: Fri Oct 30 08:49:56 2009 -0300 Merge branch 'pkgconfig' Reviewed-by: Simon McVittie (smcv) commit 1ef887d38b357aee32dd15eab6edd2281c7041f9 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Oct 28 09:49:27 2009 -0300 pkgconfig: Added missing QtNetwork dependency. TelepathyQt4/TelepathyQt4-uninstalled.pc.in | 2 +- TelepathyQt4/TelepathyQt4.pc.in | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit a870e5861c136cbec70eeead1b2e418212ef394d Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 12 15:30:57 2009 -0300 Start 0.2.0 development NEWS | 5 +++++ configure.ac | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) commit 6ba55f37987dda757b86741f246ad204973e85e6 Merge: 9317d73 c466181 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 12 15:18:16 2009 -0300 Merge branch '0.1.11' commit 9317d737b88128be4b0e805f9f1774aed0f0999a Merge: 5fb5fde ca0e0cf Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 12 15:18:03 2009 -0300 Merge branch 'pinocchio-no-more' Reviewed-by: Simon McVittie (smcv) commit 5fb5fdef828667c261f237356b57827656526d11 Merge: bc2a0b8 e3b986a Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 12 15:17:33 2009 -0300 Merge branch 'check' Reviewed-by: Simon McVittie (smcv) commit c4661818aa5fda067342a986923e7b28efd119cd Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 8 01:23:13 2009 -0300 Prepare release 0.1.11 NEWS | 46 ++++++++++++++++++++++++++++++++++++++++++++-- configure.ac | 4 ++-- 2 files changed, 46 insertions(+), 4 deletions(-) commit ca0e0cf686cc70f7350ce5ef1ec7906ef64066d3 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 8 19:36:20 2009 -0300 Removed pinocchio tests. Reasons: 1 - telepathy-pinocchio does not even work with latest telepathy-python 2 - All tests covered by test/pinocchio are already covered by tests in tests/dbus README | 1 - TelepathyQt4/main.dox | 2 - configure.ac | 7 - tests/Makefile.am | 3 +- tests/README | 3 - tests/pinocchio/Makefile.am | 73 ------ tests/pinocchio/accounts/empty/contacts.xml | 2 - tests/pinocchio/cm-basics.cpp | 145 ------------ tests/pinocchio/conn-basics.cpp | 310 ------------------------- tests/pinocchio/do-nothing.cpp | 63 ------ tests/pinocchio/handles.cpp | 325 --------------------------- tests/pinocchio/lib.cpp | 123 ---------- tests/pinocchio/lib.h | 48 ---- 13 files changed, 1 insertion(+), 1104 deletions(-) commit e3b986acc36c29de7f59306c61e90874867d2520 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 8 15:10:24 2009 -0300 Connection: Create an empty ConnectionCapabilities object if Requests interface is not supported. TelepathyQt4/connection.cpp | 6 ++++++ 1 file changed, 6 insertions(+) commit 92e59c3013f8409f18ce4930362d2e82cc01ea08 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 8 13:42:26 2009 -0300 conn-capabilities test: Fixed test to work now that capabilities support is part of Connection FeatureCore. tests/dbus/conn-capabilities.cpp | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) commit bc2a0b86eeb268da6a92a79be37b53d161a09751 Merge: ffbad9a 85e7aab Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 6 17:46:25 2009 -0300 Merge branch 'visibility' Reviewed-by: Simon McVittie (smcv) commit 85e7aab13a2445a251dec6ee577572bb2aa74588 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 6 17:17:24 2009 -0300 Update to latest changes. TelepathyQt4/capabilities-base.cpp | 2 +- TelepathyQt4/capabilities-base.h | 2 +- .../file-transfer-channel-creation-properties.cpp | 4 +++- .../file-transfer-channel-creation-properties.h | 3 ++- TelepathyQt4/incoming-file-transfer-channel.cpp | 2 +- TelepathyQt4/incoming-file-transfer-channel.h | 2 +- TelepathyQt4/outgoing-file-transfer-channel.cpp | 2 +- TelepathyQt4/outgoing-file-transfer-channel.h | 2 +- TelepathyQt4/pending-variant.cpp | 4 +++- TelepathyQt4/pending-variant.h | 3 ++- 10 files changed, 16 insertions(+), 10 deletions(-) commit a5f54e847ee376eabcbeaa2f019e708e459cdfae Author: Andre Moreira Magalhaes (andrunko) Date: Tue Aug 18 19:52:52 2009 -0300 Explicitly remove private methods/structs from shared library ABI. TelepathyQt4/abstract-client.cpp | 6 +++--- TelepathyQt4/abstract-interface.cpp | 2 +- TelepathyQt4/account-manager.cpp | 2 +- TelepathyQt4/account.cpp | 2 +- TelepathyQt4/channel-dispatch-operation.cpp | 2 +- TelepathyQt4/channel-request.cpp | 2 +- TelepathyQt4/channel.cpp | 6 +++--- TelepathyQt4/client-registrar-internal.h | 10 +++++----- TelepathyQt4/client-registrar.cpp | 2 +- TelepathyQt4/connection-internal.h | 2 +- TelepathyQt4/connection-manager-internal.h | 4 ++-- TelepathyQt4/connection-manager.cpp | 4 ++-- TelepathyQt4/connection.cpp | 4 ++-- TelepathyQt4/contact-manager-internal.h | 2 +- TelepathyQt4/contact-manager.cpp | 2 +- TelepathyQt4/contact.cpp | 2 +- TelepathyQt4/dbus-proxy.cpp | 2 +- TelepathyQt4/feature.cpp | 2 +- TelepathyQt4/file-transfer-channel.cpp | 2 +- TelepathyQt4/key-file.cpp | 2 +- TelepathyQt4/manager-file.cpp | 2 +- TelepathyQt4/message.cpp | 3 +-- TelepathyQt4/optional-interface-factory.cpp | 3 +-- TelepathyQt4/pending-account.cpp | 2 +- TelepathyQt4/pending-channel-request-internal.h | 2 +- TelepathyQt4/pending-channel-request.cpp | 2 +- TelepathyQt4/pending-channel.cpp | 2 +- TelepathyQt4/pending-connection.cpp | 2 +- TelepathyQt4/pending-contact-attributes.cpp | 2 +- TelepathyQt4/pending-contacts.cpp | 2 +- TelepathyQt4/pending-handles.cpp | 2 +- TelepathyQt4/pending-operation.cpp | 2 +- TelepathyQt4/pending-ready.cpp | 2 +- TelepathyQt4/pending-string-list.cpp | 2 +- TelepathyQt4/readiness-helper.cpp | 4 ++-- TelepathyQt4/ready-object.cpp | 2 +- TelepathyQt4/referenced-handles.cpp | 2 +- TelepathyQt4/room-list-channel.cpp | 2 +- TelepathyQt4/streamed-media-channel.cpp | 6 +++--- TelepathyQt4/text-channel.cpp | 4 ++-- 40 files changed, 55 insertions(+), 57 deletions(-) commit a21565318f1a3c43ad5f889976dd58f5c25ca846 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 13 20:54:26 2009 -0300 Export all public non-class methods. TelepathyQt4/Farsight/channel.h | 2 +- TelepathyQt4/debug.h | 6 ++++-- tools/qt4-types-gen.py | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) commit fc248a72e677e9bb861c6c14fc0bc5b2b9145574 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Aug 11 23:33:35 2009 -0300 Added TELEPATHY_QT4_NO_EXPORT macro. TelepathyQt4/global.h | 8 ++++++++ 1 file changed, 8 insertions(+) commit 52c20ed4c574d34dd74b960d767f7bd5fe239456 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Aug 11 23:26:56 2009 -0300 Updated HACKING file to mention that TELEPATHY_QT4_EXPORT macro should be used by all public classes. HACKING | 2 ++ 1 file changed, 2 insertions(+) commit 6154f87b45d777ae1d9476ef61a76d97904e8606 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Aug 11 23:26:06 2009 -0300 Export all public auto generated classes using TELEPATHY_QT4_EXPORT macro. tools/qt4-client-gen.py | 3 ++- tools/qt4-types-gen.py | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) commit af732957f010da6371020a02476443cb86e88a0f Author: Andre Moreira Magalhaes (andrunko) Date: Tue Aug 11 23:25:32 2009 -0300 Export all public high-level classes using TELEPATHY_QT4_EXPORT macro. TelepathyQt4/abstract-client.h | 8 ++++---- TelepathyQt4/abstract-interface.h | 4 +++- TelepathyQt4/account-manager.h | 2 +- TelepathyQt4/account.h | 2 +- TelepathyQt4/channel-dispatch-operation.h | 2 +- TelepathyQt4/channel-factory.h | 2 +- TelepathyQt4/channel-request.h | 2 +- TelepathyQt4/channel.h | 2 +- TelepathyQt4/client-registrar.h | 2 +- TelepathyQt4/connection-manager.h | 6 +++--- TelepathyQt4/connection.h | 2 +- TelepathyQt4/contact-manager.h | 2 +- TelepathyQt4/contact.h | 2 +- TelepathyQt4/dbus-proxy.h | 8 +++++--- TelepathyQt4/feature.h | 6 ++++-- TelepathyQt4/file-transfer-channel.h | 2 +- TelepathyQt4/key-file.h | 4 +++- TelepathyQt4/manager-file.h | 2 +- TelepathyQt4/message.h | 4 ++-- TelepathyQt4/optional-interface-factory.h | 4 +++- TelepathyQt4/pending-account.h | 2 +- TelepathyQt4/pending-channel-request.h | 2 +- TelepathyQt4/pending-channel.h | 2 +- TelepathyQt4/pending-connection.h | 2 +- TelepathyQt4/pending-contact-attributes.h | 2 +- TelepathyQt4/pending-contacts.h | 2 +- TelepathyQt4/pending-handles.h | 2 +- TelepathyQt4/pending-operation.h | 4 +++- TelepathyQt4/pending-ready.h | 2 +- TelepathyQt4/pending-string-list.h | 2 +- TelepathyQt4/readiness-helper.h | 2 +- TelepathyQt4/ready-object.h | 2 +- TelepathyQt4/referenced-handles.h | 2 +- TelepathyQt4/room-list-channel.h | 2 +- TelepathyQt4/shared-ptr.h | 6 ++++-- TelepathyQt4/simple-pending-operations.h | 6 +++--- TelepathyQt4/streamed-media-channel.h | 6 +++--- TelepathyQt4/text-channel.h | 4 ++-- 38 files changed, 67 insertions(+), 53 deletions(-) commit e247a7c1e5d5919ce8aa9ef82bddbc411c469d1b Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 6 08:38:02 2009 -0300 Added macros for C++ visibility support. TelepathyQt4/Global | 13 +++++++++++++ TelepathyQt4/Makefile.am | 3 +++ TelepathyQt4/global.h | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+) commit ffbad9a259c0521e3cc57d039931d281de1cf1b9 Merge: fc3dab3 6bcd403 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 6 16:51:37 2009 -0300 Merge branch 'account-channel-request' Reviewed-by: Simon McVittie (smcv) commit 6bcd4034c827663cdb188a37f8a5f79bc363d648 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 6 16:51:17 2009 -0300 Account: Improved docs for ensureAudio/VideoCall. TelepathyQt4/account.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) commit 70359ed6cf5a3c0a6bb37d959afbe37c0a107b48 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 6 16:45:49 2009 -0300 Account: Added ensureAudio/VideoCall methods. TelepathyQt4/account.cpp | 162 ++++++++++++++++++++++++++++++++++++++++++++++ TelepathyQt4/account.h | 20 ++++++ 2 files changed, 182 insertions(+) commit fc3dab3defc453761cbb66561b7dfb856e8285c2 Merge: 9535dd8 ee128e8 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 6 16:35:30 2009 -0300 Merge branch 'trivia' Reviewed-by: Simon McVittie (smcv) commit ee128e8944fb27e40fb7b71c4dfe4482126ef779 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 5 00:49:31 2009 -0300 Fixed doc for TELEPATHY_QT4_ERROR_OBJECT_REMOVED define. TelepathyQt4/constants.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 9535dd85541213f752caf9c66ee7b5f45ad7edf4 Merge: 0315272 01c4c56 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 6 16:32:41 2009 -0300 Merge branch 'capabilities' Reviewed-by: Simon McVittie (smcv) commit 01c4c56893e7d70ca71390227c55b1f569f8bb98 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 6 15:21:27 2009 -0300 Added check for QDBusVariant operator== and build it if not present in Qt version. TelepathyQt4/types.h | 4 ++++ configure.ac | 15 +++++++++++++++ 2 files changed, 19 insertions(+) commit 195a3f7621e86e888d989bfd03628afd4cfe9123 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 6 15:01:27 2009 -0300 ConnectionCapabilities: Use cls instead of class_. TelepathyQt4/connection-capabilities.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit befdcc3d9c7a49a3d3820a7e49ad0e7f151cc0c5 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 6 15:01:08 2009 -0300 CapabilitiesBase: Use cls instead of class_. TelepathyQt4/capabilities-base.cpp | 44 ++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 22 deletions(-) commit c780674ada21a70418476e53509e00bac44ab2ca Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 6 15:00:16 2009 -0300 Contact: Fallback to Connection::capabilities if per contact capabilities is not supported. TelepathyQt4/contact.cpp | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) commit d4bfc8d4503f8feea08fc274ed6b659c02db683e Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 6 14:58:57 2009 -0300 ContactCapabilities: Added specificToContact param, as the object may come from a ConnectionCapabilities. TelepathyQt4/contact-capabilities.cpp | 10 ++++++---- TelepathyQt4/contact-capabilities.h | 5 +++-- 2 files changed, 9 insertions(+), 6 deletions(-) commit e1c36f3ec44f3ab758c8d4bc2f2628cb6dff7bd9 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 6 14:14:41 2009 -0300 Connection: Removed FeatureCapabilities and make capabilties core now. TelepathyQt4/connection.cpp | 46 +++++++++++++++++--------------------- TelepathyQt4/connection.h | 1 - tests/dbus/conn-capabilities.cpp | 2 +- 3 files changed, 21 insertions(+), 28 deletions(-) commit 58dd187ae4e0cde7934b7d546d4104503923fb7f Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 6 14:27:13 2009 -0300 CapabilitiesBase: Added isSpecificToContact method. TelepathyQt4/capabilities-base.cpp | 58 ++++++++++++++++++++++++------ TelepathyQt4/capabilities-base.h | 8 +++-- TelepathyQt4/connection-capabilities.cpp | 4 +-- TelepathyQt4/contact-capabilities.cpp | 4 +-- 4 files changed, 57 insertions(+), 17 deletions(-) commit 4872888540ea348996fbfeba8a8d921555a51a3c Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 6 14:19:48 2009 -0300 ContactCapabilities: Added default constructor. TelepathyQt4/contact-capabilities.cpp | 8 ++++++++ TelepathyQt4/contact-capabilities.h | 1 + 2 files changed, 9 insertions(+) commit 5d693a457f7df0654397bd3fc4259844a10f7d23 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 6 14:19:30 2009 -0300 ConnectionCapabilities: Added default constructor. TelepathyQt4/connection-capabilities.cpp | 8 ++++++++ TelepathyQt4/connection-capabilities.h | 1 + 2 files changed, 9 insertions(+) commit dadf6211d326afaa4c3a869326f863c4944234d8 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 6 14:17:39 2009 -0300 CapabilitiesBase: Added default constructor. TelepathyQt4/capabilities-base.cpp | 14 ++++++++++++++ TelepathyQt4/capabilities-base.h | 1 + 2 files changed, 15 insertions(+) commit 0315272d30f641b6e8e7cc9d89baac1451a1365b Merge: 8f9d0a6 8ab9225 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 6 12:03:49 2009 -0300 Merge branch 'account-channel-request' Reviewed-by: Simon McVittie (smcv) commit 8f9d0a60455cc0d5ba8399e3634e00f9b86a6692 Merge: 63939a0 7abd12c Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 6 12:03:38 2009 -0300 Merge branch 'contact-type' Reviewed-by: Simon McVittie (smcv) commit 63939a075f9100eb02d8b95d4515f9dda9fa3d39 Merge: ead7d78 5cdc738 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 6 12:03:21 2009 -0300 Merge branch 'pending-operations' Reviewed-by: Simon McVittie (smcv) commit ead7d78732b122f31df2bfa747cceb8944a1f1e8 Merge: 6d9e6e5 806cc40 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 6 12:02:49 2009 -0300 Merge branch 'spec' Reviewed-by: Simon McVittie (smcv) commit c10d33e6522a46ce656c5c27bdda144be5d4f33b Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 6 11:38:24 2009 -0300 contacts-capabilities test: Added test for ContactCapabilities. tests/dbus/Makefile.am | 5 + tests/dbus/contacts-capabilities.cpp | 188 ++++++++++++++++++++++++++++++++++ 2 files changed, 193 insertions(+) commit 30558bb31ccdf66d28f5790a3be72c6d0d2d6202 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 6 11:36:46 2009 -0300 contacts-conn test: Added basic ContactCapabilities interface simulation support. tests/lib/contacts-conn.c | 139 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) commit 80be62294eb63806e16904df59e38ef4e40f5f17 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 6 10:00:32 2009 -0300 Contact: Added doc for capabilities method. TelepathyQt4/contact.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit bcc5c9dd04a50660a595003fb8482fa01071fb01 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 6 09:54:37 2009 -0300 conn-capabilities test: Added test for ConnectionCapabilities. tests/dbus/Makefile.am | 5 ++ tests/dbus/conn-capabilities.cpp | 144 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 149 insertions(+) commit 88d3ae2fe5a2929b4b448c5bec5ea6fce412e3b9 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 6 09:53:39 2009 -0300 Connection: Fixed demarshal of Connection.Interface.Requests.RequestableChannelClasses property. TelepathyQt4/connection.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 704881100f58db6af9ddfec2d9e2415a49e4c260 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 6 09:33:20 2009 -0300 Connection: Added capabilities support. TelepathyQt4/connection.cpp | 76 +++++++++++++++++++++++++++++++++++++++++-- TelepathyQt4/connection.h | 5 +++ 2 files changed, 79 insertions(+), 2 deletions(-) commit 8244c665c5287871954b6b252f18d3716a6c99c9 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 6 09:08:28 2009 -0300 Added ConnectionCapabilities to build system. TelepathyQt4/Makefile.am | 3 +++ 1 file changed, 3 insertions(+) commit 9fcdd748eae4e50bb38c860e16cac37a1319018f Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 6 09:08:06 2009 -0300 ConnectionCapabilities: Added class for representing connection capabilities support. TelepathyQt4/ConnectionCapabilities | 13 +++++ TelepathyQt4/connection-capabilities.cpp | 89 ++++++++++++++++++++++++++++++ TelepathyQt4/connection-capabilities.h | 54 ++++++++++++++++++ 3 files changed, 156 insertions(+) commit b1b318544b3cae0434ca87db6a27949918ca1292 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 6 08:55:55 2009 -0300 Contact: Use ContactCapabilities class instead of CapabilitiesBase. TelepathyQt4/contact.cpp | 8 ++++---- TelepathyQt4/contact.h | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) commit 6f5f92f94af17448a3e3e6ff549017d8c09e4379 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 6 08:55:34 2009 -0300 Added ContactCapabilities to build system. TelepathyQt4/Makefile.am | 3 +++ 1 file changed, 3 insertions(+) commit 31c696d41c564f7178cf47958403b91d4243874a Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 6 08:55:00 2009 -0300 ContactCapabilities: Added class for representing contact capabilities support. TelepathyQt4/ContactCapabilities | 13 ++++++++ TelepathyQt4/contact-capabilities.cpp | 56 +++++++++++++++++++++++++++++++++ TelepathyQt4/contact-capabilities.h | 56 +++++++++++++++++++++++++++++++++ 3 files changed, 125 insertions(+) commit 47355aca7ea469039409b14d66cb6ff56841649c Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 6 08:45:45 2009 -0300 Contact: Proper instantiate capabilities object. TelepathyQt4/contact.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 13505d484b13a2f9ba73b9e0d6f19a815eb7cdb6 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Oct 6 08:44:45 2009 -0300 CapabilitiesBase: Renamed setRequestableChannelClasses to updateRequestableChannelClasses. TelepathyQt4/capabilities-base.cpp | 2 +- TelepathyQt4/capabilities-base.h | 2 +- TelepathyQt4/contact.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) commit 806cc40b8e9df917ba1421cf1b6cd67549ef0ab1 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 5 00:49:52 2009 -0300 Update to spec 0.18.0 spec/all.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 7abd12cd304f4cd8c9a82ba6be8d7292cfe49bc3 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 5 00:41:23 2009 -0300 Moved ContactPtr to types.h as all other XXXPtr definitions. TelepathyQt4/contact.h | 1 - TelepathyQt4/types.h | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) commit 8ab9225a3f3fa30961dd74752162beb7230e05f6 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 5 00:38:33 2009 -0300 Account: Use const QDateTime & for userActionTime on create/EnsureXXX methods. TelepathyQt4/account.cpp | 18 +++++++++--------- TelepathyQt4/account.h | 18 +++++++++--------- 2 files changed, 18 insertions(+), 18 deletions(-) commit 5cdc7389c3e633311cdb6be7435a7ad794caf504 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 5 00:32:50 2009 -0300 Renamed PendingVoidMethodCall to PendingVoid. We already have PendingStringList and PendingVariant with no MethodCall suffix, so let's do the same for PendingVoid. TelepathyQt4/Makefile.am | 2 +- TelepathyQt4/PendingVoid | 13 +++++++++++++ TelepathyQt4/PendingVoidMethodCall | 13 ------------- TelepathyQt4/account.cpp | 22 +++++++++++----------- TelepathyQt4/channel-dispatch-operation.cpp | 6 +++--- TelepathyQt4/channel-request.cpp | 6 +++--- TelepathyQt4/channel.cpp | 8 ++++---- TelepathyQt4/connection.cpp | 6 +++--- TelepathyQt4/pending-operation.cpp | 10 +++++----- TelepathyQt4/simple-pending-operations.h | 6 +++--- TelepathyQt4/streamed-media-channel.cpp | 14 +++++++------- tests/dbus/contacts.cpp | 2 +- tests/dbus/handles.cpp | 2 +- tests/lib/test.cpp | 6 +++--- 14 files changed, 58 insertions(+), 58 deletions(-) commit 9bc9e8573f1a136ce3b31923af21bf199a16567a Author: Andre Moreira Magalhaes (andrunko) Date: Mon Oct 5 00:27:03 2009 -0300 Use parent as last param for PendingSuccess/Failure/VoidMethodCall constructors. TelepathyQt4/account.cpp | 48 +++++++++++--------- TelepathyQt4/channel-dispatch-operation.cpp | 8 ++-- TelepathyQt4/channel-request.cpp | 4 +- TelepathyQt4/channel.cpp | 54 ++++++++++++----------- TelepathyQt4/connection.cpp | 11 ++--- TelepathyQt4/contact-manager.cpp | 37 +++++++++------- TelepathyQt4/incoming-file-transfer-channel.cpp | 13 +++--- TelepathyQt4/outgoing-file-transfer-channel.cpp | 13 +++--- TelepathyQt4/pending-channel-request.cpp | 5 +-- TelepathyQt4/pending-operation.cpp | 6 +-- TelepathyQt4/simple-pending-operations.h | 9 ++-- TelepathyQt4/streamed-media-channel.cpp | 44 +++++++++++------- tests/lib/test.cpp | 2 +- 13 files changed, 141 insertions(+), 113 deletions(-) commit 08d2e21d8dcdf5b30aa4373ba6dbb70a370f499c Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 1 14:46:02 2009 -0300 CapabilitiesBase: Added some docs. TelepathyQt4/capabilities-base.cpp | 113 ++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) commit 2ef48ba71edaa16b57b5d46ae9809fa0981b85a9 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 1 14:31:34 2009 -0300 Contact: Added initial capabilities support. TelepathyQt4/contact-manager.cpp | 26 +++++++++++++++++++++++++- TelepathyQt4/contact-manager.h | 1 + TelepathyQt4/contact.cpp | 38 ++++++++++++++++++++++++++++++++++++++ TelepathyQt4/contact.h | 6 ++++++ 4 files changed, 70 insertions(+), 1 deletion(-) commit e852653f9f6c23914e39e7c46a68fff1f1990b2f Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 1 14:30:24 2009 -0300 Connection: Added accessor method for ContactCapabilities interface. TelepathyQt4/connection.h | 6 ++++++ 1 file changed, 6 insertions(+) commit d1ef7b1bafd00d4621a1d72c11032697419199eb Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 1 14:29:02 2009 -0300 Added CapabilitiesBase to build system. TelepathyQt4/Makefile.am | 3 +++ 1 file changed, 3 insertions(+) commit 033621a497515198a3a14b63a2569bedacd1a10e Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 1 14:28:48 2009 -0300 CapabilitiesBase: Added base class for Capabilities support. TelepathyQt4/CapabilitiesBase | 13 +++ TelepathyQt4/capabilities-base.cpp | 170 ++++++++++++++++++++++++++++++++++++ TelepathyQt4/capabilities-base.h | 71 +++++++++++++++ 3 files changed, 254 insertions(+) commit e37bdbe6fbd44bb65a3e1a4a20f9517a74c23b3c Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 1 14:14:18 2009 -0300 Auto generate classes/types for Connection ContactCapabilities interface. TelepathyQt4/connection.xml | 1 + 1 file changed, 1 insertion(+) commit 936e7e215a27556cf43942533249547c899d58f1 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 1 14:17:18 2009 -0300 Added operator== for QDBusArgument. Ps.: This is a workaround that should be removed when Qt has support for this. There is already a merge request (http://qt.gitorious.org/qt/qt/merge_requests/1657) in place and the fix should be in next Qt versions. TelepathyQt4/types.h | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 6d9e6e5fdb4b38741470507615690f90cea529c0 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Oct 1 10:50:19 2009 -0300 Install missing FileTransferChannelCreationProperties. TelepathyQt4/Makefile.am | 1 + 1 file changed, 1 insertion(+) commit 8d89833dcc1226acd2e1b3164ffc536c2705fdf0 Merge: 6ccaa92 a589b02 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Sep 28 22:49:31 2009 -0300 Merge branch 'file-transfer' Reviewed-by: Simon McVittie (smcv) commit 6ccaa92f535643c2ac04db8462c1ce0c002bc11a Merge: 795a0ed 17f68f4 Author: Abner Silva Date: Wed Sep 23 17:14:21 2009 -0300 Merge branch 'tubes' Reviewed-by: Andre Moreira Magalhaes (andrunko) commit 17f68f4a94dfa53988b5108c1adee4f5e65bc522 Author: Abner Silva Date: Mon Sep 21 17:29:16 2009 -0300 Added pretty include for StreamTube and Tube interface. TelepathyQt4/ChannelTypeStreamTubeInterface | 13 +++++++++++++ TelepathyQt4/ChannelTypeTubeInterface | 13 +++++++++++++ TelepathyQt4/Makefile.am | 2 ++ 3 files changed, 28 insertions(+) commit e816e2199ef1c93e8171154c0cc1ef44d871865b Author: Abner Silva Date: Wed Aug 19 22:09:13 2009 -0300 Channel: Generating ChannelTypeStreamTube. TelepathyQt4/channel.h | 6 ++++++ TelepathyQt4/channel.xml | 1 + 2 files changed, 7 insertions(+) commit 7f8d15b2dc6b51b7925e82b04af6d0be96f78291 Author: Abner Silva Date: Wed Aug 19 22:06:38 2009 -0300 Channel: Generating ChannelInterfaceTube. TelepathyQt4/channel.h | 6 ++++++ TelepathyQt4/channel.xml | 1 + 2 files changed, 7 insertions(+) commit 795a0ed7b0358a626543e42bc5943c1dc40cd264 Merge: b4a9963 736f509 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 23 10:52:45 2009 -0300 Merge branch 'spec' Reviewed-by: Simon McVittie (smcv) commit b4a996320f79f836606f4a507cd9ce8f048e2e25 Merge: 15ad983 b4a8115 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 23 10:52:19 2009 -0300 Merge branch 'dist' Reviewed-by: Simon McVittie (smcv) commit a589b02ab99a3ffe5c3ff5175d33424a81e75f96 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 23 10:32:25 2009 -0300 IncomingFileTransferChannel: Read all remaining data on input device when device is closed and write to socket. TelepathyQt4/outgoing-file-transfer-channel.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) commit 3ea6f792ee416b82cbc76872c4cd611eb47f0f89 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 23 10:17:01 2009 -0300 IncomingFileTransferChannel: Invalidate channel when initialOffset bigger than what we asked for. TelepathyQt4/incoming-file-transfer-channel.cpp | 2 ++ 1 file changed, 2 insertions(+) commit 27336e6e35a1ac0b038343805da69b0df5518e92 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 23 10:16:39 2009 -0300 Added TELEPATHY_QT4_ERROR_INCONSISTENT constant. TelepathyQt4/constants.h | 8 ++++++++ 1 file changed, 8 insertions(+) commit c66364c466b912d6045b89d3d2db8891132d0218 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 23 10:06:35 2009 -0300 Revert "OutgoingFileTransferChannel: Added Port access control support." This reverts commit f0a0915cea5909271eafe38ad82d5dcaac12374d. TelepathyQt4/outgoing-file-transfer-channel.cpp | 41 +++-------------------- 1 file changed, 4 insertions(+), 37 deletions(-) commit abbdc32ce83da11c0b2469f66dfbc94be130180f Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 23 10:06:08 2009 -0300 Revert "IncomingFileTransferChannel: Added Port access control support." This reverts commit 7e4a6e7db7dc4ac86370e5f8af7d18ad53d0d9da. Conflicts: TelepathyQt4/incoming-file-transfer-channel.cpp TelepathyQt4/incoming-file-transfer-channel.cpp | 41 +++-------------------- 1 file changed, 5 insertions(+), 36 deletions(-) commit 715aeabd7c6a38428a6089e7d60aa4b7d411281d Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 23 00:48:25 2009 -0300 file-transfer receiver example: Added command-line option to test offset support. examples/file-transfer/receiver-channel.cpp | 7 ++++--- examples/file-transfer/receiver-channel.h | 4 +++- examples/file-transfer/receiver.cpp | 13 ++++++++----- examples/file-transfer/receiver.h | 4 +++- 4 files changed, 18 insertions(+), 10 deletions(-) commit 3b8b01ea107ad8846618d4cfb60d060b6a6424bd Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 23 00:39:05 2009 -0300 file-transfer receiver example: Removed unused mFile class member. examples/file-transfer/receiver.cpp | 1 - examples/file-transfer/receiver.h | 1 - 2 files changed, 2 deletions(-) commit 42a09e0f6bc0c4160cbf3d8c735d006977f63d10 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 23 00:29:46 2009 -0300 IncomingFileTransferChannel: Skip first N bytes if initialOffset smaller than what we asked for. TelepathyQt4/incoming-file-transfer-channel.cpp | 33 ++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) commit f0a0915cea5909271eafe38ad82d5dcaac12374d Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 23 00:04:25 2009 -0300 OutgoingFileTransferChannel: Added Port access control support. TelepathyQt4/outgoing-file-transfer-channel.cpp | 41 ++++++++++++++++++++--- 1 file changed, 37 insertions(+), 4 deletions(-) commit 7e4a6e7db7dc4ac86370e5f8af7d18ad53d0d9da Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 23 00:04:02 2009 -0300 IncomingFileTransferChannel: Added Port access control support. TelepathyQt4/incoming-file-transfer-channel.cpp | 41 ++++++++++++++++++++--- 1 file changed, 36 insertions(+), 5 deletions(-) commit 18dcdcd657418c25f60f9ea73ea43c47c0980662 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 23 00:03:26 2009 -0300 FileTransferChannel: Added protected method to access AvailableSocketTypes property. TelepathyQt4/file-transfer-channel.cpp | 26 ++++++++++++++++++++++++++ TelepathyQt4/file-transfer-channel.h | 2 ++ 2 files changed, 28 insertions(+) commit 5fa918a2cdabcad3b00e6919b8cf8e2634d179f9 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Sep 22 22:48:10 2009 -0300 OutgoingFileTransferChannel: Invalidate channel if ProvideFile fails. TelepathyQt4/outgoing-file-transfer-channel.cpp | 1 + 1 file changed, 1 insertion(+) commit 0cda93bac65fac21c44808cdfd3513490cb86c51 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Sep 22 22:47:57 2009 -0300 IncomingFileTransferChannel: Invalidate channel if AcceptFile fails. TelepathyQt4/incoming-file-transfer-channel.cpp | 1 + 1 file changed, 1 insertion(+) commit 3983880d94bb57a3681593fc941483e9ba7b111f Author: Andre Moreira Magalhaes (andrunko) Date: Tue Sep 22 22:39:52 2009 -0300 OutgoingFileTransferChannel: Removed exclamation marks from debug. TelepathyQt4/outgoing-file-transfer-channel.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 90160a814335db6c9ad7e3843fcb968cbc6e9518 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Sep 22 22:39:24 2009 -0300 IncomingFileTransferChannel: Removed exclamation marks from debug. TelepathyQt4/incoming-file-transfer-channel.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 90e794bde42e3114abacf1433f858f4f09b5d779 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Sep 22 22:37:43 2009 -0300 OutgoingFileTransferChannel: Define FT_BLOCK_SIZE and use it as the read buffer size. TelepathyQt4/outgoing-file-transfer-channel.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit 8039ff2f6cbc9e945061c6b718930717706001c0 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Sep 22 22:21:36 2009 -0300 FileTransferChannel: Improved docs according to review suggestions. TelepathyQt4/file-transfer-channel.cpp | 18 ++++++++++++++---- TelepathyQt4/incoming-file-transfer-channel.cpp | 2 ++ TelepathyQt4/outgoing-file-transfer-channel.cpp | 2 ++ 3 files changed, 18 insertions(+), 4 deletions(-) commit e5fe9da2448557029bfcfaa912ff86365e04e469 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Sep 22 22:11:39 2009 -0300 ChannelFactory: Warn when the user tries to create a FileTransferChannel without the Requested property set in immutableProperties. TelepathyQt4/channel-factory.cpp | 6 ++++++ 1 file changed, 6 insertions(+) commit 736f509f687fc0d2f1e1b205e94815de52980be9 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 18 13:03:33 2009 -0300 Update to spec 0.17.28 spec/Channel.xml | 11 +- spec/Channel_Dispatcher.xml | 2 +- spec/Channel_Interface_Call_State.xml | 14 +- spec/Channel_Interface_Delivery_Reporting.xml | 444 -------------------- spec/Channel_Interface_Media_Signalling.xml | 78 ++++ spec/Channel_Interface_Media_Signalling_Future.xml | 164 -------- spec/Channel_Interface_Tube.xml | 2 +- spec/Channel_Type_Contact_Search.xml | 32 +- spec/Channel_Type_File_Transfer.xml | 2 +- spec/Channel_Type_Room_List.xml | 2 +- spec/Channel_Type_Streamed_Media.xml | 161 ++++++- spec/Channel_Type_Streamed_Media_Future.xml | 151 ------- spec/Channel_Type_Text.xml | 4 +- spec/Client_Approver.xml | 9 +- spec/Client_Handler.xml | 65 +++ spec/Connection.xml | 72 ++-- spec/Connection_Interface_Aliasing.xml | 19 +- spec/Connection_Interface_Avatars.xml | 15 + spec/Connection_Interface_Capabilities.xml | 23 +- spec/Connection_Interface_Contact_Capabilities.xml | 145 +++++-- spec/Connection_Interface_Contacts.xml | 64 --- spec/Connection_Interface_Location.xml | 60 +-- spec/Connection_Interface_Renaming.xml | 2 +- spec/Connection_Interface_Requests.xml | 2 + spec/Connection_Interface_Simple_Presence.xml | 12 +- spec/Connection_Manager.xml | 7 +- spec/Debug.xml | 5 +- spec/Media_Stream_Handler.xml | 51 ++- spec/all.xml | 4 +- spec/errors.xml | 82 +++- 30 files changed, 746 insertions(+), 958 deletions(-) commit b4a81158255911513339bb87c1cd6acdfeaebdfa Author: Andre Moreira Magalhaes (andrunko) Date: Tue Sep 22 20:53:35 2009 -0300 contactlist cm: Fixed crash when list was being destroyed twice. tests/lib/contactlist/contact-list-manager.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit d7dc1f16a0717ded49ad934a15cc23c5b5a707c7 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Sep 22 20:07:55 2009 -0300 streamed-media-chan test: Catch up with latest spec/callable example changes. tests/dbus/streamed-media-chan.cpp | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) commit 0d6fe8fbfa2cd42e7495abc05d21d63a44f43122 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Sep 22 20:05:39 2009 -0300 callable cm: Proper check if direction changed when requesting stream direction change. Check against TP_MEDIA_STREAM_DIRECTION_SEND instead of TP_MEDIA_STREAM_DIRECTION_RECEIVE to check if sending is required. tests/lib/callable/media-stream.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 28a8ecae4b4d64b4b368b3e31a5d8584e5f82030 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Sep 22 20:04:34 2009 -0300 Merge 'callable' example CM from telepathy-glib 0.7.36. tests/lib/callable/media-channel.c | 38 +++++++++++++++++++++-------------- tests/lib/callable/media-manager.c | 38 +++++++++++++++++++++-------------- tests/lib/callable/media-stream.c | 39 ++++++++++++++++++++++++++++++++---- 3 files changed, 81 insertions(+), 34 deletions(-) commit a6cf1781e8e23b3c7bc93eb6b79d0104e7c66976 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 17 17:07:23 2009 -0300 Account: Use FileTransferChannelCreationProperties on createFileTransfer methods. TelepathyQt4/account.cpp | 85 +++++++++++++++++++++------------------------- TelepathyQt4/account.h | 17 ++-------- 2 files changed, 41 insertions(+), 61 deletions(-) commit 12c0009bfee93784bb66aba3884d4a8fb248f5a7 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 17 17:06:50 2009 -0300 FileTransferChannelCreationProperties: Added class to be used by Account::createFileTransfer. TelepathyQt4/FileTransferChannelCreationProperties | 13 ++ TelepathyQt4/Makefile.am | 2 + .../file-transfer-channel-creation-properties.cpp | 168 ++++++++++++++++++++ .../file-transfer-channel-creation-properties.h | 90 +++++++++++ 4 files changed, 273 insertions(+) commit 233d0dae6a250ae7a0d999a9d1241ac40673e7ec Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 17 16:03:05 2009 -0300 Let's distribute file-transfer examples header files. examples/file-transfer/Makefile.am | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit d9e90fe246e99d06e545a5be74a1bae5c438c405 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 17 16:01:50 2009 -0300 file-transfer receiver example: Accept multiple incoming file transfers. examples/file-transfer/Makefile.am | 6 +- examples/file-transfer/receiver-channel.cpp | 100 +++++++++++++++++++++++++++ examples/file-transfer/receiver-channel.h | 60 ++++++++++++++++ examples/file-transfer/receiver.cpp | 72 ++++--------------- examples/file-transfer/receiver.h | 8 --- 5 files changed, 176 insertions(+), 70 deletions(-) commit d10c34a9af488ac7eb283bf4b9a87e84892271e4 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 17 15:59:43 2009 -0300 IncomingFileTransferChannel: Do not print socket error, as it always happen when the transfer finishes. When the transfer finishes, completed or not the CM closes the socket, which generate a socket error with QAbstractSocket::RemoteHostClosedError. Let's not debug this. TelepathyQt4/incoming-file-transfer-channel.cpp | 1 - 1 file changed, 1 deletion(-) commit f3446b3c5995b3a74e91022a961009819bea4ccf Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 17 15:35:56 2009 -0300 file-transfer receiver example: Improved progress output. examples/file-transfer/receiver.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit cde11ab50371442e7e569cc4fd7f1accdc07aa2d Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 17 15:35:23 2009 -0300 file-transfer sender example: Improved progress output. examples/file-transfer/sender.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 28b2f7018ebf51b020514fa2746d6b1a24c6fb2c Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 17 15:23:45 2009 -0300 OutgoingFileTransferChannel: Make provideFile require FileTransferChannel::FeatureCore. This is needed cause the handling of provideFile requires a proper FileTransferStateChanged handling. TelepathyQt4/outgoing-file-transfer-channel.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) commit 86a8fe51e014212f0ba5bc05c15b8ef5f3c51a20 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 17 15:22:42 2009 -0300 IncomingFileTransferChannel: Make acceptFile require FileTransferChannel::FeatureCore. This is needed cause the handling of acceptFile requires a proper FileTransferStateChanged handling. TelepathyQt4/incoming-file-transfer-channel.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) commit 94b5e36109ccd9b48af80776b8f9a8429057935f Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 17 15:21:47 2009 -0300 file-transfer receiver example: Make sure the saved filename does not contain "/". examples/file-transfer/receiver.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit b61b9ed319fd847be5aa8f6b9a101bfad106655b Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 17 15:14:37 2009 -0300 OutgoingFileTransferChannel: Improved docs. TelepathyQt4/outgoing-file-transfer-channel.cpp | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) commit ce232df66808405c24d6162e9978a3be62ce3af3 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 17 15:14:30 2009 -0300 IncomingFileTransferChannel: Improved docs. TelepathyQt4/incoming-file-transfer-channel.cpp | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) commit 53e8926751096180700770bb5a56d595aa6bb44e Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 17 15:14:17 2009 -0300 FileTransferChannel: Improved docs. TelepathyQt4/file-transfer-channel.cpp | 132 ++++++++++++++++++++++++++++---- 1 file changed, 118 insertions(+), 14 deletions(-) commit 4ff889d3eb921cce6899eda5d329f697df0845e7 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Sep 17 14:24:34 2009 -0300 OutgoingFileTransferChannel: Consider initialOffset while sending data. TelepathyQt4/outgoing-file-transfer-channel.cpp | 45 +++++++++++++++++++++-- 1 file changed, 41 insertions(+), 4 deletions(-) commit e10d456a975f57bb2c012bd6d7a1cd895e81968e Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 16 22:59:50 2009 -0300 Actually use Incoming/OutgoingFileTransferChannel. Reduced FileTransferChannel into a base class inherited by Incoming/OutgoingFileTransferChannel. FileTransferChannel can now be used by observers. which do not call accept/provideFile but still want to check progress, state changes... ChannelFactory now returns specialized classes for channels of type FileTransfer if immutableProperties contains the Requested flag. Updated file-transfer examples to use the new classes. TelepathyQt4/Makefile.am | 8 + TelepathyQt4/channel-factory.cpp | 23 +- TelepathyQt4/file-transfer-channel.cpp | 362 ++++++++++++-------------------- TelepathyQt4/file-transfer-channel.h | 25 ++- TelepathyQt4/types.h | 4 + examples/file-transfer/receiver.cpp | 3 +- examples/file-transfer/receiver.h | 2 +- examples/file-transfer/sender.cpp | 3 +- examples/file-transfer/sender.h | 2 +- 9 files changed, 191 insertions(+), 241 deletions(-) commit 712141a3a5725a996a2a7b21186db670a53a5357 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 16 22:58:56 2009 -0300 file-transfer sender example: Listen to transferredBytesChanged. examples/file-transfer/sender.cpp | 8 ++++++++ examples/file-transfer/sender.h | 1 + 2 files changed, 9 insertions(+) commit 9d9551223d783a748f0aa64a2fd187d95f9366ab Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 16 22:57:36 2009 -0300 file-transfer receiver example: Prefix saved filename with TelepathyQt4FTReceiverExample_ and listen to transferredBytesChanged. examples/file-transfer/receiver.cpp | 12 ++++++++++-- examples/file-transfer/receiver.h | 1 + 2 files changed, 11 insertions(+), 2 deletions(-) commit c66cdf5d355d7242c6d01a67a9b2d897d7a45d32 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 16 22:53:17 2009 -0300 Proper demarshal result of a PendingVariant call. TelepathyQt4/pending-variant.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 2096f96d0be0de50b7c59e84e2cab49ab18c097a Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 16 22:51:51 2009 -0300 OutgoingFileTransferChannel: Added specialized class for outgoing file transfer channels. TelepathyQt4/OutgoingFileTransferChannel | 13 + TelepathyQt4/outgoing-file-transfer-channel.cpp | 292 +++++++++++++++++++++++ TelepathyQt4/outgoing-file-transfer-channel.h | 76 ++++++ 3 files changed, 381 insertions(+) commit 4ce437259ccbad94abb3574aedd9bdb8b42a51df Author: Andre Moreira Magalhaes (andrunko) Date: Wed Sep 16 22:50:40 2009 -0300 IncomingFileTransferChannel: Added specialized class for incoming file transfer channels. TelepathyQt4/IncomingFileTransferChannel | 13 ++ TelepathyQt4/incoming-file-transfer-channel.cpp | 266 +++++++++++++++++++++++ TelepathyQt4/incoming-file-transfer-channel.h | 75 +++++++ 3 files changed, 354 insertions(+) commit 3f8e71c85950a7672d1065696488398bbba84f5e Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 11 14:04:20 2009 -0300 Account: Make sure TargetHandle is uint when contact is 0 on createFileTransfer. TelepathyQt4/account.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 15ad983071a79b5705ce0f3b1e978b382824bf6e Merge: fd2b57a 1a0538f Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 11 14:02:09 2009 -0300 Merge branch 'trivia' Reviewed-by: Simon McVittie (smcv) commit 1a0538f2b45a05295b6ff0acd52267646f478b92 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 11 11:16:58 2009 -0300 Account: Make sure TargetHandle is uint when contact is 0 on ensureMediaCall/TextChat. TelepathyQt4/account.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit ca4e2facdc59868bea589daff7fbb4ee64c54344 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 11 10:07:49 2009 -0300 Explicitly use uint for TargetHandleType. TelepathyQt4/account.cpp | 10 +++++----- TelepathyQt4/connection.cpp | 2 +- TelepathyQt4/contact-manager.cpp | 2 +- examples/call/call-handler.cpp | 2 +- tests/dbus/account-channel-dispatcher.cpp | 2 +- tests/dbus/chan-basics.cpp | 4 ++-- tests/dbus/chan-group.cpp | 2 +- tests/dbus/client.cpp | 4 ++-- tests/dbus/conn-requests.cpp | 4 ++-- tests/dbus/streamed-media-chan.cpp | 18 +++++++++--------- 10 files changed, 25 insertions(+), 25 deletions(-) commit 193d60bf2d0842effe67a33ad8dc53d0b0b10225 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 11 10:11:01 2009 -0300 file-transfer sender example: Explicitly use uint for TargetHandlerType when creating FileTransfer channels. examples/file-transfer/sender.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6f4a9a9bd5af1407914ab515a652bdb86ec907a5 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 11 10:10:31 2009 -0300 Account: Explicitly use uint for TargetHandleType when creating FileTransfer channels. TelepathyQt4/account.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 6dc983c2e76d216db89bf39c724dda3c7fa66658 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Sep 11 10:10:08 2009 -0300 Account: Use proper ChannelType when creating FileTransfer channels. TelepathyQt4/account.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit d1d97307fcb15af49a925394d39255bd3e88853c Author: Andre Moreira Magalhaes (andrunko) Date: Tue Sep 8 22:37:10 2009 -0300 Added file-transfer examples to .gitignore. .gitignore | 2 ++ 1 file changed, 2 insertions(+) commit 4f038c7130002d680204be3f1057494ddc88f46d Author: Andre Moreira Magalhaes (andrunko) Date: Tue Sep 8 22:36:30 2009 -0300 Added file-transfer examples to build system. configure.ac | 1 + examples/Makefile.am | 4 ++-- examples/file-transfer/Makefile.am | 46 ++++++++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 2 deletions(-) commit 42ce74c5c3384029f28e683ac33d442d0b106f19 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Sep 8 22:36:07 2009 -0300 file-transfer receiver example: Added example for a file transfer receiver. examples/file-transfer/receiver.cpp | 188 +++++++++++++++++++++++++++++++++++ examples/file-transfer/receiver.h | 67 +++++++++++++ 2 files changed, 255 insertions(+) commit 3cdab3d1e4fc9ff189c69eee3c5440978851f35c Author: Andre Moreira Magalhaes (andrunko) Date: Tue Sep 8 22:34:47 2009 -0300 file-transfer sender example: Added example for a file transfer sender. examples/file-transfer/sender.cpp | 313 +++++++++++++++++++++++++++++++++++++ examples/file-transfer/sender.h | 79 ++++++++++ 2 files changed, 392 insertions(+) commit 6e04b7c80893d66c0060bbb281b47ac997047d58 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Sep 8 22:30:56 2009 -0300 Account: Added initial methods to create a file transfer channel using ChannelRequest. The methods signature are not set and may change. TelepathyQt4/account.cpp | 128 +++++++++++++++++++++++++++++++++++++++++++++- TelepathyQt4/account.h | 23 +++++++++ 2 files changed, 150 insertions(+), 1 deletion(-) commit 3ba8c67cc7b0ff1a19af2f2aac2fd2ef2135febe Author: Andre Moreira Magalhaes (andrunko) Date: Tue Sep 8 22:28:56 2009 -0300 FileTransferChannel: Added support for full-featured FileTransfer support. TelepathyQt4/file-transfer-channel.cpp | 479 +++++++++++++++++++++++++++++++- TelepathyQt4/file-transfer-channel.h | 37 +++ 2 files changed, 511 insertions(+), 5 deletions(-) commit c7d61301be712e10e33ce28adb6f97ab35457d96 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Sep 8 22:30:22 2009 -0300 Channel: Added accessor for fileTransferInterface. TelepathyQt4/channel.h | 6 ++++++ 1 file changed, 6 insertions(+) commit 1f1090739834de07cd64c7202d6dc0d36663c146 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Sep 8 22:27:34 2009 -0300 Auto generate classes/types for Channel Tube interface. This is needed as some types used in FileTransferChannel are defined in the Tube interface. TelepathyQt4/channel.xml | 1 + 1 file changed, 1 insertion(+) commit 8f74a2096f6987684256b398860a0311a5881803 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Sep 8 22:26:58 2009 -0300 Added dependency to QtNetwork module (will be used by FileTrasnferChannel). TelepathyQt4/Makefile.am | 6 ++++-- configure.ac | 5 +++++ 2 files changed, 9 insertions(+), 2 deletions(-) commit f7b91780392c41557a85607065ac73154eeb1d30 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Sep 8 22:24:09 2009 -0300 PendingVariant: Added PendingVariant class. PendingVariant is a new PendingOperation that can handle QDBusPendingCalls that return a QVariant. The result can be retrieved using PendingVariant::result(). TelepathyQt4/Makefile.am | 4 ++ TelepathyQt4/PendingVariant | 13 ++++++ TelepathyQt4/pending-variant.cpp | 82 ++++++++++++++++++++++++++++++++++++++ TelepathyQt4/pending-variant.h | 58 +++++++++++++++++++++++++++ 4 files changed, 157 insertions(+) commit fd2b57a9d48bfd226d97f3a9c2c7444b211042d3 Merge: 56f4f79 3abc075 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Aug 25 13:41:36 2009 -0300 Merge branch 'trivia' Reviewed-by: Simon McVittie (smcv) commit 56f4f799a020ee63a3a1b83daad5c07c25ccfdc9 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Aug 25 13:39:31 2009 -0300 Start 0.1.11 development NEWS | 5 +++++ configure.ac | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) commit 21e956ff675bf4e0760d6ebe446fb8fbc9cbb16b Author: Andre Moreira Magalhaes (andrunko) Date: Tue Aug 25 13:07:21 2009 -0300 Prepare release 0.1.10 NEWS | 24 ++++++++++++++++++++++-- configure.ac | 4 ++-- 2 files changed, 24 insertions(+), 4 deletions(-) commit 201f2dcc73ac36ea2dde6f482e012b707583f359 Merge: a2a946e e2b1a47 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Aug 25 11:16:31 2009 -0300 Merge branch 'dtmf' Conflicts: tests/dbus/streamed-media-chan.cpp tests/lib/callable/media-channel.c Reviewed-by: Simon McVittie (smcv) commit e2b1a47ad89eaff3b8e0f63f5b141b39bf432cdd Author: Andre Moreira Magalhaes (andrunko) Date: Tue Aug 25 10:07:47 2009 -0300 callable cm: Use tp_svc_channel_interface_dtmf_return_from_start_tone when returning from StartTone. tests/lib/callable/media-channel.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a2a946e96d5f1a0132c94434fea5ccdc22a06378 Merge: 3d199bc 81d8ffa Author: Andre Moreira Magalhaes (andrunko) Date: Tue Aug 25 10:04:20 2009 -0300 Merge branch 'hold' Reviewed-by: Simon McVittie (smcv) commit a11305688a56bb4950e174437aceb783262f141f Author: Andre Moreira Magalhaes (andrunko) Date: Mon Aug 24 14:54:08 2009 -0300 streamed-media-chan test: Added tests for StreamedMediaChannel DTMF interface support. tests/dbus/streamed-media-chan.cpp | 145 ++++++++++++++++++++++++++++++++++++ 1 file changed, 145 insertions(+) commit d9c2cb04f3c21c32a15ae019ff9b5e6275a830f9 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Aug 24 14:53:33 2009 -0300 callable cm: Added DTMF interface simulation support. tests/lib/callable/media-channel.c | 99 ++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) commit 81d8ffaccbfcdcc164f1f7a1cf05973bb8464c07 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Aug 18 12:42:44 2009 -0300 StreamedMediaChannel: Renamed requestLocalHold method to requestHold. TelepathyQt4/streamed-media-channel.cpp | 8 ++++---- TelepathyQt4/streamed-media-channel.h | 2 +- tests/dbus/streamed-media-chan.cpp | 12 ++++++------ 3 files changed, 11 insertions(+), 11 deletions(-) commit 59ef6ce118de2e5f9f7fb22e029ce7b51e84d57b Author: Andre Moreira Magalhaes (andrunko) Date: Tue Aug 18 12:37:04 2009 -0300 StreamedMediaChannel: Improved docs for localHoldState and localHoldStateReason. TelepathyQt4/streamed-media-channel.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 680f7382273954009d3d1ff295c0d47d79d5de3b Author: Andre Moreira Magalhaes (andrunko) Date: Tue Aug 18 11:26:07 2009 -0300 callable cm: Merge stylistic fixes from tp-glib. tests/lib/callable/media-channel.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) commit cbde7946564e184f50e4a8e0a4b3fe67ca0f1e52 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 13 20:26:24 2009 -0300 streamed-media-chan test: Added test for inability to unhold (unable to reacquire a resource for example). tests/dbus/streamed-media-chan.cpp | 87 +++++++++++++++++++++++++++++++++++- 1 file changed, 85 insertions(+), 2 deletions(-) commit 3c5edee3c3aca377ac9777522df9d9270564f4a3 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 13 20:25:16 2009 -0300 callable cm: Added simulation for inability to unhold (unable to reacquire a resource for example). tests/lib/callable/media-channel.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) commit 3abc075dd76b2f2a9b52a6be01056bd1ba071d11 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 13 19:55:51 2009 -0300 StreamedMediaChannel: Always delete watchers when the call finished. TelepathyQt4/streamed-media-channel.cpp | 2 ++ 1 file changed, 2 insertions(+) commit 4bc7304a04f24f4a592cd7d57b980206b62c7b5a Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 13 19:54:09 2009 -0300 StreamedMediaChannel: Do not emit localHoldStateChanged if local hold state did not change. TelepathyQt4/streamed-media-channel.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) commit 606d320b70cd46b9f140e1aa4e70356e44120164 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 13 19:53:13 2009 -0300 StreamedMediaChannel: Do not fail if Hold.GetHoldState fails. TelepathyQt4/streamed-media-channel.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) commit 35240d546e4d8a0a440f5cd384c3109d162b3d33 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 13 19:52:38 2009 -0300 StreamedMediaChannel: Updated docs for requestLocalHold. TelepathyQt4/streamed-media-channel.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) commit 6f01d4c762dfef879bd796dd83ab8381134b433c Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 13 19:39:34 2009 -0300 StreamedMediaChannel: Changed Hold interface methods to preprend "local", indicating it's the local hold state. TelepathyQt4/streamed-media-channel.cpp | 92 +++++++++++++------------- TelepathyQt4/streamed-media-channel.h | 14 ++-- tests/dbus/streamed-media-chan.cpp | 108 +++++++++++++++---------------- 3 files changed, 108 insertions(+), 106 deletions(-) commit f54f4a377b26e5e6111a40624c92110c5e31a626 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Aug 12 12:56:52 2009 -0300 streamed-media-chan test: Added tests for StreamedMediaChannel hold interface support. tests/dbus/streamed-media-chan.cpp | 149 ++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) commit f13be9345a34fa4beb2b555a899c1e00646c7a8c Author: Andre Moreira Magalhaes (andrunko) Date: Wed Aug 12 13:01:19 2009 -0300 callable cm: Added hold interface simulation support. tests/lib/callable/media-channel.c | 112 ++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) commit 80ff7d67fe9b985f2be1b50e025a919bcf962654 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Aug 12 11:29:37 2009 -0300 StreamedMediaChannel: Added Hold interface support. TelepathyQt4/streamed-media-channel.cpp | 147 ++++++++++++++++++++++++++++++- TelepathyQt4/streamed-media-channel.h | 11 +++ 2 files changed, 157 insertions(+), 1 deletion(-) commit 64c0954cfb21e38750ce7c48cc41aae425483d39 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 13 00:18:05 2009 -0300 StreamedMediaChannel: Added DTMF interface support. TelepathyQt4/streamed-media-channel.cpp | 56 +++++++++++++++++++++++++++++++ TelepathyQt4/streamed-media-channel.h | 3 ++ 2 files changed, 59 insertions(+) commit 3d199bc04901a3e5d57fe64cefb45543fe6adb6e Merge: 001e17f 08be450 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 13 19:19:17 2009 -0300 Merge branch 'bug23282' Reviewed-by: Simon McVittie (smcv) commit 001e17fcee6caa2dcd7240859a96c618a685fd47 Merge: a293377 7e94f7b Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 13 19:18:59 2009 -0300 Merge branch 'trivia' Reviewed-by: Simon McVittie (smcv) commit 08be450c55f038ec277f6bb56f4c875f15a75b74 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Aug 12 12:55:24 2009 -0300 Channel: Proper feed ReadinessHelper with interfaces when they are retrieved. TelepathyQt4/channel.cpp | 2 ++ 1 file changed, 2 insertions(+) commit 7e94f7b9185758205743e3f6c8a9d6bb8f0fa089 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Aug 11 23:44:37 2009 -0300 Moved OptionalInterfaceFactory::InterfaceSupportedChecking docs from DBusProxy to OptionalInterfaceFactory. TelepathyQt4/dbus-proxy.cpp | 19 ------------------- TelepathyQt4/optional-interface-factory.cpp | 24 ++++++++++++++++++++++++ 2 files changed, 24 insertions(+), 19 deletions(-) commit c277d20157caff182ebec7fd1c1ee979b525cd6b Author: Andre Moreira Magalhaes (andrunko) Date: Tue Aug 11 23:42:01 2009 -0300 Use struct Private instead of class Private for consistence. TelepathyQt4/connection-manager.h | 4 ++-- TelepathyQt4/dbus-proxy.cpp | 3 +-- TelepathyQt4/dbus-proxy.h | 12 ++++++------ 3 files changed, 9 insertions(+), 10 deletions(-) commit a29337748bf699c5224a75d3c1a1bc616dda3bba Merge: 1123177 f638afa Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 6 08:57:28 2009 -0300 Merge branch 'trivia' Reviewed-by: Simon McVittie (smcv) commit f638afabbcc4c37ee006dca4fc8d2d89cf8c691b Author: Andre Moreira Magalhaes (andrunko) Date: Thu Aug 6 08:44:34 2009 -0300 Removed cli/Client from header guards. TelepathyQt4/AbstractClient | 4 ++-- TelepathyQt4/AbstractClientApprover | 4 ++-- TelepathyQt4/AbstractClientHandler | 4 ++-- TelepathyQt4/AbstractClientObserver | 4 ++-- TelepathyQt4/AbstractInterface | 4 ++-- TelepathyQt4/Account | 4 ++-- TelepathyQt4/AccountInterface | 4 ++-- TelepathyQt4/AccountManager | 4 ++-- TelepathyQt4/AccountManagerInterface | 4 ++-- TelepathyQt4/Channel | 4 ++-- TelepathyQt4/ChannelDispatchOperation | 4 ++-- TelepathyQt4/ChannelDispatchOperationInterface | 4 ++-- TelepathyQt4/ChannelDispatcher | 4 ++-- TelepathyQt4/ChannelDispatcherInterface | 4 ++-- TelepathyQt4/ChannelInterface | 4 ++-- TelepathyQt4/ChannelInterfaceCallStateInterface | 4 ++-- TelepathyQt4/ChannelInterfaceChatStateInterface | 4 ++-- TelepathyQt4/ChannelInterfaceDTMFInterface | 4 ++-- TelepathyQt4/ChannelInterfaceGroupInterface | 4 ++-- TelepathyQt4/ChannelInterfaceHoldInterface | 4 ++-- .../ChannelInterfaceMediaSignallingInterface | 4 ++-- TelepathyQt4/ChannelInterfacePasswordInterface | 4 ++-- TelepathyQt4/ChannelRequest | 4 ++-- TelepathyQt4/ChannelRequestInterface | 4 ++-- TelepathyQt4/ChannelTypeContactListInterface | 4 ++-- TelepathyQt4/ChannelTypeRoomListInterface | 4 ++-- TelepathyQt4/ChannelTypeStreamedMediaInterface | 4 ++-- TelepathyQt4/ChannelTypeTextInterface | 4 ++-- TelepathyQt4/ChannelTypeTubesInterface | 4 ++-- TelepathyQt4/Client | 4 ++-- TelepathyQt4/ClientApproverInterface | 4 ++-- TelepathyQt4/ClientHandlerInterface | 4 ++-- TelepathyQt4/ClientInterface | 4 ++-- TelepathyQt4/ClientInterfaceRequestsInterface | 4 ++-- TelepathyQt4/ClientObserverInterface | 4 ++-- TelepathyQt4/ClientRegistrar | 4 ++-- TelepathyQt4/Connection | 4 ++-- TelepathyQt4/ConnectionInterface | 4 ++-- TelepathyQt4/ConnectionInterfaceAliasingInterface | 4 ++-- TelepathyQt4/ConnectionInterfaceAvatarsInterface | 4 ++-- .../ConnectionInterfaceCapabilitiesInterface | 4 ++-- TelepathyQt4/ConnectionInterfaceContactsInterface | 4 ++-- TelepathyQt4/ConnectionInterfacePresenceInterface | 4 ++-- TelepathyQt4/ConnectionInterfaceRequestsInterface | 4 ++-- .../ConnectionInterfaceSimplePresenceInterface | 4 ++-- TelepathyQt4/ConnectionManager | 4 ++-- TelepathyQt4/ConnectionManagerInterface | 4 ++-- TelepathyQt4/Contact | 4 ++-- TelepathyQt4/ContactManager | 4 ++-- TelepathyQt4/DBus | 4 ++-- TelepathyQt4/DBusDaemonInterface | 4 ++-- TelepathyQt4/DBusProxy | 4 ++-- TelepathyQt4/Feature | 4 ++-- TelepathyQt4/FileTransferChannel | 4 ++-- TelepathyQt4/IntrospectableInterface | 4 ++-- TelepathyQt4/MediaSessionHandler | 4 ++-- TelepathyQt4/MediaSessionHandlerInterface | 4 ++-- TelepathyQt4/MediaStreamHandler | 4 ++-- TelepathyQt4/MediaStreamHandlerInterface | 4 ++-- TelepathyQt4/Message | 4 ++-- TelepathyQt4/MethodInvocationContext | 4 ++-- TelepathyQt4/OptionalInterfaceFactory | 4 ++-- TelepathyQt4/PeerInterface | 4 ++-- TelepathyQt4/PendingAccount | 4 ++-- TelepathyQt4/PendingChannel | 4 ++-- TelepathyQt4/PendingChannelRequest | 4 ++-- TelepathyQt4/PendingConnection | 4 ++-- TelepathyQt4/PendingContactAttributes | 4 ++-- TelepathyQt4/PendingContacts | 4 ++-- TelepathyQt4/PendingFailure | 4 ++-- TelepathyQt4/PendingHandles | 4 ++-- TelepathyQt4/PendingOperation | 4 ++-- TelepathyQt4/PendingReady | 4 ++-- TelepathyQt4/PendingStringList | 4 ++-- TelepathyQt4/PendingSuccess | 4 ++-- TelepathyQt4/PendingVoidMethodCall | 4 ++-- TelepathyQt4/Properties | 4 ++-- TelepathyQt4/PropertiesInterface | 4 ++-- TelepathyQt4/PropertiesInterfaceInterface | 4 ++-- TelepathyQt4/ReadinessHelper | 4 ++-- TelepathyQt4/ReadyObject | 4 ++-- TelepathyQt4/ReceivedMessage | 4 ++-- TelepathyQt4/ReferencedHandles | 4 ++-- TelepathyQt4/ReferencedHandlesIterator | 4 ++-- TelepathyQt4/RoomListChannel | 4 ++-- TelepathyQt4/StatefulDBusProxy | 4 ++-- TelepathyQt4/StatelessDBusProxy | 4 ++-- TelepathyQt4/StreamedMediaChannel | 4 ++-- TelepathyQt4/TextChannel | 4 ++-- TelepathyQt4/abstract-client.h | 4 ++-- TelepathyQt4/abstract-interface.h | 4 ++-- TelepathyQt4/account-manager.h | 4 ++-- TelepathyQt4/account.h | 4 ++-- TelepathyQt4/channel-dispatch-operation.h | 4 ++-- TelepathyQt4/channel-dispatcher.h | 4 ++-- TelepathyQt4/channel-factory.h | 4 ++-- TelepathyQt4/channel-request.h | 4 ++-- TelepathyQt4/channel.h | 4 ++-- TelepathyQt4/client-registrar-internal.h | 4 ++-- TelepathyQt4/client-registrar.h | 4 ++-- TelepathyQt4/client.h | 4 ++-- TelepathyQt4/connection-internal.h | 4 ++-- TelepathyQt4/connection-manager-internal.h | 4 ++-- TelepathyQt4/connection-manager.h | 4 ++-- TelepathyQt4/connection.h | 4 ++-- TelepathyQt4/contact-manager-internal.h | 4 ++-- TelepathyQt4/contact-manager.h | 4 ++-- TelepathyQt4/contact.h | 4 ++-- TelepathyQt4/dbus-proxy.h | 4 ++-- TelepathyQt4/dbus.h | 4 ++-- TelepathyQt4/feature.h | 4 ++-- TelepathyQt4/file-transfer-channel.h | 4 ++-- TelepathyQt4/media-session-handler.h | 4 ++-- TelepathyQt4/media-stream-handler.h | 4 ++-- TelepathyQt4/message.h | 4 ++-- TelepathyQt4/method-invocation-context.h | 4 ++-- TelepathyQt4/optional-interface-factory.h | 4 ++-- TelepathyQt4/pending-account.h | 4 ++-- TelepathyQt4/pending-channel-request-internal.h | 4 ++-- TelepathyQt4/pending-channel-request.h | 4 ++-- TelepathyQt4/pending-channel.h | 4 ++-- TelepathyQt4/pending-connection.h | 4 ++-- TelepathyQt4/pending-contact-attributes.h | 4 ++-- TelepathyQt4/pending-contacts.h | 4 ++-- TelepathyQt4/pending-handles.h | 4 ++-- TelepathyQt4/pending-operation.h | 4 ++-- TelepathyQt4/pending-ready.h | 4 ++-- TelepathyQt4/pending-string-list.h | 4 ++-- TelepathyQt4/properties.h | 4 ++-- TelepathyQt4/readiness-helper.h | 4 ++-- TelepathyQt4/ready-object.h | 4 ++-- TelepathyQt4/referenced-handles.h | 4 ++-- TelepathyQt4/room-list-channel.h | 4 ++-- TelepathyQt4/simple-pending-operations.h | 4 ++-- TelepathyQt4/streamed-media-channel.h | 4 ++-- TelepathyQt4/text-channel.h | 4 ++-- 136 files changed, 272 insertions(+), 272 deletions(-) commit 1123177abf30a9d021dd9e337b8fe9f63ed13ce5 Merge: f26207c 1bb5d25 Author: George Goldberg Date: Thu Jul 30 15:25:39 2009 +0100 Merge branch 'fix-bug-23040' commit 1bb5d25173a7c62a276f675b460e39bce85c734d Author: George Goldberg Date: Thu Jul 30 15:07:53 2009 +0100 Add a check to the pinocchio/cm-basics unit tests for Bug 23040. tests/pinocchio/cm-basics.cpp | 2 ++ 1 file changed, 2 insertions(+) commit 1c2c75f7dc73412c47006ef5a739354a82ce331e Author: George Goldberg Date: Thu Jul 30 14:41:37 2009 +0100 Fix Bug 23040, running connection managers appear twice in ConnectionManager::listNames result. TelepathyQt4/connection-manager-internal.h | 3 ++- TelepathyQt4/connection-manager.cpp | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) commit f26207c81f32e01f43473440089a4032e4e898f9 Merge: 92cfc5e 5a04501 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jul 27 12:26:55 2009 -0300 Merge branch 'bug21335' Reviewed-by: Simon McVittie (smcv) commit 92cfc5e90b88a6b74af44a091cffe1d16f02363e Merge: 6f7d7fe fac6bb5 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jul 27 12:26:37 2009 -0300 Merge branch 'bug20269' Reviewed-by: Simon McVittie (smcv) commit 5a04501e75c60c92694af059b9d26a1df68aba9b Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jul 27 12:21:33 2009 -0300 Channel: Handle MembersChanged for reason Renamed when renaming "myself". TelepathyQt4/channel.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) commit 90f37576c409a0a7c6bc655bc861e1aa5728e990 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jul 27 12:08:55 2009 -0300 Channel: Added comments for change-reason Invited/Separated that they shouldn't happen as a self remove reason. TelepathyQt4/channel.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit c67aebed12528a0058c310796f1511e8ff68efa8 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jul 27 11:49:32 2009 -0300 Channel: Improved change-reason mapping to Telepathy Error. Improved change-reason mapping to Telepathy Error and added a comment on what is being mapped to default case (no error defined). TelepathyQt4/channel.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) commit 5be690664b226b81f2c0b2abd11f62a1f96e8e3e Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jul 27 11:48:33 2009 -0300 Channel: Use TELEPATHY_ERROR_TERMINATED as invalidate reason if change reason is not known. TelepathyQt4/channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 33072423b5a0242de4e4900601fa8088eba005fa Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 24 14:59:53 2009 -0300 Channel: Check if change-reason is being used properly on invalidate (Closed) when removing self handle. tests/dbus/chan-group.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) commit 8d917bdf3306e18c0aa9c154c8b7ecd79eb4c4a4 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 24 14:58:53 2009 -0300 csh test cm: Close channel when self handle is removed. tests/lib/csh/room.c | 6 ++++++ 1 file changed, 6 insertions(+) commit 414089c717164d535c20b577f8afaed60804420d Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 24 14:58:23 2009 -0300 Channel: Use change-reason when invalidating channel on closed. TelepathyQt4/channel.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) commit df349e220a14a70ed8c1c9480693cb1225a61fa7 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 24 14:57:57 2009 -0300 Channel: Make sure groupSelfContactRemoveInfo is set even if Closed is called before building the contacts. TelepathyQt4/channel.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) commit abacd3d1af1666af88c744593bf7a3558ab53db8 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 24 14:56:42 2009 -0300 Channel: Always use change-reason even if the reason is None, so GroupMemberChangeDetails::hasReason returns true. TelepathyQt4/channel.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) commit 04a36e0a312fbfe9915438ed8bc70214b82bb651 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 24 14:55:30 2009 -0300 Channel: Added method to map a GroupMembersChangedDetails change-reason to a Telepathy error. TelepathyQt4/channel.cpp | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) commit fac6bb58d2644d657101caad9d80a8e77b83565d Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 24 12:48:57 2009 -0300 Fixed bug 20269: Channel's Contact objects should initially have no features. TelepathyQt4/channel.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) commit 4456919ad7ff1021811c0a0d78b5df428079e09c Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 24 12:45:28 2009 -0300 chan-group test: Added test to Channel::groupSelfContactRemoveInfo. tests/dbus/chan-group.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) commit 3533a2f5e3169463f562dec335b27a27caebcdf0 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jul 24 12:45:01 2009 -0300 Fixed bug 21335: Implement Group self-handle removal reasons. TelepathyQt4/channel.cpp | 3 +++ 1 file changed, 3 insertions(+) commit 6f7d7feea4a6c07b9b5b050c3aeb65ac2f6d9496 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 23 19:43:30 2009 -0300 Start 0.1.10 development NEWS | 5 +++++ configure.ac | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) commit d5dec56858acb6035ea4ea141b7206c3af9dc3ef Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 23 19:17:07 2009 -0300 Prepare release 0.1.9 NEWS | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ configure.ac | 2 +- 2 files changed, 58 insertions(+), 1 deletion(-) commit 9721acc268d59a62e3cd1b35c3a876177a99a141 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 23 19:22:53 2009 -0300 Fixed make dist. Added missing manager files to build system. tests/Makefile.am | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit b1dddf0d1c6cbbd033aef63b7be3afcd65784651 Merge: c3aa1c0 23a4b8b Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 23 18:41:43 2009 -0300 Merge commit 'gberg/fix-api-inconsistency' Reviewed-by: Simon McVittie (smcv) commit c3aa1c091be90085ab1cb3a532be3b219b1c3a14 Merge: cb6c27c cb6d8a6 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 23 18:40:53 2009 -0300 Merge commit 'gberg/doc-fixes' Reviewed-by: Simon McVittie (smcv) commit cb6c27c256c85d019ca22b236681a8867c4c4cd6 Merge: 59d1b74 535e338 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 23 18:39:19 2009 -0300 Merge branch 'misc' Reviewed-by: Simon McVittie (smcv) commit 59d1b7473fc7d05b90379264c814539c0b9fbcc5 Merge: 1ecf6d6 4a0f88b Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 23 18:39:09 2009 -0300 Merge branch 'trivia' Reviewed-by: Simon McVittie (smcv) commit 1ecf6d649025d673fc9e3f12bf6db23de77c8b1a Merge: 304e033 a9feff9 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 23 18:38:10 2009 -0300 Merge branch 'roster-groups' Reviewed-by: Simon McVittie (smcv) commit a9feff9c9dcab5b58f5cf89684a31d18a6b3892d Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 23 14:56:14 2009 -0300 ContactManager: Explicitly say that addGroup succeeds if the group already exists. TelepathyQt4/contact-manager.cpp | 3 +++ 1 file changed, 3 insertions(+) commit e60c068b0063d963fd9643066fdc2505de295272 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 23 14:50:31 2009 -0300 ContactManager: Renamed groupAdd/RemoveContacts to addContactsToGroup/removeContactsFromGroup. TelepathyQt4/contact-manager.cpp | 8 ++++---- TelepathyQt4/contact-manager.h | 4 ++-- TelepathyQt4/contact.cpp | 4 ++-- tests/dbus/conn-roster-groups.cpp | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) commit 59cbc78bcbd2e68e4106f5395592d8bce6a13231 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 23 14:44:39 2009 -0300 Contact/ContactManager: Docs++. TelepathyQt4/contact-manager.cpp | 4 ++-- TelepathyQt4/contact.cpp | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) commit 521f3b2054465aec97ba4cba5d0790614b9a67d6 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 23 14:42:14 2009 -0300 Fixed copy/paste error. tests/dbus/conn-roster-groups.cpp | 2 +- tests/dbus/conn-roster.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit d746ae2d36c637ae3221857eab2099d0b02f108d Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 23 14:35:24 2009 -0300 ContactManager: Proper remove contact list group even if there are contacts in the group. TelepathyQt4/Makefile.am | 2 ++ TelepathyQt4/contact-manager-internal.h | 50 ++++++++++++++++++++++++++++++ TelepathyQt4/contact-manager.cpp | 51 ++++++++++++++++++++++++++++--- 3 files changed, 99 insertions(+), 4 deletions(-) commit a6a8ba75dd1b40e22e8e5638a31e7d0e971e9743 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 23 14:10:05 2009 -0300 ContactManager: Use ensureChannel to create contact list groups, so it succeeds if the group already exists. TelepathyQt4/contact-manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 47e1596c2c6f78f1f08b2aa5c123d27df526d8b2 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 23 14:09:19 2009 -0300 ContactManager: Removed TODO. TelepathyQt4/contact-manager.cpp | 9 --------- 1 file changed, 9 deletions(-) commit a2797d76debe332cb2c2eaec16ecff91ae5785aa Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 23 14:08:19 2009 -0300 ContactManager: Let's not assume that contact list groups with empty names are not allowed, let the CM decide it. TelepathyQt4/contact-manager.cpp | 5 ----- 1 file changed, 5 deletions(-) commit 0ca784231a2cd582391dfc8e0e634abf9b8f561f Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 23 14:00:31 2009 -0300 Connection: Comments++. TelepathyQt4/connection.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) commit f5eb9a449f051959e8e1106dc86d44f3dab4a7b9 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 23 13:55:58 2009 -0300 Connection/ContactManager: Use proper english when naming contact list channels and contact list group channels. TelepathyQt4/connection.cpp | 34 ++++++++++---------- TelepathyQt4/contact-manager.cpp | 64 +++++++++++++++++++------------------- TelepathyQt4/contact-manager.h | 8 ++--- 3 files changed, 53 insertions(+), 53 deletions(-) commit 6d40ac3aef2873081d7bd9d36f2f6399ca08c9c5 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 23 13:47:01 2009 -0300 Connection: Refactor code that checks if FeatureRosterGroups is ready. Changes suggested by Simon McVittie TelepathyQt4/connection.cpp | 43 ++++++++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 15 deletions(-) commit 23a4b8b16e27049f59485b225104bc1e2d05fcb7 Author: George Goldberg Date: Thu Jul 23 16:18:17 2009 +0100 Chat requiredForRegistration() to isRequiredForRegistration() to make it consistent with other bool returning getters. TelepathyQt4/connection-manager.cpp | 2 +- TelepathyQt4/connection-manager.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 535e338e5481454ecdd4084c43afe20c2603bbe9 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 23 12:03:39 2009 -0300 FileTransferChannel: Fixed redundancy on comment. TelepathyQt4/file-transfer-channel.cpp | 2 +- TelepathyQt4/file-transfer-channel.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 66bd3d2b5872386db0624e6d17310c1799b5e5f1 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 23 12:02:56 2009 -0300 RoomListChannel: Fixed redundancy on comment. TelepathyQt4/room-list-channel.cpp | 2 +- TelepathyQt4/room-list-channel.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 1e83635c90b87967ecf1b6377b4618992d05dba7 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 23 02:12:09 2009 -0300 Renamed FileTransfer to FileTransferChannel. TelepathyQt4/FileTransfer | 13 ----- TelepathyQt4/FileTransferChannel | 13 +++++ TelepathyQt4/Makefile.am | 8 +-- TelepathyQt4/channel-factory.cpp | 4 +- TelepathyQt4/file-transfer-channel.cpp | 92 ++++++++++++++++++++++++++++++++ TelepathyQt4/file-transfer-channel.h | 56 +++++++++++++++++++ TelepathyQt4/file-transfer.cpp | 92 -------------------------------- TelepathyQt4/file-transfer.h | 56 ------------------- TelepathyQt4/types.h | 4 +- 9 files changed, 169 insertions(+), 169 deletions(-) commit 6ec7fbf49385426f89bcab6a72c4f6f3f185f183 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 23 02:04:56 2009 -0300 Renamed RoomList to RoomListChannel. TelepathyQt4/Makefile.am | 8 ++-- TelepathyQt4/RoomList | 13 ------ TelepathyQt4/RoomListChannel | 13 ++++++ TelepathyQt4/channel-factory.cpp | 4 +- TelepathyQt4/pending-channel.cpp | 4 -- TelepathyQt4/room-list-channel.cpp | 91 ++++++++++++++++++++++++++++++++++++ TelepathyQt4/room-list-channel.h | 56 ++++++++++++++++++++++ TelepathyQt4/room-list.cpp | 91 ------------------------------------ TelepathyQt4/room-list.h | 56 ---------------------- TelepathyQt4/types.h | 4 +- 10 files changed, 168 insertions(+), 172 deletions(-) commit b5eb4b3c8e74b0b25839e9659dbaa3e927ba158a Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 23 01:46:15 2009 -0300 ContactManager: Removed contactGroups method in favor of Contact::groups(). TelepathyQt4/contact-manager.cpp | 19 ------------------- TelepathyQt4/contact-manager.h | 1 - 2 files changed, 20 deletions(-) commit a213a27e6db5685e2ff29e04e88788812d4e8088 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 23 01:45:48 2009 -0300 Contact: Added some docs. TelepathyQt4/contact.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) commit 7ad79f9954ec4da393306f5a1ad9df0a10615815 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 23 01:37:27 2009 -0300 roster-groups example: Added tests for contact list group removal. tests/dbus/conn-roster-groups.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) commit baccfe9e754e53d24024d82a107aeeec49e2d0ce Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 23 01:36:26 2009 -0300 ContactManager: Remove contact list group channel from internal list when group is removed. TelepathyQt4/contact-manager.cpp | 1 + 1 file changed, 1 insertion(+) commit a5a94d1c9c23dcfee0f7a65c66652ba07819547e Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 23 01:31:16 2009 -0300 roster-groups example: Added tests for removing contacts from a contact list group. tests/dbus/conn-roster-groups.cpp | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) commit 979ff78a74bec16d8a0c08f9f51251a60ec60922 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 23 01:26:50 2009 -0300 roster-groups example: Added tests for adding contacts to a contact list group. tests/dbus/conn-roster-groups.cpp | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) commit c581d3303f4d49fbe076f7e0de1ace4fb339c635 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 23 01:13:46 2009 -0300 roster-groups example: Added tests for contact list group creation. tests/dbus/conn-roster-groups.cpp | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) commit b23858efb0ea5f62670342f4102303f76214a97f Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jul 23 01:11:13 2009 -0300 ContactManager: Create empty contact list groups using CreateChannel instead of RequestHandles. TelepathyQt4/contact-manager.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) commit 067fc084b451c04c197b62197901be18067f5c38 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 22 19:38:46 2009 -0300 roster-groups example: Added initial test cases for roster groups support. tests/dbus/Makefile.am | 5 + tests/dbus/conn-roster-groups.cpp | 204 +++++++++++++++++++++++++++++++++++++ 2 files changed, 209 insertions(+) commit 15097d730cf5e6cfac0bef0f5de34af9fbada222 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 22 19:37:44 2009 -0300 Merge 'contactlist' example CM from latest tp-glib. tests/lib/contactlist/conn.c | 9 ++++----- tests/lib/contactlist/contact-list-manager.c | 18 ++++++++---------- tests/lib/contactlist/contact-list.c | 5 ++++- 3 files changed, 16 insertions(+), 16 deletions(-) commit 90d0f4b64c3561b22a577af2a9f648f8751ec29f Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 22 16:16:23 2009 -0300 Contact: Cache contact list groups. TelepathyQt4/contact-manager.cpp | 19 +++++-------------- TelepathyQt4/contact.cpp | 15 ++++++++++----- 2 files changed, 15 insertions(+), 19 deletions(-) commit ffc0fc412f0e545671220e370ac1e1abf0d82cab Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 22 16:08:54 2009 -0300 ContactManager: Added membersAdded/removed to groupMembersChanged signal. TelepathyQt4/contact-manager.cpp | 4 ++-- TelepathyQt4/contact-manager.h | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) commit 7bc0865c692591cee8de670cef3263dcbf47cdbc Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 22 16:06:51 2009 -0300 ContactManager: Renamed groupChanged signal to groupMembersChanged. TelepathyQt4/contact-manager.cpp | 2 +- TelepathyQt4/contact-manager.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit c48f9e6f0872c90d9103b0d5b865259d502e2b0a Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 22 16:03:54 2009 -0300 ContactManager: Update contacts when contact list group changes. TelepathyQt4/contact-manager.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) commit 0b0974171f4b1598c4d3537080810f24ec00f26a Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 22 16:01:57 2009 -0300 ContactManager: Added groupChanged signal. TelepathyQt4/contact-manager.cpp | 27 +++++++++++++++++++++++++++ TelepathyQt4/contact-manager.h | 7 +++++++ 2 files changed, 34 insertions(+) commit aa13ae102cc84579ecad19ea930c7e898caea6b0 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 22 15:55:50 2009 -0300 ContactManager: Refactor common code for setting/adding contact list groups. TelepathyQt4/contact-manager.cpp | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) commit 36159173b7fa4359eefdea75e8abbe3c8a3c9a61 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 22 15:53:48 2009 -0300 ContactManager: Added Private::parent member. TelepathyQt4/contact-manager.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit 6b9411d1de738ab31a00b000b17aac76b3ee170c Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 22 15:49:18 2009 -0300 Contact: Added removedFromGroup signal. TelepathyQt4/contact.cpp | 5 +++++ TelepathyQt4/contact.h | 2 ++ 2 files changed, 7 insertions(+) commit d502906d83ebeaa4adee0873e77a3a112d6610f2 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 22 15:48:34 2009 -0300 Contact: Added addedToGroup signal. TelepathyQt4/contact.cpp | 5 +++++ TelepathyQt4/contact.h | 4 ++++ 2 files changed, 9 insertions(+) commit cd89d66766abc0a268ecee4a387ee319ec459496 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 22 15:40:17 2009 -0300 ContactManager: Added some docs. TelepathyQt4/contact-manager.cpp | 75 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) commit fc45705cc12c3561e880fc29d3f6e3be16b9c52d Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 22 15:40:06 2009 -0300 ContactManager: Fixed typo. TelepathyQt4/contact-manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c8f5de2fbba05ed89d8773fd16573162682e99f2 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 22 05:02:32 2009 -0300 Contact: Added groups method. TelepathyQt4/contact.cpp | 7 +++++++ TelepathyQt4/contact.h | 1 + 2 files changed, 8 insertions(+) commit 61df6c5bb4482e91a39c64251b4381cd83f4bc4c Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 22 05:01:53 2009 -0300 ContactManager: Added contactGroups method. TelepathyQt4/contact-manager.cpp | 22 ++++++++++++++++++++++ TelepathyQt4/contact-manager.h | 1 + 2 files changed, 23 insertions(+) commit 2f2fc99ce343e9f7ab8ed5b7b6762ea6a53d7a6f Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 22 04:52:55 2009 -0300 Contact: Added removeFromGroup support. TelepathyQt4/contact.cpp | 8 ++++++++ TelepathyQt4/contact.h | 1 + 2 files changed, 9 insertions(+) commit 5907815d3db0be0ff39e83adba37dca19af96da3 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 22 04:51:53 2009 -0300 Contact: Added addToGroup method. TelepathyQt4/contact.cpp | 8 ++++++++ TelepathyQt4/contact.h | 2 ++ 2 files changed, 10 insertions(+) commit 61e463a9cb319d2672a6faabcc9b1bf1db19df07 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 22 04:43:30 2009 -0300 ContactManager: Added removeGroup method. TelepathyQt4/contact-manager.cpp | 11 +++++++++++ TelepathyQt4/contact-manager.h | 1 + 2 files changed, 12 insertions(+) commit ec438050ae8227ff397e622d956fe1516e2faece Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 22 04:39:32 2009 -0300 COntactManager: Added addGroup method. TelepathyQt4/contact-manager.cpp | 11 +++++++++++ TelepathyQt4/contact-manager.h | 2 ++ 2 files changed, 13 insertions(+) commit bc147a99943a3c01024a5feb861b2442effc992b Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 22 04:30:51 2009 -0300 ContactManager: Added groupRemoveContacts method. TelepathyQt4/contact-manager.cpp | 12 ++++++++++++ TelepathyQt4/contact-manager.h | 2 ++ 2 files changed, 14 insertions(+) commit f8a49b53b4b19b07ae5a64192548695221631cac Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 22 04:28:52 2009 -0300 ContactManager: Added groupAddContacts method. TelepathyQt4/contact-manager.cpp | 12 ++++++++++++ TelepathyQt4/contact-manager.h | 2 ++ 2 files changed, 14 insertions(+) commit a709d85b2ec56d680d04e5d66b2906c4bb43c6ba Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 22 04:17:46 2009 -0300 ContactManager: Added groupRemoved signal. TelepathyQt4/contact-manager.cpp | 26 ++++++++++++++++++++++---- TelepathyQt4/contact-manager.h | 4 ++++ 2 files changed, 26 insertions(+), 4 deletions(-) commit b6bd35b5368d4f296604153f93f620809b75f92b Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 22 04:07:32 2009 -0300 ContactManager: Added groupContacts method. TelepathyQt4/contact-manager.cpp | 10 ++++++++++ TelepathyQt4/contact-manager.h | 2 ++ 2 files changed, 12 insertions(+) commit 059c481a59b59632dcc502fbaabb3c8f9caedd30 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 22 03:57:44 2009 -0300 ContactManager: Added groupAdded signal. TelepathyQt4/contact-manager.cpp | 3 ++- TelepathyQt4/contact-manager.h | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) commit f5d6bd163f261a718f27401a1c989bc8d985015a Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 22 03:53:18 2009 -0300 Connection: Added initial roster groups support. TelepathyQt4/connection.cpp | 102 ++++++++++++++++++++++++++++++++++++++ TelepathyQt4/connection.h | 4 ++ TelepathyQt4/contact-manager.cpp | 32 ++++++++++++ TelepathyQt4/contact-manager.h | 4 ++ 4 files changed, 142 insertions(+) commit 743c8b2d037e55118201b1a297e4111fcb614bf7 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jul 22 03:14:17 2009 -0300 ContactManager: Follow name convention when dealing with contact lists channels. TelepathyQt4/connection.cpp | 2 +- TelepathyQt4/contact-manager.cpp | 2 +- TelepathyQt4/contact-manager.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) commit 4a0f88b7c41883edb352a167034da22cd6ab7e6f Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jul 21 14:02:36 2009 -0300 PendingOperation: Fixed debug when trying to finish a PendingOperation already finished. TelepathyQt4/pending-operation.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit cb6d8a6c408216003013defec8f7e749aaec6e98 Author: George Goldberg Date: Mon Jul 20 19:55:26 2009 +0100 Fix smcv review comments on Account::setAutomaticPresence() and Account::automaticPresence(). TelepathyQt4/account.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit 86459043729824144c213917f1c9a6ea1fe440f6 Author: George Goldberg Date: Mon Jul 20 19:53:23 2009 +0100 Fix smcv review comments on Account::connection() api-docs. TelepathyQt4/account.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 267324d505a0f70b4f39b70531dc7efba156e647 Author: George Goldberg Date: Mon Jul 13 13:08:56 2009 +0100 API doc fixes for Account::setAutomaticPresence(). TelepathyQt4/account.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 57bb9835c1fcf6702219aabd4645ec9835e5083c Author: George Goldberg Date: Mon Jul 13 13:06:40 2009 +0100 API doc fixes for Account::automaticPresence(). TelepathyQt4/account.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit e695ca204cdfe1a5f144770303de653fff6156be Author: George Goldberg Date: Mon Jul 13 13:04:33 2009 +0100 grammar++ TelepathyQt4/account.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 38f3cf9f6940803da7830524ca919dbafbabeb62 Author: George Goldberg Date: Mon Jul 13 13:02:54 2009 +0100 API doc fixes for Account::connection(). TelepathyQt4/account.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) commit 304e033caca90bceb47b2201f7bb846474adb83e Merge: 1e0ee6b b389789 Author: Olli Salli Date: Wed Jul 1 00:18:56 2009 +0300 Merge branch 'master' of dhansak:/srv/git.collabora.co.uk/git/telepathy-qt4 commit 1e0ee6b134e40a9ad22f8fddcbba426f184d61cd Author: Olli Salli Date: Wed Jul 1 00:16:29 2009 +0300 Correctly order constructors before the members in pimpl structs TelepathyQt4/channel.cpp | 6 +++--- TelepathyQt4/connection-manager.cpp | 16 ++++++++-------- TelepathyQt4/readiness-helper.cpp | 14 +++++++------- 3 files changed, 18 insertions(+), 18 deletions(-) commit 249a0eb6fef452275abaf8c399e3141931ec51dd Author: Olli Salli Date: Tue Jun 30 23:56:55 2009 +0300 Use a private implementation for ReadinessHelper::Introspectable TelepathyQt4/readiness-helper.cpp | 71 ++++++++++++++++++++++++++++++++----- TelepathyQt4/readiness-helper.h | 31 ++++++---------- 2 files changed, 72 insertions(+), 30 deletions(-) commit b389789e70ee8b793ad7e168bffe0556bae2acbe Merge: 44ca148 7ee7879 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 30 17:43:53 2009 -0300 Merge branch 'manager-file' Reviewed-by: Olli Salli commit aadc4e229c5efa46f200058768c531f07b6223c3 Author: Olli Salli Date: Tue Jun 30 23:04:51 2009 +0300 Use fully private implementation in ProtocolInfo TelepathyQt4/connection-manager.cpp | 23 ++++++++++++++++------- TelepathyQt4/connection-manager.h | 6 ++---- 2 files changed, 18 insertions(+), 11 deletions(-) commit 5514377e713d91d45be6a57f4993b447317becef Author: Olli Salli Date: Tue Jun 30 22:51:21 2009 +0300 Use a private implementation in ProtocolParameter TelepathyQt4/connection-manager.cpp | 53 ++++++++++++++++++++++++++++------- TelepathyQt4/connection-manager.h | 13 +++------ 2 files changed, 47 insertions(+), 19 deletions(-) commit 1475b1b06fbd6bf6baae7ae6722c008c2b37b924 Author: Olli Salli Date: Tue Jun 30 21:51:41 2009 +0300 Use a private implementation for Channel::GroupMemberChangeDetails TelepathyQt4/channel.cpp | 51 ++++++++++++++++++++++++++++++++++++++++++++++ TelepathyQt4/channel.h | 41 ++++++++++++++++++++----------------- 2 files changed, 73 insertions(+), 19 deletions(-) commit 7ee78798ae6f18329f5693fc1985f5dcb0c761df Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 30 15:01:27 2009 -0300 manager-file test: Use a more descriptive name for invalid test manager files. tests/manager-file.cpp | 4 +- .../test-manager-file-invalid-signature.manager | 86 ++++++++++++++++++++ .../managers/test-manager-file-invalid.manager | 4 - .../managers/test-manager-file-invalid2.manager | 86 -------------------- .../test-manager-file-malformed-keyfile.manager | 4 + 5 files changed, 92 insertions(+), 92 deletions(-) commit cc135eabe32404b8f61886aee57d9c67d5d3f8f7 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 30 14:45:26 2009 -0300 Fixed bug 20082: KeyFile: double (and other types?) not correctly tested. TelepathyQt4/manager-file.cpp | 13 ++- tests/manager-file.cpp | 3 + .../managers/test-manager-file-invalid2.manager | 86 ++++++++++++++++++++ tests/telepathy/managers/test-manager-file.manager | 2 +- 4 files changed, 101 insertions(+), 3 deletions(-) commit dbf6e0ba2c23eb0b7c041df22759583dca2eaf75 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 30 14:22:28 2009 -0300 Fixed bug 20080: KeyFile: ";" as a list may be mis-parsed. Actually this was not a bug, just improving test coverage. tests/manager-file.cpp | 8 ++++++++ tests/telepathy/managers/test-manager-file.manager | 6 +++++- 2 files changed, 13 insertions(+), 1 deletion(-) commit 44ca14846974cf68fc06bd4430db2aff927f6ca9 Merge: 71460dc 12d6826 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 30 14:28:27 2009 -0300 Merge branch 'connection' Reviewed-by: Olli Salli commit 71460dc81dc2a4e1ddd27eccf1c435dcc63a43c8 Merge: 1b1dac4 bd97c2a Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 30 14:27:36 2009 -0300 Merge branch 'client' Reviewed-by: Simon McVittie (smcv) commit bd97c2adb150afe0a9ff72c1213ad20279b87661 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 30 14:09:29 2009 -0300 client test: Use full-qualified name for properties when calling AddDispatchOperation. tests/dbus/client.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 12d682660f1d4d3606caf4a456a3a35e80d0ab29 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 30 14:07:12 2009 -0300 Fixed bug 20268: Connection's selfContact object should initially have no features. TelepathyQt4/connection.cpp | 5 +---- tests/dbus/contacts.cpp | 10 +++++++++- 2 files changed, 10 insertions(+), 5 deletions(-) commit 1b1dac433143db0e229d3bf93a48b1838100b87c Merge: 49d331a c630111 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 16:04:49 2009 -0300 Merge branch 'cdo' Author: Simon McVittie commit c630111a1399687da57d0ea6116850afc9d46c3a Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 15:37:43 2009 -0300 ChannelDispatchOperation: Improved docs. TelepathyQt4/channel-dispatch-operation.cpp | 38 +++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) commit f10f6159d7ba5d772e6620ba97e969190bcb64de Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 14:40:48 2009 -0300 ChannelDispatchOperation: Handle Finished signal. Emit invalidated with TELEPATHY_QT4_ERROR_OBJECT_REMOVED when ChannelDispatchOperation.Finished is received. TelepathyQt4/channel-dispatch-operation.cpp | 11 +++++++++++ TelepathyQt4/channel-dispatch-operation.h | 1 + TelepathyQt4/constants.h | 8 ++++++++ 3 files changed, 20 insertions(+) commit 49d331aa7d7ff94b03552efeb7f5fb4a1cca4a66 Merge: c70b926 b920ee3 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 14:29:44 2009 -0300 Merge branch 'client-bugfix' Author: Simon McVittie commit c70b926f92a6035557fa9bb0d500937a1c5f0068 Merge: 0362c26 cd0ac8a Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 14:26:52 2009 -0300 Merge branch 'standardization' Author: Simon McVittie commit cd0ac8a8660d2a2532dcf4abdd7b1fae247a8722 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 13:41:53 2009 -0300 Updated HACKING file. HACKING | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) commit ef8183837721c8225f4300a98008e564279fb759 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 13:36:33 2009 -0300 TextChannel: Added virtual dtor. TelepathyQt4/text-channel.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d801af6fc4abd0ff2a35a474652f96133bcf899c Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 13:36:21 2009 -0300 StreamedMediaChannel: Added virtual dtor. TelepathyQt4/streamed-media-channel.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e02c5992fe58bd648d28919f0b90cab62a687a8d Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 13:36:13 2009 -0300 RoomList: Added virtual dtor. TelepathyQt4/room-list.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 50c80b81bd438dd3952a01ad9223e76f41c841d3 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 13:36:02 2009 -0300 FileTransfer: Added virtual dtor. TelepathyQt4/file-transfer.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f884aa41fd3a50cb135cfca7f5531fe60b101f32 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 13:35:51 2009 -0300 Connection: Added virtual dtor. TelepathyQt4/connection.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit b359b0c9446f70d9677afad556a7da85e86f2205 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 13:35:43 2009 -0300 ConnectionManager: Added virtual dtor. TelepathyQt4/connection-manager.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 0f72b9a4c22aa69296509cb3e0c06fe635fc5d16 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 13:35:32 2009 -0300 Channel: Added virtual dtor. TelepathyQt4/channel.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e9d2f273f81abf660f42dab6018d36d596c5ae70 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 13:35:19 2009 -0300 ChannelRequest: Added virtual dtor. TelepathyQt4/channel-request.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 1c15fdc09c1c982a2efe2db32f8698dd123f296e Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 13:35:04 2009 -0300 ChannelDispatchOperation: Added virtual dtor. TelepathyQt4/channel-dispatch-operation.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 09a071bdf8f27f1dd26711bac33eae3f94c4e807 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 12:39:00 2009 -0300 SimplePendingOperations: Standardize class definition. - Moved public xxxInterface methods definition to the end of the public methods declaration. - Added friend struct Private declaration. - Added Q_DISABLE_COPY(xxx) to all classes that can not be copied. - Moved Q_DISABLE_COPY(xxx) declaration to the top of the class definition, before the public keyword. - Reorder public, protected, SIGNALS declaration as follows: public public Q_SLOTS Q_SIGNALS protected protected Q_SLOTS private Q_SLOTS private - Moved friend class xxx definitions to be placed right bellow private keyword. TelepathyQt4/simple-pending-operations.h | 1 + 1 file changed, 1 insertion(+) commit d7839477e622d517354e3266cdcbd492c5470fb9 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 12:38:42 2009 -0300 ReferencedHandles: Standardize class definition. - Moved public xxxInterface methods definition to the end of the public methods declaration. - Added friend struct Private declaration. - Added Q_DISABLE_COPY(xxx) to all classes that can not be copied. - Moved Q_DISABLE_COPY(xxx) declaration to the top of the class definition, before the public keyword. - Reorder public, protected, SIGNALS declaration as follows: public public Q_SLOTS Q_SIGNALS protected protected Q_SLOTS private Q_SLOTS private - Moved friend class xxx definitions to be placed right bellow private keyword. TelepathyQt4/referenced-handles.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 1f0c89165b63dd53e0ec4b60fe918d4c5dc1ccfa Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 12:38:17 2009 -0300 ReadinessHelper: Standardize class definition. - Moved public xxxInterface methods definition to the end of the public methods declaration. - Added friend struct Private declaration. - Added Q_DISABLE_COPY(xxx) to all classes that can not be copied. - Moved Q_DISABLE_COPY(xxx) declaration to the top of the class definition, before the public keyword. - Reorder public, protected, SIGNALS declaration as follows: public public Q_SLOTS Q_SIGNALS protected protected Q_SLOTS private Q_SLOTS private - Moved friend class xxx definitions to be placed right bellow private keyword. TelepathyQt4/readiness-helper.h | 1 + 1 file changed, 1 insertion(+) commit 84c51414b16cac0279fa926253a4c5461c18d39a Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 12:37:58 2009 -0300 PendingStringList: Standardize class definition. - Moved public xxxInterface methods definition to the end of the public methods declaration. - Added friend struct Private declaration. - Added Q_DISABLE_COPY(xxx) to all classes that can not be copied. - Moved Q_DISABLE_COPY(xxx) declaration to the top of the class definition, before the public keyword. - Reorder public, protected, SIGNALS declaration as follows: public public Q_SLOTS Q_SIGNALS protected protected Q_SLOTS private Q_SLOTS private - Moved friend class xxx definitions to be placed right bellow private keyword. TelepathyQt4/pending-string-list.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 4f803b2f5996b9940cd8a2f843e3106d5aed0893 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 12:37:31 2009 -0300 PendingReady: Standardize class definition. - Moved public xxxInterface methods definition to the end of the public methods declaration. - Added friend struct Private declaration. - Added Q_DISABLE_COPY(xxx) to all classes that can not be copied. - Moved Q_DISABLE_COPY(xxx) declaration to the top of the class definition, before the public keyword. - Reorder public, protected, SIGNALS declaration as follows: public public Q_SLOTS Q_SIGNALS protected protected Q_SLOTS private Q_SLOTS private - Moved friend class xxx definitions to be placed right bellow private keyword. TelepathyQt4/pending-ready.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit c2bf92bf1bdeac399bbcb6a5538e5fd6a5e4c2f2 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 12:37:04 2009 -0300 PendingOperation: Standardize class definition. - Moved public xxxInterface methods definition to the end of the public methods declaration. - Added friend struct Private declaration. - Added Q_DISABLE_COPY(xxx) to all classes that can not be copied. - Moved Q_DISABLE_COPY(xxx) declaration to the top of the class definition, before the public keyword. - Reorder public, protected, SIGNALS declaration as follows: public public Q_SLOTS Q_SIGNALS protected protected Q_SLOTS private Q_SLOTS private - Moved friend class xxx definitions to be placed right bellow private keyword. TelepathyQt4/pending-operation.h | 1 + 1 file changed, 1 insertion(+) commit e16bf119796a095f98b3e32c426c14dd5b2bc1ed Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 12:36:54 2009 -0300 PendingContacts: Standardize class definition. - Moved public xxxInterface methods definition to the end of the public methods declaration. - Added friend struct Private declaration. - Added Q_DISABLE_COPY(xxx) to all classes that can not be copied. - Moved Q_DISABLE_COPY(xxx) declaration to the top of the class definition, before the public keyword. - Reorder public, protected, SIGNALS declaration as follows: public public Q_SLOTS Q_SIGNALS protected protected Q_SLOTS private Q_SLOTS private - Moved friend class xxx definitions to be placed right bellow private keyword. TelepathyQt4/pending-contacts.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 2b088609b0a7c19013d6de2cd9bd2884c0e1007d Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 12:36:40 2009 -0300 PendingContactAttributes: Standardize class definition. - Moved public xxxInterface methods definition to the end of the public methods declaration. - Added friend struct Private declaration. - Added Q_DISABLE_COPY(xxx) to all classes that can not be copied. - Moved Q_DISABLE_COPY(xxx) declaration to the top of the class definition, before the public keyword. - Reorder public, protected, SIGNALS declaration as follows: public public Q_SLOTS Q_SIGNALS protected protected Q_SLOTS private Q_SLOTS private - Moved friend class xxx definitions to be placed right bellow private keyword. TelepathyQt4/pending-contact-attributes.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit fd6e404b71d6b41a4bfdc0c42813a2bc7d98d0b1 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 12:36:25 2009 -0300 PendingConnection: Standardize class definition. - Moved public xxxInterface methods definition to the end of the public methods declaration. - Added friend struct Private declaration. - Added Q_DISABLE_COPY(xxx) to all classes that can not be copied. - Moved Q_DISABLE_COPY(xxx) declaration to the top of the class definition, before the public keyword. - Reorder public, protected, SIGNALS declaration as follows: public public Q_SLOTS Q_SIGNALS protected protected Q_SLOTS private Q_SLOTS private - Moved friend class xxx definitions to be placed right bellow private keyword. TelepathyQt4/pending-connection.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 5a9a4b55672ddf402fea035507bee943bdc72201 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 12:35:52 2009 -0300 PendingAccount: Standardize class definition. - Moved public xxxInterface methods definition to the end of the public methods declaration. - Added friend struct Private declaration. - Added Q_DISABLE_COPY(xxx) to all classes that can not be copied. - Moved Q_DISABLE_COPY(xxx) declaration to the top of the class definition, before the public keyword. - Reorder public, protected, SIGNALS declaration as follows: public public Q_SLOTS Q_SIGNALS protected protected Q_SLOTS private Q_SLOTS private - Moved friend class xxx definitions to be placed right bellow private keyword. TelepathyQt4/pending-account.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 02592e3a83ccdfb942839c7b7d8abf11f7f440b8 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 12:35:36 2009 -0300 OptionalInterfaceFactory: Standardize class definition. - Moved public xxxInterface methods definition to the end of the public methods declaration. - Added friend struct Private declaration. - Added Q_DISABLE_COPY(xxx) to all classes that can not be copied. - Moved Q_DISABLE_COPY(xxx) declaration to the top of the class definition, before the public keyword. - Reorder public, protected, SIGNALS declaration as follows: public public Q_SLOTS Q_SIGNALS protected protected Q_SLOTS private Q_SLOTS private - Moved friend class xxx definitions to be placed right bellow private keyword. TelepathyQt4/optional-interface-factory.h | 3 +++ 1 file changed, 3 insertions(+) commit 331eac0c561f67386311fb5790938a903a0bfd84 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 12:34:41 2009 -0300 Message: Standardize class definition. - Moved public xxxInterface methods definition to the end of the public methods declaration. - Added friend struct Private declaration. - Added Q_DISABLE_COPY(xxx) to all classes that can not be copied. - Moved Q_DISABLE_COPY(xxx) declaration to the top of the class definition, before the public keyword. - Reorder public, protected, SIGNALS declaration as follows: public public Q_SLOTS Q_SIGNALS protected protected Q_SLOTS private Q_SLOTS private - Moved friend class xxx definitions to be placed right bellow private keyword. TelepathyQt4/message.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit a18cf503a4a10ea134abac7720d6a143300741d9 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 12:34:27 2009 -0300 ManagerFile: Standardize class definition. - Moved public xxxInterface methods definition to the end of the public methods declaration. - Added friend struct Private declaration. - Added Q_DISABLE_COPY(xxx) to all classes that can not be copied. - Moved Q_DISABLE_COPY(xxx) declaration to the top of the class definition, before the public keyword. - Reorder public, protected, SIGNALS declaration as follows: public public Q_SLOTS Q_SIGNALS protected protected Q_SLOTS private Q_SLOTS private - Moved friend class xxx definitions to be placed right bellow private keyword. TelepathyQt4/manager-file.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 90a6a47ef081daf75976100f7e511f6430d7a9cc Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 12:34:17 2009 -0300 KeyFile: Standardize class definition. - Moved public xxxInterface methods definition to the end of the public methods declaration. - Added friend struct Private declaration. - Added Q_DISABLE_COPY(xxx) to all classes that can not be copied. - Moved Q_DISABLE_COPY(xxx) declaration to the top of the class definition, before the public keyword. - Reorder public, protected, SIGNALS declaration as follows: public public Q_SLOTS Q_SIGNALS protected protected Q_SLOTS private Q_SLOTS private - Moved friend class xxx definitions to be placed right bellow private keyword. TelepathyQt4/key-file.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit ed82eff0658a1d0b8ce8625205d76bdea699099a Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 12:34:04 2009 -0300 DBusProxy: Standardize class definition. - Moved public xxxInterface methods definition to the end of the public methods declaration. - Added friend struct Private declaration. - Added Q_DISABLE_COPY(xxx) to all classes that can not be copied. - Moved Q_DISABLE_COPY(xxx) declaration to the top of the class definition, before the public keyword. - Reorder public, protected, SIGNALS declaration as follows: public public Q_SLOTS Q_SIGNALS protected protected Q_SLOTS private Q_SLOTS private - Moved friend class xxx definitions to be placed right bellow private keyword. TelepathyQt4/dbus-proxy.h | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) commit 105b39302cfe18d4009e418f630c79a26d8f65c5 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 12:33:51 2009 -0300 Contact: Standardize class definition. - Moved public xxxInterface methods definition to the end of the public methods declaration. - Added friend struct Private declaration. - Added Q_DISABLE_COPY(xxx) to all classes that can not be copied. - Moved Q_DISABLE_COPY(xxx) declaration to the top of the class definition, before the public keyword. - Reorder public, protected, SIGNALS declaration as follows: public public Q_SLOTS Q_SIGNALS protected protected Q_SLOTS private Q_SLOTS private - Moved friend class xxx definitions to be placed right bellow private keyword. TelepathyQt4/contact.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit f666f517a181983bb53e07540c72b30d3ea03d26 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 12:33:45 2009 -0300 ContactManager: Standardize class definition. - Moved public xxxInterface methods definition to the end of the public methods declaration. - Added friend struct Private declaration. - Added Q_DISABLE_COPY(xxx) to all classes that can not be copied. - Moved Q_DISABLE_COPY(xxx) declaration to the top of the class definition, before the public keyword. - Reorder public, protected, SIGNALS declaration as follows: public public Q_SLOTS Q_SIGNALS protected protected Q_SLOTS private Q_SLOTS private - Moved friend class xxx definitions to be placed right bellow private keyword. TelepathyQt4/contact-manager.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 2287cebd901bad4040e6d09f85f03e3b0196d556 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 12:33:29 2009 -0300 Connection: Standardize class definition. - Moved public xxxInterface methods definition to the end of the public methods declaration. - Added friend struct Private declaration. - Added Q_DISABLE_COPY(xxx) to all classes that can not be copied. - Moved Q_DISABLE_COPY(xxx) declaration to the top of the class definition, before the public keyword. - Reorder public, protected, SIGNALS declaration as follows: public public Q_SLOTS Q_SIGNALS protected protected Q_SLOTS private Q_SLOTS private - Moved friend class xxx definitions to be placed right bellow private keyword. TelepathyQt4/connection.h | 55 +++++++++++++++++++++------------------------ 1 file changed, 26 insertions(+), 29 deletions(-) commit 2eacaea95b3e1098915b60f0824574553278ed1e Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 12:33:19 2009 -0300 ConnectionManager: Standardize class definition. - Moved public xxxInterface methods definition to the end of the public methods declaration. - Added friend struct Private declaration. - Added Q_DISABLE_COPY(xxx) to all classes that can not be copied. - Moved Q_DISABLE_COPY(xxx) declaration to the top of the class definition, before the public keyword. - Reorder public, protected, SIGNALS declaration as follows: public public Q_SLOTS Q_SIGNALS protected protected Q_SLOTS private Q_SLOTS private - Moved friend class xxx definitions to be placed right bellow private keyword. TelepathyQt4/connection-manager.h | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) commit 08942879025b199aad4e624cddd6d929dc3aa14e Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 12:33:06 2009 -0300 Channel: Standardize class definition. - Moved public xxxInterface methods definition to the end of the public methods declaration. - Added friend struct Private declaration. - Added Q_DISABLE_COPY(xxx) to all classes that can not be copied. - Moved Q_DISABLE_COPY(xxx) declaration to the top of the class definition, before the public keyword. - Reorder public, protected, SIGNALS declaration as follows: public public Q_SLOTS Q_SIGNALS protected protected Q_SLOTS private Q_SLOTS private - Moved friend class xxx definitions to be placed right bellow private keyword. TelepathyQt4/channel.h | 58 +++++++++++++++++++++++------------------------- 1 file changed, 28 insertions(+), 30 deletions(-) commit 74468ae3523df407cb1474514b2c38c35a5738ac Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 12:21:32 2009 -0300 AccountManager: Standardize class definition. - Moved public xxxInterface methods definition to the end of the public methods declaration. - Added friend struct Private declaration. - Added Q_DISABLE_COPY(xxx) to all classes that can not be copied. - Moved Q_DISABLE_COPY(xxx) declaration to the top of the class definition, before the public keyword. - Reorder public, protected, SIGNALS declaration as follows: public public Q_SLOTS Q_SIGNALS protected protected Q_SLOTS private Q_SLOTS private - Moved friend class xxx definitions to be placed right bellow private keyword. TelepathyQt4/account-manager.h | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) commit bf3f8a4ce49cb665c6b09e326b4dc8682375457b Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 12:18:05 2009 -0300 AbstractInterface: Standardize class definition. - Moved public xxxInterface methods definition to the end of the public methods declaration. - Added friend struct Private declaration. - Added Q_DISABLE_COPY(xxx) to all classes that can not be copied. - Moved Q_DISABLE_COPY(xxx) declaration to the top of the class definition, before the public keyword. - Reorder public, protected, SIGNALS declaration as follows: public public Q_SLOTS Q_SIGNALS protected protected Q_SLOTS private Q_SLOTS private - Moved friend class xxx definitions to be placed right bellow private keyword. TelepathyQt4/abstract-interface.h | 1 + 1 file changed, 1 insertion(+) commit b920ee3bbac534633c833eb463df06170fc16f10 Author: George Kiagiadakis Date: Mon Jun 29 11:02:51 2009 -0300 ClientApproverAdaptor: Use the dbus qualified name to get the connection property. Patch from George Kiagiadakis . Signed-off-by: Andre Moreira Magalhaes (andrunko) TelepathyQt4/client-registrar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 0362c261c4e6661d7b63a7e7ebc6e72ca919211c Merge: b795c8a 521a3e3 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 10:47:20 2009 -0300 Merge branch 'prototype-no-more' Reviewed-by: Simon McVittie (smcv) commit b795c8a7e806e4307aa8f726b5f5fba8000fd95a Merge: 433ff55 4053eac Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 10:45:38 2009 -0300 Merge branch 'optional-interface-factory' Reviewed-by: Simon McVittie (smcv) commit 433ff55894c36cdd137fadc50cc57434a47b6090 Merge: 66cbd19 ecd3a1c Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 29 10:43:14 2009 -0300 Merge branch 'coding-style' Reviewed-by: Simon McVittie (smcv) commit 521a3e33dc73e1ad98fdf4d5fbe78c8c253aee5c Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 22 01:40:53 2009 -0300 Removed Prototype library. TelepathyQt4/Makefile.am | 6 +- TelepathyQt4/Prototype/Account.cpp | 285 ----- TelepathyQt4/Prototype/Account.h | 173 --- TelepathyQt4/Prototype/AccountManager.cpp | 390 ------- TelepathyQt4/Prototype/AccountManager.h | 166 --- TelepathyQt4/Prototype/AvatarManager.cpp | 320 ------ TelepathyQt4/Prototype/AvatarManager.h | 174 --- TelepathyQt4/Prototype/CapabilitiesManager.cpp | 321 ------ TelepathyQt4/Prototype/CapabilitiesManager.h | 129 --- TelepathyQt4/Prototype/ChatChannel.cpp | 243 ---- TelepathyQt4/Prototype/ChatChannel.h | 119 -- TelepathyQt4/Prototype/Client/ChannelHandler | 6 - TelepathyQt4/Prototype/Client/StreamEngine | 6 - TelepathyQt4/Prototype/Connection.cpp | 439 ------- TelepathyQt4/Prototype/Connection.h | 256 ----- TelepathyQt4/Prototype/ConnectionFacade.cpp | 266 ----- TelepathyQt4/Prototype/ConnectionFacade.h | 143 --- TelepathyQt4/Prototype/Constants | 6 - TelepathyQt4/Prototype/Contact.cpp | 191 ---- TelepathyQt4/Prototype/Contact.h | 247 ---- TelepathyQt4/Prototype/ContactManager.cpp | 1145 ------------------- TelepathyQt4/Prototype/ContactManager.h | 351 ------ TelepathyQt4/Prototype/DBusInterface.cpp | 49 - TelepathyQt4/Prototype/DBusInterface.h | 51 - TelepathyQt4/Prototype/Makefile.am | 198 ---- TelepathyQt4/Prototype/PresenceManager.cpp | 623 ---------- TelepathyQt4/Prototype/PresenceManager.h | 151 --- TelepathyQt4/Prototype/Stream_Engine.xml | 44 - TelepathyQt4/Prototype/StreamedMediaChannel.cpp | 855 -------------- TelepathyQt4/Prototype/StreamedMediaChannel.h | 436 ------- TelepathyQt4/Prototype/TpQt4Prototype.pc.in | 11 - TelepathyQt4/Prototype/Types | 6 - TelepathyQt4/Prototype/all.xml | 10 - TelepathyQt4/Prototype/channel-handler.xml | 9 - TelepathyQt4/Prototype/cli-channel-handler.cpp | 23 - TelepathyQt4/Prototype/cli-channel-handler.h | 27 - TelepathyQt4/Prototype/cli-stream-engine.cpp | 23 - TelepathyQt4/Prototype/cli-stream-engine.h | 27 - TelepathyQt4/Prototype/constants.h | 27 - TelepathyQt4/Prototype/stream-engine.xml | 9 - TelepathyQt4/Prototype/types.cpp | 22 - TelepathyQt4/Prototype/types.h | 27 - configure.ac | 7 - tests/Makefile.am | 3 +- tests/prototype/Makefile.am | 61 - tests/prototype/avatar.png | Bin 7657 -> 0 bytes tests/prototype/prototype.cpp | 1394 ----------------------- tests/prototype/prototype.h | 145 --- 48 files changed, 4 insertions(+), 9616 deletions(-) commit 4053eace392da07410bb050f675ed48fcf47674b Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 22 01:23:11 2009 -0300 OptionalInterfaceFactory: Added optionalInterface method. Moved optionalInterface method to OptionalInterfaceFactory removing duplicated code. TelepathyQt4/account.h | 14 -------------- TelepathyQt4/channel-dispatch-operation.h | 13 ------------- TelepathyQt4/channel-request.h | 13 ------------- TelepathyQt4/channel.h | 13 ------------- TelepathyQt4/connection.h | 14 -------------- TelepathyQt4/optional-interface-factory.h | 14 ++++++++++++++ 6 files changed, 14 insertions(+), 67 deletions(-) commit 0aadfca5d399a1bd7f67dd8c910aa025e4275642 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 22 01:18:13 2009 -0300 OptionalInterfaceFactory: Moved InterfaceSupportedChecking enum to OptionalInterfaceFactory. Continue preparation for moving optionalInterface method to OptionalInterfaceFactory. TelepathyQt4/dbus-proxy.h | 7 ------- TelepathyQt4/optional-interface-factory.h | 6 ++++++ 2 files changed, 6 insertions(+), 7 deletions(-) commit 69cd75a4dad05cd9ee443af0573f2f3d5da8f737 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 22 01:14:17 2009 -0300 OptionalInterfaceFactory: Added public interfaces and protected setInterfaces method. Moved interfaces method to OptionalInterfaceFactory so it does not need to be duplicated around every class. This is also a preparation for moving optionalInterface method to OptionalInterfaceFactory. TelepathyQt4/account-manager.cpp | 13 +----- TelepathyQt4/account-manager.h | 4 +- TelepathyQt4/account.cpp | 14 ++---- TelepathyQt4/account.h | 4 +- TelepathyQt4/channel-dispatch-operation.cpp | 8 +--- TelepathyQt4/channel-dispatch-operation.h | 4 +- TelepathyQt4/channel-request.cpp | 8 +--- TelepathyQt4/channel-request.h | 4 +- TelepathyQt4/channel.cpp | 65 ++++++++------------------- TelepathyQt4/channel.h | 3 +- TelepathyQt4/connection-manager-internal.h | 1 - TelepathyQt4/connection-manager.cpp | 9 +--- TelepathyQt4/connection-manager.h | 4 +- TelepathyQt4/connection.cpp | 34 +++----------- TelepathyQt4/connection.h | 4 +- TelepathyQt4/optional-interface-factory.cpp | 8 ++++ TelepathyQt4/optional-interface-factory.h | 14 +++++- 17 files changed, 62 insertions(+), 139 deletions(-) commit ecd3a1cdb2f8c07a58d360404f3c95507f0ebc0c Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 18 13:28:02 2009 -0300 KeyFile: Updated copyright. TelepathyQt4/key-file.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 4c34374192778dd4fb7599fd85069dc56b3154af Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 18 12:17:04 2009 -0300 KeyFile: Changed Q_FOREACH to foreach. TelepathyQt4/key-file.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 49b1fd6fafd13529af46e2a3067481e260c0219e Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 18 13:27:52 2009 -0300 ManagerFile: Updated copyright. TelepathyQt4/manager-file.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 331c6635ecc194af2c6c4719101935a87d92a6e3 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 18 12:16:48 2009 -0300 ManagerFile: Changed Q_FOREACH to foreach. TelepathyQt4/manager-file.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit e47a716bcabb078edb064cca31d29d2649e340b0 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 18 13:04:46 2009 -0300 debug: Updated copyright. TelepathyQt4/debug.cpp | 4 ++-- TelepathyQt4/debug.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit a5941e8a216ca8f33c9553dbbfe5aab0fad2a314 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 18 12:42:44 2009 -0300 debug: Moved docs to source file. TelepathyQt4/debug.cpp | 39 +++++++++++++++++++++++++++++++++++++++ TelepathyQt4/debug.h | 36 ------------------------------------ 2 files changed, 39 insertions(+), 36 deletions(-) commit 1fa03cf710307f78bf8a468c8c8a8e7eda76dde2 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 18 12:50:32 2009 -0300 PendingOperation: Updated copyright. TelepathyQt4/pending-operation.cpp | 4 ++-- TelepathyQt4/pending-operation.h | 4 ++-- TelepathyQt4/simple-pending-operations.h | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) commit 5a8d44a1d66926c7ba877383a702d4f0f0cfb32b Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 18 12:49:53 2009 -0300 PendingOperation: Moved docs to source file. TelepathyQt4/pending-operation.cpp | 145 +++++++++++++++++++++++++++++- TelepathyQt4/pending-operation.h | 103 --------------------- TelepathyQt4/simple-pending-operations.h | 24 ----- 3 files changed, 144 insertions(+), 128 deletions(-) commit 9f7d132f4225c780575a991db1dfb0b429a33258 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 18 12:42:54 2009 -0300 PendingOperation: Fixed coding-style. TelepathyQt4/pending-operation.cpp | 82 ++++++++++++------------------ TelepathyQt4/pending-operation.h | 8 +-- TelepathyQt4/simple-pending-operations.h | 10 ++-- 3 files changed, 41 insertions(+), 59 deletions(-) commit 73a33b10c7d4d01522cb31b09d18da4b604748e4 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 18 12:28:22 2009 -0300 ReferencedHandles: Updated copyright. TelepathyQt4/referenced-handles.cpp | 4 ++-- TelepathyQt4/referenced-handles.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit be215fa7428da5c620e5b31e71f5761ec3ec2a11 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 18 12:26:22 2009 -0300 ReferencedHandles: Moved docs to source file. TelepathyQt4/referenced-handles.cpp | 38 +++++++++++++++++++++++++++++++++++ TelepathyQt4/referenced-handles.h | 37 ---------------------------------- 2 files changed, 38 insertions(+), 37 deletions(-) commit a9e188e39f4e8c540efb17fbe399f037423f928b Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 18 12:14:57 2009 -0300 ReferencedHandles: Fixed coding-style. TelepathyQt4/referenced-handles.cpp | 79 +++++---- TelepathyQt4/referenced-handles.h | 302 +++++++++++++++++------------------ 2 files changed, 197 insertions(+), 184 deletions(-) commit 90b4d9d1e9d568d6cd5a5b49b95f85092c83481a Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 18 12:24:12 2009 -0300 OptionalInterfaceFactory: Updated copyright. TelepathyQt4/optional-interface-factory.cpp | 4 ++-- TelepathyQt4/optional-interface-factory.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit b35e2450bb48b8d404730da094fb620079dbaa51 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 18 12:23:17 2009 -0300 OptionalInterfaceFactory: Move docs to source file. TelepathyQt4/optional-interface-factory.cpp | 76 +++++++++++++++++++++++++++ TelepathyQt4/optional-interface-factory.h | 66 ----------------------- 2 files changed, 76 insertions(+), 66 deletions(-) commit 7a8424d9776563e3757908c41183da7e21f274f7 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 18 12:14:10 2009 -0300 OptionalInterfaceFactory: Fixed coding-style. TelepathyQt4/optional-interface-factory.h | 156 ++++++++++++++--------------- 1 file changed, 78 insertions(+), 78 deletions(-) commit 1127652f4436bc1bfdc1e3a0756d4e52bdaba273 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 18 12:27:47 2009 -0300 ContactManager: Updated copyright. TelepathyQt4/contact-manager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 6af94694bed5fea9a897921c5a4233aa7c371d95 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 18 12:13:03 2009 -0300 ContactManager: Fixed coding-style. TelepathyQt4/contact-manager.h | 231 ++++++++++++++++++++-------------------- 1 file changed, 118 insertions(+), 113 deletions(-) commit 66cbd198e3af08a983f850248ec3cec7cf1591d3 Author: George Goldberg Date: Wed Jun 17 17:29:33 2009 +0100 Fix small error in apidocs example usage of AccountManager class. TelepathyQt4/account-manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit eff6552b38d786755bcc78dd46a32f65f3897329 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 16 13:23:14 2009 -0300 Prepare release 0.1.8 NEWS | 22 ++++++++++++++++++++-- configure.ac | 4 ++-- 2 files changed, 22 insertions(+), 4 deletions(-) commit ee5a8402a71edacee264301fdf896c96d471d590 Author: George Kiagiadakis Date: Tue Jun 16 13:13:12 2009 -0300 ChannelDispatchOperation: Read Channels property instead of incorrectly reading ChannelDetailsList. Signed-off-by: Andre Moreira Magalhaes (andrunko) TelepathyQt4/channel-dispatch-operation.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 91e65486c176f39518f8dd0afc5265044fac06a2 Merge: a58b1bf ec7ef94 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jun 12 16:04:15 2009 -0300 Merge branch 'account-channel-dispatcher' Reviewed-by: Simon McVittie (smcv) commit ec7ef9480ef605038b11281bcde16b1d69098306 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jun 12 12:32:53 2009 -0300 account-channel-dispatcher-test: Added automated test for Account Channel Dispatcher support. tests/dbus/Makefile.am | 5 + tests/dbus/account-channel-dispatcher.cpp | 474 +++++++++++++++++++++++++++++ 2 files changed, 479 insertions(+) commit 831ea9893d5cd204381d4a87c201c525df530dd0 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jun 12 12:31:59 2009 -0300 PendingChannelRequest: Make sure channelRequestCreated is emitted before finished. TelepathyQt4/pending-channel-request.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 8d3fd44b46891ea059f567a6e1acda60ae65a6c6 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jun 12 12:31:47 2009 -0300 PendingChannelRequest: Added workaround to work with buggy Qt versions. TelepathyQt4/pending-channel-request.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) commit 1487225368c7f15745fec6a2da42984918780e28 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jun 12 12:30:46 2009 -0300 PendingChannelRequest: Fixed channelRequestCreated signature. TelepathyQt4/pending-channel-request.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 882e58107fd2a3dcd5b7fbe987b2e2aeae4330ce Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jun 12 12:30:15 2009 -0300 ChannelRequest: Emit succeeded/failed even if not ready. TelepathyQt4/channel-request.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) commit 2086cbbc978c80410fef96f8f9b05e7fa1e6b887 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 11 14:18:34 2009 -0300 PendingChannelRequest: Use TELEPATHY_DBUS_ERROR_UNKNOWN_METHOD constant. TelepathyQt4/pending-channel-request.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 53a656fa6ba35c36ed7a2691d9ab09886fb07df5 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 11 14:17:48 2009 -0300 Constants: Added TELEPATHY_DBUS_ERROR_UNKNOWN_METHOD constant. TelepathyQt4/constants.h | 11 +++++++++++ 1 file changed, 11 insertions(+) commit 0d0113bcd0354a5bdd048a5fa7b234fe64770586 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 11 14:15:11 2009 -0300 PendingChannelRequest: Added comment on cancel method explaining why it fails if CR already finished. TelepathyQt4/pending-channel-request.cpp | 1 + 1 file changed, 1 insertion(+) commit f6a5376911bcfcc06c13cc2aa09b6bdb86f64d75 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 11 14:13:01 2009 -0300 PendingChannelRequest: Renamed PendingChannelRequestCancelOperation proceed method to go. TelepathyQt4/pending-channel-request-internal.h | 2 +- TelepathyQt4/pending-channel-request.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) commit 0bee49434d06eaf4ed8f0d622b77bdf1d92b3a9b Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 11 14:12:13 2009 -0300 PendingChannelRequest: Fixed assert condition. TelepathyQt4/pending-channel-request-internal.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 836e23d151f81fb69e3d7cd767932007b0e3ea5a Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 11 14:05:54 2009 -0300 PendingChannelRequest: Use setFinished/setFinishedWithError slots. TelepathyQt4/pending-channel-request.cpp | 15 ++------------- TelepathyQt4/pending-channel-request.h | 3 --- 2 files changed, 2 insertions(+), 16 deletions(-) commit c49cb6d026c930bdd1677725043664ee0cbfaf3d Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 11 14:05:02 2009 -0300 PendingChannelRequest: Finish with error immediatelly after retrieved CR if cancel was called previously. TelepathyQt4/pending-channel-request.cpp | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) commit 5ebaa82e2dd26ea7cdf88946b8badae3d2bcc2cd Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 11 14:01:53 2009 -0300 Account: Update documentation. TelepathyQt4/account.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit d367fab6a3d2d6a552021cc0e04068f0da4d0386 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 11 14:00:08 2009 -0300 PendingOperation: Changed setFinished, setFinishedWithError to be slots. TelepathyQt4/pending-operation.h | 1 + 1 file changed, 1 insertion(+) commit aece01996bdee7aabba07d261ffa7e2108b3d23e Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 11 13:45:56 2009 -0300 Account: Update documentation. TelepathyQt4/account.cpp | 16 ---------------- 1 file changed, 16 deletions(-) commit a5bff952604a0a6b3b9aabb0b9f386e0a697862b Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 11 13:45:02 2009 -0300 PendingChannelRequest: Make PendingChannelRequest only fininsh when ChannelRequest succeed or fail. TelepathyQt4/pending-channel-request-internal.h | 20 +++--- TelepathyQt4/pending-channel-request.cpp | 87 ++++++++++++----------- TelepathyQt4/pending-channel-request.h | 10 ++- 3 files changed, 64 insertions(+), 53 deletions(-) commit 0708499d01397893311b98a9344bc06960050f68 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 11 12:47:22 2009 -0300 Account: Added documentation to ChannelDispatcher methods. TelepathyQt4/account.cpp | 135 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 134 insertions(+), 1 deletion(-) commit 3c4600ed433b46eb07fb54882c4b9f177762c355 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 11 12:18:30 2009 -0300 Account: Added ChannelDispatcher support. TelepathyQt4/account.cpp | 101 ++++++++++++++++++++++++++++++++++++++++++++++ TelepathyQt4/account.h | 34 ++++++++++++++++ 2 files changed, 135 insertions(+) commit 7b5b4ed5b268d7a68149dca9d08b5f078788219a Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 11 12:32:46 2009 -0300 PendingChannelRequest: Call ChannelRequest::proceed if we are done and not cancelled. TelepathyQt4/pending-channel-request.cpp | 22 +++++++++++++++++++++- TelepathyQt4/pending-channel-request.h | 1 + 2 files changed, 22 insertions(+), 1 deletion(-) commit ff84412166ee47f1acd414c1df7d0331b166bfa1 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 11 12:32:26 2009 -0300 ChannelRequest: Added a private proceed method that should be used by PendingChannelRequest. TelepathyQt4/channel-request.cpp | 5 +++++ TelepathyQt4/channel-request.h | 4 ++++ 2 files changed, 9 insertions(+) commit b971ac1f604abae27e2d0f239bbca79595d41508 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 11 11:50:27 2009 -0300 PendingChannelRequest: Added helper cancel method. TelepathyQt4/Makefile.am | 2 + TelepathyQt4/pending-channel-request-internal.h | 68 +++++++++++++++++++++++ TelepathyQt4/pending-channel-request.cpp | 20 +++++++ TelepathyQt4/pending-channel-request.h | 2 + 4 files changed, 92 insertions(+) commit 95fd448ede886d9c17d9d1219ff72005ed7a814c Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 11 11:27:25 2009 -0300 PendingChannelRequest: Added initial PendingChannelRequest class. TelepathyQt4/Makefile.am | 4 + TelepathyQt4/PendingChannelRequest | 13 +++ TelepathyQt4/pending-channel-request.cpp | 181 ++++++++++++++++++++++++++++++ TelepathyQt4/pending-channel-request.h | 75 +++++++++++++ 4 files changed, 273 insertions(+) commit e9bf7d128203fe5689ba71ba413e27cb88c7a27e Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jun 11 10:55:40 2009 -0300 Added auto generated classes for ChannelDispatcher interface. TelepathyQt4/ChannelDispatcher | 13 +++++++++++++ TelepathyQt4/ChannelDispatcherInterface | 13 +++++++++++++ TelepathyQt4/Makefile.am | 12 ++++++++++++ TelepathyQt4/channel-dispatcher.cpp | 25 +++++++++++++++++++++++++ TelepathyQt4/channel-dispatcher.h | 31 +++++++++++++++++++++++++++++++ TelepathyQt4/channel-dispatcher.xml | 9 +++++++++ TelepathyQt4/stable-interfaces.xml | 1 + 7 files changed, 104 insertions(+) commit a58b1bf5467d38981acc0135fe6d408752e21d4a Merge: a563e73 5f88729 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 10 14:52:10 2009 -0300 Merge branch 'telepathy-spec-0.17.26' Reviewed-by: Simon McVittie (smcv) commit 5f887290e8f8b4719b362e161d4d3f728a0f07c1 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 10 14:05:38 2009 -0300 Import telepathy-spec 0.17.26 spec/Channel_Dispatch_Operation.xml | 8 ++++---- spec/Channel_Dispatcher.xml | 4 ++-- ...Channel_Dispatcher_Interface_Operation_List.xml | 8 ++++---- spec/Channel_Request.xml | 4 ++-- spec/Client.xml | 9 ++++----- spec/Client_Approver.xml | 9 ++++----- spec/Client_Handler.xml | 9 ++++----- spec/Client_Interface_Requests.xml | 6 ++---- spec/Client_Observer.xml | 11 +++++------ spec/all.xml | 8 ++++---- 10 files changed, 35 insertions(+), 41 deletions(-) commit a563e738b721b0fd4ef5d8acd8f87ffcdc4c81a9 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 3 10:05:07 2009 -0300 Start 0.1.8 development NEWS | 5 +++++ configure.ac | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) commit 68983e826c7940ecc8cfc90754e51372c90f5158 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 3 09:21:01 2009 -0300 Prepare release 0.1.7 NEWS | 16 ++++++++++++++-- configure.ac | 4 ++-- 2 files changed, 16 insertions(+), 4 deletions(-) commit 4c3be38690169d5d7bf28826a4a98643712cbdc3 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 3 09:45:37 2009 -0300 text-chan test: Wait untill messages have been received. TextChannel now becomes ready even if message queue is empty, so let's wait until messages have been received. tests/dbus/text-chan.cpp | 4 ++++ 1 file changed, 4 insertions(+) commit 9803918ee9b37567bf08c041ab3e090659940ae4 Merge: 2d78a1f 06e466f Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 3 09:03:49 2009 -0300 Merge branch 'client-approver' Reviewed-by: Simon McVittie (smcv) commit 2d78a1fbf06d0351623fae17ddb5e1a0e7aa01b9 Merge: ebb19fb cd2bfe8 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 3 09:03:36 2009 -0300 Merge branch 'client-observer' Reviewed-by: Simon McVittie (smcv) commit ebb19fb01a1b91769f928efa41edc4512ec935be Merge: f7a3c74 86c3cae Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 3 09:03:25 2009 -0300 Merge branch 'channel-dispatch-operation' Reviewed-by: Simon McVittie (smcv) commit f7a3c7465cde557cbcf31df79724cec2d5ab2ba5 Merge: 67a3b9e 2cb1fb9 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jun 3 09:03:12 2009 -0300 Merge branch 'channel-request' Reviewed-by: Simon McVittie (smcv) commit 06e466f0d061c337856b6701939b4918b663e6f4 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 2 02:28:13 2009 -0300 client test: Added test for Client.Approver.addDispatchOperation. tests/dbus/client.cpp | 53 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 50 insertions(+), 3 deletions(-) commit 227536ebfb243c71e7222535d48400a2ce7bb268 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 2 02:35:39 2009 -0300 ClientRegistrar: Use ChannelDispatchOperation high-level class on AbstractClientApprover. TelepathyQt4/abstract-client.h | 3 +-- TelepathyQt4/client-registrar.cpp | 8 +++++++- tests/dbus/client.cpp | 9 +++++---- 3 files changed, 13 insertions(+), 7 deletions(-) commit 242c0e2f194158c0a6c0634431886a2e3cf9e5c6 Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 25 11:59:52 2009 -0300 ClientRegistrar: Added initial Approver support. TelepathyQt4/abstract-client.h | 5 ++- TelepathyQt4/client-registrar-internal.h | 41 +++++++++++++++++++++++++ TelepathyQt4/client-registrar.cpp | 49 +++++++++++++++++++++++++++++- 3 files changed, 93 insertions(+), 2 deletions(-) commit b37a051e743253fce70275d73afa2c784ca332b0 Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 25 11:59:03 2009 -0300 Added auto generated classes for Client.Approver interface. TelepathyQt4/ClientApproverInterface | 13 +++++++++++++ TelepathyQt4/Makefile.am | 1 + TelepathyQt4/client.xml | 1 + 3 files changed, 15 insertions(+) commit cd2bfe8cbcbafb7386726ada16ea2467256c4a6e Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 2 02:36:03 2009 -0300 ClientRegistrar: Use ChannelDispatchOperation high-level class on AbstractClientObserver. TelepathyQt4/abstract-client.h | 2 +- TelepathyQt4/client-registrar.cpp | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) commit 86c3caeba6e10dcbc54300c003bd55475b69e206 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 2 02:45:44 2009 -0300 ChannelDispatchOperation: Let's not crash on buggy CD. TelepathyQt4/channel-dispatch-operation.cpp | 29 ++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) commit 2cb1fb9ec184d291c5ec6d991ee1b23e525e2fa4 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 2 01:41:46 2009 -0300 ChannelRequest: Do not call account->becomeReady for account received on immutableProperties. TelepathyQt4/channel-request.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) commit 9c2e6352378151492abeef462542dfd3da0d6fd8 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jun 1 14:43:08 2009 -0300 ChannelDispatchOperation: Added ChannelDispatchOperation high-level class. TelepathyQt4/ChannelDispatchOperation | 13 + TelepathyQt4/ChannelDispatchOperationInterface | 13 + TelepathyQt4/Makefile.am | 13 + TelepathyQt4/channel-dispatch-operation.cpp | 374 ++++++++++++++++++++++++ TelepathyQt4/channel-dispatch-operation.h | 126 ++++++++ TelepathyQt4/channel-dispatch-operation.xml | 9 + TelepathyQt4/stable-interfaces.xml | 1 + TelepathyQt4/types.h | 2 + 8 files changed, 551 insertions(+) commit 982dbbfcab69462cd61938603315aa319d736f15 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jun 2 01:40:42 2009 -0300 ChannelRequest: Use only one constructor that receives the QDBusConnection object. TelepathyQt4/channel-request.cpp | 16 ++-------------- TelepathyQt4/channel-request.h | 2 -- 2 files changed, 2 insertions(+), 16 deletions(-) commit 67a3b9e296620fa421efda929643f856c9de4b31 Merge: bac7776 8345ef8 Author: Andre Moreira Magalhaes (andrunko) Date: Fri May 29 10:46:31 2009 -0300 Merge branch 'channel-bugfix' Reviewed-by: Simon McVittie (smcv) commit 8345ef8e6512f646842eab0d2726b3c36759ec0a Author: Andre Moreira Magalhaes (andrunko) Date: Fri May 29 10:11:55 2009 -0300 Fixed bug 21993: TextChannel does not become ready until first message is received if FeatureMessageQueue is enabled TelepathyQt4/text-channel.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) commit d907f5288b0e858b67fdb54f71df73f4ec3d09b9 Author: Andre Moreira Magalhaes (andrunko) Date: Fri May 29 10:05:45 2009 -0300 TextChannel: Proper check for FeatureMessageCapabilities when trying to update capabilities. TelepathyQt4/text-channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 762ae3a59f008f7bf0890923b72797cff2377d0d Author: Andre Moreira Magalhaes (andrunko) Date: Thu May 28 18:47:02 2009 -0300 Channel: Make sure connection is ready before start introspection. Make sure connection is ready before start introspection, as we need the Connection object to be ready in order to access some of its methods (e.g. Connection::selfHandle()), TelepathyQt4/channel.cpp | 29 +++++++++++++++++++++++------ TelepathyQt4/channel.h | 1 + 2 files changed, 24 insertions(+), 6 deletions(-) commit 84b2b9c22e3f4ba805dd96b57935e1479bcab602 Author: Andre Moreira Magalhaes (andrunko) Date: Thu May 28 18:14:14 2009 -0300 Channel: Use Connection::selfHandle while trying to fake a group interface instead of Connection::selfContact. Use Connection::selfHandle while trying to fake a group interface instead of Connection::selfContact, this allows us to work even on connections where FeatureSelfContact was not requested. TelepathyQt4/channel.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit bac777625b35f63db365711ab6abcce8462cacde Author: George Kiagiadakis Date: Thu May 28 12:05:53 2009 -0300 Export stl compatibility methods only if QT_NO_STL is not defined. Signed-off-by: Andre Moreira Magalhaes (andrunko) TelepathyQt4/referenced-handles.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit e585476390c72b2f757b0779f527cbf8630dcc56 Author: Andre Moreira Magalhaes (andrunko) Date: Thu May 28 11:59:05 2009 -0300 Start 0.1.7 development NEWS | 5 +++++ configure.ac | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) commit 5f51ee0b7307b4885c5fdd3ec125662e45e13428 Author: Andre Moreira Magalhaes (andrunko) Date: Thu May 28 11:07:37 2009 -0300 Prepare release 0.1.6 NEWS | 20 ++++++++++++++++++-- configure.ac | 4 ++-- 2 files changed, 20 insertions(+), 4 deletions(-) commit db30d8ab7e008f911f971f23d476cc229df6ce06 Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 26 09:07:39 2009 -0300 Proper define AbstractClientPtr. TelepathyQt4/types.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit b1b8b5abad567d3cd8e73049c022ca25027d3a92 Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 25 10:17:39 2009 -0300 ClientRegistrar: Fixed Observer adaptor introspection data. TelepathyQt4/client-registrar-internal.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f692352ee839d482b57cade5bea3316815301fe7 Author: Andre Moreira Magalhaes (andrunko) Date: Wed May 27 11:38:16 2009 -0300 ClientRegistrar: Use ChannelFactory to create Channels. Use ChannelFactory to create channels so we create custom Channel objects for known channel types. TelepathyQt4/client-registrar.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit dabd090bc4787ece637df529c6e706ce701d9830 Author: Andre Moreira Magalhaes (andrunko) Date: Thu May 28 10:43:06 2009 -0300 ChannelFactory: Use TELEPATHY_INTERFACE_CHANNEL_TYPE_FILE_TRANSFER definition. TelepathyQt4/channel-factory.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 38a46bcef8726a433b1a34959bdb61d9195e720b Author: Andre Moreira Magalhaes (andrunko) Date: Thu May 28 10:40:49 2009 -0300 Channel: Make sure immutableProperties contains known properties if channel is ready. TelepathyQt4/channel.cpp | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) commit d6875fb5a94bc74bc05846595c2b12270afbb28e Author: Andre Moreira Magalhaes (andrunko) Date: Wed May 27 11:40:31 2009 -0300 PendingChannel: Use ChannelFactory to create channels. TelepathyQt4/pending-channel.cpp | 29 +++-------------------------- 1 file changed, 3 insertions(+), 26 deletions(-) commit 84fc7379fea070b00e4f68b234190f94b12bc617 Author: Andre Moreira Magalhaes (andrunko) Date: Wed May 27 11:36:45 2009 -0300 Added ChannelFactory, internal class to create channels based on their types. TelepathyQt4/Makefile.am | 2 ++ TelepathyQt4/channel-factory.cpp | 67 ++++++++++++++++++++++++++++++++++++++ TelepathyQt4/channel-factory.h | 42 ++++++++++++++++++++++++ 3 files changed, 111 insertions(+) commit 560cce40a8b0806185ec1ada65b7517157ea347d Author: Andre Moreira Magalhaes (andrunko) Date: Wed May 27 11:51:25 2009 -0300 Channel: Added immutableProperties public method. TelepathyQt4/channel.cpp | 27 ++++++++++++++++++++++++--- TelepathyQt4/channel.h | 2 ++ 2 files changed, 26 insertions(+), 3 deletions(-) commit e41a32cf76c79b44e94005611cfacc4c2aa6ad20 Author: Simon McVittie Date: Wed May 27 17:17:52 2009 +0100 Import telepathy-spec 0.17.25, plus a patch to errors.xml to correct error naming Reviewed-by: Andre Moreira Magalhaes (andrunko) spec/Channel_Interface_Tube.xml | 198 ++++++++++++++++++++++++++++--------- spec/Channel_Type_DBus_Tube.xml | 54 +++++++--- spec/Channel_Type_Stream_Tube.xml | 136 ++++++++++++++++++++----- spec/Channel_Type_Tubes.xml | 94 ++---------------- spec/Properties_Interface.xml | 2 +- spec/all.xml | 2 +- spec/errors.xml | 18 ++++ 7 files changed, 333 insertions(+), 171 deletions(-) commit ebb58d30c2fac9c2d83100fdf163bb1d95c059e1 Merge: 612996a 6b4957c Author: Andre Moreira Magalhaes (andrunko) Date: Wed May 20 14:29:52 2009 -0300 Merge branch 'trivia' Reviewed-by: Simon McVittie (smcv) commit 6b4957c212a3827e12e5bf61582844dc496aed18 Author: Andre Moreira Magalhaes Date: Wed May 20 13:58:16 2009 -0300 Conditional build test-client only if python is found. test-client depends on account-manager.py that depends on python. tests/dbus/Makefile.am | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) commit b76ed4810396cf749f2c2b411e833a88b738630c Author: Andre Moreira Magalhaes Date: Wed May 20 13:50:14 2009 -0300 streamed-media-chan test: Fixed race condition. tests/dbus/streamed-media-chan.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) commit 612996a0699998163ed6abeb8f267bf3f60d3c9b Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 19 11:39:39 2009 -0300 Start 0.1.6 development NEWS | 5 +++++ configure.ac | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) commit 4bcbc342e7ca5989ce00771f46c712b78c7ca9a4 Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 19 11:37:47 2009 -0300 Prepare release 0.1.5 NEWS | 16 ++++++++++++++-- configure.ac | 4 ++-- 2 files changed, 16 insertions(+), 4 deletions(-) commit 4c453f0aed8f755f197e340c1c79bad56263cff9 Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 19 12:07:59 2009 -0300 AbstractClient: Remove moc include. TelepathyQt4/abstract-client.cpp | 2 -- 1 file changed, 2 deletions(-) commit c5bc3f88ac18e96043e99225e9c619de58ccbe5e Merge: 4910b6b 739a549 Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 19 10:38:24 2009 -0300 Merge branch 'client' Reviewed-by: Simon McVittie (smcv) commit 4910b6b49fdd3ef9aed78ebf373f2bc479b78b02 Merge: 5e47de8 0ff745e Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 19 10:37:59 2009 -0300 Merge branch 'trivia' Reviewed-by: Simon McVittie (smcv) commit 739a549426f17ff11c449f17cce3d71e19df0aa5 Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 19 10:35:10 2009 -0300 PendingOperation: Make dtor virtual just for the sake of completeness. TelepathyQt4/pending-operation.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 43498e207feda77e6db61bd43b684b7c61ec211f Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 19 10:30:33 2009 -0300 ClientRegistrar: Unite the create methods and use a default bus parameter. TelepathyQt4/client-registrar.cpp | 18 +----------------- TelepathyQt4/client-registrar.h | 4 ++-- 2 files changed, 3 insertions(+), 19 deletions(-) commit 3518effa9a48a1f3f238c8f1d3561d10fbf82b1c Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 19 10:20:20 2009 -0300 ClientRegistrar: Use hex instead of decimal to format Client unique bus name. TelepathyQt4/client-registrar.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit b49c3655b72947b417c936a2ae859729fc4874a0 Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 19 10:00:39 2009 -0300 ClientRegistrar: Improved registerClient method docs. TelepathyQt4/client-registrar.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 32086bfa127211e7f04f62feda4771c2950c1b88 Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 19 09:59:01 2009 -0300 ChannelRequest: Remove commented out code. TelepathyQt4/channel-request.cpp | 1 - 1 file changed, 1 deletion(-) commit b6b189bca1377341c54add5787440993d4e39ed1 Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 18 09:58:37 2009 -0300 ClientRegistrar: Fixed comments. TelepathyQt4/client-registrar.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit e14ae0a187d0b54da57227f2521548a34da7a824 Author: Andre Moreira Magalhaes (andrunko) Date: Fri May 15 14:50:29 2009 -0300 Added client.xml to Makefile.am. TelepathyQt4/Makefile.am | 1 + 1 file changed, 1 insertion(+) commit 8c26060d417a68ca65affb73edb5828bd056dea0 Author: Andre Moreira Magalhaes (andrunko) Date: Fri May 15 12:06:08 2009 -0300 client test: Added test for Client.Observer.ObserveChannels. TelepathyQt4/client-registrar.cpp | 33 ++++++++++++++++++++ tests/dbus/client.cpp | 60 +++++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) commit 4b8dc2bc2a1c50c3ef038e246b88d8ca6201e81a Author: Andre Moreira Magalhaes (andrunko) Date: Fri May 15 11:45:02 2009 -0300 client test: Added initial observer support. tests/dbus/client.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) commit 91462e2ef0ccbf7169e90adbfe2abc67752f2d28 Author: Andre Moreira Magalhaes (andrunko) Date: Fri May 15 11:36:51 2009 -0300 Renamed test-client-handler to test-client. Use the same test to test client, so we can test multiple inheritance. tests/dbus/Makefile.am | 8 +- tests/dbus/client-handler.cpp | 562 ----------------------------------------- tests/dbus/client.cpp | 562 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 566 insertions(+), 566 deletions(-) commit f75daebb521ef4c746d4ef2b7995903b3be36cc2 Author: Andre Moreira Magalhaes (andrunko) Date: Fri May 15 11:29:37 2009 -0300 ClientRegistrar: Added observer registration support. TelepathyQt4/client-registrar.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) commit f7d27f61f8c635a41752e7cd4f5b1aed56d45bcb Author: Andre Moreira Magalhaes (andrunko) Date: Fri May 15 11:22:21 2009 -0300 ClientRegistrar: Generate interfaces for Client.Observer and added ClientObserverInterface fancy header. TelepathyQt4/ClientObserverInterface | 13 +++++++++++++ TelepathyQt4/Makefile.am | 1 + TelepathyQt4/client.xml | 1 + 3 files changed, 15 insertions(+) commit 0eae22db9b9c33b0847ec2b2d50ef881883b2ad9 Author: Andre Moreira Magalhaes (andrunko) Date: Fri May 15 11:21:23 2009 -0300 ClientRegistrar: Added AbstractClientApprover, AbstractClientObserver fancy headers. TelepathyQt4/AbstractClientApprover | 13 +++++++++++++ TelepathyQt4/AbstractClientObserver | 13 +++++++++++++ TelepathyQt4/Makefile.am | 2 ++ 3 files changed, 28 insertions(+) commit 7087ea2a3ef9bfd885378056dcdefa2de3a0d006 Author: Andre Moreira Magalhaes (andrunko) Date: Fri May 15 11:14:30 2009 -0300 ClientRegistrar: Added ClientObserverAdaptor skeleton class. TelepathyQt4/client-registrar-internal.h | 47 ++++++++++++++++++++++++++++++ TelepathyQt4/client-registrar.cpp | 23 +++++++++++++++ 2 files changed, 70 insertions(+) commit 1bc309e2dd276b66d87786e517d09b2672c13f67 Author: Andre Moreira Magalhaes (andrunko) Date: Fri May 15 11:03:24 2009 -0300 ClientRegistrar: Added AbstractClientObserver::observeChannels method. TelepathyQt4/abstract-client.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) commit 3fdb0a001828552466a233ce07efa99e82e0a730 Author: Andre Moreira Magalhaes (andrunko) Date: Fri May 15 10:56:26 2009 -0300 ClientRegistrar: Changed Observer/Approver/Handler channelFilter method to avoid conflicts when using multiple inheritance. TelepathyQt4/abstract-client.cpp | 12 +++++++++++- TelepathyQt4/abstract-client.h | 6 +++--- TelepathyQt4/client-registrar-internal.h | 2 +- 3 files changed, 15 insertions(+), 5 deletions(-) commit c97efe8062c8983fd3493de8110c57531e7122fe Author: Andre Moreira Magalhaes (andrunko) Date: Thu May 14 17:24:17 2009 -0300 MethodInvocationContext: Use qdbus_cast instead of qvariant_cast. TelepathyQt4/method-invocation-context.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a59b6741f5c8f644ac4757a2cae5ff74305d9cc8 Author: Andre Moreira Magalhaes (andrunko) Date: Thu May 14 17:22:09 2009 -0300 PendingOperation: No need for virtual methods. TelepathyQt4/pending-operation.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit dbe50f70bc0c603eb7f6865cded29972310dac39 Author: Andre Moreira Magalhaes (andrunko) Date: Thu May 14 17:19:36 2009 -0300 Removed PendingClientOperation class. TelepathyQt4/Makefile.am | 4 -- TelepathyQt4/PendingClientOperation | 13 ----- TelepathyQt4/pending-client-operation.cpp | 78 ----------------------------- TelepathyQt4/pending-client-operation.h | 63 ----------------------- 4 files changed, 158 deletions(-) commit 38671639ae0f539c90389c21bcefd6a1ee1eac99 Author: Andre Moreira Magalhaes (andrunko) Date: Thu May 14 17:19:29 2009 -0300 ClientRegistrar: Use MethodInvocationContext instead of PendingClientOperation. TelepathyQt4/abstract-client.h | 4 +- TelepathyQt4/client-registrar-internal.h | 6 +-- TelepathyQt4/client-registrar.cpp | 74 ++++++++++++++++++++++-------- tests/dbus/client-handler.cpp | 10 ++-- 4 files changed, 64 insertions(+), 30 deletions(-) commit 44d489afedc58aafac3a75f6bb9817b002f7a18f Author: Andre Moreira Magalhaes (andrunko) Date: Thu May 14 17:13:03 2009 -0300 MethodInvocationContext: Added class. MethodInvocationContext is a class used to represent a context of a D-Bus method call. It's main use is to handle async replies, where when the reply is known, the methos MethodInvocationContext::setFinished/WithError should be called, which will send the reply over D-Bus. It's a template class to avoid replying with unknown/wrong types. It accepts all types known by Qt MetaType System. TelepathyQt4/Makefile.am | 2 + TelepathyQt4/MethodInvocationContext | 13 +++ TelepathyQt4/method-invocation-context.h | 184 ++++++++++++++++++++++++++++++ TelepathyQt4/types.h | 17 +++ 4 files changed, 216 insertions(+) commit 0ff745eac5c555e0ac950915d644fe1bbeec880f Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 12 16:57:31 2009 -0300 AccountManager: Fixed docs. TelepathyQt4/account-manager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit ea0e60a726ef4ba2853112a499c65cf3c1143078 Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 12 16:56:55 2009 -0300 ClientRegistrar: No need for virtual destructor. TelepathyQt4/client-registrar.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 164ed3229e4166646724bffcd00559e28952f8ca Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 11 23:50:34 2009 -0300 ClientRegistrar: Added docs. TelepathyQt4/client-registrar.cpp | 130 +++++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) commit 8dd5dce35c3727a0615c0c6d2e209a69cc1e200d Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 11 18:12:17 2009 -0300 Reference bug number on QDateTime 64-bit time_t usage. TelepathyQt4/channel-request.cpp | 4 +--- TelepathyQt4/client-registrar.cpp | 4 +--- TelepathyQt4/message.cpp | 8 ++------ 3 files changed, 4 insertions(+), 12 deletions(-) commit a4caa0fdd19451ab8b60469f0d814b5a813d434f Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 11 17:51:36 2009 -0300 ClientRegistrar: Do not pass ready objects to AddRequest/HandleChannels to avoid wrong method call order. TelepathyQt4/client-registrar-internal.h | 96 +---------- TelepathyQt4/client-registrar.cpp | 277 ++++++------------------------ 2 files changed, 52 insertions(+), 321 deletions(-) commit b6bd79090549717fd12dd3af48c8e09198b5a96e Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 11 18:02:57 2009 -0300 ClientRegistrar: Added stub AbstractClientObserver/Approver. TelepathyQt4/abstract-client.cpp | 34 ++++++++++++++++++++++++++++++++ TelepathyQt4/abstract-client.h | 40 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) commit 4c49abc5595dac4c9de4ffe24627a014ab08e840 Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 11 22:55:46 2009 -0300 Reanemed ClientHandler module to Client. The client module will contain all client interfaces (Observer, Approver, Handler). TelepathyQt4/Client | 13 +++++++++++ TelepathyQt4/ClientHandler | 13 ----------- TelepathyQt4/ClientHandlerInterface | 2 +- TelepathyQt4/ClientInterface | 13 +++++++++++ TelepathyQt4/ClientInterfaceRequestsInterface | 2 +- TelepathyQt4/Makefile.am | 23 +++++++++--------- TelepathyQt4/client-handler.cpp | 25 -------------------- TelepathyQt4/client-handler.h | 31 ------------------------- TelepathyQt4/client-handler.xml | 11 --------- TelepathyQt4/client.cpp | 25 ++++++++++++++++++++ TelepathyQt4/client.h | 31 +++++++++++++++++++++++++ TelepathyQt4/client.xml | 12 ++++++++++ TelepathyQt4/stable-interfaces.xml | 2 +- 13 files changed, 109 insertions(+), 94 deletions(-) commit 2a59fe072a0be32eda6b9e8372edbedbc9f54cfc Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 11 22:56:56 2009 -0300 ChannelRequest: Fixed channel-request.xml title tag. TelepathyQt4/channel-request.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 8afc2bdf8eaddaa24e103d8e6695f0e7912021c3 Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 11 17:29:04 2009 -0300 ChannelRequest: Use immutableProperties and do not warn when trying to access properties and not ready. TelepathyQt4/channel-request.cpp | 74 ++++++++++++++++---------------------- 1 file changed, 31 insertions(+), 43 deletions(-) commit ba6d499427e64c709abee9663304dfd53c1dc010 Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 11 17:15:44 2009 -0300 ChannelRequest: Proper wording on warnings. TelepathyQt4/channel-request.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit 41bba61a5e6f49a2a52afe0cb9264aae3deda66b Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 11 17:14:23 2009 -0300 ChannelRequest: cancel does not check for isReady anymore. Let it fail if the proxy is invalid. TelepathyQt4/channel-request.cpp | 5 ----- 1 file changed, 5 deletions(-) commit 6b1609d0ef49a87f8fdc05e1247cfac8295fb95b Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 11 17:07:59 2009 -0300 ClientRegistrar: Make sure the list of registrars and adaptors is proper keyed per connection. TelepathyQt4/client-registrar-internal.h | 7 ++++--- TelepathyQt4/client-registrar.cpp | 23 ++++++++++++++--------- TelepathyQt4/client-registrar.h | 2 +- 3 files changed, 19 insertions(+), 13 deletions(-) commit 2070245b62973557219ce8d8373e4417d22d0aaf Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 11 16:13:02 2009 -0300 ChannelRequest: Explain that the FIXME is actually a Qt bug. TelepathyQt4/channel-request.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit c907e978e4de4ce8921e40f89ea57d9f624954b2 Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 11 16:06:50 2009 -0300 ClientRegister: Change registerClient to receive the clientName and remove it from constructor. Allow the same registrar (unique per dbus connection) to register clients with different names. TelepathyQt4/client-registrar.cpp | 32 +++++++++++--------------------- TelepathyQt4/client-registrar.h | 11 +++++------ tests/dbus/client-handler.cpp | 12 ++++++------ 3 files changed, 22 insertions(+), 33 deletions(-) commit c727020b3bd88528624d8cd8b49444aa6b17cd1d Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 11 16:01:17 2009 -0300 ClientRegistrar: Removed ClientObject. Use AbstractClient to registerClients. TelepathyQt4/ClientObject | 13 --------- TelepathyQt4/Makefile.am | 3 -- TelepathyQt4/client-object.cpp | 58 ------------------------------------- TelepathyQt4/client-object.h | 57 ------------------------------------ TelepathyQt4/client-registrar.cpp | 55 ++++++++++++++--------------------- TelepathyQt4/client-registrar.h | 6 ++-- tests/dbus/client-handler.cpp | 24 +++++++-------- 7 files changed, 35 insertions(+), 181 deletions(-) commit 68eab70f8324e474ce2f0fe3645fc8393ffb79f5 Author: Andre Moreira Magalhaes (andrunko) Date: Mon May 11 15:17:52 2009 -0300 ClientRegistrar: Added AbstractClient the base class for all Clients. TelepathyQt4/abstract-client.cpp | 8 ++++++++ TelepathyQt4/abstract-client.h | 11 ++++++++++- TelepathyQt4/client-object.cpp | 16 ++++++++-------- TelepathyQt4/client-object.h | 6 +++--- TelepathyQt4/client-registrar-internal.h | 16 ++++++++-------- TelepathyQt4/client-registrar.cpp | 11 ++++++----- TelepathyQt4/types.h | 2 +- tests/dbus/client-handler.cpp | 10 +++++----- 8 files changed, 49 insertions(+), 31 deletions(-) commit 5e47de8959e731058e1d63a24ec791c9a4c45c39 Author: Simon McVittie Date: Fri May 8 15:50:05 2009 +0100 Start 0.1.5 development NEWS | 5 +++++ configure.ac | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) commit 036dbb1aa991d1f7ae91ee895e4fad96a42c35e3 Author: Simon McVittie Date: Fri May 8 15:02:47 2009 +0100 Prepare version 0.1.4 NEWS | 29 ++++++++++++++++++++++++++++- configure.ac | 4 ++-- 2 files changed, 30 insertions(+), 3 deletions(-) commit 461a1ef4960813053fce2be996e5e1a3af1f8eda Merge: 4ee806f 3c1f1c7 Author: Andre Moreira Magalhaes (andrunko) Date: Fri May 8 10:18:34 2009 -0300 Merge branch 'account-update-params' Reviewed-by: Simon McVittie (smcv) commit 3c1f1c7ee3a84d76a9c2f9c145d713e2a677f670 Author: Andre Moreira Magalhaes (andrunko) Date: Thu May 7 17:23:35 2009 -0300 Account: updateParamenters now return a PendingStringList. TelepathyQt4/account.cpp | 22 +++++++--------------- TelepathyQt4/account.h | 3 +-- 2 files changed, 8 insertions(+), 17 deletions(-) commit f0158f596821928dbe257e8687af84a2d2511a30 Author: Andre Moreira Magalhaes (andrunko) Date: Thu May 7 17:22:41 2009 -0300 PendingStringList: Added constructor that takes a QDBusPendingCall that returns a QStringList. TelepathyQt4/pending-string-list.cpp | 27 +++++++++++++++++++++++++++ TelepathyQt4/pending-string-list.h | 4 ++++ 2 files changed, 31 insertions(+) commit 4ee806f42f011b40dcdc0d3ca8bd4117859aaffb Merge: 0d3d392 7debffd Author: Simon McVittie Date: Thu May 7 18:55:09 2009 +0100 Merge branch 'spec' Reviewed-by: Andre Moreira Magalhaes (andrunko) commit 7debffd3c3da278551086117b85ab30bebad538d Author: Simon McVittie Date: Thu May 7 18:46:08 2009 +0100 Update to telepathy-spec 0.17.24 (UpdateParameters, CreateAccount API break) TelepathyQt4/Prototype/Account.cpp | 2 +- TelepathyQt4/Prototype/AccountManager.cpp | 3 +- TelepathyQt4/account-manager.cpp | 27 ++++- TelepathyQt4/account-manager.h | 4 +- TelepathyQt4/account.cpp | 28 +++++ TelepathyQt4/account.h | 4 + TelepathyQt4/pending-account.cpp | 5 +- TelepathyQt4/pending-account.h | 3 +- spec/Account.xml | 79 ++++++++++++-- spec/Account_Manager.xml | 104 ++++++++++++++++-- spec/Connection_Interface_Requests.xml | 6 ++ spec/Debug.xml | 166 +++++++++++++++++++++++++++++ spec/all.xml | 6 +- tests/lib/account-manager.py | 14 ++- tests/prototype/prototype.cpp | 2 +- 15 files changed, 423 insertions(+), 30 deletions(-) commit 03ab0dcb08a0e0311b2afd66994b16edae925933 Author: Andre Moreira Magalhaes (andrunko) Date: Thu May 7 14:22:41 2009 -0300 client-handler test: Improved registerClient test. tests/dbus/client-handler.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) commit f1a9ab4c03d6a3af95d6a3e06092bf47a711402b Author: Andre Moreira Magalhaes (andrunko) Date: Thu May 7 13:57:25 2009 -0300 client-handler test: Improved test. Added support for unique name client registration. Added support for checking HandledChannels unite for multiple handlers in the same dbus connection. tests/dbus/client-handler.cpp | 153 +++++++++++++++++++++++++++++++---------- 1 file changed, 118 insertions(+), 35 deletions(-) commit cb2d466df029ae21d0e8b7b005f86a5370310481 Author: Andre Moreira Magalhaes (andrunko) Date: Thu May 7 13:01:43 2009 -0300 ClientRegistrar: Handler::HandledChannels is now spec compliant. Handler::HandledChannels now returns the same for all Client instances that share a unique bus name. TelepathyQt4/client-registrar-internal.h | 15 +++++++++-- TelepathyQt4/client-registrar.cpp | 42 +++++++++++++++++++++++------- 2 files changed, 45 insertions(+), 12 deletions(-) commit 196aa24c62901e045b3b3c2c6ff20556d30805bc Author: Andre Moreira Magalhaes (andrunko) Date: Thu May 7 12:15:02 2009 -0300 ClientRegistrar: create method will return the same ClientRegistrar instance for a given QDBusConnection if the registrar already exists. TelepathyQt4/client-registrar.cpp | 16 ++++++++++------ TelepathyQt4/client-registrar.h | 3 ++- 2 files changed, 12 insertions(+), 7 deletions(-) commit a1bb912d16942f88e7cc00f74c28fa5f157ce8ae Author: Andre Moreira Magalhaes (andrunko) Date: Thu May 7 12:01:00 2009 -0300 ClientRegistrar: HandledChannels is now handled internally by the library. Note that this is not spec compliant, as HandledChannels is not returning the same for all Client instances that share a unique bus name. This will be implemented in a later patch. TelepathyQt4/abstract-client.h | 1 - TelepathyQt4/client-registrar-internal.h | 17 ++++++++--- TelepathyQt4/client-registrar.cpp | 49 +++++++++++++++++++++++++----- tests/dbus/client-handler.cpp | 20 ++++++------ 4 files changed, 63 insertions(+), 24 deletions(-) commit 245190424d4594b8798278703b07b9ded1927cc0 Author: Andre Moreira Magalhaes (andrunko) Date: Wed May 6 14:14:52 2009 -0300 ClientRegistrar: Changed AbstractClientHandler isListeningRequests method and listenRequests constructor param to wantsRequestNotification. TelepathyQt4/abstract-client.cpp | 10 +++++----- TelepathyQt4/abstract-client.h | 4 ++-- TelepathyQt4/client-registrar.cpp | 2 +- tests/dbus/client-handler.cpp | 8 ++++---- 4 files changed, 12 insertions(+), 12 deletions(-) commit a7af05ce3f831315f42fa69f4612cd0be0f97bd7 Author: Andre Moreira Magalhaes (andrunko) Date: Wed May 6 14:12:07 2009 -0300 ClientRegistrar: Cast object to intptr_t to get the unique id. TelepathyQt4/client-registrar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 16c6f1e6af262101e93799efb21dbdfe326573d6 Author: Andre Moreira Magalhaes (andrunko) Date: Wed May 6 14:11:45 2009 -0300 ClientRegistrar: Add multiple interfaces support on Client. Removed AbstractClient, as there is no way to multiple inherit and use SharedPtr at the same time, in favor of ClientObject. To implement multiple interfaces clients will create a ClientObject and set it's handler, approver, observer accordingly. For now ClientObject only support handlers, but approver and observer support will be added in the future when they exist. TelepathyQt4/ClientObject | 13 ++++++ TelepathyQt4/Makefile.am | 4 +- TelepathyQt4/abstract-client.cpp | 9 ----- TelepathyQt4/abstract-client.h | 20 +--------- TelepathyQt4/client-object.cpp | 58 +++++++++++++++++++++++++++ TelepathyQt4/client-object.h | 57 +++++++++++++++++++++++++++ TelepathyQt4/client-registrar-internal.h | 18 +++++---- TelepathyQt4/client-registrar.cpp | 48 ++++++++++++----------- TelepathyQt4/client-registrar.h | 6 +-- TelepathyQt4/types.h | 6 ++- tests/dbus/client-handler.cpp | 63 ++++++++++++++++++------------ 11 files changed, 212 insertions(+), 90 deletions(-) commit e57968986ee793e10a14c14d1dcc20254ba0356d Author: Andre Moreira Magalhaes (andrunko) Date: Wed May 6 14:11:08 2009 -0300 ChannelRequest: Fixed copyright to @ 2009. TelepathyQt4/channel-request.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 112081ca76c1ec9d7074ced2b205f8b1776a67b6 Author: Andre Moreira Magalhaes (andrunko) Date: Wed May 6 12:02:48 2009 -0300 ChannelRequest: Do not call becomeReady on constructor. TelepathyQt4/channel-request.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d77b03ee0ebd822d904642d8e2bf68d0ebdf637e Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 5 15:44:41 2009 -0300 client-handler test: Added test to HandleChannels. tests/dbus/client-handler.cpp | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) commit 2ca48b40dd0d321fa9e84144013a01f7ff28bd3b Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 5 15:07:44 2009 -0300 client-handler test: Added test to AddRequest/RemoveRequest. tests/dbus/client-handler.cpp | 274 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 268 insertions(+), 6 deletions(-) commit c01d5b37715e3bb4b26aa93643d049bd4467c2aa Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 5 15:06:23 2009 -0300 ChannelRequest: Fix to make ChannelRequest::Properties::GetAll works. Need to check why this is needed here, see FIXME. TelepathyQt4/channel-request.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) commit 94da5040d48cd9ff1ad04b1a56cfbe8a4f4e0f22 Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 5 14:45:45 2009 -0300 ChannelRequest: Fixed coding style. TelepathyQt4/channel-request.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 8852769ff4882a596596f4dff814a5987e215f8d Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 5 14:45:08 2009 -0300 ClientRegistrar: Check if QQueue is empty before calling head. TelepathyQt4/client-registrar.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 60d731c59de68caf84b88b0a88fc7f0fd2880bfa Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 5 14:44:52 2009 -0300 ClientRegistrar: Added some debug. TelepathyQt4/client-registrar.cpp | 5 +++++ 1 file changed, 5 insertions(+) commit c1b1282ee40c8df12ba58d19afc79c99ee70bf9e Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 5 14:44:05 2009 -0300 ChannelRequest: Proper retrieve Account property. TelepathyQt4/channel-request.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit b6d458380e742e51d8d75ffa531e545cd16899d3 Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 5 14:43:16 2009 -0300 ChannelRequest: Proper connect to Failed signal. TelepathyQt4/channel-request.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 0799570326b5e1bb40462dc59f67e372beb106c2 Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 5 13:21:58 2009 -0300 ClientRegistrar: Unregister clients on destructor. TelepathyQt4/client-registrar.cpp | 1 + 1 file changed, 1 insertion(+) commit 48804a23df92764d7bd3ea1539c5c3f4763be208 Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 5 13:17:33 2009 -0300 Added auto generated classes for Client.Handler and Client.Interface.Requests interfaces. TelepathyQt4/ClientHandler | 13 +++++++++++ TelepathyQt4/ClientHandlerInterface | 13 +++++++++++ TelepathyQt4/ClientInterfaceRequestsInterface | 13 +++++++++++ TelepathyQt4/Makefile.am | 13 +++++++++++ TelepathyQt4/client-handler.cpp | 25 ++++++++++++++++++++ TelepathyQt4/client-handler.h | 31 +++++++++++++++++++++++++ TelepathyQt4/client-handler.xml | 11 +++++++++ TelepathyQt4/stable-interfaces.xml | 1 + 8 files changed, 120 insertions(+) commit 05ebfab2be8cc3b17510e59ec2f5c2c2e4d07e27 Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 5 12:20:43 2009 -0300 client-handler test: Added initial ClientHandler test. tests/dbus/Makefile.am | 5 ++ tests/dbus/client-handler.cpp | 169 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 174 insertions(+) commit d1037d2bb81f86bf69682d3eec9384843d85c4a1 Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 5 12:19:39 2009 -0300 ClientRegistrar: Added dbusConnection/clientName accessor methods. TelepathyQt4/client-registrar.cpp | 10 ++++++++++ TelepathyQt4/client-registrar.h | 3 +++ 2 files changed, 13 insertions(+) commit e6d08acbe9fe96a007cf4c32678ecb8df22f57ed Author: Andre Moreira Magalhaes (andrunko) Date: Tue May 5 11:48:51 2009 -0300 ClientRegistrar: Make AbstractClientHandler::add/removeRequest receive a ChannelRequestPtr object. Changes: AbstractClientHandler::handleChannels receives a list of not ready ChannelRequestPtr objects. AbstractClientHandler::addRequest receives a ready ChannelRequestPtr object. AbstractClientHandler::removeRequest receives a not-ready ChannelRequestPtr object. TelepathyQt4/abstract-client.cpp | 5 +- TelepathyQt4/abstract-client.h | 5 +- TelepathyQt4/client-registrar-internal.h | 39 +++++++++++++- TelepathyQt4/client-registrar.cpp | 86 ++++++++++++++++++++++++------ 4 files changed, 113 insertions(+), 22 deletions(-) commit 77a9a1a7ffb1797d6d0b84591b5cdc609d18f5b0 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 30 18:28:16 2009 -0300 ClientRegistrar: Use ChannelRequestPtr to represent channel requests on AbstractClientHandler::handleChannels. TelepathyQt4/abstract-client.h | 2 +- TelepathyQt4/client-registrar-internal.h | 1 + TelepathyQt4/client-registrar.cpp | 23 ++++++++++++++++++----- 3 files changed, 20 insertions(+), 6 deletions(-) commit 6feae51b28a915e4dfbe6101da1049e9ae6900b5 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 30 18:04:58 2009 -0300 ChannelRequest: Added ChannelRequest high-level class. TelepathyQt4/ChannelRequest | 13 ++ TelepathyQt4/ChannelRequestInterface | 13 ++ TelepathyQt4/Makefile.am | 14 ++ TelepathyQt4/channel-request.cpp | 310 ++++++++++++++++++++++++++++++++++ TelepathyQt4/channel-request.h | 122 +++++++++++++ TelepathyQt4/channel-request.xml | 9 + TelepathyQt4/stable-interfaces.xml | 1 + TelepathyQt4/types.h | 2 + 8 files changed, 484 insertions(+) commit 2c16a4d48ead85234cf392b849d9b8ef5e508be3 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 30 13:33:46 2009 -0300 ClientRegistrar: Use QDateTime to represent userActionTime. TelepathyQt4/abstract-client.h | 2 +- TelepathyQt4/client-registrar.cpp | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) commit d732ce32c99a6e8934a4e3b407364016235640b4 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 30 13:11:54 2009 -0300 ClientRegistrar: Do not expose QDBusObjectPath in public API, use QString instead. As all other classes QDBusObjectPath is not exposed in public API, so changing to use QString instead. TelepathyQt4/abstract-client.cpp | 4 ++-- TelepathyQt4/abstract-client.h | 6 +++--- TelepathyQt4/client-registrar.cpp | 10 +++++++--- 3 files changed, 12 insertions(+), 8 deletions(-) commit c7991aa1b7f747c7472fe8a7e16dbfdc28e5941b Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 30 12:54:20 2009 -0300 ClientRegistrar: Use exisiting high-level classes for AbstractClientHandler::handlerChannels. Use exisiting high-level classes (Account, Connection, Channel) for AbstractClientHandler::handlerChannels. TelepathyQt4/abstract-client.h | 11 ++- TelepathyQt4/client-registrar-internal.h | 65 +++++++++++++- TelepathyQt4/client-registrar.cpp | 139 ++++++++++++++++++++++++++++-- 3 files changed, 205 insertions(+), 10 deletions(-) commit 201011cbd98af398def72c967ac338e4151b6250 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 30 11:47:33 2009 -0300 ClientRegistrar: Make Requests::AddRequest/RemoveRequest finish immediatelly. TelepathyQt4/abstract-client.cpp | 2 +- TelepathyQt4/abstract-client.h | 2 +- TelepathyQt4/client-registrar-internal.h | 10 +++++++--- TelepathyQt4/client-registrar.cpp | 14 ++++++++++---- 4 files changed, 19 insertions(+), 9 deletions(-) commit e0773d25084afc318971aa5842e0e9802e8dcec0 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 30 11:46:40 2009 -0300 ClientRegistrar: Make PendingClientOperation setFinished methods check if operation already finished. TelepathyQt4/pending-client-operation.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) commit 0880c2c9fef505e28bbb186f6e0286fc3436b180 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 30 11:08:08 2009 -0300 ClientRegistrar: Make AbstractClientHandler::handleChannels async. TelepathyQt4/abstract-client.h | 5 ++++- TelepathyQt4/client-registrar-internal.h | 7 +++++-- TelepathyQt4/client-registrar.cpp | 18 ++++++++++++------ 3 files changed, 21 insertions(+), 9 deletions(-) commit b30622746ffb6705d341046f9aebed032ec9c0ff Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 30 11:06:49 2009 -0300 ClientRegistrar: Added PendingClientOperation that will be used in async methods to allow async replies. TelepathyQt4/Makefile.am | 4 ++ TelepathyQt4/PendingClientOperation | 13 ++++++ TelepathyQt4/pending-client-operation.cpp | 72 +++++++++++++++++++++++++++++ TelepathyQt4/pending-client-operation.h | 63 +++++++++++++++++++++++++ TelepathyQt4/pending-operation.h | 6 +-- 5 files changed, 155 insertions(+), 3 deletions(-) commit 6cb583117411d13f2fc83c3a06ebda15f58a2411 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Apr 29 12:24:39 2009 -0300 ClientRegistrar: Added org.freedesktop.Telepath.Client.Interface.Requests interface support. TelepathyQt4/abstract-client.cpp | 26 +++++++++++++++++++++- TelepathyQt4/abstract-client.h | 9 +++++++- TelepathyQt4/client-registrar-internal.h | 32 +++++++++++++++++++++++++++ TelepathyQt4/client-registrar.cpp | 35 ++++++++++++++++++++++++++++++ 4 files changed, 100 insertions(+), 2 deletions(-) commit 5dc0eee484b1a18d91c58aa51827b64370186322 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 28 22:01:53 2009 -0300 ClientRegistrar: Implement client registration. Works for Client.Handler for now. TelepathyQt4/client-registrar.cpp | 154 ++++++++++++++++++++++++++++++++----- TelepathyQt4/client-registrar.h | 19 +++-- 2 files changed, 144 insertions(+), 29 deletions(-) commit f84e8ccd1da000b2ac743bdc40a63d7ef32baee8 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 28 22:01:02 2009 -0300 ClientRegistrar: Added ClientAdaptor - Adaptor for org.freedesktop.Telepath.Client interface. TelepathyQt4/client-registrar-internal.h | 26 ++++++++++++++++++++++++++ TelepathyQt4/client-registrar.cpp | 11 +++++++++++ 2 files changed, 37 insertions(+) commit 65a610c8e1f982ad8189d9c0ba63c692f5e02263 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 28 16:33:36 2009 -0300 ClientRegistrar: Added AbstractClient/AbstractClientHandler and ClientHandlerAdaptor classes. TelepathyQt4/AbstractClient | 13 +++++ TelepathyQt4/AbstractClientHandler | 13 +++++ TelepathyQt4/Makefile.am | 7 +++ TelepathyQt4/abstract-client.cpp | 61 ++++++++++++++++++++ TelepathyQt4/abstract-client.h | 82 ++++++++++++++++++++++++++ TelepathyQt4/client-registrar-internal.h | 92 ++++++++++++++++++++++++++++++ TelepathyQt4/client-registrar.cpp | 24 ++++++++ 7 files changed, 292 insertions(+) commit 301504593875647937599db2690105a634bc0b7e Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 28 11:24:26 2009 -0300 ClientRegistrar: Added skeleton class. TelepathyQt4/ClientRegistrar | 13 ++++++ TelepathyQt4/Makefile.am | 3 ++ TelepathyQt4/client-registrar.cpp | 82 +++++++++++++++++++++++++++++++++++++ TelepathyQt4/client-registrar.h | 67 ++++++++++++++++++++++++++++++ TelepathyQt4/types.h | 4 ++ 5 files changed, 169 insertions(+) commit 0d3d39264d55cb45dd5cd2704ac2440fbb517058 Merge: 4e75388 8d588db Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 28 11:58:29 2009 -0300 Merge branch 'trivia' Reviewed-by: Simon McVittie (smcv) commit 4e7538806ef6862b4d9b1cdf7ac84a8be142f19f Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 28 11:47:34 2009 -0300 Updated NEWS. NEWS | 7 +++++++ 1 file changed, 7 insertions(+) commit f317f4deb0e138056137baf868c3633514e1f35c Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 28 11:46:45 2009 -0300 Renamed SharedData header file to RefCounted. TelepathyQt4/Makefile.am | 2 +- TelepathyQt4/RefCounted | 13 +++++++++++++ TelepathyQt4/SharedData | 13 ------------- 3 files changed, 14 insertions(+), 14 deletions(-) commit 8d588db517826acd87cb9ee6a795c641f97c6a3e Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 28 11:44:52 2009 -0300 Updated NEWS. NEWS | 7 +++++++ 1 file changed, 7 insertions(+) commit 39f8ff1539f94eae24c1ba22a9618f35ab120ddc Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 28 11:40:34 2009 -0300 Renamed SharedData header file to RefCounted. TelepathyQt4/RefCounted | 13 +++++++++++++ TelepathyQt4/SharedData | 13 ------------- 2 files changed, 13 insertions(+), 13 deletions(-) commit 80a129c9b3b449a7d22a777ba3e6f9d9fc917f06 Author: Simon McVittie Date: Thu Apr 23 16:11:18 2009 +0100 configure.ac: look for pygobject as well as dbus.mainloop.glib, since the tests need it Reviewed-by: Will Thompson configure.ac | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit c2a6955daf081bf654f5751feb1a90e9ee9aca40 Author: Simon McVittie Date: Wed Apr 22 19:00:34 2009 +0100 Start 0.1.4 development configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit fa061c4653e05a2ba80260ecc08946ece4c03442 Author: Simon McVittie Date: Wed Apr 22 18:56:43 2009 +0100 Prepare release 0.1.3 NEWS | 2 +- configure.ac | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) commit de84f9a93aa7e481ea72e43b11e60f74b0923821 Author: Simon McVittie Date: Wed Apr 22 18:55:12 2009 +0100 Fix bugs URL now we have a real component on fd.o configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit df8d0812be700bf128d0ea0ee7c682b2480e8a2d Author: Simon McVittie Date: Wed Apr 22 18:54:55 2009 +0100 doxygen: fix out-of-tree build (distcheck) Makefile.am | 2 +- doxygen.cfg.in | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) commit 2671610bc2ef934aee1a3ab01108bcae8ebec8a8 Author: Simon McVittie Date: Wed Apr 22 17:23:43 2009 +0100 Install TelepathyQt4Farsight.pc as well as TelepathyQt4.pc Reviewed-by: Andre Moreira Magalhaes (andrunko) TelepathyQt4/Makefile.am | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) commit 000aa4921870a1997b789431b98fa2af2ef23516 Author: Simon McVittie Date: Wed Apr 22 16:57:56 2009 +0100 Update NEWS NEWS | 56 ++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 46 insertions(+), 10 deletions(-) commit a73de48d09e15c663a8f953d259cb683f4302073 Author: Simon McVittie Date: Wed Apr 22 16:53:46 2009 +0100 Move TelepathyQt4Farsight.pc to TelepathyQt4/, correct dependencies and add -uninstalled versions The -uninstalled versions are to be able to use an uninstalled version for development, like in telepathy-glib: http://smcv.pseudorandom.co.uk/2008/09/pc-uninstalled/ Moving the TpQt4Fs .pc file to the parent directory means you only have to put one directory in PKG_CONFIG_PATH. TelepathyQt4/Farsight/TelepathyQt4Farsight.pc.in | 11 ----------- TelepathyQt4/TelepathyQt4-uninstalled.pc.in | 11 +++++++++++ .../TelepathyQt4Farsight-uninstalled.pc.in | 11 +++++++++++ TelepathyQt4/TelepathyQt4Farsight.pc.in | 11 +++++++++++ configure.ac | 4 +++- 5 files changed, 36 insertions(+), 12 deletions(-) commit f816485188647f187a269f5ca4ac4412fd034358 Merge: 4921474 340b64c Author: Simon McVittie Date: Wed Apr 22 15:28:05 2009 +0100 Merge commit 'andrunko/media-new' Signed-off-by: Simon McVittie commit 340b64c3e88bb3b93762b65de72a970132c4f457 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Apr 22 11:24:42 2009 -0300 call example: Use TelepathyQt4Farsight. examples/call/Makefile.am | 1 + examples/call/farsight-channel.cpp | 44 ++---------------------------------- 2 files changed, 3 insertions(+), 42 deletions(-) commit 4921474450f1b2f4f2bb28fbc9849889eac33e0a Merge: 6c2ff1c 8595146 Author: Simon McVittie Date: Wed Apr 22 15:21:26 2009 +0100 Merge branch '21336-group-messages' Reviewed-by: Andre Moreira Magalhaes (andrunko) commit 6c2ff1cc3c08ccc61c84f1212a3abbd62397b77a Merge: b1b60cc 3216a0e Author: Simon McVittie Date: Wed Apr 22 15:21:15 2009 +0100 Merge branch '21337-has-been-online' Reviewed-by: Andre Moreira Magalhaes (andrunko) commit b1b60cccecd1af959baec50a405ba25104c4bcf6 Merge: 1efc057 119dbfe Author: Simon McVittie Date: Wed Apr 22 15:20:46 2009 +0100 Merge branch 'spec' Reviewed-by: Andre Moreira Magalhaes (andrunko) commit 8595146626a123ceb4d8f27b3d110b57c0a81674 Author: Simon McVittie Date: Wed Apr 22 13:35:14 2009 +0100 Tp::Channel: add accessors for MessageAccept etc. and improve docs TelepathyQt4/channel.cpp | 142 ++++++++++++++++++++++++++++++++++++++++++++-- TelepathyQt4/channel.h | 6 ++ 2 files changed, 143 insertions(+), 5 deletions(-) commit 3216a0e88479b5fcf6a9d721aeccf31c0d88d5c3 Author: Simon McVittie Date: Wed Apr 22 13:34:33 2009 +0100 Tp::Account: fix debug message for ConnectsAutomatically TelepathyQt4/account.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit ce6fad07acfb319a92737715b0343d1545da5876 Author: Simon McVittie Date: Wed Apr 22 13:34:16 2009 +0100 Tp::Account: implement hasBeenOnline() TelepathyQt4/account.cpp | 30 ++++++++++++++++++++++++++++++ TelepathyQt4/account.h | 3 +++ 2 files changed, 33 insertions(+) commit 119dbfe791ae26b6426cbb58de558213fa72763b Author: Simon McVittie Date: Wed Apr 22 12:59:20 2009 +0100 spec: update to telepathy-spec 0.17.23 spec/Account.xml | 22 +- spec/Account_Manager.xml | 4 +- spec/Channel.xml | 6 +- spec/Channel_Dispatch_Operation.xml | 154 +++++-- spec/Channel_Dispatcher.xml | 93 ++-- ...Channel_Dispatcher_Interface_Operation_List.xml | 17 +- spec/Channel_Future.xml | 2 +- spec/Channel_Handler.xml | 15 +- spec/Channel_Interface_Call_State.xml | 17 +- spec/Channel_Interface_Group.xml | 87 +++- spec/Channel_Interface_Hold.xml | 4 +- spec/Channel_Interface_Media_Signalling.xml | 54 ++- spec/Channel_Interface_Media_Signalling_Future.xml | 125 ++--- spec/Channel_Interface_Messages.xml | 7 +- spec/Channel_Interface_Password.xml | 6 +- spec/Channel_Interface_Tube.xml | 41 +- spec/Channel_Request.xml | 42 +- spec/Channel_Type_Contact_Search.xml | 482 ++++++++++++++++---- spec/Channel_Type_DBus_Tube.xml | 12 +- spec/Channel_Type_File_Transfer.xml | 20 +- spec/Channel_Type_Room_List.xml | 8 +- spec/Channel_Type_Stream_Tube.xml | 12 +- spec/Channel_Type_Streamed_Media.xml | 179 ++++++-- spec/Channel_Type_Streamed_Media_Future.xml | 27 +- spec/Channel_Type_Text.xml | 13 +- spec/Channel_Type_Tubes.xml | 57 +-- spec/Client.xml | 4 +- spec/Client_Approver.xml | 140 ++++-- spec/Client_Handler.xml | 169 +++---- spec/Client_Interface_Requests.xml | 173 +++++++ spec/Client_Observer.xml | 133 ++++-- spec/Connection.xml | 63 ++- spec/Connection_Interface_Avatars.xml | 130 +++++- spec/Connection_Interface_Contact_Info.xml | 97 ++-- spec/Connection_Interface_Presence.xml | 195 ++------ spec/Connection_Interface_Requests.xml | 12 + spec/Connection_Interface_Simple_Presence.xml | 138 +++++- spec/Connection_Manager.xml | 2 +- spec/Media_Session_Handler.xml | 25 +- spec/Media_Stream_Handler.xml | 146 +++++- spec/Properties_Interface.xml | 2 +- spec/all.xml | 204 ++++++--- spec/errors.xml | 21 +- spec/generic-types.xml | 80 +++- 44 files changed, 2303 insertions(+), 937 deletions(-) commit 1efc057da97d8934fa86b32bef89f8aa478ce959 Merge: ac184ec f00aa0f Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 21 14:17:04 2009 -0300 Merge branch 'media-new' Reviewed-by: Simon McVittie (smcv) commit f00aa0f547a613124a7ae5179b3690f00afb5225 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 21 14:09:38 2009 -0300 StreamedMediaChannel: Improved handlerStreamingRequired docs. TelepathyQt4/streamed-media-channel.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) commit ac184ec1434791bfeff7a8647314cf0082fc8945 Merge: 88b1621 df182d1 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 21 14:14:50 2009 -0300 Merge branch 'trivia' Reviewed-by: Simon McVittie (smcv) commit 3b00c6c0a39fd663383819828701e568219acd0e Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 21 14:06:13 2009 -0300 TelepathyQt4Farsight: Use StremedMediaChannel::handlerStreamingRequired to check if streaming is required. TelepathyQt4/Farsight/channel.cpp | 5 +++++ 1 file changed, 5 insertions(+) commit ff67b2ef31dd9c61603b0f1267250646cc2c0b1d Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 21 14:01:58 2009 -0300 StreamedMediaChannel: Added handlerStreamingRequired method. Added StreamedMediaChannel::handlerStreamingRequired method that indicates whether media handler streaming is required for this channel. TelepathyQt4/streamed-media-channel.cpp | 16 ++++++++++++++++ TelepathyQt4/streamed-media-channel.h | 2 ++ 2 files changed, 18 insertions(+) commit 3050ab0eb8c156f87c4a8ae088f8d8a555a09154 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 21 13:48:10 2009 -0300 TelepathyQt4Farsight: Renamed tfChannelCreate to createFarsightChannel. TelepathyQt4/Farsight/channel.cpp | 2 +- TelepathyQt4/Farsight/channel.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 6d1d198337911259fbeb5c6cc8b47ace87f826cd Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 21 13:37:20 2009 -0300 Added TelepathyQt4Farsight tiny library. The library is a convenience library to create a Telepathy Farsight Channel given a TelepathyQt4 StreamedMediaChannel. TelepathyQt4/Farsight/Channel | 13 ++++ TelepathyQt4/Farsight/Makefile.am | 33 +++++++++ TelepathyQt4/Farsight/TelepathyQt4Farsight.pc.in | 11 +++ TelepathyQt4/Farsight/channel.cpp | 81 ++++++++++++++++++++++ TelepathyQt4/Farsight/channel.h | 40 +++++++++++ TelepathyQt4/Makefile.am | 5 ++ configure.ac | 4 +- examples/Makefile.am | 3 +- 8 files changed, 188 insertions(+), 2 deletions(-) commit df182d1624b41b36a9abe1bee2bfc0dce4ffab8c Author: Andre Moreira Magalhaes (andrunko) Date: Sat Apr 18 19:15:12 2009 -0300 manager-file: Fixed build with some gcc versions. TelepathyQt4/manager-file.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) commit 88b1621545e43f5afac9779aeaa5bdd559248eda Merge: bea7e51 2451227 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 14 09:59:32 2009 -0300 Merge branch 'trivia' Reviewed-by: Simon McVittie (smcv) commit 24512277e87832c66478350b72fbe374b97c1d8e Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 14 02:38:13 2009 -0300 ReadyObject: Make destructor virtual as we have virtual methods. TelepathyQt4/ready-object.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit bea7e514ae864e6f6a2392498b18d984bf03bc25 Merge: c144ba5 509affa Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 13 16:42:07 2009 -0300 Merge branch 'namespace' Reviewed-by: Simon McVittie (smcv) commit c144ba56c55624e4afa0728e66c9e8d20ebf83c7 Merge: c91b628 a9c24d6 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 13 16:41:58 2009 -0300 Merge branch 'docs' Reviewed-by: Simon McVittie (smcv) commit c91b628d0ae5f774118d39041ef0c70c62f2d3fa Merge: 20b2897 520118b Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 13 16:41:40 2009 -0300 Merge branch 'shared' Reviewed-by: Simon McVittie (smcv) Reviewed-by: Jonathon Jongsma (jonner) commit 509affa3ee5d8eef8a7fb421f2d2e69ff3fd512a Author: Andre Moreira Magalhaes (andrunko) Date: Wed Apr 8 03:09:14 2009 -0300 Removed header-compile-test.cpp TelepathyQt4/Makefile.am | 3 +-- TelepathyQt4/header-compile-test.cpp | 18 ------------------ 2 files changed, 1 insertion(+), 20 deletions(-) commit cf51f16647248df78236e6610f41053a71c42882 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Apr 8 02:48:52 2009 -0300 Renamed Telepathy namespace to Tp. TelepathyQt4/Makefile.am | 24 +- TelepathyQt4/Prototype/Account.cpp | 10 +- TelepathyQt4/Prototype/Account.h | 4 +- TelepathyQt4/Prototype/AccountManager.cpp | 18 +- TelepathyQt4/Prototype/AvatarManager.cpp | 18 +- TelepathyQt4/Prototype/AvatarManager.h | 6 +- TelepathyQt4/Prototype/CapabilitiesManager.cpp | 48 +-- TelepathyQt4/Prototype/CapabilitiesManager.h | 18 +- TelepathyQt4/Prototype/ChatChannel.cpp | 28 +- TelepathyQt4/Prototype/ChatChannel.h | 4 +- TelepathyQt4/Prototype/Connection.cpp | 54 ++-- TelepathyQt4/Prototype/Connection.h | 24 +- TelepathyQt4/Prototype/ConnectionFacade.cpp | 28 +- TelepathyQt4/Prototype/ConnectionFacade.h | 14 +- TelepathyQt4/Prototype/Contact.cpp | 18 +- TelepathyQt4/Prototype/Contact.h | 12 +- TelepathyQt4/Prototype/ContactManager.cpp | 206 ++++++------ TelepathyQt4/Prototype/ContactManager.h | 48 +-- TelepathyQt4/Prototype/Makefile.am | 2 +- TelepathyQt4/Prototype/PresenceManager.cpp | 112 +++---- TelepathyQt4/Prototype/PresenceManager.h | 20 +- TelepathyQt4/Prototype/StreamedMediaChannel.cpp | 96 +++--- TelepathyQt4/Prototype/StreamedMediaChannel.h | 26 +- TelepathyQt4/abstract-interface.cpp | 10 +- TelepathyQt4/abstract-interface.h | 6 +- TelepathyQt4/account-manager.cpp | 14 +- TelepathyQt4/account-manager.h | 4 +- TelepathyQt4/account.cpp | 66 ++-- TelepathyQt4/account.h | 36 +-- TelepathyQt4/async-model.dox | 12 +- TelepathyQt4/channel.cpp | 136 ++++---- TelepathyQt4/channel.h | 34 +- TelepathyQt4/connection-internal.h | 6 +- TelepathyQt4/connection-manager-internal.h | 4 +- TelepathyQt4/connection-manager.cpp | 12 +- TelepathyQt4/connection-manager.h | 8 +- TelepathyQt4/connection.cpp | 28 +- TelepathyQt4/connection.h | 16 +- TelepathyQt4/constants.h | 6 +- TelepathyQt4/contact-manager.cpp | 68 ++-- TelepathyQt4/contact-manager.h | 40 +-- TelepathyQt4/contact.cpp | 4 +- TelepathyQt4/contact.h | 10 +- TelepathyQt4/dbus-proxy.cpp | 10 +- TelepathyQt4/dbus-proxy.h | 6 +- TelepathyQt4/debug-internal.h | 4 +- TelepathyQt4/debug.cpp | 4 +- TelepathyQt4/debug.h | 5 +- TelepathyQt4/feature.cpp | 4 +- TelepathyQt4/feature.h | 4 +- TelepathyQt4/file-transfer.cpp | 4 +- TelepathyQt4/file-transfer.h | 4 +- TelepathyQt4/key-file.cpp | 4 +- TelepathyQt4/key-file.h | 2 +- TelepathyQt4/manager-file.cpp | 16 +- TelepathyQt4/manager-file.h | 2 +- TelepathyQt4/message.cpp | 4 +- TelepathyQt4/message.h | 4 +- TelepathyQt4/optional-interface-factory.cpp | 4 +- TelepathyQt4/optional-interface-factory.h | 4 +- TelepathyQt4/pending-account.cpp | 4 +- TelepathyQt4/pending-account.h | 4 +- TelepathyQt4/pending-channel.cpp | 6 +- TelepathyQt4/pending-channel.h | 4 +- TelepathyQt4/pending-connection.cpp | 4 +- TelepathyQt4/pending-connection.h | 4 +- TelepathyQt4/pending-contact-attributes.cpp | 4 +- TelepathyQt4/pending-contact-attributes.h | 4 +- TelepathyQt4/pending-contacts.cpp | 24 +- TelepathyQt4/pending-contacts.h | 12 +- TelepathyQt4/pending-handles.cpp | 4 +- TelepathyQt4/pending-handles.h | 4 +- TelepathyQt4/pending-operation.cpp | 4 +- TelepathyQt4/pending-operation.h | 6 +- TelepathyQt4/pending-ready.cpp | 4 +- TelepathyQt4/pending-ready.h | 4 +- TelepathyQt4/pending-string-list.cpp | 4 +- TelepathyQt4/pending-string-list.h | 4 +- TelepathyQt4/readiness-helper.cpp | 16 +- TelepathyQt4/readiness-helper.h | 8 +- TelepathyQt4/ready-object.cpp | 4 +- TelepathyQt4/ready-object.h | 4 +- TelepathyQt4/referenced-handles.cpp | 4 +- TelepathyQt4/referenced-handles.h | 4 +- TelepathyQt4/room-list.cpp | 4 +- TelepathyQt4/room-list.h | 4 +- TelepathyQt4/shared-ptr.h | 4 +- TelepathyQt4/simple-pending-operations.h | 4 +- TelepathyQt4/streamed-media-channel.cpp | 116 +++---- TelepathyQt4/streamed-media-channel.h | 54 ++-- TelepathyQt4/text-channel.cpp | 36 +-- TelepathyQt4/text-channel.h | 20 +- TelepathyQt4/types.h | 4 +- examples/accounts/account-item.cpp | 38 +-- examples/accounts/account-item.h | 18 +- examples/accounts/accounts-window.cpp | 8 +- examples/accounts/accounts-window.h | 6 +- examples/accounts/main.cpp | 6 +- examples/call/call-handler.cpp | 16 +- examples/call/call-handler.h | 14 +- examples/call/call-roster-widget.cpp | 2 +- examples/call/call-roster-widget.h | 4 +- examples/call/call-widget.cpp | 140 ++++----- examples/call/call-widget.h | 46 +-- examples/call/call-window.cpp | 44 +-- examples/call/call-window.h | 16 +- examples/call/farsight-channel.cpp | 6 +- examples/call/farsight-channel.h | 10 +- examples/call/main.cpp | 8 +- examples/call/video-widget.cpp | 4 +- examples/call/video-widget.h | 4 +- examples/extensions/Makefile.am | 6 +- examples/roster/main.cpp | 6 +- examples/roster/roster-item.cpp | 6 +- examples/roster/roster-item.h | 6 +- examples/roster/roster-widget.cpp | 18 +- examples/roster/roster-widget.h | 18 +- examples/roster/roster-window.cpp | 24 +- examples/roster/roster-window.h | 14 +- tests/dbus/account-basics.cpp | 56 ++-- tests/dbus/chan-basics.cpp | 52 +-- tests/dbus/chan-group.cpp | 80 ++--- tests/dbus/cm-basics.cpp | 12 +- tests/dbus/conn-basics.cpp | 22 +- tests/dbus/conn-requests.cpp | 40 +-- tests/dbus/conn-roster.cpp | 36 +-- tests/dbus/contacts.cpp | 88 +++--- tests/dbus/handles.cpp | 26 +- tests/dbus/stateful-proxy.cpp | 24 +- tests/dbus/streamed-media-chan.cpp | 384 +++++++++++------------ tests/dbus/text-chan.cpp | 78 ++--- tests/key-file.cpp | 2 +- tests/lib/test.cpp | 18 +- tests/lib/test.h | 6 +- tests/manager-file.cpp | 2 +- tests/pinocchio/cm-basics.cpp | 26 +- tests/pinocchio/conn-basics.cpp | 44 +-- tests/pinocchio/handles.cpp | 70 ++--- tests/pinocchio/lib.cpp | 4 +- tests/prototype/prototype.cpp | 124 ++++---- tests/prototype/prototype.h | 2 +- tools/libqt4codegen.py | 2 +- tools/qt4-client-gen.py | 22 +- 143 files changed, 1771 insertions(+), 1770 deletions(-) commit f0dc68019077608dd4e7f7fa77e7ba2c3d76896e Author: Andre Moreira Magalhaes (andrunko) Date: Wed Apr 8 02:00:47 2009 -0300 Renamed high-level classes namespace from Telepathy::Client to Telepathy. TelepathyQt4/PendingContactAttributes | 7 + TelepathyQt4/abstract-interface.cpp | 9 +- TelepathyQt4/abstract-interface.h | 5 +- TelepathyQt4/account-manager.cpp | 19 +-- TelepathyQt4/account-manager.h | 9 +- TelepathyQt4/account.cpp | 17 +- TelepathyQt4/account.h | 15 +- TelepathyQt4/channel.cpp | 29 ++-- TelepathyQt4/channel.h | 71 ++++---- TelepathyQt4/connection-internal.h | 5 +- TelepathyQt4/connection-manager-internal.h | 6 +- TelepathyQt4/connection-manager.cpp | 9 +- TelepathyQt4/connection-manager.h | 9 +- TelepathyQt4/connection.cpp | 39 ++--- TelepathyQt4/connection.h | 39 ++--- TelepathyQt4/constants.h | 6 +- TelepathyQt4/contact-manager.cpp | 45 +++-- TelepathyQt4/contact-manager.h | 35 ++-- TelepathyQt4/contact.cpp | 3 - TelepathyQt4/contact.h | 9 +- TelepathyQt4/dbus-proxy.cpp | 7 +- TelepathyQt4/dbus-proxy.h | 5 +- TelepathyQt4/debug.cpp | 2 +- TelepathyQt4/feature.cpp | 3 - TelepathyQt4/feature.h | 3 - TelepathyQt4/file-transfer.cpp | 3 - TelepathyQt4/file-transfer.h | 3 - TelepathyQt4/key-file.cpp | 2 +- TelepathyQt4/manager-file.cpp | 2 +- TelepathyQt4/message.cpp | 3 - TelepathyQt4/message.h | 4 +- TelepathyQt4/optional-interface-factory.cpp | 5 +- TelepathyQt4/optional-interface-factory.h | 5 +- TelepathyQt4/pending-account.cpp | 3 - TelepathyQt4/pending-account.h | 3 - TelepathyQt4/pending-channel.cpp | 3 - TelepathyQt4/pending-channel.h | 3 - TelepathyQt4/pending-connection.cpp | 3 - TelepathyQt4/pending-connection.h | 3 - TelepathyQt4/pending-contact-attributes.cpp | 3 - TelepathyQt4/pending-contact-attributes.h | 13 +- TelepathyQt4/pending-contacts.cpp | 23 ++- TelepathyQt4/pending-contacts.h | 11 +- TelepathyQt4/pending-handles.cpp | 3 - TelepathyQt4/pending-handles.h | 3 - TelepathyQt4/pending-operation.cpp | 5 - TelepathyQt4/pending-operation.h | 6 +- TelepathyQt4/pending-ready.cpp | 3 - TelepathyQt4/pending-ready.h | 3 - TelepathyQt4/pending-string-list.cpp | 3 - TelepathyQt4/pending-string-list.h | 3 - TelepathyQt4/properties.cpp | 4 +- TelepathyQt4/readiness-helper.cpp | 18 +- TelepathyQt4/readiness-helper.h | 7 +- TelepathyQt4/ready-object.cpp | 3 - TelepathyQt4/ready-object.h | 3 - TelepathyQt4/referenced-handles.cpp | 5 +- TelepathyQt4/referenced-handles.h | 6 +- TelepathyQt4/room-list.cpp | 3 - TelepathyQt4/room-list.h | 3 - TelepathyQt4/simple-pending-operations.h | 7 - TelepathyQt4/streamed-media-channel.cpp | 21 +-- TelepathyQt4/streamed-media-channel.h | 21 +-- TelepathyQt4/text-channel.cpp | 13 +- TelepathyQt4/text-channel.h | 11 +- TelepathyQt4/types.cpp | 3 +- TelepathyQt4/types.h | 3 - examples/accounts/account-item.cpp | 12 +- examples/accounts/account-item.h | 8 +- examples/accounts/accounts-window.cpp | 8 +- examples/accounts/accounts-window.h | 6 +- examples/call/call-handler.cpp | 14 +- examples/call/call-handler.h | 14 +- examples/call/call-roster-widget.cpp | 2 +- examples/call/call-roster-widget.h | 4 +- examples/call/call-widget.cpp | 46 +++--- examples/call/call-widget.h | 40 +++-- examples/call/call-window.cpp | 24 +-- examples/call/call-window.h | 14 +- examples/call/farsight-channel.cpp | 4 +- examples/call/farsight-channel.h | 8 +- examples/call/main.cpp | 2 +- examples/call/video-widget.cpp | 4 +- examples/call/video-widget.h | 2 - examples/extensions/Makefile.am | 4 +- examples/roster/roster-item.cpp | 6 +- examples/roster/roster-item.h | 6 +- examples/roster/roster-widget.cpp | 18 +- examples/roster/roster-widget.h | 18 +- examples/roster/roster-window.cpp | 24 +-- examples/roster/roster-window.h | 14 +- tests/dbus/account-basics.cpp | 46 +++--- tests/dbus/chan-basics.cpp | 46 +++--- tests/dbus/chan-group.cpp | 74 ++++----- tests/dbus/cm-basics.cpp | 12 +- tests/dbus/conn-basics.cpp | 16 +- tests/dbus/conn-requests.cpp | 34 ++-- tests/dbus/conn-roster.cpp | 36 ++-- tests/dbus/contacts.cpp | 54 +++--- tests/dbus/handles.cpp | 22 +-- tests/dbus/stateful-proxy.cpp | 20 +-- tests/dbus/streamed-media-chan.cpp | 238 +++++++++++++-------------- tests/dbus/text-chan.cpp | 52 +++--- tests/lib/test.cpp | 13 +- tests/lib/test.h | 7 +- tests/pinocchio/cm-basics.cpp | 26 +-- tests/pinocchio/conn-basics.cpp | 36 ++-- tests/pinocchio/handles.cpp | 37 +++-- tests/pinocchio/lib.cpp | 2 +- tools/qt4-client-gen.py | 22 +-- 110 files changed, 773 insertions(+), 983 deletions(-) commit 02988937b75b5b18ac3cd3cad03fddf140f618ca Author: Andre Moreira Magalhaes (andrunko) Date: Fri Apr 3 18:59:33 2009 -0300 Get rid of Client dir. Makefile.am | 2 +- NEWS | 2 +- TelepathyQt4/AbstractInterface | 13 + TelepathyQt4/Account | 13 + TelepathyQt4/AccountInterface | 13 + TelepathyQt4/AccountManager | 13 + TelepathyQt4/AccountManagerInterface | 13 + TelepathyQt4/Channel | 13 + TelepathyQt4/ChannelInterface | 13 + TelepathyQt4/ChannelInterfaceCallStateInterface | 13 + TelepathyQt4/ChannelInterfaceChatStateInterface | 13 + TelepathyQt4/ChannelInterfaceDTMFInterface | 13 + TelepathyQt4/ChannelInterfaceGroupInterface | 13 + TelepathyQt4/ChannelInterfaceHoldInterface | 13 + .../ChannelInterfaceMediaSignallingInterface | 13 + TelepathyQt4/ChannelInterfacePasswordInterface | 13 + TelepathyQt4/ChannelTypeContactListInterface | 13 + TelepathyQt4/ChannelTypeRoomListInterface | 13 + TelepathyQt4/ChannelTypeStreamedMediaInterface | 13 + TelepathyQt4/ChannelTypeTextInterface | 13 + TelepathyQt4/ChannelTypeTubesInterface | 13 + TelepathyQt4/Client/AbstractInterface | 13 - TelepathyQt4/Client/Account | 13 - TelepathyQt4/Client/AccountInterface | 13 - TelepathyQt4/Client/AccountManager | 13 - TelepathyQt4/Client/AccountManagerInterface | 13 - TelepathyQt4/Client/Channel | 13 - TelepathyQt4/Client/ChannelInterface | 13 - .../Client/ChannelInterfaceCallStateInterface | 13 - .../Client/ChannelInterfaceChatStateInterface | 13 - TelepathyQt4/Client/ChannelInterfaceDTMFInterface | 13 - TelepathyQt4/Client/ChannelInterfaceGroupInterface | 13 - TelepathyQt4/Client/ChannelInterfaceHoldInterface | 13 - .../ChannelInterfaceMediaSignallingInterface | 13 - .../Client/ChannelInterfacePasswordInterface | 13 - .../Client/ChannelTypeContactListInterface | 13 - TelepathyQt4/Client/ChannelTypeRoomListInterface | 13 - .../Client/ChannelTypeStreamedMediaInterface | 13 - TelepathyQt4/Client/ChannelTypeTextInterface | 13 - TelepathyQt4/Client/ChannelTypeTubesInterface | 13 - TelepathyQt4/Client/Connection | 13 - TelepathyQt4/Client/ConnectionInterface | 13 - .../Client/ConnectionInterfaceAliasingInterface | 13 - .../Client/ConnectionInterfaceAvatarsInterface | 13 - .../ConnectionInterfaceCapabilitiesInterface | 13 - .../Client/ConnectionInterfaceContactsInterface | 13 - .../Client/ConnectionInterfacePresenceInterface | 13 - .../Client/ConnectionInterfaceRequestsInterface | 13 - .../ConnectionInterfaceSimplePresenceInterface | 13 - TelepathyQt4/Client/ConnectionManager | 13 - TelepathyQt4/Client/ConnectionManagerInterface | 13 - TelepathyQt4/Client/Contact | 13 - TelepathyQt4/Client/ContactManager | 13 - TelepathyQt4/Client/DBus | 13 - TelepathyQt4/Client/DBusDaemonInterface | 13 - TelepathyQt4/Client/DBusProxy | 13 - TelepathyQt4/Client/Feature | 13 - TelepathyQt4/Client/FileTransfer | 13 - TelepathyQt4/Client/IntrospectableInterface | 13 - TelepathyQt4/Client/MediaSessionHandler | 13 - TelepathyQt4/Client/MediaSessionHandlerInterface | 13 - TelepathyQt4/Client/MediaStreamHandler | 13 - TelepathyQt4/Client/MediaStreamHandlerInterface | 13 - TelepathyQt4/Client/Message | 13 - TelepathyQt4/Client/OptionalInterfaceFactory | 13 - TelepathyQt4/Client/PeerInterface | 13 - TelepathyQt4/Client/PendingAccount | 13 - TelepathyQt4/Client/PendingChannel | 13 - TelepathyQt4/Client/PendingConnection | 13 - TelepathyQt4/Client/PendingContactAttributes | 6 - TelepathyQt4/Client/PendingContacts | 13 - TelepathyQt4/Client/PendingFailure | 13 - TelepathyQt4/Client/PendingHandles | 13 - TelepathyQt4/Client/PendingOperation | 13 - TelepathyQt4/Client/PendingReady | 13 - TelepathyQt4/Client/PendingStringList | 13 - TelepathyQt4/Client/PendingSuccess | 13 - TelepathyQt4/Client/PendingVoidMethodCall | 13 - TelepathyQt4/Client/Properties | 13 - TelepathyQt4/Client/PropertiesInterface | 13 - TelepathyQt4/Client/PropertiesInterfaceInterface | 13 - TelepathyQt4/Client/ReadinessHelper | 13 - TelepathyQt4/Client/ReadyObject | 13 - TelepathyQt4/Client/ReceivedMessage | 13 - TelepathyQt4/Client/ReferencedHandles | 12 - TelepathyQt4/Client/ReferencedHandlesIterator | 6 - TelepathyQt4/Client/RoomList | 13 - TelepathyQt4/Client/StatefulDBusProxy | 13 - TelepathyQt4/Client/StatelessDBusProxy | 13 - TelepathyQt4/Client/StreamedMediaChannel | 13 - TelepathyQt4/Client/TextChannel | 13 - TelepathyQt4/Client/Types | 13 - TelepathyQt4/Client/abstract-interface.cpp | 94 - TelepathyQt4/Client/abstract-interface.h | 67 - TelepathyQt4/Client/account-manager.cpp | 633 ------ TelepathyQt4/Client/account-manager.h | 120 - TelepathyQt4/Client/account.cpp | 1036 --------- TelepathyQt4/Client/account.h | 203 -- TelepathyQt4/Client/channel.cpp | 2296 -------------------- TelepathyQt4/Client/channel.h | 318 --- TelepathyQt4/Client/connection-internal.h | 51 - TelepathyQt4/Client/connection-manager-internal.h | 99 - TelepathyQt4/Client/connection-manager.cpp | 682 ------ TelepathyQt4/Client/connection-manager.h | 177 -- TelepathyQt4/Client/connection.cpp | 1456 ------------- TelepathyQt4/Client/connection.h | 224 -- TelepathyQt4/Client/contact-manager.cpp | 952 -------- TelepathyQt4/Client/contact-manager.h | 175 -- TelepathyQt4/Client/contact.cpp | 361 --- TelepathyQt4/Client/contact.h | 141 -- TelepathyQt4/Client/dbus-proxy.cpp | 355 --- TelepathyQt4/Client/dbus-proxy.h | 123 -- TelepathyQt4/Client/dbus.cpp | 25 - TelepathyQt4/Client/dbus.h | 53 - TelepathyQt4/Client/feature.cpp | 65 - TelepathyQt4/Client/feature.h | 72 - TelepathyQt4/Client/file-transfer.cpp | 95 - TelepathyQt4/Client/file-transfer.h | 59 - TelepathyQt4/Client/media-session-handler.cpp | 25 - TelepathyQt4/Client/media-session-handler.h | 49 - TelepathyQt4/Client/media-stream-handler.cpp | 25 - TelepathyQt4/Client/media-stream-handler.h | 49 - TelepathyQt4/Client/message.cpp | 572 ----- TelepathyQt4/Client/message.h | 126 -- TelepathyQt4/Client/optional-interface-factory.cpp | 85 - TelepathyQt4/Client/optional-interface-factory.h | 160 -- TelepathyQt4/Client/pending-account.cpp | 177 -- TelepathyQt4/Client/pending-account.h | 75 - TelepathyQt4/Client/pending-channel.cpp | 362 --- TelepathyQt4/Client/pending-channel.h | 88 - TelepathyQt4/Client/pending-connection.cpp | 200 -- TelepathyQt4/Client/pending-connection.h | 76 - TelepathyQt4/Client/pending-contact-attributes.cpp | 245 --- TelepathyQt4/Client/pending-contact-attributes.h | 80 - TelepathyQt4/Client/pending-contacts.cpp | 427 ---- TelepathyQt4/Client/pending-contacts.h | 102 - TelepathyQt4/Client/pending-handles.cpp | 499 ----- TelepathyQt4/Client/pending-handles.h | 96 - TelepathyQt4/Client/pending-operation.cpp | 193 -- TelepathyQt4/Client/pending-operation.h | 181 -- TelepathyQt4/Client/pending-ready.cpp | 107 - TelepathyQt4/Client/pending-ready.h | 64 - TelepathyQt4/Client/pending-string-list.cpp | 69 - TelepathyQt4/Client/pending-string-list.h | 62 - TelepathyQt4/Client/properties.cpp | 25 - TelepathyQt4/Client/properties.h | 50 - TelepathyQt4/Client/readiness-helper.cpp | 540 ----- TelepathyQt4/Client/readiness-helper.h | 138 -- TelepathyQt4/Client/ready-object.cpp | 145 -- TelepathyQt4/Client/ready-object.h | 69 - TelepathyQt4/Client/referenced-handles.cpp | 303 --- TelepathyQt4/Client/referenced-handles.h | 294 --- TelepathyQt4/Client/room-list.cpp | 94 - TelepathyQt4/Client/room-list.h | 59 - TelepathyQt4/Client/simple-pending-operations.h | 118 - TelepathyQt4/Client/streamed-media-channel.cpp | 864 -------- TelepathyQt4/Client/streamed-media-channel.h | 194 -- TelepathyQt4/Client/text-channel.cpp | 1008 --------- TelepathyQt4/Client/text-channel.h | 150 -- TelepathyQt4/Client/types.h | 61 - TelepathyQt4/Connection | 13 + TelepathyQt4/ConnectionInterface | 13 + TelepathyQt4/ConnectionInterfaceAliasingInterface | 13 + TelepathyQt4/ConnectionInterfaceAvatarsInterface | 13 + .../ConnectionInterfaceCapabilitiesInterface | 13 + TelepathyQt4/ConnectionInterfaceContactsInterface | 13 + TelepathyQt4/ConnectionInterfacePresenceInterface | 13 + TelepathyQt4/ConnectionInterfaceRequestsInterface | 13 + .../ConnectionInterfaceSimplePresenceInterface | 13 + TelepathyQt4/ConnectionManager | 13 + TelepathyQt4/ConnectionManagerInterface | 13 + TelepathyQt4/Contact | 13 + TelepathyQt4/ContactManager | 13 + TelepathyQt4/DBus | 13 + TelepathyQt4/DBusDaemonInterface | 13 + TelepathyQt4/DBusProxy | 13 + TelepathyQt4/Feature | 13 + TelepathyQt4/FileTransfer | 13 + TelepathyQt4/IntrospectableInterface | 13 + TelepathyQt4/Makefile.am | 342 ++- TelepathyQt4/MediaSessionHandler | 13 + TelepathyQt4/MediaSessionHandlerInterface | 13 + TelepathyQt4/MediaStreamHandler | 13 + TelepathyQt4/MediaStreamHandlerInterface | 13 + TelepathyQt4/Message | 13 + TelepathyQt4/OptionalInterfaceFactory | 13 + TelepathyQt4/PeerInterface | 13 + TelepathyQt4/PendingAccount | 13 + TelepathyQt4/PendingChannel | 13 + TelepathyQt4/PendingConnection | 13 + TelepathyQt4/PendingContactAttributes | 6 + TelepathyQt4/PendingContacts | 13 + TelepathyQt4/PendingFailure | 13 + TelepathyQt4/PendingHandles | 13 + TelepathyQt4/PendingOperation | 13 + TelepathyQt4/PendingReady | 13 + TelepathyQt4/PendingStringList | 13 + TelepathyQt4/PendingSuccess | 13 + TelepathyQt4/PendingVoidMethodCall | 13 + TelepathyQt4/Properties | 13 + TelepathyQt4/PropertiesInterface | 13 + TelepathyQt4/PropertiesInterfaceInterface | 13 + TelepathyQt4/Prototype/Account.cpp | 4 +- TelepathyQt4/Prototype/AccountManager.cpp | 4 +- TelepathyQt4/Prototype/AvatarManager.cpp | 2 +- TelepathyQt4/Prototype/CapabilitiesManager.cpp | 2 +- TelepathyQt4/Prototype/ChatChannel.cpp | 4 +- TelepathyQt4/Prototype/Connection.cpp | 4 +- TelepathyQt4/Prototype/ConnectionFacade.cpp | 4 +- TelepathyQt4/Prototype/Contact.cpp | 2 +- TelepathyQt4/Prototype/Contact.h | 2 +- TelepathyQt4/Prototype/ContactManager.cpp | 2 +- TelepathyQt4/Prototype/PresenceManager.cpp | 2 +- TelepathyQt4/Prototype/StreamedMediaChannel.cpp | 4 +- TelepathyQt4/Prototype/StreamedMediaChannel.h | 4 +- TelepathyQt4/ReadinessHelper | 13 + TelepathyQt4/ReadyObject | 13 + TelepathyQt4/ReceivedMessage | 13 + TelepathyQt4/ReferencedHandles | 12 + TelepathyQt4/ReferencedHandlesIterator | 6 + TelepathyQt4/RoomList | 13 + TelepathyQt4/StatefulDBusProxy | 13 + TelepathyQt4/StatelessDBusProxy | 13 + TelepathyQt4/StreamedMediaChannel | 13 + TelepathyQt4/TextChannel | 13 + TelepathyQt4/abstract-interface.cpp | 94 + TelepathyQt4/abstract-interface.h | 67 + TelepathyQt4/account-manager.cpp | 633 ++++++ TelepathyQt4/account-manager.h | 120 + TelepathyQt4/account.cpp | 1036 +++++++++ TelepathyQt4/account.h | 203 ++ TelepathyQt4/channel.cpp | 2296 ++++++++++++++++++++ TelepathyQt4/channel.h | 318 +++ TelepathyQt4/connection-internal.h | 51 + TelepathyQt4/connection-manager-internal.h | 99 + TelepathyQt4/connection-manager.cpp | 682 ++++++ TelepathyQt4/connection-manager.h | 177 ++ TelepathyQt4/connection.cpp | 1456 +++++++++++++ TelepathyQt4/connection.h | 224 ++ TelepathyQt4/contact-manager.cpp | 952 ++++++++ TelepathyQt4/contact-manager.h | 175 ++ TelepathyQt4/contact.cpp | 361 +++ TelepathyQt4/contact.h | 141 ++ TelepathyQt4/dbus-proxy.cpp | 355 +++ TelepathyQt4/dbus-proxy.h | 123 ++ TelepathyQt4/dbus.cpp | 25 + TelepathyQt4/dbus.h | 53 + TelepathyQt4/feature.cpp | 65 + TelepathyQt4/feature.h | 72 + TelepathyQt4/file-transfer.cpp | 95 + TelepathyQt4/file-transfer.h | 59 + TelepathyQt4/header-compile-test.cpp | 22 +- TelepathyQt4/media-session-handler.cpp | 25 + TelepathyQt4/media-session-handler.h | 49 + TelepathyQt4/media-stream-handler.cpp | 25 + TelepathyQt4/media-stream-handler.h | 49 + TelepathyQt4/message.cpp | 572 +++++ TelepathyQt4/message.h | 126 ++ TelepathyQt4/optional-interface-factory.cpp | 85 + TelepathyQt4/optional-interface-factory.h | 160 ++ TelepathyQt4/pending-account.cpp | 177 ++ TelepathyQt4/pending-account.h | 75 + TelepathyQt4/pending-channel.cpp | 362 +++ TelepathyQt4/pending-channel.h | 88 + TelepathyQt4/pending-connection.cpp | 200 ++ TelepathyQt4/pending-connection.h | 76 + TelepathyQt4/pending-contact-attributes.cpp | 245 +++ TelepathyQt4/pending-contact-attributes.h | 80 + TelepathyQt4/pending-contacts.cpp | 427 ++++ TelepathyQt4/pending-contacts.h | 102 + TelepathyQt4/pending-handles.cpp | 499 +++++ TelepathyQt4/pending-handles.h | 96 + TelepathyQt4/pending-operation.cpp | 193 ++ TelepathyQt4/pending-operation.h | 181 ++ TelepathyQt4/pending-ready.cpp | 107 + TelepathyQt4/pending-ready.h | 64 + TelepathyQt4/pending-string-list.cpp | 69 + TelepathyQt4/pending-string-list.h | 62 + TelepathyQt4/properties.cpp | 25 + TelepathyQt4/properties.h | 50 + TelepathyQt4/readiness-helper.cpp | 540 +++++ TelepathyQt4/readiness-helper.h | 138 ++ TelepathyQt4/ready-object.cpp | 145 ++ TelepathyQt4/ready-object.h | 69 + TelepathyQt4/referenced-handles.cpp | 303 +++ TelepathyQt4/referenced-handles.h | 294 +++ TelepathyQt4/room-list.cpp | 94 + TelepathyQt4/room-list.h | 59 + TelepathyQt4/simple-pending-operations.h | 118 + TelepathyQt4/streamed-media-channel.cpp | 864 ++++++++ TelepathyQt4/streamed-media-channel.h | 194 ++ TelepathyQt4/text-channel.cpp | 1008 +++++++++ TelepathyQt4/text-channel.h | 150 ++ TelepathyQt4/types.h | 32 + examples/accounts/account-item.cpp | 4 +- examples/accounts/account-item.h | 4 +- examples/accounts/accounts-window.cpp | 8 +- examples/accounts/accounts-window.h | 2 +- examples/call/call-handler.cpp | 16 +- examples/call/call-handler.h | 4 +- examples/call/call-roster-widget.cpp | 12 +- examples/call/call-roster-widget.h | 2 +- examples/call/call-widget.cpp | 14 +- examples/call/call-widget.h | 6 +- examples/call/call-window.cpp | 12 +- examples/call/call-window.h | 2 +- examples/call/farsight-channel.cpp | 4 +- examples/call/farsight-channel.h | 2 +- examples/extensions/Makefile.am | 2 +- examples/roster/roster-item.h | 2 +- examples/roster/roster-widget.cpp | 12 +- examples/roster/roster-widget.h | 4 +- examples/roster/roster-window.cpp | 8 +- examples/roster/roster-window.h | 2 +- tests/dbus/account-basics.cpp | 12 +- tests/dbus/chan-basics.cpp | 12 +- tests/dbus/chan-group.cpp | 16 +- tests/dbus/cm-basics.cpp | 6 +- tests/dbus/conn-basics.cpp | 6 +- tests/dbus/conn-requests.cpp | 12 +- tests/dbus/conn-roster.cpp | 12 +- tests/dbus/contacts.cpp | 14 +- tests/dbus/handles.cpp | 10 +- tests/dbus/stateful-proxy.cpp | 4 +- tests/dbus/streamed-media-chan.cpp | 12 +- tests/dbus/text-chan.cpp | 10 +- tests/lib/test.cpp | 4 +- tests/lib/test.h | 2 +- tests/pinocchio/cm-basics.cpp | 8 +- tests/pinocchio/conn-basics.cpp | 8 +- tests/pinocchio/handles.cpp | 10 +- tests/pinocchio/lib.cpp | 2 +- tests/pinocchio/lib.h | 2 +- tests/prototype/prototype.cpp | 8 +- tools/qt4-client-gen.py | 4 +- 335 files changed, 19453 insertions(+), 19501 deletions(-) commit a9c24d629d66ad636355f7061ecba5cb4165d45f Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 2 03:03:56 2009 -0300 AccountManager: Improved docs. TelepathyQt4/Client/account-manager.cpp | 231 +++++++++++++++++++++++++------ 1 file changed, 186 insertions(+), 45 deletions(-) commit edf75ef2c3c54e20c8eef6108065444bec0f16a9 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 2 00:55:03 2009 -0300 .gitignore: Added doxygen.log to the ignore list. .gitignore | 1 + 1 file changed, 1 insertion(+) commit 196a910468245e78d1d9ae5827df20600696de47 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 2 00:52:51 2009 -0300 doxygen.cfg.in: Added QtHelp support. doxygen.cfg.in | 6 ++++++ 1 file changed, 6 insertions(+) commit 381f50cd98318f805e5f4e9dd0fee13d43b4b66c Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 2 00:51:52 2009 -0300 doxygen.cfg.in: Added custom footer file. Makefile.am | 1 + doxygen-footer.html | 7 +++++++ doxygen.cfg.in | 2 +- 3 files changed, 9 insertions(+), 1 deletion(-) commit cbd063256a676cb100b9cf263e4296093f539e19 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 2 00:49:55 2009 -0300 doxygen.cfg.in: Added custom header file. Makefile.am | 1 + doxygen-header.html | 30 ++++++++++++++++++++++++++++++ doxygen.cfg.in | 2 +- 3 files changed, 32 insertions(+), 1 deletion(-) commit 5679fa060df4c881cc8e9b1cb28ce50f8005f1ba Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 2 00:47:55 2009 -0300 doxygen.cfg.in: Added custom css stylesheet. Makefile.am | 1 + doxygen.cfg.in | 2 +- doxygen.css | 429 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 431 insertions(+), 1 deletion(-) commit bee0a32ac0cda5dd331c680bb693997c8266e7eb Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 2 03:30:17 2009 -0300 main.dox: Added Graphical Class Hierarchy. TelepathyQt4/main.dox | 1 + 1 file changed, 1 insertion(+) commit 78cd21e86312d8d14a8d3b70c0624ab6c040ee5a Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 2 02:20:51 2009 -0300 shared-ptr.dox: Added document explaining the Telepathy-Qt4 shared pointer usage. TelepathyQt4/Makefile.am | 1 + TelepathyQt4/main.dox | 1 + TelepathyQt4/shared-ptr.dox | 57 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+) commit bb4329b8eafabad5b030ec7ffef3daa4d0a9411d Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 2 00:45:01 2009 -0300 async-model.dox: Added document explaining how the Telepathy-Qt4 async model works. TelepathyQt4/Makefile.am | 1 + TelepathyQt4/async-model.dox | 58 ++++++++++++++++++++++++++++++++++++++++++ TelepathyQt4/main.dox | 3 +++ 3 files changed, 62 insertions(+) commit 769f6e9c38f1e3c60b494175931d1f527e4442f3 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 2 00:42:27 2009 -0300 examples.dox: Added examples page on documentation. TelepathyQt4/Makefile.am | 1 + TelepathyQt4/examples.dox | 199 +++++++++++++++++++++++++++++++++++++++++++++ TelepathyQt4/main.dox | 1 + doxygen.cfg.in | 2 +- 4 files changed, 202 insertions(+), 1 deletion(-) commit 47f0179e7781b26550cffd05a522d4606877b591 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 2 00:38:33 2009 -0300 main.dox: Added main.dox with some introductory documentation. TelepathyQt4/Makefile.am | 1 + TelepathyQt4/main.dox | 129 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 130 insertions(+) commit f84dc53cc5e6cc6dbd336f1798798ebc01de4404 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 2 00:34:41 2009 -0300 doxygen.cfg.in: Generate doc for dox files. doxygen.cfg.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6c1f07b044e6bc7375f0136b062a68d62891a61a Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 2 00:33:44 2009 -0300 doxygen.cfg.in: Do not generate docs for TelepathyQt4/Prototype. doxygen.cfg.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 9fbe24a6814a39f8fee0460cfe1ba6619ebee812 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Apr 2 00:30:57 2009 -0300 doxygen.cfg.in: Some tweaks. doxygen.cfg.in | 51 ++++++++++++++++++++++----------------------------- 1 file changed, 22 insertions(+), 29 deletions(-) commit 520118bcda1f8d8878736219481e03fe2dde9397 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 13 15:14:14 2009 -0300 shared-ptr: Added cast helper methods. TelepathyQt4/shared-ptr.h | 18 ++++++++++++++++++ tests/dbus/streamed-media-chan.cpp | 3 +-- 2 files changed, 19 insertions(+), 2 deletions(-) commit 18475eeb95e9fd0645f2a7ba9ff20e476fdc9081 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 13 13:33:15 2009 -0300 shared-ptr: Changed SharedPtr(T*) to not be a templated constructor. TelepathyQt4/shared-ptr.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 1a8a35e15adeeed08fa71fb2fcdf2200ce866908 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 7 11:06:23 2009 -0300 shared-ptr: Renamed SharedData to RefCounted. TelepathyQt4/Client/account-manager.h | 2 +- TelepathyQt4/Client/account.h | 2 +- TelepathyQt4/Client/channel.h | 2 +- TelepathyQt4/Client/connection-manager.h | 2 +- TelepathyQt4/Client/connection.h | 2 +- TelepathyQt4/Client/streamed-media-channel.h | 2 +- TelepathyQt4/shared-ptr.h | 14 +++++++------- 7 files changed, 13 insertions(+), 13 deletions(-) commit f5536b5585036b158b0e9585fd1b16cc9e5501db Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 7 11:01:37 2009 -0300 shared-ptr: Use swap idiom. Rationale (Jonathon Jongsma): [Copy constructor and operator=()] You might consider using the swap() idiom like Glib::RefPtr uses, it's quite elegant and allows greater code reuse: http://svn.gnome.org/viewvc/glibmm/trunk/glib/glibmm/refptr.h?view=markup#l228 TelepathyQt4/shared-ptr.h | 68 ++++++++++++++++----------------------------- 1 file changed, 24 insertions(+), 44 deletions(-) commit a69c2665f88838d3cf10fa807513e7c6da5ef42b Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 7 10:10:23 2009 -0300 shared-ptr: Added WeakPtr::toStrongRef that returns a SharedPtr from a WeakPtr. Rationale (Jonathon Jongsma): You also might consider something like the boost::weak_ptr::lock() API that allows you to easily create a SharedPtr from a WeakPtr. Added "lock" idea but using Qt idiom, as used in QWeakPointer. TelepathyQt4/shared-ptr.h | 2 ++ 1 file changed, 2 insertions(+) commit 64fb5a1a50df5e41f19cb495d4fad046bff2dacf Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 7 10:06:35 2009 -0300 shared-ptr: Make SharedPtr(WeakPtr) constructor explicit. Rationale (Jonathon Jongsma): [inline SharedPtr(const WeakPtr &o)] It's probably best to make this explicit as well so that converting from a weak pointer to a shared pointer is only done when it's intentional. You also might consider something like the boost::weak_ptr::lock() API that allows you to easily create a SharedPtr from a WeakPtr. TelepathyQt4/Client/contact-manager.cpp | 2 +- TelepathyQt4/Client/pending-account.cpp | 2 +- TelepathyQt4/Client/pending-channel.cpp | 13 +++++++------ TelepathyQt4/Client/pending-connection.cpp | 2 +- TelepathyQt4/Client/referenced-handles.cpp | 2 +- TelepathyQt4/Client/streamed-media-channel.cpp | 2 +- TelepathyQt4/shared-ptr.h | 21 +-------------------- 7 files changed, 13 insertions(+), 31 deletions(-) commit 9ee65826f5427204045b95ee2ac57f655b050910 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 7 09:32:16 2009 -0300 shared-ptr: removed template inline SharedPtr(const SharedPtr &o). Rationale (Jonathon Jongsma): [template inline SharedPtr(const SharedPtr &o)] I don't think this constructor is a good idea. I assume this is designed so that you can easily convert from a derived class pointer to a base class pointer as you would with raw pointers, but I think it's much better to make the programmer state explicitly what they want to do. And in any case, dynamic_cast is probably the more appropriate cast in this situation. See also boost::static_pointer_cast/dynamic_pointer_cast/etc or Glib::RefPtr::cast_static/cast_dynamic/etc. TelepathyQt4/Client/pending-channel.cpp | 20 ++++++++++++-------- TelepathyQt4/shared-ptr.h | 2 -- tests/dbus/streamed-media-chan.cpp | 3 ++- tests/dbus/text-chan.cpp | 2 +- 4 files changed, 15 insertions(+), 12 deletions(-) commit 59b465a360bc85e2665eab962fc1d64b622112c4 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 7 09:34:44 2009 -0300 shared-ptr: Make SharedData destructor virtual. TelepathyQt4/shared-ptr.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 82b4e574c5a99ddf30d123480d2286f0fa18d521 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Apr 7 09:46:29 2009 -0300 shared-ptr: Changed SharedPtr(T*) to be a templated constructor. Rationale (Jonathon Jongsma): [explicit inline SharedPtr(T *d) : d(d) { if (d) { d->ref(); } }] boost::shared_ptr uses a templated constructor for this case (e.g. template SharedPtr(Y *d) ...) which allows it to somehow remember the actual pointer type passed so that if it was a different type that is convertible to T*, it will call delete with its original type and thus will not leak even if Y does not have a virtual destructor). Granted, they probably use some black magic to accomplish this, but it might be worth considering. TelepathyQt4/Client/account.cpp | 1 - TelepathyQt4/shared-ptr.h | 3 ++- tests/dbus/account-basics.cpp | 2 +- tests/dbus/chan-basics.cpp | 2 +- tests/dbus/chan-group.cpp | 2 +- tests/dbus/cm-basics.cpp | 2 +- tests/dbus/conn-basics.cpp | 2 +- tests/dbus/conn-requests.cpp | 2 +- tests/dbus/conn-roster.cpp | 2 +- tests/dbus/contacts.cpp | 2 +- tests/dbus/handles.cpp | 2 +- tests/dbus/streamed-media-chan.cpp | 2 +- tests/dbus/text-chan.cpp | 4 +--- 13 files changed, 13 insertions(+), 15 deletions(-) commit 698461b1c417821199d6b52560a45dc367f0f732 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 6 14:36:10 2009 -0300 shared-ptr: Make SharedPtr(T*) constructor explicit. TelepathyQt4/Client/account-manager.cpp | 2 +- TelepathyQt4/Client/channel.cpp | 2 +- TelepathyQt4/Client/connection-manager.cpp | 3 ++- TelepathyQt4/Client/connection.cpp | 33 +++++++++++++++--------- TelepathyQt4/Client/message.cpp | 1 - TelepathyQt4/Client/streamed-media-channel.cpp | 10 ++++--- TelepathyQt4/Client/text-channel.cpp | 8 +++--- TelepathyQt4/shared-ptr.h | 2 +- tests/dbus/text-chan.cpp | 2 +- 9 files changed, 37 insertions(+), 26 deletions(-) commit 2462e349ad36271d8fecf96403ea1516a12bf4d1 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 6 14:33:01 2009 -0300 shared-ptr: Make sure we WeakPtr deletes wd on operator=(SharedPtr). TelepathyQt4/shared-ptr.h | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) commit 06c9ca6d89d16b4d5fc91a049e9e01523249f5ab Author: Andre Moreira Magalhaes (andrunko) Date: Mon Apr 6 14:03:34 2009 -0300 shared-ptr: Fixed memory leak. TelepathyQt4/shared-ptr.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 844efa70d5cda0ba9854986f15e8e1ee3e898036 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 31 23:27:52 2009 -0300 ReadinessHelper: Be more defensive regarding PendingOperations finish/destroy. TelepathyQt4/Client/connection.cpp | 2 +- TelepathyQt4/Client/pending-ready.cpp | 4 ++-- TelepathyQt4/Client/pending-ready.h | 3 ++- TelepathyQt4/Client/readiness-helper.cpp | 38 +++++++++++++++++++++++++----- TelepathyQt4/Client/readiness-helper.h | 3 +++ 5 files changed, 40 insertions(+), 10 deletions(-) commit 6111e1baa45b6c369e918519d0ed346e4e24eb66 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 31 21:25:01 2009 -0300 Updated NEWS. NEWS | 7 +++++++ 1 file changed, 7 insertions(+) commit 2ad654096cc2b20bb3fff6efadbe3cecc2d387a5 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 31 20:33:40 2009 -0300 call example: End call if unable to create any stream for outgoing calls. examples/call/call-widget.cpp | 5 +++++ 1 file changed, 5 insertions(+) commit 16eb39e7fbddf2b0de1621dedda9d0c4837cdba3 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 31 20:29:16 2009 -0300 Improved call/roster examples. examples/call/call-handler.cpp | 4 ++-- examples/call/call-window.cpp | 4 ++-- examples/roster/roster-widget.cpp | 22 +++++++++++++++++----- examples/roster/roster-widget.h | 8 ++++---- examples/roster/roster-window.cpp | 4 ++-- 5 files changed, 27 insertions(+), 15 deletions(-) commit ac1ea87c072c3b392d4d64c810bc199aa13308ca Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 31 19:52:52 2009 -0300 Account: Removed manager method and use QDBusConnection/busName to create account. Rationale: Before this change, to create a Account, the user would pass the AccountManagerPtr as a param. This way, it's desirable that manager always return the proper manager used on Account creation, but this was not true in all cases, as the account manager could be destroyed while the account was still alive. Example: AccountPtr acc; { AccountManagerPtr am = AccountManager::create(); ... acc = Account::create(am, path); } // am is detroyed - nobody referencing it, Account HAD a weakref to it Q_ASSERT(acc->manager()); // fail As the AccountManager is supposed to be a singleton, there is no need for this method, and to avoid misbehaviour let's remove it. TelepathyQt4/Client/account-manager.cpp | 2 +- TelepathyQt4/Client/account.cpp | 51 +++++++++++++++++++------------ TelepathyQt4/Client/account.h | 11 ++++--- TelepathyQt4/Client/pending-account.cpp | 4 ++- examples/accounts/account-item.cpp | 3 +- 5 files changed, 44 insertions(+), 27 deletions(-) commit 346d3ef3cc515a295c441e36f054fc832d857a98 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 31 20:04:23 2009 -0300 streamed-media-chan test: Proper create channel. tests/dbus/streamed-media-chan.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5639f8aaeb0ee0c820355a406620bff2634bfcf6 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 31 20:04:06 2009 -0300 text-chan test: Proper create channel. tests/dbus/text-chan.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 988c9dc3d862ed1dcd46f7f182c1d7d3d4375115 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 31 19:34:53 2009 -0300 PendingConnection: Hold a weak ref to connection manager. TelepathyQt4/Client/pending-connection.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit b719b155b6130ea55cf658b75b301c6dfb145f15 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 31 19:34:40 2009 -0300 PendingChannel: Hold a weak ref to connection. TelepathyQt4/Client/pending-channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 4287a16fbd4f84c37b48fe899688b4d0f8cf3cdf Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 31 19:34:25 2009 -0300 PendingAccount: Hold a weak ref to account manager. TelepathyQt4/Client/pending-account.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 2dbc7b1fdb58669c66eef6b8297a1f2ff3180215 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 31 19:25:55 2009 -0300 MediaStream: Return StreamedMediaChannelPtr on channel() method. TelepathyQt4/Client/streamed-media-channel.cpp | 44 +++++++++++++----------- TelepathyQt4/Client/streamed-media-channel.h | 12 +++---- tests/dbus/streamed-media-chan.cpp | 2 +- 3 files changed, 28 insertions(+), 30 deletions(-) commit 4746dc026afb11a501bb51583db1341b8ed9fbb9 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 31 19:25:30 2009 -0300 PendingHandles: Return ConnectionPtr on connection() method. TelepathyQt4/Client/pending-handles.cpp | 18 +++++++++--------- TelepathyQt4/Client/pending-handles.h | 8 ++++---- tests/pinocchio/handles.cpp | 2 +- 3 files changed, 14 insertions(+), 14 deletions(-) commit d875386a1b5c24001717a173073ccc4e883e803c Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 31 19:11:50 2009 -0300 PendingContactAttributes: Return ConnectionPtr on connection() method. TelepathyQt4/Client/pending-contact-attributes.cpp | 19 +++++++++++-------- TelepathyQt4/Client/pending-contact-attributes.h | 9 +++++---- 2 files changed, 16 insertions(+), 12 deletions(-) commit c8ba085bd9094c4651f4385400e97ad2879b15bf Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 31 19:07:32 2009 -0300 ReferencedHandles: Return ConnectionPtr on connection() method. TelepathyQt4/Client/pending-contacts.cpp | 4 +-- TelepathyQt4/Client/referenced-handles.cpp | 54 ++++++++++++++++++---------- TelepathyQt4/Client/referenced-handles.h | 14 +++----- tests/pinocchio/handles.cpp | 4 +-- 4 files changed, 43 insertions(+), 33 deletions(-) commit 3e9b5c943fd7cbd1b891f47787ee6cb0f62c6083 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 31 18:53:48 2009 -0300 ContactManager: Return ConnectionPtr on connection() method. TelepathyQt4/Client/connection.cpp | 9 ++++++++- TelepathyQt4/Client/contact-manager.cpp | 26 +++++++++++++++++--------- TelepathyQt4/Client/contact-manager.h | 4 ++-- TelepathyQt4/Client/pending-contacts.cpp | 12 ++++++------ examples/call/call-handler.cpp | 2 +- tests/dbus/contacts.cpp | 2 +- 6 files changed, 35 insertions(+), 20 deletions(-) commit 1b9c9f0eb8f5b97aa5866d4021ed5394b16dfe5c Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 31 18:28:12 2009 -0300 RoomListChannel: Make constructor protected and added public create method that returns a SharedPtr. TelepathyQt4/Client/file-transfer.cpp | 13 +++++++++---- TelepathyQt4/Client/file-transfer.h | 9 +++++++-- TelepathyQt4/Client/pending-channel.cpp | 5 ++--- 3 files changed, 18 insertions(+), 9 deletions(-) commit d4cd1ba47833a01b0dbcf7d80b73310c1d9e92b7 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 31 18:16:01 2009 -0300 RoomList: Make constructor protected and added public create method that returns a SharedPtr. TelepathyQt4/Client/pending-channel.cpp | 5 ++--- TelepathyQt4/Client/room-list.cpp | 13 +++++++++---- TelepathyQt4/Client/room-list.h | 9 +++++++-- 3 files changed, 18 insertions(+), 9 deletions(-) commit 945757ed6483cf2f70a643e6e0ce8089988745a1 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 31 16:48:59 2009 -0300 TextChannel: Make constructor protected and added public create method that returns a SharedPtr. TelepathyQt4/Client/message.cpp | 12 ++++++------ TelepathyQt4/Client/message.h | 6 ++++-- TelepathyQt4/Client/pending-channel.cpp | 5 ++--- TelepathyQt4/Client/text-channel.cpp | 13 +++++++++---- TelepathyQt4/Client/text-channel.h | 9 +++++++-- tests/dbus/text-chan.cpp | 20 ++++++++------------ 6 files changed, 36 insertions(+), 29 deletions(-) commit db39d7f221a2444489cecc1c6d18dfb55c98da54 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 31 16:18:07 2009 -0300 StreamedMediaChannel: Make constructor protected and added public create method that returns a SharedPtr. TelepathyQt4/Client/pending-channel.cpp | 5 ++--- TelepathyQt4/Client/streamed-media-channel.cpp | 13 +++++++++---- TelepathyQt4/Client/streamed-media-channel.h | 9 +++++++-- examples/call/call-handler.cpp | 7 +++---- examples/call/call-handler.h | 4 ++-- examples/call/call-widget.cpp | 16 ++++++++-------- examples/call/call-widget.h | 6 +++--- examples/call/call-window.cpp | 2 +- examples/call/farsight-channel.cpp | 9 +++++---- examples/call/farsight-channel.h | 5 +++-- tests/dbus/streamed-media-chan.cpp | 4 ++-- 11 files changed, 45 insertions(+), 35 deletions(-) commit e47aea4edc6a54d412af7499d14618223dabfc46 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 31 16:06:31 2009 -0300 Channel: Make constructor protected and added public create method that returns a SharedPtr. TelepathyQt4/Client/channel.cpp | 29 ++++++++++++-------- TelepathyQt4/Client/channel.h | 12 ++++---- TelepathyQt4/Client/file-transfer.cpp | 4 ++- TelepathyQt4/Client/pending-channel.cpp | 35 ++++++++++++++---------- TelepathyQt4/Client/pending-channel.h | 6 ++-- TelepathyQt4/Client/room-list.cpp | 4 ++- TelepathyQt4/Client/streamed-media-channel.cpp | 2 +- TelepathyQt4/Client/text-channel.cpp | 2 +- examples/call/call-handler.cpp | 2 +- examples/call/farsight-channel.cpp | 2 +- 10 files changed, 57 insertions(+), 41 deletions(-) commit f6110e7a00889a1eca4caa48c7dbac6a021f9e93 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 31 15:40:10 2009 -0300 Connection: Make constructor protected and added public create method that returns a SharedPtr. TelepathyQt4/Client/account.cpp | 4 +-- TelepathyQt4/Client/connection.cpp | 24 ++++++++++----- TelepathyQt4/Client/connection.h | 16 +++++----- TelepathyQt4/Client/pending-connection.cpp | 17 +++++------ TelepathyQt4/Client/pending-connection.h | 4 +-- tests/dbus/chan-basics.cpp | 15 ++++------ tests/dbus/chan-group.cpp | 15 ++++------ tests/dbus/conn-basics.cpp | 15 ++++------ tests/dbus/conn-requests.cpp | 11 +++---- tests/dbus/conn-roster.cpp | 11 +++---- tests/dbus/contacts.cpp | 29 ++++++++---------- tests/dbus/handles.cpp | 15 ++++------ tests/dbus/streamed-media-chan.cpp | 15 ++++------ tests/dbus/text-chan.cpp | 15 ++++------ tests/pinocchio/conn-basics.cpp | 44 +++++++++++++--------------- tests/pinocchio/handles.cpp | 33 ++++++++------------- 16 files changed, 126 insertions(+), 157 deletions(-) commit 0987b53fdfa4cce8ae46381b4935c8838f16300c Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 31 15:12:01 2009 -0300 ConnectionManager: Make constructor protected and added public create method that returns a SharedPtr. TelepathyQt4/Client/account.cpp | 8 ++++---- TelepathyQt4/Client/connection-manager.cpp | 22 +++++++++++++++------- TelepathyQt4/Client/connection-manager.h | 13 ++++++++----- examples/call/call-window.cpp | 4 ++-- examples/call/call-window.h | 2 +- examples/roster/roster-window.cpp | 2 +- examples/roster/roster-window.h | 2 +- tests/dbus/cm-basics.cpp | 9 ++------- tests/pinocchio/cm-basics.cpp | 22 ++-------------------- 9 files changed, 36 insertions(+), 48 deletions(-) commit f1cdaa0f9f5c1a4d4e6c1eb2c9ae5620a0786a85 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 31 12:57:47 2009 -0300 Account: Make constructor protected and added public create method that returns a SharedPtr. TelepathyQt4/Client/account-manager.cpp | 3 +-- TelepathyQt4/Client/account.cpp | 20 ++++++++++++-------- TelepathyQt4/Client/account.h | 8 +++++--- TelepathyQt4/Client/pending-account.cpp | 15 +++++++-------- TelepathyQt4/Client/pending-account.h | 4 ++-- examples/accounts/account-item.cpp | 31 ++++++++++++++++--------------- examples/accounts/account-item.h | 2 +- 7 files changed, 44 insertions(+), 39 deletions(-) commit f4e311765b7aa9def094f64792e93f05aa165989 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 31 12:06:16 2009 -0300 AccountManager: Make constructor protected and added public create method that returns a SharedPtr. TelepathyQt4/Client/account-manager.cpp | 22 ++++++++++++++-------- TelepathyQt4/Client/account-manager.h | 7 +++++-- examples/accounts/account-item.cpp | 4 ++-- examples/accounts/account-item.h | 3 ++- examples/accounts/accounts-window.cpp | 4 ++-- examples/accounts/accounts-window.h | 5 +++-- tests/dbus/account-basics.cpp | 9 ++------- 7 files changed, 30 insertions(+), 24 deletions(-) commit d9ca75293336496315c1c70591b1657e9ca695ae Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 31 11:30:47 2009 -0300 Added Client/Types and moved all XXXPtr typedefs to it. Proper typedef classes using SharedPtr and make them inherit SharedData. TelepathyQt4/Client/Types | 13 ++++++ TelepathyQt4/Client/account-manager.h | 8 ++-- TelepathyQt4/Client/account.h | 8 ++-- TelepathyQt4/Client/channel.h | 8 ++-- TelepathyQt4/Client/connection-manager.h | 8 ++-- TelepathyQt4/Client/connection.h | 8 ++-- TelepathyQt4/Client/file-transfer.h | 2 - TelepathyQt4/Client/room-list.h | 2 - TelepathyQt4/Client/streamed-media-channel.h | 8 ++-- TelepathyQt4/Client/text-channel.h | 2 - TelepathyQt4/Client/types.h | 61 ++++++++++++++++++++++++++ TelepathyQt4/Makefile.am | 4 +- 12 files changed, 95 insertions(+), 37 deletions(-) commit bdde9e7082e7bf6080a8f0b1ffb5e0b032a85cc5 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 31 16:48:23 2009 -0300 Added fancy headers for WeakPtr/SharedData. TelepathyQt4/Makefile.am | 2 ++ TelepathyQt4/SharedData | 13 +++++++++++++ TelepathyQt4/WeakPtr | 13 +++++++++++++ 3 files changed, 28 insertions(+) commit 16b3b6b622c75ef5a81e6f71547c279dca81061a Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 31 16:46:55 2009 -0300 WeakPtr: Fixed operator=(const SharedPtr &). TelepathyQt4/shared-ptr.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 6ffc27f901eaad73afe7f6cce3364ee205827e5c Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 30 17:05:48 2009 -0300 Added SharedData/SharedPtr/WeakPtr classes. TelepathyQt4/Makefile.am | 2 + TelepathyQt4/SharedPtr | 13 +++ TelepathyQt4/shared-ptr.h | 229 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 244 insertions(+) commit 20b28976ecb1c01a28da4b730e087f911ab1bf1e Merge: 0a79329 01eda14 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 25 14:35:26 2009 -0300 Merge branch 'bug20583' Reviewed-by: Simon McVittie (smcv) commit 0a7932966d10b2e303c44c6d34126ebcb721f919 Merge: 55f9fc5 187dfb2 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 25 14:34:49 2009 -0300 Merge branch 'trivia' Reviewed-by: Simon McVittie (smcv) commit 01eda14f37fccb833115bcdc482a6f921918b215 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 25 14:31:18 2009 -0300 ContactManager: Do not claim to support contact features if the connection Contacts interface is not present. TelepathyQt4/Client/contact-manager.cpp | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) commit 5ef8c8c85526271f419d7782bca1fdf652dc9a4f Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 25 14:28:05 2009 -0300 ContactManager: Removed isSupported method (not needed anymore). We now fallback to creating contacts even if Connection contacts interface is not supported, so ContactManager is always supported. TelepathyQt4/Client/contact-manager.cpp | 16 ---------------- TelepathyQt4/Client/contact-manager.h | 1 - tests/dbus/contacts.cpp | 1 - 3 files changed, 18 deletions(-) commit cc219fe00799829d16ad0008bccc7aa63630ac52 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 25 14:21:43 2009 -0300 Updated NEWS. NEWS | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit 4a78d91a77dad0e3b7f49a544e8e9b41e5b2b53f Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 25 14:20:04 2009 -0300 contacts test: Added fallback test for connection without Contacts interface. tests/dbus/contacts.cpp | 49 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) commit f3a17f35eef02cc29273154886d9a44cea1995b4 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 25 14:19:30 2009 -0300 Fixed bug 20583: Contact objects don't work without the Contacts interface. TelepathyQt4/Client/connection.cpp | 2 +- TelepathyQt4/Client/connection.h | 1 + TelepathyQt4/Client/contact-manager.cpp | 45 +++++------- TelepathyQt4/Client/pending-contacts.cpp | 110 +++++++++++++++++++++++++++++- TelepathyQt4/Client/pending-contacts.h | 8 ++- TelepathyQt4/Client/referenced-handles.h | 1 + 6 files changed, 133 insertions(+), 34 deletions(-) commit f947a2ae8f00990988a1d04153d5c41825e537b6 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 25 14:17:20 2009 -0300 PendingHandles: Added fallback for HoldHandles. Fallback to one to one handle when HoldHandles fail. TelepathyQt4/Client/pending-handles.cpp | 96 ++++++++++++++++++++++++++++++- TelepathyQt4/Client/pending-handles.h | 3 + 2 files changed, 97 insertions(+), 2 deletions(-) commit 55f9fc5e7e8691e792a1fcabdd6432b95353a427 Merge: a69b38c 753ce9f Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 25 11:45:15 2009 -0300 Merge branch 'bug20584' Conflicts: NEWS Reviewed-by: Simon McVittie (smcv) commit 753ce9f739fd93d59959d2caa2f475f54b3a29db Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 25 11:40:20 2009 -0300 Updated NEWS. NEWS | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) commit 187dfb2d5017c7759b1a6cc6fab8b6bd4dbf78e9 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 25 11:32:40 2009 -0300 streamed-media-chan: Do not exit loop on onGroupMembersChanged slot (just cache the result). tests/dbus/streamed-media-chan.cpp | 40 ++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 22 deletions(-) commit d45ea73e07004e02d7edf3a9cb66850d35183d3d Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 25 11:09:22 2009 -0300 streamed-media-chan test: Fixed "no answer test". tests/dbus/streamed-media-chan.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) commit acd0fb2a49aeb5a3004134146079b4dcd403df46 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 25 11:02:13 2009 -0300 Bump tp-glib dependency to 0.7.28. Fixed connection and tests now that PendingHandles do not finish with error when the error is non-critical (fixed on 0.7.28). TelepathyQt4/Client/connection.cpp | 12 ++++++------ configure.ac | 2 +- tests/dbus/contacts.cpp | 26 +++++++++++--------------- 3 files changed, 18 insertions(+), 22 deletions(-) commit e9b97b2e9f413e7df41f4a9e937a03039cd0cd17 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 24 15:31:06 2009 -0300 PendingHandles: Split request/hold handles slots. TelepathyQt4/Client/pending-handles.cpp | 126 +++++++++++++++---------------- TelepathyQt4/Client/pending-handles.h | 3 +- 2 files changed, 65 insertions(+), 64 deletions(-) commit ca41b48db2b6cf466e4a778fd842b57889182cc0 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 24 15:19:52 2009 -0300 PendingHandles: Finish with non error if the error is not fatal. TelepathyQt4/Client/pending-contacts.cpp | 2 -- TelepathyQt4/Client/pending-handles.cpp | 50 ++++++++++++++++++++---------- tests/dbus/contacts.cpp | 22 +++++++++---- 3 files changed, 49 insertions(+), 25 deletions(-) commit 9be367eb0af748769c0f1402c8b045f5b44351ab Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 24 14:51:47 2009 -0300 PendingHandles: Only fallback (RequestHandles) if error is InvalidHandle, NotAvailable or InvalidArgument. TelepathyQt4/Client/pending-handles.cpp | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) commit ea4009dfdaf7608b64b6fc6acd6eeda339bc0bff Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 24 14:47:00 2009 -0300 PendingHandles: Renamed Private::requests to requestsFinished. TelepathyQt4/Client/pending-handles.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 7e51f2b740ed67dfce561057f52145a6db45f72d Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 24 14:44:23 2009 -0300 PendingHandles: Make slots names more clear. TelepathyQt4/Client/pending-handles.cpp | 10 +++++----- TelepathyQt4/Client/pending-handles.h | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) commit cc4c40ff3251db689e4db76b091c12c45b94884e Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 24 14:08:31 2009 -0300 PendingHandles: Warn when trying to access handles without finished. TelepathyQt4/Client/pending-handles.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) commit 621fd0ff63a3f88d81e62b4e8f366ded53cf2cff Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 24 14:07:06 2009 -0300 PendingHandles: Access private members directly, instead of calling methods. TelepathyQt4/Client/pending-handles.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) commit 1e1cd76011f2186c656eed55108413f53a1748dd Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 24 14:06:50 2009 -0300 PendingHandles: Fixed coding style. TelepathyQt4/Client/pending-handles.cpp | 23 ++++++++++++++--------- TelepathyQt4/Client/pending-handles.h | 10 +++++----- 2 files changed, 19 insertions(+), 14 deletions(-) commit 795f708c2e00ba758e6d0dff61d765034f74a024 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 24 14:00:05 2009 -0300 PendingHandles: Moved docs to cpp. TelepathyQt4/Client/pending-handles.cpp | 77 +++++++++++++++++++++++++ TelepathyQt4/Client/pending-handles.h | 96 ++----------------------------- 2 files changed, 81 insertions(+), 92 deletions(-) commit ac5578f24d64f20d05543f5fc9cd361f0c7232ea Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 24 13:54:46 2009 -0300 [Bug 20584] New: Contact object creation doesn't survive bad IDs or handles Fixed bug 20584. TelepathyQt4/Client/pending-contacts.cpp | 27 +++++++++++++++++++++++++++ TelepathyQt4/Client/pending-contacts.h | 3 +++ tests/dbus/contacts.cpp | 7 ++++++- 3 files changed, 36 insertions(+), 1 deletion(-) commit 0767587ecaa3613afe57412ce26203996f01cb83 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 24 13:36:28 2009 -0300 PendingHandles: Do not fail if one of the requested identifiers is valid. Added validIds, invalidIds methods. TelepathyQt4/Client/connection.cpp | 29 +----- TelepathyQt4/Client/pending-handles.cpp | 155 +++++++++++++++++++++++++++++-- TelepathyQt4/Client/pending-handles.h | 8 +- tests/dbus/contacts.cpp | 4 +- 4 files changed, 156 insertions(+), 40 deletions(-) commit a69b38c63922237f8beed64677215e1dcf298823 Author: Simon McVittie Date: Mon Mar 23 18:55:39 2009 +0000 Start 0.1.3 development NEWS | 5 +++++ configure.ac | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) commit 7d42e13c275c6151bf15a4bce375e1ccde08c5db Author: Simon McVittie Date: Mon Mar 23 17:09:36 2009 +0000 Prepare release 0.1.2 NEWS | 4 +++- configure.ac | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) commit e4c77a1c7b87399e7b89e37de663f61d8118a113 Author: Simon McVittie Date: Mon Mar 23 17:09:21 2009 +0000 Consistently call bus names "busName" instead of "serviceName" D-Bus upstream generally discourage the use of the term "service name" - officially, things like ":1.42" are /unique bus names/, things like "org.freedesktop.Telepathy.AccountManager" are /well-known bus names/, and /bus names/ are either of those. This is the terminology used in telepathy-spec and in DBusProxy, too. NEWS | 2 +- TelepathyQt4/Client/account.cpp | 4 +-- TelepathyQt4/Client/connection.cpp | 32 ++++++++++++---------- TelepathyQt4/Client/connection.h | 4 +-- TelepathyQt4/Client/pending-connection.cpp | 41 ++++++++++++++-------------- TelepathyQt4/Client/pending-connection.h | 2 +- tools/qt4-client-gen.py | 16 +++++------ 7 files changed, 52 insertions(+), 49 deletions(-) commit 590c9879ed7adc68c49819d967f16c018a22c6e0 Author: Simon McVittie Date: Mon Mar 23 16:19:30 2009 +0000 Clean up and simplify header search paths Ensuring that $(top_srcdir) and $(top_builddir) are first on the -I path is always a good idea - it means we always use this library's headers, and not those of an installed copy of telepathy-qt4 that might be on the -I path (due to sharing a directory with the installed telepathy-glib). AM_CPPFLAGS is passed to every compilation, so we can use it for both C and C++. It's also exactly what we want when running moc. It also seems a good idea to make it explicit that we're linking QtCore. TelepathyQt4/Makefile.am | 19 ++++++++++--------- TelepathyQt4/Prototype/Makefile.am | 16 ++++++++-------- examples/accounts/Makefile.am | 10 +++++++--- examples/call/Makefile.am | 13 ++++++++----- examples/extensions/Makefile.am | 7 +++++-- examples/roster/Makefile.am | 11 ++++++++--- tests/Makefile.am | 13 +++++-------- tests/dbus/Makefile.am | 15 ++++++--------- tests/lib/Makefile.am | 15 ++++++--------- tests/pinocchio/Makefile.am | 13 +++++-------- tests/prototype/Makefile.am | 14 +++++--------- 11 files changed, 73 insertions(+), 73 deletions(-) commit 2c953406b14c0b4d950f6d45eeb50055e0121088 Author: Simon McVittie Date: Mon Mar 23 15:53:47 2009 +0000 Fix inclusion order in call example, and be more explicit $(TP_QT4_CFLAGS) has to come first, despite the usual rule that higher-level libraries come later, so that if telepathy-glib, telepathy-farsight and telepathy-qt4 are all installed in /usr/include/telepathy-1.0 (this is currently true), the copy of telepathy-qt4 currently being built is used rather than the system copy. Including telepathy-glib's CFLAGS is probably unnecessary, but we should do it anyway - explicit is better than implicit. Likewise for the libraries. examples/call/Makefile.am | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit 7306cabd883424732ecf69a033d257131122a8c8 Author: Simon McVittie Date: Mon Mar 23 15:33:03 2009 +0000 call example: fix copyright notices Copyright (call) 2009 looks like overzealous use of sed... examples/call/call-handler.cpp | 3 ++- examples/call/call-handler.h | 3 ++- examples/call/call-roster-widget.cpp | 3 ++- examples/call/call-roster-widget.h | 3 ++- examples/call/call-widget.cpp | 3 ++- examples/call/call-widget.h | 3 ++- examples/call/call-window.cpp | 3 ++- examples/call/call-window.h | 3 ++- examples/call/farsight-channel.cpp | 4 ++-- examples/call/farsight-channel.h | 4 ++-- examples/call/video-widget.cpp | 3 ++- examples/call/video-widget.h | 3 ++- 12 files changed, 24 insertions(+), 14 deletions(-) commit 8d48515d57d8b02ccb0e63ba459003fb701e3dbb Author: Simon McVittie Date: Mon Mar 23 15:26:14 2009 +0000 .gitignore: Ignore with-session-bus droppings .gitignore | 2 ++ 1 file changed, 2 insertions(+) commit 159c770d7d405cee70fc652fd7b3c8de6f2ef45a Author: Simon McVittie Date: Mon Mar 23 15:25:23 2009 +0000 NEWS, README: update for 0.1.2 NEWS | 36 ++++++++++++++++++++++++++++++++++++ README | 5 +++++ 2 files changed, 41 insertions(+) commit fe0a18c64705547f2c299b2a069282d85439f214 Merge: 7b0c980 f92dac4 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 23 10:23:51 2009 -0300 Merge branch 'streamed-media' Reviewed-by: Simon McVittie (smcv) commit f92dac4a0723c5a5a1b31265d9b8a26832536661 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 23 10:19:01 2009 -0300 streamed-media-chan test: Added more checks after channel is invalidated. tests/dbus/streamed-media-chan.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) commit 7cacccd8ffe5781dbd58f8b9d44ff9fb2c380279 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 20 16:11:18 2009 -0300 streamed-media-chan test: Added "busy", "no answer", "terminate" test simulations. tests/dbus/streamed-media-chan.cpp | 238 ++++++++++++++++++++++++++++++++++-- 1 file changed, 225 insertions(+), 13 deletions(-) commit 010bf711e6ffc606f834f5e5b5cb29d7db5e1ea9 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 20 11:00:00 2009 -0300 configure.ac: Merge gst/tp-farsight checks. configure.ac | 16 ++-------------- examples/call/Makefile.am | 2 -- 2 files changed, 2 insertions(+), 16 deletions(-) commit 3f8536433c2f4ad37db0494db7b22bf210f75720 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 20 10:57:01 2009 -0300 streamed-media-chan test: Fixed (there is no guarantee the stream direction will be bidirectional at this point). tests/dbus/streamed-media-chan.cpp | 1 - 1 file changed, 1 deletion(-) commit 30358c9a9d781ccba5952ff55c138add024e1c08 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 20 10:56:27 2009 -0300 streamed-media-chan test: Link to libtp-glib-tests directly. tests/dbus/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 8b3e861cf3d4fdb77057926df940bb1f4cf5ac59 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 20 10:54:34 2009 -0300 StreamedMediaChannel: Do not try to retrieve the stream contact if the handle is 0. TelepathyQt4/Client/streamed-media-channel.cpp | 5 +++++ 1 file changed, 5 insertions(+) commit eb52ef8bec4e4ab98e6d179b236c7f45bc49d7e2 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 20 10:51:45 2009 -0300 StreamedMediaChannel: Update stream state/direction when stream is retrieved even if it already exists. TelepathyQt4/Client/streamed-media-channel.cpp | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) commit 295e582d13979efcabfc8b196f15232d56fc95fd Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 20 10:39:15 2009 -0300 StreamedMediaChannel: Do not assert if the CM is bug. TelepathyQt4/Client/streamed-media-channel.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) commit 65b15c2f6336ed998d5a07734f27046450c606b5 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 20 10:35:30 2009 -0300 ReadyObject/ReadinessHelper: Removed DBusProxy from constructors and receive just a QObject. If the QObject is a DBusProxy, properly handle proxy invalidation. TelepathyQt4/Client/readiness-helper.cpp | 19 +++++++++--------- TelepathyQt4/Client/readiness-helper.h | 3 +-- TelepathyQt4/Client/ready-object.cpp | 25 +++++------------------- TelepathyQt4/Client/ready-object.h | 5 +---- TelepathyQt4/Client/streamed-media-channel.cpp | 2 +- 5 files changed, 17 insertions(+), 37 deletions(-) commit 3e47a2c41887205de36cbf4012f8fd4a7bb2f576 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 19 22:39:36 2009 -0300 Added automated tests for StreamedMediaChannel. TelepathyQt4/Client/connection.cpp | 1 - tests/dbus/Makefile.am | 5 + tests/dbus/streamed-media-chan.cpp | 595 ++++++++++++++++++++++++++++++++++++ 3 files changed, 600 insertions(+), 1 deletion(-) commit 0696a14c53dae804d16f998a40d88a155604944f Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 19 21:12:42 2009 -0300 StreamedMediaChannel: Removed removeStreams(UIntList) method and added removeStream(MediaStreamPtr) method. Removed removeStreams(UIntList) as there is no need to have a method receiving the stream ids, as the user will always have the stream pointer in case the stream exists. TelepathyQt4/Client/streamed-media-channel.cpp | 21 +++++++++++---------- TelepathyQt4/Client/streamed-media-channel.h | 4 ++-- 2 files changed, 13 insertions(+), 12 deletions(-) commit d2f2f6b996b9542c8ff26d5a88e1d002e38053c0 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 19 21:08:23 2009 -0300 StreamedMediaChannel: Removed MediaStream::remove method in favor of StreamedMedia::removeStreams methods. TelepathyQt4/Client/streamed-media-channel.cpp | 11 ----------- TelepathyQt4/Client/streamed-media-channel.h | 1 - 2 files changed, 12 deletions(-) commit 7ab5d93b00999e3425cf1dab55b5a8a213c40528 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 19 21:00:29 2009 -0300 StreamedMediaChannel: Renamed MediaStream::requestStreamDirection to requestDirection. TelepathyQt4/Client/streamed-media-channel.cpp | 8 ++++---- TelepathyQt4/Client/streamed-media-channel.h | 4 ++-- examples/call/call-widget.cpp | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) commit f9fd9ddbab10614596b19b9bf7710f442f8d0f80 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 19 20:55:07 2009 -0300 StreamedMediaChannel: Added streamsForType method. TelepathyQt4/Client/streamed-media-channel.cpp | 19 +++++++++++++++++++ TelepathyQt4/Client/streamed-media-channel.h | 1 + 2 files changed, 20 insertions(+) commit 13057f987651ef1dabd75b6452af4fdf3f5f4fa5 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 19 20:29:03 2009 -0300 StreamedMediaChannel: Fixes/improvements. Do not added MediaStream objects to StreamedMediaChannel until they are ready (have a contact object). Make MediaStream a ReadyObject and use this to retrieve the contact (reducing code complexity). Changed MediaStream to be a QSharedData in order to use it with QExplitlySharedDataPointer. Moved MediaStream signals to StreamedMediaChannel and use the QExplitlySharedDataPointer in the signals instead of MediaStream *. Some other fixes. Changed call example accordingly. TelepathyQt4/Client/streamed-media-channel.cpp | 369 ++++++++++++++---------- TelepathyQt4/Client/streamed-media-channel.h | 41 +-- examples/call/call-widget.cpp | 178 +++++++----- examples/call/call-widget.h | 16 +- examples/call/call-window.cpp | 5 +- 5 files changed, 346 insertions(+), 263 deletions(-) commit 84f6c8d0708f8604fba0688b1d7cdc04d55ed47b Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 19 20:26:36 2009 -0300 ReadinessHelper/ReadyObject: Support non DBusProxy objects. Added support for non DBusProxy objects to use ReadyObject/ReadinessHelper. This is useful in classes that do not inherit DBusProxy but want to use ReadinessHelper machinery. TelepathyQt4/Client/readiness-helper.cpp | 33 ++++++++++++++++++------------ TelepathyQt4/Client/readiness-helper.h | 3 ++- TelepathyQt4/Client/ready-object.cpp | 27 +++++++++++++++++------- TelepathyQt4/Client/ready-object.h | 7 ++++++- 4 files changed, 48 insertions(+), 22 deletions(-) commit e7efdaa85fcf8f8e5a3503b61a0c8c8ad480e115 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 19 12:59:10 2009 -0300 callable cm: Fixed Makefile.am. tests/lib/callable/Makefile.am | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) commit d1394ccf1045f954a7fd72def0fbde0bb6b82fbf Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 19 12:58:47 2009 -0300 callable cm: Added missing manager-file.py. tests/lib/callable/manager-file.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) commit 6baf0dea65d5ae84f5362e558b58184a7cea440e Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 19 12:46:11 2009 -0300 configure.ac: Added 'callable' example CM. configure.ac | 1 + 1 file changed, 1 insertion(+) commit efdb0cf0024723aa32efd33aa85527a253108b32 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 19 12:44:04 2009 -0300 Merge 'callable' example CM from telepathy-glib 0.7.27. tests/lib/callable/conn.c | 21 +++ tests/lib/callable/media-channel.c | 290 +++++++++++++++++++++++++++++------- tests/lib/callable/media-manager.c | 58 +++++++- tests/lib/callable/media-stream.c | 113 ++++++++++++++ tests/lib/callable/media-stream.h | 5 + 5 files changed, 432 insertions(+), 55 deletions(-) commit 7364913ca9bf7159c85b859ea5a11d008439af8d Author: Simon McVittie Date: Tue Mar 17 22:27:13 2009 +0000 Add 'callable' example CM from telepathy-glib 0.7.27 configure.ac | 2 +- tests/lib/Makefile.am | 3 +- tests/lib/callable/Makefile.am | 39 ++ tests/lib/callable/conn.c | 402 ++++++++++++ tests/lib/callable/conn.h | 78 +++ tests/lib/callable/connection-manager.c | 130 ++++ tests/lib/callable/connection-manager.h | 73 +++ tests/lib/callable/media-channel.c | 1024 +++++++++++++++++++++++++++++++ tests/lib/callable/media-channel.h | 74 +++ tests/lib/callable/media-manager.c | 438 +++++++++++++ tests/lib/callable/media-manager.h | 71 +++ tests/lib/callable/media-stream.c | 506 +++++++++++++++ tests/lib/callable/media-stream.h | 83 +++ 13 files changed, 2921 insertions(+), 2 deletions(-) commit afcc9b8fe60c00a089b92345d7dd485ed7d149fc Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 19 12:38:22 2009 -0300 call example: Use ContactPtr typedef. examples/call/call-handler.cpp | 6 +++--- examples/call/call-handler.h | 5 ++--- examples/call/call-roster-widget.cpp | 4 ++-- examples/call/call-roster-widget.h | 4 +++- examples/call/call-widget.cpp | 2 +- examples/call/call-widget.h | 8 ++++---- examples/call/call-window.h | 1 - 7 files changed, 15 insertions(+), 15 deletions(-) commit bb35db6e862c580d775675c805a63dc022d7ed6f Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 19 12:37:55 2009 -0300 StreamedMediaChannel: Use ContactPtr typedef. TelepathyQt4/Client/streamed-media-channel.cpp | 18 +++++++++--------- TelepathyQt4/Client/streamed-media-channel.h | 10 +++++----- 2 files changed, 14 insertions(+), 14 deletions(-) commit 11f665457582a844886a08a000d78a4ea5e1838a Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 17 06:13:14 2009 -0300 call example: Added VideoWidget. examples/call/Makefile.am | 9 +- examples/call/call-handler.cpp | 113 ++++++++- examples/call/call-handler.h | 8 +- examples/call/call-widget.cpp | 449 ++++++++++++++++++++++++++---------- examples/call/call-widget.h | 52 +++-- examples/call/call-window.cpp | 6 +- examples/call/farsight-channel.cpp | 70 +++++- examples/call/farsight-channel.h | 9 +- examples/call/main.cpp | 4 + examples/call/video-widget.cpp | 166 +++++++++++++ examples/call/video-widget.h | 57 +++++ 11 files changed, 792 insertions(+), 151 deletions(-) commit 478558c4dafd260891e2f3678fa6a24c1e8719c1 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 17 05:58:50 2009 -0300 configure.ac: Added gstreamer checks, needed by the call example. configure.ac | 13 +++++++++++++ 1 file changed, 13 insertions(+) commit 6601740c314f53b8c0458f4431e080577a510d9d Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 17 05:57:53 2009 -0300 StreamedMediaChannel: Changed default stream direction/state when none is informed. Note: Let's use sensible defaults for now, this needs to be fixed. TelepathyQt4/Client/streamed-media-channel.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit dc0f7bfff5b9d8803ea15a7d790111829739b3f6 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 17 05:57:25 2009 -0300 StreamedMediaChannel: Added debug. TelepathyQt4/Client/streamed-media-channel.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit a2f02745bd265514aba230ffde084a294f7cec30 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 17 05:56:24 2009 -0300 StreamedMediaChannel: Make sure all streams are added to the channel even if StreamAdded is not emitted. TelepathyQt4/Client/streamed-media-channel.cpp | 17 ++++++++++++++++- TelepathyQt4/Client/streamed-media-channel.h | 2 ++ 2 files changed, 18 insertions(+), 1 deletion(-) commit b6ff843eebf998bb67497a963b1f99bd6ceb9423 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 17 05:55:23 2009 -0300 StreamedMediaChannel: Proper initialize Private class (channel member). TelepathyQt4/Client/streamed-media-channel.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit d45d63644c7d45cabff5bfb73dc3eb282aaf6b11 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 17 05:51:54 2009 -0300 PendingChannel: Added objectPath(). Added objectPath method on PendingChannel so custom channels can be constructed. TelepathyQt4/Client/pending-channel.cpp | 20 ++++++++++++++++++++ TelepathyQt4/Client/pending-channel.h | 2 ++ 2 files changed, 22 insertions(+) commit 697d964fefaf3582c29870aeaac669b3ca0faa93 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 16 20:14:22 2009 -0300 call example: Fixed farsight-channel coding style. examples/call/farsight-channel.cpp | 50 ++++++++++++++++++------------------ 1 file changed, 25 insertions(+), 25 deletions(-) commit 431fb408d163b719ce392ccd5cc5965b4efbfc37 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 16 20:10:32 2009 -0300 call example: Renamed farsight-glue to farsight-channel. examples/call/Makefile.am | 6 +- examples/call/call-widget.h | 2 +- examples/call/farsight-channel.cpp | 293 ++++++++++++++++++++++++++++++++++++ examples/call/farsight-channel.h | 66 ++++++++ examples/call/farsight-glue.cpp | 293 ------------------------------------ examples/call/farsight-glue.h | 66 -------- 6 files changed, 363 insertions(+), 363 deletions(-) commit 7902a2ab1e3bfc9a79e7fd15d5cd307332feedc0 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 13 18:15:41 2009 -0300 Added call example to gitignore. .gitignore | 1 + 1 file changed, 1 insertion(+) commit 434f418585ca5d157a34d75b8e9ab820c6ec713a Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 13 18:14:34 2009 -0300 call example: Added to repository. This is a simple example to make voice calls, video not supported. P.s.: Maybe we should move FarsightChannel to the public API. examples/call/Makefile.am | 18 ++- examples/call/call-handler.cpp | 69 ++++++++++ examples/call/call-handler.h | 55 ++++++++ examples/call/call-roster-widget.cpp | 90 +++++++++++++ examples/call/call-roster-widget.h | 60 +++++++++ examples/call/call-widget.cpp | 234 +++++++++++++++++++++++++++++++++ examples/call/call-widget.h | 81 ++++++++++++ examples/call/call-window.cpp | 170 ++++++++++++++++++++++++ examples/call/call-window.h | 69 ++++++++++ examples/call/farsight-glue.cpp | 238 ++++++++++++++++++++++++++++++++-- examples/call/farsight-glue.h | 45 +++++-- examples/call/main.cpp | 32 ++++- 12 files changed, 1139 insertions(+), 22 deletions(-) commit 925f9429f50917c8e360a30f3d4942be379c6824 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 13 18:14:03 2009 -0300 roster example: Make a shared library that can be used by other examples. examples/roster/Makefile.am | 26 ++++++-- examples/roster/main.cpp | 4 +- examples/roster/roster-widget.cpp | 120 ++++++++++++++++------------------- examples/roster/roster-widget.h | 28 ++++---- examples/roster/roster-window.cpp | 127 +++++++++++++++++++++++++++++++++++++ examples/roster/roster-window.h | 65 +++++++++++++++++++ 6 files changed, 286 insertions(+), 84 deletions(-) commit 3b1bf02be2ba5bd24618334649abd9cb89456d4e Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 13 18:13:15 2009 -0300 PendingChannel: Changed handle/handleType to targetHandle/targetHandleType. Changed handle/handleType to targetHandle/targetHandleType to be consistent with Channel API. TelepathyQt4/Client/connection.cpp | 2 +- TelepathyQt4/Client/pending-channel.cpp | 6 +++--- TelepathyQt4/Client/pending-channel.h | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) commit 653d8a883d4e34defbc222d9ad36535458296bda Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 13 18:12:14 2009 -0300 StreamedMediaChannel: Added requestStream method. TelepathyQt4/Client/streamed-media-channel.cpp | 8 ++++++++ TelepathyQt4/Client/streamed-media-channel.h | 3 +++ 2 files changed, 11 insertions(+) commit 7b6102be979e93a2481c367952a3712f53205322 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 13 18:11:36 2009 -0300 StreamedMediaChannel: Fixed RequestStreams/ListStreams return value handling. TelepathyQt4/Client/streamed-media-channel.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) commit a9d1904001aacffd0dec6ee91dc7ee4ac1678647 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 13 18:08:10 2009 -0300 Connection: Return a PendingReady object on requestConnect. TelepathyQt4/Client/connection-internal.h | 7 ++----- TelepathyQt4/Client/connection.cpp | 7 +++---- TelepathyQt4/Client/connection.h | 2 +- TelepathyQt4/Client/pending-ready.h | 2 +- tests/pinocchio/handles.cpp | 1 + 5 files changed, 8 insertions(+), 11 deletions(-) commit b4e6a79d715c74c14cc634f91d034f29784ca504 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 12 15:09:19 2009 -0300 roster example: renamed RosterWindow to RosterWidget. examples/roster/Makefile.am | 6 +- examples/roster/main.cpp | 4 +- examples/roster/roster-widget.cpp | 384 ++++++++++++++++++++++++++++++++++++ examples/roster/roster-widget.h | 86 ++++++++ examples/roster/roster-window.cpp | 388 ------------------------------------- examples/roster/roster-window.h | 86 -------- 6 files changed, 475 insertions(+), 479 deletions(-) commit 353f020d0d67ccce352e8771c862817ebb1940d1 Author: Simon McVittie Date: Mon Mar 9 14:29:51 2009 +0000 Add the beginnings of a call example using telepathy-farsight configure.ac | 16 ++++++++- examples/Makefile.am | 4 +++ examples/call/Makefile.am | 32 +++++++++++++++++ examples/call/farsight-glue.cpp | 75 +++++++++++++++++++++++++++++++++++++++ examples/call/farsight-glue.h | 37 +++++++++++++++++++ examples/call/main.cpp | 5 +++ 6 files changed, 168 insertions(+), 1 deletion(-) commit 84bf984cbb056fc316166f55af8d401af0a9e60e Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 11 12:56:03 2009 -0300 StreamedMediaChannel: Added requestStreamDirection(bool send, bool receive) overload function. TelepathyQt4/Client/streamed-media-channel.cpp | 21 +++++++++++++++++++++ TelepathyQt4/Client/streamed-media-channel.h | 2 ++ 2 files changed, 23 insertions(+) commit 412bbaa28e1677cd0fc84134553aeebdc65bb2ae Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 11 12:48:54 2009 -0300 StreamedMediaChannel: No need to check for Bidirectional on MediaStream::sending/receiving. Rationale: MediaStream::sending(), MediaStream::receiving() can safely assume that MediaStreamDirection is a bitfield (it's an enum because of historical mistakes) Bidirectional is just (Send|Receive) TelepathyQt4/Client/streamed-media-channel.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) commit dc4c80ff92dd072fcb3e0facd89b5bd70ab1eacf Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 11 12:47:13 2009 -0300 StreamedMediaChannel: Only signal new streams/FeatureStreams ready when the stream contacts are retrieved. TelepathyQt4/Client/streamed-media-channel.cpp | 164 +++++++++++++++++++----- TelepathyQt4/Client/streamed-media-channel.h | 10 +- 2 files changed, 141 insertions(+), 33 deletions(-) commit 78b1c63cd6f30b8958b2b3a95269e82a4aebb44f Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 11 11:09:44 2009 -0300 StreamedMediaChannel: Fixed requestStreams to return a PendingMediaStreams object. TelepathyQt4/Client/streamed-media-channel.cpp | 105 ++++++++++++++++++++++-- TelepathyQt4/Client/streamed-media-channel.h | 39 ++++++++- 2 files changed, 132 insertions(+), 12 deletions(-) commit 07fb8c2ee967768faf8ab35b4525d4c57f163601 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 11 10:32:27 2009 -0300 StreamedMediaChannel: Added a MediaStream * param to all MediaStreams signals. TelepathyQt4/Client/streamed-media-channel.cpp | 9 +++++---- TelepathyQt4/Client/streamed-media-channel.h | 11 +++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) commit 4c2051c62b08c3681ecf61e019cec15667c8e1b8 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 11 03:21:36 2009 -0300 StreamedMediaChannel: Added some docs. TelepathyQt4/Client/streamed-media-channel.cpp | 91 +++++++++++++++++++++++- 1 file changed, 90 insertions(+), 1 deletion(-) commit 7e892f2a5046020d744dbe2226562b5c9b7a5d3a Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 11 03:09:05 2009 -0300 StreamedMediaChannel: Fixed stream removal handling. TelepathyQt4/Client/streamed-media-channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 1bffdf74bb4d947a8142a57385aa646d45e602ea Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 11 03:04:05 2009 -0300 StreamedMediaChannel: Cache MediaStream::contact object. TelepathyQt4/Client/streamed-media-channel.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit 6d4d5c80d0a7e4aed4ecda5489744e3047323e93 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 11 03:01:04 2009 -0300 StreamedMediaChannel: Added removeStreams/requestStreams. TelepathyQt4/Client/streamed-media-channel.cpp | 31 ++++++++++++++++++++++-- TelepathyQt4/Client/streamed-media-channel.h | 4 +-- 2 files changed, 30 insertions(+), 5 deletions(-) commit 23f7751a3526a3df78741fae7989c2d840db5f6b Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 11 02:48:18 2009 -0300 StreamedMediaChannel: Use full namespace on streamAdded signal. TelepathyQt4/Client/streamed-media-channel.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 1bb5a9615975d01807151ad14a2828cabf486599 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 11 02:45:29 2009 -0300 StreamedMediaChannel: Added MediaStream::remove/requestStreamDirection methods. TelepathyQt4/Client/streamed-media-channel.cpp | 13 +++++++++++++ TelepathyQt4/Client/streamed-media-channel.h | 2 -- 2 files changed, 13 insertions(+), 2 deletions(-) commit 48af538ed0bec0aa2ab5eb2a08daa0494b0e9f48 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 11 02:44:26 2009 -0300 StreamedMediaChannel: Continue implementation (added FeatureStreams support). TelepathyQt4/Client/streamed-media-channel.cpp | 297 +++++++++++++++++++++++- TelepathyQt4/Client/streamed-media-channel.h | 54 +++-- 2 files changed, 325 insertions(+), 26 deletions(-) commit 2fd8c3cfdb1bc9cca2221ae7575e06c12038f3db Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 11 02:43:40 2009 -0300 ContactManager: Export lookupContactByHandle. TelepathyQt4/Client/contact-manager.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) commit 888ffb4dcd6fbf1790b7d05348233e0652591df1 Author: Simon McVittie Date: Thu Mar 5 14:44:31 2009 +0000 StreamedMediaChannel: add awaitingLocalAnswer, awaitingRemoteAnswer and acceptCall It's not completely clear from the abstract Group API how to do these actions, so these simple wrappers are meant to guide API users to do the right thing. TelepathyQt4/Client/streamed-media-channel.cpp | 15 +++++++++++++++ TelepathyQt4/Client/streamed-media-channel.h | 5 +++++ 2 files changed, 20 insertions(+) commit 0627b88d83f8f738c41f2fd7ac8d5f0861ccef18 Author: Simon McVittie Date: Thu Mar 5 14:43:22 2009 +0000 Channel: add protected methods to look for the self-handle in local pending, and add it While using Contact objects is nice from a high-level-API point of view, it's not so convenient if all we want to do is to accept an invitation or VoIP call. The high-level semantics of moving yourself from local-pending to members depend on the channel type, so subclasses should introduce wrappers for these methods with a friendlier name, where appropriate. TelepathyQt4/Client/channel.cpp | 53 +++++++++++++++++++++++++++++++++++++++ TelepathyQt4/Client/channel.h | 6 +++++ 2 files changed, 59 insertions(+) commit 970c8830511a1821b4a68751418538dd104231dd Author: Simon McVittie Date: Thu Mar 5 14:12:19 2009 +0000 StreamedMediaChannel: sketch out a higher-level API TelepathyQt4/Client/streamed-media-channel.h | 72 ++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) commit 7b0c980697aaa585d4418a397a3269ac2cc8fe05 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 18 15:59:19 2009 -0300 Fixed merge conflict. TelepathyQt4/Client/pending-account.cpp | 5 ----- TelepathyQt4/Client/pending-connection.cpp | 6 ------ 2 files changed, 11 deletions(-) commit 077ac93c7f36a4484926d07e183d974406040f67 Merge: 6fd4f8a db03e92 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 18 15:19:52 2009 -0300 Merge branch 'shared' Conflicts: TelepathyQt4/Client/pending-account.cpp TelepathyQt4/Client/pending-account.h TelepathyQt4/Client/pending-connection.cpp TelepathyQt4/Client/pending-connection.h Reviewed-by: Simon McVittie (smcv) commit db03e923b1be42cfa055d6a49f12435c90f8839d Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 18 15:13:30 2009 -0300 Update NEWS regarding QExplicitlySharedDataPointer usage. NEWS | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) commit feae9a9ee2e1adab2d4aee13994757b78a65a794 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 18 15:07:30 2009 -0300 ReadyObject: Do not inherit QSharedData. Make ReadyObject do not inherit QSharedData and do it in the classes itself. TelepathyQt4/Client/account-manager.h | 5 ++++- TelepathyQt4/Client/account.h | 5 ++++- TelepathyQt4/Client/channel.h | 7 ++++--- TelepathyQt4/Client/connection-manager.h | 5 ++++- TelepathyQt4/Client/connection.h | 5 ++++- TelepathyQt4/Client/ready-object.h | 4 +--- 6 files changed, 21 insertions(+), 10 deletions(-) commit 39b26e8d36dc38653c673287a9ea7fcddd155b70 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 18 14:42:09 2009 -0300 tests: Use ContactPtr typedef. tests/dbus/chan-basics.cpp | 4 ++-- tests/dbus/chan-group.cpp | 14 +++++++------- tests/dbus/conn-roster.cpp | 12 ++++++------ tests/dbus/contacts.cpp | 11 +++++------ 4 files changed, 20 insertions(+), 21 deletions(-) commit 0923950675557229d462499b2cd80f77c8081878 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 18 14:41:54 2009 -0300 roster example: Use ContactPtr typedef. examples/roster/roster-item.cpp | 2 +- examples/roster/roster-item.h | 7 +++---- examples/roster/roster-window.cpp | 12 ++++++------ examples/roster/roster-window.h | 2 +- 4 files changed, 11 insertions(+), 12 deletions(-) commit ac55b969a050b78b29571da7b8dcc59754c830ac Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 18 14:37:08 2009 -0300 TextChannel: Use ContactPtr typedef. TelepathyQt4/Client/text-channel.cpp | 6 +++--- TelepathyQt4/Client/text-channel.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) commit f8f1939ed2d5b61600a2e053a17ccbc871e0942f Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 18 14:35:50 2009 -0300 Connection: Use ContactPtr typedef. TelepathyQt4/Client/connection.cpp | 7 +++---- TelepathyQt4/Client/connection.h | 4 ++-- 2 files changed, 5 insertions(+), 6 deletions(-) commit add9e008caaa60b6de5c93f8477fb108e4f750b7 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 18 14:34:05 2009 -0300 Message: Use ContactPtr typedef. TelepathyQt4/Client/message.cpp | 10 +++++----- TelepathyQt4/Client/message.h | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) commit 1297ea5021cb16bca95715f0d5819ee2e5ce9a88 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 18 14:32:43 2009 -0300 PendingContacts: Use ContactPtr typedef. TelepathyQt4/Client/pending-contacts.cpp | 20 ++++++++++---------- TelepathyQt4/Client/pending-contacts.h | 9 ++++----- 2 files changed, 14 insertions(+), 15 deletions(-) commit 43180c70d170c0702541fdf9af1bdb5e6a4833d8 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 18 14:30:46 2009 -0300 ContactManager: Use ContactPtr typedef. TelepathyQt4/Client/contact-manager.cpp | 53 ++++++++++++++++--------------- TelepathyQt4/Client/contact-manager.h | 17 +++++----- 2 files changed, 35 insertions(+), 35 deletions(-) commit 0af172ae82bfaf5dc604ac8d8e7de956cf057c65 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 18 14:28:01 2009 -0300 Channel: Use ContactPtr typedef. TelepathyQt4/Client/channel.cpp | 48 +++++++++++++++++++-------------------- TelepathyQt4/Client/channel.h | 17 +++++++------- 2 files changed, 32 insertions(+), 33 deletions(-) commit fb7bde10dbc4c05c93ea97e915c12952df9037aa Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 18 14:27:08 2009 -0300 Contact: Added ContactPtr typedef. TelepathyQt4/Client/contact.cpp | 20 ++++++++++---------- TelepathyQt4/Client/contact.h | 7 ++++--- 2 files changed, 14 insertions(+), 13 deletions(-) commit f89957151e613d232c95e10d4acb846192e4c6c4 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 18 14:21:04 2009 -0300 TextChannel: Added TextChannel typedef. TelepathyQt4/Client/text-channel.h | 2 ++ 1 file changed, 2 insertions(+) commit c7f52e12693829d932a9042e2020a8e1f393e250 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 18 14:20:30 2009 -0300 StreamedMediaChannel: Added StreamedMediaChannel typedef. TelepathyQt4/Client/streamed-media-channel.h | 2 ++ 1 file changed, 2 insertions(+) commit 49d9690394f639255eb14ff94c3d9ac5a326de9c Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 18 14:20:13 2009 -0300 RoomList: Added RoomListPtr typedef. TelepathyQt4/Client/room-list.h | 2 ++ 1 file changed, 2 insertions(+) commit bba487c0400a6812efda3e73497d5bf2c0e516fb Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 18 14:20:00 2009 -0300 FileTransfer: Added FileTransferPtr typedef. TelepathyQt4/Client/file-transfer.h | 2 ++ 1 file changed, 2 insertions(+) commit a499f9ba44d275e78b7462f58164e66f845f2b26 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 18 14:19:45 2009 -0300 ConnectionManager: Added ConnectionManagerPtr typedef. TelepathyQt4/Client/connection-manager.h | 2 ++ 1 file changed, 2 insertions(+) commit b677c2d85aa28c2a3dcfe530a5cfff6a3725a447 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 18 14:19:32 2009 -0300 AccountManager: Added AccountManagerPtr typedef. TelepathyQt4/Client/account-manager.h | 2 ++ 1 file changed, 2 insertions(+) commit 9f7025e33c7ff89cd1661bfc2243d73781201770 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 18 14:14:38 2009 -0300 PendingConnection: Return ConnectionPtr on connection() method. TelepathyQt4/Client/pending-connection.cpp | 10 +++++----- TelepathyQt4/Client/pending-connection.h | 3 +-- examples/roster/roster-window.h | 5 ++--- tests/pinocchio/cm-basics.cpp | 2 +- 4 files changed, 9 insertions(+), 11 deletions(-) commit ef04e36cc0f19e460bb0950376b56c9858a5a05d Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 18 14:10:20 2009 -0300 PendingChannel: Return ChannelPtr on channel() method. TelepathyQt4/Client/connection.cpp | 6 +++--- TelepathyQt4/Client/contact-manager.cpp | 12 ++++++------ TelepathyQt4/Client/contact-manager.h | 2 +- TelepathyQt4/Client/pending-channel.cpp | 20 ++++++++++---------- TelepathyQt4/Client/pending-channel.h | 3 +-- tests/dbus/chan-basics.cpp | 6 +++--- tests/dbus/chan-group.cpp | 6 +++--- tests/dbus/conn-requests.cpp | 4 ++-- 8 files changed, 29 insertions(+), 30 deletions(-) commit ca9ce1de1dafae864170446fa4283570c5732edc Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 18 13:50:06 2009 -0300 Channel: Added ChannelPtr typedef. TelepathyQt4/Client/channel.h | 2 ++ 1 file changed, 2 insertions(+) commit 9bdf22a83857bf8971631963e14336e58561a4dc Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 18 13:47:50 2009 -0300 PendingAccount: Return AccountPtr on account() method. TelepathyQt4/Client/pending-account.cpp | 11 +++++------ TelepathyQt4/Client/pending-account.h | 3 +-- tests/dbus/account-basics.cpp | 2 +- 3 files changed, 7 insertions(+), 9 deletions(-) commit 1a695ee510e63e6e1122e01d535491c8fbd3eff6 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 18 13:42:20 2009 -0300 Account: Use QExplicitlySharedDataPointer for connections. TelepathyQt4/Client/account.cpp | 11 +++++------ TelepathyQt4/Client/account.h | 4 ++-- TelepathyQt4/Client/connection.h | 2 ++ 3 files changed, 9 insertions(+), 8 deletions(-) commit ccee3bf99c20a9e5826429c36da0f07976de61ed Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 18 13:34:11 2009 -0300 AccountManager: Use QExplicitlySharedDataPointer for accounts. TelepathyQt4/Client/account-manager.cpp | 19 +++++++++---------- TelepathyQt4/Client/account-manager.h | 13 ++++++------- TelepathyQt4/Client/account.h | 3 +++ tests/dbus/account-basics.cpp | 2 +- 4 files changed, 19 insertions(+), 18 deletions(-) commit bbfc0586ae0d2dc439732c9750eda0a6c83c793b Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 18 13:01:28 2009 -0300 ReadyObject: Inherit QSharedData. Inherit QSharedData so our objects can be used with QExplicitlySharedDataPointer. TelepathyQt4/Client/ready-object.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 9d25c1be0259615585655648a92e69a395a38efd Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 18 12:50:22 2009 -0300 Connection: Use ReadyObject class. TelepathyQt4/Client/connection.cpp | 68 ++++-------------------------------- TelepathyQt4/Client/connection.h | 13 ++----- 2 files changed, 9 insertions(+), 72 deletions(-) commit 679078dae3a4fb99a41e1fc45430df2241e6bc17 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 18 12:50:06 2009 -0300 ConnectionManager: Use ReadyObject class. TelepathyQt4/Client/connection-manager.cpp | 67 +++------------------------- TelepathyQt4/Client/connection-manager.h | 13 ++---- 2 files changed, 8 insertions(+), 72 deletions(-) commit 0ef3a960dec59d7493e9e9460b5e7dfb51004e65 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 18 12:49:52 2009 -0300 Channel: Use ReadyObject class. TelepathyQt4/Client/channel.cpp | 65 ++------------------------------------- TelepathyQt4/Client/channel.h | 13 ++------ 2 files changed, 6 insertions(+), 72 deletions(-) commit e1dce2f1a92cffe2b1d20d45dbb22448e724056f Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 18 12:49:42 2009 -0300 Account: Use ReadyObject class. TelepathyQt4/Client/account.cpp | 64 ++------------------------------------- TelepathyQt4/Client/account.h | 13 ++------ 2 files changed, 6 insertions(+), 71 deletions(-) commit e8fff8e5a5d7daf8f5c100cc1c5ff224b8c07bdf Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 18 12:49:26 2009 -0300 AccountManager: Use ReadyObject class. TelepathyQt4/Client/account-manager.cpp | 69 +++---------------------------- TelepathyQt4/Client/account-manager.h | 13 ++---- 2 files changed, 8 insertions(+), 74 deletions(-) commit ca37911e76d90bacd8ce7c873205a98b40225694 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 18 12:48:45 2009 -0300 ReadyObject: Added to repository. ReadyObject is a base class for all classes that wants to implement isReady/becomeReady features. TelepathyQt4/Client/ReadyObject | 13 +++ TelepathyQt4/Client/readiness-helper.h | 4 +- TelepathyQt4/Client/ready-object.cpp | 147 ++++++++++++++++++++++++++++++++ TelepathyQt4/Client/ready-object.h | 67 +++++++++++++++ TelepathyQt4/Makefile.am | 3 + 5 files changed, 232 insertions(+), 2 deletions(-) commit c9acf126bd0c2d9f585f06c82aaaca5c284ec806 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 17 14:00:30 2009 -0300 PendingConnection: Added serviceName/objectPath(). Added serviceName/objectPath methods on PendingConnection so custom connections can be constructed. TelepathyQt4/Client/pending-connection.cpp | 64 ++++++++++++++++++++++++---- TelepathyQt4/Client/pending-connection.h | 5 +++ 2 files changed, 60 insertions(+), 9 deletions(-) commit 9765078314b261f030168f20aa379b1f2197c128 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 17 13:59:48 2009 -0300 PendingAccount: Added objectPath(). Added objectPath method on PendingAccount so custom accounts can be constructed. TelepathyQt4/Client/pending-account.cpp | 37 +++++++++++++++++++++++++------ TelepathyQt4/Client/pending-account.h | 3 +++ 2 files changed, 33 insertions(+), 7 deletions(-) commit ae000ed5ba02ca5b7cebbc71b8d8e0e4954df10b Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 11 03:21:28 2009 -0300 TextChannel: Fixed docs. TelepathyQt4/Client/text-channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6139e8c470ca73eeeae9d84083683acadf959913 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 11 02:42:58 2009 -0300 TextChannel: delete watchers. TelepathyQt4/Client/text-channel.cpp | 4 ++++ 1 file changed, 4 insertions(+) commit 6fd4f8a97a2446e178f5d4be96e703677fbed92f Merge: cfa8af7 6b05719 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 17 19:25:50 2009 -0300 Merge branch 'trivia' Reviewed-by: Simon McVittie (smcv) commit 6b057199a2312d126f1f251674a9bb0516f33d69 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 17 14:00:30 2009 -0300 PendingConnection: Added serviceName/objectPath(). Added serviceName/objectPath methods on PendingConnection so custom connections can be constructed. TelepathyQt4/Client/pending-connection.cpp | 64 ++++++++++++++++++++++++---- TelepathyQt4/Client/pending-connection.h | 5 +++ 2 files changed, 60 insertions(+), 9 deletions(-) commit 028b600f87f9b28e7c63665b373544111244ce11 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 17 13:59:48 2009 -0300 PendingAccount: Added objectPath(). Added objectPath method on PendingAccount so custom accounts can be constructed. TelepathyQt4/Client/pending-account.cpp | 37 +++++++++++++++++++++++++------ TelepathyQt4/Client/pending-account.h | 3 +++ 2 files changed, 33 insertions(+), 7 deletions(-) commit f2a51397ae52e637605d2492c4e7131bb670b9ef Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 11 03:21:28 2009 -0300 TextChannel: Fixed docs. TelepathyQt4/Client/text-channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 8734a18617ac0829a1ffb4a6545c5898f3d35421 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 11 02:42:58 2009 -0300 TextChannel: delete watchers. TelepathyQt4/Client/text-channel.cpp | 4 ++++ 1 file changed, 4 insertions(+) commit cfa8af7c604451f39ef83fd793f15e703ccbb418 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 6 16:54:47 2009 -0300 Feature: Make it easy to handle Features. Now it's possible to pass a single feature, without creating a Features var, to isReady/becomeReady methods. TelepathyQt4/Client/feature.h | 8 +++++++- tests/dbus/account-basics.cpp | 25 ++++++++++--------------- 2 files changed, 17 insertions(+), 16 deletions(-) commit 4125235bacc782bb7a9c3d15baf14fdbd0fec478 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 6 16:28:12 2009 -0300 ReadinessHelper: Propagate error message when a feature fails introspection. TelepathyQt4/Client/account.cpp | 7 +- TelepathyQt4/Client/connection-manager.cpp | 4 +- TelepathyQt4/Client/connection.cpp | 10 ++- TelepathyQt4/Client/readiness-helper.cpp | 102 ++++++++++++++++++++++------ TelepathyQt4/Client/readiness-helper.h | 14 +++- TelepathyQt4/Client/text-channel.cpp | 6 +- 6 files changed, 107 insertions(+), 36 deletions(-) commit 3fcc3010e63d739cbb7fffc15b683d1092aa73b4 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 6 15:07:06 2009 -0300 Moved Feature to it's own header. TelepathyQt4/Client/Feature | 13 +++++++ TelepathyQt4/Client/feature.cpp | 65 +++++++++++++++++++++++++++++++ TelepathyQt4/Client/feature.h | 66 ++++++++++++++++++++++++++++++++ TelepathyQt4/Client/readiness-helper.h | 17 +------- TelepathyQt4/Makefile.am | 3 ++ 5 files changed, 148 insertions(+), 16 deletions(-) commit 41ffc24e4ba5c27bedc71ceb5dfb7891625b5990 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Mar 6 14:11:16 2009 -0300 ReadinessHelper: Added critical feature concept. Added critical feature concept and make FeatureCore critical in all classes. isReady/becomeReady will fail if a critical feature cannot not be satisfied. TelepathyQt4/Client/account-manager.cpp | 6 ++-- TelepathyQt4/Client/account.cpp | 6 ++-- TelepathyQt4/Client/channel.cpp | 6 ++-- TelepathyQt4/Client/connection-manager.cpp | 6 ++-- TelepathyQt4/Client/connection.cpp | 6 ++-- TelepathyQt4/Client/readiness-helper.cpp | 51 ++++++++++++++++++++++------ TelepathyQt4/Client/readiness-helper.h | 27 ++++++++++++--- TelepathyQt4/Client/text-channel.cpp | 10 +++--- 8 files changed, 82 insertions(+), 36 deletions(-) commit 3d81aef292dc5ad6ada10e403eaf6b62a055f3ac Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 5 19:06:55 2009 -0300 Channel/TextChannel: Use Readiness helper class. Use Readiness helper class on Channel/TextChannel and removed PendingReadyChannel. TelepathyQt4/Client/PendingReadyChannel | 13 - TelepathyQt4/Client/channel.cpp | 137 +++---- TelepathyQt4/Client/channel.h | 18 +- TelepathyQt4/Client/connection.cpp | 1 - TelepathyQt4/Client/pending-ready-channel.cpp | 110 ------ TelepathyQt4/Client/pending-ready-channel.h | 63 --- TelepathyQt4/Client/text-channel.cpp | 522 +++++++++++-------------- TelepathyQt4/Client/text-channel.h | 29 +- TelepathyQt4/Makefile.am | 4 - tests/dbus/chan-basics.cpp | 1 - tests/dbus/chan-group.cpp | 1 - tests/dbus/text-chan.cpp | 33 +- 12 files changed, 327 insertions(+), 605 deletions(-) commit 961e934056db997422d1a068d5d8868ae336cd5c Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 5 19:05:34 2009 -0300 ReadinessHelper: Update supportedStatuses/Features on addIntrospectables. TelepathyQt4/Client/readiness-helper.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) commit 2bb119c162b6347de661eea89d0a15204d22f0b5 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 5 16:28:01 2009 -0300 Tests: Fixed build. tests/dbus/account-basics.cpp | 10 +++++----- tests/dbus/chan-basics.cpp | 2 +- tests/dbus/conn-basics.cpp | 2 +- tests/dbus/conn-roster.cpp | 2 +- tests/dbus/contacts.cpp | 2 +- tests/pinocchio/conn-basics.cpp | 3 ++- 6 files changed, 11 insertions(+), 10 deletions(-) commit 4e372e6b1c2764d4b8800de468d6dbc04903ecce Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 5 16:27:38 2009 -0300 roster example: fixed build. examples/roster/roster-window.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 38bbd39881fec50536cbbec705598dab47a9b26c Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 5 16:26:06 2009 -0300 ReadinessHelper: Add subclass support. P.s: Tests/examples broken (will be fixed in a later patch). TelepathyQt4/Client/account-manager.cpp | 32 +++++-- TelepathyQt4/Client/account-manager.h | 22 ++--- TelepathyQt4/Client/account.cpp | 41 ++++++--- TelepathyQt4/Client/account.h | 26 +++--- TelepathyQt4/Client/connection-internal.h | 4 +- TelepathyQt4/Client/connection-manager.cpp | 31 +++++-- TelepathyQt4/Client/connection-manager.h | 20 ++--- TelepathyQt4/Client/connection.cpp | 48 +++++++---- TelepathyQt4/Client/connection.h | 30 +++---- TelepathyQt4/Client/pending-ready.cpp | 9 +- TelepathyQt4/Client/pending-ready.h | 5 +- TelepathyQt4/Client/readiness-helper.cpp | 129 ++++++++++++++-------------- TelepathyQt4/Client/readiness-helper.h | 24 ++++-- 13 files changed, 235 insertions(+), 186 deletions(-) commit e20a92d8b000c2cd91777da0160e62077980b181 Author: Simon McVittie Date: Thu Mar 5 19:06:15 2009 +0000 Post-release version bump NEWS | 5 +++++ configure.ac | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) commit 6ac59411f93c7d84cef64dd60c955038ae4d4e1d Author: Simon McVittie Date: Thu Mar 5 18:43:56 2009 +0000 Prepare release 0.1.1 NEWS | 41 +++++++++++++++++++++++++++++++++++++++-- configure.ac | 4 ++-- 2 files changed, 41 insertions(+), 4 deletions(-) commit 53557ddbc44c251f5262ba4040f9230205af7d70 Author: Simon McVittie Date: Thu Mar 5 18:20:35 2009 +0000 roster example: connect to the right signals examples/roster/roster-item.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit e8877188b1f09cbc5f704edbac89d0281b3f4610 Author: Simon McVittie Date: Thu Mar 5 17:33:41 2009 +0000 Add methods indicating whether contact list manipulations take a message Also add the missing canRescindPresenceSubscriptionRequest(), which indicates whether we can cancel a request before the contact has approved it, and simplify contact-list manipulation method names TelepathyQt4/Client/contact-manager.cpp | 194 +++++++++++++++++++++++++++++-- TelepathyQt4/Client/contact-manager.h | 23 ++-- TelepathyQt4/Client/contact.cpp | 8 +- examples/roster/roster-window.cpp | 6 +- 4 files changed, 206 insertions(+), 25 deletions(-) commit 10479026b3de11303f86b576ab377d30a0c6f44b Author: Simon McVittie Date: Thu Mar 5 17:03:00 2009 +0000 Channel: don't second-guess the CM Similarly to ContactManager, if the group flags indicate we're likely to fail, we should still make the attempt, so the connection manager can give us the most appropriate error. TelepathyQt4/Client/channel.cpp | 32 -------------------------------- 1 file changed, 32 deletions(-) commit 616be9e9f760bae7d7530254a7a38c29a675b52e Author: Simon McVittie Date: Thu Mar 5 17:00:37 2009 +0000 ContactManager: don't second-guess the connection manager Although we have flags to indicate which actions are likely to work, their interactions are complex, so we should only reject attempts to take action if the channel doesn't exist at all. In all other cases we should attempt the D-Bus call, even if we expect it to fail, so the connection manager can return an appropriate error. TelepathyQt4/Client/contact-manager.cpp | 35 +++++++++---------------------- 1 file changed, 10 insertions(+), 25 deletions(-) commit 9ce902c82ed28dd09cb09b923cf8efc2495274ce Author: Simon McVittie Date: Thu Mar 5 16:56:33 2009 +0000 Fix compilation of the Roster example examples/roster/roster-window.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 1cbb29badeee83d19d69bf3159d53d6bb652f5e8 Author: Simon McVittie Date: Thu Mar 5 16:56:24 2009 +0000 Document some of the ContactManager methods TelepathyQt4/Client/contact-manager.cpp | 87 +++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) commit 9b46587aa488d360109073846a70e67ae30c4e9a Author: Simon McVittie Date: Thu Mar 5 16:32:33 2009 +0000 ContactManager: cache pointers to the subscribe, publish, stored, deny channels TelepathyQt4/Client/contact-manager.cpp | 110 ++++++++++++++----------------- 1 file changed, 49 insertions(+), 61 deletions(-) commit 6c8a6414d2949778708fe5b98af52dccd883cd6b Author: Simon McVittie Date: Thu Mar 5 16:09:24 2009 +0000 typedef QSet > as Contacts to make code clearer TelepathyQt4/Client/channel.cpp | 24 +++++----- TelepathyQt4/Client/channel.h | 14 +++--- TelepathyQt4/Client/contact-manager.cpp | 76 +++++++++++++++---------------- TelepathyQt4/Client/contact-manager.h | 28 ++++++------ TelepathyQt4/Client/contact.h | 2 + examples/roster/roster-window.cpp | 6 +-- examples/roster/roster-window.h | 2 +- tests/dbus/chan-group.cpp | 46 +++++++++---------- 8 files changed, 99 insertions(+), 99 deletions(-) commit 90c80391acd10220ce314f7ab4af8a0664570750 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 5 14:33:59 2009 -0300 Fixed build. examples/roster/roster-window.cpp | 1 - 1 file changed, 1 deletion(-) commit 453c3975e00e2826665f4a0d02bcd418c0e912bc Merge: 2ebbbe7 0b3ee41 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 5 12:50:53 2009 -0300 Merge branch 'connection' Reviewed-by: Simon McVittie (smcv) commit 2ebbbe7df7772565230b49eef6d7a036814cdad6 Merge: 037e36d 4cda678 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 5 12:07:35 2009 -0300 Merge branch 'readiness' Reviewed-by: Simon McVittie (smcv) commit 4cda678260c0ee72208e6ed7dc36d3b50fa357c5 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Mar 5 11:57:23 2009 -0300 ConnectionManager: Do not go ready if we can't get the list of protocols or all params. TelepathyQt4/Client/connection-manager.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) commit 05f9b33e660c1efbf310364546a12bc7630defec Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 4 13:18:04 2009 -0300 ConnectionManager: Added requestedFeatures/actualFeatures/missingFeatures. TelepathyQt4/Client/connection-manager.cpp | 15 +++++++++++++++ TelepathyQt4/Client/connection-manager.h | 4 ++++ 2 files changed, 19 insertions(+) commit d911df212ecfd83ef19d6fd22606c36f4573c888 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 4 13:17:55 2009 -0300 Account: Added requestedFeatures/actualFeatures/missingFeatures. TelepathyQt4/Client/account.cpp | 15 +++++++++++++++ TelepathyQt4/Client/account.h | 4 ++++ 2 files changed, 19 insertions(+) commit 63f4de98c4435e22ff88865647f3946bc4b15c56 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 4 13:17:23 2009 -0300 AccountManager: Added requestedFeatures/actualFeatures/missingFeatures. TelepathyQt4/Client/account-manager.cpp | 15 +++++++++++++++ TelepathyQt4/Client/account-manager.h | 4 ++++ 2 files changed, 19 insertions(+) commit 393c80c2d1e380205412cd6f9c6afad665c0eb89 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 4 12:44:26 2009 -0300 Removed PendingReadyConnectionManager in favor of PendingReady. TelepathyQt4/Client/PendingReadyConnectionManager | 13 --- .../Client/pending-ready-connection-manager.cpp | 110 -------------------- .../Client/pending-ready-connection-manager.h | 62 ----------- TelepathyQt4/Makefile.am | 4 - 4 files changed, 189 deletions(-) commit 52e7e027fa389ca48d7816e5920743abb0d96364 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 4 12:43:13 2009 -0300 ConnectionManager: Use foreach instead of Q_FOREACH. TelepathyQt4/Client/connection-manager.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) commit 0bf8aae2f8aa129aa065798133d200cd1b871349 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 4 12:41:02 2009 -0300 ConnectionManager: Use ReadinessHelper class. TelepathyQt4/Client/account.cpp | 1 - TelepathyQt4/Client/connection-manager-internal.h | 28 ++- TelepathyQt4/Client/connection-manager.cpp | 235 ++++++++++----------- TelepathyQt4/Client/connection-manager.h | 22 +- tests/dbus/cm-basics.cpp | 2 +- tests/pinocchio/cm-basics.cpp | 2 +- tests/pinocchio/conn-basics.cpp | 1 - 7 files changed, 140 insertions(+), 151 deletions(-) commit 95cee7ac26f14460eedffb5106ef5798d8e47e84 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 4 12:44:06 2009 -0300 AccountManager: Use foreach/emit instead of Q_FOREACH/Q_EMIT. TelepathyQt4/Client/account-manager.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) commit 0b3ee41cc3790a9ce4f7da9238e746bc4b3d6a0c Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 4 19:03:57 2009 -0300 Connection: Added roster test. tests/dbus/Makefile.am | 5 + tests/dbus/conn-roster.cpp | 291 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 296 insertions(+) commit 2995ea50235b949b95b26a63d45d0168f8d9e192 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 4 19:02:01 2009 -0300 contact list example: use the proper list when authorizing contacts. tests/lib/contactlist/contact-list-manager.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 529ab86461340012dae066a50b4d1238eaf0a72d Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 4 18:58:20 2009 -0300 Contact: Use full namespace on signals. TelepathyQt4/Client/contact.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 3024571cc6286f7a008f66765bcc1a2a24f9ec83 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Mar 4 18:57:44 2009 -0300 ContactManager: Use message on subscribe/publish methods. TelepathyQt4/Client/contact-manager.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit bde6e71d2f9aa55a74912bee161750e55a60732d Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 27 19:48:22 2009 -0300 Improved roster example to support blocking contacts. Changed pushbuttons to actions triggered by context menu, to make the UI less cluttered. Added blocking contacts support. Fixed some bugs. examples/roster/roster-item.cpp | 21 ++-- examples/roster/roster-item.h | 5 +- examples/roster/roster-window.cpp | 190 ++++++++++++++++++++++++++++--------- examples/roster/roster-window.h | 21 ++-- 4 files changed, 180 insertions(+), 57 deletions(-) commit 539037daf8139afd1150bba2bbfcdde1543ce279 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 27 19:38:36 2009 -0300 ContactManager: Added support for blocking contacts. TelepathyQt4/Client/contact-manager.cpp | 83 ++++++++++++++++++++++++++++++- TelepathyQt4/Client/contact-manager.h | 12 ++++- TelepathyQt4/Client/contact.cpp | 27 +++++++++- TelepathyQt4/Client/contact.h | 5 ++ 4 files changed, 124 insertions(+), 3 deletions(-) commit 9399de114a7d3cd2e25a5a62e38598e5b960bbb2 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 27 17:39:02 2009 -0300 Contact: Make sure subscription/publishStateChanged is not emitted if nothing happened. TelepathyQt4/Client/contact.cpp | 6 ++++++ 1 file changed, 6 insertions(+) commit 09f2ca624df83b1951d64efd8cbb31906659feda Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 27 16:42:50 2009 -0300 ContactManager: Make it work with QT_NO_CAST_FROM_ASCII. TelepathyQt4/Client/contact-manager.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) commit fb7048e77432b50849fb077f9e6046071ceab656 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 27 16:39:33 2009 -0300 ContactManager: Fixed identifier for ContactList stored. TelepathyQt4/Client/contact-manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 3e079b1696fbd1f96a419a9f8084ac028c8fe6d3 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 27 16:36:59 2009 -0300 ContactManager: Un-inline identifierForType and typeForIdentifier. TelepathyQt4/Client/contact-manager.cpp | 23 +++++++++++++++++++++++ TelepathyQt4/Client/contact-manager.h | 23 ++--------------------- 2 files changed, 25 insertions(+), 21 deletions(-) commit faf0dc64bca7774bf743d9237c61669f69511c30 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 26 20:46:36 2009 -0300 Added roster example to gitignore. .gitignore | 1 + 1 file changed, 1 insertion(+) commit 8d6fef721ea99c7edddfff5862e0eeb7942d6d82 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 26 20:32:28 2009 -0300 Improved roster example to support add/auth/remove/deny contacts. examples/roster/roster-item.cpp | 27 +++++- examples/roster/roster-item.h | 6 +- examples/roster/roster-window.cpp | 178 ++++++++++++++++++++++++++++++++++++- examples/roster/roster-window.h | 16 ++++ 4 files changed, 219 insertions(+), 8 deletions(-) commit 9d2ddf8c30f836d8b0b17d402d0df85e8eb2b925 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 26 20:27:52 2009 -0300 Contact: Added debug. TelepathyQt4/Client/contact.cpp | 1 + 1 file changed, 1 insertion(+) commit 4db8495fdb45fad2607e00a0a450043753998f7c Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 26 20:32:06 2009 -0300 ContactManager: Added more debug. TelepathyQt4/Client/contact-manager.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 24736fe0ac2301ec97f4d5c9488c27214d5115f0 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 26 20:30:49 2009 -0300 ContactManager: Added warnings for when contacts appear on the wrong lists. Added warnings when local pending contacts appear on subscribe list and remote pending contacts appear on publish list. TelepathyQt4/Client/contact-manager.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) commit 2cc132718bc4c5649af7c592e592db7d4a7db1b8 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 26 20:29:20 2009 -0300 ContactManager: Renamed deny to remove on contact publication related methods. TelepathyQt4/Client/contact-manager.cpp | 10 ++++++---- TelepathyQt4/Client/contact-manager.h | 4 ++-- TelepathyQt4/Client/contact.cpp | 4 ++-- TelepathyQt4/Client/contact.h | 2 +- 4 files changed, 11 insertions(+), 9 deletions(-) commit 8bc2b9cb818b1297d05046ed2280a19c22ad0ac2 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 26 20:27:05 2009 -0300 Contact: Added removePresenceSubscription. TelepathyQt4/Client/contact.cpp | 9 +++++++++ TelepathyQt4/Client/contact.h | 1 + 2 files changed, 10 insertions(+) commit e626e587f9c8cf1ae2449fb5123e5c69ef4d3389 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 26 20:22:31 2009 -0300 ContactManager: Added canRemoveContactsPresenceSubscription/removeContactsPresenceSubscription. TelepathyQt4/Client/contact-manager.cpp | 24 ++++++++++++++++++++++++ TelepathyQt4/Client/contact-manager.h | 3 +++ 2 files changed, 27 insertions(+) commit 3be97118121d217a11b89d1d544f391cb20c9a3b Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 26 20:25:47 2009 -0300 ContactManager: Fixed check on canAuthorizeContactsPresencePublication. Contacts in local pending can always be added, even if the Channel::groupFlags() does not contain the flag CanAdd. So just check if the publish channel exists. TelepathyQt4/Client/contact-manager.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit 05aa885798872510ac5077ad979fbcffb9f63236 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 26 20:13:14 2009 -0300 Channel: Allow contacts on local pending list be added even if groupFlags does not contain FlagCanAdd. TelepathyQt4/Client/channel.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) commit e61178812f881490c9f69db2fcb4eb17b9198779 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 26 20:19:11 2009 -0300 Use full namespace on Channel and ConnectionManager signals. TelepathyQt4/Client/channel.h | 12 ++++++------ TelepathyQt4/Client/contact-manager.cpp | 30 +++++++++++++++--------------- TelepathyQt4/Client/contact-manager.h | 22 +++++++++++----------- tests/dbus/chan-group.cpp | 30 +++++++++++++++--------------- 4 files changed, 47 insertions(+), 47 deletions(-) commit 634b4b266fa77b0bf7182c19656feebe6ca6d685 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 25 14:36:06 2009 -0300 ContactManager: Store ReferencedHandles instead of uint on ContactListChannel. TelepathyQt4/Client/connection.cpp | 7 ++++--- TelepathyQt4/Client/contact-manager.h | 9 +++++---- 2 files changed, 9 insertions(+), 7 deletions(-) commit 2ff418d6f826af43231ffd95598d81abb5057f38 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 25 14:21:54 2009 -0300 Added roster example. This example will show all the contacts of a given account using gabble and track their presence status. configure.ac | 1 + examples/Makefile.am | 2 +- examples/roster/Makefile.am | 34 ++++++++++++ examples/roster/main.cpp | 27 +++++++++ examples/roster/roster-item.cpp | 45 +++++++++++++++ examples/roster/roster-item.h | 49 ++++++++++++++++ examples/roster/roster-window.cpp | 111 +++++++++++++++++++++++++++++++++++++ examples/roster/roster-window.h | 61 ++++++++++++++++++++ 8 files changed, 329 insertions(+), 1 deletion(-) commit 0b4bc4625db4616290861d1ba8e90d3b1ff18fb4 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 25 14:21:07 2009 -0300 Connection: Make connection works with current PendingHandles. PendingHandles now fails if some handle cannot be retrieved, so let's request one handle at a time. TelepathyQt4/Client/connection.cpp | 62 +++++++++++++++------------------ TelepathyQt4/Client/contact-manager.h | 14 ++++++++ 2 files changed, 43 insertions(+), 33 deletions(-) commit 206a263a5308d7b0489ae569fccb22e9f5db413b Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 25 14:18:18 2009 -0300 Connection: Proper check for status when using some methods. Some methods are used internally before the connection emits statusChanged and the status() returns Connected. For example ensureChannel is used by FeatureRoster but the connection status may not be Connected yet (waiting for all features to become ready before changing status). TelepathyQt4/Client/connection.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) commit 716bdf2c949acc2dc9b1c4939e809ac27c8e4407 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 25 14:16:05 2009 -0300 ContactManager: Fixed bug when iterating trough contact list channels and there is an invalid channel. TelepathyQt4/Client/contact-manager.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 92dc792eda00bad728c4aeb9bbddf30add1c5fda Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 25 12:30:27 2009 -0300 Contact: Default to blank message on subscription/publication methods. TelepathyQt4/Client/contact.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 4a5081dc8785b7aed9395a27cc7f1a513d953673 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 25 12:17:57 2009 -0300 ContactManager: Use the proper contacts for subscribe and publish lists. TelepathyQt4/Client/contact-manager.cpp | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) commit 2169747e0ac6e9908a54e94e36ab7ec0234cddbc Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 25 12:14:05 2009 -0300 Connection: Remove the check for handle == 0 on requesting channel handles and added a FIXME. TelepathyQt4/Client/connection.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) commit ad198b5c29ba0da9f5ecdf745e63dea118192145 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 25 10:54:41 2009 -0300 ContactManager: Make allKnownContacts return the cached contacts instead of a PendingOperation. TelepathyQt4/Client/contact-manager.cpp | 5 ++--- TelepathyQt4/Client/contact-manager.h | 3 +-- 2 files changed, 3 insertions(+), 5 deletions(-) commit 60bbdfa633d7a4da8272247a724350649a6f5316 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 24 20:18:40 2009 -0300 Contact: Added requestPresenceSubscription and authorize/denyPresencePublication support. TelepathyQt4/Client/contact-manager.cpp | 88 +++++++++++++++++++++++++++---- TelepathyQt4/Client/contact-manager.h | 15 +++++- TelepathyQt4/Client/contact.cpp | 27 ++++++++++ TelepathyQt4/Client/contact.h | 6 +++ 4 files changed, 124 insertions(+), 12 deletions(-) commit fbb32e878ff2cd13c9aa0693573dbc30a1b8011d Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 24 18:23:38 2009 -0300 ContactManager: Added signal that will be emitted when a contact asked to subscribe to your presence. TelepathyQt4/Client/contact-manager.cpp | 4 ++++ TelepathyQt4/Client/contact-manager.h | 3 +++ 2 files changed, 7 insertions(+) commit 9455b4769f0ddad2ad257b7f7404bc730b0b0138 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 24 18:07:31 2009 -0300 ContactManager: Update contacts subscription/publish state. TelepathyQt4/Client/contact-manager.cpp | 174 ++++++++++++++++++++++++++++--- TelepathyQt4/Client/contact-manager.h | 13 +++ 2 files changed, 174 insertions(+), 13 deletions(-) commit fd5e936d93d0339b88641e9ce59e5614239854b8 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 24 18:06:47 2009 -0300 Contact: Added stub subscription/publish state methods. TelepathyQt4/Client/contact.cpp | 28 +++++++++++++++++++++++++++- TelepathyQt4/Client/contact.h | 15 +++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) commit 19aa52e6d85c287035d4135571c59c8d19bea92e Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 24 13:56:57 2009 -0300 Channel: Changed channel to use QSet of contacts instead of QList. This make it easy to implement roster support, where contacts from different channels need to be merged. TelepathyQt4/Client/channel.cpp | 36 +++++++++++++++--------------- TelepathyQt4/Client/channel.h | 14 ++++++------ tests/dbus/chan-group.cpp | 46 +++++++++++++++++++-------------------- 3 files changed, 48 insertions(+), 48 deletions(-) commit abf0a1cf5f78c98ad8010df62cd2997f453a1efc Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 24 14:26:10 2009 -0300 Connection: Added initial roster support (FeatureRoster). TelepathyQt4/Client/connection.cpp | 107 +++++++++++++++++++++++++++++++ TelepathyQt4/Client/connection.h | 4 ++ TelepathyQt4/Client/contact-manager.cpp | 28 ++++++++ TelepathyQt4/Client/contact-manager.h | 43 +++++++++++++ 4 files changed, 182 insertions(+) commit c6b4d4ee439d62371de6250f25cbb081b6a04dbf Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 24 13:54:22 2009 -0300 Contact: Added qHash function for a contact QSharedPointer. TelepathyQt4/Client/contact.h | 6 ++++++ 1 file changed, 6 insertions(+) commit edc1b022efc62240405a1a47d4cca96e45e37a4b Author: Simon McVittie Date: Tue Mar 3 15:22:20 2009 +0000 Add contactlist example connection manager (unreviewed initial version) from telepathy-glib configure.ac | 1 + tests/lib/Makefile.am | 5 +- tests/lib/contactlist/Makefile.am | 38 + tests/lib/contactlist/conn.c | 591 ++++++++++ tests/lib/contactlist/conn.h | 65 ++ tests/lib/contactlist/connection-manager.c | 116 ++ tests/lib/contactlist/connection-manager.h | 62 + tests/lib/contactlist/contact-list-manager.c | 1578 ++++++++++++++++++++++++++ tests/lib/contactlist/contact-list-manager.h | 107 ++ tests/lib/contactlist/contact-list.c | 632 +++++++++++ tests/lib/contactlist/contact-list.h | 118 ++ tests/lib/contactlist/manager-file.py | 19 + 12 files changed, 3330 insertions(+), 2 deletions(-) commit 76bf1cccf70416d88d39202a03e725a4b6a2a639 Author: Simon McVittie Date: Tue Mar 3 15:21:49 2009 +0000 Add manager-file.py (unreviewed initial version) from telepathy-glib tools/Makefile.am | 1 + tools/manager-file.py | 171 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 172 insertions(+) commit 037e36da3122bde70a16f783abcb011ae9b164a8 Merge: 02e1654 0601a69 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 3 11:36:11 2009 -0300 Merge branch 'readiness' Reviewed-by: Simon McVittie (smcv) commit 0601a69b95fe49ba0f60dfc95af43f0087f57ab2 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 3 00:58:21 2009 -0300 Removed PendingReadyAccount in favor of PendingReady. TelepathyQt4/Client/PendingReadyAccount | 13 --- TelepathyQt4/Client/pending-ready-account.cpp | 110 ------------------------- TelepathyQt4/Client/pending-ready-account.h | 62 -------------- TelepathyQt4/Makefile.am | 4 - 4 files changed, 189 deletions(-) commit 3570d3c3f96a8d7db2fe43c55db261023bb60646 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 3 01:28:59 2009 -0300 Account: Moved updateProperties/retrieveAvatar to Private class. TelepathyQt4/Client/account.cpp | 143 ++++++++++++++++++++------------------- TelepathyQt4/Client/account.h | 3 - 2 files changed, 73 insertions(+), 73 deletions(-) commit 6ed5f5e8e262c999b97cc434fbccf0f8a0db1f26 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 3 00:51:31 2009 -0300 Account: Use ReadinessHelper class. TelepathyQt4/Client/account.cpp | 313 ++++++++++++++---------------------- TelepathyQt4/Client/account.h | 21 +-- examples/accounts/account-item.cpp | 2 +- tests/dbus/account-basics.cpp | 21 ++- 4 files changed, 147 insertions(+), 210 deletions(-) commit 1505d1c1db49c1e1fed5002fb19e5172a95e3a02 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 2 23:43:34 2009 -0300 Remove PendingReadyAccountManager in favor of PendingReady. TelepathyQt4/Client/PendingReadyAccountManager | 13 --- .../Client/pending-ready-account-manager.cpp | 111 -------------------- .../Client/pending-ready-account-manager.h | 62 ----------- TelepathyQt4/Makefile.am | 4 - 4 files changed, 190 deletions(-) commit e6fe2fa2841fadec36eb6df7bf4efaba40ca5125 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 2 23:40:38 2009 -0300 AccountManager: Use ReadinessHelper class. TelepathyQt4/Client/account-manager.cpp | 142 +++++++++++++------------------ TelepathyQt4/Client/account-manager.h | 14 ++- examples/accounts/accounts-window.cpp | 2 +- tests/dbus/account-basics.cpp | 2 +- 4 files changed, 67 insertions(+), 93 deletions(-) commit 0465cc87ff27d5088da434c5923102c45a54ec50 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 2 23:40:08 2009 -0300 Removed PendingReadyConnection in favor of PendingReady. TelepathyQt4/Client/PendingReadyConnection | 13 --- TelepathyQt4/Client/pending-ready-connection.cpp | 110 ---------------------- TelepathyQt4/Client/pending-ready-connection.h | 62 ------------ TelepathyQt4/Makefile.am | 4 - 4 files changed, 189 deletions(-) commit 474c8b3377616a6f9f84d212a9806fb841077d07 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 3 00:50:24 2009 -0300 Connection: Fixed check for missing features. TelepathyQt4/Client/connection.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 7e2c2218021360ad9c7565aba7597e26e5362e38 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 3 00:57:56 2009 -0300 ReadinessHelper: Proper return the proxy object on PendingReady::object(). TelepathyQt4/Client/readiness-helper.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit ba55c5d9de4793ba3dcc254cc2c5fcaf2c13e8de Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 2 22:07:34 2009 -0300 Makefile.am: when creating FIXME.out, search TelepathyQt4/Client as well as TelepathyQt4/ Also search for cpp/hpp files. Makefile.am | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 02e165450be83d662257e142dac8ff9319b13964 Merge: 68eec1b 349807c Author: Andre Moreira Magalhaes (andrunko) Date: Tue Mar 3 11:11:19 2009 -0300 Merge branch 'trivia' Reviewed-by: Simon McVittie (smcv) commit 349807c2478684f1bfb0a6d6b90077ee13fcb418 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Mar 2 22:07:34 2009 -0300 Makefile.am: when creating FIXME.out, search TelepathyQt4/Client as well as TelepathyQt4/ Also search for cpp/hpp files. Makefile.am | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 1cae45445c61252bf8a4cc13c6153f850dbb03fe Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 26 20:52:09 2009 -0300 chan-basics test: don't assume that IDs will be in a particular order. tests/dbus/chan-basics.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) commit 68eec1b3824de65c68bae12ca05ad801ca92eabb Author: Simon McVittie Date: Fri Feb 27 12:55:24 2009 +0000 .gitignore: Ignore detached signatures .gitignore | 1 + 1 file changed, 1 insertion(+) commit 1bab8eb08bb2971fcf1a270cd309535e5318d2a4 Author: Simon McVittie Date: Fri Feb 27 12:54:59 2009 +0000 Bump version to 0.1.0.1 NEWS | 5 +++++ configure.ac | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) commit 6d0c82fdc13dc11225e91ca27429cc9fcee01cf4 Author: Simon McVittie Date: Thu Feb 26 17:18:56 2009 +0000 configure.ac: version 0.1.0 configure.ac | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 9f9de66a44ebcdbd46d014c67cd359d936ed89dd Author: Simon McVittie Date: Thu Feb 26 17:18:43 2009 +0000 NEWS: explain what's in version 0.1.0 NEWS | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) commit 0505b4e37f5958ccb0e7994fa287e587e53becf7 Author: Simon McVittie Date: Thu Feb 26 17:12:37 2009 +0000 README: write a readme based on the one from telepathy-glib README | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) commit 4f77000cf96e3c453339084ac4f181b4adca86e4 Author: Simon McVittie Date: Thu Feb 26 17:12:14 2009 +0000 Documentation: mark TpPrototype as a prototype TelepathyQt4/Prototype/ConnectionFacade.h | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) commit 7445bf5c63a928899cf670b1c6cc4d997abf2109 Merge: cd17393 0e8ccfe Author: Simon McVittie Date: Tue Feb 24 13:32:54 2009 +0000 Merge branch 'dist' Reviewed-by: Andre Moreira Magalhaes (andrunko) commit cd17393d0343559d6890c1e701c03fd73aba4968 Author: Jan Date: Tue Feb 17 16:03:25 2009 +0100 *added requestStreams() Signed-off-by: Stefan Eilers TelepathyQt4/Prototype/StreamedMediaChannel.cpp | 35 +++++++++++++++++++++++ TelepathyQt4/Prototype/StreamedMediaChannel.h | 2 ++ 2 files changed, 37 insertions(+) commit 67f5b33b3d319954cd9d517ecbd237202460be30 Author: Stefan Eilers Date: Tue Feb 24 13:06:23 2009 +0100 Fixed issue: text channel was not closed if ChatChannel was deleted TelepathyQt4/Prototype/ChatChannel.cpp | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) commit 0e8ccfece492f826624d671cd580bca2593ed059 Author: Simon McVittie Date: Tue Feb 24 11:23:21 2009 +0000 Channel docs: remove trailing dot to fix linkification of enums At some point we should probably remove the trailing dot from *all* constructs that aren't sentences, since it's incorrect English, and also breaks doxygen parsing in some cases (like this one). TelepathyQt4/Client/channel.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 5738f5d97c369cef1b9ef9a73e271bf51a7e35eb Author: Simon McVittie Date: Tue Feb 24 11:11:33 2009 +0000 Connection: be consistent about the name of the first parameter to getContactAttributes The implementation and docs call it "handles", so make the header match. TelepathyQt4/Client/connection.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a64dd9f68458a33978d9f7b7172e3f96a33405b9 Author: Simon McVittie Date: Tue Feb 24 11:11:01 2009 +0000 DBusProxy: document parameters for invalidated() and link its name correctly TelepathyQt4/Client/dbus-proxy.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit 79dc30154d269ec50cbdfe2732e34d2afd90c55f Author: Simon McVittie Date: Tue Feb 24 11:09:49 2009 +0000 DBusProxy: format enum documentation the way doxygen wants it TelepathyQt4/Client/dbus-proxy.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) commit 327aa46a9907cffbab72bc9e47f3e0d223fe358c Author: Simon McVittie Date: Tue Feb 24 11:09:30 2009 +0000 PendingChannel: improve factual correctness of channel() TelepathyQt4/Client/pending-channel.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) commit b060a7ec29e884929384e031fb6ec734a6781ba5 Author: Simon McVittie Date: Tue Feb 24 11:09:10 2009 +0000 libqt4codegen: escape backslashes when generating doc-comments from the spec Otherwise, doxygen thinks they're a doxygen command and gets confused. tools/libqt4codegen.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 4233ee0afd0ca7d9c6688c82aae0599d7f99d4d6 Author: Simon McVittie Date: Tue Feb 24 11:08:35 2009 +0000 TextChannel docs: qualify signal names so doxygen finds them TelepathyQt4/Client/text-channel.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit 576e8e8c2d3d64005d5c76cc7a828b81a36496b5 Author: Simon McVittie Date: Tue Feb 24 11:08:18 2009 +0000 TextChannel constructor: document immutableProperties param TelepathyQt4/Client/text-channel.cpp | 3 +++ 1 file changed, 3 insertions(+) commit 21ba7bfb0d099406b3395aafaea5aed0b1890c8a Author: Simon McVittie Date: Tue Feb 24 11:08:05 2009 +0000 TextChannel docs: format enum docs how doxygen wants them TelepathyQt4/Client/text-channel.cpp | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) commit 31839fff0d846f27abf161e303e19c11e994e778 Author: Simon McVittie Date: Tue Feb 24 11:07:43 2009 +0000 Connection docs: improve English and be consistent with param names TelepathyQt4/Client/connection.cpp | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) commit 7686779e8e7e99ab6898ea48cc1abf3f02c3bc01 Author: Simon McVittie Date: Tue Feb 24 11:07:14 2009 +0000 Channel: more catching up with the rename to GroupMemberChangeDetails TelepathyQt4/Client/channel.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) commit c3d12dfdc8db42dd69068b155840ec18f13eda0f Author: Simon McVittie Date: Tue Feb 24 11:06:59 2009 +0000 Channel docs: qualify interface accessor names so the docs get attached TelepathyQt4/Client/channel.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) commit b94e5009416b07609c82dc6a58e6ef94b0d508b7 Author: Simon McVittie Date: Tue Feb 24 11:06:26 2009 +0000 Channel docs: correct signal documentation TelepathyQt4/Client/channel.cpp | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) commit 6e2d2e7b27de629a56cec5b44c91805f09f26f52 Author: Simon McVittie Date: Tue Feb 24 11:06:00 2009 +0000 Channel docs: catch up with rename of GroupMemberChangeInfo to GroupMemberChangeDetails TelepathyQt4/Client/channel.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit f83503410ecbab40a42532ebd01f8d0cce878966 Author: Simon McVittie Date: Tue Feb 24 11:05:40 2009 +0000 Channel docs: doxygen wants \return in all-lower-case TelepathyQt4/Client/channel.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit a2d208c0db8a71be40d9bd69bfd4ec30b358a943 Author: Simon McVittie Date: Tue Feb 24 11:05:22 2009 +0000 Channel docs: improve English and be consistent about param naming TelepathyQt4/Client/channel.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) commit d13d2441dd73aa549a745a4bf64edcb97529c427 Author: Simon McVittie Date: Tue Feb 24 11:04:44 2009 +0000 Account docs: improve English and be consistent about param naming TelepathyQt4/Client/account.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit 3e2347873d20728e835798cd8531f1fe0f447d02 Author: Simon McVittie Date: Tue Feb 24 11:04:28 2009 +0000 Account docs: catch up with change to setAvatar's signature TelepathyQt4/Client/account.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit b171215d11362ab2b1851e65afaf57fced8878e4 Author: Simon McVittie Date: Tue Feb 24 11:04:00 2009 +0000 AccountManager docs: improve English, be consistent about param name TelepathyQt4/Client/account-manager.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) commit f84ad772f70f3368ef2ec2f40313e8594d3bb127 Author: Simon McVittie Date: Tue Feb 24 10:05:04 2009 +0000 Documentation: fix some \headerfile directives TelepathyQt4/Client/pending-contact-attributes.cpp | 2 +- TelepathyQt4/Client/pending-handles.h | 2 +- TelepathyQt4/Client/referenced-handles.h | 2 +- TelepathyQt4/Client/streamed-media-channel.cpp | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) commit fdf95d25ea8a71e548b62431a5d6cee7215ef850 Author: Simon McVittie Date: Tue Feb 24 09:55:06 2009 +0000 Fix #include for PendingHandles moc TelepathyQt4/Client/pending-handles.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 394c401dbdea082316c4ffa1806366e7d4a75e6f Author: Simon McVittie Date: Tue Feb 24 09:54:57 2009 +0000 Fix #include for PendingContactAttributes MOC TelepathyQt4/Client/pending-contact-attributes.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 4a186cd7396e3255510b1c8ee7054ec56ffd3648 Author: Simon McVittie Date: Mon Feb 23 19:59:40 2009 +0000 tests/lib: delete built sources in clean (fixing distcheck) tests/lib/Makefile.am | 1 + 1 file changed, 1 insertion(+) commit a1b820df122ce767d525fb3de3d49729cbf982f0 Author: Simon McVittie Date: Mon Feb 23 19:59:26 2009 +0000 tests/lib: pass -I$(top_builddir) to C code to fix distcheck tests/lib/Makefile.am | 4 +++- tests/lib/csh/Makefile.am | 4 +++- tests/lib/echo2/Makefile.am | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) commit 14fdfb693df616c63acdd69db346584cd0cb40bd Author: Simon McVittie Date: Mon Feb 23 19:23:54 2009 +0000 Distribute TelepathyQt4/Client/PendingHandles TelepathyQt4/Makefile.am | 1 + 1 file changed, 1 insertion(+) commit 36db8654e5ed7a0d583be5cf74337bf393c1ffef Author: Simon McVittie Date: Mon Feb 23 18:53:39 2009 +0000 Revert "text-chan: workaround: don't assert that the Connection is ready when it should be" This reverts commit 10ecc7cc073fb51ada7c44dee7ee37c02b280d04. Since Andre's connection branch was merged, this shouldn't be necessary. tests/dbus/text-chan.cpp | 39 --------------------------------------- 1 file changed, 39 deletions(-) commit fb4fa3d8513ae1790ebb6d470dba81aa959ce5ba Merge: aab494b aaf0c4a Author: Simon McVittie Date: Mon Feb 23 18:50:41 2009 +0000 Merge branch 'ctor' Reviewed-by: Andre Moreira Magalhaes (andrunko) commit aab494bdeee93694c0ba50e891203cbc6ef4f2e6 Merge: 4b8618e c8663ba Author: Simon McVittie Date: Mon Feb 23 18:49:52 2009 +0000 Merge branch 'messages' Conflicts: TelepathyQt4/Makefile.am Reviewed-by: Andre Moreira Magalhaes (andrunko) commit 4b8618e99d2b52119122c606f4504bcbf0a28a11 Merge: 463d42a 5263719 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 23 15:38:34 2009 -0300 Merge branch 'connection' commit 526371993b8fa6238ea8cf0d14587804f18bc315 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 23 15:34:10 2009 -0300 Connection: Proper test if requestConnect will make the connection ready and change status. tests/dbus/conn-requests.cpp | 40 ++-------------------------------------- 1 file changed, 2 insertions(+), 38 deletions(-) commit b55b3818b63f7825749d3206dd91478c2d6ef220 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 23 15:22:34 2009 -0300 Connection: Added FeatureCore. TelepathyQt4/Client/connection.cpp | 19 +++++++++++-------- TelepathyQt4/Client/connection.h | 1 + 2 files changed, 12 insertions(+), 8 deletions(-) commit aaf0c4afa5a1143607293f0e2fd6d4eb8612780d Author: Simon McVittie Date: Mon Feb 23 18:21:30 2009 +0000 Message: group destructor with constructors, and implement operator!= TelepathyQt4/Client/message.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit 94442a7e2e2f666edaff6fb2a150f77bf4c487b6 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 23 15:17:58 2009 -0300 ReadinessHelper: Use proxy invalidation reason/message as error if proxy is invalid. TelepathyQt4/Client/readiness-helper.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 9cb2f91593f945d968a49d02c77f84bd848b8707 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 23 15:15:51 2009 -0300 Update copyright on Connection/ReadinessHelper. TelepathyQt4/Client/connection.cpp | 4 ++-- TelepathyQt4/Client/connection.h | 4 ++-- TelepathyQt4/Client/readiness-helper.cpp | 4 ++-- TelepathyQt4/Client/readiness-helper.h | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) commit 536e924c65bf538f64f40624f3251ab6bb712598 Merge: 463d42a c8663ba Author: Simon McVittie Date: Mon Feb 23 18:14:15 2009 +0000 Merge branch 'messages' Reviewed-by: Andre Moreira Magalhaes (andrunko) commit 6f5927f303acdd1cd3ec3ae247e9487a73451c8c Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 23 15:13:00 2009 -0300 Connection: Use reply.error() as invalidation error on gotStatus if there is an error. TelepathyQt4/Client/connection.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit 463d42a53f3c38ef71ccc464308a9b740fced388 Author: Simon McVittie Date: Mon Feb 23 11:56:49 2009 +0000 Ignore examples/accounts/accounts binary Reviewed-by: Olli Salli .gitignore | 1 + 1 file changed, 1 insertion(+) commit c8663ba5504e005cb416aef946a2d9e3f3b75b94 Author: Simon McVittie Date: Fri Feb 20 19:49:39 2009 +0000 Implement sending of complex messages (use at own risk) and inviting others Untested, but should work... TelepathyQt4/Client/text-channel.cpp | 21 +++++++++++++++++++++ TelepathyQt4/Client/text-channel.h | 7 +------ 2 files changed, 22 insertions(+), 6 deletions(-) commit 54a96a12ce7fc4bc252a9446336a80fdfbb66828 Author: Simon McVittie Date: Fri Feb 20 19:48:58 2009 +0000 Change Message(type, text) constructor to take a ChannelTextMessageType, and make it public TelepathyQt4/Client/message.cpp | 4 ++-- TelepathyQt4/Client/message.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) commit 0fadf80fbd766d05b1f150eadf38febb90e5dad7 Author: Simon McVittie Date: Fri Feb 20 19:43:48 2009 +0000 Implement sending of simple (plain text) messages TelepathyQt4/Client/message.cpp | 22 ++++++++++ TelepathyQt4/Client/message.h | 2 + TelepathyQt4/Client/text-channel.cpp | 78 ++++++++++++++++++++++++++++++++++ TelepathyQt4/Client/text-channel.h | 31 ++++++++++++-- tests/dbus/text-chan.cpp | 13 ++---- 5 files changed, 134 insertions(+), 12 deletions(-) commit c9aec9b9e3641ca7cd14612bf8c099931ed25583 Author: Simon McVittie Date: Fri Feb 20 18:57:45 2009 +0000 Move Message implementation to a separate source file, adding real API for things TextChannel needs to poke at In the process, fix Message::Private::textChannel: it was a pointer, but should clearly have been a QPointer. TelepathyQt4/Client/message.cpp | 551 ++++++++++++++++++++++++++++++++++ TelepathyQt4/Client/message.h | 18 +- TelepathyQt4/Client/text-channel.cpp | 515 +------------------------------ TelepathyQt4/Client/text-channel.h | 1 - TelepathyQt4/Makefile.am | 1 + 5 files changed, 585 insertions(+), 501 deletions(-) commit 16753fb26ec0543bcc7900c8b90b76284edd57cf Author: Simon McVittie Date: Fri Feb 20 18:12:25 2009 +0000 #include Message, ReceivedMessage TelepathyQt4/Client/text-channel.cpp | 2 ++ tests/dbus/text-chan.cpp | 2 ++ 2 files changed, 4 insertions(+) commit 501b0f834799e61443c72795611c9378a2a784e0 Author: Simon McVittie Date: Fri Feb 20 18:11:31 2009 +0000 Remove now-unnecessary inclusion from TextChannel TelepathyQt4/Client/text-channel.h | 2 -- 1 file changed, 2 deletions(-) commit 20efbbd7199d5373ac8e86edbd72883ff730c33c Author: Simon McVittie Date: Fri Feb 20 18:11:10 2009 +0000 Make Message private stuff actually private, and befriend ReceivedMessage ReceivedMessage and Message are implemented together, and share a private data structure, so having ReceivedMessage be a friend of Message seems reasonable. TelepathyQt4/Client/message.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit b7c9e86bb9b2f51795d6402883a0dd378069c416 Author: Simon McVittie Date: Fri Feb 20 18:09:46 2009 +0000 Move Message, ReceivedMessage declarations to their own header file TelepathyQt4/Client/Message | 13 +++++ TelepathyQt4/Client/ReceivedMessage | 13 +++++ TelepathyQt4/Client/message.h | 100 +++++++++++++++++++++++++++++++++++ TelepathyQt4/Client/text-channel.h | 64 +--------------------- TelepathyQt4/Makefile.am | 3 ++ 5 files changed, 131 insertions(+), 62 deletions(-) commit 33231e4d96e325b4fb76992a8903ca212cd71b2d Author: Simon McVittie Date: Fri Feb 20 18:03:08 2009 +0000 text-chan: Improve test coverage a little tests/dbus/text-chan.cpp | 54 +++++++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 24 deletions(-) commit 629187af11cfa709d9c2872ba1cdfc757088d272 Author: Simon McVittie Date: Fri Feb 20 17:27:39 2009 +0000 text-chan: test acknowledging and forgetting messages tests/dbus/text-chan.cpp | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) commit 41b2ec7d29cdcce38a4e54dfbcb5b293d175b7e5 Author: Simon McVittie Date: Fri Feb 20 17:27:29 2009 +0000 TextChannel: Implement acknowledge() and forget() (plural forms only) TelepathyQt4/Client/text-channel.cpp | 90 ++++++++++++++++++++++++++++++++++ TelepathyQt4/Client/text-channel.h | 26 ++-------- 2 files changed, 94 insertions(+), 22 deletions(-) commit 0483c90b9dbeb5b61e2163fb931975c39b867435 Author: Simon McVittie Date: Fri Feb 20 16:39:05 2009 +0000 text-chan: verify that we're notified about removed messages iff the channel has Messages tests/dbus/text-chan.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) commit be9429cfdbce74de69114b919db7a42bfad01c31 Author: Simon McVittie Date: Fri Feb 20 16:29:07 2009 +0000 text-chan test: Factor out remaining common test stuff tests/dbus/text-chan.cpp | 81 +++++++++++++--------------------------------- 1 file changed, 22 insertions(+), 59 deletions(-) commit c3d40c322339f806c90c9d83bae9d03f80c08053 Author: Simon McVittie Date: Fri Feb 20 16:23:30 2009 +0000 text-chan test: factor out more common stuff tests/dbus/text-chan.cpp | 87 ++++++++++++---------------------------------- 1 file changed, 22 insertions(+), 65 deletions(-) commit db33b98149c3242056654d53d62ca73ca08017bc Author: Simon McVittie Date: Fri Feb 20 16:16:04 2009 +0000 text-chan test: start to factor out common stuff tests/dbus/text-chan.cpp | 44 ++++++++++++++------------------------------ 1 file changed, 14 insertions(+), 30 deletions(-) commit 459c97dcd2102faa9e2923b6f3a674ba67740a5c Author: Simon McVittie Date: Fri Feb 20 16:11:41 2009 +0000 Fix text-chan test tests/dbus/text-chan.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) commit 37f069c213346e1608fd366be8824de35e76629e Author: Simon McVittie Date: Fri Feb 20 15:54:27 2009 +0000 echo2: use "content-type", not the obsolete "type" (also changed in telepathy-glib) tests/lib/echo2/chan.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit b289de4a5ed55c271fad1fc4ca40bcc61ff66e75 Author: Simon McVittie Date: Fri Feb 20 15:02:14 2009 +0000 text-chan test: verify that echoes are received correctly tests/dbus/text-chan.cpp | 117 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 109 insertions(+), 8 deletions(-) commit 929aab003b71078408bcb800fb756e88506bd20b Author: Simon McVittie Date: Fri Feb 20 14:51:08 2009 +0000 Message: add operator== TelepathyQt4/Client/text-channel.cpp | 8 ++++++++ TelepathyQt4/Client/text-channel.h | 1 + 2 files changed, 9 insertions(+) commit cc5a2cf04b23473f3c15ea7d60f1f7ad89e27862 Author: Simon McVittie Date: Fri Feb 20 14:09:10 2009 +0000 TextChannel: implement FeatureMessageQueue TelepathyQt4/Client/text-channel.cpp | 340 +++++++++++++++++++++++++++++++++- TelepathyQt4/Client/text-channel.h | 23 +-- 2 files changed, 338 insertions(+), 25 deletions(-) commit 188143cfd14e3619a08411f1e92d9e98b1b6a0ea Author: Simon McVittie Date: Fri Feb 20 14:08:48 2009 +0000 text-chan test: use ContactsConnection Tp-Qt4 doesn't have the necessary fallback code to make even basic Contact objects in the absence of the Contacts interface. tests/dbus/text-chan.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 10ecc7cc073fb51ada7c44dee7ee37c02b280d04 Author: Simon McVittie Date: Fri Feb 20 14:08:03 2009 +0000 text-chan: workaround: don't assert that the Connection is ready when it should be We should be able to revert this after Andre's Connection refactoring is reviewed. tests/dbus/text-chan.cpp | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) commit 16af78f7936e682e40a84297f7d95da74c4dffeb Author: Simon McVittie Date: Fri Feb 20 13:29:36 2009 +0000 TextChannel: keep track of what's going on to avoid connecting signals or calling methods redundantly Also use this information to make onTextReceived etc. return early if we haven't had the initial message dump (although in practice these slots don't do anything yet anyway). TelepathyQt4/Client/text-channel.cpp | 123 +++++++++++++++++++++++++--------- 1 file changed, 91 insertions(+), 32 deletions(-) commit 434b934315d62fed60d36edb5b4b4b145cb29e84 Author: Simon McVittie Date: Fri Feb 20 13:10:50 2009 +0000 TextChannel: Rename desiredFeatures to pendingFeatures and guarantee that it does not contain features that are already ready. Also, don't connect to MessageReceived etc. more than once, if continueReadying() is somehow invoked twice while we are still trying to get the message queue. TelepathyQt4/Client/text-channel.cpp | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) commit ee2a6fc40a53aba13d8ad47bf2dcb82182b878f1 Author: Simon McVittie Date: Fri Feb 20 12:07:31 2009 +0000 Remove obsolete API-sketch documentation from header TelepathyQt4/Client/text-channel.h | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) commit 6f2cc626d892e1f3704f2510742cb5b8368439d4 Author: Simon McVittie Date: Fri Feb 20 12:11:04 2009 +0000 ReceivedMessage: change ctor to not take the sender as a parameter We don't immediately have a Contact object for the sender, so we have to add it later. TelepathyQt4/Client/text-channel.cpp | 3 +-- TelepathyQt4/Client/text-channel.h | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) commit ffed91f1b11ae83a5e7c4e641ce04f0a0ada9353 Author: Simon McVittie Date: Fri Feb 20 12:10:09 2009 +0000 Message: add a default constructor for internal use It turns out to be useful to be able to have a null Message; we need to have an event queue that lists structures containing either a message or a "message-removal event". Pending message IDs aren't necessarily unique, so we can't process message-removal events out of order. TelepathyQt4/Client/text-channel.cpp | 14 ++++++++++++++ TelepathyQt4/Client/text-channel.h | 2 ++ 2 files changed, 16 insertions(+) commit 6980b21b5c911ab4eafc2c9136e6a7262791d8c3 Author: Simon McVittie Date: Fri Feb 20 12:02:19 2009 +0000 Message::Private: add accessors for sender handle and pending ID TelepathyQt4/Client/text-channel.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) commit 2a8fa3dbaf26dce34e98bc99288b35fc2550f6e4 Author: Simon McVittie Date: Thu Feb 19 15:16:40 2009 +0000 TextChannel: test Message and FeatureMessageSentSignal tests/dbus/text-chan.cpp | 157 +++++++++++++++++++++++++++++++++++++--------- 1 file changed, 126 insertions(+), 31 deletions(-) commit a8f033ff946426d1ae477d463652e105e922501e Author: Simon McVittie Date: Thu Feb 19 14:38:04 2009 +0000 TextChannel: Implement MessageSent as a Feature Unlike in the API sketch, give messageSent a const Message &; there's no point in being inefficient. TelepathyQt4/Client/text-channel.cpp | 71 ++++++++++++++++++++++++++-------- TelepathyQt4/Client/text-channel.h | 6 ++- 2 files changed, 58 insertions(+), 19 deletions(-) commit a312ee26fc9f2fca9f7e32e1ded923544a6398b4 Author: Simon McVittie Date: Thu Feb 19 14:37:28 2009 +0000 Implement most of Message and ReceivedMessage Change Message::size() to return int, consistent with QList. TelepathyQt4/Client/text-channel.cpp | 439 ++++++++++++++++++++++++++++++++++ TelepathyQt4/Client/text-channel.h | 69 ++---- 2 files changed, 453 insertions(+), 55 deletions(-) commit 8a7ca050beeb95e4fa080d43f68e3691d31631fc Author: Simon McVittie Date: Wed Feb 18 19:01:03 2009 +0000 Test TextChannel::FeatureMessageCapabilities tests/dbus/text-chan.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 8496868e66ae00dc4c3c46461af8cf9416135d19 Author: Simon McVittie Date: Wed Feb 18 19:00:38 2009 +0000 TextChannel: Implement canInviteContacts and the Capabilities feature TelepathyQt4/Client/text-channel.cpp | 78 +++++++++++++++++++++++++++++++++- TelepathyQt4/Client/text-channel.h | 25 +---------- 2 files changed, 79 insertions(+), 24 deletions(-) commit 05665692d6ffaf29bc6653704f3f3503c135837a Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 19 11:39:02 2009 -0300 ReadinessHelper: Make becomeReady fail if requestedFeatures contains an invalid feature. TelepathyQt4/Client/readiness-helper.cpp | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) commit e59ab0619b9964931b1b85aeef6fdd2f5fce3392 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 19 11:37:55 2009 -0300 ReadinessHelper: Fixed bug when using QSet::intersect. QSet::intersect modifies the set, so make a copy of it before using intersect. TelepathyQt4/Client/readiness-helper.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 423a88f33f2fe3bef1894dd19f99fefcfad60564 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 19 11:18:13 2009 -0300 ReadinessHelper: Make operations fail if proxy object gets deleted. TelepathyQt4/Client/connection.cpp | 2 +- TelepathyQt4/Client/readiness-helper.cpp | 53 +++++++++++++++++++++++++++--- TelepathyQt4/Client/readiness-helper.h | 8 ++++- 3 files changed, 56 insertions(+), 7 deletions(-) commit 6279cf45f4fa7b6bb398586f50c339f815559ceb Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 18 19:44:29 2009 -0300 Fixed tests to work with Connection changes. tests/dbus/chan-basics.cpp | 7 ++++--- tests/dbus/chan-group.cpp | 2 +- tests/dbus/conn-basics.cpp | 9 +++++---- tests/dbus/conn-requests.cpp | 2 +- tests/dbus/contacts.cpp | 7 ++++--- tests/dbus/handles.cpp | 2 +- tests/pinocchio/conn-basics.cpp | 14 +++++--------- 7 files changed, 21 insertions(+), 22 deletions(-) commit 4a267dbf15f808e0b52a9761d1aef1f1aed99193 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 18 19:43:31 2009 -0300 Connection: Use ReadinessHelper class (sanitize code and fix some bugs). P.s: Tests broken (will be fixed in a later patch) TelepathyQt4/Client/connection-internal.h | 6 +- TelepathyQt4/Client/connection.cpp | 638 +++++++++-------------------- TelepathyQt4/Client/connection.h | 19 +- 3 files changed, 213 insertions(+), 450 deletions(-) commit dfc5dd9073c85027096703b6c2356c75d1939295 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 18 19:42:01 2009 -0300 Added ReadinessHelper and PendingReady classes. ReadinessHelper is a helper class that should be used by all classes that wants to implement isReady/becomeReady mechanisms. PendingReady is a class used by ReadinessHelper::becomeReady. TelepathyQt4/Client/PendingReady | 13 ++ TelepathyQt4/Client/ReadinessHelper | 13 ++ TelepathyQt4/Client/pending-ready.cpp | 106 +++++++++ TelepathyQt4/Client/pending-ready.h | 62 ++++++ TelepathyQt4/Client/readiness-helper.cpp | 350 ++++++++++++++++++++++++++++++ TelepathyQt4/Client/readiness-helper.h | 113 ++++++++++ TelepathyQt4/Makefile.am | 8 + 7 files changed, 665 insertions(+) commit 4eb08cc4e1b119f48f4f7ef555048fc9f7280e41 Author: Simon McVittie Date: Wed Feb 18 18:55:13 2009 +0000 TextChannel: Improve documentation TelepathyQt4/Client/text-channel.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) commit e72a8b6207e1ae62a9724fff092375408a3c06b7 Author: Simon McVittie Date: Wed Feb 18 18:29:53 2009 +0000 Add stub documentation for TextChannel::Features TelepathyQt4/Client/text-channel.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) commit 7e97df303cce8545fc14d87c8da6409fcb845f14 Author: Simon McVittie Date: Wed Feb 18 18:26:32 2009 +0000 Test the TextChannel so far tests/dbus/Makefile.am | 11 +- tests/dbus/text-chan.cpp | 311 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 320 insertions(+), 2 deletions(-) commit c460be1ca8c2dbfd072a55739b28b6a2eb9a650d Author: Simon McVittie Date: Wed Feb 18 18:26:16 2009 +0000 TextChannel: implement isReady, becomeReady, hasMessagesInterface Also connect to the Sent or MessageSent signal (as appropriate). Limitations: - becomeReady() for the MessageQueue feature fetches the necessary info but doesn't do anything with it yet - The MessageCapabilities feature should work, but there are no accessors - It's unclear when the signals for sent messages start to be guaranteed TelepathyQt4/Client/text-channel.cpp | 276 ++++++++++++++++++++++++++++++++++ TelepathyQt4/Client/text-channel.h | 33 +++- 2 files changed, 301 insertions(+), 8 deletions(-) commit 85f5fc463fc9c5c82edb3be50225ef74707ecfb7 Author: Simon McVittie Date: Wed Feb 18 16:29:47 2009 +0000 Import the echo example from telepathy-glib Also add a note to tests/lib/Makefile.am about why it's not dealt with in the same way as our modified versions of the csh and echo2 examples: we should fix that divergence in future. configure.ac | 1 + tests/lib/Makefile.am | 12 +- tests/lib/echo/Makefile.am | 25 ++ tests/lib/echo/chan.c | 531 +++++++++++++++++++++++++++++++++++ tests/lib/echo/chan.h | 58 ++++ tests/lib/echo/conn.c | 194 +++++++++++++ tests/lib/echo/conn.h | 55 ++++ tests/lib/echo/connection-manager.c | 95 +++++++ tests/lib/echo/connection-manager.h | 53 ++++ tests/lib/echo/im-manager.c | 389 +++++++++++++++++++++++++ tests/lib/echo/im-manager.h | 54 ++++ 11 files changed, 1465 insertions(+), 2 deletions(-) commit c7498e34050776b3f991da089e9bb3213e7ee09b Author: Simon McVittie Date: Wed Feb 18 15:04:54 2009 +0000 PendingReadyChannel: add TextChannel as a friend so it can instantiate us TelepathyQt4/Client/pending-ready-channel.h | 1 + 1 file changed, 1 insertion(+) commit d765ee677747046abaf731bd6032f388b9a95d43 Author: Simon McVittie Date: Wed Feb 18 15:04:19 2009 +0000 Channel: expose messagesInterface() accessor TelepathyQt4/Client/channel.h | 6 ++++++ 1 file changed, 6 insertions(+) commit 189039169052c58f6d0e10d9138ea94cd71602cc Merge: be313ca ed37f4a Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 18 10:16:05 2009 -0300 Merge branch 'trivia' commit be313ca3fd111dd0555f24956ab8f80f0f322416 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 17 10:33:46 2009 -0300 Account: Support non spec-compliant account-specific part on account object path. TelepathyQt4/Client/account.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) commit c939545335f1cff18cc1d4e92f3ec70cd0b5ec2e Author: Simon McVittie Date: Tue Feb 17 15:45:09 2009 +0000 Sketch out the TextChannel API (currently all #if 0, please enable each method as it's implemented) TelepathyQt4/Client/text-channel.h | 223 ++++++++++++++++++++++++++++++++++++ 1 file changed, 223 insertions(+) commit 263d167a9aef613ace7b9118482a998a604bb084 Merge: 825836a e2b79f1 Author: Simon McVittie Date: Tue Feb 17 16:59:55 2009 +0000 Merge branch 'tests' Reviewed-by: Olli Salli commit e2b79f170d7cf95d25f3a3b12463d88a530603f6 Author: Simon McVittie Date: Tue Feb 17 16:50:58 2009 +0000 cm-basics: Work around fd.o#20165 by ensuring there is a ref to the TpDBusDaemon configure.ac | 2 +- tests/dbus/cm-basics.cpp | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) commit 9e02607e6c25221dc5c4890785efb84477bf6e2c Author: Simon McVittie Date: Tue Feb 17 16:28:02 2009 +0000 tp-glib tests: initialize dbus-glib In recent telepathy-glib versions, this must be done before instantiating a TpBaseConnection subclass like our SimpleConnection. tests/dbus/chan-basics.cpp | 1 + tests/dbus/chan-group.cpp | 1 + tests/dbus/cm-basics.cpp | 1 + tests/dbus/conn-basics.cpp | 1 + tests/dbus/conn-requests.cpp | 1 + tests/dbus/contacts.cpp | 1 + tests/dbus/handles.cpp | 1 + 7 files changed, 7 insertions(+) commit ed37f4ad3586722469221b7de052e66d00361fc5 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 17 10:33:46 2009 -0300 Account: Support non spec-compliant account-specific part on account object path. TelepathyQt4/Client/account.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) commit 825836a94575222a4b0735e8330f668bf4a180b2 Merge: e82bcaf 1d8da8a Author: Olli Salli Date: Sun Feb 15 13:51:03 2009 +0200 Merge branch 'trivia-readiness' of git://git.collabora.co.uk/git/user/andrunko/telepathy-qt4 commit e82bcaf55effa79f95e60abade3377b3cb751134 Merge: 53be3a0 74a628f Author: Olli Salli Date: Sun Feb 15 13:33:21 2009 +0200 Merge branch 'channel' of git://git.collabora.co.uk/git/user/andrunko/telepathy-qt4 commit 53be3a037ff5e3c6a730d0d16c7c587424202889 Merge: 1206a1d 2e5bc7a Author: Olli Salli Date: Sun Feb 15 13:10:57 2009 +0200 Merge branch 'trivia-shared-pointer' of git://git.collabora.co.uk/git/user/andrunko/telepathy-qt4 commit 1d8da8a8597ea1e2fbc081b999e82295c4ef0b8c Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 13 17:56:00 2009 -0300 Fixed tests to work with new PendingReady stuff. tests/dbus/account-basics.cpp | 1 + tests/dbus/chan-basics.cpp | 2 ++ tests/dbus/chan-group.cpp | 2 ++ tests/dbus/cm-basics.cpp | 1 + tests/dbus/conn-basics.cpp | 1 + tests/dbus/conn-requests.cpp | 1 + tests/dbus/contacts.cpp | 1 + tests/dbus/handles.cpp | 1 + tests/pinocchio/cm-basics.cpp | 1 + tests/pinocchio/conn-basics.cpp | 2 ++ 10 files changed, 13 insertions(+) commit a8a63f51e6f66f2868a9e027d2d38dd50e05d7cc Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 13 17:55:43 2009 -0300 Fixed examples to work with new PendingReady stuff. examples/accounts/accounts-window.cpp | 1 + 1 file changed, 1 insertion(+) commit 5a01abd2948378531182104463c57ca7c3e56b79 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 13 17:55:11 2009 -0300 Channel: Use PendingReadyChannel. P.s: Tests broken (will be fixed in a later patch) TelepathyQt4/Client/channel.cpp | 48 ++++++++++++++++++--------------------- TelepathyQt4/Client/channel.h | 3 ++- 2 files changed, 24 insertions(+), 27 deletions(-) commit c6271ae6393f206ab2b480ff6b9a10ac71dba0ab Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 13 17:54:57 2009 -0300 ConnectionManager: Use PendingReadyConnectionManager. P.s: Tests broken (will be fixed in a later patch) TelepathyQt4/Client/account.cpp | 1 + TelepathyQt4/Client/connection-manager-internal.h | 14 ++--------- TelepathyQt4/Client/connection-manager.cpp | 27 +++++++++++---------- TelepathyQt4/Client/connection-manager.h | 4 +-- 4 files changed, 19 insertions(+), 27 deletions(-) commit e9ab3adf4d5a042463f333e231fb42ad7cd6b86e Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 13 17:54:35 2009 -0300 Connection: Use PendingReadyConnection. P.s: Tests broken (will be fixed in a later patch) TelepathyQt4/Client/connection.cpp | 54 +++++++++++++++--------------------- TelepathyQt4/Client/connection.h | 3 +- 2 files changed, 25 insertions(+), 32 deletions(-) commit 16362355e534c75c04384647c2248d95690c53f6 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 13 17:53:36 2009 -0300 AccountManager: Use PendingReadyAccountManager. P.s: Tests broken (will be fixed in a later patch) TelepathyQt4/Client/account-manager.cpp | 48 ++++++++++++++----------------- TelepathyQt4/Client/account-manager.h | 4 +-- 2 files changed, 23 insertions(+), 29 deletions(-) commit 1e0e6e4585fb6c77d4a6ffaba175d03ddb00a4f5 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 13 17:10:04 2009 -0300 Changed PendingReadyAccount features method to requestedFeatures. TelepathyQt4/Client/account.cpp | 10 +++++----- TelepathyQt4/Client/pending-ready-account.cpp | 14 +++++++------- TelepathyQt4/Client/pending-ready-account.h | 4 ++-- 3 files changed, 14 insertions(+), 14 deletions(-) commit 3917986e5ff028c2d4cb1b37a270a7ca649bd091 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 13 16:24:58 2009 -0300 Added PendingReadyConnectionManager. TelepathyQt4/Client/PendingReadyConnectionManager | 13 +++ .../Client/pending-ready-connection-manager.cpp | 110 ++++++++++++++++++++ .../Client/pending-ready-connection-manager.h | 62 +++++++++++ TelepathyQt4/Makefile.am | 4 + 4 files changed, 189 insertions(+) commit b9551052f27d99e348486088be3900797917db8b Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 13 16:23:33 2009 -0300 ConnectionManager: Added features param on isReady/becomeReady. TelepathyQt4/Client/connection-manager-internal.h | 1 + TelepathyQt4/Client/connection-manager.cpp | 12 +++++++----- TelepathyQt4/Client/connection-manager.h | 9 +++++++-- 3 files changed, 15 insertions(+), 7 deletions(-) commit 431386ac0f38efeca7460f89223522057cf42c8a Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 13 16:19:58 2009 -0300 Added PendingReadyConnection. TelepathyQt4/Client/PendingReadyConnection | 13 +++ TelepathyQt4/Client/pending-ready-connection.cpp | 110 ++++++++++++++++++++++ TelepathyQt4/Client/pending-ready-connection.h | 62 ++++++++++++ TelepathyQt4/Makefile.am | 4 + 4 files changed, 189 insertions(+) commit e3575f69d1dc9d470f780d504ae4764df6159e8e Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 13 16:19:09 2009 -0300 Added PendingReadyChannel. TelepathyQt4/Client/PendingReadyChannel | 13 +++ TelepathyQt4/Client/pending-ready-channel.cpp | 110 +++++++++++++++++++++++++ TelepathyQt4/Client/pending-ready-channel.h | 62 ++++++++++++++ TelepathyQt4/Makefile.am | 4 + 4 files changed, 189 insertions(+) commit d816075c5908a051b440d816d35ae435dc5d9299 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 13 17:16:29 2009 -0300 Added PendingReadyAccountManager. TelepathyQt4/Client/PendingReadyAccountManager | 13 +++ .../Client/pending-ready-account-manager.cpp | 111 ++++++++++++++++++++ .../Client/pending-ready-account-manager.h | 62 +++++++++++ TelepathyQt4/Makefile.am | 4 + 4 files changed, 190 insertions(+) commit 1206a1d0d1208b5beb45526716c6d8d352c81d9d Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 13 15:10:14 2009 -0300 Account: Change presenceChanged signal to currentPresenceChanged. TelepathyQt4/Client/account.cpp | 2 +- TelepathyQt4/Client/account.h | 2 +- examples/accounts/account-item.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) commit 0202ff1d803bc6678c0d15cbb76870e46c65fc02 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 13 15:42:04 2009 -0300 Channel: Changed PendingFailure reason. TelepathyQt4/Client/channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit ebc899dc7906cf50cc4f043eb620106568f22ac0 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 13 15:41:43 2009 -0300 Account: Only start introspection/become ready if valid. TelepathyQt4/Client/account.cpp | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) commit cc002780710e33811d00737984157e2fe4b9ed45 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 13 15:29:50 2009 -0300 AccountManager: Only start introspection/become ready if valid. TelepathyQt4/Client/account-manager.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) commit fa59b8d8a712367793a52839ef2ec36e73a7d1c8 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 13 15:42:28 2009 -0300 Connection: Only start introspection/become ready if valid. TelepathyQt4/Client/connection.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) commit 87ef9929613bff65dcdde9098974eda85ace8dfe Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 13 15:42:52 2009 -0300 ConnectionManager: Only start introspection/become ready if valid. TelepathyQt4/Client/connection-manager.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) commit 647431ea528c038ed123f280ebd0e8ec7f76ceb2 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 13 15:28:56 2009 -0300 DBusProxy: Invalidate if dbus connection is disconnected. TelepathyQt4/Client/dbus-proxy.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit 2e5bc7a1766df79b66eaa51f98afc1f91f932b28 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 13 14:32:55 2009 -0300 Account: Make AccountManager/PendingAccount return a QSharedPointer instead of Account *. TelepathyQt4/Client/account-manager.cpp | 33 +++++++++++++++++++++---------- TelepathyQt4/Client/account-manager.h | 11 ++++++----- TelepathyQt4/Client/pending-account.cpp | 16 ++++++++------- TelepathyQt4/Client/pending-account.h | 5 +++-- tests/dbus/account-basics.cpp | 5 +++-- 5 files changed, 44 insertions(+), 26 deletions(-) commit 624bd5c786738f7a5d541f5e041cee1e06a368c8 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 13 15:02:45 2009 -0300 Channel: Make PendingChannel return a QSharedPointer instead of Channel *. TelepathyQt4/Client/pending-channel.cpp | 41 ++++++++++++++++++------------- TelepathyQt4/Client/pending-channel.h | 5 ++-- tests/dbus/chan-basics.cpp | 8 +++--- tests/dbus/chan-group.cpp | 9 +++---- tests/dbus/conn-requests.cpp | 4 +-- 5 files changed, 36 insertions(+), 31 deletions(-) commit 62ff88d23d3ca19194c199949a38ca82f168cbba Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 13 14:48:04 2009 -0300 Connection: Make PendingConnection return a QSharedPointer instead of Connection *. TelepathyQt4/Client/pending-connection.cpp | 17 ++++++++++------- TelepathyQt4/Client/pending-connection.h | 5 +++-- tests/pinocchio/cm-basics.cpp | 2 +- 3 files changed, 14 insertions(+), 10 deletions(-) commit 74a628f31f386dd55fedab2ab5721a287df374ef Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 13 11:44:44 2009 -0300 Channel: Improved tests to also test fallbacks. tests/dbus/chan-group.cpp | 42 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 5 deletions(-) commit fe409e171c848062e35b498ac84113e478a38b10 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 13 11:42:05 2009 -0300 Add support for channel without properties on csh, so fallbacks on Telepathy::Client::Channel can be tested. tests/lib/csh/conn.c | 21 +++++++++++++++++++++ tests/lib/csh/conn.h | 3 +++ tests/lib/csh/room-manager.c | 18 +++++++++++++++++- tests/lib/csh/room-manager.h | 3 +++ tests/lib/csh/room.c | 17 +++++++++++++++-- tests/lib/csh/room.h | 29 +++++++++++++++++++++++++++++ 6 files changed, 88 insertions(+), 3 deletions(-) commit b868cca802143068715410c69f90091860b45b71 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 12 16:53:51 2009 -0300 Channel: Proper build initial members when using fallbacks. TelepathyQt4/Client/channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit edea6158876985a8abf179a5d51bf4c88eb0e562 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 12 14:22:11 2009 -0300 Fixed .gitignore to just ignore the proper m4/* files that are not tracked. .gitignore | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 8bf7fdd3f3eab85ea9c06c76a9e99fe3a1e0e0b6 Author: Olli Salli Date: Thu Feb 12 20:00:20 2009 +0200 Re-add stupidly removed return TelepathyQt4/Client/channel.cpp | 1 + 1 file changed, 1 insertion(+) commit 0eafdd3b1936135c358d0f1de6c9a47470e3883a Author: Olli Salli Date: Thu Feb 12 19:55:27 2009 +0200 Remove superfluous return and recursive pMC() call in processMembersChanged() TelepathyQt4/Client/channel.cpp | 4 ---- 1 file changed, 4 deletions(-) commit 3c0ad1b75458bcac908850569208a8ca45c51af8 Author: Olli Salli Date: Thu Feb 12 18:28:18 2009 +0200 Make the Channel initial contacts and Group faking use the standard MCD handling mechanism TelepathyQt4/Client/channel.cpp | 275 ++++++++++++++++++++++----------------- 1 file changed, 158 insertions(+), 117 deletions(-) commit ebed4906bff8ca260aeed515d7e0715cd0e2fa57 Author: Olli Salli Date: Thu Feb 12 08:31:35 2009 +0200 Clean up LocalPendingInfo-using logic in Channel Yes, the unit tests still pass. However, initial LPI doesn't still actually work - test coverage should be improved as a fairly high priority task. It should start working quite soon though. TelepathyQt4/Client/channel.cpp | 59 ++++++++------------------------------- 1 file changed, 11 insertions(+), 48 deletions(-) commit 2ed017419430bcaf0faa6f2c071a88823a7e8373 Author: Olli Salli Date: Thu Feb 12 08:19:53 2009 +0200 Make the Channel::Private layout more readable TelepathyQt4/Client/channel.cpp | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) commit e6fdf1954c8bc8010e4ff027c85968bbfb14ef08 Author: Olli Salli Date: Thu Feb 12 08:10:18 2009 +0200 Make channel.h sligthtly more logically emptyline-separated TelepathyQt4/Client/channel.h | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) commit 2d9db6a8f8fe3893cba73552807a09a7e0a1d3df Author: Olli Salli Date: Thu Feb 12 19:12:56 2009 +0200 Store the delta lists too in the chan-group test onMembersChanged tests/dbus/chan-group.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) commit 0cd439b9d6b37a636d203edc974256f4c4ee1909 Author: Olli Salli Date: Thu Feb 12 19:06:03 2009 +0200 CSH emits removing two contacts at once as two membersChanged signals - wait for two in the test accordingly tests/dbus/chan-group.cpp | 2 ++ 1 file changed, 2 insertions(+) commit 174abcbdd01ec0358cb4135ee6124c503b0d72ee Merge: 18db555 a3f5872 Author: Olli Salli Date: Thu Feb 12 19:24:01 2009 +0200 Merge branch 'trivia' of git://git.collabora.co.uk/git/user/andrunko/telepathy-qt4 commit 18db5552c1cf8b17e35de8b5b109115011fbd8ba Merge: a7d7cd9 d6fa0d0 Author: Olli Salli Date: Thu Feb 12 19:22:28 2009 +0200 Merge branch 'trivia' commit a7d7cd964b6dfd56ff8f4541d338be31e4c98dde Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 12 12:58:47 2009 -0300 Account: Proper check if Connection property is not a QDBusObjectPath. TelepathyQt4/Client/account.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d6fa0d089197f5d4968d4f1cb18a7371ba5b82e9 Author: Olli Salli Date: Thu Feb 12 18:47:21 2009 +0200 The account example CFLAGS must include QTCORE_CFLAGS too. examples/accounts/Makefile.am | 1 + 1 file changed, 1 insertion(+) commit a3f587271384f13e6e85bfa34ffc7e56dab083b5 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 12 12:58:47 2009 -0300 Account: Proper check if Connection property is not a QDBusObjectPath. TelepathyQt4/Client/account.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d68098f0ae1c18107660e2c4c3c6f60433cba2c4 Author: George Goldberg Date: Thu Feb 12 15:02:05 2009 +0000 Add /m4/* directory to .gitignore. .gitignore | 1 + 1 file changed, 1 insertion(+) commit c43f94ca1ab143a7411bdfe0cb8f3f8b066f4cab Author: George Goldberg Date: Thu Feb 12 15:00:24 2009 +0000 Actually install header file: TelepathyQt4/Client/PendingContacts. TelepathyQt4/Makefile.am | 1 + 1 file changed, 1 insertion(+) commit 6647cd5b3704783cbc488f33cc8ad43b1eb09eb0 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 12 11:52:48 2009 -0300 Channel: Improved chan-group test. tests/dbus/chan-group.cpp | 300 ++++++++++++++++++++++----------------------- 1 file changed, 147 insertions(+), 153 deletions(-) commit 454c3e24a2f55adef58b8582f22620ec5fada686 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 12 01:51:53 2009 -0300 Account: Added accounts example that list all accounts exposed by AM. configure.ac | 1 + examples/Makefile.am | 2 +- examples/accounts/Makefile.am | 33 +++++++ examples/accounts/account-item.cpp | 158 +++++++++++++++++++++++++++++++++ examples/accounts/account-item.h | 88 ++++++++++++++++++ examples/accounts/accounts-window.cpp | 95 ++++++++++++++++++++ examples/accounts/accounts-window.h | 55 ++++++++++++ examples/accounts/main.cpp | 21 +++++ 8 files changed, 452 insertions(+), 1 deletion(-) commit 764c7021f1e4c841a1fd20171fd67b92c8a82f07 Author: Olli Salli Date: Thu Feb 12 07:42:51 2009 +0200 Add workaround trying QString instead of QDBusObjectPath for Account PropertiesChanged for "Connection" TelepathyQt4/Client/account.cpp | 6 ++++++ 1 file changed, 6 insertions(+) commit d48165489ecf50b7d71f2cbe0503d46e92836d8e Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 12 01:49:20 2009 -0300 Account: Added more debug and fixed emission of nicknameChanged. TelepathyQt4/Client/account.cpp | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) commit 520285ab07593fe014f8906aaf1454f943b1a5f9 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 11 17:55:33 2009 -0300 Account: Fixed account to return the proper manager if the manager was not used as parent object. TelepathyQt4/Client/account.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) commit 9c3a773c033ec1c85fb0fa0a982694cc6424b9e0 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 11 14:52:46 2009 -0300 ManagerFile: Proper check for XDG_DATA_DIRS. TelepathyQt4/manager-file.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) commit b6f6fee9e9cfd2489829a1df3c5d7ff05fa87a45 Author: Olli Salli Date: Wed Feb 11 18:31:35 2009 +0200 Fix one signal emission to actually compile (the previous revert commit only partially did its job) TelepathyQt4/Client/channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit bfba06ccade0bc7d55332464e7701de9bbc56687 Author: Olli Salli Date: Wed Feb 11 16:30:43 2009 +0200 Revert "Channel: Add contact param to groupSelfContactChanged signal." This reverts commit 1c99d0be2dafcde0f7634cde73991443af9910fb. Conflicts: TelepathyQt4/Client/channel.cpp TelepathyQt4/Client/channel.cpp | 8 +++----- TelepathyQt4/Client/channel.h | 2 +- 2 files changed, 4 insertions(+), 6 deletions(-) commit d4f57c8d10831e67ed1bdc8d8cbf5cd26a7eed67 Author: Olli Salli Date: Wed Feb 11 16:28:45 2009 +0200 Add some FIXME comments TelepathyQt4/Client/channel.cpp | 7 +++++++ 1 file changed, 7 insertions(+) commit d8da21509c0a3912f8a06982b8f0db25c74eec2c Author: Olli Salli Date: Wed Feb 11 16:12:02 2009 +0200 Add a warning for channel service removing MCD from GroupFlags TelepathyQt4/Client/channel.cpp | 1 + 1 file changed, 1 insertion(+) commit cbcc24e3d4298bdb562c7645206125a03baec49c Merge: b949696 134d238 Author: Olli Salli Date: Wed Feb 11 15:51:40 2009 +0200 Merge branch 'channel' of git://git.collabora.co.uk/git/user/andrunko/telepathy-qt4 into channel commit 134d238139b45a9e75fe7016c6c52565ca3662c9 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 11 10:49:08 2009 -0300 Channel: Added more tests for contact removal and remote pending. tests/dbus/chan-group.cpp | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) commit b949696b9303f4ebd12e31ad5f148cd6536a7c7f Merge: ff73cd5 4e01639 Author: Olli Salli Date: Wed Feb 11 15:48:02 2009 +0200 Merge branch 'channel' of git://git.collabora.co.uk/git/user/andrunko/telepathy-qt4 into channel Conflicts: tests/dbus/chan-group.cpp commit 4e01639ecccce8820d3210e278cfe40caf4b3666 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 11 10:31:44 2009 -0300 Channel: Added tests for contact removal. tests/dbus/chan-group.cpp | 108 +++++++++++++++++++++++++-------------- tests/lib/csh/conn.c | 20 ++++++++ tests/lib/csh/conn.h | 1 + tests/lib/csh/room-manager.c | 14 +++++ tests/lib/csh/room-manager.h | 1 + tests/lib/csh/room.c | 116 +++++++++++++++++++++++++++++------------- tests/lib/csh/room.h | 1 + 7 files changed, 187 insertions(+), 74 deletions(-) commit ff73cd50d06983eeea96e2040175c748d4fc7f18 Author: Olli Salli Date: Wed Feb 11 15:17:31 2009 +0200 Propagate the details fully for MembersChangedDetailed TelepathyQt4/Client/channel.cpp | 37 +++++++++++++------------------------ tests/dbus/chan-group.cpp | 6 ++---- 2 files changed, 15 insertions(+), 28 deletions(-) commit 349ee7f7de35940f9aed1036de6986c1b5529728 Author: Olli Salli Date: Wed Feb 11 14:55:42 2009 +0200 Make onMembersChanged just a wrapper for onMembersChangedDetailed TelepathyQt4/Client/channel.cpp | 34 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 20 deletions(-) commit 7fd9b222b8b1717dec38f17ca8336f1489b91e65 Author: Olli Salli Date: Wed Feb 11 14:44:40 2009 +0200 Merge the two publicly-visible membership change information classes in Channel TelepathyQt4/Client/channel.cpp | 30 +++++++-------- TelepathyQt4/Client/channel.h | 81 ++++++++++++--------------------------- tests/dbus/chan-group.cpp | 8 ++-- 3 files changed, 42 insertions(+), 77 deletions(-) commit da5721c52213f23a4d310af6abe93e5fe31db442 Merge: e6114ea 45a702b Author: Olli Salli Date: Wed Feb 11 09:58:54 2009 +0200 Merge branch 'channel' of git://git.collabora.co.uk/git/user/andrunko/telepathy-qt4 into andrunko-channel commit 45a702b36d30b2051d6f7fdbb27da1ab8abad89d Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 11 00:28:55 2009 -0300 Channel: Fixed the logic to build self contact when self handle changes. TelepathyQt4/Client/channel.cpp | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) commit 772bed949e764834c2eb2a0ef3005b27996d33ef Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 11 00:20:54 2009 -0300 Channel: Make sure change signals aren't emitted if channel is not ready. TelepathyQt4/Client/channel.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) commit 726a11f5ae24d30ff031778fbdfdddc3734dbf79 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 11 00:15:41 2009 -0300 Channel: Improved test coverage to test for both MembersChanged and MembersChangedDetailed. tests/dbus/chan-group.cpp | 54 +++++++++++++------ tests/lib/csh/conn.c | 21 ++++++++ tests/lib/csh/conn.h | 3 ++ tests/lib/csh/room-manager.c | 25 +++++++++ tests/lib/csh/room-manager.h | 3 ++ tests/lib/csh/room.c | 123 +++++++++++++++++++++++++++++++++++++++--- tests/lib/csh/room.h | 3 ++ 7 files changed, 209 insertions(+), 23 deletions(-) commit b899ec198198f2326bfbe09fbf2920959abaccc6 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 10 23:55:57 2009 -0300 Channel: Added support for MembersChangedDetailed. TelepathyQt4/Client/channel.cpp | 149 ++++++++++++++++++++++++++++++++++----- TelepathyQt4/Client/channel.h | 40 ++++++++++- tests/dbus/chan-group.cpp | 10 +-- 3 files changed, 174 insertions(+), 25 deletions(-) commit 51bde03fa6f7cf6ca3701f1a10d3b9029bb9413a Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 10 18:59:07 2009 -0300 Channel: Added groupCanAdd/Remove/RescindChanged signals. TelepathyQt4/Client/channel.cpp | 18 ++++++++++++++++++ TelepathyQt4/Client/channel.h | 4 ++++ 2 files changed, 22 insertions(+) commit 1c99d0be2dafcde0f7634cde73991443af9910fb Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 10 18:36:25 2009 -0300 Channel: Add contact param to groupSelfContactChanged signal. TelepathyQt4/Client/channel.cpp | 10 ++++++---- TelepathyQt4/Client/channel.h | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) commit 6647f3de404c68d6e9db4e184b8bb598c1062a06 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 10 18:30:29 2009 -0300 Channel: Removed warning from fakeGroupInterfaceIfNeeded. TelepathyQt4/Client/channel.cpp | 6 ------ 1 file changed, 6 deletions(-) commit 51823980557fe0fca6d40fc190360a8ae846f1c3 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 10 18:21:00 2009 -0300 Channel: Moved groupInterface() to protected. TelepathyQt4/Client/channel.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit 149ff4ba3f3f31e54b7c0edac95f46f076596a9f Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 10 18:18:01 2009 -0300 Channel: Request all contacts features for now. TelepathyQt4/Client/channel.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit e34f2422d2e0c40e59ec1315080f0c6fdae34cf2 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 10 18:16:02 2009 -0300 Channel: Added reason param to groupRemoveContacts. TelepathyQt4/Client/channel.cpp | 6 ++++-- TelepathyQt4/Client/channel.h | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-) commit 36f86fae433704f76fdec9425dab42244cfc8c72 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 10 17:57:47 2009 -0300 Channel: Improved check on groupRemoveContacts. TelepathyQt4/Client/channel.cpp | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) commit 3ef1d959a47acfee187546a8649c8399ce9a65e0 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 10 17:46:56 2009 -0300 Channel: Added default value to groupAdd/RemoveContacts message param. TelepathyQt4/Client/channel.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit d9482b099e0b843d96ee22e0c79481566e2afa89 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 10 17:36:05 2009 -0300 Channel: Added groupCanRescind and improved checks on groupAdd/RemoveContacts. TelepathyQt4/Client/channel.cpp | 62 ++++++++++++++++++++++++++++++++++----- TelepathyQt4/Client/channel.h | 1 + 2 files changed, 55 insertions(+), 8 deletions(-) commit 97918ba3d85b6843102927024a7a991a4570b249 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 10 17:13:59 2009 -0300 Channel: Moved check for group interface on groupAdd/RemoveContacts bellow the check for groupCanAdd/RemoveContacts. TelepathyQt4/Client/channel.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) commit e6114ea7120ed130ec225d1bc111fcedcb361523 Merge: 849f671 39ca862 Author: Olli Salli Date: Tue Feb 10 22:00:49 2009 +0200 Merge branch 'channel' of git://git.collabora.co.uk/git/user/andrunko/telepathy-qt4 into andrunko-channel Conflicts: TelepathyQt4/Client/channel.cpp commit 849f671da4b2efc38564be9cad60618ab55cbb91 Merge: ced2ba4 8888f1d Author: Simon McVittie Date: Tue Feb 10 12:50:37 2009 +0000 Merge branch 'channel-subclasses' Reviewed-by: Andre Moreira Magalhaes (andrunko) commit ced2ba45d25b2b87ddec5456d4c67e52b56bab9a Merge: 36ee092 ff0d897 Author: Simon McVittie Date: Tue Feb 10 12:47:43 2009 +0000 Merge branch 'spec' Reviewed-by: Andre Moreira Magalhaes (andrunko) commit ff0d897da941d48d8e9bbe8e8098a4e669da873e Author: Simon McVittie Date: Tue Feb 10 12:25:37 2009 +0000 Update to spec 0.17.19 and enable File Transfer code generation This changes the ABI of Tubes channels' auto-generated code. Better now than later... TelepathyQt4/channel.xml | 1 + spec/Account.xml | 10 +- spec/Channel.xml | 11 +- spec/Channel_Dispatcher.xml | 4 +- spec/Channel_Interface_Group.xml | 172 +++++++-- spec/Channel_Interface_Media_Signalling.xml | 49 ++- spec/Channel_Interface_Media_Signalling_Future.xml | 189 ++++++++++ spec/Channel_Interface_Messages.xml | 7 +- spec/Channel_Interface_Password.xml | 5 +- spec/Channel_Interface_Tube.xml | 10 +- spec/Channel_Request.xml | 2 +- spec/Channel_Type_Contact_Search.xml | 4 +- spec/Channel_Type_DBus_Tube.xml | 102 ++--- spec/Channel_Type_File_Transfer.xml | 6 +- spec/Channel_Type_Room_List.xml | 2 +- spec/Channel_Type_Stream_Tube.xml | 4 +- spec/Channel_Type_Streamed_Media.xml | 18 +- spec/Channel_Type_Streamed_Media_Future.xml | 166 +++++++++ spec/Channel_Type_Text.xml | 6 +- spec/Channel_Type_Tubes.xml | 61 ++- spec/Connection.xml | 307 ++++++++++++--- spec/Connection_Interface_Aliasing.xml | 7 +- spec/Connection_Interface_Avatars.xml | 16 +- spec/Connection_Interface_Capabilities.xml | 6 +- spec/Connection_Interface_Contact_Capabilities.xml | 7 +- spec/Connection_Interface_Contact_Info.xml | 364 ++++++++++++++++-- spec/Connection_Interface_Contacts.xml | 9 + spec/Connection_Interface_Location.xml | 394 ++++++++++++++++++++ spec/Connection_Interface_Presence.xml | 66 +++- spec/Connection_Interface_Requests.xml | 42 ++- spec/Connection_Manager.xml | 9 +- spec/Media_Stream_Handler.xml | 63 +++- spec/Properties_Interface.xml | 6 +- spec/all.xml | 10 +- spec/errors.xml | 223 ++++++++++- spec/generic-types.xml | 6 +- 36 files changed, 2076 insertions(+), 288 deletions(-) commit 8888f1df649309db844c1c3ffa37a014c9d0c70e Author: Simon McVittie Date: Tue Feb 10 11:57:01 2009 +0000 PendingChannel: expose immutableProperties() This allows library users to instantiate their own Channel subclasses in an efficient way (rather than calling channel(), which will return a normal Telepathy-Qt4 class), or to process channels without ever making a proxy for them (which is what a ChannelDispatcher implementation should do). TelepathyQt4/Client/pending-channel.cpp | 25 +++++++++++++++++++++++++ TelepathyQt4/Client/pending-channel.h | 2 ++ 2 files changed, 27 insertions(+) commit e1d7e5631218cb326f94a4fb4652be44fd6e51e2 Author: Simon McVittie Date: Tue Feb 10 11:55:26 2009 +0000 PendingChannel: Correct documentation of handle, handleType TelepathyQt4/Client/pending-channel.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) commit d2b17f3d8ce1ae249b3dbd39a435b4156634aa3e Author: Simon McVittie Date: Tue Feb 10 10:21:47 2009 +0000 PendingChannel: we don't officially know about FileTransfer yet TelepathyQt4/Client/pending-channel.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit ddd165db5175f3ee883346729d80d62509b7d0db Author: Simon McVittie Date: Tue Feb 10 10:21:10 2009 +0000 Channel and subclasses: take immutable properties in constructor TelepathyQt4/Client/channel.cpp | 7 +++++++ TelepathyQt4/Client/channel.h | 1 + TelepathyQt4/Client/file-transfer.cpp | 6 +++++- TelepathyQt4/Client/file-transfer.h | 2 +- TelepathyQt4/Client/pending-channel.cpp | 14 +++++++++----- TelepathyQt4/Client/room-list.cpp | 6 +++++- TelepathyQt4/Client/room-list.h | 2 +- TelepathyQt4/Client/streamed-media-channel.cpp | 6 +++++- TelepathyQt4/Client/streamed-media-channel.h | 2 +- TelepathyQt4/Client/text-channel.cpp | 3 ++- TelepathyQt4/Client/text-channel.h | 2 +- 11 files changed, 38 insertions(+), 13 deletions(-) commit df62a18b47360e35be060c148b83a43dcbb6d73f Author: Simon McVittie Date: Mon Feb 9 18:55:12 2009 +0000 PendingChannel: construct a Channel subclass if the channel type is known TelepathyQt4/Client/pending-channel.cpp | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) commit a899e51e3a56c7a408c2f05f3ee432e216923d25 Author: Simon McVittie Date: Mon Feb 9 18:17:50 2009 +0000 Add stub implementations of TextChannel, StreamedMediaChannel, RoomList and FileTransfer TelepathyQt4/Client/FileTransfer | 13 ++++ TelepathyQt4/Client/RoomList | 13 ++++ TelepathyQt4/Client/StreamedMediaChannel | 13 ++++ TelepathyQt4/Client/TextChannel | 13 ++++ TelepathyQt4/Client/file-transfer.cpp | 84 ++++++++++++++++++++++++ TelepathyQt4/Client/file-transfer.h | 54 +++++++++++++++ TelepathyQt4/Client/room-list.cpp | 83 +++++++++++++++++++++++ TelepathyQt4/Client/room-list.h | 54 +++++++++++++++ TelepathyQt4/Client/streamed-media-channel.cpp | 83 +++++++++++++++++++++++ TelepathyQt4/Client/streamed-media-channel.h | 54 +++++++++++++++ TelepathyQt4/Client/text-channel.cpp | 83 +++++++++++++++++++++++ TelepathyQt4/Client/text-channel.h | 54 +++++++++++++++ TelepathyQt4/Makefile.am | 20 +++++- 13 files changed, 619 insertions(+), 2 deletions(-) commit 36ee092d3a8fe1d1dbaf364e00f1892cd0781604 Merge: d86579e 851b9a1 Author: Simon McVittie Date: Tue Feb 10 11:22:05 2009 +0000 Merge commit 'seil/AccountManager_ImprovedSignals' commit 39ca862859391f7f3f0d59bbd9faedca71c673f1 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 9 18:36:08 2009 -0300 Channel: Updated documentation. TelepathyQt4/Client/channel.cpp | 138 ++++++++++++++++----------------------- 1 file changed, 55 insertions(+), 83 deletions(-) commit 299ec9d883dd1a62179537b00c051165aee31df4 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 9 18:14:03 2009 -0300 Channel: Changed requested to isRequested. TelepathyQt4/Client/channel.cpp | 4 ++-- TelepathyQt4/Client/channel.h | 2 +- tests/dbus/chan-basics.cpp | 4 ++-- tests/dbus/chan-group.cpp | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) commit d52c5e5f75071a61404045b74a08e0af6eb1d264 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 9 18:08:46 2009 -0300 Channel: Added test for fake group interface. tests/dbus/chan-basics.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) commit 11d6057c74f6b9af23ed00b57d39a0651b683950 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 9 18:08:27 2009 -0300 Channel: Fake group interface when TargetHandleType != Contact. TelepathyQt4/Client/channel.cpp | 71 ++++++++++++++++++++++++++++----------- 1 file changed, 51 insertions(+), 20 deletions(-) commit 696e9f7ff7088b541ca20a6cd3cd5c88836f6508 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 9 17:22:49 2009 -0300 Channel: Proper check for initiatorContact()->id(). tests/dbus/chan-basics.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 641a5c5ccdde53c21fcb1b8324cb7bd2ca24b18d Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 9 17:21:50 2009 -0300 Extend echo2 test to support contacts interface. tests/lib/echo2/Makefile.am | 3 ++- tests/lib/echo2/conn.c | 7 ++++++- tests/lib/echo2/conn.h | 5 +++-- 3 files changed, 11 insertions(+), 4 deletions(-) commit 612ab4d9f6edbfa203dc6e04846caa0dac9af27d Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 9 17:20:48 2009 -0300 Channel: Properly tries to create a Contact object for initiator even if group interface is not supported. TelepathyQt4/Client/channel.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) commit 07faaac15457366deb0cee873f5ad06aafe27faa Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 9 17:00:24 2009 -0300 Channel: Added initiatorContact tests. tests/dbus/chan-basics.cpp | 2 ++ tests/dbus/chan-group.cpp | 1 + 2 files changed, 3 insertions(+) commit 91803136152c340fc71fc323f02f10ad4b417656 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 9 17:00:14 2009 -0300 Channel: Added initiatorContact getter. TelepathyQt4/Client/channel.cpp | 42 +++++++++++++++++++++++++++++++++++++++ TelepathyQt4/Client/channel.h | 2 ++ 2 files changed, 44 insertions(+) commit e0e92016aa1ac7258578f85134e166a23c4bab4f Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 9 16:18:01 2009 -0300 Channel: Add tests for requested getter. tests/dbus/chan-basics.cpp | 2 ++ tests/dbus/chan-group.cpp | 1 + 2 files changed, 3 insertions(+) commit 8323b20ec9aa4c031b06f4245ee28d7c28ee8fc8 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 9 16:17:50 2009 -0300 Channel: Added requested getter. TelepathyQt4/Client/channel.cpp | 21 +++++++++++++++++++++ TelepathyQt4/Client/channel.h | 2 ++ 2 files changed, 23 insertions(+) commit 38f368acd978d18ecd7e276b58ae43682135d1ac Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 9 15:34:47 2009 -0300 Channel: Added test for selfContact. tests/dbus/chan-group.cpp | 2 ++ 1 file changed, 2 insertions(+) commit cb1c98ac2967cd2a04b198f9f22fc7c04b733dbb Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 9 15:34:09 2009 -0300 Channel: Represent selfHandle as a Contact object. TelepathyQt4/Client/channel.cpp | 109 ++++++++++++++++++++++++++++----------- TelepathyQt4/Client/channel.h | 7 ++- 2 files changed, 83 insertions(+), 33 deletions(-) commit 1d298dca0b572f6b6f414dcd24ac3e3dec6e4af8 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 9 14:07:28 2009 -0300 Channel: Re-enable support for group member change info. TelepathyQt4/Client/channel.cpp | 172 +++++++++++++++++++++++++++------------ TelepathyQt4/Client/channel.h | 26 ++++-- 2 files changed, 140 insertions(+), 58 deletions(-) commit 2f6b125b1178c37450c5e54b07898997a69dcd3a Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 9 14:07:09 2009 -0300 Channel: Fixed memory leaks. TelepathyQt4/Client/channel.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) commit 3225e29dbea9ad4ff1fa0fe5ea50c92775a15955 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 9 11:08:10 2009 -0300 Channel: Represent actor of membersChanged as a Contact object. TelepathyQt4/Client/channel.cpp | 19 +++++++++++++++---- TelepathyQt4/Client/channel.h | 3 ++- tests/dbus/chan-group.cpp | 8 ++++---- 3 files changed, 21 insertions(+), 9 deletions(-) commit 8201aadf22a4c13419afa1e0d489117bf90b2fb7 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Feb 9 10:47:38 2009 -0300 Channel: Proper initialize private members on constructor. TelepathyQt4/Client/channel.cpp | 3 +++ 1 file changed, 3 insertions(+) commit 1ec892c067383769093ba85aa03548426cb814c7 Author: Andre Moreira Magalhaes (andrunko) Date: Sat Feb 7 13:34:37 2009 -0300 Channel: Skip membersChanged signal if nothing really changed. TelepathyQt4/Client/channel.cpp | 6 ++++++ 1 file changed, 6 insertions(+) commit c54ae747f51a4b730bd2e1e98a9af8d5eb15e122 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 6 22:31:52 2009 -0300 Channel: Extended group test to test adding contacts. tests/dbus/chan-group.cpp | 163 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 145 insertions(+), 18 deletions(-) commit 6dce14072ea5d919789516d9713b6d1ddb44aca2 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 6 22:29:21 2009 -0300 Add support for adding members and faking members accepting invitation on csh test. P.s.: I am not sure if this is the right way to do this, but it works. tests/lib/csh/room.c | 37 +++++++++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) commit e0517341ce027de20b9c4104b5784d14f545b714 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 6 22:28:54 2009 -0300 Channel: Add support for adding/removing contacts from a group. TelepathyQt4/Client/channel.cpp | 113 +++++++++++++++++++++++++++++++++++++++ TelepathyQt4/Client/channel.h | 7 +++ 2 files changed, 120 insertions(+) commit a7171eca1379af3bcc9ab77aeee455752abd82ff Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 6 19:34:46 2009 -0300 Channel: Added initial test for contacts group integration. tests/dbus/Makefile.am | 5 + tests/dbus/chan-group.cpp | 351 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 356 insertions(+) commit ce0ae7cf87c415b8cccfca148bfe684f02c0bc1e Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 6 18:04:13 2009 -0300 Extend channelspecific example to support contacts interface. tests/lib/csh/Makefile.am | 3 ++- tests/lib/csh/conn.c | 7 ++++++- tests/lib/csh/conn.h | 5 +++-- 3 files changed, 11 insertions(+), 4 deletions(-) commit fdb199fe1d490d98b1eb77585f4498e1a8be9fb7 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 6 18:03:16 2009 -0300 Added channelspecific example from tp-glib (support channel with type Room). configure.ac | 1 + tests/lib/Makefile.am | 2 +- tests/lib/csh/Makefile.am | 22 ++ tests/lib/csh/conn.c | 273 ++++++++++++++++++ tests/lib/csh/conn.h | 58 ++++ tests/lib/csh/room-manager.c | 376 ++++++++++++++++++++++++ tests/lib/csh/room-manager.h | 55 ++++ tests/lib/csh/room.c | 651 ++++++++++++++++++++++++++++++++++++++++++ tests/lib/csh/room.h | 64 +++++ 9 files changed, 1501 insertions(+), 1 deletion(-) commit 02535aa5e63e4ea731375fe374796ca6dc2aab46 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 6 19:19:39 2009 -0300 Channel: Simplified contacts code. Simplified contacts code by creating updateContacts that gets called whenever membersChanged signal is processed or when initial contacts are built. TelepathyQt4/Client/channel.cpp | 198 +++++++++++++++++---------------------- 1 file changed, 84 insertions(+), 114 deletions(-) commit 5262c7e27093c92d4d7c8274052f5cdc9364ab2e Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 6 19:00:04 2009 -0300 Channel: Simplified membersChanged signal and fixed bug when a contact was added to current members and not removed from local/pending lists. Simplified membersChanged signal to signal who was actually removed from the channel, (it's not in any of the lists (current/local/remote)). Fixed bug when a contact was added to current members and not removed from local/pending lists. TelepathyQt4/Client/channel.cpp | 70 +++++++++++++++++++++++---------------- TelepathyQt4/Client/channel.h | 4 +-- 2 files changed, 43 insertions(+), 31 deletions(-) commit 0d4e4b32619de969ef72ab0b85c976b3c4146d6e Author: Andre Moreira Magalhaes (andrunko) Date: Fri Feb 6 17:58:01 2009 -0300 Channel: Continue processing membersChangedQueue even if no member was added. TelepathyQt4/Client/channel.cpp | 4 ++++ 1 file changed, 4 insertions(+) commit 5e0359621dc57f4e98ff88937c8df69a61e352fc Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 5 20:40:14 2009 -0300 Channel: Added initial version of channel members represented as Contact objects. TelepathyQt4/Client/channel.cpp | 466 ++++++++++++++++++++++++++------------- TelepathyQt4/Client/channel.h | 33 ++- 2 files changed, 324 insertions(+), 175 deletions(-) commit e699b129152963bab89503f8c51e277fc472d4a3 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 5 10:57:05 2009 -0300 Channel: Removed isClosed/closed in favor of invalidate. TelepathyQt4/Client/channel.cpp | 72 +++++++++------------------------------ TelepathyQt4/Client/channel.h | 5 --- tests/dbus/chan-basics.cpp | 2 +- 3 files changed, 17 insertions(+), 62 deletions(-) commit 0c8b79b44a73b35951fd6317df17724fb7d08f11 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 3 17:04:40 2009 -0300 Channel: Updated documentation to reflect removal of readiness. TelepathyQt4/Client/channel.cpp | 62 ++++++++++----------------------------- 1 file changed, 16 insertions(+), 46 deletions(-) commit 266c7fcbcd8d9787d44662c93a05c20bfb5be67e Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 3 16:58:32 2009 -0300 Channel: Removed readiness completelly. TelepathyQt4/Client/channel.cpp | 295 ++++++++++++++++----------------------- 1 file changed, 117 insertions(+), 178 deletions(-) commit 6bc10ba18a80af3b7045b75bf88b1a1d41fdc32d Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 29 18:20:55 2009 -0300 Channel: Added test for requestClose/isClosed. tests/dbus/chan-basics.cpp | 6 ++++++ 1 file changed, 6 insertions(+) commit e9f96e9ce626effba796349d43ab4a15aece7dfd Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 29 18:18:11 2009 -0300 Channel: Added isClosed, closed signal and changed close to requestClose. TelepathyQt4/Client/channel.cpp | 60 ++++++++++++++++++++------------------- TelepathyQt4/Client/channel.h | 8 ++++-- 2 files changed, 37 insertions(+), 31 deletions(-) commit 45eaea9e38ee1bfa9bd6b6057e7996565d6bcf38 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 29 18:00:07 2009 -0300 Channel: Moved readiness internally. TelepathyQt4/Client/channel.cpp | 104 +++++++++++++++++---------------------- TelepathyQt4/Client/channel.h | 14 ------ 2 files changed, 46 insertions(+), 72 deletions(-) commit cd0c7d54029384d2661cc957a95b9156959a7e96 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jan 28 18:31:14 2009 -0300 Channel: Added test for isReady/becomeReady. tests/dbus/Makefile.am | 5 + tests/dbus/chan-basics.cpp | 335 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 340 insertions(+) commit a56981288768c557722efbb323f117d8b3e6e24a Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jan 28 18:26:05 2009 -0300 Channel: Added isReady/becomeReady. TelepathyQt4/Client/channel.cpp | 73 +++++++++++++++++++++++++++++++++++++++ TelepathyQt4/Client/channel.h | 10 ++++++ 2 files changed, 83 insertions(+) commit d86579e34367641c4b2ca23096791950bf9fa72c Merge: 6766de2 cb90e42 Author: Olli Salli Date: Thu Feb 5 16:19:11 2009 +0200 Merge branch 'contact-features' commit 851b9a1edb62f71ff32573f27d45a5b95b574999 Author: basysKom GmbH Date: Thu Feb 5 13:56:02 2009 +0100 *implemented signal to Account - notifying that the presence has changed TelepathyQt4/Prototype/Account.cpp | 8 ++++++++ TelepathyQt4/Prototype/Account.h | 3 ++- 2 files changed, 10 insertions(+), 1 deletion(-) commit 6766de293144265a53eae88875f1322a15488c2a Author: Andre Moreira Magalhaes (andrunko) Date: Thu Feb 5 09:10:25 2009 -0300 Account: Changed Q_EMIT/Q_FOREACH to emit/foreach. TelepathyQt4/Client/account.cpp | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) commit c4bab2b97399448ab914bded3012e5e2c816854d Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 4 17:26:51 2009 -0300 Account: Make sure change signals are emitted only if the property changed. Make sure change signals are emitted only if the property changed, protect against buggy AM impls. TelepathyQt4/Client/account.cpp | 65 ++++++++++++++++++++++++++++----------- 1 file changed, 47 insertions(+), 18 deletions(-) commit cb90e42033165850ae4879c902292df0a2ed4790 Author: Olli Salli Date: Thu Feb 5 10:30:51 2009 +0200 Consider SelfHandleChanged for Connection::selfContact() TelepathyQt4/Client/connection.cpp | 14 +++++++++++++- TelepathyQt4/Client/connection.h | 3 ++- TelepathyQt4/Client/contact.h | 6 ++++++ 3 files changed, 21 insertions(+), 2 deletions(-) commit cee34d3d96f461a3c2dfae4643610acc2fd0d7b9 Author: Olli Salli Date: Thu Feb 5 10:30:18 2009 +0200 Remove the self presence bits from Connection in favor of using selfContact()->presence* TelepathyQt4/Client/connection.cpp | 175 ++++++------------------------------ TelepathyQt4/Client/connection.h | 6 +- tests/dbus/conn-basics.cpp | 17 +--- tests/pinocchio/conn-basics.cpp | 6 +- 4 files changed, 35 insertions(+), 169 deletions(-) commit 9f652bc699362a1231264df499ddc829da859375 Author: Olli Salli Date: Thu Feb 5 09:20:32 2009 +0200 Add and test Connection::selfContact This particular thing needed a lot of duct taping to work. I'm writing an email on the particular issues with Connection's API and implementation - when those are fixed, this should become a lot cleaner. TelepathyQt4/Client/connection.cpp | 85 +++++++++++++++++++++++++------ TelepathyQt4/Client/connection.h | 5 ++ TelepathyQt4/Client/contact-manager.cpp | 4 +- tests/dbus/contacts.cpp | 19 +++++++ 4 files changed, 96 insertions(+), 17 deletions(-) commit 9e910dba3814e765230c9b4a617912276fd319ad Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 4 17:25:45 2009 -0300 Generate comparison operators for all structs. tools/qt4-types-gen.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) commit f7370885b3d7ea7ddd9b89703d50af6c681d9324 Author: Olli Salli Date: Wed Feb 4 21:24:13 2009 +0200 Add and test ContactManager::supportedFeatures() TelepathyQt4/Client/contact-manager.cpp | 38 ++++++++++++++++++++++++++++--- TelepathyQt4/Client/contact-manager.h | 1 + TelepathyQt4/Client/contact.cpp | 26 +++++++++++++-------- tests/dbus/contacts.cpp | 8 ++++++- 4 files changed, 59 insertions(+), 14 deletions(-) commit 4dfd1c73353e9c32476e27de36ac4b2de1e37123 Author: Olli Salli Date: Wed Feb 4 20:52:04 2009 +0200 Add and test Connection::contactAttributeInterfaces This is quite a lousy hack to intertwine CAI with the other "essential" properties of the Connection - when Connection is otherwise sanitized, this code should be nicer too. TelepathyQt4/Client/connection.cpp | 73 +++++++++++++++++++++++++++++++++--- TelepathyQt4/Client/connection.h | 2 + tests/dbus/contacts.cpp | 10 ++++- 3 files changed, 79 insertions(+), 6 deletions(-) commit 21b5b934281dc9ac02c63ded1ac1885f3409bcf6 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 4 15:03:45 2009 -0300 Account: Added haveConnectionChanged signal. TelepathyQt4/Client/account.cpp | 1 + TelepathyQt4/Client/account.h | 1 + 2 files changed, 2 insertions(+) commit dd428f96a61bacbc24ab443c50dc62eedcd064be Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 4 14:57:57 2009 -0300 Account: Added haveConnection method. TelepathyQt4/Client/account.cpp | 11 +++++++++++ TelepathyQt4/Client/account.h | 1 + 2 files changed, 12 insertions(+) commit 8f2148031beb40bbe31b95fc801d212c9cce02fc Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 4 14:54:33 2009 -0300 Account: Return a QSharedPointer on ::connection. TelepathyQt4/Client/account.cpp | 12 +++++++++--- TelepathyQt4/Client/account.h | 3 ++- 2 files changed, 11 insertions(+), 4 deletions(-) commit c915869ef960c2dbd446a85932f53eecc4935f58 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 4 14:45:47 2009 -0300 Account: Proper get serviceName from objectPath when building connection. TelepathyQt4/Client/account.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 8405642b41f746ff77738c4b6b9535c3555236ee Author: Andre Moreira Magalhaes (andrunko) Date: Wed Feb 4 14:44:24 2009 -0300 Account: Changed getConnection to connection. TelepathyQt4/Client/account.cpp | 2 +- TelepathyQt4/Client/account.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 4e350c2e7680904b86e98f60cd563263d899fa5a Author: Andre Moreira Magalhaes (andrunko) Date: Tue Feb 3 10:10:15 2009 -0300 Fixed bug 19875: Building program that links against tpqt4 results in billions of warnings from the compiler. Fixed signature of invalidate methods on generated proxies. tools/qt4-client-gen.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit f4ec5a0d835003715943c82490b9bdec81fa29bd Author: Olli Salli Date: Wed Feb 4 15:16:16 2009 +0200 Add a test for unrequested Contact features tests/dbus/contacts.cpp | 52 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) commit 0e3ab4b5cf8808d9a05250af040da8bc11f5f758 Author: Olli Salli Date: Wed Feb 4 14:57:57 2009 +0200 Add and test Contact::FeatureAvatarToken TelepathyQt4/Client/contact-manager.cpp | 20 +++++++++++ TelepathyQt4/Client/contact-manager.h | 1 + TelepathyQt4/Client/contact.cpp | 58 ++++++++++++++++++++++++++++++- TelepathyQt4/Client/contact.h | 6 ++++ tests/dbus/contacts.cpp | 42 ++++++++++++++++++++++ 5 files changed, 126 insertions(+), 1 deletion(-) commit d6c7a63b38777fc157a734ff66507ca8def15ee8 Author: Olli Salli Date: Wed Feb 4 12:33:31 2009 +0200 Add stub test for ContactManager functionality being supported tests/dbus/contacts.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) commit 700801799e6edaf58ebec1b58410b42dde4f6bb5 Author: Olli Salli Date: Wed Feb 4 12:23:28 2009 +0200 Add and test Contact::FeatureAlias TelepathyQt4/Client/contact-manager.cpp | 23 +++++++++++++++++ TelepathyQt4/Client/contact-manager.h | 1 + TelepathyQt4/Client/contact.cpp | 39 +++++++++++++++++++++++++++- TelepathyQt4/Client/contact.h | 6 +++++ tests/dbus/contacts.cpp | 42 ++++++++++++++++++++++++++++--- 5 files changed, 106 insertions(+), 5 deletions(-) commit 323eeab176c5f069baa8295f1e6702ab5fcb6d3b Merge: 6b877d5 aafc92a Author: Simon McVittie Date: Tue Feb 3 17:21:44 2009 +0000 Merge commit 'seil/AccountManager_ImprovedSignals' commit 709361e15b0e946ec648326582ae68c9094dd42a Author: Olli Salli Date: Tue Feb 3 11:06:13 2009 +0200 Simplify ContactManager code by adding a lookupContactByHandle utility function TelepathyQt4/Client/contact-manager.cpp | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) commit 4efe904192869650f3ac5106a3b6553d9423cfcf Author: Olli Salli Date: Tue Feb 3 10:53:35 2009 +0200 Add a test for changing contact attributes (currently tests FeatureSimplePresence) tests/dbus/contacts.cpp | 106 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) commit a2fe2eeba6b71f3915bb4b08f3e5caf4e9cd2535 Author: Olli Salli Date: Mon Feb 2 17:13:49 2009 +0200 Add support for tracking SimplePresence changes on contacts (needs a test) TelepathyQt4/Client/contact-manager.cpp | 40 +++++++++++++++++++++++++++++++ TelepathyQt4/Client/contact-manager.h | 3 +++ TelepathyQt4/Client/contact.cpp | 17 +++++++++++-- TelepathyQt4/Client/contact.h | 4 ++++ 4 files changed, 62 insertions(+), 2 deletions(-) commit aafc92a55e133bb2fdd349f370752f4de19134f2 Author: Stefan Eilers Date: Mon Feb 2 18:19:41 2009 +0100 Fix crash after removing an account. Added a workaround that will be removed if ContactManager::slotMembersChanged() TelepathyQt4/Prototype/ContactManager.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) commit e6f702745d639574c43adc8074e526991a2058a6 Author: Andrea Bakkar Date: Mon Feb 2 16:25:35 2009 +0100 It makes no sense to create a contact pointer if it should be deleted.. TelepathyQt4/Prototype/ContactManager.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 4df2f3de98aad583c659e315aec12981d6bdc0d0 Author: Olli Salli Date: Mon Feb 2 16:01:16 2009 +0200 Test Contact::FeatureSimplePresence tests/dbus/contacts.cpp | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) commit 49e9f600f048cda652eafa64e986251a224c238a Author: Olli Salli Date: Mon Feb 2 14:31:51 2009 +0200 Add Contact::FeatureSimplePresence TelepathyQt4/Client/contact-manager.cpp | 5 ++- TelepathyQt4/Client/contact.cpp | 61 +++++++++++++++++++++++++++++-- TelepathyQt4/Client/contact.h | 7 ++++ 3 files changed, 69 insertions(+), 4 deletions(-) commit 4384dc767bb1651c4c36c32056e57cbec0395a5f Author: Olli Salli Date: Mon Feb 2 12:47:57 2009 +0200 Add test for upgradeContacts tests/dbus/contacts.cpp | 72 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) commit ead094e3fd064c0dc2c2d1d22c008bdf93e1d368 Author: Olli Salli Date: Mon Feb 2 12:16:51 2009 +0200 Add ContactManager::upgradeContacts() TelepathyQt4/Client/contact-manager.cpp | 9 +++++ TelepathyQt4/Client/contact-manager.h | 4 ++ TelepathyQt4/Client/pending-contacts.cpp | 64 ++++++++++++++++++++++++++---- TelepathyQt4/Client/pending-contacts.h | 5 +++ tests/dbus/contacts.cpp | 2 + 5 files changed, 77 insertions(+), 7 deletions(-) commit d33781aad7d5025a48f82c9ab79cfac9eb8fbf7d Author: Olli Salli Date: Sun Feb 1 22:57:17 2009 +0200 Contact: add a concept of requested and actual Features TelepathyQt4/Client/contact-manager.cpp | 10 +++++----- TelepathyQt4/Client/contact-manager.h | 2 +- TelepathyQt4/Client/contact.cpp | 26 +++++++++++++++++++++++--- TelepathyQt4/Client/contact.h | 11 ++++++----- TelepathyQt4/Client/pending-contacts.cpp | 2 +- tests/dbus/contacts.cpp | 15 ++++++++------- 6 files changed, 44 insertions(+), 22 deletions(-) commit 82fced65e5531d44a7e053278118a0a049469140 Author: Olli Salli Date: Sun Feb 1 20:24:20 2009 +0200 Make contact sharing work even with a) simultaneous requests b) features TelepathyQt4/Client/contact-manager.cpp | 33 +++++++++++++++--------------- TelepathyQt4/Client/contact-manager.h | 7 ++++--- TelepathyQt4/Client/contact.cpp | 4 +++- TelepathyQt4/Client/contact.h | 4 +++- TelepathyQt4/Client/pending-contacts.cpp | 19 +++++++++-------- 5 files changed, 38 insertions(+), 29 deletions(-) commit 7d19bd6a8397d2e3c729954071147847a9650473 Author: Olli Salli Date: Sun Feb 1 19:41:51 2009 +0200 It's more natural to call PendingContacts::contactManager() just manager(), no? TelepathyQt4/Client/pending-contacts.cpp | 4 ++-- TelepathyQt4/Client/pending-contacts.h | 2 +- tests/dbus/contacts.cpp | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) commit 6b877d59825edb0a68643fe9ff3d3f7057904db7 Merge: 193c66a 14673c2 Author: Olli Salli Date: Sat Jan 31 10:26:43 2009 +0200 Merge branch 'shared-contacts' commit 14673c27e79be4988bcc7deac462411f3fc115cc Author: Olli Salli Date: Fri Jan 30 20:48:41 2009 +0200 Test that contacts are shared/cached tests/dbus/contacts.cpp | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) commit 18f79475e4507168767616a5806d5818adbd08f3 Author: Olli Salli Date: Fri Jan 30 20:02:58 2009 +0200 Return existing Contacts instead of always creating new ones if there are satisfying ones already in existence TelepathyQt4/Client/contact-manager.cpp | 74 ++++++++++++++++++++++++++---- TelepathyQt4/Client/contact-manager.h | 7 +++ TelepathyQt4/Client/pending-contacts.cpp | 38 +++++++++++---- TelepathyQt4/Client/pending-contacts.h | 7 ++- TelepathyQt4/Makefile.am | 1 + 5 files changed, 106 insertions(+), 21 deletions(-) commit 193c66a0d498aacc09beb79669e17f4b3db6a1c7 Author: George Goldberg Date: Thu Jan 29 22:15:59 2009 +0000 Correct documentation of Account::becomeReady(). TelepathyQt4/Client/account.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit ffcaeddced187aea419e3691322cad8212cf8186 Author: George Goldberg Date: Thu Jan 29 21:53:32 2009 +0000 Make unit-tests work with the new return type of Account::becomeReady(). tests/dbus/account-basics.cpp | 1 + 1 file changed, 1 insertion(+) commit f2e257d5bc85fb2d56b7368e034bd222bd35719e Author: George Goldberg Date: Thu Jan 29 21:53:01 2009 +0000 Make Account::becomeReady() return a PendingReadyAccount instead of a PendingOperation. TelepathyQt4/Client/account.cpp | 57 +++++++++++++++++---------------------- TelepathyQt4/Client/account.h | 3 ++- 2 files changed, 26 insertions(+), 34 deletions(-) commit a515a3682e269b10011518925f6d41ff09ec1494 Author: George Goldberg Date: Thu Jan 29 21:52:24 2009 +0000 Add a PendingReadyAccount which is a subclass of PendingOperation that will be returned by Account::becomReady() allowing to get the Account easily from the slot triggered when the operation completes. TelepathyQt4/Client/PendingReadyAccount | 13 +++ TelepathyQt4/Client/pending-ready-account.cpp | 110 +++++++++++++++++++++++++ TelepathyQt4/Client/pending-ready-account.h | 62 ++++++++++++++ TelepathyQt4/Makefile.am | 4 + 4 files changed, 189 insertions(+) commit 855502f7d516b7369895047788103883b1bc8adf Author: Olli Salli Date: Fri Jan 30 16:57:21 2009 +0200 Make the ContactManager the parent for PendingContacts and Contact TelepathyQt4/Client/contact-manager.cpp | 4 ++-- TelepathyQt4/Client/contact.cpp | 14 +++++++------- TelepathyQt4/Client/contact.h | 6 +++--- TelepathyQt4/Client/pending-contacts.cpp | 26 +++++++++++++------------- TelepathyQt4/Client/pending-contacts.h | 5 ++--- tests/dbus/contacts.cpp | 8 ++++---- 6 files changed, 31 insertions(+), 32 deletions(-) commit 9991c4b8134638e65a7a8231cd029f6016ba9350 Author: Olli Salli Date: Fri Jan 30 16:56:12 2009 +0200 Make ContactManager a full-fledged QObject TelepathyQt4/Client/connection.cpp | 2 -- TelepathyQt4/Client/contact-manager.cpp | 2 +- TelepathyQt4/Client/contact-manager.h | 5 +++-- 3 files changed, 4 insertions(+), 5 deletions(-) commit 952e30860138c206444c4f88379efd6fc2bb6583 Author: George Goldberg Date: Thu Jan 29 22:29:47 2009 +0000 Add file called compile to the ignore list (since it is now generated on my system when building for some reason). .gitignore | 1 + 1 file changed, 1 insertion(+) commit 00b99520d26358d53a77371161aa5a706723bda3 Merge: f320683 9a8ce93 Author: Olli Salli Date: Thu Jan 29 23:55:50 2009 +0200 Merge branch 'contacts-ng' commit 9a8ce93fc7fe6cc5e25dd129439412c103cb548a Author: Olli Salli Date: Thu Jan 29 23:55:20 2009 +0200 Fix an if lacking its curls in TestContacts tests/dbus/contacts.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 0bb31766cc5cfae84d5cf91852fd675996c74d92 Author: Olli Salli Date: Thu Jan 29 23:30:12 2009 +0200 Add test for ContactManager::contactsForIdentifiers() tests/dbus/contacts.cpp | 68 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) commit 63cda2ec8f0524465f0c130dcb9cd83e553d7c37 Author: Olli Salli Date: Thu Jan 29 23:05:26 2009 +0200 Test PendingContacts::invalidHandles() tests/dbus/contacts.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) commit da0cc3b46a04e4087b1ff15b73f79bfcdee896d1 Author: Olli Salli Date: Thu Jan 29 23:04:54 2009 +0200 Add PendingContacts::invalidHandles() (forgot it earlier) TelepathyQt4/Client/pending-contacts.cpp | 19 ++++++++++++++++++- TelepathyQt4/Client/pending-contacts.h | 1 + 2 files changed, 19 insertions(+), 1 deletion(-) commit 78d540efd794b79707598f2260ccb0d89ca94270 Author: Olli Salli Date: Thu Jan 29 22:47:18 2009 +0200 Test the Contact::connection() accessor tests/dbus/contacts.cpp | 4 ++++ 1 file changed, 4 insertions(+) commit b745c40d3126a3e21d3d5e0ecb01c9683a1da45b Author: Olli Salli Date: Thu Jan 29 22:42:39 2009 +0200 Verify that the closure accessors work in TestContacts::testForHandles tests/dbus/contacts.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) commit f32068340e7d5321f10f10ad7b4b95c3ed8eebcf Author: Olli Salli Date: Thu Jan 29 22:13:15 2009 +0200 Weed out includes in ManagerFile TelepathyQt4/manager-file.cpp | 10 +++++----- TelepathyQt4/manager-file.h | 4 ++++ 2 files changed, 9 insertions(+), 5 deletions(-) commit feca12a701e89a207709c2238e1dcdfda5edcc5d Author: Olli Salli Date: Thu Jan 29 22:10:52 2009 +0200 Weed out includes in KeyFile TelepathyQt4/key-file.cpp | 6 ++++-- TelepathyQt4/key-file.h | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) commit 2352d8cfe7e5aeeae78826cd908daef596734481 Author: Olli Salli Date: Thu Jan 29 22:08:13 2009 +0200 Weed out includes in ReferencedHandles TelepathyQt4/Client/referenced-handles.h | 1 - 1 file changed, 1 deletion(-) commit b58093edd8b89d54147c9f98129efb1b2eefdbc5 Author: Olli Salli Date: Thu Jan 29 22:06:41 2009 +0200 Weed out includes in PendingStringList TelepathyQt4/Client/pending-string-list.h | 1 - 1 file changed, 1 deletion(-) commit 1233a52b1991cd13dc3b32a5250f3e9a68540636 Author: Olli Salli Date: Thu Jan 29 21:56:37 2009 +0200 Weed out includes in PendingHandles TelepathyQt4/Client/pending-handles.cpp | 5 ++++- TelepathyQt4/Client/pending-handles.h | 11 +++++++---- tests/dbus/conn-requests.cpp | 1 + 3 files changed, 12 insertions(+), 5 deletions(-) commit 6c5c0da2f50c3365407c472bfe77596523039f7f Author: Olli Salli Date: Thu Jan 29 21:56:20 2009 +0200 Weed out includes in Account TelepathyQt4/Client/account.h | 1 - 1 file changed, 1 deletion(-) commit 932822a70697707c84fe907eff27a5aa53dfa52d Author: Olli Salli Date: Thu Jan 29 21:50:22 2009 +0200 Weed out includes in PendingChannel TelepathyQt4/Client/pending-channel.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit a355dcdf6c343de372818cd82902073428c84a85 Author: Olli Salli Date: Thu Jan 29 21:46:43 2009 +0200 Weed out includes in OptionalInterfaceFactory TelepathyQt4/Client/optional-interface-factory.cpp | 2 ++ TelepathyQt4/Client/optional-interface-factory.h | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) commit 96f90da33490336f2936c64f9e0f186f74211ec7 Author: Olli Salli Date: Thu Jan 29 21:37:40 2009 +0200 Weed out includes in DBusProxy (Uninlines DBusProxy::invalidate(QDBusError)) TelepathyQt4/Client/dbus-proxy.cpp | 8 ++++++++ TelepathyQt4/Client/dbus-proxy.h | 13 +++++-------- 2 files changed, 13 insertions(+), 8 deletions(-) commit 31b03db43ba3a55d4dd5a7ba34da242c06242e1d Author: Olli Salli Date: Thu Jan 29 21:14:06 2009 +0200 Use the new Test::processDBusQueue method in the contacts test tests/dbus/contacts.cpp | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) commit 5f9e1a66a87b6fd7b27b706b293ad6459cba929e Merge: dc5b6e8 a94ff32 Author: Olli Salli Date: Thu Jan 29 21:05:57 2009 +0200 Merge branch 'master' into contacts-ng commit a94ff32ac625d6be1b89956628f77a1bb77c6f2e Author: Olli Salli Date: Thu Jan 29 20:57:04 2009 +0200 Add Test::processDBusQueue to finish processing outstanding messages on services tests/dbus/handles.cpp | 7 +------ tests/lib/test.cpp | 17 +++++++++++++++++ tests/lib/test.h | 9 +++++++++ 3 files changed, 27 insertions(+), 6 deletions(-) commit dc5b6e869e65e2376ac237fc5cd0a6c1148b27d3 Author: Olli Salli Date: Thu Jan 29 19:36:26 2009 +0200 Fix coding style in contact.h TelepathyQt4/Client/contact.h | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) commit eef5aa9f72cf9984dbceab58202129968ad65d13 Author: Olli Salli Date: Thu Jan 29 19:24:10 2009 +0200 Fix debug-internal.h includes in contacts code TelepathyQt4/Client/contact-manager.cpp | 1 + TelepathyQt4/Client/contact.cpp | 1 + TelepathyQt4/Client/pending-contact-attributes.cpp | 2 +- TelepathyQt4/Client/pending-contacts.cpp | 1 + 4 files changed, 4 insertions(+), 1 deletion(-) commit 69a154141ecaf9887ceb11a4d36e047342cbfc84 Author: Olli Salli Date: Thu Jan 29 19:18:40 2009 +0200 Make Connection::getContactAttributes fail for non-ready and/or non-connected Connections TelepathyQt4/Client/connection.cpp | 24 +++++++++++++++----- TelepathyQt4/Client/pending-contact-attributes.cpp | 5 ++-- TelepathyQt4/Client/pending-contact-attributes.h | 2 +- 3 files changed, 21 insertions(+), 10 deletions(-) commit 744a28dcc8f1d9c2359e490b13142e8a56afd5f6 Author: Olli Salli Date: Thu Jan 29 11:30:22 2009 +0200 Verify that the contact's handles are released properly in TestContacts::testForHandles tests/dbus/contacts.cpp | 54 +++-------------------------------------------- 1 file changed, 3 insertions(+), 51 deletions(-) commit b49c02240f57c7aad647a00a634627ec6284377a Author: Olli Salli Date: Thu Jan 29 09:27:28 2009 +0200 Add function for checking whether the Contacts/ContactManager functionality is supported TelepathyQt4/Client/contact-manager.cpp | 13 +++++++++++++ TelepathyQt4/Client/contact-manager.h | 2 ++ 2 files changed, 15 insertions(+) commit d158fc26f31fc2464de68e367c410829718ec5a3 Author: Olli Salli Date: Thu Jan 29 09:25:28 2009 +0200 Add basic test for contactsForHandles tests/dbus/contacts.cpp | 111 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 106 insertions(+), 5 deletions(-) commit 254f1a972fb70af2bc283c4409f49e93a92d6d98 Author: Olli Salli Date: Thu Jan 29 09:22:43 2009 +0200 Don't make Connection the QObject parent of the Contacts Because Contacts are usually referred to by QSharedPointers, it would be somewhat tedious for users to guarantee that there are none lying around after the Connection is deleted. TelepathyQt4/Client/contact.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 25169f8655e9e961942963c30d612aab0daaa112 Author: Olli Salli Date: Thu Jan 29 09:15:37 2009 +0200 Fix signal declaration signatures in PendingContacts TelepathyQt4/Client/pending-contacts.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit a1f2a1be7779bd5accfc3aee484c000314943327 Author: Olli Salli Date: Thu Jan 29 08:46:13 2009 +0200 Skeleton test for Contacts tests/dbus/Makefile.am | 5 ++ tests/dbus/contacts.cpp | 221 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 226 insertions(+) commit b0f9a1b22c1efd69805df30f2177291ab8ebd874 Author: Olli Salli Date: Thu Jan 29 08:16:13 2009 +0200 Warn when using PendingContacts::handles() and identifiers() inconsistently in respect to the query TelepathyQt4/Client/pending-contacts.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) commit f4618484da3023e2d202366676ab3e253c15b2da Author: Olli Salli Date: Wed Jan 28 23:24:17 2009 +0200 Add contactsForHandles(Referenced) and contactsForIdentifiers(QStringList) to ContactManager TelepathyQt4/Client/contact-manager.cpp | 24 +++++++ TelepathyQt4/Client/contact-manager.h | 5 ++ TelepathyQt4/Client/pending-contacts.cpp | 102 +++++++++++++++++++++++++++--- TelepathyQt4/Client/pending-contacts.h | 12 +++- 4 files changed, 133 insertions(+), 10 deletions(-) commit 7d0bf00f20ebe4eb3975b5524e1661fe03979cc0 Author: Olli Salli Date: Wed Jan 28 16:34:57 2009 +0200 Add basic accessors to Contact TelepathyQt4/Client/contact.cpp | 18 ++++++++++++++++++ TelepathyQt4/Client/contact.h | 5 +++++ 2 files changed, 23 insertions(+) commit 13552e1cbe656f038deb23fcd581035269ae2d50 Author: Olli Salli Date: Wed Jan 28 16:30:19 2009 +0200 Add naive ContactManager::contactsForHandles TelepathyQt4/Client/contact-manager.cpp | 43 ++++++++++++++++++++++++++++++ TelepathyQt4/Client/contact-manager.h | 8 ++++++ TelepathyQt4/Client/contact.cpp | 20 ++++++++++++-- TelepathyQt4/Client/contact.h | 8 +++++- TelepathyQt4/Client/pending-contacts.cpp | 43 ++++++++++++++++++++++++++++++ TelepathyQt4/Client/pending-contacts.h | 9 ++++++- 6 files changed, 127 insertions(+), 4 deletions(-) commit c5a620621cd190e56d333e1639c65c9c5b81fd5d Author: Olli Salli Date: Wed Jan 28 16:28:50 2009 +0200 Do moc for Contact TelepathyQt4/Makefile.am | 1 + 1 file changed, 1 insertion(+) commit 702cba10950480e477586fecf3ad01b8a0839386 Author: Olli Salli Date: Wed Jan 28 15:58:46 2009 +0200 Move PendingContactAttributes docs to the .cpp TelepathyQt4/Client/pending-contact-attributes.cpp | 81 +++++++++++++++++++ TelepathyQt4/Client/pending-contact-attributes.h | 83 -------------------- 2 files changed, 81 insertions(+), 83 deletions(-) commit 4c903d4bcb6a6db59e64a9aa29f875b0178fdfff Merge: 588ba73 7a0d353 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jan 28 10:43:13 2009 -0300 Merge branch 'trivia' commit 3b919eea1c249deb66cf080e349176a24529efce Author: Olli Salli Date: Wed Jan 28 15:36:50 2009 +0200 Implement basic accessors on PendingContacts TelepathyQt4/Client/pending-contacts.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) commit ebf9908c8172b12fbe06f426f6fdbb32084ed882 Author: Olli Salli Date: Wed Jan 28 15:08:40 2009 +0200 Implement ContactManager::connection() TelepathyQt4/Client/contact-manager.cpp | 5 +++++ TelepathyQt4/Client/contact-manager.h | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) commit f2cbb80239f1193dd3b50db586acd8636ee4b54a Author: Olli Salli Date: Wed Jan 28 14:57:47 2009 +0200 Add stub PendingContacts TelepathyQt4/Client/PendingContacts | 13 ++++++ TelepathyQt4/Client/pending-contacts.cpp | 61 ++++++++++++++++++++++++++ TelepathyQt4/Client/pending-contacts.h | 69 ++++++++++++++++++++++++++++++ TelepathyQt4/Makefile.am | 5 ++- 4 files changed, 147 insertions(+), 1 deletion(-) commit 01dbcce195b5d3a07cb27abbecd83068f1345469 Author: Olli Salli Date: Wed Jan 28 14:57:07 2009 +0200 Add stub Contact TelepathyQt4/Client/Contact | 13 +++++++++ TelepathyQt4/Client/contact.cpp | 43 +++++++++++++++++++++++++++ TelepathyQt4/Client/contact.h | 61 +++++++++++++++++++++++++++++++++++++++ TelepathyQt4/Makefile.am | 3 ++ 4 files changed, 120 insertions(+) commit 3503314e6210567d394899128f06bde71a99d60a Author: Olli Salli Date: Wed Jan 28 14:04:10 2009 +0200 Add stub ContactManager class TelepathyQt4/Client/ContactManager | 13 ++++++ TelepathyQt4/Client/connection.cpp | 15 ++++++- TelepathyQt4/Client/connection.h | 2 + TelepathyQt4/Client/contact-manager.cpp | 73 +++++++++++++++++++++++++++++++ TelepathyQt4/Client/contact-manager.h | 57 ++++++++++++++++++++++++ TelepathyQt4/Makefile.am | 3 ++ 6 files changed, 161 insertions(+), 2 deletions(-) commit 3a9517f967ee149e5fdddf61ec59abf785697640 Author: Olli Salli Date: Sun Dec 21 22:07:24 2008 +0200 Add a wrapper for GetContactAttributes integrating it with the handle machinery TelepathyQt4/Client/PendingContactAttributes | 6 + TelepathyQt4/Client/connection.cpp | 57 +++++++ TelepathyQt4/Client/connection.h | 6 +- TelepathyQt4/Client/pending-contact-attributes.cpp | 161 +++++++++++++++++++ TelepathyQt4/Client/pending-contact-attributes.h | 162 ++++++++++++++++++++ TelepathyQt4/Client/referenced-handles.h | 1 + TelepathyQt4/Makefile.am | 4 + 7 files changed, 396 insertions(+), 1 deletion(-) commit 588ba7342bedfee565f20b50a78026317d136806 Author: Olli Salli Date: Wed Jan 28 13:23:55 2009 +0200 Actually make it 0.7.23, not 0.7.21 configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit da91024b5273bb1a64ce4a5fcda00eaa19519b96 Author: Olli Salli Date: Wed Jan 28 13:11:17 2009 +0200 Bump tp-glib dependency to 0.7.23, 0.7.20 has no TpMessageMixin for example configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 1caab54e3a81f4fa193bc9ccda3e6e387f5251f7 Author: Stefan Eilers Date: Wed Jan 28 11:45:36 2009 +0100 Split signals for removed contacts - signalAboutToRemoveContact() is emmitted before it is removed from the internal lists. - signalContactRemoved() is emmitted if the contact is removed internally.. TelepathyQt4/Prototype/ContactManager.cpp | 4 +++- TelepathyQt4/Prototype/ContactManager.h | 17 ++++++++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) commit cb473029559b36d541e93d3319d745f0c43d1146 Author: Stefan Eilers Date: Wed Jan 28 11:21:38 2009 +0100 API update to clearify the signals TelepathyQt4/Prototype/AccountManager.h | 5 +++++ 1 file changed, 5 insertions(+) commit d30d2c89ea1e90912f378383e0eaa8c5df429fd1 Author: Stefan Eilers Date: Wed Jan 28 11:13:48 2009 +0100 Splitting signals for removing accounts. - signalAboutToRemoveAccount() is emitted if the account is removed in telepathy and immediately before it is removed from local lists. - signalAccountRemoved() is emmitted after the account was removed from internal lists. TelepathyQt4/Prototype/AccountManager.cpp | 9 ++++++--- TelepathyQt4/Prototype/AccountManager.h | 11 +++++++++-- tests/prototype/prototype.cpp | 2 +- 3 files changed, 16 insertions(+), 6 deletions(-) commit 7a0d353de60b621cb928c529330d75eb199b1ddc Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 27 19:06:23 2009 -0300 Channel: Clear up instrospection queue if the channel closes/dies. TelepathyQt4/Client/channel.cpp | 1 + 1 file changed, 1 insertion(+) commit 411b6a902bba74da2d66706c0d520cd63d63ffdf Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 27 19:03:16 2009 -0300 Channel: Delay initial introspection. To do this continueIntrospection had to be moved to Connection class itself as it needs to be a slot. TelepathyQt4/Client/channel.cpp | 51 ++++++++++++++++++--------------------- TelepathyQt4/Client/channel.h | 2 ++ 2 files changed, 26 insertions(+), 27 deletions(-) commit efca910ba563171346f8c61aeaf7006cc8d2b948 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 27 18:56:54 2009 -0300 Channel: Changed Private member initialization to use within definition initialization. TelepathyQt4/Client/channel.cpp | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) commit e6dde60500cc90e2436e5591fa240165424dd440 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 27 18:54:16 2009 -0300 Channel: Moved baseInterface initialization to Private class itself. TelepathyQt4/Client/channel.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) commit 321c5224d43928797bdd29640295d1499b751cd7 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 27 18:53:35 2009 -0300 Channel: Removed Q_ASSERT(false) from changeReadiness(ReadinessDead). Removed Q_ASSERT(false) from changeReadiness(ReadinessDead), this is needed because when the connection is invalidated and the channel is not yet dead it will call changeReadiness(ReadinessDead) that will assert. TelepathyQt4/Client/channel.cpp | 1 - 1 file changed, 1 deletion(-) commit 069e310cd3bcc27d4b1c0fc8831cc92461cbd125 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 27 18:39:54 2009 -0300 Channel: Un-inline Private methods. TelepathyQt4/Client/channel.cpp | 640 ++++++++++++++++++++------------------- 1 file changed, 330 insertions(+), 310 deletions(-) commit bcf3ae9aeca7b70fdb9029402c2499fb8c974a68 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 27 18:34:26 2009 -0300 Channel: Moved Private::Channel &parent to *parent. TelepathyQt4/Client/channel.cpp | 140 +++++++++++++++++++-------------------- 1 file changed, 70 insertions(+), 70 deletions(-) commit 03a0d79208e7ae5ca97f4abed1095eb0417d2784 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 27 18:29:20 2009 -0300 Channel: Fixed coding style. TelepathyQt4/Client/channel.cpp | 490 +++++++++++++++++++++++++-------------- TelepathyQt4/Client/channel.h | 95 +++++--- 2 files changed, 375 insertions(+), 210 deletions(-) commit d55d771c4ef80ae9a8b356dee9adc878fadb7ee5 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 27 17:55:52 2009 -0300 Channel: Moved docs to source file as is. TelepathyQt4/Client/channel.cpp | 615 +++++++++++++++++++++++++++++++++++++++ TelepathyQt4/Client/channel.h | 548 +--------------------------------- 2 files changed, 617 insertions(+), 546 deletions(-) commit 9ac671fb27101941e309252d10b05486b674916d Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 27 16:37:44 2009 -0300 DBusProxy: Changed signal invalidated to use const QString & instead of QString. TelepathyQt4/Client/abstract-interface.cpp | 6 +++--- TelepathyQt4/Client/abstract-interface.h | 4 ++-- TelepathyQt4/Client/channel.cpp | 4 ++-- TelepathyQt4/Client/dbus-proxy.h | 2 +- tests/dbus/conn-basics.cpp | 4 ++-- tests/dbus/conn-requests.cpp | 4 ++-- tests/dbus/handles.cpp | 2 +- tests/dbus/stateful-proxy.cpp | 20 ++++++++++---------- 8 files changed, 23 insertions(+), 23 deletions(-) commit befe57fdea12689d948d03a1627a722773f52fad Author: Stefan Eilers Date: Tue Jan 27 16:57:59 2009 +0100 Improved debug output TelepathyQt4/Prototype/ContactManager.cpp | 13 +++++++------ TelepathyQt4/Prototype/PresenceManager.cpp | 7 +++++-- 2 files changed, 12 insertions(+), 8 deletions(-) commit bb4c5cb594e09ca352a748e8eb6fe7e8a657cfdd Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 27 12:26:32 2009 -0300 Renamed tests/dbus/chan-basics.cpp to tests/dbus/conn-requests.cpp. tests/dbus/Makefile.am | 10 +- tests/dbus/chan-basics.cpp | 311 ------------------------------------------ tests/dbus/conn-requests.cpp | 311 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 316 insertions(+), 316 deletions(-) commit 1a7a140f759d26b4e77401f19d22472d70111cf9 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 27 12:24:31 2009 -0300 Changed tests/dbus/handles.cpp to have init/cleanup. tests/dbus/handles.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit 48c2f0777c26db8e5e2d1722da80b68383d9292b Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 27 12:24:17 2009 -0300 Changed tests/dbus/conn-basics.cpp to have init/cleanup and create/destroy a conn for each test. tests/dbus/conn-basics.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) commit b5162ea7656bfb31ddda05da6d655a4e99d224d6 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 27 12:23:11 2009 -0300 Changed tests/dbus/cm-basics.cpp to have init/cleanup and create/destroy a cm for each test. tests/dbus/cm-basics.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) commit af7b8e2b3a3500db4b45607a27443a72bef481bd Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 27 12:22:47 2009 -0300 Changed tests/dbus/chan-basics.cpp to have init/cleanup. tests/dbus/chan-basics.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit f9fae12e67ebed988d50fc0795273dbe05bcf7bd Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 27 12:21:57 2009 -0300 Changed tests/dbus/account-basics.cpp to have init/cleanup. tests/dbus/account-basics.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit 2e80b5274576ad86b6f5073931e3910fd182f831 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 27 11:35:50 2009 -0300 Connection: Added tests for ensure/createChannel. tests/dbus/Makefile.am | 5 + tests/dbus/chan-basics.cpp | 299 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 304 insertions(+) commit 3fe9cfb54ea4b4a88545e03f387dfc3445563714 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 27 11:34:40 2009 -0300 Added echo2 test from tp-glib. Added echo2 test from tp-glib (supports ensure/createChannel). configure.ac | 1 + tests/lib/Makefile.am | 2 + tests/lib/echo2/Makefile.am | 22 ++ tests/lib/echo2/chan.c | 589 ++++++++++++++++++++++++++++++++++++++++++ tests/lib/echo2/chan.h | 58 +++++ tests/lib/echo2/conn.c | 193 ++++++++++++++ tests/lib/echo2/conn.h | 54 ++++ tests/lib/echo2/im-manager.c | 389 ++++++++++++++++++++++++++++ tests/lib/echo2/im-manager.h | 54 ++++ 9 files changed, 1362 insertions(+) commit 8a346b79305c7e40db7037e68b7b1648b142bad4 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 27 11:34:06 2009 -0300 Connection: Only ChannelType is mandatory on ensure/createChannel. TelepathyQt4/Client/connection.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) commit 26413fc30eb2d789d3ebaa70ad758d82dd5be2f5 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 27 10:52:18 2009 -0300 Connection: Updated requestConnect doc. TelepathyQt4/Client/connection.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit fa087fe1d139da82cef006892504ecf2b0316ea8 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 27 10:49:59 2009 -0300 Connection: Fixed pinocchio test conn-basics. tests/pinocchio/conn-basics.cpp | 55 ++++++++++++++++++++++----------------- 1 file changed, 31 insertions(+), 24 deletions(-) commit e9e724598a96fc2907fdd8d97a6e8b4931317018 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 27 12:00:29 2009 -0300 Changed tests/dbus/handles.cpp to inherit Test. tests/dbus/handles.cpp | 118 +++++++++++++++++++++--------------------------- 1 file changed, 52 insertions(+), 66 deletions(-) commit 6e04cce164d5866ff7e3efcb2a3b587632a140b7 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 27 12:00:21 2009 -0300 Changed tests/dbus/conn-basics.cpp to inherit Test. tests/dbus/conn-basics.cpp | 64 +++++++++++++++++++++++--------------------- 1 file changed, 33 insertions(+), 31 deletions(-) commit a06b0ff76adc4a5c80ada20700e66afe3bbed622 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 27 12:00:11 2009 -0300 Changed tests/dbus/cm-basics.cpp to inherit Test. tests/dbus/cm-basics.cpp | 95 ++++++++++++++-------------------------------- 1 file changed, 29 insertions(+), 66 deletions(-) commit 85b483a3c8875683340d4639c94f9ad4e1ca5edd Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 27 12:00:00 2009 -0300 Changed tests/dbus/account-basics.cpp to inherit Test. tests/dbus/account-basics.cpp | 167 +++++++++++++---------------------------- 1 file changed, 52 insertions(+), 115 deletions(-) commit a776f23cf173a9d34588ec02b2189d6c864bfd2b Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 27 11:59:41 2009 -0300 Changed tests/dbus/do-nothing.cpp to inherit Test. tests/dbus/do-nothing.cpp | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) commit 3b63cf57dd912fbe030da3cec25f33b9d8167876 Author: Stefan Eilers Date: Tue Jan 27 15:34:09 2009 +0100 Fixed unittests - Added workaround for buggy mission control tests/prototype/prototype.cpp | 69 +++++++++++++++++++++++++++++++++-------- 1 file changed, 56 insertions(+), 13 deletions(-) commit 644d146789ae36174e7a186b5e107c6e5f758235 Author: Stefan Eilers Date: Tue Jan 27 15:22:08 2009 +0100 Avoid unnecessary signals if old state is equal to new state TelepathyQt4/Prototype/Connection.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) commit c0d27884aa3f42f6ece120e2aff99eb5259ae869 Author: Stefan Eilers Date: Tue Jan 27 15:19:42 2009 +0100 Fixed incorrect signals if new contact was added by remote user.. TelepathyQt4/Prototype/ContactManager.cpp | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) commit 23475f584eefa3ecd9432020e0e8cadd70615bb1 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 27 10:43:30 2009 -0300 Connection: Update debug messages using nospace. TelepathyQt4/Client/connection.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit b7aa9d16bf9a9b4f783a3810431d5848f13e383e Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 27 10:30:21 2009 -0300 Connection: Proper initialize Private::ready. TelepathyQt4/Client/connection.cpp | 1 + 1 file changed, 1 insertion(+) commit a56a99adb43613a3c34adc8c1efde86e58a2d68b Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 27 09:54:19 2009 -0300 Connection: Added more PendingChannel debug messages. TelepathyQt4/Client/pending-channel.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) commit b0d67f5101669cd98c211622cbd8a0d47746fb63 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 27 09:28:04 2009 -0300 Connection: Update PendingChannel::yours doc. TelepathyQt4/Client/pending-channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 1be94d13d80f9040777e72f343c932c4d7ee4a52 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 27 09:24:29 2009 -0300 Connection: Added status to presence Offline and Available. TelepathyQt4/Client/connection.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 10f5d45a3391961eca438d83f1821dbd5419a790 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 26 18:08:54 2009 -0300 Connection: Added features param to requestConnection. Added features param to requestConnect, the returned PendingOperation will only finish when the connection is ready with features. TelepathyQt4/Client/connection-internal.h | 52 +++++++++++++++++++++++++++++ TelepathyQt4/Client/connection.cpp | 42 +++++++++++++++++++++-- TelepathyQt4/Client/connection.h | 4 ++- TelepathyQt4/Makefile.am | 2 ++ 4 files changed, 96 insertions(+), 4 deletions(-) commit fc5dd9f80bed09a36f7241b3cea0b399e8c2d553 Author: Stefan Eilers Date: Tue Jan 27 11:53:09 2009 +0100 Remove unnecessary and unused signals TelepathyQt4/Prototype/ContactManager.cpp | 3 +-- TelepathyQt4/Prototype/ContactManager.h | 10 ---------- 2 files changed, 1 insertion(+), 12 deletions(-) commit b1b3d2dc6ce7d68331eac5faa7322305beda58c7 Author: Stefan Eilers Date: Tue Jan 27 10:51:49 2009 +0100 Fixed crash after external removing of contact. - Move signalContactRemoved() before removing it from local lists. - Do not delete object in ContactManager::removeContact(). This will happen asynchronously by receiving a signal from D-BUS TelepathyQt4/Prototype/ContactManager.cpp | 34 ++++++++++++++++++----------- TelepathyQt4/Prototype/ContactManager.h | 2 +- 2 files changed, 22 insertions(+), 14 deletions(-) commit 1a05cfa040243ee1394192e2e3f49639758f3165 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 26 17:29:54 2009 -0300 Connection: Fixed becomeReady. Fixed becomeReady to set the presence to available if we are connected and we asked for FeatureSelfPresence. TelepathyQt4/Client/connection.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) commit 877910e39e69bc30754f63e1ae6f4b8dcafc1070 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 26 17:29:38 2009 -0300 Connection: Updated docs. TelepathyQt4/Client/connection.cpp | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) commit 1bf847f11bd7e474c7ec37ba31d78a229c8e7f07 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 26 17:19:21 2009 -0300 Connection: Added getter for PendingChannel::yours. TelepathyQt4/Client/pending-channel.cpp | 21 +++++++++++++++++++++ TelepathyQt4/Client/pending-channel.h | 2 ++ 2 files changed, 23 insertions(+) commit 0817e3da1dba90321e9f3a82390c3ce7c52687e0 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 26 17:07:12 2009 -0300 Connection: Removed requestChannel. Removing requestChannel we also removed test/pinnochio/chan-basics, tests for channel will be added as soon as we have a test CM that implements ensure/createChannel. TelepathyQt4/Client/connection.cpp | 45 ---- TelepathyQt4/Client/connection.h | 3 - TelepathyQt4/Client/pending-channel.cpp | 43 ---- TelepathyQt4/Client/pending-channel.h | 3 - tests/pinocchio/Makefile.am | 4 - tests/pinocchio/chan-basics.cpp | 403 ------------------------------- 6 files changed, 501 deletions(-) commit e8dee9bd553386a663220f310d3991efba308586 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 26 18:26:01 2009 -0300 Connection: Added tests for presence. TelepathyQt4/Client/connection.cpp | 4 +- tests/dbus/Makefile.am | 5 + tests/dbus/conn-basics.cpp | 191 ++++++++++++++++++++++++++++++++++++ 3 files changed, 198 insertions(+), 2 deletions(-) commit a2e3f40691ad32cf5b335c2e83cb5052f46c8362 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 26 18:25:21 2009 -0300 Added contacts conn tests from tp-glib. tests/lib/Makefile.am | 3 + tests/lib/contacts-conn.c | 630 +++++++++++++++++++++++++++++++++++++++++++++ tests/lib/contacts-conn.h | 122 +++++++++ tests/lib/debug.h | 3 + 4 files changed, 758 insertions(+) commit 4062cb797461b465deafe323ce9fa1a610e04119 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 26 14:30:42 2009 -0300 Connection: Updated docs for requestConnect/requestDisconnect. TelepathyQt4/Client/connection.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 5cac8aff0083dd1602a84a52852266f6b3a0fb8f Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 26 14:26:41 2009 -0300 Connection: Added enum Status and changed initial status to StatusUnknown. TelepathyQt4/Client/connection.cpp | 6 +++--- TelepathyQt4/Client/connection.h | 8 ++++++++ tests/dbus/handles.cpp | 6 +++--- tests/pinocchio/chan-basics.cpp | 6 +++--- tests/pinocchio/conn-basics.cpp | 18 +++++++++--------- tests/pinocchio/handles.cpp | 8 ++++---- 6 files changed, 30 insertions(+), 22 deletions(-) commit 94e50d1abcd1aa0bea05bbcefdad95a718b57557 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 26 14:06:23 2009 -0300 Connection: Clear up instrospection queue if the connection dies. TelepathyQt4/Client/connection.cpp | 3 +++ 1 file changed, 3 insertions(+) commit 4ebacead2ef2b01ec02fef0d39320a9c084b90d9 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 26 14:01:13 2009 -0300 Connection: Added getter and signal (changed) for self handle. TelepathyQt4/Client/connection.cpp | 14 ++++++++++++++ TelepathyQt4/Client/connection.h | 3 +++ 2 files changed, 17 insertions(+) commit dabad14e25d912495f2f04d544081568faed2ebf Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 26 13:53:26 2009 -0300 Connection: Implement getSelfPresence. TelepathyQt4/Client/connection.cpp | 172 +++++++++++++++++++++++++++++++++++- TelepathyQt4/Client/connection.h | 8 ++ 2 files changed, 179 insertions(+), 1 deletion(-) commit b66d87a72cdd0b2e48a67b0d30b0024f20d8007e Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 26 12:22:20 2009 -0300 Connection: All presence related methods will only work if/when becomeReady(FeatureSelfPresence) finishes. Do not enqueue call to introspectSimplePresence if not explicitly requested. TelepathyQt4/Client/connection.cpp | 47 +++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 19 deletions(-) commit c542d2b0a733bf9e71f6cdbc4b2803428ff57b62 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 26 11:57:22 2009 -0300 Connection: Updated Readiness doc. TelepathyQt4/Client/connection.cpp | 1 - 1 file changed, 1 deletion(-) commit 89fe5bdabc2bf17baa75ac3466da70bea7da7c43 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 26 11:36:09 2009 -0300 Connection: Renamed simplePresenceStatuses and setSimplePresenceStatus. Renamed simplePresenceStatuses to allowedPresenceStatuses and setSimplePresenceStatus to setSelfPresence. TelepathyQt4/Client/connection.cpp | 4 ++-- TelepathyQt4/Client/connection.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit a962008cee0cb065ee727641ceb25b55ea4f51cc Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 26 11:31:40 2009 -0300 Connection: Changed FeatureSimplePresence to FeatureSelfPresence. TelepathyQt4/Client/connection.cpp | 26 +++++++++++++------------- TelepathyQt4/Client/connection.h | 2 +- tests/pinocchio/conn-basics.cpp | 6 +++--- 3 files changed, 17 insertions(+), 17 deletions(-) commit 2c393da0a7130df2459f68789b5457bb03eff22b Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 26 11:19:47 2009 -0300 Connection: Remove presence (legacy) interface high-level API support. Connection: Remove presence (legacy) interface high-level API support (to use it use Connection::presenceInterface() directly). TelepathyQt4/Client/connection.cpp | 90 +----------------------------------- TelepathyQt4/Client/connection.h | 6 +-- tests/pinocchio/conn-basics.cpp | 9 +--- 3 files changed, 3 insertions(+), 102 deletions(-) commit 3af9e7f9fd63a9614472c2416170f485fc6335bf Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 26 10:57:42 2009 -0300 Connection: Remove aliasing interface high-level API support for now. Connection: Remove aliasing interface high-level API support for now (to use it use Connection::aliasingInterface() directly). TelepathyQt4/Client/connection.cpp | 99 ++---------------------------------- TelepathyQt4/Client/connection.h | 8 +-- tests/pinocchio/conn-basics.cpp | 9 +--- 3 files changed, 6 insertions(+), 110 deletions(-) commit c6d63536d9375c61777dd0850baeb71d51804426 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Jan 25 19:51:57 2009 -0300 Connection: Fixed PendingChannel coding style. TelepathyQt4/Client/pending-channel.cpp | 54 +++++++++++++++++-------------- TelepathyQt4/Client/pending-channel.h | 21 ++++++------ 2 files changed, 41 insertions(+), 34 deletions(-) commit ac4232fc53efd0b140e1a57f7a5106884ba1e1e5 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Jan 25 19:44:56 2009 -0300 Connection: Moved docs from PendingChannel header to source file. TelepathyQt4/Client/pending-channel.cpp | 76 +++++++++++++++++++++++++++++++ TelepathyQt4/Client/pending-channel.h | 71 ++--------------------------- 2 files changed, 79 insertions(+), 68 deletions(-) commit 53d50541bbe3a79c1c5fd682285026ee9ff52639 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Jan 25 19:58:10 2009 -0300 Connection: Updated documentation. TelepathyQt4/Client/connection.cpp | 45 +++++++++++------------------------- 1 file changed, 14 insertions(+), 31 deletions(-) commit 4f3f0ce562a63f8cb0fd3a983e8328432b5c85f0 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Jan 25 19:22:22 2009 -0300 Connection: Add setSimplePresenceStatus. TelepathyQt4/Client/connection.cpp | 19 +++++++++++++++++++ TelepathyQt4/Client/connection.h | 1 + 2 files changed, 20 insertions(+) commit a298b783ea4c1727533c10062c6cb4cb4fb7f23b Author: Andre Moreira Magalhaes (andrunko) Date: Sun Jan 25 19:08:30 2009 -0300 Connection: Added test for ensureChannel. P.s.: pinocchio does not support RequestsInterface for now. tests/pinocchio/chan-basics.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) commit 573affd9cc2a132980e5de77b063b53505c881b1 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Jan 25 19:01:42 2009 -0300 Connection: Added createChannel/ensureChannel. TelepathyQt4/Client/connection.cpp | 115 +++++++++++++++++++++++++++++-- TelepathyQt4/Client/connection.h | 11 +++ TelepathyQt4/Client/pending-channel.cpp | 92 ++++++++++++++++++++++++- TelepathyQt4/Client/pending-channel.h | 6 +- 4 files changed, 217 insertions(+), 7 deletions(-) commit 249a3ad8565f71b060827700b096b4cecc133966 Author: Stefan Eilers Date: Mon Jan 26 14:47:28 2009 +0100 Fixed signalling issue: The removed account was deleted from local list before the signal was sent. TelepathyQt4/Prototype/AccountManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a1c10c899817ad504aac9753784c68531e6e25ba Author: Andre Moreira Magalhaes (andrunko) Date: Sun Jan 25 17:48:39 2009 -0300 Connection: Make Connection::baseInterface() protected. Connection: Make Connection::baseInterface() protected and changed tests to use high-level interface. TelepathyQt4/Client/connection.h | 2 +- tests/dbus/handles.cpp | 11 +++-- tests/pinocchio/chan-basics.cpp | 82 +++++++++++++++++++++++++++++++------- 3 files changed, 74 insertions(+), 21 deletions(-) commit 1d2ebf4faa04df6f625f8211a54d855c3bf8e7d6 Author: Andre Moreira Magalhaes (andrunko) Date: Sun Jan 25 17:22:31 2009 -0300 Connection: Changed tests to use Connection::requestConnect instead of baseInterface::Connect. tests/dbus/handles.cpp | 3 ++- tests/pinocchio/chan-basics.cpp | 11 +++++------ tests/pinocchio/conn-basics.cpp | 29 +++++++++++++++-------------- tests/pinocchio/handles.cpp | 10 ++++------ 4 files changed, 26 insertions(+), 27 deletions(-) commit 6c58da47c50fafca8b3ac299e89da20889b63cdb Author: Andre Moreira Magalhaes (andrunko) Date: Sun Jan 25 14:51:40 2009 -0300 Connection: Added requestConnect. TelepathyQt4/Client/connection.cpp | 24 ++++++++++++++---------- TelepathyQt4/Client/connection.h | 2 ++ 2 files changed, 16 insertions(+), 10 deletions(-) commit 815fa711b586ab1b6a5672a022fc4b68ea69fa75 Author: Andre Moreira Magalhaes (andrunko) Date: Sat Jan 24 23:21:12 2009 -0300 Connection: Moved readiness internally and expose statusChanged. TelepathyQt4/Client/channel.cpp | 15 ++-- TelepathyQt4/Client/channel.h | 2 +- TelepathyQt4/Client/connection.cpp | 148 +++++++++++++++++++++--------------- TelepathyQt4/Client/connection.h | 14 +--- tests/dbus/handles.cpp | 78 ++++++------------- tests/pinocchio/chan-basics.cpp | 36 ++++----- tests/pinocchio/conn-basics.cpp | 122 ++++++----------------------- tests/pinocchio/handles.cpp | 36 ++++----- 8 files changed, 168 insertions(+), 283 deletions(-) commit a452686ed56a831ade2b3cb13608eefb64f7c09c Author: Andre Moreira Magalhaes (andrunko) Date: Sat Jan 24 23:21:12 2009 -0300 Connection: Added more tests to isReady/becomeReady functionality. tests/pinocchio/conn-basics.cpp | 41 ++++++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 7 deletions(-) commit 47e0912af3a5df9abb2888fa900b381a320fe048 Author: Andre Moreira Magalhaes (andrunko) Date: Sat Jan 24 23:20:08 2009 -0300 Connection: Added support for features (Aliasing, Presence and SimplePresence). TelepathyQt4/Client/connection.cpp | 206 +++++++++++++++++++++++++++--------- TelepathyQt4/Client/connection.h | 3 + 2 files changed, 160 insertions(+), 49 deletions(-) commit 6630ad3cde1be480cc8f2d73370cc9fbe8d1ae03 Author: Andre Moreira Magalhaes (andrunko) Date: Sat Jan 24 20:08:10 2009 -0300 Connection: Added test to isReady/becomeReady basic functionality. tests/pinocchio/conn-basics.cpp | 7 +++++++ 1 file changed, 7 insertions(+) commit 6f5b0a525e3f82629ffd4f685e9a33ea059c2366 Author: Andre Moreira Magalhaes (andrunko) Date: Sat Jan 24 20:03:31 2009 -0300 Connection: Added basic isReady/becomReady support. Added basic isReady/becomReady support, for now ready means connection readiness is ReadinessFull (features will be added later). TelepathyQt4/Client/connection.cpp | 61 ++++++++++++++++++++++++++++++++++++ TelepathyQt4/Client/connection.h | 11 +++++++ 2 files changed, 72 insertions(+) commit 96a6c87e9566eb89d9dd533e08ec74e0641e30cb Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jan 23 16:49:10 2009 -0300 Connection: Removed InterfaceSupportedChecking in favor of DBusProxy. TelepathyQt4/Client/connection.h | 6 ------ 1 file changed, 6 deletions(-) commit f1a5797dd17eae0df565d0009dd44d5f5a899d24 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jan 23 16:37:50 2009 -0300 Connection: Delay introspection startup. TelepathyQt4/Client/connection.cpp | 69 ++++++++++++++++++------------------ TelepathyQt4/Client/connection.h | 2 ++ 2 files changed, 36 insertions(+), 35 deletions(-) commit 21b7a6fc394468ac9ce43b0853f6564e77e52d6f Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jan 23 16:27:45 2009 -0300 Updated HACKING file. HACKING | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) commit f72609d307d7afdb70936eb900171c2794c0ce3e Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jan 23 16:20:21 2009 -0300 Connection: Delete watchers. TelepathyQt4/Client/connection.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 40e0f574094384d1b246bf6e125eef1e2c7626d1 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 22 14:55:27 2009 -0300 Connection: Changed for/Q_FOREACH to foreach wherever possible. TelepathyQt4/Client/connection.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) commit 6faf2b6f70d41984ac6337a07b528bf76c56a633 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 22 14:54:52 2009 -0300 Connection: Un-inline Private methods. TelepathyQt4/Client/connection.cpp | 407 +++++++++++++++++++----------------- 1 file changed, 211 insertions(+), 196 deletions(-) commit 729317ff0a587db1d69c150556242dee2324c064 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 22 14:41:55 2009 -0300 Connection: Moved Private::Connection &parent to *parent. TelepathyQt4/Client/connection.cpp | 66 ++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 33 deletions(-) commit 886f03cfba9c35af8a7e820fb5dda6c0dc5811b3 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 15 11:44:56 2009 -0300 Connection: Coding style fixes. TelepathyQt4/Client/connection.cpp | 287 ++++++++++++++++++++++-------------- TelepathyQt4/Client/connection.h | 82 ++++++----- 2 files changed, 217 insertions(+), 152 deletions(-) commit e062425d42f22510ff5449bd1f247d92a5fb5e1e Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 22 14:16:24 2009 -0300 Connection: Renamed dbus connection from connection to bus. Connection: Renamed dbus connection from connection to bus, just for the sake of standardization. TelepathyQt4/Client/connection.cpp | 6 +++--- TelepathyQt4/Client/connection.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) commit f7822f511d1eea791a5f7eeae9f3866c3934c61e Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jan 14 16:40:23 2009 -0300 Connection: Moved docs to source file. TelepathyQt4/Client/connection.cpp | 356 ++++++++++++++++++++++++++++++++++++ TelepathyQt4/Client/connection.h | 352 +---------------------------------- 2 files changed, 362 insertions(+), 346 deletions(-) commit a2c508fceebae6a513991620ddde96e462a0efd0 Author: Simon McVittie Date: Fri Jan 23 15:25:27 2009 +0000 Q_DISABLE_COPY in all public classes, except those that have a copy ctor TelepathyQt4/Client/abstract-interface.h | 1 + TelepathyQt4/Client/account-manager.h | 1 + TelepathyQt4/Client/channel.h | 1 + TelepathyQt4/Client/connection.h | 1 + TelepathyQt4/Client/dbus-proxy.h | 1 + TelepathyQt4/Client/optional-interface-factory.h | 2 ++ TelepathyQt4/Client/pending-channel.h | 1 + TelepathyQt4/Client/pending-handles.h | 1 + TelepathyQt4/Client/pending-operation.h | 1 + TelepathyQt4/Client/simple-pending-operations.h | 3 +++ 10 files changed, 13 insertions(+) commit 1f1153dc7087845e1909bae381af106d39c13912 Author: Simon McVittie Date: Fri Jan 23 16:56:26 2009 +0000 Remove spurious mLoop member from PinocchioTest Having moved mLoop into the parent class, the fact that there's another one here (uninitialized, and used for about half the functions) breaks the tests. tests/pinocchio/lib.h | 1 - 1 file changed, 1 deletion(-) commit d38061ccc3a28bfeec2d6a90d170129f8bf9e4fa Author: Simon McVittie Date: Fri Jan 23 13:51:50 2009 +0000 Add a test for method calls failing tests/dbus/stateful-proxy.cpp | 127 +++++++++++++++++++++++++++++++++-------- 1 file changed, 104 insertions(+), 23 deletions(-) commit a2c88a9065c87c27ec1bea2ac92ebc01a4bb3542 Author: Simon McVittie Date: Fri Jan 23 12:34:13 2009 +0000 Factor out parts of PinocchioTest into a generic Test helper tests/dbus/Makefile.am | 1 + tests/lib/Makefile.am | 29 +++++++++++++++--- tests/lib/test.cpp | 68 +++++++++++++++++++++++++++++++++++++++++++ tests/lib/test.h | 29 ++++++++++++++++++ tests/pinocchio/Makefile.am | 1 + tests/pinocchio/lib.cpp | 51 +++++--------------------------- tests/pinocchio/lib.h | 15 ++++------ 7 files changed, 137 insertions(+), 57 deletions(-) commit ceb0c7f68281eb2e61af3eb3ccc8edbc4a9c8811 Author: Simon McVittie Date: Wed Jan 21 18:55:20 2009 +0000 qt4-client-gen.py: make all method calls fail after we've been invalidated tools/qt4-client-gen.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) commit 264b77c0f063bb9247109da4bb035dc173f438f1 Author: Simon McVittie Date: Fri Jan 23 11:07:56 2009 +0000 qt4-client-gen: disconnect all D-Bus signals on invalidation tools/qt4-client-gen.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) commit 56eba22c37c3f4bb31dd551421f3aeebf27b59fb Author: Simon McVittie Date: Fri Jan 23 11:03:21 2009 +0000 OptionalInterfaceFactory: take the proxy instance as a ctor parameter Also, in qt4-client-gen, alter the ctor from DBusProxy * to take a mutable DBusProxy *. This lets us use it as the QObject parent, meaning that OIF's cleanup code is no longer needed. TelepathyQt4/Client/account-manager.cpp | 2 ++ TelepathyQt4/Client/account-manager.h | 2 +- TelepathyQt4/Client/account.cpp | 1 + TelepathyQt4/Client/account.h | 4 +-- TelepathyQt4/Client/channel.cpp | 5 ++-- TelepathyQt4/Client/channel.h | 4 +-- TelepathyQt4/Client/connection-manager.cpp | 2 ++ TelepathyQt4/Client/connection-manager.h | 2 +- TelepathyQt4/Client/connection.cpp | 2 ++ TelepathyQt4/Client/connection.h | 2 +- TelepathyQt4/Client/optional-interface-factory.cpp | 27 +++++++++++--------- TelepathyQt4/Client/optional-interface-factory.h | 20 +++++++++++---- tools/qt4-client-gen.py | 10 ++++---- 13 files changed, 51 insertions(+), 32 deletions(-) commit 576946c7dbd04aa623d93b33cf112cd9ffca5553 Author: Simon McVittie Date: Fri Jan 23 10:53:02 2009 +0000 AbstractInterface: add a constructor from DBusProxy Also make the invalidate slot protected. TelepathyQt4/Client/abstract-interface.cpp | 11 +++++++++++ TelepathyQt4/Client/abstract-interface.h | 5 +++-- 2 files changed, 14 insertions(+), 2 deletions(-) commit 47c97cad5e1e8e219602cc3bddf81a0e63ce3fad Author: Simon McVittie Date: Fri Jan 23 09:49:17 2009 +0000 OptionalInterfaceFactory: Be a template parameterized by DBusProxy subclasses This requires splitting out most of OIF into a non-template base class, OptionalInterfaceCache, and a change to the calling convention of interface(). TelepathyQt4/Client/account-manager.h | 6 +- TelepathyQt4/Client/account.h | 5 +- TelepathyQt4/Client/channel.h | 7 +- TelepathyQt4/Client/connection-manager.h | 5 +- TelepathyQt4/Client/connection.h | 8 ++- TelepathyQt4/Client/optional-interface-factory.cpp | 14 ++-- TelepathyQt4/Client/optional-interface-factory.h | 68 +++++++++++++------- 7 files changed, 68 insertions(+), 45 deletions(-) commit 576b29ce1f1095dfe2f8313beaba714c78d6a110 Author: Simon McVittie Date: Thu Jan 22 16:00:18 2009 +0000 qt4-client-gen.py: generate a constructor from a DBusProxy subclass tools/qt4-client-gen.py | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) commit cb549aa7bdd5261a18f46ba64cda0c5cd4ad9abf Author: Simon McVittie Date: Thu Jan 22 15:51:33 2009 +0000 StatefulDBusProxy: move one more method to its rightful place TelepathyQt4/Client/dbus-proxy.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) commit 220d86a4a22ca5284cc7e6d6709db6f188dd4232 Author: Simon McVittie Date: Thu Jan 22 14:52:44 2009 +0000 DBusProxy: Promote InterfaceSupportedChecking to superclass optionalInterface() can't move to the superclass because it uses the "main interface" functionality, which isn't in the superclass (for good reason - DBusProxy would have to be a template if we did that). TelepathyQt4/Client/account.cpp | 15 --------------- TelepathyQt4/Client/account.h | 8 -------- TelepathyQt4/Client/channel.h | 20 -------------------- TelepathyQt4/Client/connection.h | 19 ------------------- TelepathyQt4/Client/dbus-proxy.cpp | 15 +++++++++++++++ TelepathyQt4/Client/dbus-proxy.h | 6 ++++++ 6 files changed, 21 insertions(+), 62 deletions(-) commit d4d09fdc3121f9eeb9cc51aa8e37a877c500eacd Author: Simon McVittie Date: Thu Jan 22 13:41:44 2009 +0000 AbstractInterface: allow invalidation TelepathyQt4/Client/abstract-interface.cpp | 41 +++++++++++++++++++++++++++- TelepathyQt4/Client/abstract-interface.h | 10 +++++++ 2 files changed, 50 insertions(+), 1 deletion(-) commit 7192d0527a7bbf36d3700575d31376fae3002ac7 Author: Simon McVittie Date: Thu Jan 22 11:45:08 2009 +0000 OptionalInterfaceFactory: expect and require AbstractInterface subclasses Also fix coding style TelepathyQt4/Client/optional-interface-factory.cpp | 12 ++++++------ TelepathyQt4/Client/optional-interface-factory.h | 19 ++++++++++--------- 2 files changed, 16 insertions(+), 15 deletions(-) commit b6d6d3fbc04ac751ed81a64778f7e4106de71918 Author: Simon McVittie Date: Thu Jan 22 11:36:11 2009 +0000 qt4-client-gen.py: generate Telepathy::Client::AbstractInterface subclasses tools/qt4-client-gen.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) commit dac989fe607d9cff84573ad50f00aa9d66d1c299 Author: Simon McVittie Date: Thu Jan 22 11:33:31 2009 +0000 AbstractInterface: Add a base class for 1-1 interfaces that use a DBusProxy This subclass of QDBusAbstractInterface will let us add support for being invalidated. TelepathyQt4/Client/AbstractInterface | 13 +++++++ TelepathyQt4/Client/abstract-interface.cpp | 44 ++++++++++++++++++++++ TelepathyQt4/Client/abstract-interface.h | 55 ++++++++++++++++++++++++++++ TelepathyQt4/Makefile.am | 4 ++ 4 files changed, 116 insertions(+) commit ea60266e2e700cb490d4b5de8d03c450e9592692 Author: Simon McVittie Date: Wed Jan 21 18:56:38 2009 +0000 Account: improve code reuse TelepathyQt4/Client/account.cpp | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) commit c092fbe731af965e40d34babf1c2af4ec41766da Author: Simon McVittie Date: Wed Jan 21 17:32:46 2009 +0000 While I'm looking at the codegen anyway, deprecate Qt-style property access Having Qt properties on the QDBusAbstractInterface classes is appealing, but hides a pseudo-blocking D-Bus round-trip to the connection manager (of exactly the sort that we're trying to avoid). tools/qt4-client-gen.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) commit f853ac4daa5043c85d96e3eb664743533b782122 Author: Simon McVittie Date: Wed Jan 21 16:11:23 2009 +0000 Replace Account::removed() signal with DBusProxy::invalidated() TelepathyQt4/Client/account.cpp | 8 +++++++- TelepathyQt4/Client/account.h | 1 - 2 files changed, 7 insertions(+), 2 deletions(-) commit 2d76d689034ab593e3164e82a1e77f6c1db0fc6c Author: Simon McVittie Date: Wed Jan 21 16:11:03 2009 +0000 Rename Account::isValid to isValidAccount to avoid clash with DBusProxy TelepathyQt4/Client/account.cpp | 2 +- TelepathyQt4/Client/account.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 31ab48b7d10305ad359dae53ed834fe882a47ff6 Author: Simon McVittie Date: Wed Jan 21 16:04:25 2009 +0000 dbus-proxy.cpp: re-order so all DBusProxy code is together No code changes. TelepathyQt4/Client/dbus-proxy.cpp | 158 ++++++++++++++++++------------------ 1 file changed, 79 insertions(+), 79 deletions(-) commit ba692614736cf77b7150e302b1f272157c77ec69 Author: Simon McVittie Date: Wed Jan 21 16:03:21 2009 +0000 DBusProxy: promote invalidated, invalidationReason etc. to superclass Even StatelessDBusProxy subclasses can have a use for invalidation - for instance, Account proxies should become invalid when the account is deleted, even though the Account API is otherwise stateless. TelepathyQt4/Client/dbus-proxy.cpp | 33 +++++++++------------------------ TelepathyQt4/Client/dbus-proxy.h | 29 ++++++++++++++--------------- tests/dbus/stateful-proxy.cpp | 20 ++++++++++---------- 3 files changed, 33 insertions(+), 49 deletions(-) commit ba147032355ec7d8f465e466c4e6149dd16738f1 Merge: a92ff3b 620af04 Author: Simon McVittie Date: Wed Jan 21 12:41:56 2009 +0000 Merge commit 'oggis/handles' Conflicts: TelepathyQt4/Makefile.am tests/dbus/Makefile.am Signed-off-by: Simon McVittie commit 620af0423595a31045978d0d0496072d6a2e50b7 Author: Olli Salli Date: Fri Jan 16 16:15:12 2009 +0200 Add basic handle test using tp-glib service side, converted from tp-glib tests/dbus/Makefile.am | 9 +- tests/dbus/handles.cpp | 282 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 289 insertions(+), 2 deletions(-) commit a92ff3b2be62f95a156b5223a8c048d86a3f1090 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 15 17:45:08 2009 -0300 Account: Fixed coding style. TelepathyQt4/Client/account.cpp | 3 ++- TelepathyQt4/Client/account.h | 9 ++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) commit edc6284e67e2673359c1ec53b4fda3a5bbfcf84b Author: Simon McVittie Date: Mon Jan 19 15:03:34 2009 +0000 Simplify checks for Python, and save the full path, not just 'python' This fixes service-activation of account-manager.py. The checks for Python were originally copied from telepathy-gabble, and no longer need to be as complex as they originally did - we have a hard dependency on Python 2.5, which Gabble did not. configure.ac | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) commit 938231d66621c4917b536e5f72dac9a37334c8f8 Merge: f0c4e59 f905510 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 19 11:34:04 2009 -0300 Merge branch 'connection' Conflicts: TelepathyQt4/Makefile.am commit f0c4e59aadb9b0cf77823829aa2b47e929823bde Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jan 16 16:00:48 2009 -0300 Changed KeyFile key validation to also accept ".", "_" and "@" as valid characters. TelepathyQt4/key-file.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) commit f9055104d0676d35dd6db0c320a4c6a5d6cda995 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jan 16 16:53:29 2009 -0300 Added test to ConnectionManager::requestConnection. tests/pinocchio/cm-basics.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) commit c0ea092d8f938141486a804b84234b992194bd2a Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jan 16 16:43:43 2009 -0300 Added ConnectionManager::requestConnection support. TelepathyQt4/Client/PendingConnection | 13 +++ TelepathyQt4/Client/connection-manager.cpp | 19 ++++ TelepathyQt4/Client/connection-manager.h | 5 + TelepathyQt4/Client/pending-connection.cpp | 150 ++++++++++++++++++++++++++++ TelepathyQt4/Client/pending-connection.h | 71 +++++++++++++ TelepathyQt4/Makefile.am | 4 + 6 files changed, 262 insertions(+) commit 7a39d95251acb3cbf87442d21891c33b280874f4 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jan 16 16:22:44 2009 -0300 Removed unused declaration. TelepathyQt4/Client/account-manager.h | 1 - 1 file changed, 1 deletion(-) commit a14c61fbb8ea9cc83ca28d0e29fc6527c2cfab05 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jan 16 15:51:54 2009 -0300 Make Account::continueIntrospection scalable. TelepathyQt4/Client/account.cpp | 23 ++++------------------- 1 file changed, 4 insertions(+), 19 deletions(-) commit 8d2e1af5885e61953e97757c800c71b5e29b7d93 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jan 16 15:51:32 2009 -0300 Fixed removal of features from Account::Private::pendingFeatures. TelepathyQt4/Client/account.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 7733b913aa4d089d720a73f6e39fa90f8cfde94b Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 13 18:27:04 2009 -0300 Update Account::isValid/isEnabled docs. TelepathyQt4/Client/account.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) commit ae14994f3c5671c5b5be81a3896135ca01636b72 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 13 18:06:50 2009 -0300 Removed account-manager-internal.h. TelepathyQt4/Client/account-manager-internal.h | 71 ------------------------ TelepathyQt4/Client/account-manager.cpp | 29 +++++++++- TelepathyQt4/Makefile.am | 1 - 3 files changed, 28 insertions(+), 73 deletions(-) commit cde6066d9942ce8a454641d25a97336b74ce6071 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 13 18:04:59 2009 -0300 Removed account-internal.h. TelepathyQt4/Client/account-internal.h | 96 -------------------------------- TelepathyQt4/Client/account.cpp | 48 +++++++++++++++- TelepathyQt4/Makefile.am | 1 - 3 files changed, 47 insertions(+), 98 deletions(-) commit f1e33977dfc5fd1e09563cac362dc0cb04fa4cf7 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 13 18:02:43 2009 -0300 Moved all signals/slots from AccountManager::Private to AccountManager. TelepathyQt4/Client/account-manager-internal.h | 22 +-- TelepathyQt4/Client/account-manager.cpp | 252 +++++++++++------------- TelepathyQt4/Client/account-manager.h | 12 +- TelepathyQt4/Makefile.am | 1 - 4 files changed, 133 insertions(+), 154 deletions(-) commit 565d8d1a845f4a820ba7703e0d8aa906ff08ca60 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 13 17:47:18 2009 -0300 Moved all signals/slots from Account::Private to Account. TelepathyQt4/Client/account-internal.h | 45 +- TelepathyQt4/Client/account.cpp | 766 +++++++++++++++----------------- TelepathyQt4/Client/account.h | 20 +- TelepathyQt4/Makefile.am | 1 - 4 files changed, 379 insertions(+), 453 deletions(-) commit 2c0f41f458edb2591b6d8c949f6ec75efd5ae9af Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 13 16:57:47 2009 -0300 Added missing signals to Account class. TelepathyQt4/Client/account-internal.h | 6 +++++- TelepathyQt4/Client/account.cpp | 20 ++++++++++++++++++-- TelepathyQt4/Client/account.h | 6 +++++- 3 files changed, 28 insertions(+), 4 deletions(-) commit ba6b5d3703acfa5225d84665115f73fa6bbdc36d Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 13 16:49:53 2009 -0300 Changed Account classes to use QString instead of QDBusObjectPath. Changed Account classes to use QString instead of QDBusObjectPath. All other classes were already doing it, so change. TelepathyQt4/Client/account-manager-internal.h | 12 ++-- TelepathyQt4/Client/account-manager.cpp | 92 ++++++++++++++---------- TelepathyQt4/Client/account-manager.h | 17 +++-- TelepathyQt4/Client/account.cpp | 4 +- TelepathyQt4/Client/account.h | 3 +- TelepathyQt4/Client/pending-account.cpp | 3 +- tests/dbus/account-basics.cpp | 22 ++---- 7 files changed, 79 insertions(+), 74 deletions(-) commit 00706e3b8c9328a4472c6184ba3969583022723d Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 13 16:49:38 2009 -0300 Implemented Account::getConnection. TelepathyQt4/Client/account.cpp | 25 +++++++++++++++++++++---- TelepathyQt4/Client/account.h | 4 ++-- 2 files changed, 23 insertions(+), 6 deletions(-) commit 869d2ce54757d43c7e20bab2ccb3fce29d9669a7 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 13 14:38:51 2009 -0300 Added account protocol info test. tests/dbus/account-basics.cpp | 49 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) commit bcb15a0a25d8146badff62518fcb96293271b170 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 13 14:06:38 2009 -0300 Added account avatar test. tests/dbus/account-basics.cpp | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) commit 073c9c0d25cc13f28dc4610c884408f021dc8812 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 13 14:05:48 2009 -0300 Added Avatar interface to test account manager. tests/lib/account-manager.py | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) commit 4db083907c977cfb4d1fb7b980fa745a7af460b6 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 13 14:05:11 2009 -0300 Use Telepathy::Avatar instead of avatarData/avatarMimeType. TelepathyQt4/Client/account-internal.h | 5 ++- TelepathyQt4/Client/account.cpp | 61 +++++++++----------------------- TelepathyQt4/Client/account.h | 7 ++-- 3 files changed, 21 insertions(+), 52 deletions(-) commit 3d903da857d4d02a21979742d300d2726e96e575 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 13 11:30:46 2009 -0300 Emit Account::avatarChanged signal. TelepathyQt4/Client/account-internal.h | 2 ++ TelepathyQt4/Client/account.cpp | 62 +++++++++++++++++++++++--------- 2 files changed, 47 insertions(+), 17 deletions(-) commit 80be600a52e191ae8c7d1a0ab2b780e3fbea1d62 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 13 11:12:32 2009 -0300 Check for avatar interface early. TelepathyQt4/Client/account-internal.h | 1 + TelepathyQt4/Client/account.cpp | 37 ++++++++++++++++++++------------ 2 files changed, 24 insertions(+), 14 deletions(-) commit 8e97ecbd26a4ddfa96765e5dda5d175edb6be378 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 13 11:03:36 2009 -0300 Added TODO note. TelepathyQt4/Client/account-manager.cpp | 2 ++ 1 file changed, 2 insertions(+) commit b786a7bc7b6d7e132b0fc5c253f1beddb34daa9d Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 13 10:46:37 2009 -0300 Added support for missing features on Account. Added support for missing features on Account, so we know what features are not supported and don't try to retrieve them again. Also do not fail if avatar is not found and you only care about avatar. TelepathyQt4/Client/account-internal.h | 1 + TelepathyQt4/Client/account.cpp | 88 +++++++++++++++++++++----------- 2 files changed, 59 insertions(+), 30 deletions(-) commit 560c1cb88d5bd80493bb2c1f1d76c9796831bba0 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 12 18:00:06 2009 -0300 Added missing PendingAccount to Makefile.am. TelepathyQt4/Makefile.am | 1 + TelepathyQt4/header-compile-test.cpp | 3 +++ 2 files changed, 4 insertions(+) commit 27b89af08247188f8df3e561e2b1e53baf75781d Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 12 21:34:35 2009 -0300 Added more Account documentation. TelepathyQt4/Client/account.cpp | 284 ++++++++++++++++++++++++++++++++++++--- TelepathyQt4/Client/account.h | 8 +- 2 files changed, 271 insertions(+), 21 deletions(-) commit 682cd5a2e2fb6e2c4b6c8e3e78acf5c9df13594a Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 12 20:59:38 2009 -0300 Finished implementation of Account methods. Missing only Account::avatarChanged signal and Account::getConnection. TelepathyQt4/Client/account-internal.h | 29 ++- TelepathyQt4/Client/account.cpp | 327 ++++++++++++++++++++++++++------ TelepathyQt4/Client/account.h | 56 ++++-- 3 files changed, 333 insertions(+), 79 deletions(-) commit c3b7ca084e397759e25ec3d6d71a5004ec6ea0dd Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 12 20:58:56 2009 -0300 Enable generation of account avatar interface autogenerated code. TelepathyQt4/account.xml | 2 -- 1 file changed, 2 deletions(-) commit 3cd37379c702e2fe65b088e9e1d06785b0442a1e Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jan 9 17:46:28 2009 -0300 Added tests for account creation. tests/dbus/account-basics.cpp | 89 +++++++++++++++++++++++++++++++++++------ 1 file changed, 76 insertions(+), 13 deletions(-) commit eb30ab06a960769191fb7eaafaf355027f3feb29 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jan 9 17:45:44 2009 -0300 Added AccountManager::createAccount support. TelepathyQt4/Client/PendingAccount | 13 +++ TelepathyQt4/Client/account-manager.cpp | 8 +- TelepathyQt4/Client/account-manager.h | 1 + TelepathyQt4/Client/pending-account.cpp | 151 +++++++++++++++++++++++++++++++ TelepathyQt4/Client/pending-account.h | 72 +++++++++++++++ TelepathyQt4/Makefile.am | 3 + 6 files changed, 245 insertions(+), 3 deletions(-) commit 90e9312d8b4fccef355d6f538849d0a2b053a353 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jan 9 17:43:20 2009 -0300 Fixed Account creation. TelepathyQt4/Client/account.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) commit 8eee84faa7f7e465d89482e69b96358df9bec462 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jan 9 13:44:14 2009 -0300 Initial integration between AccountManager and Account. TelepathyQt4/Client/account-manager.cpp | 82 ++++++++++++++++++++----------- TelepathyQt4/Client/account-manager.h | 11 +++-- 2 files changed, 60 insertions(+), 33 deletions(-) commit 8293b17a1a6efe7556a0e1e47b1e7fffbbebfec2 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 8 19:49:37 2009 -0300 Added initial Account impl. TelepathyQt4/Client/account-internal.h | 101 +++++++ TelepathyQt4/Client/account.cpp | 501 +++++++++++++++++++++++++++++++- TelepathyQt4/Client/account.h | 152 +++++++++- TelepathyQt4/Makefile.am | 3 + 4 files changed, 743 insertions(+), 14 deletions(-) commit 4a0c65cbeaa96a2e3d2567453d5eba685d5b745e Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jan 9 17:47:42 2009 -0300 Make AccountManager::Private a class to fit its definition. TelepathyQt4/Client/connection-manager.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit f8d0d517fadf86375f65f52cf2a77d22922adc3a Author: Simon McVittie Date: Thu Jan 15 13:35:36 2009 +0000 DBusProxy: remove multiple blank lines TelepathyQt4/Client/dbus-proxy.cpp | 2 -- 1 file changed, 2 deletions(-) commit 362b4fe3d07488615c5dabe85d85f8c9e00243db Author: Simon McVittie Date: Thu Jan 15 13:35:18 2009 +0000 DBusProxy: tidy up docs TelepathyQt4/Client/dbus-proxy.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) commit b75839adc2b53cd765c9b5167d9c267ab4e1e077 Author: Simon McVittie Date: Thu Jan 15 13:34:22 2009 +0000 DBusProxy: use top-level names for Qt headers TelepathyQt4/Client/dbus-proxy.cpp | 4 ++-- tests/dbus/stateful-proxy.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) commit ec4ca8a5577ac2d5146819e1d4ada27b18eb8a93 Author: Simon McVittie Date: Thu Jan 15 13:26:56 2009 +0000 DBusProxy: move docs to .cpp TelepathyQt4/Client/dbus-proxy.cpp | 104 ++++++++++++++++++++++++++++++++++++ TelepathyQt4/Client/dbus-proxy.h | 102 ----------------------------------- 2 files changed, 104 insertions(+), 102 deletions(-) commit 3973651af34c0958d21f43ed73677811c316fd7a Author: Simon McVittie Date: Thu Jan 15 13:17:16 2009 +0000 DBusProxy and subclasses: don't store a pointer to parent This turns out to be unnecessary for these classes. Also re-indent initializers. TelepathyQt4/Client/dbus-proxy.cpp | 31 +++++++++++-------------------- 1 file changed, 11 insertions(+), 20 deletions(-) commit 9753bc3174e74d05a0ad44ed17f053ffc43276d3 Author: Simon McVittie Date: Thu Jan 15 13:04:50 2009 +0000 DBusProxy: fix &/* placement TelepathyQt4/Client/dbus-proxy.cpp | 2 +- TelepathyQt4/Client/dbus-proxy.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 1385b043a1c07d6e2c4ab5ccc084ff29d3ef8ff6 Author: Simon McVittie Date: Thu Jan 15 12:48:41 2009 +0000 DBusProxy: copyright 2009 TelepathyQt4/Client/dbus-proxy.cpp | 4 ++-- TelepathyQt4/Client/dbus-proxy.h | 4 ++-- tests/dbus/stateful-proxy.cpp | 21 +++++++++++++++++++++ 3 files changed, 25 insertions(+), 4 deletions(-) commit c041bf7aaa1fa2b12372b4e7efd753d899abfe15 Merge: 584980e 0871801 Author: Olli Salli Date: Thu Jan 15 08:46:20 2009 +0200 Merge branch 'master' into handles Conflicts: tests/pinocchio/Makefile.am commit 2f8ae7c4d0e5432535e32c5b3873135a16a47f0c Author: Simon McVittie Date: Wed Jan 14 18:00:28 2009 +0000 Add a basic test for StatefulDBusProxy tests/dbus/Makefile.am | 9 +- tests/dbus/stateful-proxy.cpp | 216 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 223 insertions(+), 2 deletions(-) commit ec204ad08841a71a19c13fd2a96218f64d3c81a2 Author: Simon McVittie Date: Wed Jan 14 12:55:26 2009 +0000 DBusProxy: note what would be needed for feature parity with TpProxy TelepathyQt4/Client/dbus-proxy.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) commit 26c5dd097dbdfbce3a03194b219ebc4477cc95e2 Author: Simon McVittie Date: Wed Jan 14 12:55:03 2009 +0000 Connection: invalidate with a vaguely appropriate error when disconnected In a near-future telepathy-spec we should define better errors, but these will do for now. TelepathyQt4/Client/connection.cpp | 44 ++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) commit 1a3ae2fc1b49651c35c3c372aa913780c8cc7750 Author: Simon McVittie Date: Wed Jan 14 12:49:57 2009 +0000 Channel: fix incorrect error reply for Close() TelepathyQt4/Client/channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 7541d71f3f77de81e447422929683ffe0e76bff4 Author: Simon McVittie Date: Wed Jan 14 12:50:45 2009 +0000 Channel: invalidate when Closed is received We don't really have an appropriate error code yet, so I've used Cancelled. TelepathyQt4/Client/channel.cpp | 3 +++ 1 file changed, 3 insertions(+) commit 96a93adb7675b5498f35a76c6a676aca1a56e353 Author: Simon McVittie Date: Wed Jan 14 18:00:14 2009 +0000 actually initialize (and also free) StatefulDBusProxy::mPriv TelepathyQt4/Client/dbus-proxy.cpp | 8 +++++++- TelepathyQt4/Client/dbus-proxy.h | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) commit 62f09c35c59fbb1225c035889a42723b2c8e0406 Author: Simon McVittie Date: Wed Jan 14 18:28:55 2009 +0000 Fix signature of invalidated Qt signal binding is sensitive to the difference between Telepathy::Client::StatefulDBusProxy and StatefulDBusProxy, because it's secretly string comparison. Sad face. TelepathyQt4/Client/dbus-proxy.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 28e3d37d68bb633b7e184ad92f2513d00c48fb79 Author: Simon McVittie Date: Mon Jan 12 17:12:32 2009 +0000 StatefulDBusProxy: Fix logic for tracking name ownership This requires the addition of a protected setBusName method. TelepathyQt4/Client/dbus-proxy.cpp | 11 ++++++----- TelepathyQt4/Client/dbus-proxy.h | 3 +++ 2 files changed, 9 insertions(+), 5 deletions(-) commit efe4d21394680d6e25d6f208dcde7d1ec69f63b2 Author: Simon McVittie Date: Mon Jan 12 17:08:09 2009 +0000 StatefulDBusProxy: find out the unique name For a stateful interface it doesn't make sense to follow name-owner changes, so we want to bind to the unique name. Currently I match telepathy-glib's implementation and use a pseudo-blocking call; since our call is only to the dbus-daemon this doesn't introduce any message reordering, and it avoids having to delay the start of the introspection process for subclasses until the unique name has been discovered. TelepathyQt4/Client/dbus-proxy.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) commit 2d9c2367299942029dada5784975fd6c177842fe Author: Simon McVittie Date: Mon Jan 12 16:53:11 2009 +0000 StatefulDBusProxy: add an inline version of invalidate() that takes QDBusError TelepathyQt4/Client/dbus-proxy.h | 8 ++++++++ 1 file changed, 8 insertions(+) commit 9a8c1c250cde44f2a93c61eb1b0b31bebfb90020 Author: Simon McVittie Date: Wed Jan 14 17:59:52 2009 +0000 add a destructor to StatelessDBusProxy for future-proofing TelepathyQt4/Client/dbus-proxy.cpp | 7 ++++++- TelepathyQt4/Client/dbus-proxy.h | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) commit 1d8015d812b1e6949137cf069ee9349a99338d1c Author: Simon McVittie Date: Mon Jan 12 16:47:39 2009 +0000 StatelessDBusProxy: warn if the bus name is unique (makes no sense) TelepathyQt4/Client/dbus-proxy.cpp | 4 ++++ 1 file changed, 4 insertions(+) commit b1dee07b8bd7f0836825b662621455831ba51bb4 Author: Simon McVittie Date: Mon Jan 12 15:56:25 2009 +0000 StatefulDBusProxy: make calling invalidate() twice not be an error We should just ignore the second invalidate() call and keep the first one, with a debug message. Also, add debug messages. When debugging we will probably want to know when a service dies. TelepathyQt4/Client/dbus-proxy.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) commit b1629438ca43172220b4af4eefeb632b4d411101 Author: Simon McVittie Date: Mon Jan 12 15:49:13 2009 +0000 DBusProxy: Un-inline Private constructors TelepathyQt4/Client/dbus-proxy.cpp | 37 ++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) commit 2a1b772b0abe9fc541940d068de99478b3e10813 Author: Simon McVittie Date: Mon Jan 12 15:32:01 2009 +0000 StatefulDBusProxy: raise NameHasNoOwner if the service dies TelepathyQt4/Client/dbus-proxy.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit e03d3e1fa99706d9700aceb854faff22f94e51b0 Author: Simon McVittie Date: Mon Jan 12 15:31:22 2009 +0000 Constants: add TELEPATHY_DBUS_ERROR_NAME_HAS_NO_OWNER QtDBus doesn't expose equivalents of all the DBUS_ERROR_* macros from libdbus, and this one seems like the most appropriate mapping for "the service tracked by this StatefulDBusProxy has gone away". TelepathyQt4/constants.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) commit 3c3beccdb4a6a2c05d5ad71d2d57537fa26b6e20 Author: Simon McVittie Date: Mon Jan 12 14:30:24 2009 +0000 DBusProxy: coding style adjustments TelepathyQt4/Client/dbus-proxy.cpp | 36 ++++++++++++++++++++++-------------- TelepathyQt4/Client/dbus-proxy.h | 36 ++++++++++++++++++------------------ 2 files changed, 40 insertions(+), 32 deletions(-) commit bee7ee71f5614f5ae680048097914e484f9bb420 Author: George Goldberg Date: Thu Dec 11 17:56:09 2008 +0000 Change nameownerchanged handling slot to not call invalidate if the object is already invalidated. TelepathyQt4/Client/dbus-proxy.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit f2a71f21a1d539822268633e6bad1302b643bbfe Author: George Goldberg Date: Thu Dec 11 17:35:23 2008 +0000 Correct a couple of minor api-docs typos. TelepathyQt4/Client/dbus-proxy.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit d856453b54d92a28a79b2132600229b2bdd49254 Author: George Goldberg Date: Thu Dec 11 17:34:15 2008 +0000 Tame the Q_ASSERTs in StatefulDBusProxy invalidation code a bit. TelepathyQt4/Client/dbus-proxy.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) commit 7db0b38e825b6c5f690cef04fcfe2c25e1a93cb3 Author: George Goldberg Date: Wed Dec 10 17:04:51 2008 +0000 Invalidate statefulDbusProxy classes on getting nameOwnerChanged signal from DBus. TelepathyQt4/Client/dbus-proxy.cpp | 12 ++++++++++++ TelepathyQt4/Client/dbus-proxy.h | 2 ++ 2 files changed, 14 insertions(+) commit 3c07414089d3d2638b364cca2c0a72d1d2b78484 Author: George Goldberg Date: Wed Dec 3 15:15:01 2008 +0000 Implement a protected method that can be called to invalidate the StatefulDBusProxy. TelepathyQt4/Client/dbus-proxy.cpp | 28 ++++++++++++++++++++++++++++ TelepathyQt4/Client/dbus-proxy.h | 5 ++++- 2 files changed, 32 insertions(+), 1 deletion(-) commit 3d4bad05d6e114647c90047e366854cf63ac4083 Author: George Goldberg Date: Wed Dec 3 14:58:20 2008 +0000 Implement getters for validity information in StatefulDBusProxy. TelepathyQt4/Client/dbus-proxy.cpp | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) commit e29d315014f6ea894fd1aa0621c6e04b8455bcf3 Author: George Goldberg Date: Wed Dec 3 14:46:36 2008 +0000 Move DBusProxy invalidation to StatefulDBusProxy subclass. TelepathyQt4/Client/dbus-proxy.h | 93 +++++++++++++++++++++----------------- 1 file changed, 51 insertions(+), 42 deletions(-) commit 0871801796ae8266769b9b6ddbe10da6a81ef8c8 Merge: 66aebc4 5cafc49 Author: Simon McVittie Date: Wed Jan 14 18:31:07 2009 +0000 Merge branch 'tpglib' commit 66aebc40f180af31ffc404d8b43f08bcad721e24 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 13 18:21:05 2009 -0300 Moved all signals/slots from ConnectionManager::Private to ConnectionManager. TelepathyQt4/Client/connection-manager-internal.h | 24 +- TelepathyQt4/Client/connection-manager.cpp | 369 +++++++++++---------- TelepathyQt4/Client/connection-manager.h | 16 +- 3 files changed, 203 insertions(+), 206 deletions(-) commit 584980e40d29b46b3cf8c69a0a6f5b0020d7dbc2 Author: Olli Salli Date: Mon Jan 12 20:18:48 2009 +0200 Add conversion functions from ReferencedHandles to bare containers TelepathyQt4/Client/referenced-handles.cpp | 5 +++++ TelepathyQt4/Client/referenced-handles.h | 23 ++++++++++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) commit 46b40793aee591c112076c8f3b553d7a40980e6f Author: Olli Salli Date: Mon Jan 12 17:35:31 2009 +0200 Add PendingHandles pretty-include header and ensure that it and the one for ReferencedHandles is always used TelepathyQt4/Client/PendingHandles | 13 +++++++++++++ TelepathyQt4/Client/ReferencedHandles | 6 ++++++ TelepathyQt4/Client/pending-handles.cpp | 2 +- TelepathyQt4/Client/pending-handles.h | 4 ++++ TelepathyQt4/Client/referenced-handles.cpp | 4 +++- TelepathyQt4/Client/referenced-handles.h | 6 +++++- 6 files changed, 32 insertions(+), 3 deletions(-) commit 14f233fa5c7ecad6cf95d9f80cf97079ac828dd0 Merge: 4d4a5c8 b9758f0 Author: Olli Salli Date: Mon Jan 12 10:55:16 2009 +0200 Merge branch 'master' into handles Conflicts: TelepathyQt4/Client/connection.h TelepathyQt4/Makefile.am commit 7713e35fa594f1035b7d7d118ffe191829cf17bc Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jan 9 17:46:56 2009 -0300 Fixed some leaks. TelepathyQt4/Client/connection-manager.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) commit 5cafc4937df677fe1251a443c6de9e14d1984e81 Author: Simon McVittie Date: Fri Jan 9 16:14:35 2009 +0000 Add a simple CM test using a telepathy-glib CM in-process with the test tests/dbus/Makefile.am | 15 +++++ tests/dbus/cm-basics.cpp | 150 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 165 insertions(+) commit 301caec5217f4b31eddb69e653bd3a7ae4ebd6c1 Author: Simon McVittie Date: Fri Jan 9 16:56:30 2009 +0000 Move MOC_INCLUDES further up tests/dbus/Makefile.am so we can append to it We want to put telepathy-glib on the include path conditionally. tests/dbus/Makefile.am | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) commit 50e505d1d8144c14dc659369d0cc1423879dd633 Author: Simon McVittie Date: Fri Jan 9 15:34:24 2009 +0000 tests/: consistently build generated moc files in _gen Also, in every directory, generate moc files in such a way that we can build them either from the .h (if there is one) or the .cpp (if not). Rationale: if the QObject is entirely local to one test, we don't need to bother making a header just for moc's benefit - we can just run moc on the .cpp, which contains both declaration and definition. However, for "library" code that already needs a header, like tests/peregrine/lib.{h,cpp}, the declaration that moc needs is in the header. tests/Makefile.am | 11 ++++++++--- tests/dbus/Makefile.am | 6 +++--- tests/dbus/account-basics.cpp | 3 ++- tests/dbus/do-nothing.cpp | 3 ++- tests/key-file.cpp | 3 ++- tests/manager-file.cpp | 3 ++- 6 files changed, 19 insertions(+), 10 deletions(-) commit 1c63e74edf92e980005af1494076851df4543893 Author: Simon McVittie Date: Fri Jan 9 15:24:01 2009 +0000 tests/: make it clearer why only some of the CXXFLAGS are passed to moc tests/Makefile.am | 10 ++++++---- tests/dbus/Makefile.am | 8 +++++--- tests/pinocchio/Makefile.am | 8 +++++--- tests/prototype/Makefile.am | 8 +++++--- 4 files changed, 21 insertions(+), 13 deletions(-) commit 5dcbb0208054f30bcdc677c7799087e23e1053bb Author: Simon McVittie Date: Fri Jan 9 15:14:34 2009 +0000 Move account-manager.py to tests/lib tests/Makefile.am | 1 - tests/account-manager.py | 287 ---------------------- tests/dbus-1/services/account-manager.service.in | 2 +- tests/lib/Makefile.am | 3 + tests/lib/account-manager.py | 287 ++++++++++++++++++++++ 5 files changed, 291 insertions(+), 289 deletions(-) commit 774b6d2adac35684bdb8ae05257c6c451665d002 Author: Simon McVittie Date: Fri Jan 9 15:10:31 2009 +0000 Update tests/README to explain what tests/lib does tests/README | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) commit 4b29716f88422ba76eb7f0b80f81b9ec1af64841 Author: Simon McVittie Date: Fri Jan 9 15:10:19 2009 +0000 account-manager.service.in: use @TEST_PYTHON@ If we just execute account-manager.py, it might not work - there is no guarantee that /usr/bin/python is the version we need. Explicitly run @TEST_PYTHON@ instead, and pass the script as an argument. tests/dbus-1/services/account-manager.service.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 29157bf434df7792f2664af16b38a4e39257595e Author: Simon McVittie Date: Fri Jan 9 15:09:23 2009 +0000 tests/dbus/Makefile.am: don't build account-basics unless we can run it The account-basics test requires Python 2.5 with dbus-python (which is substituted as TEST_PYTHON). This is not a hard dependency, so the build and `make check` should succeed if it's missing. tests/dbus/Makefile.am | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) commit 44d39ae6c8fa7df01a13ea2030641a1b670a4892 Author: Simon McVittie Date: Fri Jan 9 15:06:58 2009 +0000 tests/lib: build a simple CM and Connection, taken from telepathy-glib configure.ac | 1 + tests/Makefile.am | 2 + tests/lib/Makefile.am | 19 ++++ tests/lib/simple-conn.c | 226 ++++++++++++++++++++++++++++++++++++++++++++ tests/lib/simple-conn.h | 59 ++++++++++++ tests/lib/simple-manager.c | 95 +++++++++++++++++++ tests/lib/simple-manager.h | 55 +++++++++++ 7 files changed, 457 insertions(+) commit d37511ef1ca731f23f597f33ae39d44594a27843 Author: Simon McVittie Date: Fri Jan 9 15:05:56 2009 +0000 configure.ac: check whether we can run telepathy-glib-based tests These need telepathy-glib, and also require that the copy of QtCore we're using has GLib main loop integration. I'm assuming that the presence of -lglib-2.0 in pkg-config --static --libs is a sufficient indication that it does. configure.ac | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) commit 09fe7864de5def90374b404d1748e03aef66811f Author: Simon McVittie Date: Fri Jan 9 15:04:34 2009 +0000 configure.ac: Get some suitable CFLAGS for C code (from telepathy-glib) configure.ac | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) commit 3f3135d81bf04d1026d78f7c8903184c715c39be Author: Simon McVittie Date: Fri Jan 9 15:04:10 2009 +0000 configure.ac: fix copy/paste error when selecting whether we are an official release configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 55f12bf56a13791dba788656e6970b895ff326a3 Author: Simon McVittie Date: Fri Jan 9 15:03:45 2009 +0000 configure.ac: check for a C compiler too configure.ac | 7 +++++++ 1 file changed, 7 insertions(+) commit b9758f07993ab8d73f81593571c8693d45507d95 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jan 9 10:50:46 2009 -0300 Trivia patch, change the way connection-manager-internal.h is included. TelepathyQt4/Client/connection-manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 7ab07b8b97a36d5ea3f4ff7792fedac963f40e92 Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jan 9 10:44:12 2009 -0300 Revert "Include ConnectionManager public header, first, in connection-manager-internal.h" This reverts commit c42b234f3d88a929a33f8bc10de99bda82122a90. TelepathyQt4/Client/connection-manager-internal.h | 5 +++-- TelepathyQt4/Client/connection-manager.cpp | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) commit 3f6d8e8fac5c408517ef2583028418cdfc6dd8de Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 8 17:56:22 2009 -0300 Removed unnecessary initialization on AccountManager::Private. TelepathyQt4/Client/account-manager.cpp | 1 - 1 file changed, 1 deletion(-) commit 40041aab5c065b61b1c39cfa22fc5e7331408ef7 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 8 14:11:17 2009 -0300 Make AccountManager::Private a class to fit its definition. TelepathyQt4/Client/account-manager.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit abd86c260a54cc6b79301d46109fb8867f3bfa37 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 8 17:57:20 2009 -0300 Delete baseInterface on ConnectionManager::Private destructor. TelepathyQt4/Client/connection-manager.cpp | 1 + 1 file changed, 1 insertion(+) commit e09f0f7fbf371d6a577ec019ce62c577873be6a2 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 8 17:56:38 2009 -0300 Delete baseInterface on AccountManager::Private destructor. TelepathyQt4/Client/account-manager.cpp | 1 + 1 file changed, 1 insertion(+) commit 72ca1694b4aa24de1d91d80f99655f793b52d9ae Author: Andre Moreira Magalhaes (andrunko) Date: Fri Jan 9 10:13:06 2009 -0300 Added empty line between includes. TelepathyQt4/Client/connection-manager.cpp | 1 + 1 file changed, 1 insertion(+) commit d7d20731a26340dbf45c5485706d9647892dac7d Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 8 19:46:45 2009 -0300 Updated AccountManager documentation. TelepathyQt4/Client/account-manager.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit 88bf177ea0a32bafdd771ac43f4dc4a477079b6e Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 8 19:47:26 2009 -0300 Updated ConnectionManager documentation. TelepathyQt4/Client/connection-manager.cpp | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) commit a34d73121b0aee1d3c34c89268b13434727e36d7 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 8 19:48:10 2009 -0300 Updated ManagerFile documentation. TelepathyQt4/manager-file.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit dabc2c649105b20b7c943ac73a262b774e8dc346 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 8 19:47:51 2009 -0300 Updated KeyFile documentation. TelepathyQt4/key-file.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) commit 8dc6805302939cd86569b42414a9f5cbe6c5f636 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Jan 8 19:48:31 2009 -0300 Generate doc for cpp files. doxygen.cfg.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 232cc6a0de88713161376b615546b1f899cec446 Author: Simon McVittie Date: Thu Jan 8 20:04:50 2009 +0000 Ignore generated service file .gitignore | 1 + 1 file changed, 1 insertion(+) commit b34f19282684b7967dda557522b55ceea5ac345f Author: Simon McVittie Date: Thu Jan 8 19:59:57 2009 +0000 AccountManager: fix up #includes for build system alterations TelepathyQt4/Client/account-manager.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 6c3a1b01b77d95e09813f4161c19077dcec9671c Author: Simon McVittie Date: Thu Jan 8 19:42:42 2009 +0000 Distribute Client/account-manager-internal.h TelepathyQt4/Makefile.am | 1 + 1 file changed, 1 insertion(+) commit c667f525d571c795137ffefbe77e0ee843e0941d Author: Simon McVittie Date: Thu Jan 8 19:38:30 2009 +0000 tests/key-file.cpp: chdir to the right directory if out-of-tree tests/key-file.cpp | 5 +++++ 1 file changed, 5 insertions(+) commit dee85092b1236e2ef1db70d218c171397fc762fb Author: Simon McVittie Date: Thu Jan 8 19:37:39 2009 +0000 Remove -Wmissing-declarations; g++ 4.2 implements it as a noisy no-op configure.ac | 1 - 1 file changed, 1 deletion(-) commit c42b234f3d88a929a33f8bc10de99bda82122a90 Author: Simon McVittie Date: Thu Jan 8 19:08:56 2009 +0000 Include ConnectionManager public header, first, in connection-manager-internal.h This means we can include only the internal header in the .cpp, and the public header will still be checked for self-containedness. So, do that. TelepathyQt4/Client/connection-manager-internal.h | 5 ++--- TelepathyQt4/Client/connection-manager.cpp | 3 +-- 2 files changed, 3 insertions(+), 5 deletions(-) commit 3cac993ba803795272820636308d1f88ffc78261 Author: Simon McVittie Date: Thu Jan 8 19:07:44 2009 +0000 Use full path for pending-string-list.moc.hpp TelepathyQt4/Client/pending-string-list.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 4e0d09303c989ce862ca780407f1433a25195b44 Author: Simon McVittie Date: Thu Jan 8 19:07:24 2009 +0000 Distribute connection-manager-internal.h TelepathyQt4/Makefile.am | 1 + 1 file changed, 1 insertion(+) commit b39d7124ac24513e3a03519759932333207a06dc Author: Simon McVittie Date: Thu Jan 8 19:07:09 2009 +0000 types.cpp: include the public header before the body TelepathyQt4/types.cpp | 2 ++ 1 file changed, 2 insertions(+) commit ca71dc1f5d7dd540320af2d94f3c99b458a76c26 Author: Simon McVittie Date: Thu Jan 8 19:06:54 2009 +0000 manager-file.cpp: include the public header TelepathyQt4/manager-file.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit fca006ae8e6654ff1deba67f50140552ab9a0058 Author: Simon McVittie Date: Thu Jan 8 19:06:42 2009 +0000 key-file.cpp: include the public header TelepathyQt4/key-file.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) commit c93040bf133c865444c971adc9aa636c284ebf7d Author: Simon McVittie Date: Thu Jan 8 17:05:16 2009 +0000 Move Client/*.moc.hpp into Client/_gen This moves them out of the way so tab completion works better :-) TelepathyQt4/Client/channel.cpp | 3 +-- TelepathyQt4/Client/connection-manager.cpp | 5 ++--- TelepathyQt4/Client/connection.cpp | 3 +-- TelepathyQt4/Client/dbus-proxy.cpp | 2 +- TelepathyQt4/Client/pending-channel.cpp | 2 +- TelepathyQt4/Client/pending-operation.cpp | 4 ++-- TelepathyQt4/Makefile.am | 26 +++++++++++++------------- 7 files changed, 21 insertions(+), 24 deletions(-) commit 30cdeffc0404b1e3b43d6313dd1447d5b8c00200 Author: Simon McVittie Date: Thu Jan 8 16:57:45 2009 +0000 Distribute debug-internal.h TelepathyQt4/Makefile.am | 1 + 1 file changed, 1 insertion(+) commit a6b488c328b6120c44792d62dbc7f610bcaf3356 Author: Simon McVittie Date: Thu Jan 8 16:57:33 2009 +0000 Fix thinko in moc rules TelepathyQt4/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 66362f294aab0bf5e7994eeb61797112a77eac17 Author: Simon McVittie Date: Thu Jan 8 16:47:22 2009 +0000 Fix generation of moc in out-of-tree-builds, fixing distcheck * Split up the moc Makefile rule because the source might come from the srcdir or the builddir, depending * Ensure that $(builddir)/Client exists before trying to write files into it TelepathyQt4/Makefile.am | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 1bb83745b5644608ee6ac8491181b5e4bcfd1c0f Author: Simon McVittie Date: Thu Jan 8 16:20:38 2009 +0000 Check for telepathy-glib as an optional build-time dependency configure.ac | 7 +++++++ 1 file changed, 7 insertions(+) commit 80ea4a8b7dba07db4df3accaed87da8ab1607389 Author: Simon McVittie Date: Thu Jan 8 15:47:13 2009 +0000 configure.ac: warn about more things configure.ac | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) commit 498b896d3b28e0f82353f9031247148cf266ab09 Author: Simon McVittie Date: Thu Jan 8 15:47:02 2009 +0000 Remove INSTALL - autogen.sh will make us a new one .gitignore | 1 + INSTALL | 237 ------------------------------------------------------------ 2 files changed, 1 insertion(+), 237 deletions(-) commit 4f785f01196a5f41205d509e3f499314e0aedf3e Author: Simon McVittie Date: Thu Jan 8 15:39:27 2009 +0000 configure.ac: replace elaborate warning-flags logic with TP_COMPILER_WARNINGS configure.ac | 31 ++++++++++--------------------- 1 file changed, 10 insertions(+), 21 deletions(-) commit 144d639cdb5fa29692c9a73dd287a7cd6556f735 Author: Simon McVittie Date: Thu Jan 8 15:39:00 2009 +0000 TpPrototype::PresenceManager: don't check unsigned < 0 Presumably the intention was to check for zero (which is the "null value" for handles), so let's do that instead. TelepathyQt4/Prototype/PresenceManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 8c6ffd96bc3d94affc8242e14e8e9657c8ba4d63 Author: Simon McVittie Date: Thu Jan 8 15:37:56 2009 +0000 Add tp-compiler-warnings.m4 (from telepathy-glib) m4/Makefile.am | 1 + m4/tp-compiler-warnings.m4 | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) commit c419928dd78737a166b07d78bce165bdc8dae913 Author: Simon McVittie Date: Thu Jan 8 15:04:54 2009 +0000 Replace TP_CXX_COMPILER_FLAG with a TP_COMPILER_FLAG that handles both C and C++ configure.ac | 8 ++++---- m4/Makefile.am | 2 +- m4/tp-compiler-flag.m4 | 36 ++++++++++++++++++++++++++++++++++++ m4/tp-cxx-compiler-flag.m4 | 32 -------------------------------- 4 files changed, 41 insertions(+), 37 deletions(-) commit 302c0267fa2bfcb1eba6d8948c1d3ec640b911bf Merge: ecfd4b6 de7fc5a Author: Simon McVittie Date: Thu Jan 8 19:40:04 2009 +0000 Merge commit 'origin/master' commit ecfd4b67b0e59fce02d3e5677122861877cda9ba Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jan 7 18:17:56 2009 -0300 Added automated test for account-manager. tests/dbus/Makefile.am | 4 ++ tests/dbus/account-basics.cpp | 95 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+) commit 8974b5ebfc266c8a5c2af67dd36c5d52f55dfd5c Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jan 7 18:15:18 2009 -0300 Make tests/account-manager.py activatable. configure.ac | 1 + tests/Makefile.am | 1 + tests/dbus-1/services/account-manager.service.in | 3 +++ 3 files changed, 5 insertions(+) commit 06bb4f52810cad2c1d8bf5c2b76cb220fff2c00f Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jan 7 18:14:39 2009 -0300 Added initial AccountManager impl. TelepathyQt4/Client/account-manager-internal.h | 85 +++++ TelepathyQt4/Client/account-manager.cpp | 440 ++++++++++++++++++++++++ TelepathyQt4/Client/account-manager.h | 97 +++++- TelepathyQt4/Makefile.am | 2 + 4 files changed, 607 insertions(+), 17 deletions(-) commit 84ccb3283d09fa5ff66dd435a246353b2fb67bef Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jan 7 23:15:15 2009 -0300 Added more debug. TelepathyQt4/Client/connection-manager.cpp | 1 + TelepathyQt4/manager-file.cpp | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) commit 389fd7e396fd2cd23610968e55afb2cfcc3e5949 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jan 7 23:13:42 2009 -0300 Do not replace XDG_DATA_DIRS, prepend tests dir to already existing one. Do not replace XDG_DATA_DIRS, prepend tests dir to already existing one, so cm-basics is able to find pinocchio manager file. tests/pinocchio/Makefile.am | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit b18471f7a0e4aa98ed6523a14ef6bae24a345033 Author: Andre Moreira Magalhaes (andrunko) Date: Wed Jan 7 18:32:46 2009 -0300 Fixed docs. TelepathyQt4/Client/connection-manager.cpp | 42 +++++++++++++--------------- 1 file changed, 20 insertions(+), 22 deletions(-) commit de7fc5a31283b3bfaf0b8e220cedbf6c259d0820 Merge: a894fc8 e7cf7bb Author: Simon McVittie Date: Wed Jan 7 14:29:39 2009 +0000 Merge branch 'spec' commit e7cf7bbe22643f792ad0df8ff787f6868a24b85b Author: Simon McVittie Date: Wed Jan 7 13:55:04 2009 +0000 Update to spec 0.17.17 spec/Account_Manager.xml | 29 ++++++++++++---- spec/Channel.xml | 6 ++++ spec/Channel_Interface_Group.xml | 59 +++++++++++++++++++++++++++++++-- spec/Channel_Interface_Messages.xml | 6 ++-- spec/Connection.xml | 59 +++++++++++++++++++++++---------- spec/Connection_Interface_Avatars.xml | 4 +-- spec/Connection_Manager.xml | 4 +-- spec/Media_Stream_Handler.xml | 56 +++++++++++++++++++------------ spec/all.xml | 2 +- 9 files changed, 169 insertions(+), 56 deletions(-) commit a894fc8e2c4c73c27e4c6183c47e003f22b8f4e1 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 6 17:52:16 2009 -0300 Moved ConnectionManager docs to source file and added more docs. TelepathyQt4/Client/connection-manager.cpp | 175 +++++++++++++++++++++++++++- TelepathyQt4/Client/connection-manager.h | 96 --------------- 2 files changed, 172 insertions(+), 99 deletions(-) commit 1dbb787bce6b98952b29db10c9eb8da30d8674ec Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 6 17:31:27 2009 -0300 Fixed coding style on ConnectionManager. TelepathyQt4/Client/connection-manager-internal.h | 14 ++-- TelepathyQt4/Client/connection-manager.cpp | 93 ++++++--------------- TelepathyQt4/Client/connection-manager.h | 10 +-- 3 files changed, 40 insertions(+), 77 deletions(-) commit 283ee56cd850ee82ad0b76e229505d6197f9cb2b Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 6 17:16:26 2009 -0300 Make ConnectionManager::Private a friend of PendingReady instead of ConnectionManager. TelepathyQt4/Client/connection-manager-internal.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit e9de7cafd36c81aa3351824ee0105fdd954db141 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 6 17:06:58 2009 -0300 Removed parent member from ConnectionManager::Private (not needed). TelepathyQt4/Client/connection-manager-internal.h | 1 - TelepathyQt4/Client/connection-manager.cpp | 10 +++++----- 2 files changed, 5 insertions(+), 6 deletions(-) commit 21f733f04feae421e43dca7df8c8354960936297 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 6 16:58:40 2009 -0300 Moved ConnectionManager::mName to ConnectionManager::Private::name. TelepathyQt4/Client/connection-manager-internal.h | 3 ++- TelepathyQt4/Client/connection-manager.cpp | 21 +++++++++++++-------- TelepathyQt4/Client/connection-manager.h | 3 +-- 3 files changed, 16 insertions(+), 11 deletions(-) commit 0354fad269fa1dd1b81283cdefe569e50322b53a Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 6 16:53:38 2009 -0300 Moved ConnectionManager slots to ConnectionManager::Private class. Moved ConnectionManager slots to ConnectionManager::Private class and make ConnectionManager::Private a QObject. TelepathyQt4/Client/connection-manager-internal.h | 28 ++- TelepathyQt4/Client/connection-manager.cpp | 204 +++++++++++---------- TelepathyQt4/Client/connection-manager.h | 10 +- 3 files changed, 123 insertions(+), 119 deletions(-) commit 323fb9818c31952889ed8593aa00777d780c5f9d Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 6 16:50:31 2009 -0300 Removed ConnectionManager::ready signal in favor of becomeReady. TelepathyQt4/Client/connection-manager.cpp | 1 - TelepathyQt4/Client/connection-manager.h | 4 ---- 2 files changed, 5 deletions(-) commit d92eba661bd68cf5782d0852e9859a4d0bda9813 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 6 16:28:02 2009 -0300 Moved ConnectionManagerPendingNames to ConnectionManager::Private::PendingNames. TelepathyQt4/Client/connection-manager-internal.h | 8 +++++--- TelepathyQt4/Client/connection-manager.cpp | 12 ++++++------ 2 files changed, 11 insertions(+), 9 deletions(-) commit 3ac5785cceae550200653cdc759ea4a294ac9a6e Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 6 16:25:53 2009 -0300 Moved ConnectionManager::Private::PendingReady outside class definition. TelepathyQt4/Client/connection-manager-internal.h | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) commit 5fdb92d7faf5b19c263b380bf42f7021a4c5c9b8 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 6 16:16:21 2009 -0300 Moved ConnectionManager::Private to connection-manager-internal.h. TelepathyQt4/Client/connection-manager-internal.h | 40 +++++++++++++++++++++ TelepathyQt4/Client/connection-manager.cpp | 37 ------------------- 2 files changed, 40 insertions(+), 37 deletions(-) commit a03825b519c781904f9c8dba3118722ed1c9a1b0 Author: Simon McVittie Date: Thu Dec 4 14:54:18 2008 +0000 TelepathyQt4/Constants: add AccountManager-related constants TelepathyQt4/constants.h | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) commit cc3a7300fede7a65c8464c44c2d4c5009646b712 Author: Simon McVittie Date: Fri Dec 12 16:24:40 2008 +0000 account-manager.py: implement Properties.Set on Account tests/account-manager.py | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) commit 14a8dfb1707d43042baeaba4065db78eccf12b74 Author: Simon McVittie Date: Fri Dec 12 16:24:26 2008 +0000 account-manager.py: correct implementation of Properties.Get on Account tests/account-manager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 64f129573bc320a92ef14fcaff0d8925304cc581 Author: Simon McVittie Date: Fri Dec 12 16:24:01 2008 +0000 account-manager.py: correct implementation of UpdateParameters tests/account-manager.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit ab47cdf1005fe85d65802abb2c328f099755d7c3 Author: Simon McVittie Date: Fri Dec 12 16:23:46 2008 +0000 account-manager.py: add debug logging tests/account-manager.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) commit 8fa2c62e62aa618dcf5f6cf82179013b6bbe43ae Author: Simon McVittie Date: Fri Dec 12 16:23:20 2008 +0000 account-manager.py: fix signature of ValidAccounts and InvalidAccounts Somewhere it changed to 'as', i.e. bug-for-bug compatible with Mission Control 5.0.beta45. tests/account-manager.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 367a014613e3b3c8833722c2788d8a0bbe5e84a0 Author: Simon McVittie Date: Fri Dec 12 16:22:44 2008 +0000 account-manager.py: Don't bother overriding introspection We don't really need Properties in introspection, and the way I implemented it was wrong anyway. tests/account-manager.py | 13 ------------- 1 file changed, 13 deletions(-) commit 02f64904f36c3159a19cd170a5e7c166ef301372 Author: Simon McVittie Date: Wed Dec 10 19:10:13 2008 +0000 account-manager.py: allow creation and deletion of accounts tests/account-manager.py | 147 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 144 insertions(+), 3 deletions(-) commit cc7ea340aed303ec194a36d02a385a57eb7b4a77 Author: Simon McVittie Date: Wed Dec 10 19:09:55 2008 +0000 account-manager.py: correct sense of assertions tests/account-manager.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit e90be41fbbbd6f4fbd93a41c4d9ed0821d1b193a Author: Simon McVittie Date: Wed Dec 10 18:44:20 2008 +0000 account-manager.py: fix signature of Get, Set tests/account-manager.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) commit f221fa216b30861250236977895f6990f7f3bbef Author: Simon McVittie Date: Wed Dec 10 17:04:50 2008 +0000 Add a simple AccountManager implementation tests/Makefile.am | 1 + tests/account-manager.py | 122 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 123 insertions(+) commit e6acea9fce069850448f2924f1ef8fc7324efd85 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 6 14:30:09 2009 -0300 Added test for ConnecitonManager::listNames. tests/pinocchio/cm-basics.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) commit ea3cc86cffb69b69b8dc3b9f2316bc932d758a3e Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 6 15:31:51 2009 -0300 Added ConnectionManager::listNames method. Added ConnectionManager::listNames method that will list all CMs. TelepathyQt4/Client/connection-manager-internal.h | 60 +++++++++++++++++ TelepathyQt4/Client/connection-manager.cpp | 71 +++++++++++++++++++++ TelepathyQt4/Client/connection-manager.h | 3 + TelepathyQt4/Makefile.am | 1 + 4 files changed, 135 insertions(+) commit f0651110aaf519b20a5d4422e5865d2bc1042918 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 6 11:23:58 2009 -0300 Added PendingStringList class. TelepathyQt4/Client/PendingStringList | 13 +++++ TelepathyQt4/Client/pending-string-list.cpp | 69 +++++++++++++++++++++++++++ TelepathyQt4/Client/pending-string-list.h | 63 ++++++++++++++++++++++++ TelepathyQt4/Makefile.am | 4 ++ 4 files changed, 149 insertions(+) commit ec39a9bed10f3747e26f399449cc60f92e40072b Author: Simon McVittie Date: Tue Jan 6 17:39:23 2009 +0000 Messages: add the necessary metadata to do code-gen in Qt This needs to go upstream into a telepathy-spec release before we merge this branch. TelepathyQt4/channel.xml | 1 + spec/Channel_Interface_Messages.xml | 39 ++++++++++++++++++++++++++++++++--- 2 files changed, 37 insertions(+), 3 deletions(-) commit 3fc2b857d98327ca37a0842acd3504c4c69372af Author: Simon McVittie Date: Tue Jan 6 17:38:29 2009 +0000 codegen: support 'array-depth' attribute on types In the Qt world, we need to generate a named type for every level of nested list that makes sense. I've implemented this by adding an array-depth attribute to etc. indicating the maximum number of levels of nested lists that make sense for this type, so: generates types MessagePart, MessagePartList = QList, and MessagePartListList = QList. If array-depth is omitted, its value can be assumed to be 1 if array-name is present, or 0 otherwise. For the moment, the extra "List" suffix for arrays of nesting depth >= 2 is hard-coded. tools/libqt4codegen.py | 36 +++++++++++++++++++++++++++++++----- tools/qt4-types-gen.py | 37 +++++++++++++++++++++++++++++++++++-- 2 files changed, 66 insertions(+), 7 deletions(-) commit 883fe0aa1ccfc59943bb23f8ac167fb109092625 Author: Simon McVittie Date: Tue Jan 6 17:10:06 2009 +0000 trivia: ignore recently added tests .gitignore | 2 ++ 1 file changed, 2 insertions(+) commit 00e84befe2d26a8c1bb73160e6dd2c0686a588b8 Author: Simon McVittie Date: Tue Jan 6 15:39:31 2009 +0000 qt4-client-gen.py: escape */ when outputting into a comment tools/qt4-client-gen.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit ad7d0f1b05ac045b479829fd766b08f1f5dabd21 Author: Simon McVittie Date: Tue Jan 6 15:36:07 2009 +0000 Spec 0.17.16 compliance: parse "dbus-property" flag in .manager files TelepathyQt4/manager-file.cpp | 3 +++ 1 file changed, 3 insertions(+) commit f31355515a3cb0f75ff75657a83c8077c2f68b5f Author: Simon McVittie Date: Thu Dec 18 12:16:49 2008 +0000 Update to telepathy-spec 0.17.16 Resulting ABI changes in stable interfaces: - generate Telepathy::Avatar struct - add optional MembersChangedDetailed signal to the Group interface - add Messages interface as stable - add ConnMgrParamFlagDBusProperty spec/Account.xml | 95 ++-- spec/Account_Interface_Avatar.xml | 14 +- spec/Account_Manager.xml | 20 +- spec/Channel.xml | 93 ++-- spec/Channel_Dispatch_Operation.xml | 49 +- spec/Channel_Dispatcher.xml | 22 + ...Channel_Dispatcher_Interface_Operation_List.xml | 13 +- spec/Channel_Future.xml | 4 +- spec/Channel_Handler.xml | 8 +- spec/Channel_Interface_Call_Merging.xml | 2 +- spec/Channel_Interface_Chat_State.xml | 6 +- spec/Channel_Interface_DTMF.xml | 8 +- spec/Channel_Interface_Group.xml | 233 +++++++-- spec/Channel_Interface_Hold.xml | 6 +- spec/Channel_Interface_Media_Signalling.xml | 4 +- spec/Channel_Interface_Messages.xml | 97 +++- spec/Channel_Interface_Password.xml | 10 +- spec/Channel_Interface_Tube.xml | 127 +++++ spec/Channel_Request.xml | 24 +- spec/Channel_Type_Contact_List.xml | 32 +- spec/Channel_Type_DBus_Tube.xml | 183 +++++++ spec/Channel_Type_File_Transfer.xml | 513 ++++++++++++++++++++ spec/Channel_Type_Room_List.xml | 57 ++- spec/Channel_Type_Stream_Tube.xml | 198 ++++++++ spec/Channel_Type_Streamed_Media.xml | 103 ++-- spec/Channel_Type_Text.xml | 79 +-- spec/Channel_Type_Tubes.xml | 49 +- spec/Client_Handler.xml | 17 +- spec/Client_Observer.xml | 28 +- spec/Connection_Interface_Aliasing.xml | 22 +- spec/Connection_Interface_Avatars.xml | 118 ++++- spec/Connection_Interface_Capabilities.xml | 27 +- spec/Connection_Interface_Contact_Capabilities.xml | 165 +++++++ spec/Connection_Interface_Contacts.xml | 20 +- spec/Connection_Interface_Presence.xml | 118 +++-- spec/Connection_Interface_Renaming.xml | 12 +- spec/Connection_Interface_Requests.xml | 27 +- spec/Connection_Interface_Simple_Presence.xml | 9 +- spec/Connection_Manager.xml | 117 +++-- spec/all.xml | 7 +- spec/generic-types.xml | 2 +- 41 files changed, 2246 insertions(+), 492 deletions(-) commit 86b5870182dc43a540de73a268376a5999a54402 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 5 18:58:39 2009 -0300 Improved manager-file test case. tests/manager-file.cpp | 43 +++++++++++++- tests/telepathy/managers/test-manager-file.manager | 61 ++++++++++++++++++++ 2 files changed, 102 insertions(+), 2 deletions(-) commit 2b351f5a582fc851eef41e75462b6c22b333212f Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 6 10:09:54 2009 -0300 Fixed KeyFile/ManagerFile to proper parse list of strings. TelepathyQt4/key-file.cpp | 139 ++++++++++++++++++++++++++++++++++------- TelepathyQt4/key-file.h | 2 + TelepathyQt4/manager-file.cpp | 82 +++++++++++------------- 3 files changed, 157 insertions(+), 66 deletions(-) commit 3be7725f7ee803cf9dc209ac16efb8ccae3ed1dc Author: Andre Moreira Magalhaes (andrunko) Date: Tue Jan 6 10:03:19 2009 -0300 Moved ManagerFile::variantFromDBusSignature to ManagerFile::variantTypeFromDBusSignature. Note: This method should be moved to an utils class of some sort. TelepathyQt4/Client/connection-manager.cpp | 2 +- TelepathyQt4/Client/connection-manager.h | 4 +- TelepathyQt4/manager-file.cpp | 134 +++++++++++++++------------- TelepathyQt4/manager-file.h | 3 +- 4 files changed, 75 insertions(+), 68 deletions(-) commit 57c49fe2683e65565a8285d55f1f22a14efe2528 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 5 16:13:35 2009 -0300 Added automated test for manager-file. tests/Makefile.am | 25 ++++++- tests/manager-file.cpp | 75 ++++++++++++++++++++ .../managers/test-manager-file-invalid.manager | 4 ++ tests/telepathy/managers/test-manager-file.manager | 21 ++++++ 4 files changed, 122 insertions(+), 3 deletions(-) commit 8864bb0079bc7742944d1e1014f12bdd2a1ab006 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 5 15:00:19 2009 -0300 Consider params with secret suffix as secret params. TelepathyQt4/manager-file.cpp | 3 +++ 1 file changed, 3 insertions(+) commit 65b2db5befbe1078c3a1627dfa984d405352c708 Merge: a9c899c 2fb1a5c Author: Simon McVittie Date: Mon Jan 5 19:00:16 2009 +0000 Merge branch 'header-cleanup' commit 2fb1a5c5c2573054377b0d37fe7660b5dabfb8de Author: Simon McVittie Date: Mon Jan 5 18:39:57 2009 +0000 Clean up inclusions into .cpp files * Use the public headers when testing self-containedness * Use <> vs "" to indicate which headers will get installed and which are just internal TelepathyQt4/Client/account-manager.cpp | 7 +++---- TelepathyQt4/Client/account.cpp | 7 +++---- TelepathyQt4/Client/channel.cpp | 7 +++---- TelepathyQt4/Client/connection-manager.cpp | 10 +++++----- TelepathyQt4/Client/connection.cpp | 10 +++++----- TelepathyQt4/Client/dbus-proxy.cpp | 6 +++--- TelepathyQt4/Client/dbus.cpp | 7 +++---- TelepathyQt4/Client/media-session-handler.cpp | 7 +++---- TelepathyQt4/Client/media-stream-handler.cpp | 7 +++---- TelepathyQt4/Client/optional-interface-factory.cpp | 5 ++--- TelepathyQt4/Client/pending-channel.cpp | 6 +++--- TelepathyQt4/Client/pending-operation.cpp | 7 +++++-- TelepathyQt4/Client/properties.cpp | 3 +-- 13 files changed, 42 insertions(+), 47 deletions(-) commit 7a8fd68967944d7b6ebeb673fc0dde7f3351055e Author: Simon McVittie Date: Mon Jan 5 18:23:46 2009 +0000 connection-manager.h: turn #include of PendingOperation into forward declaration TelepathyQt4/Client/connection-manager.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 571b45bdbe5edc4187061a889983b7dad9a15e80 Author: Simon McVittie Date: Mon Jan 5 18:23:24 2009 +0000 connection.h: turn inclusions into forward declarations where possible TelepathyQt4/Client/connection.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit 75a770657bf943e6f6d7a74a2de4cd2ecdf0a79b Author: Simon McVittie Date: Mon Jan 5 18:22:59 2009 +0000 dbus-proxy.h: remove unnecessary include of TelepathyQt4/Client/dbus-proxy.h | 1 - 1 file changed, 1 deletion(-) commit a9c899cb82d4100b8bb8d087bc88fadd7836f436 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 5 13:18:50 2009 -0300 Added automated test for key-file. tests/Makefile.am | 34 ++++++++++++++++++++++- tests/key-file.cpp | 49 ++++++++++++++++++++++++++++++++++ tests/test-key-file-format-error.ini | 4 +++ tests/test-key-file.ini | 9 +++++++ 4 files changed, 95 insertions(+), 1 deletion(-) commit d6027ab958c4638964a8969afa23f0cf7e11e34a Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 5 13:16:40 2009 -0300 Proper parse key/values with spaces. TelepathyQt4/key-file.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) commit 24fe0a908b6d536ac1f8ca2ebe55da0b17889b35 Author: Simon McVittie Date: Mon Jan 5 17:57:34 2009 +0000 Reduce inclusions into channel.h via forward declarations channel.h only mentions Connection or QDBusPendingCallWatcher via a pointer, so it can just forward-declare those classes. Also compensate for this in channel.cpp and pending-channel.cpp, remove redundant inclusion of dbus.h in channel.cpp, and check self-containedness of the public header rather than channel.h. TelepathyQt4/Client/channel.cpp | 8 ++++---- TelepathyQt4/Client/channel.h | 6 ++++-- TelepathyQt4/Client/pending-channel.cpp | 1 + 3 files changed, 9 insertions(+), 6 deletions(-) commit 5dfffc75035f7c199517f16416215786ad297266 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 5 12:59:22 2009 -0300 Fixed bug while searching for keys on on key file. TelepathyQt4/key-file.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e2023f27b867545521c62270de11b52078d30ce5 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 5 12:58:52 2009 -0300 Fixed bug while setting error when parsing key files. TelepathyQt4/key-file.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 6825157eb0db7e2ab1fc7479eb21edac1741456e Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 5 12:39:53 2009 -0300 Make the global group an empty group instead of a group named "general". TelepathyQt4/key-file.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) commit 510fbd678385c7a79bd4cfe95a5eb2fca90b3f5a Author: Simon McVittie Date: Mon Jan 5 17:30:33 2009 +0000 Avoid circular dependency between Connection and PendingChannel, fixing compilation Also include the correct version of the Channel header in pending-channel.cpp TelepathyQt4/Client/connection.h | 7 +------ TelepathyQt4/Client/pending-channel.cpp | 2 +- TelepathyQt4/Client/pending-channel.h | 3 +-- tests/pinocchio/chan-basics.cpp | 1 + 4 files changed, 4 insertions(+), 9 deletions(-) commit d615b6a6aaa1abecd8409c395edcda4773698d02 Merge: d498dbb addd506 Author: Simon McVittie Date: Mon Jan 5 16:57:47 2009 +0000 Merge commit 'andrunko/misc' commit d498dbb03dd10dcbdc18bef8eef32a75b6282c4c Merge: 90c0f92 d5b52d9 Author: Simon McVittie Date: Mon Jan 5 16:57:39 2009 +0000 Merge commit 'andrunko/rearrangement' Conflicts: TelepathyQt4/Client/connection-manager.h commit 90c0f92adb97206d73e07316c3fa46b1f2c063f3 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Dec 29 17:52:52 2008 -0300 Removed debug. TelepathyQt4/manager-file.cpp | 1 - 1 file changed, 1 deletion(-) commit 38c2643670223baad5ab3109fe64e1e71491a896 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 5 11:43:57 2009 -0300 Renamed escapedKey to validateKey and escapedString to unescapeString. Renamed escapedKey to validateKey and escapedString to unescapeString as suggested by smcv. TelepathyQt4/key-file.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) commit 49fe4f2e328aff8f777efc884afc096e5b9eee98 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 5 11:36:04 2009 -0300 Added ProtocolParameter private data for future expansion. TelepathyQt4/cli-connection-manager.h | 3 +++ 1 file changed, 3 insertions(+) commit 92c322da25426b6a3d02becb322ba4c19857b1ac Merge: 6db3a8a 67a3076 Author: Simon McVittie Date: Mon Jan 5 16:54:27 2009 +0000 Merge commit 'andrunko/cm' Conflicts: TelepathyQt4/cli-connection-manager.cpp commit addd50631982337ce195c9cb7256c9b7b478f311 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 5 12:10:41 2009 -0300 Renamed IN_TELEPATHY_QT4_INTERNALS to IN_TELEPATHY_QT4_HEADER. TelepathyQt4/Client/Account | 6 +++--- TelepathyQt4/Client/AccountInterface | 6 +++--- TelepathyQt4/Client/AccountManager | 6 +++--- TelepathyQt4/Client/AccountManagerInterface | 6 +++--- TelepathyQt4/Client/Channel | 6 +++--- TelepathyQt4/Client/ChannelInterface | 6 +++--- .../Client/ChannelInterfaceCallStateInterface | 6 +++--- .../Client/ChannelInterfaceChatStateInterface | 6 +++--- TelepathyQt4/Client/ChannelInterfaceDTMFInterface | 6 +++--- TelepathyQt4/Client/ChannelInterfaceGroupInterface | 6 +++--- TelepathyQt4/Client/ChannelInterfaceHoldInterface | 6 +++--- .../ChannelInterfaceMediaSignallingInterface | 6 +++--- .../Client/ChannelInterfacePasswordInterface | 6 +++--- .../Client/ChannelTypeContactListInterface | 6 +++--- TelepathyQt4/Client/ChannelTypeRoomListInterface | 6 +++--- .../Client/ChannelTypeStreamedMediaInterface | 6 +++--- TelepathyQt4/Client/ChannelTypeTextInterface | 6 +++--- TelepathyQt4/Client/ChannelTypeTubesInterface | 6 +++--- TelepathyQt4/Client/Connection | 6 +++--- TelepathyQt4/Client/ConnectionInterface | 6 +++--- .../Client/ConnectionInterfaceAliasingInterface | 6 +++--- .../Client/ConnectionInterfaceAvatarsInterface | 6 +++--- .../ConnectionInterfaceCapabilitiesInterface | 6 +++--- .../Client/ConnectionInterfaceContactsInterface | 6 +++--- .../Client/ConnectionInterfacePresenceInterface | 6 +++--- .../Client/ConnectionInterfaceRequestsInterface | 6 +++--- .../ConnectionInterfaceSimplePresenceInterface | 6 +++--- TelepathyQt4/Client/ConnectionManager | 6 +++--- TelepathyQt4/Client/ConnectionManagerInterface | 6 +++--- TelepathyQt4/Client/DBus | 6 +++--- TelepathyQt4/Client/DBusDaemonInterface | 6 +++--- TelepathyQt4/Client/DBusProxy | 6 +++--- TelepathyQt4/Client/IntrospectableInterface | 6 +++--- TelepathyQt4/Client/MediaSessionHandler | 6 +++--- TelepathyQt4/Client/MediaSessionHandlerInterface | 6 +++--- TelepathyQt4/Client/MediaStreamHandler | 6 +++--- TelepathyQt4/Client/MediaStreamHandlerInterface | 6 +++--- TelepathyQt4/Client/OptionalInterfaceFactory | 6 +++--- TelepathyQt4/Client/PeerInterface | 6 +++--- TelepathyQt4/Client/PendingChannel | 6 +++--- TelepathyQt4/Client/PendingFailure | 6 +++--- TelepathyQt4/Client/PendingOperation | 6 +++--- TelepathyQt4/Client/PendingSuccess | 6 +++--- TelepathyQt4/Client/PendingVoidMethodCall | 6 +++--- TelepathyQt4/Client/Properties | 6 +++--- TelepathyQt4/Client/PropertiesInterface | 6 +++--- TelepathyQt4/Client/PropertiesInterfaceInterface | 6 +++--- TelepathyQt4/Client/StatefulDBusProxy | 6 +++--- TelepathyQt4/Client/StatelessDBusProxy | 6 +++--- TelepathyQt4/Client/account-manager.cpp | 2 +- TelepathyQt4/Client/account-manager.h | 4 ++-- TelepathyQt4/Client/account.cpp | 2 +- TelepathyQt4/Client/account.h | 4 ++-- TelepathyQt4/Client/channel.cpp | 2 +- TelepathyQt4/Client/channel.h | 4 ++-- TelepathyQt4/Client/connection-manager.cpp | 2 +- TelepathyQt4/Client/connection-manager.h | 4 ++-- TelepathyQt4/Client/connection.cpp | 2 +- TelepathyQt4/Client/connection.h | 4 ++-- TelepathyQt4/Client/dbus-proxy.cpp | 2 +- TelepathyQt4/Client/dbus-proxy.h | 4 ++-- TelepathyQt4/Client/dbus.cpp | 2 +- TelepathyQt4/Client/dbus.h | 4 ++-- TelepathyQt4/Client/media-session-handler.cpp | 2 +- TelepathyQt4/Client/media-session-handler.h | 4 ++-- TelepathyQt4/Client/media-stream-handler.cpp | 2 +- TelepathyQt4/Client/media-stream-handler.h | 4 ++-- TelepathyQt4/Client/optional-interface-factory.cpp | 2 +- TelepathyQt4/Client/optional-interface-factory.h | 4 ++-- TelepathyQt4/Client/pending-channel.cpp | 2 +- TelepathyQt4/Client/pending-channel.h | 4 ++-- TelepathyQt4/Client/pending-operation.cpp | 2 +- TelepathyQt4/Client/pending-operation.h | 4 ++-- TelepathyQt4/Client/properties.cpp | 2 +- TelepathyQt4/Client/properties.h | 4 ++-- TelepathyQt4/Client/simple-pending-operations.h | 4 ++-- TelepathyQt4/Constants | 6 +++--- TelepathyQt4/Debug | 6 +++--- TelepathyQt4/KeyFile | 6 +++--- TelepathyQt4/Makefile.am | 6 +++--- TelepathyQt4/ManagerFile | 6 +++--- TelepathyQt4/Types | 6 +++--- TelepathyQt4/constants.h | 4 ++-- TelepathyQt4/debug.cpp | 2 +- TelepathyQt4/debug.h | 4 ++-- TelepathyQt4/key-file.cpp | 2 +- TelepathyQt4/key-file.h | 4 ++-- TelepathyQt4/manager-file.cpp | 2 +- TelepathyQt4/manager-file.h | 4 ++-- TelepathyQt4/types.cpp | 2 +- TelepathyQt4/types.h | 4 ++-- 91 files changed, 220 insertions(+), 220 deletions(-) commit 473e35db90d25cd8b5d6a08c76602a433c312f95 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 5 12:07:23 2009 -0300 Added undef IN_TELEPATHY_QT4_INTERNALS to all fancy headers. Added undef IN_TELEPATHY_QT4_INTERNALS to all fancy headers so users are not allowed to include a fancy header and then include a normal header. TelepathyQt4/Client/Account | 2 ++ TelepathyQt4/Client/AccountInterface | 2 ++ TelepathyQt4/Client/AccountManager | 2 ++ TelepathyQt4/Client/AccountManagerInterface | 2 ++ TelepathyQt4/Client/Channel | 2 ++ TelepathyQt4/Client/ChannelInterface | 2 ++ .../Client/ChannelInterfaceCallStateInterface | 2 ++ .../Client/ChannelInterfaceChatStateInterface | 2 ++ TelepathyQt4/Client/ChannelInterfaceDTMFInterface | 2 ++ TelepathyQt4/Client/ChannelInterfaceGroupInterface | 2 ++ TelepathyQt4/Client/ChannelInterfaceHoldInterface | 2 ++ .../ChannelInterfaceMediaSignallingInterface | 2 ++ .../Client/ChannelInterfacePasswordInterface | 2 ++ .../Client/ChannelTypeContactListInterface | 2 ++ TelepathyQt4/Client/ChannelTypeRoomListInterface | 2 ++ .../Client/ChannelTypeStreamedMediaInterface | 2 ++ TelepathyQt4/Client/ChannelTypeTextInterface | 2 ++ TelepathyQt4/Client/ChannelTypeTubesInterface | 2 ++ TelepathyQt4/Client/Connection | 2 ++ TelepathyQt4/Client/ConnectionInterface | 2 ++ .../Client/ConnectionInterfaceAliasingInterface | 2 ++ .../Client/ConnectionInterfaceAvatarsInterface | 2 ++ .../ConnectionInterfaceCapabilitiesInterface | 2 ++ .../Client/ConnectionInterfaceContactsInterface | 2 ++ .../Client/ConnectionInterfacePresenceInterface | 2 ++ .../Client/ConnectionInterfaceRequestsInterface | 2 ++ .../ConnectionInterfaceSimplePresenceInterface | 2 ++ TelepathyQt4/Client/ConnectionManager | 2 ++ TelepathyQt4/Client/ConnectionManagerInterface | 2 ++ TelepathyQt4/Client/DBus | 2 ++ TelepathyQt4/Client/DBusDaemonInterface | 2 ++ TelepathyQt4/Client/DBusProxy | 2 ++ TelepathyQt4/Client/IntrospectableInterface | 2 ++ TelepathyQt4/Client/MediaSessionHandler | 2 ++ TelepathyQt4/Client/MediaSessionHandlerInterface | 2 ++ TelepathyQt4/Client/MediaStreamHandler | 2 ++ TelepathyQt4/Client/MediaStreamHandlerInterface | 2 ++ TelepathyQt4/Client/OptionalInterfaceFactory | 2 ++ TelepathyQt4/Client/PeerInterface | 2 ++ TelepathyQt4/Client/PendingChannel | 2 ++ TelepathyQt4/Client/PendingFailure | 2 ++ TelepathyQt4/Client/PendingOperation | 2 ++ TelepathyQt4/Client/PendingSuccess | 2 ++ TelepathyQt4/Client/PendingVoidMethodCall | 2 ++ TelepathyQt4/Client/Properties | 2 ++ TelepathyQt4/Client/PropertiesInterface | 2 ++ TelepathyQt4/Client/PropertiesInterfaceInterface | 2 ++ TelepathyQt4/Client/StatefulDBusProxy | 2 ++ TelepathyQt4/Client/StatelessDBusProxy | 2 ++ TelepathyQt4/Constants | 2 ++ TelepathyQt4/Debug | 2 ++ TelepathyQt4/KeyFile | 2 ++ TelepathyQt4/ManagerFile | 2 ++ TelepathyQt4/Types | 2 ++ TelepathyQt4/debug-internal.h | 4 ---- 55 files changed, 108 insertions(+), 4 deletions(-) commit 3723ca2f52f578defd15ac65880639515bd9ac9f Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 5 11:43:57 2009 -0300 Renamed escapedKey to validateKey and escapedString to unescapeString. Renamed escapedKey to validateKey and escapedString to unescapeString as suggested by smcv. TelepathyQt4/key-file.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) commit c3e79f64ff1b9df31c44e039ef8d9c4d3d749361 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Jan 5 11:36:04 2009 -0300 Added ProtocolParameter private data for future expansion. TelepathyQt4/Client/connection-manager.h | 3 +++ 1 file changed, 3 insertions(+) commit d5b52d9bc4c2cfe8dbe9fb211f1e40c5b3492125 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Dec 30 14:12:12 2008 -0300 Make including fancy headers mandatory. Build error if not including fancy headers files (#error directive). TelepathyQt4/Client/Account | 4 ++++ TelepathyQt4/Client/AccountInterface | 4 ++++ TelepathyQt4/Client/AccountManager | 4 ++++ TelepathyQt4/Client/AccountManagerInterface | 4 ++++ TelepathyQt4/Client/Channel | 4 ++++ TelepathyQt4/Client/ChannelInterface | 4 ++++ .../Client/ChannelInterfaceCallStateInterface | 4 ++++ .../Client/ChannelInterfaceChatStateInterface | 4 ++++ TelepathyQt4/Client/ChannelInterfaceDTMFInterface | 4 ++++ TelepathyQt4/Client/ChannelInterfaceGroupInterface | 4 ++++ TelepathyQt4/Client/ChannelInterfaceHoldInterface | 4 ++++ .../ChannelInterfaceMediaSignallingInterface | 4 ++++ .../Client/ChannelInterfacePasswordInterface | 4 ++++ .../Client/ChannelTypeContactListInterface | 4 ++++ TelepathyQt4/Client/ChannelTypeRoomListInterface | 4 ++++ .../Client/ChannelTypeStreamedMediaInterface | 4 ++++ TelepathyQt4/Client/ChannelTypeTextInterface | 4 ++++ TelepathyQt4/Client/ChannelTypeTubesInterface | 4 ++++ TelepathyQt4/Client/Connection | 4 ++++ TelepathyQt4/Client/ConnectionInterface | 4 ++++ .../Client/ConnectionInterfaceAliasingInterface | 4 ++++ .../Client/ConnectionInterfaceAvatarsInterface | 4 ++++ .../ConnectionInterfaceCapabilitiesInterface | 4 ++++ .../Client/ConnectionInterfaceContactsInterface | 4 ++++ .../Client/ConnectionInterfacePresenceInterface | 4 ++++ .../Client/ConnectionInterfaceRequestsInterface | 4 ++++ .../ConnectionInterfaceSimplePresenceInterface | 4 ++++ TelepathyQt4/Client/ConnectionManager | 4 ++++ TelepathyQt4/Client/ConnectionManagerInterface | 4 ++++ TelepathyQt4/Client/DBus | 4 ++++ TelepathyQt4/Client/DBusDaemonInterface | 4 ++++ TelepathyQt4/Client/DBusProxy | 4 ++++ TelepathyQt4/Client/IntrospectableInterface | 4 ++++ TelepathyQt4/Client/MediaSessionHandler | 4 ++++ TelepathyQt4/Client/MediaSessionHandlerInterface | 4 ++++ TelepathyQt4/Client/MediaStreamHandler | 4 ++++ TelepathyQt4/Client/MediaStreamHandlerInterface | 4 ++++ TelepathyQt4/Client/OptionalInterfaceFactory | 4 ++++ TelepathyQt4/Client/PeerInterface | 4 ++++ TelepathyQt4/Client/PendingChannel | 4 ++++ TelepathyQt4/Client/PendingFailure | 4 ++++ TelepathyQt4/Client/PendingOperation | 4 ++++ TelepathyQt4/Client/PendingSuccess | 4 ++++ TelepathyQt4/Client/PendingVoidMethodCall | 4 ++++ TelepathyQt4/Client/Properties | 4 ++++ TelepathyQt4/Client/PropertiesInterface | 4 ++++ TelepathyQt4/Client/PropertiesInterfaceInterface | 4 ++++ TelepathyQt4/Client/StatefulDBusProxy | 4 ++++ TelepathyQt4/Client/StatelessDBusProxy | 4 ++++ TelepathyQt4/Client/account-manager.cpp | 1 + TelepathyQt4/Client/account-manager.h | 4 ++++ TelepathyQt4/Client/account.cpp | 1 + TelepathyQt4/Client/account.h | 4 ++++ TelepathyQt4/Client/channel.cpp | 1 + TelepathyQt4/Client/channel.h | 4 ++++ TelepathyQt4/Client/connection-manager.cpp | 1 + TelepathyQt4/Client/connection-manager.h | 4 ++++ TelepathyQt4/Client/connection.cpp | 1 + TelepathyQt4/Client/connection.h | 4 ++++ TelepathyQt4/Client/dbus-proxy.cpp | 1 + TelepathyQt4/Client/dbus-proxy.h | 4 ++++ TelepathyQt4/Client/dbus.cpp | 1 + TelepathyQt4/Client/dbus.h | 4 ++++ TelepathyQt4/Client/media-session-handler.cpp | 1 + TelepathyQt4/Client/media-session-handler.h | 4 ++++ TelepathyQt4/Client/media-stream-handler.cpp | 1 + TelepathyQt4/Client/media-stream-handler.h | 4 ++++ TelepathyQt4/Client/optional-interface-factory.cpp | 1 + TelepathyQt4/Client/optional-interface-factory.h | 4 ++++ TelepathyQt4/Client/pending-channel.cpp | 1 + TelepathyQt4/Client/pending-channel.h | 4 ++++ TelepathyQt4/Client/pending-operation.cpp | 1 + TelepathyQt4/Client/pending-operation.h | 4 ++++ TelepathyQt4/Client/properties.cpp | 1 + TelepathyQt4/Client/properties.h | 4 ++++ TelepathyQt4/Client/simple-pending-operations.h | 4 ++++ TelepathyQt4/Constants | 5 +++++ TelepathyQt4/Debug | 5 +++++ TelepathyQt4/KeyFile | 5 +++++ TelepathyQt4/Makefile.am | 3 +++ TelepathyQt4/ManagerFile | 5 +++++ TelepathyQt4/Types | 5 +++++ TelepathyQt4/constants.h | 4 ++++ TelepathyQt4/debug-internal.h | 4 ++++ TelepathyQt4/debug.cpp | 1 + TelepathyQt4/debug.h | 4 ++++ TelepathyQt4/key-file.cpp | 1 + TelepathyQt4/key-file.h | 4 ++++ TelepathyQt4/manager-file.cpp | 1 + TelepathyQt4/manager-file.h | 4 ++++ TelepathyQt4/types.cpp | 1 + TelepathyQt4/types.h | 4 ++++ tools/qt4-client-gen.py | 19 +++++++++++++++---- tools/qt4-constants-gen.py | 11 +++++++++++ tools/qt4-types-gen.py | 19 +++++++++++++++++-- 95 files changed, 364 insertions(+), 6 deletions(-) commit fbdadca965c361b324607135634b78a8dea83457 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Dec 29 17:52:52 2008 -0300 Removed debug. TelepathyQt4/manager-file.cpp | 1 - 1 file changed, 1 deletion(-) commit a7bb5060bcc1461c112e1609677ccea2bdb561ea Author: Andre Moreira Magalhaes (andrunko) Date: Mon Dec 29 17:21:08 2008 -0300 Added fancy headers for all generated classes. TelepathyQt4/Client/AccountInterface | 7 +++++ TelepathyQt4/Client/AccountManagerInterface | 7 +++++ TelepathyQt4/Client/ChannelInterface | 7 +++++ .../Client/ChannelInterfaceCallStateInterface | 7 +++++ .../Client/ChannelInterfaceChatStateInterface | 7 +++++ TelepathyQt4/Client/ChannelInterfaceDTMFInterface | 7 +++++ TelepathyQt4/Client/ChannelInterfaceGroupInterface | 7 +++++ TelepathyQt4/Client/ChannelInterfaceHoldInterface | 7 +++++ .../ChannelInterfaceMediaSignallingInterface | 7 +++++ .../Client/ChannelInterfacePasswordInterface | 7 +++++ .../Client/ChannelTypeContactListInterface | 7 +++++ TelepathyQt4/Client/ChannelTypeRoomListInterface | 7 +++++ .../Client/ChannelTypeStreamedMediaInterface | 7 +++++ TelepathyQt4/Client/ChannelTypeTextInterface | 7 +++++ TelepathyQt4/Client/ChannelTypeTubesInterface | 7 +++++ TelepathyQt4/Client/ConnectionInterface | 7 +++++ .../Client/ConnectionInterfaceAliasingInterface | 7 +++++ .../Client/ConnectionInterfaceAvatarsInterface | 7 +++++ .../ConnectionInterfaceCapabilitiesInterface | 7 +++++ .../Client/ConnectionInterfaceContactsInterface | 7 +++++ .../Client/ConnectionInterfacePresenceInterface | 7 +++++ .../Client/ConnectionInterfaceRequestsInterface | 7 +++++ .../ConnectionInterfaceSimplePresenceInterface | 7 +++++ TelepathyQt4/Client/ConnectionManagerInterface | 7 +++++ TelepathyQt4/Client/DBusDaemonInterface | 7 +++++ TelepathyQt4/Client/IntrospectableInterface | 7 +++++ TelepathyQt4/Client/MediaSessionHandlerInterface | 7 +++++ TelepathyQt4/Client/MediaStreamHandlerInterface | 7 +++++ TelepathyQt4/Client/PeerInterface | 7 +++++ TelepathyQt4/Client/PropertiesInterface | 7 +++++ TelepathyQt4/Client/PropertiesInterfaceInterface | 7 +++++ TelepathyQt4/Makefile.am | 31 ++++++++++++++++++++ 32 files changed, 248 insertions(+) commit 918743651fa001bb553cfd8884ecdb5fcc7b527a Author: Andre Moreira Magalhaes (andrunko) Date: Mon Dec 29 17:07:07 2008 -0300 Moved debug-internal.hpp to debug-internal.h. TelepathyQt4/Client/channel.cpp | 2 +- TelepathyQt4/Client/connection-manager.cpp | 2 +- TelepathyQt4/Client/connection.cpp | 2 +- TelepathyQt4/Client/dbus-proxy.cpp | 2 +- TelepathyQt4/Client/optional-interface-factory.cpp | 2 +- TelepathyQt4/Client/pending-channel.cpp | 2 +- TelepathyQt4/Client/pending-operation.cpp | 2 +- TelepathyQt4/Makefile.am | 1 - TelepathyQt4/debug-internal.h | 90 ++++++++++++++++++++ TelepathyQt4/debug-internal.hpp | 90 -------------------- TelepathyQt4/debug.cpp | 2 +- TelepathyQt4/key-file.cpp | 2 +- TelepathyQt4/manager-file.cpp | 2 +- 13 files changed, 100 insertions(+), 101 deletions(-) commit bc30a761c6e4d9cdb8da962488e35c599dc337e6 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Dec 29 17:01:01 2008 -0300 Moved TelepathyQt4/cli-* to TelepathyQt4/Client/. TelepathyQt4/Client/Account | 7 + TelepathyQt4/Client/AccountManager | 4 +- TelepathyQt4/Client/Channel | 3 +- TelepathyQt4/Client/Connection | 3 +- TelepathyQt4/Client/ConnectionManager | 3 +- TelepathyQt4/Client/DBus | 3 +- TelepathyQt4/Client/DBusProxy | 7 +- TelepathyQt4/Client/MediaSessionHandler | 3 +- TelepathyQt4/Client/MediaStreamHandler | 3 +- TelepathyQt4/Client/OptionalInterfaceFactory | 3 +- TelepathyQt4/Client/PendingChannel | 7 + TelepathyQt4/Client/PendingFailure | 3 +- TelepathyQt4/Client/PendingOperation | 3 +- TelepathyQt4/Client/PendingSuccess | 2 +- TelepathyQt4/Client/PendingVoidMethodCall | 3 +- TelepathyQt4/Client/Properties | 3 +- TelepathyQt4/Client/StatefulDBusProxy | 7 + TelepathyQt4/Client/StatelessDBusProxy | 7 + TelepathyQt4/Client/account-manager.cpp | 25 + TelepathyQt4/Client/account-manager.h | 45 + TelepathyQt4/Client/account.cpp | 25 + TelepathyQt4/Client/account.h | 41 + TelepathyQt4/Client/channel.cpp | 932 ++++++++++++++++++++ TelepathyQt4/Client/channel.h | 819 +++++++++++++++++ TelepathyQt4/Client/connection-manager.cpp | 459 ++++++++++ TelepathyQt4/Client/connection-manager.h | 234 +++++ TelepathyQt4/Client/connection.cpp | 502 +++++++++++ TelepathyQt4/Client/connection.h | 476 ++++++++++ TelepathyQt4/Client/dbus-proxy.cpp | 92 ++ TelepathyQt4/Client/dbus-proxy.h | 190 ++++ TelepathyQt4/Client/dbus.cpp | 25 + TelepathyQt4/Client/dbus.h | 49 + TelepathyQt4/Client/media-session-handler.cpp | 25 + TelepathyQt4/Client/media-session-handler.h | 45 + TelepathyQt4/Client/media-stream-handler.cpp | 25 + TelepathyQt4/Client/media-stream-handler.h | 45 + TelepathyQt4/Client/optional-interface-factory.cpp | 80 ++ TelepathyQt4/Client/optional-interface-factory.h | 122 +++ TelepathyQt4/Client/pending-channel.cpp | 110 +++ TelepathyQt4/Client/pending-channel.h | 136 +++ TelepathyQt4/Client/pending-operation.cpp | 189 ++++ TelepathyQt4/Client/pending-operation.h | 176 ++++ TelepathyQt4/Client/properties.cpp | 25 + TelepathyQt4/Client/properties.h | 46 + TelepathyQt4/Client/simple-pending-operations.h | 111 +++ TelepathyQt4/Makefile.am | 76 +- TelepathyQt4/Prototype/Account.cpp | 1 + TelepathyQt4/cli-account-manager.cpp | 25 - TelepathyQt4/cli-account-manager.h | 50 -- TelepathyQt4/cli-account.cpp | 25 - TelepathyQt4/cli-account.h | 45 - TelepathyQt4/cli-channel.cpp | 931 ------------------- TelepathyQt4/cli-channel.h | 826 ----------------- TelepathyQt4/cli-connection-manager.cpp | 460 ---------- TelepathyQt4/cli-connection-manager.h | 234 ----- TelepathyQt4/cli-connection.cpp | 502 ----------- TelepathyQt4/cli-connection.h | 472 ---------- TelepathyQt4/cli-dbus-proxy.cpp | 93 -- TelepathyQt4/cli-dbus-proxy.h | 190 ---- TelepathyQt4/cli-dbus.cpp | 23 - TelepathyQt4/cli-dbus.h | 49 - TelepathyQt4/cli-media-session-handler.cpp | 23 - TelepathyQt4/cli-media-session-handler.h | 45 - TelepathyQt4/cli-media-stream-handler.cpp | 23 - TelepathyQt4/cli-media-stream-handler.h | 45 - TelepathyQt4/cli-optional-interface-factory.cpp | 80 -- TelepathyQt4/cli-optional-interface-factory.h | 123 --- TelepathyQt4/cli-pending-channel.cpp | 110 --- TelepathyQt4/cli-pending-channel.h | 137 --- TelepathyQt4/cli-pending-operation.cpp | 190 ---- TelepathyQt4/cli-pending-operation.h | 176 ---- TelepathyQt4/cli-properties.cpp | 23 - TelepathyQt4/cli-properties.h | 46 - TelepathyQt4/cli-simple-pending-operations.h | 111 --- tests/prototype/prototype.cpp | 1 + 75 files changed, 5145 insertions(+), 5113 deletions(-) commit 67a3076f93738141eaa30c15a05837a01386574a Author: Andre Moreira Magalhaes (andrunko) Date: Tue Dec 23 12:26:03 2008 -0300 Removed comment. TelepathyQt4/cli-connection-manager.cpp | 1 - 1 file changed, 1 deletion(-) commit c8db37aa99430288cf9d93380d38611bd56bb0d9 Author: Andre Moreira Magalhaes (andrunko) Date: Tue Dec 23 11:02:46 2008 -0300 Added missing call to continueIntrospection on CM. Added missing call to continueIntrospection on CM so it doesn't get stuck when no manager file is found. TelepathyQt4/cli-connection-manager.cpp | 2 ++ 1 file changed, 2 insertions(+) commit 83eb8dfcb04716e47f3f404cde3feb1f795bcd17 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Dec 22 16:39:27 2008 -0300 Fixed pinnochio test case. tests/pinocchio/cm-basics.cpp | 53 ++++++++++++++++------------------------- 1 file changed, 21 insertions(+), 32 deletions(-) commit 8fb2880995ff6e22757abee21a4155b48db526fa Author: Andre Moreira Magalhaes (andrunko) Date: Mon Dec 22 14:28:25 2008 -0300 Enabled manager file parsing on CM. TelepathyQt4/cli-connection-manager.cpp | 85 +++++++++++++++++++++++-------- 1 file changed, 65 insertions(+), 20 deletions(-) commit c6e2c903262a839d9563e08078f0927b99b51c93 Author: Andre Moreira Magalhaes (andrunko) Date: Mon Dec 22 13:48:15 2008 -0300 Added ManagerFile class. Added ManagerFile class used to read telepathy manager files. TelepathyQt4/Makefile.am | 3 + TelepathyQt4/ManagerFile | 6 + TelepathyQt4/manager-file.cpp | 354 +++++++++++++++++++++++++++++++++++++++++ TelepathyQt4/manager-file.h | 54 +++++++ 4 files changed, 417 insertions(+) commit d865fe372b5e887a7929a56ece909093c814a5ed Author: Andre Moreira Magalhaes (andrunko) Date: Mon Dec 22 13:47:20 2008 -0300 Added KeyFile class. Added KeyFile class, used to read key-pair files such as INI and/or .desktop files. TelepathyQt4/KeyFile | 6 + TelepathyQt4/Makefile.am | 3 + TelepathyQt4/key-file.cpp | 453 +++++++++++++++++++++++++++++++++++++++++++++ TelepathyQt4/key-file.h | 71 +++++++ 4 files changed, 533 insertions(+) commit 4d4a5c85446263e765b4c5c6db75aca0b8c5fdd2 Author: Olli Salli Date: Thu Dec 18 18:52:10 2008 +0200 tp-python 0.15.3 sucks too at ReleaseHandles, not just 0.15.0 tests/pinocchio/handles.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) commit ec827bd69bfe67096e5f6eac80f973f414c35d7a Author: Olli Salli Date: Thu Dec 18 00:58:47 2008 +0200 Add a more complicated test for handles with references going up and down for mixed sets of handles tests/pinocchio/handles.cpp | 93 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) commit dd5566f88bcebff0652ffc19ae05ef7437de2835 Author: Olli Salli Date: Thu Dec 18 00:31:00 2008 +0200 Uh, don't screw up initializing the HoldHandles reply either TelepathyQt4/cli-pending-handles.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 26baff8849c21e939c7ecae3cc3b7db80a3ad7ad Author: Olli Salli Date: Wed Dec 17 23:40:58 2008 +0200 Only hold the handleContext mutex as long as you really need it in requestHandles and referenceHandles TelepathyQt4/cli-connection.cpp | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) commit 61d4ac2f22321ee72616f11c37500ba5db7d74f0 Author: Olli Salli Date: Wed Dec 17 23:23:47 2008 +0200 Don't emit a per-handle debug message when there is a requestHandles in flight and handles drop references TelepathyQt4/cli-connection.cpp | 2 -- 1 file changed, 2 deletions(-) commit b22deaca37e36d7200f3aeb06c7caa639911e774 Author: Olli Salli Date: Wed Dec 17 23:09:38 2008 +0200 Comment what happens in the basic handles testcase tests/pinocchio/handles.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) commit 6db3a8ab8aa356a7c4d34b0f877c330d02dd5fb3 Author: Olli Salli Date: Wed Dec 17 20:47:47 2008 +0200 Add URL of the KDELibs coding style description to HACKING HACKING | 3 +++ 1 file changed, 3 insertions(+) commit 1658bd551251eb762e4bd42750ad37da949c6927 Author: Olli Salli Date: Wed Dec 17 20:38:28 2008 +0200 Add a HACKING file HACKING | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) commit e0b9c8415e62dbbde2e251db307e248bceb12f2f Author: Olli Salli Date: Tue Dec 16 11:26:19 2008 +0200 Gain some robustness against misbehaving CMs and races in the GetStatus/StatusChanged logic in Connection TelepathyQt4/cli-connection.cpp | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) commit 4263992851733da96a6c0c534ba94a736308c93a Author: Olli Salli Date: Wed Dec 17 19:40:18 2008 +0200 Add a rudimentary test for Pending/ReferencedHandles tests/pinocchio/Makefile.am | 6 +- tests/pinocchio/handles.cpp | 240 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 245 insertions(+), 1 deletion(-) commit bc2dc797de15c14768e90fe1ef9c99ff64a4157c Author: Olli Salli Date: Wed Dec 17 19:39:59 2008 +0200 Remove ultra-verbose debug from ReferencedHandles TelepathyQt4/cli-referenced-handles.cpp | 12 ------------ 1 file changed, 12 deletions(-) commit 58b769f9c658cac539a066b37545bd95c46712a3 Author: Olli Salli Date: Wed Dec 17 17:22:25 2008 +0200 Don't screw up the QMetaObject::invokeMethod calls in scheduling handle release sweeps TelepathyQt4/cli-connection.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit f8b11e47b7c86fa71c5741565b4130bc6746b2bc Author: Olli Salli Date: Tue Dec 16 20:31:20 2008 +0200 Don't screw up the ReferencedHandles constructors and destructors TelepathyQt4/cli-referenced-handles.cpp | 35 ++++++++++++++++--------------- 1 file changed, 18 insertions(+), 17 deletions(-) commit 7c98ec6ea46ff08cc7925b307140ae18f0b68a23 Author: Olli Salli Date: Tue Dec 16 20:30:27 2008 +0200 Actually initialize the RequestHandles QDBusPendingReply in PendingHandles TelepathyQt4/cli-pending-handles.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 06bb542ea86b7c255f1eaf379693acf86c62d816 Author: Olli Salli Date: Tue Dec 16 11:26:19 2008 +0200 Gain some robustness against misbehaving CMs and races in the GetStatus/StatusChanged logic in Connection TelepathyQt4/cli-connection.cpp | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) commit 4b9617fb3b5d20af95a99b238ac0e77735648d96 Author: Olli Salli Date: Sun Dec 14 21:36:49 2008 +0200 Uh, there can be multiple TP connections behind a single bus connection, so better include the service name in the HandleContext key... TelepathyQt4/cli-connection.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) commit f76782197f43ded3c908e477a89e2be90e3d23f6 Author: Olli Salli Date: Sun Dec 14 17:58:54 2008 +0200 Don't uselesslesly call HoldHandles when all handles are already held and double-finish when the useless call returns TelepathyQt4/cli-connection.cpp | 15 +++++++++++---- TelepathyQt4/cli-pending-handles.cpp | 5 +++++ 2 files changed, 16 insertions(+), 4 deletions(-) commit 02f5447cecfeb6be157d704daa98ff18dbedb3a9 Author: Olli Salli Date: Sat Dec 13 12:35:17 2008 +0200 Use 0 instead of NULL in an assert in RefererencedHandles TelepathyQt4/cli-referenced-handles.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 84e87ed82c2bc50920806e7f0e2510081e7d438b Author: Olli Salli Date: Sat Dec 13 12:29:22 2008 +0200 Adapt to Connection no longer being-a ConnectionInterface in handles code TelepathyQt4/cli-connection.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) commit 8114a55220b209ed9141b38d165df3a7309f2db7 Author: Stefan Eilers Date: Fri Dec 12 15:42:07 2008 +0100 Manually rebase 54a2c7ff9a62a0954910edc0541c023ae8b04ef5 Added signals if an account was modified or removed TelepathyQt4/Prototype/AccountManager.cpp | 42 ++++++++++++++++++++++------- TelepathyQt4/Prototype/AccountManager.h | 15 ++++++++++- tests/prototype/prototype.cpp | 42 +++++++++++++++++++---------- 3 files changed, 75 insertions(+), 24 deletions(-) commit bae4f19d1ba87cbc5438b0e2d8d474d573950723 Merge: 59f75d8 22bde40 Author: Olli Salli Date: Fri Dec 12 15:46:46 2008 +0200 Merge branch 'master' into handles commit eb7bc050f3ab6558c086285634382b1bcac243bd Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 11 20:59:10 2008 +0000 Changed ConnectionManager::cmName to name as we are already a CM. TelepathyQt4/cli-connection-manager.cpp | 6 +++--- TelepathyQt4/cli-connection-manager.h | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) commit 94f1cf74cc90f869accdbcf2eac5015c77108a48 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 11 16:59:34 2008 +0000 Changed ProtocolInfo::protocolName to name as we are already a protocol. TelepathyQt4/cli-connection-manager.cpp | 8 ++++---- TelepathyQt4/cli-connection-manager.h | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) commit dc4541b21ee0064620c065c14b6791a84e7aefc4 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 11 16:57:21 2008 +0000 Disable copy on ProtocolInfo and ConnectionManager classes; TelepathyQt4/cli-connection-manager.h | 4 ++++ 1 file changed, 4 insertions(+) commit b692e0540861f30e2b7f336d56559f6548a307d3 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 11 16:53:20 2008 +0000 Moved ConnectionManager::Private code outside the class definition. TelepathyQt4/cli-connection-manager.cpp | 153 +++++++++++++++++-------------- 1 file changed, 86 insertions(+), 67 deletions(-) commit 8e8bf9128d7037e3e146e9cd4404b513553401f1 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 11 16:47:20 2008 +0000 Moved cmName from private class on ConnectionManager. Moved cmName from private class on ConnectionManager and made the getter method inline. TelepathyQt4/cli-connection-manager.cpp | 16 +++++----------- TelepathyQt4/cli-connection-manager.h | 4 ++-- 2 files changed, 7 insertions(+), 13 deletions(-) commit ad7cf864087218f6e22d1a017450e2dd5aa55a70 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 11 16:42:50 2008 +0000 Changed ConnectionManager class to return a list of protocols. Changed ConnectionManager class to return const reference of the list of supported protocols. This makes the API uniform between ProtocolInfo and ConnectionManager regarding getting supported protocols and parameters. TelepathyQt4/cli-connection-manager.cpp | 38 ++++++++++++++++++++----------- TelepathyQt4/cli-connection-manager.h | 4 +++- 2 files changed, 28 insertions(+), 14 deletions(-) commit 7080a6488a54d1c0e4bf26f3cd9918364a5a20c0 Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 11 16:28:30 2008 +0000 Moved cmName and protocolName from ProtocolInfo private class. Moved cmName and protocolName from ProtocolInfo private class and made the getters methods inline. TelepathyQt4/cli-connection-manager.cpp | 25 ++++--------------------- TelepathyQt4/cli-connection-manager.h | 8 +++++--- 2 files changed, 9 insertions(+), 24 deletions(-) commit 6ceaadb56dcc877288407c963bf83b4ab0a8578c Author: Andre Moreira Magalhaes (andrunko) Date: Thu Dec 11 16:25:29 2008 +0000 Moved ProtocolInfo parameters handling into a separate class. TelepathyQt4/cli-connection-manager.cpp | 138 ++++++++++++++++--------------- TelepathyQt4/cli-connection-manager.h | 122 ++++++++++----------------- 2 files changed, 113 insertions(+), 147 deletions(-) commit 22bde400894ba83dd707b10fe810bcc45b3abb2c Merge: d24517c 01944ea Author: Simon McVittie Date: Thu Dec 11 13:11:59 2008 +0000 Merge branch 'stefan-mediachan' commit d24517ca4187c91dfb278cb260e95819b5de8c47 Merge: c776cc6 5d7c51e Author: Simon McVittie Date: Thu Dec 11 13:11:57 2008 +0000 Merge branch 'proto' commit c776cc6d885131fe2fd311d42e4d598e7f81e6db Author: Simon McVittie Date: Thu Dec 11 12:35:30 2008 +0000 ConnectionManager: document the relationship between isReady() and becomeReady() Also comment that the name "becomeReady()" isn't ideal. TelepathyQt4/cli-connection-manager.h | 10 ++++++++++ 1 file changed, 10 insertions(+) commit 22530254de6ced8ffc419af3e1722a2b7cf733ac Author: Simon McVittie Date: Thu Dec 11 12:34:53 2008 +0000 ConnectionManager: share one PendingReady object between becomeReady callers Since we don't yet support any optional features, there's no point in having multiple PendingReady instances. Note that it's not possible to share the PendingSuccess instances in the "already ready" case. TelepathyQt4/cli-connection-manager.cpp | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) commit a25c06f608d5771637ba66b2775481f5a64ce1f5 Author: Simon McVittie Date: Thu Dec 11 12:03:48 2008 +0000 TestCmBasics: use becomeReady() instead of listening for ready() This is advantageous because calling becomeReady() on an already-ready object will just signal finished when the main loop is next re-entered, reducing the number of code paths required if it is not known whether an externally provided ConnectionManager is ready. tests/pinocchio/cm-basics.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) commit 2b77219dfe696a1466bd211f084916cc5ab3983a Author: Simon McVittie Date: Thu Dec 11 12:02:24 2008 +0000 ConnectionManager: add a becomeReady() method returning a pending operation TelepathyQt4/cli-connection-manager.cpp | 33 +++++++++++++++++++++++++++++++ TelepathyQt4/cli-connection-manager.h | 12 +++++++++++ 2 files changed, 45 insertions(+) commit 5d7c51e5e18abd0cc2fb8b75eed105a74b78b781 Author: Simon McVittie Date: Wed Dec 10 19:29:08 2008 +0000 AccountManager: work around Mission Control 5 <= 5.0.beta45 type mismatch telepathy-spec says ValidAccounts is an array of object paths, 'ao', but in Mission Control <= 5.0.beta45 it's implemented as an array of strings, 'as'. I've checked in a fix to MC, but until it gets released, we'll need something like this. TelepathyQt4/Prototype/AccountManager.cpp | 37 ++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) commit 04185672276f39c718b23fad68fb988d95bc0f21 Author: Simon McVittie Date: Wed Dec 10 16:56:40 2008 +0000 TpPrototype::AccountManager: add a Properties interface and a helper for ValidAccounts TelepathyQt4/Prototype/AccountManager.cpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) commit 7442a0b2989ff073fcb3c148bff664b7899ad446 Author: Simon McVittie Date: Tue Dec 9 14:09:43 2008 +0000 cm-basics test: exercise parameter access tests/pinocchio/cm-basics.cpp | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) commit 3dc6a6b2394174aa6908210e9a78909eab12a189 Author: Simon McVittie Date: Mon Dec 8 16:54:34 2008 +0000 ConnectionManager: add client API to get at CM parameters TelepathyQt4/cli-connection-manager.cpp | 166 +++++++++++++++++++++++++++++-- TelepathyQt4/cli-connection-manager.h | 134 ++++++++++++++++++++++++- 2 files changed, 291 insertions(+), 9 deletions(-) commit b835764a6f73bf42e39c080011e757e2775554f3 Author: Simon McVittie Date: Mon Dec 8 15:32:00 2008 +0000 tests/pinocchio/cm-basics: new test verifying basic operation of ConnectionManager tests/pinocchio/Makefile.am | 4 ++ tests/pinocchio/cm-basics.cpp | 94 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+) commit 51c14f0237850846b6c649f9b3d661326a2fa4a1 Author: Simon McVittie Date: Mon Dec 8 15:31:12 2008 +0000 tests: Add an example of a .manager and .service pair tests/Makefile.am | 5 ++++- tests/dbus-1/services/spurious.service | 3 +++ tests/telepathy/managers/spurious.manager | 11 +++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) commit 17dc6f144900a2deaad0d72d36e26b92132d5502 Author: Simon McVittie Date: Mon Dec 8 15:32:37 2008 +0000 ConnectionManager: add a concept of "is it ready?" TelepathyQt4/cli-connection-manager.cpp | 37 +++++++++++++++++++------------ TelepathyQt4/cli-connection-manager.h | 17 +++++++++----- 2 files changed, 34 insertions(+), 20 deletions(-) commit 91b73d233394375a4a27dcdd430f9e24b834eb2e Author: Simon McVittie Date: Fri Dec 5 18:11:11 2008 +0000 ConnectionManager: start to implement introspection of protocols/params TelepathyQt4/cli-connection-manager.cpp | 154 ++++++++++++++++++++++++++++++- TelepathyQt4/cli-connection-manager.h | 33 ++++++- 2 files changed, 180 insertions(+), 7 deletions(-) commit 2940afd803125c0d95d93a785039b2c66c73bf29 Author: Simon McVittie Date: Fri Dec 5 15:13:04 2008 +0000 ConnectionManager: add a skeletal ConnectionManager class TelepathyQt4/Makefile.am | 1 + TelepathyQt4/cli-connection-manager.cpp | 74 +++++++++++++++++++++++++++++++ TelepathyQt4/cli-connection-manager.h | 55 +++++++++++++++++++++++ 3 files changed, 130 insertions(+) commit a78fd908efe5a0d43d0b304847a51a6d9adc468e Merge: ae2babf ecce047 Author: Simon McVittie Date: Wed Dec 10 17:32:17 2008 +0000 Merge branch 'dbusproxy' commit 01944ea7f612ae448af2ed5328a4d0fce1ac7797 Author: Simon McVittie Date: Wed Dec 10 14:56:42 2008 +0000 TpPrototype::StreamedMediaChannel: arrange headers according to Telepathy coding style - don't include generated headers directly, use the public-API wrappers - use the full name of the header (TelepathyQt4/...) - #include the header for this translation unit first, to verify that it is self-contained - put the least specialized libraries first (Qt then Tp-Qt4 then Prototype) See http://telepathy.freedesktop.org/wiki/Style for rationale for some of this. TelepathyQt4/Prototype/StreamedMediaChannel.cpp | 27 +++++++++++------------ 1 file changed, 13 insertions(+), 14 deletions(-) commit 1d520221c57779e88b1aef174478639d2d609168 Author: Simon McVittie Date: Wed Dec 10 13:13:26 2008 +0000 Add public header wrapper for StreamEngine, and correctly ship the internal header TelepathyQt4/Prototype/Client/StreamEngine | 6 ++++++ TelepathyQt4/Prototype/Makefile.am | 4 +++- 2 files changed, 9 insertions(+), 1 deletion(-) commit 58aef7184743dc1ea06f94df09c4f11b482538fa Author: Simon McVittie Date: Wed Dec 10 13:12:47 2008 +0000 Move the Stream Engine XML into TelepathyQt4/Prototype TelepathyQt4/Prototype/Makefile.am | 3 +- TelepathyQt4/Prototype/Stream_Engine.xml | 44 ++++++++++++++++++++++++++++++ TelepathyQt4/Prototype/stream-engine.xml | 2 +- spec/Stream_Engine.xml | 44 ------------------------------ 4 files changed, 47 insertions(+), 46 deletions(-) commit d3493128d64b79add7c5bbd8a4279e494491140b Author: Stefan Eilers Date: Tue Dec 9 13:50:37 2008 +0100 Added missing include wrapper to force automake to generate correct Tpo files. TelepathyQt4/Prototype/cli-stream-engine.cpp | 23 ++++++++++++++++++++++ TelepathyQt4/Prototype/cli-stream-engine.h | 27 ++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) commit c7f65ea2cfac5d5f640ca287849d9c11315e4929 Author: Stefan Eilers Date: Tue Dec 9 12:05:29 2008 +0100 Added Stream-Engine to build system. It is currently needed by StreamEngine TelepathyQt4/Prototype/Makefile.am | 10 ++++++- TelepathyQt4/Prototype/all.xml | 1 + TelepathyQt4/Prototype/stream-engine.xml | 9 ++++++ spec/Stream_Engine.xml | 44 ++++++++++++++++++++++++++++++ 4 files changed, 63 insertions(+), 1 deletion(-) commit 0799556666433f0112b46f52188c6ee1e8108ad7 Author: Stefan Eilers Date: Tue Dec 9 12:06:10 2008 +0100 Added latest patches and fixed compile issues TelepathyQt4/Prototype/StreamedMediaChannel.cpp | 313 ++++++++++++++++++++--- 1 file changed, 278 insertions(+), 35 deletions(-) commit 486e6cd84fed77a3b311ff74b892ed977d8041ac Author: Stefan Eilers Date: Tue Dec 9 10:09:27 2008 +0100 Merged latest changes. TelepathyQt4/Prototype/StreamedMediaChannel.h | 233 +++++++++++++++++++++++-- 1 file changed, 219 insertions(+), 14 deletions(-) commit ecce047bcd5258cf13b7b5e2db4afcc3e5fa18a7 Author: Simon McVittie Date: Wed Dec 3 18:13:42 2008 +0000 Connection: change from "is a ConnectionInterface" to "has a ConnectionInterface" For the moment, the baseInterface accessor is public rather than protected, because we don't yet have a satisfactory API for Connect (something like telepathy-glib's tp_connection_call_when_ready(), using a PendingOperation). TelepathyQt4/cli-channel.cpp | 2 +- TelepathyQt4/cli-connection.cpp | 36 ++++++++++++++++++++++++++++-------- TelepathyQt4/cli-connection.h | 18 ++++++++++++++++-- tests/pinocchio/chan-basics.cpp | 17 +++++++++-------- tests/pinocchio/conn-basics.cpp | 21 ++++++++++----------- 5 files changed, 64 insertions(+), 30 deletions(-) commit ae2babfad5bd2fe074bbb18ed571ca20d7960ff3 Author: Simon McVittie Date: Wed Dec 10 11:42:33 2008 +0000 PinocchioTest: remove spurious timer stop signal This one wasn't automatically cancelled before starting the actual test, causing tests to appear to pass when they should have failed. tests/pinocchio/lib.cpp | 1 - 1 file changed, 1 deletion(-) commit 184fe2853729f8f28f6c47c93e40dd887e4bff57 Author: Simon McVittie Date: Wed Dec 10 11:40:31 2008 +0000 PinocchioTest: use TelepathyQt4/Constants tests/pinocchio/lib.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 721e51c09532177f238f1e21503b22d312f579c5 Author: Simon McVittie Date: Wed Dec 10 11:39:59 2008 +0000 prototype test: don't use rcc at all, just load the avatar at runtime Also remove -Wno-error=missing-declarations now we don't use rcc. tests/prototype/Makefile.am | 12 +++--------- tests/prototype/images.qrc | 5 ----- tests/prototype/prototype.cpp | 5 ++++- 3 files changed, 7 insertions(+), 15 deletions(-) commit 59f75d81cd4a13cf79e1614d48765e8444a1d710 Author: Olli Salli Date: Wed Dec 10 06:10:10 2008 +0200 First go at a not-so-trivial-anymore implementation of the handle machinery. Beware: this is compile-shipped late night code and will probably need heavy ironing out. TelepathyQt4/cli-connection.cpp | 172 +++++++++++++++++++++++++++++++++- TelepathyQt4/cli-connection.h | 4 + TelepathyQt4/cli-pending-handles.cpp | 10 +- TelepathyQt4/cli-pending-handles.h | 2 +- 4 files changed, 180 insertions(+), 8 deletions(-) commit c0c3e243140c18787c52bba00f2726e475bed095 Author: Olli Salli Date: Wed Dec 10 03:35:03 2008 +0200 Unref handles in handle-removing functions in ReferencedHandles too TelepathyQt4/cli-referenced-handles.cpp | 43 +++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) commit ed95c45be753bb54f80159657e86e037910f448e Author: Olli Salli Date: Wed Dec 10 03:34:11 2008 +0200 Whoops, refHandle and unrefHandle obviously need to have the handle type as a parameter TelepathyQt4/cli-connection.cpp | 4 ++-- TelepathyQt4/cli-connection.h | 4 ++-- TelepathyQt4/cli-referenced-handles.cpp | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) commit 488e28b56379710142059153f3a20680ddc22829 Author: Olli Salli Date: Wed Dec 10 01:52:27 2008 +0200 Port PendingHandles to PendingOperation TelepathyQt4/cli-pending-handles.cpp | 43 ++++++--------------------- TelepathyQt4/cli-pending-handles.h | 53 ++-------------------------------- 2 files changed, 11 insertions(+), 85 deletions(-) commit d22782267cfc173715404c5edbda7a9825b5e033 Author: Olli Salli Date: Wed Dec 10 01:13:30 2008 +0200 Move PendingHandles to its own files TelepathyQt4/Makefile.am | 3 + TelepathyQt4/cli-connection.cpp | 130 -------------------- TelepathyQt4/cli-connection.h | 152 +----------------------- TelepathyQt4/cli-pending-handles.cpp | 164 ++++++++++++++++++++++++++ TelepathyQt4/cli-pending-handles.h | 215 ++++++++++++++++++++++++++++++++++ 5 files changed, 383 insertions(+), 281 deletions(-) commit d06cbb8c250ddc634d416c074c1bd231ead87121 Author: Olli Salli Date: Sun Nov 16 23:48:50 2008 +0200 Ref/unref handles in ReferencedHandles (still not implemented in Connection because of willingness to sleep) TelepathyQt4/cli-connection.cpp | 10 ++++++ TelepathyQt4/cli-connection.h | 4 +++ TelepathyQt4/cli-referenced-handles.cpp | 57 +++++++++++++++++++++++++++++-- 3 files changed, 69 insertions(+), 2 deletions(-) commit 1b673e969097fd07d3fa145d92756498cc979343 Author: Olli Salli Date: Sun Nov 16 22:54:32 2008 +0200 Warn when concatenating ReferencedHandles with different connection and/or handle type TelepathyQt4/cli-referenced-handles.cpp | 5 +++++ 1 file changed, 5 insertions(+) commit 7bf4dd72491af4935898de9a14b6fd5a33a5487e Author: Olli Salli Date: Sun Nov 16 22:31:57 2008 +0200 Implement non-inline methods in ReferencedHandles TelepathyQt4/cli-referenced-handles.cpp | 115 +++++++++++++++++++++++++++++++ TelepathyQt4/cli-referenced-handles.h | 8 +-- 2 files changed, 119 insertions(+), 4 deletions(-) commit 2f6e700bfc0adc9a2dd10fe4f8639d3b3b899c90 Author: Olli Salli Date: Sun Nov 16 21:51:14 2008 +0200 Implement inline passthrough methods in ReferencedHandles TelepathyQt4/cli-referenced-handles.h | 157 +++++++++++++++++++++++++++------ 1 file changed, 131 insertions(+), 26 deletions(-) commit ee11eb806b406a110230b2b1dfd09f9bd30fda1d Author: Olli Salli Date: Wed Nov 12 15:10:07 2008 +0200 Comment explaining the ReferencedHandles API's relation to QList's TelepathyQt4/cli-referenced-handles.h | 7 +++++++ 1 file changed, 7 insertions(+) commit 4644aae51743e2c70dc17e5a7ca788360abd2a6d Author: Olli Salli Date: Wed Nov 12 14:55:15 2008 +0200 Implement ReferencedHandles constructors and the destructor TelepathyQt4/cli-referenced-handles.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) commit c07b293c2ef705adb2e35d276b569be2d6fb7d58 Author: Olli Salli Date: Wed Nov 12 14:13:38 2008 +0200 ReferencedHandles API sketch TelepathyQt4/Client/ReferencedHandles | 6 + TelepathyQt4/Client/ReferencedHandlesIterator | 6 + TelepathyQt4/Makefile.am | 6 +- TelepathyQt4/cli-connection.cpp | 24 ++-- TelepathyQt4/cli-connection.h | 19 +-- TelepathyQt4/cli-referenced-handles.cpp | 52 ++++++++ TelepathyQt4/cli-referenced-handles.h | 162 +++++++++++++++++++++++++ 7 files changed, 254 insertions(+), 21 deletions(-) commit a4af8305f5df0be4b674cde39e5933d9e0ae0b42 Author: Olli Salli Date: Tue Nov 11 14:13:08 2008 +0200 Add naive requestHandles and referenceHandles to Connection TelepathyQt4/cli-connection.cpp | 71 +++++++++++++++++++++++++++++++++------ TelepathyQt4/cli-connection.h | 56 +++++++++++++++++++++++++++++- 2 files changed, 115 insertions(+), 12 deletions(-) commit de8939cd547364788628d5b0b652a0938b1915c6 Author: Olli Salli Date: Mon Oct 20 17:47:55 2008 +0300 Add stub PendingHandles class to be used for Connection::{request,reference}Handles TelepathyQt4/cli-connection.cpp | 111 +++++++++++++++++++++++++++++ TelepathyQt4/cli-connection.h | 149 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 260 insertions(+) commit 5c214bf939ef705270221d0cee785c5b3de6c357 Author: Olli Salli Date: Tue Dec 9 17:59:40 2008 +0200 Doxygen won't find QObject::deleteLater, don't even try (and get a warning) TelepathyQt4/cli-pending-operation.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 2677595b14c12fd4e434e70cc1c89124ec0a69f0 Author: Olli Salli Date: Tue Dec 9 17:30:45 2008 +0200 Move PendingChannel to a separate header file from Connection's TelepathyQt4/Makefile.am | 3 + TelepathyQt4/cli-connection.cpp | 76 ------------------- TelepathyQt4/cli-connection.h | 85 ++------------------- TelepathyQt4/cli-pending-channel.cpp | 110 +++++++++++++++++++++++++++ TelepathyQt4/cli-pending-channel.h | 137 ++++++++++++++++++++++++++++++++++ 5 files changed, 257 insertions(+), 154 deletions(-) commit b382f3b35b52bc3f61f5924ba9561ab1f489eb19 Merge: c8d6dfe edd0a6b Author: Simon McVittie Date: Tue Dec 9 15:53:42 2008 +0000 Merge branch 'misc' commit c8d6dfeef140996ff87de7c647114f67c65dc538 Merge: 9506e04 dbf5e86 Author: Simon McVittie Date: Tue Dec 9 15:49:19 2008 +0000 Merge branch 'pending' commit 9506e04ca1d8454721476e37a3143f6d0fab4920 Merge: f72607d 22a35fa Author: Simon McVittie Date: Tue Dec 9 15:43:46 2008 +0000 Merge branch 'trivia' commit 22a35fad259393602973ca6df99e389ce1404705 Author: Simon McVittie Date: Tue Dec 9 15:39:42 2008 +0000 Actually remove "using namespace" directive tests/pinocchio/conn-basics.cpp | 2 -- 1 file changed, 2 deletions(-) commit 68d3fa9e83b5950d84b98a3c15929e7833d38d74 Author: Simon McVittie Date: Tue Dec 9 15:24:58 2008 +0000 Don't use "using namespace", explicitly use individual classes instead tests/pinocchio/conn-basics.cpp | 17 +++++++++++------ tests/pinocchio/lib.cpp | 4 ++-- 2 files changed, 13 insertions(+), 8 deletions(-) commit f72607dc6453b2b25583b698139f8af1e35bf1e3 Merge: 78f663c e541b05 Author: Simon McVittie Date: Tue Dec 9 14:31:45 2008 +0000 Merge branch 'trivia' commit 78f663c02f60f7e1391d856169a09e01a2e11a91 Merge: f23b0fd fb938ed Author: Olli Salli Date: Tue Dec 9 16:01:52 2008 +0200 Merge branch 'master' of dhansak:/srv/git.collabora.co.uk/git/telepathy-qt4 commit f23b0fd40ae67c7d256dfcb7ce54521ab4b10808 Author: Olli Salli Date: Tue Dec 9 15:55:45 2008 +0200 Compile the prototype test ignoring missing declarations warnings (thanks Qt for your nice and clean resource system) tests/prototype/Makefile.am | 11 ++++++----- tests/prototype/prototype.cpp | 2 -- 2 files changed, 6 insertions(+), 7 deletions(-) commit edd0a6b7173795245cc0d854e1881176e2d2d617 Author: Simon McVittie Date: Thu Dec 4 16:47:04 2008 +0000 configure.ac: look for Python and dbus-python For the moment we're using the well-tested dbus.mainloop.glib (part of dbus-python), rather than dbus.mainloop.qt (part of PyQt4). configure.ac | 15 +++++++++++++++ 1 file changed, 15 insertions(+) commit dbf5e8616301d985acf4a55b33fcca5a7a6935e1 Author: Simon McVittie Date: Mon Dec 8 15:35:49 2008 +0000 PendingOperation: Separate PendingVoidMethodCall into a new header, and add PendingSuccess and PendingFailure Library-user code will usually only need , whereas library extension implementors can use PendingVoidMethodCall, PendingSuccess and PendingFailure. TelepathyQt4/Client/PendingFailure | 8 ++ TelepathyQt4/Client/PendingSuccess | 7 ++ TelepathyQt4/Client/PendingVoidMethodCall | 8 ++ TelepathyQt4/Makefile.am | 7 +- TelepathyQt4/cli-connection.cpp | 2 + TelepathyQt4/cli-pending-operation.cpp | 2 + TelepathyQt4/cli-pending-operation.h | 32 -------- TelepathyQt4/cli-simple-pending-operations.h | 111 ++++++++++++++++++++++++++ 8 files changed, 144 insertions(+), 33 deletions(-) commit 1d4607a6f454665ad7efd40d667d90fee7150de3 Author: Simon McVittie Date: Thu Dec 4 14:54:54 2008 +0000 TelepathyQt4/Constants: improve spec compliance The spec now requires that the account-specific part of a connection's bus name and object path is a single element. TelepathyQt4/constants.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 1038c06e0270c0ba9935bedf54bf8a7c9187284a Author: Olli Salli Date: Tue Dec 9 15:17:13 2008 +0200 Find rcc even if it isn't in $PATH configure.ac | 11 +++++++++++ tests/prototype/Makefile.am | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) commit 0cb6348e0994561d552f956d2e9031d3fb3c9d05 Author: Simon McVittie Date: Wed Dec 3 17:59:37 2008 +0000 doxygen.cfg.in: don't try to use PROJECT_NUMBER Using $(shell git ...) here doesn't actually work. doxygen.cfg.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit e8a083543d2f66e45530d7c82a6084db3ca6ecb5 Author: Simon McVittie Date: Wed Dec 3 17:58:57 2008 +0000 Tests: promote expectSuccessfulCall into superclass tests/pinocchio/chan-basics.cpp | 16 ---------------- tests/pinocchio/conn-basics.cpp | 28 ---------------------------- tests/pinocchio/lib.cpp | 27 +++++++++++++++++++++++++++ tests/pinocchio/lib.h | 5 +++++ 4 files changed, 32 insertions(+), 44 deletions(-) commit fb938ed8849b0573e55aeed4dc842f2cfbeba7ea Merge: d1523af 20aaac2 Author: George Goldberg Date: Wed Dec 3 17:48:03 2008 +0000 Merge branch 'misc' commit e541b0530ad8a8dd0247fc4ff599662bf027aeed Author: Simon McVittie Date: Wed Dec 3 15:55:39 2008 +0000 PendingOperation: use the telepathy-qt4 debug system TelepathyQt4/cli-pending-operation.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit d1523af721dbcceff1dc4b6dbbdcc2bc3ec00e73 Merge: 3351f23 64f1c2b Author: Simon McVittie Date: Wed Dec 3 15:46:54 2008 +0000 Merge branch 'pending' Conflicts: TelepathyQt4/Makefile.am commit 64f1c2b40e389ad9b2f182142bf96beb4206ef7d Author: Simon McVittie Date: Wed Dec 3 15:43:10 2008 +0000 Don't connect to a slot that no longer exists TelepathyQt4/cli-pending-operation.cpp | 2 -- 1 file changed, 2 deletions(-) commit 579ccb705b8df9075045efaf719376171ecdaee0 Author: Simon McVittie Date: Wed Dec 3 15:20:48 2008 +0000 PendingOperation: don't watch for deletion of parent, just warn in destructor if we're not finished yet TelepathyQt4/cli-pending-operation.cpp | 16 ++++++---------- TelepathyQt4/cli-pending-operation.h | 1 - 2 files changed, 6 insertions(+), 11 deletions(-) commit 6f4c8aa31b2445716cd95441ace86acd17bf3858 Author: Simon McVittie Date: Wed Dec 3 15:20:20 2008 +0000 PendingOperation: warn more verbosely when finishing twice TelepathyQt4/cli-pending-operation.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) commit 20aaac217f95d558767378a25fc5fc44bd747263 Author: George Goldberg Date: Wed Dec 3 14:48:37 2008 +0000 Make sure that everything in the /doc/ directory is ignored by git. .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 3351f2310ef00abd7f64a772bcab74b896e03972 Merge: d9c0ef1 fafe45e Author: Simon McVittie Date: Wed Dec 3 13:23:26 2008 +0000 Merge branch 'buildsys' commit d9c0ef1ab8a4968d04c3584c76126354d4959ff9 Merge: 1d2d4b1 da6000c Author: Simon McVittie Date: Wed Dec 3 13:18:04 2008 +0000 Merge branch 'dbusproxy' commit fafe45ee03427a9af87849af0e61c3709390bd71 Author: Simon McVittie Date: Wed Dec 3 13:10:21 2008 +0000 upload-branch-docs: automatically work out what the branch name is git-which-branch.sh was taken from telepathy-spec. Makefile.am | 2 +- tools/Makefile.am | 1 + tools/git-which-branch.sh | 25 +++++++++++++++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) commit 388cfd3d1f84451bd7707e9d0d504373655a4660 Author: Simon McVittie Date: Wed Dec 3 12:35:23 2008 +0000 Don't use TP_QT4_LIBS or PROTO_LIBS, they interfere with dependency tracking Autoconf substitutions in *_LDADD do not generate Makefile dependencies, so using $(TP_QT4_LIBS) meant that tests/examples were not automatically rebuilt when telepathy-qt4 changed. Also simplify makefiles by using LDADD. configure.ac | 9 +++------ examples/extensions/Makefile.am | 6 +++++- tests/dbus/Makefile.am | 7 ++++++- tests/pinocchio/Makefile.am | 8 +++----- tests/prototype/Makefile.am | 7 +++---- 5 files changed, 20 insertions(+), 17 deletions(-) commit 265c36d6566640a88ae9f985b6d637fe5c775af8 Author: Simon McVittie Date: Wed Dec 3 12:15:03 2008 +0000 cli-connection: stop emitting finished(), the superclass does that now TelepathyQt4/cli-connection.cpp | 3 --- 1 file changed, 3 deletions(-) commit 5bbf6ae4e183200ad2cf68633e77c66c5e69d8ba Author: Simon McVittie Date: Wed Dec 3 11:28:14 2008 +0000 pinocchio/chan-basics: exercise isValid() as well as isError() tests/pinocchio/chan-basics.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) commit ab3c694976178963c7fdc8eb6a4e294a8cf1681c Author: Simon McVittie Date: Wed Dec 3 11:27:54 2008 +0000 PendingOperation: adjust API as per Olli's review * parent can be any QObject, although it will often be a DBusProxy * replace setError() with setFinishedWithError() (which is called instead of setFinished() rather than in addition) * delay emission of finished() to guarantee that it takes at least one main loop invocation in all cases * warn if the parent is destroyed before the pending operation finishes TelepathyQt4/cli-connection.cpp | 6 +-- TelepathyQt4/cli-pending-operation.cpp | 83 ++++++++++++++++++++------------ TelepathyQt4/cli-pending-operation.h | 63 ++++++++++++++++++------ 3 files changed, 101 insertions(+), 51 deletions(-) commit 1b8252463dcc6422d553927ea15f17a74b6f491a Author: Simon McVittie Date: Tue Dec 2 17:12:28 2008 +0000 PendingOperation: remove bool from 'finished' signal As per review from gberg. It's equally easy for the recipient to use op->isValid() or !op->isError(), so no need for an extra parameter TelepathyQt4/cli-connection.cpp | 2 +- TelepathyQt4/cli-pending-operation.cpp | 4 ++-- TelepathyQt4/cli-pending-operation.h | 6 +----- tests/pinocchio/chan-basics.cpp | 8 ++++---- tests/pinocchio/conn-basics.cpp | 10 +++++----- 5 files changed, 13 insertions(+), 17 deletions(-) commit da6000cbccd2b1cdea4cc2db08309e29a995503a Author: Simon McVittie Date: Tue Dec 2 17:02:15 2008 +0000 DBusProxy: rethink API to not use QDBusAbstractInterface, and add stub StatefulDBusProxy, StatelessDBusProxy subclasses TelepathyQt4/cli-channel.cpp | 6 +- TelepathyQt4/cli-channel.h | 2 +- TelepathyQt4/cli-dbus-proxy.cpp | 43 +++++++++---- TelepathyQt4/cli-dbus-proxy.h | 127 ++++++++++++++++++++++++++++++++++----- 4 files changed, 148 insertions(+), 30 deletions(-) commit 25940cb6199cfefea1d61961754126fa27583cd0 Author: Simon McVittie Date: Tue Dec 2 14:03:41 2008 +0000 DBusProxy: actually use moc TelepathyQt4/Makefile.am | 3 ++- TelepathyQt4/cli-dbus-proxy.cpp | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) commit 2710b38ac84cc8aa0496f2885e2eeb3b0f268455 Merge: 5c57942 b15adbb Author: Simon McVittie Date: Tue Dec 2 13:29:02 2008 +0000 Merge commit 'gberg/create-dbusproxy-baseclass' into dbusproxy commit 1d2d4b1c4369286d10873e87a291e63241cae170 Author: Simon McVittie Date: Tue Dec 2 11:51:15 2008 +0000 Add test code from the prototype library This test isn't run automatically, since it requires a special VM environment. .gitignore | 1 + configure.ac | 1 + tests/Makefile.am | 3 +- tests/prototype/Makefile.am | 69 +++ tests/prototype/avatar.png | Bin 0 -> 7657 bytes tests/prototype/images.qrc | 5 + tests/prototype/prototype.cpp | 1335 +++++++++++++++++++++++++++++++++++++++++ tests/prototype/prototype.h | 145 +++++ 8 files changed, 1558 insertions(+), 1 deletion(-) commit 771cf38162a7564085adba4ff40c58a1a5fc8786 Author: Simon McVittie Date: Tue Dec 2 11:37:09 2008 +0000 Prototype: Incorporate blocking ('deny' list) development from Stefan TelepathyQt4/Prototype/ContactManager.cpp | 265 ++++++++++++++++++++++------- TelepathyQt4/Prototype/ContactManager.h | 62 ++++++- 2 files changed, 259 insertions(+), 68 deletions(-) commit 0b802286897d7556a93aed0038daebcee7730b31 Author: Simon McVittie Date: Tue Dec 2 11:35:37 2008 +0000 Prototype: hook up code generation for ChannelHandlerInterface properly TelepathyQt4/Prototype/Makefile.am | 6 ++++++ TelepathyQt4/Prototype/cli-channel-handler.cpp | 23 ++++++++++++++++++++ TelepathyQt4/Prototype/cli-channel-handler.h | 27 ++++++++++++++++++++++++ 3 files changed, 56 insertions(+) commit 53eae4a0e4e8f8f125b3b62de08957ca066c6a05 Author: Simon McVittie Date: Tue Dec 2 11:09:26 2008 +0000 configure.ac: define PROTO_CFLAGS and PROTO_LIBS configure.ac | 6 ++++++ 1 file changed, 6 insertions(+) commit 8ce4c1d468dcdb952e4501126c081d17922e3e0e Author: Simon McVittie Date: Tue Dec 2 11:09:05 2008 +0000 configure.ac: check for QtGui, but don't fail if it's not present The tests for the prototype library use it, but it's not required for any of the library code. configure.ac | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) commit b6e0497015c21430750ada0df63fa4a84fa9800c Author: Simon McVittie Date: Tue Dec 2 10:58:10 2008 +0000 Prototype: generate moc files TelepathyQt4/Prototype/Account.cpp | 2 ++ TelepathyQt4/Prototype/AccountManager.cpp | 3 ++- TelepathyQt4/Prototype/AvatarManager.cpp | 2 +- TelepathyQt4/Prototype/CapabilitiesManager.cpp | 2 +- TelepathyQt4/Prototype/ChatChannel.cpp | 2 ++ TelepathyQt4/Prototype/Connection.cpp | 2 ++ TelepathyQt4/Prototype/ConnectionFacade.cpp | 1 + TelepathyQt4/Prototype/Contact.cpp | 2 ++ TelepathyQt4/Prototype/ContactManager.cpp | 2 ++ TelepathyQt4/Prototype/DBusInterface.cpp | 2 ++ TelepathyQt4/Prototype/Makefile.am | 14 +++++++++++++- TelepathyQt4/Prototype/PresenceManager.cpp | 2 +- TelepathyQt4/Prototype/StreamedMediaChannel.cpp | 2 +- 13 files changed, 32 insertions(+), 6 deletions(-) commit 86e39b61859cd3a8ee2854a625c6594d1182cae8 Author: Simon McVittie Date: Tue Dec 2 10:57:38 2008 +0000 Prototype: link library against main tp-qt4 library TelepathyQt4/Prototype/Makefile.am | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) commit 6e054b8ef796fd6deb6be235888a2f2eac6d0f85 Author: Simon McVittie Date: Tue Dec 2 10:52:46 2008 +0000 TelepathyQt4: fix code generation scaffolding for Account, AccountManager TelepathyQt4/Client/AccountManager | 11 ++------ TelepathyQt4/Makefile.am | 6 ++++ TelepathyQt4/cli-account-manager.cpp | 25 +++++++++++++++++ TelepathyQt4/cli-account-manager.h | 50 ++++++++++++++++++++++++++++++++++ TelepathyQt4/cli-account.cpp | 25 +++++++++++++++++ TelepathyQt4/cli-account.h | 45 ++++++++++++++++++++++++++++++ 6 files changed, 153 insertions(+), 9 deletions(-) commit 349a5105efa5300ff37901085b4206bd627a3b09 Author: Simon McVittie Date: Mon Dec 1 16:59:38 2008 +0000 Port PendingChannel to be a PendingOperation TelepathyQt4/cli-connection.cpp | 39 +++++------------------------- TelepathyQt4/cli-connection.h | 51 +-------------------------------------- tests/pinocchio/chan-basics.cpp | 43 +++++++++++++++++---------------- 3 files changed, 29 insertions(+), 104 deletions(-) commit 90baf31a7abfb5414867909470612c4b99f97299 Author: Simon McVittie Date: Mon Dec 1 16:58:43 2008 +0000 PendingOperation: actually implement isFinished() TelepathyQt4/cli-pending-operation.cpp | 6 ++++++ 1 file changed, 6 insertions(+) commit 5c579426d47515f5e6c104aa44bd7438de0951b1 Author: Simon McVittie Date: Mon Dec 1 14:43:10 2008 +0000 .gitignore: ignore directories called _tmp .gitignore | 1 + 1 file changed, 1 insertion(+) commit d6ecd63962933be97e8aa7f9409d35fdb5941603 Author: Simon McVittie Date: Mon Dec 1 16:09:17 2008 +0000 TestChanBasics: exercise PendingChannel tests/pinocchio/chan-basics.cpp | 101 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) commit 35db2eabce40cf21b9c15cc0b8886fe8319c6515 Author: Simon McVittie Date: Mon Dec 1 16:08:52 2008 +0000 PendingOperation: make the API a bit more like PendingChannel TelepathyQt4/cli-pending-operation.cpp | 4 +- TelepathyQt4/cli-pending-operation.h | 75 ++++++++++++++++++++------------ tests/pinocchio/conn-basics.cpp | 6 +-- 3 files changed, 51 insertions(+), 34 deletions(-) commit ba6f7c153c97a8485e7505b4a5aee90fde965952 Author: Simon McVittie Date: Mon Dec 1 14:41:55 2008 +0000 Connection: Add a PendingOperation-based wrapper for Disconnect() TelepathyQt4/cli-connection.cpp | 15 +++++++++++++++ TelepathyQt4/cli-connection.h | 12 ++++++++++++ tests/pinocchio/conn-basics.cpp | 32 +++++++++++++++++++++----------- 3 files changed, 48 insertions(+), 11 deletions(-) commit 692703c689877b4d394780a2396a93bf4a0ff661 Author: Simon McVittie Date: Mon Dec 1 14:33:04 2008 +0000 PendingOperation: add an abstract base class for pending operations, and a trivial subclass TelepathyQt4/Client/PendingOperation | 6 ++ TelepathyQt4/Makefile.am | 6 +- TelepathyQt4/cli-pending-operation.cpp | 158 ++++++++++++++++++++++++++++++ TelepathyQt4/cli-pending-operation.h | 165 ++++++++++++++++++++++++++++++++ 4 files changed, 334 insertions(+), 1 deletion(-) commit 78485259a3cc54d7484838d613f080ffff6d8526 Author: Simon McVittie Date: Fri Nov 28 15:03:16 2008 +0000 Put saved contact lists in a subdirectory, and reset after each run tests/pinocchio/Makefile.am | 4 ++-- tests/pinocchio/lib.cpp | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) commit 0727e1e3f1be74c8fba56adcd5c97b12d269ad3a Author: Simon McVittie Date: Fri Nov 28 14:53:32 2008 +0000 Distribute lib.h and accounts/empty/contacts.xml tests/pinocchio/Makefile.am | 4 ++++ 1 file changed, 4 insertions(+) commit e3526189c08ea4b970d545f6656ed0aa9b53de5c Author: Simon McVittie Date: Fri Nov 28 14:07:27 2008 +0000 Add a basic test for Channel tests/pinocchio/Makefile.am | 5 + tests/pinocchio/chan-basics.cpp | 242 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 247 insertions(+) commit c31027578d8d1c12f01aa8bf23202fdeb3ea105f Author: Simon McVittie Date: Fri Nov 28 12:49:14 2008 +0000 conn-basics: fill in some more test coverage * already being connected * getting optional interfaces * getting status reason * state transition to Dead by user request tests/pinocchio/conn-basics.cpp | 136 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 134 insertions(+), 2 deletions(-) commit f8750ed6ad9debbb88185603b35b4f6689d26eeb Author: Simon McVittie Date: Fri Nov 28 12:47:22 2008 +0000 tests/pinocchio: Include lib.cpp in sources rather than making a library This turns out to make strange lcov workarounds unnecessary. tests/pinocchio/Makefile.am | 14 ++++---------- tools/lcov.am | 3 +-- 2 files changed, 5 insertions(+), 12 deletions(-) commit 2e32467f10e8f79b7dd30c9bbef9a67427432bd3 Author: Simon McVittie Date: Fri Nov 28 11:57:53 2008 +0000 lcov.am: remove the right file to magically make lcov work The fact that it compiles into .libs makes lcov very confused, apparently. tools/lcov.am | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 589dd9ca3f9634fc3767d66028bd3fc039644924 Author: Simon McVittie Date: Fri Nov 28 11:50:06 2008 +0000 tests/dbus: remove generated files in clean and distclean tests/dbus/Makefile.am | 6 ++++++ 1 file changed, 6 insertions(+) commit 79f0fa797ae25bcb77bd2c89f335a4c6217b9a46 Author: Simon McVittie Date: Fri Nov 28 11:49:37 2008 +0000 tests/pinocchio: remove generated files in clean/distclean tests/pinocchio/Makefile.am | 6 ++++++ 1 file changed, 6 insertions(+) commit e20450cec5c22485c4f8596f5323bc0acd7e1580 Author: Simon McVittie Date: Fri Nov 28 11:49:21 2008 +0000 conn-basics: add a test for the alternative constructor that specifies a bus tests/pinocchio/conn-basics.cpp | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) commit 59a68bbacb63ce64d4c9489aca04230934da7ab9 Author: Simon McVittie Date: Fri Nov 28 11:48:41 2008 +0000 conn-basics: Don't assert that Pinocchio supports SimplePresence (it doesn't). Also call Disconnect() so the test is idempotent. tests/pinocchio/conn-basics.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) commit 829fc73d67cf67707a50c975f2164c626374ffe4 Author: Simon McVittie Date: Thu Nov 27 18:29:39 2008 +0000 Improve test coverage a bit by looking at status and interfaces tests/pinocchio/conn-basics.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) commit 6f43e3eead8e34f27718eff900c5588038e95408 Author: Simon McVittie Date: Thu Nov 27 18:18:37 2008 +0000 Hook up code coverage analysis and other useful stuff from telepathy-glib .gitignore | 5 +++++ Makefile.am | 22 ++++++++++++++++------ configure.ac | 1 + tools/Makefile.am | 2 ++ tools/lcov.am | 21 +++++++++++++++++++++ tools/telepathy.am | 27 +++++++++++++++++++++++++++ 6 files changed, 72 insertions(+), 6 deletions(-) commit e85d68a12e3ce2a7db82b19b8ace6579d4253faf Author: Simon McVittie Date: Thu Nov 27 17:43:32 2008 +0000 Connection::onStatusChanged: fake transition via Connecting if necessary telepathy-pinocchio 0.3.1 makes a non-spec-compliant state change from Disconnected straight to Connected; the spec, and telepathy-glib, do not allow this, and it causes assertion failures in changeReadiness(). Recover from the non-compliant state change by pretending the state changed from Disconnected to Connecting, then to Connected, with the same reason code each time (this is the same thing that tp-glib does on the service side). TelepathyQt4/cli-connection.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) commit 3052043536942348c5542e0235d0969d5111c917 Author: Simon McVittie Date: Thu Nov 27 17:39:15 2008 +0000 tests/pinocchio/conn-basics.cpp: new test, exercising Connect() tests/pinocchio/Makefile.am | 12 ++- tests/pinocchio/conn-basics.cpp | 209 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 220 insertions(+), 1 deletion(-) commit 18cba80f6e69164db1d98e11231415d7281dc2e6 Author: Simon McVittie Date: Thu Nov 27 17:38:38 2008 +0000 PinocchioTest: add more test preparation stuff tests/pinocchio/lib.cpp | 76 +++++++++++++++++++++++++++++++++++++++++++++++ tests/pinocchio/lib.h | 22 +++++++++++++- 2 files changed, 97 insertions(+), 1 deletion(-) commit d0ae26cf5b6f1ae63c28c4c5f0bbe86f9c94ba39 Author: Simon McVittie Date: Thu Nov 27 15:07:45 2008 +0000 Add a pinocchio account with an empty roster tests/pinocchio/accounts/empty/contacts.xml | 2 ++ 1 file changed, 2 insertions(+) commit 0be7cc65760a2df4266bce5c03a3935fcfc3699f Author: Simon McVittie Date: Thu Nov 27 13:50:52 2008 +0000 tests/pinocchio: add a PinocchioTest base class tests/pinocchio/Makefile.am | 17 +++++++++++---- tests/pinocchio/do-nothing.cpp | 47 ++++++---------------------------------- tests/pinocchio/lib.cpp | 46 +++++++++++++++++++++++++++++++++++++++ tests/pinocchio/lib.h | 28 ++++++++++++++++++++++++ 4 files changed, 94 insertions(+), 44 deletions(-) commit 86b68e29e951817486d5abfa463b383beb9a946d Author: Simon McVittie Date: Thu Nov 27 12:39:26 2008 +0000 tests/pinocchio/do-nothing.cpp: rework to use QtTest tests/pinocchio/Makefile.am | 17 +++++-- tests/pinocchio/do-nothing.cpp | 102 +++++++++++++++++++++++++++++----------- 2 files changed, 89 insertions(+), 30 deletions(-) commit 5afa533882ced4940652b8d883e14d00ddb4ace7 Author: Simon McVittie Date: Thu Nov 27 12:08:12 2008 +0000 Check for QtTest and port tests/dbus/do-nothing.cpp to QtTest configure.ac | 6 ++++ tests/dbus/Makefile.am | 17 +++++++++-- tests/dbus/do-nothing.cpp | 66 +++++++++++++++++++++++++++++++++++++------ tests/pinocchio/Makefile.am | 3 +- 4 files changed, 80 insertions(+), 12 deletions(-) commit 0f8003614f1c2c3de3ddd548c34a65c96c19916b Author: Simon McVittie Date: Thu Nov 27 11:34:20 2008 +0000 Check for pinocchio-ctl as well as pinocchio configure.ac | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit a1e436340e3a3d565b8df924efb51cfb0b40a941 Author: Simon McVittie Date: Thu Nov 27 11:34:09 2008 +0000 Use TP_QT4_CFLAGS so it's the same as if we got them from pkg-config configure.ac | 8 ++++---- examples/extensions/Makefile.am | 6 +++--- tests/dbus/Makefile.am | 2 +- tests/pinocchio/Makefile.am | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) commit c828749e9c117e4e3f1f75cd0f98d4c84bd11c8d Author: Simon McVittie Date: Wed Nov 26 16:10:37 2008 +0000 Add some more test infrastructure (no real tests yet) .gitignore | 2 ++ configure.ac | 6 +++++ tests/Makefile.am | 6 ++++- tests/README | 13 +++++++++++ tests/dbus/Makefile.am | 25 +++++++++++++++++++++ tests/dbus/do-nothing.cpp | 19 ++++++++++++++++ tests/pinocchio/Makefile.am | 30 +++++++++++++++++++++++++ tests/pinocchio/do-nothing.cpp | 48 ++++++++++++++++++++++++++++++++++++++++ 8 files changed, 148 insertions(+), 1 deletion(-) commit 96ecc3da503dd3b2e5c4e040390ac3672c7ffed7 Author: Simon McVittie Date: Wed Nov 26 15:33:24 2008 +0000 .gitignore: add doxygen.cfg, which is now generated by configure .gitignore | 1 + 1 file changed, 1 insertion(+) commit a9aa6da8d8dfb2b65a2996859e76eab6dab60d6a Author: Simon McVittie Date: Wed Nov 26 15:32:50 2008 +0000 spec/Makefile.am: fix out-of-tree build by using GNU-specific $(wildcard) operator spec/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 8117bec028653abaa5b272476962725663f08e70 Author: Simon McVittie Date: Wed Nov 26 15:29:54 2008 +0000 Configure doxygen to be distcheck-friendly Thanks to the maintainers of libxcb, for having a doxygen.cfg supporting out of tree builds! configure.ac | 27 +- doxygen.cfg | 1417 -------------------------------------------------------- doxygen.cfg.in | 1417 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 1431 insertions(+), 1430 deletions(-) commit 7a46fc4ce7afba8e252a34a9f5618873d8dc17f8 Author: Simon McVittie Date: Wed Nov 26 14:35:39 2008 +0000 configure.ac: make our minds up whether it's _CFLAGS or _CXXFLAGS This broke `make distcheck`. configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 216ac342b9e15f743e6377cf9cc8240fad3890e3 Author: Simon McVittie Date: Wed Nov 26 14:35:08 2008 +0000 Prototype: distribute and install TelepathyQt4/Prototype/Makefile.am | 3 +++ 1 file changed, 3 insertions(+) commit 096882b73c252ec5236d791a1bbb594812d3fe34 Author: Simon McVittie Date: Wed Nov 26 14:19:49 2008 +0000 Prototype: distribute/install some missing files, partially fixing `make distcheck` TelepathyQt4/Prototype/Makefile.am | 3 +++ 1 file changed, 3 insertions(+) commit e8ab4b829e965a6298e4f6de9e99413874746da4 Author: Simon McVittie Date: Wed Nov 26 14:14:19 2008 +0000 Distribute , partially fixing `make distcheck` TelepathyQt4/Makefile.am | 1 + 1 file changed, 1 insertion(+) commit 69abf631df39849a6e35cc67fa6422f97925acd3 Author: Simon McVittie Date: Wed Nov 26 14:13:33 2008 +0000 xincludator.py: correctly interpret href as relative to the source document This assumes Unix filenames, but so did the previous code. This fixes out-of-tree builds, as used by `make distcheck`. tools/xincludator.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) commit 24b15453a5936bd758dba5c4bde23b1a50fc2119 Author: Simon McVittie Date: Wed Nov 26 14:12:02 2008 +0000 spec: distribute all XML files, partially fixing `make distcheck` spec/Makefile.am | 43 +------------------------------------------ 1 file changed, 1 insertion(+), 42 deletions(-) commit 461107e417062887d3ca0076e2b37135cc0dcab1 Author: Simon McVittie Date: Wed Nov 26 14:11:44 2008 +0000 Distribute dbus-daemon.xml, partially fixing `make distcheck` TelepathyQt4/Makefile.am | 1 + 1 file changed, 1 insertion(+) commit 3ee7d1fd6270257e215d11847b7bee37bb137b7f Author: Simon McVittie Date: Wed Nov 26 14:11:08 2008 +0000 .gitignore: ignore .loT (libtool temporary) files .gitignore | 1 + 1 file changed, 1 insertion(+) commit d4b1e265ae666b98008f65344f29a46a3ab63e14 Author: Simon McVittie Date: Wed Nov 26 14:10:48 2008 +0000 .gitignore: ignore tarballs and the directory made by distcheck .gitignore | 2 ++ 1 file changed, 2 insertions(+) commit a9d531c8a36dc0c4e321a0b1636666fcd4ff79b6 Author: Simon McVittie Date: Wed Nov 26 12:51:58 2008 +0000 Add an empty 'tests' directory We need some regression tests, and if I add a directory, maybe people will feel guilty enough to populate it :-) Makefile.am | 2 +- configure.ac | 1 + tests/Makefile.am | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) commit d8c8601cc8c3055e0bf8d20851e32ad0d62a832e Author: Simon McVittie Date: Wed Nov 26 12:50:49 2008 +0000 tools: add with-session-bus.sh (copied from telepathy-glib) tools/Makefile.am | 1 + tools/with-session-bus.sh | 84 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+) commit bdbd4fa782104e8d56140337d49a8fb594979ef2 Author: Simon McVittie Date: Wed Nov 26 12:42:00 2008 +0000 .gitignore: anchor patterns at / (project root) where appropriate, sort with LC_ALL=C, add FIXME.out .gitignore | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) commit 53256321d3881b13e904521e56b919e1910a2a0f Merge: 30e5c81 ffc10a2 Author: Simon McVittie Date: Wed Nov 26 12:28:23 2008 +0000 Merge branch 'proto' commit ffc10a2678a60e47b3cba83abcce08c1f3125f62 Author: Simon McVittie Date: Thu Nov 20 17:48:55 2008 +0000 Import library code for a prototype Qt4 Telepathy convenience library This will be merged into the main telepathy-qt4 code over time; the goal is for the Prototype directory to end up either empty, or populated with trivial wrapper classes. TelepathyQt4/Makefile.am | 21 +- TelepathyQt4/Prototype/Account.cpp | 274 +++++++ TelepathyQt4/Prototype/Account.h | 172 ++++ TelepathyQt4/Prototype/AccountManager.cpp | 310 ++++++++ TelepathyQt4/Prototype/AccountManager.h | 141 ++++ TelepathyQt4/Prototype/AvatarManager.cpp | 320 ++++++++ TelepathyQt4/Prototype/AvatarManager.h | 174 ++++ TelepathyQt4/Prototype/CapabilitiesManager.cpp | 321 ++++++++ TelepathyQt4/Prototype/CapabilitiesManager.h | 129 +++ TelepathyQt4/Prototype/ChatChannel.cpp | 223 ++++++ TelepathyQt4/Prototype/ChatChannel.h | 119 +++ TelepathyQt4/Prototype/Client/ChannelHandler | 6 + TelepathyQt4/Prototype/Connection.cpp | 434 ++++++++++ TelepathyQt4/Prototype/Connection.h | 256 ++++++ TelepathyQt4/Prototype/ConnectionFacade.cpp | 265 +++++++ TelepathyQt4/Prototype/ConnectionFacade.h | 137 ++++ TelepathyQt4/Prototype/Constants | 6 + TelepathyQt4/Prototype/Contact.cpp | 189 +++++ TelepathyQt4/Prototype/Contact.h | 247 ++++++ TelepathyQt4/Prototype/ContactManager.cpp | 965 +++++++++++++++++++++++ TelepathyQt4/Prototype/ContactManager.h | 304 +++++++ TelepathyQt4/Prototype/DBusInterface.cpp | 47 ++ TelepathyQt4/Prototype/DBusInterface.h | 51 ++ TelepathyQt4/Prototype/Makefile.am | 161 ++++ TelepathyQt4/Prototype/PresenceManager.cpp | 620 +++++++++++++++ TelepathyQt4/Prototype/PresenceManager.h | 151 ++++ TelepathyQt4/Prototype/StreamedMediaChannel.cpp | 578 ++++++++++++++ TelepathyQt4/Prototype/StreamedMediaChannel.h | 229 ++++++ TelepathyQt4/Prototype/TpQt4Prototype.pc.in | 11 + TelepathyQt4/Prototype/Types | 6 + TelepathyQt4/Prototype/all.xml | 9 + TelepathyQt4/Prototype/channel-handler.xml | 9 + TelepathyQt4/Prototype/constants.h | 27 + TelepathyQt4/Prototype/types.cpp | 22 + TelepathyQt4/Prototype/types.h | 27 + configure.ac | 2 + 36 files changed, 6956 insertions(+), 7 deletions(-) commit 2148de51bdfc85f7a3692f6c90be1aeb709458da Author: Simon McVittie Date: Mon Nov 10 17:45:22 2008 +0000 Reset spec to version 0.17.14 Using unreleased spec considered harmful. spec/all.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 0adfff68556f5b9ac4f6e870aa2fdd67ecfd37c8 Author: Simon McVittie Date: Mon Nov 10 17:44:55 2008 +0000 Add AccountManager and Account code-generation TelepathyQt4/Client/AccountManager | 16 ++++++++++++++++ TelepathyQt4/Makefile.am | 14 ++++++++++++++ TelepathyQt4/account-manager.xml | 9 +++++++++ TelepathyQt4/account.xml | 13 +++++++++++++ TelepathyQt4/stable-interfaces.xml | 2 ++ 5 files changed, 54 insertions(+) commit b15adbbc709faedcb768ba2a7ef1639d6db1f1ec Author: George Goldberg Date: Wed Nov 19 13:32:31 2008 +0000 Make Tp::Client::Channel inherit from DBusProxy class. TelepathyQt4/cli-channel.cpp | 3 ++- TelepathyQt4/cli-channel.h | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) commit ebe563c7184b19258a04f270a1d11f52f5a1e6a1 Author: George Goldberg Date: Wed Nov 19 13:27:42 2008 +0000 Add installable header for DBusProxy class, and add it to buildsystem. TelepathyQt4/Client/DBusProxy | 6 ++++++ TelepathyQt4/Makefile.am | 1 + 2 files changed, 7 insertions(+) commit a8a39152f2c0651ade3152337044ef562ebaa232 Author: George Goldberg Date: Wed Nov 19 13:25:02 2008 +0000 Doxygenate the DBusProxy class. TelepathyQt4/cli-dbus-proxy.h | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) commit 6533594031ea89a6cf3afa79df62aa66f970ce12 Author: George Goldberg Date: Tue Nov 18 21:27:44 2008 +0000 Roughly implement the DBusProxy base class and add it to the buildsystem. Still needs APIDocs and to be used in the classes that should use it (for now, just Channel is ready). At the moment, it just proxies the dbus connection, path and service. TelepathyQt4/Makefile.am | 2 + TelepathyQt4/cli-dbus-proxy.cpp | 75 ++++++++++++++++++++++++++++++++++ TelepathyQt4/cli-dbus-proxy.h | 85 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 162 insertions(+) commit 30e5c8120b740b2bcfe34c029e4c07096107ed50 Author: George Goldberg Date: Tue Nov 18 20:03:36 2008 +0000 Oggis-Review: getters are still valid after the connection has been closed after introspection completed successfully. The only getter I am sure about is channelType(), but should the group-stuff related getter like methods also work when channel is ReadinessClosed? TelepathyQt4/cli-channel.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit b13b0c9f033fa00d276ae63fcc5e31741cda8ac0 Author: George Goldberg Date: Fri Nov 7 14:10:39 2008 +0000 Fix things that broke during merging in the master branch. TelepathyQt4/cli-channel.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit b26f1458ab98495da9b69fa4b320fbf2c4cca7ac Merge: 8ed9aa0 587126c Author: George Goldberg Date: Fri Nov 7 14:03:12 2008 +0000 Merge branch 'master' into channel-hide-interface-methods Conflicts: TelepathyQt4/cli-channel.cpp commit 8ed9aa04a721ec1e9985031211b029b427b8b06c Author: George Goldberg Date: Fri Nov 7 13:51:16 2008 +0000 Oggis-review: Fix groupSelfRemoveInfo() to only work in ReadinessClosed and update APIDocs to indicate that. TelepathyQt4/cli-channel.cpp | 4 ++-- TelepathyQt4/cli-channel.h | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) commit 85bbcd91bc1c363df590921f6a0412c806097fec Author: George Goldberg Date: Fri Nov 7 13:42:12 2008 +0000 Oggis-review: document the states the channel will end up in depending on what state it is in when close() is called. TelepathyQt4/cli-channel.h | 5 +++++ 1 file changed, 5 insertions(+) commit 14d335319aac7a091cc5f305602918edb8eb4fd3 Author: George Goldberg Date: Fri Nov 7 13:40:07 2008 +0000 Oggis-review: Fix onClosed() to change channel to readinessDead if the introspection is not already complete. TelepathyQt4/cli-channel.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 6f01436baae6d80a6c4cc1fada547f93c4452197 Author: George Goldberg Date: Fri Nov 7 13:35:03 2008 +0000 Oggis-review: We don't allow ReadinessJustCreated->ReadinessClosed. TelepathyQt4/cli-channel.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 587126c2683a1551daa031bbbc12c2888a51a1fb Merge: 64b717b c3e4460 Author: Olli Salli Date: Wed Nov 5 20:19:06 2008 +0200 Merge branch 'chan-conn-elder-care' commit 64b717be942695562fdea0906f76529171015fb8 Merge: 9eaac7b e1d8a7d Author: George Goldberg Date: Wed Nov 5 16:18:56 2008 +0000 Merge branch 'misc' into collabora/main/master commit 9a0518b63f9aeebc3c87e6bcfa931f925cc803bd Author: George Goldberg Date: Wed Nov 5 15:28:50 2008 +0000 Add a new readiness enum value, ReadinessClosed. As discussed on #telepathy with oggis, this new enum value represents the readiness state of the channel when it has been closed. It replaces the closed() signal which could cause race conditions with queued signal/slot connections. This means ReadinessDead is now only for when the channel dies unexpectedly, rather than being closed by the class user in a controlled way. TelepathyQt4/cli-channel.cpp | 30 ++++++++++++++-------------- TelepathyQt4/cli-channel.h | 44 +++++++++++++++++++++++------------------- 2 files changed, 40 insertions(+), 34 deletions(-) commit 3ef4113a37c7ecaf98e09b6e71cd167759076803 Author: George Goldberg Date: Wed Nov 5 15:01:07 2008 +0000 Connect to the correct closed() signal. (yet more oggis review issues.) TelepathyQt4/cli-channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 8e6a56ae25eea52098d451748b0b740e989fa072 Author: George Goldberg Date: Wed Nov 5 14:57:24 2008 +0000 Correct apidocs of the Channel::baseInterface() method (more oggis review stuff). TelepathyQt4/cli-channel.h | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) commit 88ec0406b8565e94936c9eb32a01a3f26892f96c Author: George Goldberg Date: Wed Nov 5 14:34:07 2008 +0000 Add details of changes to Channel::close() to API Docs. TelepathyQt4/cli-channel.h | 6 ++++++ 1 file changed, 6 insertions(+) commit d6f8c22df5aff18fb7e659632fb6b05c81d23b60 Author: George Goldberg Date: Wed Nov 5 14:27:19 2008 +0000 Change channel::close() to work for Readiness != Dead and return a synthesised DBus error if close() can't be called. TelepathyQt4/cli-channel.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) commit e1d8a7d63df5e97e342648d8e454be92473e9690 Author: George Goldberg Date: Wed Nov 5 14:04:46 2008 +0000 01777props -> 0177props - use the correct SPEC version number. TelepathyQt4/cli-channel.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit c3e4460409bbaef41d2f8e5b8e151a3945ae006e Author: Olli Salli Date: Mon Nov 3 17:33:23 2008 +0200 When a Channel's owning Connection is destroyed, cut off the dangling pointer TelepathyQt4/cli-channel.cpp | 2 ++ 1 file changed, 2 insertions(+) commit 38e9a5a54ff4778555e8de9b8f5787c4b12f3065 Author: Olli Salli Date: Mon Nov 3 16:59:53 2008 +0200 Expose the owning connection in Channel TelepathyQt4/cli-channel.cpp | 5 +++++ TelepathyQt4/cli-channel.h | 7 +++++++ 2 files changed, 12 insertions(+) commit 322b89398f68714ec53687643a4cd3ceb9f7a615 Author: Olli Salli Date: Mon Nov 3 16:44:48 2008 +0200 Make Channel keep track of an "owning" connection TelepathyQt4/cli-channel.cpp | 61 +++++++++++++++++++++++++++------------ TelepathyQt4/cli-channel.h | 35 ++++++++++++---------- TelepathyQt4/cli-connection.cpp | 3 +- TelepathyQt4/cli-connection.h | 9 ++++-- 4 files changed, 69 insertions(+), 39 deletions(-) commit fc61ed6e5efbe79fbef1de79f1635fc5cdfc1709 Author: Olli Salli Date: Mon Nov 3 16:39:16 2008 +0200 Change the readinessChanged signal parameters to uint because member enums are rather hard to forward-declare TelepathyQt4/cli-channel.h | 2 +- TelepathyQt4/cli-connection.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit 9eaac7b8d6d7c77ee7e80e27950ec49d7ffecceb Merge: d07d99d 02fe103 Author: Olli Salli Date: Mon Nov 3 10:27:28 2008 +0200 Merge branch 'friendly-requests' commit eebc333fcf3b0910c516d2541827c31bc28fbf52 Author: George Goldberg Date: Sat Nov 1 14:55:28 2008 +0000 Fix typo in warning output. TelepathyQt4/cli-channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c0cd14c19afcfd2499a82eff0e566398dd9e7262 Author: George Goldberg Date: Sat Nov 1 14:02:44 2008 +0000 Add some more bits to .gitignore .gitignore | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 1f95de9ed5d50d8b2a547a501742bf8f9df0fcce Author: George Goldberg Date: Sat Nov 1 13:54:43 2008 +0000 Add a closed() signal that wraps the channel interface's closed() signal. TelepathyQt4/cli-channel.cpp | 3 +++ TelepathyQt4/cli-channel.h | 7 +++++++ 2 files changed, 10 insertions(+) commit 88ce6796f868093d8acc4ab30a5ab80d0af83873 Author: George Goldberg Date: Sat Nov 1 13:46:30 2008 +0000 Add return documentation to close(). TelepathyQt4/cli-channel.h | 2 ++ 1 file changed, 2 insertions(+) commit 1cc7189a48c861ac8d408ae7ca92f3d23beaa2d9 Author: George Goldberg Date: Sat Nov 1 13:43:58 2008 +0000 Change close() to return a QDBusPendingReply when not used as a slot. TelepathyQt4/cli-channel.cpp | 16 +++++++++++----- TelepathyQt4/cli-channel.h | 7 ++++++- 2 files changed, 17 insertions(+), 6 deletions(-) commit d07d99d9ebee87b6edb4c45f55c9d17c49559e02 Author: Olli Salli Date: Fri Oct 31 14:21:55 2008 +0200 Add the bus daemon interface as a 1:1 proxy TelepathyQt4/cli-dbus.h | 4 ++- TelepathyQt4/dbus-daemon.xml | 80 ++++++++++++++++++++++++++++++++++++++++++ TelepathyQt4/dbus.xml | 3 +- 3 files changed, 85 insertions(+), 2 deletions(-) commit 718f12addd38740c0eacd4547c4f223e2d0f1546 Author: Olli Salli Date: Fri Oct 31 14:08:26 2008 +0200 Check for method input and signal argument names being present in client-gen tools/qt4-client-gen.py | 2 ++ 1 file changed, 2 insertions(+) commit ee60eb27834fa59214d3ccf678ef88a19c9adb72 Author: Olli Salli Date: Fri Oct 31 13:11:02 2008 +0200 Update to spec 0.17.4 TelepathyQt4/connection.xml | 2 + spec/Account.xml | 33 +- spec/Account_Interface_Avatar.xml | 3 +- spec/Account_Manager.xml | 12 +- spec/Channel.xml | 240 ++++++++- spec/Channel_Bundle.xml | 48 ++ spec/Channel_Dispatch_Operation.xml | 342 ++++++++++++ spec/Channel_Dispatcher.xml | 361 +++++++++++++ ...Channel_Dispatcher_Interface_Operation_List.xml | 138 +++++ spec/Channel_Future.xml | 82 +-- spec/Channel_Interface_Call_Merging.xml | 4 +- spec/Channel_Interface_Call_State.xml | 8 + spec/Channel_Interface_Destroyable.xml | 82 +++ spec/Channel_Interface_Group.xml | 6 +- spec/Channel_Interface_Messages.xml | 563 +++++++++++++++++--- spec/Channel_Request.xml | 175 ++++++ spec/Channel_Type_Contact_List.xml | 25 +- spec/Channel_Type_Room_List.xml | 3 +- spec/Channel_Type_Text.xml | 127 ++++- spec/Client.xml | 123 +++++ spec/Client_Approver.xml | 137 +++++ spec/Client_Handler.xml | 268 ++++++++++ spec/Client_Observer.xml | 230 ++++++++ spec/Connection.xml | 139 ++++- spec/Connection_Interface_Aliasing.xml | 23 + spec/Connection_Interface_Avatars.xml | 19 +- spec/Connection_Interface_Capabilities.xml | 2 +- spec/Connection_Interface_Contacts.xml | 48 +- spec/Connection_Interface_Presence.xml | 4 +- spec/Connection_Interface_Renaming.xml | 2 +- spec/Connection_Interface_Requests.xml | 557 +++++++++++++++++++ spec/Connection_Interface_Simple_Presence.xml | 6 +- spec/Connection_Manager.xml | 48 +- spec/Media_Session_Handler.xml | 4 +- spec/Media_Stream_Handler.xml | 6 +- spec/all.xml | 39 +- spec/errors.xml | 21 +- spec/generic-types.xml | 28 +- 38 files changed, 3654 insertions(+), 304 deletions(-) commit 65e939f30a3ca4dbb2d6d4eb3d28aa441086dd3a Author: George Goldberg Date: Wed Oct 29 16:32:45 2008 +0000 Implement close() method in the convenience Channel class. Channel class should now implement wrappers around all needed methods from the ChannelInterface (using the SPEC version currently part of tpQt4. TelepathyQt4/cli-channel.cpp | 9 +++++++++ TelepathyQt4/cli-channel.h | 6 ++++++ 2 files changed, 15 insertions(+) commit 0efed963d31d369ac687907f615207c2a578a3b3 Author: George Goldberg Date: Wed Oct 29 16:10:20 2008 +0000 Change the Channel class parent to QObject and make the ChannelInterface a member of the private struct. Get everything compiling and working as before. Methods not currently in the convenience class still need to be added. TelepathyQt4/cli-channel.cpp | 23 ++++++++++++++++------- TelepathyQt4/cli-channel.h | 17 ++++++++++++++--- 2 files changed, 30 insertions(+), 10 deletions(-) commit 835485e5871da0410afd1d354ad09c8bbaead60c Merge: b68caa3 65fa72c Author: Olli Salli Date: Mon Oct 20 19:13:26 2008 +0300 Merge branch 'autointrospect-channel-group' commit 65fa72cb7425e276dacc7417951ed8833d7a192a Author: Olli Salli Date: Mon Oct 20 18:47:36 2008 +0300 Filter GroupFlagProperties out in fallback GetGroupFlags callback TelepathyQt4/cli-channel.cpp | 5 +++++ 1 file changed, 5 insertions(+) commit 3f3e3dc9dd5a4f36bbf4f49dd2edf9a99e11ddfd Author: Olli Salli Date: Tue Oct 14 00:17:08 2008 +0300 QString doesnt have empty(), it has isEmpty() TelepathyQt4/cli-channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 182c4a73752d49fb29464ce6323fb22e0d37e955 Author: Olli Salli Date: Tue Oct 14 00:09:26 2008 +0300 Misc Will-review fixes to group handle owners TelepathyQt4/cli-channel.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit f720a385d58c8bf673f594edb68755565aeb247b Author: Olli Salli Date: Sat Oct 11 14:03:54 2008 +0300 Issue warnings when cached Group properties are accessed in an unsuitable state TelepathyQt4/cli-channel.cpp | 51 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 49 insertions(+), 2 deletions(-) commit cf919cdb0185bcceabeb8b31a7700ef5c49fc8ac Author: Olli Salli Date: Fri Oct 10 19:41:58 2008 +0300 Similarly to the main Channel autointrospection, clarify and make more scalable the Group property extraction TelepathyQt4/cli-channel.cpp | 89 +++++++++++++++++++++--------------------- 1 file changed, 45 insertions(+), 44 deletions(-) commit 02fe1032768fcf39ed02eeb26cdd756715b625b3 Author: Olli Salli Date: Wed Oct 8 14:46:56 2008 +0300 Doxyment PendingChannel TelepathyQt4/cli-connection.h | 117 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 114 insertions(+), 3 deletions(-) commit b3beb03a1d58fc0be34a93bb9359fc727397c2a4 Author: Olli Salli Date: Wed Oct 8 00:31:13 2008 +0300 Add PendingChannel class for friendly channel requests TelepathyQt4/cli-connection.cpp | 122 +++++++++++++++++++++++++++++++++++++++ TelepathyQt4/cli-connection.h | 42 ++++++++++++++ 2 files changed, 164 insertions(+) commit b68caa33ceff083856098873b1380d7071a504ff Author: Olli Salli Date: Wed Oct 8 00:29:45 2008 +0300 Use typeInterface instead of optionalInterface for Channel type-specific interfaces, as intended TelepathyQt4/cli-channel.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 931f473457f09b5c7f365fe6295d82943ee48f01 Author: Olli Salli Date: Tue Sep 30 00:01:11 2008 +0300 Add additional header guards to the pretty include headers for clarity TelepathyQt4/Client/Channel | 5 +++++ TelepathyQt4/Client/Connection | 5 +++++ TelepathyQt4/Client/ConnectionManager | 5 +++++ TelepathyQt4/Client/DBus | 5 +++++ TelepathyQt4/Client/MediaSessionHandler | 5 +++++ TelepathyQt4/Client/MediaStreamHandler | 5 +++++ TelepathyQt4/Client/OptionalInterfaceFactory | 5 +++++ TelepathyQt4/Client/Properties | 5 +++++ TelepathyQt4/Constants | 5 +++++ TelepathyQt4/Debug | 5 +++++ TelepathyQt4/Types | 5 +++++ TelepathyQt4/cli-channel.h | 4 ++-- TelepathyQt4/cli-connection-manager.h | 4 ++-- TelepathyQt4/cli-connection.h | 4 ++-- TelepathyQt4/cli-dbus.h | 4 ++-- TelepathyQt4/cli-media-session-handler.h | 4 ++-- TelepathyQt4/cli-media-stream-handler.h | 4 ++-- TelepathyQt4/cli-optional-interface-factory.h | 4 ++-- TelepathyQt4/cli-properties.h | 4 ++-- TelepathyQt4/constants.h | 4 ++-- TelepathyQt4/debug.h | 4 ++-- TelepathyQt4/types.h | 4 ++-- 22 files changed, 77 insertions(+), 22 deletions(-) commit 97ef5b0008646c30c9a097baecb38a74d70f8f05 Merge: cfa6edb ab5082e Author: Olli Salli Date: Mon Sep 29 23:04:04 2008 +0300 Merge branch 'extensibility' commit 314e3d5005f679326e177c478fe3c2d53630b274 Merge: 6c0f1dc cfa6edb Author: Olli Salli Date: Wed Sep 24 13:45:26 2008 +0300 Merge branch 'master' into autointrospect-channel-group commit cfa6edb1c7b6c98654ac1974732e2c8e95d10518 Author: Olli Salli Date: Mon Sep 22 21:05:36 2008 +0300 Remove as-compiler-flag.m4 completely, it's unused now - and dist tp-cxx-compiler-flag.m4, forgot it m4/Makefile.am | 2 +- m4/as-compiler-flag.m4 | 35 ----------------------------------- 2 files changed, 1 insertion(+), 36 deletions(-) commit 74d50beed78128e9f3aa743e4ea1868595a3c80a Author: Olli Salli Date: Mon Sep 22 20:47:00 2008 +0300 Try to make the compiler flag usage more portable configure.ac | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) commit 0e93e299cad790c233d6f56200e489eac5e38c6f Author: Olli Salli Date: Mon Sep 22 20:15:26 2008 +0300 Rewrite the (wrongly) modified AS_COMPILER_FLAG as TP_CXX_COMPILER_FLAG, using AC_COMPILE_IFELSE configure.ac | 12 ++++++------ m4/tp-cxx-compiler-flag.m4 | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 6 deletions(-) commit 75359f01cacd844c4ddb0274147608cf1a78642c Author: Olli Salli Date: Mon Sep 22 19:19:47 2008 +0300 We depend on automake >= 1.9, reflect that in the ./autogen.sh automake chooser check autogen.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) commit 957ca0d876747813e739b6452657b04a73b7082c Author: Olli Salli Date: Mon Sep 22 19:12:39 2008 +0300 Correctly check for C++ compiler flags in AS_COMPILER_FLAG configure.ac | 1 + m4/as-compiler-flag.m4 | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) commit 82a34e7c7a83e497868449571863f86841182e69 Author: Olli Salli Date: Mon Sep 22 14:42:07 2008 +0300 De-bong the status/statusReason comment additions from the previous patch TelepathyQt4/cli-connection.h | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) commit 820d7a1ff5e717f91dd54abf470759aeb8fae60e Author: Olli Salli Date: Mon Sep 22 14:01:34 2008 +0300 Document that the values returned by Connection::status(reason)? might have changed by the time readinessChanged() is emitted TelepathyQt4/cli-connection.h | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) commit 8e93dcefdd32fcde2f0d1059d497017e07626114 Author: Olli Salli Date: Mon Sep 22 13:26:26 2008 +0300 Will-review #6: reword debug message in Connection::onStatusChanged TelepathyQt4/cli-connection.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 24777e4f920c2716ea85d4464b5d1b7a3d205130 Author: Olli Salli Date: Mon Sep 22 01:40:46 2008 +0300 Will-review #5: Point to optionalInterface() in the check parameter descriptions for optional interface convenience getters also in Connection TelepathyQt4/cli-connection.h | 25 +++++-------------------- 1 file changed, 5 insertions(+), 20 deletions(-) commit f5342710a2e8db9c14faf06a84d3d2cc5fb49396 Author: Olli Salli Date: Mon Sep 22 01:38:21 2008 +0300 Similarly to Channel, fix Connection::propertiesInterface() to use BypassInterfaceCheck TelepathyQt4/cli-connection.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 902a6391ddd17b5a82c8ad62fe935b81de54f63b Author: Olli Salli Date: Mon Sep 22 01:35:32 2008 +0300 Will-review #4: Refine the Connection state accessor validity guarantees and emit warnings for improper usage TelepathyQt4/cli-connection.cpp | 29 +++++++++++++++ TelepathyQt4/cli-connection.h | 77 ++++++++++++++++++++++++--------------- 2 files changed, 76 insertions(+), 30 deletions(-) commit cd520d34a6fa30a28a19e671bfffcae88e205ff2 Merge: d8c8ca5 25dd788 Author: Olli Salli Date: Mon Sep 22 01:28:55 2008 +0300 Merge branch 'master' into autointrospect-connection commit 6c0f1dc7edc91c1f9561752fbe11f0b4ce2ab2e7 Merge: 1f10b00 25dd788 Author: Olli Salli Date: Sat Sep 20 22:54:32 2008 +0300 Merge branch 'master' into autointrospect-channel-group Conflicts: TelepathyQt4/cli-channel.h commit 25dd7882d09d5cc235f62bd3bdd562bfb20d86f0 Author: Olli Salli Date: Sat Sep 20 22:29:22 2008 +0300 Will-review #3 redux: Change Channel::interfaces and Channel::channelType checks subtly to allow usage from Channel internals even before no public usage is allowed TelepathyQt4/cli-channel.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) commit d8c8ca5f68382cc070e9079c1420a49cb1221bd7 Merge: 8d0cc4e 3f34d31 Author: Olli Salli Date: Sat Sep 20 20:55:36 2008 +0300 Merge branch 'master' into autointrospect-connection Conflicts: TelepathyQt4/Makefile.am commit 3f34d3148923c49d220d2288cf0e22aa29301c9c Author: Olli Salli Date: Sat Sep 20 13:58:30 2008 +0300 Will-review #3: Issue a warning when the cached properties are accessed in an unsuitable state TelepathyQt4/cli-channel.cpp | 15 +++++++++++++++ TelepathyQt4/cli-channel.h | 19 +++++++++++++------ 2 files changed, 28 insertions(+), 6 deletions(-) commit 358ac1141ce4b9e0f603cfd43c7b6a3339ad25e1 Author: Olli Salli Date: Fri Sep 19 17:31:15 2008 +0300 Will-review #2: Fix doxygen comments for Channel optional interface getters TelepathyQt4/cli-channel.h | 63 ++++++++++---------------------------------- 1 file changed, 14 insertions(+), 49 deletions(-) commit b13f511c674f7afa55823e152b67beaa3e8ed4d4 Author: Olli Salli Date: Fri Sep 19 15:30:43 2008 +0300 Correct Channel::propertiesInterface() to bypass the interface check TelepathyQt4/cli-channel.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 24ab7ba540746c9d88628cd2991092d115ba8613 Author: Olli Salli Date: Fri Sep 19 15:28:30 2008 +0300 Move initial continueIntrospection to Channel constructor, otherwise the priv pointer won't have been initialized TelepathyQt4/cli-channel.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit e296b4320b8be9752c64a2298d1b2f290a58e179 Author: Olli Salli Date: Thu Sep 18 11:17:34 2008 +0300 Will-review #1: Change the property checking to be a) more clear b) better scalable to new properties TelepathyQt4/cli-channel.cpp | 67 ++++++++++++++++++++++-------------------- 1 file changed, 35 insertions(+), 32 deletions(-) commit 8d0cc4ec60acef465bb47fbf3ccc48161c9729b7 Author: Olli Salli Date: Wed Sep 10 23:53:23 2008 +0300 Change the boolean force parameters to optionalInterface and friends to a more readable enum in Connection TelepathyQt4/cli-connection.h | 90 ++++++++++++++++++++++++----------------- 1 file changed, 54 insertions(+), 36 deletions(-) commit 5a6d925a2af9b0ed3b0b0dd60744496263ddc6fa Author: Olli Salli Date: Wed Sep 10 23:15:01 2008 +0300 Change the boolean force parameters to optionalInterface, typeInterface and friends to a more readable enum in Channel TelepathyQt4/cli-channel.h | 161 +++++++++++++++++++++++++------------------- 1 file changed, 91 insertions(+), 70 deletions(-) commit 1f10b00a827f01854cbd4eed3d0a30685a812b45 Author: Olli Salli Date: Wed Sep 10 21:51:30 2008 +0300 Expose group self remove info TelepathyQt4/cli-channel.cpp | 30 +++++++++++++++--------------- TelepathyQt4/cli-channel.h | 20 ++++++++++++++++++++ 2 files changed, 35 insertions(+), 15 deletions(-) commit 447511fada4b5dab572fdd3714d174126106e76f Author: Olli Salli Date: Wed Sep 10 21:41:11 2008 +0300 Generalize GroupLocalPendingInfo to be GroupMemberChangeInfo TelepathyQt4/cli-channel.cpp | 12 +++++------ TelepathyQt4/cli-channel.h | 47 +++++++++++++++++++++++++++--------------- 2 files changed, 36 insertions(+), 23 deletions(-) commit bffaeff6f742d5fca0dc07b64f1cd2c07e2a4879 Author: Olli Salli Date: Wed Sep 10 19:18:30 2008 +0300 Expose group self handle TelepathyQt4/cli-channel.cpp | 18 ++++++++++++++++-- TelepathyQt4/cli-channel.h | 28 ++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) commit 5afe1b888e484d581d4e1668f128616e7d3419e1 Author: Olli Salli Date: Sun Sep 7 15:42:03 2008 +0300 Misc fixes in doxygen for group flags and members TelepathyQt4/cli-channel.h | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) commit b94540045abdaa44124c916edb8637ddb7b19bf9 Author: Olli Salli Date: Sun Sep 7 15:40:50 2008 +0300 Expose handle owners TelepathyQt4/cli-channel.cpp | 40 +++++++++++++++++++++++++++++---- TelepathyQt4/cli-channel.h | 50 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+), 4 deletions(-) commit 800b65384b0a9a5f5f8e8d9d0e441bbadd073e27 Author: Olli Salli Date: Thu Sep 4 03:00:46 2008 +0300 Expose group members, local pending and remote pending TelepathyQt4/cli-channel.cpp | 75 +++++++++++++++++++++---- TelepathyQt4/cli-channel.h | 124 ++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 182 insertions(+), 17 deletions(-) commit 41e8e7e21f2a724545d1235fd1d3d38e7f924e16 Author: Olli Salli Date: Thu Sep 4 00:22:22 2008 +0300 Expose group flags TelepathyQt4/cli-channel.cpp | 10 +++++ TelepathyQt4/cli-channel.h | 88 +++++++++++++++++++++++++++++++++++------- 2 files changed, 85 insertions(+), 13 deletions(-) commit 46e36c0ecf603eebb96e1155b3b2074b932ddb9f Author: Olli Salli Date: Wed Sep 3 22:55:57 2008 +0300 Store extended info when self handle has been removed from Group TelepathyQt4/cli-channel.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) commit 288ef59663da4e8a700ae0b37209f3d0c9127478 Author: Olli Salli Date: Wed Sep 3 22:24:15 2008 +0300 Make the Channel::Private member declarations more readable TelepathyQt4/cli-channel.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) commit 4793955f2470ab0cc2c9d542c64753d3b224c516 Author: Olli Salli Date: Wed Sep 3 19:07:46 2008 +0300 Add debug output to Group autointrospection detailing the number of local pending members TelepathyQt4/cli-channel.cpp | 1 + 1 file changed, 1 insertion(+) commit 583aeb2f53e058c240e9a487aac0234088acecdc Author: Olli Salli Date: Wed Sep 3 17:33:31 2008 +0300 Add local pending (with full extended info, change tracking and fallbacks) to Group autointrospection TelepathyQt4/cli-channel.cpp | 86 ++++++++++++++++++++++++++++++++++-------- TelepathyQt4/cli-channel.h | 31 +++++++++++++++ 2 files changed, 102 insertions(+), 15 deletions(-) commit 137a0c79a548cc2152405c137027e9a05d58ab66 Author: Olli Salli Date: Mon Sep 1 01:23:50 2008 +0300 Add change tracking to Channel.Interface.Group autointrospection TelepathyQt4/cli-channel.cpp | 111 +++++++++++++++++++++++++++++++++++++++--- TelepathyQt4/cli-channel.h | 4 ++ 2 files changed, 109 insertions(+), 6 deletions(-) commit d078f11ef74284a4f50e7ad4a6486ebf9abc422d Author: Olli Salli Date: Mon Aug 18 21:41:09 2008 +0300 Add fallbacks to Group autointrospection, still without LocalPending TelepathyQt4/cli-channel.cpp | 113 +++++++++++++++++++++++++++++++++++++++++- TelepathyQt4/cli-channel.h | 3 ++ 2 files changed, 115 insertions(+), 1 deletion(-) commit 91264b313fcd46c091c3b09eddb30985212b5f39 Author: Olli Salli Date: Tue Aug 12 14:44:28 2008 +0300 Add basic Channel.Interface.Group autointrospection, still without fallbacks and LocalPending TelepathyQt4/cli-channel.cpp | 67 +++++++++++++++++++++++++++++++++++++++++- TelepathyQt4/cli-channel.h | 6 ++++ 2 files changed, 72 insertions(+), 1 deletion(-) commit 4a63b0d5ffca0e729e2c9cd548ae88ffcb477a72 Author: Olli Salli Date: Wed Sep 10 00:35:44 2008 +0300 Add shared getters for the remaining Channel interfaces TelepathyQt4/cli-channel.h | 199 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 199 insertions(+) commit c8916ebf1be005ebfef65de39013f700ebec0ed6 Author: Olli Salli Date: Tue Sep 9 23:18:44 2008 +0300 Use OptionalInterfaceFactory in Channel (currently only for Properties) TelepathyQt4/cli-channel.cpp | 13 +++++++---- TelepathyQt4/cli-channel.h | 52 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 60 insertions(+), 5 deletions(-) commit c336669b04012199c03f69cb1c3b24d6c7ad0c90 Author: Olli Salli Date: Mon Aug 25 23:43:36 2008 +0300 Adapt to debug.hpp->debug-internal.hpp change in cli-channel.cpp TelepathyQt4/cli-channel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c831cb677ab8555c02578072a522c8eda4f4109e Author: Olli Salli Date: Tue Aug 12 04:10:29 2008 +0300 Future-proof the Channel::Readiness enum TelepathyQt4/cli-channel.cpp | 1 + TelepathyQt4/cli-channel.h | 8 +++++--- 2 files changed, 6 insertions(+), 3 deletions(-) commit 567a40ef8616a5f4acfde91ce9e27fbdeb3ec09e Author: Olli Salli Date: Tue Aug 12 03:54:26 2008 +0300 Add overview comment explaining the benefits of using Channel TelepathyQt4/cli-channel.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit 81f3e6006fd5cdc0cdbc6be2156784db325c038e Author: Olli Salli Date: Tue Aug 12 03:34:55 2008 +0300 Hook up Channel::Closed to making Channel have the dead readiness TelepathyQt4/cli-channel.cpp | 17 +++++++++++++++-- TelepathyQt4/cli-channel.h | 1 + 2 files changed, 16 insertions(+), 2 deletions(-) commit 09f86c6bc06690f9397bfddeeda53ec69e3a4623 Author: Olli Salli Date: Tue Aug 12 03:21:05 2008 +0300 Expose the channel type, handle type and handle in Channel TelepathyQt4/cli-channel.cpp | 15 +++++++++++++++ TelepathyQt4/cli-channel.h | 28 ++++++++++++++++++++++++---- 2 files changed, 39 insertions(+), 4 deletions(-) commit ca98bc58f255db4cbeba4a8b93c12ca82228c45c Author: Olli Salli Date: Tue Aug 12 03:05:36 2008 +0300 Extend the main interface introspection to introspect channel type, target handle type and target handle as well (with proper fallbacks) TelepathyQt4/cli-channel.cpp | 87 +++++++++++++++++++++++++++++++++++++++++- TelepathyQt4/cli-channel.h | 2 + 2 files changed, 87 insertions(+), 2 deletions(-) commit b6e1cff21d9e5515e6c3bbc65a9ff562b25eda0c Author: Olli Salli Date: Tue Aug 12 02:10:42 2008 +0300 Make Channel do autointrospect of the main interface state (with fallbacks, currently exposing Interfaces) TelepathyQt4/cli-channel.cpp | 138 +++++++++++++++++++++++++++++++++++++++++- TelepathyQt4/cli-channel.h | 63 +++++++++++++++++++ 2 files changed, 200 insertions(+), 1 deletion(-) commit 22371b3e51c7aacacd0bd11301f9a772d364fafb Author: Olli Salli Date: Mon Aug 11 15:08:42 2008 +0300 Add stub Channel high-level proxy TelepathyQt4/Makefile.am | 3 ++- TelepathyQt4/cli-channel.cpp | 48 +++++++++++++++++++++++++++++++++++-- TelepathyQt4/cli-channel.h | 54 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 102 insertions(+), 3 deletions(-) commit ffefbac8bfe949e5e1e1845e9e497b8d75717b35 Author: Olli Salli Date: Tue Sep 9 23:00:09 2008 +0300 Doxyment the Connection optional interface getters TelepathyQt4/cli-connection.h | 81 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 79 insertions(+), 2 deletions(-) commit ce938fc8a93967c2fedb4e6aa9bd0d6ea55cc1a0 Author: Olli Salli Date: Tue Sep 9 22:59:56 2008 +0300 Misc errata to Connection doxygen TelepathyQt4/cli-connection.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) commit e36c444a8801cb315dd4dfd59b6e0aaaef6e386d Author: Olli Salli Date: Tue Sep 9 17:07:24 2008 +0300 Use OptionalInterfaceFactory for the optional interfaces in Connection TelepathyQt4/cli-connection.cpp | 21 --------------------- TelepathyQt4/cli-connection.h | 17 ++++------------- 2 files changed, 4 insertions(+), 34 deletions(-) commit aa61c87ea9d57ea3cf864b225f498e751f29d880 Author: Olli Salli Date: Tue Sep 9 17:05:41 2008 +0300 forcePresent in the optional interface getters should've been false by default TelepathyQt4/cli-connection.h | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) commit 02d2dd484f0635fa931c364b86d40d2ba879dd9b Author: Olli Salli Date: Mon Sep 8 18:38:07 2008 +0300 Add Connection::optionalInterface() and friends TelepathyQt4/cli-connection.cpp | 62 +++++++++++++++++++++++++++++++-------- TelepathyQt4/cli-connection.h | 53 +++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+), 13 deletions(-) commit 717b6d9e336493249890719c3e9c03380162f13a Author: Olli Salli Date: Mon Aug 25 23:47:37 2008 +0300 Adapt to debug.hpp->debug-internal.hpp change in cli-connection.cpp TelepathyQt4/cli-connection.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit d313f0ab7375c016811f160a101c325986ce4c1b Author: Olli Salli Date: Tue Aug 12 04:07:28 2008 +0300 Future-proof the Connection::Readiness enum TelepathyQt4/cli-connection.cpp | 2 +- TelepathyQt4/cli-connection.h | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) commit 554026cb5e3a2f5eda8df7b7f72cccccec9bb2b6 Author: Olli Salli Date: Sun Aug 10 00:33:11 2008 +0300 New architecture of the high-level proxies; Autointrospect for Connection implemented TelepathyQt4/cli-connection.cpp | 193 ++++++++++++++++++++++++++++---------- TelepathyQt4/cli-connection.h | 196 +++++++++++++++++++++------------------ 2 files changed, 252 insertions(+), 137 deletions(-) commit 5bb79cb465d56da6356acefeb34ead906bfcb663 Author: Olli Salli Date: Tue Jul 29 01:11:53 2008 +0300 Adapt to latest developments in -client-proxies; Connection now publicly inherits ConnectionInterface TelepathyQt4/cli-connection.cpp | 65 ++++++++++++++++----------------------- TelepathyQt4/cli-connection.h | 34 ++++++-------------- 2 files changed, 35 insertions(+), 64 deletions(-) commit a25cc99cb3ae6328fef7222e9d876918204fc6ce Author: Olli Salli Date: Tue Jul 29 01:10:26 2008 +0300 Run moc for the high-level Connection class as well TelepathyQt4/Makefile.am | 3 ++- TelepathyQt4/cli-connection.cpp | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) commit ed2e51ddcab31bfe0330bcf9f8df4f0aa50d097f Author: Olli Salli Date: Mon Jul 28 19:45:30 2008 +0300 Include local include files by their real header name, not the public pretty include one TelepathyQt4/cli-connection.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 66f9686f7243baec4649f12b7bd332752977ce7f Author: Olli Salli Date: Mon Jul 28 02:06:47 2008 +0300 Add full property tracking to Connection with automatic inspection of optional interface state when the remote object goes Connected TelepathyQt4/cli-connection.cpp | 179 +++++++++++++++++++++++++++++++++++---- TelepathyQt4/cli-connection.h | 60 ++++++++++++- 2 files changed, 220 insertions(+), 19 deletions(-) commit e75497d71f8e41c17ee3e5f6f8ec0b6b38359eb6 Author: Olli Salli Date: Sun Jul 27 16:44:16 2008 +0300 Use the debug output system in Connection TelepathyQt4/cli-connection.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit 12ed0a198e565ab8bcef6292c1a8d2bf8631bd02 Author: Olli Salli Date: Sun Jul 27 03:31:49 2008 +0300 Add initial connection status tracking to Connection TelepathyQt4/cli-connection.cpp | 112 ++++++++++++++++++++++++++++++++++++--- TelepathyQt4/cli-connection.h | 86 +++++++++++++++++++++++++++++- 2 files changed, 191 insertions(+), 7 deletions(-) commit d65cd0435a51e4c30670d35085670bf9c23960f1 Author: Olli Salli Date: Sat Jul 26 21:35:48 2008 +0300 Add stub Connection high-level proxy TelepathyQt4/cli-connection.cpp | 43 ++++++++++++++++++++++++ TelepathyQt4/cli-connection.h | 71 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 114 insertions(+) commit 8d8d8af4dfe02a2be44a8002b53cdbf8960079d8 Author: Olli Salli Date: Tue Sep 9 21:55:07 2008 +0300 Doxyment OptionalInterfaceFactory TelepathyQt4/cli-optional-interface-factory.h | 33 +++++++++++++++++++++++++ 1 file changed, 33 insertions(+) commit ef703068261ca210be0b28f62eb73d337777575c Author: Olli Salli Date: Tue Sep 9 16:56:56 2008 +0300 Make proxy lifetimes tied to the OptionalInterfaceFactory lifetime TelepathyQt4/cli-optional-interface-factory.cpp | 10 ++++++++++ TelepathyQt4/cli-optional-interface-factory.h | 4 ++-- 2 files changed, 12 insertions(+), 2 deletions(-) commit 6527392577281328839f800c9f296b05d250d09f Author: Olli Salli Date: Tue Sep 9 15:30:46 2008 +0300 Add OptionalInterfaceFactory mixin class TelepathyQt4/Client/OptionalInterfaceFactory | 1 + TelepathyQt4/Makefile.am | 3 + TelepathyQt4/cli-optional-interface-factory.cpp | 70 ++++++++++++++++++ TelepathyQt4/cli-optional-interface-factory.h | 90 +++++++++++++++++++++++ TelepathyQt4/header-compile-test.cpp | 1 + 5 files changed, 165 insertions(+) commit ab5082e9cdbdeb3dfb9f630c4b815dcac4d1d182 Author: Olli Salli Date: Mon Aug 25 23:54:01 2008 +0300 Remove non-relevant comment lifted from tp-glib in examples/extensions/Makefile.am examples/extensions/Makefile.am | 3 --- 1 file changed, 3 deletions(-) commit 578190e359265bc8209d1339c69e15118182ec26 Merge: 25233b5 2602e88 Author: Olli Salli Date: Mon Aug 25 23:07:40 2008 +0300 Merge branch 'debug-output-support' commit 2602e88ce4e60ee22f994aad2d80fdfee0eacbaf Author: Olli Salli Date: Mon Aug 25 23:06:13 2008 +0300 Rename debug.hpp to debug-internal.hpp to avoid confusion with the public debug.h TelepathyQt4/Makefile.am | 2 +- TelepathyQt4/debug-internal.hpp | 90 +++++++++++++++++++++++++++++++++++++++ TelepathyQt4/debug.cpp | 2 +- TelepathyQt4/debug.hpp | 90 --------------------------------------- 4 files changed, 92 insertions(+), 92 deletions(-) commit fe4c2a3dc8b2180a71792395e90bb42a9666ed86 Author: Olli Salli Date: Fri Aug 22 21:42:35 2008 +0300 Add proper .gitignore .gitignore | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) commit ed2fb5a63e47cdd28f2bfb87a26561e65cfd5965 Author: Olli Salli Date: Tue Aug 19 03:55:59 2008 +0300 Add Connection.Interface.Hats example from telepathy-glib to demonstrate extensibility Makefile.am | 2 +- configure.ac | 9 ++ examples/Makefile.am | 1 + examples/extensions/Connection_Interface_Hats.xml | 139 +++++++++++++++++++++ examples/extensions/Makefile.am | 105 ++++++++++++++++ examples/extensions/all.xml | 16 +++ examples/extensions/cli-connection.cpp | 2 + examples/extensions/cli-connection.h | 6 + examples/extensions/connection.xml | 9 ++ examples/extensions/types.cpp | 1 + examples/extensions/types.h | 6 + 11 files changed, 295 insertions(+), 1 deletion(-) commit 8de33dd5931aa489347cb21b02059715305d3e35 Author: Olli Salli Date: Tue Aug 19 03:39:42 2008 +0300 Random find: fix indentation in doxygen for generic list types generated by types-gen tools/qt4-types-gen.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) commit 8ddd4eaecb61c8e0ba2b60be4a3bc8eb04e2cf89 Author: Olli Salli Date: Tue Aug 19 03:07:17 2008 +0300 Use "" instead of <> for the header file include in the proxy body file, so extensions won't need to include their own source tree in their include path TelepathyQt4/Makefile.am | 2 +- tools/qt4-client-gen.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) commit ca6222a43a8854f629a7478a4a88e835e845593e Author: Olli Salli Date: Tue Aug 19 03:06:19 2008 +0300 Make the group argument to client-gen really optional, as extensions won't probably care about doxygen groups tools/qt4-client-gen.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit cde428ee1eb8fad376171f8e4dd968ab03099237 Author: Olli Salli Date: Tue Aug 19 02:48:15 2008 +0300 Make prettyinclude optional in types-gen and client-gen, extensions don't usually care about pretty includes tools/libqt4codegen.py | 7 +++++++ tools/qt4-client-gen.py | 9 ++++----- tools/qt4-types-gen.py | 27 ++++++++++++++------------- 3 files changed, 25 insertions(+), 18 deletions(-) commit 25233b5179a2ae920b88fe2c32b665cf417013d4 Author: Olli Salli Date: Fri Aug 22 21:42:35 2008 +0300 Add proper .gitignore .gitignore | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) commit de9f67dbee72c8d8a81c63946e051b10634889c2 Author: Olli Salli Date: Tue Aug 19 01:55:14 2008 +0300 Replace the types/parentinclude params in {client,types}-gen with a comma-separated extraincludes list to be able to include eg. the parent main interface header and parent types header in extensions TelepathyQt4/Makefile.am | 2 +- tools/qt4-client-gen.py | 21 ++++++++++++++------- tools/qt4-types-gen.py | 14 +++++++------- 3 files changed, 22 insertions(+), 15 deletions(-) commit 8294b40e4f8200e97359cdc38a79052204438a4b Author: Olli Salli Date: Tue Aug 19 01:47:30 2008 +0300 Explicitly qualify the main interfaces specified to client-gen to be able to use mothership classes as the mainiface TelepathyQt4/Makefile.am | 10 +++++----- tools/qt4-client-gen.py | 19 +++++++++---------- 2 files changed, 14 insertions(+), 15 deletions(-) commit feab944a128e149f4311266d19e2f53c7885eaa4 Merge: d85c4d5 139aac2 Author: Olli Salli Date: Wed Aug 13 22:06:33 2008 +0300 Merge branch 'client-proxies' commit 139aac2f663c1d6593b1c12c8bc15e30237e5f11 Author: Olli Salli Date: Wed Aug 13 21:45:36 2008 +0300 Remove redundant explicity from some generated client constructors tools/qt4-client-gen.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit d85c4d53a3887c8705fd5c10a736e0c1e04dce48 Author: Olli Salli Date: Wed Aug 13 21:38:30 2008 +0300 Build the library static for now TelepathyQt4/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 0788f3cf36764becc9738f08bd327c56405e2578 Author: Olli Salli Date: Wed Aug 13 21:38:05 2008 +0300 Fix make dist Makefile.am | 5 +++-- configure.ac | 2 +- spec/Makefile.am | 1 + 3 files changed, 5 insertions(+), 3 deletions(-) commit 16350dc192f5f296e096cd7807f63efb5fea4b46 Author: Olli Salli Date: Sat Aug 9 17:03:16 2008 +0300 Fix HTML in doxygen for the debug system TelepathyQt4/debug.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 26149aca14205e1eceb567c62f65c9a9cadfc89a Author: Olli Salli Date: Fri Aug 8 18:59:42 2008 +0300 Add the debug enable functions to the debug group TelepathyQt4/debug.h | 4 ++++ 1 file changed, 4 insertions(+) commit ef1090f04f7777ca81e348fd92da8e2f5cb7e984 Author: Olli Salli Date: Mon Jul 28 20:38:06 2008 +0300 debug.h shouldn't include config.h, debug.hpp should TelepathyQt4/debug.h | 2 -- TelepathyQt4/debug.hpp | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) commit 2869cecc991ec547b8a512a3ba419153a16e4b07 Author: Olli Salli Date: Sun Aug 10 16:06:40 2008 +0300 Make debugging output controllable by application code at runtime TelepathyQt4/Debug | 1 + TelepathyQt4/Makefile.am | 3 ++ TelepathyQt4/debug.cpp | 88 ++++++++++++++++++++++++++++++++++++++++++++++ TelepathyQt4/debug.h | 66 ++++++++++++++++++++++++++++++++++ TelepathyQt4/debug.hpp | 16 +++++---- 5 files changed, 168 insertions(+), 6 deletions(-) commit bb76d6a5635a354b645310045bd1fcefd4033da4 Author: Olli Salli Date: Sun Jul 27 16:44:16 2008 +0300 Add debug.hpp for library internal debugging output TelepathyQt4/Makefile.am | 1 + TelepathyQt4/debug.hpp | 84 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+) commit 58fb08552f2fe1532ccd5407745bea0235c6af30 Author: Olli Salli Date: Sun Jul 27 14:42:45 2008 +0300 Add license headers to the client proxy implementation files TelepathyQt4/cli-channel.cpp | 21 +++++++++++++++++++++ TelepathyQt4/cli-connection-manager.cpp | 21 +++++++++++++++++++++ TelepathyQt4/cli-connection.cpp | 21 +++++++++++++++++++++ TelepathyQt4/cli-dbus.cpp | 21 +++++++++++++++++++++ TelepathyQt4/cli-media-session-handler.cpp | 21 +++++++++++++++++++++ TelepathyQt4/cli-media-stream-handler.cpp | 21 +++++++++++++++++++++ TelepathyQt4/cli-properties.cpp | 21 +++++++++++++++++++++ 7 files changed, 147 insertions(+) commit 6e2403a6372efa84467f30517d94a26cdfe2d166 Author: Olli Salli Date: Sun Aug 10 19:55:56 2008 +0300 Add constants.h and types.h to the dependencies for the moc-generated files, as they should be TelepathyQt4/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 14bb2166d7b15bb6c960ef4545d2e38c576cf264 Author: Olli Salli Date: Sun Aug 10 19:04:44 2008 +0300 Generalize the _gen/%.moc.hpp Makefile.am rule to %.moc.hpp TelepathyQt4/Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit dded61c226281f5c95b04006bc7be7a0f01b61f8 Author: Olli Salli Date: Tue Jul 29 00:07:13 2008 +0300 Make all method/signal/property names in generated proxies be the same case as the actual DBus names tools/qt4-client-gen.py | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) commit 4f97d0c03d7cb8902adac715aec48d0615d8f451 Author: Olli Salli Date: Mon Jul 28 23:41:19 2008 +0300 Don't qtify signal names in generated proxies; otherwise qt won't know how to associate them with the D-Bus signals tools/qt4-client-gen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 54dd0424291cc2e3a2e239a01dcebbb16340a2a3 Merge: 01577f4 87aa4ef Author: Olli Salli Date: Sun Jul 27 17:15:39 2008 +0300 Merge branch 'master' into client-proxies commit 87aa4ef7f5dfde6e4f69d42b3f32eb0bdbfbf8a6 Author: Olli Salli Date: Sun Jul 27 17:15:18 2008 +0300 More unabbreviations: IFACE->INTERFACE tools/qt4-constants-gen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 01577f45affccc07985856faf72fdb1672493686 Merge: b334ed2 46c5a09 Author: Olli Salli Date: Sun Jul 27 16:59:54 2008 +0300 Merge branch 'master' into client-proxies commit 46c5a09de940ba55fd113a83a951eff235e8d113 Author: Olli Salli Date: Sun Jul 27 16:59:15 2008 +0300 Abbreviations are not Qt style; unabbreviate the string constant names TelepathyQt4/Makefile.am | 2 +- TelepathyQt4/constants.h | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) commit b334ed2494baaa3a10a60cecb9035d06817e58ea Author: Olli Salli Date: Sat Jul 26 19:17:55 2008 +0300 Make the generated proxy constructors explicit tools/qt4-client-gen.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit f36c2c0dd11d6f7aa9d58a3bd70c42dc7f679022 Author: Olli Salli Date: Sat Jul 26 01:11:06 2008 +0300 Sync with my latest tp-spec branch spec/Channel_Type_Streamed_Media.xml | 2 +- spec/Channel_Type_Text.xml | 2 +- spec/Connection_Interface_Contacts.xml | 2 +- spec/Connection_Interface_Presence.xml | 2 +- spec/Connection_Manager.xml | 6 +++--- spec/Media_Session_Handler.xml | 3 ++- spec/Media_Stream_Handler.xml | 4 ++-- spec/Properties_Interface.xml | 4 ++-- 8 files changed, 13 insertions(+), 12 deletions(-) commit 085f4d40d9be0f96a00d515a5abcece428ac2537 Author: Olli Salli Date: Sat Jul 26 16:49:18 2008 +0300 Fix generating the property setter name in client-gen tools/qt4-client-gen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 9a5761bc4322fb97a8d63bad19a65a7811b662f7 Author: Olli Salli Date: Sat Jul 26 16:39:05 2008 +0300 Revert "Prefix the 1:1 bound properties with 'dbus' to make way for cached properties" This reverts commit d3b14ff71e84764bec2406cd7cf39374a0a33bb8. tools/qt4-client-gen.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) commit d393375e01541b63c502c368f0e67cc7380c1f32 Author: Olli Salli Date: Sat Jul 26 15:26:09 2008 +0300 Explicitly qualify custom types used in generated proxies TelepathyQt4/Makefile.am | 1 + tools/libqt4codegen.py | 29 +++++++++++++++++------------ tools/qt4-client-gen.py | 12 +++++++----- tools/qt4-types-gen.py | 4 ++-- 4 files changed, 27 insertions(+), 19 deletions(-) commit d3b14ff71e84764bec2406cd7cf39374a0a33bb8 Author: Olli Salli Date: Sat Jul 26 13:27:53 2008 +0300 Prefix the 1:1 bound properties with 'dbus' to make way for cached properties tools/qt4-client-gen.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) commit 48da80ea840e84c04c46e86632938eec8174b713 Author: Olli Salli Date: Sat Jul 26 01:11:06 2008 +0300 Sync with my latest tp-spec branch spec/Channel_Type_Streamed_Media.xml | 2 +- spec/Channel_Type_Text.xml | 2 +- spec/Connection_Interface_Contacts.xml | 2 +- spec/Connection_Interface_Presence.xml | 2 +- spec/Connection_Manager.xml | 6 +++--- spec/Media_Session_Handler.xml | 3 ++- spec/Media_Stream_Handler.xml | 4 ++-- spec/Properties_Interface.xml | 4 ++-- 8 files changed, 13 insertions(+), 12 deletions(-) commit 8012e9151917d40defcac3ad86af6d729cbc5c77 Author: Olli Salli Date: Sat Jul 26 01:10:17 2008 +0300 Add doxygen to 1:1 proxies TelepathyQt4/Makefile.am | 12 +++- TelepathyQt4/cli-channel.h | 19 ++++++ TelepathyQt4/cli-connection-manager.h | 18 ++++++ TelepathyQt4/cli-connection.h | 19 ++++++ TelepathyQt4/cli-dbus.h | 20 ++++++ TelepathyQt4/cli-media-session-handler.h | 18 ++++++ TelepathyQt4/cli-media-stream-handler.h | 18 ++++++ TelepathyQt4/cli-properties.h | 19 ++++++ tools/qt4-client-gen.py | 101 +++++++++++++++++++++++++++++- 9 files changed, 239 insertions(+), 5 deletions(-) commit dac4bc6f552dee60ae2b4f1c162ffd19477b1e5e Author: Olli Salli Date: Fri Jul 25 23:45:47 2008 +0300 Use an utf-8 codec for writing in client-gen tools/qt4-client-gen.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit 9713303f72dcff520f29072c16ebcdfa10a35624 Author: Olli Salli Date: Fri Jul 25 23:43:17 2008 +0300 Add extract_arg_or_member_info to libqt4codegen, use it it client-gen and types-gen tools/libqt4codegen.py | 15 +++++++++++++++ tools/qt4-client-gen.py | 34 +++++++++------------------------- tools/qt4-types-gen.py | 20 +++----------------- 3 files changed, 27 insertions(+), 42 deletions(-) commit f24ce3a3e6c71231f9315d9aef6d70c820b5259c Author: Olli Salli Date: Fri Jul 25 04:00:01 2008 +0300 Add signals to generated proxies tools/qt4-client-gen.py | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) commit 4c78c30ce9c3441ebacf57a546c06a50cda311c8 Author: Olli Salli Date: Fri Jul 25 03:50:16 2008 +0300 Make get_qt4_name work for more element types and make qt4_identifier_escape do nicer one-way escaping tools/libqt4codegen.py | 31 ++++++++++++++++++++++--------- tools/qt4-client-gen.py | 5 ++--- tools/qt4-types-gen.py | 7 ++----- 3 files changed, 26 insertions(+), 17 deletions(-) commit 62c86afec5447ae20f562fcc3e6b968d4982ec5b Author: Olli Salli Date: Fri Jul 25 03:27:27 2008 +0300 Rename cxx_identifier_escape to qt4_identifier_escape tools/libqt4codegen.py | 199 ++++++++++++++++++++++++----------------------- tools/qt4-client-gen.py | 4 +- tools/qt4-types-gen.py | 4 +- 3 files changed, 104 insertions(+), 103 deletions(-) commit 8a8fa7ed1ac033ef6af45a343865abca2b02b223 Author: Olli Salli Date: Fri Jul 25 03:19:13 2008 +0300 Add the new SimplePresence interface to the set of generated interfaces TelepathyQt4/connection.xml | 1 + 1 file changed, 1 insertion(+) commit b6a2316248ea60940c00b6b4aa49c55743f77a50 Author: Olli Salli Date: Fri Jul 25 03:07:00 2008 +0300 Update to the latest darcs telepathy-spec (my codegen branch) spec/Account.xml | 54 ++-- spec/Account_Interface_Avatar.xml | 2 +- spec/Account_Manager.xml | 13 +- spec/Channel.xml | 13 +- spec/Channel_Future.xml | 8 +- spec/Channel_Handler.xml | 2 +- spec/Channel_Interface_Call_State.xml | 8 +- spec/Channel_Interface_Chat_State.xml | 10 +- spec/Channel_Interface_DTMF.xml | 10 +- spec/Channel_Interface_Delivery_Reporting.xml | 10 +- spec/Channel_Interface_Group.xml | 80 +++--- spec/Channel_Interface_Hold.xml | 12 +- spec/Channel_Interface_Media_Signalling.xml | 5 +- spec/Channel_Interface_Messages.xml | 26 +- spec/Channel_Interface_Password.xml | 13 +- spec/Channel_Interface_Transfer.xml | 4 +- spec/Channel_Type_Contact_Search.xml | 18 +- spec/Channel_Type_Room_List.xml | 14 +- spec/Channel_Type_Streamed_Media.xml | 55 ++-- spec/Channel_Type_Text.xml | 48 ++-- spec/Channel_Type_Tubes.xml | 107 +++---- spec/Connection.xml | 115 +++++--- spec/Connection_Interface_Aliasing.xml | 14 +- spec/Connection_Interface_Avatars.xml | 44 +-- spec/Connection_Interface_Capabilities.xml | 71 +++-- spec/Connection_Interface_Contact_Info.xml | 11 +- spec/Connection_Interface_Contacts.xml | 225 +++++++++++++++ spec/Connection_Interface_Forwarding.xml | 12 +- spec/Connection_Interface_Presence.xml | 92 ++++-- spec/Connection_Interface_Privacy.xml | 13 +- spec/Connection_Interface_Renaming.xml | 8 +- spec/Connection_Interface_Simple_Presence.xml | 382 +++++++++++++++++++++++++ spec/Connection_Manager.xml | 80 ++++-- spec/Media_Session_Handler.xml | 14 +- spec/Media_Stream_Handler.xml | 89 +++--- spec/Properties_Interface.xml | 19 +- spec/all.xml | 4 +- spec/generic-types.xml | 35 ++- 38 files changed, 1271 insertions(+), 469 deletions(-) commit 50a5caa7974a0f6baa4f442f2408b64b1001782c Author: Olli Salli Date: Fri Jul 25 03:07:00 2008 +0300 Update to the latest darcs telepathy-spec (my codegen branch) spec/Account.xml | 54 ++-- spec/Account_Interface_Avatar.xml | 2 +- spec/Account_Manager.xml | 13 +- spec/Channel.xml | 13 +- spec/Channel_Future.xml | 8 +- spec/Channel_Handler.xml | 2 +- spec/Channel_Interface_Call_State.xml | 8 +- spec/Channel_Interface_Chat_State.xml | 10 +- spec/Channel_Interface_DTMF.xml | 10 +- spec/Channel_Interface_Delivery_Reporting.xml | 10 +- spec/Channel_Interface_Group.xml | 80 +++--- spec/Channel_Interface_Hold.xml | 12 +- spec/Channel_Interface_Media_Signalling.xml | 5 +- spec/Channel_Interface_Messages.xml | 26 +- spec/Channel_Interface_Password.xml | 13 +- spec/Channel_Interface_Transfer.xml | 4 +- spec/Channel_Type_Contact_Search.xml | 18 +- spec/Channel_Type_Room_List.xml | 14 +- spec/Channel_Type_Streamed_Media.xml | 55 ++-- spec/Channel_Type_Text.xml | 48 ++-- spec/Channel_Type_Tubes.xml | 107 +++---- spec/Connection.xml | 115 +++++--- spec/Connection_Interface_Aliasing.xml | 14 +- spec/Connection_Interface_Avatars.xml | 44 +-- spec/Connection_Interface_Capabilities.xml | 71 +++-- spec/Connection_Interface_Contact_Info.xml | 11 +- spec/Connection_Interface_Contacts.xml | 225 +++++++++++++++ spec/Connection_Interface_Forwarding.xml | 12 +- spec/Connection_Interface_Presence.xml | 92 ++++-- spec/Connection_Interface_Privacy.xml | 13 +- spec/Connection_Interface_Renaming.xml | 8 +- spec/Connection_Interface_Simple_Presence.xml | 382 +++++++++++++++++++++++++ spec/Connection_Manager.xml | 80 ++++-- spec/Media_Session_Handler.xml | 14 +- spec/Media_Stream_Handler.xml | 89 +++--- spec/Properties_Interface.xml | 19 +- spec/all.xml | 4 +- spec/generic-types.xml | 35 ++- 38 files changed, 1271 insertions(+), 469 deletions(-) commit bf578f28cdaa98567cddce4d88d4067e1b14292a Author: Olli Salli Date: Fri Jul 25 02:14:37 2008 +0300 Add methods generation to client-gen tools/qt4-client-gen.py | 61 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) commit 617b897057774f2672a0064ba927e61e75708994 Author: Olli Salli Date: Fri Jul 25 02:08:42 2008 +0300 Add get_qt4_name to libqt4codegen and use it for the property name in client-gen tools/libqt4codegen.py | 11 +++++++++++ tools/qt4-client-gen.py | 16 ++++++++-------- 2 files changed, 19 insertions(+), 8 deletions(-) commit eeac6b82ca6e000a5f3e3f0fd26deb27d0152bfa Author: Olli Salli Date: Fri Jul 25 02:06:07 2008 +0300 Properly do moc for the generated proxies TelepathyQt4/Makefile.am | 28 +++++++- TelepathyQt4/cli-channel.cpp | 2 + TelepathyQt4/cli-connection-manager.cpp | 2 + TelepathyQt4/cli-connection.cpp | 2 + TelepathyQt4/cli-dbus.cpp | 2 + TelepathyQt4/cli-media-session-handler.cpp | 2 + TelepathyQt4/cli-media-stream-handler.cpp | 2 + TelepathyQt4/cli-properties.cpp | 2 + tools/qt4-client-gen.py | 98 +++++++++++++++++++--------- 9 files changed, 108 insertions(+), 32 deletions(-) commit 3723928052c74a660c977dde2181416b979b25fc Author: Olli Salli Date: Fri Jul 25 01:17:24 2008 +0300 Install the client pretty include headers in the correct directory TelepathyQt4/Makefile.am | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) commit 65292ecae0741cd9c7ecff81835ade9c22ecd1d3 Merge: df8250a bb77db9 Author: Olli Salli Date: Thu Jul 24 15:01:39 2008 +0300 Merge branch 'client-proxies' of dhansak:public_html/git/telepathy-qt4 into client-proxies commit bb77db99751cb81e0ba5ad70a2ff1e9c187bb70f Author: Olli Salli Date: Fri Jul 18 14:24:57 2008 +0300 Add D-Bus properties to generated proxies tools/qt4-client-gen.py | 50 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) commit 92e8020febd9df1af7e73b1dacc4d083e41a61c3 Author: Olli Salli Date: Fri Jul 18 14:21:45 2008 +0300 Add cxx_identifier_escape to libqt4codegen and use it for struct members in types-gen tools/libqt4codegen.py | 100 +++++++++++++++++++++++++++++++++++++++++++++++- tools/qt4-types-gen.py | 4 +- 2 files changed, 101 insertions(+), 3 deletions(-) commit 09862fd60f0c87d4de5780bf0edac777c203472d Author: Olli Salli Date: Fri Jul 18 02:32:48 2008 +0300 Move gather_externals and gather_custom_lists to libqt4codegen tools/libqt4codegen.py | 26 ++++++++++++++++++++++++++ tools/qt4-types-gen.py | 26 +++----------------------- 2 files changed, 29 insertions(+), 23 deletions(-) commit 6ea851ecae36790dd9f4fe6a063441801befb3b6 Author: Olli Salli Date: Fri Jul 18 02:03:54 2008 +0300 Make the --mainiface code to use QDBusAbstractInterface as a possible main interface if --mainiface is not specified at all, which is useful for things like the DBus interfaces and Properties TelepathyQt4/Makefile.am | 6 ++++-- tools/qt4-client-gen.py | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) commit 1f9d3623a6d6193c5ccc7afcef4b33eb00e177e7 Author: Olli Salli Date: Fri Jul 18 01:47:49 2008 +0300 Add --mainiface to client-gen for specifying a 'main' interface in a group, which can be given to the others as a constructor param to reuse the same remote object easily. TelepathyQt4/Makefile.am | 13 ++++++++---- tools/qt4-client-gen.py | 49 ++++++++++++++++++++++++++++++++++++---------- 2 files changed, 48 insertions(+), 14 deletions(-) commit df526c77b4f8dc0a70e86994753885f1e3184749 Author: Olli Salli Date: Thu Jul 17 22:20:29 2008 +0300 Add common constructors to the proxies tools/qt4-client-gen.py | 46 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 3 deletions(-) commit 9240b16b7310027dd420d3b923844b3202f69f36 Author: Olli Salli Date: Thu Jul 17 22:02:28 2008 +0300 Add empty test .cpp to verify header validness TelepathyQt4/Makefile.am | 3 ++- TelepathyQt4/header-compile-test.cpp | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) commit df8250a4a2d954e0069f782bdae580a23e9e0e58 Author: Olli Salli Date: Thu Jul 17 22:02:28 2008 +0300 Add empty test .cpp to verify header validness TelepathyQt4/Makefile.am | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit e148ece2dd17b1ced0303416339748958196f5c7 Author: Olli Salli Date: Thu Jul 17 22:00:53 2008 +0300 Remove -Wshadow, which terribly restricts C++ configure.ac | 1 - 1 file changed, 1 deletion(-) commit 7c7025a8e64ace67884e25794945afd656c33b4f Merge: fb23aaf e562d7c Author: Olli Salli Date: Thu Jul 17 20:51:05 2008 +0300 Merge branch 'master' into client-proxies commit e562d7cdac8cd00b1ec7c9a7392ec1fc7d3edbed Author: Olli Salli Date: Thu Jul 17 20:33:30 2008 +0300 Fix constants-gen to not close the namespace twice tools/qt4-constants-gen.py | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) commit fb23aafc59eadb0c45f5659fc2c36d83bb9d62c0 Merge: 7afffed 77e8739 Author: Olli Salli Date: Wed Jul 16 20:47:35 2008 +0300 Merge branch 'master' into client-proxies commit 77e8739adbc4cf8df1c3b614eea64bdf04c073a9 Author: Olli Salli Date: Wed Jul 16 20:46:03 2008 +0300 Require python 2.5 configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 7afffede210be750d5cc4e8152089a4c717c2373 Author: Olli Salli Date: Wed Jul 16 20:43:45 2008 +0300 Output namespace in client-gen tools/qt4-client-gen.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) commit 1d26e8b3107828940f5603c7520b2c19a579a2a8 Author: Olli Salli Date: Wed Jul 16 20:41:05 2008 +0300 Fix proxy generation Makefile rule dependencies TelepathyQt4/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 719f0230b789d268b350a62ebdc82c22301ad0b3 Merge: 4d9dd77 1bf56cd Author: Olli Salli Date: Wed Jul 16 19:28:03 2008 +0300 Merge branch 'master' into client-proxies commit 1bf56cd5f0041a02d68466904e28e71a685377bc Author: Olli Salli Date: Wed Jul 16 19:27:30 2008 +0300 Add optional --parent-include param to types-gen tools/qt4-types-gen.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) commit 3c4392f27ef51b338ab7fc9bea6f0a49c878bab5 Author: Olli Salli Date: Wed Jul 16 19:21:39 2008 +0300 Make types.cpp include the .hpp, not the old .cpp TelepathyQt4/types.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 4d9dd7721919cf4d2c84a8b0fd2fef7c4bb5099e Author: Olli Salli Date: Wed Jul 16 19:10:44 2008 +0300 Add license header to qt4-client-gen.py tools/qt4-client-gen.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) commit b8c35efa2636fbd68cb64cee32b96a0a8b078540 Author: Olli Salli Date: Wed Jul 16 19:07:53 2008 +0300 Add public pretty include headers for proxies TelepathyQt4/Client/Channel | 1 + TelepathyQt4/Client/Connection | 1 + TelepathyQt4/Client/ConnectionManager | 1 + TelepathyQt4/Client/DBus | 1 + TelepathyQt4/Client/MediaSessionHandler | 1 + TelepathyQt4/Client/MediaStreamHandler | 1 + TelepathyQt4/Client/Properties | 1 + TelepathyQt4/Makefile.am | 14 ++++++++++++++ TelepathyQt4/cli-channel.h | 27 +++++++++++++++++++++++++++ TelepathyQt4/cli-connection-manager.h | 27 +++++++++++++++++++++++++++ TelepathyQt4/cli-connection.h | 27 +++++++++++++++++++++++++++ TelepathyQt4/cli-dbus.h | 27 +++++++++++++++++++++++++++ TelepathyQt4/cli-media-session-handler.h | 27 +++++++++++++++++++++++++++ TelepathyQt4/cli-media-stream-handler.h | 27 +++++++++++++++++++++++++++ TelepathyQt4/cli-properties.h | 27 +++++++++++++++++++++++++++ 15 files changed, 210 insertions(+) commit d6593753c9d805beef4d6647730532363da99676 Author: Olli Salli Date: Wed Jul 16 17:50:53 2008 +0300 EXTRA_DIST updated with the generic XML changes TelepathyQt4/Makefile.am | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) commit cabee7796f52a15845425b180479a15027c8d366 Author: Olli Salli Date: Wed Jul 16 17:49:16 2008 +0300 Client proxy build system with stub proxies TelepathyQt4/Makefile.am | 41 +++++++++++++++++++++++++++++++- tools/Makefile.am | 11 +++++---- tools/qt4-client-gen.py | 58 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 105 insertions(+), 5 deletions(-) commit b7f8f7722cbbf7549dfd0540176fe4a357c0679b Author: Olli Salli Date: Wed Jul 16 16:15:42 2008 +0300 Remove DBus_ prefix from the dbus interfaces TelepathyQt4/dbus-introspectable.xml | 2 +- TelepathyQt4/dbus-peer.xml | 2 +- TelepathyQt4/dbus-properties.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) commit 57c066f27dde99b70589daa0629210b89e29a57b Merge: ed01d9b 733f88f Author: Olli Salli Date: Wed Jul 16 16:00:26 2008 +0300 Merge branch 'master' into client-proxies commit ed01d9be5cc9a1d3e87bcc735431191f2216a801 Author: Olli Salli Date: Wed Jul 16 15:59:54 2008 +0300 Rearrange the generic interface xmls TelepathyQt4/dbus-daemon.xml | 80 ------------------------------------ TelepathyQt4/dbus.xml | 11 +++++ TelepathyQt4/generic.xml | 13 ------ TelepathyQt4/properties.xml | 9 ++++ TelepathyQt4/stable-interfaces.xml | 4 +- 5 files changed, 22 insertions(+), 95 deletions(-) commit 733f88fad458288dc49cf388641b23efe206a2d4 Author: Olli Salli Date: Wed Jul 16 12:42:11 2008 +0300 Add license headers to qt4-{constants,types}-gen tools/qt4-constants-gen.py | 17 +++++++++++++++++ tools/qt4-types-gen.py | 17 +++++++++++++++++ 2 files changed, 34 insertions(+) commit 5ed61333945e34297b240b8b318db187ed0ea1bb Author: Olli Salli Date: Mon Jul 14 18:54:34 2008 +0300 Add interface, error and utility string constants. TelepathyQt4/Makefile.am | 1 + TelepathyQt4/constants.h | 45 +++++++++++++++++++++++ tools/qt4-constants-gen.py | 87 ++++++++++++++++++++++++++++++++++++-------- tools/qt4-types-gen.py | 11 +++--- 4 files changed, 123 insertions(+), 21 deletions(-) commit 8289ada6f75e86c619f81195eb46e8efe1d7ad3c Author: Olli Salli Date: Fri Jul 11 15:26:19 2008 +0300 Version 0.0.9999.1, 0.1.0.0 will be the first rel configure.ac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit c71e1576b255696c843a50621839ec987179de34 Author: Olli Salli Date: Fri Jul 11 14:56:42 2008 +0300 Change the NUM_S constants to const ints tools/qt4-constants-gen.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 04f309a74aa2904cc93092aeba9d16a8e5c3d5b6 Author: Olli Salli Date: Fri Jul 11 14:39:54 2008 +0300 Remove extra ending newlines from files TelepathyQt4/constants.h | 1 - TelepathyQt4/types.h | 1 - 2 files changed, 2 deletions(-) commit d9475f0ae21794b7b9d0f94ad3bf356e5d73c2dd Author: Olli Salli Date: Fri Jul 11 14:17:13 2008 +0300 Cleaner generated code, saner scripts TelepathyQt4/Makefile.am | 28 +++++++++------ TelepathyQt4/types.cpp | 2 +- configure.ac | 2 +- doxygen.cfg | 10 +++--- tools/libqt4codegen.py | 15 +++----- tools/qt4-constants-gen.py | 17 +++++++--- tools/qt4-types-gen.py | 81 ++++++++++++++++++++++++++++++++------------ 7 files changed, 102 insertions(+), 53 deletions(-) commit 190ecb3d7cd80732d1cd8dc484184a8cfe104707 Author: Olli Salli Date: Fri Jul 11 01:29:49 2008 +0300 Initial commit with types and constants generated. AUTHORS | 1 + COPYING | 510 +++++++++ ChangeLog | 2 + INSTALL | 237 +++++ Makefile.am | 24 + TelepathyQt4/Constants | 1 + TelepathyQt4/Makefile.am | 106 ++ TelepathyQt4/TelepathyQt4.pc.in | 11 + TelepathyQt4/Types | 1 + TelepathyQt4/channel.xml | 23 + TelepathyQt4/connection-manager.xml | 9 + TelepathyQt4/connection.xml | 14 + TelepathyQt4/constants.h | 28 + TelepathyQt4/dbus-daemon.xml | 80 ++ TelepathyQt4/dbus-introspectable.xml | 16 + TelepathyQt4/dbus-peer.xml | 19 + TelepathyQt4/dbus-properties.xml | 29 + TelepathyQt4/generic.xml | 13 + TelepathyQt4/media-session-handler.xml | 9 + TelepathyQt4/media-stream-handler.xml | 9 + TelepathyQt4/stable-interfaces.xml | 19 + TelepathyQt4/types.cpp | 22 + TelepathyQt4/types.h | 28 + autogen.sh | 31 + configure.ac | 169 +++ doxygen.am | 186 ++++ doxygen.cfg | 1417 +++++++++++++++++++++++++ m4/Makefile.am | 4 + m4/as-compiler-flag.m4 | 33 + m4/compiler.m4 | 71 ++ m4/doxygen.m4 | 312 ++++++ m4/linker.m4 | 83 ++ spec/Account.xml | 475 +++++++++ spec/Account_Interface_Avatar.xml | 65 ++ spec/Account_Manager.xml | 166 +++ spec/Channel.xml | 238 +++++ spec/Channel_Future.xml | 122 +++ spec/Channel_Handler.xml | 73 ++ spec/Channel_Interface_Call_Merging.xml | 80 ++ spec/Channel_Interface_Call_State.xml | 108 ++ spec/Channel_Interface_Chat_State.xml | 100 ++ spec/Channel_Interface_DTMF.xml | 137 +++ spec/Channel_Interface_Delivery_Reporting.xml | 442 ++++++++ spec/Channel_Interface_Group.xml | 777 ++++++++++++++ spec/Channel_Interface_HTML.xml | 86 ++ spec/Channel_Interface_Hold.xml | 217 ++++ spec/Channel_Interface_Media_Signalling.xml | 117 ++ spec/Channel_Interface_Messages.xml | 634 +++++++++++ spec/Channel_Interface_Password.xml | 98 ++ spec/Channel_Interface_Transfer.xml | 53 + spec/Channel_Type_Contact_List.xml | 71 ++ spec/Channel_Type_Contact_Search.xml | 150 +++ spec/Channel_Type_Room_List.xml | 127 +++ spec/Channel_Type_Streamed_Media.xml | 377 +++++++ spec/Channel_Type_Text.xml | 467 ++++++++ spec/Channel_Type_Tubes.xml | 743 +++++++++++++ spec/Connection.xml | 650 ++++++++++++ spec/Connection_Interface_Aliasing.xml | 144 +++ spec/Connection_Interface_Avatars.xml | 294 +++++ spec/Connection_Interface_Capabilities.xml | 206 ++++ spec/Connection_Interface_Contact_Info.xml | 83 ++ spec/Connection_Interface_Forwarding.xml | 76 ++ spec/Connection_Interface_Presence.xml | 357 +++++++ spec/Connection_Interface_Privacy.xml | 93 ++ spec/Connection_Interface_Renaming.xml | 94 ++ spec/Connection_Manager.xml | 412 +++++++ spec/Makefile.am | 41 + spec/Media_Session_Handler.xml | 75 ++ spec/Media_Stream_Handler.xml | 379 +++++++ spec/Properties_Interface.xml | 191 ++++ spec/all.xml | 79 ++ spec/errors.xml | 80 ++ spec/generic-types.xml | 43 + tools/Makefile.am | 29 + tools/check-coding-style.mk | 12 + tools/check-misc.sh | 13 + tools/check-whitespace.sh | 17 + tools/libqt4codegen.py | 164 +++ tools/libtpcodegen.py | 231 ++++ tools/qt4-constants-gen.py | 162 +++ tools/qt4-types-gen.py | 384 +++++++ tools/xincludator.py | 36 + 82 files changed, 13785 insertions(+) telepathy-qt-0.9.3/cmake/0000755000175200001440000000000012000056607017474 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/cmake/modules/0000755000175200001440000000000012000056607021144 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/cmake/modules/FindQt5.cmake0000644000175200001440000001553512000056607023431 0ustar00collabora-develusers00000000000000# - Find Qt5 # This module can be used to find Qt5. # The most important issues are that Qt5 pkgconfig files are installed with PKG_CONFIG_PATH properly # set, and that Qt5 qmake is available via the system path. # This module defines a number of key variables and macros. # # Below is a detailed list of variables that FindQt5.cmake sets. # QT_FOUND If false, don't try to use Qt. # QT5_FOUND If false, don't try to use Qt5. # # QT_VERSION_MAJOR The major version of Qt found. # QT_VERSION_MINOR The minor version of Qt found. # QT_VERSION_PATCH The patch version of Qt found. # # QT_BINARY_DIR Path to "bin" of Qt4 # QT_DOC_DIR Path to "doc" of Qt4 # # QT_QTCORE_FOUND True if QtCore was found. # QT_QTGUI_FOUND True if QtGui was found. # QT_QTDBUS_FOUND True if QtDBus was found. # QT_QTNETWORK_FOUND True if QtNetwork was found. # QT_QTTEST_FOUND True if QtTest was found. # QT_QTWIDGETS_FOUND True if QtWidgets was found. # QT_QTXML_FOUND True if QtXml was found. # # QT_INCLUDES List of paths to all include directories of Qt5. # QT_INCLUDE_DIR Path to "include" of Qt4 # QT_QTCORE_INCLUDE_DIR Path to "include/QtCore" # QT_QTDBUS_INCLUDE_DIR Path to "include/QtDBus" # QT_QTGUI_INCLUDE_DIR Path to "include/QtGui" # QT_QTNETWORK_INCLUDE_DIR Path to "include/QtNetwork" # QT_QTTEST_INCLUDE_DIR Path to "include/QtTest" # QT_QTWIDGETS_INCLUDE_DIR Path to "include/QtWidgets" # QT_QTXML_INCLUDE_DIR Path to "include/QtXml" # # QT_LIBRARIES List of paths to all libraries of Qt5. # QT_LIBRARY_DIR Path to "lib" of Qt4 # QT_QTCORE_LIBRARY The QtCore library # QT_QTDBUS_LIBRARY The QtDBus library # QT_QTGUI_LIBRARY The QtGui library # QT_QTNETWORK_LIBRARY The QtNetwork library # QT_QTTEST_LIBRARY The QtTest library # QT_QTWIDGETS_LIBRARY The QtWidgets library # QT_QTXML_LIBRARY The QtXml library # # also defined, but NOT for general use are # QT_MOC_EXECUTABLE Where to find the moc tool # QT_CONFIG_FLAGS Flags used when building Qt # Copyright (C) 2001-2009 Kitware, Inc. # Copyright (C) 2011 Collabora Ltd. # Copyright (C) 2011 Nokia Corporation # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. IF(QT_INCLUDES AND QT_LIBRARIES AND QT_MAJOR_VERSION MATCHES 5) # Already in cache, be silent SET(QT_FOUND TRUE) SET(QT5_FOUND TRUE) RETURN() ENDIF(QT_INCLUDES AND QT_LIBRARIES AND QT_MAJOR_VERSION MATCHES 5) IF(NOT QT_QMAKE_EXECUTABLE) FIND_PROGRAM(QT_QMAKE_EXECUTABLE_FINDQT NAMES qmake qmake5 qmake-qt5 PATHS "${QT_SEARCH_PATH}/bin" "$ENV{QTDIR}/bin") SET(QT_QMAKE_EXECUTABLE ${QT_QMAKE_EXECUTABLE_FINDQT} CACHE PATH "Qt qmake program.") ENDIF(NOT QT_QMAKE_EXECUTABLE) EXEC_PROGRAM(${QT_QMAKE_EXECUTABLE} ARGS "-query QT_VERSION" OUTPUT_VARIABLE QTVERSION) IF(NOT QTVERSION MATCHES "5.*") SET(QT_FOUND FALSE) SET(QT5_FOUND FALSE) IF(Qt5_FIND_REQUIRED) MESSAGE(FATAL_ERROR "CMake was unable to find Qt5, put qmake in your path or set QTDIR/QT_QMAKE_EXECUTABLE.") ENDIF(Qt5_FIND_REQUIRED) RETURN() ENDIF(NOT QTVERSION MATCHES "5.*") FIND_PACKAGE(PkgConfig REQUIRED) IF(NOT Qt5_FIND_COMPONENTS) SET(_COMPONENTS QtCore QtDBus QtGui QtNetwork QtTest QtWidgets QtXml) ELSE(NOT Qt5_FIND_COMPONENTS) SET(_COMPONENTS ${Qt5_FIND_COMPONENTS}) ENDIF(NOT Qt5_FIND_COMPONENTS) FOREACH(_COMPONENT ${_COMPONENTS}) STRING(TOUPPER ${_COMPONENT} _COMPONENT_UPPER) IF(NOT QT_${_COMPONENT_UPPER}_FOUND) IF(Qt5_FIND_REQUIRED) PKG_CHECK_MODULES(PC_${_COMPONENT} REQUIRED ${_COMPONENT}>=${QT_MIN_VERSION}) ELSE(Qt5_FIND_REQUIRED) PKG_CHECK_MODULES(PC_${_COMPONENT} QUIET ${_COMPONENT}>=${QT_MIN_VERSION}) ENDIF(Qt5_FIND_REQUIRED) SET(QT_${_COMPONENT_UPPER}_INCLUDE_DIR ${PC_${_COMPONENT}_INCLUDE_DIRS}) FIND_LIBRARY(QT_${_COMPONENT_UPPER}_LIBRARY NAMES ${_COMPONENT} HINTS ${PC_${_COMPONENT}_LIBDIR}) SET(QT_${_COMPONENT_UPPER}_FOUND ${PC_${_COMPONENT}_FOUND}) #MESSAGE(STATUS "COMPONENT ${_COMPONENT_UPPER}:") #MESSAGE(STATUS " QT_${_COMPONENT_UPPER}_LIBRARY: ${QT_${_COMPONENT_UPPER}_LIBRARY}") #MESSAGE(STATUS " QT_${_COMPONENT_UPPER}_INCLUDE_DIR: ${QT_${_COMPONENT_UPPER}_INCLUDE_DIR}") #MESSAGE(STATUS " QT_${_COMPONENT_UPPER}_FOUND: ${QT_${_COMPONENT_UPPER}_FOUND}") SET(QT_INCLUDES ${QT_INCLUDES} ${QT_${_COMPONENT_UPPER}_INCLUDE_DIR}) SET(QT_LIBRARIES ${QT_LIBRARIES} ${QT_${_COMPONENT_UPPER}_INCLUDE_DIR}) MARK_AS_ADVANCED(QT_${_COMPONENT_UPPER}_LIBRARY QT_${_COMPONENT_UPPER}_INCLUDE_DIR) ENDIF(NOT QT_${_COMPONENT_UPPER}_FOUND) ENDFOREACH(_COMPONENT) #MESSAGE(STATUS "QT_LIBRARIES: ${QT_LIBRARIES}") #MESSAGE(STATUS "QT_INCLUDES: ${QT_INCLUDES}") STRING(REGEX REPLACE "^([0-9]+)\\.[0-9]+\\.[0-9]+.*" "\\1" QT_VERSION_MAJOR "${QTVERSION}") STRING(REGEX REPLACE "^[0-9]+\\.([0-9])+\\.[0-9]+.*" "\\1" QT_VERSION_MINOR "${QTVERSION}") STRING(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" QT_VERSION_PATCH "${QTVERSION}") IF(NOT QT_INCLUDE_DIR) EXEC_PROGRAM(${QT_QMAKE_EXECUTABLE} ARGS "-query QT_INSTALL_HEADERS" OUTPUT_VARIABLE QTHEADERS) SET(QT_INCLUDE_DIR ${QTHEADERS} CACHE INTERNAL "" FORCE) ENDIF(NOT QT_INCLUDE_DIR) IF(NOT QT_LIBRARY_DIR) EXEC_PROGRAM(${QT_QMAKE_EXECUTABLE} ARGS "-query QT_INSTALL_LIBS" OUTPUT_VARIABLE QTLIBS) SET(QT_LIBRARY_DIR ${QTLIBS} CACHE INTERNAL "" FORCE) ENDIF(NOT QT_LIBRARY_DIR) IF(NOT QT_BINARY_DIR) EXEC_PROGRAM(${QT_QMAKE_EXECUTABLE} ARGS "-query QT_INSTALL_BINS" OUTPUT_VARIABLE QTBINS) SET(QT_BINARY_DIR ${QTBINS} CACHE INTERNAL "" FORCE) ENDIF(NOT QT_BINARY_DIR) IF(NOT QT_DOC_DIR) EXEC_PROGRAM(${QT_QMAKE_EXECUTABLE} ARGS "-query QT_INSTALL_DOCS" OUTPUT_VARIABLE QTDOCS) SET(QT_DOC_DIR ${QTDOCS} CACHE INTERNAL "" FORCE) ENDIF(NOT QT_DOC_DIR) IF(NOT QT_MOC_EXECUTABLE) FIND_PROGRAM(QT_MOC_EXECUTABLE NAMES moc moc5 moc-qt5 PATHS ${QT_BINARY_DIR} NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH) ENDIF(NOT QT_MOC_EXECUTABLE) MARK_AS_ADVANCED(QT_INCLUDES QT_INCLUDE_DIR QT_LIBRARIES QT_LIBRARY_DIR QT_BINARY_DIR QT_DOC_DIR QT_QMAKE_EXECUTABLE_FINDQT QT_QMAKE_EXECUTABLE QT_MOC_EXECUTABLE) # Invokes pkgconfig, cleans up the result and sets variables EXECUTE_PROCESS(COMMAND ${PKG_CONFIG_EXECUTABLE} --variable qt_config QtCore OUTPUT_VARIABLE _pkgconfig_flags RESULT_VARIABLE _pkgconfig_failed) STRING(REPLACE " " ";" QT_CONFIG_FLAGS "${_pkgconfig_flags}") INCLUDE(Qt5Macros) SET(QT_FOUND TRUE) SET(QT5_FOUND TRUE) telepathy-qt-0.9.3/cmake/modules/MacroLogFeature.cmake0000644000175200001440000001311012000056607025161 0ustar00collabora-develusers00000000000000# This file defines the Feature Logging macros. # # MACRO_LOG_FEATURE(VAR FEATURE DESCRIPTION URL [REQUIRED [MIN_VERSION [COMMENTS]]]) # Logs the information so that it can be displayed at the end # of the configure run # VAR : TRUE or FALSE, indicating whether the feature is supported # FEATURE: name of the feature, e.g. "libjpeg" # DESCRIPTION: description what this feature provides # URL: home page # REQUIRED: TRUE or FALSE, indicating whether the featue is required # MIN_VERSION: minimum version number. empty string if unneeded # COMMENTS: More info you may want to provide. empty string if unnecessary # # MACRO_DISPLAY_FEATURE_LOG() # Call this to display the collected results. # Exits CMake with a FATAL error message if a required feature is missing # # Example: # # INCLUDE(MacroLogFeature) # # FIND_PACKAGE(JPEG) # MACRO_LOG_FEATURE(JPEG_FOUND "libjpeg" "Support JPEG images" "http://www.ijg.org" TRUE "3.2a" "") # ... # MACRO_DISPLAY_FEATURE_LOG() # Copyright (c) 2006, Alexander Neundorf, # Copyright (c) 2006, Allen Winter, # Copyright (c) 2009, Sebastian Trueg, # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. IF (NOT _macroLogFeatureAlreadyIncluded) SET(_file ${CMAKE_BINARY_DIR}/MissingRequirements.txt) IF (EXISTS ${_file}) FILE(REMOVE ${_file}) ENDIF (EXISTS ${_file}) SET(_file ${CMAKE_BINARY_DIR}/EnabledFeatures.txt) IF (EXISTS ${_file}) FILE(REMOVE ${_file}) ENDIF (EXISTS ${_file}) SET(_file ${CMAKE_BINARY_DIR}/DisabledFeatures.txt) IF (EXISTS ${_file}) FILE(REMOVE ${_file}) ENDIF (EXISTS ${_file}) SET(_macroLogFeatureAlreadyIncluded TRUE) ENDIF (NOT _macroLogFeatureAlreadyIncluded) MACRO(MACRO_LOG_FEATURE _var _package _description _url ) # _required _minvers _comments) STRING(TOUPPER "${ARGV4}" _required) SET(_minvers "${ARGV5}") SET(_comments "${ARGV6}") IF (${_var}) SET(_LOGFILENAME ${CMAKE_BINARY_DIR}/EnabledFeatures.txt) ELSE (${_var}) IF ("${_required}" STREQUAL "TRUE") SET(_LOGFILENAME ${CMAKE_BINARY_DIR}/MissingRequirements.txt) ELSE ("${_required}" STREQUAL "TRUE") SET(_LOGFILENAME ${CMAKE_BINARY_DIR}/DisabledFeatures.txt) ENDIF ("${_required}" STREQUAL "TRUE") ENDIF (${_var}) SET(_logtext " * ${_package}") IF (NOT ${_var}) IF (${_minvers} MATCHES ".*") SET(_logtext "${_logtext} (${_minvers} or higher)") ENDIF (${_minvers} MATCHES ".*") SET(_logtext "${_logtext} <${_url}>\n ") ELSE (NOT ${_var}) SET(_logtext "${_logtext} - ") ENDIF (NOT ${_var}) SET(_logtext "${_logtext}${_description}") IF (NOT ${_var}) IF (${_comments} MATCHES ".*") SET(_logtext "${_logtext}\n ${_comments}") ENDIF (${_comments} MATCHES ".*") # SET(_logtext "${_logtext}\n") #double-space missing features? ENDIF (NOT ${_var}) FILE(APPEND "${_LOGFILENAME}" "${_logtext}\n") ENDMACRO(MACRO_LOG_FEATURE) MACRO(MACRO_DISPLAY_FEATURE_LOG) SET(_missingFile ${CMAKE_BINARY_DIR}/MissingRequirements.txt) SET(_enabledFile ${CMAKE_BINARY_DIR}/EnabledFeatures.txt) SET(_disabledFile ${CMAKE_BINARY_DIR}/DisabledFeatures.txt) IF (EXISTS ${_missingFile} OR EXISTS ${_enabledFile} OR EXISTS ${_disabledFile}) SET(_printSummary TRUE) ENDIF (EXISTS ${_missingFile} OR EXISTS ${_enabledFile} OR EXISTS ${_disabledFile}) IF(_printSummary) SET(_missingDeps 0) IF (EXISTS ${_enabledFile}) FILE(READ ${_enabledFile} _enabled) FILE(REMOVE ${_enabledFile}) SET(_summary "${_summary}\n-----------------------------------------------------------------------------\n-- The following external packages were located on your system.\n-- This installation will have the extra features provided by these packages.\n-----------------------------------------------------------------------------\n${_enabled}") ENDIF (EXISTS ${_enabledFile}) IF (EXISTS ${_disabledFile}) SET(_missingDeps 1) FILE(READ ${_disabledFile} _disabled) FILE(REMOVE ${_disabledFile}) SET(_summary "${_summary}\n-----------------------------------------------------------------------------\n-- The following OPTIONAL packages could NOT be located on your system.\n-- Consider installing them to enable more features from this software.\n-----------------------------------------------------------------------------\n${_disabled}") ENDIF (EXISTS ${_disabledFile}) IF (EXISTS ${_missingFile}) SET(_missingDeps 1) FILE(READ ${_missingFile} _requirements) SET(_summary "${_summary}\n-----------------------------------------------------------------------------\n-- The following REQUIRED packages could NOT be located on your system.\n-- You must install these packages before continuing.\n-----------------------------------------------------------------------------\n${_requirements}") FILE(REMOVE ${_missingFile}) SET(_haveMissingReq 1) ENDIF (EXISTS ${_missingFile}) IF (NOT ${_missingDeps}) SET(_summary "${_summary}\n-----------------------------------------------------------------------------\n-- Congratulations! All external packages have been found.") ENDIF (NOT ${_missingDeps}) MESSAGE(${_summary}) MESSAGE("-----------------------------------------------------------------------------\n") IF(_haveMissingReq) MESSAGE(FATAL_ERROR "Exiting: Missing Requirements") ENDIF(_haveMissingReq) ENDIF(_printSummary) ENDMACRO(MACRO_DISPLAY_FEATURE_LOG) telepathy-qt-0.9.3/cmake/modules/FindTelepathyGlib.cmake0000644000175200001440000000431212000056607025504 0ustar00collabora-develusers00000000000000# - Try to find Telepathy-Glib # Once done this will define # # TELEPATHY_GLIB_FOUND - system has Telepathy-Glib # TELEPATHY_GLIB_INCLUDE_DIR - the Telepathy-Glib include directory # TELEPATHY_GLIB_LIBRARIES - the libraries needed to use Telepathy-Glib # TELEPATHY_GLIB_DEFINITIONS - Compiler switches required for using Telepathy-Glib # Copyright (c) 2010, Dario Freddi # # Redistribution and use is allowed according to the terms of the BSD license. if (TELEPATHY_GLIB_INCLUDE_DIR AND TELEPATHY_GLIB_LIBRARIES) # in cache already set(TELEPATHYGLIB_FIND_QUIETLY TRUE) else (TELEPATHY_GLIB_INCLUDE_DIR AND TELEPATHY_GLIB_LIBRARIES) set(TELEPATHYGLIB_FIND_QUIETLY FALSE) endif (TELEPATHY_GLIB_INCLUDE_DIR AND TELEPATHY_GLIB_LIBRARIES) if (NOT WIN32) # use pkg-config to get the directories and then use these values # in the find_path() and find_library() calls find_package(PkgConfig) if (TELEPATHY_GLIB_MIN_VERSION) PKG_CHECK_MODULES(PC_TELEPATHY_GLIB telepathy-glib>=${TELEPATHY_GLIB_MIN_VERSION}) else (TELEPATHY_GLIB_MIN_VERSION) PKG_CHECK_MODULES(PC_TELEPATHY_GLIB telepathy-glib) endif (TELEPATHY_GLIB_MIN_VERSION) set(TELEPATHY_GLIB_DEFINITIONS ${PC_TELEPATHY_GLIB_CFLAGS_OTHER}) endif (NOT WIN32) if (TELEPATHY_GLIB_MIN_VERSION AND NOT PC_TELEPATHY_GLIB_FOUND) message(STATUS "Telepathy-glib not found or its version is < ${TELEPATHY_GLIB_MIN_VERSION}") else (TELEPATHY_GLIB_MIN_VERSION AND NOT PC_TELEPATHY_GLIB_FOUND) find_path(TELEPATHY_GLIB_INCLUDE_DIR telepathy-glib/client.h PATHS ${PC_TELEPATHY_GLIB_INCLUDEDIR} ${PC_TELEPATHY_GLIB_INCLUDE_DIRS} PATH_SUFFIXES telepathy-1.0 ) find_library(TELEPATHY_GLIB_LIBRARIES NAMES telepathy-glib PATHS ${PC_TELEPATHY_GLIB_LIBDIR} ${PC_TELEPATHY_GLIB_LIBRARY_DIRS} ) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(TelepathyGlib DEFAULT_MSG TELEPATHY_GLIB_LIBRARIES TELEPATHY_GLIB_INCLUDE_DIR) mark_as_advanced(TELEPATHY_GLIB_INCLUDE_DIR TELEPATHY_GLIB_LIBRARIES) endif (TELEPATHY_GLIB_MIN_VERSION AND NOT PC_TELEPATHY_GLIB_FOUND) telepathy-qt-0.9.3/cmake/modules/BasicFindPackageVersion.cmake.in0000644000175200001440000000262412000056607027223 0ustar00collabora-develusers00000000000000# This is a very basic file for the new style find_package() search mode, # i.e. Config-mode. It is used by MACRO_WRITE_BASIC_CMAKE_VERSION_FILE() from # MacroWriteBasicCMakeVersionFile.cmake. # In this mode find_package() searches for a Config.cmake # file and an associated Version.cmake file, which it loads to check # the version number. # This file can be used with configure_file() to generate such a file for a project # with very basic logic. # It sets PACKAGE_VERSION_EXACT if the current version string and the requested # version string are exactly the same and it sets PACKAGE_VERSION_COMPATIBLE # if the current version is >= requested version. # If this is not good enough for your project, you need to write your own # improved Version.cmake file. # This file requires the following three variables to be set: # PROJECT_VERSION_MAJOR # PROJECT_VERSION_MINOR # PROJECT_VERSION_PATCH set(PACKAGE_VERSION @PROJECT_VERSION_FULL@) if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" ) set(PACKAGE_VERSION_COMPATIBLE FALSE) else("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" ) set(PACKAGE_VERSION_COMPATIBLE TRUE) if( "${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}") set(PACKAGE_VERSION_EXACT TRUE) endif( "${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}") endif("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" ) telepathy-qt-0.9.3/cmake/modules/CompilerWarnings.cmake0000644000175200001440000000431512000056607025434 0ustar00collabora-develusers00000000000000include(CheckCXXCompilerFlag) include(CheckCCompilerFlag) macro(check_lang_compiler_flag lang flag variable) if(${lang} STREQUAL c) check_c_compiler_flag(${flag} ${variable}) endif(${lang} STREQUAL c) if(${lang} STREQUAL cxx) check_cxx_compiler_flag(${flag} ${variable}) endif(${lang} STREQUAL cxx) endmacro(check_lang_compiler_flag flag variable) macro(compiler_warnings ret lang werror_by_default desirable_flags undesirable_flags) set(warning_flags "") foreach(flag ${desirable_flags}) check_lang_compiler_flag(${lang} -W${flag} ${flag}_${lang}_result) if(${${flag}_${lang}_result}) set(warning_flags "${warning_flags} -W${flag}") endif( ${${flag}_${lang}_result} ) endforeach(flag ${desirable_flags}) check_lang_compiler_flag(${lang} -Werror error_${lang}_result) if(${error_${lang}_result}) set(error_flags "-Werror") endif(${error_${lang}_result}) set(all_nowarning_flags_supported 1) foreach(flag ${undesirable_flags}) check_lang_compiler_flag(${lang} -Wno-${flag} ${flag}_${lang}_result) if(${${flag}_${lang}_result}) set(warning_flags "${warning_flags} -Wno-${flag}") else(${${flag}_${lang}_result}) set(all_nowarning_flags_supported 0) break() endif(${${flag}_${lang}_result}) check_lang_compiler_flag(${lang} -Wno-error=${flag} noerror_${flag}_${lang}_result) if(${noerror_${flag}_${lang}_result}) set(error_flags "${error_flags} -Wno-error=${flag}") endif(${noerror_${flag}_${lang}_result}) endforeach(flag ${undesirable_flags}) if(DISABLE_WERROR) set(enable_werror 0) else(DISABLE_WERROR) set(enable_werror 1) endif(DISABLE_WERROR) if(${werror_by_default} AND ${enable_werror} AND ${all_nowarning_flags_supported}) set(${ret} "${warning_flags} ${error_flags}") else(${werror_by_default} AND ${enable_werror} AND ${all_nowarning_flags_supported}) set(${ret} "${warning_flags}") endif(${werror_by_default} AND ${enable_werror} AND ${all_nowarning_flags_supported}) endmacro(compiler_warnings ret lang werror_by_default desirable_flags undesirable_flags) telepathy-qt-0.9.3/cmake/modules/FindGIOUnix.cmake0000644000175200001440000000172112000056607024232 0ustar00collabora-develusers00000000000000# - Try to find the GIO unix libraries # Once done this will define # # GIOUNIX_FOUND - system has GIO unix # GIOUNIX_INCLUDE_DIR - the GIO unix include directory # # Copyright (C) 2011 Collabora Ltd. # Copyright (C) 2011 Nokia Corporation # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. if(GIOUNIX_INCLUDE_DIR) # Already in cache, be silent set(GIOUNIX_FIND_QUIETLY TRUE) endif(GIOUNIX_INCLUDE_DIR) include(UsePkgConfig) pkg_check_modules(PC_LibGIOUnix gio-unix-2.0) find_path(GIOUNIX_MAIN_INCLUDE_DIR NAMES gio/gunixconnection.h HINTS ${PC_LibGIOUnix_INCLUDEDIR} PATH_SUFFIXES gio-unix-2.0) set(GIOUNIX_INCLUDE_DIR "${GIOUNIX_MAIN_INCLUDE_DIR}") include(FindPackageHandleStandardArgs) find_package_handle_standard_args(GIOUNIX DEFAULT_MSG GIOUNIX_MAIN_INCLUDE_DIR) mark_as_advanced(GIOUNIX_INCLUDE_DIR) telepathy-qt-0.9.3/cmake/modules/TpQtMacros.cmake0000644000175200001440000006703412000056607024215 0ustar00collabora-develusers00000000000000# - Common macros for Tp-Qt # Copyright (c) 2010, Collabora Ltd. # # Redistribution and use is allowed according to the terms of the BSD license. # # These macros/functions are not exported - they are meant for internal usage into Telepathy-Qt's build system. # # Preamble: How dynamic generators are handled with the CMake build system. # Telepathy-Qt strongly relies upon lots of files generated at build time through some python programs, found # in tools/. To avoid developers the struggle of handling those manually, a set of convenience macros have been # created to handle them with the correct dependencies. Each of those macros takes a target name as a first argument # and creates a target with that exact name. In a similar fashion, in the last argument you can specify a list # of targets the generated target will depend on. This way, you can handle transparently dependencies between # generated files, while the dirty stuff is done for you in the background. # # macro TPQT_EXTRACT_DEPENDS (tpqt_other tpqt_depends) # Internal macro used to extract arguments from ARGN # # function TPQT_CREATE_MOC_COMMAND_TARGET_DEPS(inputfile outputfile moc_flags moc_options target_dependencies ...) # This function behaves exactly like qt_create_moc_command, but creates a custom target for the # moc file generation, allowing to specify a list of targets the generated moc target will depend on. # Just like qt_create_moc_command, it is an internal macro and it's not meant to be used explicitely. # # function TPQT_GENERATE_MOC_I(inputfile outputfile) # This function behaves exactly like qt_generate_moc, but it generates moc files with the -i option, # which disables the generation of an #include directive. This macro has to be used always when building # Tp-Qt internals due to the internal header files restrictions. # # function TPQT_GENERATE_MOC_I_TARGET_DEPS(inputfile outputfile target_dependencies ...) # This function acts as an overload to QT_GENERATE_MOC_I: it does exactly the same thing, but creates a # custom target for the moc file generation, and adds target_dependencies to it as dependencies. # # function TPQT_GENERATE_MOCS(sourcefile ...) # Generates mocs from a list of header files. You usually want to use this function when building tests # or examples. Please remember the list of the header files passed to this function MUST be added to the # target's sources. # # function TPQT_CLIENT_GENERATOR(spec group pretty_include namespace [arguments] [DEPENDS dependencies ...]) # This function takes care of invoking qt-client-gen.py with the correct arguments, which generates # headers out of specs. spec is the name of the spec headers will be generated from, group represents # the spec's group, pretty_include is the name of the capitalized header (for example ClientGenerator), # namespace is the C++ namespace the generated header will belong to. This function also accepts # as an optional last argument a list of additional command line arguments which will be passed to # qt-client-gen.py upon execution. After issuing DEPENDS in the last argument you can pass a list of targets # the generated target will depend on. # # function TPQT_FUTURE_CLIENT_GENERATOR(spec namespace [arguments] [DEPENDS dependencies ...]) # Same as tpqt_client_generator, but for future interfaces # # function TPQT_SERVICE_GENERATOR(spec group pretty_include namespace [arguments] [DEPENDS dependencies ...]) # This function takes care of invoking qt-svc-gen.py with the correct arguments, which generates # headers out of specs. spec is the name of the spec headers will be generated from, group represents # the spec's group, pretty_include is the name of the capitalized header (for example ServiceGenerator), # namespace is the C++ namespace the generated header will belong to. This function also accepts # as an optional last argument a list of additional command line arguments which will be passed to # qt-svc-gen.py upon execution. After issuing DEPENDS in the last argument you can pass a list of targets # the generated target will depend on. # # function TPQT_GENERATE_MANAGER_FILE(MANAGER_FILE OUTPUT_FILENAME DEPEND_FILENAME) # This function takes care of invoking manager-file.py with the correct arguments. The first argument is the # path to the manager-file.py file which should be used, the second is the output filename of the manager, # and the third is the path to the file which depends on the generated manager file. # # function TPQT_XINCLUDATOR (TARGET_NAME INPUT_FILE OUTPUT_FILE [additional_arguments ...] [DEPENDS dependencies ...]) # This function takes care of invoking xincludator.py with the correct arguments. TARGET_NAME is the name of # the generated target (see preamble), INPUT_FILE is the input spec file, OUTPUT_FILE is the filename # the generated file will be saved to. This function also accepts as an optional last argument a list of # additional command line arguments which will be passed to xincludator upon execution. # After issuing DEPENDS in the last argument you can pass a list of targets the generated target will depend on. # # function TPQT_CONSTANTS_GEN (TARGET_NAME SPEC_XML OUTPUT_FILE [additional_arguments ...] [DEPENDS dependencies ...]) # This function takes care of invoking qt-constants-gen.py with the correct arguments. TARGET_NAME is the name of # the generated target (see preamble), SPEC_XML is the spec input file, OUTPUT_FILE is the filename # the generated file will be saved to. This function also accepts as an optional last argument a list of # additional command line arguments which will be passed to qt-constants-gen.py upon execution. # After issuing DEPENDS in the last argument you can pass a list of targets the generated target will depend on. # # function TPQT_TYPES_GEN (TARGET_NAME SPEC_XML OUTFILE_DECL OUTFILE_IMPL NAMESPACE # REAL_INCLUDE PRETTY_INCLUDE [additional_arguments ...] [DEPENDS dependencies ...]) # This function takes care of invoking qt-types-gen.py with the correct arguments. TARGET_NAME is the name of # the generated target (see preamble), SPEC_XML is the input spec file, OUTFILE_DECL is the filename # the header of the generated file will be saved to, OUTFILE_IMPL is the filename the implementation of the # generated file will be saved to, NAMESPACE is the C++ namespace the generated header will belong to, # REAL_INCLUDE is the real include file you want to use, PRETTY_INCLUDE is the name of the capitalized header # (for example ClientGenerator). # This function also accepts as an optional last argument a list of additional command line arguments # which will be passed to qt-constants-gen.py upon execution. # After issuing DEPENDS in the last argument you can pass a list of targets the generated target will depend on. # # macro TPQT_ADD_GENERIC_UNIT_TEST (fancyName name [libraries ...]) # This macro takes care of building and adding a generic unit test to the automatic CTest suite. The requirement # for using this macro is to have the unit test contained in a single source file named ${name}.cpp. fancyName will # be used as the test and target's name, and you can specify as a third and optional argument a set of additional # libraries the target will link to. # # macro TPQT_ADD_DBUS_UNIT_TEST (fancyName name [libraries ...]) # This macro takes care of building and adding an unit test requiring DBus emulation to the automatic # CTest suite. The requirement for using this macro is to have the unit test contained in a single # source file named ${name}.cpp. fancyName will be used as the test and target's name, and you can specify as a third # and optional argument a set of additional libraries the target will link to. Please remember that you need to # set up the DBus environment by calling TPQT_SETUP_DBUS_TEST_ENVIRONMENT BEFORE you call this macro. # # macro _TPQT_ADD_CHECK_TARGETS (fancyName name command [args]) # This is an internal macro which is meant to be used by TPQT_ADD_DBUS_UNIT_TEST and TPQT_ADD_GENERIC_UNIT_TEST. # It takes care of generating a check target for each test method available (currently normal execution, valgrind and # callgrind). This macro accepts the same arguments as the add test macros, but accepts a command and a list of # arguments for running the test instead of the link libraries. However, you are not meant to call this macro from # your CMakeLists.txt files. # # function TPQT_SETUP_DBUS_TEST_ENVIRONMENT () # This function MUST be called before calling TPQT_ADD_DBUS_UNIT_TEST. It takes care of preparing the test # environment for DBus tests and generating the needed files. # # macro MAKE_INSTALL_PATH_ABSOLUTE (out in) # This macro makes the path given in the "in" variable absolute (or leaves it unchanged # if it's absolute already) by prefixing it with TELEPATHY_QT_INSTALL_DIR, # and returns the absolute path in the "out" variable. This macro is mainly used for # generating *Config.cmake files. # # MACRO (TPQT_EXTRACT_DEPENDS _tpqt_other _tpqt_depends) SET(${_tpqt_other}) SET(${_tpqt_depends}) SET(_TPQT_DOING_DEPENDS FALSE) FOREACH(_currentArg ${ARGN}) IF ("${_currentArg}" STREQUAL "DEPENDS") SET(_TPQT_DOING_DEPENDS TRUE) ELSE ("${_currentArg}" STREQUAL "DEPENDS") IF(_TPQT_DOING_DEPENDS) LIST(APPEND ${_tpqt_depends} "${_currentArg}") ELSE(_TPQT_DOING_DEPENDS) LIST(APPEND ${_tpqt_other} "${_currentArg}") ENDIF(_TPQT_DOING_DEPENDS) ENDIF ("${_currentArg}" STREQUAL "DEPENDS") ENDFOREACH(_currentArg) ENDMACRO (TPQT_EXTRACT_DEPENDS) # helper function to set up a moc rule FUNCTION (TPQT_CREATE_MOC_COMMAND_TARGET_DEPS infile outfile moc_flags moc_options) # For Windows, create a parameters file to work around command line length limit GET_FILENAME_COMPONENT(_moc_outfile_name "${outfile}" NAME) IF (WIN32) # Pass the parameters in a file. Set the working directory to # be that containing the parameters file and reference it by # just the file name. This is necessary because the moc tool on # MinGW builds does not seem to handle spaces in the path to the # file given with the @ syntax. GET_FILENAME_COMPONENT(_moc_outfile_dir "${outfile}" PATH) IF(_moc_outfile_dir) SET(_moc_working_dir WORKING_DIRECTORY ${_moc_outfile_dir}) ENDIF(_moc_outfile_dir) SET (_moc_parameters_file ${outfile}_parameters) SET (_moc_parameters ${moc_flags} ${moc_options} -o "${outfile}" "${infile}") FILE (REMOVE ${_moc_parameters_file}) FOREACH(arg ${_moc_parameters}) FILE (APPEND ${_moc_parameters_file} "${arg}\n") ENDFOREACH(arg) ADD_CUSTOM_COMMAND(OUTPUT ${outfile} COMMAND ${QT_MOC_EXECUTABLE} @${_moc_outfile_name}_parameters DEPENDS ${infile} ${_moc_working_dir} VERBATIM) ELSE (WIN32) ADD_CUSTOM_COMMAND(OUTPUT ${outfile} COMMAND ${QT_MOC_EXECUTABLE} ARGS ${moc_flags} ${moc_options} -o ${outfile} ${infile} DEPENDS ${infile}) ENDIF (WIN32) add_custom_target(moc-${_moc_outfile_name} DEPENDS ${outfile}) add_dependencies(moc-${_moc_outfile_name} ${ARGN}) ENDFUNCTION (TPQT_CREATE_MOC_COMMAND_TARGET_DEPS) # add the -i option to QT_GENERATE_MOC function(TPQT_GENERATE_MOC_I infile outfile) qt_get_moc_flags(moc_flags) get_filename_component(abs_infile ${infile} ABSOLUTE) qt_create_moc_command(${abs_infile} ${outfile} "${moc_flags}" "-i") set_source_files_properties(${outfile} PROPERTIES SKIP_AUTOMOC TRUE) # dont run automoc on this file endfunction(TPQT_GENERATE_MOC_I) # same as tpqt_generate_moc_i, but lets the caller specify a list of targets which the mocs should depend on function(TPQT_GENERATE_MOC_I_TARGET_DEPS infile outfile) qt_get_moc_flags(moc_flags) get_filename_component(abs_infile ${infile} ABSOLUTE) tpqt_create_moc_command_target_deps(${abs_infile} ${outfile} "${moc_flags}" "-i" ${ARGN}) set_source_files_properties(${outfile} PROPERTIES SKIP_AUTOMOC TRUE) # dont run automoc on this file endfunction(TPQT_GENERATE_MOC_I_TARGET_DEPS) # generates mocs for the passed list. The list should be added to the target's sources function(tpqt_generate_mocs) file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/_gen" ) foreach(moc_src ${ARGN}) string(REPLACE ".h" ".moc.hpp" generated_file ${moc_src}) tpqt_generate_moc_i(${CMAKE_CURRENT_SOURCE_DIR}/${moc_src} ${CMAKE_CURRENT_BINARY_DIR}/_gen/${generated_file}) set_property(SOURCE ${moc_src} APPEND PROPERTY OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/_gen/${generated_file}) endforeach(moc_src ${ARGN}) endfunction(tpqt_generate_mocs) function(tpqt_client_generator spec group pretty_include namespace) tpqt_extract_depends(client_generator_args client_generator_depends ${ARGN}) set(ARGS ${CMAKE_SOURCE_DIR}/tools/qt-client-gen.py --group=${group} --namespace=${namespace} --typesnamespace=Tp --headerfile=${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-${spec}.h --implfile=${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-${spec}-body.hpp --realinclude=TelepathyQt/${spec}.h --prettyinclude=TelepathyQt/${pretty_include} --specxml=${CMAKE_CURRENT_BINARY_DIR}/_gen/stable-spec.xml --ifacexml=${CMAKE_CURRENT_BINARY_DIR}/_gen/spec-${spec}.xml --extraincludes=${TYPES_INCLUDE} --must-define=IN_TP_QT_HEADER --visibility=TP_QT_EXPORT ${client_generator_args}) add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-${spec}.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-${spec}-body.hpp COMMAND ${PYTHON_EXECUTABLE} ARGS ${ARGS} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} DEPENDS ${CMAKE_SOURCE_DIR}/tools/libqtcodegen.py ${CMAKE_SOURCE_DIR}/tools/qt-client-gen.py) add_custom_target(generate_cli-${spec}-body DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-${spec}-body.hpp) add_dependencies(all-generated-sources generate_cli-${spec}-body) if (client_generator_depends) add_dependencies(generate_cli-${spec}-body ${client_generator_depends}) endif (client_generator_depends) tpqt_generate_moc_i_target_deps(${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-${spec}.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/cli-${spec}.moc.hpp "generate_cli-${spec}-body") endfunction(tpqt_client_generator spec group pretty_include namespace) function(tpqt_future_client_generator spec namespace) tpqt_extract_depends(future_client_generator_args future_client_generator_depends ${ARGN}) set(ARGS ${CMAKE_SOURCE_DIR}/tools/qt-client-gen.py --namespace=${namespace} --typesnamespace=TpFuture --headerfile=${CMAKE_CURRENT_BINARY_DIR}/_gen/future-${spec}.h --implfile=${CMAKE_CURRENT_BINARY_DIR}/_gen/future-${spec}-body.hpp --realinclude=TelepathyQt/future-internal.h --prettyinclude=TelepathyQt/future-internal.h --specxml=${CMAKE_CURRENT_BINARY_DIR}/_gen/future-spec.xml --ifacexml=${CMAKE_CURRENT_BINARY_DIR}/_gen/future-${spec}.xml --extraincludes=${TYPES_INCLUDE} --extraincludes='' --extraincludes='' --visibility=TP_QT_NO_EXPORT ${future_client_generator_args}) add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/_gen/future-${spec}.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/future-${spec}-body.hpp COMMAND ${PYTHON_EXECUTABLE} ARGS ${ARGS} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} DEPENDS ${CMAKE_SOURCE_DIR}/tools/libqtcodegen.py ${CMAKE_SOURCE_DIR}/tools/qt-client-gen.py) add_custom_target(generate_future-${spec}-body DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/_gen/future-${spec}-body.hpp) add_dependencies(all-generated-sources generate_future-${spec}-body) if (future_client_generator_depends) add_dependencies(generate_future-${spec}-body ${future_client_generator_depends}) endif (future_client_generator_depends) tpqt_generate_moc_i_target_deps(${CMAKE_CURRENT_BINARY_DIR}/_gen/future-${spec}.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/future-${spec}.moc.hpp "generate_future-${spec}-body") endfunction(tpqt_future_client_generator spec namespace) function(tpqt_service_generator spec group pretty_include namespace) tpqt_extract_depends(service_generator_args service_generator_depends ${ARGN}) string(REPLACE "svc-" "" spec ${spec}) set(ARGS ${CMAKE_SOURCE_DIR}/tools/qt-svc-gen.py --group=${group} --namespace=${namespace} --typesnamespace=Tp --headerfile=${CMAKE_CURRENT_BINARY_DIR}/_gen/svc-${spec}.h --implfile=${CMAKE_CURRENT_BINARY_DIR}/_gen/svc-${spec}.cpp --realinclude=TelepathyQt/_gen/svc-${spec}.h --mocinclude=TelepathyQt/_gen/svc-${spec}.moc.hpp --specxml=${CMAKE_CURRENT_BINARY_DIR}/_gen/stable-spec.xml --ifacexml=${CMAKE_CURRENT_BINARY_DIR}/_gen/spec-svc-${spec}.xml --visibility=TP_QT_EXPORT ${service_generator_args}) add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/_gen/svc-${spec}.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/svc-${spec}.cpp COMMAND ${PYTHON_EXECUTABLE} ARGS ${ARGS} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} DEPENDS ${CMAKE_SOURCE_DIR}/tools/libqtcodegen.py ${CMAKE_SOURCE_DIR}/tools/qt-svc-gen.py) add_custom_target(generate_service-${spec}-body DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/_gen/svc-${spec}.cpp) add_dependencies(all-generated-service-sources generate_service-${spec}-body) if (service_generator_depends) add_dependencies(generate_service-${spec}-body ${service_generator_depends}) endif (service_generator_depends) tpqt_generate_moc_i_target_deps(${CMAKE_CURRENT_BINARY_DIR}/_gen/svc-${spec}.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/svc-${spec}.moc.hpp "generate_service-${spec}-body") endfunction(tpqt_service_generator spec group pretty_include namespace) # This function is used for generating CM in various examples function(tpqt_generate_manager_file MANAGER_FILE OUTPUT_FILENAME DEPEND_FILENAME) # make_directory is required, otherwise the command won't work!! make_directory(${CMAKE_CURRENT_BINARY_DIR}/_gen) add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/_gen/param-spec-struct.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/${OUTPUT_FILENAME} COMMAND ${PYTHON_EXECUTABLE} ARGS ${CMAKE_SOURCE_DIR}/tools/manager-file.py ${MANAGER_FILE} _gen DEPENDS ${CMAKE_SOURCE_DIR}/tools/manager-file.py) set_source_files_properties(${DEPEND_FILENAME} PROPERTIES OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/_gen/param-spec-struct.h) endfunction(tpqt_generate_manager_file MANAGER_FILE) function(tpqt_xincludator _TARGET_NAME _INPUT_FILE _OUTPUT_FILE) tpqt_extract_depends(xincludator_gen_args xincludator_gen_depends ${ARGN}) # Gather all .xml files in TelepathyQt and spec/ and make this target depend on those file(GLOB depends_xml_files ${CMAKE_SOURCE_DIR}/TelepathyQt/*.xml ${CMAKE_SOURCE_DIR}/spec/*.xml) add_custom_command(OUTPUT ${_OUTPUT_FILE} COMMAND ${PYTHON_EXECUTABLE} ARGS ${CMAKE_SOURCE_DIR}/tools/xincludator.py ${_INPUT_FILE} ${xincludator_gen_args} > ${_OUTPUT_FILE} DEPENDS ${CMAKE_SOURCE_DIR}/tools/xincludator.py ${_INPUT_FILE} ${depends_xml_files}) add_custom_target(${_TARGET_NAME} DEPENDS ${_OUTPUT_FILE}) if (xincludator_gen_depends) add_dependencies(${_TARGET_NAME} ${xincludator_gen_depends}) endif (xincludator_gen_depends) endfunction(tpqt_xincludator _TARGET_NAME _INPUT_FILE _OUTPUT_FILE) function(tpqt_constants_gen _TARGET_NAME _SPEC_XML _OUTFILE) tpqt_extract_depends(constants_gen_args constants_gen_depends ${ARGN}) # Gather all .xml files in TelepathyQt and spec/ and make this target depend on those file(GLOB depends_xml_files ${CMAKE_SOURCE_DIR}/TelepathyQt/*.xml ${CMAKE_SOURCE_DIR}/spec/*.xml) add_custom_command(OUTPUT ${_OUTFILE} COMMAND ${PYTHON_EXECUTABLE} ARGS ${CMAKE_SOURCE_DIR}/tools/qt-constants-gen.py ${constants_gen_args} --specxml=${_SPEC_XML} > ${_OUTFILE} DEPENDS ${CMAKE_SOURCE_DIR}/tools/libqtcodegen.py ${CMAKE_SOURCE_DIR}/tools/qt-constants-gen.py ${_SPEC_XML} ${depends_xml_files}) add_custom_target(${_TARGET_NAME} DEPENDS ${_OUTFILE}) add_dependencies(all-generated-sources ${_TARGET_NAME}) if (constants_gen_depends) add_dependencies(${_TARGET_NAME} ${constants_gen_depends}) endif (constants_gen_depends) endfunction (tpqt_constants_gen _TARGET_NAME _SPEC_XML _OUTFILE) function(tpqt_types_gen _TARGET_NAME _SPEC_XML _OUTFILE_DECL _OUTFILE_IMPL _NAMESPACE _REALINCLUDE _PRETTYINCLUDE) tpqt_extract_depends(types_gen_args types_gen_depends ${ARGN}) # Gather all .xml files in TelepathyQt and spec/ and make this target depend on those file(GLOB depends_xml_files ${CMAKE_SOURCE_DIR}/TelepathyQt/*.xml ${CMAKE_SOURCE_DIR}/spec/*.xml) add_custom_command(OUTPUT ${_OUTFILE_DECL} ${_OUTFILE_IMPL} COMMAND ${PYTHON_EXECUTABLE} ARGS ${CMAKE_SOURCE_DIR}/tools/qt-types-gen.py --namespace=${_NAMESPACE} --declfile=${_OUTFILE_DECL} --implfile=${_OUTFILE_IMPL} --realinclude=${_REALINCLUDE} --prettyinclude=${_PRETTYINCLUDE} ${types_gen_args} --specxml=${_SPEC_XML} DEPENDS ${CMAKE_SOURCE_DIR}/tools/libqtcodegen.py ${CMAKE_SOURCE_DIR}/tools/qt-types-gen.py ${_SPEC_XML} ${depends_xml_files}) add_custom_target(${_TARGET_NAME} DEPENDS ${_OUTFILE_IMPL}) add_dependencies(all-generated-sources ${_TARGET_NAME}) if (types_gen_depends) add_dependencies(${_TARGET_NAME} ${types_gen_depends}) endif (types_gen_depends) endfunction(tpqt_types_gen _TARGET_NAME _SPEC_XML _OUTFILE_DECL _OUTFILE_IMPL _NAMESPACE _REALINCLUDE _PRETTYINCLUDE) macro(tpqt_add_generic_unit_test _fancyName _name) tpqt_generate_moc_i(${_name}.cpp ${CMAKE_CURRENT_BINARY_DIR}/_gen/${_name}.cpp.moc.hpp) add_executable(test-${_name} ${_name}.cpp ${CMAKE_CURRENT_BINARY_DIR}/_gen/${_name}.cpp.moc.hpp) target_link_libraries(test-${_name} ${QT_QTCORE_LIBRARY} ${QT_QTNETWORK_LIBRARY} ${QT_QTXML_LIBRARY} ${QT_QTTEST_LIBRARY} telepathy-qt${QT_VERSION_MAJOR} tp-qt-tests ${TP_QT_EXECUTABLE_LINKER_FLAGS} ${ARGN}) add_test(${_fancyName} ${SH} ${CMAKE_CURRENT_BINARY_DIR}/runGenericTest.sh ${CMAKE_CURRENT_BINARY_DIR}/test-${_name}) list(APPEND _telepathy_qt_test_cases test-${_name}) # Valgrind and Callgrind targets _tpqt_add_check_targets(${_fancyName} ${_name} ${CMAKE_CURRENT_BINARY_DIR}/runGenericTest.sh ${CMAKE_CURRENT_BINARY_DIR}/test-${_name}) endmacro(tpqt_add_generic_unit_test _fancyName _name) macro(tpqt_add_dbus_unit_test _fancyName _name) tpqt_generate_moc_i(${_name}.cpp ${CMAKE_CURRENT_BINARY_DIR}/_gen/${_name}.cpp.moc.hpp) add_executable(test-${_name} ${_name}.cpp ${CMAKE_CURRENT_BINARY_DIR}/_gen/${_name}.cpp.moc.hpp) target_link_libraries(test-${_name} ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} ${QT_QTNETWORK_LIBRARY} ${QT_QTXML_LIBRARY} ${QT_QTTEST_LIBRARY} telepathy-qt${QT_VERSION_MAJOR} tp-qt-tests ${TP_QT_EXECUTABLE_LINKER_FLAGS} ${ARGN}) set(with_session_bus ${CMAKE_CURRENT_BINARY_DIR}/runDbusTest.sh) add_test(${_fancyName} ${SH} ${with_session_bus} ${CMAKE_CURRENT_BINARY_DIR}/test-${_name}) list(APPEND _telepathy_qt_test_cases test-${_name}) # Valgrind and Callgrind targets _tpqt_add_check_targets(${_fancyName} ${_name} ${with_session_bus} ${CMAKE_CURRENT_BINARY_DIR}/test-${_name}) endmacro(tpqt_add_dbus_unit_test _fancyName _name) macro(_tpqt_add_check_targets _fancyName _name _runnerScript) set_tests_properties(${_fancyName} PROPERTIES FAIL_REGULAR_EXPRESSION "^FAIL!") # Standard check target add_custom_target(check-${_fancyName} ${SH} ${_runnerScript} ${ARGN}) add_dependencies(check-${_fancyName} test-${_name}) # Lcov target add_dependencies(lcov-check test-${_name}) # Valgrind target add_custom_target(check-valgrind-${_fancyName}) add_dependencies(check-valgrind-${_fancyName} test-${_name}) add_custom_command( TARGET check-valgrind-${_fancyName} COMMAND G_SLICE=always-malloc ${SH} ${_runnerScript} /usr/bin/valgrind --tool=memcheck --leak-check=full --leak-resolution=high --child-silent-after-fork=yes --num-callers=20 --gen-suppressions=all --log-file=${CMAKE_CURRENT_BINARY_DIR}/test-${_fancyName}.memcheck.log --suppressions=${CMAKE_SOURCE_DIR}/tools/tp-qt-tests.supp --suppressions=${CMAKE_SOURCE_DIR}/tools/telepathy-glib.supp ${ARGN} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Running valgrind on test \"${_fancyName}\"") add_dependencies(check-valgrind check-valgrind-${_fancyName}) # Callgrind target add_custom_target(check-callgrind-${_fancyName}) add_dependencies(check-callgrind-${_fancyName} test-${_name}) add_custom_command( TARGET check-callgrind-${_fancyName} COMMAND ${SH} ${_runnerScript} /usr/bin/valgrind --tool=callgrind --dump-instr=yes --log-file=${CMAKE_CURRENT_BINARY_DIR}/test-${_fancyName}.callgrind.log --callgrind-out-file=${CMAKE_CURRENT_BINARY_DIR}/test-${_fancyName}.callgrind.out ${ARGN} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Running callgrind on test \"${_fancyName}\"") add_dependencies(check-callgrind check-callgrind-${_fancyName}) endmacro(_tpqt_add_check_targets _fancyName _name) function(tpqt_setup_dbus_test_environment) file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/runDbusTest.sh " ${test_environment} sh ${CMAKE_SOURCE_DIR}/tools/with-session-bus.sh \\ --config-file=${CMAKE_BINARY_DIR}/tests/dbus-1/session.conf -- $@ ") endfunction(tpqt_setup_dbus_test_environment) macro(make_install_path_absolute out in) if (IS_ABSOLUTE "${in}") set(${out} "${in}") else (IS_ABSOLUTE "${in}") set(${out} "\${TELEPATHY_QT${QT_VERSION_MAJOR}_INSTALL_DIR}/${in}") endif (IS_ABSOLUTE "${in}") endmacro(make_install_path_absolute out in) telepathy-qt-0.9.3/cmake/modules/FindLibXml2.cmake0000644000175200001440000000356112000056607024225 0ustar00collabora-develusers00000000000000# - Try to find LibXml2 # Once done this will define # # LIBXML2_FOUND - System has LibXml2 # LIBXML2_INCLUDE_DIR - The LibXml2 include directory # LIBXML2_LIBRARIES - The libraries needed to use LibXml2 # LIBXML2_DEFINITIONS - Compiler switches required for using LibXml2 # LIBXML2_XMLLINT_EXECUTABLE - The XML checking tool xmllint coming with LibXml2 # Copyright (c) 2006, Alexander Neundorf, # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. IF (LIBXML2_INCLUDE_DIR AND LIBXML2_LIBRARIES) # in cache already SET(LibXml2_FIND_QUIETLY TRUE) ENDIF (LIBXML2_INCLUDE_DIR AND LIBXML2_LIBRARIES) IF (NOT WIN32) # use pkg-config to get the directories and then use these values # in the FIND_PATH() and FIND_LIBRARY() calls FIND_PACKAGE(PkgConfig) PKG_CHECK_MODULES(PC_LIBXML libxml-2.0) SET(LIBXML2_DEFINITIONS ${PC_LIBXML_CFLAGS_OTHER}) ENDIF (NOT WIN32) FIND_PATH(LIBXML2_INCLUDE_DIR libxml/xpath.h HINTS ${PC_LIBXML_INCLUDEDIR} ${PC_LIBXML_INCLUDE_DIRS} PATH_SUFFIXES libxml2 ) FIND_LIBRARY(LIBXML2_LIBRARIES NAMES xml2 libxml2 HINTS ${PC_LIBXML_LIBDIR} ${PC_LIBXML_LIBRARY_DIRS} ) FIND_PROGRAM(LIBXML2_XMLLINT_EXECUTABLE xmllint) # for backwards compat. with KDE 4.0.x: SET(XMLLINT_EXECUTABLE "${LIBXML2_XMLLINT_EXECUTABLE}") IF( NOT LIBXML2_XMLLINT_EXECUTABLE ) MESSAGE(STATUS "xmllint program not found. Install it if you want validate generated doc file.") ENDIF(NOT LIBXML2_XMLLINT_EXECUTABLE ) INCLUDE(FindPackageHandleStandardArgs) # handle the QUIETLY and REQUIRED arguments and set LIBXML2_FOUND to TRUE if # all listed variables are TRUE FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibXml2 DEFAULT_MSG LIBXML2_LIBRARIES LIBXML2_INCLUDE_DIR) MARK_AS_ADVANCED(LIBXML2_INCLUDE_DIR LIBXML2_LIBRARIES LIBXML2_XMLLINT_EXECUTABLE) telepathy-qt-0.9.3/cmake/modules/FindQt.cmake0000644000175200001440000000635612000056607023345 0ustar00collabora-develusers00000000000000# - Searches for Qt4 or Qt5. # Copyright (C) 2001-2009 Kitware, Inc. # Copyright (C) 2011 Collabora Ltd. # Copyright (C) 2011 Nokia Corporation # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. IF(NOT QT_QMAKE_EXECUTABLE) FIND_PROGRAM(QT_QMAKE_EXECUTABLE_FINDQT NAMES qmake qmake4 qmake-qt4 qmake5 qmake-qt5 PATHS "${QT_SEARCH_PATH}/bin" "$ENV{QTDIR}/bin") SET(QT_QMAKE_EXECUTABLE ${QT_QMAKE_EXECUTABLE_FINDQT} CACHE PATH "Qt qmake program.") ENDIF(NOT QT_QMAKE_EXECUTABLE) # now find qmake IF(QT_QMAKE_EXECUTABLE) EXEC_PROGRAM(${QT_QMAKE_EXECUTABLE} ARGS "-query QT_VERSION" OUTPUT_VARIABLE QTVERSION) IF(QTVERSION MATCHES "4.*") SET(QT4_INSTALLED TRUE) ENDIF(QTVERSION MATCHES "4.*") IF(QTVERSION MATCHES "5.*") SET(QT5_INSTALLED TRUE) ENDIF(QTVERSION MATCHES "5.*") ENDIF(QT_QMAKE_EXECUTABLE) IF(NOT DESIRED_QT_VERSION) IF(QT4_INSTALLED) SET(DESIRED_QT_VERSION 4 CACHE STRING "Pick a version of Qt to use: 4 or 5") ENDIF(QT4_INSTALLED) IF(QT5_INSTALLED) SET(DESIRED_QT_VERSION 5 CACHE STRING "Pick a version of Qt to use: 4 or 5") ENDIF(QT5_INSTALLED) ENDIF(NOT DESIRED_QT_VERSION) IF(DESIRED_QT_VERSION MATCHES 4) SET(Qt4_FIND_REQUIRED ${Qt_FIND_REQUIRED}) SET(Qt4_FIND_QUIETLY ${Qt_FIND_QUIETLY}) SET(QT_MIN_VERSION ${QT4_MIN_VERSION}) SET(QT_MAX_VERSION ${QT4_MAX_VERSION}) INCLUDE(FindQt4) ENDIF(DESIRED_QT_VERSION MATCHES 4) IF(DESIRED_QT_VERSION MATCHES 5) SET(Qt5_FIND_REQUIRED ${Qt_FIND_REQUIRED}) SET(Qt5_FIND_QUIETLY ${Qt_FIND_QUIETLY}) SET(QT_MIN_VERSION ${QT5_MIN_VERSION}) SET(QT_MAX_VERSION ${QT5_MAX_VERSION}) INCLUDE(FindQt5) ENDIF(DESIRED_QT_VERSION MATCHES 5) IF(NOT QT4_INSTALLED AND NOT QT5_INSTALLED) IF(Qt_FIND_REQUIRED) MESSAGE(SEND_ERROR "CMake was unable to find any Qt versions, put qmake in your path, or set QTDIR/QT_QMAKE_EXECUTABLE.") ENDIF(Qt_FIND_REQUIRED) ELSE(NOT QT4_INSTALLED AND NOT QT5_INSTALLED) IF(NOT QT_FOUND) IF(Qt_FIND_REQUIRED) MESSAGE(FATAL_ERROR "CMake was unable to find Qt version: ${DESIRED_QT_VERSION}, put qmake in your path or set QTDIR/QT_QMAKE_EXECUTABLE.") ELSE(Qt_FIND_REQUIRED) MESSAGE("CMake was unable to find Qt version: ${DESIRED_QT_VERSION}, put qmake in your path or set QTDIR/QT_QMAKE_EXECUTABLE.") ENDIF(Qt_FIND_REQUIRED) ENDIF(NOT QT_FOUND) ENDIF(NOT QT4_INSTALLED AND NOT QT5_INSTALLED) MACRO(QT_GET_MOC_FLAGS moc_flags) IF(QT_VERSION_MAJOR MATCHES 4) QT4_GET_MOC_FLAGS(${moc_flags}) ELSE(QT_VERSION_MAJOR MATCHES 4) IF(QT_VERSION_MAJOR MATCHES 5) QT5_GET_MOC_FLAGS(${moc_flags}) ENDIF(QT_VERSION_MAJOR MATCHES 5) ENDIF(QT_VERSION_MAJOR MATCHES 4) ENDMACRO(QT_GET_MOC_FLAGS) MACRO(QT_CREATE_MOC_COMMAND infile outfile moc_flags moc_options) IF(QT_VERSION_MAJOR MATCHES 4) QT4_CREATE_MOC_COMMAND(${infile} ${outfile} "${moc_flags}" "${moc_options}") ELSE(QT_VERSION_MAJOR MATCHES 4) IF(QT_VERSION_MAJOR MATCHES 5) QT5_CREATE_MOC_COMMAND(${infile} ${outfile} "${moc_flags}" "${moc_options}") ENDIF(QT_VERSION_MAJOR MATCHES 5) ENDIF(QT_VERSION_MAJOR MATCHES 4) ENDMACRO(QT_CREATE_MOC_COMMAND) MARK_AS_ADVANCED(QT_QMAKE_EXECUTABLE_FINDQT) telepathy-qt-0.9.3/cmake/modules/Qt5Macros.cmake0000644000175200001440000000524712000056607023774 0ustar00collabora-develusers00000000000000# This file is included by FindQt5.cmake, don't include it directly. # Copyright (C) 2001-2009 Kitware, Inc. # Copyright (C) 2011 Collabora Ltd. # Copyright (C) 2011 Nokia Corporation # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. MACRO (QT5_GET_MOC_FLAGS _moc_flags) SET(${_moc_flags}) GET_DIRECTORY_PROPERTY(_inc_DIRS INCLUDE_DIRECTORIES) FOREACH(_current ${_inc_DIRS}) IF("${_current}" MATCHES "\\.framework/?$") STRING(REGEX REPLACE "/[^/]+\\.framework" "" framework_path "${_current}") SET(${_moc_flags} ${${_moc_flags}} "-F${framework_path}") ELSE("${_current}" MATCHES "\\.framework/?$") SET(${_moc_flags} ${${_moc_flags}} "-I${_current}") ENDIF("${_current}" MATCHES "\\.framework/?$") ENDFOREACH(_current ${_inc_DIRS}) GET_DIRECTORY_PROPERTY(_defines COMPILE_DEFINITIONS) FOREACH(_current ${_defines}) SET(${_moc_flags} ${${_moc_flags}} "-D${_current}") ENDFOREACH(_current ${_defines}) IF(Q_WS_WIN) SET(${_moc_flags} ${${_moc_flags}} -DWIN32) ENDIF(Q_WS_WIN) ENDMACRO (QT5_GET_MOC_FLAGS) # helper macro to set up a moc rule MACRO (QT5_CREATE_MOC_COMMAND infile outfile moc_flags moc_options) # For Windows, create a parameters file to work around command line length limit IF (WIN32) # Pass the parameters in a file. Set the working directory to # be that containing the parameters file and reference it by # just the file name. This is necessary because the moc tool on # MinGW builds does not seem to handle spaces in the path to the # file given with the @ syntax. GET_FILENAME_COMPONENT(_moc_outfile_name "${outfile}" NAME) GET_FILENAME_COMPONENT(_moc_outfile_dir "${outfile}" PATH) IF(_moc_outfile_dir) SET(_moc_working_dir WORKING_DIRECTORY ${_moc_outfile_dir}) ENDIF(_moc_outfile_dir) SET (_moc_parameters_file ${outfile}_parameters) SET (_moc_parameters ${moc_flags} ${moc_options} -o "${outfile}" "${infile}") STRING (REPLACE ";" "\n" _moc_parameters "${_moc_parameters}") FILE (WRITE ${_moc_parameters_file} "${_moc_parameters}") ADD_CUSTOM_COMMAND(OUTPUT ${outfile} COMMAND ${QT_MOC_EXECUTABLE} @${_moc_outfile_name}_parameters DEPENDS ${infile} ${_moc_working_dir} VERBATIM) ELSE (WIN32) ADD_CUSTOM_COMMAND(OUTPUT ${outfile} COMMAND ${QT_MOC_EXECUTABLE} ARGS ${moc_flags} ${moc_options} -o ${outfile} ${infile} DEPENDS ${infile}) ENDIF (WIN32) ENDMACRO (QT5_CREATE_MOC_COMMAND) telepathy-qt-0.9.3/cmake/modules/FindPythonLibrary.cmake0000644000175200001440000000703112000056607025556 0ustar00collabora-develusers00000000000000# FindPythonLibrary.cmake # ~~~~~~~~~~~~~~~~~~~~~~~ # Find the Python interpreter and related Python directories. # # This file defines the following variables: # # PYTHON_EXECUTABLE - The path and filename of the Python interpreter. # # PYTHON_SHORT_VERSION - The version of the Python interpreter found, # excluding the patch version number. (e.g. 2.5 and not 2.5.1)) # # PYTHON_LONG_VERSION - The version of the Python interpreter found as a human # readable string. # # PYTHON_SITE_PACKAGES_DIR - Location of the Python site-packages directory. # # PYTHON_INCLUDE_PATH - Directory holding the python.h include file. # # PYTHON_LIBRARY, PYTHON_LIBRARIES- Location of the Python library. # Copyright (c) 2007, Simon Edwards # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. INCLUDE(CMakeFindFrameworks) if(EXISTS PYTHON_LIBRARY) # Already in cache, be silent set(PYTHONLIBRARY_FOUND TRUE) else(EXISTS PYTHON_LIBRARY) FIND_PACKAGE(PythonInterp) if(PYTHONINTERP_FOUND) FIND_FILE(_find_lib_python_py FindLibPython.py PATHS ${CMAKE_MODULE_PATH}) EXECUTE_PROCESS(COMMAND ${PYTHON_EXECUTABLE} ${_find_lib_python_py} OUTPUT_VARIABLE python_config) if(python_config) STRING(REGEX REPLACE ".*exec_prefix:([^\n]+).*$" "\\1" PYTHON_PREFIX ${python_config}) STRING(REGEX REPLACE ".*\nshort_version:([^\n]+).*$" "\\1" PYTHON_SHORT_VERSION ${python_config}) STRING(REGEX REPLACE ".*\nlong_version:([^\n]+).*$" "\\1" PYTHON_LONG_VERSION ${python_config}) STRING(REGEX REPLACE ".*\npy_inc_dir:([^\n]+).*$" "\\1" PYTHON_INCLUDE_PATH ${python_config}) STRING(REGEX REPLACE ".*\nsite_packages_dir:([^\n]+).*$" "\\1" PYTHON_SITE_PACKAGES_DIR ${python_config}) STRING(REGEX REPLACE "([0-9]+).([0-9]+)" "\\1\\2" PYTHON_SHORT_VERSION_NO_DOT ${PYTHON_SHORT_VERSION}) set(PYTHON_LIBRARY_NAMES python${PYTHON_SHORT_VERSION} python${PYTHON_SHORT_VERSION_NO_DOT}) if(WIN32) STRING(REPLACE "\\" "/" PYTHON_SITE_PACKAGES_DIR ${PYTHON_SITE_PACKAGES_DIR}) endif(WIN32) FIND_LIBRARY(PYTHON_LIBRARY NAMES ${PYTHON_LIBRARY_NAMES} PATHS ${PYTHON_PREFIX}/lib ${PYTHON_PREFIX}/libs NO_DEFAULT_PATH) set(PYTHONLIBRARY_FOUND TRUE) endif(python_config) # adapted from cmake's builtin FindPythonLibs if(APPLE) CMAKE_FIND_FRAMEWORKS(Python) set(PYTHON_FRAMEWORK_INCLUDES) if(Python_FRAMEWORKS) # If a framework has been selected for the include path, # make sure "-framework" is used to link it. if("${PYTHON_INCLUDE_PATH}" MATCHES "Python\\.framework") set(PYTHON_LIBRARY "") set(PYTHON_DEBUG_LIBRARY "") endif("${PYTHON_INCLUDE_PATH}" MATCHES "Python\\.framework") if(NOT PYTHON_LIBRARY) set (PYTHON_LIBRARY "-framework Python" CACHE FILEPATH "Python Framework" FORCE) endif(NOT PYTHON_LIBRARY) set(PYTHONLIBRARY_FOUND TRUE) endif(Python_FRAMEWORKS) endif(APPLE) endif(PYTHONINTERP_FOUND) if(PYTHONLIBRARY_FOUND) set(PYTHON_LIBRARIES ${PYTHON_LIBRARY}) if(NOT PYTHONLIBRARY_FIND_QUIETLY) message(STATUS "Found Python executable: ${PYTHON_EXECUTABLE}") message(STATUS "Found Python version: ${PYTHON_LONG_VERSION}") endif(NOT PYTHONLIBRARY_FIND_QUIETLY) else(PYTHONLIBRARY_FOUND) if(PYTHONLIBRARY_FIND_REQUIRED) message(FATAL_ERROR "Could not find Python") endif(PYTHONLIBRARY_FIND_REQUIRED) endif(PYTHONLIBRARY_FOUND) endif (EXISTS PYTHON_LIBRARY) telepathy-qt-0.9.3/cmake/modules/MacroWriteBasicCMakeVersionFile.cmake0000644000175200001440000000215312000056607030234 0ustar00collabora-develusers00000000000000# MACRO_WRITE_BASIC_CMAKE_VERSION_FILE( _filename _major _minor _patch) # Writes a file for use as ConfigVersion.cmake file to <_filename>. # See the documentation of FIND_PACKAGE() for details on this. # _filename is the output filename, it should be in the build tree. # _major is the major version number of the project to be installed # _minor is the minor version number of the project to be installed # _patch is the patch version number of the project to be installed # # Copyright (c) 2008, Alexander Neundorf, # Copyright (c) 2010, Collabora Ltd., # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. get_filename_component(_currentListFileDir ${CMAKE_CURRENT_LIST_FILE} PATH) function(MACRO_WRITE_BASIC_CMAKE_VERSION_FILE _filename _version) set(PROJECT_VERSION_FULL ${_version}) configure_file(${_currentListFileDir}/BasicFindPackageVersion.cmake.in "${_filename}" @ONLY) endfunction(MACRO_WRITE_BASIC_CMAKE_VERSION_FILE _major _minor _patch) telepathy-qt-0.9.3/cmake/modules/FindTelepathyFarsight.cmake0000644000175200001440000000401612000056607026377 0ustar00collabora-develusers00000000000000# - Try to find Telepathy-Farsight # Once done this will define # # TELEPATHY_FARSIGHT_FOUND - system has TelepathyFarsight # TELEPATHY_FARSIGHT_INCLUDE_DIR - the TelepathyFarsight include directory # TELEPATHY_FARSIGHT_LIBRARIES - the libraries needed to use TelepathyFarsight # TELEPATHY_FARSIGHT_DEFINITIONS - Compiler switches required for using TelepathyFarsight # Copyright (c) 2010, Dario Freddi # # Redistribution and use is allowed according to the terms of the BSD license. if (TELEPATHY_FARSIGHT_INCLUDE_DIR AND TELEPATHY_FARSIGHT_LIBRARIES) # in cache already set(TelepathyFarsight_FIND_QUIETLY TRUE) else (TELEPATHY_FARSIGHT_INCLUDE_DIR AND TELEPATHY_FARSIGHT_LIBRARIES) set(TelepathyFarsight_FIND_QUIETLY FALSE) endif (TELEPATHY_FARSIGHT_INCLUDE_DIR AND TELEPATHY_FARSIGHT_LIBRARIES) if (NOT WIN32) # use pkg-config to get the directories and then use these values # in the find_path() and find_library() calls find_package(PkgConfig) if (TELEPATHY_FARSIGHT_MIN_VERSION) PKG_CHECK_MODULES(PC_TELEPATHY_FARSIGHT telepathy-farsight>=${TELEPATHY_FARSIGHT_MIN_VERSION}) else (TELEPATHY_FARSIGHT_MIN_VERSION) PKG_CHECK_MODULES(PC_TELEPATHY_FARSIGHT telepathy-farsight) endif (TELEPATHY_FARSIGHT_MIN_VERSION) set(TELEPATHY_FARSIGHT_DEFINITIONS ${PC_TELEPATHY_FARSIGHT_CFLAGS_OTHER}) endif (NOT WIN32) find_path(TELEPATHY_FARSIGHT_INCLUDE_DIR telepathy-farsight/channel.h PATHS ${PC_TELEPATHY_FARSIGHT_INCLUDEDIR} ${PC_TELEPATHY_FARSIGHT_INCLUDE_DIRS} PATH_SUFFIXES telepathy-1.0 ) find_library(TELEPATHY_FARSIGHT_LIBRARIES NAMES telepathy-farsight PATHS ${PC_TELEPATHY_FARSIGHT_LIBDIR} ${PC_TELEPATHY_FARSIGHT_LIBRARY_DIRS} ) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(TelepathyFarsight DEFAULT_MSG TELEPATHY_FARSIGHT_LIBRARIES TELEPATHY_FARSIGHT_INCLUDE_DIR) mark_as_advanced(TELEPATHY_FARSIGHT_INCLUDE_DIR TELEPATHY_FARSIGHT_LIBRARIES) telepathy-qt-0.9.3/cmake/modules/TelepathyDefaults.cmake0000644000175200001440000001562412000056607025605 0ustar00collabora-develusers00000000000000# Enable testing using CTest enable_testing() # Always include srcdir and builddir in include path # This saves typing ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} in about every subdir set(CMAKE_INCLUDE_CURRENT_DIR ON) # put the include dirs which are in the source or build tree # before all other include dirs, so the headers in the sources # are prefered over the already installed ones set(CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE ON) # Use colored output set(CMAKE_COLOR_MAKEFILE ON) # Add an option to decide where to install the config files if (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION} VERSION_GREATER 2.6.2) option(USE_COMMON_CMAKE_PACKAGE_CONFIG_DIR "Prefer to install the Config.cmake files to lib/cmake/ instead of lib//cmake" TRUE) endif (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION} VERSION_GREATER 2.6.2) # Set compiler flags if(CMAKE_COMPILER_IS_GNUCXX) set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -ggdb") set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG") set(CMAKE_CXX_FLAGS_DEBUG "-ggdb -O2 -fno-reorder-blocks -fno-schedule-insns -fno-inline") set(CMAKE_CXX_FLAGS_DEBUGFULL "-O0 -g3 -ggdb -fno-inline") set(CMAKE_CXX_FLAGS_PROFILE "-pg -g3 -ggdb -DNDEBUG") set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -ggdb") set(CMAKE_C_FLAGS_RELEASE "-O2 -DNDEBUG") set(CMAKE_C_FLAGS_DEBUG "-ggdb -O2 -fno-reorder-blocks -fno-schedule-insns -fno-inline") set(CMAKE_C_FLAGS_DEBUGFULL "-O0 -g3 -ggdb -fno-inline") set(CMAKE_C_FLAGS_PROFILE "-pg -g3 -ggdb -DNDEBUG") set(CMAKE_EXE_LINKER_FLAGS_PROFILE "-pg -ggdb") set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "-pg -ggdb") set(DISABLE_WERROR 0 CACHE BOOL "compile without -Werror (normally enabled in development builds)") include(CompilerWarnings) include(TestCXXAcceptsFlag) CHECK_CXX_ACCEPTS_FLAG("-fvisibility=hidden" CXX_FVISIBILITY_HIDDEN) if (CXX_FVISIBILITY_HIDDEN) set(VISIBILITY_HIDDEN_FLAGS "-fvisibility=hidden") else (CXX_FVISIBILITY_HIDDEN) set(VISIBILITY_HIDDEN_FLAGS) endif (CXX_FVISIBILITY_HIDDEN) CHECK_CXX_ACCEPTS_FLAG("-fvisibility-inlines-hidden" CXX_FVISIBILITY_INLINES_HIDDEN) if (CXX_FVISIBILITY_INLINES_HIDDEN) set(VISIBILITY_HIDDEN_FLAGS "${VISIBILITY_HIDDEN_FLAGS} -fvisibility-inlines-hidden") endif (CXX_FVISIBILITY_INLINES_HIDDEN) CHECK_CXX_ACCEPTS_FLAG("-Wdeprecated-declarations" CXX_DEPRECATED_DECLARATIONS) if (CXX_DEPRECATED_DECLARATIONS) set(DEPRECATED_DECLARATIONS_FLAGS "-Wdeprecated-declarations -DTP_QT_DEPRECATED_WARNINGS") else (CXX_DEPRECATED_DECLARATIONS) set(DEPRECATED_DECLARATIONS_FLAGS) endif (CXX_DEPRECATED_DECLARATIONS) if(${TP_QT_NANO_VERSION} EQUAL 0) set(NOT_RELEASE 0) else(${TP_QT_NANO_VERSION} EQUAL 0) set(NOT_RELEASE 1) endif(${TP_QT_NANO_VERSION} EQUAL 0) set(desired all extra sign-compare pointer-arith format-security init-self non-virtual-dtor) set(undesired missing-field-initializers unused-parameter) compiler_warnings(CMAKE_CXX_FLAGS_WARNINGS cxx ${NOT_RELEASE} "${desired}" "${undesired}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_WARNINGS}") set(desired_c all extra declaration-after-statement shadow strict-prototypes missing-prototypes sign-compare nested-externs pointer-arith format-security init-self) set(undesired_c missing-field-initializers unused-parameter) compiler_warnings(CMAKE_C_FLAGS_WARNINGS c ${NOT_RELEASE} "${desired_c}" "${undesired_c}") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_WARNINGS}") # Link development builds with -Wl,--no-add-needed # TODO: binutils 2.21 renames the flag to --no-copy-dt-needed-entries, though it keeps the old # one as a deprecated alias. if(${NOT_RELEASE} EQUAL 1) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-add-needed") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-add-needed") endif(${NOT_RELEASE} EQUAL 1) if(CMAKE_SYSTEM_NAME MATCHES Linux) add_definitions(-D_BSD_SOURCE) endif(CMAKE_SYSTEM_NAME MATCHES Linux) # Compiler coverage set(ENABLE_COMPILER_COVERAGE OFF CACHE BOOL "Enables compiler coverage tests through lcov. Enabling this option will build Telepathy-Qt as a static library.") if (ENABLE_COMPILER_COVERAGE) check_cxx_accepts_flag("-fprofile-arcs -ftest-coverage" CXX_FPROFILE_ARCS) check_cxx_accepts_flag("-ftest-coverage" CXX_FTEST_COVERAGE) if (CXX_FPROFILE_ARCS AND CXX_FTEST_COVERAGE) find_program(LCOV lcov) find_program(LCOV_GENHTML genhtml) if (NOT LCOV OR NOT LCOV_GENHTML) message(FATAL_ERROR "You chose to use compiler coverage tests, but lcov or genhtml could not be found in your PATH.") else (NOT LCOV OR NOT LCOV_GENHTML) message(STATUS "Compiler coverage tests enabled - Telepathy-Qt will be compiled as a static library") set(COMPILER_COVERAGE_FLAGS "-fprofile-arcs -ftest-coverage") endif (NOT LCOV OR NOT LCOV_GENHTML) else (CXX_FPROFILE_ARCS AND CXX_FTEST_COVERAGE) message(FATAL_ERROR "You chose to use compiler coverage tests, but it appears your compiler is not able to support them.") endif (CXX_FPROFILE_ARCS AND CXX_FTEST_COVERAGE) else (ENABLE_COMPILER_COVERAGE) set(COMPILER_COVERAGE_FLAGS) endif (ENABLE_COMPILER_COVERAGE) # gcc under Windows if(MINGW) set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--export-all-symbols -Wl,--disable-auto-import") set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--export-all-symbols -Wl,--disable-auto-import") # we always link against the release version of QT with mingw # (even for debug builds). So we need to define QT_NO_DEBUG # or else QPluginLoader rejects plugins because it thinks # they're built against the wrong QT. add_definitions(-DQT_NO_DEBUG) endif(MINGW) endif(CMAKE_COMPILER_IS_GNUCXX) if(MSVC) set(ESCAPE_CHAR ^) endif(MSVC) set(LIB_SUFFIX "" CACHE STRING "Define suffix of library directory name (32/64)" ) set(LIB_INSTALL_DIR "lib${LIB_SUFFIX}" CACHE PATH "The subdirectory where libraries will be installed (default is ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX})" FORCE) set(INCLUDE_INSTALL_DIR "include" CACHE PATH "The subdirectory where header files will be installed (default is ${CMAKE_INSTALL_PREFIX}/include)" FORCE) set(DATA_INSTALL_DIR "share/telepathy" CACHE PATH "The subdirectory where data files will be installed (default is ${CMAKE_INSTALL_PREFIX}/share/telepathy)" FORCE) telepathy-qt-0.9.3/cmake/modules/FindGLIB2.cmake0000644000175200001440000000321012000056607023542 0ustar00collabora-develusers00000000000000# - Try to find the GLIB2 libraries # Once done this will define # # GLIB2_FOUND - system has glib2 # GLIB2_INCLUDE_DIR - the glib2 include directory # GLIB2_LIBRARIES - glib2 library # Copyright (c) 2008 Laurent Montel, # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. if(GLIB2_INCLUDE_DIR AND GLIB2_LIBRARIES) # Already in cache, be silent set(GLIB2_FIND_QUIETLY TRUE) endif(GLIB2_INCLUDE_DIR AND GLIB2_LIBRARIES) find_package(PkgConfig) pkg_check_modules(PC_LibGLIB2 glib-2.0) find_path(GLIB2_MAIN_INCLUDE_DIR NAMES glib.h HINTS ${PC_LibGLIB2_INCLUDEDIR} PATH_SUFFIXES glib-2.0) find_library(GLIB2_LIBRARY NAMES glib-2.0 HINTS ${PC_LibGLIB2_LIBDIR} ) set(GLIB2_LIBRARIES ${GLIB2_LIBRARY}) # search the glibconfig.h include dir under the same root where the library is found get_filename_component(glib2LibDir "${GLIB2_LIBRARIES}" PATH) find_path(GLIB2_INTERNAL_INCLUDE_DIR glibconfig.h PATH_SUFFIXES glib-2.0/include HINTS ${PC_LibGLIB2_INCLUDEDIR} "${glib2LibDir}" ${CMAKE_SYSTEM_LIBRARY_PATH}) set(GLIB2_INCLUDE_DIR "${GLIB2_MAIN_INCLUDE_DIR}") # not sure if this include dir is optional or required # for now it is optional if(GLIB2_INTERNAL_INCLUDE_DIR) set(GLIB2_INCLUDE_DIR ${GLIB2_INCLUDE_DIR} "${GLIB2_INTERNAL_INCLUDE_DIR}") endif(GLIB2_INTERNAL_INCLUDE_DIR) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(GLIB2 DEFAULT_MSG GLIB2_LIBRARIES GLIB2_MAIN_INCLUDE_DIR) mark_as_advanced(GLIB2_INCLUDE_DIR GLIB2_LIBRARIES) telepathy-qt-0.9.3/cmake/modules/FindGIO.cmake0000644000175200001440000000213112000056607023362 0ustar00collabora-develusers00000000000000# - Try to find the GIO libraries # Once done this will define # # GIO_FOUND - system has GIO # GIO_INCLUDE_DIR - the GIO include directory # GIO_LIBRARIES - GIO library # # Copyright (C) 2011 Collabora Ltd. # Copyright (C) 2011 Nokia Corporation # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. if(GIO_INCLUDE_DIR AND GIO_LIBRARIES) # Already in cache, be silent set(GIO_FIND_QUIETLY TRUE) endif(GIO_INCLUDE_DIR AND GIO_LIBRARIES) include(UsePkgConfig) pkg_check_modules(PC_LibGIO gio-2.0) find_path(GIO_MAIN_INCLUDE_DIR NAMES gio/gio.h HINTS ${PC_LibGIO_INCLUDEDIR} PATH_SUFFIXES glib-2.0) find_library(GIO_LIBRARY NAMES gio-2.0 HINTS ${PC_LibGIO_LIBDIR}) set(GIO_INCLUDE_DIR "${GIO_MAIN_INCLUDE_DIR}") set(GIO_LIBRARIES "${GIO_LIBRARY}") include(FindPackageHandleStandardArgs) find_package_handle_standard_args(GIO DEFAULT_MSG GIO_LIBRARIES GIO_MAIN_INCLUDE_DIR) mark_as_advanced(GIO_INCLUDE_DIR GIO_LIBRARIES) telepathy-qt-0.9.3/cmake/modules/FindTelepathyFarstream.cmake0000644000175200001440000000420312000056607026552 0ustar00collabora-develusers00000000000000# - Try to find Telepathy-Farstream # Once done this will define # # TELEPATHY_FARSTREAM_FOUND - system has TelepathyFarstream # TELEPATHY_FARSTREAM_INCLUDE_DIR - the TelepathyFarstream include directory # TELEPATHY_FARSTREAM_LIBRARIES - the libraries needed to use TelepathyFarstream # TELEPATHY_FARSTREAM_DEFINITIONS - Compiler switches required for using TelepathyFarstream # Copyright (c) 2010, Dario Freddi # Copyright (c) 2011, Mateu Batle # # Redistribution and use is allowed according to the terms of the BSD license. if (TELEPATHY_FARSTREAM_INCLUDE_DIR AND TELEPATHY_FARSTREAM_LIBRARIES) # in cache already set(TelepathyFarstream_FIND_QUIETLY TRUE) else (TELEPATHY_FARSTREAM_INCLUDE_DIR AND TELEPATHY_FARSTREAM_LIBRARIES) set(TelepathyFarstream_FIND_QUIETLY FALSE) endif (TELEPATHY_FARSTREAM_INCLUDE_DIR AND TELEPATHY_FARSTREAM_LIBRARIES) if (NOT WIN32) # use pkg-config to get the directories and then use these values # in the find_path() and find_library() calls find_package(PkgConfig) if (TELEPATHY_FARSTREAM_MIN_VERSION) PKG_CHECK_MODULES(PC_TELEPATHY_FARSTREAM telepathy-farstream>=${TELEPATHY_FARSTREAM_MIN_VERSION}) else (TELEPATHY_FARSTREAM_MIN_VERSION) PKG_CHECK_MODULES(PC_TELEPATHY_FARSTREAM telepathy-farstream) endif (TELEPATHY_FARSTREAM_MIN_VERSION) set(TELEPATHY_FARSTREAM_DEFINITIONS ${PC_TELEPATHY_FARSTREAM_CFLAGS_OTHER}) endif (NOT WIN32) find_path(TELEPATHY_FARSTREAM_INCLUDE_DIR telepathy-farstream/telepathy-farstream.h PATHS ${PC_TELEPATHY_FARSTREAM_INCLUDEDIR} ${PC_TELEPATHY_FARSTREAM_INCLUDE_DIRS} PATH_SUFFIXES telepathy-1.0 ) find_library(TELEPATHY_FARSTREAM_LIBRARIES NAMES telepathy-farstream PATHS ${PC_TELEPATHY_FARSTREAM_LIBDIR} ${PC_TELEPATHY_FARSTREAM_LIBRARY_DIRS} ) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(TelepathyFarstream DEFAULT_MSG TELEPATHY_FARSTREAM_LIBRARIES TELEPATHY_FARSTREAM_INCLUDE_DIR) mark_as_advanced(TELEPATHY_FARSTREAM_INCLUDE_DIR TELEPATHY_FARSTREAM_LIBRARIES) telepathy-qt-0.9.3/cmake/modules/Doxygen.cmake0000644000175200001440000000260212000056607023563 0ustar00collabora-develusers00000000000000# generate documentation on 'make doxygen-doc' file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/doc) find_package(Doxygen) if(DOXYGEN_FOUND) find_program(QHELPGENERATOR_EXECUTABLE qhelpgenerator) mark_as_advanced(QHELPGENERATOR_EXECUTABLE) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(QHELPGENERATOR DEFAULT_MSG QHELPGENERATOR_EXECUTABLE) set(QT_TAGS_FILE ${QT_DOC_DIR}/html/qt.tags) if(EXISTS ${QT_TAGS_FILE}) find_package(Perl) if (NOT PERL_FOUND) message(WARNING "Perl was not found. Qt crosslinks in uploaded docs won't be valid.") endif (NOT PERL_FOUND) else(EXISTS ${QT_TAGS_FILE}) message(WARNING "html/qt.tags not found in ${QT_DOC_DIR}. Set the QT_DOC_DIR variable to point to its location to enable crosslinking.") unset(QT_TAGS_FILE) endif(EXISTS ${QT_TAGS_FILE}) set(abs_top_builddir ${CMAKE_BINARY_DIR}) set(abs_top_srcdir ${CMAKE_SOURCE_DIR}) set(GENERATE_HTML YES) set(GENERATE_RTF NO) set(GENERATE_CHM NO) set(GENERATE_CHI NO) set(GENERATE_LATEX NO) set(GENERATE_MAN NO) set(GENERATE_XML NO) set(GENERATE_QHP ${QHELPGENERATOR_FOUND}) configure_file(doxygen.cfg.in ${CMAKE_BINARY_DIR}/doxygen.cfg) add_custom_target(doxygen-doc ${DOXYGEN_EXECUTABLE} ${CMAKE_BINARY_DIR}/doxygen.cfg) endif(DOXYGEN_FOUND) telepathy-qt-0.9.3/cmake/modules/FindFarstream.cmake0000644000175200001440000000340512000056607024675 0ustar00collabora-develusers00000000000000# - Try to find Farstream # Once done this will define # # FARSTREAM_FOUND - system has Farstream # FARSTREAM_INCLUDE_DIR - the Farstream include directory # FARSTREAM_LIBRARIES - the libraries needed to use Farstream # FARSTREAM_DEFINITIONS - Compiler switches required for using Farstream # Copyright (c) 2010, Dario Freddi # Copyright (c) 2012, George Kiagiadakis # # Redistribution and use is allowed according to the terms of the BSD license. if (FARSTREAM_INCLUDE_DIR AND FARSTREAM_LIBRARIES) # in cache already set(Farstream_FIND_QUIETLY TRUE) else (FARSTREAM_INCLUDE_DIR AND FARSTREAM_LIBRARIES) set(Farstream_FIND_QUIETLY FALSE) endif (FARSTREAM_INCLUDE_DIR AND FARSTREAM_LIBRARIES) if (NOT WIN32) # use pkg-config to get the directories and then use these values # in the find_path() and find_library() calls find_package(PkgConfig) if (FARSTREAM_MIN_VERSION) PKG_CHECK_MODULES(PC_FARSTREAM farstream-0.1>=${FARSTREAM_MIN_VERSION}) else (FARSTREAM_MIN_VERSION) PKG_CHECK_MODULES(PC_FARSTREAM farstream-0.1) endif (FARSTREAM_MIN_VERSION) set(FARSTREAM_DEFINITIONS ${PC_FARSTREAM_CFLAGS_OTHER}) endif (NOT WIN32) find_path(FARSTREAM_INCLUDE_DIR farstream/fs-conference.h PATHS ${PC_FARSTREAM_INCLUDEDIR} ${PC_FARSTREAM_INCLUDE_DIRS} PATH_SUFFIXES farstream-0.1 ) find_library(FARSTREAM_LIBRARIES NAMES farstream-0.1 PATHS ${PC_FARSTREAM_LIBDIR} ${PC_FARSTREAM_LIBRARY_DIRS} ) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(Farstream DEFAULT_MSG FARSTREAM_LIBRARIES FARSTREAM_INCLUDE_DIR) mark_as_advanced(FARSTREAM_INCLUDE_DIR FARSTREAM_LIBRARIES) telepathy-qt-0.9.3/cmake/modules/FindGObject.cmake0000644000175200001440000000427112000056607024270 0ustar00collabora-develusers00000000000000# - Try to find GObject # Once done this will define # # GOBJECT_FOUND - system has GObject # GOBJECT_INCLUDE_DIR - the GObject include directory # GOBJECT_LIBRARIES - the libraries needed to use GObject # GOBJECT_DEFINITIONS - Compiler switches required for using GObject # Copyright (c) 2008 Helio Chissini de Castro, # (c)2006, Tim Beaulen IF (GOBJECT_INCLUDE_DIR AND GOBJECT_LIBRARIES) # in cache already SET(GObject_FIND_QUIETLY TRUE) ELSE (GOBJECT_INCLUDE_DIR AND GOBJECT_LIBRARIES) SET(GObject_FIND_QUIETLY FALSE) ENDIF (GOBJECT_INCLUDE_DIR AND GOBJECT_LIBRARIES) IF (NOT WIN32) FIND_PACKAGE(PkgConfig REQUIRED) # use pkg-config to get the directories and then use these values # in the FIND_PATH() and FIND_LIBRARY() calls PKG_CHECK_MODULES(PKG_GOBJECT2 REQUIRED gobject-2.0) SET(GOBJECT_DEFINITIONS ${PKG_GOBJECT2_CFLAGS}) ENDIF (NOT WIN32) FIND_PATH(GOBJECT_INCLUDE_DIR gobject/gobject.h PATHS ${PKG_GOBJECT2_INCLUDE_DIRS} /usr/include/glib-2.0/ PATH_SUFFIXES glib-2.0 ) FIND_LIBRARY(_GObjectLibs NAMES gobject-2.0 PATHS ${PKG_GOBJECT2_LIBRARY_DIRS} ) FIND_LIBRARY(_GModuleLibs NAMES gmodule-2.0 PATHS ${PKG_GOBJECT2_LIBRARY_DIRS} ) FIND_LIBRARY(_GThreadLibs NAMES gthread-2.0 PATHS ${PKG_GOBJECT2_LIBRARY_DIRS} ) FIND_LIBRARY(_GLibs NAMES glib-2.0 PATHS ${PKG_GOBJECT2_LIBRARY_DIRS} ) IF (WIN32) SET (GOBJECT_LIBRARIES ${_GObjectLibs} ${_GModuleLibs} ${_GThreadLibs} ${_GLibs}) ELSE (WIN32) SET (GOBJECT_LIBRARIES ${PKG_GOBJECT2_LIBRARIES}) ENDIF (WIN32) IF (GOBJECT_INCLUDE_DIR AND GOBJECT_LIBRARIES) SET(GOBJECT_FOUND TRUE) ELSE (GOBJECT_INCLUDE_DIR AND GOBJECT_LIBRARIES) SET(GOBJECT_FOUND FALSE) ENDIF (GOBJECT_INCLUDE_DIR AND GOBJECT_LIBRARIES) IF (GOBJECT_FOUND) IF (NOT GObject_FIND_QUIETLY) MESSAGE(STATUS "Found GObject libraries: ${GOBJECT_LIBRARIES}") MESSAGE(STATUS "Found GObject includes : ${GOBJECT_INCLUDE_DIR}") ENDIF (NOT GObject_FIND_QUIETLY) ELSE (GOBJECT_FOUND) IF (GObject_FIND_REQUIRED) MESSAGE(STATUS "Could NOT find GObject") ENDIF(GObject_FIND_REQUIRED) ENDIF (GOBJECT_FOUND) MARK_AS_ADVANCED(GOBJECT_INCLUDE_DIR GOBJECT_LIBRARIES) telepathy-qt-0.9.3/cmake/modules/FindDBus.cmake0000644000175200001440000000267412000056607023615 0ustar00collabora-develusers00000000000000# - Try to find the low-level D-Bus library # Once done this will define # # DBUS_FOUND - system has D-Bus # DBUS_INCLUDE_DIRS - the D-Bus include directories # DBUS_INCLUDE_DIR - the D-Bus include directory # DBUS_ARCH_INCLUDE_DIR - the D-Bus architecture-specific include directory # DBUS_LIBRARIES - the libraries needed to use D-Bus # Copyright (c) 2012, George Kiagiadakis # Copyright (c) 2008, Kevin Kofler, # modeled after FindLibArt.cmake: # Copyright (c) 2006, Alexander Neundorf, # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. if (NOT WIN32) find_package(PkgConfig) pkg_check_modules(PC_DBUS dbus-1) endif (NOT WIN32) find_path(DBUS_INCLUDE_DIR dbus/dbus.h PATHS ${PC_DBUS_INCLUDE_DIRS} PATH_SUFFIXES dbus-1.0 ) find_path(DBUS_ARCH_INCLUDE_DIR dbus/dbus-arch-deps.h PATHS ${PC_DBUS_INCLUDE_DIRS} HINTS ${CMAKE_LIBRARY_PATH}/dbus-1.0/include ${CMAKE_SYSTEM_LIBRARY_PATH}/dbus-1.0/include ) find_library(DBUS_LIBRARIES NAMES dbus-1 PATHS ${PC_DBUS_LIBRARY_DIRS} ) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(DBus DBUS_INCLUDE_DIR DBUS_ARCH_INCLUDE_DIR DBUS_LIBRARIES) set(DBUS_INCLUDE_DIRS ${DBUS_INCLUDE_DIR} ${DBUS_ARCH_INCLUDE_DIR}) mark_as_advanced(DBUS_INCLUDE_DIR DBUS_ARCH_INCLUDE_DIR DBUS_LIBRARIES) telepathy-qt-0.9.3/cmake/modules/FindLibPython.py0000644000175200001440000000101212000056607024221 0ustar00collabora-develusers00000000000000# Copyright (c) 2007, Simon Edwards # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. import sys import distutils.sysconfig print("exec_prefix:%s" % sys.exec_prefix) print("short_version:%s" % sys.version[:3]) print("long_version:%s" % sys.version.split()[0]) print("py_inc_dir:%s" % distutils.sysconfig.get_python_inc()) print("site_packages_dir:%s" % distutils.sysconfig.get_python_lib(plat_specific=1)) telepathy-qt-0.9.3/cmake/modules/FindGStreamer.cmake0000644000175200001440000000607212000056607024645 0ustar00collabora-develusers00000000000000# - Try to find GStreamer # Once done this will define # # GSTREAMER_FOUND - system has GStreamer # GSTREAMER_INCLUDE_DIR - the GStreamer include directory # GSTREAMER_LIBRARIES - the libraries needed to use GStreamer # GSTREAMER_DEFINITIONS - Compiler switches required for using GStreamer # Copyright (c) 2006, Tim Beaulen # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. # TODO: Other versions --> GSTREAMER_X_Y_FOUND (Example: GSTREAMER_0_8_FOUND and GSTREAMER_0_10_FOUND etc) IF (GSTREAMER_INCLUDE_DIR AND GSTREAMER_LIBRARIES AND GSTREAMER_BASE_LIBRARY AND GSTREAMER_INTERFACE_LIBRARY) # in cache already SET(GSTREAMER_FIND_QUIETLY TRUE) ELSE (GSTREAMER_INCLUDE_DIR AND GSTREAMER_LIBRARIES AND GSTREAMER_BASE_LIBRARY AND GSTREAMER_INTERFACE_LIBRARY) SET(GSTREAMER_FIND_QUIETLY FALSE) ENDIF (GSTREAMER_INCLUDE_DIR AND GSTREAMER_LIBRARIES AND GSTREAMER_BASE_LIBRARY AND GSTREAMER_INTERFACE_LIBRARY) IF (NOT WIN32) # use pkg-config to get the directories and then use these values # in the FIND_PATH() and FIND_LIBRARY() calls FIND_PACKAGE(PkgConfig) PKG_CHECK_MODULES(PC_GSTREAMER gstreamer-0.10) #MESSAGE(STATUS "DEBUG: GStreamer include directory = ${GSTREAMER_INCLUDE_DIRS}") #MESSAGE(STATUS "DEBUG: GStreamer link directory = ${GSTREAMER_LIBRARY_DIRS}") #MESSAGE(STATUS "DEBUG: GStreamer CFlags = ${GSTREAMER_CFLAGS_OTHER}") SET(GSTREAMER_DEFINITIONS ${PC_GSTREAMER_CFLAGS_OTHER}) ENDIF (NOT WIN32) FIND_PATH(GSTREAMER_INCLUDE_DIR gst/gst.h PATHS ${PC_GSTREAMER_INCLUDEDIR} ${PC_GSTREAMER_INCLUDE_DIRS} PATH_SUFFIXES gstreamer-0.10 ) FIND_LIBRARY(GSTREAMER_LIBRARIES NAMES gstreamer-0.10 PATHS ${PC_GSTREAMER_LIBDIR} ${PC_GSTREAMER_LIBRARY_DIRS} ) FIND_LIBRARY(GSTREAMER_BASE_LIBRARY NAMES gstbase-0.10 PATHS ${PC_GSTREAMER_LIBDIR} ${PC_GSTREAMER_LIBRARY_DIRS} ) FIND_LIBRARY(GSTREAMER_INTERFACE_LIBRARY NAMES gstinterfaces-0.10 PATHS ${PC_GSTREAMER_LIBDIR} ${PC_GSTREAMER_LIBRARY_DIRS} ) IF (GSTREAMER_INCLUDE_DIR) #MESSAGE(STATUS "DEBUG: Found GStreamer include dir: ${GSTREAMER_INCLUDE_DIR}") ELSE (GSTREAMER_INCLUDE_DIR) MESSAGE(STATUS "GStreamer: WARNING: include dir not found") ENDIF (GSTREAMER_INCLUDE_DIR) IF (GSTREAMER_LIBRARIES) #MESSAGE(STATUS "DEBUG: Found GStreamer library: ${GSTREAMER_LIBRARIES}") ELSE (GSTREAMER_LIBRARIES) MESSAGE(STATUS "GStreamer: WARNING: library not found") ENDIF (GSTREAMER_LIBRARIES) IF (GSTREAMER_INTERFACE_LIBRARY) #MESSAGE(STATUS "DEBUG: Found GStreamer interface library: ${GSTREAMER_INTERFACE_LIBRARY}") ELSE (GSTREAMER_INTERFACE_LIBRARY) MESSAGE(STATUS "GStreamer: WARNING: interface library not found") ENDIF (GSTREAMER_INTERFACE_LIBRARY) INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(GStreamer DEFAULT_MSG GSTREAMER_LIBRARIES GSTREAMER_INCLUDE_DIR GSTREAMER_BASE_LIBRARY GSTREAMER_INTERFACE_LIBRARY) MARK_AS_ADVANCED(GSTREAMER_INCLUDE_DIR GSTREAMER_LIBRARIES GSTREAMER_BASE_LIBRARY GSTREAMER_INTERFACE_LIBRARY) telepathy-qt-0.9.3/cmake/modules/FindDBusGLib.cmake0000644000175200001440000000405412000056607024345 0ustar00collabora-develusers00000000000000# Try to find the GLib binding of the DBus library # DBUS_GLIB_FOUND - system has dbus-glib # DBUS_GLIB_INCLUDE_DIR - the dbus-glib include directory # DBUS_GLIB_LIBRARIES - Link these to use dbus-glib # Copyright (c) 2008, Allen Winter # Copyright (c) 2009, Andre Moreira Magalhaes # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. set(DBUS_GLIB_FIND_REQUIRED ${DBusGLib_FIND_REQUIRED}) if(DBUS_GLIB_INCLUDE_DIR AND DBUS_GLIB_LIBRARIES) # Already in cache, be silent set(DBUS_GLIB_FIND_QUIETLY TRUE) endif(DBUS_GLIB_INCLUDE_DIR AND DBUS_GLIB_LIBRARIES) if(NOT WIN32) find_package(PkgConfig) if (DBusGLib_FIND_VERSION_EXACT) pkg_check_modules(PC_DBUS_GLIB QUIET dbus-glib-1=${DBusGLib_FIND_VERSION}) else (DBusGLib_FIND_VERSION_EXACT) if (DBusGLib_FIND_VERSION) pkg_check_modules(PC_DBUS_GLIB REQUIRED dbus-glib-1>=${DBusGLib_FIND_VERSION}) else (DBusGLib_FIND_VERSION) pkg_check_modules(PC_DBUS_GLIB REQUIRED dbus-glib-1) endif (DBusGLib_FIND_VERSION) endif (DBusGLib_FIND_VERSION_EXACT) endif(NOT WIN32) find_path(DBUS_GLIB_INCLUDE_DIR NAMES dbus-1.0/dbus/dbus-glib.h HINTS ${PC_DBUS_GLIB_INCLUDEDIR} ${PC_DBUS_GLIB_INCLUDE_DIRS} ) find_path(DBUS_GLIB_LOWLEVEL_INCLUDE_DIR NAMES dbus/dbus-arch-deps.h HINTS ${PC_DBUS_GLIB_INCLUDEDIR} ${PC_DBUS_GLIB_INCLUDE_DIRS} ) # HACK! Workaround appending "/dbus-1.0" to the HINTS above not working for some reason. set(DBUS_GLIB_INCLUDE_DIRS "${DBUS_GLIB_INCLUDE_DIR}/dbus-1.0" "${DBUS_GLIB_LOWLEVEL_INCLUDE_DIR}" ) find_library(DBUS_GLIB_LIBRARIES NAMES dbus-glib-1 HINTS ${PC_DBUS_GLIB_LIBDIR} ${PC_DBUS_GLIB_LIBRARY_DIRS} ) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(DBUS_GLIB DEFAULT_MSG DBUS_GLIB_LIBRARIES DBUS_GLIB_INCLUDE_DIR) telepathy-qt-0.9.3/cmake/modules/TelepathyDist.cmake0000644000175200001440000001235012000056607024732 0ustar00collabora-develusers00000000000000# setup make dist add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/${PACKAGE_NAME}-${PACKAGE_VERSION}.tar.gz COMMAND git archive --format=tar --prefix=${PACKAGE_NAME}-${PACKAGE_VERSION}/ HEAD | gzip > ${CMAKE_BINARY_DIR}/${PACKAGE_NAME}-${PACKAGE_VERSION}.tar.gz WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) add_custom_target(create-source-working-dir rm -rf ${PACKAGE_NAME}-${PACKAGE_VERSION} && gzip -df ${PACKAGE_NAME}-${PACKAGE_VERSION}.tar.gz && tar -xf ${PACKAGE_NAME}-${PACKAGE_VERSION}.tar && rm ${PACKAGE_NAME}-${PACKAGE_VERSION}.tar* && cd ${PACKAGE_NAME}-${PACKAGE_VERSION}/ && rm -rf doc && mkdir doc && cp -R ${CMAKE_BINARY_DIR}/doc/html doc/ WORKING_DIRECTORY ${CMAKE_BINARY_DIR} DEPENDS ${CMAKE_BINARY_DIR}/${PACKAGE_NAME}-${PACKAGE_VERSION}.tar.gz COMMENT "Generating working source dir for the dist tarball") add_dependencies(create-source-working-dir doxygen-doc) add_custom_target(dist-hook chmod u+w ${CMAKE_BINARY_DIR}/${PACKAGE_NAME}-${PACKAGE_VERSION}/ChangeLog && git log --stat > ${CMAKE_BINARY_DIR}/${PACKAGE_NAME}-${PACKAGE_VERSION}/ChangeLog || git log > ${CMAKE_BINARY_DIR}/${PACKAGE_NAME}-${PACKAGE_VERSION}/ChangeLog WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMENT "Updating Changelog") add_dependencies(dist-hook create-source-working-dir) add_custom_target(dist tar --format=ustar -chf - ${PACKAGE_NAME}-${PACKAGE_VERSION} | GZIP=--best gzip -c > ${PACKAGE_NAME}-${PACKAGE_VERSION}.tar.gz WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMENT "Generating dist tarball") add_dependencies(dist dist-hook) # setup make distcheck add_custom_target(distcheck rm -rf build && mkdir build && cd build && cmake .. && make && make check WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/${PACKAGE_NAME}-${PACKAGE_VERSION}/ COMMENT "Testing successful tarball build") add_dependencies(distcheck dist) # CPack set(ENABLE_CPACK OFF CACHE BOOL "Enables CPack targets generation") if (ENABLE_CPACK) include(InstallRequiredSystemLibraries) SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "A high-level binding for Telepathy in Qt") SET(CPACK_PACKAGE_VENDOR "Collabora Ltd.") SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README") SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/COPYING") SET(CPACK_PACKAGE_VERSION_MAJOR ${TP_QT_MAJOR_VERSION}) SET(CPACK_PACKAGE_VERSION_MINOR ${TP_QT_MINOR_VERSION}) SET(CPACK_PACKAGE_VERSION_PATCH ${TP_QT_MICRO_VERSION}) SET(CPACK_PACKAGE_INSTALL_DIRECTORY "TelepathyQt") SET(CPACK_PACKAGE_CONTACT "telepathy@lists.freedesktop.org") set(CPACK_SOURCE_IGNORE_FILES "/build/;/.bzr/;~$;/.git/;/.kdev4/;${CPACK_SOURCE_IGNORE_FILES}") IF(WIN32 AND NOT UNIX) # There is a bug in NSI that does not handle full unix paths properly. Make # sure there is at least one set of four (4) backlasshes. #SET(CPACK_PACKAGE_ICON "${CMake_SOURCE_DIR}/Utilities/Release\\\\InstallIcon.bmp") #SET(CPACK_NSIS_INSTALLED_ICON_NAME "bin\\\\MyExecutable.exe") SET(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY} TelepathyQt") #SET(CPACK_NSIS_HELP_LINK "http:\\\\\\\\www.github.com") #SET(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\www.my-personal-home-page.com") #SET(CPACK_NSIS_CONTACT "me@my-personal-home-page.com") SET(CPACK_NSIS_MODIFY_PATH ON) ELSE(WIN32 AND NOT UNIX) #SET(CPACK_STRIP_FILES "bin/MyExecutable") SET(CPACK_SOURCE_STRIP_FILES "") ENDIF(WIN32 AND NOT UNIX) #SET(CPACK_PACKAGE_EXECUTABLES "MyExecutable" "My Executable") if (APPLE) set(CPACK_SET_DESTDIR ON) set(CPACK_PACKAGE_RELOCATABLE OFF) endif (APPLE) #name components set(CPACK_COMPONENT_MAINLIBRARY_DISPLAY_NAME "TelepathyQt main components") set(CPACK_COMPONENT_FARSIGHT_DISPLAY_NAME "TelepathyQt Farsight support") set(CPACK_COMPONENT_HEADERS_DISPLAY_NAME "Development files for TelepathyQt") set(CPACK_COMPONENT_FARSIGHT_HEADERS_DISPLAY_NAME "Development files for TelepathyQt-Farsight") #components description set(CPACK_COMPONENT_MAINLIBRARY_DESCRIPTION "The main TelepathyQt library") set(CPACK_COMPONENT_FARSIGHT_DESCRIPTION "The TelepathyQt-Farsight library") set(CPACK_COMPONENT_HEADERS_DESCRIPTION "Development files for TelepathyQt") set(CPACK_COMPONENT_FARSIGHT_HEADERS_DESCRIPTION "Development files for TelepathyQt-Farsight") set(CPACK_COMPONENT_HEADERS_DEPENDS mainlibrary) set(CPACK_COMPONENT_FARSIGHT_DEPENDS mainlibrary) set(CPACK_COMPONENT_FARSIGHT_HEADERS_DEPENDS mainlibrary farsight) #installation types set(CPACK_ALL_INSTALL_TYPES User Developer Minimal) set(CPACK_COMPONENT_MAINLIBRARY_INSTALL_TYPES User Developer Minimal) set(CPACK_COMPONENT_FARSIGHT_INSTALL_TYPES User Developer) set(CPACK_COMPONENT_HEADERS_INSTALL_TYPES Developer) set(CPACK_COMPONENT_FARSIGHT_HEADERS_INSTALL_TYPES Developer) # Leave this as the last declaration, always!!! include(CPack) endif (ENABLE_CPACK) telepathy-qt-0.9.3/doxygen.cfg.in0000644000175200001440000017246512000056607021176 0ustar00collabora-develusers00000000000000# This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = ${PROJECT_NAME} # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = ${PACKAGE_VERSION} # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = ${abs_top_builddir}/doc # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, # Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), # Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, # Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish, # and Ukrainian. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = "The \$name class" \ "The \$name file" \ is \ provides \ specifies \ contains \ represents \ a \ an \ the # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = YES # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = ${abs_top_srcdir} # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = $abs_top_srcdir} ${abs_top_builddir} # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = YES # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 4 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen to replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = NO # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = YES # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = NO # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespace are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = YES # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = NO # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = NO # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = NO # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 0 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = NO # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = NO # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = NO # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = YES # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "\$file:\$line: \$text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = doxygen.log #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = ${abs_top_srcdir}/TelepathyQt ${abs_top_builddir}/TelepathyQt # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = *.cpp \ *.cc \ *.cxx \ *.h \ *.hh \ *.hxx \ *.hpp \ *.dox # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = */.svn/* \ */.git/* \ */cmake/* \ *.moc.* \ */tests/* \ *-internal.* \ future* # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = ${abs_top_srcdir}/examples # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = * # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = YES # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = NO # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = NO # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. Otherwise they will link to the documentstion. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = ${GENERATE_HTML} # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = @abs_top_srcdir@/doxygen-header.html # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = @abs_top_srcdir@/doxygen-footer.html # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = @abs_top_srcdir@/doxygen.css # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = NO # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = ${GENERATE_CHM} # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = ../${PROJECT}.chm # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = ${HHC_PATH} # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = ${GENERATE_CHI} # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = YES # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to FRAME, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are # probably better off using the HTML help feature. Other possible values # for this tag are: HIERARCHIES, which will generate the Groups, Directories, # and Class Hiererachy pages using a tree view instead of an ordered list; # ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which # disables this behavior completely. For backwards compatibility with previous # releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE # respectively. GENERATE_TREEVIEW = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = ${GENERATE_LATEX} # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = ${PAPER_SIZE} # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = NO # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = NO # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = YES # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = ${GENERATE_RTF} # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = ${GENERATE_MAN} # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .1 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = ${GENERATE_XML} # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. This is useful # if you want to understand what is going on. On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. MACRO_EXPANSION = YES EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = ${abs_top_srcdir} ${abs_top_builddir} # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = * # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. # FIXME: for some reason, doxygen doesn't seem to emit a doxygen= attribute at all # in the element if there is no location, in which case there is nothing for # installdox to rewrite. TAGFILES = ${QT_TAGS_FILE}=/you/forgot/to/run/installdox # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = ${abs_top_builddir}/doc/html/${PACKAGE_NAME}.tags # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = ${PERL_PATH} #--------------------------------------------------------------------------- # Configuration options related to the dot tool # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = NO # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = ${HAVE_DOT} # By default doxygen will write a font called FreeSans.ttf to the output # directory and reference it in all dot files that doxygen generates. This # font does not include all possible unicode characters however, so when you need # these (or just want a differently looking font) you can specify the font name # using DOT_FONTNAME. You need need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = FreeSans # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = NO # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = ${DOT_PATH} # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is enabled by default, which results in a transparent # background. Warning: Depending on the platform used, enabling this option # may lead to badly anti-aliased labels on the edges of a graph (i.e. they # become hard to read). DOT_TRANSPARENT = YES # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = NO GENERATE_QHP = ${GENERATE_QHP} QHP_NAMESPACE = "org.freedesktop.Telepathy.Qt" QHP_VIRTUAL_FOLDER = "${PROJECT_NAME}-${PACKAGE_VERSION}" QCH_FILE = ${abs_top_builddir}/doc/help/telepathy-qt.qch QHG_LOCATION = ${QHELPGENERATOR_EXECUTABLE} ### TelepathyQt Settings ALIASES = \ "intern=\parInternal use only." \ "reimp=\parReimplemented from superclass." \ "obsolete=@deprecated" \ "feature=\xrefitem features \"Feature(s)\" \"Features\"" \ "maintainer=\xrefitem maintainers \"Maintainer(s)\" \"Maintainers\"" \ "unmaintained=\xrefitem unmaintained \"Unmaintained\" \"Unmaintained\"" \ "requirement=\xrefitem requirements \"Requirement(s)\" \"Requirements\"" \ "faq=\xrefitem FAQ \"F.A.Q.\" \"F.A.Q.\"" \ "authors=\xrefitem authors \"Author(s)\" \"Authors\"" \ "maintainers=\xrefitem maintainers \"Maintainer(s)\" \"Maintainers\"" \ "glossary=\xrefitem glossary \"TelepathyQt Glossary\" \"TelepathyQt Glossary\"" \ "acronym=\b "\ "licenses=\xrefitem licenses \"License(s)\" \"Licenses\"" \ "short=@brief "\ "FIXME=\xrefitem fixme \"Fixme\" \"Fixme\"" \ "bc=\xrefitem bc \"Binary Compatible\" \"Binary Compatible\"" \ "telepathy=Telepathy" \ "telepathy_spec=Telepathy specification" \ "dbus=D-Bus" \ "artistic=Artistic" \ "bsd=BSD" \ "x11=X11" \ "gpl=GPL" \ "lgpl=LGPL" \ "qpl=QPL" PREDEFINED = DOXYGEN_SHOULD_SKIP_THIS \ TP_QT_EXPORT="" \ TP_QT_NO_EXPORT="" \ Q_SLOTS="slots" \ Q_SIGNALS="signals" telepathy-qt-0.9.3/NEWS0000644000175200001440000017420512000056607017124 0ustar00collabora-develusers00000000000000telepathy-qt 0.9.3 (2012-07-13) ================================= The "We promised, we delivered" release. Enhancements: * Added ClientTypes bindings to Contact. * Fixed deprecation macros, and added TP_QT_EXPORT_DEPRECATED. * Ported SimpleCallObserver to also handle Call1 calls. * Deprecated Farsight and StreamedMedia. Fixes: * Removed occurencies of deprecated tp-glib functions from the DBus tube tests. * Fixed DISABLE_WERROR, which now works as expected. * Fixed linking of the DBus tube tests with strict linkers like gold. * Synced tests/lib/glib/utils.* to remove deprecation warnings. * Removed occurencies of the deprecated tp_connection_new from Farsight/Farstream. telepathy-qt 0.9.2 (2012-07-04) ================================= The "We were at aKademy and we got bored" release. Enhancements: * Introducing Telepathy-Qt-Service, a new static library that contains experimental service-side bindings. For the moment this exposes the required low-level interfaces for writing connection managers, as well as some basic high-level API. * Renamed AccountManager::accountForPath() and AccountManager::accountsForPaths() to accountForObjectPath() and accountsForObjectPaths() respectively, deprecating the old names. * Added bindings for Debug interface. * Enable several options in CMake to allow to selectively build components. In particular, now Farsight, Farstream, examples and tests are optional. Farsight is disabled by default. * fd.o #28366: Added high level bindings for DBus tubes. Fixes: * Fix PkgConfig detection in DBus find files * Fix a race condition in test-account-basics and test-dbus-properties. * Fix compilation with gcc 4.7. * Fix tests compilation with telepathy-glib 0.19. * Fix FindDBus.cmake to find the correct paths. * Pass -fvisibility-inlines-hidden to the compiler if it's supported. telepathy-qt 0.9.1 (2012-03-23) ================================= The "it is call time" release. Enhancements: * fd.o #43025: Tp::Presence now has a setStatusMessage() method which keeps the old status id and status type * Added methods in Tp::AbstractInterface to support PropertiesChanged. This way it is possible for internal classes to monitor any property belonging to their interface * fd.o #46403: Update spec files to spec 0.25.2 and generate low-level bindings for all non-draft interfaces * fd.o #46347: Added high-level bindings for new CaptchaAuthentication interface * fd.o #46484: Add high-level Call bindings * Introducing new Telepathy-Qt-Farstream, a new mini-library with glue code to connect telepathy-farstream to Telepathy-Qt Fixes: * fd.o #45850: Telepathy Qt4 cannot compile against glib 2.31.0 and above * fd.o #39346: telepathy-qt fails to build with clang * fd.o #45755: Inconsistent ordering of pendingMessageRemoved telepathy-qt 0.9.0 (2011-12-20) ================================ The "Merry Christmas" release. This release begins the new 0.9 development series for feature additions following the 0.8 stable release series. Starting with this release the project is renamed to telepathy-qt (TelepathyQt) and Qt5 support is added alongside Qt4 support and for that 0.9 will be API (see changes below) and ABI incompatible with previous versions. API changes: * Everything containing qt4 (with or without caps) was renamed to qt. Eg.: - TP_QT4_DEPRECATED -> TP_QT_DEPRECATED - #include -> #include * Errors and constant macros starting with TELEPATHY_ (const char * versions) were removed, remaining only the versions that expand to QLatin1String. Eg.: - TELEPATHY_ERROR_INVALID_HANDLE <- removed - TP_QT4_ERROR_INVALID_HANDLE -> TP_QT_ERROR_INVALID_HANDLE * All deprecated methods (marked with TP_QT4_DEPRECATED) and signals (those that used to emit warnings at runtime when connecting to them) were removed. * StreamTubeChannel::connections() now returns a QSet instead of an UIntList. * Channel::groupContacts and groupLocal/RemotePendingContacts() gained a "includeSelfContact" param defaulting to true. * KeyFile and ManagerFile classes are now removed from public API. * SharedPtr cannot be constructed from a QWeakPointer anymore as the conversion from a QWeakPointer to a SharedPtr can't be made thread-safe. WeakPtr is reintroduced as a weak pointer class safely promoteable to a SharedPtr. * TelepathyQt-Farsight does not include telepathy-farsight/channel.h directly anymore. * ContactManager::lookupContactByHandle() is removed from public API. Enhancements: * fd.o #35084: The StreamTubeClient and StreamTubeServer classes have been added to allow implementing Telepathy Stream Tube connectivity for applications without having to worry about the channel dispatching details * Contact::refreshInfo() requests are now batched together on D-Bus * fd.o #41356: Implement methods to retrieve available message types on TextChannel. * fd.o #43631: Add CMake config files. Now CMake projects can find Tp-Qt straight away without the need of Find* files. * fd.o #43598 - Add high-level API for Proto.I.Addressing interface * fd.o #43599 - Add high-level API for Conn.I.Addressing interface Fixes: * Our TODO process being completely out of date. Trying to use doxygen \todo annotations from now on * FeatureRoster is set on Tp::Connection even for roster-less accounts. Known issues: * Some tests are failing for some Qt 4.7 configurations, reports on fd.o bug #43551 please. telepathy-qt4 0.7.3 (2011-10-07) ================================ The "a must" release. Enhancements: * Added HandleTypeRoom StreamTubes to ChannelClassSpec * It is now possible to capture and redirect the library debug output via setting a DebugCallback using the Tp::setDebugCallback function * The ChannelClassSpec implementation has been optimized, which yields ChannelFactory setup and consequently application startup speedups * StreamTubeChannel now ensures connectionClosed() is emitted for all connections on a closing tube * Add Presence/PresenceSpec operator== support * Add Presence/PresenceSpec operator!= support (Rohan Garg) * Add Authentication.TLSCertificate to the set of generated interfaces * Improve file transfer examples to properly use the ChannelDispatcher Fixes: * Ensure that the proper Channel Dispatcher methods are being called when creating/ensuring channels. * Prevent PendingContacts crashes in corner cases where contacts are still being built when a Connection is destroyed. Note that this affects which object is returned by PendingContacts::object() - we've now made it explicit that object() shouldn't be used externally as we make no guarantees on what object it returns, by deprecating it. It will be made protected: in the next API break * Passing a non-empty service param to ChannelClassSpec::{incoming,outgoing}StreamTube() messing up the shared instance as used by e.g. ChannelFactory * Connections not being removed from StreamTubeChannel::connections() when they are closed, and newConnection() and connectionClosed() events getting reordered * fd.o# 40655 - ChannelDispatchOperation::claim() cannot be used by Approvers to handle channels * Codegen is now able to utilize types with D-Bus signature aay, aas and aav * Account/Connection/Channel now properly check if FeatureCore is ready on accessors * Readded erroneously removed protected API to StreamTubeChannel, which restores full ABI backwards compatibility. telepathy-qt4 0.7.2 (2011-08-04) ================================ The "Stage 0 Tune Up" release. Enhancements: * Lots of additions and corrections to API documentation * Code generator now produces nicer output for member-ref, dbus-ref and rationale elements in docstrings * The stable D-Bus interfaces Account.Interface.Storage, Channel.Type.DBusTube and Channel.Interface.Destroyable have been added to generated bindings Fixes: * Tp::IncomingStreamTubeChannel always reports an empty socket address to connect to for accepted Tubes - and various other StreamTube fixes thanks to now having unit tests for them telepathy-qt4 0.7.1 (2011-06-09) ================================ The "where is the file?" release. Enhancements: * fd.o #37034: The URI property can now be set when requesting file transfers, and can be read by the Handler (and any Observers) from Tp::FileTransferChannel (Daniele E. Domenichelli) * Improved tests readability by moving common code into helper classes, macros, etc, in preparation for increasing the test coverage Fixes: * Fixed documentation for Contact::publishStateChanged() (Daniele E. Domenichelli) * Properly crosslink our doxygen docs to Qt documentation on fresh builds * Properly generate docs for auto generated classes telepathy-qt4 0.7.0 (2011-06-01) ================================ The "Doctor Love knew this so he made another great invention just for the lonely you!" release. This release begins the new 0.7 development series series for feature additions following the 0.6 stable release series. Both 0.6 and 0.7 will continue to be backwards compatible API and ABI wise with the earlier 0.5 development series. Enhancements: * fd.o #35341: Use the new ContactBlocking D-Bus interface for better performance in Tp::ContactManager (George Kiagiadakis) * ReceivedMessage: Add accessors for retrieving delivery report information, sender nickname and superseded message token * Crosslink our doxygen docs to Qt documentation Fixes: * Do not close channels created using the request and handle API if MC restarts * Pass new value correctly as variant in generated binding setProperty* methods * Properly initialize Connection account balance members * fd.o #36881 - Wrong documentation for Tp::Account::connectionStatusChanged (and a bunch of other parts of the API) * fd.o #31769 - The documentation of TextChannel's features is not very helpful * Skip docs generation for internal OptionalInterfaceCache telepathy-qt4 0.5.16 (2011-05-01) ================================= The "A brown paper bagful of Easter Eggs" release. Enhancements: * fd.o #36526: Tp::Channel has now gained targetID() and targetContact() accessors * fd.o #35421: Update to spec 0.22.0: - Added auto generated class for Conn.ContactBlocking - Added Connection::ErrorDetails accessors for ConnectionError details server-message, user-requested, expected-hostname and certificate-hostname * Add support for Conn.SimplePresence.MaximumStatusMessageLength * Add Features operator|(Features, Feature) * ContactManager state now only advances to Success when both the roster and the roster groups have been downloaded, if requested * New class SimpleObserver that can be used to observe arbitrary channels on a given Account. * fd.o #33525 - Helper class(es) for observing calls - New class SimpleCallObserver class which makes it easy to follow all StreamedMedia communication on a given Account. Fixes: * fd.o #35633: Contact features being erased after further contact upgrades, e.g. from ContactFactory used together with Connection::FeatureRosterGroups * Contact::groups() and ContactManager::groupContacts() not populated correctly when using CMs with new-style ContactGroups D-Bus API * Timeout in some CMs when introspecting contact list channels * Crashes with Connection::FeatureSelfContact enabled (Manifested as an assert for inFlightFeatures or pendingFeatures being hit) * Crashes if a connection disconnects while FeatureRosterGroups is being introspected (SIGSEGV in PendingOperation from ContactManager::Roster) * Added correctly named pretty headers for the Conn.ClientTypes/ContactGroups/ContactList/Saving interfaces * Odd build system failures from feature checks which were anyway redundant due to our recently bumped Qt 4.6+ dependency - checks now removed telepathy-qt4 0.5.15 (2011-04-12) ================================= The "How to remove a hole from a set of holes" release. Enhancements: * Performance improvements for introspection (becomeReady() latency) * Some documentation improvements. Fixes: * Incorrect scoping for Initial{Audio,Video} properties in Account channel request methods * Possible deadlock on connection status changes when FeatureConnected is requested on a Connection * Crash opportunities when introspecting a Connection which disappears in the process (e.g. due to a network error or a CM crash) telepathy-qt4 0.5.14 (2011-04-05) ================================= The "Now succeeds at failing!" release. The Qt dependency has been bumped to >= 4.6.0 for all future releases. Enhancements: * AccountManager will now retry introspection 5 times with a 3 seconds interval (or immediately if error is Timeout) if the introspection failed and becomeReady() will fail if there is still an error after all tries. * AccountManager will no more signal newAccount if the initial introspection failed. * ConnectionCapabilities and ContactCapabilities are now subclassable Fixes: * Regression in 0.5.13 causing PendingReadys to not fail even if the object being made ready disappears * Discrepancy between the spec and implementation on initially assumed non-locally-requested StreamedMediaChannel stream direction * Reporting capabilities of offline accounts incorrectly because of a .manager file parsing bug telepathy-qt4 0.5.13 (2011-03-23) ================================= The "what is my id?" release. Enhancements: * Added example to send messages using ContactMessenger. Fixes: * ContactMessenger: Do not crash if an error occurred normalizing the contact identifier but the ContactManager::contactsForIdentifiers() succeeded. * Multiple parallel invalidated() signal connections created between DBusProxy and ReadinessHelper telepathy-qt4 0.5.12 (2011-03-18) ================================= The "Can I use the IM framework for, like, sending and receiving messages" release. Enhancements: * fd.o #28753: Added SimpleTextObserver class which makes it easy to follow all text communication on a given Account * fd.o #35321: Added ContactMessenger class for easily sending and receiving text messages with a particular contact Fixes: * The Request & Handle API spuriously failing with SERVICE_CONFUSED because of a race condition with introspecting the proxies telepathy-qt4 0.5.11 (2011-03-09) ================================= The "more contacts?" release. Enhancements: * fd.o#33121 - Bind Connection.ContactList.ContactsChangedWithID. Fixes: * ContactManager will now create contact objects even if everything fails but we have the contact handle/id and the connection has ImmortalHandles. * Ensure FeatureRoster is ready before setting ContactManager state to success even in fallback mode. telepathy-qt4 0.5.10 (2011-03-09) ================================= The "am I connected?" release. Enhancements: * Added Connection::FeatureConnected to help applications that only care about connected connections. Setting this feature on the ConnectionFactory used will make sure all connections signalled by the library are connected. Fixes: * Ensure FeatureRoster is ready before setting ContactManager state to success. telepathy-qt4 0.5.9 (2011-03-07) ================================= The "planned engineering works for the last year" release. Enhancements: * fd.o#28367 - Added High-level API for StreamTube channels * fd.o#34228 - Added API on Account for requesting Channels and handling them yourself, implemented properly using the Channel Dispatcher service * Account::allowedPresenceStatuses() now has fallbacks to include "available" and "offline" when that makes sense * Removed some more private symbols from the shared library, resulting in slightly faster load times * Deprecated ConnectionCapabilities contact search related methods with singular names and added plural versions of them, for API consistency. * Contacts publish/subscription state updates for removed contacts are only signalled after the ContactManager::allKnownContactsChanged signal is emitted. Fixes: * Redundant Contact::avatarDataChanged() emissions * Connection::becomeReady() never finishing in state Connecting, which for example prevents handling ServerAuthentication channels. NOTE: any code incorrectly relying on the old buggy behavior of becomeReady() only finishing once the connection goes Connected or Disconnected may need adjustment. * Linking errors referencing the QtXml library * Spec-incompliant building of Client names when uniquifying is requested from ClientRegistrar * Sensitive data in Account parameters being included in debug logs telepathy-qt4 0.5.8 (2011-02-22) ================================= The "where are my contacts?" release. Enhancements: * Account won't try to build a Connection object anymore if the connection object path hasn't changed. * Connection::FeatureRoster will now fail introspection if ContactList interface is not supported, neither fallback roster channels. * ContactManager now has a state() accessor and a corresponding stateChanged() signal to keep track of the progress made in retrieving the contact list. * Made Profile/Account/ContactManager debug output a bit cleaner. * Cleaned up debug classes by removing unused code. Fixes: * Properly replace "_" with "-" on Account::protocolName(). telepathy-qt4 0.5.7 (2011-02-15) ================================= The "fit for galoshes" release. Enhancements: * Make the debug subsystem as no-op as possible when debugging is disabled at runtime with Tp::enableDebug(false) and Tp::enableWarnings(false). * fd.o#33123 - Bind Protocol.Avatars. * fd.o#33124 - Bind Protocol.Presence. * fd.o#33116 - Added support for passing hints to channel requests, also making channel requests marginally more efficient CPU and memory wise in the process. * fd.o#33117 - Added support for extracting hints from ChannelRequests. * fd.o#33117 - Added support for ChannelRequests reporting the channel created for them on success, for further observation. Fixes: * fd.o#34131 - Writing avatar cache into $HOME with scratchbox. * Unstable generated future-* headers being installed (although nothing declared in them was ever exported in the library). * Possible crashes in Channel internal updateContacts function when just the self handle changed. telepathy-qt4 0.5.6 (2011-01-27) ================================= The "accept/decline" release. Enhancements: * Update to spec 0.21.8. - Added auto generated classes for Account.Addressing, Channel.ServerAuthentication, Channel.SASLAuthentication, Channel.Securable and Conn.MainNotification. Fixes: * Properly ignore protocol with invalid names. * Properly escape protocol name with "-" when constructing protocol object path. * Properly link against QtXml. * Properly emit presencePublicationRequested if the contact current publish state changes to PresenceStateAsk. * Added missing fancy-headers for generated classes. telepathy-qt4 0.5.5 (2011-01-25) ================================= The "I wish I had less contacts" release. Enhancements: * CapabilitiesBase: Added method to check if file transfer is supported. Fixes: * Contact list contacts are now guaranteed to contain the features set on ContactFactory. * Contact list groups are now automatically reintrospected when needed. * Another attempt to fix a crash when contacts are removed from contact list while the introspection is still running. * fd.o#33457 - tp-qt4 uses non-atomic file write in avatar cache. telepathy-qt4 0.5.4 (2011-01-20) ================================= The "the shower of golden paper bags" release. Enhancements: * Presence publication requests are now reported more sensibly by the ContactManager::presencePublicationRequested(Contacts) signal, with the per-contact request message, if any, being in Contact::publishStateMessage() Fixes: * ContactManager not emitting presencePublicationRequested if the request message is empty. * ContactManager sometimes crashing when contacts are removed using the new ContactList interface. telepathy-qt4 0.5.3 (2011-01-17) ================================= The "contact factorization" release. Enhancements: * Added Tp::Contact::requestAvatarData() * Added Tp::Contact::isContactInfoKnown() * fd.o#32999 - operator< and qHash are not implemented for Tp::ProtocolParameter. * fd.o#33119 - Bind Connection.HasImmortalHandles. * ContactFactory is no more a stub class. The features set in the ContactFactory will be enabled in all contacts created by ContactManager and the classes using it (Connection, Channel, etc). Fixes: * Build failures on systems using GNU gold or the --no-add-needed/--no-copy-dt-needed-entries linker flags telepathy-qt4 0.5.2 (2011-01-03) ================================= The "I'm not subscribed now, right? WRONG" release. Enhancements: * Added Or/NotFilter classes making it more flexible to use the Filter API. * Channel invalidation reasons now more accurately describe what happened, including a new error TP_QT4_ERROR_ORPHANED for the corresponding Connection getting invalidated from whichever reason. * Added support for ContactList and ContactGroups interfaces improving performance of Connection::FeatureRoster/Groups when the CM supports the new interfaces. * ContactManager PendingOperations finish at consistent times wrt actual state changes when used with a CM sporting the new ContactList/ContactGroups interfaces * Deprecated Contact/ContactManager signals carrying a Channel::GroupMemberChangeDetails param for publish/subscription/block state changes and added new signals that should be used in new code. * fd.o #31464 - Added Channel::requestLeave() for leaving channels more gracefully than closing them; StreamedMediaChannel::hangupCall now uses that Fixes: * Properly install TelepathyQt4/ConnectionManagerLowLevel. * A race condition causing proxies to be needlessly dropped from the factory cache and hence new proxies built for a future request, and eventually hitting an assert in onProxyInvalidated as a result * Memory leaks when using Connection::FeatureRoster/RosterGroups where the connection and roster channels were leaking. * fd.o#29728 - ContactManager::addGroup and removeGroup are confusing/broken. * fd.o#29735 - Roster API semantics are error / race condition prone. telepathy-qt4 0.5.1 (2010-12-08) ================================= The "lazily evaluated birth" release. Fixes: * fd.o #29731: Memory leaks reported by make check-valgrind * Crash using a dangling (const!) iterator when a channel is removed from a conference * Crash when the an object path for an Account in an account set is quickly reused after it's removed * Emitting redundant {local,remote}SendingStateChanged signals from StreamedMediaChannel * ChannelDispatchOperation::channelLost failing to include Tp:: in the signal arg type names, making it a tad hard to connect to telepathy-qt4 0.5.0 (2010-11-16) ================================= The "new era of breakage" release. This release IS NOT API/ABI COMPATIBLE WITH EARLIER RELEASES. Further releases in the 0.5 development series will however be compatible with this release, as will any releases in a 0.6 stable series. For enhanced compatibility versions from 0.5 and earlier series can be parallel installed, with 0.5 bumping the .so major version to .so.1. However, the development headers and pkgconfig file can't be parallel installed. Enhancements: * fd.o #28793 - It is no longer necessary to keep the proxy / other object you get a PendingOperation from manually referenced until the operation is finished * fd.o #28797 - generated client code (AbstractInterface subclasses) now allows setting a non-default timeout for D-Bus method calls * fd.o #29486 - Bare variant maps and string lists are no longer exposed in the API unless absolutely necessary; instead they have wrapper classes with easy access to well-known keys and values. Among other consequences, this means AbstractClient implementations NEED TO CHANGE their method implementation signatures to accept the wrapper classes instead of bare QVariantMaps. * Setting automatic/requested presence in Account now uses Tp::Presence * Cleaned up the API and internal code by removing all deprecated classes, methods and signals. * Added Tp::Object intermediate base class for uniform QObject property change notification. Connection, Channel and Contact will be propertified using it in the future. * Enumeration and flag types generated from the specification can now be used in API without endangering ABI stability due to added padding members, enhancing type safety in numerous instances where bare uints used to be returned / taken as a parameter. * Moved low-level functionality which shouldn't be used when using a full Telepathy setup with a Mission Control service (Account Manager + Channel Dispatcher) available from Connection and ConnectionManager to Lowlevel classes, which can be accessed only if TP_QT4_ENABLE_LOWLEVEL_API is #defined through a lowlevel() accessor on them * Bare pointers are no longer returned from the API, instead either SharedPtr or Qt implicitly shared handle classes are used (applicable to Connection/ContactCapabilities, ProtocolInfo, etc) * Tp::Contact is now a RefCounted and uses Tp::Feature like the rest of the library. * ClientRegistrar no longer guarantees that a singleton instance is returned for create(). In particular, this relaxation allows us to implement an API in the future which constructs a ClientRegistrar behind the scenes to be able to request and handle channels without manually implementing an AbstractClientHandler. * The Filter API is now more future-proof, with the assumption that the filter chain is ANDed together dropped. It will be possible to combine filters using And/Or/Not filter combiners in the future, of which And is included now. * The SharedPtr API has been improved. In particular, it's now safe to use it as a QMap/QHash key and more difficult to use it incorrectly as a boolean or an integer. The redundant WeakPtr class has been removed - use QWeakPointer instead (which works with SharedPtr for all QObject classes). * Tp::Contact friend list state change signals now have a details argument (which will contain e.g. the request message for publishState() == Ask when somebody adds you to their contact list, for example). This means that code connecting to them NEEDS TO BE CHANGED. * Account::haveConnection(Changed) and friends is now the less confusing Account::connection(Changed) pair * AccountManager filtering methods returning an AccountSet now have more descriptive names without the Set suffix * Account/Connection/Channel subclasses now can override the "core" feature implied by isReady() and becomeReady(). In particular, this means that e.g. ContactSearchChannel::isReady() with no arguments will only return true if ContactSearchChannel::FeatureCore is ready in addition to Channel::FeatureCore. * StreamedMediaChannel is once again just for Channel.Type.StreamedMedia channels, with the intermediate Call.DRAFT support and API removed. When Call is undrafted, a new CallChannel will be added and StreamedMediaChannel deprecated. * Similarly, hacky Conference.DRAFT support IS REMOVED. Only the final Conference interface is supported from now on. * Everything that used to be called just Audio/Video/MediaCall etc now has StreamedMedia in the name, to not conflict with future Call API. Fixes: * fd.o #27204 - Codegen erroneously uses enums' value-prefix as the name for the C++ enum * fd.o #29998 - Connecting to signal Tp::TextChannel::chatStateChanged needs typedef if not done in Tp namespace * fd.o #27795 - Problems using Tp::SharedPtr as a key in QMap * ChannelRequest not becoming ready successfully when there is no Account specified * ContactSearchChannel not initializing its private members correctly * Compile errors with QT_STRICT_ITERATORS * Some MSVC++ compilation issues (though there still are likely some remaining) * ContactManager::allKnownContacts not picking up changes from the "stored" list telepathy-qt4 0.3.14 (2010-11-05) ================================= The "O HAI MY NAME IS CONFERENCE" release. Enhancements: * fd.o #30098 - Added an asynchronous property request API for generated low-level proxies * Added high-level class for SimplePresence and changed Contact to use it, deprecating the old methods using SimplePresence directly. * Added signals deprecation support to Contact. * Deprecated StreamedMediaChannel methods that only make sense when used with Call.DRAFT channels (we're going to drop support for that particular draft in 0.5.0) * Deprecated all optional interface convenience methods. The methods inherited from OptionalInterfaceFactory should be used directly instead if access to low-level proxies is needed. * Add unnamed (anonymous, TargetHandleType == None) variants for text chats and calls to ChannelClassSpec * Register all non-QObject public classes with the Qt meta-object system, so they can e.g. be stored in QVariants. Fixes: * Unnamed text and StreamedMedia calls not included in the ChannelFactory (channel class) -> (subclass, features) mapping * Some RequestableChannelClassSpec and ConnectionCapabilities methods having a notion of "text chat with a person WHO is a conference", which doesn't exist telepathy-qt4 0.3.13 (2010-11-01) ================================= The "sickness won't slow us down" release. Enhancements: * Added TP_QT4_ prefixed versions of all generated string constants marked as QLatin1String for less verbose usage with Q_NO_CAST_FROM_ASCII * Added signals deprecation mechanism to warn when a deprecated signal is used. * fd.o #29451 - Make it possible to specify subclasses to use and features to make ready on them in ChannelFactory * fd.o #29484 - RequestableChannelClass should have high-level API * fd.o #29486 - Add a ChannelClassSpec class for easily specifying Client channel filters (and building Channel requests and ChannelFactory filters for advanced usage) * Added more deprecated methods and remove some methods that should not be deprecated. Now the library together with examples builds itself with deprecation warnings enabled, to make sure no deprecate method is used internally. * Deprecated autogenerated synchronous properties accessors/setters. Fixes: * fd.o #30223 - telepathy-qt4's codegen doesn't deal with tp:external-type properly * fd.o #30923 - Fix compilation errors in 0.3.12 - The tp-glib version requirement in 0.3.12 was too old - Compile error in the tp-glib based test library * fd.o #31087 - ChannelRequest immutable property extraction relying on undefined method argument evaluation order -> failing on some toolchains * TextChannel never finishing introspection of FeatureMessageQueue with some older services * Properly document ContactSearchChannel signals. * AccountManager and AccountSet getting confused and hitting asserts with certain sequences of introspecting and adding/removing accounts, most prominently when removing and readding an account * Useless PendingReady code having potential for crashes in corner-cases but serving no useful purpose (now removed) * Code generator changes not always triggering rebuilds properly telepathy-qt4 0.3.12 (2010-10-15) ================================= The "break is coming" release. New API: * Added ContactSearch high-level class. * Added constructors/accessors for using Channel/ContactFactory in Connection. * Added high-level class for ContactInfoFieldList. Enhancements: * Updated to spec 0.21.1: - Added auto generated classes for Conn.ClientTypes/ContactGroups/ContactList/ PowerSaving and Chan.ServerTLSConnection. - Make use of Observer.ObserverInfo.request-properties map, making ChannelRequest use the immutable properties defined in the map if available, avoiding unneeded introspection. - Added support for Conference interface alongside Conference.DRAFT support. - Added ConnectionCapabilities methods to check conference support. * Improved Account::capabilities() to take Profile::unsupportedChannelClasses into account. * Improved StreamedMediaChannel test coverage to yellow (> 80%). Fixes: * Properly install TelepathyQt4/Farsight/global.h. * fd.o#30386 - Regression: StreamedMediaChannel::streamAdded is not emitted when one requests a new stream using a StreamedMedia channel type. * Fixed MediaStream::requestDirection when using a Call channel type. * Un-deprecate AccountManager methods to retrieve accounts given the account paths. * Some small documentation fixes. telepathy-qt4 0.3.11 (2010-10-04) ================================= The "farewell hated friend" release. Enhancements: * fd.o #24648 - Port Telepathy-Qt4's build system from autotools to cmake, resulting in faster builds. All targets supported by the previous build system are still supported, and some new were added, notably individual targets for unit tests and callgrind support. * fd.o #29672 - Support for Profiles - a way to describe different IM/VoIP services by data files (e.g. Google Talk for the XMPP/Jabber protocol) * fd.o #29699 - ChannelRequest immutable data is now accessible even before it's fully ready - this is useful for e.g. early initialization of channel context in applications with the AbstractClientHandler requestNotification API * Some performance optimizations in ReadyObject, ReadinessHelper and Channel Fixes: * Race conditions uncovered by Qt 4.7 in TestAccountBasics and TestConnRoster telepathy-qt4 0.3.10 (2010-09-16) ================================= The {bool b; if (b == false || b == true || b == 99) { /*...*/ }} release. Enhancements: * fd.o #29609 - ClientRegistrar and all related classes now use Factories too, which means if you use the factory-enabled create() variants such as create(AccountManagerPtr), you can share account and connection proxies with the rest of your application, and/or make them be ready by the time your addDispatchOperation/handleChannels/observeChannels implementation is called * fd.o #29090 - Added support to filter accounts by their capabilities (whether you can do room chats, voice calls, etc, using a given account) * Added Account::capabilities(), which automatically gets the capabilities from a connected Connection if there's one, or the protocol object if there isn't * Generic Filter framework, currently only used for Account filtering, but in the future also for filtering Contacts * ChannelRequest is now also using the same Account/Connection etc objects than the rest of the application * PendingChannelRequest now holds a reference to its Account, so you don't have to keep a reference to the Account in your application's scope for the channel request to succeed * There are now variants of the ContactManager signals presencePublicationRequested, groupMembersChanged and allKnownContactsChanged which carry the details parameter (contains things like the message and the reason) Fixes: * Memory leak when using PendingComposite * Memory leak in QDBus triggered by ClientHandlerRequestsAdaptor code (there's a workaround, and the actual bug is reported as QTBUG-13562) * The PendingOperation returned by Connection::requestConnect() finishing even if the connection wasn't connected yet * Hitting an assert in cornercases for calling setIntrospectedCalled twice in Account Avatar introspection * Account::changingPresence() not being initialized correctly telepathy-qt4 0.3.9 (2010-09-10) ================================ The "THE ORIGINAL SWEAT FACTORY^W^WSAUNA MASTER" release. Enhancements: * fd.o #29451 - Add Factory infrastructure, enabling: - sharing accounts/connections between different parts of the library better (this will soon enable us to eliminate duplicate objects between AbstractClient implementations and the AM) - requesting that all accounts/connections/channels/contacts are always ready with given features - automatically constructing application-defined subclasses whenever eg. an Account is constructed * Add finished and usable AccountFactory and ConnectionFactory APIs, and also added API/ABI placeholder ChannelFactory and ContactFactory APIs which will be more useful soon * fd.o #29606 - Use factories in AccountManager and Account for constructing Accounts and Connections -> if desired features are enabled, one no longer needs to make any Account::becomeReady and Connection::becomeReady calls when using an AccountManager * fd.o #29409 - Use QDBusServiceWatcher if available, reducing wakeups * fd.o #20034 - Add avatar cache implementation and featureAvatarData on Tp::Contact using it. * Made Channel::groupSelfContact() always have some contact for the user as long as the channel is ready (if the group has none, the Connection one is used) * (Side-effect from other work) Add fallbacks to channel requests in case the service doesn't provide the InitiatorHandle or the Requested property * Made Channel debug output a bit cleaner * Added Connection::ErrorDetails to represent additional information about error conditions causing Connection invalidation * Made the Connection API guide the applications better to correct error handling practices (all error handling should be done in invalidated() slots) * Add SharedPtr::qobjectCast(), an upcasting constructor and pointer to const support Fixes: * A race condition which could result in Channel ignoring a member change (only applicable to services with Group.MembersChangedDetailed) * A bug where Channel::groupMembersChanged(only removed members) isn't always emitted if the local user is not a member of the group - probably means signaling contacts being removed from roster groups didn't work either * Yet another TestConnRosterGroup race condition (freq: 6 in 20000 runs) * fd.o#29930 - Build error with glib 2.25 * ReadyObjects incorrectly handling feature dependencies * Account/Connection/Channel readifying themselves even if not asked to * Handle reference management screwing up if there are multiple connections online on a single CM * Lots of crash opportunities when a PendingOperation is underway when its parent-ish object is unreferenced in an application telepathy-qt4 0.3.8 (2010-08-24) ================================ The "a weekend (and quite a bit of the Monday early hours) well spent" release. Enhancements: * fd.o#29395 - Update to spec 0.19.10 * fd.o#29461 - Update to spec 0.19.11 * fd.o#28948 - Added docs/tests/missing Qt properties to AccountSet * fd.o#29357 - Account::iconName() and icon() now always return sensible non-empty values * fd.o#28819 - {Account,ConnectionManager}::protocolInfo() has been improved - Recent CMs are now introspected with less D-Bus calls - New API capabilities(), vcardField(), englishName(), iconName() on ProtocolInfo and ManagerFile * fd.o#25126 - Some redundant debug output has been removed * fd.o#27460 - Connection now introspects recent CMs with less D-Bus traffic * Connection::contactManager and ::capabilities are now less of a death-trap - now always are non-NULL - operations fail with descriptive errors if the Connection isn't valid - they used to go NULL at an indeterminate time when eg. disconnecting * Account::connection() object path parsing has been optimized Fixes: * fd.o#28947 - Account::filterAccounts doc does not properly format the example code * fd.o#28651 - Cannot receive files using gabble 0.9 * fd.o#29145 - AccountSet::accountRemoved is emitted for newly-created non-matching accounts * fd.o#29699 - ChannelRequest incorrectly checks immutable properties * Broken iteration code in MediaStream which often led to busy-looping forever * (Harmless) uninitialized memory use reported by valgrind in Account internals Test suite improvements: * fd.o#29702 - Unit tests now execute reliably, and 10-30x faster * Added the script repeat-tests.sh for repeating tests to detect race conditions * Added a conservative 10 minute per test watchdog to detect hung-up test logic - Should be plenty even for heavily loaded VM build bots, as the whole test suite now executes in 2.4-2.5 seconds on my laptop * The StreamedMedia legacy and Future.Call tests now actually have different names to be able to distinguish between them in the test logs * Test coverage reporting now works again; turns out we need to disable building the shared library when it is enabled * amd64 memory use errors (pointer size != int size) calling g_object_new() in tests have been fixed telepathy-qt4 0.3.7 (2010-07-12) ================================ The “not as bad as Pepsi Max” release. Enhancements: * fd.o#28927 - Generate code for Channel.Interface.{Anonymity,ServicePoint} (wjt) * fd.o#28942 - Refresh HACKING and README (wjt) * Update to spec version 0.19.9, adding Read and Deleted members to MessageSendingFlagReport, DeliveryReportingSupportFlagReceive, and DeliveryStatus (wjt) Fixes: * fd.o#28945 - AccountManager::accountsByProtocol() returns an empty set * fd.o#28946 - AccountSet should indicate whether the filter used is valid telepathy-qt4 0.3.6 (2010-07-01) ================================ The "I've been thinkin' a lot today" release. New API: * Added Qt properties to Account. * Added filter API to AccountManager to filter accounts based on Qt properties. Includes a new class AccountSet that represents a set of accounts that match a certain filter and that updates automatically based on accounts Qt properties changes. * fd.o#25035 - Add API to AccountManager to get a list of Account objects, all ready. * fd.o#28825 - Bind Account.Service * fd.o#28828 - Add Qt properties to ConnectionManager * fd.o#28861 - Add auto generated interface and Connection accessor for Connection.Cellular interface Enhancements: * fd.o#28302 - Sync test CM with telepathy-glib * fd.o#28827 - Add valgrind support to tests * fd.o#28850 - Update to spec 0.19.8 Fixes: * fd.o#28489 - manager-file.py missing in tp-qt4 0.3.4 tarball * fd.o#28826 - KeyFile should support spaces in key names and string list params that don't terminate with ; * fd.o#28829 - Contact should not fail if /capabilities attr is empty * fd.o#28830 - Channel does not parse immutable properties correctly * fd.o#28831 - Connection FeatureRosterGroups does not work after FeatureAccountBalance support was added telepathy-qt4 0.3.5 (2010-06-21) ================================ The "Think I'll get it done yesterday" release. New API: * fd.o#28018: Bind Account.ChangingPresence. * fd.o#28552: Bind Account.ConnectionError/Details. Enhancements: * fd.o#28536: update to spec 0.19.7 (ConnectionError, Anonymity, ServicePoint, ChatStates). Fixes: * Update with-session-bus.sh from telepathy-glib, fixing a bashism. (smcv) * Fixed coverity issues with call example. * Fixed AbstractClient documentation. (albanc) * telepathy-qt4-farsight telepathy-glib dependency is now >= 0.8.1. (albanc) telepathy-qt4 0.3.4 (2010-05-23) ================================ The "Cause time takes time, ya know" release. New API: * fd.o#28143: Implement Connection.Balance interface support. Fixes: * Fix strict QtDBus demarshalling which was causing crashes when using qdbus_cast from a SocketAddressIP*. (drf) telepathy-qt4 0.3.3 (2010-05-09) ================================ The "generic fun" release. New API: * fd.o#27671: ContactInfo high-level API. Enhancements: - Added Call.Content.Remove support to StreamedMediaChannel. Fixes: - Fixed a leak in Connection::gotCapabilities, - Correctly remove object path from Account::uniqueIdentifier. telepathy-qt4 0.3.2 (2010-04-23) ================================ The "poisoned with anti-coffee" release. New API: * fd.o#27379: Add a new signal, allKnownContactsChanged. (drf) * fd.o#27677: Add Observer.Recover support. * Added support for retrieving contacts location. Enhancements: * Added example application to list all supported protocols. * fd.o#27670: Updated to spec 0.19.5. Fixes: * Fixed compilation (more specific, moc generation). The code was triggering QTBUG #2151. (drf) * Correctly handle UTF-8 in code generator. (wjt) * Fixed text-chan test race condition. (drf) telepathy-qt4 0.3.1 (2010-03-30) ================================ The "it's all about coffee" release. Enhancements: * Added/Improved documentation for various classes and some minor documentation style fixes. Fixes: * Fixed bug where StreamedMediaChannel::requestStream returned PendingOperation was never finishing. telepathy-qt4 0.3.0 (2010-03-18) ================================ The "With My Own Two Hands" release. Dependencies: * Full regression tests now require telepathy-glib >= 0.10.0 (telepathy-glib is still optional) New API: * Channel: Added Conference/MergeableConference/Spplitabble interfaces support. * StreamedMediaChannel: Added Call interface support. Enhancements: * Updated to 0.19.1 spec. * Better tests directories organization (complete separation of glib/python specific code). Fixes: * fd.o#25422: generate code for Call draft API. * fd.o#26117: Add Call interface support to StreamedMediaChannel. * fd.o#26881: Remove the usage of QString::fromAscii. * fd.o#27124: Missing docs for some classes. * fd.o#27125: Add support to QT_NO_CAST_FROM_ASCII. * Fixed bug when Channel was never getting ready. telepathy-qt4 0.2.2 (2010-02-22) ================================ The "no pain, no gain" release. New API: * AbstractClientHandler: Added support to set Handler Capabilities property. Fixes: * fd.o #25659: ObserveChannels implementation might actually return immediately. telepathy-qt4 0.2.1 (2009-12-04) ================================ The "all you want, only better" release. Fixes: * fd.o #25058: reduce the scope of our workaround for Qt 4.5 bug , fixing compilation against Qt versions >= 4.6 beta, where this bug has been fixed (smcv) * Avoid the installed AccountManager (if any) being service-activated during distcheck under some circumstances (smcv) * Compile with symbols hidden by default, explicitly export a few symbols that were mistakenly not exported, and improve the code generation tools to be more correct about their exports (smcv) * Improve the code-generation tools to cope with UTF-8 in the spec (wjt, smcv) * Enable Automake 1.11 silent building (./configure --enable-silent-rules to enable this) (wjt) Code generation release notes: * qt4-types-gen.py and qt4-client-gen.py previously forced the generated classes to be exported, in a way that's not actually correct for code outside telepathy-qt4 (the TELEPATHY_QT4_EXPORT macro). They now use a macro set by --visibility, defaulting to nothing; if you're building a shared library with -fvisibility=hidden, or supporting Windows, you may need to use --visibility=YOUR_LIB_EXPORT when running these scripts. See TelepathyQt4/global.h or QtDBus/qdbusmacros.h for an example of setting up such a macro (unfortunately, the only correct way to do this seems to be for each shared library to define its own). telepathy-qt4 0.2.0 (2009-11-10) ================================ The "I Shot the Sheriff" release. API changes: * Connection: Changed status/statusReason/statusChanged to use enums Tp::Connection::Status and ConnectionStatusReason. * Connection: Renamed getContactAttributes method to contactAttributes. Fixes: * fd.o#23370: Make better use of telepathy-spec 0.17.27 errors. * fd.o#24422: Account removal should be represented by TELEPATHY_QT4_ERROR_OBJECT_REMOVED. telepathy-qt4 0.1.12 (2009-11-05) ================================ The "an enzyme that breaks down tigers" release. New API: * TextChannel: Added ChatState interface support. API changes: * TextChannel: send() methods now receive a flags parameter, so we proper support delivery reports. Fixes: * pkgconfig: Added missing QtNetwork dependency. telepathy-qt4 0.1.11 (2009-10-08) ================================ The "on more to go" release. New API: * FileTransferChannel: Added methods to access FileTransfer interface properties. * IncomingFileTransferChannel: Added specialized class for handling incoming file transfers. * OutgoingFileTransferChannel: Added specialized class for handling outgoing file transfers. * CapabilitiesBase: Added base class to represent contact/connection capabilities. * ContactCapabilities: Added specialized class that inherits CapabilitiesBase to represent contact capabilities. * ConnectionCapabilities: Added specialized class that inherits CapabilitiesBase to represent connection capabilities. * Contact: Added ContactCapabilities interface support. * Connection: Added capabilities (RequestableChannelClasses) support. * Account: Added ensureAudio/VideoCall methods that make use of InitialAudio/Video properties when creating StreamedMedia channels. * Channel: Added streamTubeInterface/tubeInterface methods. (Patch from Abner Silva ). * PendingVariant: Added pending operation helper class for D-Bus methods that return a variant as result. API changes: * Renamed PendingVoidMethodCall to PendingVoid. * Changed PendingVoid/Success/Failure constructor to receive parent as last parameter. Enhancements: * Added examples for handling incoming/outgoing file transfers, examples/file-transfer/ * Added C++ visibility support. * Updated to 0.18.0 spec. Fixes: * fd.o #24324: Account::create/ensureXXX should receive a const QDateTime & for userActionTime * Explicitly use uint for TargetHandleType. telepathy-qt4 0.1.10 (2009-08-25) ================================ The "not yet stable" release. New API: * StreamedMediaChannel: Added Hold and DTMF interface support. Enhancements: * Moved OptionalInterfaceFactory::InterfaceSupportedChecking docs from DBusProxy to OptionalInterfaceFactory. * Use struct Private instead of class Private for consistence. * Removed cli/Client from header guards. Fixes: * fd.o #20269: Channel's Contact objects should initially have no features. * fd.o #21335: Implement Group self-handle removal reasons. * fd.o #23040: Running connection managers appear twice in ConnectionManager::listNames result. * fd.o #23282: Channel should update ReadinessHelper with the supported interfaces. telepathy-qt4 0.1.9 (2009-07-23) ================================ The "never too late" release. New API: * OptionalInterfaceFactory: Added methods interfaces and optionalInterface and removed duplicated code in all OptionalInterfaceFactory subclasses. * Added ContactManager allKnownGroups, addGroup, removeGroup, groupContacts, addContactsToGroup and removeContactsFromGroup methods. * Added ContactManager groupAdded, groupRemoved and groupMembersChanged signals. * Added Contact groups, addToGroup and removeFromGroup methods. * Added Contact addedToGroup and removedFromGroup signals. API changes: * Changed ProtocolParameter requiredForRegistration method to isRequiredForRegistration to make it consistent with other bool returning getters. Enhancements: * Changed all classes to follow coding-style. * Moved documentation to source file for all classes. * Standardize class definition in all classes: * Moved public xxxInterface methods definition to the end of the public methods declaration. * Added friend struct Private declaration. * Added Q_DISABLE_COPY(xxx) to all classes that can not be copied. * Moved Q_DISABLE_COPY(xxx) declaration to the top of the class definition, before the public keyword. * Reorder public, protected, SIGNALS declaration as follows: public public Q_SLOTS Q_SIGNALS protected protected Q_SLOTS private Q_SLOTS private * Moved friend class xxx definitions to be placed right below private keyword * ChannelDispatchOperation: Emit invalidated with TELEPATHY_QT4_ERROR_OBJECT_REMOVED when ChannelDispatchOperation.Finished is received. * Added/Improved some documentation. Fixes: * ClientApproverAdaptor: Use the dbus fully qualified name to get the connection property (Patch from George Kiagiadakis ). * Fixed bug 20268: Connection's selfContact object should initially have no features. * Fixed bug 20080: KeyFile: ";" as a list may be mis-parsed. * Fixed bug 20082: KeyFile: double (and other types?) not correctly tested. * Fixed bug 20353: No d-pointer in Channel::GroupMemberChangeDetails. * Fixed bug 20033: Contact / ContactList Group integration. telepathy-qt4 0.1.8 (2009-06-16) ================================ The "Every Good Boy Deserves Frontalot" release. New API: * Added PendingChannelRequest class to be used when requesting channels using ChannelDispatcher through Account. * Added Account methods to request/create channels using ChannelDispatcher (ensureTextChat, ensureTextChatroom, ensureMediaCall, createChannel and ensureChannel) Enhancements: * Updated to telepathy-spec 0.17.26 Fixes: * ChannelDispatchOperation: Read Channels property instead of incorrectly reading ChannelDetailsList (Patch from George Kiagiadakis ). telepathy-qt4 0.1.7 (2009-06-02) ================================ The "approver" release. New API: * Added Client Approver support. * Added ChannelDispatchOperation high-level class. Bugfixes: * Fixed bug 21988: Channel does not work properly if the parent connection object is not ready * Fixed bug 21993: TextChannel does not become ready until first message is received if FeatureMessageQueue is enabled. telepathy-qt4 0.1.6 (2009-05-28) ================================ The "So hot, I have a fever" release. New API: * Added Channel::immutableProperties public method. Enhancements: * Added ChannelFactory, internal class to create channels based on their types. * PendingChannel: Use ChannelFactory to create channels. Bugfixes: * Proper define AbstractClientPtr. * ClientRegistrar: Fixed Observer adaptor introspection data. * ClientRegistrar: Use ChannelFactory to create Channels. telepathy-qt4 0.1.5 (2009-05-19) ================================ The "do not look at the conductor" release. New API: * Added Client support (Handler, Observer). * Added ClientRegistrar, class responsible for registering clients and proper exporting their D-Bus interfaces. * Added AbstractClientObserver, AbstractClientApprover (skeleton) and AbstractClientHandler. Clients should inherit one or some combination of these, by using multiple inheritance, and register themselves using ClientRegistrar::registerClient() in order to become a Client. * Added ChannelRequest high-level class. telepathy-qt4 0.1.4 (2009-05-08) ================================ The "global military-industrial complex is subsidising your iPod" release. Dependencies: * Creating accounts, and possibly updating their parameters, now requires an AccountManager implementing telepathy-spec 0.17.24, such as telepathy-mission-control >= 5.0.beta70 (in particular, beta 69 won't work, and the KWallet-based account manager will also need updating) API changes: * Renamed SharedData header file to RefCounted to follow class name. New API: * Update to telepathy-spec 0.17.24, breaking some D-Bus APIs: * fd.o #21619: Account::updateParameters() returns a PendingStringList of the parameters that won't be changed until reconnection takes place * Account::reconnect() added (newer MC versions don't violate telepathy-spec by reconnecting automatically when parameters are changed) * AccountManager::supportedAccountProperties() added * AccountManager::createAccount() takes an optional dict of properties (the valid keys are in supportedAccountProperties()) * Enhance PendingStringList to have a constructor from a QDBusPendingCall Bugfixes: * Don't try to run Python tests unless we have the gobject module (the tests use it) telepathy-qt4 0.1.3 (2009-04-22) ================================ The "what are you scared of?" release. Dependencies: * Full regression tests now require telepathy-glib >= 0.7.28 (telepathy-glib is still optional) API changes: * Namespace simplification: Telepathy::Client::Channel (etc.) are now Tp::Channel, similar to telepathy-glib's TpChannel. Auto-generated client classes like Telepathy::Client::ChannelInterface are now Tp::Client::ChannelInterface. * AccountManager, Account, ConnectionManager, Connection, Channel and Channel subclasses now inherit from Tp::RefCounted and are used together with Tp::SharedPtr/Tp::WeakPtr, shared and weak pointer classes using ideas from Qt, glibmm, Boost and WebKit. The constructor is now protected (in order to support custom classes) and a public create method that returns a SharedPtr was added. This is an attempt to avoid memory leaks as much as possible, see http://lists.freedesktop.org/archives/telepathy/2009-March/003218.html for more details. * Instead of forward-declaring Telepathy::Client::Channel and using a variable of type Telepathy::Client::Channel *, you should now include and use either Tp::ChannelPtr, which is a reference-counted shared pointer, or Tp::WeakPtr, which is the weak counterpart. * Header simplification: the public headers now look like , i.e. without the Client subdirectory. * PendingHandles now finish successfully on non fatal errors (InvalidArgument, InvalidHandle, NotAvailable). PendingHandles::invalidNames/invalidHandles should be used to check if a non-fatal error occurred and some handle could not be acquired. Enhancements: * Updated to telepathy-spec 0.17.23 * TelepathyQt4Farsight is a new mini-library with glue code to connect telepathy-farsight to Telepathy-Qt4. Handlers for streamed media channels with media signalling can #include and pass their Tp::StreamedMediaChannel to Tp::createFarsightChannel, then hook up the resulting TfChannel to a GStreamer pipeline of their choice. * StreamedMediaChannel has a new handlerStreamingRequired method so you can check whether the handler needs to carry out the streaming * fd.o #21336: Channels now indicate whether a message is expected when doing various Group operations * fd.o #21337: Account supports the new HasBeenOnline property Fixes: * fd.o #20583: Contact objects don't work without the Contacts interface. * fd.o #20584: Contact object creation doesn't survive bad IDs or handles. telepathy-qt4 0.1.2 (2009-03-23) ================================ The "robotic automatic hoover" release. Dependencies: * Full regression tests now require telepathy-glib >= 0.7.27 (telepathy-glib is still optional) * telepathy-farsight >= 0.0.4 is a new optional dependency API changes: * AccountManager, Account, ConnectionManager, Connection, Channel now inherit QSharedData and are used together with QExplicitlySharedDataPointer. This is needed so we can create shared pointers based on the object itself, instead of doing hacks to find the shared pointer related to a given object. See http://lists.freedesktop.org/archives/telepathy/2009-March/003168.html for more details. * Channel Features are now Feature objects, not integers * The Feature class is now in its own header, Enhancements: * The skeletal StreamedMediaChannel class from 0.1.0 has been expanded to cover all the functionality of the Telepathy StreamedMedia interface * PendingConnection, PendingAccount etc. have busName and objectPath methods where necessary, so that objects of custom classes can be constructed * Features can now be considered critical, meaning that failure to set them up leads to failure of becomeReady() - this should only be used for features that should never fail unless the service is buggy, like Connection and Channel core functionality * examples/call/ is an example of how to use StreamedMediaChannel, which can make and receive XMPP Jingle calls using telepathy-gabble (this feature requires telepathy-farsight and GStreamer) Fixes: * When introspection of a Feature fails, the D-Bus error is propagated as the failure reason of becomeReady() * Fix a memory leak in TextChannel telepathy-qt4 0.1.1 (2009-03-05) ================================ The "PresencePublicationAuthorizationRequestRejection" release. API changes: * PendingReadyAccount, PendingReadyAccountManager, PendingReadyConnection, PendingReadyConnectionManager have all been replaced by the PendingReady class * Account, AccountManager, Connection and ConnectionManager features are now QSet, not bitfields * Plural contacts are generally represented by a QSet > instead of a QList > (with a new typedef, Telepathy::Client::Contacts, which must be used in signal/slot connections) Enhancements: * Added Connection::FeatureRoster, which, when enabled, adds contact list (a.k.a. roster/buddy list) functionality to the ContactManager and Contact objects * Improved maintainability of Account, AccountManager, Connection and ConnectionManager becoming ready * A QSharedPointer is now hashable with qHash, meaning contacts can be QSet or QHash members * Added a trivial contact list user interface, examples/roster/roster Fixes: * The client library no longer attempts to enforce group add/remove flags: whatever change the user requests is passed on to the connection manager (which might reject it) * PendingReady objects returned by Connection::becomeReady() have the Connection as parent, rather than an internal object that isn't useful to library users telepathy-qt4 0.1.0 (2009-02-26) ================================ The "pending operation" release. This first release of telepathy-qt4 features high-level API for the following: * Manipulating accounts on a Telepathy AccountManager implementation as described by telepathy-spec 0.17.x, such as Mission Control 5 (beta versions currently available) * Manipulating Telepathy connection managers via the ConnectionManager and Connection core API * Setting your own presence on a connection manager supporting the SimplePresence interface * Requesting channels from a connection manager supporting the Requests interface * Reading contacts' aliases etc. on a connection manager supporting the Contacts interface * Sending and receiving messages on Text channels, with or without the Messages interface In addition, lower-level auto-generated accessors are provided for all the functionality of telepathy-spec version 0.17.19. Notable functionality that is currently missing, but will be added soon, includes: * Manipulating a server-stored contact list * Controlling VoIP calls in StreamedMedia channels /* ex: set textwidth=80: */ telepathy-qt-0.9.3/doxygen.css0000644000175200001440000001317012000056607020605 0ustar00collabora-develusers00000000000000body, table, div, p, dl { font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif; font-size: 12px; } /* @group Heading Levels */ h1 { text-align: center; font-size: 150%; } h2 { font-size: 110%; font-weight: bold; } h3 { font-size: 100%; } h3.version { font-size: 100%; text-align: center; } /* @end */ caption { font-weight: bold; } div.title{ font-size: 150%; text-align: center; margin: 2px; padding: 2px; } div.qindex, div.navtab{ background-color: #e8eef2; border: 1px solid #84b0c7; text-align: center; margin: 2px; padding: 2px; } div.qindex, div.navpath { width: 100%; line-height: 140%; } div.navtab { margin-right: 15px; } /* @group Link Styling */ a { color: #153788; font-weight: normal; text-decoration: none; } .contents a:visited { color: #1b77c5; } a:hover { text-decoration: underline; } a.qindex { font-weight: bold; } a.qindexHL { font-weight: bold; background-color: #6666cc; color: #ffffff; border: 1px double #9295C2; } .contents a.qindexHL:visited { color: #ffffff; } a.el { } a.elRef { } a.code { } a.codeRef { } /* @end */ dl.el { margin-left: -1cm; } .fragment { font-family: monospace, fixed; font-size: 100%; } pre.fragment { border: 1px solid #CCCCCC; background-color: #f5f5f5; padding: 4px 6px; margin: 4px 8px 4px 2px; } div.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px } div.groupHeader { margin-left: 16px; margin-top: 12px; margin-bottom: 6px; font-weight: bold; } div.groupText { margin-left: 16px; font-style: italic; } body { background: white; color: black; margin-right: 20px; margin-left: 20px; } td.indexkey { background-color: #e8eef2; font-weight: bold; border: 1px solid #CCCCCC; margin: 2px 0px 2px 0; padding: 2px 10px; } td.indexvalue { background-color: #e8eef2; border: 1px solid #CCCCCC; padding: 2px 10px; margin: 2px 0px; } tr.memlist { background-color: #f0f0f0; } p.formulaDsp { text-align: center; } img.formulaDsp { } img.formulaInl { vertical-align: middle; } /* @group Code Colorization */ span.keyword { color: #008000 } span.keywordtype { color: #604020 } span.keywordflow { color: #e08000 } span.comment { color: #800000 } span.preprocessor { color: #806020 } span.stringliteral { color: #002080 } span.charliteral { color: #008080 } span.vhdldigit { color: #ff00ff } span.vhdlchar { color: #000000 } span.vhdlkeyword { color: #700070 } span.vhdllogic { color: #ff0000 } /* @end */ .search { color: #003399; font-weight: bold; } form.search { margin-bottom: 0px; margin-top: 0px; } input.search { font-size: 75%; color: #000080; font-weight: normal; background-color: #e8eef2; } td.tiny { font-size: 75%; } .dirtab { padding: 4px; border-collapse: collapse; border: 1px solid #84b0c7; } th.dirtab { background: #e8eef2; font-weight: bold; } hr { height: 0; border: none; border-top: 1px solid #666; } /* @group Member Descriptions */ .mdescLeft, .mdescRight, .memItemLeft, .memItemRight, .memTemplItemLeft, .memTemplItemRight, .memTemplParams { background-color: #FAFAFA; border: none; margin: 4px; padding: 1px 0 0 8px; } .mdescLeft, .mdescRight { padding: 0px 8px 4px 8px; color: #555; } .memItemLeft, .memItemRight, .memTemplParams { border-top: 1px solid #ccc; } .memTemplParams { color: #606060; } /* @end */ /* @group Member Details */ /* Styles for detailed member documentation */ .memtemplate { font-size: 80%; color: #606060; font-weight: normal; margin-left: 3px; } .memnav { background-color: #e8eef2; border: 1px solid #84b0c7; text-align: center; margin: 2px; margin-right: 15px; padding: 2px; } .memitem { padding: 0; } .memname { white-space: nowrap; font-weight: bold; } .memproto { padding: 0; background-color: #d5e1e8; font-weight: bold; border: 1px solid #84b0c7; } .memdoc { padding: 2px 5px; border-top-width: 0; } .paramkey { text-align: right; } .paramtype { white-space: nowrap; } .paramname { color: #602020; white-space: nowrap; } .paramname em { font-style: normal; } /* @end */ /* @group Directory (tree) */ /* for the tree view */ .ftvtree { font-family: sans-serif; margin: 0.5em; } /* these are for tree view when used as main index */ .directory { font-size: 9pt; font-weight: bold; } .directory h3 { margin: 0px; margin-top: 1em; font-size: 11pt; } /* The following two styles can be used to replace the root node title with an image of your choice. Simply uncomment the next two styles, specify the name of your image and be sure to set 'height' to the proper pixel height of your image. */ /* .directory h3.swap { height: 61px; background-repeat: no-repeat; background-image: url("yourimage.gif"); } .directory h3.swap span { display: none; } */ .directory > h3 { margin-top: 0; } .directory p { margin: 0px; white-space: nowrap; } .directory div { display: none; margin: 0px; } .directory img { vertical-align: -30%; } /* these are for tree view when not used as main index */ .directory-alt { font-size: 100%; font-weight: bold; } .directory-alt h3 { margin: 0px; margin-top: 1em; font-size: 11pt; } .directory-alt > h3 { margin-top: 0; } .directory-alt p { margin: 0px; white-space: nowrap; } .directory-alt div { display: none; margin: 0px; } .directory-alt img { vertical-align: -30%; } /* @end */ address { font-style: normal; color: #333; } div.rationale:before { content: "Rationale:"; display: block; font-weight: bold; font-size: 0.85em; } div.rationale { font-style: italic; border-left: 0.25em solid #808080; padding-left: 0.5em; } div.rationale p { font-size: 0.85em; } telepathy-qt-0.9.3/tools/0000755000175200001440000000000012000056607017554 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/tools/repeat-tests.sh0000755000175200001440000000070412000056607022534 0ustar00collabora-develusers00000000000000#!/bin/sh if [ $# -ne 2 ] then echo "usage: $0 " echo "example: $0 \"make check-valgrind\" 100" echo " or: $0 \"make -j4 check\" 100" exit 1 fi for i in `seq 1 $2` do echo -n "Running test iteration ${i}... " log="test-round-${i}.log" $1 > ${log} 2>&1 if grep -q "FAIL" $log then echo "FAILED (log in $log)" else echo "PASSED" rm ${log} fi done telepathy-qt-0.9.3/tools/manager-file.py0000644000175200001440000001360412000056607022461 0ustar00collabora-develusers00000000000000#!/usr/bin/python # manager-file.py: generate .manager files and TpCMParamSpec arrays from the # same data (should be suitable for all connection managers that don't have # plugins) # # The master copy of this program is in the telepathy-glib repository - # please make any changes there. # # Copyright (c) Collabora Ltd. # # 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 import re import sys _NOT_C_STR = re.compile(r'[^A-Za-z0-9_-]') def c_string(x): # whitelist-based brute force and ignorance - escape nearly all punctuation return '"' + _NOT_C_STR.sub(lambda c: r'\x%02x' % ord(c), x) + '"' def desktop_string(x): return x.replace(' ', r'\s').replace('\n', r'\n').replace('\r', r'\r').replace('\t', r'\t') supported = list('sbuiqn') fdefaultencoders = { 's': desktop_string, 'b': (lambda b: b and '1' or '0'), 'u': (lambda n: '%u' % n), 'i': (lambda n: '%d' % n), 'q': (lambda n: '%u' % n), 'n': (lambda n: '%d' % n), } for x in supported: assert x in fdefaultencoders gtypes = { 's': 'G_TYPE_STRING', 'b': 'G_TYPE_BOOLEAN', 'u': 'G_TYPE_UINT', 'i': 'G_TYPE_INT', 'q': 'G_TYPE_UINT', 'n': 'G_TYPE_INT', } for x in supported: assert x in gtypes gdefaultencoders = { 's': c_string, 'b': (lambda b: b and 'GINT_TO_POINTER (TRUE)' or 'GINT_TO_POINTER (FALSE)'), 'u': (lambda n: 'GUINT_TO_POINTER (%u)' % n), 'i': (lambda n: 'GINT_TO_POINTER (%d)' % n), 'q': (lambda n: 'GUINT_TO_POINTER (%u)' % n), 'n': (lambda n: 'GINT_TO_POINTER (%d)' % n), } for x in supported: assert x in gdefaultencoders gdefaultdefaults = { 's': 'NULL', 'b': 'GINT_TO_POINTER (FALSE)', 'u': 'GUINT_TO_POINTER (0)', 'i': 'GINT_TO_POINTER (0)', 'q': 'GUINT_TO_POINTER (0)', 'n': 'GINT_TO_POINTER (0)', } for x in supported: assert x in gdefaultdefaults gflags = { 'has-default': 'TP_CONN_MGR_PARAM_FLAG_HAS_DEFAULT', 'register': 'TP_CONN_MGR_PARAM_FLAG_REGISTER', 'required': 'TP_CONN_MGR_PARAM_FLAG_REQUIRED', 'secret': 'TP_CONN_MGR_PARAM_FLAG_SECRET', 'dbus-property': 'TP_CONN_MGR_PARAM_FLAG_DBUS_PROPERTY', } def write_manager(f, manager, protos): # pointless backwards compat section print >> f, '[ConnectionManager]' print >> f, 'BusName=org.freedesktop.Telepathy.ConnectionManager.' + manager print >> f, 'ObjectPath=/org/freedesktop/Telepathy/ConnectionManager/' + manager # protocols for proto, params in protos.iteritems(): print >> f print >> f, '[Protocol %s]' % proto defaults = {} for param, info in params.iteritems(): dtype = info['dtype'] flags = info.get('flags', '').split() struct_field = info.get('struct_field', param.replace('-', '_')) filter = info.get('filter', 'NULL') filter_data = info.get('filter_data', 'NULL') setter_data = 'NULL' if 'default' in info: default = fdefaultencoders[dtype](info['default']) defaults[param] = default if flags: flags = ' ' + ' '.join(flags) else: flags = '' print >> f, 'param-%s=%s%s' % (param, desktop_string(dtype), flags) for param, default in defaults.iteritems(): print >> f, 'default-%s=%s' % (param, default) def write_c_params(f, manager, proto, struct, params): print >> f, "static const TpCMParamSpec %s_%s_params[] = {" % (manager, proto) for param, info in params.iteritems(): dtype = info['dtype'] flags = info.get('flags', '').split() struct_field = info.get('struct_field', param.replace('-', '_')) filter = info.get('filter', 'NULL') filter_data = info.get('filter_data', 'NULL') setter_data = 'NULL' if 'default' in info: default = gdefaultencoders[dtype](info['default']) else: default = gdefaultdefaults[dtype] if flags: flags = ' | '.join([gflags[flag] for flag in flags]) else: flags = '0' if struct is None or struct_field is None: struct_offset = '0' else: struct_offset = 'G_STRUCT_OFFSET (%s, %s)' % (struct, struct_field) print >> f, (''' { %s, %s, %s, %s, %s, /* default */ %s, /* struct offset */ %s, /* filter */ %s, /* filter data */ %s /* setter data */ },''' % (c_string(param), c_string(dtype), gtypes[dtype], flags, default, struct_offset, filter, filter_data, setter_data)) print >> f, " { NULL }" print >> f, "};" if __name__ == '__main__': environment = {} execfile(sys.argv[1], environment) f = open('%s/%s.manager' % (sys.argv[2], environment['MANAGER']), 'w') write_manager(f, environment['MANAGER'], environment['PARAMS']) f.close() f = open('%s/param-spec-struct.h' % sys.argv[2], 'w') for protocol in environment['PARAMS']: write_c_params(f, environment['MANAGER'], protocol, environment['STRUCTS'][protocol], environment['PARAMS'][protocol]) f.close() telepathy-qt-0.9.3/tools/qt-constants-gen.py0000644000175200001440000002121112000056607023330 0ustar00collabora-develusers00000000000000#!/usr/bin/python # # Copyright (C) 2008 Collabora Limited # 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 from sys import argv, stdout, stderr import codecs import xml.dom.minidom from getopt import gnu_getopt from libtpcodegen import NS_TP, get_descendant_text, get_by_path from libqtcodegen import format_docstring, RefRegistry class Generator(object): def __init__(self, opts): try: self.namespace = opts['--namespace'] self.must_define = opts.get('--must-define', None) dom = xml.dom.minidom.parse(opts['--specxml']) except KeyError, k: assert False, 'Missing required parameter %s' % k.args[0] self.define_prefix = None if '--define-prefix' in opts: self.define_prefix = opts['--define-prefix'] self.old_prefix = None if '--str-constant-prefix' in opts: self.old_prefix = opts['--str-constant-prefix'] self.spec = get_by_path(dom, "spec")[0] self.out = codecs.getwriter('utf-8')(stdout) self.refs = RefRegistry(self.spec) def h(self, code): self.out.write(code) def __call__(self): # Header self.h('/* Generated from ') self.h(get_descendant_text(get_by_path(self.spec, 'title'))) version = get_by_path(self.spec, "version") if version: self.h(', version ' + get_descendant_text(version)) self.h(""" */ """) if self.must_define: self.h(""" #ifndef %s #error %s #endif """ % (self.must_define, self.must_define)) self.h(""" #include /** * \\addtogroup typesconstants Types and constants * * Enumerated, flag, structure, list and mapping types and utility constants. */ /** * \\defgroup flagtypeconsts Flag type constants * \\ingroup typesconstants * * Types generated from the specification representing bit flag constants and * combinations of them (bitfields). */ /** * \\defgroup enumtypeconsts Enumerated type constants * \\ingroup typesconstants * * Types generated from the specification representing enumerated types ie. * types the values of which are mutually exclusive integral constants. */ /** * \\defgroup ifacestrconsts Interface string constants * \\ingroup typesconstants * * D-Bus interface names of the interfaces in the specification. */ /** * \\defgroup errorstrconsts Error string constants * \\ingroup typesconstants * * Names of the D-Bus errors in the specification. */ """) # Begin namespace self.h(""" namespace %s { """ % self.namespace) # Flags for flags in self.spec.getElementsByTagNameNS(NS_TP, 'flags'): self.do_flags(flags) # Enums for enum in self.spec.getElementsByTagNameNS(NS_TP, 'enum'): self.do_enum(enum) # End namespace self.h("""\ } """) # Interface names for iface in self.spec.getElementsByTagName('interface'): if self.old_prefix: self.h("""\ /** * \\ingroup ifacestrconsts * * The interface name "%(name)s". */ #define %(DEFINE)s "%(name)s" """ % {'name' : iface.getAttribute('name'), 'DEFINE' : self.old_prefix + 'INTERFACE_' + get_by_path(iface, '../@name').upper().replace('/', '')}) if self.define_prefix: self.h("""\ /** * \\ingroup ifacestrconsts * * The interface name "%(name)s" as a QLatin1String, usable in QString requiring contexts even when * building with Q_NO_CAST_FROM_ASCII defined. */ #define %(DEFINE)s (QLatin1String("%(name)s")) """ % {'name' : iface.getAttribute('name'), 'DEFINE' : self.define_prefix + 'IFACE_' + get_by_path(iface, '../@name').upper().replace('/', '')}) # Error names for error in get_by_path(self.spec, 'errors/error'): name = error.getAttribute('name') fullname = get_by_path(error, '../@namespace') + '.' + name.replace(' ', '') if self.old_prefix: define = self.old_prefix + 'ERROR_' + name.replace(' ', '_').replace('.', '_').upper() self.h("""\ /** * \\ingroup errorstrconsts * * The error name "%(fullname)s". %(docstring)s\ */ #define %(DEFINE)s "%(fullname)s" """ % {'fullname' : fullname, 'docstring': format_docstring(error, self.refs), 'DEFINE' : define}) if self.define_prefix: define = self.define_prefix + 'ERROR_' + name.replace(' ', '_').replace('.', '_').upper() self.h("""\ /** * \\ingroup errorstrconsts * * The error name "%(fullname)s" as a QLatin1String, usable in QString requiring contexts even when * building with Q_NO_CAST_FROM_ASCII defined. %(docstring)s\ */ #define %(DEFINE)s QLatin1String("%(fullname)s") """ % {'fullname' : fullname, 'docstring': format_docstring(error, self.refs), 'DEFINE' : define}) def do_flags(self, flags): singular = flags.getAttribute('singular') or \ flags.getAttribute('value-prefix') using_name = False if not singular: using_name = True singular = flags.getAttribute('name') if singular.endswith('lags'): singular = singular[:-1] if using_name and singular.endswith('s'): singular = singular[:-1] singular = singular.replace('_', '') plural = (flags.getAttribute('plural') or flags.getAttribute('name') or singular + 's').replace('_', '') self.h("""\ /** * \\ingroup flagtypeconsts * * Flag type generated from the specification. */ enum %(singular)s { """ % {'singular' : singular}) flagvalues = get_by_path(flags, 'flag') for flag in flagvalues: self.do_val(flag, singular, flag == flagvalues[-1]) self.h("""\ %s = 0xffffffffU """ % ("_" + singular + "Padding")) self.h("""\ }; /** * \\typedef QFlags<%(singular)s> %(plural)s * \\ingroup flagtypeconsts * * Type representing combinations of #%(singular)s values. %(docstring)s\ */ typedef QFlags<%(singular)s> %(plural)s; Q_DECLARE_OPERATORS_FOR_FLAGS(%(plural)s) """ % {'singular' : singular, 'plural' : plural, 'docstring' : format_docstring(flags, self.refs)}) def do_enum(self, enum): singular = enum.getAttribute('singular') or \ enum.getAttribute('name') value_prefix = enum.getAttribute('singular') or \ enum.getAttribute('value-prefix') or \ enum.getAttribute('name') if singular.endswith('lags'): singular = singular[:-1] plural = enum.getAttribute('plural') or singular + 's' singular = singular.replace('_', '') value_prefix = value_prefix.replace('_', '') vals = get_by_path(enum, 'enumvalue') self.h("""\ /** * \\enum %(singular)s * \\ingroup enumtypeconsts * * Enumerated type generated from the specification. %(docstring)s\ */ enum %(singular)s { """ % {'singular' : singular, 'docstring' : format_docstring(enum, self.refs)}) for val in vals: self.do_val(val, value_prefix, val == vals[-1]) self.h("""\ %s = 0xffffffffU }; """ % ("_" + singular + "Padding")) self.h("""\ /** * \\ingroup enumtypeconsts * * 1 higher than the highest valid value of %(singular)s. */ const int NUM_%(upper-plural)s = (%(last-val)s+1); """ % {'singular' : singular, 'upper-plural' : plural.upper(), 'last-val' : vals[-1].getAttribute('value')}) def do_val(self, val, prefix, last): name = (val.getAttribute('suffix') or val.getAttribute('name')).replace('_', '') self.h("""\ %s\ %s = %s, """ % (format_docstring(val, self.refs, indent=' * ', brackets=(' /**', ' */')), prefix + name, val.getAttribute('value'))) if __name__ == '__main__': options, argv = gnu_getopt(argv[1:], '', ['namespace=', 'str-constant-prefix=', 'define-prefix=', 'must-define=', 'specxml=']) Generator(dict(options))() telepathy-qt-0.9.3/tools/glib-ginterface-gen.py0000644000175200001440000007250112000056607023724 0ustar00collabora-develusers00000000000000#!/usr/bin/python # glib-ginterface-gen.py: service-side interface generator # # Generate dbus-glib 0.x service GInterfaces from the Telepathy specification. # The master copy of this program is in the telepathy-glib repository - # please make any changes there. # # Copyright (C) 2006, 2007 Collabora Limited # # 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 import sys import os.path import xml.dom.minidom from libglibcodegen import Signature, type_to_gtype, cmp_by_name, \ NS_TP, dbus_gutils_wincaps_to_uscore, \ signal_to_marshal_name, method_to_glue_marshal_name NS_TP = "http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0" class Generator(object): def __init__(self, dom, prefix, basename, signal_marshal_prefix, headers, end_headers, not_implemented_func, allow_havoc): self.dom = dom self.__header = [] self.__body = [] assert prefix.endswith('_') assert not signal_marshal_prefix.endswith('_') # The main_prefix, sub_prefix thing is to get: # FOO_ -> (FOO_, _) # FOO_SVC_ -> (FOO_, _SVC_) # but # FOO_BAR/ -> (FOO_BAR_, _) # FOO_BAR/SVC_ -> (FOO_BAR_, _SVC_) if '/' in prefix: main_prefix, sub_prefix = prefix.upper().split('/', 1) prefix = prefix.replace('/', '_') else: main_prefix, sub_prefix = prefix.upper().split('_', 1) self.MAIN_PREFIX_ = main_prefix + '_' self._SUB_PREFIX_ = '_' + sub_prefix self.Prefix_ = prefix self.Prefix = prefix.replace('_', '') self.prefix_ = prefix.lower() self.PREFIX_ = prefix.upper() self.basename = basename self.signal_marshal_prefix = signal_marshal_prefix self.headers = headers self.end_headers = end_headers self.not_implemented_func = not_implemented_func self.allow_havoc = allow_havoc def h(self, s): self.__header.append(s) def b(self, s): self.__body.append(s) def do_node(self, node): node_name = node.getAttribute('name').replace('/', '') node_name_mixed = self.node_name_mixed = node_name.replace('_', '') node_name_lc = self.node_name_lc = node_name.lower() node_name_uc = self.node_name_uc = node_name.upper() interfaces = node.getElementsByTagName('interface') assert len(interfaces) == 1, interfaces interface = interfaces[0] self.iface_name = interface.getAttribute('name') tmp = interface.getAttribute('tp:implement-service') if tmp == "no": return tmp = interface.getAttribute('tp:causes-havoc') if tmp and not self.allow_havoc: raise AssertionError('%s is %s' % (self.iface_name, tmp)) self.b('static const DBusGObjectInfo _%s%s_object_info;' % (self.prefix_, node_name_lc)) self.b('') methods = interface.getElementsByTagName('method') signals = interface.getElementsByTagName('signal') properties = interface.getElementsByTagName('property') # Don't put properties in dbus-glib glue glue_properties = [] self.b('struct _%s%sClass {' % (self.Prefix, node_name_mixed)) self.b(' GTypeInterface parent_class;') for method in methods: self.b(' %s %s;' % self.get_method_impl_names(method)) self.b('};') self.b('') if signals: self.b('enum {') for signal in signals: self.b(' %s,' % self.get_signal_const_entry(signal)) self.b(' N_%s_SIGNALS' % node_name_uc) self.b('};') self.b('static guint %s_signals[N_%s_SIGNALS] = {0};' % (node_name_lc, node_name_uc)) self.b('') self.b('static void %s%s_base_init (gpointer klass);' % (self.prefix_, node_name_lc)) self.b('') self.b('GType') self.b('%s%s_get_type (void)' % (self.prefix_, node_name_lc)) self.b('{') self.b(' static GType type = 0;') self.b('') self.b(' if (G_UNLIKELY (type == 0))') self.b(' {') self.b(' static const GTypeInfo info = {') self.b(' sizeof (%s%sClass),' % (self.Prefix, node_name_mixed)) self.b(' %s%s_base_init, /* base_init */' % (self.prefix_, node_name_lc)) self.b(' NULL, /* base_finalize */') self.b(' NULL, /* class_init */') self.b(' NULL, /* class_finalize */') self.b(' NULL, /* class_data */') self.b(' 0,') self.b(' 0, /* n_preallocs */') self.b(' NULL /* instance_init */') self.b(' };') self.b('') self.b(' type = g_type_register_static (G_TYPE_INTERFACE,') self.b(' "%s%s", &info, 0);' % (self.Prefix, node_name_mixed)) self.b(' }') self.b('') self.b(' return type;') self.b('}') self.b('') self.h('/**') self.h(' * %s%s:' % (self.Prefix, node_name_mixed)) self.h(' *') self.h(' * Dummy typedef representing any implementation of this ' 'interface.') self.h(' */') self.h('typedef struct _%s%s %s%s;' % (self.Prefix, node_name_mixed, self.Prefix, node_name_mixed)) self.h('') self.h('/**') self.h(' * %s%sClass:' % (self.Prefix, node_name_mixed)) self.h(' *') self.h(' * The class of %s%s.' % (self.Prefix, node_name_mixed)) if methods: self.h(' *') self.h(' * In a full implementation of this interface (i.e. all') self.h(' * methods implemented), the interface initialization') self.h(' * function used in G_IMPLEMENT_INTERFACE() would') self.h(' * typically look like this:') self.h(' *') self.h(' * ') self.h(' * static void') self.h(' * implement_%s (gpointer klass,' % self.node_name_lc) self.h(' * gpointer unused G_GNUC_UNUSED)') self.h(' * {') # "#" is special to gtkdoc under some circumstances; it appears # that escaping "##" as "##" or "##" doesn't work, # but adding an extra hash symbol does. Thanks, gtkdoc :-( self.h(' * #define IMPLEMENT(x) %s%s_implement_###x (\\' % (self.prefix_, self.node_name_lc)) self.h(' * klass, my_object_###x)') for method in methods: class_member_name = method.getAttribute('tp:name-for-bindings') class_member_name = class_member_name.lower() self.h(' * IMPLEMENT (%s);' % class_member_name) self.h(' * #undef IMPLEMENT') self.h(' * }') self.h(' * ') else: self.h(' * This interface has no D-Bus methods, so an') self.h(' * implementation can typically pass %NULL to') self.h(' * G_IMPLEMENT_INTERFACE() as the interface') self.h(' * initialization function.') self.h(' */') self.h('typedef struct _%s%sClass %s%sClass;' % (self.Prefix, node_name_mixed, self.Prefix, node_name_mixed)) self.h('') self.h('GType %s%s_get_type (void);' % (self.prefix_, node_name_lc)) gtype = self.current_gtype = \ self.MAIN_PREFIX_ + 'TYPE' + self._SUB_PREFIX_ + node_name_uc classname = self.Prefix + node_name_mixed self.h('#define %s \\\n (%s%s_get_type ())' % (gtype, self.prefix_, node_name_lc)) self.h('#define %s%s(obj) \\\n' ' (G_TYPE_CHECK_INSTANCE_CAST((obj), %s, %s))' % (self.PREFIX_, node_name_uc, gtype, classname)) self.h('#define %sIS%s%s(obj) \\\n' ' (G_TYPE_CHECK_INSTANCE_TYPE((obj), %s))' % (self.MAIN_PREFIX_, self._SUB_PREFIX_, node_name_uc, gtype)) self.h('#define %s%s_GET_CLASS(obj) \\\n' ' (G_TYPE_INSTANCE_GET_INTERFACE((obj), %s, %sClass))' % (self.PREFIX_, node_name_uc, gtype, classname)) self.h('') self.h('') base_init_code = [] for method in methods: self.do_method(method) for signal in signals: base_init_code.extend(self.do_signal(signal)) self.b('static inline void') self.b('%s%s_base_init_once (gpointer klass G_GNUC_UNUSED)' % (self.prefix_, node_name_lc)) self.b('{') if properties: self.b(' static TpDBusPropertiesMixinPropInfo properties[%d] = {' % (len(properties) + 1)) for m in properties: access = m.getAttribute('access') assert access in ('read', 'write', 'readwrite') if access == 'read': flags = 'TP_DBUS_PROPERTIES_MIXIN_FLAG_READ' elif access == 'write': flags = 'TP_DBUS_PROPERTIES_MIXIN_FLAG_WRITE' else: flags = ('TP_DBUS_PROPERTIES_MIXIN_FLAG_READ | ' 'TP_DBUS_PROPERTIES_MIXIN_FLAG_WRITE') self.b(' { 0, %s, "%s", 0, NULL, NULL }, /* %s */' % (flags, m.getAttribute('type'), m.getAttribute('name'))) self.b(' { 0, 0, NULL, 0, NULL, NULL }') self.b(' };') self.b(' static TpDBusPropertiesMixinIfaceInfo interface =') self.b(' { 0, properties, NULL, NULL };') self.b('') self.b(' dbus_g_object_type_install_info (%s%s_get_type (),' % (self.prefix_, node_name_lc)) self.b(' &_%s%s_object_info);' % (self.prefix_, node_name_lc)) self.b('') if properties: self.b(' interface.dbus_interface = g_quark_from_static_string ' '("%s");' % self.iface_name) for i, m in enumerate(properties): self.b(' properties[%d].name = g_quark_from_static_string ("%s");' % (i, m.getAttribute('name'))) self.b(' properties[%d].type = %s;' % (i, type_to_gtype(m.getAttribute('type'))[1])) self.b(' tp_svc_interface_set_dbus_properties_info (%s, &interface);' % self.current_gtype) self.b('') for s in base_init_code: self.b(s) self.b('}') self.b('static void') self.b('%s%s_base_init (gpointer klass)' % (self.prefix_, node_name_lc)) self.b('{') self.b(' static gboolean initialized = FALSE;') self.b('') self.b(' if (!initialized)') self.b(' {') self.b(' initialized = TRUE;') self.b(' %s%s_base_init_once (klass);' % (self.prefix_, node_name_lc)) self.b(' }') # insert anything we need to do per implementation here self.b('}') self.h('') self.b('static const DBusGMethodInfo _%s%s_methods[] = {' % (self.prefix_, node_name_lc)) method_blob, offsets = self.get_method_glue(methods) for method, offset in zip(methods, offsets): self.do_method_glue(method, offset) if len(methods) == 0: # empty arrays are a gcc extension, so put in a dummy member self.b(" { NULL, NULL, 0 }") self.b('};') self.b('') self.b('static const DBusGObjectInfo _%s%s_object_info = {' % (self.prefix_, node_name_lc)) self.b(' 0,') # version self.b(' _%s%s_methods,' % (self.prefix_, node_name_lc)) self.b(' %d,' % len(methods)) self.b('"' + method_blob.replace('\0', '\\0') + '",') self.b('"' + self.get_signal_glue(signals).replace('\0', '\\0') + '",') self.b('"' + self.get_property_glue(glue_properties).replace('\0', '\\0') + '",') self.b('};') self.b('') self.node_name_mixed = None self.node_name_lc = None self.node_name_uc = None def get_method_glue(self, methods): info = [] offsets = [] for method in methods: offsets.append(len(''.join(info))) info.append(self.iface_name + '\0') info.append(method.getAttribute('name') + '\0') info.append('A\0') # async counter = 0 for arg in method.getElementsByTagName('arg'): out = arg.getAttribute('direction') == 'out' name = arg.getAttribute('name') if not name: assert out name = 'arg%u' % counter counter += 1 info.append(name + '\0') if out: info.append('O\0') else: info.append('I\0') if out: info.append('F\0') # not const info.append('N\0') # not error or return info.append(arg.getAttribute('type') + '\0') info.append('\0') return ''.join(info) + '\0', offsets def do_method_glue(self, method, offset): lc_name = method.getAttribute('tp:name-for-bindings') if method.getAttribute('name') != lc_name.replace('_', ''): raise AssertionError('Method %s tp:name-for-bindings (%s) does ' 'not match' % (method.getAttribute('name'), lc_name)) lc_name = lc_name.lower() marshaller = method_to_glue_marshal_name(method, self.signal_marshal_prefix) wrapper = self.prefix_ + self.node_name_lc + '_' + lc_name self.b(" { (GCallback) %s, %s, %d }," % (wrapper, marshaller, offset)) def get_signal_glue(self, signals): info = [] for signal in signals: info.append(self.iface_name) info.append(signal.getAttribute('name')) return '\0'.join(info) + '\0\0' # the implementation can be the same get_property_glue = get_signal_glue def get_method_impl_names(self, method): dbus_method_name = method.getAttribute('name') class_member_name = method.getAttribute('tp:name-for-bindings') if dbus_method_name != class_member_name.replace('_', ''): raise AssertionError('Method %s tp:name-for-bindings (%s) does ' 'not match' % (dbus_method_name, class_member_name)) class_member_name = class_member_name.lower() stub_name = (self.prefix_ + self.node_name_lc + '_' + class_member_name) return (stub_name + '_impl', class_member_name) def do_method(self, method): assert self.node_name_mixed is not None in_class = [] # Examples refer to Thing.DoStuff (su) -> ii # DoStuff dbus_method_name = method.getAttribute('name') # do_stuff class_member_name = method.getAttribute('tp:name-for-bindings') if dbus_method_name != class_member_name.replace('_', ''): raise AssertionError('Method %s tp:name-for-bindings (%s) does ' 'not match' % (dbus_method_name, class_member_name)) class_member_name = class_member_name.lower() # void tp_svc_thing_do_stuff (TpSvcThing *, const char *, guint, # DBusGMethodInvocation *); stub_name = (self.prefix_ + self.node_name_lc + '_' + class_member_name) # typedef void (*tp_svc_thing_do_stuff_impl) (TpSvcThing *, # const char *, guint, DBusGMethodInvocation); impl_name = stub_name + '_impl' # void tp_svc_thing_return_from_do_stuff (DBusGMethodInvocation *, # gint, gint); ret_name = (self.prefix_ + self.node_name_lc + '_return_from_' + class_member_name) # Gather arguments in_args = [] out_args = [] for i in method.getElementsByTagName('arg'): name = i.getAttribute('name') direction = i.getAttribute('direction') or 'in' dtype = i.getAttribute('type') assert direction in ('in', 'out') if name: name = direction + '_' + name elif direction == 'in': name = direction + str(len(in_args)) else: name = direction + str(len(out_args)) ctype, gtype, marshaller, pointer = type_to_gtype(dtype) if pointer: ctype = 'const ' + ctype struct = (ctype, name) if direction == 'in': in_args.append(struct) else: out_args.append(struct) # Implementation type declaration (in header, docs in body) self.b('/**') self.b(' * %s:' % impl_name) self.b(' * @self: The object implementing this interface') for (ctype, name) in in_args: self.b(' * @%s: %s (FIXME, generate documentation)' % (name, ctype)) self.b(' * @context: Used to return values or throw an error') self.b(' *') self.b(' * The signature of an implementation of the D-Bus method') self.b(' * %s on interface %s.' % (dbus_method_name, self.iface_name)) self.b(' */') self.h('typedef void (*%s) (%s%s *self,' % (impl_name, self.Prefix, self.node_name_mixed)) for (ctype, name) in in_args: self.h(' %s%s,' % (ctype, name)) self.h(' DBusGMethodInvocation *context);') # Class member (in class definition) in_class.append(' %s %s;' % (impl_name, class_member_name)) # Stub definition (in body only - it's static) self.b('static void') self.b('%s (%s%s *self,' % (stub_name, self.Prefix, self.node_name_mixed)) for (ctype, name) in in_args: self.b(' %s%s,' % (ctype, name)) self.b(' DBusGMethodInvocation *context)') self.b('{') self.b(' %s impl = (%s%s_GET_CLASS (self)->%s);' % (impl_name, self.PREFIX_, self.node_name_uc, class_member_name)) self.b('') self.b(' if (impl != NULL)') tmp = ['self'] + [name for (ctype, name) in in_args] + ['context'] self.b(' {') self.b(' (impl) (%s);' % ',\n '.join(tmp)) self.b(' }') self.b(' else') self.b(' {') if self.not_implemented_func: self.b(' %s (context);' % self.not_implemented_func) else: self.b(' GError e = { DBUS_GERROR, ') self.b(' DBUS_GERROR_UNKNOWN_METHOD,') self.b(' "Method not implemented" };') self.b('') self.b(' dbus_g_method_return_error (context, &e);') self.b(' }') self.b('}') self.b('') # Implementation registration (in both header and body) self.h('void %s%s_implement_%s (%s%sClass *klass, %s impl);' % (self.prefix_, self.node_name_lc, class_member_name, self.Prefix, self.node_name_mixed, impl_name)) self.b('/**') self.b(' * %s%s_implement_%s:' % (self.prefix_, self.node_name_lc, class_member_name)) self.b(' * @klass: A class whose instances implement this interface') self.b(' * @impl: A callback used to implement the %s D-Bus method' % dbus_method_name) self.b(' *') self.b(' * Register an implementation for the %s method in the vtable' % dbus_method_name) self.b(' * of an implementation of this interface. To be called from') self.b(' * the interface init function.') self.b(' */') self.b('void') self.b('%s%s_implement_%s (%s%sClass *klass, %s impl)' % (self.prefix_, self.node_name_lc, class_member_name, self.Prefix, self.node_name_mixed, impl_name)) self.b('{') self.b(' klass->%s = impl;' % class_member_name) self.b('}') self.b('') # Return convenience function (static inline, in header) self.h('/**') self.h(' * %s:' % ret_name) self.h(' * @context: The D-Bus method invocation context') for (ctype, name) in out_args: self.h(' * @%s: %s (FIXME, generate documentation)' % (name, ctype)) self.h(' *') self.h(' * Return successfully by calling dbus_g_method_return().') self.h(' * This inline function exists only to provide type-safety.') self.h(' */') tmp = (['DBusGMethodInvocation *context'] + [ctype + name for (ctype, name) in out_args]) self.h('static inline') self.h('/* this comment is to stop gtkdoc realising this is static */') self.h(('void %s (' % ret_name) + (',\n '.join(tmp)) + ');') self.h('static inline void') self.h(('%s (' % ret_name) + (',\n '.join(tmp)) + ')') self.h('{') tmp = ['context'] + [name for (ctype, name) in out_args] self.h(' dbus_g_method_return (' + ',\n '.join(tmp) + ');') self.h('}') self.h('') return in_class def get_signal_const_entry(self, signal): assert self.node_name_uc is not None return ('SIGNAL_%s_%s' % (self.node_name_uc, signal.getAttribute('name'))) def do_signal(self, signal): assert self.node_name_mixed is not None in_base_init = [] # for signal: Thing::StuffHappened (s, u) # we want to emit: # void tp_svc_thing_emit_stuff_happened (gpointer instance, # const char *arg0, guint arg1); dbus_name = signal.getAttribute('name') ugly_name = signal.getAttribute('tp:name-for-bindings') if dbus_name != ugly_name.replace('_', ''): raise AssertionError('Signal %s tp:name-for-bindings (%s) does ' 'not match' % (dbus_name, ugly_name)) stub_name = (self.prefix_ + self.node_name_lc + '_emit_' + ugly_name.lower()) const_name = self.get_signal_const_entry(signal) # Gather arguments args = [] for i in signal.getElementsByTagName('arg'): name = i.getAttribute('name') dtype = i.getAttribute('type') tp_type = i.getAttribute('tp:type') if name: name = 'arg_' + name else: name = 'arg' + str(len(args)) ctype, gtype, marshaller, pointer = type_to_gtype(dtype) if pointer: ctype = 'const ' + ctype struct = (ctype, name, gtype) args.append(struct) tmp = (['gpointer instance'] + [ctype + name for (ctype, name, gtype) in args]) self.h(('void %s (' % stub_name) + (',\n '.join(tmp)) + ');') # FIXME: emit docs self.b('/**') self.b(' * %s:' % stub_name) self.b(' * @instance: The object implementing this interface') for (ctype, name, gtype) in args: self.b(' * @%s: %s (FIXME, generate documentation)' % (name, ctype)) self.b(' *') self.b(' * Type-safe wrapper around g_signal_emit to emit the') self.b(' * %s signal on interface %s.' % (dbus_name, self.iface_name)) self.b(' */') self.b('void') self.b(('%s (' % stub_name) + (',\n '.join(tmp)) + ')') self.b('{') self.b(' g_assert (instance != NULL);') self.b(' g_assert (G_TYPE_CHECK_INSTANCE_TYPE (instance, %s));' % (self.current_gtype)) tmp = (['instance', '%s_signals[%s]' % (self.node_name_lc, const_name), '0'] + [name for (ctype, name, gtype) in args]) self.b(' g_signal_emit (' + ',\n '.join(tmp) + ');') self.b('}') self.b('') signal_name = dbus_gutils_wincaps_to_uscore(dbus_name).replace('_', '-') in_base_init.append(' /**') in_base_init.append(' * %s%s::%s:' % (self.Prefix, self.node_name_mixed, signal_name)) for (ctype, name, gtype) in args: in_base_init.append(' * @%s: %s (FIXME, generate documentation)' % (name, ctype)) in_base_init.append(' *') in_base_init.append(' * The %s D-Bus signal is emitted whenever ' 'this GObject signal is.' % dbus_name) in_base_init.append(' */') in_base_init.append(' %s_signals[%s] =' % (self.node_name_lc, const_name)) in_base_init.append(' g_signal_new ("%s",' % signal_name) in_base_init.append(' G_OBJECT_CLASS_TYPE (klass),') in_base_init.append(' G_SIGNAL_RUN_LAST|G_SIGNAL_DETAILED,') in_base_init.append(' 0,') in_base_init.append(' NULL, NULL,') in_base_init.append(' %s,' % signal_to_marshal_name(signal, self.signal_marshal_prefix)) in_base_init.append(' G_TYPE_NONE,') tmp = ['%d' % len(args)] + [gtype for (ctype, name, gtype) in args] in_base_init.append(' %s);' % ',\n '.join(tmp)) in_base_init.append('') return in_base_init def have_properties(self, nodes): for node in nodes: interface = node.getElementsByTagName('interface')[0] if interface.getElementsByTagName('property'): return True return False def __call__(self): nodes = self.dom.getElementsByTagName('node') nodes.sort(cmp_by_name) self.h('#include ') self.h('#include ') if self.have_properties(nodes): self.h('#include ') self.h('') self.h('G_BEGIN_DECLS') self.h('') self.b('#include "%s.h"' % self.basename) self.b('') for header in self.headers: self.b('#include %s' % header) self.b('') for node in nodes: self.do_node(node) self.h('') self.h('G_END_DECLS') self.b('') for header in self.end_headers: self.b('#include %s' % header) self.h('') self.b('') open(self.basename + '.h', 'w').write('\n'.join(self.__header)) open(self.basename + '.c', 'w').write('\n'.join(self.__body)) def cmdline_error(): print """\ usage: gen-ginterface [OPTIONS] xmlfile Prefix_ options: --include='' (may be repeated) --include='"header.h"' (ditto) --include-end='"header.h"' (ditto) Include extra headers in the generated .c file --signal-marshal-prefix='prefix' Use the given prefix on generated signal marshallers (default is prefix.lower()). --filename='BASENAME' Set the basename for the output files (default is prefix.lower() + 'ginterfaces') --not-implemented-func='symbol' Set action when methods not implemented in the interface vtable are called. symbol must have signature void symbol (DBusGMethodInvocation *context) and return some sort of "not implemented" error via dbus_g_method_return_error (context, ...) """ sys.exit(1) if __name__ == '__main__': from getopt import gnu_getopt options, argv = gnu_getopt(sys.argv[1:], '', ['filename=', 'signal-marshal-prefix=', 'include=', 'include-end=', 'allow-unstable', 'not-implemented-func=']) try: prefix = argv[1] except IndexError: cmdline_error() basename = prefix.lower() + 'ginterfaces' signal_marshal_prefix = prefix.lower().rstrip('_') headers = [] end_headers = [] not_implemented_func = '' allow_havoc = False for option, value in options: if option == '--filename': basename = value elif option == '--signal-marshal-prefix': signal_marshal_prefix = value elif option == '--include': if value[0] not in '<"': value = '"%s"' % value headers.append(value) elif option == '--include-end': if value[0] not in '<"': value = '"%s"' % value end_headers.append(value) elif option == '--not-implemented-func': not_implemented_func = value elif option == '--allow-unstable': allow_havoc = True try: dom = xml.dom.minidom.parse(argv[0]) except IndexError: cmdline_error() Generator(dom, prefix, basename, signal_marshal_prefix, headers, end_headers, not_implemented_func, allow_havoc)() telepathy-qt-0.9.3/tools/libglibcodegen.py0000644000175200001440000001456312000056607023070 0ustar00collabora-develusers00000000000000"""Library code for GLib/D-Bus-related code generation. The master copy of this library is in the telepathy-glib repository - please make any changes there. """ # Copyright (C) 2006-2008 Collabora Limited # # 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 from libtpcodegen import NS_TP, \ Signature, \ cmp_by_name, \ escape_as_identifier, \ get_by_path, \ get_descendant_text, \ get_docstring, \ xml_escape, \ get_deprecated def dbus_gutils_wincaps_to_uscore(s): """Bug-for-bug compatible Python port of _dbus_gutils_wincaps_to_uscore which gets sequences of capital letters wrong in the same way. (e.g. in Telepathy, SendDTMF -> send_dt_mf) """ ret = '' for c in s: if c >= 'A' and c <= 'Z': length = len(ret) if length > 0 and (length < 2 or ret[length-2] != '_'): ret += '_' ret += c.lower() else: ret += c return ret def signal_to_marshal_type(signal): """ return a list of strings indicating the marshalling type for this signal. """ mtype=[] for i in signal.getElementsByTagName("arg"): name =i.getAttribute("name") type = i.getAttribute("type") mtype.append(type_to_gtype(type)[2]) return mtype _glib_marshallers = ['VOID', 'BOOLEAN', 'CHAR', 'UCHAR', 'INT', 'STRING', 'UINT', 'LONG', 'ULONG', 'ENUM', 'FLAGS', 'FLOAT', 'DOUBLE', 'STRING', 'PARAM', 'BOXED', 'POINTER', 'OBJECT', 'UINT_POINTER'] def signal_to_marshal_name(signal, prefix): mtype = signal_to_marshal_type(signal) if len(mtype): name = '_'.join(mtype) else: name = 'VOID' if name in _glib_marshallers: return 'g_cclosure_marshal_VOID__' + name else: return prefix + '_marshal_VOID__' + name def method_to_glue_marshal_name(method, prefix): mtype = [] for i in method.getElementsByTagName("arg"): if i.getAttribute("direction") != "out": type = i.getAttribute("type") mtype.append(type_to_gtype(type)[2]) mtype.append('POINTER') name = '_'.join(mtype) if name in _glib_marshallers: return 'g_cclosure_marshal_VOID__' + name else: return prefix + '_marshal_VOID__' + name def type_to_gtype(s): if s == 'y': #byte return ("guchar ", "G_TYPE_UCHAR","UCHAR", False) elif s == 'b': #boolean return ("gboolean ", "G_TYPE_BOOLEAN","BOOLEAN", False) elif s == 'n': #int16 return ("gint ", "G_TYPE_INT","INT", False) elif s == 'q': #uint16 return ("guint ", "G_TYPE_UINT","UINT", False) elif s == 'i': #int32 return ("gint ", "G_TYPE_INT","INT", False) elif s == 'u': #uint32 return ("guint ", "G_TYPE_UINT","UINT", False) elif s == 'x': #int64 return ("gint64 ", "G_TYPE_INT64","INT64", False) elif s == 't': #uint64 return ("guint64 ", "G_TYPE_UINT64","UINT64", False) elif s == 'd': #double return ("gdouble ", "G_TYPE_DOUBLE","DOUBLE", False) elif s == 's': #string return ("gchar *", "G_TYPE_STRING", "STRING", True) elif s == 'g': #signature - FIXME return ("gchar *", "DBUS_TYPE_G_SIGNATURE", "STRING", True) elif s == 'o': #object path return ("gchar *", "DBUS_TYPE_G_OBJECT_PATH", "BOXED", True) elif s == 'v': #variant return ("GValue *", "G_TYPE_VALUE", "BOXED", True) elif s == 'as': #array of strings return ("gchar **", "G_TYPE_STRV", "BOXED", True) elif s == 'ay': #byte array return ("GArray *", "dbus_g_type_get_collection (\"GArray\", G_TYPE_UCHAR)", "BOXED", True) elif s == 'au': #uint array return ("GArray *", "DBUS_TYPE_G_UINT_ARRAY", "BOXED", True) elif s == 'ai': #int array return ("GArray *", "DBUS_TYPE_G_INT_ARRAY", "BOXED", True) elif s == 'ax': #int64 array return ("GArray *", "DBUS_TYPE_G_INT64_ARRAY", "BOXED", True) elif s == 'at': #uint64 array return ("GArray *", "DBUS_TYPE_G_UINT64_ARRAY", "BOXED", True) elif s == 'ad': #double array return ("GArray *", "DBUS_TYPE_G_DOUBLE_ARRAY", "BOXED", True) elif s == 'ab': #boolean array return ("GArray *", "DBUS_TYPE_G_BOOLEAN_ARRAY", "BOXED", True) elif s == 'ao': #object path array return ("GPtrArray *", 'dbus_g_type_get_collection ("GPtrArray",' ' DBUS_TYPE_G_OBJECT_PATH)', "BOXED", True) elif s == 'a{ss}': #hash table of string to string return ("GHashTable *", "DBUS_TYPE_G_STRING_STRING_HASHTABLE", "BOXED", False) elif s[:2] == 'a{': #some arbitrary hash tables if s[2] not in ('y', 'b', 'n', 'q', 'i', 'u', 's', 'o', 'g'): raise Exception, "can't index a hashtable off non-basic type " + s first = type_to_gtype(s[2]) second = type_to_gtype(s[3:-1]) return ("GHashTable *", "(dbus_g_type_get_map (\"GHashTable\", " + first[1] + ", " + second[1] + "))", "BOXED", False) elif s[:2] in ('a(', 'aa'): # array of structs or arrays, recurse gtype = type_to_gtype(s[1:])[1] return ("GPtrArray *", "(dbus_g_type_get_collection (\"GPtrArray\", "+gtype+"))", "BOXED", True) elif s[:1] == '(': #struct gtype = "(dbus_g_type_get_struct (\"GValueArray\", " for subsig in Signature(s[1:-1]): gtype = gtype + type_to_gtype(subsig)[1] + ", " gtype = gtype + "G_TYPE_INVALID))" return ("GValueArray *", gtype, "BOXED", True) # we just don't know .. raise Exception, "don't know the GType for " + s telepathy-qt-0.9.3/tools/with-session-bus.sh0000644000175200001440000000427412000056607023342 0ustar00collabora-develusers00000000000000#!/bin/sh # with-session-bus.sh - run a program with a temporary D-Bus session daemon # # The canonical location of this program is the telepathy-glib tools/ # directory, please synchronize any changes with that copy. # # Copyright (C) 2007-2008 Collabora Ltd. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. set -e me=with-session-bus dbus_daemon_args="--print-address=5 --print-pid=6 --fork" sleep=0 usage () { echo "usage: $me [options] -- program [program_options]" >&2 echo "Requires write access to the current directory." >&2 echo "" >&2 echo "If \$WITH_SESSION_BUS_FORK_DBUS_MONITOR is set, fork dbus-monitor" >&2 echo "with the arguments in \$WITH_SESSION_BUS_FORK_DBUS_MONITOR_OPT." >&2 echo "The output of dbus-monitor is saved in $me-.dbus-monitor-logs" >&2 exit 2 } while test "z$1" != "z--"; do case "$1" in --sleep=*) sleep="$1" sleep="${sleep#--sleep=}" shift ;; --session) dbus_daemon_args="$dbus_daemon_args --session" shift ;; --config-file=*) # FIXME: assumes config file doesn't contain any special characters dbus_daemon_args="$dbus_daemon_args $1" shift ;; *) usage ;; esac done shift if test "z$1" = "z"; then usage; fi exec 5> $me-$$.address exec 6> $me-$$.pid cleanup () { pid=`head -n1 $me-$$.pid` if test -n "$pid" ; then echo "Killing temporary bus daemon: $pid" >&2 kill -INT "$pid" fi rm -f $me-$$.address rm -f $me-$$.pid } trap cleanup INT HUP TERM dbus-daemon $dbus_daemon_args { echo -n "Temporary bus daemon is "; cat $me-$$.address; } >&2 { echo -n "Temporary bus daemon PID is "; head -n1 $me-$$.pid; } >&2 e=0 DBUS_SESSION_BUS_ADDRESS="`cat $me-$$.address`" export DBUS_SESSION_BUS_ADDRESS if [ -n "$WITH_SESSION_BUS_FORK_DBUS_MONITOR" ] ; then echo -n "Forking dbus-monitor $WITH_SESSION_BUS_FORK_DBUS_MONITOR_OPT" >&2 dbus-monitor $WITH_SESSION_BUS_FORK_DBUS_MONITOR_OPT \ > $me-$$.dbus-monitor-logs 2>&1 & fi "$@" || e=$? if test $sleep != 0; then sleep $sleep fi trap - INT HUP TERM cleanup exit $e telepathy-qt-0.9.3/tools/check-misc.sh0000644000175200001440000000036012000056607022115 0ustar00collabora-develusers00000000000000#!/bin/sh fail=0 ( . "${tools_dir}"/check-whitespace.sh ) || fail=$? if egrep '(Free\s*Software\s*Foundation.*02139|02111-1307)' "$@" then echo "^^^ The above files contain the FSF's old address in GPL headers" fail=1 fi exit $fail telepathy-qt-0.9.3/tools/qt-types-gen.py0000644000175200001440000004120312000056607022463 0ustar00collabora-develusers00000000000000#!/usr/bin/python # # Copyright (C) 2008 Collabora Limited # 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 import sys import xml.dom.minidom from getopt import gnu_getopt from libtpcodegen import NS_TP, get_descendant_text, get_by_path from libqtcodegen import binding_from_usage, binding_from_decl, extract_arg_or_member_info, format_docstring, gather_externals, gather_custom_lists, get_qt_name, get_headerfile_cmd, RefRegistry class BrokenSpecException(Exception): pass class MissingTypes(BrokenSpecException): def __init__(self, types): super(MissingTypes, self).__init__(self) self.types = types def __str__(self): typelist = ''.join([' %s' % t for t in self.types]) return "The following types were used, but not provided by the spec " \ "or by declarations in all.xml:\n%s" % typelist class UnresolvedDependency(BrokenSpecException): def __init__(self, child, parent): super(UnresolvedDependency, self).__init__(self) self.child = child self.parent = parent def __str__(self): return 'Type %s has unresolved dependency on %s' % ( self.child, self.parent) class EmptyStruct(BrokenSpecException): def __init__(self, struct_name): super(EmptyStruct, self).__init__(self) self.struct_name = struct_name def __str__(self): return 'tp:struct %s should have some members' % self.struct_name class MalformedMapping(BrokenSpecException): def __init__(self, mapping_name, members): super(MalformedMapping, self).__init__(self) self.mapping_name = mapping_name self.members = members def __str__(self): return 'tp:mapping %s should have 2 members, not %u' % ( self.mapping_name, self.members) class WTF(BrokenSpecException): def __init__(self, element_name): super(BrokenSpecException, self).__init__(self) self.element_name = element_name def __str__(self): return 'What the hell is a tp:%s?' % self.element_name class DepInfo: def __init__(self, el, externals, custom_lists): self.el = el name = get_by_path(el, '@name') array_name = get_by_path(el, '@array-name') array_depth = get_by_path(el, '@array-depth') if array_depth: array_depth = int(array_depth) else: array_depth = None self.binding = binding_from_decl(name, array_name, array_depth) self.deps = [] for member in get_by_path(el, 'member'): sig = member.getAttribute('type') tptype = member.getAttributeNS(NS_TP, 'type') if (sig, tptype) in externals: continue if tptype.endswith('[]'): tptype = tptype[:-2] binding = binding_from_usage(sig, tptype, custom_lists) if binding.custom_type: self.deps.append(binding.val) self.revdeps = [] class Generator(object): def __init__(self, opts): try: self.namespace = opts['--namespace'] self.declfile = opts['--declfile'] self.implfile = opts['--implfile'] self.realinclude = opts['--realinclude'] self.prettyinclude = opts.get('--prettyinclude', self.realinclude) self.extraincludes = opts.get('--extraincludes', None) self.must_define = opts.get('--must-define', None) self.visibility = opts.get('--visibility', '') dom = xml.dom.minidom.parse(opts['--specxml']) except KeyError, k: assert False, 'Missing required parameter %s' % k.args[0] self.decls = [] self.impls = [] self.spec = get_by_path(dom, "spec")[0] self.externals = gather_externals(self.spec) self.custom_lists = gather_custom_lists(self.spec, self.namespace) self.required_custom = [] self.required_arrays = [] self.to_declare = [] self.depinfos = {} self.refs = RefRegistry(self.spec) def __call__(self): # Emit comment header self.both('/* Generated from ') self.both(get_descendant_text(get_by_path(self.spec, 'title'))) version = get_by_path(self.spec, "version") if version: self.both(', version ' + get_descendant_text(version)) self.both(' */\n') # Gather info on available and required types self.gather_required() if self.must_define: self.decl('\n') self.decl('#ifndef %s\n' % self.must_define) self.decl('#error %s\n' % self.must_define) self.decl('#endif') self.decl('\n') if self.extraincludes: for include in self.extraincludes.split(','): self.decl('#include %s\n' % include) self.decl(""" #include #include #include #include #include #include #include #include #include #include #include #include /** * \\addtogroup typesconstants Types and constants * * Enumerated, flag, structure, list and mapping types and utility constants. */ /** * \\defgroup struct Structure types * \\ingroup typesconstants * * Structure types generated from the specification. */ /** * \\defgroup list List types * \\ingroup typesconstants * * List types generated from the specification. */ /** * \\defgroup mapping Mapping types * \\ingroup typesconstants * * Mapping types generated from the specification. */ """) if self.must_define: self.impl(""" #define %s""" % self.must_define) self.impl(""" #include "%s" """ % self.realinclude) self.both(""" namespace %s { """ % self.namespace) # Emit type definitions for types provided in the spec self.provide_all() # Emit type registration function self.decl(""" } // namespace %s """ % self.namespace) self.impl("""\ TP_QT_NO_EXPORT void _registerTypes() { static bool registered = false; if (registered) return; registered = true; """) # Emit Qt metatype declarations self.to_declare.sort() for metatype in self.to_declare: self.decl('Q_DECLARE_METATYPE(%s)\n' % metatype) self.impl(' qDBusRegisterMetaType<%s>();\n' % ((metatype.endswith('>') and metatype + ' ') or metatype)) self.impl("""\ } } // namespace %s """ % self.namespace) # Write output to files open(self.declfile, 'w').write(''.join(self.decls).encode("utf-8")) open(self.implfile, 'w').write(''.join(self.impls).encode("utf-8")) def decl(self, str): self.decls.append(str) def impl(self, str): self.impls.append(str) def both(self, str): self.decl(str) self.impl(str) def gather_required(self): members = self.spec.getElementsByTagNameNS(NS_TP, 'member') args = self.spec.getElementsByTagName('arg') props = self.spec.getElementsByTagName('property') tp_props = self.spec.getElementsByTagNameNS(NS_TP, 'property') for requirer in members + args + props + tp_props: sig = requirer.getAttribute('type') tptype = requirer.getAttributeNS(NS_TP, 'type') external = (sig, tptype) in self.externals binding = binding_from_usage(sig, tptype, self.custom_lists, external) if binding.custom_type and binding.val not in self.required_custom: self.required_custom.append(binding.val) if not binding.custom_type and binding.array_of and (binding.val, binding.array_of) not in self.required_arrays: self.required_arrays.append((binding.val, binding.array_of)) def provide_all(self): self.required_arrays.sort() for (val, array_of) in self.required_arrays: real = 'QList<%s>' % array_of self.decl("""\ /** * \\struct %s * \\ingroup list %s\ * * Generic list type with %s elements. Convertible with * %s, but needed to have a discrete type in the Qt type system. */ """ % (val, get_headerfile_cmd(self.realinclude, self.prettyinclude), array_of, real)) self.decl(self.faketype(val, real)) self.to_declare.append(self.namespace + '::' + val) structs = self.spec.getElementsByTagNameNS(NS_TP, 'struct') mappings = self.spec.getElementsByTagNameNS(NS_TP, 'mapping') exts = self.spec.getElementsByTagNameNS(NS_TP, 'external-type') for deptype in structs + mappings: info = DepInfo(deptype, self.externals, self.custom_lists) self.depinfos[info.binding.val] = info leaves = [] next_leaves = [] for val, depinfo in self.depinfos.iteritems(): leaf = True for dep in depinfo.deps: if not self.depinfos.has_key(dep): raise UnresolvedDependency(val, dep) leaf = False self.depinfos[dep].revdeps.append(val) if leaf: next_leaves.append(val) while leaves or next_leaves: if not leaves: leaves = next_leaves leaves.sort() next_leaves = [] val = leaves.pop(0) depinfo = self.depinfos[val] self.output_by_depinfo(depinfo) for revdep in depinfo.revdeps: revdepinfo = self.depinfos[revdep] revdepinfo.deps.remove(val) if not revdepinfo.deps: next_leaves.append(revdep) del self.depinfos[val] for provider in structs + mappings + exts: name = get_by_path(provider, '@name') array_name = get_by_path(provider, '@array-name') array_depth = get_by_path(provider, '@array-depth') if array_depth: array_depth = int(array_depth) else: array_depth = None sig = provider.getAttribute('type') tptype = provider.getAttribute('name') external = (sig, tptype) in self.externals binding = binding_from_decl(name, array_name, array_depth, external) self.provide(binding.val) if binding.array_val: self.provide(binding.array_val) d = binding.array_depth while d > 1: d -= 1 self.provide(binding.array_val + ('List' * d)) if self.required_custom: raise MissingTypes(self.required_custom) def provide(self, type): if type in self.required_custom: self.required_custom.remove(type) def output_by_depinfo(self, depinfo): names, docstrings, bindings = extract_arg_or_member_info(get_by_path(depinfo.el, 'member'), self.custom_lists, self.externals, None, self.refs, ' * ', (' /**', ' */')) members = len(names) if depinfo.el.localName == 'struct': if members == 0: raise EmptyStruct(depinfo.binding.val) self.decl("""\ /** * \\struct %(name)s * \\ingroup struct %(headercmd)s\ * * Structure type generated from the specification. %(docstring)s\ */ struct %(visibility)s %(name)s { """ % { 'name' : depinfo.binding.val, 'headercmd': get_headerfile_cmd(self.realinclude, self.prettyinclude), 'docstring' : format_docstring(depinfo.el, self.refs), 'visibility': self.visibility, }) for i in xrange(members): self.decl("""\ %s\ %s %s; """ % (docstrings[i], bindings[i].val, names[i])) self.decl("""\ }; """) self.both('%s bool operator==(%s v1, %s v2)' % (self.visibility, depinfo.binding.inarg, depinfo.binding.inarg)) self.decl(';\n') self.impl(""" {""") if (bindings[0].val != 'QDBusVariant'): self.impl(""" return ((v1.%s == v2.%s)""" % (names[0], names[0])) else: self.impl(""" return ((v1.%s.variant() == v2.%s.variant())""" % (names[0], names[0])) for i in xrange(1, members): if (bindings[i].val != 'QDBusVariant'): self.impl(""" && (v1.%s == v2.%s)""" % (names[i], names[i])) else: self.impl(""" && (v1.%s.variant() == v2.%s.variant())""" % (names[i], names[i])) self.impl(""" ); } """) self.decl('inline bool operator!=(%s v1, %s v2)' % (depinfo.binding.inarg, depinfo.binding.inarg)) self.decl(""" { return !operator==(v1, v2); } """) self.both('%s QDBusArgument& operator<<(QDBusArgument& arg, %s val)' % (self.visibility, depinfo.binding.inarg)) self.decl(';\n') self.impl(""" { arg.beginStructure(); arg << %s; arg.endStructure(); return arg; } """ % ' << '.join(['val.' + name for name in names])) self.both('%s const QDBusArgument& operator>>(const QDBusArgument& arg, %s val)' % (self.visibility, depinfo.binding.outarg)) self.decl(';\n\n') self.impl(""" { arg.beginStructure(); arg >> %s; arg.endStructure(); return arg; } """ % ' >> '.join(['val.' + name for name in names])) elif depinfo.el.localName == 'mapping': if members != 2: raise MalformedMapping(depinfo.binding.val, members) realtype = 'QMap<%s, %s>' % (bindings[0].val, (bindings[1].val.endswith('>') and bindings[1].val + ' ') or bindings[1].val) self.decl("""\ /** * \\struct %s * \\ingroup mapping %s\ * * Mapping type generated from the specification. Convertible with * %s, but needed to have a discrete type in the Qt type system. %s\ */ """ % (depinfo.binding.val, get_headerfile_cmd(self.realinclude, self.prettyinclude), realtype, format_docstring(depinfo.el, self.refs))) self.decl(self.faketype(depinfo.binding.val, realtype)) else: raise WTF(depinfo.el.localName) self.to_declare.append(self.namespace + '::' + depinfo.binding.val) if depinfo.binding.array_val: self.to_declare.append('%s::%s' % (self.namespace, depinfo.binding.array_val)) self.decl("""\ /** * \\ingroup list %s\ * * Array of %s values. */ typedef %s %s; """ % (get_headerfile_cmd(self.realinclude, self.prettyinclude), depinfo.binding.val, 'QList<%s>' % depinfo.binding.val, depinfo.binding.array_val)) i = depinfo.binding.array_depth while i > 1: i -= 1 self.to_declare.append('%s::%s%s' % (self.namespace, depinfo.binding.array_val, ('List' * i))) list_of = depinfo.binding.array_val + ('List' * (i-1)) self.decl("""\ /** * \\ingroup list %s\ * * Array of %s values. */ typedef QList<%s> %sList; """ % (get_headerfile_cmd(self.realinclude, self.prettyinclude), list_of, list_of, list_of)) def faketype(self, fake, real): return """\ struct %(visibility)s %(fake)s : public %(real)s { inline %(fake)s() : %(real)s() {} inline %(fake)s(const %(real)s& a) : %(real)s(a) {} inline %(fake)s& operator=(const %(real)s& a) { *(static_cast<%(real)s*>(this)) = a; return *this; } }; """ % {'fake' : fake, 'real' : real, 'visibility': self.visibility} if __name__ == '__main__': options, argv = gnu_getopt(sys.argv[1:], '', ['declfile=', 'implfile=', 'realinclude=', 'prettyinclude=', 'extraincludes=', 'must-define=', 'namespace=', 'specxml=', 'visibility=', ]) try: Generator(dict(options))() except BrokenSpecException as e: print >> sys.stderr, 'Your spec is broken, dear developer! %s' % e sys.exit(42) telepathy-qt-0.9.3/tools/check-whitespace.sh0000644000175200001440000000032312000056607023315 0ustar00collabora-develusers00000000000000#!/bin/sh fail=0 if grep -n ' $' "$@" then echo "^^^ The above files contain unwanted trailing spaces" fail=1 fi if grep -n ' ' "$@" then echo "^^^ The above files contain tabs" fail=1 fi exit $fail telepathy-qt-0.9.3/tools/qt-client-gen.py0000644000175200001440000004205412000056607022602 0ustar00collabora-develusers00000000000000#!/usr/bin/python # # Copyright (C) 2008 Collabora Limited # 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 from sys import argv import xml.dom.minidom import codecs from getopt import gnu_getopt from libtpcodegen import NS_TP, get_descendant_text, get_by_path from libqtcodegen import binding_from_usage, extract_arg_or_member_info, format_docstring, gather_externals, gather_custom_lists, get_headerfile_cmd, get_qt_name, qt_identifier_escape, RefRegistry class Generator(object): def __init__(self, opts): try: self.group = opts.get('--group', '') self.headerfile = opts['--headerfile'] self.implfile = opts['--implfile'] self.namespace = opts['--namespace'] self.typesnamespace = opts['--typesnamespace'] self.realinclude = opts['--realinclude'] self.prettyinclude = opts.get('--prettyinclude') self.extraincludes = opts.get('--extraincludes', None) self.mainiface = opts.get('--mainiface', None) self.must_define = opts.get('--must-define', None) self.dbus_proxy = opts.get('--dbus-proxy', 'Tp::DBusProxy') self.visibility = opts.get('--visibility', '') ifacedom = xml.dom.minidom.parse(opts['--ifacexml']) specdom = xml.dom.minidom.parse(opts['--specxml']) except KeyError, k: assert False, 'Missing required parameter %s' % k.args[0] self.hs = [] self.bs = [] self.ifacenodes = ifacedom.getElementsByTagName('node') self.spec, = get_by_path(specdom, "spec") self.custom_lists = gather_custom_lists(self.spec, self.typesnamespace) self.externals = gather_externals(self.spec) self.refs = RefRegistry(self.spec) def __call__(self): # Output info header and includes self.h("""\ /* * This file contains D-Bus client proxy classes generated by qt-client-gen.py. * * This file can be distributed under the same terms as the specification from * which it was generated. */ """) if self.must_define: self.h('\n') self.h('#ifndef %s\n' % self.must_define) self.h('#error %s\n' % self.must_define) self.h('#endif\n') self.h('\n') if self.extraincludes: for include in self.extraincludes.split(','): self.h('#include %s\n' % include) self.h(""" #include #include #include #include #include #include #include #include namespace Tp { class PendingVariant; class PendingOperation; } """) if self.must_define: self.b("""#define %s\n""" % (self.must_define)) self.b("""#include "%s" """ % self.realinclude) # Begin namespace for ns in self.namespace.split('::'): self.hb("""\ namespace %s { """ % ns) # Output interface proxies def ifacenodecmp(x, y): xname, yname = [self.namespace + '::' + node.getAttribute('name').replace('/', '').replace('_', '') + 'Interface' for node in x, y] if xname == self.mainiface: return -1 elif yname == self.mainiface: return 1 else: return cmp(xname, yname) self.ifacenodes.sort(cmp=ifacenodecmp) for ifacenode in self.ifacenodes: self.do_ifacenode(ifacenode) # End namespace self.hb(''.join(['}\n' for ns in self.namespace.split('::')])) # Add metatype declaration - otherwise QTBUG #2151 might be triggered for ifacenode in self.ifacenodes: classname = ifacenode.getAttribute('name').replace('/', '').replace('_', '') + 'Interface' self.h("Q_DECLARE_METATYPE(" + self.namespace + "::" + classname + "*)\n") # Write output to files (codecs.getwriter('utf-8')(open(self.headerfile, 'w'))).write(''.join(self.hs)) (codecs.getwriter('utf-8')(open(self.implfile, 'w'))).write(''.join(self.bs)) def do_ifacenode(self, ifacenode): # Extract info name = ifacenode.getAttribute('name').replace('/', '').replace('_', '') + 'Interface' iface, = get_by_path(ifacenode, 'interface') dbusname = iface.getAttribute('name') # Begin class, constructors self.h(""" /** * \\class %(name)s %(headercmd)s\ %(groupcmd)s\ * * Proxy class providing a 1:1 mapping of the D-Bus interface "%(dbusname)s". */ class %(visibility)s %(name)s : public Tp::AbstractInterface { Q_OBJECT public: /** * Returns the name of the interface "%(dbusname)s", which this class * represents. * * \\return The D-Bus interface name. */ static inline QLatin1String staticInterfaceName() { return QLatin1String("%(dbusname)s"); } /** * Creates a %(name)s associated with the given object on the session bus. * * \\param busName Name of the service the object is on. * \\param objectPath Path to the object on the service. * \\param parent Passed to the parent class constructor. */ %(name)s( const QString& busName, const QString& objectPath, QObject* parent = 0 ); /** * Creates a %(name)s associated with the given object on the given bus. * * \\param connection The bus via which the object can be reached. * \\param busName Name of the service the object is on. * \\param objectPath Path to the object on the service. * \\param parent Passed to the parent class constructor. */ %(name)s( const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject* parent = 0 ); """ % {'name' : name, 'headercmd' : get_headerfile_cmd(self.realinclude, self.prettyinclude), 'groupcmd' : self.group and (' * \\ingroup %s\n' % self.group), 'dbusname' : dbusname, 'visibility': self.visibility, }) self.b(""" %(name)s::%(name)s(const QString& busName, const QString& objectPath, QObject *parent) : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent) { } %(name)s::%(name)s(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent) : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent) { } """ % {'name' : name}) # Construct from DBusProxy subclass self.h(""" /** * Creates a %(name)s associated with the same object as the given proxy. * * \\param proxy The proxy to use. It will also be the QObject::parent() * for this object. */ %(name)s(%(dbus_proxy)s *proxy); """ % {'name' : name, 'dbus_proxy' : self.dbus_proxy}) self.b(""" %(name)s::%(name)s(%(dbus_proxy)s *proxy) : Tp::AbstractInterface(proxy, staticInterfaceName()) { } """ % {'name' : name, 'dbus_proxy' : self.dbus_proxy}) # Main interface mainiface = self.mainiface or 'Tp::AbstractInterface' if mainiface != self.namespace + '::' + name: self.h(""" /** * Creates a %(name)s associated with the same object as the given proxy. * Additionally, the created proxy will have the same parent as the given * proxy. * * \\param mainInterface The proxy to use. */ explicit %(name)s(const %(mainiface)s& mainInterface); /** * Creates a %(name)s associated with the same object as the given proxy. * However, a different parent object can be specified. * * \\param mainInterface The proxy to use. * \\param parent Passed to the parent class constructor. */ %(name)s(const %(mainiface)s& mainInterface, QObject* parent); """ % {'name' : name, 'mainiface' : mainiface}) self.b(""" %(name)s::%(name)s(const %(mainiface)s& mainInterface) : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent()) { } %(name)s::%(name)s(const %(mainiface)s& mainInterface, QObject *parent) : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent) { } """ % {'name' : name, 'mainiface' : mainiface}) # Properties has_props = False for prop in get_by_path(iface, 'property'): # Skip tp:properties if not prop.namespaceURI: self.do_prop(prop) has_props = True self.h(""" /** * Request all of the DBus properties on the interface. * * \\return A pending variant map which will emit finished when the properties have * been retrieved. */ Tp::PendingVariantMap *requestAllProperties() const { return internalRequestAllProperties(); } """) # Methods methods = get_by_path(iface, 'method') if methods: self.h(""" public Q_SLOTS:\ """) for method in methods: self.do_method(method) # Signals signals = get_by_path(iface, 'signal') if signals: self.h(""" Q_SIGNALS:\ """) for signal in signals: self.do_signal(signal) # invalidated handler (already a slot in the superclass) # we can't just use disconnect(this, NULL, NULL, NULL) because # (a) that would disconnect QObject::destroyed() and other non-D-Bus # signals, and (b) QtDBus doesn't support that usage anyway (it needs # specific signals in order to remove its signal match rules) self.h(""" protected: virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &); """) self.b(""" void %(name)s::invalidate(Tp::DBusProxy *proxy, const QString &error, const QString &message) { """ % {'name' : name}) for signal in signals: self.do_signal_disconnect(signal) self.b(""" Tp::AbstractInterface::invalidate(proxy, error, message); } """) # Close class self.h("""\ }; """) def do_prop(self, prop): name = prop.getAttribute('name') access = prop.getAttribute('access') gettername = name settername = None docstring = format_docstring(prop, self.refs, ' * ').replace('*/', '*/') sig = prop.getAttribute('type') tptype = prop.getAttributeNS(NS_TP, 'type') binding = binding_from_usage(sig, tptype, self.custom_lists, (sig, tptype) in self.externals, self.typesnamespace) if 'write' in access: settername = 'set' + name if 'read' in access: self.h(""" /** * Asynchronous getter for the remote object property \\c %(name)s of type \\c %(val)s. * %(docstring)s\ * * \\return A pending variant which will emit finished when the property has been * retrieved. */ inline Tp::PendingVariant *%(gettername)s() const { return internalRequestProperty(QLatin1String("%(name)s")); } """ % {'name' : name, 'docstring' : docstring, 'val' : binding.val, 'gettername' : 'requestProperty' + name}) if 'write' in access: self.h(""" /** * Asynchronous setter for the remote object property \\c %(name)s of type \\c %(type)s. * %(docstring)s\ * * \\return A pending operation which will emit finished when the property has been * set. */ inline Tp::PendingOperation *%(settername)s(%(type)s newValue) { return internalSetProperty(QLatin1String("%(name)s"), QVariant::fromValue(newValue)); } """ % {'name' : name, 'docstring' : docstring, 'type' : binding.val, 'name' : name, 'settername' : 'setProperty' + name}) def do_method(self, method): name = method.getAttribute('name') args = get_by_path(method, 'arg') argnames, argdocstrings, argbindings = extract_arg_or_member_info(args, self.custom_lists, self.externals, self.typesnamespace, self.refs, ' * ') inargs = [] outargs = [] for i in xrange(len(args)): if args[i].getAttribute('direction') == 'out': outargs.append(i) else: inargs.append(i) assert argnames[i] != None, 'No argument name for input argument at index %d for method %s' % (i, name) rettypes = ', '.join([argbindings[i].val for i in outargs]) params = ', '.join([argbindings[i].inarg + ' ' + argnames[i] for i in inargs]) if params: params += ', int timeout = -1' else: params = 'int timeout = -1' self.h(""" /** * Begins a call to the D-Bus method \\c %s on the remote object. %s\ * * Note that \\a timeout is ignored as of now. It will be used once * http://bugreports.qt.nokia.com/browse/QTBUG-11775 is fixed. * """ % (name, format_docstring(method, self.refs, ' * '))) for i in inargs: if argdocstrings[i]: self.h("""\ * * \\param %s %s\ """ % (argnames[i], argdocstrings[i])) self.h("""\ * \\param timeout The timeout in milliseconds. """) for i in outargs: if argdocstrings[i]: self.h("""\ * * \\return %s\ """ % argdocstrings[i]) self.h("""\ */ inline QDBusPendingReply<%(rettypes)s> %(name)s(%(params)s) { if (!invalidationReason().isEmpty()) { return QDBusPendingReply<%(rettypes)s>(QDBusMessage::createError( invalidationReason(), invalidationMessage() )); } """ % {'rettypes' : rettypes, 'name' : name, 'params' : params}) if inargs: self.h(""" QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(), this->staticInterfaceName(), QLatin1String("%s")); callMessage << %s; return this->connection().asyncCall(callMessage, timeout); } """ % (name, ' << '.join(['QVariant::fromValue(%s)' % argnames[i] for i in inargs]))) else: self.h(""" QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(), this->staticInterfaceName(), QLatin1String("%s")); return this->connection().asyncCall(callMessage, timeout); } """ % name) def do_signal(self, signal): name = signal.getAttribute('name') argnames, argdocstrings, argbindings = extract_arg_or_member_info(get_by_path(signal, 'arg'), self.custom_lists, self.externals, self.typesnamespace, self.refs, ' * ') self.h(""" /** * Represents the signal \\c %s on the remote object. %s\ """ % (name, format_docstring(signal, self.refs, ' * '))) for i in xrange(len(argnames)): assert argnames[i] != None, 'Name missing from argument at index %d for signal %s' % (i, name) if argdocstrings[i]: self.h("""\ * * \\param %s %s\ """ % (argnames[i], argdocstrings[i])) self.h("""\ */ void %s(%s); """ % (name, ', '.join(['%s %s' % (binding.inarg, name) for binding, name in zip(argbindings, argnames)]))) def do_signal_disconnect(self, signal): name = signal.getAttribute('name') _, _, argbindings = extract_arg_or_member_info(get_by_path(signal, 'arg'), self.custom_lists, self.externals, self.typesnamespace, self.refs, ' * ') self.b("""\ disconnect(this, SIGNAL(%s(%s)), NULL, NULL); """ % (name, ', '.join([binding.inarg for binding in argbindings]))) def h(self, str): self.hs.append(str) def b(self, str): self.bs.append(str) def hb(self, str): self.h(str) self.b(str) if __name__ == '__main__': options, argv = gnu_getopt(argv[1:], '', ['group=', 'namespace=', 'typesnamespace=', 'headerfile=', 'implfile=', 'ifacexml=', 'specxml=', 'realinclude=', 'prettyinclude=', 'extraincludes=', 'mainiface=', 'must-define=', 'dbus-proxy=', 'visibility=']) Generator(dict(options))() telepathy-qt-0.9.3/tools/git-which-branch.sh0000644000175200001440000000125312000056607023227 0ustar00collabora-develusers00000000000000#!/bin/sh # git-which-branch.sh - output the name of the current git branch # # The canonical location of this program is the telepathy-spec tools/ # directory, please synchronize any changes with that copy. # # Copyright (C) 2008 Collabora Ltd. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. default="$1" if { ref="`git symbolic-ref HEAD 2>/dev/null`"; }; then echo ${ref#refs/heads/} exit 0 fi if test -n "$default"; then echo "$default" >/dev/null exit 0 fi echo "no git branch found" >&2 exit 1 telepathy-qt-0.9.3/tools/libqtcodegen.py0000644000175200001440000004126612000056607022577 0ustar00collabora-develusers00000000000000"""Library code for Qt D-Bus-related code generation. The master copy of this library is in the telepathy-qt repository - please make any changes there. """ # Copyright (C) 2008 Collabora Limited # 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 from sys import maxint, stderr import re from libtpcodegen import get_by_path, get_descendant_text, NS_TP, xml_escape class Xzibit(Exception): def __init__(self, parent, child): self.parent = parent self.child = child def __str__(self): print """ Nested <%s>s are forbidden. Parent: %s... Child: %s... """ % (self.parent.nodeName, self.parent.toxml()[:100], self.child.toxml()[:100]) class _QtTypeBinding: def __init__(self, val, inarg, outarg, array_val, custom_type, array_of, array_depth=None): self.val = val self.inarg = inarg self.outarg = outarg self.array_val = array_val self.custom_type = custom_type self.array_of = array_of self.array_depth = array_depth if array_depth is None: self.array_depth = int(bool(array_val)) elif array_depth >= 1: assert array_val else: assert not array_val class RefTarget(object): KIND_INTERFACE, KIND_METHOD, KIND_SIGNAL, KIND_PROPERTY = 'node', 'method', 'signal', 'property' def __init__(self, el): self.kind = el.localName assert self.kind in (self.KIND_INTERFACE, self.KIND_METHOD, self.KIND_SIGNAL, self.KIND_PROPERTY) if self.kind == self.KIND_INTERFACE: self.dbus_text = el.getAttribute('name').lstrip('/').replace('_', '') + 'Interface' else: self.member_text = el.getAttribute('name') assert el.parentNode.parentNode.localName == self.KIND_INTERFACE host_class = el.parentNode.parentNode.getAttribute('name').lstrip('/').replace('_', '') + 'Interface' if self.kind == self.KIND_PROPERTY: self.member_link = 'requestProperty%s()' % (self.member_text) self.dbus_link = '%s::%s' % (host_class, self.member_link) else: self.member_text = '%s()' % self.member_text self.dbus_text = '%s::%s' % (host_class, self.member_text) class RefRegistry(object): def __init__(self, spec): self.targets = {} for node in spec.getElementsByTagName('node'): iface, = get_by_path(node, 'interface') iface_name = iface.getAttribute('name') self.targets[iface_name] = RefTarget(node) for method in iface.getElementsByTagName(RefTarget.KIND_METHOD): self.targets[iface_name + '.' + method.getAttribute('name')] = RefTarget(method) for signal in iface.getElementsByTagName(RefTarget.KIND_SIGNAL): self.targets[iface_name + '.' + signal.getAttribute('name')] = RefTarget(signal) for prop in iface.getElementsByTagName(RefTarget.KIND_PROPERTY): self.targets[iface_name + '.' + prop.getAttribute('name')] = RefTarget(prop) def process(self, ref): assert ref.namespaceURI == NS_TP def get_closest_parent(el, needle): node = el while node is not None and node.localName != needle: node = node.parentNode return node local = get_descendant_text(ref).strip() if ref.localName == 'member-ref': ns = get_closest_parent(ref, 'interface').getAttribute('name') path = ns + '.' + local.strip() else: if ref.hasAttribute('namespace'): ns = ref.getAttribute('namespace').replace('ofdT', 'org.freedesktop.Telepathy') path = ns + '.' + local.strip() else: path = local target = self.targets.get(path) if target is None: parent = get_closest_parent(ref, 'interface') or get_closest_parent(ref, 'error') parent_name = parent.getAttribute('name') if (path + parent_name).find('.DRAFT') == -1 and (path + parent_name).find('.FUTURE') == -1: print >> stderr, 'WARNING: Failed to resolve %s to "%s" in "%s"' % ( ref.localName, path, parent_name) return path if ref.localName == 'member-ref': if target.kind == target.KIND_PROPERTY: return '\\link %s %s \\endlink' % (target.member_link, target.member_text) else: return target.member_text else: if target.kind == target.KIND_PROPERTY: return '\\link %s %s \\endlink' % (target.dbus_link, target.dbus_text) else: return target.dbus_text def binding_from_usage(sig, tptype, custom_lists, external=False, explicit_own_ns=None): # 'signature' : ('qt-type', 'pass-by-reference', 'array-type') natives = { 'y' : ('uchar', False, None), 'b' : ('bool', False, 'BoolList'), 'n' : ('short', False, 'ShortList'), 'q' : ('ushort', False, 'UShortList'), 'i' : ('int', False, 'IntList'), 'u' : ('uint', False, 'UIntList'), 'x' : ('qlonglong', False, 'LongLongList'), 't' : ('qulonglong', False, 'ULongLongList'), 'd' : ('double', False, 'DoubleList'), 's' : ('QString', True, None), 'v' : ('QDBusVariant', True, None), 'o' : ('QDBusObjectPath', True, 'ObjectPathList'), 'g' : ('QDBusSignature', True, 'SignatureList'), 'as' : ('QStringList', True, "StringListList"), 'ay' : ('QByteArray', True, "ByteArrayList"), 'av' : ('QVariantList', True, "VariantListList"), 'a{sv}' : ('QVariantMap', True, None) } val, inarg = None, None custom_type = False array_of = None if natives.has_key(sig): typename, pass_by_ref, array_name = natives[sig] val = typename inarg = (pass_by_ref and ('const %s&' % val)) or val elif sig[0] == 'a' and natives.has_key(sig[1:]) and natives[sig[1:]][2]: val = natives[sig[1:]][2] if explicit_own_ns: val = explicit_own_ns + '::' + val inarg = 'const %s&' % val array_of = natives[sig[1:]][0] elif tptype: tptype = tptype.replace('_', '') custom_type = True if external: tptype = 'Tp::' + tptype elif explicit_own_ns: tptype = explicit_own_ns + '::' + tptype if tptype.endswith('[]'): tptype = tptype[:-2] extra_list_nesting = 0 while tptype.endswith('[]'): extra_list_nesting += 1 tptype = tptype[:-2] assert custom_lists.has_key(tptype), ('No array version of custom type %s in the spec, but array version used' % tptype) val = custom_lists[tptype] + 'List' * extra_list_nesting else: val = tptype inarg = 'const %s&' % val else: assert False, 'Don\'t know how to map type (%s, %s)' % (sig, tptype) outarg = val + '&' return _QtTypeBinding(val, inarg, outarg, None, custom_type, array_of) def binding_from_decl(name, array_name, array_depth=None, external=False, explicit_own_ns=''): val = name.replace('_', '') if external: val = 'Tp::' + val elif explicit_own_ns: val = explicit_own_ns + '::' + val inarg = 'const %s&' % val outarg = '%s&' % val return _QtTypeBinding(val, inarg, outarg, array_name.replace('_', ''), True, None, array_depth) def extract_arg_or_member_info(els, custom_lists, externals, typesns, refs, docstring_indent=' * ', docstring_brackets=None, docstring_maxwidth=80): names = [] docstrings = [] bindings = [] for el in els: names.append(get_qt_name(el)) docstrings.append(format_docstring(el, refs, docstring_indent, docstring_brackets, docstring_maxwidth)) sig = el.getAttribute('type') tptype = el.getAttributeNS(NS_TP, 'type') bindings.append(binding_from_usage(sig, tptype, custom_lists, (sig, tptype) in externals, typesns)) return names, docstrings, bindings def format_docstring(el, refs, indent=' * ', brackets=None, maxwidth=80): docstring_el = None for x in el.childNodes: if x.namespaceURI == NS_TP and x.localName == 'docstring': docstring_el = x if not docstring_el: return '' lines = [] # escape backslashes, so they won't be interpreted starting doxygen commands and we can later # insert doxygen commands we actually want def escape_slashes(x): if x.nodeType == x.TEXT_NODE: x.data = x.data.replace('\\', '\\\\') elif x.nodeType == x.ELEMENT_NODE: for y in x.childNodes: escape_slashes(y) else: return escape_slashes(docstring_el) doc = docstring_el.ownerDocument for n in docstring_el.getElementsByTagNameNS(NS_TP, 'rationale'): nested = n.getElementsByTagNameNS(NS_TP, 'rationale') if nested: raise Xzibit(n, nested[0]) div = doc.createElement('div') div.setAttribute('class', 'rationale') for rationale_body in n.childNodes: div.appendChild(rationale_body.cloneNode(True)) n.parentNode.replaceChild(div, n) if docstring_el.getAttribute('xmlns') == 'http://www.w3.org/1999/xhtml': for ref in docstring_el.getElementsByTagNameNS(NS_TP, 'member-ref') + docstring_el.getElementsByTagNameNS(NS_TP, 'dbus-ref'): nested = ref.getElementsByTagNameNS(NS_TP, 'member-ref') + ref.getElementsByTagNameNS(NS_TP, 'dbus-ref') if nested: raise Xzibit(n, nested[0]) text = doc.createTextNode(' \\endhtmlonly ') text.data += refs.process(ref) text.data += ' \\htmlonly ' ref.parentNode.replaceChild(text, ref) splitted = ''.join([el.toxml() for el in docstring_el.childNodes]).strip(' ').strip('\n').split('\n') level = min([not match and maxint or match.end() - 1 for match in [re.match('^ *[^ ]', line) for line in splitted]]) assert level != maxint lines = ['\\htmlonly'] + [line[level:] for line in splitted] + ['\\endhtmlonly'] else: content = xml_escape(get_descendant_text(docstring_el).replace('\n', ' ').strip()) while content.find(' ') != -1: content = content.replace(' ', ' ') left = maxwidth - len(indent) - 1 line = '' while content: step = (content.find(' ') + 1) or len(content) if step > left: lines.append(line) line = '' left = maxwidth - len(indent) - 1 left = left - step line = line + content[:step] content = content[step:] if line: lines.append(line) output = [] if lines: if brackets: output.append(brackets[0]) else: output.append(indent) output.append('\n') for line in lines: output.append(indent) output.append(line) output.append('\n') if lines and brackets: output.append(brackets[1]) output.append('\n') return ''.join(output) def gather_externals(spec): externals = [] for ext in spec.getElementsByTagNameNS(NS_TP, 'external-type'): sig = ext.getAttribute('type') tptype = ext.getAttribute('name') externals.append((sig, tptype)) return externals def gather_custom_lists(spec, typesns): custom_lists = {} structs = [(provider, typesns) for provider in spec.getElementsByTagNameNS(NS_TP, 'struct')] mappings = [(provider, typesns) for provider in spec.getElementsByTagNameNS(NS_TP, 'mapping')] exts = [(provider, 'Telepathy') for provider in spec.getElementsByTagNameNS(NS_TP, 'external-type')] for (provider, ns) in structs + mappings + exts: tptype = provider.getAttribute('name').replace('_', '') array_val = provider.getAttribute('array-name').replace('_', '') array_depth = provider.getAttribute('array-depth') if array_depth: array_depth = int(array_depth) else: array_depth = None if array_val: custom_lists[tptype] = array_val custom_lists[ns + '::' + tptype] = ns + '::' + array_val if array_depth >= 2: for i in xrange(array_depth): custom_lists[tptype + ('[]' * (i+1))] = ( array_val + ('List' * i)) custom_lists[ns + '::' + tptype + ('[]' * (i+1))] = ( ns + '::' + array_val + ('List' * i)) return custom_lists def get_headerfile_cmd(realinclude, prettyinclude, indent=' * '): prettyinclude = prettyinclude or realinclude if realinclude: if prettyinclude: return indent + ('\\headerfile %s <%s>\n' % (realinclude, prettyinclude)) else: return indent + ('\\headerfile %s <%s>\n' % (realinclude)) else: return '' def get_qt_name(el): name = el.getAttribute('name') if el.localName in ('method', 'signal', 'property'): bname = el.getAttributeNS(NS_TP, 'name-for-bindings') if bname: name = bname if not name: return None if name[0].isupper() and name[1].islower(): name = name[0].lower() + name[1:] return qt_identifier_escape(name.replace('_', '')) def qt_identifier_escape(str): built = (str[0].isdigit() and ['_']) or [] for c in str: if c.isalnum(): built.append(c) else: built.append('_') str = ''.join(built) # List of reserved identifiers # Initial list from http://cs.smu.ca/~porter/csc/ref/cpp_keywords.html # Keywords inherited from C90 reserved = ['auto', 'const', 'double', 'float', 'int', 'short', 'struct', 'unsigned', 'break', 'continue', 'else', 'for', 'long', 'signed', 'switch', 'void', 'case', 'default', 'enum', 'goto', 'register', 'sizeof', 'typedef', 'volatile', 'char', 'do', 'extern', 'if', 'return', 'static', 'union', 'while', # C++-only keywords 'asm', 'dynamic_cast', 'namespace', 'reinterpret_cast', 'try', 'bool', 'explicit', 'new', 'static_cast', 'typeid', 'catch', 'false', 'operator', 'template', 'typename', 'class', 'friend', 'private', 'this', 'using', 'const_cast', 'inline', 'public', 'throw', 'virtual', 'delete', 'mutable', 'protected', 'true', 'wchar_t', # Operator replacements 'and', 'bitand', 'compl', 'not_eq', 'or_eq', 'xor_eq', 'and_eq', 'bitor', 'not', 'or', 'xor', # Predefined identifiers 'INT_MIN', 'INT_MAX', 'MAX_RAND', 'NULL', # Qt 'SIGNAL', 'SLOT', 'signals', 'slots'] while str in reserved: str = str + '_' return str telepathy-qt-0.9.3/tools/c-constants-gen.py0000644000175200001440000001120012000056607023123 0ustar00collabora-develusers00000000000000#!/usr/bin/python from sys import argv, stdout, stderr import xml.dom.minidom from libglibcodegen import NS_TP, get_docstring, \ get_descendant_text, get_by_path class Generator(object): def __init__(self, prefix, dom): self.prefix = prefix + '_' self.spec = get_by_path(dom, "spec")[0] def __call__(self): self.do_header() self.do_body() self.do_footer() def write(self, code): stdout.write(code.encode('utf-8')) # Header def do_header(self): self.write('/* Generated from ') self.write(get_descendant_text(get_by_path(self.spec, 'title'))) version = get_by_path(self.spec, "version") if version: self.write(', version ' + get_descendant_text(version)) self.write('\n\n') for copyright in get_by_path(self.spec, 'copyright'): self.write(get_descendant_text(copyright)) self.write('\n') self.write(get_descendant_text(get_by_path(self.spec, 'license'))) self.write('\n') self.write(get_descendant_text(get_by_path(self.spec, 'docstring'))) self.write(""" */ #ifdef __cplusplus extern "C" { #endif \n""") # Body def do_body(self): for elem in self.spec.getElementsByTagNameNS(NS_TP, '*'): if elem.localName == 'flags': self.do_flags(elem) elif elem.localName == 'enum': self.do_enum(elem) def do_flags(self, flags): name = flags.getAttribute('plural') or flags.getAttribute('name') value_prefix = flags.getAttribute('singular') or \ flags.getAttribute('value-prefix') or \ flags.getAttribute('name') self.write("""\ /** * %s: """ % (self.prefix + name).replace('_', '')) for flag in get_by_path(flags, 'flag'): self.do_gtkdoc(flag, value_prefix) self.write(' *\n') docstrings = get_by_path(flags, 'docstring') if docstrings: self.write("""\ * * """ % get_descendant_text(docstrings).replace('\n', ' ')) self.write("""\ * Bitfield/set of flags generated from the Telepathy specification. */ typedef enum { """) for flag in get_by_path(flags, 'flag'): self.do_val(flag, value_prefix) self.write("""\ } %s; """ % (self.prefix + name).replace('_', '')) def do_enum(self, enum): name = enum.getAttribute('singular') or enum.getAttribute('name') value_prefix = enum.getAttribute('singular') or \ enum.getAttribute('value-prefix') or \ enum.getAttribute('name') name_plural = enum.getAttribute('plural') or \ enum.getAttribute('name') + 's' self.write("""\ /** * %s: """ % (self.prefix + name).replace('_', '')) vals = get_by_path(enum, 'enumvalue') for val in vals: self.do_gtkdoc(val, value_prefix) self.write(' *\n') docstrings = get_by_path(enum, 'docstring') if docstrings: self.write("""\ * * """ % get_descendant_text(docstrings).replace('\n', ' ')) self.write("""\ * Bitfield/set of flags generated from the Telepathy specification. */ typedef enum { """) for val in vals: self.do_val(val, value_prefix) self.write("""\ } %(mixed-name)s; /** * NUM_%(upper-plural)s: * * 1 higher than the highest valid value of #%(mixed-name)s. */ #define NUM_%(upper-plural)s (%(last-val)s+1) """ % {'mixed-name' : (self.prefix + name).replace('_', ''), 'upper-plural' : (self.prefix + name_plural).upper(), 'last-val' : vals[-1].getAttribute('value')}) def do_val(self, val, value_prefix): name = val.getAttribute('name') suffix = val.getAttribute('suffix') use_name = (self.prefix + value_prefix + '_' + \ (suffix or name)).upper() assert not (name and suffix) or name == suffix, \ 'Flag/enumvalue name %s != suffix %s' % (name, suffix) self.write(' %s = %s,\n' % (use_name, val.getAttribute('value'))) def do_gtkdoc(self, node, value_prefix): self.write(' * @') self.write((self.prefix + value_prefix + '_' + node.getAttribute('suffix')).upper()) self.write(': \n') # Footer def do_footer(self): self.write(""" #ifdef __cplusplus } #endif """) if __name__ == '__main__': argv = argv[1:] Generator(argv[0], xml.dom.minidom.parse(argv[1]))() telepathy-qt-0.9.3/tools/glib-signals-marshal-gen.py0000644000175200001440000000254112000056607024677 0ustar00collabora-develusers00000000000000#!/usr/bin/python import sys import xml.dom.minidom from string import ascii_letters, digits from libglibcodegen import signal_to_marshal_name, method_to_glue_marshal_name class Generator(object): def __init__(self, dom): self.dom = dom self.marshallers = {} def do_method(self, method): marshaller = method_to_glue_marshal_name(method, 'PREFIX') assert '__' in marshaller rhs = marshaller.split('__', 1)[1].split('_') self.marshallers[marshaller] = rhs def do_signal(self, signal): marshaller = signal_to_marshal_name(signal, 'PREFIX') assert '__' in marshaller rhs = marshaller.split('__', 1)[1].split('_') self.marshallers[marshaller] = rhs def __call__(self): methods = self.dom.getElementsByTagName('method') for method in methods: self.do_method(method) signals = self.dom.getElementsByTagName('signal') for signal in signals: self.do_signal(signal) all = self.marshallers.keys() all.sort() for marshaller in all: rhs = self.marshallers[marshaller] if not marshaller.startswith('g_cclosure'): print 'VOID:' + ','.join(rhs) if __name__ == '__main__': argv = sys.argv[1:] dom = xml.dom.minidom.parse(argv[0]) Generator(dom)() telepathy-qt-0.9.3/tools/glib-gtypes-generator.py0000644000175200001440000003013312000056607024340 0ustar00collabora-develusers00000000000000#!/usr/bin/python # Generate GLib GInterfaces from the Telepathy specification. # The master copy of this program is in the telepathy-glib repository - # please make any changes there. # # Copyright (C) 2006, 2007 Collabora Limited # # 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 import sys import xml.dom.minidom from libglibcodegen import escape_as_identifier, \ get_docstring, \ NS_TP, \ Signature, \ type_to_gtype, \ xml_escape def types_to_gtypes(types): return [type_to_gtype(t)[1] for t in types] class GTypesGenerator(object): def __init__(self, dom, output, mixed_case_prefix): self.dom = dom self.Prefix = mixed_case_prefix self.PREFIX_ = self.Prefix.upper() + '_' self.prefix_ = self.Prefix.lower() + '_' self.header = open(output + '.h', 'w') self.body = open(output + '-body.h', 'w') for f in (self.header, self.body): f.write('/* Auto-generated, do not edit.\n *\n' ' * This file may be distributed under the same terms\n' ' * as the specification from which it was generated.\n' ' */\n\n') # keys are e.g. 'sv', values are the key escaped self.need_mappings = {} # keys are the contents of the struct (e.g. 'sssu'), values are the # key escaped self.need_structs = {} # keys are the contents of the struct (e.g. 'sssu'), values are the # key escaped self.need_struct_arrays = {} # keys are the contents of the array (unlike need_struct_arrays!), # values are the key escaped self.need_other_arrays = {} def h(self, code): self.header.write(code.encode("utf-8")) def c(self, code): self.body.write(code.encode("utf-8")) def do_mapping_header(self, mapping): members = mapping.getElementsByTagNameNS(NS_TP, 'member') assert len(members) == 2 impl_sig = ''.join([elt.getAttribute('type') for elt in members]) esc_impl_sig = escape_as_identifier(impl_sig) name = (self.PREFIX_ + 'HASH_TYPE_' + mapping.getAttribute('name').upper()) impl = self.prefix_ + 'type_dbus_hash_' + esc_impl_sig docstring = get_docstring(mapping) or '(Undocumented)' self.h('/**\n * %s:\n *\n' % name) self.h(' * %s\n' % xml_escape(docstring)) self.h(' *\n') self.h(' * This macro expands to a call to a function\n') self.h(' * that returns the #GType of a #GHashTable\n') self.h(' * appropriate for representing a D-Bus\n') self.h(' * dictionary of signature\n') self.h(' * a{%s}.\n' % impl_sig) self.h(' *\n') key, value = members self.h(' * Keys (D-Bus type %s,\n' % key.getAttribute('type')) tp_type = key.getAttributeNS(NS_TP, 'type') if tp_type: self.h(' * type %s,\n' % tp_type) self.h(' * named %s):\n' % key.getAttribute('name')) docstring = get_docstring(key) or '(Undocumented)' self.h(' * %s\n' % xml_escape(docstring)) self.h(' *\n') self.h(' * Values (D-Bus type %s,\n' % value.getAttribute('type')) tp_type = value.getAttributeNS(NS_TP, 'type') if tp_type: self.h(' * type %s,\n' % tp_type) self.h(' * named %s):\n' % value.getAttribute('name')) docstring = get_docstring(value) or '(Undocumented)' self.h(' * %s\n' % xml_escape(docstring)) self.h(' *\n') self.h(' */\n') self.h('#define %s (%s ())\n\n' % (name, impl)) self.need_mappings[impl_sig] = esc_impl_sig array_name = mapping.getAttribute('array-name') if array_name: gtype_name = self.PREFIX_ + 'ARRAY_TYPE_' + array_name.upper() contents_sig = 'a{' + impl_sig + '}' esc_contents_sig = escape_as_identifier(contents_sig) impl = self.prefix_ + 'type_dbus_array_of_' + esc_contents_sig self.h('/**\n * %s:\n\n' % gtype_name) self.h(' * Expands to a call to a function\n') self.h(' * that returns the #GType of a #GPtrArray\n') self.h(' * of #%s.\n' % name) self.h(' */\n') self.h('#define %s (%s ())\n\n' % (gtype_name, impl)) self.need_other_arrays[contents_sig] = esc_contents_sig def do_struct_header(self, struct): members = struct.getElementsByTagNameNS(NS_TP, 'member') impl_sig = ''.join([elt.getAttribute('type') for elt in members]) esc_impl_sig = escape_as_identifier(impl_sig) name = (self.PREFIX_ + 'STRUCT_TYPE_' + struct.getAttribute('name').upper()) impl = self.prefix_ + 'type_dbus_struct_' + esc_impl_sig docstring = struct.getElementsByTagNameNS(NS_TP, 'docstring') if docstring: docstring = docstring[0].toprettyxml() if docstring.startswith(''): docstring = docstring[14:] if docstring.endswith('\n'): docstring = docstring[:-16] if docstring.strip() in ('', ''): docstring = '(Undocumented)' else: docstring = '(Undocumented)' self.h('/**\n * %s:\n\n' % name) self.h(' * %s\n' % xml_escape(docstring)) self.h(' *\n') self.h(' * This macro expands to a call to a function\n') self.h(' * that returns the #GType of a #GValueArray\n') self.h(' * appropriate for representing a D-Bus struct\n') self.h(' * with signature (%s).\n' % impl_sig) self.h(' *\n') for i, member in enumerate(members): self.h(' * Member %d (D-Bus type ' '%s,\n' % (i, member.getAttribute('type'))) tp_type = member.getAttributeNS(NS_TP, 'type') if tp_type: self.h(' * type %s,\n' % tp_type) self.h(' * named %s):\n' % member.getAttribute('name')) docstring = get_docstring(member) or '(Undocumented)' self.h(' * %s\n' % xml_escape(docstring)) self.h(' *\n') self.h(' */\n') self.h('#define %s (%s ())\n\n' % (name, impl)) array_name = struct.getAttribute('array-name') if array_name != '': array_name = (self.PREFIX_ + 'ARRAY_TYPE_' + array_name.upper()) impl = self.prefix_ + 'type_dbus_array_' + esc_impl_sig self.h('/**\n * %s:\n\n' % array_name) self.h(' * Expands to a call to a function\n') self.h(' * that returns the #GType of a #GPtrArray\n') self.h(' * of #%s.\n' % name) self.h(' */\n') self.h('#define %s (%s ())\n\n' % (array_name, impl)) self.need_struct_arrays[impl_sig] = esc_impl_sig self.need_structs[impl_sig] = esc_impl_sig def __call__(self): mappings = self.dom.getElementsByTagNameNS(NS_TP, 'mapping') structs = self.dom.getElementsByTagNameNS(NS_TP, 'struct') for mapping in mappings: self.do_mapping_header(mapping) for sig in self.need_mappings: self.h('GType %stype_dbus_hash_%s (void);\n\n' % (self.prefix_, self.need_mappings[sig])) self.c('GType\n%stype_dbus_hash_%s (void)\n{\n' % (self.prefix_, self.need_mappings[sig])) self.c(' static GType t = 0;\n\n') self.c(' if (G_UNLIKELY (t == 0))\n') # FIXME: translate sig into two GTypes items = tuple(Signature(sig)) gtypes = types_to_gtypes(items) self.c(' t = dbus_g_type_get_map ("GHashTable", ' '%s, %s);\n' % (gtypes[0], gtypes[1])) self.c(' return t;\n') self.c('}\n\n') for struct in structs: self.do_struct_header(struct) for sig in self.need_structs: self.h('GType %stype_dbus_struct_%s (void);\n\n' % (self.prefix_, self.need_structs[sig])) self.c('GType\n%stype_dbus_struct_%s (void)\n{\n' % (self.prefix_, self.need_structs[sig])) self.c(' static GType t = 0;\n\n') self.c(' if (G_UNLIKELY (t == 0))\n') self.c(' t = dbus_g_type_get_struct ("GValueArray",\n') items = tuple(Signature(sig)) gtypes = types_to_gtypes(items) for gtype in gtypes: self.c(' %s,\n' % gtype) self.c(' G_TYPE_INVALID);\n') self.c(' return t;\n') self.c('}\n\n') for sig in self.need_struct_arrays: self.h('GType %stype_dbus_array_%s (void);\n\n' % (self.prefix_, self.need_struct_arrays[sig])) self.c('GType\n%stype_dbus_array_%s (void)\n{\n' % (self.prefix_, self.need_struct_arrays[sig])) self.c(' static GType t = 0;\n\n') self.c(' if (G_UNLIKELY (t == 0))\n') self.c(' t = dbus_g_type_get_collection ("GPtrArray", ' '%stype_dbus_struct_%s ());\n' % (self.prefix_, self.need_struct_arrays[sig])) self.c(' return t;\n') self.c('}\n\n') for sig in self.need_other_arrays: self.h('GType %stype_dbus_array_of_%s (void);\n\n' % (self.prefix_, self.need_other_arrays[sig])) self.c('GType\n%stype_dbus_array_of_%s (void)\n{\n' % (self.prefix_, self.need_other_arrays[sig])) self.c(' static GType t = 0;\n\n') self.c(' if (G_UNLIKELY (t == 0))\n') if sig[:2] == 'a{' and sig[-1:] == '}': # array of mappings self.c(' t = dbus_g_type_get_collection (' '"GPtrArray", ' '%stype_dbus_hash_%s ());\n' % (self.prefix_, escape_as_identifier(sig[2:-1]))) elif sig[:2] == 'a(' and sig[-1:] == ')': # array of arrays of struct self.c(' t = dbus_g_type_get_collection (' '"GPtrArray", ' '%stype_dbus_array_%s ());\n' % (self.prefix_, escape_as_identifier(sig[2:-1]))) elif sig[:1] == 'a': # array of arrays of non-struct self.c(' t = dbus_g_type_get_collection (' '"GPtrArray", ' '%stype_dbus_array_of_%s ());\n' % (self.prefix_, escape_as_identifier(sig[1:]))) else: raise AssertionError("array of '%s' not supported" % sig) self.c(' return t;\n') self.c('}\n\n') if __name__ == '__main__': argv = sys.argv[1:] dom = xml.dom.minidom.parse(argv[0]) GTypesGenerator(dom, argv[1], argv[2])() telepathy-qt-0.9.3/tools/telepathy-glib.supp0000644000175200001440000001451312000056607023403 0ustar00collabora-develusers00000000000000# Valgrind error suppression file # ============================= libc ================================== { ld.so initialization + selinux Memcheck:Leak ... fun:_dl_init obj:/lib/ld-*.so } { dlopen initialization, triggered by handle-leak-debug code Memcheck:Leak ... fun:__libc_dlopen_mode fun:init fun:backtrace fun:handle_leak_debug_bt fun:dynamic_ensure_handle fun:tp_handle_ensure } # default.supp has these for 2.10, but they're too specific { Debian libc6 (2.10.x, 2.11.x) stripped dynamic linker Memcheck:Cond fun:index fun:expand_dynamic_string_token fun:_dl_map_object fun:map_doit fun:_dl_catch_error fun:do_preload fun:dl_main fun:_dl_sysdep_start fun:_dl_start obj:/lib/ld-*.so } { Debian libc6 (2.9.x - 2.11.x) stripped dynamic linker Memcheck:Cond fun:_dl_relocate_object fun:dl_main fun:_dl_sysdep_start fun:_dl_start obj:/lib/ld-*.so } { ld.so initialization on glibc 2.9 Memcheck:Cond fun:strlen fun:_dl_init_paths fun:dl_main fun:_dl_sysdep_start fun:_dl_start obj:/lib/ld-2.9.so } # ======================= libselinux on Debian amd64 ===================== { I have no idea what SELinux is doing but it's not my problem Memcheck:Cond ... obj:/lib/libselinux.so.1 obj:/lib/libselinux.so.1 obj:/lib/libselinux.so.1 } { I have no idea what SELinux is doing but it's not my problem Memcheck:Value8 ... obj:/lib/libselinux.so.1 obj:/lib/libselinux.so.1 obj:/lib/libselinux.so.1 } { I have no idea what SELinux is doing but it's not my problem Memcheck:Leak ... obj:/lib/libselinux.so.1 obj:/lib/libselinux.so.1 obj:/lib/libselinux.so.1 } # ============================= GLib ================================== { g_set_prgname copies its argument Memcheck:Leak ... fun:g_set_prgname } { one g_get_charset per child^Wprocess Memcheck:Leak ... fun:g_get_charset } { one g_get_home_dir per process Memcheck:Leak ... fun:g_get_home_dir } { GQuarks can't be freed Memcheck:Leak ... fun:g_quark_from_static_string } { GQuarks can't be freed Memcheck:Leak ... fun:g_quark_from_string } { interned strings can't be freed Memcheck:Leak ... fun:g_intern_string } { interned strings can't be freed Memcheck:Leak ... fun:g_intern_static_string } { shared global default g_main_context Memcheck:Leak ... fun:g_main_context_new fun:g_main_context_default } { GTest initialization Memcheck:Leak ... fun:g_test_init fun:main } { GTest admin Memcheck:Leak ... fun:g_test_add_vtable } { GTest pseudorandomness Memcheck:Leak ... fun:g_rand_new_with_seed_array fun:test_run_seed ... fun:g_test_run } { GSLice initialization Memcheck:Leak ... fun:g_malloc0 fun:g_slice_init_nomessage fun:g_slice_alloc } # ============================= GObject =============================== { g_type_init Memcheck:Leak ... fun:g_type_init } { g_type_init_with_debug_flags Memcheck:Leak ... fun:g_type_init_with_debug_flags } { g_type_register_static Memcheck:Leak ... fun:g_type_register_static } { g_type_add_interface_static Memcheck:Leak ... fun:g_type_add_interface_static } { initialization of interfaces Memcheck:Leak ... fun:type_iface_vtable_base_init_Wm fun:g_type_class_ref } # ============================= GIO =================================== { GIO init Memcheck:Leak ... fun:g_inet_address_class_intern_init } { g_simple_async_result class Memcheck:Leak ... fun:g_type_class_ref ... fun:g_simple_async_result_new } # ============================= dbus-glib ============================= { registering marshallers is permanent Memcheck:Leak ... fun:dbus_g_object_register_marshaller_array fun:dbus_g_object_register_marshaller } { dbus-glib specialized GTypes are permanent Memcheck:Leak ... fun:dbus_g_type_specialized_init } { libdbus shared connection Memcheck:Leak ... fun:dbus_g_bus_get } { dbus-gobject registrations aren't freed unless we fall off the bus Memcheck:Leak ... fun:g_slist_append fun:dbus_g_connection_register_g_object } { DBusGProxy slots aren't freed unless we fall off the bus Memcheck:Leak ... fun:dbus_connection_allocate_data_slot ... fun:dbus_g_proxy_constructor } { error registrations are for life, not just for Christmas Memcheck:Leak ... fun:dbus_g_error_domain_register } { DBusGProxy class init Memcheck:Leak ... fun:dbus_g_proxy_class_init } # ============================= telepathy-glib ======================== { tp_dbus_daemon_constructor @daemons once per DBusConnection Memcheck:Leak ... fun:g_slice_alloc fun:tp_dbus_daemon_constructor } { tp_proxy_subclass_add_error_mapping refs the enum Memcheck:Leak ... fun:g_type_class_ref fun:tp_proxy_subclass_add_error_mapping } { tp_proxy_or_subclass_hook_on_interface_add never frees its list Memcheck:Leak ... fun:tp_proxy_or_subclass_hook_on_interface_add } { tp_dbus_daemon_constructor filter not freed til we fall off the bus Memcheck:Leak ... fun:dbus_connection_add_filter fun:tp_dbus_daemon_constructor } { tp_g_socket_address_from_variant reffing GNIO types Memcheck:Leak ... fun:g_type_class_ref ... fun:tp_g_socket_address_from_variant } { creating classes for DBusGProxy Memcheck:Leak ... fun:g_type_class_ref ... fun:g_object_new ... fun:tp_proxy_borrow_interface_by_id } { creating classes for tp_dbus_daemon_new Memcheck:Leak ... fun:g_type_class_ref ... fun:g_object_new ... fun:tp_dbus_daemon_new } { creating classes for TpCHannel Memcheck:Leak ... fun:g_type_class_ref ... fun:g_object_new ... fun:tp_channel_new } { creating a boxed type to use in TpCapabilities Memcheck:Leak ... fun:g_type_class_ref ... fun:g_param_spec_boxed fun:tp_capabilities_class_intern_init } # ============================= questionable ========================== { creating classes for instances (this is a pretty big hammer) Memcheck:Leak ... fun:g_type_class_ref ... fun:g_type_create_instance ... fun:g_param_spec_string } telepathy-qt-0.9.3/tools/CMakeLists.txt0000644000175200001440000001127112000056607022316 0ustar00collabora-develusers00000000000000# Some useful commands add_custom_command(OUTPUT FIXME.out COMMAND egrep ARGS -A 5 '[F]IXME|[T]ODO|[X]XX' ${CMAKE_SOURCE_DIR}/TelepathyQt/*.[ch]* ${CMAKE_SOURCE_DIR}/TelepathyQt/*.[ch]* > FIXME.out || true) add_custom_target(check-local DEPENDS FIXME.out) execute_process(COMMAND ${SH} tools/git-which-branch.sh misc | tr -d '\n' | tr -C "[:alnum:]" _ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE GIT_BRANCH_CURRENT) if (GIT_BRANCH_CURRENT) string(LENGTH ${GIT_BRANCH_CURRENT} HAVE_GIT_BRANCH) if (HAVE_GIT_BRANCH) string(REPLACE "\n" "" GIT_BRANCH_CURRENT ${GIT_BRANCH_CURRENT}) set(UPLOAD_BRANCH_TO people.freedesktop.org:public_html/telepathy-qt) add_custom_target(upload-branch-docs rsync -rtzvPp --chmod=a+rX doc/html/ ${UPLOAD_BRANCH_TO}-${GIT_BRANCH_CURRENT} WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) add_dependencies(upload-branch-docs doxygen-doc) endif (HAVE_GIT_BRANCH) endif (GIT_BRANCH_CURRENT) if (PERL_FOUND) add_custom_target(maintainer-fix-qt-links-in-docs ${PERL_EXECUTABLE} doc/html/installdox -l qt.tags@http://doc.qt.nokia.com/latest/ doc/html/*.html WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) add_dependencies(maintainer-fix-qt-links-in-docs doxygen-doc _maintainer-upload-release-check) endif (PERL_FOUND) add_custom_target(maintainer-upload-release-docs rsync -rtOvzPp --chmod=Dg+s,ug+rwX,o=rX doc/html/ telepathy.freedesktop.org:/srv/telepathy.freedesktop.org/www/doc/telepathy-qt/ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) if (PERL_FOUND) add_dependencies(maintainer-upload-release-docs maintainer-fix-qt-links-in-docs) else (PERL_FOUND) add_dependencies(maintainer-upload-release-docs doxygen-doc _maintainer-upload-release-check) endif (PERL_FOUND) file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/maintainer-upload-release-check.sh " #!/bin/sh case ${PACKAGE_VERSION} in (*.*.*.*) echo \"${PACKAGE_VERSION} is not a release\" >&2; exit 2; ;; esac test -f ${CMAKE_BINARY_DIR}/${PACKAGE_NAME}-${PACKAGE_VERSION}.tar.gz if ! test -f ${CMAKE_BINARY_DIR}/${PACKAGE_NAME}-${PACKAGE_VERSION}.tar.gz.asc; then gpg --detach-sign -a ${CMAKE_BINARY_DIR}/${PACKAGE_NAME}-${PACKAGE_VERSION}.tar.gz; fi; gpg --verify ${CMAKE_BINARY_DIR}/${PACKAGE_NAME}-${PACKAGE_VERSION}.tar.gz.asc ") add_custom_target(_maintainer-upload-release-check ${SH} ${CMAKE_CURRENT_BINARY_DIR}/maintainer-upload-release-check.sh) add_custom_target(maintainer-upload-release rsync -vzP ${PACKAGE_NAME}-${PACKAGE_VERSION}.tar.gz telepathy.freedesktop.org:/srv/telepathy.freedesktop.org/www/releases/${PACKAGE_NAME}/${PACKAGE_NAME}-${PACKAGE_VERSION}.tar.gz COMMAND rsync -vzP ${PACKAGE_NAME}-${PACKAGE_VERSION}.tar.gz.asc telepathy.freedesktop.org:/srv/telepathy.freedesktop.org/www/releases/${PACKAGE_NAME}/${PACKAGE_NAME}-${PACKAGE_VERSION}.tar.gz.asc WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) add_dependencies(maintainer-upload-release _maintainer-upload-release-check maintainer-upload-release-docs) set(toolchain_files c-constants-gen.py check-misc.sh check-whitespace.sh git-which-branch.sh glib-ginterface-gen.py glib-gtypes-generator.py glib-interfaces-gen.py glib-signals-marshal-gen.py libtpcodegen.py libglibcodegen.py libqtcodegen.py qt-client-gen.py qt-constants-gen.py qt-types-gen.py manager-file.py with-session-bus.sh xincludator.py ) string(REPLACE "." " " sh_toolchain_files ${toolchain_files}) set(TELEPATHY_SPEC_SRCDIR ${CMAKE_SOURCE_DIR}/../telepathy-spec) file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/maintainer-update-from-telepathy-spec.sh " #!/bin/sh set -e cd ${CMAKE_SOURCE_DIR} for x in ${sh_toolchain_files}; do if test -f ${TELEPATHY_SPEC_SRCDIR}/tools/$$x; then cp ${TELEPATHY_SPEC_SRCDIR}/tools/$$x $$x; fi; done ") add_custom_target(maintainer-update-from-telepathy-spec ${SH} ${CMAKE_CURRENT_BINARY_DIR}/maintainer-update-from-telepathy-spec.sh WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) set(TELEPATHY_GLIB_SRCDIR ${CMAKE_SOURCE_DIR}/../telepathy-glib) file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/maintainer-update-from-telepathy-glib.sh " #!/bin/sh set -e cd ${CMAKE_SOURCE_DIR} for x in ${sh_toolchain_files}; do if test -f ${TELEPATHY_GLIB_SRCDIR}/tools/$$x; then cp ${TELEPATHY_GLIB_SRCDIR}/tools/$$x $$x; fi; done ") add_custom_target(maintainer-update-from-telepathy-glib ${SH} ${CMAKE_CURRENT_BINARY_DIR}/maintainer-update-from-telepathy-glib.sh WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) telepathy-qt-0.9.3/tools/qt-svc-gen.py0000644000175200001440000005636612000056607022132 0ustar00collabora-develusers00000000000000#!/usr/bin/python # # Copyright (C) 2012 Collabora Limited # Copyright (C) 2012 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 from sys import argv import xml.dom.minidom import codecs from getopt import gnu_getopt from libtpcodegen import NS_TP, get_descendant_text, get_by_path from libqtcodegen import binding_from_usage, extract_arg_or_member_info, format_docstring, gather_externals, gather_custom_lists, get_headerfile_cmd, get_qt_name, qt_identifier_escape, RefRegistry # TODO generate docstrings def to_lower_camel_case(s): if len(s) <= 1: return s.lower() i = 0 for c in s: if c == '_': break i += 1 ret = s if i == len(s): return s.lower() else: ret = s[0:i].lower() + s[i:] ret = ret.replace('_', '') return ret class Generator(object): def __init__(self, opts): try: self.group = opts.get('--group', '') self.headerfile = opts['--headerfile'] self.implfile = opts['--implfile'] self.namespace = opts['--namespace'] self.typesnamespace = opts['--typesnamespace'] self.realinclude = opts.get('--realinclude', None) self.mocinclude = opts.get('--mocinclude', None) self.prettyinclude = opts.get('--prettyinclude') self.extraincludes = opts.get('--extraincludes', None) self.must_define = opts.get('--must-define', None) self.visibility = opts.get('--visibility', '') ifacedom = xml.dom.minidom.parse(opts['--ifacexml']) specdom = xml.dom.minidom.parse(opts['--specxml']) except KeyError, k: assert False, 'Missing required parameter %s' % k.args[0] if not self.realinclude: self.realinclude = self.headerfile self.hs = [] self.bs = [] self.ifacenodes = ifacedom.getElementsByTagName('node') self.spec, = get_by_path(specdom, "spec") self.custom_lists = gather_custom_lists(self.spec, self.typesnamespace) self.externals = gather_externals(self.spec) self.refs = RefRegistry(self.spec) def __call__(self): # Output info header and includes self.h("""\ /* * This file contains D-Bus adaptor classes generated by qt-svc-gen.py. * * This file can be distributed under the same terms as the specification from * which it was generated. */ """) if self.must_define: self.h('\n') self.h('#ifndef %s\n' % self.must_define) self.h('#error %s\n' % self.must_define) self.h('#endif\n') self.h('\n') if self.extraincludes: for include in self.extraincludes.split(','): self.h('#include %s\n' % include) self.h("""\ #include #include #include #include #include """) if self.must_define: self.b("""#define %s\n""" % (self.must_define)) self.b("""#include "%s" """ % self.realinclude) if self.mocinclude: self.b("""#include "%s" """ % self.mocinclude) self.b("""\ #include #include """) # Begin namespace for ns in self.namespace.split('::'): self.hb("""\ namespace %s { """ % ns) # Output interface proxies def ifacenodecmp(x, y): xname, yname = [self.namespace + '::' + node.getAttribute('name').replace('/', '').replace('_', '') + 'Adaptor' for node in x, y] return cmp(xname, yname) self.ifacenodes.sort(cmp=ifacenodecmp) for ifacenode in self.ifacenodes: self.do_ifacenode(ifacenode) # End namespace self.hb(''.join(['\n}' for ns in self.namespace.split('::')])) # Write output to files (codecs.getwriter('utf-8')(open(self.headerfile, 'w'))).write(''.join(self.hs)) (codecs.getwriter('utf-8')(open(self.implfile, 'w'))).write(''.join(self.bs)) def do_ifacenode(self, ifacenode): # Extract info name = ifacenode.getAttribute('name').replace('/', '').replace('_', '') + 'Adaptor' iface, = get_by_path(ifacenode, 'interface') dbusname = iface.getAttribute('name') props = get_by_path(iface, 'property') methods = get_by_path(iface, 'method') signals = get_by_path(iface, 'signal') # Begin class, constructors self.h(""" /** * \\class %(name)s %(headercmd)s\ %(groupcmd)s\ * * Adaptor class providing a 1:1 mapping of the D-Bus interface "%(dbusname)s". */ class %(visibility)s %(name)s : public Tp::AbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "%(dbusname)s") Q_CLASSINFO("D-Bus Introspection", "" " \\n" """ % {'name': name, 'headercmd': get_headerfile_cmd(self.realinclude, self.prettyinclude), 'groupcmd': self.group and (' * \\ingroup %s\n' % self.group), 'dbusname': dbusname, 'visibility': self.visibility, }) self.do_introspection(props, methods, signals) self.h("""\ " \\n" "") """) self.do_qprops(props) self.h(""" public: %(name)s(const QDBusConnection& dbusConnection, QObject* adaptee, QObject* parent); virtual ~%(name)s(); """ % {'name': name}) self.do_mic_typedefs(methods) self.b(""" %(name)s::%(name)s(const QDBusConnection& bus, QObject* adaptee, QObject* parent) : Tp::AbstractAdaptor(bus, adaptee, parent) { """ % {'name': name}) self.do_signals_connect(signals) self.b("""\ } %(name)s::~%(name)s() { } """ % {'name': name}) # Properties has_props = False if props: self.h(""" public: // PROPERTIES """) for prop in props: # Skip tp:properties if not prop.namespaceURI: self.do_prop(name, prop) has_props = True # Methods if methods: self.h(""" public Q_SLOTS: // METHODS """) for method in methods: self.do_method(name, method) # Signals if signals: self.h(""" Q_SIGNALS: // SIGNALS """) for signal in signals: self.do_signal(signal) # Close class self.h("""\ }; """) def do_introspection(self, props, methods, signals): self.do_prop_introspection(props) self.do_method_introspection(methods) self.do_signal_introspection(signals) def do_prop_introspection(self, props): for prop in props: if prop.namespaceURI: continue name = prop.getAttribute('name') access = prop.getAttribute('access') sig = prop.getAttribute('type') tptype = prop.getAttributeNS(NS_TP, 'type') binding = binding_from_usage(sig, tptype, self.custom_lists, (sig, tptype) in self.externals, self.typesnamespace) if not binding.custom_type: self.h("""\ " \\n" """ % {'access': access, 'sig': sig, 'name': name, }) else: self.h("""\ " \\n" " \\n" " \\n" """ % {'access': access, 'sig': sig, 'name': name, 'type': binding.val, }) def do_method_introspection(self, methods): for method in methods: name = method.getAttribute('name') args = get_by_path(method, 'arg') argnames, argdocstrings, argbindings = extract_arg_or_member_info(args, self.custom_lists, self.externals, self.typesnamespace, self.refs, ' * ') if not argnames: self.h("""\ " \\n" """ % {'name': name}) else: self.h("""\ " \\n" """ % {'name': name}) outindex = 0 inindex = 0 for i in xrange(len(argnames)): assert argnames[i] != None, 'Name missing from argument at index %d for signal %s' % (i, name) argbinding = argbindings[i] argname = argnames[i] argsig = args[i].getAttribute('type') argdirection = args[i].getAttribute('direction') # QtDBus requires annotating a{sv} if argsig == 'a{sv}': argbinding.custom_type = True if not argbinding.custom_type: self.h("""\ " \\n" """ % {'direction': argdirection, 'sig': argsig, 'name': argname}) else: self.h("""\ " \\n" " \\n" " \\n" """ % {'direction': argdirection, 'sig': argsig, 'name': argname, 'type': argbinding.val, 'index': 'In' + str(inindex) if argdirection == 'in' else 'Out' + str(outindex), }) if argdirection == 'out': outindex += 1 else: inindex += 1 self.h("""\ " \\n" """) def do_signal_introspection(self, signals): for signal in signals: name = signal.getAttribute('name') args = get_by_path(signal, 'arg') argnames, argdocstrings, argbindings = extract_arg_or_member_info(args, self.custom_lists, self.externals, self.typesnamespace, self.refs, ' * ') if not argnames: self.h("""\ " \\n" """ % {'name': name}) else: self.h("""\ " \\n" """ % {'name': name}) for i in xrange(len(argnames)): assert argnames[i] != None, 'Name missing from argument at index %d for signal %s' % (i, name) argbinding = argbindings[i] argname = argnames[i] argsig = args[i].getAttribute('type') if not argbinding.custom_type: self.h("""\ " \\n" """ % {'sig': argsig, 'name': argname}) else: self.h("""\ " \\n" " \\n" " \\n" """ % {'sig': argsig, 'name': argname, 'type': argbinding.val, 'index': i, }) self.h("""\ " \\n" """) def do_mic_typedefs(self, methods): for method in methods: name = method.getAttribute('name') args = get_by_path(method, 'arg') argnames, argdocstrings, argbindings = extract_arg_or_member_info(args, self.custom_lists, self.externals, self.typesnamespace, self.refs, ' * ') outargs = [] for i in xrange(len(args)): if args[i].getAttribute('direction') == 'out': outargs.append(i) if outargs: outargtypes = ', '.join([argbindings[i].val for i in outargs]) else: outargtypes = '' self.h("""\ typedef Tp::MethodInvocationContextPtr< %(outargtypes)s > %(name)sContextPtr; """ % {'name': name, 'outargtypes': outargtypes, }) def do_qprops(self, props): for prop in props: # Skip tp:properties if not prop.namespaceURI: self.do_qprop(prop) def do_qprop(self, prop): name = prop.getAttribute('name') access = prop.getAttribute('access') gettername = name settername = None if 'write' in access: settername = 'Set' + name sig = prop.getAttribute('type') tptype = prop.getAttributeNS(NS_TP, 'type') binding = binding_from_usage(sig, tptype, self.custom_lists, (sig, tptype) in self.externals, self.typesnamespace) self.h("""\ Q_PROPERTY(%(type)s %(name)s %(getter)s %(setter)s) """ % {'type': binding.val, 'name': name, 'getter': 'READ ' + gettername if ('read' in access) else '', 'setter': 'WRITE ' + settername if ('write' in access) else '', }) def do_prop(self, ifacename, prop): name = prop.getAttribute('name') adaptee_name = to_lower_camel_case(prop.getAttribute('tp:name-for-bindings')) access = prop.getAttribute('access') gettername = name settername = None if 'write' in access: settername = 'Set' + name docstring = format_docstring(prop, self.refs, ' * ').replace('*/', '*/') sig = prop.getAttribute('type') tptype = prop.getAttributeNS(NS_TP, 'type') binding = binding_from_usage(sig, tptype, self.custom_lists, (sig, tptype) in self.externals, self.typesnamespace) if 'read' in access: self.h("""\ /** * Return the value of the exported D-Bus object property \\c %(name)s of type \\c %(type)s. * * Adaptees should export this property as a Qt property named * '%(adaptee_name)s' with type %(type)s. * %(docstring)s\ * * \\return The value of exported property \\c %(name)s. */ %(type)s %(gettername)s() const; """ % {'name': name, 'adaptee_name': adaptee_name, 'docstring': docstring, 'type': binding.val, 'gettername': gettername, }) self.b(""" %(type)s %(ifacename)s::%(gettername)s() const { return qvariant_cast< %(type)s >(adaptee()->property("%(adaptee_name)s")); } """ % {'type': binding.val, 'ifacename': ifacename, 'gettername': gettername, 'adaptee_name': adaptee_name, }) if 'write' in access: self.h("""\ /** * Set the value of the exported D-Bus object property \\c %(name)s of type \\c %(type)s. * * Adaptees should export this property as a writable Qt property named * '%(adaptee_name)s' with type %(type)s. * %(docstring)s\ */ void %(settername)s(const %(type)s &newValue); """ % {'name': name, 'adaptee_name': adaptee_name, 'docstring': docstring, 'settername': settername, 'type': binding.val, }) self.b(""" void %(ifacename)s::%(settername)s(const %(type)s &newValue) { adaptee()->setProperty("%(adaptee_name)s", qVariantFromValue(newValue)); } """ % {'ifacename': ifacename, 'settername': settername, 'type': binding.val, 'adaptee_name': adaptee_name, }) def do_method(self, ifacename, method): name = method.getAttribute('name') adaptee_name = to_lower_camel_case(method.getAttribute('tp:name-for-bindings')) args = get_by_path(method, 'arg') argnames, argdocstrings, argbindings = extract_arg_or_member_info(args, self.custom_lists, self.externals, self.typesnamespace, self.refs, ' * ') docstring = format_docstring(method, self.refs, ' * ').replace('*/', '*/') inargs = [] outargs = [] for i in xrange(len(args)): if args[i].getAttribute('direction') == 'out': outargs.append(i) else: inargs.append(i) assert argnames[i] != None, 'No argument name for input argument at index %d for method %s' % (i, name) if outargs: rettype = argbindings[outargs[0]].val else: rettype = 'void' params = [argbindings[i].inarg + ' ' + argnames[i] for i in inargs] params.append('const QDBusMessage& dbusMessage') params += [argbindings[i].outarg + ' ' + argnames[i] for i in outargs[1:]] params = ', '.join(params) if outargs: outargtypes = ', '.join([argbindings[i].val for i in outargs]) else: outargtypes = '' invokemethodargs = ', '.join(['Q_ARG(' + argbindings[i].val + ', ' + argnames[i] + ')' for i in inargs]) inparams = [argbindings[i].val for i in inargs] inparams.append("%s::%s::%sContextPtr" % (self.namespace, ifacename, name)) normalized_adaptee_params = ','.join(inparams) adaptee_params = [argbindings[i].inarg + ' ' + argnames[i] for i in inargs] adaptee_params.append('const %(namespace)s::%(ifacename)s::%(name)sContextPtr &context' % {'namespace': self.namespace, 'ifacename': ifacename, 'name': name}) adaptee_params = ', '.join(adaptee_params) self.h("""\ /** * Begins a call to the exported D-Bus method \\c %(name)s on this object. * * Adaptees should export this method as a Qt slot with the following signature: * void %(adaptee_name)s(%(adaptee_params)s); * * Implementations should call MethodInvocationContext::setFinished (or setFinishedWithError * accordingly) on the received \\a context object once the method has finished processing. * %(docstring)s\ * """ % {'name': name, 'adaptee_name': adaptee_name, 'adaptee_params': adaptee_params, 'rettype': rettype, 'docstring': docstring }) for i in inargs: if argdocstrings[i]: self.h("""\ * \\param %s %s\ """ % (argnames[i], argdocstrings[i])) for i in outargs[1:]: if argdocstrings[i]: self.h("""\ * \\param %s Output parameter %s\ """ % (argnames[i], argdocstrings[i])) if outargs: self.h("""\ * \\return %s\ """ % argdocstrings[outargs[0]]) self.h("""\ */ %(rettype)s %(name)s(%(params)s); """ % {'rettype': rettype, 'name': name, 'params': params }) self.b(""" %(rettype)s %(ifacename)s::%(name)s(%(params)s) { if (!adaptee()->metaObject()->indexOfMethod("%(adaptee_name)s(%(normalized_adaptee_params)s)") == -1) { dbusConnection().send(dbusMessage.createErrorReply(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Not implemented"))); """ % {'rettype': rettype, 'ifacename': ifacename, 'name': name, 'adaptee_name': adaptee_name, 'normalized_adaptee_params': normalized_adaptee_params, 'params': params, }) if rettype != 'void': self.b("""\ return %(rettype)s(); """ % {'rettype': rettype}) else: self.b("""\ return; """) self.b("""\ } %(name)sContextPtr ctx = %(name)sContextPtr( new Tp::MethodInvocationContext< %(outargtypes)s >(dbusConnection(), dbusMessage)); """ % {'name': name, 'outargtypes': outargtypes, }) if invokemethodargs: self.b("""\ QMetaObject::invokeMethod(adaptee(), "%(adaptee_name)s", %(invokemethodargs)s, Q_ARG(%(namespace)s::%(ifacename)s::%(name)sContextPtr, ctx)); """ % {'namespace': self.namespace, 'ifacename': ifacename, 'name': name, 'adaptee_name': adaptee_name, 'invokemethodargs': invokemethodargs, }) else: self.b("""\ QMetaObject::invokeMethod(adaptee(), "%(lname)s", Q_ARG(%(namespace)s::%(ifacename)s::%(name)sContextPtr, ctx)); """ % {'namespace': self.namespace, 'ifacename': ifacename, 'name': name, 'lname': (name[0].lower() + name[1:]), }) if rettype != 'void': self.b("""\ return %(rettype)s(); """ % {'rettype': rettype}) self.b("}\n") def do_signal(self, signal): name = signal.getAttribute('name') adaptee_name = to_lower_camel_case(signal.getAttribute('tp:name-for-bindings')) argnames, argdocstrings, argbindings = extract_arg_or_member_info(get_by_path(signal, 'arg'), self.custom_lists, self.externals, self.typesnamespace, self.refs, ' * ') params = ', '.join(['%s %s' % (binding.inarg, param_name) for binding, param_name in zip(argbindings, argnames)]) for i in xrange(len(argnames)): assert argnames[i] != None, 'Name missing from argument at index %d for signal %s' % (i, name) self.h("""\ /** * Represents the exported D-Bus signal \\c %(name)s on this object. * * Adaptees should export this signal as a Qt signal with the following signature: * void %(adaptee_name)s(%(params)s); * * The adaptee signal will be automatically relayed as a D-Bus signal once emitted. * """ % {'name': name, 'adaptee_name': adaptee_name, 'params': params }) for i in xrange(len(argnames)): assert argnames[i] != None, 'Name missing from argument at index %d for signal %s' % (i, name) if argdocstrings[i]: self.h("""\ * \\param %s %s\ """ % (argnames[i], argdocstrings[i])) self.h("""\ */ void %(name)s(%(params)s); """ % {'name': name, 'params': params }) def do_signals_connect(self, signals): for signal in signals: name = signal.getAttribute('name') adaptee_name = to_lower_camel_case(signal.getAttribute('tp:name-for-bindings')) _, _, argbindings = extract_arg_or_member_info(get_by_path(signal, 'arg'), self.custom_lists, self.externals, self.typesnamespace, self.refs, ' * ') self.b("""\ connect(adaptee, SIGNAL(%(adaptee_name)s(%(params)s)), SIGNAL(%(name)s(%(params)s))); """ % {'name': name, 'adaptee_name': adaptee_name, 'params': ', '.join([binding.inarg for binding in argbindings]) }) def h(self, str): self.hs.append(str) def b(self, str): self.bs.append(str) def hb(self, str): self.h(str) self.b(str) if __name__ == '__main__': options, argv = gnu_getopt(argv[1:], '', ['group=', 'headerfile=', 'implfile=', 'namespace=', 'typesnamespace=', 'realinclude=', 'mocinclude=', 'prettyinclude=', 'extraincludes=', 'must-define=', 'visibility=', 'ifacexml=', 'specxml=']) Generator(dict(options))() telepathy-qt-0.9.3/tools/glib-interfaces-gen.py0000644000175200001440000000636612000056607023746 0ustar00collabora-develusers00000000000000#!/usr/bin/python from sys import argv, stdout, stderr import xml.dom.minidom from libglibcodegen import NS_TP, get_docstring, \ get_descendant_text, get_by_path class Generator(object): def __init__(self, prefix, implfile, declfile, dom): self.prefix = prefix + '_' self.impls = open(implfile, 'w') self.decls = open(declfile, 'w') self.spec = get_by_path(dom, "spec")[0] def h(self, code): self.decls.write(code.encode('utf-8')) def c(self, code): self.impls.write(code.encode('utf-8')) def __call__(self): for f in self.h, self.c: self.do_header(f) self.do_body() # Header def do_header(self, f): f('/* Generated from: ') f(get_descendant_text(get_by_path(self.spec, 'title'))) version = get_by_path(self.spec, "version") if version: f(' version ' + get_descendant_text(version)) f('\n\n') for copyright in get_by_path(self.spec, 'copyright'): f(get_descendant_text(copyright)) f('\n') f('\n') f(get_descendant_text(get_by_path(self.spec, 'license'))) f(get_descendant_text(get_by_path(self.spec, 'docstring'))) f(""" */ """) # Body def do_body(self): for iface in self.spec.getElementsByTagName('interface'): self.do_iface(iface) def do_iface(self, iface): parent_name = get_by_path(iface, '../@name') self.h("""\ /** * %(IFACE_DEFINE)s: * * The interface name "%(name)s" */ #define %(IFACE_DEFINE)s \\ "%(name)s" """ % {'IFACE_DEFINE' : (self.prefix + 'IFACE_' + \ parent_name).upper().replace('/', ''), 'name' : iface.getAttribute('name')}) self.h(""" /** * %(IFACE_QUARK_DEFINE)s: * * Expands to a call to a function that returns a quark for the interface \ name "%(name)s" */ #define %(IFACE_QUARK_DEFINE)s \\ (%(iface_quark_func)s ()) GQuark %(iface_quark_func)s (void); """ % {'IFACE_QUARK_DEFINE' : (self.prefix + 'IFACE_QUARK_' + \ parent_name).upper().replace('/', ''), 'iface_quark_func' : (self.prefix + 'iface_quark_' + \ parent_name).lower().replace('/', ''), 'name' : iface.getAttribute('name')}) self.c("""\ GQuark %(iface_quark_func)s (void) { static GQuark quark = 0; if (G_UNLIKELY (quark == 0)) { quark = g_quark_from_static_string ("%(name)s"); } return quark; } """ % {'iface_quark_func' : (self.prefix + 'iface_quark_' + \ parent_name).lower().replace('/', ''), 'name' : iface.getAttribute('name')}) for prop in iface.getElementsByTagNameNS(None, 'property'): self.decls.write(""" /** * %(IFACE_PREFIX)s_%(PROP_UC)s: * * The fully-qualified property name "%(name)s.%(prop)s" */ #define %(IFACE_PREFIX)s_%(PROP_UC)s \\ "%(name)s.%(prop)s" """ % {'IFACE_PREFIX' : (self.prefix + 'PROP_' + \ parent_name).upper().replace('/', ''), 'PROP_UC': prop.getAttributeNS(NS_TP, "name-for-bindings").upper(), 'name' : iface.getAttribute('name'), 'prop' : prop.getAttribute('name'), }) if __name__ == '__main__': argv = argv[1:] Generator(argv[0], argv[1], argv[2], xml.dom.minidom.parse(argv[3]))() telepathy-qt-0.9.3/tools/libtpcodegen.py0000644000175200001440000001472212000056607022573 0ustar00collabora-develusers00000000000000"""Library code for language-independent D-Bus-related code generation. The master copy of this library is in the telepathy-glib repository - please make any changes there. """ # Copyright (C) 2006-2008 Collabora Limited # # 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 from string import ascii_letters, digits NS_TP = "http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0" _ASCII_ALNUM = ascii_letters + digits def cmp_by_name(node1, node2): return cmp(node1.getAttributeNode("name").nodeValue, node2.getAttributeNode("name").nodeValue) def escape_as_identifier(identifier): """Escape the given string to be a valid D-Bus object path or service name component, using a reversible encoding to ensure uniqueness. The reversible encoding is as follows: * The empty string becomes '_' * Otherwise, each non-alphanumeric character is replaced by '_' plus two lower-case hex digits; the same replacement is carried out on the first character, if it's a digit """ # '' -> '_' if not identifier: return '_' # A bit of a fast path for strings which are already OK. # We deliberately omit '_' because, for reversibility, that must also # be escaped. if (identifier.strip(_ASCII_ALNUM) == '' and identifier[0] in ascii_letters): return identifier # The first character may not be a digit if identifier[0] not in ascii_letters: ret = ['_%02x' % ord(identifier[0])] else: ret = [identifier[0]] # Subsequent characters may be digits or ASCII letters for c in identifier[1:]: if c in _ASCII_ALNUM: ret.append(c) else: ret.append('_%02x' % ord(c)) return ''.join(ret) def get_by_path(element, path): branches = path.split('/') branch = branches[0] # Is the current branch an attribute, if so, return the attribute value if branch[0] == '@': return element.getAttribute(branch[1:]) # Find matching children for the branch children = [] if branch == '..': children.append(element.parentNode) else: for x in element.childNodes: if x.localName == branch: children.append(x) ret = [] # If this is not the last path element, recursively gather results from # children if len(branches) > 1: for x in children: add = get_by_path(x, '/'.join(branches[1:])) if isinstance(add, list): ret += add else: return add else: ret = children return ret def get_docstring(element): docstring = None for x in element.childNodes: if x.namespaceURI == NS_TP and x.localName == 'docstring': docstring = x if docstring is not None: docstring = docstring.toxml().replace('\n', ' ').strip() if docstring.startswith(''): docstring = docstring[14:].lstrip() if docstring.endswith(''): docstring = docstring[:-15].rstrip() if docstring in ('', ''): docstring = '' return docstring def get_deprecated(element): text = [] for x in element.childNodes: if hasattr(x, 'data'): text.append(x.data.replace('\n', ' ').strip()) else: # This caters for tp:dbus-ref elements, but little else. if x.childNodes and hasattr(x.childNodes[0], 'data'): text.append(x.childNodes[0].data.replace('\n', ' ').strip()) return ' '.join(text) def get_descendant_text(element_or_elements): if not element_or_elements: return '' if isinstance(element_or_elements, list): return ''.join(map(get_descendant_text, element_or_elements)) parts = [] for x in element_or_elements.childNodes: if x.nodeType == x.TEXT_NODE: parts.append(x.nodeValue) elif x.nodeType == x.ELEMENT_NODE: parts.append(get_descendant_text(x)) else: pass return ''.join(parts) class _SignatureIter: """Iterator over a D-Bus signature. Copied from dbus-python 0.71 so we can run genginterface in a limited environment with only Python (like Scratchbox). """ def __init__(self, string): self.remaining = string def next(self): if self.remaining == '': raise StopIteration signature = self.remaining block_depth = 0 block_type = None end = len(signature) for marker in range(0, end): cur_sig = signature[marker] if cur_sig == 'a': pass elif cur_sig == '{' or cur_sig == '(': if block_type == None: block_type = cur_sig if block_type == cur_sig: block_depth = block_depth + 1 elif cur_sig == '}': if block_type == '{': block_depth = block_depth - 1 if block_depth == 0: end = marker break elif cur_sig == ')': if block_type == '(': block_depth = block_depth - 1 if block_depth == 0: end = marker break else: if block_depth == 0: end = marker break end = end + 1 self.remaining = signature[end:] return Signature(signature[0:end]) class Signature(str): """A string, iteration over which is by D-Bus single complete types rather than characters. """ def __iter__(self): return _SignatureIter(self) def xml_escape(s): s = s.replace('&', '&').replace("'", ''').replace('"', '"') return s.replace('<', '<').replace('>', '>') telepathy-qt-0.9.3/tools/tp-qt-tests.supp0000644000175200001440000000266312000056607022701 0ustar00collabora-develusers00000000000000# QDBus doesn't call dbus_shutdown, so some D-Bus internal data structures are leaked. # We never call any low-level dbus message creation functions ourselves - if there are leaks, # they're either caused by not calling dbus_shutdown, QDBus bugs or libdbus bugs - neither of which # are our problem. { Initial session bus registration message Memcheck:Leak fun:malloc fun:dbus_message_new_empty_header } # The conference test CM channel object leaks some crazy GValue boxed data which I don't have the # energy to investigate how to properly free now - it's not production code anyway. { Conference test CM channel boxed GValue data Memcheck:Leak ... fun:g_boxed_copy ... fun:_ZN18TestConferenceChan12initTestCaseEv } # Reported as https://bugs.freedesktop.org/show_bug.cgi?id=32116 { TpBaseConnectionManager legacy protocol objects Memcheck:Leak ... fun:g_object_new ... fun:tp_base_connection_manager_register } # O(number of error domains) leak from dbus_g_method_return_error { dbus_g_method_return_error error domain enum class Memcheck:Leak ... fun:g_type_class_ref ... fun:dbus_g_method_return_error } # O(1) leak from tp_base_connection_manager installing the param spec for the dbus-daemon param { tp_base_connection_manager dbus-daemon param spec Memcheck:Leak ... fun:g_param_spec_object fun:tp_base_connection_manager_class_intern_init } telepathy-qt-0.9.3/tools/xincludator.py0000644000175200001440000000241312000056607022462 0ustar00collabora-develusers00000000000000#!/usr/bin/python from sys import argv, stdout, stderr import codecs, locale import os import xml.dom.minidom stdout = codecs.getwriter('utf-8')(stdout) NS_XI = 'http://www.w3.org/2001/XInclude' def xincludate(dom, base, dropns = []): remove_attrs = [] for i in xrange(dom.documentElement.attributes.length): attr = dom.documentElement.attributes.item(i) if attr.prefix == 'xmlns': if attr.localName in dropns: remove_attrs.append(attr) else: dropns.append(attr.localName) for attr in remove_attrs: dom.documentElement.removeAttributeNode(attr) for include in dom.getElementsByTagNameNS(NS_XI, 'include'): href = include.getAttribute('href') # FIXME: assumes Unixy paths filename = os.path.join(os.path.dirname(base), href) subdom = xml.dom.minidom.parse(filename) xincludate(subdom, filename, dropns) if './' in href: subdom.documentElement.setAttribute('xml:base', href) include.parentNode.replaceChild(subdom.documentElement, include) if __name__ == '__main__': argv = argv[1:] dom = xml.dom.minidom.parse(argv[0]) xincludate(dom, argv[0]) xml = dom.toxml() stdout.write(xml) stdout.write('\n') telepathy-qt-0.9.3/spec/0000755000175200001440000000000012000056607017346 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/spec/Channel_Interface_Tube.xml0000644000175200001440000003361712000056607024411 0ustar00collabora-develusers00000000000000 Copyright © 2008-2009 Collabora Limited Copyright © 2008-2009 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

A tube is a mechanism for arbitrary data transfer between two or more IM users, used to allow applications on the users' systems to communicate without having to establish network connections themselves. Currently, two types of tube exist: Channel.Type.DBusTube and Channel.Type.StreamTube. This interface contains the properties, signals and methods common to both types of tube; you can only create channels of a specific tube type, not of this type. A tube channel contains exactly one tube; if you need several tubes, you have to create several tube channels.

Tube channels can be requested for Handle_Type Contact (for 1-1 communication) or Room (to communicate with others in the room simultaneously).

As an exception to the usual handling of capabilities, connection managers for protocols with capability discovery (such as XMPP) SHOULD advertise the capability representing each Tube type that they support (Channel.Type.DBusTube and/or Channel.Type.StreamTube) even if no client has indicated via UpdateCapabilities that such a tube is supported. They SHOULD also allow clients to offer tubes with any Service or ServiceName to any contact which supports the corresponding tube capability.

This lowers the barrier to entry for those writing new tube applications, and preserves interoperability with older versions of the Telepathy stack which did not support rich capabilities.

Each tube has a dictionary of arbitrary parameters. Parameters are commonly used to bootstrap legacy protocols where you can't negotiate parameters in-band. The allowable keys, types and values are defined by the service, but connection managers must support the value being a string (D-Bus type 's'), array of bytes (D-Bus type 'ay'), unsigned integer (D-Bus type 'u'), integer (D-Bus type 'i') and boolean (D-Bus type 'b').

When the tube is offered, the parameters are transmitted with the offer and appear as a property of the incoming tube for other participants.

For example, a stream tube for Service "smb" (Server Message Block over TCP/IP) might use the following properties, as defined in DNS SRV (RFC 2782) Service Types:

{ 'u': 'some-username',
  'p': 'top-secret-password',
  'path': '/etc/passwd',
}

When requesting a tube with CreateChannel, this property MUST NOT be included in the request; instead, it is set when StreamTube.Offer or DBusTube.Offer (as appropriate) is called. Its value is undefined until the tube is offered; once set, its value MUST NOT change.

When receiving an incoming tube, this property is immutable and so advertised in the NewChannels signal.

State of the tube in this channel.

When requesting a tube with CreateChannel, this property MUST NOT be included in the request.

The initiator offered the tube. The tube is waiting to be accepted/closed locally. If the client accepts the tube, the tube's state will be Open. The tube is waiting to be accepted/closed remotely. If the recipient accepts the tube, the tube's state will be Open. The initiator offered the tube and the recipient accepted it. The tube is open for traffic. The tube's state stays in this state until it is closed. The tube channel has been requested but the tube is not yet offered. The client should offer the tube to the recipient and the tube's state will be Remote_Pending. The method used to offer the tube depends on the tube type. Emitted when the state of the tube channel changes. Valid state transitions are documented with Tube_Channel_State. The new state of the tube. A Unix socket. The address variant contains a byte-array, signature 'ay', containing the path of the socket. An abstract Unix socket. The address variant contains a byte-array, signature 'ay', containing the path of the socket including the leading null byte. An IPv4 socket. The address variant contains a Socket_Address_IPv4, i.e. a structure with signature (sq) in which the string is an IPv4 dotted-quad address literal (and must not be a DNS name), while the 16-bit unsigned integer is the port number. An IPv6 socket. The address variant contains a Socket_Address_IPv6, i.e. a structure with signature (sq) in which the string is an IPv6 address literal as specified in RFC2373 (and must not be a DNS name), while the 16-bit unsigned integer is the port number.

The IP or Unix socket can be accessed by any local user (e.g. a Unix socket that accepts all local connections, or an IP socket listening on 127.0.0.1 (or ::1) or rejecting connections not from that address). The associated variant must be ignored.

For a D-Bus tube, this means that the "same user" access control typically provided by default in D-Bus implementations SHOULD be disabled. If the socket is only available to local users (e.g. a Unix socket, an IPv4 socket bound to 127.0.0.1, or an IPv6 socket bound to ::1), the ANONYMOUS authentication mechanism MAY be enabled.

May only be used on IP sockets, and only for Stream tubes. The associated variant must contain a struct Socket_Address_IPv4 (or Socket_Address_IPv6) containing the string form of an IP address of the appropriate version, and a port number. The socket can only be accessed if the connecting process has that address and port number; all other connections will be rejected. This has never been implemented. If you want to share a service to your whole LAN, Telepathy is not the way to do it. May only be used on IP sockets. The associated variant must contain a struct Socket_Netmask_IPv4 (or Socket_Netmask_IPv6) with signature (sy), containing the string form of an IP address of the appropriate version, and a prefix length "n". The socket can only be accessed if the first n bits of the connecting address match the first n bits of the given address.

The high-level meaning of this access control type is that only the same user (e.g. same numeric Unix uid) is allowed to interact with the tube. Exactly how this is achieved varies by channel type.

For StreamTube channels, this access control type may only be used on UNIX sockets. The connecting process must send a byte when it first connects, which is not considered to be part of the data stream. If the operating system uses sendmsg() with SCM_CREDS or SCM_CREDENTIALS to pass credentials over sockets, the connecting process must do so if possible; if not, it must still send the byte, without any attached credentials. (This mechanism is very similar to the first byte of a D-Bus connection, except that in D-Bus the byte is always zero, whereas in Tubes it can be nonzero.)

For DBusTube channels, this access control type may be used on any type of socket, and there is no extra byte added by Telepathy at the beginning of the stream: all bytes in the stream are part of the D-Bus tube connection. The connecting process should prove its identity via any of the SASL authentication mechanisms usually used for D-Bus (in typical D-Bus implementations this involves either sending and receiving credentials as above, or demonstrating the ability to write to a file in the user's home directory).

In either case, the listening process will disconnect the connection unless it can determine by OS-specific means that the connecting process has the same user ID as the listening process.

In either tube type, the associated variant must be ignored.

telepathy-qt-0.9.3/spec/Connection_Interface_Client_Types.xml0000644000175200001440000002201712000056607026633 0ustar00collabora-develusers00000000000000 Copyright (C) 2010 Collabora Ltd.

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API)

An interface on connections to support protocols which allows users to subscribe to the client types of their contacts.

One can connect to instant messaging networks on a huge variety of devices, from PCs, to phones to consoles. It can be useful for users to know what kind of device a contact is using so that he or she can decide not to send that big file or start a video chat. This interface exposes exactly this information for clients to display.

The client types are represented in strings, using the values documented by the XMPP registrar with some additional types added for other protocols. A contact can set one or more client types so this interface returns a list of strings to denote client types for a contact. The well-known client types to be used are:

  • bot
  • console (minimal non-GUI client used on dumb terminals or text-only screens, not a games console)
  • handheld
  • pc
  • phone
  • web

If the empty list is given as the client types, this means that details about the contact's client types are unknown. If there are multiple resources of a contact online at one point in time, the client types of the most available resource will be returned. In other words, the returned client types are those for the resource whose presence will be retreived using the SimplePresence interface.

For example, if a contact has two resources:

  • their phone, with presence "available"; and
  • their pc, with presence "busy";

then the methods in this interface will return an array (with one element: "phone") as the client types because that is the more available resource. If at some later time the contact's phone's presence changes to "away", the ClientTypesUpdated signal will notify that the contact's client types attribute has changed from ["phone"] to ["pc"], because "busy" is a more available presence than "away".

A mapping from contact handle to client types. A contact. The contact's client types as documented earlier in this interface. Return the client types of the given contacts, if they are already known. If any of the given contacts' client types are not known, request their current client types, but return immediately without waiting for a reply; if a reply with a non-empty client type array is later received for those contacts, the ClientTypesUpdated signal will be emitted for them. This method is appropriate for "lazy" client type finding, for instance displaying the client types (if available) of everyone in your contact list. The contacts whose client types should be returned or signalled. The contacts' client types, if already known. Contacts whose client types are not already known are omitted from the mapping; contacts known to have no client type information appear in the mapping with an empty list. Return the current client types of the given contact. If necessary, make a request to the server for up-to-date information, and wait for a reply. This method is appropriate for use in a "Contact Information..." dialog; it can be used to show progress information (while waiting for the method to return), and can distinguish between various error conditions. The contact whose client types should be returned. The contact's client types. It MAY be empty, indicating that no client type information was found. The requested contact does not allow the local user to see their client type information. Emitted when a contact's client types change or become known. The contact. The contact's client types, or an empty list to indicate that nothing is known about the contact's client types.

The same mapping that would be returned by GetClientTypes for this contact. Omitted from the result if the contact's client types are not known.

A string representing a single client type of a contact.
telepathy-qt-0.9.3/spec/Channel_Interface_Service_Point.xml0000644000175200001440000001021012000056607026243 0ustar00collabora-develusers00000000000000 Copyright © 2005-2010 Nokia Corporation Copyright © 2005-2010 Collabora Ltd

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API)

An interface for channels that can indicate when/if they are connected to some form of service point. For example, when dialing 9-1-1 in the US, a GSM modem/network will recognize that as an emergency call, and inform higher levels of the stack that the call is being handled by an emergency service. In this example, the call is handled by a Public Safety Answering Point (PSAP) which is labeled as "urn:service:sos". Other networks and protocols may handle this differently while still using this interface.

Note that while the majority of examples given in this documentation are for GSM calls, they could just as easily be SIP calls, GSM SMS's, etc.

This property is used to indicate that the channel target is a well-known service point. Please note that the CM (or lower layers of the stack or network) may forward the connection to other other service points, which the CM SHOULD indicate via ServicePointChanged signal.

This property SHOULD be set for channel requests that are specifically targeting service points.

The service point that the channel is connected to. If the channel is not connected to a service point, the CM MUST set the Service_Point_Type field to None; for instance, this will be the case for ordinary calls.

Emitted when a channel changes the service point that it's connected to. This might be a new call being connected to a service, a call connected to a service being routed to a different service (ie, an emergency call being routed from a generic emergency PSAP to a poison control PSAP), or any number of other things.

Note that this should be emitted as soon as the CM has been notified of the switch, and has updated its internal state. The CM MAY still be in the process of connecting to the new service point.

The new service point that is being used.
telepathy-qt-0.9.3/spec/Channel_Dispatcher.xml0000644000175200001440000010270612000056607023614 0ustar00collabora-develusers00000000000000 Copyright © 2008-2009 Collabora Ltd. Copyright © 2008-2009 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as a stable interface)

The channel dispatcher is responsible for responding to new channels and launching client processes to handle them. It also provides functionality for client processes to request that new channels are created.

If a channel dispatcher is running, it is responsible for dispatching new channels on all Connections created by the AccountManager. Connections not created by the AccountManager are outside the scope of the channel dispatcher.

Connections created by standalone Telepathy clients that do not intend to interact with the channel dispatcher should be ignored - otherwise, the channel dispatcher would try to launch handlers for channels that the standalone client was already handling internally.

The current channel dispatcher is defined to be the process that owns the well-known bus name org.freedesktop.Telepathy.ChannelDispatcher on the session bus. This process MUST export an object with this interface at the object path /org/freedesktop/Telepathy/ChannelDispatcher.

Until a mechanism exists for making a reasonable automatic choice of ChannelDispatcher implementation, implementations SHOULD NOT register as an activatable service for the ChannelDispatcher's well-known bus name. Instead, it is RECOMMENDED that some component of the user's session will select and activate a particular implementation, and that other Telepathy-enabled programs can detect whether channel request/dispatch functionality is available by checking whether the ChannelDispatcher's well-known name is in use at runtime.

There are three categories of client process defined by this specification:

Observer

Observers monitor the creation of new channels. This functionality can be used for things like message logging. All observers are notified simultaneously.

Approver

Approvers notify the user that new channels have been created, and also select which channel handler will be used for the channel, either by asking the user or by choosing the most appropriate channel handler.

Handler

Each new channel or set of channels is passed to exactly one handler as its final destination. A typical channel handler is a user interface process handling channels of a particular type.

A list of the extra interfaces provided by this channel dispatcher.

Equivalent to calling CreateChannelWithHints with an empty Hints parameter.

The Account for which the new channel is to be created.

A dictionary containing desirable properties.

This parameter is used in the same way as the corresponding parameter to CreateChannelWithHints.

The time at which user action occurred, or 0 if this channel request is for some reason not involving user action.

This parameter is used in the same way as the corresponding parameter to CreateChannelWithHints.

Either the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable.

This parameter is used in the same way as the corresponding parameter to CreateChannelWithHints.

Previously, the spec didn't say that this should disregard the handler's filter. This has been implemented since telepathy-mission-control 5.3.2.
A ChannelRequest object. The Preferred_Handler is syntactically invalid or does not start with org.freedesktop.Telepathy.Client., the Account does not exist, or one of the Requested_Properties is invalid

Equivalent to calling EnsureChannelWithHints with an empty Hints parameter.

The Account for which the new channel is to be created.

A dictionary containing desirable properties.

This parameter is used in the same way as the corresponding parameter to CreateChannelWithHints.

The time at which user action occurred, or 0 if this channel request is for some reason not involving user action.

This parameter is used in the same way as the corresponding parameter to CreateChannelWithHints.

Either the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable. The behaviour and rationale are the same as for the corresponding parameter to EnsureChannelWithHints.

A ChannelRequest object. The Preferred_Handler is syntactically invalid or does not start with org.freedesktop.Telepathy.Client., the Account does not exist, or one of the Requested_Properties is invalid
Support for this method is indicated by the SupportsRequestHints property. Clients MUST recover from this method being unsupported by falling back to CreateChannel.

Start a request to create a channel. This initially just creates a ChannelRequest object, which can be used to continue the request and track its success or failure.

The request can take a long time - in the worst case, the channel dispatcher has to ask the account manager to put the account online, the account manager has to ask the operating system to obtain an Internet connection, and the operating system has to ask the user whether to activate an Internet connection using an on-demand mechanism like dialup.

This means that using a single D-Bus method call and response to represent the whole request will tend to lead to that call timing out, which is not the behaviour we want.

If this method is called for an Account that is disabled, invalid or otherwise unusable, no error is signalled until ChannelRequest.Proceed is called, at which point ChannelRequest.Failed is emitted with an appropriate error.

This means there's only one code path for errors, apart from InvalidArgument for "that request makes no sense".

It also means that the request will proceed if the account is enabled after calling CreateChannel, but before calling Proceed.

The Account for which the new channel is to be created.

A dictionary containing desirable properties. This has the same semantics as the corresponding parameter to Connection.Interface.Requests.CreateChannel.

Certain properties will not necessarily make sense in this dictionary: for instance, TargetHandle can only be given if the requester is able to interact with a Connection to the desired account.

The time at which user action occurred, or 0 if this channel request is for some reason not involving user action. The UserActionTime property will be set to this value, and it will eventually be passed as the User_Action_Time parameter of HandleChannels.

Either the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable. The channel dispatcher SHOULD dispatch as many as possible of the resulting channels (ideally, all of them) to that handler—irrespective of whether that handler's HandlerChannelFilter matches the channel—and SHOULD remember the preferred handler so it can try to dispatch subsequent channels in the same bundle to the same handler.

This must be the well-known bus name, not the unique name, to ensure that all handlers do indeed have the Client API, and the Client object on the handler can be located easily.

This is partly so the channel dispatcher can call HandleChannels on it, and partly so the channel dispatcher can recover state if it crashes and is restarted.

The filter should be disregarded for ease of use of this interface: clients will usually use this argument to request channels be sent to themself, and this should trump the filter not matching. This also allows a client to become the handler for a channel produced by one of its own requests, while not being a candidate to handle other channels of that type.

If this is a well-known bus name and the handler has the Requests interface, the channel dispatcher SHOULD call AddRequest on that Handler after this method has returned.

This ordering allows a Handler which calls CreateChannel with itself as the preferred handler to associate the call to AddRequest with that call.

This is copied to the ChannelRequest that is returned, as the PreferredHandler property.

Previously, the spec didn't say that this should disregard the handler's filter. This has been implemented since telepathy-mission-control 5.3.2.

Additional information about the channel request, which will be used as the value for the resulting request's Hints property.

See the Hints property's documentation for rationale.

A ChannelRequest object. The Preferred_Handler is syntactically invalid or does not start with org.freedesktop.Telepathy.Client., the Account does not exist, or one of the Requested_Properties is invalid
Support for this method is indicated by the SupportsRequestHints property. Clients MUST recover from this method being unsupported by falling back to EnsureChannel.

Start a request to ensure that a channel exists, creating it if necessary. This initially just creates a ChannelRequest object, which can be used to continue the request and track its success or failure.

If this method is called for an Account that is disabled, invalid or otherwise unusable, no error is signalled until ChannelRequest.Proceed is called, at which point ChannelRequest.Failed is emitted with an appropriate error.

The rationale is as for CreateChannelWithHints.

The Account for which the new channel is to be created.

A dictionary containing desirable properties. This has the same semantics as the corresponding parameter to Connection.Interface.Requests.EnsureChannel.

Certain properties will not necessarily make sense in this dictionary: for instance, TargetHandle can only be given if the requester is able to interact with a Connection to the desired account.

The time at which user action occurred, or 0 if this channel request is for some reason not involving user action.

This parameter is used in the same way as the corresponding parameter to CreateChannelWithHints.

Either the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable. The behaviour and rationale are the same as for the corresponding parameter to CreateChannelWithHints, except as noted here.

If any new channels are created in response to this request, the channel dispatcher SHOULD dispatch as many as possible of the resulting channels (ideally, all of them) to that handler, and SHOULD remember the preferred handler so it can try to dispatch subsequent channels in the same bundle to the same handler. If the requested channel already exists (that is, Connection.Interface.Requests.EnsureChannel returns Yours=False) then the channel dispatcher SHOULD re-dispatch the channel to its existing handler, and MUST NOT dispatch it to this client (unless it is the existing handler); the request is still deemed to have succeeded in this case.

An address book application, for example, might call EnsureChannel to ensure that a text channel with a particular contact is displayed to the user; it does not care whether a new channel was made. An IM client might call EnsureChannel in response to the user double-clicking an entry in the contact list, with itself as the Preferred_Handler; if the user already has a conversation with that contact in another application, they would expect the existing window to be presented, rather than their double-click leading to an error message. So the request should succeed, even if its Preferred_Handler is not used.

Additional information about the channel request, which will be used as the value for the resulting request's Hints property. A ChannelRequest object. The Preferred_Handler is syntactically invalid or does not start with org.freedesktop.Telepathy.Client., the Account does not exist, or one of the Requested_Properties is invalid
Implemented since telepathy-mission-control 5.7.12. This method now returns Delegated and Not_Delegated instead of nothing. HandleChannels is now called once per Channel in Channels.

Called by a Handler to redispatch a bunch of channels it is currently handling.

For each Channel in Channels, if another Handler can be found, HandleChannels will be called on it until a Handler accepts it.

This method returns once all the Channels have either been accepted or rejected by Handlers.

If this method fails, the original Handler is still handling the channels.

The list of channels to redispatch. The caller has to be the current Handler of all of these channels

The time at which user action occurred, or 0 if this channels delegation is for some reason not involving user action.

This parameter is used in the same way as the corresponding parameter to CreateChannelWithHints.

Either the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred new handler for these channels, or an empty string to indicate that any handler would be acceptable. The behaviour and rationale are the same as for the corresponding parameter to CreateChannelWithHints.

The list of channels which have been delegated; the caller is no longer handling these channels.

The client should remove these channels from its HandledChannels property.

The list of channels which have NOT been delegated; the caller is still handling these channels.

The Preferred_Handler is syntactically invalid or does not start with org.freedesktop.Telepathy.Client.. At least one Channel in Channels is not currently handled by the caller. No Channel has been delegated.
A mapping associating not delegated channel with an error. The path of the channel An error describing why the channel has not be delegated the name of a D-Bus error describing what went wrong. a human-readable informative error message. Implemented since telepathy-mission-control 5.7.12.

Equivalent of calling EnsureChannel with a Requested_Properties which would result in ensuring Channel.

If Channel is handled, its handler will be asked to present it the user (e.g. bring it into the foreground).

The channel to present.

The time at which user action occurred, or 0 if this channel request is for some reason not involving user action.

This parameter is used in the same way as the corresponding parameter to EnsureChannelWithHints.

The Account does not exist, the Channel does not exist or it does not belong to the Account.
If True, the channel dispatcher is new enough to support CreateChannelWithHints and EnsureChannelWithHints, in addition to the older CreateChannel and EnsureChannel methods, and also new enough to emit SucceededWithChannel before the older Succeeded signal. If False or missing, only the metadata-less variants are supported.
telepathy-qt-0.9.3/spec/Call_Stream_Endpoint.xml0000644000175200001440000003764612000056607024136 0ustar00collabora-develusers00000000000000 Copyright © 2009-2010 Collabora Ltd. Copyright © 2009-2010 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API)

This object represents an endpoint for a stream. In a one-to-one call, there will be one (bidirectional) stream per content and one endpoint per stream (as there is only one remote contact). In a multi-user call there is a stream for each remote contact and each stream has one endpoint as it refers to the one physical machine on the other end of the stream.

The multiple endpoint use case appears when SIP call forking is used. Unlike jingle call forking (which is just making multiple jingle calls to different resources appear as one call), SIP call forking is actually done at the server so you have one stream to the remote contact and then and endpoint for each SIP client to be called.

The ICE credentials used for all candidates. If each candidate has different credentials, then this property SHOULD be ("", ""). Per-candidate credentials are set in the Candidate's Candidate_Info a{sv}. The username set. The password set. Emitted when the remote ICE credentials for the endpoint are set. If each candidate has different credentials, then this signal will never be fired. A list of candidates for this endpoint. Emitted when remote candidates are added to the RemoteCandidates property. The candidates that were added. A Pair of candidates. The local candidate. The remote candidate. Emitted when a candidate is selected for use in the stream by the controlling side of an ICE session. The controlled side should call AcceptSelectedCandidatePair or RejectSelectedCandidatePair when connectivity checks have either succeeded or failed for this candidate pair. See also: SelectedCandidatePairs. The local candidate that has been selected. The remote candidate that has been selected.

The candidates that have been selected for use to stream packets to the remote contact for each component of the stream. Change notification is given via the the CandidatePairSelected signal.

Note to client implementors (from RFC 5245 section 9.2.2.3):

If at least one of the pairs is In-Progress, the agent SHOULD wait for those checks to complete, and as each completes, redo the processing in this section until there are no losing pairs.

Also note that some or all of the local candidates in this list may represent a peer-reflexive candidate that do not appear in LocalCandidates.

See RFC 5245 Appendix B.6. for more details about why this is.

Update the entry in SelectedCandidatePairs for a particular component, and signal it to the remote side.

This method should only be called by the controlling side of an ICE session. See CandidatePairSelected for details.

In the SDP offer/answer model, this signalling will take place as generating an updated offer. Note that updates may be queued up until information about all components of all streams is gathered.

The local candidate that has been selected. The remote candidate that has been selected.
Represents the state of ICE negotiation for a single component of a stream to an endpoint. Candidate gathering and connectivity checks are in progress. The streaming implementation has found at least one working candidate pair. It is possible to send media at this point, but the controlling side has yet to negotiate the final candidates for use in this call. This component of the stream is connected, and an updated offer has been sent and accepted (finalising the candidates to be used for the call). This should be set by the CM in response to AcceptSelectedCandidatePair. The streaming implementation has tried connecting to all of the available candidates and none of them have connected. This is distinct from Failed, because the CM might be able to provide more candidates later (more likely in XMPP than SIP). The CM and streaming implementation are in agreement that it is impossible to connect to this endpoint. This value should only be set by the CM. The state of ICE negotiation with this Endpoint for each component of the stream. Emitted when the EndpointState property changes. The component whose state has changed. The new state of this component. Change the EndpointState of the endpoint. The component whose state needs updating. The new state of this component. Called in response to CandidatePairSelected if/when this candidate pair is known to have passed its connectivity checks. The local candidate that has been selected. The remote candidate that has been selected. Called in response to CandidatePairSelected if/when this candidate pair is known to have failed its connectivity checks. The local candidate that has been selected. The remote candidate that has been selected. The transport type for the stream endpoint. This can be different from the transport of the Stream in the case where of falling back from ICE to Raw_UDP.

The local side is taking the controlling role (as defined by ICE RFC 5245). Change notification is given via the ControllingChanged signal.

In ICE, the Caller is normally in controlling mode (and the Callee in controlled-mode), except if the Caller is doing ICE-Lite, in which case it's reversed. The Controlling side is responsible for selecting nominated pairs, and generating updated offers upon conclusion of ICE.
Set whether the local side is taking the Controlling role. Note that if there are multiple endpoints (e.g. SIP call forking) it may be the case that all endpoints need to have the same controlling/controlled orientation. The new value of Controlling. The value of Controlling has changed. The new value of Controlling. The Remote side is an ICE Lite endpoint. (The local side is assumed to always be an ICE Full implementation.)
telepathy-qt-0.9.3/spec/Properties_Interface.xml0000644000175200001440000002164512000056607024214 0ustar00collabora-develusers00000000000000 Copyright (C) 2005-2007 Collabora Limited Copyright (C) 2005, 2006 Nokia Corporation Copyright (C) 2006 INdT

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

All uses of this interface have been expunged, and it may now be laid to rest. A struct (property ID, property name, D-Bus signature, flags) representing a property, as returned by ListProperties on the Properties interface. A struct (property ID, flags) representing a change to a property's flags, as seen in the PropertyFlagsChanged signal on the Properties interface. An unsigned integer used to represent a Telepathy property. A struct (property ID, value) representing a property's value, as seen in the PropertiesChanged signal on the Properties interface, returned by the GetProperties method and passed to the SetProperties method. Returns an array of (identifier, value) pairs containing the current values of the given properties. An array of property identifiers

An array of structs containing:

  • integer identifiers
  • variant boxed values
Some property identifier requested is invalid Some property requested does not have the PROPERTY_FLAG_READ flag
Returns a dictionary of the properties available on this channel. An array of structs containing:
  • an integer identifier
  • a string property name
  • a string representing the D-Bus signature of this property
  • a bitwise OR of the flags applicable to this property
Emitted when the value of readable properties has changed.

An array of structs containing:

  • integer identifiers
  • variant boxed values

The array should contain only properties whose values have actually changed.

Emitted when the flags of some room properties have changed.

An array of structs containing:

  • integer identifiers
  • a bitwise OR of the current flags

The array should contain only properties whose flags have actually changed.

Takes an array of (identifier, value) pairs containing desired values to set the given properties. In the case of any errors, no properties will be changed. When the changes have been acknowledged by the server, the PropertiesChanged signal will be emitted.

All properties given must have the PROPERTY_FLAG_WRITE flag, or PermissionDenied will be returned. If any variants are of the wrong type, NotAvailable will be returned. If any given property identifiers are invalid, InvalidArgument will be returned.

An array mapping integer property identifiers to boxed values

Interface for channels and other objects, to allow querying and setting properties. ListProperties returns which properties are valid for the given channel, including their type, and an integer handle used to refer to them in GetProperties, SetProperties, and the PropertiesChanged signal. The values are represented by D-Bus variant types, and are accompanied by flags indicating whether or not the property is readable or writable.

Each property also has a flags value to indicate what methods are available. This is a bitwise OR of PropertyFlags values.

The property can be read The property can be written
telepathy-qt-0.9.3/spec/Channel_Interface_Picture.xml0000644000175200001440000001740312000056607025120 0ustar00collabora-develusers00000000000000 Copyright © 2011 Collabora Ltd.

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

An interface channels can implement to support a picture. Most of the time this will be implemented by channels implementing the Room2 interface. Note that this interface is not restricted to Text channels, and can also be used on Call channels.

This is a separate interface from RoomConfig1 because (a) it's possible some protocol might support pictures for 1:1 chats; and (b) it avoids downloading an unwanted picture in a GetAll request.
The new picture. The MIME type.

Set the room's picture. Clients SHOULD look at the picture flags before calling this method as the user might not have permission to set the picture.

A successful return of this method indicates a successful change in picture, but clients should still listen for changes to the Picture property for further changes by other users or the server.

Picture is somehow invalid: e.g. unsupported MIME type, too big, etc.

The picture representing this channel.

This property may change during the lifetime of the channel and MUST not be included in a channel request.

The normalized contact ID representing who last modified the picture, or the empty string if it is not known.

The handle corresponding to Actor, or 0 if the Actor is unknown.

A unix timestamp indicating when the picture was last modified, or INT_MAX64 if unknown.

TRUE if the Picture property can be set by the user by calling SetPicture, otherwise FALSE.

If implementations are unsure of what this value should be it SHOULD still be set to what it believes the value is. As a result, clients should be aware that SetPicture can still fail even with this property set to TRUE.

An array of supported MIME types (e.g. "image/jpeg"). Clients MAY assume that the first type in this array is preferred. The minimum height in pixels of the picture, which MAY be 0. The minimum width in pixels of the picture, which MAY be 0. The recommended height in pixels of the picture, or 0 if there is no preferred height. The recommended width in pixels of the picture, or 0 if there is no preferred width. The maximum height in pixels of the picture, or 0 if there is no limit. The maximum width in pixels of the picture, or 0 if there is no limit. The maximum size in bytes of the picture, or 0 if there is no limit.
telepathy-qt-0.9.3/spec/Account.xml0000644000175200001440000010264412000056607021473 0ustar00collabora-develusers00000000000000 Copyright © 2008-2012 Collabora Ltd. Copyright © 2008-2009 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

An Account object encapsulates the necessary details to make a Telepathy connection.

Accounts are uniquely identified by object path. The object path of an Account MUST take the form /org/freedesktop/Telepathy/Account/cm/proto/acct, where:

  • cm is the same Connection_Manager_Name that appears in the connection manager's well-known bus name and object path
  • proto is the Protocol name as seen in ConnectionManager.ListProtocols, but with "-" replaced with "_" (i.e. the same as in the object-path of a Connection)
  • acct is an arbitrary string of ASCII letters, digits and underscores, starting with a letter or underscore, which uniquely identifies this account
  • Clients SHOULD parse the object path to discover the connection manager and protocol
  • Clients MUST NOT attempt to parse acct
  • Clients MUST NOT assume that acct matches the connection-specific part of a Connection's object-path and bus name
  • The account manager SHOULD choose acct such that if an account is deleted, its object path will be re-used if and only if the new account is in some sense "the same" (incorporating the 'account' parameter in some way is recommended)

This API avoids specifying the "profiles" used in Mission Control 4.x or the "presets" that have been proposed to replace them. An optional interface will be provided for AM implementations that want to provide presets.

There is deliberately no functionality here for opening channels; we intend to provide that in the channel dispatcher.

Other missing features which would be better in their own interfaces:

  • dynamic parameter-providing (aka provisioning)
  • saved server capabilities
  • account conditions
  • account grouping
moved the Avatar property to a separate interface A list of the extra interfaces provided by this account. Delete the account. This account has been removed. This is redundant with AccountRemoved, but it's still worth having, to avoid having to bind to AccountManager.AccountRemoved to tell you whether your Account is valid — ideally, an account-editing UI should only care about a single Account. The values of one or more properties on this interface (that do not specify that this signal does not apply to them) may have changed. This does not cover properties of other interfaces, which must provide their own change notification if appropriate. A map from property names in this namespace (e.g. Nickname) to values. Properties whose values have not changed SHOULD be omitted, but this need not be done. The user-visible name of this account. This SHOULD be chosen by the user at account creation time. The account creation user interface is responsible for setting a reasonable default value in the user's locale; something like "Jabber (bob@example.com)" would be sensible. The name of an icon in the system's icon theme, such as "im-msn", or the empty string to not specify an icon. If the icon is set to an empty string, the account manager or any client MAY derive a default icon, for instance from the protocol. If true, this account is considered by the account manager to be complete and usable. If false, user action is required to make it usable, and it will never attempt to connect (for instance, this might be caused by the absence of a required parameter). For connection managers with a plugin architecture, like telepathy-haze, we have little or no control over the parameters offered; for platforms with package management, we have little or no control over the CMs offered. NMC 4.x would just pretend the account didn't exist in these circumstances, but silent data loss is bad, and UIs with CM-specific knowledge (or a user filling in newly-required parameters) might be able to rescue a broken account.

This property gives the users the possibility to prevent an account from being used. This flag does not change the validity of the account.

A disabled account can never be put online.

Use cases:

  • user has two or more accounts capable of calling contact X, but he doesn't want the UI to prompt him everytime about which one he wants to use for the call. He can then disable all the equivalent accounts but one.
  • There is some temporary server error and the user doesn't want to be be bother by error messages, or change the account configuration: temporarily disabling the account is quicker.

The AccountManager SHOULD allow this property to be set on invalid accounts, but MUST NOT attempt to put invalid accounts online even if they become Enabled.

There doesn't seem to be any good reason not to allow this.

The nickname to set on this account for display to other contacts, as set by the user. When the account becomes connected, the account manager SHOULD set this as the user's alias using SetAliases if appropriate. In a later specification revision, we plan to separate the concepts of a contact's nickname as set by themselves, and the local name for them in our contact list (a "handle" or "pet name" as described in XEP-0165 and its references). The terminology change from alias to nickname here is a step in that direction.

Some protocols, like XMPP and SIP, are used by various different user-recognised brands, such as Google Talk and Ovi by Nokia. On accounts for such services, this property SHOULD be set to a string describing the service, which MUST consist only of ASCII letters, numbers and hyphen/minus signs, and start with a letter (matching the requirements for Protocol). For the jabber protocol, one of the following service names should be used if possible:

For the IRC protocol, the network name (freenode, gimpnet, etc.) can be used if relevant.

The Icon property SHOULD be set to a corresponding brand-specific icon name, if possible. In the future, this property may be used as an index into additional service-specific customizations. If this property is the empty string (or missing), the service is determined by the protocol name (either because this is a single-service protocol like msn, or because this is just a generic jabber or sip account without specific branding).

This property MAY be set, if appropriate, when calling CreateAccount. Updating this property will fail on externally-stored accounts whose StorageRestrictions include Cannot_Set_Service.

A map from connection manager parameter names (as in the ConnectionManager interface) to their values. This property includes only those parameters that are stored for this account, and SHOULD only include those parameters that the user has explicitly set.

This property cannot be altered using org.freedesktop.DBus.Properties.Set(); use UpdateParameters instead.

Change the value of the Parameters property.

If any of the Set parameters’ Conn_Mgr_Param_Flags include DBus_Property, the change will be applied immediately to the corresponding D-Bus Property on the active Connection, if there is one. If any of the Unset parameters’ Conn_Mgr_Param_Flags include both DBus_Property and Has_Default, the corresponding D-Bus Property on the connection will be set to the default value. Changes to other parameters will not take effect until the next time the account is disconnected and reconnected. (If parameters are explicitly set to their default value, or are unset when previously set to their default value, the account manager MAY decide that no reconnection is necessary to make the change take effect.)

In general, reconnecting is a destructive operation that shouldn't happen as a side-effect. In particular, migration tools that twiddle the settings of all accounts shouldn't cause an automatic disconnect and reconnect.

parameters which are also D-Bus properties can and should be updated on existing Connections return an array of the parameters that won't change until the account is reconnected A mapping from parameter names to their values. These parameters should be stored for future use. A list of the names of parameters to be removed from the set of stored values, allowing the default values to be used. If the given parameters were not, in fact, stored, or even if they do not exist at all, the account manager MUST accept this without error.

If all of the updates could be applied to the active Connection (if any), the empty list, signifying that no reconnection is required for the new parameters to take effect. For example, if the only parameter updated is ...Cellular.MessageValidityPeriod, the new value can be applied immediately to the connection.

Otherwise, a list of the names of parameters with changes that will not take effect until the account is reconnected. User interfaces that require "instant apply" semantics MAY call Reconnect in response to receiving a non-empty list. For example, if the caller updates both ...Anonymity.AnonymityMandatory and require-encryption, the former can be applied to the current connection, but the latter needs a reconnect to take effect, so this method should return ["require-encryption"].

The presence status that this account should have if it is brought online.

In ITOS2007 and ITOS2008 this is a global preference, not visible on D-Bus (the "default presence"). "Automatic presence" better describes when it is used.

Setting this property MUST NOT actually change the account's status until the next time it is (re)connected for some reason.

The value of this property MUST be one that would be acceptable for RequestedPresence, with the additional restriction that the Connection_Presence_Type MUST NOT be Offline.

Otherwise, it would not be possible to use this presence to bring the account online for a channel request.

If true, the account manager SHOULD attempt to put this account online with the AutomaticPresence whenever possible (in the base Account interface this is deliberately left vague). If false, it MUST NOT put the account online automatically in response to, for instance, connectivity changes, but SHOULD still put the account online with the AutomaticPresence if requested by the user (for instance, if the user tries to start a conversation using this account).

Either the object path of the Connection to this account, or the special value '/' if there is no connection.

If this object path is not '/', the Connection's well-known bus name can be derived from this object path by removing the first '/' and replacing subsequent '/' characters with '.'.

Object paths aren't nullable, so we can't use an empty string.
If the Connection property is non-empty, the status of that connection. If the Connection property is the empty string, this property may either be Disconnected (indicating that the account manager is not attempting to bring it online), or Connecting (indicating that the account manager is attempting to connect). The account manager is expected to set this by observing signals from the Connection. If the AM is doing some sort of backoff/delay on reconnection attempts, the account's status is conceptually "Connecting" even though there is no Connection. The reason for the last change to ConnectionStatus. The account manager is expected to set this by observing signals from the Connection. If you weren't watching the Connection at the time it failed, you can't tell why - unless the AM can tell you.

If the last connection to this account failed with an error, the D-Bus error name of that error; otherwise, the empty string. The account manager is expected to set this by observing the Connection.ConnectionError and Connection.StatusChanged signals.

If ConnectionError is received before the connection disconnects, its first argument should be used to set this property; otherwise, the Reason argument of StatusChanged should be converted to a suitable D-Bus error name.

Whenever the Connection connects successfully, this property should be reset to the empty string.

This combines the state-recoverability of ConnectionStatusReason with the extensibility of Connection.ConnectionError.

If the last connection to this account failed with an error, a mapping representing any additional information about the last disconnection; otherwise, the empty map. The keys and values are the same as for the second argument of Connection.ConnectionError.

Whenever the Connection connects successfully, this property should be reset to the empty map.

This combines the state-recoverability of ConnectionStatusReason with the extensibility of Connection.ConnectionError.

The actual presence. If the connection is not online, the Connection_Presence_Type SHOULD be Connection_Presence_Type_Offline. If the connection is online but does not support the SimplePresence interface, the type SHOULD be Connection_Presence_Type_Unset. The account manager is expected to set this by observing signals from the Connection.

The requested presence for this account. When this is changed, the account manager should attempt to manipulate the connection manager to make CurrentPresence match RequestedPresence as closely as possible. It should not be saved to any sort of persistent storage.

When the account manager automatically connects an account, it must signal this by setting the RequestedPresence to the same thing as the AutomaticPresence.

The Connection_Presence_Type in this property MUST NOT be Unset, Unknown or Error.

Requesting those presence types doesn't make sense.

If true, a change to the presence of this account is in progress.

Whenever RequestedPresence is set on an account that could go online, or whenever an account with a non-offline RequestedPresence becomes able to go online (for instance because Enabled or Valid changes to True), ChangingPresence MUST change to True, and the two property changes MUST be emitted in the same AccountPropertyChanged signal, before the Set method returns.

When the account manager succeeds or fails in changing the presence, or the connection disconnects due to an error, ChangingPresence MUST change to False as part of the same AccountPropertyChanged signal.

This allows UIs to indicate that a presence change is in progress or has finished, even if the change was initiated by a different UI.

For instance, Maemo 5 and Empathy indicate a presence change by having the presence indicator alternate between the RequestedPresence and the CurrentPresence; they should start blinking when ChangingPresence becomes true, and stop when it becomes false.

Re-connect this account. If the account is currently disconnected and the requested presence is offline, or if the account is not Enabled or not Valid, this does nothing.

If the account is disconnected and the requested presence is not offline, this forces an attempt to connect with the requested presence immediately.

If the account is connecting or connected, this is equivalent to remembering the current value of RequestedPresence, setting its value to (OFFLINE, "offline", ""), waiting for the change to take effect, then setting its value to the value that was previously remembered.

Clients desiring "instant apply" semantics for CM parameters MAY call this method to achieve that.

In particular, if the account's Connection is in the Connecting state, calling this method causes the attempt to connect to be aborted and re-tried.

This is necessary to ensure that the new parameters are picked up.

The normalized user ID of the local user on this account (i.e. the string returned when the InspectHandles method is called on the result of GetSelfHandle for an active connection).

It is unspecified whether this user ID is globally unique.

As currently implemented, IRC user IDs are only unique within the same IRCnet. On some saner protocols, the user ID includes a DNS name which provides global uniqueness.

If this value is not known yet (which will always be the case for accounts that have never been online), it will be an empty string.

It is possible that this value will change if the connection manager's normalization algorithm changes, although this SHOULD be avoided.

It's not always completely clear what normalization algorithm should be used; for instance, in Gabble, we currently use JIDs, but it would also have been reasonable to use xmpp URIs.

If true, this account has successfully been put online at some point in the past. UIs could apply a policy that the 'account' parameter can only be edited in accounts that have never been online, or that ConnectAutomatically cannot be set on such accounts. The account manager should not enforce such policies, but it can expose enough information to UIs that the UI can decide what to do.

A list of the object paths of formerly-used accounts which are superseded by this one.

For instance, if an account is migrated from one connection manager implementation to another, or even from one protocol to another (for instance formerly-proprietary services which can now be accessed via XMPP), log storage services could look for logs under all of the superseded object paths as well as the new object path.

This is a list because a single user-visible account could be migrated more than once.

If the Account Manager implementation performs an account migration automatically, it SHOULD set this property. If a client performs an account migration, it SHOULD set this property via via the Properties argument of CreateAccount when creating the migrated account. In either case, the value SHOULD include the old account's path, and every path from the old account's Supersedes property.

telepathy-qt-0.9.3/spec/Call_Content_Media_Description_Interface_RTCP_Feedback.xml0000644000175200001440000000525212000056607032457 0ustar00collabora-develusers00000000000000 Copyright © 2005-2010 Nokia Corporation Copyright © 2005-2010 Collabora Ltd 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 Street, Fifth Floor, Boston, MA 02110-1301, USA. (as stable API)

This codec offer interface provides a method of signalling support for RTCP feedback, documented by Extended RTP Profile for Real-time Transport Control Protocol (RTCP)-Based Feedback (RTP/AVPF) (RFC 4585).

The codec identifiers used in the description of the Feedback Messages sent in the Accept's should match those used for the RemoteCodecs in the same Accept call.

For more details on what RTCP Feedback can do and how to use it, one should refer to RFC 4585.

A map of remote feedback codec properties that are supported. True if the remote contact supports Audio-Visual Profile Feedback (AVPF), otherwise False.
telepathy-qt-0.9.3/spec/Channel_Interface_Group.xml0000644000175200001440000016066512000056607024612 0ustar00collabora-develusers00000000000000 Copyright © 2005-2009 Collabora Limited Copyright © 2005-2009 Nokia Corporation Copyright © 2006 INdT

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

A structure representing a contact whose attempt to join a group is to be confirmed by the local user using AddMembers. The contact to be added to the group The contact requesting or causing the change The reason for the change A human-readable message from the Actor, or an empty string if there is no message An array of contact handles to invite to the channel A string message, which can be blank if desired

Invite all the given contacts into the channel, or accept requests for channel membership for contacts on the pending local list.

A message may be provided along with the request, which will be sent to the server if supported. See the CHANNEL_GROUP_FLAG_MESSAGE_ADD and CHANNEL_GROUP_FLAG_MESSAGE_ACCEPT GroupFlags to see in which cases this message should be provided.

Attempting to add contacts who are already members is allowed; connection managers must silently accept this, without error.

Use GetAll on the D-Bus Properties D-Bus interface to get properties including Members, RemotePendingMembers and LocalPendingMembers instead, falling back to this method and GetLocalPendingMembersWithInfo if necessary. array of handles of current members array of handles of local pending members array of handles of remote pending members Returns arrays of all current, local and remote pending channel members. The AddMembers method can be used to add or invite members who are not already in the local pending list (which is always valid). The RemoveMembers method can be used to remove channel members (removing those on the pending local list is always valid). The RemoveMembers method can be used on people on the remote pending list. A message may be sent to the server when calling AddMembers on contacts who are not currently pending members. A message may be sent to the server when calling RemoveMembers on contacts who are currently channel members. A message may be sent to the server when calling AddMembers on contacts who are locally pending. A message may be sent to the server when calling RemoveMembers on contacts who are locally pending. A message may be sent to the server when calling RemoveMembers on contacts who are remote pending.

The members of this group have handles which are specific to this channel, and are not valid as general-purpose handles on the connection. Depending on the channel, it may be possible to check the HandleOwners property or call GetHandleOwners to find the owners of these handles, which should be done if you wish to (e.g.) subscribe to the contact's presence.

Connection managers must ensure that any given handle is not simultaneously a general-purpose handle and a channel-specific handle.

Placing a contact in multiple groups of this type is not allowed and will raise NotAvailable (on services where contacts may only be in one user-defined group, user-defined groups will have this flag). In rooms with channel specific handles (ie Channel_Specific_Handles flag is set), this flag indicates that no handle owners are available, apart from the owner of the SelfHandle. This used to be an important optimization to avoid repeated GetHandleOwners calls, before we introduced the HandleOwners property and HandleOwnersChanged signal. This flag indicates that all the properties introduced in specification 0.17.6 are fully supported. Indicates that MembersChangedDetailed will be emitted for changes to this group's members in addition to MembersChanged. Clients can then connect to the former and ignore emission of the latter. This flag's state MUST NOT change over the lifetime of a channel. If it were allowed to change, client bindings would have to always connect to MembersChanged just in case the flag ever went away (and generally be unnecessarily complicated), which would mostly negate the point of having this flag in the first place. A message may be sent to the server when calling RemoveMembers on the SelfHandle. This would be set for XMPP Multi-User Chat or IRC channels, but not for a typical implementation of streamed media calls.
An integer representing the bitwise-OR of flags on this channel. The user interface can use this to present information about which operations are currently valid. Change notification is via the GroupFlagsChanged signal. For backwards compatibility, clients should fall back to calling GetGroupFlags if Channel_Group_Flag_Properties is not present. The value of the GroupFlags property Returns the value of the GroupFlags property. Use GetAll on the D-Bus Properties D-Bus interface to get properties including GroupFlags instead, falling back to this method if necessary. A map from channel-specific handles to their owners. For backwards compatibility, clients should fall back to calling GetHandleOwners if Channel_Group_Flag_Properties is not present. A nonzero channel-specific handle The global handle that owns the corresponding channel-specific handle, or 0 if this could not be determined A map from channel-specific handles to their owners, including at least all of the channel-specific handles in this channel's members, local-pending or remote-pending sets as keys. Any handle not in the keys of this mapping is not channel-specific in this channel. Handles which are channel-specific, but for which the owner is unknown, MUST appear in this mapping with 0 as owner. Change notification is via the HandleOwnersChanged signal. Emitted whenever the HandleOwners property changes. This signal should not be relied on unless Channel_Group_Flag_Properties is present. Clients should listen to HandleOwnersChangedDetailed instead to get the new identifiers as well. A map from channel-specific handles to their owners, in which the keys include all the handles that were added to the keys of the HandleOwners property, and all the handles in that property whose owner has changed The channel-specific handles that were removed from the keys of the HandleOwners property, as a result of the contact leaving this group in a previous MembersChanged signal

Emitted whenever the HandleOwners property changes.

Clients can assume this signal is emitted by the Connection Manager if the MemberIdentifiers property exists

A map from channel-specific handles to their owners, in which the keys include all the handles that were added to the keys of the HandleOwners property, and all the handles in that property whose owner has changed The channel-specific handles that were removed from the keys of the HandleOwners property, as a result of the contact leaving this group in a previous MembersChanged signal The string identifiers for handles mentioned in this signal, to give clients the minimal information necessary to create contacts without waiting for round-trips. Connection managers MUST include at least the identifiers for all handles in the Added map, and MAY include those from Removed array.
A list of integer handles representing members of the channel An array of integer handles representing the owner handles of the given room members, in the same order, or 0 if the owner is not available If the CHANNEL_GROUP_FLAG_CHANNEL_SPECIFIC_HANDLES flag is set on the channel, then the handles of the group members are specific to this channel, and are not meaningful in a connection-wide context such as contact lists. This method allows you to find the owner of the handle if it can be discovered in this channel, or 0 if the owner is not available. Clients should use the HandleOwners property and HandleOwnersChanged signal if Channel_Group_Flag_Properties is present. This channel doesn't have the CHANNEL_SPECIFIC_HANDLES flag, so handles in this channel are globally meaningful and calling this method is not necessary One of the given handles is not a member Returns the To_Be_Added handle (only) for each structure in the LocalPendingMembers property. Use the LocalPendingMembers property, if Channel_Group_Flag_Properties is present. Returns the LocalPendingMembers property. Use the LocalPendingMembers property, if Channel_Group_Flag_Properties is present. An array of structs containing:
  • A handle representing the contact requesting channel membership
  • A handle representing the contact making the request, or 0 if unknown
  • The reason for the request: one of the values of Channel_Group_Change_Reason
  • A string message containing the reason for the request if any (or blank if none)
An array of structs containing handles representing contacts requesting channel membership and awaiting local approval with AddMembers. If Channel_Group_Flag_Properties is not present, clients should fall back to using the deprecated GetLocalPendingMembersWithInfo method, or fall back from that to the deprecated GetAllMembers method. The members of this channel. If Channel_Group_Flag_Properties is not set, fall back to calling GetAllMembers. Returns the Members property. Use the Members property, if Channel_Group_Flag_Properties is present. An array of handles representing contacts who have been invited to the channel and are awaiting remote approval. If Channel_Group_Flag_Properties is not set, fall back to calling GetAllMembers. Returns an array of handles representing contacts who have been invited to the channel and are awaiting remote approval. Use the RemotePendingMembers property, if Channel_Group_Flag_Properties is present. Emitted whenever the SelfHandle property changes. This signal should not be relied on unless Channel_Group_Flag_Properties is present. Clients should listen to SelfContactChanged instead to get the new identifier as well. The new value of the SelfHandle property.

Emitted whenever the SelfHandle property changes.

Clients can assume this signal is emitted by the Connection Manager if the MemberIdentifiers property exists.

The new value of the SelfHandle property. The new value of the SelfHandle property's identifier.
The handle for the user on this channel (which can also be a local or remote pending member), or 0 if the user is not a member at all (which is likely to be the case, for instance, on ContactList channels). Note that this is different from the result of Connection.GetSelfHandle on some protocols, so the value of this handle should always be used with the methods of this interface. For backwards compatibility, clients should fall back to calling GetSelfHandle if Channel_Group_Flag_Properties is not present. The string identifiers for handles mentioned in this channel, to give clients the minimal information necessary to create contacts without waiting for round-trips. Connection managers MUST include at least the identifiers for SelfHandle, Members, LocalPendingMembers (and their actors if any), RemotePendingMembers and HandleOwners. Returns the value of the SelfHandle property. Clients should retrieve the SelfHandle property using GetAll instead, if Channel_Group_Flag_Properties is present. A bitwise OR of the flags which have been set A bitwise OR of the flags which have been cleared Emitted when the flags as returned by GetGroupFlags are changed. The user interface should be updated as appropriate.

The reason for a set of handles to move to one of Members, LocalPendingMembers or RemotePendingMembers, or to be removed from the group. A client may supply a reason when attempting to remove members from a group with RemoveMembersWithReason, and reasons are supplied by the CM when emitting MembersChanged and MembersChangedDetailed. Some reason codes have different meanings depending on the Actor in a MembersChanged signal.

No reason was provided for this change.

In particular, this reason SHOULD be used when representing users joining a named chatroom in the usual way, users leaving a chatroom by their own request, and normal termination of a StreamedMedia call by the remote user.

If the SelfHandle is removed from a group for this reason and the actor is not the SelfHandle, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Terminated.

If the SelfHandle is removed from a group for this reason and the actor is also the SelfHandle, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Cancelled.

The change is due to a user going offline. Also used when user is already offline, but this wasn't known previously.

If a one-to-one StreamedMedia call fails because the contact being called is offline, the connection manager SHOULD indicate this by removing both the SelfHandle and the other contact's handle from the Group interface with reason Offline.

For 1-1 calls, the call terminates as a result of removing the remote contact, so the SelfHandle should be removed at the same time as the remote contact and for the same reason.

If a handle is removed from a group for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Offline.

The change is due to a kick operation.

If the SelfHandle is removed from a group for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Channel.Kicked.

The change is due to a busy indication.

If a one-to-one StreamedMedia call fails because the contact being called is busy, the connection manager SHOULD indicate this by removing both the SelfHandle and the other contact's handle from the Group interface with reason Busy.

For 1-1 calls, the call terminates as a result of removing the remote contact, so the SelfHandle should be removed at the same time as the remote contact and for the same reason.

If the SelfHandle is removed from a group for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Busy.

The change is due to an invitation. This reason SHOULD only be used when contacts are added to the remote-pending set (to indicate that the contact has been invited) or to the members (to indicate that the contact has accepted the invitation). Otherwise, what would it mean?

The change is due to a kick+ban operation.

If the SelfHandle is removed from a group for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Channel.Banned.

The change is due to an error occurring.

The change is because the requested contact does not exist.

For instance, if the user invites a nonexistent contact to a chatroom or attempts to call a nonexistent contact, this could be indicated by the CM adding that contact's handle to remote-pending for reason None or Invited, then removing it for reason Invalid_Contact. In the case of a 1-1 StreamedMedia call, the CM SHOULD remove the self handle from the Group in the same signal.

For 1-1 calls, the call terminates as a result of removing the remote contact, so the SelfHandle should be removed at the same time as the remote contact and for the same reason.

If a contact is removed from a group for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.DoesNotExist.

The change is because the requested contact did not respond.

If a one-to-one StreamedMedia call fails because the contact being called did not respond, or the local user did not respond to an incoming call, the connection manager SHOULD indicate this by removing both the SelfHandle and the other contact's handle from the Group interface with reason No_Answer.

Documenting existing practice.

If a contact is removed from a group for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.NoAnswer.

The change is because a contact's unique identifier changed. There must be exactly one handle in the removed set and exactly one handle in one of the added sets. The Renamed signal on the Renaming interface will have been emitted for the same handles, shortly before this MembersChanged signal is emitted.

The change is because there was no permission to contact the requested handle.

If a contact is removed from a group for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.PermissionDenied.

If members are removed with this reason code, the change is because the group has split into unconnected parts which can only communicate within themselves (e.g. netsplits on IRC use this reason code).

If members are added with this reason code, the change is because unconnected parts of the group have rejoined. If this channel carries messages (e.g. Text or Tubes channels) applications must assume that the contacts being added are likely to have missed some messages as a result of the separation, and that the contacts in the group are likely to have missed some messages from the contacts being added.

Note that from the added contacts' perspective, they have been in the group all along, and the contacts we indicate to be in the group (including the local user) have just rejoined the group with reason Separated. Application protocols in Tubes should be prepared to cope with this situation.

The SelfHandle SHOULD NOT be removed from channels with this reason.

A string message from the server, or blank if not A list of members added to the channel A list of members removed from the channel A list of members who are pending local approval A list of members who are pending remote approval The contact handle of the person who made the change, or 0 if not known A reason for the change

Emitted when contacts join any of the three lists (members, local pending or remote pending) or when they leave any of the three lists. There may also be a message from the server regarding this change, which may be displayed to the user if desired.

All channel-specific handles that are mentioned in this signal MUST be represented in the value of the HandleOwners property. In practice, this will mean that HandleOwnersChanged is emitted before emitting a MembersChanged signal in which channel-specific handles are added, but that it is emitted after emitting a MembersChanged signal in which channel-specific handles are removed.

See StreamedMedia for an overview of how group state changes are used to indicate the progress of a call.

A map from handles to the corresponding normalized string identifier. A nonzero handle The same string that would be returned by InspectHandles for this handle. A list of members added to the channel A list of members removed from the channel A list of members who are pending local approval A list of members who are pending remote approval

Information about the change, which may include the following well-known keys:

actor (u — Contact_Handle)
The contact handle of the person who made the change; 0 or omitted if unknown or not applicable.
change-reason (u — Channel_Group_Change_Reason)
A reason for the change.
contact-ids (a{us} — Handle_Identifier_Map)

The string identifiers for handles mentioned in this signal, to give clients the minimal information necessary to react to the event without waiting for round-trips. Connection managers SHOULD include the identifiers for members added to the group and for the actor (if any); they MAY omit the identifiers for handles which have been removed from the group.

On IRC, an event such as a netsplit could cause the vast majority of a channel to leave. Given that clients should already know the identifiers of a channel's members, including potentially hundreds of strings in the netsplit signal is unnecessary.

Clients MUST NOT assume that the presence or absence of a handle in this mapping is meaningful. This mapping is merely an optimization for round-trip reduction, and connection managers MAY add additional handles, omit some handles, or omit the mapping completely.

message (s)
A string message from the server regarding the change
error (s — DBus_Error_Name)
A (possibly implementation-specific) DBus error describing the change, providing more specific information than the Channel_Group_Change_Reason enum allows. This MUST only be present if it is strictly more informative than 'change-reason'; if present, 'change-reason' MUST be set to the closest available reason. A SIP connection manager might want to signal "402 Payment required" as something more specific than Error or Permission_Denied so that a SIP-aware UI could handle it specially; including a namespaced error permits this to be done without Channel_Group_Change_Reason being extended to encompass every error any CM ever wants to report.
debug-message (s)
Debugging information on the change. SHOULD NOT be shown to users in normal circumstances.

Emitted when contacts join any of the three lists (members, local pending or remote pending) or when they leave any of the three lists. This signal provides a superset of the information provided by MembersChanged; if the channel's GroupFlags contains Members_Changed_Detailed, then clients may listen exclusively to this signal in preference to that signal.

All channel-specific handles that are mentioned in this signal MUST be represented in the value of the HandleOwners property. In practice, this will mean that HandleOwnersChanged is emitted before emitting a MembersChangedDetailed signal in which channel-specific handles are added, but that it is emitted after emitting a MembersChangedDetailed signal in which channel-specific handles are removed.

See StreamedMedia for an overview of how group state changes are used to indicate the progress of a call.

An array of contact handles to remove from the channel A string message, which can be blank if desired

Requests the removal of contacts from a channel, reject their request for channel membership on the pending local list, or rescind their invitation on the pending remote list.

If the SelfHandle is in a Group, it can be removed via this method, in order to leave the group gracefully. This is the recommended way to leave a chatroom, close or reject a StreamedMedia call, and so on.

Accordingly, connection managers SHOULD support doing this, regardless of the value of GroupFlags. If doing so fails with PermissionDenied, this is considered to a bug in the connection manager, but clients MUST recover by falling back to closing the channel with the Close method.

Removing any contact from the local pending list is always allowed. Removing contacts other than the SelfHandle from the channel's members is allowed if and only if Channel_Group_Flag_Can_Remove is in the GroupFlags, while removing contacts other than the SelfHandle from the remote pending list is allowed if and only if Channel_Group_Flag_Can_Rescind is in the GroupFlags.

A message may be provided along with the request, which will be sent to the server if supported. See the Channel_Group_Flag_Message_Remove, Channel_Group_Flag_Message_Depart, Channel_Group_Flag_Message_Reject and Channel_Group_Flag_Message_Rescind GroupFlags to see in which cases this message should be provided.

An array of contact handles to remove from the channel A string message, which can be blank if desired A reason for the change As RemoveMembers, but a reason code may be provided where appropriate. The reason code may be ignored if the underlying protocol is unable to represent the given reason. The provided reason code was invalid.

Interface for channels which have multiple members, and where the members of the channel can change during its lifetime. Your presence in the channel cannot be presumed by the channel's existence (for example, a channel you may request membership of but your request may not be granted).

This interface implements three lists: a list of current members (Members), and two lists of local pending and remote pending members (LocalPendingMembers and RemotePendingMembers, respectively). Contacts on the remote pending list have been invited to the channel, but the remote user has not accepted the invitation. Contacts on the local pending list have requested membership of the channel, but the local user of the framework must accept their request before they may join. A single contact should never appear on more than one of the three lists. The lists are empty when the channel is created, and the MembersChanged signal (and, if the channel's GroupFlags contains Members_Changed_Detailed, the MembersChangedDetailed signal) should be emitted when information is retrieved from the server, or changes occur.

If the MembersChanged or MembersChangedDetailed signal indicates that the SelfHandle has been removed from the channel, and the channel subsequently emits Closed, clients SHOULD consider the details given in the MembersChanged or MembersChangedDetailed signal to be the reason why the channel closed.

Addition of members to the channel may be requested by using AddMembers. If remote acknowledgement is required, use of the AddMembers method will cause users to appear on the remote pending list. If no acknowledgement is required, AddMembers will add contacts to the member list directly. If a contact is awaiting authorisation on the local pending list, AddMembers will grant their membership request.

Removal of contacts from the channel may be requested by using RemoveMembers. If a contact is awaiting authorisation on the local pending list, RemoveMembers will refuse their membership request. If a contact is on the remote pending list but has not yet accepted the invitation, RemoveMembers will rescind the request if possible.

It should not be presumed that the requester of a channel implementing this interface is immediately granted membership, or indeed that they are a member at all, unless they appear in the list. They may, for instance, be placed into the remote pending list until a connection has been established or the request acknowledged remotely.

If the local user joins a Group channel whose members or other state cannot be discovered until the user joins (e.g. many chat room implementations), the connection manager should ensure that the channel is, as far as possible, in a consistent state before adding the local contact to the members set; until this happens, the local contact should be in the remote-pending set. For instance, if the connection manager queries the server to find out the initial members list for the channel, it should leave the local contact in the remote-pending set until it has finished receiving the initial members list.

If the protocol provides no reliable way to tell whether the complete initial members list has been received yet, the connection manager should make a best-effort attempt to wait for the full list (in the worst case, waiting for a suitable arbitrary timeout) rather than requiring user interfaces to do so on its behalf.

telepathy-qt-0.9.3/spec/Call_Content_Media_Description_Interface_RTP_Header_Extensions.xml0000644000175200001440000000576512000056607034310 0ustar00collabora-develusers00000000000000 Copyright © 2005-2010 Nokia Corporation Copyright © 2005-2010 Collabora Ltd 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 Street, Fifth Floor, Boston, MA 02110-1301, USA. (as stable API)

This media description interface provides a method of signalling support for RTP Header Extensions, documented by A General Mechanism for RTP Header Extensions (RFC 5285).

For more details on the General Mechanism for RTP Header Extensions and how to use them, one should refer to RFC 5285.

A struct defining a RTP Header extension. Identifier to be negotiated. Direction in which the Header Extension is negotiated. URI defining the extension. Feedback parameters as a string. Format is defined in the relevant RFC. A list of remote header extensions which are supported.
telepathy-qt-0.9.3/spec/Channel_Type_DBus_Tube.xml0000644000175200001440000002175112000056607024343 0ustar00collabora-develusers00000000000000 Copyright © 2008-2009 Collabora Limited Copyright © 2008-2009 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

A D-Bus tube is an ordered reliable transport, for transporting D-Bus traffic.

For each D-Bus tube, the connection manager listens on a D-Bus server address, as detailed in the D-Bus specification. On this address, it emulates a bus upon which each tube participant appears as an endpoint.

The objects and interfaces which are expected to exist on the emulated bus depend on the well-known name; typically, either the participant who initiated the tube is expected to export the same objects/interfaces that would be exported by a service of that name on a bus, or all participants are expected to export those objects/interfaces.

In a multi-user context (Handle_Type_Room) the tube behaves like the D-Bus bus daemon, so participants can send each other private messages, or can send broadcast messages which are received by everyone in the tube (including themselves). Each participant has a D-Bus unique name; connection managers MUST prevent participants from sending messages with the wrong sender unique name, and SHOULD attempt to avoid participants receiving messages not intended for them.

In a 1-1 context (Handle_Type_Contact) the tube behaves like a peer-to-peer D-Bus connection - arbitrary D-Bus messages with any sender and/or destination can be sent by each participant, and each participant receives all messages sent by the other participant.

Offers a D-Bus tube providing the service specified. The dictionary of arbitrary Parameters to send with the tube offer. The access control the connection manager applies to the D-Bus socket. The string describing the address of the private bus. The client SHOULD NOT attempt to connect to the address until the tube is open. The contact associated with this channel doesn't have tubes capabilities. Accept a D-Bus tube that's in the "local pending" state. The connection manager will attempt to open the tube. The tube remains in the "local pending" state until the TubeChannelStateChanged signal is emitted. The access control the connection manager applies to the D-Bus socket. The string describing the address of the private bus. The client SHOULD NOT attempt to connect to the address until the tube is open. Emitted on a multi-user (i.e. Handle_Type_Room) D-Bus tube when a participant opens or closes the tube. This provides change notification for the DBusNames property. Array of handles and D-Bus names of new participants. Array of handles of former participants.

A string representing the service name that will be used over the tube. It SHOULD be a well-known D-Bus service name, of the form com.example.ServiceName.

When the tube is offered, the service name is transmitted to the other end.

When requesting a channel with CreateChannel, this property MUST be included in the request.

For a multi-user (i.e. Handle_Type_Room) D-Bus tube, a mapping between contact handles and their unique bus names on this tube. For a peer-to-peer (i.e. Handle_Type_Contact) D-Bus tube, the empty dictionary. Change notification is via DBusNamesChanged. Represents the participants in a multi-user D-Bus tube, as used by the DBusNames property and the DBusNamesChanged signal. The handle of a participant in this D-Bus tube. That participant's unique name.

A list of the access control types that are supported with this channel. Note that only Socket_Access_Control_Localhost and Socket_Access_Control_Credentials can be used with D-Bus tubes. Using Socket_Access_Control_Credentials is recommended.

Socket_Access_Control_Credentials is easy to implement for a D-Bus tube, because typical D-Bus library implementations like libdbus and GDBus already have to support it to be able to connect to the system or session bus, and usually enable it by default; so there's typically no good reason to relax access control to Localhost.

When requesting a channel with Connection.Interface.Requests.CreateChannel, this property MUST NOT be included in the request.

telepathy-qt-0.9.3/spec/Call_Stream.xml0000644000175200001440000003163412000056607022265 0ustar00collabora-develusers00000000000000 Copyright © 2009-2010 Collabora Ltd. Copyright © 2009-2010 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API)

One stream inside a Content. A stream is a single flow of packets to and from a single remote endpoint. If your call connects to multiple people, you could have multiple streams.

For protocols that support muting streams separately, this object MAY also implement the Mute interface

Set the stream to start or stop sending media from the local user to other contacts.

If True, the LocalSendingState should change to Sending, if it isn't already.

If False, the LocalSendingState should change to None, if it isn't already.

If the call has not been accepted yet, calling SetSending(True) is an error. See LocalSendingState for details.

Request that a remote contact stops or starts sending on this stream.

The CanRequestReceiving property defines whether the protocol allows the local user to request the other side start sending on this stream.

Contact from which sending is requested

If true, request that the given contact starts to send media. If false, request that the given contact stops sending media.

The request contact is valid but is not involved in this stream. The protocol does not allow the local user to request the other side starts sending on this stream.
renamed from SendersChanged to MembersChanged renamed from MembersChanged to RemoteMembersChanged Emitted when RemoteMembers changes. A mapping from channel-specific handles to their updated sending state, whose keys include at least the members who were added, and the members whose states changed. The identifiers of the contacts in the Updates map. The channel-specific handles that were removed from the keys of the RemoteMembers property, as a result of the contact leaving this stream A structured reason for the change. Emitted when LocalSendingState changes. The new value of LocalSendingState. A structured reason for the change. Enum indicating whether a contact is sending media. The contact is not sending media and has not been asked to do so. The contact has been asked to start sending media. The contact is sending media. The contact has been asked to stop sending media. A map from a contact to his or her sending state. The contact handle. The sending state of the contact.

Extra interfaces provided by this stream, such as Stream.Interface.Media. This SHOULD NOT include the Stream interface itself, and cannot change once the stream has been created.

renamed from Senders

A map from remote contacts to their sending state.

Media sent to this stream will be sent to all members listed here. All members listed here will also appear in CallMembers, and each CallMembers member will be listed in at most one Stream per Content. Therefore, to hide things from a member of the call, UIs only need to mute one Stream per Content.

Contacts' handles in this map indicate whether they are sending media to this stream. Sending_State_Pending_Send indicates contacts who are not sending but have been asked to do so. The local user's sending state is shown in LocalSendingState.

This mapping is also used by the streaming implementation to map from MediaDescriptions to Streams. In this use-case, all of the senders in this stream will be represented in RemoteMediaDescriptions. This use-case should not affect anything that does not handle media streaming.

The string identifiers for handles mentioned in RemoteMembers, to give clients the minimal information necessary to create contacts without waiting for round-trips.

The local user's sending state. Media sent on this stream should be assumed to be received, directly or indirectly, by every other contact in the RemoteMembers mapping. Change notification is given via the LocalSendingStateChanged signal.

Implementations of the first Call draft had the self handle in the RemoteMembers (then called Members) map and this showed that it's annoying having to keep track of the self handle so that it can be special-cased.

A value of Pending_Send for this property indicates that the other side requested the local user start sending media (which can be done by calling either SetSending or Accept).

When Accept is called, all streams with a local sending state of Pending_Send and the associated Disposition set to Initial are automatically set to sending.

If true, the user can request that a remote contact starts sending on this stream.

Not all protocols allow the user to ask the other side to start sending media.
telepathy-qt-0.9.3/spec/Channel_Bundle.xml0000644000175200001440000000422712000056607022736 0ustar00collabora-develusers00000000000000 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

A group of related channels, which should all be dispatched to the same handler if possible.

Bundles currently have no functionality of their own, so clients SHOULD NOT examine this interface, but should instead treat the bundle object-path as an opaque identifier. If more functionality is added to bundles in future, this interface will be used for capability discovery.

The lifetime of a bundle is defined by its component channels - as long as one or more channels whose Bundle property is B exist, the bundle B will also exist.

A list of the extra interfaces provided by this channel bundle.
telepathy-qt-0.9.3/spec/Channel_Interface_Call_State.xml0000644000175200001440000001374012000056607025520 0ustar00collabora-develusers00000000000000 Copyright (C) 2008 Collabora Limited 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

An interface for streamed media channels that can indicate call progress or call states. The presence of this interface is no guarantee that call states will actually be signalled (for instance, SIP implementations are not guaranteed to generate status 180 Ringing, so a call can be accepted without the Ringing flag ever having been set; similarly, Jingle implementations are not guaranteed to send <ringing/>).

To notify the other participant in the call that they are on hold, see Hold.

Get the current call states for all contacts involved in this call. The current call states. Participants where the call state flags would be 0 (all unset) may be omitted from this mapping. Emitted when the state of a member of the channel has changed. An integer handle for the contact. The new state for this contact. A map from contacts to call states. A contact involved in this call. State flags for the given contact. A set of flags representing call states. The contact has been alerted about the call but has not responded (e.g. 180 Ringing in SIP). The contact is temporarily unavailable, and the call has been placed in a queue (e.g. 182 Queued in SIP, or call-waiting in telephony). The contact has placed the call on hold, and will not receive media from the local user or any other participants until they unhold the call again. The initiator of the call originally called a contact other than the current recipient of the call, but the call was then forwarded or diverted. Progress has been made in placing the outgoing call, but the destination contact may not have been made aware of the call yet (so the Ringing state is not appropriate). This corresponds to SIP's status code 183 Session Progress, and could be used when the outgoing call has reached a gateway, for instance. This contact has merged this call into a conference. Note that GSM provides a notification when the remote party merges a call into a conference, but not when it is split out again; thus, this flag can only indicate that the call has been part of a conference at some point. If a GSM connection manager receives a notification that a call has been merged into a conference a second time, it SHOULD represent this by clearing and immediately re-setting this flag on the remote contact.
telepathy-qt-0.9.3/spec/Connection_Interface_Contact_Groups.xml0000644000175200001440000006155312000056607027173 0ustar00collabora-develusers00000000000000 Copyright © 2009-2010 Collabora Ltd. Copyright © 2009 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API)

An interface for connections in which contacts can be placed in user-defined groups.

The most basic functionality of this interface is to list and monitor a contact's set of groups. To do this, use the GroupsChanged signal, and the groups contact attribute (this should usually be done by connecting to the GroupsChanged signal, then calling GetContactListAttributes with this interface included in the Interfaces argument). Simple user interfaces can limit themselves to displaying that information, and ignore the rest of this interface: to ensure that this works, GroupsChanged is emitted for every change, even if that change could be inferred from another signal such as GroupsRemoved.

Looking at contacts' lists of groups is sufficient to present a user interface resembling XMPP's data model, in which groups behave like tags applied to contacts, and so an empty group cannot exist or is not interesting. However, some protocols model groups as objects in their own right. User interfaces may either track the set of groups via the Groups property and the GroupsCreated and GroupsRemoved signals, or ignore this extra information.

Similarly, in some protocols it is possible to rename a group as a single atomic operation. Simpler user interfaces will see the new name being created, the old name being removed, and the members moving to the new name, via the signals described above. More advanced user interfaces can optionally distinguish between an atomic rename and a create/remove pair, and display renamed groups differently, by monitoring the GroupRenamed signal.

This interface also provides various methods to manipulate user-defined groups, which can be expected to work if GroupStorage is not None.

Depending on the protocol, some methods might be implemented by more than one protocol operation; for instance, in a "contact-centric" protocol like XMPP, SetContactGroups is a single protocol operation and SetGroupMembers requires a protocol operation per contact, whereas in a more "group-centric" protocol it might be the other way around. User interfaces SHOULD call whichever method most closely resembles the way in which the user's action was represented in the UI, and let the connection manager deal with the details.

True if each contact can be in at most one group; false if each contact can be in many groups.

This property cannot change after the connection has moved to the Connected state. Until then, its value is undefined, and it may change at any time, without notification.

Indicates the extent to which contacts' groups can be set and stored.

This property cannot change after the connection has moved to the Connected state. Until then, its value is undefined, and it may change at any time, without notification.

The names of groups of which a contact is a member.

Change notification is via GroupsChanged; clients can also get extra context for group membership changes by receiving GroupRenamed and GroupsRemoved.

Emitted when contacts' groups change. The relevant contacts. The names of groups to which the contacts were added. The names of groups from which the contacts were removed.

The names of all groups that currently exist. This may be a larger set than the union of all contacts' groups contact attributes, if the connection allows groups to be empty.

Change notification is via GroupsCreated and GroupsRemoved; clients can also distinguish between a create/remove pair and a renamed group by receiving GroupRenamed.

This property's value is not meaningful until the ContactListState has become Success.

Emitted when new, empty groups are created. This will often be followed by GroupsChanged signals that add some members. The names of the new groups.

Emitted when a group is renamed, in protocols where this can be distinguished from group creation, removal and membership changes.

Immediately after this signal is emitted, GroupsCreated MUST signal the creation of a group with the new name, and GroupsRemoved MUST signal the removal of a group with the old name.

Emitting these extra signals, in this order, means that clients that are interested in the set of groups that exist (but treat a rename and a create/remove pair identically) can ignore the GroupRenamed signal entirely.

If the group was not empty, immediately after those signals are emitted, GroupsChanged MUST signal that the members of that group were removed from the old name and added to the new name.

On connection managers where groups behave like tags, renaming a group MAY be signalled as a set of GroupsCreated, GroupsRemoved and GroupsChanged signals, instead of emitting this signal.

On protocols like XMPP, another resource "renaming a group" is indistinguishable from changing contacts' groups individually.

The old name of the group. The new name of the group.

Emitted when one or more groups are removed. If they had members at the time that they were removed, then immediately after this signal is emitted, GroupsChanged MUST signal that their members were removed.

Emitting the signals in this order allows for two modes of operation. A client interested only in a contact's set of groups can ignore GroupsRemoved and rely on the GroupsChanged signal that will follow; a more elaborate client wishing to distinguish between all of a group's members being removed, and the group itself being removed, can additionally watch for GroupsRemoved and use it to disambiguate.

The names of the groups.

Add the given contact to the given groups (creating new groups if necessary), and remove them from all other groups.

This is the easiest and most correct way to implement user interfaces that display a single contact with a list of groups, resulting in a user expectation that when they apply the changes, the contact's set of groups will become exactly what was displayed.

If the user is removed from a group of which they were the only member, the group MAY be removed automatically.

In protocols like XMPP where groups behave like tags, a group with no members has no protocol representation.

Any GroupsCreated, GroupsChanged and GroupsRemoved signals that result from this method call MUST be emitted before the method returns.

This method SHOULD NOT be called until the ContactListState changes to Success. If the ContactListState is Failure, this method SHOULD raise the same error as GetContactListAttributes.

The contact to alter. The set of groups which the contact should be in. Raised if DisjointGroups is true and the list of groups has more than one member. Raised if GroupStorage is Contact_Metadata_Storage_Type_None, i.e. groups cannot be edited.

Add the given members to the given group (creating it if necessary), and remove all other members.

This is the easiest and most correct way to implement user interfaces that display a single group with a list of contacts, resulting in a user expectation that when they apply the changes, the groups's set of members will become exactly what was displayed.

If DisjointGroups is true, this will also remove each member from their previous group.

If the user is removed from a group of which they were the only member, the group MAY be removed automatically.

Any GroupsCreated, GroupsChanged and GroupsRemoved signals that result from this method call MUST be emitted before the method returns.

This method SHOULD NOT be called until the ContactListState changes to Success. If the ContactListState is Failure, this method SHOULD raise the same error as GetContactListAttributes.

The group to alter. The set of members for the group. If this set is empty, this method MAY remove the group. Raised if GroupStorage is Contact_Metadata_Storage_Type_None, i.e. groups cannot be edited.

Add the given members to the given group, creating it if necessary.

If DisjointGroups is true, this will also remove each member from their previous group.

This is good for user interfaces in which you can edit groups via drag-and-drop.

Any GroupsCreated, GroupsChanged and GroupsRemoved signals that result from this method call MUST be emitted before the method returns.

This method SHOULD NOT be called until the ContactListState changes to Success. If the ContactListState is Failure, this method SHOULD raise the same error as GetContactListAttributes.

The group to alter. The set of members to include in the group. Raised if GroupStorage is Contact_Metadata_Storage_Type_None, i.e. groups cannot be edited.

Remove the given members from the given group.

This is good for user interfaces in which you can edit groups via drag-and-drop.

Any GroupsChanged or GroupsRemoved signals that result from this method call MUST be emitted before the method returns.

This method SHOULD NOT be called until the ContactListState changes to Success. If the ContactListState is Failure, this method SHOULD raise the same error as GetContactListAttributes.

The group to alter. If it does not exist, then it has no members by definition, so this method SHOULD return successfully. The set of members to remove from the group. It is not an error to remove members who are already not in the group. If there are no members left in the group afterwards, the group MAY itself be removed. Raised if GroupStorage is Contact_Metadata_Storage_Type_None, i.e. groups cannot be edited.

Remove all members from the given group, then remove the group itself. If the group already does not exist, this method SHOULD return successfully.

Any GroupsChanged or GroupsRemoved signals that result from this method call MUST be emitted before the method returns.

This method SHOULD NOT be called until the ContactListState changes to Success. If the ContactListState is Failure, this method SHOULD raise the same error as GetContactListAttributes.

The group to remove. Raised if GroupStorage is Contact_Metadata_Storage_Type_None, i.e. groups cannot be edited.

Rename the given group.

On protocols where groups behave like tags, this is an API short-cut for adding all of the group's members to a group with the new name, then removing the old group.

Otherwise, clients can't perform this operation atomically, even if the connection could.

Any GroupRenamed or GroupsRemoved signals that result from this method call MUST be emitted before the method returns.

This method SHOULD NOT be called until the ContactListState changes to Success. If the ContactListState is Failure, this method SHOULD raise the same error as GetContactListAttributes.

The group to rename. The new name for the group. Raised if GroupStorage is Contact_Metadata_Storage_Type_None, i.e. groups cannot be edited. Raised if there is no group with that name. Raised if there is already a group with the new name.
telepathy-qt-0.9.3/spec/Client_Handler.xml0000644000175200001440000003732312000056607022753 0ustar00collabora-develusers00000000000000 Copyright © 2008-2009 Collabora Ltd. Copyright © 2008-2009 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as a stable interface)

Handlers are the user interface for a channel. They turn an abstract Telepathy channel into something the user wants to see, like a text message stream or an audio and/or video call.

For its entire lifetime, each channel on a connection known to the channel dispatcher is either being processed by the channel dispatcher, or being handled by precisely one Handler.

Because each channel is only handled by one Handler, handlers may perform actions that only make sense to do once, such as acknowledging Text messages, doing the actual streaming for StreamedMedia channels with the MediaSignalling interface, or transferring the file in FileTransfer channels.

When a new incoming channel (one with Requested = FALSE) is offered to Approvers by the channel dispatcher, it also offers the Approvers a list of all the running or activatable handlers whose HandlerChannelFilter property (possibly as cached in the .client file) indicates that they are able to handle the channel. The Approvers can choose one of those channel handlers to handle the channel.

When a new outgoing channel (one with Requested = TRUE) appears, the channel dispatcher passes it to an appropriate channel handler automatically.

A specification of the channels that this channel handler can deal with. It will be offered to approvers as a potential channel handler for bundles that contain only suitable channels, or for suitable channels that must be handled separately.

This property works in exactly the same way as the Client.Observer.ObserverChannelFilter property. In particular, it cannot change while the handler process continues to own the corresponding Client bus name.

In the .client file, it is represented in the same way as ObserverChannelFilter, but the group has the same name as this interface and the keys start with HandlerChannelFilter instead of ObserverChannelFilter.

If true, channels destined for this handler are automatically handled, without invoking approvers.

The intended usage is to allow a client handling one channel to pick up closely related channels. Suppose a client capable of handling both Text and StreamedMedia, org.freedesktop.Telepathy.Client.Empathy, is handling a StreamedMedia channel. That client can take a second well-known bus name, say org.freedesktop.Telepathy.Client.Empathy._1._42.Bundle1, and configure an object at /org/freedesktop/Telepathy/Client/Empathy/_1/_42/Bundle1 with BypassApproval = TRUE, whose HandlerChannelFilter matches closely related Text channels by their Bundle property.

For service-activatable handlers, this property should be specified in the handler's .client file as follows:

[org.freedesktop.Telepathy.Client.Handler]
BypassApproval=true
A DBus_Interface, followed by a slash '/' character and an identifier for a capability defined by that interface. The capability identifier SHOULD be in lower case. If an interface references an external specification which is case-insensitive (such as MIME), then names from that specification MUST be normalized to lower-case before providing them to this Telepathy API, so that implementations can safely rely on simple byte-by-byte comparison. These aren't D-Bus core Properties, and we want them to look visibly different.

So far, all client capabilities are defined by the MediaSignalling interface.

The set of additional capabilities supported by this handler. This describes things like support for streamed media codecs and NAT traversal mechanisms: see the Contact Capabilities interface for more details.

For handlers that have a .client file, the channel dispatcher may discover this property from the org.freedesktop.Telepathy.Client.Handler.Capabilities group; for each capability, that group contains a key whose name is the capability, with value true. Keys with other values SHOULD NOT appear in this group.

For instance, the .client file for a streamed media handler that supports ICE-UDP NAT traversal, Speex audio, and Theora and H264 video might contain this group:

[org.freedesktop.Telepathy.Client.Handler.Capabilities]
org.freedesktop.Telepathy.Channel.Interface.MediaSignalling/ice-udp=true
org.freedesktop.Telepathy.Channel.Interface.MediaSignalling/audio/speex=true
org.freedesktop.Telepathy.Channel.Interface.MediaSignalling/video/theora=true
org.freedesktop.Telepathy.Channel.Interface.MediaSignalling/video/h264=true

Like the HandlerChannelFilter property, this property cannot change while the Handler owns its Client bus name. However, the .client file, if any, can change (due to upgrades or installation of pluggable codecs), and the capabilities really supported by the handler might not exactly match what is cached in the .client file.

The client file is installed statically and is intended to list codecs etc. that the handler guarantees it can support (e.g. by having a hard dependency on them), whereas the running handler process might be able to find additional codecs.

Called by the channel dispatcher when this client should handle these channels, or when this client should present channels that it is already handling to the user (e.g. bring them into the foreground).

Clients are expected to know what channels they're already handling, and which channel object path corresponds to which window or tab. This can easily be done using a hash table keyed by channels' object paths.

This method can raise any D-Bus error. If it does, the handler is assumed to have failed or crashed, and the channel dispatcher MUST recover in an implementation-specific way; it MAY attempt to dispatch the channels to another handler, or close the channels.

If closing the channels, it is RECOMMENDED that the channel dispatcher attempts to close the channels using Channel.Close, but resorts to calling Channel.Interface.Destroyable.Destroy (if available) or ignoring the channel (if not) if the same handler repeatedly fails to handle channels.

After HandleChannels returns successfully, the client process is considered to be responsible for the channel until it its unique name disappears from the bus.

If a process has multiple Client bus names - some temporary and some long-lived - and drops one of the temporary bus names in order to reduce the set of channels that it will handle, any channels that it is already handling should remain unaffected.

The Account with which the channels are associated. The well-known bus name to use is that of the AccountManager. The Connection with which the channels are associated. The well-known bus name to use can be derived from this object path by removing the leading '/' and replacing all subsequent '/' by '.'. The channels and their immutable properties. Their well-known bus name is the same as that of the Connection.

The requests satisfied by these channels.

If the handler implements Requests, this tells it that these channels match previous AddRequest calls that it may have received.

There can be more than one, if they were EnsureChannel requests.

The time at which user action occurred, or 0 if this channel is to be handled for some reason not involving user action. Handlers SHOULD use this for focus-stealing prevention, if applicable. This property has the same semantic as User_Action_Timestamp but is unsigned for historical reasons.

Additional information about these channels. Currently defined keys are:

request-properties - a{oa{sv}}
A map from ChannelRequest paths listed in Requests_Satisfied to Qualified_Property_Value_Maps containing namespaced immutable properties of each request.

When more keys are defined for this dictionary, all will be optional; handlers MAY safely ignore any entry in this dictionary.

A list of the channels that this process is currently handling.

There is no change notification.

This property exists for state recovery - it makes it possible for channel handling to survive a ChannelDispatcher crash.

If the channel dispatcher is automatically replaced, the replacement can discover all Handlers by looking for the Client well-known bus names, and discover which channels they are currently handling. Once this has been done, all unhandled channels can be re-dispatched, and the only issue visible to the user is that unhandled channels that they have already approved might be sent back to Approvers.

The value of this property SHOULD be the same for all Client instances that share a unique bus name, and SHOULD include all channels that are being handled, even if they were conceptually handled by a different Client instance.

Otherwise, when a process released a temporary Client name, channels that it handled because of that Client name would no longer be state-recoverable.

telepathy-qt-0.9.3/spec/Connection_Interface_Mail_Notification.xml0000644000175200001440000007016012000056607027623 0ustar00collabora-develusers00000000000000 Copyright (C) 2007 Collabora Limited

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 Library 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API) A client MUST notify interest in this feature before it will be enabled. This Connection provides the number of unread e-mails (or e-mail threads) in the main folder of your e-mail account, as the UnreadMailCount property. The connection manager will update this value by emitting the UnreadMailsChanged signal. This Connection provides a detailed list of unread e-mails, as the UnreadMails property. If this flag is set, Supports_Unread_Mail_Count MUST be set, and Emits_Mails_Received MUST NOT be set. The Connection will update the list by emitting the UnreadMailsChanged signals. This Connection emits the MailsReceived signal, which provides details about newly arrived e-mails but does not maintain their read/unread status afterwards. This flag MUST NOT be combined with Supports_Unread_Mails. This Connection can provide a URL (with optional POST data) to open the the inbox of the e-mail account in a web-based client, via the RequestInboxURL method.

This Connection can provide a URL (with optional POST data) to open a specific mail in a web-based client, via the RequestMailURL method. This feature is not useful unless either Emits_Mails_Received or Supports_Unread_Mails is set.

If this flag is not set, clients SHOULD fall back to using RequestInboxURL if available.

Each Mail represents a thread of e-mails, which MAY have more than one sender.

Google Talk notifies users about new mail in terms of unread threads, rather than unread e-mails.

Flags representing capabilities provided by a connection manager. Those values can be used as bitfield. Some flags depend on, or conflict with, each other.

Connections SHOULD implement as many of these features as the underlying protocol allows, preferring to implement Supports_Unread_Mails instead of Emits_Mails_Received if both are possible.

Use the GET method when opening the URL. Use the POST method when opening the URL. Refer to HTTP_Post_Data for more details. The HTTP Method with which to request a URL.

A pair (key, value) representing POST data compatible with the application/x-www-form-urlencoded MIME type. The strings MUST be valid UTF-8 strings, and the characters used in the key MUST obey the requirements of the HTML CDATA type. The value MUST NOT be encoded with HTML entities.

For example, if the POST data should contain a key "less-than" with value "<", and a key "percent" with value "%", this should be represented as two HTTP_Post_Data structures, ("less-than", "<") and ("percent", "%"), resulting in a POST request whose request body is "less-than=&lt;&percent=%25". If a client passes this to a browser by writing it into an HTML form, it could do so by representing it as:

        <input type="hidden" name="less-than">&lt;</input>
        <input type="hidden" name="percent">%</input>
        

This data can be used to generate a HTML file that will automatically load the URL with appropriate POST data, in which case the client MUST convert any characters that are special within HTML into HTML entities. Alternatively, it can be used in an API that will instruct the browser how to load the URL (like the Netscape Plug-in API), in which case the client MUST escape characters that are reserved in URLs, if appropriate for that API.

An array of pairs is used instead of a map from keys to values, because it's valid to repeat keys in both HTML and x-www-form-urlencoded data.

The key, corresponding to a HTML control name The value

A pair (name, address) representing an e-mail address, such as ("Nicolas Dufresne", "nicolas.dufresne@collabora.co.uk"). At least one of name and address MUST be provided. A missing element will be represented by the empty string.

The CM should provide as much information as possible, but not all protocols provide both the displayed name and the address. (If a protocol doesn't provide either, it should omit the appropriate field from the Mail entirely.)

The displayed name corresponding to the e-mail address The actual e-mail address

A structure containing the required information to open a web-based e-mail UI, without needing re-authentication (if possible).

Because the URL and POST data frequently contain short-lived credential tokens, a new URL should be requested (by calling one of the methods that returns a Mail_URL) for each visit to the web-based UI, and the URL should be visited soon after it is returned.

The URL to which to send a request. The HTTP method of the request. An array of name-value pairs containing the POST data to use when opening the URL. This MUST be an empty array if the Method is not POST.
An extensible map representing a mail, or (on protocols where Thread_Based appears in MailNotificationFlags) a thread of mails. All keys are optional where not otherwise stated; however, at least one of "senders" and "subject" must be included.

A key providing information about the mail or thread. Well-known keys are as follows:

id — s

A unique ID for this e-mail. CMs with Supports_Unread_Mails set in MailNotificationFlags MUST provide this key in each Mail.

If provided, the ID SHOULD be unique to a Mail at least until that mail is removed with the UnreadMailsChanged signal (in protocols with Supports_Unread_Emails), or unique for the duration of a session (otherwise).

In protocols with Supports_Unread_Mails, this key is used to indicate which mail was removed. In protocols without that feature, it's impossible to tell when a mail has been removed (and hence how long the identifier will remain valid for use with RequestMailURL).

url-data — any type
An opaque identifier (typically a string or list of strings) provided to the Connection when calling RequestMailURL, containing information used by the Connection to build the URL.
senders — a(ss) (Mail_Address)
An array of sender display name and e-mail address pairs. Note that only e-mails represented as a thread can have multiple senders.
to-addresses — a(ss) (Mail_Address)
An array of display name and e-mail address pairs representing the recipients.
cc-addresses — a(ss) (Mail_Address)
An array of display name and e-mail address pairs representing the carbon-copy recipients.
sent-timestamp — x (Unix_Timestamp64)
A UNIX timestamp indicating when the message was sent, or for a thread, when the most recent message was sent.
received-timestamp — x (Unix_Timestamp64)
A UNIX timestamp indicating when the message was received, or for a thread, when the most recent message was received.
has-attachments — b
If true, this mail has attachments.
subject — s
The subject of the message. This MUST be encoded in UTF-8.
content-type — s

The MIME type of the message content. Two types are currently supported: "text/plain" for plain text, and "text/html" for a HTML document. If omitted, "text/plain" MUST be assumed. Regardless of MIME type, the content MUST be valid UTF-8 (which may require that the Connection transcodes it from a legacy encoding).

All strings on D-Bus must be UTF-8.

truncated — b
If true, the content is only a partial message; if false or omitted, the content is the entire message.
content — s
The body of the message, possibly truncated, encoded as appropriate for "content-type".
folder — s
The name of the folder containing this e-mails. If omitted, the inbox SHOULD be assumed.
The value, of whatever type is appropriate for the key.
Integer representing the bitwise-OR of supported features for e-mails notification on this server. This property MUST NOT change after the Connection becomes CONNECTED. This property indicates the behavior and availability of the other properties and signals within this interface. A connection manager that cannot at least set one of the flags in the Mail_Notification_Flags SHOULD NOT provide this interface.

The number of unread messages in the Inbox. Change notification is via UnreadMailsChanged.

This property is only useful if Supports_Unread_Mail_Count is set in the MailNotificationFlags; otherwise, it MUST be zero.

If Thread_Based appears in the MailNotificationFlags, this property counts the number of threads, not the number of mails.

Note that this count MAY be bigger than the number of items in UnreadMails. See UnreadMails for more details.

An array of unread Mails. Change notification is via UnreadMailsChanged. This property is only useful if Supports_Unread_Mails is set in MailNotificationFlags; otherwise, it MUST be an empty list.

The array size MAY be shorter than UnreadMailCount.

Some servers may limits the amount of detailed e-mails sent. This can significantly reduce the network traffic for large inbox. For this reason, it is normal that UnreadMailCount be bigger or equal to the size of this array.

A string representing the e-mail address of the account. The CMs MUST provide this information. In close integration of MailNotification with other e-mail services, the e-mail address can be used has a unique identifier for the account. Possible integration could be between Telepathy and Evolution where the e-mail address is the common information in both interfaces.

An array of Mails. Those e-mail MUST NOT have the "id" key.

On connections that emit this signal, it's impossible to tell when a mail has been removed, and hence when "id" has become invalid.

Emitted when new e-mails messages arrive to the inbox associated with this connection. This signal is used for protocols that are not able to maintain the UnreadMails list, but do provide real-time notification about newly arrived e-mails. It MUST NOT be emitted unless Emits_Mails_Received is set in MailNotificationFlags.
Number of unread messages in the inbox (the new value of UnreadMailCount).

A list of Mail that are being added or updated in UnreadMails.

Mails may be updated when the URL information (URL and POST data) have changed, or senders were added or removed from an e-mail thread.

If the Supports_Unread_Mails flag is not set, this list MUST be empty, even if Count has increased.

A list of e-mail IDs that are being removed from UnreadMails. If the Supports_Unread_Mails flag is not set, this list MUST be empty, even if Count has decreased.

Emitted when UnreadMails or UnreadMailCount have changed. It MUST NOT be emited if Supports_Unread_Mail_Count flag is not set in MailNotificationFlags.

Mails_Added and Mails_Removed MUST be empty if the Supports_Unread_Mails flag is not set.

A struture containing a URL and optional additional data to open a webmail client, without re-authentication if possible. This method creates and returns a URL and an optional POST data that allow opening the Inbox folder of a webmail account. This URL MAY contain tokens with a short lifetime, so clients SHOULD request a new URL for each visit to the webmail interface. This method is implemented only if the Supports_Request_Inbox_URL flag is set in MailNotificationFlags. We are not using properties here because the tokens are unsuitable for sharing between clients, and network round-trips may be required to obtain the information that leads to authentication free webmail access. The mail's id as found in the Mail structure, or the empty string if no id key was provided. Whatever url-data was found in the Mail structure, or the boolean value False (D-Bus type 'b') if no url-data was provided in the Mail. A struture that contains a URL and optional additional data to open a webmail client, without re-authentication if possible. This method creates and returns a URL and optional POST data that allow opening a specific mail in a webmail interface. This method is implemented only if Supports_Request_Mail_URL flag is set in MailNotificationFlags. See RequestInboxURL for design rationale.

An interface to support receiving notifications about a e-mail account associated with this connection.

In protocols where this is possible, this interface also allows the connection manager to provide the necessary information for clients to open a web-based mail client without having to re-authenticate.

To use this interface, a client MUST first subscribe by passing the name of this interface to the Connection.AddClientInterest method. The subscription mechanic aims at reducing network traffic and memory footprint in the situation where nobody is currently interesting in provided information. When done with this interface, clients SHOULD call Connection.RemoveClientInterest to allow the CM to release resources.

Protocols have various different levels of Mail Notification support. To describe the level of support, the interface provides a property called MailNotificationFlags. Not all combinations are valid; protocols can be divided into four categories as follows.

Connections to the most capable protocols, such as Google's XMPP Mail Notification extension, have the Supports_Unread_Mails flag (this implies that they must also have Supports_Unread_Mail_Count, but not Emits_Mails_Received). On these connections, clients requiring change notification MUST monitor the UnreadMailsChanged signal, and either recover the initial state from the UnreadMails property (if they require details other than the number of mails) or the UnreadMailCount property (if they are only interested in the number of unread mails). The MailsReceived signal is never emitted on these connections, so clients that will display a short-term notification for each new mail MUST do so in response to emission of the UnreadMailsChanged signal.

The most common situation, seen in protocols like MSN and Yahoo, is that the number of unread mails is provided and kept up-to-date, and a separate notification is emitted with some details of each new mail. This is a combination of the following two features, and clients SHOULD implement one or both as appropriate for their requirements.

On protocols that have the Emits_Mails_Received flag (which implies that they do not have Supports_Unread_Mails), the CM does not keep track of any mails; it simply emits a notification whenever new mail arrives. Those events may be used for short term display (like a notification popup) to inform the user. No protocol is known to support only this feature, but it is useful for integration with libraries that that do not implement tracking of the number of mails. Clients requiring these notifications MUST monitor the MailsReceived signal on any connections with this flag.

On protocols that have the Supports_Unread_Mail_Count flag but not the Supports_Unread_Mails flag, clients cannot display complete details of unread email, but can display an up-to-date count of the number of unread mails. To do this, they must monitor the UnreadMailsChanged signal, and retrieve the initial state from the UnreadMailCount property.

Orthogonal features described by the MailNotificationFlags property include the RequestSomethingURL methods, which are used to obtain URLs allowing clients to open a webmail client. Connections SHOULD support as many of these methods as possible.

telepathy-qt-0.9.3/spec/Channel_Interface_Credentials_Storage.xml0000644000175200001440000000605112000056607027423 0ustar00collabora-develusers00000000000000 Copyright © 2011 Collabora Limited

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(draft 1)

A channel interface for SASL authentication channels that can save the credentials in the connection manager.

This interface is unlikely to be present for any SASL channels that are more complex than a simple password prompt (e.g. X-TELEPATHY-PASSWORD or PLAIN).

In practice, this interface should only be implemented by connection managers that implement the ConnectionManager.Interface.AccountStorage.DRAFT interface. To clear a password that has been saved in this manner, a client should call AccountStorage.DRAFT.ForgetCredentials on the Account.

Whether to store the authentication credentials.

This method tells the connection manager whether to store the authentication response in order to allow the connection manager to sign-on automatically in the future.

If credentials have been stored in this way, the client SHOULD NOT attempt to store the credentials locally in a keyring.

This method MUST be called before AcceptSASL is called or it will have no effect.

telepathy-qt-0.9.3/spec/Channel_Type_Text.xml0000644000175200001440000006666412000056607023467 0ustar00collabora-develusers00000000000000 Copyright © 2005-2009 Collabora Limited Copyright © 2005-2009 Nokia Corporation Copyright © 2006 INdT

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

The Messages interface is now mandatory This interface used to have a bunch of clunky Telepathy.Properties. They have been removed in favour of D-Bus properties on the Room2, Subject2 and RoomConfig1 interfaces. A unique-per-channel identifier for an incoming message. These SHOULD be allocated in a way that minimizes collisions (in particular, message IDs SHOULD NOT be re-used until all of the 32-bit integer space has already been used). New APIs should use an array of Message_Part instead. A struct (message ID, timestamp in seconds since 1970-01-01 00:00 UTC, sender's handle, message type, flags, text) representing a pending text message, as returned by ListPendingMessages. The arguments of the Received signal also match this struct's signature. The IDs of the messages to acknowledge Inform the channel that you have handled messages by displaying them to the user (or equivalent), so they can be removed from the pending queue. A given message ID was not found, so no action was taken Consulting MessageTypes is preferred. An array of integer message types (ChannelTextMessageType) Return an array indicating which types of message may be sent on this channel. Consulting PendingMessages is preferred. If true, behave as if AcknowledgePendingMessages had also been called. Setting this to true is NOT RECOMMENDED for clients that have some sort of persistent message storage - clients SHOULD only acknowledge messages after they have actually stored them, which is impossible if this flag is true. An array of structs representing the pending queue. Each contains:
  • a numeric identifier
  • a Unix timestamp indicating when the message was received
  • the contact handle for the contact who sent the message
  • the message type, taken from ChannelTextMessageType
  • the bitwise-OR of the message flags from ChannelTextMessageFlags
  • the text of the message
List the messages currently in the pending queue, and optionally remove then all.
In practice, this signal was not emitted, and does not have useful semantics. This signal is emitted to indicate that an incoming message was not able to be stored and forwarded by the connection manager due to lack of memory. The MessageReceived signal is more informative. A numeric identifier for acknowledging the message A Unix timestamp indicating when the message was received The handle of the contact who sent the message The type of the message (normal, action, notice, etc.) A bitwise OR of the message flags The text of the message Signals that a message with the given id, timestamp, sender, type and text has been received on this channel. Applications that catch this signal and reliably inform the user of the message should acknowledge that they have dealt with the message with the AcknowledgePendingMessages method. The SendMessage method is more flexible. An integer indicating the type of the message The message to send

Request that a message be sent on this channel. When the message has been submitted for delivery, this method will return and the Sent signal will be emitted. If the message cannot be submitted for delivery, the method returns an error and no signal is emitted.

This method SHOULD return before the Sent signal is emitted.

When a Text channel implements the Messages interface, that "SHOULD" becomes a "MUST".

An unknown error occurred The requested contact was offline The requested contact is not valid The user does not have permission to speak on this channel The outgoing message was too long and was rejected by the server The channel doesn't support sending text messages to the requested contact Delivery reporting is now provided by the Messages interface. The error that occurred The Unix timestamp indicating when the message was sent The message type The text of the message

Signals that an outgoing message has failed to send. The error will be one of the values from ChannelTextSendError.

This signal should only be emitted for messages for which Sent has already been emitted and Send has already returned success.

older spec versions claimed that SendError was emitted instead of Sent, rather than in addition to Sent. However, the 0.17.3+ semantics were what we'd always actually implemented.
The MessageSent signal is more informative. Unix timestamp indicating when the message was sent The message type (normal, action, notice, etc) from ChannelTextMessageType The text of the message. If the message was, or will be, altered during transmission, this argument SHOULD reflect what other contacts will receive rather than being a copy of the argument to Send.

Signals that a message has been submitted for sending.

The type of message. An ordinary chat message. Unknown types SHOULD be treated like this. An action which might be presented to the user as "* <sender> <action>", such as an IRC CTCP ACTION (typically selected by the "/me" command). For example, the text of the message might be "drinks more coffee". A one-off or automated message not necessarily expecting a reply An automatically-generated reply message. A delivery report. This message type MUST NOT appear unless the channel supports the Messages interface; see Message_Part for the format that delivery reports must take. The Messages interface has an extensible data structure including separate booleans for most of these flags. The incoming message was truncated to a shorter length by the server or the connection manager.

The incoming message contained non-text content which cannot be represented by this interface, but has been signalled in the Messages interface.

Connection managers SHOULD only set this flag if the non-text content appears to be relatively significant (exactly how significant is up to the implementor). The intention is that if this flag is set, clients using this interface SHOULD inform the user that part of the message was not understood.

The incoming message was part of a replay of message history.

In XMPP multi-user chat, a few past messages are replayed when you join a chatroom. A sufficiently capable IRC connection manager could also set this flag on historical messages when connected to a proxy like bip or irssi-proxy. The existence of this flag allows loggers and UIs to use better heuristics when eliminating duplicates (a simple implementation made possible by this flag would be to avoid logging scrollback at all).

The incoming message has been seen in a previous channel during the lifetime of the Connection, but had not been acknowledged when that channel closed, causing an identical channel (the channel in which the message now appears) to open.

This means that a logger (which should already have seen the message in the previous channel) is able to recognise and ignore these replayed messages.

A channel type for sending and receiving messages. This channel type is primarily used for textual messages, but can also be used for formatted text, text with "attachments", or binary messages on some protocols.

Most of the methods and signals on this interface are deprecated, since they only support plain-text messages with limited metadata. See the mandatory Messages interface for the modern equivalents.

When a message is received, an identifier is assigned and a MessageReceived signal emitted, and the message is placed in a pending queue represented by the PendingMessages property. When the Handler for a channel has handled the message by showing it to the user (or equivalent), it should acknowledge the receipt of that message using the AcknowledgePendingMessages method, and the message will then be removed from the pending queue. Numeric identifiers for received messages may be reused over the lifetime of the channel.

Sending messages can be requested using the SendMessage method, which will return successfully when the message has been submitted for sending, or return an error with no signal emission if there is an immediate failure. If a message is submitted for sending but delivery of the message later fails, this is indicated by a delivery report, which is received in the same way as an incoming message.

Simple one-to-one chats (such as streams of private messages in XMPP or IRC) should be represented by a Text channel whose TargetHandleType is Contact. The expected way to request such a channel is to set the ChannelType, TargetHandleType, and either TargetHandle or TargetID in a call to EnsureChannel.

Named chat rooms whose identity can be saved and used again later (IRC channels, Jabber MUCs) are expected to be represented by Text channels with TargetHandleType = Room and the Group interface. In protocols where a chatroom can be used as a continuation of one or more one-to-one chats, these channels should also have the Conference interface.

Unnamed, transient chat rooms which cannot be rejoined by their unique identifier (e.g. a conversation on MSN which has, or once had, three or more participants) are expected to be represented by Text channels with TargetHandleType = None (and hence TargetHandle = 0), Group interface, and optionally the Conference interface.

On protocols like MSN where a conversation with a user is actually just a nameless chat room starting with exactly two members, to which more members can be invited, the initial one-to-one conversation SHOULD be represented with TargetHandleType = Contact. If a third participant joins or is invited, this SHOULD be represented by signalling a new Conference channel with the one-to-one channel in its InitialChannels, migrating the underlying protocol object from the one-to-one channel to the Conference channel, and creating a new protocol-level conversation if the one-to-one channel is re-used. See the Conference interface for more details.

This keeps the presentation of all one-to-one conversations uniform, and makes it easier to hand over a conversation from a 1-1-specific UI to a more elaborate multi-user UI; while it does require UIs to understand Conference to follow the upgrade, UIs that will deal with XMPP need to understand Conference anyway.

If a channel of type Text is closed while it has pending messages, the connection manager MUST allow this, but SHOULD open a new channel to deliver those messages, signalling it as a new channel with the NewChannels signal. The new channel should resemble the old channel, but have Requested = FALSE regardless of its previous value; the InitiatorHandle and InitiatorID should correspond to the sender of one of the pending messages.

In effect, this turns this situation, in which a client is likely to lose messages:

  • UI window is closed
  • message arrives
  • text channel emits Received
  • UI calls Close on text channel before it has seen the Received signal
  • text channel emits Closed and closes

into something nearly equivalent to this situation, which is fine:

  • UI window is closed
  • UI calls Close on text channel
  • text channel emits Closed and closes
  • message arrives
  • new text channel is created, connection emits NewChannels
  • (the same or a different) UI handles it

Requested must be set to FALSE so the replacement channel will be handled by something.

In practice, connection managers usually implement this by keeping the same internal object that represented the old channel, adjusting its properties, signalling that it was closed, then immediately re-signalling it as a new channel.

As a result, Text channels SHOULD implement Channel.Interface.Destroyable.

This "respawning" behaviour becomes problematic if there is no suitable handler for Text channels, or if a particular message repeatedly crashes the Text channel handler; a channel dispatcher can't just Close() the channel in these situations, because it will come back.

In these situations, the channel dispatcher needs a last-resort way to destroy the channel and stop it respawning. It could either acknowledge the messages itself, or use the Destroyable interface; the Destroyable interface has the advantage that it's not channel-type-dependent, so the channel dispatcher only has to understand one extra interface, however many channel types eventually need a distinction between Close and Destroy.

Opaquely-named rejoinable chatrooms (such as Skype rooms) are represented using the properties in the Room2 interface. Instructions and examples of how to request such channels are given in said interface's description.

telepathy-qt-0.9.3/spec/Connection.xml0000644000175200001440000016135512000056607022202 0ustar00collabora-develusers00000000000000 Copyright (C) 2005-2009 Collabora Limited Copyright (C) 2005-2009 Nokia Corporation Copyright (C) 2006 INdT

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

A struct representing a channel, as returned by ListChannels on the Connection interface. The object path of the channel, which is on the same bus name as the connection The channel's type The type of the handle that the channel communicates with, or Handle_Type_None if there is no associated handle The handle that the channel communicates with, or 0 if there is no associated handle

Request that the connection be established. This will be done asynchronously and errors will be returned by emitting StatusChanged signals.

Calling this method on a Connection that is already connecting or connected is allowed, and has no effect.

Request that the connection be closed. This closes the connection if it's not already in DISCONNECTED state, and destroys the connection object.

The set of optional interfaces supported by this connection. Before the connection status changes to CONNECTED, this property may change at any time, but it is guaranteed that interfaces will only be added, not removed. After the connection status changes to CONNECTED, this property cannot change further.

There is no explicit change notification; reasonable behaviour for a client would be to retrieve the interfaces list once initially, and once more when it becomes CONNECTED.

In some connection managers, certain capabilities of a connection are known to be implemented for all connections (e.g. support for SimplePresence), and some interfaces (like SimplePresence) can even be used before connecting. Other capabilities may or may not exist, depending on server functionality; by the time the connection goes CONNECTED, the connection manager is expected to have evaluated the server's functionality and enabled any extra interfaces for the remainder of the Connection's lifetime.

Clients SHOULD fall back to calling GetInterfaces if this property is not supported.
The value of the Interfaces property

Returns the set of optional interfaces supported by this connection. See Interfaces for more details.

Before version 0.17.8 calling GetInterfaces while on a connection that is not yet CONNECTED wasn't allowed. If a CM returns this error, its list of interfaces should be regarded as empty until it becomes CONNECTED.
A string identifier for the protocol Get the protocol this connection is using. Emitted whenever the SelfHandle property changes. If the connection is not yet in the CONNECTED state, this signal is not guaranteed to be emitted. Clients MAY assume that if the SelfHandle property exists, this signal will be emitted when necessary. The new value of the SelfHandle property. The handle which represents the user on this connection, which will remain valid for the lifetime of this connection, or until a change in the user's identifier is signalled by the SelfHandleChanged signal. If the connection is not yet in the CONNECTED state, the value of this property MAY be zero. For compatibility with older versions, clients should fall back to calling the GetSelfHandle method. The value of the SelfHandle property Returns the value of the SelfHandle property. Change notification is via the SelfHandleChanged signal. Use GetAll to get the SelfHandle property (and all other Connection properties) instead.

The current status of the connection. Change notification is via the StatusChanged signal.

If retrieval of property succeeds and yields the value Disconnected, this indicates that the connection has not yet been established. If connection has been attempted and failed, the Connection object SHOULD be removed from the bus entirely, meaning that retrieval of this property SHOULD fail.

Clients SHOULD fall back to calling GetStatus if this property is not supported.
The value of the Status property Get the current status as defined in the StatusChanged signal. If HasImmortalHandles is true, this method no longer does anything. The type of handle to be held A array of integer handles to hold

If HasImmortalHandles is true, which SHOULD always be the case in this version of telepathy-spec, this method does nothing and returns successfully, unless the given handle type or any of the given handles is invalid.

In older connection managers, this method notifies the connection manger that your client is holding a copy of handles which may not be in use in any existing channel or list, and were not obtained by using the RequestHandles method. For example, a handle observed in an emitted signal, or displayed somewhere in the UI that is not associated with a channel. The connection manager must not deallocate a handle where any clients have used this method to indicate it is in use until the ReleaseHandles method is called, or the clients disappear from the bus.

Note that HoldHandles is idempotent - calling it multiple times is equivalent to calling it once. If a handle is "referenced" by several components which share a D-Bus unique name, the client should perform reference counting internally, and only call ReleaseHandles when none of the cooperating components need the handle any longer.

The handle type is invalid One of the given handles is not valid
The type of handle to be inspected An array of integer handles of this type An array of identifiers corresponding to the given handles, in the same order. Return a string representation for a number of handles of a given type. The handle type is invalid One of the given handles is not valid Use the Requests.Channels property instead. An array of structs representing channels. List all the channels which currently exist on this connection. Connection managers MUST still emit this signal, but clients SHOULD listen for the Requests.NewChannels signal instead. A D-Bus object path for the channel object on this service A D-Bus interface name representing the channel type An integer representing the type of handle this channel communicates with, or Handle_Type_None if no handle is specified A handle indicating the specific contact, room or list this channel communicates with, or zero if no handle is specified

If true, the channel was requested by a client that intends to present it to the user itself (i.e. it passed suppress_handler=TRUE to the RequestChannel method), so no other handler should be launched. Clients MAY assume that channels where this is true were created by a user request.

If false, either the channel was created due to incoming information from the service, or the channel was requested by a local client that does not intend to handle the channel itself (this usage is deprecated).

Clients MUST NOT assume that only incoming channels will have this flag set to false.

Emitted when a new Channel object is created, either through user request or incoming information from the service.
If HasImmortalHandles is true, this method no longer does anything. An integer handle type (as defined in RequestHandle) An array of integer handles being held by the client

If HasImmortalHandles is true, which SHOULD always be the case in this version of telepathy-spec, this method does nothing and returns successfully, unless the given handle type or any of the given handles is invalid.

In older connection managers, this method explicitly notifies the connection manager that your client is no longer holding any references to the given handles, and that they may be deallocated if they are not held by any other clients or referenced by any existing channels. See HoldHandles for notes.

The handle type is invalid One of the given handles is not valid
Use Requests.CreateChannel or Requests.EnsureChannel instead. Connection managers MAY implement RequestChannel by raising NotImplemented, or implement fewer types of channel via this API. A D-Bus interface name representing base channel type An integer representing the handle type, or Handle_Type_None if no handle is specified A nonzero integer handle representing a contact, room, list etc. according to handle_type, or zero if the handle_type is Handle_Type_None

Clients SHOULD always set this to true.

The historical meaning was that clients that did not intend to take responsibility for displaying the channel to the user could set this to FALSE, in which case the channel dispatcher would launch an appropriate channel handler.

However, clients whose functionality relies on having a working channel dispatcher should obtain that functionality by calling methods on the channel dispatcher, so that they will get an appropriate error if the channel dispatcher is missing or not working.

The channel dispatcher itself should set this to true too, so that it will ignore the NewChannel signal that results from the creation of the channel. It can then dispatch the channel returned from this method to an appropriate handler.

So, there is no sensible use-case for setting this to false, and setting it to false can result in unhandled channels (in the case where clients assume that a channel dispatcher is present, but it isn't).

The D-Bus object path for the channel created or retrieved

Request a channel satisfying the specified type and communicating with the contact, room, list etc. indicated by the given handle_type and handle. The handle_type and handle may both be zero to request the creation of a new, empty channel, which may or may not be possible, depending on the protocol and channel type.

On success, the returned channel will always be of the requested type (i.e. implement the requested channel-type interface).

If a new, empty channel is requested, on success the returned channel will always be an "anonymous" channel for which the type and handle are both zero.

If a channel to a contact, room etc. is requested, on success, the returned channel may either be a new or existing channel to the requested entity (i.e. its TargetHandleType and TargetHandle properties are the requested handle type and handle), or a newly created "anonymous" channel associated with the requested handle in some implementation-specific way.

For example, for a contact handle, the returned channel might be "anonymous", but implement the groups interface and have the requested contact already present among the members.

If the request cannot be satisfied, an error is raised and no channel is created.

Unknown channel type The given handle does not exist or cannot be created The requested channel type cannot be created with the given handle The requested channel cannot be created because contact doesn't have the required capabilities.
A "null" handle type used to indicate the absence of a handle. When a handle type and a handle appear as a pair, if the handle type is zero, the handle must also be zero. A contact A chat room Replaced by Connection.Interface.ContactList A server-generated contact list (see Channel.Interface.Group) Replaced by Connection.Interface.ContactList A user-defined contact list (see Channel.Interface.Group) An unsigned 32-bit integer representing a handle An unsigned 32-bit integer representing a handle of type Handle_Type_Contact An unsigned 32-bit integer representing a handle of type Handle_Type_Room Replaced by Connection.Interface.ContactList An unsigned 32-bit integer representing a handle of type Handle_Type_List Replaced by Connection.Interface.ContactList An unsigned 32-bit integer representing a handle of type Handle_Type_Group If HasImmortalHandles is true, this method no longer has its reference-counting effect. The type of handle required An array of identifiers of entities to request handles for An array of integer handle numbers in the same order as the given identifiers.

Request several handles from the connection manager which represent a number of contacts, rooms or server-stored lists on the service.

If HasImmortalHandles is true, which SHOULD always be the case in this version of telepathy-spec, the handles remain valid until the connection disconnects.

The implementation of this method in older connection managers must record that these handles are in use by the client who invokes this method, and must not deallocate the handles until the client disconnects from the bus or calls the ReleaseHandles method. Where the identifier refers to an entity that already has a handle in this connection manager, this handle should be returned instead. The handle number 0 must not be returned by the connection manager.

The given identifier does not identify a valid entity of the given type. For instance, an XMPP connection would raise this error for identifiers with type Handle_Type_Room that do not contain exactly one '@' character, that contain spaces, and so on. The given handle type is not valid, or is not implemented on this connection. For instance, a connection to a protocol that doesn't have chat rooms would raise this error for room handles, and all CMs would raise this error for Handle_Type_None.
The connection is fully connected and all methods are available. Connect has been called but the connection has not yet been established. Some methods may fail until the connection has been established. If this is retrieved from GetStatus or Status, it indicates that connection has not yet been attempted. If seen in a StatusChanged signal, it indicates that the connection has failed; the Connection object SHOULD be removed from D-Bus immediately, and all subsequent method calls SHOULD fail.

A reason why the status of the connection changed. Apart from Requested, the values of this enumeration only make sense as reasons why the status changed to Disconnected.

There is no reason set for this state change. Unknown status reasons SHOULD be treated like this reason.

When disconnected for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Disconnected.

The change is in response to a user request. Changes to the Connecting or Connected status SHOULD always indicate this reason; changes to the Disconnected status SHOULD indicate this reason if and only if the disconnection was requested by the user.

When disconnected for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Cancelled.

There was an error sending or receiving on the network socket.

When the status changes from Connecting to Disconnected for this reason, the equivalent D-Bus error is either org.freedesktop.Telepathy.Error.NetworkError, org.freedesktop.Telepathy.Error.ConnectionRefused, org.freedesktop.Telepathy.Error.ConnectionFailed or some more specific error.

When the status changes from Connected to Disconnected for this reason, the equivalent D-Bus error is either org.freedesktop.Telepathy.Error.NetworkError, org.freedesktop.Telepathy.Error.ConnectionLost or some more specific error.

The username or password was invalid.

When disconnected for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.AuthenticationFailed.

There was an error negotiating SSL on this connection, or encryption was unavailable and require-encryption was set when the connection was created.

When disconnected for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.EncryptionNotAvailable if encryption was not available at all, or org.freedesktop.Telepathy.Error.EncryptionError if encryption failed.

In general, this reason indicates that the requested account name or other identification could not be used due to conflict with another connection. It can be divided into three cases:

  • If the status change is from Connecting to Disconnected and the 'register' parameter to RequestConnection was present and true, the requested account could not be created on the server because it already exists. The equivalent D-Bus error is org.freedesktop.Telepathy.Error.RegistrationExists.
  • If the status change is from Connecting to Disconnected but the 'register' parameter is absent or false, the connection manager could not connect to the specified account because a connection to that account already exists. The equivalent D-Bus error is org.freedesktop.Telepathy.Error.AlreadyConnected. In some protocols, like XMPP (when connecting with the same JID and resource as an existing connection), the existing connection "wins" and the new one fails to connect.
  • If the status change is from Connected to Disconnected, the existing connection was automatically disconnected because a new connection to the same account (perhaps from a different client or location) was established. The equivalent D-Bus error is org.freedesktop.Telepathy.Error.ConnectionReplaced. In some protocols, like MSNP (when connecting twice with the same Passport), the new connection "wins" and the existing one is automatically disconnected.

The server did not provide a SSL certificate.

When disconnected for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Cert.NotProvided.

The server's SSL certificate is signed by an untrusted certifying authority. This error SHOULD NOT be used to represent a self-signed certificate: use the more specific Cert_Self_Signed reason for that.

When disconnected for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Cert.Untrusted.

The server's SSL certificate has expired.

When disconnected for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Cert.Expired.

The server's SSL certificate is not yet valid.

When disconnected for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Cert.NotActivated.

The server's SSL certificate did not match its hostname.

When disconnected for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Cert.HostnameMismatch.

The server's SSL certificate does not have the expected fingerprint.

When disconnected for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Cert.FingerprintMismatch.

The server's SSL certificate is self-signed.

When disconnected for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Cert.SelfSigned.

There was some other error validating the server's SSL certificate.

When disconnected for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Cert.Invalid.

The server's SSL certificate has been revoked.

When disconnected for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Cert.Revoked.

The server's SSL certificate uses an insecure algorithm, or is cryptographically weak.

When disconnected for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Cert.Insecure.

The length in bytes of the server certificate, or the depth of the sever certificate chain exceed the limits imposed by the crypto library.

When disconnected for this reason, the equivalent D-Bus error is org.freedesktop.Telepathy.Error.Cert.LimitExceeded

Emitted when an error occurs that renders this connection unusable.

Whenever this signal is emitted, it MUST immediately be followed by a StatusChanged signal with status Connection_Status_Disconnected and an appropriate reason code.

Connection managers SHOULD emit this signal on disconnection, but need not do so. Clients MUST support connection managers that emit StatusChanged(Disconnected, ...) without first emitting ConnectionError.

This signal provides additional information about the reason for disconnection. The reason for connection is always straightforward - it was requested - so it does not need further explanation. However, on errors, it can be useful to provide additional information.

The Connection_Status_Reason is not given here, since it will be signalled in StatusChanged. A reasonable client implementation would be to store the information given by this signal until StatusChanged is received, at which point the information given by this signal can be used to supplement the StatusChanged signal.

The name of a D-Bus error describing the error that occurred, which may correspond to a Connection_Status_Reason, or may be a more specific Telepathy error (such as org.freedesktop.Telepathy.Error.ConnectionRefused for Connection_Status_Reason_Network_Error) or a protocol-specific or connection-manager-specific error in a suitable namespace. For instance, a SIP connection manager could signal "402 Payment Required" as an error in a connection-manager-specific namespace, or a link-local XMPP implementation that used Avahi could provide the error given to it by the avahi-daemon.

Additional information about the error, which may include the following well-known keys:

debug-message (s)
Debugging information on the change, corresponding to the message part of a D-Bus error message, which SHOULD NOT be displayed to users under normal circumstances
server-message (s)
A human-readable message from the server explaining what happened. This may be in the user's native language, or in the server operator's native language, or even in Lojban.
user-requested (b), expected-hostname (s), certificate-hostname (s)
The same details defined in TLS_Certificate_Rejection.
An integer indicating the new status, as defined by ConnectionStatus An integer indicating the reason for the status change, as defined by ConnectionStatusReason Emitted when the status of the connection changes. All states and reasons have numerical values, as defined in ConnectionStatus and ConnectionStatusReason.

The same string that would be returned by InspectHandles. As a special case, this is always present in the result of GetContactAttributes, whether it was explicitly requested or not.

Register a client's interest in notifications related to one or more interfaces.

Groups of notifications are identified by a token which is either a D-Bus interface name, or a string that starts with a D-Bus interface name. The meaning of each token is given by that D-Bus interface, which MUST define it in its documentation.

Initially, all interests are in entire interface, but allowing other strings allows subscription to part of an interface; for instance, an interest in ...MailNotification/count could track the number of messages without caring about their detailed content.

For each token with which this method interacts, the Connection tracks an "interest count" (like a reference count) for each unique bus name that has called this method. When a client calls this method, for each token, the interest count for its unique bus name is incremented; when RemoveClientInterest is called, all interest counts for that unique bus name are decremented. If the unique bus name leaves the bus (for instance, if the client crashes or exits), all interest counts for that unique bus name are set to zero.

The Connection can then use these reference counts to avoid subscribing to protocol-level notifications unless at least one client has a non-zero interest count for the relevant token.

This method exists to reduce memory and network overhead when there is no active subscription.

One situation where this is useful is Location: on XMPP, location updates are received over PEP. If the Connection advertises the geoloc+notify capability, it will be sent location updates for all contacts. To avoid consuming resources for this, the connection should avoid advertising that capability until a client has expressed an interest in contacts' locations.

Another example of a protocol that benefits from this method is the Google XMPP Mail Notification extension, which can be used to implement MailNotification. In this protocol, the CM receives a notification that something has changed, but to get more information, the CM must request this information. Knowing that nobody is currently interested in this information, the CM can avoid generating useless network traffic. Similarly, the CM may free the list of unread messages to reduce memory overhead.

If this method is called for an interface that might require protocol-level subscription, but the connection cannot set up that subscription yet (for instance because the Status is not Connected yet), the Connection MUST remember the client's interest, and attempt to subscribe to the appropriate protocol feature when this becomes possible.

Clients MAY ignore any errors raised by this method; it is intended to be called with the reply ignored.

The only reason it could fail is if it's unimplemented, in which case the only thing the client can usefully do is to proceed as if it had succeeded.

Interfaces or parts of interfaces in which to register an interest, represented by either a DBus_Interface, or a string prefixed with a DBus_Interface.

If the Connection does not support one of these tokens, this is not considered to be an error; the unsupported token is simply ignored.

Release an interest registered using AddClientInterest. See that method's documentation for details.

Clients MAY ignore any errors raised by this method; it is intended to be called with the reply ignored.

The only reasons it could fail are if it's unimplemented, or if the client's reference-counting is wrong and it has tried to remove a client interest that it did not add. In both cases, there's nothing the client could do about it.

Interfaces or parts of interfaces that were previously passed to AddClientInterest.

True if handles last for the whole lifetime of the Connection. This SHOULD be the case in all connection managers, but clients MUST interoperate with older connection managers (which reference-count handles).

This models a connection to a single user account on a communication service. Its basic capability is to provide the facility to request and receive channels of differing types (such as text channels or streaming media channels) which are used to carry out further communication.

In order to allow Connection objects to be discovered by new clients, the object path and well-known bus name MUST be of the form /org/freedesktop/Telepathy/Connection/cmname/proto/account and org.freedesktop.Telepathy.Connection.cmname.proto.account where:

  • cmname is the same Connection_Manager_Name that appears in the connection manager's object path and well-known bus name
  • proto is the Protocol name as seen in ListProtocols, but with "-" replaced with "_" to get a valid object path/bus name
  • account is some non-empty sequence of ASCII letters, digits and underscores not starting with a digit

account SHOULD be formed such that any valid distinct connection instance on this protocol has a distinct name. This might be formed by including the server name followed by the user name (escaped via some suitable mechanism like telepathy-glib's tp_escape_as_identifier() function to preserve uniqueness); on protocols where connecting multiple times is permissable, a per-connection identifier might be necessary to ensure uniqueness.

Clients MAY parse the object path to determine the connection manager name and the protocol, but MUST NOT attempt to parse the account part. Connection managers MAY use any unique string for this part.

As well as the methods and signatures below, arbitrary interfaces may be provided by the Connection object to represent extra connection-wide functionality, such as the Connection.Interface.SimplePresence for receiving and reporting presence information, and Connection.Interface.Aliasing for connections where contacts may set and change an alias for themselves. These interfaces can be discovered using the GetInterfaces method.

Contacts, rooms, and server-stored lists (such as subscribed contacts, block lists, or allow lists) on a service are all represented by immutable handles, which are unsigned non-zero integers which are valid only for the lifetime of the connection object, and are used throughout the protocol where these entities are represented, allowing simple testing of equality within clients.

Zero as a handle value is sometimes used as a "null" value to mean the absence of a contact, room, etc.

Handles have per-type uniqueness, meaning that every (handle type, handle number) tuple is guaranteed to be unique within a connection and that a handle alone (without its type) is meaningless or ambiguous. Connection manager implementations should reference count these handles to determine if they are in use either by any active clients or any open channels, and may deallocate them when this ceases to be true. Clients may request handles of a given type and identifier with the RequestHandles method, inspect the entity identifier with the InspectHandles method, keep handles from being released with HoldHandles, and notify that they are no longer storing handles with ReleaseHandles.

Previously, the account part of Connection bus names/object paths was allowed to have more than one component (i.e. contain dots or slashes), resulting in Connection bus names and object paths with more than 7 components. We now restrict Connection bus names/object paths to have exactly 7 components. The Requests and Contacts interfaces are now mandatory. Their functionality will be merged into the main Connection interface at some point in future.
telepathy-qt-0.9.3/spec/Account_Interface_Addressing.xml0000644000175200001440000000723712000056607025620 0ustar00collabora-develusers00000000000000 Copyright © 2010 Collabora Ltd

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API)

Some accounts can be used for multiple protocols; for instance, SIP and Skype accounts can often be used to contact the PSTN, MSN and Yahoo accounts can contact each other, and XMPP accounts can potentially contact many protocols via a transport.

However, if the user does not intend to make use of this functionality, user interfaces can improve clarity by not displaying it: for instance, if a user prefers to call phone numbers via a particular SIP account, when an address book displays a contact with a phone number, it is desirable to display a "call with SIP" button for that account, but avoid displaying similar buttons for any other configured SIP or Skype accounts.

The purpose of this interface is to allow this "for use with" information to be recorded and retrieved.

A list of fields indicating the type of URI addressing scheme the the account should be used for (eg 'tel') indicating the account is intended for use by applications offering a telephony UI, or 'sip' or 'xmpp' for those protocols

Note that these fields signify intent, not ability: It is entirely possible that an account which can be used for a given URI scheme is not wanted for it by the user, and therefore not flagged as such in this field.

Associate (or disassociate) an account with a particular URI addressing scheme, (such as 'tel' for telephony)

URI scheme to associate/disassociate the account with/from

True to associate this account with a given addressing scheme

False if the account should not be associated with said scheme

telepathy-qt-0.9.3/spec/Connection_Interface_Avatars.xml0000644000175200001440000005436412000056607025644 0ustar00collabora-develusers00000000000000 Copyright (C) 2005-2008 Collabora Limited Copyright (C) 2005-2008 Nokia Corporation Copyright (C) 2006 INdT

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

strengthened uniqueness requirements so (CM name, protocol, token) is unique; previously only (our Account, remote contact identifier, token) was required to be unique

An opaque token chosen by the connection manager, representing a particular avatar.

Because avatars can be relatively large images, most protocols provide a way to detect whether an old avatar is still valid, or whether an avatar has changed, without pushing the actual avatar data to all clients.

The connection manager MUST choose these tokens in a way that makes it highly unlikely that two different avatars with the same connection manager and protocol will have the same token.

This means that clients MAY use the triple (Connection_Manager_Name, Protocol, avatar token) as a key for their avatar cache. For instance, an avatar for a telepathy-gabble Jabber contact might be stored in a file .../gabble/jabber/4e199b4a1c40b497a95fcd1cd896351733849949.png.

For instance, some protocols (like XMPP) identify avatars by a hash of the avatar data; in this case, the hash can be used as the avatar token.

Some protocols identify avatars by the timestamp of the last change to the avatar; in these protocols it would be necessary for the connection manager to encode both the timestamp and the contact's identifier into the avatar token in order to ensure uniqueness.

This token SHOULD be kept short and reasonably suitable for use in a filename, but MAY contain any UTF-8 character (so clients using avatar tokens in filenames MUST be prepared to escape characters that are not valid in filenames). Connection managers for protocols where tokens would otherwise become inconveniently large or contain many unsuitable characters SHOULD hash the identifying data to generate the token.

A dictionary whose keys are contact handles and whose values are avatar tokens. An integer handle for the contact whose avatar has changed Unique token for their new avatar Emitted when the avatar for a contact has been updated, or first discovered on this connection. If the token differs from the token associated with the client's cached avatar for this contact, the new avatar should be requested with RequestAvatars. The contact whose avatar has been retrieved The token corresponding to the avatar An array of bytes containing the image data A string containing the image MIME type (eg image/jpeg), or empty if unknown Emitted when the avatar for a contact has been retrieved. Fall back to calling GetAvatarRequirements if getting this property fails. An array of supported MIME types (e.g. "image/jpeg"). Clients MAY assume that the first type in this array is preferred. This property cannot change after the Connection goes to the Connected state. Fall back to calling GetAvatarRequirements if getting this property fails. The minimum height in pixels of an avatar on this protocol, which MAY be 0. This property cannot change after the Connection goes to the Connected state. Fall back to calling GetAvatarRequirements if getting this property fails. The minimum width in pixels of an avatar on this protocol, which MAY be 0. This property cannot change after the Connection goes to the Connected state. The recommended height in pixels of an avatar on this protocol, or 0 if there is no preferred height. This property cannot change after the Connection goes to the Connected state. In XMPP a recommended width is given by the protocol specification; in proprietary protocols, using the same avatar size as the proprietary client is likely to lead to the best display to other users. The recommended width in pixels of an avatar on this protocol, or 0 if there is no preferred width. This property cannot change after the Connection goes to the Connected state. The rationale is the same as for RecommendedAvatarHeight. Fall back to calling GetAvatarRequirements if getting this property fails. The maximum height in pixels of an avatar on this protocol, or 0 if there is no limit. This property cannot change after the Connection goes to the Connected state. Fall back to calling GetAvatarRequirements if getting this property fails. The maximum width in pixels of an avatar on this protocol, or 0 if there is no limit. This property cannot change after the Connection goes to the Connected state. Fall back to calling GetAvatarRequirements if getting this property fails. The maximum size in bytes of an avatar on this protocol, or 0 if there is no limit. This property cannot change after the Connection goes to the Connected state. Use GetAll to retrieve the D-Bus properties on this interface, falling back to this method on failure. An array of supported MIME types (eg image/jpeg) The minimum image width in pixels The minimum image height in pixels The maximum image width in pixels, or 0 if there is no limit The maximum image height in pixels, or 0 if there is no limit The maximum image size in bytes, or 0 if there is no limit Get the required format of avatars on this connection. An array of handles representing contacts An array of avatar tokens or empty strings (if no avatar is set) in the same order as the given array of contact handles Use GetKnownAvatarTokens instead. Get the unique tokens for all of the given contacts' avatars. Using this method in new Telepathy clients is deprecated; use GetKnownAvatarTokens instead. An array of handles representing contacts A dictionary of handles mapped to avatar tokens, containing only the known avatar tokens. Get the unique tokens for the given contacts' avatars. These tokens can be persisted across connections, and should be used by the client to check whether the avatars have been updated. For handles other than the self handle, only tokens that are already known are returned; an empty token means the given contact has no avatar. However, a CM must always have the tokens for the self handle if one is set (even if it is set to no avatar). On protocols where the avatar does not persist between connections, a CM should omit the self handle from the returned map until an avatar is explicitly set or cleared. An integer handle for the contact to request the avatar for An array of bytes containing the image data A string containing the image MIME type (eg image/jpeg), or empty if unknown Use RequestAvatars instead. Request the avatar for a given contact. Using this method in new Telepathy clients is deprecated; use RequestAvatars instead. The contact does not currently have an avatar. The contacts to retrieve avatars for Request avatars for a number of contacts. The AvatarRetrieved signal is emitted for each avatar retrieved. If the handles are valid but retrieving an avatar fails (for any reason, including the contact not having an avatar) the AvatarRetrieved signal is not emitted for that contact. An array of bytes representing the avatar image data A string representing the image MIME type The string token of the new avatar Set a new avatar image for this connection. The avatar image must respect the requirements obtained by GetAvatarRequirements. Remove the avatar image for this connection.

The same string that would be returned by GetKnownAvatarTokens (omitted from the result if the contact's avatar token is not known, present as an empty string if the contact is known not to have an avatar). Unlike in the GetKnownAvatarTokens method, the avatar tokens for the self handle aren't required to be present. This attribute should not be used to determine whether or not the Avatar needs to be set.

An interface for requesting avatars for contacts on a given connection, receiving notification when avatars are changed, and publishing your own avatar.

Avatars are identified by a string, the Avatar_Token, which represents a particular avatar. Tokens MUST be chosen by the connection manager in such a way that the triple (Connection_Manager_Name, Protocol, Avatar_Token) uniquely identifies an avatar. An empty token means that an avatar has not been set for this contact, and a changed token implies the contact's avatar has changed, but the strings should otherwise be considered opaque by clients.

A client should use GetKnownAvatarTokens to request the tokens for the avatars of all the contacts it is interested in when it connects. The avatars can then be requested using RequestAvatars for the contacts. Clients should bind to the AvatarUpdated signal and request a new copy of the avatar when a contacts' avatar token changes. Clients should cache the token and data of each contact's avatar between connections, to avoid repeatedly retrieving the same avatar.

To publish an avatar, a client should use SetAvatar to provide an image which meets the requirements returned by the GetAvatarRequirements function. On some protocols the avatar is stored on the server, so setting the avatar is persistent, but on others it is transferred via a peer to peer mechanism, so needs to be set every connection. Hence, on every connection, clients should inspect the avatar token of the connection's self handle using GetKnownAvatarTokens; if the self handle is not in the returned map, the client should re-set the avatar. If the self handle's avatar token is known, but the avatar has been changed locally since the last connection, the client should upload the new avatar; if the avatar has not changed locally, then the client should download the avatar from the server if its token differs from the that of the local avatar.

To remove the published avatar on protocols which have persistent avatars, a client should use the ClearAvatar method. This method can safely be used even if there is no avatar for this connection.

telepathy-qt-0.9.3/spec/Connection_Interface_Contact_Blocking.xml0000644000175200001440000002400612000056607027434 0ustar00collabora-develusers00000000000000 Copyright © 2009–2011 Collabora Ltd. Copyright © 2009 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

Changes from the draft: methods and signals now return Handle_Identifier_Map (a{us}) rather than bare lists of contact handles (au)

An interface for connections where contacts can be blocked from communicating with this user and receiving this user's presence. Clients may retrieve a list of currently-blocked contacts using RequestBlockedContacts, and listen for BlockedContactsChanged to be notified when contacts are blocked and unblocked. The BlockContacts and UnblockContacts methods do what they say on the tin; depending on the value of the ContactBlockingCapabilities property, contacts may be reported for spam or other abuse when calling BlockContacts.

This interface is intended for protocols where blocking contacts persists on the server between connections; connection managers for protocols with no server-side support for blocking contacts MAY choose to implement this interface using an on-disk file of blocked contacts or some other means to store blocked contacts between connections.

This interface is intended to replace the ContactList channel with TargetHandleType List and TargetID "deny" (along with the ContactList and ContactGroups interfaces replacing other channels with TargetHandleType List and TargetHandleType Group, respectively).

Direct the server to block some contacts. The precise effect is protocol-dependent, but SHOULD include ignoring all current and subsequent communications from the given contacts, avoiding sending presence to them in future, and if they were already receiving the local user's presence, behaving as if the local user went offline.

Some contacts to block. If some of the contacts in this list are already blocked, the connection manager MUST act as if they were not specified in this list.

In addition to blocking, report these contacts as abusive to the server administrators.

Clients can determine whether this capability is available by checking the ContactBlockingCapabilities property. If this argument is set to True by a client despite ContactBlockingCapabilities not containing the Can_Report_Abusive flag, the connection manager SHOULD act as if it were False and simply block the supplied contacts.

A correct user interface shouldn't get this far without knowing that reporting abusive contacts is not supported. If it does, then the user has expressed their intention to block these contacts. Returning an error would leave the UI with three options:

  • Ignore the error, leaving the contacts not actually blocked;
  • Display an error to the user;
  • Call this method again, passing False for this argument.

None of these seem preferable to the CM just ignoring this flag if it doesn't support it: that way, the contacts will be blocked, as the user requested, and UIs have fewer ways to mess up entirely.

Direct the server to unblock some contacts.

Some contacts to unblock. If some of the contacts in this list are not currently blocked, the connection manager MUST act as if they were not specified in this list.

List the contacts that are blocked.

Clients SHOULD allow a relatively long timeout for calls to this method, since on some protocols contact blocking is part of the contact list, which can take a significant time to retrieve.

The blocked contacts’ handles, together with their identifiers.

Emitted when the list of blocked contacts is first retrieved (before returning from any pending calls to RequestBlockedContacts), and whenever the list of blocked contacts subsequently changes.

Contacts added to the result of RequestBlockedContacts. Contacts removed from the result of RequestBlockedContacts.

True if the contact would be in the result of RequestBlockedContacts; False or omitted if the contact is not blocked, or if it is unknown whether the contact is blocked.

Additional capabilities for contact blocking; currently, this is limited to whether contacts may be reported as abusive.

Note that there is no capability for supporting blocking itself: the presence of this interface on a Connection indicates that blocking contacts is supported.

When calling BlockContacts, the contacts may be reporting as abusive to the server administrators by setting Report_Abusive to True.
telepathy-qt-0.9.3/spec/Channel_Interface_Chat_State.xml0000644000175200001440000001424212000056607025522 0ustar00collabora-develusers00000000000000 Copyright (C) 2007 Collabora Limited

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

A map from contacts to their chat states. A contact The contact's chat state

A map containing the chat states of all contacts in this channel whose chat state is not Inactive.

Contacts in this channel, but who are not listed in this map, may be assumed to be in the Inactive state.

In implementations that do not have this property, its value may be assumed to be empty until a ChatStateChanged signal indicates otherwise.

This property was not present in older versions of telepathy-spec, because chat states in XMPP are not state-recoverable (if you miss the change notification signal, there's no way to know the state). However, this property still allows clients to recover state changes that were seen by the CM before the client started to deal with the channel.

In CMs that follow older spec versions, assuming Inactive will mean that initial chat states will always be assumed to be Inactive, which is the best we can do. XEP 0085 specifies Inactive as the "neutral" state to be assumed unless told otherwise.

The new state. Set the local state and notify other members of the channel that it has changed. An integer handle for the contact. The new state of this contact. Emitted when the state of a member of the channel has changed. This includes local state. The contact has effectively ceased participating in the chat. The contact has not been active for some time. The contact is actively participating in the chat. The contact has paused composing a message. The contact is composing a message to be sent to the chat.

An interface for channels for receiving notifications of remote contacts' state, and for notifying remote contacts of the local state.

Clients should assume that a contact's state is Channel_Chat_State_Inactive unless they receive a notification otherwise.

The Channel_Chat_State_Gone state is treated differently to other states:

  • It may not be used for multi-user chats
  • It may not be explicitly sent
  • It should be automatically sent when the channel is closed
  • It must not be sent to the peer if a channel is closed without being used
  • Receiving it must not cause a new channel to be opened

The different states are defined by XEP-0085, but may be applied to any suitable protocol.

telepathy-qt-0.9.3/spec/Protocol_Interface_Addressing.xml0000644000175200001440000003551112000056607026021 0ustar00collabora-develusers00000000000000 Copyright © 2010 Collabora Ltd.

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API). From the draft, NormalizeURI was renamed to NormalizeContactURI, clarifying that it removes any actions from the URI.

An interface for protocols that support multiple forms of addressing contacts, for example through vCard addresses and URIs.

If the ConnectionManager has a .manager file, and it supports this interface, the interface's immutable properties must be represented in the file; the representation is described as part of the documentation for each property.

For instance, a SIP connection manager might have the following lines in the .manager file.

[Protocol sip]
AddressableVCardFields=tel;x-sip;
AddressableURISchemes=tel;sip;

The vCard fields that can be used to request a contact with normalized to lower case. If the URL vCard field is addressable, a colon, followed by the supported URI schemes will be concatenated.

For example: ["tel", "x-sip"].

The url vCard field MUST NOT appear here; see AddressableURISchemes instead.

In practice, protocols have a limited set of URI schemes that make sense to resolve as a contact.

Connection managers with a .manager file MUST cache this property in the protocol's section of the .manager file if it is non-empty, using the key AddressableVCardFields. The corresponding value is a list of strings, each followed with a semicolon and in the syntax of the "localestring" type from the Desktop Entry Specification.

Well-known vCard fields:

tel
The TEL vCard field. Used for phone numbers.
x-sip
The X-SIP vCard field. Used for SIP addresses.
x-aim
The X-AIM vCard field. Used for AIM user IDs.
x-icq
The X-ICQ vCard field. Used for ICQ UINs.
x-skype
The X-SKYPE vCard field. Used for Skype user names or telephone numbers. There is also a X-SKYPE-USERNAME field, but for Telepathy purposes, x-skype is preferred
x-groupwise
The X-GROUPWISE vCard field. Used for Groupwise contacts.
x-gadugadu
The X-GADUGADU vCard field. Used for Gadu-Gadu contacts.
x-jabber
The X-JABBER vCard field. Used for XMPP JIDs.
x-msn
The X-MSN vCard field. Used for MSN contacts.
x-yahoo
The X-YAHOO vCard field. Used for Yahoo! IDs.
x-facebook-id
Used for Facebook IDs in XMPP. If the user JID is "-12345@chat.facebook.com" then the x-facebook-id is "12345"

The URI schemes that are supported by this protocol.

For example: ["tel", "sip"].

This property should only be used when the connection is offline. When it is connected the addressable URI schemes should be retrieved from the Requests.RequestableChannelClasses's TargetURIScheme fixed-property instead.

Connection managers with a .manager file MUST cache this property in the protocol's section of the .manager file if it is non-empty, using the key AddressableURISchemes. The corresponding value is a list of strings, each followed with a semicolon and in the syntax of the "localestring" type from the Desktop Entry Specification.

Well-known URI schemes:

sip
SIP protocol. For example: sip:julien@example.com.
sips
Secure (encrypted) SIP protocol. For example: sips:julien@example.com.
tel
Used for telephone numbers. For example: tel:+12065551234.
xmpp
XMPP protocol. For example: xmpp:julien@example.com.
msnim
For the purposes of Protocol.Interface.Addressing, Connection.Interface.Addressing1, and Channel.Interface.Addressing1, the verb part is ignored, and SHOULD be add; the contact field in the query string is used to identify the contact. For example: msnim:add?contact=julien.
aim
For the purposes of Protocol.Interface.Addressing, Connection.Interface.Addressing1, and Channel.Interface.Addressing1, the verb part is ignored, and SHOULD be addbuddy; the screenname field in the query string is used to identify the contact. For example: aim:addbuddy?screenname=julien.
skype
Skype protocol. For example: skype:julien.
ymsgr
For the purposes of Protocol.Interface.Addressing, Connection.Interface.Addressing1, and Channel.Interface.Addressing1, the verb part is ignored, and SHOULD be addfriend; the query string is used to identify the contact. For example: ymsgr:addfriend?julien.
gg
Gadu-Gadu protocol. For example: gg:julien.

Attempt to normalize the given vCard address. Where possible, this SHOULD return an address that would appear in the org.freedesktop.Telepathy.Connection.Interface.Addressing1/addresses attribute for a contact on a connected Connection.

If full normalization requires network activity or is otherwise impossible to do without a Connection, this method SHOULD perform a best-effort normalization.

An example would be a vCard TEL field with a formatted number in the form of +1 (206) 555 1234, this would be normalized to +12065551234.

This method MAY simply raise NotImplemented on some protocols, if it has no use.

The vCard field of the address we are normalizing. The field name SHOULD be in lower case, and MUST appear in AddressableVCardFields. The address to normalize, which is assumed to belong to a contact (and not, for instance, a chatroom or server). The vCard address, normalized as much as possible. The vCard field is not supported (it is not in AddressableVCardFields). The address is syntactically incorrect.
(renamed from NormalizeURI)

Attempt to normalize the given contact URI. Where possible, this SHOULD return an address that would appear in the org.freedesktop.Telepathy.Connection.Interface.Addressing1/uris attribute for a contact on a connected Connection.

If full normalization requires network activity or is otherwise impossible to do without a Connection, this method SHOULD perform a best-effort normalization.

If the URI has extra information beyond what's necessary to identify a particular contact, such as an XMPP resource or an action to carry out, this extra information SHOULD be removed. If all URIs in a scheme contain a verb or action (like aim, ymsgr and msnim URIs), then the verb SHOULD be replaced with the one specified in AddressableURISchemes.

This method is intended to normalize URIs stored in address books, for instance. In protocols like XMPP, if you vary the resource or action (query string), the URI still refers to the same high-level contact.

For instance, xmpp:romeo@Example.Com/Empathy?message;body=Hello would be normalized to xmpp:romeo@example.com, and aim:goim?screenname=Romeo%20M&message=Hello would be normalized to aim:addbuddy?screenname=romeom.

This method MAY simply raise NotImplemented on some protocols, if it has no use.

The URI to normalize, which is assumed to refer to a contact (as opposed to, for instance, a chatroom or a server).

In some protocols, like XMPP, there is no way to tell whether a given URI refers to a contact or a chatroom by looking at its syntax.

The URI's scheme (i.e. the part before the first colon) MUST appear in AddressableURISchemes.

A URI, normalized as much as possible. The URI scheme is not supported (it is not in AddressableURISchemes).

The URI is syntactically incorrect or cannot be interpreted as a reference to a contact.

For instance, aim:!? is not a valid AIM URI, while aim:goaway?message=Absent is a valid AIM URI, but not a contact.

telepathy-qt-0.9.3/spec/Protocol_Interface_Avatars.xml0000644000175200001440000001435212000056607025337 0ustar00collabora-develusers00000000000000 Copyright © 2009-2010 Collabora Ltd.

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API)

An interface for protocols where it might be possible to set the user's avatar, and the expected size limits and supported MIME types are known before connecting.

If the avatar requirements cannot be discovered while offline, it's impossible to avoid setting the Account's Avatar property to an unsupported avatar.

Each property on this interface SHOULD be cached in the .manager file, using a key of the same name as the property in the [Protocol proto] group. All properties are encoded in ASCII decimal in the obvious way, except for SupportedAvatarMIMETypes which is encoded as a sequence of strings each followed by a semicolon (as for the "localestrings" type in the Desktop Entry Specification).

For instance, an XMPP connection manager might have this .manager file:

[Protocol jabber]
Interfaces=org.freedesktop.Telepathy.Protocol.Interface.Avatars;
param-account=s required
param-password=s required
SupportedAvatarMIMETypes=image/png;image/jpeg;image/gif;
MinimumAvatarHeight=32
RecommendedAvatarHeight=64
MaximumAvatarHeight=96
MinimumAvatarWidth=32
RecommendedAvatarWidth=64
MaximumAvatarWidth=96
MaximumAvatarBytes=8192
The expected value of the Connection.Interface.Avatars.SupportedAvatarMIMETypes property on connections to this protocol. The expected value of the Connection.Interface.Avatars.MinimumAvatarHeight property on connections to this protocol. The expected value of the Connection.Interface.Avatars.MinimumAvatarWidth property on connections to this protocol. The expected value of the Connection.Interface.Avatars.RecommendedAvatarHeight property on connections to this protocol. The expected value of the Connection.Interface.Avatars.RecommendedAvatarWidth property on connections to this protocol. The expected value of the Connection.Interface.Avatars.MaximumAvatarHeight property on connections to this protocol. The expected value of the Connection.Interface.Avatars.MaximumAvatarWidth property on connections to this protocol. The expected value of the Connection.Interface.Avatars.MaximumAvatarBytes property on connections to this protocol.
telepathy-qt-0.9.3/spec/Channel_Interface_Subject.xml0000644000175200001440000001337512000056607025110 0ustar00collabora-develusers00000000000000 Copyright © 2010–2011 Collabora Ltd.

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(version 2)

An interface channels can implement to support subjects. Most of the time this will be implemented by channels implementing the Room2 interface, but some protocols support subjects in 1-to-1 chats (such as XMPP). Note that this interface is not restricted to Text channels, and can also be used on Call channels.

The new subject.

Set the room's subject. Clients SHOULD look at the subject flags before calling this method as the user might not have permission to set the subject.

A successful return of this method indicates a successful change in subject, but clients should still listen for changes to the Subject property for further changes by other users or the server.

The human-readable subject on the channel such as the topic in an IRC channel, or the room name in XMPP MUCs.

This property replaces the subject Telepathy property of Text channels, as Telepathy properties are soon to be deprecated completely.

This property may change during the lifetime of the channel and MUST not be included in a channel request.

The normalized contact ID representing who last modified the subject, or the empty string if it is not known.

This property replaces the subject-contact Telepathy property of Text channels, as Telepathy properties are soon to be deprecated completely.

The handle corresponding to Actor, or 0 if the Actor is unknown.

A unix timestamp indicating when the subject was last modified, or INT_MAX64 if unknown.

This property replaces the subject-timestamp Telepathy property of Text channels, as Telepathy properties are soon to be deprecated completely.

TRUE if the Subject property can be set by the user by calling SetSubject, otherwise FALSE.

If implementations are unsure of what this value should be it SHOULD still be set to what it believes the value is. As a result, clients should be aware that SetSubject can still fail even with this property set to TRUE.

In XMPP it is impossible to know whether an occupant can set the subject as XMPP server implementations are wildly inconsistent.
telepathy-qt-0.9.3/spec/Channel_Type_Server_Authentication.xml0000644000175200001440000001372012000056607027031 0ustar00collabora-develusers00000000000000 Copyright © 2010 Collabora Limited

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API)

The type for a channel representing an authentication step with the server. The actual authentication functionality is implemented by the additional interface named in AuthenticationMethod, such as Channel.Interface.SASLAuthentication.

Future authentication steps also supported by this channel type might include solving a captcha and/or agreeing to an EULA or terms-of-use document; each of these would be represented by a channel with this type, but a different AuthenticationMethod.

Channels of this type will normally be be signalled and dispatched while the Connection owning them is in the CONNECTING state. They MAY also appear on a Connection in the CONNECTED state, for instance if periodic re-authentication is required.

Normally, only one channel of this type will exist on a given Connection; if there is more than one, the handler must complete authentication with each of them in turn.

Channels of this type cannot be requested with methods such as CreateChannel. They always have Requested = False, TargetHandleType = None and TargetHandle = 0.

While it is CONNECTING, the Connection MUST NOT proceed with connection, or signal StatusChanged to the CONNECTED state, until each channel of this type has either been accepted as having a positive result (for instance, on SASL channels this is done with the AcceptSASL method), or closed with the Close method.

ServerAuthentication channels normally represent the client authenticating itself to the server, but can also be used for the server to authenticate itself to the client (i.e. prove that it is in fact the desired server and not an imposter). Until the authentication handler has confirmed this, connection should not continue.

If a channel of this type is closed with the Close method before authentication has succeeded, this indicates that the Handler has given up its attempts to authenticate or that no Handler is available.

If this occurs, the connection manager MAY attempt to continue connection (for instance, performing SASL authentication by using any credentials passed to RequestConnection, for instance from the Account.Parameters). If this fails or has already been tried, the Connection will disconnect.

In particular, the ChannelDispatcher will close the channel if it cannot find a handler.

When the connection is done with the channel and it is no longer needed, it is left open until either the connection state turns to DISCONNECTED or the handler closes the channel. The channel SHOULD NOT close itself once finished with.

This property defines the method used for the authentication step represented by this channel, which MUST be one of this channel's Interfaces.

The initially-defined interface that can be used here is Channel.Interface.SASLAuthentication.

telepathy-qt-0.9.3/spec/Account_Interface_Avatar.xml0000644000175200001440000000626712000056607024755 0ustar00collabora-develusers00000000000000 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

This interface extends the core Account interface to provide a user-settable avatar image.

The avatar could have been a property on the core Account interface, but was moved to a separate interface because it is likely to be large. This means that clients can safely use GetAll to get properties on the core Account interface without flooding the session bus with large images.

A struct containing avatar data marked with its MIME type.

May be set to an empty byte-array and an empty string, indicating no avatar.

The avatar to set on this account for display to other contacts, represented as a structure containing the bytes of the avatar, and the MIME type as a string; may be set to an empty byte-array and an empty string to indicate no avatar. When the account becomes connected, the account manager SHOULD set this avatar using SetAvatar if appropriate. Emitted when the Avatar property changes. The avatar itself is deliberately not included in this signal, to reduce bus traffic in the (likely common) case where no running application cares about the user's own avatar.
telepathy-qt-0.9.3/spec/Channel_Type_Call.xml0000644000175200001440000021660312000056607023404 0ustar00collabora-develusers00000000000000 Copyright © 2009-2010 Collabora Limited Copyright © 2009-2010 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 Street, Fifth Floor, Boston, MA 02110-1301, USA. (as stable API)

A channel type for making audio and video calls. Call channels supersede the old StreamedMedia channel type. Call channels are much more flexible than its predecessor and allow more than two participants.

Handlers are advised against executing all the media signalling, codec and candidate negotiation themselves but instead use a helper library such as telepathy-farstream which when given a new Call channel will set up the transports and codecs and create GStreamer pads which can be added to the handler UI. This is useful as it means the handler does not have to worry how exactly the connection between the call participants is being made.

The TargetHandle and TargetID properties in a Call channel refer to the contact that the user initially called, or which contact initially called the user. Even in a conference call, where there are multiple contacts in the call, these properties refer to the initial contact, who might have left the conference since then. As a result, handlers should not rely on these properties.

Contents

Content objects represent the actual media that forms the Call (for example an audio content and a video content). Calls always have one or more Content objects associated with them. As a result, a new Call channel request MUST have either InitialAudio=True, or InitialVideo=True, or both, as the Requestable Channel Classes will document.

Content objects have one or more stream associated with them. More information on these streams and how to maniuplate them can be found on the Content interface page.

Outgoing calls

To make an audio-only call to a contact foo@example.com handlers should call:

CreateChannel({
  ...ChannelType: ...Call1,
  ...TargetHandleType: Contact,
  ...TargetID: 'foo@example.com',
  ...InitialAudio: True,
})

As always, TargetHandle may be used in place of TargetID if the contact's handle is already known. To make an audio and video call, the handler should also specify InitialVideo The connection manager SHOULD return a channel whose immutable properties contain the local user as the InitiatorHandle, the remote contact as the TargetHandle, Requested = True (indicating the call is outgoing).

After a new Call channel is requested, the CallState property will be Pending_Initiator. As the local user is the initiator, the call must be accepted by the handler by calling the Accept method. At this point, CallState changes to Initialising, which signifies that the call is waiting for the network to do something. When the CM has information indicating that the remote contact has been notified about the call (or immediately if the network is known not to convey such information) it should also change to Initialised. All changes to the CallState property are signalled using the CallStateChanged signal.

When the call is accepted by the remote contact, the CallStateChanged signal fires again to show that CallState = Accepted.

At this point telepathy-farstream will signal that a pad is available for the handler to show in the user interface. Once media is correctly flowing in both directions, the state will change to Active, to inform the user that they have a correctly working call there is nothing amiss.

Missed calls

If the remote contact does not accept the call in time, then the call can be terminated by the server. Note that this only happens in some protocols. Most XMPP clients, for example, do not do this and rely on the call initiator terminating the call. A missed call is shown in a Call channel by the CallState property changing to Ended, and the CallStateReason property changing to (remote contact, No_Answer, "").

Rejected calls

If the remote contact decides he or she does not feel like talking to the local user, he or she can reject his or her incoming call. This will be shown in the Call channel by CallState changing to Ended and the CallStateReason property changing to (remote contact, User_Requested, "org.freedesktop.Telepathy.Error.Rejected").

Incoming calls

When an incoming call occurs, something like the following NewChannels signal will occur:

NewChannels([
  /org/freedesktop/Telepathy/Connection/foo/bar/foo_40bar_2ecom/CallChannel,
  {
    ...ChannelType: ...Call1,
    ...TargetHandleType: Contact,
    ...TargetID: 'foo@example.com',
    ...TargetHandle: 42,
    ...Requested: False,
    ...InitialAudio: True,
    ...InitialVideo: True,
    ...InitialAudioName: "audio",
    ...InitialVideoName: "video",
    ...MutableContents: True,
  }])

The InitialAudio and InitialVideo properties show that the call has been started with two contents: one for audio streaming and one for video streaming. The InitialAudioName and InitialVideoName properties also show that the aforementioned audio and video contents have names "audio" and "video".

Once the handler has notified the local user that there is an incoming call waiting for acceptance, the handler should call SetRinging to let the CM know. The new channel should also be given to telepathy-farstream to work out how the two participants will connect together. telepathy-farstream will call the appropriate methods on the call's Contents to negotiate codecs and transports.

To pick up the call, the handler should call Accept. The CallState property changes to Accepted and once media is being transferred, telepathy-farstream will notify the handler of a new pad to be shown to the local user in the UI. Once media is correctly flowing in both directions, the state will change to Active, to inform the user that they have a correctly working call there is nothing amiss.

To reject the call, the handler should call the Hangup method. The CallState property will change to Ended and the CallStateReason property will change to (self handle, User_Requested, "org.freedesktop.Telepathy.Error.Rejected").

Ongoing calls

Adding and removing contents

When a call is open, new contents can be added as long as the CM supports it. The MutableContents property will let the handler know whether further contents can be added or existing contents removed. An example of this is starting a voice call between a contact and then adding a video content. To do this, the should call AddContent like this:

AddContent("video",
           Video)

Assuming no errors, the new video content will be added to the call. telepathy-farstream will pick up the new content and perform the transport and codec negotiation automatically. telpathy-farstream will signal when the video is ready to show in the handler's user interface.

A similar method is used for removing contents from a call, except that the Remove method is on the Content object.

Ending the call

To end the call, the handler should call the Hangup method. The CallState property will change to Ended and CallStateReason will change to (self handle, User_Requested, "org.freedesktop.Telepathy.Error.Cancelled").

If the other participant hangs up first then the CallState property will change to Ended and CallStateReason will change to (remote contact, User_Requested, "org.freedesktop.Telepathy.Error.Terminated").

Multi-party calls

Requestable channel classes

The RequestableChannelClasses for Call1 channels can be:

[( Fixed = { ...ChannelType: ...Call1,
            ...TargetHandleType: Contact,
            ...InitialVideo: True
          },
  Allowed = [ ...InitialVideoName,
              ...InitialAudio,
              ...InitialAudioName
            ]
),
( Fixed = { ...ChannelType: ...Call1,
            ...TargetHandleType: Contact,
            ...InitialAudio: True
          },
  Allowed = [ ...InitialAudioName,
              ...InitialVideo,
              ...InitialVideoName
            ]
)]

Clients aren't allowed to make outgoing calls that have neither initial audio nor initial video. Clearly, CMs which don't support video should leave out the first class and omit InitialVideo from the second class, and vice versa for CMs without audio support.

Handlers should not close Call1 channels without first calling Hangup on the channel. If a Call handler crashes, the ChannelDispatcher will call Close on the channel which SHOULD also imply a call to Hangup(User_Requested, "org.freedesktop.Telepathy.Error.Terminated", "") before actually closing the channel.

renamed from Ringing

Indicate that the local user has been alerted about the incoming call.

This method is only useful if the channel's Requested property is False, and the CallState is Initialised (an incoming call is ready and waiting for the user to be notified). Calling this method SHOULD set CallFlags' bit Locally_Ringing, and notify the remote contact that the local user has been alerted (if the protocol supports this); repeated calls to this method SHOULD succeed, but have no further effect.

In all other states, this method SHOULD fail with the error NotAvailable.

The call was Requested, so ringing does not make sense. The call is no longer in state Initialised.
renamed from Ringing

Notifies the CM that the local user is already in a call, so this call has been put in a call-waiting style queue.

This method is only useful if the channel's Requested property is False, and the CallState is Initialising or Initialised. Calling this method SHOULD set CallFlags' bit Locally_Queued, and notify the remote contact that the call is in a queue (if the protocol supports this); repeated calls to this method SHOULD succeed, but have no further effect.

Locally_Queued is a little like Locally_Held, but applies to calls that have not been Accepted (the Locally_Queued flag should be unset by the CM when Accept is called). It should also be set in response to the state of the world, rather than in response to user action.

The call was Requested, so queueing does not make sense. The call is no longer in state Initialising or Initialised.

For incoming calls in state Initialised, accept the incoming call. This changes the CallState to Accepted.

For outgoing calls in state Pending_Initiator, actually call the remote contact; this changes the CallState to Initialising.

Otherwise, this method SHOULD fail with the error NotAvailable.

This method should be called exactly once per Call, by whatever client (user interface) is handling the channel.

When this method is called, for each Content whose Disposition is Initial, any streams where the LocalSendingState is Pending_Send will be moved to Sending as if SetSending(True) had been called.

The call is not in one of the states where this method makes sense.
Request that the call is ended. All contents will be removed from the Call so that the Contents property will be the empty list. A generic hangup reason. A more specific reason for the call hangup, if one is available, or an empty string otherwise. A human-readable message to be sent to the remote contact(s). XMPP Jingle allows calls to be terminated with a human-readable message. The call has already been ended. Request that a new Content of type Content_Type is added to the Call1. Handlers should check the value of the MutableContents property before trying to add another content as it might not be allowed.

The suggested name of the content to add.

The content name property should be meaningful, so should be given a name which is significant to the user. The name could be a localized "audio", "video" or perhaps include some string identifying the source, such as a webcam identifier.

If there is already a content with the same name as this property then a sensible suffix should be added. For example, if this argument is "audio" but a content of the same name already exists, a sensible suffix such as " (1)" is appended to name the new content "audio (1)". A further content with the name "audio" would then be named "audio (2)".

The media stream type of the content to be added to the call. The requested initial direction of the new content. Path to the newly-created Call1.Content object. The media stream type given is invalid. The media stream type requested is not implemented by the CM. The media stream type requested is not supported by either the local or remote side. The content type requested cannot be added to this call. Examples of why this might be the case include because a second video stream cannot be added, or a content cannot be added when the content set isn't mutable.

Emitted when a new Content is added to the call.

Path to the newly-created Content object.

Emitted when a Content is removed from the call.

The Content which was removed. Why the content was removed.

The list of Content objects that are part of this call. Change notification is via the ContentAdded and ContentRemoved signals.

The state of a call, as a whole.

The allowed transitions are:

  • Pending_Initiator → Initialising (for outgoing calls, when Accept is called)
  • Initialising → Initialised (for outgoing calls, when the remote client indicates that the user has been notified about the call. If the network is known not to provide feedback about whether the remote side is ringing, then the call should immediately be set to Ringing.
  • Initialising → Initialised (for incoming calls, when e.g. the implementation has been initialised far enough that it is sensible to notify the user about the call (to reduce the probability that the user will pick up the call and have it immediately fail). The UI should then alert the user about the call, and call SetRinging)
  • Initialised → Accepted (for outgoing calls to a contact, when the remote contact accepts the call; for incoming calls, when Accept is called.)
  • Accepted → Active (when the local user successfully joins the call/conference, and media is known to be flowing successfully; also, when temporary connection problems are resolved (See below)). If the network is known not to provide feedback about when the call is properly connected, the call should immediately be set to Active.
  • Active → Accepted (when there are temporary connection problems that the CM is aware of and able to recover from)
  • any state → Ended (when the call is terminated normally, or when an error occurs that the CM is unable to recover from)

Clients MAY consider unknown values from this enum to be an error - additional values will not be defined after the Call specification is declared to be stable.

The call state is not known. This call state MUST NOT appear as a value of the CallState property, but MAY be used by client code to represent calls whose state is as yet unknown. The initiator of the call hasn't accepted the call yet. This state only makes sense for outgoing calls, where it means that the local user has not yet sent any signalling messages to the remote user(s), and will not do so until Accept is called. Progress has been made in placing the call, but the contact has not been made aware of the call yet. This corresponds to SIP's status code 183 Session Progress, and should be used for the period where the CM is waiting for the streaming implementation to initialise (before sending the initial INVITE or equivalent) and when the outgoing call has reached a gateway or ICE negotiation is pending. UIs should not produce a dialtone or start ringing if the call is in this state. In the outgoing case: at least one called user has been alerted about the call (a SIP 180 (Ringing) packet or equivalent has been received) but none have answered, so the call cannot go to Accepted (use Ringing to determine which members have been informed and which haven't, if you care). UIs SHOULD produce a dialtone for outgoing calls in this state. In the incoming case, the local user should be informed of the call as soon as the call reaches this state (and SetRinging should be called to inform the CM that this has happened, so that it can relay this fact to the caller using a SIP 180 (Ringing) packet or equivalent). The contact being called has accepted the call, but the call is not in the Active state (The most common reason for this is that the streaming implementation hasn't connected yet). The contact being called has accepted the call, and discourse between at least two parties should now be possible. The call has ended, either via normal termination or an error.
A set of flags representing additional information than is available in CallState. Many of these flags only make sense in a particular (or may explain why a call is in a specific state). The call has been put on hold by the local user, e.g. using the Hold interface. This flag SHOULD only be set if there is at least one Content, and all Contents are locally held. Otherwise, in transient situations where some but not all contents are on hold, UIs would falsely indicate that the call as a whole is on hold, which could lead to the user saying something they'll regret, while under the impression that the other contacts can't hear them! This flag exists as a simplified proxy for HoldStateChanged, to reduce the number of signals that need to be listened to by a simple UI. This flag exists for observability of the SetRinging method (e.g. so that loggers can tell whether the call got as far as alerting the user, or whether something went wrong before then). It should be set when the SetRinging is called, and unset when the call leaves Initialised. This flag exists for observability of the SetQueued method. It should be set when the SetQueued is called, and unset when the call leaves Initialising or Initialised. The initiator of the call originally called a contact other than the current recipient of the call, but the call was then forwarded or diverted. This flag only makes sense on outgoing calls. It SHOULD be set or unset according to informational messages from other contacts. This flag only occurs when the CallState is Ended. The call with this flag set has ended, but not all resources corresponding to the call have been freed yet. Depending on the protocol there might be some audible feedback while the clearing flag is set. In calls following the ITU-T Q.931 standard there is a period of time between the call ending and the underlying channel being completely free for re-use.

A map used to provide optional extensible details for the CallState, CallFlags and/or CallStateReason.

Well-known keys and their corresponding value types include:

hangup-message - s
An optional human-readable message sent when the call was ended, corresponding to the Message argument to the Hangup method. This is only applicable when the call state is Ended. XMPP Jingle can send such messages.
queue-message - s
An optional human-readable message sent when the local contact is being held in a queue. This is only applicable when Locally_Queued is in the call flags. SIP 182 notifications can have human-readable messages attached.
debug-message - s
A message giving further details of any error indicated by the CallStateReason. This will not normally be localized or suitable for display to users, and is only applicable when the call state is Ended.
balance-required - i
Optionally included when a call cannot be connected because there is InsufficientBalance, indicating what the required balance would be to place this call. The value of this key has the same units and scale as AccountBalance.
forwarded-to - u
Optionally included when the CallStateReason is Forwarded. It indicates the handle to whom the Call was forwarded.
forwarded-to-id - s
The string that would result from inspecting the forwarded-to key (i.e. the contact's identifier in the IM protocol).

The current high-level state of this call. The CallFlags provide additional information, and the CallStateReason and CallStateDetails explain the reason for the current values for those properties.

Note that when in a conference call, this property is purely to show your state in joining the call. The receiver (or remote contact) in this context is the conference server itself. The property does not change when other call members' states change.

Clients MAY consider unknown values in this property to be an error.

Flags representing the status of the call as a whole, providing more specific information than the CallState.

Clients are expected to ignore unknown flags in this property, without error.

When an ongoing call is active and not on hold or has any other problems, this property will be 0.

A simple representation of the reason for a change in the call's state, which may be used by simple clients, or used as a fallback when the DBus_Reason member of a Call_State_Reason struct is not understood. We just don't know. Unknown values of this enum SHOULD also be treated like this. Situation normal. Progress has been made in the setup/teardown of the call (and it didn't require any user interaction).

The change was requested by the contact indicated by the Actor member of a Call_State_Reason struct.

If the Actor is the local user, the DBus_Reason SHOULD be the empty string.

If the Actor is a remote user, the DBus_Reason SHOULD be the empty string if the call was terminated normally, but MAY be a non-empty error name to indicate error-like call termination reasons (call rejected as busy, kicked from a conference by a moderator, etc.).

The call was forwarded. If known, the handle of the contact the call was forwarded to will be indicated by the "forwarded-to" member of a CallStateDetails dictionnary in the CallStateChanged signal.

The CallState changed from Initialised or Ended (or a content's direction changed) because it was rejected by the remote user.

Corresponds to Rejected

The CallState changed from Initialised or Ended because the initiator ended the call before the receiver accepted it. With an incoming call this state change reason signifies a missed call, or one that was picked up elsewhere before it was picked up here.

Corresponds to NoAnswer or PickedUpElsewhere

The CallState changed because one of the addresses does not exist on the network.

Corresponds to DoesNotExist

The CallState changed because the local user is not authorised.

Corresponds to PermissionDenied or InsufficientBalance

The CallState changed from Initialised Ended because the receiver is busy (e.g. is already engaged in another call, and has not placed the initiator in a call-waiting queue).

Corresponds to Busy

There has been an unexpected error in either the CM or some other local component.

Corresponds to Confused or Media.StreamingError

There has been an unexpected error in the server or some other remote component.

Corresponds to ServiceConfused

There has been a network error related to the CM or the signalling part of the call (compare and contrast: Streaming_Error).

Corresponds to NetworkError

Some aspect of the content is unsupported so has to be removed from the call.

Corresponds to Media.UnsupportedType or Media.CodecsIncompatible

It was not possible for the streaming implementation to connect to any of the users participating in this call or content.

Corresponds to ConnectionFailed or ConnectionLost

A description of the reason for a change to the CallState and/or CallFlags.

The contact responsible for the change, or 0 if no contact was responsible. The reason, chosen from a limited set of possibilities defined by the Telepathy specification. If User_Requested then the Actor member will dictate whether it was the local user or a remote contact responsible.

A specific reason for the change, which may be a D-Bus error in the Telepathy namespace, a D-Bus error in any other namespace (for implementation-specific errors), or the empty string to indicate that the state change was not an error.

This SHOULD be an empty string for changes to any state other than Ended.

The errors Cancelled and Terminated SHOULD NOT be used here; an empty string SHOULD be used instead.

Those error names are used to indicate normal call termination by the local user or another user, respectively, in contexts where a D-Bus error name must appear.

An optional debug message, to expediate debugging the potentially many processes involved in a call. This may be communicated across the network in protocols that support doing so, but it is not essential.

The reason for the last change to the CallState and/or CallFlags. The CallStateDetails MAY provide additional information.

Emitted when the state of the call as a whole changes.

This signal is emitted for any change in the properties corresponding to its arguments, even if the other properties referenced remain unchanged.

The new value of the CallState property. The new value of the CallFlags property. The new value of the CallStateReason property. The new value of the CallStateDetails property.

If this property is True, all of the media streaming is done by some mechanism outside the scope of Telepathy.

A connection manager might be intended for a specialized hardware device, which will take care of the audio streaming (e.g. telepathy-yafono, which uses GSM hardware which does the actual audio streaming for the call).

If this is False, the handler is responsible for doing the actual media streaming for at least some contents itself. Those contents will have the Media interface, to communicate the necessary information to a streaming implementation. Connection managers SHOULD operate like this, if possible.

Many connection managers (such as telepathy-gabble) only do the call signalling, and expect the client to do the actual streaming using something like Farsight, to improve latency and allow better UI integration.

A set of flags representing the status of a remote contact in a call.

It is protocol- and client-specific whether a particular contact will ever have a particular flag set on them, and Telepathy clients SHOULD NOT assume that a flag will ever be set.

180 Ringing in SIP, and its equivalent in XMPP, are optional informational messages, and implementations are not required to send them. The same applies to the messages used to indicate hold state.

The remote contact's client has told us that the contact has been alerted about the call but has not responded.

This is a flag per member, not a flag for the call as a whole, because in Muji conference calls, you could invite someone and have their state be "ringing" for a while.

The call member has put this call on hold.

This is a flag per member, not a flag for the call as a whole, because in conference calls, any member could put the conference on hold.

This contact has merged this call into a conference. Note that GSM provides a notification when the remote party merges a call into a conference, but not when it is split out again; thus, this flag can only indicate that the call has been part of a conference at some point. If a GSM connection manager receives a notification that a call has been merged into a conference a second time, it SHOULD represent this by clearing and immediately re-setting this flag on the remote contact.
A mapping from handles to their current state in the call. Emitted when the CallMembers property changes in any way, either because contacts have been added to the call, contacts have been removed from the call, or contacts' flags have changed. A map from members of the call to their new call member flags, including at least the members who have been added to CallMembers, and the members whose flags have changed. The identifiers of the contacts in the Flags_Changed map. A list of members who have left the call, i.e. keys to be removed from CallMembers. A structured reason for the change.

A mapping from the remote contacts that are part of this call to flags describing their status. This mapping never has the local user's handle as a key.

When the call ends, this property should be an empty list, and notified with CallMembersChanged

If the Call implements Group and the Group members are channel-specific handles, then this call SHOULD also use channel-specific handles.

Anonymous members are exposed as channel-specific handles with no owner.

The string identifiers for handles mentioned in CallMembers, to give clients the minimal information necessary to create contacts without waiting for round-trips.

If set on a requested channel, this indicates the transport that should be used for this call. Where not applicable, this property is defined to be Unknown, in particular, on CMs with hardware streaming.

When implementing a voip gateway one wants the outgoing leg of the gatewayed to have the same transport as the incoming leg. This property allows the gateway to request a Call with the right transport from the CM.

If set to True in a channel request that will create a new channel, the connection manager should immediately attempt to establish an audio stream to the remote contact, making it unnecessary for the client to call AddContent.

If this property, or InitialVideo, is passed to EnsureChannel (as opposed to CreateChannel), the connection manager SHOULD ignore these properties when checking whether it can return an existing channel as suitable; these properties only become significant when the connection manager has decided to create a new channel.

If True on a requested channel, this indicates that the audio stream has already been requested and the client does not need to call RequestStreams, although it MAY still do so.

If True on an unrequested (incoming) channel, this indicates that the remote contact initially requested an audio stream; this does not imply that that audio stream is still active (as indicated by Contents).

The name of this new content can be decided by using the InitialAudioName property.

Connection managers that support the ContactCapabilities interface SHOULD represent the capabilities of receiving audio and/or video calls by including a channel class in a contact's capabilities with ChannelType = Call in the fixed properties dictionary, and InitialAudio and/or InitialVideo in the allowed properties list. Clients wishing to discover whether a particular contact is likely to be able to receive audio and/or video calls SHOULD use this information.

Not all clients support video calls, and it would also be possible (although unlikely) to have a client which could only stream video, not audio.

Clients that are willing to receive audio and/or video calls SHOULD include the following among their channel classes if calling UpdateCapabilities (clients of a ChannelDispatcher SHOULD instead arrange for the ChannelDispatcher to do this, by including the filters in their HandlerChannelFilter properties):

  • { ChannelType = Call }
  • { ChannelType = Call, InitialAudio = True } if receiving calls with audio is supported
  • { ChannelType = Call, InitialVideo = True } if receiving calls with video is supported

Connection managers for protocols with capability discovery, like XMPP, need this information to advertise the appropriate capabilities for their protocol.

The same as InitialAudio, but for a video stream. This property is immutable (cannot change).

In particular, note that if this property is False, this does not imply that an active video stream has not been added, only that no video stream was active at the time the channel appeared.

This property is the correct way to discover whether connection managers, contacts etc. support video calls; it appears in capabilities structures in the same way as InitialAudio.

If InitialAudio is set to True, then this property will name the intial audio content with the value of this property.

Content names are meant to be significant, but if no name can be given to initial audio content, then its name cannot be meaningful or even localized.

If this property is empty or missing from the channel request and InitialAudio is True, then the CM must come up with a sensible for the content, such as "audio".

If the protocol has no concept of stream names then this property will not show up in the allowed properties list of the Requestable Channel Classes for call channels.

The same as InitialAudioName, but for a video stream created by setting InitialVideo to True. This property is immutable and so cannot change.

If True, a stream of a different content type can be added after the Channel has been requested

If this property is missing, clients SHOULD assume that it is False, and thus that the channel's streams cannot be changed once the call has started.

If this property isn't present in the "allowed" set in any of the Call entries contact capabilities, then user interfaces MAY choose to show a separate "call" option for each class of call.

For example, once an audio-only Google Talk call has started, it is not possible to add a video stream; both audio and video must be requested at the start of the call if video is desired. User interfaces may use this pseudo-capability as a hint to display separate "Audio call" and "Video call" buttons, rather than a single "Call1" button with the option to add and remove video once the call has started for contacts without this flag.

This client supports audio calls.

This client supports video calls.

The client can implement streaming for streams whose Transport property is GTalk_P2P.

The client can implement streaming for streams whose Transport property is ICE.

The client can implement streaming for streams whose Transport property is WLM_2009.

The client can implement streaming for streams whose Transport property is SHM.

The client supports media streaming with H264 (etc.).

This handler capability token is a one of a family of similar tokens: for any other audio or video codec whose MIME type is audio/subtype or video/subtype, a handler capability token of this form may exist (the subtype MUST appear in lower case in this context). Clients MAY support more codecs than they explicitly advertise support for; clients SHOULD explicitly advertise support for their preferred codec(s), and for codecs like H264 that are, in practice, significant in codec negotiation.

For instance, the XMPP capability used by the Google Video Chat web client to determine whether a client is compatible with it requires support for H264 video, so an XMPP connection manager that supports this version of Jingle should not advertise the Google Video Chat capability unless there is at least one installed client that declares that it supports video/h264 on Call channels.

For example, a client could advertise support for audio and video calls using Speex, Theora and H264 by having five handler capability tokens in its Capabilities property:

  • org.freedesktop.Telepathy.Channel.Type.Call1/audio
  • org.freedesktop.Telepathy.Channel.Type.Call1/audio/speex
  • org.freedesktop.Telepathy.Channel.Type.Call1/video
  • org.freedesktop.Telepathy.Channel.Type.Call1/video/theora
  • org.freedesktop.Telepathy.Channel.Type.Call1/video/h264

Clients MAY have media signalling abilities without explicitly supporting any particular codec, and connection managers SHOULD support this usage.

This is necessary to support gatewaying between two Telepathy connections, in which case the available codecs might not be known to the gatewaying process.

telepathy-qt-0.9.3/spec/Connection_Interface_Presence.xml0000644000175200001440000004154712000056607026006 0ustar00collabora-develusers00000000000000 Copyright (C) 2005, 2006 Collabora Limited Copyright (C) 2005, 2006 Nokia Corporation Copyright (C) 2006 INdT

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

Mapping used in Last_Activity_And_Statuses and passed to SetStatus, representing a collection of statuses. Use of this mapping with more than one member is deprecated. Structure representing a contact's presence, containing a last-activity time (deprecated) and a Multiple_Status_Map. Mapping returned by GetPresence and signalled by PresenceUpdate, where the keys are contacts and the values represent their presences. The string identifier of the desired status A dictionary of optional parameter names mapped to their variant-boxed values Request that a single presence status is published for the user, along with any desired parameters. Changes will be indicated by PresenceUpdate signals being emitted. Request that all of a user's presence statuses be removed. Be aware that this request may simply result in the statuses being replaced by a default available status. Changes will be indicated by PresenceUpdate signals being emitted. An array of the contacts whose presence should be obtained Presence information in the same format as for the PresenceUpdate signal Get presence previously emitted by PresenceUpdate for the given contacts. Data is returned in the same structure as the PresenceUpdate signal. Using this method in favour of RequestPresence has the advantage that it will not wake up each client connected to the PresenceUpdate signal. A dictionary of string identifiers mapped to a struct for each status, containing:
  • a type value from one of the values above
  • a boolean to indicate if this status may be set on yourself
  • a boolean to indicate if this is an exclusive status which you may not set alongside any other
  • a dictionary of valid optional string argument names mapped to their types
Get a dictionary of the valid presence statuses for this connection. This is only available when online because only some statuses will be available on some servers.
A dictionary of contact handles mapped to a struct containing a UNIX timestamp of the last activity time (in UTC), and a dictionary mapping the contact's current status identifiers to a dictionary of optional parameter names mapped to their variant-boxed values This signal should be emitted when your own presence has been changed, or the presence of the member of any of the connection's channels has been changed, or when the presence requested by RequestPresence is available. The string identifier of the status not to publish anymore for the user Request that the given presence status is no longer published for the user. Changes will be indicated by PresenceUpdate signals being emitted. As with ClearStatus, removing a status may actually result in it being replaced by a default available status. The status requested is not currently set An array of the contacts whose presence should be obtained Request the presence for contacts on this connection. A PresenceUpdate signal will be emitted when they are received. This is not the same as subscribing to the presence of a contact, which must be done using the 'subscription' ContactList, and on some protocols presence information may not be available unless a subscription exists. The presence of the requested contacts is not reported to this connection A UNIX timestamp of the user's last activity time (in UTC) Request that the recorded last activity time for the user be updated on the server. This protocol has no concept of idle time A dictionary mapping status identifiers to dictionaries, which map optional parameter names to their variant-boxed values

Request that the user's presence be changed to the given statuses and desired parameters. Changes will be reflected by PresenceUpdate signals being emitted.

Statuses whose Connection_Presence_Type is Offline, Error or Unknown MUST NOT be passed to this function. Connection managers SHOULD reject these statuses.

The same rationale as for SimplePresence.SetPresence applies.

On certain protocols, this method may be called on a newly-created connection which is still in the DISCONNECTED state, and will sign on with the requested status. If the requested status is not available after signing on, NotAvailable will be returned and the connection will remain offline, or if the protocol does not support signing on with a certain status, Disconnected will be returned.

Client implementations SHOULD use SimplePresence instead. Connection managers implementing Presence MUST implement SimplePresence too.

This interface is for services which have a concept of presence which can be published for yourself and monitored on your contacts. Telepathy's definition of presence is based on that used by the Galago project.

Presence on an individual (yourself or one of your contacts) is modelled as a last activity time along with a set of zero or more statuses, each of which may have arbitrary key/value parameters. Valid statuses are defined per connection, and a list of them can be obtained with the GetStatuses method.

(The SimplePresence interface which replaces this one restricts presences to one status per contact, with an optional message, which is in practice all that was implemented on this interface.)

Each status has an arbitrary string identifier which should have an agreed meaning between the connection manager and any client which is expected to make use of it. The well-known values defined by the SimplePresence interface SHOULD be used where possible

As well as these well-known status identifiers, every status also has a numerical type value chosen from Connection_Presence_Type which can be used by the client to classify even unknown statuses into different fundamental types.

These numerical types exist so that even if a client does not understand the string identifier being used, and hence cannot present the presence to the user to set on themselves, it may display an approximation of the presence if it is set on a contact.

The dictionary of variant types allows the connection manager to exchange further protocol-specific information with the client. It is recommended that the string (s) argument 'message' be interpreted as an optional message which can be associated with a presence status.

If the connection has a 'subscribe' contact list, PresenceUpdate signals should be emitted to indicate changes of contacts on this list, and should also be emitted for changes in your own presence. Depending on the protocol, the signal may also be emitted for others such as people with whom you are communicating, and any user interface should be updated accordingly.

On some protocols, RequestPresence may only succeed on contacts on your 'subscribe' list, and other contacts will cause a PermissionDenied error. On protocols where there is no 'subscribe' list, and RequestPresence succeeds, a client may poll the server intermittently to update any display of presence information.

telepathy-qt-0.9.3/spec/Authentication_TLS_Certificate.xml0000644000175200001440000002742512000056607026105 0ustar00collabora-develusers00000000000000 Copyright © 2010 Collabora Limited 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 Street, Fifth Floor, Boston, MA 02110-1301, USA. (as stable API) This object represents a TLS certificate.

The raw data contained in a TLS certificate.

For X.509 certificates (CertificateType = "x509"), this MUST be in DER format, as defined by the X.690 ITU standard.

For PGP certificates (CertificateType = "pgp"), this MUST be a binary OpenPGP key as defined by section 11.1 of RFC 4880.

Struct representing one reason why a TLS certificate was rejected.

Since there can be multiple things wrong with a TLS certificate, arrays of this type are used to represent lists of reasons for rejection. In that case, the most important reason SHOULD be placed first in the list.

The value of the TLS_Certificate_Reject_Reason enumeration for this certificate rejection. Clients that do not understand the Error member, which may be implementation-specific, can use this property to classify rejection reasons into common categories.

The DBus error name for this certificate rejection.

This MAY correspond to the value of the Reason member, or MAY be a more specific D-Bus error name, perhaps implementation-specific.

Additional information about why the certificate was rejected. This MAY also include one or more of the following well-known keys:

user-requested (b)
True if the error was due to an user-requested rejection of the certificate; False if there was an unrecoverable error in the verification process.
expected-hostname (s)
If the rejection reason is Hostname_Mismatch, the hostname that the server certificate was expected to have.
certificate-hostname (s)
If the rejection reason is Hostname_Mismatch, the hostname of the certificate that was presented.

For instance, if you try to connect to gmail.com but are presented with a TLS certificate issued to evil.example.org, the error details for Hostname_Mismatch MAY include:

                {
                  'expected-hostname': 'gmail.com',
                  'certificate-hostname': 'evil.example.org',
                }
              
debug-message (s)
Debugging information on the error, corresponding to the message part of a D-Bus error message, which SHOULD NOT be displayed to users under normal circumstances

The possible states for a TLSCertificate object. The certificate is currently waiting to be accepted or rejected. The certificate has been verified. The certificate has been rejected. Possible reasons to reject a TLS certificate. The certificate has been rejected for another reason not listed in this enumeration. The certificate is not trusted. The certificate is expired. The certificate is not active yet. The certificate provided does not have the expected fingerprint. The hostname certified does not match the provided one. The certificate is self-signed. The certificate has been revoked. The certificate uses an insecure cipher algorithm, or is cryptographically weak. The length in bytes of the certificate, or the depth of the certificate chain exceed the limits imposed by the crypto library. The current state of this certificate. State change notifications happen by means of the Accepted and Rejected signals.

If the State is Rejected, an array of TLS_Certificate_Rejection structures containing the reason why the certificate is rejected.

If the State is not Rejected, this property is not meaningful, and SHOULD be set to an empty array.

The first rejection in the list MAY be assumed to be the most important; if the array contains more than one element, the CM MAY either use the values after the first, or ignore them.

The type of this TLS certificate (e.g. 'x509' or 'pgp').

This property is immutable

One or more TLS certificates forming a trust chain, each encoded as specified by Certificate_Data.

The first certificate in the chain MUST be the server certificate, followed by the issuer's certificate, followed by the issuer's issuer and so on.

The State of this certificate has changed to Accepted. The State of this certificate has changed to Rejected. The new value of the Rejections property. Accepts this certificate, i.e. marks it as verified. Rejects this certificate.

The new value of the Rejections property.

This MUST NOT be an empty array.

Raised when the method is called on an object whose State is not Pending, or when the provided rejection list is empty.
telepathy-qt-0.9.3/spec/Channel_Interface_DTMF.xml0000644000175200001440000003642512000056607024244 0ustar00collabora-develusers00000000000000 Copyright © 2005-2010 Collabora Limited Copyright © 2005-2010 Nokia Corporation Copyright © 2006 INdT

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

The only part of this spec that should be used with a Call1 channel is the "InitialTones" property. The Stream_IDs in this interface can now be ignored by CMs. An interface that gives a Channel the ability to send DTMF events over audio streams which have been established using the StreamedMedia channel type. The event codes used are in common with those defined in RFC4733, and are listed in the DTMF_Event enumeration. The Stream_ID parameter became vestigial. A stream ID as defined in the StreamedMedia channel type. This argument is included for backwards compatibility and MUST be ignored by the implementations - the tone SHOULD be sent to all eligible streams in the channel. A numeric event code from the DTMF_Event enum.

Start sending a DTMF tone to all eligible streams in the channel. Where possible, the tone will continue until StopTone is called. On certain protocols, it may only be possible to send events with a predetermined length. In this case, the implementation MAY emit a fixed-length tone, and the StopTone method call SHOULD return NotAvailable.

The client may wish to control the exact duration and timing of the tones sent as a result of user's interaction with the dialpad, thus starting and stopping the tone sending explicitly.

Tone overlaping or queueing is not supported, so this method can only be called if no DTMF tones are already being played.

The given stream ID was invalid. Deprecated, since stream IDs are ignored. There are no eligible audio streams. DTMF tones are already being played.
The Stream_ID parameter became vestigial. A stream ID as defined in the StreamedMedia channel type. This argument is included for backwards compatibility and MUST be ignored by the implementations - the sending SHOULD be stoped in all eligible streams in the channel. Stop sending any DTMF tones which have been started using the StartTone or MultipleTones methods. If there is no current tone, this method will do nothing. If MultipleTones was used, the client should not assume the sending has stopped immediately; instead, the client should wait for the StoppedTones signal. On some protocols it might be impossible to cancel queued tones immediately. The given stream ID was invalid. Deprecated, since stream IDs are ignored. Continuous tones are not supported by this stream. Deprecated, since stream IDs are ignored. The characters [pPxXwW,] must also be supported.

A string representation of one or more DTMF events. Implementations of this method MUST support all of the following characters in this string:

  • the digits 0-9, letters A-D and a-d, and symbols '*' and '#' correspond to the members of DTMF_Event
  • any of 'p', 'P', 'x', 'X' or ',' (comma) results in an implementation-defined pause, typically for 3 seconds
  • 'w' or 'W' waits for the user to continue, by stopping interpretation of the string, and if there is more to be played, emitting the TonesDeferred signal with the rest of the string as its argument: see that signal for details

Send multiple DTMF events to all eligible streams in the channel. Each tone will be played for an implementation-defined number of milliseconds (typically 250ms), followed by a gap before the next tone is played (typically 100ms). The duration and gap are defined by the protocol or connection manager.

In cases where the client knows in advance the tone sequence it wants to send, it's easier to use this method than manually start and stop each tone in the sequence.

The tone and gap lengths may need to vary for interoperability, according to the protocol and other implementations' ability to recognise tones. At the time of writing, GStreamer uses a minimum of 250ms tones and 100ms gaps when playing in-band DTMF in the normal audio stream, or 70ms tones and 50ms gaps when encoding DTMF as audio/telephone-event.

Tone overlaping or queueing is not supported, so this method can only be called if no DTMF tones are already being played.

The supplied Tones string was invalid. There are no eligible audio streams. DTMF tones are already being played.
Indicates whether there are DTMF tones currently being sent in the channel. If so, the client should wait for StoppedTones signal before trying to send more tones.

If non-empty in a channel request that will create a new channel, the connection manager should send the tones immediately after at least one eligible audio stream has been created in the channel.

This should only be used with InitialAudio=true.

This property is immutable (cannot change).

The tones waiting for the user to continue, if any.

When this property is set to a non-empty value, TonesDeferred is emitted. When any tones are played (i.e. whenever SendingTones is emitted), this property is reset to the empty string.

The new non-empty value of DeferredTones.

Emitted when 'w' or 'W', indicating "wait for the user to continue", is encountered while playing a DTMF string queued by MultipleTones or InitialTones. Any queued DTMF events after the 'w', which have not yet been played, are placed in the DeferredTones property and copied into this signal's argument.

When the channel handler is ready to continue, it MAY pass the value of DeferredTones to MultipleTones, to resume sending. Alternatively, it MAY ignore the deferred tones, or even play different tones instead. Any deferred tones are discarded the next time a tone is played.

This signal SHOULD NOT be emitted if there is nothing left to play, i.e. if the 'w' was the last character in the DTMF string.

DTMF string (one or more events) that is to be played.

DTMF tone(s)are being sent to all eligible streams in the channel. The signal is provided to indicating the fact that the streams are currently being used to send one or more DTMF tones, so any other media input is not getting through to the audio stream. It also serves as a cue for the StopTone method.

True if the DTMF tones were actively cancelled via StopTone.

DTMF tones have finished playing on streams in this channel.

0 1 2 3 4 5 6 7 8 9 * # A B C D
telepathy-qt-0.9.3/spec/Connection_Interface_Requests.xml0000644000175200001440000007171612000056607026056 0ustar00collabora-develusers00000000000000 Copyright (C) 2008 Collabora Limited 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API)

An enhanced version of the Telepathy connection interface, which can represent bundles of channels that should be dispatched together, and does not assume any particular properties by which channels are uniquely identifiable.

If this interface is implemented on a connection, then NewChannels MUST be emitted for all new channels, even those created with RequestChannel.

(as stable API) Enough details of a channel that clients can work out how to dispatch or handle it. The object path of the channel.

Properties of the channel.

Connection managers MUST NOT include properties in this mapping if their values can change. Clients MUST ignore properties that appear in this mapping if their values can change.

If properties that could change were included, the following race condition would be likely to exist in some cases:

  • NewChannels or Get("Channels") includes a property P with value V1
  • Client creates a proxy object for the channel
  • The value of P changes to V2
  • Client connects to PChanged signal
  • Client should call Get("P") or GetAll here, to avoid the race, but client's author has forgotten to do so
  • Proxy object thinks P == V1, but actually P == V2

We've taken the opportunity to make the API encourage the client author to get it right. Where possible, we intend that properties whose value will be used in channel dispatching or other "early" processing will be defined so that they are immutable (can never change).

Each dictionary MUST contain the keys org.freedesktop.Telepathy.Channel.ChannelType, org.freedesktop.Telepathy.Channel.TargetHandleType, org.freedesktop.Telepathy.Channel.TargetHandle, org.freedesktop.Telepathy.Channel.TargetID and org.freedesktop.Telepathy.Channel.Requested.

We expect these to be crucial to the channel-dispatching process.

(as stable API) It is now guaranteed that CreateChannel returns the channel before NewChannels announces it (the reverse was previously guaranteed).

Request that an entirely new channel is created.

There is deliberately no flag corresponding to the suppress_handler argument to Connection.RequestChannel, because passing a FALSE value for that argument is deprecated. Requests made using this interface always behave as though suppress_handler was TRUE.

A dictionary containing desirable properties, which MUST include ChannelType. Some properties are defined such that only an exact match makes sense, and connection managers MUST NOT satisfy a request with a channel where that property does not match; some properties are defined such that the connection manager MAY treat the request as merely a hint, and make a best-effort attempt to satisfy it. This is documented separately for each property.

If this dictionary contains a property whose semantics are not known to the connection manager, this method MUST fail without side-effects (in particular it must not create a new channel).

This is necessary if we want to be able to invent properties in future that, when used in a request, are hard requirements rather than just hints. A connection manager that did not know the semantics of those properties could incorrectly return a new channel that did not satisfy the requirements.

The connection manager MUST NOT respond successfully, and SHOULD NOT create a new channel or cause any other side-effects, unless it can create a new channel that satisfies the client's requirements.

Properties that will be set by this argument need not have write access after the channel has been created - indeed, it is expected that most will be read-only.

The Channel object, which MUST NOT be signalled with NewChannels until after this method returns.

This allows the requester to alter its handling of NewChannels by knowing whether one of the channels satisfied a request it made.

Properties of the channel that was produced, equivalent to the properties in Channel_Details. Connection managers MUST NOT include properties here whose values can change, for the same reasons as in Channel_Details.

The channel request was one that can never succeed, such as requesting an unsupported channel type, or requesting a channel type which this connection manager does not support with the given target handle type. An invalid handle was requested as the value of a property whose value is a handle (like Channel.TargetHandle), or a syntactically invalid identifier was requested as the value of a property whose value is the string corresponding to a handle (like Channel.TargetID). The request matched the fixed properties of a Requestable_Channel_Class in RequestableChannelClasses, but the allowed arguments did not make sense; for example, a RoomList was requested, but the Server property provided was not a valid DNS name. The requested channel cannot be created because the requested contact is using a client that lacks a particular feature. The requested channel cannot be created because the target is offline.

The requested channel cannot be created, but in principle, a similar request might succeed in future. For instance, this might be because:

  • a channel matching the request already exists and the protocol requires that only one such channel can exist at a time
  • a channel matching the request has already been requested (by a previous call to CreateChannel, EnsureChannel, Connection.RequestChannel or similar) and the protocol requires that only one such channel can exist at a time
It is now guaranteed that if the channel was created by this call to EnsureChannel, it's returned before NewChannels announces it (the reverse was previously guaranteed).

Request that channels are ensured to exist.

The connection manager is in the best position to determine which existing channels could satisfy which requests.

A dictionary containing desirable properties, with the same semantics as the corresponding parameter to CreateChannel.

If false, the caller of EnsureChannel MUST assume that some other process is handling this channel; if true, the caller of EnsureChannel SHOULD handle it themselves or delegate it to another client.

If the creation of a channel makes several calls to EnsureChannel (and no other requests) successful, exactly one of those calls MUST return a true value for this argument.

If the creation of a channel makes other requests successful, the value returned for this argument MUST be such that exactly one of the clients making requests ends up responsible for the channel. In particular, if CreateChannel returns a channel C, any EnsureChannel calls that also return C MUST return a false value for this argument.

The Channel object. If it was created as a result of this method call, it MUST NOT be signalled by NewChannels until after this method returns.

This allows the requester to alter its handling of NewChannels by knowing whether one of the channels satisfied a request it made.

Properties of the channel that was produced, equivalent to the properties in Channel_Details. Connection managers MUST NOT include properties here whose values can change, for the same reasons as in Channel_Details.

The channel request was one that can never succeed, such as requesting an unsupported channel type, or requesting a channel type which this connection manager does not support with the given target handle type. An invalid handle was requested as the value of a property whose value is a handle (like Channel.TargetHandle), or a syntactically invalid identifier was requested as the value of a property whose value is the string corresponding to a handle (like Channel.TargetID). The request matched the fixed properties of a Requestable_Channel_Class in RequestableChannelClasses, but the allowed arguments did not make sense; for example, a RoomList was requested, but the Server property provided was not a valid DNS name. The requested channel cannot be created because the requested contact is using a client that lacks a particular feature. The requested channel cannot be created because the target is offline. The requested channel cannot be created, but in principle, a similar request might succeed in future.
(as stable API) Added a guarantee of ordering relative to NewChannel

New channels have been created. The connection manager SHOULD emit a single signal for any group of closely related channels that are created at the same time, so that the channel dispatcher can try to dispatch them to a handler as a unit.

In particular, if additional channels are created as a side-effect of a call to CreateChannel, these channels SHOULD appear in the same NewChannels signal as the channel that satisfies the request.

Joining a MUC Tube in XMPP requires joining the corresponding MUC (chatroom), so a Text channel can be created as a side-effect.

Every time NewChannels is emitted, it MUST be followed by a Connection.NewChannel signal for each channel.

The double signal emission is for the benefit of older Telepathy clients, which won't be listening for NewChannels.

The more informative NewChannels signal comes first so that clients that did not examine the connection to find out whether Requests is supported will see the more informative signal for each channel first, and then ignore the less informative signal because it announces a new channel of which they are already aware.

The channels and their details. All channels that are signalled together like this MUST have the same Bundle property, which may either refer to an existing bundle, or establish a new bundle.
(as stable API) A list of all the channels which currently exist on this connection. Change notification is via the NewChannels and ChannelClosed signals. (as stable API) Emitted when a channel is closed and hence disappears from the Channels property. This is redundant with the Closed signal on the channel itself, but it does provide full change notification for the Channels property. The channel which has been removed from the Channels property (as stable API)

Mapping representing a class of channels that can be requested from a connection manager, can be handled by a user interface, are supported by a contact, etc.

Classes of channel are identified by the fixed values of a subset of their properties.

Channel classes SHOULD always include the keys org.freedesktop.Telepathy.Channel.ChannelType and org.freedesktop.Telepathy.Channel.TargetHandleType. (One exception is that ContactSearch channels do not have TargetHandleType None in their requestable channel classes, for historical reasons.)

A D-Bus interface name, followed by a dot and a D-Bus property name. The value of the property.
(as stable API)

Structure representing a class of channels that can be requested, identified by a set of properties that identify that class of channel.

This will often just be the channel type and the handle type, but can include other properties of the channel - for instance, encrypted channels might require properties that unencrypted channels do not, like an encryption key.

In some cases, these classes of channel may overlap, in the sense that one class fixes all the properties that another class does, plus some more properties.

For older clients to still be able to understand how to request channels in the presence of a hypothetical "encryption" interface, we'd need to represent it like this:

  • class 1: ChannelType = Text, TargetHandleType = CONTACT
  • class 2: Channel.ChannelType = Text, Channel.TargetHandleType = CONTACT, Encryption.Encrypted = TRUE

The property values that identify this requestable channel class. These properties MUST be included in requests for a channel of this class, and MUST take these values.

Clients that do not understand the semantics of all the Fixed_Properties MUST NOT request channels of this class, since they would be unable to avoid making an incorrect request.

This implies that connection managers wishing to make channels available to old or minimal clients SHOULD have a channel class with the minimum number of Fixed_Properties, and MAY additionally have channel classes with extra Fixed_Properties.

Interface designers SHOULD avoid introducing fixed properties whose types are not serializable in a .manager file.

Connection managers with a fixed property that is not serializable cannot have a complete .manager file.

Properties that MAY be set when requesting a channel of this channel type and handle type.

This array MUST NOT include properties that are in the Fixed_Properties mapping.

Properties in this array may either be required or optional, according to their documented semantics.

For instance, if TargetHandleType takes a value that is not Handle_Type_None, one or the other of TargetHandle and TargetID is required. Clients are expected to understand the documented relationship between the properties, so we do not have separate arrays of required and optional properties.

If this array contains the Bundle property, then this class of channel can be combined with other channels with that property in a request, or added to an existing bundle. If not, this signifies that the connection manager is unable to mark channels of this class as part of a bundle - this means that to the remote contact they are likely to be indistinguishable from channels requested separately.

(as stable API)

The classes of channel that are expected to be available on this connection, i.e. those for which CreateChannel can reasonably be expected to succeed. User interfaces can use this information to show or hide UI components.

This property cannot change after the connection has gone to state Connection_Status_Connected, so there is no change notification (if the connection has context-dependent capabilities, it SHOULD advertise support for all classes of channel that it might support during its lifetime). Before this state has been reached, the value of this property is undefined.

This is not on an optional interface, because connection managers can always offer some sort of clue about the channel classes they expect to support (at worst, they can announce support for everything for which they have code).

telepathy-qt-0.9.3/spec/Account_Interface_Storage.xml0000644000175200001440000001512712000056607025136 0ustar00collabora-develusers00000000000000 Copyright (C) 2010 Collabora Ltd.

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

This interface extends the core Account interface to specify details regarding the storage of this account.

Single-sign-on systems do not generally have directly user-editable properties for Accounts, and require the user to visit a specific UI to alter their account properties. User interfaces should know not to expose these account properties as user-editable, and instead redirect the user to the appropriate interface.

The name of the account storage implementation, which SHOULD start with a reversed domain name in the same way as D-Bus interface names. When this is the empty string the account is internally stored.

This property cannot change once an Account has been created.

Unique identification of the account within the storage backend. The contents of the variant are defined by the StorageProvider.

This property cannot change once an Account has been created.

Different storage systems will have their own way of uniquely identifying an account, typically an integer or a string. Given that all users of this property should have direct knowledge of the backend they should know what types to expect and how to handle it.

Map containing information specific to the storage backend. The keys and the types of their values are defined by the StorageProvider, and are not interpreted by the AccountManager implementation.

As the values in this map may change at any time (due to an external application manipulating the storage provider directly), this property should not be cached; it should instead be retrieved each time it is needed.

This can be used to provide additional hints to user interfaces aware of a specific storage provider, without requiring those user interfaces to use the StorageIdentifier to query the storage provider directly.

Bitfield which defines what restrictions this Storage method has.

This property cannot change once an Account has been created.

Flags indicating restrictions imposed on an Account by its storage method. The account's Parameters property can't be changed by calling UpdateParameters. The account can't be enabled/disabled by setting the Enabled property. The account's presence can't be changed by setting the RequestedPresence and AutomaticPresence properties. The account's Service property cannot be changed.
telepathy-qt-0.9.3/spec/Connection_Interface_Anonymity.xml0000644000175200001440000001702512000056607026223 0ustar00collabora-develusers00000000000000 Copyright © 2008-2010 Nokia Corporation Copyright © 2010 Collabora Ltd.

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API)

An interface to support anonymity settings on a per-connection basis. This defines what personal identifying information a remote contact may or may not see. For example, GSM might use this for CLIR, while SIP might use this for privacy service requests.

Flags for the various types of anonymity modes. These modes are solely to inform the CM of the desired anonymous settings. It is up to the CM to determine whether the anonymity modes should be handled within the CM itself, or whether the network that a CM might be talking to should be enforcing anonymity.

CMs MAY support only a subset of these modes, and specific connections MAY support none at all.

Obscure any information that provides user identification, user-agent identification or personal details. Examples of this information might be GSM CallerID, SIP from address, various informational email headers, etc.

The CM should scrub/replace any of this information before passing messages or data onto the network. Note that a CM which has the option of obscuring the information at the CM or privacy service level would choose both (anonymity services are opaque to clients of this interface).

Clients SHOULD NOT set both Client_Info and Show_Client_Info modes. If they are set, the CM MUST respect Client_Info and ignore Show_Client_Info.

Explicitly request showing of client information. In connection context, this can be used to override service default. In channel context, this overrides connection anonymity modes.

In GSM, it's possible to have CLIR enabled by default, and explicitly suppress CLIR for a single phone call.

Clients SHOULD NOT set both Client_Info and Show_Client_Info modes. If they are set, the CM MUST respect Client_Info and ignore Show_Client_Info. The CM MAY set both Client_Info and Show_Client_Info in SupportedAnonymityModes to indicate its support for explicitly hiding and publicising client information.

Obscure any originating IP address information, contact URIs, and anonymize all traffic involved with sending/receiving any media streams or call content. Examples of this include the "headers" portions of RFC 3323 as well as the History-Info (described in RFC 4244) for a SIP CM.

This SHOULD have the effect of hiding address information from the remote contact (ie, the contact cannot know what IP address the session is originated from). Obviously the network still needs to be able to route information between contacts, so this provides no guarantees of what can be seen by intermediaries.

The anonymity modes supported by the CM for this connection. Once Connection.Status has moved to Connected, this property MUST NOT change.

This specifies whether or not the anonymity settings MUST be respected by the CM and any intermediaries between the local and remote contacts. If this is set to true but anonymity settings cannot be followed, then the session MUST be denied with a org.freedesktop.Telepathy.Error.WouldBreakAnonymity error. Any client that sets AnonymityModes SHOULD also set this property first (rather than accepting the CM's default value).

The currently enabled anonymity modes for the connection. Setting has the effect of requesting new modes for the connection, and may raise an error if the unsupported modes are set. Successfully changing the modes will result in emission of AnonymityModesChanged signal.

An unsupported mode was supplied. Supported modes are specified in the SupportedAnonymityModes property, and this should be checked prior to setting AnonymityModes.
Emitted when the anonymity mode has changed. The new anonymity modes for this connection.
telepathy-qt-0.9.3/spec/Connection_Manager_Interface_Account_Storage.xml0000644000175200001440000001115212000056607030741 0ustar00collabora-develusers00000000000000 Copyright © 2011 Collabora Ltd.

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(draft 1)

An interface for connection managers that store account details internally. At the moment this consists only of storing an account's credentials, but other functionality may be added in the future.

Account objects representing accounts on a connection manager that implements this interface should implement the ExternalPasswordStorage.DRAFT interface.

A set of flags representing the status of the Account stored in the Connection Manager. The associated account has its authentication credentials (password) stored in the connection manager A mapping from Account_Ids to account flags.

The set of Accounts stored in this Connection Manager, and flags indicating their status.

Change notification for this property is provided by the standard D-Bus PropertiesChanged signal.

Clears any saved credentials associated with the specified Account_Id. Any other saved data related to the account will be unaffected. An account id as returned from Protocol.IdentifyAccount. The account id is invalid. Completely removes all data associated with an account from the connection manager's internal storage. An account id as returned from Protocol.IdentifyAccount. The account id is invalid.
telepathy-qt-0.9.3/spec/Connection_Interface_Simple_Presence.xml0000644000175200001440000007252112000056607027313 0ustar00collabora-develusers00000000000000 Copyright (C) 2005-2008 Collabora Limited Copyright (C) 2005, 2006 Nokia Corporation Copyright (C) 2006 INdT

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

A struct representing the presence of a contact. The presence type, e.g. Connection_Presence_Type_Away. The string identifier of the status, e.g. "brb", as defined in the Statuses property.

The user-defined status message, e.g. "Back soon!".

Clients SHOULD set the status message for the local user to the empty string, unless the user has actually provided a specific message (i.e. one that conveys more information than the Status).

User interfaces SHOULD regard an empty status message as unset, and MAY replace it with a localized string corresponding to the Status or Type.

Use case: Daf sets his status in Empathy by choosing the Welsh translation of "Available" from a menu. It is more informative for his English-speaking colleagues to see the English translation of "Available" (as localized by their own clients) than to see "Ar Gael" (which they don't understand anyway).
Mapping returned by GetPresences and signalled by PresencesChanged, indicating the presence of a number of contacts. A contact The contact's presence A struct containing information about a status. The type of a presence. This SHOULD NOT be used as a way to set statuses that the client does not recognise (as explained in SetPresence), but MAY be used to check that the client's assumptions about a particular status name match the connection manager's. If true, the user can set this status on themselves using SetPresence. If true, a non-empty message can be set for this status. Otherwise, the empty string is the only acceptable message. On IRC you can be Away with a status message, but if you are available you cannot set a status message. A mapping describing possible statuses. The string identifier of this status. Details of this status.

The string identifier of the desired status. Possible status identifiers are defined in the Statuses property.

Clients MUST NOT set a status whose string value they do not recognise, even if its presence type in Statuses matches what the user requested.

Suppose a protocol has statuses that include 'phone' (of type BUSY) and 'in-a-meeting' (of type BUSY), but there is no generic 'busy' status.

If the user requests "Busy" status from a menu, a client author might be tempted to pick an arbitrary status that has type BUSY. However, on this protocol, neither of the choices would be appropriate, and incorrect information about the user would be conveyed.

Statuses whose Connection_Presence_Type is Offline, Error or Unknown MUST NOT be passed to this function. Connection managers SHOULD reject these statuses.

To go offline, call Disconnect instead. The "error" and "unknown" statuses make no sense.

The status message associated with the current status.

Request that the presence status and status message are published for the connection. Changes will be indicated by PresencesChanged signals being emitted.

This method may be called on a newly-created connection while it is still in the DISCONNECTED state, to request that when the connection connects, it will do so with the selected status.

In DISCONNECTED state the Statuses property will indicate which statuses are allowed to be set while DISCONNECTED (none, if the Connection Manager doesn't allow this). This value MUST NOT be cached, as the set of allowed presences might change upon connecting.

Either the specified status is not supported, the specified status cannot be set on the user themselves, or a non-empty message was supplied for a status that does not accept a message.
An array of the contacts whose presence should be obtained.

Presence information in the same format as for the PresencesChanged signal. The returned mapping MUST include an entry for each contact in the method's argument.

The definition of the connection presence types Unknown and Offline means that if a connection manager will return Unknown for contacts not on the subscribe list, it MUST delay the reply to this method call until it has found out which contacts are, in fact, on the subscribe list.

Get presence previously emitted by PresencesChanged for the given contacts. Data is returned in the same structure as the PresencesChanged signal; no additional network requests are made. While discovering the subscribe list in order to distinguish between Unknown and Offline statuses, a network error occurred.

A dictionary where the keys are the presence statuses that are available on this connection, and the values are the corresponding presence types.

While the connection is in the DISCONNECTED state, it contains the set of presence statuses allowed to be set before connecting. The connection manager will attempt to set the appropriate status when the connection becomes connected, but cannot necessarily guarantee it. The available statuses cannot change until the connection status changes, so there is no change notification.

While the connection is in the CONNECTED state, this property contains the set of presence statuses which are actually available on this protocol. This set is constant for the remaining lifetime of the connection, so again, there is no change notification.

While the connection is in the CONNECTING state, the value of this property is undefined and SHOULD NOT be used. It can change at any time without notification (in particular, any cached values from when the connection was in the DISCONNECTED or CONNECTING state MUST NOT be assumed to still be correct when the state has become CONNECTED).

This property MUST include the special statuses "unknown" and "error" if and only if the connection manager can emit them as a contact's status.

For instance, connection managers for local-xmpp (XEP-0174) would omit "unknown" since there is no such concept.

The maximum length in characters for any individual status message, or 0 if there is no limit.

While the connection is in the DISCONNECTED state, this property will be 0. The connection manager will attempt to set the appropriate value when the connection becomes connected, but cannot necessarily guarantee it. The maximum length cannot change until the connection status changes, so there is no change notification.

While the connection is in the CONNECTED state, this property contains the maximum length in characters for any individual status message which is actually allowed on this protocol. This value is constant for the remaining lifetime of the connection, so again, there is no change notification.

While the connection is in the CONNECTING state, the value of this property is undefined and SHOULD NOT be used. It can change at any time without notification (in particular, any cached values from when the connection was in the DISCONNECTED or CONNECTING state MUST NOT be assumed to still be correct when the state has become CONNECTED).

If a message passed to SetPresence is longer than allowed by this property, the connection manager MUST truncate the supplied message; when emitting PresencesChanged, the truncated version of the message MUST be used.

Some XMPP servers, like Google Talk, define a maximum length for status messages. Whether the user's server is one of these cannot be detected until quite late in the connection process.

A dictionary of contact handles mapped to the status, presence type and status message. This signal should be emitted when your own presence has been changed, or the presence of the member of any of the connection's channels has been changed. An invalid presence type used as a null value. This value MUST NOT appear in the Statuses property, or in the result of GetStatuses on the deprecated Presence interface. Offline Available Away Away for an extended time Hidden (invisible) Busy, Do Not Disturb. Unknown, unable to determine presence for this contact, for example if the protocol only allows presence of subscribed contacts. Error, an error occurred while trying to determine presence. The message, if set, is an error from the server.

A type for communication access control. These control policies are used in CommunicationPolicy.DRAFT as well as most rich presence interfaces.

New interfaces should use this type, and NOT Rich_Presence_Access_Control_Type.

Only allow contacts that are in a certain whitelist.

The associated variant in Access_Control is a list of Contact_Handle representing the whitelist, with signature au.

Allow contacts in the user's 'publish' list. The associated variant in Access_Control is ignored.

Only allow contacts that are in a certain group.

The associated variant in Access_Control is a Group_Handle representing the permitted group.

Allow all contacts. The associated variant in Access_Control is ignored. Allow all contacts in the user's 'subscribe' or 'publish' list. The associated variant in Access_Control is ignored. Forbid all contacts. The associated variant in Access_Control is ignored.

The access control rule is too complex to be represented in the current Telepathy API. The associated variant is meaningless. Setting this mode is never valid; the connection manager MUST raise an error if this is attempted.

XEP-0016 Privacy Lists can easily produce access control mechanisms that can't be expressed in a simpler API. We need to be able to at least indicate that fact.

The associated variant in Access_Control is ignored.

A type of access control for Rich_Presence_Access_Control. For most types, the exact access control is given by an associated variant.

These are the access control types from XMPP publish/subscribe (XEP-0060).

Location uses this for historical reasons, new interfaces will use Access_Control_Type.

The associated variant is a list of contacts (signature 'au', Contact_Handle[]) who can see the extended presence information. All contacts in the user's 'publish' contact list can see the extended presence information. The associated variant is ignored. The associated variant is a handle of type Group (signature 'u', Group_Handle) representing a group of contacts who can see the extended presence information. Anyone with access to the service can see the extended presence information.

An access control mode for extended presence items like geolocation. This type isn't actually used by the SimplePresence interface, but it's included here so it can be referenced by rich presence interfaces.

New interfaces should use this type, and NOT Rich_Presence_Access_Control.

The type of access control to apply. Any additional information required by the Type. The required type and semantics are defined for each Access_Control_Type.

An access control mode for extended presence items like geolocation. This type isn't actually used by the SimplePresence interface, but it's included here so it can be referenced by rich presence interfaces such as Location.

Location uses this for historical reasons, new interfaces will use Access_Control_Type.

The type of access control to apply. Any additional information required by the Type. The required type and semantics are defined for each Rich_Presence_Access_Control_Type.

The same struct that would be returned by GetPresences (always present with some value if information from the SimplePresence interface was requested)

This interface is for services which have a concept of presence which can be published for yourself and monitored on your contacts.

Presence on an individual (yourself or one of your contacts) is modelled as a status and a status message. Valid statuses are defined per connection, and a list of those that can be set on youself can be obtained from the Statuses property.

Each status has an arbitrary string identifier which should have an agreed meaning between the connection manager and any client which is expected to make use of it. The following well-known values should be used where possible to allow clients to identify common choices:

Status identifier Connection_Presence_Type Remarks
"available" Available
"chat" Available Actively interested in chatting, as opposed to merely available.
"pstn" Available This contact is actually a phone number, not an IM account. As such, the contact is conceptually always available, but not in the same way that a contact can set their IM status to “available”. It does not make sense to allow the user to set this status on herself; hence, on protocols where this status is supported, its entry in Statuses SHOULD have May_Set_On_Self set to False.
"away" Away
"brb" Away Be Right Back (a more specific form of Away)
"busy" Busy
"dnd" Busy Do Not Disturb (a more specific form of Busy)
"xa" Extended_Away Extended Away
"hidden" Hidden Also known as "Invisible" or "Appear Offline"
"offline" Offline
"unknown" Unknown special, see below
"error" Error special, see below

As well as these well-known status identifiers, every status also has a numerical type value chosen from Connection_Presence_Type which can be used by the client to classify even unknown statuses into different fundamental types.

These numerical types exist so that even if a client does not understand the string identifier being used, and hence cannot present the presence to the user to set on themselves, it may display an approximation of the presence if it is set on a contact.

As well as the normal status identifiers, there are two special ones that may be present: 'unknown' with type Unknown and 'error' with type Error. 'unknown' indicates that it is impossible to determine the presence of a contact at this time, for example because it's not on the 'subscribe' list and the protocol only allows one to determine the presence of contacts you're subscribed to. 'error' indicates that there was a failure in determining the status of a contact.

If the connection has a 'subscribe' contact list, PresencesChanged signals should be emitted to indicate changes of contacts on this list, and should also be emitted for changes in your own presence. Depending on the protocol, the signal may also be emitted for others such as people with whom you are communicating, and any user interface should be updated accordingly.

telepathy-qt-0.9.3/spec/Client.xml0000644000175200001440000001424012000056607021307 0ustar00collabora-develusers00000000000000 Copyright © 2008-2009 Collabora Ltd. Copyright © 2008-2009 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as a stable interface)

Telepathy clients use connection managers, the channel dispatcher and optionally the account manager to provide useful functionality.

User interface processes are the obvious example of Telepathy clients, but they can provide other functionality, such as address-book synchronization.

Every running or activatable process with a well-known name of the form org.freedesktop.Telepathy.Client.clientname should be probed by the channel dispatcher to discover its capabilities. Each client is either an observer, an approver, a channel handler, or some combination of these.

Activatable services (those with a D-Bus .service file) must be supported so that we can run clients in response to channel creation.

Non-activatable services (those that do not register a D-Bus .service file for their well-known name, but do request it at runtime) must be supported so that we can have programs that process channels, but only if they are already running - for instance, a full-screen media centre application might do this.

The client name, clientname, MUST be a non-empty string of ASCII digits, letters, dots and/or underscores, starting with a letter, and without sets of two consecutive dots or a dot followed by a digit. For non-activatable services, it MAY contain a part that is generated per instance at runtime.

If each of a client Foo's instances should be able to manipulate channels separately, the instance with unique name :1.25 might request a well-known name like org.freedesktop.Telepathy.Client.Foo._1._25.

(Note that well-known bus-name components may not start with a digit, so o.f.T.Client.Foo.1.25 would not be acceptable.)

Each Client MUST export an object whose object path may be determined by replacing '.' with '/' in the well-known name and prepending '/'. This object represents its API as a Telepathy client; the channel dispatcher will call its methods and read its properties when appropriate.

As an optimization, activatable clients SHOULD install a file $XDG_DATA_DIRS/telepathy/clients/clientname.client containing a cached version of its immutable properties, so that for most clients, the channel dispatcher can just read a file to discover capabilities, instead of having to service-activate the client immediately in order to fetch its read-only properties. However, the D-Bus API is canonical, and the channel dispatcher MUST support clients without such a file.

Non-activatable clients MAY install a .client file, but there's not much point in them doing so.

The .client files MUST contain UTF-8 text with the same syntax as Desktop Entry files (although the allowed groups, keys and values differ). Every .client file MUST contain a group whose name is the name of this interface.

The groups, keys and values in the .client file are defined by individual interfaces. Each interface that can usefully cache information in the .client file SHOULD correspond to a group with the same name.

A list of the extra interfaces provided by this client. This SHOULD include at least one of Client.Observer, Client.Approver or Client.Handler.

In the .client file, this is represented by key "Interfaces" in the group named after this interface. The value of the key is a list of interface names each followed by a semicolon (so it always ends with a semicolon unless it is empty), i.e. a key of type "strings" as described in the Desktop Entry specification.

telepathy-qt-0.9.3/spec/all.xml0000644000175200001440000003223412000056607020644 0ustar00collabora-develusers00000000000000 Telepathy D-Bus Interface Specification 0.25.2 Copyright © 2005-2012 Collabora Limited Copyright © 2005-2011 Nokia Corporation Copyright © 2006 INdT

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

A Connection Manager is a factory for connections.

Connections represent active protocol sessions. There are a number of core interfaces which all connections should implement, and a number of optional interfaces which provide various functionality related to contacts and to the connection itself.

On protocols that support contact lists, these interface expose the user's contact lists, along with presence subscription information, contact list groups (if supported), and the ability to block and unblock contacts (if supported).

These optional Connection interfaces expose metadata about contacts on this connection—from their current presence through to the type of client they're connected with—and allow the local user to publish such metadata back to their contacts.

These optional Connection interfaces expose protocol-specific features, and allow configuring the running connection.

A Channel is used by Telepathy to exchange data between local applications and remote servers. A given connection will have many channels, each one represented by a D-Bus object.

Each Channel has a type, represented by a D-Bus interface, and may implement one or more additional interfaces from the list of channel interfaces below.

Each Channel implements one of the following types:

A Channel may also implement one or more of the following interfaces, depending on its type. Some interfaces are only applicable to particular channel types, while others may (in principle) appear on any type of channel.

These interfaces may only appear on channels of type Text.

These interfaces are only applicable to channels of type StreamedMedia, with the exception of the Hold and DTMF interfaces, which may also appear on Call1 channels.

These interfaces provide functionality for ad-hoc conference calls and chat rooms. They are primarily intended for Text, StreamedMedia and Call1 channels, but may also appear on other types of channel.

A set of objects to be used for authentication purposes, such as TLS certificates or handshakes for negotiating end-to-end security.

The Account Manager is a desktop service that provides account configuration and can manage the connection managers. In general, clients will use the account manager to find out about instant messaging accounts and their associated connections.

The Channel Dispatcher is a desktop service whose purpose is to dispatch incoming Telepathy Channels to the appropriate client (e.g. incoming text chat, file transfer, tubes, etc.).

Clients should implement one or more of these interfaces to be able to handle channels coming in from the Channel Dispatcher.

telepathy-qt-0.9.3/spec/Channel_Dispatch_Operation.xml0000644000175200001440000005555312000056607025314 0ustar00collabora-develusers00000000000000 Copyright © 2008-2009 Collabora Ltd. Copyright © 2008-2009 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as a stable interface)

A channel dispatch operation is an object in the ChannelDispatcher representing a batch of unrequested channels being announced to client Approver processes.

These objects can result from new incoming channels or channels which are automatically created for some reason, but cannot result from outgoing requests for channels.

More specifically, whenever the Connection.Interface.Requests.NewChannels signal contains channels whose Requested property is false, or whenever the Connection.NewChannel signal contains a channel with suppress_handler false, one or more ChannelDispatchOperation objects are created for those channels.

(If some channels in a NewChannels signal are in different bundles, this is an error. The channel dispatcher SHOULD recover by treating the NewChannels signal as if it had been several NewChannels signals each containing one channel.)

First, the channel dispatcher SHOULD construct a list of all the Handlers that could handle all the channels (based on their HandlerChannelFilter property), ordered by priority in some implementation-dependent way. If there are handlers which could handle all the channels, one channel dispatch operation SHOULD be created for all the channels. If there are not, one channel dispatch operation SHOULD be created for each channel, each with a list of channel handlers that could handle that channel.

If no handler at all can handle a channel, the channel dispatcher SHOULD terminate that channel instead of creating a channel dispatcher for it. It is RECOMMENDED that the channel dispatcher closes the channels using Channel.Interface.Destroyable.Destroy if supported, or Channel.Close otherwise. As a special case, the channel dispatcher SHOULD NOT close ContactList channels, and if Close fails, the channel dispatcher SHOULD ignore that channel.

ContactList channels are strange. We hope to replace them with something better, such as an interface on the Connection, in a future version of this specification.

When listing channel handlers, priority SHOULD be given to channel handlers that are already handling channels from the same bundle.

If a handler with BypassApproval = True could handle all of the channels in the dispatch operation, then the channel dispatcher SHOULD call HandleChannels on that handler, and (assuming the call succeeds) emit Finished and stop processing those channels without involving any approvers.

Some channel types can be picked up "quietly" by an existing channel handler. If a Text channel is added to an existing bundle containing a StreamedMedia channel, there shouldn't be any approvers, flashing icons or notification bubbles, if the the UI for the StreamedMedia channel can just add a text box and display the message.

Otherwise, the channel dispatcher SHOULD send the channel dispatch operation to all relevant approvers (in parallel) and wait for an approver to claim the channels or request that they are handled. See AddDispatchOperation for more details on this.

Finally, if the approver requested it, the channel dispatcher SHOULD send the channels to a handler.

A list of the extra interfaces provided by this channel dispatch operation. This property cannot change. The Connection with which the Channels are associated. The well-known bus name to use can be derived from this object path by removing the leading '/' and replacing all subsequent '/' by '.'. This property cannot change. The Account with which the Connection and Channels are associated. This property cannot change. The Channels to be dispatched, and their properties. Change notification is via the ChannelLost signal (channels cannot be added to this property, only removed).

A channel has closed before it could be claimed or handled. If this is emitted for the last remaining channel in a channel dispatch operation, it MUST immediately be followed by Finished.

This signal MUST NOT be emitted until all Approvers that were invoked have returned (successfully or with an error) from their AddDispatchOperation method.

This means that Approvers can connect to the ChannelLost signal in a race-free way. Non-approver processes that discover a channel dispatch operation in some way (such as observers) will have to follow the usual "connect to signals then recover state" model - first connect to ChannelLost and Finished, then download Channels (and on error, perhaps assume that the operation has already Finished).

The Channel that closed.

The name of a D-Bus error indicating why the channel closed. If no better reason can be found, org.freedesktop.Telepathy.Error.NotAvailable MAY be used as a fallback; this means that this error SHOULD NOT be given any more specific meaning.

A string associated with the D-Bus error.

The well known bus names (starting with org.freedesktop.Telepathy.Client.) of the possible Handlers for these channels. The channel dispatcher MUST place the most preferred handlers first, according to some reasonable heuristic. As a result, approvers SHOULD use the first handler by default.

The heuristic used to prioritize handlers SHOULD give a higher priority to handlers that are already running.

If, for instance, Empathy and Kopete have similar functionality, and Empathy is running, we should prefer to send channels to it rather than launching Kopete via service activation.

Called by an approver to accept a channel bundle and request that the given handler be used to handle it.

If successful, this method will cause the ChannelDispatchOperation object to disappear, emitting Finished.

However, this method may fail because the dispatch has already been completed and the object has already gone. If this occurs, it indicates that another approver has asked for the bundle to be handled by a particular handler. The approver MUST NOT attempt to interact with the channels further in this case, unless it is separately invoked as the handler.

Approvers which are also channel handlers SHOULD use Claim instead of HandleWith to request that they can handle a channel bundle themselves.

(FIXME: list some possible errors)

If the channel handler raises an error from HandleChannels, this method MAY respond by raising that same error, even if it is not specifically documented here.

The well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the channel handler that should handle the channel, or the empty string if the client has no preferred channel handler.

The selected handler is non-empty, but is not a syntactically correct DBus_Bus_Name or does not start with "org.freedesktop.Telepathy.Client.". The selected handler is temporarily unable to handle these channels. The selected handler is syntactically correct, but will never be able to handle these channels (for instance because the channels do not match its HandlerChannelFilter, or because HandleChannels raised NotImplemented). At the time that HandleWith was called, this dispatch operation was processing an earlier call to HandleWith. The earlier call has now succeeded, so some Handler nominated by another approver is now responsible for the channels. In this situation, the second call to HandleWith MUST NOT return until the first one has returned successfully or unsuccessfully, and if the first call to HandleChannels fails, the channel dispatcher SHOULD try to obey the choice of Handler made by the second call to HandleWith.

Called by an approver to claim channels for handling internally. If this method is called successfully, the process calling this method becomes the handler for the channel, but does not have the HandleChannels method called on it.

Clients that call Claim on channels but do not immediately close them SHOULD implement the Handler interface and its HandledChannels property.

Approvers wishing to reject channels MUST call this method to claim ownership of them, and MUST NOT call Close on the channels unless/until this method returns successfully.

The channel dispatcher can't know how best to close arbitrary channel types, so it leaves it up to the approver to do so. For instance, for Text channels it is necessary to acknowledge any messages that have already been displayed to the user first - ideally, the approver would display and then acknowledge the messages - or to call Channel.Interface.Destroyable.Destroy if the destructive behaviour of that method is desired.

Similarly, an Approver for StreamedMedia channels can close the channel with a reason (e.g. "busy") if desired. The channel dispatcher, which is designed to have no specific knowledge of particular channel types, can't do that.

If successful, this method will cause the ChannelDispatchOperation object to disappear, emitting Finished, in the same way as for HandleWith.

This method may fail because the dispatch operation has already been completed. Again, see HandleWith for more details. The approver MUST NOT attempt to interact with the channels further in this case.

(FIXME: list some other possible errors)

At the time that Claim was called, this dispatch operation was processing a call to HandleWith which has now succeeded, so some Handler nominated by another approver is now responsible for the channel.
At the time of writing, no released implementation of the Channel Dispatcher implements this method; clients should fall back to calling HandleWith.

A variant of HandleWith allowing the approver to pass an user action time. This timestamp will be passed to the Handler when HandleChannels is called.

The well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the channel handler that should handle the channel, or the empty string if the client has no preferred channel handler.

The time at which user action occurred.

The selected handler is non-empty, but is not a syntactically correct DBus_Bus_Name or does not start with "org.freedesktop.Telepathy.Client.". The selected handler is temporarily unable to handle these channels. The selected handler is syntactically correct, but will never be able to handle these channels (for instance because the channels do not match its HandlerChannelFilter, or because HandleChannels raised NotImplemented). At the time that HandleWith was called, this dispatch operation was processing an earlier call to HandleWith. The earlier call has now succeeded, so some Handler nominated by another approver is now responsible for the channels. In this situation, the second call to HandleWith MUST NOT return until the first one has returned successfully or unsuccessfully, and if the first call to HandleChannels fails, the channel dispatcher SHOULD try to obey the choice of Handler made by the second call to HandleWith.

Emitted when this dispatch operation finishes. The dispatch operation is no longer present and further methods must not be called on it.

Approvers that have a user interface SHOULD stop notifying the user about the channels in response to this signal; they MAY assume that on errors, they would have received ChannelLost first.

Its object path SHOULD NOT be reused for a subsequent dispatch operation; the ChannelDispatcher MUST choose object paths in a way that avoids immediate re-use.

Otherwise, clients might accidentally call HandleWith or Claim on a new dispatch operation instead of the one they intended to handle.

This signal MUST NOT be emitted until all Approvers that were invoked have returned (successfully or with an error) from their AddDispatchOperation method.

This means that Approvers can connect to the ChannelLost signal in a race-free way. Non-approver processes that discover a channel dispatch operation in some way (such as observers) will have to follow the usual "connect to signals then recover state" model - first connect to ChannelLost and Finished, then download Channels (and on error, perhaps assume that the operation has already Finished).

telepathy-qt-0.9.3/spec/Call_Content_Interface_Mute.xml0000644000175200001440000000723012000056607025411 0ustar00collabora-develusers00000000000000 Copyright © 2005-2010 Nokia Corporation Copyright © 2005-2010 Collabora Ltd 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 Street, Fifth Floor, Boston, MA 02110-1301, USA. (draft version, not API-stable)

Interface for calls which may be muted. This only makes sense for channels where audio or video is streaming between members.

Muting a call content indicates that the user does not wish to send outgoing audio or video.

Although it's client's responsibility to actually mute the microphone or turn off the camera, using this interface the client can also inform the CM and other clients of that fact.

For some protocols, the fact that the content is muted needs to be transmitted to the peer; for others, the notification to the peer is only informational (eg. XMPP), and some protocols may have no notion of muting at all.
Emitted to indicate that the mute state has changed for this call content. This may occur as a consequence of the client calling SetMuted, or as an indication that another client has (un)muted the content. True if the content is now muted. True if the content is muted. renamed from SetMuted to Mute renamed back from Mute to SetMuted True if the client has muted the content.

Inform the CM that the call content has been muted or unmuted by the client.

It is the client's responsibility to actually mute or unmute the microphone or camera used for the content. However, the client MUST call this whenever it mutes or unmutes the content.

telepathy-qt-0.9.3/spec/Protocol_Interface_Presence.xml0000644000175200001440000001060612000056607025500 0ustar00collabora-develusers00000000000000 Copyright © 2009-2010 Collabora Ltd.

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API)

An interface for protocols where it might be possible to set the user's presence, and the supported presence types can be predicted before connecting.

This allows UIs to show or hide presence types that aren't always supported, such as "invisible", while not online.

The properties on this interface SHOULD be cached in the .manager file, in the [Protocol proto] group. For each status s in Statuses, that group should contain a key of the form status-s whose value is the Connection_Presence_Type as an ASCII decimal integer, followed by a space-separated sequence of tokens from the following set:

settable
If present, the user can set this status on themselves using SetPresence; this corresponds to May_Set_On_Self in the Simple_Status_Spec struct.
message
If present, the user can set a non-empty message for this status; this corresponds to Can_Have_Message in the Simple_Status_Spec struct.

Unrecognised tokens MUST be ignored.

For instance, an XMPP connection manager might have this .manager file:

[Protocol jabber]
Interfaces=org.freedesktop.Telepathy.Protocol.Interface.Presence;
param-account=s required
param-password=s required
status-offline=1
status-unknown=7
status-error=8
status-hidden=5 settable message
status-xa=4 settable message
status-away=3 settable message
status-dnd=6 settable message
status-available=2 settable message
status-chat=2 settable message

which corresponds to these property values (using a Python-like syntax):

Statuses = {
    'offline': (OFFLINE, False, False),
    'unknown': (UNKNOWN, False, False),
    'error': (ERROR, False, False),
    'hidden': (HIDDEN, True, True),
    'xa': (EXTENDED_AWAY, True, True),
    'away': (AWAY, True, True),
    'dnd': (BUSY, True, True),
    'available': (AVAILABLE, True, True),
    'chat': (AVAILABLE, True, True),
}

The statuses that might appear in the Connection.Interface.SimplePresence.Statuses property on a connection to this protocol that supports SimplePresence. This property is immutable.

Depending on server capabilities, it is possible that not all of these will actually appear on the Connection.

telepathy-qt-0.9.3/spec/Call_Content_Interface_Audio_Control.xml0000644000175200001440000001227312000056607027243 0ustar00collabora-develusers00000000000000 Copyright © 2009-2011 Collabora Ltd.

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API)

This interface allows the connection manager to be kept informed of, and control, the input and output volumes of an audio stream. While generally not needed, if the connection manager needs to handle stream volumes directly (typically when using Call_Content_Packetization_Type_Raw), this interface may be necessary.

If this interface is present, the handler should call ReportInputVolume and ReportOutputVolume whenever the input and output volume change, both when the user manually modifies the volume and when the volumes are adjusted in response to RequestedInputVolume and RequestedOutputVolume changing.

The maximum volume as used in this interface represent the unamplified hardware volume (0 dB). No software amplification should be used to boost the signal to a higher level when this Interface is in use

The input volume as requested by the Connection Manager. Initially and on any changes the client should change its input volume to match the requested volume. Report the input volume level as set by the client.

Report to the CM that the Content input volume has been changed by the client.

It is the client's responsibility to change the input volume used for the content. However, the client MUST call this whenever it changes input volume for the content.

The input volume as requested by the Connection Manager. Initially and on any changes the client should change its input volume to match the requested volume. Report the output volume level as set by the client.

Report to the CM that the content output volume has been changed by the client.

It is the client's responsibility to change the output volume used for the content. However, the client MUST call this whenever it changes output volume for the content.

A volume value either reported to or requested by the Connection Manager. This value should either be -1 for an unknown value or in the range of 0-255, with 0 being the minimal volume and 255 being the highest unamplified volume the input or output is capable of (known as 0 dB)

telepathy-qt-0.9.3/spec/Connection_Interface_Balance.xml0000644000175200001440000001433512000056607025562 0ustar00collabora-develusers00000000000000 Copyright © 2009 Collabora Ltd. Copyright © 2009 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API)

In many real-time communication services the user can pay for certain services, typically calls to the PSTN, in advance. In (at least) Skype, it's possible to query the current balance in a machine-readable way.

An amount of money in a specified currency. For example, 3.21 British pounds would conventionally be represented by (Amount = 321, Scale = 2, Currency = "GBP"), but could be represented by (Amount = 3210, Scale = 3, Currency = "GBP") in a service that records balance in units of 0.001 pounds.

As a special case, if Amount = 0, Scale = 2**32 - 1 (i.e. the largest possible 32-bit unsigned integer) and Currency = "", this indicates an unknown amount.

The amount, expressed as a fixed-point number with decimal scale defined by the Scale field; for instance, an Amount value of 1234 with Scale of 2 represents 12.34 in the currency unit given by the Currency field.

The decimal scale for the fixed point value of the Amount field, defining the number of rightmost decimal digits from the integer value which form the fractional part of the resulting currency value.

As well as defining the interpretation of Amount, user interfaces may use this value to determine the precision with which to display the amount.

The currency code represented by this amount, which SHOULD be an international currency code such as "EUR", "USD", or "JPY" if possible. An empty string can be used to indicate that the currency is not known.

The user's balance on the account corresponding to this Connection. A negative amount may be possible on some services, and indicates that the user owes money to the service provider.

On initial connection, this property may have an unknown value, represented by Amount = 0, Scale = 2**32 - 1 (the largest possible 32-bit unsigned integer) and Currency = "".

A URI the user may visit via the web browser to manage and top-up their account balance. This property is not guaranteed to be well-defined until the connection becomes Connected; there is no change notification. Different protocols and even servers or gateways (e.g. SIP and XMPP PSTN gateways) will have a different website used to manage a user's account balance. This property enables the client to provide that to the user. A Connection Manager MAY set this itself (because it is static or discoverable), or expose it as a connection parameter.

Emitted when the user's balance has changed.

The new value of the AccountBalance property.

telepathy-qt-0.9.3/spec/Channel_Future.xml0000644000175200001440000000617112000056607022777 0ustar00collabora-develusers00000000000000 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

This interface contains functionality which we intend to incorporate into the Channel interface in future. It should be considered to be conceptually part of the core Channel interface, but without API or ABI guarantees.

If we add new functionality to the Channel interface, libraries that use generated code (notably telepathy-glib) will have it as part of their ABI forever, meaning we can't make incompatible changes. By using this interface as a staging area for future Channel functionality, we can try out new properties, signals and methods as application-specific extensions, then merge them into the core Channel interface when we have enough implementation experience to declare them to be stable.

The name is by analogy to Python's __future__ pseudo-module.

(in Channel.FUTURE pseudo-interface)

The ChannelBundle.DRAFT to which this channel belongs.

A channel's Bundle property can never change.

Older connection managers might not have this property. Clients (particularly the channel dispatcher) SHOULD recover by considering each channel to be in a bundle containing only that channel, distinct from all other bundles, which has no additional interfaces.

telepathy-qt-0.9.3/spec/template.xml0000644000175200001440000000250512000056607021705 0ustar00collabora-develusers00000000000000 Copyright © 2010 Collabora Ltd.

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(draft 1)

Foo.

telepathy-qt-0.9.3/spec/Call_Content_Media_Description.xml0000644000175200001440000002446512000056607026112 0ustar00collabora-develusers00000000000000 Copyright © 2009-2010 Collabora Ltd. Copyright © 2009-2010 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API) This object represents a remote Description Offer to which the local streaming implementation should reply with its local Description. This is intended as a temporary transactional object for use with Content.Interface.Media. There will always be 0 or 1 MediaDescription object per Content. In most cases, this object will stay alive until you call either Accept or Reject, and then disappear. There are some cases (e.g. an endpoint being removed from the call) where a MediaDescription object will disappear before you have had a chance to either Accept or Reject it. The local description to send to the remote contacts and to use in the Content. Accepts the updated Description and update the corresponding local description. If FurtherNegotiationRequired is True, calling this method will generally cause a network round-trip and a new MediaDescription to be offered (hopefully with FurtherNegotiationRequired set to False). The description given is invalid in some way. Reject the proposed update to the remote description. A structured reason for the rejection.

Extra interfaces provided by this media description. This SHOULD NOT include the Description interface itself.

If this is set to True by the CM in a MediaDescriptionOffer, it means "This is an offer under the SDP Offer/Answer model. Whatever you accept this offer with is what I will send to the other side in my answer." If this is set to False by the CM then it means "This is an Answer under the SDP Offer/Answer model, and if it remains False in the Accept(), no further codec negotiation needs to happen." If this is set to True by the streaming implementation (e.g. in an Accept or UpdateLocalMediaDescription call) then a new SDP Offer/Answer round-trip will be initiated.

True if this offer contains information from the remote side: If False then the Accept response solely depends on the capabilities and preferences of the local side. In most protocols this property will be False for the initial DescriptionOffer on an outgoing call.

A list of codecs the remote contact supports. When used with Accept, it means the locally supported codecs. The contact handle that this description applies to. This property can be used as an opaque identifier, and searched for in RemoteMembers for each Stream in this Content, to determine which Stream this MediaDescription applies to. If multiple MediaDescriptions apply to the same Stream, the SSRCs property should be used to separate media before decoding. If this property is 0, this MediaDescription applies to all streams, so the above matching method is unneccesary (e.g. in conference calls with a mixer, media from all participants is mixed into one stream). When calling Accept or UpdateLocalMediaDescription, this should always be set to 0, or omitted, because it is assumed that you send the same MediaDescription to everyone (Encoding a stream separately for each contact in a call is inefficient, and should be avoided). The remote contact these SSRCs belong to or 0. The list of Synchronisation Sources.

A map from Handle to list of Synchronisation Sources, as defined by RFC 3550.

Some protocols require the negotiation of SSRC identifiers for RTP streams. If this is the case, then MediaDescription offers will appear with this property set. The streaming implementation should then call Accept with a map from 0 to a list containing a single SSRC (which does not collide with these, or any previously seen SSRCs). If a new MediaDescription offer appears with an SSRC the same as one in LocalMediaDescriptions, then the streaming implementation should pick a new SSRC to resolve the collision.

It is expected that this list will normally be at most one element long, but it is kept as a list for extensibility. The concatenation of all SSRCs associated with a Stream should contain no duplicate entries. If there are collisions, then it is the responsibility of the protocol implementation to resolve them and generate new offers.

If this property is omitted, then the streaming implementation can assume that there is only one MediaDescription per Stream.

If there is a single multicast Call Stream with multiple Remote Members, and all members are forced to use the same MediaDescription, this map can be used by the streaming implementation to determine which video sources belong to which contacts (e.g. in order to put a name under each face in the call)

A mapping containing all properties that define the information from a MediaDescription and its interfaces.

If HasRemoteInformation is True, then this mapping will always contains at least Codecs

A D-Bus interface name, followed by a dot and a D-Bus property name. The value of the property
telepathy-qt-0.9.3/spec/Channel_Type_Stream_Tube.xml0000644000175200001440000003120012000056607024727 0ustar00collabora-develusers00000000000000 Copyright © 2008-2009 Collabora Limited Copyright © 2008-2009 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

A stream tube is a transport for ordered, reliable data transfer, similar to SOCK_STREAM sockets.

When offering a stream tube, the initiating client creates a local listening socket and offers it to the recipient client using the Offer method. When a recipient accepts a stream tube using the Accept method, the recipient's connection manager creates a new local listening socket. Each time the recipient's client connects to this socket, the initiator's connection manager proxies this connection to the originally offered socket.

Offer a stream tube exporting the local socket specified. The type of the listening address of the local service, as a member of Socket_Address_Type. The listening address of the local service, as indicated by the address_type. The access control the local service applies to the local socket, specified so the connection manager can behave appropriately when it connects. The dictionary of arbitrary Parameters to send with the tube offer. The contact associated with this channel doesn't have tube capabilities. The connection manager doesn't support the given address type or access-control type. Accept a stream tube that's in the "local pending" state. The connection manager will attempt to open the tube. The tube remains in the "local pending" state until the TubeChannelStateChanged signal is emitted. The type of address the connection manager should listen on.

The type of access control the connection manager should apply to the socket.

Note that if you plan to establish more than one connection through the tube, the Socket_Access_Control_Port access control can't be used as you can't connect more than once from the same port.

A parameter for the access control type, to be interpreted as specified in the documentation for the Socket_Access_Control enum. The address on which the connection manager will listen for connections to this tube. The client should not attempt to connect to the address until the tube is open. The access_control_param is invalid with the given access_control. The given address type or access-control mechanism is not supported.

Emitted each time a participant opens a new connection to its socket.

This signal is only fired on the offering side.

The handle of the participant who opened the new connection

A parameter which can be used by the listening process to identify the connection. Note that this parameter has a meaningful value only in the Socket_Access_Control_Port and Socket_Access_Control_Credentials cases. If a different Socket_Access_Control has been chosen when offering the tube, this parameter should be ignored.

In the Socket_Access_Control_Port case, the variant contains a struct Socket_Address_IPv4 (or Socket_Address_IPv6) containing the address from which the CM is connected to the client application.

In the Socket_Access_Control_Credentials case, the variant contains the byte (D-Bus signature 'y') that has been sent with the credentials.

The unique ID associated with this connection. This ID will be used to identifiy the connection when reporting errors with ConnectionClosed.

Emitted when the tube application connects to the CM's socket.

This signal is only fired on the accepting side.

The unique ID associated with this connection. This ID will be used to identifiy the connection when reporting errors with ConnectionClosed.

Emitted when a connection has been closed.

The ID of the connection.

The name of a D-Bus error describing the error that occurred.

The following errors can be used:

  • org.freedesktop.Telepathy.Error.Cancelled: user closed the socket or the tube.
  • org.freedesktop.Telepathy.Error.ConnectionLost: the bytestream relaying connection's data has been broken.
  • org.freedesktop.Telepathy.Error.ConnectionRefused: the tube offer refused the connection.
A debug message.

A string representing the service name that will be used over the tube. It should be a well-known TCP service name as defined by http://www.iana.org/assignments/port-numbers or http://www.dns-sd.org/ServiceTypes.html, for instance "rsync" or "daap".

When the tube is offered, the service name is transmitted to the other end.

When requesting a channel with Connection.Interface.Requests.CreateChannel, this property MUST be included in the request.

A mapping from address types (members of Socket_Address_Type) to arrays of access-control type (members of Socket_Access_Control) that the connection manager supports for stream tubes with that address type. For simplicity, if a CM supports offering a particular type of tube, it is assumed to support accepting it.

A typical value for a host without IPv6 support:

          {
            Socket_Address_Type_IPv4:
              [Socket_Access_Control_Localhost, Socket_Access_Control_Port,
               Socket_Access_Control_Netmask],
            Socket_Address_Type_Unix:
              [Socket_Access_Control_Localhost, Socket_Access_Control_Credentials]
          }
        

Connection Managers MUST support at least IPv4 with the localhost access control.

When requesting a channel with Connection.Interface.Requests.CreateChannel, this property MUST NOT be included in the request.

An identifier for a stream tube connection. These are defined with the NewLocalConnection or NewRemoteConnection signals and are used by ConnectionClosed to identify the closed connection.
telepathy-qt-0.9.3/spec/Client_Approver.xml0000644000175200001440000002331312000056607023166 0ustar00collabora-develusers00000000000000 Copyright © 2008-2009 Collabora Ltd. Copyright © 2008-2009 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as a stable interface)

Approvers are clients that notify the user that new channels have been created by a contact, and allow the user to accept or reject those channels. The new channels are represented by a ChannelDispatchOperation object, which is passed to the AddDispatchOperation method.

For instance, Empathy's tray icon, or the answer/reject window seen when a Maemo device receives a VoIP call, should be Approvers.

Approvers can also select which channel handler will be used for the channel, for instance by offering the user a list of possible handlers rather than just an accept/reject choice. However, the Channel Dispatcher must be able to prioritize possible handlers on its own using some reasonable heuristic, probably based on user configuration.

It is possible (and useful) to have an approver and a channel handler in the same process; this is particularly useful if a channel handler wants to claim responsibility for particular channels itself.

All approvers are notified simultaneously. For instance, in a desktop system, there might be one approver that displays a notification-area icon, one that is part of a contact list window and highlights contacts there, and one that is part of a full-screen media player.

Any approver can approve the handling of a channel dispatch operation with a particular channel handler by calling the HandleWith method. Approvers can also attempt to Claim channels; if this succeeds, the approver may handle the channels itself (if it is also a Handler), or close the channels in order to reject them.

At the D-Bus level, there is no "reject" operation: approvers wishing to reject channels SHOULD call the Claim method, then (if it succeeds) close the channels in any way they see fit.

The first approver to reply gets its decision acted on; any other approvers that reply at approximately the same time will get a D-Bus error, indicating that the channel has already been dealt with.

Approvers should usually prompt the user and ask for confirmation, rather than dispatching the channel to a handler straight away.

Non-interactive approvers can also be implemented as Observers as described in the interface description.

A specification of the channels in which this approver is interested. The AddDispatchOperation method should be called by the channel dispatcher whenever at least one of the channels in a channel dispatch operation matches this description.

This property works in exactly the same way as the Client.Observer.ObserverChannelFilter property. In particular, it cannot change while the approver process continues to own the corresponding Client bus name.

In the .client file, it is represented in the same way as ObserverChannelFilter, but the group has the same name as this interface and the keys start with ApproverChannelFilter instead of ObserverChannelFilter.

Called by the channel dispatcher when a ChannelDispatchOperation in which the approver has registered an interest is created, or when the approver starts up while such channel dispatch operations already exist.

The channel dispatcher SHOULD call this method on all approvers at the same time. If an approver returns an error from this method, the approver is assumed to be faulty.

If no approvers return from this method successfully (including situations where there are no matching approvers at all), the channel dispatcher SHOULD consider this to be an error, and recover by dispatching the channel to the most preferred handler.

Processes that aren't approvers (or don't at least ensure that there is some approver) probably shouldn't be making connections anyway, so there should always be at least one approver running.

The initial value of the ChannelDispatchOperation.Channels property, containing the Channels to be dispatched and their properties.

This can't be signalled to the approver through the Properties parameter of this method, because Channels is not an immutable property.

This argument always contains all of the channels in the channel dispatch operation, even if not all of them actually match the ApproverChannelFilter.

This seems the least bad way to handle such a situation; see the discussion on bug #21090.

The actual channels to be dispatched may reduce as channels are closed: this is signalled by ChannelDispatchOperation.ChannelLost.

Approvers SHOULD connect to ChannelLost and ChannelDispatchOperation.Finished. (if desired) before returning from AddDispatchOperation, since those signals are guaranteed not to be emitted until after all AddDispatchOperation calls have returned (with success or failure) or timed out.

The ChannelDispatchOperation to be processed.

Properties of the channel dispatch operation. The keys MUST be fully qualified D-Bus property names. This MUST NOT include properties that could change, SHOULD include as many properties as possible given that constraint, and MUST include at least the Account, Connection and PossibleHandlers properties.

telepathy-qt-0.9.3/spec/Client_Interface_Requests.xml0000644000175200001440000001711312000056607025164 0ustar00collabora-develusers00000000000000 Copyright © 2008-2009 Collabora Ltd. Copyright © 2008-2009 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as a stable interface)

This interface can be implemented by a Handler to be notified about requests for channels that it is likely to be asked to handle.

Called by the ChannelDispatcher to indicate that channels have been requested, and that if the request is successful, they will probably be handled by this Handler. The ChannelDispatcher SHOULD only call this method on one handler per request.

This allows the UI to start preparing to handle the channels in advance (e.g. render a window with an "in progress" message), improving perceived responsiveness.

The use of "probably" is because you can't necessarily tell from a channel request which handler will handle particular channels. A reasonable heuristic would be to match the request against the HandlerChannelFilter, and respect the preferred handler (if any).

If the request succeeds and is given to the expected Handler, the Requests_Satisfied parameter to HandleChannels can be used to match the channel to a previous AddRequest call.

This lets the UI direct the channels to the window that it already opened.

If the request fails, the expected handler is notified by the channel dispatcher calling its RemoveRequest method.

This lets the UI close the window or display the error.

The channel dispatcher SHOULD remember which handler was notified, and if the channel request succeeds, it SHOULD dispatch the channels to the expected handler, unless the channels do not match that handler's HandlerChannelFilter. If the channels are not dispatched to the expected handler, the handler that was expected is notified by the channel dispatcher calling its RemoveRequest method with the NotYours error.

Expected handling is for the UI to close the window it previously opened.

Handlers SHOULD NOT return an error from this method; errors returned from this method SHOULD NOT alter the channel dispatcher's behaviour.

Calls to this method are merely a notification.

The ChannelRequest object, which MUST have been returned by CreateChannel or EnsureChannel before this method is called. See those methods for the rationale of this ordering.

Some of the properties of the ChannelRequest. To avoid race conditions, this dictionary MUST NOT include properties whose values could subsequently change. It SHOULD include as many properties as possible, given that constraint.

In particular, the properties Requests, UserActionTime and Account MUST be included, and Hints MUST be included if implemented.

Called by the ChannelDispatcher to indicate that a request previously passed to AddRequest has failed and should be disregarded.

Handlers SHOULD NOT return an error from this method; errors returned from this method SHOULD NOT alter the channel dispatcher's behaviour.

Calls to this method are merely a notification.

The request that failed.

The name of the D-Bus error with which the request failed.

If this is org.freedesktop.Telepathy.Error.NotYours, this indicates that the request succeeded, but all the resulting channels were given to some other handler.

Any message supplied with the D-Bus error.
telepathy-qt-0.9.3/spec/Connection_Interface_Capabilities.xml0000644000175200001440000003066512000056607026632 0ustar00collabora-develusers00000000000000 Copyright (C) 2005, 2006 Collabora Limited Copyright (C) 2005, 2006 Nokia Corporation Copyright (C) 2006 INdT

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

An interface for connections where it is possible to know what channel types may be requested before the request is made to the connection object. Each capability represents a commitment by the connection manager that it will ordinarily be able to create a channel when given a request with the given type and handle.

Capabilities pertain to particular contact handles, and represent activities such as having a text chat or a voice call with the user. The activities are represented by the D-Bus interface name of the channel type for that activity.

The generic capability flags are defined by Connection_Capability_Flags.

In addition, channel types may have type specific capability flags of their own, which are described in the documentation for each channel type.

This interface also provides for user interfaces notifying the connection manager of what capabilities to advertise for the user. This is done by using the AdvertiseCapabilities method, and deals with the interface names of channel types and the type specific flags pertaining to them which are implemented by available client processes.

Previously, this interface also expressed capabilities of the connection itself, indicating what sorts of channels could be requested (for instance, the ability to open chatroom lists or chatrooms). However, this was never very well-defined or consistent, and as far as we know it was never implemented correctly. This usage is now deprecated. Client implementations SHOULD use ContactCapabilities instead. Connection managers implementing Capabilities MUST implement ContactCapabilities too. The given channel type and handle can be given to RequestChannel to create a new channel of this type. The given contact can be invited to an existing channel of this type. A pair (channel type, type-specific flags) as passed to AdvertiseCapabilities on the Capabilities interface. A struct (contact handle, channel type, generic flags, type-specific flags) representing a capability posessed by a contact, as returned by GetCapabilities on the Capabilities interface. A struct (contact handle, channel type, old generic flags, new generic flags, old type-specific flags, new type-specific flags) representing a change to one of a contact's capabilities, as seen in the CapabilitiesChanged signal on the Capabilities interface. An array of structures containing:
  • a string channel type
  • a bitwise OR of type specific capability flags
An array of D-Bus interface names of channel types to remove An array of structures describing the current capabilities containing:
  • a string channel type
  • a bitwise OR of type specific capability flags

Used by user interfaces to indicate which channel types they are able to handle on this connection. Because these may be provided by different client processes, this method accepts channel types to add and remove from the set already advertised on this connection. The type of advertised capabilities (create versus invite) is protocol-dependent and hence cannot be set by the this method. In the case of a client adding an already advertised channel type but with new channel type specific flags, the connection manager should simply add the new flags to the set of advertised capabilities.

Upon a successful invocation of this method, the CapabilitiesChanged signal will be emitted for the user's own handle ( Connection.GetSelfHandle) by the connection manager to indicate the changes that have been made. This signal should also be monitored to ensure that the set is kept accurate - for example, a client may remove capabilities or type specific capability flags when it exits which are still provided by another client.

On connections managed by the ChannelDispatcher, this method SHOULD NOT be used by clients other than the ChannelDispatcher itself.

An array of structures containing:
  • an integer handle representing the contact
  • a string channel type
  • a bitwise OR of the contact's old generic capability flags
  • a bitwise OR of the contact's new generic capability flags
  • a bitwise OR of the contact's old type specific capability flags
  • a bitwise OR of the contact's new type specific capability flags

Announce that there has been a change of capabilities on the given handle.

If the handle is zero, the capabilities refer to the connection itself, in some poorly defined way. This usage is deprecated and clients should ignore it.

An array of contact handles for this connection.

This may include zero, which originally meant a query for capabilities available on the connection itself. This usage is deprecated; clients SHOULD NOT do this, and connection managers SHOULD proceed as though zero had not been present in this list.

An array of structures containing:
  • an integer handle representing the contact
  • a string channel type
  • a bitwise OR of generic capability flags for the type
  • a bitwise OR of type specific capability flags for the type
Returns an array of capabilities for the given contact handles. The handle does not represent a contact and is not zero

The same structs that would be returned by GetCapabilities (all of them will redundantly have the contact's handle as the first member). Omitted from the result if the contact's capabilities are not known; present in the result as an empty array if the contact is known to have no capabilities at all.

telepathy-qt-0.9.3/spec/Channel_Interface_Addressing.xml0000644000175200001440000001221712000056607025566 0ustar00collabora-develusers00000000000000 Copyright © 2010 Collabora Limited

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as draft)

This interface provides properties that can be used for requesting channels through different contact addressing schemes like vCard addresses or URIs.

The vCard field, normalized to lower case, TargetVCardAddress refers to.

The url vCard field MUST NOT appear here; see TargetURI instead.

In practice, protocols have a limited set of URI schemes that make sense to resolve as a contact.

If this is omitted from a request, TargetVCardAddress MUST be omitted as well.

The URI scheme used in TargetURI

While this seems redundant, since the scheme is included in TargetURI, it exists for constructing RequestableChannelClasses that support a limited set of URI schemes.

If this is omitted from a request, TargetURI MUST be omitted as well.

The vCard address of the Channel's target.

If this is present in a channel request, TargetVCardField MUST be present, and TargetHandle, TargetID, and TargetURI MUST NOT be present. TargetHandleType must either not be present or set to Handle_Type_Contact. The request MUST fail with error InvalidHandle, without side-effects, if the requested vCard address cannot be found.

The URI of the Channel's target. The URI's scheme (i.e. the part before the first colon) MUST be identical to TargetURIScheme.

If this is present in a channel request, TargetVCardField MUST be present, and TargetHandle, TargetID, and TargetVCardAddress MUST NOT be present. TargetHandleType must either not be present or set to Handle_Type_Contact. The request MUST fail with error InvalidHandle, without side-effects, if the requested vCard address cannot be found.

telepathy-qt-0.9.3/spec/Channel_Interface_SASL_Authentication.xml0000644000175200001440000010344312000056607027306 0ustar00collabora-develusers00000000000000 Copyright © 2010 Collabora Limited

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API)

A channel interface for SASL authentication, as defined by RFC 4422. When this interface appears on a ServerAuthentication channel, it represents authentication with the server. In future, it could also be used to authenticate with secondary services, or even to authenticate end-to-end connections with contacts. As a result, this interface does not REQUIRE ServerAuthentication to allow for a potential future Channel.Type.PeerAuthentication interface.

In any protocol that requires a password, the connection manager can use this channel to let a user interface carry out a simple SASL-like handshake with it, as a way to get the user's credentials interactively. This can be used to connect to protocols that may require a password, without requiring that the password is saved in the Account.Parameters.

In some protocols, such as XMPP, authentication with the server is also carried out using SASL. In these protocols, a channel with this interface can provide a simple 1:1 mapping of the SASL negotiations taking place in the protocol, allowing more advanced clients to perform authentication via SASL mechanisms not known to the connection manager.

By providing SASL directly when the protocol supports it, we can use mechanisms like Kerberos or Google's X-GOOGLE-TOKEN without specific support in the connection manager.

For channels managed by a ChannelDispatcher, only the channel's Handler may call the methods on this interface. Other clients MAY observe the authentication process by watching its signals and properties.

There can only be one Handler, which is a good fit for SASL's 1-1 conversation between a client and a server.

A SASL mechanism, as defined by RFC 4422 and registered in the IANA registry of SASL mechanisms, or an unregistered SASL mechanism such as X-GOOGLE-TOKEN used in the same contexts.

As a special case, pseudo-mechanisms starting with X-TELEPATHY- are defined by this specification. Use of these pseudo-mechanisms indicates that the user's credentials are to be passed to the connection manager, which will then use them for authentication with the service, either by implementing the client side of some SASL mechanisms itself or by using a non-SASL protocol. The only such pseudo-mechanism currently defined is X-TELEPATHY-PASSWORD.

The X-TELEPATHY-PASSWORD mechanism is extremely simple:

  • The client MUST call StartMechanismWithData, with Initial_Data set to the password encoded in UTF-8. For simplicity, calling StartMechanism followed by calling Respond is not allowed in this mechanism.
  • The connection manager uses the password, together with authentication details from the Connection parameters, to authenticate itself to the server.
  • When the connection manager finishes its attempt to authenticate to the server, the channel's state changes to either SASL_Status_Server_Succeeded or SASL_Status_Server_Failed as appropriate.

The SASL mechanisms as offered by the server, plus any pseudo-SASL mechanisms supported by the connection manager for credentials transfer. For instance, in a protocol that natively uses SASL (like XMPP), this might be [ "X-TELEPATHY-PASSWORD", "PLAIN", "DIGEST-MD5", "SCRAM-SHA-1" ].

To make it possible to implement a very simple password-querying user interface without knowledge of any particular SASL mechanism, implementations of this interface MUST implement the pseudo-mechanism X-TELEPATHY-PASSWORD, unless none of the available mechanisms use a password at all.

If true, StartMechanismWithData can be expected to work for SASL mechanisms not starting with X-TELEPATHY- (this is the case in most, but not all, protocols). If false, StartMechanism must be used instead.

This property does not affect the X-TELEPATHY- pseudo-mechanisms such as X-TELEPATHY-PASSWORD, which can use StartMechanismWithData regardless of the value of this property.

If true, StartMechanism and (if supported) StartMechanismWithData can be expected to work when in one of the Failed states. If false, the only thing you can do after failure is to close the channel.

Retrying isn't required to work, although some protocols and implementations allow it.

The current status of this channel. Change notification is via the SASLStatusChanged signal.

The reason for the SASLStatus, or an empty string if the state is neither Server_Failed nor Client_Failed.

In particular, an ordinary authentication failure (as would be produced for an incorrect password) SHOULD be represented by AuthenticationFailed, cancellation by the user's request SHOULD be represented by Cancelled, and cancellation by a local process due to inconsistent or invalid challenges from the server SHOULD be represented by ServiceConfused.

If this interface appears on a ServerAuthentication channel, and connection to the server fails with an authentication failure, this error code SHOULD be copied into the Connection.ConnectionError signal.

If SASLError is non-empty, any additional information about the last disconnection; otherwise, the empty map. The keys and values are the same as for the second argument of Connection.ConnectionError.

If this interface appears on a ServerAuthentication channel, and connection to the server fails with an authentication failure, these details SHOULD be copied into the Connection.ConnectionError signal.

The identity for which authorization is being attempted, typically the 'account' from the RequestConnection parameters, normalized and formatted according to the conventions used for SASL in this protocol.

The normalization used for SASL might not be the same normalization used elsewhere: for instance, in a protocol with email-like identifiers such as XMPP or SIP, the user "juliet@example.com" might have to authenticate to the example.com server via SASL PLAIN as "juliet".

This is usually achieved by using the authorization identity for authentication, but an advanced Handler could offer the option to authenticate under a different identity.

The terminology used here is that the authorization identity is who you want to act as, and the authentication identity is used to prove that you may do so. For instance, if Juliet is authorized to access a role account, "sysadmin@example.com", and act on its behalf, it might be possible to authenticate as "juliet@example.com" with her own password, but request to be authorized as "sysadmin@example.com" instead of her own account. See RFC 4422 §3.4.1 for more details.

In SASL the authorization identity is normally guessed from the authentication identity, but the information available to the connection manager is the identity for which authorization is required, such as the desired JID in XMPP, so that's what we signal to UIs; it's up to the UI to choose whether to authenticate as the authorization identity or some other identity.

As a concrete example, the "sysadmin" XMPP account mentioned above would have { 'account': 'sysadmin@example.com' } in its Parameters, and this property would also be 'sysadmin@example.com'. A simple Handler would merely prompt for sysadmin@example.com's password, and use that JID as both the authorization and authentication identity, which might result in SASL PLAIN authentication with the initial response '\000sysadmin@example.com\000root'.

A more advanced Handler might also ask for an authentication identity, defaulting to 'sysadmin@example.com'; if Juliet provided authentication identity 'juliet@example.com' and password 'romeo', the Handler might perform SASL PLAIN authentication using the initial response 'sysadmin@example.com\000juliet@example.com\000romeo'.

The default username for use with SASL mechanisms that deal with a "simple username" (as defined in RFC 4422). If such a SASL mechanism is in use, clients SHOULD default to using the DefaultUsername; also, if the client uses the DefaultUsername, it SHOULD assume that the authorization identity AuthorizationIdentity will be derived from it by the server.

In XMPP, servers typically expect "user@example.com" to authenticate with username "user"; this was a SHOULD in RFC 3920.

3920bis weakens that SHOULD to "in the absence of local information provided by the server, an XMPP client SHOULD assume that the authentication identity for such a SASL mechanism is the combination of a user name and password, where the simple user name is the localpart of the user's JID".

For example, in the simple case, if the user connects with RequestConnection({ account: "user@example.com" }) and use PLAIN with password "password", he or she should authenticate like so: "\0user\0password" and the channel will look like this:

{ "...DefaultUsername": "user",
  "...AuthorizationIdentity": "user@example.com }

In the complex case, if the same user is using his or her sysadmin powers to log in as the "announcements" role address, he or she would connect with RequestConnection({ account: "announcements@example.com" }) and the SASL channel would look like this:

{ "...DefaultUsername": "announcements",
  "...AuthorizationIdentity": "announcements@example.com }

A sufficiently elaborate UI could give the opportunity to override the username from "announcements" to "user". The user's simple username is still "user", and the password is still "password", but this time he or she is trying to authorize to act as announcements@example.com, so the UI would have to perform SASL PLAIN with this string: "announcements@example.com\0user\0password", where "announcements@example.com" is the AuthorizationIdentity.

The default realm (as defined in RFC 2831) to use for authentication, if the server does not supply one.

The server is not required to provide a realm; if it doesn't, the client is expected to ask the user or provide a sensible default, typically the requested DNS name of the server. In some implementations of DIGEST-MD5, the server does not specify a realm, but expects that the client will choose a particular default, and authentication will fail if the client's default is different. Connection managers for protocols where this occurs are more easily able to work around these implementations than a generic client would be.

Whether or not the client can save the authentication response and re-use it to automate future authentication challenges.

If this property is False, the client SHOULD NOT attempt to cache the authentication response in its own keyring.

If this property is not specified, it should be treated as if it were True.

Some protocols or services may have terms and conditions that prohibit caching a user's credentials.
The chosen mechanism.

Start an authentication try using Mechanism, without sending initial data (an "initial response" as defined in RFC 4422).

This method is appropriate for mechanisms where the client cannot send anything until it receives a challenge from the server, such as DIGEST-MD5 in "initial authentication" mode.

The channel is not in a state where starting authentication makes sense (i.e. SASL_Status_Not_Started, or (if CanTryAgain is true) SASL_Status_Server_Failed or SASL_Status_Client_Failed). You should call AbortSASL and wait for SASL_Status_Client_Failed before starting another attempt. The server or connection manager doesn't implement the given SASL mechanism. Choose a SASL mechanism from AvailableMechanisms, or abort authentication if none of them are suitable.
The chosen mechanism. Initial data (an "initial response" in RFC 4422's terminology) to send with the mechanism.

Start an authentication try using Mechanism, and send Initial_Data as the "initial response" defined in RFC 4422 §3.3.

This method is appropriate for mechanisms where the client may send data first, such as PLAIN, or must send data first, such as DIGEST-MD5 in "subsequent authentication" mode.

Having two methods allows any mechanism where it makes a difference to distinguish between the absence of an initial response (StartMechanism) and a zero-byte initial response (StartMechanismWithData, with Initial_Data empty).

If the HasInitialData property is false, this indicates that the underlying protocol does not make it possible to send initial data. In such protocols, this method may only be used for the X-TELEPATHY- pseudo-mechanisms (such as X-TELEPATHY-PASSWORD), and will fail if used with an ordinary SASL mechanism.

For instance, the IRC SASL extension implemented in Charybdis and Atheme does not support initial data - the first message in the exchange only carries the mechanism. This is significant if using DIGEST-MD5, which cannot be used in the faster "subsequent authentication" mode on a protocol not supporting initial data.

The channel is not in a state where starting authentication makes sense (i.e. SASL_Status_Not_Started, or (if CanTryAgain is true) SASL_Status_Server_Failed or SASL_Status_Client_Failed). You should call AbortSASL and wait for SASL_Status_Client_Failed before starting another attempt. The server or connection manager doesn't implement the given SASL mechanism (choose one from AvailableMechanisms, or abort authentication if none of them are suitable), or doesn't allow initial data to be sent (as indicated by HasInitialData; call StartMechanism instead).
The response data.

Send a response to the the last challenge received via NewChallenge.

Either the state is not In_Progress, or no challenge has been received yet, or you have already responded to the last challenge.

If the channel's status is SASL_Status_Server_Succeeded, this method confirms successful authentication and advances the status of the channel to SASL_Status_Succeeded.

If the channel's status is SASL_Status_In_Progress, calling this method indicates that the last NewChallenge signal was in fact additional data sent after a successful SASL negotiation, and declares that from the client's point of view, authentication was successful. This advances the state of the channel to SASL_Status_Client_Accepted.

In mechanisms where the server authenticates itself to the client, calling this method indicates that the client considers this to have been successful. In the case of ServerAuthentication channels, this means that the connection manager MAY continue to connect, and MAY advance the Connection.Status to Connected.

Either the state is neither In_Progress nor Server_Succeeded, or no challenge has been received yet, or you have already responded to the last challenge.
Reason for abort. Debug message for abort.

Abort the current authentication try.

If the current status is SASL_Status_Server_Failed or SASL_Status_Client_Failed, this method returns successfully, but has no further effect. If the current status is SASL_Status_Succeeded or SASL_Status_Client_Accepted then NotAvailable is raised. Otherwise, it changes the channel's state to SASL_Status_Client_Failed, with an appropriate error name and reason code.

The current state is either Succeeded or Client_Accepted.
Emitted when the status of the channel changes. The new value of SASLStatus. The new value of SASLError. The new value of SASLErrorDetails.

Emitted when a new challenge is received from the server, or when a message indicating successful authentication and containing additional data is received from the server.

When the channel's handler is ready to proceed, it should respond to the challenge by calling Respond, or respond to the additional data by calling AcceptSASL. Alternatively, it may call AbortSASL to abort authentication.

The challenge data or additional data from the server.

A reason why SASL authentication was aborted by the client.

The server sent an invalid challenge or data. The user aborted the authentication.
The initial state. The Handler SHOULD either call AbortSASL, or connect to the NewChallenge signal then call StartMechanism or StartMechanismWithData. The challenge/response exchange is in progress. The Handler SHOULD call either Respond or AcceptSASL exactly once per emission of NewChallenge, or call AbortSASL at any time. The server has indicated successful authentication, and the connection manager is waiting for confirmation from the Handler. The Handler must call either AcceptSASL or AbortSASL to indicate whether it considers authentication to have been successful. The Handler has indicated successful authentication, and the connection manager is waiting for confirmation from the server. The state will progress to either Succeeded or Server_Failed when confirmation is received. Everyone is happy (the server sent success, and the client has called AcceptSASL). Connection to the server will proceed as soon as this state is reached. The Handler SHOULD call Close to close the channel. The server has indicated an authentication failure. If CanTryAgain is true, the client may try to authenticate again, by calling StartMechanism or StartMechanismWithData again. Otherwise, it should give up completely, by calling Close on the channel. The client has indicated an authentication failure. The possible actions are the same as for Server_Failed.
telepathy-qt-0.9.3/spec/Call_Content_Interface_DTMF.xml0000644000175200001440000002513212000056607025232 0ustar00collabora-develusers00000000000000 Copyright © 2005-2010 Collabora Limited Copyright © 2005-2010 Nokia Corporation Copyright © 2006 INdT

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API) An interface that gives audio Contents the ability to send DTMF events which have been established using the Call1 channel type. The event codes used are in common with those defined in RFC4733, and are listed in the DTMF_Event enumeration. A numeric event code from the DTMF_Event enum.

Start sending a DTMF tone to all eligible streams in the channel. Where possible, the tone will continue until StopTone is called. On certain protocols, it may only be possible to send events with a predetermined length. In this case, the implementation MAY emit a fixed-length tone, and the StopTone method call SHOULD return NotAvailable.

The client may wish to control the exact duration and timing of the tones sent as a result of user's interaction with the dialpad, thus starting and stopping the tone sending explicitly.

Tone overlaping or queueing is not supported, so this method can only be called if no DTMF tones are already being played.

The event id was invalid. DTMF tones are already being played.
Stop sending any DTMF tones which have been started using the StartTone or MultipleTones methods. If there is no current tone, this method will do nothing. If MultipleTones was used, the client should not assume the sending has stopped immediately; instead, the client should wait for the StoppedTones signal. On some protocols it might be impossible to cancel queued tones immediately. Continuous tones are not supported by this stream. Deprecated, since stream IDs are ignored.

A string representation of one or more DTMF events. Implementations of this method MUST support all of the following characters in this string:

  • the digits 0-9, letters A-D and a-d, and symbols '*' and '#' correspond to the members of DTMF_Event
  • any of 'p', 'P', 'x', 'X' or ',' (comma) results in an implementation-defined pause, typically for 3 seconds
  • 'w' or 'W' waits for the user to continue, by stopping interpretation of the string, and if there is more to be played, emitting the TonesDeferred signal with the rest of the string as its argument: see that signal for details

Send multiple DTMF events to all eligible streams in the channel. Each tone will be played for an implementation-defined number of milliseconds (typically 250ms), followed by a gap before the next tone is played (typically 100ms). The duration and gap are defined by the protocol or connection manager.

In cases where the client knows in advance the tone sequence it wants to send, it's easier to use this method than manually start and stop each tone in the sequence.

The tone and gap lengths may need to vary for interoperability, according to the protocol and other implementations' ability to recognise tones. At the time of writing, GStreamer uses a minimum of 250ms tones and 100ms gaps when playing in-band DTMF in the normal audio stream, or 70ms tones and 50ms gaps when encoding DTMF as audio/telephone-event.

Tone overlaping or queueing is not supported, so this method can only be called if no DTMF tones are already being played.

The supplied Tones string was invalid. DTMF tones are already being played.
Indicates whether there are DTMF tones currently being sent in the channel. If so, the client should wait for StoppedTones signal before trying to send more tones.

The tones waiting for the user to continue, if any.

When this property is set to a non-empty value, TonesDeferred is emitted. When any tones are played (i.e. whenever SendingTones is emitted), this property is reset to the empty string.

The new non-empty value of DeferredTones.

Emitted when 'w' or 'W', indicating "wait for the user to continue", is encountered while playing a DTMF string queued by MultipleTones. Any queued DTMF events after the 'w', which have not yet been played, are placed in the DeferredTones property and copied into this signal's argument.

When the channel handler is ready to continue, it MAY pass the value of DeferredTones to MultipleTones, to resume sending. Alternatively, it MAY ignore the deferred tones, or even play different tones instead. Any deferred tones are discarded the next time a tone is played.

This signal SHOULD NOT be emitted if there is nothing left to play, i.e. if the 'w' was the last character in the DTMF string.

DTMF string (one or more events) that is to be played.

DTMF tone(s)are being sent to all eligible streams in the channel. The signal is provided to indicating the fact that the streams are currently being used to send one or more DTMF tones, so any other media input is not getting through to the audio stream. It also serves as a cue for the StopTone method.

True if the DTMF tones were actively cancelled via StopTone.

DTMF tones have finished playing on streams in this channel.

telepathy-qt-0.9.3/spec/Account_Manager.xml0000644000175200001440000003057412000056607023127 0ustar00collabora-develusers00000000000000 Copyright © 2008-2009 Collabora Ltd. Copyright © 2008-2009 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

The account manager is a central service used to store account details.

The current account manager is defined to be the process that owns the well-known bus name org.freedesktop.Telepathy.AccountManager on the session bus. This process must export an /org/freedesktop/Telepathy/AccountManager object with the AccountManager interface.

A list of the interfaces provided by the account manager object. A list of the valid (complete, usable) Accounts. Change notification is via AccountValidityChanged. This split between valid and invalid accounts makes it easy to ignore the invalid ones. The only things that should be manipulating invalid accounts are account-editing UIs, which might be able to rescue them. A list of incomplete or otherwise unusable Accounts. Change notification is via AccountValidityChanged. The given account has been removed. This is effectively change notification for the valid and invalid accounts lists. On emission of this signal, the Account indicated will no longer be present in either of the lists. An Account, which must not be used any more. The validity of the given account has changed. New accounts are also indicated by this signal, as an account validity change (usually to True) on an account that did not previously exist. This is effectively change notification for the valid and invalid accounts lists. An Account. True if the account is now valid.

A list of the fully qualified names of properties that can be set via the Properties argument to CreateAccount when an account is created.

Examples of good properties to support here include Icon, Enabled, Nickname, AutomaticPresence, ConnectAutomatically, Supersedes, RequestedPresence and Avatar.

Examples of properties that would make no sense here include Valid, Connection, ConnectionStatus, ConnectionStatusReason, CurrentPresence and NormalizedName.

This property MUST NOT include include the DisplayName and Parameters properties, which are set using separate arguments.

This property MAY include the names of properties that, after account creation, will be read-only: this indicates that the property can be set at account creation but not changed later.

For example, an account manager might support migration tools that use this to preserve the HasBeenOnline property, even though that property is usually read-only.

Request the creation of a new Account. The account manager SHOULD NOT allow invalid accounts to be created. added the Properties argument The name of the connection manager, e.g. "salut". The protocol, e.g. "local-xmpp". The initial value of the new account's DisplayName property. The account manager SHOULD modify this to make it unique if an Account already exists with the same display name, for instance by appending a number or the 'account' parameter. Account manager implementations SHOULD accept an empty string, but account editing user interfaces should avoid passing an empty string for this parameter.

The account creation UI may ask the user for a name for the new account. If the author of the UI chooses not to do this, the account creation UI is better able to suggest a default display name because it has protocol-specific knowledge which the account manager does not.

The account manager always knows the complete list of accounts so it can easily tell whether it should append something to the display name to avoid presenting two identically-named accounts to the user.

Initial parameter values, as would be passed to RequestConnection.

The values of any other properties to be set immediately on the new Account.

Only the properties mentioned in SupportedAccountProperties are acceptable here. In particular, the DisplayName and Parameters properties are never allowed here, since they are set using the other arguments to this method.

Account manager implementations SHOULD support creating accounts with an empty value for this argument.

The new Account.

The Connection_Manager is not installed or does not implement the given Protocol.

The Parameters provided were unacceptable: they might omit a Required parameter, include an unsupported parameter, or have a value of the wrong type.

telepathy-qt-0.9.3/spec/Channel_Interface_Mergeable_Conference.xml0000644000175200001440000001164612000056607027522 0ustar00collabora-develusers00000000000000 Copyright © 2009 Collabora Limited Copyright © 2009 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(draft 1)

An interface for multi-user conference channels that can have additional individual channels merged into them after they are created.

This interface addresses part of freedesktop.org bug #24906 (GSM-compatible conference calls). GSM is currently the only protocol known to implement this; PBXs might implement it too.

It might be made into a mandatory-to-implement part of Conference, or kept as a separate interface, when stabilized.

Request that the given channel be incorporated into this channel.

The given channel SHOULD be added to Conference.Channels if and only if the underlying protocol signals the merge in some way. It MUST NOT be added to Conference.InitialChannels (to preserve immutability).

In GSM it is possible to merge additional calls into an ongoing conference.

In XMPP this method could be implemented to merge a 1-1 Text channel into a MUC Text channel by inviting the peer from the Text channel into the MUC, or to merge a 1-1 Jingle call into a Muji call by inviting the peer from the Jingle call into the Muji call. (MUC and Muji channels are both implemented by XMPP MUCs, with Handle_Type_Room.)

A channel with the same ChannelType as this one, but with TargetHandleType = CONTACT.

The given channel isn't suitable for merging into this one: for instance, it might have the wrong channel type or handle type. It will never be possible to merge channels into this particular conference. The given channel is theoretically suitable for merging into this one, but that's not currently possible for some reason (for instance, this SHOULD be raised if a limit on the number of channels in a conference is exceeded). [FIXME: PermissionDenied?]
telepathy-qt-0.9.3/spec/Channel_Interface_Securable.xml0000644000175200001440000000674312000056607025417 0ustar00collabora-develusers00000000000000 Copyright (C) 2010 Collabora Ltd.

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

as stable API

This interface exists to expose security information about Channels. The two properties are sometimes immutable and can be used to make decisions on how cautious to be about transferring sensitive data. The special case of ServerAuthentication channels is one example of where the two properties are immutable.

For example, clients MAY use these properties to decide whether the PLAIN mechanism is acceptable for a SASLAuthentication channel.

True if this channel occurs over an encrypted connection. This does not imply that steps have been taken to avoid man-in-the-middle attacks.

For future support for RFC 5056 Channel Binding it is desirable to be able to use some SASL mechanisms over an encrypted connection to an unverified peer, which can prove that it is the desired destination during the SASL negotiation.

True if this channel occurs over a connection that is protected against tampering, and has been verified to be with the desired destination: for instance, one where TLS was previously negotiated, and the TLS certificate has been verified against a configured certificate authority or accepted by the user.

telepathy-qt-0.9.3/spec/Connection_Interface_Aliasing.xml0000644000175200001440000002107112000056607025757 0ustar00collabora-develusers00000000000000 Copyright (C) 2005, 2006 Collabora Limited Copyright (C) 2005, 2006 Nokia Corporation Copyright (C) 2006 INdT

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

A dictionary whose keys are contact handles and whose values are aliases. A pair (contact handle, alias) as seen in the AliasesChanged signal. An array containing structs of:
  • the handle representing the contact
  • the new alias
Signal emitted when a contact's alias (or that of the user) is changed.

The aliases of contacts on this connection may be changed by the user of the service, not just by the contacts themselves. This is the case on Jabber, for instance.

It is possible that aliases can be changed by the contacts too - which alias takes precedence is not defined by this specification, and depends on the server and/or connection manager implementation.

This flag only applies to the aliases of "globally valid" contact handles. At this time, clients should not expect to be able to change the aliases corresponding to any channel-specific handles. If this becomes possible in future, a new flag will be defined.

An integer with a bitwise OR of flags from ConnectionAliasFlags Return a bitwise OR of flags detailing the behaviour of aliases on this connection. An array of handles representing contacts A list of aliases in the same order as the contact handles Request the value of several contacts' aliases at once. An array of handles representing contacts A dictionary mapping contact handles to aliases Request the value of several contacts' aliases at once. This SHOULD only return cached aliases, falling back on the contact identifier (i.e. the string corresponding to the handle) if none is present. Also if there was no cached alias, a request SHOULD be started of which the result is later signalled by AliasesChanged. A dictionary mapping integer handles of contacts to strings of the new alias to set. Request that the alias of the given contact be changed. Success will be indicated by emitting an AliasesChanged signal. On connections where the CONNECTION_ALIAS_FLAG_USER_SET flag is not set, this method will only ever succeed if the contact is the user's own handle (as returned by Connection.GetSelfHandle).

The same string that would be returned by GetAliases (always present with some value, possibly the same as Connection/contact-id, if information from the Aliasing interface was requested)

An interface on connections to support protocols where contacts have an alias which they can change at will. Provides a method for the user to set their own alias, and a signal which should be emitted when a contact's alias is changed or first discovered.

On connections where the user is allowed to set aliases for contacts and store them on the server, the GetAliasFlags method will have the CONNECTION_ALIAS_FLAG_USER_SET flag set, and the SetAliases method may be called on contact handles other than the user themselves.

Aliases are intended to be used as the main displayed name for the contact, where available.

telepathy-qt-0.9.3/spec/Call_Interface_Mute.xml0000644000175200001440000001432312000056607023720 0ustar00collabora-develusers00000000000000 Copyright © 2005-2010 Nokia Corporation Copyright © 2005-2010 Collabora Ltd 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 Street, Fifth Floor, Boston, MA 02110-1301, USA. (as stable API)

Interface for calls which may be muted. This only makes sense for channels where audio or video is streaming between members.

Muting a call content indicates that the user does not wish to send outgoing audio or video.

It should always be possible to mute an entire call. It is sometimes also possible to mute individual Contents (e.g. to prevent background noise from disturbing other participants, but remain visible on webcam) or to mute individual streams (e.g. to "whisper" to other call participants)

For some protocols, the fact that the content is muted needs to be transmitted to the peer; for others, the notification to the peer is only informational (eg. XMPP), and some protocols may have no notion of muting at all.
The mute state of (at least part of) the call. See LocalMuteState for more details. All streams are unmuted (the call is active). New channels SHOULD have this mute state. All streams are Muted. The connection manager is attempting to move to state Muted, but has not yet completed that operation. It is unspecified whether any, all or none of the streams making up the channel are muted. Examining the Mute state of Call Contents (if applicable) may provide more useful information. The connection manager is attempting to move to state Unmuted, but has not yet completed that operation. It is unspecified whether any, all or none of the streams making up the channel are muted. Examining the Mute state of Call Contents or Streams may provide more useful information. Some of the constituent Streams are Muted. This state only makes sense on Call Channels or Contents. Examining the Mute state of Call Contents or Streams should provide more useful information. Emitted to indicate that the mute state has changed for this call content. This may occur as a consequence of the client calling RequestMuted, or as an indication that another client has (un)muted the content. The new mute state. The current mute state of this part of the call. New Contents should inherit the value of this property from the parent Call1. Similarly, Streams should inherit it from the parent Content. renamed from SetMuted to Mute renamed back from Mute to SetMuted True if the client wishes to mute the Content or Call.

Inform the CM that the Call, Content or Stream should be muted or unmuted.

The CM will tell the streaming implementation to Mute Streams as required, and emit MuteStateChanged when done.

telepathy-qt-0.9.3/spec/Channel_Interface_HTML.xml0000644000175200001440000001027212000056607024246 0ustar00collabora-develusers00000000000000 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(draft version, not API-stable)

This interface extends the Messages interface to support capability discovery, so clients can decide what subset of HTML is supported.

(However, the capability discovery mechanism has not been written yet, so this interface MUST NOT be used. It exists only to indicate what direction we intend to go in.)

XMPP supports all of XHTML-IM, and SIP (at least theoretically) supports all of XHTML. However, many protocols are more limited - for instance, in MSN you can only set font properties for a whole message at a time. We should not mislead users into thinking they can send MSN messages where individual words are emphasized.

If this interface is present, clients MAY send XHTML formatted text in message parts with type "text/html", and SHOULD interpret "text/html" message parts received in reply.

Client authors SHOULD pay careful attention to the security considerations in XEP-0071, "XHTML-IM", to avoid exposing client users to security risks. Clients MUST NOT assume that connection managers will filter messages to remove unsafe HTML.

Connection managers are the components in Telepathy that are most likely to be exploitable by a remote attacker to run malicious code (since they are network-facing), so any filtering that the CM does might be subverted.

To avoid misleading users, clients SHOULD only present UI for the subset of HTML that is indicated to be supported by this interface. It follows that clients SHOULD NOT send unsupported markup to the connection manager. However, even if the connection manager cannot send arbitrary XHTML, it MUST cope gracefully with being given arbitrary XHTML by a client.

Connection managers should be lenient in what they receive.

Clients MUST NOT send HTML that is not well-formed XML, but connection managers MAY signal HTML that is malformed or invalid. Clients SHOULD attempt to parse messages as XHTML, but fall back to using a permissive "tag-soup" HTML parser if that fails. (FIXME: or should the presence of this interface imply that the CM fixes up "text/html" to be XHTML? In practice that would result in all the CMs having to link against libxml2 or something... the rationale above no longer applies here, since dropping a malformed message is "safe")

telepathy-qt-0.9.3/spec/Channel_Interface_Splittable.xml0000644000175200001440000000604412000056607025607 0ustar00collabora-develusers00000000000000 Copyright © 2009 Collabora Limited Copyright © 2009 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(draft 1)

An interface for channels that can be made conceptually part of a Conference, and can then be detached from that conference.

This interface addresses part of freedesktop.org bug #24906 (GSM-compatible conference calls). GSM is currently the only protocol known to implement this; PBXs might implement it too.

Request that this channel is removed from any Conference of which it is a part.

This implies that the media streams within the conference are put on hold and the media streams within the member channel leaving the conference are unheld.

This channel isn't in a conference. This channel is in a conference but can't currently be split away from it.
telepathy-qt-0.9.3/spec/Media_Session_Handler.xml0000644000175200001440000000702212000056607024250 0ustar00collabora-develusers00000000000000 Copyright (C) 2005, 2006 Collabora Limited Copyright (C) 2005, 2006 Nokia Corporation Copyright (C) 2006 INdT

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

Use StreamHandler.Error on each StreamHandler object instead. Informs the connection manager that an error occured in this session. If used, the connection manager must terminate the session and all of the streams within it, and may also emit a StreamError signal on the channel for each stream within the session. The path of a new object implementing the StreamHandler interface. The unique ID of the new stream Type of media that this stream should handle Direction of this stream Emitted when a new stream handler has been created for this session. Inform the connection manager that a client is ready to handle this session handler (i.e. that it has connected to the NewStreamHandler signal and done any other necessary setup). An media session handler is an object that handles a number of synchronised media streams.
telepathy-qt-0.9.3/spec/Channel_Type_Tubes.xml0000644000175200001440000005727212000056607023620 0ustar00collabora-develusers00000000000000 Copyright © 2007-2009 Collabora Limited 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 Street, Fifth Floor, Boston, MA 02110-1301, USA. Client implementations SHOULD use StreamTube and DBusTube instead.

A "tube" is a mechanism for arbitrary data transfer. Two types of data transfer are currently specified: D-Bus messages, and streams of bytes. Each tube has a service name, which is a string specifying the kind of communication that takes place over it, and a dictionary of arbitrary parameters. Tube parameters are commonly used for bootstrap information such as usernames and passwords. Each tube is identified by a locally unique identifier.

The Tubes channel type may be requested for handles of type HANDLE_TYPE_CONTACT and HANDLE_TYPE_ROOM.

Stream tubes specify listening addresses using pairs of parameters with signature 'u', 'v', where the integer 'u' is a member of Socket_Address_Type and the v is dependent on the type of address.

An identifier for a tube. These are local to a Tubes channel, and may not be assumed to be the same as the other participants' idea of the tube identifier. A struct (tube ID, initiator handle, tube type, service name, parameters, state) representing a tube, as returned by ListTubes on the Tubes channel type. Represents a participant in a multi-user D-Bus tube, as returned by GetDBusNames and seen in the DBusNamesChanged signal. The handle of a participant in this D-Bus tube. That participant's unique name.

The tube is D-Bus tube as described by the org.freedesktop.Telepathy.Channel.Type.DBusTube interface.

The tube is stream tube as described by the org.freedesktop.Telepathy.Channel.Type.StreamTube interface.

The tube is waiting to be accepted/closed locally. The tube is waiting to be accepted/closed remotely. The tube is open for traffic. The supported socket address and access-control types for tubes. See GetAvailableStreamTubeTypes. List the available address types and access-control types for stream tubes.

A mapping from address types (members of Socket_Address_Type) to arrays of access-control type (members of Socket_Access_Control) that the connection manager supports for stream tubes with that address type. For simplicity, if a CM supports offering a particular type of tube, it is assumed to support accepting it.

A typical value for a host without IPv6 support:

            {
              Socket_Address_Type_IPv4:
                [Socket_Access_Control_Localhost, Socket_Access_Control_Port,
                 Socket_Access_Control_Netmask],
              Socket_Address_Type_Unix:
                [Socket_Access_Control_Localhost, Socket_Access_Control_Credentials]
            }
          

If stream tubes are not supported, this will be an empty dictionary.

An array of the available tube types, as defined by the Tube_Type enum. Return an array of tuples, each representing a tube, with the following members:
  • the tube's ID
  • the tube's initiator
  • the tube's type
  • the tube's service
  • the tube's parameters
  • the tube's state
Offers a D-Bus tube providing the service specified. A string representing the service name that will be used over the tube. It should be a well-known D-Bus service name, of the form com.example.ServiceName. A dictionary of properties for the new tube; the allowable keys, types and values are defined by the service. Connection managers must support the value being any primitive (non-container) D-Bus type, or a byte array 'ay'. The ID of the new tube. The contact associated with this channel doesn't have tubes capabilities. The connection manager doesn't support D-Bus tubes. Offer a stream tube exporting the local socket specified. A string representing the service name that will be used over the tube. It should be a well-known TCP service name as defined by http://www.iana.org/assignments/port-numbers or http://www.dns-sd.org/ServiceTypes.html, for instance "rsync" or "daap".

A dictionary of properties for the new tube; the allowable keys, types and values are defined by the service. Connection managers must support the value being any primitive (non-container) D-Bus type, or a byte array 'ay'.

These should usually be the same key-value pairs specified for use in the DNS-SD TXT record for that service.

The type of the listening address of the local service, as a member of Socket_Address_Type. The listening address of the local service, as indicated by the address_type. The access control the local service applies to the local socket, specified so the connection manager can behave appropriately when it connects. A parameter for the access control type, to be interpreted as specified in the documentation for the Socket_Access_Control enum. The ID of the new tube. The contact associated with this channel doesn't have tube capabilities. The connection manager doesn't support stream tubes, or does not support the given address type or access-control type.
Emitted when a tube is created. The ID of the new tube. The handle of the contact who initiated the tube. The tube type, as defined by the Tube_Type enum. A string representing the service that will be used over the tube. The new tube's properties. The new tube's state. Accept a D-Bus tube that's in the "local pending" state. The connection manager will attempt to open the tube. The tube remains in the "local pending" state until the TubeStateChanged signal is emitted. The ID of the tube to accept. The string describing the address of the private bus. The client should not attempt to connect to the address until the tube is open. The given tube ID is invalid or does not refer to a D-Bus tube. Accept a stream tube that's in the "local pending" state. The connection manager will attempt to open the tube. The tube remains in the "local pending" state until the TubeStateChanged signal is emitted. The ID of the tube to accept. The type of address the connection manager should listen on. The type of access control the connection manager should apply to the socket. A parameter for the access control type, to be interpreted as specified in the documentation for the Socket_Access_Control enum. The address on which the connection manager will listen for connections to this tube. The client should not attempt to connect to the address until the tube is open. The given tube ID is invalid or does not refer to a stream tube. The given address type or access-control mechanism is not supported. Emitted when the state of a tube changes. The ID of the tube that changed state. The new state of the tube; see the Tube_State enumeration. Close a tube. The ID of the tube to close. Emitted when a tube has been closed. The ID of a closed tube is no longer valid. The ID may later be reused for a new tube. The ID of the tube that was closed. For a D-Bus tube, return a string describing the address of the private bus. The ID of the tube to get an address for. The bus address. The tube is not a D-Bus tube. This tube is not in the "open" state. For a multi-user (i.e. Handle_Type_Room) D-Bus tube, obtain a mapping between contact handles and their unique bus names on this tube. The ID of the tube to get names for. An array of structures, each containing a contact handle and a D-Bus bus name. The tube is not a multi-user D-Bus tube. This tube is not in the "open" state. Emitted on a multi-user (i.e. Handle_Type_Room) D-Bus tube when a participant opens or closes the tube. The ID of the tube whose names have changed. Array of handles and D-Bus names of new participants. Array of handles of former participants. For a stream tube, obtain the address of the socket used to communicate over this tube. The ID of the stream tube to get the socket for. The type of the listening address of the socket, as a member of Socket_Address_Type. The listening address of the socket, as indicated by the address_type. The tube is not a stream tube. This tube is not in the "open" state. Emitted on a stream tube when a participant opens a new connection to its socket. The ID of the tube The handle of the participant who opened the new connection
telepathy-qt-0.9.3/spec/Connection_Interface_Power_Saving.xml0000644000175200001440000001172712000056607026642 0ustar00collabora-develusers00000000000000 Copyright © 2007-2010 Collabora Limited

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 Library 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API)

Some protocols support mechanisms for reducing bandwidth usage—and hence power usage, on mobile devices—when the user is not directly interacting with their IM client. For instance, Google Talk's XMPP server supports queueing incoming presence updates at the client's instruction; the client can instruct the server to deliver all outstanding presence updates at a later time. This interface may be used to instruct the connection manager to enable and disable such protocol-level features when a screensaver is activated, the device screen is locked, and so on, by calling the SetPowerSaving method.

Enabling power saving SHOULD NOT change behaviour in any way that is noticable to a user not actively interacting with their client. For example, delaying presence updates somewhat is unlikely to be noticed by a user not staring at their device waiting for a contact to come online; on the other hand, requesting that the server queue incoming messages would be noticable by the user, so is not an acceptable effect of calling SetPowerSaving.

Turn power saving mode on or off.

Depending on the device's activity level, the connection can have its power saving mode turned on or off.

Errors raised by this method indicate that power saving could not be enabled, which SHOULD NOT generally be treated as fatal.

If the CM cannot switch modes, either because of the protocol (NotImplemented), or because of the service (NotAvailable), Mission Control (or whoever manages this) should be made aware. The error could be ignored or, in the extreme, be fascist and disconnect the account.
True if protocol-level power saving features should be activated; False if they should be de-activated. The current connection has no power saving features.

True if protocol-level power saving features are currently activated. This property can be changed using the SetPowerSaving method; change notifications is via the PowerSavingChanged signal.

The new state of the power saving feature. The PowerSavingActive property changed.
telepathy-qt-0.9.3/spec/Connection_Interface_Contacts.xml0000644000175200001440000002025412000056607026010 0ustar00collabora-develusers00000000000000 Copyright (C) 2005-2008 Collabora Limited Copyright (C) 2005, 2006 Nokia Corporation Copyright (C) 2006 INdT

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

This interface allows many attributes of many contacts to be obtained in a single D-Bus round trip.

Each contact attribute has an string identifier (Contact_Attribute), which is namespaced by the D-Bus interface which defines it.

A DBus_Interface, followed by a slash '/' character and an identifier for an attribute defined by that interface. The attribute identifier SHOULD be in lower case. These aren't D-Bus core Properties, and we want them to look visibly different. Some of the attributes of a single contact. The name of the attribute The value of the attribute Mapping returned by GetContactAttributes, representing a collection of Contacts and their requested attributes. A contact Attributes of that contact A list of D-Bus interfaces for which GetContactAttributes is expected to work. This cannot change during the lifetime of the Connection. Return any number of contact attributes for the given handles. An array of handles representing contacts.

A list of strings indicating which D-Bus interfaces the calling process is interested in. All supported attributes from these interfaces, whose values can be obtained without additional network activity, will be in the reply.

Connection managers SHOULD ignore interfaces requested which they do not support (i.e. those not mentioned in the ContactAttributeInterfaces property.)

This simplifies client-side code. Clients which care may distinguish between unsupported interfaces (e.g. this Connection does not support Avatars), and interfaces on which no information is known for these contacts (e.g. we don't know the avatar tokens of any of the contacts, so we omitted them all) by inspecting ContactAttributeInterfaces.

Attributes from the interface org.freedesktop.Telepathy.Connection are always returned, and need not be requested explicitly.

As well as returning cached information immediately, the connection MAY start asynchronous requests to obtain better values for the contact attributes. If better values are later obtained by this process, they will be indicated with the usual signals (such as AliasesChanged).

For instance, an XMPP connection manager could download vCards in response to a request for Aliasing attributes.
requesting information for interfaces not mentioned in ContactAttributeInterfaces is no longer an error. Be aware that older connection managers may still consider this an error.

If true, all handles that appear as keys in the result have been held on behalf of the calling process, as if by a call to Connection.HoldHandles. (If HasImmortalHandles is true, which SHOULD be the case in all new connection managers, this has no effect.)

For further round-trip avoidance.

A dictionary mapping the contact handles to contact attributes. If any of the requested handles are in fact invalid, they are simply omitted from this mapping. If contact attributes are not immediately known, the behaviour is defined by the interface; the attribute should either be omitted from the result or replaced with a default value.

Each contact's attributes will always include at least the identifier that would be obtained by inspecting the handle (org.freedesktop.Telepathy.Connection/contact-id).

telepathy-qt-0.9.3/spec/Channel_Interface_Room_Config.xml0000644000175200001440000003006212000056607025702 0ustar00collabora-develusers00000000000000 Copyright © 2011 Collabora Ltd.

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

version 1. This replaces the old-school Telepathy properties on Text.

Represents the configuration of a chatroom, some aspects of which may be modifiable by the user, depending on their priviledges. This corresponds to the room configuration on XMPP, and various channel mode flags on IRC.

The “topic” (on IRC) or “subject” (on XMPP) is not part of this interface; it can be found on the Subject2 interface.

True if people may join the channel without other members being made aware of their identity. True if people may not join the channel until they have been invited. The limit to the number of members; or 0 if there is no limit. True if channel membership is not sufficient to allow participation. A human-visible name for the channel, if it differs from Room2.RoomName; the empty string, otherwise.

On XMPP, this represents the muc#roomconfig_roomname field of the muc#roomconfig form. So for jdev@conference.jabber.org, for example:

  • Room2.RoomName = "jdev";
  • Room2.Server = "conference.jabber.org";
  • Title = "General Jabber development discussion".

XEP-0045 is awful.

A human-readable description of the channel's overall purpose; if any. True if the channel will remain in existence on the server after all members have left it. True if the channel is not visible to non-members. True if contacts joining this channel must provide a password to be granted entry. Note that this property does not indicate that a password is required right now; see the Password interface for the API used to provide a password while joining a room. If PasswordProtected is True, the password required to enter the channel, if known. If the password is unknown, or PasswordProtected is False, the empty string. On XMPP—bless its cotton socks!—non-owners of a MUC cannot see its current password, even if they just provided the password in order to join the room…

If PasswordProtected is True, an optional hint for the password.

On protocols supporting PasswordHint (indicated by its presence in MutableProperties), Password and PasswordHint MUST be set in a single call to UpdateConfiguration.

Skype requires that the password and its hint be supplied together.
If True, the user may call UpdateConfiguration to change the values of the properties listed in MutableProperties.

A list of (unqualified) property names on this interface which may be modified using UpdateConfiguration (if CanUpdateConfiguration is True). Properties not listed here cannot be modified.

For example, IRC does not have the concept of joining a room without other participants knowing your true identity; so on IRC the Anonymous property will always be False, and MutableProperties will not include "Anonymous".

True once the initial room configuration has been retrieved, or False otherwise. On some services, this may take some time after you've joined a room to fetch the configuration. Once this property changes to True, the other properties on this interface can be assumed to be accurate; this property MUST not change to False after it becomes True.

An application's “configure this room” dialog might choose to display a spinner while this property is False, rather than allowing the user to edit probably-inaccurate configuration.

The new values of one or more properties on this interface, which must be listed in MutableProperties. For instance, to set up a channel for discussing top-secret corporate merge plans, this parameter might be:

{
  'Private': True,
  'InviteOnly': True,
  'Description': "The first rule of #inteltakeover is: do not talk about #inteltakeover",
}

If CanUpdateConfiguration is True, modifies the current values of one or more room properties. This method SHOULD NOT return until the change has been accepted or declined by the server.

Note that the server may ostensibly accept the changes (thus allowing this method to return success) but signal different values; for example, the server might truncate Title to some maximum length. Callers SHOULD continue to listen for the PropertiesChanged signal, and trust the values it signals over those provided to this method.

The user is not allowed to reconfigure this room. One or more of the specified properties is unknown, or ill-typed. One or more of the specified properties cannot be modified on this protocol. The room's current configuration has not yet been retrieved, so we cannot update it just yet. The application might like to try again once the ConfigurationRetrieved property becomes True.
telepathy-qt-0.9.3/spec/Call_Stream_Interface_Media.xml0000644000175200001440000007701512000056607025347 0ustar00collabora-develusers00000000000000 Copyright © 2009-2010 Collabora Ltd. Copyright © 2009-2010 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API)

This interface deals with how to connect a stream to an endpoint. It contains all that is required to describe the local endpoint, to succesfully establish a connection. While a call is established, one may try to connect to multiple remote endpoints at the same time. This is called forking in the SIP jargon. Informations related to the connections are on the Endpoint objects. Once the call is established, there MUST be a single endpoint left.

ICE restarts

If the CM wants to do an ICE restart, then the ICERestartPending property is set, and the ICERestartRequested signal is emitted. The streaming implementation should then call SetCredentials again. This will trigger the actual ICE restart, and cause LocalCandidates to be cleared.

For more information on ICE restarts see RFC 5245 section 9.1.1.1

The type of SendingState and ReceivingState. No data is flowing (or expected to be flowing) at this time. The streaming implementation has been told to start or receiving, but has not yet indicated that it is doing so. The streaming implementation has been told to stop sending or receiving data, but it has not yet indicated that it has done so. The streaming implementation is successfully sending or receiving data, and everything is going swimmingly. Indicates whether the streaming implementation is/should be sending media for this stream. The streaming implementation should be able to rely on reading this value and listening to SendingStateChanged to determine whether it should be sending media or not. It should not need to listen to the Hold interfaces on the Call/Content. Feedback on success should be given via CompleteSendingStateChange. Failures should be reported via ReportSendingFailure. Change notification for SendingState. Note that this information is duplicated onto the Stream interface, so that UIs can ignore the Media interface, and streaming implementations can ignore everything but the media interface. The new value of SendingState.

Called in response to SendingStateChanged(Pending_*, *) to indicate that the media state has successfully progressed from Pending_{Start, Stop, Pause} to the corresponding non-pending state.

The new (non-pending) value of SendingState. The state change made no sense, and was ignored by the CM. The most likely cause for this is a race-condition between the CM emitting a new state change and the streaming implementation responding to the previous state change.
Can be called at any point to indicate a failure in the outgoing portion of the stream. The counterpart of SendingState. Indicates whether the streaming implementation is/should be expecting to receive media for this stream. The CM should only tell the streaming implementation to stop receiving if it has been told to put the stream on hold, or the stream has been removed from the call. Change notification for ReceivingState. The new value of ReceivingState.

Called in response to ReceivingStateChanged(Pending_*, *) to indicate that the media state has successfully progressed from Pending_{Start, Stop, Pause} to the corresponding non-pending state.

The new (non-pending) value of ReceivingState. The state change made no sense, and was ignored by the CM. The most likely cause for this is a race-condition between the CM emitting a new state change and the streaming implementation responding to the previous state change.
Can be called at any point to indicate a failure in the incoming portion of the stream.

Used to set the username fragment and password for streams that have global credentials.

The username to use when authenticating on the stream. The password to use when authenticating on the stream.
The network topology that an IP candidate represents. This can sometimes be used to infer what kind of performance characteristics (latency, bandwith, etc) can be expected of connections made to this candidate. This is not an IP candidate. This is a reserved value, and should not be seen on the bus. This candidate represents a direct connection to the host, as its address is taken directly the host's IP stack. This candidate probably represents a connection to the host through a NAT device, as its address was discovered by sending a binding request to a STUN server or similar. This candidate probably represents a good route between the host and its peer, as its address was discovered by sending a STUN binding request to one of the candidates advertised by the peer. This candidate represents the address of a relay server (usually somewhere on the public internet). This candidate is the most likely to work, but all media will go via a relay server, so latency is likely to be higher than other types of candidate. This candidate represents a Multicast group. This value should only appear if the Stream's Transport is set to Multicast.

Extra information about the candidate. Allowed and mandatory keys depend on the transport protocol used. The following keys are commenly used:

type - u
The type of candidate (Call_Stream_Candidate_Type)
foundation - s
The foundation of this candidate
protocol - u
Underlying protocol of the candidate (Media_Stream_Base_Proto)
priority - u
Priority of the candidate (should be a number between 0 and 65535). Most ICE implementations will prefer the highest priority candidate pair that manages to connect. For backwards compatibility with non-ICE SIP clients, the lowest priority candidate may be sent as a raw UDP fallback candidate. It is recommended that a relay candidate is used as the lowest priority candidate if possible. If both IPv4 and IPv6 raw udp fallback candidates are available, they should be set to the same priority and advertised to the CM at the same time. The CM will decide which to advertise to the remote end.
base-ip - s
The underlying Host address where media sent to this (non-host-type) candidate will eventually arrive.
base-port - u
The underlying Host port where media sent to this (non-host-type) candidate will eventually arrive.
username - s
Username of this candidate (only if credentials are per candidate)
password - s
Password of this candidate (only if credentials are per candidate)
ttl - u
The TTL mandated for RTP/RTCP packets sent to a multicast group (only valid for Multicast Streams)
One of the well-known keys documented here, or an implementation-specific key. The value corresponding to that key.
Media streams can use more than one UDP socket: one for RTP (data) and one for RTCP (control). Most of the time, they are adjacent to each other, but some protocols (xmpp) signal each port separately. The stream transport type is unknown or not applicable (should not appear over dbus). This is the high-traffic data socket, containing the audio/video data for the stream. This is the low-traffic control socket, usually containing feedback about packet loss etc. A Stream Candidate. The component number. The IP address to use. The port number to use. Additional information about the candidate. Add candidates to the LocalCandidates property and signal them to the remote contact(s). Note that connection managers MAY delay the sending of candidates until FinishInitialCandidates is called. The candidates to be added. This indicates to the CM that the initial batch of candidates has been added, and should now be processed/sent to the remote side. Protocols supporting Raw UDP SHOULD wait for FinishInitialCandidates, and then set the lowest priority candidate as the Raw UDP candidate. The minimal required candidates have not been set. For example, for an RTP protocol, at least one candidate on the component 1 (RTP) must have been set. WLM_8_5 was removed A transport that can be used for streaming. The stream transport type is unknown or not applicable (for streams that do not have a configurable transport). Raw UDP, with or without STUN. All streaming clients are assumed to support this transport, so there is no handler capability token for it in the Call1 interface. [This corresponds to "none" or "stun" in the old Media.StreamHandler interface.] Interactive Connectivity Establishment, as defined by RFC 5245. Note that this value covers ICE-UDP only. [This corresponds to "ice-udp" in the old Media.StreamHandler interface.] Google Talk peer-to-peer connectivity establishment, as implemented by libjingle 0.3. [This corresponds to "gtalk-p2p" in the old Media.StreamHandler interface.] The transport used by Windows Live Messenger 2009 or later, which resembles ICE draft 19. [This corresponds to "wlm-2009" in the old Media.StreamHandler interface.] Shared memory transport, as implemented by the GStreamer shmsrc and shmsink plugins. Multicast transport. The transport for this stream. [FIXME]. Change notification is via the LocalCandidatesAdded signal. Emitted when local candidates are added to the LocalCandidates property. Candidates that have been added. A username and password pair. The username. The password. The local credentials are sent to the remote site over the signalling protocol. They are used in ICE to make sure that the connectivity checks come from the right peer. Change notification is via the LocalCredentialsChanged signal. This property will be a pair of empty strings if ICE has not yet been started. renamed from LocalCredentailsSet Emitted when the value of LocalCredentials changes to a non-empty value. This should only happen when the streaming implementation calls SetCredentials, so this signal is mostly useful for debugging. Emitted when the value of RelayInfo changes. Emitted when the value of STUNServers changes.

The IP addresses of possible STUN servers to use for NAT traversal, as dotted-quad IPv4 address literals or RFC2373 IPv6 address literals. Change notification is via the STUNServersChanged signal. The IP addresses MUST NOT be given as DNS hostnames.

High-quality connection managers already need an asynchronous DNS resolver, so they might as well resolve this name to an IP to make life easier for streaming implementations.

A list of mappings describing TURN or Google relay servers available for the client to use in its candidate gathering, as determined from the protocol. Well-known map keys are:

ip - s
The IP address of the relay server as a dotted-quad IPv4 address literal or an RFC2373 IPv6 address literal. This MUST NOT be a DNS hostname. High-quality connection managers already need an asynchronous DNS resolver, so they might as well resolve this name to an IP and make life easier for streaming implementations.
type - s

Either udp for UDP (UDP MUST be assumed if this key is omitted), tcp for TCP, or tls.

The precise meaning of this key depends on the Transport property: if Transport is ICE, tls means TLS over TCP as referenced by ICE draft 19, and if Transport is GTalk_P2P, tls means a fake SSL session over TCP as implemented by libjingle.

port - q
The UDP or TCP port of the relay server as an ASCII unsigned integer
unique-id - s
A string identifying the relay server. If two RelayInfo entries have the same unique-id, but different types, there is usually little point in connecting to both. Use priority to determine which version to prefer in this case. Can also be used by the streaming implementation to avoid connecting to the same relay multiple times if relaying is required for both audio and video.
priority - u
A number determining which version of a server to prefer (if multiple are present with the same unique-id, the one with the highest priority should be used, or the streaming implementation should use the one whose type has the most desirable properties)
username - s
The username to use
password - s
The password to use
component - u
The component number to use this relay server for, as an ASCII unsigned integer; if not included, this relay server may be used for any or all components. In ICE draft 6, as used by Google Talk, credentials are only valid once, so each component needs relaying separately.

An equivalent of the gtalk-p2p-relay-token property on MediaSignalling channels is not included here. The connection manager should be responsible for making the necessary HTTP requests to turn the token into a username and password.

The type of relay server that this represents depends on the value of the Transport property. If Transport is ICE, this is a TURN server; if Transport is GTalk_P2P, this is a Google relay server; otherwise, the meaning of RelayInfo is undefined.

If relaying is not possible for this stream, the list is empty.

Change notification is given via the RelayInfoChanged signal.

Signals that the initial information about STUN and Relay servers has been retrieved, i.e. the HasServerInfo property is now true.

True if all the initial information about STUN servers and Relay servers has been retrieved. Change notification is via the ServerInfoRetrieved signal.

Streaming implementations that can't cope with STUN and relay servers being added later SHOULD wait for this property to become true before proceeding.
Emitted when the Endpoints property changes. Endpoints that were added. Endpoints that no longer exist.

The list of Endpoint objects that exist for this stream.

Change notification is via the EndpointsChanged signal.

Emitted when the remote side requests an ICE restart (e.g. third party call control, when the remote endpoint changes). The streaming implementation should call SetCredentials again. State recovery for ICERestartRequested. Set when the signal is emitted, and unset when SetCredentials is called. Useful for debugging. Signal an unrecoverable error for this stream, and remove it. If all streams are removed from a content, then it will also be removed. A structured reason for stream removal.
telepathy-qt-0.9.3/spec/Call_Content_Media_Description_Interface_RTCP_Extended_Reports.xml0000644000175200001440000001412312000056607034246 0ustar00collabora-develusers00000000000000 Copyright © 2005-2010 Nokia Corporation Copyright © 2005-2010 Collabora Ltd 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 Street, Fifth Floor, Boston, MA 02110-1301, USA. (as stable API)

This codec offer interface provides a method of signalling for RTCP extended reports, documented by RTP Control Protocol Extended Reports (RTCP XR) (RFC 3611). CMs should ignore all RTCP Extended Report parameters that are not listed in this spec at the time of implementation. More parameters can be added to the spec as required.

For more details on what RTCP extended reports can do and how to use them, one should refer to RFC 3611.

If non-zero, enable Loss Run Length Encoded Report Blocks. The value of this integer represents the max-size of report blocks, as specified in RFC 3611 section 5.1. MAXUINT32 is used to indicate that there is no limit. If non-zero, enable Duplicate Run-Length-Encoded Report Blocks. The value of this integer represents the max-size of report blocks, as specified in RFC 3611 section 5.1. MAXUINT32 is used to indicate that there is no limit. If non-zero, enable Packet Receipt Times Report Blocks. The value of this integer represents the max-size of report blocks, as specified in RFC 3611 section 5.1. MAXUINT32 is used to indicate that there is no limit. If non-zero, enable Receiver Reference Time and Delay since Last Receiver Report Blocks (for estimating Round Trip Times between non-senders and other parties in the call. The value of this integer represents the max-size of report blocks, as specified in RFC 3611 section 5.1. MAXUINT32 is used to indicate that there is no limit. Who is allowed to send Delay since Last Receiver Reports. Which fields SHOULD be included in the statistics summary report blocks that are sent, and whether to send VoIP Metrics Report Blocks. There can be zero or more flags set. Whether to enable VoIP Metrics Report Blocks. These blocks are of a fixed size. Loss report flag, as defined in RFC3611 section 4.6. Duplicate report flag, as defined in RFC3611 section 4.6. Jitter flag, as defined in RFC3611 section 4.6. First bit of TTL or Hop Limit flag, as defined in RFC3611 section 4.6. Second bit of TTL or Hop Limit flag, as defined in RFC3611 section 4.6. Both RTP data senders and data receivers MAY send DLRR blocks. Only active RTP senders MAY send DLRR blocks, i.e., non RTP senders SHALL NOT send DLRR blocks.
telepathy-qt-0.9.3/spec/Channel_Dispatcher_Interface_Messages.xml0000644000175200001440000000417712000056607027426 0ustar00collabora-develusers00000000000000 Copyright (C) 2011 Collabora Ltd. Copyright (C) 2011 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

This interface allows users of the ChannelDispatcher to send one-off text messages to a contact, identified by account and target ID.

This enables entities other than the main UI to send one-off messages to a contact.

telepathy-qt-0.9.3/spec/Channel_Type_Server_TLS_Connection.xml0000644000175200001440000001356712000056607026704 0ustar00collabora-develusers00000000000000 Copyright © 2010 Collabora Limited 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 Street, Fifth Floor, Boston, MA 02110-1301, USA. (as stable API)

A channel type that carries a TLS certificate between a server and a client connecting to it.

Channels of this kind always have Requested = False, TargetHandleType = None and TargetHandle = 0, and cannot be requested with methods such as CreateChannel. Also, they SHOULD be dispatched while the Connection owning them is in the CONNECTING state.

In this case, handlers SHOULD accept or reject the certificate, using the relevant methods on the provided object, or MAY just Close the channel before doing so, to fall back to a non-interactive verification process done inside the CM.

For example, channels of this kind can pop up while a client is connecting to an XMPP server.

A TLSCertificate containing the certificate chain as sent by the server, and other relevant information.

The hostname or domain that the user expects to connect to. Clients SHOULD use the ReferenceIdentities property to verify the identity of the certificate. Clients MAY display this hostname to the user as the expected identity. Clients SHOULD use this property to lookup pinned certificates or other user preferences for the connection.

If this property is not present, clients SHOULD use the Hostname property as the reference identity to validate server certificates against.

The identities of the server we expect ServerCertificate to certify; clients SHOULD verify that ServerCertificate matches one of these identities when checking its validity.

This property MUST NOT be the empty list; it MUST contain the value of the Hostname property. All other identities included in this property MUST be derived from explicit user input or choices, such as Parameters passed to RequestConnection.

The primary use for this property is for XMPP services hosted by Google Apps. When connecting to Google Talk using an @gmail.com JID, the server correctly presents a certificate for gmail.com; however, for domains hosted via Google Apps, a certificate for talk.google.com is offered, due to unresolved technical limitations.

If the user has explicitly chosen to create a Google Talk account, then trusting a certificate for talk.google.com is reasonable. To handle this case, the connection manager may add the values of any or all of the server, fallback-server and extra-identities parameters; the Google Talk account creation user interface may set these parameters appropriately, or the user may set them for accounts with other services.

telepathy-qt-0.9.3/spec/Connection_Interface_Communication_Policy.xml0000644000175200001440000001460512000056607030361 0ustar00collabora-develusers00000000000000 Copyright © 2010 Collabora Limited 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 Library 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 Street, Fifth Floor, Boston, MA 02110-1301, USA. (draft 1)

This interface supports controlling which contacts are allowed to initiate text chats, incoming calls, and other forms of communication as supported by the underlying protocol. The policies supported for different communication methods on this connection are listed in the SupportedPolicies property. The current configuration is held in ActivePolicies; it can be modified using SetPolicy, and changes are signalled by PolicyChanged.

A mapping of communication methods (channel types), and their associated policy. The channel interface with the policy. The active policy for this channel type. The communication policies supported by this connection.

The active communication policies on this connection. Communication methods that are not in this mapping are considered open.

For example, to allow incoming calls only from contacts buddy list, and to allow text messages from anyone, the policy would look like this:

{
    'org.freedesktop.Telepathy.Channel.Type.Text' : Access_Control_Type_Open,
    'org.freedesktop.Telepathy.Channel.Type.Call' : Access_Control_Type_Publish_List
}
        

Changes to this property are signalled by PolicyChanged.

Set a policy for a communication method (channel type). Depending on the server or protocol, more than one communication method could be bound to the same policy, if calling this method on one channel type changes the policy on another channel type, the PolicyChanged signal that would follow would include all the channel types that have an altered policy. The channel type to set the policy for. The policy to set for this channel. ActivePolicies has changed. This occurs when the server unilaterally changed the policy or SetPolicy has been called. A subset of the active policies that have changed.

The communication methods (channel types), and the policies that can be applied to them. This is server and protocol dependant.

Grouped channel types will always have the same policy applied to them.

Different protocols have different limitations to the granularity of communication policies. One protocol might be able to set a different policy for VoIP calls and text chat, while another protocol might only be able to set one policy to both VoIP and text chat.
A list of channel interfaces that support these policies. A list of supported policies.
telepathy-qt-0.9.3/spec/Account_Manager_Interface_Hidden.xml0000644000175200001440000000774312000056607026364 0ustar00collabora-develusers00000000000000 Copyright © 2010 Collabora Ltd. Copyright © 2010 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

This interface lists accounts whose Hidden property is True.

first draft A list of valid (complete, usable) Accounts intended exclusively for noninteractive applications. These accounts are not included in AccountManager.ValidAccounts. Change notification is via HiddenAccountValidityChanged. A list of incomplete or otherwise unusable Accounts intended exclusively for noninteractive applications. Change notification is via HiddenAccountValidityChanged. The given account has been removed from ValidHiddenAccounts or InvalidHiddenAccounts. An Account, which must not be used any more. The validity of the given account has changed. New magic accounts are also indicated by this signal, as an account validity change (usually to True) on an account that did not previously exist. This is effectively change notification for the valid and invalid accounts lists. An Account. True if the account is now valid.
telepathy-qt-0.9.3/spec/Connection_Interface_Service_Point.xml0000644000175200001440000001300112000056607026773 0ustar00collabora-develusers00000000000000 Copyright © 2005-2010 Nokia Corporation Copyright © 2005-2010 Collabora Ltd

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API)

An interface for connections whose channels may be able to indicate specific they are connected to some form of service station. For example, when dialing 9-1-1 in the US, a GSM modem/network will recognize that as an emergency call, and inform higher levels of the stack that the call is being handled by an emergency service. In this example, the call is handled by a Public Safety Answering Point (PSAP) which is labeled as "urn:service:sos". Other networks and protocols may handle this differently while still using this interface.

The service point. A list of IDs that are mapped to this service. This is provided as a convenience for the UIs, but the preferred method for requesting channel to a service is by setting the InitialServicePoint property in a channel request.

Description of a service point and IDs which are mapped to it.

An example Service Point info for GSM emergency calls (callable through "911" and "112") could look like:

  ServicePointInfo = (
    Service_Point: (
      Service_Point_Type: 1 (Emergency),
      Service_Point: "urn:service:sos"
    ),
    Service_IDs: [ "911", "112" ]
  )
The list of all (known) service points.

The new value of KnownServicePoints.

Emitted when the list of known service points (or their IDs) has changed.
A service point. The service type. String representation of the service point. The representation is service specific; it may be a 'service' Uniform Resource Name as specified by RFC 5031, or may be in some other form. Empty, unused or unknown value is represented by "". The various types of service points a channel might connect to. The channel is not communicating with a service point, or it is not known whether it is communicating with a service point (e.g. an ordinary call). The service point is a generic emergency point. The service point is some kind of counseling service (ie, mental health or child-services counseling).
telepathy-qt-0.9.3/spec/Channel_Interface_Conference.xml0000644000175200001440000007502512000056607025560 0ustar00collabora-develusers00000000000000 Copyright © 2009 Collabora Limited Copyright © 2009 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API)

An interface for multi-user conference channels that can "continue from" one or more individual channels. This could be used to invite other contacts to an existing 1-1 text conversation, combine two phone calls into one conference call, and so on, with roughly the same API in each case.

This interface addresses freedesktop.org bug #24906 (GSM-compatible conference calls) and bug #24939 (upgrading calls and chats to multi-user). See those bugs for more rationale and use cases.

Existing channels are upgraded by requesting a new channel of the same ChannelType, listing the channels to be merged into the new conference in the InitialChannels property of the request. If InitialInviteeHandles and InitialInviteeIDs are Allowed_Properties in RequestableChannelClasses, ad-hoc conferences to a set of contacts may be created by requesting a channel, specifying InitialInviteeHandles and/or InitialInviteeIDs to be the contacts in question. A request may specify these alongside InitialChannels, to simultaneously upgrade a channel to a conference and invite others to join it.

Channels with this interface MAY also implement MergeableConference.DRAFT to support merging more 1-1 channels into an ongoing conference. Similarly, 1-1 channels MAY implement Splittable.DRAFT to support being broken out of a Conference channel.

The Group interface on Conference channels MAY use channel-specific handles for participants; clients SHOULD support both Conferences that have channel-specific handles, and those that do not.

In the GSM case, the Conference's Group interface MAY have channel-specific handles, to represent the fact that the same phone number may be in a conference twice (for instance, it could be the number of a corporate switchboard).

In the XMPP case, the Conference's Group interface SHOULD have channel-specific handles, to reflect the fact that the participants have MUC-specific identities, and the user might also be able to see their global identities, or not.

In most other cases, including MSN and link-local XMPP, the Conference's Group interface SHOULD NOT have channel-specific handles, since users' identities are always visible.

Connection managers implementing channels with this interface MUST NOT allow the object paths of channels that could be merged into a Conference to be re-used, unless the channel re-using the object path is equivalent to the channel that previously used it.

If you upgrade some channels into a conference, and then close the original channels, InitialChannels (which is immutable) will contain paths to channels which no longer exist. This implies that you should not re-use channel object paths, unless future incarnations of the path are equivalent.

For instance, on protocols where you can only have zero or one 1-1 text channels with Emily at one time, it would be OK to re-use the same object path for every 1-1 text channel with Emily; but on protocols where this is not true, it would be misleading.

Examples of usage

A pair of 1-1 GSM calls C1 and C2 can be merged into a single conference call by calling:

CreateChannel({ ...ChannelType: ...Call, ...InitialChannels: [C1, C2] })

which returns a new channel Cn implementing the conference interface. (As a quirk of GSM, both 1-1 will cease to function normally until they are Split from the conference, or the conference ends.)

An XMPP 1-1 conversation C3 (with chris@example.com, say) can be continued in a newly created multi-user chatroom by calling:

CreateChannel({ ...ChannelType: ...Text, ...InitialChannels: [C3] })

Or, to invite emily@example.net to join the newly-created MUC at the same time:

CreateChannel({ ...ChannelType: ...Text, ...InitialChannels: [C3], ...InitialInviteeIDs: ['emily@example.net'] })

To continue C3 in a particular multi-user chatroom (rather than the implementation inventing a unique name for the room), call:

EnsureChannel({ ...ChannelType: ...Text, ...TargetHandleType: ...Room, ...TargetID: 'telepathy@conf.example.com', ...InitialChannels: [C3] })

Note the use of EnsureChannel — if a channel for telepathy@conf.example.com is already open, this SHOULD be equivalent to inviting chris@example.com to the existing channel.

In the above cases, the text channel C3 SHOULD remain open and fully functional (until explicitly closed by a client); new incoming 1-1 messages from chris@example.com SHOULD appear in C3, and messages sent using C3 MUST be relayed only to chris@example.com.

If there is an open 1-1 text channel with a contact, in every other situation new messages will appear in that channel. Given that the old channel remains open — which is the least surprising behaviour, and eases us towards a beautiful world where channels never close themselves — it stands to reason that it should be where new messages from Chris should appear. On MSN, creating a conference from C3 should migrate the underlying switchboard from C3 to the new channel; this is an implementation detail, and should not affect the representation on D-Bus. With a suitable change of terminology, Skype has the same behaviour.

If the current handler of that channel doesn't want this to happen (maybe it transformed the existing tab into the group chat window, and so there'd be no UI element still around to show new messages), then it should just Close the old 1-1 channel; it'll respawn if necessary.

Either of the XMPP cases could work for Call channels, to upgrade from 1-1 Jingle to multi-user Jingle. Any of the XMPP cases could in principle work for link-local XMPP (XEP-0174).

XMPP and MSN do not natively have a concept of merging two or more channels C1, C2... into one channel, Cn. However, the GSM-style merging API can be supported on XMPP and MSN, as an API short-cut for upgrading C1 into a conference Cn (which invites the TargetHandle of C1 into Cn), then immediately inviting the TargetHandle of C2, the TargetHandle of C3, etc. into Cn as well.

Sample RequestableChannelClasses

A GSM connection might advertise the following channel class for conference calls:

( Fixed = {
    ...ChannelType: ...StreamedMedia
  },
  Allowed = [ InitialChannels, InitialAudio ]
)

This indicates support for starting audio-only conference calls by merging two or more existing channels (since InitialInviteeHandles and InitialInviteeIDs are not allowed).

An XMPP connection might advertise the following classes for ad-hoc multi-user text chats:

( Fixed = {
    ...ChannelType: ...Text
  },
  Allowed = [ InitialChannels, InitialInviteeHandles, InitialInviteeIDs, InvitationMessage ]
),
( Fixed = {
    ...ChannelType: ...Text,
    ...TargetHandleType: Room
  },
  Allowed = [ TargetHandle, TargetID,
              InitialChannels, InitialInviteeHandles, InitialInviteeIDs, InvitationMessage ]
)

The first class indicates support for starting ad-hoc (nameless) chat rooms, upgraded from existing 1-1 channels and/or inviting new contacts, along with a message to be sent along with the invitations. The second indicates support for upgrading to a particular named chat room.

The individual Channels that are continued by this conference, which have the same ChannelType as this one, but with TargetHandleType = CONTACT.

This property MUST NOT be requestable; instead, the InitialChannels property may be specified when requesting a channel.

This is consistent with requesting InitialInviteeHandles and InitialInviteeIDs, rather than requesting Group.Members and some hypothetical ID version of that property.

Change notification is via the ChannelMerged and ChannelRemoved signals.

Emitted when a new channel is added to the value of Channels.

The channel that was added to Channels. A new channel-specific handle for the TargetHandle of Channel, as will appear in OriginalChannels, or 0 if a global handle is used for Channel's TargetHandle on the Group interface of this channel. Channel's immutable properties.

Emitted when a channel is removed from the value of Channels, either because it closed or because it was split using the Splittable.DRAFT.Split method.

If a channel is removed because it was closed, Closed should be emitted before this signal.

The channel that was removed from Channels. Additional information about the removal, which may include the same well-known keys as the Details argument of MembersChangedDetailed, with the same semantics.

The initial value of Channels.

This property SHOULD be requestable. Omitting it from a request is equivalent to providing it with an empty list as value. Requests where its value has at least two channel paths SHOULD be expected to succeed on any implementation of this interface. If InitialInviteeHandles and InitialInviteeIDs are Allowed_Properties in RequestableChannelClasses, then requests with zero or one channel paths SHOULD also succeed; otherwise, clients SHOULD NOT make requests with zero or one paths for this property.

In GSM, a pair of calls can be merged into a conference, but you can't start a conference call from zero or one existing calls. In XMPP and MSN, you can create a new chatroom, or upgrade one 1-1 channel into a chatroom; however, on these protocols, it is also possible to fake GSM-style merging by upgrading the first channel, then inviting the targets of all the other channels into it.

If possible, the Channels' states SHOULD NOT be altered by merging them into a conference. However, depending on the protocol, the Channels MAY be placed in a "frozen" state by placing them in this property's value or by calling MergeableConference.DRAFT.Merge on them.

In Jingle, nothing special will happen to merged calls. UIs MAY automatically place calls on hold before merging them, if that is the desired behaviour; this SHOULD always work. Not doing an implicit hold/unhold seems to preserve least-astonishment.

In GSM, the calls that are merged go into a state similar to Hold, but they cannot be unheld, only split from the conference call using Channel.Interface.Splittable.DRAFT.Split.

Depending on the protocol, it might be signalled to remote users that this channel is a continuation of all the requested channels, or that it is only a continuation of the first channel in the list.

In MSN, the conference steals the underlying switchboard (protocol construct) from one of its component channels, so the conference appears to remote users to be a continuation of that channel and no other. The connection manager has to make some arbitrary choice, so we arbitrarily mandate that it SHOULD choose the first channel in the list as the one to continue.

A list of additional contacts invited to this conference when it was created.

If it is possible to invite new contacts when creating a conference (as opposed to merging several channels into one new conference channel), this property SHOULD be requestable, and appear in the allowed properties in RequestableChannelClasses. Otherwise, this property SHOULD NOT be requestable, and its value SHOULD always be the empty list.

On GSM you have to place a 1-1 call before you can merge it into a conference; on the other hand, you can invite new contacts to XMPP Muji calls and XMPP/MSN/Skype ad-hoc chat rooms without starting a 1-1 channel with them first.

If included in a request, the given contacts are automatically invited into the new channel, as if they had been added with Group.AddMembers(InitialInviteeHandles, InvitationMessage) immediately after the channel was created.

This is a simple convenience API for the common case that a UI upgrades a 1-1 chat to a multi-user chat solely in order to invite someone else to participate.

If the local user was not the initiator of this channel, the Group.SelfHandle SHOULD appear in the value of this property, together with any other contacts invited at the same time (if that information is known).

InitialInviteeHandles, InitialInviteeIDs and InitialChannels MAY be combined in a single request.

For example, if you have a 1-1 channel C1 with Rob, and you want to invite Sjoerd to join the discussion, you can do so by requesting a channel with InitialChannels=[C1] and InitialInviteeHandles=[sjoerd], or InitialChannels=[C1] and InitialInviteeIDs=["sjoerd@example.com"].

If a request includes some combination of InitialInviteeHandles, InitialInviteeIDs and InitialChannels, then the value of InitialInviteeHandles on the resulting channel SHOULD be the union of the handles from InitialInviteeHandles, the handles corresponding to the InitialInviteeIDs, and the target handles of the InitialChannels, with any duplicate handles removed. Because this property is immutable, its value SHOULD be computed before the channel is announced via the NewChannels signal.

This simplifies identification of new channels in clients - they only have to look at one of the properties, not both. For example, after either of the requests mentioned above, the NewChannels signal would announce the channel with InitialChannels=[C1], InitialInviteeHandles=[rob, sjoerd], and InitialInviteeIDs=["rob@example.net", "sjoerd.example.com"].

A list of additional contacts invited to this conference when it was created.

This property SHOULD be requestable if and only if InitialInviteeHandles is requestable. Its semantics are the same, except that it takes a list of the string representations of contact handles; invitations are sent to any contact present in either or both of these properties.

When a channel is created, the values of InitialInviteeHandles and InitialInviteeIDs MUST correspond to each other. In particular, this means that the value of InitialInviteeIDs will include the TargetID of each channel in InitialChannels, and the ID corresponding to each handle in InitialInviteeHandles.

The message that was sent to the InitialInviteeHandles when they were invited.

This property SHOULD be requestable, and appear in the allowed properties in RequestableChannelClasses, in protocols where invitations can have an accompanying text message.

This allows invitations with a message to be sent when using InitialInviteeHandles or InitialInviteeIDs.

If the local user was not the initiator of this channel, the message with which they were invited (if any) SHOULD appear in the value of this property.

On GSM conference calls, it is possible to have the same phone number in a conference twice; for instance, it could be the number of a corporate switchboard. This is represented using channel-specific handles; whether or not a channel uses channel-specific handles is reported in Group.GroupFlags. The Group.HandleOwners property specifies the mapping from opaque channel-specific handles to actual numbers; this property specifies the original 1-1 channel corresponding to each channel-specific handle in the conference.

In protocols where this situation cannot arise, such as XMPP, this property MAY remain empty.

For example, consider this situation:

  1. Place a call (with path /call/to/simon) to the contact +441234567890 (which is assigned the handle h, say), and ask to be put through to Simon McVittie;
  2. Put that call on hold;
  3. Place another call (with path /call/to/jonny) to +441234567890, and ask to be put through to Jonny Lamb;
  4. Request a new channel with InitialChannels: ['/call/to/simon', '/call/to/jonny'].

The new channel will have the following properties, for some handles s and j:

{
...Group.GroupFlags: Channel_Specific_Handles | (other flags),
...Group.Members: [self_handle, s, j],
...Group.HandleOwners: { s: h, j: h },
...InitialChannels: ['/call/to/simon', '/call/to/jonny'],
...Channels: ['/call/to/simon', '/call/to/jonny'],
...OriginalChannels: { s: '/call/to/simon', j: '/call/to/jonny' },
# ...standard properties like ChannelType: Group elided...
}

Change notification is via the ChannelMerged and ChannelRemoved signals: if Channel_Specific_Handle in the former is non-zero, this property SHOULD be updated to map that handle to the merged channel's path.

A channel-specific handle for a participant in this conference. The object path of Channels representing the original 1-1 channel with Channel_Specific_Handle. A mapping from members of a conference to the original 1-1 channel with that contact, if any. See OriginalChannels for details.
telepathy-qt-0.9.3/spec/Channel_Dispatcher_Interface_Operation_List.xml0000644000175200001440000001332412000056607030604 0ustar00collabora-develusers00000000000000 Copyright © 2008-2009 Collabora Ltd. Copyright © 2008-2009 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as a stable interface)

This interface allows users of the ChannelDispatcher to enumerate all the pending dispatch operations, with change notification.

The existence of the DispatchOperations property allows a newly started approver to pick up existing dispatch operations.

This is on a separate interface so clients that aren't interested in doing this aren't woken up by its signals.

Details of a channel dispatch operation. The object path of the ChannelDispatchOperation.

Properties of the channel dispatch operation.

Connection managers MUST NOT include properties in this mapping if their values can change. Clients MUST ignore properties that appear in this mapping if their values can change.

The rationale is the same as for Channel_Details.

Each dictionary MUST contain at least the following keys:

  • org.freedesktop.Telepathy.ChannelDispatchOperation.Interfaces
  • org.freedesktop.Telepathy.ChannelDispatchOperation.Connection
  • org.freedesktop.Telepathy.ChannelDispatchOperation.Account
  • org.freedesktop.Telepathy.ChannelDispatchOperation.PossibleHandlers

The list of ChannelDispatchOperation objects currently being processed. Change notification is via the NewDispatchOperation and DispatchOperationFinished signals.

Emitted when a dispatch operation is added to DispatchOperations.

The dispatch operation that was created. The same properties that would appear in the Properties member of Dispatch_Operation_Details.
Emitted when a dispatch operation finishes (i.e. exactly once per emission of ChannelDispatchOperation.Finished). Strictly speaking this is redundant with ChannelDispatchOperation.Finished, but it provides full change-notification for the DispatchOperations property. The dispatch operation that was closed.
telepathy-qt-0.9.3/spec/Channel_Interface_Anonymity.xml0000644000175200001440000000606012000056607025471 0ustar00collabora-develusers00000000000000 Copyright © 2008-2010 Nokia Corporation Copyright © 2010 Collabora Ltd.

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API)

Interface for requesting the anonymity modes of a channel (as defined in Connection.Interface.Anonymity).

The list of initially requested anonymity modes on the channel. This MUST NOT change, and is Requestable. Whether or not the anonymity settings are required for this channel. This MUST NOT change, and is Requestable.

This is the ID that the remote user of the channel MAY see (assuming there's a single ID). For example, for SIP connections where the From address has been scrambled by the CM, the scrambled address would be available here for the client to see. This is completely optional, and MAY be an empty string ("") in cases where anonymity modes are not set, or the CM doesn't know what the remote contact will see, or any other case where this doesn't make sense.

This MAY change over the lifetime of the channel, and SHOULD NOT be used with the Request interface.

telepathy-qt-0.9.3/spec/Debug.xml0000644000175200001440000001402112000056607021114 0ustar00collabora-develusers00000000000000 Copyright (C) 2009 Collabora Ltd.

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API)

An interface for providing debug messages.

This interface is primarily provided by one object per service, at the path /org/freedesktop/Telepathy/debug.

TRUE if the NewDebugMessage signal should be emitted when a new debug message is generated. Retrieve buffered debug messages. An implementation could have a limit on how many message it keeps and so the array returned from this method should not be assumed to be all of the messages in the lifetime of the service. A list of debug messages. Emitted when a debug messages is generated if the Enabled property is set to TRUE. Timestamp of the debug message. Domain of the debug message, as described in the Debug_Message struct. Level of the debug message. The text of the debug message. Log level for errors. Error messages are always fatal, resulting in the service terminating after something completely unexpected occurred. Log level for critical messages. Critical messages are messages that the service might predict and it is up to the service itself to decide whether to terminate following a critical message. Log level for warnings. Log level for messages. Log level for information messages. Log level for debug messages. A struct representing a debug message, as returned by GetMessages. Timestamp of the debug message. This is a double to allow more accuracy in the time the message was logged.

Domain of the debug message. This is used to identify the source of debug messages. For example, debug messages from a connection manager could have this Domain struct member be the name of the connection manager, and logs from any helper library could have the name of the helper library.

The domain could also contain a category as to where the log message originated separated by a forward-slash. For example, if a debug message was output in a connection manager called "dummy", in the file-transfer code, this Domain struct member might be dummy/file-transfer.

Level of the debug message. This states the severity of the debug message. The text of the debug message.
telepathy-qt-0.9.3/spec/Connection_Interface_Forwarding.xml0000644000175200001440000004000312000056607026326 0ustar00collabora-develusers00000000000000 Copyright © 2005-2010 Nokia Corporation Copyright © 2005-2010 Collabora Ltd. Copyright © 2006 INdT

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(draft version, not API-stable)

This connection interface is for protocols that are capable of signaling to remote contacts that incoming communication channels should be instead sent to a separate contact. This might apply to things such as call forwarding, for example.

In some cases, a CM may register forwarding rules with an external service; in those cases, it will never see the incoming channel, and the forwarding will happen automatically.

In other cases, the CM will handle the forwarding itself. When an incoming channel is detected, the status of the local user will determine whether or not a forwarding rule is matched. For some rules, this MAY happen immediately (ie, if the user is Busy); for others, there MAY be a timeout (in seconds) that must expire before the forwarding rule is matched (the timeout is specified by the first element in the Forwarding_Rule_Entry list).

Once a forwarding rule is matched and any necessary timeouts have expired, the CM can forward the incoming channel to the specified handle. If for whatever reason the remote handle does not accept the channel AND the CM supports multiple forwarding entries AND any necessary timeouts have expired (specified by the next entry in the list), the CM can forward the incoming channel to the next handle in the entry list. This continues until the list is exhausted, or the incoming channel is accepted.

Note that the rule matches are only for the first entry in the in the forwarding rule list. Once the incoming channel has been forwarded, the next entry in the list (assuming one exists and the contact that the channel has been forwarded to does not respond after any necessary timeouts) is used regardless of the status of the forwarded channel. The initial match rule might have been Busy, whereas the contact that the channel has been forwarded to might be offline. Even in this case, the Busy list is still traversed until the channel is handled (or there are no more forwarding entries in the list).

For example, assuming the following dict for Forwarding_Rules:

        ForwardingRules = {
          Busy: ( initial-timeout: 30, [
            (handle: 3, timeout: 15),
            (handle: 5, timeout: 20)
          ]),
          NoReply: ( initial-timeout: 15, [
            (handle: 5, timeout: 30),
            (handle: 3, timeout: 20)
          ])
        }

We can imagine a scenario where an incoming channel is detected, the media stream is available (ie, not Busy), and the local user is online. While the CM is waiting for the local user to accept the channel, it looks at NoReply's first timeout value. After 15s if the local user hasn't accepted, the CM forwards the channel to Handle #5. The CM then waits 30s for Handle #5 to accept the channel. If after 30s it does not, the CM forwards the incoming channel to Handle #3, which will have 20s to accept the channel.

When an unanswered StreamedMedia call is forwarded, both the contact and the self handle should be removed from the group with the self handle as the actor, and Channel_Group_Change_Reason No_Answer or Busy, as appropriate. For Call1 channels, the Call_State_Change_Reason Forwarded should be used.

The various forwarding conditions that are supported by this interface. In general, the conditions should not overlap; it should be very clear which rule would be chosen given a CM's behavior with an incoming channel. The exception to this is Unconditional, which will override all other rules. Incoming channels should always be forwarded. Note that setting this will override any other rules. If not set, other rules will be checked when an incoming communication channel is detected.

The incoming channel should be forwarded if a busy signal is detected. What defines "Busy" is CM-specific (perhaps a single resource is already in use, or a user's status is set to Busy Connection_Presence_Type).

If initial timeout is specified for Busy condition and call waiting is not supported by the service, the timeout will be ignored.

The incoming channel should be forwarded if the local user doesn't accept it within the specified amount of time. The incoming channel should be forwarded if the user is offline. This could be a manual setting (the user has chosen to set their presence to offline or invisible) or something specified by the underlying network (the user is not within range of a cell tower).

A forwarding rule entry. These MAY be chained together for CMs that support chaining of forwards (in other words, a forwarding rule may have multiple entries; if the contact in the first entry doesn't respond, the incoming channel might be forwarded to the contact in the second entry).

For CMs and protocols that don't support chaining of entries, only the first entry would be used.

The length of time (in seconds) to wait the contact to respond to the forwarded channel. This MAY be ignored by the CM if it isn't supported by the underlying network/protocol for the specific status of the remote contact (for example, a GSM call that is forwarded may return Not_Reachable immediately without waiting for the timeout value to expire).

A value of 0 means the condition can match immediately. A value of MAX_UINT32 means that the CM's default should be used.

The contact to forward an incoming channel to. If the handle doesn't point to anything (e.g. points to a phone number that doesn't exist), the entry SHOULD be skipped.
A chain of forwarding rules and an initial timeout after which the rules are applied. Initial timeout for the rule. The forwarding targets (an array of type Forwarding_Rule_Entry). A dictionary whose keys are forwarding conditions and whose values are Forwarding_Rule_Chain structs. A dictionary whose keys are forwarding conditions and whose values are maximum number of Forwarding_Rule_Entry for the condition.

A map of forwarding conditions supported on this connection to maximum number of Forwarding_Rule_Entry supported for the specific condition.

When forwarding is done by the provider, different providers might support different chain sizes, or provider and local implementation chain sizes might differ.

The current forwarding rules that are enabled for this connection. Forwarding rules each contain an array of type Forwarding_Rule_Entry.

Emitted when the ForwardingRules property changes.

By the time this is emitted, the property MUST have been updated with the new rules being active. If any protocol/network requests must be made, they should be completed before the signal is emitted.

The condition of the forwarding rule that's been changed. The new initial timeout for the rule. The new (and as of the emission of the signal, currently active) forwards. The order is relevant; those at the lowest array index are used first.
Update the forwarding rules.

The forwarding rule to override. Note that this SHOULD not affect other rules; setting a rule that overrides others (such as Forwarding_Rule_Unconditional) will not modify other rules. This means that when a client sets Forwarding_Rule_Busy and then temporarily sets Forwarding_Rule_Unconditional, the Forwarding_Rule_Busy rule will retain settings after Forwarding_Rule_Unconditional, has been unset.

If the CM has no choice but to adjust multiple rules after a call to this function (ie, due to the network or protocol forcing such behavior), the CM MUST emit multiple ForwardingRuleChanged signals for each changed rule. The order of the signals is implementation-dependent, with the only requirement that the last signal is for the rule that was originally requested to have been changed (e.g. if Unconditional automatically modifies Busy and NoReply, three separate ForwardingRuleChanged signals should be raised with the last signal being for Forwarding_Rule_Unconditional).

Each forwarding condition will occur no more than once in the rule array. Setting a rule will overwrite the old rule with the same Forwarding_Condition in its entirety.

The forwarding targets (an array of type Forwarding_Rule_Entry) to activate for the rule. An empty array will effectively disable the rule. The old forwarding targets (an array of type Forwarding_Rule_Entry). This is the list of entries that is being replaced with the call to SetForwardingRule. The specified Condition is not supported by this connection, or the number of chained SupportedForwardingConditions should be checked prior to calling SetForwardingRule. A Handle that has been supplied is invalid.
telepathy-qt-0.9.3/spec/Channel_Interface_Destroyable.xml0000644000175200001440000000742512000056607025765 0ustar00collabora-develusers00000000000000 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API)

This interface exists to support channels where Channel.Close is insufficiently destructive. At the moment this means Channel.Type.Text, but the existence of this interface means that unsupported channels can be terminated in a non-channel-type-specific way.

Close the channel abruptly, possibly with loss of data. The connection manager MUST NOT re-create the channel unless/until more events occur.

The main motivating situation for this method is that when a Text channel with pending messages is closed with Close, it comes back as an incoming channel (to avoid a race between Close and an incoming message). If Destroy is called on a Text channel, the CM should delete all pending messages and close the channel, and the channel shouldn't be re-created until/unless another message arrives.

Most clients SHOULD call Channel.Close instead. However, if a client explicitly intends to destroy the channel with possible loss of data, it SHOULD call this method if this interface is supported (according to the Channel.Interfaces property), falling back to Close if not.

In particular, channel dispatchers SHOULD use this method if available when terminating channels that cannot be handled correctly (for instance, if no handler has been installed for a channel type, or if the handler crashes repeatedly).

Connection managers do not need to implement this interface on channels where Close and Destroy would be equivalent.

Callers need to be able to fall back to Close in any case.

telepathy-qt-0.9.3/spec/Client_Observer.xml0000644000175200001440000005114112000056607023157 0ustar00collabora-develusers00000000000000 Copyright © 2008-2009 Collabora Ltd. Copyright © 2008-2009 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as a stable interface)

Observers monitor the creation of new channels. This functionality can be used for things like message logging. All observers are notified simultaneously.

Observers SHOULD NOT modify the state of a channel except via user interaction.

We want Observer UIs for file transfer channels (a progress bar for the transfer) to be able to have a Cancel button.

Observers MUST NOT carry out actions that exactly one process must take responsibility for (e.g. acknowledging Text messages, or carrying out the actual transfer in a file transfer channel).

Since arbitrarily many observers can be activated for each channel, it would not make sense for observers to do things that can only be done by one process (acknowledging Text messages, carrying out streaming for StreamedMedia channels, doing the actual data transfer for file transfers, setting up the out-of-band connection for Tubes). The Handler is responsible for such tasks.

Handlers MAY, of course, delegate responsibility for these tasks to other processes (including those run as observers), but this MUST be done explicitly via a request from the Handler to the Observer.

Whenever a collection of new channels is signalled, the channel dispatcher will notify all running or activatable observers whose ObserverChannelFilter property (possibly as cached in the .client file) indicates that they are interested in some of the channels.

Observers are activated for all channels in which they have registered an interest - incoming, outgoing or automatically created - although of course the ObserverChannelFilter property can be set to filter on the Requested property.

Because it might take time for an observer to become ready (for instance, a Text logger needs to wait until pending messages have been downloaded), the channel dispatcher must wait (up to some timeout) for all observers to return from ObserveChannels before letting anything destructive happen. Destructive things (e.g. acknowledging messages) are defined to be done by handlers, therefore HandleWith and Claim aren't allowed to succeed until all observers are ready.

Non-interactive approvers (for instance, to shoot down spam IM channels before the tray icon blinks at the user, or to grab a SASL channel before the user is prompted for a password) can be implemented as observers by following these steps:

  1. ObserveChannels() is called on the observer.
  2. The observer calls Claim() on the CDO.
  3. The observer then returns from ObserveChannels().
  4. Claim will return successfully if the channels were successfully claimed, or failure if someone else got there first.

Non-interactive approvers implemented as observers SHOULD also set DelayApprovers to TRUE so that other Approvers are not called on until all observers return from ObserveChannels. This gives non-interactive approvers a chance to claim the channels before Approvers are called.

A specification of the channels in which this observer is interested. The ObserveChannels method should be called by the channel dispatcher whenever any of the new channels in a NewChannels signal match this description.

Only certain D-Bus types have useful semantics for matching like this, so only certain types are allowed:

Integers of all sizes, including byte (y, n, q, i, u, x, t)
Matched by numeric value, regardless of type (e.g. 42 as a 16-bit signed integer 'n' is considered equal to 42 as a 32-bit unsigned integer 'u')
Booleans (b)
Matched by equality in the obvious way; not considered equal to any other type
Strings (s)
Matched by equality in the obvious way; not considered equal to any other type
Object paths (o)
Matched by equality in the obvious way; not considered equal to any other type

This property never changes while the observer process owns its Client bus name. For activatable processes, the filter can change due to an upgrade - the channel dispatcher SHOULD observe changes to .client files using a mechanism like inotify.

Not allowing this property to change is a simplification, particularly for activatable processes (we reject the possibility that a process with a .client file, when activated, has a filter that differs from what its .client file said).

If an Observer wants to add extra channels to its list of interests at runtime, it can register an additional Client bus name (for instance, the org.freedesktop.Telepathy.Client.Empathy process with unique name :1.42 could additionally register org.freedesktop.Telepathy.Client.Empathy._1_42) with additional filters. To remove those filters, it can release the bus name; it could even re-claim the bus name immediately, with different filters.

The same principle is applied to Approvers and Handlers.

For observers that have a .client file, the channel dispatcher may discover this property from keys of the form "propertyname type", in groups in the .client file whose name is the name of this interface followed by .ObserverChannelFilter, a space and an ASCII decimal number starting from 0.

Values in the .client file are encoded in exactly the same way as the default-p keys in .manager files, as described in the ConnectionManager interface (but note that not all types supported in .manager files can appear in .client files).

For instance, a .client file for an observer that is only interested in Text channels, with CONTACT or ROOM handles, that were requested by a local client:

[org.freedesktop.Telepathy.Client]
Interfaces=org.freedesktop.Telepathy.Client.Observer;

[org.freedesktop.Telepathy.Client.Observer.ObserverChannelFilter 0]
org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.Text
org.freedesktop.Telepathy.Channel.TargetHandleType u=1
org.freedesktop.Telepathy.Channel.Requested b=true

[org.freedesktop.Telepathy.Client.Observer.ObserverChannelFilter 1]
org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.Text
org.freedesktop.Telepathy.Channel.TargetHandleType u=2
org.freedesktop.Telepathy.Channel.Requested b=true
When using telepathy-mission-control, version 5.4.0 or later is needed for this property to be useful.

If true, upon the startup of this observer, ObserveChannels will be called for every already existing channel matching its ObserverChannelFilter

When an activatable client having this property disappears from the bus and there are channels matching its ObserverChannelFilter, ObserveChannels will be called immediately to reactivate it again. Such clients should specify this property in their .client file as follows:

[org.freedesktop.Telepathy.Client.Observer]
Recover=true

This means that if an activatable Observer crashes, it will be restarted as soon as possible; while there is an unavoidable possibility that it will miss some events during this process (particularly Text messages), this window of event loss is kept to a minimum.

Non-activatable observers can't take advantage of this mechanism, but setting this property on a non-activatable observer does allow it to "catch up" on channels that are currently active at the time that it starts up.

When the ObserveChannels method is called due to observer recovery, the Observer_Info dictionary will contain one extra item mapping the key "recovering" to True.

Called by the channel dispatcher when channels in which the observer has registered an interest are announced in a NewChannels signal.

If the same NewChannels signal announces some channels that match the filter, and some that do not, then only a subset of the channels (those that do match the filter) are passed to this method.

If the channel dispatcher will split up the channels from a single NewChannels signal and dispatch them separately (for instance because no installed Handler can handle all of them), it will call ObserveChannels several times.

The observer MUST NOT return from this method call until it is ready for a handler for the channel to run (which may change the channel's state).

The channel dispatcher must wait for observers to start up, to avoid the following race: text channel logger (observer) gets ObserveChannels, text channel handler gets HandleChannels channel handler starts up faster and acknowledges messages, logger never sees those messages.

The channel dispatcher SHOULD NOT change its behaviour based on whether this method succeeds or fails: there are no defined D-Bus errors for this method, and if it fails, this only indicates that an Observer is somehow broken.

The expected error response in the channel dispatcher is to log a warning, and otherwise continue as though this method had succeeded.

The Account with which the channels are associated. The well-known bus name to use is that of the AccountManager. The Connection with which the channels are associated. The well-known bus name to use can be derived from this object path by removing the leading '/' and replacing all subsequent '/' by '.'. The Channels and their properties. Their well-known bus names are all the same as that of the Connection.

The path to the ChannelDispatchOperation for these channels, or the special value '/' if there is no ChannelDispatchOperation (because the channels were requested, not incoming).

If the Observer calls Claim or HandleWith on the dispatch operation, it MUST be careful to avoid deadlock, since these methods cannot return until the Observer has returned from ObserveChannels.

This allows an Observer to Claim a set of channels without having to match up calls to this method with calls to AddDispatchOperation.

The ChannelRequests satisfied by these channels. If the same process is an Observer and a Handler, it can be useful to be given this information as soon as possible (it will also be passed to Handler.HandleChannels).

Additional information about these channels. Currently defined keys are:

recovering - b
True if ObserveChannels was called for an existing channel (due to the Recover property being True); False or omitted otherwise. This allows observers to distinguish between new channels (the normal case), and existing channels that were given to the observer in order to catch up on previous events (perhaps after a previous instance of the same observer crashed).
request-properties - a{oa{sv}}
A map from ChannelRequest paths listed in Requests_Satisfied to Qualified_Property_Value_Maps containing namespaced immutable properties of each request.

All defined keys for this dictionary are optional; observers MAY safely ignore any entry in this dictionary.

If true, the channel dispatcher will wait for ObserveChannels to return before calling Approver.AddDispatchOperation on appropriate Approvers.

This property SHOULD be false unless there is a reason why a channel should not be given to approvers. An example of this is if an Observer is also a Handler and wants to Claim a channel so that it becomes its handler and doesn't want any approver to be called, this property should be true.

Observers and Approvers should be called at the same time in normal operation (with this property set to false) to improve responsiveness. For example, if an incoming call appears, the approver should get the channel as fast as possible to show a dialog, but if an approver has to make round-trips to set itself up, then the approval of the channel is delayed. As a result, it is recommended for this property to remain false unless absolutely necessary.

For service-activatable clients, this property should be specified in the observer's .client file as follows:

If this property is not implemented (telepathy-mission-control 5.7.5 and older), the channel dispatcher SHOULD consider it as being false.

[org.freedesktop.Telepathy.Client.Observer]
DelayApprovers=true
telepathy-qt-0.9.3/spec/Channel_Request.xml0000644000175200001440000003671412000056607023163 0ustar00collabora-develusers00000000000000 Copyright © 2008–2011 Collabora Ltd. Copyright © 2008–2009 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as a stable interface)

A channel request is an object in the ChannelDispatcher representing an ongoing request for some channels to be created or found. They are created by methods such as CreateChannel. There can be any number of ChannelRequest objects at the same time.

Its well-known bus name is the same as that of the ChannelDispatcher, "org.freedesktop.Telepathy.ChannelDispatcher".

See ChannelDispatcher.CreateChannel for rationale for ChannelRequest being a separate object.

A channel request can be cancelled by any client (not just the one that requested it). This means that the ChannelDispatcher will Close the resulting channel, or refrain from requesting it at all, rather than dispatching it to a handler.

The Account on which this request was made. This property cannot change.

The time at which user action occurred, or 0 if this channel request is for some reason not involving user action.

This property is set when the channel request is created, and can never change.

Either the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable.

This property is set when the channel request is created, and can never change.

An array of dictionaries containing desirable properties for the channel or channels to be created.

This is an array so that we could add a CreateChannels method in future without redefining the API of ChannelRequest.

This property is set when the channel request is created, and can never change.

A list of the extra interfaces provided by this channel request. This property cannot change.

Proceed with the channel request.

The client that created this object calls this method when it has connected signal handlers for Succeeded and Failed.

Clients other than the client which created the ChannelRequest MUST NOT call this method.

This method SHOULD return immediately; on success, the request might still fail, but this will be indicated asynchronously by the Failed signal.

Proceed cannot fail, unless clients have got the life-cycle of a ChannelRequest seriously wrong (e.g. a client calls this method twice, or a client that did not create the ChannelRequest calls this method). If it fails, clients SHOULD assume that the whole ChannelRequest has become useless.

This method has already been called, so it is no longer available. Stop calling it.

Cancel the channel request. The precise effect depends on the current progress of the request.

If the connection manager has not already been asked to create a channel, then Failed is emitted immediately, and the channel request is removed.

If the connection manager has already been asked to create a channel but has not produced one yet (e.g. if Connection.Interface.Requests.CreateChannel has been called, but has not yet returned), then the ChannelDispatcher will remember that the request has been cancelled. When the channel appears, it will be closed (if it was newly created and can be closed), and will not be dispatched to a handler.

If the connection manager has already returned a channel, but the channel has not yet been dispatched to a handler then the channel dispatcher will not dispatch that channel to a handler. If the channel was newly created for this request, the channel dispatcher will close it with Close; otherwise, the channel dispatcher will ignore it. In either case, Failed will be emitted when processing has been completed.

If Failed is emitted in response to this method, the error SHOULD be org.freedesktop.Telepathy.Error.Cancelled.

If the channel has already been dispatched to a handler, then it's too late to call this method, and the channel request will no longer exist.

The channel request has failed. It is no longer present, and further methods must not be called on it.

The name of a D-Bus error. This can come from various sources, including the error raised by CreateChannel, or an error generated to represent failure to establish the Connection.

If the first argument of the D-Bus error message was a string, that string. Otherwise, an empty string.

The channel request has succeeded. It is no longer present, and further methods must not be called on it.

A dictionary of metadata provided by the channel requester, which the handler and other clients MAY choose to interpret. Clients MAY choose to use platform-specific keys for their own purposes, but MUST ignore unknown keys and MUST cope with expected keys being missing. Clients SHOULD namespace hint names by having them start with a reversed domain name, in the same way as D-Bus interface names.

This property might be used to pass a contact ID for a telephone number shared between two contacts from the address book to the call UI, so that if you try to call “Mum”, the call UI knows this rather than having to guess or show “Calling Mum or Dad”. The format of these contact IDs would be platform-specific, so we leave the definition of the dictionary entry up to the platform in question. But third-party channel requesters might not include the contact ID, so the call UI has to be able to deal with it not being there.

The channel dispatcher does not currently interpret any of these hints: they are solely for communication between cooperating clients. If hints that do affect the channel dispatcher are added in future, their names will start with an appropriate reversed domain name (e.g. org.freedesktop.Telepathy for hints defined by this specification, or an appropriate vendor name for third-party plugins).

This property may be set when the channel request is created, and can never change. Since it is immutable, it SHOULD be included in the dictionary of properties passed to AddRequest by the ChannelDispatcher.

The following standardised hints are defined:

org.freedesktop.Telepathy.ChannelRequest.DelegateToPreferredHandler - b
If present and True the client currently handling the channel SHOULD pass the channel to the PreferredHandler using DelegateChannels. This hint allows the user to request a channel in their preferred client in a situation where there are two chat handlers (for example: requesting a channel in Empathy which is currently being handled by gnome-shell). If the channel is currently unhandled, clients SHOULD ignore this hint. It is assumed that Mission Control will correctly delegate an unhandled channel to the preferred Handler. This allows requesting clients to always include this hint in their channel request. The Handler should check each ChannelRequest of the Requests_Satisfied parameter of HandleChannels for the hint. The first request containing the hint SHOULD be used and all further hints SHOULD be ignored. This covers the very unlikely case where HandleChannels satisfies two separate requests which have different PreferredHandlers.

Variant of the Succeeded signal allowing to get the channel which has been created.

This signal MUST be emitted if the ChannelDispatcher's SupportsRequestHints property is true. If supported, it MUST be emitted before the Succeeded signal.

The Connection owning the channel.

A subset of the Connection's properties, currently unused. This parameter may be used in future.

The channel which has been created.

The same immutable properties of the Channel that would appear in a NewChannels signal.

telepathy-qt-0.9.3/spec/Connection_Interface_Contact_Capabilities.xml0000644000175200001440000003465312000056607030306 0ustar00collabora-develusers00000000000000 Copyright (C) 2005, 2006, 2008 Collabora Limited Copyright (C) 2005, 2006, 2008 Nokia Corporation Copyright (C) 2006 INdT

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API)

Contact capabilities describe the channel classes which may be created with a given contact in advance of attempting to create a channel. Each capability represents a commitment by the connection manager that it will ordinarily be able to create a channel with a contact when given a request with the properties defined by the channel class.

Capabilities pertain to particular contact handles, and represent activities such as having a text chat, a voice call with the user or a stream tube of a defined type.

This interface also enables user interfaces to notify the connection manager what capabilities to advertise for the user to other contacts. This is done by using the UpdateCapabilities method.

XMPP is a major user of this interface: XMPP contacts will not, in general, be callable using VoIP unless they advertise suitable Jingle capabilities.

Many other protocols also have some concept of capability flags, which this interface exposes in a protocol-independent way.

A structure representing the capabilities of a single client. For implementations of the Client interface, the well-known bus name name of the client; for any other process, any other reversed domain name that uniquely identifies it. An array of channel classes that can be handled by this client. This will usually be a copy of the client's HandlerChannelFilter property. An array of client capabilities supported by this client, to be used by the connection manager to determine what capabilities to advertise. This will usually be a copy of the client's Capabilities property.

Alter the connection's advertised capabilities to include the intersection of the given clients' capabilities with what the connection manager is able to implement.

On connections managed by the ChannelDispatcher, processes other than the ChannelDispatcher SHOULD NOT call this method, and the ChannelDispatcher SHOULD use this method to advertise the capabilities of all the registered Client.Handler implementations.On connections not managed by the ChannelDispatcher, clients MAY use this method directly, to indicate the channels they will handle and the extra capabilities they have.

Upon a successful invocation of this method, the connection manager will only emit the ContactCapabilitiesChanged signal for the user's SelfHandle if, in the underlying protocol, the new capabilities are distinct from the previous state.

The connection manager will essentially intersect the provided capabilities and the channel classes it implements. Therefore, certain properties which are never fixed for a channel class (such as the target handle, or the Parameters property of a tube channel) will almost certainly not be advertised.

This method MAY be called on a newly-created connection while it is still in the DISCONNECTED state, to request that when the connection connects, it will do so with the appropriate capabilities. Doing so MUST NOT fail.

The capabilities of one or more clients.

For each client in the given list, any capabilities previously advertised for the same client name are discarded, then replaced by the capabilities indicated.

As a result, if a client becomes unavailable, this method SHOULD be called with a Handler_Capabilities structure containing its name, an empty list of channel classes, and an empty list of capabilities. When this is done, the connection manager SHOULD free all memory associated with that client name.

This method takes a list of clients so that when the channel dispatcher first calls it (with a list of all the Handlers that are initially available), the changes can be made atomically, with only one transmission of updated capabilities to the network. Afterwards, the channel dispatcher will call this method with a single-element list every time a Handler becomes available or unavailable.

The connection manager MUST ignore any channel classes and client capabilities for which there is no representation in the protocol or no support in the connection manager.

An array of contact handles for this connection.

The handle zero MUST NOT be included in the request.

A map from contact handles to lists of requestable channel classes, representing the channel requests that are expected to succeed for that contact.

Contacts listed among Handles whose capabilities are unknown SHOULD be omitted from this map; contacts known to have an empty set of capabilities SHOULD be included in the keys of this map, with an empty array as the corresponding value.

Returns an array of requestable channel classes for the given contact handles, representing the channel requests that are expected to succeed.

The handle does not represent a contact. Zero is always invalid.
All the capabilities of the contacts

Announce that there has been a change of capabilities on the given handles. A single signal can be emitted for several contacts.

The underlying protocol can get several contacts' capabilities at the same time.

A mapping from contact handle to their capabilities. A contact handle.

The contact's capabilities. These should be represented in the same way as in RequestableChannelClasses, except that they may have more fixed properties or fewer allowed properties, to represent contacts who do not have all the capabilities of the connection.

In particular, requestable channel classes for channels with target handle type Contact MUST list TargetHandleType among their fixed properties when they appear here, and clients MAY assume that this will be the case.

This matches the initial implementations - service-side in telepathy-gabble, and client-side in telepathy-qt - and means that clients can use exactly the same code to interpret RequestableChannelClasses and contact capabilities.

Channel classes with target handle type Handle_Type_Contact indicate that a request that matches the channel class, and also either has the contact's handle as TargetHandle or the contact's identifier as TargetID, can be expected to succeed. Connection managers SHOULD NOT include the TargetHandle or TargetID as a fixed property in contact capabilities.

This makes one channel class sufficient to describe requests via TargetHandle or TargetID, and is necessary in order to allow clients to interpret RequestableChannelClasses and contact capabilities with the same code.

Channel classes with target handle type Handle_Type_Room or Handle_Type_None indicate that if a channel matching the channel class is created, then inviting the contact to that channel can be expected to succeed.

To support room-based XMPP protocols like Muji and MUC Tubes, it's necessary to be able to discover who can be invited to a given room channel; most XMPP contacts won't support being invited into a Muji conference call, at least in the short to medium term.

No interpretation is defined for channel classes with any other target handle type, or for channel classes that do not fix a target handle type, in this version of the Telepathy specification.

The same structs that would be returned by GetContactCapabilities. Omitted from the result if the contact's capabilities are not known; present in the result as an empty array if the contact is known to have no capabilities at all.

telepathy-qt-0.9.3/spec/Connection_Interface_Keepalive.xml0000644000175200001440000000675412000056607026150 0ustar00collabora-develusers00000000000000 Copyright © 2010 Collabora Ltd. Copyright © 2010 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(draft 1)

Most messaging protocols allow the client to send periodic content-less pings to the server when the connection is otherwise idle, to reassure both itself and the server that its connection is still alive. Depending on the nature of the network connection, and the device running the client, the desired interval between such pings may vary.

For instance, on a mobile handset connected via 3G, overly-frequent keepalives can drain the battery through needlessly waking up the radio, and a relatively high interval is appropiate. By contrast, a desktop computer is less likely to be asleep in the first place, and users expect dropped connections to be noticed as soon as possible.

This interface provides a KeepaliveInterval property which controls the frequency of keepalive pings, if any. Connection managers implementing this property should also include it in Protocol.Parameters with the DBus_Property flag, allowing the desired value to be stored in Account.Parameters and passed onto the connection by the account manager.

The time in seconds between pings sent to the server to ensure that the connection is still alive, or 0 to disable such pings.

This property (and parameter) supersedes the older keepalive-interval Connection_Parameter_Name.

telepathy-qt-0.9.3/spec/Channel_Handler.xml0000644000175200001440000000562612000056607023106 0ustar00collabora-develusers00000000000000 Copyright (C) 2007-2008 Collabora Limited

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

Clients should implement Client.Handler instead.

An interface exported by Mission Control 4 client applications which are able to handle incoming channels.

Called when a channel handler should handle a new channel. The bus name of the connection and channel The object-path of the connection that owns the channel The channel type The object-path of the channel The type of the handle that the channel communicates with, or 0 if there is no associated handle The handle that the channel communicates with, or 0 if there is no associated handle
telepathy-qt-0.9.3/spec/Channel_Type_Contact_List.xml0000644000175200001440000001256712000056607025122 0ustar00collabora-develusers00000000000000 Copyright (C) 2005, 2006 Collabora Limited Copyright (C) 2005, 2006 Nokia Corporation Copyright (C) 2006 INdT

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

Replaced by Connection.Interface.ContactList

A channel type for representing a list of people on the server which is not used for communication. This is intended for use with the interface Channel.Interface.Group for managing buddy lists and privacy lists on the server. This channel type has no methods because all of the functionality it represents is available via the group interface.

There are currently two types of contact list: HANDLE_TYPE_LIST is a "magic" server-defined list, and HANDLE_TYPE_GROUP is a user-defined contact group.

For server-defined lists like the subscribe list, singleton instances of this channel type should be created by the connection manager at connection time if the list exists on the server, or may be requested by using the appropriate handle. These handles can be obtained using RequestHandles with a Handle_Type of HANDLE_TYPE_LIST and one of the following identifiers:

  • subscribe - the group of contacts for whom you receive presence
  • publish - the group of contacts who may receive your presence
  • hide - a group of contacts who are on the publish list but are temporarily disallowed from receiving your presence
  • allow - a group of contacts who may send you messages
  • deny - a group of contacts who may not send you messages
  • stored - on protocols where the user's contacts are stored, this contact list contains all stored contacts regardless of subscription status.

A contact can be in several server-defined lists. All lists are optional to implement. If RequestHandles or RequestChannel for a particular contact list raises an error, this indicates that the connection manager makes no particular statement about the list's contents; clients MUST NOT consider this to be fatal.

If a client wants to list all of a user's contacts, it is appropriate to use the union of the subscribe, publish and stored lists, including the local and remote pending members.

For example in XMPP, contacts who have the subscription type "none", "from", "to" and "both" can be respectively in the lists:

  • "none": stored
  • "from": stored and publish
  • "to": stored and subscribe
  • "both": stored, publish and subscribe

These contact list channels may not be closed.

For user-defined contact groups, instances of this channel type should be created by the connection manager at connection time for each group that exists on the server. New, empty groups can be created by calling RequestHandles with a Handle_Type of HANDLE_TYPE_GROUP and with the name set to the human-readable UTF-8 name of the group.

User-defined groups may be deleted by calling Close on the channel, but only if the group is already empty. Closing a channel to a non-empty group is not allowed; its members must be set to the empty set first.

On some protocols (e.g. XMPP) empty groups are not represented on the server, so disconnecting from the server and reconnecting might cause empty groups to vanish.

telepathy-qt-0.9.3/spec/Channel_Interface_Messages.xml0000644000175200001440000020462012000056607025253 0ustar00collabora-develusers00000000000000 Copyright © 2008–2010 Collabora Ltd. Copyright © 2008–2010 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API)

This interface extends the Text interface to support more general messages, including:

  • messages with attachments (like MIME multipart/mixed)
  • groups of alternatives (like MIME multipart/alternative)
  • delivery reports (which replace Text.SendError), addding support for protocols where the message content is not echoed back to the sender on failure and for receiving positive acknowledgements, as well as ensuring that incoming delivery reports are not lost if no client is handling the channel yet;
  • any extra types of message we need in future

Incoming messages, outgoing messages, and delivery reports are all represented as lists of Message_Part structures, with a format reminiscent of e-mail. Messages are sent by calling SendMessage; outgoing messages are announced to other clients which may be interested in the channel by the MessageSent signal. Incoming messages and delivery reports are signalled by MessageReceived, and are stored in the the PendingMessages property until acknowledged by calling Text.AcknowledgePendingMessages. Only the Handler for a channel should acknowledge messages; Observers (such as loggers) and Approvers for the channel may listen for incoming messages, and send messages of their own, but SHOULD NOT acknowledge messages.

If observers were allowed to acknowledge messages, then messages might have been acknowledged before the handler even got to see the channel, and hence could not be shown to the user.

If this interface is present, clients that support it SHOULD listen for the MessageSent and MessageReceived signals, and ignore the Sent, SendError and Received signals on the Text interface (which are guaranteed to duplicate signals from this interface).

Although this specification supports formatted (rich-text) messages with unformatted alternatives, implementations SHOULD NOT attempt to send formatted messages until the Telepathy specification has also been extended to cover capability discovery for message formatting.

We intend to expose all rich-text messages as XHTML-IM, but on some protocols, formatting is an extremely limited subset of that format (e.g. there are protocols where foreground/background colours, font and size can be set, but only for entire messages). Until we can tell UIs what controls to offer to the user, it's unfriendly to offer the user controls that may have no effect.

A list of MIME types supported by this channel, with more preferred MIME types appearing earlier in the list. The list MAY include "*/*" to indicate that attachments with arbitrary MIME types can be sent. This list MUST NOT be empty, since all Messages implementations MUST accept messages containing a single "text/plain" part.

Items in this list MUST be normalized to lower-case.

Some examples of how this property interacts with the MessagePartSupportFlags:

A simple IM implementation: only plain text messages are allowed
SupportedContentTypes = ['text/plain'], MessagePartSupportFlags = 0
Formatted text with a plain text alternative is allowed (see the HTML interface draft)
SupportedContentTypes = ['text/html', 'text/plain'], MessagePartSupportFlags = 0
JPEG or PNG images may be sent, but without any attached text
SupportedContentTypes = ['text/plain', 'image/jpeg', 'image/png'], MessagePartSupportFlags = 0
Unformatted text to which an optional JPEG or PNG image may be attached
SupportedContentTypes = ['text/plain', 'image/jpeg', 'image/png'], MessagePartSupportFlags = One_Attachment
Formatted text to which arbitrarily many images may be attached
SupportedContentTypes = ['text/html', 'text/plain', 'image/jpeg', 'image/png', 'image/x-ms-bmp'], MessagePartSupportFlags = One_Attachment | Multiple_Attachments
A full SIP implementation: arbitrary MIME messages are allowed
SupportedContentTypes = ['*/*'], MessagePartSupportFlags = One_Attachment | Multiple_Attachments
This supersedes GetMessageTypes; fall back to that method for compatibility with older connection managers.

A list of message types which may be sent on this channel.

Flags indicating the level of support for message parts on this channel.

Flags indicating the level of support for message parts on this channel. They are designed such that setting more flags always implies that the channel has more capabilities.

If no flags are set, this indicates that messages may contain a single message part whose content-type is any of the types from SupportedContentTypes, possibly with some alternatives.

There is no flag indicating support for alternatives. This is because the SendMessage implementation can always accept messages containing alternatives, even if the underlying protocol does not, by deleting all alternatives except the first (most preferred) that is supported.

Each of the flags so far implies the previous flag, so we could have used a simple enumeration here; however, we've defined the message-part support indicator as a flag set for future expansion.

See SupportedContentTypes for some examples.

SendMessage will accept messages containing a textual message body, plus a single attachment of any type listed in the SupportedContentTypes property. It does not make sense for this flag to be set if Message_Part_Support_Flag_Data_Only is not also set (because the connection manager can trivially provide an empty text part if necessary). SendMessage will accept messages containing a textual message body, plus an arbitrary number of attachments of any type listed in the SupportedContentTypes property. It does not make sense for this flag to be set if Message_Part_Support_Flag_One_Attachment is not also set.

Part of a message's content. In practice, this mapping never appears in isolation: incoming messages are represented by a list of Message_Part mappings in the MessageReceived signal, and outgoing messages are passed to SendMessage as a list of these mappings.

The first part of the message contains "headers", which refer to the entire message. The second and subsequent parts contain the message's content, including plain text, formatted text and/or attached files. Well-known keys for the header and body parts are defined by the Message_Header_Key and Message_Body_Key types, respectively. It is an error for a connection manager to put keys referring to the message as a whole in the second or subsequent Message_Part, or keys intended for body parts in the first Message_Part; clients MUST recover from this error by ignoring these mis-placed keys.

Instead of representing messages as aa{sv} where the first dictionary is special (a dictionary of headers), we could have used a signature like (a{sv}aa{sv}) to separate out the headers and the body parts.

However, this would make access to the messages more awkward. In Python, the syntax for access to a header field would remain message[0]['message-type'], but access to a body field in the second body part would change from message[2]['content'] to message[1][1]['content']. In GLib, the message would change from being a GPtrArray(GHashTable) to being a GValueArray(GHashTable, GPtrArray(GHashTable)) which is rather inconvenient to dereference.

In any group of parts with the same non-empty value for the alternative key (which represent alternative versions of the same content), more faithful versions of the intended message MUST come before less faithful versions (note that this order is the opposite of MIME multipart/alternative parts). Clients SHOULD display the first alternative that they understand.

Specifying the preference order means that if the underlying protocol doesn't support alternatives, the CM can safely delete everything apart from the first supported alternative when sending messages.

The order is the reverse of MIME because MIME's rationale for placing the "plainest" part first (legibility in pre-MIME UAs) does not apply to us, and placing the most preferred part first simplifies display (a client can iterate the message in order, display the first alternative that it understands, and skip displaying all subsequent parts with the same "alternative" key).

Clients SHOULD present all parts that are not redundant alternatives in the order they appear in this array, possibly excluding parts that are referenced by another displayed part. It is implementation-specific how the parts are presented to the user.

This allows CMs to assume that all parts are actually shown to the user, even if they are not explicitly referenced - we do not yet recommend formatted text, and there is no way for plain text to reference an attachment since it has no concept of markup or references. This also forces clients to do something sensible with messages that consist entirely of "attachments", with no "body" at all.

For instance, when displaying the above example, a client that understands the HTML part should display the JPEG image once, between the two lines "Here is a photo of my cat:" and "Isn't it cute?"; it may additionally present the image in some way for a second time, after "Isn't it cute?", or may choose not to.

A client that does not understand HTML, displaying the same message, should display the plain-text part, followed by the JPEG image.

Connection managers, clients and extensions to this specification SHOULD NOT include Handles as values in a Message_Part, except for message-sender in the header.

Reference-counting handles in clients becomes problematic if the channel proxy cannot know whether particular map values are handles or not.

Example messages

A rich-text message, with an embedded image, might be represented as:

[
  {
    'message-token': '9de9546a-3400-4419-a505-3ea270cb834c',
    'message-sender': 42,
    'message-sent': 1210067943,
    'message-received': 1210067947,
    'message-type': 0,              # = Channel_Text_Message_Type_Normal
    'pending-message-id': 437,
  },
  { 'alternative': 'main',
    'content-type': 'text/html',
    'content': 'Here is a photo of my cat:<br />' +
               '<img src="cid:catphoto" alt="lol!" />' +
               '<br />Isn't it cute?',
  },
  { 'alternative': 'main',
    'content-type': 'text/plain',
    'content': 'Here is a photo of my cat:\n[IMG: lol!]\nIsn't it cute?',
  },
  { 'identifier': 'catphoto',
    'content-type': 'image/jpeg',
    'size': 101000,
    'needs-retrieval': True,
  },
]

telepathy-ring, Nokia's GSM connection manager, represents vCards sent via SMS as:

[
  {
    'message-token': '9de9546a-3400-4419-a505-3ea270cb834c',
    'message-sender': 42,
    'message-sent': 1210067943,
    'message-received': 1210067947,
    'message-type': 0,              # = Channel_Text_Message_Type_Normal
    'pending-message-id': 437,
  },
  { 'content-type': 'text/x-vcard',
    'content': [ 0x66, 0x69, 0x71, ...], # vCard data as an array of bytes
  },
]

Delivery reports

Delivery reports are also represented as messages with the message-type header mapping to Channel_Text_Message_Type Delivery_Report. Delivery reports SHOULD contain the message-sender header, mapping to the intended recipient of the original message, if possible; other headers specific to delivery reports are defined by the Delivery_Report_Header_Key type. The second and subsequent parts, if present, are a human-readable report from the IM service.

For backwards- and forwards-compatibility, whenever a delivery error report is signalled—that is, with delivery-status mapping to Delivery_Status Temporarily_Failed or Permanently_Failed—SendError SHOULD also be emitted; whenever SendError is emitted, a delivery report MUST also be signalled. Delivery report messages on this interface MUST be represented in emissions of Received as messages with the Non_Text_Content Channel_Text_Message_Flags; clients which understand this interface SHOULD ignore the SendError signal in favour of listening for delivery reports, as mentioned in the introduction.

The result of attempting to send delivery reports using SendMessage is currently undefined.

Example delivery reports

A minimal delivery report indicating permanent failure of the sent message whose token was b9a991bd-8845-4d7f-a704-215186f43bb4 for an unknown reason
[{
# header
'message-sender': 123,
'message-type': Channel_Text_Message_Type_Delivery_Report,
'delivery-status': Delivery_Status_Permanently_Failed,
'delivery-token': 'b9a991bd-8845-4d7f-a704-215186f43bb4',
}
# no body
]
A delivery report where the failed message is echoed back to the sender rather than being referenced by ID, and the failure reason is that this protocol cannot send messages to offline contacts such as the contact with handle 123
[{ # header
'message-sender': 123,
'message-type': Channel_Text_Message_Type_Delivery_Report,
'delivery-status': Delivery_Status_Temporarily_Failed,
'delivery-error': Channel_Text_Send_Error_Offline,
'delivery-echo':
    [{ # header of original message
    'message-sender': 1,
    'message-sent': 1210067943,
    },
    { # body of original message
    'content-type': 'text/plain',
    'content': 'Hello, world!',
    }]
  ],

# no body
]
A maximally complex delivery report: the server reports a bilingual human-readable failure message because the user sent a message "Hello, world!" with token b9a991bd-8845-4d7f-a704-215186f43bb4 to a contact with handle 123, but that handle represents a contact who does not actually exist
[{ # header
'message-sender': 123,
'message-type': Channel_Text_Message_Type_Delivery_Report,
'delivery-status': Delivery_Status_Permanently_Failed,
'delivery-error': Channel_Text_Send_Error_Invalid_Contact,
'delivery-token': 'b9a991bd-8845-4d7f-a704-215186f43bb4',
'delivery-echo':
    [{ # header of original message
    'message-sender': 1,
    'message-sent': 1210067943,
    },
    { # body of original message
    'content-type': 'text/plain',
    'content': 'Hello, world!',
    }]
  ],
},
{ # message from server (alternative in English)
'alternative': '404',
'content-type': 'text/plain',
'lang': 'en',
'content': 'I have no contact with that name',
},
{ # message from server (alternative in German)
'alternative': '404'.
'content-type': 'text/plain',
'lang': 'de',
'content', 'Ich habe keinen Kontakt mit diesem Namen',
}
]
A minimal delivery report indicating successful delivery of the sent message whose token was b9a991bd-8845-4d7f-a704-215186f43bb4
[{
# header
'message-sender': 123,
'message-type': Channel_Text_Message_Type_Delivery_Report,
'delivery-status': Delivery_Status_Delivered,
'delivery-token': 'b9a991bd-8845-4d7f-a704-215186f43bb4',
}
# no body
]
A key, which SHOULD be one of the well-known keys specified by Message_Header_Key, Message_Body_Key or Delivery_Report_Header_Key if possible. The value corresponding to the given key, which SHOULD be one of the specified types for well-known keys.
Removed protocol-token—which had never been implemented—and respecified message-token not to have unimplementable uniqueness guarantees.

Well-known keys for the first Message_Part of a message, which contains metadata about the message as a whole, along with the corresponding value types. Some keys make sense for both incoming and outgoing messages, while others are only meaningful for one or the other.

message-token (s - Protocol_Message_Token)

An opaque identifier for the message, as used by the underlying protocol. For outgoing messages, this SHOULD be globally unique; for incoming messages, this is not guaranteed to uniquely identify a message, even within the scope of a single channel or contact; the only guarantee made is that two messages with different message-token headers are different messages.

Clients wishing to determine whether a new message with the scrollback header matches a previously-logged message with the same message-token SHOULD compare the message's sender, contents, message-sent or message-received timestamp, etc. Note that, in XMPP, the server only supplies a timestamp for scrollback messages, not for messages received while you are in a room; thus, non-scrollback messages will lack a message-sent timestamp.

In practice, most protocols do not provide globally-unique identifiers for messages. Connection managers, being stateless, do not have the necessary information — namely, IM logs — to generate reliable unique tokens for messages.

For instance, some XMPP clients (including Gabble) stamp messages they send with unique identifiers, but others number outgoing messages in a conversation from 1 upwards.

message-sent (x - Unix_Timestamp64)
The time the message was sent (if unavailable, the time it arrived at a central server MAY be used). Omitted if no reasonable approximation is available; SHOULD always be present on outgoing messages.
message-received (x - Unix_Timestamp64)
The time the message was received locally. SHOULD always be present.
message-sender (u - Contact_Handle)
The contact who sent the message. If 0 or omitted, the contact who sent the message could not be determined.
message-sender-id (s)
The identifier of the contact who sent the message, i.e. the result of calling InspectHandles on message-sender. If omitted, clients MUST fall back to looking at message-sender.
sender-nickname (s)
The nickname chosen by the sender of the message, which can be different for each message in a conversation.
message-type (u - Channel_Text_Message_Type)
The type of message; if omitted, Channel_Text_Message_Type_Normal MUST be assumed. MAY be omitted for normal chat messages.
supersedes (s – Protocol_Message_Token)
If present, this message supersedes a previous message, identified by its message-token header. The user interface MAY, for example, choose to replace the superseded message with this message, or grey out the superseded message. Skype, for example, allows the user to amend messages they have already sent (to correct typos, etc.). Connection Managers SHOULD represent repeatedly edited messages in the following form:
                message {token = a};
                message {token = b, supersedes = a};
                message {token = c, supersedes = a};
              
The alternative form is:
                  message {token = a};
                  message {token = b, supersedes = a};
                  message {token = c, supersedes = b};
                
but it is more difficult to implement in UIs/loggers, and it breaks irrecoverably if message b is lost. If a CM is forced to use this form, it should be tested extensively for interoperability with existing clients.
Clients should deal gracefully if the original message gets lost, but one or more corrections to it get through:
                message {token = x} gets lost;
                message {token = y, supersedes = x};
                message {token = z, supersedes = x};
              
This is the form that CMs will use to mean "I know that this message was edited, but I don't know what it originally said." It is often in the interests of the remote side for message x to be lost (e.g. to hide embarassing mistakes or sensitive information) so it might not be possible to retrieve it (even on protocols with reliable message-delivery guarantees).
original-message-sent (x - Unix_Timestamp64)
The message-sent header of the message that this one supersedes. This key should only be present if supersedes is also present. It MAY be used as a hint to help clients locate the original message in its logs. If present, comparing the tuple (original-message-sent, supersedes) with (message-sent, message-token) SHOULD be enough to uniquely identify the original message.
original-message-received (x - Unix_Timestamp64)
The message-received header of the message that this one supersedes. This key should only be present if supersedes is also present. It MAY be used as a hint in a similar way to original-message-sent.
pending-message-id (u - Message_ID)
The incoming message ID. This MUST NOT be present on outgoing messages. Clients SHOULD NOT store this key - it is only valid for as long as the message remains unacknowledged.
interface (s - DBus_Interface)
This message is specific to the given interface, which is neither Text nor Messages. It SHOULD be ignored if that interface is not supported. (Note that an 'interface' key can also appear on the second and subsequent parts, where it indicates that that part (only) should be ignored if unsupported.)
scrollback (b)
If present and true, the incoming message was part of a replay of message history (this matches the Scrollback flag in Channel_Text_Message_Flags). This flag does not make sense on outgoing messages and SHOULD NOT appear there.
rescued (b)
If present and true, the incoming message has been seen in a previous channel during the lifetime of the Connection, but had not been acknowledged when that channel closed, causing an identical channel (in which the message now appears) to open. This matches the Rescued flag in Channel_Text_Message_Flags; it does not make sense on outgoing messages, and SHOULD NOT appear there.

Well-known keys for the second and subsequent Message_Parts of a message, which contain the message content, along with the corresponding value types.

identifier (s — Protocol_Content_Identifier)
An opaque identifier for this part. Parts of a message MAY reference other parts by treating this identifier as if it were a MIME Content-ID and using the cid: URI scheme.
alternative (s)

If present, this part of the message is an alternative for all other parts with the same value for "alternative". Clients SHOULD only display one of them (this is expected to be used for XHTML messages in a future version of this specification).

If omitted, this part is not an alternative for any other part.

Parts of a message MAY reference the group of alternatives as a whole (i.e. a reference to whichever of them is chosen) by treating this identifier as if it were the MIME Content-ID of a multipart/alternative part, and using the cid: URI scheme.

content-type (s)

The MIME type of this part. See the documentation for MessageReceived and MessageSent for notes on the special status of "text/plain" parts.

Connection managers MUST NOT signal parts without a 'content-type' key; if a protocol provides no way to determine the MIME type, the connection manager is responsible for guessing it, but MAY fall back to "text/plain" for text and "application/octet-stream" for non-text.

Clients MUST ignore parts without a 'content-type' key, which are reserved for future expansion.

When sending messages, clients SHOULD normalize the content-type to lower case, but connection managers SHOULD NOT rely on this. When signalling sent or received messages, connection managers MUST normalize the content-type to lower case.

lang (s)
The natural language of this part, identified by a RFC 3066 language tag. XMPP allows alternative-selection by language as well as by content-type.
size (u)
The size in bytes (if needs-retrieval is true, this MAY be an estimated or approximate size). SHOULD be omitted if 'content' is provided. There's no point in providing the size if you're already providing all the content.
thumbnail (b)

This part is a thumbnail. To represent an image together with its thumbnail in a single message, there should be one part for the full image followed by a part for the thumbnail (following the “more complete versions first” requirement), with the same 'alternative' value. For example:

[ ... ,
  { 'alternative': 'catphoto',
    'content-type': 'image/jpeg',
    'size': 150000,
    'content': [0xFF, 0xD8, ... 0xFF 0xD9],
  },
  { 'alternative': 'catphoto',
    'content-type': 'image/jpeg'
    'size': 1024,
    'thumbnail': True,
    'content': [0xFF, 0xD8, ... 0xFF 0xD9],
  },
  ...
]
needs-retrieval (b)
If false or omitted, the connection manager already holds this part in memory. If present and true, this part must be retrieved on demand (like MIME's message/external-body) by a mechanism to be defined later. The mechanism was meant to be GetPendingMessageContent, but that didn't work out. It's worth leaving the header in in preparation for a future mechanism.
truncated (b)
The content available via the 'content' key has been truncated by the server or connection manager (equivalent to Channel_Text_Message_Flag_Truncated in the Text interface).
content (s or ay)
The part's content, if it is available and sufficiently small to include here (implies that 'needs-retrieval' is false or omitted). Otherwise, omitted. If the part is human-readable text or HTML, the value for this key MUST be a UTF-8 string (D-Bus signature 's'). If the part is not text, the value MUST be a byte-array (D-Bus signature 'ay'). If the part is a text-based format that is not the main body of the message (e.g. an iCalendar or an attached XML document), the value SHOULD be a UTF-8 string, transcoding from another charset to UTF-8 if necessary, but MAY be a byte-array (of unspecified character set) if transcoding fails or the source charset is not known.
interface (s - DBus_Interface)
This part is specific to the given interface, which is neither Text nor Messages. It SHOULD be ignored if that interface is not supported. (Note that an 'interface' key can also appear on the first part, where it indicates that the entire message should be ignored if unsupported.)

Well-known keys for the first Message_Part of a delivery report, along with the corresponding value types. Some of these are special-cases of headers defined by Message_Header_Key.

message-sender (u - Contact_Handle, as defined by Message_Header_Key)
MUST be the intended recipient of the original message, if available (zero or omitted if the intended recipient is unavailable or is not a contact, e.g. a chatroom), even if the delivery report actually came from an intermediate server.
message-type (u - Channel_Text_Message_Type, as defined by Message_Header_Key)
MUST be Channel_Text_Message_Type_Delivery_Report.
delivery-status (u - Delivery_Status)
The status of the message. All delivery reports MUST contain this key in the first Message_Part.
delivery-token (s - Protocol_Message_Token)

An identifier for the message to which this delivery report refers. MUST NOT be an empty string. Omitted if not available.

Clients may match this against the token produced by the SendMessage method and MessageSent signal. A status report with no token could match any sent message, and a sent message with an empty token could match any status report. If multiple sent messages match, clients SHOULD use some reasonable heuristic.

In an ideal world, we could unambiguously match reports against messages; however, deployed protocols are not ideal, and not all reports and messages can be matched.
delivery-error (u - Channel_Text_Send_Error)
The reason for the failure. MUST be omitted if this was a successful delivery; SHOULD be omitted if it would be Channel_Text_Send_Error_Unknown.
delivery-dbus-error (s - DBus_Error_Name)
The reason for the failure, specified as a (possibly implementation-specific) D-Bus error. MUST be omitted if this was a successful delivery. If set, the 'delivery-error' key SHOULD be set to the closest available value.
delivery-error-message (s)
Debugging information on why the message could not be delivered. MUST be omitted if this was a successful delivery; MAY always be omitted.
delivery-echo (aa{sv} - Message_Part[])

The message content, as defined by the Messages interface. Omitted if no content is available. Content MAY have been truncated, message parts MAY have been removed, and message parts MAY have had their content removed (i.e. the message part metadata is present, but the 'content' key is not).

Some protocols, like XMPP, echo the failing message back to the sender. This is sometimes the only way to match it against the sent message, so we include it here.
This type is only used by GetPendingMessageContent, which is unimplemented and deprecated. The index of a message part within a message. This structure is only used by GetPendingMessageContent, which is unimplemented and deprecated. A mapping from message part indexes to their content, as returned by GetPendingMessageContent. Indexes into the array of Message_Parts that represents a message. The "headers" part (which is not a valid argument to GetPendingMessageContent) is considered to be part 0, so the valid part numbers start at 1 (for the second message part). The message part's content. The variant MUST contain either type 's' or 'ay' (UTF-8 text string, or byte array), following the same rules as for the value of the 'content' key in the Message_Part mappings.

An opaque token used to identify messages in the underlying. protocol. As a special case, the empty string indicates that there is no particular identification for a message.

CM implementations SHOULD use an identifier expected to be unique, such as a UUID, for outgoing messages (if possible).

Some protocols can only track a limited number of messages in a small message-ID space (SMS messages are identified by a single byte), and some implementations send non-unique identifiers (some XMPP clients use very simple message IDs, such as an incrementing integer that resets to 1 at the beginning of each connection). As a result, clients MUST NOT assume that protocol tokens will not be re-used.

In particular, clients SHOULD use a heuristic to assign delivery reports to messages, such as matching on message content or timestamp (if available), or assuming that the delivery report refers to the most recent message with that ID.

A protocol-specific identifier for a blob of content, as used for the identifier key in a Message_Part. The same identifier MAY be re-used if the same content, byte-for-byte, appears as a part of several messages.

On XMPP, these identifiers might be Content-IDs for custom smileys implemented using XEP-0232 Bits of Binary; the same smiley might well appear in multiple messages.

Submit a message to the server for sending. If this method returns successfully, the message has been submitted to the server and the MessageSent signal is emitted. A corresponding Sent signal on the Text interface MUST also be emitted.

This method MUST return before the MessageSent signal is emitted.

This means that the process sending the message is the first to see the Protocol_Message_Token, and can relate the message to the corresponding MessageSent signal by comparing message tokens (if supported by the protocol).

If this method fails, message submission to the server has failed and no signal on this interface (or the Text interface) is emitted.

If this method succeeds, message submission to the server has succeeded, but the message has not necessarily reached its intended recipient. If a delivery failure is detected later, this is signalled by receiving a message whose message-type header maps to Delivery_Report. Similarly, if delivery is detected to have been successful (which is not possible in all protocols), a successful delivery report will be signalled.

The message content, including any attachments or alternatives. This MUST NOT include the following headers, or any others that do not make sense for a client to specify: message-sender, message-sender-id, message-sent, message-received, pending-message-id. Flags affecting how the message is sent. The channel MAY ignore some or all flags, depending on DeliveryReportingSupport; the flags that were handled by the CM are provided in MessageSent. An opaque token used to match any incoming delivery or failure reports against this message, or an empty string if the message is not readily identifiable. The requested message is malformed and cannot be sent.
Flags altering the way a message is sent. The "most usual" action should always be to have these flags unset. Some indication of which flags are supported is provided by the DeliveryReportingSupport property.

Provide a successful delivery report if possible, even if this is not the default for this protocol. Ignored if delivery reports are not possible on this protocol.

In some protocols, like XMPP, it is not conventional to request or send positive delivery notifications.

Delivery failure reports SHOULD always be sent, but if this flag is present, the connection manager MAY also try harder to obtain failed delivery reports or allow them to be matched to outgoing messages.

Provide a delivery report when the message is read by the recipient, even if this is not the default for this protocol. Ignored if read reports are not possible on this protocol.

Provide a delivery report when the message is deleted by the recipient, even if this is not the default for this protocol. Ignored if such reports are not possible on this protocol.

Signals that a message has been submitted for sending. This MUST be emitted exactly once per emission of the Sent signal on the Text interface, for backwards-compatibility; clients SHOULD ignore the latter if this interface is present, as mentioned in the introduction.

This SHOULD be emitted as soon as the CM determines it's theoretically possible to send the message (e.g. the parameters are supported and correct).

This signal allows a process that is not the caller of SendMessage to log sent messages.

The message content (see Message_Part for full details). If the message that was passed to SendMessage has a formatted text part that the connection manager recognises, but no text/plain alternative, the CM MUST use the formatted text part to generate a text/plain alternative which is also included in this signal argument.

The connection manager SHOULD include the message-sender, message-sender-id and message-sent headers in the representation of the message that is signalled here. If the channel has channel-specific handles, the message-sender and message-sender-id SHOULD reflect the sender that other contacts will see.

If the connection manager can predict that the message will be altered during transmission, this argument SHOULD reflect what other contacts will receive, rather than being a copy of the argument to SendMessage (if the message is truncated, formatting or alternatives are dropped, etc., then the edited version SHOULD appear in this signal).

Flags affecting how the message was sent. The flags might be a subset of those passed to SendMessage if the caller requested unsupported flags.

An opaque token used to match any incoming delivery or failure reports against this message, or an empty string if the message is not readily identifiable.

A list of incoming messages that have neither been acknowledged nor rejected. This list is a more detailed version of the one returned by Text.ListPendingMessages, and contains the same messages, uniquely identified by the same pending message IDs. Its items can be removed using Text.AcknowledgePendingMessages.

Change notification is via MessageReceived and PendingMessagesRemoved.

The messages with the given IDs have been removed from the PendingMessages list. Clients SHOULD NOT attempt to acknowledge those messages. This completes change notification for the PendingMessages property (previously, there was change notification when pending messages were added, but not when they were removed). The messages that have been removed from the pending message list. This method has never been implemented, and in any case would have been impossible to use correctly when multiple clients (such as a logger and the handler) are interested in a text channel. See freedesktop.org bug #26417 for more details. Retrieve the content of one or more parts of a pending message. Note that this function may take a considerable amount of time to return if the part's 'needs-retrieval' flag is true; consider extending the default D-Bus method call timeout. Additional API is likely to be added in future, to stream large message parts. The ID of a pending message The desired entries in the array of message parts, identified by their position. The "headers" part (which is not a valid argument to this method) is considered to be part 0, so the valid part numbers start at 1 (for the second Message_Part).

The content of the requested parts. The keys in this mapping are positions in the array of message parts; the values are either of type 's' or 'ay' (UTF-8 text string, or byte array), following the same rules as for the value of the 'content' key in the Message_Part mappings.

If the one of the requested part numbers was greater than zero but referred to a part that had no content (i.e. it had no 'content-type' key or no 'content' key), it is simply omitted from this mapping; this is not considered to be an error condition.

Either there is no pending message with the given message ID, or one of the part numbers given was 0 or too large.
Signals that a message has been received and added to the pending messages queue. This MUST be emitted exactly once per emission of the Received signal on the Text interface, for backwards-compatibility; clients SHOULD ignore the latter in favour of this signal if this interface is present, as mentioned in the introduction.

The message content, including any attachments or alternatives. If the incoming message contains formatted text without a plain text alternative, the connection manager MUST generate a text/plain alternative from the formatted text, and include it in this message (both here, and in the PendingMessages property).

The status of a message as indicated by a delivery report.

If this enum is extended in future specifications, this should only be to add new, non-overlapping conditions (i.e. all failures should still be signalled as either Temporarily_Failed or Permanently_Failed). If additional detail is required (e.g. distinguishing between the various types of permanent failure) this will be done using additional Delivery_Report_Header_Keys.

The message's disposition is unknown. Clients SHOULD consider all messages to have status Delivery_Status_Unknown unless otherwise specified; connection managers SHOULD NOT signal this delivery status explicitly. The message has been delivered to the intended recipient. Delivery of the message has failed. Clients SHOULD notify the user, but MAY automatically try sending another copy of the message. Similar to errors with type="wait" in XMPP; analogous to 4xx errors in SMTP. Delivery of the message has failed. Clients SHOULD NOT try again unless by specific user action. If the user does not modify the message or alter configuration before re-sending, this error is likely to happen again. Similar to errors with type="cancel", type="modify" or type="auth" in XMPP; analogous to 5xx errors in SMTP. An intermediate server has accepted the message but the message has not been yet delivered to the ultimate recipient. The connection manager might send a Failed report or Delivered report later. Similar to "202 Accepted" success code in SIP; analogous to 251 and 252 responses in SMTP. The message has been read by the intended recipient. The message has been deleted by the intended recipient. This MAY be signalled on its own if the message is deleted without being read, or after Read if the message was read before being deleted.
Flags indicating the level of support for delivery reporting on this channel, as found on the DeliveryReportingSupport property. Any future flags added to this set will conform to the convention that the presence of an extra flag implies that more operations will succeed. Note that CMs may always provide more reports than are requested in the Message_Sending_Flags passed to SendMessage. If senders want delivery reports, they should ask for them. If they don't want delivery reports, they can just ignore them, so there's no need to have capability discovery for what will happen if a delivery report isn't requested. Clients MAY expect to receive negative delivery reports if Message_Sending_Flag_Report_Delivery is specified when sending. Clients MAY expect to receive positive delivery reports if Message_Sending_Flag_Report_Delivery is specified when sending. Clients MAY expect to receive Delivery_Status Read reports if Message_Sending_Flag_Report_Read is specified when sending. Clients MAY expect to receive Delivery_Status Deleted reports if Message_Sending_Flag_Report_Deleted is specified when sending. A bitfield indicating features supported by this channel.
telepathy-qt-0.9.3/spec/Account_Interface_Minimum_Presence.xml0000644000175200001440000001064012000056607026764 0ustar00collabora-develusers00000000000000 Copyright © 2010 Collabora Ltd. Copyright © 2010 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(draft 2)

This interface extends the core Account interface to provide a way for applications to request minimum presence on the account.

Some applications, for example mail notifiers or address book synchronisation, can make use of account's connection even while the user is nominally offline.

Each client's unique name may set a minimum desired presence on the account. The combined presence is the most available presence of the minimum presences set and of RequestedPresence set by the user. The account manager should attempt to manipulate the connection to set the combined presence.

Active requests for minimum presence status, a map of client unique name to the (non-offline) minimum presence they set.

Set a minimum presence needed by the client for this account. Setting (Offline, "offline", "") removes the minimum presence requirement for the client's unique name.

Requested presence status.
Emitted when the MinimumPresenceRequests property changes. A new value of MinimumPresenceRequests property.

A map of active minimum presence requests.

Client unique name.

Requested minimum presence.

Some applications may want to monitor the currently active minimum presences required. An example is an tool allowing the user to inspect applications maintaining open connections and close those applications.

telepathy-qt-0.9.3/spec/Call_Content_Interface_Video_Control.xml0000644000175200001440000001175512000056607027254 0ustar00collabora-develusers00000000000000 Copyright © 2011 Collabora Ltd.

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API)

An interface that allows the connection manager to control the video stream.

This interface is generally not needed. In cases where the connection manager handles the network communication and the media is transferred from the client to the connection manager via shared memory, it can sometimes be beneficial for the connection manager to be able to control certain aspects of the video stream.

Request that the video encoder produce a new key frame as soon as possible. With of the video stream. Height of the video stream. The resolution at which the streaming engine should be sending.

Change notification is via the VideoResolutionChanged signal.

The desired video resolution has changed. The bitrate the streaming engine should be sending at.

Change notification is via the BitrateChanged signal.

The desired bitrate has changed The framerate the streaming engine should be sending at.

Change notification is via the FramerateChanged signal.

The desired framerate has changed The Maximum Transmission Unit

Change notification is via the MTUChanged signal.

The Maximum Transmission Unit has changed Only send key frames when manually requested
telepathy-qt-0.9.3/spec/Client_Handler_Future.xml0000644000175200001440000000771512000056607024307 0ustar00collabora-develusers00000000000000 Copyright © 2009 Collabora Ltd. Copyright © 2009 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

This interface contains functionality which we intend to incorporate into the Handler interface in future. It should be considered to be conceptually part of the core Handler interface, but without API or ABI guarantees.

If true, channels destined for this handler are not passed to observers for observing.

This is useful in use-cases where the handler doesn't want anyone observing the channel - for example, because channels it handles shouldn't be logged.

For service-activatable handlers, this property should be specified in the handler's .client file as follows:

[org.freedesktop.Telepathy.Client.Handler]
BypassObservers=true

If true, channels destined for this handler that have the Conference interface, with a channel that was previously handled by the same client process in their InitialChannels property, should bypass the approval stage. In effect, this is a weaker form of BypassApproval.

It would be reasonable for a user interface to accept invitations to continuations of an existing channel automatically, or not; this is a matter of UI policy.

It's somewhat complex for an Approver to keep track of which channels are being handled by a particular Handler, but the Channel Dispatcher already has to track this, so it's useful for the channel dispatcher to assist here.

telepathy-qt-0.9.3/spec/Channel_Interface_Captcha_Authentication.xml0000644000175200001440000005561012000056607030111 0ustar00collabora-develusers00000000000000 Copyright © 2010-2012 Collabora Limited

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(version 1)

A channel interface for captcha authentication. When this interface appears on a ServerAuthentication channel, it represents authentication with the server. In future, it could also be used to authenticate with secondary services, or even to authenticate end-to-end connections with contacts. As a result, this interface does not REQUIRE ServerAuthentication to allow for a potential future Channel.Type.PeerAuthentication interface.

In any protocol that requires a captcha, the connection manager can use this channel to let a user interface carry out a simple captcha handshake with it, as a way to test the user is human interactively.

For channels managed by a ChannelDispatcher, only the channel's Handler may call the methods on this interface. Other clients MAY observe the authentication process by watching its signals and properties.

The most commonly used form of captcha challenge is OCR (recognition of distorted letters or words in an image), but for accessibility reasons, this interface also allows various other types of challenge, such as plain-text questions or recognition of words in audio. Its structure is modelled on XMPP's XEP-0158, but can be used with other protocols by mapping their semantics into those used in XMPP.

It is important to support multiple types of captcha challenge to avoid discriminating against certain users; for instance, blind or partially-sighted users cannot be expected to answer an OCR challenge.

XEP-0158 supports a superset of all other known protocols' captcha interfaces, and is sufficiently elaborate that we expect it will continue to do so.

There can only be one Handler, which is a good fit for the question/answer model implied by captchas.

A struct containing information regarding a single captcha mechanism.

The ID with which to reference this captcha method when retrieving its data and answering it. They are unique within this channel instance only.

The type of challenge as defined by XEP-0158. For instance, the commonly-used "type the letters/words you see in this image" challenge is represented by ocr

A human-readable label for the challenge, as defined in XEP-0158.

If the server does not supply a label for a challenge of type other than qa, connection managers SHOULD set Label to an empty string instead of generating their own text. If the Label is an empty string, the Handler SHOULD replace it with a generic label in the user's locale, such as the strings suggested in XEP-0158 (for instance, Enter the text you see for ocr challenges). The Handler MAY use those generic labels in any case, as per the Internationalization Considerations section of XEP-0158.

Connection managers are not usually localized, so text generated by the connection manager would be in English, regardless of the user's locale. The Handler is better-placed to generate a generic Label in the user's locale.

For challenges of type qa, the Label is a plain-text question for the user to answer. The connection manager SHOULD NOT provide an empty Label; if it does, the Handler SHOULD treat that challenge as impossible, and SHOULD NOT attempt to display it.

One flag defined: Required. Most captchas will have no flags.

A list of MIME types the server is offering to provide for this captcha method.

A mapping of captcha IDs to answer strings. The ID of the captcha to which the associated answer string is answering. The answer string to answer the captcha referenced by the associated ID.

If true, GetCaptchas can be expected to return new captcha information when in the Local_Pending state. If false, GetCaptchas will return NotAvailable on subsequent calls.

Refreshing the captcha isn't required to work, although some protocols and implementations allow it. This is usually done in case a given captcha is unintelligible.

The current status of this channel.

Because only the Handler should call methods on this interface, the Handler MAY reduce round-trips by not fetching the initial value of this property, and instead assume that is initially Local_Pending.

This assumption normally avoids the need to call GetAll(), since the values of CaptchaError and CaptchaErrorDetails are also implied by this assumption, and the only other property is CanRetryCaptcha, which is immutable.

The reason for the CaptchaStatus, or an empty string if the state is neither Try_Again nor Failed.

Typical values: "", Cancelled, AuthenticationFailed, CaptchaNotSupported

In particular, an ordinary authentication failure (as would be produced for an incorrect answer) SHOULD be represented by AuthenticationFailed, cancellation by the user's request SHOULD be represented by Cancelled, cancellation due to the inability to display the captcha to the user or otherwise answer it SHOULD be represented by CaptchaNotSupported, and cancellation by a local process due to inconsistent or invalid challenges from the server SHOULD be represented by ServiceConfused.

If this interface appears on a ServerAuthentication channel, and connection to the server fails with an authentication failure, this error code SHOULD be copied into the Connection.ConnectionError signal.

If CaptchaError is non-empty, any additional information about the last disconnection; otherwise, the empty map. The keys and values are the same as for the second argument of Connection.ConnectionError.

If this interface appears on a ServerAuthentication channel, and connection to the server fails with an authentication failure, these details SHOULD be copied into the Connection.ConnectionError signal.

Information about each of the available captcha methods. The number of captcha methods required to be answered in order to successfully complete this captcha challenge (most frequently 1, but XMPP allows servers to demand that more than one captcha is answered). The language of each Label in Captcha_Info if available, for instance en_US, or "" if unknown.

Gets information regarding each of the captcha methods available and which and how many need to be successfully answered

To call this method successfully, the state must be Local_Pending or Try_Again. If it is Local_Pending, it remains Local_Pending. If called more than once while in Local_Pending state, or if the state is Try_Again, this method fetches a new set of captcha challenges, if possible, and the state returns to Local_Pending.

For instance, you could call GetCaptchas again from Local_Pending state if the user indicates that they can't understand the initially-offered captcha.

This is a method, not a property, so that it can be used to fetch more than one set of captcha challenges, and so that change notification is not required. Only the Handler should call this method and calling GetAll would not reduce round-trips, so the usual reasons to prefer a property do not apply here.

Either the state is not Local_Pending or Try_Again, or it has already been called and CanRetryCaptcha is False.
The ID of the captcha of which to retrieve data. MIME type picked by the Handler, chosen from the list of MIME types received in GetCaptchas. XEP-0158 allows the same captcha to be made available in multiple formats, for instance the same spoken question as audio/x-wav, application/ogg and audio/speex. Captcha data as requested.

Fetch and return the captcha data. In protocols where captchas are downloaded out-of-band (for instance via HTTP), the connection manager is expected to do so.

Returns an empty array if the type was "qa"

If audio-based and image-based captchas are both available, we don't want to waste time downloading the audio until/unless the user asks to hear it. The extra D-Bus round-trips are not a problem, since they are expected to be quick compared with the time taken for the user to solve the captcha.

The state is not in Local_Pending or GetCaptchas had never been called.
The mapping of captcha IDs to answer strings.

Answer as many captchas as desired and/or required.

Callable in state Local_Pending only. State changes to Remote_Pending.

The state is not in Local_Pending.
Reason for cancelling. This MAY be used to choose an error response to the remote server, and SHOULD also be reflected in the CaptchaError. A textual description of the reason for cancelling, supplied by the Handler. This message SHOULD NOT be sent to the remote server, but SHOULD be copied into the 'debug-message' field of the CaptchaErrorDetails and ConnectionError.

Cancel. State changes to Failed with error NotAvailable or Cancelled if it isn't already Failed. All you can do now is to close the channel.

The current state is Failed.

Extra flags to include with Captcha information

This captcha mechanism is required to be successfully answered in order to pass this captcha challenge.

A reason why captcha authentication was aborted by the client.

The user aborted the authentication. If this is used, the CaptchaError SHOULD be set to Cancelled The Handler doesn't support the given/required captcha types. If this is used, the CaptchaError SHOULD be set to CaptchaNotSupported. This SHOULD also be used if Close is called before CancelCaptcha. If no Handler supports captcha channels, the ChannelDispatcher will just call Close, because it has no knowledge of specific channel types. The Handler doesn't understand the captcha data received. The challenger may be sending gibberish. If this is used, the CaptchaError SHOULD be set to ServiceConfused.
The challenge/response exchange is in progress and waiting for a local action. Call AnswerCaptchas to go to the Remote_Pending state, or call CancelCaptcha followed by Close to give up. The challenge/response exchange is in progress and waiting for a response from the server. Wait for a reply from the server, which will result in the Succeeded, Try_Again, or Failed state, or call CancelCaptcha followed by Close to give up. Everyone is happy. Connection to the server will proceed as soon as this state is reached. There is nothing useful to do in this state except to call Close to close the channel. The server has indicated an authentication failure. Call GetCaptchas again to get a new captcha, or CancelCaptcha followed by Close to give up. Authentication has failed in some way. There is nothing useful to do in this state except to close the channel with Close.
telepathy-qt-0.9.3/spec/Protocol.xml0000644000175200001440000005616712000056607021710 0ustar00collabora-develusers00000000000000 Copyright © 2009-2010 Collabora Ltd.

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API)

An object representing a protocol for which this ConnectionManager can create Connections.

Each Protocol object has the same well-known bus name as its parent ConnectionManager. Its object path is formed by taking the ConnectionManager's object path and appending '/', followed by the Protocol name with any hyphen/minus '-' converted to underscores '_'.

This is the same as the representation of protocol names in Account object paths, and in Connection object paths and bus names. For instance, telepathy-gabble and telepathy-salut would implement objects at /org/freedesktop/Telepathy/ConnectionManager/gabble/jabber and /org/freedesktop/Telepathy/ConnectionManager/salut/local_xmpp, respectively.

If the ConnectionManager has a .manager file, each Protocol's immutable properties must be represented in that file; the representation is described as part of the documentation for each property. For instance, a very simple ConnectionManager with one Protocol might be represented like this:

[ConnectionManager]
Interfaces=

[Protocol example]
Interfaces=
ConnectionInterfaces=org.freedesktop.Telepathy.Connection.Interface.Requests;
param-account=s required
param-password=s required secret
RequestableChannelClasses=text;
VCardField=x-example
EnglishName=Example
Icon=im-example
AuthenticationTypes=org.freedesktop.Telepathy.Channel.Type.ServerTLSConnection;org.freedesktop.Telepathy.Channel.Interface.SASLAuthentication;

[text]
org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.Text
org.freedesktop.Telepathy.Channel.TargetHandleType u=1
allowed=org.freedesktop.Telepathy.Channel.TargetHandle;org.freedesktop.Telepathy.Channel.TargetID;

A list of interfaces supported by this Protocol object.

This property should not be confused with ConnectionInterfaces, which refers to the interfaces of connections to this protocol.

Connection managers with a .manager file (as described as part of the ConnectionManager interface) MUST cache this property in the protocol's section of the .manager file, using the key Interfaces. The corresponding value is a list of D-Bus interface names, each followed by a semicolon.

The parameters which may be specified in the Parameters of an Account (or, for specialised applications which do not use the account manager, passed to RequestConnection). Some parameters are mandatory, and some parameters only make sense when registering new accounts with the server; see the Param_Spec documentation for more details.

Connection managers with a .manager file (as described as part of the ConnectionManager interface) MUST cache this property in the protocol's section of the .manager file via keys of the form param-p and default-p, as documented in the ConnectionManager interface.

A list of interface names which might be in the Interfaces property of a Connection to this protocol. Whether a Connection will have all, some or none of these interfaces depends on server capabilities.

This property should not be confused with Interfaces.

Connection managers with a .manager file MUST cache this property in the protocol's section of the .manager file, using the key ConnectionInterfaces. The corresponding value is a list of D-Bus interface names, each followed by a semicolon.

A list of channel classes which might be requestable from a Connection to this protocol (i.e. they will, or might, appear in the Connection's RequestableChannelClasses property).

Whether a Connection will have all, some or none of these requestable channel classes depends on server capabilities; similarly, individual contacts are not guaranteed to support all of these channel classes.

Connection managers with a .manager file MUST cache this property in the protocol's section of the .manager file, using the key RequestableChannelClasses. The corresponding value is a list of opaque strings, each followed by a semicolon; each of those strings is the name of a group in the .manager file which represents a channel class.

The names of the groups representing channel classes are not significant, and MUST NOT be interpreted. When writing .manager files, authors MAY choose mnemonic group names, generate group names mechanically (e.g. with an incrementing integer), or use some combination of these.

Each group representing a channel class has a key allowed which is a list of D-Bus property names representing allowed parameters. Any other keys that do not contain a space MUST be ignored. Any key containing a space represents a fixed property; the key has the form "propertyname type", and the value is encoded in the same way as for the default-p keys described in the ConnectionManager documentation.

Connection managers that have channel classes whose fixed properties are not representable in this form SHOULD NOT have .manager files.

For instance, this .manager file could represent a connection manager that supports 1-1 Text messages and StreamedMedia audio calls:

[Protocol jabber]
param-account=s required
param-password=s required
RequestableChannelClasses=rcc0;rcc1;

[rcc0]
org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.Text
org.freedesktop.Telepathy.Channel.TargetHandleType u=1
allowed=org.freedesktop.Telepathy.Channel.TargetHandle;org.freedesktop.Telepathy.Channel.TargetID;

[rcc1]
org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.StreamedMedia
org.freedesktop.Telepathy.Channel.TargetHandleType u=1
allowed=org.freedesktop.Telepathy.Channel.TargetHandle;org.freedesktop.Telepathy.Channel.TargetID;org.freedesktop.Telepathy.Channel.Type.StreamedMedia.InitialAudio;

The name of the most common vCard field used for this protocol's contact identifiers, normalized to lower case, or the empty string if there is no such field.

For example, this would be x-jabber for Jabber/XMPP (including Google Talk), or tel for the PSTN.

A more exhaustive list of addressable vCard fields can be found in the Protocol's Addressing interface's AddressableVCardFields.

It is not necessarily valid to interpret contacts' identifiers as values of this vCard field. For instance, telepathy-sofiasip supports contacts whose identifiers are of the form sip:jenny@example.com or tel:8675309, which would not normally both be represented by any single vCard field. Arbitrary handles/identifiers as vCard fields are represented through the Connection's Addressing1 contact attributes.

This is taken from Mission Control profiles as used on Maemo 5. One valid use of this field is to answer the question: given a contact's vCard containing an X-JABBER field, how can you communicate with the contact? By iterating through protocols looking for an x-jabber VCardField, one can build up a list of protocols that handle x-jabber, then offer the user a list of accounts for those protocols and/or the option to create a new account for one of those protocols.

Connection managers with a .manager file MUST cache this property in the protocol's section of the .manager file if it is non-empty, using the key VCardField. The corresponding value is a string, following the syntax of the "localestring" type from the Desktop Entry Specification.

The name of the protocol in a form suitable for display to users, such as "AIM" or "Yahoo!", or the empty string if none is available.

This is effectively in the C locale (international English); user interfaces requiring a localized protocol name SHOULD look one up in their own message catalog based on either the Telepathy Protocol name or this property, but SHOULD use this English version as a fallback if no translated version can be found.

Many protocols are named after a company or product which isn't translated in non-English locales. This also provides a fallback display name, for UIs with no prior knowledge of a particular protocol.

If this property's value is empty, clients MAY fall back to using the Telepathy Protocol name, possibly with its capitalization adjusted.

Connection managers with a .manager file MUST cache this property in the protocol's section of the .manager file if it is non-empty, using the key EnglishName. The corresponding value is a string, following the syntax of the "localestring" type from the Desktop Entry Specification.

The name of an icon in the system's icon theme, such as "im-msn", or the empty string.

This can be used as a default if the Icon property is not set on an Account, or used by the AccountManager to choose a default icon if none is set during account creation.

If this property's value is empty, clients MAY fall back to generating a name based on the Protocol name.

Connection managers with a .manager file MUST cache this property in the protocol's section of the .manager file if it is non-empty, using the key Icon. The corresponding value is a string, following the syntax of the "localestring" type from the Desktop Entry Specification.

Return a string which uniquely identifies the account to which the given parameters would connect.

For many protocols, this would return the well-known 'account' parameter. However, for IRC the returned string would be composed from the 'account' (i.e. nickname) and 'server' parameters. AccountManager implementations can use this to form the account-specific part of an Account's object path.

A set of parameters as would be provided to RequestConnection

An opaque string suitable for use as the account-specific part of an Account's object path. This is not necessarily globally unique, but should represent a "best-effort" identification of the account.

For a pathological case, consider a user signing in as 'me@example.com' with 'server' set to either jabber1.example.com or jabber2.example.com. Both of these should result in me@example.com being returned from this method, even if the user can actually be signed in to those two servers simultaneously.

The IdentifyAccount method is not supported by this connection manager. The caller SHOULD fall back to deriving identification from the parameters.

Attempt to normalize the given contact ID. Where possible, this SHOULD return the same thing that would be returned by InspectHandles(RequestHandles(CONTACT, [Contact_ID])) on a connected Connection.

If full normalization requires network activity or is otherwise impossible to do without a Connection, this method SHOULD perform a best-effort normalization.

One common example of a best-effort offline normalization differing from the ideal normalization is XMPP.

On XMPP, contacts' JIDs should normally have the resource removed during normalization, but for contacts in a MUC (chatroom), the resource is an integral part of the JID - so the contact JID alice@example.com/Empathy should normalize to alice@example.com, but the in-MUC JID wonderland@conference.example.com/Alice should normalize to itself.

While online, the connection manager has enough context to know which chatrooms the user is in, and can infer from that whether to remove resources, but the best-effort normalization performed while offline does not have this context, so the best that can be done is to remove the resource from all JIDs.

This method MAY simply raise NotImplemented on some protocols.

In link-local XMPP, you can't talk to someone who isn't present on your local network, so normalizing identifiers in advance is meaningless.

The identifier of a contact in this protocol The identifier of a contact in this protocol, normalized as much as possible The NormalizeContact method is not supported by this connection manager. The caller MAY recover by using the contact ID as-is.

A list of D-Bus interfaces which provide information as to what kind of authentication channels can possibly appear before the connection reaches the CONNECTED state.

These can either be channel types, or where the channel type isn't enough information to be useful, interfaces indicating a specific use of a channel type. For example, ServerTLSConnection channels are obviously about TLS certificates so the channel type would appear in this list. However, a ServerAuthentication channel type alone does not explain enough about the authentication type in use as it is merely a base for the channel interfaces that appear in said channels. In this case, CMs should use the value of the ServerAuthentication.AuthenticationMethod property in this list.

For example, if a protocol's AuthenticationTypes contains two values:

[ ...Channel.Type.ServerTLSConnection,
  ...Channel.Interface.SASLAuthentication ]

This tells a client that before the connection status reached CONNECTED, a ServerTLSConnection could appear carrying a TLS certificate. It also tells the client that before the connection status reaches CONNECTED, a ServerAuthentication channel could also appear, where ServerAuthentication.AuthenticationMethod=SASLAuthentication. A hypothetical future Channel.Interface.Captcha interface would also appear in this list if the CM might require the user solve a captcha before connecting.

telepathy-qt-0.9.3/spec/Channel_Request_Future.xml0000644000175200001440000001103512000056607024502 0ustar00collabora-develusers00000000000000 Copyright © 2008-2010 Collabora Ltd. Copyright © 2008-2009 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

This interface contains functionality which we intend to incorporate into the ChannelRequest interface in future. It should be considered to be conceptually part of the core ChannelRequest interface, but without API or ABI guarantees.

(as draft)

A dictionary of metadata provided by the channel requester, which the handler and other clients MAY choose to interpret. Currently no standard keys are defined; clients MAY choose to use platform-specific keys for their own purposes, but MUST ignore unknown keys and MUST cope with expected keys being missing.

This property might be used to pass a contact ID for a telephone number shared between two contacts from the address book to the call UI, so that if you try to call “Mum”, the call UI knows this rather than having to guess or show “Calling Mum or Dad”. The format of these contact IDs would be platform-specific, so we leave the definition of the dictionary entry up to the platform in question. But third-party channel requesters might not include the contact ID, so the call UI has to be able to deal with it not being there.

The channel dispatcher will not interpret these hints: they are solely for communication between cooperating clients.

Any extra parameters that do affect the channel dispatcher should be designed separately.

This property may be set when the channel request is created, and can never change. Since it is immutable, it SHOULD be included in the dictionary of properties passed to AddRequest by the ChannelDispatcher.

(as draft)

Variant of the Succeeded signal allowing to get the channel which has been created.

The Connection owning the channel.

The channel which has been created.

telepathy-qt-0.9.3/spec/errors.xml0000644000175200001440000006040412000056607021410 0ustar00collabora-develusers00000000000000

The D-Bus errors used in Telepathy all start with org.freedesktop.Telepathy.Error.. They are used in D-Bus messages of type ERROR, and also as plain strings annotated with the DBus_Error_Name type.

In principle, any method can raise any error (this is a general fact of IPC). For instance, generic D-Bus errors starting with org.freedesktop.DBus.Error. will occur in some situations.

Telepathy methods can also raise implementation-specific errors to indicate specialized failure conditions. For better interoperability, if a suitable Telepathy error exists, it should be preferred.

The namespace org.freedesktop.Telepathy.Qt.Error. is reserved for use by the D-Bus client implementation in telepathy-qt, which uses it to represent certain error situations that did not involve a D-Bus ERROR message. These errors are defined and documented as part of telepathy-qt's C++ API, and should not be used on D-Bus.

Raised when there is an error reading from or writing to the network. Raised when the requested method, channel, etc is not available on this connection. Raised when one of the provided arguments is invalid. Raised when the requested functionality is temporarily unavailable. The user is not permitted to perform the requested operation. The connection is not currently connected and cannot be used. This error may also be raised when operations are performed on a Connection for which StatusChanged has signalled status Disconnected for reason None. The second usage corresponds to None in the Connection_Status_Reason enum; if a better reason is available, the corresponding error should be used instead. The handle specified is unknown on this channel or connection. You are banned from the channel. The channel is full. The requested channel is invite-only.

The requested channel or other resource already exists, and another user interface in this session is responsible for it.

User interfaces SHOULD handle this error unobtrusively, since it indicates that some other user interface is already processing the channel.

Raised by an ongoing request if it is cancelled by user request before it has completed, or when operations are performed on an object which the user has asked to close (for instance, a Connection where the user has called Disconnect, or a Channel where the user has called Close). The second form can be used to correspond to the Requested member in the Connection_Status_Reason enum, or to to represent the situation where disconnecting a Connection, closing a Channel, etc. has been requested by the user but this request has not yet been acted on, for instance because the service will only act on the request when it has finished processing an event queue. Raised when authentication with a service was unsuccessful. This corresponds to Authentication_Failed in the Connection_Status_Reason enum. Raised if a user request insisted that encryption should be used, but encryption was not actually available. This corresponds to part of Encryption_Error in the Connection_Status_Reason enum. It's been separated into a distinct error here because the two concepts that were part of EncryptionError seem to be things that could reasonably appear differently in the UI. Raised if encryption appears to be available, but could not actually be used (for instance if SSL/TLS negotiation fails). This corresponds to part of Encryption_Error in the Connection_Status_Reason enum. Raised if the server did not provide a SSL/TLS certificate. This error MUST NOT be used to represent the absence of a client certificate provided by the Telepathy connection manager. This corresponds to Cert_Not_Provided in the Connection_Status_Reason enum. That error explicitly applied only to server SSL certificates, so this one is similarly limited; having the CM present a client certificate is a possible future feature, but it should have its own error handling. Raised if the server provided a SSL/TLS certificate signed by an untrusted certifying authority. This error SHOULD NOT be used to represent a self-signed certificate: see the Self Signed error for that. This corresponds to Cert_Untrusted in the Connection_Status_Reason enum and to Untrusted in the TLS_Certificate_Reject_Reason enum, with a clarification to avoid ambiguity. Raised if the server provided an expired SSL/TLS certificate. This corresponds to Cert_Expired in the Connection_Status_Reason enum and to Expired in the TLS_Certificate_Reject_Reason enum. Raised if the server provided an SSL/TLS certificate that will become valid at some point in the future. This corresponds to Cert_Not_Activated in the Connection_Status_Reason enum and to Not_Activated in the TLS_Certificate_Reject_Reason enum. Raised if the server provided an SSL/TLS certificate that did not have the expected fingerprint. This corresponds to Cert_Fingerprint_Mismatch in the Connection_Status_Reason enum and to Fingerprint_Mismatch in the TLS_Certificate_Reject_Reason enum.

Raised if the server provided an SSL/TLS certificate that did not match its hostname.

You MAY be able to get more details about the expected and certified hostnames by looking up the 'expected-hostname' and 'certificate-hostname' keys in the details map that came together with this error.

This corresponds to Cert_Hostname_Mismatch in the Connection_Status_Reason enum and to Hostname_Mismatch in the TLS_Certificate_Reject_Reason enum.
Raised if the server provided an SSL/TLS certificate that is self-signed and untrusted. This corresponds to Cert_Self_Signed in the Connection_Status_Reason enum and to Self_Signed in the TLS_Certificate_Reject_Reason enum. Raised if the server provided an SSL/TLS certificate that has been revoked. This corresponds to Cert_Revoked in the Connection_Status_Reason enum and to Revoked in the TLS_Certificate_Reject_Reason enum. Raised if the server provided an SSL/TLS certificate that uses an insecure cipher algorithm or is cryptographically weak. This corresponds to Cert_Insecure in the Connection_Status_Reason enum and to Insecure in the TLS_Certificate_Reject_Reason enum. Raised if the server provided an SSL/TLS certificate that is unacceptable in some way that does not have a more specific error. This corresponds to Cert_Other_Error in the Connection_Status_Reason enum and to Unknown in the TLS_Certificate_Reject_Reason enum. Raised if the length in bytes of the server certificate, or the depth of the server certificate chain exceeds the limits imposed by the crypto library. This corresponds to Cert_Limit_Exceeded in the Connection_Status_Reason enum and to Limit_Exceeded in the TLS_Certificate_Reject_Reason enum. Raised when requested functionality is unavailable due to contact not having required capabilities. Raised when requested functionality is unavailable because a contact is offline. This corresponds to Offline in the Channel_Group_Change_Reason enum. Used to represent a user being ejected from a channel by another user, for instance being kicked from a chatroom. This corresponds to Kicked in the Channel_Group_Change_Reason enum. Used to represent a user being removed from a channel because of a "busy" indication. This error SHOULD NOT be used to represent a server or other infrastructure being too busy to process a request - for that, see ServerBusy. This corresponds to Busy in the Channel_Group_Change_Reason enum. Used to represent a user being removed from a channel because they did not respond, e.g. to a StreamedMedia call. This corresponds to No_Answer in the Channel_Group_Change_Reason enum. Raised when the requested user does not, in fact, exist. This corresponds to Invalid_Contact in the Channel_Group_Change_Reason enum, but can also be used to represent other things not existing (like chatrooms, perhaps). Raised when a channel is terminated for an unspecified reason. In particular, this error SHOULD be used whenever normal termination of a 1-1 StreamedMedia call by the remote user is represented as a D-Bus error name. This corresponds to None in the Channel_Group_Change_Reason enum. Raised when the local streaming implementation has no codecs in common with the remote side. This corresponds to Media_Error. The media stream type requested is not supported by either the local or remote side. This corresponds to Media_Error. Raised when the call's streaming implementation has some kind of internal error. This corresponds to Internal_Error. Raised when a connection is refused. Raised when a connection can't be established. Raised when a connection is broken. Raised when the user attempts to connect to an account but they are already connected (perhaps from another client or computer), and the protocol or account settings do not allow this. XMPP can have this behaviour if the user chooses the same resource in both clients (it is server-dependent whether the result is AlreadyConnected on the new connection, ConnectionReplaced on the old connection, or two successful connections). Raised by an existing connection to an account if it is replaced by a new connection (perhaps from another client or computer). In MSNP, when connecting twice with the same Passport, the new connection "wins" and the old one is automatically disconnected. XMPP can also have this behaviour if the user chooses the same resource in two clients (it is server-dependent whether the result is AlreadyConnected on the new connection, ConnectionReplaced on the old connection, or two successful connections). Raised during in-band registration if the server indicates that the requested account already exists. Raised if a server or some other piece of infrastructure cannot process the request, e.g. due to resource limitations. Clients MAY try again later. This is not the same error as Busy, which indicates that a user is busy. Raised if a request cannot be satisfied because a process local to the user has insufficient resources. Clients MAY try again later. For instance, the ChannelDispatcher might raise this error for some or all channel requests if it has detected that there is not enough free memory. Raised if a request cannot be satisfied without violating an earlier request for anonymity, and the earlier request specified that raising an error is preferable to disclosing the user's identity (for instance via Connection.Interface.Anonymity.AnonymityMandatory or Channel.Interface.Anonymity.AnonymityMandatory). Raised when the requested functionality is not yet available, but is likely to become available after some time has passed. Raised when an incoming or outgoing Call1 is rejected by the the receiver. Raised when a call was terminated as a result of the local user picking up the call on a different resource. Raised when a server or other piece of infrastructure indicates an internal error, or when a message that makes no sense is received from a server or other piece of infrastructure. For instance, this is appropriate for XMPP's internal-server-error, and is also appropriate if you receive sufficiently inconsistent information from a server that you cannot continue. Raised if a server rejects protocol messages from a connection manager claiming that they do not make sense, two local processes fail to understand each other, or an apparently impossible situation is reached. For instance, this would be an appropriate mapping for XMPP's errors bad-format, invalid-xml, etc., which can't happen unless the local (or remote) XMPP implementation is faulty. This is also analogous to Invalid_CM_Behavior, TP_DBUS_ERROR_INCONSISTENT in telepathy-glib, and TP_QT_ERROR_INCONSISTENT in telepathy-qt.

Raised as a ConnectionError when a Connection cannot be established because either the Connection Manager or its support library (e.g. wocky, papyon, sofiasip) requires upgrading to support a newer protocol version.

This error corresponds to the Connection_Status_Reason of Network_Error.

Some protocols transmit a protocol or library version number to the server, which will disconnect them if the version isn't appropriate. This way we can report the error to the user, and if appropriate, the user's client can check for updates.
Raised if a client attempts to dial a number that is recognized as an emergency number (e.g. '911' in the USA), but the Connection Manager or provider does not support dialling emergency numbers. Many VOIP providers have the ability to dial traditional (PSTN) telephone numbers, but do not provide the ability to dial emergency numbers (for instance, Google Voice). This error provides additional information about why such a call was unsuccessful.

Raised if the user has insufficient Balance to place a call or send a message.

The key 'balance-required' MAY be included in CallStateDetails or a delivery report's Message_Part (with the same units and scale as AccountBalance) to indicate how much credit is required to make this call or send this message.

Raised if the CaptchaAuthentication1 Handler either has no UI to present captchas, or it does, but wasn't able to answer any of the captchas given.

Copyright © 2005-2010 Collabora Limited Copyright © 2005-2009 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

telepathy-qt-0.9.3/spec/Channel_Interface_SMS.xml0000644000175200001440000003140612000056607024146 0ustar00collabora-develusers00000000000000 Copyright © 2008–2010 Nokia Corporation Copyright © 2010 Collabora Ltd. 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 Library 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 Street, Fifth Floor, Boston, MA 02110-1301, USA. Imported from rtcom-telepathy-glib, with the unused properties removed and the documentation tidied up.

This interface contains SMS-specific properties for text channels.

The presence of this interface on a channel does not imply that messages will be delivered via SMS.

This interface MAY appear in the Interfaces property of channels where SMSChannel would be immutable and false. It SHOULD appear on channels where SMSChannel is immutable and true, and also on channels where SMSChannel is mutable (i.e. channels that might fall back to sending SMS at any time, such as on MSN).

Handler filters

A handler for class 0 SMSes should advertise the following filter:

{ ...ChannelType: ...Text,
  ...TargetHandleType: Contact,
  ...SMS.Flash: True,
}

It should also set its BypassApproval property to True, so that it is invoked immediately for new channels.

Contact Capabilities

Contacts to whom SMSes can be sent SHOULD indicate this via a requestable channel class with SMSChannel = True as a fixed property.

For instance, a contact that can accept both text and SMS channels:

[
({ ...ChannelType: ...Text,
   ...TargetHandleType: Contact,
 },
 [ ...TargetHandle, ...TargetID ]),

({ ...ChannelType: ...Text,
   ...TargetHandleType: Contact,
   ...SMSChannel: True,
 },
 [ ...TargetHandle, ...TargetID ]),
]

If True, then this channel is exclusively for receiving class 0 SMSes (and no SMSes can be sent using SendMessage on this channel). If False, no incoming class 0 SMSes will appear on this channel.

This property is immutable (cannot change), and therefore SHOULD appear wherever immutable properties are reported, e.g. NewChannels signals.

Class 0 SMSes should be displayed immediately to the user, and need not be saved to the device memory unless the user explicitly chooses to do so. This is unlike “normal”, class 1 SMSes, which must be stored, but need not be shown immediately in their entirity to the user.

Separating class 0 SMSes into their own channel with this immutable property allows them to be dispatched to a different Handler—which would include this property in its HandlerChannelFilter—avoiding the normal Text channel handler having to decide for each message whether it should be displayed to the user immediately or handled normally.

Currently, no mechanism is defined for sending class 0 SMSes. It seems reasonable to support specifying the class of an outgoing SMS in its header Message_Part, rather than requiring the UI to request a special channel for such SMSes; hence, we define here that channels with Flash set to True are read-only.

If TRUE, messages sent and received on this channel are transmitted via SMS.

If this property is included in the channel request, the Connection Manager MUST return an appropriate channel (i.e. if TRUE the channel must be for SMSes, if FALSE it must not), or else fail to provide the requested channel with the NotCapable error.

For example, to explicitly request an SMS channel to a contact. You might construct a channel request like:

{
  Channel.Type: Channel.Type.Text,
  Channel.TargetHandleType: Handle_Type_Contact,
  Channel.TargetID: escher.cat,
  Channel.Interface.SMS.SMSChannel: True,
}
Some protocols allow us to send SMSes to a remote contact, without knowing the phone number to which those SMSes will be sent. This provides a mechanism to request such channels.

If this property is not included in the channel request, the Connection Manager MAY return an SMS channel if that is the most appropriate medium (i.e. if the channel target is a phone number).

To some types of identifiers (i.e. phone numbers) it only makes sense to return an SMS channel, this is what happens currently with telepathy-ring. We don't want to break this behaviour when we are not explicit about the type of channel we want. Alternatively, for protocols where there is an SMS fallback for IM messages, it's possible that we don't care what sort of channel we get, and simply want notification of the transport.

Some protocols have a fallback to deliver IM messages via SMS. On these protocols, the Connection Manager SHOULD set the property value as appropriate, and notify its change with SMSChannelChanged.

Protocols such as MSN can fall back to delivering IM messages via SMS. Where possible we want clients to be able to inform the user that their messages are going to be redirected to the remote contact's phone.
The new value for SMSChannel. This signal indicates a change in the SMSChannel property.

Returns the number of 140 octet chunks required to send a message via SMS, as well as the number of remaining characters available in the final chunk and, if possible, an estimate of the cost.

There are a number of different SMS encoding mechanisms, and the client doesn't know which mechanisms an individual CM might support. This method allows the client, without any knowledge of the encoding mechanism, to provide length details to the user.

Clients SHOULD limit the frequency with which this method is called and SHOULD NOT call it for every keystroke. Clients MAY estimate the remaining size between single keystrokes.

The message the user wishes to send.

The number of 140 octet chunks required to send this message.

For example, in the GSM standard 7-bit encoding, a 162 character message would require 2 chunks.

The number of further characters that can be fit in the final chunk. A negative value indicates that the message will be truncated by abs(Remaining_Characters). The value MIN_INT32 (-231) indicates the message will be truncated by an unknown amount.

For example, in the GSM standard 7-bit encoding, a 162 character message would return 144 remaining characters (because of the space required for the multipart SMS header).

The estimated cost of sending this message. The currency and scale of this value are the same as the Balance.AccountBalance property.

A value of -1 indicates the cost could not be estimated.

Raised when the method is not available on this channel. Clients MAY choose to make their own estimation. Raised when the content cannot be encoded into a valid SMS.
telepathy-qt-0.9.3/spec/Account_Interface_Hidden.xml0000644000175200001440000000617612000056607024731 0ustar00collabora-develusers00000000000000 Copyright © 2010 Collabora Ltd.

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(draft 1)

An interface for flagging certain accounts as hidden, so that they do not appear in the account manager's standard lists of accounts. Accounts whose Hidden property is True are intended for non-interactive use (by non-user-visible services), and appear on the AccountManager.Interface.Hidden.DRAFT1 interface; in all other respects, they behave like any other account.

XMPP, in particular, is increasingly used for purposes other than instant messaging and VoIP. For instance, extensions exist for inter-device bookmark synchronization.

While obviously these services could re-use connections intended for instant messaging, in some cases you might want to use a different account. (Perhaps your bookmark sync provider is not your IM provider.) This API allows such auxiliary accounts to exist in Telepathy, while not being displayed in standard user interfaces for IM, VoIP, and friends.

If True, this account is intended for non-interactive use, and thus should not be presented to the user. It will not appear in properties and signals on the main AccountManager interface; instead, it will show up on AccountManager.Interface.Hidden.DRAFT1.

telepathy-qt-0.9.3/spec/Call_Content.xml0000644000175200001440000002100312000056607022431 0ustar00collabora-develusers00000000000000 Copyright © 2009-2010 Collabora Ltd. Copyright © 2009-2010 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API)

This object represents one Content inside a Call1. For example, in an audio/video call there would be one audio content and one video content. Each content has one or more Stream objects which represent the actual transport to one or more remote contacts.

There are two cases where multiple streams may happen:
  • Calls with more than two participants, if the protocol does not support multicast, and does not have mixer proxy.
  • With jingle, when calling a contact connected from multiple resources, a stream is created for each resource. Once the remote contact answered from one of its resources, all other streams get removed.

For protocols that support muting all streams of a given content separately, this object MAY also implement the Mute interface

previously there were no arguments Remove the content from the call. This will cause Call1.ContentRemoved((self_handle, User_Requested, "", "")) to be emitted. Raised when a Call doesn't support removing contents (e.g. a Google Talk video call).

Extra interfaces provided by this content, such as Content.Interface.Media, Interface.Hold or Interface.Mute. This SHOULD NOT include the Content interface itself, and cannot change once the content has been created.

The name of the content.

The content name property should be meaningful, so should be given a name which is significant to the user. The name could be the "audio" or "video" string localized, or perhaps include some string identifying the source, such as a webcam identifier.

The media type of this content.

The disposition of this content, which defines whether to automatically start sending data on the streams when Accept is called on the channel. The content has no specific disposition.

The content was initially part of the call. When Accept is called on the channel, all streams of this content with LocalSendingState set to Pending_Send will be moved to Sending as if SetSending (True) had been called.

The disposition of this content. plural version, renamed from StreamAdded

Emitted when streams are added to a call.

The Streams which were added.
plural version, renamed from StreamRemoved

Emitted when streams are removed from a call

The Streams which were removed. Why the content was removed.

The list of Stream objects that exist in this content.

In a conference call multiple parties can share one media content (say, audio), but the streaming of that media can either be shared or separate. For example, in a multicast conference all contacts would share one stream, while in a Muji conference there would be a stream for each participant.

Change notification is through the StreamsAdded and StreamsRemoved signals.

telepathy-qt-0.9.3/spec/Channel_Interface_File_Transfer_Metadata.xml0000644000175200001440000001062112000056607030023 0ustar00collabora-develusers00000000000000 Copyright (C) 2011 Collabora Ltd.

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

This interface exists to provide a mechanism to include arbitrary additional information in file transfers. For example, one might want to send a document and include the number of times the character P appeared in the file, so would add NumberOfPs=42 to the Metadata property.

ServiceName living in its own property makes it easier for specific applications to send files to each other, bypassing the standard handler. For example, the Banshee Telepathy plugin handler could match on ServiceName so the Empathy file transfer is not used instead.

A string representing the service name that will be used over the file transfer channel. This property is equivalent to the Channel.Type.DBusTube.ServiceName and Channel.Type.StreamTube.Service properties. If no service name is given then this property will be the empty string.

Additional information about the file transfer set by the channel initiator. If no additional information is given then this property will be empty.

A mapping from string key to a list of strings, used in the Metadata property. To emulate a simple string → string hash table one should have exactly one member in the value string list. This property is an a{sas} primarily because this maps easily to XEP-0004 Data Forms, and allows more structured metadata than a{ss} would. (For instance, a list of RDF triples could be expressed as one long array of strings, or as three-element values for a series of dummy key names, rather than as one big string blob.) While it might be convenient for applications to allow keys of arbitrary types, the added convenience would be outweighed by having to define the XMPP representation
telepathy-qt-0.9.3/spec/Connection_Interface_Contact_List.xml0000644000175200001440000014601112000056607026620 0ustar00collabora-develusers00000000000000 Copyright © 2009-2010 Collabora Ltd. Copyright © 2009 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API)

An interface for connections that have any concept of a list of known contacts (roster, buddy list, friends list etc.)

On many protocols, there's a server-side roster (as in XMPP), or a set of server-side lists that can be combined to form a roster (as in MSN).

In some protocols (like link-local XMPP), while there might not be any server or roster, it's possible to list "nearby" contacts.

In Telepathy 0.20 and older, we represented contact lists as a collection of ContactList channels. This is remarkably difficult to work with in practice - every client that cares about contact lists has to take the union of some hard-to-define set of these channels - and conflicts with the idea that channels that cannot be dispatched to a handler should be closed.

The list of contacts is not exposed as a D-Bus property; it can be fetched using GetContactListAttributes.

In some protocols, such as XMPP, the contact list may not be available immediately. The GetContactListAttributes method will fail until the contact list is available. Using a method also allows extra attributes to be retrieved at the same time.

The progress made in retrieving the contact list. The connection has not started to retrieve the contact list. If GetContactListAttributes is called in this state, it will raise NotYet. The connection has started to retrieve the contact list, but has not yet succeeded or failed. If GetContactListAttributes is called in this state, it will raise NotYet.

The connection has tried and failed to retrieve the contact list. If GetContactListAttributes is called in this state, it will immediately raise an error indicating the reason for failure.

The connection manager SHOULD try again to obtain the contact list, if appropriate for the protocol. If it succeeds later, the ContactListState MUST advance to Success.

The connection has successfully retrieved the contact list. If GetContactListAttributes is called in this state, it will return successfully.
The progress made in retrieving the contact list. Change notification is via ContactListStateChanged. Emitted when ContactListState changes. The new value of ContactListState.

Return some contact attributes for a list of contacts associated with the user. This list MUST include at least:

  • all contacts whose subscribe attribute is not No
  • all contacts whose publish attribute is not No

but MAY contain other contacts.

For instance, on XMPP, all contacts on the roster would appear here even if they have subscription="none", unless there's reason to believe the user does not want to see them (such as having been blocked).

This list does not need to contain every visible contact: for instance, contacts seen in XMPP or IRC chatrooms SHOULD NOT appear here. Blocked contacts SHOULD NOT appear here, unless they still have a non-No subscribe or publish attribute for some reason.

It's reasonable to assume that blocked contacts should not be visible to the user unless they specifically go looking for them, at least in protocols like XMPP where blocking a contact suppresses presence.

A list of strings indicating which D-Bus interfaces the calling process is interested in. Equivalent to the corresponding argument to GetContactAttributes, except that if this list does not contain the ContactList interface itself, it is treated as though that interface was also requested.

If true, all handles that appear as keys in the result have been held on behalf of the calling process, as if by a call to Connection.HoldHandles. (If HasImmortalHandles is true, which SHOULD be the case in all new connection managers, this has no effect.)

A dictionary mapping the contact handles to contact attributes, equivalent to the result of GetContactAttributes.

The ContactListState is None or Waiting. In particular, this error is raised if the Status is not yet Connection_Status_Connected.

An enumeration indicating whether presence subscription is denied, denied but pending permission, or allowed. The exact semantics vary according to where this type is used: see the subscribe and publish contact attributes for details.

The presence subscription state is unknown. Presence information cannot be seen, and either the subscription state Removed_Remotely does not apply, or it is not known whether that state applies. Presence information cannot be seen because the remote contact took action: either the local user's request to see the remote contact's presence was denied, or the remote contact requested to see the local user's presence but then cancelled their request. Presence information cannot be seen. Permission to see presence information has been requested, and the request has not yet been declined or accepted. Presence information can be seen.

If this attribute on a contact is Yes, this connection can expect to receive their presence, along with any other information that has the same access control.

This is subscription="from" or subscription="both" in XMPP, the "forward list" on MSN, or the contact being "added to the local user's buddy list" in ICQ, for example.

If this attribute is not Yes, the local user cannot generally expect to receive presence from this contact. Their presence status as returned by GetPresences is likely to be (Unknown, "unknown", ""), unless the local user can temporarily see their presence for some other reason (for instance, on XMPP, contacts seen in chatrooms will temporarily have available presence).

If this attribute is Ask, this indicates that the local user has asked to receive the contact's presence at some time. It is implementation-dependent whether contacts' subscribe attributes can remain set to Ask, or are reset to No, when the connection disconnects.

Some protocols store the fact that we wishes to see a contact's presence; on these protocols, this attribute can remain Ask indefinitely. On other protocols, only contacts who have been asked during the current session will ever have Ask status.

If this attribute is Removed_Remotely, this indicates that the local user has asked to receive the contact's presence at some time, but the remote contact has rejected that request, and a local user interface has not yet acknowledged this. It is implementation-dependent whether contacts' subscribe attributes can remain set to Removed_Remotely, or are reset to No, when the connection disconnects.

After notifying the user, user interfaces MAY acknowledge a change to subscribe=Removed_Remotely by calling either Unsubscribe or RemoveContacts, which will set subscribe to No (and perhaps remove the contact). This allows user interfaces to detect that the user has been notified about the rejected request.

This attribute's value will be Unknown or omitted until the ContactListState has changed to Success.

If this attribute on a contact is Yes, the local user's presence is published to that contact, along with any other information that shares an access-control mechanism with presence (depending on protocol, server configuration and/or user configuration, this may include avatars, "rich presence" such as location, etc.).

This is subscription="to" or subscription="both" in XMPP, the "reverse list" on MSN, or the state of "being added to the contact's buddy list" in ICQ, for example.

If this attribute is not Yes, the local user's presence is not published to that contact; however, if it is Ask, the contact has requested that the local user's presence is made available to them.

It is implementation-dependent whether contacts' publish attributes can remain set to Ask, or are reset to No, when the connection disconnects.

Some protocols store the fact that a contact wishes to see our presence; on these protocols, this attribute can remain Ask indefinitely. On other protocols, only contacts who have asked during the current session will ever have Ask status.

If this attribute is Removed_Remotely, this indicates that the remote contact has asked to receive the user's presence at some time, but has then cancelled that request before a response was given by the local user. User interfaces MAY reset publish from Removed_Remotely to No, by calling either Unpublish or RemoveContacts.

If multiple factors affect whether a contact can receive the local user's presence, this attribute SHOULD reflect the overall result. For instance, an XMPP contact with subscription="to" or subscription="both", but who has been blocked via XEP-0016 Privacy Lists, SHOULD have publish=No.

This attribute's value will be Unknown or omitted until the ContactListState has changed to Success.

If the publish attribute is Ask, an optional message that was sent by the contact asking to receive the local user's presence; omitted if none was given.

If the contact asking to receive our presence is also using Telepathy, this is the message they supplied as the Message argument to RequestSubscription.

Otherwise, this SHOULD be omitted.

This attribute will also be omitted until the ContactListState has changed to Success.

If true, presence subscriptions (in both directions) on this connection are stored by the server or other infrastructure.

XMPP, MSN, ICQ, etc. all behave like this.

If false, presence subscriptions on this connection are not stored.

In SIMPLE (SIP), clients are expected to keep a record of subscriptions, as described below. In link-local XMPP, subscriptions are implicit (everyone on the local network receives presence from everyone else) so nothing is ever stored.

If CanChangeContactList is true, Telepathy clients (e.g. user interfaces or address books) MAY keep a record of permission to publish and requests to subscribe locally, and attempt to restore it for each Connection. If ContactListPersists is false, clients MAY do this for all contacts; if ContactListPersists is true, clients SHOULD NOT change the state of contacts that were not changed locally.

In SIMPLE (SIP), ContactListPersists is false, but CanChangeContactList is true. Presence will not be received unless clients renew any subscriptions they have for each connection, in the way described. There is no server-side storage, so clients have no alternative but to maintain independent contact lists.

In protocols like XMPP and MSN, it may be useful for clients to queue up subscription requests or removals made while offline and process them next time the connection is online. However, clients should only replay the changes, rather than resetting the contact list to match a stored copy, to avoid overwriting changes that were made on the server.

Clients that replay requests like this SHOULD do so by calling AuthorizePublication to pre-approve publication of presence to the appropriate contacts, followed by RequestSubscription to request the appropriate contacts' presences.

This property cannot change after the connection has moved to the Connected state. Until then, its value is undefined, and it may change at any time, without notification.

Values of this enumeration indicate the extent to which metadata such as aliases and group memberships can be stored for the contacts on a particular connection.

On some protocols, certain metadata (for instance, contact aliases) can only be stored for contacts on the contact list, or contacts with a particular contact list state.

To make it easier to deal with such protocols, if clients set metadata on a contact who is not in the required state, the Connection MUST cache the metadata for the duration of the session. If clients request the attributes of that contact after the appropriate "set" method has returned successfully, the Connection MUST return the new (cached) value.

If the contact is later placed in the required state to store metadata (for instance, if subscription to the contact's presence is requested, on a protocol like MSN where the alias has storage type Subscribed_Or_Pending), the connection MUST store the cached metadata at that time.

If the Connection didn't cache changes in this way, a client intending to change the alias on MSN would have to wait until the server acknowledged the subscription request; in the meantime, other clients would still display the old alias.

The only exception to that general rule is that if the Connection cannot store particular metadata at all (i.e. the storage type is None), it MUST reject attempts to set it.

If the implementation knows that metadata can't be stored at all, it's useful to report that, which can be done synchronously. In general, user interfaces should detect storage type None and not display editing controls at all.

This connection cannot store this type of metadata at all, and attempting to do so will fail with NotImplemented.

Link-local XMPP can't store aliases or group memberships at all, and subscription and presence states are implicit (all contacts on the local network have subscribe = publish = Yes and no other contacts exist).

As of April 2010, the XMPP server for Facebook Chat provides a read-only view of the user's Facebook contacts, so it could also usefully have this storage type.

This type of metadata can only be stored permanently for contacts whose subscribe attribute is Ask or Yes.

Contact aliases and groups on MSN have this behaviour.

This type of metadata can only be stored permanently for contacts whose subscribe attribute is Yes.

No service with this behaviour is currently known, but it's a stricter form of Subscribed_Or_Pending.

The user can set this metadata for any valid contact identifier, whether or not they have any presence subscription relationship to it, and it will be stored on their contact list.

Contact aliases and groups on XMPP have this behaviour; it is possible to put a contact in a group, or assign an alias to them, without requesting that presence be shared.

A single contact's subscribe, publish and publish-request attributes. The new value of the contact's "subscribe" attribute. The new value of the contact's "publish" attribute. The new value of the contact's "publish-request" attribute, or the empty string if that attribute would be omitted. A map from contacts to their subscribe, publish and publish-request attributes. The contact's handle. The contact's subscribe, publish and publish-request attributes.

Emitted when the contact list becomes available, when contacts' basic stored properties change, when new contacts are added to the list that would be returned by GetContactListAttributes, or when contacts are removed from that list.

This provides change notification for that list, and for contacts' subscribe, publish and publish-request attributes.

Connection managers SHOULD also emit this signal when a contact requests that the user's presence is published to them, even if that contact's publish attribute is already Ask and the publish-request has not changed.

If the same contact sends 10 identical requests, 10 identical signals should be emitted.

The new subscribe, publish and publish-request attributes of all the contacts that have been added, and all the contacts for which those attributes have changed. The identifiers of the contacts in the Changes map. The contacts that have been removed from the list that would be returned by GetContactListAttributes. This also implies that they have subscribe = No and publish = No; contacts MUST NOT be listed both here and in Changes.
Connection managers MUST still emit this signal, but clients SHOULD listen for the ContactsChangedWithID signal in addition, and ignore this signal after ContactsChangedWithID has been emitted at least once.

Emitted immediately after ContactsChangedWithID, under the same circumstances.

If clients receive this signal without first receiving a corresponding ContactsChangedWithID, they MUST assume that only this signal will be emitted.

The same as the corresponding argument to ContactsChangedWithID. The same as the corresponding argument to ContactsChangedWithID, except that it only includes handles and not identifiers.

If true, presence subscription and publication can be changed using the RequestSubscription, AuthorizePublication and RemoveContacts methods.

If false, all of those methods will always fail; they SHOULD raise the error org.freedesktop.Telepathy.Error.NotImplemented.

In XEP-0174 "Serverless Messaging" (link-local XMPP), presence is implicitly published to everyone in the local subnet, so the user cannot control their presence publication.

This property cannot change after the connection has moved to the Connected state. Until then, its value is undefined, and it may change at any time, without notification.

Request that the given contacts allow the local user to subscribe to their presence, i.e. that their subscribe attribute becomes Yes.

Connection managers SHOULD NOT attempt to enforce a mutual-subscription policy (i.e. when this method is called, they should not automatically allow the contacts to see the local user's presence). User interfaces that require mutual subscription MAY call AuthorizePublication at the same time as this method.

Whether to enforce mutual subscription is a matter of policy, so it is left to the user interface and/or the server.

Before calling this method on a connection where GetAliasFlags returns the User_Set flag, user interfaces SHOULD obtain, from the user, an alias to identify the contact in future, and store it using SetAliases.

The user MAY be prompted using the contact's current self-assigned nickname, or something derived from the contact's (presumably self-assigned) identifier, as a default, but these names chosen by the contact SHOULD NOT be used without user approval.

This is a generalization of XEP-0165 "Best Practices to Discourage JID Mimicking") to protocols other than XMPP. A reasonable user interface for this, as used in many XMPP clients, is to have a text entry for the alias adjacent to the text entry for the identifier to add.

For contacts with subscribe=Yes, this method has no effect. It MUST return successfully if all contacts are in this state.

For contacts with subscribe=Ask, this method SHOULD send a new request, with the given message, if allowed by the underlying protocol.

For contacts with subscribe=No or subscribe=Rejected, this method SHOULD request that the contact allows the local user to subscribe to their presence; in general, this will change their publish attribute to Ask (although it could change directly to Yes in some situations).

Any state changes that immediately result from this request MUST be signalled via ContactsChanged before this method returns.

This makes it easy for user interfaces to see what practical effect this method had.

If the remote contact accepts the request, their subscribe attribute will later change from Ask to Yes.

If the remote contact explicitly rejects the request (in protocols that allow this), their subscribe attribute will later change from Ask to Rejected.

If the subscription request is cancelled by the local user, the contact's subscribe attribute will change from Ask to No.

This method SHOULD NOT be called until the ContactListState changes to Success. If the ContactListState changes to Failure, this method SHOULD raise the same error as GetContactListAttributes.

One or more contacts to whom requests are to be sent.

An optional plain-text message from the user, to send to those contacts with the subscription request. The RequestUsesMessage property indicates whether this message will be used or ignored.

Clients SHOULD NOT send a non-empty message without first giving the user an opportunity to edit it.

These messages are typically presented to the remote contact as if the user had typed them, so as a minimum, the user should be allowed to see what the UI will be saying on their behalf.

Connections where this message is not useful MUST still allow it to be non-empty.

The ContactListState is None or Waiting. It was not possible to perform the requested action, because CanChangeContactList is false.

If true, the Message parameter to RequestSubscription is likely to be significant, and user interfaces SHOULD prompt the user for a message to send with the request; a message such as "I would like to add you to my contact list", translated into the local user's language, might make a suitable default.

This matches user expectations in XMPP and ICQ, for instance.

If false, the parameter is ignored; user interfaces SHOULD avoid prompting the user, and SHOULD pass an empty string to RequestSubscription.

FIXME: is there any such protocol?

If true, the contact list is automatically downloaded at connection. If false, the contact list is only downloaded when requested explicitely with Download.

Downloading the contact list uses bandwidth and is not always necessary or desired. For example, a client could cache the contact list from previous connections and accept less regular updates, it could get the contact list from an out-of-band protocol-specific way, or it could not need the contact list at all.

Connection managers MUST default to true.

If a connection manager starts supporting this property but defaults to false, it would break all existing clients that don't call Download.

For each of the given contacts, request that the local user's presence is sent to that contact, i.e. that their publish attribute becomes Yes.

Connection managers SHOULD NOT attempt to enforce a mutual-subscription policy (i.e. when this method is called, they should not automatically request that the contacts allow the user to subscribe to their presence). User interfaces that require mutual subscription MAY call RequestSubscription at the same time as this method.

Whether to enforce mutual subscription is a matter of policy, so it is left to the user interface and/or the server.

For contacts with publish=Yes, this method has no effect; it MUST return successfully if all contacts given have this state.

For contacts with publish=Ask, this method accepts the contact's request to see the local user's presence, changing their publish attribute from Ask to Yes.

For contacts with publish=No, if the protocol allows it, this method allows the contacts to see the local user's presence even though they have not requested it, changing their publish attribute from No to Yes. Otherwise, it merely records the fact that presence publication to those contacts is allowed; if any of those contacts ask to receive the local user's presence later in the lifetime of the connection, the connection SHOULD immediately allow them to do so, changing their publish attribute directly from No to Yes.

This makes it easy to implement the common UI policy that if the user attempts to subscribe to a contact's presence, requests for reciprocal subscription are automatically approved.

Any state changes that immediately result from this request MUST be signalled via ContactsChanged before this method returns.

This makes it easy for user interfaces to see what practical effect this method had.

This method SHOULD NOT be called until the ContactListState changes to Success. If the ContactListState changes to Failure, this method SHOULD raise the same error as GetContactListAttributes.

One or more contacts to authorize.

It was not possible to perform the requested action, because CanChangeContactList is false. The ContactListState is None or Waiting.

Remove the given contacts from the contact list entirely. It is protocol-dependent whether this works, and under which circumstances.

If possible, this method SHOULD set the contacts' subscribe and publish attributes to No, remove any stored aliases for those contacts, and remove the contacts from the result of GetContactListAttributes.

This method SHOULD succeed even if it was not possible to carry out the request entirely or for all contacts (for instance, if there is an outstanding request to subscribe to the contact's presence, and it's not possible to cancel such requests). However, all signals that immediately result from this method call MUST be emitted before it returns, so that clients can interpret the result.

User interfaces removing a contact from the contact list are unlikely to want spurious failure notifications resulting from limitations of a particular protocol. However, emitting the signals first means that if a client does want to check exactly what happened, it can wait for the method to return (while applying change-notification signals to its local cache of the contact list's state), then consult its local cache of the contact list's state to see whether the contact is still there.

This method SHOULD NOT be called until the ContactListState changes to Success. If the ContactListState changes to Failure, this method SHOULD raise the same error as GetContactListAttributes.

One or more contacts to remove.

It was not possible to perform the requested action because CanChangeContactList is false. The ContactListState is None or Waiting.

Attempt to set the given contacts' subscribe attribute to No, i.e. stop receiving their presence.

For contacts with subscribe=Ask, this attempts to cancel an earlier request to subscribe to the contact's presence; for contacts with subscribe=Yes, this attempts to unsubscribe from the contact's presence.

As with RemoveContacts, this method SHOULD succeed even if it was not possible to carry out the request entirely or for all contacts; however, all signals that immediately result from this method call MUST be emitted before it returns.

This method SHOULD NOT be called until the ContactListState changes to Success. If the ContactListState changes to Failure, this method SHOULD raise the same error as GetContactListAttributes.

One or more contacts to remove.

It was not possible to perform the requested action because CanChangeContactList is false.

Attempt to set the given contacts' publish attribute to No, i.e. stop sending presence to them.

For contacts with publish=Ask, this method explicitly rejects the contact's request to subscribe to the user's presence; for contacts with publish=Yes, this method attempts to prevent the user's presence from being received by the contact.

As with RemoveContacts, this method SHOULD succeed even if it was not possible to carry out the request entirely or for all contacts; however, all signals that immediately result from this method call MUST be emitted before it returns.

This method SHOULD NOT be called until the ContactListState changes to Success. If the ContactListState changes to Failure, this method SHOULD raise the same error as GetContactListAttributes.

One or more contacts to remove.

It was not possible to perform the requested action because CanChangeContactList is false. The ContactListState is None or Waiting.

Download the contact list from the server. If DownloadAtConnection is true, Download does nothing.

telepathy-qt-0.9.3/spec/Channel_Type_Room_List.xml0000644000175200001440000001712612000056607024437 0ustar00collabora-develusers00000000000000 Copyright © 2005-2009 Collabora Limited Copyright © 2005-2009 Nokia Corporation Copyright © 2006 INdT

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

For protocols with a concept of chatrooms on multiple servers with different DNS names (like XMPP), the DNS name of the server whose rooms are listed by this channel, e.g. "conference.jabber.org". Otherwise, the empty string.

This property cannot change during the lifetime of the channel.

A boolean indicating if room listing is in progress Check to see if there is already a room list request in progress on this channel. An array of structs containing:
  • an integer room handle
  • a string representing the D-Bus interface name of the channel type
  • a dictionary mapping string keys to variant boxed information

Emitted when information about rooms on the server becomes available. The array contains the room handle (as can be passed to the RequestChannel method with HANDLE_TYPE_ROOM), the channel type, and a dictionary containing further information about the room as available. The following well-known keys and types are recommended for use where appropriate:

handle-name (s)
The identifier of the room (as would be returned by InspectHandles)
name (s)
The human-readable name of the room if different from the handle
description (s)
A description of the room's overall purpose
subject (s)
The current subject of conversation in the room (as would be returned by getting the string part of the Subject property)
members (u)
The number of members in the room
password (b)
True if the room requires a password to enter
invite-only (b)
True if you cannot join the room, but must be invited
room-id (s)
The human-readable identifier of a chat room (as would be returned by getting the RoomName property)
server (s)
The DNS name of the server hosting these channels (as would be returned by getting the Server property)
Request the list of rooms from the server. The ListingRooms (True) signal should be emitted when this request is being processed, GotRooms when any room information is received, and ListingRooms (False) when the request is complete. Stop the room listing if it's in progress, but don't close the channel. The ListingRooms (False) signal should be emitted when the listing stops. A boolean indicating if room listing is in progress Emitted to indicate whether or not room listing request is currently in progress.

A channel type for listing named channels available on the server. Once the ListRooms method is called, it emits signals for rooms present on the server, until you Close this channel. In some cases, it may not be possible to stop the deluge of information from the server. This channel should be closed when the room information is no longer being displayed, so that the room handles can be freed.

This channel type may be implemented as a singleton on some protocols, so clients should be prepared for the eventuality that they are given a channel that is already in the middle of listing channels. The ListingRooms signal, or GetListingRooms method, can be used to check this.

telepathy-qt-0.9.3/spec/Call_Content_Codec_Offer.xml0000644000175200001440000000663312000056607024663 0ustar00collabora-develusers00000000000000 Copyright © 2009-2010 Collabora Ltd. Copyright © 2009-2010 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(draft 1) This object represents an offer of a Codec payload mapping. The local codec mapping to send to the remote contacts and to use in the Content.DRAFT. Accept the updated Codec mapping and update the local mapping. The codecs given as the argument are invalid in some way. Reject the proposed update to the codecs FIXME add error codes and strings here

Extra interfaces provided by this codec offer. This SHOULD NOT include the CodecOffer interface itself, and cannot change once the content has been created.

A list of codecs the remote contact supports. The contact handle that this codec offer applies to.
telepathy-qt-0.9.3/spec/Connection_Interface_Resources.xml0000644000175200001440000002166312000056607026211 0ustar00collabora-develusers00000000000000 Copyright © 2010 Collabora Ltd.

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(draft 1)

An interface on connections to show contact attributes for specific resources of a contact, if the protocol supports multiple resources. Resources are most common in XMPP, hence the name of this interface, but they are also present in MSN, where they are called points of presence.

When a client requests some attribute of a contact using its handle on the connection, the CM uses an algorithm to choose the most appropriate resource for the job. If there is only one resource, then the choice is obvious. If, however, there is more than one resource connected at any one time, the CM either aggregates all appropriate information to return (in the case of capabilities), or chooses one specific resource (in the case of presence).

Resources in XMPP have names, and it can be extremely useful for the user to be able to know which resources of a contact are online, providing the names are human-readable. Before now, resources have not been exposed in Telepathy, but this interface attempts to change this.

When using this interface, it is a little like using the Contacts interface, but only resource-specific attributes are ever returned. The resource-specific contact attributes are decided on by the CM, but XMPP's are listed below:

  • SimplePresence/presence
  • ContactCapabilities/capabilities
  • ClientTypes/client-types
Return the resource information of the given contacts. If any of the contact attributes for specific resources of the given contacts' are not known return immediately without waiting for a reply. The contacts whose resource attributes should be returned.

The contacts' resources and the contact attributes specific to each resource. If contact attributes are not immediately known, the behaviour is defined by the interface; the attribute should either be omitted from the result or replaced with a default value.

For every contact handle passed into this method, it is guaranteed that there will be a key in the returned map that corresponds to said handle. If there is no information regarding the contact the resource information map will be empty.

The resource string is never human-readable. The resource string might be human-readable.

Whether the resources returned from GetResources are human readable or not.

If the connection manager knows that all resource names are automatically generated, then the resource strings mean nothing to the user. Showing these strings in the UI would be confusing, so by setting this to Resources_Human_Readability_Never, the UI is advised not to show resources.

If on the other hand, all resources are set to nice names (such as "office" or "home") then it might be wise to expose these strings in the UI, so this property would be set to Resources_Human_Readability_Maybe. This is the case in XMPP -- most resources are set in a way that the user can deduce some information from them. The absence of an Always enum value is because in the case of XMPP, the resource string could be partially human-readable (as on Google Talk, where a resource of "home" is changed by the server to a unique string like "home_1234fdec") or not at all human-readable.

Emitted when a contact has a resource added or removed, or any contact attribute for any resource changes. The contact. The contact's resource information. All resource information is given, not just the details which have changed. A map of a contact's resources to their resource-specific information.

The name of the resource.

A map of contact attributes whose data is specific to this resource.
Mapping returned by GetResources, representing a collection of Contacts, their resources, and their resource-specific contact attributes. A contact. A map of the contact's resources to their resource-specific information.

The same mapping that would be returned by GetResources for this contact.

telepathy-qt-0.9.3/spec/generic-types.xml0000644000175200001440000002155212000056607022653 0ustar00collabora-develusers00000000000000 An unsigned 32-bit integer representing time as the number of seconds elapsed since the Unix epoch (1970-01-01T00:00:00Z) An signed 64-bit integer representing time as the number of seconds elapsed since the Unix epoch (1970-01-01T00:00:00Z); negative for times before the epoch The Text interface is the only user of Unix_Timestamp so far, and we'd like to be Y2038 compatible in future interfaces. A string representing a D-Bus bus name - either a well-known name like "org.freedesktop.Telepathy.MissionControl" or a unique name like ":1.123" A string representing a D-Bus well-known name like "org.freedesktop.Telepathy.MissionControl". A string representing a D-Bus unique name, such as ":1.123" An ASCII string representing a D-Bus interface - two or more elements separated by dots, where each element is a non-empty string of ASCII letters, digits and underscores, not starting with a digit. The maximum total length is 255 characters. For example, "org.freedesktop.DBus.Peer". An ASCII string representing a D-Bus error. This is syntactically the same as a DBus_Interface, but the meaning is different. A string representing a D-Bus signature (the 'g' type isn't used because of poor interoperability, particularly with dbus-glib) An ASCII string representing a D-Bus method, signal or property name - a non-empty string of ASCII letters, digits and underscores, not starting with a digit, with a maximum length of 255 characters. For example, "Ping". A string representing the full name of a D-Bus method, signal or property, consisting of a DBus_Interface, followed by a dot, followed by a DBus_Member. For example, "org.freedesktop.DBus.Peer.Ping". A mapping from strings representing D-Bus properties (by their namespaced names) to their values. A D-Bus interface name, followed by a dot and a D-Bus property name. The value of the property. A mapping from strings to variants representing extra key-value pairs. A mapping from strings to strings representing extra key-value pairs. An IP address and port. Either a dotted-quad IPv4 address literal as for Socket_Address_IPv4, or an RFC2373 IPv6 address as for Socket_Address_IPv6. The TCP or UDP port number. An IPv4 address and port. A dotted-quad IPv4 address literal: four ASCII decimal numbers, each between 0 and 255 inclusive, e.g. "192.168.0.1". The TCP or UDP port number. An IPv6 address and port. An IPv6 address literal as specified by RFC2373 section 2.2, e.g. "2001:DB8::8:800:200C:4171". The TCP or UDP port number. An IPv4 network or subnet. A dotted-quad IPv4 address literal: four ASCII decimal numbers, each between 0 and 255 inclusive, e.g. "192.168.0.1". The number of leading bits of the address that must match, for this netmask to be considered to match an address. An IPv6 network or subnet. An IPv6 address literal as specified by RFC2373 section 2.2, e.g. "2001:DB8::8:800:200C:4171". The number of leading bits of the address that must match, for this netmask to be considered to match an address.

The time at which an user action occurred. This type has the 2 following special values:

0: the action doesn't involve any user action. Clients SHOULD avoid stealing focus when presenting the channel.

MAX_INT64: clients SHOULD behave as though the user action happened at the current time, e.g. a client MAY request that its window gains focus.

This can be used by clients that can't know the X server time like command line applications for example.

For all the other values it corresponds to the time of the user action. Clients SHOULD use this for focus-stealing prevention, if applicable. Note that the time is dependant on the local environment and so is not necessarily a wall-clock time. For example in an X environment it's expected to be the X timestamp of events. This corresponds to the _NET_WM_USER_TIME property in EWMH.

A mapping from object path to the immutable properties of the object. The object path of an object The immutable properties of the object A language tag as defined in IETF BCP 47, such as "en_US".
telepathy-qt-0.9.3/spec/Connection_Interface_Contact_Info.xml0000644000175200001440000005764512000056607026616 0ustar00collabora-develusers00000000000000 Copyright (C) 2008 Collabora Limited 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API) The name of the field; this is the lowercased name of a vCard field. For example, a field representing a contact's address would be named "adr".

A list of vCard type parameters applicable to this field, with their values. The type parameter names, and any values that are case-insensitive in vCard, MUST be in lower case. For example, a contact's preferred home address would have parameters 'type=home' and 'type=pref'.

The type parameter 'type' is likely to be the most common, but there can be others, such as 'language=en'.

Characters which are required to be escaped in vCard type parameters should not be escaped in this list. For instance, a field "X-FOO;SEMICOLON=\;:bar" in a vCard would become ('x-foo', ['semicolon=;'], ['bar']) in this interface.

This avoids Telepathy UIs having to understand the escaping and unescaping rules for vCards. The type parameter name is not allowed (by RFC 2425) to contain an '=' character, so no ambiguity is introduced.

For unstructured vCard fields (such as 'fn', a formatted name field), a single-element array containing the field's value.

For structured fields (such as 'adr', an address field), an array corresponding to the semicolon-separated elements of the field (with empty strings for empty elements).

A vCard field with multiple comma-separated values, such as 'nickname', should be represented by several Contact_Info_Fields.

Characters which are required to be escaped in vCard values, such as semi-colons and newlines, should not be escaped in this list (e.g. if a value contains a newline, the data passed over D-Bus should contain a literal newline character).

An earlier draft of this interface split structured vCard fields into multiple Telepathy-level fields; for example, 'n' became 'family-name', 'given-name', etc. But under this representation, omitting empty components leads to difficulty identifying where one name ends and another begins. Consider the fields ['given-name', 'honorific-suffixes', 'family-name', 'honorific-prefixes']: does this represent two 'n' fields, or one with incorrect component ordering?

Represents one piece of information about a contact, as modelled by a single vCard field. Of the fields defined in RFC 2426, common examples include:

fn
The contact's full name, formatted to their liking
n
The contact's full name, divided into five parts: family name, given name, additional names, honorific prefixes, and honorific suffixes
org
The contact's organisation, divided into the organization's name possibly followed by one or more organizational unit names.
adr
A street address for the contact, divided into seven components: post office box, extended address, street address, locality (e.g., city), region (e.g., state or province), the postal code, and the country name.
label
A free-form street address for the contact, formatted as a single value (with embedded newlines where necessary) suitable for printing on an address label
tel
A telephone number for the contact.
email
An email address for the contact.

For example, the following vCard:

   BEGIN:vCard
   VERSION:3.0
   FN:Wee Ninja
   N;LANGUAGE=ja:Ninja;Wee;;;-san
   ORG:Collabora, Ltd.;Management Division;Human Resources\; Company Policy Enforcement
   ADR;TYPE=WORK,POSTAL,PARCEL:;;11 Kings Parade;Cambridge;Cambridgeshire
    ;CB2 1SJ;UK
   LABEL;TYPE=WORK,POSTAL,PARCEL:11 Kings Parade\nCambridge\nCambridgeshire\nUK\nCB2 1SJ
   TEL;TYPE=VOICE,WORK:+44 1223 362967, +44 7700 900753
   EMAIL;TYPE=INTERNET,PREF:wee.ninja@collabora.co.uk
   EMAIL;TYPE=INTERNET:wee.ninja@example.com
   URL:http://www.thinkgeek.com/geektoys/plush/8823/
   NICKNAME:HR Ninja,Enforcement Ninja
   END:vCard

would be represented by (in Python-like syntax):

[
  ('fn', [], ['Wee Ninja']),
  ('n', ['language=ja'], ['Ninja', 'Wee', '', '', '-san']),
  ('org', [], ['Collabora, Ltd.', 'Management Division',
    'Human Resources; Company Policy Enforcement']),
  ('adr', ['type=work','type=postal','type=parcel'],
   ['','','11 Kings Parade','Cambridge', 'Cambridgeshire','CB2 1SJ','UK']),
  ('label', ['type=work','type=postal','type=parcel'],
   ['''11 Kings Parade
  Cambridge
  Cambridgeshire
  UK
  CB2 1SJ''']),
  ('tel', ['type=voice','type=work'], ['+44 1223 362967']),
  ('tel', ['type=voice','type=work'], ['+44 7700 900753']),
  ('email', ['type=internet','type=pref'], ['wee.ninja@collabora.co.uk']),
  ('email', ['type=internet'], ['wee.ninja@example.com']),
  ('url', [], ['http://www.thinkgeek.com/geektoys/plush/8823/']),
  ('nickname', [], ['HR Ninja']),
  ('nickname', [], ['Enforcement Ninja'])
]
A dictionary whose keys are contact handles and whose values are contact information.. An integer handle for the contact whose info has changed. An array of fields representing information about this contact. Emitted when a contact's information has changed or been received for the first time on this connection. An array of handles representing contacts. A dictionary mapping contact handles to information, whose keys are the subset of the requested list of handles for which information was cached. Request information on several contacts at once. This SHOULD only return cached information, omitting handles for which no information is cached from the returned map. Integer handles for contacts. Retrieve information for the given contact, requesting it from the network if an up-to-date version is not cached locally. This method SHOULD return immediately, emitting ContactInfoChanged when the contacts' updated contact information is returned. This method allows a client with cached contact information to update its cache after a number of days. An integer handle for a contact. Information about that contact. Retrieve information for a contact, requesting it from the network if it is not cached locally. This method is appropriate for an explicit user request to show a contact's information; it allows a UI to wait for the contact info to be returned. The contact's information could not be retrieved. Set new contact information for this connection, replacing existing information. This method is only suppported if ContactInfoFlags contains Can_Set, and may only be passed fields conforming to SupportedFields. The new information to be set. Setting your own information is not supported on this protocol. The supplied fields do not match the restrictions specified by SupportedFields. Flags defining the behaviour of contact information on this protocol. Some protocols provide no information on contacts without an explicit request; others always push information to the connection manager as and when it changes. Indicates that SetContactInfo is supported on this connection. Indicates that the protocol pushes all contacts' information to the connection manager without prompting. If set, ContactInfoChanged will be emitted whenever contacts' information changes. A string naming a field in a vCard, such as "fn" or "adr". Although these are case-insensitive in RFC 2425, in Telepathy they MUST be normalized to lower case. In the terminology of RFC 2425 this is called a "type name", and corresponds to the "name" production given in the ABNF. A type parameter as defined by RFC 2426, such as "type=cell" or "language=en".

An integer representing the bitwise-OR of flags on this connection.

This property MAY change, without change notification, at any time before the connection moves to status Connection_Status_Connected. It MUST NOT change after that point.

Some XMPP servers, like Facebook Chat, do not allow the vCard to be changed (and so would not have the Can_Set flag). Whether the user's server is one of these cannot necessarily be detected until quite late in the connection process.

A struct describing a vCard field, with parameters, that may be passed to SetContactInfo on this Connection. A vCard field name, such as 'tel'. The set of vCard type parameters which may be set on this field. If this list is empty and the Contact_Info_Field_Flag_Parameters_Exact flag is not set, any vCard type parameters may be used. Flags describing the behaviour of this field. Maximum number of instances of this field which may be set. MAXUINT32 is used to indicate that there is no limit.

A list of field specifications describing the kinds of fields which may be passed to SetContactInfo. The empty list indicates that arbitrary vCard fields are permitted. This property SHOULD be the empty list, and be ignored by clients, if ContactInfoFlags does not contain the Can_Set flag.

For example, a protocol in which arbitrary vCards were stored as-is would set this property to the empty list. A protocol whose notion of contact information is one each of personal phone number, mobile phone number, location, email address and date of birth, with no attributes allowed on each piece of information, would set this property to (in Python-like syntax):

[
  ('tel', ['type=home'], Parameters_Exact, 1),
  ('tel', ['type=cell'], Parameters_Exact, 1),
  ('adr', [], Parameters_Exact, 1),
  ('bday', [], Parameters_Exact, 1),
  ('email', ['type=internet'], Parameters_Exact, 1),
]

A protocol which allows users to specify up to four phone numbers, which may be labelled as personal and/or mobile, would set this property to [ ('tel', ['type=home', 'type=cell'], 0, 4), ].

Studying existing IM protocols shows that in practice protocols allow either a very restricted set of fields (such as MSN, which seems to correspond roughly to the largest example above), or something mapping 1:1 to a large subset of vCard (such as XMPP's XEP-0054).

This property MAY change, without change notification, at any time before the connection moves to status Connection_Status_Connected. It MUST NOT change after that point.

Some XMPP servers, like Google Talk, only allow a small subset of the "vcard-temp" protocol. Whether the user's server is one of these cannot be detected until quite late in the connection process.

Flags describing the behaviour of a vCard field.

If present, exactly the parameters indicated must be set on this field; in the case of an empty list of parameters, this implies that parameters may not be used.

If absent, and the list of allowed parameters is non-empty, any (possibly empty) subset of that list may be used.

If absent, and the list of allowed parameters is empty, any parameters may be used.

Indicates that this field will be overwritten when the user's alias is changed with SetAliases or when the Account's Nickname is updated. Clients that allow the editing of the Alias and the ContactInfo in the same location should hide fields with this flag.

If a client allowed the user to edit both the nickname and the ContactInfo field at the same time, the user could set them to two different values even though they map to the same property. This would result in surprising behavior where the second value would win over the first.

In addition to hiding this field when editing ContactInfo together with the user's nickname, it is recommended that clients call SetContactInfo before setting the user's nickname.

This ensures that if the user changes the nickname, the correct value will get set even if the stale nickname is mistakenly sent along with SetContactInfo.

If used, this flag typically appears on either the 'nickname' or 'fn' field.

An interface for requesting information about a contact on a given connection. Information is represented as a list of Contact_Info_Fields forming a structured representation of a vCard (as defined by RFC 2426), using field names and semantics defined therein.

On some protocols, information about your contacts is pushed to you, with change notification; on others, like XMPP, the client must explicitly request the avatar, and has no way to tell whether it has changed without retrieving it in its entirety. This distinction is exposed by ContactInfoFlags containing the Push flag.

On protocols with the Push flag set, UIs can connect to ContactInfoChanged, call GetContactInfo once at login for the set of contacts they are interested in, and then be sure they will receive the latest contact info. On protocols like XMPP, clients can do the same, but will receive (at most) opportunistic updates if the info is retrieved for other reasons. Clients may call RequestContactInfo or RefreshContactInfo to force a contact's info to be updated, but MUST NOT do so unless this is either in response to direct user action, or to refresh their own cache after a number of days.

We don't want clients to accidentally cause a ridiculous amount of network traffic.

The same value that would be returned by GetContactInfo for this contact. Omitted from the result if the contact's info is not known.

telepathy-qt-0.9.3/spec/Account_Interface_External_Password_Storage.xml0000644000175200001440000000500712000056607030656 0ustar00collabora-develusers00000000000000 Copyright © 2011 Collabora Ltd.

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(draft 1)

An interface for Accounts whose passwords are stored externally and SHOULD NOT be stored by either the AccountManager nor any ServerAuthentication handler.

This interface SHOULD only appear on accounts for which the related Connection Manager implements ConnectionManager.Interface.AccountStorage.DRAFT.

Clears any saved password associated with this account.

Indicates whether the account has a saved password or not.

Change notification for this property is provided by the standard D-Bus PropertiesChanged signal.

telepathy-qt-0.9.3/spec/Channel.xml0000644000175200001440000006454212000056607021453 0ustar00collabora-develusers00000000000000 Copyright © 2005-2009 Collabora Limited Copyright © 2005-2009 Nokia Corporation Copyright © 2006 INdT

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

The channel's type. This cannot change once the channel has been created.

For compatibility between older connection managers and newer clients, if this is unavailable or is an empty string, clients MUST use the result of calling GetChannelType.

The GetAll method lets clients retrieve all properties in one round-trip, which is desirable.

When requesting a channel, the request MUST specify a channel type, and the request MUST fail if the specified channel type cannot be supplied.

Common sense.

Extra interfaces provided by this channel. This SHOULD NOT include the channel type and the Channel interface itself, and cannot change once the channel has been created.

For compatibility between older connection managers and newer clients, if this is unavailable, or if this is an empty list and ChannelType is an empty string, clients MUST use the result of calling GetInterfaces instead. If this is an empty list but ChannelType is non-empty, clients SHOULD NOT call GetInterfaces; this implies that connection managers that implement the ChannelType property MUST also implement the Interfaces property correctly.

The GetAll method lets clients retrieve all properties in one round-trip, which is desirable.

When requesting a channel with a particular value for this property, the request must fail without side-effects unless the connection manager expects to be able to provide a channel whose interfaces include at least the interfaces requested.

The handle (a representation for the identifier) of the contact, chatroom, etc. with which this handle communicates. Its type is given by the TargetHandleType property.

This is fixed for the lifetime of the channel, so channels which could potentially be used to communicate with multiple contacts, and do not have an identity of their own (such as a Handle_Type_Room handle), must have TargetHandleType set to Handle_Type_None and TargetHandle set to 0.

Unlike in the telepathy-spec 0.16 API, there is no particular uniqueness guarantee - there can be many channels with the same (channel type, handle type, handle) tuple. This is necessary to support conversation threads in XMPP and SIP, for example.

If this is present in a channel request, it must be nonzero, TargetHandleType MUST be present and not Handle_Type_None, and TargetID MUST NOT be present. Properties from Addressing1 MUST NOT be present.

The channel that satisfies the request MUST either:

  • have the specified TargetHandle property; or
  • have TargetHandleType = Handle_Type_None, TargetHandle = 0, and be configured such that it could communicate with the specified handle in some other way (e.g. have the requested contact handle in its Group interface)

The string that would result from inspecting the TargetHandle property (i.e. the identifier in the IM protocol of the contact, room, etc. with which this channel communicates), or the empty string if the TargetHandle is 0.

The presence of this property avoids the following race condition:

  • New channel C is signalled with target handle T
  • Client calls InspectHandles(CONTACT, [T])
  • Channel C closes, removing the last reference to handle T
  • InspectHandles(CONTACT, [T]) returns an error

If this is present in a channel request, TargetHandleType MUST be present and not Handle_Type_None, and TargetHandle MUST NOT be present. Properties from Addressing1 MUST NOT be present.The request MUST fail with error InvalidHandle, without side-effects, if the requested TargetID would not be accepted by RequestHandles.

The returned channel must be related to the handle corresponding to the given identifier, in the same way as if TargetHandle had been part of the request instead.

Requesting channels with a string identifier saves a round-trip (the call to RequestHandles). It also allows the channel dispatcher to accept a channel request for an account that is not yet connected (and thus has no valid handles), bring the account online, and pass on the same parameters to the new connection's CreateChannel method.

The type of TargetHandle.

If this is omitted from a channel request, connection managers SHOULD treat this as equivalent to Handle_Type_None.

If this is omitted or is Handle_Type_None, TargetHandle and TargetID MUST be omitted from the request.

Request that the channel be closed. This is not the case until the Closed signal has been emitted, and depending on the connection manager this may simply remove you from the channel on the server, rather than causing it to stop existing entirely. Some channels such as contact list channels may not be closed. This channel may never be closed, e.g. a contact list This channel is not currently in a state where it can be closed, e.g. a non-empty user-defined contact group Emitted when the channel has been closed. Method calls on the channel are no longer valid after this signal has been emitted, and the connection manager may then remove the object from the bus at any point. Use the ChannelType property if possible. The interface name Returns the interface name for the type of this channel. Clients SHOULD use the ChannelType property instead, falling back to this method only if necessary. The GetAll method lets clients retrieve all properties in one round-trip. Use the TargetHandleType and TargetHandle properties if possible. The same as TargetHandleType. The same as TargetHandle. Returns the handle type and number if this channel represents a communication with a particular contact, room or server-stored list, or zero if it is transient and defined only by its contents. Clients SHOULD use the TargetHandle and TargetHandleType properties instead, falling back to this method only if necessary. The GetAll method lets clients retrieve all properties in one round-trip. Use the Interfaces property if possible. An array of the D-Bus interface names Get the optional interfaces implemented by the channel. Clients SHOULD use the Interfaces property instead, falling back to this method only if necessary. The GetAll method lets clients retrieve all properties in one round-trip. (as stable API)

True if this channel was created in response to a local request, such as a call to Connection.RequestChannel or Connection.Interface.Requests.CreateChannel.

The idea of this property is to distinguish between "incoming" and "outgoing" channels, in a way that doesn't break down when considering special cases like contact lists that are automatically created on connection to the server, or chatrooms that an IRC proxy/bouncer like irssi-proxy or bip was already in.

The reason we want to make that distinction is that UIs for things that the user explicitly requested should start up automatically, whereas for incoming messages and VoIP calls we should first ask the user whether they want to open the messaging UI or accept the call.

If the channel was not explicitly requested (even if it was created as a side-effect of a call to one of those functions, e.g. because joining a Tube in a MUC context on XMPP implies joining that MUC), then this property is false.

For compatibility with older connection managers, clients SHOULD assume that this property is true if they see a channel announced by the Connection.NewChannel signal with the suppress_handler parameter set to true.

In a correct connection manager, the only way to get such a channel is to request it.

Clients MAY additionally assume that this property is false if they see a channel announced by the NewChannel signal with the suppress_handler parameter set to false.

This is more controversial, since it's possible to get that parameter set to false by requesting a channel. However, there's no good reason to do so, and we've deprecated this practice.

In the particular case of the channel dispatcher, the only side-effect of wrongly thinking a channel is unrequested is likely to be that the user has to confirm that they want to use it, so it seems fairly harmless to assume in the channel dispatcher that channels with suppress_handler false are indeed unrequested.

It does not make sense for this property to be in channel requests—it will always be true for channels returned by CreateChannel, and callers of EnsureChannel cannot control whether an existing channel was originally requested locally—so it MUST NOT be accepted.

(as stable API)

The contact who initiated the channel; for instance, the contact who invited the local user to a chatroom, or the contact who initiated a call.

This does not necessarily represent the contact who created the underlying protocol-level construct. For instance, if Rob creates a chatroom, Will joins that chatroom, and Will invites Simon to join it, then Simon will see Will as the InitiatorHandle of the channel representing the chatroom.

The room creator is generally a less useful piece of information than the inviter, is less likely to be available at invitation time (i.e. can't necessarily be an immutable property), and is less likely to be available at all. The creator of a chatroom is not currently available via Telepathy; if added in future, it is likely to be made available as a property on the Chatroom interface (bug 23151).

For channels requested by the local user, this MUST be the value of Connection.SelfHandle at the time the channel was created (i.e. not a channel-specific handle).

On some protocols, the SelfHandle may change (as signalled by Connection.SelfHandleChanged), but this property is immutable. Hence, locally-requested channels' InitiatorHandle and InitiatorID may not match the current SelfHandle; Requested can be used to determine whether the channel was created locally.

For channels requested by a remote user, this MUST be their handle. If unavailable or not applicable, this MUST be 0 (for instance, contact lists are not really initiated by anyone in particular, and it's easy to imagine a protocol where chatroom invitations can be anonymous).

For channels with the Group interface, this SHOULD be the same contact who is signalled as the "Actor" causing the self-handle to be placed in the local-pending set.

This SHOULD NOT be a channel-specific handle, if possible.

It does not make sense for this property to be in channel requests - the initiator will always be the local user - so it MUST NOT be accepted.

(as stable API)

The string that would result from inspecting the InitiatorHandle property (i.e. the initiator's identifier in the IM protocol).

The presence of this property avoids the following race condition:

  • New StreamedMedia channel C is signalled with initiator handle I
  • Client calls InspectHandles(CONTACT, [I])
  • Channel C closes, removing the last reference to handle I
  • InspectHandles(CONTACT, [I]) returns an error
  • Client can indicate that a call was missed, but not who called!

It does not make sense for this property to be in channel requests - the initiator will always be the local user - so it MUST NOT be accepted.

All communication in the Telepathy framework is carried out via channel objects which are created and managed by connections. This interface must be implemented by all channel objects, along with one single channel type, such as Channel.Type.ContactList which represents a list of people (such as a buddy list) or Channel.Type.Text which represents a channel over which textual messages are sent and received.

Each Channel's object path MUST start with the object path of its associated Connection, followed by '/'. There MAY be any number of additional object-path components, which clients MUST NOT attempt to parse.

This ensures that Channel object paths are unique, even between Connections and CMs, because Connection object paths are guaranteed-unique via their link to the well-known bus name.

If all connection managers in use are known to comply with at least spec version 0.17.10, then the Connection's object path can even be determined from the Channel's without any additional information, by taking the first 7 components.

Each channel has a number of immutable properties (which cannot vary after the channel has been announced with NewChannels), provided to clients in the ObserveChannels, AddDispatchOperation and HandleChannels methods to permit immediate identification of the channel. This interface contains immutable properties common to all channels. In brief:

  • ChannelType specifies the kind of communication carried out on this channel;
  • TargetHandleType, TargetHandle and TargetID specify the entity with which this channel communicates, such as the other party in a 1-1 call, or the name of a multi-user chat room;
  • InitiatorHandle and InitiatorID specify who created this channel;
  • Requested indicates whether the local user requested this channel, or whether it is an incoming call, a text conversation started by a remote contact, a chatroom invitation, etc.

Other optional Interfaces can be implemented to indicate other available functionality, such as Channel.Interface.Group if the channel contains a number of contacts, Channel.Interface.Password to indicate that a channel may have a password set to require entry, and Channel.Interface.ChatState for typing notifications. The interfaces implemented may not vary after the channel has been created. These other interfaces (along with the interface named by ChannelType) may themselves specify immutable properties to be announced up-front along with the properties on this interface.

Some channels are “anonymous”, with TargetHandleType set to None, which indicates that the channel is defined by some other properties. For instance, transient ad-hoc chat rooms may be defined only by their members (as visible through the Group interface), and ContactSearch channels represent a single search attempt for a particular Server.

Specific connection manager implementations may implement channel types and interfaces which are not contained within this specification in order to support further functionality. To aid interoperability between client and connection manager implementations, the interfaces specified here should be used wherever applicable, and new interfaces made protocol-independent wherever possible. Because of the potential for 3rd party interfaces adding methods or signals with conflicting names, the D-Bus interface names should always be used to invoke methods and bind signals.

Previously we guaranteed that, for any handle type other than Handle_Type_None, and for any channel type and any handle, there would be no more than one channel with that combination of channel type, handle type and handle. This guarantee has now been removed in order to accommodate features like message threads. Previously we did not explicitly guarantee that Channels' object paths had the Connection's object path as a prefix.
telepathy-qt-0.9.3/spec/Channel_Interface_Room.xml0000644000175200001440000004427112000056607024424 0ustar00collabora-develusers00000000000000 Copyright © 2010 Collabora Ltd. Copyright © 2010 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(version 2)

Different IM protocols use a variety of ways to name chat rooms. The simplest example is perhaps IRC, where chat rooms have short, persistent, human-readable string names, and are generally global across the network. Skype chat rooms have persistent string names, so you can leave and re-join a room, but these names are opaque unique identifiers. MSN chat rooms are unnamed, and you can only join one by being invited. And XMPP wins the coveted “most complicated chat rooms” prize: chat rooms may be hosted by different servers with different DNS names; normally they have human-readable names, except that all MUCs on Google Talk's conference server have UUIDs as names, and XEP-0045 §10.1.4 Requesting a Unique Room Name defines a protocol for requesting a unique, opaque room name on the server. Note that this interface is not restricted to Text channels, and can also be used on Call channels.

This interface intends to support and differentiate these mechanisms more clearly than the TargetHandleType and TargetID properties can alone. It initially contains a pair of properties used to represent the human-readable parts of a Room_Handle's identifier, if any. The above examples for different protocols are represented as follows:

  • The IRC channel #telepathy on Freenode is represented by a channel with properties TargetHandleType = Room, TargetID = "#telepathy", RoomName = "#telepathy", Server = "", indicating that the room has a human-readable identifier, and is not confined to a particular server on the network. Actually, IRC supports creating “local” channels specific to the server they are created on. These channels have identifiers starting with & rather than #. These could be represented by setting Server appropriately.
  • A Skype group chat with opaque identifier 0xdeadbeef has TargetHandleType = Room, TargetID = "0xdeadbeef", RoomName = "", Server = "", indicating that the room has an identifier but no human-readable name.
  • An MSN group chat has TargetHandleType = None, RoomName = "", Server = "", indicating that the room has neither an identifier (so it cannot be re-joined later) nor a human-readable name.
  • A standard Jabber multi-user chat jdev@conference.jabber.org has TargetHandleType = Room, TargetID = "jdev@conference.jabber.org", RoomName = "jdev", Server = "conference.jabber.org".
  • A Google Talk private MUC private-chat-11111x1x-11xx-111x-1111-111x1xx11x11@groupchat.google.com has TargetHandleType = Room, TargetID = "private-chat-11111x1x-11xx-111x-1111-111x1xx11x11@groupchat.google.com", RoomName = "", Server = "groupchat.google.com", indicating that the room has a persistent identifier, no human-readable name, and is hosted by a particular server.
  • Similarly, a XEP-0045 §10.1.4 uniquely-named room lrcgsnthzvwm@conference.jabber.org has TargetHandleType = Room, TargetID = "lrcgsnthzvwm@conference.jabber.org", RoomName = "", Server = "conference.jabber.org", indicating that the room has a persistent identifier, no human-readable name, and is hosted by a particular server.

Requestable channel classes

If the connection supports joining text chat rooms by unique identifier, like Skype, it should advertise a Requestable_Channel_Class matching:

( Fixed = { ...ChannelType: ...Text,
            ...TargetHandleType: Room,
          },
  Allowed = [ ...TargetID,
              ...TargetHandle,
            ]
)

Channel requests must specify either TargetID or TargetHandle.

If, like IRC, the room identifiers are also human-readable, the RCCs should also include RoomName in Allowed_Properties:

( Fixed = { ...ChannelType: ...Text,
            ...TargetHandleType: Room,
          },
  Allowed = [ ...TargetID,
              ...TargetHandle,
              ...RoomName
            ]
),

( Fixed = { ...ChannelType: ...Text
          },
  Allowed = [ ...RoomName,
            ]
)

Requests may specify the RoomName in place of TargetID or TargetHandle . Note how RoomName appears in Allowed_Properties of a different RCC because when TargetHandleType is omitted (or is None), both TargetHandle and TargetID must also be omitted. RoomName is allowed in conjuction with TargetID or TargetHandle in some situations, as explained below in the Requesting room channels section.

If rooms may be on different servers, Server should also be included in the allowed properties, but CMs MUST use a reasonable default Server if not explicitly specified in a channel request. The CM's default server MAY be configurable by a connection parameter specified on a RequestConnection call, similarly to how the fallback conference server is specified on jabber connections in gabble.

If the protocol supports unnamed rooms, RoomName should be fixed to the empty string, and TargetHandleType should be None:

( Fixed = { ...ChannelType: ...Text,
            ...TargetHandleType: None,
            ...RoomName: "",
          },
  Allowed = [ ]
)

Requesting room channels

When explicitly joining a room, the CM cannot know whether the room ID is unique or not. As a result, if this is the case, adding an empty string RoomName into the channel request will ensure the CM knows. For example:

{ ...ChannelType: ...Text,
  ...TargetHandleType: Room,
  ...TargetID: "qwerasdfzxcv@conference.jabber.org",
  ...RoomName: ""
}

If RoomName features in Allowed_Properties then the only value allowed in conjunction with TargetID or TargetHandle is the empty string. Requests with conflicting TargetID and RoomName properties will fail with InvalidArgument.

To create a XEP-0045 §10.1.4 uniquely-named room channel on the conference.jabber.org server, then the following channel request should be made:

{ ...ChannelType: ...Text,
  ...RoomName: ""
  ...Server: "conference.jabber.org"
}

If everything is successful, then when the channel request is satisfied, a new channel will appear with the following properties:

{ ...ChannelType: ...Text,
  ...TargetHandleType: Room,
  ...TargetID: "kajsdhkajshdfjkshdfjkhs@conference.jabber.org",
  ...RoomName: ""
  ...Server: "conference.jabber.org"
}

The CM will have received the unique room name (kajsdhkajshdfjkshdfjkhs) and then created a room with such a name on the said server. The empty RoomName property shows that the room name is not human-readable.

The human-readable identifier of a chat room. Note that if non-empty, this property (and perhaps also Server) should be sufficient in a channel request to join the room. XMPP MUCs have a room name concept which is more like a topic, except more persistent. This D-Bus property is not this XMPP room name, but the bit before the @ in the room jid; see RoomConfig1.Title for that concept.

This property cannot change during the lifetime of the channel. It should appear in the Allowed_Properties of a Requestable_Channel_Class for the connection if rooms on this connection have human-readable names, and can be joined by name.

For protocols with a concept of chatrooms on multiple servers with different DNS names (like XMPP), the DNS name of the server hosting this channel (for example, "conference.jabber.org" or "groupchat.google.com"). For other protocols, the empty string.

This property cannot change during the lifetime of the channel. It should appear in the Allowed_Properties of a Requestable_Channel_Class for the connection if and only if non-empty values are supported.

The normalized contact ID representing who created the room; or the empty string if unknown. The handle corresponding to Creator; or 0 if Creator is unknown. A unix timestamp indicating when the room was created; or INT_MAX64 if unknown.
telepathy-qt-0.9.3/spec/Channel_Type_Streamed_Media.xml0000644000175200001440000012014312000056607025365 0ustar00collabora-develusers00000000000000 Copyright © 2005-2009 Collabora Limited Copyright © 2005-2009 Nokia Corporation Copyright © 2006 INdT

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

An audio stream A video stream The stream is disconnected. The stream is trying to connect. The stream is connected. Media are not being sent or received Media are being sent, but not received Media are being received, but not sent Media are being sent and received The local user has been asked to send media by the remote user. Call RequestStreamDirection to indicate whether or not this is acceptable. The remote user has been asked to send media by the local user. The StreamDirectionChanged signal will be emitted when the remote user accepts or rejects this change.

An unsigned integer identifying a stream within a channel.

An array of structs containing:
  • the stream identifier
  • the contact handle who the stream is with (or 0 if the stream represents more than a single member)
  • the type of the stream
  • the current stream state
  • the current direction of the stream
  • the current pending send flags
Returns an array of structs representing the streams currently active within this channel. Each stream is identified by an unsigned integer which is unique for each stream within the channel.
An array of stream identifiers (as defined in ListStreams)

Request that the given streams are removed. If all streams are removed, the channel MAY close.

Clients SHOULD NOT attempt to terminate calls by removing all the streams; instead, clients SHOULD terminate calls by removing the Group.SelfHandle from the channel, using either RemoveMembers or RemoveMembersWithReason.

A stream identifier is unknown
The stream identifier (as defined in ListStreams) The desired stream direction (a value of MediaStreamDirection)

Request a change in the direction of an existing stream. In particular, this might be useful to stop sending media of a particular type, or inform the peer that you are no longer using media that is being sent to you.

Depending on the protocol, streams which are no longer sending in either direction should be removed and a StreamRemoved signal emitted. Some direction changes can be enforced locally (for example, BIDIRECTIONAL -> RECEIVE can be achieved by merely stopping sending), others may not be possible on some protocols, and some need agreement from the remote end. In this case, the MEDIA_STREAM_PENDING_REMOTE_SEND flag will be set in the StreamDirectionChanged signal, and the signal emitted again without the flag to indicate the resulting direction when the remote end has accepted or rejected the change.

A stream identifier is unknown The requested direction is not available on this stream
A contact handle with whom to establish the streams An array of stream types (values of MediaStreamType) An array of structs (in the same order as the given stream types) containing:
  • the stream identifier
  • the contact handle who the stream is with (or 0 if the stream represents more than a single member)
  • the type of the stream
  • the current stream state
  • the current direction of the stream
  • the current pending send flags

Request that streams be established to exchange the given types of media with the given member. In general this will try and establish a bidirectional stream, but on some protocols it may not be possible to indicate to the peer that you would like to receive media, so a send-only stream will be created initially. In the cases where the stream requires remote agreement (eg you wish to receive media from them), the StreamDirectionChanged signal will be emitted with the MEDIA_STREAM_PENDING_REMOTE_SEND flag set, and the signal emitted again with the flag cleared when the remote end has replied.

If streams of the requested types already exist, calling this method results in the creation of additional streams. Accordingly, clients wishing to have exactly one audio stream or exactly one video stream SHOULD check for the current streams using ListStreams before calling this method.

It is valid to use a handle which is neither a current nor pending member in this channel's Group interface. If so, that handle will be added to the remote-pending set only when an attempt has actually been made to contact them. For further call-state notification, use the CallState interface, if supported. This usage was not allowed in spec versions below 0.17.2.

A stream type given is invalid. A stream type given is not implemented by the connection manager. Since 0.17.23, connection managers SHOULD raise this error in preference to InvalidArgument. Connection managers can't know whether an unknown number is a valid stream type that was introduced in a later spec version. That contact's client does not implement one of the given stream types. For this method, clients SHOULD consider this error and NotCapable to be equivalent. That contact's client does not implement one of the given stream types. Since 0.17.23, connection managers SHOULD raise this in preference to NotAvailable.
The stream identifier (as defined in ListStreams) The contact handle who the stream is with (or 0 if it represents more than a single member) The stream type (a value from MediaStreamType)

Emitted when a new stream has been added to this channel. Clients SHOULD assume that the stream's Media_Stream_State is initially Disconnected.

If a connection manager needs to represent the addition of a stream whose state is already Connecting or Connected, it MUST do this by emitting StreamAdded, closely followed by StreamStateChanged indicating a change to the appropriate state.

Historically, it was not clear from the StreamAdded signal what the state of the stream was. telepathy-spec 0.17.22 clarified this.

Similarly, clients SHOULD assume that the initial Media_Stream_Direction of a newly added stream is Receive, and that the initial Media_Stream_Pending_Send is Pending_Local_Send.

If a connection manager needs to represent the addition of a stream whose direction or pending-send differs from those initial values, it MUST do so by emitting StreamAdded, closely followed by StreamDirectionChanged indicating a change to the appropriate direction and pending-send state.

StreamAdded doesn't itself indicate the stream's direction; this is unfortunate, but is preserved for compatibility.

This is the appropriate direction for streams added by a remote contact on existing connection managers, and does not violate user privacy by automatically sending audio or video (audio streams start off muted, video streams start off not sending). For streams added by the local user using the client receiving the signal, the true direction can also be determined from the return value of the RequestStreams method.

Existing clients typically operate by maintaining a separate idea of the directions that they would like the streams to have, and enforcing these intended directions by calling RequestStreamDirection whenever needed.

The stream identifier (as defined in ListStreams) The new stream direction (as defined in ListStreams) The new pending send flags (as defined in ListStreams)

Emitted when the direction or pending flags of a stream are changed.

If the MEDIA_STREAM_PENDING_LOCAL_SEND flag is set, the remote user has requested that we begin sending on this stream. RequestStreamDirection should be called to indicate whether or not this change is acceptable.

This allows for a MSN-style user interface, "Fred has asked you to enable your webcam. (Accept | Reject)", if desired.

The stream identifier (as defined in ListStreams) A stream error number, one of the values of MediaStreamError A string describing the error (for debugging purposes only) Emitted when a stream encounters an error. stream_id - the stream identifier (as defined in ListStreams) Emitted when a stream has been removed from this channel. The stream identifier (as defined in ListStreams) The new stream state (as defined in ListStreams) Emitted when a member's stream's state changes.

If set to true in a channel request that will create a new channel, the connection manager should immediately attempt to establish an audio stream to the remote contact, making it unnecessary for the client to call RequestStreams.

If this property, or InitialVideo, is passed to EnsureChannel (as opposed to CreateChannel), the connection manager SHOULD ignore these properties when checking whether it can return an existing channel as suitable; these properties only become significant when the connection manager has decided to create a new channel.

If true on a requested channel, this indicates that the audio stream has already been requested and the client does not need to call RequestStreams, although it MAY still do so.

If true on an unrequested (incoming) channel, this indicates that the remote contact initially requested an audio stream; this does not imply that that audio stream is still active (as indicated by ListStreams).

This property is immutable (cannot change), and therefore SHOULD appear wherever immutable properties are reported, e.g. NewChannels signals.

This reduces D-Bus round trips.

Connection managers capable of signalling audio calls to contacts SHOULD include a channel class in RequestableChannelClasses with ChannelType = StreamedMedia and TargetHandleType = Contact in the fixed properties dictionary, and InitialAudio (and also InitialVideo, if applicable) in the allowed properties list. Clients wishing to discover whether a connection manager can signal audio and/or video calls SHOULD use this information.

Not all protocols support signalling video calls, and it would be possible (although unlikely) to have a protocol where only video, and not audio, could be signalled.

Connection managers that support the ContactCapabilities interface SHOULD represent the capabilities of receiving audio and/or video calls by including a channel class in a contact's capabilities with ChannelType = StreamedMedia in the fixed properties dictionary, and InitialAudio and/or InitialVideo in the allowed properties list. Clients wishing to discover whether a particular contact is likely to be able to receive audio and/or video calls SHOULD use this information.

Not all clients support video calls, and it would also be possible (although unlikely) to have a client which could only stream video, not audio.

Clients that are willing to receive audio and/or video calls SHOULD include the following among their channel classes if calling UpdateCapabilities (clients of a ChannelDispatcher SHOULD instead arrange for the ChannelDispatcher to do this, by including the filters in their HandlerChannelFilter properties):

  • { ChannelType = StreamedMedia }
  • { ChannelType = StreamedMedia, InitialAudio = true } if receiving calls with audio is supported
  • { ChannelType = StreamedMedia, InitialVideo = true } if receiving calls with video is supported

Connection managers for protocols with capability discovery, like XMPP, need this information to advertise the appropriate capabilities for their protocol.

The same as InitialAudio, but for a video stream. This property is immutable (cannot change).

In particular, note that if this property is false, this does not imply that an active video stream has not been added, only that no video stream was active at the time the channel appeared.

This property is the correct way to discover whether connection managers, contacts etc. support video calls; it appears in capabilities structures in the same way as InitialAudio.

If True, once streams have been requested for this channel (either by setting InitialAudio or InitialVideo when the channel is requested, or by calling RequestStreams on a channel with no streams), a stream of a different content type cannot be added; subsequent calls to RequestStreams that attempt to do so will fail.

If this property is missing, clients SHOULD assume that it is false, and thus that the channel's streams can be changed once the call has started.

If this property is present in the "allowed" set in all of the StreamedMedia entries in a contact's capabilities, then user interfaces MAY choose to show a separate "call" option for each class of call.

For example, once an audio-only Google Talk call has started, it is not possible to add a video stream; both audio and video must be requested at the start of the call if video is desired. User interfaces may use this pseudo-capability as a hint to display separate "Audio call" and "Video call" buttons, rather than a single "Call" button with the option to add and remove video once the call has started for contacts without this flag.

This property is immutable, and therefore SHOULD be announced in NewChannels, etc.

A channel that can send and receive streamed media such as audio or video. Provides a number of methods for listing and requesting new streams, and signals to indicate when streams have been added, removed and changed status. The state of the call (ringing remotely, ringing locally, answered, missed, etc.) are represented using the properties and signals of the Group interface.

In general this should be used in conjunction with the MediaSignalling interface to exchange connection candidates and codec choices with whichever component is responsible for the streams. However, in certain applications where no candidate exchange is necessary (eg the streams are handled by specialised hardware which is controlled directly by the connection manager), the signalling interface can be omitted and this channel type used simply to control the streams.

Outgoing calls

To make an audio-only call to a contact foo@example.com, clients should call:

CreateChannel({
  ChannelType: StreamedMedia,
  TargetHandleType: Contact,
  TargetID: 'foo@example.com',
  InitialAudio: True,
)

As always, TargetHandle may be used in place of TargetID if the contact's handle is already known. To make an audio-and-video call, the client should also specify InitialVideo. The connection manager SHOULD return a channel whose immutable properties contain the local user as the InitiatorHandle, the remote contact as the TargetHandle, Requested = True (indicating that the call is outgoing); the Group interface should initially have the local user in Members and the remote contact in RemotePendingMembers, to indicate that we are awaiting their response.

The contact answering the call is represented by the CM signalling MembersChanged, moving the remote contact to Members, with the remote contact as the Actor and Reason None. The contact rejecting the call is represented by both contacts being removed from the group, with the remote contact as the Actor and Reason set appropriately. The local user may hang up at any time by calling RemoveMembersWithReason to remove themself, with an appropriate reason; the CM SHOULD relay the reason to the remote contact, and emit MembersChanged removing both contacts from the group with the self handle as the Actor.

(In the past, several other patterns have been used to place outgoing calls; see 'Requesting StreamedMedia Channels' on the Telepathy wiki for the details.)

Incoming calls

Incoming calls' immutable properties should contain TargetHandleType = Contact, both TargetHandle and InitiatorHandle set to the remote contact, Requested = False (indicating that this is an incoming call), and appropriate values of InitialAudio and InitialVideo; the Group interface should initially have the local user in LocalPendingMembers and the remote contact in Members, indicating that the contact is awaiting our response.

To accept the call, use AddMembers to move the local user to the group's members. To reject the call, use RemoveMembersWithReason to remove the local member from the group, with an appropriate reason. If the remote user ends the call before it is answered, this is represented by MembersChanged removing both parties from the group with the remote contact as the Actor, and Reason set appropriately.

Note that the call may end with the self handle as the Actor without the user having chosen to reject the call, as indicated by the nature of the Reason. Specifically, some local component may time out the call (indicating this with reason No_Answer; for example, the CM may have forwarded the call to another number, as configured using Forwarding.DRAFT), or something may have gone wrong with the call (indicated by reason Error). Such calls SHOULD be considered missed, just as if the remote contact had hung up before the local user answered the call.

This is a bit awkward, but these are the best ways we can represent these situations. It's important to document which calls should be considered missed, to ensure that the user can be notified.

When the local user accepts an incoming call, the connection manager SHOULD change the direction of any streams with pending local send to be sending, without altering whether those streams are receiving.

This matches existing practice, and means that a client can answer incoming calls and get an unmuted microphone/activated webcam without having to take additional action to accept the stream directions.

It does, however, introduce a race condition: a client believing that it is accepting an audio-only call by calling AddMembers can inadvertantly accept an audio + video call (and hence activate sending from a webcam without the user's permission) if a video stream is added just before AddMembers is processed. This race should be removed when this specification is revised.

During a call

If ImmutableStreams is False, new streams may be requested using RequestStreams (to add video to an audio-only call, for instance), and existing streams may be removed using RemoveStreams (for example, to downgrade an audio-video call to audio-only). The call may be ended by calling RemoveMembers or RemoveMembersWithReason; the call ending is signalled by the CM emitting MembersChanged, removing both parties from the group.

Handler filters

For historical reasons, handlers must specify more than one filter if they want to correctly advertise support for audio and/or video calls. If they can handle channels using the MediaSignalling interface, they should also advertise various Handler_Capability_Tokens to indicate which codecs and transports they support. See InitialAudio and MediaSignalling/video/h264 for the gory details. In summary:

To advertise support for streamed media in general, include the following filter in HandlerChannelFilter:
{ '...Channel.ChannelType': '...Channel.Type.StreamedMedia' ,
  '...Channel.TargetHandleType': Contact,
}
To advertise support for audio calls, also include the following filter:
{ '...Channel.ChannelType': '...Channel.Type.StreamedMedia' ,
  '...Channel.TargetHandleType': Contact,
  '...Channel.Type.StreamedMedia.InitialAudio': True,
}
To advertise support for video calls, also include the following filter:
{ '...Channel.ChannelType': '...Channel.Type.StreamedMedia' ,
  '...Channel.TargetHandleType': Contact,
  '...Channel.Type.StreamedMedia.InitialVideo': True,
}
If you use telepathy-farsight, and have H.264 support, you probably want these Capabilities:
[ "org.freedesktop.Telepathy.Channel.Interface.MediaSignalling/ice-udp",
  "org.freedesktop.Telepathy.Channel.Interface.MediaSignalling/gtalk-p2p",
  "org.freedesktop.Telepathy.Channel.Interface.MediaSignalling/video/h264",
]
The channel-type-specific capability flags used for Channel.Type.StreamedMedia in the Connection.Interface.Capabilities interface. See the InitialAudio property for details of the mechanisms that will replace this. The handle is capable of using audio streams within a media channel. The handle is capable of using video streams within a media channel. The handle is capable of performing STUN to traverse NATs. The handle is capable of establishing Google Talk peer-to-peer connections (as implemented in libjingle 0.3) to traverse NATs. The handle is capable of establishing ICE UDP peer-to-peer connections (as defined by the IETF MMUSIC working group) to traverse NATs. Channels whose target handle is this contact will have ImmutableStreams = True.
telepathy-qt-0.9.3/spec/Connection_Future.xml0000644000175200001440000001241712000056607023526 0ustar00collabora-develusers00000000000000 Copyright © 2009 Collabora Limited Copyright © 2009 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as a draft) The "primary" interface implemented by an object attached to a connection. For example, a Gabble plugin implementing fine-grained control of XEP-0016 privacy lists might expose an object implementing com.example.PrivacyLists. The object path of the sidecar, exported by the same bus name as the Connection to which it is attached. Immutable properties of the sidecar.

Request an object with a particular interface providing additional connection-specific functionality, together with its immutable properties. These will often be implemented by plug-ins to the connection managers; for example, support for an XMPP XEP for which no generic Telepathy interface exists might be implemented by a Gabble plugin exposing a sidecar with a particular interface.

This method may be called at any point during the lifetime of a connection, even before its Connection_Status changes to Connected. It MAY take a long time to return—perhaps it needs to wait for a connection to be established and for all the services supported by the server to be discovered before determining whether necessary server-side support is available—so callers SHOULD override the default method timeout (25 seconds) with a much higher value (perhaps even MAX_INT32, meaning “no timeout” in recent versions of libdbus).

There is an implicit assumption that any connection manager plugin will only want to export one “primary” object per feature it implements, since there is a one-to-one mapping between interface and object. This is reasonable since Sidecars are (intended to be) analogous to extra interfaces on the connection, providing once-per-connection shared functionality; it also makes client code straightforward (look up the interface you care about in a dictionary, build a proxy object from the value). More “plural” plugins are likely to want to implement new types of Channel instead.

The requested sidecar is not implemented by this connection manager, or a necessary server-side component does not exist. (FIXME: split these two errors out? Then again, once we list the guaranteed and possible sidecars on a Protocol object, clients can tell the difference themselves, because they shouldn't be calling this in the first case.) A server-side component needed by the requested sidecar reported it is currently too busy, or did not respond for some implementation-defined time. The caller may wish to try again later. The connection was disconnected while the sidecar was being set up.
telepathy-qt-0.9.3/spec/Connection_Manager.xml0000644000175200001440000007306112000056607023630 0ustar00collabora-develusers00000000000000 Copyright (C) 2005-2012 Collabora Limited Copyright (C) 2005-2008 Nokia Corporation Copyright (C) 2006 INdT

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

The name of a connection manager, found in its well-known bus name and object path. This must be a non-empty string of ASCII letters, digits and underscores, starting with a letter. This is typically the name of the executable with any "telepathy-" prefix removed, and any hyphen/minus signs replaced by underscores.

Connection manager names SHOULD NOT be the same as the name of the protocol they implement.

This is likely to lead to conflicts between different implementations of the same protocol (or indeed inability to distinguish between the different implementations!). The Telepathy project traditionally uses some sort of pun (Haze is based on libpurple, Salut implements a protocol often called Bonjour, and Wilde implements the OSCAR protocol).

Connection manager names SHOULD NOT be the same as the name of a library on which they are based.

We often abbreviate, for instance, telepathy-haze as “Haze”, but abbreviating telepathy-sofiasip—since renamed to telepathy-rakia for exactly this reason—to “Sofia-SIP” caused confusion between the connection manager and the library it uses. Please don't repeat that mistake.

Prior to version 0.17.1, the allowed characters were not specified

An instant messaging protocol. It must consist only of ASCII letters, digits and hyphen/minus signs (U+002D "-"), and must start with a letter. Where possible, this SHOULD be chosen from the following well-known values:

  • aim - AOL Instant Messenger (OSCAR or TOC)
  • gadugadu - Gadu-Gadu
  • groupwise - Novell Groupwise
  • icq - ICQ (OSCAR)
  • irc - Internet Relay Chat (RFC 1459, 2810-2813)
  • jabber - XMPP (RFC 3920, 3921) or Jabber
  • local-xmpp - Link-local XMPP (XEP-0174) (Bonjour, Salut)
  • msn - MSNP (Windows Live Messenger)
  • myspace - MySpaceIM
  • mxit - MXit
  • napster - Napster
  • qq - Tencent QQ
  • sametime - IBM Lotus Sametime
  • silc - SILC
  • sip - Session Initiation Protocol (SIP), with or without SIMPLE support
  • skype - Skype
  • tel - telephony (the PSTN, including GSM, CDMA and fixed-line telephony)
  • trepia - Trepia
  • yahoo - YMSG (Yahoo! Messenger)
  • yahoojp - Japanese version of YMSG
  • zephyr - Zephyr
Prior to version 0.17.1, the allowed characters were not specified
A struct representing an allowed parameter, as returned by GetParameters on the ConnectionManager interface. A string parameter name A bitwise OR of the parameter flags A string containing the D-Bus type signature for this parameter The default value (if the Has_Default flag is not present, there is no default and this takes some dummy value, which SHOULD be of the appropriate D-Bus type) This parameter is required for connecting to the server. This parameter is required for registering an account on the server. This parameter has a default value, which is returned in GetParameters; not providing this parameter is equivalent to providing the default.

This parameter should be considered private or secret; for instance, clients should store it in a "password safe" like gnome-keyring or kwallet, omit it from debug logs, and use a text input widget that hides the value of the parameter.

(Clients that support older connection managers may also treat any parameter whose name contains "password" as though it had this flag.)

This parameter is also a D-Bus property on the resulting Connection; a parameter named com.example.Duck.Macaroni with this flag corresponds to the Macaroni property on the com.example.Duck interface. Its value can be queried and possibly changed on an existing Connection using methods on the org.freedesktop.DBus.Properties interface.

When a new value for a parameter with this flag is passed to Account.UpdateParameters, the account manager will attempt to update its value on any running connections. Similarly, if the parameter also has the Has_Default flag, and is passed in the second argument to UpdateParameters, the default value will be applied to any running connections. Thus, clients generally do not need to directly access or update the connection property; instead, they SHOULD manipulate Account.Parameters.

This allows runtime-configurable options to be stored and maintained by the AccountManager, without needing to invent a separate account preference for “properties that should be set on the connection as soon as it is created”. It was originally invented to manage Cellular preferences.

The required protocol name An array of structs representing possible parameters. Get a list of the parameters which may be specified in the Parameters of an Account (or, for specialised applications which do not use the account manager, passed to RequestConnection). Some parameters are mandatory, and some parameters only make sense when registering new accounts with the server; see the Param_Spec documentation for more details. The requested protocol is not supported by this manager

A map from protocol identifiers supported by a connection manager to the immutable properties of the corresponding Protocol objects.

A protocol name The immutable properties of the corresponding Protocol object

A map from protocol identifiers supported by this connection manager to the immutable properties of the corresponding Protocol objects.

Providing the immutable properties here means that when the API of Protocol objects has been finalized, most clients will only need one D-Bus round trip to interrogate the ConnectionManager about all its protocols.

If this map is empty or missing, clients SHOULD fall back to calling ListProtocols and GetParameters.

The keys of the Protocols map. Get a list of protocol identifiers that are implemented by this connection manager. The D-Bus service where the connection object can be found The object path of the Connection object on this service The identifier for the protocol this connection uses Emitted when a new Connection object is created. The protocol identifier A dictionary mapping parameter names to values of the appropriate type, as indicated by GetParameters and the well-known list of names and value types documented on the Connection_Parameter_Name type. A D-Bus service name where the new Connection object can be found The D-Bus object path to the Connection on this service

Request a Connection object representing a given account on a given protocol with the given parameters. The method returns the bus name and the object path where the new Connection object can be found, which should have the status of Connection_Status_Disconnected, to allow signal handlers to be attached before connecting is started with the Connect method.

Most applications should not use this method: they should instead use the the Connection property on an Account object obtained from the AccountManager. This method is used internally by the account manager to create connections when needed.

The parameters which must and may be provided in the parameters dictionary can be discovered with the GetParameters method. These parameters, their types, and their default values may be cached in files so that all available connection managers do not need to be started to discover which protocols are available.

To request values for these parameters from the user, a client must have prior knowledge of the meaning of the parameter names, so the well-known names and types defined by the Connection_Parameter_Name type should be used where appropriate.

Connection manager authors SHOULD avoid introducing parameters whose default values would not be serializable in a .manager file.

The same serialization format is used in Mission Control to store accounts.

Every successful RequestConnection call will cause the emission of a NewConnection signal for the same newly created connection. The requester can use the returned object path and service name independently of the emission of that signal. In that case this signal emission is most useful for, e.g. other processes that are monitoring the creation of new connections.

The requested protocol is not supported by this manager The requested connection already appears to exist Unrecognised connection parameters

Well-known connection parameter names, along with their expected type. Where possible, connection managers should use names and types from this list in the Parameters that may be passed to RequestConnection.

account (s)
The identifier for the user's account on the server
server (s)
A fully qualified domain name or numeric IPv4 or IPv6 address. Using the fully-qualified domain name form is recommended whenever possible. If this parameter is specified and the account for that protocol also specifies a server, this parameter should override that in the user id.
port (q)
A TCP or UDP port number. If this parameter is specified and the account for that protocol also specifies a port, this parameter should override that in the account.
password (s)
A password associated with the account.
require-encryption (b)
Require encryption for this connection. A connection should fail to connect if require-encryption is set and an encrypted connection is not possible.
register (b)
This account should be created on the server if it does not already exist.
ident (s)
The local username to report to the server if necessary, such as in IRC.
fullname (s)
The user's full name if the service requires this when authenticating or registering.
stun-server (s)
The IP address or FQDN of a STUN server to use for NAT traversal, without any ":port" suffix.
stun-port (q)
The UDP port number on the stun-server to use for STUN. Only significant if the stun-server is also supplied.
keepalive-interval (u)

The time in seconds between pings sent to the server to ensure that the connection is still alive, or 0 to disable such pings.

This parameter is superseded by the KeepaliveInterval property, which can be updated on an already-established connection as well as being specified when requesting the connection. Clients SHOULD provide that parameter instead, if allowed; new connection managers SHOULD implement it in preference to this one.

The following well-known parameter names correspond to D-Bus properties, and thus their Conn_Mgr_Param_Flags should include DBus_Property. See that flag for more details on this kind of parameter.

A list of the extra interfaces provided by this connection manager (i.e. extra functionality that can be provided even before a connection has been created).

No interfaces suitable for listing in this property are currently defined; it's provided as a hook for possible future functionality.

To be compatible with older connection managers, if retrieving this property fails, clients SHOULD assume that its value is an empty list.

Connection managers with a non-empty list of Interfaces MUST represent them in the .manager file, if they have one, as an Interfaces key in the group headed [ConnectionManager], whose value is a list of strings each followed by a semicolon.

A D-Bus service which allows connections to be created. The manager processes are intended to be started by D-Bus service activation.

For service discovery, each Telepathy connection manager must have a connection manager name (see Connection_Manager_Name for syntax).

The connection manager must then provide a well-known bus name of org.freedesktop.Telepathy.ConnectionManager.cmname where cmname is its connection manager name. If it makes sense to start the connection manager using D-Bus service activation, it must register that well-known name for service activation by installing a .service file.

Clients can list the running connection managers by calling the ListNames method on the D-Bus daemon's org.freedesktop.DBus interface and looking for names matching the above pattern; they can list the activatable connection managers by calling ListActivatableNames, and they should usually combine the two lists to get a complete list of running or activatable connection managers.

When the connection manager is running, it must have an object implementing the ConnectionManager interface at the object path /org/freedesktop/Telepathy/ConnectionManager/cmname.

Connection managers' capabilities can be determined dynamically by calling their ListProtocols method, then for each protocol of interest, calling GetParameters to discover the required and optional parameters. However, since it is inefficient to activate all possible connection managers on the system just to find out what they can do, there is a standard mechanism to store static information about CMs in ".manager files".

To look up a connection manager's supported protocols, clients should search the data directories specified by the freedesktop.org XDG Base Directory Specification ($XDG_DATA_HOME, defaulting to $HOME/.local/share if unset, followed by colon-separated paths from $XDG_DATA_DIRS, defaulting to /usr/local/share:/usr/share if unset) for the first file named telepathy/managers/cmname.manager that can be read without error. This file has the same syntax as a freedesktop.org Desktop Entry file.

Clients must still support connection managers for which no .manager file can be found, which they can do by activating the connection manager and calling its methods; the .manager file is merely an optimization. Connection managers whose list of protocols can change at any time (for instance, via a plugin architecture) should not install a .manager file.

The .manager file SHOULD have a group headed [ConnectionManager], containing a key Interfaces representing Interfaces as a sequence of strings each followed by a semicolon (the "localestrings" type from the Desktop Entry Specification).

The [ConnectionManager] group SHOULD NOT contain keys ObjectPath or BusName. If it does, they MUST be ignored.

The object path and bus name are derivable from the connection manager's name, which is part of the filename, so these keys are redundant. They were required in very old versions of Telepathy.

For each protocol name proto that would be returned by ListProtocols, the .manager file contains a group headed [Protocol proto]. For each parameter p that would be returned by GetParameters(proto), the .manager file contains a key param-p with a value consisting of a D-Bus signature (a single complete type), optionally followed by a space and a space-separated list of flags. The supported flags are:

  • required, corresponding to Conn_Mgr_Param_Flag_Required
  • register, corresponding to Conn_Mgr_Param_Flag_Register
  • secret, corresponding to Conn_Mgr_Param_Flag_Secret
  • dbus-property, corresponding to Conn_Mgr_Param_Flag_DBus_Property

The group may also contain a key default-p whose value is a string form of the default value for the parameter. If this key exists, it sets the default, and also sets the flag Conn_Mgr_Param_Flag_Has_Default. The default value is formatted according to the D-Bus signature as follows:

s (string)
The UTF-8 string, with the standard backslash escape sequences supported by the Desktop Entry Specification (the "localestring" type from the Desktop Entry Specification)
o (object path)
The object path as an ASCII string
b (boolean)
"true" (case-insensitively) or "1" means True, "false" (case-insensitively) or "0" means False; when writing a file, "true" and "false" SHOULD be used
y, q, u, t (8-, 16-, 32-, 64-bit unsigned integer)
ASCII decimal integer
n, i, x (16-, 32-, 64-bit signed integer)
ASCII decimal integer, optionally prefixed with "-"
d (double-precision floating point)
ASCII decimal number
as (array of string), ao (array of object path)
A sequence of UTF-8 strings each followed by a semicolon, with any semicolons they contain escaped with a backslash (the "localestrings" type from the Desktop Entry Specification)

Currently, no other D-Bus signatures are allowed to have default values, but clients parsing the .manager file MUST ignore defaults that they cannot parse, and treat them as if the default-p key was not present at all.

It is not required that a connection manager be able to support multiple protocols, or even multiple connections. When a connection is made, a service name where the connection object can be found is returned. A manager which can only make one connection may then remove itself from its well-known bus name, causing a new connection manager to be activated when somebody attempts to make a new connection.

Prior to version 0.17.2, support for CMs with no .manager file was not explicitly required. Prior to version 0.17.16 the serialization of string arrays (signature 'as') was not defined Prior to version 0.25.2 the serialization of object-path arrays (signature 'ao') was not defined
telepathy-qt-0.9.3/spec/Connection_Interface_Privacy.xml0000644000175200001440000001041512000056607025645 0ustar00collabora-develusers00000000000000 Copyright (C) 2005, 2006 Collabora Limited Copyright (C) 2005, 2006 Nokia Corporation Copyright (C) 2006 INdT

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

A string representing the current privacy mode Return the current privacy mode, which must be one of the values returned by GetPrivacyModes. An array of valid privacy modes for this connection Returns the privacy modes available on this connection. The following well-known names should be used where appropriate:
allow-all
any contact may initiate communication
allow-specified
only contacts on your 'allow' list may initiate communication
allow-subscribed
only contacts on your subscription list may initiate communication
The current privacy mode Emitted when the privacy mode is changed or the value has been initially received from the server. The desired privacy mode Request that the privacy mode be changed to the given value, which must be one of the values returned by GetPrivacyModes. Success is indicated by the method returning and the PrivacyModeChanged signal being emitted. An interface to support getting and setting privacy modes to configure situations such as not being contactable by people who are not on your subscribe list. If this interface is not implemented, the default can be presumed to be allow-all (as defined in GetPrivacyModes).
telepathy-qt-0.9.3/spec/Media_Stream_Handler.xml0000644000175200001440000011104512000056607024061 0ustar00collabora-develusers00000000000000 Copyright (C) 2005-2008 Collabora Limited Copyright (C) 2005-2008 Nokia Corporation Copyright (C) 2006 INdT

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

Handles signalling the information pertaining to a specific media stream. A client should provide information to this handler as and when it is available. Information about a codec supported by a client or a peer's client. The codec's payload identifier, as per RFC 3551 (static or dynamic) The codec's name Type of stream this codec supports Sampling frequency in Hertz Number of supported channels Codec-specific optional parameters The IP addresses of possible STUN servers to use for NAT traversal, as dotted-quad IPv4 address literals or RFC2373 IPv6 address literals. This property cannot change once the stream has been created, so there is no change notification. The IP addresses MUST NOT be given as DNS hostnames. High-quality connection managers already need an asynchronous DNS resolver, so they might as well resolve this name to an IP to make life easier for streaming implementations. True if we were the creator of this stream, false otherwise. This information is needed for some nat traversal mechanisms, such as ICE-UDP, where the creator gets the role of the controlling agent.

The transport (NAT traversal technique) to be used for this stream. Well-known values include:

none
Raw UDP, with or without STUN, should be used. If the STUNServers property is non-empty, STUN SHOULD be used.
stun
A deprecated synonym for 'none'.
gtalk-p2p
Google Talk peer-to-peer connectivity establishment should be used, as implemented in libjingle 0.3.
ice-udp
Interactive Connectivity Establishment should be used, as defined by the IETF MMUSIC working group.
wlm-8.5
The transport used by Windows Live Messenger 8.5 or later, which resembles ICE draft 6, should be used.
wlm-2009
The transport used by Windows Live Messenger 2009 or later, which resembles ICE draft 19, should be used.

This property cannot change once the stream has been created, so there is no change notification.

A list of mappings describing TURN or Google relay servers available for the client to use in its candidate gathering, as determined from the protocol. Map keys are:

ip - s
The IP address of the relay server as a dotted-quad IPv4 address literal or an RFC2373 IPv6 address literal. This MUST NOT be a DNS hostname. High-quality connection managers already need an asynchronous DNS resolver, so they might as well resolve this name to an IP and make life easier for streaming implementations.
type - s

Either udp for UDP (UDP MUST be assumed if this key is omitted), tcp for TCP, or tls.

The precise meaning of this key depends on the NATTraversal property: if NATTraversal is ice-udp, tls means TLS over TCP as referenced by ICE draft 19, and if NATTraversal is gtalk-p2p, tls means a fake SSL session over TCP as implemented by libjingle.

port - q
The UDP or TCP port of the relay server as an ASCII unsigned integer
username - s
The username to use
password - s
The password to use
component - u
The component number to use this relay server for, as an ASCII unsigned integer; if not included, this relay server may be used for any or all components. In ICE draft 6, as used by Google Talk, credentials are only valid once, so each component needs relaying separately.

An equivalent of the gtalk-p2p-relay-token property on MediaSignalling channels is not included here. The connection manager should be responsible for making the necessary HTTP requests to turn the token into a username and password.

The type of relay server that this represents depends on the value of the NATTraversal property. If NATTraversal is ice-udp, this is a TURN server; if NATTraversal is gtalk-p2p, this is a Google relay server; otherwise, the meaning of RelayInfo is undefined.

If relaying is not possible for this stream, the list is empty.

This property cannot change once the stream has been created, so there is no change notification.

String identifier for this candidate Array of transports for this candidate with fields, as defined in NewNativeCandidate Signal emitted when the connection manager wishes to inform the client of a new remote candidate. Signal emitted when the connection manager wishes the stream to be closed. Inform the connection manager of codec used to receive data. ID of error, from the MediaStreamError enumeration String describing the error Inform the connection manager that an error occured in this stream. The connection manager should emit the StreamError signal for the stream on the relevant channel, and remove the stream from the session. An unknown error occured. The end of the stream was reached. This error has no use anywhere. In Farsight 1 times, it was used to indicate a GStreamer EOS (when the end of a file is reached). But since this is for live calls, it makes no sense. There are no common codecs between the local side and the other particpants in the call. The possible codecs are not signalled here: the streaming implementation is assumed to report them in an implementation-dependent way, e.g. Farsight should use GstMissingElement. A network connection for the Media could not be established or was lost. There was an error in the networking stack (other than the connection failure). There are no installed codecs for this media type. The CM is doing something wrong. There was an error in the media processing stack. Informs the connection manager that all possible native candisates have been discovered for the moment. Informs the connection manager that a valid candidate pair has been discovered and streaming is in progress.

Informs the connection manager that a valid transport pair has been discovered and streaming is in progress. Component id MUST be the same for both transports and the pair is only valid for that component.

The connection manager might need to send the details of the active transport pair (e.g. c and o parameters of SDP body need to contain address of selected native RTP transport as stipulated by RFC 5245). However, the candidate ID might not be enough to determine these info if the transport was found after NativeCandidatesPrepared has been called (e.g. peer reflexive ICE candidate).

This method must be called before NewActiveCandidatePair.

This way, connection managers supporting this method can safely ignore subsequent NewActiveCandidatePair call.

Connection managers SHOULD NOT implement this method unless they need to inform the peer about selected transports. As a result, streaming implementations MUST NOT treat errors raised by this method as fatal.

Usually, connection managers only need to do one answer/offer round-trip. However, some protocols give the possibility to to send an updated offer (e.g. ICE defines such mechanism to avoid some race conditions and to properly set the state of gateway devices).

UDP (User Datagram Protocol) TCP (Transmission Control Protocol) String identifier for this candidate Array of transports for this candidate, with fields:
  • component number
  • IP address (as a string)
  • port
  • base network protocol (one of the values of MediaStreamBaseProto)
  • proto subtype (e.g. RTP)
  • proto profile (e.g. AVP)
  • our preference value of this transport (double in range 0.0-1.0 inclusive); 1 signals the most preferred transport
  • transport type, one of the values of MediaStreamTransportType
  • username if authentication is required
  • password if authentication is required
Inform this MediaStreamHandler that a new native transport candidate has been ascertained.
A local address An external address derived by a method such as STUN An external stream relay Locally-supported codecs. Inform the connection manager that a client is ready to handle this StreamHandler. Also provide it with info about all supported codecs. Locally-supported codecs

Used to provide codecs after Ready(), so the media client can go ready for an incoming call and exchange candidates/codecs before knowing what local codecs are available.

This is useful for gatewaying calls between two connection managers. Given an incoming call, you need to call Ready to get the remote codecs before you can use them as the "local" codecs to place the outgoing call, and hence receive the outgoing call's remote codecs to use as the incoming call's "local" codecs.

In this situation, you would pass an empty list of codecs to the incoming call's Ready method, then later call SetLocalCodecs on the incoming call in order to respond to the offer.

String identifier for remote candidate to drop There is no case where you want to release candidates (except for an ICE reset, and there you'd want to replace then all, using SetRemoteCandidateList). Signal emitted when the connection manager wishes to inform the client that the remote end has removed a previously usable candidate. It seemed like a good idea at the time, but wasn't. Emitted by the connection manager to inform the client that a valid candidate pair has been discovered by the remote end and streaming is in progress. A list of candidate id and a list of transports as defined in NewNativeCandidate Signal emitted when the connection manager wishes to inform the client of all the available remote candidates at once. Codecs supported by the remote peer. Signal emitted when the connection manager wishes to inform the client of the codecs supported by the remote end. If these codecs are compatible with the remote codecs, then the client must call SupportedCodecs, otherwise call Error. If emitted with argument TRUE, this means that the connection manager wishes to set the stream playing; this means that the streaming implementation should expect to receive data. If emitted with argument FALSE this signal is basically meaningless and should be ignored. We're very sorry. Signal emitted when the connection manager wishes to set whether or not the stream sends to the remote end. A telephony event code. Request that a telephony event (as defined by RFC 4733) is transmitted over this stream until StopTelephonyEvent is called. A telephony event code as defined by RFC 4733. The payload type to use when sending events. The value 0xFFFFFFFF means to send with the already configured event type instead of using the specified one. Request that a telephony event (as defined by RFC 4733) is transmitted over this stream until StopTelephonyEvent is called. This differs from StartTelephonyEvent in that you force the event to be transmitted as a RFC 4733 named event, not as sound. You can also force a specific Codec ID. A telephony event code as defined by RFC 4733. Request that a telephony event (as defined by RFC 4733) is transmitted over this stream until StopTelephonyEvent is called. This differs from StartTelephonyEvent in that you force the event to be transmitted as sound instead of as a named event. Request that any ongoing telephony events (as defined by RFC 4733) being transmitted over this stream are stopped. Informs the connection manager of the stream's current state, as as specified in Channel.Type.StreamedMedia::ListStreams. Locally supported codecs. Inform the connection manager of the supported codecs for this session. This is called after the connection manager has emitted SetRemoteCodecs to notify what codecs are supported by the peer, and will thus be an intersection of all locally supported codecs (passed to Ready) and those supported by the peer. Locally supported codecs, which SHOULD be the same as were previously in effect, but possibly with different parameters. Inform the connection manager that the parameters of the supported codecs for this session have changed. The connection manager should send the new parameters to the remote contact. This is required for H.264 and Theora, for example.

Emitted when the connection manager wishes to place the stream on hold (so the streaming client should free hardware or software resources) or take the stream off hold (so the streaming client should reacquire the necessary resources).

When placing a channel's streams on hold, the connection manager SHOULD notify the remote contact that this will be done (if appropriate in the protocol) before it emits this signal.

It is assumed that relinquishing a resource will not fail. If it does, the call is probably doomed anyway.

When unholding a channel's streams, the connection manager SHOULD emit this signal and wait for success to be indicated via HoldState before it notifies the remote contact that the channel has been taken off hold.

This means that if a resource is unavailable, the remote contact will never even be told that we tried to acquire it.

If true, the stream is to be placed on hold.
Notify the connection manager that the stream's hold state has been changed successfully in response to SetStreamHeld. If true, the stream is now on hold. Notify the connection manager that an attempt to reacquire the necessary hardware or software resources to unhold the stream, in response to SetStreamHeld, has failed. This struct is also used by Call, but in call, the CM should know about RTP profiles, and never use MAXUINT as a default value, because it complicates things unnecessarily. The minimum interval between two regular RTCP packets in milliseconds for this content. If no special value is desired, one should put MAXUINT (0xFFFFFFFF). Implementors and users of Call's RTCPFeedback should not use the MAXUINT default. Instead, in RTP/AVP, the default should be 5000 (5 seconds). If using the RTP/AVPF profile, it can be set to a lower value, the default being 0. The RTCP feedback messages for this codec. A struct defining an RTCP feedback message. Feedback type, for example "ack", "nack", or "ccm". Feedback subtype, according to the Type, can be an empty string (""), if there is no subtype. For example, generic nack is Type="nack" Subtype="". Feedback parameters as a string. Format is defined in the relevant RFC A map of codec and its feedback properties. Numeric identifier for the codec. This will be used as the PT in the SDP or content description. The RTCP feedback properties for this codec. Remote Feedback messages desired by the remote side Signal emitted when the connection manager wishes to inform the client of the feedback messages supported by the remote end. This signal is emitted before SetRemoteCodecs. If the client supports any of these messages, it must call SupportedFeedbackMessages before calling SupportedCodecs. Locally supported feedback messages. Inform the connection manager of the supported feedback messages for this session. This is called a before calling SupportedCodecs, Ready or CodecsUpdated to indicate the local, or negotiated feedback messages. A struct defining a RTP Header extension Identifier to be negotiated Direction in which the Header Extension is negotiated. URI defining the extension Feedback parameters as a string. Format is defined in the relevant RFC Header extensions desired by the remote side Signal emitted when the connection manager wishes to inform the client of the RTP header extensions supported by the remote end. This signal is emitted before SetRemoteCodecs. If the client supports any of these messages, it must call SupportedHeaderExtensions before calling SupportedCodecs. Locally supported RTP header extensions. Inform the connection manager of the supported RTP header extensions for this session. This is called before calling SupportedCodecs, Ready or CodecsUpdated to indicate the local or negotiated RTP header extensions.
telepathy-qt-0.9.3/spec/Channel_Interface_Media_Signalling.xml0000644000175200001440000002167012000056607026674 0ustar00collabora-develusers00000000000000 Copyright © 2005-2009 Collabora Limited Copyright © 2005-2009 Nokia Corporation Copyright © 2006 INdT

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

The old-style Telepathy properties, deprecated since March 2009, have been removed.

An interface for signalling a channel containing synchronised media sessions which can contain an arbitrary number of streams. The presence of this interface on a Channel indicates that the connection manager will not carry out the actual streaming for this channel, and that the client handling the channel is responsible for doing so; in most cases we recommend doing this by using the telepathy-farsight library.

Streaming audio and (particularly) video requires a high level of integration with the UI, and having the connection manager act as a proxy would be likely to introduce unacceptable latency. As a result, audio/video streaming is offloaded into the client where possible, as an exception to the general design of Telepathy.

The negotiation interface is based on the API of the Farsight library. This, in turn, is based upon the IETF MMusic ICE drafts, where connections are established by signalling potential connection candidates to the peer until a usable connection is found, and codecs are negotiated with an SDP-style offer and answer. However, the principles should be applicable to other media streaming methods and the API re-used without difficulty.

Note that the naming conventions used in the MediaStreamHandler and MediaSessionHandler interfaces are rather confusing; methods have signal-like names and signals have method-like names, due to the API being based rather too closely on that of Farsight. This is for historical reasons and will be fixed in a future release of the Telepathy specification.

The type of a media session. Currently, the only supported value is "rtp". A struct representing a active session handler. The object path of the session handler, which is on the same bus name as the channel. The media session's type Returns all currently active session handlers on this channel as a list of (session_handler_path, type). Object path of the new Media.SessionHandler object String indicating type of session, eg "rtp" Signal that a session handler object has been created. The client should create a session object and create streams for the streams within.

The client can implement streaming for streams whose NATTraversal property is gtalk-p2p.

The client can implement streaming for streams whose NATTraversal property is ice-udp.

The client can implement streaming for streams whose NATTraversal property is wlm-8.5.

The client can implement streaming for streams whose NATTraversal property is wlm-2009.

The client supports media streaming with H264 (etc.).

This handler capability token is a one of a family of similar tokens: for any other audio or video codec whose MIME type is audio/subtype or video/subtype, a handler capability token of this form may exist (the subtype MUST appear in lower case in this context). Clients MAY support more codecs than they explicitly advertise support for; clients SHOULD explicitly advertise support for their preferred codec(s), and for codecs like H264 that are, in practice, significant in codec negotiation.

For instance, the XMPP capability used by the Google Video Chat web client to determine whether a client is compatible with it requires support for H264 video, so an XMPP connection manager that supports this version of Jingle should not advertise the Google Video Chat capability unless there is at least one installed client that declares that it supports video/h264 on StreamedMedia channels.

For example, a client could advertise support for Speex, Theora and H264 by having three handler capability tokens, org.freedesktop.Telepathy.Channel.Interface.MediaSignalling/audio/speex, org.freedesktop.Telepathy.Channel.Interface.MediaSignalling/video/theora and org.freedesktop.Telepathy.Channel.Interface.MediaSignalling/video/h264, in its Capabilities property.

Clients MAY have media signalling abilities without explicitly supporting any particular codec, and connection managers SHOULD support this usage.

This is necessary to support gatewaying between two Telepathy connections, in which case the available codecs might not be known to the gatewaying process.

telepathy-qt-0.9.3/spec/Channel_Type_Contact_Search.xml0000644000175200001440000005401212000056607025403 0ustar00collabora-develusers00000000000000 Copyright © 2005-2009 Collabora Limited Copyright © 2005-2009 Nokia Corporation Copyright © 2006 INdT

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

as stable API. Changes from draft 2: Contact_Search_Result_Map keys are now identifiers rather than handles; consequently, the values need not include x-telepathy-identifier.

A channel type for searching server-stored user directories. A new channel should be requested by a client for each search attempt, and closed when the search is completed or the required result has been found.

Connections that support contact search channels SHOULD have an entry in RequestableChannelClasses with the ChannelType fixed to this interface, and no other fixed properties. That requestable channel class MAY also have the Server and Limit properties in its list of allowed properties, depending on the protocol.

The requestable channel class would normally also have TargetHandleType fixed to None, but the initial implementation of ContactSearch (in telepathy-gabble) didn't do this.

All channels of this type should have TargetHandleType None (and hence TargetHandle 0 and TargetID "").

Requests for channels of this type need only optionally specify the Server property (if it is an allowed property in the connection's RequestableChannelClasses).

Before searching, the AvailableSearchKeys property should be inspected to determine the valid search keys which can be provided to the Search method. A search request is then started by providing some of these terms to the Search method, and the SearchState will change from Not_Started to In_Progress. As results are returned by the server, the SearchResultReceived signal is emitted for each contact found; when the search is complete, the search state will be set to Completed. If the search fails after Search has been called, the state will change to Failed. A running search can be cancelled by calling Stop.

If the protocol supports limiting the number of results returned by a search and subsequently requesting more results, after Limit results have been received the search state will be set to More_Available. Clients may call More to request another Limit results. If allowed by the connection manager, clients may specify the "page size" by specifying Limit when calling CreateChannel.

The client should call the channel's Close method when it is finished with the channel.

Each channel can only be used for a single search; a new channel should be requested for each subsequent search. Connection managers MUST support multiple ContactSearch channels being open at once (even to the same server, if applicable).

It does not make sense to request this channel type using EnsureChannel; clients SHOULD request channels of this type using CreateChannel instead.

A contact search channel that is already in use for a different search isn't useful.

The search has not started The search is in progress The search has paused, but more results can be retrieved by calling More. The search has been completed The search has failed The current state of this search channel object. Change notification is via SearchStateChanged. The new search state If the new state is Failed, the name of a D-Bus error describing what went wrong. Otherwise, the empty string.

Additional information about the state transition, which may include the following well-known keys:

debug-message (s)
Debugging information on the change, corresponding to the message part of a D-Bus error message, which SHOULD NOT be displayed to users under normal circumstances

This argument allows for future extensions. For instance, if moving to state Failed because the server rejected one of our search terms, we could define a key that indicates which terms were invalid.

Emitted when the SearchState property changes. The implementation MUST NOT make transitions other than the following:

  • Not_StartedIn_Progress
  • In_ProgressMore_Available
  • More_AvailableIn_Progress
  • In_ProgressCompleted
  • In_ProgressFailed

Any of the following search keys, with the indicated result for the search:

The empty string
Search for the search term in some implementation-dependent set of fields, using an implementation-dependent algorithm (e.g. searching for each word mentioned) The "one big search box" approach to searching, as is familiar from Google. The Sametime plugin to Pidgin appears to search in this way.
A VCard_Field
Search for the search term in fields matching that name (for instance, nickname would search nicknames, and tel would search any available phone number, regardless of its work/home/mobile/... status).
A VCard_Field followed by ";" and a VCard_Type_Parameter of the form "type=..."
Search for the search term in fields of that name and type only (for instance, tel;type=mobile).
x-telepathy-identifier
Search for contacts whose identifier in the IM protocol matches the search term (e.g. contains it as a substring) Otherwise, starting a search by identifier would require the UI to know the vCard field name corresponding to identifiers in this protocol, which might be non-standard (like x-jabber) or not exist at all.
x-gender
For the search term "male" or "female", search only for contacts listed as male or female, respectively. The results for other search terms are undefined; it is likely that contacts with unspecified gender will only be matched if this search key is omitted from the request. Examples in XEP-0055 suggest this usage, and at least Gadu-Gadu also supports limiting search results by gender.
x-n-family
Search for the search term in contacts' family names (the first component of the vCard field n). Gadu-Gadu and TOC seem to support this mode of searching.
x-n-given
Search for the search term in contacts' given names (the second component of the vCard field n). As for x-n-family.
x-online
For the search term "yes", search only for contacts who are currently online. The results for other search terms are undefined. Gadu-Gadu appears to support this.
x-adr-locality
Search for the search term as a locality or city (the fourth component of the vCard field adr). Gadu-Gadu and TOC appear to support this.

If supported by the protocol, the maximum number of results that should be returned, where 0 represents no limit. If the protocol does not support limiting results, this should be 0.

For example, if the terms passed to Search match Antonius, Bridget and Charles and this property is 2, the search service SHOULD only return Antonius and Bridget.

This property SHOULD be requestable if and only if the protocol supports specifying a limit; implementations SHOULD use 0 as the default if possible, or a protocol-specific sensible default otherwise.

The set of search keys supported by this channel. Example values include [""] (for protocols where several address fields are implicitly searched) or ["x-n-given", "x-n-family", "nickname", "email"] (for XMPP XEP-0055, without extensibility via Data Forms). It can be in the NewChannels signal for round-trip reduction. A map from search keys to search terms. The search key to match against The term or terms to be searched for in the search key; depending on the protocol and the server implementation, this may be matched by exact or approximate equality, substring matching, word matching or any other matching algorithm A dictionary mapping search key names to the desired values Send a request to start a search for contacts on this connection. This may only be called while the SearchState is Not_Started; a valid search request will cause the SearchStateChanged signal to be emitted with the state In_Progress. The SearchState is no longer Not_Started, so this method is no longer available. The search terms included something this connection manager cannot search for. Request that a search in SearchState More_Available move back to state In_Progress and continue listing up to Limit more results. The SearchState is not More_Available.

Stop the current search. This may not be called while the SearchState is Not_Started. If called while the SearchState is In_Progress, SearchStateChanged will be emitted, with the state Failed and the error org.freedesktop.Telepathy.Error.Cancelled.

Calling this method on a search in state Completed or Failed succeeds, but has no effect.

Specifying Stop to succeed when the search has finished means that clients who call Stop just before receiving SearchStateChanged don't have to handle a useless error.

Depending on the protocol, the connection manager may not be able to prevent the server from sending further results after this method returns; if this is the case, it MUST ignore any further results.

The SearchState is Not_Started, so this method is not yet available.
A map from contact identifier to search result, emitted in the SearchResultReceived signal. The identifier of a contact matching the search terms. This is an identifier rather than a handle in case we make handles immortal; see fd.o#23155 and fd.o#13347 comment 5.

An array of fields representing information about this contact, in the same format used in the ContactInfo interface. It is possible that a separate call to RequestContactInfo would return more information than this signal provides.

A mapping from contact identifier to an array of fields representing information about this contact. Emitted when a some search results are received from the server. This signal can be fired arbitrarily many times so clients MUST NOT assume they'll get only one signal.

For protocols which support searching for contacts on multiple servers with different DNS names (like XMPP), the DNS name of the server being searched by this channel, e.g. "characters.shakespeare.lit". Otherwise, the empty string.

XEP 0055 defines a mechanism for XMPP clients to search services of their choice for contacts, such as users.jabber.org (the "Jabber User Directory").

This property SHOULD be requestable if and only if the protocol supports querying multiple different servers; implementations SHOULD use a sensible default if possible if this property is not specified in a channel request.

This allows a client to perform searches on a protocol it knows nothing about without requiring the user to guess a valid server's hostname.

telepathy-qt-0.9.3/spec/Channel_Type_File_Transfer.xml0000644000175200001440000006445212000056607025257 0ustar00collabora-develusers00000000000000 Copyright © 2008-2009 Collabora Limited

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 Library 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API)

A channel type for transferring files. The transmission of data between contacts is achieved by reading from or writing to a socket. The type of the socket (local Unix, IPv4, etc.) is decided on when the file transfer is offered or accepted.

A socket approach is used to make the transfer less dependent on both client and connection manager knowing the same protocols. As an example, when browsing an SMB share in a file manager, one selects "Send file" and chooses a contact. Instead of passing a URL which would then require the connection manager to connect to the SMB share itself, the client passes a stream from which the connection manager reads, requiring no further connection to the share. It also allows connection managers to be more restricted in their access to the system, allowing tighter security policies with eg SELinux, or more flexible deployments which cross user or system boundaries.

The Telepathy client should connect to the socket or address that the connection manager has set up and provided back to the clients through the two methods.

  • In order to send a file, one should request a FileTransfer channel for a contact, including at least the mandatory properties (Filename, Size and ContentType). Then, one should call ProvideFile to configure the socket that will be used to transfer the file.
  • In order to receive an incoming file transfer, one should call AcceptFile and then wait until the state changes to Open. When the receiver wants to resume a transfer, the Offset argument should be should be set to a non-zero value when calling AcceptFile.
  • Once the offset has been negotiated, the InitialOffsetDefined signal is emitted and the InitialOffset property is defined. The InitialOffsetDefined signal is emitted before channel becomes Open. The receiver MUST check the value of InitialOffset for a difference in offset from the requested value in AcceptFile.
  • When the state changes to Open, Clients can start the transfer of the file using the offset previously announced.

If something goes wrong with the transfer, Channel.Close should be called on the channel.

The File channel type may be requested for handles of type HANDLE_TYPE_CONTACT. If the channel is requested for any other handle type then the behaviour is undefined.

Connection managers SHOULD NOT advertise support for file transfer to other contacts unless it has been indicated by a call to UpdateCapabilities.

People would send us files, and it would always fail. That would be silly.

The state of the file transfer as described by the File_Transfer_State enum.

The file's MIME type. This cannot change once the channel has been created.

This property is mandatory when requesting the channel with the Connection.Interface.Requests.CreateChannel method. Protocols which do not have a content-type property with file transfers should set this value to application/octet-stream.

The name of the file on the sender's side. This is therefore given as a suggested filename for the receiver. This cannot change once the channel has been created.

This property should be the basename of the file being sent. For example, if the sender sends the file /home/user/monkey.pdf then this property should be set to monkey.pdf.

This property is mandatory when requesting the channel with the Connection.Interface.Requests.CreateChannel method. This property cannot be empty and MUST be set to a sensible value.

The size of the file. If this property is set, then the file transfer is guaranteed to be this size. This cannot change once the channel has been created.

When you are creating a channel with this property, its value MUST be accurate and in bytes. However, when receiving a file, this property still MUST be in bytes but might not be entirely accurate to the byte.

This property is mandatory when requesting the channel with the Connection.Interface.Requests.CreateChannel method. If this information isn't provided in the protocol, connection managers MUST set it to UINT64_MAX.

The type of the ContentHash property.

This property is optional when requesting the channel with the Connection.Interface.Requests.CreateChannel method. However, if you wish to include the ContentHash property you MUST also include this property. If you omit this property from a Connection.Interface.Requests.CreateChannel method call then its value will be assumed to be File_Hash_Type_None.

For each supported hash type, implementations SHOULD include an entry in RequestableChannelClasses with this property fixed to that hash type. If the protocol supports offering a file without a content hash, implementations SHOULD list this property in Allowed in a requestable channel class, mapping hash types they don't understand to None.

Hash of the contents of the file transfer, of type described in the value of the ContentHashType property.

This property is optional when requesting the channel with the Connection.Interface.Requests.CreateChannel method. Its value MUST correspond to the appropriate type of the ContentHashType property. If the ContentHashType property is not set, or set to File_Hash_Type_None, then this property will not even be looked at.

Description of the file transfer. This cannot change once the channel has been created.

This property is optional when requesting the channel with the Connection.Interface.Requests.CreateChannel method. If this property was not provided by the remote party, connection managers MUST set it to the empty string.

The last modification time of the file being transferred. This cannot change once the channel has been created

This property is optional when requesting the channel with the Connection.Interface.Requests.CreateChannel method.

A mapping from address types (members of Socket_Address_Type) to arrays of access-control type (members of Socket_Access_Control) that the connection manager supports for sockets with that address type. For simplicity, if a CM supports offering a particular type of file transfer, it is assumed to support accepting it. Connection Managers MUST support at least Socket_Address_Type_IPv4.

A typical value for a host without IPv6 support:

          {
            Socket_Address_Type_IPv4:
              [Socket_Access_Control_Localhost, Socket_Access_Control_Port,
               Socket_Access_Control_Netmask],
            Socket_Address_Type_Unix:
              [Socket_Access_Control_Localhost, Socket_Access_Control_Credentials]
          }
        

The number of bytes that have been transferred at the time of requesting the property. This will be updated as the file transfer continues.

The offset in bytes from where the file should be sent. This MUST be respected by both the receiver and the sender after the state becomes Open, but before any data is sent or received. Until the InitialOffsetDefined signal is emitted, this property is undefined.

Before setting the State property to Open, the connection manager MUST set the InitialOffset property, possibly to 0.

This property MUST NOT change after the state of the transfer has changed to Open.

For outgoing file transfers, this requestable property allows the channel requester to inform observers (and the handler, if it is not the requester itself) of the URI of the file being transferred. Note that the connection manager SHOULD NOT read this file directly; the handler streams the file into the CM through the socket negotiated using ProvideFile.

On outgoing file transfers, this property MUST NOT change after the channel is requested.

For incoming file transfers, this property MAY be set by the channel handler before calling AcceptFile to inform observers where the incoming file will be saved. If set by an approver, the handler MUST save the file to that location. Setting this property once AcceptFile has been called MUST fail. Once this property has been set URIDefined is emitted.

If set, this URI SHOULD generally point to a file on the local system, as defined by RFC 1738 §3.10; that is, it should be of the form file:///path/to/file or file://localhost/path/to/file. For outgoing files, this URI MAY use a different scheme, such as http:, if a remote resource is being transferred to a contact.

An invalid state type used as a null value. This value MUST NOT appear in the State property. The file transfer is waiting to be accepted/closed by the receiver. The receiver has to call AcceptFile, then wait for the state to change to Open and check the offset value. The receiver has accepted the transfer. The sender now has to call ProvideFile to actually start the transfer. The receiver should now wait for the state to change to Open and check the offset value. The file transfer is open for traffic. The file transfer has been completed successfully. The file transfer has been cancelled. No reason was specified. The change in state was requested. The file transfer was cancelled by the local user. The file transfer was cancelled by the remote user. The file transfer was cancelled because of a local error. The file transfer was cancelled because of a remote error. No hash. MD5 digest as a string of 32 ASCII hex digits. SHA1 digest as a string of ASCII hex digits. SHA256 digest as a string of ASCII hex digits. Accept a file transfer that's in the Pending state. The file transfer's state becomes Accepted after this method is called. At this point the client can connect to the socket. CM MUST emit InitialOffsetDefined and change the state to Open before writing to the socket. Then InitialOffset should be respected in case its value differs from the offset that was specified as an argument to AcceptFile. The type of address the connection manager should listen on. The type of access control the connection manager should apply to the socket. A parameter for the access control type, to be interpreted as specified in the documentation for the Socket_Access_Control enum. The desired offset in bytes where the file transfer should start. The offset is taken from the beginning of the file. Specifying an offset of zero will start the transfer from the beginning of the file. The offset that is actually given in the InitialOffset property can differ from this argument where the requested offset is not supported. (For example, some protocols do not support offsets at all so the InitialOffset property will always be 0.) The address on which the connection manager will listen for connections for this file transfer. The given address type or access-control mechanism is not supported. Your address type, access control, access control parameter, offset, or a combination of all four is invalid. The file transfer is not in the Pending state, there isn't or there is a local error with acquiring a socket. Provide the file for an outgoing file transfer which has been offered. Opens a socket that the client can use to provide a file to the connection manager. The channel MUST have been requested, and will change state to Open when this method is called if its state was Accepted. The type of address the connection manager should listen on. The type of access control the connection manager should apply to the socket. A parameter for the access control type, to be interpreted as specified in the documentation for the Socket_Access_Control enum. The address on which the connection manager will listen for connections for this file transfer. The given address type or access-control mechanism is not supported. Your address type, access control, access control parameter, or a combination of all three is invalid. Channel is not an outgoing transfer, ProvideFile has already been called, or there was a local error acquiring the socket. Emitted when the state of a file transfer changes. The new state of the file transfer; see the File_Transfer_State enumeration. The reason for the state change; see the File_Transfer_State_Change_Reason enumeration. The value will always be File_Transfer_State_Change_Reason_None, except when changing state to cancelled. Emitted when the number of transferred bytes changes. This will not be signalled with every single byte change. Instead, the most frequent this signal will be emitted is once a second. This should be sufficient, and the TransferredBytes property SHOULD NOT be polled. The number of already transferred bytes. Emitted when the value of the InitialOffset property has been negotiated. This signal MUST be emitted before the channel becomes Open and clients have to use this offset when transferring the file. The value of the InitialOffset property. Emitted when the value of the URI property has been set. This signal MUST only be emitted on incoming file transfers, and only if the handler sets the URI property before accepting the file. The value of the URI property.
telepathy-qt-0.9.3/spec/Connection_Interface_Addressing.xml0000644000175200001440000002627112000056607026322 0ustar00collabora-develusers00000000000000 Copyright (C) 2010-2012 Collabora Limited

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API)

This interface deals with the multiple address types that can refer to the same contact, such as vCard fields and URIs.

It can be used to retrieve contacts with a specific addresses through GetContactsByVCardField and GetContactsByURI, as well as defining the various addressing methods for a given contact through this interface's contact attributes.

The vCard field of the addresses we are requesting. The field name SHOULD be in lower case. Supported fields can be found in AddressableVCardFields.

The url vCard field MUST NOT appear here; see GetContactsByURI instead.

In practice, protocols have a limited set of URI schemes that make sense to resolve as a contact.

The addresses to get contact handles for. The address types should match the given vCard field.

A list of strings indicating which D-Bus interfaces the calling process is interested in. All supported attributes from these interfaces, whose values can be obtained without additional network activity, will be in the reply.

Attributes from this interface and from org.freedesktop.Telepathy.Connection are always returned, and need not be requested explicitly.

The behavior of this parameter is similar to the same parameter in Contacts.GetContactAttributes.

A mapping from requested vCard addresses to the corresponding contact handles.

Requested addresses that are not valid or understood for this protocol MUST be omitted from the mapping.

A dictionary mapping the contact handles to contact attributes. If any of the requested addresses are in fact invalid, they are simply omitted from this mapping. If contact attributes are not immediately known, the behaviour is defined by the interface; the attribute should either be omitted from the result or replaced with a default value.

Requested addresses that are not valid or understood for this protocol MUST be omitted from the mapping.

Each contact's attributes will always include at least the identifier that would be obtained by inspecting the handle (org.freedesktop.Telepathy.Connection/contact-id).

Request contacts and retrieve their attributes using a given field in their vCards.

The connection manager should record that these handles are in use by the client who invokes this method, and must not deallocate the handles until the client disconnects from the bus or calls the Connection.ReleaseHandles method.

The URI addresses to get contact handles for. Supported schemes can be found in AddressableURISchemes.

A list of strings indicating which D-Bus interfaces the calling process is interested in. All supported attributes from these interfaces, whose values can be obtained without additional network activity, will be in the reply.

Attributes from this interface and from org.freedesktop.Telepathy.Connection are always returned, and need not be requested explicitly.

The behavior of this parameter is similar to the same parameter in Contacts.GetContactAttributes.

A mapping of requested URIs to the corresponding contact handles.

Requested URIs that are not valid or understood for this protocol MUST be omitted from the mapping.

A dictionary mapping the contact handles to contact attributes. If any of the requested addresses are in fact invalid, they are simply omitted from this mapping. If contact attributes are not immediately known, the behaviour is defined by the interface; the attribute should either be omitted from the result or replaced with a default value.

Requested URIs that are not valid or understood for this protocol MUST be omitted from the mapping.

Each contact's attributes will always include at least the identifier that would be obtained by inspecting the handle (org.freedesktop.Telepathy.Connection/contact-id).

Request contacts and retrieve their attributes using URI addresses.

The connection manager should record that these handles are in use by the client who invokes this method, and must not deallocate the handles until the client disconnects from the bus or calls the Connection.ReleaseHandles method.

A mapping of vCard fields and addresses equivalent to a particular contact's protocol identifier. For instance, on XMPP this would contain x-jabber for all contacts, and x-facebook-id for contacts on Facebook's server.

A vCard field, such as x-jabber. The value of that vCard field for the contact.
The various vCard addresses that identify this contact. The various URI addresses that identify this contact. A map from URIs/vCard addresses to the corresponding handle. The URI or vCard address that has been requested by GetContactsByVCardField or GetContactsByURI. A nonzero handle.
telepathy-qt-0.9.3/spec/Channel_Interface_Transfer.xml0000644000175200001440000000472112000056607025270 0ustar00collabora-develusers00000000000000 Copyright (C) 2005, 2006 Collabora Limited Copyright (C) 2005, 2006 Nokia Corporation Copyright (C) 2006 INdT

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

The handle of the member to transfer The handle of the destination contact Request that the given channel member instead connects to a different contact ID. An interface for channels where you may request that one of the members connects to somewhere else instead.
telepathy-qt-0.9.3/spec/Connection_Interface_Location.xml0000644000175200001440000004750112000056607026006 0ustar00collabora-develusers00000000000000 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API)

An interface on connections to support protocols which allow users to publish their current geographical location, and subscribe to the current location of their contacts.

This interface is geared strongly towards automatic propagation and use of this information, so focuses on latitude, longitude and altitude which can be determined by GPS, although provision is also included for an optional human-readable description of locations. All co-ordinate information is required to be relative to the WGS84 datum.

The information published through this interface is intended to have the same scope as presence information, so will normally be made available to those individuals on the user's "publish" contact list. Even so, user interfaces should not automatically publish location information without the consent of the user, and it is recommended that an option is made available to reduce the accuracy of the reported information to allow the user to maintain their privacy.

Location information is represented using the terminology of XMPP's XEP-0080 or the XEP-0080-derived Geoclue API where possible.

Clients of this interface SHOULD register an interest in it by calling Connection.AddClientInterest with an argument containing the name of this interface, before calling any Location method. If they do so, they SHOULD also call Connection.RemoveClientInterest after use to allow the CM to release resources associated with this interface.

A user's location, represented as an extensible mapping.

Civic addresses are represented by the following well-known keys (all of which have string values), which should be kept in sync with those used in XEP-0080 and in the Geoclue project:

  • countrycode - s: an ISO-3166-1 alpha-2 (two-letter) country code, e.g. "us", "gb", "fr"
  • country - s: a country name in unspecified locale, e.g. "USA"
  • region - s: an administrative region of the nation, such as a state or province
  • locality - s: a locality within the administrative region, such as a town or city
  • area - s: a named area such as a campus or neighborhood
  • postalcode - s: a code used for postal delivery
  • street - s: a thoroughfare within the locality, or a crossing of two thoroughfares

The following address keys are defined in XEP-0080 but not by Geoclue, and are also allowed:

  • building - s: a specific building on a street or in an area
  • floor - s: a particular floor in a building
  • room - s: a particular room in a building
  • text - s: any more specific information, e.g. "Northwest corner of the lobby"
  • description - s: A natural-language name for or description of the location, e.g. "Bill's house"
  • uri - s: a URI representing the location or pointing to more information about it

Since the previous strings have data intended to be read by users, the language used should be stated using:

  • language - s: a specific language or locale of location information in a format compatible to RFC 4646. Note that UTF-8 is the only allowed encoding, e.g. "en" or "fr-CA".

Positions are represented by the following well-known keys:

  • lat - d: latitude in decimal degrees north, -90 to +90, relative to the WGS-84 datum This is from XEP-0080; the XEP allows use of a different datum, but recommends this one. We enforce sanity by requiring a consistent datum: a minimal compliant implementation of this specification in terms of XEP-0080 would simply ignore the <lat> and <lon> elements if <datum> exists and has a value other than WGS-84, while an advanced implementation might correct for the different datum.
  • lon - d: Longitude in decimal degrees east, -180 to +180, relative to the WGS-84 datum Same rationale as 'lat'
  • alt - d: altitude in metres above sea level (negative if below sea level) This is from XEP-0080
  • accuracy - d: horizontal position error in metres if known This is from XEP-0080

Velocities are represented by the following well-known keys:

  • speed - d: speed in metres per second This is from XEP-0080
  • bearing - d: direction of movement in decimal degrees, where North is 0 and East is 90 This is from XEP-0080, and is equivalent to the struct field called "direction" in GeoClue

Other well-known keys:

  • timestamp - x (Unix_Timestamp64): the time that the contact was at this location, in seconds since 1970-01-01T00:00:00Z (i.e. the beginning of 1970 in UTC) XEP-0080 uses an ISO 8601 string for this, but a number of seconds since the epoch is probably easier to work with.
The value corresponding to the well-known key.
A map from contacts to their locations. A contact The contact's location, which MAY be empty to indicate that the contact's location is unknown

Return the current locations of the given contacts, if they are already known. If any of the given contacts' locations are not known, request their current locations, but return immediately without waiting for a reply; if a reply with a non-empty location is later received for those contacts, the LocationUpdated signal will be emitted for them.

This method is appropriate for "lazy" location finding, for instance displaying the location (if available) of everyone in your contact list.

For backwards compatibility, if this method is called by a client whose "interest count" for this interface, as defined by Connection.AddClientInterest, is zero, the Connection SHOULD behave as if AddClientInterest had been called for this interface just before that method call. Clients that do not explicitly call AddClientInterest SHOULD NOT call Connection.RemoveClientInterest either.

The contacts whose locations should be returned or signalled. The contacts' locations, if already known. Contacts whose locations are not already known are omitted from the mapping; contacts known to have no location information appear in the mapping with an empty Location dictionary.
Return the current location of the given contact. If necessary, make a request to the server for up-to-date information, and wait for a reply. This method is appropriate for use in a "Contact Information..." dialog; it can be used to show progress information (while waiting for the method to return), and can distinguish between various error conditions. The contact whose location should be returned. The contact's location. It MAY be empty, indicating that no location information was found. The requested contact does not allow the local user to see their location information. Emitted when a contact's location changes or becomes known. The contact The contact's location, or empty to indicate that nothing is known about the contact's location. Set the local user's own location. The location to advertise. If the user wants to obscure their exact location by reducing the precision or accuracy, clients MUST do this themselves, rather than relying on the connection manager to do so. Clients that interact with more than one connection SHOULD advertise the same reduced-accuracy location to all of them, so that contacts cannot obtain an undesirably accurate location by assuming that random errors have been added and averaging the locations advertised on multiple connections. The user's server does not support publishing their own location. If it is possible to determine this ahead of time, the Can_Set flag will not be set in SupportedLocationFeatures. The types of access control that are supported by this connection. The current access control mechanism and settings for this connection. Before publishing location for the first time, if this has not been set by a client, implementations SHOULD set it to be as restrictive as possible (an empty whitelist, if supported). Indicates the Location features supported by this connection. This property MAY be undefined before Status becomes Connected, but MUST remain constant thereafter. Indicates that setting your own location with SetLocation is supported on this connection. Flags describing the Location features which may be supported on any given connection.

The same mapping that would be returned by GetLocations for this contact. Omitted from the result if the contact's location is not known.

For backwards compatibility, if contact attributes that include this interface are requested by a client whose "interest count" for this interface, as defined by Connection.AddClientInterest, is zero, the Connection SHOULD behave as if AddClientInterest was called for this interface just before that request. Clients that do not explicitly call AddClientInterest SHOULD NOT call Connection.RemoveClientInterest either.

telepathy-qt-0.9.3/spec/Channel_Interface_Hold.xml0000644000175200001440000002255712000056607024401 0ustar00collabora-develusers00000000000000 Copyright (C) 2005-2008 Collabora Limited Copyright (C) 2005-2008 Nokia Corporation Copyright (C) 2006 INdT 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 Street, Fifth Floor, Boston, MA 02110-1301, USA. first API-stable version

Interface for channels where you may put the channel on hold. This only makes sense for channels where you are streaming media to or from the members. (To see whether the other participant has put you on hold, see CallState.)

If you place a channel on hold, this indicates that you do not wish to be sent media streams by any of its members and will be ignoring any media streams you continue to receive. It also requests that the connection manager free up any resources that are only needed for an actively used channel (e.g. in a GSM or PBX call, it will be necessary to place an active call on hold before you can start another call).

This can also be used for putting a single Content on hold, if the protocol supports it (This interface is in the Channel namespace for historical reasons).

Return whether the local user has placed the channel on hold. The state of the channel The reason why the channel is in that state Emitted to indicate that the hold state has changed for this channel. This may occur as a consequence of you requesting a change with RequestHold, or the state changing as a result of a request from another process. The state of the channel The reason for the state change The hold state of a channel. All streams are unheld (the call is active). New channels SHOULD have this hold state. All streams are held (the call is on hold) The connection manager is attempting to move to state Held, but has not yet completed that operation. It is unspecified whether any, all or none of the streams making up the channel are on hold. Examining the Hold state of Call Contents (if applicable) may provide more useful information. The connection manager is attempting to move to state Unheld, but has not yet completed that operation. It is unspecified whether any, all or none of the streams making up the channel are on hold. Examining the Hold state of Call Contents (if applicable) may provide more useful information. The reason for a change to the Local_Hold_State. Clients MUST treat unknown values as equivalent to Local_Hold_State_Reason_None. The reason cannot be described by any of the predefined values (connection managers SHOULD avoid this reason, but clients MUST handle it gracefully) The change is in response to a user request The change is because some resource was not available A boolean indicating whether or not the channel should be on hold

Request that the channel be put on hold (be instructed not to send any media streams to you) or be taken off hold.

If the connection manager can immediately tell that the requested state change could not possibly succeed, this method SHOULD return the NotAvailable error. If the requested state is the same as the current state, this method SHOULD return successfully without doing anything.

Otherwise, this method SHOULD immediately set the hold state to Local_Hold_State_Pending_Hold or Local_Hold_State_Pending_Unhold (as appropriate), emitting HoldStateChanged if this is a change, and return successfully.

The eventual success or failure of the request is indicated by a subsequent HoldStateChanged signal, changing the hold state to Local_Hold_State_Held or Local_Hold_State_Unheld.

If the channel has multiple streams, and the connection manager succeeds in changing the hold state of one stream but fails to change the hold state of another, it SHOULD attempt to revert all streams to their previous hold states.

The following state transitions SHOULD be used, where appropriate:

  • Successful hold: (Unheld, any reason) → (Pending_Hold, Requested) → (Held, Requested)
  • Successful unhold: (Held, any reason) → (Pending_Unhold, Requested) → (Unheld, Requested)
  • Attempting to unhold fails at the first attempt to acquire a resource: (Held, any reason) → (Pending_Unhold, Requested) → (Held, Resource_Not_Available)
  • Attempting to unhold acquires one resource, but fails to acquire a second, and takes time to release the first: (Held, any reason) → (Pending_Unhold, Requested) → (Pending_Hold, Resource_Not_Available) → (Held, Resource_Not_Available)
The requested hold state cannot be achieved; for example, if only a limited number of channels can be in the "not on hold" state, attempts to exceed this number will raise NotAvailable.
telepathy-qt-0.9.3/spec/Channel_Interface_Password.xml0000644000175200001440000001161012000056607025301 0ustar00collabora-develusers00000000000000 Copyright © 2005-2011 Collabora Limited Copyright © 2005-2009 Nokia Corporation Copyright © 2006 INdT 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 Street, Fifth Floor, Boston, MA 02110-1301, USA. The ProvidePassword method must be called now for the user to join the channel The RoomConfig1.PasswordHint contains a hint for the password. An integer with the logical OR of all the flags set (values of ChannelPasswordFlags) Returns the bitwise-OR of the flags relevant to the password on this channel. The user interface can use this to present information about which operations are currently valid. A bitwise OR of the flags which have been set A bitwise OR of the flags which have been cleared Emitted when the flags as returned by GetPasswordFlags are changed. The user interface should be updated as appropriate. The password A boolean indicating whether or not the password was correct Provide the password so that the channel can be joined. Must be called with the correct password in order for channel joining to proceed if the 'provide' password flag is set.

Interface for channels that may have a password set that users need to provide before being able to join. The GetPasswordFlags method and the associated PasswordFlagsChanged signal indicate whether the user must now provide a password to join the channel.

Once the user has joined the channel, the current password-protectedness of the room can be checked (and possibly modified) using the RoomConfig1 interface, if implemented.

telepathy-qt-0.9.3/spec/Connection_Interface_Renaming.xml0000644000175200001440000001153612000056607025775 0ustar00collabora-develusers00000000000000 Copyright (C) 2005, 2006 Collabora Limited Copyright (C) 2005, 2006 Nokia Corporation Copyright (C) 2006 INdT

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

The handle of the original identifier The handle of the new identifier

Emitted when the unique identifier of a contact on the server changes.

Any channels associated with the contact's original handle will continue to be to that handle, and so are no longer useful (unless the contact renames back, or another contact connects with that unique ID). Clients may open a similar channel associated with the new handle to continue communicating with the contact.

For example, if a GUI client associates text channels with chat windows, it should detach the old channel from the chat window, closing it, and associate a channel to the new handle with the same window.

If the contact's old handle is in any of the member lists of a channel which has the groups interface, it will be removed from the channel and the new handle will be added. The resulting MembersChanged signal must be emitted after the Renamed signal; the reason should be RENAMED.

The handles may be either general-purpose or channel-specific. If the original handle is general-purpose, the new handle must be general-purpose; if the original handle is channel-specific, the new handle must be channel-specific in the same channel.

The desired identifier

Request that the user's own identifier is changed on the server. If successful, a Renamed signal will be emitted for the current "self handle" as returned by GetSelfHandle.

It is protocol-dependent how the identifier that's actually used will be derived from the supplied identifier; some sort of normalization might take place.

An interface on connections to support protocols where the unique identifiers of contacts can change. Because handles are immutable, this is represented by a pair of handles, that representing the old name, and that representing the new one.
telepathy-qt-0.9.3/spec/Call_Content_Interface_Media.xml0000644000175200001440000005651412000056607025527 0ustar00collabora-develusers00000000000000 Copyright © 2009-2010 Collabora Ltd. Copyright © 2009-2010 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API)

Interface to use by a software implementation of media streaming. The reason behind splitting the members of this interface out from the main Content interface is that the software is not necessarily what controls the media. An example of this is in GSM phones, where the CM just tells the phone to dial a number and it does the audio routing in a device specific hardware way and the CM does not need to concern itself with codecs.

Codec Negotiation

When a new Call1 channel appears (whether it was requested or not) a MediaDescription object will either be waiting in the MediaDescriptionOffer property, or will appear at some point via the NewMediaDescriptionOffer signal.

If nothing is known about the remote side's Media capabilities (e.g. outgoing SIP/XMPP call), this MediaDescription will pop up with {HasRemoteInformation = false, FurtherNegotiationRequired = true}, and the local user's streaming implementation SHOULD call Accept, with a description of all supported codecs and other features. The CM will then send this information to the remote side (and LocalMediaDescriptionChanged will fire with details of the description passed into Accept for debugging purposes).

When the remote codecs and other content information are available (e.g. Remote user replies to initial offer, or sends a new offer of their own, a new MediaDescription will appear, with {HasRemoteInformation = true, FurtherNegotiationRequired = false}, and the Codecs property on the description offer set to the codecs which are supported by the remote contact. The local user's streaming implementation SHOULD then call Accept, with a description that is compatible with the one one in the offer. After the codec set is accepted, both LocalMediaDescriptionChanged and RemoteMediaDescriptionsChanged will fire to signal their respective changes, to aid with debugging. Note that if Accept is called, with FurtherNegotiationRequired set to false, the CM should be able to rely on the fact that the description passed into Accept is compatible with the one in the offer, and the description passed into Accept will not be signalled to the remote side.

Changing codecs mid-call

To update the codecs in the local (and optionally remote) media descriptions mid-call, the UpdateLocalMediaDescription method should be called with details of the new codec list. If this is accepted, then LocalMediaDescriptionChanged will be emitted with the new codec set.

If parameters requiring negotiation are changed, then the FurtherNegotiationRequired property should be set to TRUE, and the new media description should only be used once they come in a new MediaDescriptionOffer

If the other side decides to update his or her codec list during a call, a new MediaDescription object will appear through NewMediaDescriptionOffer which should be acted on as documented above.

Protocols without negotiation

For protocols where the codecs are not negotiable, the initial content's MediaDescription object will appear with HasRemoteInformation, set to true and the known supported codec values in Codecs.

A description of a codec. Numeric identifier for the codec. This will be used as the PT in the SDP or content description. The name of the codec. The clockrate of the codec. Number of channels of the codec if applicable, otherwise 0. This should be set to true in calls to Accept and UpdateLocalMediaDescription if this codec has changed in a way that needs to be signalled over the network. If it is set to false, the CM is allowed ignore any differences between the current parameters and the previous ones This mechanism may be used to save bandwidth and avoid the CM having to calculate diffs against previous versions of this struct, which can lead to false-positives (e.g. redundant ptime updates). Extra parameters for this codec. A map from contact to the list of codecs he or she supports. A contact handle. The codecs that the contact supports. The remote contact this description refers to or 0. This matches the RemoteContact property on MediaDescription The properties of the description The remote description offer and its information The object path to the MediaDescription The immutable properties of all interfaces of the codec description. Having all the codec description properties here saves a D-Bus round-trip - it shouldn't be necessary to get the properties from the MediaDescription object, in practice. Update the local codec mapping and other interfaces of the MediaDescription. This method should only be used during an existing call to update the local media description. This may trigger a re-negotiation which may result in new new MediaDescriptionOffers if the "FurtherNegotiationRequired" property is TRUE. Otherwise, only parameters which strictly describe the media being sent can be changed. The updated media description that the local side wants to use. The protocol does not support changing the codecs mid-call. The description given is invalid in some way.

A map from contact handles to descriptions supported by that contact.

Keys of this map will appear in at most one RemoteMembers. See RemoteContact for more details on how to map between MediaDescriptions and Streams.

A map from contact handles to the descriptions the local side responsed with.

Emitted when a new MediaDescription appears. The streaming >implementation MUST respond by calling the Accept or Reject method on the description object appeared.

Emission of this signal indicates that the MediaDescriptionOffer property has changed to (Description, Contact, MediaDescriptionProperties).

When the MediaDescriptionOffer has been dealt with then MediaDescriptionOfferDone must be emitted before NewMediaDescriptionOffer is emitted again.

The object path of the new media description. This replaces any previous media description. The immutable properties of the remote media description. Having all the MediaDescription properties here saves a D-Bus round-trip - it shouldn't be necessary to get the properties from the MediaDescription object, in practice.

Emitted when a MediaDescription has been handled.

Emission of this signal indicates that the MediaDescriptionOffer property has changed to ("/", 0, {}).

Change notification for LocalMediaDescriptions

The local content description that was updated

Change notification for RemoteMediaDescriptions

The remote content descriptions that were updated

Removal notification for RemoteMediaDescriptions and LocalMediaDescriptions

The local and remote content descriptions that are no longer part of this content

The object path to the current MediaDescription object, its RemoteContact and a mapping of the MediaDescriptions properties. If the object path is "/" then there isn't an outstanding content description, and the mapping MUST be empty.

Having all MediaDescription properties here saves a D-Bus round-trip - it shouldn't be necessary to get these properties from the Content MediaDescription object, in practice.

Change notification is via the NewMediaDescriptionOffer and MediaDescriptionOfferDone signals.

A packetization method that can be used for a content. Real-time Transport Protocol, as documented by RFC 3550. Raw media. MSN webcam. This is the video-only one-way type which was used in earlier versions of WLM. Although no longer used, modern WLM clients still support the MSN webcam protocol.

The packetization method in use for this content.

Used by the CM to relay instructions from Channel.Interface.DTMF to the streaming implementation. If any contact in this call supports the telephone-event codec in their MediaDescription, this event should be sent as outlined in RFC 4733. Otherwise, it should be sent as an audible tone. The event to send (or stop sending). Either Pending_Send or Pending_Stop_Sending. Called by the streaming implementation in response to DTMFChangeRequested to confirm that it has started or stopped sending the event in question. The event referred to in the corresponding DTMFChangeRequested signal. Either Sending or None. The currently requested DTMF event (for state-recoverability of DTMFChangeRequested). Should be ignored if CurrentDTMFState is None. The current DTMF state (for state-recoverability of DTMFChangeRequested). Signal an unrecoverable error for this content, and remove it. A reason struct describing the error.
telepathy-qt-0.9.3/spec/Connection_Interface_Cellular.xml0000644000175200001440000001706512000056607026003 0ustar00collabora-develusers00000000000000 Copyright © 2008-2010 Nokia Corporation Copyright © 2010 Collabora Ltd.

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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

(as stable API)

This interface is for various cellular things (GSM and/or CDMA) that aren't really applicable to other protocols.

Define how long should the service centre try message delivery before giving up, failing delivery and deleting the message. A value of 0 means to use the service centre's default period.

The value specified is in seconds. Note that various protocols or implementations may round the value up (eg. to a minute or hour precision). The maximum validity period may vary depending on protocol or provider.

Previously, as an undocumented feature, setting MessageServiceCentre to the empty string caused the SIM's default SMSC to be used.

If True, SMSes will be sent via the service centre specified by MessageServiceCentre. If False, the SIM's default SMSC will be used, ignoring the value of MessageServiceCentre.

It could be desirable for a configuration interface to remember the user's previous choice of custom SMSC, even if it's not in use. This boolean allows that choice to be saved as an account parameter by Mission Control, rather than the UI needing to save it elsewhere to be restored if the user wants to reactivate it.

This property's value is now ignored unless OverrideMessageServiceCentre is True.

Address for the messaging service centre. Typically (as is the case for GSM's SMSC), it's the ISDN / telephony address (ie. a phone number). If OverrideMessageServiceCentre is False, this property's value should be ignored by the CM in favour of the SIM's default SMSC.

The International Mobile Subscriber Identifier, if it exists. This would originate from a SIM card. If the IMSI is unknown, this will contain an empty string ("").

Emitted when the IMSI for the connection changes. This sort of thing is rare, but could happen on cellular phones that allow hot-swapping of SIM cards. In the case of SIM swapping, this signal would be emitted twice; the first time while the SIM is being ejected (with an empty string), and the second time after a new SIM has been inserted (assuming that the IMSI can be determined from the new SIM). The new IMSI value. This may be an empty string in the case where the IMSI is being reset or removed.

Determines how to encode SMSes containing characters that do not fit into a non-Unicode character set. If False (which SHOULD be the default), messages will be encoded as UCS-2 and sent with no loss of fidelity (at the potential financial cost of using twice as many SMSes); if True, the message will be recoded in an implementation‐specific way to fit into a GSM reduced character set.

Hint for the connection manager for the GSM character set that should be used to send SMSes. The connection manager SHOULD follow this hint unless it has other ways to determine a better encoding. If the value is "gsm" (which SHOULD be the default), SMSes will be encoded in the normal 7-bit GSM character set, eventually falling back to UCS-2; see the MessageReducedCharacterSet property for details. Other valid character sets are specified in the GSM standard and are, for instance, "turkey", "spain" or "portugal". If the SMS cannot be encoded using the requested character set the behaviour is implementation-specific, but it is RECOMMENDED that the connection manager should behave as if this property was set to "gsm".

telepathy-qt-0.9.3/spec/Channel_Dispatcher_Future.xml0000644000175200001440000004275312000056607025153 0ustar00collabora-develusers00000000000000 Copyright © 2008-2010 Collabora Ltd. Copyright © 2008-2009 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.

This interface contains functionality which we intend to incorporate into the ChannelDispatcher interface in future. It should be considered to be conceptually part of the core ChannelDispatcher interface, but without API or ABI guarantees.

Support for this method is indicated by the SupportsRequestHints property. Clients MUST recover from this method being unsupported by falling back to CreateChannel.

Start a request to create a channel. This initially just creates a ChannelRequest object, which can be used to continue the request and track its success or failure.

The request can take a long time - in the worst case, the channel dispatcher has to ask the account manager to put the account online, the account manager has to ask the operating system to obtain an Internet connection, and the operating system has to ask the user whether to activate an Internet connection using an on-demand mechanism like dialup.

This means that using a single D-Bus method call and response to represent the whole request will tend to lead to that call timing out, which is not the behaviour we want.

If this method is called for an Account that is disabled, invalid or otherwise unusable, no error is signalled until ChannelRequest.Proceed is called, at which point ChannelRequest.Failed is emitted with an appropriate error.

This means there's only one code path for errors, apart from InvalidArgument for "that request makes no sense".

It also means that the request will proceed if the account is enabled after calling CreateChannel, but before calling Proceed.

The Account for which the new channel is to be created.

A dictionary containing desirable properties. This has the same semantics as the corresponding parameter to Connection.Interface.Requests.CreateChannel.

Certain properties will not necessarily make sense in this dictionary: for instance, TargetHandle can only be given if the requester is able to interact with a Connection to the desired account.

The time at which user action occurred, or 0 if this channel request is for some reason not involving user action. The UserActionTime property will be set to this value, and it will eventually be passed as the User_Action_Time parameter of HandleChannels.

Either the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable. The channel dispatcher SHOULD dispatch as many as possible of the resulting channels (ideally, all of them) to that handler—irrespective of whether that handler's HandlerChannelFilter matches the channel—and SHOULD remember the preferred handler so it can try to dispatch subsequent channels in the same bundle to the same handler.

This must be the well-known bus name, not the unique name, to ensure that all handlers do indeed have the Client API, and the Client object on the handler can be located easily.

This is partly so the channel dispatcher can call HandleChannels on it, and partly so the channel dispatcher can recover state if it crashes and is restarted.

The filter should be disregarded for ease of use of this interface: clients will usually use this argument to request channels be sent to themself, and this should trump the filter not matching. This also allows a client to become the handler for a channel produced by one of its own requests, while not being a candidate to handle other channels of that type.

If this is a well-known bus name and the handler has the Requests interface, the channel dispatcher SHOULD call AddRequest on that Handler after this method has returned.

This ordering allows a Handler which calls CreateChannel with itself as the preferred handler to associate the call to AddRequest with that call.

This is copied to the ChannelRequest that is returned, as the PreferredHandler property.

Previously, the spec didn't say that this should disregard the handler's filter. This has been implemented since telepathy-mission-control 5.3.2.

Additional information about the channel request, which will be used as the value for the resulting request's Hints property, but will not otherwise be interpreted by the Channel Dispatcher.

See the Hints property's documentation for rationale.

A ChannelRequest object. The Preferred_Handler is syntactically invalid or does not start with org.freedesktop.Telepathy.Client., the Account does not exist, or one of the Requested_Properties is invalid
Support for this method is indicated by the SupportsRequestHints property. Clients MUST recover from this method being unsupported by falling back to EnsureChannel.

Start a request to ensure that a channel exists, creating it if necessary. This initially just creates a ChannelRequest object, which can be used to continue the request and track its success or failure.

If this method is called for an Account that is disabled, invalid or otherwise unusable, no error is signalled until ChannelRequest.Proceed is called, at which point ChannelRequest.Failed is emitted with an appropriate error.

The rationale is as for CreateChannel.

The Account for which the new channel is to be created.

A dictionary containing desirable properties. This has the same semantics as the corresponding parameter to Connection.Interface.Requests.EnsureChannel.

Certain properties will not necessarily make sense in this dictionary: for instance, TargetHandle can only be given if the requester is able to interact with a Connection to the desired account.

The time at which user action occurred, or 0 if this channel request is for some reason not involving user action.

This parameter is used in the same way as the corresponding parameter to CreateChannelWithHints.

Either the well-known bus name (starting with org.freedesktop.Telepathy.Client.) of the preferred handler for this channel, or an empty string to indicate that any handler would be acceptable. The behaviour and rationale are the same as for the corresponding parameter to CreateChannelWithHints, except as noted here.

If any new channels are created in response to this request, the channel dispatcher SHOULD dispatch as many as possible of the resulting channels (ideally, all of them) to that handler, and SHOULD remember the preferred handler so it can try to dispatch subsequent channels in the same bundle to the same handler. If the requested channel already exists (that is, Connection.Interface.Requests.EnsureChannel returns Yours=False) then the channel dispatcher SHOULD re-dispatch the channel to its existing handler, and MUST NOT dispatch it to this client (unless it is the existing handler); the request is still deemed to have succeeded in this case.

An address book application, for example, might call EnsureChannel to ensure that a text channel with a particular contact is displayed to the user; it does not care whether a new channel was made. An IM client might call EnsureChannel in response to the user double-clicking an entry in the contact list, with itself as the Preferred_Handler; if the user already has a conversation with that contact in another application, they would expect the existing window to be presented, rather than their double-click leading to an error message. So the request should succeed, even if its Preferred_Handler is not used.

Additional information about the channel request, which will be used as the value for the resulting request's Hints property. A ChannelRequest object. The Preferred_Handler is syntactically invalid or does not start with org.freedesktop.Telepathy.Client., the Account does not exist, or one of the Requested_Properties is invalid
If True, the channel dispatcher is new enough to support CreateChannelWithHints and EnsureChannelWithHints, in addition to the older CreateChannel and EnsureChannel. methods. If False or missing, only the metadata-less variants are supported.
telepathy-qt-0.9.3/tests/0000755000175200001440000000000012000056607017556 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/tests/telepathy/0000755000175200001440000000000012000056607021555 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/tests/telepathy/profiles/0000755000175200001440000000000012000056607023400 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/tests/telepathy/profiles/test-profile.profile0000644000175200001440000000301512000056607027376 0ustar00collabora-develusers00000000000000 TestProfile profile.com 1111 1 org.freedesktop.Telepathy.Channel.Type.Text 3 org.freedesktop.Telepathy.Channel.Type.Text telepathy-qt-0.9.3/tests/telepathy/profiles/test-profile-non-im-type.profile0000644000175200001440000000050612000056607031552 0ustar00collabora-develusers00000000000000 TestProfile telepathy-qt-0.9.3/tests/telepathy/profiles/test-profile-malformed.profile0000644000175200001440000000017312000056607031344 0ustar00collabora-develusers00000000000000 telepathy-qt-0.9.3/tests/telepathy/profiles/test-profile-invalid-service-id.profile0000644000175200001440000000221012000056607033046 0ustar00collabora-develusers00000000000000 TestProfile profile.com 1111 3 org.freedesktop.Telepathy.Channel.Type.Text telepathy-qt-0.9.3/tests/telepathy/managers/0000755000175200001440000000000012000056607023352 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/tests/telepathy/managers/spurious.manager0000644000175200001440000000120312000056607026573 0ustar00collabora-develusers00000000000000[ConnectionManager] [Protocol normal] param-account=s required register param-password=s required register secret param-register=b default-register=true RequestableChannelClasses=text status-available=2 settable message status-offline=1 settable status-away=3 settable status-xa=4 [text] org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.Text org.freedesktop.Telepathy.Channel.TargetHandleType u=1 allowed=org.freedesktop.Telepathy.Channel.TargetHandle;org.freedesktop.Telepathy.Channel.TargetID; [Protocol weird] param-com.example.Bork.Bork.Bork=u dbus-property default-com.example.Bork.Bork.Bork=42 telepathy-qt-0.9.3/tests/telepathy/managers/test-manager-file-malformed-keyfile.manager0000644000175200001440000000007412000056607033605 0ustar00collabora-develusers00000000000000[Protocol foo [Protocol bar param-account = s required = = telepathy-qt-0.9.3/tests/telepathy/managers/test-manager-file-invalid-signature.manager0000644000175200001440000000421312000056607033635 0ustar00collabora-develusers00000000000000[Protocol foo] param-account = s required param-password = s required param-encryption-key = s secret param-port = q param-register = b param-server-list = as default-account = foo@default default-port = 1234 default-server-list = foo;bar; [Protocol bar] param-account = s required param-encryption-key = s required secret param-password = s required param-port = q param-register = b param-server-list = as default-account = bar@default default-port = 4321 default-server-list = bar;foo; [Protocol somewhat-pathological] # the value is "hello world" param-foo = s required default-foo = hello world # the value is "list;of;misc;" (it's not parsed as a list) param-semicolons=s secret default-semicolons=list;of;misc; # the values is a list ["list", "of", "misc"] param-list = as default-list = list;of;misc; # the spec says this is invalid but we should probably be permissive param-unterminated-list = as default-unterminated-list = list;of;misc # the value is a list ["list", " of", " misc "] (spaces significant) param-spaces-in-list = as default-spaces-in-list = list; of; misc ; # the value is a list ["list;of", "misc"] param-escaped-semicolon-in-list = as default-escaped-semicolon-in-list = list\;of;misc; # the value is a list ["list\", "of", "misc"] param-doubly-escaped-semicolon-in-list = as default-doubly-escaped-semicolon-in-list = list\\;of;misc; # the value is a list ["list\;of", "misc"] param-triply-escaped-semicolon-in-list = as default-triply-escaped-semicolon-in-list = list\\\;of;misc; # the value is an empty list param-empty-list = as default-empty-list = # the value is a list of empty string param-list-of-empty-string = as default-list-of-empty-string = ; # this is probably technically a Desktop Entry spec violation? # we should be permissive, interpreting this as either "foo\;bar" or "foo;bar" # seems reasonable param-escaped-semicolon = s default-escaped-semicolon = foo\;bar # all the other types param-object = o default-object = /misc param-q = q default-q = 42 param-u = u default-u = 42 param-t = t default-t = 42 param-n = n default-n = -42 param-i = i default-i = -42 param-x = x default-x = -42 param-d = 42.0 default-d = 42.0 telepathy-qt-0.9.3/tests/telepathy/managers/protocol.manager0000644000175200001440000000203112000056607026543 0ustar00collabora-develusers00000000000000[ConnectionManager] Interfaces= [Protocol protocol] Interfaces=org.freedesktop.Telepathy.Protocol.Interface.Addressing;org.freedesktop.Telepathy.Protocol.Interface.Avatars;org.freedesktop.Telepathy.Protocol.Interface.Presence; param-account=s required register ConnectionInterfaces=org.freedesktop.Telepathy.Connection.Interface.Contacts; RequestableChannelClasses=1-1-text; VCardField=x-telepathy-protocol EnglishName=Telepathy Protocol Icon=im-protocol status-offline=1 status-available=2 settable message SupportedAvatarMIMETypes=image/jpeg; MinimumAvatarHeight=32 RecommendedAvatarHeight=64 MaximumAvatarHeight=96 MinimumAvatarWidth=32 RecommendedAvatarWidth=64 MaximumAvatarWidth=96 MaximumAvatarBytes=37748736 AddressableVCardFields=x-protocol; AddressableURISchemes=protocol; [1-1-text] org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.Text org.freedesktop.Telepathy.Channel.TargetHandleType u=1 allowed=org.freedesktop.Telepathy.Channel.TargetHandle;org.freedesktop.Telepathy.Channel.TargetID; telepathy-qt-0.9.3/tests/telepathy/managers/test-manager-file.manager0000644000175200001440000000622212000056607030214 0ustar00collabora-develusers00000000000000[Protocol foo] param-account = s required param-password = s required param-encryption-key = s secret param-port = q param-register = b param-server-list = as default-account = foo@default default-port = 1234 default-server-list = foo;bar; status-offline=1 status-dnd=6 settable status-available=2 settable message SupportedAvatarMIMETypes=image/png;image/jpeg;image/gif; MinimumAvatarHeight=32 RecommendedAvatarHeight=64 MaximumAvatarHeight=96 MinimumAvatarWidth=32 RecommendedAvatarWidth=64 MaximumAvatarWidth=96 MaximumAvatarBytes=8192 VCardField=x-foo EnglishName=Foo Icon=im-foo RequestableChannelClasses=ft;foo text; AddressableVCardFields=x-foo; AddressableURISchemes=foo; [ft] org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.FileTransfer org.freedesktop.Telepathy.Channel.TargetHandleType u=1 org.freedesktop.Telepathy.Channel.Type.FileTransfer.ContentHashType u=1 allowed=org.freedesktop.Telepathy.Channel.TargetHandle;org.freedesktop.Telepathy.Channel.TargetID; [foo text] org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.Text org.freedesktop.Telepathy.Channel.TargetHandleType u=1 allowed=org.freedesktop.Telepathy.Channel.TargetHandle;org.freedesktop.Telepathy.Channel.TargetID; [Protocol bar] param-account = s required param-encryption-key = s required secret param-password = s required param-port = q param-register = b param-server-list = as default-account = bar@default default-port = 4321 default-server-list = bar;foo; [Protocol somewhat-pathological] # the value is "hello world" param-foo = s required default-foo = hello world # the value is "list;of;misc;" (it's not parsed as a list) param-semicolons=s secret default-semicolons=list;of;misc; # the values is a list ["list", "of", "misc"] param-list = as default-list = list;of;misc; # the spec says this is invalid but we should probably be permissive param-unterminated-list = as default-unterminated-list = list;of;misc # the value is a list ["list", " of", " misc "] (spaces significant) param-spaces-in-list = as default-spaces-in-list = list; of; misc ; # the value is a list ["list;of", "misc"] param-escaped-semicolon-in-list = as default-escaped-semicolon-in-list = list\;of;misc; # the value is a list ["list\", "of", "misc"] param-doubly-escaped-semicolon-in-list = as default-doubly-escaped-semicolon-in-list = list\\;of;misc; # the value is a list ["list\;of", "misc"] param-triply-escaped-semicolon-in-list = as default-triply-escaped-semicolon-in-list = list\\\;of;misc; # the value is an empty list param-empty-list = as default-empty-list = # the value is a list of empty string param-list-of-empty-string = as default-list-of-empty-string = ; # this is probably technically a Desktop Entry spec violation? # we should be permissive, interpreting this as either "foo\;bar" or "foo;bar" # seems reasonable param-escaped-semicolon = s default-escaped-semicolon = foo\;bar # all the other types param-object = o default-object = /misc param-q = q default-q = 42 param-u = u default-u = 42 param-t = t default-t = 42 param-n = n default-n = -42 param-i = i default-i = -42 param-x = x default-x = -42 param-d = d default-d = 42.0 telepathy-qt-0.9.3/tests/file-transfer-channel-creation-properties.cpp0000644000175200001440000001343412000056607030432 0ustar00collabora-develusers00000000000000#include #include using namespace Tp; class TestFileTransferCreationProperties : public QObject { Q_OBJECT private Q_SLOTS: void testFileTransferCreationPropertiesDefaultConstructor(); void testFileTransferCreationPropertiesDefaultByMandatoryProperties(); void testFileTransferCreationPropertiesDefaultByPath(); void testFileTransferCreationPropertiesDefaultByPathFail(); }; void TestFileTransferCreationProperties::testFileTransferCreationPropertiesDefaultConstructor() { FileTransferChannelCreationProperties ftprops; QVERIFY(!ftprops.isValid()); QVERIFY(ftprops.suggestedFileName().isEmpty()); QVERIFY(ftprops.contentType().isEmpty()); QCOMPARE(ftprops.size(), (qulonglong)0); QVERIFY(!ftprops.hasContentHash()); QCOMPARE(ftprops.contentHashType(), FileHashTypeNone); QVERIFY(ftprops.contentHash().isEmpty()); ftprops.setContentHash(FileHashTypeMD5, QLatin1String("ffffffffffffffff")); QVERIFY(!ftprops.isValid()); QVERIFY(!ftprops.hasContentHash()); QCOMPARE(ftprops.contentHashType(), FileHashTypeNone); QVERIFY(ftprops.contentHash().isEmpty()); QVERIFY(!ftprops.hasDescription()); QVERIFY(ftprops.description().isEmpty()); ftprops.setDescription(QLatin1String("description")); QVERIFY(!ftprops.isValid()); QVERIFY(!ftprops.hasDescription()); QVERIFY(ftprops.description().isEmpty()); QVERIFY(!ftprops.hasLastModificationTime()); QVERIFY(!ftprops.lastModificationTime().isValid()); ftprops.setLastModificationTime(QDateTime::currentDateTime()); QVERIFY(!ftprops.isValid()); QVERIFY(!ftprops.hasLastModificationTime()); QVERIFY(!ftprops.lastModificationTime().isValid()); QVERIFY(!ftprops.hasUri()); QVERIFY(ftprops.uri().isEmpty()); ftprops.setUri(QLatin1String("file:///path/filename")); QVERIFY(!ftprops.isValid()); QVERIFY(!ftprops.hasUri()); QVERIFY(ftprops.uri().isEmpty()); } void TestFileTransferCreationProperties::testFileTransferCreationPropertiesDefaultByMandatoryProperties() { FileTransferChannelCreationProperties ftprops(QLatin1String("suggestedFileName"), QLatin1String("application/octet-stream"), (qulonglong)10000); QCOMPARE(ftprops.isValid(), true); QCOMPARE(ftprops.suggestedFileName(), QLatin1String("suggestedFileName")); QCOMPARE(ftprops.contentType(), QLatin1String("application/octet-stream")); QCOMPARE(ftprops.size(), (qulonglong)10000); QVERIFY(!ftprops.hasContentHash()); QCOMPARE(ftprops.contentHashType(), FileHashTypeNone); QVERIFY(ftprops.contentHash().isEmpty()); ftprops.setContentHash(FileHashTypeMD5, QLatin1String("ffffffffffffffff")); QVERIFY(ftprops.isValid()); QVERIFY(ftprops.hasContentHash()); QCOMPARE(ftprops.contentHashType(), FileHashTypeMD5); QCOMPARE(ftprops.contentHash(), QLatin1String("ffffffffffffffff")); QVERIFY(!ftprops.hasDescription()); QVERIFY(ftprops.description().isEmpty()); ftprops.setDescription(QLatin1String("description")); QVERIFY(ftprops.isValid()); QVERIFY(ftprops.hasDescription()); QCOMPARE(ftprops.description(), QLatin1String("description")); QVERIFY(!ftprops.hasLastModificationTime()); QVERIFY(!ftprops.lastModificationTime().isValid()); QDateTime now = QDateTime::currentDateTime(); ftprops.setLastModificationTime(now); QVERIFY(ftprops.hasLastModificationTime()); QCOMPARE(ftprops.lastModificationTime(), now); QVERIFY(!ftprops.hasUri()); QVERIFY(ftprops.uri().isEmpty()); ftprops.setUri(QLatin1String("file:///path/filename")); QVERIFY(ftprops.isValid()); QVERIFY(ftprops.hasUri()); QCOMPARE(ftprops.uri(), QLatin1String("file:///path/filename")); } void TestFileTransferCreationProperties::testFileTransferCreationPropertiesDefaultByPath() { // Test constructor by local file path with existing file QString filePath = QCoreApplication::applicationFilePath(); QFileInfo fileInfo(filePath); QUrl fileUri = QUrl::fromLocalFile(filePath); FileTransferChannelCreationProperties ftprops(filePath, QLatin1String("application/octet-stream")); QVERIFY(ftprops.isValid()); QCOMPARE(ftprops.suggestedFileName(), fileInfo.fileName()); QCOMPARE(ftprops.contentType(), QLatin1String("application/octet-stream")); QCOMPARE(ftprops.size(), (quint64)fileInfo.size()); QVERIFY(!ftprops.hasContentHash()); QCOMPARE(ftprops.contentHashType(), FileHashTypeNone); QVERIFY(ftprops.contentHash().isEmpty()); QVERIFY(!ftprops.hasDescription()); QVERIFY(ftprops.description().isEmpty()); QVERIFY(ftprops.hasLastModificationTime()); QCOMPARE(ftprops.lastModificationTime(), fileInfo.lastModified()); QVERIFY(ftprops.hasUri()); QCOMPARE(ftprops.uri(), fileUri.toString()); } void TestFileTransferCreationProperties::testFileTransferCreationPropertiesDefaultByPathFail() { // Test constructor by local file path with non-existing file FileTransferChannelCreationProperties ftprops(QLatin1String("/non-existent-path/non-existent-filename"), QLatin1String("application/octet-stream")); QVERIFY(!ftprops.isValid()); QVERIFY(ftprops.suggestedFileName().isEmpty()); QVERIFY(ftprops.contentType().isEmpty()); QCOMPARE(ftprops.size(), (qulonglong)0); QVERIFY(!ftprops.hasContentHash()); QCOMPARE(ftprops.contentHashType(), FileHashTypeNone); QVERIFY(ftprops.contentHash().isEmpty()); QVERIFY(!ftprops.hasDescription()); QVERIFY(ftprops.description().isEmpty()); QVERIFY(!ftprops.hasLastModificationTime()); QVERIFY(!ftprops.lastModificationTime().isValid()); QVERIFY(!ftprops.hasUri()); QVERIFY(ftprops.uri().isEmpty()); } QTEST_MAIN(TestFileTransferCreationProperties) #include "_gen/file-transfer-channel-creation-properties.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus-1/0000755000175200001440000000000012000056607020651 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/tests/dbus-1/session.conf.in0000644000175200001440000000176212000056607023616 0ustar00collabora-develusers00000000000000 session unix:tmpdir=/tmp @abs_top_builddir@/tests/dbus-1/services/ telepathy-qt-0.9.3/tests/dbus-1/services/0000755000175200001440000000000012000056607022474 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/tests/dbus-1/services/CMakeLists.txt0000644000175200001440000000037612000056607025242 0ustar00collabora-develusers00000000000000set(TEST_PYTHON ${PYTHON_EXECUTABLE}) set(abs_top_srcdir ${CMAKE_SOURCE_DIR}) configure_file(account-manager.service.in ${CMAKE_CURRENT_BINARY_DIR}/account-manager.service) configure_file(spurious.service.in ${CMAKE_CURRENT_BINARY_DIR}/spurious.service) telepathy-qt-0.9.3/tests/dbus-1/services/spurious.service.in0000644000175200001440000000013212000056607026350 0ustar00collabora-develusers00000000000000[D-BUS Service] Name=org.freedesktop.Telepathy.ConnectionManager.spurious Exec=/bin/false telepathy-qt-0.9.3/tests/dbus-1/services/account-manager.service.in0000644000175200001440000000020612000056607027525 0ustar00collabora-develusers00000000000000[D-BUS Service] Name=org.freedesktop.Telepathy.AccountManager Exec=@TEST_PYTHON@ @abs_top_srcdir@/tests/lib/python/account-manager.py telepathy-qt-0.9.3/tests/dbus-1/CMakeLists.txt0000644000175200001440000000021712000056607023411 0ustar00collabora-develusers00000000000000set(abs_top_builddir ${CMAKE_BINARY_DIR}) configure_file(session.conf.in ${CMAKE_CURRENT_BINARY_DIR}/session.conf) add_subdirectory(services) telepathy-qt-0.9.3/tests/lib/0000755000175200001440000000000012000056607020324 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/tests/lib/python/0000755000175200001440000000000012000056607021645 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/tests/lib/python/account-manager.py0000755000175200001440000003724312000056607025277 0ustar00collabora-develusers00000000000000#!/usr/bin/python # # A small implementation of a Telepathy AccountManager. import sys import re import dbus from dbus.bus import NAME_FLAG_DO_NOT_QUEUE, REQUEST_NAME_REPLY_EXISTS from dbus.mainloop.glib import DBusGMainLoop from dbus.service import Object, method, signal from gobject import MainLoop TP = 'org.freedesktop.Telepathy' AM_IFACE = TP + '.AccountManager' AM_BUS_NAME = AM_IFACE AM_OBJECT_PATH = '/' + AM_IFACE.replace('.', '/') ACCOUNT_IFACE = TP + '.Account' ACCOUNT_IFACE_AVATAR_IFACE = ACCOUNT_IFACE + '.Interface.Avatar' ACCOUNT_OBJECT_PATH_BASE = '/' + ACCOUNT_IFACE.replace('.', '/') + '/' Connection_Status_Connected = dbus.UInt32(0) Connection_Status_Connecting = dbus.UInt32(1) Connection_Status_Disconnected = dbus.UInt32(2) Connection_Status_Reason_None_Specified = dbus.UInt32(0) Connection_Status_Reason_Requested = dbus.UInt32(1) Connection_Status_Reason_Network_Error = dbus.UInt32(2) Connection_Presence_Type_Offline = dbus.UInt32(1) Connection_Presence_Type_Available = dbus.UInt32(2) VALID_CONNECTION_MANAGER_NAME = re.compile(r'^[A-Za-z0-9][_A-Za-z0-9]+$') VALID_PROTOCOL_NAME = re.compile(r'^[A-Za-z0-9][-A-Za-z0-9]+$') TELEPATHY_ERROR = "org.freedesktop.Telepathy.Error" TELEPATHY_ERROR_DISCONNECTED = TELEPATHY_ERROR + ".Disconnected" TELEPATHY_ERROR_CANCELLED = TELEPATHY_ERROR + ".Cancelled" TELEPATHY_ERROR_NETWORK_ERROR = TELEPATHY_ERROR + ".NetworkError" class AccountManager(Object): def __init__(self, bus=None): #: map from object path to Account self._valid_accounts = {} #: map from object path to Account self._invalid_accounts = {} if bus is None: bus = dbus.SessionBus() ret = bus.request_name(AM_BUS_NAME, NAME_FLAG_DO_NOT_QUEUE) if ret == REQUEST_NAME_REPLY_EXISTS: raise dbus.NameExistsException(AM_BUS_NAME) Object.__init__(self, bus, AM_OBJECT_PATH) def _am_props(self): return dbus.Dictionary({ 'Interfaces': dbus.Array([], signature='s'), 'ValidAccounts': dbus.Array(self._valid_accounts.keys(), signature='o'), 'InvalidAccounts': dbus.Array(self._invalid_accounts.keys(), signature='o'), 'SupportedAccountProperties': dbus.Array([ACCOUNT_IFACE + '.Enabled'], signature='s'), }, signature='sv') @method(dbus.PROPERTIES_IFACE, in_signature='s', out_signature='a{sv}') def GetAll(self, iface): if iface == AM_IFACE: return self._am_props() else: raise ValueError('No such interface') @method(dbus.PROPERTIES_IFACE, in_signature='ss', out_signature='v') def Get(self, iface, prop): if iface == AM_IFACE: props = self._am_props() else: raise ValueError('No such interface') if prop in props: return props[prop] else: raise ValueError('No such property') @method(dbus.PROPERTIES_IFACE, in_signature='ssv') def Set(self, iface, prop, value): raise NotImplementedError('No mutable properties') @signal(AM_IFACE, signature='ob') def AccountValidityChanged(self, path, valid): if valid: assert path in self._invalid_accounts assert path not in self._valid_accounts self._valid_accounts[path] = self._invalid_accounts.pop(path) else: assert path in self._valid_accounts assert path not in self._invalid_accounts self._invalid_accounts[path] = self._valid_accounts.pop(path) print "Emitting AccountValidityChanged(%s, %s)" % (path, valid) @signal(AM_IFACE, signature='o') def AccountRemoved(self, path): assert path in self._valid_accounts or path in self._invalid_accounts self._valid_accounts.pop(path, None) self._invalid_accounts.pop(path, None) print "Emitting AccountRemoved(%s)" % path @method(AM_IFACE, in_signature='sssa{sv}a{sv}', out_signature='o') def CreateAccount(self, cm, protocol, display_name, parameters, properties): if not VALID_CONNECTION_MANAGER_NAME.match(cm): raise ValueError('Invalid CM name') if not VALID_PROTOCOL_NAME.match(protocol): raise ValueError('Invalid protocol name') if properties: raise ValueError('This AM does not support setting properties at' 'account creation') base = ACCOUNT_OBJECT_PATH_BASE + cm + '/' + protocol.replace('-', '_') # FIXME: This is a stupid way to generate the paths - we should # incorporate the display name somehow. However, it's spec-compliant i = 0 while 1: path = '%s/Account%d' % (base, i) if (path not in self._valid_accounts and path not in self._invalid_accounts): account = Account(self, path, '%s (account %d)' % (display_name, i), parameters) # put it in the wrong set and move it to the right one - # that's probably the simplest implementation if account._is_valid(): self._invalid_accounts[path] = account self.AccountValidityChanged(path, True) assert path not in self._invalid_accounts assert path in self._valid_accounts else: self._valid_accounts[path] = account self.AccountValidityChanged(path, False) assert path not in self._valid_accounts assert path in self._invalid_accounts return path i += 1 raise AssertionError('Not reached') class Account(Object): def __init__(self, am, path, display_name, parameters): Object.__init__(self, am.connection, path) self._am = am self._connection = dbus.ObjectPath('/') self._connection_status = Connection_Status_Disconnected self._connection_status_reason = Connection_Status_Reason_None_Specified self._connection_error = u'' self._connection_error_details = dbus.Dictionary({}, signature='sv') self._service = u'' self._display_name = display_name self._icon = u'bob.png' self._enabled = True self._nickname = u'Bob' self._parameters = parameters self._has_been_online = False self._connect_automatically = False self._normalized_name = u'bob' self._automatic_presence = dbus.Struct( (Connection_Presence_Type_Available, 'available', ''), signature='uss') self._current_presence = dbus.Struct( (Connection_Presence_Type_Offline, 'offline', ''), signature='uss') self._requested_presence = dbus.Struct( (Connection_Presence_Type_Offline, 'offline', ''), signature='uss') self._avatar = dbus.Struct( (dbus.ByteArray(''), 'image/png'), signature='ays') self._interfaces = [ACCOUNT_IFACE_AVATAR_IFACE,] def _is_valid(self): return True @method(ACCOUNT_IFACE, in_signature='a{sv}as', out_signature='as') def UpdateParameters(self, set_, unset): print ("%s: entering UpdateParameters(\n %r,\n %r \n)" % (self.__dbus_object_path__, set_, unset)) for (key, value) in set_.iteritems(): self._parameters[key] = value for key in unset: self._parameters.pop(key, None) print ("%s: UpdateParameters(...) -> success" % self.__dbus_object_path__) self.AccountPropertyChanged({'Parameters': self._parameters}) return [] @signal(ACCOUNT_IFACE, signature='a{sv}') def AccountPropertyChanged(self, delta): print ("%s: emitting AccountPropertyChanged(\n %r \n)" % (self.__dbus_object_path__, delta)) @signal(ACCOUNT_IFACE_AVATAR_IFACE, signature='') def AvatarChanged(self): print ("%s: emitting AvatarChanged" % (self.__dbus_object_path__)) @method(ACCOUNT_IFACE, in_signature='', out_signature='') def Remove(self): print "%s: entering Remove()" % self.__dbus_object_path__ self.Removed() self.remove_from_connection() print "%s: Remove() -> success" % self.__dbus_object_path__ @signal(ACCOUNT_IFACE, signature='') def Removed(self): self._am.AccountRemoved(self.__dbus_object_path__) print "%s: Emitting Removed()" % self.__dbus_object_path__ def _account_props(self): return dbus.Dictionary({ 'Interfaces': dbus.Array(self._interfaces, signature='s'), 'Service': self._service, 'DisplayName': self._display_name, 'Icon': self._icon, 'Valid': self._is_valid(), 'Enabled': self._enabled, 'Nickname': self._nickname, 'Parameters': self._parameters, 'AutomaticPresence': self._automatic_presence, 'CurrentPresence': self._current_presence, 'RequestedPresence': self._requested_presence, 'HasBeenOnline': self._has_been_online, 'ConnectAutomatically': self._connect_automatically, 'Connection': self._connection, 'ConnectionStatus': self._connection_status, 'ConnectionStatusReason': self._connection_status_reason, 'ConnectionError': self._connection_error, 'ConnectionErrorDetails': self._connection_error_details, 'NormalizedName': self._normalized_name, }, signature='sv') def _account_avatar_props(self): return dbus.Dictionary({ 'Avatar': self._avatar }, signature='sv') @method(dbus.PROPERTIES_IFACE, in_signature='s', out_signature='a{sv}') def GetAll(self, iface): if iface == ACCOUNT_IFACE: return self._account_props() elif iface == ACCOUNT_IFACE_AVATAR_IFACE: return self._account_avatar_props() else: raise ValueError('No such interface') @method(dbus.PROPERTIES_IFACE, in_signature='ss', out_signature='v') def Get(self, iface, prop): if iface == ACCOUNT_IFACE: props = self._account_props() elif iface == ACCOUNT_IFACE_AVATAR_IFACE: props = self._account_avatar_props() else: raise ValueError('No such interface') if prop in props: return props[prop] else: raise ValueError('No such property') @method(dbus.PROPERTIES_IFACE, in_signature='ssv', byte_arrays=True) def Set(self, iface, prop, value): if iface == ACCOUNT_IFACE: props = {} if prop == 'Service': self._service = unicode(value) elif prop == 'DisplayName': self._display_name = unicode(value) elif prop == 'Icon': self._icon = unicode(value) elif prop == 'Enabled': self._enabled = bool(value) elif prop == 'Nickname': self._nickname = unicode(value) elif prop == 'AutomaticPresence': self._automatic_presence = dbus.Struct( (dbus.UInt32(value[0]), unicode(value[1]), unicode(value[2])), signature='uss') elif prop == 'RequestedPresence': self._requested_presence = dbus.Struct( (dbus.UInt32(value[0]), unicode(value[1]), unicode(value[2])), signature='uss') # pretend to put the account online, if the presence != offline if value[0] != Connection_Presence_Type_Offline: # simulate that we are connecting/changing presence props["ChangingPresence"] = True if self._connection_status == Connection_Status_Disconnected: self._connection_status = Connection_Status_Connecting props["ConnectionStatus"] = self._connection_status props[prop] = self._account_props()[prop] self.AccountPropertyChanged(props) props["ChangingPresence"] = False if "(deny)" in self._requested_presence[2]: self._connection_status = Connection_Status_Disconnected self._connection_status_reason = Connection_Status_Reason_Network_Error self._connection_error = TELEPATHY_ERROR_NETWORK_ERROR self._connection_error_details = dbus.Dictionary( {'debug-message': u'You asked for it'}, signature='sv') self._current_presence = dbus.Struct( (Connection_Presence_Type_Offline, 'offline', ''), signature='uss') else: self._connection_status = Connection_Status_Connected self._connection_status_reason = Connection_Status_Reason_None_Specified self._connection_error = u'' self._connection_error_details = dbus.Dictionary({}, signature='sv') self._current_presence = self._requested_presence if self._has_been_online == False: self._has_been_online = True props["HasBeenOnline"] = self._has_been_online else: self._connection_status = Connection_Status_Disconnected self._connection_status_reason = Connection_Status_Reason_Requested self._connection_error = TELEPATHY_ERROR_CANCELLED self._connection_error_details = dbus.Dictionary( {'debug-message': u'You asked for it'}, signature='sv') self._current_presence = dbus.Struct( (Connection_Presence_Type_Offline, 'offline', ''), signature='uss') props["ConnectionStatus"] = self._connection_status props["ConnectionStatusReason"] = self._connection_status_reason props["ConnectionError"] = self._connection_error props["ConnectionErrorDetails"] = self._connection_error_details props["CurrentPresence"] = self._current_presence elif prop == 'ConnectAutomatically': self._connect_automatically = bool(value) elif prop == 'Connection': self._connection = dbus.ObjectPath(value) else: raise ValueError('Read-only or nonexistent property') props[prop] = self._account_props()[prop] self.AccountPropertyChanged(props) elif iface == ACCOUNT_IFACE_AVATAR_IFACE: if prop == 'Avatar': self._avatar = dbus.Struct( (dbus.ByteArray(value[0]), unicode(value[1])), signature='ays') self.AvatarChanged() else: raise ValueError('Nonexistent property') else: raise ValueError('No such interface') if __name__ == '__main__': DBusGMainLoop(set_as_default=True) try: am = AccountManager() except dbus.NameExistsException: print >> sys.stderr, 'AccountManager already running' sys.exit(1) print "AccountManager running..." mainloop = MainLoop() mainloop.run() telepathy-qt-0.9.3/tests/lib/glib-helpers/0000755000175200001440000000000012000056607022701 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/tests/lib/glib-helpers/test-conn-helper.cpp0000644000175200001440000003227512000056607026605 0ustar00collabora-develusers00000000000000#include "tests/lib/glib-helpers/test-conn-helper.h" #include "tests/lib/glib-helpers/_gen/test-conn-helper.moc.hpp" #define TP_QT_ENABLE_LOWLEVEL_API #include #include #include #include #include #include #include #include TestConnHelper::TestConnHelper(Test *parent, GType gType, const QString &account, const QString &protocol) : QObject(parent) { Tp::ChannelFactoryPtr channelFactory = Tp::ChannelFactory::create(QDBusConnection::sessionBus()); Tp::ContactFactoryPtr contactFactory = Tp::ContactFactory::create(); init(parent, channelFactory, contactFactory, gType, "account", account.toLatin1().constData(), "protocol", protocol.toLatin1().constData(), NULL); } TestConnHelper::TestConnHelper(Test *parent, GType gType, const char *firstPropertyName, ...) : QObject(parent) { Tp::ChannelFactoryPtr channelFactory = Tp::ChannelFactory::create(QDBusConnection::sessionBus()); Tp::ContactFactoryPtr contactFactory = Tp::ContactFactory::create(); va_list varArgs; va_start(varArgs, firstPropertyName); init(parent, channelFactory, contactFactory, gType, firstPropertyName, varArgs); va_end(varArgs); } TestConnHelper::TestConnHelper(Test *parent, const Tp::ChannelFactoryConstPtr &channelFactory, const Tp::ContactFactoryConstPtr &contactFactory, GType gType, const QString &account, const QString &protocol) : QObject(parent) { init(parent, channelFactory, contactFactory, gType, "account", account.toLatin1().constData(), "protocol", protocol.toLatin1().constData(), NULL); } TestConnHelper::TestConnHelper(Test *parent, const Tp::ChannelFactoryConstPtr &channelFactory, const Tp::ContactFactoryConstPtr &contactFactory, GType gType, const char *firstPropertyName, ...) : QObject(parent) { va_list varArgs; va_start(varArgs, firstPropertyName); init(parent, channelFactory, contactFactory, gType, firstPropertyName, varArgs); va_end(varArgs); } TestConnHelper::~TestConnHelper() { disconnect(); if (mService != 0) { g_object_unref(mService); mService = 0; } } void TestConnHelper::init(Test *parent, const Tp::ChannelFactoryConstPtr &channelFactory, const Tp::ContactFactoryConstPtr &contactFactory, GType gType, const char *firstPropertyName, ...) { va_list varArgs; va_start(varArgs, firstPropertyName); init(parent, channelFactory, contactFactory, gType, firstPropertyName, varArgs); va_end(varArgs); } void TestConnHelper::init(Test *parent, const Tp::ChannelFactoryConstPtr &channelFactory, const Tp::ContactFactoryConstPtr &contactFactory, GType gType, const char *firstPropertyName, va_list varArgs) { mParent = parent; mLoop = parent->mLoop; mService = g_object_new_valist(gType, firstPropertyName, varArgs); QVERIFY(mService != 0); gchar *connBusName; gchar *connPath; GError *error = 0; QVERIFY(tp_base_connection_register(TP_BASE_CONNECTION(mService), "testcm", &connBusName, &connPath, &error)); QVERIFY(error == 0); QVERIFY(connBusName != 0); QVERIFY(connPath != 0); mClient = Tp::Connection::create(QLatin1String(connBusName), QLatin1String(connPath), channelFactory, contactFactory); QCOMPARE(mClient->isReady(), false); g_free(connBusName); g_free(connPath); } QString TestConnHelper::objectPath() const { return mClient->objectPath(); } bool TestConnHelper::isValid() const { return mClient->isValid(); } bool TestConnHelper::isReady(const Tp::Features &features) const { return mClient->isReady(features); } bool TestConnHelper::enableFeatures(const Tp::Features &features) { mLoop->processEvents(); QObject::connect(mClient->becomeReady(features), SIGNAL(finished(Tp::PendingOperation*)), mParent, SLOT(expectSuccessfulCall(Tp::PendingOperation*))); return ((mLoop->exec() == 0) && mClient->isReady(features)); } bool TestConnHelper::connect(const Tp::Features &features) { mLoop->processEvents(); QObject::connect(mClient->lowlevel()->requestConnect(features), SIGNAL(finished(Tp::PendingOperation*)), mParent, SLOT(expectSuccessfulCall(Tp::PendingOperation*))); return ((mLoop->exec() == 0) && (mClient->status() == Tp::ConnectionStatusConnected) && mClient->isReady(features)); } bool TestConnHelper::disconnect() { if (!mClient->isValid()) { return false; } mLoop->processEvents(); QObject::connect(mClient.data(), SIGNAL(invalidated(Tp::DBusProxy*,QString,QString)), SLOT(expectConnInvalidated())); tp_base_connection_change_status(TP_BASE_CONNECTION(mService), TP_CONNECTION_STATUS_DISCONNECTED, TP_CONNECTION_STATUS_REASON_REQUESTED); return ((mLoop->exec() == 0) && !mClient->isValid() && (mClient->status() == Tp::ConnectionStatusDisconnected)); } QList TestConnHelper::contacts(const QStringList &ids, const Tp::Features &features) { mLoop->processEvents(); QList ret; Tp::PendingContacts *pc = mClient->contactManager()->contactsForIdentifiers(ids, features); mContactFeatures = features; QObject::connect(pc, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectContactsForIdentifiersFinished(Tp::PendingOperation*))); if (mLoop->exec() == 0) { ret = mContacts; } mContactFeatures.clear(); mContacts.clear(); return ret; } QList TestConnHelper::contacts(const Tp::UIntList &handles, const Tp::Features &features) { mLoop->processEvents(); QList ret; Tp::PendingContacts *pc = mClient->contactManager()->contactsForHandles(handles, features); mContactFeatures = features; QObject::connect(pc, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectContactsForHandlesFinished(Tp::PendingOperation*))); if (mLoop->exec() == 0) { ret = mContacts; } mContactFeatures.clear(); mContacts.clear(); return ret; } QList TestConnHelper::upgradeContacts(const QList &contacts, const Tp::Features &features) { mLoop->processEvents(); QList ret; Tp::PendingContacts *pc = mClient->contactManager()->upgradeContacts(contacts, features); mContactFeatures = features; QObject::connect(pc, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectUpgradeContactsFinished(Tp::PendingOperation*))); if (mLoop->exec() == 0) { ret = mContacts; } mContactFeatures.clear(); mContacts.clear(); return ret; } Tp::ChannelPtr TestConnHelper::createChannel(const QVariantMap &request) { mLoop->processEvents(); Tp::ChannelPtr ret; Tp::PendingChannel *pc = mClient->lowlevel()->createChannel(request); QObject::connect(pc, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectCreateChannelFinished(Tp::PendingOperation*))); if (mLoop->exec() == 0) { ret = mChannel; } mChannel.reset(); return ret; } Tp::ChannelPtr TestConnHelper::createChannel(const QString &channelType, const Tp::ContactPtr &target) { QVariantMap request; request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), channelType); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) Tp::HandleTypeContact); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandle"), target->handle()[0]); return createChannel(request); } Tp::ChannelPtr TestConnHelper::createChannel(const QString &channelType, Tp::HandleType targetHandleType, uint targetHandle) { QVariantMap request; request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), channelType); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) targetHandleType); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandle"), targetHandle); return createChannel(request); } Tp::ChannelPtr TestConnHelper::createChannel(const QString &channelType, Tp::HandleType targetHandleType, const QString &targetID) { QVariantMap request; request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), channelType); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) targetHandleType); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetID"), targetID); return ensureChannel(request); } Tp::ChannelPtr TestConnHelper::ensureChannel(const QVariantMap &request) { mLoop->processEvents(); Tp::ChannelPtr ret; Tp::PendingChannel *pc = mClient->lowlevel()->ensureChannel(request); QObject::connect(pc, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectEnsureChannelFinished(Tp::PendingOperation*))); if (mLoop->exec() == 0) { ret = mChannel; } mChannel.reset(); return ret; } Tp::ChannelPtr TestConnHelper::ensureChannel(const QString &channelType, const Tp::ContactPtr &target) { QVariantMap request; request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), channelType); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) Tp::HandleTypeContact); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandle"), target->handle()[0]); return ensureChannel(request); } Tp::ChannelPtr TestConnHelper::ensureChannel(const QString &channelType, Tp::HandleType targetHandleType, uint targetHandle) { QVariantMap request; request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), channelType); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) targetHandleType); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandle"), targetHandle); return ensureChannel(request); } Tp::ChannelPtr TestConnHelper::ensureChannel(const QString &channelType, Tp::HandleType targetHandleType, const QString &targetID) { QVariantMap request; request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), channelType); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) targetHandleType); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetID"), targetID); return ensureChannel(request); } void TestConnHelper::expectConnInvalidated() { mLoop->exit(0); } void TestConnHelper::expectContactsForIdentifiersFinished(Tp::PendingOperation *op) { Tp::PendingContacts *pc = qobject_cast(op); QCOMPARE(pc->isForHandles(), false); QCOMPARE(pc->isForIdentifiers(), true); QCOMPARE(pc->isUpgrade(), false); expectPendingContactsFinished(pc); } void TestConnHelper::expectContactsForHandlesFinished(Tp::PendingOperation *op) { Tp::PendingContacts *pc = qobject_cast(op); QCOMPARE(pc->isForHandles(), true); QCOMPARE(pc->isForIdentifiers(), false); QCOMPARE(pc->isUpgrade(), false); expectPendingContactsFinished(pc); } void TestConnHelper::expectUpgradeContactsFinished(Tp::PendingOperation *op) { Tp::PendingContacts *pc = qobject_cast(op); QCOMPARE(pc->isUpgrade(), true); expectPendingContactsFinished(pc); } void TestConnHelper::expectPendingContactsFinished(Tp::PendingContacts *pc) { QCOMPARE(pc->manager(), mClient->contactManager()); if (pc->isError()) { qWarning().nospace() << pc->errorName() << ": " << pc->errorMessage(); mContacts.clear(); mLoop->exit(1); } else { mContacts = pc->contacts(); Q_FOREACH (const Tp::ContactPtr &contact, mContacts) { QVERIFY(contact->requestedFeatures().contains(mContactFeatures)); } mLoop->exit(0); } } void TestConnHelper::expectCreateChannelFinished(Tp::PendingOperation *op) { if (op->isError()) { qWarning().nospace() << op->errorName() << ": " << op->errorMessage(); mChannel.reset(); mLoop->exit(1); } else { Tp::PendingChannel *pc = qobject_cast(op); QCOMPARE(pc->yours(), true); mChannel = pc->channel(); mLoop->exit(0); } } void TestConnHelper::expectEnsureChannelFinished(Tp::PendingOperation *op) { if (op->isError()) { qWarning().nospace() << op->errorName() << ": " << op->errorMessage(); mChannel.reset(); mLoop->exit(1); } else { Tp::PendingChannel *pc = qobject_cast(op); QCOMPARE(pc->yours(), false); mChannel = pc->channel(); mLoop->exit(0); } } telepathy-qt-0.9.3/tests/lib/glib-helpers/CMakeLists.txt0000644000175200001440000000145112000056607025442 0ustar00collabora-develusers00000000000000include_directories( ${CMAKE_CURRENT_BINARY_DIR} ${TELEPATHY_GLIB_INCLUDE_DIR} ${GLIB2_INCLUDE_DIR} ${GOBJECT_INCLUDE_DIR} ${DBUS_INCLUDE_DIR}) add_definitions(-DQT_NO_KEYWORDS) if(ENABLE_TP_GLIB_TESTS) file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/_gen") tpqt_generate_moc_i(test-conn-helper.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/test-conn-helper.moc.hpp) add_library(tp-qt-tests-glib-helpers test-conn-helper.cpp ${CMAKE_CURRENT_BINARY_DIR}/_gen/test-conn-helper.moc.hpp) target_link_libraries(tp-qt-tests-glib-helpers ${TELEPATHY_GLIB_LIBRARIES} ${GOBJECT_LIBRARIES} ${GLIB2_LIBRARIES} ${DBUS_GLIB_LIBRARIES} ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} telepathy-qt${QT_VERSION_MAJOR}) endif(ENABLE_TP_GLIB_TESTS) telepathy-qt-0.9.3/tests/lib/glib-helpers/test-conn-helper.h0000644000175200001440000001001212000056607026233 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_tests_lib_glib_helpers_test_conn_helper_h_HEADER_GUARD_ #define _TelepathyQt_tests_lib_glib_helpers_test_conn_helper_h_HEADER_GUARD_ #include #include #include #include #include #include namespace Tp { class PendingContacts; } class TestConnHelper : public QObject { Q_OBJECT public: TestConnHelper(Test *parent, GType gType, const QString &account, const QString &protocol); TestConnHelper(Test *parent, GType gType, const char *firstPropertyName, ...); TestConnHelper(Test *parent, const Tp::ChannelFactoryConstPtr &channelFactory, const Tp::ContactFactoryConstPtr &contactFactory, GType gType, const QString &account, const QString &protocol); TestConnHelper(Test *parent, const Tp::ChannelFactoryConstPtr &channelFactory, const Tp::ContactFactoryConstPtr &contactFactory, GType gType, const char *firstPropertyName, ...); virtual ~TestConnHelper(); GObject *service() const { return mService; } Tp::ConnectionPtr client() const { return mClient; } QString objectPath() const; bool isValid() const; bool isReady(const Tp::Features &features = Tp::Features()) const; bool enableFeatures(const Tp::Features &features); bool connect(const Tp::Features &features = Tp::Features()); bool disconnect(); QList contacts(const QStringList &ids, const Tp::Features &features = Tp::Features()); QList contacts(const Tp::UIntList &handles, const Tp::Features &features = Tp::Features()); QList upgradeContacts(const QList &contacts, const Tp::Features &features = Tp::Features()); Tp::ChannelPtr createChannel(const QVariantMap &request); Tp::ChannelPtr createChannel(const QString &channelType, const Tp::ContactPtr &target); Tp::ChannelPtr createChannel(const QString &channelType, Tp::HandleType targetHandleType, uint targetHandle); Tp::ChannelPtr createChannel(const QString &channelType, Tp::HandleType targetHandleType, const QString &targetID); Tp::ChannelPtr ensureChannel(const QVariantMap &request); Tp::ChannelPtr ensureChannel(const QString &channelType, const Tp::ContactPtr &target); Tp::ChannelPtr ensureChannel(const QString &channelType, Tp::HandleType targetHandleType, uint targetHandle); Tp::ChannelPtr ensureChannel(const QString &channelType, Tp::HandleType targetHandleType, const QString &targetID); private Q_SLOTS: void expectConnInvalidated(); void expectContactsForIdentifiersFinished(Tp::PendingOperation *op); void expectContactsForHandlesFinished(Tp::PendingOperation *op); void expectUpgradeContactsFinished(Tp::PendingOperation *op); void expectCreateChannelFinished(Tp::PendingOperation *op); void expectEnsureChannelFinished(Tp::PendingOperation *op); private: void init(Test *parent, const Tp::ChannelFactoryConstPtr &channelFactory, const Tp::ContactFactoryConstPtr &contactFactory, GType gType, const char *firstPropertyName, ...); void init(Test *parent, const Tp::ChannelFactoryConstPtr &channelFactory, const Tp::ContactFactoryConstPtr &contactFactory, GType gType, const char *firstPropertyName, va_list varArgs); void expectPendingContactsFinished(Tp::PendingContacts *pc); Test *mParent; QEventLoop *mLoop; GObject *mService; Tp::ConnectionPtr mClient; // The property retrieved by expectPendingContactsFinished() QList mContacts; // Property used by expectPendingContactsFinished() Tp::Features mContactFeatures; // The property retrieved by expectCreate/EnsureChannelFinished() Tp::ChannelPtr mChannel; }; #endif // _TelepathyQt_tests_lib_glib_helpers_test_conn_helper_h_HEADER_GUARD_ telepathy-qt-0.9.3/tests/lib/test.cpp0000644000175200001440000000575212000056607022020 0ustar00collabora-develusers00000000000000#include "tests/lib/test.h" #include #include #include #include #include #include #include #include using Tp::PendingOperation; using Tp::PendingVoid; using Tp::Client::DBus::PeerInterface; Test::Test(QObject *parent) : QObject(parent), mLoop(new QEventLoop(this)) { QTimer::singleShot(10 * 60 * 1000, this, SLOT(onWatchdog())); } Test::~Test() { delete mLoop; } void Test::initTestCaseImpl() { Tp::registerTypes(); Tp::enableDebug(true); Tp::enableWarnings(true); QVERIFY(QDBusConnection::sessionBus().isConnected()); } void Test::initImpl() { } void Test::cleanupImpl() { } void Test::cleanupTestCaseImpl() { // To allow for cleanup code to run (e.g. PendingOperation cleanup after they finish) mLoop->processEvents(); } void Test::expectSuccessfulCall(PendingOperation *op) { if (op->isError()) { qWarning().nospace() << op->errorName() << ": " << op->errorMessage(); mLoop->exit(1); return; } mLoop->exit(0); } void Test::expectSuccessfulCall(QDBusPendingCallWatcher *watcher) { if (watcher->isError()) { qWarning().nospace() << watcher->error().name() << ": " << watcher->error().message(); mLoop->exit(1); return; } mLoop->exit(0); } void Test::expectFailure(PendingOperation *op) { if (!op->isError()) { qWarning() << "expectFailure(): should have been an error, but wasn't"; mLastError = QString(); mLastErrorMessage = QString(); mLoop->exit(1); return; } mLastError = op->errorName(); mLastErrorMessage = op->errorMessage(); mLoop->exit(0); } void Test::expectSuccessfulProperty(PendingOperation *op) { if (op->isError()) { qWarning().nospace() << op->errorName() << ": " << op->errorMessage(); mPropertyValue = QVariant(); mLoop->exit(1001); } else { Tp::PendingVariant *pv = qobject_cast(op); mPropertyValue = pv->result(); mLoop->exit(1000); } } void Test::processDBusQueue(Tp::DBusProxy *proxy) { // Call method Ping on the D-Bus Peer interface PeerInterface peer(proxy); PendingVoid *call = new PendingVoid(peer.Ping(), Tp::SharedPtr()); // Wait for the reply to the Ping call while (!call->isFinished()) { mLoop->processEvents(); } QVERIFY(call->isFinished()); QVERIFY(call->isValid()); // Do one more processEvents so the PendingVoid is always freed mLoop->processEvents(); } void Test::onWatchdog() { // We can't use QFAIL because the test would then go to cleanup() and/or cleanupTestCase(), // which would often hang too - so let's just use abort qWarning() << "Test took over 10 minutes to finish, it's probably hung up - aborting"; std::abort(); } #include "_gen/test.h.moc.hpp" telepathy-qt-0.9.3/tests/lib/test-thread-helper.h0000644000175200001440000000336112000056607024201 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_tests_lib_test_thread_helper_h_HEADER_GUARD_ #define _TelepathyQt_tests_lib_test_thread_helper_h_HEADER_GUARD_ #include #include #include #include class ThreadObjectBase : public QObject { Q_OBJECT public Q_SLOTS: virtual void executeCallback() = 0; Q_SIGNALS: void callbackExecutionFinished(); }; template class ThreadObject : public ThreadObjectBase { public: typedef Tp::Callback1 Callback; Callback mCallback; virtual void executeCallback() { Q_ASSERT(mCallback.isValid()); Q_ASSERT(QThread::currentThread() != QCoreApplication::instance()->thread()); mCallback(mContext); Q_EMIT callbackExecutionFinished(); } private: Context mContext; }; class TestThreadHelperBase { public: virtual ~TestThreadHelperBase(); protected: TestThreadHelperBase(ThreadObjectBase *threadObject); void executeCallback(); protected: QThread *mThread; ThreadObjectBase *mThreadObject; }; template class TestThreadHelper : public TestThreadHelperBase { public: TestThreadHelper() : TestThreadHelperBase(new ThreadObject()) { } void executeCallback(typename ThreadObject::Callback const & cb) { static_cast*>(mThreadObject)->mCallback = cb; TestThreadHelperBase::executeCallback(); } }; #define TEST_THREAD_HELPER_EXECUTE(helper, callback) \ do { \ (helper)->executeCallback(Tp::ptrFun(callback)); \ if (QTest::currentTestFailed()) { \ return; \ } \ } while(0) #endif // _TelepathyQt_tests_lib_test_thread_helper_h_HEADER_GUARD_ telepathy-qt-0.9.3/tests/lib/test.h0000644000175200001440000000404612000056607021460 0ustar00collabora-develusers00000000000000#ifndef _TelepathyQt_tests_lib_test_h_HEADER_GUARD_ #define _TelepathyQt_tests_lib_test_h_HEADER_GUARD_ #include #include #include #include #include namespace Tp { class DBusProxy; } class Test : public QObject { Q_OBJECT public: Test(QObject *parent = 0); virtual ~Test(); QEventLoop *mLoop; void processDBusQueue(Tp::DBusProxy *proxy); // The last error received in expectFailure() QString mLastError; QString mLastErrorMessage; protected: template bool waitForProperty(Tp::PendingVariant *pv, T *value); protected Q_SLOTS: void expectSuccessfulCall(QDBusPendingCallWatcher*); void expectSuccessfulCall(Tp::PendingOperation*); void expectFailure(Tp::PendingOperation*); void expectSuccessfulProperty(Tp::PendingOperation *op); void onWatchdog(); virtual void initTestCaseImpl(); virtual void initImpl(); virtual void cleanupImpl(); virtual void cleanupTestCaseImpl(); private: // The property retrieved by expectSuccessfulProperty() QVariant mPropertyValue; }; template bool Test::waitForProperty(Tp::PendingVariant *pv, T *value) { connect(pv, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulProperty(Tp::PendingOperation*))); if (mLoop->exec() == 1000) { *value = qdbus_cast(mPropertyValue); return true; } else { *value = T(); return false; } } #define TEST_VERIFY_OP(op) \ if (!op->isFinished()) { \ qWarning() << "unfinished"; \ mLoop->exit(1); \ return; \ } \ if (op->isError()) { \ qWarning().nospace() << op->errorName() << ": " << op->errorMessage(); \ mLoop->exit(2); \ return; \ } \ if (!op->isValid()) { \ qWarning() << "inconsistent results"; \ mLoop->exit(3); \ return; \ } \ qDebug() << "finished"; #endif // _TelepathyQt_tests_lib_test_h_HEADER_GUARD_ telepathy-qt-0.9.3/tests/lib/CMakeLists.txt0000644000175200001440000000163112000056607023065 0ustar00collabora-develusers00000000000000include_directories( ${CMAKE_CURRENT_BINARY_DIR}) set(tp_qt_tests_SRCS test.cpp test-thread-helper.cpp ) set(tp_qt_tests_MOC_SRCS test.h test-thread-helper.h ) file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/_gen") foreach(moc_src ${tp_qt_tests_MOC_SRCS}) set(generated_file _gen/${moc_src}) string(REPLACE ".h" ".h.moc.hpp" generated_file ${generated_file}) tpqt_generate_moc_i(${CMAKE_CURRENT_SOURCE_DIR}/${moc_src} ${CMAKE_CURRENT_BINARY_DIR}/${generated_file}) list(APPEND tp_qt_tests_SRCS ${CMAKE_CURRENT_BINARY_DIR}/${generated_file}) endforeach(moc_src ${tp_qt_tests_MOC_SRCS}) add_library(tp-qt-tests ${tp_qt_tests_SRCS}) target_link_libraries(tp-qt-tests ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} telepathy-qt${QT_VERSION_MAJOR}) if(ENABLE_TP_GLIB_TESTS) add_subdirectory(glib) add_subdirectory(glib-helpers) endif(ENABLE_TP_GLIB_TESTS) telepathy-qt-0.9.3/tests/lib/glib/0000755000175200001440000000000012000056607021241 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/tests/lib/glib/simple-client.h0000644000175200001440000000356612000056607024171 0ustar00collabora-develusers00000000000000/* * simple-client.h - header for a simple client * * Copyright © 2010 Collabora Ltd. * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef __TP_TESTS_SIMPLE_CLIENT_H__ #define __TP_TESTS_SIMPLE_CLIENT_H__ #include #include G_BEGIN_DECLS typedef struct _TpTestsSimpleClient TpTestsSimpleClient; typedef struct _TpTestsSimpleClientClass TpTestsSimpleClientClass; struct _TpTestsSimpleClientClass { TpBaseClientClass parent_class; }; struct _TpTestsSimpleClient { TpBaseClient parent; TpObserveChannelsContext *observe_ctx; TpAddDispatchOperationContext *add_dispatch_ctx; TpHandleChannelsContext *handle_channels_ctx; }; GType tp_tests_simple_client_get_type (void); /* TYPE MACROS */ #define TP_TESTS_TYPE_SIMPLE_CLIENT \ (tp_tests_simple_client_get_type ()) #define TP_TESTS_SIMPLE_CLIENT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), TP_TESTS_TYPE_SIMPLE_CLIENT, \ TpTestsSimpleClient)) #define TP_TESTS_SIMPLE_CLIENT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), TP_TESTS_TYPE_SIMPLE_CLIENT, \ TpTestsSimpleClientClass)) #define SIMPLE_IS_CLIENT(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), TP_TESTS_TYPE_SIMPLE_CLIENT)) #define SIMPLE_IS_CLIENT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), TP_TESTS_TYPE_SIMPLE_CLIENT)) #define TP_TESTS_SIMPLE_CLIENT_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_SIMPLE_CLIENT, \ TpTestsSimpleClientClass)) TpTestsSimpleClient * tp_tests_simple_client_new (TpDBusDaemon *dbus_daemon, const gchar *name, gboolean uniquify_name); G_END_DECLS #endif /* #ifndef __TP_TESTS_SIMPLE_CONN_H__ */ telepathy-qt-0.9.3/tests/lib/glib/echo/0000755000175200001440000000000012000056607022157 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/tests/lib/glib/echo/chan.h0000644000175200001440000000350412000056607023243 0ustar00collabora-develusers00000000000000/* * chan.h - header for an example channel * * Copyright (C) 2007 Collabora Ltd. * Copyright (C) 2007 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef __EXAMPLE_CHAN_H__ #define __EXAMPLE_CHAN_H__ #include #include #include G_BEGIN_DECLS typedef struct _ExampleEchoChannel ExampleEchoChannel; typedef struct _ExampleEchoChannelClass ExampleEchoChannelClass; typedef struct _ExampleEchoChannelPrivate ExampleEchoChannelPrivate; GType example_echo_channel_get_type (void); #define EXAMPLE_TYPE_ECHO_CHANNEL \ (example_echo_channel_get_type ()) #define EXAMPLE_ECHO_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXAMPLE_TYPE_ECHO_CHANNEL, \ ExampleEchoChannel)) #define EXAMPLE_ECHO_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), EXAMPLE_TYPE_ECHO_CHANNEL, \ ExampleEchoChannelClass)) #define EXAMPLE_IS_ECHO_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EXAMPLE_TYPE_ECHO_CHANNEL)) #define EXAMPLE_IS_ECHO_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), EXAMPLE_TYPE_ECHO_CHANNEL)) #define EXAMPLE_ECHO_CHANNEL_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), EXAMPLE_TYPE_ECHO_CHANNEL, \ ExampleEchoChannelClass)) struct _ExampleEchoChannelClass { GObjectClass parent_class; TpTextMixinClass text_class; TpDBusPropertiesMixinClass dbus_properties_class; }; struct _ExampleEchoChannel { GObject parent; TpTextMixin text; ExampleEchoChannelPrivate *priv; }; G_END_DECLS #endif /* #ifndef __EXAMPLE_CHAN_H__ */ telepathy-qt-0.9.3/tests/lib/glib/echo/connection-manager.h0000644000175200001440000000413112000056607026076 0ustar00collabora-develusers00000000000000/* * manager.h - header for an example connection manager * Copyright (C) 2007 Collabora Ltd. * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef __EXAMPLE_ECHO_CONNECTION_MANAGER_H__ #define __EXAMPLE_ECHO_CONNECTION_MANAGER_H__ #include #include G_BEGIN_DECLS typedef struct _ExampleEchoConnectionManager ExampleEchoConnectionManager; typedef struct _ExampleEchoConnectionManagerPrivate ExampleEchoConnectionManagerPrivate; typedef struct _ExampleEchoConnectionManagerClass ExampleEchoConnectionManagerClass; typedef struct _ExampleEchoConnectionManagerClassPrivate ExampleEchoConnectionManagerClassPrivate; struct _ExampleEchoConnectionManagerClass { TpBaseConnectionManagerClass parent_class; ExampleEchoConnectionManagerClassPrivate *priv; }; struct _ExampleEchoConnectionManager { TpBaseConnectionManager parent; ExampleEchoConnectionManagerPrivate *priv; }; GType example_echo_connection_manager_get_type (void); /* TYPE MACROS */ #define EXAMPLE_TYPE_ECHO_CONNECTION_MANAGER \ (example_echo_connection_manager_get_type ()) #define EXAMPLE_ECHO_CONNECTION_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), EXAMPLE_TYPE_ECHO_CONNECTION_MANAGER, \ ExampleEchoConnectionManager)) #define EXAMPLE_ECHO_CONNECTION_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), EXAMPLE_TYPE_ECHO_CONNECTION_MANAGER, \ ExampleEchoConnectionManagerClass)) #define EXAMPLE_IS_ECHO_CONNECTION_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), EXAMPLE_TYPE_ECHO_CONNECTION_MANAGER)) #define EXAMPLE_IS_ECHO_CONNECTION_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), EXAMPLE_TYPE_ECHO_CONNECTION_MANAGER)) #define EXAMPLE_ECHO_CONNECTION_MANAGER_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), EXAMPLE_TYPE_ECHO_CONNECTION_MANAGER, \ ExampleEchoConnectionManagerClass)) G_END_DECLS #endif telepathy-qt-0.9.3/tests/lib/glib/echo/conn.c0000644000175200001440000001225212000056607023262 0ustar00collabora-develusers00000000000000/* * conn.c - an example connection * * Copyright (C) 2007 Collabora Ltd. * Copyright (C) 2007 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #include "conn.h" #include #include #include #include "im-manager.h" G_DEFINE_TYPE (ExampleEchoConnection, example_echo_connection, TP_TYPE_BASE_CONNECTION) /* type definition stuff */ enum { PROP_ACCOUNT = 1, N_PROPS }; struct _ExampleEchoConnectionPrivate { gchar *account; }; static void example_echo_connection_init (ExampleEchoConnection *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, EXAMPLE_TYPE_ECHO_CONNECTION, ExampleEchoConnectionPrivate); } static void get_property (GObject *object, guint property_id, GValue *value, GParamSpec *spec) { ExampleEchoConnection *self = EXAMPLE_ECHO_CONNECTION (object); switch (property_id) { case PROP_ACCOUNT: g_value_set_string (value, self->priv->account); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, spec); } } static void set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *spec) { ExampleEchoConnection *self = EXAMPLE_ECHO_CONNECTION (object); switch (property_id) { case PROP_ACCOUNT: g_free (self->priv->account); self->priv->account = g_utf8_strdown (g_value_get_string (value), -1); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, spec); } } static void finalize (GObject *object) { ExampleEchoConnection *self = EXAMPLE_ECHO_CONNECTION (object); g_free (self->priv->account); G_OBJECT_CLASS (example_echo_connection_parent_class)->finalize (object); } static gchar * get_unique_connection_name (TpBaseConnection *conn) { ExampleEchoConnection *self = EXAMPLE_ECHO_CONNECTION (conn); return g_strdup (self->priv->account); } static gchar * example_echo_normalize_contact (TpHandleRepoIface *repo, const gchar *id, gpointer context, GError **error) { if (id[0] == '\0') { g_set_error (error, TP_ERROR, TP_ERROR_INVALID_HANDLE, "ID must not be empty"); return NULL; } return g_utf8_strdown (id, -1); } static void create_handle_repos (TpBaseConnection *conn, TpHandleRepoIface *repos[NUM_TP_HANDLE_TYPES]) { repos[TP_HANDLE_TYPE_CONTACT] = tp_dynamic_handle_repo_new (TP_HANDLE_TYPE_CONTACT, example_echo_normalize_contact, NULL); } static GPtrArray * create_channel_managers (TpBaseConnection *conn) { GPtrArray *ret = g_ptr_array_sized_new (1); g_ptr_array_add (ret, g_object_new (EXAMPLE_TYPE_ECHO_IM_MANAGER, "connection", conn, NULL)); return ret; } static gboolean start_connecting (TpBaseConnection *conn, GError **error) { ExampleEchoConnection *self = EXAMPLE_ECHO_CONNECTION (conn); TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (conn, TP_HANDLE_TYPE_CONTACT); /* In a real connection manager we'd ask the underlying implementation to * start connecting, then go to state CONNECTED when finished, but here * we can do it immediately. */ conn->self_handle = tp_handle_ensure (contact_repo, self->priv->account, NULL, NULL); tp_base_connection_change_status (conn, TP_CONNECTION_STATUS_CONNECTED, TP_CONNECTION_STATUS_REASON_REQUESTED); return TRUE; } static void shut_down (TpBaseConnection *conn) { /* In a real connection manager we'd ask the underlying implementation to * start shutting down, then call this function when finished, but here * we can do it immediately. */ tp_base_connection_finish_shutdown (conn); } static void example_echo_connection_class_init (ExampleEchoConnectionClass *klass) { static const gchar *interfaces_always_present[] = { TP_IFACE_CONNECTION_INTERFACE_REQUESTS, NULL }; TpBaseConnectionClass *base_class = (TpBaseConnectionClass *) klass; GObjectClass *object_class = (GObjectClass *) klass; GParamSpec *param_spec; object_class->get_property = get_property; object_class->set_property = set_property; object_class->finalize = finalize; g_type_class_add_private (klass, sizeof (ExampleEchoConnectionPrivate)); base_class->create_handle_repos = create_handle_repos; base_class->get_unique_connection_name = get_unique_connection_name; base_class->create_channel_managers = create_channel_managers; base_class->start_connecting = start_connecting; base_class->shut_down = shut_down; base_class->interfaces_always_present = interfaces_always_present; param_spec = g_param_spec_string ("account", "Account name", "The username of this user", NULL, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB); g_object_class_install_property (object_class, PROP_ACCOUNT, param_spec); } telepathy-qt-0.9.3/tests/lib/glib/echo/manager-file.py0000644000175200001440000000100412000056607025053 0ustar00collabora-develusers00000000000000# Input for tools/manager-file.py MANAGER = 'example_echo' PARAMS = { 'example' : { 'account': { 'dtype': 's', 'flags': 'required register', 'filter': 'tp_cm_param_filter_string_nonempty', # 'filter_data': 'NULL', # 'default': ..., # 'struct_field': '...', # 'setter_data': 'NULL', }, }, } STRUCTS = { 'example': 'ExampleParams' } telepathy-qt-0.9.3/tests/lib/glib/echo/chan.c0000644000175200001440000003651312000056607023244 0ustar00collabora-develusers00000000000000/* * chan.c - an example text channel talking to a particular * contact. Similar code is used for 1-1 IM channels in many protocols * (IRC private messages ("/query"), XMPP IM etc.) * * Copyright (C) 2007 Collabora Ltd. * Copyright (C) 2007 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ // We need to use the deprecated TpTextMixin here to test compatibility functionality #define _TP_IGNORE_DEPRECATIONS #include "chan.h" #include #include #include static void text_iface_init (gpointer iface, gpointer data); static void channel_iface_init (gpointer iface, gpointer data); static void destroyable_iface_init (gpointer iface, gpointer data); G_DEFINE_TYPE_WITH_CODE (ExampleEchoChannel, example_echo_channel, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_DBUS_PROPERTIES, tp_dbus_properties_mixin_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL, channel_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_TYPE_TEXT, text_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_INTERFACE_DESTROYABLE, destroyable_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_CHANNEL_IFACE, NULL); G_IMPLEMENT_INTERFACE (TP_TYPE_EXPORTABLE_CHANNEL, NULL)) /* type definition stuff */ enum { PROP_OBJECT_PATH = 1, PROP_CHANNEL_TYPE, PROP_HANDLE_TYPE, PROP_HANDLE, PROP_TARGET_ID, PROP_REQUESTED, PROP_INITIATOR_HANDLE, PROP_INITIATOR_ID, PROP_CONNECTION, PROP_INTERFACES, PROP_CHANNEL_DESTROYED, PROP_CHANNEL_PROPERTIES, N_PROPS }; struct _ExampleEchoChannelPrivate { TpBaseConnection *conn; gchar *object_path; TpHandle handle; TpHandle initiator; /* These are really booleans, but gboolean is signed. Thanks, GLib */ unsigned closed:1; unsigned disposed:1; }; static const char * example_echo_channel_interfaces[] = { TP_IFACE_CHANNEL_INTERFACE_DESTROYABLE, NULL }; static void example_echo_channel_init (ExampleEchoChannel *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, EXAMPLE_TYPE_ECHO_CHANNEL, ExampleEchoChannelPrivate); } static GObject * constructor (GType type, guint n_props, GObjectConstructParam *props) { GObject *object = G_OBJECT_CLASS (example_echo_channel_parent_class)->constructor (type, n_props, props); ExampleEchoChannel *self = EXAMPLE_ECHO_CHANNEL (object); TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (self->priv->conn, TP_HANDLE_TYPE_CONTACT); tp_dbus_daemon_register_object ( tp_base_connection_get_dbus_daemon (self->priv->conn), self->priv->object_path, self); tp_text_mixin_init (object, G_STRUCT_OFFSET (ExampleEchoChannel, text), contact_repo); tp_text_mixin_set_message_types (object, TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL, TP_CHANNEL_TEXT_MESSAGE_TYPE_ACTION, TP_CHANNEL_TEXT_MESSAGE_TYPE_NOTICE, G_MAXUINT); return object; } static void get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { ExampleEchoChannel *self = EXAMPLE_ECHO_CHANNEL (object); switch (property_id) { case PROP_OBJECT_PATH: g_value_set_string (value, self->priv->object_path); break; case PROP_CHANNEL_TYPE: g_value_set_static_string (value, TP_IFACE_CHANNEL_TYPE_TEXT); break; case PROP_HANDLE_TYPE: g_value_set_uint (value, TP_HANDLE_TYPE_CONTACT); break; case PROP_HANDLE: g_value_set_uint (value, self->priv->handle); break; case PROP_TARGET_ID: { TpHandleRepoIface *contact_repo = tp_base_connection_get_handles ( self->priv->conn, TP_HANDLE_TYPE_CONTACT); g_value_set_string (value, tp_handle_inspect (contact_repo, self->priv->handle)); } break; case PROP_REQUESTED: g_value_set_boolean (value, (self->priv->initiator == self->priv->conn->self_handle)); break; case PROP_INITIATOR_HANDLE: g_value_set_uint (value, self->priv->initiator); break; case PROP_INITIATOR_ID: { TpHandleRepoIface *contact_repo = tp_base_connection_get_handles ( self->priv->conn, TP_HANDLE_TYPE_CONTACT); g_value_set_string (value, self->priv->initiator == 0 ? "" : tp_handle_inspect (contact_repo, self->priv->initiator)); } break; case PROP_CONNECTION: g_value_set_object (value, self->priv->conn); break; case PROP_INTERFACES: g_value_set_boxed (value, example_echo_channel_interfaces); break; case PROP_CHANNEL_DESTROYED: g_value_set_boolean (value, self->priv->closed); break; case PROP_CHANNEL_PROPERTIES: g_value_take_boxed (value, tp_dbus_properties_mixin_make_properties_hash (object, TP_IFACE_CHANNEL, "ChannelType", TP_IFACE_CHANNEL, "TargetHandleType", TP_IFACE_CHANNEL, "TargetHandle", TP_IFACE_CHANNEL, "TargetID", TP_IFACE_CHANNEL, "InitiatorHandle", TP_IFACE_CHANNEL, "InitiatorID", TP_IFACE_CHANNEL, "Requested", TP_IFACE_CHANNEL, "Interfaces", NULL)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { ExampleEchoChannel *self = EXAMPLE_ECHO_CHANNEL (object); switch (property_id) { case PROP_OBJECT_PATH: g_free (self->priv->object_path); self->priv->object_path = g_value_dup_string (value); break; case PROP_HANDLE: /* we don't ref it here because we don't necessarily have access to the * contact repo yet - instead we ref it in the constructor. */ self->priv->handle = g_value_get_uint (value); break; case PROP_INITIATOR_HANDLE: /* likewise */ self->priv->initiator = g_value_get_uint (value); break; case PROP_HANDLE_TYPE: case PROP_CHANNEL_TYPE: /* these properties are writable in the interface, but not actually * meaningfully changable on this channel, so we do nothing */ break; case PROP_CONNECTION: self->priv->conn = g_value_get_object (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void dispose (GObject *object) { ExampleEchoChannel *self = EXAMPLE_ECHO_CHANNEL (object); if (self->priv->disposed) return; self->priv->disposed = TRUE; if (!self->priv->closed) { self->priv->closed = TRUE; tp_svc_channel_emit_closed (self); } ((GObjectClass *) example_echo_channel_parent_class)->dispose (object); } static void finalize (GObject *object) { ExampleEchoChannel *self = EXAMPLE_ECHO_CHANNEL (object); g_free (self->priv->object_path); tp_text_mixin_finalize (object); ((GObjectClass *) example_echo_channel_parent_class)->finalize (object); } static void example_echo_channel_class_init (ExampleEchoChannelClass *klass) { static TpDBusPropertiesMixinPropImpl channel_props[] = { { "TargetHandleType", "handle-type", NULL }, { "TargetHandle", "handle", NULL }, { "ChannelType", "channel-type", NULL }, { "Interfaces", "interfaces", NULL }, { "TargetID", "target-id", NULL }, { "Requested", "requested", NULL }, { "InitiatorHandle", "initiator-handle", NULL }, { "InitiatorID", "initiator-id", NULL }, { NULL } }; static TpDBusPropertiesMixinIfaceImpl prop_interfaces[] = { { TP_IFACE_CHANNEL, tp_dbus_properties_mixin_getter_gobject_properties, NULL, channel_props, }, { NULL } }; GObjectClass *object_class = (GObjectClass *) klass; GParamSpec *param_spec; g_type_class_add_private (klass, sizeof (ExampleEchoChannelPrivate)); object_class->constructor = constructor; object_class->set_property = set_property; object_class->get_property = get_property; object_class->dispose = dispose; object_class->finalize = finalize; g_object_class_override_property (object_class, PROP_OBJECT_PATH, "object-path"); g_object_class_override_property (object_class, PROP_CHANNEL_TYPE, "channel-type"); g_object_class_override_property (object_class, PROP_HANDLE_TYPE, "handle-type"); g_object_class_override_property (object_class, PROP_HANDLE, "handle"); g_object_class_override_property (object_class, PROP_CHANNEL_DESTROYED, "channel-destroyed"); g_object_class_override_property (object_class, PROP_CHANNEL_PROPERTIES, "channel-properties"); param_spec = g_param_spec_object ("connection", "TpBaseConnection object", "Connection object that owns this channel", TP_TYPE_BASE_CONNECTION, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_CONNECTION, param_spec); param_spec = g_param_spec_boxed ("interfaces", "Extra D-Bus interfaces", "Additional Channel.Interface.* interfaces", G_TYPE_STRV, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_INTERFACES, param_spec); param_spec = g_param_spec_string ("target-id", "Peer's ID", "The string obtained by inspecting the target handle", NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_TARGET_ID, param_spec); param_spec = g_param_spec_uint ("initiator-handle", "Initiator's handle", "The contact who initiated the channel", 0, G_MAXUINT32, 0, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_INITIATOR_HANDLE, param_spec); param_spec = g_param_spec_string ("initiator-id", "Initiator's ID", "The string obtained by inspecting the initiator-handle", NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_INITIATOR_ID, param_spec); param_spec = g_param_spec_boolean ("requested", "Requested?", "True if this channel was requested by the local user", FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_REQUESTED, param_spec); tp_text_mixin_class_init (object_class, G_STRUCT_OFFSET (ExampleEchoChannelClass, text_class)); klass->dbus_properties_class.interfaces = prop_interfaces; tp_dbus_properties_mixin_class_init (object_class, G_STRUCT_OFFSET (ExampleEchoChannelClass, dbus_properties_class)); } static void example_echo_channel_close (ExampleEchoChannel *self) { GObject *object = (GObject *) self; if (!self->priv->closed) { TpHandle first_sender; /* The manager wants to be able to respawn the channel if it has pending * messages. When respawned, the channel must have the initiator set * to the contact who sent us those messages (if it isn't already), * and the messages must be marked as having been rescued so they * don't get logged twice. */ if (tp_text_mixin_has_pending_messages (object, &first_sender)) { if (self->priv->initiator != first_sender) { self->priv->initiator = first_sender; } tp_text_mixin_set_rescued (object); } else { /* No pending messages, so it's OK to really close */ self->priv->closed = TRUE; } tp_svc_channel_emit_closed (self); } } static void channel_close (TpSvcChannel *iface, DBusGMethodInvocation *context) { ExampleEchoChannel *self = EXAMPLE_ECHO_CHANNEL (iface); example_echo_channel_close (self); tp_svc_channel_return_from_close (context); } static void channel_get_channel_type (TpSvcChannel *iface, DBusGMethodInvocation *context) { tp_svc_channel_return_from_get_channel_type (context, TP_IFACE_CHANNEL_TYPE_TEXT); } static void channel_get_handle (TpSvcChannel *iface, DBusGMethodInvocation *context) { ExampleEchoChannel *self = EXAMPLE_ECHO_CHANNEL (iface); tp_svc_channel_return_from_get_handle (context, TP_HANDLE_TYPE_CONTACT, self->priv->handle); } static void channel_get_interfaces (TpSvcChannel *iface, DBusGMethodInvocation *context) { tp_svc_channel_return_from_get_interfaces (context, example_echo_channel_interfaces); } static void channel_iface_init (gpointer iface, gpointer data) { TpSvcChannelClass *klass = iface; #define IMPLEMENT(x) tp_svc_channel_implement_##x (klass, channel_##x) IMPLEMENT (close); IMPLEMENT (get_channel_type); IMPLEMENT (get_handle); IMPLEMENT (get_interfaces); #undef IMPLEMENT } static void text_send (TpSvcChannelTypeText *iface, guint type, const gchar *text, DBusGMethodInvocation *context) { ExampleEchoChannel *self = EXAMPLE_ECHO_CHANNEL (iface); time_t timestamp = time (NULL); gchar *echo; guint echo_type = type; /* Send should return just before Sent is emitted. */ tp_svc_channel_type_text_return_from_send (context); /* Tell the client that the message was submitted for sending */ tp_svc_channel_type_text_emit_sent ((GObject *) self, timestamp, type, text); /* Pretend that the remote contact has replied. Normally, you'd * call tp_text_mixin_receive or tp_text_mixin_receive_with_flags * in response to network events */ switch (type) { case TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL: echo = g_strdup_printf ("You said: %s", text); break; case TP_CHANNEL_TEXT_MESSAGE_TYPE_ACTION: echo = g_strdup_printf ("notices that the user %s", text); break; case TP_CHANNEL_TEXT_MESSAGE_TYPE_NOTICE: echo = g_strdup_printf ("You sent a notice: %s", text); break; default: echo = g_strdup_printf ("You sent some weird message type, %u: \"%s\"", type, text); echo_type = TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL; } tp_text_mixin_receive ((GObject *) self, echo_type, self->priv->handle, timestamp, echo); g_free (echo); } static void text_iface_init (gpointer iface, gpointer data) { TpSvcChannelTypeTextClass *klass = iface; tp_text_mixin_iface_init (iface, data); #define IMPLEMENT(x) tp_svc_channel_type_text_implement_##x (klass, text_##x) IMPLEMENT (send); #undef IMPLEMENT } static void destroyable_destroy (TpSvcChannelInterfaceDestroyable *iface, DBusGMethodInvocation *context) { ExampleEchoChannel *self = EXAMPLE_ECHO_CHANNEL (iface); tp_text_mixin_clear ((GObject *) self); example_echo_channel_close (self); g_assert (self->priv->closed); tp_svc_channel_interface_destroyable_return_from_destroy (context); } static void destroyable_iface_init (gpointer iface, gpointer data) { TpSvcChannelInterfaceDestroyableClass *klass = iface; #define IMPLEMENT(x) \ tp_svc_channel_interface_destroyable_implement_##x (klass, destroyable_##x) IMPLEMENT (destroy); #undef IMPLEMENT } telepathy-qt-0.9.3/tests/lib/glib/echo/im-manager.h0000644000175200001440000000332212000056607024345 0ustar00collabora-develusers00000000000000/* * im-manager.h - header for an example channel manager * * Copyright (C) 2007 Collabora Ltd. * Copyright (C) 2007 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef __EXAMPLE_ECHO_IM_MANAGER_H__ #define __EXAMPLE_ECHO_IM_MANAGER_H__ #include G_BEGIN_DECLS typedef struct _ExampleEchoImManager ExampleEchoImManager; typedef struct _ExampleEchoImManagerClass ExampleEchoImManagerClass; typedef struct _ExampleEchoImManagerPrivate ExampleEchoImManagerPrivate; struct _ExampleEchoImManagerClass { GObjectClass parent_class; }; struct _ExampleEchoImManager { GObject parent; ExampleEchoImManagerPrivate *priv; }; GType example_echo_im_manager_get_type (void); /* TYPE MACROS */ #define EXAMPLE_TYPE_ECHO_IM_MANAGER \ (example_echo_im_manager_get_type ()) #define EXAMPLE_ECHO_IM_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), EXAMPLE_TYPE_ECHO_IM_MANAGER, \ ExampleEchoImManager)) #define EXAMPLE_ECHO_IM_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), EXAMPLE_TYPE_ECHO_IM_MANAGER, \ ExampleEchoImManagerClass)) #define EXAMPLE_IS_ECHO_IM_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), EXAMPLE_TYPE_ECHO_IM_MANAGER)) #define EXAMPLE_IS_ECHO_IM_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), EXAMPLE_TYPE_ECHO_IM_MANAGER)) #define EXAMPLE_ECHO_IM_MANAGER_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), EXAMPLE_TYPE_ECHO_IM_MANAGER, \ ExampleEchoImManagerClass)) G_END_DECLS #endif telepathy-qt-0.9.3/tests/lib/glib/echo/CMakeLists.txt0000644000175200001440000000104412000056607024716 0ustar00collabora-develusers00000000000000if(ENABLE_TP_GLIB_TESTS) include_directories(${CMAKE_CURRENT_BINARY_DIR}) set(example_cm_echo_SRCS chan.c chan.h conn.c conn.h connection-manager.c connection-manager.h im-manager.c im-manager.h ) add_library(example-cm-echo STATIC ${example_cm_echo_SRCS}) target_link_libraries(example-cm-echo ${TPGLIB_LIBRARIES}) tpqt_generate_manager_file(${CMAKE_CURRENT_SOURCE_DIR}/manager-file.py example_echo.manager connection-manager.c) endif(ENABLE_TP_GLIB_TESTS) telepathy-qt-0.9.3/tests/lib/glib/echo/im-manager.c0000644000175200001440000002463212000056607024347 0ustar00collabora-develusers00000000000000/* * im-manager.c - an example channel manager for channels talking to a * particular contact. Similar code is used for 1-1 IM channels in many * protocols (IRC private messages ("/query"), XMPP IM etc.) * * Copyright (C) 2007 Collabora Ltd. * Copyright (C) 2007 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #include "im-manager.h" #include #include #include "chan.h" static void channel_manager_iface_init (gpointer, gpointer); G_DEFINE_TYPE_WITH_CODE (ExampleEchoImManager, example_echo_im_manager, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (TP_TYPE_CHANNEL_MANAGER, channel_manager_iface_init)) /* type definition stuff */ enum { PROP_CONNECTION = 1, N_PROPS }; struct _ExampleEchoImManagerPrivate { TpBaseConnection *conn; /* GUINT_TO_POINTER (handle) => ExampleEchoChannel */ GHashTable *channels; gulong status_changed_id; }; static void example_echo_im_manager_init (ExampleEchoImManager *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, EXAMPLE_TYPE_ECHO_IM_MANAGER, ExampleEchoImManagerPrivate); self->priv->channels = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_object_unref); } static void example_echo_im_manager_close_all (ExampleEchoImManager *self); static void dispose (GObject *object) { ExampleEchoImManager *self = EXAMPLE_ECHO_IM_MANAGER (object); example_echo_im_manager_close_all (self); g_assert (self->priv->channels == NULL); ((GObjectClass *) example_echo_im_manager_parent_class)->dispose (object); } static void get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { ExampleEchoImManager *self = EXAMPLE_ECHO_IM_MANAGER (object); switch (property_id) { case PROP_CONNECTION: g_value_set_object (value, self->priv->conn); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } } static void set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { ExampleEchoImManager *self = EXAMPLE_ECHO_IM_MANAGER (object); switch (property_id) { case PROP_CONNECTION: /* We don't ref the connection, because it owns a reference to the * channel manager, and it guarantees that the manager's lifetime is * less than its lifetime */ self->priv->conn = g_value_get_object (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } } static void status_changed_cb (TpBaseConnection *conn, guint status, guint reason, ExampleEchoImManager *self) { if (status == TP_CONNECTION_STATUS_DISCONNECTED) example_echo_im_manager_close_all (self); } static void constructed (GObject *object) { ExampleEchoImManager *self = EXAMPLE_ECHO_IM_MANAGER (object); void (*chain_up) (GObject *) = ((GObjectClass *) example_echo_im_manager_parent_class)->constructed; if (chain_up != NULL) { chain_up (object); } self->priv->status_changed_id = g_signal_connect (self->priv->conn, "status-changed", (GCallback) status_changed_cb, self); } static void example_echo_im_manager_class_init (ExampleEchoImManagerClass *klass) { GParamSpec *param_spec; GObjectClass *object_class = (GObjectClass *) klass; object_class->constructed = constructed; object_class->dispose = dispose; object_class->get_property = get_property; object_class->set_property = set_property; param_spec = g_param_spec_object ("connection", "Connection object", "The connection that owns this channel manager", TP_TYPE_BASE_CONNECTION, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB); g_object_class_install_property (object_class, PROP_CONNECTION, param_spec); g_type_class_add_private (klass, sizeof (ExampleEchoImManagerPrivate)); } static void example_echo_im_manager_close_all (ExampleEchoImManager *self) { if (self->priv->channels != NULL) { GHashTable *tmp = self->priv->channels; self->priv->channels = NULL; g_hash_table_destroy (tmp); } if (self->priv->status_changed_id != 0) { g_signal_handler_disconnect (self->priv->conn, self->priv->status_changed_id); self->priv->status_changed_id = 0; } } static void example_echo_im_manager_foreach_channel (TpChannelManager *iface, TpExportableChannelFunc callback, gpointer user_data) { ExampleEchoImManager *self = EXAMPLE_ECHO_IM_MANAGER (iface); GHashTableIter iter; gpointer handle, channel; g_hash_table_iter_init (&iter, self->priv->channels); while (g_hash_table_iter_next (&iter, &handle, &channel)) { callback (TP_EXPORTABLE_CHANNEL (channel), user_data); } } static void channel_closed_cb (ExampleEchoChannel *chan, ExampleEchoImManager *self) { tp_channel_manager_emit_channel_closed_for_object (self, TP_EXPORTABLE_CHANNEL (chan)); if (self->priv->channels != NULL) { TpHandle handle; gboolean really_destroyed; g_object_get (chan, "handle", &handle, "channel-destroyed", &really_destroyed, NULL); /* Re-announce the channel if it's not yet ready to go away (pending * messages) */ if (really_destroyed) { g_hash_table_remove (self->priv->channels, GUINT_TO_POINTER (handle)); } else { tp_channel_manager_emit_new_channel (self, TP_EXPORTABLE_CHANNEL (chan), NULL); } } } static void new_channel (ExampleEchoImManager *self, TpHandle handle, TpHandle initiator, gpointer request_token) { ExampleEchoChannel *chan; gchar *object_path; GSList *requests = NULL; object_path = g_strdup_printf ("%s/EchoChannel%u", self->priv->conn->object_path, handle); chan = g_object_new (EXAMPLE_TYPE_ECHO_CHANNEL, "connection", self->priv->conn, "object-path", object_path, "handle", handle, "initiator-handle", initiator, NULL); g_free (object_path); g_signal_connect (chan, "closed", (GCallback) channel_closed_cb, self); /* self->priv->channels takes ownership of 'chan' */ g_hash_table_insert (self->priv->channels, GUINT_TO_POINTER (handle), chan); if (request_token != NULL) requests = g_slist_prepend (requests, request_token); tp_channel_manager_emit_new_channel (self, TP_EXPORTABLE_CHANNEL (chan), requests); g_slist_free (requests); } static const gchar * const fixed_properties[] = { TP_PROP_CHANNEL_CHANNEL_TYPE, TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, NULL }; static const gchar * const allowed_properties[] = { TP_PROP_CHANNEL_TARGET_HANDLE, TP_PROP_CHANNEL_TARGET_ID, NULL }; static void example_echo_im_manager_foreach_channel_class (TpChannelManager *manager, TpChannelManagerChannelClassFunc func, gpointer user_data) { GHashTable *table = tp_asv_new ( TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING, TP_IFACE_CHANNEL_TYPE_TEXT, TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, TP_HANDLE_TYPE_CONTACT, NULL); func (manager, table, allowed_properties, user_data); g_hash_table_destroy (table); } static gboolean example_echo_im_manager_request (ExampleEchoImManager *self, gpointer request_token, GHashTable *request_properties, gboolean require_new) { TpHandle handle; ExampleEchoChannel *chan; GError *error = NULL; if (tp_strdiff (tp_asv_get_string (request_properties, TP_PROP_CHANNEL_CHANNEL_TYPE), TP_IFACE_CHANNEL_TYPE_TEXT)) { return FALSE; } if (tp_asv_get_uint32 (request_properties, TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, NULL) != TP_HANDLE_TYPE_CONTACT) { return FALSE; } handle = tp_asv_get_uint32 (request_properties, TP_PROP_CHANNEL_TARGET_HANDLE, NULL); g_assert (handle != 0); if (tp_channel_manager_asv_has_unknown_properties (request_properties, fixed_properties, allowed_properties, &error)) { goto error; } chan = g_hash_table_lookup (self->priv->channels, GUINT_TO_POINTER (handle)); if (chan == NULL) { new_channel (self, handle, self->priv->conn->self_handle, request_token); } else if (require_new) { g_set_error (&error, TP_ERROR, TP_ERROR_NOT_AVAILABLE, "An echo channel to contact #%u already exists", handle); goto error; } else { tp_channel_manager_emit_request_already_satisfied (self, request_token, TP_EXPORTABLE_CHANNEL (chan)); } return TRUE; error: tp_channel_manager_emit_request_failed (self, request_token, error->domain, error->code, error->message); g_error_free (error); return TRUE; } static gboolean example_echo_im_manager_create_channel (TpChannelManager *manager, gpointer request_token, GHashTable *request_properties) { return example_echo_im_manager_request (EXAMPLE_ECHO_IM_MANAGER (manager), request_token, request_properties, TRUE); } static gboolean example_echo_im_manager_ensure_channel (TpChannelManager *manager, gpointer request_token, GHashTable *request_properties) { return example_echo_im_manager_request (EXAMPLE_ECHO_IM_MANAGER (manager), request_token, request_properties, FALSE); } static void channel_manager_iface_init (gpointer g_iface, gpointer iface_data G_GNUC_UNUSED) { TpChannelManagerIface *iface = g_iface; iface->foreach_channel = example_echo_im_manager_foreach_channel; iface->foreach_channel_class = example_echo_im_manager_foreach_channel_class; iface->create_channel = example_echo_im_manager_create_channel; iface->ensure_channel = example_echo_im_manager_ensure_channel; /* In this channel manager, Request has the same semantics as Ensure */ iface->request_channel = example_echo_im_manager_ensure_channel; } telepathy-qt-0.9.3/tests/lib/glib/echo/connection-manager.c0000644000175200001440000000371512000056607026100 0ustar00collabora-develusers00000000000000/* * manager.c - an example connection manager * * Copyright (C) 2007 Collabora Ltd. * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #include "connection-manager.h" #include #include #include #include "conn.h" G_DEFINE_TYPE (ExampleEchoConnectionManager, example_echo_connection_manager, TP_TYPE_BASE_CONNECTION_MANAGER) /* type definition stuff */ static void example_echo_connection_manager_init (ExampleEchoConnectionManager *self) { } /* private data */ typedef struct { gchar *account; } ExampleParams; #include "_gen/param-spec-struct.h" static gpointer alloc_params (void) { return g_slice_new0 (ExampleParams); } static void free_params (gpointer p) { ExampleParams *params = p; g_free (params->account); g_slice_free (ExampleParams, params); } static const TpCMProtocolSpec example_protocols[] = { { "example", example_echo_example_params, alloc_params, free_params }, { NULL, NULL } }; static TpBaseConnection * new_connection (TpBaseConnectionManager *self, const gchar *proto, TpIntSet *params_present, gpointer parsed_params, GError **error) { ExampleParams *params = parsed_params; ExampleEchoConnection *conn = EXAMPLE_ECHO_CONNECTION (g_object_new (EXAMPLE_TYPE_ECHO_CONNECTION, "account", params->account, "protocol", proto, NULL)); return (TpBaseConnection *) conn; } static void example_echo_connection_manager_class_init ( ExampleEchoConnectionManagerClass *klass) { TpBaseConnectionManagerClass *base_class = (TpBaseConnectionManagerClass *) klass; base_class->new_connection = new_connection; base_class->cm_dbus_name = "example_echo"; base_class->protocol_params = example_protocols; } telepathy-qt-0.9.3/tests/lib/glib/echo/conn.h0000644000175200001440000000340512000056607023267 0ustar00collabora-develusers00000000000000/* * conn.h - header for an example connection * * Copyright (C) 2007 Collabora Ltd. * Copyright (C) 2007 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef __EXAMPLE_ECHO_CONN_H__ #define __EXAMPLE_ECHO_CONN_H__ #include #include G_BEGIN_DECLS typedef struct _ExampleEchoConnection ExampleEchoConnection; typedef struct _ExampleEchoConnectionClass ExampleEchoConnectionClass; typedef struct _ExampleEchoConnectionPrivate ExampleEchoConnectionPrivate; struct _ExampleEchoConnectionClass { TpBaseConnectionClass parent_class; }; struct _ExampleEchoConnection { TpBaseConnection parent; ExampleEchoConnectionPrivate *priv; }; GType example_echo_connection_get_type (void); /* TYPE MACROS */ #define EXAMPLE_TYPE_ECHO_CONNECTION \ (example_echo_connection_get_type ()) #define EXAMPLE_ECHO_CONNECTION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), EXAMPLE_TYPE_ECHO_CONNECTION, \ ExampleEchoConnection)) #define EXAMPLE_ECHO_CONNECTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), EXAMPLE_TYPE_ECHO_CONNECTION, \ ExampleEchoConnectionClass)) #define EXAMPLE_IS_ECHO_CONNECTION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), EXAMPLE_TYPE_ECHO_CONNECTION)) #define EXAMPLE_IS_ECHO_CONNECTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), EXAMPLE_TYPE_ECHO_CONNECTION)) #define EXAMPLE_ECHO_CONNECTION_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), EXAMPLE_TYPE_ECHO_CONNECTION, \ ExampleEchoConnectionClass)) G_END_DECLS #endif telepathy-qt-0.9.3/tests/lib/glib/simple-account.h0000644000175200001440000000347512000056607024346 0ustar00collabora-develusers00000000000000/* * simple-account.h - header for a simple account service. * * Copyright (C) 2010 Collabora Ltd. * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef __TP_TESTS_SIMPLE_ACCOUNT_H__ #define __TP_TESTS_SIMPLE_ACCOUNT_H__ #include #include G_BEGIN_DECLS typedef struct _TpTestsSimpleAccount TpTestsSimpleAccount; typedef struct _TpTestsSimpleAccountClass TpTestsSimpleAccountClass; typedef struct _TpTestsSimpleAccountPrivate TpTestsSimpleAccountPrivate; struct _TpTestsSimpleAccountClass { GObjectClass parent_class; TpDBusPropertiesMixinClass dbus_props_class; }; struct _TpTestsSimpleAccount { GObject parent; TpTestsSimpleAccountPrivate *priv; }; GType tp_tests_simple_account_get_type (void); /* TYPE MACROS */ #define TP_TESTS_TYPE_SIMPLE_ACCOUNT \ (tp_tests_simple_account_get_type ()) #define TP_TESTS_SIMPLE_ACCOUNT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), TP_TESTS_TYPE_SIMPLE_ACCOUNT, \ TpTestsSimpleAccount)) #define TP_TESTS_SIMPLE_ACCOUNT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), TP_TESTS_TYPE_SIMPLE_ACCOUNT, \ TpTestsSimpleAccountClass)) #define TP_TESTS_SIMPLE_IS_ACCOUNT(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), TP_TESTS_TYPE_SIMPLE_ACCOUNT)) #define TP_TESTS_SIMPLE_IS_ACCOUNT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), TP_TESTS_TYPE_SIMPLE_ACCOUNT)) #define TP_TESTS_SIMPLE_ACCOUNT_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_SIMPLE_ACCOUNT, \ TpTestsSimpleAccountClass)) G_END_DECLS #endif /* #ifndef __TP_TESTS_SIMPLE_ACCOUNT_H__ */ telepathy-qt-0.9.3/tests/lib/glib/bug16307-conn.h0000644000175200001440000000422012000056607023521 0ustar00collabora-develusers00000000000000/* * bug16307-conn.h - header for a connection that reproduces the #15307 bug * * Copyright (C) 2007-2008 Collabora Ltd. * Copyright (C) 2007-2008 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef __TP_TESTS_BUG16307_CONN_H__ #define __TP_TESTS_BUG16307_CONN_H__ #include #include #include "simple-conn.h" G_BEGIN_DECLS typedef struct _TpTestsBug16307Connection TpTestsBug16307Connection; typedef struct _TpTestsBug16307ConnectionClass TpTestsBug16307ConnectionClass; typedef struct _TpTestsBug16307ConnectionPrivate TpTestsBug16307ConnectionPrivate; struct _TpTestsBug16307ConnectionClass { TpTestsSimpleConnectionClass parent_class; }; struct _TpTestsBug16307Connection { TpTestsSimpleConnection parent; TpTestsBug16307ConnectionPrivate *priv; }; GType tp_tests_bug16307_connection_get_type (void); /* TYPE MACROS */ #define TP_TESTS_TYPE_BUG16307_CONNECTION \ (tp_tests_bug16307_connection_get_type ()) #define TP_TESTS_BUG16307_CONNECTION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), TP_TESTS_TYPE_BUG16307_CONNECTION, \ TpTestsBug16307Connection)) #define TP_TESTS_BUG16307_CONNECTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), TP_TESTS_TYPE_BUG16307_CONNECTION, \ TpTestsBug16307ConnectionClass)) #define TP_TESTS_BUG16307_IS_CONNECTION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), TP_TESTS_TYPE_BUG16307_CONNECTION)) #define TP_TESTS_BUG16307_IS_CONNECTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), TP_TESTS_TYPE_BUG16307_CONNECTION)) #define TP_TESTS_BUG16307_CONNECTION_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_BUG16307_CONNECTION, \ TpTestsBug16307ConnectionClass)) /* Cause "network events", for debugging/testing */ void tp_tests_bug16307_connection_inject_get_status_return (TpTestsBug16307Connection *self); G_END_DECLS #endif /* #ifndef __TP_TESTS_BUG16307_CONN_H__ */ telepathy-qt-0.9.3/tests/lib/glib/contacts-noroster-conn.h0000644000175200001440000000377312000056607026046 0ustar00collabora-develusers00000000000000/* * Copyright (C) 2011 Collabora Ltd. * Copyright (C) 2011 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef __TP_TESTS_CONTACTS_NOROSTER_CONN_H__ #define __TP_TESTS_CONTACTS_NOROSTER_CONN_H__ #include #include #include "simple-conn.h" G_BEGIN_DECLS typedef struct _TpTestsContactsNorosterConnection TpTestsContactsNorosterConnection; typedef struct _TpTestsContactsNorosterConnectionClass TpTestsContactsNorosterConnectionClass; struct _TpTestsContactsNorosterConnectionClass { TpTestsSimpleConnectionClass parent_class; }; struct _TpTestsContactsNorosterConnection { TpTestsSimpleConnection parent; }; GType tp_tests_contacts_noroster_connection_get_type (void); /* TYPE MACROS */ #define TP_TESTS_TYPE_CONTACTS_NOROSTER_CONNECTION \ (tp_tests_contacts_noroster_connection_get_type ()) #define TP_TESTS_CONTACTS_NOROSTER_CONNECTION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), TP_TESTS_TYPE_CONTACTS_NOROSTER_CONNECTION, \ TpTestsContactsNorosterConnection)) #define TP_TESTS_CONTACTS_NOROSTER_CONNECTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), TP_TESTS_TYPE_CONTACTS_NOROSTER_CONNECTION, \ TpTestsContactsNorosterConnectionClass)) #define TP_TESTS_CONTACTS_NOROSTER_IS_CONNECTION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), TP_TESTS_TYPE_CONTACTS_NOROSTER_CONNECTION)) #define TP_TESTS_CONTACTS_NOROSTER_IS_CONNECTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), TP_TESTS_TYPE_CONTACTS_NOROSTER_CONNECTION)) #define TP_TESTS_CONTACTS_NOROSTER_CONNECTION_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_CONTACTS_NOROSTER_CONNECTION, \ TpTestsContactsNorosterConnectionClass)) G_END_DECLS #endif /* #ifndef __TP_TESTS_CONTACTS_NOROSTER_CONN_H__ */ telepathy-qt-0.9.3/tests/lib/glib/future/0000755000175200001440000000000012000056607022553 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/tests/lib/glib/future/extensions/0000755000175200001440000000000012000056607024752 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/tests/lib/glib/future/extensions/misc.xml0000644000175200001440000000113312000056607026425 0ustar00collabora-develusers00000000000000 Miscellaneous extensions from the future telepathy-qt-0.9.3/tests/lib/glib/future/extensions/all.xml0000644000175200001440000000053512000056607026247 0ustar00collabora-develusers00000000000000 Extensions from the future telepathy-qt-0.9.3/tests/lib/glib/future/extensions/extensions.c0000644000175200001440000000030612000056607027314 0ustar00collabora-develusers00000000000000#include "extensions.h" /* include auto-generated stubs for things common to service and client */ #include "_gen/gtypes-body.h" #include "_gen/interfaces-body.h" #include "_gen/signals-marshal.h" telepathy-qt-0.9.3/tests/lib/glib/future/extensions/connection.xml0000644000175200001440000000043012000056607027630 0ustar00collabora-develusers00000000000000 Connections extensions from the future telepathy-qt-0.9.3/tests/lib/glib/future/extensions/CMakeLists.txt0000644000175200001440000001333012000056607027512 0ustar00collabora-develusers00000000000000if(ENABLE_TP_GLIB_TESTS) file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/_gen") set(tp_glib_tests_future_extensions_SRCS extensions.c extensions.h) set(gen_all_xml ${CMAKE_CURRENT_BINARY_DIR}/_gen/all.xml) add_custom_command(OUTPUT ${gen_all_xml} COMMAND ${PYTHON_EXECUTABLE} ARGS ${CMAKE_SOURCE_DIR}/tools/xincludator.py ${CMAKE_CURRENT_SOURCE_DIR}/all.xml > ${CMAKE_CURRENT_BINARY_DIR}/_gen/all.xml DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/all.xml ${CMAKE_CURRENT_SOURCE_DIR}/channel.xml ${CMAKE_CURRENT_SOURCE_DIR}/connection.xml ${CMAKE_CURRENT_SOURCE_DIR}/misc.xml ${CMAKE_SOURCE_DIR}/tools/xincludator.py) add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/_gen/gtypes.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/gtypes-body.h COMMAND ${PYTHON_EXECUTABLE} ARGS ${CMAKE_SOURCE_DIR}/tools/glib-gtypes-generator.py ${CMAKE_CURRENT_BINARY_DIR}/_gen/all.xml _gen/gtypes Future DEPENDS ${gen_all_xml} ${CMAKE_SOURCE_DIR}/tools/glib-gtypes-generator.py) add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/_gen/signals-marshal.list COMMAND ${PYTHON_EXECUTABLE} ARGS ${CMAKE_SOURCE_DIR}/tools/glib-signals-marshal-gen.py ${CMAKE_CURRENT_BINARY_DIR}/_gen/all.xml > _gen/signals-marshal.list DEPENDS ${gen_all_xml}) add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/_gen/signals-marshal.h COMMAND ${GLIB_GENMARSHAL} --header --prefix=_future_ext_marshal ${CMAKE_CURRENT_BINARY_DIR}/_gen/signals-marshal.list > _gen/signals-marshal.h DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/_gen/signals-marshal.list) file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/gen-signals-marshal-c.sh " echo '#include \"_gen/signals-marshal.h\"' > _gen/signals-marshal.c ${GLIB_GENMARSHAL} --body --prefix=_future_ext_marshal ${CMAKE_CURRENT_BINARY_DIR}/_gen/signals-marshal.list >> _gen/signals-marshal.c ") set(gen_signals_marshal_c ${SH} ${CMAKE_CURRENT_BINARY_DIR}/gen-signals-marshal-c.sh) add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/_gen/signals-marshal.c COMMAND ${gen_signals_marshal_c} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/_gen/signals-marshal.list) add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/_gen/enums.h COMMAND ${PYTHON_EXECUTABLE} ARGS ${CMAKE_SOURCE_DIR}/tools/c-constants-gen.py Future ${CMAKE_CURRENT_BINARY_DIR}/_gen/all.xml > _gen/enums.h DEPENDS ${gen_all_xml} ${CMAKE_SOURCE_DIR}/tools/c-constants-gen.py) add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/_gen/interfaces-body.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/interfaces.h COMMAND ${PYTHON_EXECUTABLE} ARGS ${CMAKE_SOURCE_DIR}/tools/glib-interfaces-gen.py Future ${CMAKE_CURRENT_BINARY_DIR}/_gen/interfaces-body.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/interfaces.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/all.xml DEPENDS ${gen_all_xml} ${CMAKE_SOURCE_DIR}/tools/glib-interfaces-gen.py) set(SPECS connection channel misc) foreach(spec ${SPECS}) add_custom_command(OUTPUT "_gen/${spec}.xml" COMMAND ${PYTHON_EXECUTABLE} ARGS ${CMAKE_SOURCE_DIR}/tools/xincludator.py ${CMAKE_CURRENT_SOURCE_DIR}/${spec}.xml > ${CMAKE_CURRENT_BINARY_DIR}/_gen/${spec}.xml DEPENDS ${spec}.xml ${CMAKE_SOURCE_DIR}/tools/xincludator.py) endforeach(spec ${SPECS}) function(SVC_GENERATOR spec) set(ARGS ${CMAKE_SOURCE_DIR}/tools/glib-ginterface-gen.py --filename=${CMAKE_CURRENT_BINARY_DIR}/_gen/svc-${spec} --signal-marshal-prefix=_future_ext --include='' --include='_gen/signals-marshal.h' --not-implemented-func='tp_dbus_g_method_return_not_implemented' --allow-unstable ${CMAKE_CURRENT_BINARY_DIR}/_gen/${spec}.xml Future_Svc_) add_custom_command(OUTPUT _gen/svc-${spec}.c _gen/svc-${spec}.h COMMAND ${PYTHON_EXECUTABLE} ARGS ${ARGS} DEPENDS ${CMAKE_SOURCE_DIR}/tools/glib-ginterface-gen.py ${CMAKE_CURRENT_BINARY_DIR}/_gen/${spec}.xml WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) endfunction(SVC_GENERATOR spec) svc_generator(channel) svc_generator(connection) svc_generator(misc) set(NEW_FILES ${CMAKE_CURRENT_BINARY_DIR}/_gen/enums.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/gtypes.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/gtypes-body.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/interfaces.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/interfaces-body.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/signals-marshal.c ${CMAKE_CURRENT_BINARY_DIR}/_gen/signals-marshal.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/signals-marshal.list ${CMAKE_CURRENT_BINARY_DIR}/_gen/svc-channel.c ${CMAKE_CURRENT_BINARY_DIR}/_gen/svc-channel.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/svc-connection.c ${CMAKE_CURRENT_BINARY_DIR}/_gen/svc-connection.h ${CMAKE_CURRENT_BINARY_DIR}/_gen/svc-misc.c ${CMAKE_CURRENT_BINARY_DIR}/_gen/svc-misc.h) list(APPEND tp_glib_tests_future_extensions_SRCS ${NEW_FILES}) set_source_files_properties(${NEW_FILES} PROPERTIES GENERATED true) add_library(tp-glib-tests-future-extensions STATIC ${tp_glib_tests_future_extensions_SRCS}) target_link_libraries(tp-glib-tests-future-extensions ${TPGLIB_LIBRARIES}) endif(ENABLE_TP_GLIB_TESTS) telepathy-qt-0.9.3/tests/lib/glib/future/extensions/extensions.h0000644000175200001440000000106112000056607027320 0ustar00collabora-develusers00000000000000#ifndef FUTURE_EXTENSIONS_H #define FUTURE_EXTENSIONS_H #include #include #include #include "tests/lib/glib/future/extensions/_gen/enums.h" #include "tests/lib/glib/future/extensions/_gen/svc-channel.h" #include "tests/lib/glib/future/extensions/_gen/svc-connection.h" #include "tests/lib/glib/future/extensions/_gen/svc-misc.h" G_BEGIN_DECLS #include "tests/lib/glib/future/extensions/_gen/gtypes.h" #include "tests/lib/glib/future/extensions/_gen/interfaces.h" G_END_DECLS #endif telepathy-qt-0.9.3/tests/lib/glib/future/extensions/channel.xml0000644000175200001440000000064512000056607027111 0ustar00collabora-develusers00000000000000 Channel extensions from the future telepathy-qt-0.9.3/tests/lib/glib/future/conference/0000755000175200001440000000000012000056607024662 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/tests/lib/glib/future/conference/chan.h0000644000175200001440000000545712000056607025757 0ustar00collabora-develusers00000000000000/* * conference-channel.h - header for an tp_tests conference channel * * Copyright © 2010 Collabora Ltd. * Copyright © 2010 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 TP_TESTS_CONFERENCE_CHANNEL_H #define TP_TESTS_CONFERENCE_CHANNEL_H #include #include #include G_BEGIN_DECLS typedef struct _TpTestsConferenceChannel TpTestsConferenceChannel; typedef struct _TpTestsConferenceChannelPrivate TpTestsConferenceChannelPrivate; typedef struct _TpTestsConferenceChannelClass TpTestsConferenceChannelClass; typedef struct _TpTestsConferenceChannelClassPrivate TpTestsConferenceChannelClassPrivate; GType tp_tests_conference_channel_get_type (void); #define TP_TESTS_TYPE_CONFERENCE_CHANNEL \ (tp_tests_conference_channel_get_type ()) #define TP_TESTS_CONFERENCE_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), TP_TESTS_TYPE_CONFERENCE_CHANNEL, \ TpTestsConferenceChannel)) #define TP_TESTS_CONFERENCE_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), TP_TESTS_TYPE_CONFERENCE_CHANNEL, \ TpTestsConferenceChannelClass)) #define TP_TESTS_IS_CONFERENCE_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TP_TESTS_TYPE_CONFERENCE_CHANNEL)) #define TP_TESTS_IS_CONFERENCE_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), TP_TESTS_TYPE_CONFERENCE_CHANNEL)) #define TP_TESTS_CONFERENCE_CHANNEL_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_CONFERENCE_CHANNEL, \ TpTestsConferenceChannelClass)) struct _TpTestsConferenceChannelClass { GObjectClass parent_class; TpDBusPropertiesMixinClass dbus_properties_class; TpGroupMixinClass group_class; TpTestsConferenceChannelClassPrivate *priv; }; struct _TpTestsConferenceChannel { GObject parent; TpGroupMixin group; TpTestsConferenceChannelPrivate *priv; }; void tp_tests_conference_channel_remove_channel (TpTestsConferenceChannel *self, const gchar *channel); G_END_DECLS #endif telepathy-qt-0.9.3/tests/lib/glib/future/conference/chan.c0000644000175200001440000005303212000056607025742 0ustar00collabora-develusers00000000000000/* * conference-channel.c - an tp_tests conference channel * * Copyright © 2010 Collabora Ltd. * Copyright © 2010 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 */ #include "chan.h" #include #include #include #include #include #include #include #include #include "extensions/extensions.h" /* TODO: * Simulate Conference.ChannelRemoved */ static void mergeable_conference_iface_init (gpointer iface, gpointer data); static void channel_iface_init (gpointer iface, gpointer data); G_DEFINE_TYPE_WITH_CODE (TpTestsConferenceChannel, tp_tests_conference_channel, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_DBUS_PROPERTIES, tp_dbus_properties_mixin_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL, channel_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_INTERFACE_GROUP, tp_group_mixin_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_INTERFACE_CONFERENCE, NULL); G_IMPLEMENT_INTERFACE (FUTURE_TYPE_SVC_CHANNEL_INTERFACE_MERGEABLE_CONFERENCE, mergeable_conference_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_CHANNEL_IFACE, NULL); G_IMPLEMENT_INTERFACE (TP_TYPE_EXPORTABLE_CHANNEL, NULL)) enum { PROP_OBJECT_PATH = 1, PROP_CHANNEL_TYPE, PROP_HANDLE_TYPE, PROP_HANDLE, PROP_TARGET_ID, PROP_REQUESTED, PROP_INITIATOR_HANDLE, PROP_INITIATOR_ID, PROP_CONNECTION, PROP_INTERFACES, PROP_CHANNEL_DESTROYED, PROP_CHANNEL_PROPERTIES, PROP_CONFERENCE_CHANNELS, PROP_CONFERENCE_INITIAL_CHANNELS, PROP_CONFERENCE_INITIAL_INVITEE_HANDLES, PROP_CONFERENCE_INITIAL_INVITEE_IDS, PROP_CONFERENCE_INVITATION_MESSAGE, PROP_CONFERENCE_ORIGINAL_CHANNELS, N_PROPS }; struct _TpTestsConferenceChannelPrivate { TpBaseConnection *conn; gchar *object_path; guint handle_type; GPtrArray *conference_initial_channels; GPtrArray *conference_channels; GArray *conference_initial_invitee_handles; gchar **conference_initial_invitee_ids; gchar *conference_invitation_message; GHashTable *conference_original_channels; gboolean disposed; gboolean closed; }; static const gchar * tp_tests_conference_channel_interfaces[] = { TP_IFACE_CHANNEL_INTERFACE_GROUP, TP_IFACE_CHANNEL_INTERFACE_CONFERENCE, FUTURE_IFACE_CHANNEL_INTERFACE_MERGEABLE_CONFERENCE, NULL }; static void tp_tests_conference_channel_init (TpTestsConferenceChannel *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, TP_TESTS_TYPE_CONFERENCE_CHANNEL, TpTestsConferenceChannelPrivate); self->priv->handle_type = (guint) -1; } static void constructed (GObject *object) { void (*chain_up) (GObject *) = ((GObjectClass *) tp_tests_conference_channel_parent_class)->constructed; TpTestsConferenceChannel *self = TP_TESTS_CONFERENCE_CHANNEL (object); TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (self->priv->conn, TP_HANDLE_TYPE_CONTACT); TpDBusDaemon *bus; if (chain_up != NULL) { chain_up (object); } bus = tp_dbus_daemon_dup (NULL); tp_dbus_daemon_register_object (bus, self->priv->object_path, object); tp_group_mixin_init (object, G_STRUCT_OFFSET (TpTestsConferenceChannel, group), contact_repo, self->priv->conn->self_handle); if (self->priv->handle_type == (guint) -1) { self->priv->handle_type = TP_HANDLE_TYPE_NONE; } if (!self->priv->conference_channels) { self->priv->conference_channels = g_ptr_array_new (); } if (!self->priv->conference_initial_channels) { self->priv->conference_initial_channels = g_ptr_array_new (); } if (!self->priv->conference_initial_invitee_handles) { self->priv->conference_initial_invitee_handles = g_array_new (FALSE, TRUE, sizeof (guint)); } if (!self->priv->conference_initial_invitee_ids) { self->priv->conference_initial_invitee_ids = g_new0 (gchar *, 1); } if (!self->priv->conference_invitation_message) { self->priv->conference_invitation_message = g_strdup (""); } if (!self->priv->conference_original_channels) { self->priv->conference_original_channels = dbus_g_type_specialized_construct ( TP_HASH_TYPE_CHANNEL_ORIGINATOR_MAP); } } static void get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { TpTestsConferenceChannel *self = TP_TESTS_CONFERENCE_CHANNEL (object); switch (property_id) { case PROP_OBJECT_PATH: g_value_set_string (value, self->priv->object_path); break; case PROP_CHANNEL_TYPE: g_value_set_static_string (value, TP_IFACE_CHANNEL); break; case PROP_HANDLE_TYPE: g_value_set_uint (value, self->priv->handle_type); break; case PROP_HANDLE: g_value_set_uint (value, 0); break; case PROP_TARGET_ID: g_value_set_string (value, ""); break; case PROP_REQUESTED: g_value_set_boolean (value, TRUE); break; case PROP_INITIATOR_HANDLE: g_value_set_uint (value, 0); break; case PROP_INITIATOR_ID: g_value_set_string (value, ""); break; case PROP_CONNECTION: g_value_set_object (value, self->priv->conn); break; case PROP_INTERFACES: g_value_set_boxed (value, tp_tests_conference_channel_interfaces); break; case PROP_CHANNEL_DESTROYED: g_value_set_boolean (value, self->priv->closed); break; case PROP_CHANNEL_PROPERTIES: g_value_take_boxed (value, tp_dbus_properties_mixin_make_properties_hash (object, TP_IFACE_CHANNEL, "ChannelType", TP_IFACE_CHANNEL, "TargetHandleType", TP_IFACE_CHANNEL, "TargetHandle", TP_IFACE_CHANNEL, "TargetID", TP_IFACE_CHANNEL, "InitiatorHandle", TP_IFACE_CHANNEL, "InitiatorID", TP_IFACE_CHANNEL, "Requested", TP_IFACE_CHANNEL, "Interfaces", TP_IFACE_CHANNEL_INTERFACE_CONFERENCE, "Channels", TP_IFACE_CHANNEL_INTERFACE_CONFERENCE, "InitialChannels", TP_IFACE_CHANNEL_INTERFACE_CONFERENCE, "InitialInviteeHandles", TP_IFACE_CHANNEL_INTERFACE_CONFERENCE, "InitialInviteeIDs", TP_IFACE_CHANNEL_INTERFACE_CONFERENCE, "InvitationMessage", TP_IFACE_CHANNEL_INTERFACE_CONFERENCE, "OriginalChannels", NULL)); break; case PROP_CONFERENCE_CHANNELS: g_value_set_boxed (value, self->priv->conference_channels); g_assert (G_VALUE_HOLDS (value, TP_ARRAY_TYPE_OBJECT_PATH_LIST)); break; case PROP_CONFERENCE_INITIAL_CHANNELS: g_value_set_boxed (value, self->priv->conference_initial_channels); g_assert (G_VALUE_HOLDS (value, TP_ARRAY_TYPE_OBJECT_PATH_LIST)); break; case PROP_CONFERENCE_INITIAL_INVITEE_HANDLES: g_value_set_boxed (value, self->priv->conference_initial_invitee_handles); g_assert (G_VALUE_HOLDS (value, DBUS_TYPE_G_UINT_ARRAY)); break; case PROP_CONFERENCE_INITIAL_INVITEE_IDS: g_value_set_boxed (value, self->priv->conference_initial_invitee_ids); g_assert (G_VALUE_HOLDS (value, G_TYPE_STRV)); break; case PROP_CONFERENCE_INVITATION_MESSAGE: g_value_set_string (value, self->priv->conference_invitation_message); g_assert (G_VALUE_HOLDS (value, G_TYPE_STRING)); break; case PROP_CONFERENCE_ORIGINAL_CHANNELS: g_value_set_boxed (value, self->priv->conference_original_channels); g_assert (G_VALUE_HOLDS (value, TP_HASH_TYPE_CHANNEL_ORIGINATOR_MAP)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { TpTestsConferenceChannel *self = TP_TESTS_CONFERENCE_CHANNEL (object); switch (property_id) { case PROP_OBJECT_PATH: self->priv->object_path = g_value_dup_string (value); break; case PROP_HANDLE_TYPE: self->priv->handle_type = g_value_get_uint (value); break; case PROP_CONNECTION: self->priv->conn = g_value_get_object (value); break; case PROP_CONFERENCE_INITIAL_CHANNELS: g_ptr_array_free(self->priv->conference_initial_channels, TRUE); self->priv->conference_initial_channels = g_value_dup_boxed (value); g_ptr_array_free(self->priv->conference_channels, TRUE); self->priv->conference_channels = g_value_dup_boxed (value); break; case PROP_CONFERENCE_INITIAL_INVITEE_HANDLES: self->priv->conference_initial_invitee_handles = g_value_dup_boxed (value); break; case PROP_CONFERENCE_INITIAL_INVITEE_IDS: self->priv->conference_initial_invitee_ids = g_value_dup_boxed (value); break; case PROP_CONFERENCE_INVITATION_MESSAGE: self->priv->conference_invitation_message = g_value_dup_string (value); break; case PROP_CHANNEL_TYPE: case PROP_HANDLE: case PROP_TARGET_ID: case PROP_REQUESTED: case PROP_INITIATOR_HANDLE: case PROP_INITIATOR_ID: case PROP_CONFERENCE_CHANNELS: /* these properties are not actually meaningfully changeable on this * channel, so we do nothing */ break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void dispose (GObject *object) { TpTestsConferenceChannel *self = TP_TESTS_CONFERENCE_CHANNEL (object); if (self->priv->disposed) { return; } self->priv->disposed = TRUE; g_ptr_array_free (self->priv->conference_channels, TRUE); self->priv->conference_channels = NULL; g_ptr_array_free (self->priv->conference_initial_channels, TRUE); self->priv->conference_initial_channels = NULL; if (self->priv->conference_initial_invitee_handles) { g_array_free (self->priv->conference_initial_invitee_handles, FALSE); } self->priv->conference_initial_invitee_handles = NULL; g_strfreev (self->priv->conference_initial_invitee_ids); self->priv->conference_initial_invitee_ids = NULL; g_free (self->priv->conference_invitation_message); self->priv->conference_invitation_message = NULL; g_boxed_free (TP_HASH_TYPE_CHANNEL_ORIGINATOR_MAP, self->priv->conference_original_channels); self->priv->conference_original_channels = NULL; if (!self->priv->closed) { self->priv->closed = TRUE; tp_svc_channel_emit_closed (self); } ((GObjectClass *) tp_tests_conference_channel_parent_class)->dispose (object); } static void finalize (GObject *object) { TpTestsConferenceChannel *self = TP_TESTS_CONFERENCE_CHANNEL (object); g_free (self->priv->object_path); tp_group_mixin_finalize (object); ((GObjectClass *) tp_tests_conference_channel_parent_class)->finalize (object); } static gboolean add_member (GObject *obj, TpHandle handle, const gchar *message, GError **error) { TpTestsConferenceChannel *self = TP_TESTS_CONFERENCE_CHANNEL (obj); TpIntSet *add = tp_intset_new (); tp_intset_add (add, handle); tp_group_mixin_change_members (obj, message, add, NULL, NULL, NULL, self->priv->conn->self_handle, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_intset_destroy (add); return TRUE; } static void tp_tests_conference_channel_class_init (TpTestsConferenceChannelClass *klass) { static TpDBusPropertiesMixinPropImpl channel_props[] = { { "TargetHandleType", "handle-type", NULL }, { "TargetHandle", "handle", NULL }, { "ChannelType", "channel-type", NULL }, { "Interfaces", "interfaces", NULL }, { "TargetID", "target-id", NULL }, { "Requested", "requested", NULL }, { "InitiatorHandle", "initiator-handle", NULL }, { "InitiatorID", "initiator-id", NULL }, { NULL } }; static TpDBusPropertiesMixinPropImpl conference_props[] = { { "Channels", "channels", NULL }, { "InitialChannels", "initial-channels", NULL }, { "InitialInviteeHandles", "initial-invitee-handles", NULL }, { "InitialInviteeIDs", "initial-invitee-ids", NULL }, { "InvitationMessage", "invitation-message", NULL }, { "OriginalChannels", "original-channels", NULL }, { NULL } }; static TpDBusPropertiesMixinIfaceImpl prop_interfaces[] = { { TP_IFACE_CHANNEL, tp_dbus_properties_mixin_getter_gobject_properties, NULL, channel_props, }, { TP_IFACE_CHANNEL_INTERFACE_CONFERENCE, tp_dbus_properties_mixin_getter_gobject_properties, NULL, conference_props, }, { NULL } }; GObjectClass *object_class = (GObjectClass *) klass; GParamSpec *param_spec; g_type_class_add_private (klass, sizeof (TpTestsConferenceChannelPrivate)); object_class->constructed = constructed; object_class->set_property = set_property; object_class->get_property = get_property; object_class->dispose = dispose; object_class->finalize = finalize; g_object_class_override_property (object_class, PROP_OBJECT_PATH, "object-path"); g_object_class_override_property (object_class, PROP_CHANNEL_TYPE, "channel-type"); g_object_class_override_property (object_class, PROP_HANDLE_TYPE, "handle-type"); g_object_class_override_property (object_class, PROP_HANDLE, "handle"); g_object_class_override_property (object_class, PROP_CHANNEL_DESTROYED, "channel-destroyed"); g_object_class_override_property (object_class, PROP_CHANNEL_PROPERTIES, "channel-properties"); param_spec = g_param_spec_object ("connection", "TpBaseConnection object", "Connection object that owns this channel", TP_TYPE_BASE_CONNECTION, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_CONNECTION, param_spec); param_spec = g_param_spec_boxed ("interfaces", "Extra D-Bus interfaces", "Additional Channel.Interface.* interfaces", G_TYPE_STRV, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_INTERFACES, param_spec); param_spec = g_param_spec_string ("target-id", "Peer's ID", "The string obtained by inspecting the target handle", NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_TARGET_ID, param_spec); param_spec = g_param_spec_uint ("initiator-handle", "Initiator's handle", "The contact who initiated the channel", 0, G_MAXUINT32, 0, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_INITIATOR_HANDLE, param_spec); param_spec = g_param_spec_string ("initiator-id", "Initiator's ID", "The string obtained by inspecting the initiator-handle", NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_INITIATOR_ID, param_spec); param_spec = g_param_spec_boolean ("requested", "Requested?", "True if this channel was requested by the local user", FALSE, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_REQUESTED, param_spec); param_spec = g_param_spec_boxed ("channels", "Channel paths", "A list of the object paths of channels", TP_ARRAY_TYPE_OBJECT_PATH_LIST, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_CONFERENCE_CHANNELS, param_spec); param_spec = g_param_spec_boxed ("initial-channels", "Initial Channel paths", "A list of the object paths of initial channels", TP_ARRAY_TYPE_OBJECT_PATH_LIST, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_CONFERENCE_INITIAL_CHANNELS, param_spec); param_spec = g_param_spec_boxed ("initial-invitee-handles", "Initial Invitee Handles", "A list of additional contacts invited to this conference when it was created", DBUS_TYPE_G_UINT_ARRAY, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_CONFERENCE_INITIAL_INVITEE_HANDLES, param_spec); param_spec = g_param_spec_boxed ("initial-invitee-ids", "Initial Invitee IDs", "A list of additional contacts invited to this conference when it was created", G_TYPE_STRV, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_CONFERENCE_INITIAL_INVITEE_IDS, param_spec); param_spec = g_param_spec_string ("invitation-message", "Invitation message", "The message that was sent to the InitialInviteeHandles when they were invited", NULL, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_CONFERENCE_INVITATION_MESSAGE, param_spec); param_spec = g_param_spec_boxed ("original-channels", "Original Channels", "A map of channel specific handles to channels", TP_HASH_TYPE_CHANNEL_ORIGINATOR_MAP, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_CONFERENCE_ORIGINAL_CHANNELS, param_spec); klass->dbus_properties_class.interfaces = prop_interfaces; tp_dbus_properties_mixin_class_init (object_class, G_STRUCT_OFFSET (TpTestsConferenceChannelClass, dbus_properties_class)); tp_group_mixin_class_init (object_class, G_STRUCT_OFFSET (TpTestsConferenceChannelClass, group_class), add_member, NULL); tp_group_mixin_init_dbus_properties (object_class); } static void channel_close (TpSvcChannel *iface, DBusGMethodInvocation *context) { TpTestsConferenceChannel *self = TP_TESTS_CONFERENCE_CHANNEL (iface); if (!self->priv->closed) { self->priv->closed = TRUE; tp_svc_channel_emit_closed (self); } tp_svc_channel_return_from_close (context); } static void channel_get_channel_type (TpSvcChannel *iface G_GNUC_UNUSED, DBusGMethodInvocation *context) { tp_svc_channel_return_from_get_channel_type (context, TP_IFACE_CHANNEL); } static void channel_get_handle (TpSvcChannel *iface, DBusGMethodInvocation *context) { TpTestsConferenceChannel *self = TP_TESTS_CONFERENCE_CHANNEL (iface); tp_svc_channel_return_from_get_handle (context, self->priv->handle_type, 0); } static void channel_get_interfaces (TpSvcChannel *iface G_GNUC_UNUSED, DBusGMethodInvocation *context) { tp_svc_channel_return_from_get_interfaces (context, tp_tests_conference_channel_interfaces); } static void channel_iface_init (gpointer iface, gpointer data) { TpSvcChannelClass *klass = iface; #define IMPLEMENT(x) tp_svc_channel_implement_##x (klass, channel_##x) IMPLEMENT (close); IMPLEMENT (get_channel_type); IMPLEMENT (get_handle); IMPLEMENT (get_interfaces); #undef IMPLEMENT } static void mergeable_conference_merge (FutureSvcChannelInterfaceMergeableConference *iface G_GNUC_UNUSED, const gchar *channel, DBusGMethodInvocation *context) { TpTestsConferenceChannel *self = TP_TESTS_CONFERENCE_CHANNEL (iface); GHashTable *immutable_props = g_hash_table_new (NULL, NULL); g_ptr_array_add (self->priv->conference_channels, g_strdup (channel)); tp_svc_channel_interface_conference_emit_channel_merged (self, channel, 0, immutable_props); g_hash_table_destroy (immutable_props); future_svc_channel_interface_mergeable_conference_return_from_merge (context); } static void mergeable_conference_iface_init (gpointer iface, gpointer data) { FutureSvcChannelInterfaceMergeableConferenceClass *klass = iface; #define IMPLEMENT(x) future_svc_channel_interface_mergeable_conference_implement_##x (klass, mergeable_conference_##x) IMPLEMENT (merge); #undef IMPLEMENT } void tp_tests_conference_channel_remove_channel (TpTestsConferenceChannel *self, const gchar *channel) { guint i; for (i = 0; i < self->priv->conference_channels->len; i++) { gchar *path = g_ptr_array_index (self->priv->conference_channels, i); if (strcmp (path, channel) == 0) { GHashTable *details = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) tp_g_value_slice_free); g_ptr_array_remove (self->priv->conference_channels, (gpointer) path); g_free (path); g_hash_table_insert (details, "actor", tp_g_value_slice_new_uint (self->priv->conn->self_handle)); g_hash_table_insert (details, "domain-specific-detail-uint", tp_g_value_slice_new_uint (3)); tp_svc_channel_interface_conference_emit_channel_removed (self, channel, details); g_hash_table_destroy (details); } } } telepathy-qt-0.9.3/tests/lib/glib/future/conference/CMakeLists.txt0000644000175200001440000000072412000056607027425 0ustar00collabora-develusers00000000000000if(ENABLE_TP_GLIB_TESTS) include_directories( ${CMAKE_SOURCE_DIR}/tests/lib/glib/future) set(future_example_cm_conference_SRCS chan.c chan.h) add_library(future-example-cm-conference STATIC ${future_example_cm_conference_SRCS}) target_link_libraries(future-example-cm-conference ${TPGLIB_LIBRARIES} tp-glib-tests tp-glib-tests-future-extensions) endif(ENABLE_TP_GLIB_TESTS) telepathy-qt-0.9.3/tests/lib/glib/future/CMakeLists.txt0000644000175200001440000000023512000056607025313 0ustar00collabora-develusers00000000000000if(ENABLE_TP_GLIB_TESTS) add_subdirectory(extensions) add_subdirectory(conference) add_subdirectory(conn-addressing) endif(ENABLE_TP_GLIB_TESTS) telepathy-qt-0.9.3/tests/lib/glib/future/conn-addressing/0000755000175200001440000000000012000056607025631 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/tests/lib/glib/future/conn-addressing/conn.c0000644000175200001440000002403312000056607026734 0ustar00collabora-develusers00000000000000/* * conn.c - connection implementing Conn.I.Addressing * * Copyright (C) 2011 Collabora Ltd. * Copyright (C) 2011 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #include "conn.h" #include #include #include #include #include #include #include "extensions/extensions.h" #include static void addressing_fill_contact_attributes (GObject *obj, const GArray *contacts, GHashTable *attributes_hash); static void addressing_iface_init (gpointer, gpointer); G_DEFINE_TYPE_WITH_CODE (TpTestsAddressingConnection, tp_tests_addressing_connection, TP_TESTS_TYPE_CONTACTS_CONNECTION, G_IMPLEMENT_INTERFACE (FUTURE_TYPE_SVC_CONNECTION_INTERFACE_ADDRESSING, addressing_iface_init); ); struct _TpTestsAddressingConnectionPrivate { }; static const gchar *addressable_vcard_fields[] = {"x-addr", NULL}; static const gchar *addressable_uri_schemes[] = {"addr", NULL}; static const char *assumed_interfaces[] = { TP_IFACE_CONNECTION, FUTURE_IFACE_CONNECTION_INTERFACE_ADDRESSING, NULL }; static void constructed (GObject *object) { TpTestsAddressingConnection *self = TP_TESTS_ADDRESSING_CONNECTION (object); void (*parent_impl) (GObject *) = G_OBJECT_CLASS (tp_tests_addressing_connection_parent_class)->constructed; if (parent_impl != NULL) parent_impl (object); tp_contacts_mixin_add_contact_attributes_iface (G_OBJECT (self), FUTURE_IFACE_CONNECTION_INTERFACE_ADDRESSING, addressing_fill_contact_attributes); } static void tp_tests_addressing_connection_init (TpTestsAddressingConnection *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, TP_TESTS_TYPE_ADDRESSING_CONNECTION, TpTestsAddressingConnectionPrivate); } static void finalize (GObject *object) { G_OBJECT_CLASS (tp_tests_addressing_connection_parent_class)->finalize (object); } static void tp_tests_addressing_connection_class_init (TpTestsAddressingConnectionClass *klass) { TpBaseConnectionClass *base_class = (TpBaseConnectionClass *) klass; GObjectClass *object_class = (GObjectClass *) klass; static const gchar *interfaces_always_present[] = { TP_IFACE_CONNECTION_INTERFACE_ALIASING, TP_IFACE_CONNECTION_INTERFACE_AVATARS, TP_IFACE_CONNECTION_INTERFACE_CONTACTS, TP_IFACE_CONNECTION_INTERFACE_CONTACT_LIST, TP_IFACE_CONNECTION_INTERFACE_CONTACT_GROUPS, TP_IFACE_CONNECTION_INTERFACE_PRESENCE, TP_IFACE_CONNECTION_INTERFACE_SIMPLE_PRESENCE, TP_IFACE_CONNECTION_INTERFACE_LOCATION, TP_IFACE_CONNECTION_INTERFACE_CONTACT_CAPABILITIES, TP_IFACE_CONNECTION_INTERFACE_CONTACT_INFO, TP_IFACE_CONNECTION_INTERFACE_REQUESTS, FUTURE_IFACE_CONNECTION_INTERFACE_ADDRESSING, NULL }; object_class->constructed = constructed; object_class->finalize = finalize; g_type_class_add_private (klass, sizeof (TpTestsAddressingConnectionPrivate)); base_class->interfaces_always_present = interfaces_always_present; } static gchar ** uris_for_handle (TpHandleRepoIface *contact_repo, TpHandle contact) { GPtrArray *uris = g_ptr_array_new (); const gchar * const *scheme; for (scheme = addressable_uri_schemes; *scheme != NULL; scheme++) { const gchar *identifier = tp_handle_inspect (contact_repo, contact); gchar *uri = g_strdup_printf ("%s:%s", *scheme, identifier); if (uri != NULL) { g_ptr_array_add (uris, uri); } } g_ptr_array_add (uris, NULL); return (gchar **) g_ptr_array_free (uris, FALSE); } static GHashTable * vcard_addresses_for_handle (TpHandleRepoIface *contact_repo, TpHandle contact) { GHashTable *addresses = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) g_free); const gchar * const *field; for (field = addressable_vcard_fields; *field != NULL; field++) { const gchar *identifier = tp_handle_inspect (contact_repo, contact); if (identifier != NULL) { g_hash_table_insert (addresses, (gpointer) *field, g_strdup (identifier)); } } return addresses; } static void addressing_fill_contact_attributes (GObject *obj, const GArray *contacts, GHashTable *attributes_hash) { guint i; TpHandleRepoIface *contact_repo = tp_base_connection_get_handles ( (TpBaseConnection *) obj, TP_HANDLE_TYPE_CONTACT); for (i = 0; i < contacts->len; i++) { TpHandle contact = g_array_index (contacts, TpHandle, i); gchar **uris = uris_for_handle (contact_repo, contact); GHashTable *addresses = vcard_addresses_for_handle (contact_repo, contact); tp_contacts_mixin_set_contact_attribute (attributes_hash, contact, FUTURE_IFACE_CONNECTION_INTERFACE_ADDRESSING"/uris", tp_g_value_slice_new_take_boxed (G_TYPE_STRV, uris)); tp_contacts_mixin_set_contact_attribute (attributes_hash, contact, FUTURE_IFACE_CONNECTION_INTERFACE_ADDRESSING"/addresses", tp_g_value_slice_new_take_boxed (TP_HASH_TYPE_STRING_STRING_MAP, addresses)); } } static gchar * uri_to_id (const gchar *uri, GError **error) { gchar *scheme; gchar *normalized_id = NULL; g_return_val_if_fail (uri != NULL, NULL); scheme = g_uri_parse_scheme (uri); if (scheme == NULL) { g_set_error (error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "'%s' is not a valid URI", uri); goto OUT; } else if (g_ascii_strcasecmp (scheme, "addr") == 0) { normalized_id = g_strdup (uri + strlen (scheme) + 1); /* Strip the scheme */ } else { g_set_error (error, TP_ERROR, TP_ERROR_NOT_IMPLEMENTED, "'%s' URI scheme is not supported by this protocol", scheme); goto OUT; } OUT: g_free (scheme); return normalized_id; } static TpHandle ensure_handle_from_uri (TpHandleRepoIface *repo, const gchar *uri, GError **error) { TpHandle handle; gchar *id = uri_to_id (uri, error); if (id == NULL) return 0; handle = tp_handle_ensure (repo, id, NULL, error); g_free (id); return handle; } static void addressing_get_contacts_by_uri (FutureSvcConnectionInterfaceAddressing *iface, const gchar **uris, const gchar **interfaces, DBusGMethodInvocation *context) { const gchar **uri; TpHandleRepoIface *contact_repo = tp_base_connection_get_handles ( (TpBaseConnection *) iface, TP_HANDLE_TYPE_CONTACT); GHashTable *attributes; GHashTable *requested = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); GArray *handles = g_array_sized_new (TRUE, TRUE, sizeof (TpHandle), g_strv_length ((gchar **) uris)); gchar *sender = dbus_g_method_get_sender (context); for (uri = uris; *uri != NULL; uri++) { TpHandle h = ensure_handle_from_uri (contact_repo, *uri, NULL); if (h == 0) continue; g_hash_table_insert (requested, g_strdup (*uri), GUINT_TO_POINTER (h)); g_array_append_val (handles, h); } attributes = tp_contacts_mixin_get_contact_attributes (G_OBJECT (iface), handles, interfaces, assumed_interfaces, sender); future_svc_connection_interface_addressing_return_from_get_contacts_by_uri ( context, requested, attributes); g_hash_table_unref (requested); g_hash_table_unref (attributes); g_free (sender); } static gchar * vcard_address_to_id (const gchar *vcard_field, const gchar *vcard_address, GError **error) { gchar *normalized_id = NULL; g_return_val_if_fail (vcard_field != NULL, NULL); g_return_val_if_fail (vcard_address != NULL, NULL); if (g_ascii_strcasecmp (vcard_field, "x-addr") == 0) { normalized_id = g_strdup (vcard_address); } else { g_set_error (error, TP_ERROR, TP_ERROR_NOT_IMPLEMENTED, "'%s' vCard field is not supported by this protocol", vcard_field); } return normalized_id; } static TpHandle ensure_handle_from_vcard_address (TpHandleRepoIface *repo, const gchar *vcard_field, const gchar *vcard_address, GError **error) { TpHandle handle; gchar *normalized_id; normalized_id = vcard_address_to_id (vcard_field, vcard_address, error); if (normalized_id == NULL) return 0; handle = tp_handle_ensure (repo, normalized_id, NULL, error); g_free (normalized_id); return handle; } static void addressing_get_contacts_by_vcard_field (FutureSvcConnectionInterfaceAddressing *iface, const gchar *field, const gchar **addresses, const gchar **interfaces, DBusGMethodInvocation *context) { const gchar **address; TpHandleRepoIface *contact_repo = tp_base_connection_get_handles ( (TpBaseConnection *) iface, TP_HANDLE_TYPE_CONTACT); GHashTable *attributes; GHashTable *requested = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); GArray *handles = g_array_sized_new (TRUE, TRUE, sizeof (TpHandle), g_strv_length ((gchar **) addresses)); gchar *sender = dbus_g_method_get_sender (context); for (address = addresses; *address != NULL; address++) { TpHandle h = ensure_handle_from_vcard_address (contact_repo, field, *address, NULL); if (h == 0) continue; g_hash_table_insert (requested, g_strdup (*address), GUINT_TO_POINTER (h)); g_array_append_val (handles, h); } attributes = tp_contacts_mixin_get_contact_attributes (G_OBJECT (iface), handles, interfaces, assumed_interfaces, sender); future_svc_connection_interface_addressing_return_from_get_contacts_by_vcard_field ( context, requested, attributes); g_hash_table_unref (requested); g_hash_table_unref (attributes); g_free (sender); } static void addressing_iface_init (gpointer g_iface, gpointer iface_data) { #define IMPLEMENT(x) \ future_svc_connection_interface_addressing_implement_##x (\ g_iface, addressing_##x) IMPLEMENT(get_contacts_by_uri); IMPLEMENT(get_contacts_by_vcard_field); #undef IMPLEMENT } telepathy-qt-0.9.3/tests/lib/glib/future/conn-addressing/CMakeLists.txt0000644000175200001440000000105112000056607030366 0ustar00collabora-develusers00000000000000if(ENABLE_TP_GLIB_TESTS) include_directories( ${CMAKE_SOURCE_DIR}/tests/lib/glib ${CMAKE_SOURCE_DIR}/tests/lib/glib/future ${DBUS_GLIB_INCLUDE_DIRS}) set(future_example_conn_addressing_SRCS conn.c conn.h) add_library(future-example-conn-addressing STATIC ${future_example_conn_addressing_SRCS}) target_link_libraries(future-example-conn-addressing ${TPGLIB_LIBRARIES} tp-glib-tests tp-glib-tests-future-extensions) endif(ENABLE_TP_GLIB_TESTS) telepathy-qt-0.9.3/tests/lib/glib/future/conn-addressing/conn.h0000644000175200001440000000377512000056607026753 0ustar00collabora-develusers00000000000000/* * conn.h - header for a connection that implements Conn.I.Addressing * * Copyright (C) 2011 Collabora Ltd. * Copyright (C) 2011 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef __TP_TESTS_ADDRESSING_CONN_H__ #define __TP_TESTS_ADDRESSING_CONN_H__ #include #include #include "contacts-conn.h" G_BEGIN_DECLS typedef struct _TpTestsAddressingConnection TpTestsAddressingConnection; typedef struct _TpTestsAddressingConnectionClass TpTestsAddressingConnectionClass; typedef struct _TpTestsAddressingConnectionPrivate TpTestsAddressingConnectionPrivate; struct _TpTestsAddressingConnectionClass { TpTestsContactsConnectionClass parent_class; }; struct _TpTestsAddressingConnection { TpTestsContactsConnection parent; TpTestsAddressingConnectionPrivate *priv; }; GType tp_tests_addressing_connection_get_type (void); /* TYPE MACROS */ #define TP_TESTS_TYPE_ADDRESSING_CONNECTION \ (tp_tests_addressing_connection_get_type ()) #define TP_TESTS_ADDRESSING_CONNECTION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), TP_TESTS_TYPE_ADDRESSING_CONNECTION, \ TpTestsAddressingConnection)) #define TP_TESTS_ADDRESSING_CONNECTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), TP_TESTS_TYPE_ADDRESSING_CONNECTION, \ TpTestsAddressingConnectionClass)) #define TP_TESTS_ADDRESSING_IS_CONNECTION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), TP_TESTS_TYPE_ADDRESSING_CONNECTION)) #define TP_TESTS_ADDRESSING_IS_CONNECTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), TP_TESTS_TYPE_ADDRESSING_CONNECTION)) #define TP_TESTS_ADDRESSING_CONNECTION_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_ADDRESSING_CONNECTION, \ TpTestsAddressingConnectionClass)) G_END_DECLS #endif telepathy-qt-0.9.3/tests/lib/glib/simple-account.c0000644000175200001440000002327712000056607024343 0ustar00collabora-develusers00000000000000/* * simple-account.c - a simple account service. * * Copyright (C) 2010 Collabora Ltd. * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #include "simple-account.h" #include #include #include #include #include #include #include #include static void account_iface_init (gpointer, gpointer); G_DEFINE_TYPE_WITH_CODE (TpTestsSimpleAccount, tp_tests_simple_account, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_ACCOUNT, account_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_DBUS_PROPERTIES, tp_dbus_properties_mixin_iface_init) ) /* TP_IFACE_ACCOUNT is implied */ static const char *ACCOUNT_INTERFACES[] = { NULL }; enum { PROP_0, PROP_INTERFACES, PROP_DISPLAY_NAME, PROP_ICON, PROP_VALID, PROP_ENABLED, PROP_NICKNAME, PROP_PARAMETERS, PROP_AUTOMATIC_PRESENCE, PROP_CONNECT_AUTO, PROP_CONNECTION, PROP_CONNECTION_STATUS, PROP_CONNECTION_STATUS_REASON, PROP_CURRENT_PRESENCE, PROP_REQUESTED_PRESENCE, PROP_NORMALIZED_NAME, PROP_HAS_BEEN_ONLINE, }; struct _TpTestsSimpleAccountPrivate { gpointer unused; }; static void account_iface_init (gpointer klass, gpointer unused G_GNUC_UNUSED) { #define IMPLEMENT(x) tp_svc_account_implement_##x (\ klass, tp_tests_simple_account_##x) /* TODO */ #undef IMPLEMENT } static void tp_tests_simple_account_init (TpTestsSimpleAccount *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, TP_TESTS_TYPE_SIMPLE_ACCOUNT, TpTestsSimpleAccountPrivate); } static void tp_tests_simple_account_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *spec) { GValueArray *presence; presence = tp_value_array_build (3, G_TYPE_UINT, TP_CONNECTION_PRESENCE_TYPE_AVAILABLE, G_TYPE_STRING, "available", G_TYPE_STRING, "", G_TYPE_INVALID); switch (property_id) { case PROP_INTERFACES: g_value_set_boxed (value, ACCOUNT_INTERFACES); break; case PROP_DISPLAY_NAME: g_value_set_string (value, "Fake Account"); break; case PROP_ICON: g_value_set_string (value, ""); break; case PROP_VALID: g_value_set_boolean (value, TRUE); break; case PROP_ENABLED: g_value_set_boolean (value, TRUE); break; case PROP_NICKNAME: g_value_set_string (value, "badger"); break; case PROP_PARAMETERS: g_value_take_boxed (value, g_hash_table_new (NULL, NULL)); break; case PROP_AUTOMATIC_PRESENCE: g_value_set_boxed (value, presence); break; case PROP_CONNECT_AUTO: g_value_set_boolean (value, FALSE); break; case PROP_CONNECTION: g_value_set_boxed (value, "/"); break; case PROP_CONNECTION_STATUS: g_value_set_uint (value, TP_CONNECTION_STATUS_CONNECTED); break; case PROP_CONNECTION_STATUS_REASON: g_value_set_uint (value, TP_CONNECTION_STATUS_REASON_REQUESTED); break; case PROP_CURRENT_PRESENCE: g_value_set_boxed (value, presence); break; case PROP_REQUESTED_PRESENCE: g_value_set_boxed (value, presence); break; case PROP_NORMALIZED_NAME: g_value_set_string (value, ""); break; case PROP_HAS_BEEN_ONLINE: g_value_set_boolean (value, TRUE); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, spec); break; } g_boxed_free (TP_STRUCT_TYPE_SIMPLE_PRESENCE, presence); } /** * This class currently only provides the minimum for * tp_account_prepare to succeed. This turns out to be only a working * Properties.GetAll(). */ static void tp_tests_simple_account_class_init (TpTestsSimpleAccountClass *klass) { GObjectClass *object_class = (GObjectClass *) klass; GParamSpec *param_spec; static TpDBusPropertiesMixinPropImpl a_props[] = { { "Interfaces", "interfaces", NULL }, { "DisplayName", "display-name", NULL }, { "Icon", "icon", NULL }, { "Valid", "valid", NULL }, { "Enabled", "enabled", NULL }, { "Nickname", "nickname", NULL }, { "Parameters", "parameters", NULL }, { "AutomaticPresence", "automatic-presence", NULL }, { "ConnectAutomatically", "connect-automatically", NULL }, { "Connection", "connection", NULL }, { "ConnectionStatus", "connection-status", NULL }, { "ConnectionStatusReason", "connection-status-reason", NULL }, { "CurrentPresence", "current-presence", NULL }, { "RequestedPresence", "requested-presence", NULL }, { "NormalizedName", "normalized-name", NULL }, { "HasBeenOnline", "has-been-online", NULL }, { NULL } }; static TpDBusPropertiesMixinIfaceImpl prop_interfaces[] = { { TP_IFACE_ACCOUNT, tp_dbus_properties_mixin_getter_gobject_properties, NULL, a_props }, { NULL }, }; g_type_class_add_private (klass, sizeof (TpTestsSimpleAccountPrivate)); object_class->get_property = tp_tests_simple_account_get_property; param_spec = g_param_spec_boxed ("interfaces", "Extra D-Bus interfaces", "In this case we only implement Account, so none.", G_TYPE_STRV, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_INTERFACES, param_spec); param_spec = g_param_spec_string ("display-name", "display name", "DisplayName property", NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_DISPLAY_NAME, param_spec); param_spec = g_param_spec_string ("icon", "icon", "Icon property", NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_ICON, param_spec); param_spec = g_param_spec_boolean ("valid", "valid", "Valid property", FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_VALID, param_spec); param_spec = g_param_spec_boolean ("enabled", "enabled", "Enabled property", FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_ENABLED, param_spec); param_spec = g_param_spec_string ("nickname", "nickname", "Nickname property", NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_NICKNAME, param_spec); param_spec = g_param_spec_boxed ("parameters", "parameters", "Parameters property", TP_HASH_TYPE_STRING_VARIANT_MAP, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_PARAMETERS, param_spec); param_spec = g_param_spec_boxed ("automatic-presence", "automatic presence", "AutomaticPresence property", TP_STRUCT_TYPE_SIMPLE_PRESENCE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_AUTOMATIC_PRESENCE, param_spec); param_spec = g_param_spec_boolean ("connect-automatically", "connect automatically", "ConnectAutomatically property", FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_CONNECT_AUTO, param_spec); param_spec = g_param_spec_boxed ("connection", "connection", "Connection property", DBUS_TYPE_G_OBJECT_PATH, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_CONNECTION, param_spec); param_spec = g_param_spec_uint ("connection-status", "connection status", "ConnectionStatus property", 0, NUM_TP_CONNECTION_STATUSES, TP_CONNECTION_STATUS_DISCONNECTED, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_CONNECTION_STATUS, param_spec); param_spec = g_param_spec_uint ("connection-status-reason", "connection status reason", "ConnectionStatusReason property", 0, NUM_TP_CONNECTION_STATUS_REASONS, TP_CONNECTION_STATUS_REASON_NONE_SPECIFIED, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_CONNECTION_STATUS_REASON, param_spec); param_spec = g_param_spec_boxed ("current-presence", "current presence", "CurrentPresence property", TP_STRUCT_TYPE_SIMPLE_PRESENCE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_CURRENT_PRESENCE, param_spec); param_spec = g_param_spec_boxed ("requested-presence", "requested presence", "RequestedPresence property", TP_STRUCT_TYPE_SIMPLE_PRESENCE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_REQUESTED_PRESENCE, param_spec); param_spec = g_param_spec_string ("normalized-name", "normalized name", "NormalizedName property", NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_NORMALIZED_NAME, param_spec); param_spec = g_param_spec_boolean ("has-been-online", "has been online", "HasBeenOnline property", FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_HAS_BEEN_ONLINE, param_spec); klass->dbus_props_class.interfaces = prop_interfaces; tp_dbus_properties_mixin_class_init (object_class, G_STRUCT_OFFSET (TpTestsSimpleAccountClass, dbus_props_class)); } telepathy-qt-0.9.3/tests/lib/glib/textchan-null.c0000644000175200001440000004232212000056607024176 0ustar00collabora-develusers00000000000000/* * /dev/null as a text channel * * Copyright (C) 2008 Collabora Ltd. * Copyright (C) 2008 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ //TODO This either needs to be ported away from TpTextMixin, //or we need to use another test CM instead of this one on the tests where it is used. //tp-glib has not ported it because it is used in TpTextMixin tests. #define _TP_IGNORE_DEPRECATIONS #include "textchan-null.h" #include #include #include #include #include #include #include static void text_iface_init (gpointer iface, gpointer data); static void channel_iface_init (gpointer iface, gpointer data); G_DEFINE_TYPE_WITH_CODE (TpTestsTextChannelNull, tp_tests_text_channel_null, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL, channel_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_TYPE_TEXT, text_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_CHANNEL_IFACE, NULL)) G_DEFINE_TYPE_WITH_CODE (TpTestsPropsTextChannel, tp_tests_props_text_channel, TP_TESTS_TYPE_TEXT_CHANNEL_NULL, G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_DBUS_PROPERTIES, tp_dbus_properties_mixin_iface_init)) G_DEFINE_TYPE_WITH_CODE (TpTestsPropsGroupTextChannel, tp_tests_props_group_text_channel, TP_TESTS_TYPE_PROPS_TEXT_CHANNEL, G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_INTERFACE_GROUP, tp_group_mixin_iface_init)) static const char *tp_tests_text_channel_null_interfaces[] = { NULL }; /* type definition stuff */ enum { PROP_OBJECT_PATH = 1, PROP_CHANNEL_TYPE, PROP_HANDLE_TYPE, PROP_HANDLE, PROP_TARGET_ID, PROP_CONNECTION, PROP_INTERFACES, PROP_REQUESTED, PROP_INITIATOR_HANDLE, PROP_INITIATOR_ID, N_PROPS }; struct _TpTestsTextChannelNullPrivate { TpBaseConnection *conn; gchar *object_path; TpHandle handle; unsigned closed:1; unsigned disposed:1; }; static void tp_tests_text_channel_null_init (TpTestsTextChannelNull *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, TP_TESTS_TYPE_TEXT_CHANNEL_NULL, TpTestsTextChannelNullPrivate); } static void tp_tests_props_text_channel_init (TpTestsPropsTextChannel *self) { self->dbus_property_interfaces_retrieved = g_hash_table_new (NULL, NULL); } static GObject * constructor (GType type, guint n_props, GObjectConstructParam *props) { GObject *object = G_OBJECT_CLASS (tp_tests_text_channel_null_parent_class)->constructor (type, n_props, props); TpTestsTextChannelNull *self = TP_TESTS_TEXT_CHANNEL_NULL (object); TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (self->priv->conn, TP_HANDLE_TYPE_CONTACT); tp_dbus_daemon_register_object ( tp_base_connection_get_dbus_daemon (self->priv->conn), self->priv->object_path, self); tp_text_mixin_init (object, G_STRUCT_OFFSET (TpTestsTextChannelNull, text), contact_repo); tp_text_mixin_set_message_types (object, TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL, TP_CHANNEL_TEXT_MESSAGE_TYPE_ACTION, TP_CHANNEL_TEXT_MESSAGE_TYPE_NOTICE, G_MAXUINT); return object; } static void get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { TpTestsTextChannelNull *self = TP_TESTS_TEXT_CHANNEL_NULL (object); TpTestsTextChannelNullClass *klass = TP_TESTS_TEXT_CHANNEL_NULL_GET_CLASS (self); switch (property_id) { case PROP_OBJECT_PATH: g_value_set_string (value, self->priv->object_path); break; case PROP_CHANNEL_TYPE: g_value_set_static_string (value, TP_IFACE_CHANNEL_TYPE_TEXT); break; case PROP_HANDLE_TYPE: g_value_set_uint (value, TP_HANDLE_TYPE_CONTACT); break; case PROP_HANDLE: g_value_set_uint (value, self->priv->handle); break; case PROP_TARGET_ID: { TpHandleRepoIface *contact_repo = tp_base_connection_get_handles ( self->priv->conn, TP_HANDLE_TYPE_CONTACT); g_value_set_string (value, tp_handle_inspect (contact_repo, self->priv->handle)); } break; case PROP_REQUESTED: g_value_set_boolean (value, TRUE); break; case PROP_INITIATOR_HANDLE: g_value_set_uint (value, self->priv->conn->self_handle); break; case PROP_INITIATOR_ID: { TpHandleRepoIface *contact_repo = tp_base_connection_get_handles ( self->priv->conn, TP_HANDLE_TYPE_CONTACT); g_value_set_string (value, tp_handle_inspect (contact_repo, self->priv->conn->self_handle)); } break; case PROP_INTERFACES: g_value_set_boxed (value, klass->interfaces); break; case PROP_CONNECTION: g_value_set_object (value, self->priv->conn); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { TpTestsTextChannelNull *self = TP_TESTS_TEXT_CHANNEL_NULL (object); switch (property_id) { case PROP_OBJECT_PATH: g_free (self->priv->object_path); self->priv->object_path = g_value_dup_string (value); break; case PROP_HANDLE: /* we don't ref it here because we don't necessarily have access to the * contact repo yet - instead we ref it in the constructor. */ self->priv->handle = g_value_get_uint (value); break; case PROP_HANDLE_TYPE: case PROP_CHANNEL_TYPE: /* these properties are writable in the interface, but not actually * meaningfully changable on this channel, so we do nothing */ break; case PROP_CONNECTION: self->priv->conn = g_value_get_object (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } void tp_tests_text_channel_null_close (TpTestsTextChannelNull *self) { if (!self->priv->closed) { self->priv->closed = TRUE; tp_svc_channel_emit_closed (self); tp_dbus_daemon_unregister_object ( tp_base_connection_get_dbus_daemon (self->priv->conn), self); } } static void dispose (GObject *object) { TpTestsTextChannelNull *self = TP_TESTS_TEXT_CHANNEL_NULL (object); if (self->priv->disposed) return; self->priv->disposed = TRUE; tp_tests_text_channel_null_close (self); ((GObjectClass *) tp_tests_text_channel_null_parent_class)->dispose (object); } static void finalize (GObject *object) { TpTestsTextChannelNull *self = TP_TESTS_TEXT_CHANNEL_NULL (object); g_free (self->priv->object_path); tp_text_mixin_finalize (object); ((GObjectClass *) tp_tests_text_channel_null_parent_class)->finalize (object); } static void tp_tests_text_channel_null_class_init (TpTestsTextChannelNullClass *klass) { GObjectClass *object_class = (GObjectClass *) klass; GParamSpec *param_spec; g_type_class_add_private (klass, sizeof (TpTestsTextChannelNullPrivate)); klass->interfaces = tp_tests_text_channel_null_interfaces; object_class->constructor = constructor; object_class->set_property = set_property; object_class->get_property = get_property; object_class->dispose = dispose; object_class->finalize = finalize; g_object_class_override_property (object_class, PROP_OBJECT_PATH, "object-path"); g_object_class_override_property (object_class, PROP_CHANNEL_TYPE, "channel-type"); g_object_class_override_property (object_class, PROP_HANDLE_TYPE, "handle-type"); g_object_class_override_property (object_class, PROP_HANDLE, "handle"); param_spec = g_param_spec_object ("connection", "TpBaseConnection object", "Connection object that owns this channel", TP_TYPE_BASE_CONNECTION, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB); g_object_class_install_property (object_class, PROP_CONNECTION, param_spec); param_spec = g_param_spec_boxed ("interfaces", "Extra D-Bus interfaces", "Additional Channel.Interface.* interfaces", G_TYPE_STRV, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_INTERFACES, param_spec); param_spec = g_param_spec_string ("target-id", "Peer's ID", "The string obtained by inspecting the target handle", NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_TARGET_ID, param_spec); param_spec = g_param_spec_uint ("initiator-handle", "Initiator's handle", "The contact who initiated the channel", 0, G_MAXUINT32, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_INITIATOR_HANDLE, param_spec); param_spec = g_param_spec_string ("initiator-id", "Initiator's ID", "The string obtained by inspecting the initiator-handle", NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_INITIATOR_ID, param_spec); param_spec = g_param_spec_boolean ("requested", "Requested?", "True if this channel was requested by the local user", FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_REQUESTED, param_spec); tp_text_mixin_class_init (object_class, G_STRUCT_OFFSET (TpTestsTextChannelNullClass, text_class)); } static void tp_tests_props_text_channel_getter_gobject_properties (GObject *object, GQuark interface, GQuark name, GValue *value, gpointer getter_data) { TpTestsPropsTextChannel *self = TP_TESTS_PROPS_TEXT_CHANNEL (object); g_hash_table_insert (self->dbus_property_interfaces_retrieved, GUINT_TO_POINTER (interface), GUINT_TO_POINTER (interface)); tp_dbus_properties_mixin_getter_gobject_properties (object, interface, name, value, getter_data); } static void props_finalize (GObject *object) { TpTestsPropsTextChannel *self = TP_TESTS_PROPS_TEXT_CHANNEL (object); g_hash_table_unref (self->dbus_property_interfaces_retrieved); ((GObjectClass *) tp_tests_props_text_channel_parent_class)->finalize (object); } static void tp_tests_props_text_channel_class_init (TpTestsPropsTextChannelClass *klass) { GObjectClass *object_class = (GObjectClass *) klass; static TpDBusPropertiesMixinPropImpl channel_props[] = { { "TargetHandleType", "handle-type", NULL }, { "TargetHandle", "handle", NULL }, { "ChannelType", "channel-type", NULL }, { "Interfaces", "interfaces", NULL }, { "TargetID", "target-id", NULL }, { "Requested", "requested", NULL }, { "InitiatorHandle", "initiator-handle", NULL }, { "InitiatorID", "initiator-id", NULL }, { NULL } }; static TpDBusPropertiesMixinIfaceImpl prop_interfaces[] = { { TP_IFACE_CHANNEL, tp_tests_props_text_channel_getter_gobject_properties, NULL, channel_props, }, { NULL } }; object_class->finalize = props_finalize; klass->dbus_properties_class.interfaces = prop_interfaces; tp_dbus_properties_mixin_class_init (object_class, G_STRUCT_OFFSET (TpTestsPropsTextChannelClass, dbus_properties_class)); } static const char *tp_tests_props_group_text_channel_interfaces[] = { TP_IFACE_CHANNEL_INTERFACE_GROUP, NULL }; static void tp_tests_props_group_text_channel_init (TpTestsPropsGroupTextChannel *self) { } static void group_constructed (GObject *self) { TpBaseConnection *conn = TP_TESTS_TEXT_CHANNEL_NULL (self)->priv->conn; void (*chain_up) (GObject *) = ((GObjectClass *) tp_tests_props_group_text_channel_parent_class)->constructed; if (chain_up != NULL) chain_up (self); tp_group_mixin_init (self, G_STRUCT_OFFSET (TpTestsPropsGroupTextChannel, group), tp_base_connection_get_handles (conn, TP_HANDLE_TYPE_CONTACT), tp_base_connection_get_self_handle (conn)); tp_group_mixin_change_flags (self, TP_CHANNEL_GROUP_FLAG_PROPERTIES, 0); } static void group_finalize (GObject *self) { tp_group_mixin_finalize (self); ((GObjectClass *) tp_tests_props_group_text_channel_parent_class)->finalize (self); } static gboolean dummy_add_remove_member (GObject *obj, TpHandle handle, const gchar *message, GError **error) { return TRUE; } static void group_iface_props_getter (GObject *object, GQuark interface, GQuark name, GValue *value, gpointer getter_data) { TpTestsPropsTextChannel *self = TP_TESTS_PROPS_TEXT_CHANNEL (object); g_hash_table_insert (self->dbus_property_interfaces_retrieved, GUINT_TO_POINTER (interface), GUINT_TO_POINTER (interface)); tp_group_mixin_get_dbus_property (object, interface, name, value, getter_data); } static void tp_tests_props_group_text_channel_class_init (TpTestsPropsGroupTextChannelClass *klass) { GObjectClass *object_class = (GObjectClass *) klass; TpTestsTextChannelNullClass *null_class = (TpTestsTextChannelNullClass *) klass; static TpDBusPropertiesMixinPropImpl group_props[] = { { "GroupFlags", NULL, NULL }, { "HandleOwners", NULL, NULL }, { "LocalPendingMembers", NULL, NULL }, { "Members", NULL, NULL }, { "RemotePendingMembers", NULL, NULL }, { "SelfHandle", NULL, NULL }, { NULL } }; null_class->interfaces = tp_tests_props_group_text_channel_interfaces; object_class->constructed = group_constructed; object_class->finalize = group_finalize; tp_group_mixin_class_init (object_class, G_STRUCT_OFFSET (TpTestsPropsGroupTextChannelClass, group_class), dummy_add_remove_member, dummy_add_remove_member); tp_dbus_properties_mixin_implement_interface (object_class, TP_IFACE_QUARK_CHANNEL_INTERFACE_GROUP, group_iface_props_getter, NULL, group_props); } static void channel_close (TpSvcChannel *iface, DBusGMethodInvocation *context) { TpTestsTextChannelNull *self = TP_TESTS_TEXT_CHANNEL_NULL (iface); tp_tests_text_channel_null_close (self); tp_svc_channel_return_from_close (context); } static void channel_get_channel_type (TpSvcChannel *iface, DBusGMethodInvocation *context) { TpTestsTextChannelNull *self = TP_TESTS_TEXT_CHANNEL_NULL (iface); self->get_channel_type_called++; tp_svc_channel_return_from_get_channel_type (context, TP_IFACE_CHANNEL_TYPE_TEXT); } static void channel_get_handle (TpSvcChannel *iface, DBusGMethodInvocation *context) { TpTestsTextChannelNull *self = TP_TESTS_TEXT_CHANNEL_NULL (iface); self->get_handle_called++; tp_svc_channel_return_from_get_handle (context, TP_HANDLE_TYPE_CONTACT, self->priv->handle); } static void channel_get_interfaces (TpSvcChannel *iface, DBusGMethodInvocation *context) { TpTestsTextChannelNull *self = TP_TESTS_TEXT_CHANNEL_NULL (iface); TpTestsTextChannelNullClass *klass = TP_TESTS_TEXT_CHANNEL_NULL_GET_CLASS (self); self->get_interfaces_called++; tp_svc_channel_return_from_get_interfaces (context, klass->interfaces); } static void channel_iface_init (gpointer iface, gpointer data) { TpSvcChannelClass *klass = iface; #define IMPLEMENT(x) tp_svc_channel_implement_##x (klass, channel_##x) IMPLEMENT (close); IMPLEMENT (get_channel_type); IMPLEMENT (get_handle); IMPLEMENT (get_interfaces); #undef IMPLEMENT } static void text_send (TpSvcChannelTypeText *iface, guint type, const gchar *text, DBusGMethodInvocation *context) { /* silently swallow the message */ tp_svc_channel_type_text_return_from_send (context); } static void text_iface_init (gpointer iface, gpointer data) { TpSvcChannelTypeTextClass *klass = iface; tp_text_mixin_iface_init (iface, data); #define IMPLEMENT(x) tp_svc_channel_type_text_implement_##x (klass, text_##x) IMPLEMENT (send); #undef IMPLEMENT } GHashTable * tp_tests_text_channel_get_props (TpTestsTextChannelNull *self) { GHashTable *props; TpHandleType handle_type; TpHandle handle; gchar *target_id; gboolean requested; TpHandle initiator_handle; gchar *initiator_id; GStrv interfaces; g_object_get (self, "handle-type", &handle_type, "handle", &handle, "target-id", &target_id, "requested", &requested, "initiator-handle", &initiator_handle, "initiator-id", &initiator_id, "interfaces", &interfaces, NULL); props = tp_asv_new ( TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING, TP_IFACE_CHANNEL_TYPE_TEXT, TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, handle_type, TP_PROP_CHANNEL_TARGET_HANDLE, G_TYPE_UINT, handle, TP_PROP_CHANNEL_TARGET_ID, G_TYPE_STRING, target_id, TP_PROP_CHANNEL_REQUESTED, G_TYPE_BOOLEAN, requested, TP_PROP_CHANNEL_INITIATOR_HANDLE, G_TYPE_UINT, initiator_handle, TP_PROP_CHANNEL_INITIATOR_ID, G_TYPE_STRING, initiator_id, TP_PROP_CHANNEL_INTERFACES, G_TYPE_STRV, interfaces, NULL); g_free (target_id); g_free (initiator_id); g_strfreev (interfaces); return props; } telepathy-qt-0.9.3/tests/lib/glib/textchan-group.h0000644000175200001440000000414412000056607024365 0ustar00collabora-develusers00000000000000/* * a stub anonymous MUC * * Copyright (C) 2008 Collabora Ltd. * Copyright (C) 2008 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef __TEST_TEXT_CHANNEL_GROUP_H__ #define __TEST_TEXT_CHANNEL_GROUP_H__ #include #include #include #include G_BEGIN_DECLS typedef struct _TpTestsTextChannelGroup TpTestsTextChannelGroup; typedef struct _TpTestsTextChannelGroupClass TpTestsTextChannelGroupClass; typedef struct _TpTestsTextChannelGroupPrivate TpTestsTextChannelGroupPrivate; GType tp_tests_text_channel_group_get_type (void); #define TP_TESTS_TYPE_TEXT_CHANNEL_GROUP \ (tp_tests_text_channel_group_get_type ()) #define TP_TESTS_TEXT_CHANNEL_GROUP(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), TP_TESTS_TYPE_TEXT_CHANNEL_GROUP, \ TpTestsTextChannelGroup)) #define TP_TESTS_TEXT_CHANNEL_GROUP_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), TP_TESTS_TYPE_TEXT_CHANNEL_GROUP, \ TpTestsTextChannelGroupClass)) #define TEST_IS_TEXT_CHANNEL_GROUP(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TP_TESTS_TYPE_TEXT_CHANNEL_GROUP)) #define TEST_IS_TEXT_CHANNEL_GROUP_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), TP_TESTS_TYPE_TEXT_CHANNEL_GROUP)) #define TP_TESTS_TEXT_CHANNEL_GROUP_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_TEXT_CHANNEL_GROUP, \ TpTestsTextChannelGroupClass)) struct _TpTestsTextChannelGroupClass { GObjectClass parent_class; TpTextMixinClass text_class; TpGroupMixinClass group_class; TpDBusPropertiesMixinClass dbus_properties_class; }; struct _TpTestsTextChannelGroup { GObject parent; TpBaseConnection *conn; TpTextMixin text; TpGroupMixin group; TpTestsTextChannelGroupPrivate *priv; }; G_END_DECLS #endif /* #ifndef __TEST_TEXT_CHANNEL_GROUP_H__ */ telepathy-qt-0.9.3/tests/lib/glib/simple-conn.h0000644000175200001440000000502712000056607023642 0ustar00collabora-develusers00000000000000/* * simple-conn.h - header for a simple connection * * Copyright (C) 2007-2008 Collabora Ltd. * Copyright (C) 2007-2008 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef __TP_TESTS_SIMPLE_CONN_H__ #define __TP_TESTS_SIMPLE_CONN_H__ #include #include G_BEGIN_DECLS typedef struct _TpTestsSimpleConnection TpTestsSimpleConnection; typedef struct _TpTestsSimpleConnectionClass TpTestsSimpleConnectionClass; typedef struct _TpTestsSimpleConnectionPrivate TpTestsSimpleConnectionPrivate; struct _TpTestsSimpleConnectionClass { TpBaseConnectionClass parent_class; }; struct _TpTestsSimpleConnection { TpBaseConnection parent; TpTestsSimpleConnectionPrivate *priv; }; GType tp_tests_simple_connection_get_type (void); /* TYPE MACROS */ #define TP_TESTS_TYPE_SIMPLE_CONNECTION \ (tp_tests_simple_connection_get_type ()) #define TP_TESTS_SIMPLE_CONNECTION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), TP_TESTS_TYPE_SIMPLE_CONNECTION, \ TpTestsSimpleConnection)) #define TP_TESTS_SIMPLE_CONNECTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), TP_TESTS_TYPE_SIMPLE_CONNECTION, \ TpTestsSimpleConnectionClass)) #define TP_TESTS_SIMPLE_IS_CONNECTION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), TP_TESTS_TYPE_SIMPLE_CONNECTION)) #define TP_TESTS_SIMPLE_IS_CONNECTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), TP_TESTS_TYPE_SIMPLE_CONNECTION)) #define TP_TESTS_SIMPLE_CONNECTION_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_SIMPLE_CONNECTION, \ TpTestsSimpleConnectionClass)) TpTestsSimpleConnection * tp_tests_simple_connection_new (const gchar *account, const gchar *protocol); /* Cause "network events", for debugging/testing */ void tp_tests_simple_connection_inject_disconnect ( TpTestsSimpleConnection *self); void tp_tests_simple_connection_set_identifier (TpTestsSimpleConnection *self, const gchar *identifier); gchar * tp_tests_simple_connection_ensure_text_chan ( TpTestsSimpleConnection *self, const gchar *target_id, GHashTable **props); void tp_tests_simple_connection_set_get_self_handle_error ( TpTestsSimpleConnection *self, GQuark domain, gint code, const gchar *message); G_END_DECLS #endif /* #ifndef __TP_TESTS_SIMPLE_CONN_H__ */ telepathy-qt-0.9.3/tests/lib/glib/contact-search-chan.h0000644000175200001440000000544312000056607025225 0ustar00collabora-develusers00000000000000/* * contact-search-channel.h - header for an tp_tests contact search channel * * Copyright © 2010 Collabora Ltd. * Copyright © 2010 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 TP_TESTS_CONTACT_SEARCH_CHANNEL_H #define TP_TESTS_CONTACT_SEARCH_CHANNEL_H #include #include #include G_BEGIN_DECLS typedef struct _TpTestsContactSearchChannel TpTestsContactSearchChannel; typedef struct _TpTestsContactSearchChannelPrivate TpTestsContactSearchChannelPrivate; typedef struct _TpTestsContactSearchChannelClass TpTestsContactSearchChannelClass; typedef struct _TpTestsContactSearchChannelClassPrivate TpTestsContactSearchChannelClassPrivate; GType tp_tests_contact_search_channel_get_type (void); #define TP_TESTS_TYPE_CONTACT_SEARCH_CHANNEL \ (tp_tests_contact_search_channel_get_type ()) #define TP_TESTS_CONTACT_SEARCH_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), TP_TESTS_TYPE_CONTACT_SEARCH_CHANNEL, \ TpTestsContactSearchChannel)) #define TP_TESTS_CONTACT_SEARCH_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), TP_TESTS_TYPE_CONTACT_SEARCH_CHANNEL, \ TpTestsContactSearchChannelClass)) #define TP_TESTS_IS_CONTACT_SEARCH_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TP_TESTS_TYPE_CONTACT_SEARCH_CHANNEL)) #define TP_TESTS_IS_CONTACT_SEARCH_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), TP_TESTS_TYPE_CONTACT_SEARCH_CHANNEL)) #define TP_TESTS_CONTACT_SEARCH_CHANNEL_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_CONTACT_SEARCH_CHANNEL, \ TpTestsContactSearchChannelClass)) struct _TpTestsContactSearchChannelClass { GObjectClass parent_class; TpDBusPropertiesMixinClass dbus_properties_class; TpGroupMixinClass group_class; TpTestsContactSearchChannelClassPrivate *priv; }; struct _TpTestsContactSearchChannel { GObject parent; TpGroupMixin group; TpTestsContactSearchChannelPrivate *priv; }; G_END_DECLS #endif telepathy-qt-0.9.3/tests/lib/glib/textchan-null.h0000644000175200001440000001174212000056607024205 0ustar00collabora-develusers00000000000000/* * /dev/null as a text channel * * Copyright (C) 2008 Collabora Ltd. * Copyright (C) 2008 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef __TP_TESTS_TEXT_CHANNEL_NULL_H__ #define __TP_TESTS_TEXT_CHANNEL_NULL_H__ #include #include #include #include G_BEGIN_DECLS typedef struct _TpTestsTextChannelNull TpTestsTextChannelNull; typedef struct _TpTestsTextChannelNullClass TpTestsTextChannelNullClass; typedef struct _TpTestsTextChannelNullPrivate TpTestsTextChannelNullPrivate; GType tp_tests_text_channel_null_get_type (void); #define TP_TESTS_TYPE_TEXT_CHANNEL_NULL \ (tp_tests_text_channel_null_get_type ()) #define TP_TESTS_TEXT_CHANNEL_NULL(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), TP_TESTS_TYPE_TEXT_CHANNEL_NULL, \ TpTestsTextChannelNull)) #define TP_TESTS_TEXT_CHANNEL_NULL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), TP_TESTS_TYPE_TEXT_CHANNEL_NULL, \ TpTestsTextChannelNullClass)) #define TP_TESTS_IS_TEXT_CHANNEL_NULL(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TP_TESTS_TYPE_TEXT_CHANNEL_NULL)) #define TP_TESTS_IS_TEXT_CHANNEL_NULL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), TP_TESTS_TYPE_TEXT_CHANNEL_NULL)) #define TP_TESTS_TEXT_CHANNEL_NULL_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_TEXT_CHANNEL_NULL, \ TpTestsTextChannelNullClass)) struct _TpTestsTextChannelNullClass { GObjectClass parent_class; const gchar **interfaces; TpTextMixinClass text_class; }; struct _TpTestsTextChannelNull { GObject parent; TpTextMixin text; guint get_handle_called; guint get_interfaces_called; guint get_channel_type_called; TpTestsTextChannelNullPrivate *priv; }; /* Subclass with D-Bus properties */ typedef struct _TestPropsTextChannel TpTestsPropsTextChannel; typedef struct _TestPropsTextChannelClass TpTestsPropsTextChannelClass; struct _TestPropsTextChannel { TpTestsTextChannelNull parent; GHashTable *dbus_property_interfaces_retrieved; }; struct _TestPropsTextChannelClass { TpTestsTextChannelNullClass parent; TpDBusPropertiesMixinClass dbus_properties_class; }; GType tp_tests_props_text_channel_get_type (void); #define TP_TESTS_TYPE_PROPS_TEXT_CHANNEL \ (tp_tests_props_text_channel_get_type ()) #define TP_TESTS_PROPS_TEXT_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), TP_TESTS_TYPE_PROPS_TEXT_CHANNEL, \ TpTestsPropsTextChannel)) #define TP_TESTS_PROPS_TEXT_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), TP_TESTS_TYPE_PROPS_TEXT_CHANNEL, \ TpTestsPropsTextChannelClass)) #define TP_TESTS_IS_PROPS_TEXT_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TP_TESTS_TYPE_PROPS_TEXT_CHANNEL)) #define TP_TESTS_IS_PROPS_TEXT_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), TP_TESTS_TYPE_PROPS_TEXT_CHANNEL)) #define TP_TESTS_PROPS_TEXT_CHANNEL_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_PROPS_TEXT_CHANNEL, \ TpTestsPropsTextChannelClass)) /* Subclass with D-Bus properties and Group */ typedef struct _TestPropsGroupTextChannel TpTestsPropsGroupTextChannel; typedef struct _TestPropsGroupTextChannelClass TpTestsPropsGroupTextChannelClass; struct _TestPropsGroupTextChannel { TpTestsPropsTextChannel parent; TpGroupMixin group; }; struct _TestPropsGroupTextChannelClass { TpTestsPropsTextChannelClass parent; TpGroupMixinClass group_class; }; GType tp_tests_props_group_text_channel_get_type (void); #define TP_TESTS_TYPE_PROPS_GROUP_TEXT_CHANNEL \ (tp_tests_props_group_text_channel_get_type ()) #define TP_TESTS_PROPS_GROUP_TEXT_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), TP_TESTS_TYPE_PROPS_GROUP_TEXT_CHANNEL, \ TpTestsPropsGroupTextChannel)) #define TP_TESTS_PROPS_GROUP_TEXT_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), TP_TESTS_TYPE_PROPS_GROUP_TEXT_CHANNEL, \ TpTestsPropsGroupTextChannelClass)) #define TP_TESTS_IS_PROPS_GROUP_TEXT_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TP_TESTS_TYPE_PROPS_GROUP_TEXT_CHANNEL)) #define TP_TESTS_IS_PROPS_GROUP_TEXT_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), TP_TESTS_TYPE_PROPS_GROUP_TEXT_CHANNEL)) #define TP_TESTS_PROPS_GROUP_TEXT_CHANNEL_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_PROPS_GROUP_TEXT_CHANNEL, \ TpTestsPropsGroupTextChannelClass)) void tp_tests_text_channel_null_close (TpTestsTextChannelNull *self); GHashTable * tp_tests_text_channel_get_props (TpTestsTextChannelNull *self); G_END_DECLS #endif /* #ifndef __TP_TESTS_TEXT_CHANNEL_NULL_H__ */ telepathy-qt-0.9.3/tests/lib/glib/captcha-chan.h0000644000175200001440000000435212000056607023730 0ustar00collabora-develusers00000000000000/* * captcha-chan.h - Simple captcha authentication channel * * Copyright (C) 2012 Collabora Ltd. * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef __TP_CAPTCHA_CHAN_H__ #define __TP_CAPTCHA_CHAN_H__ #include #include #include #include G_BEGIN_DECLS /* Base Class */ typedef struct _TpTestsCaptchaChannel TpTestsCaptchaChannel; typedef struct _TpTestsCaptchaChannelClass TpTestsCaptchaChannelClass; typedef struct _TpTestsCaptchaChannelPrivate TpTestsCaptchaChannelPrivate; GType tp_tests_captcha_channel_get_type (void); #define TP_TESTS_TYPE_CAPTCHA_CHANNEL \ (tp_tests_captcha_channel_get_type ()) #define TP_TESTS_CAPTCHA_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), TP_TESTS_TYPE_CAPTCHA_CHANNEL, \ TpTestsCaptchaChannel)) #define TP_TESTS_CAPTCHA_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), TP_TESTS_TYPE_CAPTCHA_CHANNEL, \ TpTestsCaptchaChannelClass)) #define TP_TESTS_IS_CAPTCHA_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TP_TESTS_TYPE_CAPTCHA_CHANNEL)) #define TP_TESTS_IS_CAPTCHA_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), TP_TESTS_TYPE_CAPTCHA_CHANNEL)) #define TP_TESTS_CAPTCHA_CHANNEL_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_CAPTCHA_CHANNEL, \ TpTestsCaptchaChannelClass)) #define EXAMPLE_IS_ECHO_2_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TP_TESTS_TYPE_CAPTCHA_CHANNEL)) #define EXAMPLE_IS_ECHO_2_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), TP_TESTS_TYPE_CAPTCHA_CHANNEL)) #define QUAD_CAPTCHA_CHANNEL_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_CAPTCHA_CHANNEL, \ TpTestsCaptchaChannelClass)) struct _TpTestsCaptchaChannelClass { TpBaseChannelClass parent_class; }; struct _TpTestsCaptchaChannel { TpBaseChannel parent; TpTestsCaptchaChannelPrivate *priv; }; G_END_DECLS #endif /* #ifndef __TP_CAPTCHA_CHAN_H__ */ telepathy-qt-0.9.3/tests/lib/glib/simple-channel-dispatch-operation.c0000644000175200001440000002144212000056607030102 0ustar00collabora-develusers00000000000000/* * simple-channel-dispatch-operation.c - a simple channel dispatch operation * service. * * Copyright © 2010 Collabora Ltd. * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #include "simple-channel-dispatch-operation.h" #include #include #include #include #include #include #include #include #include static void channel_dispatch_operation_iface_init (gpointer, gpointer); G_DEFINE_TYPE_WITH_CODE (TpTestsSimpleChannelDispatchOperation, tp_tests_simple_channel_dispatch_operation, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_DISPATCH_OPERATION, channel_dispatch_operation_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_DBUS_PROPERTIES, tp_dbus_properties_mixin_iface_init) ) /* TP_IFACE_CHANNEL_DISPATCH_OPERATION is implied */ static const char *CHANNEL_DISPATCH_OPERATION_INTERFACES[] = { NULL }; static const gchar *CHANNEL_DISPATCH_OPERATION_POSSIBLE_HANDLERS[] = { TP_CLIENT_BUS_NAME_BASE ".Badger", NULL, }; enum { PROP_0, PROP_INTERFACES, PROP_CONNECTION, PROP_ACCOUNT, PROP_CHANNELS, PROP_POSSIBLE_HANDLERS, }; struct _SimpleChannelDispatchOperationPrivate { gchar *conn_path; gchar *account_path; /* Array of TpChannel */ GPtrArray *channels; }; static void tp_tests_simple_channel_dispatch_operation_handle_with ( TpSvcChannelDispatchOperation *iface, const gchar *handler, DBusGMethodInvocation *context) { if (!tp_strdiff (handler, "FAIL")) { GError error = { TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "Nope" }; dbus_g_method_return_error (context, &error); return; } dbus_g_method_return (context); } static void tp_tests_simple_channel_dispatch_operation_claim ( TpSvcChannelDispatchOperation *iface, DBusGMethodInvocation *context) { dbus_g_method_return (context); } static void tp_tests_simple_channel_dispatch_operation_handle_with_time ( TpSvcChannelDispatchOperation *iface, const gchar *handler, gint64 user_action_timestamp, DBusGMethodInvocation *context) { dbus_g_method_return (context); } static void channel_dispatch_operation_iface_init (gpointer klass, gpointer unused G_GNUC_UNUSED) { #define IMPLEMENT(x) tp_svc_channel_dispatch_operation_implement_##x (\ klass, tp_tests_simple_channel_dispatch_operation_##x) IMPLEMENT(handle_with); IMPLEMENT(claim); IMPLEMENT(handle_with_time); #undef IMPLEMENT } static void tp_tests_simple_channel_dispatch_operation_init (TpTestsSimpleChannelDispatchOperation *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, TP_TESTS_TYPE_SIMPLE_CHANNEL_DISPATCH_OPERATION, TpTestsSimpleChannelDispatchOperationPrivate); self->priv->channels = g_ptr_array_new_with_free_func ( (GDestroyNotify) g_object_unref); } static void tp_tests_simple_channel_dispatch_operation_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *spec) { TpTestsSimpleChannelDispatchOperation *self = TP_TESTS_SIMPLE_CHANNEL_DISPATCH_OPERATION (object); switch (property_id) { case PROP_INTERFACES: g_value_set_boxed (value, CHANNEL_DISPATCH_OPERATION_INTERFACES); break; case PROP_ACCOUNT: g_value_set_boxed (value, self->priv->account_path); break; case PROP_CONNECTION: g_value_set_boxed (value, self->priv->conn_path); break; case PROP_CHANNELS: { GPtrArray *arr = g_ptr_array_new (); guint i; for (i = 0; i < self->priv->channels->len; i++) { TpChannel *channel = g_ptr_array_index (self->priv->channels, i); g_ptr_array_add (arr, tp_value_array_build (2, DBUS_TYPE_G_OBJECT_PATH, tp_proxy_get_object_path (channel), TP_HASH_TYPE_STRING_VARIANT_MAP, tp_channel_borrow_immutable_properties (channel), G_TYPE_INVALID)); } g_value_take_boxed (value, arr); } break; case PROP_POSSIBLE_HANDLERS: g_value_set_boxed (value, CHANNEL_DISPATCH_OPERATION_POSSIBLE_HANDLERS); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, spec); break; } } static void tp_tests_simple_channel_dispatch_operation_finalize (GObject *object) { TpTestsSimpleChannelDispatchOperation *self = TP_TESTS_SIMPLE_CHANNEL_DISPATCH_OPERATION (object); void (*finalize) (GObject *) = G_OBJECT_CLASS (tp_tests_simple_channel_dispatch_operation_parent_class)->finalize; g_free (self->priv->conn_path); g_free (self->priv->account_path); g_ptr_array_free (self->priv->channels, TRUE); if (finalize != NULL) finalize (object); } /** * This class currently only provides the minimum for * tp_channel_dispatch_operation_prepare to succeed. This turns out to be only a working * Properties.GetAll(). */ static void tp_tests_simple_channel_dispatch_operation_class_init (TpTestsSimpleChannelDispatchOperationClass *klass) { GObjectClass *object_class = (GObjectClass *) klass; GParamSpec *param_spec; static TpDBusPropertiesMixinPropImpl a_props[] = { { "Interfaces", "interfaces", NULL }, { "Connection", "connection", NULL }, { "Account", "account", NULL }, { "Channels", "channels", NULL }, { "PossibleHandlers", "possible-handlers", NULL }, { NULL } }; static TpDBusPropertiesMixinIfaceImpl prop_interfaces[] = { { TP_IFACE_CHANNEL_DISPATCH_OPERATION, tp_dbus_properties_mixin_getter_gobject_properties, NULL, a_props }, { NULL }, }; g_type_class_add_private (klass, sizeof (TpTestsSimpleChannelDispatchOperationPrivate)); object_class->get_property = tp_tests_simple_channel_dispatch_operation_get_property; object_class->finalize = tp_tests_simple_channel_dispatch_operation_finalize; param_spec = g_param_spec_boxed ("interfaces", "Extra D-Bus interfaces", "In this case we only implement ChannelDispatchOperation, so none.", G_TYPE_STRV, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_INTERFACES, param_spec); param_spec = g_param_spec_boxed ("connection", "connection path", "Connection path", DBUS_TYPE_G_OBJECT_PATH, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_CONNECTION, param_spec); param_spec = g_param_spec_boxed ("account", "account path", "Account path", DBUS_TYPE_G_OBJECT_PATH, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_ACCOUNT, param_spec); param_spec = g_param_spec_boxed ("channels", "channel paths", "Channel paths", TP_ARRAY_TYPE_CHANNEL_DETAILS_LIST, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_CHANNELS, param_spec); param_spec = g_param_spec_boxed ("possible-handlers", "possible handlers", "possible handles", G_TYPE_STRV, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_POSSIBLE_HANDLERS, param_spec); klass->dbus_props_class.interfaces = prop_interfaces; tp_dbus_properties_mixin_class_init (object_class, G_STRUCT_OFFSET (TpTestsSimpleChannelDispatchOperationClass, dbus_props_class)); } void tp_tests_simple_channel_dispatch_operation_set_conn_path ( TpTestsSimpleChannelDispatchOperation *self, const gchar *conn_path) { self->priv->conn_path = g_strdup (conn_path); } void tp_tests_simple_channel_dispatch_operation_add_channel ( TpTestsSimpleChannelDispatchOperation *self, TpChannel *chan) { g_ptr_array_add (self->priv->channels, g_object_ref (chan)); } void tp_tests_simple_channel_dispatch_operation_lost_channel ( TpTestsSimpleChannelDispatchOperation *self, TpChannel *chan) { const gchar *path = tp_proxy_get_object_path (chan); g_ptr_array_remove (self->priv->channels, chan); tp_svc_channel_dispatch_operation_emit_channel_lost (self, path, TP_ERROR_STR_NOT_AVAILABLE, "Badger"); if (self->priv->channels->len == 0) { /* We removed the last channel; fire Finished */ tp_svc_channel_dispatch_operation_emit_finished (self); } } void tp_tests_simple_channel_dispatch_operation_set_account_path ( TpTestsSimpleChannelDispatchOperation *self, const gchar *account_path) { self->priv->account_path = g_strdup (account_path); } telepathy-qt-0.9.3/tests/lib/glib/params-cm.h0000644000175200001440000000652712000056607023304 0ustar00collabora-develusers00000000000000/* * params-cm.h - header for TpTestsParamConnectionManager * * Copyright © 2007-2009 Collabora Ltd. * Copyright © 2007-2009 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 __TP_TESTS_PARAM_CONNECTION_MANAGER_H__ #define __TP_TESTS_PARAM_CONNECTION_MANAGER_H__ #include #include G_BEGIN_DECLS typedef struct _TpTestsParamConnectionManager TpTestsParamConnectionManager; typedef struct _TpTestsParamConnectionManagerPrivate TpTestsParamConnectionManagerPrivate; typedef struct _TpTestsParamConnectionManagerClass TpTestsParamConnectionManagerClass; typedef struct _TpTestsParamConnectionManagerClassPrivate TpTestsParamConnectionManagerClassPrivate; struct _TpTestsParamConnectionManagerClass { TpBaseConnectionManagerClass parent_class; TpTestsParamConnectionManagerClassPrivate *priv; }; struct _TpTestsParamConnectionManager { TpBaseConnectionManager parent; TpTestsParamConnectionManagerPrivate *priv; }; GType tp_tests_param_connection_manager_get_type (void); /* TYPE MACROS */ #define TP_TESTS_TYPE_PARAM_CONNECTION_MANAGER \ (tp_tests_param_connection_manager_get_type ()) #define TP_TESTS_PARAM_CONNECTION_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), TP_TESTS_TYPE_PARAM_CONNECTION_MANAGER, \ TpTestsParamConnectionManager)) #define TP_TESTS_PARAM_CONNECTION_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), TP_TESTS_TYPE_PARAM_CONNECTION_MANAGER, \ TpTestsParamConnectionManagerClass)) #define IS_PARAM_CONNECTION_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), TP_TESTS_TYPE_PARAM_CONNECTION_MANAGER)) #define IS_PARAM_CONNECTION_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), TP_TESTS_TYPE_PARAM_CONNECTION_MANAGER)) #define TP_TESTS_PARAM_CONNECTION_MANAGER_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_PARAM_CONNECTION_MANAGER, \ TpTestsParamConnectionManagerClass)) typedef struct { gchar *a_string; gint a_int16; gint a_int32; guint a_uint16; guint a_uint32; gint64 a_int64; guint64 a_uint64; gboolean a_boolean; gdouble a_double; GStrv a_array_of_strings; GArray *a_array_of_bytes; gchar *a_object_path; gchar *lc_string; gchar *uc_string; gboolean would_have_been_freed; } TpTestsCMParams; TpTestsCMParams * tp_tests_param_connection_manager_steal_params_last_conn ( void); void tp_tests_param_connection_manager_free_params (TpTestsCMParams *params); G_END_DECLS #endif /* #ifndef __TP_TESTS_PARAM_CONNECTION_MANAGER_H__ */ telepathy-qt-0.9.3/tests/lib/glib/util.h0000644000175200001440000000474612000056607022402 0ustar00collabora-develusers00000000000000/* Simple utility code used by the regression tests. * * Copyright © 2008-2010 Collabora Ltd. * Copyright © 2008 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef __TP_TESTS_LIB_UTIL_H__ #define __TP_TESTS_LIB_UTIL_H__ #include #include TpDBusDaemon *tp_tests_dbus_daemon_dup_or_die (void); void tp_tests_proxy_run_until_dbus_queue_processed (gpointer proxy); void tp_tests_proxy_run_until_prepared (gpointer proxy, const GQuark *features); gboolean tp_tests_proxy_run_until_prepared_or_failed (gpointer proxy, const GQuark *features, GError **error); #define test_assert_empty_strv(strv) \ _test_assert_empty_strv (__FILE__, __LINE__, strv) void _test_assert_empty_strv (const char *file, int line, gconstpointer strv); #define tp_tests_assert_strv_equals(actual, expected) \ _tp_tests_assert_strv_equals (__FILE__, __LINE__, \ #actual, actual, \ #expected, expected) void _tp_tests_assert_strv_equals (const char *file, int line, const char *actual_desc, gconstpointer actual_strv, const char *expected_desc, gconstpointer expected_strv); void tp_tests_create_conn (GType conn_type, const gchar *account, gboolean connect, TpBaseConnection **service_conn, TpConnection **client_conn); void tp_tests_create_and_connect_conn (GType conn_type, const gchar *account, TpBaseConnection **service_conn, TpConnection **client_conn); gpointer tp_tests_object_new_static_class (GType type, ...) G_GNUC_NULL_TERMINATED; void tp_tests_run_until_result (GAsyncResult **result); void tp_tests_result_ready_cb (GObject *object, GAsyncResult *res, gpointer user_data); void tp_tests_abort_after (guint sec); void tp_tests_init (int *argc, char ***argv); GValue *_tp_create_local_socket (TpSocketAddressType address_type, TpSocketAccessControl access_control, GSocketService **service, gchar **unix_address, GError **error); void _tp_destroy_socket_control_list (gpointer data); void tp_tests_connection_assert_disconnect_succeeds (TpConnection *connection); TpContact *tp_tests_connection_run_until_contact_by_id ( TpConnection *connection, const gchar *id, guint n_features, const TpContactFeature *features); #endif /* #ifndef __TP_TESTS_LIB_UTIL_H__ */ telepathy-qt-0.9.3/tests/lib/glib/debug.h0000644000175200001440000000013612000056607022500 0ustar00collabora-develusers00000000000000#undef DEBUG #define DEBUG(format, ...) \ g_debug ("%s: " format, G_STRFUNC, ##__VA_ARGS__) telepathy-qt-0.9.3/tests/lib/glib/util.c0000644000175200001440000002645112000056607022372 0ustar00collabora-develusers00000000000000/* Simple utility code used by the regression tests. * * Copyright © 2008-2010 Collabora Ltd. * Copyright © 2008 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #include "config.h" #include "util.h" #include #include #include #ifdef G_OS_UNIX # include /* for alarm() */ #endif #ifdef HAVE_GIO_UNIX #include #include #endif void tp_tests_proxy_run_until_prepared (gpointer proxy, const GQuark *features) { GError *error = NULL; tp_tests_proxy_run_until_prepared_or_failed (proxy, features, &error); g_assert_no_error (error); } /* A GAsyncReadyCallback whose user_data is a GAsyncResult **. It writes a * reference to the result into that pointer. */ void tp_tests_result_ready_cb (GObject *object, GAsyncResult *res, gpointer user_data) { GAsyncResult **result = user_data; *result = g_object_ref (res); } /* Run until *result contains a result. Intended to be used with a pending * async call that uses tp_tests_result_ready_cb. */ void tp_tests_run_until_result (GAsyncResult **result) { /* not synchronous */ g_assert (*result == NULL); while (*result == NULL) g_main_context_iteration (NULL, TRUE); } gboolean tp_tests_proxy_run_until_prepared_or_failed (gpointer proxy, const GQuark *features, GError **error) { GAsyncResult *result = NULL; gboolean r; tp_proxy_prepare_async (proxy, features, tp_tests_result_ready_cb, &result); tp_tests_run_until_result (&result); r = tp_proxy_prepare_finish (proxy, result, error); g_object_unref (result); return r; } TpDBusDaemon * tp_tests_dbus_daemon_dup_or_die (void) { TpDBusDaemon *d = tp_dbus_daemon_dup (NULL); /* In a shared library, this would be very bad (see fd.o #18832), but in a * regression test that's going to be run under a temporary session bus, * it's just what we want. */ if (d == NULL) { g_error ("Unable to connect to session bus"); } return d; } static void introspect_cb (TpProxy *proxy G_GNUC_UNUSED, const gchar *xml G_GNUC_UNUSED, const GError *error G_GNUC_UNUSED, gpointer user_data, GObject *weak_object G_GNUC_UNUSED) { g_main_loop_quit (user_data); } void tp_tests_proxy_run_until_dbus_queue_processed (gpointer proxy) { GMainLoop *loop = g_main_loop_new (NULL, FALSE); tp_cli_dbus_introspectable_call_introspect (proxy, -1, introspect_cb, loop, NULL, NULL); g_main_loop_run (loop); g_main_loop_unref (loop); } void _test_assert_empty_strv (const char *file, int line, gconstpointer strv) { const gchar * const *strings = strv; if (strv != NULL && strings[0] != NULL) { guint i; g_message ("%s:%d: expected empty strv, but got:", file, line); for (i = 0; strings[i] != NULL; i++) { g_message ("* \"%s\"", strings[i]); } g_error ("%s:%d: strv wasn't empty (see above for contents", file, line); } } void _tp_tests_assert_strv_equals (const char *file, int line, const char *expected_desc, gconstpointer expected_strv, const char *actual_desc, gconstpointer actual_strv) { const gchar * const *expected = expected_strv; const gchar * const *actual = actual_strv; guint i; g_assert (expected != NULL); g_assert (actual != NULL); for (i = 0; expected[i] != NULL || actual[i] != NULL; i++) { if (expected[i] == NULL) { g_error ("%s:%d: assertion failed: (%s)[%u] == (%s)[%u]: " "NULL == %s", file, line, expected_desc, i, actual_desc, i, actual[i]); } else if (actual[i] == NULL) { g_error ("%s:%d: assertion failed: (%s)[%u] == (%s)[%u]: " "%s == NULL", file, line, expected_desc, i, actual_desc, i, expected[i]); } else if (tp_strdiff (expected[i], actual[i])) { g_error ("%s:%d: assertion failed: (%s)[%u] == (%s)[%u]: " "%s == %s", file, line, expected_desc, i, actual_desc, i, expected[i], actual[i]); } } } void tp_tests_create_conn (GType conn_type, const gchar *account, gboolean connect, TpBaseConnection **service_conn, TpConnection **client_conn) { TpDBusDaemon *dbus; TpSimpleClientFactory *factory; gchar *name; gchar *conn_path; GError *error = NULL; g_assert (service_conn != NULL); g_assert (client_conn != NULL); dbus = tp_tests_dbus_daemon_dup_or_die (); factory = (TpSimpleClientFactory *) tp_automatic_client_factory_new (dbus); *service_conn = tp_tests_object_new_static_class ( conn_type, "account", account, "protocol", "simple", NULL); g_assert (*service_conn != NULL); g_assert (tp_base_connection_register (*service_conn, "simple", &name, &conn_path, &error)); g_assert_no_error (error); *client_conn = tp_simple_client_factory_ensure_connection (factory, conn_path, NULL, &error); g_assert (*client_conn != NULL); g_assert_no_error (error); if (connect) { GQuark conn_features[] = { TP_CONNECTION_FEATURE_CONNECTED, 0 }; tp_cli_connection_call_connect (*client_conn, -1, NULL, NULL, NULL, NULL); tp_tests_proxy_run_until_prepared (*client_conn, conn_features); } g_free (name); g_free (conn_path); g_object_unref (dbus); g_object_unref (factory); } void tp_tests_create_and_connect_conn (GType conn_type, const gchar *account, TpBaseConnection **service_conn, TpConnection **client_conn) { tp_tests_create_conn (conn_type, account, TRUE, service_conn, client_conn); } /* This object exists solely so that tests/tests.supp can ignore "leaked" * classes. */ gpointer tp_tests_object_new_static_class (GType type, ...) { va_list ap; GObject *object; const gchar *first_property; va_start (ap, type); first_property = va_arg (ap, const gchar *); object = g_object_new_valist (type, first_property, ap); va_end (ap); return object; } static gboolean time_out (gpointer nil G_GNUC_UNUSED) { g_error ("Timed out"); g_assert_not_reached (); return FALSE; } void tp_tests_abort_after (guint sec) { gboolean debugger = FALSE; gchar *contents; if (g_file_get_contents ("/proc/self/status", &contents, NULL, NULL)) { /* http://www.youtube.com/watch?v=SXmv8quf_xM */ #define TRACER_T "\nTracerPid:\t" gchar *line = strstr (contents, TRACER_T); if (line != NULL) { gchar *value = line + strlen (TRACER_T); if (value[0] != '0' || value[1] != '\n') debugger = TRUE; } g_free (contents); } if (g_getenv ("TP_TESTS_NO_TIMEOUT") != NULL || debugger) return; g_timeout_add_seconds (sec, time_out, NULL); #ifdef G_OS_UNIX /* On Unix, we can kill the process more reliably; this is a safety-catch * in case it deadlocks or something, in which case the main loop won't be * processed. The default handler for SIGALRM is process termination. */ alarm (sec + 2); #endif } void tp_tests_init (int *argc, char ***argv) { g_type_init (); tp_tests_abort_after (10); tp_debug_set_flags ("all"); g_test_init (argc, argv, NULL); } void _tp_destroy_socket_control_list (gpointer data) { GArray *tab = data; g_array_unref (tab); } GValue * _tp_create_local_socket (TpSocketAddressType address_type, TpSocketAccessControl access_control, GSocketService **service, gchar **unix_address, GError **error) { gboolean success; GSocketAddress *address, *effective_address; GValue *address_gvalue; g_assert (service != NULL); g_assert (unix_address != NULL); switch (access_control) { case TP_SOCKET_ACCESS_CONTROL_LOCALHOST: case TP_SOCKET_ACCESS_CONTROL_CREDENTIALS: case TP_SOCKET_ACCESS_CONTROL_PORT: break; default: g_assert_not_reached (); } switch (address_type) { #ifdef HAVE_GIO_UNIX case TP_SOCKET_ADDRESS_TYPE_UNIX: { address = g_unix_socket_address_new (tmpnam (NULL)); break; } #endif case TP_SOCKET_ADDRESS_TYPE_IPV4: case TP_SOCKET_ADDRESS_TYPE_IPV6: { GInetAddress *localhost; localhost = g_inet_address_new_loopback ( address_type == TP_SOCKET_ADDRESS_TYPE_IPV4 ? G_SOCKET_FAMILY_IPV4 : G_SOCKET_FAMILY_IPV6); address = g_inet_socket_address_new (localhost, 0); g_object_unref (localhost); break; } default: g_assert_not_reached (); } *service = g_socket_service_new (); success = g_socket_listener_add_address ( G_SOCKET_LISTENER (*service), address, G_SOCKET_TYPE_STREAM, G_SOCKET_PROTOCOL_DEFAULT, NULL, &effective_address, NULL); g_assert (success); switch (address_type) { #ifdef HAVE_GIO_UNIX case TP_SOCKET_ADDRESS_TYPE_UNIX: *unix_address = g_strdup (g_unix_socket_address_get_path ( G_UNIX_SOCKET_ADDRESS (effective_address))); address_gvalue = tp_g_value_slice_new_bytes ( g_unix_socket_address_get_path_len ( G_UNIX_SOCKET_ADDRESS (effective_address)), g_unix_socket_address_get_path ( G_UNIX_SOCKET_ADDRESS (effective_address))); break; #endif case TP_SOCKET_ADDRESS_TYPE_IPV4: case TP_SOCKET_ADDRESS_TYPE_IPV6: *unix_address = NULL; address_gvalue = tp_g_value_slice_new_take_boxed ( TP_STRUCT_TYPE_SOCKET_ADDRESS_IPV4, dbus_g_type_specialized_construct ( TP_STRUCT_TYPE_SOCKET_ADDRESS_IPV4)); dbus_g_type_struct_set (address_gvalue, 0, address_type == TP_SOCKET_ADDRESS_TYPE_IPV4 ? "127.0.0.1" : "::1", 1, g_inet_socket_address_get_port ( G_INET_SOCKET_ADDRESS (effective_address)), G_MAXUINT); break; default: g_assert_not_reached (); } g_object_unref (address); g_object_unref (effective_address); return address_gvalue; } void tp_tests_connection_assert_disconnect_succeeds (TpConnection *connection) { GAsyncResult *result = NULL; GError *error = NULL; gboolean ok; tp_connection_disconnect_async (connection, tp_tests_result_ready_cb, &result); tp_tests_run_until_result (&result); ok = tp_connection_disconnect_finish (connection, result, &error); g_assert_no_error (error); g_assert (ok); g_object_unref (result); } static void one_contact_cb (GObject *object, GAsyncResult *result, gpointer user_data) { TpConnection *connection = (TpConnection *) object; TpContact **contact_loc = user_data; GError *error = NULL; *contact_loc = tp_connection_dup_contact_by_id_finish (connection, result, &error); g_assert_no_error (error); g_assert (TP_IS_CONTACT (*contact_loc)); } TpContact * tp_tests_connection_run_until_contact_by_id (TpConnection *connection, const gchar *id, guint n_features, const TpContactFeature *features) { TpContact *contact = NULL; tp_connection_dup_contact_by_id_async (connection, id, n_features, features, one_contact_cb, &contact); while (contact == NULL) g_main_context_iteration (NULL, TRUE); return contact; } telepathy-qt-0.9.3/tests/lib/glib/simple-client.c0000644000175200001440000001511512000056607024155 0ustar00collabora-develusers00000000000000/* * simple-client.c - a simple client * * Copyright © 2010 Collabora Ltd. * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #include "simple-client.h" #include #include #include #include #include #include #include #include #include "util.h" G_DEFINE_TYPE (TpTestsSimpleClient, tp_tests_simple_client, TP_TYPE_BASE_CLIENT) static void simple_observe_channels ( TpBaseClient *client, TpAccount *account, TpConnection *connection, GList *channels, TpChannelDispatchOperation *dispatch_operation, GList *requests, TpObserveChannelsContext *context) { TpTestsSimpleClient *self = TP_TESTS_SIMPLE_CLIENT (client); GHashTable *info; gboolean fail; GList *l; /* Fail if caller set the fake "FAIL" info */ g_object_get (context, "observer-info", &info, NULL); fail = tp_asv_get_boolean (info, "FAIL", NULL); g_hash_table_unref (info); if (self->observe_ctx != NULL) { g_object_unref (self->observe_ctx); self->observe_ctx = NULL; } if (fail) { GError error = { TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "No observation for you!" }; tp_observe_channels_context_fail (context, &error); return; } g_assert (TP_IS_ACCOUNT (account)); g_assert (tp_proxy_is_prepared (account, TP_ACCOUNT_FEATURE_CORE)); g_assert (TP_IS_CONNECTION (connection)); g_assert (tp_proxy_is_prepared (connection, TP_CONNECTION_FEATURE_CORE)); g_assert_cmpuint (g_list_length (channels), >, 0); for (l = channels; l != NULL; l = g_list_next (l)) { TpChannel *channel = l->data; g_assert (TP_IS_CHANNEL (channel)); g_assert (tp_proxy_is_prepared (channel, TP_CHANNEL_FEATURE_CORE) || tp_proxy_get_invalidated (channel) != NULL); } if (dispatch_operation != NULL) g_assert (TP_IS_CHANNEL_DISPATCH_OPERATION (dispatch_operation)); for (l = requests; l != NULL; l = g_list_next (l)) { TpChannelRequest *request = l->data; g_assert (TP_IS_CHANNEL_REQUEST (request)); } self->observe_ctx = g_object_ref (context); tp_observe_channels_context_accept (context); } static void simple_add_dispatch_operation ( TpBaseClient *client, TpAccount *account, TpConnection *connection, GList *channels, TpChannelDispatchOperation *dispatch_operation, TpAddDispatchOperationContext *context) { TpTestsSimpleClient *self = TP_TESTS_SIMPLE_CLIENT (client); GList *l; g_assert (TP_IS_ACCOUNT (account)); g_assert (tp_proxy_is_prepared (account, TP_ACCOUNT_FEATURE_CORE)); g_assert (TP_IS_CONNECTION (connection)); g_assert (tp_proxy_is_prepared (connection, TP_CONNECTION_FEATURE_CORE)); g_assert (TP_IS_CHANNEL_DISPATCH_OPERATION (dispatch_operation)); g_assert (tp_proxy_is_prepared (dispatch_operation, TP_CHANNEL_DISPATCH_OPERATION_FEATURE_CORE) || tp_proxy_get_invalidated (dispatch_operation) != NULL); if (self->add_dispatch_ctx != NULL) { g_object_unref (self->add_dispatch_ctx); self->add_dispatch_ctx = NULL; } g_assert_cmpuint (g_list_length (channels), >, 0); for (l = channels; l != NULL; l = g_list_next (l)) { TpChannel *channel = l->data; g_assert (TP_IS_CHANNEL (channel)); g_assert (tp_proxy_is_prepared (channel, TP_CHANNEL_FEATURE_CORE) || tp_proxy_get_invalidated (channel) != NULL); } self->add_dispatch_ctx = g_object_ref (context); tp_add_dispatch_operation_context_accept (context); } static void simple_handle_channels (TpBaseClient *client, TpAccount *account, TpConnection *connection, GList *channels, GList *requests_satisfied, gint64 user_action_time, TpHandleChannelsContext *context) { TpTestsSimpleClient *self = TP_TESTS_SIMPLE_CLIENT (client); GList *l; if (self->handle_channels_ctx != NULL) { g_object_unref (self->handle_channels_ctx); self->handle_channels_ctx = NULL; } g_assert (TP_IS_ACCOUNT (account)); g_assert (tp_proxy_is_prepared (account, TP_ACCOUNT_FEATURE_CORE)); g_assert (TP_IS_CONNECTION (connection)); g_assert (tp_proxy_is_prepared (connection, TP_CONNECTION_FEATURE_CORE)); g_assert_cmpuint (g_list_length (channels), >, 0); for (l = channels; l != NULL; l = g_list_next (l)) { TpChannel *channel = l->data; g_assert (TP_IS_CHANNEL (channel)); g_assert (tp_proxy_is_prepared (channel, TP_CHANNEL_FEATURE_CORE) || tp_proxy_get_invalidated (channel) != NULL); } for (l = requests_satisfied; l != NULL; l = g_list_next (l)) { TpChannelRequest *request = l->data; g_assert (TP_IS_CHANNEL_REQUEST (request)); } self->handle_channels_ctx = g_object_ref (context); tp_handle_channels_context_accept (context); } static void tp_tests_simple_client_init (TpTestsSimpleClient *self) { } static void tp_tests_simple_client_dispose (GObject *object) { TpTestsSimpleClient *self = TP_TESTS_SIMPLE_CLIENT (object); void (*dispose) (GObject *) = G_OBJECT_CLASS (tp_tests_simple_client_parent_class)->dispose; if (self->observe_ctx != NULL) { g_object_unref (self->observe_ctx); self->observe_ctx = NULL; } if (self->add_dispatch_ctx != NULL) { g_object_unref (self->add_dispatch_ctx); self->add_dispatch_ctx = NULL; } if (self->handle_channels_ctx != NULL) { g_object_unref (self->handle_channels_ctx); self->handle_channels_ctx = NULL; } if (dispose != NULL) dispose (object); } static void tp_tests_simple_client_class_init (TpTestsSimpleClientClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); TpBaseClientClass *base_class = TP_BASE_CLIENT_CLASS (klass); object_class->dispose = tp_tests_simple_client_dispose; tp_base_client_implement_observe_channels (base_class, simple_observe_channels); tp_base_client_implement_add_dispatch_operation (base_class, simple_add_dispatch_operation); tp_base_client_implement_handle_channels (base_class, simple_handle_channels); } TpTestsSimpleClient * tp_tests_simple_client_new (TpDBusDaemon *dbus_daemon, const gchar *name, gboolean uniquify_name) { return tp_tests_object_new_static_class (TP_TESTS_TYPE_SIMPLE_CLIENT, "dbus-daemon", dbus_daemon, "name", name, "uniquify-name", uniquify_name, NULL); } telepathy-qt-0.9.3/tests/lib/glib/CMakeLists.txt0000644000175200001440000000402112000056607023776 0ustar00collabora-develusers00000000000000include_directories( ${CMAKE_CURRENT_BINARY_DIR} ${TELEPATHY_GLIB_INCLUDE_DIR} ${GLIB2_INCLUDE_DIR} ${GOBJECT_INCLUDE_DIR} ${GIO_INCLUDE_DIR} ${GIOUNIX_INCLUDE_DIR} ${DBUS_INCLUDE_DIR} ${DBUS_ARCH_INCLUDE_DIR}) if(ENABLE_TP_GLIB_TESTS) add_subdirectory(call) add_subdirectory(callable) add_subdirectory(contactlist) add_subdirectory(contactlist2) add_subdirectory(echo) add_subdirectory(echo2) add_subdirectory(future) set(tp_glib_tests_SRCS bug16307-conn.c bug16307-conn.h captcha-chan.c captcha-chan.h contacts-conn.c contacts-conn.h contacts-noroster-conn.c contacts-noroster-conn.h contact-list-manager.h contact-list-manager.c contact-search-chan.c contact-search-chan.h debug.h params-cm.c params-cm.h simple-account.c simple-account.h simple-account-manager.c simple-account-manager.h simple-channel-dispatch-operation.c simple-channel-dispatch-operation.h simple-client.c simple-client.h simple-conn.c simple-conn.h simple-manager.c simple-manager.h textchan-group.c textchan-group.h textchan-null.c textchan-null.h util.c util.h) if(ENABLE_TP_GLIB_GIO_TESTS) list(APPEND tp_glib_tests_SRCS dbus-tube-chan.c dbus-tube-chan.h stream-tube-chan.c stream-tube-chan.h) endif(ENABLE_TP_GLIB_GIO_TESTS) add_library(tp-glib-tests SHARED ${tp_glib_tests_SRCS}) target_link_libraries(tp-glib-tests ${TELEPATHY_GLIB_LIBRARIES} ${GLIB2_LIBRARIES} ${GOBJECT_LIBRARIES} ${GIO_LIBRARIES} ${DBUS_GLIB_LIBRARIES} ${DBUS_LIBRARIES} example-cm-call example-cm-callable example-cm-contactlist example-cm-echo example-cm-echo2 tp-glib-tests-future-extensions) endif(ENABLE_TP_GLIB_TESTS) telepathy-qt-0.9.3/tests/lib/glib/stream-tube-chan.c0000644000175200001440000005265412000056607024560 0ustar00collabora-develusers00000000000000/* * stream-tube-chan.c - Simple stream tube channel * * Copyright (C) 2010 Collabora Ltd. * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #include "stream-tube-chan.h" #include #include #include #include #include #include #include enum { PROP_SERVICE = 1, PROP_SUPPORTED_SOCKET_TYPES, PROP_PARAMETERS, PROP_STATE, }; enum { SIG_INCOMING_CONNECTION, LAST_SIGNAL }; static guint signals[LAST_SIGNAL] = {0, }; struct _TpTestsStreamTubeChannelPrivate { TpTubeChannelState state; GHashTable *supported_socket_types; /* Accepting side */ GSocketService *service; GValue *access_control_param; /* Offering side */ TpSocketAddressType address_type; GValue *address; gchar *unix_address; guint connection_id; TpSocketAccessControl access_control; GHashTable *parameters; gboolean close_on_accept; }; static void destroy_socket_control_list (gpointer data) { GArray *tab = data; g_array_free (tab, TRUE); } static void create_supported_socket_types (TpTestsStreamTubeChannel *self) { TpSocketAccessControl access_control; GArray *unix_tab; g_assert (self->priv->supported_socket_types == NULL); self->priv->supported_socket_types = g_hash_table_new_full (NULL, NULL, NULL, destroy_socket_control_list); /* Socket_Address_Type_Unix */ unix_tab = g_array_sized_new (FALSE, FALSE, sizeof (TpSocketAccessControl), 1); access_control = TP_SOCKET_ACCESS_CONTROL_LOCALHOST; g_array_append_val (unix_tab, access_control); g_hash_table_insert (self->priv->supported_socket_types, GUINT_TO_POINTER (TP_SOCKET_ADDRESS_TYPE_UNIX), unix_tab); } static void tp_tests_stream_tube_channel_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { TpTestsStreamTubeChannel *self = (TpTestsStreamTubeChannel *) object; switch (property_id) { case PROP_SERVICE: g_value_set_string (value, "test-service"); break; case PROP_SUPPORTED_SOCKET_TYPES: g_value_set_boxed (value, self->priv->supported_socket_types); break; case PROP_PARAMETERS: g_value_set_boxed (value, self->priv->parameters); break; case PROP_STATE: g_value_set_uint (value, self->priv->state); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void tp_tests_stream_tube_channel_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { TpTestsStreamTubeChannel *self = (TpTestsStreamTubeChannel *) object; switch (property_id) { case PROP_SUPPORTED_SOCKET_TYPES: self->priv->supported_socket_types = g_value_dup_boxed (value); break; case PROP_PARAMETERS: if (self->priv->parameters != NULL) g_hash_table_destroy (self->priv->parameters); self->priv->parameters = g_value_dup_boxed (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void stream_tube_iface_init (gpointer iface, gpointer data); G_DEFINE_ABSTRACT_TYPE_WITH_CODE (TpTestsStreamTubeChannel, tp_tests_stream_tube_channel, TP_TYPE_BASE_CHANNEL, G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_TYPE_STREAM_TUBE, stream_tube_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_INTERFACE_TUBE, NULL); ) /* type definition stuff */ static const char * tp_tests_stream_tube_channel_interfaces[] = { TP_IFACE_CHANNEL_INTERFACE_TUBE, NULL }; static void tp_tests_stream_tube_channel_init (TpTestsStreamTubeChannel *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE ((self), TP_TESTS_TYPE_STREAM_TUBE_CHANNEL, TpTestsStreamTubeChannelPrivate); } static GObject * constructor (GType type, guint n_props, GObjectConstructParam *props) { GObject *object = G_OBJECT_CLASS (tp_tests_stream_tube_channel_parent_class)->constructor ( type, n_props, props); TpTestsStreamTubeChannel *self = TP_TESTS_STREAM_TUBE_CHANNEL (object); if (tp_base_channel_is_requested (TP_BASE_CHANNEL (self))) { self->priv->state = TP_TUBE_CHANNEL_STATE_NOT_OFFERED; self->priv->parameters = tp_asv_new (NULL, NULL); } else { self->priv->state = TP_TUBE_CHANNEL_STATE_LOCAL_PENDING; self->priv->parameters = tp_asv_new ("badger", G_TYPE_UINT, 42, NULL); } if (self->priv->supported_socket_types == NULL) create_supported_socket_types (self); tp_base_channel_register (TP_BASE_CHANNEL (self)); return object; } static void dispose (GObject *object) { TpTestsStreamTubeChannel *self = (TpTestsStreamTubeChannel *) object; if (self->priv->service != NULL) { g_socket_service_stop (self->priv->service); tp_clear_object (&self->priv->service); } tp_clear_pointer (&self->priv->address, tp_g_value_slice_free); tp_clear_pointer (&self->priv->supported_socket_types, g_hash_table_unref); tp_clear_pointer (&self->priv->access_control_param, tp_g_value_slice_free); if (self->priv->unix_address != NULL) g_unlink (self->priv->unix_address); tp_clear_pointer (&self->priv->unix_address, g_free); ((GObjectClass *) tp_tests_stream_tube_channel_parent_class)->dispose ( object); } static void channel_close (TpBaseChannel *channel) { tp_base_channel_destroyed (channel); } static void fill_immutable_properties (TpBaseChannel *chan, GHashTable *properties) { TpBaseChannelClass *klass = TP_BASE_CHANNEL_CLASS ( tp_tests_stream_tube_channel_parent_class); klass->fill_immutable_properties (chan, properties); tp_dbus_properties_mixin_fill_properties_hash ( G_OBJECT (chan), properties, TP_IFACE_CHANNEL_TYPE_STREAM_TUBE, "Service", TP_IFACE_CHANNEL_TYPE_STREAM_TUBE, "SupportedSocketTypes", NULL); if (!tp_base_channel_is_requested (chan)) { /* Parameters is immutable only for incoming tubes */ tp_dbus_properties_mixin_fill_properties_hash ( G_OBJECT (chan), properties, TP_IFACE_CHANNEL_INTERFACE_TUBE, "Parameters", NULL); } } static void tp_tests_stream_tube_channel_class_init (TpTestsStreamTubeChannelClass *klass) { GObjectClass *object_class = (GObjectClass *) klass; TpBaseChannelClass *base_class = TP_BASE_CHANNEL_CLASS (klass); GParamSpec *param_spec; static TpDBusPropertiesMixinPropImpl stream_tube_props[] = { { "Service", "service", NULL, }, { "SupportedSocketTypes", "supported-socket-types", NULL }, { NULL } }; static TpDBusPropertiesMixinPropImpl tube_props[] = { { "Parameters", "parameters", NULL, }, { "State", "state", NULL, }, { NULL } }; object_class->constructor = constructor; object_class->get_property = tp_tests_stream_tube_channel_get_property; object_class->set_property = tp_tests_stream_tube_channel_set_property; object_class->dispose = dispose; base_class->channel_type = TP_IFACE_CHANNEL_TYPE_STREAM_TUBE; base_class->interfaces = tp_tests_stream_tube_channel_interfaces; base_class->close = channel_close; base_class->fill_immutable_properties = fill_immutable_properties; /* base_class->target_handle_type is defined in subclasses */ param_spec = g_param_spec_string ("service", "service name", "the service associated with this tube object.", "", G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_SERVICE, param_spec); param_spec = g_param_spec_boxed ( "supported-socket-types", "Supported socket types", "GHashTable containing supported socket types.", TP_HASH_TYPE_SUPPORTED_SOCKET_MAP, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_SUPPORTED_SOCKET_TYPES, param_spec); param_spec = g_param_spec_boxed ( "parameters", "Parameters", "parameters of the tube", TP_HASH_TYPE_STRING_VARIANT_MAP, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_PARAMETERS, param_spec); param_spec = g_param_spec_uint ( "state", "TpTubeState", "state of the tube", 0, NUM_TP_TUBE_CHANNEL_STATES - 1, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_STATE, param_spec); signals[SIG_INCOMING_CONNECTION] = g_signal_new ("incoming-connection", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, G_TYPE_IO_STREAM); tp_dbus_properties_mixin_implement_interface (object_class, TP_IFACE_QUARK_CHANNEL_TYPE_STREAM_TUBE, tp_dbus_properties_mixin_getter_gobject_properties, NULL, stream_tube_props); tp_dbus_properties_mixin_implement_interface (object_class, TP_IFACE_QUARK_CHANNEL_INTERFACE_TUBE, tp_dbus_properties_mixin_getter_gobject_properties, NULL, tube_props); g_type_class_add_private (object_class, sizeof (TpTestsStreamTubeChannelPrivate)); } static void change_state (TpTestsStreamTubeChannel *self, TpTubeChannelState state) { self->priv->state = state; tp_svc_channel_interface_tube_emit_tube_channel_state_changed (self, state); } /* Return the address of the socket which has been shared over the tube */ GSocketAddress * tp_tests_stream_tube_channel_get_server_address (TpTestsStreamTubeChannel *self) { return tp_g_socket_address_from_variant (self->priv->address_type, self->priv->address, NULL); } static gboolean check_address_type (TpTestsStreamTubeChannel *self, TpSocketAddressType address_type, TpSocketAccessControl access_control) { GArray *arr; guint i; arr = g_hash_table_lookup (self->priv->supported_socket_types, GUINT_TO_POINTER (address_type)); if (arr == NULL) return FALSE; for (i = 0; i < arr->len; i++) { if (g_array_index (arr, TpSocketAccessControl, i) == access_control) return TRUE; } return FALSE; } static void stream_tube_offer (TpSvcChannelTypeStreamTube *iface, guint address_type, const GValue *address, guint access_control, GHashTable *parameters, DBusGMethodInvocation *context) { TpTestsStreamTubeChannel *self = (TpTestsStreamTubeChannel *) iface; GError *error = NULL; if (self->priv->state != TP_TUBE_CHANNEL_STATE_NOT_OFFERED) { g_set_error (&error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "Tube is not in the not offered state"); goto fail; } if (!check_address_type (self, address_type, access_control)) { g_set_error (&error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "Address type not supported with this access control"); goto fail; } self->priv->address_type = address_type; self->priv->address = tp_g_value_slice_dup (address); self->priv->access_control = access_control; g_object_set (self, "parameters", parameters, NULL); change_state (self, TP_TUBE_CHANNEL_STATE_REMOTE_PENDING); tp_svc_channel_type_stream_tube_return_from_offer (context); return; fail: dbus_g_method_return_error (context, error); g_error_free (error); } static void service_incoming_cb (GSocketService *service, GSocketConnection *connection, GObject *source_object, gpointer user_data) { TpTestsStreamTubeChannel *self = user_data; GError *error = NULL; if (self->priv->access_control == TP_SOCKET_ACCESS_CONTROL_CREDENTIALS) { GCredentials *creds; guchar byte; /* FIXME: we should an async version of this API (bgo #629503) */ creds = tp_unix_connection_receive_credentials_with_byte ( connection, &byte, NULL, &error); g_assert_no_error (error); g_assert_cmpuint (byte, ==, g_value_get_uchar (self->priv->access_control_param)); g_object_unref (creds); } else if (self->priv->access_control == TP_SOCKET_ACCESS_CONTROL_PORT) { GSocketAddress *remote_addr; gchar *host, *remote_host; guint port, remote_port; dbus_g_type_struct_get (self->priv->access_control_param, 0, &host, 1, &port, G_MAXUINT); remote_addr = g_socket_connection_get_remote_address (connection, &error); g_assert_no_error (error); remote_host = g_inet_address_to_string ( g_inet_socket_address_get_address (G_INET_SOCKET_ADDRESS (remote_addr))); remote_port = g_inet_socket_address_get_port (G_INET_SOCKET_ADDRESS (remote_addr)); g_assert_cmpuint (remote_port, ==, port); g_assert_cmpstr (remote_host, ==, host); g_free (host); g_free (remote_host); g_object_unref (remote_addr); } tp_svc_channel_type_stream_tube_emit_new_local_connection (self, self->priv->connection_id); self->priv->connection_id++; g_signal_emit (self, signals[SIG_INCOMING_CONNECTION], 0, connection); } static GValue * create_local_socket (TpTestsStreamTubeChannel *self, TpSocketAddressType address_type, TpSocketAccessControl access_control, GError **error) { gboolean success; GSocketAddress *address, *effective_address; GValue *address_gvalue; switch (access_control) { case TP_SOCKET_ACCESS_CONTROL_LOCALHOST: case TP_SOCKET_ACCESS_CONTROL_CREDENTIALS: case TP_SOCKET_ACCESS_CONTROL_PORT: break; default: g_assert_not_reached (); } switch (address_type) { case TP_SOCKET_ADDRESS_TYPE_UNIX: { address = g_unix_socket_address_new (tmpnam (NULL)); break; } case TP_SOCKET_ADDRESS_TYPE_IPV4: case TP_SOCKET_ADDRESS_TYPE_IPV6: { GInetAddress *localhost; localhost = g_inet_address_new_loopback ( address_type == TP_SOCKET_ADDRESS_TYPE_IPV4 ? G_SOCKET_FAMILY_IPV4 : G_SOCKET_FAMILY_IPV6); address = g_inet_socket_address_new (localhost, 0); g_object_unref (localhost); break; } default: g_assert_not_reached (); } self->priv->service = g_socket_service_new (); success = g_socket_listener_add_address ( G_SOCKET_LISTENER (self->priv->service), address, G_SOCKET_TYPE_STREAM, G_SOCKET_PROTOCOL_DEFAULT, NULL, &effective_address, NULL); g_assert (success); tp_g_signal_connect_object (self->priv->service, "incoming", G_CALLBACK (service_incoming_cb), self, 0); switch (address_type) { case TP_SOCKET_ADDRESS_TYPE_UNIX: self->priv->unix_address = g_strdup (g_unix_socket_address_get_path ( G_UNIX_SOCKET_ADDRESS (effective_address))); address_gvalue = tp_g_value_slice_new_bytes ( g_unix_socket_address_get_path_len ( G_UNIX_SOCKET_ADDRESS (effective_address)), g_unix_socket_address_get_path ( G_UNIX_SOCKET_ADDRESS (effective_address))); break; case TP_SOCKET_ADDRESS_TYPE_IPV4: case TP_SOCKET_ADDRESS_TYPE_IPV6: address_gvalue = tp_g_value_slice_new_take_boxed ( TP_STRUCT_TYPE_SOCKET_ADDRESS_IPV4, dbus_g_type_specialized_construct ( TP_STRUCT_TYPE_SOCKET_ADDRESS_IPV4)); dbus_g_type_struct_set (address_gvalue, 0, address_type == TP_SOCKET_ADDRESS_TYPE_IPV4 ? "127.0.0.1" : "::1", 1, g_inet_socket_address_get_port ( G_INET_SOCKET_ADDRESS (effective_address)), G_MAXUINT); break; default: g_assert_not_reached (); } g_object_unref (address); g_object_unref (effective_address); return address_gvalue; } static void stream_tube_accept (TpSvcChannelTypeStreamTube *iface, TpSocketAddressType address_type, TpSocketAccessControl access_control, const GValue *access_control_param, DBusGMethodInvocation *context) { TpTestsStreamTubeChannel *self = (TpTestsStreamTubeChannel *) iface; GError *error = NULL; GValue *address; if (self->priv->state != TP_TUBE_CHANNEL_STATE_LOCAL_PENDING) { g_set_error (&error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "Tube is not in the local pending state"); goto fail; } if (!check_address_type (self, address_type, access_control)) { g_set_error (&error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "Address type not supported with this access control"); goto fail; } if (self->priv->close_on_accept) { tp_base_channel_close (TP_BASE_CHANNEL (self)); return; } address = create_local_socket (self, address_type, access_control, &error); self->priv->access_control = access_control; self->priv->access_control_param = tp_g_value_slice_dup ( access_control_param); change_state (self, TP_TUBE_CHANNEL_STATE_OPEN); tp_svc_channel_type_stream_tube_return_from_accept (context, address); tp_g_value_slice_free (address); return; fail: dbus_g_method_return_error (context, error); g_error_free (error); } static void stream_tube_iface_init (gpointer iface, gpointer data) { TpSvcChannelTypeStreamTubeClass *klass = iface; #define IMPLEMENT(x) tp_svc_channel_type_stream_tube_implement_##x (klass, stream_tube_##x) IMPLEMENT(offer); IMPLEMENT(accept); #undef IMPLEMENT } /* Called to emulate a peer connecting to an offered tube */ void tp_tests_stream_tube_channel_peer_connected (TpTestsStreamTubeChannel *self, GIOStream *stream, TpHandle handle) { GValue *connection_param; if (self->priv->state == TP_TUBE_CHANNEL_STATE_REMOTE_PENDING) change_state (self, TP_TUBE_CHANNEL_STATE_OPEN); g_assert (self->priv->state == TP_TUBE_CHANNEL_STATE_OPEN); switch (self->priv->access_control) { case TP_SOCKET_ACCESS_CONTROL_LOCALHOST: connection_param = tp_g_value_slice_new_static_string ("dummy"); break; case TP_SOCKET_ACCESS_CONTROL_CREDENTIALS: { GError *error = NULL; guchar byte = g_random_int_range (0, G_MAXUINT8); /* FIXME: we should an async version of this API (bgo #629503) */ tp_unix_connection_send_credentials_with_byte ( G_SOCKET_CONNECTION (stream), byte, NULL, &error); g_assert_no_error (error); connection_param = tp_g_value_slice_new_byte (byte); } break; case TP_SOCKET_ACCESS_CONTROL_PORT: { GSocketAddress *addr; GError *error = NULL; addr = g_socket_connection_get_local_address ( G_SOCKET_CONNECTION (stream), &error); g_assert_no_error (error); connection_param = tp_g_value_slice_new_take_boxed ( TP_STRUCT_TYPE_SOCKET_ADDRESS_IPV4, dbus_g_type_specialized_construct ( TP_STRUCT_TYPE_SOCKET_ADDRESS_IPV4)); dbus_g_type_struct_set (connection_param, 0, "badger", 1, g_inet_socket_address_get_port ( G_INET_SOCKET_ADDRESS (addr)), G_MAXUINT); g_object_unref (addr); } break; default: g_assert_not_reached (); } tp_svc_channel_type_stream_tube_emit_new_remote_connection (self, handle, connection_param, self->priv->connection_id); self->priv->connection_id++; tp_g_value_slice_free (connection_param); } /* Called to emulate a peer connecting to an offered tube */ void tp_tests_stream_tube_channel_peer_connected_no_stream (TpTestsStreamTubeChannel *self, const GValue *connection_param, TpHandle handle) { if (self->priv->state == TP_TUBE_CHANNEL_STATE_REMOTE_PENDING) change_state (self, TP_TUBE_CHANNEL_STATE_OPEN); g_assert (self->priv->state == TP_TUBE_CHANNEL_STATE_OPEN); tp_svc_channel_type_stream_tube_emit_new_remote_connection (self, handle, connection_param, self->priv->connection_id); self->priv->connection_id++; } void tp_tests_stream_tube_channel_last_connection_disconnected ( TpTestsStreamTubeChannel *self, const gchar *error) { tp_svc_channel_type_stream_tube_emit_connection_closed (self, self->priv->connection_id - 1, error, "kaboum"); } void tp_tests_stream_tube_channel_set_close_on_accept ( TpTestsStreamTubeChannel *self, gboolean close_on_accept) { self->priv->close_on_accept = close_on_accept; } /* Contact Stream Tube */ G_DEFINE_TYPE (TpTestsContactStreamTubeChannel, tp_tests_contact_stream_tube_channel, TP_TESTS_TYPE_STREAM_TUBE_CHANNEL) static void tp_tests_contact_stream_tube_channel_init ( TpTestsContactStreamTubeChannel *self) { } static void tp_tests_contact_stream_tube_channel_class_init ( TpTestsContactStreamTubeChannelClass *klass) { TpBaseChannelClass *base_class = TP_BASE_CHANNEL_CLASS (klass); base_class->target_handle_type = TP_HANDLE_TYPE_CONTACT; } /* Room Stream Tube */ G_DEFINE_TYPE (TpTestsRoomStreamTubeChannel, tp_tests_room_stream_tube_channel, TP_TESTS_TYPE_STREAM_TUBE_CHANNEL) static void tp_tests_room_stream_tube_channel_init ( TpTestsRoomStreamTubeChannel *self) { } static void tp_tests_room_stream_tube_channel_class_init ( TpTestsRoomStreamTubeChannelClass *klass) { TpBaseChannelClass *base_class = TP_BASE_CHANNEL_CLASS (klass); base_class->target_handle_type = TP_HANDLE_TYPE_ROOM; } telepathy-qt-0.9.3/tests/lib/glib/textchan-group.c0000644000175200001440000003215112000056607024357 0ustar00collabora-develusers00000000000000/* * a stub anonymous MUC * * Copyright (C) 2008 Collabora Ltd. * Copyright (C) 2008 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ //TODO This either needs to be ported away from TpTextMixin, //or we need to use another test CM instead of this one on the tests where it is used. //tp-glib has not ported it because it is used in TpTextMixin tests. #define _TP_IGNORE_DEPRECATIONS #include "textchan-group.h" #include #include #include #include #include #include #include static void text_iface_init (gpointer iface, gpointer data); static void channel_iface_init (gpointer iface, gpointer data); G_DEFINE_TYPE_WITH_CODE (TpTestsTextChannelGroup, tp_tests_text_channel_group, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL, channel_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_TYPE_TEXT, text_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_INTERFACE_GROUP, tp_group_mixin_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_CHANNEL_IFACE, NULL); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_DBUS_PROPERTIES, tp_dbus_properties_mixin_iface_init)) static const char *text_channel_group_interfaces[] = { TP_IFACE_CHANNEL_INTERFACE_GROUP, NULL }; /* type definition stuff */ enum { PROP_OBJECT_PATH = 1, PROP_CHANNEL_TYPE, PROP_HANDLE_TYPE, PROP_HANDLE, PROP_TARGET_ID, PROP_CONNECTION, PROP_INTERFACES, PROP_REQUESTED, PROP_INITIATOR_HANDLE, PROP_INITIATOR_ID, PROP_DETAILED, PROP_PROPERTIES, N_PROPS }; struct _TpTestsTextChannelGroupPrivate { gchar *object_path; gboolean detailed; gboolean properties; gboolean closed; gboolean disposed; }; static gboolean add_member (GObject *obj, TpHandle handle, const gchar *message, GError **error) { TpTestsTextChannelGroup *self = TP_TESTS_TEXT_CHANNEL_GROUP (obj); TpIntSet *add = tp_intset_new (); tp_intset_add (add, handle); tp_group_mixin_change_members (obj, message, add, NULL, NULL, NULL, self->conn->self_handle, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_intset_destroy (add); return TRUE; } static void tp_tests_text_channel_group_init (TpTestsTextChannelGroup *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, TP_TESTS_TYPE_TEXT_CHANNEL_GROUP, TpTestsTextChannelGroupPrivate); } static GObject * constructor (GType type, guint n_props, GObjectConstructParam *props) { GObject *object = G_OBJECT_CLASS (tp_tests_text_channel_group_parent_class)->constructor (type, n_props, props); TpTestsTextChannelGroup *self = TP_TESTS_TEXT_CHANNEL_GROUP (object); TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (self->conn, TP_HANDLE_TYPE_CONTACT); TpChannelGroupFlags flags = 0; tp_dbus_daemon_register_object ( tp_base_connection_get_dbus_daemon (self->conn), self->priv->object_path, self); tp_text_mixin_init (object, G_STRUCT_OFFSET (TpTestsTextChannelGroup, text), contact_repo); tp_text_mixin_set_message_types (object, TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL, TP_CHANNEL_TEXT_MESSAGE_TYPE_ACTION, TP_CHANNEL_TEXT_MESSAGE_TYPE_NOTICE, G_MAXUINT); if (self->priv->detailed) flags |= TP_CHANNEL_GROUP_FLAG_MEMBERS_CHANGED_DETAILED; if (self->priv->properties) flags |= TP_CHANNEL_GROUP_FLAG_PROPERTIES; tp_group_mixin_init (object, G_STRUCT_OFFSET (TpTestsTextChannelGroup, group), contact_repo, self->conn->self_handle); tp_group_mixin_change_flags (object, flags, 0); return object; } static void get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { TpTestsTextChannelGroup *self = TP_TESTS_TEXT_CHANNEL_GROUP (object); switch (property_id) { case PROP_OBJECT_PATH: g_value_set_string (value, self->priv->object_path); break; case PROP_CHANNEL_TYPE: g_value_set_static_string (value, TP_IFACE_CHANNEL_TYPE_TEXT); break; case PROP_HANDLE_TYPE: g_value_set_uint (value, TP_HANDLE_TYPE_NONE); break; case PROP_HANDLE: g_value_set_uint (value, 0); break; case PROP_TARGET_ID: g_value_set_static_string (value, ""); break; case PROP_REQUESTED: g_value_set_boolean (value, TRUE); break; case PROP_INITIATOR_HANDLE: g_value_set_uint (value, self->conn->self_handle); break; case PROP_INITIATOR_ID: { TpHandleRepoIface *contact_repo = tp_base_connection_get_handles ( self->conn, TP_HANDLE_TYPE_CONTACT); g_value_set_string (value, tp_handle_inspect (contact_repo, self->conn->self_handle)); } break; case PROP_INTERFACES: g_value_set_boxed (value, text_channel_group_interfaces); break; case PROP_CONNECTION: g_value_set_object (value, self->conn); break; case PROP_DETAILED: g_value_set_boolean (value, self->priv->detailed); break; case PROP_PROPERTIES: g_value_set_boolean (value, self->priv->properties); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { TpTestsTextChannelGroup *self = TP_TESTS_TEXT_CHANNEL_GROUP (object); switch (property_id) { case PROP_OBJECT_PATH: g_free (self->priv->object_path); self->priv->object_path = g_value_dup_string (value); break; case PROP_HANDLE: case PROP_HANDLE_TYPE: case PROP_CHANNEL_TYPE: /* these properties are writable in the interface, but not actually * meaningfully changable on this channel, so we do nothing */ break; case PROP_CONNECTION: self->conn = g_value_get_object (value); break; case PROP_DETAILED: self->priv->detailed = g_value_get_boolean (value); break; case PROP_PROPERTIES: self->priv->properties = g_value_get_boolean (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void dispose (GObject *object) { TpTestsTextChannelGroup *self = TP_TESTS_TEXT_CHANNEL_GROUP (object); if (self->priv->disposed) return; self->priv->disposed = TRUE; if (!self->priv->closed) { tp_svc_channel_emit_closed (self); } ((GObjectClass *) tp_tests_text_channel_group_parent_class)->dispose (object); } static void finalize (GObject *object) { TpTestsTextChannelGroup *self = TP_TESTS_TEXT_CHANNEL_GROUP (object); g_free (self->priv->object_path); tp_text_mixin_finalize (object); tp_group_mixin_finalize (object); ((GObjectClass *) tp_tests_text_channel_group_parent_class)->finalize (object); } static void tp_tests_text_channel_group_class_init (TpTestsTextChannelGroupClass *klass) { GObjectClass *object_class = (GObjectClass *) klass; GParamSpec *param_spec; static TpDBusPropertiesMixinPropImpl channel_props[] = { { "TargetHandleType", "handle-type", NULL }, { "TargetHandle", "handle", NULL }, { "ChannelType", "channel-type", NULL }, { "Interfaces", "interfaces", NULL }, { "TargetID", "target-id", NULL }, { "Requested", "requested", NULL }, { "InitiatorHandle", "initiator-handle", NULL }, { "InitiatorID", "initiator-id", NULL }, { NULL } }; static TpDBusPropertiesMixinIfaceImpl prop_interfaces[] = { { TP_IFACE_CHANNEL, tp_dbus_properties_mixin_getter_gobject_properties, NULL, channel_props, }, { NULL } }; g_type_class_add_private (klass, sizeof (TpTestsTextChannelGroupPrivate)); object_class->constructor = constructor; object_class->set_property = set_property; object_class->get_property = get_property; object_class->dispose = dispose; object_class->finalize = finalize; g_object_class_override_property (object_class, PROP_OBJECT_PATH, "object-path"); g_object_class_override_property (object_class, PROP_CHANNEL_TYPE, "channel-type"); g_object_class_override_property (object_class, PROP_HANDLE_TYPE, "handle-type"); g_object_class_override_property (object_class, PROP_HANDLE, "handle"); param_spec = g_param_spec_object ("connection", "TpBaseConnection object", "Connection object that owns this channel", TP_TYPE_BASE_CONNECTION, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB); g_object_class_install_property (object_class, PROP_CONNECTION, param_spec); param_spec = g_param_spec_boxed ("interfaces", "Extra D-Bus interfaces", "Additional Channel.Interface.* interfaces", G_TYPE_STRV, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_INTERFACES, param_spec); param_spec = g_param_spec_string ("target-id", "Peer's ID", "Always the empty string on this channel", NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_TARGET_ID, param_spec); param_spec = g_param_spec_uint ("initiator-handle", "Initiator's handle", "The contact who initiated the channel", 0, G_MAXUINT32, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_INITIATOR_HANDLE, param_spec); param_spec = g_param_spec_string ("initiator-id", "Initiator's ID", "The string obtained by inspecting the initiator-handle", NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_INITIATOR_ID, param_spec); param_spec = g_param_spec_boolean ("requested", "Requested?", "True if this channel was requested by the local user", FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_REQUESTED, param_spec); param_spec = g_param_spec_boolean ("detailed", "Has the Members_Changed_Detailed flag?", "True if the Members_Changed_Detailed group flag should be set", TRUE, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_DETAILED, param_spec); param_spec = g_param_spec_boolean ("properties", "Has the Properties flag?", "True if the Properties group flag should be set", TRUE, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_PROPERTIES, param_spec); tp_text_mixin_class_init (object_class, G_STRUCT_OFFSET (TpTestsTextChannelGroupClass, text_class)); tp_group_mixin_class_init (object_class, G_STRUCT_OFFSET (TpTestsTextChannelGroupClass, group_class), add_member, NULL); klass->dbus_properties_class.interfaces = prop_interfaces; tp_dbus_properties_mixin_class_init (object_class, G_STRUCT_OFFSET (TpTestsTextChannelGroupClass, dbus_properties_class)); tp_group_mixin_init_dbus_properties (object_class); } static void channel_close (TpSvcChannel *iface, DBusGMethodInvocation *context) { TpTestsTextChannelGroup *self = TP_TESTS_TEXT_CHANNEL_GROUP (iface); if (!self->priv->closed) { self->priv->closed = TRUE; tp_svc_channel_emit_closed (self); } tp_svc_channel_return_from_close (context); } static void channel_get_channel_type (TpSvcChannel *iface, DBusGMethodInvocation *context) { tp_svc_channel_return_from_get_channel_type (context, TP_IFACE_CHANNEL_TYPE_TEXT); } static void channel_get_handle (TpSvcChannel *iface, DBusGMethodInvocation *context) { tp_svc_channel_return_from_get_handle (context, TP_HANDLE_TYPE_NONE, 0); } static void channel_get_interfaces (TpSvcChannel *iface, DBusGMethodInvocation *context) { tp_svc_channel_return_from_get_interfaces (context, text_channel_group_interfaces); } static void channel_iface_init (gpointer iface, gpointer data) { TpSvcChannelClass *klass = iface; #define IMPLEMENT(x) tp_svc_channel_implement_##x (klass, channel_##x) IMPLEMENT (close); IMPLEMENT (get_channel_type); IMPLEMENT (get_handle); IMPLEMENT (get_interfaces); #undef IMPLEMENT } static void text_send (TpSvcChannelTypeText *iface, guint type, const gchar *text, DBusGMethodInvocation *context) { /* silently swallow the message */ tp_svc_channel_type_text_return_from_send (context); } static void text_iface_init (gpointer iface, gpointer data) { TpSvcChannelTypeTextClass *klass = iface; tp_text_mixin_iface_init (iface, data); #define IMPLEMENT(x) tp_svc_channel_type_text_implement_##x (klass, text_##x) IMPLEMENT (send); #undef IMPLEMENT } telepathy-qt-0.9.3/tests/lib/glib/contactlist/0000755000175200001440000000000012000056607023570 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/tests/lib/glib/contactlist/connection-manager.h0000644000175200001440000000454612000056607027521 0ustar00collabora-develusers00000000000000/* * manager.h - header for an example connection manager * * Copyright © 2007-2009 Collabora Ltd. * Copyright © 2007-2009 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef __EXAMPLE_CONTACT_LIST_CONNECTION_MANAGER_H__ #define __EXAMPLE_CONTACT_LIST_CONNECTION_MANAGER_H__ #include #include G_BEGIN_DECLS typedef struct _ExampleContactListConnectionManager ExampleContactListConnectionManager; typedef struct _ExampleContactListConnectionManagerClass ExampleContactListConnectionManagerClass; typedef struct _ExampleContactListConnectionManagerPrivate ExampleContactListConnectionManagerPrivate; struct _ExampleContactListConnectionManagerClass { TpBaseConnectionManagerClass parent_class; }; struct _ExampleContactListConnectionManager { TpBaseConnectionManager parent; ExampleContactListConnectionManagerPrivate *priv; }; GType example_contact_list_connection_manager_get_type (void); #define EXAMPLE_TYPE_CONTACT_LIST_CONNECTION_MANAGER \ (example_contact_list_connection_manager_get_type ()) #define EXAMPLE_CONTACT_LIST_CONNECTION_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ EXAMPLE_TYPE_CONTACT_LIST_CONNECTION_MANAGER, \ ExampleContactListConnectionManager)) #define EXAMPLE_CONTACT_LIST_CONNECTION_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ EXAMPLE_TYPE_CONTACT_LIST_CONNECTION_MANAGER, \ ExampleContactListConnectionManagerClass)) #define EXAMPLE_IS_CONTACT_LIST_CONNECTION_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ EXAMPLE_TYPE_CONTACT_LIST_CONNECTION_MANAGER)) #define EXAMPLE_IS_CONTACT_LIST_CONNECTION_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), \ EXAMPLE_TYPE_CONTACT_LIST_CONNECTION_MANAGER)) #define EXAMPLE_CONTACT_LIST_CONNECTION_MANAGER_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), \ EXAMPLE_TYPE_CONTACT_LIST_CONNECTION_MANAGER, \ ExampleContactListConnectionManagerClass)) G_END_DECLS #endif telepathy-qt-0.9.3/tests/lib/glib/contactlist/conn.c0000644000175200001440000004366412000056607024706 0ustar00collabora-develusers00000000000000/* * conn.c - an example connection * * Copyright © 2007-2009 Collabora Ltd. * Copyright © 2007-2009 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #include "conn.h" #include #include #include #include #include #include "contact-list-manager.h" static void init_aliasing (gpointer, gpointer); G_DEFINE_TYPE_WITH_CODE (ExampleContactListConnection, example_contact_list_connection, TP_TYPE_BASE_CONNECTION, G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_ALIASING, init_aliasing); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_CONTACTS, tp_contacts_mixin_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_PRESENCE, tp_presence_mixin_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_SIMPLE_PRESENCE, tp_presence_mixin_simple_presence_iface_init)) enum { PROP_ACCOUNT = 1, PROP_SIMULATION_DELAY, N_PROPS }; struct _ExampleContactListConnectionPrivate { gchar *account; guint simulation_delay; ExampleContactListManager *list_manager; gboolean away; }; static void example_contact_list_connection_init (ExampleContactListConnection *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, EXAMPLE_TYPE_CONTACT_LIST_CONNECTION, ExampleContactListConnectionPrivate); } static void get_property (GObject *object, guint property_id, GValue *value, GParamSpec *spec) { ExampleContactListConnection *self = EXAMPLE_CONTACT_LIST_CONNECTION (object); switch (property_id) { case PROP_ACCOUNT: g_value_set_string (value, self->priv->account); break; case PROP_SIMULATION_DELAY: g_value_set_uint (value, self->priv->simulation_delay); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, spec); } } static void set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *spec) { ExampleContactListConnection *self = EXAMPLE_CONTACT_LIST_CONNECTION (object); switch (property_id) { case PROP_ACCOUNT: g_free (self->priv->account); self->priv->account = g_value_dup_string (value); break; case PROP_SIMULATION_DELAY: self->priv->simulation_delay = g_value_get_uint (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, spec); } } static void finalize (GObject *object) { ExampleContactListConnection *self = EXAMPLE_CONTACT_LIST_CONNECTION (object); tp_contacts_mixin_finalize (object); g_free (self->priv->account); G_OBJECT_CLASS (example_contact_list_connection_parent_class)->finalize ( object); } static gchar * get_unique_connection_name (TpBaseConnection *conn) { ExampleContactListConnection *self = EXAMPLE_CONTACT_LIST_CONNECTION (conn); return g_strdup_printf ("%s@%p", self->priv->account, self); } gchar * example_contact_list_normalize_contact (TpHandleRepoIface *repo, const gchar *id, gpointer context, GError **error) { if (id[0] == '\0') { g_set_error (error, TP_ERROR, TP_ERROR_INVALID_HANDLE, "Contact ID must not be empty"); return NULL; } return g_utf8_normalize (id, -1, G_NORMALIZE_ALL_COMPOSE); } static gchar * example_contact_list_normalize_group (TpHandleRepoIface *repo, const gchar *id, gpointer context, GError **error) { if (id[0] == '\0') { g_set_error (error, TP_ERROR, TP_ERROR_INVALID_HANDLE, "Contact group name cannot be empty"); return NULL; } return g_utf8_normalize (id, -1, G_NORMALIZE_ALL_COMPOSE); } static void create_handle_repos (TpBaseConnection *conn, TpHandleRepoIface *repos[NUM_TP_HANDLE_TYPES]) { repos[TP_HANDLE_TYPE_CONTACT] = tp_dynamic_handle_repo_new (TP_HANDLE_TYPE_CONTACT, example_contact_list_normalize_contact, NULL); repos[TP_HANDLE_TYPE_LIST] = tp_static_handle_repo_new (TP_HANDLE_TYPE_LIST, example_contact_lists ()); repos[TP_HANDLE_TYPE_GROUP] = tp_dynamic_handle_repo_new (TP_HANDLE_TYPE_GROUP, example_contact_list_normalize_group, NULL); } static void alias_updated_cb (ExampleContactListManager *manager, TpHandle contact, ExampleContactListConnection *self) { GPtrArray *aliases; GValueArray *pair; pair = g_value_array_new (2); g_value_array_append (pair, NULL); g_value_array_append (pair, NULL); g_value_init (pair->values + 0, G_TYPE_UINT); g_value_init (pair->values + 1, G_TYPE_STRING); g_value_set_uint (pair->values + 0, contact); g_value_set_string (pair->values + 1, example_contact_list_manager_get_alias (manager, contact)); aliases = g_ptr_array_sized_new (1); g_ptr_array_add (aliases, pair); tp_svc_connection_interface_aliasing_emit_aliases_changed (self, aliases); g_ptr_array_free (aliases, TRUE); g_value_array_free (pair); } static void presence_updated_cb (ExampleContactListManager *manager, TpHandle contact, ExampleContactListConnection *self) { TpBaseConnection *base = (TpBaseConnection *) self; TpPresenceStatus *status; /* we ignore the presence indicated by the contact list for our own handle */ if (contact == base->self_handle) return; status = tp_presence_status_new ( example_contact_list_manager_get_presence (manager, contact), NULL); tp_presence_mixin_emit_one_presence_update ((GObject *) self, contact, status); tp_presence_status_free (status); } static GPtrArray * create_channel_managers (TpBaseConnection *conn) { ExampleContactListConnection *self = EXAMPLE_CONTACT_LIST_CONNECTION (conn); GPtrArray *ret = g_ptr_array_sized_new (1); self->priv->list_manager = EXAMPLE_CONTACT_LIST_MANAGER (g_object_new ( EXAMPLE_TYPE_CONTACT_LIST_MANAGER, "connection", conn, "simulation-delay", self->priv->simulation_delay, NULL)); g_signal_connect (self->priv->list_manager, "alias-updated", G_CALLBACK (alias_updated_cb), self); g_signal_connect (self->priv->list_manager, "presence-updated", G_CALLBACK (presence_updated_cb), self); g_ptr_array_add (ret, self->priv->list_manager); return ret; } static gboolean start_connecting (TpBaseConnection *conn, GError **error) { ExampleContactListConnection *self = EXAMPLE_CONTACT_LIST_CONNECTION (conn); TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (conn, TP_HANDLE_TYPE_CONTACT); /* In a real connection manager we'd ask the underlying implementation to * start connecting, then go to state CONNECTED when finished, but here * we can do it immediately. */ conn->self_handle = tp_handle_ensure (contact_repo, self->priv->account, NULL, error); if (conn->self_handle == 0) return FALSE; tp_base_connection_change_status (conn, TP_CONNECTION_STATUS_CONNECTED, TP_CONNECTION_STATUS_REASON_REQUESTED); return TRUE; } static void shut_down (TpBaseConnection *conn) { /* In a real connection manager we'd ask the underlying implementation to * start shutting down, then call this function when finished, but here * we can do it immediately. */ tp_base_connection_finish_shutdown (conn); } static void aliasing_fill_contact_attributes (GObject *object, const GArray *contacts, GHashTable *attributes) { ExampleContactListConnection *self = EXAMPLE_CONTACT_LIST_CONNECTION (object); guint i; for (i = 0; i < contacts->len; i++) { TpHandle contact = g_array_index (contacts, guint, i); tp_contacts_mixin_set_contact_attribute (attributes, contact, TP_TOKEN_CONNECTION_INTERFACE_ALIASING_ALIAS, tp_g_value_slice_new_string ( example_contact_list_manager_get_alias (self->priv->list_manager, contact))); } } static void constructed (GObject *object) { TpBaseConnection *base = TP_BASE_CONNECTION (object); void (*chain_up) (GObject *) = G_OBJECT_CLASS (example_contact_list_connection_parent_class)->constructed; if (chain_up != NULL) chain_up (object); tp_contacts_mixin_init (object, G_STRUCT_OFFSET (ExampleContactListConnection, contacts_mixin)); tp_base_connection_register_with_contacts_mixin (base); tp_contacts_mixin_add_contact_attributes_iface (object, TP_IFACE_CONNECTION_INTERFACE_ALIASING, aliasing_fill_contact_attributes); tp_presence_mixin_init (object, G_STRUCT_OFFSET (ExampleContactListConnection, presence_mixin)); tp_presence_mixin_simple_presence_register_with_contacts_mixin (object); } static gboolean status_available (GObject *object, guint index_) { TpBaseConnection *base = TP_BASE_CONNECTION (object); if (base->status != TP_CONNECTION_STATUS_CONNECTED) return FALSE; return TRUE; } static GHashTable * get_contact_statuses (GObject *object, const GArray *contacts, GError **error) { ExampleContactListConnection *self = EXAMPLE_CONTACT_LIST_CONNECTION (object); TpBaseConnection *base = TP_BASE_CONNECTION (object); guint i; GHashTable *result = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, (GDestroyNotify) tp_presence_status_free); for (i = 0; i < contacts->len; i++) { TpHandle contact = g_array_index (contacts, guint, i); ExampleContactListPresence presence; GHashTable *parameters; /* we get our own status from the connection, and everyone else's status * from the contact lists */ if (contact == base->self_handle) { presence = (self->priv->away ? EXAMPLE_CONTACT_LIST_PRESENCE_AWAY : EXAMPLE_CONTACT_LIST_PRESENCE_AVAILABLE); } else { presence = example_contact_list_manager_get_presence ( self->priv->list_manager, contact); } parameters = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) tp_g_value_slice_free); g_hash_table_insert (result, GUINT_TO_POINTER (contact), tp_presence_status_new (presence, parameters)); g_hash_table_destroy (parameters); } return result; } static gboolean set_own_status (GObject *object, const TpPresenceStatus *status, GError **error) { ExampleContactListConnection *self = EXAMPLE_CONTACT_LIST_CONNECTION (object); TpBaseConnection *base = TP_BASE_CONNECTION (object); GHashTable *presences; if (status->index == EXAMPLE_CONTACT_LIST_PRESENCE_AWAY) { if (self->priv->away) return TRUE; self->priv->away = TRUE; } else { if (!self->priv->away) return TRUE; self->priv->away = FALSE; } presences = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, NULL); g_hash_table_insert (presences, GUINT_TO_POINTER (base->self_handle), (gpointer) status); tp_presence_mixin_emit_presence_update (object, presences); g_hash_table_destroy (presences); return TRUE; } static void example_contact_list_connection_class_init ( ExampleContactListConnectionClass *klass) { static const gchar *interfaces_always_present[] = { TP_IFACE_CONNECTION_INTERFACE_ALIASING, TP_IFACE_CONNECTION_INTERFACE_CONTACTS, TP_IFACE_CONNECTION_INTERFACE_PRESENCE, TP_IFACE_CONNECTION_INTERFACE_REQUESTS, TP_IFACE_CONNECTION_INTERFACE_SIMPLE_PRESENCE, NULL }; TpBaseConnectionClass *base_class = (TpBaseConnectionClass *) klass; GObjectClass *object_class = (GObjectClass *) klass; GParamSpec *param_spec; object_class->get_property = get_property; object_class->set_property = set_property; object_class->constructed = constructed; object_class->finalize = finalize; g_type_class_add_private (klass, sizeof (ExampleContactListConnectionPrivate)); base_class->create_handle_repos = create_handle_repos; base_class->get_unique_connection_name = get_unique_connection_name; base_class->create_channel_managers = create_channel_managers; base_class->start_connecting = start_connecting; base_class->shut_down = shut_down; base_class->interfaces_always_present = interfaces_always_present; param_spec = g_param_spec_string ("account", "Account name", "The username of this user", NULL, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB); g_object_class_install_property (object_class, PROP_ACCOUNT, param_spec); param_spec = g_param_spec_uint ("simulation-delay", "Simulation delay", "Delay between simulated network events", 0, G_MAXUINT32, 1000, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_SIMULATION_DELAY, param_spec); tp_contacts_mixin_class_init (object_class, G_STRUCT_OFFSET (ExampleContactListConnectionClass, contacts_mixin)); tp_presence_mixin_class_init (object_class, G_STRUCT_OFFSET (ExampleContactListConnectionClass, presence_mixin), status_available, get_contact_statuses, set_own_status, example_contact_list_presence_statuses ()); tp_presence_mixin_simple_presence_init_dbus_properties (object_class); } static void get_alias_flags (TpSvcConnectionInterfaceAliasing *aliasing, DBusGMethodInvocation *context) { TpBaseConnection *base = TP_BASE_CONNECTION (aliasing); TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context); tp_svc_connection_interface_aliasing_return_from_get_alias_flags (context, TP_CONNECTION_ALIAS_FLAG_USER_SET); } static void get_aliases (TpSvcConnectionInterfaceAliasing *aliasing, const GArray *contacts, DBusGMethodInvocation *context) { ExampleContactListConnection *self = EXAMPLE_CONTACT_LIST_CONNECTION (aliasing); TpBaseConnection *base = TP_BASE_CONNECTION (aliasing); TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (base, TP_HANDLE_TYPE_CONTACT); GHashTable *result; GError *error = NULL; guint i; TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context); if (!tp_handles_are_valid (contact_repo, contacts, FALSE, &error)) { dbus_g_method_return_error (context, error); g_error_free (error); return; } result = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, NULL); for (i = 0; i < contacts->len; i++) { TpHandle contact = g_array_index (contacts, TpHandle, i); const gchar *alias = example_contact_list_manager_get_alias ( self->priv->list_manager, contact); g_hash_table_insert (result, GUINT_TO_POINTER (contact), (gchar *) alias); } tp_svc_connection_interface_aliasing_return_from_get_aliases (context, result); g_hash_table_destroy (result); } static void request_aliases (TpSvcConnectionInterfaceAliasing *aliasing, const GArray *contacts, DBusGMethodInvocation *context) { ExampleContactListConnection *self = EXAMPLE_CONTACT_LIST_CONNECTION (aliasing); TpBaseConnection *base = TP_BASE_CONNECTION (aliasing); TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (base, TP_HANDLE_TYPE_CONTACT); GPtrArray *result; gchar **strings; GError *error = NULL; guint i; TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context); if (!tp_handles_are_valid (contact_repo, contacts, FALSE, &error)) { dbus_g_method_return_error (context, error); g_error_free (error); return; } result = g_ptr_array_sized_new (contacts->len + 1); for (i = 0; i < contacts->len; i++) { TpHandle contact = g_array_index (contacts, TpHandle, i); const gchar *alias = example_contact_list_manager_get_alias ( self->priv->list_manager, contact); g_ptr_array_add (result, (gchar *) alias); } g_ptr_array_add (result, NULL); strings = (gchar **) g_ptr_array_free (result, FALSE); tp_svc_connection_interface_aliasing_return_from_request_aliases (context, (const gchar **) strings); g_free (strings); } static void set_aliases (TpSvcConnectionInterfaceAliasing *aliasing, GHashTable *aliases, DBusGMethodInvocation *context) { ExampleContactListConnection *self = EXAMPLE_CONTACT_LIST_CONNECTION (aliasing); TpBaseConnection *base = TP_BASE_CONNECTION (aliasing); TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (base, TP_HANDLE_TYPE_CONTACT); GHashTableIter iter; gpointer key, value; g_hash_table_iter_init (&iter, aliases); while (g_hash_table_iter_next (&iter, &key, &value)) { GError *error = NULL; if (!tp_handle_is_valid (contact_repo, GPOINTER_TO_UINT (key), &error)) { dbus_g_method_return_error (context, error); g_error_free (error); return; } } g_hash_table_iter_init (&iter, aliases); while (g_hash_table_iter_next (&iter, &key, &value)) { example_contact_list_manager_set_alias (self->priv->list_manager, GPOINTER_TO_UINT (key), value); } tp_svc_connection_interface_aliasing_return_from_set_aliases (context); } static void init_aliasing (gpointer iface, gpointer iface_data G_GNUC_UNUSED) { TpSvcConnectionInterfaceAliasingClass *klass = iface; #define IMPLEMENT(x) tp_svc_connection_interface_aliasing_implement_##x (\ klass, x) IMPLEMENT(get_alias_flags); IMPLEMENT(request_aliases); IMPLEMENT(get_aliases); IMPLEMENT(set_aliases); #undef IMPLEMENT } telepathy-qt-0.9.3/tests/lib/glib/contactlist/manager-file.py0000644000175200001440000000116212000056607026471 0ustar00collabora-develusers00000000000000# Input for tools/manager-file.py MANAGER = 'example_contact_list' PARAMS = { 'example' : { 'account': { 'dtype': 's', 'flags': 'required register', 'filter': 'account_param_filter', # 'filter_data': 'NULL', # 'default': ..., # 'struct_field': '...', # 'setter_data': 'NULL', }, 'simulation-delay': { 'dtype': 'u', 'default': 1000, }, }, } STRUCTS = { 'example': 'ExampleParams' } telepathy-qt-0.9.3/tests/lib/glib/contactlist/CMakeLists.txt0000644000175200001440000000106112000056607026326 0ustar00collabora-develusers00000000000000if(ENABLE_TP_GLIB_TESTS) set(example_cm_contactlist_SRCS conn.c conn.h connection-manager.c connection-manager.h contact-list.c contact-list.h contact-list-manager.c contact-list-manager.h) add_library(example-cm-contactlist STATIC ${example_cm_contactlist_SRCS}) target_link_libraries(example-cm-contactlist ${TPGLIB_LIBRARIES}) tpqt_generate_manager_file(${CMAKE_CURRENT_SOURCE_DIR}/manager-file.py example_contact_list.manager connection-manager.c) endif(ENABLE_TP_GLIB_TESTS) telepathy-qt-0.9.3/tests/lib/glib/contactlist/contact-list-manager.h0000644000175200001440000000762512000056607027767 0ustar00collabora-develusers00000000000000/* * Example channel manager for contact lists * * Copyright © 2007-2009 Collabora Ltd. * Copyright © 2007-2009 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef __EXAMPLE_CONTACT_LIST_MANAGER_H__ #define __EXAMPLE_CONTACT_LIST_MANAGER_H__ #include #include #include #include G_BEGIN_DECLS typedef struct _ExampleContactListManager ExampleContactListManager; typedef struct _ExampleContactListManagerClass ExampleContactListManagerClass; typedef struct _ExampleContactListManagerPrivate ExampleContactListManagerPrivate; struct _ExampleContactListManagerClass { GObjectClass parent_class; }; struct _ExampleContactListManager { GObject parent; ExampleContactListManagerPrivate *priv; }; GType example_contact_list_manager_get_type (void); #define EXAMPLE_TYPE_CONTACT_LIST_MANAGER \ (example_contact_list_manager_get_type ()) #define EXAMPLE_CONTACT_LIST_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), EXAMPLE_TYPE_CONTACT_LIST_MANAGER, \ ExampleContactListManager)) #define EXAMPLE_CONTACT_LIST_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), EXAMPLE_TYPE_CONTACT_LIST_MANAGER, \ ExampleContactListManagerClass)) #define EXAMPLE_IS_CONTACT_LIST_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), EXAMPLE_TYPE_CONTACT_LIST_MANAGER)) #define EXAMPLE_IS_CONTACT_LIST_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), EXAMPLE_TYPE_CONTACT_LIST_MANAGER)) #define EXAMPLE_CONTACT_LIST_MANAGER_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), EXAMPLE_TYPE_CONTACT_LIST_MANAGER, \ ExampleContactListManagerClass)) gboolean example_contact_list_manager_add_to_group ( ExampleContactListManager *self, GObject *channel, TpHandle group, TpHandle member, const gchar *message, GError **error); gboolean example_contact_list_manager_remove_from_group ( ExampleContactListManager *self, GObject *channel, TpHandle group, TpHandle member, const gchar *message, GError **error); /* elements 1, 2... of this enum must be kept in sync with elements 0, 1... * of the array _contact_lists in contact-list-manager.h */ typedef enum { INVALID_EXAMPLE_CONTACT_LIST, EXAMPLE_CONTACT_LIST_SUBSCRIBE = 1, EXAMPLE_CONTACT_LIST_PUBLISH, EXAMPLE_CONTACT_LIST_STORED, EXAMPLE_CONTACT_LIST_DENY, NUM_EXAMPLE_CONTACT_LISTS } ExampleContactListHandle; /* this enum must be kept in sync with the array _statuses in * contact-list-manager.c */ typedef enum { EXAMPLE_CONTACT_LIST_PRESENCE_OFFLINE = 0, EXAMPLE_CONTACT_LIST_PRESENCE_UNKNOWN, EXAMPLE_CONTACT_LIST_PRESENCE_ERROR, EXAMPLE_CONTACT_LIST_PRESENCE_AWAY, EXAMPLE_CONTACT_LIST_PRESENCE_AVAILABLE } ExampleContactListPresence; const TpPresenceStatusSpec *example_contact_list_presence_statuses ( void); gboolean example_contact_list_manager_add_to_list ( ExampleContactListManager *self, GObject *channel, ExampleContactListHandle list, TpHandle member, const gchar *message, GError **error); gboolean example_contact_list_manager_remove_from_list ( ExampleContactListManager *self, GObject *channel, ExampleContactListHandle list, TpHandle member, const gchar *message, GError **error); const gchar **example_contact_lists (void); ExampleContactListPresence example_contact_list_manager_get_presence ( ExampleContactListManager *self, TpHandle contact); const gchar *example_contact_list_manager_get_alias ( ExampleContactListManager *self, TpHandle contact); void example_contact_list_manager_set_alias ( ExampleContactListManager *self, TpHandle contact, const gchar *alias); G_END_DECLS #endif telepathy-qt-0.9.3/tests/lib/glib/contactlist/contact-list.h0000644000175200001440000001045712000056607026354 0ustar00collabora-develusers00000000000000/* * Example ContactList channels with handle type LIST or GROUP * * Copyright © 2009 Collabora Ltd. * Copyright © 2009 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef EXAMPLE_CONTACT_LIST_H #define EXAMPLE_CONTACT_LIST_H #include #include #include G_BEGIN_DECLS typedef struct _ExampleContactListBase ExampleContactListBase; typedef struct _ExampleContactListBaseClass ExampleContactListBaseClass; typedef struct _ExampleContactListBasePrivate ExampleContactListBasePrivate; typedef struct _ExampleContactList ExampleContactList; typedef struct _ExampleContactListClass ExampleContactListClass; typedef struct _ExampleContactListPrivate ExampleContactListPrivate; typedef struct _ExampleContactGroup ExampleContactGroup; typedef struct _ExampleContactGroupClass ExampleContactGroupClass; typedef struct _ExampleContactGroupPrivate ExampleContactGroupPrivate; GType example_contact_list_base_get_type (void); GType example_contact_list_get_type (void); GType example_contact_group_get_type (void); #define EXAMPLE_TYPE_CONTACT_LIST_BASE \ (example_contact_list_base_get_type ()) #define EXAMPLE_CONTACT_LIST_BASE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXAMPLE_TYPE_CONTACT_LIST_BASE, \ ExampleContactListBase)) #define EXAMPLE_CONTACT_LIST_BASE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), EXAMPLE_TYPE_CONTACT_LIST_BASE, \ ExampleContactListBaseClass)) #define EXAMPLE_IS_CONTACT_LIST_BASE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EXAMPLE_TYPE_CONTACT_LIST_BASE)) #define EXAMPLE_IS_CONTACT_LIST_BASE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), EXAMPLE_TYPE_CONTACT_LIST_BASE)) #define EXAMPLE_CONTACT_LIST_BASE_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), EXAMPLE_TYPE_CONTACT_LIST_BASE, \ ExampleContactListBaseClass)) #define EXAMPLE_TYPE_CONTACT_LIST \ (example_contact_list_get_type ()) #define EXAMPLE_CONTACT_LIST(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXAMPLE_TYPE_CONTACT_LIST, \ ExampleContactList)) #define EXAMPLE_CONTACT_LIST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), EXAMPLE_TYPE_CONTACT_LIST, \ ExampleContactListClass)) #define EXAMPLE_IS_CONTACT_LIST(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EXAMPLE_TYPE_CONTACT_LIST)) #define EXAMPLE_IS_CONTACT_LIST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), EXAMPLE_TYPE_CONTACT_LIST)) #define EXAMPLE_CONTACT_LIST_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), EXAMPLE_TYPE_CONTACT_LIST, \ ExampleContactListClass)) #define EXAMPLE_TYPE_CONTACT_GROUP \ (example_contact_group_get_type ()) #define EXAMPLE_CONTACT_GROUP(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXAMPLE_TYPE_CONTACT_GROUP, \ ExampleContactGroup)) #define EXAMPLE_CONTACT_GROUP_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), EXAMPLE_TYPE_CONTACT_GROUP, \ ExampleContactGroupClass)) #define EXAMPLE_IS_CONTACT_GROUP(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EXAMPLE_TYPE_CONTACT_GROUP)) #define EXAMPLE_IS_CONTACT_GROUP_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), EXAMPLE_TYPE_CONTACT_GROUP)) #define EXAMPLE_CONTACT_GROUP_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), EXAMPLE_TYPE_CONTACT_GROUP, \ ExampleContactGroupClass)) struct _ExampleContactListBaseClass { GObjectClass parent_class; TpGroupMixinClass group_class; TpDBusPropertiesMixinClass dbus_properties_class; }; struct _ExampleContactListClass { ExampleContactListBaseClass parent_class; }; struct _ExampleContactGroupClass { ExampleContactListBaseClass parent_class; }; struct _ExampleContactListBase { GObject parent; TpGroupMixin group; ExampleContactListBasePrivate *priv; }; struct _ExampleContactList { ExampleContactListBase parent; ExampleContactListPrivate *priv; }; struct _ExampleContactGroup { ExampleContactListBase parent; ExampleContactGroupPrivate *priv; }; G_END_DECLS #endif telepathy-qt-0.9.3/tests/lib/glib/contactlist/connection-manager.c0000644000175200001440000000553412000056607027512 0ustar00collabora-develusers00000000000000/* * manager.c - an example connection manager * * Copyright © 2007-2009 Collabora Ltd. * Copyright © 2007-2009 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #include "connection-manager.h" #include #include #include #include "conn.h" G_DEFINE_TYPE (ExampleContactListConnectionManager, example_contact_list_connection_manager, TP_TYPE_BASE_CONNECTION_MANAGER) struct _ExampleContactListConnectionManagerPrivate { int dummy; }; static void example_contact_list_connection_manager_init ( ExampleContactListConnectionManager *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, EXAMPLE_TYPE_CONTACT_LIST_CONNECTION_MANAGER, ExampleContactListConnectionManagerPrivate); } typedef struct { gchar *account; guint simulation_delay; } ExampleParams; static gboolean account_param_filter (const TpCMParamSpec *paramspec, GValue *value, GError **error) { const gchar *id = g_value_get_string (value); g_value_take_string (value, example_contact_list_normalize_contact (NULL, id, NULL, error)); if (g_value_get_string (value) == NULL) return FALSE; return TRUE; } #include "_gen/param-spec-struct.h" static gpointer alloc_params (void) { return g_slice_new0 (ExampleParams); } static void free_params (gpointer p) { ExampleParams *params = p; g_free (params->account); g_slice_free (ExampleParams, params); } static const TpCMProtocolSpec example_protocols[] = { { "example", example_contact_list_example_params, alloc_params, free_params }, { NULL, NULL } }; static TpBaseConnection * new_connection (TpBaseConnectionManager *self, const gchar *proto, TpIntSet *params_present, gpointer parsed_params, GError **error) { ExampleParams *params = parsed_params; ExampleContactListConnection *conn; conn = EXAMPLE_CONTACT_LIST_CONNECTION (g_object_new (EXAMPLE_TYPE_CONTACT_LIST_CONNECTION, "account", params->account, "simulation-delay", params->simulation_delay, "protocol", proto, NULL)); return (TpBaseConnection *) conn; } static void example_contact_list_connection_manager_class_init ( ExampleContactListConnectionManagerClass *klass) { TpBaseConnectionManagerClass *base_class = (TpBaseConnectionManagerClass *) klass; g_type_class_add_private (klass, sizeof (ExampleContactListConnectionManagerPrivate)); base_class->new_connection = new_connection; base_class->cm_dbus_name = "example_contact_list"; base_class->protocol_params = example_protocols; } telepathy-qt-0.9.3/tests/lib/glib/contactlist/contact-list.c0000644000175200001440000004671012000056607026350 0ustar00collabora-develusers00000000000000/* * An example ContactList channel with handle type LIST or GROUP * * Copyright © 2009 Collabora Ltd. * Copyright © 2009 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #include "contact-list.h" #include #include #include #include #include "contact-list-manager.h" static void channel_iface_init (gpointer iface, gpointer data); static void list_channel_iface_init (gpointer iface, gpointer data); static void group_channel_iface_init (gpointer iface, gpointer data); /* Abstract base class */ G_DEFINE_TYPE_WITH_CODE (ExampleContactListBase, example_contact_list_base, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL, channel_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_TYPE_CONTACT_LIST, NULL); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_INTERFACE_GROUP, tp_group_mixin_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_DBUS_PROPERTIES, tp_dbus_properties_mixin_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_EXPORTABLE_CHANNEL, NULL); G_IMPLEMENT_INTERFACE (TP_TYPE_CHANNEL_IFACE, NULL)) /* Subclass for handle type LIST */ G_DEFINE_TYPE_WITH_CODE (ExampleContactList, example_contact_list, EXAMPLE_TYPE_CONTACT_LIST_BASE, G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL, list_channel_iface_init)) /* Subclass for handle type GROUP */ G_DEFINE_TYPE_WITH_CODE (ExampleContactGroup, example_contact_group, EXAMPLE_TYPE_CONTACT_LIST_BASE, G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL, group_channel_iface_init)) static const gchar *contact_list_interfaces[] = { TP_IFACE_CHANNEL_INTERFACE_GROUP, NULL }; enum { PROP_OBJECT_PATH = 1, PROP_CHANNEL_TYPE, PROP_HANDLE_TYPE, PROP_HANDLE, PROP_TARGET_ID, PROP_REQUESTED, PROP_INITIATOR_HANDLE, PROP_INITIATOR_ID, PROP_CONNECTION, PROP_MANAGER, PROP_INTERFACES, PROP_CHANNEL_DESTROYED, PROP_CHANNEL_PROPERTIES, N_PROPS }; struct _ExampleContactListBasePrivate { TpBaseConnection *conn; ExampleContactListManager *manager; gchar *object_path; TpHandleType handle_type; TpHandle handle; /* These are really booleans, but gboolean is signed. Thanks, GLib */ unsigned closed:1; unsigned disposed:1; }; struct _ExampleContactListPrivate { int dummy:1; }; struct _ExampleContactGroupPrivate { int dummy:1; }; static void example_contact_list_base_init (ExampleContactListBase *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, EXAMPLE_TYPE_CONTACT_LIST_BASE, ExampleContactListBasePrivate); } static void example_contact_list_init (ExampleContactList *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, EXAMPLE_TYPE_CONTACT_LIST, ExampleContactListPrivate); } static void example_contact_group_init (ExampleContactGroup *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, EXAMPLE_TYPE_CONTACT_GROUP, ExampleContactGroupPrivate); } static void constructed (GObject *object) { ExampleContactListBase *self = EXAMPLE_CONTACT_LIST_BASE (object); void (*chain_up) (GObject *) = ((GObjectClass *) example_contact_list_base_parent_class)->constructed; TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (self->priv->conn, TP_HANDLE_TYPE_CONTACT); TpHandle self_handle = self->priv->conn->self_handle; if (chain_up != NULL) chain_up (object); g_assert (TP_IS_BASE_CONNECTION (self->priv->conn)); g_assert (EXAMPLE_IS_CONTACT_LIST_MANAGER (self->priv->manager)); tp_dbus_daemon_register_object ( tp_base_connection_get_dbus_daemon (self->priv->conn), self->priv->object_path, self); tp_group_mixin_init (object, G_STRUCT_OFFSET (ExampleContactListBase, group), contact_repo, self_handle); /* Both the subclasses have full support for telepathy-spec 0.17.6. */ tp_group_mixin_change_flags (object, TP_CHANNEL_GROUP_FLAG_PROPERTIES, 0); } static void list_constructed (GObject *object) { ExampleContactList *self = EXAMPLE_CONTACT_LIST (object); void (*chain_up) (GObject *) = ((GObjectClass *) example_contact_list_parent_class)->constructed; if (chain_up != NULL) chain_up (object); g_assert (self->parent.priv->handle_type == TP_HANDLE_TYPE_LIST); switch (self->parent.priv->handle) { case EXAMPLE_CONTACT_LIST_PUBLISH: /* We can stop publishing presence to people, but we can't * start sending people our presence unless they ask for it. * * (We can accept people's requests to see our presence - but that's * always allowed, so there's no flag.) */ tp_group_mixin_change_flags (object, TP_CHANNEL_GROUP_FLAG_CAN_REMOVE, 0); break; case EXAMPLE_CONTACT_LIST_STORED: case EXAMPLE_CONTACT_LIST_DENY: /* We can add people to our roster (not that that's very useful without * also adding them to subscribe), and we can remove them altogether * (which implicitly removes them from subscribe, publish, and all * user-defined groups). * * Similarly, we can block and unblock people (i.e. add/remove them * to/from the deny list) */ tp_group_mixin_change_flags (object, TP_CHANNEL_GROUP_FLAG_CAN_ADD | TP_CHANNEL_GROUP_FLAG_CAN_REMOVE, 0); break; case EXAMPLE_CONTACT_LIST_SUBSCRIBE: /* We can ask people to show us their presence, attaching a message. * We can also cancel (rescind) requests that they haven't replied to, * and stop receiving their presence after they allow it. */ tp_group_mixin_change_flags (object, TP_CHANNEL_GROUP_FLAG_CAN_ADD | TP_CHANNEL_GROUP_FLAG_MESSAGE_ADD | TP_CHANNEL_GROUP_FLAG_CAN_REMOVE | TP_CHANNEL_GROUP_FLAG_CAN_RESCIND, 0); break; default: g_assert_not_reached (); } } static void group_constructed (GObject *object) { ExampleContactGroup *self = EXAMPLE_CONTACT_GROUP (object); void (*chain_up) (GObject *) = ((GObjectClass *) example_contact_group_parent_class)->constructed; if (chain_up != NULL) chain_up (object); g_assert (self->parent.priv->handle_type == TP_HANDLE_TYPE_GROUP); /* We can add people to user-defined groups, and also remove them. */ tp_group_mixin_change_flags (object, TP_CHANNEL_GROUP_FLAG_CAN_ADD | TP_CHANNEL_GROUP_FLAG_CAN_REMOVE, 0); } static void get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { ExampleContactListBase *self = EXAMPLE_CONTACT_LIST_BASE (object); switch (property_id) { case PROP_OBJECT_PATH: g_value_set_string (value, self->priv->object_path); break; case PROP_CHANNEL_TYPE: g_value_set_static_string (value, TP_IFACE_CHANNEL_TYPE_CONTACT_LIST); break; case PROP_HANDLE_TYPE: g_value_set_uint (value, self->priv->handle_type); break; case PROP_HANDLE: g_value_set_uint (value, self->priv->handle); break; case PROP_TARGET_ID: { TpHandleRepoIface *handle_repo = tp_base_connection_get_handles ( self->priv->conn, self->priv->handle_type); g_value_set_string (value, tp_handle_inspect (handle_repo, self->priv->handle)); } break; case PROP_REQUESTED: g_value_set_boolean (value, FALSE); break; case PROP_INITIATOR_HANDLE: g_value_set_uint (value, 0); break; case PROP_INITIATOR_ID: g_value_set_static_string (value, ""); break; case PROP_CONNECTION: g_value_set_object (value, self->priv->conn); break; case PROP_MANAGER: g_value_set_object (value, self->priv->manager); break; case PROP_INTERFACES: g_value_set_boxed (value, contact_list_interfaces); break; case PROP_CHANNEL_DESTROYED: g_value_set_boolean (value, self->priv->closed); break; case PROP_CHANNEL_PROPERTIES: g_value_take_boxed (value, tp_dbus_properties_mixin_make_properties_hash (object, TP_IFACE_CHANNEL, "ChannelType", TP_IFACE_CHANNEL, "TargetHandleType", TP_IFACE_CHANNEL, "TargetHandle", TP_IFACE_CHANNEL, "TargetID", TP_IFACE_CHANNEL, "InitiatorHandle", TP_IFACE_CHANNEL, "InitiatorID", TP_IFACE_CHANNEL, "Requested", TP_IFACE_CHANNEL, "Interfaces", NULL)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { ExampleContactListBase *self = EXAMPLE_CONTACT_LIST_BASE (object); switch (property_id) { case PROP_OBJECT_PATH: g_free (self->priv->object_path); self->priv->object_path = g_value_dup_string (value); break; case PROP_HANDLE: /* we don't ref it here because we don't necessarily have access to the * repository (or even type) yet - instead we ref it in the constructor. */ self->priv->handle = g_value_get_uint (value); break; case PROP_HANDLE_TYPE: self->priv->handle_type = g_value_get_uint (value); break; case PROP_CHANNEL_TYPE: /* this property is writable in the interface, but not actually * meaningfully changable on this channel, so we do nothing */ break; case PROP_CONNECTION: self->priv->conn = g_value_get_object (value); break; case PROP_MANAGER: self->priv->manager = g_value_get_object (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void dispose (GObject *object) { ExampleContactListBase *self = EXAMPLE_CONTACT_LIST_BASE (object); if (self->priv->disposed) return; self->priv->disposed = TRUE; if (!self->priv->closed) { self->priv->closed = TRUE; tp_svc_channel_emit_closed (self); } ((GObjectClass *) example_contact_list_base_parent_class)->dispose (object); } static void finalize (GObject *object) { ExampleContactListBase *self = EXAMPLE_CONTACT_LIST_BASE (object); g_free (self->priv->object_path); tp_group_mixin_finalize (object); ((GObjectClass *) example_contact_list_base_parent_class)->finalize (object); } static gboolean group_add_member (GObject *object, TpHandle handle, const gchar *message, GError **error) { ExampleContactListBase *self = EXAMPLE_CONTACT_LIST_BASE (object); return example_contact_list_manager_add_to_group (self->priv->manager, object, self->priv->handle, handle, message, error); } static gboolean group_remove_member (GObject *object, TpHandle handle, const gchar *message, GError **error) { ExampleContactListBase *self = EXAMPLE_CONTACT_LIST_BASE (object); return example_contact_list_manager_remove_from_group (self->priv->manager, object, self->priv->handle, handle, message, error); } static gboolean list_add_member (GObject *object, TpHandle handle, const gchar *message, GError **error) { ExampleContactListBase *self = EXAMPLE_CONTACT_LIST_BASE (object); return example_contact_list_manager_add_to_list (self->priv->manager, object, self->priv->handle, handle, message, error); } static gboolean list_remove_member (GObject *object, TpHandle handle, const gchar *message, GError **error) { ExampleContactListBase *self = EXAMPLE_CONTACT_LIST_BASE (object); return example_contact_list_manager_remove_from_list (self->priv->manager, object, self->priv->handle, handle, message, error); } static void example_contact_list_base_class_init (ExampleContactListBaseClass *klass) { static TpDBusPropertiesMixinPropImpl channel_props[] = { { "TargetHandleType", "handle-type", NULL }, { "TargetHandle", "handle", NULL }, { "ChannelType", "channel-type", NULL }, { "Interfaces", "interfaces", NULL }, { "TargetID", "target-id", NULL }, { "Requested", "requested", NULL }, { "InitiatorHandle", "initiator-handle", NULL }, { "InitiatorID", "initiator-id", NULL }, { NULL } }; static TpDBusPropertiesMixinIfaceImpl prop_interfaces[] = { { TP_IFACE_CHANNEL, tp_dbus_properties_mixin_getter_gobject_properties, NULL, channel_props, }, { NULL } }; GObjectClass *object_class = (GObjectClass *) klass; GParamSpec *param_spec; g_type_class_add_private (klass, sizeof (ExampleContactListBasePrivate)); object_class->constructed = constructed; object_class->set_property = set_property; object_class->get_property = get_property; object_class->dispose = dispose; object_class->finalize = finalize; g_object_class_override_property (object_class, PROP_OBJECT_PATH, "object-path"); g_object_class_override_property (object_class, PROP_CHANNEL_TYPE, "channel-type"); g_object_class_override_property (object_class, PROP_HANDLE_TYPE, "handle-type"); g_object_class_override_property (object_class, PROP_HANDLE, "handle"); g_object_class_override_property (object_class, PROP_CHANNEL_DESTROYED, "channel-destroyed"); g_object_class_override_property (object_class, PROP_CHANNEL_PROPERTIES, "channel-properties"); param_spec = g_param_spec_object ("connection", "TpBaseConnection object", "Connection object that owns this channel", TP_TYPE_BASE_CONNECTION, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_CONNECTION, param_spec); param_spec = g_param_spec_object ("manager", "ExampleContactListManager", "ExampleContactListManager object that owns this channel", EXAMPLE_TYPE_CONTACT_LIST_MANAGER, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_MANAGER, param_spec); param_spec = g_param_spec_boxed ("interfaces", "Extra D-Bus interfaces", "Additional Channel.Interface.* interfaces", G_TYPE_STRV, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_INTERFACES, param_spec); param_spec = g_param_spec_string ("target-id", "Chatroom's ID", "The string obtained by inspecting the MUC's handle", NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_TARGET_ID, param_spec); param_spec = g_param_spec_uint ("initiator-handle", "Initiator's handle", "The contact who initiated the channel", 0, G_MAXUINT32, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_INITIATOR_HANDLE, param_spec); param_spec = g_param_spec_string ("initiator-id", "Initiator's ID", "The string obtained by inspecting the initiator-handle", NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_INITIATOR_ID, param_spec); param_spec = g_param_spec_boolean ("requested", "Requested?", "True if this channel was requested by the local user", FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_REQUESTED, param_spec); klass->dbus_properties_class.interfaces = prop_interfaces; tp_dbus_properties_mixin_class_init (object_class, G_STRUCT_OFFSET (ExampleContactListBaseClass, dbus_properties_class)); /* Group mixin is initialized separately for each subclass - they have * different callbacks */ } static void example_contact_list_class_init (ExampleContactListClass *klass) { GObjectClass *object_class = (GObjectClass *) klass; g_type_class_add_private (klass, sizeof (ExampleContactListPrivate)); object_class->constructed = list_constructed; tp_group_mixin_class_init (object_class, G_STRUCT_OFFSET (ExampleContactListBaseClass, group_class), list_add_member, list_remove_member); tp_group_mixin_init_dbus_properties (object_class); } static void example_contact_group_class_init (ExampleContactGroupClass *klass) { GObjectClass *object_class = (GObjectClass *) klass; g_type_class_add_private (klass, sizeof (ExampleContactGroupPrivate)); object_class->constructed = group_constructed; tp_group_mixin_class_init (object_class, G_STRUCT_OFFSET (ExampleContactListBaseClass, group_class), group_add_member, group_remove_member); tp_group_mixin_init_dbus_properties (object_class); } static void list_channel_close (TpSvcChannel *iface G_GNUC_UNUSED, DBusGMethodInvocation *context) { GError e = { TP_ERROR, TP_ERROR_NOT_IMPLEMENTED, "ContactList channels with handle type LIST may not be closed" }; dbus_g_method_return_error (context, &e); } static void group_channel_close (TpSvcChannel *iface, DBusGMethodInvocation *context) { ExampleContactGroup *self = EXAMPLE_CONTACT_GROUP (iface); ExampleContactListBase *base = EXAMPLE_CONTACT_LIST_BASE (iface); if (tp_handle_set_size (base->group.members) > 0) { GError e = { TP_ERROR, TP_ERROR_NOT_AVAILABLE, "Non-empty groups may not be deleted (closed)" }; dbus_g_method_return_error (context, &e); return; } if (!base->priv->closed) { /* If this was a real connection manager we'd delete the group here, * if such a concept existed in the protocol (in XMPP, it doesn't). * * Afterwards, close the channel: */ base->priv->closed = TRUE; tp_svc_channel_emit_closed (self); } tp_svc_channel_return_from_close (context); } static void channel_get_channel_type (TpSvcChannel *iface G_GNUC_UNUSED, DBusGMethodInvocation *context) { tp_svc_channel_return_from_get_channel_type (context, TP_IFACE_CHANNEL_TYPE_CONTACT_LIST); } static void channel_get_handle (TpSvcChannel *iface, DBusGMethodInvocation *context) { ExampleContactListBase *self = EXAMPLE_CONTACT_LIST_BASE (iface); tp_svc_channel_return_from_get_handle (context, self->priv->handle_type, self->priv->handle); } static void channel_get_interfaces (TpSvcChannel *iface G_GNUC_UNUSED, DBusGMethodInvocation *context) { tp_svc_channel_return_from_get_interfaces (context, contact_list_interfaces); } static void channel_iface_init (gpointer iface, gpointer data) { TpSvcChannelClass *klass = iface; #define IMPLEMENT(x) tp_svc_channel_implement_##x (klass, channel_##x) /* close is implemented in subclasses, so don't IMPLEMENT (close); */ IMPLEMENT (get_channel_type); IMPLEMENT (get_handle); IMPLEMENT (get_interfaces); #undef IMPLEMENT } static void list_channel_iface_init (gpointer iface, gpointer data G_GNUC_UNUSED) { TpSvcChannelClass *klass = iface; #define IMPLEMENT(x) tp_svc_channel_implement_##x (klass, list_channel_##x) IMPLEMENT (close); #undef IMPLEMENT } static void group_channel_iface_init (gpointer iface, gpointer data G_GNUC_UNUSED) { TpSvcChannelClass *klass = iface; #define IMPLEMENT(x) tp_svc_channel_implement_##x (klass, group_channel_##x) IMPLEMENT (close); #undef IMPLEMENT } telepathy-qt-0.9.3/tests/lib/glib/contactlist/conn.h0000644000175200001440000000450012000056607024675 0ustar00collabora-develusers00000000000000/* * conn.h - header for an example connection * * Copyright © 2007-2009 Collabora Ltd. * Copyright © 2007-2009 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef __EXAMPLE_CONTACT_LIST_CONN_H__ #define __EXAMPLE_CONTACT_LIST_CONN_H__ #include #include #include #include G_BEGIN_DECLS typedef struct _ExampleContactListConnection ExampleContactListConnection; typedef struct _ExampleContactListConnectionClass ExampleContactListConnectionClass; typedef struct _ExampleContactListConnectionPrivate ExampleContactListConnectionPrivate; struct _ExampleContactListConnectionClass { TpBaseConnectionClass parent_class; TpPresenceMixinClass presence_mixin; TpContactsMixinClass contacts_mixin; }; struct _ExampleContactListConnection { TpBaseConnection parent; TpPresenceMixin presence_mixin; TpContactsMixin contacts_mixin; ExampleContactListConnectionPrivate *priv; }; GType example_contact_list_connection_get_type (void); #define EXAMPLE_TYPE_CONTACT_LIST_CONNECTION \ (example_contact_list_connection_get_type ()) #define EXAMPLE_CONTACT_LIST_CONNECTION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), EXAMPLE_TYPE_CONTACT_LIST_CONNECTION, \ ExampleContactListConnection)) #define EXAMPLE_CONTACT_LIST_CONNECTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), EXAMPLE_TYPE_CONTACT_LIST_CONNECTION, \ ExampleContactListConnectionClass)) #define EXAMPLE_IS_CONTACT_LIST_CONNECTION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), EXAMPLE_TYPE_CONTACT_LIST_CONNECTION)) #define EXAMPLE_IS_CONTACT_LIST_CONNECTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), EXAMPLE_TYPE_CONTACT_LIST_CONNECTION)) #define EXAMPLE_CONTACT_LIST_CONNECTION_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), EXAMPLE_TYPE_CONTACT_LIST_CONNECTION, \ ExampleContactListConnectionClass)) gchar *example_contact_list_normalize_contact (TpHandleRepoIface *repo, const gchar *id, gpointer context, GError **error); G_END_DECLS #endif telepathy-qt-0.9.3/tests/lib/glib/contactlist/contact-list-manager.c0000644000175200001440000015276512000056607027770 0ustar00collabora-develusers00000000000000/* * Example channel manager for contact lists * * Copyright © 2007-2009 Collabora Ltd. * Copyright © 2007-2009 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #include "contact-list-manager.h" #include #include #include #include "contact-list.h" /* elements 0, 1... of this array must be kept in sync with elements 1, 2... * of the enum ExampleContactList in contact-list-manager.h */ static const gchar *_contact_lists[NUM_EXAMPLE_CONTACT_LISTS + 1] = { "subscribe", "publish", "stored", "deny", NULL }; const gchar ** example_contact_lists (void) { return _contact_lists; } /* this array must be kept in sync with the enum * ExampleContactListPresence in contact-list-manager.h */ static const TpPresenceStatusSpec _statuses[] = { { "offline", TP_CONNECTION_PRESENCE_TYPE_OFFLINE, FALSE, NULL }, { "unknown", TP_CONNECTION_PRESENCE_TYPE_UNKNOWN, FALSE, NULL }, { "error", TP_CONNECTION_PRESENCE_TYPE_ERROR, FALSE, NULL }, { "away", TP_CONNECTION_PRESENCE_TYPE_AWAY, TRUE, NULL }, { "available", TP_CONNECTION_PRESENCE_TYPE_AVAILABLE, TRUE, NULL }, { NULL } }; const TpPresenceStatusSpec * example_contact_list_presence_statuses (void) { return _statuses; } typedef struct { gchar *alias; guint subscribe:1; guint publish:1; guint subscribe_requested:1; guint publish_requested:1; guint stored:1; guint blocked:1; TpHandleSet *tags; } ExampleContactDetails; static ExampleContactDetails * example_contact_details_new (void) { return g_slice_new0 (ExampleContactDetails); } static void example_contact_details_destroy (gpointer p) { ExampleContactDetails *d = p; if (d->tags != NULL) tp_handle_set_destroy (d->tags); g_free (d->alias); g_slice_free (ExampleContactDetails, d); } static void channel_manager_iface_init (gpointer, gpointer); G_DEFINE_TYPE_WITH_CODE (ExampleContactListManager, example_contact_list_manager, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (TP_TYPE_CHANNEL_MANAGER, channel_manager_iface_init)) enum { ALIAS_UPDATED, PRESENCE_UPDATED, N_SIGNALS }; static guint signals[N_SIGNALS] = { 0 }; enum { PROP_CONNECTION = 1, PROP_SIMULATION_DELAY, N_PROPS }; struct _ExampleContactListManagerPrivate { TpBaseConnection *conn; guint simulation_delay; TpHandleRepoIface *contact_repo; TpHandleRepoIface *group_repo; TpHandleSet *contacts; /* GUINT_TO_POINTER (handle borrowed from contacts) * => ExampleContactDetails */ GHashTable *contact_details; ExampleContactList *lists[NUM_EXAMPLE_CONTACT_LISTS]; /* GUINT_TO_POINTER (handle borrowed from channel) => ExampleContactGroup */ GHashTable *groups; /* borrowed TpExportableChannel => GSList of gpointer (request tokens) that * will be satisfied by that channel when the contact list has been * downloaded. The requests are in reverse chronological order */ GHashTable *queued_requests; gulong status_changed_id; }; static void example_contact_list_manager_init (ExampleContactListManager *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, EXAMPLE_TYPE_CONTACT_LIST_MANAGER, ExampleContactListManagerPrivate); self->priv->contact_details = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, example_contact_details_destroy); self->priv->groups = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_object_unref); self->priv->queued_requests = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, NULL); /* initialized properly in constructed() */ self->priv->contact_repo = NULL; self->priv->group_repo = NULL; self->priv->contacts = NULL; } static void example_contact_list_manager_close_all (ExampleContactListManager *self) { guint i; if (self->priv->queued_requests != NULL) { GHashTable *tmp = self->priv->queued_requests; GHashTableIter iter; gpointer key, value; self->priv->queued_requests = NULL; g_hash_table_iter_init (&iter, tmp); while (g_hash_table_iter_next (&iter, &key, &value)) { GSList *requests = value; GSList *l; requests = g_slist_reverse (requests); for (l = requests; l != NULL; l = l->next) { tp_channel_manager_emit_request_failed (self, l->data, TP_ERROR, TP_ERROR_DISCONNECTED, "Unable to complete channel request due to disconnection"); } g_slist_free (requests); g_hash_table_iter_steal (&iter); } g_hash_table_destroy (tmp); } if (self->priv->contacts != NULL) { tp_handle_set_destroy (self->priv->contacts); self->priv->contacts = NULL; } if (self->priv->contact_details != NULL) { GHashTable *tmp = self->priv->contact_details; self->priv->contact_details = NULL; g_hash_table_destroy (tmp); } if (self->priv->groups != NULL) { GHashTable *tmp = self->priv->groups; self->priv->groups = NULL; g_hash_table_destroy (tmp); } for (i = 0; i < NUM_EXAMPLE_CONTACT_LISTS; i++) { if (self->priv->lists[i] != NULL) { ExampleContactList *list = self->priv->lists[i]; /* set self->priv->lists[i] to NULL here so list_closed_cb does * not try to delete the list again */ self->priv->lists[i] = NULL; g_object_unref (list); } } if (self->priv->status_changed_id != 0) { g_signal_handler_disconnect (self->priv->conn, self->priv->status_changed_id); self->priv->status_changed_id = 0; } } static void dispose (GObject *object) { ExampleContactListManager *self = EXAMPLE_CONTACT_LIST_MANAGER (object); example_contact_list_manager_close_all (self); g_assert (self->priv->groups == NULL); g_assert (self->priv->lists[0] == NULL); g_assert (self->priv->queued_requests == NULL); ((GObjectClass *) example_contact_list_manager_parent_class)->dispose ( object); } static void get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { ExampleContactListManager *self = EXAMPLE_CONTACT_LIST_MANAGER (object); switch (property_id) { case PROP_CONNECTION: g_value_set_object (value, self->priv->conn); break; case PROP_SIMULATION_DELAY: g_value_set_uint (value, self->priv->simulation_delay); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } } static void set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { ExampleContactListManager *self = EXAMPLE_CONTACT_LIST_MANAGER (object); switch (property_id) { case PROP_CONNECTION: /* We don't ref the connection, because it owns a reference to the * manager, and it guarantees that the manager's lifetime is * less than its lifetime */ self->priv->conn = g_value_get_object (value); break; case PROP_SIMULATION_DELAY: self->priv->simulation_delay = g_value_get_uint (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } } static void satisfy_queued_requests (TpExportableChannel *channel, gpointer user_data) { ExampleContactListManager *self = EXAMPLE_CONTACT_LIST_MANAGER (user_data); GSList *requests = g_hash_table_lookup (self->priv->queued_requests, channel); /* this is all fine even if requests is NULL */ g_hash_table_steal (self->priv->queued_requests, channel); requests = g_slist_reverse (requests); tp_channel_manager_emit_new_channel (self, channel, requests); g_slist_free (requests); } static ExampleContactDetails * lookup_contact (ExampleContactListManager *self, TpHandle contact) { return g_hash_table_lookup (self->priv->contact_details, GUINT_TO_POINTER (contact)); } static ExampleContactDetails * ensure_contact (ExampleContactListManager *self, TpHandle contact, gboolean *created) { ExampleContactDetails *ret = lookup_contact (self, contact); if (ret == NULL) { tp_handle_set_add (self->priv->contacts, contact); ret = example_contact_details_new (); ret->alias = g_strdup (tp_handle_inspect (self->priv->contact_repo, contact)); g_hash_table_insert (self->priv->contact_details, GUINT_TO_POINTER (contact), ret); if (created != NULL) *created = TRUE; } else if (created != NULL) { *created = FALSE; } return ret; } static void example_contact_list_manager_foreach_channel (TpChannelManager *manager, TpExportableChannelFunc callback, gpointer user_data) { ExampleContactListManager *self = EXAMPLE_CONTACT_LIST_MANAGER (manager); GHashTableIter iter; gpointer handle, channel; guint i; for (i = 0; i < NUM_EXAMPLE_CONTACT_LISTS; i++) { if (self->priv->lists[i] != NULL) callback (TP_EXPORTABLE_CHANNEL (self->priv->lists[i]), user_data); } g_hash_table_iter_init (&iter, self->priv->groups); while (g_hash_table_iter_next (&iter, &handle, &channel)) { callback (TP_EXPORTABLE_CHANNEL (channel), user_data); } } static ExampleContactGroup *ensure_group (ExampleContactListManager *self, TpHandle handle); static ExampleContactList *ensure_list (ExampleContactListManager *self, ExampleContactListHandle handle); static gboolean receive_contact_lists (gpointer p) { ExampleContactListManager *self = p; TpHandle handle, cambridge, montreal, francophones; ExampleContactDetails *d; TpIntSet *set, *cam_set, *mtl_set, *fr_set; TpIntSetFastIter iter; ExampleContactList *subscribe, *publish, *stored, *deny; ExampleContactGroup *cambridge_group, *montreal_group, *francophones_group; if (self->priv->groups == NULL) { /* connection already disconnected, so don't process the * "data from the server" */ return FALSE; } /* In a real CM we'd have received a contact list from the server at this * point. But this isn't a real CM, so we have to make one up... */ g_message ("Receiving roster from server"); subscribe = ensure_list (self, EXAMPLE_CONTACT_LIST_SUBSCRIBE); publish = ensure_list (self, EXAMPLE_CONTACT_LIST_PUBLISH); stored = ensure_list (self, EXAMPLE_CONTACT_LIST_STORED); deny = ensure_list (self, EXAMPLE_CONTACT_LIST_DENY); cambridge = tp_handle_ensure (self->priv->group_repo, "Cambridge", NULL, NULL); montreal = tp_handle_ensure (self->priv->group_repo, "Montreal", NULL, NULL); francophones = tp_handle_ensure (self->priv->group_repo, "Francophones", NULL, NULL); cambridge_group = ensure_group (self, cambridge); montreal_group = ensure_group (self, montreal); francophones_group = ensure_group (self, francophones); /* Add various people who are already subscribing and publishing */ set = tp_intset_new (); cam_set = tp_intset_new (); mtl_set = tp_intset_new (); fr_set = tp_intset_new (); handle = tp_handle_ensure (self->priv->contact_repo, "sjoerd@example.com", NULL, NULL); tp_intset_add (set, handle); tp_intset_add (cam_set, handle); d = ensure_contact (self, handle, NULL); g_free (d->alias); d->alias = g_strdup ("Sjoerd"); d->subscribe = TRUE; d->publish = TRUE; d->stored = TRUE; d->tags = tp_handle_set_new (self->priv->group_repo); tp_handle_set_add (d->tags, cambridge); handle = tp_handle_ensure (self->priv->contact_repo, "guillaume@example.com", NULL, NULL); tp_intset_add (set, handle); tp_intset_add (cam_set, handle); tp_intset_add (fr_set, handle); d = ensure_contact (self, handle, NULL); g_free (d->alias); d->alias = g_strdup ("Guillaume"); d->subscribe = TRUE; d->publish = TRUE; d->stored = TRUE; d->tags = tp_handle_set_new (self->priv->group_repo); tp_handle_set_add (d->tags, cambridge); tp_handle_set_add (d->tags, francophones); handle = tp_handle_ensure (self->priv->contact_repo, "olivier@example.com", NULL, NULL); tp_intset_add (set, handle); tp_intset_add (mtl_set, handle); tp_intset_add (fr_set, handle); d = ensure_contact (self, handle, NULL); g_free (d->alias); d->alias = g_strdup ("Olivier"); d->subscribe = TRUE; d->publish = TRUE; d->stored = TRUE; d->tags = tp_handle_set_new (self->priv->group_repo); tp_handle_set_add (d->tags, montreal); tp_handle_set_add (d->tags, francophones); handle = tp_handle_ensure (self->priv->contact_repo, "travis@example.com", NULL, NULL); tp_intset_add (set, handle); d = ensure_contact (self, handle, NULL); g_free (d->alias); d->alias = g_strdup ("Travis"); d->subscribe = TRUE; d->publish = TRUE; d->stored = TRUE; tp_group_mixin_change_members ((GObject *) subscribe, "", set, NULL, NULL, NULL, 0, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_group_mixin_change_members ((GObject *) publish, "", set, NULL, NULL, NULL, 0, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_group_mixin_change_members ((GObject *) stored, "", set, NULL, NULL, NULL, 0, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_intset_fast_iter_init (&iter, set); while (tp_intset_fast_iter_next (&iter, &handle)) { g_signal_emit (self, signals[ALIAS_UPDATED], 0, handle); g_signal_emit (self, signals[PRESENCE_UPDATED], 0, handle); } tp_intset_destroy (set); /* Add a couple of people whose presence we've requested. They are * remote-pending in subscribe */ set = tp_intset_new (); handle = tp_handle_ensure (self->priv->contact_repo, "geraldine@example.com", NULL, NULL); tp_intset_add (set, handle); tp_intset_add (cam_set, handle); tp_intset_add (fr_set, handle); d = ensure_contact (self, handle, NULL); g_free (d->alias); d->alias = g_strdup ("Géraldine"); d->subscribe_requested = TRUE; d->stored = TRUE; d->tags = tp_handle_set_new (self->priv->group_repo); tp_handle_set_add (d->tags, cambridge); tp_handle_set_add (d->tags, francophones); handle = tp_handle_ensure (self->priv->contact_repo, "helen@example.com", NULL, NULL); tp_intset_add (set, handle); tp_intset_add (cam_set, handle); d = ensure_contact (self, handle, NULL); g_free (d->alias); d->alias = g_strdup ("Helen"); d->subscribe_requested = TRUE; d->stored = TRUE; d->tags = tp_handle_set_new (self->priv->group_repo); tp_handle_set_add (d->tags, cambridge); tp_group_mixin_change_members ((GObject *) subscribe, "", NULL, NULL, NULL, set, 0, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_group_mixin_change_members ((GObject *) stored, "", set, NULL, NULL, NULL, 0, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_intset_fast_iter_init (&iter, set); while (tp_intset_fast_iter_next (&iter, &handle)) { g_signal_emit (self, signals[ALIAS_UPDATED], 0, handle); g_signal_emit (self, signals[PRESENCE_UPDATED], 0, handle); } tp_intset_destroy (set); /* Receive a couple of authorization requests too. These people are * local-pending in publish */ handle = tp_handle_ensure (self->priv->contact_repo, "wim@example.com", NULL, NULL); d = ensure_contact (self, handle, NULL); g_free (d->alias); d->alias = g_strdup ("Wim"); d->publish_requested = TRUE; d->stored = TRUE; set = tp_intset_new_containing (handle); tp_group_mixin_change_members ((GObject *) publish, "I'm more metal than you!", NULL, NULL, set, NULL, handle, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_group_mixin_change_members ((GObject *) stored, "", set, NULL, NULL, NULL, handle, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_intset_destroy (set); g_signal_emit (self, signals[ALIAS_UPDATED], 0, handle); g_signal_emit (self, signals[PRESENCE_UPDATED], 0, handle); handle = tp_handle_ensure (self->priv->contact_repo, "christian@example.com", NULL, NULL); d = ensure_contact (self, handle, NULL); g_free (d->alias); d->alias = g_strdup ("Christian"); d->publish_requested = TRUE; d->stored = TRUE; set = tp_intset_new_containing (handle); tp_group_mixin_change_members ((GObject *) publish, "I have some fermented herring for you", NULL, NULL, set, NULL, handle, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_group_mixin_change_members ((GObject *) stored, "", set, NULL, NULL, NULL, handle, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_intset_destroy (set); g_signal_emit (self, signals[ALIAS_UPDATED], 0, handle); g_signal_emit (self, signals[PRESENCE_UPDATED], 0, handle); /* Add a couple of people who are blocked */ set = tp_intset_new (); handle = tp_handle_ensure (self->priv->contact_repo, "bill@example.com", NULL, NULL); tp_intset_add (set, handle); d = ensure_contact (self, handle, NULL); g_free (d->alias); d->alias = g_strdup ("Bill"); d->blocked = TRUE; handle = tp_handle_ensure (self->priv->contact_repo, "steve@example.com", NULL, NULL); tp_intset_add (set, handle); d = ensure_contact (self, handle, NULL); g_free (d->alias); d->alias = g_strdup ("Steve"); d->blocked = TRUE; tp_group_mixin_change_members ((GObject *) deny, "", set, NULL, NULL, NULL, 0, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_intset_fast_iter_init (&iter, set); while (tp_intset_fast_iter_next (&iter, &handle)) { g_signal_emit (self, signals[ALIAS_UPDATED], 0, handle); g_signal_emit (self, signals[PRESENCE_UPDATED], 0, handle); } tp_intset_destroy (set); /* Handle groups */ tp_group_mixin_change_members ((GObject *) cambridge_group, "", cam_set, NULL, NULL, NULL, 0, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_group_mixin_change_members ((GObject *) montreal_group, "", mtl_set, NULL, NULL, NULL, 0, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_group_mixin_change_members ((GObject *) francophones_group, "", fr_set, NULL, NULL, NULL, 0, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_intset_destroy (fr_set); tp_intset_destroy (cam_set); tp_intset_destroy (mtl_set); /* Now we've received the roster, we can satisfy all the queued requests */ example_contact_list_manager_foreach_channel ((TpChannelManager *) self, satisfy_queued_requests, self); g_assert (g_hash_table_size (self->priv->queued_requests) == 0); g_hash_table_destroy (self->priv->queued_requests); self->priv->queued_requests = NULL; return FALSE; } static void status_changed_cb (TpBaseConnection *conn, guint status, guint reason, ExampleContactListManager *self) { switch (status) { case TP_CONNECTION_STATUS_CONNECTED: { /* Do network I/O to get the contact list. This connection manager * doesn't really have a server, so simulate a small network delay * then invent a contact list */ g_timeout_add_full (G_PRIORITY_DEFAULT, 2 * self->priv->simulation_delay, receive_contact_lists, g_object_ref (self), g_object_unref); } break; case TP_CONNECTION_STATUS_DISCONNECTED: { example_contact_list_manager_close_all (self); } break; } } static void constructed (GObject *object) { ExampleContactListManager *self = EXAMPLE_CONTACT_LIST_MANAGER (object); void (*chain_up) (GObject *) = ((GObjectClass *) example_contact_list_manager_parent_class)->constructed; if (chain_up != NULL) { chain_up (object); } self->priv->contact_repo = tp_base_connection_get_handles (self->priv->conn, TP_HANDLE_TYPE_CONTACT); self->priv->group_repo = tp_base_connection_get_handles (self->priv->conn, TP_HANDLE_TYPE_GROUP); self->priv->contacts = tp_handle_set_new (self->priv->contact_repo); self->priv->status_changed_id = g_signal_connect (self->priv->conn, "status-changed", (GCallback) status_changed_cb, self); } static void example_contact_list_manager_class_init (ExampleContactListManagerClass *klass) { GParamSpec *param_spec; GObjectClass *object_class = (GObjectClass *) klass; object_class->constructed = constructed; object_class->dispose = dispose; object_class->get_property = get_property; object_class->set_property = set_property; param_spec = g_param_spec_object ("connection", "Connection object", "The connection that owns this channel manager", TP_TYPE_BASE_CONNECTION, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB); g_object_class_install_property (object_class, PROP_CONNECTION, param_spec); param_spec = g_param_spec_uint ("simulation-delay", "Simulation delay", "Delay between simulated network events", 0, G_MAXUINT32, 1000, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_SIMULATION_DELAY, param_spec); g_type_class_add_private (klass, sizeof (ExampleContactListManagerPrivate)); signals[ALIAS_UPDATED] = g_signal_new ("alias-updated", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__UINT, G_TYPE_NONE, 1, G_TYPE_UINT); signals[PRESENCE_UPDATED] = g_signal_new ("presence-updated", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__UINT, G_TYPE_NONE, 1, G_TYPE_UINT); } static void list_closed_cb (ExampleContactList *chan, ExampleContactListManager *self) { TpHandle handle; tp_channel_manager_emit_channel_closed_for_object (self, TP_EXPORTABLE_CHANNEL (chan)); g_object_get (chan, "handle", &handle, NULL); if (self->priv->lists[handle] == NULL) return; g_assert (chan == self->priv->lists[handle]); g_object_unref (self->priv->lists[handle]); self->priv->lists[handle] = NULL; } static void group_closed_cb (ExampleContactGroup *chan, ExampleContactListManager *self) { tp_channel_manager_emit_channel_closed_for_object (self, TP_EXPORTABLE_CHANNEL (chan)); if (self->priv->groups != NULL) { TpHandle handle; g_object_get (chan, "handle", &handle, NULL); g_hash_table_remove (self->priv->groups, GUINT_TO_POINTER (handle)); } } static ExampleContactListBase * new_channel (ExampleContactListManager *self, TpHandleType handle_type, TpHandle handle, gpointer request_token) { ExampleContactListBase *chan; gchar *object_path; GType type; GSList *requests = NULL; if (handle_type == TP_HANDLE_TYPE_LIST) { /* Some Telepathy clients wrongly assume that contact lists of type LIST * have object paths ending with "/subscribe", "/publish" etc. - * telepathy-spec has no such guarantee, so in this example we break * those clients. Please read the spec when implementing it :-) */ object_path = g_strdup_printf ("%s/%sContactList", self->priv->conn->object_path, _contact_lists[handle - 1]); type = EXAMPLE_TYPE_CONTACT_LIST; } else { /* Using Group%u (with handle as the value of %u) would be OK here too, * but we'll encode the group name into the object path to be kind * to people reading debug logs. */ gchar *id = tp_escape_as_identifier (tp_handle_inspect ( self->priv->group_repo, handle)); g_assert (handle_type == TP_HANDLE_TYPE_GROUP); object_path = g_strdup_printf ("%s/Group/%s", self->priv->conn->object_path, id); type = EXAMPLE_TYPE_CONTACT_GROUP; g_free (id); } chan = g_object_new (type, "connection", self->priv->conn, "manager", self, "object-path", object_path, "handle-type", handle_type, "handle", handle, NULL); g_free (object_path); if (handle_type == TP_HANDLE_TYPE_LIST) { g_signal_connect (chan, "closed", (GCallback) list_closed_cb, self); g_assert (self->priv->lists[handle] == NULL); self->priv->lists[handle] = EXAMPLE_CONTACT_LIST (chan); } else { g_signal_connect (chan, "closed", (GCallback) group_closed_cb, self); g_assert (g_hash_table_lookup (self->priv->groups, GUINT_TO_POINTER (handle)) == NULL); g_hash_table_insert (self->priv->groups, GUINT_TO_POINTER (handle), EXAMPLE_CONTACT_GROUP (chan)); } if (self->priv->queued_requests == NULL) { if (request_token != NULL) requests = g_slist_prepend (requests, request_token); tp_channel_manager_emit_new_channel (self, TP_EXPORTABLE_CHANNEL (chan), requests); g_slist_free (requests); } else if (request_token != NULL) { /* initial contact list not received yet, so we have to wait for it */ requests = g_hash_table_lookup (self->priv->queued_requests, chan); g_hash_table_steal (self->priv->queued_requests, chan); requests = g_slist_prepend (requests, request_token); g_hash_table_insert (self->priv->queued_requests, chan, requests); } return chan; } static ExampleContactList * ensure_list (ExampleContactListManager *self, ExampleContactListHandle handle) { if (self->priv->lists[handle] == NULL) { new_channel (self, TP_HANDLE_TYPE_LIST, handle, NULL); g_assert (self->priv->lists[handle] != NULL); } return self->priv->lists[handle]; } static ExampleContactGroup * ensure_group (ExampleContactListManager *self, TpHandle handle) { ExampleContactGroup *group = g_hash_table_lookup (self->priv->groups, GUINT_TO_POINTER (handle)); if (group == NULL) { group = EXAMPLE_CONTACT_GROUP (new_channel (self, TP_HANDLE_TYPE_GROUP, handle, NULL)); } return group; } static const gchar * const fixed_properties[] = { TP_PROP_CHANNEL_CHANNEL_TYPE, TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, NULL }; static const gchar * const allowed_properties[] = { TP_PROP_CHANNEL_TARGET_HANDLE, TP_PROP_CHANNEL_TARGET_ID, NULL }; static void example_contact_list_manager_foreach_channel_class (TpChannelManager *manager, TpChannelManagerChannelClassFunc func, gpointer user_data) { GHashTable *table = tp_asv_new ( TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING, TP_IFACE_CHANNEL_TYPE_CONTACT_LIST, TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, TP_HANDLE_TYPE_LIST, NULL); func (manager, table, allowed_properties, user_data); g_hash_table_insert (table, TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, tp_g_value_slice_new_uint (TP_HANDLE_TYPE_GROUP)); func (manager, table, allowed_properties, user_data); g_hash_table_destroy (table); } static gboolean example_contact_list_manager_request (ExampleContactListManager *self, gpointer request_token, GHashTable *request_properties, gboolean require_new) { TpHandleType handle_type; TpHandle handle; ExampleContactListBase *chan; GError *error = NULL; if (tp_strdiff (tp_asv_get_string (request_properties, TP_PROP_CHANNEL_CHANNEL_TYPE), TP_IFACE_CHANNEL_TYPE_CONTACT_LIST)) { return FALSE; } handle_type = tp_asv_get_uint32 (request_properties, TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, NULL); if (handle_type != TP_HANDLE_TYPE_LIST && handle_type != TP_HANDLE_TYPE_GROUP) { return FALSE; } handle = tp_asv_get_uint32 (request_properties, TP_PROP_CHANNEL_TARGET_HANDLE, NULL); g_assert (handle != 0); if (tp_channel_manager_asv_has_unknown_properties (request_properties, fixed_properties, allowed_properties, &error)) { goto error; } if (handle_type == TP_HANDLE_TYPE_LIST) { /* telepathy-glib has already checked that the handle is valid */ g_assert (handle < NUM_EXAMPLE_CONTACT_LISTS); chan = EXAMPLE_CONTACT_LIST_BASE (self->priv->lists[handle]); } else { chan = g_hash_table_lookup (self->priv->groups, GUINT_TO_POINTER (handle)); } if (chan == NULL) { new_channel (self, handle_type, handle, request_token); } else if (require_new) { g_set_error (&error, TP_ERROR, TP_ERROR_NOT_AVAILABLE, "A ContactList channel for type #%u, handle #%u already exists", handle_type, handle); goto error; } else { tp_channel_manager_emit_request_already_satisfied (self, request_token, TP_EXPORTABLE_CHANNEL (chan)); } return TRUE; error: tp_channel_manager_emit_request_failed (self, request_token, error->domain, error->code, error->message); g_error_free (error); return TRUE; } static gboolean example_contact_list_manager_create_channel (TpChannelManager *manager, gpointer request_token, GHashTable *request_properties) { return example_contact_list_manager_request ( EXAMPLE_CONTACT_LIST_MANAGER (manager), request_token, request_properties, TRUE); } static gboolean example_contact_list_manager_ensure_channel (TpChannelManager *manager, gpointer request_token, GHashTable *request_properties) { return example_contact_list_manager_request ( EXAMPLE_CONTACT_LIST_MANAGER (manager), request_token, request_properties, FALSE); } static void channel_manager_iface_init (gpointer g_iface, gpointer data G_GNUC_UNUSED) { TpChannelManagerIface *iface = g_iface; iface->foreach_channel = example_contact_list_manager_foreach_channel; iface->foreach_channel_class = example_contact_list_manager_foreach_channel_class; iface->create_channel = example_contact_list_manager_create_channel; iface->ensure_channel = example_contact_list_manager_ensure_channel; /* In this channel manager, Request has the same semantics as Ensure */ iface->request_channel = example_contact_list_manager_ensure_channel; } static void send_updated_roster (ExampleContactListManager *self, TpHandle contact) { ExampleContactDetails *d = g_hash_table_lookup (self->priv->contact_details, GUINT_TO_POINTER (contact)); const gchar *identifier = tp_handle_inspect (self->priv->contact_repo, contact); /* In a real connection manager, we'd transmit these new details to the * server, rather than just printing messages. */ if (d == NULL) { g_message ("Deleting contact %s from server", identifier); } else { g_message ("Transmitting new state of contact %s to server", identifier); g_message ("\talias = %s", d->alias); g_message ("\tcan see our presence = %s", d->publish ? "yes" : (d->publish_requested ? "no, but has requested it" : "no")); g_message ("\tsends us presence = %s", d->subscribe ? "yes" : (d->subscribe_requested ? "no, but we have requested it" : "no")); g_message ("\tstored = %s", d->stored ? "yes" : "no"); g_message ("\tblocked = %s", d->blocked ? "yes" : "no"); if (d->tags == NULL || tp_handle_set_size (d->tags) == 0) { g_message ("\tnot in any groups"); } else { TpIntSet *set = tp_handle_set_peek (d->tags); TpIntSetFastIter iter; TpHandle member; tp_intset_fast_iter_init (&iter, set); while (tp_intset_fast_iter_next (&iter, &member)) { g_message ("\tin group: %s", tp_handle_inspect (self->priv->group_repo, member)); } } } } gboolean example_contact_list_manager_add_to_group (ExampleContactListManager *self, GObject *channel, TpHandle group, TpHandle member, const gchar *message, GError **error) { gboolean updated; ExampleContactDetails *d = ensure_contact (self, member, &updated); ExampleContactList *stored = self->priv->lists[ EXAMPLE_CONTACT_LIST_STORED]; if (d->tags == NULL) d->tags = tp_handle_set_new (self->priv->group_repo); if (!tp_handle_set_is_member (d->tags, group)) { tp_handle_set_add (d->tags, group); updated = TRUE; } if (updated) { TpIntSet *added = tp_intset_new_containing (member); d->stored = TRUE; send_updated_roster (self, member); tp_group_mixin_change_members (channel, "", added, NULL, NULL, NULL, self->priv->conn->self_handle, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_group_mixin_change_members ((GObject *) stored, "", added, NULL, NULL, NULL, self->priv->conn->self_handle, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_intset_destroy (added); } return TRUE; } gboolean example_contact_list_manager_remove_from_group ( ExampleContactListManager *self, GObject *channel, TpHandle group, TpHandle member, const gchar *message, GError **error) { ExampleContactDetails *d = lookup_contact (self, member); /* If not on the roster or not in any groups, we have nothing to do */ if (d == NULL || d->tags == NULL) return TRUE; if (tp_handle_set_remove (d->tags, group)) { TpIntSet *removed = tp_intset_new_containing (member); send_updated_roster (self, member); tp_group_mixin_change_members (channel, "", NULL, removed, NULL, NULL, self->priv->conn->self_handle, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_intset_destroy (removed); } return TRUE; } typedef struct { ExampleContactListManager *self; TpHandle contact; } SelfAndContact; static SelfAndContact * self_and_contact_new (ExampleContactListManager *self, TpHandle contact) { SelfAndContact *ret = g_slice_new0 (SelfAndContact); ret->self = g_object_ref (self); ret->contact = contact; return ret; } static void self_and_contact_destroy (gpointer p) { SelfAndContact *s = p; g_object_unref (s->self); g_slice_free (SelfAndContact, s); } static void receive_auth_request (ExampleContactListManager *self, TpHandle contact) { ExampleContactDetails *d; TpIntSet *set; ExampleContactList *publish = self->priv->lists[ EXAMPLE_CONTACT_LIST_PUBLISH]; ExampleContactList *stored = self->priv->lists[ EXAMPLE_CONTACT_LIST_STORED]; /* if shutting down, do nothing */ if (publish == NULL) return; /* A remote contact has asked to see our presence. * * In a real connection manager this would be the result of incoming * data from the server. */ g_message ("From server: %s has sent us a publish request", tp_handle_inspect (self->priv->contact_repo, contact)); d = ensure_contact (self, contact, NULL); if (d->publish) return; d->publish_requested = TRUE; d->stored = TRUE; set = tp_intset_new_containing (contact); tp_group_mixin_change_members ((GObject *) publish, "May I see your presence, please?", NULL, NULL, set, NULL, contact, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_group_mixin_change_members ((GObject *) stored, "", set, NULL, NULL, NULL, contact, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_intset_destroy (set); } static gboolean receive_authorized (gpointer p) { SelfAndContact *s = p; ExampleContactDetails *d; TpIntSet *set; ExampleContactList *subscribe = s->self->priv->lists[ EXAMPLE_CONTACT_LIST_SUBSCRIBE]; ExampleContactList *stored = s->self->priv->lists[ EXAMPLE_CONTACT_LIST_STORED]; /* A remote contact has accepted our request to see their presence. * * In a real connection manager this would be the result of incoming * data from the server. */ g_message ("From server: %s has accepted our subscribe request", tp_handle_inspect (s->self->priv->contact_repo, s->contact)); d = ensure_contact (s->self, s->contact, NULL); /* if we were already subscribed to them, then nothing really happened */ if (d->subscribe) return FALSE; d->subscribe_requested = FALSE; d->subscribe = TRUE; d->stored = TRUE; set = tp_intset_new_containing (s->contact); tp_group_mixin_change_members ((GObject *) subscribe, "", set, NULL, NULL, NULL, s->contact, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_group_mixin_change_members ((GObject *) stored, "", set, NULL, NULL, NULL, s->contact, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_intset_destroy (set); /* their presence changes to something other than UNKNOWN */ g_signal_emit (s->self, signals[PRESENCE_UPDATED], 0, s->contact); /* if we're not publishing to them, also pretend they have asked us to * do so */ if (!d->publish) { receive_auth_request (s->self, s->contact); } return FALSE; } static gboolean receive_unauthorized (gpointer p) { SelfAndContact *s = p; ExampleContactDetails *d; TpIntSet *set; ExampleContactList *subscribe = s->self->priv->lists[ EXAMPLE_CONTACT_LIST_SUBSCRIBE]; /* if shutting down, do nothing */ if (subscribe == NULL) return FALSE; /* A remote contact has rejected our request to see their presence. * * In a real connection manager this would be the result of incoming * data from the server. */ g_message ("From server: %s has rejected our subscribe request", tp_handle_inspect (s->self->priv->contact_repo, s->contact)); d = ensure_contact (s->self, s->contact, NULL); if (!d->subscribe && !d->subscribe_requested) return FALSE; d->subscribe_requested = FALSE; d->subscribe = FALSE; set = tp_intset_new_containing (s->contact); tp_group_mixin_change_members ((GObject *) subscribe, "Say 'please'!", NULL, set, NULL, NULL, s->contact, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_intset_destroy (set); /* their presence changes to UNKNOWN */ g_signal_emit (s->self, signals[PRESENCE_UPDATED], 0, s->contact); return FALSE; } gboolean example_contact_list_manager_add_to_list (ExampleContactListManager *self, GObject *channel, ExampleContactListHandle list, TpHandle member, const gchar *message, GError **error) { TpIntSet *set; ExampleContactList *stored = self->priv->lists[EXAMPLE_CONTACT_LIST_STORED]; switch (list) { case EXAMPLE_CONTACT_LIST_SUBSCRIBE: /* we would like to see member's presence */ { gboolean created; ExampleContactDetails *d = ensure_contact (self, member, &created); gchar *message_lc; /* if they already authorized us, it's a no-op */ if (d->subscribe) return TRUE; /* In a real connection manager we'd start a network request here */ g_message ("Transmitting authorization request to %s: %s", tp_handle_inspect (self->priv->contact_repo, member), message); if (created || !d->subscribe_requested) { d->subscribe_requested = TRUE; d->stored = TRUE; send_updated_roster (self, member); } set = tp_intset_new_containing (member); tp_group_mixin_change_members (channel, message, NULL, NULL, NULL, set, self->priv->conn->self_handle, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); /* subscribing to someone implicitly puts them on Stored, too */ tp_group_mixin_change_members ((GObject *) stored, "", set, NULL, NULL, NULL, self->priv->conn->self_handle, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_intset_destroy (set); /* Pretend that after a delay, the contact notices the request * and allows or rejects it. In this example connection manager, * empty requests are allowed, as are requests that contain "please" * case-insensitively. All other requests are denied. */ message_lc = g_ascii_strdown (message, -1); if (message[0] == '\0' || strstr (message_lc, "please") != NULL) { g_timeout_add_full (G_PRIORITY_DEFAULT, self->priv->simulation_delay, receive_authorized, self_and_contact_new (self, member), self_and_contact_destroy); } else { g_timeout_add_full (G_PRIORITY_DEFAULT, self->priv->simulation_delay, receive_unauthorized, self_and_contact_new (self, member), self_and_contact_destroy); } g_free (message_lc); } return TRUE; case EXAMPLE_CONTACT_LIST_PUBLISH: /* We would like member to see our presence. This is meaningless, * unless they have asked for it. */ { ExampleContactDetails *d = lookup_contact (self, member); if (d == NULL || !d->publish_requested) { /* the group mixin won't actually allow this to be reached, * because of the flags we set */ g_set_error (error, TP_ERROR, TP_ERROR_NOT_AVAILABLE, "Can't unilaterally send presence to %s", tp_handle_inspect (self->priv->contact_repo, member)); return FALSE; } if (!d->publish) { d->publish = TRUE; d->publish_requested = FALSE; d->stored = TRUE; send_updated_roster (self, member); set = tp_intset_new_containing (member); tp_group_mixin_change_members (channel, "", set, NULL, NULL, NULL, self->priv->conn->self_handle, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_group_mixin_change_members ((GObject *) stored, "", set, NULL, NULL, NULL, self->priv->conn->self_handle, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_intset_destroy (set); } } return TRUE; case EXAMPLE_CONTACT_LIST_STORED: /* we would like member to be on the roster */ { ExampleContactDetails *d = ensure_contact (self, member, NULL); d->stored = TRUE; send_updated_roster (self, member); set = tp_intset_new_containing (member); tp_group_mixin_change_members (channel, "", set, NULL, NULL, NULL, self->priv->conn->self_handle, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_intset_destroy (set); } return TRUE; case EXAMPLE_CONTACT_LIST_DENY: /* We would like member to be blocked */ { ExampleContactDetails *d = ensure_contact (self, member, NULL); g_message ("Blocking %s", tp_handle_inspect (self->priv->contact_repo, member)); d->blocked = TRUE; send_updated_roster (self, member); set = tp_intset_new_containing (member); tp_group_mixin_change_members (channel, "", set, NULL, NULL, NULL, self->priv->conn->self_handle, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_intset_destroy (set); } return TRUE; default: g_return_val_if_reached (FALSE); } } static gboolean auth_request_cb (gpointer p) { SelfAndContact *s = p; receive_auth_request (s->self, s->contact); return FALSE; } gboolean example_contact_list_manager_remove_from_list (ExampleContactListManager *self, GObject *channel, ExampleContactListHandle list, TpHandle member, const gchar *message, GError **error) { TpIntSet *set; switch (list) { case EXAMPLE_CONTACT_LIST_PUBLISH: /* we would like member not to see our presence any more, or we * would like to reject a request from them to see our presence */ { ExampleContactDetails *d = lookup_contact (self, member); if (d != NULL) { if (d->publish_requested) { g_message ("Rejecting authorization request from %s", tp_handle_inspect (self->priv->contact_repo, member)); d->publish_requested = FALSE; set = tp_intset_new_containing (member); tp_group_mixin_change_members (channel, "", NULL, set, NULL, NULL, self->priv->conn->self_handle, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_intset_destroy (set); } else if (d->publish) { g_message ("Removing authorization from %s", tp_handle_inspect (self->priv->contact_repo, member)); d->publish = FALSE; set = tp_intset_new_containing (member); tp_group_mixin_change_members (channel, "", NULL, set, NULL, NULL, self->priv->conn->self_handle, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_intset_destroy (set); /* Pretend that after a delay, the contact notices the change * and asks for our presence again */ g_timeout_add_full (G_PRIORITY_DEFAULT, self->priv->simulation_delay, auth_request_cb, self_and_contact_new (self, member), self_and_contact_destroy); } else { /* nothing to do, avoid "updating the roster" */ return TRUE; } send_updated_roster (self, member); } } return TRUE; case EXAMPLE_CONTACT_LIST_SUBSCRIBE: /* we would like to avoid receiving member's presence any more, * or we would like to cancel an outstanding request for their * presence */ { ExampleContactDetails *d = lookup_contact (self, member); if (d != NULL) { if (d->subscribe_requested) { g_message ("Cancelling our authorization request to %s", tp_handle_inspect (self->priv->contact_repo, member)); d->subscribe_requested = FALSE; set = tp_intset_new_containing (member); tp_group_mixin_change_members (channel, "", NULL, set, NULL, NULL, self->priv->conn->self_handle, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_intset_destroy (set); } else if (d->subscribe) { g_message ("We no longer want presence from %s", tp_handle_inspect (self->priv->contact_repo, member)); d->subscribe = FALSE; set = tp_intset_new_containing (member); tp_group_mixin_change_members (channel, "", NULL, set, NULL, NULL, self->priv->conn->self_handle, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_intset_destroy (set); /* since they're no longer on the subscribe list, we can't * see their presence, so emit a signal changing it to * UNKNOWN */ g_signal_emit (self, signals[PRESENCE_UPDATED], 0, member); } else { /* nothing to do, avoid "updating the roster" */ return TRUE; } send_updated_roster (self, member); } } return TRUE; case EXAMPLE_CONTACT_LIST_STORED: /* we would like to remove member from the roster altogether */ { ExampleContactDetails *d = lookup_contact (self, member); if (d != NULL) { /* if the contact is blocked, do not completely delete it */ if (d->blocked) { d->publish = FALSE; d->publish_requested = FALSE; d->subscribe = FALSE; d->subscribe_requested = FALSE; d->stored = FALSE; } else { g_hash_table_remove (self->priv->contact_details, GUINT_TO_POINTER (member)); } send_updated_roster (self, member); set = tp_intset_new_containing (member); tp_group_mixin_change_members (channel, "", NULL, set, NULL, NULL, self->priv->conn->self_handle, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_group_mixin_change_members ( (GObject *) self->priv->lists[EXAMPLE_CONTACT_LIST_SUBSCRIBE], "", NULL, set, NULL, NULL, self->priv->conn->self_handle, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_group_mixin_change_members ( (GObject *) self->priv->lists[EXAMPLE_CONTACT_LIST_PUBLISH], "", NULL, set, NULL, NULL, self->priv->conn->self_handle, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_intset_destroy (set); if (!d->blocked) tp_handle_set_remove (self->priv->contacts, member); /* since they're no longer on the subscribe list, we can't * see their presence, so emit a signal changing it to * UNKNOWN */ g_signal_emit (self, signals[PRESENCE_UPDATED], 0, member); } } return TRUE; case EXAMPLE_CONTACT_LIST_DENY: /* we would like to unblock member */ { ExampleContactDetails *d = lookup_contact (self, member); if (d != NULL) { g_message ("Unblocking %s", tp_handle_inspect (self->priv->contact_repo, member)); /* if the contact is also not stored, we need to delete it */ if (!d->stored) { g_hash_table_remove (self->priv->contact_details, GUINT_TO_POINTER (member)); } else { d->blocked = FALSE; } send_updated_roster (self, member); set = tp_intset_new_containing (member); tp_group_mixin_change_members (channel, "", NULL, set, NULL, NULL, self->priv->conn->self_handle, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_intset_destroy (set); if (!d->stored) tp_handle_set_remove (self->priv->contacts, member); } } return TRUE; default: g_return_val_if_reached (FALSE); } } ExampleContactListPresence example_contact_list_manager_get_presence (ExampleContactListManager *self, TpHandle contact) { ExampleContactDetails *d = lookup_contact (self, contact); const gchar *id; if (d == NULL || !d->subscribe) { /* we don't know the presence of people not on the subscribe list, * by definition */ return EXAMPLE_CONTACT_LIST_PRESENCE_UNKNOWN; } id = tp_handle_inspect (self->priv->contact_repo, contact); /* In this example CM, we fake contacts' presence based on their name: * contacts in the first half of the alphabet are available, the rest * (including non-alphabetic and non-ASCII initial letters) are away. */ if ((id[0] >= 'A' && id[0] <= 'M') || (id[0] >= 'a' && id[0] <= 'm')) { return EXAMPLE_CONTACT_LIST_PRESENCE_AVAILABLE; } return EXAMPLE_CONTACT_LIST_PRESENCE_AWAY; } const gchar * example_contact_list_manager_get_alias (ExampleContactListManager *self, TpHandle contact) { ExampleContactDetails *d = lookup_contact (self, contact); if (d == NULL) { /* we don't have a user-defined alias for people not on the roster */ return tp_handle_inspect (self->priv->contact_repo, contact); } return d->alias; } void example_contact_list_manager_set_alias (ExampleContactListManager *self, TpHandle contact, const gchar *alias) { gboolean created; ExampleContactDetails *d = ensure_contact (self, contact, &created); ExampleContactList *stored = self->priv->lists[ EXAMPLE_CONTACT_LIST_STORED]; gchar *old = d->alias; TpIntSet *set; /* FIXME: if stored list hasn't been retrieved yet, queue the change for * later */ /* if shutting down, do nothing */ if (stored == NULL) return; d->alias = g_strdup (alias); d->stored = TRUE; if (created || tp_strdiff (old, alias)) send_updated_roster (self, contact); g_free (old); set = tp_intset_new_containing (contact); tp_group_mixin_change_members ((GObject *) stored, "", set, NULL, NULL, NULL, self->priv->conn->self_handle, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_intset_destroy (set); } telepathy-qt-0.9.3/tests/lib/glib/contacts-noroster-conn.c0000644000175200001440000000264412000056607026035 0ustar00collabora-develusers00000000000000/* * Copyright (C) 2011 Collabora Ltd. * Copyright (C) 2011 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #include "contacts-noroster-conn.h" #include #include #include #include #include G_DEFINE_TYPE_WITH_CODE (TpTestsContactsNorosterConnection, tp_tests_contacts_noroster_connection, TP_TESTS_TYPE_SIMPLE_CONNECTION, G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_CONTACTS, NULL); ); static void tp_tests_contacts_noroster_connection_init (TpTestsContactsNorosterConnection *self) { } static void finalize (GObject *object) { G_OBJECT_CLASS (tp_tests_contacts_noroster_connection_parent_class)->finalize (object); } static void tp_tests_contacts_noroster_connection_class_init (TpTestsContactsNorosterConnectionClass *klass) { TpBaseConnectionClass *base_class = (TpBaseConnectionClass *) klass; GObjectClass *object_class = (GObjectClass *) klass; static const gchar *interfaces_always_present[] = { TP_IFACE_CONNECTION_INTERFACE_CONTACTS, NULL }; object_class->finalize = finalize; base_class->interfaces_always_present = interfaces_always_present; } telepathy-qt-0.9.3/tests/lib/glib/contact-list-manager.h0000644000175200001440000000517112000056607025432 0ustar00collabora-develusers00000000000000/* * Example channel manager for contact lists * * Copyright © 2007-2010 Collabora Ltd. * Copyright © 2007-2010 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef __TEST_CONTACT_LIST_MANAGER_H__ #define __TEST_CONTACT_LIST_MANAGER_H__ #include G_BEGIN_DECLS #define TEST_TYPE_CONTACT_LIST_MANAGER \ (test_contact_list_manager_get_type ()) #define TEST_CONTACT_LIST_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), TEST_TYPE_CONTACT_LIST_MANAGER, \ TestContactListManager)) #define TEST_CONTACT_LIST_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), TEST_TYPE_CONTACT_LIST_MANAGER, \ TestContactListManagerClass)) #define TEST_IS_CONTACT_LIST_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), TEST_TYPE_CONTACT_LIST_MANAGER)) #define TEST_IS_CONTACT_LIST_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), TEST_TYPE_CONTACT_LIST_MANAGER)) #define TEST_CONTACT_LIST_MANAGER_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), TEST_TYPE_CONTACT_LIST_MANAGER, \ TestContactListManagerClass)) typedef struct _TestContactListManager TestContactListManager; typedef struct _TestContactListManagerClass TestContactListManagerClass; typedef struct _TestContactListManagerPrivate TestContactListManagerPrivate; struct _TestContactListManagerClass { TpBaseContactListClass parent_class; }; struct _TestContactListManager { TpBaseContactList parent; TestContactListManagerPrivate *priv; }; GType test_contact_list_manager_get_type (void); void test_contact_list_manager_add_to_group (TestContactListManager *self, const gchar *group_name, TpHandle member); void test_contact_list_manager_remove_from_group (TestContactListManager *self, const gchar *group_name, TpHandle member); void test_contact_list_manager_request_subscription (TestContactListManager *self, guint n_members, TpHandle *members, const gchar *message); void test_contact_list_manager_unsubscribe (TestContactListManager *self, guint n_members, TpHandle *members); void test_contact_list_manager_authorize_publication (TestContactListManager *self, guint n_members, TpHandle *members); void test_contact_list_manager_unpublish (TestContactListManager *self, guint n_members, TpHandle *members); void test_contact_list_manager_remove (TestContactListManager *self, guint n_members, TpHandle *members); G_END_DECLS #endif telepathy-qt-0.9.3/tests/lib/glib/params-cm.c0000644000175200001440000001454312000056607023274 0ustar00collabora-develusers00000000000000/* * params-cm.h - source for TpTestsParamConnectionManager * * Copyright © 2007-2009 Collabora Ltd. * Copyright © 2007-2009 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 */ #include "params-cm.h" #include #include #include G_DEFINE_TYPE (TpTestsParamConnectionManager, tp_tests_param_connection_manager, TP_TYPE_BASE_CONNECTION_MANAGER) struct _TpTestsParamConnectionManagerPrivate { int dummy; }; static void tp_tests_param_connection_manager_init ( TpTestsParamConnectionManager *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, TP_TESTS_TYPE_PARAM_CONNECTION_MANAGER, TpTestsParamConnectionManagerPrivate); } enum { TP_TESTS_PARAM_STRING, TP_TESTS_PARAM_INT16, TP_TESTS_PARAM_INT32, TP_TESTS_PARAM_UINT16, TP_TESTS_PARAM_UINT32, TP_TESTS_PARAM_INT64, TP_TESTS_PARAM_UINT64, TP_TESTS_PARAM_BOOLEAN, TP_TESTS_PARAM_DOUBLE, TP_TESTS_PARAM_ARRAY_STRINGS, TP_TESTS_PARAM_ARRAY_BYTES, TP_TESTS_PARAM_OBJECT_PATH, TP_TESTS_PARAM_LC_STRING, TP_TESTS_PARAM_UC_STRING, NUM_PARAM }; static gboolean filter_string_ascii_case (const TpCMParamSpec *param_spec, GValue *value, GError **error) { const gchar *s = g_value_get_string (value); guint i; for (i = 0; s[i] != '\0'; i++) { int c = s[i]; /* just to avoid -Wtype-limits */ if (c < 0 || c > 127) /* char might be signed or unsigned */ { g_set_error (error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "%s must be ASCII", param_spec->name); return FALSE; } } if (GINT_TO_POINTER (param_spec->filter_data)) g_value_take_string (value, g_ascii_strup (s, -1)); else g_value_take_string (value, g_ascii_strdown (s, -1)); return TRUE; } static TpCMParamSpec param_example_params[] = { { "a-string", "s", G_TYPE_STRING, TP_CONN_MGR_PARAM_FLAG_HAS_DEFAULT, "the default string", G_STRUCT_OFFSET (TpTestsCMParams, a_string), NULL, NULL, NULL }, { "a-int16", "n", G_TYPE_INT, TP_CONN_MGR_PARAM_FLAG_HAS_DEFAULT, GINT_TO_POINTER (42), G_STRUCT_OFFSET (TpTestsCMParams, a_int16), NULL, NULL, NULL }, { "a-int32", "i", G_TYPE_INT, TP_CONN_MGR_PARAM_FLAG_HAS_DEFAULT, GINT_TO_POINTER (42), G_STRUCT_OFFSET (TpTestsCMParams, a_int32), NULL, NULL, NULL }, { "a-uint16", "q", G_TYPE_UINT, 0, NULL, G_STRUCT_OFFSET (TpTestsCMParams, a_uint16), NULL, NULL, NULL }, { "a-uint32", "u", G_TYPE_UINT, 0, NULL, G_STRUCT_OFFSET (TpTestsCMParams, a_uint32), NULL, NULL, NULL }, { "a-int64", "x", G_TYPE_INT64, 0, NULL, G_STRUCT_OFFSET (TpTestsCMParams, a_int64), NULL, NULL, NULL }, { "a-uint64", "t", G_TYPE_UINT64, 0, NULL, G_STRUCT_OFFSET (TpTestsCMParams, a_uint64), NULL, NULL, NULL }, { "a-boolean", "b", G_TYPE_BOOLEAN, TP_CONN_MGR_PARAM_FLAG_REQUIRED, NULL, G_STRUCT_OFFSET (TpTestsCMParams, a_boolean), NULL, NULL, NULL }, { "a-double", "d", G_TYPE_DOUBLE, 0, NULL, G_STRUCT_OFFSET (TpTestsCMParams, a_double), NULL, NULL, NULL }, { "a-array-of-strings", "as", 0, 0, NULL, G_STRUCT_OFFSET (TpTestsCMParams, a_array_of_strings), NULL, NULL, NULL }, { "a-array-of-bytes", "ay", 0, 0, NULL, G_STRUCT_OFFSET (TpTestsCMParams, a_array_of_bytes), NULL, NULL, NULL }, { "a-object-path", "o", 0, 0, NULL, G_STRUCT_OFFSET (TpTestsCMParams, a_object_path), NULL, NULL, NULL }, /* demo of a filter */ { "lc-string", "s", G_TYPE_STRING, 0, NULL, G_STRUCT_OFFSET (TpTestsCMParams, lc_string), filter_string_ascii_case, GINT_TO_POINTER (FALSE), NULL }, { "uc-string", "s", G_TYPE_STRING, 0, NULL, G_STRUCT_OFFSET (TpTestsCMParams, uc_string), filter_string_ascii_case, GINT_TO_POINTER (TRUE), NULL }, { NULL } }; static TpTestsCMParams *params = NULL; static gpointer alloc_params (void) { params = g_slice_new0 (TpTestsCMParams); return params; } static void free_params (gpointer p) { /* CM user is responsible to free params so he can check their values */ params = (TpTestsCMParams *) p; params->would_have_been_freed = TRUE; } static const TpCMProtocolSpec example_protocols[] = { { "example", param_example_params, alloc_params, free_params }, { NULL, NULL } }; static TpBaseConnection * new_connection (TpBaseConnectionManager *self, const gchar *proto, TpIntSet *params_present, gpointer parsed_params, GError **error) { g_set_error (error, TP_ERROR, TP_ERROR_NOT_IMPLEMENTED, "No connection for you"); return NULL; } static void tp_tests_param_connection_manager_class_init ( TpTestsParamConnectionManagerClass *klass) { TpBaseConnectionManagerClass *base_class = (TpBaseConnectionManagerClass *) klass; g_type_class_add_private (klass, sizeof (TpTestsParamConnectionManagerPrivate)); param_example_params[TP_TESTS_PARAM_ARRAY_STRINGS].gtype = G_TYPE_STRV; param_example_params[TP_TESTS_PARAM_ARRAY_BYTES].gtype = DBUS_TYPE_G_UCHAR_ARRAY; param_example_params[TP_TESTS_PARAM_OBJECT_PATH].gtype = DBUS_TYPE_G_OBJECT_PATH; base_class->new_connection = new_connection; base_class->cm_dbus_name = "params_cm"; base_class->protocol_params = example_protocols; } TpTestsCMParams * tp_tests_param_connection_manager_steal_params_last_conn (void) { TpTestsCMParams *p = params; params = NULL; return p; } void tp_tests_param_connection_manager_free_params (TpTestsCMParams *p) { g_free (p->a_string); g_strfreev (p->a_array_of_strings); if (p->a_array_of_bytes != NULL) g_array_free (p->a_array_of_bytes, TRUE); g_free (p->a_object_path); g_slice_free (TpTestsCMParams, p); } telepathy-qt-0.9.3/tests/lib/glib/callable/0000755000175200001440000000000012000056607023000 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/tests/lib/glib/callable/connection-manager.h0000644000175200001440000000552112000056607026723 0ustar00collabora-develusers00000000000000/* * manager.h - header for an example connection manager * * Copyright © 2007-2009 Collabora Ltd. * Copyright © 2007-2009 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 __EXAMPLE_CALLABLE_CONNECTION_MANAGER_H__ #define __EXAMPLE_CALLABLE_CONNECTION_MANAGER_H__ #include #include G_BEGIN_DECLS typedef struct _ExampleCallableConnectionManager ExampleCallableConnectionManager; typedef struct _ExampleCallableConnectionManagerPrivate ExampleCallableConnectionManagerPrivate; typedef struct _ExampleCallableConnectionManagerClass ExampleCallableConnectionManagerClass; typedef struct _ExampleCallableConnectionManagerClassPrivate ExampleCallableConnectionManagerClassPrivate; struct _ExampleCallableConnectionManagerClass { TpBaseConnectionManagerClass parent_class; ExampleCallableConnectionManagerClassPrivate *priv; }; struct _ExampleCallableConnectionManager { TpBaseConnectionManager parent; ExampleCallableConnectionManagerPrivate *priv; }; GType example_callable_connection_manager_get_type (void); /* TYPE MACROS */ #define EXAMPLE_TYPE_CALLABLE_CONNECTION_MANAGER \ (example_callable_connection_manager_get_type ()) #define EXAMPLE_CALLABLE_CONNECTION_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), EXAMPLE_TYPE_CALLABLE_CONNECTION_MANAGER, \ ExampleCallableConnectionManager)) #define EXAMPLE_CALLABLE_CONNECTION_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), EXAMPLE_TYPE_CALLABLE_CONNECTION_MANAGER, \ ExampleCallableConnectionManagerClass)) #define EXAMPLE_IS_CALLABLE_CONNECTION_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), EXAMPLE_TYPE_CALLABLE_CONNECTION_MANAGER)) #define EXAMPLE_IS_CALLABLE_CONNECTION_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), EXAMPLE_TYPE_CALLABLE_CONNECTION_MANAGER)) #define EXAMPLE_CALLABLE_CONNECTION_MANAGER_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), EXAMPLE_TYPE_CALLABLE_CONNECTION_MANAGER, \ ExampleCallableConnectionManagerClass)) G_END_DECLS #endif telepathy-qt-0.9.3/tests/lib/glib/callable/conn.c0000644000175200001440000003104612000056607024105 0ustar00collabora-develusers00000000000000/* * conn.c - an example connection * * Copyright © 2007-2009 Collabora Ltd. * Copyright © 2007-2009 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 */ #include "conn.h" #include #include #include #include #include #include "media-manager.h" G_DEFINE_TYPE_WITH_CODE (ExampleCallableConnection, example_callable_connection, TP_TYPE_BASE_CONNECTION, G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_CONTACTS, tp_contacts_mixin_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_PRESENCE, tp_presence_mixin_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_SIMPLE_PRESENCE, tp_presence_mixin_simple_presence_iface_init)) enum { PROP_ACCOUNT = 1, PROP_SIMULATION_DELAY, N_PROPS }; enum { SIGNAL_AVAILABLE, N_SIGNALS }; static guint signals[N_SIGNALS] = { 0 }; struct _ExampleCallableConnectionPrivate { gchar *account; guint simulation_delay; gboolean away; gchar *presence_message; }; static void example_callable_connection_init (ExampleCallableConnection *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, EXAMPLE_TYPE_CALLABLE_CONNECTION, ExampleCallableConnectionPrivate); self->priv->away = FALSE; self->priv->presence_message = g_strdup (""); } static void get_property (GObject *object, guint property_id, GValue *value, GParamSpec *spec) { ExampleCallableConnection *self = EXAMPLE_CALLABLE_CONNECTION (object); switch (property_id) { case PROP_ACCOUNT: g_value_set_string (value, self->priv->account); break; case PROP_SIMULATION_DELAY: g_value_set_uint (value, self->priv->simulation_delay); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, spec); } } static void set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *spec) { ExampleCallableConnection *self = EXAMPLE_CALLABLE_CONNECTION (object); switch (property_id) { case PROP_ACCOUNT: g_free (self->priv->account); self->priv->account = g_value_dup_string (value); break; case PROP_SIMULATION_DELAY: self->priv->simulation_delay = g_value_get_uint (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, spec); } } static void finalize (GObject *object) { ExampleCallableConnection *self = EXAMPLE_CALLABLE_CONNECTION (object); tp_contacts_mixin_finalize (object); g_free (self->priv->account); g_free (self->priv->presence_message); G_OBJECT_CLASS (example_callable_connection_parent_class)->finalize (object); } static gchar * get_unique_connection_name (TpBaseConnection *conn) { ExampleCallableConnection *self = EXAMPLE_CALLABLE_CONNECTION (conn); return g_strdup_printf ("%s@%p", self->priv->account, self); } gchar * example_callable_normalize_contact (TpHandleRepoIface *repo, const gchar *id, gpointer context, GError **error) { if (id[0] == '\0') { g_set_error (error, TP_ERROR, TP_ERROR_INVALID_HANDLE, "Contact ID must not be empty"); return NULL; } return g_utf8_normalize (id, -1, G_NORMALIZE_ALL_COMPOSE); } static void create_handle_repos (TpBaseConnection *conn, TpHandleRepoIface *repos[NUM_TP_HANDLE_TYPES]) { repos[TP_HANDLE_TYPE_CONTACT] = tp_dynamic_handle_repo_new (TP_HANDLE_TYPE_CONTACT, example_callable_normalize_contact, NULL); } static GPtrArray * create_channel_managers (TpBaseConnection *conn) { ExampleCallableConnection *self = EXAMPLE_CALLABLE_CONNECTION (conn); GPtrArray *ret = g_ptr_array_sized_new (1); g_ptr_array_add (ret, g_object_new (EXAMPLE_TYPE_CALLABLE_MEDIA_MANAGER, "connection", conn, "simulation-delay", self->priv->simulation_delay, NULL)); return ret; } static gboolean start_connecting (TpBaseConnection *conn, GError **error) { ExampleCallableConnection *self = EXAMPLE_CALLABLE_CONNECTION (conn); TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (conn, TP_HANDLE_TYPE_CONTACT); /* In a real connection manager we'd ask the underlying implementation to * start connecting, then go to state CONNECTED when finished, but here * we can do it immediately. */ conn->self_handle = tp_handle_ensure (contact_repo, self->priv->account, NULL, error); if (conn->self_handle == 0) return FALSE; tp_base_connection_change_status (conn, TP_CONNECTION_STATUS_CONNECTED, TP_CONNECTION_STATUS_REASON_REQUESTED); return TRUE; } static void shut_down (TpBaseConnection *conn) { /* In a real connection manager we'd ask the underlying implementation to * start shutting down, then call this function when finished, but here * we can do it immediately. */ tp_base_connection_finish_shutdown (conn); } static void constructed (GObject *object) { TpBaseConnection *base = TP_BASE_CONNECTION (object); void (*chain_up) (GObject *) = G_OBJECT_CLASS (example_callable_connection_parent_class)->constructed; if (chain_up != NULL) chain_up (object); tp_contacts_mixin_init (object, G_STRUCT_OFFSET (ExampleCallableConnection, contacts_mixin)); tp_base_connection_register_with_contacts_mixin (base); tp_presence_mixin_init (object, G_STRUCT_OFFSET (ExampleCallableConnection, presence_mixin)); tp_presence_mixin_simple_presence_register_with_contacts_mixin (object); } static gboolean status_available (GObject *object, guint index_) { TpBaseConnection *base = TP_BASE_CONNECTION (object); if (base->status != TP_CONNECTION_STATUS_CONNECTED) return FALSE; return TRUE; } static GHashTable * get_contact_statuses (GObject *object, const GArray *contacts, GError **error) { ExampleCallableConnection *self = EXAMPLE_CALLABLE_CONNECTION (object); TpBaseConnection *base = TP_BASE_CONNECTION (object); guint i; GHashTable *result = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, (GDestroyNotify) tp_presence_status_free); for (i = 0; i < contacts->len; i++) { TpHandle contact = g_array_index (contacts, guint, i); ExampleCallablePresence presence; GHashTable *parameters; parameters = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) tp_g_value_slice_free); /* we know our own status from the connection; for this example CM, * everyone else's status is assumed to be "available" */ if (contact == base->self_handle) { presence = (self->priv->away ? EXAMPLE_CALLABLE_PRESENCE_AWAY : EXAMPLE_CALLABLE_PRESENCE_AVAILABLE); if (self->priv->presence_message[0] != '\0') g_hash_table_insert (parameters, "message", tp_g_value_slice_new_string (self->priv->presence_message)); } else { presence = EXAMPLE_CALLABLE_PRESENCE_AVAILABLE; } g_hash_table_insert (result, GUINT_TO_POINTER (contact), tp_presence_status_new (presence, parameters)); g_hash_table_destroy (parameters); } return result; } static gboolean set_own_status (GObject *object, const TpPresenceStatus *status, GError **error) { ExampleCallableConnection *self = EXAMPLE_CALLABLE_CONNECTION (object); TpBaseConnection *base = TP_BASE_CONNECTION (object); GHashTable *presences; const gchar *message = ""; if (status->optional_arguments != NULL) { GValue *v = g_hash_table_lookup (status->optional_arguments, "message"); if (v != NULL && G_VALUE_HOLDS_STRING (v)) { message = g_value_get_string (v); if (message == NULL) message = ""; } } if (status->index == EXAMPLE_CALLABLE_PRESENCE_AWAY) { if (self->priv->away && !tp_strdiff (message, self->priv->presence_message)) return TRUE; self->priv->away = TRUE; } else { if (!self->priv->away && !tp_strdiff (message, self->priv->presence_message)) return TRUE; self->priv->away = FALSE; } g_free (self->priv->presence_message); self->priv->presence_message = g_strdup (message); presences = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, NULL); g_hash_table_insert (presences, GUINT_TO_POINTER (base->self_handle), (gpointer) status); tp_presence_mixin_emit_presence_update (object, presences); g_hash_table_destroy (presences); if (!self->priv->away) { g_signal_emit (self, signals[SIGNAL_AVAILABLE], 0, message); } return TRUE; } static const TpPresenceStatusOptionalArgumentSpec can_have_message[] = { { "message", "s", NULL, NULL }, { NULL } }; /* Must be kept in sync with ExampleCallablePresence enum in header */ static const TpPresenceStatusSpec presence_statuses[] = { { "offline", TP_CONNECTION_PRESENCE_TYPE_OFFLINE, FALSE, NULL }, { "unknown", TP_CONNECTION_PRESENCE_TYPE_UNKNOWN, FALSE, NULL }, { "error", TP_CONNECTION_PRESENCE_TYPE_ERROR, FALSE, NULL }, { "away", TP_CONNECTION_PRESENCE_TYPE_AWAY, TRUE, can_have_message }, { "available", TP_CONNECTION_PRESENCE_TYPE_AVAILABLE, TRUE, can_have_message }, { NULL } }; static void example_callable_connection_class_init ( ExampleCallableConnectionClass *klass) { static const gchar *interfaces_always_present[] = { TP_IFACE_CONNECTION_INTERFACE_CONTACTS, TP_IFACE_CONNECTION_INTERFACE_PRESENCE, TP_IFACE_CONNECTION_INTERFACE_REQUESTS, TP_IFACE_CONNECTION_INTERFACE_SIMPLE_PRESENCE, NULL }; TpBaseConnectionClass *base_class = (TpBaseConnectionClass *) klass; GObjectClass *object_class = (GObjectClass *) klass; GParamSpec *param_spec; object_class->get_property = get_property; object_class->set_property = set_property; object_class->constructed = constructed; object_class->finalize = finalize; g_type_class_add_private (klass, sizeof (ExampleCallableConnectionPrivate)); base_class->create_handle_repos = create_handle_repos; base_class->get_unique_connection_name = get_unique_connection_name; base_class->create_channel_managers = create_channel_managers; base_class->start_connecting = start_connecting; base_class->shut_down = shut_down; base_class->interfaces_always_present = interfaces_always_present; param_spec = g_param_spec_string ("account", "Account name", "The username of this user", NULL, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_ACCOUNT, param_spec); param_spec = g_param_spec_uint ("simulation-delay", "Simulation delay", "Delay between simulated network events", 0, G_MAXUINT32, 1000, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_SIMULATION_DELAY, param_spec); /* Used in the media manager, to simulate an incoming call when we become * available */ signals[SIGNAL_AVAILABLE] = g_signal_new ("available", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 1, G_TYPE_STRING); tp_contacts_mixin_class_init (object_class, G_STRUCT_OFFSET (ExampleCallableConnectionClass, contacts_mixin)); tp_presence_mixin_class_init (object_class, G_STRUCT_OFFSET (ExampleCallableConnectionClass, presence_mixin), status_available, get_contact_statuses, set_own_status, presence_statuses); tp_presence_mixin_simple_presence_init_dbus_properties (object_class); } telepathy-qt-0.9.3/tests/lib/glib/callable/manager-file.py0000644000175200001440000000115612000056607025704 0ustar00collabora-develusers00000000000000# Input for tools/manager-file.py MANAGER = 'example_callable' PARAMS = { 'example' : { 'account': { 'dtype': 's', 'flags': 'required register', 'filter': 'account_param_filter', # 'filter_data': 'NULL', # 'default': ..., # 'struct_field': '...', # 'setter_data': 'NULL', }, 'simulation-delay': { 'dtype': 'u', 'default': 1000, }, }, } STRUCTS = { 'example': 'ExampleParams' } telepathy-qt-0.9.3/tests/lib/glib/callable/media-channel.h0000644000175200001440000000535312000056607025644 0ustar00collabora-develusers00000000000000/* * media-channel.h - header for an example channel * * Copyright © 2007-2009 Collabora Ltd. * Copyright © 2007-2009 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 __EXAMPLE_CALLABLE_MEDIA_CHANNEL_H__ #define __EXAMPLE_CALLABLE_MEDIA_CHANNEL_H__ #include #include G_BEGIN_DECLS typedef struct _ExampleCallableMediaChannel ExampleCallableMediaChannel; typedef struct _ExampleCallableMediaChannelPrivate ExampleCallableMediaChannelPrivate; typedef struct _ExampleCallableMediaChannelClass ExampleCallableMediaChannelClass; typedef struct _ExampleCallableMediaChannelClassPrivate ExampleCallableMediaChannelClassPrivate; GType example_callable_media_channel_get_type (void); #define EXAMPLE_TYPE_CALLABLE_MEDIA_CHANNEL \ (example_callable_media_channel_get_type ()) #define EXAMPLE_CALLABLE_MEDIA_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXAMPLE_TYPE_CALLABLE_MEDIA_CHANNEL, \ ExampleCallableMediaChannel)) #define EXAMPLE_CALLABLE_MEDIA_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), EXAMPLE_TYPE_CALLABLE_MEDIA_CHANNEL, \ ExampleCallableMediaChannelClass)) #define EXAMPLE_IS_CALLABLE_MEDIA_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EXAMPLE_TYPE_CALLABLE_MEDIA_CHANNEL)) #define EXAMPLE_IS_CALLABLE_MEDIA_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), EXAMPLE_TYPE_CALLABLE_MEDIA_CHANNEL)) #define EXAMPLE_CALLABLE_MEDIA_CHANNEL_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), EXAMPLE_TYPE_CALLABLE_MEDIA_CHANNEL, \ ExampleCallableMediaChannelClass)) struct _ExampleCallableMediaChannelClass { GObjectClass parent_class; TpGroupMixinClass group_class; TpDBusPropertiesMixinClass dbus_properties_class; ExampleCallableMediaChannelClassPrivate *priv; }; struct _ExampleCallableMediaChannel { GObject parent; TpGroupMixin group; ExampleCallableMediaChannelPrivate *priv; }; G_END_DECLS #endif telepathy-qt-0.9.3/tests/lib/glib/callable/CMakeLists.txt0000644000175200001440000000110312000056607025533 0ustar00collabora-develusers00000000000000if(ENABLE_TP_GLIB_TESTS) set(example_cm_callable_SRCS conn.c conn.h connection-manager.c connection-manager.h media-channel.c media-channel.h media-manager.c media-manager.h media-stream.c media-stream.h) add_library(example-cm-callable STATIC ${example_cm_callable_SRCS}) target_link_libraries(example-cm-callable ${TPGLIB_LIBRARIES}) tpqt_generate_manager_file(${CMAKE_CURRENT_SOURCE_DIR}/manager-file.py example_callable.manager connection-manager.c) endif(ENABLE_TP_GLIB_TESTS) telepathy-qt-0.9.3/tests/lib/glib/callable/media-stream.h0000644000175200001440000000652112000056607025525 0ustar00collabora-develusers00000000000000/* * media-stream.h - header for an example stream * * Copyright © 2007-2009 Collabora Ltd. * Copyright © 2007-2009 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 __EXAMPLE_CALLABLE_MEDIA_STREAM_H__ #define __EXAMPLE_CALLABLE_MEDIA_STREAM_H__ #include #include G_BEGIN_DECLS typedef struct _ExampleCallableMediaStream ExampleCallableMediaStream; typedef struct _ExampleCallableMediaStreamPrivate ExampleCallableMediaStreamPrivate; typedef struct _ExampleCallableMediaStreamClass ExampleCallableMediaStreamClass; typedef struct _ExampleCallableMediaStreamClassPrivate ExampleCallableMediaStreamClassPrivate; GType example_callable_media_stream_get_type (void); #define EXAMPLE_TYPE_CALLABLE_MEDIA_STREAM \ (example_callable_media_stream_get_type ()) #define EXAMPLE_CALLABLE_MEDIA_STREAM(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXAMPLE_TYPE_CALLABLE_MEDIA_STREAM, \ ExampleCallableMediaStream)) #define EXAMPLE_CALLABLE_MEDIA_STREAM_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), EXAMPLE_TYPE_CALLABLE_MEDIA_STREAM, \ ExampleCallableMediaStreamClass)) #define EXAMPLE_IS_CALLABLE_MEDIA_STREAM(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EXAMPLE_TYPE_CALLABLE_MEDIA_STREAM)) #define EXAMPLE_IS_CALLABLE_MEDIA_STREAM_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), EXAMPLE_TYPE_CALLABLE_MEDIA_STREAM)) #define EXAMPLE_CALLABLE_MEDIA_STREAM_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), EXAMPLE_TYPE_CALLABLE_MEDIA_STREAM, \ ExampleCallableMediaStreamClass)) struct _ExampleCallableMediaStreamClass { GObjectClass parent_class; ExampleCallableMediaStreamClassPrivate *priv; }; struct _ExampleCallableMediaStream { GObject parent; ExampleCallableMediaStreamPrivate *priv; }; void example_callable_media_stream_close (ExampleCallableMediaStream *self); gboolean example_callable_media_stream_change_direction ( ExampleCallableMediaStream *self, TpMediaStreamDirection direction, GError **error); void example_callable_media_stream_accept_proposed_direction ( ExampleCallableMediaStream *self); void example_callable_media_stream_connect (ExampleCallableMediaStream *self); /* This controls receiving emulated network events, so it wouldn't exist in * a real connection manager */ void example_callable_media_stream_simulate_contact_agreed_to_send ( ExampleCallableMediaStream *self); void example_callable_media_stream_receive_direction_request ( ExampleCallableMediaStream *self, TpMediaStreamDirection direction); G_END_DECLS #endif telepathy-qt-0.9.3/tests/lib/glib/callable/media-channel.c0000644000175200001440000013162612000056607025642 0ustar00collabora-develusers00000000000000/* * media-channel.c - an example 1-1 streamed media call. * * For simplicity, this channel emulates a device with its own * audio/video user interface, like a video-equipped form of the phones * manipulated by telepathy-snom or gnome-phone-manager. * * As a result, this channel does not have the MediaSignalling interface, and * clients should not attempt to do their own streaming using * telepathy-farsight, telepathy-stream-engine or maemo-stream-engine. * * In practice, nearly all connection managers also have the MediaSignalling * interface on their streamed media channels. Usage for those CMs is the * same, except that whichever client is the primary handler for the channel * should also hand the channel over to telepathy-farsight or * telepathy-stream-engine to implement the actual streaming. * * Copyright © 2007-2009 Collabora Ltd. * Copyright © 2007-2009 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 */ #include "media-channel.h" #include "media-stream.h" #include #include #include #include #include #include #include #include static void media_iface_init (gpointer iface, gpointer data); static void channel_iface_init (gpointer iface, gpointer data); static void hold_iface_init (gpointer iface, gpointer data); static void dtmf_iface_init (gpointer iface, gpointer data); G_DEFINE_TYPE_WITH_CODE (ExampleCallableMediaChannel, example_callable_media_channel, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_DBUS_PROPERTIES, tp_dbus_properties_mixin_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL, channel_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_TYPE_STREAMED_MEDIA, media_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_INTERFACE_GROUP, tp_group_mixin_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_INTERFACE_HOLD, hold_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_INTERFACE_DTMF, dtmf_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_CHANNEL_IFACE, NULL); G_IMPLEMENT_INTERFACE (TP_TYPE_EXPORTABLE_CHANNEL, NULL)) enum { PROP_OBJECT_PATH = 1, PROP_CHANNEL_TYPE, PROP_HANDLE_TYPE, PROP_HANDLE, PROP_TARGET_ID, PROP_REQUESTED, PROP_INITIATOR_HANDLE, PROP_INITIATOR_ID, PROP_CONNECTION, PROP_INTERFACES, PROP_CHANNEL_DESTROYED, PROP_CHANNEL_PROPERTIES, PROP_SIMULATION_DELAY, PROP_INITIAL_AUDIO, PROP_INITIAL_VIDEO, N_PROPS }; enum { SIGNAL_CALL_TERMINATED, N_SIGNALS }; typedef enum { PROGRESS_NONE, PROGRESS_CALLING, PROGRESS_ACTIVE, PROGRESS_ENDED } ExampleCallableCallProgress; static guint signals[N_SIGNALS] = { 0 }; struct _ExampleCallableMediaChannelPrivate { TpBaseConnection *conn; gchar *object_path; TpHandle handle; TpHandle initiator; ExampleCallableCallProgress progress; guint simulation_delay; guint next_stream_id; GHashTable *streams; guint hold_state; guint hold_state_reason; gboolean locally_requested; gboolean initial_audio; gboolean initial_video; gboolean disposed; }; static const char * example_callable_media_channel_interfaces[] = { TP_IFACE_CHANNEL_INTERFACE_GROUP, TP_IFACE_CHANNEL_INTERFACE_HOLD, TP_IFACE_CHANNEL_INTERFACE_DTMF, NULL }; static void example_callable_media_channel_init (ExampleCallableMediaChannel *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, EXAMPLE_TYPE_CALLABLE_MEDIA_CHANNEL, ExampleCallableMediaChannelPrivate); self->priv->next_stream_id = 1; self->priv->streams = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_object_unref); self->priv->hold_state = TP_LOCAL_HOLD_STATE_UNHELD; self->priv->hold_state_reason = TP_LOCAL_HOLD_STATE_REASON_NONE; } static ExampleCallableMediaStream *example_callable_media_channel_add_stream ( ExampleCallableMediaChannel *self, TpMediaStreamType media_type, gboolean locally_requested); static void constructed (GObject *object) { void (*chain_up) (GObject *) = ((GObjectClass *) example_callable_media_channel_parent_class)->constructed; ExampleCallableMediaChannel *self = EXAMPLE_CALLABLE_MEDIA_CHANNEL (object); TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (self->priv->conn, TP_HANDLE_TYPE_CONTACT); TpIntSet *members; TpIntSet *local_pending; if (chain_up != NULL) chain_up (object); tp_dbus_daemon_register_object ( tp_base_connection_get_dbus_daemon (self->priv->conn), self->priv->object_path, self); tp_group_mixin_init (object, G_STRUCT_OFFSET (ExampleCallableMediaChannel, group), contact_repo, self->priv->conn->self_handle); /* Initially, the channel contains the initiator as a member; they are also * the actor for the change that adds any initial members. */ members = tp_intset_new_containing (self->priv->initiator); if (self->priv->locally_requested) { /* Nobody is locally pending. The remote peer will turn up in * remote-pending state when we actually contact them, which is done * in RequestStreams */ self->priv->progress = PROGRESS_NONE; local_pending = NULL; } else { /* This is an incoming call, so the self-handle is locally * pending, to indicate that we need to answer. */ self->priv->progress = PROGRESS_CALLING; local_pending = tp_intset_new_containing (self->priv->conn->self_handle); } tp_group_mixin_change_members (object, "", members /* added */, NULL /* nobody removed */, local_pending, /* added to local-pending */ NULL /* nobody added to remote-pending */, self->priv->initiator /* actor */, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_intset_destroy (members); if (local_pending != NULL) tp_intset_destroy (local_pending); /* We don't need to allow adding or removing members to this Group in ways * that need flags set, so the only flag we set is to say we support the * Properties interface to the Group. * * It doesn't make sense to add anyone to the Group, since we already know * who we're going to call (or were called by). The only call to AddMembers * we need to support is to move ourselves from local-pending to member in * the incoming call case, and that's always allowed anyway. * * (Connection managers that support the various backwards-compatible * ways to make an outgoing StreamedMedia channel have to support adding the * peer to remote-pending, but that has no actual effect other than to * obscure what's going on; in this one, there's no need to support that * usage.) * * Similarly, it doesn't make sense to remove anyone from this Group apart * from ourselves (to hang up), and removing the SelfHandle is always * allowed anyway. */ tp_group_mixin_change_flags (object, TP_CHANNEL_GROUP_FLAG_PROPERTIES, 0); /* Future versions of telepathy-spec will allow a channel request to * say "initially include an audio stream" and/or "initially include a video * stream", which would be represented like this; we don't support this * usage yet, though, so ExampleCallableMediaManager will never invoke * our constructor in this way. */ g_assert (!(self->priv->locally_requested && self->priv->initial_audio)); g_assert (!(self->priv->locally_requested && self->priv->initial_video)); if (!self->priv->locally_requested) { /* the caller has almost certainly asked us for some streams - there's * not much point in having a call otherwise */ if (self->priv->initial_audio) { g_message ("Channel initially has an audio stream"); example_callable_media_channel_add_stream (self, TP_MEDIA_STREAM_TYPE_AUDIO, FALSE); } if (self->priv->initial_video) { g_message ("Channel initially has a video stream"); example_callable_media_channel_add_stream (self, TP_MEDIA_STREAM_TYPE_VIDEO, FALSE); } } } static void get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { ExampleCallableMediaChannel *self = EXAMPLE_CALLABLE_MEDIA_CHANNEL (object); switch (property_id) { case PROP_OBJECT_PATH: g_value_set_string (value, self->priv->object_path); break; case PROP_CHANNEL_TYPE: g_value_set_static_string (value, TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA); break; case PROP_HANDLE_TYPE: g_value_set_uint (value, TP_HANDLE_TYPE_CONTACT); break; case PROP_HANDLE: g_value_set_uint (value, self->priv->handle); break; case PROP_TARGET_ID: { TpHandleRepoIface *contact_repo = tp_base_connection_get_handles ( self->priv->conn, TP_HANDLE_TYPE_CONTACT); g_value_set_string (value, tp_handle_inspect (contact_repo, self->priv->handle)); } break; case PROP_REQUESTED: g_value_set_boolean (value, self->priv->locally_requested); break; case PROP_INITIATOR_HANDLE: g_value_set_uint (value, self->priv->initiator); break; case PROP_INITIATOR_ID: { TpHandleRepoIface *contact_repo = tp_base_connection_get_handles ( self->priv->conn, TP_HANDLE_TYPE_CONTACT); g_value_set_string (value, tp_handle_inspect (contact_repo, self->priv->initiator)); } break; case PROP_CONNECTION: g_value_set_object (value, self->priv->conn); break; case PROP_INTERFACES: g_value_set_boxed (value, example_callable_media_channel_interfaces); break; case PROP_CHANNEL_DESTROYED: g_value_set_boolean (value, (self->priv->progress == PROGRESS_ENDED)); break; case PROP_CHANNEL_PROPERTIES: g_value_take_boxed (value, tp_dbus_properties_mixin_make_properties_hash (object, TP_IFACE_CHANNEL, "ChannelType", TP_IFACE_CHANNEL, "TargetHandleType", TP_IFACE_CHANNEL, "TargetHandle", TP_IFACE_CHANNEL, "TargetID", TP_IFACE_CHANNEL, "InitiatorHandle", TP_IFACE_CHANNEL, "InitiatorID", TP_IFACE_CHANNEL, "Requested", TP_IFACE_CHANNEL, "Interfaces", NULL)); break; case PROP_SIMULATION_DELAY: g_value_set_uint (value, self->priv->simulation_delay); break; case PROP_INITIAL_AUDIO: g_value_set_boolean (value, self->priv->initial_audio); break; case PROP_INITIAL_VIDEO: g_value_set_boolean (value, self->priv->initial_video); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { ExampleCallableMediaChannel *self = EXAMPLE_CALLABLE_MEDIA_CHANNEL (object); switch (property_id) { case PROP_OBJECT_PATH: g_assert (self->priv->object_path == NULL); self->priv->object_path = g_value_dup_string (value); break; case PROP_HANDLE: /* we don't ref it here because we don't necessarily have access to the * contact repo yet - instead we ref it in the constructor. */ self->priv->handle = g_value_get_uint (value); break; case PROP_INITIATOR_HANDLE: /* likewise */ self->priv->initiator = g_value_get_uint (value); break; case PROP_REQUESTED: self->priv->locally_requested = g_value_get_boolean (value); break; case PROP_HANDLE_TYPE: case PROP_CHANNEL_TYPE: /* these properties are writable in the interface, but not actually * meaningfully changable on this channel, so we do nothing */ break; case PROP_CONNECTION: self->priv->conn = g_value_get_object (value); break; case PROP_SIMULATION_DELAY: self->priv->simulation_delay = g_value_get_uint (value); break; case PROP_INITIAL_AUDIO: self->priv->initial_audio = g_value_get_boolean (value); break; case PROP_INITIAL_VIDEO: self->priv->initial_video = g_value_get_boolean (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void example_callable_media_channel_close (ExampleCallableMediaChannel *self, TpHandle actor, TpChannelGroupChangeReason reason) { if (self->priv->progress != PROGRESS_ENDED) { TpIntSet *everyone; self->priv->progress = PROGRESS_ENDED; if (actor == self->group.self_handle) { const gchar *send_reason; /* In a real protocol these would be some sort of real protocol * construct, like an XMPP error stanza or a SIP error code */ switch (reason) { case TP_CHANNEL_GROUP_CHANGE_REASON_BUSY: send_reason = ""; break; case TP_CHANNEL_GROUP_CHANGE_REASON_NO_ANSWER: send_reason = ""; break; default: send_reason = ""; } g_message ("SIGNALLING: send: Terminating call: %s", send_reason); } everyone = tp_intset_new_containing (self->priv->handle); tp_intset_add (everyone, self->group.self_handle); tp_group_mixin_change_members ((GObject *) self, "", NULL /* nobody added */, everyone /* removed */, NULL /* nobody locally pending */, NULL /* nobody remotely pending */, actor, reason); tp_intset_destroy (everyone); g_signal_emit (self, signals[SIGNAL_CALL_TERMINATED], 0); tp_svc_channel_emit_closed (self); } } static void dispose (GObject *object) { ExampleCallableMediaChannel *self = EXAMPLE_CALLABLE_MEDIA_CHANNEL (object); if (self->priv->disposed) return; self->priv->disposed = TRUE; g_hash_table_destroy (self->priv->streams); self->priv->streams = NULL; example_callable_media_channel_close (self, self->group.self_handle, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); ((GObjectClass *) example_callable_media_channel_parent_class)->dispose (object); } static void finalize (GObject *object) { ExampleCallableMediaChannel *self = EXAMPLE_CALLABLE_MEDIA_CHANNEL (object); g_free (self->priv->object_path); tp_group_mixin_finalize (object); ((GObjectClass *) example_callable_media_channel_parent_class)->finalize (object); } static gboolean add_member (GObject *object, TpHandle member, const gchar *message, GError **error) { ExampleCallableMediaChannel *self = EXAMPLE_CALLABLE_MEDIA_CHANNEL (object); TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (self->priv->conn, TP_HANDLE_TYPE_CONTACT); /* In connection managers that supported the RequestChannel method for * streamed media channels, it would be necessary to support adding the * called contact to the members of an outgoing call. However, in this * legacy-free example, we don't support that usage, so the only use for * AddMembers is to accept an incoming call. */ if (member == self->group.self_handle && tp_handle_set_is_member (self->group.local_pending, member)) { /* We're in local-pending, move to members to accept. */ TpIntSet *set = tp_intset_new_containing (member); GHashTableIter iter; gpointer v; g_assert (self->priv->progress == PROGRESS_CALLING); g_message ("SIGNALLING: send: Accepting incoming call from %s", tp_handle_inspect (contact_repo, self->priv->handle)); self->priv->progress = PROGRESS_ACTIVE; tp_group_mixin_change_members (object, "", set /* added */, NULL /* nobody removed */, NULL /* nobody added to local pending */, NULL /* nobody added to remote pending */, member /* actor */, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_intset_destroy (set); g_hash_table_iter_init (&iter, self->priv->streams); while (g_hash_table_iter_next (&iter, NULL, &v)) { /* we accept the proposed stream direction... */ example_callable_media_stream_accept_proposed_direction (v); /* ... and the stream tries to connect */ example_callable_media_stream_connect (v); } return TRUE; } /* Otherwise it's a meaningless request, so reject it. */ g_set_error (error, TP_ERROR, TP_ERROR_NOT_AVAILABLE, "Cannot add handle %u to channel", member); return FALSE; } static gboolean remove_member_with_reason (GObject *object, TpHandle member, const gchar *message, guint reason, GError **error) { ExampleCallableMediaChannel *self = EXAMPLE_CALLABLE_MEDIA_CHANNEL (object); /* The TpGroupMixin won't call this unless removing the member is allowed * by the group flags, which in this case means it must be our own handle * (because the other user never appears in local-pending). */ g_assert (member == self->group.self_handle); example_callable_media_channel_close (self, self->group.self_handle, reason); return TRUE; } static void example_callable_media_channel_class_init (ExampleCallableMediaChannelClass *klass) { static TpDBusPropertiesMixinPropImpl channel_props[] = { { "TargetHandleType", "handle-type", NULL }, { "TargetHandle", "handle", NULL }, { "ChannelType", "channel-type", NULL }, { "Interfaces", "interfaces", NULL }, { "TargetID", "target-id", NULL }, { "Requested", "requested", NULL }, { "InitiatorHandle", "initiator-handle", NULL }, { "InitiatorID", "initiator-id", NULL }, { NULL } }; static TpDBusPropertiesMixinIfaceImpl prop_interfaces[] = { { TP_IFACE_CHANNEL, tp_dbus_properties_mixin_getter_gobject_properties, NULL, channel_props, }, { NULL } }; GObjectClass *object_class = (GObjectClass *) klass; GParamSpec *param_spec; g_type_class_add_private (klass, sizeof (ExampleCallableMediaChannelPrivate)); object_class->constructed = constructed; object_class->set_property = set_property; object_class->get_property = get_property; object_class->dispose = dispose; object_class->finalize = finalize; g_object_class_override_property (object_class, PROP_OBJECT_PATH, "object-path"); g_object_class_override_property (object_class, PROP_CHANNEL_TYPE, "channel-type"); g_object_class_override_property (object_class, PROP_HANDLE_TYPE, "handle-type"); g_object_class_override_property (object_class, PROP_HANDLE, "handle"); g_object_class_override_property (object_class, PROP_CHANNEL_DESTROYED, "channel-destroyed"); g_object_class_override_property (object_class, PROP_CHANNEL_PROPERTIES, "channel-properties"); param_spec = g_param_spec_object ("connection", "TpBaseConnection object", "Connection object that owns this channel", TP_TYPE_BASE_CONNECTION, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_CONNECTION, param_spec); param_spec = g_param_spec_boxed ("interfaces", "Extra D-Bus interfaces", "Additional Channel.Interface.* interfaces", G_TYPE_STRV, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_INTERFACES, param_spec); param_spec = g_param_spec_string ("target-id", "Peer's ID", "The string obtained by inspecting the target handle", NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_TARGET_ID, param_spec); param_spec = g_param_spec_uint ("initiator-handle", "Initiator's handle", "The contact who initiated the channel", 0, G_MAXUINT32, 0, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_INITIATOR_HANDLE, param_spec); param_spec = g_param_spec_string ("initiator-id", "Initiator's ID", "The string obtained by inspecting the initiator-handle", NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_INITIATOR_ID, param_spec); param_spec = g_param_spec_boolean ("requested", "Requested?", "True if this channel was requested by the local user", FALSE, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_REQUESTED, param_spec); param_spec = g_param_spec_uint ("simulation-delay", "Simulation delay", "Delay between simulated network events", 0, G_MAXUINT32, 1000, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_SIMULATION_DELAY, param_spec); param_spec = g_param_spec_boolean ("initial-audio", "Initial audio?", "True if this channel had an audio stream when first announced", FALSE, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_INITIAL_AUDIO, param_spec); param_spec = g_param_spec_boolean ("initial-video", "Initial video?", "True if this channel had a video stream when first announced", FALSE, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_INITIAL_VIDEO, param_spec); signals[SIGNAL_CALL_TERMINATED] = g_signal_new ("call-terminated", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); klass->dbus_properties_class.interfaces = prop_interfaces; tp_dbus_properties_mixin_class_init (object_class, G_STRUCT_OFFSET (ExampleCallableMediaChannelClass, dbus_properties_class)); tp_group_mixin_class_init (object_class, G_STRUCT_OFFSET (ExampleCallableMediaChannelClass, group_class), add_member, NULL); tp_group_mixin_class_allow_self_removal (object_class); tp_group_mixin_class_set_remove_with_reason_func (object_class, remove_member_with_reason); tp_group_mixin_init_dbus_properties (object_class); } static void channel_close (TpSvcChannel *iface, DBusGMethodInvocation *context) { ExampleCallableMediaChannel *self = EXAMPLE_CALLABLE_MEDIA_CHANNEL (iface); example_callable_media_channel_close (self, self->group.self_handle, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_svc_channel_return_from_close (context); } static void channel_get_channel_type (TpSvcChannel *iface G_GNUC_UNUSED, DBusGMethodInvocation *context) { tp_svc_channel_return_from_get_channel_type (context, TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA); } static void channel_get_handle (TpSvcChannel *iface, DBusGMethodInvocation *context) { ExampleCallableMediaChannel *self = EXAMPLE_CALLABLE_MEDIA_CHANNEL (iface); tp_svc_channel_return_from_get_handle (context, TP_HANDLE_TYPE_CONTACT, self->priv->handle); } static void channel_get_interfaces (TpSvcChannel *iface G_GNUC_UNUSED, DBusGMethodInvocation *context) { tp_svc_channel_return_from_get_interfaces (context, example_callable_media_channel_interfaces); } static void channel_iface_init (gpointer iface, gpointer data) { TpSvcChannelClass *klass = iface; #define IMPLEMENT(x) tp_svc_channel_implement_##x (klass, channel_##x) IMPLEMENT (close); IMPLEMENT (get_channel_type); IMPLEMENT (get_handle); IMPLEMENT (get_interfaces); #undef IMPLEMENT } static void media_list_streams (TpSvcChannelTypeStreamedMedia *iface, DBusGMethodInvocation *context) { ExampleCallableMediaChannel *self = EXAMPLE_CALLABLE_MEDIA_CHANNEL (iface); GPtrArray *array = g_ptr_array_sized_new (g_hash_table_size ( self->priv->streams)); GHashTableIter iter; gpointer v; g_hash_table_iter_init (&iter, self->priv->streams); while (g_hash_table_iter_next (&iter, NULL, &v)) { ExampleCallableMediaStream *stream = v; GValueArray *va; g_object_get (stream, "stream-info", &va, NULL); g_ptr_array_add (array, va); } tp_svc_channel_type_streamed_media_return_from_list_streams (context, array); g_ptr_array_foreach (array, (GFunc) g_value_array_free, NULL); g_ptr_array_free (array, TRUE); } static void media_remove_streams (TpSvcChannelTypeStreamedMedia *iface, const GArray *stream_ids, DBusGMethodInvocation *context) { ExampleCallableMediaChannel *self = EXAMPLE_CALLABLE_MEDIA_CHANNEL (iface); guint i; for (i = 0; i < stream_ids->len; i++) { guint id = g_array_index (stream_ids, guint, i); if (g_hash_table_lookup (self->priv->streams, GUINT_TO_POINTER (id)) == NULL) { GError *error = g_error_new (TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "No stream with ID %u in this channel", id); dbus_g_method_return_error (context, error); g_error_free (error); return; } } for (i = 0; i < stream_ids->len; i++) { guint id = g_array_index (stream_ids, guint, i); example_callable_media_stream_close ( g_hash_table_lookup (self->priv->streams, GUINT_TO_POINTER (id))); } tp_svc_channel_type_streamed_media_return_from_remove_streams (context); } static void media_request_stream_direction (TpSvcChannelTypeStreamedMedia *iface, guint stream_id, guint stream_direction, DBusGMethodInvocation *context) { ExampleCallableMediaChannel *self = EXAMPLE_CALLABLE_MEDIA_CHANNEL (iface); ExampleCallableMediaStream *stream = g_hash_table_lookup ( self->priv->streams, GUINT_TO_POINTER (stream_id)); GError *error = NULL; if (stream == NULL) { g_set_error (&error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "No stream with ID %u in this channel", stream_id); goto error; } if (stream_direction > TP_MEDIA_STREAM_DIRECTION_BIDIRECTIONAL) { g_set_error (&error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "Stream direction %u is not valid", stream_direction); goto error; } /* In some protocols, streams cannot be neither sending nor receiving, so * if a stream is set to TP_MEDIA_STREAM_DIRECTION_NONE, this is equivalent * to removing it with RemoveStreams. (This is true in XMPP, for instance.) * * If this was the case, there would be code like this here: * * if (stream_direction == TP_MEDIA_STREAM_DIRECTION_NONE) * { * example_callable_media_stream_close (stream); * tp_svc_channel_type_streamed_media_return_from_request_stream_direction ( * context); * return; * } * * However, for this example we'll emulate a protocol where streams can be * directionless. */ if (!example_callable_media_stream_change_direction (stream, stream_direction, &error)) goto error; tp_svc_channel_type_streamed_media_return_from_request_stream_direction ( context); return; error: dbus_g_method_return_error (context, error); g_error_free (error); } static void stream_removed_cb (ExampleCallableMediaStream *stream, ExampleCallableMediaChannel *self) { guint id; g_object_get (stream, "id", &id, NULL); g_signal_handlers_disconnect_matched (stream, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, self); g_hash_table_remove (self->priv->streams, GUINT_TO_POINTER (id)); tp_svc_channel_type_streamed_media_emit_stream_removed (self, id); if (g_hash_table_size (self->priv->streams) == 0) { /* no streams left, so the call terminates */ example_callable_media_channel_close (self, 0, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); } } static void stream_direction_changed_cb (ExampleCallableMediaStream *stream, ExampleCallableMediaChannel *self) { guint id, direction, pending; g_object_get (stream, "id", &id, "direction", &direction, "pending-send", &pending, NULL); tp_svc_channel_type_streamed_media_emit_stream_direction_changed (self, id, direction, pending); } static void stream_state_changed_cb (ExampleCallableMediaStream *stream, GParamSpec *spec G_GNUC_UNUSED, ExampleCallableMediaChannel *self) { guint id, state; g_object_get (stream, "id", &id, "state", &state, NULL); tp_svc_channel_type_streamed_media_emit_stream_state_changed (self, id, state); } static gboolean simulate_contact_ended_cb (gpointer p) { ExampleCallableMediaChannel *self = p; /* if the call has been cancelled while we were waiting for the * contact to do so, do nothing! */ if (self->priv->progress == PROGRESS_ENDED) return FALSE; g_message ("SIGNALLING: receive: call terminated: "); example_callable_media_channel_close (self, self->priv->handle, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); return FALSE; } static gboolean simulate_contact_answered_cb (gpointer p) { ExampleCallableMediaChannel *self = p; TpIntSet *peer_set; GHashTableIter iter; gpointer v; TpHandleRepoIface *contact_repo; const gchar *peer; /* if the call has been cancelled while we were waiting for the * contact to answer, do nothing */ if (self->priv->progress == PROGRESS_ENDED) return FALSE; /* otherwise, we're waiting for a response from the contact, which now * arrives */ g_assert (self->priv->progress == PROGRESS_CALLING); g_message ("SIGNALLING: receive: contact answered our call"); self->priv->progress = PROGRESS_ACTIVE; peer_set = tp_intset_new_containing (self->priv->handle); tp_group_mixin_change_members ((GObject *) self, "", peer_set /* added */, NULL /* nobody removed */, NULL /* nobody added to local-pending */, NULL /* nobody added to remote-pending */, self->priv->handle /* actor */, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_intset_destroy (peer_set); g_hash_table_iter_init (&iter, self->priv->streams); while (g_hash_table_iter_next (&iter, NULL, &v)) { /* remote contact accepts our proposed stream direction... */ example_callable_media_stream_simulate_contact_agreed_to_send (v); /* ... and the stream tries to connect */ example_callable_media_stream_connect (v); } contact_repo = tp_base_connection_get_handles (self->priv->conn, TP_HANDLE_TYPE_CONTACT); peer = tp_handle_inspect (contact_repo, self->priv->handle); /* If the contact's ID contains the magic string "(terminate)", simulate * them hanging up after a moment. */ if (strstr (peer, "(terminate)") != NULL) { g_timeout_add_full (G_PRIORITY_DEFAULT, self->priv->simulation_delay, simulate_contact_ended_cb, g_object_ref (self), g_object_unref); } return FALSE; } static gboolean simulate_contact_busy_cb (gpointer p) { ExampleCallableMediaChannel *self = p; /* if the call has been cancelled while we were waiting for the * contact to answer, do nothing */ if (self->priv->progress == PROGRESS_ENDED) return FALSE; /* otherwise, we're waiting for a response from the contact, which now * arrives */ g_assert (self->priv->progress == PROGRESS_CALLING); g_message ("SIGNALLING: receive: call terminated: "); example_callable_media_channel_close (self, self->priv->handle, TP_CHANNEL_GROUP_CHANGE_REASON_BUSY); return FALSE; } static ExampleCallableMediaStream * example_callable_media_channel_add_stream (ExampleCallableMediaChannel *self, TpMediaStreamType media_type, gboolean locally_requested) { ExampleCallableMediaStream *stream; guint id = self->priv->next_stream_id++; guint state, direction, pending_send; if (locally_requested) { g_message ("SIGNALLING: send: new %s stream", media_type == TP_MEDIA_STREAM_TYPE_AUDIO ? "audio" : "video"); } stream = g_object_new (EXAMPLE_TYPE_CALLABLE_MEDIA_STREAM, "channel", self, "id", id, "handle", self->priv->handle, "type", media_type, "locally-requested", locally_requested, "simulation-delay", self->priv->simulation_delay, NULL); g_hash_table_insert (self->priv->streams, GUINT_TO_POINTER (id), stream); tp_svc_channel_type_streamed_media_emit_stream_added (self, id, self->priv->handle, media_type); g_object_get (stream, "state", &state, "direction", &direction, "pending-send", &pending_send, NULL); /* this is the "implicit" initial state mandated by telepathy-spec */ if (state != TP_MEDIA_STREAM_STATE_DISCONNECTED) { tp_svc_channel_type_streamed_media_emit_stream_state_changed (self, id, state); } /* this is the "implicit" initial direction mandated by telepathy-spec */ if (direction != TP_MEDIA_STREAM_DIRECTION_RECEIVE || pending_send != TP_MEDIA_STREAM_PENDING_LOCAL_SEND) { tp_svc_channel_type_streamed_media_emit_stream_direction_changed (self, id, direction, pending_send); } g_signal_connect (stream, "removed", G_CALLBACK (stream_removed_cb), self); g_signal_connect (stream, "notify::state", G_CALLBACK (stream_state_changed_cb), self); g_signal_connect (stream, "direction-changed", G_CALLBACK (stream_direction_changed_cb), self); if (self->priv->progress == PROGRESS_ACTIVE) { example_callable_media_stream_connect (stream); } return stream; } static void media_request_streams (TpSvcChannelTypeStreamedMedia *iface, guint contact_handle, const GArray *media_types, DBusGMethodInvocation *context) { ExampleCallableMediaChannel *self = EXAMPLE_CALLABLE_MEDIA_CHANNEL (iface); TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (self->priv->conn, TP_HANDLE_TYPE_CONTACT); GPtrArray *array; guint i; GError *error = NULL; if (!tp_handle_is_valid (contact_repo, contact_handle, &error)) goto error; if (contact_handle != self->priv->handle) { g_set_error (&error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "This channel is for handle #%u, we can't make a stream to #%u", self->priv->handle, contact_handle); goto error; } if (self->priv->progress == PROGRESS_ENDED) { g_set_error (&error, TP_ERROR, TP_ERROR_NOT_AVAILABLE, "Call has terminated"); goto error; } for (i = 0; i < media_types->len; i++) { guint media_type = g_array_index (media_types, guint, i); switch (media_type) { case TP_MEDIA_STREAM_TYPE_AUDIO: case TP_MEDIA_STREAM_TYPE_VIDEO: break; default: g_set_error (&error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "%u is not a valid Media_Stream_Type", media_type); goto error; } } array = g_ptr_array_sized_new (media_types->len); for (i = 0; i < media_types->len; i++) { guint media_type = g_array_index (media_types, guint, i); ExampleCallableMediaStream *stream; GValueArray *info; if (self->priv->progress < PROGRESS_CALLING) { TpIntSet *peer_set = tp_intset_new_containing (self->priv->handle); const gchar *peer; g_message ("SIGNALLING: send: new streamed media call"); self->priv->progress = PROGRESS_CALLING; tp_group_mixin_change_members ((GObject *) self, "", NULL /* nobody added */, NULL /* nobody removed */, NULL /* nobody added to local-pending */, peer_set /* added to remote-pending */, self->group.self_handle /* actor */, TP_CHANNEL_GROUP_CHANGE_REASON_NONE); tp_intset_destroy (peer_set); /* In this example there is no real contact, so just simulate them * answering after a short time - unless the contact's name * contains "(no answer)" or "(busy)" */ peer = tp_handle_inspect (contact_repo, self->priv->handle); if (strstr (peer, "(busy)") != NULL) { g_timeout_add_full (G_PRIORITY_DEFAULT, self->priv->simulation_delay, simulate_contact_busy_cb, g_object_ref (self), g_object_unref); } else if (strstr (peer, "(no answer)") != NULL) { /* do nothing - the call just rings forever */ } else { g_timeout_add_full (G_PRIORITY_DEFAULT, self->priv->simulation_delay, simulate_contact_answered_cb, g_object_ref (self), g_object_unref); } } stream = example_callable_media_channel_add_stream (self, media_type, TRUE); g_object_get (stream, "stream-info", &info, NULL); g_ptr_array_add (array, info); } tp_svc_channel_type_streamed_media_return_from_request_streams (context, array); g_boxed_free (TP_ARRAY_TYPE_MEDIA_STREAM_INFO_LIST, array); return; error: dbus_g_method_return_error (context, error); g_error_free (error); } static void media_iface_init (gpointer iface, gpointer data) { TpSvcChannelTypeStreamedMediaClass *klass = iface; #define IMPLEMENT(x) \ tp_svc_channel_type_streamed_media_implement_##x (klass, media_##x) IMPLEMENT (list_streams); IMPLEMENT (remove_streams); IMPLEMENT (request_stream_direction); IMPLEMENT (request_streams); #undef IMPLEMENT } static gboolean simulate_hold (gpointer p) { ExampleCallableMediaChannel *self = p; self->priv->hold_state = TP_LOCAL_HOLD_STATE_HELD; g_message ("SIGNALLING: hold state changed to held"); tp_svc_channel_interface_hold_emit_hold_state_changed (self, self->priv->hold_state, self->priv->hold_state_reason); return FALSE; } static gboolean simulate_unhold (gpointer p) { ExampleCallableMediaChannel *self = p; self->priv->hold_state = TP_LOCAL_HOLD_STATE_UNHELD; g_message ("SIGNALLING: hold state changed to unheld"); tp_svc_channel_interface_hold_emit_hold_state_changed (self, self->priv->hold_state, self->priv->hold_state_reason); return FALSE; } static gboolean simulate_inability_to_unhold (gpointer p) { ExampleCallableMediaChannel *self = p; self->priv->hold_state = TP_LOCAL_HOLD_STATE_PENDING_HOLD; g_message ("SIGNALLING: unable to unhold - hold state changed to " "pending hold"); tp_svc_channel_interface_hold_emit_hold_state_changed (self, self->priv->hold_state, self->priv->hold_state_reason); /* hold again */ g_timeout_add_full (G_PRIORITY_DEFAULT, self->priv->simulation_delay, simulate_hold, g_object_ref (self), g_object_unref); return FALSE; } static void hold_get_hold_state (TpSvcChannelInterfaceHold *iface, DBusGMethodInvocation *context) { ExampleCallableMediaChannel *self = EXAMPLE_CALLABLE_MEDIA_CHANNEL (iface); tp_svc_channel_interface_hold_return_from_get_hold_state (context, self->priv->hold_state, self->priv->hold_state_reason); } static void hold_request_hold (TpSvcChannelInterfaceHold *iface, gboolean hold, DBusGMethodInvocation *context) { ExampleCallableMediaChannel *self = EXAMPLE_CALLABLE_MEDIA_CHANNEL (iface); TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (self->priv->conn, TP_HANDLE_TYPE_CONTACT); GError *error = NULL; const gchar *peer; GSourceFunc callback; if ((hold && self->priv->hold_state == TP_LOCAL_HOLD_STATE_HELD) || (!hold && self->priv->hold_state == TP_LOCAL_HOLD_STATE_UNHELD)) { tp_svc_channel_interface_hold_return_from_request_hold (context); return; } peer = tp_handle_inspect (contact_repo, self->priv->handle); if (!hold && strstr (peer, "(no unhold)") != NULL) { g_set_error (&error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "unable to unhold"); goto error; } self->priv->hold_state_reason = TP_LOCAL_HOLD_STATE_REASON_REQUESTED; if (hold) { self->priv->hold_state = TP_LOCAL_HOLD_STATE_PENDING_HOLD; callback = simulate_hold; } else { self->priv->hold_state = TP_LOCAL_HOLD_STATE_PENDING_UNHOLD; peer = tp_handle_inspect (contact_repo, self->priv->handle); if (strstr (peer, "(inability to unhold)") != NULL) { callback = simulate_inability_to_unhold; } else { callback = simulate_unhold; } } g_message ("SIGNALLING: hold state changed to pending %s", (hold ? "hold" : "unhold")); tp_svc_channel_interface_hold_emit_hold_state_changed (iface, self->priv->hold_state, self->priv->hold_state_reason); g_timeout_add_full (G_PRIORITY_DEFAULT, self->priv->simulation_delay, callback, g_object_ref (self), g_object_unref); tp_svc_channel_interface_hold_return_from_request_hold (context); return; error: dbus_g_method_return_error (context, error); g_error_free (error); } void hold_iface_init (gpointer iface, gpointer data) { TpSvcChannelInterfaceHoldClass *klass = iface; #define IMPLEMENT(x) \ tp_svc_channel_interface_hold_implement_##x (klass, hold_##x) IMPLEMENT (get_hold_state); IMPLEMENT (request_hold); #undef IMPLEMENT } static void dtmf_start_tone (TpSvcChannelInterfaceDTMF *iface, guint stream_id, guchar event, DBusGMethodInvocation *context) { ExampleCallableMediaChannel *self = EXAMPLE_CALLABLE_MEDIA_CHANNEL (iface); ExampleCallableMediaStream *stream = g_hash_table_lookup (self->priv->streams, GUINT_TO_POINTER (stream_id)); GError *error = NULL; guint media_type; if (stream == NULL) { g_set_error (&error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "No stream with ID %u in this channel", stream_id); goto error; } g_object_get (G_OBJECT (stream), "type", &media_type, NULL); if (media_type != TP_MEDIA_STREAM_TYPE_AUDIO) { g_set_error (&error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "DTMF is only supported by audio streams"); goto error; } tp_svc_channel_interface_dtmf_return_from_start_tone (context); return; error: dbus_g_method_return_error (context, error); g_error_free (error); } static void dtmf_stop_tone (TpSvcChannelInterfaceDTMF *iface, guint stream_id, DBusGMethodInvocation *context) { ExampleCallableMediaChannel *self = EXAMPLE_CALLABLE_MEDIA_CHANNEL (iface); ExampleCallableMediaStream *stream = g_hash_table_lookup (self->priv->streams, GUINT_TO_POINTER (stream_id)); TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (self->priv->conn, TP_HANDLE_TYPE_CONTACT); GError *error = NULL; const gchar *peer; guint media_type; if (stream == NULL) { g_set_error (&error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "No stream with ID %u in this channel", stream_id); goto error; } g_object_get (G_OBJECT (stream), "type", &media_type, NULL); if (media_type != TP_MEDIA_STREAM_TYPE_AUDIO) { g_set_error (&error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "DTMF is only supported by audio streams"); goto error; } peer = tp_handle_inspect (contact_repo, self->priv->handle); if (strstr (peer, "(no continuous tone)") != NULL) { g_set_error (&error, TP_ERROR, TP_ERROR_NOT_AVAILABLE, "Continuous tones are not supported by this stream"); goto error; } tp_svc_channel_interface_dtmf_return_from_stop_tone (context); return; error: dbus_g_method_return_error (context, error); g_error_free (error); } static void dtmf_iface_init (gpointer iface, gpointer data) { TpSvcChannelInterfaceDTMFClass *klass = iface; #define IMPLEMENT(x) \ tp_svc_channel_interface_dtmf_implement_##x (klass, dtmf_##x) IMPLEMENT (start_tone); IMPLEMENT (stop_tone); #undef IMPLEMENT } telepathy-qt-0.9.3/tests/lib/glib/callable/media-stream.c0000644000175200001440000004560012000056607025521 0ustar00collabora-develusers00000000000000/* * media-stream.c - a stream in a streamed media call. * * In connection managers with MediaSignalling, this object would be a D-Bus * object in its own right. In this CM, MediaSignalling is not used, and this * object just represents internal state of the MediaChannel. * * Copyright © 2007-2009 Collabora Ltd. * Copyright © 2007-2009 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 */ #include "media-stream.h" #include #include #include "media-channel.h" G_DEFINE_TYPE (ExampleCallableMediaStream, example_callable_media_stream, G_TYPE_OBJECT) enum { PROP_CHANNEL = 1, PROP_ID, PROP_HANDLE, PROP_TYPE, PROP_STATE, PROP_PENDING_SEND, PROP_DIRECTION, PROP_STREAM_INFO, PROP_SIMULATION_DELAY, PROP_LOCALLY_REQUESTED, N_PROPS }; enum { SIGNAL_REMOVED, SIGNAL_DIRECTION_CHANGED, N_SIGNALS }; static guint signals[N_SIGNALS] = { 0 }; struct _ExampleCallableMediaStreamPrivate { TpBaseConnection *conn; ExampleCallableMediaChannel *channel; guint id; TpHandle handle; TpMediaStreamType type; TpMediaStreamState state; TpMediaStreamDirection direction; TpMediaStreamPendingSend pending_send; guint simulation_delay; gulong call_terminated_id; guint connected_event_id; gboolean locally_requested; gboolean removed; }; static void example_callable_media_stream_init (ExampleCallableMediaStream *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, EXAMPLE_TYPE_CALLABLE_MEDIA_STREAM, ExampleCallableMediaStreamPrivate); /* start off directionless */ self->priv->direction = TP_MEDIA_STREAM_DIRECTION_NONE; self->priv->pending_send = 0; self->priv->state = TP_MEDIA_STREAM_STATE_DISCONNECTED; } static void call_terminated_cb (ExampleCallableMediaChannel *channel, ExampleCallableMediaStream *self) { g_signal_handler_disconnect (channel, self->priv->call_terminated_id); self->priv->call_terminated_id = 0; example_callable_media_stream_close (self); } static void constructed (GObject *object) { ExampleCallableMediaStream *self = EXAMPLE_CALLABLE_MEDIA_STREAM (object); void (*chain_up) (GObject *) = ((GObjectClass *) example_callable_media_stream_parent_class)->constructed; if (chain_up != NULL) chain_up (object); g_object_get (self->priv->channel, "connection", &self->priv->conn, NULL); self->priv->call_terminated_id = g_signal_connect (self->priv->channel, "call-terminated", G_CALLBACK (call_terminated_cb), self); } static void get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { ExampleCallableMediaStream *self = EXAMPLE_CALLABLE_MEDIA_STREAM (object); switch (property_id) { case PROP_ID: g_value_set_uint (value, self->priv->id); break; case PROP_HANDLE: g_value_set_uint (value, self->priv->handle); break; case PROP_TYPE: g_value_set_uint (value, self->priv->type); break; case PROP_STATE: g_value_set_uint (value, self->priv->state); break; case PROP_PENDING_SEND: g_value_set_uint (value, self->priv->pending_send); break; case PROP_DIRECTION: g_value_set_uint (value, self->priv->direction); break; case PROP_CHANNEL: g_value_set_object (value, self->priv->channel); break; case PROP_STREAM_INFO: { GValueArray *va = g_value_array_new (6); guint i; for (i = 0; i < 6; i++) { g_value_array_append (va, NULL); g_value_init (va->values + i, G_TYPE_UINT); } g_value_set_uint (va->values + 0, self->priv->id); g_value_set_uint (va->values + 1, self->priv->handle); g_value_set_uint (va->values + 2, self->priv->type); g_value_set_uint (va->values + 3, self->priv->state); g_value_set_uint (va->values + 4, self->priv->direction); g_value_set_uint (va->values + 5, self->priv->pending_send); g_value_take_boxed (value, va); } break; case PROP_SIMULATION_DELAY: g_value_set_uint (value, self->priv->simulation_delay); break; case PROP_LOCALLY_REQUESTED: g_value_set_boolean (value, self->priv->locally_requested); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { ExampleCallableMediaStream *self = EXAMPLE_CALLABLE_MEDIA_STREAM (object); switch (property_id) { case PROP_ID: self->priv->id = g_value_get_uint (value); break; case PROP_HANDLE: self->priv->handle = g_value_get_uint (value); break; case PROP_TYPE: self->priv->type = g_value_get_uint (value); break; case PROP_CHANNEL: g_assert (self->priv->channel == NULL); self->priv->channel = g_value_dup_object (value); break; case PROP_SIMULATION_DELAY: self->priv->simulation_delay = g_value_get_uint (value); break; case PROP_LOCALLY_REQUESTED: self->priv->locally_requested = g_value_get_boolean (value); if (self->priv->locally_requested) { example_callable_media_stream_change_direction (self, TP_MEDIA_STREAM_DIRECTION_BIDIRECTIONAL, NULL); } else { example_callable_media_stream_receive_direction_request (self, TP_MEDIA_STREAM_DIRECTION_BIDIRECTIONAL); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void dispose (GObject *object) { ExampleCallableMediaStream *self = EXAMPLE_CALLABLE_MEDIA_STREAM (object); example_callable_media_stream_close (self); if (self->priv->channel != NULL) { if (self->priv->call_terminated_id != 0) { g_signal_handler_disconnect (self->priv->channel, self->priv->call_terminated_id); self->priv->call_terminated_id = 0; } g_object_unref (self->priv->channel); self->priv->channel = NULL; } if (self->priv->conn != NULL) { g_object_unref (self->priv->conn); self->priv->conn = NULL; } ((GObjectClass *) example_callable_media_stream_parent_class)->dispose (object); } static void example_callable_media_stream_class_init (ExampleCallableMediaStreamClass *klass) { GObjectClass *object_class = (GObjectClass *) klass; GParamSpec *param_spec; g_type_class_add_private (klass, sizeof (ExampleCallableMediaStreamPrivate)); object_class->constructed = constructed; object_class->set_property = set_property; object_class->get_property = get_property; object_class->dispose = dispose; param_spec = g_param_spec_object ("channel", "ExampleCallableMediaChannel", "Media channel that owns this stream", EXAMPLE_TYPE_CALLABLE_MEDIA_CHANNEL, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_CHANNEL, param_spec); param_spec = g_param_spec_uint ("id", "Stream ID", "ID of this stream", 0, G_MAXUINT32, 0, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_ID, param_spec); param_spec = g_param_spec_uint ("handle", "Peer's TpHandle", "The handle with which this stream communicates or 0 if not applicable", 0, G_MAXUINT32, 0, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_HANDLE, param_spec); param_spec = g_param_spec_uint ("type", "TpMediaStreamType", "Media stream type", 0, NUM_TP_MEDIA_STREAM_TYPES - 1, 0, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_TYPE, param_spec); param_spec = g_param_spec_uint ("state", "TpMediaStreamState", "Media stream connection state", 0, NUM_TP_MEDIA_STREAM_STATES - 1, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_STATE, param_spec); param_spec = g_param_spec_uint ("direction", "TpMediaStreamDirection", "Media stream direction", 0, NUM_TP_MEDIA_STREAM_DIRECTIONS - 1, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_DIRECTION, param_spec); param_spec = g_param_spec_uint ("pending-send", "TpMediaStreamPendingSend", "Requested media stream directions pending approval", 0, TP_MEDIA_STREAM_PENDING_LOCAL_SEND | TP_MEDIA_STREAM_PENDING_REMOTE_SEND, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_PENDING_SEND, param_spec); param_spec = g_param_spec_boxed ("stream-info", "Stream info", "6-entry GValueArray as returned by ListStreams and RequestStreams", TP_STRUCT_TYPE_MEDIA_STREAM_INFO, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_STREAM_INFO, param_spec); param_spec = g_param_spec_uint ("simulation-delay", "Simulation delay", "Delay between simulated network events", 0, G_MAXUINT32, 1000, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_SIMULATION_DELAY, param_spec); param_spec = g_param_spec_boolean ("locally-requested", "Locally requested?", "True if this channel was requested by the local user", FALSE, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_LOCALLY_REQUESTED, param_spec); signals[SIGNAL_REMOVED] = g_signal_new ("removed", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); signals[SIGNAL_DIRECTION_CHANGED] = g_signal_new ("direction-changed", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } void example_callable_media_stream_close (ExampleCallableMediaStream *self) { if (!self->priv->removed) { self->priv->removed = TRUE; g_message ("Sending to server: Closing stream %u", self->priv->id); if (self->priv->connected_event_id != 0) { g_source_remove (self->priv->connected_event_id); } /* this has to come last, because the MediaChannel may unref us in * response to the removed signal */ g_signal_emit (self, signals[SIGNAL_REMOVED], 0); } } void example_callable_media_stream_accept_proposed_direction ( ExampleCallableMediaStream *self) { if (self->priv->removed || !(self->priv->pending_send & TP_MEDIA_STREAM_PENDING_LOCAL_SEND)) return; g_message ("SIGNALLING: send: OK, I'll send you media on stream %u", self->priv->id); self->priv->direction |= TP_MEDIA_STREAM_DIRECTION_SEND; self->priv->pending_send &= ~TP_MEDIA_STREAM_PENDING_LOCAL_SEND; g_signal_emit (self, signals[SIGNAL_DIRECTION_CHANGED], 0); } void example_callable_media_stream_simulate_contact_agreed_to_send ( ExampleCallableMediaStream *self) { if (self->priv->removed || !(self->priv->pending_send & TP_MEDIA_STREAM_PENDING_REMOTE_SEND)) return; g_message ("SIGNALLING: receive: OK, I'll send you media on stream %u", self->priv->id); self->priv->direction |= TP_MEDIA_STREAM_DIRECTION_RECEIVE; self->priv->pending_send &= ~TP_MEDIA_STREAM_PENDING_REMOTE_SEND; g_signal_emit (self, signals[SIGNAL_DIRECTION_CHANGED], 0); } static gboolean simulate_contact_agreed_to_send_cb (gpointer p) { example_callable_media_stream_simulate_contact_agreed_to_send (p); return FALSE; } gboolean example_callable_media_stream_change_direction ( ExampleCallableMediaStream *self, TpMediaStreamDirection direction, GError **error) { gboolean sending = ((self->priv->direction & TP_MEDIA_STREAM_DIRECTION_SEND) != 0); gboolean receiving = ((self->priv->direction & TP_MEDIA_STREAM_DIRECTION_RECEIVE) != 0); gboolean want_to_send = ((direction & TP_MEDIA_STREAM_DIRECTION_SEND) != 0); gboolean want_to_receive = ((direction & TP_MEDIA_STREAM_DIRECTION_RECEIVE) != 0); gboolean pending_remote_send = ((self->priv->pending_send & TP_MEDIA_STREAM_PENDING_REMOTE_SEND) != 0); gboolean pending_local_send = ((self->priv->pending_send & TP_MEDIA_STREAM_PENDING_LOCAL_SEND) != 0); gboolean changed = FALSE; if (want_to_send) { if (!sending) { if (pending_local_send) { g_message ("SIGNALLING: send: I will now send you media on " "stream %u", self->priv->id); } g_message ("MEDIA: Sending media to peer for stream %u", self->priv->id); changed = TRUE; self->priv->direction |= TP_MEDIA_STREAM_DIRECTION_SEND; } } else { if (sending) { g_message ("SIGNALLING: send: I will no longer send you media on " "stream %u", self->priv->id); g_message ("MEDIA: No longer sending media to peer for stream %u", self->priv->id); changed = TRUE; self->priv->direction &= ~TP_MEDIA_STREAM_DIRECTION_SEND; } else if (pending_local_send) { g_message ("SIGNALLING: send: No, I refuse to send you media on " "stream %u", self->priv->id); changed = TRUE; self->priv->pending_send &= ~TP_MEDIA_STREAM_PENDING_LOCAL_SEND; } } if (want_to_receive) { if (!receiving && !pending_remote_send) { g_message ("SIGNALLING: send: Please start sending me stream %u", self->priv->id); changed = TRUE; self->priv->pending_send |= TP_MEDIA_STREAM_PENDING_REMOTE_SEND; g_timeout_add_full (G_PRIORITY_DEFAULT, self->priv->simulation_delay, simulate_contact_agreed_to_send_cb, g_object_ref (self), g_object_unref); } } else { if (receiving) { g_message ("SIGNALLING: send: Please stop sending me stream %u", self->priv->id); g_message ("MEDIA: Suppressing output of stream %u", self->priv->id); changed = TRUE; self->priv->direction &= ~TP_MEDIA_STREAM_DIRECTION_RECEIVE; } } if (changed) g_signal_emit (self, signals[SIGNAL_DIRECTION_CHANGED], 0); return TRUE; } static gboolean simulate_stream_connected_cb (gpointer p) { ExampleCallableMediaStream *self = EXAMPLE_CALLABLE_MEDIA_STREAM (p); g_message ("MEDIA: stream connected"); self->priv->state = TP_MEDIA_STREAM_STATE_CONNECTED; g_object_notify ((GObject *) self, "state"); return FALSE; } void example_callable_media_stream_connect (ExampleCallableMediaStream *self) { /* if already trying to connect, do nothing */ if (self->priv->connected_event_id != 0) return; /* simulate it taking a short time to connect */ self->priv->connected_event_id = g_timeout_add (self->priv->simulation_delay, simulate_stream_connected_cb, self); } void example_callable_media_stream_receive_direction_request ( ExampleCallableMediaStream *self, TpMediaStreamDirection direction) { /* The remote user wants to change the direction of this stream to * @direction. Shall we let him? */ gboolean sending = ((self->priv->direction & TP_MEDIA_STREAM_DIRECTION_SEND) != 0); gboolean receiving = ((self->priv->direction & TP_MEDIA_STREAM_DIRECTION_RECEIVE) != 0); gboolean send_requested = ((direction & TP_MEDIA_STREAM_DIRECTION_RECEIVE) != 0); gboolean receive_requested = ((direction & TP_MEDIA_STREAM_DIRECTION_RECEIVE) != 0); gboolean pending_remote_send = ((self->priv->pending_send & TP_MEDIA_STREAM_PENDING_REMOTE_SEND) != 0); gboolean pending_local_send = ((self->priv->pending_send & TP_MEDIA_STREAM_PENDING_LOCAL_SEND) != 0); gboolean changed = FALSE; if (send_requested) { g_message ("SIGNALLING: receive: Please start sending me stream %u", self->priv->id); if (!sending) { /* ask the user for permission */ self->priv->pending_send |= TP_MEDIA_STREAM_PENDING_LOCAL_SEND; changed = TRUE; } else { /* nothing to do, we're already sending on that stream */ } } else { g_message ("SIGNALLING: receive: Please stop sending me stream %u", self->priv->id); g_message ("SIGNALLING: send: OK, not sending stream %u", self->priv->id); if (sending) { g_message ("MEDIA: No longer sending media to peer for stream %u", self->priv->id); self->priv->direction &= ~TP_MEDIA_STREAM_DIRECTION_SEND; changed = TRUE; } else if (pending_local_send) { self->priv->pending_send &= ~TP_MEDIA_STREAM_PENDING_LOCAL_SEND; changed = TRUE; } else { /* nothing to do, we're not sending on that stream anyway */ } } if (receive_requested) { g_message ("SIGNALLING: receive: I will now send you media on stream %u", self->priv->id); if (!receiving) { self->priv->pending_send &= ~TP_MEDIA_STREAM_PENDING_REMOTE_SEND; self->priv->direction |= TP_MEDIA_STREAM_DIRECTION_RECEIVE; changed = TRUE; } } else { if (pending_remote_send) { g_message ("SIGNALLING: receive: No, I refuse to send you media on " "stream %u", self->priv->id); self->priv->pending_send &= ~TP_MEDIA_STREAM_PENDING_REMOTE_SEND; changed = TRUE; } else if (receiving) { g_message ("SIGNALLING: receive: I will no longer send you media on " "stream %u", self->priv->id); self->priv->direction &= ~TP_MEDIA_STREAM_DIRECTION_RECEIVE; changed = TRUE; } } if (changed) g_signal_emit (self, signals[SIGNAL_DIRECTION_CHANGED], 0); } telepathy-qt-0.9.3/tests/lib/glib/callable/media-manager.c0000644000175200001440000003510412000056607025636 0ustar00collabora-develusers00000000000000/* * media-manager.c - an example channel manager for StreamedMedia calls. * This channel manager emulates a protocol like XMPP Jingle, where you can * make several simultaneous calls to the same or different contacts. * * Copyright © 2007-2009 Collabora Ltd. * Copyright © 2007-2009 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 */ #include "media-manager.h" #include #include #include #include #include #include #include "media-channel.h" static void channel_manager_iface_init (gpointer, gpointer); G_DEFINE_TYPE_WITH_CODE (ExampleCallableMediaManager, example_callable_media_manager, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (TP_TYPE_CHANNEL_MANAGER, channel_manager_iface_init)) /* type definition stuff */ enum { PROP_CONNECTION = 1, PROP_SIMULATION_DELAY, N_PROPS }; struct _ExampleCallableMediaManagerPrivate { TpBaseConnection *conn; guint simulation_delay; /* Map from reffed ExampleCallableMediaChannel to the same pointer; used as a * set. */ GHashTable *channels; /* Next channel will be ("MediaChannel%u", next_channel_index) */ guint next_channel_index; gulong status_changed_id; gulong available_id; }; static void example_callable_media_manager_init (ExampleCallableMediaManager *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, EXAMPLE_TYPE_CALLABLE_MEDIA_MANAGER, ExampleCallableMediaManagerPrivate); self->priv->conn = NULL; self->priv->channels = g_hash_table_new_full (NULL, NULL, g_object_unref, NULL); self->priv->status_changed_id = 0; self->priv->available_id = 0; } static void example_callable_media_manager_close_all (ExampleCallableMediaManager *self) { if (self->priv->channels != NULL) { GHashTable *tmp = self->priv->channels; self->priv->channels = NULL; g_hash_table_unref (tmp); } if (self->priv->available_id != 0) { g_signal_handler_disconnect (self->priv->conn, self->priv->available_id); self->priv->available_id = 0; } if (self->priv->status_changed_id != 0) { g_signal_handler_disconnect (self->priv->conn, self->priv->status_changed_id); self->priv->status_changed_id = 0; } } static void dispose (GObject *object) { ExampleCallableMediaManager *self = EXAMPLE_CALLABLE_MEDIA_MANAGER (object); example_callable_media_manager_close_all (self); g_assert (self->priv->channels == NULL); ((GObjectClass *) example_callable_media_manager_parent_class)->dispose ( object); } static void get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { ExampleCallableMediaManager *self = EXAMPLE_CALLABLE_MEDIA_MANAGER (object); switch (property_id) { case PROP_CONNECTION: g_value_set_object (value, self->priv->conn); break; case PROP_SIMULATION_DELAY: g_value_set_uint (value, self->priv->simulation_delay); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } } static void set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { ExampleCallableMediaManager *self = EXAMPLE_CALLABLE_MEDIA_MANAGER (object); switch (property_id) { case PROP_CONNECTION: /* We don't ref the connection, because it owns a reference to the * channel manager, and it guarantees that the manager's lifetime is * less than its lifetime */ self->priv->conn = g_value_get_object (value); break; case PROP_SIMULATION_DELAY: self->priv->simulation_delay = g_value_get_uint (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } } static void status_changed_cb (TpBaseConnection *conn, guint status, guint reason, ExampleCallableMediaManager *self) { switch (status) { case TP_CONNECTION_STATUS_DISCONNECTED: { example_callable_media_manager_close_all (self); } break; default: break; } } static ExampleCallableMediaChannel *new_channel ( ExampleCallableMediaManager *self, TpHandle handle, TpHandle initiator, gpointer request_token, gboolean initial_audio, gboolean initial_video); static gboolean simulate_incoming_call_cb (gpointer p) { ExampleCallableMediaManager *self = p; TpHandleRepoIface *contact_repo; TpHandle caller; /* do nothing if we've been disconnected while waiting for the contact to * call us */ if (self->priv->available_id == 0) return FALSE; /* We're called by someone whose ID on the IM service is "caller" */ contact_repo = tp_base_connection_get_handles (self->priv->conn, TP_HANDLE_TYPE_CONTACT); caller = tp_handle_ensure (contact_repo, "caller", NULL, NULL); new_channel (self, caller, caller, NULL, TRUE, FALSE); return FALSE; } /* Whenever our presence changes from away to available, and whenever our * presence message changes while remaining available, simulate a call from * a contact */ static void available_cb (GObject *conn G_GNUC_UNUSED, const gchar *message, ExampleCallableMediaManager *self) { g_timeout_add_full (G_PRIORITY_DEFAULT, self->priv->simulation_delay, simulate_incoming_call_cb, g_object_ref (self), g_object_unref); } static void constructed (GObject *object) { ExampleCallableMediaManager *self = EXAMPLE_CALLABLE_MEDIA_MANAGER (object); void (*chain_up) (GObject *) = ((GObjectClass *) example_callable_media_manager_parent_class)->constructed; if (chain_up != NULL) { chain_up (object); } self->priv->status_changed_id = g_signal_connect (self->priv->conn, "status-changed", (GCallback) status_changed_cb, self); self->priv->available_id = g_signal_connect (self->priv->conn, "available", (GCallback) available_cb, self); } static void example_callable_media_manager_class_init ( ExampleCallableMediaManagerClass *klass) { GParamSpec *param_spec; GObjectClass *object_class = (GObjectClass *) klass; object_class->constructed = constructed; object_class->dispose = dispose; object_class->get_property = get_property; object_class->set_property = set_property; param_spec = g_param_spec_object ("connection", "Connection object", "The connection that owns this channel manager", TP_TYPE_BASE_CONNECTION, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_CONNECTION, param_spec); param_spec = g_param_spec_uint ("simulation-delay", "Simulation delay", "Delay between simulated network events", 0, G_MAXUINT32, 1000, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_SIMULATION_DELAY, param_spec); g_type_class_add_private (klass, sizeof (ExampleCallableMediaManagerPrivate)); } static void example_callable_media_manager_foreach_channel ( TpChannelManager *iface, TpExportableChannelFunc callback, gpointer user_data) { ExampleCallableMediaManager *self = EXAMPLE_CALLABLE_MEDIA_MANAGER (iface); GHashTableIter iter; gpointer chan; g_hash_table_iter_init (&iter, self->priv->channels); while (g_hash_table_iter_next (&iter, &chan, NULL)) callback (chan, user_data); } static void channel_closed_cb (ExampleCallableMediaChannel *chan, ExampleCallableMediaManager *self) { tp_channel_manager_emit_channel_closed_for_object (self, TP_EXPORTABLE_CHANNEL (chan)); if (self->priv->channels != NULL) g_hash_table_remove (self->priv->channels, chan); } static ExampleCallableMediaChannel * new_channel (ExampleCallableMediaManager *self, TpHandle handle, TpHandle initiator, gpointer request_token, gboolean initial_audio, gboolean initial_video) { ExampleCallableMediaChannel *chan; gchar *object_path; GSList *requests = NULL; /* FIXME: This could potentially wrap around, but only after 4 billion * calls, which is probably plenty. */ object_path = g_strdup_printf ("%s/MediaChannel%u", self->priv->conn->object_path, self->priv->next_channel_index++); chan = g_object_new (EXAMPLE_TYPE_CALLABLE_MEDIA_CHANNEL, "connection", self->priv->conn, "object-path", object_path, "handle", handle, "initiator-handle", initiator, "requested", (self->priv->conn->self_handle == initiator), "simulation-delay", self->priv->simulation_delay, "initial-audio", initial_audio, "initial-video", initial_video, NULL); g_free (object_path); g_signal_connect (chan, "closed", G_CALLBACK (channel_closed_cb), self); g_hash_table_insert (self->priv->channels, chan, chan); if (request_token != NULL) requests = g_slist_prepend (requests, request_token); tp_channel_manager_emit_new_channel (self, TP_EXPORTABLE_CHANNEL (chan), requests); g_slist_free (requests); return chan; } static const gchar * const fixed_properties[] = { TP_PROP_CHANNEL_CHANNEL_TYPE, TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, NULL }; static const gchar * const allowed_properties[] = { TP_PROP_CHANNEL_TARGET_HANDLE, TP_PROP_CHANNEL_TARGET_ID, NULL }; static void example_callable_media_manager_foreach_channel_class ( TpChannelManager *manager, TpChannelManagerChannelClassFunc func, gpointer user_data) { GHashTable *table = tp_asv_new ( TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING, TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA, TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, TP_HANDLE_TYPE_CONTACT, NULL); func (manager, table, allowed_properties, user_data); g_hash_table_destroy (table); } static gboolean example_callable_media_manager_request (ExampleCallableMediaManager *self, gpointer request_token, GHashTable *request_properties, gboolean require_new) { TpHandle handle; GError *error = NULL; if (tp_strdiff (tp_asv_get_string (request_properties, TP_PROP_CHANNEL_CHANNEL_TYPE), TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA)) { return FALSE; } if (tp_asv_get_uint32 (request_properties, TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, NULL) != TP_HANDLE_TYPE_CONTACT) { return FALSE; } handle = tp_asv_get_uint32 (request_properties, TP_PROP_CHANNEL_TARGET_HANDLE, NULL); g_assert (handle != 0); if (tp_channel_manager_asv_has_unknown_properties (request_properties, fixed_properties, allowed_properties, &error)) { goto error; } if (handle == self->priv->conn->self_handle) { /* In protocols with a concept of multiple "resources" signed in to * one account (XMPP, and possibly MSN) it is technically possible to * call yourself - e.g. if you're signed in on two PCs, you can call one * from the other. For simplicity, this example simulates a protocol * where this is not the case. */ g_set_error (&error, TP_ERROR, TP_ERROR_NOT_IMPLEMENTED, "In this protocol, you can't call yourself"); goto error; } if (!require_new) { /* see if we're already calling that handle */ GHashTableIter iter; gpointer chan; g_hash_table_iter_init (&iter, self->priv->channels); while (g_hash_table_iter_next (&iter, &chan, NULL)) { guint its_handle; g_object_get (chan, "handle", &its_handle, NULL); if (its_handle == handle) { tp_channel_manager_emit_request_already_satisfied (self, request_token, TP_EXPORTABLE_CHANNEL (chan)); return TRUE; } } } new_channel (self, handle, self->priv->conn->self_handle, request_token, FALSE, FALSE); return TRUE; error: tp_channel_manager_emit_request_failed (self, request_token, error->domain, error->code, error->message); g_error_free (error); return TRUE; } static gboolean example_callable_media_manager_create_channel (TpChannelManager *manager, gpointer request_token, GHashTable *request_properties) { return example_callable_media_manager_request ( EXAMPLE_CALLABLE_MEDIA_MANAGER (manager), request_token, request_properties, TRUE); } static gboolean example_callable_media_manager_ensure_channel (TpChannelManager *manager, gpointer request_token, GHashTable *request_properties) { return example_callable_media_manager_request ( EXAMPLE_CALLABLE_MEDIA_MANAGER (manager), request_token, request_properties, FALSE); } static void channel_manager_iface_init (gpointer g_iface, gpointer iface_data G_GNUC_UNUSED) { TpChannelManagerIface *iface = g_iface; iface->foreach_channel = example_callable_media_manager_foreach_channel; iface->foreach_channel_class = example_callable_media_manager_foreach_channel_class; iface->create_channel = example_callable_media_manager_create_channel; iface->ensure_channel = example_callable_media_manager_ensure_channel; /* In this channel manager, RequestChannel is not supported (it's new * code so there's no reason to be backwards compatible). The requirements * for RequestChannel are somewhat complicated for backwards compatibility * reasons: see telepathy-gabble or * http://telepathy.freedesktop.org/wiki/Requesting%20StreamedMedia%20channels * for the gory details. */ iface->request_channel = NULL; } telepathy-qt-0.9.3/tests/lib/glib/callable/connection-manager.c0000644000175200001440000000661412000056607026722 0ustar00collabora-develusers00000000000000/* * manager.c - an example connection manager * * Copyright © 2007-2009 Collabora Ltd. * Copyright © 2007-2009 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 */ #include "connection-manager.h" #include #include #include #include "conn.h" G_DEFINE_TYPE (ExampleCallableConnectionManager, example_callable_connection_manager, TP_TYPE_BASE_CONNECTION_MANAGER) struct _ExampleCallableConnectionManagerPrivate { int dummy; }; static void example_callable_connection_manager_init ( ExampleCallableConnectionManager *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, EXAMPLE_TYPE_CALLABLE_CONNECTION_MANAGER, ExampleCallableConnectionManagerPrivate); } typedef struct { gchar *account; guint simulation_delay; } ExampleParams; static gboolean account_param_filter (const TpCMParamSpec *paramspec, GValue *value, GError **error) { const gchar *id = g_value_get_string (value); g_value_take_string (value, example_callable_normalize_contact (NULL, id, NULL, error)); if (g_value_get_string (value) == NULL) return FALSE; return TRUE; } #include "_gen/param-spec-struct.h" static gpointer alloc_params (void) { ExampleParams *params = g_slice_new0 (ExampleParams); params->simulation_delay = 1000; return params; } static void free_params (gpointer p) { ExampleParams *params = p; g_free (params->account); g_slice_free (ExampleParams, params); } static const TpCMProtocolSpec example_protocols[] = { { "example", example_callable_example_params, alloc_params, free_params }, { NULL, NULL } }; static TpBaseConnection * new_connection (TpBaseConnectionManager *self, const gchar *proto, TpIntSet *params_present, gpointer parsed_params, GError **error) { ExampleParams *params = parsed_params; ExampleCallableConnection *conn; conn = EXAMPLE_CALLABLE_CONNECTION (g_object_new (EXAMPLE_TYPE_CALLABLE_CONNECTION, "account", params->account, "simulation-delay", params->simulation_delay, "protocol", proto, NULL)); return (TpBaseConnection *) conn; } static void example_callable_connection_manager_class_init ( ExampleCallableConnectionManagerClass *klass) { TpBaseConnectionManagerClass *base_class = (TpBaseConnectionManagerClass *) klass; g_type_class_add_private (klass, sizeof (ExampleCallableConnectionManagerPrivate)); base_class->new_connection = new_connection; base_class->cm_dbus_name = "example_callable"; base_class->protocol_params = example_protocols; } telepathy-qt-0.9.3/tests/lib/glib/callable/media-manager.h0000644000175200001440000000514612000056607025646 0ustar00collabora-develusers00000000000000/* * media-manager.h - header for an example channel manager * * Copyright © 2007-2009 Collabora Ltd. * Copyright © 2007-2009 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 __EXAMPLE_CALLABLE_MEDIA_MANAGER_H__ #define __EXAMPLE_CALLABLE_MEDIA_MANAGER_H__ #include G_BEGIN_DECLS typedef struct _ExampleCallableMediaManager ExampleCallableMediaManager; typedef struct _ExampleCallableMediaManagerPrivate ExampleCallableMediaManagerPrivate; typedef struct _ExampleCallableMediaManagerClass ExampleCallableMediaManagerClass; typedef struct _ExampleCallableMediaManagerClassPrivate ExampleCallableMediaManagerClassPrivate; struct _ExampleCallableMediaManagerClass { GObjectClass parent_class; ExampleCallableMediaManagerClassPrivate *priv; }; struct _ExampleCallableMediaManager { GObject parent; ExampleCallableMediaManagerPrivate *priv; }; GType example_callable_media_manager_get_type (void); /* TYPE MACROS */ #define EXAMPLE_TYPE_CALLABLE_MEDIA_MANAGER \ (example_callable_media_manager_get_type ()) #define EXAMPLE_CALLABLE_MEDIA_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), EXAMPLE_TYPE_CALLABLE_MEDIA_MANAGER, \ ExampleCallableMediaManager)) #define EXAMPLE_CALLABLE_MEDIA_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), EXAMPLE_TYPE_CALLABLE_MEDIA_MANAGER, \ ExampleCallableMediaManagerClass)) #define EXAMPLE_IS_CALLABLE_MEDIA_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), EXAMPLE_TYPE_CALLABLE_MEDIA_MANAGER)) #define EXAMPLE_IS_CALLABLE_MEDIA_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), EXAMPLE_TYPE_CALLABLE_MEDIA_MANAGER)) #define EXAMPLE_CALLABLE_MEDIA_MANAGER_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), EXAMPLE_TYPE_CALLABLE_MEDIA_MANAGER, \ ExampleCallableMediaManagerClass)) G_END_DECLS #endif telepathy-qt-0.9.3/tests/lib/glib/callable/conn.h0000644000175200001440000000524012000056607024107 0ustar00collabora-develusers00000000000000/* * conn.h - header for an example connection * * Copyright © 2007-2009 Collabora Ltd. * Copyright © 2007-2009 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef __EXAMPLE_CALLABLE_CONN_H__ #define __EXAMPLE_CALLABLE_CONN_H__ #include #include #include #include G_BEGIN_DECLS typedef struct _ExampleCallableConnection ExampleCallableConnection; typedef struct _ExampleCallableConnectionPrivate ExampleCallableConnectionPrivate; typedef struct _ExampleCallableConnectionClass ExampleCallableConnectionClass; typedef struct _ExampleCallableConnectionClassPrivate ExampleCallableConnectionClassPrivate; struct _ExampleCallableConnectionClass { TpBaseConnectionClass parent_class; TpPresenceMixinClass presence_mixin; TpContactsMixinClass contacts_mixin; ExampleCallableConnectionClassPrivate *priv; }; struct _ExampleCallableConnection { TpBaseConnection parent; TpPresenceMixin presence_mixin; TpContactsMixin contacts_mixin; ExampleCallableConnectionPrivate *priv; }; GType example_callable_connection_get_type (void); #define EXAMPLE_TYPE_CALLABLE_CONNECTION \ (example_callable_connection_get_type ()) #define EXAMPLE_CALLABLE_CONNECTION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), EXAMPLE_TYPE_CALLABLE_CONNECTION, \ ExampleCallableConnection)) #define EXAMPLE_CALLABLE_CONNECTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), EXAMPLE_TYPE_CALLABLE_CONNECTION, \ ExampleCallableConnectionClass)) #define EXAMPLE_IS_CALLABLE_CONNECTION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), EXAMPLE_TYPE_CALLABLE_CONNECTION)) #define EXAMPLE_IS_CALLABLE_CONNECTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), EXAMPLE_TYPE_CALLABLE_CONNECTION)) #define EXAMPLE_CALLABLE_CONNECTION_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), EXAMPLE_TYPE_CALLABLE_CONNECTION, \ ExampleCallableConnectionClass)) gchar *example_callable_normalize_contact (TpHandleRepoIface *repo, const gchar *id, gpointer context, GError **error); /* Must be kept in sync with the array presence_statuses in conn.c */ typedef enum { EXAMPLE_CALLABLE_PRESENCE_OFFLINE = 0, EXAMPLE_CALLABLE_PRESENCE_UNKNOWN, EXAMPLE_CALLABLE_PRESENCE_ERROR, EXAMPLE_CALLABLE_PRESENCE_AWAY, EXAMPLE_CALLABLE_PRESENCE_AVAILABLE } ExampleCallablePresence; G_END_DECLS #endif telepathy-qt-0.9.3/tests/lib/glib/contacts-conn.h0000644000175200001440000001647312000056607024176 0ustar00collabora-develusers00000000000000/* * contacts-conn.h - header for a connection with contact info * * Copyright (C) 2007-2008 Collabora Ltd. * Copyright (C) 2007-2008 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef __TP_TESTS_CONTACTS_CONN_H__ #define __TP_TESTS_CONTACTS_CONN_H__ #include #include #include #include #include "simple-conn.h" #include "contact-list-manager.h" G_BEGIN_DECLS typedef struct _TpTestsContactsConnection TpTestsContactsConnection; typedef struct _TpTestsContactsConnectionClass TpTestsContactsConnectionClass; typedef struct _TpTestsContactsConnectionPrivate TpTestsContactsConnectionPrivate; struct _TpTestsContactsConnectionClass { TpTestsSimpleConnectionClass parent_class; TpPresenceMixinClass presence_mixin; TpContactsMixinClass contacts_mixin; TpDBusPropertiesMixinClass properties_class; }; struct _TpTestsContactsConnection { TpTestsSimpleConnection parent; TpPresenceMixin presence_mixin; TpContactsMixin contacts_mixin; guint refresh_contact_info_called; TpTestsContactsConnectionPrivate *priv; }; GType tp_tests_contacts_connection_get_type (void); /* Must match my_statuses in the .c */ typedef enum { TP_TESTS_CONTACTS_CONNECTION_STATUS_AVAILABLE, TP_TESTS_CONTACTS_CONNECTION_STATUS_BUSY, TP_TESTS_CONTACTS_CONNECTION_STATUS_AWAY, TP_TESTS_CONTACTS_CONNECTION_STATUS_OFFLINE, TP_TESTS_CONTACTS_CONNECTION_STATUS_UNKNOWN, TP_TESTS_CONTACTS_CONNECTION_STATUS_ERROR } TpTestsContactsConnectionPresenceStatusIndex; /* TYPE MACROS */ #define TP_TESTS_TYPE_CONTACTS_CONNECTION \ (tp_tests_contacts_connection_get_type ()) #define TP_TESTS_CONTACTS_CONNECTION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), TP_TESTS_TYPE_CONTACTS_CONNECTION, \ TpTestsContactsConnection)) #define TP_TESTS_CONTACTS_CONNECTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), TP_TESTS_TYPE_CONTACTS_CONNECTION, \ TpTestsContactsConnectionClass)) #define TP_TESTS_IS_CONTACTS_CONNECTION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), TP_TESTS_TYPE_CONTACTS_CONNECTION)) #define TP_TESTS_IS_CONTACTS_CONNECTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), TP_TESTS_TYPE_CONTACTS_CONNECTION)) #define TP_TESTS_CONTACTS_CONNECTION_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_CONTACTS_CONNECTION, \ TpTestsContactsConnectionClass)) TestContactListManager *tp_tests_contacts_connection_get_contact_list_manager ( TpTestsContactsConnection *self); void tp_tests_contacts_connection_change_aliases ( TpTestsContactsConnection *self, guint n, const TpHandle *handles, const gchar * const *aliases); void tp_tests_contacts_connection_change_presences ( TpTestsContactsConnection *self, guint n, const TpHandle *handles, const TpTestsContactsConnectionPresenceStatusIndex *indexes, const gchar * const *messages); void tp_tests_contacts_connection_change_avatar_tokens ( TpTestsContactsConnection *self, guint n, const TpHandle *handles, const gchar * const *tokens); void tp_tests_contacts_connection_change_avatar_data ( TpTestsContactsConnection *self, TpHandle handle, GArray *data, const gchar *mime_type, const gchar *token, gboolean emit_avatar_updated); void tp_tests_contacts_connection_change_locations ( TpTestsContactsConnection *self, guint n, const TpHandle *handles, GHashTable **locations); void tp_tests_contacts_connection_change_capabilities ( TpTestsContactsConnection *self, GHashTable *capabilities); void tp_tests_contacts_connection_change_contact_info ( TpTestsContactsConnection *self, TpHandle handle, GPtrArray *info); void tp_tests_contacts_connection_set_default_contact_info ( TpTestsContactsConnection *self, GPtrArray *info); void tp_tests_contacts_connection_change_client_types ( TpTestsContactsConnection *self, TpHandle handle, gchar **client_types); /* Legacy version (no Contacts interface, and no immortal handles) */ typedef struct _TpTestsLegacyContactsConnection TpTestsLegacyContactsConnection; typedef struct _TpTestsLegacyContactsConnectionClass TpTestsLegacyContactsConnectionClass; typedef struct _TpTestsLegacyContactsConnectionPrivate TpTestsLegacyContactsConnectionPrivate; struct _TpTestsLegacyContactsConnectionClass { TpTestsContactsConnectionClass parent_class; }; struct _TpTestsLegacyContactsConnection { TpTestsContactsConnection parent; TpTestsLegacyContactsConnectionPrivate *priv; }; GType tp_tests_legacy_contacts_connection_get_type (void); /* TYPE MACROS */ #define TP_TESTS_TYPE_LEGACY_CONTACTS_CONNECTION \ (tp_tests_legacy_contacts_connection_get_type ()) #define LEGACY_TP_TESTS_CONTACTS_CONNECTION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), TP_TESTS_TYPE_LEGACY_CONTACTS_CONNECTION, \ TpTestsLegacyContactsConnection)) #define LEGACY_TP_TESTS_CONTACTS_CONNECTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), TP_TESTS_TYPE_LEGACY_CONTACTS_CONNECTION, \ TpTestsLegacyContactsConnectionClass)) #define TP_TESTS_LEGACY_CONTACTS_IS_CONNECTION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), TP_TESTS_TYPE_LEGACY_CONTACTS_CONNECTION)) #define TP_TESTS_LEGACY_CONTACTS_IS_CONNECTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), TP_TESTS_TYPE_LEGACY_CONTACTS_CONNECTION)) #define LEGACY_TP_TESTS_CONTACTS_CONNECTION_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_LEGACY_CONTACTS_CONNECTION, \ TpTestsLegacyContactsConnectionClass)) /* No Requests version */ typedef struct _TpTestsNoRequestsConnection TpTestsNoRequestsConnection; typedef struct _TpTestsNoRequestsConnectionClass TpTestsNoRequestsConnectionClass; typedef struct _TpTestsNoRequestsConnectionPrivate TpTestsNoRequestsConnectionPrivate; struct _TpTestsNoRequestsConnectionClass { TpTestsContactsConnectionClass parent_class; }; struct _TpTestsNoRequestsConnection { TpTestsContactsConnection parent; TpTestsNoRequestsConnectionPrivate *priv; }; GType tp_tests_no_requests_connection_get_type (void); /* TYPE MACROS */ #define TP_TESTS_TYPE_NO_REQUESTS_CONNECTION \ (tp_tests_no_requests_connection_get_type ()) #define TP_TESTS_NO_REQUESTS_CONNECTION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), TP_TESTS_TYPE_NO_REQUESTS_CONNECTION, \ TpTestsNoRequestsConnection)) #define TP_TESTS_NO_REQUESTS_CONNECTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), TP_TESTS_TYPE_NO_REQUESTS_CONNECTION, \ TpTestsNoRequestsConnectionClass)) #define TP_TESTS_NO_REQUESTS_IS_CONNECTION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), TP_TESTS_TYPE_NO_REQUESTS_CONNECTION)) #define TP_TESTS_NO_REQUESTS_IS_CONNECTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), TP_TESTS_TYPE_NO_REQUESTS_CONNECTION)) #define TP_TESTS_NO_REQUESTS_CONNECTION_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_NO_REQUESTS_CONNECTION, \ TpTestsNoRequestsConnectionClass)) G_END_DECLS #endif /* ifndef __TP_TESTS_CONTACTS_CONN_H__ */ telepathy-qt-0.9.3/tests/lib/glib/simple-account-manager.h0000644000175200001440000000404712000056607025752 0ustar00collabora-develusers00000000000000/* * simple-account-manager.h - header for a simple account manager service. * * Copyright (C) 2007-2009 Collabora Ltd. * Copyright (C) 2007-2008 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef __TP_TESTS_SIMPLE_ACCOUNT_MANAGER_H__ #define __TP_TESTS_SIMPLE_ACCOUNT_MANAGER_H__ #include #include G_BEGIN_DECLS typedef struct _TpTestsSimpleAccountManager TpTestsSimpleAccountManager; typedef struct _TpTestsSimpleAccountManagerClass TpTestsSimpleAccountManagerClass; typedef struct _TpTestsSimpleAccountManagerPrivate TpTestsSimpleAccountManagerPrivate; struct _TpTestsSimpleAccountManagerClass { GObjectClass parent_class; TpDBusPropertiesMixinClass dbus_props_class; }; struct _TpTestsSimpleAccountManager { GObject parent; TpTestsSimpleAccountManagerPrivate *priv; }; GType tp_tests_simple_account_manager_get_type (void); /* TYPE MACROS */ #define TP_TESTS_TYPE_SIMPLE_ACCOUNT_MANAGER \ (tp_tests_simple_account_manager_get_type ()) #define SIMPLE_ACCOUNT_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), TP_TESTS_TYPE_SIMPLE_ACCOUNT_MANAGER, \ TpTestsSimpleAccountManager)) #define SIMPLE_ACCOUNT_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), TP_TESTS_TYPE_SIMPLE_ACCOUNT_MANAGER, \ TpTestsSimpleAccountManagerClass)) #define SIMPLE_IS_ACCOUNT_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), TP_TESTS_TYPE_SIMPLE_ACCOUNT_MANAGER)) #define SIMPLE_IS_ACCOUNT_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), TP_TESTS_TYPE_SIMPLE_ACCOUNT_MANAGER)) #define SIMPLE_ACCOUNT_MANAGER_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_SIMPLE_ACCOUNT_MANAGER, \ TpTestsSimpleAccountManagerClass)) G_END_DECLS #endif /* #ifndef __TP_TESTS_SIMPLE_ACCOUNT_MANAGER_H__ */ telepathy-qt-0.9.3/tests/lib/glib/simple-manager.h0000644000175200001440000000440012000056607024311 0ustar00collabora-develusers00000000000000/* * simple-manager.h - header for a simple connection manager * Copyright (C) 2007-2008 Collabora Ltd. * Copyright (C) 2007-2008 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef __TP_TESTS_SIMPLE_CONNECTION_MANAGER_H__ #define __TP_TESTS_SIMPLE_CONNECTION_MANAGER_H__ #include #include G_BEGIN_DECLS typedef struct _TpTestsSimpleConnectionManager TpTestsSimpleConnectionManager; typedef struct _TpTestsSimpleConnectionManagerPrivate TpTestsSimpleConnectionManagerPrivate; typedef struct _TpTestsSimpleConnectionManagerClass TpTestsSimpleConnectionManagerClass; typedef struct _TpTestsSimpleConnectionManagerClassPrivate TpTestsSimpleConnectionManagerClassPrivate; struct _TpTestsSimpleConnectionManagerClass { TpBaseConnectionManagerClass parent_class; TpTestsSimpleConnectionManagerClassPrivate *priv; }; struct _TpTestsSimpleConnectionManager { TpBaseConnectionManager parent; TpTestsSimpleConnectionManagerPrivate *priv; }; GType tp_tests_simple_connection_manager_get_type (void); /* TYPE MACROS */ #define TP_TESTS_TYPE_SIMPLE_CONNECTION_MANAGER \ (tp_tests_simple_connection_manager_get_type ()) #define TP_TESTS_SIMPLE_CONNECTION_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), TP_TESTS_TYPE_SIMPLE_CONNECTION_MANAGER, \ simpleConnectionManager)) #define TP_TESTS_SIMPLE_CONNECTION_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), TP_TESTS_TYPE_SIMPLE_CONNECTION_MANAGER, \ TpTestsSimpleConnectionManagerClass)) #define TP_TESTS_SIMPLE_IS_CONNECTION_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), TP_TESTS_TYPE_SIMPLE_CONNECTION_MANAGER)) #define TP_TESTS_SIMPLE_IS_CONNECTION_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), TP_TESTS_TYPE_SIMPLE_CONNECTION_MANAGER)) #define TP_TESTS_SIMPLE_CONNECTION_MANAGER_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_SIMPLE_CONNECTION_MANAGER, \ TpTestsSimpleConnectionManagerClass)) G_END_DECLS #endif /* #ifndef __TP_TESTS_SIMPLE_CONNECTION_MANAGER_H__*/ telepathy-qt-0.9.3/tests/lib/glib/bug16307-conn.c0000644000175200001440000001452712000056607023527 0ustar00collabora-develusers00000000000000/* * bug16307-conn.c - connection that reproduces the #15307 bug * * Copyright (C) 2007-2008 Collabora Ltd. * Copyright (C) 2007-2008 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #include "bug16307-conn.h" #include #include #include #include #include #include #include static void service_iface_init (gpointer, gpointer); G_DEFINE_TYPE_WITH_CODE (TpTestsBug16307Connection, tp_tests_bug16307_connection, TP_TESTS_TYPE_SIMPLE_CONNECTION, G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION, service_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_ALIASING, NULL); ); /* type definition stuff */ enum { SIGNAL_GET_STATUS_RECEIVED, N_SIGNALS }; static guint signals[N_SIGNALS] = {0}; struct _TpTestsBug16307ConnectionPrivate { /* In a real connection manager, the underlying implementation start * connecting, then go to state CONNECTED when finished. Here there isn't * actually a connection, so the connection process is fake and the time * when it connects is, for this test purpose, when the D-Bus method GetStatus * is called. * * Also, the GetStatus D-Bus reply is delayed until * tp_tests_bug16307_connection_inject_get_status_return() is called */ DBusGMethodInvocation *get_status_invocation; }; static void tp_tests_bug16307_connection_init (TpTestsBug16307Connection *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, TP_TESTS_TYPE_BUG16307_CONNECTION, TpTestsBug16307ConnectionPrivate); } static void finalize (GObject *object) { G_OBJECT_CLASS (tp_tests_bug16307_connection_parent_class)->finalize (object); } static gboolean pretend_connected (gpointer data) { TpTestsBug16307Connection *self = TP_TESTS_BUG16307_CONNECTION (data); TpBaseConnection *conn = (TpBaseConnection *) self; TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (conn, TP_HANDLE_TYPE_CONTACT); gchar *account; g_object_get (self, "account", &account, NULL); conn->self_handle = tp_handle_ensure (contact_repo, account, NULL, NULL); g_free (account); tp_base_connection_change_status (conn, TP_CONNECTION_STATUS_CONNECTED, TP_CONNECTION_STATUS_REASON_REQUESTED); return FALSE; } void tp_tests_bug16307_connection_inject_get_status_return (TpTestsBug16307Connection *self) { TpBaseConnection *self_base = TP_BASE_CONNECTION (self); DBusGMethodInvocation *context; gulong get_signal_id; /* if we don't have a pending get_status yet, wait for it */ if (self->priv->get_status_invocation == NULL) { GMainLoop *loop = g_main_loop_new (NULL, FALSE); get_signal_id = g_signal_connect_swapped (self, "get-status-received", G_CALLBACK (g_main_loop_quit), loop); g_main_loop_run (loop); g_signal_handler_disconnect (self, get_signal_id); g_main_loop_unref (loop); } context = self->priv->get_status_invocation; g_assert (context != NULL); if (self_base->status == TP_INTERNAL_CONNECTION_STATUS_NEW) { tp_svc_connection_return_from_get_status ( context, TP_CONNECTION_STATUS_DISCONNECTED); } else { tp_svc_connection_return_from_get_status ( context, self_base->status); } self->priv->get_status_invocation = NULL; } static gboolean start_connecting (TpBaseConnection *conn, GError **error) { tp_base_connection_change_status (conn, TP_CONNECTION_STATUS_CONNECTING, TP_CONNECTION_STATUS_REASON_REQUESTED); return TRUE; } static void tp_tests_bug16307_connection_class_init (TpTestsBug16307ConnectionClass *klass) { TpBaseConnectionClass *base_class = (TpBaseConnectionClass *) klass; GObjectClass *object_class = (GObjectClass *) klass; static const gchar *interfaces_always_present[] = { TP_IFACE_CONNECTION_INTERFACE_ALIASING, TP_IFACE_CONNECTION_INTERFACE_CAPABILITIES, TP_IFACE_CONNECTION_INTERFACE_PRESENCE, TP_IFACE_CONNECTION_INTERFACE_AVATARS, NULL }; static TpDBusPropertiesMixinPropImpl connection_properties[] = { { "Status", "dbus-status-except-i-broke-it", NULL }, { NULL } }; object_class->finalize = finalize; g_type_class_add_private (klass, sizeof (TpTestsBug16307ConnectionPrivate)); base_class->start_connecting = start_connecting; base_class->interfaces_always_present = interfaces_always_present; signals[SIGNAL_GET_STATUS_RECEIVED] = g_signal_new ("get-status-received", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); /* break the Connection D-Bus properties implementation, so that we always * cause the slower introspection codepath (the one that actually calls * GetStatus) in TpConnection to be invoked */ tp_dbus_properties_mixin_implement_interface (object_class, TP_IFACE_QUARK_CONNECTION, NULL, NULL, connection_properties); } /** * tp_tests_bug16307_connection_get_status * * Implements D-Bus method GetStatus * on interface org.freedesktop.Telepathy.Connection */ static void tp_tests_bug16307_connection_get_status (TpSvcConnection *iface, DBusGMethodInvocation *context) { TpBaseConnection *self_base = TP_BASE_CONNECTION (iface); TpTestsBug16307Connection *self = TP_TESTS_BUG16307_CONNECTION (iface); /* auto-connect on get_status */ if ((self_base->status == TP_INTERNAL_CONNECTION_STATUS_NEW || self_base->status == TP_CONNECTION_STATUS_DISCONNECTED)) { pretend_connected (self); } /* D-Bus return call later */ g_assert (self->priv->get_status_invocation == NULL); g_assert (context != NULL); self->priv->get_status_invocation = context; g_signal_emit (self, signals[SIGNAL_GET_STATUS_RECEIVED], 0); } static void service_iface_init (gpointer g_iface, gpointer iface_data) { TpSvcConnectionClass *klass = g_iface; #define IMPLEMENT(prefix,x) tp_svc_connection_implement_##x (klass, \ tp_tests_bug16307_connection_##prefix##x) IMPLEMENT(,get_status); #undef IMPLEMENT } telepathy-qt-0.9.3/tests/lib/glib/simple-channel-dispatch-operation.h0000644000175200001440000000556612000056607030120 0ustar00collabora-develusers00000000000000/* * simple-channel-dispatch-operation.h - a simple channel dispatch operation * service. * * Copyright © 2010 Collabora Ltd. * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef __TP_TESTS_SIMPLE_CHANNEL_DISPATCH_OPERATION_H__ #define __TP_TESTS_SIMPLE_CHANNEL_DISPATCH_OPERATION_H__ #include #include #include G_BEGIN_DECLS typedef struct _SimpleChannelDispatchOperation TpTestsSimpleChannelDispatchOperation; typedef struct _SimpleChannelDispatchOperationClass TpTestsSimpleChannelDispatchOperationClass; typedef struct _SimpleChannelDispatchOperationPrivate TpTestsSimpleChannelDispatchOperationPrivate; struct _SimpleChannelDispatchOperationClass { GObjectClass parent_class; TpDBusPropertiesMixinClass dbus_props_class; }; struct _SimpleChannelDispatchOperation { GObject parent; TpTestsSimpleChannelDispatchOperationPrivate *priv; }; GType tp_tests_simple_channel_dispatch_operation_get_type (void); /* TYPE MACROS */ #define TP_TESTS_TYPE_SIMPLE_CHANNEL_DISPATCH_OPERATION \ (tp_tests_simple_channel_dispatch_operation_get_type ()) #define TP_TESTS_SIMPLE_CHANNEL_DISPATCH_OPERATION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), TP_TESTS_TYPE_SIMPLE_CHANNEL_DISPATCH_OPERATION, \ TpTestsSimpleChannelDispatchOperation)) #define TP_TESTS_SIMPLE_CHANNEL_DISPATCH_OPERATION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), TP_TESTS_TYPE_SIMPLE_CHANNEL_DISPATCH_OPERATION, \ TpTestsSimpleChannelDispatchOperationClass)) #define SIMPLE_IS_CHANNEL_DISPATCH_OPERATION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), TP_TESTS_TYPE_SIMPLE_CHANNEL_DISPATCH_OPERATION)) #define SIMPLE_IS_CHANNEL_DISPATCH_OPERATION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), TP_TESTS_TYPE_SIMPLE_CHANNEL_DISPATCH_OPERATION)) #define TP_TESTS_SIMPLE_CHANNEL_DISPATCH_OPERATION_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_SIMPLE_CHANNEL_DISPATCH_OPERATION, \ TpTestsSimpleChannelDispatchOperationClass)) void tp_tests_simple_channel_dispatch_operation_set_conn_path ( TpTestsSimpleChannelDispatchOperation *self, const gchar *conn_path); void tp_tests_simple_channel_dispatch_operation_add_channel ( TpTestsSimpleChannelDispatchOperation *self, TpChannel *chan); void tp_tests_simple_channel_dispatch_operation_lost_channel ( TpTestsSimpleChannelDispatchOperation *self, TpChannel *chan); void tp_tests_simple_channel_dispatch_operation_set_account_path ( TpTestsSimpleChannelDispatchOperation *self, const gchar *account_path); G_END_DECLS #endif /* #ifndef __TP_TESTS_SIMPLE_CHANNEL_DISPATCH_OPERATION_H__ */ telepathy-qt-0.9.3/tests/lib/glib/simple-account-manager.c0000644000175200001440000001264612000056607025751 0ustar00collabora-develusers00000000000000/* * simple-account-manager.c - a simple account manager service. * * Copyright (C) 2007-2009 Collabora Ltd. * Copyright (C) 2007-2008 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #include "simple-account-manager.h" #include #include #include #include static void account_manager_iface_init (gpointer, gpointer); G_DEFINE_TYPE_WITH_CODE (TpTestsSimpleAccountManager, tp_tests_simple_account_manager, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_ACCOUNT_MANAGER, account_manager_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_DBUS_PROPERTIES, tp_dbus_properties_mixin_iface_init) ) /* TP_IFACE_ACCOUNT_MANAGER is implied */ static const char *ACCOUNT_MANAGER_INTERFACES[] = { NULL }; static gchar *VALID_ACCOUNTS[] = { "/org/freedesktop/Telepathy/Account/fakecm/fakeproto/validaccount", NULL }; static gchar *INVALID_ACCOUNTS[] = { "/org/freedesktop/Telepathy/Account/fakecm/fakeproto/invalidaccount", NULL }; enum { PROP_0, PROP_INTERFACES, PROP_VALID_ACCOUNTS, PROP_INVALID_ACCOUNTS, }; struct _TpTestsSimpleAccountManagerPrivate { int dummy; }; static void tp_tests_simple_account_manager_create_account (TpSvcAccountManager *self, const gchar *in_Connection_Manager, const gchar *in_Protocol, const gchar *in_Display_Name, GHashTable *in_Parameters, GHashTable *in_Properties, DBusGMethodInvocation *context) { const gchar *out_Account = "/some/fake/account/i/think"; tp_svc_account_manager_return_from_create_account (context, out_Account); } static void account_manager_iface_init (gpointer klass, gpointer unused G_GNUC_UNUSED) { #define IMPLEMENT(x) tp_svc_account_manager_implement_##x (\ klass, tp_tests_simple_account_manager_##x) IMPLEMENT (create_account); #undef IMPLEMENT } static void tp_tests_simple_account_manager_init (TpTestsSimpleAccountManager *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, TP_TESTS_TYPE_SIMPLE_ACCOUNT_MANAGER, TpTestsSimpleAccountManagerPrivate); } static void tp_tests_simple_account_manager_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *spec) { GPtrArray *accounts; guint i = 0; switch (property_id) { case PROP_INTERFACES: g_value_set_boxed (value, ACCOUNT_MANAGER_INTERFACES); break; case PROP_VALID_ACCOUNTS: accounts = g_ptr_array_new (); for (i=0; VALID_ACCOUNTS[i] != NULL; i++) g_ptr_array_add (accounts, g_strdup (VALID_ACCOUNTS[i])); g_value_take_boxed (value, accounts); break; case PROP_INVALID_ACCOUNTS: accounts = g_ptr_array_new (); for (i=0; INVALID_ACCOUNTS[i] != NULL; i++) g_ptr_array_add (accounts, g_strdup (VALID_ACCOUNTS[i])); g_value_take_boxed (value, accounts); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, spec); break; } } /** * This class currently only provides the minimum for * tp_account_manager_prepare to succeed. This turns out to be only a working * Properties.GetAll(). If we wanted later to check the case where * tp_account_prepare succeeds, we would need to implement an account object * too. */ static void tp_tests_simple_account_manager_class_init ( TpTestsSimpleAccountManagerClass *klass) { GObjectClass *object_class = (GObjectClass *) klass; GParamSpec *param_spec; static TpDBusPropertiesMixinPropImpl am_props[] = { { "Interfaces", "interfaces", NULL }, { "ValidAccounts", "valid-accounts", NULL }, { "InvalidAccounts", "invalid-accounts", NULL }, /* { "SupportedAccountProperties", "supported-account-properties", NULL }, */ { NULL } }; static TpDBusPropertiesMixinIfaceImpl prop_interfaces[] = { { TP_IFACE_ACCOUNT_MANAGER, tp_dbus_properties_mixin_getter_gobject_properties, NULL, am_props }, { NULL }, }; g_type_class_add_private (klass, sizeof (TpTestsSimpleAccountManagerPrivate)); object_class->get_property = tp_tests_simple_account_manager_get_property; param_spec = g_param_spec_boxed ("interfaces", "Extra D-Bus interfaces", "In this case we only implement AccountManager, so none.", G_TYPE_STRV, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_INTERFACES, param_spec); param_spec = g_param_spec_boxed ("valid-accounts", "Valid accounts", "The accounts which are valid on this account. This may be a lie.", TP_ARRAY_TYPE_OBJECT_PATH_LIST, G_PARAM_READABLE); g_object_class_install_property (object_class, PROP_VALID_ACCOUNTS, param_spec); param_spec = g_param_spec_boxed ("invalid-accounts", "Invalid accounts", "The accounts which are invalid on this account. This may be a lie.", TP_ARRAY_TYPE_OBJECT_PATH_LIST, G_PARAM_READABLE); g_object_class_install_property (object_class, PROP_INVALID_ACCOUNTS, param_spec); klass->dbus_props_class.interfaces = prop_interfaces; tp_dbus_properties_mixin_class_init (object_class, G_STRUCT_OFFSET (TpTestsSimpleAccountManagerClass, dbus_props_class)); } telepathy-qt-0.9.3/tests/lib/glib/dbus-tube-chan.c0000644000175200001440000005213212000056607024211 0ustar00collabora-develusers00000000000000/* * dbus-tube-chan.c - Simple dbus tube channel * * Copyright (C) 2010 Collabora Ltd. * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #include "dbus-tube-chan.h" #include #include #include #include #include #include #include enum { PROP_SERVICE_NAME = 1, PROP_DBUS_NAMES, PROP_SUPPORTED_ACCESS_CONTROLS, PROP_PARAMETERS, PROP_STATE, PROP_DBUS_ADDRESS }; struct _TpTestsDBusTubeChannelPrivate { TpTubeChannelState state; TpSocketAccessControl access_control; /* our unique D-Bus name on the virtual tube bus (NULL for 1-1 D-Bus tubes)*/ gchar *dbus_local_name; /* the address that we are listening for D-Bus connections on */ gchar *dbus_srv_addr; /* the path of the UNIX socket used by the D-Bus server */ gchar *socket_path; /* the server that's listening on dbus_srv_addr */ DBusServer *dbus_srv; /* the connection to dbus_srv from a local client, or NULL */ DBusConnection *dbus_conn; /* the queue of D-Bus messages to be delivered to a local client when it * will connect */ GSList *dbus_msg_queue; /* current size of the queue in bytes. The maximum is MAX_QUEUE_SIZE */ unsigned long dbus_msg_queue_size; /* mapping of contact handle -> D-Bus name (empty for 1-1 D-Bus tubes) */ GHashTable *dbus_names; GArray *supported_access_controls; GHashTable *parameters; gboolean close_on_accept; }; static void tp_tests_dbus_tube_channel_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { TpTestsDBusTubeChannel *self = (TpTestsDBusTubeChannel *) object; switch (property_id) { case PROP_SERVICE_NAME: g_value_set_string (value, "com.test.Test"); break; case PROP_DBUS_NAMES: g_value_set_boxed (value, self->priv->dbus_names); break; case PROP_SUPPORTED_ACCESS_CONTROLS: g_value_set_boxed (value, self->priv->supported_access_controls); break; case PROP_PARAMETERS: g_value_set_boxed (value, self->priv->parameters); break; case PROP_DBUS_ADDRESS: g_value_set_string (value, self->priv->dbus_srv_addr); break; case PROP_STATE: g_value_set_uint (value, self->priv->state); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void tp_tests_dbus_tube_channel_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { TpTestsDBusTubeChannel *self = (TpTestsDBusTubeChannel *) object; switch (property_id) { case PROP_SUPPORTED_ACCESS_CONTROLS: if (self->priv->supported_access_controls != NULL) g_array_free (self->priv->supported_access_controls, FALSE); self->priv->supported_access_controls = g_value_dup_boxed (value); break; case PROP_PARAMETERS: if (self->priv->parameters != NULL) g_hash_table_destroy (self->priv->parameters); self->priv->parameters = g_value_dup_boxed (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void dbus_tube_iface_init (gpointer iface, gpointer data); G_DEFINE_ABSTRACT_TYPE_WITH_CODE (TpTestsDBusTubeChannel, tp_tests_dbus_tube_channel, TP_TYPE_BASE_CHANNEL, G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_TYPE_DBUS_TUBE, dbus_tube_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_INTERFACE_TUBE, NULL); ) /* type definition stuff */ static const char * tp_tests_dbus_tube_channel_interfaces[] = { TP_IFACE_CHANNEL_INTERFACE_TUBE, NULL }; static void tp_tests_dbus_tube_channel_init (TpTestsDBusTubeChannel *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE ((self), TP_TESTS_TYPE_DBUS_TUBE_CHANNEL, TpTestsDBusTubeChannelPrivate); self->priv->dbus_names = g_hash_table_new (g_direct_hash, g_direct_equal); } static GObject * constructor (GType type, guint n_props, GObjectConstructParam *props) { GObject *object = G_OBJECT_CLASS (tp_tests_dbus_tube_channel_parent_class)->constructor ( type, n_props, props); TpTestsDBusTubeChannel *self = TP_TESTS_DBUS_TUBE_CHANNEL (object); if (tp_base_channel_is_requested (TP_BASE_CHANNEL (self))) { self->priv->state = TP_TUBE_CHANNEL_STATE_NOT_OFFERED; self->priv->parameters = tp_asv_new (NULL, NULL); } else { self->priv->state = TP_TUBE_CHANNEL_STATE_LOCAL_PENDING; self->priv->parameters = tp_asv_new ("badger", G_TYPE_UINT, 42, NULL); } if (self->priv->supported_access_controls == NULL) { GArray *acontrols; TpSocketAccessControl a; acontrols = g_array_sized_new (FALSE, FALSE, sizeof (guint), 1); a = TP_SOCKET_ACCESS_CONTROL_LOCALHOST; acontrols = g_array_append_val (acontrols, a); self->priv->supported_access_controls = acontrols; } tp_base_channel_register (TP_BASE_CHANNEL (self)); return object; } static void dispose (GObject *object) { TpTestsDBusTubeChannel *self = (TpTestsDBusTubeChannel *) object; tp_clear_pointer (&self->priv->dbus_names, g_hash_table_unref); if (self->priv->supported_access_controls != NULL) g_array_free (self->priv->supported_access_controls, TRUE); if (self->priv->parameters != NULL) g_hash_table_destroy (self->priv->parameters); if (self->priv->dbus_srv != NULL) dbus_server_unref (self->priv->dbus_srv); if (self->priv->dbus_conn != NULL) dbus_connection_unref (self->priv->dbus_conn); if (self->priv->dbus_srv_addr != NULL) g_free (self->priv->dbus_srv_addr); if (self->priv->socket_path != NULL) g_free (self->priv->socket_path); ((GObjectClass *) tp_tests_dbus_tube_channel_parent_class)->dispose ( object); } static void channel_close (TpBaseChannel *channel) { tp_base_channel_destroyed (channel); } static void fill_immutable_properties (TpBaseChannel *chan, GHashTable *properties) { TpBaseChannelClass *klass = TP_BASE_CHANNEL_CLASS ( tp_tests_dbus_tube_channel_parent_class); klass->fill_immutable_properties (chan, properties); tp_dbus_properties_mixin_fill_properties_hash ( G_OBJECT (chan), properties, TP_IFACE_CHANNEL_TYPE_DBUS_TUBE, "ServiceName", TP_IFACE_CHANNEL_TYPE_DBUS_TUBE, "SupportedAccessControls", NULL); if (!tp_base_channel_is_requested (chan)) { /* Parameters is immutable only for incoming tubes */ tp_dbus_properties_mixin_fill_properties_hash ( G_OBJECT (chan), properties, TP_IFACE_CHANNEL_INTERFACE_TUBE, "Parameters", NULL); } } static void tp_tests_dbus_tube_channel_class_init (TpTestsDBusTubeChannelClass *klass) { GObjectClass *object_class = (GObjectClass *) klass; TpBaseChannelClass *base_class = TP_BASE_CHANNEL_CLASS (klass); GParamSpec *param_spec; static TpDBusPropertiesMixinPropImpl dbus_tube_props[] = { { "ServiceName", "service-name", NULL, }, { "DBusNames", "dbus-names", NULL, }, { "SupportedAccessControls", "supported-access-controls", NULL, }, { NULL } }; static TpDBusPropertiesMixinPropImpl tube_props[] = { { "Parameters", "parameters", NULL, }, { "State", "state", NULL, }, { NULL } }; object_class->constructor = constructor; object_class->get_property = tp_tests_dbus_tube_channel_get_property; object_class->set_property = tp_tests_dbus_tube_channel_set_property; object_class->dispose = dispose; base_class->channel_type = TP_IFACE_CHANNEL_TYPE_DBUS_TUBE; base_class->interfaces = tp_tests_dbus_tube_channel_interfaces; base_class->close = channel_close; base_class->fill_immutable_properties = fill_immutable_properties; /* base_class->target_handle_type is defined in subclasses */ param_spec = g_param_spec_string ("service-name", "Service Name", "the service name associated with this tube object.", "", G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_SERVICE_NAME, param_spec); param_spec = g_param_spec_boxed ("dbus-names", "DBus Names", "DBusTube.DBusNames", TP_HASH_TYPE_DBUS_TUBE_PARTICIPANTS, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_DBUS_NAMES, param_spec); param_spec = g_param_spec_boxed ("supported-access-controls", "Supported access-controls", "GArray containing supported access controls.", DBUS_TYPE_G_UINT_ARRAY, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_SUPPORTED_ACCESS_CONTROLS, param_spec); param_spec = g_param_spec_string ( "dbus-address", "D-Bus address", "The D-Bus address on which this tube will listen for connections", "", G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_DBUS_ADDRESS, param_spec); param_spec = g_param_spec_boxed ( "parameters", "Parameters", "parameters of the tube", TP_HASH_TYPE_STRING_VARIANT_MAP, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_PARAMETERS, param_spec); param_spec = g_param_spec_uint ( "state", "TpTubeState", "state of the tube", 0, NUM_TP_TUBE_CHANNEL_STATES - 1, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_STATE, param_spec); tp_dbus_properties_mixin_implement_interface (object_class, TP_IFACE_QUARK_CHANNEL_TYPE_DBUS_TUBE, tp_dbus_properties_mixin_getter_gobject_properties, NULL, dbus_tube_props); tp_dbus_properties_mixin_implement_interface (object_class, TP_IFACE_QUARK_CHANNEL_INTERFACE_TUBE, tp_dbus_properties_mixin_getter_gobject_properties, NULL, tube_props); g_type_class_add_private (object_class, sizeof (TpTestsDBusTubeChannelPrivate)); } static gboolean check_access_control (TpTestsDBusTubeChannel *self, TpSocketAccessControl access_control) { guint i; for (i = 0; i < self->priv->supported_access_controls->len; i++) { if (g_array_index (self->priv->supported_access_controls, TpSocketAccessControl, i) == access_control) return TRUE; } return FALSE; } static void change_state (TpTestsDBusTubeChannel *self, TpTubeChannelState state) { self->priv->state = state; tp_svc_channel_interface_tube_emit_tube_channel_state_changed (self, state); } /* * Characters used are permissible both in filenames and in D-Bus names. (See * D-Bus specification for restrictions.) */ static void generate_ascii_string (guint len, gchar *buf) { const gchar *chars = "0123456789" "abcdefghijklmnopqrstuvwxyz" "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "_-"; guint i; for (i = 0; i < len; i++) buf[i] = chars[g_random_int_range (0, 64)]; } static DBusHandlerResult filter_cb (DBusConnection *conn, DBusMessage *msg, void *user_data) { TpTestsDBusTubeChannel *self = TP_TESTS_DBUS_TUBE_CHANNEL (user_data); TpTestsDBusTubeChannelPrivate *priv = self->priv; gchar *marshalled = NULL; gint len; if (dbus_message_get_type (msg) == DBUS_MESSAGE_TYPE_SIGNAL && !tp_strdiff (dbus_message_get_interface (msg), "org.freedesktop.DBus.Local") && !tp_strdiff (dbus_message_get_member (msg), "Disconnected")) { /* connection was disconnected */ g_debug ("connection was disconnected"); dbus_connection_close (priv->dbus_conn); tp_clear_pointer (&priv->dbus_conn, dbus_connection_unref); goto out; } if (priv->dbus_local_name != NULL) { if (!dbus_message_set_sender (msg, priv->dbus_local_name)) g_debug ("dbus_message_set_sender failed"); } if (!dbus_message_marshal (msg, &marshalled, &len)) goto out; out: if (marshalled != NULL) g_free (marshalled); return DBUS_HANDLER_RESULT_HANDLED; } static dbus_bool_t allow_all_connections (DBusConnection *conn, unsigned long uid, void *data) { return TRUE; } static void new_connection_cb (DBusServer *server, DBusConnection *conn, void *data) { TpTestsDBusTubeChannel *self = TP_TESTS_DBUS_TUBE_CHANNEL (data); TpTestsDBusTubeChannelPrivate *priv = self->priv; guint32 serial; GSList *i; if (priv->dbus_conn != NULL) /* we already have a connection; drop this new one */ /* return without reffing conn means it will be dropped */ return; dbus_connection_ref (conn); dbus_connection_setup_with_g_main (conn, NULL); dbus_connection_add_filter (conn, filter_cb, self, NULL); priv->dbus_conn = conn; if (priv->access_control == TP_SOCKET_ACCESS_CONTROL_LOCALHOST) { /* By default libdbus use Credentials access control. If user wants * to use the Localhost access control, we need to bypass this check. */ dbus_connection_set_unix_user_function (conn, allow_all_connections, NULL, NULL); } /* We may have received messages to deliver before the local connection is * established. Theses messages are kept in the dbus_msg_queue list and are * delivered as soon as we get the connection. */ g_debug ("%u messages in the queue (%lu bytes)", g_slist_length (priv->dbus_msg_queue), priv->dbus_msg_queue_size); priv->dbus_msg_queue = g_slist_reverse (priv->dbus_msg_queue); for (i = priv->dbus_msg_queue; i != NULL; i = g_slist_delete_link (i, i)) { DBusMessage *msg = i->data; g_debug ("delivering queued message from '%s' to '%s' on the " "new connection", dbus_message_get_sender (msg), dbus_message_get_destination (msg)); dbus_connection_send (priv->dbus_conn, msg, &serial); dbus_message_unref (msg); } priv->dbus_msg_queue = NULL; priv->dbus_msg_queue_size = 0; } /* There is two step to enable receiving a D-Bus connection from the local * application: * - listen on the socket * - add the socket in the mainloop * * We need to know the socket path to return from the AcceptDBusTube D-Bus * call but the socket in the mainloop must be added only when we are ready * to receive connections, that is when the bytestream is fully open with the * remote contact. * * See also Bug 13891: * https://bugs.freedesktop.org/show_bug.cgi?id=13891 * */ static gboolean create_dbus_server (TpTestsDBusTubeChannel *self, GError **err) { #define SERVER_LISTEN_MAX_TRIES 5 TpTestsDBusTubeChannelPrivate *priv = self->priv; guint i; if (priv->dbus_srv != NULL) return TRUE; for (i = 0; i < SERVER_LISTEN_MAX_TRIES; i++) { gchar suffix[8]; DBusError error; g_free (priv->dbus_srv_addr); g_free (priv->socket_path); generate_ascii_string (8, suffix); priv->socket_path = g_strdup_printf ("%s/dbus-tpqt4-test-%.8s", g_get_tmp_dir (), suffix); priv->dbus_srv_addr = g_strdup_printf ("unix:path=%s", priv->socket_path); dbus_error_init (&error); priv->dbus_srv = dbus_server_listen (priv->dbus_srv_addr, &error); if (priv->dbus_srv != NULL) break; g_debug ("dbus_server_listen failed (try %u): %s: %s", i, error.name, error.message); dbus_error_free (&error); } if (priv->dbus_srv == NULL) { g_debug ("all attempts failed. Close the tube"); g_free (priv->dbus_srv_addr); priv->dbus_srv_addr = NULL; g_free (priv->socket_path); priv->socket_path = NULL; g_set_error (err, TP_ERROR, TP_ERROR_NOT_AVAILABLE, "Can't create D-Bus server"); return FALSE; } g_debug ("listening on %s", priv->dbus_srv_addr); dbus_server_set_new_connection_function (priv->dbus_srv, new_connection_cb, self, NULL); return TRUE; } static void dbus_tube_offer (TpSvcChannelTypeDBusTube *iface, GHashTable *parameters, guint access_control, DBusGMethodInvocation *context) { TpTestsDBusTubeChannel *self = (TpTestsDBusTubeChannel *) iface; GError *error = NULL; if (self->priv->state != TP_TUBE_CHANNEL_STATE_NOT_OFFERED) { g_set_error (&error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "Tube is not in the not offered state"); goto fail; } if (!check_access_control (self, access_control)) { g_set_error (&error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "Address type not supported with this access control"); goto fail; } self->priv->access_control = access_control; if (!create_dbus_server (self, &error)) goto fail; g_object_set (self, "parameters", parameters, NULL); change_state (self, TP_TUBE_CHANNEL_STATE_REMOTE_PENDING); tp_svc_channel_type_dbus_tube_return_from_offer (context, self->priv->dbus_srv_addr); return; fail: dbus_g_method_return_error (context, error); g_error_free (error); } static void dbus_tube_accept (TpSvcChannelTypeDBusTube *iface, guint access_control, DBusGMethodInvocation *context) { TpTestsDBusTubeChannel *self = (TpTestsDBusTubeChannel *) iface; GError *error = NULL; if (self->priv->state != TP_TUBE_CHANNEL_STATE_LOCAL_PENDING) { g_set_error (&error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "Tube is not in the local pending state"); goto fail; } if (!check_access_control (self, access_control)) { g_set_error (&error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "Address type not supported with this access control"); goto fail; } if (self->priv->close_on_accept) { tp_base_channel_close (TP_BASE_CHANNEL (self)); return; } if (!create_dbus_server (self, &error)) goto fail; change_state (self, TP_TUBE_CHANNEL_STATE_OPEN); tp_svc_channel_type_dbus_tube_return_from_accept (context, self->priv->dbus_srv_addr); return; fail: dbus_g_method_return_error (context, error); g_error_free (error); } static void dbus_tube_iface_init (gpointer iface, gpointer data) { TpSvcChannelTypeDBusTubeClass *klass = iface; #define IMPLEMENT(x) tp_svc_channel_type_dbus_tube_implement_##x (klass, dbus_tube_##x) IMPLEMENT(offer); IMPLEMENT(accept); #undef IMPLEMENT } /* Called to emulate a peer connecting to an offered tube */ void tp_tests_dbus_tube_channel_peer_connected_no_stream (TpTestsDBusTubeChannel *self, gchar *bus_name, TpHandle handle) { GHashTable *added; GArray *removed; if (self->priv->state == TP_TUBE_CHANNEL_STATE_REMOTE_PENDING) change_state (self, TP_TUBE_CHANNEL_STATE_OPEN); g_assert (self->priv->state == TP_TUBE_CHANNEL_STATE_OPEN); added = g_hash_table_new (g_direct_hash, g_direct_equal); removed = g_array_new (FALSE, FALSE, sizeof (TpHandle)); g_hash_table_insert (added, GUINT_TO_POINTER (handle), bus_name); // Add to the global hash table as well g_hash_table_insert (self->priv->dbus_names, GUINT_TO_POINTER (handle), bus_name); tp_svc_channel_type_dbus_tube_emit_dbus_names_changed (self, added, removed); g_hash_table_destroy (added); g_array_free (removed, TRUE); } /* Called to emulate a peer connecting to an offered tube */ void tp_tests_dbus_tube_channel_peer_disconnected (TpTestsDBusTubeChannel *self, TpHandle handle) { GHashTable *added; GArray *removed; g_assert (self->priv->state == TP_TUBE_CHANNEL_STATE_OPEN); added = g_hash_table_new (g_direct_hash, g_direct_equal); removed = g_array_new (FALSE, FALSE, sizeof (TpHandle)); g_array_append_val (removed, handle); // Remove from the global hash table as well g_hash_table_remove (self->priv->dbus_names, GUINT_TO_POINTER (handle)); tp_svc_channel_type_dbus_tube_emit_dbus_names_changed (self, added, removed); g_hash_table_destroy (added); g_array_free (removed, TRUE); } void tp_tests_dbus_tube_channel_set_close_on_accept ( TpTestsDBusTubeChannel *self, gboolean close_on_accept) { self->priv->close_on_accept = close_on_accept; } /* Contact DBus Tube */ G_DEFINE_TYPE (TpTestsContactDBusTubeChannel, tp_tests_contact_dbus_tube_channel, TP_TESTS_TYPE_DBUS_TUBE_CHANNEL) static void tp_tests_contact_dbus_tube_channel_init ( TpTestsContactDBusTubeChannel *self) { } static void tp_tests_contact_dbus_tube_channel_class_init ( TpTestsContactDBusTubeChannelClass *klass) { TpBaseChannelClass *base_class = TP_BASE_CHANNEL_CLASS (klass); base_class->target_handle_type = TP_HANDLE_TYPE_CONTACT; } /* Room DBus Tube */ G_DEFINE_TYPE (TpTestsRoomDBusTubeChannel, tp_tests_room_dbus_tube_channel, TP_TESTS_TYPE_DBUS_TUBE_CHANNEL) static void tp_tests_room_dbus_tube_channel_init ( TpTestsRoomDBusTubeChannel *self) { } static void tp_tests_room_dbus_tube_channel_class_init ( TpTestsRoomDBusTubeChannelClass *klass) { TpBaseChannelClass *base_class = TP_BASE_CHANNEL_CLASS (klass); base_class->target_handle_type = TP_HANDLE_TYPE_ROOM; } telepathy-qt-0.9.3/tests/lib/glib/call/0000755000175200001440000000000012000056607022154 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/tests/lib/glib/call/call-channel.c0000644000175200001440000006221112000056607024643 0ustar00collabora-develusers00000000000000/* * call-channel.c - an example 1-1 audio/video call * * For simplicity, this channel emulates a device with its own * audio/video user interface, like a video-equipped form of the phones * manipulated by telepathy-snom or gnome-phone-manager. * * As a result, this channel has the HardwareStreaming flag, its contents * and streams do not have the Media interface, and clients should not attempt * to do their own streaming using telepathy-farsight, telepathy-stream-engine * or maemo-stream-engine. * * In practice, nearly all connection managers do not have HardwareStreaming, * and do have the Media interface on their contents/streams. Usage for those * CMs is the same, except that whichever client is the primary handler * for the channel should also hand the channel over to telepathy-farsight or * telepathy-stream-engine to implement the actual streaming. * * Copyright © 2007-2009 Collabora Ltd. * Copyright © 2007-2009 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 */ #include "call-channel.h" #include #include #include #include #include #include #include #include "call-content.h" #include "call-stream.h" static void hold_iface_init (gpointer iface, gpointer data); G_DEFINE_TYPE_WITH_CODE (ExampleCallChannel, example_call_channel, TP_TYPE_BASE_MEDIA_CALL_CHANNEL, G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_INTERFACE_HOLD, hold_iface_init)) enum { PROP_SIMULATION_DELAY = 1, N_PROPS }; struct _ExampleCallChannelPrivate { guint simulation_delay; TpBaseConnection *conn; TpHandle handle; gboolean locally_requested; guint hold_state; guint hold_state_reason; guint next_stream_id; gboolean closed; }; static const char * example_call_channel_interfaces[] = { TP_IFACE_CHANNEL_INTERFACE_HOLD, NULL }; /* In practice you need one for audio, plus one per video (e.g. a * presentation might have separate video contents for the slides * and a camera pointed at the presenter), so having more than three * would be highly unusual */ #define MAX_CONTENTS_PER_CALL 100 G_GNUC_NULL_TERMINATED static void example_call_channel_set_state (ExampleCallChannel *self, TpCallState state, TpCallFlags flags, TpHandle actor, TpCallStateChangeReason reason, const gchar *error, ...) { /* FIXME: TpBaseCallChannel is not that flexible */ tp_base_call_channel_set_state ((TpBaseCallChannel *) self, state, actor, reason, error, ""); } static void example_call_channel_init (ExampleCallChannel *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, EXAMPLE_TYPE_CALL_CHANNEL, ExampleCallChannelPrivate); self->priv->next_stream_id = 1; self->priv->hold_state = TP_LOCAL_HOLD_STATE_UNHELD; self->priv->hold_state_reason = TP_LOCAL_HOLD_STATE_REASON_NONE; } static ExampleCallContent *example_call_channel_add_content ( ExampleCallChannel *self, TpMediaStreamType media_type, gboolean locally_requested, gboolean initial, const gchar *requested_name, GError **error); static void example_call_channel_initiate_outgoing (ExampleCallChannel *self); static void constructed (GObject *object) { void (*chain_up) (GObject *) = ((GObjectClass *) example_call_channel_parent_class)->constructed; ExampleCallChannel *self = EXAMPLE_CALL_CHANNEL (object); TpBaseChannel *base = (TpBaseChannel *) self; TpBaseCallChannel *call = (TpBaseCallChannel *) self; if (chain_up != NULL) chain_up (object); self->priv->handle = tp_base_channel_get_target_handle (base); self->priv->locally_requested = tp_base_channel_is_requested (base); self->priv->conn = tp_base_channel_get_connection (base); tp_base_call_channel_update_member_flags (call, self->priv->handle, 0, 0, TP_CALL_STATE_CHANGE_REASON_UNKNOWN, "", ""); if (self->priv->locally_requested) { /* Nobody is locally pending. The remote peer will turn up in * remote-pending state when we actually contact them, which is done * in example_call_channel_initiate_outgoing. */ example_call_channel_set_state (self, TP_CALL_STATE_PENDING_INITIATOR, 0, 0, TP_CALL_STATE_CHANGE_REASON_USER_REQUESTED, "", NULL); } else { /* This is an incoming call, so the self-handle is locally * pending, to indicate that we need to answer. */ example_call_channel_set_state (self, TP_CALL_STATE_INITIALISED, 0, self->priv->handle, TP_CALL_STATE_CHANGE_REASON_USER_REQUESTED, "", NULL); } /* FIXME: should respect initial names */ if (tp_base_call_channel_has_initial_audio (call, NULL)) { g_message ("Channel initially has an audio stream"); example_call_channel_add_content (self, TP_MEDIA_STREAM_TYPE_AUDIO, self->priv->locally_requested, TRUE, NULL, NULL); } if (tp_base_call_channel_has_initial_video (call, NULL)) { g_message ("Channel initially has a video stream"); example_call_channel_add_content (self, TP_MEDIA_STREAM_TYPE_VIDEO, self->priv->locally_requested, TRUE, NULL, NULL); } tp_base_channel_register (base); } static void get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { ExampleCallChannel *self = EXAMPLE_CALL_CHANNEL (object); switch (property_id) { case PROP_SIMULATION_DELAY: g_value_set_uint (value, self->priv->simulation_delay); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { ExampleCallChannel *self = EXAMPLE_CALL_CHANNEL (object); switch (property_id) { case PROP_SIMULATION_DELAY: self->priv->simulation_delay = g_value_get_uint (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void example_call_channel_terminate (ExampleCallChannel *self, TpHandle actor, TpChannelGroupChangeReason reason, TpCallStateChangeReason call_reason, const gchar *error_name) { TpBaseCallChannel *base = (TpBaseCallChannel *) self; TpCallState call_state = tp_base_call_channel_get_state (base); if (call_state != TP_CALL_STATE_ENDED) { GList *contents; example_call_channel_set_state (self, TP_CALL_STATE_ENDED, 0, actor, call_reason, error_name, NULL); /* FIXME: fd.o #24936 #c20: it's unclear in the spec whether we should * remove peers on call termination or not. For now this example does. */ tp_base_call_channel_remove_member (base, self->priv->handle, actor, call_reason, error_name, NULL); if (actor == tp_base_connection_get_self_handle (self->priv->conn)) { const gchar *send_reason; /* In a real protocol these would be some sort of real protocol * construct, like an XMPP error stanza or a SIP error code */ switch (reason) { case TP_CHANNEL_GROUP_CHANGE_REASON_BUSY: send_reason = ""; break; case TP_CHANNEL_GROUP_CHANGE_REASON_NO_ANSWER: send_reason = ""; break; default: send_reason = ""; } g_message ("SIGNALLING: send: Terminating call: %s", send_reason); } /* terminate all streams: to avoid modifying the hash table (in the * streams-removed handler) while iterating over it, we have to copy the * keys and iterate over those */ contents = tp_base_call_channel_get_contents (base); contents = g_list_copy (contents); for (; contents != NULL; contents = g_list_delete_link (contents, contents)) { example_call_content_remove_stream (contents->data); tp_base_call_channel_remove_content (base, contents->data, 0, call_reason, error_name, ""); } } } static void dispose (GObject *object) { ExampleCallChannel *self = EXAMPLE_CALL_CHANNEL (object); /* the manager is meant to hold a ref to us until we've closed */ g_assert (self->priv->closed); ((GObjectClass *) example_call_channel_parent_class)->dispose (object); } static void close_channel (TpBaseChannel *base) { ExampleCallChannel *self = EXAMPLE_CALL_CHANNEL (base); example_call_channel_terminate (self, tp_base_connection_get_self_handle (self->priv->conn), TP_CHANNEL_GROUP_CHANGE_REASON_NONE, TP_CALL_STATE_CHANGE_REASON_USER_REQUESTED, ""); self->priv->closed = TRUE; tp_base_channel_destroyed (base); } static void call_accept (TpBaseCallChannel *self); static TpBaseCallContent * call_add_content (TpBaseCallChannel *self, const gchar *name, TpMediaStreamType media, TpMediaStreamDirection initial_direction, GError **error); static void call_hangup (TpBaseCallChannel *self, guint reason, const gchar *detailed_reason, const gchar *message); static void example_call_channel_class_init (ExampleCallChannelClass *klass) { GObjectClass *object_class = (GObjectClass *) klass; TpBaseChannelClass *base_class = TP_BASE_CHANNEL_CLASS (klass); TpBaseCallChannelClass *call_class = (TpBaseCallChannelClass *) klass; GParamSpec *param_spec; g_type_class_add_private (klass, sizeof (ExampleCallChannelPrivate)); call_class->accept = call_accept; call_class->add_content = call_add_content; call_class->hangup = call_hangup; base_class->target_handle_type = TP_HANDLE_TYPE_CONTACT; base_class->interfaces = example_call_channel_interfaces; base_class->close = close_channel; object_class->constructed = constructed; object_class->set_property = set_property; object_class->get_property = get_property; object_class->dispose = dispose; param_spec = g_param_spec_uint ("simulation-delay", "Simulation delay", "Delay between simulated network events", 0, G_MAXUINT32, 1000, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_SIMULATION_DELAY, param_spec); } static gboolean simulate_contact_ended_cb (gpointer p) { ExampleCallChannel *self = p; TpBaseCallChannel *base = (TpBaseCallChannel *) self; TpCallState call_state = tp_base_call_channel_get_state (base); /* if the call has been cancelled while we were waiting for the * contact to do so, do nothing! */ if (call_state == TP_CALL_STATE_ENDED) return FALSE; g_message ("SIGNALLING: receive: call terminated: "); example_call_channel_terminate (self, self->priv->handle, TP_CHANNEL_GROUP_CHANGE_REASON_NONE, TP_CALL_STATE_CHANGE_REASON_USER_REQUESTED, ""); return FALSE; } static gboolean simulate_contact_answered_cb (gpointer p) { ExampleCallChannel *self = p; TpBaseCallChannel *base = (TpBaseCallChannel *) self; TpCallState call_state = tp_base_call_channel_get_state (base); GList *contents; TpHandleRepoIface *contact_repo; const gchar *peer; /* if the call has been cancelled while we were waiting for the * contact to answer, do nothing! */ if (call_state == TP_CALL_STATE_ENDED) return FALSE; /* otherwise, we're waiting for a response from the contact, which now * arrives */ g_assert_cmpuint (call_state, ==, TP_CALL_STATE_INITIALISED); g_message ("SIGNALLING: receive: contact answered our call"); tp_base_call_channel_remote_accept (base); contents = tp_base_call_channel_get_contents (base); for (; contents != NULL; contents = contents->next) { ExampleCallStream *stream = example_call_content_get_stream (contents->data); if (stream == NULL) continue; /* remote contact accepts our proposed stream direction */ example_call_stream_simulate_contact_agreed_to_send (stream); } contact_repo = tp_base_connection_get_handles (self->priv->conn, TP_HANDLE_TYPE_CONTACT); peer = tp_handle_inspect (contact_repo, self->priv->handle); /* If the contact's ID contains the magic string "(terminate)", simulate * them hanging up after a moment. */ if (strstr (peer, "(terminate)") != NULL) { g_timeout_add_full (G_PRIORITY_DEFAULT, self->priv->simulation_delay, simulate_contact_ended_cb, g_object_ref (self), g_object_unref); } return FALSE; } static gboolean simulate_contact_busy_cb (gpointer p) { ExampleCallChannel *self = p; TpBaseCallChannel *base = (TpBaseCallChannel *) self; TpCallState call_state = tp_base_call_channel_get_state (base); /* if the call has been cancelled while we were waiting for the * contact to answer, do nothing */ if (call_state == TP_CALL_STATE_ENDED) return FALSE; /* otherwise, we're waiting for a response from the contact, which now * arrives */ g_assert_cmpuint (call_state, ==, TP_CALL_STATE_INITIALISED); g_message ("SIGNALLING: receive: call terminated: "); example_call_channel_terminate (self, self->priv->handle, TP_CHANNEL_GROUP_CHANGE_REASON_BUSY, TP_CALL_STATE_CHANGE_REASON_USER_REQUESTED, TP_ERROR_STR_BUSY); return FALSE; } static ExampleCallContent * example_call_channel_add_content (ExampleCallChannel *self, TpMediaStreamType media_type, gboolean locally_requested, gboolean initial, const gchar *requested_name, GError **error) { TpBaseCallChannel *base = (TpBaseCallChannel *) self; GList *contents; const gchar *type_str; TpHandle creator = self->priv->handle; TpCallContentDisposition disposition = TP_CALL_CONTENT_DISPOSITION_NONE; guint id = self->priv->next_stream_id++; ExampleCallContent *content; ExampleCallStream *stream; gchar *name; gchar *path; guint i; /* an arbitrary limit much less than 2**32 means we don't use ridiculous * amounts of memory, and also means @i can't wrap around when we use it to * uniquify content names. */ contents = tp_base_call_channel_get_contents (base); if (g_list_length (contents) > MAX_CONTENTS_PER_CALL) { g_set_error (error, TP_ERROR, TP_ERROR_PERMISSION_DENIED, "What are you doing with all those contents anyway?!"); return NULL; } type_str = (media_type == TP_MEDIA_STREAM_TYPE_AUDIO ? "audio" : "video"); if (tp_str_empty (requested_name)) { requested_name = type_str; } for (i = 0; ; i++) { GList *l; if (i == 0) name = g_strdup (requested_name); else name = g_strdup_printf ("%s (%u)", requested_name, i); for (l = contents; l != NULL; l = l->next) { if (!tp_strdiff (tp_base_call_content_get_name (l->data), name)) break; } if (l == NULL) { /* this name hasn't been used - good enough */ break; } g_free (name); name = NULL; } if (initial) disposition = TP_CALL_CONTENT_DISPOSITION_INITIAL; if (locally_requested) { g_message ("SIGNALLING: send: new %s stream %s", type_str, name); creator = self->priv->conn->self_handle; } path = g_strdup_printf ("%s/Content%u", tp_base_channel_get_object_path ((TpBaseChannel *) self), id); content = g_object_new (EXAMPLE_TYPE_CALL_CONTENT, "connection", self->priv->conn, "creator", creator, "media-type", media_type, "name", name, "disposition", disposition, "object-path", path, NULL); tp_base_call_channel_add_content (base, (TpBaseCallContent *) content); g_free (path); path = g_strdup_printf ("%s/Stream%u", tp_base_channel_get_object_path ((TpBaseChannel *) self), id); stream = g_object_new (EXAMPLE_TYPE_CALL_STREAM, "connection", self->priv->conn, "handle", self->priv->handle, "locally-requested", locally_requested, "object-path", path, NULL); example_call_content_add_stream (content, stream); g_free (path); g_object_unref (content); g_object_unref (stream); return content; } static gboolean simulate_contact_ringing_cb (gpointer p) { ExampleCallChannel *self = p; TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (self->priv->conn, TP_HANDLE_TYPE_CONTACT); const gchar *peer; tp_base_call_channel_update_member_flags ((TpBaseCallChannel *) self, self->priv->handle, TP_CALL_MEMBER_FLAG_RINGING, 0, TP_CALL_STATE_CHANGE_REASON_UNKNOWN, "", ""); /* In this example there is no real contact, so just simulate them * answering after a short time - unless the contact's name * contains "(no answer)" or "(busy)" */ peer = tp_handle_inspect (contact_repo, self->priv->handle); if (strstr (peer, "(busy)") != NULL) { g_timeout_add_full (G_PRIORITY_DEFAULT, self->priv->simulation_delay, simulate_contact_busy_cb, g_object_ref (self), g_object_unref); } else if (strstr (peer, "(no answer)") != NULL) { /* do nothing - the call just rings forever */ } else { g_timeout_add_full (G_PRIORITY_DEFAULT, self->priv->simulation_delay, simulate_contact_answered_cb, g_object_ref (self), g_object_unref); } return FALSE; } static void example_call_channel_initiate_outgoing (ExampleCallChannel *self) { g_message ("SIGNALLING: send: new streamed media call"); example_call_channel_set_state (self, TP_CALL_STATE_INITIALISED, 0, tp_base_connection_get_self_handle (self->priv->conn), TP_CALL_STATE_CHANGE_REASON_USER_REQUESTED, "", NULL); /* After a moment, we're sent an informational message saying it's ringing */ g_timeout_add_full (G_PRIORITY_DEFAULT, self->priv->simulation_delay, simulate_contact_ringing_cb, g_object_ref (self), g_object_unref); } static void accept_incoming_call (ExampleCallChannel *self) { TpBaseCallChannel *base = (TpBaseCallChannel *) self; TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (self->priv->conn, TP_HANDLE_TYPE_CONTACT); GList *contents; g_message ("SIGNALLING: send: Accepting incoming call from %s", tp_handle_inspect (contact_repo, self->priv->handle)); example_call_channel_set_state (self, TP_CALL_STATE_ACCEPTED, 0, tp_base_connection_get_self_handle (self->priv->conn), TP_CALL_STATE_CHANGE_REASON_USER_REQUESTED, "", NULL); contents = tp_base_call_channel_get_contents (base); for (; contents != NULL; contents = contents->next) { ExampleCallStream *stream = example_call_content_get_stream (contents->data); guint disposition = tp_base_call_content_get_disposition (contents->data); if (stream == NULL || disposition != TP_CALL_CONTENT_DISPOSITION_INITIAL) continue; /* we accept the proposed stream direction */ example_call_stream_accept_proposed_direction (stream); } } static void call_accept (TpBaseCallChannel *base) { ExampleCallChannel *self = EXAMPLE_CALL_CHANNEL (base); if (self->priv->locally_requested) { /* Take the contents we've already added, and make them happen */ example_call_channel_initiate_outgoing (self); } else { accept_incoming_call (self); } } static void call_hangup (TpBaseCallChannel *base, guint reason, const gchar *detailed_reason, const gchar *message G_GNUC_UNUSED) { ExampleCallChannel *self = EXAMPLE_CALL_CHANNEL (base); example_call_channel_terminate (self, tp_base_connection_get_self_handle (self->priv->conn), TP_CHANNEL_GROUP_CHANGE_REASON_NONE, reason, detailed_reason); } static TpBaseCallContent * call_add_content (TpBaseCallChannel *base, const gchar *content_name, guint content_type, TpMediaStreamDirection initial_direction, GError **error) { ExampleCallChannel *self = EXAMPLE_CALL_CHANNEL (base); return (TpBaseCallContent *) example_call_channel_add_content (self, content_type, TRUE, FALSE, content_name, error); } static gboolean simulate_hold (gpointer p) { ExampleCallChannel *self = p; TpBaseCallChannel *base = (TpBaseCallChannel *) self; TpCallState call_state = tp_base_call_channel_get_state (base); TpCallFlags call_flags = 0; /* FIXME */ self->priv->hold_state = TP_LOCAL_HOLD_STATE_HELD; g_message ("SIGNALLING: hold state changed to held"); tp_svc_channel_interface_hold_emit_hold_state_changed (self, self->priv->hold_state, self->priv->hold_state_reason); example_call_channel_set_state (self, call_state, call_flags | TP_CALL_FLAG_LOCALLY_HELD, tp_base_connection_get_self_handle (self->priv->conn), TP_CALL_STATE_CHANGE_REASON_USER_REQUESTED, "", NULL); return FALSE; } static gboolean simulate_unhold (gpointer p) { ExampleCallChannel *self = p; TpBaseCallChannel *base = (TpBaseCallChannel *) self; TpCallState call_state = tp_base_call_channel_get_state (base); TpCallFlags call_flags = 0; /* FIXME */ self->priv->hold_state = TP_LOCAL_HOLD_STATE_UNHELD; g_message ("SIGNALLING: hold state changed to unheld"); tp_svc_channel_interface_hold_emit_hold_state_changed (self, self->priv->hold_state, self->priv->hold_state_reason); example_call_channel_set_state (self, call_state, call_flags & ~TP_CALL_FLAG_LOCALLY_HELD, tp_base_connection_get_self_handle (self->priv->conn), TP_CALL_STATE_CHANGE_REASON_USER_REQUESTED, "", NULL); return FALSE; } static gboolean simulate_inability_to_unhold (gpointer p) { ExampleCallChannel *self = p; self->priv->hold_state = TP_LOCAL_HOLD_STATE_PENDING_HOLD; g_message ("SIGNALLING: unable to unhold - hold state changed to " "pending hold"); tp_svc_channel_interface_hold_emit_hold_state_changed (self, self->priv->hold_state, self->priv->hold_state_reason); /* hold again */ g_timeout_add_full (G_PRIORITY_DEFAULT, self->priv->simulation_delay, simulate_hold, g_object_ref (self), g_object_unref); return FALSE; } static void hold_get_hold_state (TpSvcChannelInterfaceHold *iface, DBusGMethodInvocation *context) { ExampleCallChannel *self = EXAMPLE_CALL_CHANNEL (iface); tp_svc_channel_interface_hold_return_from_get_hold_state (context, self->priv->hold_state, self->priv->hold_state_reason); } static void hold_request_hold (TpSvcChannelInterfaceHold *iface, gboolean hold, DBusGMethodInvocation *context) { ExampleCallChannel *self = EXAMPLE_CALL_CHANNEL (iface); TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (self->priv->conn, TP_HANDLE_TYPE_CONTACT); GError *error = NULL; const gchar *peer; GSourceFunc callback; if ((hold && self->priv->hold_state == TP_LOCAL_HOLD_STATE_HELD) || (!hold && self->priv->hold_state == TP_LOCAL_HOLD_STATE_UNHELD)) { tp_svc_channel_interface_hold_return_from_request_hold (context); return; } peer = tp_handle_inspect (contact_repo, self->priv->handle); if (!hold && strstr (peer, "(no unhold)") != NULL) { g_set_error (&error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "unable to unhold"); goto error; } self->priv->hold_state_reason = TP_LOCAL_HOLD_STATE_REASON_REQUESTED; if (hold) { self->priv->hold_state = TP_LOCAL_HOLD_STATE_PENDING_HOLD; callback = simulate_hold; } else { self->priv->hold_state = TP_LOCAL_HOLD_STATE_PENDING_UNHOLD; peer = tp_handle_inspect (contact_repo, self->priv->handle); if (strstr (peer, "(inability to unhold)") != NULL) { callback = simulate_inability_to_unhold; } else { callback = simulate_unhold; } } g_message ("SIGNALLING: hold state changed to pending %s", (hold ? "hold" : "unhold")); tp_svc_channel_interface_hold_emit_hold_state_changed (iface, self->priv->hold_state, self->priv->hold_state_reason); /* No need to change the call flags - we never change the actual hold state * here, only the pending hold state */ g_timeout_add_full (G_PRIORITY_DEFAULT, self->priv->simulation_delay, callback, g_object_ref (self), g_object_unref); tp_svc_channel_interface_hold_return_from_request_hold (context); return; error: dbus_g_method_return_error (context, error); g_error_free (error); } void hold_iface_init (gpointer iface, gpointer data) { TpSvcChannelInterfaceHoldClass *klass = iface; #define IMPLEMENT(x) \ tp_svc_channel_interface_hold_implement_##x (klass, hold_##x) IMPLEMENT (get_hold_state); IMPLEMENT (request_hold); #undef IMPLEMENT } telepathy-qt-0.9.3/tests/lib/glib/call/call-manager.h0000644000175200001440000000450112000056607024650 0ustar00collabora-develusers00000000000000/* * media-manager.h - header for an example channel manager * * Copyright © 2007-2009 Collabora Ltd. * Copyright © 2007-2009 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 EXAMPLE_CALL_MANAGER_H #define EXAMPLE_CALL_MANAGER_H #include G_BEGIN_DECLS typedef struct _ExampleCallManager ExampleCallManager; typedef struct _ExampleCallManagerPrivate ExampleCallManagerPrivate; typedef struct _ExampleCallManagerClass ExampleCallManagerClass; typedef struct _ExampleCallManagerClassPrivate ExampleCallManagerClassPrivate; struct _ExampleCallManagerClass { GObjectClass parent_class; ExampleCallManagerClassPrivate *priv; }; struct _ExampleCallManager { GObject parent; ExampleCallManagerPrivate *priv; }; GType example_call_manager_get_type (void); /* TYPE MACROS */ #define EXAMPLE_TYPE_CALL_MANAGER \ (example_call_manager_get_type ()) #define EXAMPLE_CALL_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), EXAMPLE_TYPE_CALL_MANAGER, \ ExampleCallManager)) #define EXAMPLE_CALL_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), EXAMPLE_TYPE_CALL_MANAGER, \ ExampleCallManagerClass)) #define EXAMPLE_IS_CALL_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), EXAMPLE_TYPE_CALL_MANAGER)) #define EXAMPLE_IS_CALL_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), EXAMPLE_TYPE_CALL_MANAGER)) #define EXAMPLE_CALL_MANAGER_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), EXAMPLE_TYPE_CALL_MANAGER, \ ExampleCallManagerClass)) G_END_DECLS #endif telepathy-qt-0.9.3/tests/lib/glib/call/conn.c0000644000175200001440000003042712000056607023263 0ustar00collabora-develusers00000000000000/* * conn.c - an example connection * * Copyright © 2007-2009 Collabora Ltd. * Copyright © 2007-2009 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 */ #include "conn.h" #include #include #include #include #include "call-manager.h" #include "protocol.h" G_DEFINE_TYPE_WITH_CODE (ExampleCallConnection, example_call_connection, TP_TYPE_BASE_CONNECTION, G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_CONTACTS, tp_contacts_mixin_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_PRESENCE, tp_presence_mixin_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_SIMPLE_PRESENCE, tp_presence_mixin_simple_presence_iface_init)) enum { PROP_ACCOUNT = 1, PROP_SIMULATION_DELAY, N_PROPS }; enum { SIGNAL_AVAILABLE, N_SIGNALS }; static guint signals[N_SIGNALS] = { 0 }; struct _ExampleCallConnectionPrivate { gchar *account; guint simulation_delay; gboolean away; gchar *presence_message; }; static void example_call_connection_init (ExampleCallConnection *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, EXAMPLE_TYPE_CALL_CONNECTION, ExampleCallConnectionPrivate); self->priv->away = FALSE; self->priv->presence_message = g_strdup (""); } static void get_property (GObject *object, guint property_id, GValue *value, GParamSpec *spec) { ExampleCallConnection *self = EXAMPLE_CALL_CONNECTION (object); switch (property_id) { case PROP_ACCOUNT: g_value_set_string (value, self->priv->account); break; case PROP_SIMULATION_DELAY: g_value_set_uint (value, self->priv->simulation_delay); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, spec); } } static void set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *spec) { ExampleCallConnection *self = EXAMPLE_CALL_CONNECTION (object); switch (property_id) { case PROP_ACCOUNT: g_free (self->priv->account); self->priv->account = g_value_dup_string (value); break; case PROP_SIMULATION_DELAY: self->priv->simulation_delay = g_value_get_uint (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, spec); } } static void finalize (GObject *object) { ExampleCallConnection *self = EXAMPLE_CALL_CONNECTION (object); tp_contacts_mixin_finalize (object); g_free (self->priv->account); g_free (self->priv->presence_message); G_OBJECT_CLASS (example_call_connection_parent_class)->finalize (object); } static gchar * get_unique_connection_name (TpBaseConnection *conn) { ExampleCallConnection *self = EXAMPLE_CALL_CONNECTION (conn); return g_strdup_printf ("%s@%p", self->priv->account, self); } gchar * example_call_normalize_contact (TpHandleRepoIface *repo, const gchar *id, gpointer context, GError **error) { gchar *normal = NULL; if (example_call_protocol_check_contact_id (id, &normal, error)) return normal; else return NULL; } static void create_handle_repos (TpBaseConnection *conn, TpHandleRepoIface *repos[NUM_TP_HANDLE_TYPES]) { repos[TP_HANDLE_TYPE_CONTACT] = tp_dynamic_handle_repo_new (TP_HANDLE_TYPE_CONTACT, example_call_normalize_contact, NULL); } static GPtrArray * create_channel_managers (TpBaseConnection *conn) { ExampleCallConnection *self = EXAMPLE_CALL_CONNECTION (conn); GPtrArray *ret = g_ptr_array_sized_new (1); g_ptr_array_add (ret, g_object_new (EXAMPLE_TYPE_CALL_MANAGER, "connection", conn, "simulation-delay", self->priv->simulation_delay, NULL)); return ret; } static gboolean start_connecting (TpBaseConnection *conn, GError **error) { ExampleCallConnection *self = EXAMPLE_CALL_CONNECTION (conn); TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (conn, TP_HANDLE_TYPE_CONTACT); /* In a real connection manager we'd ask the underlying implementation to * start connecting, then go to state CONNECTED when finished, but here * we can do it immediately. */ conn->self_handle = tp_handle_ensure (contact_repo, self->priv->account, NULL, error); if (conn->self_handle == 0) return FALSE; tp_base_connection_change_status (conn, TP_CONNECTION_STATUS_CONNECTED, TP_CONNECTION_STATUS_REASON_REQUESTED); return TRUE; } static void shut_down (TpBaseConnection *conn) { /* In a real connection manager we'd ask the underlying implementation to * start shutting down, then call this function when finished, but here * we can do it immediately. */ tp_base_connection_finish_shutdown (conn); } static void constructed (GObject *object) { TpBaseConnection *base = TP_BASE_CONNECTION (object); void (*chain_up) (GObject *) = G_OBJECT_CLASS (example_call_connection_parent_class)->constructed; if (chain_up != NULL) chain_up (object); tp_contacts_mixin_init (object, G_STRUCT_OFFSET (ExampleCallConnection, contacts_mixin)); tp_base_connection_register_with_contacts_mixin (base); tp_presence_mixin_init (object, G_STRUCT_OFFSET (ExampleCallConnection, presence_mixin)); tp_presence_mixin_simple_presence_register_with_contacts_mixin (object); } static gboolean status_available (GObject *object, guint index_) { TpBaseConnection *base = TP_BASE_CONNECTION (object); if (base->status != TP_CONNECTION_STATUS_CONNECTED) return FALSE; return TRUE; } static GHashTable * get_contact_statuses (GObject *object, const GArray *contacts, GError **error) { ExampleCallConnection *self = EXAMPLE_CALL_CONNECTION (object); TpBaseConnection *base = TP_BASE_CONNECTION (object); guint i; GHashTable *result = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, (GDestroyNotify) tp_presence_status_free); for (i = 0; i < contacts->len; i++) { TpHandle contact = g_array_index (contacts, guint, i); ExampleCallPresence presence; GHashTable *parameters; parameters = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) tp_g_value_slice_free); /* we know our own status from the connection; for this example CM, * everyone else's status is assumed to be "available" */ if (contact == base->self_handle) { presence = (self->priv->away ? EXAMPLE_CALL_PRESENCE_AWAY : EXAMPLE_CALL_PRESENCE_AVAILABLE); if (self->priv->presence_message[0] != '\0') g_hash_table_insert (parameters, "message", tp_g_value_slice_new_string (self->priv->presence_message)); } else { presence = EXAMPLE_CALL_PRESENCE_AVAILABLE; } g_hash_table_insert (result, GUINT_TO_POINTER (contact), tp_presence_status_new (presence, parameters)); g_hash_table_unref (parameters); } return result; } static gboolean set_own_status (GObject *object, const TpPresenceStatus *status, GError **error) { ExampleCallConnection *self = EXAMPLE_CALL_CONNECTION (object); TpBaseConnection *base = TP_BASE_CONNECTION (object); GHashTable *presences; const gchar *message = ""; if (status->optional_arguments != NULL) { GValue *v = g_hash_table_lookup (status->optional_arguments, "message"); if (v != NULL && G_VALUE_HOLDS_STRING (v)) { message = g_value_get_string (v); if (message == NULL) message = ""; } } if (status->index == EXAMPLE_CALL_PRESENCE_AWAY) { if (self->priv->away && !tp_strdiff (message, self->priv->presence_message)) return TRUE; self->priv->away = TRUE; } else { if (!self->priv->away && !tp_strdiff (message, self->priv->presence_message)) return TRUE; self->priv->away = FALSE; } g_free (self->priv->presence_message); self->priv->presence_message = g_strdup (message); presences = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, NULL); g_hash_table_insert (presences, GUINT_TO_POINTER (base->self_handle), (gpointer) status); tp_presence_mixin_emit_presence_update (object, presences); g_hash_table_unref (presences); if (!self->priv->away) { g_signal_emit (self, signals[SIGNAL_AVAILABLE], 0, message); } return TRUE; } static const TpPresenceStatusOptionalArgumentSpec can_have_message[] = { { "message", "s", NULL, NULL }, { NULL } }; /* Must be kept in sync with ExampleCallPresence enum in header */ static const TpPresenceStatusSpec presence_statuses[] = { { "offline", TP_CONNECTION_PRESENCE_TYPE_OFFLINE, FALSE, NULL }, { "unknown", TP_CONNECTION_PRESENCE_TYPE_UNKNOWN, FALSE, NULL }, { "error", TP_CONNECTION_PRESENCE_TYPE_ERROR, FALSE, NULL }, { "away", TP_CONNECTION_PRESENCE_TYPE_AWAY, TRUE, can_have_message }, { "available", TP_CONNECTION_PRESENCE_TYPE_AVAILABLE, TRUE, can_have_message }, { NULL } }; static const gchar *interfaces_always_present[] = { TP_IFACE_CONNECTION_INTERFACE_CONTACTS, TP_IFACE_CONNECTION_INTERFACE_PRESENCE, TP_IFACE_CONNECTION_INTERFACE_REQUESTS, TP_IFACE_CONNECTION_INTERFACE_SIMPLE_PRESENCE, NULL }; const gchar * const * example_call_connection_get_possible_interfaces (void) { /* in this example CM we don't have any extra interfaces that are sometimes, * but not always, present */ return interfaces_always_present; } static void example_call_connection_class_init ( ExampleCallConnectionClass *klass) { TpBaseConnectionClass *base_class = (TpBaseConnectionClass *) klass; GObjectClass *object_class = (GObjectClass *) klass; GParamSpec *param_spec; object_class->get_property = get_property; object_class->set_property = set_property; object_class->constructed = constructed; object_class->finalize = finalize; g_type_class_add_private (klass, sizeof (ExampleCallConnectionPrivate)); base_class->create_handle_repos = create_handle_repos; base_class->get_unique_connection_name = get_unique_connection_name; base_class->create_channel_managers = create_channel_managers; base_class->start_connecting = start_connecting; base_class->shut_down = shut_down; base_class->interfaces_always_present = interfaces_always_present; param_spec = g_param_spec_string ("account", "Account name", "The username of this user", NULL, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_ACCOUNT, param_spec); param_spec = g_param_spec_uint ("simulation-delay", "Simulation delay", "Delay between simulated network events", 0, G_MAXUINT32, 1000, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_SIMULATION_DELAY, param_spec); /* Used in the call manager, to simulate an incoming call when we become * available */ signals[SIGNAL_AVAILABLE] = g_signal_new ("available", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 1, G_TYPE_STRING); tp_contacts_mixin_class_init (object_class, G_STRUCT_OFFSET (ExampleCallConnectionClass, contacts_mixin)); tp_presence_mixin_class_init (object_class, G_STRUCT_OFFSET (ExampleCallConnectionClass, presence_mixin), status_available, get_contact_statuses, set_own_status, presence_statuses); tp_presence_mixin_simple_presence_init_dbus_properties (object_class); } telepathy-qt-0.9.3/tests/lib/glib/call/cm.h0000644000175200001440000000526112000056607022730 0ustar00collabora-develusers00000000000000/* * manager.h - header for an example connection manager * * Copyright © 2007-2009 Collabora Ltd. * Copyright © 2007-2009 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 EXAMPLE_CALL_CM_H #define EXAMPLE_CALL_CM_H #include #include G_BEGIN_DECLS typedef struct _ExampleCallConnectionManager ExampleCallConnectionManager; typedef struct _ExampleCallConnectionManagerPrivate ExampleCallConnectionManagerPrivate; typedef struct _ExampleCallConnectionManagerClass ExampleCallConnectionManagerClass; typedef struct _ExampleCallConnectionManagerClassPrivate ExampleCallConnectionManagerClassPrivate; struct _ExampleCallConnectionManagerClass { TpBaseConnectionManagerClass parent_class; ExampleCallConnectionManagerClassPrivate *priv; }; struct _ExampleCallConnectionManager { TpBaseConnectionManager parent; ExampleCallConnectionManagerPrivate *priv; }; GType example_call_connection_manager_get_type (void); /* TYPE MACROS */ #define EXAMPLE_TYPE_CALL_CONNECTION_MANAGER \ (example_call_connection_manager_get_type ()) #define EXAMPLE_CALL_CONNECTION_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), EXAMPLE_TYPE_CALL_CONNECTION_MANAGER, \ ExampleCallConnectionManager)) #define EXAMPLE_CALL_CONNECTION_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), EXAMPLE_TYPE_CALL_CONNECTION_MANAGER, \ ExampleCallConnectionManagerClass)) #define EXAMPLE_IS_CALL_CONNECTION_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), EXAMPLE_TYPE_CALL_CONNECTION_MANAGER)) #define EXAMPLE_IS_CALL_CONNECTION_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), EXAMPLE_TYPE_CALL_CONNECTION_MANAGER)) #define EXAMPLE_CALL_CONNECTION_MANAGER_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), EXAMPLE_TYPE_CALL_CONNECTION_MANAGER, \ ExampleCallConnectionManagerClass)) G_END_DECLS #endif telepathy-qt-0.9.3/tests/lib/glib/call/call-manager.c0000644000175200001440000003567612000056607024664 0ustar00collabora-develusers00000000000000/* * call-manager.c - an example channel manager for Call channels. * * This channel manager emulates a protocol like XMPP Jingle, where you can * make several simultaneous calls to the same or different contacts. * * Copyright © 2007-2009 Collabora Ltd. * Copyright © 2007-2009 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 */ #include "call-manager.h" #include #include #include #include #include #include #include "call-channel.h" static void channel_manager_iface_init (gpointer, gpointer); G_DEFINE_TYPE_WITH_CODE (ExampleCallManager, example_call_manager, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (TP_TYPE_CHANNEL_MANAGER, channel_manager_iface_init)) /* type definition stuff */ enum { PROP_CONNECTION = 1, PROP_SIMULATION_DELAY, N_PROPS }; struct _ExampleCallManagerPrivate { TpBaseConnection *conn; guint simulation_delay; /* Map from reffed ExampleCallChannel to the same pointer; used as a * set. */ GHashTable *channels; /* Next channel will be ("CallChannel%u", next_channel_index) */ guint next_channel_index; gulong status_changed_id; gulong available_id; }; static void example_call_manager_init (ExampleCallManager *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, EXAMPLE_TYPE_CALL_MANAGER, ExampleCallManagerPrivate); self->priv->conn = NULL; self->priv->channels = g_hash_table_new_full (NULL, NULL, g_object_unref, NULL); self->priv->status_changed_id = 0; self->priv->available_id = 0; } static void example_call_manager_close_all (ExampleCallManager *self) { if (self->priv->channels != NULL) { GHashTable *tmp = self->priv->channels; GHashTableIter iter; gpointer v; self->priv->channels = NULL; g_hash_table_iter_init (&iter, tmp); while (g_hash_table_iter_next (&iter, NULL, &v)) tp_base_channel_close (v); g_hash_table_unref (tmp); } if (self->priv->available_id != 0) { g_signal_handler_disconnect (self->priv->conn, self->priv->available_id); self->priv->available_id = 0; } if (self->priv->status_changed_id != 0) { g_signal_handler_disconnect (self->priv->conn, self->priv->status_changed_id); self->priv->status_changed_id = 0; } } static void dispose (GObject *object) { ExampleCallManager *self = EXAMPLE_CALL_MANAGER (object); example_call_manager_close_all (self); g_assert (self->priv->channels == NULL); ((GObjectClass *) example_call_manager_parent_class)->dispose ( object); } static void get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { ExampleCallManager *self = EXAMPLE_CALL_MANAGER (object); switch (property_id) { case PROP_CONNECTION: g_value_set_object (value, self->priv->conn); break; case PROP_SIMULATION_DELAY: g_value_set_uint (value, self->priv->simulation_delay); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } } static void set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { ExampleCallManager *self = EXAMPLE_CALL_MANAGER (object); switch (property_id) { case PROP_CONNECTION: /* We don't ref the connection, because it owns a reference to the * channel manager, and it guarantees that the manager's lifetime is * less than its lifetime */ self->priv->conn = g_value_get_object (value); break; case PROP_SIMULATION_DELAY: self->priv->simulation_delay = g_value_get_uint (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } } static void status_changed_cb (TpBaseConnection *conn, guint status, guint reason, ExampleCallManager *self) { switch (status) { case TP_CONNECTION_STATUS_DISCONNECTED: { example_call_manager_close_all (self); } break; default: break; } } static ExampleCallChannel *new_channel (ExampleCallManager *self, TpHandle handle, TpHandle initiator, gpointer request_token, gboolean initial_audio, gboolean initial_video); static gboolean simulate_incoming_call_cb (gpointer p) { ExampleCallManager *self = p; TpHandleRepoIface *contact_repo; TpHandle caller; /* do nothing if we've been disconnected while waiting for the contact to * call us */ if (self->priv->available_id == 0) return FALSE; /* We're called by someone whose ID on the IM service is "caller" */ contact_repo = tp_base_connection_get_handles (self->priv->conn, TP_HANDLE_TYPE_CONTACT); caller = tp_handle_ensure (contact_repo, "caller", NULL, NULL); new_channel (self, caller, caller, NULL, TRUE, FALSE); return FALSE; } /* Whenever our presence changes from away to available, and whenever our * presence message changes while remaining available, simulate a call from * a contact */ static void available_cb (GObject *conn G_GNUC_UNUSED, const gchar *message, ExampleCallManager *self) { g_timeout_add_full (G_PRIORITY_DEFAULT, self->priv->simulation_delay, simulate_incoming_call_cb, g_object_ref (self), g_object_unref); } static void constructed (GObject *object) { ExampleCallManager *self = EXAMPLE_CALL_MANAGER (object); void (*chain_up) (GObject *) = ((GObjectClass *) example_call_manager_parent_class)->constructed; if (chain_up != NULL) { chain_up (object); } self->priv->status_changed_id = g_signal_connect (self->priv->conn, "status-changed", (GCallback) status_changed_cb, self); self->priv->available_id = g_signal_connect (self->priv->conn, "available", (GCallback) available_cb, self); } static void example_call_manager_class_init (ExampleCallManagerClass *klass) { GParamSpec *param_spec; GObjectClass *object_class = (GObjectClass *) klass; object_class->constructed = constructed; object_class->dispose = dispose; object_class->get_property = get_property; object_class->set_property = set_property; param_spec = g_param_spec_object ("connection", "Connection object", "The connection that owns this channel manager", TP_TYPE_BASE_CONNECTION, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_CONNECTION, param_spec); param_spec = g_param_spec_uint ("simulation-delay", "Simulation delay", "Delay between simulated network events", 0, G_MAXUINT32, 1000, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_SIMULATION_DELAY, param_spec); g_type_class_add_private (klass, sizeof (ExampleCallManagerPrivate)); } static void example_call_manager_foreach_channel (TpChannelManager *iface, TpExportableChannelFunc callback, gpointer user_data) { ExampleCallManager *self = EXAMPLE_CALL_MANAGER (iface); GHashTableIter iter; gpointer chan; g_hash_table_iter_init (&iter, self->priv->channels); while (g_hash_table_iter_next (&iter, &chan, NULL)) callback (chan, user_data); } static void channel_closed_cb (ExampleCallChannel *chan, ExampleCallManager *self) { tp_channel_manager_emit_channel_closed_for_object (self, TP_EXPORTABLE_CHANNEL (chan)); if (self->priv->channels != NULL) g_hash_table_remove (self->priv->channels, chan); } static ExampleCallChannel * new_channel (ExampleCallManager *self, TpHandle handle, TpHandle initiator, gpointer request_token, gboolean initial_audio, gboolean initial_video) { ExampleCallChannel *chan; gchar *object_path; GSList *requests = NULL; /* FIXME: This could potentially wrap around, but only after 4 billion * calls, which is probably plenty. */ object_path = g_strdup_printf ("%s/CallChannel%u", self->priv->conn->object_path, self->priv->next_channel_index++); chan = g_object_new (EXAMPLE_TYPE_CALL_CHANNEL, "connection", self->priv->conn, "object-path", object_path, "handle", handle, "initiator-handle", initiator, "requested", (self->priv->conn->self_handle == initiator), "simulation-delay", self->priv->simulation_delay, "initial-audio", initial_audio, "initial-video", initial_video, "mutable-contents", TRUE, NULL); g_free (object_path); g_signal_connect (chan, "closed", G_CALLBACK (channel_closed_cb), self); g_hash_table_insert (self->priv->channels, chan, chan); if (request_token != NULL) requests = g_slist_prepend (requests, request_token); tp_channel_manager_emit_new_channel (self, TP_EXPORTABLE_CHANNEL (chan), requests); g_slist_free (requests); return chan; } static const gchar * const audio_fixed_properties[] = { TP_PROP_CHANNEL_CHANNEL_TYPE, TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, TP_PROP_CHANNEL_TYPE_CALL_INITIAL_AUDIO, NULL }; static const gchar * const video_fixed_properties[] = { TP_PROP_CHANNEL_CHANNEL_TYPE, TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, TP_PROP_CHANNEL_TYPE_CALL_INITIAL_VIDEO, NULL }; static const gchar * const audio_allowed_properties[] = { TP_PROP_CHANNEL_TARGET_HANDLE, TP_PROP_CHANNEL_TARGET_ID, TP_PROP_CHANNEL_TYPE_CALL_INITIAL_VIDEO, NULL }; static const gchar * const video_allowed_properties[] = { TP_PROP_CHANNEL_TARGET_HANDLE, TP_PROP_CHANNEL_TARGET_ID, TP_PROP_CHANNEL_TYPE_CALL_INITIAL_AUDIO, NULL }; static void example_call_manager_type_foreach_channel_class (GType type, TpChannelManagerTypeChannelClassFunc func, gpointer user_data) { GHashTable *table = tp_asv_new ( TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING, TP_IFACE_CHANNEL_TYPE_CALL, TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, TP_HANDLE_TYPE_CONTACT, TP_PROP_CHANNEL_TYPE_CALL_INITIAL_AUDIO, G_TYPE_BOOLEAN, TRUE, NULL); func (type, table, audio_allowed_properties, user_data); g_hash_table_remove (table, TP_PROP_CHANNEL_TYPE_CALL_INITIAL_AUDIO); tp_asv_set_boolean (table, TP_PROP_CHANNEL_TYPE_CALL_INITIAL_VIDEO, TRUE); func (type, table, video_allowed_properties, user_data); g_hash_table_unref (table); } static gboolean example_call_manager_request (ExampleCallManager *self, gpointer request_token, GHashTable *request_properties, gboolean require_new) { TpHandle handle; GError *error = NULL; gboolean initial_audio, initial_video; if (tp_strdiff (tp_asv_get_string (request_properties, TP_PROP_CHANNEL_CHANNEL_TYPE), TP_IFACE_CHANNEL_TYPE_CALL)) { return FALSE; } if (tp_asv_get_uint32 (request_properties, TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, NULL) != TP_HANDLE_TYPE_CONTACT) { return FALSE; } handle = tp_asv_get_uint32 (request_properties, TP_PROP_CHANNEL_TARGET_HANDLE, NULL); g_assert (handle != 0); initial_audio = tp_asv_get_boolean (request_properties, TP_PROP_CHANNEL_TYPE_CALL_INITIAL_AUDIO, NULL); initial_video = tp_asv_get_boolean (request_properties, TP_PROP_CHANNEL_TYPE_CALL_INITIAL_VIDEO, NULL); if (!initial_audio && !initial_video) { g_set_error (&error, TP_ERROR, TP_ERROR_NOT_IMPLEMENTED, "Call channels must initially have either audio or video content"); goto error; } /* the set of (fixed | allowed) properties is the same for audio and video, * so we only need to check with one set */ if (tp_channel_manager_asv_has_unknown_properties (request_properties, audio_fixed_properties, audio_allowed_properties, &error)) { goto error; } if (handle == self->priv->conn->self_handle) { /* In protocols with a concept of multiple "resources" signed in to * one account (XMPP, and possibly MSN) it is technically possible to * call yourself - e.g. if you're signed in on two PCs, you can call one * from the other. For simplicity, this example simulates a protocol * where this is not the case. */ g_set_error (&error, TP_ERROR, TP_ERROR_NOT_IMPLEMENTED, "In this protocol, you can't call yourself"); goto error; } if (!require_new) { /* see if we're already calling that handle */ GHashTableIter iter; gpointer chan; g_hash_table_iter_init (&iter, self->priv->channels); while (g_hash_table_iter_next (&iter, &chan, NULL)) { guint its_handle; g_object_get (chan, "handle", &its_handle, NULL); if (its_handle == handle) { tp_channel_manager_emit_request_already_satisfied (self, request_token, TP_EXPORTABLE_CHANNEL (chan)); return TRUE; } } } new_channel (self, handle, self->priv->conn->self_handle, request_token, initial_audio, initial_video); return TRUE; error: tp_channel_manager_emit_request_failed (self, request_token, error->domain, error->code, error->message); g_error_free (error); return TRUE; } static gboolean example_call_manager_create_channel (TpChannelManager *manager, gpointer request_token, GHashTable *request_properties) { return example_call_manager_request ( EXAMPLE_CALL_MANAGER (manager), request_token, request_properties, TRUE); } static gboolean example_call_manager_ensure_channel (TpChannelManager *manager, gpointer request_token, GHashTable *request_properties) { return example_call_manager_request ( EXAMPLE_CALL_MANAGER (manager), request_token, request_properties, FALSE); } static void channel_manager_iface_init (gpointer g_iface, gpointer iface_data G_GNUC_UNUSED) { TpChannelManagerIface *iface = g_iface; iface->foreach_channel = example_call_manager_foreach_channel; iface->type_foreach_channel_class = example_call_manager_type_foreach_channel_class; iface->create_channel = example_call_manager_create_channel; iface->ensure_channel = example_call_manager_ensure_channel; /* In this channel manager, RequestChannel is not supported; Call is not * designed to work with the old RequestChannel API. */ iface->request_channel = NULL; } telepathy-qt-0.9.3/tests/lib/glib/call/call-content.c0000644000175200001440000000553312000056607024711 0ustar00collabora-develusers00000000000000/* * call-content.c - a content in a call. * * Copyright © 2007-2009 Collabora Ltd. * Copyright © 2007-2009 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 */ #include "call-content.h" #include #include #include G_DEFINE_TYPE (ExampleCallContent, example_call_content, TP_TYPE_BASE_MEDIA_CALL_CONTENT) struct _ExampleCallContentPrivate { ExampleCallStream *stream; }; static void example_call_content_init (ExampleCallContent *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, EXAMPLE_TYPE_CALL_CONTENT, ExampleCallContentPrivate); } static void dispose (GObject *object) { ExampleCallContent *self = EXAMPLE_CALL_CONTENT (object); g_clear_object (&self->priv->stream); ((GObjectClass *) example_call_content_parent_class)->dispose (object); } static void example_call_content_class_init (ExampleCallContentClass *klass) { GObjectClass *object_class = (GObjectClass *) klass; g_type_class_add_private (klass, sizeof (ExampleCallContentPrivate)); object_class->dispose = dispose; } ExampleCallStream * example_call_content_get_stream (ExampleCallContent *self) { g_return_val_if_fail (EXAMPLE_IS_CALL_CONTENT (self), NULL); return self->priv->stream; } void example_call_content_add_stream (ExampleCallContent *self, ExampleCallStream *stream) { g_return_if_fail (EXAMPLE_IS_CALL_CONTENT (self)); g_return_if_fail (EXAMPLE_IS_CALL_STREAM (stream)); g_return_if_fail (self->priv->stream == NULL); self->priv->stream = g_object_ref (stream); tp_base_call_content_add_stream ((TpBaseCallContent *) self, (TpBaseCallStream *) stream); } void example_call_content_remove_stream (ExampleCallContent *self) { TpBaseCallStream *stream; g_return_if_fail (EXAMPLE_IS_CALL_CONTENT (self)); g_return_if_fail (self->priv->stream != NULL); stream = (TpBaseCallStream *) self->priv->stream; self->priv->stream = NULL; tp_base_call_content_remove_stream ((TpBaseCallContent *) self, stream, 0, TP_CALL_STATE_CHANGE_REASON_UNKNOWN, "", ""); g_object_unref (stream); } telepathy-qt-0.9.3/tests/lib/glib/call/CMakeLists.txt0000644000175200001440000000074712000056607024724 0ustar00collabora-develusers00000000000000if(ENABLE_TP_GLIB_TESTS) set(example_cm_call_SRCS call-channel.c call-channel.h call-content.c call-content.h call-manager.c call-manager.h call-stream.c call-stream.h cm.c cm.h conn.c conn.h protocol.c protocol.h) add_library(example-cm-call STATIC ${example_cm_call_SRCS}) target_link_libraries(example-cm-call ${TPGLIB_LIBRARIES}) endif(ENABLE_TP_GLIB_TESTS) telepathy-qt-0.9.3/tests/lib/glib/call/cm.c0000644000175200001440000000477512000056607022734 0ustar00collabora-develusers00000000000000/* * manager.c - an example connection manager * * Copyright © 2007-2009 Collabora Ltd. * Copyright © 2007-2009 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 */ #include "cm.h" #include #include #include #include "conn.h" #include "protocol.h" G_DEFINE_TYPE (ExampleCallConnectionManager, example_call_connection_manager, TP_TYPE_BASE_CONNECTION_MANAGER) struct _ExampleCallConnectionManagerPrivate { int dummy; }; static void example_call_connection_manager_init (ExampleCallConnectionManager *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, EXAMPLE_TYPE_CALL_CONNECTION_MANAGER, ExampleCallConnectionManagerPrivate); } static void example_call_connection_manager_constructed (GObject *object) { ExampleCallConnectionManager *self = EXAMPLE_CALL_CONNECTION_MANAGER (object); TpBaseConnectionManager *base = (TpBaseConnectionManager *) self; void (*constructed) (GObject *) = ((GObjectClass *) example_call_connection_manager_parent_class)->constructed; TpBaseProtocol *protocol; if (constructed != NULL) constructed (object); protocol = g_object_new (EXAMPLE_TYPE_CALL_PROTOCOL, "name", "example", NULL); tp_base_connection_manager_add_protocol (base, protocol); g_object_unref (protocol); } static void example_call_connection_manager_class_init ( ExampleCallConnectionManagerClass *klass) { GObjectClass *object_class = (GObjectClass *) klass; TpBaseConnectionManagerClass *base_class = (TpBaseConnectionManagerClass *) klass; g_type_class_add_private (klass, sizeof (ExampleCallConnectionManagerPrivate)); object_class->constructed = example_call_connection_manager_constructed; base_class->cm_dbus_name = "example_call"; } telepathy-qt-0.9.3/tests/lib/glib/call/call-stream.h0000644000175200001440000000524512000056607024537 0ustar00collabora-develusers00000000000000/* * call-stream.h - header for an example stream * * Copyright © 2007-2009 Collabora Ltd. * Copyright © 2007-2009 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 EXAMPLE_CALL_STREAM_H #define EXAMPLE_CALL_STREAM_H #include #include G_BEGIN_DECLS typedef struct _ExampleCallStream ExampleCallStream; typedef struct _ExampleCallStreamPrivate ExampleCallStreamPrivate; typedef struct _ExampleCallStreamClass ExampleCallStreamClass; typedef struct _ExampleCallStreamClassPrivate ExampleCallStreamClassPrivate; GType example_call_stream_get_type (void); #define EXAMPLE_TYPE_CALL_STREAM \ (example_call_stream_get_type ()) #define EXAMPLE_CALL_STREAM(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXAMPLE_TYPE_CALL_STREAM, \ ExampleCallStream)) #define EXAMPLE_CALL_STREAM_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), EXAMPLE_TYPE_CALL_STREAM, \ ExampleCallStreamClass)) #define EXAMPLE_IS_CALL_STREAM(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EXAMPLE_TYPE_CALL_STREAM)) #define EXAMPLE_IS_CALL_STREAM_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), EXAMPLE_TYPE_CALL_STREAM)) #define EXAMPLE_CALL_STREAM_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), EXAMPLE_TYPE_CALL_STREAM, \ ExampleCallStreamClass)) struct _ExampleCallStreamClass { TpBaseMediaCallStreamClass parent_class; ExampleCallStreamClassPrivate *priv; }; struct _ExampleCallStream { TpBaseMediaCallStream parent; ExampleCallStreamPrivate *priv; }; void example_call_stream_accept_proposed_direction (ExampleCallStream *self); void example_call_stream_connect (ExampleCallStream *self); /* This controls receiving emulated network events, so it wouldn't exist in * a real connection manager */ void example_call_stream_simulate_contact_agreed_to_send ( ExampleCallStream *self); G_END_DECLS #endif telepathy-qt-0.9.3/tests/lib/glib/call/example_call.manager0000644000175200001440000000240212000056607026134 0ustar00collabora-develusers00000000000000[ConnectionManager] Interfaces= [Protocol example] Interfaces= ConnectionInterfaces=org.freedesktop.Telepathy.Connection.Interface.Requests;org.freedesktop.Telepathy.Connection.Interface.Contacts;org.freedesktop.Telepathy.Connection.Interface.Presence;org.freedesktop.Telepathy.Connection.Interface.SimplePresence; param-account=s required register param-simulation-delay=u default-simulation-delay=1000 RequestableChannelClasses=audio;video; VCardField=x-telepathy-example EnglishName=Example with Call channels Icon=face-smile [audio] org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.Call1 org.freedesktop.Telepathy.Channel.TargetHandleType u=1 org.freedesktop.Telepathy.Channel.Type.Call1.InitialAudio b=1 allowed=org.freedesktop.Telepathy.Channel.TargetHandle;org.freedesktop.Telepathy.Channel.TargetID;org.freedesktop.Telepathy.Channel.Type.Call1.InitialVideo; [video] org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.Call1 org.freedesktop.Telepathy.Channel.TargetHandleType u=1 org.freedesktop.Telepathy.Channel.Type.Call1.InitialVideo b=1 allowed=org.freedesktop.Telepathy.Channel.TargetHandle;org.freedesktop.Telepathy.Channel.TargetID;org.freedesktop.Telepathy.Channel.Type.Call1.InitialAudio; telepathy-qt-0.9.3/tests/lib/glib/call/call-stream.c0000644000175200001440000003603612000056607024534 0ustar00collabora-develusers00000000000000/* * call-stream.c - a stream in a call. * * Copyright © 2007-2009 Collabora Ltd. * Copyright © 2007-2009 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 */ #include "call-stream.h" #include #include #include G_DEFINE_TYPE (ExampleCallStream, example_call_stream, TP_TYPE_BASE_MEDIA_CALL_STREAM) enum { PROP_SIMULATION_DELAY = 1, PROP_LOCALLY_REQUESTED, PROP_HANDLE, N_PROPS }; struct _ExampleCallStreamPrivate { guint simulation_delay; gboolean locally_requested; TpHandle handle; guint agreed_delay_id; }; static void example_call_stream_init (ExampleCallStream *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, EXAMPLE_TYPE_CALL_STREAM, ExampleCallStreamPrivate); } static void example_call_stream_receive_direction_request ( ExampleCallStream *self, gboolean local_send, gboolean remote_send); static void example_call_stream_change_direction (ExampleCallStream *self, gboolean want_to_send, gboolean want_to_receive); static void constructed (GObject *object) { ExampleCallStream *self = EXAMPLE_CALL_STREAM (object); void (*chain_up) (GObject *) = ((GObjectClass *) example_call_stream_parent_class)->constructed; static guint count = 0; TpBaseConnection *conn; TpDBusDaemon *dbus; gchar *object_path; TpCallStreamEndpoint *endpoint; if (chain_up != NULL) chain_up (object); conn = tp_base_call_stream_get_connection ((TpBaseCallStream *) self); dbus = tp_base_connection_get_dbus_daemon (conn); object_path = g_strdup_printf ("%s/Endpoint%d", tp_base_call_stream_get_object_path ((TpBaseCallStream *) self), count++); endpoint = tp_call_stream_endpoint_new (dbus, object_path, TP_STREAM_TRANSPORT_TYPE_RAW_UDP, FALSE); tp_base_media_call_stream_add_endpoint ((TpBaseMediaCallStream *) self, endpoint); if (self->priv->locally_requested) { example_call_stream_change_direction (self, TRUE, TRUE); } else { example_call_stream_receive_direction_request (self, TRUE, TRUE); } g_object_unref (endpoint); g_free (object_path); } static void get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { ExampleCallStream *self = EXAMPLE_CALL_STREAM (object); switch (property_id) { case PROP_SIMULATION_DELAY: g_value_set_uint (value, self->priv->simulation_delay); break; case PROP_LOCALLY_REQUESTED: g_value_set_boolean (value, self->priv->locally_requested); break; case PROP_HANDLE: g_value_set_uint (value, self->priv->handle); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { ExampleCallStream *self = EXAMPLE_CALL_STREAM (object); switch (property_id) { case PROP_SIMULATION_DELAY: self->priv->simulation_delay = g_value_get_uint (value); break; case PROP_LOCALLY_REQUESTED: self->priv->locally_requested = g_value_get_boolean (value); break; case PROP_HANDLE: self->priv->handle = g_value_get_uint (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static gboolean stream_request_receiving (TpBaseCallStream *base, TpHandle contact, gboolean receive, GError **error); static gboolean stream_set_sending (TpBaseCallStream *base, gboolean sending, GError **error); static void finalize (GObject *object) { ExampleCallStream *self = EXAMPLE_CALL_STREAM (object); if (self->priv->agreed_delay_id != 0) g_source_remove (self->priv->agreed_delay_id); G_OBJECT_CLASS (example_call_stream_parent_class)->finalize (object); } static void example_call_stream_class_init (ExampleCallStreamClass *klass) { GObjectClass *object_class = (GObjectClass *) klass; TpBaseCallStreamClass *stream_class = (TpBaseCallStreamClass *) klass; GParamSpec *param_spec; g_type_class_add_private (klass, sizeof (ExampleCallStreamPrivate)); object_class->constructed = constructed; object_class->set_property = set_property; object_class->get_property = get_property; object_class->finalize = finalize; stream_class->request_receiving = stream_request_receiving; stream_class->set_sending = stream_set_sending; param_spec = g_param_spec_uint ("simulation-delay", "Simulation delay", "Delay between simulated network events", 0, G_MAXUINT32, 1000, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_SIMULATION_DELAY, param_spec); param_spec = g_param_spec_boolean ("locally-requested", "Locally requested?", "True if this channel was requested by the local user", FALSE, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_LOCALLY_REQUESTED, param_spec); param_spec = g_param_spec_uint ("handle", "Peer's TpHandle", "The handle with which this stream communicates or 0 if not applicable", 0, G_MAXUINT32, 0, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_HANDLE, param_spec); } void example_call_stream_accept_proposed_direction (ExampleCallStream *self) { TpBaseCallStream *base = (TpBaseCallStream *) self; TpSendingState state = tp_base_call_stream_get_local_sending_state (base); if (state != TP_SENDING_STATE_PENDING_SEND) return; tp_base_call_stream_update_local_sending_state (base, TP_SENDING_STATE_SENDING, 0, TP_CALL_STATE_CHANGE_REASON_UNKNOWN, "", ""); } void example_call_stream_simulate_contact_agreed_to_send (ExampleCallStream *self) { TpBaseCallStream *base = (TpBaseCallStream *) self; TpSendingState state = tp_base_call_stream_get_remote_sending_state (base, self->priv->handle); if (state != TP_SENDING_STATE_PENDING_SEND) g_message ("%s: SIGNALLING: Sending to server: OK, I'll send you media", tp_base_call_stream_get_object_path (base)); tp_base_call_stream_update_remote_sending_state ((TpBaseCallStream *) self, self->priv->handle, TP_SENDING_STATE_SENDING, 0, TP_CALL_STATE_CHANGE_REASON_UNKNOWN, "", ""); } static gboolean simulate_contact_agreed_to_send_cb (gpointer p) { example_call_stream_simulate_contact_agreed_to_send (p); return FALSE; } static void example_call_stream_change_direction (ExampleCallStream *self, gboolean want_to_send, gboolean want_to_receive) { TpBaseCallStream *base = (TpBaseCallStream *) self; TpSendingState local_sending_state = tp_base_call_stream_get_local_sending_state (base); TpSendingState remote_sending_state = tp_base_call_stream_get_remote_sending_state (base, self->priv->handle); if (want_to_send) { if (local_sending_state != TP_SENDING_STATE_SENDING) { if (local_sending_state == TP_SENDING_STATE_PENDING_SEND) { g_message ("%s: SIGNALLING: send: I will now send you media", tp_base_call_stream_get_object_path (base)); } g_message ("%s: MEDIA: sending media to peer", tp_base_call_stream_get_object_path (base)); tp_base_call_stream_update_local_sending_state (base, TP_SENDING_STATE_SENDING, 0, TP_CALL_STATE_CHANGE_REASON_UNKNOWN, "", ""); } } else { if (local_sending_state == TP_SENDING_STATE_SENDING) { g_message ("%s: SIGNALLING: send: I will no longer send you media", tp_base_call_stream_get_object_path (base)); g_message ("%s: MEDIA: no longer sending media to peer", tp_base_call_stream_get_object_path (base)); tp_base_call_stream_update_local_sending_state (base, TP_SENDING_STATE_NONE, 0, TP_CALL_STATE_CHANGE_REASON_UNKNOWN, "", ""); } else if (local_sending_state == TP_SENDING_STATE_PENDING_SEND) { g_message ("%s: SIGNALLING: send: refusing to send you media", tp_base_call_stream_get_object_path (base)); tp_base_call_stream_update_local_sending_state (base, TP_SENDING_STATE_NONE, 0, TP_CALL_STATE_CHANGE_REASON_UNKNOWN, "", ""); } } if (want_to_receive) { if (remote_sending_state == TP_SENDING_STATE_NONE) { g_message ("%s: SIGNALLING: send: send me media, please?", tp_base_call_stream_get_object_path (base)); tp_base_call_stream_update_remote_sending_state ( (TpBaseCallStream *) self, self->priv->handle, TP_SENDING_STATE_PENDING_SEND, 0, TP_CALL_STATE_CHANGE_REASON_UNKNOWN, "", ""); if (self->priv->agreed_delay_id == 0) { self->priv->agreed_delay_id = g_timeout_add ( self->priv->simulation_delay, simulate_contact_agreed_to_send_cb, self); } } } else { if (remote_sending_state != TP_SENDING_STATE_NONE) { g_message ("%s: SIGNALLING: send: Please stop sending me media", tp_base_call_stream_get_object_path (base)); g_message ("%s: MEDIA: suppressing output of stream", tp_base_call_stream_get_object_path (base)); tp_base_call_stream_update_remote_sending_state ( (TpBaseCallStream *) self, self->priv->handle, TP_SENDING_STATE_NONE, 0, TP_CALL_STATE_CHANGE_REASON_UNKNOWN, "", ""); } } } /* The remote user wants to change the direction of this stream according * to @local_send and @remote_send. Shall we let him? */ static void example_call_stream_receive_direction_request (ExampleCallStream *self, gboolean local_send, gboolean remote_send) { TpBaseCallStream *base = (TpBaseCallStream *) self; TpSendingState local_sending_state = tp_base_call_stream_get_local_sending_state (base); TpSendingState remote_sending_state = tp_base_call_stream_get_remote_sending_state (base, self->priv->handle); /* In some protocols, streams cannot be neither sending nor receiving, so * if a stream is set to TP_MEDIA_STREAM_DIRECTION_NONE, this is equivalent * to removing it. (This is true in XMPP, for instance.) * * However, for this example we'll emulate a protocol where streams can be * directionless. */ if (local_send) { g_message ("%s: SIGNALLING: send: Please start sending me media", tp_base_call_stream_get_object_path (base)); if (local_sending_state == TP_SENDING_STATE_NONE) { /* ask the user for permission */ tp_base_call_stream_update_local_sending_state (base, TP_SENDING_STATE_PENDING_SEND, 0, TP_CALL_STATE_CHANGE_REASON_UNKNOWN, "", ""); } else { /* nothing to do, we're already sending (or asking the user for * permission to do so) on that stream */ } } else { g_message ("%s: SIGNALLING: receive: Please stop sending me media", tp_base_call_stream_get_object_path (base)); g_message ("%s: SIGNALLING: reply: OK!", tp_base_call_stream_get_object_path (base)); if (local_sending_state == TP_SENDING_STATE_SENDING) { g_message ("%s: MEDIA: no longer sending media to peer", tp_base_call_stream_get_object_path (base)); tp_base_call_stream_update_local_sending_state (base, TP_SENDING_STATE_NONE, 0, TP_CALL_STATE_CHANGE_REASON_UNKNOWN, "", ""); } else if (local_sending_state == TP_SENDING_STATE_PENDING_SEND) { tp_base_call_stream_update_local_sending_state (base, TP_SENDING_STATE_NONE, 0, TP_CALL_STATE_CHANGE_REASON_UNKNOWN, "", ""); } else { /* nothing to do, we're not sending on that stream anyway */ } } if (remote_send) { g_message ("%s: SIGNALLING: receive: I will now send you media", tp_base_call_stream_get_object_path (base)); if (remote_sending_state != TP_SENDING_STATE_SENDING) { tp_base_call_stream_update_remote_sending_state ( (TpBaseCallStream *) self, self->priv->handle, TP_SENDING_STATE_SENDING, 0, TP_CALL_STATE_CHANGE_REASON_UNKNOWN, "", ""); } } else { if (remote_sending_state == TP_SENDING_STATE_PENDING_SEND) { g_message ("%s: SIGNALLING: receive: No, I refuse to send you media", tp_base_call_stream_get_object_path (base)); tp_base_call_stream_update_remote_sending_state ( (TpBaseCallStream *) self, self->priv->handle, TP_SENDING_STATE_NONE, 0, TP_CALL_STATE_CHANGE_REASON_UNKNOWN, "", ""); } else if (remote_sending_state == TP_SENDING_STATE_SENDING) { g_message ("%s: SIGNALLING: receive: I will no longer send media", tp_base_call_stream_get_object_path (base)); tp_base_call_stream_update_remote_sending_state ( (TpBaseCallStream *) self, self->priv->handle, TP_SENDING_STATE_NONE, 0, TP_CALL_STATE_CHANGE_REASON_UNKNOWN, "", ""); } } } static gboolean stream_set_sending (TpBaseCallStream *base, gboolean sending, GError **error) { ExampleCallStream *self = EXAMPLE_CALL_STREAM (base); TpSendingState remote_sending_state = tp_base_call_stream_get_remote_sending_state (base, self->priv->handle); example_call_stream_change_direction (self, sending, (remote_sending_state == TP_SENDING_STATE_SENDING)); return TRUE; } static gboolean stream_request_receiving (TpBaseCallStream *base, TpHandle contact, gboolean receive, GError **error) { ExampleCallStream *self = EXAMPLE_CALL_STREAM (base); TpSendingState local_sending_state = tp_base_call_stream_get_local_sending_state (base); /* This is the only member */ g_assert (contact == self->priv->handle); example_call_stream_change_direction (self, (local_sending_state == TP_SENDING_STATE_SENDING), receive); return TRUE; } telepathy-qt-0.9.3/tests/lib/glib/call/call-content.h0000644000175200001440000000530412000056607024712 0ustar00collabora-develusers00000000000000/* * call-content.h - header for an example content * * Copyright © 2007-2009 Collabora Ltd. * Copyright © 2007-2009 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 EXAMPLE_CALL_CONTENT_H #define EXAMPLE_CALL_CONTENT_H #include #include #include "call-stream.h" G_BEGIN_DECLS typedef struct _ExampleCallContent ExampleCallContent; typedef struct _ExampleCallContentPrivate ExampleCallContentPrivate; typedef struct _ExampleCallContentClass ExampleCallContentClass; typedef struct _ExampleCallContentClassPrivate ExampleCallContentClassPrivate; GType example_call_content_get_type (void); #define EXAMPLE_TYPE_CALL_CONTENT \ (example_call_content_get_type ()) #define EXAMPLE_CALL_CONTENT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXAMPLE_TYPE_CALL_CONTENT, \ ExampleCallContent)) #define EXAMPLE_CALL_CONTENT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), EXAMPLE_TYPE_CALL_CONTENT, \ ExampleCallContentClass)) #define EXAMPLE_IS_CALL_CONTENT(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EXAMPLE_TYPE_CALL_CONTENT)) #define EXAMPLE_IS_CALL_CONTENT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), EXAMPLE_TYPE_CALL_CONTENT)) #define EXAMPLE_CALL_CONTENT_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), EXAMPLE_TYPE_CALL_CONTENT, \ ExampleCallContentClass)) struct _ExampleCallContentClass { TpBaseMediaCallContentClass parent_class; ExampleCallContentClassPrivate *priv; }; struct _ExampleCallContent { TpBaseMediaCallContent parent; ExampleCallContentPrivate *priv; }; /* In this example, each content can only have one stream. */ ExampleCallStream *example_call_content_get_stream (ExampleCallContent *self); void example_call_content_add_stream (ExampleCallContent *self, ExampleCallStream *stream); void example_call_content_remove_stream (ExampleCallContent *self); G_END_DECLS #endif telepathy-qt-0.9.3/tests/lib/glib/call/call-channel.h0000644000175200001440000000436712000056607024660 0ustar00collabora-develusers00000000000000/* * call-channel.h - header for an example channel * * Copyright © 2007-2009 Collabora Ltd. * Copyright © 2007-2009 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 EXAMPLE_CALL_CHANNEL_H #define EXAMPLE_CALL_CHANNEL_H #include #include G_BEGIN_DECLS typedef struct _ExampleCallChannel ExampleCallChannel; typedef struct _ExampleCallChannelPrivate ExampleCallChannelPrivate; typedef struct _ExampleCallChannelClass ExampleCallChannelClass; GType example_call_channel_get_type (void); #define EXAMPLE_TYPE_CALL_CHANNEL \ (example_call_channel_get_type ()) #define EXAMPLE_CALL_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXAMPLE_TYPE_CALL_CHANNEL, \ ExampleCallChannel)) #define EXAMPLE_CALL_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), EXAMPLE_TYPE_CALL_CHANNEL, \ ExampleCallChannelClass)) #define EXAMPLE_IS_CALL_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EXAMPLE_TYPE_CALL_CHANNEL)) #define EXAMPLE_IS_CALL_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), EXAMPLE_TYPE_CALL_CHANNEL)) #define EXAMPLE_CALL_CHANNEL_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), EXAMPLE_TYPE_CALL_CHANNEL, \ ExampleCallChannelClass)) struct _ExampleCallChannelClass { TpBaseMediaCallChannelClass parent_class; }; struct _ExampleCallChannel { TpBaseMediaCallChannel parent; ExampleCallChannelPrivate *priv; }; G_END_DECLS #endif telepathy-qt-0.9.3/tests/lib/glib/call/conn.h0000644000175200001440000000512212000056607023262 0ustar00collabora-develusers00000000000000/* * conn.h - header for an example connection * * Copyright © 2007-2009 Collabora Ltd. * Copyright © 2007-2009 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef EXAMPLE_CALL_CONN_H #define EXAMPLE_CALL_CONN_H #include #include #include #include G_BEGIN_DECLS typedef struct _ExampleCallConnection ExampleCallConnection; typedef struct _ExampleCallConnectionPrivate ExampleCallConnectionPrivate; typedef struct _ExampleCallConnectionClass ExampleCallConnectionClass; typedef struct _ExampleCallConnectionClassPrivate ExampleCallConnectionClassPrivate; struct _ExampleCallConnectionClass { TpBaseConnectionClass parent_class; TpPresenceMixinClass presence_mixin; TpContactsMixinClass contacts_mixin; ExampleCallConnectionClassPrivate *priv; }; struct _ExampleCallConnection { TpBaseConnection parent; TpPresenceMixin presence_mixin; TpContactsMixin contacts_mixin; ExampleCallConnectionPrivate *priv; }; GType example_call_connection_get_type (void); #define EXAMPLE_TYPE_CALL_CONNECTION \ (example_call_connection_get_type ()) #define EXAMPLE_CALL_CONNECTION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), EXAMPLE_TYPE_CALL_CONNECTION, \ ExampleCallConnection)) #define EXAMPLE_CALL_CONNECTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), EXAMPLE_TYPE_CALL_CONNECTION, \ ExampleCallConnectionClass)) #define EXAMPLE_IS_CALL_CONNECTION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), EXAMPLE_TYPE_CALL_CONNECTION)) #define EXAMPLE_IS_CALL_CONNECTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), EXAMPLE_TYPE_CALL_CONNECTION)) #define EXAMPLE_CALL_CONNECTION_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), EXAMPLE_TYPE_CALL_CONNECTION, \ ExampleCallConnectionClass)) /* Must be kept in sync with the array presence_statuses in conn.c */ typedef enum { EXAMPLE_CALL_PRESENCE_OFFLINE = 0, EXAMPLE_CALL_PRESENCE_UNKNOWN, EXAMPLE_CALL_PRESENCE_ERROR, EXAMPLE_CALL_PRESENCE_AWAY, EXAMPLE_CALL_PRESENCE_AVAILABLE } ExampleCallPresence; gchar *example_call_normalize_contact (TpHandleRepoIface *repo, const gchar *id, gpointer context, GError **error); const gchar * const *example_call_connection_get_possible_interfaces (void); G_END_DECLS #endif telepathy-qt-0.9.3/tests/lib/glib/call/protocol.c0000644000175200001440000001133512000056607024164 0ustar00collabora-develusers00000000000000/* * protocol.c - an example Protocol * * Copyright © 2007-2010 Collabora Ltd. * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #include "protocol.h" #include #include "call-manager.h" #include "conn.h" G_DEFINE_TYPE (ExampleCallProtocol, example_call_protocol, TP_TYPE_BASE_PROTOCOL) static void example_call_protocol_init ( ExampleCallProtocol *self) { } gboolean example_call_protocol_check_contact_id (const gchar *id, gchar **normal, GError **error) { g_return_val_if_fail (id != NULL, FALSE); if (id[0] == '\0') { g_set_error (error, TP_ERROR, TP_ERROR_INVALID_HANDLE, "ID must not be empty"); return FALSE; } if (normal != NULL) *normal = g_utf8_normalize (id, -1, G_NORMALIZE_ALL_COMPOSE); return TRUE; } static gboolean account_param_filter (const TpCMParamSpec *paramspec, GValue *value, GError **error) { const gchar *id = g_value_get_string (value); return example_call_protocol_check_contact_id (id, NULL, error); } static const TpCMParamSpec example_call_example_params[] = { { "account", "s", G_TYPE_STRING, TP_CONN_MGR_PARAM_FLAG_REQUIRED | TP_CONN_MGR_PARAM_FLAG_REGISTER, NULL, /* no default */ 0, /* unused, formerly struct offset */ account_param_filter, NULL, /* filter data, unused here */ NULL }, /* setter data, now unused */ { "simulation-delay", "u", G_TYPE_UINT, TP_CONN_MGR_PARAM_FLAG_HAS_DEFAULT, GUINT_TO_POINTER (1000), /* default */ 0, /* unused, formerly struct offset */ NULL, /* no filter */ NULL, /* filter data, unused here */ NULL }, /* setter data, now unused */ { NULL } }; static const TpCMParamSpec * get_parameters (TpBaseProtocol *self) { return example_call_example_params; } static TpBaseConnection * new_connection (TpBaseProtocol *protocol, GHashTable *asv, GError **error) { ExampleCallConnection *conn; const gchar *account; guint sim_delay; account = tp_asv_get_string (asv, "account"); /* telepathy-glib checked this for us */ g_assert (account != NULL); sim_delay = tp_asv_get_uint32 (asv, "simulation-delay", NULL); conn = EXAMPLE_CALL_CONNECTION ( g_object_new (EXAMPLE_TYPE_CALL_CONNECTION, "account", account, "protocol", tp_base_protocol_get_name (protocol), "simulation-delay", sim_delay, NULL)); return (TpBaseConnection *) conn; } static gchar * normalize_contact (TpBaseProtocol *self G_GNUC_UNUSED, const gchar *contact, GError **error) { gchar *normal; if (example_call_protocol_check_contact_id (contact, &normal, error)) return normal; else return NULL; } static gchar * identify_account (TpBaseProtocol *self G_GNUC_UNUSED, GHashTable *asv, GError **error) { const gchar *account = tp_asv_get_string (asv, "account"); if (account != NULL) return normalize_contact (self, account, error); g_set_error (error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "'account' parameter not given"); return NULL; } static GStrv get_interfaces (TpBaseProtocol *self) { return NULL; } static void get_connection_details (TpBaseProtocol *self G_GNUC_UNUSED, GStrv *connection_interfaces, GType **channel_managers, gchar **icon_name, gchar **english_name, gchar **vcard_field) { if (connection_interfaces != NULL) { *connection_interfaces = g_strdupv ( (GStrv) example_call_connection_get_possible_interfaces ()); } if (channel_managers != NULL) { GType types[] = { EXAMPLE_TYPE_CALL_MANAGER, G_TYPE_INVALID }; *channel_managers = g_memdup (types, sizeof (types)); } if (icon_name != NULL) *icon_name = g_strdup ("face-smile"); if (english_name != NULL) *english_name = g_strdup ("Example with Call channels"); if (vcard_field != NULL) *vcard_field = g_strdup ("x-telepathy-example"); } static void example_call_protocol_class_init ( ExampleCallProtocolClass *klass) { TpBaseProtocolClass *base_class = (TpBaseProtocolClass *) klass; base_class->get_parameters = get_parameters; base_class->new_connection = new_connection; base_class->normalize_contact = normalize_contact; base_class->identify_account = identify_account; base_class->get_interfaces = get_interfaces; base_class->get_connection_details = get_connection_details; } telepathy-qt-0.9.3/tests/lib/glib/call/protocol.h0000644000175200001440000000354412000056607024174 0ustar00collabora-develusers00000000000000/* * protocol.h - header for an example Protocol * Copyright © 2007-2010 Collabora Ltd. * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef EXAMPLE_CALL_PROTOCOL_H #define EXAMPLE_CALL_PROTOCOL_H #include #include G_BEGIN_DECLS typedef struct _ExampleCallProtocol ExampleCallProtocol; typedef struct _ExampleCallProtocolPrivate ExampleCallProtocolPrivate; typedef struct _ExampleCallProtocolClass ExampleCallProtocolClass; typedef struct _ExampleCallProtocolClassPrivate ExampleCallProtocolClassPrivate; struct _ExampleCallProtocolClass { TpBaseProtocolClass parent_class; ExampleCallProtocolClassPrivate *priv; }; struct _ExampleCallProtocol { TpBaseProtocol parent; ExampleCallProtocolPrivate *priv; }; GType example_call_protocol_get_type (void); #define EXAMPLE_TYPE_CALL_PROTOCOL \ (example_call_protocol_get_type ()) #define EXAMPLE_CALL_PROTOCOL(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ EXAMPLE_TYPE_CALL_PROTOCOL, \ ExampleCallProtocol)) #define EXAMPLE_CALL_PROTOCOL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), \ EXAMPLE_TYPE_CALL_PROTOCOL, \ ExampleCallProtocolClass)) #define EXAMPLE_IS_CALL_PROTOCOL(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ EXAMPLE_TYPE_CALL_PROTOCOL)) #define EXAMPLE_IS_CALL_PROTOCOL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), \ EXAMPLE_TYPE_CALL_PROTOCOL)) #define EXAMPLE_CALL_PROTOCOL_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), \ EXAMPLE_TYPE_CALL_PROTOCOL, \ ExampleCallProtocolClass)) gboolean example_call_protocol_check_contact_id (const gchar *id, gchar **normal, GError **error); G_END_DECLS #endif telepathy-qt-0.9.3/tests/lib/glib/dbus-tube-chan.h0000644000175200001440000001202112000056607024207 0ustar00collabora-develusers00000000000000/* * dbus-tube-chan.h - Simple dbus tube channel * * Copyright (C) 2010 Collabora Ltd. * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef __TP_DBUS_TUBE_CHAN_H__ #define __TP_DBUS_TUBE_CHAN_H__ #include #include #include #include G_BEGIN_DECLS /* Base Class */ typedef struct _TpTestsDBusTubeChannel TpTestsDBusTubeChannel; typedef struct _TpTestsDBusTubeChannelClass TpTestsDBusTubeChannelClass; typedef struct _TpTestsDBusTubeChannelPrivate TpTestsDBusTubeChannelPrivate; GType tp_tests_dbus_tube_channel_get_type (void); #define TP_TESTS_TYPE_DBUS_TUBE_CHANNEL \ (tp_tests_dbus_tube_channel_get_type ()) #define TP_TESTS_DBUS_TUBE_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), TP_TESTS_TYPE_DBUS_TUBE_CHANNEL, \ TpTestsDBusTubeChannel)) #define TP_TESTS_DBUS_TUBE_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), TP_TESTS_TYPE_DBUS_TUBE_CHANNEL, \ TpTestsDBusTubeChannelClass)) #define TP_TESTS_IS_DBUS_TUBE_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TP_TESTS_TYPE_DBUS_TUBE_CHANNEL)) #define TP_TESTS_IS_DBUS_TUBE_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), TP_TESTS_TYPE_DBUS_TUBE_CHANNEL)) #define TP_TESTS_DBUS_TUBE_CHANNEL_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_DBUS_TUBE_CHANNEL, \ TpTestsDBusTubeChannelClass)) struct _TpTestsDBusTubeChannelClass { TpBaseChannelClass parent_class; TpTextMixinClass text_class; TpDBusPropertiesMixinClass dbus_properties_class; }; struct _TpTestsDBusTubeChannel { TpBaseChannel parent; TpTextMixin text; TpTestsDBusTubeChannelPrivate *priv; }; /* Contact DBus Tube */ typedef struct _TpTestsContactDBusTubeChannel TpTestsContactDBusTubeChannel; typedef struct _TpTestsContactDBusTubeChannelClass TpTestsContactDBusTubeChannelClass; GType tp_tests_contact_dbus_tube_channel_get_type (void); void tp_tests_dbus_tube_channel_set_close_on_accept ( TpTestsDBusTubeChannel *self, gboolean close_on_accept); void tp_tests_dbus_tube_channel_peer_connected_no_stream ( TpTestsDBusTubeChannel *self, gchar *bus_name, TpHandle handle); void tp_tests_dbus_tube_channel_peer_disconnected ( TpTestsDBusTubeChannel *self, TpHandle handle); #define TP_TESTS_TYPE_CONTACT_DBUS_TUBE_CHANNEL \ (tp_tests_contact_dbus_tube_channel_get_type ()) #define TP_TESTS_CONTACT_DBUS_TUBE_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), TP_TESTS_TYPE_CONTACT_DBUS_TUBE_CHANNEL, \ TpTestsContactDBusTubeChannel)) #define TP_TESTS_CONTACT_DBUS_TUBE_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), TP_TESTS_TYPE_CONTACT_DBUS_TUBE_CHANNEL, \ TpTestsContactDBusTubeChannelClass)) #define TP_TESTS_IS_CONTACT_DBUS_TUBE_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TP_TESTS_TYPE_CONTACT_DBUS_TUBE_CHANNEL)) #define TP_TESTS_IS_CONTACT_DBUS_TUBE_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), TP_TESTS_TYPE_CONTACT_DBUS_TUBE_CHANNEL)) #define TP_TESTS_CONTACT_DBUS_TUBE_CHANNEL_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_CONTACT_DBUS_TUBE_CHANNEL, \ TpTestsContactDBusTubeChannelClass)) struct _TpTestsContactDBusTubeChannelClass { TpTestsDBusTubeChannelClass parent_class; }; struct _TpTestsContactDBusTubeChannel { TpTestsDBusTubeChannel parent; }; /* Room DBus Tube */ typedef struct _TpTestsRoomDBusTubeChannel TpTestsRoomDBusTubeChannel; typedef struct _TpTestsRoomDBusTubeChannelClass TpTestsRoomDBusTubeChannelClass; GType tp_tests_room_dbus_tube_channel_get_type (void); #define TP_TESTS_TYPE_ROOM_DBUS_TUBE_CHANNEL \ (tp_tests_room_dbus_tube_channel_get_type ()) #define TP_TESTS_ROOM_DBUS_TUBE_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), TP_TESTS_TYPE_ROOM_DBUS_TUBE_CHANNEL, \ TpTestsRoomDBusTubeChannel)) #define TP_TESTS_ROOM_DBUS_TUBE_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), TP_TESTS_TYPE_ROOM_DBUS_TUBE_CHANNEL, \ TpTestsRoomDBusTubeChannelClass)) #define TP_TESTS_IS_ROOM_DBUS_TUBE_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TP_TESTS_TYPE_ROOM_DBUS_TUBE_CHANNEL)) #define TP_TESTS_IS_ROOM_DBUS_TUBE_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), TP_TESTS_TYPE_ROOM_DBUS_TUBE_CHANNEL)) #define TP_TESTS_ROOM_DBUS_TUBE_CHANNEL_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_ROOM_DBUS_TUBE_CHANNEL, \ TpTestsRoomDBusTubeChannelClass)) struct _TpTestsRoomDBusTubeChannelClass { TpTestsDBusTubeChannelClass parent_class; }; struct _TpTestsRoomDBusTubeChannel { TpTestsDBusTubeChannel parent; }; G_END_DECLS #endif /* #ifndef __TP_DBUS_TUBE_CHAN_H__ */ telepathy-qt-0.9.3/tests/lib/glib/echo2/0000755000175200001440000000000012000056607022241 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/tests/lib/glib/echo2/chan.h0000644000175200001440000000351512000056607023327 0ustar00collabora-develusers00000000000000/* * chan.h - header for an example channel * * Copyright (C) 2007 Collabora Ltd. * Copyright (C) 2007 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef EXAMPLE_ECHO_MESSAGE_PARTS_CHAN_H #define EXAMPLE_ECHO_MESSAGE_PARTS_CHAN_H #include #include #include G_BEGIN_DECLS typedef struct _ExampleEcho2Channel ExampleEcho2Channel; typedef struct _ExampleEcho2ChannelClass ExampleEcho2ChannelClass; typedef struct _ExampleEcho2ChannelPrivate ExampleEcho2ChannelPrivate; GType example_echo_2_channel_get_type (void); #define EXAMPLE_TYPE_ECHO_2_CHANNEL \ (example_echo_2_channel_get_type ()) #define EXAMPLE_ECHO_2_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXAMPLE_TYPE_ECHO_2_CHANNEL, \ ExampleEcho2Channel)) #define EXAMPLE_ECHO_2_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), EXAMPLE_TYPE_ECHO_2_CHANNEL, \ ExampleEcho2ChannelClass)) #define EXAMPLE_IS_ECHO_2_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EXAMPLE_TYPE_ECHO_2_CHANNEL)) #define EXAMPLE_IS_ECHO_2_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), EXAMPLE_TYPE_ECHO_2_CHANNEL)) #define EXAMPLE_ECHO_2_CHANNEL_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), EXAMPLE_TYPE_ECHO_2_CHANNEL, \ ExampleEcho2ChannelClass)) struct _ExampleEcho2ChannelClass { GObjectClass parent_class; TpDBusPropertiesMixinClass dbus_properties_class; }; struct _ExampleEcho2Channel { GObject parent; TpMessageMixin text; ExampleEcho2ChannelPrivate *priv; }; G_END_DECLS #endif telepathy-qt-0.9.3/tests/lib/glib/echo2/connection-manager.h0000644000175200001440000000416512000056607026167 0ustar00collabora-develusers00000000000000/* * manager.h - header for an example connection manager * Copyright (C) 2007 Collabora Ltd. * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef EXAMPLE_ECHO_MESSAGE_PARTS_MANAGER_H #define EXAMPLE_ECHO_MESSAGE_PARTS_MANAGER_H #include #include G_BEGIN_DECLS typedef struct _ExampleEcho2ConnectionManager ExampleEcho2ConnectionManager; typedef struct _ExampleEcho2ConnectionManagerPrivate ExampleEcho2ConnectionManagerPrivate; typedef struct _ExampleEcho2ConnectionManagerClass ExampleEcho2ConnectionManagerClass; typedef struct _ExampleEcho2ConnectionManagerClassPrivate ExampleEcho2ConnectionManagerClassPrivate; struct _ExampleEcho2ConnectionManagerClass { TpBaseConnectionManagerClass parent_class; ExampleEcho2ConnectionManagerClassPrivate *priv; }; struct _ExampleEcho2ConnectionManager { TpBaseConnectionManager parent; ExampleEcho2ConnectionManagerPrivate *priv; }; GType example_echo_2_connection_manager_get_type (void); #define EXAMPLE_TYPE_ECHO_2_CONNECTION_MANAGER \ (example_echo_2_connection_manager_get_type ()) #define EXAMPLE_ECHO_2_CONNECTION_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ EXAMPLE_TYPE_ECHO_2_CONNECTION_MANAGER, \ ExampleEcho2ConnectionManager)) #define EXAMPLE_ECHO_2_CONNECTION_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), \ EXAMPLE_TYPE_ECHO_2_CONNECTION_MANAGER, \ ExampleEcho2ConnectionManagerClass)) #define EXAMPLE_IS_ECHO_2_CONNECTION_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ EXAMPLE_TYPE_ECHO_2_CONNECTION_MANAGER)) #define EXAMPLE_IS_ECHO_2_CONNECTION_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), \ EXAMPLE_TYPE_ECHO_2_CONNECTION_MANAGER)) #define EXAMPLE_ECHO_2_CONNECTION_MANAGER_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), \ EXAMPLE_TYPE_ECHO_2_CONNECTION_MANAGER, \ ExampleEcho2ConnectionManagerClass)) G_END_DECLS #endif telepathy-qt-0.9.3/tests/lib/glib/echo2/conn.c0000644000175200001440000001246112000056607023346 0ustar00collabora-develusers00000000000000/* * conn.c - an example connection * * Copyright (C) 2007 Collabora Ltd. * Copyright (C) 2007 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #include "conn.h" #include #include #include #include "im-manager.h" #include "protocol.h" G_DEFINE_TYPE (ExampleEcho2Connection, example_echo_2_connection, TP_TYPE_BASE_CONNECTION) enum { PROP_ACCOUNT = 1, N_PROPS }; struct _ExampleEcho2ConnectionPrivate { gchar *account; }; static void example_echo_2_connection_init (ExampleEcho2Connection *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, EXAMPLE_TYPE_ECHO_2_CONNECTION, ExampleEcho2ConnectionPrivate); } static void get_property (GObject *object, guint property_id, GValue *value, GParamSpec *spec) { ExampleEcho2Connection *self = EXAMPLE_ECHO_2_CONNECTION (object); switch (property_id) { case PROP_ACCOUNT: g_value_set_string (value, self->priv->account); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, spec); } } static void set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *spec) { ExampleEcho2Connection *self = EXAMPLE_ECHO_2_CONNECTION (object); switch (property_id) { case PROP_ACCOUNT: g_free (self->priv->account); self->priv->account = g_utf8_strdown (g_value_get_string (value), -1); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, spec); } } static void finalize (GObject *object) { ExampleEcho2Connection *self = EXAMPLE_ECHO_2_CONNECTION (object); g_free (self->priv->account); G_OBJECT_CLASS (example_echo_2_connection_parent_class)->finalize (object); } static gchar * get_unique_connection_name (TpBaseConnection *conn) { ExampleEcho2Connection *self = EXAMPLE_ECHO_2_CONNECTION (conn); return g_strdup (self->priv->account); } static gchar * example_normalize_contact (TpHandleRepoIface *repo G_GNUC_UNUSED, const gchar *id, gpointer context G_GNUC_UNUSED, GError **error) { return example_echo_2_protocol_normalize_contact (id, error); } static void create_handle_repos (TpBaseConnection *conn, TpHandleRepoIface *repos[NUM_TP_HANDLE_TYPES]) { repos[TP_HANDLE_TYPE_CONTACT] = tp_dynamic_handle_repo_new (TP_HANDLE_TYPE_CONTACT, example_normalize_contact, NULL); } static GPtrArray * create_channel_managers (TpBaseConnection *conn) { GPtrArray *ret = g_ptr_array_sized_new (1); g_ptr_array_add (ret, g_object_new (EXAMPLE_TYPE_ECHO_2_IM_MANAGER, "connection", conn, NULL)); return ret; } static gboolean start_connecting (TpBaseConnection *conn, GError **error) { ExampleEcho2Connection *self = EXAMPLE_ECHO_2_CONNECTION (conn); TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (conn, TP_HANDLE_TYPE_CONTACT); /* In a real connection manager we'd ask the underlying implementation to * start connecting, then go to state CONNECTED when finished, but here * we can do it immediately. */ conn->self_handle = tp_handle_ensure (contact_repo, self->priv->account, NULL, NULL); tp_base_connection_change_status (conn, TP_CONNECTION_STATUS_CONNECTED, TP_CONNECTION_STATUS_REASON_REQUESTED); return TRUE; } static void shut_down (TpBaseConnection *conn) { /* In a real connection manager we'd ask the underlying implementation to * start shutting down, then call this function when finished, but here * we can do it immediately. */ tp_base_connection_finish_shutdown (conn); } static const gchar *interfaces_always_present[] = { TP_IFACE_CONNECTION_INTERFACE_REQUESTS, NULL }; const gchar * const * example_echo_2_connection_get_possible_interfaces (void) { /* in this example CM we don't have any extra interfaces that are sometimes, * but not always, present */ return interfaces_always_present; } static void example_echo_2_connection_class_init (ExampleEcho2ConnectionClass *klass) { TpBaseConnectionClass *base_class = (TpBaseConnectionClass *) klass; GObjectClass *object_class = (GObjectClass *) klass; GParamSpec *param_spec; object_class->get_property = get_property; object_class->set_property = set_property; object_class->finalize = finalize; g_type_class_add_private (klass, sizeof (ExampleEcho2ConnectionPrivate)); base_class->create_handle_repos = create_handle_repos; base_class->get_unique_connection_name = get_unique_connection_name; base_class->create_channel_managers = create_channel_managers; base_class->start_connecting = start_connecting; base_class->shut_down = shut_down; base_class->interfaces_always_present = interfaces_always_present; param_spec = g_param_spec_string ("account", "Account name", "The username of this user", NULL, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_BLURB); g_object_class_install_property (object_class, PROP_ACCOUNT, param_spec); } telepathy-qt-0.9.3/tests/lib/glib/echo2/manager-file.py0000644000175200001440000000077312000056607025151 0ustar00collabora-develusers00000000000000# Input for tools/manager-file.py MANAGER = 'example_echo_2' PARAMS = { 'example' : { 'account': { 'dtype': 's', 'flags': 'required register', 'filter': 'tp_cm_param_filter_string_nonempty', # 'filter_data': 'NULL', # 'default': ..., # 'struct_field': '...', # 'setter_data': 'NULL', }, }, } STRUCTS = { 'example': None } telepathy-qt-0.9.3/tests/lib/glib/echo2/chan.c0000644000175200001440000004672112000056607023330 0ustar00collabora-develusers00000000000000/* * chan.c - an example text channel talking to a particular * contact. Similar code is used for 1-1 IM channels in many protocols * (IRC private messages ("/query"), XMPP IM etc.) * * Copyright (C) 2007 Collabora Ltd. * Copyright (C) 2007 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #include "chan.h" #include #include #include #include static void channel_iface_init (gpointer iface, gpointer data); static void chat_state_iface_init (gpointer iface, gpointer data); static void destroyable_iface_init (gpointer iface, gpointer data); G_DEFINE_TYPE_WITH_CODE (ExampleEcho2Channel, example_echo_2_channel, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_DBUS_PROPERTIES, tp_dbus_properties_mixin_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL, channel_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_TYPE_TEXT, tp_message_mixin_text_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_INTERFACE_MESSAGES, tp_message_mixin_messages_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_INTERFACE_CHAT_STATE, chat_state_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_INTERFACE_DESTROYABLE, destroyable_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_CHANNEL_IFACE, NULL); G_IMPLEMENT_INTERFACE (TP_TYPE_EXPORTABLE_CHANNEL, NULL)) /* type definition stuff */ enum { PROP_OBJECT_PATH = 1, PROP_CHANNEL_TYPE, PROP_HANDLE_TYPE, PROP_HANDLE, PROP_TARGET_ID, PROP_REQUESTED, PROP_INITIATOR_HANDLE, PROP_INITIATOR_ID, PROP_CONNECTION, PROP_INTERFACES, PROP_CHANNEL_DESTROYED, PROP_CHANNEL_PROPERTIES, N_PROPS }; struct _ExampleEcho2ChannelPrivate { TpBaseConnection *conn; gchar *object_path; TpHandle handle; TpHandle initiator; /* These are really booleans, but gboolean is signed. Thanks, GLib */ unsigned closed:1; unsigned disposed:1; }; static const char * example_echo_2_channel_interfaces[] = { TP_IFACE_CHANNEL_INTERFACE_MESSAGES, TP_IFACE_CHANNEL_INTERFACE_CHAT_STATE, TP_IFACE_CHANNEL_INTERFACE_DESTROYABLE, NULL }; static void example_echo_2_channel_init (ExampleEcho2Channel *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, EXAMPLE_TYPE_ECHO_2_CHANNEL, ExampleEcho2ChannelPrivate); } static void send_message (GObject *object, TpMessage *message, TpMessageSendingFlags flags) { ExampleEcho2Channel *self = EXAMPLE_ECHO_2_CHANNEL (object); time_t timestamp = time (NULL); guint len = tp_message_count_parts (message); const gchar *content = NULL; TpMessage *received = NULL; guint i; if (tp_asv_get_string (tp_message_peek (message, 0), "interface") != NULL) { /* this message is interface-specific - let's not echo it */ goto finally; } content = tp_asv_get_string (tp_message_peek (message, 1), "content"); if (content && strstr (content, "(fail)") != NULL) { TpMessage *delivery_report = tp_cm_message_new (self->priv->conn, 1); tp_cm_message_set_sender (delivery_report, self->priv->handle); tp_message_set_uint32 (delivery_report, 0, "message-type", TP_CHANNEL_TEXT_MESSAGE_TYPE_DELIVERY_REPORT); tp_message_set_int64 (delivery_report, 0, "message-received", timestamp); tp_message_set_uint32 (delivery_report, 0, "delivery-status", TP_DELIVERY_STATUS_PERMANENTLY_FAILED); tp_message_set_uint32 (delivery_report, 0, "delivery-error", TP_CHANNEL_TEXT_SEND_ERROR_PERMISSION_DENIED); tp_message_set_string (delivery_report, 0, "delivery-error-message", "You asked for it"); tp_message_set_string (delivery_report, 0, "delivery-token", "1111"); tp_cm_message_take_message (delivery_report, 0, "delivery-echo", message); tp_message_mixin_take_received (object, delivery_report); return; } received = tp_cm_message_new (self->priv->conn, 1); /* Copy/modify the headers for the "received" message */ { TpChannelTextMessageType message_type; gboolean valid; tp_cm_message_set_sender (received, self->priv->handle); tp_message_set_string (received, 0, "message-token", "0000"); tp_message_set_string (received, 0, "supersedes", "1234"); if (!tp_message_mixin_has_pending_messages (object, NULL)) tp_message_set_boolean (received, 0, "scrollback", TRUE); message_type = tp_asv_get_uint32 (tp_message_peek (message, 0), "message-type", &valid); /* The check for 'valid' means that if message-type is missing or of the * wrong type, fall back to NORMAL (this is in fact a no-op, since * NORMAL == 0 and tp_asv_get_uint32 returns 0 on missing or wrongly * typed values) */ if (valid && message_type != TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL) tp_message_set_uint32 (received, 0, "message-type", message_type); tp_message_set_uint32 (received, 0, "message-sent", timestamp); tp_message_set_uint32 (received, 0, "message-received", timestamp); } /* Copy the content for the "received" message */ for (i = 1; i < len; i++) { const GHashTable *input = tp_message_peek (message, i); const gchar *s; const GValue *value; guint j; /* in this example we ignore interface-specific parts */ s = tp_asv_get_string (input, "content-type"); if (s == NULL) continue; s = tp_asv_get_string (input, "interface"); if (s != NULL) continue; /* OK, we want to copy this part */ j = tp_message_append_part (received); s = tp_asv_get_string (input, "content-type"); g_assert (s != NULL); /* already checked */ tp_message_set_string (received, j, "content-type", s); s = tp_asv_get_string (input, "identifier"); if (s != NULL) tp_message_set_string (received, j, "identifier", s); s = tp_asv_get_string (input, "alternative"); if (s != NULL) tp_message_set_string (received, j, "alternative", s); s = tp_asv_get_string (input, "lang"); if (s != NULL) tp_message_set_string (received, j, "lang", s); value = tp_asv_lookup (input, "content"); if (value != NULL) tp_message_set (received, j, "content", value); } finally: /* "OK, we've sent the message" (after calling this, message must not be * dereferenced) */ tp_message_mixin_sent (object, message, flags, "", NULL); if (received != NULL) { /* Pretend the other user sent us back the same message. After this call, * the received message is owned by the mixin */ tp_message_mixin_take_received (object, received); } } static GObject * constructor (GType type, guint n_props, GObjectConstructParam *props) { GObject *object = G_OBJECT_CLASS (example_echo_2_channel_parent_class)->constructor (type, n_props, props); ExampleEcho2Channel *self = EXAMPLE_ECHO_2_CHANNEL (object); static TpChannelTextMessageType const types[] = { TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL, TP_CHANNEL_TEXT_MESSAGE_TYPE_ACTION, TP_CHANNEL_TEXT_MESSAGE_TYPE_NOTICE }; static const char * const content_types[] = { "*/*", NULL }; tp_dbus_daemon_register_object ( tp_base_connection_get_dbus_daemon (self->priv->conn), self->priv->object_path, self); tp_message_mixin_init (object, G_STRUCT_OFFSET (ExampleEcho2Channel, text), self->priv->conn); tp_message_mixin_implement_sending (object, send_message, (sizeof (types) / sizeof (types[0])), types, TP_MESSAGE_PART_SUPPORT_FLAG_ONE_ATTACHMENT | TP_MESSAGE_PART_SUPPORT_FLAG_MULTIPLE_ATTACHMENTS, TP_DELIVERY_REPORTING_SUPPORT_FLAG_RECEIVE_FAILURES, content_types); return object; } static void get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { ExampleEcho2Channel *self = EXAMPLE_ECHO_2_CHANNEL (object); switch (property_id) { case PROP_OBJECT_PATH: g_value_set_string (value, self->priv->object_path); break; case PROP_CHANNEL_TYPE: g_value_set_static_string (value, TP_IFACE_CHANNEL_TYPE_TEXT); break; case PROP_HANDLE_TYPE: g_value_set_uint (value, TP_HANDLE_TYPE_CONTACT); break; case PROP_HANDLE: g_value_set_uint (value, self->priv->handle); break; case PROP_TARGET_ID: { TpHandleRepoIface *contact_repo = tp_base_connection_get_handles ( self->priv->conn, TP_HANDLE_TYPE_CONTACT); g_value_set_string (value, tp_handle_inspect (contact_repo, self->priv->handle)); } break; case PROP_REQUESTED: g_value_set_boolean (value, (self->priv->initiator == self->priv->conn->self_handle)); break; case PROP_INITIATOR_HANDLE: g_value_set_uint (value, self->priv->initiator); break; case PROP_INITIATOR_ID: { TpHandleRepoIface *contact_repo = tp_base_connection_get_handles ( self->priv->conn, TP_HANDLE_TYPE_CONTACT); g_value_set_string (value, self->priv->initiator == 0 ? "" : tp_handle_inspect (contact_repo, self->priv->initiator)); } break; case PROP_CONNECTION: g_value_set_object (value, self->priv->conn); break; case PROP_INTERFACES: g_value_set_boxed (value, example_echo_2_channel_interfaces); break; case PROP_CHANNEL_DESTROYED: g_value_set_boolean (value, self->priv->closed); break; case PROP_CHANNEL_PROPERTIES: g_value_take_boxed (value, tp_dbus_properties_mixin_make_properties_hash (object, TP_IFACE_CHANNEL, "ChannelType", TP_IFACE_CHANNEL, "TargetHandleType", TP_IFACE_CHANNEL, "TargetHandle", TP_IFACE_CHANNEL, "TargetID", TP_IFACE_CHANNEL, "InitiatorHandle", TP_IFACE_CHANNEL, "InitiatorID", TP_IFACE_CHANNEL, "Requested", TP_IFACE_CHANNEL, "Interfaces", NULL)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { ExampleEcho2Channel *self = EXAMPLE_ECHO_2_CHANNEL (object); switch (property_id) { case PROP_OBJECT_PATH: g_free (self->priv->object_path); self->priv->object_path = g_value_dup_string (value); break; case PROP_HANDLE: /* we don't ref it here because we don't necessarily have access to the * contact repo yet - instead we ref it in the constructor. */ self->priv->handle = g_value_get_uint (value); break; case PROP_INITIATOR_HANDLE: /* likewise */ self->priv->initiator = g_value_get_uint (value); break; case PROP_HANDLE_TYPE: case PROP_CHANNEL_TYPE: /* these properties are writable in the interface, but not actually * meaningfully changable on this channel, so we do nothing */ break; case PROP_CONNECTION: self->priv->conn = g_value_get_object (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void dispose (GObject *object) { ExampleEcho2Channel *self = EXAMPLE_ECHO_2_CHANNEL (object); if (self->priv->disposed) return; self->priv->disposed = TRUE; if (!self->priv->closed) { self->priv->closed = TRUE; tp_svc_channel_emit_closed (self); } ((GObjectClass *) example_echo_2_channel_parent_class)->dispose (object); } static void finalize (GObject *object) { ExampleEcho2Channel *self = EXAMPLE_ECHO_2_CHANNEL (object); g_free (self->priv->object_path); tp_message_mixin_finalize (object); ((GObjectClass *) example_echo_2_channel_parent_class)->finalize (object); } static void example_echo_2_channel_class_init (ExampleEcho2ChannelClass *klass) { static TpDBusPropertiesMixinPropImpl channel_props[] = { { "TargetHandleType", "handle-type", NULL }, { "TargetHandle", "handle", NULL }, { "ChannelType", "channel-type", NULL }, { "Interfaces", "interfaces", NULL }, { "TargetID", "target-id", NULL }, { "Requested", "requested", NULL }, { "InitiatorHandle", "initiator-handle", NULL }, { "InitiatorID", "initiator-id", NULL }, { NULL } }; static TpDBusPropertiesMixinIfaceImpl prop_interfaces[] = { { TP_IFACE_CHANNEL, tp_dbus_properties_mixin_getter_gobject_properties, NULL, channel_props, }, { NULL } }; GObjectClass *object_class = (GObjectClass *) klass; GParamSpec *param_spec; g_type_class_add_private (klass, sizeof (ExampleEcho2ChannelPrivate)); object_class->constructor = constructor; object_class->set_property = set_property; object_class->get_property = get_property; object_class->dispose = dispose; object_class->finalize = finalize; g_object_class_override_property (object_class, PROP_OBJECT_PATH, "object-path"); g_object_class_override_property (object_class, PROP_CHANNEL_TYPE, "channel-type"); g_object_class_override_property (object_class, PROP_HANDLE_TYPE, "handle-type"); g_object_class_override_property (object_class, PROP_HANDLE, "handle"); g_object_class_override_property (object_class, PROP_CHANNEL_DESTROYED, "channel-destroyed"); g_object_class_override_property (object_class, PROP_CHANNEL_PROPERTIES, "channel-properties"); param_spec = g_param_spec_object ("connection", "TpBaseConnection object", "Connection object that owns this channel", TP_TYPE_BASE_CONNECTION, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_CONNECTION, param_spec); param_spec = g_param_spec_boxed ("interfaces", "Extra D-Bus interfaces", "Additional Channel.Interface.* interfaces", G_TYPE_STRV, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_INTERFACES, param_spec); param_spec = g_param_spec_string ("target-id", "Peer's ID", "The string obtained by inspecting the target handle", NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_TARGET_ID, param_spec); param_spec = g_param_spec_uint ("initiator-handle", "Initiator's handle", "The contact who initiated the channel", 0, G_MAXUINT32, 0, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_INITIATOR_HANDLE, param_spec); param_spec = g_param_spec_string ("initiator-id", "Initiator's ID", "The string obtained by inspecting the initiator-handle", NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_INITIATOR_ID, param_spec); param_spec = g_param_spec_boolean ("requested", "Requested?", "True if this channel was requested by the local user", FALSE, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_REQUESTED, param_spec); klass->dbus_properties_class.interfaces = prop_interfaces; tp_dbus_properties_mixin_class_init (object_class, G_STRUCT_OFFSET (ExampleEcho2ChannelClass, dbus_properties_class)); tp_message_mixin_init_dbus_properties (object_class); } static void example_echo_2_channel_close (ExampleEcho2Channel *self) { GObject *object = (GObject *) self; if (!self->priv->closed) { TpHandle first_sender; /* The manager wants to be able to respawn the channel if it has pending * messages. When respawned, the channel must have the initiator set * to the contact who sent us those messages (if it isn't already), * and the messages must be marked as having been rescued so they * don't get logged twice. */ if (tp_message_mixin_has_pending_messages (object, &first_sender)) { if (self->priv->initiator != first_sender) { self->priv->initiator = first_sender; } tp_message_mixin_set_rescued (object); } else { /* No pending messages, so it's OK to really close */ self->priv->closed = TRUE; } tp_svc_channel_emit_closed (self); } } static void channel_close (TpSvcChannel *iface, DBusGMethodInvocation *context) { ExampleEcho2Channel *self = EXAMPLE_ECHO_2_CHANNEL (iface); example_echo_2_channel_close (self); tp_svc_channel_return_from_close (context); } static void channel_get_channel_type (TpSvcChannel *iface, DBusGMethodInvocation *context) { tp_svc_channel_return_from_get_channel_type (context, TP_IFACE_CHANNEL_TYPE_TEXT); } static void channel_get_handle (TpSvcChannel *iface, DBusGMethodInvocation *context) { ExampleEcho2Channel *self = EXAMPLE_ECHO_2_CHANNEL (iface); tp_svc_channel_return_from_get_handle (context, TP_HANDLE_TYPE_CONTACT, self->priv->handle); } static void channel_get_interfaces (TpSvcChannel *iface, DBusGMethodInvocation *context) { tp_svc_channel_return_from_get_interfaces (context, example_echo_2_channel_interfaces); } static void channel_iface_init (gpointer iface, gpointer data) { TpSvcChannelClass *klass = iface; #define IMPLEMENT(x) tp_svc_channel_implement_##x (klass, channel_##x) IMPLEMENT (close); IMPLEMENT (get_channel_type); IMPLEMENT (get_handle); IMPLEMENT (get_interfaces); #undef IMPLEMENT } static void chat_state_set_chat_state(TpSvcChannelInterfaceChatState *iface, guint state, DBusGMethodInvocation *context) { ExampleEcho2Channel *self = EXAMPLE_ECHO_2_CHANNEL (iface); GError *error = NULL; if (state >= NUM_TP_CHANNEL_CHAT_STATES) { g_set_error (&error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "invalid state: %u", state); dbus_g_method_return_error (context, error); g_error_free (error); return; } tp_svc_channel_interface_chat_state_emit_chat_state_changed ( iface, self->priv->conn->self_handle, state); tp_svc_channel_interface_chat_state_return_from_set_chat_state (context); } static void chat_state_iface_init (gpointer iface, gpointer data) { TpSvcChannelInterfaceChatStateClass *klass = iface; #define IMPLEMENT(x) \ tp_svc_channel_interface_chat_state_implement_##x (klass, chat_state_##x) IMPLEMENT (set_chat_state); #undef IMPLEMENT } static void destroyable_destroy (TpSvcChannelInterfaceDestroyable *iface, DBusGMethodInvocation *context) { ExampleEcho2Channel *self = EXAMPLE_ECHO_2_CHANNEL (iface); tp_message_mixin_clear ((GObject *) self); example_echo_2_channel_close (self); g_assert (self->priv->closed); tp_svc_channel_interface_destroyable_return_from_destroy (context); } static void destroyable_iface_init (gpointer iface, gpointer data) { TpSvcChannelInterfaceDestroyableClass *klass = iface; #define IMPLEMENT(x) \ tp_svc_channel_interface_destroyable_implement_##x (klass, destroyable_##x) IMPLEMENT (destroy); #undef IMPLEMENT } telepathy-qt-0.9.3/tests/lib/glib/echo2/im-manager.h0000644000175200001440000000341112000056607024426 0ustar00collabora-develusers00000000000000/* * manager.h - header for an example channel manager * * Copyright (C) 2007 Collabora Ltd. * Copyright (C) 2007 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef EXAMPLE_ECHO_MESSAGE_PARTS_IM_MANAGER_H #define EXAMPLE_ECHO_MESSAGE_PARTS_IM_MANAGER_H #include G_BEGIN_DECLS typedef struct _ExampleEcho2ImManager ExampleEcho2ImManager; typedef struct _ExampleEcho2ImManagerClass ExampleEcho2ImManagerClass; typedef struct _ExampleEcho2ImManagerPrivate ExampleEcho2ImManagerPrivate; struct _ExampleEcho2ImManagerClass { GObjectClass parent_class; }; struct _ExampleEcho2ImManager { GObject parent; ExampleEcho2ImManagerPrivate *priv; }; GType example_echo_2_im_manager_get_type (void); /* TYPE MACROS */ #define EXAMPLE_TYPE_ECHO_2_IM_MANAGER \ (example_echo_2_im_manager_get_type ()) #define EXAMPLE_ECHO_2_IM_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), EXAMPLE_TYPE_ECHO_2_IM_MANAGER, \ ExampleEcho2ImManager)) #define EXAMPLE_ECHO_2_IM_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), EXAMPLE_TYPE_ECHO_2_IM_MANAGER, \ ExampleEcho2ImManagerClass)) #define EXAMPLE_IS_ECHO_2_IM_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), EXAMPLE_TYPE_ECHO_2_IM_MANAGER)) #define EXAMPLE_IS_ECHO_2_IM_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), EXAMPLE_TYPE_ECHO_2_IM_MANAGER)) #define EXAMPLE_ECHO_2_IM_MANAGER_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), EXAMPLE_TYPE_ECHO_2_IM_MANAGER, \ ExampleEcho2ImManagerClass)) G_END_DECLS #endif telepathy-qt-0.9.3/tests/lib/glib/echo2/CMakeLists.txt0000644000175200001440000000102512000056607024777 0ustar00collabora-develusers00000000000000if(ENABLE_TP_GLIB_TESTS) set(example_cm_echo2_SRCS chan.c chan.h conn.c connection-manager.c connection-manager.h conn.h im-manager.c im-manager.h protocol.c protocol.h) add_library(example-cm-echo2 STATIC ${example_cm_echo2_SRCS}) target_link_libraries(example-cm-echo2 ${TPGLIB_LIBRARIES}) tpqt_generate_manager_file(${CMAKE_CURRENT_SOURCE_DIR}/manager-file.py example_echo_2.manager connection-manager.c) endif(ENABLE_TP_GLIB_TESTS) telepathy-qt-0.9.3/tests/lib/glib/echo2/im-manager.c0000644000175200001440000002466612000056607024440 0ustar00collabora-develusers00000000000000/* * im-manager.c - an example channel manager for channels talking to a * particular contact. Similar code is used for 1-1 IM channels in many * protocols (IRC private messages ("/query"), XMPP IM etc.) * * Copyright (C) 2007 Collabora Ltd. * Copyright (C) 2007 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #include "im-manager.h" #include #include #include "chan.h" static void channel_manager_iface_init (gpointer, gpointer); G_DEFINE_TYPE_WITH_CODE (ExampleEcho2ImManager, example_echo_2_im_manager, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (TP_TYPE_CHANNEL_MANAGER, channel_manager_iface_init)) /* type definition stuff */ enum { PROP_CONNECTION = 1, N_PROPS }; struct _ExampleEcho2ImManagerPrivate { TpBaseConnection *conn; /* GUINT_TO_POINTER (handle) => ExampleEcho2Channel */ GHashTable *channels; gulong status_changed_id; }; static void example_echo_2_im_manager_init (ExampleEcho2ImManager *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, EXAMPLE_TYPE_ECHO_2_IM_MANAGER, ExampleEcho2ImManagerPrivate); self->priv->channels = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_object_unref); } static void example_echo_2_im_manager_close_all (ExampleEcho2ImManager *self); static void dispose (GObject *object) { ExampleEcho2ImManager *self = EXAMPLE_ECHO_2_IM_MANAGER (object); example_echo_2_im_manager_close_all (self); g_assert (self->priv->channels == NULL); ((GObjectClass *) example_echo_2_im_manager_parent_class)->dispose (object); } static void get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { ExampleEcho2ImManager *self = EXAMPLE_ECHO_2_IM_MANAGER (object); switch (property_id) { case PROP_CONNECTION: g_value_set_object (value, self->priv->conn); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } } static void set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { ExampleEcho2ImManager *self = EXAMPLE_ECHO_2_IM_MANAGER (object); switch (property_id) { case PROP_CONNECTION: /* We don't ref the connection, because it owns a reference to the * channel manager, and it guarantees that the manager's lifetime is * less than its lifetime */ self->priv->conn = g_value_get_object (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } } static void status_changed_cb (TpBaseConnection *conn, guint status, guint reason, ExampleEcho2ImManager *self) { if (status == TP_CONNECTION_STATUS_DISCONNECTED) example_echo_2_im_manager_close_all (self); } static void constructed (GObject *object) { ExampleEcho2ImManager *self = EXAMPLE_ECHO_2_IM_MANAGER (object); void (*chain_up) (GObject *) = ((GObjectClass *) example_echo_2_im_manager_parent_class)->constructed; if (chain_up != NULL) { chain_up (object); } self->priv->status_changed_id = g_signal_connect (self->priv->conn, "status-changed", (GCallback) status_changed_cb, self); } static void example_echo_2_im_manager_class_init (ExampleEcho2ImManagerClass *klass) { GParamSpec *param_spec; GObjectClass *object_class = (GObjectClass *) klass; object_class->constructed = constructed; object_class->dispose = dispose; object_class->get_property = get_property; object_class->set_property = set_property; param_spec = g_param_spec_object ("connection", "Connection object", "The connection that owns this channel manager", TP_TYPE_BASE_CONNECTION, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB); g_object_class_install_property (object_class, PROP_CONNECTION, param_spec); g_type_class_add_private (klass, sizeof (ExampleEcho2ImManagerPrivate)); } static void example_echo_2_im_manager_close_all (ExampleEcho2ImManager *self) { if (self->priv->channels != NULL) { GHashTable *tmp = self->priv->channels; self->priv->channels = NULL; g_hash_table_destroy (tmp); } if (self->priv->status_changed_id != 0) { g_signal_handler_disconnect (self->priv->conn, self->priv->status_changed_id); self->priv->status_changed_id = 0; } } static void example_echo_2_im_manager_foreach_channel (TpChannelManager *iface, TpExportableChannelFunc callback, gpointer user_data) { ExampleEcho2ImManager *self = EXAMPLE_ECHO_2_IM_MANAGER (iface); GHashTableIter iter; gpointer handle, channel; g_hash_table_iter_init (&iter, self->priv->channels); while (g_hash_table_iter_next (&iter, &handle, &channel)) { callback (TP_EXPORTABLE_CHANNEL (channel), user_data); } } static void channel_closed_cb (ExampleEcho2Channel *chan, ExampleEcho2ImManager *self) { tp_channel_manager_emit_channel_closed_for_object (self, TP_EXPORTABLE_CHANNEL (chan)); if (self->priv->channels != NULL) { TpHandle handle; gboolean really_destroyed; g_object_get (chan, "handle", &handle, "channel-destroyed", &really_destroyed, NULL); /* Re-announce the channel if it's not yet ready to go away (pending * messages) */ if (really_destroyed) { g_hash_table_remove (self->priv->channels, GUINT_TO_POINTER (handle)); } else { tp_channel_manager_emit_new_channel (self, TP_EXPORTABLE_CHANNEL (chan), NULL); } } } static void new_channel (ExampleEcho2ImManager *self, TpHandle handle, TpHandle initiator, gpointer request_token) { ExampleEcho2Channel *chan; gchar *object_path; GSList *requests = NULL; object_path = g_strdup_printf ("%s/Echo2Channel%u", self->priv->conn->object_path, handle); chan = g_object_new (EXAMPLE_TYPE_ECHO_2_CHANNEL, "connection", self->priv->conn, "object-path", object_path, "handle", handle, "initiator-handle", initiator, NULL); g_free (object_path); g_signal_connect (chan, "closed", (GCallback) channel_closed_cb, self); g_hash_table_insert (self->priv->channels, GUINT_TO_POINTER (handle), chan); if (request_token != NULL) requests = g_slist_prepend (requests, request_token); tp_channel_manager_emit_new_channel (self, TP_EXPORTABLE_CHANNEL (chan), requests); g_slist_free (requests); } static const gchar * const fixed_properties[] = { TP_PROP_CHANNEL_CHANNEL_TYPE, TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, NULL }; static const gchar * const allowed_properties[] = { TP_PROP_CHANNEL_TARGET_HANDLE, TP_PROP_CHANNEL_TARGET_ID, NULL }; static void example_echo_2_im_manager_type_foreach_channel_class (GType type, TpChannelManagerTypeChannelClassFunc func, gpointer user_data) { GHashTable *table = tp_asv_new ( TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING, TP_IFACE_CHANNEL_TYPE_TEXT, TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, TP_HANDLE_TYPE_CONTACT, NULL); func (type, table, allowed_properties, user_data); g_hash_table_destroy (table); } static gboolean example_echo_2_im_manager_request (ExampleEcho2ImManager *self, gpointer request_token, GHashTable *request_properties, gboolean require_new) { TpHandle handle; ExampleEcho2Channel *chan; GError *error = NULL; if (tp_strdiff (tp_asv_get_string (request_properties, TP_PROP_CHANNEL_CHANNEL_TYPE), TP_IFACE_CHANNEL_TYPE_TEXT)) { return FALSE; } if (tp_asv_get_uint32 (request_properties, TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, NULL) != TP_HANDLE_TYPE_CONTACT) { return FALSE; } handle = tp_asv_get_uint32 (request_properties, TP_PROP_CHANNEL_TARGET_HANDLE, NULL); g_assert (handle != 0); if (tp_channel_manager_asv_has_unknown_properties (request_properties, fixed_properties, allowed_properties, &error)) { goto error; } chan = g_hash_table_lookup (self->priv->channels, GUINT_TO_POINTER (handle)); if (chan == NULL) { new_channel (self, handle, self->priv->conn->self_handle, request_token); } else if (require_new) { g_set_error (&error, TP_ERROR, TP_ERROR_NOT_AVAILABLE, "An echo2 channel to contact #%u already exists", handle); goto error; } else { tp_channel_manager_emit_request_already_satisfied (self, request_token, TP_EXPORTABLE_CHANNEL (chan)); } return TRUE; error: tp_channel_manager_emit_request_failed (self, request_token, error->domain, error->code, error->message); g_error_free (error); return TRUE; } static gboolean example_echo_2_im_manager_create_channel (TpChannelManager *manager, gpointer request_token, GHashTable *request_properties) { return example_echo_2_im_manager_request (EXAMPLE_ECHO_2_IM_MANAGER (manager), request_token, request_properties, TRUE); } static gboolean example_echo_2_im_manager_ensure_channel (TpChannelManager *manager, gpointer request_token, GHashTable *request_properties) { return example_echo_2_im_manager_request (EXAMPLE_ECHO_2_IM_MANAGER (manager), request_token, request_properties, FALSE); } static void channel_manager_iface_init (gpointer g_iface, gpointer data G_GNUC_UNUSED) { TpChannelManagerIface *iface = g_iface; iface->foreach_channel = example_echo_2_im_manager_foreach_channel; iface->type_foreach_channel_class = example_echo_2_im_manager_type_foreach_channel_class; iface->create_channel = example_echo_2_im_manager_create_channel; iface->ensure_channel = example_echo_2_im_manager_ensure_channel; /* In this channel manager, Request has the same semantics as Ensure */ iface->request_channel = example_echo_2_im_manager_ensure_channel; } telepathy-qt-0.9.3/tests/lib/glib/echo2/connection-manager.c0000644000175200001440000000426512000056607026163 0ustar00collabora-develusers00000000000000/* * manager.c - an example connection manager * * Copyright © 2007-2010 Collabora Ltd. * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #include "connection-manager.h" #include #include #include #include "protocol.h" G_DEFINE_TYPE (ExampleEcho2ConnectionManager, example_echo_2_connection_manager, TP_TYPE_BASE_CONNECTION_MANAGER) /* type definition stuff */ static void example_echo_2_connection_manager_init ( ExampleEcho2ConnectionManager *self) { } static void example_echo_2_connection_manager_constructed (GObject *object) { ExampleEcho2ConnectionManager *self = EXAMPLE_ECHO_2_CONNECTION_MANAGER (object); TpBaseConnectionManager *base = (TpBaseConnectionManager *) self; void (*constructed) (GObject *) = ((GObjectClass *) example_echo_2_connection_manager_parent_class)->constructed; TpBaseProtocol *protocol; if (constructed != NULL) constructed (object); protocol = g_object_new (EXAMPLE_TYPE_ECHO_2_PROTOCOL, "name", "example", NULL); tp_base_connection_manager_add_protocol (base, protocol); g_object_unref (protocol); } static const TpCMProtocolSpec no_protocols[] = { { NULL, NULL } }; static TpBaseConnection * new_connection (TpBaseConnectionManager *self, const gchar *proto, TpIntSet *params_present, gpointer parsed_params, GError **error) { g_set_error (error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "Protocol's new_connection() should be called instead"); return NULL; } static void example_echo_2_connection_manager_class_init ( ExampleEcho2ConnectionManagerClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); TpBaseConnectionManagerClass *base_class = (TpBaseConnectionManagerClass *) klass; object_class->constructed = example_echo_2_connection_manager_constructed; base_class->new_connection = new_connection; base_class->cm_dbus_name = "example_echo_2"; base_class->protocol_params = no_protocols; } telepathy-qt-0.9.3/tests/lib/glib/echo2/conn.h0000644000175200001440000000373012000056607023352 0ustar00collabora-develusers00000000000000/* * conn.h - header for an example connection * * Copyright (C) 2007 Collabora Ltd. * Copyright (C) 2007 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef EXAMPLE_ECHO_MESSAGE_PARTS_CONN_H #define EXAMPLE_ECHO_MESSAGE_PARTS_CONN_H #include #include G_BEGIN_DECLS typedef struct _ExampleEcho2Connection ExampleEcho2Connection; typedef struct _ExampleEcho2ConnectionClass ExampleEcho2ConnectionClass; typedef struct _ExampleEcho2ConnectionPrivate ExampleEcho2ConnectionPrivate; struct _ExampleEcho2ConnectionClass { TpBaseConnectionClass parent_class; }; struct _ExampleEcho2Connection { TpBaseConnection parent; ExampleEcho2ConnectionPrivate *priv; }; GType example_echo_2_connection_get_type (void); #define EXAMPLE_TYPE_ECHO_2_CONNECTION \ (example_echo_2_connection_get_type ()) #define EXAMPLE_ECHO_2_CONNECTION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), EXAMPLE_TYPE_ECHO_2_CONNECTION, \ ExampleEcho2Connection)) #define EXAMPLE_ECHO_2_CONNECTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), EXAMPLE_TYPE_ECHO_2_CONNECTION, \ ExampleEcho2ConnectionClass)) #define EXAMPLE_IS_ECHO_2_CONNECTION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), EXAMPLE_TYPE_ECHO_2_CONNECTION)) #define EXAMPLE_IS_ECHO_2_CONNECTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), EXAMPLE_TYPE_ECHO_2_CONNECTION)) #define EXAMPLE_ECHO_2_CONNECTION_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), EXAMPLE_TYPE_ECHO_2_CONNECTION, \ ExampleEcho2ConnectionClass)) const gchar * const *example_echo_2_connection_get_guaranteed_interfaces ( void); const gchar * const *example_echo_2_connection_get_possible_interfaces ( void); G_END_DECLS #endif telepathy-qt-0.9.3/tests/lib/glib/echo2/protocol.c0000644000175200001440000002327212000056607024254 0ustar00collabora-develusers00000000000000/* * protocol.c - an example Protocol * * Copyright © 2007-2010 Collabora Ltd. * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #include "protocol.h" #include #include "conn.h" #include "im-manager.h" #include static void addressing_iface_init (TpProtocolAddressingInterface *iface); G_DEFINE_TYPE_WITH_CODE (ExampleEcho2Protocol, example_echo_2_protocol, TP_TYPE_BASE_PROTOCOL, G_IMPLEMENT_INTERFACE (TP_TYPE_PROTOCOL_ADDRESSING, addressing_iface_init); ) const gchar * const protocol_interfaces[] = { TP_IFACE_PROTOCOL_INTERFACE_ADDRESSING, TP_IFACE_PROTOCOL_INTERFACE_AVATARS, TP_IFACE_PROTOCOL_INTERFACE_PRESENCE, NULL }; const gchar * const supported_avatar_mime_types[] = { "image/png", "image/jpeg", "image/gif", NULL }; const gchar * const addressable_vcard_fields[] = { "x-echo2", NULL }; const gchar * const addressable_uri_schemes[] = { "echo2", NULL }; struct _ExampleEcho2ProtocolPrivate { TpPresenceStatusSpec *statuses; }; static TpPresenceStatusSpec new_status_spec (const gchar *name, TpConnectionPresenceType type, gboolean settable, gboolean can_have_message) { TpPresenceStatusSpec ret; TpPresenceStatusOptionalArgumentSpec *args = g_new0 (TpPresenceStatusOptionalArgumentSpec, 2); memset (&ret, 0, sizeof (TpPresenceStatusSpec)); ret.name = g_strdup (name); ret.presence_type = type; ret.self = settable; if (can_have_message) { args[0].name = g_strdup ("message"); args[0].dtype = g_strdup ("s"); } ret.optional_arguments = args; return ret; } static void example_echo_2_protocol_init ( ExampleEcho2Protocol *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, EXAMPLE_TYPE_ECHO_2_PROTOCOL, ExampleEcho2ProtocolPrivate); self->priv->statuses = g_new0 (TpPresenceStatusSpec, 4); self->priv->statuses[0] = new_status_spec ("offline", TP_CONNECTION_PRESENCE_TYPE_OFFLINE, FALSE, FALSE); self->priv->statuses[1] = new_status_spec ("dnd", TP_CONNECTION_PRESENCE_TYPE_BUSY, TRUE, FALSE); self->priv->statuses[2] = new_status_spec ("available", TP_CONNECTION_PRESENCE_TYPE_AVAILABLE, TRUE, TRUE); } static void example_echo_2_protocol_finalize (GObject *object) { ExampleEcho2Protocol *self = EXAMPLE_ECHO_2_PROTOCOL (object); TpPresenceStatusSpec *status = self->priv->statuses; for (; status->name != NULL; status++) { TpPresenceStatusOptionalArgumentSpec *arg = (TpPresenceStatusOptionalArgumentSpec *) status->optional_arguments; for (; arg->name != NULL; arg++) { g_free ((gpointer) arg->name); g_free ((gpointer) arg->dtype); } g_free ((gpointer) status->name); g_free ((gpointer) status->optional_arguments); } ((GObjectClass *) example_echo_2_protocol_parent_class)->finalize (object); } static const TpCMParamSpec example_echo_2_example_params[] = { { "account", "s", G_TYPE_STRING, TP_CONN_MGR_PARAM_FLAG_REQUIRED | TP_CONN_MGR_PARAM_FLAG_REGISTER, NULL, /* no default */ 0, /* formerly struct offset, now unused */ tp_cm_param_filter_string_nonempty, /* filter - empty strings disallowed */ NULL, /* filter data, unused for our filter */ NULL /* setter data, now unused */ }, { NULL } }; static const TpCMParamSpec * get_parameters (TpBaseProtocol *self) { return example_echo_2_example_params; } static TpBaseConnection * new_connection (TpBaseProtocol *protocol, GHashTable *asv, GError **error) { ExampleEcho2Connection *conn; const gchar *account; account = tp_asv_get_string (asv, "account"); if (account == NULL || account[0] == '\0') { g_set_error (error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "The 'account' parameter is required"); return NULL; } conn = EXAMPLE_ECHO_2_CONNECTION ( g_object_new (EXAMPLE_TYPE_ECHO_2_CONNECTION, "account", account, "protocol", tp_base_protocol_get_name (protocol), NULL)); return (TpBaseConnection *) conn; } gchar * example_echo_2_protocol_normalize_contact (const gchar *id, GError **error) { if (id[0] == '\0') { g_set_error (error, TP_ERROR, TP_ERROR_INVALID_HANDLE, "ID must not be empty"); return NULL; } return g_utf8_strdown (id, -1); } static gchar * normalize_contact (TpBaseProtocol *self G_GNUC_UNUSED, const gchar *contact, GError **error) { return example_echo_2_protocol_normalize_contact (contact, error); } static gchar * identify_account (TpBaseProtocol *self G_GNUC_UNUSED, GHashTable *asv, GError **error) { const gchar *account = tp_asv_get_string (asv, "account"); if (account != NULL) return g_strdup (account); g_set_error (error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "'account' parameter not given"); return NULL; } static GStrv get_interfaces (TpBaseProtocol *self) { return g_strdupv ((GStrv) protocol_interfaces); } static void get_connection_details (TpBaseProtocol *self G_GNUC_UNUSED, GStrv *connection_interfaces, GType **channel_managers, gchar **icon_name, gchar **english_name, gchar **vcard_field) { if (connection_interfaces != NULL) { *connection_interfaces = g_strdupv ( (GStrv) example_echo_2_connection_get_possible_interfaces ()); } if (channel_managers != NULL) { GType types[] = { EXAMPLE_TYPE_ECHO_2_IM_MANAGER, G_TYPE_INVALID }; *channel_managers = g_memdup (types, sizeof (types)); } if (icon_name != NULL) { /* a real protocol would use its own icon name - for this example we * borrow the one from ICQ */ *icon_name = g_strdup ("im-icq"); } if (english_name != NULL) { /* in a real protocol this would be "ICQ" or * "Windows Live Messenger (MSN)" or something */ *english_name = g_strdup ("Echo II example"); } if (vcard_field != NULL) { /* in a real protocol this would be "tel" or "x-jabber" or something */ *vcard_field = g_strdup ("x-telepathy-example"); } } static void get_avatar_details (TpBaseProtocol *self, GStrv *supported_mime_types, guint *min_height, guint *min_width, guint *recommended_height, guint *recommended_width, guint *max_height, guint *max_width, guint *max_bytes) { if (supported_mime_types != NULL) *supported_mime_types = g_strdupv ((GStrv) supported_avatar_mime_types); if (min_height != NULL) *min_height = 32; if (min_width != NULL) *min_width = 32; if (recommended_height != NULL) *recommended_height = 64; if (recommended_width != NULL) *recommended_width = 64; if (max_height != NULL) *max_height = 96; if (max_width != NULL) *max_width = 96; if (max_bytes != NULL) *max_bytes = 37748736; } static const TpPresenceStatusSpec * get_statuses (TpBaseProtocol *object) { ExampleEcho2Protocol *self = EXAMPLE_ECHO_2_PROTOCOL (object); return self->priv->statuses; } static void example_echo_2_protocol_class_init ( ExampleEcho2ProtocolClass *klass) { GObjectClass *object_class = (GObjectClass *) klass; TpBaseProtocolClass *base_class = (TpBaseProtocolClass *) klass; g_type_class_add_private (klass, sizeof (ExampleEcho2ProtocolPrivate)); object_class->finalize = example_echo_2_protocol_finalize; base_class->get_parameters = get_parameters; base_class->new_connection = new_connection; base_class->normalize_contact = normalize_contact; base_class->identify_account = identify_account; base_class->get_interfaces = get_interfaces; base_class->get_connection_details = get_connection_details; base_class->get_avatar_details = get_avatar_details; base_class->get_statuses = get_statuses; } static GStrv dup_supported_uri_schemes (TpBaseProtocol *self) { return g_strdupv ((gchar **) addressable_uri_schemes); } static GStrv dup_supported_vcard_fields (TpBaseProtocol *self) { return g_strdupv ((gchar **) addressable_vcard_fields); } static gchar * normalize_vcard_address (TpBaseProtocol *self, const gchar *vcard_field, const gchar *vcard_address, GError **error) { gchar *normalized_address = NULL; if (g_ascii_strcasecmp (vcard_field, "x-echo2") == 0) { normalized_address = g_ascii_strdown (vcard_address, -1); } else { g_set_error (error, TP_ERROR, TP_ERROR_NOT_IMPLEMENTED, "'%s' vCard field is not supported by this protocol", vcard_field); } return normalized_address; } static gchar * normalize_contact_uri (TpBaseProtocol *self, const gchar *uri, GError **error) { gchar *normalized_uri = NULL; gchar *scheme = g_uri_parse_scheme (uri); if (scheme == NULL) { g_set_error (error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "'%s' is not a valid URI", uri); goto OUT; } else if (g_ascii_strcasecmp (scheme, "echo2") == 0) { gchar *scheme_down = g_ascii_strdown (scheme, -1); gchar *tmp = g_ascii_strdown (uri + strlen (scheme) + 1, -1); normalized_uri = g_strdup_printf ("%s:%s", scheme_down, tmp); g_free (scheme_down); g_free (tmp); } else { g_set_error (error, TP_ERROR, TP_ERROR_NOT_IMPLEMENTED, "'%s' URI scheme is not supported by this protocol", scheme); goto OUT; } OUT: g_free (scheme); return normalized_uri; } static void addressing_iface_init (TpProtocolAddressingInterface *iface) { iface->dup_supported_vcard_fields = dup_supported_vcard_fields; iface->dup_supported_uri_schemes = dup_supported_uri_schemes; iface->normalize_vcard_address = normalize_vcard_address; iface->normalize_contact_uri = normalize_contact_uri; } telepathy-qt-0.9.3/tests/lib/glib/echo2/protocol.h0000644000175200001440000000364712000056607024265 0ustar00collabora-develusers00000000000000/* * protocol.h - header for an example Protocol * Copyright (C) 2007-2010 Collabora Ltd. * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef EXAMPLE_ECHO_MESSAGE_PARTS_PROTOCOL_H #define EXAMPLE_ECHO_MESSAGE_PARTS_PROTOCOL_H #include #include G_BEGIN_DECLS typedef struct _ExampleEcho2Protocol ExampleEcho2Protocol; typedef struct _ExampleEcho2ProtocolPrivate ExampleEcho2ProtocolPrivate; typedef struct _ExampleEcho2ProtocolClass ExampleEcho2ProtocolClass; typedef struct _ExampleEcho2ProtocolClassPrivate ExampleEcho2ProtocolClassPrivate; struct _ExampleEcho2ProtocolClass { TpBaseProtocolClass parent_class; ExampleEcho2ProtocolClassPrivate *priv; }; struct _ExampleEcho2Protocol { TpBaseProtocol parent; ExampleEcho2ProtocolPrivate *priv; }; GType example_echo_2_protocol_get_type (void); #define EXAMPLE_TYPE_ECHO_2_PROTOCOL \ (example_echo_2_protocol_get_type ()) #define EXAMPLE_ECHO_2_PROTOCOL(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ EXAMPLE_TYPE_ECHO_2_PROTOCOL, \ ExampleEcho2Protocol)) #define EXAMPLE_ECHO_2_PROTOCOL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), \ EXAMPLE_TYPE_ECHO_2_PROTOCOL, \ ExampleEcho2ProtocolClass)) #define EXAMPLE_IS_ECHO_2_PROTOCOL(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ EXAMPLE_TYPE_ECHO_2_PROTOCOL)) #define EXAMPLE_IS_ECHO_2_PROTOCOL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), \ EXAMPLE_TYPE_ECHO_2_PROTOCOL)) #define EXAMPLE_ECHO_2_PROTOCOL_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), \ EXAMPLE_TYPE_ECHO_2_PROTOCOL, \ ExampleEcho2ProtocolClass)) gchar *example_echo_2_protocol_normalize_contact (const gchar *id, GError **error); G_END_DECLS #endif telepathy-qt-0.9.3/tests/lib/glib/contactlist2/0000755000175200001440000000000012000056607023652 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/tests/lib/glib/contactlist2/connection-manager.h0000644000175200001440000000454612000056607027603 0ustar00collabora-develusers00000000000000/* * manager.h - header for an example connection manager * * Copyright © 2007-2009 Collabora Ltd. * Copyright © 2007-2009 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef __EXAMPLE_CONTACT_LIST_CONNECTION_MANAGER_H__ #define __EXAMPLE_CONTACT_LIST_CONNECTION_MANAGER_H__ #include #include G_BEGIN_DECLS typedef struct _ExampleContactListConnectionManager ExampleContactListConnectionManager; typedef struct _ExampleContactListConnectionManagerClass ExampleContactListConnectionManagerClass; typedef struct _ExampleContactListConnectionManagerPrivate ExampleContactListConnectionManagerPrivate; struct _ExampleContactListConnectionManagerClass { TpBaseConnectionManagerClass parent_class; }; struct _ExampleContactListConnectionManager { TpBaseConnectionManager parent; ExampleContactListConnectionManagerPrivate *priv; }; GType example_contact_list_connection_manager_get_type (void); #define EXAMPLE_TYPE_CONTACT_LIST_CONNECTION_MANAGER \ (example_contact_list_connection_manager_get_type ()) #define EXAMPLE_CONTACT_LIST_CONNECTION_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ EXAMPLE_TYPE_CONTACT_LIST_CONNECTION_MANAGER, \ ExampleContactListConnectionManager)) #define EXAMPLE_CONTACT_LIST_CONNECTION_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ EXAMPLE_TYPE_CONTACT_LIST_CONNECTION_MANAGER, \ ExampleContactListConnectionManagerClass)) #define EXAMPLE_IS_CONTACT_LIST_CONNECTION_MANAGER(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), \ EXAMPLE_TYPE_CONTACT_LIST_CONNECTION_MANAGER)) #define EXAMPLE_IS_CONTACT_LIST_CONNECTION_MANAGER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), \ EXAMPLE_TYPE_CONTACT_LIST_CONNECTION_MANAGER)) #define EXAMPLE_CONTACT_LIST_CONNECTION_MANAGER_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), \ EXAMPLE_TYPE_CONTACT_LIST_CONNECTION_MANAGER, \ ExampleContactListConnectionManagerClass)) G_END_DECLS #endif telepathy-qt-0.9.3/tests/lib/glib/contactlist2/conn.c0000644000175200001440000004367312000056607024770 0ustar00collabora-develusers00000000000000/* * conn.c - an example connection * * Copyright © 2007-2009 Collabora Ltd. * Copyright © 2007-2009 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #include "conn.h" #include #include #include #include #include "contact-list.h" #include "protocol.h" static void init_aliasing (gpointer, gpointer); G_DEFINE_TYPE_WITH_CODE (ExampleContactListConnection, example_contact_list_connection, TP_TYPE_BASE_CONNECTION, G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_ALIASING, init_aliasing); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_CONTACTS, tp_contacts_mixin_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_CONTACT_LIST, tp_base_contact_list_mixin_list_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_CONTACT_GROUPS, tp_base_contact_list_mixin_groups_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_CONTACT_BLOCKING, tp_base_contact_list_mixin_blocking_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_PRESENCE, tp_presence_mixin_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_SIMPLE_PRESENCE, tp_presence_mixin_simple_presence_iface_init)) enum { PROP_ACCOUNT = 1, PROP_SIMULATION_DELAY, N_PROPS }; struct _ExampleContactListConnectionPrivate { gchar *account; guint simulation_delay; ExampleContactList *contact_list; gboolean away; }; static void example_contact_list_connection_init (ExampleContactListConnection *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, EXAMPLE_TYPE_CONTACT_LIST_CONNECTION, ExampleContactListConnectionPrivate); } static void get_property (GObject *object, guint property_id, GValue *value, GParamSpec *spec) { ExampleContactListConnection *self = EXAMPLE_CONTACT_LIST_CONNECTION (object); switch (property_id) { case PROP_ACCOUNT: g_value_set_string (value, self->priv->account); break; case PROP_SIMULATION_DELAY: g_value_set_uint (value, self->priv->simulation_delay); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, spec); } } static void set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *spec) { ExampleContactListConnection *self = EXAMPLE_CONTACT_LIST_CONNECTION (object); switch (property_id) { case PROP_ACCOUNT: g_free (self->priv->account); self->priv->account = g_value_dup_string (value); break; case PROP_SIMULATION_DELAY: self->priv->simulation_delay = g_value_get_uint (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, spec); } } static void finalize (GObject *object) { ExampleContactListConnection *self = EXAMPLE_CONTACT_LIST_CONNECTION (object); tp_contacts_mixin_finalize (object); g_free (self->priv->account); G_OBJECT_CLASS (example_contact_list_connection_parent_class)->finalize ( object); } static gchar * get_unique_connection_name (TpBaseConnection *conn) { ExampleContactListConnection *self = EXAMPLE_CONTACT_LIST_CONNECTION (conn); return g_strdup_printf ("%s@%p", self->priv->account, self); } gchar * example_contact_list_normalize_contact (TpHandleRepoIface *repo, const gchar *id, gpointer context, GError **error) { gchar *normal = NULL; if (example_contact_list_protocol_check_contact_id (id, &normal, error)) return normal; else return NULL; } static void create_handle_repos (TpBaseConnection *conn, TpHandleRepoIface *repos[NUM_TP_HANDLE_TYPES]) { repos[TP_HANDLE_TYPE_CONTACT] = tp_dynamic_handle_repo_new (TP_HANDLE_TYPE_CONTACT, example_contact_list_normalize_contact, NULL); } static void alias_updated_cb (ExampleContactList *contact_list, TpHandle contact, ExampleContactListConnection *self) { GPtrArray *aliases; GValueArray *pair; pair = g_value_array_new (2); g_value_array_append (pair, NULL); g_value_array_append (pair, NULL); g_value_init (pair->values + 0, G_TYPE_UINT); g_value_init (pair->values + 1, G_TYPE_STRING); g_value_set_uint (pair->values + 0, contact); g_value_set_string (pair->values + 1, example_contact_list_get_alias (contact_list, contact)); aliases = g_ptr_array_sized_new (1); g_ptr_array_add (aliases, pair); tp_svc_connection_interface_aliasing_emit_aliases_changed (self, aliases); g_ptr_array_free (aliases, TRUE); g_value_array_free (pair); } static void presence_updated_cb (ExampleContactList *contact_list, TpHandle contact, ExampleContactListConnection *self) { TpBaseConnection *base = (TpBaseConnection *) self; TpPresenceStatus *status; /* we ignore the presence indicated by the contact list for our own handle */ if (contact == base->self_handle) return; status = tp_presence_status_new ( example_contact_list_get_presence (contact_list, contact), NULL); tp_presence_mixin_emit_one_presence_update ((GObject *) self, contact, status); tp_presence_status_free (status); } static GPtrArray * create_channel_managers (TpBaseConnection *conn) { ExampleContactListConnection *self = EXAMPLE_CONTACT_LIST_CONNECTION (conn); GPtrArray *ret = g_ptr_array_sized_new (1); self->priv->contact_list = EXAMPLE_CONTACT_LIST (g_object_new ( EXAMPLE_TYPE_CONTACT_LIST, "connection", conn, "simulation-delay", self->priv->simulation_delay, NULL)); g_signal_connect (self->priv->contact_list, "alias-updated", G_CALLBACK (alias_updated_cb), self); g_signal_connect (self->priv->contact_list, "presence-updated", G_CALLBACK (presence_updated_cb), self); g_ptr_array_add (ret, self->priv->contact_list); return ret; } static gboolean start_connecting (TpBaseConnection *conn, GError **error) { ExampleContactListConnection *self = EXAMPLE_CONTACT_LIST_CONNECTION (conn); TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (conn, TP_HANDLE_TYPE_CONTACT); /* In a real connection manager we'd ask the underlying implementation to * start connecting, then go to state CONNECTED when finished, but here * we can do it immediately. */ conn->self_handle = tp_handle_ensure (contact_repo, self->priv->account, NULL, error); if (conn->self_handle == 0) return FALSE; tp_base_connection_change_status (conn, TP_CONNECTION_STATUS_CONNECTED, TP_CONNECTION_STATUS_REASON_REQUESTED); return TRUE; } static void shut_down (TpBaseConnection *conn) { /* In a real connection manager we'd ask the underlying implementation to * start shutting down, then call this function when finished, but here * we can do it immediately. */ tp_base_connection_finish_shutdown (conn); } static void aliasing_fill_contact_attributes (GObject *object, const GArray *contacts, GHashTable *attributes) { ExampleContactListConnection *self = EXAMPLE_CONTACT_LIST_CONNECTION (object); guint i; for (i = 0; i < contacts->len; i++) { TpHandle contact = g_array_index (contacts, guint, i); tp_contacts_mixin_set_contact_attribute (attributes, contact, TP_TOKEN_CONNECTION_INTERFACE_ALIASING_ALIAS, tp_g_value_slice_new_string ( example_contact_list_get_alias (self->priv->contact_list, contact))); } } static void constructed (GObject *object) { TpBaseConnection *base = TP_BASE_CONNECTION (object); void (*chain_up) (GObject *) = G_OBJECT_CLASS (example_contact_list_connection_parent_class)->constructed; if (chain_up != NULL) chain_up (object); tp_contacts_mixin_init (object, G_STRUCT_OFFSET (ExampleContactListConnection, contacts_mixin)); tp_base_connection_register_with_contacts_mixin (base); tp_base_contact_list_mixin_register_with_contacts_mixin (base); tp_contacts_mixin_add_contact_attributes_iface (object, TP_IFACE_CONNECTION_INTERFACE_ALIASING, aliasing_fill_contact_attributes); tp_presence_mixin_init (object, G_STRUCT_OFFSET (ExampleContactListConnection, presence_mixin)); tp_presence_mixin_simple_presence_register_with_contacts_mixin (object); } static gboolean status_available (GObject *object, guint index_) { TpBaseConnection *base = TP_BASE_CONNECTION (object); if (base->status != TP_CONNECTION_STATUS_CONNECTED) return FALSE; return TRUE; } static GHashTable * get_contact_statuses (GObject *object, const GArray *contacts, GError **error) { ExampleContactListConnection *self = EXAMPLE_CONTACT_LIST_CONNECTION (object); TpBaseConnection *base = TP_BASE_CONNECTION (object); guint i; GHashTable *result = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, (GDestroyNotify) tp_presence_status_free); for (i = 0; i < contacts->len; i++) { TpHandle contact = g_array_index (contacts, guint, i); ExampleContactListPresence presence; GHashTable *parameters; /* we get our own status from the connection, and everyone else's status * from the contact lists */ if (contact == base->self_handle) { presence = (self->priv->away ? EXAMPLE_CONTACT_LIST_PRESENCE_AWAY : EXAMPLE_CONTACT_LIST_PRESENCE_AVAILABLE); } else { presence = example_contact_list_get_presence ( self->priv->contact_list, contact); } parameters = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) tp_g_value_slice_free); g_hash_table_insert (result, GUINT_TO_POINTER (contact), tp_presence_status_new (presence, parameters)); g_hash_table_destroy (parameters); } return result; } static gboolean set_own_status (GObject *object, const TpPresenceStatus *status, GError **error) { ExampleContactListConnection *self = EXAMPLE_CONTACT_LIST_CONNECTION (object); TpBaseConnection *base = TP_BASE_CONNECTION (object); GHashTable *presences; if (status->index == EXAMPLE_CONTACT_LIST_PRESENCE_AWAY) { if (self->priv->away) return TRUE; self->priv->away = TRUE; } else { if (!self->priv->away) return TRUE; self->priv->away = FALSE; } presences = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, NULL); g_hash_table_insert (presences, GUINT_TO_POINTER (base->self_handle), (gpointer) status); tp_presence_mixin_emit_presence_update (object, presences); g_hash_table_destroy (presences); return TRUE; } static const gchar *interfaces_always_present[] = { TP_IFACE_CONNECTION_INTERFACE_ALIASING, TP_IFACE_CONNECTION_INTERFACE_CONTACTS, TP_IFACE_CONNECTION_INTERFACE_CONTACT_LIST, TP_IFACE_CONNECTION_INTERFACE_CONTACT_GROUPS, TP_IFACE_CONNECTION_INTERFACE_CONTACT_BLOCKING, TP_IFACE_CONNECTION_INTERFACE_PRESENCE, TP_IFACE_CONNECTION_INTERFACE_REQUESTS, TP_IFACE_CONNECTION_INTERFACE_SIMPLE_PRESENCE, NULL }; const gchar * const * example_contact_list_connection_get_possible_interfaces (void) { /* in this example CM we don't have any extra interfaces that are sometimes, * but not always, present */ return interfaces_always_present; } static void example_contact_list_connection_class_init ( ExampleContactListConnectionClass *klass) { TpBaseConnectionClass *base_class = (TpBaseConnectionClass *) klass; GObjectClass *object_class = (GObjectClass *) klass; GParamSpec *param_spec; object_class->get_property = get_property; object_class->set_property = set_property; object_class->constructed = constructed; object_class->finalize = finalize; g_type_class_add_private (klass, sizeof (ExampleContactListConnectionPrivate)); base_class->create_handle_repos = create_handle_repos; base_class->get_unique_connection_name = get_unique_connection_name; base_class->create_channel_managers = create_channel_managers; base_class->start_connecting = start_connecting; base_class->shut_down = shut_down; base_class->interfaces_always_present = interfaces_always_present; param_spec = g_param_spec_string ("account", "Account name", "The username of this user", NULL, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB); g_object_class_install_property (object_class, PROP_ACCOUNT, param_spec); param_spec = g_param_spec_uint ("simulation-delay", "Simulation delay", "Delay between simulated network events", 0, G_MAXUINT32, 1000, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_SIMULATION_DELAY, param_spec); tp_contacts_mixin_class_init (object_class, G_STRUCT_OFFSET (ExampleContactListConnectionClass, contacts_mixin)); tp_presence_mixin_class_init (object_class, G_STRUCT_OFFSET (ExampleContactListConnectionClass, presence_mixin), status_available, get_contact_statuses, set_own_status, example_contact_list_presence_statuses ()); tp_presence_mixin_simple_presence_init_dbus_properties (object_class); tp_base_contact_list_mixin_class_init (base_class); } static void get_alias_flags (TpSvcConnectionInterfaceAliasing *aliasing, DBusGMethodInvocation *context) { TpBaseConnection *base = TP_BASE_CONNECTION (aliasing); TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context); tp_svc_connection_interface_aliasing_return_from_get_alias_flags (context, TP_CONNECTION_ALIAS_FLAG_USER_SET); } static void get_aliases (TpSvcConnectionInterfaceAliasing *aliasing, const GArray *contacts, DBusGMethodInvocation *context) { ExampleContactListConnection *self = EXAMPLE_CONTACT_LIST_CONNECTION (aliasing); TpBaseConnection *base = TP_BASE_CONNECTION (aliasing); TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (base, TP_HANDLE_TYPE_CONTACT); GHashTable *result; GError *error = NULL; guint i; TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context); if (!tp_handles_are_valid (contact_repo, contacts, FALSE, &error)) { dbus_g_method_return_error (context, error); g_error_free (error); return; } result = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, NULL); for (i = 0; i < contacts->len; i++) { TpHandle contact = g_array_index (contacts, TpHandle, i); const gchar *alias = example_contact_list_get_alias ( self->priv->contact_list, contact); g_hash_table_insert (result, GUINT_TO_POINTER (contact), (gchar *) alias); } tp_svc_connection_interface_aliasing_return_from_get_aliases (context, result); g_hash_table_destroy (result); } static void request_aliases (TpSvcConnectionInterfaceAliasing *aliasing, const GArray *contacts, DBusGMethodInvocation *context) { ExampleContactListConnection *self = EXAMPLE_CONTACT_LIST_CONNECTION (aliasing); TpBaseConnection *base = TP_BASE_CONNECTION (aliasing); TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (base, TP_HANDLE_TYPE_CONTACT); GPtrArray *result; gchar **strings; GError *error = NULL; guint i; TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context); if (!tp_handles_are_valid (contact_repo, contacts, FALSE, &error)) { dbus_g_method_return_error (context, error); g_error_free (error); return; } result = g_ptr_array_sized_new (contacts->len + 1); for (i = 0; i < contacts->len; i++) { TpHandle contact = g_array_index (contacts, TpHandle, i); const gchar *alias = example_contact_list_get_alias ( self->priv->contact_list, contact); g_ptr_array_add (result, (gchar *) alias); } g_ptr_array_add (result, NULL); strings = (gchar **) g_ptr_array_free (result, FALSE); tp_svc_connection_interface_aliasing_return_from_request_aliases (context, (const gchar **) strings); g_free (strings); } static void set_aliases (TpSvcConnectionInterfaceAliasing *aliasing, GHashTable *aliases, DBusGMethodInvocation *context) { ExampleContactListConnection *self = EXAMPLE_CONTACT_LIST_CONNECTION (aliasing); TpBaseConnection *base = TP_BASE_CONNECTION (aliasing); TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (base, TP_HANDLE_TYPE_CONTACT); GHashTableIter iter; gpointer key, value; g_hash_table_iter_init (&iter, aliases); while (g_hash_table_iter_next (&iter, &key, &value)) { GError *error = NULL; if (!tp_handle_is_valid (contact_repo, GPOINTER_TO_UINT (key), &error)) { dbus_g_method_return_error (context, error); g_error_free (error); return; } } g_hash_table_iter_init (&iter, aliases); while (g_hash_table_iter_next (&iter, &key, &value)) { example_contact_list_set_alias (self->priv->contact_list, GPOINTER_TO_UINT (key), value); } tp_svc_connection_interface_aliasing_return_from_set_aliases (context); } static void init_aliasing (gpointer iface, gpointer iface_data G_GNUC_UNUSED) { TpSvcConnectionInterfaceAliasingClass *klass = iface; #define IMPLEMENT(x) tp_svc_connection_interface_aliasing_implement_##x (\ klass, x) IMPLEMENT(get_alias_flags); IMPLEMENT(request_aliases); IMPLEMENT(get_aliases); IMPLEMENT(set_aliases); #undef IMPLEMENT } telepathy-qt-0.9.3/tests/lib/glib/contactlist2/CMakeLists.txt0000644000175200001440000000063712000056607026420 0ustar00collabora-develusers00000000000000if(ENABLE_TP_GLIB_TESTS) set(example_cm_contactlist2_SRCS conn.c conn.h connection-manager.c connection-manager.h contact-list.c contact-list.h protocol.c protocol.h) add_library(example-cm-contactlist2 STATIC ${example_cm_contactlist2_SRCS}) target_link_libraries(example-cm-contactlist2 ${TPGLIB_LIBRARIES}) endif(ENABLE_TP_GLIB_TESTS) telepathy-qt-0.9.3/tests/lib/glib/contactlist2/example_contact_list.manager0000644000175200001440000000207112000056607031407 0ustar00collabora-develusers00000000000000[ConnectionManager] Interfaces= [Protocol example] Interfaces= ConnectionInterfaces=org.freedesktop.Telepathy.Connection.Interface.Requests;org.freedesktop.Telepathy.Connection.Interface.Contacts;org.freedesktop.Telepathy.Connection.Interface.Presence;org.freedesktop.Telepathy.Connection.Interface.SimplePresence; param-account=s required register param-simulation-delay=u default-simulation-delay=1000 RequestableChannelClasses=contactlist;contactgroup; VCardField=x-telepathy-example EnglishName=Example with a contact list Icon=face-smile [contactlist] org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.ContactList org.freedesktop.Telepathy.Channel.TargetHandleType u=3 allowed=org.freedesktop.Telepathy.Channel.TargetHandle;org.freedesktop.Telepathy.Channel.TargetID; [contactgroup] org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.ContactList org.freedesktop.Telepathy.Channel.TargetHandleType u=4 allowed=org.freedesktop.Telepathy.Channel.TargetHandle;org.freedesktop.Telepathy.Channel.TargetID; telepathy-qt-0.9.3/tests/lib/glib/contactlist2/contact-list.h0000644000175200001440000000503112000056607026426 0ustar00collabora-develusers00000000000000/* * Example channel manager for contact lists * * Copyright © 2007-2010 Collabora Ltd. * Copyright © 2007-2009 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef __EXAMPLE_CONTACT_LIST_H__ #define __EXAMPLE_CONTACT_LIST_H__ #include #include #include #include #include G_BEGIN_DECLS typedef struct _ExampleContactList ExampleContactList; typedef struct _ExampleContactListClass ExampleContactListClass; typedef struct _ExampleContactListPrivate ExampleContactListPrivate; struct _ExampleContactListClass { TpBaseContactListClass parent_class; }; struct _ExampleContactList { TpBaseContactList parent; ExampleContactListPrivate *priv; }; GType example_contact_list_get_type (void); #define EXAMPLE_TYPE_CONTACT_LIST \ (example_contact_list_get_type ()) #define EXAMPLE_CONTACT_LIST(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), EXAMPLE_TYPE_CONTACT_LIST, \ ExampleContactList)) #define EXAMPLE_CONTACT_LIST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), EXAMPLE_TYPE_CONTACT_LIST, \ ExampleContactListClass)) #define EXAMPLE_IS_CONTACT_LIST(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), EXAMPLE_TYPE_CONTACT_LIST)) #define EXAMPLE_IS_CONTACT_LIST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), EXAMPLE_TYPE_CONTACT_LIST)) #define EXAMPLE_CONTACT_LIST_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), EXAMPLE_TYPE_CONTACT_LIST, \ ExampleContactListClass)) /* this enum must be kept in sync with the array _statuses in * contact-list.c */ typedef enum { EXAMPLE_CONTACT_LIST_PRESENCE_OFFLINE = 0, EXAMPLE_CONTACT_LIST_PRESENCE_UNKNOWN, EXAMPLE_CONTACT_LIST_PRESENCE_ERROR, EXAMPLE_CONTACT_LIST_PRESENCE_AWAY, EXAMPLE_CONTACT_LIST_PRESENCE_AVAILABLE } ExampleContactListPresence; const TpPresenceStatusSpec *example_contact_list_presence_statuses ( void); ExampleContactListPresence example_contact_list_get_presence ( ExampleContactList *self, TpHandle contact); const gchar *example_contact_list_get_alias ( ExampleContactList *self, TpHandle contact); void example_contact_list_set_alias ( ExampleContactList *self, TpHandle contact, const gchar *alias); G_END_DECLS #endif telepathy-qt-0.9.3/tests/lib/glib/contactlist2/connection-manager.c0000644000175200001440000000416012000056607027566 0ustar00collabora-develusers00000000000000/* * manager.c - an example connection manager * * Copyright © 2007-2009 Collabora Ltd. * Copyright © 2007-2009 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #include "connection-manager.h" #include #include #include #include "conn.h" #include "protocol.h" G_DEFINE_TYPE (ExampleContactListConnectionManager, example_contact_list_connection_manager, TP_TYPE_BASE_CONNECTION_MANAGER) struct _ExampleContactListConnectionManagerPrivate { int dummy; }; static void example_contact_list_connection_manager_init ( ExampleContactListConnectionManager *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, EXAMPLE_TYPE_CONTACT_LIST_CONNECTION_MANAGER, ExampleContactListConnectionManagerPrivate); } static void example_contact_list_connection_manager_constructed (GObject *object) { ExampleContactListConnectionManager *self = EXAMPLE_CONTACT_LIST_CONNECTION_MANAGER (object); TpBaseConnectionManager *base = (TpBaseConnectionManager *) self; void (*constructed) (GObject *) = ((GObjectClass *) example_contact_list_connection_manager_parent_class)->constructed; TpBaseProtocol *protocol; if (constructed != NULL) constructed (object); protocol = g_object_new (EXAMPLE_TYPE_CONTACT_LIST_PROTOCOL, "name", "example", NULL); tp_base_connection_manager_add_protocol (base, protocol); g_object_unref (protocol); } static void example_contact_list_connection_manager_class_init ( ExampleContactListConnectionManagerClass *klass) { GObjectClass *object_class = (GObjectClass *) klass; TpBaseConnectionManagerClass *base_class = (TpBaseConnectionManagerClass *) klass; g_type_class_add_private (klass, sizeof (ExampleContactListConnectionManagerPrivate)); object_class->constructed = example_contact_list_connection_manager_constructed; base_class->cm_dbus_name = "example_contact_list"; } telepathy-qt-0.9.3/tests/lib/glib/contactlist2/contact-list.c0000644000175200001440000015055412000056607026434 0ustar00collabora-develusers00000000000000/* * Example implementation of TpBaseContactList. * * Copyright © 2007-2010 Collabora Ltd. * Copyright © 2007-2009 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #include "contact-list.h" #include #include #include #include /* this array must be kept in sync with the enum * ExampleContactListPresence in contact-list.h */ static const TpPresenceStatusSpec _statuses[] = { { "offline", TP_CONNECTION_PRESENCE_TYPE_OFFLINE, FALSE, NULL }, { "unknown", TP_CONNECTION_PRESENCE_TYPE_UNKNOWN, FALSE, NULL }, { "error", TP_CONNECTION_PRESENCE_TYPE_ERROR, FALSE, NULL }, { "away", TP_CONNECTION_PRESENCE_TYPE_AWAY, TRUE, NULL }, { "available", TP_CONNECTION_PRESENCE_TYPE_AVAILABLE, TRUE, NULL }, { NULL } }; const TpPresenceStatusSpec * example_contact_list_presence_statuses (void) { return _statuses; } typedef struct { gchar *alias; guint subscribe:1; guint publish:1; guint pre_approved:1; guint subscribe_requested:1; guint subscribe_rejected:1; /* string borrowed from priv->all_tags => the same pointer */ GHashTable *tags; } ExampleContactDetails; static ExampleContactDetails * example_contact_details_new (void) { return g_slice_new0 (ExampleContactDetails); } static void example_contact_details_destroy (gpointer p) { ExampleContactDetails *d = p; tp_clear_pointer (&d->tags, g_hash_table_unref); g_free (d->alias); g_slice_free (ExampleContactDetails, d); } static void mutable_contact_list_iface_init (TpMutableContactListInterface *); static void blockable_contact_list_iface_init ( TpBlockableContactListInterface *); static void contact_group_list_iface_init (TpContactGroupListInterface *); static void mutable_contact_group_list_iface_init ( TpMutableContactGroupListInterface *); G_DEFINE_TYPE_WITH_CODE (ExampleContactList, example_contact_list, TP_TYPE_BASE_CONTACT_LIST, G_IMPLEMENT_INTERFACE (TP_TYPE_BLOCKABLE_CONTACT_LIST, blockable_contact_list_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_CONTACT_GROUP_LIST, contact_group_list_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_MUTABLE_CONTACT_GROUP_LIST, mutable_contact_group_list_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_MUTABLE_CONTACT_LIST, mutable_contact_list_iface_init)) enum { ALIAS_UPDATED, PRESENCE_UPDATED, N_SIGNALS }; static guint signals[N_SIGNALS] = { 0 }; enum { PROP_SIMULATION_DELAY = 1, N_PROPS }; struct _ExampleContactListPrivate { TpBaseConnection *conn; guint simulation_delay; TpHandleRepoIface *contact_repo; /* g_strdup (group name) => the same pointer */ GHashTable *all_tags; /* All contacts on our (fake) protocol-level contact list, * plus all contacts in publish_requests or cancelled_publish_requests */ TpHandleSet *contacts; /* All contacts on our (fake) protocol-level contact list * GUINT_TO_POINTER (handle borrowed from contacts) * => ExampleContactDetails */ GHashTable *contact_details; /* Contacts with an outstanding request for presence publication * (may or may not be in contact_details) * handle borrowed from contacts => g_strdup (message) */ GHashTable *publish_requests; /* Contacts who have requested presence but then cancelled their request * (may or may not be in contact_details) */ TpHandleSet *cancelled_publish_requests; TpHandleSet *blocked_contacts; gulong status_changed_id; }; static void example_contact_list_init (ExampleContactList *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, EXAMPLE_TYPE_CONTACT_LIST, ExampleContactListPrivate); self->priv->contact_details = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, example_contact_details_destroy); self->priv->publish_requests = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_free); self->priv->all_tags = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); /* initialized properly in constructed() */ self->priv->contact_repo = NULL; self->priv->contacts = NULL; self->priv->blocked_contacts = NULL; self->priv->cancelled_publish_requests = NULL; } static void example_contact_list_close_all (ExampleContactList *self) { tp_clear_pointer (&self->priv->contacts, tp_handle_set_destroy); tp_clear_pointer (&self->priv->blocked_contacts, tp_handle_set_destroy); tp_clear_pointer (&self->priv->cancelled_publish_requests, tp_handle_set_destroy); tp_clear_pointer (&self->priv->publish_requests, g_hash_table_unref); tp_clear_pointer (&self->priv->contact_details, g_hash_table_unref); /* this must come after freeing contact_details, because the strings are * borrowed */ tp_clear_pointer (&self->priv->all_tags, g_hash_table_unref); if (self->priv->status_changed_id != 0) { g_signal_handler_disconnect (self->priv->conn, self->priv->status_changed_id); self->priv->status_changed_id = 0; } } static void dispose (GObject *object) { ExampleContactList *self = EXAMPLE_CONTACT_LIST (object); example_contact_list_close_all (self); ((GObjectClass *) example_contact_list_parent_class)->dispose ( object); } static void get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { ExampleContactList *self = EXAMPLE_CONTACT_LIST (object); switch (property_id) { case PROP_SIMULATION_DELAY: g_value_set_uint (value, self->priv->simulation_delay); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } } static void set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { ExampleContactList *self = EXAMPLE_CONTACT_LIST (object); switch (property_id) { case PROP_SIMULATION_DELAY: self->priv->simulation_delay = g_value_get_uint (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } } static ExampleContactDetails * lookup_contact (ExampleContactList *self, TpHandle contact) { return g_hash_table_lookup (self->priv->contact_details, GUINT_TO_POINTER (contact)); } static ExampleContactDetails * ensure_contact (ExampleContactList *self, TpHandle contact, gboolean *created) { ExampleContactDetails *ret = lookup_contact (self, contact); if (ret == NULL) { tp_handle_set_add (self->priv->contacts, contact); ret = example_contact_details_new (); ret->alias = g_strdup (tp_handle_inspect (self->priv->contact_repo, contact)); g_hash_table_insert (self->priv->contact_details, GUINT_TO_POINTER (contact), ret); /* if we already had a publish request from them, then adding them to * the protocol-level contact list doesn't alter the Telepathy contact * list */ if (created != NULL) { *created = (g_hash_table_lookup (self->priv->publish_requests, GUINT_TO_POINTER (contact)) == NULL); } } else if (created != NULL) { *created = FALSE; } return ret; } static gchar * ensure_tag (ExampleContactList *self, const gchar *s, gboolean emit_signal) { gchar *r = g_hash_table_lookup (self->priv->all_tags, s); if (r == NULL) { g_message ("creating group %s", s); r = g_strdup (s); g_hash_table_insert (self->priv->all_tags, r, r); if (emit_signal) tp_base_contact_list_groups_created ((TpBaseContactList *) self, &s, 1); } return r; } static void example_contact_list_set_contact_groups_async (TpBaseContactList *contact_list, TpHandle contact, const gchar * const *names, gsize n, GAsyncReadyCallback callback, gpointer user_data) { ExampleContactList *self = EXAMPLE_CONTACT_LIST (contact_list); gboolean created; gsize i; ExampleContactDetails *d; GPtrArray *old_names, *new_names; GHashTableIter iter; gpointer k; for (i = 0; i < n; i++) ensure_tag (self, names[i], FALSE); tp_base_contact_list_groups_created (contact_list, names, n); d = ensure_contact (self, contact, &created); if (created) tp_base_contact_list_one_contact_changed (contact_list, contact); if (d->tags == NULL) d->tags = g_hash_table_new (g_str_hash, g_str_equal); old_names = g_ptr_array_sized_new (g_hash_table_size (d->tags)); new_names = g_ptr_array_sized_new (n); for (i = 0; i < n; i++) { if (g_hash_table_lookup (d->tags, names[i]) == NULL) { gchar *tag = g_hash_table_lookup (self->priv->all_tags, names[i]); g_assert (tag != NULL); /* already ensured to exist, above */ g_hash_table_insert (d->tags, tag, tag); g_ptr_array_add (new_names, tag); } } g_hash_table_iter_init (&iter, d->tags); while (g_hash_table_iter_next (&iter, &k, NULL)) { for (i = 0; i < n; i++) { if (!tp_strdiff (names[i], k)) goto next_hash_element; } /* not found in @names, so remove it */ g_ptr_array_add (old_names, k); g_hash_table_iter_remove (&iter); next_hash_element: continue; } tp_base_contact_list_one_contact_groups_changed (contact_list, contact, (const gchar * const *) new_names->pdata, new_names->len, (const gchar * const *) old_names->pdata, old_names->len); g_ptr_array_unref (old_names); g_ptr_array_unref (new_names); tp_simple_async_report_success_in_idle ((GObject *) self, callback, user_data, example_contact_list_set_contact_groups_async); } static gboolean receive_contact_lists (gpointer p) { TpBaseContactList *contact_list = p; ExampleContactList *self = p; TpHandle handle; gchar *cambridge, *montreal, *francophones; ExampleContactDetails *d; GHashTableIter iter; gpointer handle_p; if (self->priv->all_tags == NULL) { /* connection already disconnected, so don't process the * "data from the server" */ return FALSE; } /* In a real CM we'd have received a contact list from the server at this * point. But this isn't a real CM, so we have to make one up... */ g_message ("Receiving roster from server"); cambridge = ensure_tag (self, "Cambridge", FALSE); montreal = ensure_tag (self, "Montreal", FALSE); francophones = ensure_tag (self, "Francophones", FALSE); /* Add various people who are already subscribing and publishing */ handle = tp_handle_ensure (self->priv->contact_repo, "sjoerd@example.com", NULL, NULL); d = ensure_contact (self, handle, NULL); g_free (d->alias); d->alias = g_strdup ("Sjoerd"); d->subscribe = TRUE; d->publish = TRUE; d->tags = g_hash_table_new (g_str_hash, g_str_equal); g_hash_table_insert (d->tags, cambridge, cambridge); handle = tp_handle_ensure (self->priv->contact_repo, "guillaume@example.com", NULL, NULL); d = ensure_contact (self, handle, NULL); g_free (d->alias); d->alias = g_strdup ("Guillaume"); d->subscribe = TRUE; d->publish = TRUE; d->tags = g_hash_table_new (g_str_hash, g_str_equal); g_hash_table_insert (d->tags, cambridge, cambridge); g_hash_table_insert (d->tags, francophones, francophones); handle = tp_handle_ensure (self->priv->contact_repo, "olivier@example.com", NULL, NULL); d = ensure_contact (self, handle, NULL); g_free (d->alias); d->alias = g_strdup ("Olivier"); d->subscribe = TRUE; d->publish = TRUE; d->tags = g_hash_table_new (g_str_hash, g_str_equal); g_hash_table_insert (d->tags, montreal, montreal); g_hash_table_insert (d->tags, francophones, francophones); handle = tp_handle_ensure (self->priv->contact_repo, "travis@example.com", NULL, NULL); d = ensure_contact (self, handle, NULL); g_free (d->alias); d->alias = g_strdup ("Travis"); d->subscribe = TRUE; d->publish = TRUE; /* Add a couple of people whose presence we've requested. They are * remote-pending in subscribe */ handle = tp_handle_ensure (self->priv->contact_repo, "geraldine@example.com", NULL, NULL); d = ensure_contact (self, handle, NULL); g_free (d->alias); d->alias = g_strdup ("Géraldine"); d->subscribe_requested = TRUE; d->tags = g_hash_table_new (g_str_hash, g_str_equal); g_hash_table_insert (d->tags, cambridge, cambridge); g_hash_table_insert (d->tags, francophones, francophones); handle = tp_handle_ensure (self->priv->contact_repo, "helen@example.com", NULL, NULL); d = ensure_contact (self, handle, NULL); g_free (d->alias); d->alias = g_strdup ("Helen"); d->subscribe_requested = TRUE; d->tags = g_hash_table_new (g_str_hash, g_str_equal); g_hash_table_insert (d->tags, cambridge, cambridge); /* Receive a couple of authorization requests too. These people are * local-pending in publish; they're not actually on our protocol-level * contact list */ handle = tp_handle_ensure (self->priv->contact_repo, "wim@example.com", NULL, NULL); tp_handle_set_add (self->priv->contacts, handle); g_hash_table_insert (self->priv->publish_requests, GUINT_TO_POINTER (handle), g_strdup ("I'm more metal than you!")); handle = tp_handle_ensure (self->priv->contact_repo, "christian@example.com", NULL, NULL); tp_handle_set_add (self->priv->contacts, handle); g_hash_table_insert (self->priv->publish_requests, GUINT_TO_POINTER (handle), g_strdup ("I have some fermented herring for you")); /* Add a couple of blocked contacts. */ handle = tp_handle_ensure (self->priv->contact_repo, "bill@example.com", NULL, NULL); tp_handle_set_add (self->priv->blocked_contacts, handle); handle = tp_handle_ensure (self->priv->contact_repo, "steve@example.com", NULL, NULL); tp_handle_set_add (self->priv->blocked_contacts, handle); g_hash_table_iter_init (&iter, self->priv->contact_details); /* emit initial aliases, presences */ while (g_hash_table_iter_next (&iter, &handle_p, NULL)) { handle = GPOINTER_TO_UINT (handle_p); g_signal_emit (self, signals[ALIAS_UPDATED], 0, handle); g_signal_emit (self, signals[PRESENCE_UPDATED], 0, handle); } /* ... and off we go */ tp_base_contact_list_set_list_received (contact_list); return FALSE; } static void status_changed_cb (TpBaseConnection *conn, guint status, guint reason, ExampleContactList *self) { switch (status) { case TP_CONNECTION_STATUS_CONNECTED: { /* Do network I/O to get the contact list. This connection manager * doesn't really have a server, so simulate a small network delay * then invent a contact list */ tp_base_contact_list_set_list_pending ((TpBaseContactList *) self); g_timeout_add_full (G_PRIORITY_DEFAULT, 2 * self->priv->simulation_delay, receive_contact_lists, g_object_ref (self), g_object_unref); } break; case TP_CONNECTION_STATUS_DISCONNECTED: { example_contact_list_close_all (self); tp_clear_object (&self->priv->conn); } break; } } static void constructed (GObject *object) { ExampleContactList *self = EXAMPLE_CONTACT_LIST (object); void (*chain_up) (GObject *) = ((GObjectClass *) example_contact_list_parent_class)->constructed; if (chain_up != NULL) { chain_up (object); } g_object_get (self, "connection", &self->priv->conn, NULL); g_assert (self->priv->conn != NULL); self->priv->contact_repo = tp_base_connection_get_handles (self->priv->conn, TP_HANDLE_TYPE_CONTACT); self->priv->contacts = tp_handle_set_new (self->priv->contact_repo); self->priv->blocked_contacts = tp_handle_set_new (self->priv->contact_repo); self->priv->cancelled_publish_requests = tp_handle_set_new ( self->priv->contact_repo); self->priv->status_changed_id = g_signal_connect (self->priv->conn, "status-changed", (GCallback) status_changed_cb, self); } static void send_updated_roster (ExampleContactList *self, TpHandle contact) { ExampleContactDetails *d = g_hash_table_lookup (self->priv->contact_details, GUINT_TO_POINTER (contact)); const gchar *request = g_hash_table_lookup (self->priv->publish_requests, GUINT_TO_POINTER (contact)); const gchar *identifier = tp_handle_inspect (self->priv->contact_repo, contact); /* In a real connection manager, we'd transmit these new details to the * server, rather than just printing messages. */ if (d == NULL) { g_message ("Deleting contact %s from server", identifier); } else { g_message ("Transmitting new state of contact %s to server", identifier); g_message ("\talias = %s", d->alias); g_message ("\tcan see our presence = %s", d->publish ? "yes" : (request != NULL ? "no, but has requested it" : "no")); g_message ("\tsends us presence = %s", d->subscribe ? "yes" : (d->subscribe_requested ? "no, but we have requested it" : (d->subscribe_rejected ? "no, request refused" : "no"))); if (d->tags == NULL || g_hash_table_size (d->tags) == 0) { g_message ("\tnot in any groups"); } else { GHashTableIter iter; gpointer k; g_hash_table_iter_init (&iter, d->tags); while (g_hash_table_iter_next (&iter, &k, NULL)) { g_message ("\tin group: %s", (gchar *) k); } } } } static void example_contact_list_set_group_members_async (TpBaseContactList *contact_list, const gchar *group, TpHandleSet *contacts, GAsyncReadyCallback callback, gpointer user_data) { ExampleContactList *self = EXAMPLE_CONTACT_LIST (contact_list); TpHandleSet *new_contacts = tp_handle_set_new (self->priv->contact_repo); TpHandleSet *added = tp_handle_set_new (self->priv->contact_repo); TpHandleSet *removed = tp_handle_set_new (self->priv->contact_repo); TpIntsetFastIter iter; TpHandle member; gchar *tag = ensure_tag (self, group, TRUE); tp_intset_fast_iter_init (&iter, tp_handle_set_peek (contacts)); while (tp_intset_fast_iter_next (&iter, &member)) { gboolean created = FALSE, updated = FALSE; ExampleContactDetails *d = ensure_contact (self, member, &created); if (created) tp_handle_set_add (new_contacts, member); if (d->tags == NULL) d->tags = g_hash_table_new (g_str_hash, g_str_equal); if (g_hash_table_lookup (d->tags, tag) == NULL) { g_hash_table_insert (d->tags, tag, tag); updated = TRUE; } if (created || updated) { send_updated_roster (self, member); tp_handle_set_add (added, member); } } tp_intset_fast_iter_init (&iter, tp_handle_set_peek (self->priv->contacts)); while (tp_intset_fast_iter_next (&iter, &member)) { ExampleContactDetails *d; if (tp_handle_set_is_member (contacts, member)) continue; d = lookup_contact (self, member); if (d != NULL && d->tags != NULL && g_hash_table_remove (d->tags, group)) tp_handle_set_add (removed, member); } if (!tp_handle_set_is_empty (new_contacts)) tp_base_contact_list_contacts_changed (contact_list, new_contacts, NULL); if (!tp_handle_set_is_empty (added)) tp_base_contact_list_groups_changed (contact_list, added, &group, 1, NULL, 0); if (!tp_handle_set_is_empty (removed)) tp_base_contact_list_groups_changed (contact_list, removed, NULL, 0, &group, 1); tp_handle_set_destroy (added); tp_handle_set_destroy (removed); tp_handle_set_destroy (new_contacts); tp_simple_async_report_success_in_idle ((GObject *) self, callback, user_data, example_contact_list_set_group_members_async); } static void example_contact_list_add_to_group_async (TpBaseContactList *contact_list, const gchar *group, TpHandleSet *contacts, GAsyncReadyCallback callback, gpointer user_data) { ExampleContactList *self = EXAMPLE_CONTACT_LIST (contact_list); TpHandleSet *new_contacts = tp_handle_set_new (self->priv->contact_repo); TpHandleSet *new_to_group = tp_handle_set_new (self->priv->contact_repo); TpIntsetFastIter iter; TpHandle member; gchar *tag = ensure_tag (self, group, TRUE); tp_intset_fast_iter_init (&iter, tp_handle_set_peek (contacts)); while (tp_intset_fast_iter_next (&iter, &member)) { gboolean created = FALSE, updated = FALSE; ExampleContactDetails *d = ensure_contact (self, member, &created); if (created) tp_handle_set_add (new_contacts, member); if (d->tags == NULL) d->tags = g_hash_table_new (g_str_hash, g_str_equal); if (g_hash_table_lookup (d->tags, tag) == NULL) { g_hash_table_insert (d->tags, tag, tag); updated = TRUE; } if (created || updated) { send_updated_roster (self, member); tp_handle_set_add (new_to_group, member); } } if (!tp_handle_set_is_empty (new_contacts)) tp_base_contact_list_contacts_changed (contact_list, new_contacts, NULL); if (!tp_handle_set_is_empty (new_to_group)) tp_base_contact_list_groups_changed (contact_list, new_to_group, &group, 1, NULL, 0); tp_handle_set_destroy (new_to_group); tp_handle_set_destroy (new_contacts); tp_simple_async_report_success_in_idle ((GObject *) self, callback, user_data, example_contact_list_add_to_group_async); } static void example_contact_list_remove_from_group_async (TpBaseContactList *contact_list, const gchar *group, TpHandleSet *contacts, GAsyncReadyCallback callback, gpointer user_data) { ExampleContactList *self = EXAMPLE_CONTACT_LIST (contact_list); TpHandleSet *changed = tp_handle_set_new (self->priv->contact_repo); TpIntsetFastIter iter; TpHandle member; tp_intset_fast_iter_init (&iter, tp_handle_set_peek (contacts)); while (tp_intset_fast_iter_next (&iter, &member)) { ExampleContactDetails *d = lookup_contact (self, member); /* If not on the roster or not in any groups, we have nothing to do */ if (d != NULL && d->tags != NULL && g_hash_table_remove (d->tags, group)) { send_updated_roster (self, member); tp_handle_set_add (changed, member); } } if (!tp_handle_set_is_empty (changed)) tp_base_contact_list_groups_changed (contact_list, changed, NULL, 0, &group, 1); tp_handle_set_destroy (changed); tp_simple_async_report_success_in_idle ((GObject *) self, callback, user_data, example_contact_list_remove_from_group_async); } typedef struct { ExampleContactList *self; TpHandle contact; } SelfAndContact; static SelfAndContact * self_and_contact_new (ExampleContactList *self, TpHandle contact) { SelfAndContact *ret = g_slice_new0 (SelfAndContact); ret->self = g_object_ref (self); ret->contact = contact; return ret; } static void self_and_contact_destroy (gpointer p) { SelfAndContact *s = p; g_object_unref (s->self); g_slice_free (SelfAndContact, s); } static void receive_auth_request (ExampleContactList *self, TpHandle contact) { ExampleContactDetails *d; /* if shutting down, do nothing */ if (self->priv->conn == NULL) return; /* A remote contact has asked to see our presence. * * In a real connection manager this would be the result of incoming * data from the server. */ g_message ("From server: %s has sent us a publish request", tp_handle_inspect (self->priv->contact_repo, contact)); d = lookup_contact (self, contact); if (d != NULL && d->publish) return; if (d != NULL && d->pre_approved) { /* the user already said yes, no need to signal anything */ g_message ("... this publish request was already approved"); d->pre_approved = FALSE; d->publish = TRUE; g_hash_table_remove (self->priv->publish_requests, GUINT_TO_POINTER (contact)); tp_handle_set_remove (self->priv->cancelled_publish_requests, contact); send_updated_roster (self, contact); } else { tp_handle_set_add (self->priv->contacts, contact); g_hash_table_insert (self->priv->publish_requests, GUINT_TO_POINTER (contact), g_strdup ("May I see your presence, please?")); } tp_base_contact_list_one_contact_changed ((TpBaseContactList *) self, contact); /* If the contact has a name ending with "@cancel.something", they * immediately take it back; this is mainly for the regression test. */ if (strstr (tp_handle_inspect (self->priv->contact_repo, contact), "@cancel.") != NULL) { g_message ("From server: %s has cancelled their publish request", tp_handle_inspect (self->priv->contact_repo, contact)); d->publish = FALSE; d->pre_approved = FALSE; g_hash_table_remove (self->priv->publish_requests, GUINT_TO_POINTER (contact)); tp_handle_set_add (self->priv->cancelled_publish_requests, contact); tp_base_contact_list_one_contact_changed ((TpBaseContactList *) self, contact); } } static gboolean receive_authorized (gpointer p) { SelfAndContact *s = p; ExampleContactDetails *d; /* if shutting down, do nothing */ if (s->self->priv->conn == NULL) return FALSE; /* A remote contact has accepted our request to see their presence. * * In a real connection manager this would be the result of incoming * data from the server. */ g_message ("From server: %s has accepted our subscribe request", tp_handle_inspect (s->self->priv->contact_repo, s->contact)); d = ensure_contact (s->self, s->contact, NULL); /* if we were already subscribed to them, then nothing really happened */ if (d->subscribe) return FALSE; /* DITTO, if our subscription request was cancelled in the meantime */ if (!d->subscribe_requested) return FALSE; d->subscribe_requested = FALSE; d->subscribe_rejected = FALSE; d->subscribe = TRUE; tp_base_contact_list_one_contact_changed ((TpBaseContactList *) s->self, s->contact); /* their presence changes to something other than UNKNOWN */ g_signal_emit (s->self, signals[PRESENCE_UPDATED], 0, s->contact); /* if we're not publishing to them, also pretend they have asked us to * do so */ if (!d->publish) { receive_auth_request (s->self, s->contact); } return FALSE; } static gboolean receive_unauthorized (gpointer p) { SelfAndContact *s = p; ExampleContactDetails *d; /* if shutting down, do nothing */ if (s->self->priv->conn == NULL) return FALSE; /* A remote contact has rejected our request to see their presence. * * In a real connection manager this would be the result of incoming * data from the server. */ g_message ("From server: %s has rejected our subscribe request", tp_handle_inspect (s->self->priv->contact_repo, s->contact)); d = ensure_contact (s->self, s->contact, NULL); if (!d->subscribe && !d->subscribe_requested) return FALSE; d->subscribe_requested = FALSE; d->subscribe_rejected = TRUE; d->subscribe = FALSE; tp_base_contact_list_one_contact_changed ((TpBaseContactList *) s->self, s->contact); /* their presence changes to UNKNOWN */ g_signal_emit (s->self, signals[PRESENCE_UPDATED], 0, s->contact); return FALSE; } static gboolean auth_request_cb (gpointer p) { SelfAndContact *s = p; receive_auth_request (s->self, s->contact); return FALSE; } ExampleContactListPresence example_contact_list_get_presence (ExampleContactList *self, TpHandle contact) { ExampleContactDetails *d = lookup_contact (self, contact); const gchar *id; if (d == NULL || !d->subscribe) { /* we don't know the presence of people not on the subscribe list, * by definition */ return EXAMPLE_CONTACT_LIST_PRESENCE_UNKNOWN; } id = tp_handle_inspect (self->priv->contact_repo, contact); /* In this example CM, we fake contacts' presence based on their name: * contacts in the first half of the alphabet are available, the rest * (including non-alphabetic and non-ASCII initial letters) are away. */ if ((id[0] >= 'A' && id[0] <= 'M') || (id[0] >= 'a' && id[0] <= 'm')) { return EXAMPLE_CONTACT_LIST_PRESENCE_AVAILABLE; } return EXAMPLE_CONTACT_LIST_PRESENCE_AWAY; } const gchar * example_contact_list_get_alias (ExampleContactList *self, TpHandle contact) { ExampleContactDetails *d = lookup_contact (self, contact); if (d == NULL) { /* we don't have a user-defined alias for people not on the roster */ return tp_handle_inspect (self->priv->contact_repo, contact); } return d->alias; } void example_contact_list_set_alias (ExampleContactList *self, TpHandle contact, const gchar *alias) { gboolean created; ExampleContactDetails *d; gchar *old; /* if shutting down, do nothing */ if (self->priv->conn == NULL) return; d = ensure_contact (self, contact, &created); if (created) { tp_base_contact_list_one_contact_changed ( (TpBaseContactList *) self, contact); } /* FIXME: if stored list hasn't been retrieved yet, queue the change for * later */ old = d->alias; d->alias = g_strdup (alias); if (created || tp_strdiff (old, alias)) send_updated_roster (self, contact); g_free (old); } static TpHandleSet * example_contact_list_dup_contacts (TpBaseContactList *contact_list) { ExampleContactList *self = EXAMPLE_CONTACT_LIST (contact_list); return tp_handle_set_copy (self->priv->contacts); } static TpHandleSet * example_contact_list_dup_group_members (TpBaseContactList *contact_list, const gchar *group) { ExampleContactList *self = EXAMPLE_CONTACT_LIST (contact_list); TpIntsetFastIter iter; TpHandle member; TpHandleSet *members = tp_handle_set_new (self->priv->contact_repo); tp_intset_fast_iter_init (&iter, tp_handle_set_peek (self->priv->contacts)); while (tp_intset_fast_iter_next (&iter, &member)) { ExampleContactDetails *d = lookup_contact (self, member); if (d != NULL && d->tags != NULL && g_hash_table_lookup_extended (d->tags, group, NULL, NULL)) tp_handle_set_add (members, member); } return members; } static const ExampleContactDetails no_details = { NULL, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }; static inline TpSubscriptionState compose_presence (gboolean full, gboolean ask, gboolean removed_remotely) { if (full) return TP_SUBSCRIPTION_STATE_YES; else if (ask) return TP_SUBSCRIPTION_STATE_ASK; else if (removed_remotely) return TP_SUBSCRIPTION_STATE_REMOVED_REMOTELY; else return TP_SUBSCRIPTION_STATE_NO; } static void example_contact_list_dup_states (TpBaseContactList *contact_list, TpHandle contact, TpSubscriptionState *subscribe, TpSubscriptionState *publish, gchar **publish_request) { ExampleContactList *self = EXAMPLE_CONTACT_LIST (contact_list); const ExampleContactDetails *details = lookup_contact (self, contact); const gchar *request = g_hash_table_lookup (self->priv->publish_requests, GUINT_TO_POINTER (contact)); if (details == NULL) details = &no_details; if (subscribe != NULL) *subscribe = compose_presence (details->subscribe, details->subscribe_requested, details->subscribe_rejected); if (publish != NULL) *publish = compose_presence (details->publish, (request != NULL), tp_handle_set_is_member (self->priv->cancelled_publish_requests, contact)); if (publish_request != NULL) *publish_request = g_strdup (request); } static void example_contact_list_request_subscription_async ( TpBaseContactList *contact_list, TpHandleSet *contacts, const gchar *message, GAsyncReadyCallback callback, gpointer user_data) { ExampleContactList *self = EXAMPLE_CONTACT_LIST (contact_list); TpHandleSet *changed = tp_handle_set_new (self->priv->contact_repo); TpIntsetFastIter iter; TpHandle member; tp_intset_fast_iter_init (&iter, tp_handle_set_peek (contacts)); while (tp_intset_fast_iter_next (&iter, &member)) { gboolean created; ExampleContactDetails *d = ensure_contact (self, member, &created); gchar *message_lc; /* if they already authorized us, it's a no-op */ if (d->subscribe) continue; /* In a real connection manager we'd start a network request here */ g_message ("Transmitting authorization request to %s: %s", tp_handle_inspect (self->priv->contact_repo, member), message); tp_handle_set_add (changed, member); d->subscribe_rejected = FALSE; d->subscribe_requested = TRUE; send_updated_roster (self, member); /* Pretend that after a delay, the contact notices the request * and allows or rejects it. In this example connection manager, * empty requests are allowed, as are requests that contain "please" * case-insensitively. All other requests are denied. */ message_lc = g_ascii_strdown (message, -1); if (message[0] == '\0' || strstr (message_lc, "please") != NULL) { g_timeout_add_full (G_PRIORITY_LOW, self->priv->simulation_delay, receive_authorized, self_and_contact_new (self, member), self_and_contact_destroy); } else { g_timeout_add_full (G_PRIORITY_LOW, self->priv->simulation_delay, receive_unauthorized, self_and_contact_new (self, member), self_and_contact_destroy); } g_free (message_lc); } tp_base_contact_list_contacts_changed (contact_list, changed, NULL); tp_simple_async_report_success_in_idle ((GObject *) self, callback, user_data, example_contact_list_request_subscription_async); } static void example_contact_list_authorize_publication_async ( TpBaseContactList *contact_list, TpHandleSet *contacts, GAsyncReadyCallback callback, gpointer user_data) { ExampleContactList *self = EXAMPLE_CONTACT_LIST (contact_list); TpHandleSet *changed = tp_handle_set_new (self->priv->contact_repo); TpIntsetFastIter iter; TpHandle member; tp_intset_fast_iter_init (&iter, tp_handle_set_peek (contacts)); while (tp_intset_fast_iter_next (&iter, &member)) { ExampleContactDetails *d = ensure_contact (self, member, NULL); const gchar *request = g_hash_table_lookup (self->priv->publish_requests, GUINT_TO_POINTER (member)); if (tp_handle_set_remove (self->priv->cancelled_publish_requests, member)) tp_handle_set_add (changed, member); /* We would like member to see our presence. In this simulated protocol, * this is meaningless, unless they have asked for it; but we can still * remember the pre-authorization in case they ask later. */ if (request == NULL) { d->pre_approved = TRUE; } else if (!d->publish) { d->publish = TRUE; g_hash_table_remove (self->priv->publish_requests, GUINT_TO_POINTER (member)); send_updated_roster (self, member); tp_handle_set_add (changed, member); } } tp_base_contact_list_contacts_changed (contact_list, changed, NULL); tp_simple_async_report_success_in_idle ((GObject *) self, callback, user_data, example_contact_list_authorize_publication_async); } static void example_contact_list_store_contacts_async ( TpBaseContactList *contact_list, TpHandleSet *contacts, GAsyncReadyCallback callback, gpointer user_data) { ExampleContactList *self = EXAMPLE_CONTACT_LIST (contact_list); TpHandleSet *changed = tp_handle_set_new (self->priv->contact_repo); TpIntsetFastIter iter; TpHandle member; tp_intset_fast_iter_init (&iter, tp_handle_set_peek (contacts)); while (tp_intset_fast_iter_next (&iter, &member)) { /* We would like member to be on the roster, but nothing more. */ if (lookup_contact (self, member) == NULL) { gboolean created; ensure_contact (self, member, &created); send_updated_roster (self, member); /* If we'd had a publish request from this member, then adding them * to the protocol-level contact list doesn't actually cause a * state change visible on Telepathy. */ if (created) tp_handle_set_add (changed, member); } } tp_base_contact_list_contacts_changed (contact_list, changed, NULL); tp_simple_async_report_success_in_idle ((GObject *) self, callback, user_data, example_contact_list_store_contacts_async); } static void example_contact_list_remove_contacts_async (TpBaseContactList *contact_list, TpHandleSet *contacts, GAsyncReadyCallback callback, gpointer user_data) { ExampleContactList *self = EXAMPLE_CONTACT_LIST (contact_list); TpHandleSet *removed = tp_handle_set_new (self->priv->contact_repo); TpIntsetFastIter iter; TpHandle member; tp_intset_fast_iter_init (&iter, tp_handle_set_peek (contacts)); while (tp_intset_fast_iter_next (&iter, &member)) { /* we would like to remove member from the roster altogether */ if (lookup_contact (self, member) != NULL || g_hash_table_lookup (self->priv->publish_requests, GUINT_TO_POINTER (member)) != NULL || tp_handle_set_is_member (self->priv->cancelled_publish_requests, member)) { tp_handle_set_add (removed, member); g_hash_table_remove (self->priv->contact_details, GUINT_TO_POINTER (member)); g_hash_table_remove (self->priv->publish_requests, GUINT_TO_POINTER (member)); tp_handle_set_remove (self->priv->contacts, member); tp_handle_set_remove (self->priv->cancelled_publish_requests, member); send_updated_roster (self, member); /* since they're no longer on the subscribe list, we can't * see their presence, so emit a signal changing it to * UNKNOWN */ g_signal_emit (self, signals[PRESENCE_UPDATED], 0, member); } } tp_base_contact_list_contacts_changed (contact_list, NULL, removed); tp_simple_async_report_success_in_idle ((GObject *) self, callback, user_data, example_contact_list_remove_contacts_async); } static void example_contact_list_unsubscribe_async (TpBaseContactList *contact_list, TpHandleSet *contacts, GAsyncReadyCallback callback, gpointer user_data) { ExampleContactList *self = EXAMPLE_CONTACT_LIST (contact_list); TpHandleSet *changed = tp_handle_set_new (self->priv->contact_repo); TpIntsetFastIter iter; TpHandle member; tp_intset_fast_iter_init (&iter, tp_handle_set_peek (contacts)); while (tp_intset_fast_iter_next (&iter, &member)) { ExampleContactDetails *d = lookup_contact (self, member); /* we would like to avoid receiving member's presence any more, * or we would like to cancel an outstanding request for their * presence */ if (d != NULL) { if (d->subscribe_requested) { g_message ("Cancelling our authorization request to %s", tp_handle_inspect (self->priv->contact_repo, member)); d->subscribe_requested = FALSE; tp_handle_set_add (changed, member); send_updated_roster (self, member); } else if (d->subscribe_rejected) { g_message ("Forgetting rejected authorization request to %s", tp_handle_inspect (self->priv->contact_repo, member)); d->subscribe_rejected = FALSE; tp_handle_set_add (changed, member); send_updated_roster (self, member); } else if (d->subscribe) { g_message ("We no longer want presence from %s", tp_handle_inspect (self->priv->contact_repo, member)); d->subscribe = FALSE; /* since they're no longer on the subscribe list, we can't * see their presence, so emit a signal changing it to * UNKNOWN */ g_signal_emit (self, signals[PRESENCE_UPDATED], 0, member); tp_handle_set_add (changed, member); send_updated_roster (self, member); } } } tp_base_contact_list_contacts_changed (contact_list, changed, NULL); tp_simple_async_report_success_in_idle ((GObject *) self, callback, user_data, example_contact_list_unsubscribe_async); } static void example_contact_list_unpublish_async (TpBaseContactList *contact_list, TpHandleSet *contacts, GAsyncReadyCallback callback, gpointer user_data) { ExampleContactList *self = EXAMPLE_CONTACT_LIST (contact_list); TpHandleSet *changed = tp_handle_set_new (self->priv->contact_repo); TpHandleSet *removed = tp_handle_set_new (self->priv->contact_repo); TpIntsetFastIter iter; TpHandle member; tp_intset_fast_iter_init (&iter, tp_handle_set_peek (contacts)); while (tp_intset_fast_iter_next (&iter, &member)) { ExampleContactDetails *d = lookup_contact (self, member); const gchar *request = g_hash_table_lookup (self->priv->publish_requests, GUINT_TO_POINTER (member)); /* we would like member not to see our presence any more, or we * would like to reject a request from them to see our presence */ if (request != NULL) { g_message ("Rejecting authorization request from %s", tp_handle_inspect (self->priv->contact_repo, member)); g_hash_table_remove (self->priv->publish_requests, GUINT_TO_POINTER (member)); if (d == NULL) { /* the contact wasn't actually on our protocol-level contact * list, only on the Telepathy-level contact list, so rejecting * authorization makes them disappear */ tp_handle_set_add (removed, member); } else { tp_handle_set_add (changed, member); } } if (tp_handle_set_remove (self->priv->cancelled_publish_requests, member)) { g_message ("Acknowledging remotely-cancelled publish request"); tp_handle_set_add (changed, member); } if (d != NULL) { d->pre_approved = FALSE; if (d->publish) { g_message ("Removing authorization from %s", tp_handle_inspect (self->priv->contact_repo, member)); d->publish = FALSE; tp_handle_set_add (changed, member); send_updated_roster (self, member); /* Pretend that after a delay, the contact notices the change * and asks for our presence again */ g_timeout_add_full (G_PRIORITY_LOW, self->priv->simulation_delay, auth_request_cb, self_and_contact_new (self, member), self_and_contact_destroy); } } } tp_base_contact_list_contacts_changed (contact_list, changed, removed); tp_simple_async_report_success_in_idle ((GObject *) self, callback, user_data, example_contact_list_unpublish_async); } static TpHandleSet * example_contact_list_dup_blocked_contacts (TpBaseContactList *contact_list) { ExampleContactList *self = EXAMPLE_CONTACT_LIST (contact_list); return tp_handle_set_copy (self->priv->blocked_contacts); } static void example_contact_list_block_contacts_async (TpBaseContactList *contact_list, TpHandleSet *contacts, GAsyncReadyCallback callback, gpointer user_data) { ExampleContactList *self = EXAMPLE_CONTACT_LIST (contact_list); TpIntsetFastIter iter; TpHandleSet *changed = tp_handle_set_new (self->priv->contact_repo); TpHandle member; tp_intset_fast_iter_init (&iter, tp_handle_set_peek (contacts)); while (tp_intset_fast_iter_next (&iter, &member)) { if (!tp_handle_set_is_member (self->priv->blocked_contacts, member)) { g_message ("Adding contact %s to blocked list", tp_handle_inspect (self->priv->contact_repo, member)); tp_handle_set_add (self->priv->blocked_contacts, member); tp_handle_set_add (changed, member); } } tp_base_contact_list_contact_blocking_changed (contact_list, changed); tp_handle_set_destroy (changed); tp_simple_async_report_success_in_idle ((GObject *) self, callback, user_data, example_contact_list_block_contacts_async); } static void example_contact_list_unblock_contacts_async (TpBaseContactList *contact_list, TpHandleSet *contacts, GAsyncReadyCallback callback, gpointer user_data) { ExampleContactList *self = EXAMPLE_CONTACT_LIST (contact_list); TpIntsetFastIter iter; TpHandleSet *changed = tp_handle_set_new (self->priv->contact_repo); TpHandle member; tp_intset_fast_iter_init (&iter, tp_handle_set_peek (contacts)); while (tp_intset_fast_iter_next (&iter, &member)) { if (tp_handle_set_remove (self->priv->blocked_contacts, member)) { g_message ("Removing contact %s from blocked list", tp_handle_inspect (self->priv->contact_repo, member)); tp_handle_set_add (changed, member); } } tp_base_contact_list_contact_blocking_changed (contact_list, changed); tp_handle_set_destroy (changed); tp_simple_async_report_success_in_idle ((GObject *) self, callback, user_data, example_contact_list_unblock_contacts_async); } static guint example_contact_list_get_group_storage ( TpBaseContactList *contact_list G_GNUC_UNUSED) { return TP_CONTACT_METADATA_STORAGE_TYPE_ANYONE; } static GStrv example_contact_list_dup_groups (TpBaseContactList *contact_list) { ExampleContactList *self = EXAMPLE_CONTACT_LIST (contact_list); GPtrArray *tags = g_ptr_array_sized_new ( g_hash_table_size (self->priv->all_tags) + 1); GHashTableIter iter; gpointer tag; g_hash_table_iter_init (&iter, self->priv->all_tags); while (g_hash_table_iter_next (&iter, &tag, NULL)) g_ptr_array_add (tags, g_strdup (tag)); g_ptr_array_add (tags, NULL); return (GStrv) g_ptr_array_free (tags, FALSE); } static GStrv example_contact_list_dup_contact_groups (TpBaseContactList *contact_list, TpHandle contact) { ExampleContactList *self = EXAMPLE_CONTACT_LIST (contact_list); GPtrArray *tags = g_ptr_array_sized_new ( g_hash_table_size (self->priv->all_tags) + 1); ExampleContactDetails *d = lookup_contact (self, contact); if (d != NULL && d->tags != NULL) { GHashTableIter iter; gpointer tag; g_hash_table_iter_init (&iter, d->tags); while (g_hash_table_iter_next (&iter, &tag, NULL)) g_ptr_array_add (tags, g_strdup (tag)); } g_ptr_array_add (tags, NULL); return (GStrv) g_ptr_array_free (tags, FALSE); } static void example_contact_list_remove_group_async (TpBaseContactList *contact_list, const gchar *group, GAsyncReadyCallback callback, gpointer user_data) { ExampleContactList *self = EXAMPLE_CONTACT_LIST (contact_list); TpIntsetFastIter iter; TpHandle member; /* signal the deletion */ g_message ("deleting group %s", group); tp_base_contact_list_groups_removed (contact_list, &group, 1); /* apply the change to our model of the contacts too; we don't need to signal * the change, because TpBaseContactList already did */ tp_intset_fast_iter_init (&iter, tp_handle_set_peek (self->priv->contacts)); while (tp_intset_fast_iter_next (&iter, &member)) { ExampleContactDetails *d = lookup_contact (self, member); if (d != NULL && d->tags != NULL) g_hash_table_remove (d->tags, group); } tp_simple_async_report_success_in_idle ((GObject *) contact_list, callback, user_data, example_contact_list_remove_group_async); } static gchar * example_contact_list_normalize_group (TpBaseContactList *contact_list, const gchar *id) { if (id[0] == '\0') return NULL; return g_utf8_normalize (id, -1, G_NORMALIZE_ALL_COMPOSE); } static void example_contact_list_rename_group_async (TpBaseContactList *contact_list, const gchar *old_name, const gchar *new_name, GAsyncReadyCallback callback, gpointer user_data) { ExampleContactList *self = EXAMPLE_CONTACT_LIST (contact_list); gchar *tag = ensure_tag (self, new_name, FALSE); GHashTableIter iter; gpointer v; /* signal the rename */ g_print ("renaming group %s to %s", old_name, new_name); tp_base_contact_list_group_renamed (contact_list, old_name, new_name); /* update our model (this doesn't need to signal anything because * TpBaseContactList already did) */ g_hash_table_iter_init (&iter, self->priv->contact_details); while (g_hash_table_iter_next (&iter, NULL, &v)) { ExampleContactDetails *d = v; if (d->tags != NULL && g_hash_table_remove (d->tags, old_name)) g_hash_table_insert (d->tags, tag, tag); } tp_simple_async_report_success_in_idle ((GObject *) contact_list, callback, user_data, example_contact_list_rename_group_async); } static void example_contact_list_class_init (ExampleContactListClass *klass) { TpBaseContactListClass *contact_list_class = (TpBaseContactListClass *) klass; GObjectClass *object_class = (GObjectClass *) klass; object_class->constructed = constructed; object_class->dispose = dispose; object_class->get_property = get_property; object_class->set_property = set_property; g_object_class_install_property (object_class, PROP_SIMULATION_DELAY, g_param_spec_uint ("simulation-delay", "Simulation delay", "Delay between simulated network events", 0, G_MAXUINT32, 1000, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); contact_list_class->dup_contacts = example_contact_list_dup_contacts; contact_list_class->dup_states = example_contact_list_dup_states; /* for this example CM we pretend there is a server-stored contact list, * like in XMPP, even though there obviously isn't really */ contact_list_class->get_contact_list_persists = tp_base_contact_list_true_func; g_type_class_add_private (klass, sizeof (ExampleContactListPrivate)); signals[ALIAS_UPDATED] = g_signal_new ("alias-updated", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__UINT, G_TYPE_NONE, 1, G_TYPE_UINT); signals[PRESENCE_UPDATED] = g_signal_new ("presence-updated", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__UINT, G_TYPE_NONE, 1, G_TYPE_UINT); } static void mutable_contact_list_iface_init (TpMutableContactListInterface *iface) { iface->can_change_contact_list = tp_base_contact_list_true_func; iface->get_request_uses_message = tp_base_contact_list_true_func; iface->request_subscription_async = example_contact_list_request_subscription_async; iface->authorize_publication_async = example_contact_list_authorize_publication_async; iface->store_contacts_async = example_contact_list_store_contacts_async; iface->remove_contacts_async = example_contact_list_remove_contacts_async; iface->unsubscribe_async = example_contact_list_unsubscribe_async; iface->unpublish_async = example_contact_list_unpublish_async; } static void blockable_contact_list_iface_init (TpBlockableContactListInterface *iface) { iface->can_block = tp_base_contact_list_true_func; iface->dup_blocked_contacts = example_contact_list_dup_blocked_contacts; iface->block_contacts_async = example_contact_list_block_contacts_async; iface->unblock_contacts_async = example_contact_list_unblock_contacts_async; } static void contact_group_list_iface_init (TpContactGroupListInterface *iface) { iface->dup_groups = example_contact_list_dup_groups; iface->dup_group_members = example_contact_list_dup_group_members; iface->dup_contact_groups = example_contact_list_dup_contact_groups; iface->normalize_group = example_contact_list_normalize_group; } static void mutable_contact_group_list_iface_init ( TpMutableContactGroupListInterface *iface) { iface->set_group_members_async = example_contact_list_set_group_members_async; iface->add_to_group_async = example_contact_list_add_to_group_async; iface->remove_from_group_async = example_contact_list_remove_from_group_async; iface->remove_group_async = example_contact_list_remove_group_async; iface->rename_group_async = example_contact_list_rename_group_async; iface->set_contact_groups_async = example_contact_list_set_contact_groups_async; iface->get_group_storage = example_contact_list_get_group_storage; } telepathy-qt-0.9.3/tests/lib/glib/contactlist2/conn.h0000644000175200001440000000463412000056607024767 0ustar00collabora-develusers00000000000000/* * conn.h - header for an example connection * * Copyright © 2007-2009 Collabora Ltd. * Copyright © 2007-2009 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef __EXAMPLE_CONTACT_LIST_CONN_H__ #define __EXAMPLE_CONTACT_LIST_CONN_H__ #include #include #include #include G_BEGIN_DECLS typedef struct _ExampleContactListConnection ExampleContactListConnection; typedef struct _ExampleContactListConnectionClass ExampleContactListConnectionClass; typedef struct _ExampleContactListConnectionPrivate ExampleContactListConnectionPrivate; struct _ExampleContactListConnectionClass { TpBaseConnectionClass parent_class; TpPresenceMixinClass presence_mixin; TpContactsMixinClass contacts_mixin; }; struct _ExampleContactListConnection { TpBaseConnection parent; TpPresenceMixin presence_mixin; TpContactsMixin contacts_mixin; ExampleContactListConnectionPrivate *priv; }; GType example_contact_list_connection_get_type (void); #define EXAMPLE_TYPE_CONTACT_LIST_CONNECTION \ (example_contact_list_connection_get_type ()) #define EXAMPLE_CONTACT_LIST_CONNECTION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), EXAMPLE_TYPE_CONTACT_LIST_CONNECTION, \ ExampleContactListConnection)) #define EXAMPLE_CONTACT_LIST_CONNECTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), EXAMPLE_TYPE_CONTACT_LIST_CONNECTION, \ ExampleContactListConnectionClass)) #define EXAMPLE_IS_CONTACT_LIST_CONNECTION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), EXAMPLE_TYPE_CONTACT_LIST_CONNECTION)) #define EXAMPLE_IS_CONTACT_LIST_CONNECTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), EXAMPLE_TYPE_CONTACT_LIST_CONNECTION)) #define EXAMPLE_CONTACT_LIST_CONNECTION_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), EXAMPLE_TYPE_CONTACT_LIST_CONNECTION, \ ExampleContactListConnectionClass)) gchar *example_contact_list_normalize_contact (TpHandleRepoIface *repo, const gchar *id, gpointer context, GError **error); const gchar * const * example_contact_list_connection_get_possible_interfaces ( void); G_END_DECLS #endif telepathy-qt-0.9.3/tests/lib/glib/contactlist2/protocol.c0000644000175200001440000001152212000056607025660 0ustar00collabora-develusers00000000000000/* * protocol.c - an example Protocol * * Copyright © 2007-2010 Collabora Ltd. * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #include "protocol.h" #include #include "conn.h" #include "contact-list.h" G_DEFINE_TYPE (ExampleContactListProtocol, example_contact_list_protocol, TP_TYPE_BASE_PROTOCOL) static void example_contact_list_protocol_init ( ExampleContactListProtocol *self) { } gboolean example_contact_list_protocol_check_contact_id (const gchar *id, gchar **normal, GError **error) { g_return_val_if_fail (id != NULL, FALSE); if (id[0] == '\0') { g_set_error (error, TP_ERROR, TP_ERROR_INVALID_HANDLE, "ID must not be empty"); return FALSE; } if (normal != NULL) *normal = g_utf8_normalize (id, -1, G_NORMALIZE_ALL_COMPOSE); return TRUE; } static gboolean account_param_filter (const TpCMParamSpec *paramspec, GValue *value, GError **error) { const gchar *id = g_value_get_string (value); return example_contact_list_protocol_check_contact_id (id, NULL, error); } static const TpCMParamSpec example_contact_list_example_params[] = { { "account", "s", G_TYPE_STRING, TP_CONN_MGR_PARAM_FLAG_REQUIRED | TP_CONN_MGR_PARAM_FLAG_REGISTER, NULL, /* no default */ 0, /* unused, formerly struct offset */ account_param_filter, NULL, /* filter data, unused here */ NULL }, /* setter data, now unused */ { "simulation-delay", "u", G_TYPE_UINT, TP_CONN_MGR_PARAM_FLAG_HAS_DEFAULT, GUINT_TO_POINTER (1000), /* default */ 0, /* unused, formerly struct offset */ NULL, /* no filter */ NULL, /* filter data, unused here */ NULL }, /* setter data, now unused */ { NULL } }; static const TpCMParamSpec * get_parameters (TpBaseProtocol *self) { return example_contact_list_example_params; } static TpBaseConnection * new_connection (TpBaseProtocol *protocol, GHashTable *asv, GError **error) { ExampleContactListConnection *conn; const gchar *account; guint sim_delay; account = tp_asv_get_string (asv, "account"); /* telepathy-glib checked this for us */ g_assert (account != NULL); sim_delay = tp_asv_get_uint32 (asv, "simulation-delay", NULL); conn = EXAMPLE_CONTACT_LIST_CONNECTION ( g_object_new (EXAMPLE_TYPE_CONTACT_LIST_CONNECTION, "account", account, "protocol", tp_base_protocol_get_name (protocol), "simulation-delay", sim_delay, NULL)); return (TpBaseConnection *) conn; } static gchar * normalize_contact (TpBaseProtocol *self G_GNUC_UNUSED, const gchar *contact, GError **error) { gchar *normal; if (example_contact_list_protocol_check_contact_id (contact, &normal, error)) return normal; else return NULL; } static gchar * identify_account (TpBaseProtocol *self G_GNUC_UNUSED, GHashTable *asv, GError **error) { const gchar *account = tp_asv_get_string (asv, "account"); if (account != NULL) return normalize_contact (self, account, error); g_set_error (error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "'account' parameter not given"); return NULL; } static GStrv get_interfaces (TpBaseProtocol *self) { return NULL; } static void get_connection_details (TpBaseProtocol *self G_GNUC_UNUSED, GStrv *connection_interfaces, GType **channel_managers, gchar **icon_name, gchar **english_name, gchar **vcard_field) { if (connection_interfaces != NULL) { *connection_interfaces = g_strdupv ( (GStrv) example_contact_list_connection_get_possible_interfaces ()); } if (channel_managers != NULL) { GType types[] = { EXAMPLE_TYPE_CONTACT_LIST, G_TYPE_INVALID }; *channel_managers = g_memdup (types, sizeof (types)); } if (icon_name != NULL) *icon_name = g_strdup ("face-smile"); if (english_name != NULL) *english_name = g_strdup ("Example with a contact list"); if (vcard_field != NULL) *vcard_field = g_strdup ("x-telepathy-example"); } static void example_contact_list_protocol_class_init ( ExampleContactListProtocolClass *klass) { TpBaseProtocolClass *base_class = (TpBaseProtocolClass *) klass; base_class->get_parameters = get_parameters; base_class->new_connection = new_connection; base_class->normalize_contact = normalize_contact; base_class->identify_account = identify_account; base_class->get_interfaces = get_interfaces; base_class->get_connection_details = get_connection_details; } telepathy-qt-0.9.3/tests/lib/glib/contactlist2/protocol.h0000644000175200001440000000413512000056607025667 0ustar00collabora-develusers00000000000000/* * protocol.h - header for an example Protocol * Copyright © 2007-2010 Collabora Ltd. * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef EXAMPLE_CONTACT_LIST_PROTOCOL_H #define EXAMPLE_CONTACT_LIST_PROTOCOL_H #include #include G_BEGIN_DECLS typedef struct _ExampleContactListProtocol ExampleContactListProtocol; typedef struct _ExampleContactListProtocolPrivate ExampleContactListProtocolPrivate; typedef struct _ExampleContactListProtocolClass ExampleContactListProtocolClass; typedef struct _ExampleContactListProtocolClassPrivate ExampleContactListProtocolClassPrivate; struct _ExampleContactListProtocolClass { TpBaseProtocolClass parent_class; ExampleContactListProtocolClassPrivate *priv; }; struct _ExampleContactListProtocol { TpBaseProtocol parent; ExampleContactListProtocolPrivate *priv; }; GType example_contact_list_protocol_get_type (void); #define EXAMPLE_TYPE_CONTACT_LIST_PROTOCOL \ (example_contact_list_protocol_get_type ()) #define EXAMPLE_CONTACT_LIST_PROTOCOL(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ EXAMPLE_TYPE_CONTACT_LIST_PROTOCOL, \ ExampleContactListProtocol)) #define EXAMPLE_CONTACT_LIST_PROTOCOL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), \ EXAMPLE_TYPE_CONTACT_LIST_PROTOCOL, \ ExampleContactListProtocolClass)) #define EXAMPLE_IS_CONTACT_LIST_PROTOCOL(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ EXAMPLE_TYPE_CONTACT_LIST_PROTOCOL)) #define EXAMPLE_IS_CONTACT_LIST_PROTOCOL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), \ EXAMPLE_TYPE_CONTACT_LIST_PROTOCOL)) #define EXAMPLE_CONTACT_LIST_PROTOCOL_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), \ EXAMPLE_TYPE_CONTACT_LIST_PROTOCOL, \ ExampleContactListProtocolClass)) gboolean example_contact_list_protocol_check_contact_id (const gchar *id, gchar **normal, GError **error); G_END_DECLS #endif telepathy-qt-0.9.3/tests/lib/glib/stream-tube-chan.h0000644000175200001440000001254512000056607024560 0ustar00collabora-develusers00000000000000/* * stream-tube-chan.h - Simple stream tube channel * * Copyright (C) 2010 Collabora Ltd. * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #ifndef __TP_STREAM_TUBE_CHAN_H__ #define __TP_STREAM_TUBE_CHAN_H__ #include #include #include G_BEGIN_DECLS /* Base Class */ typedef struct _TpTestsStreamTubeChannel TpTestsStreamTubeChannel; typedef struct _TpTestsStreamTubeChannelClass TpTestsStreamTubeChannelClass; typedef struct _TpTestsStreamTubeChannelPrivate TpTestsStreamTubeChannelPrivate; GType tp_tests_stream_tube_channel_get_type (void); #define TP_TESTS_TYPE_STREAM_TUBE_CHANNEL \ (tp_tests_stream_tube_channel_get_type ()) #define TP_TESTS_STREAM_TUBE_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), TP_TESTS_TYPE_STREAM_TUBE_CHANNEL, \ TpTestsStreamTubeChannel)) #define TP_TESTS_STREAM_TUBE_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), TP_TESTS_TYPE_STREAM_TUBE_CHANNEL, \ TpTestsStreamTubeChannelClass)) #define TP_TESTS_IS_STREAM_TUBE_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TP_TESTS_TYPE_STREAM_TUBE_CHANNEL)) #define TP_TESTS_IS_STREAM_TUBE_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), TP_TESTS_TYPE_STREAM_TUBE_CHANNEL)) #define TP_TESTS_STREAM_TUBE_CHANNEL_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_STREAM_TUBE_CHANNEL, \ TpTestsStreamTubeChannelClass)) struct _TpTestsStreamTubeChannelClass { TpBaseChannelClass parent_class; TpDBusPropertiesMixinClass dbus_properties_class; }; struct _TpTestsStreamTubeChannel { TpBaseChannel parent; TpTestsStreamTubeChannelPrivate *priv; }; GSocketAddress * tp_tests_stream_tube_channel_get_server_address ( TpTestsStreamTubeChannel *self); void tp_tests_stream_tube_channel_peer_connected ( TpTestsStreamTubeChannel *self, GIOStream *stream, TpHandle handle); void tp_tests_stream_tube_channel_peer_connected_no_stream (TpTestsStreamTubeChannel *self, const GValue *connection_param, TpHandle handle); void tp_tests_stream_tube_channel_last_connection_disconnected ( TpTestsStreamTubeChannel *self, const gchar *error); void tp_tests_stream_tube_channel_set_close_on_accept ( TpTestsStreamTubeChannel *self, gboolean close_on_accept); /* Contact Stream Tube */ typedef struct _TpTestsContactStreamTubeChannel TpTestsContactStreamTubeChannel; typedef struct _TpTestsContactStreamTubeChannelClass TpTestsContactStreamTubeChannelClass; GType tp_tests_contact_stream_tube_channel_get_type (void); #define TP_TESTS_TYPE_CONTACT_STREAM_TUBE_CHANNEL \ (tp_tests_contact_stream_tube_channel_get_type ()) #define TP_TESTS_CONTACT_STREAM_TUBE_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), TP_TESTS_TYPE_CONTACT_STREAM_TUBE_CHANNEL, \ TpTestsContactStreamTubeChannel)) #define TP_TESTS_CONTACT_STREAM_TUBE_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), TP_TESTS_TYPE_CONTACT_STREAM_TUBE_CHANNEL, \ TpTestsContactStreamTubeChannelClass)) #define TP_TESTS_IS_CONTACT_STREAM_TUBE_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TP_TESTS_TYPE_CONTACT_STREAM_TUBE_CHANNEL)) #define TP_TESTS_IS_CONTACT_STREAM_TUBE_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), TP_TESTS_TYPE_CONTACT_STREAM_TUBE_CHANNEL)) #define TP_TESTS_CONTACT_STREAM_TUBE_CHANNEL_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_CONTACT_STREAM_TUBE_CHANNEL, \ TpTestsContactStreamTubeChannelClass)) struct _TpTestsContactStreamTubeChannelClass { TpTestsStreamTubeChannelClass parent_class; }; struct _TpTestsContactStreamTubeChannel { TpTestsStreamTubeChannel parent; }; /* Room Stream Tube */ typedef struct _TpTestsRoomStreamTubeChannel TpTestsRoomStreamTubeChannel; typedef struct _TpTestsRoomStreamTubeChannelClass TpTestsRoomStreamTubeChannelClass; GType tp_tests_room_stream_tube_channel_get_type (void); #define TP_TESTS_TYPE_ROOM_STREAM_TUBE_CHANNEL \ (tp_tests_room_stream_tube_channel_get_type ()) #define TP_TESTS_ROOM_STREAM_TUBE_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_CAST ((obj), TP_TESTS_TYPE_ROOM_STREAM_TUBE_CHANNEL, \ TpTestsRoomStreamTubeChannel)) #define TP_TESTS_ROOM_STREAM_TUBE_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST ((klass), TP_TESTS_TYPE_ROOM_STREAM_TUBE_CHANNEL, \ TpTestsRoomStreamTubeChannelClass)) #define TP_TESTS_IS_ROOM_STREAM_TUBE_CHANNEL(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TP_TESTS_TYPE_ROOM_STREAM_TUBE_CHANNEL)) #define TP_TESTS_IS_ROOM_STREAM_TUBE_CHANNEL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE ((klass), TP_TESTS_TYPE_ROOM_STREAM_TUBE_CHANNEL)) #define TP_TESTS_ROOM_STREAM_TUBE_CHANNEL_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS ((obj), TP_TESTS_TYPE_ROOM_STREAM_TUBE_CHANNEL, \ TpTestsRoomStreamTubeChannelClass)) struct _TpTestsRoomStreamTubeChannelClass { TpTestsStreamTubeChannelClass parent_class; }; struct _TpTestsRoomStreamTubeChannel { TpTestsStreamTubeChannel parent; }; G_END_DECLS #endif /* #ifndef __TP_STREAM_TUBE_CHAN_H__ */ telepathy-qt-0.9.3/tests/lib/glib/captcha-chan.c0000644000175200001440000004171312000056607023725 0ustar00collabora-develusers00000000000000/* * captcha-chan.c - Simple captcha channel * * Copyright (C) 2012 Collabora Ltd. * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #include "captcha-chan.h" #include #include #include #include enum { PROP_METHOD = 1, PROP_RETRY, PROP_STATUS, PROP_ERROR, PROP_ERROR_DETAILS }; struct _TpTestsCaptchaChannelPrivate { TpCaptchaStatus status; TpSocketAccessControl access_control; GHashTable *parameters; gchar *error_string; GHashTable *error_details; gboolean can_retry; gboolean is_retrying; }; static void tp_tests_captcha_channel_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { TpTestsCaptchaChannel *self = (TpTestsCaptchaChannel *) object; switch (property_id) { case PROP_METHOD: g_value_set_string (value, TP_IFACE_CHANNEL_INTERFACE_CAPTCHA_AUTHENTICATION); break; case PROP_RETRY: g_value_set_boolean (value, self->priv->can_retry); break; case PROP_STATUS: g_value_set_uint (value, self->priv->status); break; case PROP_ERROR: g_value_set_string (value, self->priv->error_string); break; case PROP_ERROR_DETAILS: g_value_set_boxed (value, self->priv->error_details); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void tp_tests_captcha_channel_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { TpTestsCaptchaChannel *self = (TpTestsCaptchaChannel *) object; switch (property_id) { case PROP_RETRY: self->priv->can_retry = g_value_get_boolean(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void captcha_iface_init (gpointer iface, gpointer data); G_DEFINE_TYPE_WITH_CODE (TpTestsCaptchaChannel, tp_tests_captcha_channel, TP_TYPE_BASE_CHANNEL, G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_TYPE_SERVER_AUTHENTICATION, NULL); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_INTERFACE_CAPTCHA_AUTHENTICATION, captcha_iface_init); ) /* type definition stuff */ static const char * tp_tests_captcha_channel_interfaces[] = { TP_IFACE_CHANNEL_INTERFACE_CAPTCHA_AUTHENTICATION, NULL }; static void tp_tests_captcha_channel_init (TpTestsCaptchaChannel *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE ((self), TP_TESTS_TYPE_CAPTCHA_CHANNEL, TpTestsCaptchaChannelPrivate); } static GObject * constructor (GType type, guint n_props, GObjectConstructParam *props) { GObject *object = G_OBJECT_CLASS (tp_tests_captcha_channel_parent_class)->constructor ( type, n_props, props); TpTestsCaptchaChannel *self = TP_TESTS_CAPTCHA_CHANNEL (object); self->priv->status = TP_CAPTCHA_STATUS_LOCAL_PENDING; self->priv->is_retrying = FALSE; self->priv->error_string = NULL; self->priv->error_details = tp_asv_new (NULL, NULL); tp_base_channel_register (TP_BASE_CHANNEL (self)); return object; } static void dispose (GObject *object) { // TpTestsCaptchaChannel *self = (TpTestsCaptchaChannel *) object; // Free memory here if needed ((GObjectClass *) tp_tests_captcha_channel_parent_class)->dispose ( object); } static void channel_close (TpBaseChannel *channel) { tp_base_channel_destroyed (channel); } static void fill_immutable_properties (TpBaseChannel *chan, GHashTable *properties) { TpBaseChannelClass *klass = TP_BASE_CHANNEL_CLASS ( tp_tests_captcha_channel_parent_class); tp_dbus_properties_mixin_fill_properties_hash ( G_OBJECT (chan), properties, TP_IFACE_CHANNEL_TYPE_SERVER_AUTHENTICATION, "AuthenticationMethod", TP_IFACE_CHANNEL_INTERFACE_CAPTCHA_AUTHENTICATION, "CanRetryCaptcha", NULL); klass->fill_immutable_properties (chan, properties); } static void tp_tests_captcha_channel_class_init (TpTestsCaptchaChannelClass *klass) { GObjectClass *object_class = (GObjectClass *) klass; TpBaseChannelClass *base_class = TP_BASE_CHANNEL_CLASS (klass); GParamSpec *param_spec; static TpDBusPropertiesMixinPropImpl server_authentication_props[] = { { "AuthenticationMethod", "authentication-method", NULL }, { NULL, NULL, NULL } }; static TpDBusPropertiesMixinPropImpl captcha_authentication_props[] = { { "CanRetryCaptcha", "can-retry-captcha", NULL }, { "CaptchaStatus", "captcha-status", NULL }, { "CaptchaError", "captcha-error", NULL }, { "CaptchaErrorDetails", "captcha-error-details", NULL }, { NULL } }; object_class->constructor = constructor; object_class->get_property = tp_tests_captcha_channel_get_property; object_class->set_property = tp_tests_captcha_channel_set_property; object_class->dispose = dispose; base_class->channel_type = TP_IFACE_CHANNEL_TYPE_SERVER_AUTHENTICATION; base_class->target_handle_type = TP_HANDLE_TYPE_NONE; base_class->interfaces = tp_tests_captcha_channel_interfaces; base_class->close = channel_close; base_class->fill_immutable_properties = fill_immutable_properties; param_spec = g_param_spec_string ("authentication-method", "AuthenticationMethod", "the authentication method for this channel", "", G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_METHOD, param_spec); param_spec = g_param_spec_boolean ( "can-retry-captcha", "CanRetryCaptcha", "Whether Captcha can be retried or not.", FALSE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_RETRY, param_spec); param_spec = g_param_spec_string ( "captcha-error", "CaptchaError", "error details of the captcha", "", G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_ERROR, param_spec); param_spec = g_param_spec_boxed ( "captcha-error-details", "CaptchaErrorDetails", "error details of the captcha", TP_HASH_TYPE_STRING_VARIANT_MAP, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_ERROR_DETAILS, param_spec); param_spec = g_param_spec_uint ( "captcha-status", "CaptchaStatus", "state of the captcha", 0, NUM_TP_CAPTCHA_STATUSES - 1, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_STATUS, param_spec); tp_dbus_properties_mixin_implement_interface (object_class, TP_IFACE_QUARK_CHANNEL_TYPE_SERVER_AUTHENTICATION, tp_dbus_properties_mixin_getter_gobject_properties, NULL, server_authentication_props); tp_dbus_properties_mixin_implement_interface (object_class, TP_IFACE_QUARK_CHANNEL_INTERFACE_CAPTCHA_AUTHENTICATION, tp_dbus_properties_mixin_getter_gobject_properties, NULL, captcha_authentication_props); g_type_class_add_private (object_class, sizeof (TpTestsCaptchaChannelPrivate)); } static void set_status (TpTestsCaptchaChannel *self, guint status, const gchar *error, GHashTable *error_details) { GPtrArray *changed = g_ptr_array_new (); GHashTable *realerrors = error_details == NULL ? tp_asv_new (NULL, NULL) : error_details; if (self->priv->status != status) { self->priv->status = status; g_ptr_array_add (changed, (gpointer) "CaptchaStatus"); } if (self->priv->error_string != error) { g_free (self->priv->error_string); self->priv->error_string = g_strdup (error); g_ptr_array_add (changed, (gpointer) "CaptchaError"); } if (self->priv->error_details != realerrors) { if (self->priv->error_details != NULL) g_hash_table_unref (self->priv->error_details); self->priv->error_details = realerrors; if (self->priv->error_details != NULL) g_hash_table_ref (self->priv->error_details); g_ptr_array_add (changed, (gpointer) "CaptchaErrorDetails"); } if (changed->len > 0) { g_ptr_array_add (changed, NULL); tp_dbus_properties_mixin_emit_properties_changed (G_OBJECT (self), TP_IFACE_CHANNEL_INTERFACE_CAPTCHA_AUTHENTICATION, (const gchar * const *) changed->pdata); } g_ptr_array_unref (changed); } static void captcha_auth_answer_captchas (TpSvcChannelInterfaceCaptchaAuthentication *iface, GHashTable *answers, DBusGMethodInvocation *context) { TpTestsCaptchaChannel *self = (TpTestsCaptchaChannel *) iface; const gchar *answer; GError *error; if (self->priv->status != TP_CAPTCHA_STATUS_LOCAL_PENDING) { error = g_error_new (TP_ERROR, TP_ERROR_NOT_AVAILABLE, "Captcha status is in state %u", self->priv->status); dbus_g_method_return_error (context, error); g_error_free (error); return; } set_status(self, TP_CAPTCHA_STATUS_REMOTE_PENDING, NULL, NULL); answer = (const gchar *) g_hash_table_lookup (answers, GUINT_TO_POINTER (42)); if (answer == NULL) { error = g_error_new (TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "Missing required challenge ID (%u)", 42); dbus_g_method_return_error (context, error); g_error_free (error); return; } if (tp_str_empty (answer)) { error = g_error_new_literal (TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "Empty answer"); dbus_g_method_return_error (context, error); g_error_free (error); return; } if (tp_strdiff (answer, "This is the right answer")) { if (self->priv->can_retry) { set_status(self, TP_CAPTCHA_STATUS_TRY_AGAIN, NULL, NULL); } else { set_status(self, TP_CAPTCHA_STATUS_FAILED, NULL, NULL); } error = g_error_new_literal (TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "Wrong answer"); dbus_g_method_return_error (context, error); g_error_free (error); return; } else { set_status(self, TP_CAPTCHA_STATUS_SUCCEEDED, NULL, NULL); } tp_svc_channel_interface_captcha_authentication_return_from_answer_captchas (context); } static void captcha_auth_get_captchas (TpSvcChannelInterfaceCaptchaAuthentication *iface, DBusGMethodInvocation *context) { TpTestsCaptchaChannel *self = (TpTestsCaptchaChannel *) iface; GPtrArray *infos; GValueArray *info; static const gchar *mime_types_1[] = { "image/png", NULL }; static const gchar *mime_types_2[] = { "lol/wut", NULL }; static const gchar *no_mime_types[] = { NULL }; if (self->priv->status != TP_CAPTCHA_STATUS_LOCAL_PENDING && self->priv->status != TP_CAPTCHA_STATUS_TRY_AGAIN) { GError *error = g_error_new (TP_ERROR, TP_ERROR_NOT_AVAILABLE, "Captcha status is in state %u", self->priv->status); dbus_g_method_return_error (context, error); g_error_free (error); return; } /* Yes, g_ptr_array_new_full() could be used here, but use * these functions instead to support older GLibs */ infos = g_ptr_array_sized_new (5); g_ptr_array_set_free_func (infos, (GDestroyNotify) g_value_array_free); info = tp_value_array_build (5, G_TYPE_UINT, 42, G_TYPE_STRING, "ocr", G_TYPE_STRING, "Enter the text displayed", G_TYPE_UINT, 0, G_TYPE_STRV, mime_types_1, G_TYPE_INVALID); g_ptr_array_add (infos, info); info = tp_value_array_build (5, G_TYPE_UINT, 76, G_TYPE_STRING, "picture_q", G_TYPE_STRING, "What in this picture?", G_TYPE_UINT, 0, G_TYPE_STRV, mime_types_2, G_TYPE_INVALID); g_ptr_array_add (infos, info); info = tp_value_array_build (5, G_TYPE_UINT, 15, G_TYPE_STRING, "qa", G_TYPE_STRING, "What is the answer?", G_TYPE_UINT, 0, G_TYPE_STRV, no_mime_types, G_TYPE_INVALID); g_ptr_array_add (infos, info); info = tp_value_array_build (5, G_TYPE_UINT, 51, G_TYPE_STRING, "video_q", G_TYPE_STRING, "Totallyfake", G_TYPE_UINT, 0, G_TYPE_STRV, no_mime_types, G_TYPE_INVALID); g_ptr_array_add (infos, info); info = tp_value_array_build (5, G_TYPE_UINT, 17, G_TYPE_STRING, "video_recog", G_TYPE_STRING, "Totallyfakeurgonnadie", G_TYPE_UINT, 0, G_TYPE_STRV, mime_types_2, G_TYPE_INVALID); g_ptr_array_add (infos, info); if (self->priv->status == TP_CAPTCHA_STATUS_TRY_AGAIN) { /* Handler started trying again, change status back */ set_status (self, TP_CAPTCHA_STATUS_LOCAL_PENDING, NULL, NULL); self->priv->is_retrying = TRUE; } tp_svc_channel_interface_captcha_authentication_return_from_get_captchas (context, infos, 1, ""); g_ptr_array_unref (infos); } static void captcha_auth_get_captcha_data (TpSvcChannelInterfaceCaptchaAuthentication *iface, guint id, const gchar *mime_type, DBusGMethodInvocation *context) { TpTestsCaptchaChannel *self = (TpTestsCaptchaChannel *) iface; GArray *captcha; if (self->priv->status != TP_CAPTCHA_STATUS_LOCAL_PENDING) { GError *error = g_error_new (TP_ERROR, TP_ERROR_NOT_AVAILABLE, "Captcha status is in state %u", self->priv->status); dbus_g_method_return_error (context, error); g_error_free (error); return; } if (id != 42 && id != 76) { GError *error = g_error_new (TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "Invalid captcha ID (%u).", id); dbus_g_method_return_error (context, error); g_error_free (error); return; } if (tp_strdiff (mime_type, "image/png") && tp_strdiff (mime_type, "lol/wut")) { GError *error = g_error_new (TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "MIME type '%s' was not in the list provided. ", mime_type); dbus_g_method_return_error (context, error); g_error_free (error); return; } captcha = g_array_new (TRUE, FALSE, sizeof (guchar)); if (self->priv->is_retrying) { g_array_append_vals (captcha, "This is a reloaded payload", 26); } else { g_array_append_vals (captcha, "This is a fake payload", 22); } tp_svc_channel_interface_captcha_authentication_return_from_get_captcha_data (context, captcha); g_array_unref (captcha); } static void captcha_auth_cancel_captcha (TpSvcChannelInterfaceCaptchaAuthentication *iface, guint reason, const gchar *debug_message, DBusGMethodInvocation *context) { TpTestsCaptchaChannel *self = (TpTestsCaptchaChannel *) iface; const gchar *error = NULL; GError *gerror = NULL; GHashTable *error_details = NULL; if (self->priv->status == TP_CAPTCHA_STATUS_FAILED) { gerror = g_error_new_literal (TP_ERROR, TP_ERROR_NOT_AVAILABLE, "Captcha status is already Failed"); dbus_g_method_return_error (context, gerror); g_error_free (gerror); return; } switch (reason) { case TP_CAPTCHA_CANCEL_REASON_USER_CANCELLED: error = TP_ERROR_STR_CANCELLED; break; case TP_CAPTCHA_CANCEL_REASON_NOT_SUPPORTED: error = TP_ERROR_STR_CAPTCHA_NOT_SUPPORTED; break; case TP_CAPTCHA_CANCEL_REASON_SERVICE_CONFUSED: error = TP_ERROR_STR_SERVICE_CONFUSED; break; default: g_warning ("Unknown cancel reason"); } error_details = tp_asv_new ( "debug-message", G_TYPE_STRING, debug_message, NULL); set_status (self, TP_CAPTCHA_STATUS_FAILED, error, error_details); g_hash_table_unref (error_details); tp_svc_channel_interface_captcha_authentication_return_from_cancel_captcha (context); } static void captcha_iface_init (gpointer g_iface, gpointer data G_GNUC_UNUSED) { TpSvcChannelInterfaceCaptchaAuthenticationClass *iface = (TpSvcChannelInterfaceCaptchaAuthenticationClass *) g_iface; #define IMPLEMENT(x) \ tp_svc_channel_interface_captcha_authentication_implement_##x (iface, \ captcha_auth_##x) IMPLEMENT(answer_captchas); IMPLEMENT(get_captchas); IMPLEMENT(get_captcha_data); IMPLEMENT(cancel_captcha); #undef IMPLEMENT } telepathy-qt-0.9.3/tests/lib/glib/simple-conn.c0000644000175200001440000003131512000056607023634 0ustar00collabora-develusers00000000000000/* * simple-conn.c - a simple connection * * Copyright (C) 2007-2010 Collabora Ltd. * Copyright (C) 2007-2008 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #include "simple-conn.h" #include #include #include #include #include #include #include #include #include "textchan-null.h" #include "util.h" static void conn_iface_init (TpSvcConnectionClass *); G_DEFINE_TYPE_WITH_CODE (TpTestsSimpleConnection, tp_tests_simple_connection, TP_TYPE_BASE_CONNECTION, G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION, conn_iface_init)) /* type definition stuff */ enum { PROP_ACCOUNT = 1, PROP_BREAK_PROPS = 2, PROP_DBUS_STATUS = 3, N_PROPS }; enum { SIGNAL_GOT_SELF_HANDLE, N_SIGNALS }; static guint signals[N_SIGNALS] = {0}; struct _TpTestsSimpleConnectionPrivate { gchar *account; guint connect_source; guint disconnect_source; gboolean break_fastpath_props; /* TpHandle => reffed TpTestsTextChannelNull */ GHashTable *channels; GError *get_self_handle_error /* initially NULL */ ; }; static void tp_tests_simple_connection_init (TpTestsSimpleConnection *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, TP_TESTS_TYPE_SIMPLE_CONNECTION, TpTestsSimpleConnectionPrivate); self->priv->channels = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify) g_object_unref); } static void get_property (GObject *object, guint property_id, GValue *value, GParamSpec *spec) { TpTestsSimpleConnection *self = TP_TESTS_SIMPLE_CONNECTION (object); switch (property_id) { case PROP_ACCOUNT: g_value_set_string (value, self->priv->account); break; case PROP_BREAK_PROPS: g_value_set_boolean (value, self->priv->break_fastpath_props); break; case PROP_DBUS_STATUS: if (self->priv->break_fastpath_props) { g_debug ("returning broken value for Connection.Status"); g_value_set_uint (value, 0xdeadbeefU); } else { guint32 status = TP_BASE_CONNECTION (self)->status; if (status == TP_INTERNAL_CONNECTION_STATUS_NEW) g_value_set_uint (value, TP_CONNECTION_STATUS_DISCONNECTED); else g_value_set_uint (value, status); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, spec); } } static void set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *spec) { TpTestsSimpleConnection *self = TP_TESTS_SIMPLE_CONNECTION (object); switch (property_id) { case PROP_ACCOUNT: g_free (self->priv->account); self->priv->account = g_utf8_strdown (g_value_get_string (value), -1); break; case PROP_BREAK_PROPS: self->priv->break_fastpath_props = g_value_get_boolean (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, spec); } } static void dispose (GObject *object) { TpTestsSimpleConnection *self = TP_TESTS_SIMPLE_CONNECTION (object); g_hash_table_unref (self->priv->channels); G_OBJECT_CLASS (tp_tests_simple_connection_parent_class)->dispose (object); } static void finalize (GObject *object) { TpTestsSimpleConnection *self = TP_TESTS_SIMPLE_CONNECTION (object); if (self->priv->connect_source != 0) { g_source_remove (self->priv->connect_source); } if (self->priv->disconnect_source != 0) { g_source_remove (self->priv->disconnect_source); } g_clear_error (&self->priv->get_self_handle_error); g_free (self->priv->account); G_OBJECT_CLASS (tp_tests_simple_connection_parent_class)->finalize (object); } static gchar * get_unique_connection_name (TpBaseConnection *conn) { TpTestsSimpleConnection *self = TP_TESTS_SIMPLE_CONNECTION (conn); return g_strdup (self->priv->account); } static gchar * tp_tests_simple_normalize_contact (TpHandleRepoIface *repo, const gchar *id, gpointer context, GError **error) { if (id[0] == '\0') { g_set_error (error, TP_ERROR, TP_ERROR_INVALID_HANDLE, "ID must not be empty"); return NULL; } if (strchr (id, ' ') != NULL) { g_set_error (error, TP_ERROR, TP_ERROR_INVALID_HANDLE, "ID must not contain spaces"); return NULL; } return g_utf8_strdown (id, -1); } static void create_handle_repos (TpBaseConnection *conn, TpHandleRepoIface *repos[NUM_TP_HANDLE_TYPES]) { repos[TP_HANDLE_TYPE_CONTACT] = tp_dynamic_handle_repo_new (TP_HANDLE_TYPE_CONTACT, tp_tests_simple_normalize_contact, NULL); repos[TP_HANDLE_TYPE_ROOM] = tp_dynamic_handle_repo_new (TP_HANDLE_TYPE_ROOM, NULL, NULL); } static GPtrArray * create_channel_factories (TpBaseConnection *conn) { return g_ptr_array_sized_new (0); } void tp_tests_simple_connection_inject_disconnect (TpTestsSimpleConnection *self) { tp_base_connection_change_status ((TpBaseConnection *) self, TP_CONNECTION_STATUS_DISCONNECTED, TP_CONNECTION_STATUS_REASON_REQUESTED); } static gboolean pretend_connected (gpointer data) { TpTestsSimpleConnection *self = TP_TESTS_SIMPLE_CONNECTION (data); TpBaseConnection *conn = (TpBaseConnection *) self; TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (conn, TP_HANDLE_TYPE_CONTACT); conn->self_handle = tp_handle_ensure (contact_repo, self->priv->account, NULL, NULL); if (conn->status == TP_CONNECTION_STATUS_CONNECTING) { tp_base_connection_change_status (conn, TP_CONNECTION_STATUS_CONNECTED, TP_CONNECTION_STATUS_REASON_REQUESTED); } self->priv->connect_source = 0; return FALSE; } static gboolean start_connecting (TpBaseConnection *conn, GError **error) { TpTestsSimpleConnection *self = TP_TESTS_SIMPLE_CONNECTION (conn); tp_base_connection_change_status (conn, TP_CONNECTION_STATUS_CONNECTING, TP_CONNECTION_STATUS_REASON_REQUESTED); /* In a real connection manager we'd ask the underlying implementation to * start connecting, then go to state CONNECTED when finished. Here there * isn't actually a connection, so we'll fake a connection process that * takes time. */ self->priv->connect_source = g_timeout_add (0, pretend_connected, self); return TRUE; } static gboolean pretend_disconnected (gpointer data) { TpTestsSimpleConnection *self = TP_TESTS_SIMPLE_CONNECTION (data); /* We are disconnected, all our channels are invalidated */ g_hash_table_remove_all (self->priv->channels); tp_base_connection_finish_shutdown (TP_BASE_CONNECTION (data)); self->priv->disconnect_source = 0; return FALSE; } static void shut_down (TpBaseConnection *conn) { TpTestsSimpleConnection *self = TP_TESTS_SIMPLE_CONNECTION (conn); /* In a real connection manager we'd ask the underlying implementation to * start shutting down, then call this function when finished. Here there * isn't actually a connection, so we'll fake a disconnection process that * takes time. */ self->priv->disconnect_source = g_timeout_add (0, pretend_disconnected, conn); } static void tp_tests_simple_connection_class_init (TpTestsSimpleConnectionClass *klass) { TpBaseConnectionClass *base_class = (TpBaseConnectionClass *) klass; GObjectClass *object_class = (GObjectClass *) klass; GParamSpec *param_spec; static const gchar *interfaces_always_present[] = { TP_IFACE_CONNECTION_INTERFACE_REQUESTS, NULL }; object_class->get_property = get_property; object_class->set_property = set_property; object_class->dispose = dispose; object_class->finalize = finalize; g_type_class_add_private (klass, sizeof (TpTestsSimpleConnectionPrivate)); base_class->create_handle_repos = create_handle_repos; base_class->get_unique_connection_name = get_unique_connection_name; base_class->create_channel_factories = create_channel_factories; base_class->start_connecting = start_connecting; base_class->shut_down = shut_down; base_class->interfaces_always_present = interfaces_always_present; param_spec = g_param_spec_string ("account", "Account name", "The username of this user", NULL, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_BLURB); g_object_class_install_property (object_class, PROP_ACCOUNT, param_spec); param_spec = g_param_spec_boolean ("break-0192-properties", "Break 0.19.2 properties", "Break Connection D-Bus properties introduced in spec 0.19.2", FALSE, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_BLURB); g_object_class_install_property (object_class, PROP_BREAK_PROPS, param_spec); param_spec = g_param_spec_uint ("dbus-status", "Connection.Status", "The connection status as visible on D-Bus (overridden so can break it)", TP_CONNECTION_STATUS_CONNECTED, G_MAXUINT, TP_CONNECTION_STATUS_DISCONNECTED, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_DBUS_STATUS, param_spec); signals[SIGNAL_GOT_SELF_HANDLE] = g_signal_new ("got-self-handle", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } void tp_tests_simple_connection_set_identifier (TpTestsSimpleConnection *self, const gchar *identifier) { TpBaseConnection *conn = (TpBaseConnection *) self; TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (conn, TP_HANDLE_TYPE_CONTACT); TpHandle handle = tp_handle_ensure (contact_repo, identifier, NULL, NULL); /* if this fails then the identifier was bad - caller error */ g_return_if_fail (handle != 0); tp_base_connection_set_self_handle (conn, handle); } TpTestsSimpleConnection * tp_tests_simple_connection_new (const gchar *account, const gchar *protocol) { return TP_TESTS_SIMPLE_CONNECTION (g_object_new ( TP_TESTS_TYPE_SIMPLE_CONNECTION, "account", account, "protocol", protocol, NULL)); } gchar * tp_tests_simple_connection_ensure_text_chan (TpTestsSimpleConnection *self, const gchar *target_id, GHashTable **props) { TpTestsTextChannelNull *chan; gchar *chan_path; TpHandleRepoIface *contact_repo; TpHandle handle; static guint count = 0; TpBaseConnection *base_conn = (TpBaseConnection *) self; /* Get contact handle */ contact_repo = tp_base_connection_get_handles (base_conn, TP_HANDLE_TYPE_CONTACT); g_assert (contact_repo != NULL); handle = tp_handle_ensure (contact_repo, target_id, NULL, NULL); chan = g_hash_table_lookup (self->priv->channels, GUINT_TO_POINTER (handle)); if (chan != NULL) { /* Channel already exist, reuse it */ g_object_get (chan, "object-path", &chan_path, NULL); } else { chan_path = g_strdup_printf ("%s/Channel%u", base_conn->object_path, count++); chan = TP_TESTS_TEXT_CHANNEL_NULL ( tp_tests_object_new_static_class ( TP_TESTS_TYPE_TEXT_CHANNEL_NULL, "connection", self, "object-path", chan_path, "handle", handle, NULL)); g_hash_table_insert (self->priv->channels, GUINT_TO_POINTER (handle), chan); } if (props != NULL) *props = tp_tests_text_channel_get_props (chan); return chan_path; } void tp_tests_simple_connection_set_get_self_handle_error ( TpTestsSimpleConnection *self, GQuark domain, gint code, const gchar *message) { self->priv->get_self_handle_error = g_error_new_literal (domain, code, message); } static void get_self_handle (TpSvcConnection *iface, DBusGMethodInvocation *context) { TpTestsSimpleConnection *self = TP_TESTS_SIMPLE_CONNECTION (iface); TpBaseConnection *base = TP_BASE_CONNECTION (iface); g_assert (TP_IS_BASE_CONNECTION (base)); TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context); if (self->priv->get_self_handle_error != NULL) { dbus_g_method_return_error (context, self->priv->get_self_handle_error); return; } tp_svc_connection_return_from_get_self_handle (context, base->self_handle); g_signal_emit (self, signals[SIGNAL_GOT_SELF_HANDLE], 0); } static void conn_iface_init (TpSvcConnectionClass *iface) { #define IMPLEMENT(prefix,x) \ tp_svc_connection_implement_##x (iface, prefix##x) IMPLEMENT(,get_self_handle); #undef IMPLEMENT } telepathy-qt-0.9.3/tests/lib/glib/contact-search-chan.c0000644000175200001440000005331312000056607025217 0ustar00collabora-develusers00000000000000/* * contact-search-channel.c - an tp_tests contact search channel * * Copyright © 2010 Collabora Ltd. * Copyright © 2010 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 */ #include "contact-search-chan.h" #include #include #include #include #include #include #include #include static void contact_search_iface_init (gpointer iface, gpointer data); static void channel_iface_init (gpointer iface, gpointer data); G_DEFINE_TYPE_WITH_CODE (TpTestsContactSearchChannel, tp_tests_contact_search_channel, G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_DBUS_PROPERTIES, tp_dbus_properties_mixin_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL, channel_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_TYPE_CONTACT_SEARCH, contact_search_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CHANNEL_INTERFACE_GROUP, tp_group_mixin_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_CHANNEL_IFACE, NULL); G_IMPLEMENT_INTERFACE (TP_TYPE_EXPORTABLE_CHANNEL, NULL)) enum { PROP_OBJECT_PATH = 1, PROP_CHANNEL_TYPE, PROP_HANDLE_TYPE, PROP_HANDLE, PROP_TARGET_ID, PROP_REQUESTED, PROP_INITIATOR_HANDLE, PROP_INITIATOR_ID, PROP_CONNECTION, PROP_INTERFACES, PROP_CHANNEL_DESTROYED, PROP_CHANNEL_PROPERTIES, PROP_CONTACT_SEARCH_STATE, PROP_CONTACT_SEARCH_LIMIT, PROP_CONTACT_SEARCH_AVAILABLE_SEARCH_KEYS, PROP_CONTACT_SEARCH_SERVER, N_PROPS }; typedef struct { gchar *id; gchar *employer; GPtrArray *contact_info; } TpTestsContactSearchContact; struct _TpTestsContactSearchChannelPrivate { TpBaseConnection *conn; gchar *object_path; guint contact_search_state; guint contact_search_limit; gchar **contact_search_available_search_keys; gchar *contact_search_server; GSList *contact_search_contacts; gboolean disposed; gboolean closed; }; static const gchar * tp_tests_contact_search_channel_interfaces[] = { TP_IFACE_CHANNEL_INTERFACE_GROUP, NULL }; static void tp_tests_contact_search_channel_init (TpTestsContactSearchChannel *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, TP_TESTS_TYPE_CONTACT_SEARCH_CHANNEL, TpTestsContactSearchChannelPrivate); } static TpTestsContactSearchContact * new_contact (const gchar *id, const gchar *employer, const gchar *fn) { TpTestsContactSearchContact *contact = g_new (TpTestsContactSearchContact, 1); GPtrArray *contact_info = dbus_g_type_specialized_construct ( TP_ARRAY_TYPE_CONTACT_INFO_FIELD_LIST); const gchar * const field_values[2] = { fn, NULL }; contact->id = g_strdup (id); contact->employer = g_strdup (employer); g_ptr_array_add (contact_info, tp_value_array_build (3, G_TYPE_STRING, "fn", G_TYPE_STRV, NULL, G_TYPE_STRV, field_values, G_TYPE_INVALID)); contact->contact_info = contact_info; return contact; } static void free_contact (TpTestsContactSearchContact *contact) { g_free (contact->id); g_free (contact->employer); g_boxed_free (TP_ARRAY_TYPE_CONTACT_INFO_FIELD_LIST, contact->contact_info); g_free (contact); } static void constructed (GObject *object) { void (*chain_up) (GObject *) = ((GObjectClass *) tp_tests_contact_search_channel_parent_class)->constructed; TpTestsContactSearchChannel *self = TP_TESTS_CONTACT_SEARCH_CHANNEL (object); TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (self->priv->conn, TP_HANDLE_TYPE_CONTACT); TpDBusDaemon *bus; if (chain_up != NULL) { chain_up (object); } bus = tp_dbus_daemon_dup (NULL); tp_dbus_daemon_register_object (bus, self->priv->object_path, object); tp_group_mixin_init (object, G_STRUCT_OFFSET (TpTestsContactSearchChannel, group), contact_repo, self->priv->conn->self_handle); self->priv->contact_search_state = TP_CHANNEL_CONTACT_SEARCH_STATE_NOT_STARTED; self->priv->contact_search_limit = 0; self->priv->contact_search_available_search_keys = g_new0 (gchar *, 2); self->priv->contact_search_available_search_keys[0] = g_strdup ("employer"); self->priv->contact_search_server = g_strdup ("characters.shakespeare.lit"); self->priv->contact_search_contacts = g_slist_append (self->priv->contact_search_contacts, new_contact ("oggis", "Collabora", "Olli Salli")); self->priv->contact_search_contacts = g_slist_append (self->priv->contact_search_contacts, new_contact ("andrunko", "Collabora", "Andre Moreira Magalhaes")); self->priv->contact_search_contacts = g_slist_append (self->priv->contact_search_contacts, new_contact ("wjt", "Collabora", "Will Thompson")); self->priv->contact_search_contacts = g_slist_append (self->priv->contact_search_contacts, new_contact ("foo", "Other Employer", "Foo")); self->priv->contact_search_contacts = g_slist_append (self->priv->contact_search_contacts, new_contact ("bar", "Other Employer", "Bar")); } static void get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { TpTestsContactSearchChannel *self = TP_TESTS_CONTACT_SEARCH_CHANNEL (object); switch (property_id) { case PROP_OBJECT_PATH: g_value_set_string (value, self->priv->object_path); break; case PROP_CHANNEL_TYPE: g_value_set_static_string (value, TP_IFACE_CHANNEL); break; case PROP_HANDLE_TYPE: g_value_set_uint (value, TP_HANDLE_TYPE_NONE); break; case PROP_HANDLE: g_value_set_uint (value, 0); break; case PROP_TARGET_ID: g_value_set_string (value, ""); break; case PROP_REQUESTED: g_value_set_boolean (value, TRUE); break; case PROP_INITIATOR_HANDLE: g_value_set_uint (value, 0); break; case PROP_INITIATOR_ID: g_value_set_string (value, ""); break; case PROP_CONNECTION: g_value_set_object (value, self->priv->conn); break; case PROP_INTERFACES: g_value_set_boxed (value, tp_tests_contact_search_channel_interfaces); break; case PROP_CHANNEL_DESTROYED: g_value_set_boolean (value, self->priv->closed); break; case PROP_CHANNEL_PROPERTIES: g_value_take_boxed (value, tp_dbus_properties_mixin_make_properties_hash (object, TP_IFACE_CHANNEL, "ChannelType", TP_IFACE_CHANNEL, "TargetHandleType", TP_IFACE_CHANNEL, "TargetHandle", TP_IFACE_CHANNEL, "TargetID", TP_IFACE_CHANNEL, "InitiatorHandle", TP_IFACE_CHANNEL, "InitiatorID", TP_IFACE_CHANNEL, "Requested", TP_IFACE_CHANNEL, "Interfaces", TP_IFACE_CHANNEL_TYPE_CONTACT_SEARCH, "SearchState", TP_IFACE_CHANNEL_TYPE_CONTACT_SEARCH, "Limit", TP_IFACE_CHANNEL_TYPE_CONTACT_SEARCH, "AvailableSearchKeys", TP_IFACE_CHANNEL_TYPE_CONTACT_SEARCH, "Server", NULL)); break; case PROP_CONTACT_SEARCH_STATE: g_value_set_uint (value, self->priv->contact_search_state); g_assert (G_VALUE_HOLDS (value, G_TYPE_UINT)); break; case PROP_CONTACT_SEARCH_LIMIT: g_value_set_uint (value, self->priv->contact_search_limit); g_assert (G_VALUE_HOLDS (value, G_TYPE_UINT)); break; case PROP_CONTACT_SEARCH_AVAILABLE_SEARCH_KEYS: g_value_set_boxed (value, self->priv->contact_search_available_search_keys); g_assert (G_VALUE_HOLDS (value, G_TYPE_STRV)); break; case PROP_CONTACT_SEARCH_SERVER: g_value_set_string (value, self->priv->contact_search_server); g_assert (G_VALUE_HOLDS (value, G_TYPE_STRING)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { TpTestsContactSearchChannel *self = TP_TESTS_CONTACT_SEARCH_CHANNEL (object); switch (property_id) { case PROP_OBJECT_PATH: self->priv->object_path = g_value_dup_string (value); break; case PROP_CONNECTION: self->priv->conn = g_value_get_object (value); break; case PROP_CHANNEL_TYPE: case PROP_HANDLE: case PROP_HANDLE_TYPE: case PROP_TARGET_ID: case PROP_REQUESTED: case PROP_INITIATOR_HANDLE: case PROP_INITIATOR_ID: /* these properties are not actually meaningfully changeable on this * channel, so we do nothing */ break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void dispose (GObject *object) { TpTestsContactSearchChannel *self = TP_TESTS_CONTACT_SEARCH_CHANNEL (object); GSList *l; if (self->priv->disposed) { return; } self->priv->disposed = TRUE; g_strfreev (self->priv->contact_search_available_search_keys); self->priv->contact_search_available_search_keys = NULL; g_free (self->priv->contact_search_server); self->priv->contact_search_server = NULL; for (l = self->priv->contact_search_contacts; l != NULL; l = g_slist_next (l)) { free_contact ((TpTestsContactSearchContact *) l->data); } g_slist_free (self->priv->contact_search_contacts); if (!self->priv->closed) { self->priv->closed = TRUE; tp_svc_channel_emit_closed (self); } ((GObjectClass *) tp_tests_contact_search_channel_parent_class)->dispose (object); } static void finalize (GObject *object) { TpTestsContactSearchChannel *self = TP_TESTS_CONTACT_SEARCH_CHANNEL (object); g_free (self->priv->object_path); tp_group_mixin_finalize (object); ((GObjectClass *) tp_tests_contact_search_channel_parent_class)->finalize (object); } static void tp_tests_contact_search_channel_class_init (TpTestsContactSearchChannelClass *klass) { static TpDBusPropertiesMixinPropImpl channel_props[] = { { "TargetHandleType", "handle-type", NULL }, { "TargetHandle", "handle", NULL }, { "ChannelType", "channel-type", NULL }, { "Interfaces", "interfaces", NULL }, { "TargetID", "target-id", NULL }, { "Requested", "requested", NULL }, { "InitiatorHandle", "initiator-handle", NULL }, { "InitiatorID", "initiator-id", NULL }, { NULL } }; static TpDBusPropertiesMixinPropImpl contact_search_props[] = { { "SearchState", "search-state", NULL }, { "Limit", "limit", NULL }, { "AvailableSearchKeys", "available-search-keys", NULL }, { "Server", "server", NULL }, { NULL } }; static TpDBusPropertiesMixinIfaceImpl prop_interfaces[] = { { TP_IFACE_CHANNEL, tp_dbus_properties_mixin_getter_gobject_properties, NULL, channel_props, }, { TP_IFACE_CHANNEL_TYPE_CONTACT_SEARCH, tp_dbus_properties_mixin_getter_gobject_properties, NULL, contact_search_props, }, { NULL } }; GObjectClass *object_class = (GObjectClass *) klass; GParamSpec *param_spec; g_type_class_add_private (klass, sizeof (TpTestsContactSearchChannelPrivate)); object_class->constructed = constructed; object_class->set_property = set_property; object_class->get_property = get_property; object_class->dispose = dispose; object_class->finalize = finalize; g_object_class_override_property (object_class, PROP_OBJECT_PATH, "object-path"); g_object_class_override_property (object_class, PROP_CHANNEL_TYPE, "channel-type"); g_object_class_override_property (object_class, PROP_HANDLE_TYPE, "handle-type"); g_object_class_override_property (object_class, PROP_HANDLE, "handle"); g_object_class_override_property (object_class, PROP_CHANNEL_DESTROYED, "channel-destroyed"); g_object_class_override_property (object_class, PROP_CHANNEL_PROPERTIES, "channel-properties"); param_spec = g_param_spec_object ("connection", "TpBaseConnection object", "Connection object that owns this channel", TP_TYPE_BASE_CONNECTION, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_CONNECTION, param_spec); param_spec = g_param_spec_boxed ("interfaces", "Extra D-Bus interfaces", "Additional Channel.Interface.* interfaces", G_TYPE_STRV, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_INTERFACES, param_spec); param_spec = g_param_spec_string ("target-id", "Peer's ID", "The string obtained by inspecting the target handle", NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_TARGET_ID, param_spec); param_spec = g_param_spec_uint ("initiator-handle", "Initiator's handle", "The contact who initiated the channel", 0, G_MAXUINT32, 0, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_INITIATOR_HANDLE, param_spec); param_spec = g_param_spec_string ("initiator-id", "Initiator's ID", "The string obtained by inspecting the initiator-handle", NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_INITIATOR_ID, param_spec); param_spec = g_param_spec_boolean ("requested", "Requested?", "True if this channel was requested by the local user", FALSE, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_REQUESTED, param_spec); param_spec = g_param_spec_uint ("search-state", "Search state", "The search state", 0, NUM_TP_CHANNEL_CONTACT_SEARCH_STATES, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_CONTACT_SEARCH_STATE, param_spec); param_spec = g_param_spec_uint ("limit", "Search limit", "The search limit", 0, G_MAXUINT32, 0, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_CONTACT_SEARCH_LIMIT, param_spec); param_spec = g_param_spec_boxed ("available-search-keys", "Available Search Keys", "The available search keys", G_TYPE_STRV, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_CONTACT_SEARCH_AVAILABLE_SEARCH_KEYS, param_spec); param_spec = g_param_spec_string ("server", "Server", "The search server", NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); g_object_class_install_property (object_class, PROP_CONTACT_SEARCH_SERVER, param_spec); klass->dbus_properties_class.interfaces = prop_interfaces; tp_dbus_properties_mixin_class_init (object_class, G_STRUCT_OFFSET (TpTestsContactSearchChannelClass, dbus_properties_class)); tp_group_mixin_class_init (object_class, G_STRUCT_OFFSET (TpTestsContactSearchChannelClass, group_class), NULL, NULL); tp_group_mixin_init_dbus_properties (object_class); } static void channel_close (TpSvcChannel *iface, DBusGMethodInvocation *context) { TpTestsContactSearchChannel *self = TP_TESTS_CONTACT_SEARCH_CHANNEL (iface); if (!self->priv->closed) { self->priv->closed = TRUE; tp_svc_channel_emit_closed (self); } tp_svc_channel_return_from_close (context); } static void channel_get_channel_type (TpSvcChannel *iface G_GNUC_UNUSED, DBusGMethodInvocation *context) { tp_svc_channel_return_from_get_channel_type (context, TP_IFACE_CHANNEL_TYPE_CONTACT_SEARCH); } static void channel_get_handle (TpSvcChannel *iface, DBusGMethodInvocation *context) { tp_svc_channel_return_from_get_handle (context, TP_HANDLE_TYPE_NONE, 0); } static void channel_get_interfaces (TpSvcChannel *iface G_GNUC_UNUSED, DBusGMethodInvocation *context) { tp_svc_channel_return_from_get_interfaces (context, tp_tests_contact_search_channel_interfaces); } static void channel_iface_init (gpointer iface, gpointer data) { TpSvcChannelClass *klass = iface; #define IMPLEMENT(x) tp_svc_channel_implement_##x (klass, channel_##x) IMPLEMENT (close); IMPLEMENT (get_channel_type); IMPLEMENT (get_handle); IMPLEMENT (get_interfaces); #undef IMPLEMENT } static void change_search_state (TpTestsContactSearchChannel *self, guint state, const gchar *debug_message) { GHashTable *details = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) tp_g_value_slice_free); g_hash_table_insert (details, "debug-message", tp_g_value_slice_new_string (debug_message)); self->priv->contact_search_state = state; tp_svc_channel_type_contact_search_emit_search_state_changed (self, self->priv->contact_search_state, "", details); g_hash_table_destroy (details); } static gboolean validate_terms (TpTestsContactSearchChannel *self, GHashTable *terms, GError **error) { const gchar * const *asks = (const gchar * const *) self->priv->contact_search_available_search_keys; GHashTableIter iter; gpointer key; g_hash_table_iter_init (&iter, terms); while (g_hash_table_iter_next (&iter, &key, NULL)) { gchar *field = key; if (!tp_strv_contains (asks, field)) { g_debug ("%s is not in AvailableSearchKeys", field); g_set_error (error, TP_ERROR, TP_ERROR_INVALID_ARGUMENT, "%s is not in AvailableSearchKeys", field); return FALSE; } } return TRUE; } static gboolean do_search (TpTestsContactSearchChannel *self, GHashTable *terms, GError **error) { GHashTable *results = g_hash_table_new (g_str_hash, g_str_equal); GHashTableIter iter; gchar *key, *value; if (!validate_terms (self, terms, error)) { return FALSE; } g_debug ("Doing search"); change_search_state (self, TP_CHANNEL_CONTACT_SEARCH_STATE_IN_PROGRESS, "in progress"); g_hash_table_iter_init (&iter, terms); while (g_hash_table_iter_next (&iter, (gpointer *) &key, (gpointer *) &value)) { GSList *l; for (l = self->priv->contact_search_contacts; l != NULL; l = g_slist_next (l)) { TpTestsContactSearchContact *contact = (TpTestsContactSearchContact *) l->data; if (strcmp (contact->employer, value) == 0) { g_hash_table_insert (results, contact->id, contact->contact_info); } } } tp_svc_channel_type_contact_search_emit_search_result_received (self, results); change_search_state (self, TP_CHANNEL_CONTACT_SEARCH_STATE_COMPLETED, "completed"); g_hash_table_destroy (results); return TRUE; } static void contact_search_search (TpSvcChannelTypeContactSearch *iface G_GNUC_UNUSED, GHashTable *terms, DBusGMethodInvocation *context) { TpTestsContactSearchChannel *self = TP_TESTS_CONTACT_SEARCH_CHANNEL (iface); TpTestsContactSearchChannelPrivate *priv = self->priv; GError *error = NULL; if (priv->contact_search_state != TP_CHANNEL_CONTACT_SEARCH_STATE_NOT_STARTED) { g_debug ("Search state is %d", priv->contact_search_state); error = g_error_new (TP_ERROR, TP_ERROR_NOT_AVAILABLE, "SearchState is %d", priv->contact_search_state); goto err; } if (do_search (self, terms, &error)) { tp_svc_channel_type_contact_search_return_from_search (context); return; } err: dbus_g_method_return_error (context, error); g_error_free (error); } static void contact_search_more (TpSvcChannelTypeContactSearch *iface G_GNUC_UNUSED, DBusGMethodInvocation *context) { tp_svc_channel_type_contact_search_return_from_more (context); } static void contact_search_stop (TpSvcChannelTypeContactSearch *iface, DBusGMethodInvocation *context) { TpTestsContactSearchChannel *self = TP_TESTS_CONTACT_SEARCH_CHANNEL (iface); TpTestsContactSearchChannelPrivate *priv = self->priv; switch (priv->contact_search_state) { case TP_CHANNEL_CONTACT_SEARCH_STATE_IN_PROGRESS: change_search_state (self, TP_CHANNEL_CONTACT_SEARCH_STATE_FAILED, "stopped while in progress"); case TP_CHANNEL_CONTACT_SEARCH_STATE_COMPLETED: tp_svc_channel_type_contact_search_return_from_stop (context); break; case TP_CHANNEL_CONTACT_SEARCH_STATE_NOT_STARTED: { GError e = { TP_ERROR, TP_ERROR_NOT_AVAILABLE, "Search() hasn't been called yet" }; g_debug ("%s", e.message); dbus_g_method_return_error (context, &e); break; } case TP_CHANNEL_CONTACT_SEARCH_STATE_FAILED: case TP_CHANNEL_CONTACT_SEARCH_STATE_MORE_AVAILABLE: g_assert_not_reached (); } } static void contact_search_iface_init (gpointer iface, gpointer data) { TpSvcChannelTypeContactSearchClass *klass = iface; #define IMPLEMENT(x) tp_svc_channel_type_contact_search_implement_##x (klass, contact_search_##x) IMPLEMENT (search); IMPLEMENT (more); IMPLEMENT (stop); #undef IMPLEMENT } telepathy-qt-0.9.3/tests/lib/glib/contacts-conn.c0000644000175200001440000012727012000056607024167 0ustar00collabora-develusers00000000000000/* * contacts-conn.c - connection with contact info * * Copyright (C) 2007-2008 Collabora Ltd. * Copyright (C) 2007-2008 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #include "contacts-conn.h" #include #include #include #include #include #include #include #include "debug.h" static void init_aliasing (gpointer, gpointer); static void init_avatars (gpointer, gpointer); static void init_location (gpointer, gpointer); static void init_contact_caps (gpointer, gpointer); static void init_contact_info (gpointer, gpointer); static void init_client_types (gpointer, gpointer); static void conn_avatars_properties_getter (GObject *object, GQuark interface, GQuark name, GValue *value, gpointer getter_data); G_DEFINE_TYPE_WITH_CODE (TpTestsContactsConnection, tp_tests_contacts_connection, TP_TESTS_TYPE_SIMPLE_CONNECTION, G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_ALIASING, init_aliasing); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_AVATARS, init_avatars); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_PRESENCE, tp_presence_mixin_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_SIMPLE_PRESENCE, tp_presence_mixin_simple_presence_iface_init) G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_LOCATION, init_location) G_IMPLEMENT_INTERFACE ( TP_TYPE_SVC_CONNECTION_INTERFACE_CONTACT_CAPABILITIES, init_contact_caps) G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_CONTACT_INFO, init_contact_info) G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_CLIENT_TYPES, init_client_types); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_CONTACTS, tp_contacts_mixin_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_CONTACT_LIST, tp_base_contact_list_mixin_list_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_SVC_CONNECTION_INTERFACE_CONTACT_GROUPS, tp_base_contact_list_mixin_groups_iface_init); ); /* type definition stuff */ static const char *mime_types[] = { "image/png", NULL }; static TpDBusPropertiesMixinPropImpl conn_avatars_properties[] = { { "MinimumAvatarWidth", GUINT_TO_POINTER (1), NULL }, { "MinimumAvatarHeight", GUINT_TO_POINTER (2), NULL }, { "RecommendedAvatarWidth", GUINT_TO_POINTER (3), NULL }, { "RecommendedAvatarHeight", GUINT_TO_POINTER (4), NULL }, { "MaximumAvatarWidth", GUINT_TO_POINTER (5), NULL }, { "MaximumAvatarHeight", GUINT_TO_POINTER (6), NULL }, { "MaximumAvatarBytes", GUINT_TO_POINTER (7), NULL }, /* special-cased - it's the only one with a non-guint value */ { "SupportedAvatarMIMETypes", NULL, NULL }, { NULL } }; enum { N_SIGNALS }; struct _TpTestsContactsConnectionPrivate { /* TpHandle => gchar * */ GHashTable *aliases; /* TpHandle => AvatarData */ GHashTable *avatars; /* TpHandle => ContactsConnectionPresenceStatusIndex */ GHashTable *presence_statuses; /* TpHandle => gchar * */ GHashTable *presence_messages; /* TpHandle => GHashTable * */ GHashTable *locations; /* TpHandle => GPtrArray * */ GHashTable *capabilities; /* TpHandle => GPtrArray * */ GHashTable *contact_info; GPtrArray *default_contact_info; /* TpHandle => gchar ** */ GHashTable *client_types; TestContactListManager *list_manager; }; typedef struct { GArray *data; gchar *mime_type; gchar *token; } AvatarData; static AvatarData * avatar_data_new (GArray *data, const gchar *mime_type, const gchar *token) { AvatarData *a; a = g_slice_new (AvatarData); a->data = data ? g_array_ref (data) : NULL; a->mime_type = g_strdup (mime_type); a->token = g_strdup (token); return a; } static void avatar_data_free (gpointer data) { AvatarData *a = data; if (a != NULL) { if (a->data != NULL) g_array_unref (a->data); g_free (a->mime_type); g_free (a->token); g_slice_free (AvatarData, a); } } static void free_rcc_list (GPtrArray *rccs) { g_boxed_free (TP_ARRAY_TYPE_REQUESTABLE_CHANNEL_CLASS_LIST, rccs); } static void tp_tests_contacts_connection_init (TpTestsContactsConnection *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, TP_TESTS_TYPE_CONTACTS_CONNECTION, TpTestsContactsConnectionPrivate); self->priv->aliases = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_free); self->priv->avatars = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, avatar_data_free); self->priv->presence_statuses = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, NULL); self->priv->presence_messages = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_free); self->priv->locations = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, (GDestroyNotify) g_hash_table_unref); self->priv->capabilities = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, (GDestroyNotify) free_rcc_list); self->priv->contact_info = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, (GDestroyNotify) g_ptr_array_unref); self->priv->default_contact_info = (GPtrArray *) dbus_g_type_specialized_construct ( TP_ARRAY_TYPE_CONTACT_INFO_FIELD_LIST); self->priv->client_types = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, (GDestroyNotify) g_strfreev); } static void finalize (GObject *object) { TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (object); tp_contacts_mixin_finalize (object); g_hash_table_destroy (self->priv->aliases); g_hash_table_destroy (self->priv->avatars); g_hash_table_destroy (self->priv->presence_statuses); g_hash_table_destroy (self->priv->presence_messages); g_hash_table_destroy (self->priv->locations); g_hash_table_destroy (self->priv->capabilities); g_hash_table_destroy (self->priv->contact_info); g_hash_table_destroy (self->priv->client_types); if (self->priv->default_contact_info != NULL) g_ptr_array_unref (self->priv->default_contact_info); G_OBJECT_CLASS (tp_tests_contacts_connection_parent_class)->finalize (object); } static void aliasing_fill_contact_attributes (GObject *object, const GArray *contacts, GHashTable *attributes) { guint i; TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (object); TpBaseConnection *base = TP_BASE_CONNECTION (object); TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (base, TP_HANDLE_TYPE_CONTACT); for (i = 0; i < contacts->len; i++) { TpHandle handle = g_array_index (contacts, guint, i); const gchar *alias = g_hash_table_lookup (self->priv->aliases, GUINT_TO_POINTER (handle)); if (alias == NULL) { alias = tp_handle_inspect (contact_repo, handle); } tp_contacts_mixin_set_contact_attribute (attributes, handle, TP_IFACE_CONNECTION_INTERFACE_ALIASING "/alias", tp_g_value_slice_new_string (alias)); } } static void avatars_fill_contact_attributes (GObject *object, const GArray *contacts, GHashTable *attributes) { guint i; TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (object); for (i = 0; i < contacts->len; i++) { TpHandle handle = g_array_index (contacts, guint, i); AvatarData *a = g_hash_table_lookup (self->priv->avatars, GUINT_TO_POINTER (handle)); if (a != NULL && a->token != NULL) { tp_contacts_mixin_set_contact_attribute (attributes, handle, TP_IFACE_CONNECTION_INTERFACE_AVATARS "/token", tp_g_value_slice_new_string (a->token)); } } } static void location_fill_contact_attributes (GObject *object, const GArray *contacts, GHashTable *attributes) { guint i; TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (object); for (i = 0; i < contacts->len; i++) { TpHandle handle = g_array_index (contacts, guint, i); GHashTable *location = g_hash_table_lookup (self->priv->locations, GUINT_TO_POINTER (handle)); if (location != NULL) { tp_contacts_mixin_set_contact_attribute (attributes, handle, TP_IFACE_CONNECTION_INTERFACE_LOCATION "/location", tp_g_value_slice_new_boxed (TP_HASH_TYPE_LOCATION, location)); } } } static void contact_caps_fill_contact_attributes (GObject *object, const GArray *contacts, GHashTable *attributes) { guint i; TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (object); for (i = 0; i < contacts->len; i++) { TpHandle handle = g_array_index (contacts, guint, i); GPtrArray *caps = g_hash_table_lookup (self->priv->capabilities, GUINT_TO_POINTER (handle)); if (caps != NULL) { tp_contacts_mixin_set_contact_attribute (attributes, handle, TP_IFACE_CONNECTION_INTERFACE_CONTACT_CAPABILITIES "/capabilities", tp_g_value_slice_new_boxed ( TP_ARRAY_TYPE_REQUESTABLE_CHANNEL_CLASS_LIST, caps)); } } } static void contact_info_fill_contact_attributes (GObject *object, const GArray *contacts, GHashTable *attributes) { guint i; TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (object); for (i = 0; i < contacts->len; i++) { TpHandle handle = g_array_index (contacts, guint, i); GPtrArray *info = g_hash_table_lookup (self->priv->contact_info, GUINT_TO_POINTER (handle)); if (info != NULL) { tp_contacts_mixin_set_contact_attribute (attributes, handle, TP_IFACE_CONNECTION_INTERFACE_CONTACT_INFO "/info", tp_g_value_slice_new_boxed (TP_ARRAY_TYPE_CONTACT_INFO_FIELD_LIST, info)); } } } static TpDBusPropertiesMixinPropImpl conn_contact_info_properties[] = { { "ContactInfoFlags", GUINT_TO_POINTER (TP_CONTACT_INFO_FLAG_PUSH | TP_CONTACT_INFO_FLAG_CAN_SET), NULL }, { "SupportedFields", NULL, NULL }, { NULL } }; static void conn_contact_info_properties_getter (GObject *object, GQuark interface, GQuark name, GValue *value, gpointer getter_data) { GQuark q_supported_fields = g_quark_from_static_string ("SupportedFields"); static GPtrArray *supported_fields = NULL; if (name == q_supported_fields) { if (supported_fields == NULL) { supported_fields = g_ptr_array_new (); g_ptr_array_add (supported_fields, tp_value_array_build (4, G_TYPE_STRING, "n", G_TYPE_STRV, NULL, G_TYPE_UINT, 0, G_TYPE_UINT, 0, G_TYPE_INVALID)); } g_value_set_boxed (value, supported_fields); } else { g_value_set_uint (value, GPOINTER_TO_UINT (getter_data)); } } static void client_types_fill_contact_attributes ( GObject *object, const GArray *contacts, GHashTable *attributes) { guint i; TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (object); for (i = 0; i < contacts->len; i++) { TpHandle handle = g_array_index (contacts, TpHandle, i); gchar **types = g_hash_table_lookup (self->priv->client_types, GUINT_TO_POINTER (handle)); if (types != NULL) { tp_contacts_mixin_set_contact_attribute (attributes, handle, TP_IFACE_CONNECTION_INTERFACE_CLIENT_TYPES "/client-types", tp_g_value_slice_new_boxed (G_TYPE_STRV, types)); } } } static void constructed (GObject *object) { TpBaseConnection *base = TP_BASE_CONNECTION (object); void (*parent_impl) (GObject *) = G_OBJECT_CLASS (tp_tests_contacts_connection_parent_class)->constructed; if (parent_impl != NULL) parent_impl (object); tp_contacts_mixin_init (object, G_STRUCT_OFFSET (TpTestsContactsConnection, contacts_mixin)); tp_base_connection_register_with_contacts_mixin (base); tp_base_contact_list_mixin_register_with_contacts_mixin (base); tp_contacts_mixin_add_contact_attributes_iface (object, TP_IFACE_CONNECTION_INTERFACE_ALIASING, aliasing_fill_contact_attributes); tp_contacts_mixin_add_contact_attributes_iface (object, TP_IFACE_CONNECTION_INTERFACE_AVATARS, avatars_fill_contact_attributes); tp_contacts_mixin_add_contact_attributes_iface (object, TP_IFACE_CONNECTION_INTERFACE_LOCATION, location_fill_contact_attributes); tp_contacts_mixin_add_contact_attributes_iface (object, TP_IFACE_CONNECTION_INTERFACE_CONTACT_CAPABILITIES, contact_caps_fill_contact_attributes); tp_contacts_mixin_add_contact_attributes_iface (object, TP_IFACE_CONNECTION_INTERFACE_CONTACT_INFO, contact_info_fill_contact_attributes); tp_contacts_mixin_add_contact_attributes_iface (object, TP_IFACE_CONNECTION_INTERFACE_CLIENT_TYPES, client_types_fill_contact_attributes); tp_presence_mixin_init (object, G_STRUCT_OFFSET (TpTestsContactsConnection, presence_mixin)); tp_presence_mixin_simple_presence_register_with_contacts_mixin (object); } static const TpPresenceStatusOptionalArgumentSpec can_have_message[] = { { "message", "s", NULL, NULL }, { NULL } }; /* Must match TpTestsContactsConnectionPresenceStatusIndex in the .h */ static const TpPresenceStatusSpec my_statuses[] = { { "available", TP_CONNECTION_PRESENCE_TYPE_AVAILABLE, TRUE, can_have_message }, { "busy", TP_CONNECTION_PRESENCE_TYPE_BUSY, TRUE, can_have_message }, { "away", TP_CONNECTION_PRESENCE_TYPE_AWAY, TRUE, can_have_message }, { "offline", TP_CONNECTION_PRESENCE_TYPE_OFFLINE, FALSE, NULL }, { "unknown", TP_CONNECTION_PRESENCE_TYPE_UNKNOWN, FALSE, NULL }, { "error", TP_CONNECTION_PRESENCE_TYPE_ERROR, FALSE, NULL }, { NULL } }; static gboolean my_status_available (GObject *object, guint index) { TpBaseConnection *base = TP_BASE_CONNECTION (object); if (base->status != TP_CONNECTION_STATUS_CONNECTED) return FALSE; return TRUE; } static GHashTable * my_get_contact_statuses (GObject *object, const GArray *contacts, GError **error) { TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (object); GHashTable *result = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, (GDestroyNotify) tp_presence_status_free); guint i; for (i = 0; i < contacts->len; i++) { TpHandle handle = g_array_index (contacts, TpHandle, i); gpointer key = GUINT_TO_POINTER (handle); TpTestsContactsConnectionPresenceStatusIndex index; const gchar *presence_message; GHashTable *parameters; index = GPOINTER_TO_UINT (g_hash_table_lookup ( self->priv->presence_statuses, key)); presence_message = g_hash_table_lookup ( self->priv->presence_messages, key); parameters = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) tp_g_value_slice_free); if (presence_message != NULL) g_hash_table_insert (parameters, "message", tp_g_value_slice_new_string (presence_message)); g_hash_table_insert (result, key, tp_presence_status_new (index, parameters)); g_hash_table_destroy (parameters); } return result; } static gboolean my_set_own_status (GObject *object, const TpPresenceStatus *status, GError **error) { TpBaseConnection *base_conn = TP_BASE_CONNECTION (object); TpTestsContactsConnectionPresenceStatusIndex index = status->index; const gchar *message = ""; if (status->optional_arguments != NULL) { message = g_hash_table_lookup (status->optional_arguments, "message"); if (message == NULL) message = ""; } tp_tests_contacts_connection_change_presences (TP_TESTS_CONTACTS_CONNECTION (object), 1, &(base_conn->self_handle), &index, &message); return TRUE; } static guint my_get_maximum_status_message_length_cb (GObject *obj) { return 512; } static GPtrArray * create_channel_managers (TpBaseConnection *conn) { TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (conn); GPtrArray *ret = g_ptr_array_sized_new (1); self->priv->list_manager = g_object_new (TEST_TYPE_CONTACT_LIST_MANAGER, "connection", conn, NULL); g_ptr_array_add (ret, self->priv->list_manager); return ret; } static void tp_tests_contacts_connection_class_init (TpTestsContactsConnectionClass *klass) { TpBaseConnectionClass *base_class = (TpBaseConnectionClass *) klass; GObjectClass *object_class = (GObjectClass *) klass; TpPresenceMixinClass *mixin_class; static const gchar *interfaces_always_present[] = { TP_IFACE_CONNECTION_INTERFACE_ALIASING, TP_IFACE_CONNECTION_INTERFACE_AVATARS, TP_IFACE_CONNECTION_INTERFACE_CONTACTS, TP_IFACE_CONNECTION_INTERFACE_CONTACT_LIST, TP_IFACE_CONNECTION_INTERFACE_CONTACT_GROUPS, TP_IFACE_CONNECTION_INTERFACE_PRESENCE, TP_IFACE_CONNECTION_INTERFACE_SIMPLE_PRESENCE, TP_IFACE_CONNECTION_INTERFACE_LOCATION, TP_IFACE_CONNECTION_INTERFACE_CLIENT_TYPES, TP_IFACE_CONNECTION_INTERFACE_CONTACT_CAPABILITIES, TP_IFACE_CONNECTION_INTERFACE_CONTACT_INFO, TP_IFACE_CONNECTION_INTERFACE_REQUESTS, NULL }; static TpDBusPropertiesMixinIfaceImpl prop_interfaces[] = { { TP_IFACE_CONNECTION_INTERFACE_AVATARS, conn_avatars_properties_getter, NULL, conn_avatars_properties, }, { TP_IFACE_CONNECTION_INTERFACE_CONTACT_INFO, conn_contact_info_properties_getter, NULL, conn_contact_info_properties, }, { NULL } }; object_class->constructed = constructed; object_class->finalize = finalize; g_type_class_add_private (klass, sizeof (TpTestsContactsConnectionPrivate)); base_class->interfaces_always_present = interfaces_always_present; base_class->create_channel_managers = create_channel_managers; tp_contacts_mixin_class_init (object_class, G_STRUCT_OFFSET (TpTestsContactsConnectionClass, contacts_mixin)); tp_presence_mixin_class_init (object_class, G_STRUCT_OFFSET (TpTestsContactsConnectionClass, presence_mixin), my_status_available, my_get_contact_statuses, my_set_own_status, my_statuses); mixin_class = TP_PRESENCE_MIXIN_CLASS(klass); mixin_class->get_maximum_status_message_length = my_get_maximum_status_message_length_cb; tp_presence_mixin_simple_presence_init_dbus_properties (object_class); klass->properties_class.interfaces = prop_interfaces; tp_dbus_properties_mixin_class_init (object_class, G_STRUCT_OFFSET (TpTestsContactsConnectionClass, properties_class)); tp_base_contact_list_mixin_class_init (base_class); } TestContactListManager * tp_tests_contacts_connection_get_contact_list_manager ( TpTestsContactsConnection *self) { return self->priv->list_manager; } void tp_tests_contacts_connection_change_aliases (TpTestsContactsConnection *self, guint n, const TpHandle *handles, const gchar * const *aliases) { GPtrArray *structs = g_ptr_array_sized_new (n); guint i; for (i = 0; i < n; i++) { GValueArray *pair = g_value_array_new (2); DEBUG ("contact#%u -> %s", handles[i], aliases[i]); g_hash_table_insert (self->priv->aliases, GUINT_TO_POINTER (handles[i]), g_strdup (aliases[i])); g_value_array_append (pair, NULL); g_value_init (pair->values + 0, G_TYPE_UINT); g_value_set_uint (pair->values + 0, handles[i]); g_value_array_append (pair, NULL); g_value_init (pair->values + 1, G_TYPE_STRING); g_value_set_string (pair->values + 1, aliases[i]); g_ptr_array_add (structs, pair); } tp_svc_connection_interface_aliasing_emit_aliases_changed (self, structs); g_ptr_array_foreach (structs, (GFunc) g_value_array_free, NULL); g_ptr_array_free (structs, TRUE); } void tp_tests_contacts_connection_change_presences ( TpTestsContactsConnection *self, guint n, const TpHandle *handles, const TpTestsContactsConnectionPresenceStatusIndex *indexes, const gchar * const *messages) { GHashTable *presences = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, (GDestroyNotify) tp_presence_status_free); guint i; for (i = 0; i < n; i++) { GHashTable *parameters; gpointer key = GUINT_TO_POINTER (handles[i]); DEBUG ("contact#%u -> %s \"%s\"", handles[i], my_statuses[indexes[i]].name, messages[i]); g_hash_table_insert (self->priv->presence_statuses, key, GUINT_TO_POINTER (indexes[i])); g_hash_table_insert (self->priv->presence_messages, key, g_strdup (messages[i])); parameters = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) tp_g_value_slice_free); if (messages[i] != NULL && messages[i][0] != '\0') g_hash_table_insert (parameters, "message", tp_g_value_slice_new_string (messages[i])); g_hash_table_insert (presences, key, tp_presence_status_new (indexes[i], parameters)); g_hash_table_destroy (parameters); } tp_presence_mixin_emit_presence_update ((GObject *) self, presences); g_hash_table_destroy (presences); } void tp_tests_contacts_connection_change_avatar_tokens (TpTestsContactsConnection *self, guint n, const TpHandle *handles, const gchar * const *tokens) { guint i; for (i = 0; i < n; i++) { DEBUG ("contact#%u -> %s", handles[i], tokens[i]); g_hash_table_insert (self->priv->avatars, GUINT_TO_POINTER (handles[i]), avatar_data_new (NULL, NULL, tokens[i])); tp_svc_connection_interface_avatars_emit_avatar_updated (self, handles[i], tokens[i]); } } void tp_tests_contacts_connection_change_avatar_data ( TpTestsContactsConnection *self, TpHandle handle, GArray *data, const gchar *mime_type, const gchar *token, gboolean emit_avatar_updated) { g_hash_table_insert (self->priv->avatars, GUINT_TO_POINTER (handle), avatar_data_new (data, mime_type, token)); if (emit_avatar_updated) { tp_svc_connection_interface_avatars_emit_avatar_updated (self, handle, token); } } void tp_tests_contacts_connection_change_locations (TpTestsContactsConnection *self, guint n, const TpHandle *handles, GHashTable **locations) { guint i; for (i = 0; i < n; i++) { DEBUG ("contact#%u ->", handles[i]); tp_asv_dump (locations[i]); g_hash_table_insert (self->priv->locations, GUINT_TO_POINTER (handles[i]), g_hash_table_ref (locations[i])); tp_svc_connection_interface_location_emit_location_updated (self, handles[i], locations[i]); } } void tp_tests_contacts_connection_change_capabilities ( TpTestsContactsConnection *self, GHashTable *capabilities) { GHashTableIter iter; gpointer handle, caps; g_hash_table_iter_init (&iter, capabilities); while (g_hash_table_iter_next (&iter, &handle, &caps)) { g_hash_table_insert (self->priv->capabilities, handle, g_boxed_copy (TP_ARRAY_TYPE_REQUESTABLE_CHANNEL_CLASS_LIST, caps)); } tp_svc_connection_interface_contact_capabilities_emit_contact_capabilities_changed ( self, capabilities); } void tp_tests_contacts_connection_change_contact_info ( TpTestsContactsConnection *self, TpHandle handle, GPtrArray *info) { g_hash_table_insert (self->priv->contact_info, GUINT_TO_POINTER (handle), g_ptr_array_ref (info)); tp_svc_connection_interface_contact_info_emit_contact_info_changed (self, handle, info); } void tp_tests_contacts_connection_set_default_contact_info ( TpTestsContactsConnection *self, GPtrArray *info) { if (self->priv->default_contact_info != NULL) g_ptr_array_unref (self->priv->default_contact_info); self->priv->default_contact_info = g_ptr_array_ref (info); } void tp_tests_contacts_connection_change_client_types( TpTestsContactsConnection *self, TpHandle handle, gchar **client_types) { g_hash_table_insert (self->priv->client_types, GUINT_TO_POINTER (handle), client_types); tp_svc_connection_interface_client_types_emit_client_types_updated (self, handle, (const gchar **) client_types); } static void my_get_alias_flags (TpSvcConnectionInterfaceAliasing *aliasing, DBusGMethodInvocation *context) { TpBaseConnection *base = TP_BASE_CONNECTION (aliasing); TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context); tp_svc_connection_interface_aliasing_return_from_get_alias_flags (context, 0); } static void my_get_aliases (TpSvcConnectionInterfaceAliasing *aliasing, const GArray *contacts, DBusGMethodInvocation *context) { TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (aliasing); TpBaseConnection *base = TP_BASE_CONNECTION (aliasing); TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (base, TP_HANDLE_TYPE_CONTACT); GHashTable *result; GError *error = NULL; guint i; TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context); if (!tp_handles_are_valid (contact_repo, contacts, FALSE, &error)) { dbus_g_method_return_error (context, error); g_error_free (error); return; } result = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, NULL); for (i = 0; i < contacts->len; i++) { TpHandle handle = g_array_index (contacts, TpHandle, i); const gchar *alias = g_hash_table_lookup (self->priv->aliases, GUINT_TO_POINTER (handle)); if (alias == NULL) g_hash_table_insert (result, GUINT_TO_POINTER (handle), (gchar *) tp_handle_inspect (contact_repo, handle)); else g_hash_table_insert (result, GUINT_TO_POINTER (handle), (gchar *) alias); } tp_svc_connection_interface_aliasing_return_from_get_aliases (context, result); g_hash_table_destroy (result); } static void my_request_aliases (TpSvcConnectionInterfaceAliasing *aliasing, const GArray *contacts, DBusGMethodInvocation *context) { TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (aliasing); TpBaseConnection *base = TP_BASE_CONNECTION (aliasing); TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (base, TP_HANDLE_TYPE_CONTACT); GPtrArray *result; gchar **strings; GError *error = NULL; guint i; TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context); if (!tp_handles_are_valid (contact_repo, contacts, FALSE, &error)) { dbus_g_method_return_error (context, error); g_error_free (error); return; } result = g_ptr_array_sized_new (contacts->len + 1); for (i = 0; i < contacts->len; i++) { TpHandle handle = g_array_index (contacts, TpHandle, i); const gchar *alias = g_hash_table_lookup (self->priv->aliases, GUINT_TO_POINTER (handle)); if (alias == NULL) g_ptr_array_add (result, (gchar *) tp_handle_inspect (contact_repo, handle)); else g_ptr_array_add (result, (gchar *) alias); } g_ptr_array_add (result, NULL); strings = (gchar **) g_ptr_array_free (result, FALSE); tp_svc_connection_interface_aliasing_return_from_request_aliases (context, (const gchar **) strings); g_free (strings); } static void init_aliasing (gpointer g_iface, gpointer iface_data) { TpSvcConnectionInterfaceAliasingClass *klass = g_iface; #define IMPLEMENT(x) tp_svc_connection_interface_aliasing_implement_##x (\ klass, my_##x) IMPLEMENT(get_alias_flags); IMPLEMENT(request_aliases); IMPLEMENT(get_aliases); /* IMPLEMENT(set_aliases); */ #undef IMPLEMENT } static void my_get_avatar_tokens (TpSvcConnectionInterfaceAvatars *avatars, const GArray *contacts, DBusGMethodInvocation *context) { TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (avatars); TpBaseConnection *base = TP_BASE_CONNECTION (avatars); TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (base, TP_HANDLE_TYPE_CONTACT); GError *error = NULL; GHashTable *result; guint i; TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context); if (!tp_handles_are_valid (contact_repo, contacts, FALSE, &error)) { dbus_g_method_return_error (context, error); g_error_free (error); return; } result = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, NULL); for (i = 0; i < contacts->len; i++) { TpHandle handle = g_array_index (contacts, TpHandle, i); AvatarData *a = g_hash_table_lookup (self->priv->avatars, GUINT_TO_POINTER (handle)); if (a == NULL || a->token == NULL) { /* we're expected to do a round-trip to the server to find out * their token, so we have to give some sort of result. Assume * no avatar, here */ a = avatar_data_new (NULL, NULL, ""); g_hash_table_insert (self->priv->avatars, GUINT_TO_POINTER (handle), a); tp_svc_connection_interface_avatars_emit_avatar_updated (self, handle, a->token); } g_hash_table_insert (result, GUINT_TO_POINTER (handle), a->token); } tp_svc_connection_interface_avatars_return_from_get_known_avatar_tokens ( context, result); g_hash_table_destroy (result); } static void my_get_known_avatar_tokens (TpSvcConnectionInterfaceAvatars *avatars, const GArray *contacts, DBusGMethodInvocation *context) { TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (avatars); TpBaseConnection *base = TP_BASE_CONNECTION (avatars); TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (base, TP_HANDLE_TYPE_CONTACT); GError *error = NULL; GHashTable *result; guint i; TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context); if (!tp_handles_are_valid (contact_repo, contacts, FALSE, &error)) { dbus_g_method_return_error (context, error); g_error_free (error); return; } result = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, NULL); for (i = 0; i < contacts->len; i++) { TpHandle handle = g_array_index (contacts, TpHandle, i); AvatarData *a = g_hash_table_lookup (self->priv->avatars, GUINT_TO_POINTER (handle)); const gchar *token = a ? a->token : NULL; g_hash_table_insert (result, GUINT_TO_POINTER (handle), (gchar *) (token != NULL ? token : "")); } tp_svc_connection_interface_avatars_return_from_get_known_avatar_tokens ( context, result); g_hash_table_destroy (result); } static void my_request_avatars (TpSvcConnectionInterfaceAvatars *avatars, const GArray *contacts, DBusGMethodInvocation *context) { TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (avatars); TpBaseConnection *base = TP_BASE_CONNECTION (avatars); TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (base, TP_HANDLE_TYPE_CONTACT); GError *error = NULL; guint i; TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context); if (!tp_handles_are_valid (contact_repo, contacts, FALSE, &error)) { dbus_g_method_return_error (context, error); g_error_free (error); return; } for (i = 0; i < contacts->len; i++) { TpHandle handle = g_array_index (contacts, TpHandle, i); AvatarData *a = g_hash_table_lookup (self->priv->avatars, GUINT_TO_POINTER (handle)); if (a != NULL) tp_svc_connection_interface_avatars_emit_avatar_retrieved (self, handle, a->token, a->data, a->mime_type); } tp_svc_connection_interface_avatars_return_from_request_avatars (context); } static void conn_avatars_properties_getter (GObject *object, GQuark interface, GQuark name, GValue *value, gpointer getter_data) { GQuark q_mime_types = g_quark_from_static_string ( "SupportedAvatarMIMETypes"); if (name == q_mime_types) { g_value_set_static_boxed (value, mime_types); } else { g_value_set_uint (value, GPOINTER_TO_UINT (getter_data)); } } static void init_avatars (gpointer g_iface, gpointer iface_data) { TpSvcConnectionInterfaceAvatarsClass *klass = g_iface; #define IMPLEMENT(x) tp_svc_connection_interface_avatars_implement_##x (\ klass, my_##x) /* IMPLEMENT(get_avatar_requirements); */ IMPLEMENT(get_avatar_tokens); IMPLEMENT(get_known_avatar_tokens); /* IMPLEMENT(request_avatar); */ IMPLEMENT(request_avatars); /* IMPLEMENT(set_avatar); */ /* IMPLEMENT(clear_avatar); */ #undef IMPLEMENT } static void my_get_locations (TpSvcConnectionInterfaceLocation *avatars, const GArray *contacts, DBusGMethodInvocation *context) { TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (avatars); TpBaseConnection *base = TP_BASE_CONNECTION (avatars); TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (base, TP_HANDLE_TYPE_CONTACT); GError *error = NULL; GHashTable *result; guint i; TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context); if (!tp_handles_are_valid (contact_repo, contacts, FALSE, &error)) { dbus_g_method_return_error (context, error); g_error_free (error); return; } result = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, NULL); for (i = 0; i < contacts->len; i++) { TpHandle handle = g_array_index (contacts, TpHandle, i); GHashTable *location = g_hash_table_lookup (self->priv->locations, GUINT_TO_POINTER (handle)); if (location != NULL) { g_hash_table_insert (result, GUINT_TO_POINTER (handle), location); } } tp_svc_connection_interface_location_return_from_get_locations ( context, result); g_hash_table_destroy (result); } static void init_location (gpointer g_iface, gpointer iface_data) { TpSvcConnectionInterfaceLocationClass *klass = g_iface; #define IMPLEMENT(x) tp_svc_connection_interface_location_implement_##x (\ klass, my_##x) IMPLEMENT(get_locations); #undef IMPLEMENT } static void my_get_contact_capabilities (TpSvcConnectionInterfaceContactCapabilities *obj, const GArray *contacts, DBusGMethodInvocation *context) { TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (obj); TpBaseConnection *base = TP_BASE_CONNECTION (obj); TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (base, TP_HANDLE_TYPE_CONTACT); GError *error = NULL; GHashTable *result; guint i; TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context); if (!tp_handles_are_valid (contact_repo, contacts, FALSE, &error)) { dbus_g_method_return_error (context, error); g_error_free (error); return; } result = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, NULL); for (i = 0; i < contacts->len; i++) { TpHandle handle = g_array_index (contacts, TpHandle, i); GPtrArray *arr = g_hash_table_lookup (self->priv->capabilities, GUINT_TO_POINTER (handle)); if (arr != NULL) { g_hash_table_insert (result, GUINT_TO_POINTER (handle), arr); } } tp_svc_connection_interface_contact_capabilities_return_from_get_contact_capabilities ( context, result); g_hash_table_destroy (result); } static void init_contact_caps (gpointer g_iface, gpointer iface_data) { TpSvcConnectionInterfaceContactCapabilitiesClass *klass = g_iface; #define IMPLEMENT(x) tp_svc_connection_interface_contact_capabilities_implement_##x (\ klass, my_##x) IMPLEMENT(get_contact_capabilities); #undef IMPLEMENT } static GPtrArray * lookup_contact_info (TpTestsContactsConnection *self, TpHandle handle) { GPtrArray *ret = g_hash_table_lookup (self->priv->contact_info, GUINT_TO_POINTER (handle)); if (ret == NULL && self->priv->default_contact_info != NULL) { ret = self->priv->default_contact_info; g_hash_table_insert (self->priv->contact_info, GUINT_TO_POINTER (handle), g_ptr_array_ref (ret)); } if (ret == NULL) return g_ptr_array_new (); return g_ptr_array_ref (ret); } static void my_refresh_contact_info (TpSvcConnectionInterfaceContactInfo *obj, const GArray *contacts, DBusGMethodInvocation *context) { TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (obj); TpBaseConnection *base = TP_BASE_CONNECTION (obj); TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (base, TP_HANDLE_TYPE_CONTACT); GError *error = NULL; guint i; TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context); if (!tp_handles_are_valid (contact_repo, contacts, FALSE, &error)) { dbus_g_method_return_error (context, error); g_error_free (error); return; } self->refresh_contact_info_called++; for (i = 0; i < contacts->len; i++) { TpHandle handle = g_array_index (contacts, guint, i); // actually update the info (if not using the default info) so there is an actual change g_hash_table_insert (self->priv->contact_info, GUINT_TO_POINTER (handle), g_ptr_array_ref (self->priv->default_contact_info)); tp_svc_connection_interface_contact_info_emit_contact_info_changed (self, handle, self->priv->default_contact_info); } tp_svc_connection_interface_contact_info_return_from_refresh_contact_info ( context); } static void my_request_contact_info (TpSvcConnectionInterfaceContactInfo *obj, guint handle, DBusGMethodInvocation *context) { TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (obj); TpBaseConnection *base = TP_BASE_CONNECTION (obj); TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (base, TP_HANDLE_TYPE_CONTACT); GError *error = NULL; GPtrArray *ret; TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context); if (!tp_handle_is_valid (contact_repo, handle, &error)) { dbus_g_method_return_error (context, error); g_error_free (error); return; } ret = lookup_contact_info (self, handle); tp_svc_connection_interface_contact_info_return_from_request_contact_info ( context, ret); g_ptr_array_unref (ret); } static void my_set_contact_info (TpSvcConnectionInterfaceContactInfo *obj, const GPtrArray *info, DBusGMethodInvocation *context) { TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (obj); TpBaseConnection *base = TP_BASE_CONNECTION (obj); GPtrArray *copy; guint i; TpHandle self_handle; TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context); /* Deep copy info */ copy = g_ptr_array_new_with_free_func ((GDestroyNotify) g_value_array_free); for (i = 0; i < info->len; i++) g_ptr_array_add (copy, g_value_array_copy (g_ptr_array_index (info, i))); self_handle = tp_base_connection_get_self_handle (base); g_hash_table_insert (self->priv->contact_info, GUINT_TO_POINTER (self_handle), copy); tp_svc_connection_interface_contact_info_return_from_set_contact_info ( context); } static void init_contact_info (gpointer g_iface, gpointer iface_data) { TpSvcConnectionInterfaceContactInfoClass *klass = g_iface; #define IMPLEMENT(x) tp_svc_connection_interface_contact_info_implement_##x (\ klass, my_##x) IMPLEMENT (refresh_contact_info); IMPLEMENT (request_contact_info); IMPLEMENT (set_contact_info); #undef IMPLEMENT } static void my_request_client_types (TpSvcConnectionInterfaceClientTypes *obj, guint handle, DBusGMethodInvocation *context) { TpTestsContactsConnection *self = TP_TESTS_CONTACTS_CONNECTION (obj); TpBaseConnection *base = TP_BASE_CONNECTION (obj); TpHandleRepoIface *contact_repo = tp_base_connection_get_handles (base, TP_HANDLE_TYPE_CONTACT); GError *error = NULL; gchar **types; TP_BASE_CONNECTION_ERROR_IF_NOT_CONNECTED (base, context); if (!tp_handle_is_valid (contact_repo, handle, &error)) { dbus_g_method_return_error (context, error); g_error_free (error); return; } types = g_hash_table_lookup(self->priv->client_types, GUINT_TO_POINTER (handle)); tp_svc_connection_interface_client_types_return_from_request_client_types ( context, (const gchar **) types); } static void init_client_types (gpointer g_iface, gpointer iface_data) { TpSvcConnectionInterfaceClientTypesClass *klass = g_iface; #define IMPLEMENT(x) tp_svc_connection_interface_client_types_implement_##x (\ klass, my_##x) /* IMPLEMENT (get_client_types); */ IMPLEMENT (request_client_types); #undef IMPLEMENT } /* =============== Legacy version (no Contacts interface) ================= */ G_DEFINE_TYPE (TpTestsLegacyContactsConnection, tp_tests_legacy_contacts_connection, TP_TESTS_TYPE_CONTACTS_CONNECTION); enum { LEGACY_PROP_HAS_IMMORTAL_HANDLES = 1 }; static void legacy_contacts_connection_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { switch (property_id) { case LEGACY_PROP_HAS_IMMORTAL_HANDLES: /* Pretend we don't. */ g_value_set_boolean (value, FALSE); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void tp_tests_legacy_contacts_connection_init (TpTestsLegacyContactsConnection *self) { } static void tp_tests_legacy_contacts_connection_class_init ( TpTestsLegacyContactsConnectionClass *klass) { /* Leave Contacts out of the interfaces we say are present, so clients * won't use it */ static const gchar *interfaces_always_present[] = { TP_IFACE_CONNECTION_INTERFACE_ALIASING, TP_IFACE_CONNECTION_INTERFACE_AVATARS, TP_IFACE_CONNECTION_INTERFACE_PRESENCE, TP_IFACE_CONNECTION_INTERFACE_SIMPLE_PRESENCE, TP_IFACE_CONNECTION_INTERFACE_LOCATION, TP_IFACE_CONNECTION_INTERFACE_REQUESTS, NULL }; TpBaseConnectionClass *base_class = (TpBaseConnectionClass *) klass; GObjectClass *object_class = (GObjectClass *) klass; object_class->get_property = legacy_contacts_connection_get_property; base_class->interfaces_always_present = interfaces_always_present; g_object_class_override_property (object_class, LEGACY_PROP_HAS_IMMORTAL_HANDLES, "has-immortal-handles"); } /* =============== No Requests and no ContactCapabilities ================= */ G_DEFINE_TYPE (TpTestsNoRequestsConnection, tp_tests_no_requests_connection, TP_TESTS_TYPE_CONTACTS_CONNECTION); static void tp_tests_no_requests_connection_init (TpTestsNoRequestsConnection *self) { } static void tp_tests_no_requests_connection_class_init ( TpTestsNoRequestsConnectionClass *klass) { static const gchar *interfaces_always_present[] = { TP_IFACE_CONNECTION_INTERFACE_ALIASING, TP_IFACE_CONNECTION_INTERFACE_AVATARS, TP_IFACE_CONNECTION_INTERFACE_CONTACTS, TP_IFACE_CONNECTION_INTERFACE_PRESENCE, TP_IFACE_CONNECTION_INTERFACE_SIMPLE_PRESENCE, TP_IFACE_CONNECTION_INTERFACE_LOCATION, NULL }; TpBaseConnectionClass *base_class = (TpBaseConnectionClass *) klass; base_class->interfaces_always_present = interfaces_always_present; } telepathy-qt-0.9.3/tests/lib/glib/contact-list-manager.c0000644000175200001440000004734512000056607025436 0ustar00collabora-develusers00000000000000/* * Example channel manager for contact lists * * Copyright © 2007-2010 Collabora Ltd. * Copyright © 2007-2010 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #include "contact-list-manager.h" #include #include struct _TestContactListManagerPrivate { TpBaseConnection *conn; gulong status_changed_id; /* TpHandle => ContactDetails */ GHashTable *contact_details; TpHandleRepoIface *contact_repo; TpHandleRepoIface *group_repo; TpHandleSet *groups; }; static void contact_groups_iface_init (TpContactGroupListInterface *iface); static void mutable_contact_groups_iface_init ( TpMutableContactGroupListInterface *iface); G_DEFINE_TYPE_WITH_CODE (TestContactListManager, test_contact_list_manager, TP_TYPE_BASE_CONTACT_LIST, G_IMPLEMENT_INTERFACE (TP_TYPE_CONTACT_GROUP_LIST, contact_groups_iface_init); G_IMPLEMENT_INTERFACE (TP_TYPE_MUTABLE_CONTACT_GROUP_LIST, mutable_contact_groups_iface_init)) typedef struct { TpSubscriptionState subscribe; TpSubscriptionState publish; gchar *publish_request; TpHandleSet *groups; TpHandle handle; TpHandleRepoIface *contact_repo; } ContactDetails; static void contact_detail_destroy (gpointer p) { ContactDetails *d = p; g_free (d->publish_request); tp_handle_set_destroy (d->groups); g_slice_free (ContactDetails, d); } static ContactDetails * lookup_contact (TestContactListManager *self, TpHandle handle) { return g_hash_table_lookup (self->priv->contact_details, GUINT_TO_POINTER (handle)); } static ContactDetails * ensure_contact (TestContactListManager *self, TpHandle handle) { ContactDetails *d = lookup_contact (self, handle); if (d == NULL) { d = g_slice_new0 (ContactDetails); d->subscribe = TP_SUBSCRIPTION_STATE_NO; d->publish = TP_SUBSCRIPTION_STATE_NO; d->publish_request = NULL; d->groups = tp_handle_set_new (self->priv->group_repo); d->handle = handle; d->contact_repo = self->priv->contact_repo; g_hash_table_insert (self->priv->contact_details, GUINT_TO_POINTER (handle), d); } return d; } static void test_contact_list_manager_init (TestContactListManager *self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, TEST_TYPE_CONTACT_LIST_MANAGER, TestContactListManagerPrivate); self->priv->contact_details = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, contact_detail_destroy); } static void close_all (TestContactListManager *self) { if (self->priv->status_changed_id != 0) { g_signal_handler_disconnect (self->priv->conn, self->priv->status_changed_id); self->priv->status_changed_id = 0; } tp_clear_pointer (&self->priv->contact_details, g_hash_table_unref); tp_clear_pointer (&self->priv->groups, tp_handle_set_destroy); } static void dispose (GObject *object) { TestContactListManager *self = TEST_CONTACT_LIST_MANAGER (object); close_all (self); ((GObjectClass *) test_contact_list_manager_parent_class)->dispose ( object); } static TpHandleSet * contact_list_dup_contacts (TpBaseContactList *base) { TestContactListManager *self = TEST_CONTACT_LIST_MANAGER (base); TpHandleSet *set; GHashTableIter iter; gpointer k, v; set = tp_handle_set_new (self->priv->contact_repo); g_hash_table_iter_init (&iter, self->priv->contact_details); while (g_hash_table_iter_next (&iter, &k, &v)) { ContactDetails *d = v; /* add all the interesting items */ if (d->subscribe != TP_SUBSCRIPTION_STATE_NO || d->publish != TP_SUBSCRIPTION_STATE_NO) tp_handle_set_add (set, GPOINTER_TO_UINT (k)); } return set; } static void contact_list_dup_states (TpBaseContactList *base, TpHandle contact, TpSubscriptionState *subscribe, TpSubscriptionState *publish, gchar **publish_request) { TestContactListManager *self = TEST_CONTACT_LIST_MANAGER (base); ContactDetails *d = lookup_contact (self, contact); if (d == NULL) { if (subscribe != NULL) *subscribe = TP_SUBSCRIPTION_STATE_NO; if (publish != NULL) *publish = TP_SUBSCRIPTION_STATE_NO; if (publish_request != NULL) *publish_request = NULL; } else { if (subscribe != NULL) *subscribe = d->subscribe; if (publish != NULL) *publish = d->publish; if (publish_request != NULL) *publish_request = g_strdup (d->publish_request); } } static GStrv contact_list_dup_groups (TpBaseContactList *base) { TestContactListManager *self = TEST_CONTACT_LIST_MANAGER (base); GPtrArray *ret; if (self->priv->groups != NULL) { TpIntSetFastIter iter; TpHandle group; ret = g_ptr_array_sized_new (tp_handle_set_size (self->priv->groups) + 1); tp_intset_fast_iter_init (&iter, tp_handle_set_peek (self->priv->groups)); while (tp_intset_fast_iter_next (&iter, &group)) { g_ptr_array_add (ret, g_strdup (tp_handle_inspect ( self->priv->group_repo, group))); } } else { ret = g_ptr_array_sized_new (1); } g_ptr_array_add (ret, NULL); return (GStrv) g_ptr_array_free (ret, FALSE); } static GStrv contact_list_dup_contact_groups (TpBaseContactList *base, TpHandle contact) { TestContactListManager *self = TEST_CONTACT_LIST_MANAGER (base); ContactDetails *d = lookup_contact (self, contact); GPtrArray *ret; if (d != NULL && d->groups != NULL) { TpIntSetFastIter iter; TpHandle group; ret = g_ptr_array_sized_new (tp_handle_set_size (d->groups) + 1); tp_intset_fast_iter_init (&iter, tp_handle_set_peek (d->groups)); while (tp_intset_fast_iter_next (&iter, &group)) { g_ptr_array_add (ret, g_strdup (tp_handle_inspect ( self->priv->group_repo, group))); } } else { ret = g_ptr_array_sized_new (1); } g_ptr_array_add (ret, NULL); return (GStrv) g_ptr_array_free (ret, FALSE); } static TpHandleSet * contact_list_dup_group_members (TpBaseContactList *base, const gchar *group) { TestContactListManager *self = TEST_CONTACT_LIST_MANAGER (base); TpHandleSet *set; TpHandle group_handle; GHashTableIter iter; gpointer k, v; set = tp_handle_set_new (self->priv->contact_repo); group_handle = tp_handle_lookup (self->priv->group_repo, group, NULL, NULL); if (G_UNLIKELY (group_handle == 0)) { /* clearly it doesn't have members */ return set; } g_hash_table_iter_init (&iter, self->priv->contact_details); while (g_hash_table_iter_next (&iter, &k, &v)) { ContactDetails *d = v; if (d->groups != NULL && tp_handle_set_is_member (d->groups, group_handle)) tp_handle_set_add (set, GPOINTER_TO_UINT (k)); } return set; } static void contact_list_set_contact_groups_async (TpBaseContactList *base, TpHandle contact, const gchar * const *names, gsize n, GAsyncReadyCallback callback, gpointer user_data) { TestContactListManager *self = TEST_CONTACT_LIST_MANAGER (base); ContactDetails *d; TpIntset *set, *added_set, *removed_set; GPtrArray *added_names, *removed_names; TpIntSetFastIter iter; TpHandle group_handle; guint i; d = ensure_contact (self, contact); set = tp_intset_new (); for (i = 0; i < n; i++) { group_handle = tp_handle_ensure (self->priv->group_repo, names[i], NULL, NULL); tp_intset_add (set, group_handle); } added_set = tp_intset_difference (set, tp_handle_set_peek (d->groups)); added_names = g_ptr_array_sized_new (tp_intset_size (added_set)); tp_intset_fast_iter_init (&iter, added_set); while (tp_intset_fast_iter_next (&iter, &group_handle)) { g_ptr_array_add (added_names, (gchar *) tp_handle_inspect ( self->priv->group_repo, group_handle)); } tp_intset_destroy (added_set); removed_set = tp_intset_difference (tp_handle_set_peek (d->groups), set); removed_names = g_ptr_array_sized_new (tp_intset_size (removed_set)); tp_intset_fast_iter_init (&iter, removed_set); while (tp_intset_fast_iter_next (&iter, &group_handle)) { g_ptr_array_add (removed_names, (gchar *) tp_handle_inspect ( self->priv->group_repo, group_handle)); } tp_intset_destroy (removed_set); tp_handle_set_destroy (d->groups); d->groups = tp_handle_set_new_from_intset (self->priv->group_repo, set); tp_intset_destroy (set); tp_base_contact_list_one_contact_groups_changed (base, contact, (const gchar * const *) added_names->pdata, added_names->len, (const gchar * const *) removed_names->pdata, removed_names->len); tp_simple_async_report_success_in_idle ((GObject *) self, callback, user_data, contact_list_set_contact_groups_async); g_ptr_array_unref (added_names); g_ptr_array_unref (removed_names); } static void contact_list_set_group_members_async (TpBaseContactList *base, const gchar *normalized_group, TpHandleSet *contacts, GAsyncReadyCallback callback, gpointer user_data) { GSimpleAsyncResult *simple; simple = g_simple_async_result_new_error ((GObject *) base, callback, user_data, TP_ERROR, TP_ERROR_NOT_IMPLEMENTED, "Not implemented"); g_simple_async_result_complete_in_idle (simple); g_object_unref (simple); } static void contact_list_add_to_group_async (TpBaseContactList *base, const gchar *group, TpHandleSet *contacts, GAsyncReadyCallback callback, gpointer user_data) { GSimpleAsyncResult *simple; simple = g_simple_async_result_new_error ((GObject *) base, callback, user_data, TP_ERROR, TP_ERROR_NOT_IMPLEMENTED, "Not implemented"); g_simple_async_result_complete_in_idle (simple); g_object_unref (simple); } static void contact_list_remove_from_group_async (TpBaseContactList *base, const gchar *group, TpHandleSet *contacts, GAsyncReadyCallback callback, gpointer user_data) { GSimpleAsyncResult *simple; simple = g_simple_async_result_new_error ((GObject *) base, callback, user_data, TP_ERROR, TP_ERROR_NOT_IMPLEMENTED, "Not implemented"); g_simple_async_result_complete_in_idle (simple); g_object_unref (simple); } static void contact_list_remove_group_async (TpBaseContactList *base, const gchar *group, GAsyncReadyCallback callback, gpointer user_data) { GSimpleAsyncResult *simple; simple = g_simple_async_result_new_error ((GObject *) base, callback, user_data, TP_ERROR, TP_ERROR_NOT_IMPLEMENTED, "Not implemented"); g_simple_async_result_complete_in_idle (simple); g_object_unref (simple); } static void status_changed_cb (TpBaseConnection *conn, guint status, guint reason, TestContactListManager *self) { switch (status) { case TP_CONNECTION_STATUS_CONNECTED: { tp_base_contact_list_set_list_received (TP_BASE_CONTACT_LIST (self)); } break; case TP_CONNECTION_STATUS_DISCONNECTED: { close_all (self); } break; } } static void constructed (GObject *object) { TestContactListManager *self = TEST_CONTACT_LIST_MANAGER (object); void (*chain_up) (GObject *) = ((GObjectClass *) test_contact_list_manager_parent_class)->constructed; if (chain_up != NULL) { chain_up (object); } self->priv->conn = tp_base_contact_list_get_connection ( TP_BASE_CONTACT_LIST (self), NULL); self->priv->status_changed_id = g_signal_connect (self->priv->conn, "status-changed", G_CALLBACK (status_changed_cb), self); self->priv->contact_repo = tp_base_connection_get_handles (self->priv->conn, TP_HANDLE_TYPE_CONTACT); self->priv->group_repo = tp_base_connection_get_handles (self->priv->conn, TP_HANDLE_TYPE_GROUP); self->priv->groups = tp_handle_set_new (self->priv->group_repo); } static void contact_groups_iface_init (TpContactGroupListInterface *iface) { iface->dup_groups = contact_list_dup_groups; iface->dup_contact_groups = contact_list_dup_contact_groups; iface->dup_group_members = contact_list_dup_group_members; } static void mutable_contact_groups_iface_init ( TpMutableContactGroupListInterface *iface) { iface->set_contact_groups_async = contact_list_set_contact_groups_async; iface->set_group_members_async = contact_list_set_group_members_async; iface->add_to_group_async = contact_list_add_to_group_async; iface->remove_from_group_async = contact_list_remove_from_group_async; iface->remove_group_async = contact_list_remove_group_async; } static void test_contact_list_manager_class_init (TestContactListManagerClass *klass) { GObjectClass *object_class = (GObjectClass *) klass; TpBaseContactListClass *base_class =(TpBaseContactListClass *) klass; g_type_class_add_private (klass, sizeof (TestContactListManagerPrivate)); object_class->constructed = constructed; object_class->dispose = dispose; base_class->dup_states = contact_list_dup_states; base_class->dup_contacts = contact_list_dup_contacts; } void test_contact_list_manager_add_to_group (TestContactListManager *self, const gchar *group_name, TpHandle member) { TpBaseContactList *base = TP_BASE_CONTACT_LIST (self); ContactDetails *d = ensure_contact (self, member); TpHandle group_handle; group_handle = tp_handle_ensure (self->priv->group_repo, group_name, NULL, NULL); tp_handle_set_add (d->groups, group_handle); tp_base_contact_list_one_contact_groups_changed (base, member, &group_name, 1, NULL, 0); } void test_contact_list_manager_remove_from_group (TestContactListManager *self, const gchar *group_name, TpHandle member) { TpBaseContactList *base = TP_BASE_CONTACT_LIST (self); ContactDetails *d = lookup_contact (self, member); TpHandle group_handle; if (d == NULL) return; group_handle = tp_handle_ensure (self->priv->group_repo, group_name, NULL, NULL); tp_handle_set_remove (d->groups, group_handle); tp_base_contact_list_one_contact_groups_changed (base, member, NULL, 0, &group_name, 1); } typedef struct { TestContactListManager *self; TpHandleSet *handles; } SelfAndContact; static SelfAndContact * self_and_contact_new (TestContactListManager *self, TpHandleSet *handles) { SelfAndContact *ret = g_slice_new0 (SelfAndContact); ret->self = g_object_ref (self); ret->handles = tp_handle_set_copy (handles); return ret; } static void self_and_contact_destroy (gpointer p) { SelfAndContact *s = p; tp_handle_set_destroy (s->handles); g_object_unref (s->self); g_slice_free (SelfAndContact, s); } static gboolean receive_authorized (gpointer p) { SelfAndContact *s = p; GArray *handles_array; guint i; handles_array = tp_handle_set_to_array (s->handles); for (i = 0; i < handles_array->len; i++) { ContactDetails *d = lookup_contact (s->self, g_array_index (handles_array, TpHandle, i)); if (d == NULL) continue; d->subscribe = TP_SUBSCRIPTION_STATE_YES; /* if we're not publishing to them, also pretend they have asked us to do so */ if (d->publish != TP_SUBSCRIPTION_STATE_YES) { d->publish = TP_SUBSCRIPTION_STATE_ASK; tp_clear_pointer (&d->publish_request, g_free); d->publish_request = g_strdup ("automatic publish request"); } } g_array_unref (handles_array); tp_base_contact_list_contacts_changed (TP_BASE_CONTACT_LIST (s->self), s->handles, NULL); return FALSE; } static gboolean receive_unauthorized (gpointer p) { SelfAndContact *s = p; GArray *handles_array; guint i; handles_array = tp_handle_set_to_array (s->handles); for (i = 0; i < handles_array->len; i++) { ContactDetails *d = lookup_contact (s->self, g_array_index (handles_array, TpHandle, i)); if (d == NULL) continue; d->subscribe = TP_SUBSCRIPTION_STATE_REMOVED_REMOTELY; } g_array_unref (handles_array); tp_base_contact_list_contacts_changed (TP_BASE_CONTACT_LIST (s->self), s->handles, NULL); return FALSE; } void test_contact_list_manager_request_subscription (TestContactListManager *self, guint n_members, TpHandle *members, const gchar *message) { TpHandleSet *handles; guint i; gchar *message_lc; handles = tp_handle_set_new (self->priv->contact_repo); for (i = 0; i < n_members; i++) { ContactDetails *d = ensure_contact (self, members[i]); if (d->subscribe == TP_SUBSCRIPTION_STATE_YES) continue; d->subscribe = TP_SUBSCRIPTION_STATE_ASK; tp_handle_set_add (handles, members[i]); } tp_base_contact_list_contacts_changed (TP_BASE_CONTACT_LIST (self), handles, NULL); message_lc = g_ascii_strdown (message, -1); if (strstr (message_lc, "please") != NULL) { g_idle_add_full (G_PRIORITY_DEFAULT, receive_authorized, self_and_contact_new (self, handles), self_and_contact_destroy); } else if (strstr (message_lc, "no") != NULL) { g_idle_add_full (G_PRIORITY_DEFAULT, receive_unauthorized, self_and_contact_new (self, handles), self_and_contact_destroy); } g_free (message_lc); tp_handle_set_destroy (handles); } void test_contact_list_manager_unsubscribe (TestContactListManager *self, guint n_members, TpHandle *members) { TpHandleSet *handles; guint i; handles = tp_handle_set_new (self->priv->contact_repo); for (i = 0; i < n_members; i++) { ContactDetails *d = lookup_contact (self, members[i]); if (d == NULL || d->subscribe == TP_SUBSCRIPTION_STATE_NO) continue; d->subscribe = TP_SUBSCRIPTION_STATE_NO; tp_handle_set_add (handles, members[i]); } tp_base_contact_list_contacts_changed (TP_BASE_CONTACT_LIST (self), handles, NULL); tp_handle_set_destroy (handles); } void test_contact_list_manager_authorize_publication (TestContactListManager *self, guint n_members, TpHandle *members) { TpHandleSet *handles; guint i; handles = tp_handle_set_new (self->priv->contact_repo); for (i = 0; i < n_members; i++) { ContactDetails *d = lookup_contact (self, members[i]); if (d == NULL || d->publish != TP_SUBSCRIPTION_STATE_ASK) continue; d->publish = TP_SUBSCRIPTION_STATE_YES; tp_clear_pointer (&d->publish_request, g_free); tp_handle_set_add (handles, members[i]); } tp_base_contact_list_contacts_changed (TP_BASE_CONTACT_LIST (self), handles, NULL); tp_handle_set_destroy (handles); } void test_contact_list_manager_unpublish (TestContactListManager *self, guint n_members, TpHandle *members) { TpHandleSet *handles; guint i; handles = tp_handle_set_new (self->priv->contact_repo); for (i = 0; i < n_members; i++) { ContactDetails *d = lookup_contact (self, members[i]); if (d == NULL || d->publish == TP_SUBSCRIPTION_STATE_NO) continue; d->publish = TP_SUBSCRIPTION_STATE_NO; tp_clear_pointer (&d->publish_request, g_free); tp_handle_set_add (handles, members[i]); } tp_base_contact_list_contacts_changed (TP_BASE_CONTACT_LIST (self), handles, NULL); tp_handle_set_destroy (handles); } void test_contact_list_manager_remove (TestContactListManager *self, guint n_members, TpHandle *members) { TpHandleSet *handles; guint i; handles = tp_handle_set_new (self->priv->contact_repo); for (i = 0; i < n_members; i++) { ContactDetails *d = lookup_contact (self, members[i]); if (d == NULL) continue; g_hash_table_remove (self->priv->contact_details, GUINT_TO_POINTER (members[i])); tp_handle_set_add (handles, members[i]); } tp_base_contact_list_contacts_changed (TP_BASE_CONTACT_LIST (self), NULL, handles); tp_handle_set_destroy (handles); } telepathy-qt-0.9.3/tests/lib/glib/simple-manager.c0000644000175200001440000000455312000056607024315 0ustar00collabora-develusers00000000000000/* * simple-manager.c - an simple connection manager * * Copyright (C) 2007-2008 Collabora Ltd. * Copyright (C) 2007-2008 Nokia Corporation * * Copying and distribution of this file, with or without modification, * are permitted in any medium without royalty provided the copyright * notice and this notice are preserved. */ #include "simple-manager.h" #include #include #include #include #include "simple-conn.h" #include "util.h" G_DEFINE_TYPE (TpTestsSimpleConnectionManager, tp_tests_simple_connection_manager, TP_TYPE_BASE_CONNECTION_MANAGER) /* type definition stuff */ static void tp_tests_simple_connection_manager_init (TpTestsSimpleConnectionManager *self) { } /* private data */ typedef struct { gchar *account; } TpTestsSimpleParams; static const TpCMParamSpec simple_params[] = { { "account", DBUS_TYPE_STRING_AS_STRING, G_TYPE_STRING, TP_CONN_MGR_PARAM_FLAG_REQUIRED | TP_CONN_MGR_PARAM_FLAG_REGISTER, NULL, G_STRUCT_OFFSET (TpTestsSimpleParams, account), tp_cm_param_filter_string_nonempty, NULL }, { NULL } }; static gpointer alloc_params (void) { return g_slice_new0 (TpTestsSimpleParams); } static void free_params (gpointer p) { TpTestsSimpleParams *params = p; g_free (params->account); g_slice_free (TpTestsSimpleParams, params); } static const TpCMProtocolSpec simple_protocols[] = { { "simple", simple_params, alloc_params, free_params }, { NULL, NULL } }; static TpBaseConnection * new_connection (TpBaseConnectionManager *self, const gchar *proto, TpIntSet *params_present, gpointer parsed_params, GError **error) { TpTestsSimpleParams *params = parsed_params; TpTestsSimpleConnection *conn = TP_TESTS_SIMPLE_CONNECTION ( tp_tests_object_new_static_class (TP_TESTS_TYPE_SIMPLE_CONNECTION, "account", params->account, "protocol", proto, NULL)); return (TpBaseConnection *) conn; } static void tp_tests_simple_connection_manager_class_init ( TpTestsSimpleConnectionManagerClass *klass) { TpBaseConnectionManagerClass *base_class = (TpBaseConnectionManagerClass *) klass; base_class->new_connection = new_connection; base_class->cm_dbus_name = "simple"; base_class->protocol_params = simple_protocols; } telepathy-qt-0.9.3/tests/lib/test-thread-helper.cpp0000644000175200001440000000173712000056607024541 0ustar00collabora-develusers00000000000000#include "tests/lib/test-thread-helper.h" #include #include TestThreadHelperBase::TestThreadHelperBase(ThreadObjectBase *threadObject) { Q_ASSERT(threadObject); mThread = new QThread; mThreadObject = threadObject; mThreadObject->moveToThread(mThread); QEventLoop loop; QObject::connect(mThread, SIGNAL(started()), &loop, SLOT(quit())); QTimer::singleShot(0, mThread, SLOT(start())); loop.exec(); } TestThreadHelperBase::~TestThreadHelperBase() { QMetaObject::invokeMethod(mThreadObject, "deleteLater"); mThread->quit(); mThread->wait(); mThread->deleteLater(); QCoreApplication::processEvents(); } void TestThreadHelperBase::executeCallback() { QEventLoop loop; QObject::connect(mThreadObject, SIGNAL(callbackExecutionFinished()), &loop, SLOT(quit())); QMetaObject::invokeMethod(mThreadObject, "executeCallback"); loop.exec(); } #include "_gen/test-thread-helper.h.moc.hpp" telepathy-qt-0.9.3/tests/test-key-file.ini0000644000175200001440000000011612000056607022737 0ustar00collabora-develusers00000000000000a=1 b=2 [test group 1] c=\s\t\n\r\\ d=true [test group 2] e = space telepathy-qt-0.9.3/tests/README0000644000175200001440000000065012000056607020437 0ustar00collabora-develusers00000000000000Tests should be divided up by the environment they require in order to operate correctly. Where to put new tests: * /tests/ if they're simple regression tests in pure C++ that don't access D-Bus (these are likely to be rare) * /tests/dbus/ if they touch the session bus (a temporary session bus will be used) /tests/lib/ contains support code, some of it taken from the telepathy-glib examples and regression tests. telepathy-qt-0.9.3/tests/utils.cpp0000644000175200001440000000127712000056607021431 0ustar00collabora-develusers00000000000000#include #include using namespace Tp; class TestUtils : public QObject { Q_OBJECT private Q_SLOTS: void testUtils(); }; void TestUtils::testUtils() { QString res; res = escapeAsIdentifier(QString::fromLatin1("")); QCOMPARE(res, QString::fromLatin1("_")); res = escapeAsIdentifier(QString::fromLatin1("badger")); QCOMPARE(res, QString::fromLatin1("badger")); res = escapeAsIdentifier(QString::fromLatin1("0123abc_xyz")); QCOMPARE(res, QString::fromLatin1("_30123abc_5fxyz")); res = escapeAsIdentifier(QString::fromUtf8("©")); QCOMPARE(res, QString::fromLatin1("_c2_a9")); } QTEST_MAIN(TestUtils) #include "_gen/utils.cpp.moc.hpp" telepathy-qt-0.9.3/tests/profile.cpp0000644000175200001440000001242212000056607021723 0ustar00collabora-develusers00000000000000#include #include #include using namespace Tp; class TestProfile : public QObject { Q_OBJECT public: TestProfile(QObject *parent = 0); private Q_SLOTS: void testProfile(); }; TestProfile::TestProfile(QObject *parent) : QObject(parent) { Tp::enableDebug(true); Tp::enableWarnings(true); } void TestProfile::testProfile() { QString top_srcdir = QString::fromLocal8Bit(::getenv("abs_top_srcdir")); if (!top_srcdir.isEmpty()) { QDir::setCurrent(top_srcdir + QLatin1String("/tests")); } ProfilePtr profile = Profile::createForServiceName(QLatin1String("test-profile-file-not-found")); QCOMPARE(profile->isValid(), false); profile = Profile::createForServiceName(QLatin1String("test-profile-malformed")); QCOMPARE(profile->isValid(), false); profile = Profile::createForServiceName(QLatin1String("test-profile-invalid-service-id")); QCOMPARE(profile->isValid(), false); profile = Profile::createForServiceName(QLatin1String("test-profile-non-im-type")); QCOMPARE(profile->isValid(), false); profile = Profile::createForFileName(QLatin1String("telepathy/profiles/test-profile-non-im-type.profile")); QCOMPARE(profile->isValid(), true); profile = Profile::createForServiceName(QLatin1String("test-profile")); QCOMPARE(profile->isValid(), true); QCOMPARE(profile->serviceName(), QLatin1String("test-profile")); QCOMPARE(profile->type(), QLatin1String("IM")); QCOMPARE(profile->provider(), QLatin1String("TestProfileProvider")); QCOMPARE(profile->name(), QLatin1String("TestProfile")); QCOMPARE(profile->cmName(), QLatin1String("testprofilecm")); QCOMPARE(profile->protocolName(), QLatin1String("testprofileproto")); QCOMPARE(profile->parameters().isEmpty(), false); QCOMPARE(profile->parameters().count(), 2); QCOMPARE(profile->hasParameter(QLatin1String("foo")), false); QCOMPARE(profile->hasParameter(QLatin1String("server")), true); Profile::Parameter param = profile->parameter(QLatin1String("server")); QCOMPARE(param.name(), QLatin1String("server")); QCOMPARE(param.dbusSignature(), QDBusSignature(QLatin1String("s"))); QCOMPARE(param.type(), QVariant::String); QCOMPARE(param.value(), QVariant(QLatin1String("profile.com"))); QCOMPARE(param.label(), QString()); QCOMPARE(param.isMandatory(), true); QCOMPARE(profile->hasParameter(QLatin1String("port")), true); param = profile->parameter(QLatin1String("port")); QCOMPARE(param.name(), QLatin1String("port")); QCOMPARE(param.dbusSignature(), QDBusSignature(QLatin1String("u"))); QCOMPARE(param.type(), QVariant::UInt); QCOMPARE(param.value(), QVariant(QLatin1String("1111"))); QCOMPARE(param.label(), QString()); QCOMPARE(param.isMandatory(), true); QCOMPARE(profile->presences().isEmpty(), false); QCOMPARE(profile->presences().count(), 5); QCOMPARE(profile->hasPresence(QLatin1String("foo")), false); QCOMPARE(profile->hasPresence(QLatin1String("available")), true); Profile::Presence presence = profile->presence(QLatin1String("available")); QCOMPARE(presence.id(), QLatin1String("available")); QCOMPARE(presence.label(), QLatin1String("Online")); QCOMPARE(presence.iconName(), QLatin1String("online")); QCOMPARE(presence.isDisabled(), false); QCOMPARE(profile->hasPresence(QLatin1String("offline")), true); presence = profile->presence(QLatin1String("offline")); QCOMPARE(presence.id(), QLatin1String("offline")); QCOMPARE(presence.label(), QLatin1String("Offline")); QCOMPARE(presence.iconName(), QString()); QCOMPARE(presence.isDisabled(), false); QCOMPARE(profile->hasPresence(QLatin1String("away")), true); presence = profile->presence(QLatin1String("away")); QCOMPARE(presence.id(), QLatin1String("away")); QCOMPARE(presence.label(), QLatin1String("Gone")); QCOMPARE(presence.iconName(), QString()); QCOMPARE(presence.isDisabled(), false); QCOMPARE(profile->hasPresence(QLatin1String("hidden")), true); presence = profile->presence(QLatin1String("hidden")); QCOMPARE(presence.id(), QLatin1String("hidden")); QCOMPARE(presence.label(), QString()); QCOMPARE(presence.iconName(), QString()); QCOMPARE(presence.isDisabled(), true); QCOMPARE(profile->unsupportedChannelClassSpecs().isEmpty(), false); QCOMPARE(profile->unsupportedChannelClassSpecs().count(), 2); RequestableChannelClassSpec rccSpec = profile->unsupportedChannelClassSpecs().first(); QCOMPARE(rccSpec.hasTargetHandleType(), true); QCOMPARE(rccSpec.targetHandleType(), HandleTypeContact); QCOMPARE(rccSpec.channelType(), QLatin1String("org.freedesktop.Telepathy.Channel.Type.Text")); profile = Profile::createForServiceName(QLatin1String("test-profile-no-icon-and-provider")); QCOMPARE(profile->isValid(), true); QCOMPARE(profile->serviceName(), QLatin1String("test-profile-no-icon-and-provider")); QCOMPARE(profile->type(), QLatin1String("IM")); QCOMPARE(profile->provider().isEmpty(), true); QCOMPARE(profile->cmName(), QLatin1String("testprofilecm")); QCOMPARE(profile->protocolName(), QLatin1String("testprofileproto")); QCOMPARE(profile->iconName().isEmpty(), true); } QTEST_MAIN(TestProfile) #include "_gen/profile.cpp.moc.hpp" telepathy-qt-0.9.3/tests/callbacks.cpp0000644000175200001440000001634412000056607022211 0ustar00collabora-develusers00000000000000#include #include using namespace Tp; class TestCallbacks : public QObject { Q_OBJECT private Q_SLOTS: void testMemFun(); void testPtrFun(); }; struct MyCallbacks { MyCallbacks() { reset(); } void testVV() { mVVCalled++; } void testVI1(int a1) { QCOMPARE(a1, 1); mVI1Called++; } void testVI2(int a1, int a2) { QCOMPARE(a1, 1); QCOMPARE(a2, 2); mVI2Called++; } void testVI3(int a1, int a2, int a3) { QCOMPARE(a1, 1); QCOMPARE(a2, 2); QCOMPARE(a3, 3); mVI3Called++; } void testVI4(int a1, int a2, int a3, int a4) { QCOMPARE(a1, 1); QCOMPARE(a2, 2); QCOMPARE(a3, 3); QCOMPARE(a4, 4); mVI4Called++; } void testVI5(int a1, int a2, int a3, int a4, int a5) { QCOMPARE(a1, 1); QCOMPARE(a2, 2); QCOMPARE(a3, 3); QCOMPARE(a4, 4); QCOMPARE(a5, 5); mVI5Called++; } void testVI6(int a1, int a2, int a3, int a4, int a5, int a6) { QCOMPARE(a1, 1); QCOMPARE(a2, 2); QCOMPARE(a3, 3); QCOMPARE(a4, 4); QCOMPARE(a5, 5); QCOMPARE(a6, 6); mVI6Called++; } void testVI7(int a1, int a2, int a3, int a4, int a5, int a6, int a7) { QCOMPARE(a1, 1); QCOMPARE(a2, 2); QCOMPARE(a3, 3); QCOMPARE(a4, 4); QCOMPARE(a5, 5); QCOMPARE(a6, 6); QCOMPARE(a7, 7); mVI7Called++; } void reset() { mVVCalled = false; mVI1Called = false; mVI2Called = false; mVI3Called = false; mVI4Called = false; mVI5Called = false; mVI6Called = false; mVI7Called = false; } void verifyCalled(bool vv, bool vi1, bool vi2, bool vi3, bool vi4, bool vi5, bool vi6, bool vi7) { QCOMPARE(mVVCalled, vv); QCOMPARE(mVI1Called, vi1); QCOMPARE(mVI2Called, vi2); QCOMPARE(mVI3Called, vi3); QCOMPARE(mVI4Called, vi4); QCOMPARE(mVI5Called, vi5); QCOMPARE(mVI6Called, vi6); QCOMPARE(mVI7Called, vi7); } bool mVVCalled; bool mVI1Called; bool mVI2Called; bool mVI3Called; bool mVI4Called; bool mVI5Called; bool mVI6Called; bool mVI7Called; }; namespace { bool mVVCalled; bool mVI1Called; bool mVI2Called; bool mVI3Called; bool mVI4Called; bool mVI5Called; bool mVI6Called; bool mVI7Called; void testVV() { mVVCalled++; } void testVI1(int a1) { QCOMPARE(a1, 1); mVI1Called++; } void testVI2(int a1, int a2) { QCOMPARE(a1, 1); QCOMPARE(a2, 2); mVI2Called++; } void testVI3(int a1, int a2, int a3) { QCOMPARE(a1, 1); QCOMPARE(a2, 2); QCOMPARE(a3, 3); mVI3Called++; } void testVI4(int a1, int a2, int a3, int a4) { QCOMPARE(a1, 1); QCOMPARE(a2, 2); QCOMPARE(a3, 3); QCOMPARE(a4, 4); mVI4Called++; } void testVI5(int a1, int a2, int a3, int a4, int a5) { QCOMPARE(a1, 1); QCOMPARE(a2, 2); QCOMPARE(a3, 3); QCOMPARE(a4, 4); QCOMPARE(a5, 5); mVI5Called++; } void testVI6(int a1, int a2, int a3, int a4, int a5, int a6) { QCOMPARE(a1, 1); QCOMPARE(a2, 2); QCOMPARE(a3, 3); QCOMPARE(a4, 4); QCOMPARE(a5, 5); QCOMPARE(a6, 6); mVI6Called++; } void testVI7(int a1, int a2, int a3, int a4, int a5, int a6, int a7) { QCOMPARE(a1, 1); QCOMPARE(a2, 2); QCOMPARE(a3, 3); QCOMPARE(a4, 4); QCOMPARE(a5, 5); QCOMPARE(a6, 6); QCOMPARE(a7, 7); mVI7Called++; } void reset() { mVVCalled = false; mVI1Called = false; mVI2Called = false; mVI3Called = false; mVI4Called = false; mVI5Called = false; mVI6Called = false; mVI7Called = false; } void verifyCalled(bool vv, bool vi1, bool vi2, bool vi3, bool vi4, bool vi5, bool vi6, bool vi7) { QCOMPARE(mVVCalled, vv); QCOMPARE(mVI1Called, vi1); QCOMPARE(mVI2Called, vi2); QCOMPARE(mVI3Called, vi3); QCOMPARE(mVI4Called, vi4); QCOMPARE(mVI5Called, vi5); QCOMPARE(mVI6Called, vi6); QCOMPARE(mVI7Called, vi7); } } void TestCallbacks::testMemFun() { MyCallbacks cbs; Callback0 cbVV = memFun(&cbs, &MyCallbacks::testVV); cbVV(); cbs.verifyCalled(true, false, false, false, false, false, false, false); cbs.reset(); Callback1 cbVI1 = memFun(&cbs, &MyCallbacks::testVI1); cbVI1(1); cbs.verifyCalled(false, true, false, false, false, false, false, false); cbs.reset(); Callback2 cbVI2 = memFun(&cbs, &MyCallbacks::testVI2); cbVI2(1, 2); cbs.verifyCalled(false, false, true, false, false, false, false, false); cbs.reset(); Callback3 cbVI3 = memFun(&cbs, &MyCallbacks::testVI3); cbVI3(1, 2, 3); cbs.verifyCalled(false, false, false, true, false, false, false, false); cbs.reset(); Callback4 cbVI4 = memFun(&cbs, &MyCallbacks::testVI4); cbVI4(1, 2, 3, 4); cbs.verifyCalled(false, false, false, false, true, false, false, false); cbs.reset(); Callback5 cbVI5 = memFun(&cbs, &MyCallbacks::testVI5); cbVI5(1, 2, 3, 4, 5); cbs.verifyCalled(false, false, false, false, false, true, false, false); cbs.reset(); Callback6 cbVI6 = memFun(&cbs, &MyCallbacks::testVI6); cbVI6(1, 2, 3, 4, 5, 6); cbs.verifyCalled(false, false, false, false, false, false, true, false); cbs.reset(); Callback7 cbVI7 = memFun(&cbs, &MyCallbacks::testVI7); cbVI7(1, 2, 3, 4, 5, 6, 7); cbs.verifyCalled(false, false, false, false, false, false, false, true); cbs.reset(); } void TestCallbacks::testPtrFun() { reset(); Callback0 cbVV = ptrFun(&testVV); cbVV(); verifyCalled(true, false, false, false, false, false, false, false); reset(); Callback1 cbVI1 = ptrFun(&testVI1); cbVI1(1); verifyCalled(false, true, false, false, false, false, false, false); reset(); Callback2 cbVI2 = ptrFun(&testVI2); cbVI2(1, 2); verifyCalled(false, false, true, false, false, false, false, false); reset(); Callback3 cbVI3 = ptrFun(&testVI3); cbVI3(1, 2, 3); verifyCalled(false, false, false, true, false, false, false, false); reset(); Callback4 cbVI4 = ptrFun(&testVI4); cbVI4(1, 2, 3, 4); verifyCalled(false, false, false, false, true, false, false, false); reset(); Callback5 cbVI5 = ptrFun(&testVI5); cbVI5(1, 2, 3, 4, 5); verifyCalled(false, false, false, false, false, true, false, false); reset(); Callback6 cbVI6 = ptrFun(&testVI6); cbVI6(1, 2, 3, 4, 5, 6); verifyCalled(false, false, false, false, false, false, true, false); reset(); Callback7 cbVI7 = ptrFun(&testVI7); cbVI7(1, 2, 3, 4, 5, 6, 7); verifyCalled(false, false, false, false, false, false, false, true); reset(); } QTEST_MAIN(TestCallbacks) #include "_gen/callbacks.cpp.moc.hpp" telepathy-qt-0.9.3/tests/features.cpp0000644000175200001440000000271712000056607022107 0ustar00collabora-develusers00000000000000#include #include #include #include #include using namespace Tp; namespace { QList reverse(const QList &list) { QList ret(list); for (int k = 0; k < (list.size() / 2); k++) { ret.swap(k, list.size() - (1 + k)); } return ret; } }; class TestFeatures : public QObject { Q_OBJECT public: TestFeatures(QObject *parent = 0); private Q_SLOTS: void testFeaturesHash(); }; TestFeatures::TestFeatures(QObject *parent) : QObject(parent) { Tp::enableDebug(true); Tp::enableWarnings(true); } void TestFeatures::testFeaturesHash() { QList fs1; QList fs2; for (int i = 0; i < 100; ++i) { fs1 << Feature(QString::number(i), i); fs2 << Feature(QString::number(i), i); } QCOMPARE(qHash(fs1.toSet()), qHash(fs2.toSet())); fs2.clear(); for (int i = 0; i < 5; ++i) { for (int j = 0; j < 100; ++j) { fs2 << Feature(QString::number(j), j); } } QCOMPARE(qHash(fs1.toSet()), qHash(fs2.toSet())); fs1 = reverse(fs1); QCOMPARE(qHash(fs1.toSet()), qHash(fs2.toSet())); fs2 = reverse(fs2); QCOMPARE(qHash(fs1.toSet()), qHash(fs2.toSet())); fs2 << Feature(QLatin1String("100"), 100); QVERIFY(qHash(fs1.toSet()) != qHash(fs2.toSet())); } QTEST_MAIN(TestFeatures) #include "_gen/features.cpp.moc.hpp" telepathy-qt-0.9.3/tests/presence.cpp0000644000175200001440000001665012000056607022076 0ustar00collabora-develusers00000000000000#include #include #include #include #include using namespace Tp; class TestPresence : public QObject { Q_OBJECT public: TestPresence(QObject *parent = 0); private Q_SLOTS: void testPresence(); void testPresenceSpec(); }; TestPresence::TestPresence(QObject *parent) : QObject(parent) { Tp::enableDebug(true); Tp::enableWarnings(true); } #define TEST_PRESENCE(pr, prValid, prType, prStatus, prStatusMessage) \ { \ QVERIFY(pr.isValid() == prValid); \ QCOMPARE(pr.type(), prType); \ QCOMPARE(pr.status(), prStatus); \ QCOMPARE(pr.statusMessage(), prStatusMessage); \ } void TestPresence::testPresence() { Presence pr; TEST_PRESENCE(pr, false, ConnectionPresenceTypeUnknown, QString(), QString()); pr.setStatus(ConnectionPresenceTypeAvailable, QLatin1String("available"), QLatin1String("I am available")); TEST_PRESENCE(pr, true, ConnectionPresenceTypeAvailable, QLatin1String("available"), QLatin1String("I am available")); pr = Presence::available(); TEST_PRESENCE(pr, true, ConnectionPresenceTypeAvailable, QLatin1String("available"), QString()); pr = Presence::available(QLatin1String("I am available")); TEST_PRESENCE(pr, true, ConnectionPresenceTypeAvailable, QLatin1String("available"), QLatin1String("I am available")); pr = Presence::chat(); TEST_PRESENCE(pr, true, ConnectionPresenceTypeAvailable, QLatin1String("chat"), QString()); pr = Presence::chat(QLatin1String("I am chat")); TEST_PRESENCE(pr, true, ConnectionPresenceTypeAvailable, QLatin1String("chat"), QLatin1String("I am chat")); pr = Presence::away(); TEST_PRESENCE(pr, true, ConnectionPresenceTypeAway, QLatin1String("away"), QString()); pr = Presence::away(QLatin1String("I am away")); TEST_PRESENCE(pr, true, ConnectionPresenceTypeAway, QLatin1String("away"), QLatin1String("I am away")); pr = Presence::brb(); TEST_PRESENCE(pr, true, ConnectionPresenceTypeAway, QLatin1String("brb"), QString()); pr = Presence::brb(QLatin1String("I am brb")); TEST_PRESENCE(pr, true, ConnectionPresenceTypeAway, QLatin1String("brb"), QLatin1String("I am brb")); pr = Presence::busy(); TEST_PRESENCE(pr, true, ConnectionPresenceTypeBusy, QLatin1String("busy"), QString()); pr = Presence::busy(QLatin1String("I am busy")); TEST_PRESENCE(pr, true, ConnectionPresenceTypeBusy, QLatin1String("busy"), QLatin1String("I am busy")); pr = Presence::dnd(); TEST_PRESENCE(pr, true, ConnectionPresenceTypeBusy, QLatin1String("dnd"), QString()); pr = Presence::dnd(QLatin1String("I am dnd")); TEST_PRESENCE(pr, true, ConnectionPresenceTypeBusy, QLatin1String("dnd"), QLatin1String("I am dnd")); pr = Presence::xa(); TEST_PRESENCE(pr, true, ConnectionPresenceTypeExtendedAway, QLatin1String("xa"), QString()); pr = Presence::xa(QLatin1String("I am xa")); TEST_PRESENCE(pr, true, ConnectionPresenceTypeExtendedAway, QLatin1String("xa"), QLatin1String("I am xa")); pr = Presence::hidden(); TEST_PRESENCE(pr, true, ConnectionPresenceTypeHidden, QLatin1String("hidden"), QString()); pr = Presence::hidden(QLatin1String("I am hidden")); TEST_PRESENCE(pr, true, ConnectionPresenceTypeHidden, QLatin1String("hidden"), QLatin1String("I am hidden")); pr = Presence::offline(); TEST_PRESENCE(pr, true, ConnectionPresenceTypeOffline, QLatin1String("offline"), QString()); pr = Presence::offline(QLatin1String("I am offline")); TEST_PRESENCE(pr, true, ConnectionPresenceTypeOffline, QLatin1String("offline"), QLatin1String("I am offline")); } #define TEST_PRESENCE_SPEC_FULL(specStatus, specType, specMaySetOnSelf, specCanHaveMessage) \ { \ SimpleStatusSpec bareSpec; \ bareSpec.type = specType; \ bareSpec.maySetOnSelf = specMaySetOnSelf; \ bareSpec.canHaveMessage = specCanHaveMessage; \ \ PresenceSpec spec(specStatus, bareSpec); \ TEST_PRESENCE_SPEC(spec, true, specStatus, specType, specMaySetOnSelf, specCanHaveMessage); \ } #define TEST_PRESENCE_SPEC(spec, specValid, specStatus, specType, specMaySetOnSelf, specCanHaveMessage) \ { \ QVERIFY(spec.isValid() == specValid); \ if (specValid) { \ QCOMPARE(spec.presence(), Presence(specType, specStatus, QString())); \ TEST_PRESENCE(spec.presence(), true, specType, specStatus, QString()); \ QCOMPARE(spec.presence(QLatin1String("test message")), Presence(specType, specStatus, QLatin1String("test message"))); \ TEST_PRESENCE(spec.presence(QLatin1String("test message")), true, specType, specStatus, QLatin1String("test message")); \ } else { \ QVERIFY(!spec.presence().isValid()); \ } \ QCOMPARE(spec.maySetOnSelf(), specMaySetOnSelf); \ QCOMPARE(spec.canHaveStatusMessage(), specCanHaveMessage); \ \ if (specValid) { \ SimpleStatusSpec bareSpec; \ bareSpec.type = specType; \ bareSpec.maySetOnSelf = specMaySetOnSelf; \ bareSpec.canHaveMessage = specCanHaveMessage; \ QCOMPARE(spec.bareSpec(), bareSpec); \ } else { \ QCOMPARE(spec.bareSpec(), SimpleStatusSpec()); \ } \ } void TestPresence::testPresenceSpec() { PresenceSpec spec; TEST_PRESENCE_SPEC(spec, false, QString(), ConnectionPresenceTypeUnknown, false, false); TEST_PRESENCE_SPEC_FULL(QLatin1String("available"), ConnectionPresenceTypeAvailable, true, true); TEST_PRESENCE_SPEC_FULL(QLatin1String("brb"), ConnectionPresenceTypeAway, true, true); TEST_PRESENCE_SPEC_FULL(QLatin1String("away"), ConnectionPresenceTypeAway, true, true); TEST_PRESENCE_SPEC_FULL(QLatin1String("xa"), ConnectionPresenceTypeExtendedAway, false, false); TEST_PRESENCE_SPEC_FULL(QLatin1String("offline"), ConnectionPresenceTypeOffline, true, false); spec = PresenceSpec::available(); TEST_PRESENCE_SPEC(spec, true, QLatin1String("available"), ConnectionPresenceTypeAvailable, true, true); spec = PresenceSpec::chat(); TEST_PRESENCE_SPEC(spec, true, QLatin1String("chat"), ConnectionPresenceTypeAvailable, true, true); spec = PresenceSpec::pstn(); TEST_PRESENCE_SPEC(spec, true, QLatin1String("pstn"), ConnectionPresenceTypeAvailable, false, true); spec = PresenceSpec::away(); TEST_PRESENCE_SPEC(spec, true, QLatin1String("away"), ConnectionPresenceTypeAway, true, true); spec = PresenceSpec::brb(); TEST_PRESENCE_SPEC(spec, true, QLatin1String("brb"), ConnectionPresenceTypeAway, true, true); spec = PresenceSpec::busy(); TEST_PRESENCE_SPEC(spec, true, QLatin1String("busy"), ConnectionPresenceTypeBusy, true, true); spec = PresenceSpec::dnd(); TEST_PRESENCE_SPEC(spec, true, QLatin1String("dnd"), ConnectionPresenceTypeBusy, true, true); spec = PresenceSpec::xa(); TEST_PRESENCE_SPEC(spec, true, QLatin1String("xa"), ConnectionPresenceTypeExtendedAway, true, true); spec = PresenceSpec::hidden(); TEST_PRESENCE_SPEC(spec, true, QLatin1String("hidden"), ConnectionPresenceTypeHidden, true, true); spec = PresenceSpec::offline(); TEST_PRESENCE_SPEC(spec, true, QLatin1String("offline"), ConnectionPresenceTypeOffline, false, true); spec = PresenceSpec::unknown(); TEST_PRESENCE_SPEC(spec, true, QLatin1String("unknown"), ConnectionPresenceTypeUnknown, false, true); spec = PresenceSpec::error(); TEST_PRESENCE_SPEC(spec, true, QLatin1String("error"), ConnectionPresenceTypeError, false, true); } QTEST_MAIN(TestPresence) #include "_gen/presence.cpp.moc.hpp" telepathy-qt-0.9.3/tests/ptr.cpp0000644000175200001440000002103412000056607021067 0ustar00collabora-develusers00000000000000#include #include #include using namespace Tp; class TestSharedPtr : public QObject { Q_OBJECT private Q_SLOTS: void testSharedPtrDict(); void testSharedPtrBoolConversion(); void testWeakPtrBoolConversion(); void testThreadSafety(); }; class Data; typedef SharedPtr DataPtr; class Data : public QObject, public RefCounted { Q_OBJECT Q_DISABLE_COPY(Data); public: static DataPtr create() { return DataPtr(new Data()); } static DataPtr createNull() { return DataPtr(0); } private: Data() {} }; void TestSharedPtr::testSharedPtrDict() { QHash dict; DataPtr nullPtr = Data::createNull(); dict[nullPtr] = 1; QCOMPARE(dict.size(), 1); QCOMPARE(dict[nullPtr], 1); DataPtr validPtr1 = Data::create(); QCOMPARE(qHash(validPtr1.data()), qHash(validPtr1)); dict[validPtr1] = 2; QCOMPARE(dict.size(), 2); QCOMPARE(dict[nullPtr], 1); QCOMPARE(dict[validPtr1], 2); DataPtr validPtr2 = validPtr1; QCOMPARE(validPtr1.data(), validPtr2.data()); QCOMPARE(qHash(validPtr1), qHash(validPtr2)); dict[validPtr2] = 3; QCOMPARE(dict.size(), 2); QCOMPARE(dict[nullPtr], 1); QCOMPARE(dict[validPtr1], 3); QCOMPARE(dict[validPtr2], 3); DataPtr validPtrAlternative = Data::create(); QVERIFY(validPtr1.data() != validPtrAlternative.data()); QVERIFY(validPtr1 != validPtrAlternative); QVERIFY(qHash(validPtr1) != qHash(validPtrAlternative)); dict[validPtrAlternative] = 4; QCOMPARE(dict.size(), 3); QCOMPARE(dict[nullPtr], 1); QCOMPARE(dict[validPtr1], 3); QCOMPARE(dict[validPtr2], 3); QCOMPARE(dict[validPtrAlternative], 4); } void TestSharedPtr::testSharedPtrBoolConversion() { DataPtr nullPtr1; DataPtr nullPtr2 = Data::createNull(); DataPtr validPtr1 = Data::create(); DataPtr validPtr2 = validPtr1; DataPtr validPtrAlternative = Data::create(); // Boolean conditions QVERIFY(!validPtr1.isNull()); QVERIFY(nullPtr1.isNull()); QVERIFY(validPtr1 ? true : false); QVERIFY(!validPtr1 ? false : true); QVERIFY(nullPtr1 ? false : true); QVERIFY(!nullPtr1 ? true : false); QVERIFY(validPtr1); QVERIFY(!!validPtr1); QVERIFY(!nullPtr1); // Supported operators QVERIFY(nullPtr1 == nullPtr1); QVERIFY(nullPtr1 == nullPtr2); QVERIFY(validPtr1 == validPtr1); QVERIFY(validPtr1 == validPtr2); QVERIFY(validPtr1 != validPtrAlternative); QCOMPARE(validPtr1 == validPtrAlternative, false); QVERIFY(validPtr1 != nullPtr1); QCOMPARE(validPtr1 == nullPtr1, false); // Supported conversions, constructors and copy operators bool trueBool1 = validPtr1; QVERIFY(trueBool1); bool trueBool2(validPtr2); QVERIFY(trueBool2); trueBool1 = validPtrAlternative; QVERIFY(trueBool1); bool falseBool1 = nullPtr1; QVERIFY(!falseBool1); bool falseBool2(nullPtr2); QVERIFY(!falseBool2); falseBool1 = nullPtr1; QVERIFY(!falseBool1); #if 0 // Unsupported operators, this should not compile bool condition; condition = validPtr1 > nullPtr1; condition = validPtr1 + nullPtr1; // Unsupported conversions, this should not compile int validInt1 = validPtr1; int validInt2(validPtr1); validInt1 = validPtr1; int nullInt1 = nullPtr1; int nullInt2(nullPtr1); nullInt1 = nullPtr1; float validFloat1 = validPtr1; float validFloat2(validPtr1); validFloat1 = validPtr1; float nullFloat1 = nullPtr1; float nullFloat2(nullPtr1); nullFloat1 = nullPtr1; Q_UNUSED(validInt1); Q_UNUSED(validInt2); Q_UNUSED(nullInt1); Q_UNUSED(nullInt2); Q_UNUSED(validFloat1); Q_UNUSED(validFloat2); Q_UNUSED(nullFloat1); Q_UNUSED(nullFloat2); #endif } void TestSharedPtr::testWeakPtrBoolConversion() { WeakPtr nullPtr1; DataPtr strongNullPtr2 = Data::createNull(); WeakPtr nullPtr2 = strongNullPtr2; DataPtr strongValidPtr1 = Data::create(); WeakPtr validPtr1 = strongValidPtr1; WeakPtr validPtr2 = validPtr1; DataPtr strongValidPtrAlternative = Data::create(); WeakPtr validPtrAlternative = strongValidPtrAlternative; // Boolean conditions QVERIFY(!validPtr1.isNull()); QVERIFY(nullPtr1.isNull()); QVERIFY(validPtr1 ? true : false); QVERIFY(!validPtr1 ? false : true); QVERIFY(nullPtr1 ? false : true); QVERIFY(!nullPtr1 ? true : false); QVERIFY(validPtr1); QVERIFY(!!validPtr1); QVERIFY(!nullPtr1); // Supported operators QVERIFY(nullPtr1 == nullPtr1); QVERIFY(nullPtr1 == nullPtr2); QVERIFY(validPtr1 == validPtr1); QVERIFY(validPtr1 == validPtr2); // XXX why not comparison operator? //QVERIFY(validPtr1 != validPtrAlternative); //QCOMPARE(validPtr1 == validPtrAlternative, false); QVERIFY(validPtr1 != nullPtr1); QCOMPARE(validPtr1 == nullPtr1, false); // Supported conversions, constructors and copy operators bool trueBool1 = validPtr1; QVERIFY(trueBool1); bool trueBool2(validPtr2); QVERIFY(trueBool2); trueBool1 = validPtrAlternative; QVERIFY(trueBool1); bool falseBool1 = nullPtr1; QVERIFY(!falseBool1); bool falseBool2(nullPtr2); QVERIFY(!falseBool2); falseBool1 = nullPtr1; QVERIFY(!falseBool1); #if 0 // Unsupported operators, this should not compile bool condition; condition = validPtr1 > nullPtr1; condition = validPtr1 + nullPtr1; // Unsupported conversions, this should not compile int validInt1 = validPtr1; int validInt2(validPtr1); validInt1 = validPtr1; int nullInt1 = nullPtr1; int nullInt2(nullPtr1); nullInt1 = nullPtr1; float validFloat1 = validPtr1; float validFloat2(validPtr1); validFloat1 = validPtr1; float nullFloat1 = nullPtr1; float nullFloat2(nullPtr1); nullFloat1 = nullPtr1; Q_UNUSED(validInt1); Q_UNUSED(validInt2); Q_UNUSED(nullInt1); Q_UNUSED(nullInt2); Q_UNUSED(validFloat1); Q_UNUSED(validFloat2); Q_UNUSED(nullFloat1); Q_UNUSED(nullFloat2); #endif // Test the boolean operations after the main SharedPtr is gone strongValidPtrAlternative.reset(); QVERIFY(validPtrAlternative.isNull()); QVERIFY(validPtrAlternative ? false : true); QVERIFY(!validPtrAlternative ? true : false); } class Thread : public QThread { public: Thread(const DataPtr &ptr, QObject *parent = 0) : QThread(parent), mPtr(ptr) {} void run() { QVERIFY(!mPtr.isNull()); for (int i = 0; i < 200; ++i) { WeakPtr wptrtmp(mPtr); QVERIFY(!wptrtmp.isNull()); DataPtr ptrtmp(wptrtmp); wptrtmp = WeakPtr(); QVERIFY(!ptrtmp.isNull()); DataPtr ptrtmp2(ptrtmp); ptrtmp.reset(); QVERIFY(!ptrtmp2.isNull()); WeakPtr wptrtmp2 = ptrtmp2; ptrtmp2.reset(); QVERIFY(!wptrtmp2.isNull()); WeakPtr wptrtmp3(wptrtmp2); QVERIFY(!wptrtmp3.isNull()); wptrtmp3 = wptrtmp2; wptrtmp2 = WeakPtr(); QVERIFY(!wptrtmp3.isNull()); DataPtr ptrtmp3(wptrtmp3); wptrtmp3 = WeakPtr(); QCOMPARE(ptrtmp3.data(), mPtr.data()); QVERIFY(!ptrtmp3.isNull()); WeakPtr wptrtmp4(ptrtmp3.data()); ptrtmp3.reset(); QVERIFY(!wptrtmp4.isNull()); } } private: DataPtr mPtr; }; void TestSharedPtr::testThreadSafety() { DataPtr ptr = Data::create(); WeakPtr weakPtr(ptr); Data *savedData = ptr.data(); QVERIFY(savedData != NULL); QVERIFY(!ptr.isNull()); QVERIFY(!weakPtr.isNull()); Thread *t[5]; for (int i = 0; i < 5; ++i) { t[i] = new Thread(ptr, this); t[i]->start(); } for (int i = 0; i < 5; ++i) { t[i]->wait(); delete t[i]; } QCOMPARE(ptr.data(), savedData); QVERIFY(!ptr.isNull()); QVERIFY(!weakPtr.isNull()); for (int i = 0; i < 5; ++i) { t[i] = new Thread(ptr, this); t[i]->start(); } QVERIFY(!ptr.isNull()); QVERIFY(!weakPtr.isNull()); ptr.reset(); QVERIFY(ptr.isNull()); for (int i = 0; i < 5; ++i) { t[i]->wait(); delete t[i]; } QVERIFY(!ptr.data()); QVERIFY(ptr.isNull()); QVERIFY(weakPtr.isNull()); DataPtr promotedPtr(weakPtr); QVERIFY(!promotedPtr.data()); QVERIFY(promotedPtr.isNull()); } QTEST_MAIN(TestSharedPtr) #include "_gen/ptr.cpp.moc.hpp" telepathy-qt-0.9.3/tests/CMakeLists.txt0000644000175200001440000000424612000056607022324 0ustar00collabora-develusers00000000000000find_program(SH sh) set(test_environment " export abs_top_builddir=${CMAKE_BINARY_DIR} export abs_top_srcdir=${CMAKE_SOURCE_DIR} export XDG_DATA_HOME=${CMAKE_SOURCE_DIR}/tests export XDG_DATA_DIRS=${CMAKE_BINARY_DIR}/tests ") # Add targets for callgrind and valgrind tests add_custom_target(check-valgrind) add_custom_target(check-callgrind) # Add targets for lcov reports add_custom_target(lcov-reset lcov --directory ${CMAKE_BINARY_DIR} --zerocounters COMMAND find ${CMAKE_BINARY_DIR} -name '*.gcda' -exec rm -f '{}' ';' || true COMMENT "Cleaning lcov files") add_custom_target(lcov-check make test || true COMMAND lcov --directory ${CMAKE_BINARY_DIR} --capture --output-file ${CMAKE_BINARY_DIR}/lcov.info && mkdir ${CMAKE_BINARY_DIR}/lcov.html || true && genhtml --title ${PACKAGE_NAME} --output-directory ${CMAKE_BINARY_DIR}/lcov.html ${CMAKE_BINARY_DIR}/lcov.info COMMENT "Generating lcov report in file://${CMAKE_BINARY_DIR}/lcov.html/index.html" WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/tests) add_dependencies(lcov-check lcov-reset) file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/runGenericTest.sh "${test_environment} $@") file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/_gen) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMPILER_COVERAGE_FLAGS}") tpqt_add_generic_unit_test(Capabilities capabilities telepathy-qt-test-backdoors) tpqt_add_generic_unit_test(Callbacks callbacks) tpqt_add_generic_unit_test(ChannelClassSpec channel-class-spec) tpqt_add_generic_unit_test(Features features) tpqt_add_generic_unit_test(KeyFile key-file telepathy-qt-test-backdoors) tpqt_add_generic_unit_test(ManagerFile manager-file telepathy-qt-test-backdoors) tpqt_add_generic_unit_test(Presence presence) tpqt_add_generic_unit_test(Profile profile) tpqt_add_generic_unit_test(Ptr ptr) tpqt_add_generic_unit_test(RCCSpec rccspec) tpqt_add_generic_unit_test(FileTransferChannelCreationProperties file-transfer-channel-creation-properties) add_subdirectory(dbus-1) add_subdirectory(dbus) add_subdirectory(lib) telepathy-qt-0.9.3/tests/dbus/0000755000175200001440000000000012000056607020513 5ustar00collabora-develusers00000000000000telepathy-qt-0.9.3/tests/dbus/text-chan.cpp0000644000175200001440000005062712000056607023124 0ustar00collabora-develusers00000000000000// We need to use the deprecated TpTextMixin here to test compatibility functionality #define _TP_IGNORE_DEPRECATIONS #include #include #include #include #include #include #include #include #include #include #include using namespace Tp; struct SentMessageDetails { SentMessageDetails(const Message &message, const Tp::MessageSendingFlags flags, const QString &token) : message(message), flags(flags), token(token) { } Message message; Tp::MessageSendingFlags flags; QString token; }; class TestTextChan : public Test { Q_OBJECT public: TestTextChan(QObject *parent = 0) : Test(parent), mConn(0), mContactRepo(0), mTextChanService(0), mMessagesChanService(0), mGotChatStateChanged(false), mChatStateChangedState((ChannelChatState) -1) { } protected Q_SLOTS: void onMessageReceived(const Tp::ReceivedMessage &); void onMessageRemoved(const Tp::ReceivedMessage &); void onMessageSent(const Tp::Message &, Tp::MessageSendingFlags, const QString &); void onChatStateChanged(const Tp::ContactPtr &contact, Tp::ChannelChatState state); private Q_SLOTS: void initTestCase(); void init(); void testMessages(); void testLegacyText(); void cleanup(); void cleanupTestCase(); private: void commonTest(bool withMessages); void sendText(const char *text); TestConnHelper *mConn; TpHandleRepoIface *mContactRepo; ContactPtr mContact; TextChannelPtr mChan; ExampleEchoChannel *mTextChanService; QString mTextChanPath; ExampleEcho2Channel *mMessagesChanService; QString mMessagesChanPath; QList sent; QList received; QList removed; bool mGotChatStateChanged; ContactPtr mChatStateChangedContact; ChannelChatState mChatStateChangedState; }; void TestTextChan::onMessageReceived(const ReceivedMessage &message) { qDebug() << "message received"; received << message; mLoop->exit(0); } void TestTextChan::onMessageRemoved(const ReceivedMessage &message) { qDebug() << "message removed"; removed << message; } void TestTextChan::onMessageSent(const Tp::Message &message, Tp::MessageSendingFlags flags, const QString &token) { qDebug() << "message sent"; sent << SentMessageDetails(message, flags, token); } void TestTextChan::onChatStateChanged(const Tp::ContactPtr &contact, Tp::ChannelChatState state) { mGotChatStateChanged = true; mChatStateChangedContact = contact; mChatStateChangedState = state; } void TestTextChan::sendText(const char *text) { qDebug() << "sending message:" << text; QVERIFY(connect(mChan->send(QLatin1String(text), Tp::ChannelTextMessageTypeNormal), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); qDebug() << "message send mainloop finished"; } void TestTextChan::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("text-chan"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); mConn = new TestConnHelper(this, TP_TESTS_TYPE_CONTACTS_CONNECTION, "account", "me@example.com", "protocol", "example", NULL); QCOMPARE(mConn->connect(), true); mContactRepo = tp_base_connection_get_handles(TP_BASE_CONNECTION(mConn->service()), TP_HANDLE_TYPE_CONTACT); guint handle = tp_handle_ensure(mContactRepo, "someone@localhost", 0, 0); mContact = mConn->contacts(UIntList() << handle).first(); QVERIFY(mContact); // create a Channel by magic, rather than doing D-Bus round-trips for it mTextChanPath = mConn->objectPath() + QLatin1String("/TextChannel"); QByteArray chanPath(mTextChanPath.toAscii()); mTextChanService = EXAMPLE_ECHO_CHANNEL(g_object_new( EXAMPLE_TYPE_ECHO_CHANNEL, "connection", mConn->service(), "object-path", chanPath.data(), "handle", handle, NULL)); mMessagesChanPath = mConn->objectPath() + QLatin1String("/MessagesChannel"); chanPath = mMessagesChanPath.toAscii(); mMessagesChanService = EXAMPLE_ECHO_2_CHANNEL(g_object_new( EXAMPLE_TYPE_ECHO_2_CHANNEL, "connection", mConn->service(), "object-path", chanPath.data(), "handle", handle, NULL)); } void TestTextChan::init() { initImpl(); mChan.reset(); mGotChatStateChanged = false; mChatStateChangedState = (ChannelChatState) -1; } void TestTextChan::commonTest(bool withMessages) { Q_ASSERT(mChan); ChannelPtr asChannel = ChannelPtr(dynamic_cast(mChan.data())); QVERIFY(connect(asChannel->becomeReady(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(asChannel->isReady()); QVERIFY(mChan->isReady()); // hasChatStateInterface requires FeatureCore only if (withMessages) { QVERIFY(mChan->hasChatStateInterface()); } else { QVERIFY(!mChan->hasChatStateInterface()); } QVERIFY(!mChan->isReady(TextChannel::FeatureChatState)); QCOMPARE(mChan->chatState(mContact), ChannelChatStateInactive); QCOMPARE(mChan->chatState(ContactPtr()), ChannelChatStateInactive); QVERIFY(connect(asChannel->becomeReady(TextChannel::FeatureChatState), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(mChan->isReady(TextChannel::FeatureChatState)); if (withMessages) { QVERIFY(mChan->hasChatStateInterface()); } else { QVERIFY(!mChan->hasChatStateInterface()); } QCOMPARE(mChan->chatState(mContact), ChannelChatStateInactive); QCOMPARE(mChan->chatState(ContactPtr()), ChannelChatStateInactive); QCOMPARE(mChan->chatState(mChan->groupSelfContact()), ChannelChatStateInactive); QVERIFY(connect(mChan.data(), SIGNAL(chatStateChanged(Tp::ContactPtr,Tp::ChannelChatState)), SLOT(onChatStateChanged(Tp::ContactPtr,Tp::ChannelChatState)))); if (withMessages) { QVERIFY(connect(mChan->requestChatState(ChannelChatStateActive), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); while (!mGotChatStateChanged) { mLoop->processEvents(); } QCOMPARE(mChatStateChangedContact, mChan->groupSelfContact()); QCOMPARE(mChatStateChangedState, mChan->chatState(mChan->groupSelfContact())); QCOMPARE(mChatStateChangedState, ChannelChatStateActive); } else { QVERIFY(connect(mChan->requestChatState(ChannelChatStateActive), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectFailure(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mLastError, TP_QT_ERROR_NOT_IMPLEMENTED); QVERIFY(!mLastErrorMessage.isEmpty()); } QVERIFY(!mChan->canInviteContacts()); Features features = Features() << TextChannel::FeatureMessageQueue; QVERIFY(!mChan->isReady(features)); // Implementation detail: in legacy text channels, capabilities arrive // early, so don't assert about that QVERIFY(!mChan->isReady(features)); QVERIFY(connect(mChan.data(), SIGNAL(messageReceived(const Tp::ReceivedMessage &)), SLOT(onMessageReceived(const Tp::ReceivedMessage &)))); QCOMPARE(received.size(), 0); QVERIFY(connect(mChan.data(), SIGNAL(pendingMessageRemoved(const Tp::ReceivedMessage &)), SLOT(onMessageRemoved(const Tp::ReceivedMessage &)))); QCOMPARE(removed.size(), 0); QVERIFY(connect(mChan.data(), SIGNAL(messageSent(const Tp::Message &, Tp::MessageSendingFlags, const QString &)), SLOT(onMessageSent(const Tp::Message &, Tp::MessageSendingFlags, const QString &)))); QCOMPARE(sent.size(), 0); sendText("One"); // Flush the D-Bus queue to make sure we've got the Sent signal the service will send, even if // we are scheduled to execute between the time it calls return_from_send and emit_sent processDBusQueue(mChan.data()); qDebug() << "making the Sent signal ready"; // Make the Sent signal become ready features = Features() << TextChannel::FeatureMessageSentSignal; QVERIFY(connect(mChan->becomeReady(features), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(asChannel->isReady()); QVERIFY(mChan->isReady()); features = Features() << TextChannel::FeatureMessageSentSignal; QVERIFY(mChan->isReady(features)); features = Features() << TextChannel::FeatureMessageQueue; QVERIFY(!mChan->isReady(features)); qDebug() << "the Sent signal is ready"; sendText("Two"); // Flush the D-Bus queue to make sure we've got the Sent signal the service will send, even if // we are scheduled to execute between the time it calls return_from_send and emit_sent processDBusQueue(mChan.data()); // We should have received "Two", but not "One" QCOMPARE(sent.size(), 1); QCOMPARE(static_cast(sent.at(0).flags), 0U); QCOMPARE(sent.at(0).token, QLatin1String("")); Message m(sent.at(0).message); QCOMPARE(static_cast(m.messageType()), static_cast(Tp::ChannelTextMessageTypeNormal)); QVERIFY(!m.isTruncated()); QVERIFY(!m.hasNonTextContent()); QCOMPARE(m.messageToken(), QLatin1String("")); QVERIFY(!m.isSpecificToDBusInterface()); QCOMPARE(m.dbusInterface(), QLatin1String("")); QCOMPARE(m.size(), 2); QCOMPARE(m.header().value(QLatin1String("message-type")).variant().toUInt(), 0U); QCOMPARE(m.part(1).value(QLatin1String("content-type")).variant().toString(), QLatin1String("text/plain")); QCOMPARE(m.text(), QLatin1String("Two")); // Make capabilities become ready features = Features() << TextChannel::FeatureMessageCapabilities; QVERIFY(connect(mChan->becomeReady(features), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(asChannel->isReady()); QVERIFY(mChan->isReady()); features = Features() << TextChannel::FeatureMessageCapabilities; QVERIFY(mChan->isReady(features)); features = Features() << TextChannel::FeatureMessageQueue; QVERIFY(!mChan->isReady(features)); if (withMessages) { QCOMPARE(mChan->supportedContentTypes(), QStringList() << QLatin1String("*/*")); QCOMPARE(static_cast(mChan->messagePartSupport()), static_cast(Tp::MessagePartSupportFlagOneAttachment | Tp::MessagePartSupportFlagMultipleAttachments)); QCOMPARE(mChan->deliveryReportingSupport(), DeliveryReportingSupportFlagReceiveFailures); QCOMPARE(mChan->supportedMessageTypes().size(), 3); // Supports normal, action, notice QVERIFY(mChan->supportsMessageType(Tp::ChannelTextMessageTypeNormal)); QVERIFY(mChan->supportsMessageType(Tp::ChannelTextMessageTypeAction)); QVERIFY(mChan->supportsMessageType(Tp::ChannelTextMessageTypeNotice)); QVERIFY(!mChan->supportsMessageType(Tp::ChannelTextMessageTypeAutoReply)); QVERIFY(!mChan->supportsMessageType(Tp::ChannelTextMessageTypeDeliveryReport)); } else { QCOMPARE(mChan->supportedContentTypes(), QStringList() << QLatin1String("text/plain")); QCOMPARE(static_cast(mChan->messagePartSupport()), 0U); QCOMPARE(static_cast(mChan->deliveryReportingSupport()), 0U); } // Make the message queue become ready too QCOMPARE(received.size(), 0); QCOMPARE(mChan->messageQueue().size(), 0); features = Features() << TextChannel::FeatureMessageQueue; QVERIFY(connect(mChan->becomeReady(features), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(asChannel->isReady()); QVERIFY(mChan->isReady()); features = Features() << TextChannel::FeatureMessageQueue << TextChannel::FeatureMessageCapabilities; QVERIFY(mChan->isReady(features)); // Assert that both our sent messages were echoed by the remote contact while (received.size() != 2) { QCOMPARE(mLoop->exec(), 0); } QCOMPARE(received.size(), 2); QCOMPARE(mChan->messageQueue().size(), 2); QVERIFY(mChan->messageQueue().at(0) == received.at(0)); QVERIFY(mChan->messageQueue().at(1) == received.at(1)); QVERIFY(received.at(0) != received.at(1)); ReceivedMessage r(received.at(0)); QVERIFY(r == received.at(0)); QCOMPARE(static_cast(r.messageType()), static_cast(Tp::ChannelTextMessageTypeNormal)); QVERIFY(!r.isTruncated()); QVERIFY(!r.hasNonTextContent()); if (withMessages) { QCOMPARE(r.messageToken(), QLatin1String("0000")); QCOMPARE(r.supersededToken(), QLatin1String("1234")); } else { QCOMPARE(r.messageToken(), QLatin1String("")); QCOMPARE(r.supersededToken(), QString()); } QVERIFY(!r.isSpecificToDBusInterface()); QCOMPARE(r.dbusInterface(), QLatin1String("")); QCOMPARE(r.size(), 2); QCOMPARE(r.header().value(QLatin1String("message-type")).variant().toUInt(), 0U); QCOMPARE(r.part(1).value(QLatin1String("content-type")).variant().toString(), QLatin1String("text/plain")); QCOMPARE(r.sender()->id(), QLatin1String("someone@localhost")); QCOMPARE(r.senderNickname(), QLatin1String("someone@localhost")); if (withMessages) { QVERIFY(r.isScrollback()); } else { QVERIFY(!r.isScrollback()); } QVERIFY(!r.isRescued()); QVERIFY(!r.isDeliveryReport()); // one "echo" implementation echoes the message literally, the other edits // it slightly if (withMessages) { QCOMPARE(r.text(), QLatin1String("One")); } else { QCOMPARE(r.text(), QLatin1String("You said: One")); } r = received.at(1); QCOMPARE(static_cast(r.messageType()), static_cast(Tp::ChannelTextMessageTypeNormal)); QVERIFY(!r.isTruncated()); QVERIFY(!r.hasNonTextContent()); if (withMessages) { QCOMPARE(r.messageToken(), QLatin1String("0000")); QCOMPARE(r.supersededToken(), QLatin1String("1234")); } else { QCOMPARE(r.messageToken(), QLatin1String("")); QCOMPARE(r.supersededToken(), QString()); } QVERIFY(!r.isSpecificToDBusInterface()); QCOMPARE(r.dbusInterface(), QLatin1String("")); QCOMPARE(r.size(), 2); QCOMPARE(r.header().value(QLatin1String("message-type")).variant().toUInt(), 0U); QCOMPARE(r.part(1).value(QLatin1String("content-type")).variant().toString(), QLatin1String("text/plain")); QCOMPARE(r.sender()->id(), QLatin1String("someone@localhost")); QVERIFY(!r.isScrollback()); QVERIFY(!r.isRescued()); if (withMessages) { QCOMPARE(r.text(), QLatin1String("Two")); } else { QCOMPARE(r.text(), QLatin1String("You said: Two")); } // go behind the TextChannel's back to acknowledge the first message: // this emulates another client doing so QVERIFY(connect(mChan.data(), SIGNAL(pendingMessageRemoved(Tp::ReceivedMessage)), mLoop, SLOT(quit()))); mChan->acknowledge(QList< ReceivedMessage >() << received.at(0)); QCOMPARE(mLoop->exec(), 0); QVERIFY(disconnect(mChan.data(), SIGNAL(pendingMessageRemoved(Tp::ReceivedMessage)), mLoop, SLOT(quit()))); QCOMPARE(mChan->messageQueue().size(), 1); QVERIFY(mChan->messageQueue().at(0) == received.at(1)); QCOMPARE(removed.size(), 1); QVERIFY(removed.at(0) == received.at(0)); // In the Messages case this will ack one message, successfully. In the // Text case it will fail to ack two messages, fall back to one call // per message, and fail one while succeeding with the other. mChan->acknowledge(mChan->messageQueue()); if (withMessages) { sendText("Three (fail)"); // Flush the D-Bus queue to make sure we've got the Sent signal the service will send, even if // we are scheduled to execute between the time it calls return_from_send and emit_sent processDBusQueue(mChan.data()); // Assert that both our sent messages were echoed by the remote contact while (received.size() != 3) { QCOMPARE(mLoop->exec(), 0); } QCOMPARE(received.size(), 3); QCOMPARE(mChan->messageQueue().size(), 1); QVERIFY(mChan->messageQueue().at(0) == received.at(2)); r = received.at(2); QVERIFY(r == received.at(2)); QCOMPARE(r.messageType(), Tp::ChannelTextMessageTypeDeliveryReport); QVERIFY(!r.isTruncated()); QVERIFY(r.hasNonTextContent()); QCOMPARE(r.messageToken(), QLatin1String("")); QVERIFY(!r.isSpecificToDBusInterface()); QCOMPARE(r.dbusInterface(), QLatin1String("")); QCOMPARE(r.size(), 1); QCOMPARE(r.header().value(QLatin1String("message-type")).variant().toUInt(), static_cast(Tp::ChannelTextMessageTypeDeliveryReport)); QCOMPARE(r.sender()->id(), QLatin1String("someone@localhost")); QCOMPARE(r.senderNickname(), QLatin1String("someone@localhost")); QVERIFY(!r.isScrollback()); QVERIFY(!r.isRescued()); QCOMPARE(r.supersededToken(), QString()); QVERIFY(r.isDeliveryReport()); QVERIFY(r.deliveryDetails().isValid()); QVERIFY(r.deliveryDetails().hasOriginalToken()); QCOMPARE(r.deliveryDetails().originalToken(), QLatin1String("1111")); QCOMPARE(r.deliveryDetails().status(), Tp::DeliveryStatusPermanentlyFailed); QVERIFY(r.deliveryDetails().isError()); QCOMPARE(r.deliveryDetails().error(), Tp::ChannelTextSendErrorPermissionDenied); QVERIFY(r.deliveryDetails().hasDebugMessage()); QCOMPARE(r.deliveryDetails().debugMessage(), QLatin1String("You asked for it")); QCOMPARE(r.deliveryDetails().dbusError(), TP_QT_ERROR_PERMISSION_DENIED); QVERIFY(r.deliveryDetails().hasEchoedMessage()); QCOMPARE(r.deliveryDetails().echoedMessage().text(), QLatin1String("Three (fail)")); mChan->acknowledge(QList() << received.at(2)); } // wait for everything to settle down while (tp_text_mixin_has_pending_messages( G_OBJECT(mTextChanService), 0) || tp_message_mixin_has_pending_messages( G_OBJECT(mMessagesChanService), 0)) { QTest::qWait(1); } QVERIFY(!tp_text_mixin_has_pending_messages( G_OBJECT(mTextChanService), 0)); QVERIFY(!tp_message_mixin_has_pending_messages( G_OBJECT(mMessagesChanService), 0)); } void TestTextChan::testMessages() { mChan = TextChannel::create(mConn->client(), mMessagesChanPath, QVariantMap()); commonTest(true); } void TestTextChan::testLegacyText() { mChan = TextChannel::create(mConn->client(), mTextChanPath, QVariantMap()); commonTest(false); } void TestTextChan::cleanup() { received.clear(); removed.clear(); sent.clear(); cleanupImpl(); } void TestTextChan::cleanupTestCase() { QCOMPARE(mConn->disconnect(), true); delete mConn; if (mTextChanService != 0) { g_object_unref(mTextChanService); mTextChanService = 0; } if (mMessagesChanService != 0) { g_object_unref(mMessagesChanService); mMessagesChanService = 0; } cleanupTestCaseImpl(); } QTEST_MAIN(TestTextChan) #include "_gen/text-chan.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/account-set.cpp0000644000175200001440000003677312000056607023464 0ustar00collabora-develusers00000000000000#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace Tp; class TestAccountSet : public Test { Q_OBJECT public: TestAccountSet(QObject *parent = 0) : Test(parent), mConn(0) { } protected Q_SLOTS: void onAccountAdded(const Tp::AccountPtr &); void onAccountRemoved(const Tp::AccountPtr &); void onCreateAccountFinished(Tp::PendingOperation *op); private Q_SLOTS: void initTestCase(); void init(); void testBasics(); void testFilters(); void cleanup(); void cleanupTestCase(); private: void createAccount(const char *cmName, const char *protocolName, const char *displayName, const QVariantMap ¶meters); void removeAccount(const AccountPtr &acc); QStringList pathsForAccounts(const QList &list); QStringList pathsForAccounts(const Tp::AccountSetPtr &set); AccountManagerPtr mAM; TestConnHelper *mConn; AccountPtr mAccountCreated; AccountPtr mAccountAdded; AccountPtr mAccountRemoved; }; void TestAccountSet::onAccountAdded(const Tp::AccountPtr &acc) { Q_UNUSED(acc); mAccountAdded = acc; qDebug() << "ACCOUNT ADDED:" << acc->objectPath(); } void TestAccountSet::onAccountRemoved(const Tp::AccountPtr &acc) { Q_UNUSED(acc); mAccountRemoved = acc; qDebug() << "ACCOUNT REMOVED:" << acc->objectPath(); } void TestAccountSet::onCreateAccountFinished(PendingOperation *op) { TEST_VERIFY_OP(op); PendingAccount *pa = qobject_cast(op); mAccountCreated = pa->account(); // the account should appear in the valid accounts set first, so mAccountAdded must be non-null QVERIFY(mAccountAdded); QVERIFY(mAccountCreated); qDebug() << "ACCOUNT CREATED:" << mAccountAdded->objectPath(); mLoop->exit(0); } void TestAccountSet::createAccount(const char *cmName, const char *protocolName, const char *displayName, const QVariantMap ¶meters) { AccountSetPtr accounts = mAM->validAccounts(); // AccountSet listen to AM::newAccount to check for accounts matching its filter. // // PendingAccount calls AM.CreateAccount and waits for the call to finish. // Once the call is finished, if everything is fine, it checks if the account was already added // to the AM or waits till it gets added by connecting to AM::newAccount. // Once the newly created account appears in the AM, it signals PendingAccount::finished. // // So the signal ordering depends on whether the PendingAccount was created before the // AccountSet or not. // // In this case where we are creating the AccountSet before calling Am::createAccount, // the account will first appear in the set via AccountSet::accountAdded and after that the // PendingAccount operation will finish. mAccountCreated.reset(); mAccountAdded.reset(); QVERIFY(connect(accounts.data(), SIGNAL(accountAdded(Tp::AccountPtr)), SLOT(onAccountAdded(Tp::AccountPtr)))); PendingAccount *pacc = mAM->createAccount(QLatin1String(cmName), QLatin1String(protocolName), QLatin1String(displayName), parameters); QVERIFY(connect(pacc, SIGNAL(finished(Tp::PendingOperation *)), SLOT(onCreateAccountFinished(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); // check that the added account is the same one that was created QCOMPARE(mAccountAdded, mAccountCreated); } void TestAccountSet::removeAccount(const AccountPtr &acc) { QCOMPARE(acc->isValid(), true); AccountSetPtr accounts = mAM->validAccounts(); QVERIFY(accounts->accounts().contains(acc)); int oldAccountsCount = accounts->accounts().size(); QVERIFY(connect(accounts.data(), SIGNAL(accountRemoved(Tp::AccountPtr)), SLOT(onAccountRemoved(Tp::AccountPtr)))); QVERIFY(connect(acc->remove(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); // wait the account to disappear from the set while (accounts->accounts().size() != oldAccountsCount - 1) { processDBusQueue(mConn->client().data()); QCOMPARE(mLoop->exec(), 0); } QCOMPARE(acc->isValid(), false); QCOMPARE(acc->invalidationReason(), TP_QT_ERROR_OBJECT_REMOVED); } QStringList TestAccountSet::pathsForAccounts(const QList &list) { QStringList ret; Q_FOREACH (const AccountPtr &account, list) { ret << account->objectPath(); } return ret; } QStringList TestAccountSet::pathsForAccounts(const Tp::AccountSetPtr &set) { QStringList ret; Q_FOREACH (const AccountPtr &account, set->accounts()) { ret << account->objectPath(); } return ret; } void TestAccountSet::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("account-set"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); mAM = AccountManager::create(AccountFactory::create(QDBusConnection::sessionBus(), Account::FeatureCore | Account::FeatureCapabilities)); QCOMPARE(mAM->isReady(), false); QVERIFY(connect(mAM->becomeReady(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mAM->isReady(), true); QCOMPARE(mAM->allAccounts().isEmpty(), true); mConn = new TestConnHelper(this, EXAMPLE_TYPE_ECHO_2_CONNECTION, "account", "me@example.com", "protocol", "echo2", NULL); QCOMPARE(mConn->connect(), true); } void TestAccountSet::init() { mAccountAdded.reset(); mAccountRemoved.reset(); initImpl(); } void TestAccountSet::testBasics() { AccountSetPtr validAccounts = mAM->validAccounts(); // create and remove the same account twice to check whether AccountSet::accountAdded/Removed is // properly emitted and the account becomes invalid after being removed for (int i = 0; i < 2; ++i) { // create the account QVariantMap parameters; parameters[QLatin1String("account")] = QLatin1String("foobar"); createAccount("foo", "bar", "foobar", parameters); // check that the account is properly created and added to the set of valid accounts QCOMPARE(validAccounts->accounts().size(), 1); QStringList paths = QStringList() << QLatin1String("/org/freedesktop/Telepathy/Account/foo/bar/Account0"); QCOMPARE(pathsForAccounts(validAccounts), paths); QCOMPARE(pathsForAccounts(mAM->invalidAccounts()), QStringList()); QCOMPARE(pathsForAccounts(mAM->allAccounts()), paths); QCOMPARE(mAM->allAccounts(), validAccounts->accounts()); // remove the account AccountPtr acc = validAccounts->accounts().first(); QVERIFY(acc); removeAccount(acc); // check that the account is properly invalidated and removed from the set QCOMPARE(validAccounts->accounts().size(), 0); QCOMPARE(pathsForAccounts(validAccounts), QStringList()); QCOMPARE(pathsForAccounts(mAM->invalidAccounts()), QStringList()); QCOMPARE(pathsForAccounts(mAM->allAccounts()), QStringList()); QCOMPARE(mAM->allAccounts(), validAccounts->accounts()); } } void TestAccountSet::testFilters() { QVariantMap parameters; parameters[QLatin1String("account")] = QLatin1String("foobar"); createAccount("foo", "bar", "foobar", parameters); QCOMPARE(mAM->allAccounts().size(), 1); QCOMPARE(mAM->validAccounts()->accounts().size(), 1); AccountPtr fooAcc = mAM->allAccounts()[0]; parameters.clear(); parameters[QLatin1String("account")] = QLatin1String("spuriousnormal"); createAccount("spurious", "normal", "spuriousnormal", parameters); QCOMPARE(mAM->allAccounts().size(), 2); QCOMPARE(mAM->validAccounts()->accounts().size(), 2); AccountPtr spuriousAcc = mAM->allAccounts()[1]; Tp::AccountSetPtr filteredAccountSet; { QVariantMap filter; filter.insert(QLatin1String("protocolName"), QLatin1String("bar")); filteredAccountSet = AccountSetPtr(new AccountSet(mAM, filter)); QCOMPARE(filteredAccountSet->accounts().size(), 1); QVERIFY(filteredAccountSet->accounts().contains(fooAcc)); filter.clear(); filter.insert(QLatin1String("protocolName"), QLatin1String("normal")); filteredAccountSet = AccountSetPtr(new AccountSet(mAM, filter)); QCOMPARE(filteredAccountSet->accounts().size(), 1); QVERIFY(filteredAccountSet->accounts().contains(spuriousAcc)); } { QList filterChain; AccountPropertyFilterPtr cmNameFilter0 = AccountPropertyFilter::create(); cmNameFilter0->addProperty(QLatin1String("cmName"), QLatin1String("foo")); AccountPropertyFilterPtr cmNameFilter1 = AccountPropertyFilter::create(); cmNameFilter1->addProperty(QLatin1String("cmName"), QLatin1String("spurious")); filterChain.append(cmNameFilter0); filterChain.append(cmNameFilter1); filteredAccountSet = AccountSetPtr(new AccountSet(mAM, OrFilter::create(filterChain))); QCOMPARE(filteredAccountSet->accounts().size(), 2); QVERIFY(filteredAccountSet->accounts().contains(fooAcc)); QVERIFY(filteredAccountSet->accounts().contains(spuriousAcc)); } { QList filterChain; AccountPropertyFilterPtr cmNameFilter = AccountPropertyFilter::create(); cmNameFilter->addProperty(QLatin1String("cmName"), QLatin1String("foo")); AccountCapabilityFilterPtr capsFilter = AccountCapabilityFilter::create(); capsFilter->addRequestableChannelClassSubset(RequestableChannelClassSpec::textChat()); filterChain.append(cmNameFilter); filterChain.append(capsFilter); filteredAccountSet = AccountSetPtr(new AccountSet(mAM, AndFilter::create(filterChain))); QCOMPARE(filteredAccountSet->accounts().size(), 0); filteredAccountSet = AccountSetPtr(new AccountSet(mAM, OrFilter::create(filterChain))); QCOMPARE(filteredAccountSet->accounts().size(), 2); QVERIFY(filteredAccountSet->accounts().contains(fooAcc)); QVERIFY(filteredAccountSet->accounts().contains(spuriousAcc)); filterChain.clear(); cmNameFilter = AccountPropertyFilter::create(); cmNameFilter->addProperty(QLatin1String("cmName"), QLatin1String("spurious")); capsFilter = AccountCapabilityFilter::create(); capsFilter->setRequestableChannelClassesSubset( RequestableChannelClassSpecList() << RequestableChannelClassSpec::textChat()); filterChain.append(cmNameFilter); filterChain.append(capsFilter); filteredAccountSet = AccountSetPtr(new AccountSet(mAM, AndFilter::create(filterChain))); QCOMPARE(filteredAccountSet->accounts().size(), 1); QVERIFY(filteredAccountSet->accounts().contains(spuriousAcc)); filteredAccountSet = AccountSetPtr(new AccountSet(mAM, NotFilter::create(AndFilter::create(filterChain)))); QCOMPARE(filteredAccountSet->accounts().size(), 1); QVERIFY(filteredAccountSet->accounts().contains(fooAcc)); } { // should not match as allowedProperties has TargetFoo that is not allowed RequestableChannelClassList rccs; RequestableChannelClass rcc; rcc.fixedProperties.insert( TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_TEXT); rcc.fixedProperties.insert( TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) HandleTypeContact); rcc.allowedProperties.append( TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandle")); rcc.allowedProperties.append( TP_QT_IFACE_CHANNEL + QLatin1String(".TargetFoo")); rccs.append(rcc); filteredAccountSet = AccountSetPtr(new AccountSet(mAM, AccountCapabilityFilter::create(rccs))); QCOMPARE(filteredAccountSet->accounts().isEmpty(), true); } { // let's change a property and see AccountSetPtr enabledAccounts = mAM->enabledAccounts(); QVERIFY(connect(enabledAccounts.data(), SIGNAL(accountRemoved(Tp::AccountPtr)), SLOT(onAccountRemoved(Tp::AccountPtr)))); AccountSetPtr disabledAccounts = mAM->disabledAccounts(); QVERIFY(connect(disabledAccounts.data(), SIGNAL(accountAdded(Tp::AccountPtr)), SLOT(onAccountAdded(Tp::AccountPtr)))); QCOMPARE(enabledAccounts->accounts().size(), 2); QCOMPARE(disabledAccounts->accounts().size(), 0); QVERIFY(connect(fooAcc->setEnabled(false), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); while (fooAcc->isEnabled() != false) { mLoop->processEvents(); } processDBusQueue(mConn->client().data()); QVERIFY(mAccountAdded); QVERIFY(mAccountRemoved); QCOMPARE(mAccountAdded, mAccountRemoved); QCOMPARE(enabledAccounts->accounts().size(), 1); QVERIFY(enabledAccounts->accounts().contains(spuriousAcc)); QCOMPARE(disabledAccounts->accounts().size(), 1); QVERIFY(disabledAccounts->accounts().contains(fooAcc)); } { QCOMPARE(mAM->invalidAccounts()->accounts().size(), 0); QCOMPARE(mAM->onlineAccounts()->accounts().size(), 0); QCOMPARE(mAM->offlineAccounts()->accounts().size(), 2); QCOMPARE(mAM->textChatAccounts()->accounts().size(), 1); QVERIFY(mAM->textChatAccounts()->accounts().contains(spuriousAcc)); QCOMPARE(mAM->textChatroomAccounts()->accounts().size(), 0); QCOMPARE(mAM->streamedMediaCallAccounts()->accounts().size(), 0); QCOMPARE(mAM->streamedMediaAudioCallAccounts()->accounts().size(), 0); QCOMPARE(mAM->streamedMediaVideoCallAccounts()->accounts().size(), 0); QCOMPARE(mAM->streamedMediaVideoCallWithAudioAccounts()->accounts().size(), 0); QCOMPARE(mAM->fileTransferAccounts()->accounts().size(), 0); QCOMPARE(mAM->accountsByProtocol(QLatin1String("bar"))->accounts().size(), 1); QVERIFY(mAM->accountsByProtocol(QLatin1String("bar"))->accounts().contains(fooAcc)); QCOMPARE(mAM->accountsByProtocol(QLatin1String("normal"))->accounts().size(), 1); QVERIFY(mAM->accountsByProtocol(QLatin1String("normal"))->accounts().contains(spuriousAcc)); QCOMPARE(mAM->accountsByProtocol(QLatin1String("noname"))->accounts().size(), 0); } } void TestAccountSet::cleanup() { cleanupImpl(); } void TestAccountSet::cleanupTestCase() { if (mConn) { QCOMPARE(mConn->disconnect(), true); delete mConn; } cleanupTestCaseImpl(); } QTEST_MAIN(TestAccountSet) #include "_gen/account-set.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/streamed-media-chan.cpp0000644000175200001440000016344012000056607025017 0ustar00collabora-develusers00000000000000#include #include #include #define TP_QT_ENABLE_LOWLEVEL_API #include #include #include #include #include #include #include #include using namespace Tp; class TestStreamedMediaChan : public Test { Q_OBJECT public: TestStreamedMediaChan(QObject *parent = 0) : Test(parent), mConn(0) { } protected Q_SLOTS: void expectRequestStreamsFinished(Tp::PendingOperation *); void expectBusyRequestStreamsFinished(Tp::PendingOperation *); // Special event handlers for the OutgoingCall state-machine void expectOutgoingRequestStreamsFinished(Tp::PendingOperation *); void onOutgoingGroupMembersChanged( const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &, const Tp::Channel::GroupMemberChangeDetails &); void onGroupMembersChanged( const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &, const Tp::Channel::GroupMemberChangeDetails &); void onStreamRemoved(const Tp::StreamedMediaStreamPtr &); void onStreamDirectionChanged(const Tp::StreamedMediaStreamPtr &, Tp::MediaStreamDirection, Tp::MediaStreamPendingSend); void onLSSChanged(Tp::StreamedMediaStream::SendingState); void onRSSChanged(Tp::StreamedMediaStream::SendingState); void onStreamStateChanged(const Tp::StreamedMediaStreamPtr &, Tp::MediaStreamState); void onChanInvalidated(Tp::DBusProxy *, const QString &, const QString &); // Special event handlers for the OutgoingCallTerminate state-machine void expectTerminateRequestStreamsFinished(Tp::PendingOperation *); void onTerminateGroupMembersChanged( const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &, const Tp::Channel::GroupMemberChangeDetails &); void onTerminateChanInvalidated(Tp::DBusProxy *, const QString &, const QString &); void onNewChannels(const Tp::ChannelDetailsList &); void onLocalHoldStateChanged(Tp::LocalHoldState, Tp::LocalHoldStateReason); private Q_SLOTS: void initTestCase(); void init(); void testOutgoingCall(); void testOutgoingCallBusy(); void testOutgoingCallNoAnswer(); void testOutgoingCallTerminate(); void testIncomingCall(); void testHold(); void testHoldNoUnhold(); void testHoldInabilityUnhold(); void testDTMF(); void testDTMFNoContinuousTone(); void cleanup(); void cleanupTestCase(); private: TestConnHelper *mConn; StreamedMediaChannelPtr mChan; QList mContacts; StreamedMediaStreams mRequestStreamsReturn; Contacts mChangedCurrent; Contacts mChangedLP; Contacts mChangedRP; Contacts mChangedRemoved; Channel::GroupMemberChangeDetails mDetails; StreamedMediaStreamPtr mStreamRemovedReturn; StreamedMediaStreamPtr mSDCStreamReturn; Tp::MediaStreamDirection mSDCDirectionReturn; Tp::MediaStreamPendingSend mSDCPendingReturn; StreamedMediaStreamPtr mSSCStreamReturn; Tp::StreamedMediaStream::SendingState mChangedLSS; Tp::StreamedMediaStream::SendingState mChangedRSS; Tp::MediaStreamState mSSCStateReturn; QQueue mLocalHoldStates; QQueue mLocalHoldStateReasons; // state machine for the OutgoingCall test-case enum { OutgoingStateInitial, OutgoingStateRequested, OutgoingStateRinging, OutgoingStateDone } mOutgoingState; bool mOutgoingGotRequestStreamsFinished; bool mOutgoingAudioDone; // state machine for the OutgoingCallTerminate test-case enum { TerminateStateInitial, TerminateStateRequested, TerminateStateRinging, TerminateStateAnswered, TerminateStateTerminated } mTerminateState; }; void TestStreamedMediaChan::expectRequestStreamsFinished(PendingOperation *op) { mRequestStreamsReturn.clear(); TEST_VERIFY_OP(op); qDebug() << "request streams finished successfully"; PendingStreamedMediaStreams *pms = qobject_cast(op); mRequestStreamsReturn = pms->streams(); mLoop->exit(0); } void TestStreamedMediaChan::expectBusyRequestStreamsFinished(PendingOperation *op) { if (!op->isFinished()) { qWarning() << "unfinished"; mLoop->exit(1); return; } if (op->isError()) { // The service signaled busy even before tp-qt finished introspection. // FIXME: should the error be something else, actually? Such as, perchance, // org.freedesktop.Telepathy.Error.Busy? (fd.o #29757). QCOMPARE(op->errorName(), QLatin1String("org.freedesktop.Telepathy.Error.Cancelled")); qDebug() << "request streams finished already busy"; mLoop->exit(0); return; } qDebug() << "request streams finished successfully"; PendingStreamedMediaStreams *pms = qobject_cast(op); mRequestStreamsReturn = pms->streams(); mLoop->exit(0); } void TestStreamedMediaChan::expectOutgoingRequestStreamsFinished(PendingOperation *op) { QVERIFY(op->isFinished()); QVERIFY(!op->isError()); QVERIFY(op->isValid()); PendingStreamedMediaStreams *pms = qobject_cast(op); mRequestStreamsReturn = pms->streams(); ContactPtr otherContact = mContacts.first(); QVERIFY(otherContact); QCOMPARE(mContacts.size(), 1); StreamedMediaStreamPtr stream = mRequestStreamsReturn.first(); QCOMPARE(stream->contact(), otherContact); QCOMPARE(stream->type(), Tp::MediaStreamTypeAudio); // These checks can't work reliably, unless we add some complex backdoors to the test service, // to only start changing state / direction when we explicitly tell it so (not automatically // when we have requested the stream) // QCOMPARE(stream->state(), Tp::MediaStreamStateDisconnected); // QCOMPARE(stream->direction(), Tp::MediaStreamDirectionBidirectional); QCOMPARE(mChan->streams().size(), 1); QVERIFY(mChan->streams().contains(stream)); qDebug() << "stream requested successfully"; // Only advance to Requested if the remote moving to RP hasn't already advanced it to Ringing or // even Answered - tbf it seems the StreamedMediaChannel semantics are quite hard for // application code to get right because the events can happen in whichever order. Should this // be considered a bug by itself? It'd probably be pretty hard to fix so I hope not :D if (mOutgoingState == OutgoingStateInitial) { mOutgoingState = OutgoingStateRequested; } if (mOutgoingState == OutgoingStateDone) { // finished later than the membersChanged() - exit mainloop now mLoop->exit(0); } else { // finished earlier than membersChanged() - it will exit mOutgoingGotRequestStreamsFinished = true; } } void TestStreamedMediaChan::onOutgoingGroupMembersChanged( const Contacts &groupMembersAdded, const Contacts &groupLocalPendingMembersAdded, const Contacts &groupRemotePendingMembersAdded, const Contacts &groupMembersRemoved, const Channel::GroupMemberChangeDetails &details) { // At this point, mContacts should still contain the contact we requested the // stream for ContactPtr otherContact = mContacts.first(); if (mOutgoingState == OutgoingStateInitial || mOutgoingState == OutgoingStateRequested) { // The target should have become remote pending now QVERIFY(groupMembersAdded.isEmpty()); QVERIFY(groupLocalPendingMembersAdded.isEmpty()); QCOMPARE(groupRemotePendingMembersAdded.size(), 1); QVERIFY(groupMembersRemoved.isEmpty()); QVERIFY(mChan->groupRemotePendingContacts().contains(otherContact)); QCOMPARE(mChan->awaitingRemoteAnswer(), true); qDebug() << "call now ringing"; mOutgoingState = OutgoingStateRinging; } else if (mOutgoingState == OutgoingStateRinging) { QCOMPARE(groupMembersAdded.size(), 1); QVERIFY(groupLocalPendingMembersAdded.isEmpty()); QVERIFY(groupRemotePendingMembersAdded.isEmpty()); QVERIFY(groupMembersRemoved.isEmpty()); QCOMPARE(mChan->groupContacts().size(), 2); QVERIFY(mChan->groupContacts().contains(otherContact)); QCOMPARE(mChan->awaitingRemoteAnswer(), false); qDebug() << "call now answered"; mOutgoingState = OutgoingStateDone; mOutgoingAudioDone = true; // Exit if we already got finished() from requestStreams() - otherwise the finish callback // will exit if (mOutgoingGotRequestStreamsFinished) { mLoop->exit(0); } } qDebug() << "group members changed"; mChangedCurrent = groupMembersAdded; mChangedLP = groupLocalPendingMembersAdded; mChangedRP = groupRemotePendingMembersAdded; mChangedRemoved = groupMembersRemoved; mDetails = details; } void TestStreamedMediaChan::onGroupMembersChanged( const Contacts &groupMembersAdded, const Contacts &groupLocalPendingMembersAdded, const Contacts &groupRemotePendingMembersAdded, const Contacts &groupMembersRemoved, const Channel::GroupMemberChangeDetails &details) { qDebug() << "group members changed"; mChangedCurrent = groupMembersAdded; mChangedLP = groupLocalPendingMembersAdded; mChangedRP = groupRemotePendingMembersAdded; mChangedRemoved = groupMembersRemoved; mDetails = details; } void TestStreamedMediaChan::onStreamRemoved(const StreamedMediaStreamPtr &stream) { qDebug() << "stream" << stream.data() << "removed"; mStreamRemovedReturn = stream; mLoop->exit(0); } void TestStreamedMediaChan::onStreamDirectionChanged(const StreamedMediaStreamPtr &stream, Tp::MediaStreamDirection direction, Tp::MediaStreamPendingSend pendingSend) { qDebug() << "stream" << stream.data() << "direction changed to" << direction; mSDCStreamReturn = stream; mSDCDirectionReturn = direction; mSDCPendingReturn = pendingSend; mLoop->exit(0); } void TestStreamedMediaChan::onLSSChanged(Tp::StreamedMediaStream::SendingState state) { qDebug() << "onLSSChanged: " << static_cast(state); mChangedLSS = state; mLoop->exit(0); } void TestStreamedMediaChan::onRSSChanged(Tp::StreamedMediaStream::SendingState state) { qDebug() << "onRSSChanged: " << static_cast(state); mChangedRSS = state; mLoop->exit(0); } void TestStreamedMediaChan::onStreamStateChanged(const StreamedMediaStreamPtr &stream, Tp::MediaStreamState state) { qDebug() << "stream" << stream.data() << "state changed to" << state; mSSCStreamReturn = stream; mSSCStateReturn = state; mLoop->exit(0); } void TestStreamedMediaChan::onChanInvalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage) { qDebug() << "chan invalidated:" << errorName << "-" << errorMessage; mLoop->exit(0); } void TestStreamedMediaChan::expectTerminateRequestStreamsFinished(PendingOperation *op) { QVERIFY(op->isFinished()); if (op->isError()) { // FIXME: should the error be something else, actually? Such as, perchance, // org.freedesktop.Telepathy.Error.Terminated? (fd.o #29757). QCOMPARE(op->errorName(), QLatin1String("org.freedesktop.Telepathy.Error.Cancelled")); qDebug() << "The remote hung up before we even got to take a look at the stream!"; mTerminateState = TerminateStateTerminated; mLoop->exit(0); return; } QVERIFY(op->isValid()); PendingStreamedMediaStreams *pms = qobject_cast(op); mRequestStreamsReturn = pms->streams(); qDebug() << "stream requested successfully"; // Only advance to Requested if the remote moving to RP hasn't already advanced it to Ringing or // even Answered - tbf it seems the StreamedMediaChannel semantics are quite hard for // application code to get right because the events can happen in whichever order. Should this // be considered a bug by itself? It'd probably be pretty hard to fix so I hope not :D if (mTerminateState == TerminateStateInitial) { mTerminateState = TerminateStateRequested; } } void TestStreamedMediaChan::onTerminateGroupMembersChanged( const Contacts &groupMembersAdded, const Contacts &groupLocalPendingMembersAdded, const Contacts &groupRemotePendingMembersAdded, const Contacts &groupMembersRemoved, const Channel::GroupMemberChangeDetails &details) { // At this point, mContacts should still contain the contact we requested the // stream for ContactPtr otherContact = mContacts.first(); if (mTerminateState == TerminateStateInitial || mTerminateState == TerminateStateRequested) { // The target should have become remote pending now QVERIFY(groupMembersAdded.isEmpty()); QVERIFY(groupLocalPendingMembersAdded.isEmpty()); QCOMPARE(groupRemotePendingMembersAdded.size(), 1); QVERIFY(groupMembersRemoved.isEmpty()); QVERIFY(mChan->groupRemotePendingContacts().contains(otherContact)); QCOMPARE(mChan->awaitingRemoteAnswer(), true); qDebug() << "call now ringing"; mTerminateState = TerminateStateRinging; } else if (mTerminateState == TerminateStateRinging) { QCOMPARE(groupMembersAdded.size(), 1); QVERIFY(groupLocalPendingMembersAdded.isEmpty()); QVERIFY(groupRemotePendingMembersAdded.isEmpty()); QVERIFY(groupMembersRemoved.isEmpty()); QCOMPARE(mChan->groupContacts().size(), 2); QVERIFY(mChan->groupContacts().contains(otherContact)); QCOMPARE(mChan->awaitingRemoteAnswer(), false); qDebug() << "call now answered"; mTerminateState = TerminateStateAnswered; } else if (mTerminateState == TerminateStateAnswered) { // It might be actually that currently this won't happen before invalidated() is emitted, so // we'll never reach this due to having exited the mainloop already - but it's entirely // valid for the library to signal either the invalidation or removing the members first, so // let's verify the member change in case it does that first. qDebug() << "membersChanged() after the call was answered - the remote probably hung up"; QVERIFY(groupMembersAdded.isEmpty()); QVERIFY(groupLocalPendingMembersAdded.isEmpty()); QVERIFY(groupRemotePendingMembersAdded.isEmpty()); QVERIFY(groupMembersRemoved.contains(otherContact) || groupMembersRemoved.contains(mChan->groupSelfContact())); // can be either, or both // the invalidated handler will change state due to the fact that we might get 0-2 of these, // but always exactly one invalidated() } qDebug() << "group members changed"; mChangedCurrent = groupMembersAdded; mChangedLP = groupLocalPendingMembersAdded; mChangedRP = groupRemotePendingMembersAdded; mChangedRemoved = groupMembersRemoved; mDetails = details; } void TestStreamedMediaChan::onTerminateChanInvalidated(Tp::DBusProxy *proxy, const QString &errorName, const QString &errorMessage) { qDebug() << "chan invalidated:" << errorName << "-" << errorMessage; mTerminateState = TerminateStateTerminated; mLoop->exit(0); } void TestStreamedMediaChan::onNewChannels(const Tp::ChannelDetailsList &channels) { qDebug() << "new channels"; Q_FOREACH (const Tp::ChannelDetails &details, channels) { QString channelType = details.properties.value(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType")).toString(); bool requested = details.properties.value(TP_QT_IFACE_CHANNEL + QLatin1String(".Requested")).toBool(); qDebug() << " channelType:" << channelType; qDebug() << " requested :" << requested; if (channelType == TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA && !requested) { mChan = StreamedMediaChannel::create(mConn->client(), details.channel.path(), details.properties); mLoop->exit(0); } } } void TestStreamedMediaChan::onLocalHoldStateChanged(Tp::LocalHoldState localHoldState, Tp::LocalHoldStateReason localHoldStateReason) { qDebug() << "local hold state changed:" << localHoldState << localHoldStateReason; mLocalHoldStates.append(localHoldState); mLocalHoldStateReasons.append(localHoldStateReason); mLoop->exit(0); } void TestStreamedMediaChan::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("streamed-media-chan"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); mConn = new TestConnHelper(this, EXAMPLE_TYPE_CALLABLE_CONNECTION, "account", "me@example.com", "protocol", "example", "simulation-delay", 1, NULL); QCOMPARE(mConn->connect(Connection::FeatureSelfContact), true); } void TestStreamedMediaChan::init() { initImpl(); mContacts.clear(); mRequestStreamsReturn.clear(); mChangedCurrent.clear(); mChangedLP.clear(); mChangedRP.clear(); mChangedRemoved.clear(); mStreamRemovedReturn.reset(); mSDCStreamReturn.reset(); mSDCDirectionReturn = (Tp::MediaStreamDirection) -1; mSDCPendingReturn = (Tp::MediaStreamPendingSend) -1; mSSCStateReturn = (Tp::MediaStreamState) -1; mChangedLSS = (Tp::StreamedMediaStream::SendingState) -1; mChangedRSS = (Tp::StreamedMediaStream::SendingState) -1; mSSCStreamReturn.reset(); mLocalHoldStates.clear(); mLocalHoldStateReasons.clear(); } void TestStreamedMediaChan::testOutgoingCall() { mContacts = mConn->contacts(QStringList() << QLatin1String("alice")); QCOMPARE(mContacts.size(), 1); ContactPtr otherContact = mContacts.first(); QVERIFY(otherContact); mChan = StreamedMediaChannelPtr::qObjectCast( mConn->createChannel(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA, otherContact)); QVERIFY(mChan); QVERIFY(connect(mChan->becomeReady(StreamedMediaChannel::FeatureStreams), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(mChan->isReady(StreamedMediaChannel::FeatureStreams)); QCOMPARE(mChan->streams().size(), 0); QCOMPARE(mChan->groupContacts().size(), 1); QCOMPARE(mChan->groupLocalPendingContacts().size(), 0); QCOMPARE(mChan->groupRemotePendingContacts().size(), 0); QCOMPARE(mChan->awaitingLocalAnswer(), false); QVERIFY(mChan->groupContacts().contains(mConn->client()->selfContact())); QVERIFY(connect(mChan.data(), SIGNAL(groupMembersChanged( const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &, const Tp::Channel::GroupMemberChangeDetails &)), SLOT(onGroupMembersChanged( const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &, const Tp::Channel::GroupMemberChangeDetails &)))); // RequestStreams with bad type must fail QVERIFY(connect(mChan->requestStream(otherContact, (Tp::MediaStreamType) -1), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectRequestStreamsFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 2); QCOMPARE(mRequestStreamsReturn.size(), 0); // Request audio stream, and wait for: // - the request to finish // - the contact to appear on RP // - the contact to accept the call mOutgoingState = OutgoingStateInitial; mOutgoingAudioDone = false; mOutgoingGotRequestStreamsFinished = false; QVERIFY(connect(mChan.data(), SIGNAL(groupMembersChanged( const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &, const Tp::Channel::GroupMemberChangeDetails &)), SLOT(onOutgoingGroupMembersChanged( const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &, const Tp::Channel::GroupMemberChangeDetails &)))); qDebug() << "requesting audio stream"; QVERIFY(connect(mChan->requestStreams(otherContact, QList() << Tp::MediaStreamTypeAudio), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectOutgoingRequestStreamsFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(static_cast(mOutgoingState), static_cast(OutgoingStateDone)); QCOMPARE(mOutgoingAudioDone, true); qDebug() << "requesting video stream"; // Request video stream QVERIFY(connect(mChan->requestStream(otherContact, Tp::MediaStreamTypeVideo), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectRequestStreamsFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mRequestStreamsReturn.size(), 1); StreamedMediaStreamPtr stream = mRequestStreamsReturn.first(); QCOMPARE(stream->contact(), otherContact); QCOMPARE(stream->type(), Tp::MediaStreamTypeVideo); // These checks can't work reliably, unless we add some complex backdoors to the test service, // to only start changing state / direction when we explicitly tell it so (not automatically // when we have requested the stream) // QCOMPARE(stream->state(), Tp::MediaStreamStateDisconnected); // QCOMPARE(stream->direction(), Tp::MediaStreamDirectionBidirectional); QCOMPARE(mChan->streams().size(), 2); QVERIFY(mChan->streams().contains(stream)); QCOMPARE(mChan->streamsForType(Tp::MediaStreamTypeAudio).size(), 1); QCOMPARE(mChan->streamsForType(Tp::MediaStreamTypeVideo).size(), 1); // test stream removal stream = mChan->streamsForType(Tp::MediaStreamTypeAudio).first(); QVERIFY(stream); qDebug() << "removing audio stream"; QVERIFY(connect(mChan.data(), SIGNAL(streamRemoved(const Tp::StreamedMediaStreamPtr &)), SLOT(onStreamRemoved(const Tp::StreamedMediaStreamPtr &)))); QVERIFY(connect(mChan->removeStream(stream), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); if (mChan->streams().size() == 2) { qDebug() << "re-entering mainloop to wait for stream removal being signaled"; // wait stream removed signal QCOMPARE(mLoop->exec(), 0); } QCOMPARE(mStreamRemovedReturn, stream); QCOMPARE(mChan->streams().size(), 1); QCOMPARE(mChan->streamsForType(Tp::MediaStreamTypeAudio).size(), 0); QCOMPARE(mChan->streamsForType(Tp::MediaStreamTypeVideo).size(), 1); // test stream direction/state changed stream = mChan->streamsForType(Tp::MediaStreamTypeVideo).first(); QVERIFY(stream); qDebug() << "changing stream direction, currently" << stream->direction(); qDebug() << "state currently" << stream->state(); if (stream->state() != Tp::MediaStreamStateConnected) { QVERIFY(connect(mChan.data(), SIGNAL(streamStateChanged(const Tp::StreamedMediaStreamPtr &, Tp::MediaStreamState)), SLOT(onStreamStateChanged(const Tp::StreamedMediaStreamPtr &, Tp::MediaStreamState)))); } else { // Pretend that we saw the SSC to Connected (although it might have happened even before the // stream request finished, in which case we have no change of catching it, because we don't // have the stream yet) mSSCStreamReturn = stream; mSSCStateReturn = Tp::MediaStreamStateConnected; } QCOMPARE(stream->localSendingRequested(), false); QCOMPARE(stream->remoteSendingRequested(), false); QCOMPARE(stream->sending(), true); QCOMPARE(stream->receiving(), true); /* request only receiving now */ QVERIFY(connect(mChan.data(), SIGNAL(streamDirectionChanged(const Tp::StreamedMediaStreamPtr &, Tp::MediaStreamDirection, Tp::MediaStreamPendingSend)), SLOT(onStreamDirectionChanged(const Tp::StreamedMediaStreamPtr &, Tp::MediaStreamDirection, Tp::MediaStreamPendingSend)))); QVERIFY(connect(stream.data(), SIGNAL(localSendingStateChanged(Tp::StreamedMediaStream::SendingState)), SLOT(onLSSChanged(Tp::StreamedMediaStream::SendingState)))); QVERIFY(connect(stream.data(), SIGNAL(remoteSendingStateChanged(Tp::StreamedMediaStream::SendingState)), SLOT(onRSSChanged(Tp::StreamedMediaStream::SendingState)))); QVERIFY(connect(stream->requestDirection(Tp::MediaStreamDirectionReceive), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); while (!mSDCStreamReturn || !mSSCStreamReturn || (static_cast(mChangedLSS) == -1)) { qDebug() << "re-entering mainloop to wait for stream direction change and state change"; // wait direction and state changed signal QCOMPARE(mLoop->exec(), 0); } // If this fails, we also got a remote state change signal, although we shouldn't have QCOMPARE(static_cast(mChangedRSS), -1); QCOMPARE(mSDCStreamReturn, stream); QVERIFY(mSDCDirectionReturn & Tp::MediaStreamDirectionReceive); QVERIFY(stream->direction() & Tp::MediaStreamDirectionReceive); QCOMPARE(stream->pendingSend(), mSDCPendingReturn); QCOMPARE(mSSCStreamReturn, stream); QCOMPARE(mSSCStateReturn, Tp::MediaStreamStateConnected); QCOMPARE(stream->sending(), false); QCOMPARE(stream->receiving(), true); } void TestStreamedMediaChan::testOutgoingCallBusy() { // This identifier contains the magic string (busy), which means the example // will simulate rejection of the call as busy rather than accepting it. mContacts = mConn->contacts(QStringList() << QLatin1String("alice (busy)")); QCOMPARE(mContacts.size(), 1); ContactPtr otherContact = mContacts.first(); QVERIFY(otherContact); mChan = StreamedMediaChannelPtr::qObjectCast( mConn->createChannel(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA, otherContact)); QVERIFY(mChan); QVERIFY(connect(mChan->becomeReady(StreamedMediaChannel::FeatureStreams), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(mChan->isReady(StreamedMediaChannel::FeatureStreams)); QCOMPARE(mChan->streams().size(), 0); QCOMPARE(mChan->groupContacts().size(), 1); QCOMPARE(mChan->groupLocalPendingContacts().size(), 0); QCOMPARE(mChan->groupRemotePendingContacts().size(), 0); QCOMPARE(mChan->awaitingLocalAnswer(), false); QVERIFY(mChan->groupContacts().contains(mConn->client()->selfContact())); // Request audio stream QVERIFY(connect(mChan->requestStreams(otherContact, QList() << Tp::MediaStreamTypeAudio), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectBusyRequestStreamsFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); if (mChan->isValid()) { qDebug() << "waiting for the channel to become invalidated"; QVERIFY(connect(mChan.data(), SIGNAL(invalidated(Tp::DBusProxy *, const QString &, const QString &)), SLOT(onChanInvalidated(Tp::DBusProxy *, const QString &, const QString &)))); QCOMPARE(mLoop->exec(), 0); } else { qDebug() << "not waiting for the channel to become invalidated, it has been invalidated" << "already"; } QCOMPARE(mChan->groupContacts().size(), 0); QCOMPARE(mChan->groupLocalPendingContacts().size(), 0); QCOMPARE(mChan->groupRemotePendingContacts().size(), 0); QCOMPARE(mChan->streams().size(), 0); } void TestStreamedMediaChan::testOutgoingCallNoAnswer() { // This identifier contains the magic string (no answer), which means the example // will never answer. mContacts = mConn->contacts(QStringList() << QLatin1String("alice (no answer)")); QCOMPARE(mContacts.size(), 1); ContactPtr otherContact = mContacts.first(); QVERIFY(otherContact); mChan = StreamedMediaChannelPtr::qObjectCast( mConn->createChannel(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA, otherContact)); QVERIFY(mChan); QVERIFY(connect(mChan->becomeReady(StreamedMediaChannel::FeatureStreams), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(mChan->isReady(StreamedMediaChannel::FeatureStreams)); QCOMPARE(mChan->streams().size(), 0); QCOMPARE(mChan->groupContacts().size(), 1); QCOMPARE(mChan->groupLocalPendingContacts().size(), 0); QCOMPARE(mChan->groupRemotePendingContacts().size(), 0); QCOMPARE(mChan->awaitingLocalAnswer(), false); QVERIFY(mChan->groupContacts().contains(mConn->client()->selfContact())); // Request audio stream QVERIFY(connect(mChan->requestStreams(otherContact, QList() << Tp::MediaStreamTypeAudio), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectRequestStreamsFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); /* After the initial flurry of D-Bus messages, alice still hasn't answered */ processDBusQueue(mConn->client().data()); QVERIFY(connect(mChan.data(), SIGNAL(groupMembersChanged( const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &, const Tp::Channel::GroupMemberChangeDetails &)), SLOT(onGroupMembersChanged( const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &, const Tp::Channel::GroupMemberChangeDetails &)))); // wait the contact to appear on RP while (mChan->groupRemotePendingContacts().size() == 0) { mLoop->processEvents(); } QVERIFY(mChan->groupRemotePendingContacts().contains(otherContact)); QCOMPARE(mChan->awaitingRemoteAnswer(), true); QCOMPARE(mChan->groupRemotePendingContacts().size(), 1); /* assume we're never going to get an answer, and hang up */ mChan->requestClose(); QVERIFY(connect(mChan.data(), SIGNAL(invalidated(Tp::DBusProxy *, const QString &, const QString &)), SLOT(onChanInvalidated(Tp::DBusProxy *, const QString &, const QString &)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->groupContacts().size(), 0); QCOMPARE(mChan->groupLocalPendingContacts().size(), 0); QCOMPARE(mChan->groupRemotePendingContacts().size(), 0); QCOMPARE(mChan->streams().size(), 0); } void TestStreamedMediaChan::testOutgoingCallTerminate() { // This identifier contains the magic string (terminate), which means the example // will simulate answering the call but then terminating it. mContacts = mConn->contacts(QStringList() << QLatin1String("alice (terminate)")); QCOMPARE(mContacts.size(), 1); ContactPtr otherContact = mContacts.first(); QVERIFY(otherContact); mChan = StreamedMediaChannelPtr::qObjectCast( mConn->createChannel(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA, otherContact)); QVERIFY(mChan); QVERIFY(connect(mChan->becomeReady(StreamedMediaChannel::FeatureStreams), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(mChan->isReady(StreamedMediaChannel::FeatureStreams)); QCOMPARE(mChan->streams().size(), 0); QCOMPARE(mChan->groupContacts().size(), 1); QCOMPARE(mChan->groupLocalPendingContacts().size(), 0); QCOMPARE(mChan->groupRemotePendingContacts().size(), 0); QCOMPARE(mChan->awaitingLocalAnswer(), false); QVERIFY(mChan->groupContacts().contains(mConn->client()->selfContact())); // Request audio stream, and verify that following doing so, we get events for: // [0-2].5) the stream request finishing (sadly this can happen before, or between, any of the // following) - is this a bug? // 1) the remote appearing on the RP contacts -> should be awaitingRemoteAnswer() // 2) the remote answering the call -> should not be awaitingRemoteAnswer(), should have us and // them as the current members // 3) the channel being invalidated (due to the remote having terminated the call) -> exits the // mainloop // // Previously, this test used to spin the mainloop until each of the events had seemingly // happened, only checking for the events between the iterations. This is race-prone however, // as multiple events can happen in one mainloop iteration if the test executes slowly compared // with the simulated network events from the service (eg. in valgrind or under high system // load). mTerminateState = TerminateStateInitial; QVERIFY(connect(mChan.data(), SIGNAL(groupMembersChanged( const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &, const Tp::Channel::GroupMemberChangeDetails &)), SLOT(onTerminateGroupMembersChanged( const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &, const Tp::Channel::GroupMemberChangeDetails &)))); QVERIFY(connect(mChan.data(), SIGNAL(invalidated(Tp::DBusProxy *, const QString &, const QString &)), SLOT(onTerminateChanInvalidated(Tp::DBusProxy *, const QString &, const QString &)))); qDebug() << "calling, hope somebody answers and doesn't immediately hang up!"; QVERIFY(connect(mChan->requestStreams(otherContact, QList() << Tp::MediaStreamTypeAudio), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectTerminateRequestStreamsFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(static_cast(mTerminateState), static_cast(TerminateStateTerminated)); qDebug() << "oh crap, nobody wants to talk to me"; } void TestStreamedMediaChan::testIncomingCall() { mConn->client()->lowlevel()->setSelfPresence(QLatin1String("away"), QLatin1String("preparing for a test")); Client::ConnectionInterfaceRequestsInterface *connRequestsInterface = mConn->client()->optionalInterface(); QVERIFY(connect(connRequestsInterface, SIGNAL(NewChannels(const Tp::ChannelDetailsList&)), SLOT(onNewChannels(const Tp::ChannelDetailsList&)))); mConn->client()->lowlevel()->setSelfPresence(QLatin1String("available"), QLatin1String("call me?")); QCOMPARE(mLoop->exec(), 0); QVERIFY(mChan); QCOMPARE(mChan->streams().size(), 0); QVERIFY(connect(mChan->becomeReady(StreamedMediaChannel::FeatureStreams), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(mChan->isReady(StreamedMediaChannel::FeatureStreams)); QCOMPARE(mChan->streams().size(), 1); QCOMPARE(mChan->groupContacts().size(), 1); QCOMPARE(mChan->groupLocalPendingContacts().size(), 1); QCOMPARE(mChan->groupRemotePendingContacts().size(), 0); QCOMPARE(mChan->awaitingLocalAnswer(), true); QCOMPARE(mChan->awaitingRemoteAnswer(), false); QVERIFY(mChan->groupLocalPendingContacts().contains(mConn->client()->selfContact())); ContactPtr otherContact = *mChan->groupContacts().begin(); QCOMPARE(otherContact, mChan->initiatorContact()); QVERIFY(connect(mChan->acceptCall(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->groupContacts().size(), 2); QCOMPARE(mChan->groupLocalPendingContacts().size(), 0); QCOMPARE(mChan->groupRemotePendingContacts().size(), 0); QCOMPARE(mChan->awaitingLocalAnswer(), false); QVERIFY(mChan->groupContacts().contains(mConn->client()->selfContact())); QCOMPARE(mChan->streams().size(), 1); StreamedMediaStreamPtr stream = mChan->streams().first(); QCOMPARE(stream->channel(), mChan); QCOMPARE(stream->type(), Tp::MediaStreamTypeAudio); qDebug() << "requesting a stream with a bad type"; // RequestStreams with bad type must fail QVERIFY(connect(mChan->requestStream(otherContact, (Tp::MediaStreamType) -1), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectRequestStreamsFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 2); QCOMPARE(mRequestStreamsReturn.size(), 0); qDebug() << "requesting a video stream"; // Request video stream QVERIFY(connect(mChan->requestStream(otherContact, Tp::MediaStreamTypeVideo), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectRequestStreamsFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mRequestStreamsReturn.size(), 1); stream = mRequestStreamsReturn.first(); QCOMPARE(stream->contact(), otherContact); QCOMPARE(stream->type(), Tp::MediaStreamTypeVideo); // These checks can't work reliably, unless we add some complex backdoors to the test service, // to only start changing state / direction when we explicitly tell it so (not automatically // when we have requested the stream) // QCOMPARE(stream->state(), Tp::MediaStreamStateDisconnected); // QCOMPARE(stream->direction(), Tp::MediaStreamDirectionBidirectional); QCOMPARE(mChan->streams().size(), 2); QVERIFY(mChan->streams().contains(stream)); QCOMPARE(mChan->streamsForType(Tp::MediaStreamTypeAudio).size(), 1); QCOMPARE(mChan->streamsForType(Tp::MediaStreamTypeVideo).size(), 1); // test stream removal stream = mChan->streamsForType(Tp::MediaStreamTypeAudio).first(); QVERIFY(stream); qDebug() << "removing the audio stream"; QVERIFY(connect(mChan.data(), SIGNAL(streamRemoved(const Tp::StreamedMediaStreamPtr &)), SLOT(onStreamRemoved(const Tp::StreamedMediaStreamPtr &)))); QVERIFY(connect(mChan->removeStreams(StreamedMediaStreams() << stream), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); if (mChan->streams().size() == 2) { // wait stream removed signal QCOMPARE(mLoop->exec(), 0); } QCOMPARE(mStreamRemovedReturn, stream); QCOMPARE(mChan->streams().size(), 1); QCOMPARE(mChan->streamsForType(Tp::MediaStreamTypeAudio).size(), 0); QCOMPARE(mChan->streamsForType(Tp::MediaStreamTypeVideo).size(), 1); // test stream direction/state changed stream = mChan->streamsForType(Tp::MediaStreamTypeVideo).first(); QVERIFY(stream); qDebug() << "requesting direction (false, true) - currently" << stream->direction(); qDebug() << "current stream state" << stream->state(); if (stream->state() != Tp::MediaStreamStateConnected) { QVERIFY(connect(mChan.data(), SIGNAL(streamStateChanged(const Tp::StreamedMediaStreamPtr &, Tp::MediaStreamState)), SLOT(onStreamStateChanged(const Tp::StreamedMediaStreamPtr &, Tp::MediaStreamState)))); } else { // Pretend that we saw the SSC to Connected (although it might have happened even before the // stream request finished, in which case we have no change of catching it, because we don't // have the stream yet) mSSCStreamReturn = stream; mSSCStateReturn = Tp::MediaStreamStateConnected; } QVERIFY(connect(mChan.data(), SIGNAL(streamDirectionChanged(const Tp::StreamedMediaStreamPtr &, Tp::MediaStreamDirection, Tp::MediaStreamPendingSend)), SLOT(onStreamDirectionChanged(const Tp::StreamedMediaStreamPtr &, Tp::MediaStreamDirection, Tp::MediaStreamPendingSend)))); QVERIFY(connect(stream.data(), SIGNAL(localSendingStateChanged(Tp::StreamedMediaStream::SendingState)), SLOT(onLSSChanged(Tp::StreamedMediaStream::SendingState)))); QVERIFY(connect(stream.data(), SIGNAL(remoteSendingStateChanged(Tp::StreamedMediaStream::SendingState)), SLOT(onRSSChanged(Tp::StreamedMediaStream::SendingState)))); QVERIFY(connect(stream->requestDirection(false, true), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); while (!mSDCStreamReturn || !mSSCStreamReturn || (static_cast(mChangedLSS) == -1)) { // wait direction and state changed signal qDebug() << "re-entering mainloop to wait for stream direction change and state change"; QCOMPARE(mLoop->exec(), 0); } // If this fails, we also got a remote state change signal, although we shouldn't have QCOMPARE(static_cast(mChangedRSS), -1); QCOMPARE(mSDCStreamReturn, stream); QVERIFY(mSDCDirectionReturn & Tp::MediaStreamDirectionReceive); QVERIFY(stream->direction() & Tp::MediaStreamDirectionReceive); QCOMPARE(stream->pendingSend(), mSDCPendingReturn); QCOMPARE(mSSCStreamReturn, stream); QCOMPARE(mSSCStateReturn, Tp::MediaStreamStateConnected); } void TestStreamedMediaChan::testHold() { mContacts = mConn->contacts(QStringList() << QLatin1String("bob")); QCOMPARE(mContacts.size(), 1); ContactPtr otherContact = mContacts.first(); QVERIFY(otherContact); mChan = StreamedMediaChannelPtr::qObjectCast( mConn->createChannel(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA, otherContact)); QVERIFY(mChan); QVERIFY(connect(mChan->becomeReady(StreamedMediaChannel::FeatureLocalHoldState), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(mChan->isReady(StreamedMediaChannel::FeatureLocalHoldState)); QCOMPARE(static_cast(mChan->localHoldState()), static_cast(LocalHoldStateUnheld)); QCOMPARE(static_cast(mChan->localHoldStateReason()), static_cast(LocalHoldStateReasonNone)); QVERIFY(connect(mChan.data(), SIGNAL(localHoldStateChanged(Tp::LocalHoldState, Tp::LocalHoldStateReason)), SLOT(onLocalHoldStateChanged(Tp::LocalHoldState, Tp::LocalHoldStateReason)))); // Request hold QVERIFY(connect(mChan->requestHold(true), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); while (mLocalHoldStates.size() != 2) { QCOMPARE(mLoop->exec(), 0); } QCOMPARE(mLocalHoldStates.first(), static_cast(LocalHoldStatePendingHold)); QCOMPARE(mLocalHoldStateReasons.first(), static_cast(LocalHoldStateReasonRequested)); QCOMPARE(mLocalHoldStates.last(), static_cast(LocalHoldStateHeld)); QCOMPARE(mLocalHoldStateReasons.last(), static_cast(LocalHoldStateReasonRequested)); QCOMPARE(static_cast(mChan->localHoldState()), static_cast(LocalHoldStateHeld)); QCOMPARE(static_cast(mChan->localHoldStateReason()), static_cast(LocalHoldStateReasonRequested)); mLocalHoldStates.clear(); mLocalHoldStateReasons.clear(); // Request unhold QVERIFY(connect(mChan->requestHold(false), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); while (mLocalHoldStates.size() != 2) { QCOMPARE(mLoop->exec(), 0); } QCOMPARE(mLocalHoldStates.first(), static_cast(LocalHoldStatePendingUnhold)); QCOMPARE(mLocalHoldStateReasons.first(), static_cast(LocalHoldStateReasonRequested)); QCOMPARE(mLocalHoldStates.last(), static_cast(LocalHoldStateUnheld)); QCOMPARE(mLocalHoldStateReasons.last(), static_cast(LocalHoldStateReasonRequested)); QCOMPARE(static_cast(mChan->localHoldState()), static_cast(LocalHoldStateUnheld)); QCOMPARE(static_cast(mChan->localHoldStateReason()), static_cast(LocalHoldStateReasonRequested)); } void TestStreamedMediaChan::testHoldNoUnhold() { mContacts = mConn->contacts(QStringList() << QLatin1String("bob (no unhold)")); QCOMPARE(mContacts.size(), 1); ContactPtr otherContact = mContacts.first(); QVERIFY(otherContact); mChan = StreamedMediaChannelPtr::qObjectCast( mConn->createChannel(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA, otherContact)); QVERIFY(mChan); QVERIFY(connect(mChan->becomeReady(StreamedMediaChannel::FeatureLocalHoldState), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(mChan->isReady(StreamedMediaChannel::FeatureLocalHoldState)); QCOMPARE(static_cast(mChan->localHoldState()), static_cast(LocalHoldStateUnheld)); QCOMPARE(static_cast(mChan->localHoldStateReason()), static_cast(LocalHoldStateReasonNone)); QVERIFY(connect(mChan.data(), SIGNAL(localHoldStateChanged(Tp::LocalHoldState, Tp::LocalHoldStateReason)), SLOT(onLocalHoldStateChanged(Tp::LocalHoldState, Tp::LocalHoldStateReason)))); // Request hold QWeakPointer holdOp = mChan->requestHold(true); while (mLocalHoldStates.size() != 2 || (holdOp && !holdOp.data()->isFinished())) { mLoop->processEvents(); } QCOMPARE(!holdOp || holdOp.data()->isValid(), true); QCOMPARE(mLocalHoldStates.first(), static_cast(LocalHoldStatePendingHold)); QCOMPARE(mLocalHoldStateReasons.first(), static_cast(LocalHoldStateReasonRequested)); QCOMPARE(mLocalHoldStates.last(), static_cast(LocalHoldStateHeld)); QCOMPARE(mLocalHoldStateReasons.last(), static_cast(LocalHoldStateReasonRequested)); QCOMPARE(static_cast(mChan->localHoldState()), static_cast(LocalHoldStateHeld)); QCOMPARE(static_cast(mChan->localHoldStateReason()), static_cast(LocalHoldStateReasonRequested)); mLocalHoldStates.clear(); mLocalHoldStateReasons.clear(); qDebug() << "requesting failing unhold"; // Request unhold (fail) QVERIFY(connect(mChan->requestHold(false), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 1); QCOMPARE(mLocalHoldStates.size(), 0); QCOMPARE(mLocalHoldStateReasons.size(), 0); QCOMPARE(static_cast(mChan->localHoldState()), static_cast(LocalHoldStateHeld)); QCOMPARE(static_cast(mChan->localHoldStateReason()), static_cast(LocalHoldStateReasonRequested)); } void TestStreamedMediaChan::testHoldInabilityUnhold() { mContacts = mConn->contacts( QStringList() << QLatin1String("bob (inability to unhold)")); QCOMPARE(mContacts.size(), 1); ContactPtr otherContact = mContacts.first(); QVERIFY(otherContact); mChan = StreamedMediaChannelPtr::qObjectCast( mConn->createChannel(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA, otherContact)); QVERIFY(mChan); QVERIFY(connect(mChan->becomeReady(StreamedMediaChannel::FeatureLocalHoldState), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(mChan->isReady(StreamedMediaChannel::FeatureLocalHoldState)); QCOMPARE(static_cast(mChan->localHoldState()), static_cast(LocalHoldStateUnheld)); QCOMPARE(static_cast(mChan->localHoldStateReason()), static_cast(LocalHoldStateReasonNone)); QVERIFY(connect(mChan.data(), SIGNAL(localHoldStateChanged(Tp::LocalHoldState, Tp::LocalHoldStateReason)), SLOT(onLocalHoldStateChanged(Tp::LocalHoldState, Tp::LocalHoldStateReason)))); // Request hold QVERIFY(connect(mChan->requestHold(true), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); while (mLocalHoldStates.size() != 2) { QCOMPARE(mLoop->exec(), 0); } QCOMPARE(mLocalHoldStates.first(), static_cast(LocalHoldStatePendingHold)); QCOMPARE(mLocalHoldStateReasons.first(), static_cast(LocalHoldStateReasonRequested)); QCOMPARE(mLocalHoldStates.last(), static_cast(LocalHoldStateHeld)); QCOMPARE(mLocalHoldStateReasons.last(), static_cast(LocalHoldStateReasonRequested)); QCOMPARE(static_cast(mChan->localHoldState()), static_cast(LocalHoldStateHeld)); QCOMPARE(static_cast(mChan->localHoldStateReason()), static_cast(LocalHoldStateReasonRequested)); mLocalHoldStates.clear(); mLocalHoldStateReasons.clear(); // Request unhold (fail - back to hold) QVERIFY(connect(mChan->requestHold(false), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); while (mLocalHoldStates.size() != 3) { QCOMPARE(mLoop->exec(), 0); } LocalHoldState state = static_cast(mLocalHoldStates.dequeue()); LocalHoldStateReason stateReason = static_cast(mLocalHoldStateReasons.dequeue()); QCOMPARE(state, LocalHoldStatePendingUnhold); QCOMPARE(stateReason, LocalHoldStateReasonRequested); state = static_cast(mLocalHoldStates.dequeue()); stateReason = static_cast(mLocalHoldStateReasons.dequeue()); QCOMPARE(state, LocalHoldStatePendingHold); QCOMPARE(stateReason, LocalHoldStateReasonRequested); state = static_cast(mLocalHoldStates.dequeue()); stateReason = static_cast(mLocalHoldStateReasons.dequeue()); QCOMPARE(state, LocalHoldStateHeld); QCOMPARE(stateReason, LocalHoldStateReasonRequested); QCOMPARE(mChan->localHoldState(), LocalHoldStateHeld); QCOMPARE(mChan->localHoldStateReason(), LocalHoldStateReasonRequested); } void TestStreamedMediaChan::testDTMF() { mContacts = mConn->contacts(QStringList() << QLatin1String("john")); QCOMPARE(mContacts.size(), 1); ContactPtr otherContact = mContacts.first(); QVERIFY(otherContact); mChan = StreamedMediaChannelPtr::qObjectCast( mConn->createChannel(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA, otherContact)); QVERIFY(mChan); QVERIFY(connect(mChan->becomeReady(StreamedMediaChannel::FeatureStreams), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(mChan->isReady(StreamedMediaChannel::FeatureStreams)); // Request audio stream QVERIFY(connect(mChan->requestStreams(otherContact, QList() << Tp::MediaStreamTypeAudio), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectRequestStreamsFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mRequestStreamsReturn.size(), 1); StreamedMediaStreamPtr stream = mRequestStreamsReturn.first(); QCOMPARE(stream->contact(), otherContact); QCOMPARE(stream->type(), Tp::MediaStreamTypeAudio); QCOMPARE(mChan->streams().size(), 1); QVERIFY(mChan->streams().contains(stream)); // start dtmf QVERIFY(connect(stream->startDTMFTone(DTMFEventDigit0), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); // stop dtmf QVERIFY(connect(stream->stopDTMFTone(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); // stop dtmf again (should succeed) QVERIFY(connect(stream->stopDTMFTone(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); // Request video stream QVERIFY(connect(mChan->requestStream(otherContact, Tp::MediaStreamTypeVideo), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectRequestStreamsFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mRequestStreamsReturn.size(), 1); stream = mRequestStreamsReturn.first(); QCOMPARE(stream->contact(), otherContact); QCOMPARE(stream->type(), Tp::MediaStreamTypeVideo); QCOMPARE(mChan->streams().size(), 2); QVERIFY(mChan->streams().contains(stream)); // start dtmf (must fail) QVERIFY(connect(stream->startDTMFTone(DTMFEventDigit0), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 1); // stop dtmf (must fail) QVERIFY(connect(stream->stopDTMFTone(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 1); } void TestStreamedMediaChan::testDTMFNoContinuousTone() { mContacts = mConn->contacts( QStringList() << QLatin1String("john (no continuous tone)")); QCOMPARE(mContacts.size(), 1); ContactPtr otherContact = mContacts.first(); QVERIFY(otherContact); mChan = StreamedMediaChannelPtr::qObjectCast( mConn->createChannel(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA, otherContact)); QVERIFY(mChan); QVERIFY(connect(mChan->becomeReady(StreamedMediaChannel::FeatureStreams), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(mChan->isReady(StreamedMediaChannel::FeatureStreams)); // Request audio stream QVERIFY(connect(mChan->requestStreams(otherContact, QList() << Tp::MediaStreamTypeAudio), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectRequestStreamsFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mRequestStreamsReturn.size(), 1); StreamedMediaStreamPtr stream = mRequestStreamsReturn.first(); QCOMPARE(stream->contact(), otherContact); QCOMPARE(stream->type(), Tp::MediaStreamTypeAudio); QCOMPARE(mChan->streams().size(), 1); QVERIFY(mChan->streams().contains(stream)); // start dtmf QVERIFY(connect(stream->startDTMFTone(DTMFEventDigit0), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); // stop dtmf (must fail) QVERIFY(connect(stream->stopDTMFTone(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 1); } void TestStreamedMediaChan::cleanup() { mChan.reset(); mContacts.clear(); mRequestStreamsReturn.clear(); mStreamRemovedReturn.reset(); mChangedCurrent.clear(); mChangedLP.clear(); mChangedRP.clear(); mChangedRemoved.clear(); mDetails = Channel::GroupMemberChangeDetails(); mSDCStreamReturn.reset(); mSSCStreamReturn.reset(); cleanupImpl(); } void TestStreamedMediaChan::cleanupTestCase() { QCOMPARE(mConn->disconnect(), true); delete mConn; cleanupTestCaseImpl(); } QTEST_MAIN(TestStreamedMediaChan) #include "_gen/streamed-media-chan.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/base-protocol.cpp0000644000175200001440000006536512000056607024007 0ustar00collabora-develusers00000000000000#include #include #define TP_QT_ENABLE_LOWLEVEL_API #include #include #include #include #include #include #include #include #include using namespace Tp; class TestBaseProtocolCM; typedef SharedPtr TestBaseProtocolCMPtr; class TestBaseProtocolCM : public BaseConnectionManager { public: TestBaseProtocolCM(const QDBusConnection &conn, const QString & name) : BaseConnectionManager(conn, name) { } static void createCM(TestBaseProtocolCMPtr &cm); private: static BaseConnectionPtr createConnectionCb(const QVariantMap ¶meters, Tp::DBusError *error); static QString identifyAccountCb(const QVariantMap ¶meters, Tp::DBusError *error); static QString normalizeContactCb(const QString &contactId, Tp::DBusError *error); static QString normalizeVCardAddressCb(const QString &vcardField, const QString &vcardAddress, Tp::DBusError *error); static QString normalizeContactUriCb(const QString &uri, Tp::DBusError *error); }; class TestBaseProtocol : public Test { Q_OBJECT public: TestBaseProtocol(QObject *parent = 0) : Test(parent) { } private: static void protocolObjectSvcSideCb(TestBaseProtocolCMPtr &cm); static void addressingIfaceSvcSideCb(TestBaseProtocolCMPtr &cm); static void avatarsIfaceSvcSideCb(TestBaseProtocolCMPtr &cm); static void presenceIfaceSvcSideCb(TestBaseProtocolCMPtr &cm); private Q_SLOTS: void initTestCase(); void init(); void protocolObjectSvcSide(); void protocolObjectClientSide(); void addressingIfaceSvcSide(); void addressingIfaceClientSide(); void avatarsIfaceSvcSide(); void avatarsIfaceClientSide(); void presenceIfaceSvcSide(); void presenceIfaceClientSide(); void cleanup(); void cleanupTestCase(); private: TestThreadHelper *mThreadHelper; }; void TestBaseProtocolCM::createCM(TestBaseProtocolCMPtr &cm) { cm = BaseConnectionManager::create(QLatin1String("testcm")); BaseProtocolPtr protocol = BaseProtocol::create(QLatin1String("example")); protocol->setConnectionInterfaces(QStringList() << TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_LIST); protocol->setParameters(ProtocolParameterList() << ProtocolParameter(QLatin1String("account"), QDBusSignature("s"), Tp::ConnMgrParamFlagRequired | Tp::ConnMgrParamFlagRegister)); protocol->setRequestableChannelClasses(RequestableChannelClassSpec::textChat()); protocol->setVCardField(QLatin1String("x-telepathy-example")); protocol->setEnglishName(QLatin1String("Test CM")); protocol->setIconName(QLatin1String("im-icq")); protocol->setAuthenticationTypes(QStringList() << TP_QT_IFACE_CHANNEL_INTERFACE_SASL_AUTHENTICATION); protocol->setCreateConnectionCallback(ptrFun(&TestBaseProtocolCM::createConnectionCb)); protocol->setIdentifyAccountCallback(ptrFun(&TestBaseProtocolCM::identifyAccountCb)); protocol->setNormalizeContactCallback(ptrFun(&TestBaseProtocolCM::normalizeContactCb)); BaseProtocolAddressingInterfacePtr addressingIface = BaseProtocolAddressingInterface::create(); addressingIface->setAddressableUriSchemes(QStringList() << QLatin1String("xmpp") << QLatin1String("tel")); addressingIface->setAddressableVCardFields(QStringList() << QLatin1String("x-jabber") << QLatin1String("tel")); addressingIface->setNormalizeVCardAddressCallback( ptrFun(&TestBaseProtocolCM::normalizeVCardAddressCb)); addressingIface->setNormalizeContactUriCallback( ptrFun(&TestBaseProtocolCM::normalizeContactUriCb)); QVERIFY(protocol->plugInterface(addressingIface)); BaseProtocolAvatarsInterfacePtr avatarsIface = BaseProtocolAvatarsInterface::create(); avatarsIface->setAvatarDetails( AvatarSpec(QStringList() << QLatin1String("image/png") << QLatin1String("image/jpeg") << QLatin1String("image/gif"), 32, 96, 64, 32, 96, 64, 37748736)); QVERIFY(protocol->plugInterface(avatarsIface)); BaseProtocolPresenceInterfacePtr presenceIface = BaseProtocolPresenceInterface::create(); presenceIface->setStatuses(PresenceSpecList() << PresenceSpec::available() << PresenceSpec::away() << PresenceSpec::busy() << PresenceSpec::offline()); QVERIFY(protocol->plugInterface(presenceIface)); QVERIFY(cm->addProtocol(protocol)); Tp::DBusError err; QVERIFY(cm->registerObject(&err)); QVERIFY(!err.isValid()); QVERIFY(cm->isRegistered()); } BaseConnectionPtr TestBaseProtocolCM::createConnectionCb(const QVariantMap ¶meters, Tp::DBusError *error) { if (parameters.contains(QLatin1String("account"))) { error->set(TP_QT_ERROR_NOT_IMPLEMENTED, parameters.value(QLatin1String("account")).toString()); } else { error->set(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("This test doesn't create connections")); } return BaseConnectionPtr(); } QString TestBaseProtocolCM::identifyAccountCb(const QVariantMap ¶meters, Tp::DBusError *error) { QString account = parameters.value(QLatin1String("account")).toString(); if (account.isEmpty()) { error->set(TP_QT_ERROR_INVALID_ARGUMENT, QLatin1String("'account' parameter not given")); } return account; } QString TestBaseProtocolCM::normalizeContactCb(const QString &contactId, Tp::DBusError *error) { if (contactId.isEmpty()) { error->set(TP_QT_ERROR_INVALID_HANDLE, QLatin1String("ID must not be empty")); return QString(); } return contactId.toLower(); } QString TestBaseProtocolCM::normalizeVCardAddressCb(const QString &vcardField, const QString &vcardAddress, Tp::DBusError *error) { if (vcardField == QLatin1String("x-jabber")) { return vcardAddress.toLower() + QLatin1String("@wonderland"); } else { error->set(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Invalid VCard field")); return QString(); } } QString TestBaseProtocolCM::normalizeContactUriCb(const QString &uri, Tp::DBusError *error) { if (uri.startsWith(QLatin1String("xmpp:"))) { if (uri.contains(QLatin1Char('/'))) { return uri.left(uri.indexOf(QLatin1Char('/'))); } else { return uri; } } else { error->set(TP_QT_ERROR_INVALID_ARGUMENT, QLatin1String("Invalid URI")); return QString(); } } void TestBaseProtocol::initTestCase() { initTestCaseImpl(); } void TestBaseProtocol::init() { initImpl(); mThreadHelper = new TestThreadHelper(); TEST_THREAD_HELPER_EXECUTE(mThreadHelper, &TestBaseProtocolCM::createCM); } void TestBaseProtocol::protocolObjectSvcSideCb(TestBaseProtocolCMPtr &cm) { QCOMPARE(cm->name(), QLatin1String("testcm")); QVERIFY(cm->hasProtocol(QLatin1String("example"))); QCOMPARE(cm->protocols().size(), 1); BaseProtocolPtr protocol = cm->protocols().at(0); QVERIFY(protocol); //basic properties QCOMPARE(protocol->name(), QLatin1String("example")); QCOMPARE(protocol->vcardField(), QLatin1String("x-telepathy-example")); QCOMPARE(protocol->englishName(), QLatin1String("Test CM")); QCOMPARE(protocol->iconName(), QLatin1String("im-icq")); QCOMPARE(protocol->connectionInterfaces(), QStringList() << TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_LIST); QCOMPARE(protocol->authenticationTypes(), QStringList() << TP_QT_IFACE_CHANNEL_INTERFACE_SASL_AUTHENTICATION); QCOMPARE(protocol->requestableChannelClasses().size(), 1); QCOMPARE(protocol->requestableChannelClasses().at(0), RequestableChannelClassSpec::textChat()); //parameters QCOMPARE(protocol->parameters().size(), 1); QCOMPARE(protocol->parameters().at(0).name(), QLatin1String("account")); QCOMPARE(protocol->parameters().at(0).dbusSignature(), QDBusSignature("s")); QVERIFY(protocol->parameters().at(0).isRequired()); QVERIFY(protocol->parameters().at(0).isRequiredForRegistration()); QVERIFY(!protocol->parameters().at(0).isSecret()); //interfaces QCOMPARE(protocol->interfaces().size(), 3); //immutable props QVariantMap props = protocol->immutableProperties(); QVERIFY(props.contains(TP_QT_IFACE_PROTOCOL + QLatin1String(".Interfaces"))); QStringList sl = props.value( TP_QT_IFACE_PROTOCOL + QLatin1String(".Interfaces")).toStringList(); QVERIFY(sl.contains(TP_QT_IFACE_PROTOCOL_INTERFACE_ADDRESSING)); QVERIFY(sl.contains(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS)); QVERIFY(sl.contains(TP_QT_IFACE_PROTOCOL_INTERFACE_PRESENCE)); QVERIFY(props.contains(TP_QT_IFACE_PROTOCOL + QLatin1String(".Parameters"))); ParamSpecList params = qvariant_cast(props.value( TP_QT_IFACE_PROTOCOL + QLatin1String(".Parameters"))); QCOMPARE(params.size(), 1); QCOMPARE(params.at(0).name, QLatin1String("account")); QCOMPARE(params.at(0).signature, QLatin1String("s")); QCOMPARE(params.at(0).flags, uint(ConnMgrParamFlagRequired | ConnMgrParamFlagRegister)); QVERIFY(props.contains(TP_QT_IFACE_PROTOCOL + QLatin1String(".VCardField"))); QCOMPARE(props.value(TP_QT_IFACE_PROTOCOL + QLatin1String(".VCardField")).toString(), QLatin1String("x-telepathy-example")); QVERIFY(props.contains(TP_QT_IFACE_PROTOCOL + QLatin1String(".EnglishName"))); QCOMPARE(props.value(TP_QT_IFACE_PROTOCOL + QLatin1String(".EnglishName")).toString(), QLatin1String("Test CM")); QVERIFY(props.contains(TP_QT_IFACE_PROTOCOL + QLatin1String(".Icon"))); QCOMPARE(props.value(TP_QT_IFACE_PROTOCOL + QLatin1String(".Icon")).toString(), QLatin1String("im-icq")); QVERIFY(props.contains(TP_QT_IFACE_PROTOCOL + QLatin1String(".RequestableChannelClasses"))); RequestableChannelClassList rcc = qvariant_cast(props.value( TP_QT_IFACE_PROTOCOL + QLatin1String(".RequestableChannelClasses"))); QCOMPARE(rcc.size(), 1); QCOMPARE(RequestableChannelClassSpec(rcc.at(0)), RequestableChannelClassSpec::textChat()); QVERIFY(props.contains(TP_QT_IFACE_PROTOCOL + QLatin1String(".ConnectionInterfaces"))); sl = props.value(TP_QT_IFACE_PROTOCOL + QLatin1String(".ConnectionInterfaces")).toStringList(); QCOMPARE(sl, QStringList() << TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_LIST); QVERIFY(props.contains(TP_QT_IFACE_PROTOCOL + QLatin1String(".AuthenticationTypes"))); sl = props.value(TP_QT_IFACE_PROTOCOL + QLatin1String(".AuthenticationTypes")).toStringList(); QCOMPARE(sl, QStringList() << TP_QT_IFACE_CHANNEL_INTERFACE_SASL_AUTHENTICATION); //interface immutable properties should also be here //test only one - the rest later QVERIFY(props.contains( TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MinimumAvatarHeight"))); QCOMPARE(props.value( TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MinimumAvatarHeight")).toInt(), 32); //methods { Tp::DBusError err; QString normalizedContact = protocol->normalizeContact(QLatin1String("BoB"), &err); QVERIFY(!err.isValid()); QCOMPARE(normalizedContact, QLatin1String("bob")); } { Tp::DBusError err; QString account = protocol->identifyAccount(QVariantMap(), &err); QVERIFY(err.isValid()); QVERIFY(account.isEmpty()); QCOMPARE(err.name(), TP_QT_ERROR_INVALID_ARGUMENT); QCOMPARE(err.message(), QLatin1String("'account' parameter not given")); } { Tp::DBusError err; BaseConnectionPtr conn = protocol->createConnection(QVariantMap(), &err); QVERIFY(err.isValid()); QVERIFY(conn.isNull()); QCOMPARE(err.name(), TP_QT_ERROR_NOT_IMPLEMENTED); QCOMPARE(err.message(), QLatin1String("This test doesn't create connections")); } } void TestBaseProtocol::protocolObjectSvcSide() { TEST_THREAD_HELPER_EXECUTE(mThreadHelper, &TestBaseProtocol::protocolObjectSvcSideCb); } void TestBaseProtocol::protocolObjectClientSide() { ConnectionManagerPtr cliCM = ConnectionManager::create(QLatin1String("testcm")); PendingReady *pr = cliCM->becomeReady(ConnectionManager::FeatureCore); connect(pr, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(cliCM->supportedProtocols().size(), 1); QVERIFY(cliCM->hasProtocol(QLatin1String("example"))); ProtocolInfo protocol = cliCM->protocol(QLatin1String("example")); QVERIFY(protocol.isValid()); Tp::Client::ProtocolInterface protocolIface(cliCM->busName(), cliCM->objectPath() + QLatin1String("/example")); //basic properties QCOMPARE(protocol.vcardField(), QLatin1String("x-telepathy-example")); QCOMPARE(protocol.englishName(), QLatin1String("Test CM")); QCOMPARE(protocol.iconName(), QLatin1String("im-icq")); QCOMPARE(protocol.capabilities().allClassSpecs().size(), 1); QVERIFY(protocol.capabilities().textChats()); PendingVariant *pv = protocolIface.requestPropertyConnectionInterfaces(); connect(pv, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(pv->result().toStringList(), QStringList() << TP_QT_IFACE_CONNECTION_INTERFACE_CONTACT_LIST); pv = protocolIface.requestPropertyAuthenticationTypes(); connect(pv, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(pv->result().toStringList(), QStringList() << TP_QT_IFACE_CHANNEL_INTERFACE_SASL_AUTHENTICATION); //parameters QVERIFY(protocol.hasParameter(QLatin1String("account"))); ProtocolParameterList params = protocol.parameters(); QCOMPARE(params.size(), 1); QCOMPARE(params.at(0).name(), QLatin1String("account")); QCOMPARE(params.at(0).dbusSignature(), QDBusSignature("s")); QVERIFY(params.at(0).isRequired()); QVERIFY(params.at(0).isRequiredForRegistration()); QVERIFY(!params.at(0).isSecret()); //methods { QDBusPendingReply reply = protocolIface.NormalizeContact(QLatin1String("ALiCe")); reply.waitForFinished(); QVERIFY(!reply.isError()); QCOMPARE(reply.value(), QLatin1String("alice")); } QVariantMap map; map.insert(QLatin1String("account"), QLatin1String("example@nowhere.com")); { QDBusPendingReply reply = protocolIface.IdentifyAccount(map); reply.waitForFinished(); QVERIFY(!reply.isError()); QCOMPARE(reply.value(), QLatin1String("example@nowhere.com")); } PendingConnection *pc = cliCM->lowlevel()->requestConnection(QLatin1String("example"), map); connect(pc, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mLastError, TP_QT_ERROR_NOT_IMPLEMENTED); QCOMPARE(mLastErrorMessage, QLatin1String("example@nowhere.com")); } void TestBaseProtocol::addressingIfaceSvcSideCb(TestBaseProtocolCMPtr &cm) { QCOMPARE(cm->name(), QLatin1String("testcm")); QVERIFY(cm->hasProtocol(QLatin1String("example"))); QCOMPARE(cm->protocols().size(), 1); Tp::BaseProtocolPtr protocol = cm->protocols().at(0); QVERIFY(protocol); Tp::BaseProtocolAddressingInterfacePtr iface = Tp::BaseProtocolAddressingInterfacePtr::qObjectCast( protocol->interface(TP_QT_IFACE_PROTOCOL_INTERFACE_ADDRESSING)); QVERIFY(iface); //properties QStringList uriSchemes = iface->addressableUriSchemes(); QCOMPARE(uriSchemes.size(), 2); QVERIFY(uriSchemes.contains(QLatin1String("xmpp"))); QVERIFY(uriSchemes.contains(QLatin1String("tel"))); QStringList vcardFields = iface->addressableVCardFields(); QCOMPARE(vcardFields.size(), 2); QVERIFY(vcardFields.contains(QLatin1String("x-jabber"))); QVERIFY(vcardFields.contains(QLatin1String("tel"))); //no immutable properties QVERIFY(iface->immutableProperties().isEmpty()); //methods { Tp::DBusError err; QString result = iface->normalizeVCardAddress(QLatin1String("x-msn"), QLatin1String("Alice"), &err); QVERIFY(err.isValid()); QVERIFY(result.isEmpty()); QCOMPARE(err.name(), TP_QT_ERROR_NOT_IMPLEMENTED); QCOMPARE(err.message(), QLatin1String("Invalid VCard field")); } { Tp::DBusError err; QString result = iface->normalizeContactUri( QLatin1String("xmpp:alice@wonderland/Mobile"), &err); QVERIFY(!err.isValid()); QCOMPARE(result, QLatin1String("xmpp:alice@wonderland")); } } void TestBaseProtocol::addressingIfaceSvcSide() { TEST_THREAD_HELPER_EXECUTE(mThreadHelper, &TestBaseProtocol::addressingIfaceSvcSideCb); } void TestBaseProtocol::addressingIfaceClientSide() { ConnectionManagerPtr cliCM = ConnectionManager::create(QLatin1String("testcm")); PendingReady *pr = cliCM->becomeReady(ConnectionManager::FeatureCore); connect(pr, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(cliCM->supportedProtocols().size(), 1); QVERIFY(cliCM->hasProtocol(QLatin1String("example"))); ProtocolInfo protocol = cliCM->protocol(QLatin1String("example")); QVERIFY(protocol.isValid()); //properties QStringList uriSchemes = protocol.addressableUriSchemes(); QCOMPARE(uriSchemes.size(), 2); QVERIFY(uriSchemes.contains(QLatin1String("xmpp"))); QVERIFY(uriSchemes.contains(QLatin1String("tel"))); QStringList vcardFields = protocol.addressableVCardFields(); QCOMPARE(vcardFields.size(), 2); QVERIFY(vcardFields.contains(QLatin1String("x-jabber"))); QVERIFY(vcardFields.contains(QLatin1String("tel"))); //methods PendingString *str = protocol.normalizeVCardAddress(QLatin1String("x-jabber"), QLatin1String("Alice")); connect(str, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(str->result(), QLatin1String("alice@wonderland")); str = protocol.normalizeContactUri(QLatin1String("invalid")); connect(str, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mLastError, TP_QT_ERROR_INVALID_ARGUMENT); QCOMPARE(mLastErrorMessage, QLatin1String("Invalid URI")); } void TestBaseProtocol::avatarsIfaceSvcSideCb(TestBaseProtocolCMPtr &cm) { QCOMPARE(cm->name(), QLatin1String("testcm")); QVERIFY(cm->hasProtocol(QLatin1String("example"))); QCOMPARE(cm->protocols().size(), 1); Tp::BaseProtocolPtr protocol = cm->protocols().at(0); QVERIFY(protocol); Tp::BaseProtocolAvatarsInterfacePtr iface = Tp::BaseProtocolAvatarsInterfacePtr::qObjectCast( protocol->interface(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS)); QVERIFY(iface); //avatar details property AvatarSpec avatarSpec = iface->avatarDetails(); QVERIFY(avatarSpec.isValid()); QStringList mimeTypes = avatarSpec.supportedMimeTypes(); QCOMPARE(mimeTypes.size(), 3); QVERIFY(mimeTypes.contains(QLatin1String("image/png"))); QVERIFY(mimeTypes.contains(QLatin1String("image/jpeg"))); QVERIFY(mimeTypes.contains(QLatin1String("image/gif"))); QCOMPARE(avatarSpec.minimumWidth(), 32U); QCOMPARE(avatarSpec.maximumWidth(), 96U); QCOMPARE(avatarSpec.recommendedWidth(), 64U); QCOMPARE(avatarSpec.minimumHeight(), 32U); QCOMPARE(avatarSpec.maximumHeight(), 96U); QCOMPARE(avatarSpec.recommendedHeight(), 64U); QCOMPARE(avatarSpec.maximumBytes(), 37748736U); //immutable properties QVariantMap props = protocol->immutableProperties(); QVERIFY(props.contains( TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".SupportedAvatarMIMETypes"))); mimeTypes = props.value( TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".SupportedAvatarMIMETypes")) .toStringList(); QCOMPARE(mimeTypes.size(), 3); QVERIFY(mimeTypes.contains(QLatin1String("image/png"))); QVERIFY(mimeTypes.contains(QLatin1String("image/jpeg"))); QVERIFY(mimeTypes.contains(QLatin1String("image/gif"))); QVERIFY(props.contains( TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MinimumAvatarHeight"))); QCOMPARE(props.value( TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MinimumAvatarHeight")).toInt(), 32); QVERIFY(props.contains( TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MinimumAvatarWidth"))); QCOMPARE(props.value( TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MinimumAvatarWidth")).toInt(), 32); QVERIFY(props.contains( TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".RecommendedAvatarHeight"))); QCOMPARE(props.value( TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".RecommendedAvatarHeight")).toInt(), 64); QVERIFY(props.contains( TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".RecommendedAvatarWidth"))); QCOMPARE(props.value( TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".RecommendedAvatarWidth")).toInt(), 64); QVERIFY(props.contains( TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MaximumAvatarHeight"))); QCOMPARE(props.value( TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MaximumAvatarHeight")).toInt(), 96); QVERIFY(props.contains( TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MaximumAvatarWidth"))); QCOMPARE(props.value( TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MaximumAvatarWidth")).toInt(), 96); QVERIFY(props.contains( TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MaximumAvatarBytes"))); QCOMPARE(props.value( TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MaximumAvatarBytes")).toInt(), 37748736); } void TestBaseProtocol::avatarsIfaceSvcSide() { TEST_THREAD_HELPER_EXECUTE(mThreadHelper, &TestBaseProtocol::avatarsIfaceSvcSideCb); } void TestBaseProtocol::avatarsIfaceClientSide() { ConnectionManagerPtr cliCM = ConnectionManager::create(QLatin1String("testcm")); PendingReady *pr = cliCM->becomeReady(ConnectionManager::FeatureCore); connect(pr, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(cliCM->supportedProtocols().size(), 1); QVERIFY(cliCM->hasProtocol(QLatin1String("example"))); ProtocolInfo protocol = cliCM->protocol(QLatin1String("example")); QVERIFY(protocol.isValid()); //avatar iface AvatarSpec avatarSpec = protocol.avatarRequirements(); QVERIFY(avatarSpec.isValid()); QStringList mimeTypes = avatarSpec.supportedMimeTypes(); QCOMPARE(mimeTypes.size(), 3); QVERIFY(mimeTypes.contains(QLatin1String("image/png"))); QVERIFY(mimeTypes.contains(QLatin1String("image/jpeg"))); QVERIFY(mimeTypes.contains(QLatin1String("image/gif"))); QCOMPARE(avatarSpec.minimumWidth(), 32U); QCOMPARE(avatarSpec.maximumWidth(), 96U); QCOMPARE(avatarSpec.recommendedWidth(), 64U); QCOMPARE(avatarSpec.minimumHeight(), 32U); QCOMPARE(avatarSpec.maximumHeight(), 96U); QCOMPARE(avatarSpec.recommendedHeight(), 64U); QCOMPARE(avatarSpec.maximumBytes(), 37748736U); } void TestBaseProtocol::presenceIfaceSvcSideCb(TestBaseProtocolCMPtr &cm) { QCOMPARE(cm->name(), QLatin1String("testcm")); QVERIFY(cm->hasProtocol(QLatin1String("example"))); QCOMPARE(cm->protocols().size(), 1); Tp::BaseProtocolPtr protocol = cm->protocols().at(0); QVERIFY(protocol); Tp::BaseProtocolPresenceInterfacePtr iface = Tp::BaseProtocolPresenceInterfacePtr::qObjectCast( protocol->interface(TP_QT_IFACE_PROTOCOL_INTERFACE_PRESENCE)); QVERIFY(iface); //presence interface PresenceSpecList statuses = iface->statuses(); QCOMPARE(statuses.size(), 4); QVERIFY(statuses.contains(PresenceSpec::available())); QVERIFY(statuses.contains(PresenceSpec::away())); QVERIFY(statuses.contains(PresenceSpec::busy())); QVERIFY(statuses.contains(PresenceSpec::offline())); QVERIFY(!statuses.contains(PresenceSpec::xa())); //immutable properties QVariantMap props = protocol->immutableProperties(); QVERIFY(props.contains(TP_QT_IFACE_PROTOCOL_INTERFACE_PRESENCE + QLatin1String(".Statuses"))); statuses = PresenceSpecList(qvariant_cast(props.value( TP_QT_IFACE_PROTOCOL_INTERFACE_PRESENCE + QLatin1String(".Statuses")))); QCOMPARE(statuses.size(), 4); QVERIFY(statuses.contains(PresenceSpec::available())); QVERIFY(statuses.contains(PresenceSpec::away())); QVERIFY(statuses.contains(PresenceSpec::busy())); QVERIFY(statuses.contains(PresenceSpec::offline())); QVERIFY(!statuses.contains(PresenceSpec::xa())); } void TestBaseProtocol::presenceIfaceSvcSide() { TEST_THREAD_HELPER_EXECUTE(mThreadHelper, &TestBaseProtocol::presenceIfaceSvcSideCb); } void TestBaseProtocol::presenceIfaceClientSide() { ConnectionManagerPtr cliCM = ConnectionManager::create(QLatin1String("testcm")); PendingReady *pr = cliCM->becomeReady(ConnectionManager::FeatureCore); connect(pr, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(cliCM->supportedProtocols().size(), 1); QVERIFY(cliCM->hasProtocol(QLatin1String("example"))); ProtocolInfo protocol = cliCM->protocol(QLatin1String("example")); QVERIFY(protocol.isValid()); //presence interface PresenceSpecList statuses = protocol.allowedPresenceStatuses(); QCOMPARE(statuses.size(), 4); QVERIFY(statuses.contains(PresenceSpec::available())); QVERIFY(statuses.contains(PresenceSpec::away())); QVERIFY(statuses.contains(PresenceSpec::busy())); QVERIFY(statuses.contains(PresenceSpec::offline())); QVERIFY(!statuses.contains(PresenceSpec::xa())); } void TestBaseProtocol::cleanup() { delete mThreadHelper; cleanupImpl(); } void TestBaseProtocol::cleanupTestCase() { cleanupTestCaseImpl(); } QTEST_MAIN(TestBaseProtocol) #include "_gen/base-protocol.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/contact-search-chan.cpp0000644000175200001440000002563612000056607025040 0ustar00collabora-develusers00000000000000#include #include #include #include #include #include #include #include using namespace Tp; class TestContactSearchChan : public Test { Q_OBJECT public: TestContactSearchChan(QObject *parent = 0) : Test(parent), mConn(0), mChan1Service(0), mChan2Service(0), mSearchReturned(false) { } protected Q_SLOTS: void onSearchStateChanged(Tp::ChannelContactSearchState state, const QString &errorName, const Tp::ContactSearchChannel::SearchStateChangeDetails &details); void onSearchResultReceived(const Tp::ContactSearchChannel::SearchResult &result); void onSearchReturned(Tp::PendingOperation *op); private Q_SLOTS: void initTestCase(); void init(); void testContactSearch(); void testContactSearchEmptyResult(); void cleanup(); void cleanupTestCase(); private: TestConnHelper *mConn; TpHandleRepoIface *mContactRepo; ContactSearchChannelPtr mChan; ContactSearchChannelPtr mChan1; ContactSearchChannelPtr mChan2; QString mChan1Path; TpTestsContactSearchChannel *mChan1Service; QString mChan2Path; TpTestsContactSearchChannel *mChan2Service; ContactSearchChannel::SearchResult mSearchResult; bool mSearchReturned; struct SearchStateChangeInfo { SearchStateChangeInfo(ChannelContactSearchState state, const QString &errorName, const Tp::ContactSearchChannel::SearchStateChangeDetails &details) : state(state), errorName(errorName), details(details) { } ChannelContactSearchState state; QString errorName; ContactSearchChannel::SearchStateChangeDetails details; }; QList mSearchStateChangeInfoList; }; void TestContactSearchChan::onSearchStateChanged(Tp::ChannelContactSearchState state, const QString &errorName, const Tp::ContactSearchChannel::SearchStateChangeDetails &details) { mSearchStateChangeInfoList.append(SearchStateChangeInfo(state, errorName, details)); mLoop->exit(0); } void TestContactSearchChan::onSearchResultReceived( const Tp::ContactSearchChannel::SearchResult &result) { QCOMPARE(mChan->searchState(), ChannelContactSearchStateInProgress); mSearchResult = result; mLoop->exit(0); } void TestContactSearchChan::onSearchReturned(Tp::PendingOperation *op) { TEST_VERIFY_OP(op); QVERIFY(mChan->searchState() != ChannelContactSearchStateNotStarted); mSearchReturned = true; mLoop->exit(0); } void TestContactSearchChan::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("contact-search-chan"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); mConn = new TestConnHelper(this, EXAMPLE_TYPE_ECHO_CONNECTION, "account", "me@example.com", "protocol", "example", NULL); QCOMPARE(mConn->connect(), true); QByteArray chan1Path; mChan1Path = mConn->objectPath() + QLatin1String("/ContactSearchChannel/1"); chan1Path = mChan1Path.toAscii(); mChan1Service = TP_TESTS_CONTACT_SEARCH_CHANNEL(g_object_new( TP_TESTS_TYPE_CONTACT_SEARCH_CHANNEL, "connection", mConn->service(), "object-path", chan1Path.data(), NULL)); QByteArray chan2Path; mChan2Path = mConn->objectPath() + QLatin1String("/ContactSearchChannel/2"); chan2Path = mChan2Path.toAscii(); mChan2Service = TP_TESTS_CONTACT_SEARCH_CHANNEL(g_object_new( TP_TESTS_TYPE_CONTACT_SEARCH_CHANNEL, "connection", mConn->service(), "object-path", chan2Path.data(), NULL)); } void TestContactSearchChan::init() { initImpl(); mSearchResult.clear(); mSearchStateChangeInfoList.clear(); mSearchReturned = false; } void TestContactSearchChan::testContactSearch() { mChan1 = ContactSearchChannel::create(mConn->client(), mChan1Path, QVariantMap()); mChan = mChan1; // becomeReady with no args should implicitly enable ContactSearchChannel::FeatureCore QVERIFY(connect(mChan1->becomeReady(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan1->isReady(ContactSearchChannel::FeatureCore), true); QCOMPARE(mChan1->searchState(), ChannelContactSearchStateNotStarted); QCOMPARE(mChan1->limit(), static_cast(0)); QCOMPARE(mChan1->availableSearchKeys().isEmpty(), false); QCOMPARE(mChan1->availableSearchKeys().count(), 1); QCOMPARE(mChan1->availableSearchKeys().first(), QLatin1String("employer")); QCOMPARE(mChan1->server(), QLatin1String("characters.shakespeare.lit")); QVERIFY(connect(mChan1.data(), SIGNAL(searchStateChanged(Tp::ChannelContactSearchState, const QString &, const Tp::ContactSearchChannel::SearchStateChangeDetails &)), SLOT(onSearchStateChanged(Tp::ChannelContactSearchState, const QString &, const Tp::ContactSearchChannel::SearchStateChangeDetails &)))); QVERIFY(connect(mChan1.data(), SIGNAL(searchResultReceived(const Tp::ContactSearchChannel::SearchResult &)), SLOT(onSearchResultReceived(const Tp::ContactSearchChannel::SearchResult &)))); QVERIFY(connect(mChan1->search(QLatin1String("employer"), QLatin1String("Collabora")), SIGNAL(finished(Tp::PendingOperation *)), SLOT(onSearchReturned(Tp::PendingOperation *)))); while (!mSearchReturned) { QCOMPARE(mLoop->exec(), 0); } while (mChan1->searchState() != ChannelContactSearchStateCompleted) { QCOMPARE(mLoop->exec(), 0); } QCOMPARE(mSearchReturned, true); QCOMPARE(mSearchStateChangeInfoList.count(), 2); SearchStateChangeInfo info = mSearchStateChangeInfoList.at(0); QCOMPARE(info.state, ChannelContactSearchStateInProgress); QCOMPARE(info.errorName, QLatin1String("")); QCOMPARE(info.details.hasDebugMessage(), true); QCOMPARE(info.details.debugMessage(), QLatin1String("in progress")); info = mSearchStateChangeInfoList.at(1); QCOMPARE(info.state, ChannelContactSearchStateCompleted); QCOMPARE(info.errorName, QLatin1String("")); QCOMPARE(info.details.hasDebugMessage(), true); QCOMPARE(info.details.debugMessage(), QLatin1String("completed")); QCOMPARE(mSearchResult.isEmpty(), false); QCOMPARE(mSearchResult.size(), 3); QStringList expectedIds; expectedIds << QLatin1String("oggis") << QLatin1String("andrunko") << QLatin1String("wjt"); expectedIds.sort(); QStringList expectedFns; expectedFns << QLatin1String("Olli Salli") << QLatin1String("Andre Moreira Magalhaes") << QLatin1String("Will Thompson"); expectedFns.sort(); QStringList ids; QStringList fns; for (ContactSearchChannel::SearchResult::const_iterator it = mSearchResult.constBegin(); it != mSearchResult.constEnd(); ++it) { QCOMPARE(it.key().isNull(), false); ids << it.key()->id(); QCOMPARE(it.value().isValid(), true); QCOMPARE(it.value().allFields().isEmpty(), false); Q_FOREACH (const ContactInfoField &contactInfo, it.value().allFields()) { QCOMPARE(contactInfo.fieldName, QLatin1String("fn")); fns.append(contactInfo.fieldValue.first()); } } ids.sort(); QCOMPARE(ids, expectedIds); fns.sort(); QCOMPARE(fns, expectedFns); mChan1.reset(); } void TestContactSearchChan::testContactSearchEmptyResult() { mChan2 = ContactSearchChannel::create(mConn->client(), mChan2Path, QVariantMap()); mChan = mChan2; QVERIFY(connect(mChan2->becomeReady(ContactSearchChannel::FeatureCore), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan2->isReady(), true); QCOMPARE(mChan2->searchState(), ChannelContactSearchStateNotStarted); QCOMPARE(mChan2->limit(), static_cast(0)); QCOMPARE(mChan2->availableSearchKeys().isEmpty(), false); QCOMPARE(mChan2->availableSearchKeys().count(), 1); QCOMPARE(mChan2->availableSearchKeys().first(), QLatin1String("employer")); QCOMPARE(mChan2->server(), QLatin1String("characters.shakespeare.lit")); QVERIFY(connect(mChan2.data(), SIGNAL(searchStateChanged(Tp::ChannelContactSearchState, const QString &, const Tp::ContactSearchChannel::SearchStateChangeDetails &)), SLOT(onSearchStateChanged(Tp::ChannelContactSearchState, const QString &, const Tp::ContactSearchChannel::SearchStateChangeDetails &)))); QVERIFY(connect(mChan2.data(), SIGNAL(searchResultReceived(const Tp::ContactSearchChannel::SearchResult &)), SLOT(onSearchResultReceived(const Tp::ContactSearchChannel::SearchResult &)))); ContactSearchMap searchTerms; searchTerms.insert(QLatin1String("employer"), QLatin1String("FooBar")); QVERIFY(connect(mChan2->search(searchTerms), SIGNAL(finished(Tp::PendingOperation *)), SLOT(onSearchReturned(Tp::PendingOperation *)))); while (!mSearchReturned) { QCOMPARE(mLoop->exec(), 0); } while (mChan2->searchState() != ChannelContactSearchStateCompleted) { QCOMPARE(mLoop->exec(), 0); } QCOMPARE(mSearchReturned, true); QCOMPARE(mSearchResult.isEmpty(), true); QCOMPARE(mSearchStateChangeInfoList.count(), 2); SearchStateChangeInfo info = mSearchStateChangeInfoList.at(0); QCOMPARE(info.state, ChannelContactSearchStateInProgress); QCOMPARE(info.errorName, QLatin1String("")); QCOMPARE(info.details.hasDebugMessage(), true); QCOMPARE(info.details.debugMessage(), QLatin1String("in progress")); info = mSearchStateChangeInfoList.at(1); QCOMPARE(info.state, ChannelContactSearchStateCompleted); QCOMPARE(info.errorName, QLatin1String("")); QCOMPARE(info.details.hasDebugMessage(), true); QCOMPARE(info.details.debugMessage(), QLatin1String("completed")); mChan2.reset(); } void TestContactSearchChan::cleanup() { cleanupImpl(); } void TestContactSearchChan::cleanupTestCase() { QCOMPARE(mConn->disconnect(), true); delete mConn; if (mChan1Service != 0) { g_object_unref(mChan1Service); mChan1Service = 0; } if (mChan2Service != 0) { g_object_unref(mChan2Service); mChan2Service = 0; } cleanupTestCaseImpl(); } QTEST_MAIN(TestContactSearchChan) #include "_gen/contact-search-chan.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/contacts-client-types.cpp0000644000175200001440000001371612000056607025463 0ustar00collabora-develusers00000000000000#include #include #include #include #include #include #include #include #include using namespace Tp; class TestContactsClientTypes : public Test { Q_OBJECT public: TestContactsClientTypes(QObject *parent = 0) : Test(parent), mConn(0), mClientTypesUpdated(0) { } protected Q_SLOTS: void onClientTypesChanged(const QStringList &clientTypes); void onRequestClientTypesFinished(Tp::PendingOperation *op); private Q_SLOTS: void initTestCase(); void init(); void testClientTypes(); void testClientTypesAttributes(); void cleanup(); void cleanupTestCase(); private: TestConnHelper *mConn; int mClientTypesUpdated; QStringList mClientTypes; }; void TestContactsClientTypes::onClientTypesChanged(const QStringList &clientTypes) { mClientTypesUpdated++; mClientTypes = clientTypes; } void TestContactsClientTypes::onRequestClientTypesFinished(PendingOperation *op) { if (op->isError()) { mLastError = op->errorName(); mLastErrorMessage = op->errorMessage(); mLoop->exit(1); } else { PendingStringList *psl = qobject_cast(op); mClientTypes = psl->result(); mLoop->exit(0); } } void TestContactsClientTypes::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("contacts-client-types"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); mConn = new TestConnHelper(this, TP_TESTS_TYPE_CONTACTS_CONNECTION, "account", "me@example.com", "protocol", "foo", NULL); QCOMPARE(mConn->connect(), true); } void TestContactsClientTypes::init() { initImpl(); mClientTypesUpdated = 0; } void TestContactsClientTypes::testClientTypes() { ContactManagerPtr contactManager = mConn->client()->contactManager(); QVERIFY(contactManager->supportedFeatures().contains(Contact::FeatureClientTypes)); QStringList validIDs = QStringList() << QLatin1String("foo") << QLatin1String("bar"); QList contacts = mConn->contacts(validIDs, Contact::FeatureClientTypes); QCOMPARE(contacts.size(), validIDs.size()); for (int i = 0; i < contacts.size(); i++) { ContactPtr contact = contacts[i]; QCOMPARE(contact->requestedFeatures().contains(Contact::FeatureClientTypes), true); QCOMPARE(contact->actualFeatures().contains(Contact::FeatureClientTypes), true); QVERIFY(contact->clientTypes().isEmpty()); QVERIFY(connect(contact.data(), SIGNAL(clientTypesChanged(QStringList)), SLOT(onClientTypesChanged(QStringList)))); } ContactPtr contactFoo = contacts[0]; ContactPtr contactBar = contacts[1]; const gchar *clientTypes1[] = { "phone", "pc", NULL }; const gchar *clientTypes2[] = { "web", NULL }; tp_tests_contacts_connection_change_client_types(TP_TESTS_CONTACTS_CONNECTION(mConn->service()), contactFoo->handle()[0], g_strdupv((gchar**) clientTypes1)); while (mClientTypesUpdated != 1) { mLoop->processEvents(); } QCOMPARE(mClientTypesUpdated, 1); QCOMPARE(mClientTypes, QStringList() << QLatin1String("phone") << QLatin1String("pc")); QCOMPARE(contactFoo->clientTypes(), QStringList() << QLatin1String("phone") << QLatin1String("pc")); mClientTypes.clear(); tp_tests_contacts_connection_change_client_types(TP_TESTS_CONTACTS_CONNECTION(mConn->service()), contactBar->handle()[0], g_strdupv((gchar**) clientTypes2)); while (mClientTypesUpdated != 2) { mLoop->processEvents(); } QCOMPARE(mClientTypesUpdated, 2); QCOMPARE(mClientTypes, QStringList() << QLatin1String("web")); QCOMPARE(contactBar->clientTypes(), QStringList() << QLatin1String("web")); mClientTypesUpdated = 0; mClientTypes.clear(); connect(contactFoo->requestClientTypes(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onRequestClientTypesFinished(Tp::PendingOperation*))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mClientTypes, QStringList() << QLatin1String("phone") << QLatin1String("pc")); mClientTypes.clear(); connect(contactBar->requestClientTypes(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onRequestClientTypesFinished(Tp::PendingOperation*))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mClientTypes, QStringList() << QLatin1String("web")); } void TestContactsClientTypes::testClientTypesAttributes() { ContactManagerPtr contactManager = mConn->client()->contactManager(); QVERIFY(contactManager->supportedFeatures().contains(Contact::FeatureClientTypes)); const gchar *clientTypes[] = { "pc", "phone", NULL }; tp_tests_contacts_connection_change_client_types(TP_TESTS_CONTACTS_CONNECTION(mConn->service()), 2, g_strdupv((gchar**) clientTypes)); QStringList validIDs = QStringList() << QLatin1String("foo"); QList contacts = mConn->contacts(validIDs, Contact::FeatureClientTypes); QCOMPARE(contacts.size(), 1); ContactPtr contact = contacts[0]; QCOMPARE(contact->handle()[0], uint(2)); QCOMPARE(contact->requestedFeatures().contains(Contact::FeatureClientTypes), true); QCOMPARE(contact->actualFeatures().contains(Contact::FeatureClientTypes), true); QCOMPARE(contact->clientTypes(), QStringList() << QLatin1String("pc") << QLatin1String("phone")); } void TestContactsClientTypes::cleanup() { cleanupImpl(); } void TestContactsClientTypes::cleanupTestCase() { QCOMPARE(mConn->disconnect(), true); delete mConn; cleanupTestCaseImpl(); } QTEST_MAIN(TestContactsClientTypes) #include "_gen/contacts-client-types.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/profile-manager.cpp0000644000175200001440000000706012000056607024272 0ustar00collabora-develusers00000000000000#include #include #include #include using namespace Tp; class TestProfileManager : public Test { Q_OBJECT private Q_SLOTS: void testProfileManager(); }; void TestProfileManager::testProfileManager() { ProfileManagerPtr pm = ProfileManager::create(QDBusConnection::sessionBus()); QVERIFY(connect(pm->becomeReady(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(pm->isReady(), true); QCOMPARE(pm->profiles().isEmpty(), false); QCOMPARE(pm->profiles().count(), 2); QCOMPARE(pm->profileForService(QLatin1String("test-profile")).isNull(), false); QCOMPARE(pm->profileForService(QLatin1String("test-profile-file-not-found")).isNull(), true); QCOMPARE(pm->profileForService(QLatin1String("test-profile-non-im-type")).isNull(), true); QCOMPARE(pm->profilesForCM(QLatin1String("testprofilecm")).isEmpty(), false); QCOMPARE(pm->profilesForCM(QLatin1String("testprofilecm")).count(), 2); QCOMPARE(pm->profilesForProtocol(QLatin1String("testprofileproto")).isEmpty(), false); QCOMPARE(pm->profilesForProtocol(QLatin1String("testprofileproto")).count(), 2); QVERIFY(connect(pm->becomeReady(ProfileManager::FeatureFakeProfiles), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(pm->isReady(ProfileManager::FeatureFakeProfiles), true); QCOMPARE(pm->profiles().isEmpty(), false); QCOMPARE(pm->profiles().count(), 4); QCOMPARE(pm->profileForService(QLatin1String("spurious-normal")).isNull(), false); QCOMPARE(pm->profileForService(QLatin1String("spurious-weird")).isNull(), false); QCOMPARE(pm->profilesForCM(QLatin1String("spurious")).isEmpty(), false); QCOMPARE(pm->profilesForCM(QLatin1String("spurious")).count(), 2); QCOMPARE(pm->profilesForProtocol(QLatin1String("normal")).isEmpty(), false); QCOMPARE(pm->profilesForProtocol(QLatin1String("weird")).isEmpty(), false); ProfilePtr profile = pm->profileForService(QLatin1String("spurious-normal")); QCOMPARE(profile->type(), QLatin1String("IM")); QCOMPARE(profile->provider(), QString()); QCOMPARE(profile->name(), QLatin1String("normal")); QCOMPARE(profile->cmName(), QLatin1String("spurious")); QCOMPARE(profile->protocolName(), QLatin1String("normal")); QCOMPARE(profile->presences().isEmpty(), true); QCOMPARE(profile->parameters().isEmpty(), false); QCOMPARE(profile->parameters().count(), 1); QCOMPARE(profile->hasParameter(QLatin1String("not-found")), false); /* profile will only return CM default params, account is ignored */ QCOMPARE(profile->hasParameter(QLatin1String("account")), false); /* profile will only return CM default params, password is ignored */ QCOMPARE(profile->hasParameter(QLatin1String("password")), false); Profile::Parameter param = profile->parameter(QLatin1String("register")); QCOMPARE(param.name(), QLatin1String("register")); QCOMPARE(param.dbusSignature(), QDBusSignature(QLatin1String("b"))); QCOMPARE(param.type(), QVariant::Bool); QCOMPARE(param.value(), QVariant(true)); QCOMPARE(param.label(), QString()); QCOMPARE(param.isMandatory(), false); // Allow the PendingReadys to delete themselves mLoop->processEvents(); } QTEST_MAIN(TestProfileManager) #include "_gen/profile-manager.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/cm-protocol.cpp0000644000175200001440000006044212000056607023463 0ustar00collabora-develusers00000000000000#include #include #include #include #include #include #include #include using namespace Tp; using namespace Tp::Client; namespace { PresenceSpec getPresenceSpec(const PresenceSpecList &specs, const QString &status) { Q_FOREACH (const PresenceSpec &spec, specs) { if (spec.presence().status() == status) { return spec; } } return PresenceSpec(); } } class ConnectionManagerAdaptor : public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.freedesktop.Telepathy.ConnectionManager") Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" " \n" " \n" " \n" "") Q_PROPERTY(QStringList Interfaces READ Interfaces) Q_PROPERTY(Tp::ProtocolPropertiesMap Protocols READ Protocols) public: ConnectionManagerAdaptor(ProtocolPropertiesMap &protocols, QObject *parent) : QDBusAbstractAdaptor(parent), mProtocols(protocols) { } virtual ~ConnectionManagerAdaptor() { } public: // Properties inline QStringList Interfaces() const { return QStringList(); } inline ProtocolPropertiesMap Protocols() const { return mProtocols; } private: ProtocolPropertiesMap mProtocols; ParamSpecList mParameters; }; class ProtocolAdaptor : public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.freedesktop.Telepathy.Protocol") Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" "") Q_PROPERTY(QStringList Interfaces READ Interfaces) Q_PROPERTY(Tp::ParamSpecList Parameters READ Parameters) Q_PROPERTY(QStringList ConnectionInterfaces READ ConnectionInterfaces) Q_PROPERTY(Tp::RequestableChannelClassList RequestableChannelClasses READ RequestableChannelClasses) Q_PROPERTY(QString VCardField READ VCardField) Q_PROPERTY(QString EnglishName READ EnglishName) Q_PROPERTY(QString Icon READ Icon) public: ProtocolAdaptor(QObject *parent) : QDBusAbstractAdaptor(parent), introspectionCalled(0) { mInterfaces << TP_QT_IFACE_PROTOCOL_INTERFACE_ADDRESSING << TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS << TP_QT_IFACE_PROTOCOL_INTERFACE_PRESENCE; mConnInterfaces << TP_QT_IFACE_CONNECTION_INTERFACE_REQUESTS; mRCCs.append(RequestableChannelClassSpec::textChatroom().bareClass()); mVCardField = QLatin1String("x-adaptor"); mEnglishName = QLatin1String("Adaptor"); mIcon = QLatin1String("icon-adaptor"); } virtual ~ProtocolAdaptor() { } inline QVariantMap immutableProperties() const { QVariantMap ret; ret.insert(TP_QT_IFACE_PROTOCOL + QLatin1String(".Interfaces"), mInterfaces); ret.insert(TP_QT_IFACE_PROTOCOL + QLatin1String(".Parameters"), qVariantFromValue(mParameters)); ret.insert(TP_QT_IFACE_PROTOCOL + QLatin1String(".ConnectionInterfaces"), mConnInterfaces); ret.insert(TP_QT_IFACE_PROTOCOL + QLatin1String(".RequestableChannelClasses"), qVariantFromValue(mRCCs)); ret.insert(TP_QT_IFACE_PROTOCOL + QLatin1String(".VCardField"), mVCardField); ret.insert(TP_QT_IFACE_PROTOCOL + QLatin1String(".EnglishName"), mEnglishName); ret.insert(TP_QT_IFACE_PROTOCOL + QLatin1String(".Icon"), mIcon); return ret; } public: // Properties inline QStringList Interfaces() const { // if we request all properties we are going to get here, so marking as // introspectionCalled; introspectionCalled++; return mInterfaces; } inline Tp::ParamSpecList Parameters() const { return mParameters; } inline QStringList ConnectionInterfaces() const { return mConnInterfaces; } inline Tp::RequestableChannelClassList RequestableChannelClasses() const { return mRCCs; } inline QString VCardField() const { return mVCardField; } inline QString EnglishName() const { return mEnglishName; } inline QString Icon() const { return mIcon; } mutable int introspectionCalled; private: QStringList mInterfaces; ParamSpecList mParameters; QStringList mConnInterfaces; RequestableChannelClassList mRCCs; QString mVCardField; QString mEnglishName; QString mIcon; }; class ProtocolAddressingAdaptor : public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.freedesktop.Telepathy.Protocol.Interface.Addressing") Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" " \n" "") Q_PROPERTY(QStringList AddressableVCardFields READ AddressableVCardFields) Q_PROPERTY(QStringList AddressableURISchemes READ AddressableURISchemes) public: ProtocolAddressingAdaptor(QObject *parent) : QDBusAbstractAdaptor(parent), introspectionCalled(0) { mVCardFields << QLatin1String("x-adaptor"); mUris << QLatin1String("adaptor"); } virtual ~ProtocolAddressingAdaptor() { } inline QVariantMap immutableProperties() const { QVariantMap ret; ret.insert(TP_QT_IFACE_PROTOCOL_INTERFACE_ADDRESSING + QLatin1String(".AddressableVCardFields"), mVCardFields); ret.insert(TP_QT_IFACE_PROTOCOL_INTERFACE_ADDRESSING + QLatin1String(".AddressableURISchemes"), mUris); return ret; } public: // Properties inline QStringList AddressableVCardFields() const { // if we request all properties we are going to get here, so marking as // introspectionCalled; introspectionCalled++; return mVCardFields; } inline QStringList AddressableURISchemes() const { return mUris; } mutable int introspectionCalled; private: QStringList mVCardFields; QStringList mUris; }; class ProtocolAvatarsAdaptor : public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.freedesktop.Telepathy.Protocol.Interface.Avatars") Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" "") Q_PROPERTY(QStringList SupportedAvatarMIMETypes READ SupportedAvatarMIMETypes) Q_PROPERTY(uint MinimumAvatarHeight READ MinimumAvatarHeight) Q_PROPERTY(uint MinimumAvatarWidth READ MinimumAvatarWidth) Q_PROPERTY(uint RecommendedAvatarHeight READ RecommendedAvatarHeight) Q_PROPERTY(uint RecommendedAvatarWidth READ RecommendedAvatarWidth) Q_PROPERTY(uint MaximumAvatarHeight READ MaximumAvatarHeight) Q_PROPERTY(uint MaximumAvatarWidth READ MaximumAvatarWidth) Q_PROPERTY(uint MaximumAvatarBytes READ MaximumAvatarBytes) public: ProtocolAvatarsAdaptor(QObject *parent) : QDBusAbstractAdaptor(parent), introspectionCalled(0) { mMimeTypes << QLatin1String("image/png"); mMinimumAvatarHeight = 16; mMinimumAvatarWidth = 16; mRecommendedAvatarHeight = 32; mRecommendedAvatarWidth = 32; mMaximumAvatarHeight = 64; mMaximumAvatarWidth = 64; mMaximumAvatarBytes = 4096; } virtual ~ProtocolAvatarsAdaptor() { } inline QVariantMap immutableProperties() const { QVariantMap ret; ret.insert(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".SupportedAvatarMIMETypes"), mMimeTypes); ret.insert(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MinimumAvatarHeight"), mMinimumAvatarHeight); ret.insert(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MinimumAvatarWidth"), mMinimumAvatarWidth); ret.insert(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MaximumAvatarHeight"), mMaximumAvatarHeight); ret.insert(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MaximumAvatarWidth"), mMaximumAvatarWidth); ret.insert(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".RecommendedAvatarHeight"), mRecommendedAvatarHeight); ret.insert(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".RecommendedAvatarWidth"), mRecommendedAvatarWidth); ret.insert(TP_QT_IFACE_PROTOCOL_INTERFACE_AVATARS + QLatin1String(".MaximumAvatarBytes"), mMaximumAvatarBytes); return ret; } public: // Properties inline QStringList SupportedAvatarMIMETypes() const { // if we request all properties we are going to get here, so marking as // introspectionCalled; introspectionCalled++; return mMimeTypes; } inline uint MinimumAvatarHeight() const { return mMinimumAvatarHeight; } inline uint MinimumAvatarWidth() const { return mMinimumAvatarWidth; } inline uint RecommendedAvatarHeight() const { return mRecommendedAvatarHeight; } inline uint RecommendedAvatarWidth() const { return mRecommendedAvatarWidth; } inline uint MaximumAvatarHeight() const { return mMaximumAvatarHeight; } inline uint MaximumAvatarWidth() const { return mMaximumAvatarWidth; } inline uint MaximumAvatarBytes() const { return mMaximumAvatarBytes; } mutable int introspectionCalled; private: QStringList mMimeTypes; uint mMinimumAvatarHeight; uint mMinimumAvatarWidth; uint mRecommendedAvatarHeight; uint mRecommendedAvatarWidth; uint mMaximumAvatarHeight; uint mMaximumAvatarWidth; uint mMaximumAvatarBytes; }; class ProtocolPresenceAdaptor : public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.freedesktop.Telepathy.Protocol.Interface.Presence") Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" " \n" " \n" "") Q_PROPERTY(Tp::SimpleStatusSpecMap Statuses READ Statuses) public: ProtocolPresenceAdaptor(QObject *parent) : QDBusAbstractAdaptor(parent), introspectionCalled(0) { SimpleStatusSpec spec; spec.type = ConnectionPresenceTypeAvailable; spec.maySetOnSelf = true; spec.canHaveMessage = false; mStatuses.insert(QLatin1String("available"), spec); } virtual ~ProtocolPresenceAdaptor() { } inline QVariantMap immutableProperties() const { QVariantMap ret; ret.insert(TP_QT_IFACE_PROTOCOL_INTERFACE_PRESENCE + QLatin1String(".Statuses"), qVariantFromValue(mStatuses)); return ret; } public: // Properties inline SimpleStatusSpecMap Statuses() const { // if we request all properties we are going to get here, so marking as // introspectionCalled; introspectionCalled++; return mStatuses; } mutable int introspectionCalled; private: SimpleStatusSpecMap mStatuses; }; struct CMHelper { CMHelper(const QString &cmName, bool withProtocolProps = false, bool withProtocolAddressingProps = false, bool withProtocolAvatarsProps = false, bool withProtocolPresenceProps = false) { QDBusConnection bus = QDBusConnection::sessionBus(); QString cmBusNameBase = TP_QT_CONNECTION_MANAGER_BUS_NAME_BASE; QString cmPathBase = TP_QT_CONNECTION_MANAGER_OBJECT_PATH_BASE; protocolObject = new QObject(); protocolAdaptor = new ProtocolAdaptor(protocolObject); protocolAddressingAdaptor = new ProtocolAddressingAdaptor(protocolObject); protocolAvatarsAdaptor = new ProtocolAvatarsAdaptor(protocolObject); protocolPresenceAdaptor = new ProtocolPresenceAdaptor(protocolObject); QVERIFY(bus.registerService(cmBusNameBase + cmName)); QVERIFY(bus.registerObject(cmPathBase + cmName + QLatin1String("/") + cmName, protocolObject)); ProtocolPropertiesMap protocols; QVariantMap immutableProperties; if (withProtocolProps) { immutableProperties.unite(protocolAdaptor->immutableProperties()); } if (withProtocolAddressingProps) { immutableProperties.unite(protocolAddressingAdaptor->immutableProperties()); } if (withProtocolAvatarsProps) { immutableProperties.unite(protocolAvatarsAdaptor->immutableProperties()); } if (withProtocolPresenceProps) { immutableProperties.unite(protocolPresenceAdaptor->immutableProperties()); } protocols.insert(cmName, immutableProperties); cmObject = new QObject(); cmAdaptor = new ConnectionManagerAdaptor(protocols, cmObject); QVERIFY(bus.registerService(cmBusNameBase + cmName)); QVERIFY(bus.registerObject(cmPathBase + cmName, cmObject)); cm = ConnectionManager::create(bus, cmName); } ~CMHelper() { delete cmObject; delete protocolObject; } ConnectionManagerPtr cm; QObject *cmObject; QObject *protocolObject; ConnectionManagerAdaptor *cmAdaptor; ProtocolAdaptor *protocolAdaptor; ProtocolAddressingAdaptor *protocolAddressingAdaptor; ProtocolAvatarsAdaptor *protocolAvatarsAdaptor; ProtocolPresenceAdaptor *protocolPresenceAdaptor; }; class TestCmProtocol : public Test { Q_OBJECT public: TestCmProtocol(QObject *parent = 0) : Test(parent), mCM(0) { } private Q_SLOTS: void initTestCase(); void init(); void testIntrospection(); void testIntrospectionWithManager(); void testIntrospectionWithProperties(); void testIntrospectionWithSomeProperties(); void cleanup(); void cleanupTestCase(); private: void testIntrospectionWithAdaptorCommon(const ConnectionManagerPtr &cm); CMHelper *mCM; }; void TestCmProtocol::initTestCase() { initTestCaseImpl(); } void TestCmProtocol::init() { initImpl(); } void TestCmProtocol::testIntrospection() { mCM = new CMHelper(QLatin1String("protocolnomanager"), false); ConnectionManagerPtr cm = mCM->cm; QVERIFY(connect(cm->becomeReady(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(cm->isReady(), true); testIntrospectionWithAdaptorCommon(cm); QVERIFY(mCM->protocolAdaptor->introspectionCalled > 0); QVERIFY(mCM->protocolAddressingAdaptor->introspectionCalled > 0); QVERIFY(mCM->protocolAvatarsAdaptor->introspectionCalled > 0); QVERIFY(mCM->protocolPresenceAdaptor->introspectionCalled > 0); } void TestCmProtocol::testIntrospectionWithManager() { mCM = new CMHelper(QLatin1String("protocol"), false); ConnectionManagerPtr cm = mCM->cm; QVERIFY(connect(cm->becomeReady(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(cm->isReady(), true); QCOMPARE(cm->interfaces(), QStringList()); QCOMPARE(cm->supportedProtocols(), QStringList() << QLatin1String("protocol")); QVERIFY(cm->hasProtocol(QLatin1String("protocol"))); QVERIFY(!cm->hasProtocol(QLatin1String("not-there"))); ProtocolInfo info = cm->protocol(QLatin1String("protocol")); QVERIFY(info.isValid()); QCOMPARE(info.cmName(), QLatin1String("protocol")); QCOMPARE(info.name(), QLatin1String("protocol")); QCOMPARE(info.parameters().size(), 1); ProtocolParameter param = info.parameters().at(0); QCOMPARE(param.name(), QLatin1String("account")); QCOMPARE(static_cast(param.type()), static_cast(QVariant::String)); QCOMPARE(param.defaultValue().isNull(), true); QCOMPARE(param.dbusSignature().signature(), QLatin1String("s")); QCOMPARE(param.isRequired(), true); QCOMPARE(param.isRequiredForRegistration(), true); // though it can't register! QCOMPARE(param.isSecret(), false); QVERIFY(!info.canRegister()); QVERIFY(!info.capabilities().isSpecificToContact()); QVERIFY(!info.capabilities().textChatrooms()); QVERIFY(info.capabilities().textChats()); QCOMPARE(info.vcardField(), QLatin1String("x-telepathy-protocol")); QCOMPARE(info.englishName(), QLatin1String("Telepathy Protocol")); QCOMPARE(info.iconName(), QLatin1String("im-protocol")); QStringList addressableVCardFields = info.addressableVCardFields(); QCOMPARE(addressableVCardFields, QStringList() << QLatin1String("x-protocol")); QStringList addressableUriSchemes = info.addressableUriSchemes(); QCOMPARE(addressableUriSchemes, QStringList() << QLatin1String("protocol")); AvatarSpec avatarReqs = info.avatarRequirements(); QStringList supportedMimeTypes = avatarReqs.supportedMimeTypes(); QCOMPARE(supportedMimeTypes, QStringList() << QLatin1String("image/jpeg")); QCOMPARE(avatarReqs.minimumHeight(), (uint) 32); QCOMPARE(avatarReqs.maximumHeight(), (uint) 96); QCOMPARE(avatarReqs.recommendedHeight(), (uint) 64); QCOMPARE(avatarReqs.minimumWidth(), (uint) 32); QCOMPARE(avatarReqs.maximumWidth(), (uint) 96); QCOMPARE(avatarReqs.recommendedWidth(), (uint) 64); QCOMPARE(avatarReqs.maximumBytes(), (uint) 37748736); PresenceSpecList statuses = info.allowedPresenceStatuses(); QCOMPARE(statuses.size(), 2); PresenceSpec spec = getPresenceSpec(statuses, QLatin1String("available")); QVERIFY(spec.isValid()); QVERIFY(spec.presence().type() == ConnectionPresenceTypeAvailable); QVERIFY(spec.maySetOnSelf()); QVERIFY(spec.canHaveStatusMessage()); spec = getPresenceSpec(statuses, QLatin1String("offline")); QVERIFY(spec.isValid()); QVERIFY(spec.presence().type() == ConnectionPresenceTypeOffline); QVERIFY(!spec.maySetOnSelf()); QVERIFY(!spec.canHaveStatusMessage()); QCOMPARE(mCM->protocolAdaptor->introspectionCalled, 0); QCOMPARE(mCM->protocolAddressingAdaptor->introspectionCalled, 0); QCOMPARE(mCM->protocolAvatarsAdaptor->introspectionCalled, 0); QCOMPARE(mCM->protocolPresenceAdaptor->introspectionCalled, 0); } void TestCmProtocol::testIntrospectionWithProperties() { mCM = new CMHelper(QLatin1String("protocolwithprops"), true, true, true, true); ConnectionManagerPtr cm = mCM->cm; QVERIFY(connect(cm->becomeReady(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(cm->isReady(), true); testIntrospectionWithAdaptorCommon(cm); QCOMPARE(mCM->protocolAdaptor->introspectionCalled, 0); QCOMPARE(mCM->protocolAddressingAdaptor->introspectionCalled, 0); QCOMPARE(mCM->protocolAvatarsAdaptor->introspectionCalled, 0); QCOMPARE(mCM->protocolPresenceAdaptor->introspectionCalled, 0); } void TestCmProtocol::testIntrospectionWithSomeProperties() { mCM = new CMHelper(QLatin1String("protocolwithsomeprops"), false, false, true, true); ConnectionManagerPtr cm = mCM->cm; QVERIFY(connect(cm->becomeReady(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(cm->isReady(), true); testIntrospectionWithAdaptorCommon(cm); QVERIFY(mCM->protocolAdaptor->introspectionCalled > 0); QVERIFY(mCM->protocolAddressingAdaptor->introspectionCalled > 0); QCOMPARE(mCM->protocolAvatarsAdaptor->introspectionCalled, 0); QCOMPARE(mCM->protocolPresenceAdaptor->introspectionCalled, 0); } void TestCmProtocol::testIntrospectionWithAdaptorCommon(const ConnectionManagerPtr &cm) { QCOMPARE(cm->interfaces(), QStringList()); QCOMPARE(cm->supportedProtocols(), QStringList() << cm->name()); QVERIFY(cm->hasProtocol(cm->name())); QVERIFY(!cm->hasProtocol(QLatin1String("not-there"))); ProtocolInfo info = cm->protocol(cm->name()); QVERIFY(info.isValid()); QCOMPARE(info.cmName(), cm->name()); QCOMPARE(info.name(), cm->name()); QCOMPARE(info.parameters().size(), 0); QVERIFY(!info.canRegister()); QVERIFY(!info.capabilities().isSpecificToContact()); QVERIFY(info.capabilities().textChatrooms()); QVERIFY(!info.capabilities().textChats()); QCOMPARE(info.vcardField(), QLatin1String("x-adaptor")); QCOMPARE(info.englishName(), QLatin1String("Adaptor")); QCOMPARE(info.iconName(), QLatin1String("icon-adaptor")); QStringList addressableVCardFields = info.addressableVCardFields(); QCOMPARE(addressableVCardFields, QStringList() << QLatin1String("x-adaptor")); QStringList addressableUriSchemes = info.addressableUriSchemes(); QCOMPARE(addressableUriSchemes, QStringList() << QLatin1String("adaptor")); AvatarSpec avatarReqs = info.avatarRequirements(); QStringList supportedMimeTypes = avatarReqs.supportedMimeTypes(); QCOMPARE(supportedMimeTypes, QStringList() << QLatin1String("image/png")); QCOMPARE(avatarReqs.minimumHeight(), (uint) 16); QCOMPARE(avatarReqs.maximumHeight(), (uint) 64); QCOMPARE(avatarReqs.recommendedHeight(), (uint) 32); QCOMPARE(avatarReqs.minimumWidth(), (uint) 16); QCOMPARE(avatarReqs.maximumWidth(), (uint) 64); QCOMPARE(avatarReqs.recommendedWidth(), (uint) 32); QCOMPARE(avatarReqs.maximumBytes(), (uint) 4096); PresenceSpecList statuses = info.allowedPresenceStatuses(); QCOMPARE(statuses.size(), 1); PresenceSpec spec = getPresenceSpec(statuses, QLatin1String("available")); QVERIFY(spec.isValid()); QVERIFY(spec.presence().type() == ConnectionPresenceTypeAvailable); QVERIFY(spec.maySetOnSelf()); QVERIFY(!spec.canHaveStatusMessage()); spec = getPresenceSpec(statuses, QLatin1String("offline")); QVERIFY(!spec.isValid()); } void TestCmProtocol::cleanup() { cleanupImpl(); } void TestCmProtocol::cleanupTestCase() { delete mCM; cleanupTestCaseImpl(); } QTEST_MAIN(TestCmProtocol) #include "_gen/cm-protocol.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/simple-observer.cpp0000644000175200001440000007122212000056607024341 0ustar00collabora-develusers00000000000000#include #include #include #include #include #include #include #include #define TP_QT_ENABLE_LOWLEVEL_API #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace Tp; using namespace Tp::Client; class TestSimpleObserver; namespace { QList channels(const QList &channels) { QList ret; Q_FOREACH (const TextChannelPtr &channel, channels) { ret << channel; } return ret; } QList channels(const QList &channels) { QList ret; Q_FOREACH (const StreamedMediaChannelPtr &channel, channels) { ret << channel; } return ret; } } class AccountAdaptor : public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.freedesktop.Telepathy.Account") Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" " \n" " \n" " \n" " \n" "") Q_PROPERTY(QDBusObjectPath Connection READ Connection) Q_PROPERTY(QStringList Interfaces READ Interfaces) public: AccountAdaptor(QObject *parent) : QDBusAbstractAdaptor(parent), mConnection(QLatin1String("/")) { } virtual ~AccountAdaptor() { } void setConnection(QString conn) { if (conn.isEmpty()) { conn = QLatin1String("/"); } mConnection = QDBusObjectPath(conn); QVariantMap props; props.insert(QLatin1String("Connection"), QVariant::fromValue(mConnection)); Q_EMIT AccountPropertyChanged(props); } public: // Properties inline QDBusObjectPath Connection() const { return mConnection; } inline QStringList Interfaces() const { return QStringList(); } Q_SIGNALS: // Signals void AccountPropertyChanged(const QVariantMap &properties); private: QDBusObjectPath mConnection; }; class Dispatcher : public QObject, public QDBusContext { Q_OBJECT; public: Dispatcher(QObject *parent) : QObject(parent) { } ~Dispatcher() { } }; class TestSimpleObserver : public Test { Q_OBJECT public: TestSimpleObserver(QObject *parent = 0) : Test(parent), mChannelsCount(0), mSMChannelsCount(0) { std::memset(mMessagesChanServices, 0, sizeof(mMessagesChanServices) / sizeof(ExampleEcho2Channel*)); std::memset(mCallableChanServices, 0, sizeof(mCallableChanServices) / sizeof(ExampleCallableMediaChannel*)); } protected Q_SLOTS: void onObserverNewChannels(const QList &channels); void onObserverChannelInvalidated(const Tp::ChannelPtr &channel, const QString &errorName, const QString &errorMessage); void onObserverStreamedMediaCallStarted( const Tp::StreamedMediaChannelPtr &channel); void onObserverStreamedMediaCallEnded( const Tp::StreamedMediaChannelPtr &channel, const QString &errorMessage, const QString &errorName); private Q_SLOTS: void initTestCase(); void init(); void testObserverRegistration(); void testCrossTalk(); void cleanup(); void cleanupTestCase(); private: QMap ourObservers(); AccountPtr mAccounts[2]; struct ConnInfo { ConnInfo() : connService(0), baseConnService(0), contactRepo(0) { } TpTestsContactsConnection *connService; TpBaseConnection *baseConnService; ConnectionPtr conn; TpHandleRepoIface *contactRepo; }; ConnInfo mConns[2]; QStringList mContacts; ExampleEcho2Channel *mMessagesChanServices[2]; TextChannelPtr mTextChans[2]; ExampleCallableMediaChannel *mCallableChanServices[2]; StreamedMediaChannelPtr mSMChans[2]; int mChannelsCount; int mSMChannelsCount; }; void TestSimpleObserver::onObserverNewChannels(const QList &channels) { QVERIFY(channels.size() == 1); mChannelsCount += channels.size(); } void TestSimpleObserver::onObserverChannelInvalidated(const Tp::ChannelPtr &channel, const QString &errorName, const QString &errorMessage) { QVERIFY(!channel.isNull()); mChannelsCount -= 1; } void TestSimpleObserver::onObserverStreamedMediaCallStarted( const Tp::StreamedMediaChannelPtr &channel) { QVERIFY(!channel.isNull()); mSMChannelsCount++; } void TestSimpleObserver::onObserverStreamedMediaCallEnded(const Tp::StreamedMediaChannelPtr &channel, const QString &errorMessage, const QString &errorName) { QVERIFY(!channel.isNull()); mSMChannelsCount--; } void TestSimpleObserver::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("simple-observer"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); QDBusConnection bus = QDBusConnection::sessionBus(); QString channelDispatcherBusName = TP_QT_IFACE_CHANNEL_DISPATCHER; QString channelDispatcherPath = QLatin1String("/org/freedesktop/Telepathy/ChannelDispatcher"); Dispatcher *dispatcher = new Dispatcher(this); QVERIFY(bus.registerService(channelDispatcherBusName)); QVERIFY(bus.registerObject(channelDispatcherPath, dispatcher)); mContacts << QLatin1String("alice") << QLatin1String("bob"); // Create 2 accounts to be used by the tests: // - each account contains a connection, a text channel and a SM channel setup: // - the channels for the first account have alice as target and; // - the channels for the second account have bob as target for (int i = 0; i < 2; ++i) { // setup account QString accountBusName = TP_QT_IFACE_ACCOUNT_MANAGER; QString accountPath = QLatin1String("/org/freedesktop/Telepathy/Account/simple/account/") + QString::number(i); QObject *adaptorObject = new QObject(this); AccountAdaptor *accountAdaptor = new AccountAdaptor(adaptorObject); QVERIFY(bus.registerService(accountBusName)); QVERIFY(bus.registerObject(accountPath, adaptorObject)); AccountPtr acc = Account::create(accountBusName, accountPath); QVERIFY(connect(acc->becomeReady(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(acc->isReady(), true); QCOMPARE(acc->supportsRequestHints(), false); QCOMPARE(acc->requestsSucceedWithChannel(), false); mAccounts[i] = acc; // setup conn TpTestsContactsConnection *connService = TP_TESTS_CONTACTS_CONNECTION( g_object_new(TP_TESTS_TYPE_CONTACTS_CONNECTION, "account", "me@example.com", "protocol", "example", NULL)); QVERIFY(connService != 0); TpBaseConnection *baseConnService = TP_BASE_CONNECTION(connService); QVERIFY(baseConnService != 0); gchar *connName, *connPath; GError *error = NULL; QString name(QLatin1String("example") + QString::number(i)); QVERIFY(tp_base_connection_register(baseConnService, name.toLatin1().constData(), &connName, &connPath, &error)); QVERIFY(error == 0); QVERIFY(connName != 0); QVERIFY(connPath != 0); ConnectionPtr conn = Connection::create(QLatin1String(connName), QLatin1String(connPath), ChannelFactory::create(QDBusConnection::sessionBus()), ContactFactory::create()); QCOMPARE(conn->isReady(), false); accountAdaptor->setConnection(QLatin1String(connPath)); QVERIFY(connect(conn->lowlevel()->requestConnect(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(conn->isReady(), true); QCOMPARE(conn->status(), ConnectionStatusConnected); TpHandleRepoIface *contactRepo = tp_base_connection_get_handles(baseConnService, TP_HANDLE_TYPE_CONTACT); mConns[i].connService = connService; mConns[i].baseConnService = baseConnService; mConns[i].conn = conn; mConns[i].contactRepo = contactRepo; // setup channels guint handle = tp_handle_ensure(contactRepo, mContacts[i].toLatin1().constData(), 0, 0); QString messagesChanPath = QLatin1String(connPath) + QLatin1String("/MessagesChannel/") + QString::number(i); mMessagesChanServices[i] = EXAMPLE_ECHO_2_CHANNEL(g_object_new( EXAMPLE_TYPE_ECHO_2_CHANNEL, "connection", connService, "object-path", messagesChanPath.toLatin1().constData(), "handle", handle, NULL)); QVariantMap immutableProperties; immutableProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetID"), mContacts[i]); mTextChans[i] = TextChannel::create(conn, messagesChanPath, immutableProperties); QVERIFY(connect(mTextChans[i]->becomeReady(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QString callableChanPath = QLatin1String(connPath) + QLatin1String("/CallableChannel/") + QString::number(i); mCallableChanServices[i] = EXAMPLE_CALLABLE_MEDIA_CHANNEL(g_object_new( EXAMPLE_TYPE_CALLABLE_MEDIA_CHANNEL, "connection", connService, "object-path", callableChanPath.toLatin1().constData(), "handle", handle, NULL)); immutableProperties.clear(); immutableProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetID"), mContacts[i]); mSMChans[i] = StreamedMediaChannel::create(conn, callableChanPath, immutableProperties); QVERIFY(connect(mSMChans[i]->becomeReady(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); g_free(connName); g_free(connPath); } } void TestSimpleObserver::init() { initImpl(); } void TestSimpleObserver::testObserverRegistration() { QVERIFY(ourObservers().isEmpty()); QList observers; QList textObservers; QList callObservers; int numRegisteredObservers = 0; // Observers should be shared by bus and channel class, meaning that // the following code should register only 4 observers: // - one for text chat rooms // - one for text chats // - one for incoming/outgoing calls // - one for incoming calls (incoming) // // The Simple*Observer instances are added to the lists observers/textObservers/callObservers, // so they don't get deleted (refcount == 0) when out of scope for (int i = 0; i < 2; ++i) { AccountPtr acc = mAccounts[i]; for (int j = 0; j < 2; ++j) { QString contact = mContacts[j]; if (i == 0 && j == 0) { numRegisteredObservers = 1; } // on first run the following code should register an observer for text chat rooms, // on consecutive runs it should use the already registered observer for text chat rooms SimpleObserverPtr observer = SimpleObserver::create(acc, ChannelClassSpec::textChatroom(), contact); QCOMPARE(observer->account(), acc); QVERIFY(observer->channelFilter().size() == 1); QVERIFY(observer->channelFilter().contains(ChannelClassSpec::textChatroom())); QCOMPARE(observer->contactIdentifier(), contact); QVERIFY(observer->extraChannelFeatures().isEmpty()); QVERIFY(observer->channels().isEmpty()); observers.append(observer); QCOMPARE(ourObservers().size(), numRegisteredObservers); // the following code should always reuse the observer for text chat rooms already // created. QList extraChannelFeatures; extraChannelFeatures.append(QPair( ChannelClassSpec::textChatroom(), Channel::FeatureCore)); observer = SimpleObserver::create(acc, ChannelClassSpec::textChatroom(), contact, extraChannelFeatures); QCOMPARE(observer->account(), acc); QVERIFY(observer->channelFilter().size() == 1); QVERIFY(observer->channelFilter().contains(ChannelClassSpec::textChatroom())); QCOMPARE(observer->contactIdentifier(), contact); QCOMPARE(observer->extraChannelFeatures(), extraChannelFeatures); QVERIFY(observer->channels().isEmpty()); observers.append(observer); QCOMPARE(ourObservers().size(), numRegisteredObservers); if (i == 0 && j == 0) { numRegisteredObservers = 2; } // on first run the following code should register an observer for text chats, // on consecutive runs it should use the already registered observer for text chats SimpleTextObserverPtr textObserver = SimpleTextObserver::create(acc, contact); QCOMPARE(textObserver->account(), acc); QCOMPARE(textObserver->contactIdentifier(), contact); QVERIFY(textObserver->textChats().isEmpty()); textObservers.append(textObserver); QCOMPARE(ourObservers().size(), numRegisteredObservers); // the following code should always reuse the observer for text chats already // created. textObserver = SimpleTextObserver::create(acc, contact); QCOMPARE(textObserver->account(), acc); QCOMPARE(textObserver->contactIdentifier(), contact); QVERIFY(textObserver->textChats().isEmpty()); textObservers.append(textObserver); QCOMPARE(ourObservers().size(), numRegisteredObservers); if (i == 0 && j == 0) { numRegisteredObservers = 3; } // on first run the following code should register an observer for incoming/outgoing // calls, on consecutive runs it should use the already registered observer for // incoming/outgoing calls SimpleCallObserverPtr callObserver = SimpleCallObserver::create(acc, contact); QCOMPARE(callObserver->account(), acc); QCOMPARE(callObserver->contactIdentifier(), contact); QCOMPARE(callObserver->direction(), SimpleCallObserver::CallDirectionBoth); QVERIFY(callObserver->streamedMediaCalls().isEmpty()); callObservers.append(callObserver); QCOMPARE(ourObservers().size(), numRegisteredObservers); if (i == 0 && j == 0) { numRegisteredObservers = 4; } // on first run the following code should register an observer for incoming calls, // on consecutive runs it should use the already registered observer for incoming calls callObserver = SimpleCallObserver::create(acc, contact, SimpleCallObserver::CallDirectionIncoming); QCOMPARE(callObserver->account(), acc); QCOMPARE(callObserver->contactIdentifier(), contact); QCOMPARE(callObserver->direction(), SimpleCallObserver::CallDirectionIncoming); QVERIFY(callObserver->streamedMediaCalls().isEmpty()); callObservers.append(callObserver); QCOMPARE(ourObservers().size(), numRegisteredObservers); } } // deleting all SimpleObserver instances (text chat room) should unregister 1 observer observers.clear(); QCOMPARE(ourObservers().size(), 3); // deleting all SimpleTextObserver instances should unregister 1 observer textObservers.clear(); QCOMPARE(ourObservers().size(), 2); // deleting all SimpleCallObserver instances should unregister 2 observers callObservers.clear(); QVERIFY(ourObservers().isEmpty()); } void TestSimpleObserver::testCrossTalk() { SimpleObserverPtr observers[2]; SimpleTextObserverPtr textObservers[2]; SimpleTextObserverPtr textObserversNoContact[2]; SimpleCallObserverPtr callObservers[2]; SimpleCallObserverPtr callObserversNoContact[2]; for (int i = 0; i < 2; ++i) { AccountPtr acc = mAccounts[i]; observers[i] = SimpleObserver::create(acc, ChannelClassSpec::textChat(), mContacts[i]); QVERIFY(connect(observers[i].data(), SIGNAL(newChannels(QList)), SLOT(onObserverNewChannels(QList)))); QVERIFY(connect(observers[i].data(), SIGNAL(channelInvalidated(Tp::ChannelPtr,QString,QString)), SLOT(onObserverChannelInvalidated(Tp::ChannelPtr,QString,QString)))); // SimpleTextObserver::messageSent/Received is already tested in contact-messenger test textObservers[i] = SimpleTextObserver::create(acc, mContacts[i]); textObserversNoContact[i] = SimpleTextObserver::create(acc); callObservers[i] = SimpleCallObserver::create(acc, mContacts[i]); QVERIFY(connect(callObservers[i].data(), SIGNAL(streamedMediaCallStarted(Tp::StreamedMediaChannelPtr)), SLOT(onObserverStreamedMediaCallStarted(Tp::StreamedMediaChannelPtr)))); QVERIFY(connect(callObservers[i].data(), SIGNAL(streamedMediaCallEnded(Tp::StreamedMediaChannelPtr,QString,QString)), SLOT(onObserverStreamedMediaCallEnded(Tp::StreamedMediaChannelPtr,QString,QString)))); callObserversNoContact[i] = SimpleCallObserver::create(acc); } QMap ourObserversMap = ourObservers(); QMap::const_iterator it = ourObserversMap.constBegin(); QMap::const_iterator end = ourObserversMap.constEnd(); for (; it != end; ++it) { ClientObserverInterface *observerIface = new ClientObserverInterface( it.key(), it.value(), this); ChannelClassList observerFilter; if (!waitForProperty(observerIface->requestPropertyObserverChannelFilter(), &observerFilter)) { continue; } for (int i = 0; i < 2; ++i) { Q_FOREACH (const ChannelClassSpec &spec, observerFilter) { // only call ObserveChannels for text chat channels on observers that support text // chat if (spec.isSubsetOf(ChannelClassSpec::textChat())) { ChannelDetails textChan = { QDBusObjectPath(mTextChans[i]->objectPath()), mTextChans[i]->immutableProperties() }; observerIface->ObserveChannels( QDBusObjectPath(mAccounts[i]->objectPath()), QDBusObjectPath(mTextChans[i]->connection()->objectPath()), ChannelDetailsList() << textChan, QDBusObjectPath(QLatin1String("/")), Tp::ObjectPathList(), QVariantMap()); break; } } Q_FOREACH (const ChannelClassSpec &spec, observerFilter) { // only call ObserveChannels for SM channels on observers that support SM channels if (spec.isSubsetOf(ChannelClassSpec::streamedMediaCall())) { ChannelDetails smChan = { QDBusObjectPath(mSMChans[i]->objectPath()), mSMChans[i]->immutableProperties() }; observerIface->ObserveChannels( QDBusObjectPath(mAccounts[i]->objectPath()), QDBusObjectPath(mSMChans[i]->connection()->objectPath()), ChannelDetailsList() << smChan, QDBusObjectPath(QLatin1String("/")), Tp::ObjectPathList(), QVariantMap()); break; } } } } // due to QtDBus limitation, we cannot wait for ObserveChannels to finish properly before // proceeding, so we have to wait till all observers receive the channels while (observers[0]->channels().isEmpty() || observers[1]->channels().isEmpty() || textObservers[0]->textChats().isEmpty() || textObservers[1]->textChats().isEmpty() || textObserversNoContact[0]->textChats().isEmpty() || textObserversNoContact[1]->textChats().isEmpty() || callObservers[0]->streamedMediaCalls().isEmpty() || callObservers[1]->streamedMediaCalls().isEmpty() || callObserversNoContact[0]->streamedMediaCalls().isEmpty() || callObserversNoContact[1]->streamedMediaCalls().isEmpty()) { mLoop->processEvents(); } QCOMPARE(mChannelsCount, 2); QCOMPARE(mSMChannelsCount, 2); QCOMPARE(observers[0]->channels().size(), 1); QCOMPARE(textObservers[0]->textChats().size(), 1); QCOMPARE(textObserversNoContact[0]->textChats().size(), 1); QCOMPARE(callObservers[0]->streamedMediaCalls().size(), 1); QCOMPARE(callObserversNoContact[0]->streamedMediaCalls().size(), 1); QCOMPARE(observers[1]->channels().size(), 1); QCOMPARE(textObservers[1]->textChats().size(), 1); QCOMPARE(textObserversNoContact[1]->textChats().size(), 1); QCOMPARE(callObservers[1]->streamedMediaCalls().size(), 1); QCOMPARE(callObserversNoContact[1]->streamedMediaCalls().size(), 1); QVERIFY(textObservers[0]->textChats() != textObservers[1]->textChats()); QVERIFY(textObserversNoContact[0]->textChats() != textObserversNoContact[1]->textChats()); QCOMPARE(textObservers[0]->textChats(), textObserversNoContact[0]->textChats()); QCOMPARE(textObservers[1]->textChats(), textObserversNoContact[1]->textChats()); QVERIFY(callObservers[0]->streamedMediaCalls() != callObservers[1]->streamedMediaCalls()); QVERIFY(callObservers[0]->streamedMediaCalls() != callObserversNoContact[1]->streamedMediaCalls()); QCOMPARE(callObservers[0]->streamedMediaCalls(), callObserversNoContact[0]->streamedMediaCalls()); QCOMPARE(callObservers[1]->streamedMediaCalls(), callObserversNoContact[1]->streamedMediaCalls()); QCOMPARE(observers[0]->channels(), channels(textObservers[0]->textChats())); QVERIFY(observers[0]->channels() != channels(textObservers[1]->textChats())); QVERIFY(observers[0]->channels() != channels(callObservers[0]->streamedMediaCalls())); QVERIFY(observers[0]->channels() != channels(callObservers[1]->streamedMediaCalls())); QVERIFY(observers[1]->channels() != channels(textObservers[0]->textChats())); QCOMPARE(observers[1]->channels(), channels(textObservers[1]->textChats())); QVERIFY(observers[1]->channels() != channels(callObservers[0]->streamedMediaCalls())); QVERIFY(observers[1]->channels() != channels(callObservers[1]->streamedMediaCalls())); QVERIFY(channels(callObservers[0]->streamedMediaCalls()) != channels(textObservers[0]->textChats())); QVERIFY(channels(callObservers[0]->streamedMediaCalls()) != channels(textObservers[1]->textChats())); QVERIFY(channels(callObservers[1]->streamedMediaCalls()) != channels(textObservers[0]->textChats())); QVERIFY(channels(callObservers[1]->streamedMediaCalls()) != channels(textObservers[1]->textChats())); QCOMPARE(observers[0]->channels().first()->objectPath(), mTextChans[0]->objectPath()); QCOMPARE(observers[1]->channels().first()->objectPath(), mTextChans[1]->objectPath()); QCOMPARE(textObservers[0]->textChats().first()->objectPath(), mTextChans[0]->objectPath()); QCOMPARE(textObservers[1]->textChats().first()->objectPath(), mTextChans[1]->objectPath()); QCOMPARE(textObserversNoContact[0]->textChats().first()->objectPath(), mTextChans[0]->objectPath()); QCOMPARE(textObserversNoContact[1]->textChats().first()->objectPath(), mTextChans[1]->objectPath()); QCOMPARE(callObservers[0]->streamedMediaCalls().first()->objectPath(), mSMChans[0]->objectPath()); QCOMPARE(callObservers[1]->streamedMediaCalls().first()->objectPath(), mSMChans[1]->objectPath()); // invalidate channels for (int i = 0; i < 2; ++i) { if (mMessagesChanServices[i] != 0) { g_object_unref(mMessagesChanServices[i]); mMessagesChanServices[i] = 0; } if (mCallableChanServices[i] != 0) { g_object_unref(mCallableChanServices[i]); mCallableChanServices[i] = 0; } } while (!observers[0]->channels().isEmpty() || !observers[1]->channels().isEmpty() || !textObservers[0]->textChats().isEmpty() || !textObservers[1]->textChats().isEmpty() || !textObserversNoContact[0]->textChats().isEmpty() || !textObserversNoContact[1]->textChats().isEmpty() || !callObservers[0]->streamedMediaCalls().isEmpty() || !callObservers[1]->streamedMediaCalls().isEmpty() || !callObserversNoContact[0]->streamedMediaCalls().isEmpty() || !callObserversNoContact[1]->streamedMediaCalls().isEmpty()) { mLoop->processEvents(); } QCOMPARE(mChannelsCount, 0); QCOMPARE(mSMChannelsCount, 0); } void TestSimpleObserver::cleanup() { cleanupImpl(); } void TestSimpleObserver::cleanupTestCase() { for (int i = 0; i < 2; ++i) { if (!mConns[i].conn) { continue; } if (mConns[i].conn->requestedFeatures().contains(Connection::FeatureCore)) { QVERIFY(mConns[i].connService != NULL); if (TP_BASE_CONNECTION(mConns[i].connService)->status != TP_CONNECTION_STATUS_DISCONNECTED) { tp_base_connection_change_status(TP_BASE_CONNECTION(mConns[i].connService), TP_CONNECTION_STATUS_DISCONNECTED, TP_CONNECTION_STATUS_REASON_REQUESTED); } while (mConns[i].conn->isValid()) { mLoop->processEvents(); } } mConns[i].conn.reset(); mTextChans[i].reset(); mSMChans[i].reset(); if (mMessagesChanServices[i] != 0) { g_object_unref(mMessagesChanServices[i]); mMessagesChanServices[i] = 0; } if (mCallableChanServices[i] != 0) { g_object_unref(mCallableChanServices[i]); mCallableChanServices[i] = 0; } if (mConns[i].connService != 0) { mConns[i].baseConnService = 0; g_object_unref(mConns[i].connService); mConns[i].connService = 0; } } cleanupTestCaseImpl(); } QMap TestSimpleObserver::ourObservers() { QStringList registeredNames = QDBusConnection::sessionBus().interface()->registeredServiceNames(); QMap observers; Q_FOREACH (QString name, registeredNames) { if (!name.startsWith(QLatin1String("org.freedesktop.Telepathy.Client.TpQtSO"))) { continue; } if (QDBusConnection::sessionBus().interface()->serviceOwner(name).value() != QDBusConnection::sessionBus().baseService()) { continue; } QString path = QLatin1Char('/') + name; path.replace(QLatin1Char('.'), QLatin1Char('/')); ClientInterface client(name, path); QStringList ifaces; if (!waitForProperty(client.requestPropertyInterfaces(), &ifaces)) { continue; } if (!ifaces.contains(TP_QT_IFACE_CLIENT_OBSERVER)) { continue; } observers.insert(name, path); } return observers; } QTEST_MAIN(TestSimpleObserver) #include "_gen/simple-observer.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/contact-messenger.cpp0000644000175200001440000005352212000056607024647 0ustar00collabora-develusers00000000000000#include #include #include #include #include #include #include #define TP_QT_ENABLE_LOWLEVEL_API #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace Tp; using namespace Tp::Client; class TestContactMessenger; class CDMessagesAdaptor : public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.freedesktop.Telepathy.ChannelDispatcher.Interface.Messages.DRAFT") Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" "") public: CDMessagesAdaptor(const QDBusConnection &bus, TestContactMessenger *test, QObject *parent) : QDBusAbstractAdaptor(parent), test(test), mBus(bus) { } virtual ~CDMessagesAdaptor() { } void setSimulatedSendError(const QString &error) { mSimulatedSendError = error; } public Q_SLOTS: // Methods QString SendMessage(const QDBusObjectPath &account, const QString &targetID, const Tp::MessagePartList &message, uint flags); private: TestContactMessenger *test; QDBusConnection mBus; QString mSimulatedSendError; }; class AccountAdaptor : public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.freedesktop.Telepathy.Account") Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" " \n" " \n" " \n" " \n" "") Q_PROPERTY(QDBusObjectPath Connection READ Connection) Q_PROPERTY(QStringList Interfaces READ Interfaces) public: AccountAdaptor(QObject *parent) : QDBusAbstractAdaptor(parent), mConnection(QLatin1String("/")) { } virtual ~AccountAdaptor() { } void setConnection(QString conn) { if (conn.isEmpty()) { conn = QLatin1String("/"); } mConnection = QDBusObjectPath(conn); QVariantMap props; props.insert(QLatin1String("Connection"), QVariant::fromValue(mConnection)); Q_EMIT AccountPropertyChanged(props); } public: // Properties inline QDBusObjectPath Connection() const { return mConnection; } inline QStringList Interfaces() const { return QStringList(); } Q_SIGNALS: // Signals void AccountPropertyChanged(const QVariantMap &properties); private: QDBusObjectPath mConnection; }; class Dispatcher : public QObject, public QDBusContext { Q_OBJECT; public: Dispatcher(QObject *parent) : QObject(parent) { } ~Dispatcher() { } }; class TestContactMessenger : public Test { Q_OBJECT public: TestContactMessenger(QObject *parent = 0) : Test(parent), mCDMessagesAdaptor(0), mAccountAdaptor(0), // service side (telepathy-glib) mConnService(0), mBaseConnService(0), mContactRepo(0), mSendFinished(false), mGotMessageSent(false) { } protected Q_SLOTS: void expectPendingContactsFinished(Tp::PendingOperation *op); void onSendFinished(Tp::PendingOperation *); void onMessageSent(const Tp::Message &message, Tp::MessageSendingFlags flags, const QString &sentMessageToken, const Tp::TextChannelPtr &channel); void onMessageReceived(const Tp::ReceivedMessage &message, const Tp::TextChannelPtr &channel); private Q_SLOTS: void initTestCase(); void init(); void testNoSupport(); void testObserverRegistration(); void testSimpleSend(); void testReceived(); void testReceivedFromContact(); void cleanup(); void cleanupTestCase(); private: friend class CDMessagesAdaptor; QList ourObservers(); CDMessagesAdaptor *mCDMessagesAdaptor; AccountAdaptor *mAccountAdaptor; QString mAccountBusName, mAccountPath; AccountManagerPtr mAM; AccountPtr mAccount; ConnectionPtr mConn; TextChannelPtr mChan; TpTestsContactsConnection *mConnService; TpBaseConnection *mBaseConnService; TpHandleRepoIface *mContactRepo; ExampleEcho2Channel *mMessagesChanService; QString mConnName; QString mConnPath; QString mMessagesChanPath; bool mSendFinished, mGotMessageSent, mGotMessageReceived; QString mSendError, mSendToken, mMessageSentText, mMessageSentToken, mMessageSentChannel; QString mMessageReceivedText; ChannelPtr mMessageReceivedChan; QList mContacts; }; QString CDMessagesAdaptor::SendMessage(const QDBusObjectPath &account, const QString &targetID, const MessagePartList &message, uint flags) { if (!mSimulatedSendError.isEmpty()) { dynamic_cast(QObject::parent())->sendErrorReply(mSimulatedSendError, QLatin1String("Let's pretend this interface and method don't exist, shall we?")); return QString(); } /* * Sadly, the QDBus local-loop "optimization" prevents us from correctly waiting for the * ObserveChannels call to return, and consequently prevents us from knowing when we can call * Send, knowing that the observer has connected to the message sent signal. * * The real MC doesn't have this limitation because it actually really calls and waits our * ObserveChannels method to finish, unlike dear QDBus here. */ QList observers = test->ourObservers(); Q_FOREACH(ClientObserverInterface *iface, observers) { ChannelDetails chan = { QDBusObjectPath(test->mChan->objectPath()), test->mChan->immutableProperties() }; QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(iface->ObserveChannels( QDBusObjectPath(test->mAccount->objectPath()), QDBusObjectPath(test->mChan->connection()->objectPath()), ChannelDetailsList() << chan, QDBusObjectPath(QLatin1String("/")), Tp::ObjectPathList(), QVariantMap())); connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), test->mLoop, SLOT(quit())); test->mLoop->exec(); QDBusPendingReply reply = *watcher; qDebug() << reply.error(); // Always gives out "local-loop messages can't have delayed replies" delete watcher; } qDebug() << "Calling send"; // And this is always called before the observer manages to connect to messageSent. Bummer. PendingSendMessage *msg = test->mChan->send(message, static_cast(flags)); connect(msg, SIGNAL(finished(Tp::PendingOperation*)), test, SLOT(expectSuccessfulCall(Tp::PendingOperation*))); test->mLoop->exec(); return msg->sentMessageToken(); } void TestContactMessenger::expectPendingContactsFinished(PendingOperation *op) { TEST_VERIFY_OP(op); PendingContacts *pending = qobject_cast(op); mContacts = pending->contacts(); mLoop->exit(0); } void TestContactMessenger::onSendFinished(Tp::PendingOperation *op) { PendingSendMessage *msg = qobject_cast(op); QVERIFY(msg != NULL); if (msg->isValid()) { qDebug() << "Send succeeded, got token" << msg->sentMessageToken(); mSendToken = msg->sentMessageToken(); } else { qDebug() << "Send failed, got error" << msg->errorName(); mSendError = msg->errorName(); } mSendFinished = true; } void TestContactMessenger::onMessageSent(const Tp::Message &message, Tp::MessageSendingFlags flags, const QString &sentMessageToken, const Tp::TextChannelPtr &channel) { qDebug() << "Got ContactMessenger::messageSent()"; mGotMessageSent = true; mMessageSentToken = sentMessageToken; mMessageSentText = message.text(); } void TestContactMessenger::onMessageReceived(const Tp::ReceivedMessage &message, const Tp::TextChannelPtr &channel) { qDebug() << "Got ContactMessenger::messageReceived()"; mGotMessageReceived = true; mMessageReceivedText = message.text(); mMessageReceivedChan = channel; } void TestContactMessenger::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("contact-messenger"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); QDBusConnection bus = QDBusConnection::sessionBus(); QString channelDispatcherBusName = TP_QT_IFACE_CHANNEL_DISPATCHER; QString channelDispatcherPath = QLatin1String("/org/freedesktop/Telepathy/ChannelDispatcher"); Dispatcher *dispatcher = new Dispatcher(this); mCDMessagesAdaptor = new CDMessagesAdaptor(bus, this, dispatcher); QVERIFY(bus.registerService(channelDispatcherBusName)); QVERIFY(bus.registerObject(channelDispatcherPath, dispatcher)); mAccountBusName = TP_QT_IFACE_ACCOUNT_MANAGER; mAccountPath = QLatin1String("/org/freedesktop/Telepathy/Account/simple/simple/account"); QObject *acc = new QObject(this); mAccountAdaptor = new AccountAdaptor(acc); QVERIFY(bus.registerService(mAccountBusName)); QVERIFY(bus.registerObject(mAccountPath, acc)); mAccount = Account::create(mAccountBusName, mAccountPath); QVERIFY(connect(mAccount->becomeReady(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mAccount->isReady(), true); QCOMPARE(mAccount->supportsRequestHints(), false); QCOMPARE(mAccount->requestsSucceedWithChannel(), false); mConnService = TP_TESTS_CONTACTS_CONNECTION(g_object_new( TP_TESTS_TYPE_CONTACTS_CONNECTION, "account", "me@example.com", "protocol", "example", NULL)); QVERIFY(mConnService != 0); mBaseConnService = TP_BASE_CONNECTION(mConnService); QVERIFY(mBaseConnService != 0); gchar *name, *connPath; GError *error = NULL; QVERIFY(tp_base_connection_register(mBaseConnService, "example", &name, &connPath, &error)); QVERIFY(error == 0); QVERIFY(name != 0); QVERIFY(connPath != 0); mConnName = QLatin1String(name); mConnPath = QLatin1String(connPath); g_free(name); g_free(connPath); mAccountAdaptor->setConnection(mConnPath); mConn = Connection::create(mConnName, mConnPath, ChannelFactory::create(QDBusConnection::sessionBus()), ContactFactory::create()); QCOMPARE(mConn->isReady(), false); QVERIFY(connect(mConn->lowlevel()->requestConnect(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mConn->isReady(), true); QCOMPARE(static_cast(mConn->status()), static_cast(ConnectionStatusConnected)); mContactRepo = tp_base_connection_get_handles(mBaseConnService, TP_HANDLE_TYPE_CONTACT); guint handle = tp_handle_ensure(mContactRepo, "Ann", 0, 0); mMessagesChanPath = mConnPath + QLatin1String("/MessagesChannel"); QByteArray chanPath = mMessagesChanPath.toAscii(); mMessagesChanService = EXAMPLE_ECHO_2_CHANNEL(g_object_new( EXAMPLE_TYPE_ECHO_2_CHANNEL, "connection", mConnService, "object-path", chanPath.data(), "handle", handle, NULL)); QVariantMap immutableProperties; immutableProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetID"), QLatin1String("ann")); mChan = TextChannel::create(mConn, mMessagesChanPath, immutableProperties); QVERIFY(connect(mChan->becomeReady(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); } void TestContactMessenger::init() { initImpl(); mSendFinished = false; mGotMessageSent = false; mGotMessageReceived = false; mCDMessagesAdaptor->setSimulatedSendError(QString()); } void TestContactMessenger::testNoSupport() { // We should give a descriptive error message if the CD doesn't actually support sending // messages using the new API. NotImplemented should probably be documented for the // sendMessage() methods as an indication that the CD implementation needs to be upgraded. ContactMessengerPtr messenger = ContactMessenger::create(mAccount, QLatin1String("Ann")); QVERIFY(!messenger.isNull()); mCDMessagesAdaptor->setSimulatedSendError(TP_QT_DBUS_ERROR_UNKNOWN_METHOD); PendingSendMessage *pendingSend = messenger->sendMessage(QLatin1String("Hi!")); QVERIFY(pendingSend != NULL); QVERIFY(connect(pendingSend, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(pendingSend->isFinished()); QVERIFY(!pendingSend->isValid()); QCOMPARE(pendingSend->errorName(), TP_QT_ERROR_NOT_IMPLEMENTED); // Let's try using the other sendMessage overload similarly as well Message m(ChannelTextMessageTypeAction, QLatin1String("is testing!")); pendingSend = messenger->sendMessage(m.parts()); QVERIFY(pendingSend != NULL); QVERIFY(connect(pendingSend, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(pendingSend->isFinished()); QVERIFY(!pendingSend->isValid()); QCOMPARE(pendingSend->errorName(), TP_QT_ERROR_NOT_IMPLEMENTED); } void TestContactMessenger::testObserverRegistration() { ContactMessengerPtr messenger = ContactMessenger::create(mAccount, QLatin1String("Ann")); // At this point, there should be a registered observer for the relevant channel class on our // unique name QList observers = ourObservers(); QVERIFY(!observers.empty()); Q_FOREACH(ClientObserverInterface *observer, observers) { // It shouldn't have recover == true, as it shouldn't be activatable at all, and hence recovery // doesn't make sense for it bool recover; QVERIFY(waitForProperty(observer->requestPropertyRecover(), &recover)); QCOMPARE(recover, true); } // If we destroy our messenger (which is the last/only one for that ID), the observers should go // away, at least in a few mainloop iterations messenger.reset(); QVERIFY(ourObservers().empty()); } void TestContactMessenger::testSimpleSend() { ContactMessengerPtr messenger = ContactMessenger::create(mAccount, QLatin1String("Ann")); QVERIFY(connect(messenger->sendMessage(QLatin1String("Hi!")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onSendFinished(Tp::PendingOperation*)))); while (!mSendFinished) { mLoop->processEvents(); } QVERIFY(mSendError.isEmpty()); } void TestContactMessenger::testReceived() { ContactMessengerPtr messenger = ContactMessenger::create(mAccount, QLatin1String("Ann")); QVERIFY(connect(messenger.data(), SIGNAL(messageReceived(Tp::ReceivedMessage,Tp::TextChannelPtr)), SLOT(onMessageReceived(Tp::ReceivedMessage,Tp::TextChannelPtr)))); QList observers = ourObservers(); Q_FOREACH(ClientObserverInterface *iface, observers) { ChannelDetails chan = { QDBusObjectPath(mChan->objectPath()), mChan->immutableProperties() }; iface->ObserveChannels( QDBusObjectPath(mAccount->objectPath()), QDBusObjectPath(mChan->connection()->objectPath()), ChannelDetailsList() << chan, QDBusObjectPath(QLatin1String("/")), Tp::ObjectPathList(), QVariantMap()); } guint handle = tp_handle_ensure(mContactRepo, "Ann", 0, 0); TpMessage *msg = tp_cm_message_new_text(mBaseConnService, handle, TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL, "Hi!"); tp_message_mixin_take_received(G_OBJECT(mMessagesChanService), msg); while (!mGotMessageReceived) { mLoop->processEvents(); } QCOMPARE(mMessageReceivedText, QString::fromLatin1("Hi!")); QCOMPARE(mMessageReceivedChan->objectPath(), mChan->objectPath()); } void TestContactMessenger::testReceivedFromContact() { QVERIFY(connect(mAccount->connection()->contactManager()->contactsForIdentifiers( QStringList() << QLatin1String("Ann")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectPendingContactsFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); ContactPtr ann = mContacts.first(); ContactMessengerPtr messenger = ContactMessenger::create(mAccount, ann); QVERIFY(connect(messenger.data(), SIGNAL(messageReceived(Tp::ReceivedMessage,Tp::TextChannelPtr)), SLOT(onMessageReceived(Tp::ReceivedMessage,Tp::TextChannelPtr)))); QList observers = ourObservers(); Q_FOREACH(ClientObserverInterface *iface, observers) { ChannelDetails chan = { QDBusObjectPath(mChan->objectPath()), mChan->immutableProperties() }; iface->ObserveChannels( QDBusObjectPath(mAccount->objectPath()), QDBusObjectPath(mChan->connection()->objectPath()), ChannelDetailsList() << chan, QDBusObjectPath(QLatin1String("/")), Tp::ObjectPathList(), QVariantMap()); } guint handle = tp_handle_ensure(mContactRepo, "Ann", 0, 0); TpMessage *msg = tp_cm_message_new_text(mBaseConnService, handle, TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL, "Hi!"); tp_message_mixin_take_received(G_OBJECT(mMessagesChanService), msg); while (!mGotMessageReceived) { mLoop->processEvents(); } QCOMPARE(mMessageReceivedText, QString::fromLatin1("Hi!")); QCOMPARE(mMessageReceivedChan->objectPath(), mChan->objectPath()); } void TestContactMessenger::cleanup() { mMessageReceivedChan.reset(); cleanupImpl(); } void TestContactMessenger::cleanupTestCase() { if (mConn) { // Disconnect and wait for the readiness change QVERIFY(connect(mConn->lowlevel()->requestDisconnect(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); if (mConn->isValid()) { QVERIFY(connect(mConn.data(), SIGNAL(invalidated(Tp::DBusProxy *, const QString &, const QString &)), mLoop, SLOT(quit()))); QCOMPARE(mLoop->exec(), 0); } } mChan.reset(); if (mMessagesChanService != 0) { g_object_unref(mMessagesChanService); mMessagesChanService = 0; } if (mConnService != 0) { mBaseConnService = 0; g_object_unref(mConnService); mConnService = 0; } cleanupTestCaseImpl(); } QList TestContactMessenger::ourObservers() { QStringList registeredNames = QDBusConnection::sessionBus().interface()->registeredServiceNames(); QList observers; Q_FOREACH (QString name, registeredNames) { if (!name.startsWith(QLatin1String("org.freedesktop.Telepathy.Client."))) { continue; } if (QDBusConnection::sessionBus().interface()->serviceOwner(name).value() != QDBusConnection::sessionBus().baseService()) { continue; } QString path = QLatin1Char('/') + name; path.replace(QLatin1Char('.'), QLatin1Char('/')); ClientInterface client(name, path); QStringList ifaces; if (!waitForProperty(client.requestPropertyInterfaces(), &ifaces)) { continue; } if (!ifaces.contains(TP_QT_IFACE_CLIENT_OBSERVER)) { continue; } ClientObserverInterface *observer = new ClientObserverInterface(name, path, this); ChannelClassList filter; if (!waitForProperty(observer->requestPropertyObserverChannelFilter(), &filter)) { continue; } Q_FOREACH (ChannelClassSpec spec, filter) { if (spec.isSubsetOf(ChannelClassSpec::textChat())) { observers.push_back(observer); qDebug() << "Found our observer" << name << '\n'; break; } } } return observers; } QTEST_MAIN(TestContactMessenger) #include "_gen/contact-messenger.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/conn-basics.cpp0000644000175200001440000002141612000056607023422 0ustar00collabora-develusers00000000000000#include #include #include #include #define TP_QT_ENABLE_LOWLEVEL_API #include #include #include #include #include #include #include #include #include #include #include using namespace Tp; class TestConnBasics : public Test { Q_OBJECT public: TestConnBasics(QObject *parent = 0) : Test(parent), mConnService(0) { } protected Q_SLOTS: void expectConnReady(Tp::ConnectionStatus); void expectConnInvalidated(); void expectPresenceAvailable(const Tp::SimplePresence &); void onRequestConnectFinished(Tp::PendingOperation *); private Q_SLOTS: void initTestCase(); void init(); void testBasics(); void testSimplePresence(); void cleanup(); void cleanupTestCase(); private: QString mConnName, mConnPath; TpTestsContactsConnection *mConnService; ConnectionPtr mConn; QList mStatuses; }; void TestConnBasics::expectConnReady(Tp::ConnectionStatus newStatus) { qDebug() << "connection changed to status" << newStatus; switch (newStatus) { case ConnectionStatusDisconnected: qWarning() << "Disconnected"; break; case ConnectionStatusConnecting: QCOMPARE(mConn->isReady(Connection::FeatureConnected), false); mStatuses << newStatus; qDebug() << "Connecting"; break; case ConnectionStatusConnected: QCOMPARE(mConn->isReady(Connection::FeatureConnected), true); mStatuses << newStatus; qDebug() << "Connected"; break; default: qWarning().nospace() << "What sort of status is " << newStatus << "?!"; break; } } void TestConnBasics::expectConnInvalidated() { qDebug() << "conn invalidated"; mLoop->exit(0); } void TestConnBasics::expectPresenceAvailable(const Tp::SimplePresence &presence) { if (presence.type == Tp::ConnectionPresenceTypeAvailable) { mLoop->exit(0); return; } mLoop->exit(1); } void TestConnBasics::onRequestConnectFinished(Tp::PendingOperation *op) { QCOMPARE(mConn->status(), ConnectionStatusConnected); QVERIFY(mStatuses.contains(ConnectionStatusConnected)); mLoop->exit(0); } void TestConnBasics::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("conn-basics"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); } void TestConnBasics::init() { initImpl(); gchar *name; gchar *connPath; GError *error = 0; mConnService = TP_TESTS_CONTACTS_CONNECTION(g_object_new( TP_TESTS_TYPE_CONTACTS_CONNECTION, "account", "me@example.com", "protocol", "contacts", NULL)); QVERIFY(mConnService != 0); QVERIFY(tp_base_connection_register(TP_BASE_CONNECTION(mConnService), "contacts", &name, &connPath, &error)); QVERIFY(error == 0); QVERIFY(name != 0); QVERIFY(connPath != 0); mConnName = QLatin1String(name); mConnPath = QLatin1String(connPath); g_free(name); g_free(connPath); mConn = Connection::create(mConnName, mConnPath, ChannelFactory::create(QDBusConnection::sessionBus()), ContactFactory::create()); QCOMPARE(mConn->isReady(), false); QVERIFY(connect(mConn.data(), SIGNAL(statusChanged(Tp::ConnectionStatus)), SLOT(expectConnReady(Tp::ConnectionStatus)))); qDebug() << "waiting connection to become connected"; PendingOperation *pr = mConn->becomeReady(Connection::FeatureConnected); QVERIFY(connect(pr, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); PendingOperation *pc = mConn->lowlevel()->requestConnect(); QVERIFY(connect(pc, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onRequestConnectFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(pr->isFinished(), true); QCOMPARE(mLoop->exec(), 0); QCOMPARE(pc->isFinished(), true); QCOMPARE(mConn->isReady(Connection::FeatureConnected), true); qDebug() << "connection is now ready"; QVERIFY(disconnect(mConn.data(), SIGNAL(statusChanged(Tp::ConnectionStatus)), this, SLOT(expectConnReady(Tp::ConnectionStatus)))); } void TestConnBasics::testBasics() { QCOMPARE(static_cast(mConn->statusReason()), static_cast(ConnectionStatusReasonRequested)); } void TestConnBasics::testSimplePresence() { qDebug() << "Making SimplePresence ready"; Features features = Features() << Connection::FeatureSimplePresence; QCOMPARE(mConn->isReady(features), false); QVERIFY(connect(mConn->becomeReady(features), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mConn->isReady(features), true); qDebug() << "SimplePresence ready"; qDebug() << "mConn->status:" << mConn->status(); const QStringList canSetNames = QStringList() << QLatin1String("available") << QLatin1String("busy") << QLatin1String("away"); const QStringList cantSetNames = QStringList() << QLatin1String("offline") << QLatin1String("unknown") << QLatin1String("error"); const QStringList expectedNames = canSetNames + cantSetNames; const ConnectionPresenceType expectedTypes[] = { ConnectionPresenceTypeAvailable, ConnectionPresenceTypeBusy, ConnectionPresenceTypeAway, ConnectionPresenceTypeOffline, ConnectionPresenceTypeUnknown, ConnectionPresenceTypeError }; SimpleStatusSpecMap statuses = mConn->lowlevel()->allowedPresenceStatuses(); Q_FOREACH (QString name, statuses.keys()) { QVERIFY(expectedNames.contains(name)); if (canSetNames.contains(name)) { QVERIFY(statuses[name].maySetOnSelf); QVERIFY(statuses[name].canHaveMessage); } else { QVERIFY(cantSetNames.contains(name)); QVERIFY(!statuses[name].maySetOnSelf); QVERIFY(!statuses[name].canHaveMessage); } QCOMPARE(statuses[name].type, static_cast(expectedTypes[expectedNames.indexOf(name)])); } QCOMPARE(mConn->lowlevel()->maxPresenceStatusMessageLength(), (uint) 512); } void TestConnBasics::cleanup() { if (mConn) { QVERIFY(mConn->isValid()); GHashTable *details = tp_asv_new( "debug-message", G_TYPE_STRING, "woo i'm going doooooown", "x-tpqt-test-rgba-herring-color", G_TYPE_UINT, 0xff0000ffU, NULL ); // Disconnect and wait for invalidation tp_base_connection_disconnect_with_dbus_error(TP_BASE_CONNECTION(mConnService), TP_QT_ERROR_CANCELLED.latin1(), details, TP_CONNECTION_STATUS_REASON_REQUESTED); g_hash_table_destroy(details); QVERIFY(connect(mConn.data(), SIGNAL(invalidated(Tp::DBusProxy *, const QString &, const QString &)), SLOT(expectConnInvalidated()))); QCOMPARE(mLoop->exec(), 0); QVERIFY(!mConn->isValid()); // Check that we got the connection error details QCOMPARE(static_cast(mConn->statusReason()), static_cast(ConnectionStatusReasonRequested)); QVERIFY(mConn->errorDetails().isValid()); QVERIFY(mConn->errorDetails().hasDebugMessage()); QCOMPARE(mConn->errorDetails().debugMessage(), QLatin1String("woo i'm going doooooown")); #if 0 // Not yet there QVERIFY(!mConn->errorDetails().hasExpectedHostname()); QVERIFY(!mConn->errorDetails().hasCertificateHostname()); #endif QVERIFY(mConn->errorDetails().allDetails().contains( QLatin1String("x-tpqt-test-rgba-herring-color"))); QCOMPARE(qdbus_cast(mConn->errorDetails().allDetails().value( QLatin1String("x-tpqt-test-rgba-herring-color"))), 0xff0000ffU); processDBusQueue(mConn.data()); mConn.reset(); } if (mConnService != 0) { g_object_unref(mConnService); mConnService = 0; } cleanupImpl(); } void TestConnBasics::cleanupTestCase() { cleanupTestCaseImpl(); } QTEST_MAIN(TestConnBasics) #include "_gen/conn-basics.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/contacts-location.cpp0000644000175200001440000000764312000056607024655 0ustar00collabora-develusers00000000000000#include #include #include #include #include #include #include #include #include using namespace Tp; class TestContactsLocation : public Test { Q_OBJECT public: TestContactsLocation(QObject *parent = 0) : Test(parent), mConn(0), mContactsLocationUpdated(0) { } protected Q_SLOTS: void onLocationInfoUpdated(const Tp::LocationInfo &location); private Q_SLOTS: void initTestCase(); void init(); void testLocation(); void cleanup(); void cleanupTestCase(); private: TestConnHelper *mConn; int mContactsLocationUpdated; }; void TestContactsLocation::onLocationInfoUpdated(const Tp::LocationInfo &location) { Q_UNUSED(location); mContactsLocationUpdated++; mLoop->exit(0); } void TestContactsLocation::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("contacts-location"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); mConn = new TestConnHelper(this, TP_TESTS_TYPE_CONTACTS_CONNECTION, "account", "me@example.com", "protocol", "foo", NULL); QCOMPARE(mConn->connect(), true); } void TestContactsLocation::init() { initImpl(); mContactsLocationUpdated = 0; } void TestContactsLocation::testLocation() { ContactManagerPtr contactManager = mConn->client()->contactManager(); QVERIFY(contactManager->supportedFeatures().contains(Contact::FeatureLocation)); QStringList validIDs = QStringList() << QLatin1String("foo") << QLatin1String("bar"); QList contacts = mConn->contacts(validIDs, Contact::FeatureLocation); QCOMPARE(contacts.size(), validIDs.size()); for (int i = 0; i < contacts.size(); i++) { ContactPtr contact = contacts[i]; QCOMPARE(contact->requestedFeatures().contains(Contact::FeatureLocation), true); QCOMPARE(contact->actualFeatures().contains(Contact::FeatureLocation), true); QVERIFY(connect(contact.data(), SIGNAL(locationUpdated(const Tp::LocationInfo &)), SLOT(onLocationInfoUpdated(const Tp::LocationInfo &)))); } GHashTable *location_1 = tp_asv_new( "country", G_TYPE_STRING, "United-kingdoms", "lat", G_TYPE_DOUBLE, 20.0, NULL); GHashTable *location_2 = tp_asv_new( "country", G_TYPE_STRING, "Atlantis", "lat", G_TYPE_DOUBLE, 10.0, NULL); GHashTable *locations[] = { location_1, location_2 }; TpHandle handles[] = { 0, 0 }; TpHandleRepoIface *serviceRepo = tp_base_connection_get_handles( TP_BASE_CONNECTION(mConn->service()), TP_HANDLE_TYPE_CONTACT); for (unsigned i = 0; i < 2; i++) { handles[i] = tp_handle_ensure(serviceRepo, qPrintable(validIDs[i]), NULL, NULL); } tp_tests_contacts_connection_change_locations(TP_TESTS_CONTACTS_CONNECTION(mConn->service()), 2, handles, locations); while (mContactsLocationUpdated != 2) { QCOMPARE(mLoop->exec(), 0); } for (int i = 0; i < contacts.size(); i++) { ContactPtr contact = contacts[i]; QCOMPARE(contact->location().country(), QLatin1String(tp_asv_get_string(locations[i], "country"))); QCOMPARE(contact->location().latitude(), tp_asv_get_double(locations[i], "lat", NULL)); } g_hash_table_unref(location_1); g_hash_table_unref(location_2); } void TestContactsLocation::cleanup() { cleanupImpl(); } void TestContactsLocation::cleanupTestCase() { QCOMPARE(mConn->disconnect(), true); delete mConn; cleanupTestCaseImpl(); } QTEST_MAIN(TestContactsLocation) #include "_gen/contacts-location.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/chan-group.cpp0000644000175200001440000004421112000056607023264 0ustar00collabora-develusers00000000000000#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace Tp; class TestChanGroup : public Test { Q_OBJECT public: TestChanGroup(QObject *parent = 0) : Test(parent), mConn(0), mChanService(0), mGotGroupFlagsChanged(false), mGroupFlags((ChannelGroupFlags) 0), mGroupFlagsAdded((ChannelGroupFlags) 0), mGroupFlagsRemoved((ChannelGroupFlags) 0) { } protected Q_SLOTS: void onGroupMembersChanged( const Tp::Contacts &groupMembersAdded, const Tp::Contacts &groupLocalPendingMembersAdded, const Tp::Contacts &groupRemotePendingMembersAdded, const Tp::Contacts &groupMembersRemoved, const Tp::Channel::GroupMemberChangeDetails &details); void onGroupFlagsChanged(Tp::ChannelGroupFlags flags, Tp::ChannelGroupFlags added, Tp::ChannelGroupFlags removed); private Q_SLOTS: void initTestCase(); void init(); void testCreateChannel(); void testMCDGroup(); void testPropertylessGroup(); void testLeave(); void testLeaveWithFallback(); void testGroupFlagsChange(); void cleanup(); void cleanupTestCase(); private: void debugContacts(); void commonTest(gboolean properties); TestConnHelper *mConn; TpTestsTextChannelGroup *mChanService; ChannelPtr mChan; QString mChanObjectPath; QList mContacts; Contacts mChangedCurrent; Contacts mChangedLP; Contacts mChangedRP; Contacts mChangedRemoved; Channel::GroupMemberChangeDetails mDetails; UIntList mInitialMembers; bool mGotGroupFlagsChanged; ChannelGroupFlags mGroupFlags; ChannelGroupFlags mGroupFlagsAdded; ChannelGroupFlags mGroupFlagsRemoved; }; void TestChanGroup::onGroupMembersChanged( const Contacts &groupMembersAdded, const Contacts &groupLocalPendingMembersAdded, const Contacts &groupRemotePendingMembersAdded, const Contacts &groupMembersRemoved, const Channel::GroupMemberChangeDetails &details) { qDebug() << "group members changed"; mChangedCurrent = groupMembersAdded; mChangedLP = groupLocalPendingMembersAdded; mChangedRP = groupRemotePendingMembersAdded; mChangedRemoved = groupMembersRemoved; mDetails = details; debugContacts(); mLoop->exit(0); } void TestChanGroup::onGroupFlagsChanged(Tp::ChannelGroupFlags flags, Tp::ChannelGroupFlags added, Tp::ChannelGroupFlags removed) { qDebug() << "group flags changed"; mGotGroupFlagsChanged = true; mGroupFlags = flags; mGroupFlagsAdded = added; mGroupFlagsRemoved = removed; } void TestChanGroup::debugContacts() { qDebug() << "contacts on group:"; Q_FOREACH (const ContactPtr &contact, mChan->groupContacts()) { qDebug() << " " << contact->id(); } qDebug() << "local pending contacts on group:"; Q_FOREACH (const ContactPtr &contact, mChan->groupLocalPendingContacts()) { qDebug() << " " << contact->id(); } qDebug() << "remote pending contacts on group:"; Q_FOREACH (const ContactPtr &contact, mChan->groupRemotePendingContacts()) { qDebug() << " " << contact->id(); } } void TestChanGroup::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("chan-group"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); mConn = new TestConnHelper(this, EXAMPLE_TYPE_CONTACT_LIST_CONNECTION, "account", "me@example.com", "protocol", "example-contact-list", "simulation-delay", 1, NULL); QCOMPARE(mConn->connect(Connection::FeatureSelfContact), true); QStringList ids; ids << QLatin1String("sjoerd@example.com"); // Check that the contact is properly built mContacts = mConn->contacts(ids); QCOMPARE(mContacts.size(), 1); QVERIFY(!mContacts.first().isNull()); } void TestChanGroup::init() { initImpl(); mChangedCurrent.clear(); mChangedLP.clear(); mChangedRP.clear(); mChangedRemoved.clear(); mDetails = Channel::GroupMemberChangeDetails(); mGotGroupFlagsChanged = false; mGroupFlags = (ChannelGroupFlags) 0; mGroupFlagsAdded = (ChannelGroupFlags) 0; mGroupFlagsRemoved = (ChannelGroupFlags) 0; } void TestChanGroup::testCreateChannel() { mChan = mConn->ensureChannel(TP_QT_IFACE_CHANNEL_TYPE_CONTACT_LIST, Tp::HandleTypeGroup, QLatin1String("Cambridge")); QVERIFY(mChan); mChanObjectPath = mChan->objectPath(); QVERIFY(connect(mChan->becomeReady(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->isReady(), true); QCOMPARE(static_cast(mChan->targetHandleType()), static_cast(Tp::HandleTypeGroup)); QVERIFY(mChan->targetContact().isNull()); QCOMPARE(mChan->isRequested(), false); QVERIFY(mChan->groupContacts().contains(mContacts.first())); Q_FOREACH (ContactPtr contact, mChan->groupContacts()) mInitialMembers.push_back(contact->handle()[0]); QCOMPARE(mChan->groupFlags(), ChannelGroupFlagCanAdd | ChannelGroupFlagCanRemove | ChannelGroupFlagProperties | ChannelGroupFlagMembersChangedDetailed); QCOMPARE(mChan->groupCanAddContacts(), true); QCOMPARE(mChan->groupCanAddContactsWithMessage(), false); QCOMPARE(mChan->groupCanAcceptContactsWithMessage(), false); QCOMPARE(mChan->groupCanRescindContacts(), false); QCOMPARE(mChan->groupCanRescindContactsWithMessage(), false); QCOMPARE(mChan->groupCanRemoveContacts(), true); QCOMPARE(mChan->groupCanRemoveContactsWithMessage(), false); QCOMPARE(mChan->groupCanRejectContactsWithMessage(), false); QCOMPARE(mChan->groupCanDepartWithMessage(), false); QCOMPARE(mChan->groupIsSelfContactTracked(), true); debugContacts(); QCOMPARE(mChan->groupContacts().count(), 4); QVERIFY(connect(mChan.data(), SIGNAL(groupMembersChanged( const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &, const Tp::Channel::GroupMemberChangeDetails &)), SLOT(onGroupMembersChanged( const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &, const Tp::Channel::GroupMemberChangeDetails &)))); QList toRemove; toRemove.append(mContacts[0]); connect(mChan->groupRemoveContacts(toRemove, QLatin1String("I want to remove some of them")), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *))); QCOMPARE(mLoop->exec(), 0); while (mChangedRemoved.isEmpty()) { QCOMPARE(mLoop->exec(), 0); } QVERIFY(mChangedRemoved.contains(mContacts[0])); QCOMPARE(mChan->groupContacts().count(), 3); } void TestChanGroup::testMCDGroup() { commonTest(true); } void TestChanGroup::testPropertylessGroup() { commonTest(false); } void TestChanGroup::commonTest(gboolean properties) { mChanObjectPath = QString(QLatin1String("%1/ChannelForTpQtMCDTest%2")) .arg(mConn->objectPath()) .arg(QLatin1String(properties ? "props" : "")); QByteArray chanPathLatin1(mChanObjectPath.toLatin1()); mChanService = TP_TESTS_TEXT_CHANNEL_GROUP(g_object_new( TP_TESTS_TYPE_TEXT_CHANNEL_GROUP, "connection", mConn->service(), "object-path", chanPathLatin1.data(), "detailed", TRUE, "properties", properties, NULL)); QVERIFY(mChanService != 0); TpIntSet *members = tp_intset_sized_new(mInitialMembers.length()); Q_FOREACH (uint handle, mInitialMembers) tp_intset_add(members, handle); QVERIFY(tp_group_mixin_change_members(G_OBJECT(mChanService), "be there or be []", members, NULL, NULL, NULL, 0, TP_CHANNEL_GROUP_CHANGE_REASON_NONE)); tp_intset_destroy(members); mChan = Channel::create(mConn->client(), mChanObjectPath, QVariantMap()); QVERIFY(mChan); QVERIFY(connect(mChan->becomeReady(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->isReady(), true); QCOMPARE(mChan->isRequested(), true); QVERIFY(mChan->groupContacts().contains(mContacts.first())); Q_FOREACH (ContactPtr contact, mChan->groupContacts()) mInitialMembers.push_back(contact->handle()[0]); QCOMPARE(mChan->groupCanAddContacts(), false); QCOMPARE(mChan->groupCanRemoveContacts(), false); debugContacts(); QCOMPARE(mChan->groupContacts().count(), 4); QVERIFY(connect(mChan.data(), SIGNAL(groupMembersChanged( const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &, const Tp::Channel::GroupMemberChangeDetails &)), SLOT(onGroupMembersChanged( const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &, const Tp::Channel::GroupMemberChangeDetails &)))); TpIntSet *remove = tp_intset_new_containing(mContacts[0]->handle()[0]); QVERIFY(tp_group_mixin_change_members(G_OBJECT(mChanService), "be a []", NULL, remove, NULL, NULL, 0, TP_CHANNEL_GROUP_CHANGE_REASON_NONE)); tp_intset_destroy(remove); while (mChangedRemoved.isEmpty()) { QCOMPARE(mLoop->exec(), 0); } QVERIFY(mChangedRemoved.contains(mContacts[0])); QCOMPARE(mChan->groupContacts().count(), 3); } void TestChanGroup::testLeave() { mChan = mConn->ensureChannel(TP_QT_IFACE_CHANNEL_TYPE_CONTACT_LIST, Tp::HandleTypeGroup, QLatin1String("Cambridge")); QVERIFY(mChan); mChanObjectPath = mChan->objectPath(); // channel is not ready yet, it should fail QVERIFY(connect(mChan->groupAddContacts(QList() << mConn->client()->selfContact()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mLastError, TP_QT_ERROR_NOT_AVAILABLE); QVERIFY(!mLastErrorMessage.isEmpty()); QVERIFY(connect(mChan->becomeReady(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->isReady(), true); // passing no contact should also fail QVERIFY(connect(mChan->groupAddContacts(QList()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mLastError, TP_QT_ERROR_INVALID_ARGUMENT); QVERIFY(!mLastErrorMessage.isEmpty()); // passing an invalid contact too QVERIFY(connect(mChan->groupAddContacts(QList() << ContactPtr()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mLastError, TP_QT_ERROR_INVALID_ARGUMENT); QVERIFY(!mLastErrorMessage.isEmpty()); // now it should work QVERIFY(connect(mChan->groupAddContacts(QList() << mConn->client()->selfContact()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(mChan->groupContacts().contains(mConn->client()->selfContact())); QString leaveMessage(QLatin1String("I'm sick of this lot")); QVERIFY(connect(mChan->requestLeave(leaveMessage), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(!mChan->groupContacts().contains(mConn->client()->selfContact())); // We left gracefully, which we have details for. // Unfortunately, the test CM used here ignores the message and the reason specified, so can't // verify those. When the leave code was originally written however, it was able to carry out // the almost-impossible mission of delivering the message and reason to the CM admirably, as // verified by dbus-monitor. QVERIFY(mChan->groupSelfContactRemoveInfo().isValid()); QVERIFY(mChan->groupSelfContactRemoveInfo().hasActor()); QVERIFY(mChan->groupSelfContactRemoveInfo().actor() == mConn->client()->selfContact()); // Another leave should no-op succeed, because we aren't a member QVERIFY(connect(mChan->requestLeave(leaveMessage), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); } void TestChanGroup::testLeaveWithFallback() { mChanObjectPath = QString(QLatin1String("%1/ChannelForTpQtLeaveTestFallback")) .arg(mConn->objectPath()); QByteArray chanPathLatin1(mChanObjectPath.toLatin1()); // The text channel doesn't support removing, so will trigger the fallback mChanService = TP_TESTS_TEXT_CHANNEL_GROUP(g_object_new( TP_TESTS_TYPE_TEXT_CHANNEL_GROUP, "connection", mConn->service(), "object-path", chanPathLatin1.data(), "detailed", TRUE, "properties", TRUE, NULL)); QVERIFY(mChanService != 0); TpIntSet *members = tp_intset_sized_new(1); tp_intset_add(members, mConn->client()->selfHandle()); QVERIFY(tp_group_mixin_change_members(G_OBJECT(mChanService), "be there or be []", members, NULL, NULL, NULL, 0, TP_CHANNEL_GROUP_CHANGE_REASON_NONE)); tp_intset_destroy(members); mChan = Channel::create(mConn->client(), mChanObjectPath, QVariantMap()); QVERIFY(mChan); // Should fail, because not ready (and thus we can't know how to leave) QVERIFY(connect(mChan->requestLeave(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mChan->becomeReady(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->isReady(), true); // Should now work QString leaveMessage(QLatin1String("I'm sick of this lot")); QVERIFY(connect(mChan->requestLeave(leaveMessage), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); // The Close fallback was triggered, so we weren't removed gracefully and the details were // lost QVERIFY(!mChan->groupSelfContactRemoveInfo().hasMessage()); } void TestChanGroup::testGroupFlagsChange() { TpHandleRepoIface *contactRepo = tp_base_connection_get_handles( TP_BASE_CONNECTION(mConn->service()), TP_HANDLE_TYPE_CONTACT); guint handle = tp_handle_ensure(contactRepo, "someone@localhost", 0, 0); QString textChanPath = mConn->objectPath() + QLatin1String("/Channel"); QByteArray chanPath(textChanPath.toAscii()); TpTestsPropsGroupTextChannel *textChanService = TP_TESTS_PROPS_GROUP_TEXT_CHANNEL(g_object_new( TP_TESTS_TYPE_PROPS_GROUP_TEXT_CHANNEL, "connection", mConn->service(), "object-path", chanPath.data(), "handle", handle, NULL)); TextChannelPtr textChan = TextChannel::create(mConn->client(), textChanPath, QVariantMap()); QVERIFY(connect(textChan->becomeReady(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(textChan->isReady(), true); QVERIFY(textChan->interfaces().contains(TP_QT_IFACE_CHANNEL_INTERFACE_GROUP)); QVERIFY(!(textChan->groupFlags() & ChannelGroupFlagCanAdd)); QVERIFY(!textChan->canInviteContacts()); QVERIFY(connect(textChan.data(), SIGNAL(groupFlagsChanged(Tp::ChannelGroupFlags,Tp::ChannelGroupFlags,Tp::ChannelGroupFlags)), SLOT(onGroupFlagsChanged(Tp::ChannelGroupFlags,Tp::ChannelGroupFlags,Tp::ChannelGroupFlags)))); tp_group_mixin_change_flags(G_OBJECT(textChanService), TP_CHANNEL_GROUP_FLAG_CAN_ADD, (TpChannelGroupFlags) 0); processDBusQueue(mConn->client().data()); while (!mGotGroupFlagsChanged) { mLoop->processEvents(); } QCOMPARE(textChan->groupFlags(), mGroupFlags); QVERIFY(textChan->groupFlags() & ChannelGroupFlagCanAdd); QVERIFY(textChan->canInviteContacts()); QCOMPARE(mGroupFlagsAdded, ChannelGroupFlagCanAdd); QCOMPARE(mGroupFlagsRemoved, (ChannelGroupFlags) 0); } void TestChanGroup::cleanup() { if (mChanService) { g_object_unref(mChanService); mChanService = 0; } // Avoid D-Bus event leak from one test case to another - I've seen this with the // testCreateChannel groupMembersChanged leaking at least processDBusQueue(mConn->client().data()); mChan.reset(); cleanupImpl(); } void TestChanGroup::cleanupTestCase() { QCOMPARE(mConn->disconnect(), true); delete mConn; cleanupTestCaseImpl(); } QTEST_MAIN(TestChanGroup) #include "_gen/chan-group.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/stream-tube-chan.cpp0000644000175200001440000010306612000056607024364 0ustar00collabora-develusers00000000000000#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace Tp; namespace { struct TestContext { bool withContact; TpSocketAddressType addressType; TpSocketAccessControl accessControl; }; // FIXME: Enable IPv6 and Port access control tests TestContext contexts[] = { { FALSE, TP_SOCKET_ADDRESS_TYPE_UNIX, TP_SOCKET_ACCESS_CONTROL_LOCALHOST }, { FALSE, TP_SOCKET_ADDRESS_TYPE_IPV4, TP_SOCKET_ACCESS_CONTROL_LOCALHOST }, //{ FALSE, TP_SOCKET_ADDRESS_TYPE_IPV6, TP_SOCKET_ACCESS_CONTROL_LOCALHOST }, { FALSE, TP_SOCKET_ADDRESS_TYPE_UNIX, TP_SOCKET_ACCESS_CONTROL_CREDENTIALS }, { FALSE, TP_SOCKET_ADDRESS_TYPE_IPV4, TP_SOCKET_ACCESS_CONTROL_PORT }, { TRUE, TP_SOCKET_ADDRESS_TYPE_UNIX, TP_SOCKET_ACCESS_CONTROL_LOCALHOST }, { TRUE, TP_SOCKET_ADDRESS_TYPE_IPV4, TP_SOCKET_ACCESS_CONTROL_LOCALHOST }, //{ TRUE, TP_SOCKET_ADDRESS_TYPE_IPV6, TP_SOCKET_ACCESS_CONTROL_LOCALHOST }, { TRUE, TP_SOCKET_ADDRESS_TYPE_UNIX, TP_SOCKET_ACCESS_CONTROL_CREDENTIALS }, { TRUE, TP_SOCKET_ADDRESS_TYPE_IPV4, TP_SOCKET_ACCESS_CONTROL_PORT }, { FALSE, (TpSocketAddressType) NUM_TP_SOCKET_ADDRESS_TYPES, (TpSocketAccessControl) NUM_TP_SOCKET_ACCESS_CONTROLS } }; void destroySocketControlList(gpointer data) { g_array_free((GArray *) data, TRUE); } GHashTable *createSupportedSocketTypesHash(TpSocketAddressType addressType, TpSocketAccessControl accessControl) { GHashTable *ret; GArray *tab; ret = g_hash_table_new_full(NULL, NULL, NULL, destroySocketControlList); tab = g_array_sized_new(FALSE, FALSE, sizeof(TpSocketAccessControl), 1); g_array_append_val(tab, accessControl); g_hash_table_insert(ret, GUINT_TO_POINTER(addressType), tab); return ret; } GSocket *createTcpClientGSocket(TpSocketAddressType socketType) { Q_ASSERT(socketType != TP_SOCKET_ADDRESS_TYPE_UNIX); GSocketFamily family = (GSocketFamily) 0; switch (socketType) { case TP_SOCKET_ADDRESS_TYPE_UNIX: family = G_SOCKET_FAMILY_UNIX; break; case TP_SOCKET_ADDRESS_TYPE_IPV4: family = G_SOCKET_FAMILY_IPV4; break; case TP_SOCKET_ADDRESS_TYPE_IPV6: family = G_SOCKET_FAMILY_IPV6; break; default: Q_ASSERT(false); } /* Create socket to connect to the CM */ GError *error = NULL; GSocket *clientSocket = g_socket_new(family, G_SOCKET_TYPE_STREAM, G_SOCKET_PROTOCOL_DEFAULT, &error); Q_ASSERT(clientSocket != NULL); if (socketType == TP_SOCKET_ADDRESS_TYPE_IPV4 || socketType == TP_SOCKET_ADDRESS_TYPE_IPV6) { /* Bind local address */ GSocketAddress *localAddress; GInetAddress *tmp; gboolean success; tmp = g_inet_address_new_loopback(family); localAddress = g_inet_socket_address_new(tmp, 0); success = g_socket_bind(clientSocket, localAddress, TRUE, &error); g_object_unref(tmp); g_object_unref(localAddress); Q_ASSERT(success); } return clientSocket; } } class TestStreamTubeChan : public Test { Q_OBJECT public: TestStreamTubeChan(QObject *parent = 0) : Test(parent), mConn(0), mChanService(0), mLocalConnectionId(-1), mRemoteConnectionId(-1), mGotLocalConnection(false), mGotRemoteConnection(false), mGotSocketConnection(false), mGotConnectionClosed(false), mOfferFinished(false), mRequiresCredentials(false), mCredentialByte(0) { } protected Q_SLOTS: void onNewLocalConnection(uint connectionId); void onNewRemoteConnection(uint connectionId); void onNewSocketConnection(); void onConnectionClosed(uint connectionId, const QString &errorName, const QString &errorMesssage); void onOfferFinished(Tp::PendingOperation *op); void expectPendingTubeConnectionFinished(Tp::PendingOperation *op); private Q_SLOTS: void initTestCase(); void init(); void testCreation(); void testAcceptTwice(); void testAcceptSuccess(); void testAcceptFail(); void testOfferSuccess(); void testOutgoingConnectionMonitoring(); void cleanup(); void cleanupTestCase(); private: void testCheckRemoteConnectionsCommon(); void createTubeChannel(bool requested, TpSocketAddressType addressType, TpSocketAccessControl accessControl, bool withContact); TestConnHelper *mConn; TpTestsStreamTubeChannel *mChanService; StreamTubeChannelPtr mChan; uint mCurrentContext; uint mLocalConnectionId; uint mRemoteConnectionId; bool mGotLocalConnection; bool mGotRemoteConnection; bool mGotSocketConnection; bool mGotConnectionClosed; bool mOfferFinished; bool mRequiresCredentials; uchar mCredentialByte; QHostAddress mExpectedAddress; uint mExpectedPort; uint mExpectedHandle; QString mExpectedId; }; void TestStreamTubeChan::onNewLocalConnection(uint connectionId) { qDebug() << "Got local connection with id:" << connectionId; mLocalConnectionId = connectionId; mGotLocalConnection = true; QVERIFY(mChan->connections().contains(connectionId)); mLoop->exit(0); } void TestStreamTubeChan::onNewRemoteConnection(uint connectionId) { qDebug() << "Got remote connection with id:" << connectionId; mRemoteConnectionId = connectionId; mGotRemoteConnection = true; QVERIFY(mChan->connections().contains(connectionId)); testCheckRemoteConnectionsCommon(); } void TestStreamTubeChan::onNewSocketConnection() { qDebug() << "Got new socket connection"; mGotSocketConnection = true; mLoop->exit(0); } void TestStreamTubeChan::onConnectionClosed(uint connectionId, const QString &errorName, const QString &errorMesssage) { qDebug() << "Got connetion closed for connection" << connectionId; mGotConnectionClosed = true; QVERIFY(!mChan->connections().contains(connectionId)); if (mChan->isRequested()) { testCheckRemoteConnectionsCommon(); } mLoop->exit(0); } void TestStreamTubeChan::onOfferFinished(Tp::PendingOperation *op) { TEST_VERIFY_OP(op); mOfferFinished = true; mLoop->exit(0); } void TestStreamTubeChan::expectPendingTubeConnectionFinished(PendingOperation *op) { TEST_VERIFY_OP(op); PendingStreamTubeConnection *pstc = qobject_cast(op); mRequiresCredentials = pstc->requiresCredentials(); mCredentialByte = pstc->credentialByte(); mLoop->exit(0); } void TestStreamTubeChan::createTubeChannel(bool requested, TpSocketAddressType addressType, TpSocketAccessControl accessControl, bool withContact) { mChan.reset(); mLoop->processEvents(); tp_clear_object(&mChanService); /* Create service-side tube channel object */ QString chanPath = QString(QLatin1String("%1/Channel")).arg(mConn->objectPath()); TpHandleRepoIface *contactRepo = tp_base_connection_get_handles( TP_BASE_CONNECTION(mConn->service()), TP_HANDLE_TYPE_CONTACT); TpHandleRepoIface *roomRepo = tp_base_connection_get_handles( TP_BASE_CONNECTION(mConn->service()), TP_HANDLE_TYPE_ROOM); TpHandle handle; GType type; if (withContact) { handle = tp_handle_ensure(contactRepo, "bob", NULL, NULL); type = TP_TESTS_TYPE_CONTACT_STREAM_TUBE_CHANNEL; } else { handle = tp_handle_ensure(roomRepo, "#test", NULL, NULL); type = TP_TESTS_TYPE_ROOM_STREAM_TUBE_CHANNEL; } TpHandle alfHandle = tp_handle_ensure(contactRepo, "alf", NULL, NULL); GHashTable *sockets = createSupportedSocketTypesHash(addressType, accessControl); mChanService = TP_TESTS_STREAM_TUBE_CHANNEL(g_object_new( type, "connection", mConn->service(), "handle", handle, "requested", requested, "object-path", chanPath.toLatin1().constData(), "supported-socket-types", sockets, "initiator-handle", alfHandle, NULL)); /* Create client-side tube channel object */ GHashTable *props; g_object_get(mChanService, "channel-properties", &props, NULL); if (requested) { mChan = OutgoingStreamTubeChannel::create(mConn->client(), chanPath, QVariantMap()); } else { mChan = IncomingStreamTubeChannel::create(mConn->client(), chanPath, QVariantMap()); } g_hash_table_unref(props); g_hash_table_unref(sockets); } void TestStreamTubeChan::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("stream-tube-chan"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); mConn = new TestConnHelper(this, TP_TESTS_TYPE_SIMPLE_CONNECTION, "account", "me@example.com", "protocol", "example", NULL); QCOMPARE(mConn->connect(), true); } void TestStreamTubeChan::init() { initImpl(); mCurrentContext = -1; mLocalConnectionId = -1; mRemoteConnectionId = -1; mGotLocalConnection = false; mGotRemoteConnection = false; mGotConnectionClosed = false; mGotSocketConnection = false; mOfferFinished = false; mRequiresCredentials = false; mCredentialByte = 0; mExpectedAddress = QHostAddress(); mExpectedPort = -1; mExpectedHandle = -1; mExpectedId = QString(); } void TestStreamTubeChan::testCheckRemoteConnectionsCommon() { OutgoingStreamTubeChannelPtr chan = OutgoingStreamTubeChannelPtr::qObjectCast(mChan); QVERIFY(chan); QCOMPARE(chan->contactsForConnections().isEmpty(), false); QCOMPARE(chan->contactsForConnections().contains(mRemoteConnectionId), true); QCOMPARE(chan->contactsForConnections().value(mRemoteConnectionId)->handle()[0], mExpectedHandle); QCOMPARE(chan->contactsForConnections().value(mRemoteConnectionId)->id(), mExpectedId); if (contexts[mCurrentContext].accessControl == TP_SOCKET_ACCESS_CONTROL_PORT) { // qDebug() << "+++ conn for source addresses" << chan->connectionsForSourceAddresses(); QCOMPARE(chan->connectionsForSourceAddresses().isEmpty(), false); QCOMPARE(chan->connectionsForCredentials().isEmpty(), true); QPair srcAddr(mExpectedAddress, mExpectedPort); QCOMPARE(chan->connectionsForSourceAddresses().contains(srcAddr), true); QCOMPARE(chan->connectionsForSourceAddresses().value(srcAddr), mRemoteConnectionId); } else if (contexts[mCurrentContext].accessControl == TP_SOCKET_ACCESS_CONTROL_CREDENTIALS) { // qDebug() << "+++ conn for credentials" << chan->connectionsForCredentials(); QCOMPARE(chan->connectionsForCredentials().isEmpty(), false); QCOMPARE(chan->connectionsForSourceAddresses().isEmpty(), true); QCOMPARE(chan->connectionsForCredentials().contains(mCredentialByte), true); QCOMPARE(chan->connectionsForCredentials().value(mCredentialByte), mRemoteConnectionId); } mLoop->exit(0); } void TestStreamTubeChan::testCreation() { /* Outgoing tube */ createTubeChannel(true, TP_SOCKET_ADDRESS_TYPE_UNIX, TP_SOCKET_ACCESS_CONTROL_LOCALHOST, true); QVERIFY(connect(mChan->becomeReady(OutgoingStreamTubeChannel::FeatureCore), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->isReady(OutgoingStreamTubeChannel::FeatureCore), true); QCOMPARE(mChan->isReady(StreamTubeChannel::FeatureConnectionMonitoring), false); QCOMPARE(mChan->state(), TubeChannelStateNotOffered); QCOMPARE(mChan->parameters().isEmpty(), true); QCOMPARE(mChan->service(), QLatin1String("test-service")); QCOMPARE(mChan->supportsIPv4SocketsOnLocalhost(), false); QCOMPARE(mChan->supportsIPv4SocketsWithSpecifiedAddress(), false); QCOMPARE(mChan->supportsIPv6SocketsOnLocalhost(), false); QCOMPARE(mChan->supportsIPv6SocketsWithSpecifiedAddress(), false); QCOMPARE(mChan->supportsUnixSocketsOnLocalhost(), true); QCOMPARE(mChan->supportsUnixSocketsWithCredentials(), false); QCOMPARE(mChan->supportsAbstractUnixSocketsOnLocalhost(), false); QCOMPARE(mChan->supportsAbstractUnixSocketsWithCredentials(), false); QCOMPARE(mChan->connections().isEmpty(), true); QCOMPARE(mChan->addressType(), SocketAddressTypeUnix); QCOMPARE(mChan->ipAddress().first.isNull(), true); QCOMPARE(mChan->localAddress(), QString()); /* incoming tube */ createTubeChannel(false, TP_SOCKET_ADDRESS_TYPE_UNIX, TP_SOCKET_ACCESS_CONTROL_LOCALHOST, false); QVERIFY(connect(mChan->becomeReady(IncomingStreamTubeChannel::FeatureCore), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->isReady(IncomingStreamTubeChannel::FeatureCore), true); QCOMPARE(mChan->isReady(StreamTubeChannel::FeatureConnectionMonitoring), false); QCOMPARE(mChan->state(), TubeChannelStateLocalPending); QCOMPARE(mChan->parameters().isEmpty(), false); QCOMPARE(mChan->parameters().size(), 1); QCOMPARE(mChan->parameters().contains(QLatin1String("badger")), true); QCOMPARE(mChan->parameters().value(QLatin1String("badger")), QVariant(42)); QCOMPARE(mChan->service(), QLatin1String("test-service")); QCOMPARE(mChan->supportsIPv4SocketsOnLocalhost(), false); QCOMPARE(mChan->supportsIPv4SocketsWithSpecifiedAddress(), false); QCOMPARE(mChan->supportsIPv6SocketsOnLocalhost(), false); QCOMPARE(mChan->supportsIPv6SocketsWithSpecifiedAddress(), false); QCOMPARE(mChan->supportsUnixSocketsOnLocalhost(), true); QCOMPARE(mChan->supportsUnixSocketsWithCredentials(), false); QCOMPARE(mChan->supportsAbstractUnixSocketsOnLocalhost(), false); QCOMPARE(mChan->supportsAbstractUnixSocketsWithCredentials(), false); QCOMPARE(mChan->connections().isEmpty(), true); QCOMPARE(mChan->addressType(), SocketAddressTypeUnix); QCOMPARE(mChan->ipAddress().first.isNull(), true); QCOMPARE(mChan->localAddress(), QString()); } void TestStreamTubeChan::testAcceptTwice() { /* incoming tube */ createTubeChannel(false, TP_SOCKET_ADDRESS_TYPE_UNIX, TP_SOCKET_ACCESS_CONTROL_LOCALHOST, false); QVERIFY(connect(mChan->becomeReady(IncomingStreamTubeChannel::FeatureCore | StreamTubeChannel::FeatureConnectionMonitoring), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->isReady(IncomingStreamTubeChannel::FeatureCore), true); QCOMPARE(mChan->isReady(StreamTubeChannel::FeatureConnectionMonitoring), true); QCOMPARE(mChan->state(), TubeChannelStateLocalPending); IncomingStreamTubeChannelPtr chan = IncomingStreamTubeChannelPtr::qObjectCast(mChan); QVERIFY(connect(chan->acceptTubeAsUnixSocket(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->state(), TubeChannelStateOpen); /* try to re-accept the tube */ QVERIFY(connect(chan->acceptTubeAsUnixSocket(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectFailure(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->state(), TubeChannelStateOpen); } void TestStreamTubeChan::testAcceptSuccess() { /* incoming tube */ for (int i = 0; contexts[i].addressType != NUM_TP_SOCKET_ADDRESS_TYPES; i++) { /* as we run several tests here, let's init/cleanup properly */ init(); qDebug() << "Testing context:" << i; mCurrentContext = i; createTubeChannel(false, contexts[i].addressType, contexts[i].accessControl, contexts[i].withContact); QVERIFY(connect(mChan->becomeReady(IncomingStreamTubeChannel::FeatureCore | StreamTubeChannel::FeatureConnectionMonitoring), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->isReady(IncomingStreamTubeChannel::FeatureCore), true); QCOMPARE(mChan->isReady(StreamTubeChannel::FeatureConnectionMonitoring), true); QCOMPARE(mChan->state(), TubeChannelStateLocalPending); mLocalConnectionId = -1; mGotLocalConnection = false; QVERIFY(connect(mChan.data(), SIGNAL(newConnection(uint)), SLOT(onNewLocalConnection(uint)))); bool requiresCredentials = ((contexts[i].accessControl == TP_SOCKET_ACCESS_CONTROL_CREDENTIALS) ? true : false); GSocket *gSocket = 0; QHostAddress addr; quint16 port = 0; IncomingStreamTubeChannelPtr chan = IncomingStreamTubeChannelPtr::qObjectCast(mChan); if (contexts[i].addressType == TP_SOCKET_ADDRESS_TYPE_UNIX) { QVERIFY(connect(chan->acceptTubeAsUnixSocket(requiresCredentials), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectPendingTubeConnectionFinished(Tp::PendingOperation *)))); } else { if (contexts[i].accessControl == TP_SOCKET_ACCESS_CONTROL_PORT) { gSocket = createTcpClientGSocket(contexts[i].addressType); // There is no way to bind a QTcpSocket and using // QAbstractSocket::setSocketDescriptor does not work either, so using glib sockets // for this test. See http://bugreports.qt.nokia.com/browse/QTBUG-121 GSocketAddress *localAddr; localAddr = g_socket_get_local_address(gSocket, NULL); QVERIFY(localAddr != NULL); addr = QHostAddress(QLatin1String(g_inet_address_to_string( g_inet_socket_address_get_address(G_INET_SOCKET_ADDRESS(localAddr))))); port = g_inet_socket_address_get_port(G_INET_SOCKET_ADDRESS(localAddr)); g_object_unref(localAddr); } else { addr = QHostAddress::Any; port = 0; } QVERIFY(connect(chan->acceptTubeAsTcpSocket(addr, port), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectPendingTubeConnectionFinished(Tp::PendingOperation *)))); } QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->state(), TubeChannelStateOpen); QCOMPARE(mRequiresCredentials, requiresCredentials); if (contexts[i].addressType == TP_SOCKET_ADDRESS_TYPE_UNIX) { qDebug() << "Connecting to host" << mChan->localAddress(); QLocalSocket *socket = new QLocalSocket(this); socket->connectToServer(mChan->localAddress()); if (requiresCredentials) { qDebug() << "Sending credential byte" << mCredentialByte; socket->write(reinterpret_cast(&mCredentialByte), 1); } QCOMPARE(mLoop->exec(), 0); QCOMPARE(mGotLocalConnection, true); qDebug() << "Connected to host"; delete socket; } else { qDebug().nospace() << "Connecting to host " << mChan->ipAddress().first << ":" << mChan->ipAddress().second; QTcpSocket *socket = 0; if (contexts[i].accessControl == TP_SOCKET_ACCESS_CONTROL_PORT) { GSocketAddress *remoteAddr = (GSocketAddress*) g_inet_socket_address_new( g_inet_address_new_from_string( mChan->ipAddress().first.toString().toLatin1().constData()), mChan->ipAddress().second); g_socket_connect(gSocket, remoteAddr, NULL, NULL); } else { socket = new QTcpSocket(); socket->connectToHost(mChan->ipAddress().first, mChan->ipAddress().second); } QCOMPARE(mLoop->exec(), 0); QCOMPARE(mGotLocalConnection, true); qDebug() << "Connected to host"; if (gSocket) { tp_clear_object(&gSocket); } delete socket; } mGotConnectionClosed = false; QVERIFY(connect(mChan.data(), SIGNAL(connectionClosed(uint,QString,QString)), SLOT(onConnectionClosed(uint,QString,QString)))); tp_tests_stream_tube_channel_last_connection_disconnected(mChanService, TP_ERROR_STR_DISCONNECTED); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mGotConnectionClosed, true); /* as we run several tests here, let's init/cleanup properly */ cleanup(); } } void TestStreamTubeChan::testAcceptFail() { /* incoming tube */ createTubeChannel(false, TP_SOCKET_ADDRESS_TYPE_UNIX, TP_SOCKET_ACCESS_CONTROL_LOCALHOST, false); QVERIFY(connect(mChan->becomeReady(IncomingStreamTubeChannel::FeatureCore | StreamTubeChannel::FeatureConnectionMonitoring), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->isReady(IncomingStreamTubeChannel::FeatureCore), true); QCOMPARE(mChan->isReady(StreamTubeChannel::FeatureConnectionMonitoring), true); QCOMPARE(mChan->state(), TubeChannelStateLocalPending); /* when accept is called the channel will be closed service side */ tp_tests_stream_tube_channel_set_close_on_accept (mChanService, TRUE); /* calling accept should fail */ IncomingStreamTubeChannelPtr chan = IncomingStreamTubeChannelPtr::qObjectCast(mChan); QVERIFY(connect(chan->acceptTubeAsUnixSocket(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectFailure(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->isValid(), false); /* trying to accept again should fail immediately */ QVERIFY(connect(chan->acceptTubeAsUnixSocket(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectFailure(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); } void TestStreamTubeChan::testOfferSuccess() { /* incoming tube */ for (int i = 0; contexts[i].addressType != NUM_TP_SOCKET_ADDRESS_TYPES; i++) { /* as we run several tests here, let's init/cleanup properly */ init(); qDebug() << "Testing context:" << i; mCurrentContext = i; createTubeChannel(true, contexts[i].addressType, contexts[i].accessControl, contexts[i].withContact); QVERIFY(connect(mChan->becomeReady(OutgoingStreamTubeChannel::FeatureCore | StreamTubeChannel::FeatureConnectionMonitoring), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->isReady(OutgoingStreamTubeChannel::FeatureCore), true); QCOMPARE(mChan->isReady(StreamTubeChannel::FeatureConnectionMonitoring), true); QCOMPARE(mChan->state(), TubeChannelStateNotOffered); QCOMPARE(mChan->parameters().isEmpty(), true); mRemoteConnectionId = -1; mGotRemoteConnection = false; QVERIFY(connect(mChan.data(), SIGNAL(newConnection(uint)), SLOT(onNewRemoteConnection(uint)))); bool requiresCredentials = ((contexts[i].accessControl == TP_SOCKET_ACCESS_CONTROL_CREDENTIALS) ? true : false); mExpectedAddress = QHostAddress(); mExpectedPort = -1; mExpectedHandle = -1; mExpectedId = QString(); mOfferFinished = false; mGotSocketConnection = false; QLocalServer *localServer = 0; QTcpServer *tcpServer = 0; OutgoingStreamTubeChannelPtr chan = OutgoingStreamTubeChannelPtr::qObjectCast(mChan); QVariantMap offerParameters; offerParameters.insert(QLatin1String("mushroom"), 44); if (contexts[i].addressType == TP_SOCKET_ADDRESS_TYPE_UNIX) { localServer = new QLocalServer(this); localServer->listen(QLatin1String(tmpnam(NULL))); connect(localServer, SIGNAL(newConnection()), SLOT(onNewSocketConnection())); QVERIFY(connect(chan->offerUnixSocket(localServer, offerParameters, requiresCredentials), SIGNAL(finished(Tp::PendingOperation *)), SLOT(onOfferFinished(Tp::PendingOperation *)))); } else { tcpServer = new QTcpServer(this); tcpServer->listen(QHostAddress::Any, 0); connect(tcpServer, SIGNAL(newConnection()), SLOT(onNewSocketConnection())); QVERIFY(connect(chan->offerTcpSocket(tcpServer, offerParameters), SIGNAL(finished(Tp::PendingOperation *)), SLOT(onOfferFinished(Tp::PendingOperation *)))); } while (mChan->state() != TubeChannelStateRemotePending) { mLoop->processEvents(); } QCOMPARE(mGotSocketConnection, false); // A client now connects to the tube QLocalSocket *localSocket = 0; QTcpSocket *tcpSocket = 0; if (contexts[i].addressType == TP_SOCKET_ADDRESS_TYPE_UNIX) { qDebug() << "Connecting to host" << localServer->fullServerName(); localSocket = new QLocalSocket(this); localSocket->connectToServer(localServer->fullServerName()); } else { qDebug().nospace() << "Connecting to host" << tcpServer->serverAddress() << ":" << tcpServer->serverPort(); tcpSocket = new QTcpSocket(this); tcpSocket->connectToHost(tcpServer->serverAddress(), tcpServer->serverPort()); } QCOMPARE(mGotSocketConnection, false); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mGotSocketConnection, true); if (tcpSocket) { mExpectedAddress = tcpSocket->localAddress(); mExpectedPort = tcpSocket->localPort(); } /* simulate CM when peer connects */ GValue *connParam = 0; mCredentialByte = 0; switch (contexts[i].accessControl) { case TP_SOCKET_ACCESS_CONTROL_LOCALHOST: connParam = tp_g_value_slice_new_static_string(""); break; case TP_SOCKET_ACCESS_CONTROL_CREDENTIALS: { mCredentialByte = g_random_int_range(0, G_MAXUINT8); localSocket->write(reinterpret_cast(&mCredentialByte), 1); connParam = tp_g_value_slice_new_byte(mCredentialByte); } break; case TP_SOCKET_ACCESS_CONTROL_PORT: { connParam = tp_g_value_slice_new_take_boxed( TP_STRUCT_TYPE_SOCKET_ADDRESS_IPV4, dbus_g_type_specialized_construct(TP_STRUCT_TYPE_SOCKET_ADDRESS_IPV4)); dbus_g_type_struct_set(connParam, 0, tcpSocket->localAddress().toString().toLatin1().constData(), 1, tcpSocket->localPort(), G_MAXUINT); } break; default: Q_ASSERT(false); } TpHandleRepoIface *contactRepo = tp_base_connection_get_handles( TP_BASE_CONNECTION(mConn->service()), TP_HANDLE_TYPE_CONTACT); TpHandle bobHandle = tp_handle_ensure(contactRepo, "bob", NULL, NULL); tp_tests_stream_tube_channel_peer_connected_no_stream(mChanService, connParam, bobHandle); tp_g_value_slice_free(connParam); mExpectedHandle = bobHandle; mExpectedId = QLatin1String("bob"); QCOMPARE(mChan->state(), TubeChannelStateRemotePending); while (!mOfferFinished) { QCOMPARE(mLoop->exec(), 0); } QCOMPARE(mChan->state(), TubeChannelStateOpen); QCOMPARE(mChan->parameters().isEmpty(), false); QCOMPARE(mChan->parameters().size(), 1); QCOMPARE(mChan->parameters().contains(QLatin1String("mushroom")), true); QCOMPARE(mChan->parameters().value(QLatin1String("mushroom")), QVariant(44)); if (!mGotRemoteConnection) { QCOMPARE(mLoop->exec(), 0); } QCOMPARE(mGotRemoteConnection, true); qDebug() << "Connected to host"; mGotConnectionClosed = false; QVERIFY(connect(mChan.data(), SIGNAL(connectionClosed(uint,QString,QString)), SLOT(onConnectionClosed(uint,QString,QString)))); tp_tests_stream_tube_channel_last_connection_disconnected(mChanService, TP_ERROR_STR_DISCONNECTED); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mGotConnectionClosed, true); /* let the internal OutgoingStreamTubeChannel::onConnectionClosed slot be called before * checking the data for that connection */ mLoop->processEvents(); QCOMPARE(chan->contactsForConnections().isEmpty(), true); QCOMPARE(chan->connectionsForSourceAddresses().isEmpty(), true); QCOMPARE(chan->connectionsForCredentials().isEmpty(), true); delete localServer; delete localSocket; delete tcpServer; delete tcpSocket; /* as we run several tests here, let's init/cleanup properly */ cleanup(); } } void TestStreamTubeChan::testOutgoingConnectionMonitoring() { mCurrentContext = 3; // should point to the room, IPv4, AC port one createTubeChannel(true, TP_SOCKET_ADDRESS_TYPE_IPV4, TP_SOCKET_ACCESS_CONTROL_PORT, false); QVERIFY(connect(mChan->becomeReady(OutgoingStreamTubeChannel::FeatureCore | StreamTubeChannel::FeatureConnectionMonitoring), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mChan.data(), SIGNAL(newConnection(uint)), SLOT(onNewRemoteConnection(uint)))); QVERIFY(connect(mChan.data(), SIGNAL(connectionClosed(uint,QString,QString)), SLOT(onConnectionClosed(uint,QString,QString)))); OutgoingStreamTubeChannelPtr chan = OutgoingStreamTubeChannelPtr::qObjectCast(mChan); QVERIFY(connect(chan->offerTcpSocket(QHostAddress(QHostAddress::LocalHost), 9), // DISCARD SIGNAL(finished(Tp::PendingOperation *)), SLOT(onOfferFinished(Tp::PendingOperation *)))); while (mChan->state() != TubeChannelStateRemotePending) { mLoop->processEvents(); } /* simulate CM when peer connects */ GValue *connParam = tp_g_value_slice_new_take_boxed( TP_STRUCT_TYPE_SOCKET_ADDRESS_IPV4, dbus_g_type_specialized_construct(TP_STRUCT_TYPE_SOCKET_ADDRESS_IPV4)); mExpectedAddress.setAddress(QLatin1String("127.0.0.1")); mExpectedPort = 12345; dbus_g_type_struct_set(connParam, 0, mExpectedAddress.toString().toLatin1().constData(), 1, static_cast(mExpectedPort), G_MAXUINT); // Simulate a peer connection from someone we don't have a prebuilt contact for yet, and // immediately drop it TpHandleRepoIface *contactRepo = tp_base_connection_get_handles( TP_BASE_CONNECTION(mConn->service()), TP_HANDLE_TYPE_CONTACT); TpHandle handle = tp_handle_ensure(contactRepo, "YouHaventSeenMeYet", NULL, NULL); mExpectedHandle = handle; mExpectedId = QLatin1String("youhaventseenmeyet"); tp_tests_stream_tube_channel_peer_connected_no_stream(mChanService, connParam, handle); tp_tests_stream_tube_channel_last_connection_disconnected(mChanService, TP_ERROR_STR_DISCONNECTED); tp_g_value_slice_free(connParam); // Test that we get newConnection first and only then connectionClosed, unlike how the code has // been for a long time, queueing newConnection events and emitting connectionClosed directly while (!mOfferFinished || !mGotRemoteConnection) { QVERIFY(!mGotConnectionClosed || !mOfferFinished); QCOMPARE(mLoop->exec(), 0); } QCOMPARE(mChan->connections().size(), 1); // The connectionClosed emission should finally exit the main loop QCOMPARE(mLoop->exec(), 0); QVERIFY(mGotConnectionClosed); QCOMPARE(mChan->connections().size(), 0); } void TestStreamTubeChan::cleanup() { cleanupImpl(); if (mChan && mChan->isValid()) { qDebug() << "waiting for the channel to become invalidated"; QVERIFY(connect(mChan.data(), SIGNAL(invalidated(Tp::DBusProxy*,QString,QString)), mLoop, SLOT(quit()))); tp_base_channel_close(TP_BASE_CHANNEL(mChanService)); QCOMPARE(mLoop->exec(), 0); } mChan.reset(); if (mChanService != 0) { g_object_unref(mChanService); mChanService = 0; } mLoop->processEvents(); } void TestStreamTubeChan::cleanupTestCase() { QCOMPARE(mConn->disconnect(), true); delete mConn; cleanupTestCaseImpl(); } QTEST_MAIN(TestStreamTubeChan) #include "_gen/stream-tube-chan.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/account-connection-factory.cpp0000644000175200001440000003332212000056607026460 0ustar00collabora-develusers00000000000000#include #include #include #include #include #include #include #include #include using namespace Tp; using namespace Tp::Client; // A really minimal Account implementation, totally not spec compliant outside the parts stressed by // this test class AccountAdaptor : public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.freedesktop.Telepathy.Account") Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" " \n" " \n" " \n" " \n" "") Q_PROPERTY(QDBusObjectPath Connection READ Connection) Q_PROPERTY(QStringList Interfaces READ Interfaces) public: AccountAdaptor(QObject *parent) : QDBusAbstractAdaptor(parent), mConnection(QLatin1String("/")) { } virtual ~AccountAdaptor() { } void setConnection(QString conn) { if (conn.isEmpty()) { conn = QLatin1String("/"); } mConnection = QDBusObjectPath(conn); QVariantMap props; props.insert(QLatin1String("Connection"), QVariant::fromValue(mConnection)); Q_EMIT AccountPropertyChanged(props); } public: // Properties inline QDBusObjectPath Connection() const { return mConnection; } inline QStringList Interfaces() const { return QStringList(); } Q_SIGNALS: // Signals void AccountPropertyChanged(const QVariantMap &properties); private: QDBusObjectPath mConnection; }; class TestAccountConnectionFactory : public Test { Q_OBJECT public: TestAccountConnectionFactory(QObject *parent = 0) : Test(parent), mConn1(0), mConn2(0), mDispatcher(0), mAccountAdaptor(0), mReceivedHaveConnection(0), mReceivedConn(0) { } protected Q_SLOTS: void onConnectionChanged(const Tp::ConnectionPtr &conn); void expectPropertyChange(const QString &property); private Q_SLOTS: void initTestCase(); void init(); void testIntrospectSeveralAccounts(); void testCreateAndIntrospect(); void testDefaultFactoryInitialConn(); void testReadifyingFactoryInitialConn(); void testSwitch(); void testQueuedSwitch(); void cleanup(); void cleanupTestCase(); private: TestConnHelper *mConn1, *mConn2; QObject *mDispatcher; QString mAccountBusName, mAccountPath; AccountAdaptor *mAccountAdaptor; AccountPtr mAccount; bool *mReceivedHaveConnection; QString *mReceivedConn; QStringList mReceivedConns; }; void TestAccountConnectionFactory::onConnectionChanged(const Tp::ConnectionPtr &conn) { qDebug() << "have connection:" << !conn.isNull(); if (mReceivedHaveConnection) { delete mReceivedHaveConnection; } mReceivedHaveConnection = new bool(!conn.isNull()); } void TestAccountConnectionFactory::expectPropertyChange(const QString &property) { if (property != QLatin1String("connection")) { // Not interesting return; } ConnectionPtr conn = mAccount->connection(); qDebug() << "connection changed:" << (conn ? conn->objectPath() : QLatin1String("none")); if (conn) { QCOMPARE(conn->objectPath(), conn->objectPath()); } if (mReceivedConn) { delete mReceivedConn; } mReceivedConn = new QString(conn ? conn->objectPath() : QLatin1String("")); mReceivedConns.push_back(conn ? conn->objectPath() : QLatin1String("")); } void TestAccountConnectionFactory::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("account-connection-factory"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); mConn1 = new TestConnHelper(this, TP_TESTS_TYPE_CONTACTS_CONNECTION, "account", "me@example.com", "protocol", "simple", NULL); QCOMPARE(mConn1->isReady(), false); mConn2 = new TestConnHelper(this, TP_TESTS_TYPE_CONTACTS_CONNECTION, "account", "me2@example.com", "protocol", "simple", NULL); QCOMPARE(mConn2->isReady(), false); mAccountBusName = TP_QT_IFACE_ACCOUNT_MANAGER; mAccountPath = QLatin1String("/org/freedesktop/Telepathy/Account/simple/simple/account"); } void TestAccountConnectionFactory::init() { initImpl(); mDispatcher = new QObject(this); mAccountAdaptor = new AccountAdaptor(mDispatcher); QDBusConnection bus = QDBusConnection::sessionBus(); QVERIFY(bus.registerService(mAccountBusName)); QVERIFY(bus.registerObject(mAccountPath, mDispatcher)); } // If this test fails, probably the code which tries to introspect the CD just once and then // continue with Account introspection has a bug void TestAccountConnectionFactory::testIntrospectSeveralAccounts() { QList ops; for (int i = 0; i < 10; i++) { AccountPtr acc = Account::create(mAccountBusName, mAccountPath); // This'll get the CD introspected in the middle (but won't finish any of the pending ops, // as they'll only finish in a singleShot in the next iter) // // One iteration to get readinessHelper to start introspecting, // the second to download the CD property // the third to get PendingVariant to actually emit the finished signal for it if (i == 5) { mLoop->processEvents(); mLoop->processEvents(); mLoop->processEvents(); } ops.push_back(acc->becomeReady()); } QVERIFY(connect(new PendingComposite(ops, SharedPtr()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); } // If this test fails, probably the mini-Account implements too little for the Account proxy to work // OR the Account proxy is completely broken :) void TestAccountConnectionFactory::testCreateAndIntrospect() { mAccount = Account::create(mAccountBusName, mAccountPath); QVERIFY(connect(mAccount->becomeReady(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); } void TestAccountConnectionFactory::testDefaultFactoryInitialConn() { mAccountAdaptor->setConnection(mConn1->objectPath()); mAccount = Account::create(mAccountBusName, mAccountPath); QVERIFY(connect(mAccount->becomeReady(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mAccount->connection()->objectPath(), mConn1->objectPath()); QVERIFY(!mAccount->connection().isNull()); QCOMPARE(mAccount->connectionFactory()->features(), Features()); } void TestAccountConnectionFactory::testReadifyingFactoryInitialConn() { mAccountAdaptor->setConnection(mConn1->objectPath()); mAccount = Account::create(mAccountBusName, mAccountPath, ConnectionFactory::create(QDBusConnection::sessionBus(), Connection::FeatureCore), ChannelFactory::create(QDBusConnection::sessionBus())); QVERIFY(connect(mAccount->becomeReady(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mAccount->connection()->objectPath(), mConn1->objectPath()); ConnectionPtr conn = mAccount->connection(); QVERIFY(!conn.isNull()); QVERIFY(conn->isReady(Connection::FeatureCore)); QCOMPARE(mAccount->connectionFactory()->features(), Features(Connection::FeatureCore)); } void TestAccountConnectionFactory::testSwitch() { mAccount = Account::create(mAccountBusName, mAccountPath, ConnectionFactory::create(QDBusConnection::sessionBus(), Connection::FeatureCore), ChannelFactory::create(QDBusConnection::sessionBus())); QVERIFY(connect(mAccount->becomeReady(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(mAccount->connection().isNull()); QVERIFY(connect(mAccount.data(), SIGNAL(connectionChanged(const Tp::ConnectionPtr &)), SLOT(onConnectionChanged(const Tp::ConnectionPtr &)))); QVERIFY(connect(mAccount.data(), SIGNAL(propertyChanged(QString)), SLOT(expectPropertyChange(QString)))); // Switch from none to conn 1 mAccountAdaptor->setConnection(mConn1->objectPath()); while (!mReceivedHaveConnection || !mReceivedConn) { mLoop->processEvents(); } QCOMPARE(*mReceivedHaveConnection, true); QCOMPARE(*mReceivedConn, mConn1->objectPath()); delete mReceivedHaveConnection; mReceivedHaveConnection = 0; delete mReceivedConn; mReceivedConn = 0; QCOMPARE(mAccount->connection()->objectPath(), mConn1->objectPath()); QVERIFY(!mAccount->connection().isNull()); ConnectionPtr conn = mAccount->connection(); QVERIFY(!conn.isNull()); QCOMPARE(conn->objectPath(), mConn1->objectPath()); QVERIFY(conn->isReady(Connection::FeatureCore)); // Switch from conn 1 to conn 2 mAccountAdaptor->setConnection(mConn2->objectPath()); while (!mReceivedConn) { mLoop->processEvents(); } QCOMPARE(*mReceivedConn, mConn2->objectPath()); delete mReceivedConn; mReceivedConn = 0; // connectionChanged() should have been emitted as it is a new connection QVERIFY(mReceivedHaveConnection); QVERIFY(!mAccount->connection().isNull()); QCOMPARE(mAccount->connection()->objectPath(), mConn2->objectPath()); conn = mAccount->connection(); QVERIFY(!conn.isNull()); QCOMPARE(conn->objectPath(), mConn2->objectPath()); QVERIFY(conn->isReady(Connection::FeatureCore)); // Switch from conn 2 to none mAccountAdaptor->setConnection(QString()); while (!mReceivedHaveConnection || !mReceivedConn) { mLoop->processEvents(); } QCOMPARE(*mReceivedConn, QString()); QCOMPARE(*mReceivedHaveConnection, false); QVERIFY(mAccount->connection().isNull()); } void TestAccountConnectionFactory::testQueuedSwitch() { mAccount = Account::create(mAccountBusName, mAccountPath, ConnectionFactory::create(QDBusConnection::sessionBus(), Connection::FeatureCore), ChannelFactory::create(QDBusConnection::sessionBus())); QVERIFY(connect(mAccount->becomeReady(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(mAccount->connection().isNull()); QVERIFY(connect(mAccount.data(), SIGNAL(propertyChanged(QString)), SLOT(expectPropertyChange(QString)))); // Switch a few times but don't give the proxy update machinery time to run mAccountAdaptor->setConnection(mConn1->objectPath()); mAccountAdaptor->setConnection(QString()); mAccountAdaptor->setConnection(mConn2->objectPath()); mAccountAdaptor->setConnection(QString()); mAccountAdaptor->setConnection(QString()); mAccountAdaptor->setConnection(QString()); mAccountAdaptor->setConnection(mConn2->objectPath()); mAccountAdaptor->setConnection(QString()); mAccountAdaptor->setConnection(mConn2->objectPath()); mAccountAdaptor->setConnection(mConn2->objectPath()); mAccountAdaptor->setConnection(mConn1->objectPath()); // We should get a total of 8 changes because some of them aren't actually any different while (mReceivedConns.size() < 8) { mLoop->processEvents(); } // To ensure it didn't go over, which might be possible if it handled two events in one iter QCOMPARE(mReceivedConns.size(), 8); // Ensure we got them in the correct order QCOMPARE(mReceivedConns, QStringList() << mConn1->objectPath() << QString() << mConn2->objectPath() << QString() << mConn2->objectPath() << QString() << mConn2->objectPath() << mConn1->objectPath()); // Check that the final state is correct QCOMPARE(mAccount->connection()->objectPath(), mConn1->objectPath()); QVERIFY(!mAccount->connection().isNull()); } void TestAccountConnectionFactory::cleanup() { mAccount.reset(); if (mReceivedHaveConnection) { delete mReceivedHaveConnection; mReceivedHaveConnection = 0; } if (mReceivedConn) { delete mReceivedConn; mReceivedConn = 0; } if (mAccountAdaptor) { delete mAccountAdaptor; mAccountAdaptor = 0; } if (mDispatcher) { delete mDispatcher; mDispatcher = 0; } mReceivedConns.clear(); cleanupImpl(); } void TestAccountConnectionFactory::cleanupTestCase() { if (mConn1) { QCOMPARE(mConn1->disconnect(), true); delete mConn1; } if (mConn2) { QCOMPARE(mConn2->disconnect(), true); delete mConn2; } cleanupTestCaseImpl(); } QTEST_MAIN(TestAccountConnectionFactory) #include "_gen/account-connection-factory.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/chan-basics.cpp0000644000175200001440000002274412000056607023403 0ustar00collabora-develusers00000000000000#include #include #include #include #define TP_QT_ENABLE_LOWLEVEL_API #include #include #include #include #include #include #include #include #include #include #include using namespace Tp; class TestChanBasics : public Test { Q_OBJECT public: TestChanBasics(QObject *parent = 0) : Test(parent), mConn(0), mHandle(0) { } protected Q_SLOTS: void expectInvalidated(); void expectPendingHandleFinished(Tp::PendingOperation *); private Q_SLOTS: void initTestCase(); void init(); void testRequestHandle(); void testCreateChannel(); void testEnsureChannel(); void testFallback(); void cleanup(); void cleanupTestCase(); private: TestConnHelper *mConn; ChannelPtr mChan; QString mChanObjectPath; uint mHandle; }; void TestChanBasics::expectInvalidated() { mLoop->exit(0); } void TestChanBasics::expectPendingHandleFinished(PendingOperation *op) { TEST_VERIFY_OP(op); PendingHandles *pending = qobject_cast(op); mHandle = pending->handles().at(0); mLoop->exit(0); } void TestChanBasics::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("chan-basics"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); mConn = new TestConnHelper(this, EXAMPLE_TYPE_ECHO_2_CONNECTION, "account", "me@example.com", "protocol", "contacts", NULL); QCOMPARE(mConn->connect(), true); QCOMPARE(mConn->enableFeatures(Connection::FeatureSelfContact), true); } void TestChanBasics::init() { initImpl(); mChan.reset(); } void TestChanBasics::testRequestHandle() { // Test identifiers QStringList ids = QStringList() << QLatin1String("alice"); // Request handles for the identifiers and wait for the request to process PendingHandles *pending = mConn->client()->lowlevel()->requestHandles(Tp::HandleTypeContact, ids); QVERIFY(connect(pending, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectPendingHandleFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(disconnect(pending, SIGNAL(finished(Tp::PendingOperation*)), this, SLOT(expectPendingHandleFinished(Tp::PendingOperation*)))); QVERIFY(mHandle != 0); } void TestChanBasics::testCreateChannel() { mChan = mConn->createChannel(TP_QT_IFACE_CHANNEL_TYPE_TEXT, Tp::HandleTypeContact, mHandle); QVERIFY(mChan); mChanObjectPath = mChan->objectPath(); QVERIFY(connect(mChan->becomeReady(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->isReady(), true); QCOMPARE(mChan->isRequested(), true); QCOMPARE(mChan->channelType(), TP_QT_IFACE_CHANNEL_TYPE_TEXT); QCOMPARE(mChan->groupCanAddContacts(), false); QCOMPARE(mChan->groupCanRemoveContacts(), false); QCOMPARE(mChan->initiatorContact()->id(), QString(QLatin1String("me@example.com"))); QCOMPARE(mChan->groupSelfContact()->id(), QString(QLatin1String("me@example.com"))); QCOMPARE(mChan->groupSelfContact(), mConn->client()->selfContact()); QCOMPARE(mChan->targetId(), QString::fromLatin1("alice")); QVERIFY(!mChan->targetContact().isNull()); QCOMPARE(mChan->targetContact()->id(), QString::fromLatin1("alice")); QStringList ids; Q_FOREACH (const ContactPtr &contact, mChan->groupContacts()) { ids << contact->id(); QVERIFY(contact == mChan->groupSelfContact() || contact == mChan->targetContact()); } ids.sort(); QStringList toCheck = QStringList() << QLatin1String("me@example.com") << QLatin1String("alice"); toCheck.sort(); QCOMPARE(ids, toCheck); ChannelPtr chan = Channel::create(mConn->client(), mChan->objectPath(), mChan->immutableProperties()); QVERIFY(chan); QVERIFY(chan->isValid()); QVERIFY(connect(chan->becomeReady(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(chan->isReady(), true); QCOMPARE(chan->channelType(), TP_QT_IFACE_CHANNEL_TYPE_TEXT); // create an invalid connection to use as the channel connection ConnectionPtr conn = Connection::create(QLatin1String(""), QLatin1String("/"), ChannelFactory::create(QDBusConnection::sessionBus()), ContactFactory::create()); QVERIFY(conn); QVERIFY(!conn->isValid()); chan = Channel::create(conn, mChan->objectPath(), mChan->immutableProperties()); QVERIFY(chan); QVERIFY(!chan->isValid()); QVERIFY(connect(chan->becomeReady(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mLastError, chan->invalidationReason()); QCOMPARE(mLastErrorMessage, chan->invalidationMessage()); QCOMPARE(chan->channelType(), QString()); } void TestChanBasics::testEnsureChannel() { ChannelPtr chan = mConn->ensureChannel(TP_QT_IFACE_CHANNEL_TYPE_TEXT, Tp::HandleTypeContact, mHandle); QVERIFY(chan); QCOMPARE(chan->objectPath(), mChanObjectPath); mChan = chan; QVERIFY(connect(mChan->becomeReady(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->isReady(), true); QCOMPARE(mChan->isRequested(), true); QCOMPARE(mChan->groupCanAddContacts(), false); QCOMPARE(mChan->groupCanRemoveContacts(), false); QCOMPARE(mChan->initiatorContact()->id(), QString(QLatin1String("me@example.com"))); QCOMPARE(mChan->groupSelfContact()->id(), QString(QLatin1String("me@example.com"))); QCOMPARE(mChan->groupSelfContact(), mConn->client()->selfContact()); QStringList ids; Q_FOREACH (const ContactPtr &contact, mChan->groupContacts()) { ids << contact->id(); } ids.sort(); QStringList toCheck = QStringList() << QLatin1String("me@example.com") << QLatin1String("alice"); toCheck.sort(); QCOMPARE(ids, toCheck); QVERIFY(connect(mChan->requestClose(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->isValid(), false); // calling requestClose again should be no-op QVERIFY(connect(mChan->requestClose(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->isValid(), false); } void TestChanBasics::testFallback() { TpHandleRepoIface *contactRepo = tp_base_connection_get_handles( TP_BASE_CONNECTION(mConn->service()), TP_HANDLE_TYPE_CONTACT); guint handle = tp_handle_ensure(contactRepo, "someone@localhost", 0, 0); QString textChanPath = mConn->objectPath() + QLatin1String("/Channel"); QByteArray chanPath(textChanPath.toAscii()); TpTestsTextChannelNull *textChanService = TP_TESTS_TEXT_CHANNEL_NULL (g_object_new ( TP_TESTS_TYPE_TEXT_CHANNEL_NULL, "connection", mConn->service(), "object-path", chanPath.data(), "handle", handle, NULL)); TextChannelPtr textChan = TextChannel::create(mConn->client(), textChanPath, QVariantMap()); QVERIFY(connect(textChan->becomeReady(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(textChan->isReady(), true); QCOMPARE(textChanService->get_channel_type_called, static_cast(1)); QCOMPARE(textChanService->get_interfaces_called, static_cast(1)); QCOMPARE(textChanService->get_handle_called, static_cast(1)); QCOMPARE(textChan->channelType(), TP_QT_IFACE_CHANNEL_TYPE_TEXT); QVERIFY(textChan->interfaces().isEmpty()); QCOMPARE(textChan->targetHandleType(), Tp::HandleTypeContact); QCOMPARE(textChan->targetHandle(), handle); // we have no Group support, groupAddContacts should fail QVERIFY(connect(textChan->groupAddContacts(QList() << mConn->client()->selfContact()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mLastError, TP_QT_ERROR_NOT_IMPLEMENTED); QVERIFY(!mLastErrorMessage.isEmpty()); } void TestChanBasics::cleanup() { cleanupImpl(); } void TestChanBasics::cleanupTestCase() { QCOMPARE(mConn->disconnect(), true); delete mConn; if (mChan) { QVERIFY(!mChan->isValid()); QVERIFY(mChan->invalidationReason() == TP_QT_ERROR_CANCELLED || mChan->invalidationReason() == TP_QT_ERROR_ORPHANED); } cleanupTestCaseImpl(); } QTEST_MAIN(TestChanBasics) #include "_gen/chan-basics.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/conn-roster.cpp0000644000175200001440000004511312000056607023474 0ustar00collabora-develusers00000000000000#include #include #include #include #include #include #include #include #include #include using namespace Tp; class TestConnRoster : public Test { Q_OBJECT public: TestConnRoster(QObject *parent = 0) : Test(parent), mConn(0), mBlockingContactsFinished(false), mHowManyKnownContacts(0), mGotPresenceStateChanged(false), mGotPPR(false) { } protected Q_SLOTS: void expectBlockingContactsFinished(Tp::PendingOperation *op); void expectBlockStatusChanged(bool blocked); void expectBlockedContactsChanged(const Tp::Contacts &added, const Tp::Contacts &removed, const Tp::Channel::GroupMemberChangeDetails &details); void expectPresencePublicationRequested(const Tp::Contacts &); void expectPresenceStateChanged(Tp::Contact::PresenceState); void expectAllKnownContactsChanged(const Tp::Contacts &added, const Tp::Contacts &removed, const Tp::Channel::GroupMemberChangeDetails &details); private Q_SLOTS: void initTestCase(); void init(); void testRoster(); void cleanup(); void cleanupTestCase(); private: TestConnHelper *mConn; QSet mContactsExpectingBlockStatusChange; bool mBlockingContactsFinished; int mHowManyKnownContacts; bool mGotPresenceStateChanged; bool mGotPPR; }; void TestConnRoster::expectBlockingContactsFinished(Tp::PendingOperation *op) { TEST_VERIFY_OP(op); qDebug() << "blocking contacts finished"; mBlockingContactsFinished = true; if (mContactsExpectingBlockStatusChange.isEmpty()) { mLoop->exit(0); } } void TestConnRoster::expectBlockStatusChanged(bool blocked) { Q_UNUSED(blocked); Contact *c = qobject_cast(sender()); QVERIFY(c); ContactPtr contact(c); mContactsExpectingBlockStatusChange.remove(contact->id()); if (mContactsExpectingBlockStatusChange.isEmpty() && mBlockingContactsFinished) { mLoop->exit(0); } } // This connects to allKnownContactsChanged() but it is only used in the last contact blocking test void TestConnRoster::expectBlockedContactsChanged(const Tp::Contacts &added, const Tp::Contacts &removed, const Tp::Channel::GroupMemberChangeDetails &details) { Q_UNUSED(details); Q_FOREACH(const ContactPtr &contact, added) { mContactsExpectingBlockStatusChange.remove(contact->id()); } Q_FOREACH(const ContactPtr &contact, removed) { mContactsExpectingBlockStatusChange.remove(contact->id()); } if (mContactsExpectingBlockStatusChange.isEmpty() && mBlockingContactsFinished) { mLoop->exit(0); } } void TestConnRoster::expectAllKnownContactsChanged(const Tp::Contacts& added, const Tp::Contacts& removed, const Tp::Channel::GroupMemberChangeDetails &details) { qDebug() << added.size() << " contacts added, " << removed.size() << " contacts removed"; mHowManyKnownContacts += added.size(); mHowManyKnownContacts -= removed.size(); if (details.hasMessage()) { QCOMPARE(details.message(), QLatin1String("add me now")); } if (mConn->client()->contactManager()->allKnownContacts().size() != mHowManyKnownContacts) { qWarning() << "Contacts number mismatch! Watched value: " << mHowManyKnownContacts << "allKnownContacts(): " << mConn->client()->contactManager()->allKnownContacts().size(); mLoop->exit(1); } else { mLoop->exit(0); } } void TestConnRoster::expectPresencePublicationRequested(const Tp::Contacts &contacts) { Q_FOREACH(Tp::ContactPtr contact, contacts) { QCOMPARE(static_cast(contact->publishState()), static_cast(Contact::PresenceStateAsk)); } mGotPPR = true; } void TestConnRoster::expectPresenceStateChanged(Contact::PresenceState state) { mGotPresenceStateChanged = true; } void TestConnRoster::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("conn-roster"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); mConn = new TestConnHelper(this, ChannelFactory::create(QDBusConnection::sessionBus()), ContactFactory::create(Contact::FeatureAlias), EXAMPLE_TYPE_CONTACT_LIST_CONNECTION, "account", "me@example.com", "protocol", "contactlist", "simulation-delay", 1, NULL); QCOMPARE(mConn->connect(), true); } void TestConnRoster::init() { initImpl(); } void TestConnRoster::testRoster() { Features features = Features() << Connection::FeatureRoster; QCOMPARE(mConn->enableFeatures(features), true); ContactManagerPtr contactManager = mConn->client()->contactManager(); QCOMPARE(contactManager->state(), ContactListStateSuccess); QStringList toCheck = QStringList() << QLatin1String("sjoerd@example.com") << QLatin1String("travis@example.com") << QLatin1String("wim@example.com") << QLatin1String("olivier@example.com") << QLatin1String("helen@example.com") << QLatin1String("geraldine@example.com") << QLatin1String("guillaume@example.com") << QLatin1String("christian@example.com") << QLatin1String("bill@example.com") << QLatin1String("steve@example.com"); QStringList ids; QList pendingSubscription; QList pendingPublish; Q_FOREACH (const ContactPtr &contact, contactManager->allKnownContacts()) { QVERIFY(contact->requestedFeatures().contains(Contact::FeatureAlias)); qDebug() << " contact:" << contact->id() << "- subscription:" << contact->subscriptionState() << "- publish:" << contact->publishState(); ids << contact->id(); if (contact->subscriptionState() == Contact::PresenceStateAsk) { pendingSubscription.append(contact); } else if (contact->publishState() == Contact::PresenceStateAsk) { pendingPublish.append(contact); } } ids.sort(); toCheck.sort(); QCOMPARE(ids, toCheck); QCOMPARE(pendingSubscription.size(), 2); QCOMPARE(pendingPublish.size(), 2); // Wait for the contacts to be built ids = QStringList() << QString(QLatin1String("john@example.com")) << QString(QLatin1String("mary@example.com")); QList contacts = mConn->contacts(ids); QCOMPARE(contacts.size(), ids.size()); QVERIFY(connect(contactManager.data(), SIGNAL(presencePublicationRequested(Tp::Contacts)), SLOT(expectPresencePublicationRequested(Tp::Contacts)))); int i = 0; Q_FOREACH (const ContactPtr &contact, contacts) { mGotPresenceStateChanged = false; mGotPPR = false; QVERIFY(connect(contact.data(), SIGNAL(subscriptionStateChanged(Tp::Contact::PresenceState)), SLOT(expectPresenceStateChanged(Tp::Contact::PresenceState)))); QVERIFY(connect(contact.data(), SIGNAL(publishStateChanged(Tp::Contact::PresenceState, QString)), SLOT(expectPresenceStateChanged(Tp::Contact::PresenceState)))); if ((i % 2) == 0) { contact->requestPresenceSubscription(QLatin1String("please add me")); } else { contact->requestPresenceSubscription(QLatin1String("add me now")); } while (!mGotPresenceStateChanged && !mGotPPR) { mLoop->processEvents(); } if ((i % 2) == 0) { // I asked to see his presence - he might have already accepted it, though QVERIFY(contact->subscriptionState() == Contact::PresenceStateAsk || contact->subscriptionState() == Contact::PresenceStateYes); // if he accepted it already, one iteration won't be enough as the // first iteration will just flush the subscription -> Yes event while (contact->publishState() != Contact::PresenceStateAsk) { mLoop->processEvents(); } contact->authorizePresencePublication(); while (contact->publishState() != Contact::PresenceStateYes) { mLoop->processEvents(); } // I authorized him to see my presence QCOMPARE(static_cast(contact->publishState()), static_cast(Contact::PresenceStateYes)); // He replied the presence request QCOMPARE(static_cast(contact->subscriptionState()), static_cast(Contact::PresenceStateYes)); contact->removePresenceSubscription(); while (contact->subscriptionState() != Contact::PresenceStateNo) { mLoop->processEvents(); } } else { // I asked to see her presence - she might have already rejected it, though QVERIFY(contact->subscriptionState() == Contact::PresenceStateAsk || contact->subscriptionState() == Contact::PresenceStateNo); // If she didn't already reject it, wait until she does while (contact->subscriptionState() != Contact::PresenceStateNo) { mLoop->processEvents(); } } ++i; // Disconnect the signals so the contacts doing something won't early-exit future mainloop // iterations (the simulation CM does things like - after a delay since we removed them, try // to re-add us - and such, which mess up the test if the simulated network event happens // before we've finished with the next contact) QVERIFY(contact->disconnect(this)); // TODO: The roster API, frankly speaking, seems rather error/race prone, as evidenced by // this test. Should we perhaps change its semantics? Then again, this test also simulates // the remote user accepting/rejecting the request with a quite unpredictable timer delay, // while real-world applications don't do any such assumptions about the timing of the // remote user actions, so most of the problems won't be applicable there. } i = 0; Contact::PresenceState expectedPresenceState; Q_FOREACH (const ContactPtr &contact, pendingPublish) { mGotPresenceStateChanged = false; QVERIFY(connect(contact.data(), SIGNAL(publishStateChanged(Tp::Contact::PresenceState, QString)), SLOT(expectPresenceStateChanged(Tp::Contact::PresenceState)))); if ((i++ % 2) == 0) { expectedPresenceState = Contact::PresenceStateYes; contact->authorizePresencePublication(); } else { expectedPresenceState = Contact::PresenceStateNo; contact->removePresencePublication(); } while (!mGotPresenceStateChanged) { mLoop->processEvents(); } QCOMPARE(static_cast(contact->publishState()), static_cast(expectedPresenceState)); } // Test allKnownContactsChanged. // In this test, everytime a subscription is requested or rejected, allKnownContacts changes // Cache the current value mHowManyKnownContacts = contactManager->allKnownContacts().size(); // Watch for contacts changed QVERIFY(connect(contactManager.data(), SIGNAL(allKnownContactsChanged(Tp::Contacts,Tp::Contacts, Tp::Channel::GroupMemberChangeDetails)), SLOT(expectAllKnownContactsChanged(Tp::Contacts,Tp::Contacts, Tp::Channel::GroupMemberChangeDetails)))); // Wait for the contacts to be built ids = QStringList() << QString(QLatin1String("kctest1@example.com")) << QString(QLatin1String("kctest2@example.com")); contacts = mConn->contacts(ids); QCOMPARE(contacts.size(), ids.size()); Q_FOREACH (const ContactPtr &contact, contacts) { contact->requestPresenceSubscription(QLatin1String("add me now")); // allKnownContacts is supposed to change here. QCOMPARE(mLoop->exec(), 0); } QVERIFY(disconnect(contactManager.data(), SIGNAL(allKnownContactsChanged(Tp::Contacts,Tp::Contacts, Tp::Channel::GroupMemberChangeDetails)), this, SLOT(expectAllKnownContactsChanged(Tp::Contacts,Tp::Contacts, Tp::Channel::GroupMemberChangeDetails)))); // verify that the CM supports contact blocking QVERIFY(contactManager->canBlockContacts()); // check if the initially blocked contacts are there ids.clear(); toCheck = QStringList() << QLatin1String("bill@example.com") << QLatin1String("steve@example.com"); Q_FOREACH (const ContactPtr &contact, contactManager->allKnownContacts()) { if (contact->isBlocked()) { qDebug() << "blocked contact:" << contact->id(); ids << contact->id(); } } ids.sort(); toCheck.sort(); QCOMPARE(ids, toCheck); // block all contacts QList contactsList = contactManager->allKnownContacts().toList(); QSet contactIdsList; Q_FOREACH (const ContactPtr &contact, contactsList) { QVERIFY(connect(contact.data(), SIGNAL(blockStatusChanged(bool)), SLOT(expectBlockStatusChanged(bool)))); contactIdsList.insert(contact->id()); } mBlockingContactsFinished = false; mContactsExpectingBlockStatusChange = contactIdsList; // those are already blocked; do not expect their status to change mContactsExpectingBlockStatusChange.remove(QLatin1String("bill@example.com")); mContactsExpectingBlockStatusChange.remove(QLatin1String("steve@example.com")); QVERIFY(connect(contactManager->blockContacts(contactsList), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectBlockingContactsFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); // verify all contacts have been blocked Q_FOREACH (const ContactPtr &contact, contactsList) { QCOMPARE(contact->isBlocked(), true); QVERIFY(contactManager->allKnownContacts().contains(contact)); } // now remove kctest1 from the server ContactPtr kctest1; Q_FOREACH (const ContactPtr &contact, contactsList) { if (contact->id() == QLatin1String("kctest1@example.com")) { kctest1 = contact; } } QVERIFY(!kctest1.isNull()); QVERIFY(connect(contactManager->removeContacts(QList() << kctest1), SIGNAL(finished(Tp::PendingOperation*)), mLoop, SLOT(quit()))); QCOMPARE(mLoop->exec(), 0); // allKnownContacts must still contain kctest1, since it is in the deny list QVERIFY(contactManager->allKnownContacts().contains(kctest1)); kctest1.reset(); //no longer needed // unblock all contacts mBlockingContactsFinished = false; mContactsExpectingBlockStatusChange = contactIdsList; QVERIFY(connect(contactManager->unblockContacts(contactsList), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectBlockingContactsFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); // verify all contacts have been unblocked Q_FOREACH (const ContactPtr &contact, contactsList) { QCOMPARE(contact->isBlocked(), false); // ...and that bill, steve and kctest1 have also been removed from allKnownContacts() // note: allKnownContacts() changes here because bill, steve and kctest, // which were only in the deny list, do not exist in any other list, so // they are removed as soon as they get unblocked. if (contact->id() == QLatin1String("bill@example.com") || contact->id() == QLatin1String("steve@example.com") || contact->id() == QLatin1String("kctest1@example.com")) { QVERIFY(!contactManager->allKnownContacts().contains(contact)); } else { QVERIFY(contactManager->allKnownContacts().contains(contact)); } } // block some contacts that are not already known ids = QStringList() << QLatin1String("blocktest1@example.com") << QLatin1String("blocktest2@example.com"); contacts = mConn->contacts(ids); // Watch changes in allKnownContacts() instead of watching the Contacts' block status // as we want to destroy the Contact objects and verify that they are being re-created correctly QVERIFY(connect(contactManager.data(), SIGNAL(allKnownContactsChanged(Tp::Contacts,Tp::Contacts, Tp::Channel::GroupMemberChangeDetails)), SLOT(expectBlockedContactsChanged(Tp::Contacts,Tp::Contacts, Tp::Channel::GroupMemberChangeDetails)))); mBlockingContactsFinished = false; mContactsExpectingBlockStatusChange = ids.toSet(); QVERIFY(connect(contactManager->blockContacts(contacts), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectBlockingContactsFinished(Tp::PendingOperation*)))); // destroy the Contact objects to let them be re-created when the block operation finishes contacts.clear(); QCOMPARE(mLoop->exec(), 0); // construct the same contacts again and verify that they are blocked contacts = mConn->contacts(ids); Q_FOREACH (const ContactPtr &contact, contacts) { QCOMPARE(contact->isBlocked(), true); QVERIFY(contactManager->allKnownContacts().contains(contact)); } // now unblock them again mBlockingContactsFinished = false; mContactsExpectingBlockStatusChange = ids.toSet(); QVERIFY(connect(contactManager->unblockContacts(contacts), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectBlockingContactsFinished(Tp::PendingOperation*)))); // note: allKnownContacts() is expected to change again, so we expect // to quit from expectBlockedContactsChanged() QCOMPARE(mLoop->exec(), 0); // and verify that they are not in allKnownContacts() Q_FOREACH (const ContactPtr &contact, contacts) { QCOMPARE(contact->isBlocked(), false); QVERIFY(!contactManager->allKnownContacts().contains(contact)); } } void TestConnRoster::cleanup() { cleanupImpl(); } void TestConnRoster::cleanupTestCase() { QCOMPARE(mConn->disconnect(), true); delete mConn; cleanupTestCaseImpl(); } QTEST_MAIN(TestConnRoster) #include "_gen/conn-roster.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/stateful-proxy.cpp0000644000175200001440000002327212000056607024233 0ustar00collabora-develusers00000000000000/** * This file is part of TelepathyQt * * @copyright Copyright (C) 2009 Collabora Ltd. * @copyright Copyright (C) 2009 Nokia Corporation * @license LGPL 2.1 * * 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 */ #include #include #include #include #include #include #include #include "tests/lib/test.h" using namespace Tp; using namespace Tp; using Tp::Client::DBus::IntrospectableInterface; // expose protected functions for testing class MyStatefulDBusProxy : public StatefulDBusProxy { public: MyStatefulDBusProxy(const QDBusConnection &dbusConnection, const QString &busName, const QString &objectPath) : StatefulDBusProxy(dbusConnection, busName, objectPath, Feature()) { } using StatefulDBusProxy::invalidate; }; class ObjectAdaptor : public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "com.example.Foo") public: ObjectAdaptor(Test *test) : QDBusAbstractAdaptor(test) { } }; class TestStatefulProxy : public Test { Q_OBJECT public: TestStatefulProxy(QObject *parent = 0); private Q_SLOTS: void initTestCase(); void init(); void testBasics(); void testNameOwnerChanged(); void cleanup(); void cleanupTestCase(); protected Q_SLOTS: // these would be public, but then QtTest would think they were tests void expectInvalidated(Tp::DBusProxy *, const QString &, const QString &); // anything other than 0 or 1 is OK # define EXPECT_INVALIDATED_SUCCESS 111 private: MyStatefulDBusProxy *mProxy; ObjectAdaptor *mAdaptor; int mInvalidated; QString mSignalledInvalidationReason; QString mSignalledInvalidationMessage; static QString wellKnownName(); static QString objectPath(); static QString uniqueName(); }; QString TestStatefulProxy::wellKnownName() { return QLatin1String("org.freedesktop.Telepathy.Qt.TestStatefulProxy"); } QString TestStatefulProxy::objectPath() { return QLatin1String("/org/freedesktop/Telepathy/Qt/TestStatefulProxy/Object"); } TestStatefulProxy::TestStatefulProxy(QObject *parent) : Test(parent), mProxy(0), mAdaptor(new ObjectAdaptor(this)) { } QString TestStatefulProxy::uniqueName() { return QDBusConnection::sessionBus().baseService(); } void TestStatefulProxy::initTestCase() { initTestCaseImpl(); QVERIFY(QDBusConnection::sessionBus().registerService(wellKnownName())); QDBusConnection::sessionBus().registerObject(objectPath(), this); } void TestStatefulProxy::init() { initImpl(); mInvalidated = 0; } void TestStatefulProxy::testBasics() { mProxy = new MyStatefulDBusProxy(QDBusConnection::sessionBus(), wellKnownName(), objectPath()); IntrospectableInterface ifaceFromProxy(mProxy); IntrospectableInterface ifaceFromWellKnown(wellKnownName(), objectPath()); IntrospectableInterface ifaceFromUnique(uniqueName(), objectPath()); QVERIFY(mProxy); QCOMPARE(mProxy->dbusConnection().baseService(), uniqueName()); QCOMPARE(mProxy->busName(), uniqueName()); QCOMPARE(mProxy->objectPath(), objectPath()); QVERIFY(mProxy->isValid()); QCOMPARE(mProxy->invalidationReason(), QString()); QCOMPARE(mProxy->invalidationMessage(), QString()); QDBusPendingReply reply; QDBusPendingCallWatcher *watcher; reply = ifaceFromUnique.Introspect(); if (!reply.isValid()) { watcher = new QDBusPendingCallWatcher(reply); QVERIFY(connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher *)), this, SLOT(expectSuccessfulCall(QDBusPendingCallWatcher *)))); QCOMPARE(mLoop->exec(), 0); delete watcher; } reply = ifaceFromWellKnown.Introspect(); if (!reply.isValid()) { watcher = new QDBusPendingCallWatcher(reply); QVERIFY(connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher *)), this, SLOT(expectSuccessfulCall(QDBusPendingCallWatcher *)))); QCOMPARE(mLoop->exec(), 0); delete watcher; } reply = ifaceFromProxy.Introspect(); if (!reply.isValid()) { watcher = new QDBusPendingCallWatcher(reply); QVERIFY(connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher *)), this, SLOT(expectSuccessfulCall(QDBusPendingCallWatcher *)))); QCOMPARE(mLoop->exec(), 0); delete watcher; } QVERIFY(connect(mProxy, SIGNAL(invalidated( Tp::DBusProxy *, const QString &, const QString &)), this, SLOT(expectInvalidated( Tp::DBusProxy *, const QString &, const QString &)))); mProxy->invalidate(QLatin1String("com.example.DomainSpecificError"), QLatin1String("Because I said so")); QVERIFY(!mProxy->isValid()); QCOMPARE(mProxy->invalidationReason(), QLatin1String("com.example.DomainSpecificError")); QCOMPARE(mProxy->invalidationMessage(), QLatin1String("Because I said so")); // FIXME: ideally, the method call would already fail synchronously at // this point - after all, the proxy already knows it's dead reply = ifaceFromProxy.Introspect(); if (reply.isValid()) { qWarning() << "reply is valid"; } else if (reply.isError()) { qDebug() << "reply is error" << reply.error().name() << reply.error().message(); } else { qWarning() << "no reply yet"; } // the signal doesn't arrive instantly QCOMPARE(mLoop->exec(), EXPECT_INVALIDATED_SUCCESS); QVERIFY(disconnect(mProxy, SIGNAL(invalidated( Tp::DBusProxy *, const QString &, const QString &)), this, SLOT(expectInvalidated( Tp::DBusProxy *, const QString &, const QString &)))); QCOMPARE(mInvalidated, 1); QCOMPARE(mSignalledInvalidationReason, QLatin1String("com.example.DomainSpecificError")); QCOMPARE(mSignalledInvalidationMessage, QLatin1String("Because I said so")); // low-level proxies with no knowledge of the high-level DBusProxy are // unaffected reply = ifaceFromUnique.Introspect(); if (!reply.isValid()) { watcher = new QDBusPendingCallWatcher(reply); QVERIFY(connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher *)), this, SLOT(expectSuccessfulCall(QDBusPendingCallWatcher *)))); QCOMPARE(mLoop->exec(), 0); delete watcher; } reply = ifaceFromWellKnown.Introspect(); if (!reply.isValid()) { watcher = new QDBusPendingCallWatcher(reply); QVERIFY(connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher *)), this, SLOT(expectSuccessfulCall(QDBusPendingCallWatcher *)))); QCOMPARE(mLoop->exec(), 0); delete watcher; } } void TestStatefulProxy::expectInvalidated(DBusProxy *proxy, const QString &reason, const QString &message) { mInvalidated++; mSignalledInvalidationReason = reason; mSignalledInvalidationMessage = message; mLoop->exit(EXPECT_INVALIDATED_SUCCESS); } void TestStatefulProxy::testNameOwnerChanged() { QString otherUniqueName = QDBusConnection::connectToBus( QDBusConnection::SessionBus, QLatin1String("another unique name")).baseService(); mProxy = new MyStatefulDBusProxy(QDBusConnection::sessionBus(), otherUniqueName, objectPath()); QVERIFY(mProxy->isValid()); QCOMPARE(mProxy->invalidationReason(), QString()); QCOMPARE(mProxy->invalidationMessage(), QString()); QVERIFY(connect(mProxy, SIGNAL(invalidated( Tp::DBusProxy *, const QString &, const QString &)), this, SLOT(expectInvalidated( Tp::DBusProxy *, const QString &, const QString &)))); QDBusConnection::disconnectFromBus(QLatin1String("another unique name")); QCOMPARE(mLoop->exec(), EXPECT_INVALIDATED_SUCCESS); QVERIFY(disconnect(mProxy, SIGNAL(invalidated( Tp::DBusProxy *, const QString &, const QString &)), this, SLOT(expectInvalidated( Tp::DBusProxy *, const QString &, const QString &)))); QCOMPARE(mInvalidated, 1); QVERIFY(!mProxy->isValid()); QCOMPARE(mProxy->invalidationReason(), TP_QT_DBUS_ERROR_NAME_HAS_NO_OWNER); QCOMPARE(mSignalledInvalidationReason, TP_QT_DBUS_ERROR_NAME_HAS_NO_OWNER); QVERIFY(!mProxy->invalidationMessage().isEmpty()); QCOMPARE(mProxy->invalidationMessage(), mSignalledInvalidationMessage); } void TestStatefulProxy::cleanup() { if (mProxy) { delete mProxy; mProxy = 0; } cleanupImpl(); } void TestStatefulProxy::cleanupTestCase() { cleanupTestCaseImpl(); } QTEST_MAIN(TestStatefulProxy) #include "_gen/stateful-proxy.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/chan-conference.cpp0000644000175200001440000002336312000056607024244 0ustar00collabora-develusers00000000000000#include #include #include #include #include #include #include #include using namespace Tp; class TestConferenceChan : public Test { Q_OBJECT public: TestConferenceChan(QObject *parent = 0) : Test(parent), mConn(0), mContactRepo(0), mTextChan1Service(0), mTextChan2Service(0), mConferenceChanService(0) { } protected Q_SLOTS: void onConferenceChannelMerged(const Tp::ChannelPtr &); void onConferenceChannelRemoved(const Tp::ChannelPtr &channel, const Tp::Channel::GroupMemberChangeDetails &details); private Q_SLOTS: void initTestCase(); void init(); void testConference(); void cleanup(); void cleanupTestCase(); private: TestConnHelper *mConn; TpHandleRepoIface *mContactRepo; ChannelPtr mChan; QString mTextChan1Path; ExampleEchoChannel *mTextChan1Service; QString mTextChan2Path; ExampleEchoChannel *mTextChan2Service; QString mTextChan3Path; ExampleEchoChannel *mTextChan3Service; QString mConferenceChanPath; TpTestsConferenceChannel *mConferenceChanService; ChannelPtr mChannelMerged; ChannelPtr mChannelRemovedDetailed; Channel::GroupMemberChangeDetails mChannelRemovedDetailedDetails; }; void TestConferenceChan::onConferenceChannelMerged(const Tp::ChannelPtr &channel) { mChannelMerged = channel; mLoop->exit(0); } void TestConferenceChan::onConferenceChannelRemoved(const Tp::ChannelPtr &channel, const Tp::Channel::GroupMemberChangeDetails &details) { mChannelRemovedDetailed = channel; mChannelRemovedDetailedDetails = details; mLoop->exit(0); } void TestConferenceChan::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("chan-conference"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); mConn = new TestConnHelper(this, EXAMPLE_TYPE_ECHO_CONNECTION, "account", "me@example.com", "protocol", "example", NULL); QCOMPARE(mConn->connect(), true); // create a Channel by magic, rather than doing D-Bus round-trips for it mContactRepo = tp_base_connection_get_handles(TP_BASE_CONNECTION(mConn->service()), TP_HANDLE_TYPE_CONTACT); guint handle1 = tp_handle_ensure(mContactRepo, "someone1@localhost", 0, 0); guint handle2 = tp_handle_ensure(mContactRepo, "someone2@localhost", 0, 0); guint handle3 = tp_handle_ensure(mContactRepo, "someone3@localhost", 0, 0); QByteArray chanPath; GPtrArray *initialChannels = g_ptr_array_new(); mTextChan1Path = mConn->objectPath() + QLatin1String("/TextChannel/1"); chanPath = mTextChan1Path.toAscii(); mTextChan1Service = EXAMPLE_ECHO_CHANNEL(g_object_new( EXAMPLE_TYPE_ECHO_CHANNEL, "connection", mConn->service(), "object-path", chanPath.data(), "handle", handle1, NULL)); g_ptr_array_add(initialChannels, g_strdup(chanPath.data())); mTextChan2Path = mConn->objectPath() + QLatin1String("/TextChannel/2"); chanPath = mTextChan2Path.toAscii(); mTextChan2Service = EXAMPLE_ECHO_CHANNEL(g_object_new( EXAMPLE_TYPE_ECHO_CHANNEL, "connection", mConn->service(), "object-path", chanPath.data(), "handle", handle2, NULL)); g_ptr_array_add(initialChannels, g_strdup(chanPath.data())); // let's not add this one to initial channels mTextChan3Path = mConn->objectPath() + QLatin1String("/TextChannel/3"); chanPath = mTextChan3Path.toAscii(); mTextChan3Service = EXAMPLE_ECHO_CHANNEL(g_object_new( EXAMPLE_TYPE_ECHO_CHANNEL, "connection", mConn->service(), "object-path", chanPath.data(), "handle", handle3, NULL)); mConferenceChanPath = mConn->objectPath() + QLatin1String("/ConferenceChannel"); chanPath = mConferenceChanPath.toAscii(); mConferenceChanService = TP_TESTS_CONFERENCE_CHANNEL(g_object_new( TP_TESTS_TYPE_CONFERENCE_CHANNEL, "connection", mConn->service(), "object-path", chanPath.data(), "initial-channels", initialChannels, NULL)); g_ptr_array_foreach(initialChannels, (GFunc) g_free, NULL); g_ptr_array_free(initialChannels, TRUE); } void TestConferenceChan::init() { initImpl(); } void TestConferenceChan::testConference() { mChan = Channel::create(mConn->client(), mConferenceChanPath, QVariantMap()); QCOMPARE(mChan->isConference(), false); QVERIFY(mChan->conferenceInitialInviteeContacts().isEmpty()); QVERIFY(mChan->conferenceChannels().isEmpty()); QVERIFY(mChan->conferenceInitialChannels().isEmpty()); QVERIFY(mChan->conferenceOriginalChannels().isEmpty()); QCOMPARE(mChan->supportsConferenceMerging(), false); QCOMPARE(mChan->supportsConferenceSplitting(), false); QVERIFY(connect(mChan->becomeReady(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->isReady(), true); QStringList expectedObjectPaths; expectedObjectPaths << mTextChan1Path << mTextChan2Path; QStringList objectPaths; Q_FOREACH (const ChannelPtr &channel, mChan->conferenceInitialChannels()) { objectPaths << channel->objectPath(); } QCOMPARE(expectedObjectPaths, objectPaths); objectPaths.clear(); Q_FOREACH (const ChannelPtr &channel, mChan->conferenceChannels()) { objectPaths << channel->objectPath(); } QCOMPARE(expectedObjectPaths, objectPaths); /* // TODO - Properly check for initial invitee contacts if/when a test CM supports it QVERIFY(!mChan->isReady(Channel::FeatureConferenceInitialInviteeContacts)); QCOMPARE(mChan->conferenceInitialInviteeContacts(), Contacts()); QVERIFY(connect(mChan->becomeReady(Channel::FeatureConferenceInitialInviteeContacts), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->isReady(Channel::FeatureConferenceInitialInviteeContacts), true); QCOMPARE(mChan->conferenceInitialInviteeContacts(), Contacts()); */ QCOMPARE(mChan->supportsConferenceMerging(), true); QCOMPARE(mChan->supportsConferenceSplitting(), false); QVERIFY(connect(mChan->conferenceSplitChannel(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mLastError, TP_QT_ERROR_NOT_IMPLEMENTED); QVERIFY(!mLastErrorMessage.isEmpty()); ChannelPtr otherChannel = Channel::create(mConn->client(), mTextChan3Path, QVariantMap()); QVERIFY(connect(mChan.data(), SIGNAL(conferenceChannelMerged(const Tp::ChannelPtr &)), SLOT(onConferenceChannelMerged(const Tp::ChannelPtr &)))); QVERIFY(connect(mChan->conferenceMergeChannel(otherChannel), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->isReady(), true); while (!mChannelMerged) { QCOMPARE(mLoop->exec(), 0); } QCOMPARE(mChannelMerged->objectPath(), otherChannel->objectPath()); expectedObjectPaths << mTextChan3Path; objectPaths.clear(); Q_FOREACH (const ChannelPtr &channel, mChan->conferenceChannels()) { objectPaths << channel->objectPath(); } QCOMPARE(expectedObjectPaths, objectPaths); QVERIFY(connect(mChan.data(), SIGNAL(conferenceChannelRemoved(const Tp::ChannelPtr &, const Tp::Channel::GroupMemberChangeDetails &)), SLOT(onConferenceChannelRemoved(const Tp::ChannelPtr &, const Tp::Channel::GroupMemberChangeDetails &)))); tp_tests_conference_channel_remove_channel (mConferenceChanService, mChannelMerged->objectPath().toAscii().data()); while (!mChannelRemovedDetailed) { QCOMPARE(mLoop->exec(), 0); } QCOMPARE(mChannelRemovedDetailed, mChannelMerged); QCOMPARE(mChannelRemovedDetailedDetails.allDetails().isEmpty(), false); QCOMPARE(qdbus_cast(mChannelRemovedDetailedDetails.allDetails().value( QLatin1String("domain-specific-detail-uint"))), 3); QCOMPARE(mChannelRemovedDetailedDetails.hasActor(), true); QCOMPARE(mChannelRemovedDetailedDetails.actor(), mChan->groupSelfContact()); expectedObjectPaths.clear(); expectedObjectPaths << mTextChan1Path << mTextChan2Path; objectPaths.clear(); Q_FOREACH (const ChannelPtr &channel, mChan->conferenceChannels()) { objectPaths << channel->objectPath(); } QCOMPARE(expectedObjectPaths, objectPaths); mChan.reset(); mChannelMerged.reset(); } void TestConferenceChan::cleanup() { cleanupImpl(); } void TestConferenceChan::cleanupTestCase() { QCOMPARE(mConn->disconnect(), true); delete mConn; if (mTextChan1Service != 0) { g_object_unref(mTextChan1Service); mTextChan1Service = 0; } if (mTextChan2Service != 0) { g_object_unref(mTextChan2Service); mTextChan2Service = 0; } if (mConferenceChanService != 0) { g_object_unref(mConferenceChanService); mConferenceChanService = 0; } cleanupTestCaseImpl(); } QTEST_MAIN(TestConferenceChan) #include "_gen/chan-conference.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/types.cpp0000644000175200001440000001000512000056607022357 0ustar00collabora-develusers00000000000000#include #include #include #include using namespace Tp; /* We need a interface returning a QVariantMap property where we will insert the various * combinations we are testing, so let's use Channel.Tube for that as we already have the * autogenerated interface for it */ class TubeAdaptor : public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.freedesktop.Telepathy.Channel.Interface.Tube") Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" "") Q_PROPERTY(QVariantMap Parameters READ Parameters) public: TubeAdaptor(QObject *parent) : QDBusAbstractAdaptor(parent) {} ~TubeAdaptor() {} public: // Properties inline QVariantMap Parameters() const { QVariantMap ret; SUSocketAddress su; su.address = QLatin1String("1.1.1.1"); su.port = 1111; SocketAddressIPv4 saIPv4; saIPv4.address = QLatin1String("2.2.2.2"); saIPv4.port = 2222; SocketAddressIPv6 saIPv6; saIPv6.address = QLatin1String("3.3.3.3"); saIPv6.port = 3333; ret.insert(QLatin1String("SU"), qVariantFromValue(su)); ret.insert(QLatin1String("saIPv4"), qVariantFromValue(saIPv4)); ret.insert(QLatin1String("saIPv6"), qVariantFromValue(saIPv6)); return ret; } }; class TestTypes : public Test { Q_OBJECT public: TestTypes(QObject *parent = 0) : Test(parent) { } protected Q_SLOTS: private Q_SLOTS: void initTestCase(); void init(); void testParameters(); void cleanup(); void cleanupTestCase(); private: QVariantMap mParameters; }; void TestTypes::initTestCase() { initTestCaseImpl(); QDBusConnection bus = QDBusConnection::sessionBus(); // setup adaptor QString tubeBusName = QLatin1String("org.freedesktop.Telepathy.Test.Types"); QString tubePath = QLatin1String("/org/freedesktop/Telepathy/Test/Types"); QObject *adaptorObject = new QObject(this); (void) new TubeAdaptor(adaptorObject); QVERIFY(bus.registerService(tubeBusName)); QVERIFY(bus.registerObject(tubePath, adaptorObject)); Client::ChannelInterfaceTubeInterface *tubeIface = new Client::ChannelInterfaceTubeInterface( bus, tubeBusName, tubePath, this); QVERIFY(waitForProperty(tubeIface->requestPropertyParameters(), &mParameters)); } void TestTypes::init() { initImpl(); } void TestTypes::testParameters() { SUSocketAddress su; SocketAddressIPv4 saIPv4; SocketAddressIPv6 saIPv6; // SUSocketAddress should properly convert to SUSocketAddress itself and // SocketAddressIPv4/IPv6 su = qdbus_cast(mParameters.value(QLatin1String("SU"))); QCOMPARE(su.address, QLatin1String("1.1.1.1")); QCOMPARE(su.port, static_cast(1111)); saIPv4 = qdbus_cast(mParameters.value(QLatin1String("SU"))); QCOMPARE(saIPv4.address, QLatin1String("1.1.1.1")); QCOMPARE(saIPv4.port, static_cast(1111)); saIPv6 = qdbus_cast(mParameters.value(QLatin1String("SU"))); QCOMPARE(saIPv6.address, QLatin1String("1.1.1.1")); QCOMPARE(saIPv6.port, static_cast(1111)); // SocketAddressIPv4->SocketAddressIPv4 saIPv4 = qdbus_cast(mParameters.value(QLatin1String("saIPv4"))); QCOMPARE(saIPv4.address, QLatin1String("2.2.2.2")); QCOMPARE(saIPv4.port, static_cast(2222)); // SocketAddressIPv6->SocketAddressIPv6 saIPv6 = qdbus_cast(mParameters.value(QLatin1String("saIPv6"))); QCOMPARE(saIPv6.address, QLatin1String("3.3.3.3")); QCOMPARE(saIPv6.port, static_cast(3333)); } void TestTypes::cleanup() { cleanupImpl(); } void TestTypes::cleanupTestCase() { cleanupTestCaseImpl(); } QTEST_MAIN(TestTypes) #include "_gen/types.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/properties.cpp0000644000175200001440000000675312000056607023426 0ustar00collabora-develusers00000000000000#include #include #include #define TP_QT_ENABLE_LOWLEVEL_API #include #include #include #include #include #include #include using namespace Tp; class TestProperties : public Test { Q_OBJECT public: TestProperties(QObject *parent = 0) : Test(parent), mConnService(0) { } private Q_SLOTS: void initTestCase(); void init(); void testPropertiesMonitoring(); void cleanup(); void cleanupTestCase(); private: QString mConnName, mConnPath; TpTestsContactsConnection *mConnService; Client::ConnectionInterface *mConn; }; void TestProperties::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("properties"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); } void TestProperties::init() { initImpl(); gchar *name; gchar *connPath; GError *error = 0; mConnService = TP_TESTS_CONTACTS_CONNECTION(g_object_new( TP_TESTS_TYPE_CONTACTS_CONNECTION, "account", "me@example.com", "protocol", "contacts", NULL)); QVERIFY(mConnService != 0); QVERIFY(tp_base_connection_register(TP_BASE_CONNECTION(mConnService), "contacts", &name, &connPath, &error)); QVERIFY(error == 0); QVERIFY(name != 0); QVERIFY(connPath != 0); mConnName = QLatin1String(name); mConnPath = QLatin1String(connPath); g_free(name); g_free(connPath); mConn = new Client::ConnectionInterface(mConnName, mConnPath, this); QVERIFY(mConn->isValid()); } void TestProperties::testPropertiesMonitoring() { QCOMPARE(mConn->isMonitoringProperties(), false); mConn->setMonitorProperties(true); QSignalSpy spy(mConn, SIGNAL(propertiesChanged(QVariantMap,QStringList))); connect(mConn, SIGNAL(propertiesChanged(QVariantMap,QStringList)), mLoop, SLOT(quit())); GHashTable *changed = tp_asv_new( "test-prop", G_TYPE_STRING, "I am actually different than I used to be.", "test-again", G_TYPE_UINT, 0xff0000ffU, NULL ); tp_svc_dbus_properties_emit_properties_changed (mConnService, "a.random.interface", changed, NULL); tp_svc_dbus_properties_emit_properties_changed (mConnService, mConn->interface().toAscii().data(), changed, NULL); QCOMPARE(spy.count(), 0); mLoop->exec(); QCOMPARE(spy.count(), 1); QList arguments = spy.takeFirst(); QVERIFY(arguments.at(0).type() == QVariant::Map); QVERIFY(arguments.at(1).type() == QVariant::StringList); QVariantMap resultMap = arguments.at(0).toMap(); QCOMPARE(resultMap.size(), 2); QCOMPARE(resultMap[QLatin1String("test-prop")].toString(), QLatin1String("I am actually different than I used to be.")); QCOMPARE(resultMap[QLatin1String("test-again")].toUInt(), 0xff0000ffU); QCOMPARE(spy.count(), 0); g_hash_table_destroy (changed); } void TestProperties::cleanup() { if (mConn) { mConn->deleteLater(); mConn = 0; } if (mConnService != 0) { g_object_unref(mConnService); mConnService = 0; } cleanupImpl(); } void TestProperties::cleanupTestCase() { cleanupTestCaseImpl(); } QTEST_MAIN(TestProperties) #include "_gen/properties.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/dbus-proxy-factory.cpp0000644000175200001440000002506712000056607025012 0ustar00collabora-develusers00000000000000#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace Tp; class TestDBusProxyFactory : public Test { Q_OBJECT public: TestDBusProxyFactory(QObject *parent = 0) : Test(parent), mConnService1(0), mConnService2(0) { } protected Q_SLOTS: void expectFinished(); private Q_SLOTS: void initTestCase(); void init(); void testCaching(); void testDropRefs(); void testInvalidate(); void testBogusService(); void cleanup(); void cleanupTestCase(); private: TpTestsContactsConnection *mConnService1, *mConnService2; QString mConnPath1, mConnPath2; QString mConnName1, mConnName2; ConnectionFactoryPtr mFactory; uint mNumFinished; }; void TestDBusProxyFactory::expectFinished() { mNumFinished++; } void TestDBusProxyFactory::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("dbus-proxy-factory"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); gchar *name; gchar *connPath; GError *error = 0; mConnService1 = TP_TESTS_CONTACTS_CONNECTION(g_object_new( TP_TESTS_TYPE_CONTACTS_CONNECTION, "account", "me1@example.com", "protocol", "simple", NULL)); QVERIFY(mConnService1 != 0); QVERIFY(tp_base_connection_register(TP_BASE_CONNECTION(mConnService1), "contacts", &name, &connPath, &error)); QVERIFY(error == 0); QVERIFY(name != 0); QVERIFY(connPath != 0); mConnName1 = QLatin1String(name); mConnPath1 = QLatin1String(connPath); g_free(name); g_free(connPath); mConnService2 = TP_TESTS_CONTACTS_CONNECTION(g_object_new( TP_TESTS_TYPE_CONTACTS_CONNECTION, "account", "me2@example.com", "protocol", "simple", NULL)); QVERIFY(mConnService2 != 0); QVERIFY(tp_base_connection_register(TP_BASE_CONNECTION(mConnService2), "contacts", &name, &connPath, &error)); QVERIFY(error == 0); QVERIFY(name != 0); QVERIFY(connPath != 0); mConnName2 = QLatin1String(name); mConnPath2 = QLatin1String(connPath); g_free(name); g_free(connPath); } void TestDBusProxyFactory::init() { initImpl(); mFactory = ConnectionFactory::create(QDBusConnection::sessionBus(), Connection::FeatureCore); mNumFinished = 0; } void TestDBusProxyFactory::testCaching() { PendingReady *first = mFactory->proxy(mConnName1, mConnPath1, ChannelFactory::create(QDBusConnection::sessionBus()), ContactFactory::create()); QVERIFY(first != NULL); QVERIFY(!first->proxy().isNull()); PendingReady *same = mFactory->proxy(mConnName1, mConnPath1, ChannelFactory::create(QDBusConnection::sessionBus()), ContactFactory::create()); QVERIFY(same != NULL); QVERIFY(!same->proxy().isNull()); QCOMPARE(same->proxy().data(), first->proxy().data()); PendingReady *different = mFactory->proxy(mConnName2, mConnPath2, ChannelFactory::create(QDBusConnection::sessionBus()), ContactFactory::create()); QVERIFY(different != NULL); QVERIFY(!different->proxy().isNull()); QVERIFY(different->proxy() != first->proxy()); ConnectionPtr firstProxy = ConnectionPtr::qObjectCast(first->proxy()); QVERIFY(!first->isFinished() && !same->isFinished() && !different->isFinished()); QVERIFY(connect(first, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFinished()))); QVERIFY(connect(same, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFinished()))); QVERIFY(connect(different, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFinished()))); QVERIFY(!first->isFinished() && !same->isFinished() && !different->isFinished()); while (mNumFinished < 3) { mLoop->processEvents(); } QCOMPARE(mNumFinished, 3U); PendingReady *another = mFactory->proxy(mConnName1, mConnPath1, ChannelFactory::create(QDBusConnection::sessionBus()), ContactFactory::create()); QVERIFY(another != NULL); QVERIFY(!another->proxy().isNull()); // Should still be the same even if all the initial requests already finished QCOMPARE(another->proxy().data(), firstProxy.data()); QVERIFY(connect(another, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); } void TestDBusProxyFactory::testDropRefs() { PendingReady *first = mFactory->proxy(mConnName1, mConnPath1, ChannelFactory::create(QDBusConnection::sessionBus()), ContactFactory::create()); QVERIFY(first != NULL); QVERIFY(!first->proxy().isNull()); ConnectionPtr firstProxy = ConnectionPtr::qObjectCast(first->proxy()); QVERIFY(firstProxy->isValid()); QVERIFY(connect(first, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); PendingReady *same = mFactory->proxy(mConnName1, mConnPath1, ChannelFactory::create(QDBusConnection::sessionBus()), ContactFactory::create()); QVERIFY(same != NULL); QVERIFY(!same->proxy().isNull()); // The first one is in scope so we should've got it again QCOMPARE(same->proxy().data(), firstProxy.data()); QVERIFY(connect(same, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); // Flush the delete event for the PendingReady, which drops the PendingReady ref to the proxy mLoop->processEvents(); // Make the Conn go out of scope Connection *firstPtr = firstProxy.data(); firstProxy.reset(); PendingReady *different = mFactory->proxy(mConnName1, mConnPath1, ChannelFactory::create(QDBusConnection::sessionBus()), ContactFactory::create()); QVERIFY(different != NULL); QVERIFY(!different->proxy().isNull()); // The first one has gone out of scope and deleted so we should've got a different one QVERIFY(different->proxy().data() != firstPtr); } void TestDBusProxyFactory::testInvalidate() { PendingReady *first = mFactory->proxy(mConnName1, mConnPath1, ChannelFactory::create(QDBusConnection::sessionBus()), ContactFactory::create()); QVERIFY(first != NULL); QVERIFY(!first->proxy().isNull()); ConnectionPtr firstProxy = ConnectionPtr::qObjectCast(first->proxy()); QVERIFY(firstProxy->isValid()); QVERIFY(connect(first, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); PendingReady *same = mFactory->proxy(mConnName1, mConnPath1, ChannelFactory::create(QDBusConnection::sessionBus()), ContactFactory::create()); QVERIFY(same != NULL); QVERIFY(!same->proxy().isNull()); // The first one is in scope and valid so we should've got it again QCOMPARE(same->proxy().data(), firstProxy.data()); QVERIFY(connect(same, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); // Flush the delete event for the PendingReady, which drops the PendingReady ref to the proxy mLoop->processEvents(); // Synthesize an invalidation for the proxy QVERIFY(connect(firstProxy.data(), SIGNAL(invalidated(Tp::DBusProxy*,QString,QString)), mLoop, SLOT(quit()))); TestBackdoors::invalidateProxy(firstProxy.data(), QLatin1String("im.bonghits.Errors.Synthetic"), QLatin1String("")); QCOMPARE(mLoop->exec(), 0); QVERIFY(!firstProxy->isValid()); PendingReady *different = mFactory->proxy(mConnName1, mConnPath1, ChannelFactory::create(QDBusConnection::sessionBus()), ContactFactory::create()); QVERIFY(different != NULL); ConnectionPtr differentProxy = ConnectionPtr::qObjectCast(different->proxy()); QVERIFY(!differentProxy.isNull()); // The first one is invalid so we should've got a different one QVERIFY(differentProxy.data() != firstProxy.data()); QVERIFY(differentProxy->isValid()); QVERIFY(!differentProxy->isReady()); QVERIFY(connect(different, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(differentProxy->isValid()); QVERIFY(differentProxy->isReady()); } void TestDBusProxyFactory::testBogusService() { PendingReady *bogus = mFactory->proxy(QLatin1String("org.bogus.Totally"), QLatin1String("/org/bogus/Totally"), ChannelFactory::create(QDBusConnection::sessionBus()), ContactFactory::create()); QVERIFY(bogus != NULL); QVERIFY(!bogus->proxy().isNull()); QVERIFY(!ConnectionPtr::qObjectCast(bogus->proxy())->isValid()); PendingReady *another = mFactory->proxy(QLatin1String("org.bogus.Totally"), QLatin1String("/org/bogus/Totally"), ChannelFactory::create(QDBusConnection::sessionBus()), ContactFactory::create()); QVERIFY(another != NULL); QVERIFY(!another->proxy().isNull()); QVERIFY(!ConnectionPtr::qObjectCast(another->proxy())->isValid()); // We shouldn't get the same proxy twice ie. a proxy should not be cached if not present on bus // and invalidated because of that, otherwise we'll return an invalid instance from the cache // even if after the service appears on the bus QVERIFY(another->proxy() != bogus->proxy()); // The PendingReady itself should finish with failure QVERIFY(connect(another, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); } void TestDBusProxyFactory::cleanup() { mFactory.reset(); cleanupImpl(); } void TestDBusProxyFactory::cleanupTestCase() { cleanupTestCaseImpl(); } QTEST_MAIN(TestDBusProxyFactory) #include "_gen/dbus-proxy-factory.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/conn-roster-groups.cpp0000644000175200001440000007774612000056607025032 0ustar00collabora-develusers00000000000000#include #include #include #include #define TP_QT_ENABLE_LOWLEVEL_API #include #include #include #include #include #include #include #include #include #include #include #include using namespace Tp; class TestConnRosterGroups : public Test { Q_OBJECT public: TestConnRosterGroups(QObject *parent = 0) : Test(parent), mConnService(0), mContactsAddedToGroup(0), mContactsRemovedFromGroup(0) { } private: void causeCongestion(const ConnectionPtr &conn, const ContactPtr &contact); protected Q_SLOTS: void onGroupAdded(const QString &group); void onGroupRemoved(const QString &group); void onContactAddedToGroup(const QString &group); void onContactRemovedFromGroup(const QString &group); void expectConnInvalidated(); void expectContact(Tp::PendingOperation*); void exitOnStateSuccess(Tp::ContactListState); private Q_SLOTS: void initTestCase(); void init(); void testGroupsAfterStateChange(); void testIntrospectAfterStateChange(); void testRosterGroups(); void testNotADeathTrap(); void cleanup(); void cleanupTestCase(); private: QString mConnName, mConnPath; ExampleContactListConnection *mConnService; ConnectionPtr mConn; ContactPtr mContact; QString mGroupAdded; QString mGroupRemoved; int mContactsAddedToGroup; int mContactsRemovedFromGroup; bool mConnInvalidated; }; void TestConnRosterGroups::causeCongestion(const ConnectionPtr &conn, const ContactPtr &contact) { // Cause some congestion in the roster events queue so we can check that it doesn't cause // inconsistent event reordering for (int i = 0; i < 5; i++) { QString name = QString(QLatin1String("Rush%1")).arg(i); conn->contactManager()->addGroup(name); conn->contactManager()->addContactsToGroup(name, QList() << contact); contact->requestPresenceSubscription(); contact->removePresenceSubscription(); conn->contactManager()->removeGroup(name); } } void TestConnRosterGroups::onGroupAdded(const QString &group) { if (group.startsWith(QLatin1String("Rush"))) { return; } mGroupAdded = group; } void TestConnRosterGroups::onGroupRemoved(const QString &group) { if (group.startsWith(QLatin1String("Rush"))) { return; } mGroupRemoved = group; } void TestConnRosterGroups::onContactAddedToGroup(const QString &group) { if (group.startsWith(QLatin1String("Rush"))) { return; } mContactsAddedToGroup++; } void TestConnRosterGroups::onContactRemovedFromGroup(const QString &group) { if (group.startsWith(QLatin1String("Rush"))) { return; } mContactsRemovedFromGroup++; } void TestConnRosterGroups::expectConnInvalidated() { mConnInvalidated = true; mLoop->exit(0); } void TestConnRosterGroups::expectContact(Tp::PendingOperation *op) { PendingContacts *contacts = qobject_cast(op); QVERIFY(contacts != 0); QVERIFY(contacts->isValid()); QCOMPARE(contacts->contacts().length(), 1); mContact = contacts->contacts()[0]; mLoop->exit(0); } void TestConnRosterGroups::exitOnStateSuccess(Tp::ContactListState state) { qDebug() << "got contact list state" << state; if (state == ContactListStateSuccess) { mLoop->exit(0); } } void TestConnRosterGroups::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("conn-roster-groups"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); } void TestConnRosterGroups::init() { gchar *name; gchar *connPath; GError *error = 0; mConnService = EXAMPLE_CONTACT_LIST_CONNECTION(g_object_new( EXAMPLE_TYPE_CONTACT_LIST_CONNECTION, "account", "me@example.com", "simulation-delay", 0, "protocol", "example-contact-list", NULL)); QVERIFY(mConnService != 0); QVERIFY(tp_base_connection_register(TP_BASE_CONNECTION(mConnService), "foo", &name, &connPath, &error)); QVERIFY(error == 0); QVERIFY(name != 0); QVERIFY(connPath != 0); mConnName = QLatin1String(name); mConnPath = QLatin1String(connPath); g_free(name); g_free(connPath); initImpl(); mConnInvalidated = false; } void TestConnRosterGroups::testGroupsAfterStateChange() { // Create a conn and make the roster groups related features ready mConn = Connection::create(mConnName, mConnPath, ChannelFactory::create(QDBusConnection::sessionBus()), ContactFactory::create()); ContactManagerPtr contactManager = mConn->contactManager(); Features features = Features() << Connection::FeatureRoster << Connection::FeatureRosterGroups; QVERIFY(connect(mConn->becomeReady(features), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mConn->isReady(Connection::FeatureRoster), true); QCOMPARE(mConn->isReady(Connection::FeatureRosterGroups), true); // Now start connecting it, and wait for the ContactManager state to turn to Success QVERIFY(connect(contactManager.data(), SIGNAL(stateChanged(Tp::ContactListState)), SLOT(exitOnStateSuccess(Tp::ContactListState)))); mConn->lowlevel()->requestConnect(); QCOMPARE(mLoop->exec(), 0); QCOMPARE(static_cast(contactManager->state()), static_cast(ContactListStateSuccess)); // The conn should be valid and have the roster groups features ready when it emits Success QVERIFY(mConn->isValid()); QCOMPARE(mConn->isReady(Connection::FeatureRoster), true); QCOMPARE(mConn->isReady(Connection::FeatureRosterGroups), true); // We should have all the group data downloaded now, check for that QStringList expectedGroups; expectedGroups << QLatin1String("Cambridge") << QLatin1String("Francophones") << QLatin1String("Montreal"); expectedGroups.sort(); QStringList groups = contactManager->allKnownGroups(); groups.sort(); QCOMPARE(groups, expectedGroups); // Cambridge { QStringList expectedContacts; expectedContacts << QLatin1String("geraldine@example.com") << QLatin1String("helen@example.com") << QLatin1String("guillaume@example.com") << QLatin1String("sjoerd@example.com"); expectedContacts.sort(); QStringList contacts; Q_FOREACH (const ContactPtr &contact, contactManager->groupContacts(QLatin1String("Cambridge"))) { contacts << contact->id(); } contacts.sort(); QCOMPARE(contacts, expectedContacts); } // Francophones { QStringList expectedContacts; expectedContacts << QLatin1String("olivier@example.com") << QLatin1String("geraldine@example.com") << QLatin1String("guillaume@example.com"); expectedContacts.sort(); QStringList contacts; Q_FOREACH (const ContactPtr &contact, contactManager->groupContacts(QLatin1String("Francophones"))) { contacts << contact->id(); } contacts.sort(); QCOMPARE(contacts, expectedContacts); } // Montreal { QStringList expectedContacts; expectedContacts << QLatin1String("olivier@example.com"); expectedContacts.sort(); QStringList contacts; Q_FOREACH (const ContactPtr &contact, contactManager->groupContacts(QLatin1String("Montreal"))) { contacts << contact->id(); } contacts.sort(); QCOMPARE(contacts, expectedContacts); } } void TestConnRosterGroups::testIntrospectAfterStateChange() { // Create a conn and make the roster feature ready mConn = Connection::create(mConnName, mConnPath, ChannelFactory::create(QDBusConnection::sessionBus()), ContactFactory::create()); ContactManagerPtr contactManager = mConn->contactManager(); Features features = Features() << Connection::FeatureRoster; QVERIFY(connect(mConn->becomeReady(features), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mConn->isReady(Connection::FeatureRoster), true); QCOMPARE(mConn->isReady(Connection::FeatureRosterGroups), false); // Now start connecting it, and wait for the ContactManager state to turn to Success QVERIFY(connect(contactManager.data(), SIGNAL(stateChanged(Tp::ContactListState)), SLOT(exitOnStateSuccess(Tp::ContactListState)))); mConn->lowlevel()->requestConnect(); QCOMPARE(mLoop->exec(), 0); QCOMPARE(static_cast(contactManager->state()), static_cast(ContactListStateSuccess)); // The conn should be valid and have the roster feature ready when it emits Success, but not // RosterGroups because we didn't request it QVERIFY(mConn->isValid()); QCOMPARE(mConn->isReady(Connection::FeatureRoster), true); QCOMPARE(mConn->isReady(Connection::FeatureRosterGroups), false); // We should have roster contacts now, but no groups QVERIFY(!contactManager->allKnownContacts().isEmpty()); QVERIFY(contactManager->allKnownGroups().isEmpty()); // Make RosterGroups ready too features = Features() << Connection::FeatureRosterGroups; QVERIFY(connect(mConn->becomeReady(features), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mConn->isReady(Connection::FeatureRoster), true); QCOMPARE(mConn->isReady(Connection::FeatureRosterGroups), true); // We should still have the contacts, and the state should be success QVERIFY(!contactManager->allKnownContacts().isEmpty()); QCOMPARE(static_cast(contactManager->state()), static_cast(ContactListStateSuccess)); // We should have all the group data downloaded now, check for that QStringList expectedGroups; expectedGroups << QLatin1String("Cambridge") << QLatin1String("Francophones") << QLatin1String("Montreal"); expectedGroups.sort(); QStringList groups = contactManager->allKnownGroups(); groups.sort(); QCOMPARE(groups, expectedGroups); // Cambridge { QStringList expectedContacts; expectedContacts << QLatin1String("geraldine@example.com") << QLatin1String("helen@example.com") << QLatin1String("guillaume@example.com") << QLatin1String("sjoerd@example.com"); expectedContacts.sort(); QStringList contacts; Q_FOREACH (const ContactPtr &contact, contactManager->groupContacts(QLatin1String("Cambridge"))) { contacts << contact->id(); } contacts.sort(); QCOMPARE(contacts, expectedContacts); } } void TestConnRosterGroups::testRosterGroups() { mConn = Connection::create(mConnName, mConnPath, ChannelFactory::create(QDBusConnection::sessionBus()), ContactFactory::create()); QVERIFY(connect(mConn->lowlevel()->requestConnect(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mConn->isReady(), true); QCOMPARE(mConn->status(), ConnectionStatusConnected); Features features = Features() << Connection::FeatureRoster << Connection::FeatureRosterGroups << Connection::FeatureSelfContact; QVERIFY(connect(mConn->becomeReady(features), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mConn->isReady(features), true); QCOMPARE(static_cast(mConn->contactManager()->state()), static_cast(ContactListStateSuccess)); ContactManagerPtr contactManager = mConn->contactManager(); QStringList expectedGroups; expectedGroups << QLatin1String("Cambridge") << QLatin1String("Francophones") << QLatin1String("Montreal"); expectedGroups.sort(); QStringList groups = contactManager->allKnownGroups(); groups.sort(); QCOMPARE(groups, expectedGroups); QString group(QLatin1String("foo")); QVERIFY(contactManager->groupContacts(group).isEmpty()); causeCongestion(mConn, mConn->selfContact()); // add group foo QVERIFY(connect(contactManager.data(), SIGNAL(groupAdded(const QString&)), SLOT(onGroupAdded(const QString&)))); causeCongestion(mConn, mConn->selfContact()); QVERIFY(connect(contactManager->addGroup(group), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(!mGroupAdded.isEmpty()); QCOMPARE(mGroupAdded, group); expectedGroups << group; expectedGroups.sort(); groups = contactManager->allKnownGroups(); groups.sort(); QCOMPARE(groups, expectedGroups); causeCongestion(mConn, mConn->selfContact()); // add Montreal contacts to group foo Contacts contacts = contactManager->groupContacts(QLatin1String("Montreal")); Q_FOREACH (const ContactPtr &contact, contacts) { QVERIFY(connect(contact.data(), SIGNAL(addedToGroup(const QString&)), SLOT(onContactAddedToGroup(const QString&)))); } causeCongestion(mConn, mConn->selfContact()); QVERIFY(connect(contactManager->addContactsToGroup(group, contacts.toList()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mContactsAddedToGroup, contacts.size()); Q_FOREACH (const ContactPtr &contact, contacts) { QVERIFY(contact->groups().contains(group)); } causeCongestion(mConn, mConn->selfContact()); // remove all contacts from group foo contacts = contactManager->groupContacts(group); Q_FOREACH (const ContactPtr &contact, contacts) { QVERIFY(connect(contact.data(), SIGNAL(removedFromGroup(const QString&)), SLOT(onContactRemovedFromGroup(const QString&)))); } causeCongestion(mConn, mConn->selfContact()); QVERIFY(connect(contactManager->removeContactsFromGroup(group, contacts.toList()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mContactsRemovedFromGroup, contacts.size()); Q_FOREACH (const ContactPtr &contact, contacts) { QVERIFY(!contact->groups().contains(group)); } causeCongestion(mConn, mConn->selfContact()); // remove group foo QVERIFY(connect(contactManager.data(), SIGNAL(groupRemoved(const QString&)), SLOT(onGroupRemoved(const QString&)))); causeCongestion(mConn, mConn->selfContact()); QVERIFY(connect(contactManager->removeGroup(group), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(!mGroupRemoved.isEmpty()); QCOMPARE(mGroupRemoved, group); expectedGroups.removeOne(group); expectedGroups.sort(); groups = contactManager->allKnownGroups(); groups.sort(); QCOMPARE(groups, expectedGroups); } /** * Verify that ContactManager isn't a death-trap. * * Background: Connection::contactManager() used to unpredictably waver between NULL and the real * manager when the connection was in the process of being disconnected / otherwise invalidated, * which led to a great many segfaults, which was especially unfortunate considering the * ContactManager methods didn't do much any checks at all. */ void TestConnRosterGroups::testNotADeathTrap() { mConn = Connection::create(mConnName, mConnPath, ChannelFactory::create(QDBusConnection::sessionBus()), ContactFactory::create()); QCOMPARE(mConn->isReady(), false); // Check that the contact manager doesn't crash, but returns an error (because the conn isn't // ready) QVERIFY(!mConn->contactManager().isNull()); QVERIFY(connect(mConn->contactManager()->contactsForIdentifiers(QStringList()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->lowlevel()->requestConnect(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mConn->isReady(), true); QCOMPARE(mConn->status(), ConnectionStatusConnected); // As the conn is now ready, the contact building functions shouldn't return an error now QVERIFY(!mConn->contactManager().isNull()); QVERIFY(connect(mConn->contactManager()->contactsForIdentifiers(QStringList()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->contactsForHandles(UIntList()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->upgradeContacts(QList(), Features()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); // In fact, let's build a contact for future use QVERIFY(connect(mConn->contactManager()->contactsForIdentifiers( QStringList() << QLatin1String("friendorfoe@example.com")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectContact(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(mContact->id() == QLatin1String("friendorfoe@example.com")); // Roster operations SHOULD still fail though, as FeatureRoster isn't ready QVERIFY(connect(mConn->contactManager()->requestPresenceSubscription( QList() << mContact, QLatin1String("I just want to see you fail")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->removePresenceSubscription( QList() << mContact, QLatin1String("I just want to see you fail")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->authorizePresencePublication( QList() << mContact, QLatin1String("I just want to see you fail")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->removePresencePublication( QList() << mContact, QLatin1String("I just want to see you fail")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); // Now, make Roster ready Features features = Features() << Connection::FeatureRoster; QVERIFY(connect(mConn->becomeReady(features), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mConn->isReady(features), true); causeCongestion(mConn, mContact); // The roster functions should work now QVERIFY(connect(mConn->contactManager()->requestPresenceSubscription( QList() << mContact, QLatin1String("Please don't fail")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(mContact->subscriptionState() != Contact::PresenceStateNo); causeCongestion(mConn, mContact); QVERIFY(connect(mConn->contactManager()->removePresenceSubscription( QList() << mContact, QLatin1String("Please don't fail")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mContact->subscriptionState(), Contact::PresenceStateNo); causeCongestion(mConn, mContact); QVERIFY(connect(mConn->contactManager()->authorizePresencePublication( QList() << mContact, QLatin1String("Please don't fail")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); causeCongestion(mConn, mContact); QVERIFY(connect(mConn->contactManager()->removePresencePublication( QList() << mContact, QLatin1String("Please don't fail")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); // ... but still not the RosterGroup ones QVERIFY(connect(mConn->contactManager()->addGroup(QLatin1String("Those who failed")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->removeGroup(QLatin1String("Those who failed")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->addContactsToGroup(QLatin1String("Those who failed"), QList() << mContact), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->removeContactsFromGroup(QLatin1String("Those who failed"), QList() << mContact), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); // Make RosterGroups ready too features = Features() << Connection::FeatureRosterGroups; QVERIFY(connect(mConn->becomeReady(features), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mConn->isReady(features), true); // Now that Core, Roster and RosterGroups are all ready, everything should work QVERIFY(!mConn->contactManager().isNull()); QVERIFY(connect(mConn->contactManager()->contactsForIdentifiers(QStringList()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->contactsForHandles(UIntList()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->upgradeContacts(QList(), Features()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); causeCongestion(mConn, mContact); QVERIFY(connect(mConn->contactManager()->requestPresenceSubscription( QList() << mContact, QLatin1String("Please don't fail")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(mContact->subscriptionState() != Contact::PresenceStateNo); causeCongestion(mConn, mContact); QVERIFY(connect(mConn->contactManager()->removePresenceSubscription( QList() << mContact, QLatin1String("Please don't fail")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mContact->subscriptionState(), Contact::PresenceStateNo); QVERIFY(connect(mConn->contactManager()->authorizePresencePublication( QList() << mContact, QLatin1String("Please don't fail")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->removePresencePublication( QList() << mContact, QLatin1String("Please don't fail")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); causeCongestion(mConn, mContact); QVERIFY(connect(mConn->contactManager()->addGroup(QLatin1String("My successful entourage")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(mConn->contactManager()->allKnownGroups().contains(QLatin1String("My successful entourage"))); causeCongestion(mConn, mContact); QVERIFY(connect(mConn->contactManager()->addContactsToGroup(QLatin1String("My successful entourage"), QList() << mContact), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(mConn->contactManager()-> groupContacts(QLatin1String("My successful entourage")).contains(mContact)); causeCongestion(mConn, mContact); QVERIFY(connect(mConn->contactManager()->removeContactsFromGroup(QLatin1String("My successful entourage"), QList() << mContact), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(!mConn->contactManager()-> groupContacts(QLatin1String("My successful entourage")).contains(mContact)); causeCongestion(mConn, mContact); QVERIFY(connect(mConn->contactManager()->removeGroup(QLatin1String("My successful entourage")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(!mConn->contactManager()->allKnownGroups().contains(QLatin1String("My successful entourage"))); // Now, invalidate the connection by disconnecting it QVERIFY(connect(mConn.data(), SIGNAL(invalidated(Tp::DBusProxy *, const QString &, const QString &)), SLOT(expectConnInvalidated()))); mConn->lowlevel()->requestDisconnect(); // Check that contactManager doesn't go NULL in the process of the connection going invalidated do { QVERIFY(!mConn->contactManager().isNull()); mLoop->processEvents(); } while (!mConnInvalidated); QVERIFY(!mConn->isValid()); QCOMPARE(mConn->status(), ConnectionStatusDisconnected); // Now that the conn is invalidated NOTHING should work anymore QVERIFY(connect(mConn->contactManager()->contactsForIdentifiers(QStringList()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->contactsForHandles(UIntList()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->upgradeContacts(QList(), Features()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->requestPresenceSubscription(QList(), QLatin1String("You fail at life")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->removePresenceSubscription(QList(), QLatin1String("You fail at life")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->authorizePresencePublication(QList(), QLatin1String("You fail at life")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->removePresencePublication(QList(), QLatin1String("You fail at life")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->addGroup(QLatin1String("Future failures")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->removeGroup(QLatin1String("Future failures")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->addContactsToGroup(QLatin1String("Future failures"), QList() << mContact), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->removeContactsFromGroup(QLatin1String("Future failures"), QList() << mContact), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); } void TestConnRosterGroups::cleanup() { mContact.reset(); if (mConn && mConn->requestedFeatures().contains(Connection::FeatureCore)) { QVERIFY(mConnService != NULL); if (TP_BASE_CONNECTION(mConnService)->status != TP_CONNECTION_STATUS_DISCONNECTED) { tp_base_connection_change_status(TP_BASE_CONNECTION(mConnService), TP_CONNECTION_STATUS_DISCONNECTED, TP_CONNECTION_STATUS_REASON_REQUESTED); } while (mConn->isValid()) { mLoop->processEvents(); } } mConn.reset(); if (mConnService != 0) { g_object_unref(mConnService); mConnService = 0; } cleanupImpl(); } void TestConnRosterGroups::cleanupTestCase() { cleanupTestCaseImpl(); } QTEST_MAIN(TestConnRosterGroups) #include "_gen/conn-roster-groups.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/conn-capabilities.cpp0000644000175200001440000000650112000056607024605 0ustar00collabora-develusers00000000000000#include #include #include #include #include #include using namespace Tp; class TestConnCapabilities : public Test { Q_OBJECT public: TestConnCapabilities(QObject *parent = 0) : Test(parent), conn(0) { } private Q_SLOTS: void initTestCase(); void init(); void testCapabilities(); void cleanup(); void cleanupTestCase(); private: TestConnHelper *conn; }; void TestConnCapabilities::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("conn-capabilities"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); } void TestConnCapabilities::init() { initImpl(); } void TestConnCapabilities::testCapabilities() { TestConnHelper *conn = new TestConnHelper(this, EXAMPLE_TYPE_ECHO_2_CONNECTION, "account", "me@example.com", "protocol", "contacts", NULL); QCOMPARE(conn->isReady(), false); // Before the connection is Ready, it doesn't guarantee support for anything but doesn't crash // either if we ask it for something QCOMPARE(conn->client()->capabilities().textChats(), false); QCOMPARE(conn->client()->capabilities().textChatrooms(), false); QCOMPARE(conn->client()->capabilities().streamedMediaCalls(), false); QCOMPARE(conn->client()->capabilities().streamedMediaAudioCalls(), false); QCOMPARE(conn->client()->capabilities().streamedMediaVideoCalls(), false); QCOMPARE(conn->client()->capabilities().streamedMediaVideoCallsWithAudio(), false); QCOMPARE(conn->client()->capabilities().upgradingStreamedMediaCalls(), false); QCOMPARE(conn->connect(), true); // Now we should have the real information on what the connection supports QCOMPARE(conn->client()->capabilities().textChats(), true); QCOMPARE(conn->client()->capabilities().textChatrooms(), false); QCOMPARE(conn->client()->capabilities().streamedMediaCalls(), false); QCOMPARE(conn->client()->capabilities().streamedMediaAudioCalls(), false); QCOMPARE(conn->client()->capabilities().streamedMediaVideoCalls(), false); QCOMPARE(conn->client()->capabilities().streamedMediaVideoCallsWithAudio(), false); QCOMPARE(conn->client()->capabilities().upgradingStreamedMediaCalls(), false); // Now, invalidate the connection by disconnecting it QCOMPARE(conn->disconnect(), true); // Check that no support for anything is again reported QCOMPARE(conn->client()->capabilities().textChats(), false); QCOMPARE(conn->client()->capabilities().textChatrooms(), false); QCOMPARE(conn->client()->capabilities().streamedMediaCalls(), false); QCOMPARE(conn->client()->capabilities().streamedMediaAudioCalls(), false); QCOMPARE(conn->client()->capabilities().streamedMediaVideoCalls(), false); QCOMPARE(conn->client()->capabilities().streamedMediaVideoCallsWithAudio(), false); QCOMPARE(conn->client()->capabilities().upgradingStreamedMediaCalls(), false); delete conn; } void TestConnCapabilities::cleanup() { cleanupImpl(); } void TestConnCapabilities::cleanupTestCase() { cleanupTestCaseImpl(); } QTEST_MAIN(TestConnCapabilities) #include "_gen/conn-capabilities.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/cm-basics.cpp0000644000175200001440000003053612000056607023067 0ustar00collabora-develusers00000000000000#include #include #include #include #include #include #include #include #include #include using namespace Tp; namespace { PresenceSpec getPresenceSpec(const PresenceSpecList &specs, const QString &status) { Q_FOREACH (const PresenceSpec &spec, specs) { if (spec.presence().status() == status) { return spec; } } return PresenceSpec(); } } class TestCmBasics : public Test { Q_OBJECT public: TestCmBasics(QObject *parent = 0) : Test(parent), mCMService(0) { } protected Q_SLOTS: void expectListNamesFinished(Tp::PendingOperation *); void expectPendingStringFinished(Tp::PendingOperation *); private Q_SLOTS: void initTestCase(); void init(); void testBasics(); void testLegacy(); void testListNames(); void cleanup(); void cleanupTestCase(); private: TpBaseConnectionManager *mCMService; Tp::ConnectionManagerPtr mCM; TpBaseConnectionManager *mCMServiceLegacy; Tp::ConnectionManagerPtr mCMLegacy; QStringList mCMNames; QString mPendingStringResult; }; void TestCmBasics::expectListNamesFinished(PendingOperation *op) { TEST_VERIFY_OP(op); PendingStringList *ps = qobject_cast(op); mCMNames = ps->result(); mLoop->exit(0); } void TestCmBasics::expectPendingStringFinished(PendingOperation *op) { TEST_VERIFY_OP(op); PendingString *ps = qobject_cast(op); mPendingStringResult = ps->result(); mLoop->exit(0); } void TestCmBasics::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("cm-basics"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); mCMService = TP_BASE_CONNECTION_MANAGER(g_object_new( EXAMPLE_TYPE_ECHO_2_CONNECTION_MANAGER, NULL)); QVERIFY(mCMService != 0); mCMServiceLegacy = TP_BASE_CONNECTION_MANAGER(g_object_new( TP_TESTS_TYPE_SIMPLE_CONNECTION_MANAGER, NULL)); QVERIFY(mCMServiceLegacy != 0); QVERIFY(tp_base_connection_manager_register(mCMService)); QVERIFY(tp_base_connection_manager_register(mCMServiceLegacy)); } void TestCmBasics::init() { initImpl(); } void TestCmBasics::testBasics() { mCM = ConnectionManager::create(QLatin1String("example_echo_2")); QCOMPARE(mCM->isReady(), false); QVERIFY(connect(mCM->becomeReady(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mCM->isReady(), true); // calling becomeReady() twice is a no-op QVERIFY(connect(mCM->becomeReady(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mCM->isReady(), true); QCOMPARE(mCM->interfaces(), QStringList()); QCOMPARE(mCM->supportedProtocols(), QStringList() << QLatin1String("example")); QVERIFY(mCM->hasProtocol(QLatin1String("example"))); QVERIFY(!mCM->hasProtocol(QLatin1String("not-there"))); ProtocolInfo info = mCM->protocol(QLatin1String("example")); QVERIFY(info.isValid()); QCOMPARE(info.cmName(), QLatin1String("example_echo_2")); QCOMPARE(info.name(), QLatin1String("example")); QCOMPARE(info.hasParameter(QLatin1String("account")), true); QCOMPARE(info.hasParameter(QLatin1String("not-there")), false); QCOMPARE(info.parameters().size(), 1); ProtocolParameter param = info.parameters().at(0); QCOMPARE(param.name(), QLatin1String("account")); QCOMPARE(static_cast(param.type()), static_cast(QVariant::String)); QCOMPARE(param.defaultValue().isNull(), true); QCOMPARE(param.dbusSignature().signature(), QLatin1String("s")); QCOMPARE(param.isRequired(), true); QCOMPARE(param.isRequiredForRegistration(), true); // though it can't register! QCOMPARE(param.isSecret(), false); QVERIFY(param == QLatin1String("account")); ProtocolParameter otherParam = info.parameters().value(1); QVERIFY(!otherParam.isValid()); QCOMPARE(otherParam.name(), QString()); QCOMPARE(otherParam.dbusSignature(), QDBusSignature()); QCOMPARE(otherParam.type(), QVariant::Invalid); QCOMPARE(otherParam.defaultValue(), QVariant()); QCOMPARE(otherParam.isRequired(), false); QCOMPARE(otherParam.isSecret(), false); QCOMPARE(otherParam.isRequiredForRegistration(), false); QCOMPARE(info.canRegister(), false); QCOMPARE(info.capabilities().isSpecificToContact(), false); QCOMPARE(info.capabilities().textChatrooms(), false); QCOMPARE(info.capabilities().textChats(), true); QCOMPARE(info.capabilities().streamedMediaCalls(), false); QCOMPARE(info.capabilities().streamedMediaAudioCalls(), false); QCOMPARE(info.capabilities().streamedMediaVideoCalls(), false); QCOMPARE(info.capabilities().streamedMediaVideoCallsWithAudio(), false); QCOMPARE(info.capabilities().upgradingStreamedMediaCalls(), false); QCOMPARE(info.vcardField(), QLatin1String("x-telepathy-example")); QCOMPARE(info.englishName(), QLatin1String("Echo II example")); QCOMPARE(info.iconName(), QLatin1String("im-icq")); PresenceSpecList statuses = info.allowedPresenceStatuses(); QCOMPARE(statuses.size(), 3); PresenceSpec spec; spec = getPresenceSpec(statuses, QLatin1String("offline")); QCOMPARE(spec.isValid(), true); QVERIFY(spec.presence().type() == ConnectionPresenceTypeOffline); QCOMPARE(spec.maySetOnSelf(), false); QCOMPARE(spec.canHaveStatusMessage(), false); spec = getPresenceSpec(statuses, QLatin1String("dnd")); QCOMPARE(spec.isValid(), true); QVERIFY(spec.presence().type() == ConnectionPresenceTypeBusy); QCOMPARE(spec.maySetOnSelf(), true); QCOMPARE(spec.canHaveStatusMessage(), false); spec = getPresenceSpec(statuses, QLatin1String("available")); QCOMPARE(spec.isValid(), true); QVERIFY(spec.presence().type() == ConnectionPresenceTypeAvailable); QCOMPARE(spec.maySetOnSelf(), true); QCOMPARE(spec.canHaveStatusMessage(), true); AvatarSpec avatarReqs = info.avatarRequirements(); QStringList supportedMimeTypes = avatarReqs.supportedMimeTypes(); supportedMimeTypes.sort(); QCOMPARE(supportedMimeTypes, QStringList() << QLatin1String("image/gif") << QLatin1String("image/jpeg") << QLatin1String("image/png")); QCOMPARE(avatarReqs.minimumHeight(), (uint) 32); QCOMPARE(avatarReqs.maximumHeight(), (uint) 96); QCOMPARE(avatarReqs.recommendedHeight(), (uint) 64); QCOMPARE(avatarReqs.minimumWidth(), (uint) 32); QCOMPARE(avatarReqs.maximumWidth(), (uint) 96); QCOMPARE(avatarReqs.recommendedWidth(), (uint) 64); QCOMPARE(avatarReqs.maximumBytes(), (uint) 37748736); QStringList addressableVCardFields = info.addressableVCardFields(); QCOMPARE(addressableVCardFields, QStringList() << QLatin1String("x-echo2")); QStringList addressableUriSchemes = info.addressableUriSchemes(); QCOMPARE(addressableUriSchemes, QStringList() << QLatin1String("echo2")); mPendingStringResult = QString(); QVERIFY(connect(info.normalizeVCardAddress(QLatin1String("x-EcHo2"), QLatin1String("EcHo2")), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectPendingStringFinished(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mPendingStringResult, QLatin1String("echo2")); mPendingStringResult = QString(); QVERIFY(connect(info.normalizeVCardAddress(QLatin1String("x-unsupported"), QLatin1String("EcHo2")), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectFailure(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); mPendingStringResult = QString(); QVERIFY(connect(info.normalizeContactUri(QLatin1String("eCho2:FooBaR")), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectPendingStringFinished(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mPendingStringResult, QLatin1String("echo2:foobar")); mPendingStringResult = QString(); QVERIFY(connect(info.normalizeContactUri(QLatin1String("unsupported:echo2")), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectFailure(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mCM->supportedProtocols(), QStringList() << QLatin1String("example")); } // Test for a CM which doesn't implement Protocol objects void TestCmBasics::testLegacy() { mCMLegacy = ConnectionManager::create(QLatin1String("simple")); QCOMPARE(mCMLegacy->isReady(), false); QVERIFY(connect(mCMLegacy->becomeReady(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mCMLegacy->isReady(), true); QCOMPARE(mCMLegacy->interfaces(), QStringList()); QCOMPARE(mCMLegacy->supportedProtocols(), QStringList() << QLatin1String("simple")); QVERIFY(mCMLegacy->hasProtocol(QLatin1String("simple"))); QVERIFY(!mCMLegacy->hasProtocol(QLatin1String("not-there"))); ProtocolInfo info = mCMLegacy->protocol(QLatin1String("simple")); QVERIFY(info.isValid()); QCOMPARE(info.cmName(), QLatin1String("simple")); QCOMPARE(info.name(), QLatin1String("simple")); QCOMPARE(info.hasParameter(QLatin1String("account")), true); QCOMPARE(info.hasParameter(QLatin1String("not-there")), false); QCOMPARE(info.parameters().size(), 1); ProtocolParameter param = info.parameters().at(0); QCOMPARE(param.name(), QLatin1String("account")); QCOMPARE(static_cast(param.type()), static_cast(QVariant::String)); QCOMPARE(param.defaultValue().isNull(), true); QCOMPARE(param.dbusSignature().signature(), QLatin1String("s")); QCOMPARE(param.isRequired(), true); QCOMPARE(param.isRequiredForRegistration(), true); QCOMPARE(param.isSecret(), false); QVERIFY(param == QLatin1String("account")); QCOMPARE(info.canRegister(), false); // Protocol capabilities semantics is "an actual connection supports whatever I claim, or // less", so for a service with no actual Protocol implementation everything should be // assumed to be possible at this point QCOMPARE(info.capabilities().isSpecificToContact(), false); QCOMPARE(info.capabilities().textChatrooms(), true); QCOMPARE(info.capabilities().textChats(), true); QCOMPARE(info.capabilities().streamedMediaCalls(), true); QCOMPARE(info.capabilities().streamedMediaAudioCalls(), true); QCOMPARE(info.capabilities().streamedMediaVideoCalls(), true); QCOMPARE(info.capabilities().streamedMediaVideoCallsWithAudio(), true); QCOMPARE(info.capabilities().upgradingStreamedMediaCalls(), true); QCOMPARE(info.vcardField(), QLatin1String("")); QCOMPARE(info.englishName(), QLatin1String("Simple")); QCOMPARE(info.iconName(), QLatin1String("im-simple")); QCOMPARE(mCMLegacy->supportedProtocols(), QStringList() << QLatin1String("simple")); } // TODO add a test for the case of getting the information from a .manager file, and if possible, // also for using the fallbacks for the CM::Protocols property not being present. void TestCmBasics::testListNames() { QVERIFY(connect(ConnectionManager::listNames(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectListNamesFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mCMNames.size(), 3); QVERIFY(mCMNames.contains(QLatin1String("simple"))); QVERIFY(mCMNames.contains(QLatin1String("example_echo_2"))); QVERIFY(mCMNames.contains(QLatin1String("spurious"))); } void TestCmBasics::cleanup() { mCM.reset(); mCMLegacy.reset(); cleanupImpl(); } void TestCmBasics::cleanupTestCase() { if (mCMService) { g_object_unref(mCMService); mCMService = 0; } if (mCMServiceLegacy) { g_object_unref(mCMServiceLegacy); mCMServiceLegacy = 0; } cleanupTestCaseImpl(); } QTEST_MAIN(TestCmBasics) #include "_gen/cm-basics.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/contacts.cpp0000644000175200001440000007366712000056607023060 0ustar00collabora-develusers00000000000000#include #include #include #include #include #define TP_QT_ENABLE_LOWLEVEL_API #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace Tp; class TestContacts : public Test { Q_OBJECT public: TestContacts(QObject *parent = 0) : Test(parent), mConnService(0) { } protected Q_SLOTS: void expectConnReady(Tp::ConnectionStatus, Tp::ConnectionStatusReason); void expectConnInvalidated(); void expectPendingContactsFinished(Tp::PendingOperation *); private Q_SLOTS: void initTestCase(); void init(); void testSupport(); void testSelfContact(); void testForHandles(); void testForIdentifiers(); void testFeatures(); void testFeaturesNotRequested(); void testUpgrade(); void testSelfContactFallback(); void cleanup(); void cleanupTestCase(); private: QString mConnName, mConnPath; TpTestsContactsConnection *mConnService; ConnectionPtr mConn; QList mContacts; Tp::UIntList mInvalidHandles; }; void TestContacts::expectConnReady(Tp::ConnectionStatus newStatus, Tp::ConnectionStatusReason newStatusReason) { switch (newStatus) { case ConnectionStatusDisconnected: qWarning() << "Disconnected"; mLoop->exit(1); break; case ConnectionStatusConnecting: /* do nothing */ break; case ConnectionStatusConnected: qDebug() << "Ready"; mLoop->exit(0); break; default: qWarning().nospace() << "What sort of status is " << newStatus << "?!"; mLoop->exit(2); break; } } void TestContacts::expectConnInvalidated() { mLoop->exit(0); } void TestContacts::expectPendingContactsFinished(PendingOperation *op) { TEST_VERIFY_OP(op); PendingContacts *pending = qobject_cast(op); mContacts = pending->contacts(); if (pending->isForHandles()) { mInvalidHandles = pending->invalidHandles(); } mLoop->exit(0); } void TestContacts::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("contacts"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); gchar *name; gchar *connPath; GError *error = 0; mConnService = TP_TESTS_CONTACTS_CONNECTION(g_object_new( TP_TESTS_TYPE_CONTACTS_CONNECTION, "account", "me@example.com", "protocol", "simple", NULL)); QVERIFY(mConnService != 0); QVERIFY(tp_base_connection_register(TP_BASE_CONNECTION(mConnService), "contacts", &name, &connPath, &error)); QVERIFY(error == 0); QVERIFY(name != 0); QVERIFY(connPath != 0); mConnName = QLatin1String(name); mConnPath = QLatin1String(connPath); g_free(name); g_free(connPath); mConn = Connection::create(mConnName, mConnPath, ChannelFactory::create(QDBusConnection::sessionBus()), ContactFactory::create()); QCOMPARE(mConn->isReady(), false); mConn->lowlevel()->requestConnect(); Features features = Features() << Connection::FeatureSelfContact; QVERIFY(connect(mConn->becomeReady(features), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mConn->isReady(features), true); if (mConn->status() != ConnectionStatusConnected) { QVERIFY(connect(mConn.data(), SIGNAL(statusChanged(Tp::ConnectionStatus, Tp::ConnectionStatusReason)), SLOT(expectConnReady(Tp::ConnectionStatus, Tp::ConnectionStatusReason)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(disconnect(mConn.data(), SIGNAL(statusChanged(Tp::ConnectionStatus, Tp::ConnectionStatusReason)), this, SLOT(expectConnReady(Tp::ConnectionStatus, Tp::ConnectionStatusReason)))); QCOMPARE(mConn->status(), ConnectionStatusConnected); } } void TestContacts::init() { initImpl(); } void TestContacts::testSupport() { QCOMPARE(mConn->contactManager()->connection(), mConn); QVERIFY(!mConn->lowlevel()->contactAttributeInterfaces().isEmpty()); QVERIFY(mConn->lowlevel()->contactAttributeInterfaces().contains( TP_QT_IFACE_CONNECTION)); QVERIFY(mConn->lowlevel()->contactAttributeInterfaces().contains( TP_QT_IFACE_CONNECTION_INTERFACE_ALIASING)); QVERIFY(mConn->lowlevel()->contactAttributeInterfaces().contains( TP_QT_IFACE_CONNECTION_INTERFACE_AVATARS)); QVERIFY(mConn->lowlevel()->contactAttributeInterfaces().contains( TP_QT_IFACE_CONNECTION_INTERFACE_SIMPLE_PRESENCE)); QVERIFY(!mConn->lowlevel()->contactAttributeInterfaces().contains( QLatin1String("org.freedesktop.Telepathy.Connection.Interface.Addressing.DRAFT"))); Features supportedFeatures = mConn->contactManager()->supportedFeatures(); QVERIFY(!supportedFeatures.isEmpty()); QVERIFY(supportedFeatures.contains(Contact::FeatureAlias)); QVERIFY(supportedFeatures.contains(Contact::FeatureAvatarToken)); QVERIFY(supportedFeatures.contains(Contact::FeatureSimplePresence)); QVERIFY(!supportedFeatures.contains(Contact::FeatureAddresses)); } void TestContacts::testSelfContact() { ContactPtr selfContact = mConn->selfContact(); QVERIFY(selfContact != 0); QCOMPARE(selfContact->handle()[0], mConn->selfHandle()); QCOMPARE(selfContact->id(), QString(QLatin1String("me@example.com"))); Features features = Features() << Contact::FeatureAlias << Contact::FeatureAvatarToken << Contact::FeatureSimplePresence; QVERIFY(connect(selfContact->manager()->upgradeContacts( QList() << selfContact, features), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectPendingContactsFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(selfContact->alias(), QString(QLatin1String("me@example.com"))); QVERIFY(!selfContact->isAvatarTokenKnown()); QCOMPARE(selfContact->presence().status(), QString(QLatin1String("available"))); QCOMPARE(selfContact->presence().type(), Tp::ConnectionPresenceTypeAvailable); QCOMPARE(selfContact->presence().statusMessage(), QString(QLatin1String(""))); features << Contact::FeatureInfo; QVERIFY(connect(selfContact->manager()->upgradeContacts( QList() << selfContact, features), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectPendingContactsFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(selfContact->alias(), QString(QLatin1String("me@example.com"))); QVERIFY(!selfContact->isAvatarTokenKnown()); QCOMPARE(selfContact->presence().status(), QString(QLatin1String("available"))); QCOMPARE(selfContact->presence().type(), Tp::ConnectionPresenceTypeAvailable); QCOMPARE(selfContact->presence().statusMessage(), QString(QLatin1String(""))); } void TestContacts::testForHandles() { Tp::UIntList handles; TpHandleRepoIface *serviceRepo = tp_base_connection_get_handles(TP_BASE_CONNECTION(mConnService), TP_HANDLE_TYPE_CONTACT); // Set up a few valid handles handles << tp_handle_ensure(serviceRepo, "alice", NULL, NULL); QVERIFY(handles[0] != 0); handles << tp_handle_ensure(serviceRepo, "bob", NULL, NULL); QVERIFY(handles[1] != 0); // Put one probably invalid one in between handles << 31337; QVERIFY(!tp_handle_is_valid(serviceRepo, handles[2], NULL)); // Then another valid one handles << tp_handle_ensure(serviceRepo, "chris", NULL, NULL); QVERIFY(handles[3] != 0); // And yet another invalid one handles << 12345; QVERIFY(!tp_handle_is_valid(serviceRepo, handles[4], NULL)); // Get contacts for the mixture of valid and invalid handles PendingContacts *pending = mConn->contactManager()->contactsForHandles(handles); // Test the closure accessors QCOMPARE(pending->manager(), mConn->contactManager()); QCOMPARE(pending->features(), Features()); QVERIFY(pending->isForHandles()); QVERIFY(!pending->isForIdentifiers()); QVERIFY(!pending->isUpgrade()); QCOMPARE(pending->handles(), handles); // Wait for the contacts to be built QVERIFY(connect(pending, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectPendingContactsFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); // There should be 3 resulting contacts and 2 handles found to be invalid QCOMPARE(mContacts.size(), 3); QCOMPARE(mInvalidHandles.size(), 2); QCOMPARE(mInvalidHandles[0], handles[2]); QCOMPARE(mInvalidHandles[1], handles[4]); // Check the contact contents for (int i = 0; i < 3; i++) { QVERIFY(mContacts[i] != NULL); QCOMPARE(mContacts[i]->manager(), mConn->contactManager()); QCOMPARE(mContacts[i]->requestedFeatures(), Features()); QCOMPARE(mContacts[i]->actualFeatures(), Features()); } QCOMPARE(mContacts[0]->handle()[0], handles[0]); QCOMPARE(mContacts[1]->handle()[0], handles[1]); QCOMPARE(mContacts[2]->handle()[0], handles[3]); QCOMPARE(mContacts[0]->id(), QString(QLatin1String("alice"))); QCOMPARE(mContacts[1]->id(), QString(QLatin1String("bob"))); QCOMPARE(mContacts[2]->id(), QString(QLatin1String("chris"))); // Save the contacts, and make a new request, replacing one of the invalid handles with a valid // one QList saveContacts = mContacts; handles[2] = tp_handle_ensure(serviceRepo, "dora", NULL, NULL); QVERIFY(handles[2] != 0); pending = mConn->contactManager()->contactsForHandles(handles); QVERIFY(connect(pending, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectPendingContactsFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); // Check that we got the correct number of contacts back QCOMPARE(mContacts.size(), 4); QCOMPARE(mInvalidHandles.size(), 1); // Check that the contacts we already had were returned for the initial three QCOMPARE(saveContacts[0], mContacts[0]); QCOMPARE(saveContacts[1], mContacts[1]); QCOMPARE(saveContacts[2], mContacts[3]); // Check that the new contact is OK too QCOMPARE(mContacts[2]->handle()[0], handles[2]); QCOMPARE(mContacts[2]->id(), QString(QLatin1String("dora"))); // Make the contacts go out of scope, starting releasing their handles, and finish that saveContacts.clear(); mContacts.clear(); mLoop->processEvents(); processDBusQueue(mConn.data()); } void TestContacts::testForIdentifiers() { QStringList validIDs = QStringList() << QLatin1String("Alice") << QLatin1String("Bob") << QLatin1String("Chris"); QStringList invalidIDs = QStringList() << QLatin1String("Not valid") << QLatin1String("Not valid either"); TpHandleRepoIface *serviceRepo = tp_base_connection_get_handles(TP_BASE_CONNECTION(mConnService), TP_HANDLE_TYPE_CONTACT); QStringList toCheck; // Check that a request with just the invalid IDs fails PendingContacts *fails = mConn->contactManager()->contactsForIdentifiers(invalidIDs); QVERIFY(connect(fails, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); toCheck = fails->invalidIdentifiers().keys(); toCheck.sort(); invalidIDs.sort(); QCOMPARE(toCheck, invalidIDs); // A request with both valid and invalid IDs should succeed fails = mConn->contactManager()->contactsForIdentifiers(invalidIDs + validIDs + invalidIDs); QVERIFY(connect(fails, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(fails->validIdentifiers(), validIDs); toCheck = fails->invalidIdentifiers().keys(); toCheck.sort(); invalidIDs.sort(); QCOMPARE(toCheck, invalidIDs); // Go on to the meat: valid IDs PendingContacts *pending = mConn->contactManager()->contactsForIdentifiers(validIDs); // Test the closure accessors QCOMPARE(pending->manager(), mConn->contactManager()); QCOMPARE(pending->features(), Features()); QVERIFY(!pending->isForHandles()); QVERIFY(pending->isForIdentifiers()); QVERIFY(!pending->isUpgrade()); QCOMPARE(pending->identifiers(), validIDs); // Finish it QVERIFY(connect(pending, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectPendingContactsFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); // Check that there are 3 contacts consistent with the request QCOMPARE(mContacts.size(), 3); for (int i = 0; i < mContacts.size(); i++) { QVERIFY(mContacts[i] != NULL); QCOMPARE(mContacts[i]->manager(), mConn->contactManager()); QVERIFY(tp_handle_is_valid(serviceRepo, mContacts[i]->handle()[0], NULL)); QCOMPARE(mContacts[i]->requestedFeatures(), Features()); QCOMPARE(mContacts[i]->actualFeatures(), Features()); } QCOMPARE(mContacts[0]->id(), QString(QLatin1String("alice"))); QCOMPARE(mContacts[1]->id(), QString(QLatin1String("bob"))); QCOMPARE(mContacts[2]->id(), QString(QLatin1String("chris"))); // Make the contacts go out of scope, starting releasing their handles, and finish that (but // save their handles first) Tp::UIntList saveHandles = Tp::UIntList() << mContacts[0]->handle()[0] << mContacts[1]->handle()[0] << mContacts[2]->handle()[0]; mContacts.clear(); mLoop->processEvents(); processDBusQueue(mConn.data()); } void TestContacts::testFeatures() { QStringList ids = QStringList() << QLatin1String("alice") << QLatin1String("bob") << QLatin1String("chris"); const char *initialAliases[] = { "Alice in Wonderland", "Bob the Builder", "Chris Sawyer" }; const char *latterAliases[] = { "Alice Through the Looking Glass", "Bob the Pensioner" }; const char *initialTokens[] = { "bbbbb", "ccccc" }; const char *latterTokens[] = { "AAAA", "BBBB" }; static TpTestsContactsConnectionPresenceStatusIndex initialStatuses[] = { TP_TESTS_CONTACTS_CONNECTION_STATUS_AVAILABLE, TP_TESTS_CONTACTS_CONNECTION_STATUS_BUSY, TP_TESTS_CONTACTS_CONNECTION_STATUS_AWAY }; static TpTestsContactsConnectionPresenceStatusIndex latterStatuses[] = { TP_TESTS_CONTACTS_CONNECTION_STATUS_AWAY, TP_TESTS_CONTACTS_CONNECTION_STATUS_AVAILABLE, }; const char *initialMessages[] = { "", "Fixing it", "GON OUT BACKSON" }; const char *latterMessages[] = { "Having some carrots", "Done building for life, yay", }; Features features = Features() << Contact::FeatureAlias << Contact::FeatureAvatarToken << Contact::FeatureSimplePresence; TpHandleRepoIface *serviceRepo = tp_base_connection_get_handles(TP_BASE_CONNECTION(mConnService), TP_HANDLE_TYPE_CONTACT); // Get test handles Tp::UIntList handles; for (int i = 0; i < 3; i++) { handles.push_back(tp_handle_ensure(serviceRepo, ids[i].toLatin1().constData(), NULL, NULL)); QVERIFY(handles[i] != 0); } // Set the initial attributes tp_tests_contacts_connection_change_aliases(mConnService, 3, handles.toVector().constData(), initialAliases); tp_tests_contacts_connection_change_avatar_tokens(mConnService, 2, handles.toVector().constData() + 1, initialTokens); tp_tests_contacts_connection_change_presences(mConnService, 3, handles.toVector().constData(), initialStatuses, initialMessages); // Build contacts PendingContacts *pending = mConn->contactManager()->contactsForHandles(handles, features); QVERIFY(connect(pending, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectPendingContactsFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); // Check the contact contents QCOMPARE(mContacts.size(), 3); for (int i = 0; i < 3; i++) { QCOMPARE(mContacts[i]->handle()[0], handles[i]); QCOMPARE(mContacts[i]->id(), ids[i]); QVERIFY((features - mContacts[i]->requestedFeatures()).isEmpty()); QVERIFY((mContacts[i]->actualFeatures() - mContacts[i]->requestedFeatures()).isEmpty()); QVERIFY(mContacts[i]->actualFeatures().contains(Contact::FeatureAlias)); QCOMPARE(mContacts[i]->alias(), QString(QLatin1String(initialAliases[i]))); QVERIFY(mContacts[i]->actualFeatures().contains(Contact::FeatureAvatarToken)); QVERIFY(mContacts[i]->actualFeatures().contains(Contact::FeatureSimplePresence)); QCOMPARE(mContacts[i]->presence().statusMessage(), QString(QLatin1String(initialMessages[i]))); } // Check that there's no known avatar token for the first contact, but that there is for the // two others QVERIFY(!mContacts[0]->isAvatarTokenKnown()); QVERIFY(mContacts[1]->isAvatarTokenKnown()); QVERIFY(mContacts[2]->isAvatarTokenKnown()); QCOMPARE(mContacts[0]->avatarToken(), QString(QLatin1String(""))); QCOMPARE(mContacts[1]->avatarToken(), QString(QLatin1String(initialTokens[0]))); QCOMPARE(mContacts[2]->avatarToken(), QString(QLatin1String(initialTokens[1]))); QCOMPARE(mContacts[0]->presence().status(), QString(QLatin1String("available"))); QCOMPARE(mContacts[1]->presence().status(), QString(QLatin1String("busy"))); QCOMPARE(mContacts[2]->presence().status(), QString(QLatin1String("away"))); QCOMPARE(mContacts[0]->presence().type(), Tp::ConnectionPresenceTypeAvailable); QCOMPARE(mContacts[1]->presence().type(), Tp::ConnectionPresenceTypeBusy); QCOMPARE(mContacts[2]->presence().type(), Tp::ConnectionPresenceTypeAway); // Change some of the contacts to a new set of attributes tp_tests_contacts_connection_change_aliases(mConnService, 2, handles.toVector().constData(), latterAliases); tp_tests_contacts_connection_change_avatar_tokens(mConnService, 2, handles.toVector().constData(), latterTokens); tp_tests_contacts_connection_change_presences(mConnService, 2, handles.toVector().constData(), latterStatuses, latterMessages); mLoop->processEvents(); processDBusQueue(mConn.data()); // Check that the attributes were updated in the Contact objects for (int i = 0; i < 3; i++) { QCOMPARE(mContacts[i]->handle()[0], handles[i]); QCOMPARE(mContacts[i]->id(), ids[i]); QVERIFY((features - mContacts[i]->requestedFeatures()).isEmpty()); QVERIFY((mContacts[i]->actualFeatures() - mContacts[i]->requestedFeatures()).isEmpty()); QVERIFY(mContacts[i]->actualFeatures().contains(Contact::FeatureAlias)); QVERIFY(mContacts[i]->actualFeatures().contains(Contact::FeatureAvatarToken)); QVERIFY(mContacts[i]->actualFeatures().contains(Contact::FeatureSimplePresence)); QVERIFY(mContacts[i]->isAvatarTokenKnown()); } QCOMPARE(mContacts[0]->alias(), QString(QLatin1String(latterAliases[0]))); QCOMPARE(mContacts[1]->alias(), QString(QLatin1String(latterAliases[1]))); QCOMPARE(mContacts[2]->alias(), QString(QLatin1String(initialAliases[2]))); QCOMPARE(mContacts[0]->avatarToken(), QString(QLatin1String(latterTokens[0]))); QCOMPARE(mContacts[1]->avatarToken(), QString(QLatin1String(latterTokens[1]))); QCOMPARE(mContacts[2]->avatarToken(), QString(QLatin1String(initialTokens[1]))); QCOMPARE(mContacts[0]->presence().status(), QString(QLatin1String("away"))); QCOMPARE(mContacts[1]->presence().status(), QString(QLatin1String("available"))); QCOMPARE(mContacts[2]->presence().status(), QString(QLatin1String("away"))); QCOMPARE(mContacts[0]->presence().type(), Tp::ConnectionPresenceTypeAway); QCOMPARE(mContacts[1]->presence().type(), Tp::ConnectionPresenceTypeAvailable); QCOMPARE(mContacts[2]->presence().type(), Tp::ConnectionPresenceTypeAway); QCOMPARE(mContacts[0]->presence().statusMessage(), QString(QLatin1String(latterMessages[0]))); QCOMPARE(mContacts[1]->presence().statusMessage(), QString(QLatin1String(latterMessages[1]))); QCOMPARE(mContacts[2]->presence().statusMessage(), QString(QLatin1String(initialMessages[2]))); // Make the contacts go out of scope, starting releasing their handles, and finish that mContacts.clear(); mLoop->processEvents(); processDBusQueue(mConn.data()); } void TestContacts::testFeaturesNotRequested() { // Test ids and corresponding handles QStringList ids = QStringList() << QLatin1String("alice") << QLatin1String("bob") << QLatin1String("chris"); TpHandleRepoIface *serviceRepo = tp_base_connection_get_handles(TP_BASE_CONNECTION(mConnService), TP_HANDLE_TYPE_CONTACT); Tp::UIntList handles; for (int i = 0; i < 3; i++) { handles.push_back(tp_handle_ensure(serviceRepo, ids[i].toLatin1().constData(), NULL, NULL)); QVERIFY(handles[i] != 0); } // Build contacts (note: no features) PendingContacts *pending = mConn->contactManager()->contactsForHandles(handles); QVERIFY(connect(pending, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectPendingContactsFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); // Check that the feature accessors return sensible fallback values (note: the warnings are // intentional - however, I'm not quite sure if they should be just debug (like in tp-glib)) QCOMPARE(mContacts.size(), 3); for (int i = 0; i < 3; i++) { ContactPtr contact = mContacts[i]; QVERIFY(contact->requestedFeatures().isEmpty()); QVERIFY(contact->actualFeatures().isEmpty()); QCOMPARE(contact->alias(), contact->id()); QVERIFY(!contact->isAvatarTokenKnown()); QCOMPARE(contact->avatarToken(), QString(QLatin1String(""))); QCOMPARE(contact->presence().isValid(), false); } // Make the contacts go out of scope, starting releasing their handles, and finish that mContacts.clear(); mLoop->processEvents(); processDBusQueue(mConn.data()); } void TestContacts::testUpgrade() { QStringList ids = QStringList() << QLatin1String("alice") << QLatin1String("bob") << QLatin1String("chris"); const char *aliases[] = { "Alice in Wonderland", "Bob The Builder", "Chris Sawyer" }; const char *tokens[] = { "aaaaa", "bbbbb", "ccccc" }; static TpTestsContactsConnectionPresenceStatusIndex statuses[] = { TP_TESTS_CONTACTS_CONNECTION_STATUS_AVAILABLE, TP_TESTS_CONTACTS_CONNECTION_STATUS_BUSY, TP_TESTS_CONTACTS_CONNECTION_STATUS_AWAY }; const char *messages[] = { "", "Fixing it", "GON OUT BACKSON" }; TpHandleRepoIface *serviceRepo = tp_base_connection_get_handles(TP_BASE_CONNECTION(mConnService), TP_HANDLE_TYPE_CONTACT); Tp::UIntList handles; for (int i = 0; i < 3; i++) { handles.push_back(tp_handle_ensure(serviceRepo, ids[i].toLatin1().constData(), NULL, NULL)); QVERIFY(handles[i] != 0); } tp_tests_contacts_connection_change_aliases(mConnService, 3, handles.toVector().constData(), aliases); tp_tests_contacts_connection_change_avatar_tokens(mConnService, 3, handles.toVector().constData(), tokens); tp_tests_contacts_connection_change_presences(mConnService, 3, handles.toVector().constData(), statuses, messages); PendingContacts *pending = mConn->contactManager()->contactsForHandles(handles); // Wait for the contacts to be built QVERIFY(connect(pending, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectPendingContactsFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); // There should be 3 resulting contacts - save them for future reference QCOMPARE(mContacts.size(), 3); QList saveContacts = mContacts; // Upgrade them Features features = Features() << Contact::FeatureAlias << Contact::FeatureAvatarToken << Contact::FeatureSimplePresence; pending = mConn->contactManager()->upgradeContacts(saveContacts, features); // Test the closure accessors QCOMPARE(pending->manager(), mConn->contactManager()); QCOMPARE(pending->features(), features); QVERIFY(!pending->isForHandles()); QVERIFY(!pending->isForIdentifiers()); QVERIFY(pending->isUpgrade()); QCOMPARE(pending->contactsToUpgrade(), saveContacts); // Wait for the contacts to be built QVERIFY(connect(pending, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectPendingContactsFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); // Check that we got the correct contacts back QCOMPARE(mContacts, saveContacts); // Check the contact contents for (int i = 0; i < 3; i++) { QCOMPARE(mContacts[i]->handle()[0], handles[i]); QCOMPARE(mContacts[i]->id(), ids[i]); QVERIFY((features - mContacts[i]->requestedFeatures()).isEmpty()); QVERIFY((mContacts[i]->actualFeatures() - mContacts[i]->requestedFeatures()).isEmpty()); QVERIFY(mContacts[i]->actualFeatures().contains(Contact::FeatureAlias)); QCOMPARE(mContacts[i]->alias(), QString(QLatin1String(aliases[i]))); QVERIFY(mContacts[i]->actualFeatures().contains(Contact::FeatureAvatarToken)); QVERIFY(mContacts[i]->isAvatarTokenKnown()); QCOMPARE(mContacts[i]->avatarToken(), QString(QLatin1String(tokens[i]))); QVERIFY(mContacts[i]->actualFeatures().contains(Contact::FeatureSimplePresence)); QCOMPARE(mContacts[i]->presence().statusMessage(), QString(QLatin1String(messages[i]))); } QCOMPARE(mContacts[0]->presence().status(), QString(QLatin1String("available"))); QCOMPARE(mContacts[1]->presence().status(), QString(QLatin1String("busy"))); QCOMPARE(mContacts[2]->presence().status(), QString(QLatin1String("away"))); QCOMPARE(mContacts[0]->presence().type(), Tp::ConnectionPresenceTypeAvailable); QCOMPARE(mContacts[1]->presence().type(), Tp::ConnectionPresenceTypeBusy); QCOMPARE(mContacts[2]->presence().type(), Tp::ConnectionPresenceTypeAway); // Make the contacts go out of scope, starting releasing their handles, and finish that saveContacts.clear(); mContacts.clear(); mLoop->processEvents(); processDBusQueue(mConn.data()); } void TestContacts::testSelfContactFallback() { gchar *name; gchar *connPath; GError *error = 0; TpTestsSimpleConnection *connService; connService = TP_TESTS_SIMPLE_CONNECTION(g_object_new( TP_TESTS_TYPE_SIMPLE_CONNECTION, "account", "me@example.com", "protocol", "simple", NULL)); QVERIFY(connService != 0); QVERIFY(tp_base_connection_register(TP_BASE_CONNECTION(connService), "simple", &name, &connPath, &error)); QVERIFY(error == 0); QVERIFY(name != 0); QVERIFY(connPath != 0); ConnectionPtr conn = Connection::create(QLatin1String(name), QLatin1String(connPath), ChannelFactory::create(QDBusConnection::sessionBus()), ContactFactory::create()); g_free(name); g_free(connPath); QCOMPARE(conn->isReady(), false); Features features = Features() << Connection::FeatureSelfContact; QVERIFY(connect(conn->lowlevel()->requestConnect(features), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(conn->isReady(features), true); ContactPtr selfContact = conn->selfContact(); QVERIFY(selfContact != 0); QCOMPARE(selfContact->handle()[0], conn->selfHandle()); QCOMPARE(selfContact->id(), QString(QLatin1String("me@example.com"))); QCOMPARE(selfContact->alias(), QString(QLatin1String("me@example.com"))); QVERIFY(!selfContact->isAvatarTokenKnown()); QCOMPARE(selfContact->presence().isValid(), false); tp_tests_simple_connection_inject_disconnect(connService); if (conn->isValid()) { QVERIFY(connect(conn.data(), SIGNAL(invalidated(Tp::DBusProxy *, const QString &, const QString &)), mLoop, SLOT(quit()))); QCOMPARE(mLoop->exec(), 0); } g_object_unref(connService); } void TestContacts::cleanup() { cleanupImpl(); } void TestContacts::cleanupTestCase() { if (!mContacts.isEmpty()) { mContacts.clear(); } if (!mInvalidHandles.isEmpty()) { mInvalidHandles.clear(); } if (mConn) { // Disconnect and wait for the readiness change QVERIFY(connect(mConn->lowlevel()->requestDisconnect(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); if (mConn->isValid()) { QVERIFY(connect(mConn.data(), SIGNAL(invalidated(Tp::DBusProxy *, QString, QString)), SLOT(expectConnInvalidated()))); QCOMPARE(mLoop->exec(), 0); } } if (mConnService != 0) { g_object_unref(mConnService); mConnService = 0; } cleanupTestCaseImpl(); } QTEST_MAIN(TestContacts) #include "_gen/contacts.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/conn-introspect-cornercases.cpp0000644000175200001440000004064212000056607026657 0ustar00collabora-develusers00000000000000#include #include #include #include #define TP_QT_ENABLE_LOWLEVEL_API #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace Tp; class TestConnIntrospectCornercases : public Test { Q_OBJECT public: TestConnIntrospectCornercases(QObject *parent = 0) : Test(parent), mConnService(0), mNumSelfHandleChanged(0) { } protected Q_SLOTS: void expectConnInvalidated(); void onSelfHandleChanged(uint); private Q_SLOTS: void initTestCase(); void init(); void testSelfHandleChangeBeforeConnecting(); void testSelfHandleChangeWhileBuilding(); void testSlowpath(); void testStatusChange(); void testNoRoster(); void cleanup(); void cleanupTestCase(); private: TpBaseConnection *mConnService; ConnectionPtr mConn; QList mStatuses; int mNumSelfHandleChanged; }; void TestConnIntrospectCornercases::expectConnInvalidated() { qDebug() << "conn invalidated"; mLoop->exit(0); } void TestConnIntrospectCornercases::onSelfHandleChanged(uint handle) { qDebug() << "got new self handle" << handle; mNumSelfHandleChanged++; } void TestConnIntrospectCornercases::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("conn-introspect-cornercases"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); } void TestConnIntrospectCornercases::init() { initImpl(); QVERIFY(mConn.isNull()); QVERIFY(mConnService == 0); QVERIFY(mStatuses.empty()); QCOMPARE(mNumSelfHandleChanged, 0); // don't create the client- or service-side connection objects here, as it's expected that many // different types of service connections with different initial states need to be used } void TestConnIntrospectCornercases::testSelfHandleChangeBeforeConnecting() { gchar *name; gchar *connPath; GError *error = 0; TpTestsSimpleConnection *simpleConnService = TP_TESTS_SIMPLE_CONNECTION( g_object_new( TP_TESTS_TYPE_SIMPLE_CONNECTION, "account", "me@example.com", "protocol", "simple", NULL)); QVERIFY(simpleConnService != 0); mConnService = TP_BASE_CONNECTION(simpleConnService); QVERIFY(mConnService != 0); QVERIFY(tp_base_connection_register(mConnService, "simple", &name, &connPath, &error)); QVERIFY(error == 0); mConn = Connection::create(QLatin1String(name), QLatin1String(connPath), ChannelFactory::create(QDBusConnection::sessionBus()), ContactFactory::create()); QCOMPARE(mConn->isReady(), false); g_free(name); name = 0; g_free(connPath); connPath = 0; // Set the initial self handle (we're not using the conn service normally, so it doesn't do this // by itself) tp_tests_simple_connection_set_identifier(simpleConnService, "me@example.com"); // Make the conn Connecting, and with FeatureCore ready tp_base_connection_change_status(mConnService, TP_CONNECTION_STATUS_CONNECTING, TP_CONNECTION_STATUS_REASON_REQUESTED); PendingOperation *op = mConn->becomeReady(); QVERIFY(connect(op, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(op->isFinished()); QVERIFY(mConn->isValid()); QVERIFY(op->isValid()); QCOMPARE(static_cast(mConn->status()), static_cast(Tp::ConnectionStatusConnecting)); // Start introspecting the SelfContact feature op = mConn->becomeReady(Connection::FeatureSelfContact | Connection::FeatureConnected); QVERIFY(connect(op, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); // Change the self handle, before the connection is Connected tp_tests_simple_connection_set_identifier(simpleConnService, "myself@example.com"); // Now change it to Connected tp_base_connection_change_status(mConnService, TP_CONNECTION_STATUS_CONNECTED, TP_CONNECTION_STATUS_REASON_REQUESTED); // Try to finish the SelfContact operation, running the mainloop for a while QCOMPARE(mLoop->exec(), 0); QCOMPARE(op->isFinished(), true); QCOMPARE(mConn->isReady(Connection::FeatureCore), true); QCOMPARE(mConn->isReady(Connection::FeatureSelfContact), true); QCOMPARE(static_cast(mConn->status()), static_cast(ConnectionStatusConnected)); } void TestConnIntrospectCornercases::testSelfHandleChangeWhileBuilding() { gchar *name; gchar *connPath; GError *error = 0; TpTestsSimpleConnection *simpleConnService = TP_TESTS_SIMPLE_CONNECTION( g_object_new( TP_TESTS_TYPE_SIMPLE_CONNECTION, "account", "me@example.com", "protocol", "simple", NULL)); QVERIFY(simpleConnService != 0); mConnService = TP_BASE_CONNECTION(simpleConnService); QVERIFY(mConnService != 0); QVERIFY(tp_base_connection_register(mConnService, "simple", &name, &connPath, &error)); QVERIFY(error == 0); mConn = Connection::create(QLatin1String(name), QLatin1String(connPath), ChannelFactory::create(QDBusConnection::sessionBus()), ContactFactory::create()); QCOMPARE(mConn->isReady(), false); g_free(name); name = 0; g_free(connPath); connPath = 0; // Make the conn Connected, and with FeatureCore ready PendingOperation *op = mConn->lowlevel()->requestConnect(); QVERIFY(connect(op, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(op->isFinished()); QVERIFY(mConn->isValid()); QVERIFY(op->isValid()); QCOMPARE(static_cast(mConn->status()), static_cast(Tp::ConnectionStatusConnected)); QCOMPARE(mConn->isReady(Connection::FeatureCore), true); QVERIFY(mConn->selfHandle() != 0); // Start introspecting the SelfContact feature op = mConn->becomeReady(Connection::FeatureSelfContact); QVERIFY(connect(op, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); // Run one mainloop iteration, so ReadinessHelper calls introspectSelfContact mLoop->processEvents(); // Change the self handle, so a rebuild has to be done after the first build finishes tp_tests_simple_connection_set_identifier(simpleConnService, "myself@example.com"); // Try to finish the SelfContact operation, running the mainloop for a while QCOMPARE(mLoop->exec(), 0); QCOMPARE(op->isFinished(), true); QCOMPARE(mConn->isReady(Connection::FeatureCore), true); QCOMPARE(mConn->isReady(Connection::FeatureSelfContact), true); QCOMPARE(static_cast(mConn->status()), static_cast(ConnectionStatusConnected)); QCOMPARE(mConn->selfContact()->id(), QString::fromLatin1("me@example.com")); // We should shortly also receive a self contact change to the rebuilt contact QVERIFY(connect(mConn.data(), SIGNAL(selfContactChanged()), mLoop, SLOT(quit()))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mConn->selfContact()->id(), QString::fromLatin1("myself@example.com")); QCOMPARE(mConn->selfContact()->handle()[0], mConn->selfHandle()); // Change the self handle yet again, which should cause a self handle and self contact change to be signalled // (in that order) QVERIFY(connect(mConn.data(), SIGNAL(selfHandleChanged(uint)), SLOT(onSelfHandleChanged(uint)))); tp_tests_simple_connection_set_identifier(simpleConnService, "irene@example.com"); QCOMPARE(mLoop->exec(), 0); QVERIFY(mConn->isValid()); QCOMPARE(mConn->isReady(Connection::FeatureCore), true); QCOMPARE(mConn->isReady(Connection::FeatureSelfContact), true); // We should've received a single self handle change and the self contact should've changed // (exiting the mainloop) QCOMPARE(mNumSelfHandleChanged, 1); QCOMPARE(mConn->selfContact()->id(), QString::fromLatin1("irene@example.com")); QCOMPARE(mConn->selfContact()->handle()[0], mConn->selfHandle()); // Last but not least, try two consequtive changes tp_tests_simple_connection_set_identifier(simpleConnService, "me@example.com"); tp_tests_simple_connection_set_identifier(simpleConnService, "myself@example.com"); // We should receive two more self handle changes in total, and one self contact change for // each mainloop run QCOMPARE(mLoop->exec(), 0); QVERIFY(mConn->isValid()); QCOMPARE(mConn->selfContact()->id(), QString::fromLatin1("me@example.com")); QCOMPARE(mLoop->exec(), 0); QVERIFY(mConn->isValid()); QCOMPARE(mConn->selfContact()->id(), QString::fromLatin1("myself@example.com")); QCOMPARE(mNumSelfHandleChanged, 3); } void TestConnIntrospectCornercases::testSlowpath() { gchar *name; gchar *connPath; GError *error = 0; TpTestsBug16307Connection *bugConnService = TP_TESTS_BUG16307_CONNECTION( g_object_new( TP_TESTS_TYPE_BUG16307_CONNECTION, "account", "me@example.com", "protocol", "simple", NULL)); QVERIFY(bugConnService != 0); mConnService = TP_BASE_CONNECTION(bugConnService); QVERIFY(mConnService != 0); QVERIFY(tp_base_connection_register(mConnService, "simple", &name, &connPath, &error)); QVERIFY(error == 0); mConn = Connection::create(QLatin1String(name), QLatin1String(connPath), ChannelFactory::create(QDBusConnection::sessionBus()), ContactFactory::create()); QCOMPARE(mConn->isReady(), false); g_free(name); name = 0; g_free(connPath); connPath = 0; PendingOperation *op = mConn->becomeReady(); QVERIFY(connect(op, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); tp_tests_bug16307_connection_inject_get_status_return(bugConnService); QCOMPARE(mLoop->exec(), 0); QCOMPARE(op->isFinished(), true); QCOMPARE(mConn->isReady(Connection::FeatureCore), true); QCOMPARE(static_cast(mConn->status()), static_cast(ConnectionStatusConnected)); } void TestConnIntrospectCornercases::testStatusChange() { gchar *name; gchar *connPath; GError *error = 0; TpTestsSimpleConnection *simpleConnService = TP_TESTS_SIMPLE_CONNECTION( g_object_new( TP_TESTS_TYPE_SIMPLE_CONNECTION, "account", "me@example.com", "protocol", "simple", NULL)); QVERIFY(simpleConnService != 0); mConnService = TP_BASE_CONNECTION(simpleConnService); QVERIFY(mConnService != 0); QVERIFY(tp_base_connection_register(mConnService, "simple", &name, &connPath, &error)); QVERIFY(error == 0); mConn = Connection::create(QLatin1String(name), QLatin1String(connPath), ChannelFactory::create(QDBusConnection::sessionBus()), ContactFactory::create()); QCOMPARE(mConn->isReady(), false); g_free(name); name = 0; g_free(connPath); connPath = 0; // Make core ready first, because Connection has internal handling for the status changing // during core introspection, and we rather want to test the more general ReadinessHelper // mechanism PendingOperation *op = mConn->becomeReady(); QVERIFY(connect(op, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(op->isFinished(), true); QCOMPARE(mConn->isReady(Connection::FeatureCore), true); QCOMPARE(static_cast(mConn->status()), static_cast(ConnectionStatusDisconnected)); // Now, begin making Connected ready op = mConn->becomeReady(Connection::FeatureConnected); QVERIFY(connect(op, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); mLoop->processEvents(); // But disturb it by changing the status! TpHandleRepoIface *contact_repo = tp_base_connection_get_handles(mConnService, TP_HANDLE_TYPE_CONTACT); mConnService->self_handle = tp_handle_ensure(contact_repo, "me@example.com", NULL, NULL); tp_base_connection_change_status(mConnService, TP_CONNECTION_STATUS_CONNECTING, TP_CONNECTION_STATUS_REASON_REQUESTED); // Do that again! (The earlier op stil hasn't finished by definition) mConn->becomeReady(Features() << Connection::FeatureConnected); tp_base_connection_change_status(mConnService, TP_CONNECTION_STATUS_CONNECTED, TP_CONNECTION_STATUS_REASON_REQUESTED); QCOMPARE(mLoop->exec(), 0); QCOMPARE(op->isFinished(), true); QCOMPARE(mConn->isReady(Connection::FeatureCore), true); QCOMPARE(mConn->isReady(Connection::FeatureConnected), true); QCOMPARE(static_cast(mConn->status()), static_cast(ConnectionStatusConnected)); } void TestConnIntrospectCornercases::testNoRoster() { gchar *name; gchar *connPath; GError *error = 0; TpTestsContactsNorosterConnection *connService = TP_TESTS_CONTACTS_NOROSTER_CONNECTION( g_object_new( TP_TESTS_TYPE_CONTACTS_NOROSTER_CONNECTION, "account", "me@example.com", "protocol", "contacts-noroster", NULL)); QVERIFY(connService != 0); mConnService = TP_BASE_CONNECTION(connService); QVERIFY(mConnService != 0); QVERIFY(tp_base_connection_register(mConnService, "simple", &name, &connPath, &error)); QVERIFY(error == 0); mConn = Connection::create(QLatin1String(name), QLatin1String(connPath), ChannelFactory::create(QDBusConnection::sessionBus()), ContactFactory::create()); QCOMPARE(mConn->isReady(), false); g_free(name); name = 0; g_free(connPath); connPath = 0; PendingOperation *op = mConn->lowlevel()->requestConnect(); QVERIFY(connect(op, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mConn->status(), Tp::ConnectionStatusConnected); op = mConn->becomeReady(Connection::FeatureRoster); QVERIFY(connect(op, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(op->isFinished()); QVERIFY(mConn->isReady(Connection::FeatureRoster)); QVERIFY(!mConn->actualFeatures().contains(Connection::FeatureRoster)); } void TestConnIntrospectCornercases::cleanup() { if (mConn) { QVERIFY(mConnService != 0); // Disconnect and wait for invalidation tp_base_connection_change_status( mConnService, TP_CONNECTION_STATUS_DISCONNECTED, TP_CONNECTION_STATUS_REASON_REQUESTED); QVERIFY(connect(mConn.data(), SIGNAL(invalidated(Tp::DBusProxy *, const QString &, const QString &)), SLOT(expectConnInvalidated()))); QCOMPARE(mLoop->exec(), 0); QVERIFY(!mConn->isValid()); processDBusQueue(mConn.data()); mConn.reset(); } if (mConnService != 0) { g_object_unref(mConnService); mConnService = 0; } mStatuses.clear(); mNumSelfHandleChanged = 0; cleanupImpl(); } void TestConnIntrospectCornercases::cleanupTestCase() { cleanupTestCaseImpl(); } QTEST_MAIN(TestConnIntrospectCornercases) #include "_gen/conn-introspect-cornercases.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/call-channel.cpp0000644000175200001440000011126112000056607023542 0ustar00collabora-develusers00000000000000#include #include #include #define TP_QT_ENABLE_LOWLEVEL_API #include #include #include #include #include #include #include #include using namespace Tp; class TestCallChannel : public Test { Q_OBJECT public: TestCallChannel(QObject *parent = 0) : Test(parent), mConn(0) { } protected Q_SLOTS: void expectRequestContentFinished(Tp::PendingOperation *op); void expectSuccessfulRequestReceiving(Tp::PendingOperation *op); void onContentRemoved(const Tp::CallContentPtr &content, const Tp::CallStateReason &reason); void onCallStateChanged(Tp::CallState newState); void onCallFlagsChanged(Tp::CallFlags newFlags); void onRemoteMemberFlagsChanged( const QHash &remoteMemberFlags, const Tp::CallStateReason &reason); void onRemoteMembersRemoved(const Tp::Contacts &remoteMembers, const Tp::CallStateReason &reason); void onLocalSendingStateChanged(Tp::SendingState localSendingState, const Tp::CallStateReason &reason); void onRemoteSendingStateChanged( const QHash &remoteSendingStates, const Tp::CallStateReason &reason); void onLocalHoldStateChanged(Tp::LocalHoldState state, Tp::LocalHoldStateReason reason); void onNewChannels(const Tp::ChannelDetailsList &details); private Q_SLOTS: void initTestCase(); void init(); void testOutgoingCall(); void testIncomingCall(); void testHold(); void testHangup(); void testCallMembers(); void testDTMF(); void testFeatureCore(); void cleanup(); void cleanupTestCase(); private: TestConnHelper *mConn; CallChannelPtr mChan; CallContentPtr mRequestContentReturn; CallContentPtr mContentRemoved; CallStateReason mCallStateReason; CallState mCallState; CallFlags mCallFlags; QHash mRemoteMemberFlags; Contacts mRemoteMembersRemoved; SendingState mLSSCReturn; QQueue mLocalHoldStates; QQueue mLocalHoldStateReasons; // Remote sending state changed state-machine enum { RSSCStateInitial, RSSCStatePendingSend, RSSCStateSending, RSSCStateDone } mRSSCState; int mSuccessfulRequestReceivings; }; void TestCallChannel::expectRequestContentFinished(Tp::PendingOperation *op) { if (!op->isFinished()) { qWarning() << "unfinished"; mLoop->exit(1); return; } if (op->isError()) { qWarning().nospace() << op->errorName() << ": " << op->errorMessage(); mLoop->exit(2); return; } if (!op->isValid()) { qWarning() << "inconsistent results"; mLoop->exit(3); return; } PendingCallContent *pmc = qobject_cast(op); mRequestContentReturn = pmc->content(); mLoop->exit(0); } void TestCallChannel::onLocalSendingStateChanged(Tp::SendingState state, const Tp::CallStateReason &reason) { qDebug() << "local sending state changed"; mLSSCReturn = state; mCallStateReason = reason; mLoop->exit(0); } void TestCallChannel::expectSuccessfulRequestReceiving(Tp::PendingOperation *op) { if (!op->isFinished()) { qWarning() << "unfinished"; mLoop->exit(1); return; } if (op->isError()) { qWarning().nospace() << op->errorName() << ": " << op->errorMessage(); mLoop->exit(2); return; } if (!op->isValid()) { qWarning() << "inconsistent results"; mLoop->exit(3); return; } if (++mSuccessfulRequestReceivings == 2 && mRSSCState == RSSCStateDone) { mLoop->exit(0); } } void TestCallChannel::onContentRemoved(const CallContentPtr &content, const Tp::CallStateReason &reason) { mContentRemoved = content; mCallStateReason = reason; mLoop->exit(0); } void TestCallChannel::onCallStateChanged(CallState newState) { mCallState = newState; mLoop->exit(0); } void TestCallChannel::onCallFlagsChanged(CallFlags newFlags) { mCallFlags = newFlags; } void TestCallChannel::onRemoteMemberFlagsChanged( const QHash &remoteMemberFlags, const CallStateReason &reason) { mRemoteMemberFlags = remoteMemberFlags; mLoop->exit(0); } void TestCallChannel::onRemoteMembersRemoved(const Tp::Contacts &remoteMembers, const Tp::CallStateReason &reason) { mRemoteMembersRemoved = remoteMembers; } void TestCallChannel::onRemoteSendingStateChanged( const QHash &states, const Tp::CallStateReason &reason) { // There should be no further events QVERIFY(mRSSCState != RSSCStateDone); QCOMPARE(states.size(), 1); Tp::ContactPtr otherContact = states.keys().first(); CallContentPtr content = mChan->contentsForType(Tp::MediaStreamTypeVideo).first(); QVERIFY(content); CallStreamPtr stream = content->streams().first(); QVERIFY(stream); if (mRSSCState == RSSCStateInitial) { QCOMPARE(states[otherContact], SendingStatePendingSend); mRSSCState = RSSCStatePendingSend; } else if (mRSSCState == RSSCStatePendingSend) { QCOMPARE(states[otherContact], SendingStateSending); mRSSCState = RSSCStateSending; QVERIFY(connect(stream->requestReceiving(otherContact, false), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulRequestReceiving(Tp::PendingOperation*)))); } else if (mRSSCState == RSSCStateSending) { QCOMPARE(states[otherContact], SendingStateNone); mRSSCState = RSSCStateDone; if (mSuccessfulRequestReceivings == 2) { mLoop->exit(0); } } qDebug() << "remote sending state changed to" << states[otherContact]; } void TestCallChannel::onLocalHoldStateChanged(Tp::LocalHoldState localHoldState, Tp::LocalHoldStateReason localHoldStateReason) { mLocalHoldStates.append(localHoldState); mLocalHoldStateReasons.append(localHoldStateReason); mLoop->exit(0); } void TestCallChannel::onNewChannels(const Tp::ChannelDetailsList &channels) { qDebug() << "new channels"; Q_FOREACH (const Tp::ChannelDetails &details, channels) { QString channelType = details.properties.value(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType")).toString(); bool requested = details.properties.value(TP_QT_IFACE_CHANNEL + QLatin1String(".Requested")).toBool(); qDebug() << " channelType:" << channelType; qDebug() << " requested :" << requested; if (channelType == TP_QT_IFACE_CHANNEL_TYPE_CALL && !requested) { mChan = CallChannel::create(mConn->client(), details.channel.path(), details.properties); mLoop->exit(0); } } } void TestCallChannel::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("call-channel"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); mConn = new TestConnHelper(this, EXAMPLE_TYPE_CALL_CONNECTION, "account", "me@example.com", "protocol", "example", "simulation-delay", 1, NULL); QCOMPARE(mConn->connect(Connection::FeatureSelfContact), true); } void TestCallChannel::init() { initImpl(); mRequestContentReturn.reset(); mContentRemoved.reset(); mCallStateReason = CallStateReason(); mCallState = CallStateUnknown; mCallFlags = (CallFlags) 0; mRemoteMemberFlags.clear(); mRemoteMembersRemoved.clear(); mLSSCReturn = (Tp::SendingState) -1; mLocalHoldStates.clear(); mLocalHoldStateReasons.clear(); } void TestCallChannel::testOutgoingCall() { qDebug() << "requesting contact for alice"; QList contacts = mConn->contacts(QStringList() << QLatin1String("alice")); QCOMPARE(contacts.size(), 1); ContactPtr otherContact = contacts.at(0); QVERIFY(otherContact); qDebug() << "creating the channel"; QVariantMap request; request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_CALL); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) Tp::HandleTypeContact); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandle"), otherContact->handle()[0]); request.insert(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudio"), true); mChan = CallChannelPtr::qObjectCast(mConn->createChannel(request)); QVERIFY(mChan); qDebug() << "making the channel ready"; Features features; features << CallChannel::FeatureCallState << CallChannel::FeatureContents; QVERIFY(connect(mChan->becomeReady(features), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(mChan->isReady(Tp::CallChannel::FeatureCallState)); QVERIFY(mChan->isReady(Tp::CallChannel::FeatureContents)); QCOMPARE(mChan->callState(), CallStatePendingInitiator); QVERIFY(connect(mChan->accept(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->callState(), CallStateInitialised); QCOMPARE(mChan->callStateReason().reason, (uint) CallStateChangeReasonUserRequested); QVERIFY(connect(mChan.data(), SIGNAL(callStateChanged(Tp::CallState)), SLOT(onCallStateChanged(Tp::CallState)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mCallState, CallStateAccepted); QCOMPARE(mChan->callState(), CallStateAccepted); QCOMPARE(mChan->contents().size(), 1); Tp::CallContentPtr content; content = mChan->contents().first(); QVERIFY(content); QCOMPARE(content->name(), QString::fromLatin1("audio")); QCOMPARE(content->type(), Tp::MediaStreamTypeAudio); QCOMPARE(content->disposition(), Tp::CallContentDispositionInitial); QVERIFY(mChan->contentByName(QLatin1String("audio"))); /* QCOMPARE(mChan->groupContacts().size(), 2); QCOMPARE(mChan->groupLocalPendingContacts().size(), 0); QCOMPARE(mChan->groupRemotePendingContacts().size(), 0); QVERIFY(mChan->groupContacts().contains(mConn->client()->selfContact())); QVERIFY(mChan->groupContacts().contains(otherContact)); */ qDebug() << "calling requestContent with a bad type"; // RequestContent with bad type must fail QVERIFY(connect(mChan->requestContent(QLatin1String("content1"), (Tp::MediaStreamType) -1, Tp::MediaStreamDirectionNone), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectRequestContentFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 2); QVERIFY(!mRequestContentReturn); qDebug() << "calling requestContent with Audio"; QCOMPARE(mChan->contentsForType(Tp::MediaStreamTypeAudio).size(), 1); mRequestContentReturn.reset(); QVERIFY(connect(mChan->requestContent(QLatin1String("content1"), Tp::MediaStreamTypeAudio, Tp::MediaStreamDirectionBidirectional), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectRequestContentFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(!mRequestContentReturn.isNull()); QCOMPARE(mRequestContentReturn->name(), QString(QLatin1String("content1"))); QCOMPARE(mRequestContentReturn->type(), Tp::MediaStreamTypeAudio); QCOMPARE(mRequestContentReturn->disposition(), Tp::CallContentDispositionNone); QCOMPARE(mChan->contentsForType(Tp::MediaStreamTypeAudio).size(), 2); qDebug() << "calling requestContent with Video"; mRequestContentReturn.reset(); QVERIFY(connect(mChan->requestContent(QLatin1String("content2"), Tp::MediaStreamTypeVideo, Tp::MediaStreamDirectionBidirectional), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectRequestContentFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(!mRequestContentReturn.isNull()); QCOMPARE(mRequestContentReturn->name(), QString(QLatin1String("content2"))); QCOMPARE(mRequestContentReturn->type(), Tp::MediaStreamTypeVideo); // test content removal QCOMPARE(mChan->contentsForType(Tp::MediaStreamTypeAudio).size(), 2); content = mChan->contentsForType(Tp::MediaStreamTypeAudio).first(); QVERIFY(content); QVERIFY(connect(mChan.data(), SIGNAL(contentRemoved(Tp::CallContentPtr,Tp::CallStateReason)), SLOT(onContentRemoved(Tp::CallContentPtr,Tp::CallStateReason)))); QVERIFY(connect(content->remove(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); while (mContentRemoved.isNull()) { QCOMPARE(mLoop->exec(), 0); } QCOMPARE(mChan->contentsForType(Tp::MediaStreamTypeAudio).size(), 1); QCOMPARE(mContentRemoved, content); QCOMPARE(mCallStateReason.reason, (uint) Tp::CallStateChangeReasonUserRequested); // test content sending changed content = mChan->contentsForType(Tp::MediaStreamTypeVideo).first(); Tp::CallStreamPtr stream = content->streams().first(); QVERIFY(content); QVERIFY(connect(stream.data(), SIGNAL(localSendingStateChanged(Tp::SendingState,Tp::CallStateReason)), SLOT(onLocalSendingStateChanged(Tp::SendingState,Tp::CallStateReason)))); qDebug() << "stopping sending"; QCOMPARE(stream->localSendingState(), Tp::SendingStateSending); QVERIFY(stream->remoteMembers().contains(otherContact)); QVERIFY(connect(stream->requestSending(false), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); qDebug() << "stopping receiving"; QVERIFY(connect(stream->requestReceiving(otherContact, false), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); qDebug() << "waiting until we're not sending and not receiving"; while (stream->localSendingState() != Tp::SendingStateNone || stream->remoteSendingState(otherContact) != Tp::SendingStateNone) { qDebug() << "re-entering mainloop to wait for local and remote SSC -> None"; // wait local and remote sending state change QCOMPARE(mLoop->exec(), 0); } QCOMPARE(mLSSCReturn, Tp::SendingStateNone); QCOMPARE(stream->localSendingState(), Tp::SendingStateNone); QCOMPARE(stream->remoteSendingState(otherContact), Tp::SendingStateNone); qDebug() << "re-enabling sending"; mLSSCReturn = (Tp::SendingState) -1; QVERIFY(connect(stream->requestSending(true), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); while (mLSSCReturn == (Tp::SendingState) -1) { qDebug() << "re-entering mainloop to wait for SSC -> Sending"; // wait sending state change QCOMPARE(mLoop->exec(), 0); } QCOMPARE(mLSSCReturn, Tp::SendingStateSending); qDebug() << "flushing D-Bus events"; processDBusQueue(mChan.data()); qDebug() << "enabling receiving"; mRSSCState = RSSCStateInitial; mSuccessfulRequestReceivings = 0; QVERIFY(connect(stream.data(), SIGNAL(remoteSendingStateChanged(QHash,Tp::CallStateReason)), SLOT(onRemoteSendingStateChanged(QHash,Tp::CallStateReason)))); // test content receiving changed QVERIFY(connect(stream->requestReceiving(otherContact, true), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulRequestReceiving(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(static_cast(mRSSCState), static_cast(RSSCStateDone)); } void TestCallChannel::testIncomingCall() { mConn->client()->lowlevel()->setSelfPresence(QLatin1String("away"), QLatin1String("preparing for a test")); Tp::Client::ConnectionInterfaceRequestsInterface *connRequestsInterface = mConn->client()->optionalInterface(); QVERIFY(connect(connRequestsInterface, SIGNAL(NewChannels(const Tp::ChannelDetailsList&)), SLOT(onNewChannels(const Tp::ChannelDetailsList&)))); mConn->client()->lowlevel()->setSelfPresence(QLatin1String("available"), QLatin1String("call me?")); QCOMPARE(mLoop->exec(), 0); QVERIFY(mChan); QCOMPARE(mChan->contents().size(), 0); Features features; features << CallChannel::FeatureCallState << CallChannel::FeatureContents; QVERIFY(connect(mChan->becomeReady(features), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(mChan->isReady(Tp::CallChannel::FeatureCallState)); QVERIFY(mChan->isReady(Tp::CallChannel::FeatureContents)); Tp::ContactPtr otherContact = mChan->initiatorContact(); QVERIFY(otherContact); QCOMPARE(mChan->callState(), CallStateInitialised); QVERIFY(connect(mChan.data(), SIGNAL(callFlagsChanged(Tp::CallFlags)), SLOT(onCallFlagsChanged(Tp::CallFlags)))); QVERIFY(connect(mChan->setRinging(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(mCallFlags.testFlag(CallFlagLocallyRinging)); QVERIFY(mChan->callFlags().testFlag(CallFlagLocallyRinging)); QVERIFY(connect(mChan->setQueued(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(mCallFlags.testFlag(CallFlagLocallyQueued)); QVERIFY(mChan->callFlags().testFlag(CallFlagLocallyQueued)); QVERIFY(connect(mChan->accept(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->callState(), CallStateAccepted); QVERIFY(!mCallFlags.testFlag(CallFlagLocallyQueued)); QVERIFY(!mCallFlags.testFlag(CallFlagLocallyRinging)); QVERIFY(!mChan->callFlags().testFlag(CallFlagLocallyRinging)); QVERIFY(!mChan->callFlags().testFlag(CallFlagLocallyQueued)); /* QCOMPARE(mChan->groupContacts().size(), 2); QCOMPARE(mChan->groupLocalPendingContacts().size(), 0); QCOMPARE(mChan->groupRemotePendingContacts().size(), 0); QVERIFY(mChan->groupContacts().contains(mConn->selfContact())); */ QCOMPARE(mChan->contents().size(), 1); Tp::CallContentPtr content = mChan->contents().first(); QCOMPARE(content->channel(), mChan); QCOMPARE(content->type(), Tp::MediaStreamTypeAudio); qDebug() << "requesting a video stream"; // Request video stream QVERIFY(connect(mChan->requestContent(QLatin1String("video_content"), Tp::MediaStreamTypeVideo, Tp::MediaStreamDirectionBidirectional), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectRequestContentFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); content = mRequestContentReturn; QCOMPARE(content->type(), Tp::MediaStreamTypeVideo); QCOMPARE(mChan->contents().size(), 2); QVERIFY(mChan->contents().contains(content)); QCOMPARE(mChan->contentsForType(Tp::MediaStreamTypeAudio).size(), 1); QCOMPARE(mChan->contentsForType(Tp::MediaStreamTypeVideo).size(), 1); // test content removal content = mChan->contentsForType(Tp::MediaStreamTypeAudio).first(); QVERIFY(content); qDebug() << "removing the audio content"; // call does not have the concept of removing streams, it will remove the content the stream // belongs QVERIFY(connect(mChan.data(), SIGNAL(contentRemoved(Tp::CallContentPtr,Tp::CallStateReason)), SLOT(onContentRemoved(Tp::CallContentPtr,Tp::CallStateReason)))); QVERIFY(connect(content->remove(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); while (mContentRemoved.isNull()) { QCOMPARE(mLoop->exec(), 0); } QCOMPARE(mContentRemoved, content); } void TestCallChannel::testHold() { QList contacts = mConn->contacts(QStringList() << QLatin1String("bob")); QCOMPARE(contacts.size(), 1); ContactPtr otherContact = contacts.at(0); QVERIFY(otherContact); QVariantMap request; request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_CALL); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) Tp::HandleTypeContact); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandle"), otherContact->handle()[0]); request.insert(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudio"), true); mChan = CallChannelPtr::qObjectCast(mConn->createChannel(request)); QVERIFY(mChan); QVERIFY(connect(mChan->becomeReady(Tp::CallChannel::FeatureLocalHoldState), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(mChan->isReady(Tp::CallChannel::FeatureLocalHoldState)); QCOMPARE(static_cast(mChan->localHoldState()), static_cast(Tp::LocalHoldStateUnheld)); QCOMPARE(static_cast(mChan->localHoldStateReason()), static_cast(Tp::LocalHoldStateReasonNone)); QVERIFY(connect(mChan.data(), SIGNAL(localHoldStateChanged(Tp::LocalHoldState, Tp::LocalHoldStateReason)), SLOT(onLocalHoldStateChanged(Tp::LocalHoldState, Tp::LocalHoldStateReason)))); // Request hold QVERIFY(connect(mChan->requestHold(true), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); while (mLocalHoldStates.size() != 2) { QCOMPARE(mLoop->exec(), 0); } QCOMPARE(mLocalHoldStates.first(), static_cast(Tp::LocalHoldStatePendingHold)); QCOMPARE(mLocalHoldStateReasons.first(), static_cast(Tp::LocalHoldStateReasonRequested)); QCOMPARE(mLocalHoldStates.last(), static_cast(Tp::LocalHoldStateHeld)); QCOMPARE(mLocalHoldStateReasons.last(), static_cast(Tp::LocalHoldStateReasonRequested)); QCOMPARE(static_cast(mChan->localHoldState()), static_cast(Tp::LocalHoldStateHeld)); QCOMPARE(static_cast(mChan->localHoldStateReason()), static_cast(Tp::LocalHoldStateReasonRequested)); mLocalHoldStates.clear(); mLocalHoldStateReasons.clear(); // Request unhold QVERIFY(connect(mChan->requestHold(false), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); while (mLocalHoldStates.size() != 2) { QCOMPARE(mLoop->exec(), 0); } QCOMPARE(mLocalHoldStates.first(), static_cast(Tp::LocalHoldStatePendingUnhold)); QCOMPARE(mLocalHoldStateReasons.first(), static_cast(Tp::LocalHoldStateReasonRequested)); QCOMPARE(mLocalHoldStates.last(), static_cast(Tp::LocalHoldStateUnheld)); QCOMPARE(mLocalHoldStateReasons.last(), static_cast(Tp::LocalHoldStateReasonRequested)); QCOMPARE(static_cast(mChan->localHoldState()), static_cast(Tp::LocalHoldStateUnheld)); QCOMPARE(static_cast(mChan->localHoldStateReason()), static_cast(Tp::LocalHoldStateReasonRequested)); } void TestCallChannel::testHangup() { qDebug() << "requesting contact for alice"; QList contacts = mConn->contacts(QStringList() << QLatin1String("alice")); QCOMPARE(contacts.size(), 1); ContactPtr otherContact = contacts.at(0); QVERIFY(otherContact); qDebug() << "creating the channel"; QVariantMap request; request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_CALL); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) Tp::HandleTypeContact); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandle"), otherContact->handle()[0]); request.insert(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideo"), true); mChan = CallChannelPtr::qObjectCast(mConn->createChannel(request)); QVERIFY(mChan); qDebug() << "making the channel ready"; QVERIFY(connect(mChan->becomeReady(CallChannel::FeatureCallState), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(mChan->isReady(Tp::CallChannel::FeatureCallState)); QCOMPARE(mChan->callState(), CallStatePendingInitiator); QVERIFY(connect(mChan->hangup(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->callState(), CallStateEnded); QCOMPARE(mChan->callStateReason().reason, (uint) CallStateChangeReasonUserRequested); } void TestCallChannel::testCallMembers() { qDebug() << "requesting contact for john"; QList contacts = mConn->contacts(QStringList() << QLatin1String("john")); QCOMPARE(contacts.size(), 1); ContactPtr otherContact = contacts.at(0); QVERIFY(otherContact); qDebug() << "creating the channel"; QVariantMap request; request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_CALL); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) Tp::HandleTypeContact); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandle"), otherContact->handle()[0]); request.insert(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialVideo"), true); mChan = CallChannelPtr::qObjectCast(mConn->createChannel(request)); QVERIFY(mChan); qDebug() << "making the channel ready"; Features features; features << CallChannel::FeatureCallState << CallChannel::FeatureCallMembers << CallChannel::FeatureContents; QVERIFY(connect(mChan->becomeReady(features), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(mChan->isReady(Tp::CallChannel::FeatureCallMembers)); QVERIFY(mChan->isReady(Tp::CallChannel::FeatureContents)); qDebug() << "accepting the call"; QCOMPARE(mChan->callState(), CallStatePendingInitiator); QCOMPARE(mChan->remoteMembers().size(), 1); QVERIFY(connect(mChan->accept(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->callState(), CallStateInitialised); QCOMPARE(mChan->callStateReason().reason, (uint) CallStateChangeReasonUserRequested); qDebug() << "ringing on the remote side"; QVERIFY(connect(mChan.data(), SIGNAL(remoteMemberFlagsChanged(QHash,Tp::CallStateReason)), SLOT(onRemoteMemberFlagsChanged(QHash,Tp::CallStateReason)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->callState(), CallStateInitialised); QCOMPARE(mRemoteMemberFlags.size(), 1); QCOMPARE(mChan->remoteMembers().size(), 1); QVERIFY(mRemoteMemberFlags.constBegin().value().testFlag(CallMemberFlagRinging)); QVERIFY(mChan->remoteMemberFlags(otherContact).testFlag(CallMemberFlagRinging)); QVERIFY(disconnect(mChan.data(), SIGNAL(remoteMemberFlagsChanged(QHash,Tp::CallStateReason)), this, SLOT(onRemoteMemberFlagsChanged(QHash,Tp::CallStateReason)))); qDebug() << "remote contact answers"; QVERIFY(connect(mChan.data(), SIGNAL(callStateChanged(Tp::CallState)), SLOT(onCallStateChanged(Tp::CallState)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mCallState, CallStateAccepted); QCOMPARE(mChan->callState(), CallStateAccepted); QVERIFY(disconnect(mChan.data(), SIGNAL(callStateChanged(Tp::CallState)), this, SLOT(onCallStateChanged(Tp::CallState)))); qDebug() << "testing members"; QCOMPARE(mChan->contents().size(), 1); CallContentPtr content = mChan->contents().at(0); QCOMPARE(content->streams().size(), 1); QCOMPARE(mChan->remoteMembers().size(), 1); QCOMPARE(content->streams().at(0)->remoteMembers().size(), 1); ContactPtr contact1 = *mChan->remoteMembers().constBegin(); ContactPtr contact2 = *content->streams().at(0)->remoteMembers().constBegin(); QCOMPARE(contact1->id(), QString::fromLatin1("john")); QCOMPARE(contact2->id(), QString::fromLatin1("john")); qDebug() << "hanging up"; QVERIFY(connect(mChan.data(), SIGNAL(remoteMembersRemoved(Tp::Contacts,Tp::CallStateReason)), SLOT(onRemoteMembersRemoved(Tp::Contacts,Tp::CallStateReason)))); QVERIFY(connect(mChan->hangup(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->callState(), CallStateEnded); QCOMPARE(mChan->callStateReason().reason, (uint) CallStateChangeReasonUserRequested); QCOMPARE(mRemoteMembersRemoved.size(), 1); QCOMPARE((*mRemoteMembersRemoved.constBegin())->id(), QString::fromLatin1("john")); QCOMPARE(mChan->remoteMembers().size(), 0); QCOMPARE(mChan->contents().size(), 0); } void TestCallChannel::testDTMF() { mConn->client()->lowlevel()->setSelfPresence(QLatin1String("away"), QLatin1String("preparing for a test")); Tp::Client::ConnectionInterfaceRequestsInterface *connRequestsInterface = mConn->client()->optionalInterface(); QVERIFY(connect(connRequestsInterface, SIGNAL(NewChannels(const Tp::ChannelDetailsList&)), SLOT(onNewChannels(const Tp::ChannelDetailsList&)))); mConn->client()->lowlevel()->setSelfPresence(QLatin1String("available"), QLatin1String("call me?")); QCOMPARE(mLoop->exec(), 0); QVERIFY(mChan); qDebug() << "making the channel ready"; QVERIFY(connect(mChan->becomeReady(CallChannel::FeatureContents), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(mChan->isReady(Tp::CallChannel::FeatureContents)); QVERIFY(connect(mChan->accept(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->contents().size(), 1); Tp::CallContentPtr content = mChan->contents().first(); QCOMPARE(content->channel(), mChan); QCOMPARE(content->type(), Tp::MediaStreamTypeAudio); /* TODO enable when/if the example call CM actually supports DTMF QVERIFY(content->supportsDTMF()); QVERIFY(connect(content->startDTMFTone(DTMFEventDigit0), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(content->stopDTMFTone(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(content->startDTMFTone((DTMFEvent) 1234), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mLastError, QString(TP_QT_ERROR_INVALID_ARGUMENT)); */ qDebug() << "requesting video content"; QVERIFY(connect(mChan->requestContent(QLatin1String("video_content"), Tp::MediaStreamTypeVideo, Tp::MediaStreamDirectionBidirectional), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectRequestContentFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); content = mRequestContentReturn; QCOMPARE(content->type(), Tp::MediaStreamTypeVideo); QVERIFY(!content->supportsDTMF()); QVERIFY(connect(content->startDTMFTone(DTMFEventDigit0), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mLastError, QString(TP_QT_ERROR_NOT_IMPLEMENTED)); QVERIFY(connect(content->stopDTMFTone(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mLastError, QString(TP_QT_ERROR_NOT_IMPLEMENTED)); } void TestCallChannel::testFeatureCore() { qDebug() << "requesting contact for alice"; QList contacts = mConn->contacts(QStringList() << QLatin1String("alice")); QCOMPARE(contacts.size(), 1); ContactPtr otherContact = contacts.at(0); QVERIFY(otherContact); qDebug() << "creating the channel"; QVariantMap request; request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_CALL); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) Tp::HandleTypeContact); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandle"), otherContact->handle()[0]); request.insert(TP_QT_IFACE_CHANNEL_TYPE_CALL + QLatin1String(".InitialAudio"), true); mChan = CallChannelPtr::qObjectCast(mConn->createChannel(request)); QVERIFY(mChan); QVERIFY(connect(mChan->becomeReady(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(mChan->isReady(Tp::CallChannel::FeatureCore)); QVERIFY(mChan->hasInitialAudio()); QCOMPARE(mChan->initialAudioName(), QString::fromLatin1("audio")); QVERIFY(!mChan->hasInitialVideo()); QCOMPARE(mChan->initialVideoName(), QString::fromLatin1("video")); QVERIFY(mChan->hasMutableContents()); QVERIFY(mChan->handlerStreamingRequired()); qDebug() << "creating second CallChannel object"; //this object is not passed immutable properties on //the constructor, so it will have to introspect them. CallChannelPtr chan2 = CallChannel::create(mConn->client(), mChan->objectPath(), QVariantMap()); QVERIFY(connect(chan2->becomeReady(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(chan2->isReady(Tp::CallChannel::FeatureCore)); QVERIFY(chan2->hasInitialAudio()); QCOMPARE(chan2->initialAudioName(), QString::fromLatin1("audio")); QVERIFY(!chan2->hasInitialVideo()); QCOMPARE(chan2->initialVideoName(), QString::fromLatin1("video")); QVERIFY(chan2->hasMutableContents()); QVERIFY(chan2->handlerStreamingRequired()); } void TestCallChannel::cleanup() { mChan.reset(); cleanupImpl(); } void TestCallChannel::cleanupTestCase() { QCOMPARE(mConn->disconnect(), true); delete mConn; cleanupTestCaseImpl(); } QTEST_MAIN(TestCallChannel) #include "_gen/call-channel.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/client.cpp0000644000175200001440000007664512000056607022517 0ustar00collabora-develusers00000000000000#include #include #include #include #define TP_QT_ENABLE_LOWLEVEL_API #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace Tp; using namespace Tp::Client; class ChannelRequestAdaptor : public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.freedesktop.Telepathy.ChannelRequest") Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " " " \n" "") Q_PROPERTY(QDBusObjectPath Account READ Account) Q_PROPERTY(qulonglong UserActionTime READ UserActionTime) Q_PROPERTY(QString PreferredHandler READ PreferredHandler) Q_PROPERTY(Tp::QualifiedPropertyValueMapList Requests READ Requests) Q_PROPERTY(QStringList Interfaces READ Interfaces) public: ChannelRequestAdaptor(QDBusObjectPath account, qulonglong userActionTime, QString preferredHandler, QualifiedPropertyValueMapList requests, QStringList interfaces, QObject *parent) : QDBusAbstractAdaptor(parent), mAccount(account), mUserActionTime(userActionTime), mPreferredHandler(preferredHandler), mRequests(requests), mInterfaces(interfaces) { } virtual ~ChannelRequestAdaptor() { } public: // Properties inline QDBusObjectPath Account() const { return mAccount; } inline qulonglong UserActionTime() const { return mUserActionTime; } inline QString PreferredHandler() const { return mPreferredHandler; } inline QualifiedPropertyValueMapList Requests() const { return mRequests; } inline QStringList Interfaces() const { return mInterfaces; } public Q_SLOTS: // Methods void Proceed() { } void Cancel() { } Q_SIGNALS: // Signals void Failed(const QString &error, const QString &message); void Succeeded(); private: QDBusObjectPath mAccount; qulonglong mUserActionTime; QString mPreferredHandler; QualifiedPropertyValueMapList mRequests; QStringList mInterfaces; }; // Totally incomplete mini version of ChannelDispatchOperation class ChannelDispatchOperationAdaptor : public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.freedesktop.Telepathy.ChannelDispatchOperation") Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" " \n" " \n" " \n" " \n" "") Q_PROPERTY(QDBusObjectPath Account READ Account) Q_PROPERTY(QDBusObjectPath Connection READ Connection) Q_PROPERTY(Tp::ChannelDetailsList Channels READ Channels) Q_PROPERTY(QStringList Interfaces READ Interfaces) Q_PROPERTY(QStringList PossibleHandlers READ PossibleHandlers) public: ChannelDispatchOperationAdaptor(const QDBusObjectPath &acc, const QDBusObjectPath &conn, const ChannelDetailsList &channels, const QStringList &possibleHandlers, QObject *parent) : QDBusAbstractAdaptor(parent), mAccount(acc), mConn(conn), mChannels(channels), mPossibleHandlers(possibleHandlers) { } virtual ~ChannelDispatchOperationAdaptor() { } public: // Properties inline QDBusObjectPath Account() const { return mAccount; } inline QDBusObjectPath Connection() const { return mConn; } inline ChannelDetailsList Channels() const { return mChannels; } inline QStringList Interfaces() const { return mInterfaces; } inline QStringList PossibleHandlers() const { return mPossibleHandlers; } public Q_SLOTS: inline void Claim() { // do nothing = no fail } private: QDBusObjectPath mAccount, mConn; ChannelDetailsList mChannels; QStringList mInterfaces; QStringList mPossibleHandlers; }; class MyClient : public QObject, public AbstractClientObserver, public AbstractClientApprover, public AbstractClientHandler { Q_OBJECT public: static AbstractClientPtr create(const ChannelClassSpecList &channelFilter, const AbstractClientHandler::Capabilities &capabilities, bool bypassApproval = false, bool wantsRequestNotification = false) { return AbstractClientPtr::dynamicCast(SharedPtr( new MyClient(channelFilter, capabilities, bypassApproval, wantsRequestNotification))); } MyClient(const ChannelClassSpecList &channelFilter, const AbstractClientHandler::Capabilities &capabilities, bool bypassApproval = false, bool wantsRequestNotification = false) : AbstractClientObserver(channelFilter), AbstractClientApprover(channelFilter), AbstractClientHandler(channelFilter, capabilities, wantsRequestNotification), mBypassApproval(bypassApproval) { } ~MyClient() { } void observeChannels(const MethodInvocationContextPtr<> &context, const AccountPtr &account, const ConnectionPtr &connection, const QList &channels, const ChannelDispatchOperationPtr &dispatchOperation, const QList &requestsSatisfied, const AbstractClientObserver::ObserverInfo &observerInfo) { mObserveChannelsAccount = account; mObserveChannelsConnection = connection; mObserveChannelsChannels = channels; mObserveChannelsDispatchOperation = dispatchOperation; mObserveChannelsRequestsSatisfied = requestsSatisfied; mObserveChannelsObserverInfo = observerInfo; context->setFinished(); QTimer::singleShot(0, this, SIGNAL(observeChannelsFinished())); } void addDispatchOperation(const MethodInvocationContextPtr<> &context, const ChannelDispatchOperationPtr &dispatchOperation) { mAddDispatchOperationChannels = dispatchOperation->channels(); mAddDispatchOperationDispatchOperation = dispatchOperation; QVERIFY(connect(dispatchOperation->claim(AbstractClientHandlerPtr(this)), SIGNAL(finished(Tp::PendingOperation*)), SIGNAL(claimFinished()))); context->setFinished(); QTimer::singleShot(0, this, SIGNAL(addDispatchOperationFinished())); } bool bypassApproval() const { return mBypassApproval; } void handleChannels(const MethodInvocationContextPtr<> &context, const AccountPtr &account, const ConnectionPtr &connection, const QList &channels, const QList &requestsSatisfied, const QDateTime &userActionTime, const AbstractClientHandler::HandlerInfo &handlerInfo) { mHandleChannelsAccount = account; mHandleChannelsConnection = connection; mHandleChannelsChannels = channels; mHandleChannelsRequestsSatisfied = requestsSatisfied; mHandleChannelsUserActionTime = userActionTime; mHandleChannelsHandlerInfo = handlerInfo; Q_FOREACH (const ChannelPtr &channel, channels) { connect(channel.data(), SIGNAL(invalidated(Tp::DBusProxy *, const QString &, const QString &)), SIGNAL(channelClosed())); } context->setFinished(); QTimer::singleShot(0, this, SIGNAL(handleChannelsFinished())); } void addRequest(const ChannelRequestPtr &request) { mAddRequestRequest = request; Q_EMIT requestAdded(request); } void removeRequest(const ChannelRequestPtr &request, const QString &errorName, const QString &errorMessage) { mRemoveRequestRequest = request; mRemoveRequestErrorName = errorName; mRemoveRequestErrorMessage = errorMessage; Q_EMIT requestRemoved(request, errorName, errorMessage); } AccountPtr mObserveChannelsAccount; ConnectionPtr mObserveChannelsConnection; QList mObserveChannelsChannels; ChannelDispatchOperationPtr mObserveChannelsDispatchOperation; QList mObserveChannelsRequestsSatisfied; AbstractClientObserver::ObserverInfo mObserveChannelsObserverInfo; QList mAddDispatchOperationChannels; ChannelDispatchOperationPtr mAddDispatchOperationDispatchOperation; bool mBypassApproval; AccountPtr mHandleChannelsAccount; ConnectionPtr mHandleChannelsConnection; QList mHandleChannelsChannels; QList mHandleChannelsRequestsSatisfied; QDateTime mHandleChannelsUserActionTime; AbstractClientHandler::HandlerInfo mHandleChannelsHandlerInfo; ChannelRequestPtr mAddRequestRequest; ChannelRequestPtr mRemoveRequestRequest; QString mRemoveRequestErrorName; QString mRemoveRequestErrorMessage; Q_SIGNALS: void observeChannelsFinished(); void addDispatchOperationFinished(); void handleChannelsFinished(); void claimFinished(); void requestAdded(const Tp::ChannelRequestPtr &request); void requestRemoved(const Tp::ChannelRequestPtr &request, const QString &errorName, const QString &errorMessage); void channelClosed(); }; class TestClient : public Test { Q_OBJECT public: TestClient(QObject *parent = 0) : Test(parent), mConn(0), mContactRepo(0), mText1ChanService(0), mText2ChanService(0), mCDO(0), mClaimFinished(false) { } void testObserveChannelsCommon(const AbstractClientPtr &clientObject, const QString &clientBusName, const QString &clientObjectPath); protected Q_SLOTS: void expectSignalEmission(); void onClaimFinished(); private Q_SLOTS: void initTestCase(); void init(); void testRegister(); void testCapabilities(); void testObserveChannels(); void testAddDispatchOperation(); void testRequests(); void testHandleChannels(); void cleanup(); void cleanupTestCase(); private: AccountManagerPtr mAM; AccountPtr mAccount; TestConnHelper *mConn; TpHandleRepoIface *mContactRepo; ExampleEchoChannel *mText1ChanService; ExampleEchoChannel *mText2ChanService; QString mText1ChanPath; QString mText2ChanPath; ClientRegistrarPtr mClientRegistrar; QString mChannelDispatcherBusName; QString mChannelRequestPath; ChannelDispatchOperationAdaptor *mCDO; QString mCDOPath; AbstractClientHandler::Capabilities mClientCapabilities; AbstractClientPtr mClientObject1; QString mClientObject1BusName; QString mClientObject1Path; AbstractClientPtr mClientObject2; QString mClientObject2BusName; QString mClientObject2Path; uint mUserActionTime; bool mClaimFinished; }; void TestClient::expectSignalEmission() { mLoop->exit(0); } void TestClient::onClaimFinished() { mClaimFinished = true; } void TestClient::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("client"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); mAM = AccountManager::create(); QVERIFY(connect(mAM->becomeReady(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mAM->isReady(), true); QVariantMap parameters; parameters[QLatin1String("account")] = QLatin1String("foobar"); PendingAccount *pacc = mAM->createAccount(QLatin1String("foo"), QLatin1String("bar"), QLatin1String("foobar"), parameters); QVERIFY(connect(pacc, SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(pacc->account()); mAccount = pacc->account(); mConn = new TestConnHelper(this, TP_TESTS_TYPE_CONTACTS_CONNECTION, "account", "me@example.com", "protocol", "example", NULL); QCOMPARE(mConn->connect(), true); mContactRepo = tp_base_connection_get_handles(TP_BASE_CONNECTION(mConn->service()), TP_HANDLE_TYPE_CONTACT); guint handle = tp_handle_ensure(mContactRepo, "someone@localhost", 0, 0); // create a Channel by magic, rather than doing D-Bus round-trips for it mText1ChanPath = mConn->objectPath() + QLatin1String("/TextChannel1"); QByteArray chanPath(mText1ChanPath.toAscii()); mText1ChanService = EXAMPLE_ECHO_CHANNEL(g_object_new( EXAMPLE_TYPE_ECHO_CHANNEL, "connection", mConn->service(), "object-path", chanPath.data(), "handle", handle, NULL)); mText2ChanPath = mConn->objectPath() + QLatin1String("/TextChannel2"); chanPath = mText2ChanPath.toAscii(); mText2ChanService = EXAMPLE_ECHO_CHANNEL(g_object_new( EXAMPLE_TYPE_ECHO_CHANNEL, "connection", mConn->service(), "object-path", chanPath.data(), "handle", handle, NULL)); mClientRegistrar = ClientRegistrar::create(); QDBusConnection bus = mClientRegistrar->dbusConnection(); // Fake ChannelRequest mChannelDispatcherBusName = TP_QT_IFACE_CHANNEL_DISPATCHER; mChannelRequestPath = QLatin1String("/org/freedesktop/Telepathy/ChannelRequest/Request1"); QObject *request = new QObject(this); mUserActionTime = QDateTime::currentDateTime().toTime_t(); new ChannelRequestAdaptor(QDBusObjectPath(mAccount->objectPath()), mUserActionTime, QString(), QualifiedPropertyValueMapList(), QStringList(), request); QVERIFY(bus.registerService(mChannelDispatcherBusName)); QVERIFY(bus.registerObject(mChannelRequestPath, request)); // Fake ChannelDispatchOperation mCDOPath = QLatin1String("/org/freedesktop/Telepathy/ChannelDispatchOperation/Operation1"); QObject *cdo = new QObject(this); // Initialize this here so we can actually set it in possibleHandlers mClientObject1BusName = QLatin1String("org.freedesktop.Telepathy.Client.foo"); ChannelDetailsList channelDetailsList; ChannelDetails channelDetails = { QDBusObjectPath(mText1ChanPath), QVariantMap() }; channelDetailsList.append(channelDetails); mCDO = new ChannelDispatchOperationAdaptor(QDBusObjectPath(mAccount->objectPath()), QDBusObjectPath(mConn->objectPath()), channelDetailsList, QStringList() << mClientObject1BusName, cdo); QVERIFY(bus.registerObject(mCDOPath, cdo)); } void TestClient::init() { initImpl(); mClaimFinished = false; } void TestClient::testRegister() { // invalid client QVERIFY(!mClientRegistrar->registerClient(AbstractClientPtr(), QLatin1String("foo"))); mClientCapabilities.setICEUDPNATTraversalToken(); mClientCapabilities.setToken(TP_QT_IFACE_CHANNEL_INTERFACE_MEDIA_SIGNALLING + QLatin1String("/audio/speex=true")); ChannelClassSpecList filters; filters.append(ChannelClassSpec::textChat()); mClientObject1 = MyClient::create(filters, mClientCapabilities, false, true); MyClient *client = dynamic_cast(mClientObject1.data()); QVERIFY(!client->isRegistered()); QVERIFY(mClientRegistrar->registerClient(mClientObject1, QLatin1String("foo"))); QVERIFY(client->isRegistered()); QVERIFY(mClientRegistrar->registeredClients().contains(mClientObject1)); AbstractClientPtr clientObjectRedundant = MyClient::create( filters, mClientCapabilities, false, true); client = dynamic_cast(clientObjectRedundant.data()); QVERIFY(!client->isRegistered()); // try to register using a name already registered and a different object, it should fail // and not report isRegistered QVERIFY(!mClientRegistrar->registerClient(clientObjectRedundant, QLatin1String("foo"))); QVERIFY(!client->isRegistered()); QVERIFY(!mClientRegistrar->registeredClients().contains(clientObjectRedundant)); client = dynamic_cast(mClientObject1.data()); // no op - client already registered with same object and name QVERIFY(mClientRegistrar->registerClient(mClientObject1, QLatin1String("foo"))); // unregister client QVERIFY(mClientRegistrar->unregisterClient(mClientObject1)); QVERIFY(!client->isRegistered()); // register again QVERIFY(mClientRegistrar->registerClient(mClientObject1, QLatin1String("foo"))); QVERIFY(client->isRegistered()); filters.clear(); filters.append(ChannelClassSpec::streamedMediaCall()); mClientObject2 = MyClient::create(filters, mClientCapabilities, true, true); QVERIFY(mClientRegistrar->registerClient(mClientObject2, QLatin1String("foo"), true)); QVERIFY(mClientRegistrar->registeredClients().contains(mClientObject2)); // no op - client already registered QVERIFY(mClientRegistrar->registerClient(mClientObject2, QLatin1String("foo"), true)); QDBusConnection bus = mClientRegistrar->dbusConnection(); QDBusConnectionInterface *busIface = bus.interface(); QStringList registeredServicesNames = busIface->registeredServiceNames(); QVERIFY(registeredServicesNames.filter( QRegExp(QLatin1String("^" "org.freedesktop.Telepathy.Client.foo" ".([_A-Za-z][_A-Za-z0-9]*)"))).size() == 1); mClientObject1BusName = QLatin1String("org.freedesktop.Telepathy.Client.foo"); mClientObject1Path = QLatin1String("/org/freedesktop/Telepathy/Client/foo"); mClientObject2BusName = registeredServicesNames.filter( QRegExp(QLatin1String("org.freedesktop.Telepathy.Client.foo._*"))).first(); mClientObject2Path = QString(QLatin1String("/%1")).arg(mClientObject2BusName); mClientObject2Path.replace(QLatin1String("."), QLatin1String("/")); } void TestClient::testCapabilities() { QDBusConnection bus = mClientRegistrar->dbusConnection(); QStringList normalizedClientCaps = mClientCapabilities.allTokens(); normalizedClientCaps.sort(); QStringList normalizedHandlerCaps; // object 1 ClientHandlerInterface *handler1Iface = new ClientHandlerInterface(bus, mClientObject1BusName, mClientObject1Path, this); QVERIFY(waitForProperty(handler1Iface->requestPropertyCapabilities(), &normalizedHandlerCaps)); normalizedHandlerCaps.sort(); QCOMPARE(normalizedHandlerCaps, normalizedClientCaps); // object 2 ClientHandlerInterface *handler2Iface = new ClientHandlerInterface(bus, mClientObject2BusName, mClientObject2Path, this); QVERIFY(waitForProperty(handler2Iface->requestPropertyCapabilities(), &normalizedHandlerCaps)); normalizedHandlerCaps.sort(); QCOMPARE(normalizedHandlerCaps, normalizedClientCaps); } void TestClient::testRequests() { QDBusConnection bus = mClientRegistrar->dbusConnection(); ClientInterfaceRequestsInterface *handlerRequestsIface = new ClientInterfaceRequestsInterface(bus, mClientObject1BusName, mClientObject1Path, this); MyClient *client = dynamic_cast(mClientObject1.data()); connect(client, SIGNAL(requestAdded(const Tp::ChannelRequestPtr &)), SLOT(expectSignalEmission())); handlerRequestsIface->AddRequest(QDBusObjectPath(mChannelRequestPath), QVariantMap()); if (!client->mAddRequestRequest) { QCOMPARE(mLoop->exec(), 0); } QCOMPARE(client->mAddRequestRequest->objectPath(), mChannelRequestPath); connect(client, SIGNAL(requestRemoved(const Tp::ChannelRequestPtr &, const QString &, const QString &)), SLOT(expectSignalEmission())); handlerRequestsIface->RemoveRequest(QDBusObjectPath(mChannelRequestPath), QLatin1String(TP_QT_ERROR_NOT_AVAILABLE), QLatin1String("Not available")); if (!client->mRemoveRequestRequest) { QCOMPARE(mLoop->exec(), 0); } QCOMPARE(client->mRemoveRequestRequest->objectPath(), mChannelRequestPath); QCOMPARE(client->mRemoveRequestErrorName, QString(QLatin1String(TP_QT_ERROR_NOT_AVAILABLE))); QCOMPARE(client->mRemoveRequestErrorMessage, QString(QLatin1String("Not available"))); } void TestClient::testObserveChannelsCommon(const AbstractClientPtr &clientObject, const QString &clientBusName, const QString &clientObjectPath) { QDBusConnection bus = mClientRegistrar->dbusConnection(); ClientObserverInterface *observeIface = new ClientObserverInterface(bus, clientBusName, clientObjectPath, this); MyClient *client = dynamic_cast(clientObject.data()); connect(client, SIGNAL(observeChannelsFinished()), SLOT(expectSignalEmission())); ChannelDetailsList channelDetailsList; ChannelDetails channelDetails = { QDBusObjectPath(mText1ChanPath), QVariantMap() }; channelDetailsList.append(channelDetails); QVariantMap observerInfo; ObjectImmutablePropertiesMap reqPropsMap; QVariantMap channelReqImmutableProps; channelReqImmutableProps.insert( TP_QT_IFACE_CHANNEL_REQUEST + QLatin1String(".Interface.DomainSpecific.IntegerProp"), 3); channelReqImmutableProps.insert(TP_QT_IFACE_CHANNEL_REQUEST + QLatin1String(".Account"), qVariantFromValue(QDBusObjectPath(mAccount->objectPath()))); reqPropsMap.insert(QDBusObjectPath(mChannelRequestPath), channelReqImmutableProps); observerInfo.insert(QLatin1String("request-properties"), qVariantFromValue(reqPropsMap)); observeIface->ObserveChannels(QDBusObjectPath(mAccount->objectPath()), QDBusObjectPath(mConn->objectPath()), channelDetailsList, QDBusObjectPath("/"), ObjectPathList() << QDBusObjectPath(mChannelRequestPath), observerInfo); QCOMPARE(mLoop->exec(), 0); QCOMPARE(client->mObserveChannelsAccount->objectPath(), mAccount->objectPath()); QCOMPARE(client->mObserveChannelsConnection->objectPath(), mConn->objectPath()); QCOMPARE(client->mObserveChannelsChannels.first()->objectPath(), mText1ChanPath); QVERIFY(client->mObserveChannelsDispatchOperation.isNull()); QCOMPARE(client->mObserveChannelsRequestsSatisfied.first()->objectPath(), mChannelRequestPath); QCOMPARE(client->mObserveChannelsRequestsSatisfied.first()->immutableProperties().contains( TP_QT_IFACE_CHANNEL_REQUEST + QLatin1String(".Interface.DomainSpecific.IntegerProp")), true); QCOMPARE(qdbus_cast(client->mObserveChannelsRequestsSatisfied.first()->immutableProperties().value( TP_QT_IFACE_CHANNEL_REQUEST + QLatin1String(".Interface.DomainSpecific.IntegerProp"))), 3); } void TestClient::testObserveChannels() { testObserveChannelsCommon(mClientObject1, mClientObject1BusName, mClientObject1Path); testObserveChannelsCommon(mClientObject2, mClientObject2BusName, mClientObject2Path); } void TestClient::testAddDispatchOperation() { QDBusConnection bus = mClientRegistrar->dbusConnection(); ClientApproverInterface *approverIface = new ClientApproverInterface(bus, mClientObject1BusName, mClientObject1Path, this); ClientHandlerInterface *handler1Iface = new ClientHandlerInterface(bus, mClientObject1BusName, mClientObject1Path, this); MyClient *client = dynamic_cast(mClientObject1.data()); connect(client, SIGNAL(addDispatchOperationFinished()), SLOT(expectSignalEmission())); connect(client, SIGNAL(claimFinished()), SLOT(onClaimFinished())); QVariantMap dispatchOperationProperties; dispatchOperationProperties.insert( TP_QT_IFACE_CHANNEL_DISPATCH_OPERATION + QLatin1String(".Connection"), QVariant::fromValue(QDBusObjectPath(mConn->objectPath()))); dispatchOperationProperties.insert( TP_QT_IFACE_CHANNEL_DISPATCH_OPERATION + QLatin1String(".Account"), QVariant::fromValue(QDBusObjectPath(mAccount->objectPath()))); dispatchOperationProperties.insert( TP_QT_IFACE_CHANNEL_DISPATCH_OPERATION + QLatin1String(".PossibleHandlers"), QVariant::fromValue(ObjectPathList() << QDBusObjectPath(mClientObject1Path) << QDBusObjectPath(mClientObject2Path))); // Handler.HandledChannels should be empty here, CDO::claim(handler) will populate it on // success Tp::ObjectPathList handledChannels; QVERIFY(waitForProperty(handler1Iface->requestPropertyHandledChannels(), &handledChannels)); QVERIFY(handledChannels.isEmpty()); approverIface->AddDispatchOperation(mCDO->Channels(), QDBusObjectPath(mCDOPath), dispatchOperationProperties); QCOMPARE(mLoop->exec(), 0); while (!mClaimFinished) { mLoop->processEvents(); } QCOMPARE(client->mAddDispatchOperationChannels.first()->objectPath(), mText1ChanPath); QCOMPARE(client->mAddDispatchOperationDispatchOperation->objectPath(), mCDOPath); // Claim finished, Handler.HandledChannels should be populated now handledChannels.clear(); QVERIFY(waitForProperty(handler1Iface->requestPropertyHandledChannels(), &handledChannels)); QVERIFY(!handledChannels.isEmpty()); qSort(handledChannels); Tp::ObjectPathList expectedHandledChannels; Q_FOREACH (const ChannelDetails &details, mCDO->Channels()) { expectedHandledChannels << details.channel; } qSort(expectedHandledChannels); QCOMPARE(handledChannels, expectedHandledChannels); } void TestClient::testHandleChannels() { QDBusConnection bus = mClientRegistrar->dbusConnection(); // object 1 ClientHandlerInterface *handler1Iface = new ClientHandlerInterface(bus, mClientObject1BusName, mClientObject1Path, this); MyClient *client1 = dynamic_cast(mClientObject1.data()); connect(client1, SIGNAL(handleChannelsFinished()), SLOT(expectSignalEmission())); ChannelDetailsList channelDetailsList; ChannelDetails channelDetails = { QDBusObjectPath(mText1ChanPath), QVariantMap() }; channelDetailsList.append(channelDetails); handler1Iface->HandleChannels(QDBusObjectPath(mAccount->objectPath()), QDBusObjectPath(mConn->objectPath()), channelDetailsList, ObjectPathList() << QDBusObjectPath(mChannelRequestPath), mUserActionTime, QVariantMap()); QCOMPARE(mLoop->exec(), 0); QCOMPARE(client1->mHandleChannelsAccount->objectPath(), mAccount->objectPath()); QCOMPARE(client1->mHandleChannelsConnection->objectPath(), mConn->objectPath()); QCOMPARE(client1->mHandleChannelsChannels.first()->objectPath(), mText1ChanPath); QCOMPARE(client1->mHandleChannelsRequestsSatisfied.first()->objectPath(), mChannelRequestPath); QCOMPARE(client1->mHandleChannelsUserActionTime.toTime_t(), mUserActionTime); Tp::ObjectPathList handledChannels; QVERIFY(waitForProperty(handler1Iface->requestPropertyHandledChannels(), &handledChannels)); QVERIFY(handledChannels.contains(QDBusObjectPath(mText1ChanPath))); // object 2 ClientHandlerInterface *handler2Iface = new ClientHandlerInterface(bus, mClientObject2BusName, mClientObject2Path, this); MyClient *client2 = dynamic_cast(mClientObject2.data()); connect(client2, SIGNAL(handleChannelsFinished()), SLOT(expectSignalEmission())); channelDetailsList.clear(); channelDetails.channel = QDBusObjectPath(mText2ChanPath); channelDetailsList.append(channelDetails); handler2Iface->HandleChannels(QDBusObjectPath(mAccount->objectPath()), QDBusObjectPath(mConn->objectPath()), channelDetailsList, ObjectPathList() << QDBusObjectPath(mChannelRequestPath), mUserActionTime, QVariantMap()); QCOMPARE(mLoop->exec(), 0); QCOMPARE(client2->mHandleChannelsAccount->objectPath(), mAccount->objectPath()); QCOMPARE(client2->mHandleChannelsConnection->objectPath(), mConn->objectPath()); QCOMPARE(client2->mHandleChannelsChannels.first()->objectPath(), mText2ChanPath); QCOMPARE(client2->mHandleChannelsRequestsSatisfied.first()->objectPath(), mChannelRequestPath); QCOMPARE(client2->mHandleChannelsUserActionTime.toTime_t(), mUserActionTime); QVERIFY(waitForProperty(handler1Iface->requestPropertyHandledChannels(), &handledChannels)); QVERIFY(handledChannels.contains(QDBusObjectPath(mText1ChanPath))); QVERIFY(handledChannels.contains(QDBusObjectPath(mText2ChanPath))); QVERIFY(waitForProperty(handler2Iface->requestPropertyHandledChannels(), &handledChannels)); QVERIFY(handledChannels.contains(QDBusObjectPath(mText1ChanPath))); QVERIFY(handledChannels.contains(QDBusObjectPath(mText2ChanPath))); // Handler.HandledChannels will now return all channels that are not invalidated/destroyed // even if the handler for such channels was already unregistered g_object_unref(mText1ChanService); connect(client1, SIGNAL(channelClosed()), SLOT(expectSignalEmission())); QCOMPARE(mLoop->exec(), 0); mClientRegistrar->unregisterClient(mClientObject1); QVERIFY(waitForProperty(handler2Iface->requestPropertyHandledChannels(), &handledChannels)); QVERIFY(handledChannels.contains(QDBusObjectPath(mText2ChanPath))); g_object_unref(mText2ChanService); connect(client2, SIGNAL(channelClosed()), SLOT(expectSignalEmission())); QCOMPARE(mLoop->exec(), 0); QVERIFY(waitForProperty(handler2Iface->requestPropertyHandledChannels(), &handledChannels)); QVERIFY(handledChannels.isEmpty()); } void TestClient::cleanup() { cleanupImpl(); } void TestClient::cleanupTestCase() { if (mConn) { QCOMPARE(mConn->disconnect(), true); delete mConn; } cleanupTestCaseImpl(); } QTEST_MAIN(TestClient) #include "_gen/client.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/CMakeLists.txt0000644000175200001440000001452112000056607023256 0ustar00collabora-develusers00000000000000file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/_gen") tpqt_setup_dbus_test_environment() if(HAVE_TEST_PYTHON) tpqt_add_dbus_unit_test(DBusProperties dbus-properties "") endif(HAVE_TEST_PYTHON) if(ENABLE_TP_GLIB_TESTS) include_directories(${CMAKE_SOURCE_DIR}/tests/lib/glib ${TELEPATHY_GLIB_INCLUDE_DIR} ${GLIB2_INCLUDE_DIR} ${DBUS_INCLUDE_DIR}) add_definitions(-DQT_NO_KEYWORDS) if (${QT_VERSION_MAJOR} EQUAL 4) if (NOT ${QT_VERSION_MINOR} EQUAL 6) # >= qt 4.7 # FIXME - Re-enable racy tests once https://bugs.freedesktop.org/show_bug.cgi?id=43356 is # fixed SET(ENABLE_TESTS_WITH_RACES_IN_QT_4_6 TRUE) SET(ENABLE_TESTS_WITH_ISSUES_IN_QT_5 TRUE) endif (NOT ${QT_VERSION_MINOR} EQUAL 6) else (${QT_VERSION_MAJOR} EQUAL 4) # Currently none - this variable is here in case some issues arise SET(ENABLE_TESTS_WITH_ISSUES_IN_QT_5 FALSE) SET(ENABLE_TESTS_WITH_RACES_IN_QT_4_6 TRUE) endif (${QT_VERSION_MAJOR} EQUAL 4) if(HAVE_TEST_PYTHON) tpqt_add_dbus_unit_test(AccountBasics account-basics tp-glib-tests tp-qt-tests-glib-helpers) tpqt_add_dbus_unit_test(AccountSet account-set tp-glib-tests tp-qt-tests-glib-helpers) tpqt_add_dbus_unit_test(AccountChannelDispatcher account-channel-dispatcher tp-glib-tests tp-qt-tests-glib-helpers) tpqt_add_dbus_unit_test(Client client tp-glib-tests tp-qt-tests-glib-helpers) tpqt_add_dbus_unit_test(ClientFactories client-factories tp-glib-tests) endif(HAVE_TEST_PYTHON) tpqt_add_dbus_unit_test(AccountConnectionFactory account-connection-factory tp-glib-tests tp-qt-tests-glib-helpers) tpqt_add_dbus_unit_test(CallChannel call-channel tp-glib-tests tp-qt-tests-glib-helpers) tpqt_add_dbus_unit_test(CaptchaAuthentication captcha-authentication tp-glib-tests tp-qt-tests-glib-helpers) tpqt_add_dbus_unit_test(ChannelBasics chan-basics tp-glib-tests tp-qt-tests-glib-helpers) tpqt_add_dbus_unit_test(ChannelConference chan-conference tp-glib-tests future-example-cm-conference tp-qt-tests-glib-helpers) tpqt_add_dbus_unit_test(ChannelGroup chan-group tp-glib-tests tp-qt-tests-glib-helpers) tpqt_add_dbus_unit_test(ConnectionManagerBasics cm-basics tp-glib-tests) tpqt_add_dbus_unit_test(ConnectionAddressing conn-addressing tp-glib-tests future-example-conn-addressing tp-qt-tests-glib-helpers) tpqt_add_dbus_unit_test(ConnectionBasics conn-basics tp-glib-tests) tpqt_add_dbus_unit_test(ConnectionCapabilities conn-capabilities tp-glib-tests tp-qt-tests-glib-helpers) tpqt_add_dbus_unit_test(ConnectionIntrospectCornercases conn-introspect-cornercases tp-glib-tests) tpqt_add_dbus_unit_test(ConnectionRequests conn-requests tp-glib-tests tp-qt-tests-glib-helpers) tpqt_add_dbus_unit_test(ConnectionRosterLegacy conn-roster-legacy tp-glib-tests tp-qt-tests-glib-helpers) tpqt_add_dbus_unit_test(ConnectionRoster conn-roster example-cm-contactlist2 tp-qt-tests-glib-helpers ${GLIB2_LIBRARIES} ${GOBJECT_LIBRARIES} ${DBUS_GLIB_LIBRARIES} ${TELEPATHY_GLIB_LIBRARIES}) tpqt_add_dbus_unit_test(ConnectionRosterGroupsLegacy conn-roster-groups-legacy tp-glib-tests) tpqt_add_dbus_unit_test(ConnectionRosterGroups conn-roster-groups example-cm-contactlist2 ${GLIB2_LIBRARIES} ${GOBJECT_LIBRARIES} ${DBUS_GLIB_LIBRARIES} ${TELEPATHY_GLIB_LIBRARIES}) tpqt_add_dbus_unit_test(ContactFactory contact-factory tp-glib-tests tp-qt-tests-glib-helpers) tpqt_add_dbus_unit_test(ContactMessenger contact-messenger tp-glib-tests) tpqt_add_dbus_unit_test(ContactSearchChannel contact-search-chan tp-glib-tests tp-qt-tests-glib-helpers) tpqt_add_dbus_unit_test(Contacts contacts tp-glib-tests) tpqt_add_dbus_unit_test(ContactsAvatar contacts-avatar tp-glib-tests tp-qt-tests-glib-helpers) tpqt_add_dbus_unit_test(ContactsCapabilities contacts-capabilities tp-glib-tests tp-qt-tests-glib-helpers) tpqt_add_dbus_unit_test(ContactsClientTypes contacts-client-types tp-glib-tests tp-qt-tests-glib-helpers) tpqt_add_dbus_unit_test(ContactsInfo contacts-info tp-glib-tests tp-qt-tests-glib-helpers) tpqt_add_dbus_unit_test(ContactsLocation contacts-location tp-glib-tests tp-qt-tests-glib-helpers) tpqt_add_dbus_unit_test(DBusProxyFactory dbus-proxy-factory tp-glib-tests telepathy-qt-test-backdoors) tpqt_add_dbus_unit_test(Handles handles tp-glib-tests tp-qt-tests-glib-helpers) tpqt_add_dbus_unit_test(Properties properties tp-glib-tests tp-qt-tests-glib-helpers) tpqt_add_dbus_unit_test(SimpleObserver simple-observer tp-glib-tests) tpqt_add_dbus_unit_test(StatefulProxy stateful-proxy tp-glib-tests) tpqt_add_dbus_unit_test(StreamedMediaChannel streamed-media-chan tp-glib-tests tp-qt-tests-glib-helpers) if (ENABLE_TESTS_WITH_RACES_IN_QT_4_6) tpqt_add_dbus_unit_test(TextChannel text-chan tp-glib-tests tp-qt-tests-glib-helpers) tpqt_add_dbus_unit_test(StreamTubeHandlers stream-tube-handlers tp-glib-tests tp-qt-tests-glib-helpers) if(ENABLE_TP_GLIB_GIO_TESTS) tpqt_add_dbus_unit_test(StreamTubeChannel stream-tube-chan tp-glib-tests tp-qt-tests-glib-helpers) endif(ENABLE_TP_GLIB_GIO_TESTS) endif (ENABLE_TESTS_WITH_RACES_IN_QT_4_6) if(NOT (${QT_VERSION_MAJOR} EQUAL 4 AND ${QT_VERSION_MINOR} LESS 8)) message(STATUS "Enabling Qt 4.8+ tests") tpqt_add_dbus_unit_test(DBusTubeChannel dbus-tube-chan tp-glib-tests tp-qt-tests-glib-helpers) endif(NOT (${QT_VERSION_MAJOR} EQUAL 4 AND ${QT_VERSION_MINOR} LESS 8)) endif(ENABLE_TP_GLIB_TESTS) tpqt_add_dbus_unit_test(CmProtocol cm-protocol) tpqt_add_dbus_unit_test(ProfileManager profile-manager) tpqt_add_dbus_unit_test(Types types) if(ENABLE_EXPERIMENTAL_SERVICE_SUPPORT) tpqt_add_dbus_unit_test(BaseConnectionManager base-cm telepathy-qt${QT_VERSION_MAJOR}-service) tpqt_add_dbus_unit_test(BaseProtocol base-protocol telepathy-qt${QT_VERSION_MAJOR}-service) endif(ENABLE_EXPERIMENTAL_SERVICE_SUPPORT) # Make check target. In case of check, output on failure and put it into a log # This target has to stay here for catching all of the tests add_custom_target(check ctest --output-on-failure -O test.log WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/tests) add_dependencies(check check-local ${_telepathy_qt_test_cases}) telepathy-qt-0.9.3/tests/dbus/captcha-authentication.cpp0000644000175200001440000002471212000056607025645 0ustar00collabora-develusers00000000000000#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace Tp; class TestCaptchaAuthentication : public Test { Q_OBJECT public: TestCaptchaAuthentication(QObject *parent = 0) : Test(parent), mConn(0), mChanService(0) { } private Q_SLOTS: void initTestCase(); void init(); void testCreation(); void testCaptchaSuccessful(); void testCaptchaRetry(); void testCaptchaCancel(); void testNoCaptcha(); void cleanup(); void cleanupTestCase(); private: void createCaptchaChannel(bool canRetry = false); TestConnHelper *mConn; TpTestsCaptchaChannel *mChanService; ServerAuthenticationChannelPtr mChan; CaptchaAuthenticationPtr mCaptcha; }; void TestCaptchaAuthentication::createCaptchaChannel(bool canRetry) { mChan.reset(); mLoop->processEvents(); tp_clear_object(&mChanService); /* Create service-side tube channel object */ QString chanPath = QString(QLatin1String("%1/Channel")).arg(mConn->objectPath()); mChanService = TP_TESTS_CAPTCHA_CHANNEL(g_object_new( TP_TESTS_TYPE_CAPTCHA_CHANNEL, "connection", mConn->service(), "requested", FALSE, "object-path", chanPath.toLatin1().constData(), "can-retry-captcha", canRetry, NULL)); /* Create client-side tube channel object */ mChan = ServerAuthenticationChannel::create(mConn->client(), chanPath, QVariantMap()); // Verify features shouldn't be Ready QVERIFY(mChan->captchaAuthentication().isNull()); QVERIFY(!mChan->hasCaptchaInterface()); //QVERIFY(!mChan->hasSaslInterface()); QVERIFY(connect(mChan->becomeReady(ServerAuthenticationChannel::FeatureCore), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(mChan->isReady(ServerAuthenticationChannel::FeatureCore)); QVERIFY(mChan->hasCaptchaInterface()); //QVERIFY(!mChan->hasSaslInterface()); mCaptcha = mChan->captchaAuthentication(); QCOMPARE(mCaptcha.isNull(), false); } void TestCaptchaAuthentication::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("captcha-authentication"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); mConn = new TestConnHelper(this, TP_TESTS_TYPE_SIMPLE_CONNECTION, "account", "me@example.com", "protocol", "example", NULL); QCOMPARE(mConn->connect(), true); } void TestCaptchaAuthentication::init() { initImpl(); } void TestCaptchaAuthentication::testCreation() { createCaptchaChannel(); QCOMPARE(mCaptcha->status(), Tp::CaptchaStatusLocalPending); QCOMPARE(mCaptcha->canRetry(), false); QVERIFY(mCaptcha->error().isEmpty()); QVERIFY(mCaptcha->errorDetails().allDetails().isEmpty()); } void TestCaptchaAuthentication::testCaptchaSuccessful() { createCaptchaChannel(); QSignalSpy spy(mCaptcha.data(), SIGNAL(statusChanged(Tp::CaptchaStatus))); PendingCaptchas *pendingCaptchas = mCaptcha->requestCaptchas(QStringList() << QLatin1String("image/png")); QVERIFY(connect(pendingCaptchas, SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(pendingCaptchas->requiresMultipleCaptchas(), false); QCOMPARE(pendingCaptchas->captchaList().size(), 1); Captcha captchaData = pendingCaptchas->captcha(); QCOMPARE(captchaData.mimeType(), QLatin1String("image/png")); QCOMPARE(captchaData.label(), QLatin1String("Enter the text displayed")); QCOMPARE(captchaData.data(), QByteArray("This is a fake payload")); QCOMPARE(captchaData.type(), CaptchaAuthentication::OCRChallenge); QCOMPARE(captchaData.id(), (uint)42); QVERIFY(connect(mCaptcha->answer(42, QLatin1String("This is the right answer")), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(spy.size(), 2); QCOMPARE(mCaptcha->status(), CaptchaStatusSucceeded); } void TestCaptchaAuthentication::testCaptchaRetry() { createCaptchaChannel(true); QSignalSpy spy(mCaptcha.data(), SIGNAL(statusChanged(Tp::CaptchaStatus))); PendingCaptchas *pendingCaptchas = mCaptcha->requestCaptchas(QStringList() << QLatin1String("image/png")); QVERIFY(connect(pendingCaptchas, SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mCaptcha->answer(42, QLatin1String("What is this I don't even")), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectFailure(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mCaptcha->status(), CaptchaStatusTryAgain); pendingCaptchas = mCaptcha->requestCaptchas(QStringList() << QLatin1String("image/png")); QVERIFY(connect(pendingCaptchas, SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(pendingCaptchas->requiresMultipleCaptchas(), false); QCOMPARE(pendingCaptchas->captchaList().size(), 1); Captcha captchaData = pendingCaptchas->captcha(); QCOMPARE(captchaData.mimeType(), QLatin1String("image/png")); QCOMPARE(captchaData.label(), QLatin1String("Enter the text displayed")); QCOMPARE(captchaData.data(), QByteArray("This is a reloaded payload")); QCOMPARE(captchaData.type(), CaptchaAuthentication::OCRChallenge); QCOMPARE(captchaData.id(), (uint)42); QVERIFY(connect(mCaptcha->answer(42, QLatin1String("This is the right answer")), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mCaptcha->status(), CaptchaStatusSucceeded); // Check signals now QCOMPARE(spy.size(), 5); } void TestCaptchaAuthentication::testCaptchaCancel() { createCaptchaChannel(); PendingCaptchas *pendingCaptchas = mCaptcha->requestCaptchas(QStringList() << QLatin1String("image/png")); QVERIFY(connect(pendingCaptchas, SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); // Check that the result is not still available QCOMPARE(pendingCaptchas->captchaList().size(), 0); QCOMPARE(pendingCaptchas->captcha().id(), (uint)0); QCOMPARE(mLoop->exec(), 0); // Cancel now QVERIFY(connect(mCaptcha->cancel(CaptchaCancelReasonUserCancelled), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mCaptcha->status(), CaptchaStatusFailed); // Now try performing random actions which should fail QVERIFY(connect(mCaptcha->answer(42, QLatin1String("This is the right answer")), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectFailure(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mCaptcha->answer(CaptchaAnswers()), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectFailure(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mCaptcha->requestCaptchas(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectFailure(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); } void TestCaptchaAuthentication::testNoCaptcha() { createCaptchaChannel(); PendingCaptchas *pendingCaptchas = mCaptcha->requestCaptchas(QStringList(), CaptchaAuthentication::AudioRecognitionChallenge); QVERIFY(connect(pendingCaptchas, SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectFailure(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); pendingCaptchas = mCaptcha->requestCaptchas(QStringList() << QLatin1String("nosuchtype"), CaptchaAuthentication::SpeechRecognitionChallenge | CaptchaAuthentication::SpeechQuestionChallenge); QVERIFY(connect(pendingCaptchas, SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectFailure(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); // Get the qa one pendingCaptchas = mCaptcha->requestCaptchas(QStringList(), CaptchaAuthentication::TextQuestionChallenge); QVERIFY(connect(pendingCaptchas, SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); Captcha data = pendingCaptchas->captcha(); Captcha data2(pendingCaptchas->captcha()); QCOMPARE(data.id(), pendingCaptchas->captcha().id()); QCOMPARE(data.id(), data2.id()); // Get the video one to fail utterly pendingCaptchas = mCaptcha->requestCaptchas(QStringList(), CaptchaAuthentication::VideoRecognitionChallenge); QVERIFY(connect(pendingCaptchas, SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectFailure(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); } void TestCaptchaAuthentication::cleanup() { cleanupImpl(); if (mChan && mChan->isValid()) { qDebug() << "waiting for the channel to become invalidated"; QVERIFY(connect(mChan.data(), SIGNAL(invalidated(Tp::DBusProxy*,QString,QString)), mLoop, SLOT(quit()))); tp_base_channel_close(TP_BASE_CHANNEL(mChanService)); QCOMPARE(mLoop->exec(), 0); } mChan.reset(); if (mChanService != 0) { g_object_unref(mChanService); mChanService = 0; } mLoop->processEvents(); } void TestCaptchaAuthentication::cleanupTestCase() { QCOMPARE(mConn->disconnect(), true); delete mConn; cleanupTestCaseImpl(); } QTEST_MAIN(TestCaptchaAuthentication) #include "_gen/captcha-authentication.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/conn-addressing.cpp0000644000175200001440000003270212000056607024301 0ustar00collabora-develusers00000000000000#include #include #include #define TP_QT_ENABLE_LOWLEVEL_API #include #include #include #include #include #include #include using namespace Tp; class TestConnAddressing : public Test { Q_OBJECT public: TestConnAddressing(QObject *parent = 0) : Test(parent) { } protected Q_SLOTS: void expectPendingContactsFinished(Tp::PendingOperation *); private Q_SLOTS: void initTestCase(); void init(); void testSupport(); void testRequest(); void testRequestNoFeatures(); void testRequestEmpty(); void cleanup(); void cleanupTestCase(); private: void commonTestRequest(bool withFeatures); TestConnHelper *mConn; QList mContacts; Tp::UIntList mInvalidHandles; QStringList mValidIds; QHash > mInvalidIds; QStringList mValidVCardAddresses; QStringList mInvalidVCardAddresses; QStringList mValidUris; QStringList mInvalidUris; }; void TestConnAddressing::expectPendingContactsFinished(PendingOperation *op) { TEST_VERIFY_OP(op); PendingContacts *pc = qobject_cast(op); mContacts = pc->contacts(); mInvalidHandles = pc->invalidHandles(); mValidIds = pc->validIdentifiers(); mInvalidIds = pc->invalidIdentifiers(); mValidVCardAddresses = pc->validVCardAddresses(); mInvalidVCardAddresses = pc->invalidVCardAddresses(); mValidUris = pc->validUris(); mInvalidUris = pc->invalidUris(); mLoop->exit(0); } void TestConnAddressing::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("conn-addressing"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); mConn = new TestConnHelper(this, TP_TESTS_TYPE_ADDRESSING_CONNECTION, "account", "me@example.com", "protocol", "addressing", NULL); QVERIFY(mConn->connect()); } void TestConnAddressing::init() { initImpl(); mContacts.clear(); mInvalidHandles.clear(); mValidIds.clear(); mInvalidIds.clear(); mValidVCardAddresses.clear(); mInvalidVCardAddresses.clear(); mValidUris.clear(); mInvalidUris.clear(); } void TestConnAddressing::testSupport() { ConnectionPtr conn = mConn->client(); QVERIFY(!conn->lowlevel()->contactAttributeInterfaces().isEmpty()); QVERIFY(conn->lowlevel()->contactAttributeInterfaces().contains( TP_QT_IFACE_CONNECTION)); QVERIFY(conn->lowlevel()->contactAttributeInterfaces().contains( TP_QT_IFACE_CONNECTION_INTERFACE_ADDRESSING)); Features supportedFeatures = conn->contactManager()->supportedFeatures(); QVERIFY(!supportedFeatures.isEmpty()); QVERIFY(supportedFeatures.contains(Contact::FeatureAddresses)); } void TestConnAddressing::commonTestRequest(bool withFeatures) { ConnectionPtr conn = mConn->client(); Features features; if (withFeatures) { features << Contact::FeatureInfo << Contact::FeatureAddresses; } QStringList validUris; validUris << QLatin1String("addr:foo"); QStringList invalidUris; invalidUris << QLatin1String("invalid_uri:bar"); QStringList uris(validUris); uris.append(invalidUris); PendingContacts *pc = conn->contactManager()->contactsForUris(uris, features); // Test the closure accessors QCOMPARE(pc->manager(), conn->contactManager()); QCOMPARE(pc->features(), features); QVERIFY(pc->isForUris()); QCOMPARE(pc->uris(), uris); QVERIFY(!pc->isForHandles()); QVERIFY(pc->handles().isEmpty()); QVERIFY(!pc->isForIdentifiers()); QVERIFY(pc->identifiers().isEmpty()); QVERIFY(!pc->isForVCardAddresses()); QVERIFY(pc->vcardField().isEmpty()); QVERIFY(pc->vcardAddresses().isEmpty()); QVERIFY(!pc->isUpgrade()); QVERIFY(pc->contactsToUpgrade().isEmpty()); // Wait for the contacts to be built QVERIFY(connect(pc, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectPendingContactsFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); // There should be 1 resulting contact ("foo") and 1 uri found to be invalid QCOMPARE(mContacts.size(), 1); QCOMPARE(mContacts[0]->id(), QLatin1String("foo")); if (withFeatures) { QVERIFY(!mContacts[0]->actualFeatures().contains(Contact::FeatureLocation)); QVERIFY(mContacts[0]->actualFeatures().contains(Contact::FeatureInfo)); QVERIFY(mContacts[0]->actualFeatures().contains(Contact::FeatureAddresses)); QMap vcardAddresses; vcardAddresses.insert(QLatin1String("x-addr"), QLatin1String("foo")); QStringList uris; uris.append(QLatin1String("addr:foo")); QCOMPARE(mContacts[0]->vcardAddresses(), vcardAddresses); QCOMPARE(mContacts[0]->uris(), uris); } else { QVERIFY(!mContacts[0]->actualFeatures().contains(Contact::FeatureLocation)); QVERIFY(!mContacts[0]->actualFeatures().contains(Contact::FeatureInfo)); // FeatureAddresses will be enabled even if not requested when // ContactManager::contactsForUris/VCardAddresses is used, // but we don't want to guarantee that, implementation detail } QCOMPARE(mValidUris, validUris); QCOMPARE(mInvalidUris, invalidUris); QVERIFY(mInvalidHandles.isEmpty()); QVERIFY(mValidIds.isEmpty()); QVERIFY(mInvalidIds.isEmpty()); QVERIFY(mValidVCardAddresses.isEmpty()); QVERIFY(mInvalidVCardAddresses.isEmpty()); QStringList ids; ids << QLatin1String("foo"); QList contacts = mConn->contacts(ids); QCOMPARE(contacts.size(), 1); QCOMPARE(mContacts[0], contacts[0]); // let's test for vCard now QString vcardField(QLatin1String("x-addr")); QStringList vcardAddresses; vcardAddresses << QLatin1String("foo") << QLatin1String("bar"); vcardAddresses.sort(); pc = conn->contactManager()->contactsForVCardAddresses(vcardField, vcardAddresses, features); // Test the closure accessors QCOMPARE(pc->manager(), conn->contactManager()); QCOMPARE(pc->features(), features); QVERIFY(pc->isForVCardAddresses()); QCOMPARE(pc->vcardField(), vcardField); QCOMPARE(pc->vcardAddresses(), vcardAddresses); QVERIFY(!pc->isForHandles()); QVERIFY(pc->handles().isEmpty()); QVERIFY(!pc->isForIdentifiers()); QVERIFY(pc->identifiers().isEmpty()); QVERIFY(!pc->isForUris()); QVERIFY(pc->uris().isEmpty()); QVERIFY(!pc->isUpgrade()); QVERIFY(pc->contactsToUpgrade().isEmpty()); // Wait for the contacts to be built QVERIFY(connect(pc, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectPendingContactsFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); // There should be 1 resulting contact ("foo") and 1 uri found to be invalid QCOMPARE(mContacts.size(), 2); if (withFeatures) { QVERIFY(!mContacts[0]->actualFeatures().contains(Contact::FeatureLocation)); QVERIFY(mContacts[0]->actualFeatures().contains(Contact::FeatureInfo)); QVERIFY(mContacts[0]->actualFeatures().contains(Contact::FeatureAddresses)); QVERIFY(!mContacts[1]->actualFeatures().contains(Contact::FeatureLocation)); QVERIFY(mContacts[1]->actualFeatures().contains(Contact::FeatureInfo)); QVERIFY(mContacts[1]->actualFeatures().contains(Contact::FeatureAddresses)); } else { QVERIFY(!mContacts[0]->actualFeatures().contains(Contact::FeatureLocation)); QVERIFY(!mContacts[0]->actualFeatures().contains(Contact::FeatureInfo)); QVERIFY(!mContacts[1]->actualFeatures().contains(Contact::FeatureLocation)); QVERIFY(!mContacts[1]->actualFeatures().contains(Contact::FeatureInfo)); // FeatureAddresses will be enabled even if not requested when // ContactManager::contactsForUris/VCardAddresses is used, // but we don't want to guarantee that, implementation detail } mValidVCardAddresses.sort(); QCOMPARE(mValidVCardAddresses, vcardAddresses); QVERIFY(mInvalidVCardAddresses.isEmpty()); QVERIFY(mInvalidHandles.isEmpty()); QVERIFY(mValidIds.isEmpty()); QVERIFY(mInvalidIds.isEmpty()); QVERIFY(mValidUris.isEmpty()); QVERIFY(mInvalidUris.isEmpty()); // contact "foo" should be one of the returned contacts QVERIFY(mContacts[0] != mContacts[1]); QVERIFY(mContacts.contains(contacts[0])); contacts.clear(); ids.clear(); ids << QLatin1String("foo") << QLatin1String("bar"); contacts = mConn->contacts(ids); QCOMPARE(contacts.size(), 2); QVERIFY(contacts.contains(mContacts[0])); QVERIFY(contacts.contains(mContacts[1])); } void TestConnAddressing::testRequest() { commonTestRequest(true); } void TestConnAddressing::testRequestNoFeatures() { commonTestRequest(false); } void TestConnAddressing::testRequestEmpty() { ConnectionPtr conn = mConn->client(); PendingContacts *pc = conn->contactManager()->contactsForHandles(UIntList()); QVERIFY(connect(pc, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectPendingContactsFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(pc->isForHandles()); QVERIFY(pc->handles().isEmpty()); QVERIFY(!pc->isForIdentifiers()); QVERIFY(pc->identifiers().isEmpty()); QVERIFY(!pc->isForUris()); QVERIFY(pc->uris().isEmpty()); QVERIFY(!pc->isForVCardAddresses()); QVERIFY(pc->vcardField().isEmpty()); QVERIFY(pc->vcardAddresses().isEmpty()); QVERIFY(!pc->isUpgrade()); QVERIFY(pc->contactsToUpgrade().isEmpty()); QVERIFY(pc->contacts().isEmpty()); QVERIFY(mInvalidHandles.isEmpty()); QVERIFY(mValidIds.isEmpty()); QVERIFY(mInvalidIds.isEmpty()); QVERIFY(mValidUris.isEmpty()); QVERIFY(mInvalidUris.isEmpty()); QVERIFY(mValidVCardAddresses.isEmpty()); QVERIFY(mInvalidVCardAddresses.isEmpty()); pc = conn->contactManager()->contactsForUris(QStringList()); QVERIFY(connect(pc, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectPendingContactsFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(pc->isForUris()); QVERIFY(pc->uris().isEmpty()); QVERIFY(!pc->isForHandles()); QVERIFY(pc->handles().isEmpty()); QVERIFY(!pc->isForIdentifiers()); QVERIFY(pc->identifiers().isEmpty()); QVERIFY(!pc->isForVCardAddresses()); QVERIFY(pc->vcardField().isEmpty()); QVERIFY(pc->vcardAddresses().isEmpty()); QVERIFY(!pc->isUpgrade()); QVERIFY(pc->contactsToUpgrade().isEmpty()); QVERIFY(pc->contacts().isEmpty()); QVERIFY(mValidUris.isEmpty()); QVERIFY(mInvalidUris.isEmpty()); QVERIFY(mInvalidHandles.isEmpty()); QVERIFY(mValidIds.isEmpty()); QVERIFY(mInvalidIds.isEmpty()); QVERIFY(mValidVCardAddresses.isEmpty()); QVERIFY(mInvalidVCardAddresses.isEmpty()); pc = conn->contactManager()->contactsForVCardAddresses(QString(), QStringList()); QVERIFY(connect(pc, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectPendingContactsFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(pc->isForVCardAddresses()); QVERIFY(pc->vcardField().isEmpty()); QVERIFY(pc->vcardAddresses().isEmpty()); QVERIFY(!pc->isForHandles()); QVERIFY(pc->handles().isEmpty()); QVERIFY(!pc->isForIdentifiers()); QVERIFY(pc->identifiers().isEmpty()); QVERIFY(!pc->isForUris()); QVERIFY(pc->uris().isEmpty()); QVERIFY(!pc->isUpgrade()); QVERIFY(pc->contactsToUpgrade().isEmpty()); QVERIFY(pc->contacts().isEmpty()); QVERIFY(mValidVCardAddresses.isEmpty()); QVERIFY(mInvalidVCardAddresses.isEmpty()); QVERIFY(mInvalidHandles.isEmpty()); QVERIFY(mValidIds.isEmpty()); QVERIFY(mInvalidIds.isEmpty()); QVERIFY(mValidUris.isEmpty()); QVERIFY(mInvalidUris.isEmpty()); pc = conn->contactManager()->contactsForVCardAddresses(QLatin1String("x-unsupported"), QStringList()); QVERIFY(connect(pc, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectPendingContactsFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(pc->isForVCardAddresses()); QCOMPARE(pc->vcardField(), QLatin1String("x-unsupported")); QVERIFY(pc->vcardAddresses().isEmpty()); QVERIFY(!pc->isForHandles()); QVERIFY(pc->handles().isEmpty()); QVERIFY(!pc->isForIdentifiers()); QVERIFY(pc->identifiers().isEmpty()); QVERIFY(!pc->isForUris()); QVERIFY(pc->uris().isEmpty()); QVERIFY(!pc->isUpgrade()); QVERIFY(pc->contactsToUpgrade().isEmpty()); QVERIFY(pc->contacts().isEmpty()); QVERIFY(mValidVCardAddresses.isEmpty()); QVERIFY(mInvalidVCardAddresses.isEmpty()); QVERIFY(mInvalidHandles.isEmpty()); QVERIFY(mValidIds.isEmpty()); QVERIFY(mInvalidIds.isEmpty()); QVERIFY(mValidUris.isEmpty()); QVERIFY(mInvalidUris.isEmpty()); } void TestConnAddressing::cleanup() { cleanupImpl(); } void TestConnAddressing::cleanupTestCase() { if (!mContacts.isEmpty()) { mContacts.clear(); } if (mConn) { QVERIFY(mConn->disconnect()); delete mConn; } cleanupTestCaseImpl(); } QTEST_MAIN(TestConnAddressing) #include "_gen/conn-addressing.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/handles.cpp0000644000175200001440000000651712000056607022646 0ustar00collabora-develusers00000000000000#include #include #include #define TP_QT_ENABLE_LOWLEVEL_API #include #include #include #include #include using namespace Tp; class TestHandles : public Test { Q_OBJECT public: TestHandles(QObject *parent = 0) : Test(parent), mConn(0) { } protected Q_SLOTS: void expectPendingHandlesFinished(Tp::PendingOperation*); private Q_SLOTS: void initTestCase(); void init(); void testRequestAndRelease(); void cleanup(); void cleanupTestCase(); private: TestConnHelper *mConn; ReferencedHandles mHandles; }; void TestHandles::expectPendingHandlesFinished(PendingOperation *op) { TEST_VERIFY_OP(op); PendingHandles *pending = qobject_cast(op); mHandles = pending->handles(); mLoop->exit(0); } void TestHandles::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("handles"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); mConn = new TestConnHelper(this, TP_TESTS_TYPE_SIMPLE_CONNECTION, "account", "me@example.com", "protocol", "simple", NULL); QCOMPARE(mConn->connect(), true); } void TestHandles::init() { initImpl(); } void TestHandles::testRequestAndRelease() { // Test identifiers QStringList ids = QStringList() << QLatin1String("alice") << QLatin1String("bob") << QLatin1String("chris"); // Request handles for the identifiers and wait for the request to process PendingHandles *pending = mConn->client()->lowlevel()->requestHandles(Tp::HandleTypeContact, ids); QVERIFY(connect(pending, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectPendingHandlesFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(disconnect(pending, SIGNAL(finished(Tp::PendingOperation*)), this, SLOT(expectPendingHandlesFinished(Tp::PendingOperation*)))); ReferencedHandles handles = mHandles; mHandles = ReferencedHandles(); // Verify that the closure indicates correctly which names we requested QCOMPARE(pending->namesRequested(), ids); // Verify by directly poking the service that the handles correspond to the requested IDs TpHandleRepoIface *serviceRepo = tp_base_connection_get_handles(TP_BASE_CONNECTION(mConn->service()), TP_HANDLE_TYPE_CONTACT); for (int i = 0; i < 3; i++) { uint handle = handles[i]; QCOMPARE(QString::fromUtf8(tp_handle_inspect(serviceRepo, handle)), ids[i]); } // Save the handles to a non-referenced normal container Tp::UIntList saveHandles = handles.toList(); // Start releasing the handles, RAII style, and complete the asynchronous process doing that handles = ReferencedHandles(); mLoop->processEvents(); processDBusQueue(mConn->client().data()); } void TestHandles::cleanup() { cleanupImpl(); } void TestHandles::cleanupTestCase() { QCOMPARE(mConn->disconnect(), true); delete mConn; cleanupTestCaseImpl(); } QTEST_MAIN(TestHandles) #include "_gen/handles.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/contacts-avatar.cpp0000644000175200001440000002444612000056607024323 0ustar00collabora-develusers00000000000000#include #include #include #include #include #include #include #include #include using namespace Tp; class SmartDir : public QDir { public: SmartDir(const QString &path) : QDir(path) { } bool rmdir() { return QDir().rmdir(path()); } bool removeDirectory(); }; bool SmartDir::removeDirectory() { bool ret = true; QFileInfoList list = entryInfoList(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot); Q_FOREACH (QFileInfo info, list) { if (info.isDir()) { SmartDir subDir(info.filePath()); if (!subDir.removeDirectory()) { ret = false; } } else { qDebug() << "deleting" << info.filePath(); if (!QFile(info.filePath()).remove()) { ret = false; } } } if (ret) { qDebug() << "deleting" << path(); ret = rmdir(); } return ret; } class TestContactsAvatar : public Test { Q_OBJECT public: TestContactsAvatar(QObject *parent = 0) : Test(parent), mConn(0), mGotAvatarRetrieved(false), mAvatarDatasChanged(0) { } protected Q_SLOTS: void onAvatarRetrieved(uint, const QString &, const QByteArray &, const QString &); void onAvatarDataChanged(const Tp::AvatarData &); void createContactWithFakeAvatar(const char *); private Q_SLOTS: void initTestCase(); void init(); void testAvatar(); void testRequestAvatars(); void cleanup(); void cleanupTestCase(); private: TestConnHelper *mConn; QList mContacts; bool mGotAvatarRetrieved; int mAvatarDatasChanged; }; void TestContactsAvatar::onAvatarRetrieved(uint handle, const QString &token, const QByteArray &data, const QString &mimeType) { Q_UNUSED(handle); Q_UNUSED(token); Q_UNUSED(data); Q_UNUSED(mimeType); mGotAvatarRetrieved = true; } void TestContactsAvatar::onAvatarDataChanged(const AvatarData &avatar) { Q_UNUSED(avatar); mAvatarDatasChanged++; mLoop->exit(0); } void TestContactsAvatar::createContactWithFakeAvatar(const char *id) { TpHandleRepoIface *serviceRepo = tp_base_connection_get_handles( TP_BASE_CONNECTION(mConn->service()), TP_HANDLE_TYPE_CONTACT); const gchar avatarData[] = "fake-avatar-data"; const gchar avatarToken[] = "fake-avatar-token"; const gchar avatarMimeType[] = "fake-avatar-mime-type"; TpHandle handle; GArray *array; handle = tp_handle_ensure(serviceRepo, id, NULL, NULL); array = g_array_new(FALSE, FALSE, sizeof(gchar)); g_array_append_vals(array, avatarData, strlen(avatarData)); tp_tests_contacts_connection_change_avatar_data( TP_TESTS_CONTACTS_CONNECTION(mConn->service()), handle, array, avatarMimeType, avatarToken, true); g_array_unref(array); Tp::UIntList handles = Tp::UIntList() << handle; Features features = Features() << Contact::FeatureAvatarToken << Contact::FeatureAvatarData; mContacts = mConn->contacts(handles, features); QCOMPARE(mContacts.size(), handles.size()); if (mContacts[0]->avatarData().fileName.isEmpty()) { QVERIFY(connect(mContacts[0].data(), SIGNAL(avatarDataChanged(const Tp::AvatarData &)), SLOT(onAvatarDataChanged(const Tp::AvatarData &)))); QCOMPARE(mLoop->exec(), 0); } AvatarData avatar = mContacts[0]->avatarData(); qDebug() << "Contact created:"; qDebug() << "Avatar token:" << mContacts[0]->avatarToken(); qDebug() << "Avatar file:" << avatar.fileName; qDebug() << "Avatar MimeType:" << avatar.mimeType; QFile file(avatar.fileName); file.open(QIODevice::ReadOnly); QByteArray data(file.readAll()); file.close(); QCOMPARE(mContacts[0]->avatarToken(), QString(QLatin1String(avatarToken))); QCOMPARE(data, QByteArray(avatarData)); QCOMPARE(avatar.mimeType, QString(QLatin1String(avatarMimeType))); } void TestContactsAvatar::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("contacts-avatar"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); mConn = new TestConnHelper(this, TP_TESTS_TYPE_CONTACTS_CONNECTION, "account", "me@example.com", "protocol", "foo", NULL); QCOMPARE(mConn->connect(), true); } void TestContactsAvatar::init() { initImpl(); mGotAvatarRetrieved = false; mAvatarDatasChanged = 0; } void TestContactsAvatar::testAvatar() { QVERIFY(mConn->client()->contactManager()->supportedFeatures().contains( Contact::FeatureAvatarData)); /* Make sure our tests does not mess up user's avatar cache */ qsrand(time(0)); static const char letters[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; static const int DirNameLength = 6; QString dirName; for (int i = 0; i < DirNameLength; ++i) { dirName += QLatin1Char(letters[qrand() % qstrlen(letters)]); } QString tmpDir = QString(QLatin1String("%1/%2")).arg(QDir::tempPath()).arg(dirName); QByteArray a = tmpDir.toLatin1(); setenv ("XDG_CACHE_HOME", a.constData(), true); Client::ConnectionInterfaceAvatarsInterface *connAvatarsInterface = mConn->client()->optionalInterface(); /* Check if AvatarRetrieved gets called */ connect(connAvatarsInterface, SIGNAL(AvatarRetrieved(uint, const QString &, const QByteArray &, const QString &)), SLOT(onAvatarRetrieved(uint, const QString &, const QByteArray &, const QString &))); /* First time we create a contact, avatar should not be in cache, so * AvatarRetrieved should be called */ mGotAvatarRetrieved = false; createContactWithFakeAvatar("foo"); QVERIFY(mGotAvatarRetrieved); /* Second time we create a contact, avatar should be in cache now, so * AvatarRetrieved should NOT be called */ mGotAvatarRetrieved = false; createContactWithFakeAvatar("bar"); QVERIFY(!mGotAvatarRetrieved); QVERIFY(SmartDir(tmpDir).removeDirectory()); } void TestContactsAvatar::testRequestAvatars() { TpHandleRepoIface *serviceRepo = tp_base_connection_get_handles( TP_BASE_CONNECTION(mConn->service()), TP_HANDLE_TYPE_CONTACT); const gchar avatarData[] = "fake-avatar-data"; const gchar avatarToken[] = "fake-avatar-token"; const gchar avatarMimeType[] = "fake-avatar-mime-type"; TpHandle handle; GArray *array; array = g_array_new(FALSE, FALSE, sizeof(gchar)); g_array_append_vals(array, avatarData, strlen(avatarData)); // First let's create the contacts Tp::UIntList handles; for (int i = 0; i < 100; ++i) { QString contactId = QLatin1String("contact") + QString::number(i); handle = tp_handle_ensure(serviceRepo, contactId.toLatin1().constData(), NULL, NULL); handles << handle; } Features features = Features() << Contact::FeatureAvatarToken << Contact::FeatureAvatarData; QList contacts = mConn->contacts(handles, features); QCOMPARE(contacts.size(), handles.size()); // now let's update the avatar for half of them so we can later check that requestContactAvatars // actually worked for all contacts. mAvatarDatasChanged = 0; for (int i = 0; i < contacts.size(); ++i) { ContactPtr contact = contacts[i]; QVERIFY(contact->avatarData().fileName.isEmpty()); QString contactAvatarToken = QLatin1String(avatarToken) + QString::number(i); QVERIFY(connect(contact.data(), SIGNAL(avatarDataChanged(const Tp::AvatarData &)), SLOT(onAvatarDataChanged(const Tp::AvatarData &)))); tp_tests_contacts_connection_change_avatar_data( TP_TESTS_CONTACTS_CONNECTION(mConn->service()), contact->handle()[0], array, avatarMimeType, contactAvatarToken.toLatin1().constData(), (i % 2)); } processDBusQueue(mConn->client().data()); while (mAvatarDatasChanged < contacts.size() / 2) { mLoop->processEvents(); } // check the only half got the updates QCOMPARE(mAvatarDatasChanged, contacts.size() / 2); for (int i = 0; i < contacts.size(); ++i) { ContactPtr contact = contacts[i]; if (i % 2) { QVERIFY(!contact->avatarData().fileName.isEmpty()); QCOMPARE(contact->avatarData().mimeType, QLatin1String(avatarMimeType)); QString contactAvatarToken = QLatin1String(avatarToken) + QString::number(i); QCOMPARE(contact->avatarToken(), contactAvatarToken); } else { QVERIFY(contact->avatarData().fileName.isEmpty()); } } // let's call ContactManager::requestContactAvatars now, it should update all contacts mAvatarDatasChanged = 0; mConn->client()->contactManager()->requestContactAvatars(contacts); processDBusQueue(mConn->client().data()); // the other half will now receive the avatar while (mAvatarDatasChanged < contacts.size() / 2) { mLoop->processEvents(); } // check the only half got the updates QCOMPARE(mAvatarDatasChanged, contacts.size() / 2); for (int i = 0; i < contacts.size(); ++i) { ContactPtr contact = contacts[i]; QVERIFY(!contact->avatarData().fileName.isEmpty()); QCOMPARE(contact->avatarData().mimeType, QLatin1String(avatarMimeType)); QString contactAvatarToken = QLatin1String(avatarToken) + QString::number(i); QCOMPARE(contact->avatarToken(), contactAvatarToken); } mAvatarDatasChanged = 0; // empty D-DBus queue processDBusQueue(mConn->client().data()); // it should silently work, no crash mConn->client()->contactManager()->requestContactAvatars(QList()); // let the mainloop run processDBusQueue(mConn->client().data()); QCOMPARE(mAvatarDatasChanged, 0); } void TestContactsAvatar::cleanup() { cleanupImpl(); } void TestContactsAvatar::cleanupTestCase() { QCOMPARE(mConn->disconnect(), true); delete mConn; cleanupTestCaseImpl(); } QTEST_MAIN(TestContactsAvatar) #include "_gen/contacts-avatar.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/conn-requests.cpp0000644000175200001440000001113712000056607024030 0ustar00collabora-develusers00000000000000#include #include #include #define TP_QT_ENABLE_LOWLEVEL_API #include #include #include #include #include #include #include using namespace Tp; class TestConnRequests : public Test { Q_OBJECT public: TestConnRequests(QObject *parent = 0) : Test(parent), mConn(0), mHandle(0) { } protected Q_SLOTS: void expectPendingHandleFinished(Tp::PendingOperation*); void expectCreateChannelFinished(Tp::PendingOperation *); void expectEnsureChannelFinished(Tp::PendingOperation *); private Q_SLOTS: void initTestCase(); void init(); void testRequestHandle(); void testCreateChannel(); void testEnsureChannel(); void cleanup(); void cleanupTestCase(); private: TestConnHelper *mConn; QString mChanObjectPath; uint mHandle; }; void TestConnRequests::expectPendingHandleFinished(PendingOperation *op) { TEST_VERIFY_OP(op); PendingHandles *pending = qobject_cast(op); mHandle = pending->handles().at(0); mLoop->exit(0); } void TestConnRequests::expectCreateChannelFinished(PendingOperation* op) { TEST_VERIFY_OP(op); PendingChannel *pc = qobject_cast(op); ChannelPtr chan = pc->channel(); mChanObjectPath = chan->objectPath(); mLoop->exit(0); } void TestConnRequests::expectEnsureChannelFinished(PendingOperation* op) { TEST_VERIFY_OP(op); PendingChannel *pc = qobject_cast(op); ChannelPtr chan = pc->channel(); QCOMPARE(pc->yours(), false); QCOMPARE(chan->objectPath(), mChanObjectPath); mLoop->exit(0); } void TestConnRequests::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("conn-requests"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); mConn = new TestConnHelper(this, EXAMPLE_TYPE_ECHO_2_CONNECTION, "account", "me@example.com", "protocol", "contacts", NULL); QCOMPARE(mConn->connect(), true); } void TestConnRequests::init() { initImpl(); } void TestConnRequests::testRequestHandle() { // Test identifiers QStringList ids = QStringList() << QLatin1String("alice"); // Request handles for the identifiers and wait for the request to process PendingHandles *pending = mConn->client()->lowlevel()->requestHandles(Tp::HandleTypeContact, ids); QVERIFY(connect(pending, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectPendingHandleFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(disconnect(pending, SIGNAL(finished(Tp::PendingOperation*)), this, SLOT(expectPendingHandleFinished(Tp::PendingOperation*)))); QVERIFY(mHandle != 0); } void TestConnRequests::testCreateChannel() { QVariantMap request; request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_TEXT); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) Tp::HandleTypeContact); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandle"), mHandle); QVERIFY(connect(mConn->client()->lowlevel()->createChannel(request), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectCreateChannelFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); } void TestConnRequests::testEnsureChannel() { QVariantMap request; request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_TEXT); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) Tp::HandleTypeContact); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandle"), mHandle); QVERIFY(connect(mConn->client()->lowlevel()->ensureChannel(request), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectEnsureChannelFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); } void TestConnRequests::cleanup() { cleanupImpl(); } void TestConnRequests::cleanupTestCase() { QCOMPARE(mConn->disconnect(), true); delete mConn; cleanupTestCaseImpl(); } QTEST_MAIN(TestConnRequests) #include "_gen/conn-requests.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/client-factories.cpp0000644000175200001440000014321312000056607024456 0ustar00collabora-develusers00000000000000#include #include #include #include #include #include #include #define TP_QT_ENABLE_LOWLEVEL_API #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace Tp; using namespace Tp::Client; class ChannelRequestAdaptor : public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.freedesktop.Telepathy.ChannelRequest") Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " " " \n" "") Q_PROPERTY(QDBusObjectPath Account READ Account) Q_PROPERTY(qulonglong UserActionTime READ UserActionTime) Q_PROPERTY(QString PreferredHandler READ PreferredHandler) Q_PROPERTY(Tp::QualifiedPropertyValueMapList Requests READ Requests) Q_PROPERTY(QStringList Interfaces READ Interfaces) public: ChannelRequestAdaptor(QDBusObjectPath account, qulonglong userActionTime, QString preferredHandler, QualifiedPropertyValueMapList requests, QStringList interfaces, QObject *parent) : QDBusAbstractAdaptor(parent), mAccount(account), mUserActionTime(userActionTime), mPreferredHandler(preferredHandler), mRequests(requests), mInterfaces(interfaces) { } virtual ~ChannelRequestAdaptor() { } public: // Properties inline QDBusObjectPath Account() const { return mAccount; } inline qulonglong UserActionTime() const { return mUserActionTime; } inline QString PreferredHandler() const { return mPreferredHandler; } inline QualifiedPropertyValueMapList Requests() const { return mRequests; } inline QStringList Interfaces() const { return mInterfaces; } public Q_SLOTS: // Methods void Proceed() { } void Cancel() { } Q_SIGNALS: // Signals void Failed(const QString &error, const QString &message); void Succeeded(); private: QDBusObjectPath mAccount; qulonglong mUserActionTime; QString mPreferredHandler; QualifiedPropertyValueMapList mRequests; QStringList mInterfaces; }; // Totally incomplete mini version of ChannelDispatchOperation class ChannelDispatchOperationAdaptor : public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.freedesktop.Telepathy.ChannelDispatchOperation") Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" " \n" " \n" " \n" " \n" "") Q_PROPERTY(QDBusObjectPath Account READ Account) Q_PROPERTY(QDBusObjectPath Connection READ Connection) Q_PROPERTY(Tp::ChannelDetailsList Channels READ Channels) Q_PROPERTY(QStringList Interfaces READ Interfaces) Q_PROPERTY(QStringList PossibleHandlers READ PossibleHandlers) public: ChannelDispatchOperationAdaptor(const QDBusObjectPath &acc, const QDBusObjectPath &conn, const ChannelDetailsList &channels, const QStringList &possibleHandlers, QObject *parent) : QDBusAbstractAdaptor(parent), mAccount(acc), mConn(conn), mChannels(channels), mPossibleHandlers(possibleHandlers) { } virtual ~ChannelDispatchOperationAdaptor() { } public: // Properties inline QDBusObjectPath Account() const { return mAccount; } inline QDBusObjectPath Connection() const { return mConn; } inline ChannelDetailsList Channels() const { return mChannels; } inline QStringList Interfaces() const { return mInterfaces; } inline QStringList PossibleHandlers() const { return mPossibleHandlers; } private: QDBusObjectPath mAccount, mConn; ChannelDetailsList mChannels; QStringList mInterfaces; QStringList mPossibleHandlers; }; class MyClient : public QObject, public AbstractClientObserver, public AbstractClientApprover, public AbstractClientHandler { Q_OBJECT public: static AbstractClientPtr create(const ChannelClassSpecList &channelFilter, const AbstractClientHandler::Capabilities &capabilities, bool bypassApproval = false, bool wantsRequestNotification = false) { return AbstractClientPtr::dynamicCast(SharedPtr( new MyClient(channelFilter, capabilities, bypassApproval, wantsRequestNotification))); } MyClient(const ChannelClassSpecList &channelFilter, const AbstractClientHandler::Capabilities &capabilities, bool bypassApproval = false, bool wantsRequestNotification = false) : AbstractClientObserver(channelFilter), AbstractClientApprover(channelFilter), AbstractClientHandler(channelFilter, capabilities, wantsRequestNotification), mBypassApproval(bypassApproval) { } ~MyClient() { } void observeChannels(const MethodInvocationContextPtr<> &context, const AccountPtr &account, const ConnectionPtr &connection, const QList &channels, const ChannelDispatchOperationPtr &dispatchOperation, const QList &requestsSatisfied, const AbstractClientObserver::ObserverInfo &observerInfo) { mObserveChannelsAccount = account; mObserveChannelsConnection = connection; mObserveChannelsChannels = channels; mObserveChannelsDispatchOperation = dispatchOperation; mObserveChannelsRequestsSatisfied = requestsSatisfied; mObserveChannelsObserverInfo = observerInfo; context->setFinished(); QTimer::singleShot(0, this, SIGNAL(observeChannelsFinished())); } void addDispatchOperation(const MethodInvocationContextPtr<> &context, const ChannelDispatchOperationPtr &dispatchOperation) { mAddDispatchOperationChannels = dispatchOperation->channels(); mAddDispatchOperationDispatchOperation = dispatchOperation; context->setFinished(); QTimer::singleShot(0, this, SIGNAL(addDispatchOperationFinished())); } bool bypassApproval() const { return mBypassApproval; } void handleChannels(const MethodInvocationContextPtr<> &context, const AccountPtr &account, const ConnectionPtr &connection, const QList &channels, const QList &requestsSatisfied, const QDateTime &userActionTime, const AbstractClientHandler::HandlerInfo &handlerInfo) { mHandleChannelsAccount = account; mHandleChannelsConnection = connection; mHandleChannelsChannels = channels; mHandleChannelsRequestsSatisfied = requestsSatisfied; mHandleChannelsUserActionTime = userActionTime; mHandleChannelsHandlerInfo = handlerInfo; Q_FOREACH (const ChannelPtr &channel, channels) { connect(channel.data(), SIGNAL(invalidated(Tp::DBusProxy *, const QString &, const QString &)), SIGNAL(channelClosed())); } context->setFinished(); QTimer::singleShot(0, this, SIGNAL(handleChannelsFinished())); } void addRequest(const ChannelRequestPtr &request) { mAddRequestRequest = request; Q_EMIT requestAdded(request); } void removeRequest(const ChannelRequestPtr &request, const QString &errorName, const QString &errorMessage) { mRemoveRequestRequest = request; mRemoveRequestErrorName = errorName; mRemoveRequestErrorMessage = errorMessage; Q_EMIT requestRemoved(request, errorName, errorMessage); } AccountPtr mObserveChannelsAccount; ConnectionPtr mObserveChannelsConnection; QList mObserveChannelsChannels; ChannelDispatchOperationPtr mObserveChannelsDispatchOperation; QList mObserveChannelsRequestsSatisfied; AbstractClientObserver::ObserverInfo mObserveChannelsObserverInfo; QList mAddDispatchOperationChannels; ChannelDispatchOperationPtr mAddDispatchOperationDispatchOperation; bool mBypassApproval; AccountPtr mHandleChannelsAccount; ConnectionPtr mHandleChannelsConnection; QList mHandleChannelsChannels; QList mHandleChannelsRequestsSatisfied; QDateTime mHandleChannelsUserActionTime; AbstractClientHandler::HandlerInfo mHandleChannelsHandlerInfo; ChannelRequestPtr mAddRequestRequest; ChannelRequestPtr mRemoveRequestRequest; QString mRemoveRequestErrorName; QString mRemoveRequestErrorMessage; Q_SIGNALS: void observeChannelsFinished(); void addDispatchOperationFinished(); void handleChannelsFinished(); void requestAdded(const Tp::ChannelRequestPtr &request); void requestRemoved(const Tp::ChannelRequestPtr &request, const QString &errorName, const QString &errorMessage); void channelClosed(); }; class TestClientFactories : public Test { Q_OBJECT public: TestClientFactories(QObject *parent = 0) : Test(parent), mConnService(0), mBaseConnService(0), mContactRepo(0), mText1ChanService(0) { } void testObserveChannelsCommon(const AbstractClientPtr &clientObject, const QString &clientBusName, const QString &clientObjectPath); protected Q_SLOTS: void expectSignalEmission(); private Q_SLOTS: void initTestCase(); void init(); void testFactoryAccess(); void testRegister(); void testCapabilities(); void testObserveChannels(); void testAddDispatchOperation(); void testRequests(); void testHandleChannels(); void testChannelFactoryAccessors(); void cleanup(); void cleanupTestCase(); private: TpTestsContactsConnection *mConnService; TpBaseConnection *mBaseConnService; TpHandleRepoIface *mContactRepo; ExampleEchoChannel *mText1ChanService; ExampleEchoChannel *mText2ChanService; AccountManagerPtr mAM; AccountPtr mAccount; ConnectionPtr mConn; QString mText1ChanPath; QString mText2ChanPath; QString mConnName; QString mConnPath; ClientRegistrarPtr mClientRegistrar; QString mChannelDispatcherBusName; QString mChannelRequestPath; ChannelDispatchOperationAdaptor *mCDO; QString mCDOPath; AbstractClientHandler::Capabilities mClientCapabilities; AbstractClientPtr mClientObject1; QString mClientObject1BusName; QString mClientObject1Path; AbstractClientPtr mClientObject2; QString mClientObject2BusName; QString mClientObject2Path; uint mUserActionTime; }; void TestClientFactories::expectSignalEmission() { mLoop->exit(0); } void TestClientFactories::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("client-factories"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); QDBusConnection bus = QDBusConnection::sessionBus(); ChannelFactoryPtr chanFact = ChannelFactory::create(bus); chanFact->addFeaturesForTextChats(TextChannel::FeatureChatState | TextChannel::FeatureMessageQueue); chanFact->addCommonFeatures(Channel::FeatureCore); QCOMPARE(chanFact->commonFeatures().size(), 1); QCOMPARE(chanFact->featuresForTextChats().size(), 3); QVERIFY(chanFact->featuresForTextChats().contains(TextChannel::FeatureMessageQueue)); QVERIFY(chanFact->featuresForTextChats().contains(Channel::FeatureCore)); QVERIFY(!chanFact->featuresForTextChats().contains(TextChannel::FeatureMessageSentSignal)); mAM = AccountManager::create(AccountFactory::create(bus, Account::FeatureCore), ConnectionFactory::create(bus, Connection::FeatureCore | Connection::FeatureSimplePresence), chanFact); PendingReady *amReadyOp = mAM->becomeReady(); QVERIFY(amReadyOp != NULL); QVERIFY(connect(amReadyOp, SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mAM->isReady(), true); QVariantMap parameters; parameters[QLatin1String("account")] = QLatin1String("foobar"); PendingAccount *pacc = mAM->createAccount(QLatin1String("foo"), QLatin1String("bar"), QLatin1String("foobar"), parameters); QVERIFY(connect(pacc, SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(pacc->account()); mAccount = pacc->account(); gchar *name; gchar *connPath; GError *error = 0; mConnService = TP_TESTS_CONTACTS_CONNECTION(g_object_new( TP_TESTS_TYPE_CONTACTS_CONNECTION, "account", "me@example.com", "protocol", "example", NULL)); QVERIFY(mConnService != 0); mBaseConnService = TP_BASE_CONNECTION(mConnService); QVERIFY(mBaseConnService != 0); QVERIFY(tp_base_connection_register(mBaseConnService, "example", &name, &connPath, &error)); QVERIFY(error == 0); QVERIFY(name != 0); QVERIFY(connPath != 0); mConnName = QLatin1String(name); mConnPath = QLatin1String(connPath); g_free(name); g_free(connPath); mConn = ConnectionPtr::qObjectCast(mAccount->connectionFactory()->proxy(mConnName, mConnPath, ChannelFactory::create(bus), ContactFactory::create())->proxy()); QCOMPARE(mConn->isReady(), false); PendingReady *mConnReady = mConn->lowlevel()->requestConnect(); QVERIFY(mConnReady != NULL); QVERIFY(connect(mConnReady, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mConn->isReady(), true); QCOMPARE(static_cast(mConn->status()), static_cast(ConnectionStatusConnected)); // create a Channel by magic, rather than doing D-Bus round-trips for it mContactRepo = tp_base_connection_get_handles(mBaseConnService, TP_HANDLE_TYPE_CONTACT); guint handle = tp_handle_ensure(mContactRepo, "someone@localhost", 0, 0); mText1ChanPath = mConnPath + QLatin1String("/TextChannel1"); QByteArray chanPath(mText1ChanPath.toAscii()); mText1ChanService = EXAMPLE_ECHO_CHANNEL(g_object_new( EXAMPLE_TYPE_ECHO_CHANNEL, "connection", mConnService, "object-path", chanPath.data(), "handle", handle, NULL)); mText2ChanPath = mConnPath + QLatin1String("/TextChannel2"); chanPath = mText2ChanPath.toAscii(); mText2ChanService = EXAMPLE_ECHO_CHANNEL(g_object_new( EXAMPLE_TYPE_ECHO_CHANNEL, "connection", mConnService, "object-path", chanPath.data(), "handle", handle, NULL)); mClientRegistrar = ClientRegistrar::create(mAM); // Fake ChannelRequest mChannelDispatcherBusName = TP_QT_IFACE_CHANNEL_DISPATCHER; mChannelRequestPath = QLatin1String("/org/freedesktop/Telepathy/ChannelRequest/Request1"); QObject *request = new QObject(this); mUserActionTime = QDateTime::currentDateTime().toTime_t(); new ChannelRequestAdaptor(QDBusObjectPath(mAccount->objectPath()), mUserActionTime, QString(), QualifiedPropertyValueMapList(), QStringList(), request); QVERIFY(bus.registerService(mChannelDispatcherBusName)); QVERIFY(bus.registerObject(mChannelRequestPath, request)); // Fake ChannelDispatchOperation mCDOPath = QLatin1String("/org/freedesktop/Telepathy/ChannelDispatchOperation/Operation1"); QObject *cdo = new QObject(this); // Initialize this here so we can actually set it in possibleHandlers mClientObject1Path = QLatin1String("/org/freedesktop/Telepathy/Client/foo"); ChannelDetailsList channelDetailsList; ChannelDetails channelDetails = { QDBusObjectPath(mText1ChanPath), ChannelClassSpec::textChat().allProperties() }; channelDetailsList.append(channelDetails); mCDO = new ChannelDispatchOperationAdaptor(QDBusObjectPath(mAccount->objectPath()), QDBusObjectPath(mConn->objectPath()), channelDetailsList, QStringList() << mClientObject1BusName, cdo); QVERIFY(bus.registerObject(mCDOPath, cdo)); } void TestClientFactories::init() { initImpl(); } void TestClientFactories::testFactoryAccess() { AccountFactoryConstPtr accFact = mClientRegistrar->accountFactory(); QVERIFY(!accFact.isNull()); QCOMPARE(accFact.data(), mAM->accountFactory().data()); QCOMPARE(accFact->features(), Features(Account::FeatureCore)); ConnectionFactoryConstPtr connFact = mClientRegistrar->connectionFactory(); QVERIFY(!connFact.isNull()); QCOMPARE(connFact.data(), mAM->connectionFactory().data()); QCOMPARE(connFact->features(), Connection::FeatureCore | Connection::FeatureSimplePresence); ChannelFactoryConstPtr chanFact = mClientRegistrar->channelFactory(); QVERIFY(!chanFact.isNull()); QCOMPARE(chanFact.data(), mAM->channelFactory().data()); ContactFactoryConstPtr contactFact = mClientRegistrar->contactFactory(); QVERIFY(!contactFact.isNull()); QCOMPARE(contactFact.data(), mAM->contactFactory().data()); } void TestClientFactories::testRegister() { // invalid client QVERIFY(!mClientRegistrar->registerClient(AbstractClientPtr(), QLatin1String("foo"))); mClientCapabilities.setICEUDPNATTraversalToken(); mClientCapabilities.setAudioCodecToken(QLatin1String("speex")); ChannelClassSpecList filters; filters.append(ChannelClassSpec::textChat()); mClientObject1 = MyClient::create(filters, mClientCapabilities, false, true); QVERIFY(mClientRegistrar->registerClient(mClientObject1, QLatin1String("foo"))); QVERIFY(mClientRegistrar->registeredClients().contains(mClientObject1)); // no op - client already registered QVERIFY(mClientRegistrar->registerClient(mClientObject1, QLatin1String("foo"))); filters.clear(); filters.append(ChannelClassSpec::streamedMediaCall()); mClientObject2 = MyClient::create(filters, mClientCapabilities, true, true); QVERIFY(mClientRegistrar->registerClient(mClientObject2, QLatin1String("foo"), true)); QVERIFY(mClientRegistrar->registeredClients().contains(mClientObject2)); // no op - client already registered QVERIFY(mClientRegistrar->registerClient(mClientObject2, QLatin1String("foo"), true)); QDBusConnection bus = mClientRegistrar->dbusConnection(); QDBusConnectionInterface *busIface = bus.interface(); QStringList registeredServicesNames = busIface->registeredServiceNames(); QVERIFY(registeredServicesNames.filter( QRegExp(QLatin1String("^" "org.freedesktop.Telepathy.Client.foo" ".([_A-Za-z][_A-Za-z0-9]*)"))).size() == 1); mClientObject1BusName = QLatin1String("org.freedesktop.Telepathy.Client.foo"); mClientObject1Path = QLatin1String("/org/freedesktop/Telepathy/Client/foo"); mClientObject2BusName = registeredServicesNames.filter( QRegExp(QLatin1String("org.freedesktop.Telepathy.Client.foo._*"))).first(); mClientObject2Path = QString(QLatin1String("/%1")).arg(mClientObject2BusName); mClientObject2Path.replace(QLatin1String("."), QLatin1String("/")); } void TestClientFactories::testCapabilities() { QDBusConnection bus = mClientRegistrar->dbusConnection(); QStringList normalizedClientCaps = mClientCapabilities.allTokens(); normalizedClientCaps.sort(); QStringList normalizedHandlerCaps; // object 1 ClientHandlerInterface *handler1Iface = new ClientHandlerInterface(bus, mClientObject1BusName, mClientObject1Path, this); QVERIFY(waitForProperty(handler1Iface->requestPropertyCapabilities(), &normalizedHandlerCaps)); normalizedHandlerCaps.sort(); QCOMPARE(normalizedHandlerCaps, normalizedClientCaps); // object 2 ClientHandlerInterface *handler2Iface = new ClientHandlerInterface(bus, mClientObject2BusName, mClientObject2Path, this); QVERIFY(waitForProperty(handler2Iface->requestPropertyCapabilities(), &normalizedHandlerCaps)); normalizedHandlerCaps.sort(); QCOMPARE(normalizedHandlerCaps, normalizedClientCaps); } void TestClientFactories::testRequests() { QDBusConnection bus = mClientRegistrar->dbusConnection(); ClientInterfaceRequestsInterface *handlerRequestsIface = new ClientInterfaceRequestsInterface(bus, mClientObject1BusName, mClientObject1Path, this); MyClient *client = dynamic_cast(mClientObject1.data()); connect(client, SIGNAL(requestAdded(const Tp::ChannelRequestPtr &)), SLOT(expectSignalEmission())); QVariantMap requestProps; requestProps.insert(TP_QT_IFACE_CHANNEL_REQUEST + QLatin1String(".Account"), QVariant::fromValue(QDBusObjectPath(mAccount->objectPath()))); requestProps.insert(TP_QT_IFACE_CHANNEL_REQUEST + QLatin1String(".Interface.DomainSpecific.IntegerProp"), QVariant::fromValue(3)); handlerRequestsIface->AddRequest(QDBusObjectPath(mChannelRequestPath), requestProps); if (!client->mAddRequestRequest) { QCOMPARE(mLoop->exec(), 0); } QCOMPARE(client->mAddRequestRequest->objectPath(), mChannelRequestPath); QCOMPARE(client->mAddRequestRequest->account().data(), mAccount.data()); QVERIFY(client->mAddRequestRequest->immutableProperties().contains( TP_QT_IFACE_CHANNEL_REQUEST + QLatin1String(".Interface.DomainSpecific.IntegerProp"))); QCOMPARE(qdbus_cast(client->mAddRequestRequest->immutableProperties().value( TP_QT_IFACE_CHANNEL_REQUEST + QLatin1String(".Interface.DomainSpecific.IntegerProp"))), 3); QVERIFY(connect(client->mAddRequestRequest->becomeReady(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(client->mAddRequestRequest->immutableProperties().contains( TP_QT_IFACE_CHANNEL_REQUEST + QLatin1String(".UserActionTime"))); QCOMPARE(qdbus_cast(client->mAddRequestRequest->immutableProperties().value( TP_QT_IFACE_CHANNEL_REQUEST + QLatin1String(".UserActionTime"))), mUserActionTime); connect(client, SIGNAL(requestRemoved(const Tp::ChannelRequestPtr &, const QString &, const QString &)), SLOT(expectSignalEmission())); handlerRequestsIface->RemoveRequest(QDBusObjectPath(mChannelRequestPath), QLatin1String(TP_QT_ERROR_NOT_AVAILABLE), QLatin1String("Not available")); if (!client->mRemoveRequestRequest) { QCOMPARE(mLoop->exec(), 0); } QCOMPARE(client->mRemoveRequestRequest->objectPath(), mChannelRequestPath); // QCOMPARE(client->mRemoveRequestRequest->account().data(), // mAccount.data()); QCOMPARE(client->mRemoveRequestErrorName, QString(QLatin1String(TP_QT_ERROR_NOT_AVAILABLE))); QCOMPARE(client->mRemoveRequestErrorMessage, QString(QLatin1String("Not available"))); } void TestClientFactories::testObserveChannelsCommon(const AbstractClientPtr &clientObject, const QString &clientBusName, const QString &clientObjectPath) { QDBusConnection bus = mClientRegistrar->dbusConnection(); ClientObserverInterface *observeIface = new ClientObserverInterface(bus, clientBusName, clientObjectPath, this); MyClient *client = dynamic_cast(clientObject.data()); connect(client, SIGNAL(observeChannelsFinished()), SLOT(expectSignalEmission())); ChannelDetailsList channelDetailsList; ChannelDetails channelDetails = { QDBusObjectPath(mText1ChanPath), ChannelClassSpec::textChat().allProperties() }; channelDetailsList.append(channelDetails); observeIface->ObserveChannels(QDBusObjectPath(mAccount->objectPath()), QDBusObjectPath(mConn->objectPath()), channelDetailsList, QDBusObjectPath(mCDOPath), ObjectPathList() << QDBusObjectPath(mChannelRequestPath), QVariantMap()); QCOMPARE(mLoop->exec(), 0); QCOMPARE(client->mObserveChannelsAccount->objectPath(), mAccount->objectPath()); QCOMPARE(client->mObserveChannelsAccount.data(), mAccount.data()); QVERIFY(client->mObserveChannelsAccount->isReady(Account::FeatureCore)); QCOMPARE(client->mObserveChannelsConnection->objectPath(), mConn->objectPath()); QCOMPARE(client->mObserveChannelsConnection.data(), mConn.data()); QVERIFY(client->mObserveChannelsConnection->isReady( Connection::FeatureCore | Connection::FeatureSimplePresence)); QCOMPARE(client->mObserveChannelsChannels.size(), 1); QCOMPARE(client->mObserveChannelsChannels.first()->objectPath(), mText1ChanPath); QVERIFY(!client->mObserveChannelsDispatchOperation.isNull()); QCOMPARE(client->mObserveChannelsDispatchOperation->account().data(), mAccount.data()); QCOMPARE(client->mObserveChannelsDispatchOperation->connection().data(), mConn.data()); QCOMPARE(client->mObserveChannelsRequestsSatisfied.size(), 1); QCOMPARE(client->mObserveChannelsRequestsSatisfied.first()->objectPath(), mChannelRequestPath); QVERIFY(client->mObserveChannelsRequestsSatisfied.first()->isReady()); QCOMPARE(client->mObserveChannelsRequestsSatisfied.first()->account().data(), mAccount.data()); } void TestClientFactories::testObserveChannels() { testObserveChannelsCommon(mClientObject1, mClientObject1BusName, mClientObject1Path); testObserveChannelsCommon(mClientObject2, mClientObject2BusName, mClientObject2Path); } void TestClientFactories::testAddDispatchOperation() { QDBusConnection bus = mClientRegistrar->dbusConnection(); ClientApproverInterface *approverIface = new ClientApproverInterface(bus, mClientObject1BusName, mClientObject1Path, this); MyClient *client = dynamic_cast(mClientObject1.data()); connect(client, SIGNAL(addDispatchOperationFinished()), SLOT(expectSignalEmission())); QVariantMap dispatchOperationProperties; dispatchOperationProperties.insert( TP_QT_IFACE_CHANNEL_DISPATCH_OPERATION + QLatin1String(".Connection"), QVariant::fromValue(mCDO->Connection())); dispatchOperationProperties.insert( TP_QT_IFACE_CHANNEL_DISPATCH_OPERATION + QLatin1String(".Account"), QVariant::fromValue(mCDO->Account())); dispatchOperationProperties.insert( TP_QT_IFACE_CHANNEL_DISPATCH_OPERATION + QLatin1String(".PossibleHandlers"), QVariant::fromValue(mCDO->PossibleHandlers())); dispatchOperationProperties.insert( TP_QT_IFACE_CHANNEL_DISPATCH_OPERATION + QLatin1String(".Interfaces"), QVariant::fromValue(mCDO->Interfaces())); approverIface->AddDispatchOperation(mCDO->Channels(), QDBusObjectPath(mCDOPath), dispatchOperationProperties); QCOMPARE(mLoop->exec(), 0); QCOMPARE(client->mAddDispatchOperationChannels.first()->objectPath(), mText1ChanPath); QCOMPARE(client->mAddDispatchOperationChannels.first()->connection().data(), mConn.data()); QVERIFY(client->mAddDispatchOperationChannels.first()->connection()->isReady( Connection::FeatureCore | Connection::FeatureSimplePresence)); QCOMPARE(client->mAddDispatchOperationDispatchOperation->channels().first().data(), client->mAddDispatchOperationChannels.first().data()); QCOMPARE(client->mAddDispatchOperationDispatchOperation->objectPath(), mCDOPath); QVERIFY(client->mAddDispatchOperationDispatchOperation->isReady()); QCOMPARE(client->mAddDispatchOperationDispatchOperation->account().data(), mAccount.data()); QCOMPARE(client->mAddDispatchOperationDispatchOperation->connection().data(), mConn.data()); QCOMPARE(client->mAddDispatchOperationDispatchOperation->possibleHandlers().size(), 1); QCOMPARE(client->mAddDispatchOperationDispatchOperation->possibleHandlers(), mCDO->PossibleHandlers()); } void TestClientFactories::testHandleChannels() { QDBusConnection bus = mClientRegistrar->dbusConnection(); // object 1 ClientHandlerInterface *handler1Iface = new ClientHandlerInterface(bus, mClientObject1BusName, mClientObject1Path, this); MyClient *client1 = dynamic_cast(mClientObject1.data()); connect(client1, SIGNAL(handleChannelsFinished()), SLOT(expectSignalEmission())); ChannelDetailsList channelDetailsList; ChannelDetails channelDetails = { QDBusObjectPath(mText1ChanPath), ChannelClassSpec::textChat().allProperties() }; channelDetailsList.append(channelDetails); handler1Iface->HandleChannels(QDBusObjectPath(mAccount->objectPath()), QDBusObjectPath(mConn->objectPath()), channelDetailsList, ObjectPathList() << QDBusObjectPath(mChannelRequestPath), mUserActionTime, QVariantMap()); QCOMPARE(mLoop->exec(), 0); QCOMPARE(client1->mHandleChannelsAccount->objectPath(), mAccount->objectPath()); QCOMPARE(client1->mHandleChannelsAccount.data(), mAccount.data()); QVERIFY(client1->mHandleChannelsAccount->isReady()); QCOMPARE(client1->mHandleChannelsConnection->objectPath(), mConn->objectPath()); QCOMPARE(client1->mHandleChannelsConnection.data(), mConn.data()); QVERIFY(client1->mHandleChannelsConnection->isReady( Connection::FeatureCore | Connection::FeatureSimplePresence)); QCOMPARE(client1->mHandleChannelsChannels.first()->objectPath(), mText1ChanPath); TextChannelPtr textChan = TextChannelPtr::qObjectCast(client1->mHandleChannelsChannels.first()); QVERIFY(!textChan.isNull()); QVERIFY(textChan->isReady()); QVERIFY(textChan->isReady(Channel::FeatureCore)); QVERIFY(textChan->isReady(TextChannel::FeatureMessageQueue)); QVERIFY(textChan->isReady(TextChannel::FeatureChatState)); QCOMPARE(client1->mHandleChannelsRequestsSatisfied.first()->objectPath(), mChannelRequestPath); QVERIFY(client1->mHandleChannelsRequestsSatisfied.first()->isReady()); QCOMPARE(client1->mHandleChannelsRequestsSatisfied.first()->account().data(), mAccount.data()); QCOMPARE(client1->mHandleChannelsUserActionTime.toTime_t(), mUserActionTime); Tp::ObjectPathList handledChannels; QVERIFY(waitForProperty(handler1Iface->requestPropertyHandledChannels(), &handledChannels)); QVERIFY(handledChannels.contains(QDBusObjectPath(mText1ChanPath))); // object 2 ClientHandlerInterface *handler2Iface = new ClientHandlerInterface(bus, mClientObject2BusName, mClientObject2Path, this); MyClient *client2 = dynamic_cast(mClientObject2.data()); connect(client2, SIGNAL(handleChannelsFinished()), SLOT(expectSignalEmission())); channelDetailsList.clear(); channelDetails.channel = QDBusObjectPath(mText2ChanPath); channelDetailsList.append(channelDetails); handler2Iface->HandleChannels(QDBusObjectPath(mAccount->objectPath()), QDBusObjectPath(mConn->objectPath()), channelDetailsList, ObjectPathList() << QDBusObjectPath(mChannelRequestPath), mUserActionTime, QVariantMap()); QCOMPARE(mLoop->exec(), 0); QCOMPARE(client2->mHandleChannelsAccount->objectPath(), mAccount->objectPath()); QCOMPARE(client2->mHandleChannelsAccount.data(), mAccount.data()); QVERIFY(client2->mHandleChannelsAccount->isReady()); QCOMPARE(client2->mHandleChannelsConnection->objectPath(), mConn->objectPath()); QCOMPARE(client2->mHandleChannelsConnection.data(), mConn.data()); QVERIFY(client2->mHandleChannelsConnection->isReady( Connection::FeatureCore | Connection::FeatureSimplePresence)); QCOMPARE(client2->mHandleChannelsChannels.first()->objectPath(), mText2ChanPath); QCOMPARE(client2->mHandleChannelsRequestsSatisfied.first()->objectPath(), mChannelRequestPath); QVERIFY(client2->mHandleChannelsRequestsSatisfied.first()->isReady()); QCOMPARE(client2->mHandleChannelsRequestsSatisfied.first()->account().data(), mAccount.data()); QCOMPARE(client2->mHandleChannelsUserActionTime.toTime_t(), mUserActionTime); QVERIFY(waitForProperty(handler1Iface->requestPropertyHandledChannels(), &handledChannels)); QVERIFY(handledChannels.contains(QDBusObjectPath(mText1ChanPath))); QVERIFY(handledChannels.contains(QDBusObjectPath(mText2ChanPath))); QVERIFY(waitForProperty(handler2Iface->requestPropertyHandledChannels(), &handledChannels)); QVERIFY(handledChannels.contains(QDBusObjectPath(mText1ChanPath))); QVERIFY(handledChannels.contains(QDBusObjectPath(mText2ChanPath))); // Handler.HandledChannels will now return all channels that are not invalidated/destroyed // even if the handler for such channels was already unregistered g_object_unref(mText1ChanService); connect(client1, SIGNAL(channelClosed()), SLOT(expectSignalEmission())); QCOMPARE(mLoop->exec(), 0); mClientRegistrar->unregisterClient(mClientObject1); QVERIFY(waitForProperty(handler2Iface->requestPropertyHandledChannels(), &handledChannels)); QVERIFY(handledChannels.contains(QDBusObjectPath(mText2ChanPath))); g_object_unref(mText2ChanService); connect(client2, SIGNAL(channelClosed()), SLOT(expectSignalEmission())); QCOMPARE(mLoop->exec(), 0); QVERIFY(waitForProperty(handler2Iface->requestPropertyHandledChannels(), &handledChannels)); QVERIFY(handledChannels.isEmpty()); } void TestClientFactories::testChannelFactoryAccessors() { QDBusConnection bus = QDBusConnection::sessionBus(); ChannelFactoryPtr chanFact = ChannelFactory::create(bus); QCOMPARE(chanFact->featuresForTextChats(), Features()); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::textChat()), Features()); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::unnamedTextChat()), Features()); QCOMPARE(chanFact->featuresForTextChatrooms(), Features()); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::textChatroom()), Features()); QCOMPARE(chanFact->featuresForStreamedMediaCalls(), Features()); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::streamedMediaCall()), Features()); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::streamedMediaAudioCall()), Features()); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::streamedMediaVideoCall()), Features()); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::streamedMediaVideoCallWithAudio()), Features()); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::unnamedStreamedMediaCall()), Features()); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::unnamedStreamedMediaAudioCall()), Features()); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::unnamedStreamedMediaVideoCall()), Features()); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::unnamedStreamedMediaVideoCallWithAudio()), Features()); QCOMPARE(chanFact->featuresForRoomLists(), Features()); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::roomList()), Features()); QCOMPARE(chanFact->featuresForOutgoingFileTransfers(), Features()); QCOMPARE(chanFact->featuresForIncomingFileTransfers(), Features()); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::outgoingFileTransfer()), Features()); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::incomingFileTransfer()), Features()); QCOMPARE(chanFact->featuresForOutgoingStreamTubes(), Features()); QCOMPARE(chanFact->featuresForIncomingStreamTubes(), Features()); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::outgoingStreamTube()), Features()); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::incomingStreamTube()), Features()); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::contactSearch()), Features()); QCOMPARE(chanFact->featuresForContactSearches(), Features()); Features commonFeatures; commonFeatures.insert(Channel::FeatureCore); chanFact->addCommonFeatures(commonFeatures); QCOMPARE(chanFact->featuresForTextChats(), commonFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::textChat()), commonFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::unnamedTextChat()), commonFeatures); QCOMPARE(chanFact->featuresForTextChatrooms(), commonFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::textChatroom()), commonFeatures); QCOMPARE(chanFact->featuresForStreamedMediaCalls(), commonFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::streamedMediaCall()), commonFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::streamedMediaAudioCall()), commonFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::streamedMediaVideoCall()), commonFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::streamedMediaVideoCallWithAudio()), commonFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::unnamedStreamedMediaCall()), commonFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::unnamedStreamedMediaAudioCall()), commonFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::unnamedStreamedMediaVideoCall()), commonFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::unnamedStreamedMediaVideoCallWithAudio()), commonFeatures); QCOMPARE(chanFact->featuresForRoomLists(), commonFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::roomList()), commonFeatures); QCOMPARE(chanFact->featuresForOutgoingFileTransfers(), commonFeatures); QCOMPARE(chanFact->featuresForIncomingFileTransfers(), commonFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::outgoingFileTransfer()), commonFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::incomingFileTransfer()), commonFeatures); QCOMPARE(chanFact->featuresForOutgoingStreamTubes(), commonFeatures); QCOMPARE(chanFact->featuresForIncomingStreamTubes(), commonFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::outgoingStreamTube()), commonFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::incomingStreamTube()), commonFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::contactSearch()), commonFeatures); QCOMPARE(chanFact->featuresForContactSearches(), commonFeatures); Features textChatFeatures; textChatFeatures.insert(TextChannel::FeatureCore); textChatFeatures.insert(TextChannel::FeatureMessageQueue); chanFact->addFeaturesForTextChats(textChatFeatures); textChatFeatures |= commonFeatures; Features textChatroomFeatures; textChatroomFeatures.insert(TextChannel::FeatureCore); textChatroomFeatures.insert(TextChannel::FeatureMessageCapabilities); chanFact->addFeaturesForTextChatrooms(textChatroomFeatures); textChatroomFeatures |= commonFeatures; Features streamedMediaFeatures; streamedMediaFeatures.insert(StreamedMediaChannel::FeatureStreams); chanFact->addFeaturesForStreamedMediaCalls(streamedMediaFeatures); streamedMediaFeatures |= commonFeatures; // RoomListChannel has no feature, let's use FeatureConferenceInitialInviteeContacts just for // testing purposes Features roomListFeatures; roomListFeatures.insert(Channel::FeatureConferenceInitialInviteeContacts); chanFact->addFeaturesForRoomLists(roomListFeatures); roomListFeatures |= commonFeatures; Features outFtFeatures; outFtFeatures.insert(FileTransferChannel::FeatureCore); outFtFeatures.insert(OutgoingFileTransferChannel::FeatureCore); chanFact->addFeaturesForOutgoingFileTransfers(outFtFeatures); outFtFeatures |= commonFeatures; Features inFtFeatures; inFtFeatures.insert(FileTransferChannel::FeatureCore); inFtFeatures.insert(IncomingFileTransferChannel::FeatureCore); chanFact->addFeaturesForIncomingFileTransfers(inFtFeatures); inFtFeatures |= commonFeatures; Features outStubeFeatures; outStubeFeatures.insert(StreamTubeChannel::FeatureCore); outStubeFeatures.insert(OutgoingStreamTubeChannel::FeatureCore); chanFact->addFeaturesForOutgoingStreamTubes(outStubeFeatures); outStubeFeatures |= commonFeatures; Features inStubeFeatures = commonFeatures; outStubeFeatures.insert(StreamTubeChannel::FeatureCore); outStubeFeatures.insert(IncomingStreamTubeChannel::FeatureCore); chanFact->addFeaturesForIncomingStreamTubes(inStubeFeatures); inStubeFeatures |= commonFeatures; Features contactSearchFeatures; contactSearchFeatures.insert(ContactSearchChannel::FeatureCore); chanFact->addFeaturesForContactSearches(contactSearchFeatures); contactSearchFeatures |= commonFeatures; QCOMPARE(chanFact->featuresForTextChats(), textChatFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::textChat()), textChatFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::unnamedTextChat()), textChatFeatures); QCOMPARE(chanFact->featuresForTextChatrooms(), textChatroomFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::textChatroom()), textChatroomFeatures); QCOMPARE(chanFact->featuresForStreamedMediaCalls(), streamedMediaFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::streamedMediaCall()), streamedMediaFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::streamedMediaAudioCall()), streamedMediaFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::streamedMediaVideoCall()), streamedMediaFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::streamedMediaVideoCallWithAudio()), streamedMediaFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::unnamedStreamedMediaCall()), streamedMediaFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::unnamedStreamedMediaAudioCall()), streamedMediaFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::unnamedStreamedMediaVideoCall()), streamedMediaFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::unnamedStreamedMediaVideoCallWithAudio()), streamedMediaFeatures); QCOMPARE(chanFact->featuresForRoomLists(), roomListFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::roomList()), roomListFeatures); QCOMPARE(chanFact->featuresForOutgoingFileTransfers(), outFtFeatures); QCOMPARE(chanFact->featuresForIncomingFileTransfers(), inFtFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::outgoingFileTransfer()), outFtFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::incomingFileTransfer()), inFtFeatures); QCOMPARE(chanFact->featuresForOutgoingStreamTubes(), outStubeFeatures); QCOMPARE(chanFact->featuresForIncomingStreamTubes(), inStubeFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::outgoingStreamTube()), outStubeFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::incomingStreamTube()), inStubeFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::contactSearch()), contactSearchFeatures); QCOMPARE(chanFact->featuresForContactSearches(), contactSearchFeatures); Features streamedMediaAudioFeatures; streamedMediaAudioFeatures.insert(StreamedMediaChannel::FeatureStreams); chanFact->addFeaturesFor(ChannelClassSpec::streamedMediaAudioCall(), streamedMediaAudioFeatures); streamedMediaAudioFeatures |= streamedMediaFeatures; QCOMPARE(chanFact->featuresForStreamedMediaCalls(), streamedMediaFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::streamedMediaCall()), streamedMediaFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::streamedMediaAudioCall()), streamedMediaAudioFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::streamedMediaVideoCall()), streamedMediaFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::streamedMediaVideoCallWithAudio()), streamedMediaAudioFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::unnamedStreamedMediaCall()), streamedMediaFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::unnamedStreamedMediaAudioCall()), streamedMediaFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::unnamedStreamedMediaVideoCall()), streamedMediaFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::unnamedStreamedMediaVideoCallWithAudio()), streamedMediaFeatures); Features unnamedStreamedMediaAudioFeatures; unnamedStreamedMediaAudioFeatures.insert(StreamedMediaChannel::FeatureLocalHoldState); chanFact->addFeaturesFor(ChannelClassSpec::unnamedStreamedMediaAudioCall(), unnamedStreamedMediaAudioFeatures); unnamedStreamedMediaAudioFeatures |= streamedMediaFeatures; QCOMPARE(chanFact->featuresForStreamedMediaCalls(), streamedMediaFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::streamedMediaCall()), streamedMediaFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::streamedMediaAudioCall()), streamedMediaAudioFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::streamedMediaVideoCall()), streamedMediaFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::streamedMediaVideoCallWithAudio()), streamedMediaAudioFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::unnamedStreamedMediaCall()), streamedMediaFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::unnamedStreamedMediaAudioCall()), unnamedStreamedMediaAudioFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::unnamedStreamedMediaVideoCall()), streamedMediaFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::unnamedStreamedMediaVideoCallWithAudio()), unnamedStreamedMediaAudioFeatures); QVariantMap otherProps; otherProps.insert(QLatin1String("ping"), QLatin1String("pong")); Features specificUnnamedStreamedMediaFeatures; specificUnnamedStreamedMediaFeatures.insert(Feature(QLatin1String("TestClass"), 1234)); chanFact->addFeaturesFor(ChannelClassSpec::unnamedStreamedMediaCall(otherProps), specificUnnamedStreamedMediaFeatures); specificUnnamedStreamedMediaFeatures |= streamedMediaFeatures; QCOMPARE(chanFact->featuresForStreamedMediaCalls(), streamedMediaFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::streamedMediaCall()), streamedMediaFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::streamedMediaAudioCall()), streamedMediaAudioFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::streamedMediaVideoCall()), streamedMediaFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::streamedMediaVideoCallWithAudio()), streamedMediaAudioFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::unnamedStreamedMediaCall()), streamedMediaFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::unnamedStreamedMediaCall(otherProps)), specificUnnamedStreamedMediaFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::unnamedStreamedMediaAudioCall()), unnamedStreamedMediaAudioFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::unnamedStreamedMediaVideoCall()), streamedMediaFeatures); QCOMPARE(chanFact->featuresFor(ChannelClassSpec::unnamedStreamedMediaVideoCallWithAudio()), unnamedStreamedMediaAudioFeatures); } void TestClientFactories::cleanup() { cleanupImpl(); } void TestClientFactories::cleanupTestCase() { cleanupTestCaseImpl(); } QTEST_MAIN(TestClientFactories) #include "_gen/client-factories.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/contacts-capabilities.cpp0000644000175200001440000001120512000056607025463 0ustar00collabora-develusers00000000000000#include #include #include #include #include #include #include #include #include using namespace Tp; class TestContactsCapabilities : public Test { Q_OBJECT public: TestContactsCapabilities(QObject *parent = 0) : Test(parent), mConn(0) { } private Q_SLOTS: void initTestCase(); void init(); void testCapabilities(); void cleanup(); void cleanupTestCase(); private: TestConnHelper *mConn; }; void TestContactsCapabilities::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("contacts-capabilities"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); mConn = new TestConnHelper(this, TP_TESTS_TYPE_CONTACTS_CONNECTION, "account", "me@example.com", "protocol", "foo", NULL); QCOMPARE(mConn->connect(), true); } void TestContactsCapabilities::init() { initImpl(); } static void freeRccList(GPtrArray *rccs) { g_boxed_free(TP_ARRAY_TYPE_REQUESTABLE_CHANNEL_CLASS_LIST, rccs); } static void addTextChatClass(GPtrArray *classes, TpHandleType handle_type) { GHashTable *fixed = tp_asv_new( TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING, TP_IFACE_CHANNEL_TYPE_TEXT, TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, handle_type, NULL); const gchar * const allowed[] = { NULL }; GValueArray *arr = tp_value_array_build(2, TP_HASH_TYPE_STRING_VARIANT_MAP, fixed, G_TYPE_STRV, allowed, G_TYPE_INVALID); g_hash_table_unref(fixed); g_ptr_array_add(classes, arr); } static GHashTable *createContactCapabilities(TpHandle *handles) { GHashTable *capabilities = g_hash_table_new_full(NULL, NULL, NULL, (GDestroyNotify) freeRccList); /* Support private text chats */ GPtrArray *caps1 = g_ptr_array_sized_new(2); addTextChatClass(caps1, TP_HANDLE_TYPE_CONTACT); g_hash_table_insert(capabilities, GUINT_TO_POINTER(handles[0]), caps1); /* Support text chatrooms */ GPtrArray *caps2 = g_ptr_array_sized_new(1); g_hash_table_insert(capabilities, GUINT_TO_POINTER(handles[1]), caps2); /* Don't support anything */ GPtrArray *caps3 = g_ptr_array_sized_new(0); g_hash_table_insert(capabilities, GUINT_TO_POINTER(handles[2]), caps3); return capabilities; } void TestContactsCapabilities::testCapabilities() { ContactManagerPtr contactManager = mConn->client()->contactManager(); QVERIFY(contactManager->supportedFeatures().contains(Contact::FeatureCapabilities)); QStringList ids = QStringList() << QLatin1String("alice") << QLatin1String("bob") << QLatin1String("chris"); gboolean supportTextChat[] = { TRUE, FALSE, FALSE }; TpHandleRepoIface *serviceRepo = tp_base_connection_get_handles(TP_BASE_CONNECTION(mConn->service()), TP_HANDLE_TYPE_CONTACT); TpHandle handles[] = { 0, 0, 0 }; for (int i = 0; i < 3; i++) { handles[i] = tp_handle_ensure(serviceRepo, ids[i].toLatin1().constData(), NULL, NULL); } GHashTable *capabilities = createContactCapabilities(handles); tp_tests_contacts_connection_change_capabilities( TP_TESTS_CONTACTS_CONNECTION(mConn->service()), capabilities); g_hash_table_destroy(capabilities); QList contacts = mConn->contacts(ids, Contact::FeatureCapabilities); QCOMPARE(contacts.size(), ids.size()); for (int i = 0; i < contacts.size(); i++) { ContactPtr contact = contacts[i]; QCOMPARE(contact->requestedFeatures().contains(Contact::FeatureCapabilities), true); QCOMPARE(contact->actualFeatures().contains(Contact::FeatureCapabilities), true); QCOMPARE(contact->capabilities().textChats(), supportTextChat[i]); QCOMPARE(contact->capabilities().streamedMediaCalls(), false); QCOMPARE(contact->capabilities().streamedMediaAudioCalls(), false); QCOMPARE(contact->capabilities().streamedMediaVideoCalls(), false); QCOMPARE(contact->capabilities().streamedMediaVideoCallsWithAudio(), false); QCOMPARE(contact->capabilities().upgradingStreamedMediaCalls(), false); } } void TestContactsCapabilities::cleanup() { cleanupImpl(); } void TestContactsCapabilities::cleanupTestCase() { QCOMPARE(mConn->disconnect(), true); delete mConn; cleanupTestCaseImpl(); } QTEST_MAIN(TestContactsCapabilities) #include "_gen/contacts-capabilities.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/do-nothing.cpp0000644000175200001440000000173612000056607023274 0ustar00collabora-develusers00000000000000#include #include #include #include #include #include class TestDoNothing : public Test { Q_OBJECT public: TestDoNothing(QObject *parent = 0) : Test(parent) { } private Q_SLOTS: void initTestCase(); void init(); void doNothing(); void doNothing2(); void cleanup(); void cleanupTestCase(); }; void TestDoNothing::initTestCase() { initTestCaseImpl(); } void TestDoNothing::init() { initImpl(); } void TestDoNothing::doNothing() { QTimer::singleShot(0, mLoop, SLOT(quit())); QCOMPARE(mLoop->exec(), 0); } void TestDoNothing::doNothing2() { QTimer::singleShot(0, mLoop, SLOT(quit())); QCOMPARE(mLoop->exec(), 0); } void TestDoNothing::cleanup() { cleanupImpl(); } void TestDoNothing::cleanupTestCase() { cleanupTestCaseImpl(); } QTEST_MAIN(TestDoNothing) #include "_gen/do-nothing.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/base-cm.cpp0000644000175200001440000001205712000056607022533 0ustar00collabora-develusers00000000000000#include #include #define TP_QT_ENABLE_LOWLEVEL_API #include #include #include #include #include #include #include using namespace Tp; class TestBaseCM : public Test { Q_OBJECT public: TestBaseCM(QObject *parent = 0) : Test(parent) { } private Q_SLOTS: void initTestCase(); void init(); void testNoProtocols(); void testProtocols(); void cleanup(); void cleanupTestCase(); private: static void testNoProtocolsCreateCM(BaseConnectionManagerPtr &cm); static void testProtocolsCreateCM(BaseConnectionManagerPtr &cm); }; void TestBaseCM::initTestCase() { initTestCaseImpl(); } void TestBaseCM::init() { initImpl(); } void TestBaseCM::testNoProtocolsCreateCM(BaseConnectionManagerPtr &cm) { cm = BaseConnectionManager::create(QLatin1String("testcm")); Tp::DBusError err; QVERIFY(cm->registerObject(&err)); QVERIFY(!err.isValid()); QCOMPARE(cm->protocols().size(), 0); } void TestBaseCM::testNoProtocols() { qDebug() << "Introspecting non-existing CM"; ConnectionManagerPtr cliCM = ConnectionManager::create( QLatin1String("testcm")); PendingReady *pr = cliCM->becomeReady(ConnectionManager::FeatureCore); connect(pr, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*))); QCOMPARE(mLoop->exec(), 0); qDebug() << "Creating CM"; TestThreadHelper helper; TEST_THREAD_HELPER_EXECUTE(&helper, &testNoProtocolsCreateCM); qDebug() << "Introspecting new CM"; cliCM = ConnectionManager::create(QLatin1String("testcm")); pr = cliCM->becomeReady(ConnectionManager::FeatureCore); connect(pr, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(cliCM->supportedProtocols().size(), 0); qDebug() << "Requesting connection"; PendingConnection *pc = cliCM->lowlevel()->requestConnection( QLatin1String("jabber"), QVariantMap()); connect(pc, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mLastError, TP_QT_ERROR_NOT_IMPLEMENTED); } void TestBaseCM::testProtocolsCreateCM(BaseConnectionManagerPtr &cm) { cm = BaseConnectionManager::create(QLatin1String("testcm")); BaseProtocolPtr protocol = BaseProtocol::create(QLatin1String("myprotocol")); QVERIFY(!protocol.isNull()); QVERIFY(cm->addProtocol(protocol)); QVERIFY(cm->hasProtocol(QLatin1String("myprotocol"))); QCOMPARE(cm->protocol(QLatin1String("myprotocol")), protocol); QCOMPARE(cm->protocols().size(), 1); QVERIFY(!cm->hasProtocol(QLatin1String("otherprotocol"))); QVERIFY(cm->protocol(QLatin1String("otherprotocol")).isNull()); //can't add the same protocol twice QVERIFY(!cm->addProtocol(protocol)); Tp::DBusError err; QVERIFY(cm->registerObject(&err)); QVERIFY(!err.isValid()); //can't add another protocol after registerObject() protocol = BaseProtocol::create(QLatin1String("otherprotocol")); QVERIFY(!protocol.isNull()); QVERIFY(!cm->addProtocol(protocol)); QCOMPARE(cm->protocols().size(), 1); protocol.reset(); QVariantMap props = cm->immutableProperties(); QVERIFY(props.contains(TP_QT_IFACE_CONNECTION_MANAGER + QLatin1String(".Protocols"))); ProtocolPropertiesMap protocols = qvariant_cast( props[TP_QT_IFACE_CONNECTION_MANAGER + QLatin1String(".Protocols")]); QVERIFY(protocols.contains(QLatin1String("myprotocol"))); QVERIFY(!protocols.contains(QLatin1String("otherprotocol"))); } void TestBaseCM::testProtocols() { qDebug() << "Creating CM"; TestThreadHelper helper; TEST_THREAD_HELPER_EXECUTE(&helper, &testProtocolsCreateCM); qDebug() << "Introspecting CM"; ConnectionManagerPtr cliCM = ConnectionManager::create( QLatin1String("testcm")); PendingReady *pr = cliCM->becomeReady(ConnectionManager::FeatureCore); connect(pr, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(cliCM->supportedProtocols().size(), 1); QVERIFY(cliCM->hasProtocol(QLatin1String("myprotocol"))); PendingConnection *pc = cliCM->lowlevel()->requestConnection( QLatin1String("myprotocol"), QVariantMap()); connect(pc, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mLastError, TP_QT_ERROR_NOT_IMPLEMENTED); } void TestBaseCM::cleanup() { cleanupImpl(); } void TestBaseCM::cleanupTestCase() { cleanupTestCaseImpl(); } QTEST_MAIN(TestBaseCM) #include "_gen/base-cm.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/dbus-properties.cpp0000644000175200001440000001212612000056607024350 0ustar00collabora-develusers00000000000000#include #include #include #include #include #include #include #include #include #include using namespace Tp; class TestDBusProperties : public Test { Q_OBJECT public: TestDBusProperties(QObject *parent = 0) : Test(parent), mAccountsCount(0) { } protected Q_SLOTS: void onNewAccount(const Tp::AccountPtr &); void expectSuccessfulAllProperties(Tp::PendingOperation *op); private Q_SLOTS: void initTestCase(); void init(); void testDBusProperties(); void cleanup(); void cleanupTestCase(); private: AccountManagerPtr mAM; int mAccountsCount; bool mCreatingAccount; QVariantMap mAllProperties; }; void TestDBusProperties::onNewAccount(const Tp::AccountPtr &acc) { Q_UNUSED(acc); mAccountsCount++; if (!mCreatingAccount) { mLoop->exit(0); } } void TestDBusProperties::expectSuccessfulAllProperties(PendingOperation *op) { if (op->isError()) { qWarning().nospace() << op->errorName() << ": " << op->errorMessage(); mAllProperties = QVariantMap(); mLoop->exit(1); } else { Tp::PendingVariantMap *pvm = qobject_cast(op); mAllProperties = pvm->result(); mLoop->exit(0); } } void TestDBusProperties::initTestCase() { initTestCaseImpl(); mAM = AccountManager::create(AccountFactory::create(QDBusConnection::sessionBus(), Account::FeatureCore | Account::FeatureCapabilities)); QCOMPARE(mAM->isReady(), false); } void TestDBusProperties::init() { mCreatingAccount = false; initImpl(); } void TestDBusProperties::testDBusProperties() { QVERIFY(connect(mAM->becomeReady(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mAM->isReady(), true); QVERIFY(connect(mAM.data(), SIGNAL(newAccount(const Tp::AccountPtr &)), SLOT(onNewAccount(const Tp::AccountPtr &)))); QVariantMap parameters; parameters[QLatin1String("account")] = QLatin1String("foobar"); PendingAccount *pacc = mAM->createAccount(QLatin1String("foo"), QLatin1String("bar"), QLatin1String("foobar"), parameters); QVERIFY(connect(pacc, SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); mCreatingAccount = true; QCOMPARE(mLoop->exec(), 0); mCreatingAccount = false; QVERIFY(pacc->account()); while (mAccountsCount != 1) { QCOMPARE(mLoop->exec(), 0); } QCOMPARE(mAM->interfaces(), QStringList()); AccountPtr acc = Account::create(mAM->busName(), QLatin1String("/org/freedesktop/Telepathy/Account/foo/bar/Account0")); QVERIFY(connect(acc->becomeReady(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); while (!acc->isReady()) { mLoop->processEvents(); } QCOMPARE(mLoop->exec(), 0); const QString oldDisplayName = QLatin1String("foobar (account 0)"); QCOMPARE(acc->displayName(), oldDisplayName); Client::AccountInterface *cliAccount = acc->interface(); QString currDisplayName; QVERIFY(waitForProperty(cliAccount->requestPropertyDisplayName(), &currDisplayName)); QCOMPARE(currDisplayName, oldDisplayName); QVERIFY(connect(cliAccount->requestAllProperties(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulAllProperties(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mAllProperties[QLatin1String("DisplayName")].value(), oldDisplayName); QVERIFY(mAllProperties[QLatin1String("Interfaces")].value().contains( TP_QT_IFACE_ACCOUNT_INTERFACE_AVATAR)); const QString newDisplayName = QLatin1String("Foo bar account"); QVERIFY(connect(cliAccount->setPropertyDisplayName(newDisplayName), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(waitForProperty(cliAccount->requestPropertyDisplayName(), &currDisplayName)); QCOMPARE(currDisplayName, newDisplayName); QVERIFY(connect(cliAccount->requestAllProperties(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulAllProperties(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mAllProperties[QLatin1String("DisplayName")].value(), newDisplayName); } void TestDBusProperties::cleanup() { cleanupImpl(); } void TestDBusProperties::cleanupTestCase() { cleanupTestCaseImpl(); } QTEST_MAIN(TestDBusProperties) #include "_gen/dbus-properties.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/contacts-info.cpp0000644000175200001440000001741612000056607023777 0ustar00collabora-develusers00000000000000#include #include #include #include #include #include #include #include #include using namespace Tp; class TestContactsInfo : public Test { Q_OBJECT public: TestContactsInfo(QObject *parent = 0) : Test(parent), mConn(0), mContactsInfoFieldsUpdated(0), mRefreshInfoFinished(0) { } protected Q_SLOTS: void onContactInfoFieldsChanged(const Tp::Contact::InfoFields &); void onRefreshInfoFinished(Tp::PendingOperation *); private Q_SLOTS: void initTestCase(); void init(); void testInfo(); void cleanup(); void cleanupTestCase(); private: TestConnHelper *mConn; int mContactsInfoFieldsUpdated; int mRefreshInfoFinished; }; void TestContactsInfo::onContactInfoFieldsChanged(const Tp::Contact::InfoFields &info) { Q_UNUSED(info); mContactsInfoFieldsUpdated++; } void TestContactsInfo::onRefreshInfoFinished(PendingOperation *op) { if (op->isError()) { mLoop->exit(1); return; } mRefreshInfoFinished++; mLoop->exit(0); } void TestContactsInfo::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("contacts-info"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); mConn = new TestConnHelper(this, TP_TESTS_TYPE_CONTACTS_CONNECTION, "account", "me@example.com", "protocol", "foo", NULL); QCOMPARE(mConn->connect(), true); } void TestContactsInfo::init() { initImpl(); mContactsInfoFieldsUpdated = 0; mRefreshInfoFinished = 0; } void TestContactsInfo::testInfo() { ContactManagerPtr contactManager = mConn->client()->contactManager(); QVERIFY(contactManager->supportedFeatures().contains(Contact::FeatureInfo)); QStringList validIDs = QStringList() << QLatin1String("foo") << QLatin1String("bar"); QList contacts = mConn->contacts(validIDs, Contact::FeatureInfo); QCOMPARE(contacts.size(), validIDs.size()); for (int i = 0; i < contacts.size(); i++) { ContactPtr contact = contacts[i]; QCOMPARE(contact->requestedFeatures().contains(Contact::FeatureInfo), true); QCOMPARE(contact->actualFeatures().contains(Contact::FeatureInfo), true); QVERIFY(contact->infoFields().allFields().isEmpty()); QVERIFY(connect(contact.data(), SIGNAL(infoFieldsChanged(const Tp::Contact::InfoFields &)), SLOT(onContactInfoFieldsChanged(const Tp::Contact::InfoFields &)))); } GPtrArray *info_default = (GPtrArray *) dbus_g_type_specialized_construct ( TP_ARRAY_TYPE_CONTACT_INFO_FIELD_LIST); { const gchar * const field_values[2] = { "FooBar", NULL }; g_ptr_array_add (info_default, tp_value_array_build (3, G_TYPE_STRING, "n", G_TYPE_STRV, NULL, G_TYPE_STRV, field_values, G_TYPE_INVALID)); } tp_tests_contacts_connection_set_default_contact_info(TP_TESTS_CONTACTS_CONNECTION(mConn->service()), info_default); GPtrArray *info_1 = (GPtrArray *) dbus_g_type_specialized_construct ( TP_ARRAY_TYPE_CONTACT_INFO_FIELD_LIST); { const gchar * const field_values[2] = { "Foo", NULL }; g_ptr_array_add (info_1, tp_value_array_build (3, G_TYPE_STRING, "n", G_TYPE_STRV, NULL, G_TYPE_STRV, field_values, G_TYPE_INVALID)); } GPtrArray *info_2 = (GPtrArray *) dbus_g_type_specialized_construct ( TP_ARRAY_TYPE_CONTACT_INFO_FIELD_LIST); { const gchar * const field_values[2] = { "Bar", NULL }; g_ptr_array_add (info_2, tp_value_array_build (3, G_TYPE_STRING, "n", G_TYPE_STRV, NULL, G_TYPE_STRV, field_values, G_TYPE_INVALID)); } TpHandle handles[] = { 0, 0 }; TpHandleRepoIface *serviceRepo = tp_base_connection_get_handles( TP_BASE_CONNECTION(mConn->service()), TP_HANDLE_TYPE_CONTACT); for (unsigned i = 0; i < 2; i++) { handles[i] = tp_handle_ensure(serviceRepo, qPrintable(validIDs[i]), NULL, NULL); } tp_tests_contacts_connection_change_contact_info(TP_TESTS_CONTACTS_CONNECTION(mConn->service()), handles[0], info_1); tp_tests_contacts_connection_change_contact_info(TP_TESTS_CONTACTS_CONNECTION(mConn->service()), handles[1], info_2); while (mContactsInfoFieldsUpdated != 2) { mLoop->processEvents(); } QCOMPARE(mContactsInfoFieldsUpdated, 2); mContactsInfoFieldsUpdated = 0; ContactPtr contactFoo = contacts[0]; ContactPtr contactBar = contacts[1]; QCOMPARE(contactFoo->infoFields().isValid(), true); QCOMPARE(contactFoo->infoFields().allFields().size(), 1); QCOMPARE(contactFoo->infoFields().allFields()[0].fieldName, QLatin1String("n")); QCOMPARE(contactFoo->infoFields().allFields()[0].fieldValue[0], QLatin1String("Foo")); QCOMPARE(contactBar->infoFields().isValid(), true); QCOMPARE(contactBar->infoFields().allFields().size(), 1); QCOMPARE(contactBar->infoFields().allFields()[0].fieldName, QLatin1String("n")); QCOMPARE(contactBar->infoFields().allFields()[0].fieldValue[0], QLatin1String("Bar")); TpTestsContactsConnection *serviceConn = TP_TESTS_CONTACTS_CONNECTION(mConn->service()); QCOMPARE(serviceConn->refresh_contact_info_called, static_cast(0)); mContactsInfoFieldsUpdated = 0; mRefreshInfoFinished = 0; Q_FOREACH (const ContactPtr &contact, contacts) { QVERIFY(connect(contact->refreshInfo(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onRefreshInfoFinished(Tp::PendingOperation*)))); } while (mRefreshInfoFinished != contacts.size()) { QCOMPARE(mLoop->exec(), 0); } QCOMPARE(mRefreshInfoFinished, contacts.size()); while (mContactsInfoFieldsUpdated != contacts.size()) { mLoop->processEvents(); } QCOMPARE(mContactsInfoFieldsUpdated, contacts.size()); QCOMPARE(serviceConn->refresh_contact_info_called, static_cast(1)); for (int i = 0; i < contacts.size(); i++) { ContactPtr contact = contacts[i]; QVERIFY(disconnect(contact.data(), SIGNAL(infoFieldsChanged(const Tp::Contact::InfoFields &)), this, SLOT(onContactInfoFieldsChanged(const Tp::Contact::InfoFields &)))); } PendingContactInfo *pci = contactFoo->requestInfo(); QVERIFY(connect(pci, SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); while (!pci->isFinished()) { QCOMPARE(mLoop->exec(), 0); } QCOMPARE(pci->infoFields().isValid(), true); QCOMPARE(pci->infoFields().allFields().size(), 1); QCOMPARE(pci->infoFields().allFields()[0].fieldName, QLatin1String("n")); QCOMPARE(pci->infoFields().allFields()[0].fieldValue[0], QLatin1String("FooBar")); g_boxed_free(TP_ARRAY_TYPE_CONTACT_INFO_FIELD_LIST, info_default); g_boxed_free(TP_ARRAY_TYPE_CONTACT_INFO_FIELD_LIST, info_1); g_boxed_free(TP_ARRAY_TYPE_CONTACT_INFO_FIELD_LIST, info_2); } void TestContactsInfo::cleanup() { cleanupImpl(); } void TestContactsInfo::cleanupTestCase() { QCOMPARE(mConn->disconnect(), true); delete mConn; cleanupTestCaseImpl(); } QTEST_MAIN(TestContactsInfo) #include "_gen/contacts-info.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/stream-tube-handlers.cpp0000644000175200001440000022233012000056607025247 0ustar00collabora-develusers00000000000000#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace Tp; using namespace Tp::Client; namespace { class ChannelRequestAdaptor : public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.freedesktop.Telepathy.ChannelRequest") Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" "") Q_PROPERTY(QDBusObjectPath Account READ Account) Q_PROPERTY(qulonglong UserActionTime READ UserActionTime) Q_PROPERTY(QString PreferredHandler READ PreferredHandler) Q_PROPERTY(QualifiedPropertyValueMapList Requests READ Requests) Q_PROPERTY(QStringList Interfaces READ Interfaces) Q_PROPERTY(QVariantMap Hints READ Hints) public: ChannelRequestAdaptor(QDBusObjectPath account, qulonglong userActionTime, QString preferredHandler, QualifiedPropertyValueMapList requests, QStringList interfaces, bool shouldFail, bool proceedNoop, QVariantMap hints, QObject *parent) : QDBusAbstractAdaptor(parent), mAccount(account), mUserActionTime(userActionTime), mPreferredHandler(preferredHandler), mRequests(requests), mInterfaces(interfaces), mShouldFail(shouldFail), mProceedNoop(proceedNoop), mHints(hints) { } virtual ~ChannelRequestAdaptor() { } void setChan(const QString &connPath, const QVariantMap &connProps, const QString &chanPath, const QVariantMap &chanProps) { mConnPath = connPath; mConnProps = connProps; mChanPath = chanPath; mChanProps = chanProps; } public: // Properties inline QDBusObjectPath Account() const { return mAccount; } inline qulonglong UserActionTime() const { return mUserActionTime; } inline QString PreferredHandler() const { return mPreferredHandler; } inline QualifiedPropertyValueMapList Requests() const { return mRequests; } inline QStringList Interfaces() const { return mInterfaces; } inline QVariantMap Hints() const { return mHints; } public Q_SLOTS: // Methods void Proceed() { if (mProceedNoop) { return; } if (mShouldFail) { QTimer::singleShot(0, this, SLOT(fail())); } else { QTimer::singleShot(0, this, SLOT(succeed())); } } void Cancel() { Q_EMIT Failed(QLatin1String(TP_QT_ERROR_CANCELLED), QLatin1String("Cancelled")); } Q_SIGNALS: // Signals void Failed(const QString &error, const QString &message); void Succeeded(); void SucceededWithChannel(const QDBusObjectPath &connPath, const QVariantMap &connProps, const QDBusObjectPath &chanPath, const QVariantMap &chanProps); private Q_SLOTS: void fail() { Q_EMIT Failed(QLatin1String(TP_QT_ERROR_NOT_AVAILABLE), QLatin1String("Not available")); } void succeed() { if (!mConnPath.isEmpty() && !mChanPath.isEmpty()) { Q_EMIT SucceededWithChannel(QDBusObjectPath(mConnPath), mConnProps, QDBusObjectPath(mChanPath), mChanProps); } Q_EMIT Succeeded(); } private: QDBusObjectPath mAccount; qulonglong mUserActionTime; QString mPreferredHandler; QualifiedPropertyValueMapList mRequests; QStringList mInterfaces; bool mShouldFail; bool mProceedNoop; QVariantMap mHints; QString mConnPath, mChanPath; QVariantMap mConnProps, mChanProps; }; void destroySocketControlList(gpointer data) { g_array_free(reinterpret_cast(data), TRUE); } GHashTable *createSupportedSocketTypesHash(bool supportMonitoring, bool unixOnly) { GHashTable *ret; GArray *tab; TpSocketAccessControl ac; ret = g_hash_table_new_full(NULL, NULL, NULL, destroySocketControlList); // Named UNIX tab = g_array_sized_new(FALSE, FALSE, sizeof(TpSocketAccessControl), 1); ac = TP_SOCKET_ACCESS_CONTROL_LOCALHOST; g_array_append_val(tab, ac); if (supportMonitoring) { ac = TP_SOCKET_ACCESS_CONTROL_CREDENTIALS; g_array_append_val(tab, ac); } g_hash_table_insert(ret, GUINT_TO_POINTER(TP_SOCKET_ADDRESS_TYPE_UNIX), tab); // Abstract UNIX tab = g_array_sized_new(FALSE, FALSE, sizeof(TpSocketAccessControl), 1); ac = TP_SOCKET_ACCESS_CONTROL_LOCALHOST; g_array_append_val(tab, ac); if (supportMonitoring) { ac = TP_SOCKET_ACCESS_CONTROL_CREDENTIALS; g_array_append_val(tab, ac); } g_hash_table_insert(ret, GUINT_TO_POINTER(TP_SOCKET_ADDRESS_TYPE_ABSTRACT_UNIX), tab); if (unixOnly) { return ret; } // IPv4 tab = g_array_sized_new(FALSE, FALSE, sizeof(TpSocketAccessControl), 1); ac = TP_SOCKET_ACCESS_CONTROL_LOCALHOST; g_array_append_val(tab, ac); if (supportMonitoring) { ac = TP_SOCKET_ACCESS_CONTROL_PORT; g_array_append_val(tab, ac); } g_hash_table_insert(ret, GUINT_TO_POINTER(TP_SOCKET_ADDRESS_TYPE_IPV4), tab); // IPv6 tab = g_array_sized_new(FALSE, FALSE, sizeof(TpSocketAccessControl), 1); ac = TP_SOCKET_ACCESS_CONTROL_LOCALHOST; g_array_append_val(tab, ac); if (supportMonitoring) { ac = TP_SOCKET_ACCESS_CONTROL_PORT; g_array_append_val(tab, ac); } g_hash_table_insert(ret, GUINT_TO_POINTER(TP_SOCKET_ADDRESS_TYPE_IPV6), tab); return ret; } } class TestStreamTubeHandlers : public Test { Q_OBJECT public: TestStreamTubeHandlers(QObject *parent = 0) : Test(parent) { } protected Q_SLOTS: void onTubeRequested(const Tp::AccountPtr &, const Tp::OutgoingStreamTubeChannelPtr &, const QDateTime &, const Tp::ChannelRequestHints &); void onServerTubeClosed(const Tp::AccountPtr &, const Tp::OutgoingStreamTubeChannelPtr &, const QString &, const QString &); void onNewServerConnection(const QHostAddress &, quint16, const Tp::AccountPtr &, const Tp::ContactPtr &, const Tp::OutgoingStreamTubeChannelPtr &); void onServerConnectionClosed(const QHostAddress &, quint16, const Tp::AccountPtr &, const Tp::ContactPtr &, const QString &, const QString &, const Tp::OutgoingStreamTubeChannelPtr &); void onTubeOffered(const Tp::AccountPtr &, const Tp::IncomingStreamTubeChannelPtr &); void onClientTubeClosed(const Tp::AccountPtr &, const Tp::IncomingStreamTubeChannelPtr &, const QString &, const QString &); void onClientAcceptedAsTcp(const QHostAddress &, quint16, const QHostAddress &, quint16, const Tp::AccountPtr &, const Tp::IncomingStreamTubeChannelPtr &); void onClientAcceptedAsUnix(const QString &, bool reqsCreds, uchar credByte, const Tp::AccountPtr &, const Tp::IncomingStreamTubeChannelPtr &); void onNewClientConnection(const Tp::AccountPtr &, const Tp::IncomingStreamTubeChannelPtr &, uint connectionId); void onClientConnectionClosed(const Tp::AccountPtr &, const Tp::IncomingStreamTubeChannelPtr &, uint, const QString &, const QString &); private Q_SLOTS: void initTestCase(); void init(); void testRegistration(); void testBasicTcpExport(); void testFailedExport(); void testServerConnMonitoring(); void testSSTHErrorPaths(); void testClientBasicTcp(); void testClientTcpGeneratorIgnore(); void testClientTcpUnsupported(); void testClientBasicUnix(); void testClientUnixCredsIgnore(); // the unix AF unsupported codepaths are the same, so no need to test separately void testClientConnMonitoring(); void cleanup(); void cleanupTestCase(); private: QMap ourHandlers(); QPair createTubeChannel(bool requested, HandleType type, bool supportMonitoring, bool unixOnly = false); AccountManagerPtr mAM; AccountPtr mAcc; TestConnHelper *mConn; QList mChanServices; OutgoingStreamTubeChannelPtr mRequestedTube; QDateTime mRequestTime; ChannelRequestHints mRequestHints; OutgoingStreamTubeChannelPtr mServerClosedTube; QString mServerCloseError, mServerCloseMessage; QHostAddress mNewServerConnectionAddress, mClosedServerConnectionAddress; quint16 mNewServerConnectionPort, mClosedServerConnectionPort; ContactPtr mNewServerConnectionContact, mClosedServerConnectionContact; OutgoingStreamTubeChannelPtr mNewServerConnectionTube, mServerConnectionCloseTube; QString mServerConnectionCloseError, mServerConnectionCloseMessage; IncomingStreamTubeChannelPtr mOfferedTube; IncomingStreamTubeChannelPtr mClientClosedTube; QString mClientCloseError, mClientCloseMessage; QHostAddress mClientTcpAcceptAddr, mClientTcpAcceptSrcAddr; quint16 mClientTcpAcceptPort, mClientTcpAcceptSrcPort; IncomingStreamTubeChannelPtr mClientTcpAcceptTube; QString mClientUnixAcceptAddr; bool mClientUnixReqsCreds; IncomingStreamTubeChannelPtr mClientUnixAcceptTube; IncomingStreamTubeChannelPtr mNewClientConnectionTube, mClosedClientConnectionTube; uint mNewClientConnectionId, mClosedClientConnectionId; QString mClientConnectionCloseError, mClientConnectionCloseMessage; }; QPair TestStreamTubeHandlers::createTubeChannel(bool requested, HandleType handleType, bool supportMonitoring, bool unixOnly) { mLoop->processEvents(); /* Create service-side tube channel object */ QString chanPath = QString(QLatin1String("%1/Channel%2%3%4")) .arg(mConn->objectPath()) .arg(requested) .arg(static_cast(handleType)) .arg(supportMonitoring); QVariantMap chanProps; chanProps.insert(TP_QT_IFACE_CHANNEL + QString::fromLatin1(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_STREAM_TUBE); chanProps.insert(TP_QT_IFACE_CHANNEL + QString::fromLatin1(".Requested"), requested); chanProps.insert(TP_QT_IFACE_CHANNEL + QString::fromLatin1(".TargetHandleType"), static_cast(handleType)); TpHandleRepoIface *contactRepo = tp_base_connection_get_handles( TP_BASE_CONNECTION(mConn->service()), TP_HANDLE_TYPE_CONTACT); TpHandleRepoIface *roomRepo = tp_base_connection_get_handles( TP_BASE_CONNECTION(mConn->service()), TP_HANDLE_TYPE_ROOM); TpHandle handle; GType type; if (handleType == HandleTypeContact) { handle = tp_handle_ensure(contactRepo, "bob", NULL, NULL); type = TP_TESTS_TYPE_CONTACT_STREAM_TUBE_CHANNEL; chanProps.insert(TP_QT_IFACE_CHANNEL + QString::fromLatin1(".TargetID"), QString::fromLatin1("bob")); } else { handle = tp_handle_ensure(roomRepo, "#test", NULL, NULL); type = TP_TESTS_TYPE_ROOM_STREAM_TUBE_CHANNEL; chanProps.insert(TP_QT_IFACE_CHANNEL + QString::fromLatin1(".TargetID"), QString::fromLatin1("#test")); } chanProps.insert(TP_QT_IFACE_CHANNEL + QString::fromLatin1(".TargetHandle"), handle); TpHandle alfHandle = tp_handle_ensure(contactRepo, "alf", NULL, NULL); GHashTable *sockets = createSupportedSocketTypesHash(supportMonitoring, unixOnly); mChanServices.push_back( TP_TESTS_STREAM_TUBE_CHANNEL(g_object_new( type, "connection", mConn->service(), "handle", handle, "requested", requested, "object-path", chanPath.toLatin1().constData(), "supported-socket-types", sockets, "initiator-handle", alfHandle, NULL))); return qMakePair(chanPath, chanProps); } QMap TestStreamTubeHandlers::ourHandlers() { QStringList registeredNames = QDBusConnection::sessionBus().interface()->registeredServiceNames(); QMap handlers; Q_FOREACH (QString name, registeredNames) { if (!name.startsWith(QLatin1String("org.freedesktop.Telepathy.Client."))) { continue; } if (QDBusConnection::sessionBus().interface()->serviceOwner(name).value() != QDBusConnection::sessionBus().baseService()) { continue; } QString path = QLatin1Char('/') + name; path.replace(QLatin1Char('.'), QLatin1Char('/')); ClientInterface client(name, path); QStringList ifaces; if (!waitForProperty(client.requestPropertyInterfaces(), &ifaces)) { continue; } if (!ifaces.contains(TP_QT_IFACE_CLIENT_HANDLER)) { continue; } handlers.insert(name.mid(std::strlen("org.freedesktop.Telepathy.Client.")), new ClientHandlerInterface(name, path, this)); } return handlers; } void TestStreamTubeHandlers::onTubeRequested( const Tp::AccountPtr &acc, const Tp::OutgoingStreamTubeChannelPtr &tube, const QDateTime &userActionTime, const Tp::ChannelRequestHints &hints) { qDebug() << "tube" << tube->objectPath() << "requested on account" << acc->objectPath(); // We don't use a shared factory here so the proxies will be different, but the object path // should be the same if (acc->objectPath() != mAcc->objectPath()) { qWarning() << "account" << acc->objectPath() << "is not the expected" << mAcc->objectPath(); mLoop->exit(1); return; } // We always set the user action time in the past, so if that's carried over correctly, it won't // be any more recent than the current time if (mRequestTime >= QDateTime::currentDateTime()) { qWarning() << "user action time later than expected"; mLoop->exit(2); return; } mRequestedTube = tube; mRequestTime = userActionTime; mRequestHints = hints; mLoop->exit(0); } void TestStreamTubeHandlers::onServerTubeClosed( const Tp::AccountPtr &acc, const Tp::OutgoingStreamTubeChannelPtr &tube, const QString &error, const QString &message) { qDebug() << "tube" << tube->objectPath() << "closed on account" << acc->objectPath(); qDebug() << "with error" << error << ':' << message; // We don't use a shared factory here so the proxies will be different, but the object path // should be the same if (acc->objectPath() != mAcc->objectPath()) { qWarning() << "account" << acc->objectPath() << "is not the expected" << mAcc->objectPath(); mLoop->exit(1); return; } mServerClosedTube = tube; mServerCloseError = error; mServerCloseMessage = message; mLoop->exit(0); } void TestStreamTubeHandlers::onClientTubeClosed( const Tp::AccountPtr &acc, const Tp::IncomingStreamTubeChannelPtr &tube, const QString &error, const QString &message) { qDebug() << "tube" << tube->objectPath() << "closed on account" << acc->objectPath(); qDebug() << "with error" << error << ':' << message; // We don't use a shared factory here so the proxies will be different, but the object path // should be the same if (acc->objectPath() != mAcc->objectPath()) { qWarning() << "account" << acc->objectPath() << "is not the expected" << mAcc->objectPath(); mLoop->exit(1); return; } mClientClosedTube = tube; mClientCloseError = error; mClientCloseMessage = message; mLoop->exit(0); } void TestStreamTubeHandlers::onNewServerConnection( const QHostAddress &sourceAddress, quint16 sourcePort, const Tp::AccountPtr &acc, const Tp::ContactPtr &contact, const Tp::OutgoingStreamTubeChannelPtr &tube) { qDebug() << "new conn" << qMakePair(sourceAddress, sourcePort) << "on tube" << tube->objectPath(); qDebug() << "from contact" << contact->id(); // We don't use a shared factory here so the proxies will be different, but the object path // should be the same if (acc->objectPath() != mAcc->objectPath()) { qWarning() << "account" << acc->objectPath() << "is not the expected" << mAcc->objectPath(); mLoop->exit(1); return; } if (!tube->connectionsForSourceAddresses().contains(qMakePair(sourceAddress, sourcePort))) { qWarning() << "the signaled tube doesn't report having that particular connection"; mLoop->exit(2); return; } mNewServerConnectionAddress = sourceAddress; mNewServerConnectionPort = sourcePort; mNewServerConnectionContact = contact; mNewServerConnectionTube = tube; mLoop->exit(0); } void TestStreamTubeHandlers::onServerConnectionClosed( const QHostAddress &sourceAddress, quint16 sourcePort, const Tp::AccountPtr &acc, const Tp::ContactPtr &contact, const QString &error, const QString &message, const Tp::OutgoingStreamTubeChannelPtr &tube) { qDebug() << "conn" << qMakePair(sourceAddress, sourcePort) << "closed on tube" << tube->objectPath(); qDebug() << "with error" << error << ':' << message; // We don't use a shared factory here so the proxies will be different, but the object path // should be the same if (acc->objectPath() != mAcc->objectPath()) { qWarning() << "account" << acc->objectPath() << "is not the expected" << mAcc->objectPath(); mLoop->exit(1); return; } mClosedServerConnectionAddress = sourceAddress; mClosedServerConnectionPort = sourcePort; mClosedServerConnectionContact = contact; mServerConnectionCloseError = error; mServerConnectionCloseMessage = message; mServerConnectionCloseTube = tube; mLoop->exit(0); } void TestStreamTubeHandlers::onTubeOffered( const Tp::AccountPtr &acc, const Tp::IncomingStreamTubeChannelPtr &tube) { qDebug() << "tube" << tube->objectPath() << "offered to account" << acc->objectPath(); // We don't use a shared factory here so the proxies will be different, but the object path // should be the same if (acc->objectPath() != mAcc->objectPath()) { qWarning() << "account" << acc->objectPath() << "is not the expected" << mAcc->objectPath(); mLoop->exit(1); return; } mOfferedTube = tube; mLoop->exit(0); } void TestStreamTubeHandlers::onClientAcceptedAsTcp( const QHostAddress &listenAddress, quint16 listenPort, const QHostAddress &sourceAddress, quint16 sourcePort, const Tp::AccountPtr &acc, const Tp::IncomingStreamTubeChannelPtr &tube) { qDebug() << "tube" << tube->objectPath() << "accepted at" << qMakePair(listenAddress, listenPort); // We don't use a shared factory here so the proxies will be different, but the object path // should be the same if (acc->objectPath() != mAcc->objectPath()) { qWarning() << "account" << acc->objectPath() << "is not the expected" << mAcc->objectPath(); mLoop->exit(1); return; } mClientTcpAcceptAddr = listenAddress; mClientTcpAcceptPort = listenPort; mClientTcpAcceptSrcAddr = sourceAddress; mClientTcpAcceptSrcPort = sourcePort; mClientTcpAcceptTube = tube; mLoop->exit(0); } void TestStreamTubeHandlers::onClientAcceptedAsUnix( const QString &listenAddress, bool reqsCreds, uchar credByte, const Tp::AccountPtr &acc, const Tp::IncomingStreamTubeChannelPtr &tube) { qDebug() << "tube" << tube->objectPath() << "accepted at" << listenAddress; qDebug() << "reqs creds:" << reqsCreds << "cred byte:" << credByte; // We don't use a shared factory here so the proxies will be different, but the object path // should be the same if (acc->objectPath() != mAcc->objectPath()) { qWarning() << "account" << acc->objectPath() << "is not the expected" << mAcc->objectPath(); mLoop->exit(1); return; } mClientUnixAcceptAddr = listenAddress; mClientUnixReqsCreds = reqsCreds; mClientUnixAcceptTube = tube; mLoop->exit(0); } void TestStreamTubeHandlers::onNewClientConnection( const Tp::AccountPtr &acc, const Tp::IncomingStreamTubeChannelPtr &tube, uint id) { qDebug() << "new conn" << id << "on tube" << tube->objectPath(); // We don't use a shared factory here so the proxies will be different, but the object path // should be the same if (acc->objectPath() != mAcc->objectPath()) { qWarning() << "account" << acc->objectPath() << "is not the expected" << mAcc->objectPath(); mLoop->exit(1); return; } mNewClientConnectionTube = tube; mNewClientConnectionId = id; mLoop->exit(0); } void TestStreamTubeHandlers::onClientConnectionClosed( const Tp::AccountPtr &acc, const Tp::IncomingStreamTubeChannelPtr &tube, uint id, const QString &error, const QString &message) { qDebug() << "conn" << id << "closed on tube" << tube->objectPath(); qDebug() << "with error" << error << ':' << message; // We don't use a shared factory here so the proxies will be different, but the object path // should be the same if (acc->objectPath() != mAcc->objectPath()) { qWarning() << "account" << acc->objectPath() << "is not the expected" << mAcc->objectPath(); mLoop->exit(1); return; } mClosedClientConnectionTube = tube; mClosedClientConnectionId = id; mClientConnectionCloseError = error; mClientConnectionCloseMessage = message; mLoop->exit(0); } void TestStreamTubeHandlers::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("stream-tube-handlers"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); mAM = AccountManager::create(); QVERIFY(connect(mAM->becomeReady(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mAM->isReady(), true); QVariantMap parameters; parameters[QLatin1String("account")] = QLatin1String("foobar"); PendingAccount *pacc = mAM->createAccount(QLatin1String("foo"), QLatin1String("bar"), QLatin1String("foobar"), parameters); QVERIFY(connect(pacc, SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(pacc->account()); mAcc= pacc->account(); mConn = new TestConnHelper(this, TP_TESTS_TYPE_SIMPLE_CONNECTION, "account", "me@example.com", "protocol", "example", NULL); QCOMPARE(mConn->connect(), true); } void TestStreamTubeHandlers::init() { initImpl(); } void TestStreamTubeHandlers::testRegistration() { StreamTubeServerPtr httpServer = StreamTubeServer::create(QStringList() << QLatin1String("http"), QStringList()); StreamTubeServerPtr whiteboardServer = StreamTubeServer::create(QStringList() << QLatin1String("sketch"), QStringList() << QLatin1String("sketch"), QString(), true); StreamTubeServerPtr activatedServer = StreamTubeServer::create(QStringList() << QLatin1String("ftp"), QStringList(), QLatin1String("vsftpd")); StreamTubeServerPtr preferredHandlerServer = StreamTubeServer::create(QStringList()); StreamTubeClientPtr browser = StreamTubeClient::create(QStringList() << QLatin1String("http"), QStringList(), QLatin1String("Debian.Iceweasel")); StreamTubeClientPtr collaborationTool = StreamTubeClient::create(QStringList() << QLatin1String("sketch") << QLatin1String("ftp"), QStringList() << QLatin1String("sketch"), QString(), false, true); StreamTubeClientPtr invalidBecauseNoServicesClient = StreamTubeClient::create(QStringList()); QVERIFY(!httpServer.isNull()); QVERIFY(!whiteboardServer.isNull()); QVERIFY(!activatedServer.isNull()); QVERIFY(!preferredHandlerServer.isNull()); QVERIFY(!browser.isNull()); QVERIFY(!collaborationTool.isNull()); QVERIFY(invalidBecauseNoServicesClient.isNull()); QCOMPARE(activatedServer->clientName(), QLatin1String("vsftpd")); QCOMPARE(browser->clientName(), QLatin1String("Debian.Iceweasel")); class CookieGenerator : public StreamTubeServer::ParametersGenerator { public: CookieGenerator() : serial(0) {} QVariantMap nextParameters(const AccountPtr &account, const OutgoingStreamTubeChannelPtr &tube, const ChannelRequestHints &hints) { QVariantMap params; params.insert(QLatin1String("cookie-y"), QString(QLatin1String("e982mrh2mr2h+%1")).arg(serial++)); return params; } private: uint serial; } httpGenerator; QVariantMap whiteboardParams; whiteboardParams.insert(QLatin1String("password"), QString::fromLatin1("s3kr1t")); QTcpServer server; server.listen(); httpServer->exportTcpSocket(QHostAddress::LocalHost, 80, &httpGenerator); whiteboardServer->exportTcpSocket(QHostAddress::LocalHost, 31552, whiteboardParams); activatedServer->exportTcpSocket(&server); QCOMPARE(activatedServer->exportedParameters(), QVariantMap()); preferredHandlerServer->exportTcpSocket(QHostAddress::LocalHost, 6681); browser->setToAcceptAsTcp(); collaborationTool->setToAcceptAsUnix(true); QVERIFY(httpServer->isRegistered()); QVERIFY(whiteboardServer->isRegistered()); QVERIFY(activatedServer->isRegistered()); QVERIFY(preferredHandlerServer->isRegistered()); QVERIFY(browser->isRegistered()); QVERIFY(collaborationTool->isRegistered()); QMap handlers = ourHandlers(); QVERIFY(!handlers.isEmpty()); QVERIFY(handlers.contains(httpServer->clientName())); QVERIFY(handlers.contains(whiteboardServer->clientName())); QVERIFY(handlers.contains(QLatin1String("vsftpd"))); QVERIFY(handlers.contains(preferredHandlerServer->clientName())); QVERIFY(handlers.contains(QLatin1String("Debian.Iceweasel"))); QVERIFY(handlers.contains(collaborationTool->clientName())); QCOMPARE(handlers.size(), 6); // The only-to-be-used-through-preferredHandler server should have an empty filter, but still be // registered and introspectable ChannelClassList filter; QVERIFY(waitForProperty(handlers.value(preferredHandlerServer->clientName())-> requestPropertyHandlerChannelFilter(), &filter)); QVERIFY(filter.isEmpty()); // We didn't specify bypassApproval = true, so it should be false. for all we know we could be // sent some fairly NSFW stuff on a HTTP tube :> bool bypass; QVERIFY(waitForProperty(handlers.value(browser->clientName())->requestPropertyBypassApproval(), &bypass)); QVERIFY(!bypass); // here we did, though, because we want our coworkers to be able to save our ass by launching a // brainstorming UI on top of our again rather NSFW browsing habits while we're having a cup QVERIFY(waitForProperty(handlers.value(collaborationTool->clientName())-> requestPropertyBypassApproval(), &bypass)); QVERIFY(bypass); } void TestStreamTubeHandlers::testBasicTcpExport() { StreamTubeServerPtr server = StreamTubeServer::create(QStringList() << QLatin1String("ftp"), QStringList(), QLatin1String("vsftpd")); QVariantMap params; params.insert(QLatin1String("username"), QString::fromLatin1("user")); params.insert(QLatin1String("password"), QString::fromLatin1("pass")); server->exportTcpSocket(QHostAddress::LocalHost, 22, params); QVERIFY(server->isRegistered()); QCOMPARE(server->exportedTcpSocketAddress(), qMakePair(QHostAddress(QHostAddress::LocalHost), quint16(22))); QCOMPARE(server->exportedParameters(), params); QVERIFY(!server->monitorsConnections()); QMap handlers = ourHandlers(); QVERIFY(!handlers.isEmpty()); ClientHandlerInterface *handler = handlers.value(server->clientName()); QVERIFY(handler != 0); ChannelClassList filter; QVERIFY(waitForProperty(handler->requestPropertyHandlerChannelFilter(), &filter)); QCOMPARE(filter.size(), 1); QVERIFY(ChannelClassSpec(filter.first()) == ChannelClassSpec::outgoingStreamTube(QLatin1String("ftp"))); QPair chan = createTubeChannel(true, HandleTypeContact, false); QVERIFY(connect(server.data(), SIGNAL(tubeRequested(Tp::AccountPtr,Tp::OutgoingStreamTubeChannelPtr,QDateTime,Tp::ChannelRequestHints)), SLOT(onTubeRequested(Tp::AccountPtr,Tp::OutgoingStreamTubeChannelPtr,QDateTime,Tp::ChannelRequestHints)))); QDateTime userActionTime = QDateTime::currentDateTime().addDays(-1); userActionTime = userActionTime.addMSecs(-userActionTime.time().msec()); QVariantMap hints; hints.insert(QLatin1String("tp-qt-test-request-hint-herring-color-rgba"), uint(0xff000000)); QObject *request = new QObject(this); QString requestPath = QLatin1String("/org/freedesktop/Telepathy/ChannelRequest/RequestForSimpleTcpExport"); QDBusConnection bus = server->registrar()->dbusConnection(); new ChannelRequestAdaptor(QDBusObjectPath(mAcc->objectPath()), userActionTime.toTime_t(), QString(), QualifiedPropertyValueMapList(), QStringList(), false, false, hints, request); QVERIFY(bus.registerService(TP_QT_CHANNEL_DISPATCHER_BUS_NAME)); QVERIFY(bus.registerObject(requestPath, request)); // Invoke the handler, verifying that we're notified when that happens with the correct tube // details ChannelDetails details = { QDBusObjectPath(chan.first), chan.second }; handler->HandleChannels( QDBusObjectPath(mAcc->objectPath()), QDBusObjectPath(mConn->objectPath()), ChannelDetailsList() << details, ObjectPathList() << QDBusObjectPath(requestPath), userActionTime.toTime_t(), QVariantMap()); QCOMPARE(mLoop->exec(), 0); QVERIFY(!mRequestedTube.isNull()); QCOMPARE(mRequestedTube->objectPath(), chan.first); QCOMPARE(mRequestTime, userActionTime); QCOMPARE(mRequestHints.allHints(), hints); // Verify that the state recovery accessors return sensible values at this point QList serverTubes = server->tubes(); QCOMPARE(serverTubes.size(), 1); QCOMPARE(serverTubes.first().account()->objectPath(), mAcc->objectPath()); QCOMPARE(serverTubes.first().channel(), mRequestedTube); QVERIFY(server->tcpConnections().isEmpty()); // Let's run until the tube has been offered while (mRequestedTube->isValid() && mRequestedTube->state() != TubeChannelStateRemotePending) { mLoop->processEvents(); } QVERIFY(mRequestedTube->isValid()); // Simulate a peer connecting (makes the tube Open up) GValue *connParam = tp_g_value_slice_new_static_string("ignored"); tp_tests_stream_tube_channel_peer_connected_no_stream(mChanServices.back(), connParam, tp_base_channel_get_target_handle(TP_BASE_CHANNEL(mChanServices.back()))); tp_g_value_slice_free(connParam); // The params are set once the tube is open (we've picked up the first peer connection) while (mRequestedTube->isValid() && mRequestedTube->state() != TubeChannelStateOpen) { mLoop->processEvents(); } // Verify the params QVERIFY(mRequestedTube->isValid()); QCOMPARE(mRequestedTube->parameters(), params); // Now, close the tube and verify we're signaled about that QVERIFY(connect(server.data(), SIGNAL(tubeClosed(Tp::AccountPtr,Tp::OutgoingStreamTubeChannelPtr,QString,QString)), SLOT(onServerTubeClosed(Tp::AccountPtr,Tp::OutgoingStreamTubeChannelPtr,QString,QString)))); mRequestedTube->requestClose(); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mServerClosedTube, mRequestedTube); QCOMPARE(mServerCloseError, QString(TP_QT_ERROR_CANCELLED)); // == local close request } void TestStreamTubeHandlers::testFailedExport() { StreamTubeServerPtr server = StreamTubeServer::create(QStringList() << QLatin1String("ftp"), QStringList(), QLatin1String("vsftpd")); server->exportTcpSocket(QHostAddress::LocalHost, 22); QVERIFY(server->isRegistered()); QVERIFY(connect(server.data(), SIGNAL(tubeRequested(Tp::AccountPtr,Tp::OutgoingStreamTubeChannelPtr,QDateTime,Tp::ChannelRequestHints)), SLOT(onTubeRequested(Tp::AccountPtr,Tp::OutgoingStreamTubeChannelPtr,QDateTime,Tp::ChannelRequestHints)))); QVERIFY(connect(server.data(), SIGNAL(tubeClosed(Tp::AccountPtr,Tp::OutgoingStreamTubeChannelPtr,QString,QString)), SLOT(onServerTubeClosed(Tp::AccountPtr,Tp::OutgoingStreamTubeChannelPtr,QString,QString)))); QMap handlers = ourHandlers(); QVERIFY(!handlers.isEmpty()); ClientHandlerInterface *handler = handlers.value(server->clientName()); QVERIFY(handler != 0); // To trigger the Offer error codepath, give it a channel which only supports Unix sockets // although we're exporting a TCP one - which is always supported in real CMs QPair chan = createTubeChannel(true, HandleTypeContact, false, true); ChannelDetails details = { QDBusObjectPath(chan.first), chan.second }; // We should initially get tubeRequested just fine handler->HandleChannels( QDBusObjectPath(mAcc->objectPath()), QDBusObjectPath(mConn->objectPath()), ChannelDetailsList() << details, ObjectPathList(), QDateTime::currentDateTime().toTime_t(), QVariantMap()); QCOMPARE(mLoop->exec(), 0); QVERIFY(!mRequestedTube.isNull()); QCOMPARE(mRequestedTube->objectPath(), chan.first); // THEN we should get a tube close because the offer fails QCOMPARE(mLoop->exec(), 0); QCOMPARE(mServerClosedTube, mRequestedTube); QCOMPARE(mServerCloseError, QString(TP_QT_ERROR_NOT_IMPLEMENTED)); // == AF unsupported by "CM" } void TestStreamTubeHandlers::testServerConnMonitoring() { StreamTubeServerPtr server = StreamTubeServer::create(QStringList(), QStringList() << QLatin1String("multiftp"), QLatin1String("warezd"), true); server->exportTcpSocket(QHostAddress::LocalHost, 22); QVERIFY(server->isRegistered()); QVERIFY(server->monitorsConnections()); QMap handlers = ourHandlers(); QVERIFY(!handlers.isEmpty()); ClientHandlerInterface *handler = handlers.value(server->clientName()); QVERIFY(handler != 0); QPair chan = createTubeChannel(true, HandleTypeRoom, true); QVERIFY(connect(server.data(), SIGNAL(tubeRequested(Tp::AccountPtr,Tp::OutgoingStreamTubeChannelPtr,QDateTime,Tp::ChannelRequestHints)), SLOT(onTubeRequested(Tp::AccountPtr,Tp::OutgoingStreamTubeChannelPtr,QDateTime,Tp::ChannelRequestHints)))); QVERIFY(connect(server.data(), SIGNAL(tubeClosed(Tp::AccountPtr,Tp::OutgoingStreamTubeChannelPtr,QString,QString)), SLOT(onServerTubeClosed(Tp::AccountPtr,Tp::OutgoingStreamTubeChannelPtr,QString,QString)))); ChannelDetails details = { QDBusObjectPath(chan.first), chan.second }; handler->HandleChannels( QDBusObjectPath(mAcc->objectPath()), QDBusObjectPath(mConn->objectPath()), ChannelDetailsList() << details, ObjectPathList(), QDateTime::currentDateTime().toTime_t(), QVariantMap()); QCOMPARE(mLoop->exec(), 0); QVERIFY(!mRequestedTube.isNull()); QCOMPARE(mRequestedTube->objectPath(), chan.first); // There are no connections at this point QVERIFY(server->tcpConnections().isEmpty()); // Let's run until the tube has been offered while (mRequestedTube->isValid() && mRequestedTube->state() != TubeChannelStateRemotePending) { mLoop->processEvents(); } QVERIFY(mRequestedTube->isValid()); // Still no connections QVERIFY(server->tcpConnections().isEmpty()); // Now, some connections actually start popping up QVERIFY(connect(server.data(), SIGNAL(newTcpConnection(QHostAddress,quint16,Tp::AccountPtr,Tp::ContactPtr,Tp::OutgoingStreamTubeChannelPtr)), SLOT(onNewServerConnection(QHostAddress,quint16,Tp::AccountPtr,Tp::ContactPtr,Tp::OutgoingStreamTubeChannelPtr)))); QVERIFY(connect(server.data(), SIGNAL(tcpConnectionClosed(QHostAddress,quint16,Tp::AccountPtr,Tp::ContactPtr,QString,QString,Tp::OutgoingStreamTubeChannelPtr)), SLOT(onServerConnectionClosed(QHostAddress,quint16,Tp::AccountPtr,Tp::ContactPtr,QString,QString,Tp::OutgoingStreamTubeChannelPtr)))); // Simulate the first peer connecting (makes the tube Open up) GValue *connParam = tp_g_value_slice_new_take_boxed( TP_STRUCT_TYPE_SOCKET_ADDRESS_IPV4, dbus_g_type_specialized_construct(TP_STRUCT_TYPE_SOCKET_ADDRESS_IPV4)); QHostAddress expectedAddress = QHostAddress::LocalHost; quint16 expectedPort = 1; dbus_g_type_struct_set(connParam, 0, expectedAddress.toString().toLatin1().constData(), 1, expectedPort, G_MAXUINT); TpHandleRepoIface *contactRepo = tp_base_connection_get_handles( TP_BASE_CONNECTION(mConn->service()), TP_HANDLE_TYPE_CONTACT); TpHandle handle = tp_handle_ensure(contactRepo, "first", NULL, NULL); tp_tests_stream_tube_channel_peer_connected_no_stream(mChanServices.back(), connParam, handle); // We should get a newTcpConnection signal now and tcpConnections() should include this new conn QCOMPARE(mLoop->exec(), 0); QCOMPARE(mNewServerConnectionAddress, expectedAddress); QCOMPARE(mNewServerConnectionPort, expectedPort); QCOMPARE(mNewServerConnectionContact->handle()[0], handle); QCOMPARE(mNewServerConnectionContact->id(), QLatin1String("first")); QCOMPARE(mNewServerConnectionTube, mRequestedTube); QHash, StreamTubeServer::RemoteContact > conns = server->tcpConnections(); QCOMPARE(conns.size(), 1); QVERIFY(conns.contains(qMakePair(expectedAddress, expectedPort))); QCOMPARE(conns.value(qMakePair(expectedAddress, expectedPort)).account()->objectPath(), mAcc->objectPath()); QCOMPARE(conns.value(qMakePair(expectedAddress, expectedPort)).contact(), mNewServerConnectionContact); // Now, close the first connection tp_tests_stream_tube_channel_last_connection_disconnected(mChanServices.back(), TP_ERROR_STR_DISCONNECTED); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mClosedServerConnectionAddress, expectedAddress); QCOMPARE(mClosedServerConnectionPort, expectedPort); QCOMPARE(mClosedServerConnectionContact, mNewServerConnectionContact); QCOMPARE(mServerConnectionCloseError, QString(TP_QT_ERROR_DISCONNECTED)); QVERIFY(server->tcpConnections().isEmpty()); // Fire up two new connections handle = tp_handle_ensure(contactRepo, "second", NULL, NULL); expectedPort = 2; dbus_g_type_struct_set(connParam, 1, expectedPort, G_MAXUINT); tp_tests_stream_tube_channel_peer_connected_no_stream(mChanServices.back(), connParam, handle); handle = tp_handle_ensure(contactRepo, "third", NULL, NULL); expectedPort = 3; dbus_g_type_struct_set(connParam, 1, expectedPort, G_MAXUINT); tp_tests_stream_tube_channel_peer_connected_no_stream(mChanServices.back(), connParam, handle); // We should get two newTcpConnection signals now and tcpConnections() should include these // connections QCOMPARE(mLoop->exec(), 0); QCOMPARE(mNewServerConnectionAddress, expectedAddress); QCOMPARE(mNewServerConnectionPort, quint16(2)); QCOMPARE(mNewServerConnectionContact->id(), QLatin1String("second")); QCOMPARE(mNewServerConnectionTube, mRequestedTube); QCOMPARE(server->tcpConnections().size(), 1); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mNewServerConnectionAddress, expectedAddress); QCOMPARE(mNewServerConnectionPort, quint16(3)); QCOMPARE(mNewServerConnectionContact->id(), QLatin1String("third")); QCOMPARE(mNewServerConnectionTube, mRequestedTube); QCOMPARE(server->tcpConnections().size(), 2); // Close one of them, and check that we receive the signal for it tp_tests_stream_tube_channel_last_connection_disconnected(mChanServices.back(), TP_ERROR_STR_DISCONNECTED); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mClosedServerConnectionAddress, expectedAddress); QCOMPARE(mClosedServerConnectionPort, quint16(3)); QCOMPARE(mClosedServerConnectionContact, mNewServerConnectionContact); QCOMPARE(mServerConnectionCloseError, QString(TP_QT_ERROR_DISCONNECTED)); QCOMPARE(server->tcpConnections().size(), 1); // Now, close the tube and verify we're signaled about that QVERIFY(mServerClosedTube.isNull()); QCOMPARE(server->tubes().size(), 1); mClosedServerConnectionContact.reset(); mRequestedTube->requestClose(); while (mClosedServerConnectionContact.isNull() || mServerClosedTube.isNull()) { QVERIFY(mServerClosedTube.isNull()); // we should get the conn close first, only then tube close QCOMPARE(mLoop->exec(), 0); } QVERIFY(server->tubes().isEmpty()); QVERIFY(server->tcpConnections().isEmpty()); QCOMPARE(mClosedServerConnectionAddress, expectedAddress); QCOMPARE(mClosedServerConnectionPort, quint16(2)); QCOMPARE(mClosedServerConnectionContact->id(), QLatin1String("second")); QCOMPARE(mServerConnectionCloseError, TP_QT_ERROR_ORPHANED); // parent tube died QCOMPARE(mServerClosedTube, mRequestedTube); QCOMPARE(mServerCloseError, QString(TP_QT_ERROR_CANCELLED)); // == local close request } void TestStreamTubeHandlers::testSSTHErrorPaths() { // Create and look up a handler with an incorrectly set up channel factory ChannelFactoryPtr chanFactory = ChannelFactory::create(QDBusConnection::sessionBus()); chanFactory->setSubclassForIncomingStreamTubes(); StreamTubeServerPtr server = StreamTubeServer::create(QStringList() << QLatin1String("ftp"), QStringList(), QLatin1String("vsftpd"), false, AccountFactory::create(QDBusConnection::sessionBus()), ConnectionFactory::create(QDBusConnection::sessionBus()), chanFactory); server->exportTcpSocket(QHostAddress::LocalHost, 22); QVERIFY(server->isRegistered()); QMap handlers = ourHandlers(); QVERIFY(!handlers.isEmpty()); ClientHandlerInterface *handler = handlers.value(server->clientName()); QVERIFY(handler != 0); // Pass it a text channel, and with no satisfied requests QString textChanPath = mConn->objectPath() + QLatin1String("/TextChannel"); QByteArray chanPath(textChanPath.toAscii()); ExampleEchoChannel *textChanService = EXAMPLE_ECHO_CHANNEL(g_object_new( EXAMPLE_TYPE_ECHO_CHANNEL, "connection", mConn->service(), "object-path", chanPath.data(), "handle", TpHandle(1), NULL)); ChannelDetails details = { QDBusObjectPath(textChanPath), ChannelClassSpec::textChat().allProperties() }; handler->HandleChannels( QDBusObjectPath(mAcc->objectPath()), QDBusObjectPath(mConn->objectPath()), ChannelDetailsList() << details, ObjectPathList(), QDateTime::currentDateTime().toTime_t(), QVariantMap()); processDBusQueue(mConn->client().data()); // Now pass it an incoming stream tube chan, which will trigger the error paths for constructing // wrong subclasses for tubes QPair tubeChan = createTubeChannel(false, HandleTypeContact, false); details.channel = QDBusObjectPath(tubeChan.first); details.properties = tubeChan.second; handler->HandleChannels( QDBusObjectPath(mAcc->objectPath()), QDBusObjectPath(mConn->objectPath()), ChannelDetailsList() << details, ObjectPathList(), QDateTime::currentDateTime().toTime_t(), QVariantMap()); processDBusQueue(mConn->client().data()); // Now pass it an outgoing stream tube chan (which we didn't set an incorrect subclass for), but // which doesn't actually exist so introspection fails details.channel = QDBusObjectPath(QString::fromLatin1("/does/not/exist")); details.properties = ChannelClassSpec::outgoingStreamTube(QLatin1String("ftp")).allProperties(); handler->HandleChannels( QDBusObjectPath(mAcc->objectPath()), QDBusObjectPath(mConn->objectPath()), ChannelDetailsList() << details, ObjectPathList(), QDateTime::currentDateTime().toTime_t(), QVariantMap()); processDBusQueue(mConn->client().data()); // Now pass an actual outgoing tube chan and verify it's still signaled correctly after all // these incorrect invocations of the handler QVERIFY(connect(server.data(), SIGNAL(tubeRequested(Tp::AccountPtr,Tp::OutgoingStreamTubeChannelPtr,QDateTime,Tp::ChannelRequestHints)), SLOT(onTubeRequested(Tp::AccountPtr,Tp::OutgoingStreamTubeChannelPtr,QDateTime,Tp::ChannelRequestHints)))); tubeChan = createTubeChannel(true, HandleTypeContact, false); details.channel = QDBusObjectPath(tubeChan.first); details.properties = tubeChan.second; handler->HandleChannels( QDBusObjectPath(mAcc->objectPath()), QDBusObjectPath(mConn->objectPath()), ChannelDetailsList() << details, ObjectPathList(), QDateTime::currentDateTime().toTime_t(), QVariantMap()); processDBusQueue(mConn->client().data()); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mRequestedTube->objectPath(), tubeChan.first); // TODO: if/when the QDBus bug about not being able to wait for local loop replies even with a // main loop is fixed, wait for the HandleChannels invocations to return properly. For now just // run 100 pings to the service, during which the codepaths get run almost certainly. for (int i = 0; i < 100; i++) { processDBusQueue(mConn->client().data()); } g_object_unref(textChanService); } void TestStreamTubeHandlers::testClientBasicTcp() { StreamTubeClientPtr client = StreamTubeClient::create(QStringList() << QLatin1String("ftp"), QStringList(), QLatin1String("ncftp")); class FakeGenerator : public StreamTubeClient::TcpSourceAddressGenerator { public: FakeGenerator() : port(0) {} QPair nextSourceAddress(const AccountPtr &account, const IncomingStreamTubeChannelPtr &tube) { return qMakePair(QHostAddress(QHostAddress::LocalHost), ++port); } quint16 port; } gen; client->setToAcceptAsTcp(&gen); QVERIFY(client->isRegistered()); QCOMPARE(client->registrar()->registeredClients().size(), 1); QVERIFY(client->acceptsAsTcp()); QVERIFY(!client->acceptsAsUnix()); QCOMPARE(client->tcpGenerator(), static_cast(&gen)); QVERIFY(!client->monitorsConnections()); QMap handlers = ourHandlers(); QVERIFY(!handlers.isEmpty()); ClientHandlerInterface *handler = handlers.value(client->clientName()); QVERIFY(handler != 0); ChannelClassList filter; QVERIFY(waitForProperty(handler->requestPropertyHandlerChannelFilter(), &filter)); QCOMPARE(filter.size(), 1); QVERIFY(ChannelClassSpec(filter.first()) == ChannelClassSpec::incomingStreamTube(QLatin1String("ftp"))); QPair chan = createTubeChannel(false, HandleTypeContact, true); QVERIFY(connect(client.data(), SIGNAL(tubeOffered(Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr)), SLOT(onTubeOffered(Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr)))); QVERIFY(connect(client.data(), SIGNAL(tubeAcceptedAsTcp(QHostAddress,quint16,QHostAddress,quint16, Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr)), SLOT(onClientAcceptedAsTcp(QHostAddress,quint16,QHostAddress,quint16, Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr)))); // Invoke the handler, verifying that we're notified when that happens with the correct tube // details ChannelDetails details = { QDBusObjectPath(chan.first), chan.second }; handler->HandleChannels( QDBusObjectPath(mAcc->objectPath()), QDBusObjectPath(mConn->objectPath()), ChannelDetailsList() << details, ObjectPathList(), 0, // not an user action QVariantMap()); QCOMPARE(mLoop->exec(), 0); QVERIFY(!mOfferedTube.isNull()); QCOMPARE(mOfferedTube->objectPath(), chan.first); // Verify that the state recovery accessors return sensible values at this point QList clientTubes = client->tubes(); QCOMPARE(clientTubes.size(), 1); QCOMPARE(clientTubes.first().account()->objectPath(), mAcc->objectPath()); QCOMPARE(clientTubes.first().channel(), mOfferedTube); QVERIFY(client->connections().isEmpty()); // Let's run until we've accepted the tube QCOMPARE(mLoop->exec(), 0); QVERIFY(mOfferedTube->isValid()); QCOMPARE(mClientTcpAcceptAddr, QHostAddress(QHostAddress::LocalHost)); QVERIFY(mClientTcpAcceptPort != 0); QCOMPARE(mClientTcpAcceptSrcAddr, QHostAddress(QHostAddress::LocalHost)); QCOMPARE(mClientTcpAcceptSrcPort, gen.port); QCOMPARE(mClientTcpAcceptTube, mOfferedTube); // Now, close the tube and verify we're signaled about that QVERIFY(connect(client.data(), SIGNAL(tubeClosed(Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr,QString,QString)), SLOT(onClientTubeClosed(Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr,QString,QString)))); mOfferedTube->requestClose(); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mClientClosedTube, mOfferedTube); QCOMPARE(mClientCloseError, QString(TP_QT_ERROR_CANCELLED)); // == local close request } void TestStreamTubeHandlers::testClientTcpGeneratorIgnore() { StreamTubeClientPtr client = StreamTubeClient::create(QStringList() << QLatin1String("ftp"), QStringList(), QLatin1String("ncftp")); class FakeGenerator : public StreamTubeClient::TcpSourceAddressGenerator { public: QPair nextSourceAddress(const AccountPtr &account, const IncomingStreamTubeChannelPtr &tube) { return qMakePair(QHostAddress(QHostAddress::LocalHost), quint16(1111)); } } gen; client->setToAcceptAsTcp(&gen); QVERIFY(client->isRegistered()); QVERIFY(client->acceptsAsTcp()); QVERIFY(!client->acceptsAsUnix()); QCOMPARE(client->tcpGenerator(), static_cast(&gen)); QVERIFY(!client->monitorsConnections()); QMap handlers = ourHandlers(); QVERIFY(!handlers.isEmpty()); ClientHandlerInterface *handler = handlers.value(client->clientName()); QVERIFY(handler != 0); ChannelClassList filter; QVERIFY(waitForProperty(handler->requestPropertyHandlerChannelFilter(), &filter)); QCOMPARE(filter.size(), 1); QVERIFY(ChannelClassSpec(filter.first()) == ChannelClassSpec::incomingStreamTube(QLatin1String("ftp"))); QPair chan = createTubeChannel(false, HandleTypeContact, false); QVERIFY(connect(client.data(), SIGNAL(tubeOffered(Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr)), SLOT(onTubeOffered(Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr)))); QVERIFY(connect(client.data(), SIGNAL(tubeAcceptedAsTcp(QHostAddress,quint16,QHostAddress,quint16, Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr)), SLOT(onClientAcceptedAsTcp(QHostAddress,quint16,QHostAddress,quint16, Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr)))); // Invoke the handler, verifying that we're notified when that happens with the correct tube // details ChannelDetails details = { QDBusObjectPath(chan.first), chan.second }; handler->HandleChannels( QDBusObjectPath(mAcc->objectPath()), QDBusObjectPath(mConn->objectPath()), ChannelDetailsList() << details, ObjectPathList(), 0, // not an user action QVariantMap()); QCOMPARE(mLoop->exec(), 0); QVERIFY(!mOfferedTube.isNull()); QCOMPARE(mOfferedTube->objectPath(), chan.first); // Verify that the state recovery accessors return sensible values at this point QList clientTubes = client->tubes(); QCOMPARE(clientTubes.size(), 1); QCOMPARE(clientTubes.first().account()->objectPath(), mAcc->objectPath()); QCOMPARE(clientTubes.first().channel(), mOfferedTube); QVERIFY(client->connections().isEmpty()); // Let's run until we've accepted the tube QCOMPARE(mLoop->exec(), 0); QVERIFY(mOfferedTube->isValid()); QCOMPARE(mClientTcpAcceptAddr, QHostAddress(QHostAddress::LocalHost)); QVERIFY(mClientTcpAcceptPort != 0); QCOMPARE(mClientTcpAcceptSrcAddr, QHostAddress(QHostAddress::Any)); QCOMPARE(mClientTcpAcceptSrcPort, quint16(0)); QCOMPARE(mClientTcpAcceptTube, mOfferedTube); // Now, close the tube and verify we're signaled about that QVERIFY(connect(client.data(), SIGNAL(tubeClosed(Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr,QString,QString)), SLOT(onClientTubeClosed(Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr,QString,QString)))); mOfferedTube->requestClose(); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mClientClosedTube, mOfferedTube); QCOMPARE(mClientCloseError, QString(TP_QT_ERROR_CANCELLED)); // == local close request } void TestStreamTubeHandlers::testClientTcpUnsupported() { StreamTubeClientPtr client = StreamTubeClient::create(QStringList() << QLatin1String("ftp"), QStringList(), QLatin1String("ncftp")); client->setToAcceptAsTcp(); QVERIFY(client->isRegistered()); QVERIFY(client->acceptsAsTcp()); QVERIFY(!client->acceptsAsUnix()); QVERIFY(!client->monitorsConnections()); QMap handlers = ourHandlers(); QVERIFY(!handlers.isEmpty()); ClientHandlerInterface *handler = handlers.value(client->clientName()); QVERIFY(handler != 0); ChannelClassList filter; QVERIFY(waitForProperty(handler->requestPropertyHandlerChannelFilter(), &filter)); QCOMPARE(filter.size(), 1); QVERIFY(ChannelClassSpec(filter.first()) == ChannelClassSpec::incomingStreamTube(QLatin1String("ftp"))); QPair chan = createTubeChannel(false, HandleTypeContact, false, true); QVERIFY(connect(client.data(), SIGNAL(tubeOffered(Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr)), SLOT(onTubeOffered(Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr)))); QVERIFY(connect(client.data(), SIGNAL(tubeClosed(Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr,QString,QString)), SLOT(onClientTubeClosed(Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr,QString,QString)))); // Invoke the handler, verifying that we're notified when that happens with the correct tube // details ChannelDetails details = { QDBusObjectPath(chan.first), chan.second }; handler->HandleChannels( QDBusObjectPath(mAcc->objectPath()), QDBusObjectPath(mConn->objectPath()), ChannelDetailsList() << details, ObjectPathList(), 0, // not an user action QVariantMap()); QCOMPARE(mLoop->exec(), 0); QVERIFY(!mOfferedTube.isNull()); QCOMPARE(mOfferedTube->objectPath(), chan.first); // Now, run until Accept fails (because TCP is not supported by the fake service here) and // consequently the tube is closed QCOMPARE(mLoop->exec(), 0); QCOMPARE(mClientClosedTube, mOfferedTube); QCOMPARE(mClientCloseError, QString(TP_QT_ERROR_NOT_IMPLEMENTED)); // == AF unsupported } void TestStreamTubeHandlers::testClientBasicUnix() { StreamTubeClientPtr client = StreamTubeClient::create(QStringList() << QLatin1String("ftp"), QStringList(), QLatin1String("ncftp")); client->setToAcceptAsUnix(true); QVERIFY(client->isRegistered()); QCOMPARE(client->registrar()->registeredClients().size(), 1); QVERIFY(!client->acceptsAsTcp()); QVERIFY(client->acceptsAsUnix()); QCOMPARE(client->tcpGenerator(), static_cast(0)); QVERIFY(!client->monitorsConnections()); QMap handlers = ourHandlers(); QVERIFY(!handlers.isEmpty()); ClientHandlerInterface *handler = handlers.value(client->clientName()); QVERIFY(handler != 0); ChannelClassList filter; QVERIFY(waitForProperty(handler->requestPropertyHandlerChannelFilter(), &filter)); QCOMPARE(filter.size(), 1); QVERIFY(ChannelClassSpec(filter.first()) == ChannelClassSpec::incomingStreamTube(QLatin1String("ftp"))); QPair chan = createTubeChannel(false, HandleTypeContact, true); QVERIFY(connect(client.data(), SIGNAL(tubeOffered(Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr)), SLOT(onTubeOffered(Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr)))); QVERIFY(connect(client.data(), SIGNAL(tubeAcceptedAsUnix(QString,bool,uchar, Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr)), SLOT(onClientAcceptedAsUnix(QString,bool,uchar, Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr)))); // Invoke the handler, verifying that we're notified when that happens with the correct tube // details ChannelDetails details = { QDBusObjectPath(chan.first), chan.second }; handler->HandleChannels( QDBusObjectPath(mAcc->objectPath()), QDBusObjectPath(mConn->objectPath()), ChannelDetailsList() << details, ObjectPathList(), 0, // not an user action QVariantMap()); QCOMPARE(mLoop->exec(), 0); QVERIFY(!mOfferedTube.isNull()); QCOMPARE(mOfferedTube->objectPath(), chan.first); // Verify that the state recovery accessors return sensible values at this point QList clientTubes = client->tubes(); QCOMPARE(clientTubes.size(), 1); QCOMPARE(clientTubes.first().account()->objectPath(), mAcc->objectPath()); QCOMPARE(clientTubes.first().channel(), mOfferedTube); QVERIFY(client->connections().isEmpty()); // Let's run until we've accepted the tube QCOMPARE(mLoop->exec(), 0); QVERIFY(mOfferedTube->isValid()); QVERIFY(!mClientUnixAcceptAddr.isNull()); QVERIFY(mClientUnixReqsCreds); QCOMPARE(mClientUnixAcceptTube, mOfferedTube); QCOMPARE(mOfferedTube->addressType(), SocketAddressTypeUnix); // Now, close the tube and verify we're signaled about that QVERIFY(connect(client.data(), SIGNAL(tubeClosed(Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr,QString,QString)), SLOT(onClientTubeClosed(Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr,QString,QString)))); mOfferedTube->requestClose(); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mClientClosedTube, mOfferedTube); QCOMPARE(mClientCloseError, QString(TP_QT_ERROR_CANCELLED)); // == local close request } void TestStreamTubeHandlers::testClientUnixCredsIgnore() { StreamTubeClientPtr client = StreamTubeClient::create(QStringList() << QLatin1String("ftp"), QStringList(), QLatin1String("ncftp")); client->setToAcceptAsUnix(true); QVERIFY(client->isRegistered()); QVERIFY(!client->acceptsAsTcp()); QVERIFY(client->acceptsAsUnix()); QCOMPARE(client->tcpGenerator(), static_cast(0)); QVERIFY(!client->monitorsConnections()); QMap handlers = ourHandlers(); QVERIFY(!handlers.isEmpty()); ClientHandlerInterface *handler = handlers.value(client->clientName()); QVERIFY(handler != 0); ChannelClassList filter; QVERIFY(waitForProperty(handler->requestPropertyHandlerChannelFilter(), &filter)); QCOMPARE(filter.size(), 1); QVERIFY(ChannelClassSpec(filter.first()) == ChannelClassSpec::incomingStreamTube(QLatin1String("ftp"))); QPair chan = createTubeChannel(false, HandleTypeContact, false); QVERIFY(connect(client.data(), SIGNAL(tubeOffered(Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr)), SLOT(onTubeOffered(Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr)))); QVERIFY(connect(client.data(), SIGNAL(tubeAcceptedAsUnix(QString,bool,uchar, Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr)), SLOT(onClientAcceptedAsUnix(QString,bool,uchar, Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr)))); // Invoke the handler, verifying that we're notified when that happens with the correct tube // details ChannelDetails details = { QDBusObjectPath(chan.first), chan.second }; handler->HandleChannels( QDBusObjectPath(mAcc->objectPath()), QDBusObjectPath(mConn->objectPath()), ChannelDetailsList() << details, ObjectPathList(), 0, // not an user action QVariantMap()); QCOMPARE(mLoop->exec(), 0); QVERIFY(!mOfferedTube.isNull()); QCOMPARE(mOfferedTube->objectPath(), chan.first); // Verify that the state recovery accessors return sensible values at this point QList clientTubes = client->tubes(); QCOMPARE(clientTubes.size(), 1); QCOMPARE(clientTubes.first().account()->objectPath(), mAcc->objectPath()); QCOMPARE(clientTubes.first().channel(), mOfferedTube); QVERIFY(client->connections().isEmpty()); // Let's run until we've accepted the tube QCOMPARE(mLoop->exec(), 0); QVERIFY(mOfferedTube->isValid()); QVERIFY(!mClientUnixAcceptAddr.isNull()); QVERIFY(!mClientUnixReqsCreds); QCOMPARE(mClientUnixAcceptTube, mOfferedTube); QCOMPARE(mOfferedTube->addressType(), SocketAddressTypeUnix); // Now, close the tube and verify we're signaled about that QVERIFY(connect(client.data(), SIGNAL(tubeClosed(Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr,QString,QString)), SLOT(onClientTubeClosed(Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr,QString,QString)))); mOfferedTube->requestClose(); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mClientClosedTube, mOfferedTube); QCOMPARE(mClientCloseError, QString(TP_QT_ERROR_CANCELLED)); // == local close request } void TestStreamTubeHandlers::testClientConnMonitoring() { StreamTubeClientPtr client = StreamTubeClient::create(QStringList() << QLatin1String("ftp"), QStringList(), QLatin1String("ncftp"), true); client->setToAcceptAsTcp(); QVERIFY(client->isRegistered()); QVERIFY(client->acceptsAsTcp()); QVERIFY(client->monitorsConnections()); QMap handlers = ourHandlers(); QVERIFY(!handlers.isEmpty()); ClientHandlerInterface *handler = handlers.value(client->clientName()); QVERIFY(handler != 0); ChannelClassList filter; QVERIFY(waitForProperty(handler->requestPropertyHandlerChannelFilter(), &filter)); QCOMPARE(filter.size(), 1); QVERIFY(ChannelClassSpec(filter.first()) == ChannelClassSpec::incomingStreamTube(QLatin1String("ftp"))); QPair chan = createTubeChannel(false, HandleTypeContact, true); QVERIFY(connect(client.data(), SIGNAL(tubeOffered(Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr)), SLOT(onTubeOffered(Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr)))); QVERIFY(connect(client.data(), SIGNAL(tubeAcceptedAsTcp(QHostAddress,quint16,QHostAddress,quint16, Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr)), SLOT(onClientAcceptedAsTcp(QHostAddress,quint16,QHostAddress,quint16, Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr)))); ChannelDetails details = { QDBusObjectPath(chan.first), chan.second }; handler->HandleChannels( QDBusObjectPath(mAcc->objectPath()), QDBusObjectPath(mConn->objectPath()), ChannelDetailsList() << details, ObjectPathList(), QDateTime::currentDateTime().toTime_t(), QVariantMap()); QCOMPARE(mLoop->exec(), 0); QVERIFY(!mOfferedTube.isNull()); QCOMPARE(mOfferedTube->objectPath(), chan.first); // There are no connections at this point QVERIFY(client->connections().isEmpty()); // Let's run until we've accepted the tube QCOMPARE(mLoop->exec(), 0); QVERIFY(mOfferedTube->isValid()); QCOMPARE(mClientTcpAcceptAddr, QHostAddress(QHostAddress::LocalHost)); QVERIFY(mClientTcpAcceptPort != 0); QCOMPARE(mClientTcpAcceptSrcAddr, QHostAddress(QHostAddress::Any)); QCOMPARE(mClientTcpAcceptSrcPort, quint16(0)); QCOMPARE(mClientTcpAcceptTube, mOfferedTube); // Still no connections QVERIFY(client->connections().isEmpty()); // Now, some connections actually start popping up QVERIFY(connect(client.data(), SIGNAL(newConnection(Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr,uint)), SLOT(onNewClientConnection(Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr,uint)))); QVERIFY(connect(client.data(), SIGNAL(connectionClosed(Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr,uint,QString,QString)), SLOT(onClientConnectionClosed(Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr,uint,QString,QString)))); QTcpSocket first; first.connectToHost(mClientTcpAcceptAddr, mClientTcpAcceptPort); first.waitForConnected(); QVERIFY(first.isValid()); QCOMPARE(first.state(), QAbstractSocket::ConnectedState); // We should get a newConnection signal now and connections() should include this new conn QCOMPARE(mLoop->exec(), 0); QCOMPARE(mNewClientConnectionTube, mOfferedTube); QHash > conns = client->connections(); QCOMPARE(conns.size(), 1); QCOMPARE(conns.values().first().size(), 1); QVERIFY(conns.values().first().contains(mNewClientConnectionId)); uint firstId = mNewClientConnectionId; // Now, close the first connection tp_tests_stream_tube_channel_last_connection_disconnected(mChanServices.back(), TP_ERROR_STR_DISCONNECTED); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mClosedClientConnectionId, firstId); QCOMPARE(mClientConnectionCloseError, QString(TP_QT_ERROR_DISCONNECTED)); QVERIFY(client->connections().isEmpty()); // Fire up two new connections QTcpSocket second; second.connectToHost(mClientTcpAcceptAddr, mClientTcpAcceptPort); second.waitForConnected(); QVERIFY(second.isValid()); QCOMPARE(second.state(), QAbstractSocket::ConnectedState); QTcpSocket third; third.connectToHost(mClientTcpAcceptAddr, mClientTcpAcceptPort); third.waitForConnected(); QVERIFY(third.isValid()); QCOMPARE(third.state(), QAbstractSocket::ConnectedState); // We should get two newConnection signals now and connections() should include these // connections QCOMPARE(mLoop->exec(), 0); QCOMPARE(mNewClientConnectionTube, mOfferedTube); QCOMPARE(client->connections().size(), 1); uint secondId = mNewClientConnectionId; QCOMPARE(mLoop->exec(), 0); QCOMPARE(mNewClientConnectionTube, mOfferedTube); QCOMPARE(client->connections().size(), 1); uint thirdId = mNewClientConnectionId; conns = client->connections(); QCOMPARE(conns.size(), 1); QCOMPARE(conns.values().first().size(), 2); QVERIFY(conns.values().first().contains(secondId)); QVERIFY(conns.values().first().contains(thirdId)); // Close one of them, and check that we receive the signal for it tp_tests_stream_tube_channel_last_connection_disconnected(mChanServices.back(), TP_ERROR_STR_DISCONNECTED); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mClosedClientConnectionId, thirdId); QCOMPARE(mClientConnectionCloseError, QString(TP_QT_ERROR_DISCONNECTED)); QCOMPARE(mClosedServerConnectionContact, mNewServerConnectionContact); conns = client->connections(); QCOMPARE(conns.size(), 1); QVERIFY(!conns.values().first().contains(thirdId)); QVERIFY(conns.values().first().contains(secondId)); QCOMPARE(conns.values().first().size(), 1); // Now, close the tube and verify we're signaled about that QVERIFY(connect(client.data(), SIGNAL(tubeClosed(Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr,QString,QString)), SLOT(onClientTubeClosed(Tp::AccountPtr,Tp::IncomingStreamTubeChannelPtr,QString,QString)))); mClosedClientConnectionId = 0xdeadbeefU; QVERIFY(mClientClosedTube.isNull()); QCOMPARE(client->tubes().size(), 1); mOfferedTube->requestClose(); while (mClosedClientConnectionId == 0xdeadbeefU || mClientClosedTube.isNull()) { QVERIFY(mClientClosedTube.isNull()); // we should get first conn close, then tube close QCOMPARE(mLoop->exec(), 0); } QVERIFY(client->tubes().isEmpty()); QVERIFY(client->connections().isEmpty()); QCOMPARE(mClosedClientConnectionId, secondId); QCOMPARE(mClientConnectionCloseError, TP_QT_ERROR_ORPHANED); // parent tube died QCOMPARE(mClientClosedTube, mOfferedTube); QCOMPARE(mClientCloseError, QString(TP_QT_ERROR_CANCELLED)); // == local close request } void TestStreamTubeHandlers::cleanup() { cleanupImpl(); mRequestHints = ChannelRequestHints(); if (mRequestedTube && mRequestedTube->isValid()) { qDebug() << "waiting for the reqd tube to become invalidated"; QVERIFY(connect(mRequestedTube.data(), SIGNAL(invalidated(Tp::DBusProxy*,QString,QString)), mLoop, SLOT(quit()))); mRequestedTube->requestClose(); QCOMPARE(mLoop->exec(), 0); } mRequestedTube.reset(); mServerClosedTube.reset(); mNewServerConnectionContact.reset(); mClosedServerConnectionContact.reset(); mNewServerConnectionTube.reset(); mServerConnectionCloseTube.reset(); if (mOfferedTube && mOfferedTube->isValid()) { qDebug() << "waiting for the ofrd tube to become invalidated"; QVERIFY(connect(mOfferedTube.data(), SIGNAL(invalidated(Tp::DBusProxy*,QString,QString)), mLoop, SLOT(quit()))); mOfferedTube->requestClose(); QCOMPARE(mLoop->exec(), 0); } mOfferedTube.reset(); mClientClosedTube.reset(); mClientTcpAcceptTube.reset(); mClientUnixAcceptTube.reset(); mNewClientConnectionTube.reset(); mClosedClientConnectionTube.reset(); while (!mChanServices.empty()) { g_object_unref(mChanServices.back()); mChanServices.pop_back(); } mLoop->processEvents(); } void TestStreamTubeHandlers::cleanupTestCase() { mAM.reset(); mAcc.reset(); QCOMPARE(mConn->disconnect(), true); delete mConn; cleanupTestCaseImpl(); } QTEST_MAIN(TestStreamTubeHandlers) #include "_gen/stream-tube-handlers.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/dbus-tube-chan.cpp0000644000175200001440000007030612000056607024026 0ustar00collabora-develusers00000000000000#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace Tp; namespace { struct TestContext { bool withContact; TpSocketAddressType addressType; TpSocketAccessControl accessControl; }; TestContext contexts[] = { { FALSE, TP_SOCKET_ADDRESS_TYPE_UNIX, TP_SOCKET_ACCESS_CONTROL_LOCALHOST }, { FALSE, TP_SOCKET_ADDRESS_TYPE_UNIX, TP_SOCKET_ACCESS_CONTROL_CREDENTIALS }, { TRUE, TP_SOCKET_ADDRESS_TYPE_UNIX, TP_SOCKET_ACCESS_CONTROL_LOCALHOST }, { TRUE, TP_SOCKET_ADDRESS_TYPE_UNIX, TP_SOCKET_ACCESS_CONTROL_CREDENTIALS }, { FALSE, (TpSocketAddressType) NUM_TP_SOCKET_ADDRESS_TYPES, (TpSocketAccessControl) NUM_TP_SOCKET_ACCESS_CONTROLS } }; void destroySocketControlList(gpointer data) { g_array_free((GArray *) data, TRUE); } } class TestDBusTubeChan : public Test { Q_OBJECT public: TestDBusTubeChan(QObject *parent = 0) : Test(parent), mConn(0), mChanService(0), mBusNameWasAdded(false), mBusNameWasRemoved(false), mOfferFinished(false), mAllowsOtherUsers(false) { } protected Q_SLOTS: void onBusNameAdded(const QString &busName, const Tp::ContactPtr &contact); void onBusNameRemoved(const QString &busName, const Tp::ContactPtr &contact); void onOfferFinished(Tp::PendingOperation *op); void expectPendingTubeConnectionFinished(Tp::PendingOperation *op); private Q_SLOTS: void initTestCase(); void init(); void testCreation(); void testAcceptSuccess(); void testAcceptFail(); void testOfferSuccess(); void testOutgoingBusNameMonitoring(); void testExtractBusNameMonitoring(); void testAcceptCornerCases(); void testOfferCornerCases(); void cleanup(); void cleanupTestCase(); private: void createTubeChannel(bool requested, TpSocketAddressType addressType, TpSocketAccessControl accessControl, bool withContact); TestConnHelper *mConn; TpTestsDBusTubeChannel *mChanService; DBusTubeChannelPtr mChan; uint mCurrentContext; QHash mCurrentContactsForBusNames; bool mBusNameWasAdded; bool mBusNameWasRemoved; bool mOfferFinished; bool mAllowsOtherUsers; uint mExpectedHandle; QString mExpectedBusName; }; void TestDBusTubeChan::onBusNameAdded(const QString &busName, const Tp::ContactPtr &contact) { mCurrentContactsForBusNames.insert(busName, contact); mBusNameWasAdded = true; qDebug() << "Adding bus name" << busName << "for" << contact->id(); QCOMPARE(busName, mExpectedBusName); QCOMPARE(contact->handle().first(), mExpectedHandle); QCOMPARE(mChan->contactsForBusNames().size(), mCurrentContactsForBusNames.size()); mLoop->quit(); } void TestDBusTubeChan::onBusNameRemoved(const QString &busName, const Tp::ContactPtr &contact) { QVERIFY(mCurrentContactsForBusNames.contains(busName)); mCurrentContactsForBusNames.remove(busName); mBusNameWasRemoved = true; qDebug() << "Removing bus name" << busName << "for" << contact->id(); QCOMPARE(contact->handle().first(), mExpectedHandle); QCOMPARE(mChan->contactsForBusNames().size(), mCurrentContactsForBusNames.size()); mLoop->quit(); } void TestDBusTubeChan::onOfferFinished(Tp::PendingOperation *op) { TEST_VERIFY_OP(op); mOfferFinished = true; mLoop->exit(0); } void TestDBusTubeChan::expectPendingTubeConnectionFinished(PendingOperation *op) { TEST_VERIFY_OP(op); PendingDBusTubeConnection *pdt = qobject_cast(op); mAllowsOtherUsers = pdt->allowsOtherUsers(); // Check the addresses match QCOMPARE(mChan->address(), pdt->address()); mLoop->exit(0); } void TestDBusTubeChan::createTubeChannel(bool requested, TpSocketAddressType addressType, TpSocketAccessControl accessControl, bool withContact) { mChan.reset(); mLoop->processEvents(); tp_clear_object(&mChanService); /* Create service-side tube channel object */ QString chanPath = QString(QLatin1String("%1/Channel")).arg(mConn->objectPath()); TpHandleRepoIface *contactRepo = tp_base_connection_get_handles( TP_BASE_CONNECTION(mConn->service()), TP_HANDLE_TYPE_CONTACT); TpHandleRepoIface *roomRepo = tp_base_connection_get_handles( TP_BASE_CONNECTION(mConn->service()), TP_HANDLE_TYPE_ROOM); TpHandle handle; GType type; if (withContact) { handle = tp_handle_ensure(contactRepo, "bob", NULL, NULL); type = TP_TESTS_TYPE_CONTACT_DBUS_TUBE_CHANNEL; } else { handle = tp_handle_ensure(roomRepo, "#test", NULL, NULL); type = TP_TESTS_TYPE_ROOM_DBUS_TUBE_CHANNEL; } TpHandle alfHandle = tp_handle_ensure(contactRepo, "alf", NULL, NULL); GArray *acontrols; TpSocketAccessControl a; if (accessControl != TP_SOCKET_ACCESS_CONTROL_LOCALHOST) { acontrols = g_array_sized_new (FALSE, FALSE, sizeof (guint), 2); a = TP_SOCKET_ACCESS_CONTROL_LOCALHOST; acontrols = g_array_append_val (acontrols, a); a = TP_SOCKET_ACCESS_CONTROL_CREDENTIALS; acontrols = g_array_append_val (acontrols, a); } else { acontrols = g_array_sized_new (FALSE, FALSE, sizeof (guint), 1); a = TP_SOCKET_ACCESS_CONTROL_LOCALHOST; acontrols = g_array_append_val (acontrols, a); } mChanService = TP_TESTS_DBUS_TUBE_CHANNEL(g_object_new( type, "connection", mConn->service(), "handle", handle, "requested", requested, "object-path", chanPath.toLatin1().constData(), "supported-access-controls", acontrols, "initiator-handle", alfHandle, NULL)); /* Create client-side tube channel object */ GHashTable *props; g_object_get(mChanService, "channel-properties", &props, NULL); if (requested) { mChan = OutgoingDBusTubeChannel::create(mConn->client(), chanPath, QVariantMap()); } else { mChan = IncomingDBusTubeChannel::create(mConn->client(), chanPath, QVariantMap()); } g_hash_table_unref(props); g_array_unref(acontrols); } void TestDBusTubeChan::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("dbus-tube-chan"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); mConn = new TestConnHelper(this, TP_TESTS_TYPE_SIMPLE_CONNECTION, "account", "me@example.com", "protocol", "example", NULL); QCOMPARE(mConn->connect(), true); } void TestDBusTubeChan::init() { initImpl(); mCurrentContext = -1; mBusNameWasAdded = false; mBusNameWasRemoved = false; mOfferFinished = false; mAllowsOtherUsers = false; mExpectedHandle = -1; mExpectedBusName = QString(); } void TestDBusTubeChan::testCreation() { /* Outgoing tube */ createTubeChannel(true, TP_SOCKET_ADDRESS_TYPE_UNIX, TP_SOCKET_ACCESS_CONTROL_LOCALHOST, true); QVERIFY(connect(mChan->becomeReady(OutgoingDBusTubeChannel::FeatureCore), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->isReady(OutgoingDBusTubeChannel::FeatureCore), true); QCOMPARE(mChan->isReady(DBusTubeChannel::FeatureBusNameMonitoring), false); QCOMPARE(mChan->state(), TubeChannelStateNotOffered); QCOMPARE(mChan->parameters().isEmpty(), true); QCOMPARE(mChan->serviceName(), QLatin1String("com.test.Test")); QCOMPARE(mChan->supportsRestrictingToCurrentUser(), false); QCOMPARE(mChan->contactsForBusNames().isEmpty(), true); QCOMPARE(mChan->address(), QString()); /* incoming tube */ createTubeChannel(false, TP_SOCKET_ADDRESS_TYPE_UNIX, TP_SOCKET_ACCESS_CONTROL_LOCALHOST, false); QVERIFY(connect(mChan->becomeReady(IncomingDBusTubeChannel::FeatureCore), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->isReady(IncomingDBusTubeChannel::FeatureCore), true); QCOMPARE(mChan->isReady(DBusTubeChannel::FeatureBusNameMonitoring), false); QCOMPARE(mChan->state(), TubeChannelStateLocalPending); QCOMPARE(mChan->parameters().isEmpty(), false); QCOMPARE(mChan->parameters().size(), 1); QCOMPARE(mChan->parameters().contains(QLatin1String("badger")), true); QCOMPARE(mChan->parameters().value(QLatin1String("badger")), QVariant(42)); QCOMPARE(mChan->serviceName(), QLatin1String("com.test.Test")); QCOMPARE(mChan->supportsRestrictingToCurrentUser(), false); QCOMPARE(mChan->contactsForBusNames().isEmpty(), true); QCOMPARE(mChan->address(), QString()); } void TestDBusTubeChan::testAcceptSuccess() { /* incoming tube */ for (int i = 0; contexts[i].addressType != NUM_TP_SOCKET_ADDRESS_TYPES; i++) { /* as we run several tests here, let's init/cleanup properly */ init(); qDebug() << "Testing context:" << i; mCurrentContext = i; createTubeChannel(false, contexts[i].addressType, contexts[i].accessControl, contexts[i].withContact); QVERIFY(connect(mChan->becomeReady(IncomingDBusTubeChannel::FeatureCore | DBusTubeChannel::FeatureBusNameMonitoring), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->isReady(IncomingDBusTubeChannel::FeatureCore), true); QCOMPARE(mChan->isReady(DBusTubeChannel::FeatureBusNameMonitoring), true); QCOMPARE(mChan->state(), TubeChannelStateLocalPending); QVERIFY(connect(mChan.data(), SIGNAL(busNameAdded(QString,Tp::ContactPtr)), SLOT(onBusNameAdded(QString,Tp::ContactPtr)))); QVERIFY(connect(mChan.data(), SIGNAL(busNameRemoved(QString,Tp::ContactPtr)), SLOT(onBusNameRemoved(QString,Tp::ContactPtr)))); bool allowsOtherUsers = ((contexts[i].accessControl == TP_SOCKET_ACCESS_CONTROL_LOCALHOST) ? true : false); IncomingDBusTubeChannelPtr chan = IncomingDBusTubeChannelPtr::qObjectCast(mChan); if (contexts[i].addressType == TP_SOCKET_ADDRESS_TYPE_UNIX) { QVERIFY(connect(chan->acceptTube(allowsOtherUsers), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectPendingTubeConnectionFinished(Tp::PendingOperation *)))); } else { // Should never happen QVERIFY(false); } QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->state(), TubeChannelStateOpen); QCOMPARE(mAllowsOtherUsers, allowsOtherUsers); if (contexts[i].addressType == TP_SOCKET_ADDRESS_TYPE_UNIX) { qDebug() << "Connecting to bus" << mChan->address(); QDBusConnection conn = QDBusConnection::connectToPeer(mChan->address(), mChan->serviceName()); QCOMPARE(conn.isConnected(), true); qDebug() << "Connected to host"; } else { QVERIFY(false); } /* as we run several tests here, let's init/cleanup properly */ cleanup(); } } void TestDBusTubeChan::testAcceptFail() { /* incoming tube */ createTubeChannel(false, TP_SOCKET_ADDRESS_TYPE_UNIX, TP_SOCKET_ACCESS_CONTROL_LOCALHOST, false); QVERIFY(connect(mChan->becomeReady(IncomingDBusTubeChannel::FeatureCore | DBusTubeChannel::FeatureBusNameMonitoring), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->isReady(IncomingDBusTubeChannel::FeatureCore), true); QCOMPARE(mChan->isReady(DBusTubeChannel::FeatureBusNameMonitoring), true); QCOMPARE(mChan->state(), TubeChannelStateLocalPending); /* when accept is called the channel will be closed service side */ tp_tests_dbus_tube_channel_set_close_on_accept (mChanService, TRUE); /* calling accept should fail */ IncomingDBusTubeChannelPtr chan = IncomingDBusTubeChannelPtr::qObjectCast(mChan); QVERIFY(connect(chan->acceptTube(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectFailure(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->isValid(), false); /* trying to accept again should fail immediately */ QVERIFY(connect(chan->acceptTube(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectFailure(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); } void TestDBusTubeChan::testOfferSuccess() { /* incoming tube */ for (int i = 0; contexts[i].addressType != NUM_TP_SOCKET_ADDRESS_TYPES; i++) { /* as we run several tests here, let's init/cleanup properly */ init(); qDebug() << "Testing context:" << i; mCurrentContext = i; createTubeChannel(true, contexts[i].addressType, contexts[i].accessControl, contexts[i].withContact); QVERIFY(connect(mChan->becomeReady(OutgoingDBusTubeChannel::FeatureCore | DBusTubeChannel::FeatureBusNameMonitoring), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->isReady(OutgoingDBusTubeChannel::FeatureCore), true); QCOMPARE(mChan->isReady(DBusTubeChannel::FeatureBusNameMonitoring), true); QCOMPARE(mChan->state(), TubeChannelStateNotOffered); QCOMPARE(mChan->parameters().isEmpty(), true); mBusNameWasAdded = false; QVERIFY(connect(mChan.data(), SIGNAL(busNameAdded(QString,Tp::ContactPtr)), SLOT(onBusNameAdded(QString,Tp::ContactPtr)))); QVERIFY(connect(mChan.data(), SIGNAL(busNameRemoved(QString,Tp::ContactPtr)), SLOT(onBusNameRemoved(QString,Tp::ContactPtr)))); bool allowsOtherUsers = ((contexts[i].accessControl == TP_SOCKET_ACCESS_CONTROL_LOCALHOST) ? true : false); mExpectedHandle = -1; mExpectedBusName = QString(); mOfferFinished = false; OutgoingDBusTubeChannelPtr chan = OutgoingDBusTubeChannelPtr::qObjectCast(mChan); QVariantMap offerParameters; offerParameters.insert(QLatin1String("mushroom"), 44); qDebug() << "About to offer tube"; if (contexts[i].addressType == TP_SOCKET_ADDRESS_TYPE_UNIX) { QVERIFY(connect(chan->offerTube(offerParameters, allowsOtherUsers), SIGNAL(finished(Tp::PendingOperation *)), SLOT(onOfferFinished(Tp::PendingOperation *)))); } else { QVERIFY(false); } qDebug() << "Tube offered"; while (mChan->state() != TubeChannelStateRemotePending) { qDebug() << mLoop; mLoop->processEvents(); } // A client now connects to the tube if (contexts[i].addressType == TP_SOCKET_ADDRESS_TYPE_UNIX) { QDBusConnection conn = QDBusConnection::connectToPeer(mChan->address(), mChan->serviceName()); QCOMPARE(conn.isConnected(), true); } else { QVERIFY(false); } qDebug() << "Connected"; TpHandleRepoIface *contactRepo = tp_base_connection_get_handles( TP_BASE_CONNECTION(mConn->service()), TP_HANDLE_TYPE_CONTACT); TpHandle bobHandle = tp_handle_ensure(contactRepo, "bob", NULL, NULL); gchar *bobService = g_strdup("org.bob.test"); tp_tests_dbus_tube_channel_peer_connected_no_stream(mChanService, bobService, bobHandle); mExpectedHandle = bobHandle; mExpectedBusName = QLatin1String("org.bob.test"); QCOMPARE(mChan->state(), TubeChannelStateRemotePending); qDebug() << "Waiting for offer finished"; while (!mOfferFinished) { QCOMPARE(mLoop->exec(), 0); } qDebug() << "Offer finished"; QCOMPARE(mChan->state(), TubeChannelStateOpen); QCOMPARE(mChan->parameters().isEmpty(), false); QCOMPARE(mChan->parameters().size(), 1); QCOMPARE(mChan->parameters().contains(QLatin1String("mushroom")), true); QCOMPARE(mChan->parameters().value(QLatin1String("mushroom")), QVariant(44)); // This section makes sense just in a room environment if (!contexts[i].withContact) { if (!mBusNameWasAdded) { QCOMPARE(mLoop->exec(), 0); } QCOMPARE(mBusNameWasAdded, true); qDebug() << "Connected to host"; mBusNameWasRemoved = false; tp_tests_dbus_tube_channel_peer_disconnected(mChanService, mExpectedHandle); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mBusNameWasRemoved, true); /* let the internal DBusTubeChannel::onBusNamesChanged slot be called before * checking the data for that connection */ mLoop->processEvents(); QCOMPARE(chan->contactsForBusNames().isEmpty(), true); } /* as we run several tests here, let's init/cleanup properly */ cleanup(); g_free (bobService); } } void TestDBusTubeChan::testOutgoingBusNameMonitoring() { mCurrentContext = 0; // should point to room, localhost createTubeChannel(true, TP_SOCKET_ADDRESS_TYPE_UNIX, TP_SOCKET_ACCESS_CONTROL_LOCALHOST, false); QVERIFY(connect(mChan->becomeReady(OutgoingDBusTubeChannel::FeatureCore | DBusTubeChannel::FeatureBusNameMonitoring), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mChan.data(), SIGNAL(busNameAdded(QString,Tp::ContactPtr)), SLOT(onBusNameAdded(QString,Tp::ContactPtr)))); QVERIFY(connect(mChan.data(), SIGNAL(busNameRemoved(QString,Tp::ContactPtr)), SLOT(onBusNameRemoved(QString,Tp::ContactPtr)))); OutgoingDBusTubeChannelPtr chan = OutgoingDBusTubeChannelPtr::qObjectCast(mChan); QVERIFY(connect(chan->offerTube(QVariantMap()), // DISCARD SIGNAL(finished(Tp::PendingOperation *)), SLOT(onOfferFinished(Tp::PendingOperation *)))); while (mChan->state() != TubeChannelStateRemotePending) { mLoop->processEvents(); } // Simulate a peer connection from someone we don't have a prebuilt contact for yet, and // immediately drop it TpHandleRepoIface *contactRepo = tp_base_connection_get_handles( TP_BASE_CONNECTION(mConn->service()), TP_HANDLE_TYPE_CONTACT); TpHandle handle = tp_handle_ensure(contactRepo, "YouHaventSeenMeYet", NULL, NULL); gchar *service = g_strdup("org.not.seen.yet"); mExpectedHandle = handle; mExpectedBusName = QLatin1String("org.not.seen.yet"); tp_tests_dbus_tube_channel_peer_connected_no_stream(mChanService, service, handle); tp_tests_dbus_tube_channel_peer_disconnected(mChanService, handle); // Test that we get the events in the right sequence while (!mOfferFinished || !mBusNameWasAdded) { QVERIFY(!mBusNameWasRemoved || !mOfferFinished); QCOMPARE(mLoop->exec(), 0); } QCOMPARE(mChan->contactsForBusNames().size(), 1); // The busNameRemoved emission should finally exit the main loop QCOMPARE(mLoop->exec(), 0); QVERIFY(mBusNameWasRemoved); QCOMPARE(mChan->contactsForBusNames().size(), 0); g_free (service); } void TestDBusTubeChan::testExtractBusNameMonitoring() { mCurrentContext = 0; // should point to room, localhost createTubeChannel(true, TP_SOCKET_ADDRESS_TYPE_UNIX, TP_SOCKET_ACCESS_CONTROL_LOCALHOST, false); QVERIFY(connect(mChan->becomeReady(OutgoingDBusTubeChannel::FeatureCore), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mChan.data(), SIGNAL(busNameAdded(QString,Tp::ContactPtr)), SLOT(onBusNameAdded(QString,Tp::ContactPtr)))); QVERIFY(connect(mChan.data(), SIGNAL(busNameRemoved(QString,Tp::ContactPtr)), SLOT(onBusNameRemoved(QString,Tp::ContactPtr)))); OutgoingDBusTubeChannelPtr chan = OutgoingDBusTubeChannelPtr::qObjectCast(mChan); QVERIFY(connect(chan->offerTube(QVariantMap()), // DISCARD SIGNAL(finished(Tp::PendingOperation *)), SLOT(onOfferFinished(Tp::PendingOperation *)))); while (mChan->state() != TubeChannelStateRemotePending) { mLoop->processEvents(); } // Simulate a peer connection from someone TpHandleRepoIface *contactRepo = tp_base_connection_get_handles( TP_BASE_CONNECTION(mConn->service()), TP_HANDLE_TYPE_CONTACT); TpHandle handle = tp_handle_ensure(contactRepo, "YouHaventSeenMeYet", NULL, NULL); gchar *service = g_strdup("org.not.seen.yet"); mExpectedHandle = handle; mExpectedBusName = QLatin1String("org.not.seen.yet"); tp_tests_dbus_tube_channel_peer_connected_no_stream(mChanService, service, handle); while (mChan->state() != TubeChannelStateOpen) { mLoop->processEvents(); } // Test that we didn't get a remote connection while (!mOfferFinished) { QCOMPARE(mLoop->exec(), 0); } QVERIFY(!mBusNameWasRemoved); QVERIFY(!mBusNameWasAdded); // This should also trigger a warning QCOMPARE(mChan->contactsForBusNames().size(), 0); // Now, enable the feature, and let it extract participants QVERIFY(connect(mChan->becomeReady(OutgoingDBusTubeChannel::FeatureBusNameMonitoring), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); // This should now be fine QCOMPARE(mChan->contactsForBusNames().size(), 1); // The name should match QCOMPARE(mChan->contactsForBusNames().keys().first(), QLatin1String("org.not.seen.yet")); // And the signal shouldn't have been called QVERIFY(!mBusNameWasRemoved); QVERIFY(!mBusNameWasAdded); g_free (service); } void TestDBusTubeChan::testAcceptCornerCases() { /* incoming tube */ createTubeChannel(false, TP_SOCKET_ADDRESS_TYPE_UNIX, TP_SOCKET_ACCESS_CONTROL_LOCALHOST, false); // These should not be ready yet QCOMPARE(mChan->serviceName(), QString()); QCOMPARE(mChan->supportsRestrictingToCurrentUser(), false); QCOMPARE(mChan->state(), TubeChannelStateNotOffered); QCOMPARE(mChan->parameters(), QVariantMap()); IncomingDBusTubeChannelPtr chan = IncomingDBusTubeChannelPtr::qObjectCast(mChan); // Fail as features are not ready QVERIFY(connect(chan->acceptTube(), // DISCARD SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); // Become ready QVERIFY(connect(mChan->becomeReady(IncomingDBusTubeChannel::FeatureCore), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->isReady(IncomingDBusTubeChannel::FeatureCore), true); QCOMPARE(mChan->isReady(DBusTubeChannel::FeatureBusNameMonitoring), false); QCOMPARE(mChan->state(), TubeChannelStateLocalPending); // Accept using unsupported method PendingDBusTubeConnection *connection = chan->acceptTube(); // As credentials are not supported, our connection should report we've fallen back. QVERIFY(connection->allowsOtherUsers()); QVERIFY(connect(connection, SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->state(), TubeChannelStateOpen); /* try to re-accept the tube */ QVERIFY(connect(chan->acceptTube(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectFailure(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->state(), TubeChannelStateOpen); } void TestDBusTubeChan::testOfferCornerCases() { mCurrentContext = 0; // should point to room, localhost createTubeChannel(true, TP_SOCKET_ADDRESS_TYPE_UNIX, TP_SOCKET_ACCESS_CONTROL_LOCALHOST, false); // These should not be ready yet QCOMPARE(mChan->serviceName(), QString()); QCOMPARE(mChan->supportsRestrictingToCurrentUser(), false); QCOMPARE(mChan->state(), TubeChannelStateNotOffered); QCOMPARE(mChan->parameters(), QVariantMap()); OutgoingDBusTubeChannelPtr chan = OutgoingDBusTubeChannelPtr::qObjectCast(mChan); // Fail as features are not ready QVERIFY(connect(chan->offerTube(QVariantMap()), // DISCARD SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); // Make them ready QVERIFY(connect(mChan->becomeReady(OutgoingDBusTubeChannel::FeatureCore), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChan->isReady(IncomingDBusTubeChannel::FeatureCore), true); QCOMPARE(mChan->isReady(DBusTubeChannel::FeatureBusNameMonitoring), false); QCOMPARE(mChan->state(), TubeChannelStateNotOffered); // Offer using unsupported method PendingDBusTubeConnection *connection = chan->offerTube(QVariantMap()); // As credentials are not supported, our connection should report we've fallen back. QVERIFY(connection->allowsOtherUsers()); QVERIFY(connect(connection, // DISCARD SIGNAL(finished(Tp::PendingOperation *)), SLOT(onOfferFinished(Tp::PendingOperation *)))); while (mChan->state() != TubeChannelStateRemotePending) { mLoop->processEvents(); } // Simulate a peer connection from someone TpHandleRepoIface *contactRepo = tp_base_connection_get_handles( TP_BASE_CONNECTION(mConn->service()), TP_HANDLE_TYPE_CONTACT); TpHandle handle = tp_handle_ensure(contactRepo, "YouHaventSeenMeYet", NULL, NULL); gchar *service = g_strdup("org.not.seen.yet"); mExpectedHandle = handle; mExpectedBusName = QLatin1String("org.not.seen.yet"); tp_tests_dbus_tube_channel_peer_connected_no_stream(mChanService, service, handle); while (mChan->state() != TubeChannelStateOpen) { mLoop->processEvents(); } // Get to the connection while (!mOfferFinished) { QCOMPARE(mLoop->exec(), 0); } // Test offering twice QVERIFY(connect(chan->offerTube(QVariantMap()), // DISCARD SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); g_free (service); } void TestDBusTubeChan::cleanup() { cleanupImpl(); if (mChan && mChan->isValid()) { qDebug() << "waiting for the channel to become invalidated"; QVERIFY(connect(mChan.data(), SIGNAL(invalidated(Tp::DBusProxy*,QString,QString)), mLoop, SLOT(quit()))); tp_base_channel_close(TP_BASE_CHANNEL(mChanService)); QCOMPARE(mLoop->exec(), 0); } mChan.reset(); if (mChanService != 0) { g_object_unref(mChanService); mChanService = 0; } mLoop->processEvents(); } void TestDBusTubeChan::cleanupTestCase() { QCOMPARE(mConn->disconnect(), true); delete mConn; cleanupTestCaseImpl(); } QTEST_MAIN(TestDBusTubeChan) #include "_gen/dbus-tube-chan.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/account-channel-dispatcher.cpp0000644000175200001440000013527212000056607026417 0ustar00collabora-develusers00000000000000#include #include #include #include #define TP_QT_ENABLE_LOWLEVEL_API #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace Tp; using namespace Tp::Client; class ChannelRequestAdaptor : public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.freedesktop.Telepathy.ChannelRequest") Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" "") Q_PROPERTY(QDBusObjectPath Account READ Account) Q_PROPERTY(qulonglong UserActionTime READ UserActionTime) Q_PROPERTY(QString PreferredHandler READ PreferredHandler) Q_PROPERTY(QualifiedPropertyValueMapList Requests READ Requests) Q_PROPERTY(QStringList Interfaces READ Interfaces) Q_PROPERTY(QVariantMap Hints READ Hints) public: ChannelRequestAdaptor(QDBusObjectPath account, qulonglong userActionTime, QString preferredHandler, QualifiedPropertyValueMapList requests, QStringList interfaces, bool shouldFail, bool proceedNoop, QVariantMap hints, QObject *parent) : QDBusAbstractAdaptor(parent), mAccount(account), mUserActionTime(userActionTime), mPreferredHandler(preferredHandler), mRequests(requests), mInterfaces(interfaces), mShouldFail(shouldFail), mProceedNoop(proceedNoop), mHints(hints) { } virtual ~ChannelRequestAdaptor() { } void setChan(const QString &connPath, const QVariantMap &connProps, const QString &chanPath, const QVariantMap &chanProps) { mConnPath = connPath; mConnProps = connProps; mChanPath = chanPath; mChanProps = chanProps; } public: // Properties inline QDBusObjectPath Account() const { return mAccount; } inline qulonglong UserActionTime() const { return mUserActionTime; } inline QString PreferredHandler() const { return mPreferredHandler; } inline QualifiedPropertyValueMapList Requests() const { return mRequests; } inline QStringList Interfaces() const { return mInterfaces; } inline QVariantMap Hints() const { return mHints; } public Q_SLOTS: // Methods void Proceed() { if (mProceedNoop) { return; } if (mShouldFail) { QTimer::singleShot(0, this, SLOT(fail())); } else { QTimer::singleShot(0, this, SLOT(succeed())); } } void Cancel() { Q_EMIT Failed(QLatin1String(TP_QT_ERROR_CANCELLED), QLatin1String("Cancelled")); } Q_SIGNALS: // Signals void Failed(const QString &error, const QString &message); void Succeeded(); void SucceededWithChannel(const QDBusObjectPath &connPath, const QVariantMap &connProps, const QDBusObjectPath &chanPath, const QVariantMap &chanProps); private Q_SLOTS: void fail() { Q_EMIT Failed(QLatin1String(TP_QT_ERROR_NOT_AVAILABLE), QLatin1String("Not available")); } void succeed() { if (!mConnPath.isEmpty() && !mChanPath.isEmpty()) { Q_EMIT SucceededWithChannel(QDBusObjectPath(mConnPath), mConnProps, QDBusObjectPath(mChanPath), mChanProps); } Q_EMIT Succeeded(); } private: QDBusObjectPath mAccount; qulonglong mUserActionTime; QString mPreferredHandler; QualifiedPropertyValueMapList mRequests; QStringList mInterfaces; bool mShouldFail; bool mProceedNoop; QVariantMap mHints; QString mConnPath, mChanPath; QVariantMap mConnProps, mChanProps; }; class ChannelDispatcherAdaptor : public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.freedesktop.Telepathy.ChannelDispatcher") Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" "") Q_PROPERTY(QStringList Interfaces READ Interfaces) Q_PROPERTY(bool SupportsRequestHints READ SupportsRequestHints) public: enum MethodCall { CC = 0, // CreateChannel/WithHints EC, // EnsureChannel/WithHints }; ChannelDispatcherAdaptor(const QDBusConnection &bus, QObject *parent) : QDBusAbstractAdaptor(parent), mBus(bus), mRequests(0), mCurRequest(0), mInvokeHandler(false), mChannelRequestShouldFail(false), mChannelRequestProceedNoop(false) { } virtual ~ChannelDispatcherAdaptor() { } void setChan(const QString &connPath, const QVariantMap &connProps, const QString &chanPath, const QVariantMap &chanProps) { mConnPath = connPath; mConnProps = connProps; mChanPath = chanPath; mChanProps = chanProps; } void clearChan() { mConnPath = QString(); mConnProps.clear(); mChanPath = QString(); mChanProps.clear(); } public: // Properties inline QStringList Interfaces() const { return QStringList(); } inline bool SupportsRequestHints() const { return true; } public Q_SLOTS: // Methods QDBusObjectPath CreateChannel(const QDBusObjectPath& account, const QVariantMap& requestedProperties, qlonglong userActionTime, const QString& preferredHandler) { lastCall = CC; return createChannel(account, requestedProperties, userActionTime, preferredHandler); } QDBusObjectPath EnsureChannel(const QDBusObjectPath& account, const QVariantMap& requestedProperties, qlonglong userActionTime, const QString& preferredHandler) { lastCall = EC; return createChannel(account, requestedProperties, userActionTime, preferredHandler); } QDBusObjectPath CreateChannelWithHints(const QDBusObjectPath &account, const QVariantMap &requestedProperties, qlonglong userActionTime, const QString &preferredHandler, const QVariantMap &hints) { lastCall = CC; return createChannel(account, requestedProperties, userActionTime, preferredHandler, hints); } QDBusObjectPath EnsureChannelWithHints(const QDBusObjectPath &account, const QVariantMap &requestedProperties, qlonglong userActionTime, const QString &preferredHandler, const QVariantMap &hints) { lastCall = EC; return createChannel(account, requestedProperties, userActionTime, preferredHandler, hints); } private: friend class TestAccountChannelDispatcher; QDBusObjectPath createChannel(const QDBusObjectPath &account, const QVariantMap &requestedProperties, qlonglong userActionTime, const QString &preferredHandler, const QVariantMap &hints = QVariantMap()) { QObject *request = new QObject(this); mCurRequest = new ChannelRequestAdaptor( account, userActionTime, preferredHandler, QualifiedPropertyValueMapList(), QStringList(), mChannelRequestShouldFail, mChannelRequestProceedNoop, hints, request); mCurRequest->setChan(mConnPath, mConnProps, mChanPath, mChanProps); mCurRequestPath = QString(QLatin1String("/org/freedesktop/Telepathy/ChannelRequest/_%1")) .arg(mRequests++); mBus.registerService(QLatin1String("org.freedesktop.Telepathy.ChannelDispatcher")); mBus.registerObject(mCurRequestPath, request); mCurPreferredHandler = preferredHandler; if (mInvokeHandler && !mConnPath.isEmpty() && !mChanPath.isEmpty()) { invokeHandler(userActionTime); } return QDBusObjectPath(mCurRequestPath); } void invokeHandler(const qulonglong &userActionTime) { QString channelHandlerPath = QString(QLatin1String("/%1")).arg(mCurPreferredHandler); channelHandlerPath.replace(QLatin1Char('.'), QLatin1Char('/')); Client::ClientHandlerInterface *clientHandlerInterface = new Client::ClientHandlerInterface(mBus, mCurPreferredHandler, channelHandlerPath, this); ChannelDetails channelDetails = { QDBusObjectPath(mChanPath), mChanProps }; clientHandlerInterface->HandleChannels(mCurRequest->Account(), QDBusObjectPath(mConnPath), ChannelDetailsList() << channelDetails, ObjectPathList() << QDBusObjectPath(mCurRequestPath), userActionTime, QVariantMap()); } QDBusConnection mBus; uint mRequests; ChannelRequestAdaptor *mCurRequest; QString mCurRequestPath; QString mCurPreferredHandler; bool mInvokeHandler; bool mChannelRequestShouldFail; bool mChannelRequestProceedNoop; QString mConnPath, mChanPath; QVariantMap mConnProps, mChanProps; static MethodCall lastCall; }; ChannelDispatcherAdaptor::MethodCall ChannelDispatcherAdaptor::lastCall = (ChannelDispatcherAdaptor::MethodCall) -1; class TestAccountChannelDispatcher : public Test { Q_OBJECT public: TestAccountChannelDispatcher(QObject *parent = 0) : Test(parent), mChannelDispatcherAdaptor(0), mChannelRequestFinished(false), mChannelRequestFinishedWithError(false) { mHints = ChannelRequestHints(); mHints.setHint(QLatin1String("uk.co.willthompson"), QLatin1String("MomOrDad"), QString::fromLatin1("Mommy")); } protected Q_SLOTS: void onPendingChannelRequestFinished(Tp::PendingOperation *op); void onPendingChannelFinished(Tp::PendingOperation *op); void onChannelHandledAgain(const QDateTime &userActionTime, const Tp::ChannelRequestHints &hints); private Q_SLOTS: void initTestCase(); void init(); void testEnsureTextChat(); void testEnsureTextChatFail(); void testEnsureTextChatCancel(); void testEnsureTextChatroom(); void testEnsureTextChatroomFail(); void testEnsureTextChatroomCancel(); void testEnsureMediaCall(); void testEnsureMediaCallFail(); void testEnsureMediaCallCancel(); void testCreateChannel(); void testCreateChannelFail(); void testCreateChannelCancel(); void testEnsureChannel(); void testEnsureChannelFail(); void testEnsureChannelCancel(); void testCreateFileTransferChannel(); void testCreateFileTransferChannelFail(); void testCreateFileTransferChannelCancel(); void testCreateFileTransferChannelInvalidParameters(); void testCreateAndHandleChannel(); void testCreateAndHandleChannelNotYours(); void testCreateAndHandleChannelFail(); void testCreateAndHandleChannelHandledAgain(); void testCreateAndHandleChannelHandledChannels(); void testCreateAndHandleFileTransferChannel(); void testCreateAndHandleFileTransferChannelFail(); void testCreateAndHandleFileTransferChannelInvalidParameters(); void cleanup(); void cleanupTestCase(); private: void testPCR(PendingChannelRequest *pcr); void testPC(PendingChannel *pc, PendingChannel **pcOut = 0, ChannelPtr *channelOut = 0); QList ourHandlers(); QStringList ourHandledChannels(); void checkHandlerHandledChannels(ClientHandlerInterface *handler, const QStringList &toCompare); AccountManagerPtr mAM; AccountPtr mAccount; ChannelDispatcherAdaptor *mChannelDispatcherAdaptor; TestConnHelper *mConn; ContactPtr mContact; QDateTime mUserActionTime; ChannelRequestPtr mChannelRequest; bool mChannelRequestFinished; bool mChannelRequestFinishedWithError; QString mChannelRequestFinishedErrorName; bool mChannelRequestAndHandleFinished; bool mChannelRequestAndHandleFinishedWithError; QString mChannelRequestAndHandleFinishedErrorName; QDateTime mChannelHandledAgainActionTime; ChannelRequestHints mHints; QString mChanPath; QVariantMap mConnProps, mChanProps; QString mFilePath; }; void TestAccountChannelDispatcher::onPendingChannelRequestFinished( Tp::PendingOperation *op) { mChannelRequestFinished = true; mChannelRequestFinishedWithError = op->isError(); mChannelRequestFinishedErrorName = op->errorName(); mLoop->exit(0); } void TestAccountChannelDispatcher::onPendingChannelFinished( Tp::PendingOperation *op) { mChannelRequestAndHandleFinished = true; mChannelRequestAndHandleFinishedWithError = op->isError(); mChannelRequestAndHandleFinishedErrorName = op->errorName(); mLoop->exit(0); } void TestAccountChannelDispatcher::onChannelHandledAgain(const QDateTime &userActionTime, const Tp::ChannelRequestHints &hints) { mChannelHandledAgainActionTime = userActionTime; mLoop->exit(0); } void TestAccountChannelDispatcher::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("account-channel-dispatcher"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); // Create the CD first, because Accounts try to introspect it QDBusConnection bus = QDBusConnection::sessionBus(); QString channelDispatcherBusName = TP_QT_IFACE_CHANNEL_DISPATCHER; QString channelDispatcherPath = QLatin1String("/org/freedesktop/Telepathy/ChannelDispatcher"); QObject *dispatcher = new QObject(this); mChannelDispatcherAdaptor = new ChannelDispatcherAdaptor(bus, dispatcher); QVERIFY(bus.registerService(channelDispatcherBusName)); QVERIFY(bus.registerObject(channelDispatcherPath, dispatcher)); mAM = AccountManager::create(); QVERIFY(connect(mAM->becomeReady(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mAM->isReady(), true); QVariantMap parameters; parameters[QLatin1String("account")] = QLatin1String("foobar"); PendingAccount *pacc = mAM->createAccount(QLatin1String("foo"), QLatin1String("bar"), QLatin1String("foobar"), parameters); QVERIFY(connect(pacc, SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(pacc->account()); mAccount = pacc->account(); QVERIFY(connect(mAccount->becomeReady(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mAccount->isReady(), true); QCOMPARE(mAccount->supportsRequestHints(), true); QCOMPARE(mAccount->requestsSucceedWithChannel(), true); mConn = new TestConnHelper(this, EXAMPLE_TYPE_ECHO_2_CONNECTION, "account", "me@example.com", "protocol", "contacts", NULL); QCOMPARE(mConn->connect(), true); mContact = mConn->contacts(QStringList() << QLatin1String("foo@bar"))[0]; QVERIFY(mContact); } void TestAccountChannelDispatcher::init() { initImpl(); mChannelRequest.reset(); mChannelRequestFinished = false; mChannelRequestFinishedWithError = false; mChannelRequestFinishedErrorName = QString(); mChannelRequestAndHandleFinished = false; mChannelRequestAndHandleFinishedWithError = false; mChannelRequestAndHandleFinishedErrorName = QString(); mChannelHandledAgainActionTime = QDateTime(); QDateTime mUserActionTime = QDateTime::currentDateTime(); mChanPath.clear(); mChanProps.clear(); mFilePath = QCoreApplication::applicationFilePath(); } void TestAccountChannelDispatcher::testPCR(PendingChannelRequest *pcr) { QVERIFY(connect(pcr, SIGNAL(finished(Tp::PendingOperation *)), SLOT(onPendingChannelRequestFinished(Tp::PendingOperation *)))); mLoop->exec(0); mChannelRequest = pcr->channelRequest(); if (!mChanPath.isEmpty()) { QVERIFY(!mChannelRequest->channel().isNull()); QCOMPARE(mChannelRequest->channel()->connection()->objectPath(), mConn->objectPath()); QCOMPARE(mChannelRequest->channel()->objectPath(), mChanPath); QCOMPARE(mChannelRequest->channel()->immutableProperties(), mChanProps); } else { QVERIFY(mChannelRequest.isNull() || mChannelRequest->channel().isNull()); } if (!mChannelRequest.isNull()) { QVERIFY(connect(mChannelRequest->becomeReady(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); mLoop->exec(0); QCOMPARE(mChannelRequest->userActionTime(), mUserActionTime); QCOMPARE(mChannelRequest->account().data(), mAccount.data()); QVERIFY(mChannelRequest->hints().isValid()); QCOMPARE(mChannelRequest->hints().allHints(), mHints.allHints()); } } void TestAccountChannelDispatcher::testPC(PendingChannel *pc, PendingChannel **pcOut, ChannelPtr *channelOut) { if (pcOut) { *pcOut = pc; } QVERIFY(connect(pc, SIGNAL(finished(Tp::PendingOperation *)), SLOT(onPendingChannelFinished(Tp::PendingOperation *)))); mLoop->exec(0); ChannelPtr channel = pc->channel(); if (channelOut) { *channelOut = channel; } if (mChannelDispatcherAdaptor->mInvokeHandler && !mChanPath.isEmpty()) { QVERIFY(!channel.isNull()); QCOMPARE(channel->connection()->objectPath(), mConn->objectPath()); QCOMPARE(channel->objectPath(), mChanPath); QCOMPARE(channel->immutableProperties(), mChanProps); } else { QVERIFY(channel.isNull()); } } QList TestAccountChannelDispatcher::ourHandlers() { QList handlers; QDBusConnection bus = QDBusConnection::sessionBus(); QStringList registeredNames = bus.interface()->registeredServiceNames(); Q_FOREACH (QString name, registeredNames) { if (!name.startsWith(QLatin1String("org.freedesktop.Telepathy.Client."))) { continue; } if (QDBusConnection::sessionBus().interface()->serviceOwner(name).value() != QDBusConnection::sessionBus().baseService()) { continue; } QString path = QLatin1Char('/') + name; path.replace(QLatin1Char('.'), QLatin1Char('/')); ClientInterface client(name, path); QStringList ifaces; if (!waitForProperty(client.requestPropertyInterfaces(), &ifaces)) { continue; } if (!ifaces.contains(TP_QT_IFACE_CLIENT_HANDLER)) { continue; } ClientHandlerInterface *handler = new ClientHandlerInterface(name, path, this); handlers.append(handler); } return handlers; } QStringList TestAccountChannelDispatcher::ourHandledChannels() { ObjectPathList handledChannels; QDBusConnection bus = QDBusConnection::sessionBus(); QStringList registeredNames = bus.interface()->registeredServiceNames(); Q_FOREACH (QString name, registeredNames) { if (!name.startsWith(QLatin1String("org.freedesktop.Telepathy.Client."))) { continue; } if (QDBusConnection::sessionBus().interface()->serviceOwner(name).value() != QDBusConnection::sessionBus().baseService()) { continue; } QString path = QLatin1Char('/') + name; path.replace(QLatin1Char('.'), QLatin1Char('/')); ClientInterface client(name, path); QStringList ifaces; if (!waitForProperty(client.requestPropertyInterfaces(), &ifaces)) { continue; } if (!ifaces.contains(TP_QT_IFACE_CLIENT_HANDLER)) { continue; } ClientHandlerInterface *handler = new ClientHandlerInterface(bus, name, path, this); handledChannels.clear(); if (waitForProperty(handler->requestPropertyHandledChannels(), &handledChannels)) { break; } } QStringList ret; Q_FOREACH (const QDBusObjectPath &objectPath, handledChannels) { ret << objectPath.path(); } return ret; } void TestAccountChannelDispatcher::checkHandlerHandledChannels(ClientHandlerInterface *handler, const QStringList &toCompare) { ObjectPathList handledChannels; QVERIFY(waitForProperty(handler->requestPropertyHandledChannels(), &handledChannels)); QStringList sortedHandledChannels; Q_FOREACH (const QDBusObjectPath &objectPath, handledChannels) { sortedHandledChannels << objectPath.path(); } sortedHandledChannels.sort(); QCOMPARE(sortedHandledChannels, toCompare); } #define TEST_CREATE_ENSURE_CHANNEL_SPECIFIC(method_name, shouldFail, proceedNoop, expectedError) \ { \ ChannelRequestHints savedHints = mHints; \ TEST_CREATE_ENSURE_CHANNEL_SPECIFIC_EXTENDED(method_name, QLatin1String("foo@bar"), \ ChannelRequestHints(), shouldFail, proceedNoop, expectedError) \ TEST_CREATE_ENSURE_CHANNEL_SPECIFIC_EXTENDED(method_name, QLatin1String("foo@bar"), \ savedHints, shouldFail, proceedNoop, expectedError) \ mHints = savedHints; \ } #define TEST_CREATE_ENSURE_CHANNEL_SPECIFIC_WITH_CONTACT(method_name, shouldFail, proceedNoop, expectedError) \ { \ ChannelRequestHints savedHints = mHints; \ TEST_CREATE_ENSURE_CHANNEL_SPECIFIC_EXTENDED(method_name, mContact, \ ChannelRequestHints(), shouldFail, proceedNoop, expectedError) \ TEST_CREATE_ENSURE_CHANNEL_SPECIFIC_EXTENDED(method_name, mContact, \ savedHints, shouldFail, proceedNoop, expectedError) \ mHints = savedHints; \ } #define TEST_CREATE_ENSURE_CHANNEL_SPECIFIC_EXTENDED(method_name, contact, hints, shouldFail, proceedNoop, expectedError) \ { \ mHints = hints; \ mChannelDispatcherAdaptor->mInvokeHandler = false; \ mChannelDispatcherAdaptor->mChannelRequestShouldFail = shouldFail; \ mChannelDispatcherAdaptor->mChannelRequestProceedNoop = proceedNoop; \ if (!mChanPath.isEmpty()) { \ mChannelDispatcherAdaptor->setChan(mConn->objectPath(), mConnProps, mChanPath, mChanProps); \ } else { \ mChannelDispatcherAdaptor->clearChan(); \ } \ PendingChannelRequest *pcr; \ if (mHints.isValid()) { \ pcr = mAccount->method_name(contact, mUserActionTime, QString(), mHints); \ } else { \ pcr = mAccount->method_name(contact, mUserActionTime, QString()); \ } \ if (shouldFail && proceedNoop) { \ pcr->cancel(); \ } \ testPCR(pcr); \ QCOMPARE(mChannelRequestFinishedWithError, shouldFail); \ if (shouldFail) {\ QCOMPARE(mChannelRequestFinishedErrorName, QString(QLatin1String(expectedError))); \ } \ } #define TEST_CREATE_ENSURE_CHANNEL(method_name, shouldFail, proceedNoop, expectedError) \ { \ ChannelRequestHints savedHints = mHints; \ TEST_CREATE_ENSURE_CHANNEL_EXTENDED(method_name, \ ChannelRequestHints(), shouldFail, proceedNoop, expectedError) \ TEST_CREATE_ENSURE_CHANNEL_EXTENDED(method_name, \ savedHints, shouldFail, proceedNoop, expectedError) \ mHints = savedHints; \ } #define TEST_CREATE_ENSURE_CHANNEL_EXTENDED(method_name, hints, shouldFail, proceedNoop, expectedError) \ { \ mHints = hints; \ QVariantMap request; \ request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), \ TP_QT_IFACE_CHANNEL_TYPE_TEXT); \ request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), \ (uint) Tp::HandleTypeContact); \ request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetID"), \ QLatin1String("foo@bar")); \ mChannelDispatcherAdaptor->mInvokeHandler = false; \ mChannelDispatcherAdaptor->mChannelRequestShouldFail = shouldFail; \ mChannelDispatcherAdaptor->mChannelRequestProceedNoop = proceedNoop; \ if (!mChanPath.isEmpty()) { \ mChannelDispatcherAdaptor->setChan(mConn->objectPath(), mConnProps, mChanPath, mChanProps); \ } else { \ mChannelDispatcherAdaptor->clearChan(); \ } \ PendingChannelRequest *pcr; \ if (mHints.isValid()) { \ pcr = mAccount->method_name(request, mUserActionTime, QString(), mHints); \ } else { \ pcr = mAccount->method_name(request, mUserActionTime, QString()); \ } \ if (shouldFail && proceedNoop) { \ pcr->cancel(); \ } \ testPCR(pcr); \ QCOMPARE(mChannelRequestFinishedWithError, shouldFail); \ if (shouldFail) {\ QCOMPARE(mChannelRequestFinishedErrorName, QString(QLatin1String(expectedError))); \ } \ } void TestAccountChannelDispatcher::testEnsureTextChat() { TEST_CREATE_ENSURE_CHANNEL_SPECIFIC(ensureTextChat, false, false, ""); TEST_CREATE_ENSURE_CHANNEL_SPECIFIC_WITH_CONTACT(ensureTextChat, false, false, ""); QCOMPARE(ChannelDispatcherAdaptor::lastCall, ChannelDispatcherAdaptor::EC); } void TestAccountChannelDispatcher::testEnsureTextChatFail() { TEST_CREATE_ENSURE_CHANNEL_SPECIFIC(ensureTextChat, true, false, TP_QT_ERROR_NOT_AVAILABLE); TEST_CREATE_ENSURE_CHANNEL_SPECIFIC_WITH_CONTACT(ensureTextChat, true, false, TP_QT_ERROR_NOT_AVAILABLE); QCOMPARE(ChannelDispatcherAdaptor::lastCall, ChannelDispatcherAdaptor::EC); } void TestAccountChannelDispatcher::testEnsureTextChatCancel() { TEST_CREATE_ENSURE_CHANNEL_SPECIFIC(ensureTextChat, true, true, TP_QT_ERROR_CANCELLED); TEST_CREATE_ENSURE_CHANNEL_SPECIFIC_WITH_CONTACT(ensureTextChat, true, true, TP_QT_ERROR_CANCELLED); QCOMPARE(ChannelDispatcherAdaptor::lastCall, ChannelDispatcherAdaptor::EC); } void TestAccountChannelDispatcher::testEnsureTextChatroom() { TEST_CREATE_ENSURE_CHANNEL_SPECIFIC(ensureTextChatroom, false, false, ""); QCOMPARE(ChannelDispatcherAdaptor::lastCall, ChannelDispatcherAdaptor::EC); } void TestAccountChannelDispatcher::testEnsureTextChatroomFail() { TEST_CREATE_ENSURE_CHANNEL_SPECIFIC(ensureTextChatroom, true, false, TP_QT_ERROR_NOT_AVAILABLE); QCOMPARE(ChannelDispatcherAdaptor::lastCall, ChannelDispatcherAdaptor::EC); } void TestAccountChannelDispatcher::testEnsureTextChatroomCancel() { TEST_CREATE_ENSURE_CHANNEL_SPECIFIC(ensureTextChatroom, true, true, TP_QT_ERROR_CANCELLED); QCOMPARE(ChannelDispatcherAdaptor::lastCall, ChannelDispatcherAdaptor::EC); } void TestAccountChannelDispatcher::testEnsureMediaCall() { mChanPath = mConn->objectPath() + QLatin1String("/channel"); mChanProps = ChannelClassSpec::streamedMediaCall().allProperties(); ChannelDispatcherAdaptor::lastCall = (ChannelDispatcherAdaptor::MethodCall) -1; TEST_CREATE_ENSURE_CHANNEL_SPECIFIC(ensureStreamedMediaCall, false, false, ""); QCOMPARE(ChannelDispatcherAdaptor::lastCall, ChannelDispatcherAdaptor::EC); ChannelDispatcherAdaptor::lastCall = (ChannelDispatcherAdaptor::MethodCall) -1; TEST_CREATE_ENSURE_CHANNEL_SPECIFIC_WITH_CONTACT(ensureStreamedMediaCall, false, false, ""); QCOMPARE(ChannelDispatcherAdaptor::lastCall, ChannelDispatcherAdaptor::EC); ChannelDispatcherAdaptor::lastCall = (ChannelDispatcherAdaptor::MethodCall) -1; TEST_CREATE_ENSURE_CHANNEL_SPECIFIC(ensureStreamedMediaAudioCall, false, false, ""); QCOMPARE(ChannelDispatcherAdaptor::lastCall, ChannelDispatcherAdaptor::EC); ChannelDispatcherAdaptor::lastCall = (ChannelDispatcherAdaptor::MethodCall) -1; TEST_CREATE_ENSURE_CHANNEL_SPECIFIC_WITH_CONTACT(ensureStreamedMediaAudioCall, false, false, ""); QCOMPARE(ChannelDispatcherAdaptor::lastCall, ChannelDispatcherAdaptor::EC); } void TestAccountChannelDispatcher::testEnsureMediaCallFail() { ChannelDispatcherAdaptor::lastCall = (ChannelDispatcherAdaptor::MethodCall) -1; TEST_CREATE_ENSURE_CHANNEL_SPECIFIC(ensureStreamedMediaCall, true, false, TP_QT_ERROR_NOT_AVAILABLE); QCOMPARE(ChannelDispatcherAdaptor::lastCall, ChannelDispatcherAdaptor::EC); ChannelDispatcherAdaptor::lastCall = (ChannelDispatcherAdaptor::MethodCall) -1; TEST_CREATE_ENSURE_CHANNEL_SPECIFIC_WITH_CONTACT(ensureStreamedMediaCall, true, false, TP_QT_ERROR_NOT_AVAILABLE); QCOMPARE(ChannelDispatcherAdaptor::lastCall, ChannelDispatcherAdaptor::EC); ChannelDispatcherAdaptor::lastCall = (ChannelDispatcherAdaptor::MethodCall) -1; TEST_CREATE_ENSURE_CHANNEL_SPECIFIC(ensureStreamedMediaAudioCall, true, false, TP_QT_ERROR_NOT_AVAILABLE); QCOMPARE(ChannelDispatcherAdaptor::lastCall, ChannelDispatcherAdaptor::EC); ChannelDispatcherAdaptor::lastCall = (ChannelDispatcherAdaptor::MethodCall) -1; TEST_CREATE_ENSURE_CHANNEL_SPECIFIC_WITH_CONTACT(ensureStreamedMediaAudioCall, true, false, TP_QT_ERROR_NOT_AVAILABLE); QCOMPARE(ChannelDispatcherAdaptor::lastCall, ChannelDispatcherAdaptor::EC); } void TestAccountChannelDispatcher::testEnsureMediaCallCancel() { ChannelDispatcherAdaptor::lastCall = (ChannelDispatcherAdaptor::MethodCall) -1; TEST_CREATE_ENSURE_CHANNEL_SPECIFIC(ensureStreamedMediaCall, true, true, TP_QT_ERROR_CANCELLED); QCOMPARE(ChannelDispatcherAdaptor::lastCall, ChannelDispatcherAdaptor::EC); ChannelDispatcherAdaptor::lastCall = (ChannelDispatcherAdaptor::MethodCall) -1; TEST_CREATE_ENSURE_CHANNEL_SPECIFIC_WITH_CONTACT(ensureStreamedMediaCall, true, true, TP_QT_ERROR_CANCELLED); QCOMPARE(ChannelDispatcherAdaptor::lastCall, ChannelDispatcherAdaptor::EC); ChannelDispatcherAdaptor::lastCall = (ChannelDispatcherAdaptor::MethodCall) -1; TEST_CREATE_ENSURE_CHANNEL_SPECIFIC(ensureStreamedMediaAudioCall, true, true, TP_QT_ERROR_CANCELLED); QCOMPARE(ChannelDispatcherAdaptor::lastCall, ChannelDispatcherAdaptor::EC); ChannelDispatcherAdaptor::lastCall = (ChannelDispatcherAdaptor::MethodCall) -1; TEST_CREATE_ENSURE_CHANNEL_SPECIFIC_WITH_CONTACT(ensureStreamedMediaAudioCall, true, true, TP_QT_ERROR_CANCELLED); QCOMPARE(ChannelDispatcherAdaptor::lastCall, ChannelDispatcherAdaptor::EC); } #define TEST_CREATE_FILE_TRANSFER_CHANNEL(shouldFail, proceedNoop, invalidProps, expectedError) \ { \ ChannelRequestHints savedHints = mHints; \ TEST_CREATE_FILE_TRANSFER_CHANNEL_EXTENDED(QLatin1String("foo@bar"), \ ChannelRequestHints(), shouldFail, proceedNoop, invalidProps, expectedError) \ TEST_CREATE_FILE_TRANSFER_CHANNEL_EXTENDED(QLatin1String("foo@bar"), \ savedHints, shouldFail, proceedNoop, invalidProps, expectedError) \ TEST_CREATE_FILE_TRANSFER_CHANNEL_EXTENDED(mContact, \ ChannelRequestHints(), shouldFail, proceedNoop, invalidProps, expectedError) \ TEST_CREATE_FILE_TRANSFER_CHANNEL_EXTENDED(mContact, \ savedHints, shouldFail, proceedNoop, invalidProps, expectedError) \ mHints = savedHints; \ } #define TEST_CREATE_FILE_TRANSFER_CHANNEL_EXTENDED(contact, hints, shouldFail, proceedNoop, invalidProps, expectedError) \ { \ mHints = hints; \ mChannelDispatcherAdaptor->mInvokeHandler = false; \ mChannelDispatcherAdaptor->mChannelRequestShouldFail = shouldFail; \ mChannelDispatcherAdaptor->mChannelRequestProceedNoop = proceedNoop; \ if (!mChanPath.isEmpty()) { \ mChannelDispatcherAdaptor->setChan(mConn->objectPath(), mConnProps, mChanPath, mChanProps); \ } else { \ mChannelDispatcherAdaptor->clearChan(); \ } \ \ PendingChannelRequest *pcr; \ FileTransferChannelCreationProperties ftprops; \ if (!invalidProps) { \ QFileInfo fileInfo(mFilePath); \ ftprops = FileTransferChannelCreationProperties(fileInfo.fileName(), \ QLatin1String("application/octet-stream"), fileInfo.size()); \ } \ \ if (mHints.isValid()) { \ pcr = mAccount->createFileTransfer(contact, \ ftprops, mUserActionTime, QString(), mHints); \ } else { \ pcr = mAccount->createFileTransfer(contact, \ ftprops, mUserActionTime, QString()); \ } \ \ if (shouldFail && proceedNoop) { \ pcr->cancel(); \ } \ testPCR(pcr); \ QCOMPARE(ChannelDispatcherAdaptor::lastCall, ChannelDispatcherAdaptor::CC); \ QCOMPARE(mChannelRequestFinishedWithError, shouldFail); \ if (shouldFail) {\ QCOMPARE(mChannelRequestFinishedErrorName, QString(QLatin1String(expectedError))); \ } \ } void TestAccountChannelDispatcher::testCreateFileTransferChannel() { mChanPath.clear(); mChanProps = ChannelClassSpec::outgoingFileTransfer().allProperties(); TEST_CREATE_FILE_TRANSFER_CHANNEL(false, false, false, ""); } void TestAccountChannelDispatcher::testCreateFileTransferChannelFail() { TEST_CREATE_FILE_TRANSFER_CHANNEL(true, false, false, TP_QT_ERROR_NOT_AVAILABLE); } void TestAccountChannelDispatcher::testCreateFileTransferChannelCancel() { TEST_CREATE_FILE_TRANSFER_CHANNEL(true, true, false, TP_QT_ERROR_CANCELLED); } void TestAccountChannelDispatcher::testCreateFileTransferChannelInvalidParameters() { TEST_CREATE_FILE_TRANSFER_CHANNEL(true, false, true, TP_QT_ERROR_INVALID_ARGUMENT); } void TestAccountChannelDispatcher::testCreateChannel() { TEST_CREATE_ENSURE_CHANNEL(createChannel, false, false, ""); QCOMPARE(ChannelDispatcherAdaptor::lastCall, ChannelDispatcherAdaptor::CC); } void TestAccountChannelDispatcher::testCreateChannelFail() { TEST_CREATE_ENSURE_CHANNEL(createChannel, true, false, TP_QT_ERROR_NOT_AVAILABLE); QCOMPARE(ChannelDispatcherAdaptor::lastCall, ChannelDispatcherAdaptor::CC); } void TestAccountChannelDispatcher::testCreateChannelCancel() { TEST_CREATE_ENSURE_CHANNEL(createChannel, true, true, TP_QT_ERROR_CANCELLED); QCOMPARE(ChannelDispatcherAdaptor::lastCall, ChannelDispatcherAdaptor::CC); } void TestAccountChannelDispatcher::testEnsureChannel() { TEST_CREATE_ENSURE_CHANNEL(ensureChannel, false, false, ""); QCOMPARE(ChannelDispatcherAdaptor::lastCall, ChannelDispatcherAdaptor::EC); } void TestAccountChannelDispatcher::testEnsureChannelFail() { TEST_CREATE_ENSURE_CHANNEL(ensureChannel, true, false, TP_QT_ERROR_NOT_AVAILABLE); QCOMPARE(ChannelDispatcherAdaptor::lastCall, ChannelDispatcherAdaptor::EC); } void TestAccountChannelDispatcher::testEnsureChannelCancel() { TEST_CREATE_ENSURE_CHANNEL(ensureChannel, true, true, TP_QT_ERROR_CANCELLED); QCOMPARE(ChannelDispatcherAdaptor::lastCall, ChannelDispatcherAdaptor::EC); } #define TEST_CREATE_ENSURE_AND_HANDLE_CHANNEL(method_name, channelRequestShouldFail, shouldFail, invokeHandler, expectedError, channelOut, pcOut) \ { \ QVariantMap request; \ request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), \ TP_QT_IFACE_CHANNEL_TYPE_TEXT); \ request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), \ (uint) Tp::HandleTypeContact); \ request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetID"), \ QLatin1String("foo@bar")); \ mChannelDispatcherAdaptor->mInvokeHandler = invokeHandler; \ mChannelDispatcherAdaptor->mChannelRequestShouldFail = channelRequestShouldFail; \ mChannelDispatcherAdaptor->mChannelRequestProceedNoop = false; \ if (!mChanPath.isEmpty()) { \ mChannelDispatcherAdaptor->setChan(mConn->objectPath(), mConnProps, mChanPath, mChanProps); \ } else { \ mChannelDispatcherAdaptor->clearChan(); \ } \ PendingChannel *pc = mAccount->method_name(request, mUserActionTime); \ testPC(pc, pcOut, channelOut); \ QCOMPARE(mChannelRequestAndHandleFinishedWithError, shouldFail); \ if (shouldFail) {\ QCOMPARE(mChannelRequestAndHandleFinishedErrorName, QString(QLatin1String(expectedError))); \ } \ } void TestAccountChannelDispatcher::testCreateAndHandleChannel() { mChanPath = mConn->objectPath() + QLatin1String("/channel"); mChanProps = ChannelClassSpec::textChat().allProperties(); TEST_CREATE_ENSURE_AND_HANDLE_CHANNEL(createAndHandleChannel, false, false, true, "", 0, 0); QCOMPARE(ChannelDispatcherAdaptor::lastCall, ChannelDispatcherAdaptor::CC); } void TestAccountChannelDispatcher::testCreateAndHandleChannelNotYours() { TEST_CREATE_ENSURE_AND_HANDLE_CHANNEL(ensureAndHandleChannel, false, true, false, TP_QT_ERROR_NOT_YOURS, 0, 0); QCOMPARE(ChannelDispatcherAdaptor::lastCall, ChannelDispatcherAdaptor::EC); } void TestAccountChannelDispatcher::testCreateAndHandleChannelFail() { TEST_CREATE_ENSURE_AND_HANDLE_CHANNEL(createAndHandleChannel, true, true, false, TP_QT_ERROR_NOT_AVAILABLE, 0, 0); QCOMPARE(ChannelDispatcherAdaptor::lastCall, ChannelDispatcherAdaptor::CC); } void TestAccountChannelDispatcher::testCreateAndHandleChannelHandledAgain() { // create a Channel by magic, rather than doing D-Bus round-trips for it TpHandleRepoIface *contactRepo = tp_base_connection_get_handles( TP_BASE_CONNECTION(mConn->service()), TP_HANDLE_TYPE_CONTACT); guint handle = tp_handle_ensure(contactRepo, "someone@localhost", 0, 0); mChanPath = mConn->objectPath() + QLatin1String("/TextChannel"); QByteArray chanPath(mChanPath.toAscii()); ExampleEcho2Channel *textChanService = EXAMPLE_ECHO_2_CHANNEL(g_object_new( EXAMPLE_TYPE_ECHO_2_CHANNEL, "connection", mConn->service(), "object-path", chanPath.data(), "handle", handle, NULL)); PendingChannel *pcOut = 0; TEST_CREATE_ENSURE_AND_HANDLE_CHANNEL(createAndHandleChannel, false, false, true, "", 0, &pcOut); HandledChannelNotifier *notifier = pcOut->handledChannelNotifier(); connect(notifier, SIGNAL(handledAgain(QDateTime,Tp::ChannelRequestHints)), SLOT(onChannelHandledAgain(QDateTime,Tp::ChannelRequestHints))); QDateTime timestamp(QDate::currentDate()); mChannelDispatcherAdaptor->invokeHandler(timestamp.toTime_t()); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mChannelHandledAgainActionTime, timestamp); if (textChanService != 0) { g_object_unref(textChanService); textChanService = 0; } } void TestAccountChannelDispatcher::testCreateAndHandleChannelHandledChannels() { mChanPath = mConn->objectPath() + QLatin1String("/channel"); mChanProps = ChannelClassSpec::textChat().allProperties(); QVERIFY(ourHandledChannels().isEmpty()); QVERIFY(ourHandlers().isEmpty()); ChannelPtr channel; TEST_CREATE_ENSURE_AND_HANDLE_CHANNEL(createAndHandleChannel, false, false, true, "", &channel, 0); // check that the channel appears in the HandledChannels property of the first handler QVERIFY(!ourHandledChannels().isEmpty()); QCOMPARE(ourHandledChannels().size(), 1); QVERIFY(ourHandledChannels().contains(mChanPath)); QVERIFY(!ourHandlers().isEmpty()); QCOMPARE(ourHandlers().size(), 1); channel.reset(); // reseting the channel should unregister the handler while (!ourHandlers().isEmpty()) { mLoop->processEvents(); } QVERIFY(ourHandledChannels().isEmpty()); ChannelPtr channel1; TEST_CREATE_ENSURE_AND_HANDLE_CHANNEL(createAndHandleChannel, false, false, true, "", &channel1, 0); // check that the channel appears in the HandledChannels property of the first handler QVERIFY(!ourHandledChannels().isEmpty()); QCOMPARE(ourHandledChannels().size(), 1); QVERIFY(ourHandledChannels().contains(mChanPath)); QVERIFY(!ourHandlers().isEmpty()); QCOMPARE(ourHandlers().size(), 1); mChanPath = mConn->objectPath() + QLatin1String("/channelother"); mChanProps = ChannelClassSpec::textChat().allProperties(); ChannelPtr channel2; TEST_CREATE_ENSURE_AND_HANDLE_CHANNEL(createAndHandleChannel, false, false, true, "", &channel2, 0); // check that the channel appears in the HandledChannels property of some handler QVERIFY(!ourHandledChannels().isEmpty()); QCOMPARE(ourHandledChannels().size(), 2); QVERIFY(ourHandledChannels().contains(mChanPath)); QVERIFY(!ourHandlers().isEmpty()); // only one handler will stay alive to properly report HandledChannels QCOMPARE(ourHandlers().size(), 1); QStringList sortedOurHandledChannels = ourHandledChannels(); sortedOurHandledChannels.sort(); Q_FOREACH (ClientHandlerInterface *handler, ourHandlers()) { checkHandlerHandledChannels(handler, sortedOurHandledChannels); } channel1.reset(); while (ourHandledChannels().size() > 1) { mLoop->processEvents(); } QVERIFY(!ourHandledChannels().isEmpty()); QCOMPARE(ourHandledChannels().size(), 1); QVERIFY(ourHandledChannels().contains(mChanPath)); channel2.reset(); while (!ourHandlers().isEmpty()) { mLoop->processEvents(); } QVERIFY(ourHandledChannels().isEmpty()); } #define TEST_CREATE_AND_HANDLE_FILE_TRANSFER_CHANNEL(channelRequestShouldFail, shouldFail, \ invalidProps, invokeHandler, expectedError, channelOut, pcOut) \ TEST_CREATE_AND_HANDLE_FILE_TRANSFER_CHANNEL_EXTENDED(QLatin1String("foo@bar"), \ channelRequestShouldFail, shouldFail, invalidProps, invokeHandler, \ expectedError, channelOut, pcOut) \ TEST_CREATE_AND_HANDLE_FILE_TRANSFER_CHANNEL_EXTENDED(mContact, \ channelRequestShouldFail, shouldFail, invalidProps, invokeHandler, \ expectedError, channelOut, pcOut) #define TEST_CREATE_AND_HANDLE_FILE_TRANSFER_CHANNEL_EXTENDED(contact, channelRequestShouldFail, \ shouldFail, invalidProps, invokeHandler, expectedError, channelOut, pcOut) \ { \ mChannelDispatcherAdaptor->mInvokeHandler = invokeHandler; \ mChannelDispatcherAdaptor->mChannelRequestShouldFail = channelRequestShouldFail; \ mChannelDispatcherAdaptor->mChannelRequestProceedNoop = false; \ if (!mChanPath.isEmpty()) { \ mChannelDispatcherAdaptor->setChan(mConn->objectPath(), mConnProps, mChanPath, mChanProps); \ } else { \ mChannelDispatcherAdaptor->clearChan(); \ } \ PendingChannel *pc; \ if (!invalidProps) { \ QFileInfo fileInfo(mFilePath); \ FileTransferChannelCreationProperties ftprops(fileInfo.fileName(), \ QLatin1String("application/octet-stream"), fileInfo.size()); \ pc = mAccount->createAndHandleFileTransfer(contact, \ ftprops, mUserActionTime); \ } else { \ FileTransferChannelCreationProperties ftprops; \ pc = mAccount->createAndHandleFileTransfer(contact, \ ftprops, mUserActionTime); \ } \ testPC(pc, pcOut, channelOut); \ QCOMPARE(ChannelDispatcherAdaptor::lastCall, ChannelDispatcherAdaptor::CC); \ QCOMPARE(mChannelRequestAndHandleFinishedWithError, shouldFail); \ if (shouldFail) { \ QCOMPARE(mChannelRequestAndHandleFinishedErrorName, QString(QLatin1String(expectedError))); \ } \ } void TestAccountChannelDispatcher::testCreateAndHandleFileTransferChannel() { mChanPath = mConn->objectPath() + QLatin1String("/channel"); mChanProps = ChannelClassSpec::incomingFileTransfer().allProperties(); TEST_CREATE_AND_HANDLE_FILE_TRANSFER_CHANNEL(false, false, false, true, "", 0, 0); } void TestAccountChannelDispatcher::testCreateAndHandleFileTransferChannelFail() { TEST_CREATE_AND_HANDLE_FILE_TRANSFER_CHANNEL(true, true, false, true, TP_QT_ERROR_NOT_AVAILABLE, 0, 0); } void TestAccountChannelDispatcher::testCreateAndHandleFileTransferChannelInvalidParameters() { TEST_CREATE_AND_HANDLE_FILE_TRANSFER_CHANNEL(true, true, true, true, TP_QT_ERROR_INVALID_ARGUMENT, 0, 0); } void TestAccountChannelDispatcher::cleanup() { cleanupImpl(); } void TestAccountChannelDispatcher::cleanupTestCase() { QCOMPARE(mConn->disconnect(), true); delete mConn; cleanupTestCaseImpl(); } QTEST_MAIN(TestAccountChannelDispatcher) #include "_gen/account-channel-dispatcher.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/conn-roster-legacy.cpp0000644000175200001440000004343512000056607024743 0ustar00collabora-develusers00000000000000#include #include #include #include #include #include #include #include using namespace Tp; class TestConnRosterLegacy : public Test { Q_OBJECT public: TestConnRosterLegacy(QObject *parent = 0) : Test(parent), mConn(0), mBlockingContactsFinished(false), mHowManyKnownContacts(0), mGotPresenceStateChanged(false) { } protected Q_SLOTS: void expectBlockingContactsFinished(Tp::PendingOperation *op); void expectBlockStatusChanged(bool blocked); void expectBlockedContactsChanged(const Tp::Contacts &added, const Tp::Contacts &removed, const Tp::Channel::GroupMemberChangeDetails &details); void expectPresenceStateChanged(Tp::Contact::PresenceState); void expectAllKnownContactsChanged(const Tp::Contacts &added, const Tp::Contacts &removed, const Tp::Channel::GroupMemberChangeDetails &details); private Q_SLOTS: void initTestCase(); void init(); void testRoster(); void cleanup(); void cleanupTestCase(); private: TestConnHelper *mConn; QSet mContactsExpectingBlockStatusChange; bool mBlockingContactsFinished; int mHowManyKnownContacts; bool mGotPresenceStateChanged; }; void TestConnRosterLegacy::expectBlockingContactsFinished(Tp::PendingOperation *op) { TEST_VERIFY_OP(op); qDebug() << "blocking contacts finished"; mBlockingContactsFinished = true; if (mContactsExpectingBlockStatusChange.isEmpty()) { mLoop->exit(0); } } void TestConnRosterLegacy::expectBlockStatusChanged(bool blocked) { Q_UNUSED(blocked); Contact *c = qobject_cast(sender()); QVERIFY(c); ContactPtr contact(c); mContactsExpectingBlockStatusChange.remove(contact->id()); if (mContactsExpectingBlockStatusChange.isEmpty() && mBlockingContactsFinished) { mLoop->exit(0); } } // This connects to allKnownContactsChanged() but it is only used in the last contact blocking test void TestConnRosterLegacy::expectBlockedContactsChanged(const Tp::Contacts &added, const Tp::Contacts &removed, const Tp::Channel::GroupMemberChangeDetails &details) { Q_UNUSED(details); Q_FOREACH(const ContactPtr &contact, added) { mContactsExpectingBlockStatusChange.remove(contact->id()); } Q_FOREACH(const ContactPtr &contact, removed) { mContactsExpectingBlockStatusChange.remove(contact->id()); } if (mContactsExpectingBlockStatusChange.isEmpty() && mBlockingContactsFinished) { mLoop->exit(0); } } void TestConnRosterLegacy::expectAllKnownContactsChanged(const Tp::Contacts& added, const Tp::Contacts& removed, const Tp::Channel::GroupMemberChangeDetails &details) { qDebug() << added.size() << " contacts added, " << removed.size() << " contacts removed"; mHowManyKnownContacts += added.size(); mHowManyKnownContacts -= removed.size(); if (details.hasMessage()) { QCOMPARE(details.message(), QLatin1String("add me now")); } if (mConn->client()->contactManager()->allKnownContacts().size() != mHowManyKnownContacts) { qWarning() << "Contacts number mismatch! Watched value: " << mHowManyKnownContacts << "allKnownContacts(): " << mConn->client()->contactManager()->allKnownContacts().size(); mLoop->exit(1); } else { mLoop->exit(0); } } void TestConnRosterLegacy::expectPresenceStateChanged(Contact::PresenceState state) { mGotPresenceStateChanged = true; } void TestConnRosterLegacy::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("conn-roster-legacy"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); mConn = new TestConnHelper(this, EXAMPLE_TYPE_CONTACT_LIST_CONNECTION, "account", "me@example.com", "protocol", "contactlist", "simulation-delay", 1, NULL); QCOMPARE(mConn->connect(), true); } void TestConnRosterLegacy::init() { initImpl(); } void TestConnRosterLegacy::testRoster() { Features features = Features() << Connection::FeatureRoster; QCOMPARE(mConn->enableFeatures(features), true); ContactManagerPtr contactManager = mConn->client()->contactManager(); QCOMPARE(contactManager->state(), ContactListStateSuccess); QStringList toCheck = QStringList() << QLatin1String("sjoerd@example.com") << QLatin1String("travis@example.com") << QLatin1String("wim@example.com") << QLatin1String("olivier@example.com") << QLatin1String("helen@example.com") << QLatin1String("geraldine@example.com") << QLatin1String("guillaume@example.com") << QLatin1String("christian@example.com") << QLatin1String("bill@example.com") << QLatin1String("steve@example.com"); QStringList ids; QList pendingSubscription; QList pendingPublish; Q_FOREACH (const ContactPtr &contact, contactManager->allKnownContacts()) { qDebug() << " contact:" << contact->id() << "- subscription:" << contact->subscriptionState() << "- publish:" << contact->publishState(); ids << contact->id(); if (contact->subscriptionState() == Contact::PresenceStateAsk) { pendingSubscription.append(contact); } else if (contact->publishState() == Contact::PresenceStateAsk) { pendingPublish.append(contact); } } ids.sort(); toCheck.sort(); QCOMPARE(ids, toCheck); QCOMPARE(pendingSubscription.size(), 2); QCOMPARE(pendingPublish.size(), 2); // Wait for the contacts to be built ids = QStringList() << QString(QLatin1String("john@example.com")) << QString(QLatin1String("mary@example.com")); QList contacts = mConn->contacts(ids); QCOMPARE(contacts.size(), ids.size()); int i = 0; Q_FOREACH (const ContactPtr &contact, contacts) { mGotPresenceStateChanged = false; QVERIFY(connect(contact.data(), SIGNAL(subscriptionStateChanged(Tp::Contact::PresenceState)), SLOT(expectPresenceStateChanged(Tp::Contact::PresenceState)))); QVERIFY(connect(contact.data(), SIGNAL(publishStateChanged(Tp::Contact::PresenceState, QString)), SLOT(expectPresenceStateChanged(Tp::Contact::PresenceState)))); if ((i % 2) == 0) { contact->requestPresenceSubscription(QLatin1String("please add me")); } else { contact->requestPresenceSubscription(QLatin1String("add me now")); } while (!mGotPresenceStateChanged) { mLoop->processEvents(); } if ((i % 2) == 0) { // I asked to see his presence - he might have already accepted it, though QVERIFY(contact->subscriptionState() == Contact::PresenceStateAsk || contact->subscriptionState() == Contact::PresenceStateYes); // if he accepted it already, one iteration won't be enough as the // first iteration will just flush the subscription -> Yes event while (contact->publishState() != Contact::PresenceStateAsk) { mLoop->processEvents(); } contact->authorizePresencePublication(); while (contact->publishState() != Contact::PresenceStateYes) { mLoop->processEvents(); } // I authorized him to see my presence QCOMPARE(static_cast(contact->publishState()), static_cast(Contact::PresenceStateYes)); // He replied the presence request QCOMPARE(static_cast(contact->subscriptionState()), static_cast(Contact::PresenceStateYes)); contact->removePresenceSubscription(); while (contact->subscriptionState() != Contact::PresenceStateNo) { mLoop->processEvents(); } } else { // I asked to see her presence - she might have already rejected it, though QVERIFY(contact->subscriptionState() == Contact::PresenceStateAsk || contact->subscriptionState() == Contact::PresenceStateNo); // If she didn't already reject it, wait until she does while (contact->subscriptionState() != Contact::PresenceStateNo) { mLoop->processEvents(); } } ++i; // Disconnect the signals so the contacts doing something won't early-exit future mainloop // iterations (the simulation CM does things like - after a delay since we removed them, try // to re-add us - and such, which mess up the test if the simulated network event happens // before we've finished with the next contact) QVERIFY(contact->disconnect(this)); // TODO: The roster API, frankly speaking, seems rather error/race prone, as evidenced by // this test. Should we perhaps change its semantics? Then again, this test also simulates // the remote user accepting/rejecting the request with a quite unpredictable timer delay, // while real-world applications don't do any such assumptions about the timing of the // remote user actions, so most of the problems won't be applicable there. } i = 0; Contact::PresenceState expectedPresenceState; Q_FOREACH (const ContactPtr &contact, pendingPublish) { mGotPresenceStateChanged = false; QVERIFY(connect(contact.data(), SIGNAL(publishStateChanged(Tp::Contact::PresenceState, QString)), SLOT(expectPresenceStateChanged(Tp::Contact::PresenceState)))); if ((i++ % 2) == 0) { expectedPresenceState = Contact::PresenceStateYes; contact->authorizePresencePublication(); } else { expectedPresenceState = Contact::PresenceStateNo; contact->removePresencePublication(); } while (!mGotPresenceStateChanged) { mLoop->processEvents(); } QCOMPARE(static_cast(contact->publishState()), static_cast(expectedPresenceState)); } // Test allKnownContactsChanged. // In this test, everytime a subscription is requested or rejected, allKnownContacts changes // Cache the current value mHowManyKnownContacts = contactManager->allKnownContacts().size(); // Watch for contacts changed QVERIFY(connect(contactManager.data(), SIGNAL(allKnownContactsChanged(Tp::Contacts,Tp::Contacts, Tp::Channel::GroupMemberChangeDetails)), SLOT(expectAllKnownContactsChanged(Tp::Contacts,Tp::Contacts, Tp::Channel::GroupMemberChangeDetails)))); // Wait for the contacts to be built ids = QStringList() << QString(QLatin1String("kctest1@example.com")) << QString(QLatin1String("kctest2@example.com")); contacts = mConn->contacts(ids); QCOMPARE(contacts.size(), ids.size()); Q_FOREACH (const ContactPtr &contact, contacts) { contact->requestPresenceSubscription(QLatin1String("add me now")); // allKnownContacts is supposed to change here. QCOMPARE(mLoop->exec(), 0); } QVERIFY(disconnect(contactManager.data(), SIGNAL(allKnownContactsChanged(Tp::Contacts,Tp::Contacts, Tp::Channel::GroupMemberChangeDetails)), this, SLOT(expectAllKnownContactsChanged(Tp::Contacts,Tp::Contacts, Tp::Channel::GroupMemberChangeDetails)))); // verify that the CM supports contact blocking QVERIFY(contactManager->canBlockContacts()); // check if the initially blocked contacts are there ids.clear(); toCheck = QStringList() << QLatin1String("bill@example.com") << QLatin1String("steve@example.com"); Q_FOREACH (const ContactPtr &contact, contactManager->allKnownContacts()) { if (contact->isBlocked()) { qDebug() << "blocked contact:" << contact->id(); ids << contact->id(); } } ids.sort(); toCheck.sort(); QCOMPARE(ids, toCheck); // block all contacts QList contactsList = contactManager->allKnownContacts().toList(); QSet contactIdsList; Q_FOREACH (const ContactPtr &contact, contactsList) { QVERIFY(connect(contact.data(), SIGNAL(blockStatusChanged(bool)), SLOT(expectBlockStatusChanged(bool)))); contactIdsList.insert(contact->id()); } mBlockingContactsFinished = false; mContactsExpectingBlockStatusChange = contactIdsList; // those are already blocked; do not expect their status to change mContactsExpectingBlockStatusChange.remove(QLatin1String("bill@example.com")); mContactsExpectingBlockStatusChange.remove(QLatin1String("steve@example.com")); QVERIFY(connect(contactManager->blockContacts(contactsList), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectBlockingContactsFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); // verify all contacts have been blocked Q_FOREACH (const ContactPtr &contact, contactsList) { QCOMPARE(contact->isBlocked(), true); QVERIFY(contactManager->allKnownContacts().contains(contact)); } // now remove kctest1 from the server ContactPtr kctest1; Q_FOREACH (const ContactPtr &contact, contactsList) { if (contact->id() == QLatin1String("kctest1@example.com")) { kctest1 = contact; } } QVERIFY(!kctest1.isNull()); QVERIFY(connect(contactManager->removeContacts(QList() << kctest1), SIGNAL(finished(Tp::PendingOperation*)), mLoop, SLOT(quit()))); QCOMPARE(mLoop->exec(), 0); // allKnownContacts must still contain kctest1, since it is in the deny list QVERIFY(contactManager->allKnownContacts().contains(kctest1)); kctest1.reset(); //no longer needed // unblock all contacts mBlockingContactsFinished = false; mContactsExpectingBlockStatusChange = contactIdsList; QVERIFY(connect(contactManager->unblockContacts(contactsList), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectBlockingContactsFinished(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); // verify all contacts have been unblocked Q_FOREACH (const ContactPtr &contact, contactsList) { QCOMPARE(contact->isBlocked(), false); // ...and that bill, steve and kctest1 have also been removed from allKnownContacts() // note: allKnownContacts() changes here because bill, steve and kctest, // which were only in the deny list, do not exist in any other list, so // they are removed as soon as they get unblocked. if (contact->id() == QLatin1String("bill@example.com") || contact->id() == QLatin1String("steve@example.com") || contact->id() == QLatin1String("kctest1@example.com")) { QVERIFY(!contactManager->allKnownContacts().contains(contact)); } else { QVERIFY(contactManager->allKnownContacts().contains(contact)); } } // block some contacts that are not already known ids = QStringList() << QLatin1String("blocktest1@example.com") << QLatin1String("blocktest2@example.com"); contacts = mConn->contacts(ids); // Watch changes in allKnownContacts() instead of watching the Contacts' block status // as we want to destroy the Contact objects and verify that they are being re-created correctly QVERIFY(connect(contactManager.data(), SIGNAL(allKnownContactsChanged(Tp::Contacts,Tp::Contacts, Tp::Channel::GroupMemberChangeDetails)), SLOT(expectBlockedContactsChanged(Tp::Contacts,Tp::Contacts, Tp::Channel::GroupMemberChangeDetails)))); mBlockingContactsFinished = false; mContactsExpectingBlockStatusChange = ids.toSet(); QVERIFY(connect(contactManager->blockContacts(contacts), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectBlockingContactsFinished(Tp::PendingOperation*)))); // destroy the Contact objects to let them be re-created when the block operation finishes contacts.clear(); QCOMPARE(mLoop->exec(), 0); // construct the same contacts again and verify that they are blocked contacts = mConn->contacts(ids); Q_FOREACH (const ContactPtr &contact, contacts) { QCOMPARE(contact->isBlocked(), true); QVERIFY(contactManager->allKnownContacts().contains(contact)); } // now unblock them again mBlockingContactsFinished = false; mContactsExpectingBlockStatusChange = ids.toSet(); QVERIFY(connect(contactManager->unblockContacts(contacts), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectBlockingContactsFinished(Tp::PendingOperation*)))); // note: allKnownContacts() is expected to change again, so we expect // to quit from expectBlockedContactsChanged() QCOMPARE(mLoop->exec(), 0); // and verify that they are not in allKnownContacts() Q_FOREACH (const ContactPtr &contact, contacts) { QCOMPARE(contact->isBlocked(), false); QVERIFY(!contactManager->allKnownContacts().contains(contact)); } } void TestConnRosterLegacy::cleanup() { cleanupImpl(); } void TestConnRosterLegacy::cleanupTestCase() { QCOMPARE(mConn->disconnect(), true); delete mConn; cleanupTestCaseImpl(); } QTEST_MAIN(TestConnRosterLegacy) #include "_gen/conn-roster-legacy.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/account-basics.cpp0000644000175200001440000005763512000056607024135 0ustar00collabora-develusers00000000000000#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace Tp; class TestAccountBasics : public Test { Q_OBJECT public: TestAccountBasics(QObject *parent = 0) : Test(parent), mConn(0), mAccountsCount(0) { } protected Q_SLOTS: void onNewAccount(const Tp::AccountPtr &); void onAccountServiceNameChanged(const QString &); void onAccountDisplayNameChanged(const QString &); void onAccountIconNameChanged(const QString &); void onAccountNicknameChanged(const QString &); void onAccountAvatarChanged(const Tp::Avatar &); void onAccountParametersChanged(const QVariantMap &); void onAccountCapabilitiesChanged(const Tp::ConnectionCapabilities &); void onAccountConnectsAutomaticallyChanged(bool); void onAccountAutomaticPresenceChanged(const Tp::Presence &); void onAccountRequestedPresenceChanged(const Tp::Presence &); void onAccountCurrentPresenceChanged(const Tp::Presence &); private Q_SLOTS: void initTestCase(); void init(); void testBasics(); void cleanup(); void cleanupTestCase(); private: QStringList pathsForAccounts(const QList &list); QStringList pathsForAccounts(const AccountSetPtr &set); Tp::AccountManagerPtr mAM; TestConnHelper *mConn; int mAccountsCount; bool mCreatingAccount; QHash mProps; }; #define TEST_VERIFY_PROPERTY_CHANGE(acc, Type, PropertyName, propertyName, expectedValue) \ TEST_VERIFY_PROPERTY_CHANGE_EXTENDED(acc, Type, PropertyName, propertyName, \ propertyName ## Changed, acc->set ## PropertyName(expectedValue), expectedValue) #define TEST_VERIFY_PROPERTY_CHANGE_EXTENDED(acc, Type, PropertyName, propertyName, signalName, po, expectedValue) \ { \ mProps.clear(); \ qDebug().nospace() << "connecting to " << #propertyName << "Changed()"; \ QVERIFY(connect(acc.data(), \ SIGNAL(signalName(Type)), \ SLOT(onAccount ## PropertyName ## Changed(Type)))); \ qDebug().nospace() << "setting " << #propertyName; \ QVERIFY(connect(po, \ SIGNAL(finished(Tp::PendingOperation*)), \ SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); \ QCOMPARE(mLoop->exec(), 0); \ \ if (!mProps.contains(QLatin1String(#PropertyName))) { \ qDebug().nospace() << "waiting for the " << #propertyName << "Changed signal"; \ QCOMPARE(mLoop->exec(), 0); \ } else { \ qDebug().nospace() << "not waiting for " << #propertyName << "Changed because we already got it"; \ } \ \ QCOMPARE(acc->propertyName(), expectedValue); \ QCOMPARE(acc->propertyName(), \ mProps[QLatin1String(#PropertyName)].value< Type >()); \ \ QVERIFY(disconnect(acc.data(), \ SIGNAL(signalName(Type)), \ this, \ SLOT(onAccount ## PropertyName ## Changed(Type)))); \ processDBusQueue(acc.data()); \ } #define TEST_IMPLEMENT_PROPERTY_CHANGE_SLOT(Type, PropertyName) \ void TestAccountBasics::onAccount ## PropertyName ## Changed(Type value) \ { \ mProps[QLatin1String(#PropertyName)] = qVariantFromValue(value); \ mLoop->exit(0); \ } void TestAccountBasics::onNewAccount(const Tp::AccountPtr &acc) { Q_UNUSED(acc); mAccountsCount++; if (!mCreatingAccount) { mLoop->exit(0); } } TEST_IMPLEMENT_PROPERTY_CHANGE_SLOT(const QString &, ServiceName) TEST_IMPLEMENT_PROPERTY_CHANGE_SLOT(const QString &, DisplayName) TEST_IMPLEMENT_PROPERTY_CHANGE_SLOT(const QString &, IconName) TEST_IMPLEMENT_PROPERTY_CHANGE_SLOT(const QString &, Nickname) TEST_IMPLEMENT_PROPERTY_CHANGE_SLOT(const Avatar &, Avatar) TEST_IMPLEMENT_PROPERTY_CHANGE_SLOT(const QVariantMap &, Parameters) TEST_IMPLEMENT_PROPERTY_CHANGE_SLOT(const ConnectionCapabilities &, Capabilities) TEST_IMPLEMENT_PROPERTY_CHANGE_SLOT(bool, ConnectsAutomatically) TEST_IMPLEMENT_PROPERTY_CHANGE_SLOT(const Presence &, AutomaticPresence) TEST_IMPLEMENT_PROPERTY_CHANGE_SLOT(const Presence &, RequestedPresence) TEST_IMPLEMENT_PROPERTY_CHANGE_SLOT(const Presence &, CurrentPresence) QStringList TestAccountBasics::pathsForAccounts(const QList &list) { QStringList ret; Q_FOREACH (const AccountPtr &account, list) { ret << account->objectPath(); } return ret; } QStringList TestAccountBasics::pathsForAccounts(const AccountSetPtr &set) { QStringList ret; Q_FOREACH (const AccountPtr &account, set->accounts()) { ret << account->objectPath(); } return ret; } void TestAccountBasics::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("account-basics"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); mAM = AccountManager::create(AccountFactory::create(QDBusConnection::sessionBus(), Account::FeatureCore | Account::FeatureCapabilities)); QVERIFY(!mAM->isReady()); mConn = new TestConnHelper(this, EXAMPLE_TYPE_ECHO_2_CONNECTION, "account", "me@example.com", "protocol", "echo2", NULL); QVERIFY(mConn->connect()); } void TestAccountBasics::init() { mProps.clear(); mCreatingAccount = false; initImpl(); } void TestAccountBasics::testBasics() { QVERIFY(connect(mAM->becomeReady(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(mAM->isReady()); QCOMPARE(mAM->interfaces(), QStringList()); QCOMPARE(mAM->supportedAccountProperties(), QStringList() << QLatin1String("org.freedesktop.Telepathy.Account.Enabled")); QVERIFY(connect(mAM.data(), SIGNAL(newAccount(const Tp::AccountPtr &)), SLOT(onNewAccount(const Tp::AccountPtr &)))); QVariantMap parameters; parameters[QLatin1String("account")] = QLatin1String("foobar"); PendingAccount *pacc = mAM->createAccount(QLatin1String("foo"), QLatin1String("bar"), QLatin1String("foobar"), parameters); QVERIFY(connect(pacc, SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); mCreatingAccount = true; QCOMPARE(mLoop->exec(), 0); mCreatingAccount = false; QVERIFY(pacc->account()); while (mAccountsCount != 1) { QCOMPARE(mLoop->exec(), 0); } processDBusQueue(mConn->client().data()); QStringList paths; QString accPath(QLatin1String("/org/freedesktop/Telepathy/Account/foo/bar/Account0")); QCOMPARE(pathsForAccounts(mAM->allAccounts()), QStringList() << accPath); QList accs = mAM->accountsForObjectPaths( QStringList() << accPath << QLatin1String("/invalid/path")); QCOMPARE(accs.size(), 2); QCOMPARE(accs[0]->objectPath(), accPath); QVERIFY(!accs[1]); QVERIFY(mAM->allAccounts()[0]->isReady( Account::FeatureCore | Account::FeatureCapabilities)); AccountPtr acc = Account::create(mAM->dbusConnection(), mAM->busName(), QLatin1String("/org/freedesktop/Telepathy/Account/foo/bar/Account0"), mAM->connectionFactory(), mAM->channelFactory(), mAM->contactFactory()); QVERIFY(connect(acc->becomeReady(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(acc->isReady()); QCOMPARE(acc->connectionFactory(), mAM->connectionFactory()); QCOMPARE(acc->channelFactory(), mAM->channelFactory()); QCOMPARE(acc->contactFactory(), mAM->contactFactory()); QVERIFY(acc->isValidAccount()); QVERIFY(acc->isEnabled()); QCOMPARE(acc->cmName(), QLatin1String("foo")); QCOMPARE(acc->protocolName(), QLatin1String("bar")); // Service name is empty, fallback to protocol name QCOMPARE(acc->serviceName(), QLatin1String("bar")); // FeatureProfile not ready yet QVERIFY(!acc->profile()); QCOMPARE(acc->displayName(), QString(QLatin1String("foobar (account 0)"))); QCOMPARE(acc->iconName(), QLatin1String("bob.png")); QCOMPARE(acc->nickname(), QLatin1String("Bob")); // FeatureProtocolInfo not ready yet QVERIFY(!acc->avatarRequirements().isValid()); // FeatureAvatar not ready yet QVERIFY(acc->avatar().avatarData.isEmpty()); QVERIFY(acc->avatar().MIMEType.isEmpty()); QCOMPARE(acc->parameters().size(), 1); QVERIFY(acc->parameters().contains(QLatin1String("account"))); QCOMPARE(qdbus_cast(acc->parameters().value(QLatin1String("account"))), QLatin1String("foobar")); // FeatureProtocolInfo not ready yet QVERIFY(!acc->protocolInfo().isValid()); // FeatureCapabilities not ready yet ConnectionCapabilities caps = acc->capabilities(); QVERIFY(!caps.isSpecificToContact()); QVERIFY(!caps.textChats()); QVERIFY(!caps.streamedMediaCalls()); QVERIFY(!caps.streamedMediaAudioCalls()); QVERIFY(!caps.streamedMediaVideoCalls()); QVERIFY(!caps.streamedMediaVideoCallsWithAudio()); QVERIFY(!caps.upgradingStreamedMediaCalls()); QVERIFY(!caps.fileTransfers()); QVERIFY(!caps.textChatrooms()); QVERIFY(!caps.conferenceStreamedMediaCalls()); QVERIFY(!caps.conferenceStreamedMediaCallsWithInvitees()); QVERIFY(!caps.conferenceTextChats()); QVERIFY(!caps.conferenceTextChatsWithInvitees()); QVERIFY(!caps.conferenceTextChatrooms()); QVERIFY(!caps.conferenceTextChatroomsWithInvitees()); QVERIFY(!caps.contactSearches()); QVERIFY(!caps.contactSearchesWithSpecificServer()); QVERIFY(!caps.contactSearchesWithLimit()); QVERIFY(!caps.streamTubes()); QVERIFY(caps.allClassSpecs().isEmpty()); QVERIFY(!acc->connectsAutomatically()); QVERIFY(!acc->hasBeenOnline()); QCOMPARE(acc->connectionStatus(), ConnectionStatusDisconnected); QCOMPARE(acc->connectionStatusReason(), ConnectionStatusReasonNoneSpecified); QVERIFY(acc->connectionError().isEmpty()); QVERIFY(!acc->connectionErrorDetails().isValid()); QVERIFY(acc->connectionErrorDetails().allDetails().isEmpty()); QVERIFY(!acc->connection()); QVERIFY(!acc->isChangingPresence()); // Neither FeatureProtocolInfo or FeatureProfile are ready yet and we have no connection PresenceSpecList expectedPresences; { SimpleStatusSpec prSpec = { ConnectionPresenceTypeAvailable, true, false }; expectedPresences.append(PresenceSpec(QLatin1String("available"), prSpec)); } { SimpleStatusSpec prSpec = { ConnectionPresenceTypeOffline, true, false }; expectedPresences.append(PresenceSpec(QLatin1String("offline"), prSpec)); } qSort(expectedPresences); PresenceSpecList presences = acc->allowedPresenceStatuses(false); qSort(presences); QCOMPARE(presences.size(), 2); QCOMPARE(presences, expectedPresences); presences = acc->allowedPresenceStatuses(true); qSort(presences); QCOMPARE(presences.size(), 2); QCOMPARE(presences, expectedPresences); // No connection QCOMPARE(acc->maxPresenceStatusMessageLength(), static_cast(0)); QCOMPARE(acc->automaticPresence(), Presence::available()); QCOMPARE(acc->currentPresence(), Presence::offline()); QCOMPARE(acc->requestedPresence(), Presence::offline()); QVERIFY(!acc->isOnline()); QCOMPARE(acc->uniqueIdentifier(), QLatin1String("foo/bar/Account0")); QCOMPARE(acc->normalizedName(), QLatin1String("bob")); TEST_VERIFY_PROPERTY_CHANGE(acc, QString, DisplayName, displayName, QLatin1String("foo@bar")); TEST_VERIFY_PROPERTY_CHANGE(acc, QString, IconName, iconName, QLatin1String("im-foo")); // Setting icon to an empty string should fallback to im-$protocol as FeatureProtocolInfo and // FeatureProtocolInfo are not ready yet TEST_VERIFY_PROPERTY_CHANGE_EXTENDED(acc, QString, IconName, iconName, iconNameChanged, acc->setIconName(QString()), QLatin1String("im-bar")); TEST_VERIFY_PROPERTY_CHANGE(acc, QString, Nickname, nickname, QLatin1String("Bob rocks!")); qDebug() << "making Account::FeatureAvatar ready"; QVERIFY(connect(acc->becomeReady(Account::FeatureAvatar), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(acc->isReady(Account::FeatureAvatar)); Avatar expectedAvatar = { QByteArray("asdfg"), QLatin1String("image/jpeg") }; TEST_VERIFY_PROPERTY_CHANGE(acc, Tp::Avatar, Avatar, avatar, expectedAvatar); QVariantMap expectedParameters = acc->parameters(); expectedParameters[QLatin1String("foo")] = QLatin1String("bar"); TEST_VERIFY_PROPERTY_CHANGE_EXTENDED(acc, QVariantMap, Parameters, parameters, parametersChanged, acc->updateParameters(expectedParameters, QStringList()), expectedParameters); TEST_VERIFY_PROPERTY_CHANGE_EXTENDED(acc, bool, ConnectsAutomatically, connectsAutomatically, connectsAutomaticallyPropertyChanged, acc->setConnectsAutomatically(true), true); TEST_VERIFY_PROPERTY_CHANGE(acc, Tp::Presence, AutomaticPresence, automaticPresence, Presence::busy()); // Changing requested presence will also change hasBeenOnline/isOnline/currentPresence Presence expectedPresence = Presence::busy(); TEST_VERIFY_PROPERTY_CHANGE(acc, Tp::Presence, RequestedPresence, requestedPresence, expectedPresence); QVERIFY(acc->hasBeenOnline()); QVERIFY(acc->isOnline()); QCOMPARE(acc->currentPresence(), expectedPresence); qDebug() << "creating another account"; pacc = mAM->createAccount(QLatin1String("spurious"), QLatin1String("normal"), QLatin1String("foobar"), QVariantMap()); QVERIFY(connect(pacc, SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); mCreatingAccount = true; QCOMPARE(mLoop->exec(), 0); mCreatingAccount = false; while (mAccountsCount != 2) { QCOMPARE(mLoop->exec(), 0); } processDBusQueue(mConn->client().data()); acc = Account::create(mAM->dbusConnection(), mAM->busName(), QLatin1String("/org/freedesktop/Telepathy/Account/spurious/normal/Account0"), mAM->connectionFactory(), mAM->channelFactory(), mAM->contactFactory()); QVERIFY(connect(acc->becomeReady(), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(acc->isReady()); QCOMPARE(acc->iconName(), QLatin1String("bob.png")); // Setting icon to an empty string should fallback to Profile/ProtocolInfo/im-$protocol TEST_VERIFY_PROPERTY_CHANGE_EXTENDED(acc, QString, IconName, iconName, iconNameChanged, acc->setIconName(QString()), QLatin1String("im-normal")); QVERIFY(connect(acc->becomeReady(Account::FeatureProtocolInfo), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(acc->isReady(Account::FeatureProtocolInfo)); // This time it's fetched from the protocol object (although it probably internally just // infers it from the protocol name too) QCOMPARE(acc->iconName(), QLatin1String("im-normal")); ProtocolInfo protocolInfo = acc->protocolInfo(); QVERIFY(protocolInfo.isValid()); QCOMPARE(protocolInfo.iconName(), QLatin1String("im-normal")); QVERIFY(protocolInfo.hasParameter(QLatin1String("account"))); QVERIFY(protocolInfo.hasParameter(QLatin1String("password"))); QVERIFY(protocolInfo.hasParameter(QLatin1String("register"))); QVERIFY(!protocolInfo.hasParameter(QLatin1String("bogusparam"))); QCOMPARE(protocolInfo.parameters().size(), 3); QVERIFY(connect(acc->becomeReady(Account::FeatureProfile), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(acc->isReady(Account::FeatureProfile)); ProfilePtr profile = acc->profile(); QVERIFY(!profile.isNull()); QVERIFY(profile->isFake()); QVERIFY(profile->isValid()); QCOMPARE(profile->serviceName(), QString(QLatin1String("%1-%2")) .arg(acc->cmName()).arg(acc->serviceName())); QCOMPARE(profile->type(), QLatin1String("IM")); QCOMPARE(profile->provider(), QString()); QCOMPARE(profile->name(), acc->protocolName()); QCOMPARE(profile->cmName(), acc->cmName()); QCOMPARE(profile->protocolName(), acc->protocolName()); QVERIFY(!profile->parameters().isEmpty()); QVERIFY(profile->allowOtherPresences()); QVERIFY(profile->presences().isEmpty()); QVERIFY(profile->unsupportedChannelClassSpecs().isEmpty()); QCOMPARE(acc->serviceName(), acc->protocolName()); TEST_VERIFY_PROPERTY_CHANGE(acc, QString, ServiceName, serviceName, QLatin1String("spurious-service")); QVERIFY(connect(acc->becomeReady(Account::FeatureAvatar), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(acc->isReady(Account::FeatureAvatar)); QVERIFY(acc->avatar().avatarData.isEmpty()); QCOMPARE(acc->avatar().MIMEType, QString(QLatin1String("image/png"))); // make redundant becomeReady calls QVERIFY(connect(acc->becomeReady(Account::FeatureAvatar | Account::FeatureProtocolInfo), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(acc->isReady(Account::FeatureAvatar | Account::FeatureProtocolInfo)); QVERIFY(acc->avatar().avatarData.isEmpty()); QCOMPARE(acc->avatar().MIMEType, QString(QLatin1String("image/png"))); protocolInfo = acc->protocolInfo(); QVERIFY(protocolInfo.isValid()); QCOMPARE(protocolInfo.iconName(), QLatin1String("im-normal")); QVERIFY(protocolInfo.hasParameter(QLatin1String("account"))); QVERIFY(protocolInfo.hasParameter(QLatin1String("password"))); QVERIFY(protocolInfo.hasParameter(QLatin1String("register"))); QVERIFY(connect(acc->becomeReady(Account::FeatureCapabilities), SIGNAL(finished(Tp::PendingOperation *)), SLOT(expectSuccessfulCall(Tp::PendingOperation *)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(acc->isReady(Account::FeatureCapabilities)); // using protocol info caps = acc->capabilities(); QVERIFY(caps.textChats()); // set new service name will change caps, icon and serviceName QVERIFY(connect(acc.data(), SIGNAL(capabilitiesChanged(const Tp::ConnectionCapabilities &)), SLOT(onAccountCapabilitiesChanged(const Tp::ConnectionCapabilities &)))); TEST_VERIFY_PROPERTY_CHANGE(acc, QString, ServiceName, serviceName, QLatin1String("test-profile")); while (!mProps.contains(QLatin1String("IconName")) && !mProps.contains(QLatin1String("Capabilities"))) { QCOMPARE(mLoop->exec(), 0); } // Now that both FeatureProtocolInfo and FeatureProfile are ready, let's check the allowed // presences expectedPresences.clear(); { SimpleStatusSpec prSpec = { ConnectionPresenceTypeAvailable, true, true }; expectedPresences.append(PresenceSpec(QLatin1String("available"), prSpec)); } { SimpleStatusSpec prSpec = { ConnectionPresenceTypeAway, true, true }; expectedPresences.append(PresenceSpec(QLatin1String("away"), prSpec)); } { SimpleStatusSpec prSpec = { ConnectionPresenceTypeOffline, true, false }; expectedPresences.append(PresenceSpec(QLatin1String("offline"), prSpec)); } qSort(expectedPresences); presences = acc->allowedPresenceStatuses(false); qSort(presences); QCOMPARE(presences.size(), 3); QCOMPARE(presences, expectedPresences); { SimpleStatusSpec prSpec = { ConnectionPresenceTypeExtendedAway, false, false }; expectedPresences.append(PresenceSpec(QLatin1String("xa"), prSpec)); } qSort(expectedPresences); presences = acc->allowedPresenceStatuses(true); qSort(presences); QCOMPARE(presences.size(), 4); QCOMPARE(presences, expectedPresences); QCOMPARE(acc->iconName(), QLatin1String("test-profile-icon")); // using merged protocol info caps and profile caps caps = acc->capabilities(); QVERIFY(!caps.textChats()); Client::DBus::PropertiesInterface *accPropertiesInterface = acc->interface(); // simulate that the account has a connection QVERIFY(connect(new PendingVoid( accPropertiesInterface->Set( TP_QT_IFACE_ACCOUNT, QLatin1String("Connection"), QDBusVariant(mConn->objectPath())), acc), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); // wait for the connection to be built in Account while (acc->connection().isNull()) { QCOMPARE(mLoop->exec(), 0); } QVERIFY(connect(acc->connection()->becomeReady(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(acc->isReady()); // once the status change the capabilities will be updated mProps.clear(); QVERIFY(connect(acc->setRequestedPresence(Presence::available()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); while (!mProps.contains(QLatin1String("Capabilities"))) { QCOMPARE(mLoop->exec(), 0); } // using connection caps now caps = acc->capabilities(); QVERIFY(caps.textChats()); QVERIFY(!caps.textChatrooms()); QVERIFY(!caps.streamedMediaCalls()); QVERIFY(!caps.streamedMediaAudioCalls()); QVERIFY(!caps.streamedMediaVideoCalls()); QVERIFY(!caps.streamedMediaVideoCallsWithAudio()); QVERIFY(!caps.upgradingStreamedMediaCalls()); // once the status change the capabilities will be updated mProps.clear(); QVERIFY(connect(new PendingVoid( accPropertiesInterface->Set( TP_QT_IFACE_ACCOUNT, QLatin1String("Connection"), QDBusVariant(QLatin1String("/"))), acc), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QVERIFY(connect(acc->setRequestedPresence(Presence::offline()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); while (!mProps.contains(QLatin1String("Capabilities"))) { QCOMPARE(mLoop->exec(), 0); } // back to using merged protocol info caps and profile caps caps = acc->capabilities(); QVERIFY(!caps.textChats()); processDBusQueue(mConn->client().data()); } void TestAccountBasics::cleanup() { cleanupImpl(); } void TestAccountBasics::cleanupTestCase() { if (mConn) { QVERIFY(mConn->disconnect()); delete mConn; } cleanupTestCaseImpl(); } QTEST_MAIN(TestAccountBasics) #include "_gen/account-basics.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/conn-roster-groups-legacy.cpp0000644000175200001440000010055112000056607026251 0ustar00collabora-develusers00000000000000#include #include #include #include #define TP_QT_ENABLE_LOWLEVEL_API #include #include #include #include #include #include #include #include #include #include #include #include using namespace Tp; class TestConnRosterGroupsLegacy : public Test { Q_OBJECT public: TestConnRosterGroupsLegacy(QObject *parent = 0) : Test(parent), mConnService(0), mContactsAddedToGroup(0), mContactsRemovedFromGroup(0) { } protected Q_SLOTS: void onGroupAdded(const QString &group); void onGroupRemoved(const QString &group); void onContactAddedToGroup(const QString &group); void onContactRemovedFromGroup(const QString &group); void expectConnInvalidated(); void expectContact(Tp::PendingOperation*); void exitOnStateSuccess(Tp::ContactListState); private Q_SLOTS: void initTestCase(); void init(); void testGroupsAfterStateChange(); void testIntrospectAfterStateChange(); void testRosterGroups(); void testNotADeathTrap(); void cleanup(); void cleanupTestCase(); private: QString mConnName, mConnPath; ExampleContactListConnection *mConnService; ConnectionPtr mConn; ContactPtr mContact; QString mGroupAdded; QString mGroupRemoved; int mContactsAddedToGroup; int mContactsRemovedFromGroup; bool mConnInvalidated; }; void TestConnRosterGroupsLegacy::onGroupAdded(const QString &group) { mGroupAdded = group; mLoop->exit(0); } void TestConnRosterGroupsLegacy::onGroupRemoved(const QString &group) { mGroupRemoved = group; mLoop->exit(0); } void TestConnRosterGroupsLegacy::onContactAddedToGroup(const QString &group) { mContactsAddedToGroup++; mLoop->exit(0); } void TestConnRosterGroupsLegacy::onContactRemovedFromGroup(const QString &group) { mContactsRemovedFromGroup++; mLoop->exit(0); } void TestConnRosterGroupsLegacy::expectConnInvalidated() { mConnInvalidated = true; mLoop->exit(0); } void TestConnRosterGroupsLegacy::expectContact(Tp::PendingOperation *op) { PendingContacts *contacts = qobject_cast(op); QVERIFY(contacts != 0); QVERIFY(contacts->isValid()); QCOMPARE(contacts->contacts().length(), 1); mContact = contacts->contacts()[0]; mLoop->exit(0); } void TestConnRosterGroupsLegacy::exitOnStateSuccess(Tp::ContactListState state) { qDebug() << "got contact list state" << state; if (state == ContactListStateSuccess) { mLoop->exit(0); } } void TestConnRosterGroupsLegacy::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("conn-roster-groups"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); } void TestConnRosterGroupsLegacy::init() { gchar *name; gchar *connPath; GError *error = 0; mConnService = EXAMPLE_CONTACT_LIST_CONNECTION(g_object_new( EXAMPLE_TYPE_CONTACT_LIST_CONNECTION, "account", "me@example.com", "simulation-delay", 0, "protocol", "example-contact-list", NULL)); QVERIFY(mConnService != 0); QVERIFY(tp_base_connection_register(TP_BASE_CONNECTION(mConnService), "foo", &name, &connPath, &error)); QVERIFY(error == 0); QVERIFY(name != 0); QVERIFY(connPath != 0); mConnName = QLatin1String(name); mConnPath = QLatin1String(connPath); g_free(name); g_free(connPath); initImpl(); mConnInvalidated = false; } void TestConnRosterGroupsLegacy::testGroupsAfterStateChange() { // Create a conn and make the roster groups related features ready mConn = Connection::create(mConnName, mConnPath, ChannelFactory::create(QDBusConnection::sessionBus()), ContactFactory::create()); ContactManagerPtr contactManager = mConn->contactManager(); Features features = Features() << Connection::FeatureRoster << Connection::FeatureRosterGroups; QVERIFY(connect(mConn->becomeReady(features), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mConn->isReady(Connection::FeatureRoster), true); QCOMPARE(mConn->isReady(Connection::FeatureRosterGroups), true); // Now start connecting it, and wait for the ContactManager state to turn to Success QVERIFY(connect(contactManager.data(), SIGNAL(stateChanged(Tp::ContactListState)), SLOT(exitOnStateSuccess(Tp::ContactListState)))); mConn->lowlevel()->requestConnect(); QCOMPARE(mLoop->exec(), 0); QCOMPARE(static_cast(contactManager->state()), static_cast(ContactListStateSuccess)); // The conn should be valid and have the roster groups features ready when it emits Success QVERIFY(mConn->isValid()); QCOMPARE(mConn->isReady(Connection::FeatureRoster), true); QCOMPARE(mConn->isReady(Connection::FeatureRosterGroups), true); // We should have all the group data downloaded now, check for that QStringList expectedGroups; expectedGroups << QLatin1String("Cambridge") << QLatin1String("Francophones") << QLatin1String("Montreal"); expectedGroups.sort(); QStringList groups = contactManager->allKnownGroups(); groups.sort(); QCOMPARE(groups, expectedGroups); // Cambridge { QStringList expectedContacts; expectedContacts << QLatin1String("geraldine@example.com") << QLatin1String("helen@example.com") << QLatin1String("guillaume@example.com") << QLatin1String("sjoerd@example.com"); expectedContacts.sort(); QStringList contacts; Q_FOREACH (const ContactPtr &contact, contactManager->groupContacts(QLatin1String("Cambridge"))) { contacts << contact->id(); } contacts.sort(); QCOMPARE(contacts, expectedContacts); } // Francophones { QStringList expectedContacts; expectedContacts << QLatin1String("olivier@example.com") << QLatin1String("geraldine@example.com") << QLatin1String("guillaume@example.com"); expectedContacts.sort(); QStringList contacts; Q_FOREACH (const ContactPtr &contact, contactManager->groupContacts(QLatin1String("Francophones"))) { contacts << contact->id(); } contacts.sort(); QCOMPARE(contacts, expectedContacts); } // Montreal { QStringList expectedContacts; expectedContacts << QLatin1String("olivier@example.com"); expectedContacts.sort(); QStringList contacts; Q_FOREACH (const ContactPtr &contact, contactManager->groupContacts(QLatin1String("Montreal"))) { contacts << contact->id(); } contacts.sort(); QCOMPARE(contacts, expectedContacts); } } void TestConnRosterGroupsLegacy::testIntrospectAfterStateChange() { // Create a conn and make the roster feature ready mConn = Connection::create(mConnName, mConnPath, ChannelFactory::create(QDBusConnection::sessionBus()), ContactFactory::create()); ContactManagerPtr contactManager = mConn->contactManager(); Features features = Features() << Connection::FeatureRoster; QVERIFY(connect(mConn->becomeReady(features), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mConn->isReady(Connection::FeatureRoster), true); QCOMPARE(mConn->isReady(Connection::FeatureRosterGroups), false); // Now start connecting it, and wait for the ContactManager state to turn to Success QVERIFY(connect(contactManager.data(), SIGNAL(stateChanged(Tp::ContactListState)), SLOT(exitOnStateSuccess(Tp::ContactListState)))); mConn->lowlevel()->requestConnect(); QCOMPARE(mLoop->exec(), 0); QCOMPARE(static_cast(contactManager->state()), static_cast(ContactListStateSuccess)); // The conn should be valid and have the roster feature ready when it emits Success, but not // RosterGroups because we didn't request it QVERIFY(mConn->isValid()); QCOMPARE(mConn->isReady(Connection::FeatureRoster), true); QCOMPARE(mConn->isReady(Connection::FeatureRosterGroups), false); // We should have roster contacts now, but no groups QVERIFY(!contactManager->allKnownContacts().isEmpty()); QVERIFY(contactManager->allKnownGroups().isEmpty()); // Make RosterGroups ready too features = Features() << Connection::FeatureRosterGroups; QVERIFY(connect(mConn->becomeReady(features), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mConn->isReady(Connection::FeatureRoster), true); QCOMPARE(mConn->isReady(Connection::FeatureRosterGroups), true); // We should still have the contacts, and the state should be success QVERIFY(!contactManager->allKnownContacts().isEmpty()); QCOMPARE(static_cast(contactManager->state()), static_cast(ContactListStateSuccess)); // We should have all the group data downloaded now, check for that QStringList expectedGroups; expectedGroups << QLatin1String("Cambridge") << QLatin1String("Francophones") << QLatin1String("Montreal"); expectedGroups.sort(); QStringList groups = contactManager->allKnownGroups(); groups.sort(); QCOMPARE(groups, expectedGroups); // Cambridge { QStringList expectedContacts; expectedContacts << QLatin1String("geraldine@example.com") << QLatin1String("helen@example.com") << QLatin1String("guillaume@example.com") << QLatin1String("sjoerd@example.com"); expectedContacts.sort(); QStringList contacts; Q_FOREACH (const ContactPtr &contact, contactManager->groupContacts(QLatin1String("Cambridge"))) { contacts << contact->id(); } contacts.sort(); QCOMPARE(contacts, expectedContacts); } } void TestConnRosterGroupsLegacy::testRosterGroups() { mConn = Connection::create(mConnName, mConnPath, ChannelFactory::create(QDBusConnection::sessionBus()), ContactFactory::create()); QVERIFY(connect(mConn->lowlevel()->requestConnect(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mConn->isReady(), true); QCOMPARE(mConn->status(), ConnectionStatusConnected); Features features = Features() << Connection::FeatureRoster << Connection::FeatureRosterGroups; QVERIFY(connect(mConn->becomeReady(features), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mConn->isReady(features), true); ContactManagerPtr contactManager = mConn->contactManager(); QStringList expectedGroups; expectedGroups << QLatin1String("Cambridge") << QLatin1String("Francophones") << QLatin1String("Montreal"); expectedGroups.sort(); QStringList groups = contactManager->allKnownGroups(); groups.sort(); QCOMPARE(groups, expectedGroups); // Cambridge { QStringList expectedContacts; expectedContacts << QLatin1String("geraldine@example.com") << QLatin1String("helen@example.com") << QLatin1String("guillaume@example.com") << QLatin1String("sjoerd@example.com"); expectedContacts.sort(); QStringList contacts; Q_FOREACH (const ContactPtr &contact, contactManager->groupContacts(QLatin1String("Cambridge"))) { contacts << contact->id(); } contacts.sort(); QCOMPARE(contacts, expectedContacts); } // Francophones { QStringList expectedContacts; expectedContacts << QLatin1String("olivier@example.com") << QLatin1String("geraldine@example.com") << QLatin1String("guillaume@example.com"); expectedContacts.sort(); QStringList contacts; Q_FOREACH (const ContactPtr &contact, contactManager->groupContacts(QLatin1String("Francophones"))) { contacts << contact->id(); } contacts.sort(); QCOMPARE(contacts, expectedContacts); } // Montreal { QStringList expectedContacts; expectedContacts << QLatin1String("olivier@example.com"); expectedContacts.sort(); QStringList contacts; Q_FOREACH (const ContactPtr &contact, contactManager->groupContacts(QLatin1String("Montreal"))) { contacts << contact->id(); } contacts.sort(); QCOMPARE(contacts, expectedContacts); } QString group(QLatin1String("foo")); QVERIFY(contactManager->groupContacts(group).isEmpty()); // add group foo QVERIFY(connect(contactManager.data(), SIGNAL(groupAdded(const QString&)), SLOT(onGroupAdded(const QString&)))); QVERIFY(connect(contactManager->addGroup(group), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); while (mGroupAdded.isEmpty()) { QCOMPARE(mLoop->exec(), 0); } QCOMPARE(mGroupAdded, group); expectedGroups << group; expectedGroups.sort(); groups = contactManager->allKnownGroups(); groups.sort(); QCOMPARE(groups, expectedGroups); // add Montreal contacts to group foo Contacts contacts = contactManager->groupContacts(QLatin1String("Montreal")); Q_FOREACH (const ContactPtr &contact, contacts) { QVERIFY(connect(contact.data(), SIGNAL(addedToGroup(const QString&)), SLOT(onContactAddedToGroup(const QString&)))); } QVERIFY(connect(contactManager->addContactsToGroup(group, contacts.toList()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); while (mContactsAddedToGroup != contacts.size()) { QCOMPARE(mLoop->exec(), 0); } Q_FOREACH (const ContactPtr &contact, contacts) { QVERIFY(contact->groups().contains(group)); } // remove all contacts from group foo contacts = contactManager->groupContacts(group); Q_FOREACH (const ContactPtr &contact, contacts) { QVERIFY(connect(contact.data(), SIGNAL(removedFromGroup(const QString&)), SLOT(onContactRemovedFromGroup(const QString&)))); } QVERIFY(connect(contactManager->removeContactsFromGroup(group, contacts.toList()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); while (mContactsRemovedFromGroup != contacts.size()) { QCOMPARE(mLoop->exec(), 0); } Q_FOREACH (const ContactPtr &contact, contacts) { QVERIFY(!contact->groups().contains(group)); } // add group foo QVERIFY(connect(contactManager.data(), SIGNAL(groupRemoved(const QString&)), SLOT(onGroupRemoved(const QString&)))); QVERIFY(connect(contactManager->removeGroup(group), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); while (mGroupRemoved.isEmpty()) { QCOMPARE(mLoop->exec(), 0); } QCOMPARE(mGroupRemoved, group); expectedGroups.removeOne(group); expectedGroups.sort(); groups = contactManager->allKnownGroups(); groups.sort(); QCOMPARE(groups, expectedGroups); } /** * Verify that ContactManager isn't a death-trap. * * Background: Connection::contactManager() used to unpredictably waver between NULL and the real * manager when the connection was in the process of being disconnected / otherwise invalidated, * which led to a great many segfaults, which was especially unfortunate considering the * ContactManager methods didn't do much any checks at all. */ void TestConnRosterGroupsLegacy::testNotADeathTrap() { mConn = Connection::create(mConnName, mConnPath, ChannelFactory::create(QDBusConnection::sessionBus()), ContactFactory::create()); QCOMPARE(mConn->isReady(), false); // Check that the contact manager doesn't crash, but returns an error (because the conn isn't // ready) QVERIFY(!mConn->contactManager().isNull()); QVERIFY(connect(mConn->contactManager()->contactsForIdentifiers(QStringList()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->lowlevel()->requestConnect(), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mConn->isReady(), true); QCOMPARE(mConn->status(), ConnectionStatusConnected); // As the conn is now ready, the contact building functions shouldn't return an error now QVERIFY(!mConn->contactManager().isNull()); QVERIFY(connect(mConn->contactManager()->contactsForIdentifiers(QStringList()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->contactsForHandles(UIntList()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->upgradeContacts(QList(), Features()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); // In fact, let's build a contact for future use QVERIFY(connect(mConn->contactManager()->contactsForIdentifiers( QStringList() << QLatin1String("friendorfoe@example.com")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectContact(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(mContact->id() == QLatin1String("friendorfoe@example.com")); // Roster operations SHOULD still fail though, as FeatureRoster isn't ready QVERIFY(connect(mConn->contactManager()->requestPresenceSubscription( QList() << mContact, QLatin1String("I just want to see you fail")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->removePresenceSubscription( QList() << mContact, QLatin1String("I just want to see you fail")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->authorizePresencePublication( QList() << mContact, QLatin1String("I just want to see you fail")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->removePresencePublication( QList() << mContact, QLatin1String("I just want to see you fail")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->blockContacts(QList() << mContact), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); // Now, make Roster ready Features features = Features() << Connection::FeatureRoster; QVERIFY(connect(mConn->becomeReady(features), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mConn->isReady(features), true); // The roster functions should work now QVERIFY(connect(mConn->contactManager()->requestPresenceSubscription( QList() << mContact, QLatin1String("Please don't fail")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(mContact->subscriptionState() != Contact::PresenceStateNo); QVERIFY(connect(mConn->contactManager()->removePresenceSubscription( QList() << mContact, QLatin1String("Please don't fail")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mContact->subscriptionState(), Contact::PresenceStateNo); QVERIFY(connect(mConn->contactManager()->authorizePresencePublication( QList() << mContact, QLatin1String("Please don't fail")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->removePresencePublication( QList() << mContact, QLatin1String("Please don't fail")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); // The test CM doesn't support block, so it will never be successful // ... but still not the RosterGroup ones QVERIFY(connect(mConn->contactManager()->addGroup(QLatin1String("Those who failed")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->removeGroup(QLatin1String("Those who failed")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->addContactsToGroup(QLatin1String("Those who failed"), QList() << mContact), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->removeContactsFromGroup(QLatin1String("Those who failed"), QList() << mContact), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); // Make RosterGroups ready too features = Features() << Connection::FeatureRosterGroups; QVERIFY(connect(mConn->becomeReady(features), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mConn->isReady(features), true); // Now that Core, Roster and RosterGroups are all ready, everything should work QVERIFY(!mConn->contactManager().isNull()); QVERIFY(connect(mConn->contactManager()->contactsForIdentifiers(QStringList()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->contactsForHandles(UIntList()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->upgradeContacts(QList(), Features()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->requestPresenceSubscription( QList() << mContact, QLatin1String("Please don't fail")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(mContact->subscriptionState() != Contact::PresenceStateNo); QVERIFY(connect(mConn->contactManager()->removePresenceSubscription( QList() << mContact, QLatin1String("Please don't fail")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QCOMPARE(mContact->subscriptionState(), Contact::PresenceStateNo); QVERIFY(connect(mConn->contactManager()->authorizePresencePublication( QList() << mContact, QLatin1String("Please don't fail")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->removePresencePublication( QList() << mContact, QLatin1String("Please don't fail")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); // The test CM doesn't support block, so it will never be successful QVERIFY(connect(mConn->contactManager()->addGroup(QLatin1String("My successful entourage")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); qDebug() << "waiting for group to be added"; // FIXME: Remove this once fd.o #29728 is fixed while (!mConn->contactManager()->allKnownGroups().contains(QLatin1String("My successful entourage"))) { mLoop->processEvents(); } qDebug() << "group has been added"; QVERIFY(connect(mConn->contactManager()->addContactsToGroup(QLatin1String("My successful entourage"), QList() << mContact), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->removeContactsFromGroup(QLatin1String("My successful entourage"), QList() << mContact), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->removeGroup(QLatin1String("My successful entourage")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectSuccessfulCall(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); // Now, invalidate the connection by disconnecting it QVERIFY(connect(mConn.data(), SIGNAL(invalidated(Tp::DBusProxy *, const QString &, const QString &)), SLOT(expectConnInvalidated()))); mConn->lowlevel()->requestDisconnect(); // Check that contactManager doesn't go NULL in the process of the connection going invalidated do { QVERIFY(!mConn->contactManager().isNull()); mLoop->processEvents(); } while (!mConnInvalidated); QVERIFY(!mConn->isValid()); QCOMPARE(mConn->status(), ConnectionStatusDisconnected); // Now that the conn is invalidated NOTHING should work anymore QVERIFY(connect(mConn->contactManager()->contactsForIdentifiers(QStringList()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->contactsForHandles(UIntList()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->upgradeContacts(QList(), Features()), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->requestPresenceSubscription(QList(), QLatin1String("You fail at life")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->removePresenceSubscription(QList(), QLatin1String("You fail at life")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->authorizePresencePublication(QList(), QLatin1String("You fail at life")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->removePresencePublication(QList(), QLatin1String("You fail at life")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->blockContacts(QList() << mContact), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->addGroup(QLatin1String("Future failures")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->removeGroup(QLatin1String("Future failures")), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->addContactsToGroup(QLatin1String("Future failures"), QList() << mContact), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); QVERIFY(connect(mConn->contactManager()->removeContactsFromGroup(QLatin1String("Future failures"), QList() << mContact), SIGNAL(finished(Tp::PendingOperation*)), SLOT(expectFailure(Tp::PendingOperation*)))); QCOMPARE(mLoop->exec(), 0); } void TestConnRosterGroupsLegacy::cleanup() { mContact.reset(); if (mConn && mConn->requestedFeatures().contains(Connection::FeatureCore)) { QVERIFY(mConnService != NULL); if (TP_BASE_CONNECTION(mConnService)->status != TP_CONNECTION_STATUS_DISCONNECTED) { tp_base_connection_change_status(TP_BASE_CONNECTION(mConnService), TP_CONNECTION_STATUS_DISCONNECTED, TP_CONNECTION_STATUS_REASON_REQUESTED); } while (mConn->isValid()) { mLoop->processEvents(); } } mConn.reset(); if (mConnService != 0) { g_object_unref(mConnService); mConnService = 0; } cleanupImpl(); } void TestConnRosterGroupsLegacy::cleanupTestCase() { cleanupTestCaseImpl(); } QTEST_MAIN(TestConnRosterGroupsLegacy) #include "_gen/conn-roster-groups-legacy.cpp.moc.hpp" telepathy-qt-0.9.3/tests/dbus/contact-factory.cpp0000644000175200001440000000367212000056607024327 0ustar00collabora-develusers00000000000000#include #include #include #include #include #include #include using namespace Tp; class TestContactFactory : public Test { Q_OBJECT public: TestContactFactory(QObject *parent = 0) : Test(parent), mConn(0) { } private Q_SLOTS: void initTestCase(); void init(); void testConnectionSelfContactFeatures(); void cleanup(); void cleanupTestCase(); private: TestConnHelper *mConn; }; void TestContactFactory::initTestCase() { initTestCaseImpl(); g_type_init(); g_set_prgname("contact-factory"); tp_debug_set_flags("all"); dbus_g_bus_get(DBUS_BUS_STARTER, 0); mConn = new TestConnHelper(this, ChannelFactory::create(QDBusConnection::sessionBus()), ContactFactory::create(Contact::FeatureAlias), TP_TESTS_TYPE_CONTACTS_CONNECTION, "account", "me@example.com", "protocol", "simple", NULL); QCOMPARE(mConn->isReady(), false); } void TestContactFactory::init() { initImpl(); } void TestContactFactory::testConnectionSelfContactFeatures() { QCOMPARE(mConn->client()->contactFactory()->features().size(), 1); QVERIFY(mConn->client()->contactFactory()->features().contains(Contact::FeatureAlias)); QCOMPARE(mConn->connect(Connection::FeatureSelfContact), true); ContactPtr selfContact = mConn->client()->selfContact(); QVERIFY(!selfContact.isNull()); QVERIFY(selfContact->requestedFeatures().contains(Contact::FeatureAlias)); } void TestContactFactory::cleanup() { cleanupImpl(); } void TestContactFactory::cleanupTestCase() { QCOMPARE(mConn->disconnect(), true); delete mConn; cleanupTestCaseImpl(); } QTEST_MAIN(TestContactFactory) #include "_gen/contact-factory.cpp.moc.hpp" telepathy-qt-0.9.3/tests/test-key-file-format-error.ini0000644000175200001440000000002712000056607025355 0ustar00collabora-develusers00000000000000a 1 b=2 [test group 1 telepathy-qt-0.9.3/tests/rccspec.cpp0000644000175200001440000001650412000056607021712 0ustar00collabora-develusers00000000000000#include #include using namespace Tp; class TestRCCSpec : public QObject { Q_OBJECT private Q_SLOTS: void testRCCSpec(); }; void TestRCCSpec::testRCCSpec() { RequestableChannelClassSpec spec; spec = RequestableChannelClassSpec::textChat(); QCOMPARE(spec.channelType(), TP_QT_IFACE_CHANNEL_TYPE_TEXT); QCOMPARE(spec.targetHandleType(), HandleTypeContact); QCOMPARE(spec.fixedProperties().size(), 2); QCOMPARE(spec.allowedProperties().isEmpty(), true); spec = RequestableChannelClassSpec::textChatroom(); QCOMPARE(spec.channelType(), TP_QT_IFACE_CHANNEL_TYPE_TEXT); QCOMPARE(spec.targetHandleType(), HandleTypeRoom); QCOMPARE(spec.fixedProperties().size(), 2); QCOMPARE(spec.allowedProperties().isEmpty(), true); spec = RequestableChannelClassSpec::streamedMediaCall(); QCOMPARE(spec.channelType(), TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA); QCOMPARE(spec.targetHandleType(), HandleTypeContact); QCOMPARE(spec.fixedProperties().size(), 2); QCOMPARE(spec.allowedProperties().isEmpty(), true); spec = RequestableChannelClassSpec::streamedMediaAudioCall(); QCOMPARE(spec.channelType(), TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA); QCOMPARE(spec.targetHandleType(), HandleTypeContact); QCOMPARE(spec.fixedProperties().size(), 2); QCOMPARE(spec.allowedProperties().size(), 1); QCOMPARE(spec.allowsProperty(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialAudio")), true); spec = RequestableChannelClassSpec::streamedMediaVideoCall(); QCOMPARE(spec.channelType(), TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA); QCOMPARE(spec.targetHandleType(), HandleTypeContact); QCOMPARE(spec.fixedProperties().size(), 2); QCOMPARE(spec.allowedProperties().size(), 1); QCOMPARE(spec.allowsProperty(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialVideo")), true); spec = RequestableChannelClassSpec::streamedMediaVideoCallWithAudio(); QCOMPARE(spec.channelType(), TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA); QCOMPARE(spec.targetHandleType(), HandleTypeContact); QCOMPARE(spec.fixedProperties().size(), 2); QCOMPARE(spec.allowedProperties().size(), 2); QCOMPARE(spec.allowsProperty(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialAudio")), true); QCOMPARE(spec.allowsProperty(TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA + QLatin1String(".InitialVideo")), true); spec = RequestableChannelClassSpec::conferenceTextChat(); QCOMPARE(spec.channelType(), TP_QT_IFACE_CHANNEL_TYPE_TEXT); QVERIFY(!spec.hasTargetHandleType()); QCOMPARE(spec.allowedProperties().size(), 1); QCOMPARE(spec.allowsProperty(TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialChannels")), true); spec = RequestableChannelClassSpec::conferenceTextChatWithInvitees(); QCOMPARE(spec.channelType(), TP_QT_IFACE_CHANNEL_TYPE_TEXT); QVERIFY(!spec.hasTargetHandleType()); QCOMPARE(spec.allowedProperties().size(), 2); QCOMPARE(spec.allowsProperty(TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialChannels")), true); QCOMPARE(spec.allowsProperty(TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialInviteeHandles")), true); spec = RequestableChannelClassSpec::conferenceTextChatroom(); QCOMPARE(spec.channelType(), TP_QT_IFACE_CHANNEL_TYPE_TEXT); QCOMPARE(spec.targetHandleType(), HandleTypeRoom); QCOMPARE(spec.allowedProperties().size(), 1); QCOMPARE(spec.allowsProperty(TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialChannels")), true); spec = RequestableChannelClassSpec::conferenceTextChatroomWithInvitees(); QCOMPARE(spec.channelType(), TP_QT_IFACE_CHANNEL_TYPE_TEXT); QCOMPARE(spec.targetHandleType(), HandleTypeRoom); QCOMPARE(spec.allowedProperties().size(), 2); QCOMPARE(spec.allowsProperty(TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialChannels")), true); QCOMPARE(spec.allowsProperty(TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialInviteeHandles")), true); spec = RequestableChannelClassSpec::conferenceStreamedMediaCall(); QCOMPARE(spec.channelType(), TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA); QVERIFY(!spec.hasTargetHandleType()); QCOMPARE(spec.allowedProperties().size(), 1); QCOMPARE(spec.allowsProperty(TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialChannels")), true); spec = RequestableChannelClassSpec::conferenceStreamedMediaCallWithInvitees(); QCOMPARE(spec.channelType(), TP_QT_IFACE_CHANNEL_TYPE_STREAMED_MEDIA); QVERIFY(!spec.hasTargetHandleType()); QCOMPARE(spec.allowedProperties().size(), 2); QCOMPARE(spec.allowsProperty(TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialChannels")), true); QCOMPARE(spec.allowsProperty(TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialInviteeHandles")), true); spec = RequestableChannelClassSpec::contactSearch(); QCOMPARE(spec.channelType(), TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH); QCOMPARE(spec.fixedProperties().size(), 1); QCOMPARE(spec.allowedProperties().isEmpty(), true); spec = RequestableChannelClassSpec::contactSearchWithSpecificServer(); QCOMPARE(spec.channelType(), TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH); QCOMPARE(spec.fixedProperties().size(), 1); QCOMPARE(spec.allowedProperties().size(), 1); QCOMPARE(spec.allowsProperty(TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH + QLatin1String(".Server")), true); spec = RequestableChannelClassSpec::contactSearchWithLimit(); QCOMPARE(spec.channelType(), TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH); QCOMPARE(spec.fixedProperties().size(), 1); QCOMPARE(spec.allowedProperties().size(), 1); QCOMPARE(spec.allowsProperty(TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH + QLatin1String(".Limit")), true); spec = RequestableChannelClassSpec::contactSearchWithSpecificServerAndLimit(); QCOMPARE(spec.channelType(), TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH); QCOMPARE(spec.fixedProperties().size(), 1); QCOMPARE(spec.allowedProperties().size(), 2); QCOMPARE(spec.allowsProperty(TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH + QLatin1String(".Server")), true); QCOMPARE(spec.allowsProperty(TP_QT_IFACE_CHANNEL_TYPE_CONTACT_SEARCH + QLatin1String(".Limit")), true); QCOMPARE(RequestableChannelClassSpec::streamedMediaVideoCallWithAudio().supports( RequestableChannelClassSpec::streamedMediaVideoCall()), true); QCOMPARE(RequestableChannelClassSpec::streamedMediaVideoCallWithAudio().supports( RequestableChannelClassSpec::streamedMediaAudioCall()), true); QCOMPARE(RequestableChannelClassSpec::streamedMediaVideoCallWithAudio().supports( RequestableChannelClassSpec::streamedMediaCall()), true); QCOMPARE(RequestableChannelClassSpec::textChat() == RequestableChannelClassSpec::textChatroom(), false); RequestableChannelClass rcc; rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_TEXT); rcc.fixedProperties.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) HandleTypeContact); spec = RequestableChannelClassSpec(rcc); QCOMPARE(RequestableChannelClassSpec::textChat() == spec, true); } QTEST_MAIN(TestRCCSpec) #include "_gen/rccspec.cpp.moc.hpp" telepathy-qt-0.9.3/tests/channel-class-spec.cpp0000644000175200001440000001160312000056607023726 0ustar00collabora-develusers00000000000000#include #include #include #include #include using namespace Tp; namespace { ChannelClassSpecList reverse(const ChannelClassSpecList &list) { ChannelClassSpecList ret(list); for (int k = 0; k < (list.size() / 2); k++) { ret.swap(k, list.size() - (1 + k)); } return ret; } }; class TestChannelClassSpec : public QObject { Q_OBJECT public: TestChannelClassSpec(QObject *parent = 0); private Q_SLOTS: void testChannelClassSpecHash(); void testServiceLeaks(); }; TestChannelClassSpec::TestChannelClassSpec(QObject *parent) : QObject(parent) { Tp::enableDebug(true); Tp::enableWarnings(true); } void TestChannelClassSpec::testChannelClassSpecHash() { ChannelClassSpec st1 = ChannelClassSpec::textChat(); ChannelClassSpec st2 = ChannelClassSpec::textChat(); ChannelClassSpec ssm1 = ChannelClassSpec::streamedMediaCall(); ChannelClassSpec ssm2 = ChannelClassSpec::streamedMediaCall(); QCOMPARE(qHash(st1), qHash(st2)); QCOMPARE(qHash(ssm1), qHash(ssm2)); QVERIFY(qHash(st1) != qHash(ssm1)); // hash of list with duplicated elements should be the same as hash of the list of same items // but with no duplicates ChannelClassSpecList sl1; sl1 << st1 << st2; ChannelClassSpecList sl2; sl2 << st1; QCOMPARE(qHash(sl1), qHash(sl2)); // hash of list with same elements but different order should be the same sl1.clear(); sl2.clear(); sl1 << st1 << ssm1; sl2 << ssm1 << st1; QCOMPARE(qHash(sl1), qHash(sl2)); // still the same but with duplicated elements sl2 << ssm2 << st2; QCOMPARE(qHash(sl1), qHash(sl2)); sl1 << st2; QCOMPARE(qHash(sl1), qHash(sl2)); // now sl2 is different from sl1, hash should be different sl2 << ChannelClassSpec::unnamedTextChat(); QVERIFY(qHash(sl1) != qHash(sl2)); // same again sl1.prepend(ChannelClassSpec::unnamedTextChat()); QCOMPARE(qHash(sl1), qHash(sl2)); sl1.clear(); sl2.clear(); for (int i = 0; i < 100; ++i) { sl1 << ChannelClassSpec::textChat() << ChannelClassSpec::streamedMediaCall() << ChannelClassSpec::unnamedTextChat(); } ChannelClassSpec specs[3] = { ChannelClassSpec::textChat(), ChannelClassSpec::streamedMediaCall(), ChannelClassSpec::unnamedTextChat() }; for (int i = 0; i < 3; ++i) { ChannelClassSpec spec = specs[i]; for (int j = 0; j < 100; ++j) { sl2 << spec; } } QCOMPARE(qHash(sl1), qHash(ChannelClassSpecList() << ChannelClassSpec::unnamedTextChat() << ChannelClassSpec::streamedMediaCall() << ChannelClassSpec::textChat())); for (int i = 0; i < 1000; ++i) { ChannelClassSpec spec = ChannelClassSpec::outgoingStreamTube(QString::number(i)); sl1 << spec; sl2.prepend(spec); } QCOMPARE(qHash(sl1), qHash(sl2)); sl1 = reverse(sl1); sl2 = reverse(sl2); QCOMPARE(qHash(sl1), qHash(sl2)); sl2 << ChannelClassSpec::outgoingFileTransfer(); QVERIFY(qHash(sl1) != qHash(sl2)); } void TestChannelClassSpec::testServiceLeaks() { ChannelClassSpec bareTube = ChannelClassSpec::outgoingStreamTube(); QVERIFY(!bareTube.allProperties().contains(TP_QT_IFACE_CHANNEL_TYPE_STREAM_TUBE + QString::fromLatin1(".Service"))); ChannelClassSpec ftpTube = ChannelClassSpec::outgoingStreamTube(QLatin1String("ftp")); QVERIFY(ftpTube.allProperties().contains(TP_QT_IFACE_CHANNEL_TYPE_STREAM_TUBE + QString::fromLatin1(".Service"))); QCOMPARE(ftpTube.allProperties().value(TP_QT_IFACE_CHANNEL_TYPE_STREAM_TUBE + QString::fromLatin1(".Service")).toString(), QString::fromLatin1("ftp")); QVERIFY(!bareTube.allProperties().contains(TP_QT_IFACE_CHANNEL_TYPE_STREAM_TUBE + QString::fromLatin1(".Service"))); ChannelClassSpec httpTube = ChannelClassSpec::outgoingStreamTube(QLatin1String("http")); QVERIFY(httpTube.allProperties().contains(TP_QT_IFACE_CHANNEL_TYPE_STREAM_TUBE + QString::fromLatin1(".Service"))); QVERIFY(ftpTube.allProperties().contains(TP_QT_IFACE_CHANNEL_TYPE_STREAM_TUBE + QString::fromLatin1(".Service"))); QCOMPARE(httpTube.allProperties().value(TP_QT_IFACE_CHANNEL_TYPE_STREAM_TUBE + QString::fromLatin1(".Service")).toString(), QString::fromLatin1("http")); QCOMPARE(ftpTube.allProperties().value(TP_QT_IFACE_CHANNEL_TYPE_STREAM_TUBE + QString::fromLatin1(".Service")).toString(), QString::fromLatin1("ftp")); QVERIFY(!bareTube.allProperties().contains(TP_QT_IFACE_CHANNEL_TYPE_STREAM_TUBE + QString::fromLatin1(".Service"))); } QTEST_MAIN(TestChannelClassSpec) #include "_gen/channel-class-spec.cpp.moc.hpp" telepathy-qt-0.9.3/tests/capabilities.cpp0000644000175200001440000004051312000056607022716 0ustar00collabora-develusers00000000000000#include #include #include #include #include #include #include #include using namespace Tp; class TestCapabilities : public QObject { Q_OBJECT public: TestCapabilities(QObject *parent = 0); private Q_SLOTS: void testConnCapabilities(); void testContactCapabilities(); }; TestCapabilities::TestCapabilities(QObject *parent) : QObject(parent) { Tp::enableDebug(true); Tp::enableWarnings(true); } void TestCapabilities::testConnCapabilities() { ConnectionCapabilities connCaps; // capabilities base QVERIFY(!connCaps.isSpecificToContact()); QVERIFY(!connCaps.textChats()); QVERIFY(!connCaps.streamedMediaCalls()); QVERIFY(!connCaps.streamedMediaAudioCalls()); QVERIFY(!connCaps.streamedMediaVideoCalls()); QVERIFY(!connCaps.streamedMediaVideoCallsWithAudio()); QVERIFY(!connCaps.upgradingStreamedMediaCalls()); QVERIFY(!connCaps.fileTransfers()); // conn caps specific QVERIFY(!connCaps.textChatrooms()); QVERIFY(!connCaps.conferenceStreamedMediaCalls()); QVERIFY(!connCaps.conferenceStreamedMediaCallsWithInvitees()); QVERIFY(!connCaps.conferenceTextChats()); QVERIFY(!connCaps.conferenceTextChatsWithInvitees()); QVERIFY(!connCaps.conferenceTextChatrooms()); QVERIFY(!connCaps.conferenceTextChatroomsWithInvitees()); QVERIFY(!connCaps.contactSearches()); QVERIFY(!connCaps.contactSearchesWithSpecificServer()); QVERIFY(!connCaps.contactSearchesWithLimit()); QVERIFY(!connCaps.streamTubes()); RequestableChannelClassSpecList rccSpecs; rccSpecs.append(RequestableChannelClassSpec::textChat()); rccSpecs.append(RequestableChannelClassSpec::streamedMediaCall()); rccSpecs.append(RequestableChannelClassSpec::streamedMediaAudioCall()); rccSpecs.append(RequestableChannelClassSpec::streamedMediaVideoCall()); rccSpecs.append(RequestableChannelClassSpec::streamedMediaVideoCallWithAudio()); rccSpecs.append(RequestableChannelClassSpec::fileTransfer()); connCaps = TestBackdoors::createConnectionCapabilities(rccSpecs); // capabilities base QVERIFY(!connCaps.isSpecificToContact()); QVERIFY(connCaps.textChats()); QVERIFY(connCaps.streamedMediaCalls()); QVERIFY(connCaps.streamedMediaAudioCalls()); QVERIFY(connCaps.streamedMediaVideoCalls()); QVERIFY(connCaps.streamedMediaVideoCallsWithAudio()); QVERIFY(connCaps.fileTransfers()); // conn caps specific QVERIFY(!connCaps.textChatrooms()); QVERIFY(!connCaps.conferenceStreamedMediaCalls()); QVERIFY(!connCaps.conferenceStreamedMediaCallsWithInvitees()); QVERIFY(!connCaps.conferenceTextChats()); QVERIFY(!connCaps.conferenceTextChatsWithInvitees()); QVERIFY(!connCaps.conferenceTextChatrooms()); QVERIFY(!connCaps.conferenceTextChatroomsWithInvitees()); QVERIFY(!connCaps.contactSearches()); QVERIFY(!connCaps.contactSearchesWithSpecificServer()); QVERIFY(!connCaps.contactSearchesWithLimit()); QVERIFY(!connCaps.streamTubes()); QCOMPARE(connCaps.allClassSpecs(), rccSpecs); rccSpecs.append(RequestableChannelClassSpec::textChatroom()); rccSpecs.append(RequestableChannelClassSpec::conferenceStreamedMediaCall()); rccSpecs.append(RequestableChannelClassSpec::conferenceStreamedMediaCallWithInvitees()); rccSpecs.append(RequestableChannelClassSpec::conferenceTextChat()); rccSpecs.append(RequestableChannelClassSpec::conferenceTextChatWithInvitees()); rccSpecs.append(RequestableChannelClassSpec::conferenceTextChatroom()); rccSpecs.append(RequestableChannelClassSpec::conferenceTextChatroomWithInvitees()); rccSpecs.append(RequestableChannelClassSpec::contactSearch()); rccSpecs.append(RequestableChannelClassSpec::contactSearchWithSpecificServer()); rccSpecs.append(RequestableChannelClassSpec::contactSearchWithLimit()); rccSpecs.append(RequestableChannelClassSpec::contactSearchWithSpecificServerAndLimit()); rccSpecs.append(RequestableChannelClassSpec::streamTube()); connCaps = TestBackdoors::createConnectionCapabilities(rccSpecs); // capabilities base QVERIFY(!connCaps.isSpecificToContact()); QVERIFY(connCaps.textChats()); QVERIFY(connCaps.streamedMediaCalls()); QVERIFY(connCaps.streamedMediaAudioCalls()); QVERIFY(connCaps.streamedMediaVideoCalls()); QVERIFY(connCaps.streamedMediaVideoCallsWithAudio()); QVERIFY(connCaps.fileTransfers()); // conn caps specific QVERIFY(connCaps.textChatrooms()); QVERIFY(connCaps.conferenceStreamedMediaCalls()); QVERIFY(connCaps.conferenceStreamedMediaCallsWithInvitees()); QVERIFY(connCaps.conferenceTextChats()); QVERIFY(connCaps.conferenceTextChatsWithInvitees()); QVERIFY(connCaps.conferenceTextChatrooms()); QVERIFY(connCaps.conferenceTextChatroomsWithInvitees()); QVERIFY(connCaps.contactSearches()); QVERIFY(connCaps.contactSearchesWithSpecificServer()); QVERIFY(connCaps.contactSearchesWithLimit()); QCOMPARE(connCaps.allClassSpecs(), rccSpecs); // start over rccSpecs.clear(); rccSpecs.append(RequestableChannelClassSpec::streamedMediaCall()); connCaps = TestBackdoors::createConnectionCapabilities(rccSpecs); // capabilities base QVERIFY(connCaps.streamedMediaCalls()); QVERIFY(!connCaps.streamedMediaAudioCalls()); QVERIFY(!connCaps.streamedMediaVideoCalls()); QVERIFY(!connCaps.streamedMediaVideoCallsWithAudio()); // conn caps specific QVERIFY(!connCaps.conferenceStreamedMediaCalls()); QVERIFY(!connCaps.conferenceStreamedMediaCallsWithInvitees()); rccSpecs.append(RequestableChannelClassSpec::streamedMediaAudioCall()); connCaps = TestBackdoors::createConnectionCapabilities(rccSpecs); // capabilities base QVERIFY(connCaps.streamedMediaCalls()); QVERIFY(connCaps.streamedMediaAudioCalls()); QVERIFY(!connCaps.streamedMediaVideoCalls()); QVERIFY(!connCaps.streamedMediaVideoCallsWithAudio()); // conn caps specific QVERIFY(!connCaps.conferenceStreamedMediaCalls()); QVERIFY(!connCaps.conferenceStreamedMediaCallsWithInvitees()); rccSpecs.append(RequestableChannelClassSpec::streamedMediaVideoCall()); connCaps = TestBackdoors::createConnectionCapabilities(rccSpecs); // capabilities base QVERIFY(connCaps.streamedMediaCalls()); QVERIFY(connCaps.streamedMediaAudioCalls()); QVERIFY(connCaps.streamedMediaVideoCalls()); QVERIFY(!connCaps.streamedMediaVideoCallsWithAudio()); // conn caps specific QVERIFY(!connCaps.conferenceStreamedMediaCalls()); QVERIFY(!connCaps.conferenceStreamedMediaCallsWithInvitees()); rccSpecs.append(RequestableChannelClassSpec::streamedMediaVideoCallWithAudio()); connCaps = TestBackdoors::createConnectionCapabilities(rccSpecs); // capabilities base QVERIFY(connCaps.streamedMediaCalls()); QVERIFY(connCaps.streamedMediaAudioCalls()); QVERIFY(connCaps.streamedMediaVideoCalls()); QVERIFY(connCaps.streamedMediaVideoCallsWithAudio()); // conn caps specific QVERIFY(!connCaps.conferenceStreamedMediaCalls()); QVERIFY(!connCaps.conferenceStreamedMediaCallsWithInvitees()); rccSpecs.append(RequestableChannelClassSpec::conferenceStreamedMediaCall()); connCaps = TestBackdoors::createConnectionCapabilities(rccSpecs); // capabilities base QVERIFY(connCaps.streamedMediaCalls()); QVERIFY(connCaps.streamedMediaAudioCalls()); QVERIFY(connCaps.streamedMediaVideoCalls()); QVERIFY(connCaps.streamedMediaVideoCallsWithAudio()); // conn caps specific QVERIFY(connCaps.conferenceStreamedMediaCalls()); QVERIFY(!connCaps.conferenceStreamedMediaCallsWithInvitees()); rccSpecs.append(RequestableChannelClassSpec::conferenceStreamedMediaCallWithInvitees()); connCaps = TestBackdoors::createConnectionCapabilities(rccSpecs); // capabilities base QVERIFY(connCaps.streamedMediaCalls()); QVERIFY(connCaps.streamedMediaAudioCalls()); QVERIFY(connCaps.streamedMediaVideoCalls()); QVERIFY(connCaps.streamedMediaVideoCallsWithAudio()); // conn caps specific QVERIFY(connCaps.conferenceStreamedMediaCalls()); QVERIFY(connCaps.conferenceStreamedMediaCallsWithInvitees()); // capabilities base QVERIFY(!connCaps.textChats()); QVERIFY(!connCaps.fileTransfers()); // conn caps specific QVERIFY(!connCaps.textChatrooms()); QVERIFY(!connCaps.conferenceTextChats()); QVERIFY(!connCaps.conferenceTextChatsWithInvitees()); QVERIFY(!connCaps.conferenceTextChatrooms()); QVERIFY(!connCaps.conferenceTextChatroomsWithInvitees()); QVERIFY(!connCaps.contactSearches()); QVERIFY(!connCaps.contactSearchesWithSpecificServer()); QVERIFY(!connCaps.contactSearchesWithLimit()); QVERIFY(!connCaps.streamTubes()); rccSpecs.append(RequestableChannelClassSpec::textChat()); connCaps = TestBackdoors::createConnectionCapabilities(rccSpecs); // capabilities base QVERIFY(connCaps.textChats()); // conn caps specific QVERIFY(!connCaps.textChatrooms()); QVERIFY(!connCaps.conferenceTextChats()); QVERIFY(!connCaps.conferenceTextChatsWithInvitees()); QVERIFY(!connCaps.conferenceTextChatrooms()); QVERIFY(!connCaps.conferenceTextChatroomsWithInvitees()); rccSpecs.append(RequestableChannelClassSpec::textChatroom()); connCaps = TestBackdoors::createConnectionCapabilities(rccSpecs); // capabilities base QVERIFY(connCaps.textChats()); // conn caps specific QVERIFY(connCaps.textChatrooms()); QVERIFY(!connCaps.conferenceTextChats()); QVERIFY(!connCaps.conferenceTextChatsWithInvitees()); QVERIFY(!connCaps.conferenceTextChatrooms()); QVERIFY(!connCaps.conferenceTextChatroomsWithInvitees()); rccSpecs.append(RequestableChannelClassSpec::conferenceTextChat()); connCaps = TestBackdoors::createConnectionCapabilities(rccSpecs); // capabilities base QVERIFY(connCaps.textChats()); // conn caps specific QVERIFY(connCaps.textChatrooms()); QVERIFY(connCaps.conferenceTextChats()); QVERIFY(!connCaps.conferenceTextChatsWithInvitees()); QVERIFY(!connCaps.conferenceTextChatrooms()); QVERIFY(!connCaps.conferenceTextChatroomsWithInvitees()); rccSpecs.append(RequestableChannelClassSpec::conferenceTextChatWithInvitees()); connCaps = TestBackdoors::createConnectionCapabilities(rccSpecs); // capabilities base QVERIFY(connCaps.textChats()); // conn caps specific QVERIFY(connCaps.textChatrooms()); QVERIFY(connCaps.conferenceTextChats()); QVERIFY(connCaps.conferenceTextChatsWithInvitees()); QVERIFY(!connCaps.conferenceTextChatrooms()); QVERIFY(!connCaps.conferenceTextChatroomsWithInvitees()); rccSpecs.append(RequestableChannelClassSpec::conferenceTextChatroom()); connCaps = TestBackdoors::createConnectionCapabilities(rccSpecs); // capabilities base QVERIFY(connCaps.textChats()); // conn caps specific QVERIFY(connCaps.textChatrooms()); QVERIFY(connCaps.conferenceTextChats()); QVERIFY(connCaps.conferenceTextChatsWithInvitees()); QVERIFY(connCaps.conferenceTextChatrooms()); QVERIFY(!connCaps.conferenceTextChatroomsWithInvitees()); rccSpecs.append(RequestableChannelClassSpec::conferenceTextChatroomWithInvitees()); connCaps = TestBackdoors::createConnectionCapabilities(rccSpecs); // capabilities base QVERIFY(connCaps.textChats()); // conn caps specific QVERIFY(connCaps.textChatrooms()); QVERIFY(connCaps.conferenceTextChats()); QVERIFY(connCaps.conferenceTextChatsWithInvitees()); QVERIFY(connCaps.conferenceTextChatrooms()); QVERIFY(connCaps.conferenceTextChatroomsWithInvitees()); // capabilities base QVERIFY(!connCaps.fileTransfers()); // conn caps specific QVERIFY(!connCaps.contactSearches()); QVERIFY(!connCaps.contactSearchesWithSpecificServer()); QVERIFY(!connCaps.contactSearchesWithLimit()); QVERIFY(!connCaps.streamTubes()); } void TestCapabilities::testContactCapabilities() { ContactCapabilities contactCaps; // capabilities base QVERIFY(!contactCaps.isSpecificToContact()); QVERIFY(!contactCaps.textChats()); QVERIFY(!contactCaps.streamedMediaCalls()); QVERIFY(!contactCaps.streamedMediaAudioCalls()); QVERIFY(!contactCaps.streamedMediaVideoCalls()); QVERIFY(!contactCaps.streamedMediaVideoCallsWithAudio()); QVERIFY(!contactCaps.upgradingStreamedMediaCalls()); QVERIFY(!contactCaps.fileTransfers()); // contact caps specific QVERIFY(!contactCaps.streamTubes(QLatin1String("foobar"))); QVERIFY(!contactCaps.streamTubes(QLatin1String("service-foo"))); QVERIFY(!contactCaps.streamTubes(QLatin1String("service-bar"))); QVERIFY(contactCaps.streamTubeServices().isEmpty()); RequestableChannelClassSpecList rccSpecs; rccSpecs.append(RequestableChannelClassSpec::textChat()); rccSpecs.append(RequestableChannelClassSpec::streamedMediaCall()); rccSpecs.append(RequestableChannelClassSpec::streamedMediaAudioCall()); rccSpecs.append(RequestableChannelClassSpec::streamedMediaVideoCall()); rccSpecs.append(RequestableChannelClassSpec::streamedMediaVideoCallWithAudio()); rccSpecs.append(RequestableChannelClassSpec::fileTransfer()); contactCaps = TestBackdoors::createContactCapabilities(rccSpecs, true); // capabilities base QVERIFY(contactCaps.isSpecificToContact()); QVERIFY(contactCaps.textChats()); QVERIFY(contactCaps.streamedMediaCalls()); QVERIFY(contactCaps.streamedMediaAudioCalls()); QVERIFY(contactCaps.streamedMediaVideoCalls()); QVERIFY(contactCaps.streamedMediaVideoCallsWithAudio()); QVERIFY(contactCaps.fileTransfers()); // contact caps specific QVERIFY(!contactCaps.streamTubes(QLatin1String("foobar"))); QVERIFY(!contactCaps.streamTubes(QLatin1String("service-foo"))); QVERIFY(!contactCaps.streamTubes(QLatin1String("service-bar"))); QVERIFY(contactCaps.streamTubeServices().isEmpty()); QCOMPARE(contactCaps.allClassSpecs(), rccSpecs); rccSpecs.append(RequestableChannelClassSpec::streamTube(QLatin1String("service-foo"))); rccSpecs.append(RequestableChannelClassSpec::streamTube(QLatin1String("service-bar"))); contactCaps = TestBackdoors::createContactCapabilities(rccSpecs, true); // capabilities base QVERIFY(contactCaps.isSpecificToContact()); QVERIFY(contactCaps.textChats()); QVERIFY(contactCaps.streamedMediaCalls()); QVERIFY(contactCaps.streamedMediaAudioCalls()); QVERIFY(contactCaps.streamedMediaVideoCalls()); QVERIFY(contactCaps.streamedMediaVideoCallsWithAudio()); QVERIFY(contactCaps.fileTransfers()); // contact caps specific QVERIFY(!contactCaps.streamTubes(QLatin1String("foobar"))); QVERIFY(contactCaps.streamTubes(QLatin1String("service-foo"))); QVERIFY(contactCaps.streamTubes(QLatin1String("service-bar"))); QStringList stubeServices = contactCaps.streamTubeServices(); stubeServices.sort(); QStringList expectedSTubeServices; expectedSTubeServices << QLatin1String("service-foo") << QLatin1String("service-bar"); expectedSTubeServices.sort(); QCOMPARE(stubeServices, expectedSTubeServices); QCOMPARE(contactCaps.allClassSpecs(), rccSpecs); rccSpecs.clear(); rccSpecs.append(RequestableChannelClassSpec::streamTube(QLatin1String("service-foo"))); contactCaps = TestBackdoors::createContactCapabilities(rccSpecs, true); QVERIFY(!contactCaps.streamTubes(QLatin1String("foobar"))); QVERIFY(contactCaps.streamTubes(QLatin1String("service-foo"))); QVERIFY(!contactCaps.streamTubes(QLatin1String("service-bar"))); QCOMPARE(contactCaps.streamTubeServices(), QStringList() << QLatin1String("service-foo")); rccSpecs.append(RequestableChannelClassSpec::streamTube(QLatin1String("service-bar"))); contactCaps = TestBackdoors::createContactCapabilities(rccSpecs, true); QVERIFY(!contactCaps.streamTubes(QLatin1String("foobar"))); QVERIFY(contactCaps.streamTubes(QLatin1String("service-foo"))); QVERIFY(contactCaps.streamTubes(QLatin1String("service-bar"))); stubeServices = contactCaps.streamTubeServices(); stubeServices.sort(); expectedSTubeServices.clear(); expectedSTubeServices << QLatin1String("service-foo") << QLatin1String("service-bar"); expectedSTubeServices.sort(); QCOMPARE(stubeServices, expectedSTubeServices); } QTEST_MAIN(TestCapabilities) #include "_gen/capabilities.cpp.moc.hpp" telepathy-qt-0.9.3/tests/key-file.cpp0000644000175200001440000001305612000056607021774 0ustar00collabora-develusers00000000000000#include #include "TelepathyQt/key-file.h" using namespace Tp; class TestKeyFile : public QObject { Q_OBJECT private Q_SLOTS: void testKeyFile(); }; void TestKeyFile::testKeyFile() { QString top_srcdir = QString::fromLocal8Bit(::getenv("abs_top_srcdir")); if (!top_srcdir.isEmpty()) { QDir::setCurrent(top_srcdir + QLatin1String("/tests")); } KeyFile defaultKeyFile; QCOMPARE(defaultKeyFile.status(), KeyFile::None); KeyFile notFoundkeyFile(QLatin1String("test-key-file-not-found.ini")); QCOMPARE(notFoundkeyFile.status(), KeyFile::NotFoundError); KeyFile formatErrorkeyFile(QLatin1String("test-key-file-format-error.ini")); QCOMPARE(formatErrorkeyFile.status(), KeyFile::FormatError); KeyFile keyFile(QLatin1String("test-key-file.ini")); QCOMPARE(keyFile.status(), KeyFile::NoError); QCOMPARE(keyFile.allGroups(), QStringList() << QString() << QLatin1String("test group 1") << QLatin1String("test group 2")); QStringList allKeys = keyFile.allKeys(); allKeys.sort(); QCOMPARE(allKeys, QStringList() << QLatin1String("a") << QLatin1String("b") << QLatin1String("c") << QLatin1String("d") << QLatin1String("e")); keyFile.setGroup(QLatin1String("test group 1")); QCOMPARE(keyFile.contains(QLatin1String("f")), false); QCOMPARE(keyFile.value(QLatin1String("c")).length(), 5); keyFile.setGroup(QLatin1String("test group 2")); QCOMPARE(keyFile.contains(QLatin1String("e")), true); QCOMPARE(keyFile.value(QLatin1String("e")), QString(QLatin1String("space"))); keyFile.setFileName(QLatin1String("telepathy/managers/test-manager-file.manager")); QCOMPARE(keyFile.status(), KeyFile::NoError); keyFile.setGroup(QLatin1String("Protocol somewhat-pathological")); QCOMPARE(keyFile.value(QLatin1String("param-foo")), QString(QLatin1String("s required"))); QCOMPARE(keyFile.value(QLatin1String("default-foo")), QString(QLatin1String("hello world"))); QCOMPARE(keyFile.value(QLatin1String("param-semicolons")), QString(QLatin1String("s secret"))); QCOMPARE(keyFile.value(QLatin1String("default-semicolons")), QString(QLatin1String("list;of;misc;"))); QCOMPARE(keyFile.value(QLatin1String("param-list")), QString(QLatin1String("as"))); QCOMPARE(keyFile.value(QLatin1String("default-list")), QString(QLatin1String("list;of;misc;"))); QCOMPARE(keyFile.valueAsStringList(QLatin1String("default-list")), QStringList() << QLatin1String("list") << QLatin1String("of") << QLatin1String("misc")); QCOMPARE(keyFile.value(QLatin1String("param-unterminated-list")), QString(QLatin1String("as"))); QCOMPARE(keyFile.value(QLatin1String("default-unterminated-list")), QString(QLatin1String("list;of;misc"))); QCOMPARE(keyFile.valueAsStringList(QLatin1String("default-unterminated-list")), QStringList() << QLatin1String("list") << QLatin1String("of") << QLatin1String("misc")); QCOMPARE(keyFile.value(QLatin1String("param-spaces-in-list")), QString(QLatin1String("as"))); QCOMPARE(keyFile.value(QLatin1String("default-spaces-in-list")), QString(QLatin1String("list; of; misc ;"))); QCOMPARE(keyFile.valueAsStringList(QLatin1String("default-spaces-in-list")), QStringList() << QLatin1String("list") << QLatin1String(" of") << QLatin1String(" misc ")); QCOMPARE(keyFile.value(QLatin1String("param-escaped-semicolon-in-list")), QString(QLatin1String("as"))); QCOMPARE(keyFile.value(QLatin1String("default-escaped-semicolon-in-list")), QString(QLatin1String("list;of;misc;"))); QCOMPARE(keyFile.valueAsStringList(QLatin1String("default-escaped-semicolon-in-list")), QStringList() << QLatin1String("list;of") << QLatin1String("misc")); QCOMPARE(keyFile.value(QLatin1String("param-doubly-escaped-semicolon-in-list")), QString(QLatin1String("as"))); QCOMPARE(keyFile.value(QLatin1String("default-doubly-escaped-semicolon-in-list")), QString(QLatin1String("list\\;of;misc;"))); QCOMPARE(keyFile.valueAsStringList(QLatin1String("default-doubly-escaped-semicolon-in-list")), QStringList() << QLatin1String("list\\") << QLatin1String("of") << QLatin1String("misc")); QCOMPARE(keyFile.value(QLatin1String("param-triply-escaped-semicolon-in-list")), QString(QLatin1String("as"))); QCOMPARE(keyFile.value(QLatin1String("default-triply-escaped-semicolon-in-list")), QString(QLatin1String("list\\;of;misc;"))); QCOMPARE(keyFile.valueAsStringList(QLatin1String("default-triply-escaped-semicolon-in-list")), QStringList() << QLatin1String("list\\;of") << QLatin1String("misc")); QCOMPARE(keyFile.value(QLatin1String("param-empty-list")), QString(QLatin1String("as"))); QCOMPARE(keyFile.value(QLatin1String("default-empty-list")), QString(QLatin1String(""))); QCOMPARE(keyFile.valueAsStringList(QLatin1String("default-empty-list")), QStringList()); QCOMPARE(keyFile.value(QLatin1String("param-list-of-empty-string")), QString(QLatin1String("as"))); QCOMPARE(keyFile.value(QLatin1String("default-list-of-empty-string")), QString(QLatin1String(";"))); QCOMPARE(keyFile.valueAsStringList(QLatin1String("default-list-of-empty-string")), QStringList() << QString()); QCOMPARE(keyFile.value(QLatin1String("param-escaped-semicolon")), QString(QLatin1String("s"))); QCOMPARE(keyFile.value(QLatin1String("default-escaped-semicolon")), QString(QLatin1String("foo;bar"))); } QTEST_MAIN(TestKeyFile) #include "_gen/key-file.cpp.moc.hpp" telepathy-qt-0.9.3/tests/manager-file.cpp0000644000175200001440000002345012000056607022615 0ustar00collabora-develusers00000000000000#include #include #include #include "TelepathyQt/manager-file.h" using namespace Tp; namespace { bool containsParam(const ParamSpecList ¶ms, const char *name) { Q_FOREACH (const ParamSpec ¶m, params) { if (param.name == QLatin1String(name)) { return true; } } return false; } const ParamSpec *getParam(const ParamSpecList ¶ms, const QString &name) { Q_FOREACH (const ParamSpec ¶m, params) { if (param.name == name) { return ¶m; } } return NULL; } PresenceSpec getPresenceSpec(const PresenceSpecList &specs, const QString &status) { foreach (const PresenceSpec &spec, specs) { if (spec.presence().status() == status) { return spec; } } return PresenceSpec(); } } class TestManagerFile : public QObject { Q_OBJECT public: TestManagerFile(QObject *parent = 0); private Q_SLOTS: void testManagerFile(); }; TestManagerFile::TestManagerFile(QObject *parent) : QObject(parent) { Tp::enableDebug(true); Tp::enableWarnings(true); } void TestManagerFile::testManagerFile() { ManagerFile notFoundManagerFile(QLatin1String("test-manager-file-not-found")); QCOMPARE(notFoundManagerFile.isValid(), false); ManagerFile invalidManagerFile(QLatin1String("test-manager-file-malformed-keyfile")); QCOMPARE(invalidManagerFile.isValid(), false); ManagerFile invalidManagerFile2(QLatin1String("test-manager-file-invalid-signature")); QCOMPARE(invalidManagerFile2.isValid(), false); ManagerFile managerFile(QLatin1String("test-manager-file")); QCOMPARE(managerFile.isValid(), true); QStringList protocols = managerFile.protocols(); protocols.sort(); QCOMPARE(protocols, QStringList() << QLatin1String("bar") << QLatin1String("foo") << QLatin1String("somewhat-pathological")); ParamSpecList params = managerFile.parameters(QLatin1String("foo")); QCOMPARE(containsParam(params, "account"), true); QCOMPARE(containsParam(params, "encryption-key"), true); QCOMPARE(containsParam(params, "password"), true); QCOMPARE(containsParam(params, "port"), true); QCOMPARE(containsParam(params, "register"), true); QCOMPARE(containsParam(params, "server-list"), true); QCOMPARE(containsParam(params, "non-existant"), false); QCOMPARE(QLatin1String("x-foo"), managerFile.vcardField(QLatin1String("foo"))); QCOMPARE(QLatin1String("Foo"), managerFile.englishName(QLatin1String("foo"))); QCOMPARE(QLatin1String("im-foo"), managerFile.iconName(QLatin1String("foo"))); QStringList addressableVCardFields = managerFile.addressableVCardFields(QLatin1String("foo")); QCOMPARE(addressableVCardFields, QStringList() << QLatin1String("x-foo")); QStringList addressableUriSchemes = managerFile.addressableUriSchemes(QLatin1String("foo")); QCOMPARE(addressableUriSchemes, QStringList() << QLatin1String("foo")); RequestableChannelClass ftRcc; ftRcc.fixedProperties.insert( TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_FILE_TRANSFER); ftRcc.fixedProperties.insert( TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), HandleTypeContact); ftRcc.fixedProperties.insert( TP_QT_IFACE_CHANNEL_TYPE_FILE_TRANSFER + QLatin1String(".ContentHashType"), FileHashTypeMD5); ftRcc.allowedProperties.append( TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandle")); ftRcc.allowedProperties.append( TP_QT_IFACE_CHANNEL + QLatin1String(".TargetID")); RequestableChannelClass fooTextRcc; fooTextRcc.fixedProperties.insert( TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_TEXT); fooTextRcc.fixedProperties.insert( TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), HandleTypeContact); fooTextRcc.allowedProperties.append( TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandle")); fooTextRcc.allowedProperties.append( TP_QT_IFACE_CHANNEL + QLatin1String(".TargetID")); RequestableChannelClassList expectedRccs; expectedRccs.append(ftRcc); expectedRccs.append(fooTextRcc); QCOMPARE(expectedRccs.size(), managerFile.requestableChannelClasses(QLatin1String("foo")).size()); qDebug() << managerFile.requestableChannelClasses(QLatin1String("foo"))[0].fixedProperties; qDebug() << managerFile.requestableChannelClasses(QLatin1String("foo"))[1].fixedProperties; QCOMPARE(ftRcc, managerFile.requestableChannelClasses(QLatin1String("foo"))[0]); QCOMPARE(fooTextRcc, managerFile.requestableChannelClasses(QLatin1String("foo"))[1]); const ParamSpec *param; param = getParam(params, QLatin1String("account")); QCOMPARE(param->flags, (uint) ConnMgrParamFlagRequired | ConnMgrParamFlagHasDefault); QCOMPARE(param->signature, QString(QLatin1String("s"))); param = getParam(params, QLatin1String("password")); QCOMPARE(param->flags, (uint) ConnMgrParamFlagRequired | ConnMgrParamFlagSecret); QCOMPARE(param->signature, QString(QLatin1String("s"))); param = getParam(params, QLatin1String("encryption-key")); QCOMPARE(param->flags, (uint) ConnMgrParamFlagSecret); QCOMPARE(param->signature, QString(QLatin1String("s"))); PresenceSpecList statuses = managerFile.allowedPresenceStatuses(QLatin1String("foo")); QCOMPARE(statuses.size(), 3); PresenceSpec spec; spec = getPresenceSpec(statuses, QLatin1String("offline")); QCOMPARE(spec.isValid(), true); QVERIFY(spec.presence().type() == ConnectionPresenceTypeOffline); QCOMPARE(spec.maySetOnSelf(), false); QCOMPARE(spec.canHaveStatusMessage(), false); spec = getPresenceSpec(statuses, QLatin1String("dnd")); QCOMPARE(spec.isValid(), true); QVERIFY(spec.presence().type() == ConnectionPresenceTypeBusy); QCOMPARE(spec.maySetOnSelf(), true); QCOMPARE(spec.canHaveStatusMessage(), false); spec = getPresenceSpec(statuses, QLatin1String("available")); QCOMPARE(spec.isValid(), true); QVERIFY(spec.presence().type() == ConnectionPresenceTypeAvailable); QCOMPARE(spec.maySetOnSelf(), true); QCOMPARE(spec.canHaveStatusMessage(), true); AvatarSpec avatarReqs = managerFile.avatarRequirements(QLatin1String("foo")); QStringList supportedMimeTypes = avatarReqs.supportedMimeTypes(); supportedMimeTypes.sort(); QCOMPARE(supportedMimeTypes, QStringList() << QLatin1String("image/gif") << QLatin1String("image/jpeg") << QLatin1String("image/png")); QCOMPARE(avatarReqs.minimumHeight(), (uint) 32); QCOMPARE(avatarReqs.maximumHeight(), (uint) 96); QCOMPARE(avatarReqs.recommendedHeight(), (uint) 64); QCOMPARE(avatarReqs.minimumWidth(), (uint) 32); QCOMPARE(avatarReqs.maximumWidth(), (uint) 96); QCOMPARE(avatarReqs.recommendedWidth(), (uint) 64); QCOMPARE(avatarReqs.maximumBytes(), (uint) 8192); params = managerFile.parameters(QLatin1String("somewhat-pathological")); QCOMPARE(containsParam(params, "foo"), true); QCOMPARE(containsParam(params, "semicolons"), true); QCOMPARE(containsParam(params, "list"), true); QCOMPARE(containsParam(params, "unterminated-list"), true); QCOMPARE(containsParam(params, "spaces-in-list"), true); QCOMPARE(containsParam(params, "escaped-semicolon-in-list"), true); QCOMPARE(containsParam(params, "doubly-escaped-semicolon-in-list"), true); QCOMPARE(containsParam(params, "triply-escaped-semicolon-in-list"), true); QCOMPARE(containsParam(params, "empty-list"), true); QCOMPARE(containsParam(params, "escaped-semicolon"), true); QCOMPARE(containsParam(params, "object"), true); QCOMPARE(containsParam(params, "non-existant"), false); param = getParam(params, QLatin1String("foo")); QCOMPARE(param->flags, (uint) ConnMgrParamFlagRequired | ConnMgrParamFlagHasDefault); QCOMPARE(param->signature, QString(QLatin1String("s"))); param = getParam(params, QLatin1String("semicolons")); QCOMPARE(param->flags, (uint) ConnMgrParamFlagSecret | ConnMgrParamFlagHasDefault); QCOMPARE(param->signature, QString(QLatin1String("s"))); param = getParam(params, QLatin1String("list")); QCOMPARE(param->signature, QString(QLatin1String("as"))); QCOMPARE(param->defaultValue.variant().toStringList(), QStringList() << QLatin1String("list") << QLatin1String("of") << QLatin1String("misc")); param = getParam(params, QLatin1String("escaped-semicolon-in-list")); QCOMPARE(param->signature, QString(QLatin1String("as"))); QCOMPARE(param->defaultValue.variant().toStringList(), QStringList() << QLatin1String("list;of") << QLatin1String("misc")); param = getParam(params, QLatin1String("doubly-escaped-semicolon-in-list")); QCOMPARE(param->signature, QString(QLatin1String("as"))); QCOMPARE(param->defaultValue.variant().toStringList(), QStringList() << QLatin1String("list\\") << QLatin1String("of") << QLatin1String("misc")); param = getParam(params, QLatin1String("triply-escaped-semicolon-in-list")); QCOMPARE(param->signature, QString(QLatin1String("as"))); QCOMPARE(param->defaultValue.variant().toStringList(), QStringList() << QLatin1String("list\\;of") << QLatin1String("misc")); param = getParam(params, QLatin1String("empty-list")); QCOMPARE(param->signature, QString(QLatin1String("as"))); QCOMPARE(param->defaultValue.variant().toStringList(), QStringList()); param = getParam(params, QLatin1String("list-of-empty-string")); QCOMPARE(param->signature, QString(QLatin1String("as"))); QCOMPARE(param->defaultValue.variant().toStringList(), QStringList() << QString()); } QTEST_MAIN(TestManagerFile) #include "_gen/manager-file.cpp.moc.hpp" telepathy-qt-0.9.3/HACKING0000644000175200001440000001136412000056607017410 0ustar00collabora-develusers00000000000000Contents: • Version control • Coding style... › ...for C++ code › ...for C and Python code • Submitting patches =============================================================================== Version control =============================================================================== The current development version of telepathy-qt is available from the 'master' branch in the git repository: (for committers) (cgit) Stable branches are available from branches with names like 'telepathy-qt-0.2' in the same repository. =============================================================================== Coding style =============================================================================== For C++ code: ------------- TelepathyQt uses the standard Qt coding style for the Qt/C++ code, as also followed by eg. KDELibs. The coding style is described in more detail in the KDE TechBase at ; in short, it amounts to: * 4 spaces for indentation (no tabs, anywhere) * javaCase for variables and functions (incl. members), FullCamelCase for types * No abbreviations, except for 100% standard ones like regex, refcount, etc. * Type &var and Type *var, not Type& var and Type* var for pointers and refs * Use only one empty line to separate both groups of related statements AND function & class bodies * Use a space after each keyword but none after opening parens (if (true)) * No spaces between the function name and the parens for the parameter list * Surround binary operators with spaces, but don't put spaces between a unary operator and their operand * For function bodies, put the opening curly brace on its own line. For everything else, put the opening curly brace in the same line as the statement (if, for, etc.) associated with it. * Use curly braces even for single-line bodies of conditional statements and loops * Prefer static_cast, const_cast etc over C-style casts * Wrap long lines to 100 characters at most * Use foreach, emit instead of Q_FOREACH/Q_EMIT * Don't write long (> ~5 lines) inline methods unless they are needed because of eg. template * Don't use references to QObjects * Destroy transient objects such as method call watchers as soon as possible rather than accumulating them to long-lived parent objects * Documentation should be in the source file instead of the header file * Public xxxInterface methods' definitions should be added to the end of the public methods declaration. * Always add friend struct Private declaration on classes that have Private structure. * Always add Q_DISABLE_COPY(xxx) to classes that cannot be copied. * Q_DISABLE_COPY(xxx) declaration must be placed on the top of the class definition, before the public keyword. * Methods should be ordered as follows: public public Q_SLOTS Q_SIGNALS protected protected Q_SLOTS private Q_SLOTS private * friend class xxx definitions must be placed right below the private keyword. * All exported classes should use TP_QT_EXPORT macro as following: class TP_QT_EXPORT xxx { ... }; * Every issue in APIs which can (or will) only be fixed later should be marked with a doxygen \todo and have a corresponding fd.o bug filed and mentioned in the \todo annotation For C and Python code: ---------------------- Parts of the regression tests — namely, those parts in tests/lib/glib/ — are taken from telepathy-glib, and are written in C; the majority of the code generation tools — in tools/ — are written in Python. Please follow for these. =============================================================================== Submitting patches =============================================================================== Patches should be made as (preferably) git branches or (last resort) -uNr diffs against upstream git master, as found at: git://anongit.freedesktop.org/telepathy/telepathy-qt ssh://git.freedesktop.org/git/telepathy/telepathy-qt (for committers) http://cgit.freedesktop.org/telepathy/telepathy-qt/ (cgit) Patches can be announced at the freedesktop.org bugzilla, using the product "Telepathy" and component "tp-qt": https://bugs.freedesktop.org/enter_bug.cgi?product=Telepathy&component=tp-qt If submitting a Git branch, please set the URL field of the bug to point to your Git branch. Regardless of whether you are referring to a Git branch or attaching patches, please specify the "patch" keyword on the bug. For details on the code review procedure, see: http://telepathy.freedesktop.org/wiki/Review%20Procedure